{"id":"14f54b855743305c363d1b120138e386","_format":"hh-sol-build-info-1","solcVersion":"0.8.10","solcLongVersion":"0.8.10+commit.fc410830","input":{"language":"Solidity","sources":{"@aave/core-v3/contracts/dependencies/chainlink/AggregatorInterface.sol":{"content":"// SPDX-License-Identifier: MIT\n// Chainlink Contracts v0.8\npragma solidity ^0.8.0;\n\ninterface AggregatorInterface {\n  function latestAnswer() external view returns (int256);\n\n  function latestTimestamp() external view returns (uint256);\n\n  function latestRound() external view returns (uint256);\n\n  function getAnswer(uint256 roundId) external view returns (int256);\n\n  function getTimestamp(uint256 roundId) external view returns (uint256);\n\n  event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 updatedAt);\n\n  event NewRound(uint256 indexed roundId, address indexed startedBy, uint256 startedAt);\n}\n"},"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol":{"content":"// SPDX-License-Identifier: LGPL-3.0-or-later\npragma solidity ^0.8.0;\n\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\n\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\n/// @author Gnosis Developers\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\nlibrary GPv2SafeERC20 {\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\n  /// also when the token returns `false`.\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\n    bytes4 selector_ = token.transfer.selector;\n\n    // solhint-disable-next-line no-inline-assembly\n    assembly {\n      let freeMemoryPointer := mload(0x40)\n      mstore(freeMemoryPointer, selector_)\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\n      mstore(add(freeMemoryPointer, 36), value)\n\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\n        returndatacopy(0, 0, returndatasize())\n        revert(0, returndatasize())\n      }\n    }\n\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\n  }\n\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\n  /// reverts also when the token returns `false`.\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n    bytes4 selector_ = token.transferFrom.selector;\n\n    // solhint-disable-next-line no-inline-assembly\n    assembly {\n      let freeMemoryPointer := mload(0x40)\n      mstore(freeMemoryPointer, selector_)\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\n      mstore(add(freeMemoryPointer, 68), value)\n\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\n        returndatacopy(0, 0, returndatasize())\n        revert(0, returndatasize())\n      }\n    }\n\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\n  }\n\n  /// @dev Verifies that the last return was a successful `transfer*` call.\n  /// This is done by checking that the return data is either empty, or\n  /// is a valid ABI encoded boolean.\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\n    // NOTE: Inspecting previous return data requires assembly. Note that\n    // we write the return data to memory 0 in the case where the return\n    // data size is 32, this is OK since the first 64 bytes of memory are\n    // reserved by Solidy as a scratch space that can be used within\n    // assembly blocks.\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\n    // solhint-disable-next-line no-inline-assembly\n    assembly {\n      /// @dev Revert with an ABI encoded Solidity error with a message\n      /// that fits into 32-bytes.\n      ///\n      /// An ABI encoded Solidity error has the following memory layout:\n      ///\n      /// ------------+----------------------------------\n      ///  byte range | value\n      /// ------------+----------------------------------\n      ///  0x00..0x04 |        selector(\"Error(string)\")\n      ///  0x04..0x24 |      string offset (always 0x20)\n      ///  0x24..0x44 |                    string length\n      ///  0x44..0x64 | string value, padded to 32-bytes\n      function revertWithMessage(length, message) {\n        mstore(0x00, '\\x08\\xc3\\x79\\xa0')\n        mstore(0x04, 0x20)\n        mstore(0x24, length)\n        mstore(0x44, message)\n        revert(0x00, 0x64)\n      }\n\n      switch returndatasize()\n      // Non-standard ERC20 transfer without return.\n      case 0 {\n        // NOTE: When the return data size is 0, verify that there\n        // is code at the address. This is done in order to maintain\n        // compatibility with Solidity calling conventions.\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\n        if iszero(extcodesize(token)) {\n          revertWithMessage(20, 'GPv2: not a contract')\n        }\n\n        success := 1\n      }\n      // Standard ERC20 transfer returning boolean success value.\n      case 32 {\n        returndatacopy(0, 0, returndatasize())\n\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\n        // as `true` for a boolean. In order to stay compatible with\n        // OpenZeppelin's `SafeERC20` library which is known to work\n        // with the existing ERC20 implementation we care about,\n        // make sure we return success for any non-zero return value\n        // from the `transfer*` call.\n        success := iszero(iszero(mload(0)))\n      }\n      default {\n        revertWithMessage(31, 'GPv2: malformed transfer result')\n      }\n    }\n  }\n}\n"},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/AccessControl.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport './IAccessControl.sol';\nimport './Context.sol';\nimport './Strings.sol';\nimport './ERC165.sol';\n\n/**\n * @dev Contract module that allows children to implement role-based access\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\n * members except through off-chain means by accessing the contract event logs. Some\n * applications may benefit from on-chain enumerability, for those cases see\n * {AccessControlEnumerable}.\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 AccessControl is Context, IAccessControl, ERC165 {\n  struct RoleData {\n    mapping(address => bool) 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 Modifier that checks that an account has a specific role. Reverts\n   * with a standardized message including the required role.\n   *\n   * The format of the revert reason is given by the following regular expression:\n   *\n   *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\n   *\n   * _Available since v4.1._\n   */\n  modifier onlyRole(bytes32 role) {\n    _checkRole(role, _msgSender());\n    _;\n  }\n\n  /**\n   * @dev See {IERC165-supportsInterface}.\n   */\n  function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n    return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\n  }\n\n  /**\n   * @dev Returns `true` if `account` has been granted `role`.\n   */\n  function hasRole(bytes32 role, address account) public view override returns (bool) {\n    return _roles[role].members[account];\n  }\n\n  /**\n   * @dev Revert with a standard message if `account` is missing `role`.\n   *\n   * The format of the revert reason is given by the following regular expression:\n   *\n   *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\n   */\n  function _checkRole(bytes32 role, address account) internal view {\n    if (!hasRole(role, account)) {\n      revert(\n        string(\n          abi.encodePacked(\n            'AccessControl: account ',\n            Strings.toHexString(uint160(account), 20),\n            ' is missing role ',\n            Strings.toHexString(uint256(role), 32)\n          )\n        )\n      );\n    }\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 override 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(\n    bytes32 role,\n    address account\n  ) public virtual override onlyRole(getRoleAdmin(role)) {\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(\n    bytes32 role,\n    address account\n  ) public virtual override onlyRole(getRoleAdmin(role)) {\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 override {\n    require(account == _msgSender(), '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    bytes32 previousAdminRole = getRoleAdmin(role);\n    _roles[role].adminRole = adminRole;\n    emit RoleAdminChanged(role, previousAdminRole, adminRole);\n  }\n\n  function _grantRole(bytes32 role, address account) private {\n    if (!hasRole(role, account)) {\n      _roles[role].members[account] = true;\n      emit RoleGranted(role, account, _msgSender());\n    }\n  }\n\n  function _revokeRole(bytes32 role, address account) private {\n    if (hasRole(role, account)) {\n      _roles[role].members[account] = false;\n      emit RoleRevoked(role, account, _msgSender());\n    }\n  }\n}\n"},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\n\npragma solidity ^0.8.0;\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    assembly {\n      size := extcodesize(account)\n    }\n    return size > 0;\n  }\n\n  /**\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n   * `recipient`, forwarding all available gas and reverting on errors.\n   *\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\n   * imposed by `transfer`, making them unable to receive funds via\n   * `transfer`. {sendValue} removes this limitation.\n   *\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n   *\n   * IMPORTANT: because control is transferred to `recipient`, care must be\n   * taken to not create reentrancy vulnerabilities. Consider using\n   * {ReentrancyGuard} or the\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n   */\n  function sendValue(address payable recipient, uint256 amount) internal {\n    require(address(this).balance >= amount, 'Address: insufficient balance');\n\n    (bool success, ) = recipient.call{value: amount}('');\n    require(success, 'Address: unable to send value, recipient may have reverted');\n  }\n\n  /**\n   * @dev Performs a Solidity function call using a low level `call`. A\n   * plain `call` is an unsafe replacement for a function call: use this\n   * function instead.\n   *\n   * If `target` reverts with a revert reason, it is bubbled up by this\n   * function (like regular Solidity function calls).\n   *\n   * Returns the raw returned data. To convert to the expected return value,\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n   *\n   * Requirements:\n   *\n   * - `target` must be a contract.\n   * - calling `target` with `data` must not revert.\n   *\n   * _Available since v3.1._\n   */\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n    return functionCall(target, data, 'Address: low-level call failed');\n  }\n\n  /**\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n   * `errorMessage` as a fallback revert reason when `target` reverts.\n   *\n   * _Available since v3.1._\n   */\n  function functionCall(\n    address target,\n    bytes memory data,\n    string memory errorMessage\n  ) internal returns (bytes memory) {\n    return functionCallWithValue(target, data, 0, errorMessage);\n  }\n\n  /**\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n   * but also transferring `value` wei to `target`.\n   *\n   * Requirements:\n   *\n   * - the calling contract must have an ETH balance of at least `value`.\n   * - the called Solidity function must be `payable`.\n   *\n   * _Available since v3.1._\n   */\n  function functionCallWithValue(\n    address target,\n    bytes memory data,\n    uint256 value\n  ) internal returns (bytes memory) {\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\n  }\n\n  /**\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\n   *\n   * _Available since v3.1._\n   */\n  function functionCallWithValue(\n    address target,\n    bytes memory data,\n    uint256 value,\n    string memory errorMessage\n  ) internal returns (bytes memory) {\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\n    require(isContract(target), 'Address: call to non-contract');\n\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\n    return verifyCallResult(success, returndata, errorMessage);\n  }\n\n  /**\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n   * but performing a static call.\n   *\n   * _Available since v3.3._\n   */\n  function functionStaticCall(\n    address target,\n    bytes memory data\n  ) internal view returns (bytes memory) {\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\n  }\n\n  /**\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n   * but performing a static call.\n   *\n   * _Available since v3.3._\n   */\n  function functionStaticCall(\n    address target,\n    bytes memory data,\n    string memory errorMessage\n  ) internal view returns (bytes memory) {\n    require(isContract(target), 'Address: static call to non-contract');\n\n    (bool success, bytes memory returndata) = target.staticcall(data);\n    return verifyCallResult(success, returndata, errorMessage);\n  }\n\n  /**\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n   * but performing a delegate call.\n   *\n   * _Available since v3.4._\n   */\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\n  }\n\n  /**\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n   * but performing a delegate call.\n   *\n   * _Available since v3.4._\n   */\n  function functionDelegateCall(\n    address target,\n    bytes memory data,\n    string memory errorMessage\n  ) internal returns (bytes memory) {\n    require(isContract(target), 'Address: delegate call to non-contract');\n\n    (bool success, bytes memory returndata) = target.delegatecall(data);\n    return verifyCallResult(success, returndata, errorMessage);\n  }\n\n  /**\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n   * revert reason using the provided one.\n   *\n   * _Available since v4.3._\n   */\n  function verifyCallResult(\n    bool success,\n    bytes memory returndata,\n    string memory errorMessage\n  ) internal pure returns (bytes memory) {\n    if (success) {\n      return returndata;\n    } else {\n      // 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\n        assembly {\n          let returndata_size := mload(returndata)\n          revert(add(32, returndata), returndata_size)\n        }\n      } else {\n        revert(errorMessage);\n      }\n    }\n  }\n}\n"},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n  function _msgSender() internal view virtual returns (address payable) {\n    return payable(msg.sender);\n  }\n\n  function _msgData() internal view virtual returns (bytes memory) {\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n    return msg.data;\n  }\n}\n"},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport './IERC165.sol';\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n  /**\n   * @dev See {IERC165-supportsInterface}.\n   */\n  function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n    return interfaceId == type(IERC165).interfaceId;\n  }\n}\n"},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport './Context.sol';\nimport './IERC20.sol';\nimport './SafeMath.sol';\nimport './Address.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 Context, IERC20 {\n  using SafeMath for uint256;\n  using Address for address;\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(_msgSender(), recipient, amount);\n    return true;\n  }\n\n  /**\n   * @dev See {IERC20-allowance}.\n   */\n  function allowance(\n    address owner,\n    address spender\n  ) 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(_msgSender(), 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   * - `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      _msgSender(),\n      _allowances[sender][_msgSender()].sub(amount, 'ERC20: transfer amount 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(_msgSender(), spender, _allowances[_msgSender()][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(\n    address spender,\n    uint256 subtractedValue\n  ) public virtual returns (bool) {\n    _approve(\n      _msgSender(),\n      spender,\n      _allowances[_msgSender()][spender].sub(\n        subtractedValue,\n        'ERC20: decreased allowance below zero'\n      )\n    );\n    return true;\n  }\n\n  /**\n   * @dev Moves tokens `amount` from `sender` to `recipient`.\n   *\n   * This is internal function is equivalent to {transfer}, and can be used to\n   * e.g. implement automatic token fees, slashing mechanisms, etc.\n   *\n   * Emits a {Transfer} event.\n   *\n   * Requirements:\n   *\n   * - `sender` cannot be the zero address.\n   * - `recipient` cannot be the zero address.\n   * - `sender` must have a balance of at least `amount`.\n   */\n  function _transfer(address sender, address recipient, uint256 amount) internal virtual {\n    require(sender != address(0), 'ERC20: transfer from the zero address');\n    require(recipient != address(0), 'ERC20: transfer to the zero address');\n\n    _beforeTokenTransfer(sender, recipient, amount);\n\n    _balances[sender] = _balances[sender].sub(amount, 'ERC20: transfer amount 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    require(account != address(0), 'ERC20: mint to the zero address');\n\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), 'ERC20: burn from the zero address');\n\n    _beforeTokenTransfer(account, address(0), amount);\n\n    _balances[account] = _balances[account].sub(amount, 'ERC20: burn amount 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 is 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(address owner, address spender, uint256 amount) internal virtual {\n    require(owner != address(0), 'ERC20: approve from the zero address');\n    require(spender != address(0), 'ERC20: approve to the zero address');\n\n    _allowances[owner][spender] = amount;\n    emit Approval(owner, spender, amount);\n  }\n\n  /**\n   * @dev 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(address from, address to, uint256 amount) internal virtual {}\n}\n"},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/**\n * @dev External interface of AccessControl declared to support ERC165 detection.\n */\ninterface IAccessControl {\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(\n    bytes32 indexed role,\n    bytes32 indexed previousAdminRole,\n    bytes32 indexed newAdminRole\n  );\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 {AccessControl-_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) external view returns (bool);\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 {AccessControl-_setRoleAdmin}.\n   */\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\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) external;\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) external;\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) external;\n}\n"},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n  /**\n   * @dev Returns true if this contract implements the interface defined by\n   * `interfaceId`. See the corresponding\n   * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n   * to learn more about how these ids are created.\n   *\n   * This function call must use less than 30 000 gas.\n   */\n  function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n  /**\n   * @dev 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(address sender, address recipient, uint256 amount) 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"},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IERC20} from './IERC20.sol';\n\ninterface IERC20Detailed is IERC20 {\n  function name() external view returns (string memory);\n\n  function symbol() external view returns (string memory);\n\n  function decimals() external view returns (uint8);\n}\n"},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\nimport './Context.sol';\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\ncontract Ownable is Context {\n  address private _owner;\n\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n  /**\n   * @dev Initializes the contract setting the deployer as the initial owner.\n   */\n  constructor() {\n    address msgSender = _msgSender();\n    _owner = msgSender;\n    emit OwnershipTransferred(address(0), msgSender);\n  }\n\n  /**\n   * @dev Returns the address of the current owner.\n   */\n  function owner() public view returns (address) {\n    return _owner;\n  }\n\n  /**\n   * @dev Throws if called by any account other than the owner.\n   */\n  modifier onlyOwner() {\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\n    _;\n  }\n\n  /**\n   * @dev Leaves the contract without owner. It will not be possible to call\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\n   *\n   * NOTE: Renouncing ownership will leave the contract without an owner,\n   * thereby removing any functionality that is only available to the owner.\n   */\n  function renounceOwnership() public virtual onlyOwner {\n    emit OwnershipTransferred(_owner, address(0));\n    _owner = address(0);\n  }\n\n  /**\n   * @dev Transfers ownership of the contract to a new account (`newOwner`).\n   * Can only be called by the current owner.\n   */\n  function transferOwnership(address newOwner) public virtual onlyOwner {\n    require(newOwner != address(0), 'Ownable: new owner is the zero address');\n    emit OwnershipTransferred(_owner, newOwner);\n    _owner = newOwner;\n  }\n}\n"},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\npragma solidity ^0.8.0;\n\n/**\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n * checks.\n *\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n * easily result in undesired exploitation or bugs, since developers usually\n * assume that overflows raise errors. `SafeCast` restores this intuition by\n * reverting the transaction when such an 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 *\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\n * all math on `uint256` and `int256` and then downcasting.\n */\nlibrary SafeCast {\n  /**\n   * @dev Returns the downcasted uint224 from uint256, reverting on\n   * overflow (when the input is greater than largest uint224).\n   *\n   * Counterpart to Solidity's `uint224` operator.\n   *\n   * Requirements:\n   *\n   * - input must fit into 224 bits\n   */\n  function toUint224(uint256 value) internal pure returns (uint224) {\n    require(value <= type(uint224).max, \"SafeCast: value doesn't fit in 224 bits\");\n    return uint224(value);\n  }\n\n  /**\n   * @dev Returns the downcasted uint128 from uint256, reverting on\n   * overflow (when the input is greater than largest uint128).\n   *\n   * Counterpart to Solidity's `uint128` operator.\n   *\n   * Requirements:\n   *\n   * - input must fit into 128 bits\n   */\n  function toUint128(uint256 value) internal pure returns (uint128) {\n    require(value <= type(uint128).max, \"SafeCast: value doesn't fit in 128 bits\");\n    return uint128(value);\n  }\n\n  /**\n   * @dev Returns the downcasted uint96 from uint256, reverting on\n   * overflow (when the input is greater than largest uint96).\n   *\n   * Counterpart to Solidity's `uint96` operator.\n   *\n   * Requirements:\n   *\n   * - input must fit into 96 bits\n   */\n  function toUint96(uint256 value) internal pure returns (uint96) {\n    require(value <= type(uint96).max, \"SafeCast: value doesn't fit in 96 bits\");\n    return uint96(value);\n  }\n\n  /**\n   * @dev Returns the downcasted uint64 from uint256, reverting on\n   * overflow (when the input is greater than largest uint64).\n   *\n   * Counterpart to Solidity's `uint64` operator.\n   *\n   * Requirements:\n   *\n   * - input must fit into 64 bits\n   */\n  function toUint64(uint256 value) internal pure returns (uint64) {\n    require(value <= type(uint64).max, \"SafeCast: value doesn't fit in 64 bits\");\n    return uint64(value);\n  }\n\n  /**\n   * @dev Returns the downcasted uint32 from uint256, reverting on\n   * overflow (when the input is greater than largest uint32).\n   *\n   * Counterpart to Solidity's `uint32` operator.\n   *\n   * Requirements:\n   *\n   * - input must fit into 32 bits\n   */\n  function toUint32(uint256 value) internal pure returns (uint32) {\n    require(value <= type(uint32).max, \"SafeCast: value doesn't fit in 32 bits\");\n    return uint32(value);\n  }\n\n  /**\n   * @dev Returns the downcasted uint16 from uint256, reverting on\n   * overflow (when the input is greater than largest uint16).\n   *\n   * Counterpart to Solidity's `uint16` operator.\n   *\n   * Requirements:\n   *\n   * - input must fit into 16 bits\n   */\n  function toUint16(uint256 value) internal pure returns (uint16) {\n    require(value <= type(uint16).max, \"SafeCast: value doesn't fit in 16 bits\");\n    return uint16(value);\n  }\n\n  /**\n   * @dev Returns the downcasted uint8 from uint256, reverting on\n   * overflow (when the input is greater than largest uint8).\n   *\n   * Counterpart to Solidity's `uint8` operator.\n   *\n   * Requirements:\n   *\n   * - input must fit into 8 bits.\n   */\n  function toUint8(uint256 value) internal pure returns (uint8) {\n    require(value <= type(uint8).max, \"SafeCast: value doesn't fit in 8 bits\");\n    return uint8(value);\n  }\n\n  /**\n   * @dev Converts a signed int256 into an unsigned uint256.\n   *\n   * Requirements:\n   *\n   * - input must be greater than or equal to 0.\n   */\n  function toUint256(int256 value) internal pure returns (uint256) {\n    require(value >= 0, 'SafeCast: value must be positive');\n    return uint256(value);\n  }\n\n  /**\n   * @dev Returns the downcasted int128 from int256, reverting on\n   * overflow (when the input is less than smallest int128 or\n   * greater than largest int128).\n   *\n   * Counterpart to Solidity's `int128` operator.\n   *\n   * Requirements:\n   *\n   * - input must fit into 128 bits\n   *\n   * _Available since v3.1._\n   */\n  function toInt128(int256 value) internal pure returns (int128) {\n    require(\n      value >= type(int128).min && value <= type(int128).max,\n      \"SafeCast: value doesn't fit in 128 bits\"\n    );\n    return int128(value);\n  }\n\n  /**\n   * @dev Returns the downcasted int64 from int256, reverting on\n   * overflow (when the input is less than smallest int64 or\n   * greater than largest int64).\n   *\n   * Counterpart to Solidity's `int64` operator.\n   *\n   * Requirements:\n   *\n   * - input must fit into 64 bits\n   *\n   * _Available since v3.1._\n   */\n  function toInt64(int256 value) internal pure returns (int64) {\n    require(\n      value >= type(int64).min && value <= type(int64).max,\n      \"SafeCast: value doesn't fit in 64 bits\"\n    );\n    return int64(value);\n  }\n\n  /**\n   * @dev Returns the downcasted int32 from int256, reverting on\n   * overflow (when the input is less than smallest int32 or\n   * greater than largest int32).\n   *\n   * Counterpart to Solidity's `int32` operator.\n   *\n   * Requirements:\n   *\n   * - input must fit into 32 bits\n   *\n   * _Available since v3.1._\n   */\n  function toInt32(int256 value) internal pure returns (int32) {\n    require(\n      value >= type(int32).min && value <= type(int32).max,\n      \"SafeCast: value doesn't fit in 32 bits\"\n    );\n    return int32(value);\n  }\n\n  /**\n   * @dev Returns the downcasted int16 from int256, reverting on\n   * overflow (when the input is less than smallest int16 or\n   * greater than largest int16).\n   *\n   * Counterpart to Solidity's `int16` operator.\n   *\n   * Requirements:\n   *\n   * - input must fit into 16 bits\n   *\n   * _Available since v3.1._\n   */\n  function toInt16(int256 value) internal pure returns (int16) {\n    require(\n      value >= type(int16).min && value <= type(int16).max,\n      \"SafeCast: value doesn't fit in 16 bits\"\n    );\n    return int16(value);\n  }\n\n  /**\n   * @dev Returns the downcasted int8 from int256, reverting on\n   * overflow (when the input is less than smallest int8 or\n   * greater than largest int8).\n   *\n   * Counterpart to Solidity's `int8` operator.\n   *\n   * Requirements:\n   *\n   * - input must fit into 8 bits.\n   *\n   * _Available since v3.1._\n   */\n  function toInt8(int256 value) internal pure returns (int8) {\n    require(\n      value >= type(int8).min && value <= type(int8).max,\n      \"SafeCast: value doesn't fit in 8 bits\"\n    );\n    return int8(value);\n  }\n\n  /**\n   * @dev Converts an unsigned uint256 into a signed int256.\n   *\n   * Requirements:\n   *\n   * - input must be less than or equal to maxInt256.\n   */\n  function toInt256(uint256 value) internal pure returns (int256) {\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\n    require(value <= uint256(type(int256).max), \"SafeCast: value doesn't fit in an int256\");\n    return int256(value);\n  }\n}\n"},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.0;\n\nimport './IERC20.sol';\nimport './Address.sol';\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n  using Address for address;\n\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\n    _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\n  }\n\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n    _callOptionalReturn(\n      token,\n      abi.encodeWithSelector(token.transferFrom.selector, from, to, value)\n    );\n  }\n\n  /**\n   * @dev Deprecated. This function has issues similar to the ones found in\n   * {IERC20-approve}, and its usage is discouraged.\n   *\n   * Whenever possible, use {safeIncreaseAllowance} and\n   * {safeDecreaseAllowance} instead.\n   */\n  function safeApprove(IERC20 token, address spender, uint256 value) internal {\n    // safeApprove should only be called when setting an initial allowance,\n    // or when resetting it to zero. To increase and decrease it, use\n    // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\n    require(\n      (value == 0) || (token.allowance(address(this), spender) == 0),\n      'SafeERC20: approve from non-zero to non-zero allowance'\n    );\n    _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\n  }\n\n  function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n    uint256 newAllowance = token.allowance(address(this), spender) + value;\n    _callOptionalReturn(\n      token,\n      abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\n    );\n  }\n\n  function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n    unchecked {\n      uint256 oldAllowance = token.allowance(address(this), spender);\n      require(oldAllowance >= value, 'SafeERC20: decreased allowance below zero');\n      uint256 newAllowance = oldAllowance - value;\n      _callOptionalReturn(\n        token,\n        abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\n      );\n    }\n  }\n\n  /**\n   * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n   * on the return value: the return value is optional (but if data is returned, it must not be false).\n   * @param token The token targeted by the call.\n   * @param data The call data (encoded using abi.encode or one of its variants).\n   */\n  function _callOptionalReturn(IERC20 token, bytes memory data) private {\n    // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n    // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\n    // the target address contains contract code and also asserts for success in the low-level call.\n\n    bytes memory returndata = address(token).functionCall(data, 'SafeERC20: low-level call failed');\n    if (returndata.length > 0) {\n      // Return data is optional\n      require(abi.decode(returndata, (bool)), 'SafeERC20: ERC20 operation did not succeed');\n    }\n  }\n}\n"},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/// @title Optimized overflow and underflow safe math operations\n/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\nlibrary SafeMath {\n  /// @notice Returns x + y, reverts if sum overflows uint256\n  /// @param x The augend\n  /// @param y The addend\n  /// @return z The sum of x and y\n  function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\n    unchecked {\n      require((z = x + y) >= x);\n    }\n  }\n\n  /// @notice Returns x - y, reverts if underflows\n  /// @param x The minuend\n  /// @param y The subtrahend\n  /// @return z The difference of x and y\n  function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\n    unchecked {\n      require((z = x - y) <= x);\n    }\n  }\n\n  /// @notice Returns x - y, reverts if underflows\n  /// @param x The minuend\n  /// @param y The subtrahend\n  /// @param message The error msg\n  /// @return z The difference of x and y\n  function sub(uint256 x, uint256 y, string memory message) internal pure returns (uint256 z) {\n    unchecked {\n      require((z = x - y) <= x, message);\n    }\n  }\n\n  /// @notice Returns x * y, reverts if overflows\n  /// @param x The multiplicand\n  /// @param y The multiplier\n  /// @return z The product of x and y\n  function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\n    unchecked {\n      require(x == 0 || (z = x * y) / x == y);\n    }\n  }\n\n  /// @notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\n  /// @param x The numerator\n  /// @param y The denominator\n  /// @return z The product of x and y\n  function div(uint256 x, uint256 y) internal pure returns (uint256 z) {\n    return x / y;\n  }\n}\n"},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Strings.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n  bytes16 private constant _HEX_SYMBOLS = '0123456789abcdef';\n\n  /**\n   * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n   */\n  function toString(uint256 value) internal pure returns (string memory) {\n    // Inspired by OraclizeAPI's implementation - MIT licence\n    // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\n\n    if (value == 0) {\n      return '0';\n    }\n    uint256 temp = value;\n    uint256 digits;\n    while (temp != 0) {\n      digits++;\n      temp /= 10;\n    }\n    bytes memory buffer = new bytes(digits);\n    while (value != 0) {\n      digits -= 1;\n      buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));\n      value /= 10;\n    }\n    return string(buffer);\n  }\n\n  /**\n   * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n   */\n  function toHexString(uint256 value) internal pure returns (string memory) {\n    if (value == 0) {\n      return '0x00';\n    }\n    uint256 temp = value;\n    uint256 length = 0;\n    while (temp != 0) {\n      length++;\n      temp >>= 8;\n    }\n    return toHexString(value, length);\n  }\n\n  /**\n   * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n   */\n  function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n    bytes memory buffer = new bytes(2 * length + 2);\n    buffer[0] = '0';\n    buffer[1] = 'x';\n    for (uint256 i = 2 * length + 1; i > 1; --i) {\n      buffer[i] = _HEX_SYMBOLS[value & 0xf];\n      value >>= 4;\n    }\n    require(value == 0, 'Strings: hex length insufficient');\n    return string(buffer);\n  }\n}\n"},"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport './UpgradeabilityProxy.sol';\n\n/**\n * @title BaseAdminUpgradeabilityProxy\n * @dev This contract combines an upgradeability proxy with an authorization\n * mechanism for administrative tasks.\n * All external functions in this contract must be guarded by the\n * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\n * feature proposal that would enable this to be done automatically.\n */\ncontract BaseAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\n  /**\n   * @dev Emitted when the administration has been transferred.\n   * @param previousAdmin Address of the previous admin.\n   * @param newAdmin Address of the new admin.\n   */\n  event AdminChanged(address previousAdmin, address newAdmin);\n\n  /**\n   * @dev Storage slot with the admin of the contract.\n   * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n   * validated in the constructor.\n   */\n  bytes32 internal constant ADMIN_SLOT =\n    0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n  /**\n   * @dev Modifier to check whether the `msg.sender` is the admin.\n   * If it is, it will run the function. Otherwise, it will delegate the call\n   * to the implementation.\n   */\n  modifier ifAdmin() {\n    if (msg.sender == _admin()) {\n      _;\n    } else {\n      _fallback();\n    }\n  }\n\n  /**\n   * @return The address of the proxy admin.\n   */\n  function admin() external ifAdmin returns (address) {\n    return _admin();\n  }\n\n  /**\n   * @return The address of the implementation.\n   */\n  function implementation() external ifAdmin returns (address) {\n    return _implementation();\n  }\n\n  /**\n   * @dev Changes the admin of the proxy.\n   * Only the current admin can call this function.\n   * @param newAdmin Address to transfer proxy administration to.\n   */\n  function changeAdmin(address newAdmin) external ifAdmin {\n    require(newAdmin != address(0), 'Cannot change the admin of a proxy to the zero address');\n    emit AdminChanged(_admin(), newAdmin);\n    _setAdmin(newAdmin);\n  }\n\n  /**\n   * @dev Upgrade the backing implementation of the proxy.\n   * Only the admin can call this function.\n   * @param newImplementation Address of the new implementation.\n   */\n  function upgradeTo(address newImplementation) external ifAdmin {\n    _upgradeTo(newImplementation);\n  }\n\n  /**\n   * @dev Upgrade the backing implementation of the proxy and call a function\n   * on the new implementation.\n   * This is useful to initialize the proxied contract.\n   * @param newImplementation Address of the new implementation.\n   * @param data Data to send as msg.data in the low level call.\n   * It should include the signature and the parameters of the function to be called, as described in\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n   */\n  function upgradeToAndCall(\n    address newImplementation,\n    bytes calldata data\n  ) external payable ifAdmin {\n    _upgradeTo(newImplementation);\n    (bool success, ) = newImplementation.delegatecall(data);\n    require(success);\n  }\n\n  /**\n   * @return adm The admin slot.\n   */\n  function _admin() internal view returns (address adm) {\n    bytes32 slot = ADMIN_SLOT;\n    //solium-disable-next-line\n    assembly {\n      adm := sload(slot)\n    }\n  }\n\n  /**\n   * @dev Sets the address of the proxy admin.\n   * @param newAdmin Address of the new proxy admin.\n   */\n  function _setAdmin(address newAdmin) internal {\n    bytes32 slot = ADMIN_SLOT;\n    //solium-disable-next-line\n    assembly {\n      sstore(slot, newAdmin)\n    }\n  }\n\n  /**\n   * @dev Only fall back when the sender is not the admin.\n   */\n  function _willFallback() internal virtual override {\n    require(msg.sender != _admin(), 'Cannot call fallback function from the proxy admin');\n    super._willFallback();\n  }\n}\n"},"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport './Proxy.sol';\nimport '../contracts/Address.sol';\n\n/**\n * @title BaseUpgradeabilityProxy\n * @dev This contract implements a proxy that allows to change the\n * implementation address to which it will delegate.\n * Such a change is called an implementation upgrade.\n */\ncontract BaseUpgradeabilityProxy is Proxy {\n  /**\n   * @dev Emitted when the implementation is upgraded.\n   * @param implementation Address of the new implementation.\n   */\n  event Upgraded(address indexed implementation);\n\n  /**\n   * @dev Storage slot with the address of the current implementation.\n   * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n   * validated in the constructor.\n   */\n  bytes32 internal constant IMPLEMENTATION_SLOT =\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n  /**\n   * @dev Returns the current implementation.\n   * @return impl Address of the current implementation\n   */\n  function _implementation() internal view override returns (address impl) {\n    bytes32 slot = IMPLEMENTATION_SLOT;\n    //solium-disable-next-line\n    assembly {\n      impl := sload(slot)\n    }\n  }\n\n  /**\n   * @dev Upgrades the proxy to a new implementation.\n   * @param newImplementation Address of the new implementation.\n   */\n  function _upgradeTo(address newImplementation) internal {\n    _setImplementation(newImplementation);\n    emit Upgraded(newImplementation);\n  }\n\n  /**\n   * @dev Sets the implementation address of the proxy.\n   * @param newImplementation Address of the new implementation.\n   */\n  function _setImplementation(address newImplementation) internal {\n    require(\n      Address.isContract(newImplementation),\n      'Cannot set a proxy implementation to a non-contract address'\n    );\n\n    bytes32 slot = IMPLEMENTATION_SLOT;\n\n    //solium-disable-next-line\n    assembly {\n      sstore(slot, newImplementation)\n    }\n  }\n}\n"},"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport './BaseAdminUpgradeabilityProxy.sol';\nimport './InitializableUpgradeabilityProxy.sol';\n\n/**\n * @title InitializableAdminUpgradeabilityProxy\n * @dev Extends from BaseAdminUpgradeabilityProxy with an initializer for\n * initializing the implementation, admin, and init data.\n */\ncontract InitializableAdminUpgradeabilityProxy is\n  BaseAdminUpgradeabilityProxy,\n  InitializableUpgradeabilityProxy\n{\n  /**\n   * Contract initializer.\n   * @param logic address of the initial implementation.\n   * @param admin Address of the proxy administrator.\n   * @param data Data to send as msg.data to the implementation to initialize the proxied contract.\n   * It should include the signature and the parameters of the function to be called, as described in\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\n   */\n  function initialize(address logic, address admin, bytes memory data) public payable {\n    require(_implementation() == address(0));\n    InitializableUpgradeabilityProxy.initialize(logic, data);\n    assert(ADMIN_SLOT == bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1));\n    _setAdmin(admin);\n  }\n\n  /**\n   * @dev Only fall back when the sender is not the admin.\n   */\n  function _willFallback() internal override(BaseAdminUpgradeabilityProxy, Proxy) {\n    BaseAdminUpgradeabilityProxy._willFallback();\n  }\n}\n"},"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport './BaseUpgradeabilityProxy.sol';\n\n/**\n * @title InitializableUpgradeabilityProxy\n * @dev Extends BaseUpgradeabilityProxy with an initializer for initializing\n * implementation and init data.\n */\ncontract InitializableUpgradeabilityProxy is BaseUpgradeabilityProxy {\n  /**\n   * @dev Contract initializer.\n   * @param _logic Address of the initial implementation.\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\n   * It should include the signature and the parameters of the function to be called, as described in\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\n   */\n  function initialize(address _logic, bytes memory _data) public payable {\n    require(_implementation() == address(0));\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\n    _setImplementation(_logic);\n    if (_data.length > 0) {\n      (bool success, ) = _logic.delegatecall(_data);\n      require(success);\n    }\n  }\n}\n"},"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @title Proxy\n * @dev Implements delegation of calls to other contracts, with proper\n * forwarding of return values and bubbling of failures.\n * It defines a fallback function that delegates all calls to the address\n * returned by the abstract _implementation() internal function.\n */\nabstract contract Proxy {\n  /**\n   * @dev Fallback function.\n   * Will run if no other function in the contract matches the call data.\n   * Implemented entirely in `_fallback`.\n   */\n  fallback() external payable {\n    _fallback();\n  }\n\n  /**\n   * @return The Address of the implementation.\n   */\n  function _implementation() internal view virtual returns (address);\n\n  /**\n   * @dev Delegates execution to an implementation contract.\n   * This is a low level function that doesn't return to its internal call site.\n   * It will return to the external caller whatever the implementation returns.\n   * @param implementation Address to delegate.\n   */\n  function _delegate(address implementation) internal {\n    //solium-disable-next-line\n    assembly {\n      // Copy msg.data. We take full control of memory in this inline assembly\n      // block because it will not return to Solidity code. We overwrite the\n      // Solidity scratch pad at memory position 0.\n      calldatacopy(0, 0, calldatasize())\n\n      // Call the implementation.\n      // out and outsize are 0 because we don't know the size yet.\n      let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n      // Copy the returned data.\n      returndatacopy(0, 0, returndatasize())\n\n      switch result\n      // delegatecall returns 0 on error.\n      case 0 {\n        revert(0, returndatasize())\n      }\n      default {\n        return(0, returndatasize())\n      }\n    }\n  }\n\n  /**\n   * @dev Function that is run as the first thing in the fallback function.\n   * Can be redefined in derived contracts to add functionality.\n   * Redefinitions must call super._willFallback().\n   */\n  function _willFallback() internal virtual {}\n\n  /**\n   * @dev fallback implementation.\n   * Extracted to enable manual triggering.\n   */\n  function _fallback() internal {\n    _willFallback();\n    _delegate(_implementation());\n  }\n}\n"},"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport './BaseUpgradeabilityProxy.sol';\n\n/**\n * @title UpgradeabilityProxy\n * @dev Extends BaseUpgradeabilityProxy with a constructor for initializing\n * implementation and init data.\n */\ncontract UpgradeabilityProxy is BaseUpgradeabilityProxy {\n  /**\n   * @dev Contract constructor.\n   * @param _logic Address of the initial implementation.\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\n   * It should include the signature and the parameters of the function to be called, as described in\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\n   */\n  constructor(address _logic, bytes memory _data) payable {\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\n    _setImplementation(_logic);\n    if (_data.length > 0) {\n      (bool success, ) = _logic.delegatecall(_data);\n      require(success);\n    }\n  }\n}\n"},"@aave/core-v3/contracts/dependencies/weth/WETH9.sol":{"content":"// Copyright (C) 2015, 2016, 2017 Dapphub\n\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 <http://www.gnu.org/licenses/>.\n\npragma solidity ^0.8.10;\n\ncontract WETH9 {\n  string public name = 'Wrapped Ether';\n  string public symbol = 'WETH';\n  uint8 public decimals = 18;\n\n  event Approval(address indexed src, address indexed guy, uint256 wad);\n  event Transfer(address indexed src, address indexed dst, uint256 wad);\n  event Deposit(address indexed dst, uint256 wad);\n  event Withdrawal(address indexed src, uint256 wad);\n\n  mapping(address => uint256) public balanceOf;\n  mapping(address => mapping(address => uint256)) public allowance;\n\n  receive() external payable {\n    deposit();\n  }\n\n  function deposit() public payable {\n    balanceOf[msg.sender] += msg.value;\n    emit Deposit(msg.sender, msg.value);\n  }\n\n  function withdraw(uint256 wad) public {\n    require(balanceOf[msg.sender] >= wad);\n    balanceOf[msg.sender] -= wad;\n    payable(msg.sender).transfer(wad);\n    emit Withdrawal(msg.sender, wad);\n  }\n\n  function totalSupply() public view returns (uint256) {\n    return address(this).balance;\n  }\n\n  function approve(address guy, uint256 wad) public returns (bool) {\n    allowance[msg.sender][guy] = wad;\n    emit Approval(msg.sender, guy, wad);\n    return true;\n  }\n\n  function transfer(address dst, uint256 wad) public returns (bool) {\n    return transferFrom(msg.sender, dst, wad);\n  }\n\n  function transferFrom(address src, address dst, uint256 wad) public returns (bool) {\n    require(balanceOf[src] >= wad);\n\n    if (src != msg.sender && allowance[src][msg.sender] != type(uint256).max) {\n      require(allowance[src][msg.sender] >= wad);\n      allowance[src][msg.sender] -= wad;\n    }\n\n    balanceOf[src] -= wad;\n    balanceOf[dst] += wad;\n\n    emit Transfer(src, dst, wad);\n\n    return true;\n  }\n}\n\n/*\n                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\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 <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    <program>  Copyright (C) <year>  <name of author>\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<http://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\n\n*/\n"},"@aave/core-v3/contracts/deployments/ReservesSetupHelper.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {PoolConfigurator} from '../protocol/pool/PoolConfigurator.sol';\nimport {Ownable} from '../dependencies/openzeppelin/contracts/Ownable.sol';\n\n/**\n * @title ReservesSetupHelper\n * @author Aave\n * @notice Deployment helper to setup the assets risk parameters at PoolConfigurator in batch.\n * @dev The ReservesSetupHelper is an Ownable contract, so only the deployer or future owners can call this contract.\n */\ncontract ReservesSetupHelper is Ownable {\n  struct ConfigureReserveInput {\n    address asset;\n    uint256 baseLTV;\n    uint256 liquidationThreshold;\n    uint256 liquidationBonus;\n    uint256 reserveFactor;\n    uint256 borrowCap;\n    uint256 supplyCap;\n    bool stableBorrowingEnabled;\n    bool borrowingEnabled;\n    bool flashLoanEnabled;\n  }\n\n  /**\n   * @notice External function called by the owner account to setup the assets risk parameters in batch.\n   * @dev The Pool or Risk admin must transfer the ownership to ReservesSetupHelper before calling this function\n   * @param configurator The address of PoolConfigurator contract\n   * @param inputParams An array of ConfigureReserveInput struct that contains the assets and their risk parameters\n   */\n  function configureReserves(\n    PoolConfigurator configurator,\n    ConfigureReserveInput[] calldata inputParams\n  ) external onlyOwner {\n    for (uint256 i = 0; i < inputParams.length; i++) {\n      configurator.configureReserveAsCollateral(\n        inputParams[i].asset,\n        inputParams[i].baseLTV,\n        inputParams[i].liquidationThreshold,\n        inputParams[i].liquidationBonus\n      );\n\n      if (inputParams[i].borrowingEnabled) {\n        configurator.setReserveBorrowing(inputParams[i].asset, true);\n\n        configurator.setBorrowCap(inputParams[i].asset, inputParams[i].borrowCap);\n        configurator.setReserveStableRateBorrowing(\n          inputParams[i].asset,\n          inputParams[i].stableBorrowingEnabled\n        );\n      }\n      configurator.setReserveFlashLoaning(inputParams[i].asset, inputParams[i].flashLoanEnabled);\n      configurator.setSupplyCap(inputParams[i].asset, inputParams[i].supplyCap);\n      configurator.setReserveFactor(inputParams[i].asset, inputParams[i].reserveFactor);\n    }\n  }\n}\n"},"@aave/core-v3/contracts/flashloan/base/FlashLoanReceiverBase.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IFlashLoanReceiver} from '../interfaces/IFlashLoanReceiver.sol';\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\n\n/**\n * @title FlashLoanReceiverBase\n * @author Aave\n * @notice Base contract to develop a flashloan-receiver contract.\n */\nabstract contract FlashLoanReceiverBase is IFlashLoanReceiver {\n  IPoolAddressesProvider public immutable override ADDRESSES_PROVIDER;\n  IPool public immutable override POOL;\n\n  constructor(IPoolAddressesProvider provider) {\n    ADDRESSES_PROVIDER = provider;\n    POOL = IPool(provider.getPool());\n  }\n}\n"},"@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IFlashLoanSimpleReceiver} from '../interfaces/IFlashLoanSimpleReceiver.sol';\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\n\n/**\n * @title FlashLoanSimpleReceiverBase\n * @author Aave\n * @notice Base contract to develop a flashloan-receiver contract.\n */\nabstract contract FlashLoanSimpleReceiverBase is IFlashLoanSimpleReceiver {\n  IPoolAddressesProvider public immutable override ADDRESSES_PROVIDER;\n  IPool public immutable override POOL;\n\n  constructor(IPoolAddressesProvider provider) {\n    ADDRESSES_PROVIDER = provider;\n    POOL = IPool(provider.getPool());\n  }\n}\n"},"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanReceiver.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\n\n/**\n * @title IFlashLoanReceiver\n * @author Aave\n * @notice Defines the basic interface of a flashloan-receiver contract.\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\n */\ninterface IFlashLoanReceiver {\n  /**\n   * @notice Executes an operation after receiving the flash-borrowed assets\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\n   *      enough funds to repay and has approved the Pool to pull the total amount\n   * @param assets The addresses of the flash-borrowed assets\n   * @param amounts The amounts of the flash-borrowed assets\n   * @param premiums The fee of each flash-borrowed asset\n   * @param initiator The address of the flashloan initiator\n   * @param params The byte-encoded params passed when initiating the flashloan\n   * @return True if the execution of the operation succeeds, false otherwise\n   */\n  function executeOperation(\n    address[] calldata assets,\n    uint256[] calldata amounts,\n    uint256[] calldata premiums,\n    address initiator,\n    bytes calldata params\n  ) external returns (bool);\n\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\n\n  function POOL() external view returns (IPool);\n}\n"},"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\n\n/**\n * @title IFlashLoanSimpleReceiver\n * @author Aave\n * @notice Defines the basic interface of a flashloan-receiver contract.\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\n */\ninterface IFlashLoanSimpleReceiver {\n  /**\n   * @notice Executes an operation after receiving the flash-borrowed asset\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\n   *      enough funds to repay and has approved the Pool to pull the total amount\n   * @param asset The address of the flash-borrowed asset\n   * @param amount The amount of the flash-borrowed asset\n   * @param premium The fee of the flash-borrowed asset\n   * @param initiator The address of the flashloan initiator\n   * @param params The byte-encoded params passed when initiating the flashloan\n   * @return True if the execution of the operation succeeds, false otherwise\n   */\n  function executeOperation(\n    address asset,\n    uint256 amount,\n    uint256 premium,\n    address initiator,\n    bytes calldata params\n  ) external returns (bool);\n\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\n\n  function POOL() external view returns (IPool);\n}\n"},"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @title IAaveIncentivesController\n * @author Aave\n * @notice Defines the basic interface for an Aave Incentives Controller.\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\n */\ninterface IAaveIncentivesController {\n  /**\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\n   * @param user The address of the user whose asset balance has changed\n   * @param totalSupply The total supply of the asset prior to user balance change\n   * @param userBalance The previous user balance prior to balance change\n   */\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\n}\n"},"@aave/core-v3/contracts/interfaces/IAaveOracle.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IPriceOracleGetter} from './IPriceOracleGetter.sol';\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\n\n/**\n * @title IAaveOracle\n * @author Aave\n * @notice Defines the basic interface for the Aave Oracle\n */\ninterface IAaveOracle is IPriceOracleGetter {\n  /**\n   * @dev Emitted after the base currency is set\n   * @param baseCurrency The base currency of used for price quotes\n   * @param baseCurrencyUnit The unit of the base currency\n   */\n  event BaseCurrencySet(address indexed baseCurrency, uint256 baseCurrencyUnit);\n\n  /**\n   * @dev Emitted after the price source of an asset is updated\n   * @param asset The address of the asset\n   * @param source The price source of the asset\n   */\n  event AssetSourceUpdated(address indexed asset, address indexed source);\n\n  /**\n   * @dev Emitted after the address of fallback oracle is updated\n   * @param fallbackOracle The address of the fallback oracle\n   */\n  event FallbackOracleUpdated(address indexed fallbackOracle);\n\n  /**\n   * @notice Returns the PoolAddressesProvider\n   * @return The address of the PoolAddressesProvider contract\n   */\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\n\n  /**\n   * @notice Sets or replaces price sources of assets\n   * @param assets The addresses of the assets\n   * @param sources The addresses of the price sources\n   */\n  function setAssetSources(address[] calldata assets, address[] calldata sources) external;\n\n  /**\n   * @notice Sets the fallback oracle\n   * @param fallbackOracle The address of the fallback oracle\n   */\n  function setFallbackOracle(address fallbackOracle) external;\n\n  /**\n   * @notice Returns a list of prices from a list of assets addresses\n   * @param assets The list of assets addresses\n   * @return The prices of the given assets\n   */\n  function getAssetsPrices(address[] calldata assets) external view returns (uint256[] memory);\n\n  /**\n   * @notice Returns the address of the source for an asset address\n   * @param asset The address of the asset\n   * @return The address of the source\n   */\n  function getSourceOfAsset(address asset) external view returns (address);\n\n  /**\n   * @notice Returns the address of the fallback oracle\n   * @return The address of the fallback oracle\n   */\n  function getFallbackOracle() external view returns (address);\n}\n"},"@aave/core-v3/contracts/interfaces/IACLManager.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\n\n/**\n * @title IACLManager\n * @author Aave\n * @notice Defines the basic interface for the ACL Manager\n */\ninterface IACLManager {\n  /**\n   * @notice Returns the contract address of the PoolAddressesProvider\n   * @return The address of the PoolAddressesProvider\n   */\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\n\n  /**\n   * @notice Returns the identifier of the PoolAdmin role\n   * @return The id of the PoolAdmin role\n   */\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\n\n  /**\n   * @notice Returns the identifier of the EmergencyAdmin role\n   * @return The id of the EmergencyAdmin role\n   */\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\n\n  /**\n   * @notice Returns the identifier of the RiskAdmin role\n   * @return The id of the RiskAdmin role\n   */\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\n\n  /**\n   * @notice Returns the identifier of the FlashBorrower role\n   * @return The id of the FlashBorrower role\n   */\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\n\n  /**\n   * @notice Returns the identifier of the Bridge role\n   * @return The id of the Bridge role\n   */\n  function BRIDGE_ROLE() external view returns (bytes32);\n\n  /**\n   * @notice Returns the identifier of the AssetListingAdmin role\n   * @return The id of the AssetListingAdmin role\n   */\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\n\n  /**\n   * @notice Set the role as admin of a specific role.\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\n   * @param role The role to be managed by the admin role\n   * @param adminRole The admin role\n   */\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\n\n  /**\n   * @notice Adds a new admin as PoolAdmin\n   * @param admin The address of the new admin\n   */\n  function addPoolAdmin(address admin) external;\n\n  /**\n   * @notice Removes an admin as PoolAdmin\n   * @param admin The address of the admin to remove\n   */\n  function removePoolAdmin(address admin) external;\n\n  /**\n   * @notice Returns true if the address is PoolAdmin, false otherwise\n   * @param admin The address to check\n   * @return True if the given address is PoolAdmin, false otherwise\n   */\n  function isPoolAdmin(address admin) external view returns (bool);\n\n  /**\n   * @notice Adds a new admin as EmergencyAdmin\n   * @param admin The address of the new admin\n   */\n  function addEmergencyAdmin(address admin) external;\n\n  /**\n   * @notice Removes an admin as EmergencyAdmin\n   * @param admin The address of the admin to remove\n   */\n  function removeEmergencyAdmin(address admin) external;\n\n  /**\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\n   * @param admin The address to check\n   * @return True if the given address is EmergencyAdmin, false otherwise\n   */\n  function isEmergencyAdmin(address admin) external view returns (bool);\n\n  /**\n   * @notice Adds a new admin as RiskAdmin\n   * @param admin The address of the new admin\n   */\n  function addRiskAdmin(address admin) external;\n\n  /**\n   * @notice Removes an admin as RiskAdmin\n   * @param admin The address of the admin to remove\n   */\n  function removeRiskAdmin(address admin) external;\n\n  /**\n   * @notice Returns true if the address is RiskAdmin, false otherwise\n   * @param admin The address to check\n   * @return True if the given address is RiskAdmin, false otherwise\n   */\n  function isRiskAdmin(address admin) external view returns (bool);\n\n  /**\n   * @notice Adds a new address as FlashBorrower\n   * @param borrower The address of the new FlashBorrower\n   */\n  function addFlashBorrower(address borrower) external;\n\n  /**\n   * @notice Removes an address as FlashBorrower\n   * @param borrower The address of the FlashBorrower to remove\n   */\n  function removeFlashBorrower(address borrower) external;\n\n  /**\n   * @notice Returns true if the address is FlashBorrower, false otherwise\n   * @param borrower The address to check\n   * @return True if the given address is FlashBorrower, false otherwise\n   */\n  function isFlashBorrower(address borrower) external view returns (bool);\n\n  /**\n   * @notice Adds a new address as Bridge\n   * @param bridge The address of the new Bridge\n   */\n  function addBridge(address bridge) external;\n\n  /**\n   * @notice Removes an address as Bridge\n   * @param bridge The address of the bridge to remove\n   */\n  function removeBridge(address bridge) external;\n\n  /**\n   * @notice Returns true if the address is Bridge, false otherwise\n   * @param bridge The address to check\n   * @return True if the given address is Bridge, false otherwise\n   */\n  function isBridge(address bridge) external view returns (bool);\n\n  /**\n   * @notice Adds a new admin as AssetListingAdmin\n   * @param admin The address of the new admin\n   */\n  function addAssetListingAdmin(address admin) external;\n\n  /**\n   * @notice Removes an admin as AssetListingAdmin\n   * @param admin The address of the admin to remove\n   */\n  function removeAssetListingAdmin(address admin) external;\n\n  /**\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\n   * @param admin The address to check\n   * @return True if the given address is AssetListingAdmin, false otherwise\n   */\n  function isAssetListingAdmin(address admin) external view returns (bool);\n}\n"},"@aave/core-v3/contracts/interfaces/IAToken.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\nimport {IInitializableAToken} from './IInitializableAToken.sol';\n\n/**\n * @title IAToken\n * @author Aave\n * @notice Defines the basic interface for an AToken.\n */\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\n  /**\n   * @dev Emitted during the transfer action\n   * @param from The user whose tokens are being transferred\n   * @param to The recipient\n   * @param value The scaled amount being transferred\n   * @param index The next liquidity index of the reserve\n   */\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\n\n  /**\n   * @notice Mints `amount` aTokens to `user`\n   * @param caller The address performing the mint\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\n   * @param amount The amount of tokens getting minted\n   * @param index The next liquidity index of the reserve\n   * @return `true` if the the previous balance of the user was 0\n   */\n  function mint(\n    address caller,\n    address onBehalfOf,\n    uint256 amount,\n    uint256 index\n  ) external returns (bool);\n\n  /**\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\n   * @dev In some instances, the mint event could be emitted from a burn transaction\n   * if the amount to burn is less than the interest that the user accrued\n   * @param from The address from which the aTokens will be burned\n   * @param receiverOfUnderlying The address that will receive the underlying\n   * @param amount The amount being burned\n   * @param index The next liquidity index of the reserve\n   */\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\n\n  /**\n   * @notice Mints aTokens to the reserve treasury\n   * @param amount The amount of tokens getting minted\n   * @param index The next liquidity index of the reserve\n   */\n  function mintToTreasury(uint256 amount, uint256 index) external;\n\n  /**\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\n   * @param from The address getting liquidated, current owner of the aTokens\n   * @param to The recipient\n   * @param value The amount of tokens getting transferred\n   */\n  function transferOnLiquidation(address from, address to, uint256 value) external;\n\n  /**\n   * @notice Transfers the underlying asset to `target`.\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\n   * @param target The recipient of the underlying\n   * @param amount The amount getting transferred\n   */\n  function transferUnderlyingTo(address target, uint256 amount) external;\n\n  /**\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\n   * @param user The user executing the repayment\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\n   * @param amount The amount getting repaid\n   */\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\n\n  /**\n   * @notice Allow passing a signed message to approve spending\n   * @dev implements the permit function as for\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\n   * @param owner The owner of the funds\n   * @param spender The spender\n   * @param value The amount\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\n   * @param v Signature param\n   * @param s Signature param\n   * @param r Signature param\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\n   * @return The address of the underlying asset\n   */\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\n\n  /**\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\n   * @return Address of the Aave treasury\n   */\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\n\n  /**\n   * @notice Get the domain separator for the token\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\n   * @return The domain separator of the token at current chain\n   */\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\n\n  /**\n   * @notice Returns the nonce for owner.\n   * @param owner The address of the owner\n   * @return The nonce of the owner\n   */\n  function nonces(address owner) external view returns (uint256);\n\n  /**\n   * @notice Rescue and transfer tokens locked in this contract\n   * @param token The address of the token\n   * @param to The address of the recipient\n   * @param amount The amount of token to transfer\n   */\n  function rescueTokens(address token, address to, uint256 amount) external;\n}\n"},"@aave/core-v3/contracts/interfaces/ICreditDelegationToken.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @title ICreditDelegationToken\n * @author Aave\n * @notice Defines the basic interface for a token supporting credit delegation.\n */\ninterface ICreditDelegationToken {\n  /**\n   * @dev Emitted on `approveDelegation` and `borrowAllowance\n   * @param fromUser The address of the delegator\n   * @param toUser The address of the delegatee\n   * @param asset The address of the delegated asset\n   * @param amount The amount being delegated\n   */\n  event BorrowAllowanceDelegated(\n    address indexed fromUser,\n    address indexed toUser,\n    address indexed asset,\n    uint256 amount\n  );\n\n  /**\n   * @notice Delegates borrowing power to a user on the specific debt token.\n   * Delegation will still respect the liquidation constraints (even if delegated, a\n   * delegatee cannot force a delegator HF to go below 1)\n   * @param delegatee The address receiving the delegated borrowing power\n   * @param amount The maximum amount being delegated.\n   */\n  function approveDelegation(address delegatee, uint256 amount) external;\n\n  /**\n   * @notice Returns the borrow allowance of the user\n   * @param fromUser The user to giving allowance\n   * @param toUser The user to give allowance to\n   * @return The current allowance of `toUser`\n   */\n  function borrowAllowance(address fromUser, address toUser) external view returns (uint256);\n\n  /**\n   * @notice Delegates borrowing power to a user on the specific debt token via ERC712 signature\n   * @param delegator The delegator of the credit\n   * @param delegatee The delegatee that can use the credit\n   * @param value The amount to be delegated\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\n   * @param v The V signature param\n   * @param s The S signature param\n   * @param r The R signature param\n   */\n  function delegationWithSig(\n    address delegator,\n    address delegatee,\n    uint256 value,\n    uint256 deadline,\n    uint8 v,\n    bytes32 r,\n    bytes32 s\n  ) external;\n}\n"},"@aave/core-v3/contracts/interfaces/IDefaultInterestRateStrategy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IReserveInterestRateStrategy} from './IReserveInterestRateStrategy.sol';\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\n\n/**\n * @title IDefaultInterestRateStrategy\n * @author Aave\n * @notice Defines the basic interface of the DefaultReserveInterestRateStrategy\n */\ninterface IDefaultInterestRateStrategy is IReserveInterestRateStrategy {\n  /**\n   * @notice Returns the usage ratio at which the pool aims to obtain most competitive borrow rates.\n   * @return The optimal usage ratio, expressed in ray.\n   */\n  function OPTIMAL_USAGE_RATIO() external view returns (uint256);\n\n  /**\n   * @notice Returns the optimal stable to total debt ratio of the reserve.\n   * @return The optimal stable to total debt ratio, expressed in ray.\n   */\n  function OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO() external view returns (uint256);\n\n  /**\n   * @notice Returns the excess usage ratio above the optimal.\n   * @dev It's always equal to 1-optimal usage ratio (added as constant for gas optimizations)\n   * @return The max excess usage ratio, expressed in ray.\n   */\n  function MAX_EXCESS_USAGE_RATIO() external view returns (uint256);\n\n  /**\n   * @notice Returns the excess stable debt ratio above the optimal.\n   * @dev It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations)\n   * @return The max excess stable to total debt ratio, expressed in ray.\n   */\n  function MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO() external view returns (uint256);\n\n  /**\n   * @notice Returns the address of the PoolAddressesProvider\n   * @return The address of the PoolAddressesProvider contract\n   */\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\n\n  /**\n   * @notice Returns the variable rate slope below optimal usage ratio\n   * @dev It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\n   * @return The variable rate slope, expressed in ray\n   */\n  function getVariableRateSlope1() external view returns (uint256);\n\n  /**\n   * @notice Returns the variable rate slope above optimal usage ratio\n   * @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\n   * @return The variable rate slope, expressed in ray\n   */\n  function getVariableRateSlope2() external view returns (uint256);\n\n  /**\n   * @notice Returns the stable rate slope below optimal usage ratio\n   * @dev It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\n   * @return The stable rate slope, expressed in ray\n   */\n  function getStableRateSlope1() external view returns (uint256);\n\n  /**\n   * @notice Returns the stable rate slope above optimal usage ratio\n   * @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\n   * @return The stable rate slope, expressed in ray\n   */\n  function getStableRateSlope2() external view returns (uint256);\n\n  /**\n   * @notice Returns the stable rate excess offset\n   * @dev It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\n   * @return The stable rate excess offset, expressed in ray\n   */\n  function getStableRateExcessOffset() external view returns (uint256);\n\n  /**\n   * @notice Returns the base stable borrow rate\n   * @return The base stable borrow rate, expressed in ray\n   */\n  function getBaseStableBorrowRate() external view returns (uint256);\n\n  /**\n   * @notice Returns the base variable borrow rate\n   * @return The base variable borrow rate, expressed in ray\n   */\n  function getBaseVariableBorrowRate() external view returns (uint256);\n\n  /**\n   * @notice Returns the maximum variable borrow rate\n   * @return The maximum variable borrow rate, expressed in ray\n   */\n  function getMaxVariableBorrowRate() external view returns (uint256);\n}\n"},"@aave/core-v3/contracts/interfaces/IDelegationToken.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @title IDelegationToken\n * @author Aave\n * @notice Implements an interface for tokens with delegation COMP/UNI compatible\n */\ninterface IDelegationToken {\n  /**\n   * @notice Delegate voting power to a delegatee\n   * @param delegatee The address of the delegatee\n   */\n  function delegate(address delegatee) external;\n}\n"},"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\n\n/**\n * @title IERC20WithPermit\n * @author Aave\n * @notice Interface for the permit function (EIP-2612)\n */\ninterface IERC20WithPermit is IERC20 {\n  /**\n   * @notice Allow passing a signed message to approve spending\n   * @dev implements the permit function as for\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\n   * @param owner The owner of the funds\n   * @param spender The spender\n   * @param value The amount\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\n   * @param v Signature param\n   * @param s Signature param\n   * @param r Signature param\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"},"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\nimport {IPool} from './IPool.sol';\n\n/**\n * @title IInitializableAToken\n * @author Aave\n * @notice Interface for the initialize function on AToken\n */\ninterface IInitializableAToken {\n  /**\n   * @dev Emitted when an aToken is initialized\n   * @param underlyingAsset The address of the underlying asset\n   * @param pool The address of the associated pool\n   * @param treasury The address of the treasury\n   * @param incentivesController The address of the incentives controller for this aToken\n   * @param aTokenDecimals The decimals of the underlying\n   * @param aTokenName The name of the aToken\n   * @param aTokenSymbol The symbol of the aToken\n   * @param params A set of encoded parameters for additional initialization\n   */\n  event Initialized(\n    address indexed underlyingAsset,\n    address indexed pool,\n    address treasury,\n    address incentivesController,\n    uint8 aTokenDecimals,\n    string aTokenName,\n    string aTokenSymbol,\n    bytes params\n  );\n\n  /**\n   * @notice Initializes the aToken\n   * @param pool The pool contract that is initializing this contract\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\n   * @param incentivesController The smart contract managing potential incentives distribution\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\n   * @param aTokenName The name of the aToken\n   * @param aTokenSymbol The symbol of the aToken\n   * @param params A set of encoded parameters for additional initialization\n   */\n  function initialize(\n    IPool pool,\n    address treasury,\n    address underlyingAsset,\n    IAaveIncentivesController incentivesController,\n    uint8 aTokenDecimals,\n    string calldata aTokenName,\n    string calldata aTokenSymbol,\n    bytes calldata params\n  ) external;\n}\n"},"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\nimport {IPool} from './IPool.sol';\n\n/**\n * @title IInitializableDebtToken\n * @author Aave\n * @notice Interface for the initialize function common between debt tokens\n */\ninterface IInitializableDebtToken {\n  /**\n   * @dev Emitted when a debt token is initialized\n   * @param underlyingAsset The address of the underlying asset\n   * @param pool The address of the associated pool\n   * @param incentivesController The address of the incentives controller for this aToken\n   * @param debtTokenDecimals The decimals of the debt token\n   * @param debtTokenName The name of the debt token\n   * @param debtTokenSymbol The symbol of the debt token\n   * @param params A set of encoded parameters for additional initialization\n   */\n  event Initialized(\n    address indexed underlyingAsset,\n    address indexed pool,\n    address incentivesController,\n    uint8 debtTokenDecimals,\n    string debtTokenName,\n    string debtTokenSymbol,\n    bytes params\n  );\n\n  /**\n   * @notice Initializes the debt token.\n   * @param pool The pool contract that is initializing this contract\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\n   * @param incentivesController The smart contract managing potential incentives distribution\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\n   * @param debtTokenName The name of the token\n   * @param debtTokenSymbol The symbol of the token\n   * @param params A set of encoded parameters for additional initialization\n   */\n  function initialize(\n    IPool pool,\n    address underlyingAsset,\n    IAaveIncentivesController incentivesController,\n    uint8 debtTokenDecimals,\n    string memory debtTokenName,\n    string memory debtTokenSymbol,\n    bytes calldata params\n  ) external;\n}\n"},"@aave/core-v3/contracts/interfaces/IPool.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\n\n/**\n * @title IPool\n * @author Aave\n * @notice Defines the basic interface for an Aave Pool.\n */\ninterface IPool {\n  /**\n   * @dev Emitted on mintUnbacked()\n   * @param reserve The address of the underlying asset of the reserve\n   * @param user The address initiating the supply\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\n   * @param amount The amount of supplied assets\n   * @param referralCode The referral code used\n   */\n  event MintUnbacked(\n    address indexed reserve,\n    address user,\n    address indexed onBehalfOf,\n    uint256 amount,\n    uint16 indexed referralCode\n  );\n\n  /**\n   * @dev Emitted on backUnbacked()\n   * @param reserve The address of the underlying asset of the reserve\n   * @param backer The address paying for the backing\n   * @param amount The amount added as backing\n   * @param fee The amount paid in fees\n   */\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\n\n  /**\n   * @dev Emitted on supply()\n   * @param reserve The address of the underlying asset of the reserve\n   * @param user The address initiating the supply\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\n   * @param amount The amount supplied\n   * @param referralCode The referral code used\n   */\n  event Supply(\n    address indexed reserve,\n    address user,\n    address indexed onBehalfOf,\n    uint256 amount,\n    uint16 indexed referralCode\n  );\n\n  /**\n   * @dev Emitted on withdraw()\n   * @param reserve The address of the underlying asset being withdrawn\n   * @param user The address initiating the withdrawal, owner of aTokens\n   * @param to The address that will receive the underlying\n   * @param amount The amount to be withdrawn\n   */\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\n\n  /**\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\n   * @param reserve The address of the underlying asset being borrowed\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\n   * initiator of the transaction on flashLoan()\n   * @param onBehalfOf The address that will be getting the debt\n   * @param amount The amount borrowed out\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\n   * @param referralCode The referral code used\n   */\n  event Borrow(\n    address indexed reserve,\n    address user,\n    address indexed onBehalfOf,\n    uint256 amount,\n    DataTypes.InterestRateMode interestRateMode,\n    uint256 borrowRate,\n    uint16 indexed referralCode\n  );\n\n  /**\n   * @dev Emitted on repay()\n   * @param reserve The address of the underlying asset of the reserve\n   * @param user The beneficiary of the repayment, getting his debt reduced\n   * @param repayer The address of the user initiating the repay(), providing the funds\n   * @param amount The amount repaid\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\n   */\n  event Repay(\n    address indexed reserve,\n    address indexed user,\n    address indexed repayer,\n    uint256 amount,\n    bool useATokens\n  );\n\n  /**\n   * @dev Emitted on swapBorrowRateMode()\n   * @param reserve The address of the underlying asset of the reserve\n   * @param user The address of the user swapping his rate mode\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\n   */\n  event SwapBorrowRateMode(\n    address indexed reserve,\n    address indexed user,\n    DataTypes.InterestRateMode interestRateMode\n  );\n\n  /**\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\n   * @param asset The address of the underlying asset of the reserve\n   * @param totalDebt The total isolation mode debt for the reserve\n   */\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\n\n  /**\n   * @dev Emitted when the user selects a certain asset category for eMode\n   * @param user The address of the user\n   * @param categoryId The category id\n   */\n  event UserEModeSet(address indexed user, uint8 categoryId);\n\n  /**\n   * @dev Emitted on setUserUseReserveAsCollateral()\n   * @param reserve The address of the underlying asset of the reserve\n   * @param user The address of the user enabling the usage as collateral\n   */\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\n\n  /**\n   * @dev Emitted on setUserUseReserveAsCollateral()\n   * @param reserve The address of the underlying asset of the reserve\n   * @param user The address of the user enabling the usage as collateral\n   */\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\n\n  /**\n   * @dev Emitted on rebalanceStableBorrowRate()\n   * @param reserve The address of the underlying asset of the reserve\n   * @param user The address of the user for which the rebalance has been executed\n   */\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\n\n  /**\n   * @dev Emitted on flashLoan()\n   * @param target The address of the flash loan receiver contract\n   * @param initiator The address initiating the flash loan\n   * @param asset The address of the asset being flash borrowed\n   * @param amount The amount flash borrowed\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\n   * @param premium The fee flash borrowed\n   * @param referralCode The referral code used\n   */\n  event FlashLoan(\n    address indexed target,\n    address initiator,\n    address indexed asset,\n    uint256 amount,\n    DataTypes.InterestRateMode interestRateMode,\n    uint256 premium,\n    uint16 indexed referralCode\n  );\n\n  /**\n   * @dev Emitted when a borrower is liquidated.\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\n   * @param user The address of the borrower getting liquidated\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\n   * @param liquidator The address of the liquidator\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\n   * to receive the underlying collateral asset directly\n   */\n  event LiquidationCall(\n    address indexed collateralAsset,\n    address indexed debtAsset,\n    address indexed user,\n    uint256 debtToCover,\n    uint256 liquidatedCollateralAmount,\n    address liquidator,\n    bool receiveAToken\n  );\n\n  /**\n   * @dev Emitted when the state of a reserve is updated.\n   * @param reserve The address of the underlying asset of the reserve\n   * @param liquidityRate The next liquidity rate\n   * @param stableBorrowRate The next stable borrow rate\n   * @param variableBorrowRate The next variable borrow rate\n   * @param liquidityIndex The next liquidity index\n   * @param variableBorrowIndex The next variable borrow index\n   */\n  event ReserveDataUpdated(\n    address indexed reserve,\n    uint256 liquidityRate,\n    uint256 stableBorrowRate,\n    uint256 variableBorrowRate,\n    uint256 liquidityIndex,\n    uint256 variableBorrowIndex\n  );\n\n  /**\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\n   * @param reserve The address of the reserve\n   * @param amountMinted The amount minted to the treasury\n   */\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\n\n  /**\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\n   * @param asset The address of the underlying asset to mint\n   * @param amount The amount to mint\n   * @param onBehalfOf The address that will receive the aTokens\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n   *   0 if the action is executed directly by the user, without any middle-man\n   */\n  function mintUnbacked(\n    address asset,\n    uint256 amount,\n    address onBehalfOf,\n    uint16 referralCode\n  ) external;\n\n  /**\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\n   * @param asset The address of the underlying asset to back\n   * @param amount The amount to back\n   * @param fee The amount paid in fees\n   * @return The backed amount\n   */\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\n\n  /**\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\n   * @param asset The address of the underlying asset to supply\n   * @param amount The amount to be supplied\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\n   *   is a different wallet\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n   *   0 if the action is executed directly by the user, without any middle-man\n   */\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\n\n  /**\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\n   * @param asset The address of the underlying asset to supply\n   * @param amount The amount to be supplied\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\n   *   is a different wallet\n   * @param deadline The deadline timestamp that the permit is valid\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n   *   0 if the action is executed directly by the user, without any middle-man\n   * @param permitV The V parameter of ERC712 permit sig\n   * @param permitR The R parameter of ERC712 permit sig\n   * @param permitS The S parameter of ERC712 permit sig\n   */\n  function supplyWithPermit(\n    address asset,\n    uint256 amount,\n    address onBehalfOf,\n    uint16 referralCode,\n    uint256 deadline,\n    uint8 permitV,\n    bytes32 permitR,\n    bytes32 permitS\n  ) external;\n\n  /**\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\n   * @param asset The address of the underlying asset to withdraw\n   * @param amount The underlying amount to be withdrawn\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\n   * @param to The address that will receive the underlying, same as msg.sender if the user\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\n   *   different wallet\n   * @return The final amount withdrawn\n   */\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\n\n  /**\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\n   * @param asset The address of the underlying asset to borrow\n   * @param amount The amount to be borrowed\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\n   *   0 if the action is executed directly by the user, without any middle-man\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\n   * if he has been given credit delegation allowance\n   */\n  function borrow(\n    address asset,\n    uint256 amount,\n    uint256 interestRateMode,\n    uint16 referralCode,\n    address onBehalfOf\n  ) external;\n\n  /**\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\n   * @param asset The address of the borrowed underlying asset previously borrowed\n   * @param amount The amount to repay\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\n   * other borrower whose debt should be removed\n   * @return The final amount repaid\n   */\n  function repay(\n    address asset,\n    uint256 amount,\n    uint256 interestRateMode,\n    address onBehalfOf\n  ) external returns (uint256);\n\n  /**\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\n   * @param asset The address of the borrowed underlying asset previously borrowed\n   * @param amount The amount to repay\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\n   * other borrower whose debt should be removed\n   * @param deadline The deadline timestamp that the permit is valid\n   * @param permitV The V parameter of ERC712 permit sig\n   * @param permitR The R parameter of ERC712 permit sig\n   * @param permitS The S parameter of ERC712 permit sig\n   * @return The final amount repaid\n   */\n  function repayWithPermit(\n    address asset,\n    uint256 amount,\n    uint256 interestRateMode,\n    address onBehalfOf,\n    uint256 deadline,\n    uint8 permitV,\n    bytes32 permitR,\n    bytes32 permitS\n  ) external returns (uint256);\n\n  /**\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\n   * equivalent debt tokens\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\n   * balance is not enough to cover the whole debt\n   * @param asset The address of the borrowed underlying asset previously borrowed\n   * @param amount The amount to repay\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\n   * @return The final amount repaid\n   */\n  function repayWithATokens(\n    address asset,\n    uint256 amount,\n    uint256 interestRateMode\n  ) external returns (uint256);\n\n  /**\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\n   * @param asset The address of the underlying asset borrowed\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\n   */\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\n\n  /**\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\n   * - Users can be rebalanced if the following conditions are satisfied:\n   *     1. Usage ratio is above 95%\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\n   * @param asset The address of the underlying asset borrowed\n   * @param user The address of the user to be rebalanced\n   */\n  function rebalanceStableBorrowRate(address asset, address user) external;\n\n  /**\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\n   * @param asset The address of the underlying asset supplied\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\n   */\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\n\n  /**\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\n   * @param user The address of the borrower getting liquidated\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\n   * to receive the underlying collateral asset directly\n   */\n  function liquidationCall(\n    address collateralAsset,\n    address debtAsset,\n    address user,\n    uint256 debtToCover,\n    bool receiveAToken\n  ) external;\n\n  /**\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\n   * as long as the amount taken plus a fee is returned.\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\n   * into consideration. For further details please visit https://docs.aave.com/developers/\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\n   * @param assets The addresses of the assets being flash-borrowed\n   * @param amounts The amounts of the assets being flash-borrowed\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\n   * @param params Variadic packed params to pass to the receiver as extra information\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\n   *   0 if the action is executed directly by the user, without any middle-man\n   */\n  function flashLoan(\n    address receiverAddress,\n    address[] calldata assets,\n    uint256[] calldata amounts,\n    uint256[] calldata interestRateModes,\n    address onBehalfOf,\n    bytes calldata params,\n    uint16 referralCode\n  ) external;\n\n  /**\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\n   * as long as the amount taken plus a fee is returned.\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\n   * into consideration. For further details please visit https://docs.aave.com/developers/\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\n   * @param asset The address of the asset being flash-borrowed\n   * @param amount The amount of the asset being flash-borrowed\n   * @param params Variadic packed params to pass to the receiver as extra information\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\n   *   0 if the action is executed directly by the user, without any middle-man\n   */\n  function flashLoanSimple(\n    address receiverAddress,\n    address asset,\n    uint256 amount,\n    bytes calldata params,\n    uint16 referralCode\n  ) external;\n\n  /**\n   * @notice Returns the user account data across all the reserves\n   * @param user The address of the user\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\n   * @return currentLiquidationThreshold The liquidation threshold of the user\n   * @return ltv The loan to value of The user\n   * @return healthFactor The current health factor of the user\n   */\n  function getUserAccountData(\n    address user\n  )\n    external\n    view\n    returns (\n      uint256 totalCollateralBase,\n      uint256 totalDebtBase,\n      uint256 availableBorrowsBase,\n      uint256 currentLiquidationThreshold,\n      uint256 ltv,\n      uint256 healthFactor\n    );\n\n  /**\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\n   * interest rate strategy\n   * @dev Only callable by the PoolConfigurator contract\n   * @param asset The address of the underlying asset of the reserve\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\n   */\n  function initReserve(\n    address asset,\n    address aTokenAddress,\n    address stableDebtAddress,\n    address variableDebtAddress,\n    address interestRateStrategyAddress\n  ) external;\n\n  /**\n   * @notice Drop a reserve\n   * @dev Only callable by the PoolConfigurator contract\n   * @param asset The address of the underlying asset of the reserve\n   */\n  function dropReserve(address asset) external;\n\n  /**\n   * @notice Updates the address of the interest rate strategy contract\n   * @dev Only callable by the PoolConfigurator contract\n   * @param asset The address of the underlying asset of the reserve\n   * @param rateStrategyAddress The address of the interest rate strategy contract\n   */\n  function setReserveInterestRateStrategyAddress(\n    address asset,\n    address rateStrategyAddress\n  ) external;\n\n  /**\n   * @notice Sets the configuration bitmap of the reserve as a whole\n   * @dev Only callable by the PoolConfigurator contract\n   * @param asset The address of the underlying asset of the reserve\n   * @param configuration The new configuration bitmap\n   */\n  function setConfiguration(\n    address asset,\n    DataTypes.ReserveConfigurationMap calldata configuration\n  ) external;\n\n  /**\n   * @notice Returns the configuration of the reserve\n   * @param asset The address of the underlying asset of the reserve\n   * @return The configuration of the reserve\n   */\n  function getConfiguration(\n    address asset\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\n\n  /**\n   * @notice Returns the configuration of the user across all the reserves\n   * @param user The user address\n   * @return The configuration of the user\n   */\n  function getUserConfiguration(\n    address user\n  ) external view returns (DataTypes.UserConfigurationMap memory);\n\n  /**\n   * @notice Returns the normalized income of the reserve\n   * @param asset The address of the underlying asset of the reserve\n   * @return The reserve's normalized income\n   */\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\n\n  /**\n   * @notice Returns the normalized variable debt per unit of asset\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\n   * \"dynamic\" variable index based on time, current stored index and virtual rate at the current\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\n   * combination with variable debt supply/balances.\n   * If using this function externally, consider that is possible to have an increasing normalized\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\n   * (e.g. only updates with non-zero variable debt supply)\n   * @param asset The address of the underlying asset of the reserve\n   * @return The reserve normalized variable debt\n   */\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\n\n  /**\n   * @notice Returns the state and configuration of the reserve\n   * @param asset The address of the underlying asset of the reserve\n   * @return The state and configuration data of the reserve\n   */\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\n\n  /**\n   * @notice Validates and finalizes an aToken transfer\n   * @dev Only callable by the overlying aToken of the `asset`\n   * @param asset The address of the underlying asset of the aToken\n   * @param from The user from which the aTokens are transferred\n   * @param to The user receiving the aTokens\n   * @param amount The amount being transferred/withdrawn\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\n   */\n  function finalizeTransfer(\n    address asset,\n    address from,\n    address to,\n    uint256 amount,\n    uint256 balanceFromBefore,\n    uint256 balanceToBefore\n  ) external;\n\n  /**\n   * @notice Returns the list of the underlying assets of all the initialized reserves\n   * @dev It does not include dropped reserves\n   * @return The addresses of the underlying assets of the initialized reserves\n   */\n  function getReservesList() external view returns (address[] memory);\n\n  /**\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\n   * @return The address of the reserve associated with id\n   */\n  function getReserveAddressById(uint16 id) external view returns (address);\n\n  /**\n   * @notice Returns the PoolAddressesProvider connected to this contract\n   * @return The address of the PoolAddressesProvider\n   */\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\n\n  /**\n   * @notice Updates the protocol fee on the bridging\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\n   */\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\n\n  /**\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\n   * - A part is sent to aToken holders as extra, one time accumulated interest\n   * - A part is collected by the protocol treasury\n   * @dev The total premium is calculated on the total borrowed amount\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\n   * @dev Only callable by the PoolConfigurator contract\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\n   */\n  function updateFlashloanPremiums(\n    uint128 flashLoanPremiumTotal,\n    uint128 flashLoanPremiumToProtocol\n  ) external;\n\n  /**\n   * @notice Configures a new category for the eMode.\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\n   * The category 0 is reserved as it's the default for volatile assets\n   * @param id The id of the category\n   * @param config The configuration of the category\n   */\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\n\n  /**\n   * @notice Returns the data of an eMode category\n   * @param id The id of the category\n   * @return The configuration data of the category\n   */\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\n\n  /**\n   * @notice Allows a user to use the protocol in eMode\n   * @param categoryId The id of the category\n   */\n  function setUserEMode(uint8 categoryId) external;\n\n  /**\n   * @notice Returns the eMode the user is using\n   * @param user The address of the user\n   * @return The eMode id\n   */\n  function getUserEMode(address user) external view returns (uint256);\n\n  /**\n   * @notice Resets the isolation mode total debt of the given asset to zero\n   * @dev It requires the given asset has zero debt ceiling\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\n   */\n  function resetIsolationModeTotalDebt(address asset) external;\n\n  /**\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\n   * @return The percentage of available liquidity to borrow, expressed in bps\n   */\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\n\n  /**\n   * @notice Returns the total fee on flash loans\n   * @return The total fee on flashloans\n   */\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\n\n  /**\n   * @notice Returns the part of the bridge fees sent to protocol\n   * @return The bridge fee sent to the protocol treasury\n   */\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\n\n  /**\n   * @notice Returns the part of the flashloan fees sent to protocol\n   * @return The flashloan fee sent to the protocol treasury\n   */\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\n\n  /**\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\n   * @return The maximum number of reserves supported\n   */\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\n\n  /**\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\n   * @param assets The list of reserves for which the minting needs to be executed\n   */\n  function mintToTreasury(address[] calldata assets) external;\n\n  /**\n   * @notice Rescue and transfer tokens locked in this contract\n   * @param token The address of the token\n   * @param to The address of the recipient\n   * @param amount The amount of token to transfer\n   */\n  function rescueTokens(address token, address to, uint256 amount) external;\n\n  /**\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\n   * @dev Deprecated: Use the `supply` function instead\n   * @param asset The address of the underlying asset to supply\n   * @param amount The amount to be supplied\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\n   *   is a different wallet\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n   *   0 if the action is executed directly by the user, without any middle-man\n   */\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\n}\n"},"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @title IPoolAddressesProvider\n * @author Aave\n * @notice Defines the basic interface for a Pool Addresses Provider.\n */\ninterface IPoolAddressesProvider {\n  /**\n   * @dev Emitted when the market identifier is updated.\n   * @param oldMarketId The old id of the market\n   * @param newMarketId The new id of the market\n   */\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\n\n  /**\n   * @dev Emitted when the pool is updated.\n   * @param oldAddress The old address of the Pool\n   * @param newAddress The new address of the Pool\n   */\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\n\n  /**\n   * @dev Emitted when the pool configurator is updated.\n   * @param oldAddress The old address of the PoolConfigurator\n   * @param newAddress The new address of the PoolConfigurator\n   */\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\n\n  /**\n   * @dev Emitted when the price oracle is updated.\n   * @param oldAddress The old address of the PriceOracle\n   * @param newAddress The new address of the PriceOracle\n   */\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\n\n  /**\n   * @dev Emitted when the ACL manager is updated.\n   * @param oldAddress The old address of the ACLManager\n   * @param newAddress The new address of the ACLManager\n   */\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\n\n  /**\n   * @dev Emitted when the ACL admin is updated.\n   * @param oldAddress The old address of the ACLAdmin\n   * @param newAddress The new address of the ACLAdmin\n   */\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\n\n  /**\n   * @dev Emitted when the price oracle sentinel is updated.\n   * @param oldAddress The old address of the PriceOracleSentinel\n   * @param newAddress The new address of the PriceOracleSentinel\n   */\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\n\n  /**\n   * @dev Emitted when the pool data provider is updated.\n   * @param oldAddress The old address of the PoolDataProvider\n   * @param newAddress The new address of the PoolDataProvider\n   */\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\n\n  /**\n   * @dev Emitted when a new proxy is created.\n   * @param id The identifier of the proxy\n   * @param proxyAddress The address of the created proxy contract\n   * @param implementationAddress The address of the implementation contract\n   */\n  event ProxyCreated(\n    bytes32 indexed id,\n    address indexed proxyAddress,\n    address indexed implementationAddress\n  );\n\n  /**\n   * @dev Emitted when a new non-proxied contract address is registered.\n   * @param id The identifier of the contract\n   * @param oldAddress The address of the old contract\n   * @param newAddress The address of the new contract\n   */\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\n\n  /**\n   * @dev Emitted when the implementation of the proxy registered with id is updated\n   * @param id The identifier of the contract\n   * @param proxyAddress The address of the proxy contract\n   * @param oldImplementationAddress The address of the old implementation contract\n   * @param newImplementationAddress The address of the new implementation contract\n   */\n  event AddressSetAsProxy(\n    bytes32 indexed id,\n    address indexed proxyAddress,\n    address oldImplementationAddress,\n    address indexed newImplementationAddress\n  );\n\n  /**\n   * @notice Returns the id of the Aave market to which this contract points to.\n   * @return The market id\n   */\n  function getMarketId() external view returns (string memory);\n\n  /**\n   * @notice Associates an id with a specific PoolAddressesProvider.\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\n   * identify and validate multiple Aave markets.\n   * @param newMarketId The market id\n   */\n  function setMarketId(string calldata newMarketId) external;\n\n  /**\n   * @notice Returns an address by its identifier.\n   * @dev The returned address might be an EOA or a contract, potentially proxied\n   * @dev It returns ZERO if there is no registered address with the given id\n   * @param id The id\n   * @return The address of the registered for the specified id\n   */\n  function getAddress(bytes32 id) external view returns (address);\n\n  /**\n   * @notice General function to update the implementation of a proxy registered with\n   * certain `id`. If there is no proxy registered, it will instantiate one and\n   * set as implementation the `newImplementationAddress`.\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\n   * setter function, in order to avoid unexpected consequences\n   * @param id The id\n   * @param newImplementationAddress The address of the new implementation\n   */\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\n\n  /**\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\n   * @param id The id\n   * @param newAddress The address to set\n   */\n  function setAddress(bytes32 id, address newAddress) external;\n\n  /**\n   * @notice Returns the address of the Pool proxy.\n   * @return The Pool proxy address\n   */\n  function getPool() external view returns (address);\n\n  /**\n   * @notice Updates the implementation of the Pool, or creates a proxy\n   * setting the new `pool` implementation when the function is called for the first time.\n   * @param newPoolImpl The new Pool implementation\n   */\n  function setPoolImpl(address newPoolImpl) external;\n\n  /**\n   * @notice Returns the address of the PoolConfigurator proxy.\n   * @return The PoolConfigurator proxy address\n   */\n  function getPoolConfigurator() external view returns (address);\n\n  /**\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\n   */\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\n\n  /**\n   * @notice Returns the address of the price oracle.\n   * @return The address of the PriceOracle\n   */\n  function getPriceOracle() external view returns (address);\n\n  /**\n   * @notice Updates the address of the price oracle.\n   * @param newPriceOracle The address of the new PriceOracle\n   */\n  function setPriceOracle(address newPriceOracle) external;\n\n  /**\n   * @notice Returns the address of the ACL manager.\n   * @return The address of the ACLManager\n   */\n  function getACLManager() external view returns (address);\n\n  /**\n   * @notice Updates the address of the ACL manager.\n   * @param newAclManager The address of the new ACLManager\n   */\n  function setACLManager(address newAclManager) external;\n\n  /**\n   * @notice Returns the address of the ACL admin.\n   * @return The address of the ACL admin\n   */\n  function getACLAdmin() external view returns (address);\n\n  /**\n   * @notice Updates the address of the ACL admin.\n   * @param newAclAdmin The address of the new ACL admin\n   */\n  function setACLAdmin(address newAclAdmin) external;\n\n  /**\n   * @notice Returns the address of the price oracle sentinel.\n   * @return The address of the PriceOracleSentinel\n   */\n  function getPriceOracleSentinel() external view returns (address);\n\n  /**\n   * @notice Updates the address of the price oracle sentinel.\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\n   */\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\n\n  /**\n   * @notice Returns the address of the data provider.\n   * @return The address of the DataProvider\n   */\n  function getPoolDataProvider() external view returns (address);\n\n  /**\n   * @notice Updates the address of the data provider.\n   * @param newDataProvider The address of the new DataProvider\n   */\n  function setPoolDataProvider(address newDataProvider) external;\n}\n"},"@aave/core-v3/contracts/interfaces/IPoolAddressesProviderRegistry.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @title IPoolAddressesProviderRegistry\n * @author Aave\n * @notice Defines the basic interface for an Aave Pool Addresses Provider Registry.\n */\ninterface IPoolAddressesProviderRegistry {\n  /**\n   * @dev Emitted when a new AddressesProvider is registered.\n   * @param addressesProvider The address of the registered PoolAddressesProvider\n   * @param id The id of the registered PoolAddressesProvider\n   */\n  event AddressesProviderRegistered(address indexed addressesProvider, uint256 indexed id);\n\n  /**\n   * @dev Emitted when an AddressesProvider is unregistered.\n   * @param addressesProvider The address of the unregistered PoolAddressesProvider\n   * @param id The id of the unregistered PoolAddressesProvider\n   */\n  event AddressesProviderUnregistered(address indexed addressesProvider, uint256 indexed id);\n\n  /**\n   * @notice Returns the list of registered addresses providers\n   * @return The list of addresses providers\n   */\n  function getAddressesProvidersList() external view returns (address[] memory);\n\n  /**\n   * @notice Returns the id of a registered PoolAddressesProvider\n   * @param addressesProvider The address of the PoolAddressesProvider\n   * @return The id of the PoolAddressesProvider or 0 if is not registered\n   */\n  function getAddressesProviderIdByAddress(\n    address addressesProvider\n  ) external view returns (uint256);\n\n  /**\n   * @notice Returns the address of a registered PoolAddressesProvider\n   * @param id The id of the market\n   * @return The address of the PoolAddressesProvider with the given id or zero address if it is not registered\n   */\n  function getAddressesProviderAddressById(uint256 id) external view returns (address);\n\n  /**\n   * @notice Registers an addresses provider\n   * @dev The PoolAddressesProvider must not already be registered in the registry\n   * @dev The id must not be used by an already registered PoolAddressesProvider\n   * @param provider The address of the new PoolAddressesProvider\n   * @param id The id for the new PoolAddressesProvider, referring to the market it belongs to\n   */\n  function registerAddressesProvider(address provider, uint256 id) external;\n\n  /**\n   * @notice Removes an addresses provider from the list of registered addresses providers\n   * @param provider The PoolAddressesProvider address\n   */\n  function unregisterAddressesProvider(address provider) external;\n}\n"},"@aave/core-v3/contracts/interfaces/IPoolConfigurator.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {ConfiguratorInputTypes} from '../protocol/libraries/types/ConfiguratorInputTypes.sol';\n\n/**\n * @title IPoolConfigurator\n * @author Aave\n * @notice Defines the basic interface for a Pool configurator.\n */\ninterface IPoolConfigurator {\n  /**\n   * @dev Emitted when a reserve is initialized.\n   * @param asset The address of the underlying asset of the reserve\n   * @param aToken The address of the associated aToken contract\n   * @param stableDebtToken The address of the associated stable rate debt token\n   * @param variableDebtToken The address of the associated variable rate debt token\n   * @param interestRateStrategyAddress The address of the interest rate strategy for the reserve\n   */\n  event ReserveInitialized(\n    address indexed asset,\n    address indexed aToken,\n    address stableDebtToken,\n    address variableDebtToken,\n    address interestRateStrategyAddress\n  );\n\n  /**\n   * @dev Emitted when borrowing is enabled or disabled on a reserve.\n   * @param asset The address of the underlying asset of the reserve\n   * @param enabled True if borrowing is enabled, false otherwise\n   */\n  event ReserveBorrowing(address indexed asset, bool enabled);\n\n  /**\n   * @dev Emitted when flashloans are enabled or disabled on a reserve.\n   * @param asset The address of the underlying asset of the reserve\n   * @param enabled True if flashloans are enabled, false otherwise\n   */\n  event ReserveFlashLoaning(address indexed asset, bool enabled);\n\n  /**\n   * @dev Emitted when the collateralization risk parameters for the specified asset are updated.\n   * @param asset The address of the underlying asset of the reserve\n   * @param ltv The loan to value of the asset when used as collateral\n   * @param liquidationThreshold The threshold at which loans using this asset as collateral will be considered undercollateralized\n   * @param liquidationBonus The bonus liquidators receive to liquidate this asset\n   */\n  event CollateralConfigurationChanged(\n    address indexed asset,\n    uint256 ltv,\n    uint256 liquidationThreshold,\n    uint256 liquidationBonus\n  );\n\n  /**\n   * @dev Emitted when stable rate borrowing is enabled or disabled on a reserve\n   * @param asset The address of the underlying asset of the reserve\n   * @param enabled True if stable rate borrowing is enabled, false otherwise\n   */\n  event ReserveStableRateBorrowing(address indexed asset, bool enabled);\n\n  /**\n   * @dev Emitted when a reserve is activated or deactivated\n   * @param asset The address of the underlying asset of the reserve\n   * @param active True if reserve is active, false otherwise\n   */\n  event ReserveActive(address indexed asset, bool active);\n\n  /**\n   * @dev Emitted when a reserve is frozen or unfrozen\n   * @param asset The address of the underlying asset of the reserve\n   * @param frozen True if reserve is frozen, false otherwise\n   */\n  event ReserveFrozen(address indexed asset, bool frozen);\n\n  /**\n   * @dev Emitted when a reserve is paused or unpaused\n   * @param asset The address of the underlying asset of the reserve\n   * @param paused True if reserve is paused, false otherwise\n   */\n  event ReservePaused(address indexed asset, bool paused);\n\n  /**\n   * @dev Emitted when a reserve is dropped.\n   * @param asset The address of the underlying asset of the reserve\n   */\n  event ReserveDropped(address indexed asset);\n\n  /**\n   * @dev Emitted when a reserve factor is updated.\n   * @param asset The address of the underlying asset of the reserve\n   * @param oldReserveFactor The old reserve factor, expressed in bps\n   * @param newReserveFactor The new reserve factor, expressed in bps\n   */\n  event ReserveFactorChanged(\n    address indexed asset,\n    uint256 oldReserveFactor,\n    uint256 newReserveFactor\n  );\n\n  /**\n   * @dev Emitted when the borrow cap of a reserve is updated.\n   * @param asset The address of the underlying asset of the reserve\n   * @param oldBorrowCap The old borrow cap\n   * @param newBorrowCap The new borrow cap\n   */\n  event BorrowCapChanged(address indexed asset, uint256 oldBorrowCap, uint256 newBorrowCap);\n\n  /**\n   * @dev Emitted when the supply cap of a reserve is updated.\n   * @param asset The address of the underlying asset of the reserve\n   * @param oldSupplyCap The old supply cap\n   * @param newSupplyCap The new supply cap\n   */\n  event SupplyCapChanged(address indexed asset, uint256 oldSupplyCap, uint256 newSupplyCap);\n\n  /**\n   * @dev Emitted when the liquidation protocol fee of a reserve is updated.\n   * @param asset The address of the underlying asset of the reserve\n   * @param oldFee The old liquidation protocol fee, expressed in bps\n   * @param newFee The new liquidation protocol fee, expressed in bps\n   */\n  event LiquidationProtocolFeeChanged(address indexed asset, uint256 oldFee, uint256 newFee);\n\n  /**\n   * @dev Emitted when the unbacked mint cap of a reserve is updated.\n   * @param asset The address of the underlying asset of the reserve\n   * @param oldUnbackedMintCap The old unbacked mint cap\n   * @param newUnbackedMintCap The new unbacked mint cap\n   */\n  event UnbackedMintCapChanged(\n    address indexed asset,\n    uint256 oldUnbackedMintCap,\n    uint256 newUnbackedMintCap\n  );\n\n  /**\n   * @dev Emitted when the category of an asset in eMode is changed.\n   * @param asset The address of the underlying asset of the reserve\n   * @param oldCategoryId The old eMode asset category\n   * @param newCategoryId The new eMode asset category\n   */\n  event EModeAssetCategoryChanged(address indexed asset, uint8 oldCategoryId, uint8 newCategoryId);\n\n  /**\n   * @dev Emitted when a new eMode category is added.\n   * @param categoryId The new eMode category id\n   * @param ltv The ltv for the asset category in eMode\n   * @param liquidationThreshold The liquidationThreshold for the asset category in eMode\n   * @param liquidationBonus The liquidationBonus for the asset category in eMode\n   * @param oracle The optional address of the price oracle specific for this category\n   * @param label A human readable identifier for the category\n   */\n  event EModeCategoryAdded(\n    uint8 indexed categoryId,\n    uint256 ltv,\n    uint256 liquidationThreshold,\n    uint256 liquidationBonus,\n    address oracle,\n    string label\n  );\n\n  /**\n   * @dev Emitted when a reserve interest strategy contract is updated.\n   * @param asset The address of the underlying asset of the reserve\n   * @param oldStrategy The address of the old interest strategy contract\n   * @param newStrategy The address of the new interest strategy contract\n   */\n  event ReserveInterestRateStrategyChanged(\n    address indexed asset,\n    address oldStrategy,\n    address newStrategy\n  );\n\n  /**\n   * @dev Emitted when an aToken implementation is upgraded.\n   * @param asset The address of the underlying asset of the reserve\n   * @param proxy The aToken proxy address\n   * @param implementation The new aToken implementation\n   */\n  event ATokenUpgraded(\n    address indexed asset,\n    address indexed proxy,\n    address indexed implementation\n  );\n\n  /**\n   * @dev Emitted when the implementation of a stable debt token is upgraded.\n   * @param asset The address of the underlying asset of the reserve\n   * @param proxy The stable debt token proxy address\n   * @param implementation The new aToken implementation\n   */\n  event StableDebtTokenUpgraded(\n    address indexed asset,\n    address indexed proxy,\n    address indexed implementation\n  );\n\n  /**\n   * @dev Emitted when the implementation of a variable debt token is upgraded.\n   * @param asset The address of the underlying asset of the reserve\n   * @param proxy The variable debt token proxy address\n   * @param implementation The new aToken implementation\n   */\n  event VariableDebtTokenUpgraded(\n    address indexed asset,\n    address indexed proxy,\n    address indexed implementation\n  );\n\n  /**\n   * @dev Emitted when the debt ceiling of an asset is set.\n   * @param asset The address of the underlying asset of the reserve\n   * @param oldDebtCeiling The old debt ceiling\n   * @param newDebtCeiling The new debt ceiling\n   */\n  event DebtCeilingChanged(address indexed asset, uint256 oldDebtCeiling, uint256 newDebtCeiling);\n\n  /**\n   * @dev Emitted when the the siloed borrowing state for an asset is changed.\n   * @param asset The address of the underlying asset of the reserve\n   * @param oldState The old siloed borrowing state\n   * @param newState The new siloed borrowing state\n   */\n  event SiloedBorrowingChanged(address indexed asset, bool oldState, bool newState);\n\n  /**\n   * @dev Emitted when the bridge protocol fee is updated.\n   * @param oldBridgeProtocolFee The old protocol fee, expressed in bps\n   * @param newBridgeProtocolFee The new protocol fee, expressed in bps\n   */\n  event BridgeProtocolFeeUpdated(uint256 oldBridgeProtocolFee, uint256 newBridgeProtocolFee);\n\n  /**\n   * @dev Emitted when the total premium on flashloans is updated.\n   * @param oldFlashloanPremiumTotal The old premium, expressed in bps\n   * @param newFlashloanPremiumTotal The new premium, expressed in bps\n   */\n  event FlashloanPremiumTotalUpdated(\n    uint128 oldFlashloanPremiumTotal,\n    uint128 newFlashloanPremiumTotal\n  );\n\n  /**\n   * @dev Emitted when the part of the premium that goes to protocol is updated.\n   * @param oldFlashloanPremiumToProtocol The old premium, expressed in bps\n   * @param newFlashloanPremiumToProtocol The new premium, expressed in bps\n   */\n  event FlashloanPremiumToProtocolUpdated(\n    uint128 oldFlashloanPremiumToProtocol,\n    uint128 newFlashloanPremiumToProtocol\n  );\n\n  /**\n   * @dev Emitted when the reserve is set as borrowable/non borrowable in isolation mode.\n   * @param asset The address of the underlying asset of the reserve\n   * @param borrowable True if the reserve is borrowable in isolation, false otherwise\n   */\n  event BorrowableInIsolationChanged(address asset, bool borrowable);\n\n  /**\n   * @notice Initializes multiple reserves.\n   * @param input The array of initialization parameters\n   */\n  function initReserves(ConfiguratorInputTypes.InitReserveInput[] calldata input) external;\n\n  /**\n   * @dev Updates the aToken implementation for the reserve.\n   * @param input The aToken update parameters\n   */\n  function updateAToken(ConfiguratorInputTypes.UpdateATokenInput calldata input) external;\n\n  /**\n   * @notice Updates the stable debt token implementation for the reserve.\n   * @param input The stableDebtToken update parameters\n   */\n  function updateStableDebtToken(\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\n  ) external;\n\n  /**\n   * @notice Updates the variable debt token implementation for the asset.\n   * @param input The variableDebtToken update parameters\n   */\n  function updateVariableDebtToken(\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\n  ) external;\n\n  /**\n   * @notice Configures borrowing on a reserve.\n   * @dev Can only be disabled (set to false) if stable borrowing is disabled\n   * @param asset The address of the underlying asset of the reserve\n   * @param enabled True if borrowing needs to be enabled, false otherwise\n   */\n  function setReserveBorrowing(address asset, bool enabled) external;\n\n  /**\n   * @notice Configures the reserve collateralization parameters.\n   * @dev All the values are expressed in bps. A value of 10000, results in 100.00%\n   * @dev The `liquidationBonus` is always above 100%. A value of 105% means the liquidator will receive a 5% bonus\n   * @param asset The address of the underlying asset of the reserve\n   * @param ltv The loan to value of the asset when used as collateral\n   * @param liquidationThreshold The threshold at which loans using this asset as collateral will be considered undercollateralized\n   * @param liquidationBonus The bonus liquidators receive to liquidate this asset\n   */\n  function configureReserveAsCollateral(\n    address asset,\n    uint256 ltv,\n    uint256 liquidationThreshold,\n    uint256 liquidationBonus\n  ) external;\n\n  /**\n   * @notice Enable or disable stable rate borrowing on a reserve.\n   * @dev Can only be enabled (set to true) if borrowing is enabled\n   * @param asset The address of the underlying asset of the reserve\n   * @param enabled True if stable rate borrowing needs to be enabled, false otherwise\n   */\n  function setReserveStableRateBorrowing(address asset, bool enabled) external;\n\n  /**\n   * @notice Enable or disable flashloans on a reserve\n   * @param asset The address of the underlying asset of the reserve\n   * @param enabled True if flashloans need to be enabled, false otherwise\n   */\n  function setReserveFlashLoaning(address asset, bool enabled) external;\n\n  /**\n   * @notice Activate or deactivate a reserve\n   * @param asset The address of the underlying asset of the reserve\n   * @param active True if the reserve needs to be active, false otherwise\n   */\n  function setReserveActive(address asset, bool active) external;\n\n  /**\n   * @notice Freeze or unfreeze a reserve. A frozen reserve doesn't allow any new supply, borrow\n   * or rate swap but allows repayments, liquidations, rate rebalances and withdrawals.\n   * @param asset The address of the underlying asset of the reserve\n   * @param freeze True if the reserve needs to be frozen, false otherwise\n   */\n  function setReserveFreeze(address asset, bool freeze) external;\n\n  /**\n   * @notice Sets the borrowable in isolation flag for the reserve.\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the\n   * borrowed amount will be accumulated in the isolated collateral's total debt exposure\n   * @dev Only assets of the same family (e.g. USD stablecoins) should be borrowable in isolation mode to keep\n   * consistency in the debt ceiling calculations\n   * @param asset The address of the underlying asset of the reserve\n   * @param borrowable True if the asset should be borrowable in isolation, false otherwise\n   */\n  function setBorrowableInIsolation(address asset, bool borrowable) external;\n\n  /**\n   * @notice Pauses a reserve. A paused reserve does not allow any interaction (supply, borrow, repay,\n   * swap interest rate, liquidate, atoken transfers).\n   * @param asset The address of the underlying asset of the reserve\n   * @param paused True if pausing the reserve, false if unpausing\n   */\n  function setReservePause(address asset, bool paused) external;\n\n  /**\n   * @notice Updates the reserve factor of a reserve.\n   * @param asset The address of the underlying asset of the reserve\n   * @param newReserveFactor The new reserve factor of the reserve\n   */\n  function setReserveFactor(address asset, uint256 newReserveFactor) external;\n\n  /**\n   * @notice Sets the interest rate strategy of a reserve.\n   * @param asset The address of the underlying asset of the reserve\n   * @param newRateStrategyAddress The address of the new interest strategy contract\n   */\n  function setReserveInterestRateStrategyAddress(\n    address asset,\n    address newRateStrategyAddress\n  ) external;\n\n  /**\n   * @notice Pauses or unpauses all the protocol reserves. In the paused state all the protocol interactions\n   * are suspended.\n   * @param paused True if protocol needs to be paused, false otherwise\n   */\n  function setPoolPause(bool paused) external;\n\n  /**\n   * @notice Updates the borrow cap of a reserve.\n   * @param asset The address of the underlying asset of the reserve\n   * @param newBorrowCap The new borrow cap of the reserve\n   */\n  function setBorrowCap(address asset, uint256 newBorrowCap) external;\n\n  /**\n   * @notice Updates the supply cap of a reserve.\n   * @param asset The address of the underlying asset of the reserve\n   * @param newSupplyCap The new supply cap of the reserve\n   */\n  function setSupplyCap(address asset, uint256 newSupplyCap) external;\n\n  /**\n   * @notice Updates the liquidation protocol fee of reserve.\n   * @param asset The address of the underlying asset of the reserve\n   * @param newFee The new liquidation protocol fee of the reserve, expressed in bps\n   */\n  function setLiquidationProtocolFee(address asset, uint256 newFee) external;\n\n  /**\n   * @notice Updates the unbacked mint cap of reserve.\n   * @param asset The address of the underlying asset of the reserve\n   * @param newUnbackedMintCap The new unbacked mint cap of the reserve\n   */\n  function setUnbackedMintCap(address asset, uint256 newUnbackedMintCap) external;\n\n  /**\n   * @notice Assign an efficiency mode (eMode) category to asset.\n   * @param asset The address of the underlying asset of the reserve\n   * @param newCategoryId The new category id of the asset\n   */\n  function setAssetEModeCategory(address asset, uint8 newCategoryId) external;\n\n  /**\n   * @notice Adds a new efficiency mode (eMode) category.\n   * @dev If zero is provided as oracle address, the default asset oracles will be used to compute the overall debt and\n   * overcollateralization of the users using this category.\n   * @dev The new ltv and liquidation threshold must be greater than the base\n   * ltvs and liquidation thresholds of all assets within the eMode category\n   * @param categoryId The id of the category to be configured\n   * @param ltv The ltv associated with the category\n   * @param liquidationThreshold The liquidation threshold associated with the category\n   * @param liquidationBonus The liquidation bonus associated with the category\n   * @param oracle The oracle associated with the category\n   * @param label A label identifying the category\n   */\n  function setEModeCategory(\n    uint8 categoryId,\n    uint16 ltv,\n    uint16 liquidationThreshold,\n    uint16 liquidationBonus,\n    address oracle,\n    string calldata label\n  ) external;\n\n  /**\n   * @notice Drops a reserve entirely.\n   * @param asset The address of the reserve to drop\n   */\n  function dropReserve(address asset) external;\n\n  /**\n   * @notice Updates the bridge fee collected by the protocol reserves.\n   * @param newBridgeProtocolFee The part of the fee sent to the protocol treasury, expressed in bps\n   */\n  function updateBridgeProtocolFee(uint256 newBridgeProtocolFee) external;\n\n  /**\n   * @notice Updates the total flash loan premium.\n   * Total flash loan premium consists of two parts:\n   * - A part is sent to aToken holders as extra balance\n   * - A part is collected by the protocol reserves\n   * @dev Expressed in bps\n   * @dev The premium is calculated on the total amount borrowed\n   * @param newFlashloanPremiumTotal The total flashloan premium\n   */\n  function updateFlashloanPremiumTotal(uint128 newFlashloanPremiumTotal) external;\n\n  /**\n   * @notice Updates the flash loan premium collected by protocol reserves\n   * @dev Expressed in bps\n   * @dev The premium to protocol is calculated on the total flashloan premium\n   * @param newFlashloanPremiumToProtocol The part of the flashloan premium sent to the protocol treasury\n   */\n  function updateFlashloanPremiumToProtocol(uint128 newFlashloanPremiumToProtocol) external;\n\n  /**\n   * @notice Sets the debt ceiling for an asset.\n   * @param newDebtCeiling The new debt ceiling\n   */\n  function setDebtCeiling(address asset, uint256 newDebtCeiling) external;\n\n  /**\n   * @notice Sets siloed borrowing for an asset\n   * @param siloed The new siloed borrowing state\n   */\n  function setSiloedBorrowing(address asset, bool siloed) external;\n}\n"},"@aave/core-v3/contracts/interfaces/IPoolDataProvider.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\n\n/**\n * @title IPoolDataProvider\n * @author Aave\n * @notice Defines the basic interface of a PoolDataProvider\n */\ninterface IPoolDataProvider {\n  struct TokenData {\n    string symbol;\n    address tokenAddress;\n  }\n\n  /**\n   * @notice Returns the address for the PoolAddressesProvider contract.\n   * @return The address for the PoolAddressesProvider contract\n   */\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\n\n  /**\n   * @notice Returns the list of the existing reserves in the pool.\n   * @dev Handling MKR and ETH in a different way since they do not have standard `symbol` functions.\n   * @return The list of reserves, pairs of symbols and addresses\n   */\n  function getAllReservesTokens() external view returns (TokenData[] memory);\n\n  /**\n   * @notice Returns the list of the existing ATokens in the pool.\n   * @return The list of ATokens, pairs of symbols and addresses\n   */\n  function getAllATokens() external view returns (TokenData[] memory);\n\n  /**\n   * @notice Returns the configuration data of the reserve\n   * @dev Not returning borrow and supply caps for compatibility, nor pause flag\n   * @param asset The address of the underlying asset of the reserve\n   * @return decimals The number of decimals of the reserve\n   * @return ltv The ltv of the reserve\n   * @return liquidationThreshold The liquidationThreshold of the reserve\n   * @return liquidationBonus The liquidationBonus of the reserve\n   * @return reserveFactor The reserveFactor of the reserve\n   * @return usageAsCollateralEnabled True if the usage as collateral is enabled, false otherwise\n   * @return borrowingEnabled True if borrowing is enabled, false otherwise\n   * @return stableBorrowRateEnabled True if stable rate borrowing is enabled, false otherwise\n   * @return isActive True if it is active, false otherwise\n   * @return isFrozen True if it is frozen, false otherwise\n   */\n  function getReserveConfigurationData(\n    address asset\n  )\n    external\n    view\n    returns (\n      uint256 decimals,\n      uint256 ltv,\n      uint256 liquidationThreshold,\n      uint256 liquidationBonus,\n      uint256 reserveFactor,\n      bool usageAsCollateralEnabled,\n      bool borrowingEnabled,\n      bool stableBorrowRateEnabled,\n      bool isActive,\n      bool isFrozen\n    );\n\n  /**\n   * @notice Returns the efficiency mode category of the reserve\n   * @param asset The address of the underlying asset of the reserve\n   * @return The eMode id of the reserve\n   */\n  function getReserveEModeCategory(address asset) external view returns (uint256);\n\n  /**\n   * @notice Returns the caps parameters of the reserve\n   * @param asset The address of the underlying asset of the reserve\n   * @return borrowCap The borrow cap of the reserve\n   * @return supplyCap The supply cap of the reserve\n   */\n  function getReserveCaps(\n    address asset\n  ) external view returns (uint256 borrowCap, uint256 supplyCap);\n\n  /**\n   * @notice Returns if the pool is paused\n   * @param asset The address of the underlying asset of the reserve\n   * @return isPaused True if the pool is paused, false otherwise\n   */\n  function getPaused(address asset) external view returns (bool isPaused);\n\n  /**\n   * @notice Returns the siloed borrowing flag\n   * @param asset The address of the underlying asset of the reserve\n   * @return True if the asset is siloed for borrowing\n   */\n  function getSiloedBorrowing(address asset) external view returns (bool);\n\n  /**\n   * @notice Returns the protocol fee on the liquidation bonus\n   * @param asset The address of the underlying asset of the reserve\n   * @return The protocol fee on liquidation\n   */\n  function getLiquidationProtocolFee(address asset) external view returns (uint256);\n\n  /**\n   * @notice Returns the unbacked mint cap of the reserve\n   * @param asset The address of the underlying asset of the reserve\n   * @return The unbacked mint cap of the reserve\n   */\n  function getUnbackedMintCap(address asset) external view returns (uint256);\n\n  /**\n   * @notice Returns the debt ceiling of the reserve\n   * @param asset The address of the underlying asset of the reserve\n   * @return The debt ceiling of the reserve\n   */\n  function getDebtCeiling(address asset) external view returns (uint256);\n\n  /**\n   * @notice Returns the debt ceiling decimals\n   * @return The debt ceiling decimals\n   */\n  function getDebtCeilingDecimals() external pure returns (uint256);\n\n  /**\n   * @notice Returns the reserve data\n   * @param asset The address of the underlying asset of the reserve\n   * @return unbacked The amount of unbacked tokens\n   * @return accruedToTreasuryScaled The scaled amount of tokens accrued to treasury that is to be minted\n   * @return totalAToken The total supply of the aToken\n   * @return totalStableDebt The total stable debt of the reserve\n   * @return totalVariableDebt The total variable debt of the reserve\n   * @return liquidityRate The liquidity rate of the reserve\n   * @return variableBorrowRate The variable borrow rate of the reserve\n   * @return stableBorrowRate The stable borrow rate of the reserve\n   * @return averageStableBorrowRate The average stable borrow rate of the reserve\n   * @return liquidityIndex The liquidity index of the reserve\n   * @return variableBorrowIndex The variable borrow index of the reserve\n   * @return lastUpdateTimestamp The timestamp of the last update of the reserve\n   */\n  function getReserveData(\n    address asset\n  )\n    external\n    view\n    returns (\n      uint256 unbacked,\n      uint256 accruedToTreasuryScaled,\n      uint256 totalAToken,\n      uint256 totalStableDebt,\n      uint256 totalVariableDebt,\n      uint256 liquidityRate,\n      uint256 variableBorrowRate,\n      uint256 stableBorrowRate,\n      uint256 averageStableBorrowRate,\n      uint256 liquidityIndex,\n      uint256 variableBorrowIndex,\n      uint40 lastUpdateTimestamp\n    );\n\n  /**\n   * @notice Returns the total supply of aTokens for a given asset\n   * @param asset The address of the underlying asset of the reserve\n   * @return The total supply of the aToken\n   */\n  function getATokenTotalSupply(address asset) external view returns (uint256);\n\n  /**\n   * @notice Returns the total debt for a given asset\n   * @param asset The address of the underlying asset of the reserve\n   * @return The total debt for asset\n   */\n  function getTotalDebt(address asset) external view returns (uint256);\n\n  /**\n   * @notice Returns the user data in a reserve\n   * @param asset The address of the underlying asset of the reserve\n   * @param user The address of the user\n   * @return currentATokenBalance The current AToken balance of the user\n   * @return currentStableDebt The current stable debt of the user\n   * @return currentVariableDebt The current variable debt of the user\n   * @return principalStableDebt The principal stable debt of the user\n   * @return scaledVariableDebt The scaled variable debt of the user\n   * @return stableBorrowRate The stable borrow rate of the user\n   * @return liquidityRate The liquidity rate of the reserve\n   * @return stableRateLastUpdated The timestamp of the last update of the user stable rate\n   * @return usageAsCollateralEnabled True if the user is using the asset as collateral, false\n   *         otherwise\n   */\n  function getUserReserveData(\n    address asset,\n    address user\n  )\n    external\n    view\n    returns (\n      uint256 currentATokenBalance,\n      uint256 currentStableDebt,\n      uint256 currentVariableDebt,\n      uint256 principalStableDebt,\n      uint256 scaledVariableDebt,\n      uint256 stableBorrowRate,\n      uint256 liquidityRate,\n      uint40 stableRateLastUpdated,\n      bool usageAsCollateralEnabled\n    );\n\n  /**\n   * @notice Returns the token addresses of the reserve\n   * @param asset The address of the underlying asset of the reserve\n   * @return aTokenAddress The AToken address of the reserve\n   * @return stableDebtTokenAddress The StableDebtToken address of the reserve\n   * @return variableDebtTokenAddress The VariableDebtToken address of the reserve\n   */\n  function getReserveTokensAddresses(\n    address asset\n  )\n    external\n    view\n    returns (\n      address aTokenAddress,\n      address stableDebtTokenAddress,\n      address variableDebtTokenAddress\n    );\n\n  /**\n   * @notice Returns the address of the Interest Rate strategy\n   * @param asset The address of the underlying asset of the reserve\n   * @return irStrategyAddress The address of the Interest Rate strategy\n   */\n  function getInterestRateStrategyAddress(\n    address asset\n  ) external view returns (address irStrategyAddress);\n\n  /**\n   * @notice Returns whether the reserve has FlashLoans enabled or disabled\n   * @param asset The address of the underlying asset of the reserve\n   * @return True if FlashLoans are enabled, false otherwise\n   */\n  function getFlashLoanEnabled(address asset) external view returns (bool);\n}\n"},"@aave/core-v3/contracts/interfaces/IPriceOracle.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @title IPriceOracle\n * @author Aave\n * @notice Defines the basic interface for a Price oracle.\n */\ninterface IPriceOracle {\n  /**\n   * @notice Returns the asset price in the base currency\n   * @param asset The address of the asset\n   * @return The price of the asset\n   */\n  function getAssetPrice(address asset) external view returns (uint256);\n\n  /**\n   * @notice Set the price of the asset\n   * @param asset The address of the asset\n   * @param price The price of the asset\n   */\n  function setAssetPrice(address asset, uint256 price) external;\n}\n"},"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @title IPriceOracleGetter\n * @author Aave\n * @notice Interface for the Aave price oracle.\n */\ninterface IPriceOracleGetter {\n  /**\n   * @notice Returns the base currency address\n   * @dev Address 0x0 is reserved for USD as base currency.\n   * @return Returns the base currency address.\n   */\n  function BASE_CURRENCY() external view returns (address);\n\n  /**\n   * @notice Returns the base currency unit\n   * @dev 1 ether for ETH, 1e8 for USD.\n   * @return Returns the base currency unit.\n   */\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\n\n  /**\n   * @notice Returns the asset price in the base currency\n   * @param asset The address of the asset\n   * @return The price of the asset\n   */\n  function getAssetPrice(address asset) external view returns (uint256);\n}\n"},"@aave/core-v3/contracts/interfaces/IPriceOracleSentinel.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\n\n/**\n * @title IPriceOracleSentinel\n * @author Aave\n * @notice Defines the basic interface for the PriceOracleSentinel\n */\ninterface IPriceOracleSentinel {\n  /**\n   * @dev Emitted after the sequencer oracle is updated\n   * @param newSequencerOracle The new sequencer oracle\n   */\n  event SequencerOracleUpdated(address newSequencerOracle);\n\n  /**\n   * @dev Emitted after the grace period is updated\n   * @param newGracePeriod The new grace period value\n   */\n  event GracePeriodUpdated(uint256 newGracePeriod);\n\n  /**\n   * @notice Returns the PoolAddressesProvider\n   * @return The address of the PoolAddressesProvider contract\n   */\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\n\n  /**\n   * @notice Returns true if the `borrow` operation is allowed.\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\n   * @return True if the `borrow` operation is allowed, false otherwise.\n   */\n  function isBorrowAllowed() external view returns (bool);\n\n  /**\n   * @notice Returns true if the `liquidation` operation is allowed.\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\n   * @return True if the `liquidation` operation is allowed, false otherwise.\n   */\n  function isLiquidationAllowed() external view returns (bool);\n\n  /**\n   * @notice Updates the address of the sequencer oracle\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\n   */\n  function setSequencerOracle(address newSequencerOracle) external;\n\n  /**\n   * @notice Updates the duration of the grace period\n   * @param newGracePeriod The value of the new grace period duration\n   */\n  function setGracePeriod(uint256 newGracePeriod) external;\n\n  /**\n   * @notice Returns the SequencerOracle\n   * @return The address of the sequencer oracle contract\n   */\n  function getSequencerOracle() external view returns (address);\n\n  /**\n   * @notice Returns the grace period\n   * @return The duration of the grace period\n   */\n  function getGracePeriod() external view returns (uint256);\n}\n"},"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\n\n/**\n * @title IReserveInterestRateStrategy\n * @author Aave\n * @notice Interface for the calculation of the interest rates\n */\ninterface IReserveInterestRateStrategy {\n  /**\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\n   * @param params The parameters needed to calculate interest rates\n   * @return liquidityRate The liquidity rate expressed in rays\n   * @return stableBorrowRate The stable borrow rate expressed in rays\n   * @return variableBorrowRate The variable borrow rate expressed in rays\n   */\n  function calculateInterestRates(\n    DataTypes.CalculateInterestRatesParams memory params\n  ) external view returns (uint256, uint256, uint256);\n}\n"},"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @title IScaledBalanceToken\n * @author Aave\n * @notice Defines the basic interface for a scaled-balance token.\n */\ninterface IScaledBalanceToken {\n  /**\n   * @dev Emitted after the mint action\n   * @param caller The address performing the mint\n   * @param onBehalfOf The address of the user that will receive the minted tokens\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\n   * @param index The next liquidity index of the reserve\n   */\n  event Mint(\n    address indexed caller,\n    address indexed onBehalfOf,\n    uint256 value,\n    uint256 balanceIncrease,\n    uint256 index\n  );\n\n  /**\n   * @dev Emitted after the burn action\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\n   * @param from The address from which the tokens will be burned\n   * @param target The address that will receive the underlying, if any\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\n   * @param index The next liquidity index of the reserve\n   */\n  event Burn(\n    address indexed from,\n    address indexed target,\n    uint256 value,\n    uint256 balanceIncrease,\n    uint256 index\n  );\n\n  /**\n   * @notice Returns the scaled balance of the user.\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\n   * at the moment of the update\n   * @param user The user whose balance is calculated\n   * @return The scaled balance of the user\n   */\n  function scaledBalanceOf(address user) external view returns (uint256);\n\n  /**\n   * @notice Returns the scaled balance of the user and the scaled total supply.\n   * @param user The address of the user\n   * @return The scaled balance of the user\n   * @return The scaled total supply\n   */\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\n\n  /**\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\n   * @return The scaled total supply\n   */\n  function scaledTotalSupply() external view returns (uint256);\n\n  /**\n   * @notice Returns last index interest was accrued to the user's balance\n   * @param user The address of the user\n   * @return The last index interest was accrued to the user's balance, expressed in ray\n   */\n  function getPreviousIndex(address user) external view returns (uint256);\n}\n"},"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\n\n/**\n * @title IStableDebtToken\n * @author Aave\n * @notice Defines the interface for the stable debt token\n * @dev It does not inherit from IERC20 to save in code size\n */\ninterface IStableDebtToken is IInitializableDebtToken {\n  /**\n   * @dev Emitted when new stable debt is minted\n   * @param user The address of the user who triggered the minting\n   * @param onBehalfOf The recipient of stable debt tokens\n   * @param amount The amount minted (user entered amount + balance increase from interest)\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\n   * @param newRate The rate of the debt after the minting\n   * @param avgStableRate The next average stable rate after the minting\n   * @param newTotalSupply The next total supply of the stable debt token after the action\n   */\n  event Mint(\n    address indexed user,\n    address indexed onBehalfOf,\n    uint256 amount,\n    uint256 currentBalance,\n    uint256 balanceIncrease,\n    uint256 newRate,\n    uint256 avgStableRate,\n    uint256 newTotalSupply\n  );\n\n  /**\n   * @dev Emitted when new stable debt is burned\n   * @param from The address from which the debt will be burned\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\n   * @param balanceIncrease The increase in balance since the last action of 'from'\n   * @param avgStableRate The next average stable rate after the burning\n   * @param newTotalSupply The next total supply of the stable debt token after the action\n   */\n  event Burn(\n    address indexed from,\n    uint256 amount,\n    uint256 currentBalance,\n    uint256 balanceIncrease,\n    uint256 avgStableRate,\n    uint256 newTotalSupply\n  );\n\n  /**\n   * @notice Mints debt token to the `onBehalfOf` address.\n   * @dev The resulting rate is the weighted average between the rate of the new debt\n   * and the rate of the previous debt\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\n   * of credit delegate, or same as `onBehalfOf` otherwise\n   * @param onBehalfOf The address receiving the debt tokens\n   * @param amount The amount of debt tokens to mint\n   * @param rate The rate of the debt being minted\n   * @return True if it is the first borrow, false otherwise\n   * @return The total stable debt\n   * @return The average stable borrow rate\n   */\n  function mint(\n    address user,\n    address onBehalfOf,\n    uint256 amount,\n    uint256 rate\n  ) external returns (bool, uint256, uint256);\n\n  /**\n   * @notice Burns debt of `user`\n   * @dev The resulting rate is the weighted average between the rate of the new debt\n   * and the rate of the previous debt\n   * @dev In some instances, a burn transaction will emit a mint event\n   * if the amount to burn is less than the interest the user earned\n   * @param from The address from which the debt will be burned\n   * @param amount The amount of debt tokens getting burned\n   * @return The total stable debt\n   * @return The average stable borrow rate\n   */\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\n\n  /**\n   * @notice Returns the average rate of all the stable rate loans.\n   * @return The average stable rate\n   */\n  function getAverageStableRate() external view returns (uint256);\n\n  /**\n   * @notice Returns the stable rate of the user debt\n   * @param user The address of the user\n   * @return The stable rate of the user\n   */\n  function getUserStableRate(address user) external view returns (uint256);\n\n  /**\n   * @notice Returns the timestamp of the last update of the user\n   * @param user The address of the user\n   * @return The timestamp\n   */\n  function getUserLastUpdated(address user) external view returns (uint40);\n\n  /**\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\n   * @return The principal\n   * @return The total supply\n   * @return The average stable rate\n   * @return The timestamp of the last update\n   */\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\n\n  /**\n   * @notice Returns the timestamp of the last update of the total supply\n   * @return The timestamp\n   */\n  function getTotalSupplyLastUpdated() external view returns (uint40);\n\n  /**\n   * @notice Returns the total supply and the average stable rate\n   * @return The total supply\n   * @return The average rate\n   */\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\n\n  /**\n   * @notice Returns the principal debt balance of the user\n   * @return The debt balance of the user since the last burn/mint action\n   */\n  function principalBalanceOf(address user) external view returns (uint256);\n\n  /**\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\n   * @return The address of the underlying asset\n   */\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\n}\n"},"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\n\n/**\n * @title IVariableDebtToken\n * @author Aave\n * @notice Defines the basic interface for a variable debt token.\n */\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\n  /**\n   * @notice Mints debt token to the `onBehalfOf` address\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\n   * of credit delegate, or same as `onBehalfOf` otherwise\n   * @param onBehalfOf The address receiving the debt tokens\n   * @param amount The amount of debt being minted\n   * @param index The variable debt index of the reserve\n   * @return True if the previous balance of the user is 0, false otherwise\n   * @return The scaled total debt of the reserve\n   */\n  function mint(\n    address user,\n    address onBehalfOf,\n    uint256 amount,\n    uint256 index\n  ) external returns (bool, uint256);\n\n  /**\n   * @notice Burns user variable debt\n   * @dev In some instances, a burn transaction will emit a mint event\n   * if the amount to burn is less than the interest that the user accrued\n   * @param from The address from which the debt will be burned\n   * @param amount The amount getting burned\n   * @param index The variable debt index of the reserve\n   * @return The scaled total debt of the reserve\n   */\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\n\n  /**\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\n   * @return The address of the underlying asset\n   */\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\n}\n"},"@aave/core-v3/contracts/misc/AaveOracle.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {AggregatorInterface} from '../dependencies/chainlink/AggregatorInterface.sol';\nimport {Errors} from '../protocol/libraries/helpers/Errors.sol';\nimport {IACLManager} from '../interfaces/IACLManager.sol';\nimport {IPoolAddressesProvider} from '../interfaces/IPoolAddressesProvider.sol';\nimport {IPriceOracleGetter} from '../interfaces/IPriceOracleGetter.sol';\nimport {IAaveOracle} from '../interfaces/IAaveOracle.sol';\n\n/**\n * @title AaveOracle\n * @author Aave\n * @notice Contract to get asset prices, manage price sources and update the fallback oracle\n * - Use of Chainlink Aggregators as first source of price\n * - If the returned price by a Chainlink aggregator is <= 0, the call is forwarded to a fallback oracle\n * - Owned by the Aave governance\n */\ncontract AaveOracle is IAaveOracle {\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\n\n  // Map of asset price sources (asset => priceSource)\n  mapping(address => AggregatorInterface) private assetsSources;\n\n  IPriceOracleGetter private _fallbackOracle;\n  address public immutable override BASE_CURRENCY;\n  uint256 public immutable override BASE_CURRENCY_UNIT;\n\n  /**\n   * @dev Only asset listing or pool admin can call functions marked by this modifier.\n   */\n  modifier onlyAssetListingOrPoolAdmins() {\n    _onlyAssetListingOrPoolAdmins();\n    _;\n  }\n\n  /**\n   * @notice Constructor\n   * @param provider The address of the new PoolAddressesProvider\n   * @param assets The addresses of the assets\n   * @param sources The address of the source of each asset\n   * @param fallbackOracle The address of the fallback oracle to use if the data of an\n   *        aggregator is not consistent\n   * @param baseCurrency The base currency used for the price quotes. If USD is used, base currency is 0x0\n   * @param baseCurrencyUnit The unit of the base currency\n   */\n  constructor(\n    IPoolAddressesProvider provider,\n    address[] memory assets,\n    address[] memory sources,\n    address fallbackOracle,\n    address baseCurrency,\n    uint256 baseCurrencyUnit\n  ) {\n    ADDRESSES_PROVIDER = provider;\n    _setFallbackOracle(fallbackOracle);\n    _setAssetsSources(assets, sources);\n    BASE_CURRENCY = baseCurrency;\n    BASE_CURRENCY_UNIT = baseCurrencyUnit;\n    emit BaseCurrencySet(baseCurrency, baseCurrencyUnit);\n  }\n\n  /// @inheritdoc IAaveOracle\n  function setAssetSources(\n    address[] calldata assets,\n    address[] calldata sources\n  ) external override onlyAssetListingOrPoolAdmins {\n    _setAssetsSources(assets, sources);\n  }\n\n  /// @inheritdoc IAaveOracle\n  function setFallbackOracle(\n    address fallbackOracle\n  ) external override onlyAssetListingOrPoolAdmins {\n    _setFallbackOracle(fallbackOracle);\n  }\n\n  /**\n   * @notice Internal function to set the sources for each asset\n   * @param assets The addresses of the assets\n   * @param sources The address of the source of each asset\n   */\n  function _setAssetsSources(address[] memory assets, address[] memory sources) internal {\n    require(assets.length == sources.length, Errors.INCONSISTENT_PARAMS_LENGTH);\n    for (uint256 i = 0; i < assets.length; i++) {\n      assetsSources[assets[i]] = AggregatorInterface(sources[i]);\n      emit AssetSourceUpdated(assets[i], sources[i]);\n    }\n  }\n\n  /**\n   * @notice Internal function to set the fallback oracle\n   * @param fallbackOracle The address of the fallback oracle\n   */\n  function _setFallbackOracle(address fallbackOracle) internal {\n    _fallbackOracle = IPriceOracleGetter(fallbackOracle);\n    emit FallbackOracleUpdated(fallbackOracle);\n  }\n\n  /// @inheritdoc IPriceOracleGetter\n  function getAssetPrice(address asset) public view override returns (uint256) {\n    AggregatorInterface source = assetsSources[asset];\n\n    if (asset == BASE_CURRENCY) {\n      return BASE_CURRENCY_UNIT;\n    } else if (address(source) == address(0)) {\n      return _fallbackOracle.getAssetPrice(asset);\n    } else {\n      int256 price = source.latestAnswer();\n      if (price > 0) {\n        return uint256(price);\n      } else {\n        return _fallbackOracle.getAssetPrice(asset);\n      }\n    }\n  }\n\n  /// @inheritdoc IAaveOracle\n  function getAssetsPrices(\n    address[] calldata assets\n  ) external view override returns (uint256[] memory) {\n    uint256[] memory prices = new uint256[](assets.length);\n    for (uint256 i = 0; i < assets.length; i++) {\n      prices[i] = getAssetPrice(assets[i]);\n    }\n    return prices;\n  }\n\n  /// @inheritdoc IAaveOracle\n  function getSourceOfAsset(address asset) external view override returns (address) {\n    return address(assetsSources[asset]);\n  }\n\n  /// @inheritdoc IAaveOracle\n  function getFallbackOracle() external view returns (address) {\n    return address(_fallbackOracle);\n  }\n\n  function _onlyAssetListingOrPoolAdmins() internal view {\n    IACLManager aclManager = IACLManager(ADDRESSES_PROVIDER.getACLManager());\n    require(\n      aclManager.isAssetListingAdmin(msg.sender) || aclManager.isPoolAdmin(msg.sender),\n      Errors.CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN\n    );\n  }\n}\n"},"@aave/core-v3/contracts/misc/AaveProtocolDataProvider.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IERC20Detailed} from '../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\nimport {ReserveConfiguration} from '../protocol/libraries/configuration/ReserveConfiguration.sol';\nimport {UserConfiguration} from '../protocol/libraries/configuration/UserConfiguration.sol';\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\nimport {WadRayMath} from '../protocol/libraries/math/WadRayMath.sol';\nimport {IPoolAddressesProvider} from '../interfaces/IPoolAddressesProvider.sol';\nimport {IStableDebtToken} from '../interfaces/IStableDebtToken.sol';\nimport {IVariableDebtToken} from '../interfaces/IVariableDebtToken.sol';\nimport {IPool} from '../interfaces/IPool.sol';\nimport {IPoolDataProvider} from '../interfaces/IPoolDataProvider.sol';\n\n/**\n * @title AaveProtocolDataProvider\n * @author Aave\n * @notice Peripheral contract to collect and pre-process information from the Pool.\n */\ncontract AaveProtocolDataProvider is IPoolDataProvider {\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n  using UserConfiguration for DataTypes.UserConfigurationMap;\n  using WadRayMath for uint256;\n\n  address constant MKR = 0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2;\n  address constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;\n\n  /// @inheritdoc IPoolDataProvider\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\n\n  /**\n   * @notice Constructor\n   * @param addressesProvider The address of the PoolAddressesProvider contract\n   */\n  constructor(IPoolAddressesProvider addressesProvider) {\n    ADDRESSES_PROVIDER = addressesProvider;\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getAllReservesTokens() external view override returns (TokenData[] memory) {\n    IPool pool = IPool(ADDRESSES_PROVIDER.getPool());\n    address[] memory reserves = pool.getReservesList();\n    TokenData[] memory reservesTokens = new TokenData[](reserves.length);\n    for (uint256 i = 0; i < reserves.length; i++) {\n      if (reserves[i] == MKR) {\n        reservesTokens[i] = TokenData({symbol: 'MKR', tokenAddress: reserves[i]});\n        continue;\n      }\n      if (reserves[i] == ETH) {\n        reservesTokens[i] = TokenData({symbol: 'ETH', tokenAddress: reserves[i]});\n        continue;\n      }\n      reservesTokens[i] = TokenData({\n        symbol: IERC20Detailed(reserves[i]).symbol(),\n        tokenAddress: reserves[i]\n      });\n    }\n    return reservesTokens;\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getAllATokens() external view override returns (TokenData[] memory) {\n    IPool pool = IPool(ADDRESSES_PROVIDER.getPool());\n    address[] memory reserves = pool.getReservesList();\n    TokenData[] memory aTokens = new TokenData[](reserves.length);\n    for (uint256 i = 0; i < reserves.length; i++) {\n      DataTypes.ReserveData memory reserveData = pool.getReserveData(reserves[i]);\n      aTokens[i] = TokenData({\n        symbol: IERC20Detailed(reserveData.aTokenAddress).symbol(),\n        tokenAddress: reserveData.aTokenAddress\n      });\n    }\n    return aTokens;\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getReserveConfigurationData(\n    address asset\n  )\n    external\n    view\n    override\n    returns (\n      uint256 decimals,\n      uint256 ltv,\n      uint256 liquidationThreshold,\n      uint256 liquidationBonus,\n      uint256 reserveFactor,\n      bool usageAsCollateralEnabled,\n      bool borrowingEnabled,\n      bool stableBorrowRateEnabled,\n      bool isActive,\n      bool isFrozen\n    )\n  {\n    DataTypes.ReserveConfigurationMap memory configuration = IPool(ADDRESSES_PROVIDER.getPool())\n      .getConfiguration(asset);\n\n    (ltv, liquidationThreshold, liquidationBonus, decimals, reserveFactor, ) = configuration\n      .getParams();\n\n    (isActive, isFrozen, borrowingEnabled, stableBorrowRateEnabled, ) = configuration.getFlags();\n\n    usageAsCollateralEnabled = liquidationThreshold != 0;\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getReserveEModeCategory(address asset) external view override returns (uint256) {\n    DataTypes.ReserveConfigurationMap memory configuration = IPool(ADDRESSES_PROVIDER.getPool())\n      .getConfiguration(asset);\n    return configuration.getEModeCategory();\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getReserveCaps(\n    address asset\n  ) external view override returns (uint256 borrowCap, uint256 supplyCap) {\n    (borrowCap, supplyCap) = IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getCaps();\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getPaused(address asset) external view override returns (bool isPaused) {\n    (, , , , isPaused) = IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getFlags();\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getSiloedBorrowing(address asset) external view override returns (bool) {\n    return IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getSiloedBorrowing();\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getLiquidationProtocolFee(address asset) external view override returns (uint256) {\n    return IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getLiquidationProtocolFee();\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getUnbackedMintCap(address asset) external view override returns (uint256) {\n    return IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getUnbackedMintCap();\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getDebtCeiling(address asset) external view override returns (uint256) {\n    return IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getDebtCeiling();\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getDebtCeilingDecimals() external pure override returns (uint256) {\n    return ReserveConfiguration.DEBT_CEILING_DECIMALS;\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getReserveData(\n    address asset\n  )\n    external\n    view\n    override\n    returns (\n      uint256 unbacked,\n      uint256 accruedToTreasuryScaled,\n      uint256 totalAToken,\n      uint256 totalStableDebt,\n      uint256 totalVariableDebt,\n      uint256 liquidityRate,\n      uint256 variableBorrowRate,\n      uint256 stableBorrowRate,\n      uint256 averageStableBorrowRate,\n      uint256 liquidityIndex,\n      uint256 variableBorrowIndex,\n      uint40 lastUpdateTimestamp\n    )\n  {\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\n      asset\n    );\n\n    return (\n      reserve.unbacked,\n      reserve.accruedToTreasury,\n      IERC20Detailed(reserve.aTokenAddress).totalSupply(),\n      IERC20Detailed(reserve.stableDebtTokenAddress).totalSupply(),\n      IERC20Detailed(reserve.variableDebtTokenAddress).totalSupply(),\n      reserve.currentLiquidityRate,\n      reserve.currentVariableBorrowRate,\n      reserve.currentStableBorrowRate,\n      IStableDebtToken(reserve.stableDebtTokenAddress).getAverageStableRate(),\n      reserve.liquidityIndex,\n      reserve.variableBorrowIndex,\n      reserve.lastUpdateTimestamp\n    );\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getATokenTotalSupply(address asset) external view override returns (uint256) {\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\n      asset\n    );\n    return IERC20Detailed(reserve.aTokenAddress).totalSupply();\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getTotalDebt(address asset) external view override returns (uint256) {\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\n      asset\n    );\n    return\n      IERC20Detailed(reserve.stableDebtTokenAddress).totalSupply() +\n      IERC20Detailed(reserve.variableDebtTokenAddress).totalSupply();\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getUserReserveData(\n    address asset,\n    address user\n  )\n    external\n    view\n    override\n    returns (\n      uint256 currentATokenBalance,\n      uint256 currentStableDebt,\n      uint256 currentVariableDebt,\n      uint256 principalStableDebt,\n      uint256 scaledVariableDebt,\n      uint256 stableBorrowRate,\n      uint256 liquidityRate,\n      uint40 stableRateLastUpdated,\n      bool usageAsCollateralEnabled\n    )\n  {\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\n      asset\n    );\n\n    DataTypes.UserConfigurationMap memory userConfig = IPool(ADDRESSES_PROVIDER.getPool())\n      .getUserConfiguration(user);\n\n    currentATokenBalance = IERC20Detailed(reserve.aTokenAddress).balanceOf(user);\n    currentVariableDebt = IERC20Detailed(reserve.variableDebtTokenAddress).balanceOf(user);\n    currentStableDebt = IERC20Detailed(reserve.stableDebtTokenAddress).balanceOf(user);\n    principalStableDebt = IStableDebtToken(reserve.stableDebtTokenAddress).principalBalanceOf(user);\n    scaledVariableDebt = IVariableDebtToken(reserve.variableDebtTokenAddress).scaledBalanceOf(user);\n    liquidityRate = reserve.currentLiquidityRate;\n    stableBorrowRate = IStableDebtToken(reserve.stableDebtTokenAddress).getUserStableRate(user);\n    stableRateLastUpdated = IStableDebtToken(reserve.stableDebtTokenAddress).getUserLastUpdated(\n      user\n    );\n    usageAsCollateralEnabled = userConfig.isUsingAsCollateral(reserve.id);\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getReserveTokensAddresses(\n    address asset\n  )\n    external\n    view\n    override\n    returns (\n      address aTokenAddress,\n      address stableDebtTokenAddress,\n      address variableDebtTokenAddress\n    )\n  {\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\n      asset\n    );\n\n    return (\n      reserve.aTokenAddress,\n      reserve.stableDebtTokenAddress,\n      reserve.variableDebtTokenAddress\n    );\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getInterestRateStrategyAddress(\n    address asset\n  ) external view override returns (address irStrategyAddress) {\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\n      asset\n    );\n\n    return (reserve.interestRateStrategyAddress);\n  }\n\n  /// @inheritdoc IPoolDataProvider\n  function getFlashLoanEnabled(address asset) external view override returns (bool) {\n    DataTypes.ReserveConfigurationMap memory configuration = IPool(ADDRESSES_PROVIDER.getPool())\n      .getConfiguration(asset);\n\n    return configuration.getFlashLoanEnabled();\n  }\n}\n"},"@aave/core-v3/contracts/misc/interfaces/IWETH.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\ninterface IWETH {\n  function deposit() external payable;\n\n  function withdraw(uint256) external;\n\n  function approve(address guy, uint256 wad) external returns (bool);\n\n  function transferFrom(address src, address dst, uint256 wad) external returns (bool);\n}\n"},"@aave/core-v3/contracts/mocks/flashloan/MockFlashLoanReceiver.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {GPv2SafeERC20} from '../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\nimport {FlashLoanReceiverBase} from '../../flashloan/base/FlashLoanReceiverBase.sol';\nimport {MintableERC20} from '../tokens/MintableERC20.sol';\n\ncontract MockFlashLoanReceiver is FlashLoanReceiverBase {\n  using GPv2SafeERC20 for IERC20;\n\n  event ExecutedWithFail(address[] _assets, uint256[] _amounts, uint256[] _premiums);\n  event ExecutedWithSuccess(address[] _assets, uint256[] _amounts, uint256[] _premiums);\n\n  bool internal _failExecution;\n  uint256 internal _amountToApprove;\n  bool internal _simulateEOA;\n\n  constructor(IPoolAddressesProvider provider) FlashLoanReceiverBase(provider) {}\n\n  function setFailExecutionTransfer(bool fail) public {\n    _failExecution = fail;\n  }\n\n  function setAmountToApprove(uint256 amountToApprove) public {\n    _amountToApprove = amountToApprove;\n  }\n\n  function setSimulateEOA(bool flag) public {\n    _simulateEOA = flag;\n  }\n\n  function getAmountToApprove() public view returns (uint256) {\n    return _amountToApprove;\n  }\n\n  function simulateEOA() public view returns (bool) {\n    return _simulateEOA;\n  }\n\n  function executeOperation(\n    address[] memory assets,\n    uint256[] memory amounts,\n    uint256[] memory premiums,\n    address, // initiator\n    bytes memory // params\n  ) public override returns (bool) {\n    if (_failExecution) {\n      emit ExecutedWithFail(assets, amounts, premiums);\n      return !_simulateEOA;\n    }\n\n    for (uint256 i = 0; i < assets.length; i++) {\n      //mint to this contract the specific amount\n      MintableERC20 token = MintableERC20(assets[i]);\n\n      //check the contract has the specified balance\n      require(\n        amounts[i] <= IERC20(assets[i]).balanceOf(address(this)),\n        'Invalid balance for the contract'\n      );\n\n      uint256 amountToReturn = (_amountToApprove != 0)\n        ? _amountToApprove\n        : amounts[i] + premiums[i];\n      //execution does not fail - mint tokens and return them to the _destination\n\n      token.mint(address(this), premiums[i]);\n\n      IERC20(assets[i]).approve(address(POOL), amountToReturn);\n    }\n\n    emit ExecutedWithSuccess(assets, amounts, premiums);\n\n    return true;\n  }\n}\n"},"@aave/core-v3/contracts/mocks/helpers/MockIncentivesController.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\n\ncontract MockIncentivesController is IAaveIncentivesController {\n  function handleAction(address, uint256, uint256) external override {}\n}\n"},"@aave/core-v3/contracts/mocks/helpers/MockPool.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\n\ncontract MockPool {\n  // Reserved storage space to avoid layout collisions.\n  uint256[100] private ______gap;\n\n  address internal _addressesProvider;\n  address[] internal _reserveList;\n\n  function initialize(address provider) external {\n    _addressesProvider = provider;\n  }\n\n  function addReserveToReservesList(address reserve) external {\n    _reserveList.push(reserve);\n  }\n\n  function getReservesList() external view returns (address[] memory) {\n    address[] memory reservesList = new address[](_reserveList.length);\n    for (uint256 i; i < _reserveList.length; i++) {\n      reservesList[i] = _reserveList[i];\n    }\n    return reservesList;\n  }\n}\n\nimport {Pool} from '../../protocol/pool/Pool.sol';\n\ncontract MockPoolInherited is Pool {\n  uint16 internal _maxNumberOfReserves = 128;\n\n  function getRevision() internal pure override returns (uint256) {\n    return 0x3;\n  }\n\n  constructor(IPoolAddressesProvider provider) Pool(provider) {}\n\n  function setMaxNumberOfReserves(uint16 newMaxNumberOfReserves) public {\n    _maxNumberOfReserves = newMaxNumberOfReserves;\n  }\n\n  function MAX_NUMBER_RESERVES() public view override returns (uint16) {\n    return _maxNumberOfReserves;\n  }\n\n  function dropReserve(address asset) external override {\n    _reservesList[_reserves[asset].id] = address(0);\n    delete _reserves[asset];\n  }\n}\n"},"@aave/core-v3/contracts/mocks/helpers/MockReserveConfiguration.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {ReserveConfiguration} from '../../protocol/libraries/configuration/ReserveConfiguration.sol';\nimport {DataTypes} from '../../protocol/libraries/types/DataTypes.sol';\n\ncontract MockReserveConfiguration {\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n\n  DataTypes.ReserveConfigurationMap public configuration;\n\n  function setLtv(uint256 ltv) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setLtv(ltv);\n    configuration = config;\n  }\n\n  function getLtv() external view returns (uint256) {\n    return configuration.getLtv();\n  }\n\n  function setLiquidationBonus(uint256 bonus) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setLiquidationBonus(bonus);\n    configuration = config;\n  }\n\n  function getLiquidationBonus() external view returns (uint256) {\n    return configuration.getLiquidationBonus();\n  }\n\n  function setLiquidationThreshold(uint256 threshold) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setLiquidationThreshold(threshold);\n    configuration = config;\n  }\n\n  function getLiquidationThreshold() external view returns (uint256) {\n    return configuration.getLiquidationThreshold();\n  }\n\n  function setDecimals(uint256 decimals) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setDecimals(decimals);\n    configuration = config;\n  }\n\n  function getDecimals() external view returns (uint256) {\n    return configuration.getDecimals();\n  }\n\n  function setFrozen(bool frozen) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setFrozen(frozen);\n    configuration = config;\n  }\n\n  function getFrozen() external view returns (bool) {\n    return configuration.getFrozen();\n  }\n\n  function setBorrowingEnabled(bool enabled) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setBorrowingEnabled(enabled);\n    configuration = config;\n  }\n\n  function getBorrowingEnabled() external view returns (bool) {\n    return configuration.getBorrowingEnabled();\n  }\n\n  function setStableRateBorrowingEnabled(bool enabled) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setStableRateBorrowingEnabled(enabled);\n    configuration = config;\n  }\n\n  function getStableRateBorrowingEnabled() external view returns (bool) {\n    return configuration.getStableRateBorrowingEnabled();\n  }\n\n  function setReserveFactor(uint256 reserveFactor) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setReserveFactor(reserveFactor);\n    configuration = config;\n  }\n\n  function getReserveFactor() external view returns (uint256) {\n    return configuration.getReserveFactor();\n  }\n\n  function setBorrowCap(uint256 borrowCap) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setBorrowCap(borrowCap);\n    configuration = config;\n  }\n\n  function getBorrowCap() external view returns (uint256) {\n    return configuration.getBorrowCap();\n  }\n\n  function getEModeCategory() external view returns (uint256) {\n    return configuration.getEModeCategory();\n  }\n\n  function setEModeCategory(uint256 categoryId) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setEModeCategory(categoryId);\n    configuration = config;\n  }\n\n  function setFlashLoanEnabled(bool enabled) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setFlashLoanEnabled(enabled);\n    configuration = config;\n  }\n\n  function getFlashLoanEnabled() external view returns (bool) {\n    return configuration.getFlashLoanEnabled();\n  }\n\n  function setSupplyCap(uint256 supplyCap) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setSupplyCap(supplyCap);\n    configuration = config;\n  }\n\n  function getSupplyCap() external view returns (uint256) {\n    return configuration.getSupplyCap();\n  }\n\n  function setLiquidationProtocolFee(uint256 liquidationProtocolFee) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setLiquidationProtocolFee(liquidationProtocolFee);\n    configuration = config;\n  }\n\n  function getLiquidationProtocolFee() external view returns (uint256) {\n    return configuration.getLiquidationProtocolFee();\n  }\n\n  function setUnbackedMintCap(uint256 unbackedMintCap) external {\n    DataTypes.ReserveConfigurationMap memory config = configuration;\n    config.setUnbackedMintCap(unbackedMintCap);\n    configuration = config;\n  }\n\n  function getUnbackedMintCap() external view returns (uint256) {\n    return configuration.getUnbackedMintCap();\n  }\n\n  function getFlags() external view returns (bool, bool, bool, bool, bool) {\n    return configuration.getFlags();\n  }\n\n  function getParams()\n    external\n    view\n    returns (uint256, uint256, uint256, uint256, uint256, uint256)\n  {\n    return configuration.getParams();\n  }\n\n  function getCaps() external view returns (uint256, uint256) {\n    return configuration.getCaps();\n  }\n}\n"},"@aave/core-v3/contracts/mocks/oracle/CLAggregators/MockAggregator.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\ncontract MockAggregator {\n  int256 private _latestAnswer;\n\n  event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 updatedAt);\n\n  constructor(int256 initialAnswer) {\n    _latestAnswer = initialAnswer;\n    emit AnswerUpdated(initialAnswer, 0, block.timestamp);\n  }\n\n  function latestAnswer() external view returns (int256) {\n    return _latestAnswer;\n  }\n\n  function getTokenType() external pure returns (uint256) {\n    return 1;\n  }\n\n  function decimals() external pure returns (uint8) {\n    return 8;\n  }\n}\n"},"@aave/core-v3/contracts/mocks/oracle/PriceOracle.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {IPriceOracle} from '../../interfaces/IPriceOracle.sol';\n\ncontract PriceOracle is IPriceOracle {\n  // Map of asset prices (asset => price)\n  mapping(address => uint256) internal prices;\n\n  uint256 internal ethPriceUsd;\n\n  event AssetPriceUpdated(address asset, uint256 price, uint256 timestamp);\n  event EthPriceUpdated(uint256 price, uint256 timestamp);\n\n  function getAssetPrice(address asset) external view override returns (uint256) {\n    return prices[asset];\n  }\n\n  function setAssetPrice(address asset, uint256 price) external override {\n    prices[asset] = price;\n    emit AssetPriceUpdated(asset, price, block.timestamp);\n  }\n\n  function getEthUsdPrice() external view returns (uint256) {\n    return ethPriceUsd;\n  }\n\n  function setEthUsdPrice(uint256 price) external {\n    ethPriceUsd = price;\n    emit EthPriceUpdated(price, block.timestamp);\n  }\n}\n"},"@aave/core-v3/contracts/mocks/tokens/MintableDelegationERC20.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {ERC20} from '../../dependencies/openzeppelin/contracts/ERC20.sol';\nimport {IDelegationToken} from '../../interfaces/IDelegationToken.sol';\n\n/**\n * @title MintableDelegationERC20\n * @dev ERC20 minting logic with delegation\n */\ncontract MintableDelegationERC20 is IDelegationToken, ERC20 {\n  address public delegatee;\n\n  constructor(string memory name, string memory symbol, uint8 decimals) ERC20(name, symbol) {\n    _setupDecimals(decimals);\n  }\n\n  /**\n   * @dev Function to mint tokens\n   * @param value The amount of tokens to mint.\n   * @return A boolean that indicates if the operation was successful.\n   */\n  function mint(uint256 value) public returns (bool) {\n    _mint(msg.sender, value);\n    return true;\n  }\n\n  function delegate(address delegateeAddress) external override {\n    delegatee = delegateeAddress;\n  }\n}\n"},"@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {ERC20} from '../../dependencies/openzeppelin/contracts/ERC20.sol';\nimport {IERC20WithPermit} from '../../interfaces/IERC20WithPermit.sol';\n\n/**\n * @title ERC20Mintable\n * @dev ERC20 minting logic\n */\ncontract MintableERC20 is IERC20WithPermit, ERC20 {\n  bytes public constant EIP712_REVISION = bytes('1');\n  bytes32 internal constant EIP712_DOMAIN =\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\n  bytes32 public constant PERMIT_TYPEHASH =\n    keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');\n\n  // Map of address nonces (address => nonce)\n  mapping(address => uint256) internal _nonces;\n\n  bytes32 public DOMAIN_SEPARATOR;\n\n  constructor(string memory name, string memory symbol, uint8 decimals) ERC20(name, symbol) {\n    uint256 chainId = block.chainid;\n\n    DOMAIN_SEPARATOR = keccak256(\n      abi.encode(\n        EIP712_DOMAIN,\n        keccak256(bytes(name)),\n        keccak256(EIP712_REVISION),\n        chainId,\n        address(this)\n      )\n    );\n    _setupDecimals(decimals);\n  }\n\n  /// @inheritdoc IERC20WithPermit\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 override {\n    require(owner != address(0), 'INVALID_OWNER');\n    //solium-disable-next-line\n    require(block.timestamp <= deadline, 'INVALID_EXPIRATION');\n    uint256 currentValidNonce = _nonces[owner];\n    bytes32 digest = keccak256(\n      abi.encodePacked(\n        '\\x19\\x01',\n        DOMAIN_SEPARATOR,\n        keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, currentValidNonce, deadline))\n      )\n    );\n    require(owner == ecrecover(digest, v, r, s), 'INVALID_SIGNATURE');\n    _nonces[owner] = currentValidNonce + 1;\n    _approve(owner, spender, value);\n  }\n\n  /**\n   * @dev Function to mint tokens\n   * @param value The amount of tokens to mint.\n   * @return A boolean that indicates if the operation was successful.\n   */\n  function mint(uint256 value) public returns (bool) {\n    _mint(_msgSender(), value);\n    return true;\n  }\n\n  /**\n   * @dev Function to mint tokens to address\n   * @param account The account to mint tokens.\n   * @param value The amount of tokens to mint.\n   * @return A boolean that indicates if the operation was successful.\n   */\n  function mint(address account, uint256 value) public returns (bool) {\n    _mint(account, value);\n    return true;\n  }\n\n  function nonces(address owner) public view virtual returns (uint256) {\n    return _nonces[owner];\n  }\n}\n"},"@aave/core-v3/contracts/mocks/tokens/WETH9Mocked.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {WETH9} from '../../dependencies/weth/WETH9.sol';\n\ncontract WETH9Mocked is WETH9 {\n  // Mint not backed by Ether: only for testing purposes\n  function mint(uint256 value) public returns (bool) {\n    balanceOf[msg.sender] += value;\n    emit Transfer(address(0), msg.sender, value);\n    return true;\n  }\n\n  function mint(address account, uint256 value) public returns (bool) {\n    balanceOf[account] += value;\n    emit Transfer(address(0), account, value);\n    return true;\n  }\n}\n"},"@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {AToken} from '../../protocol/tokenization/AToken.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\n\ncontract MockAToken is AToken {\n  constructor(IPool pool) AToken(pool) {}\n\n  function getRevision() internal pure override returns (uint256) {\n    return 0x2;\n  }\n}\n"},"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {VersionedInitializable} from '../../protocol/libraries/aave-upgradeability/VersionedInitializable.sol';\n\ncontract MockInitializableImple is VersionedInitializable {\n  uint256 public value;\n  string public text;\n  uint256[] public values;\n\n  uint256 public constant REVISION = 1;\n\n  /**\n   * @dev returns the revision number of the contract\n   * Needs to be defined in the inherited class as a constant.\n   */\n  function getRevision() internal pure override returns (uint256) {\n    return REVISION;\n  }\n\n  function initialize(uint256 val, string memory txt, uint256[] memory vals) external initializer {\n    value = val;\n    text = txt;\n    values = vals;\n  }\n\n  function setValue(uint256 newValue) public {\n    value = newValue;\n  }\n\n  function setValueViaProxy(uint256 newValue) public {\n    value = newValue;\n  }\n}\n\ncontract MockInitializableImpleV2 is VersionedInitializable {\n  uint256 public value;\n  string public text;\n  uint256[] public values;\n\n  uint256 public constant REVISION = 2;\n\n  /**\n   * @dev returns the revision number of the contract\n   * Needs to be defined in the inherited class as a constant.\n   */\n  function getRevision() internal pure override returns (uint256) {\n    return REVISION;\n  }\n\n  function initialize(uint256 val, string memory txt, uint256[] memory vals) public initializer {\n    value = val;\n    text = txt;\n    values = vals;\n  }\n\n  function setValue(uint256 newValue) public {\n    value = newValue;\n  }\n\n  function setValueViaProxy(uint256 newValue) public {\n    value = newValue;\n  }\n}\n\ncontract MockInitializableFromConstructorImple is VersionedInitializable {\n  uint256 public value;\n\n  uint256 public constant REVISION = 2;\n\n  /**\n   * @dev returns the revision number of the contract\n   * Needs to be defined in the inherited class as a constant.\n   */\n  function getRevision() internal pure override returns (uint256) {\n    return REVISION;\n  }\n\n  constructor(uint256 val) {\n    initialize(val);\n  }\n\n  function initialize(uint256 val) public initializer {\n    value = val;\n  }\n}\n\ncontract MockReentrantInitializableImple is VersionedInitializable {\n  uint256 public value;\n\n  uint256 public constant REVISION = 2;\n\n  /**\n   * @dev returns the revision number of the contract\n   * Needs to be defined in the inherited class as a constant.\n   */\n  function getRevision() internal pure override returns (uint256) {\n    return REVISION;\n  }\n\n  function initialize(uint256 val) public initializer {\n    value = val;\n    if (value < 2) {\n      initialize(value + 1);\n    }\n  }\n}\n"},"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {StableDebtToken} from '../../protocol/tokenization/StableDebtToken.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\n\ncontract MockStableDebtToken is StableDebtToken {\n  constructor(IPool pool) StableDebtToken(pool) {}\n\n  function getRevision() internal pure override returns (uint256) {\n    return 0x3;\n  }\n}\n"},"@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {VariableDebtToken} from '../../protocol/tokenization/VariableDebtToken.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\n\ncontract MockVariableDebtToken is VariableDebtToken {\n  constructor(IPool pool) VariableDebtToken(pool) {}\n\n  function getRevision() internal pure override returns (uint256) {\n    return 0x3;\n  }\n}\n"},"@aave/core-v3/contracts/protocol/configuration/ACLManager.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {AccessControl} from '../../dependencies/openzeppelin/contracts/AccessControl.sol';\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\nimport {IACLManager} from '../../interfaces/IACLManager.sol';\nimport {Errors} from '../libraries/helpers/Errors.sol';\n\n/**\n * @title ACLManager\n * @author Aave\n * @notice Access Control List Manager. Main registry of system roles and permissions.\n */\ncontract ACLManager is AccessControl, IACLManager {\n  bytes32 public constant override POOL_ADMIN_ROLE = keccak256('POOL_ADMIN');\n  bytes32 public constant override EMERGENCY_ADMIN_ROLE = keccak256('EMERGENCY_ADMIN');\n  bytes32 public constant override RISK_ADMIN_ROLE = keccak256('RISK_ADMIN');\n  bytes32 public constant override FLASH_BORROWER_ROLE = keccak256('FLASH_BORROWER');\n  bytes32 public constant override BRIDGE_ROLE = keccak256('BRIDGE');\n  bytes32 public constant override ASSET_LISTING_ADMIN_ROLE = keccak256('ASSET_LISTING_ADMIN');\n\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\n\n  /**\n   * @dev Constructor\n   * @dev The ACL admin should be initialized at the addressesProvider beforehand\n   * @param provider The address of the PoolAddressesProvider\n   */\n  constructor(IPoolAddressesProvider provider) {\n    ADDRESSES_PROVIDER = provider;\n    address aclAdmin = provider.getACLAdmin();\n    require(aclAdmin != address(0), Errors.ACL_ADMIN_CANNOT_BE_ZERO);\n    _setupRole(DEFAULT_ADMIN_ROLE, aclAdmin);\n  }\n\n  /// @inheritdoc IACLManager\n  function setRoleAdmin(\n    bytes32 role,\n    bytes32 adminRole\n  ) external override onlyRole(DEFAULT_ADMIN_ROLE) {\n    _setRoleAdmin(role, adminRole);\n  }\n\n  /// @inheritdoc IACLManager\n  function addPoolAdmin(address admin) external override {\n    grantRole(POOL_ADMIN_ROLE, admin);\n  }\n\n  /// @inheritdoc IACLManager\n  function removePoolAdmin(address admin) external override {\n    revokeRole(POOL_ADMIN_ROLE, admin);\n  }\n\n  /// @inheritdoc IACLManager\n  function isPoolAdmin(address admin) external view override returns (bool) {\n    return hasRole(POOL_ADMIN_ROLE, admin);\n  }\n\n  /// @inheritdoc IACLManager\n  function addEmergencyAdmin(address admin) external override {\n    grantRole(EMERGENCY_ADMIN_ROLE, admin);\n  }\n\n  /// @inheritdoc IACLManager\n  function removeEmergencyAdmin(address admin) external override {\n    revokeRole(EMERGENCY_ADMIN_ROLE, admin);\n  }\n\n  /// @inheritdoc IACLManager\n  function isEmergencyAdmin(address admin) external view override returns (bool) {\n    return hasRole(EMERGENCY_ADMIN_ROLE, admin);\n  }\n\n  /// @inheritdoc IACLManager\n  function addRiskAdmin(address admin) external override {\n    grantRole(RISK_ADMIN_ROLE, admin);\n  }\n\n  /// @inheritdoc IACLManager\n  function removeRiskAdmin(address admin) external override {\n    revokeRole(RISK_ADMIN_ROLE, admin);\n  }\n\n  /// @inheritdoc IACLManager\n  function isRiskAdmin(address admin) external view override returns (bool) {\n    return hasRole(RISK_ADMIN_ROLE, admin);\n  }\n\n  /// @inheritdoc IACLManager\n  function addFlashBorrower(address borrower) external override {\n    grantRole(FLASH_BORROWER_ROLE, borrower);\n  }\n\n  /// @inheritdoc IACLManager\n  function removeFlashBorrower(address borrower) external override {\n    revokeRole(FLASH_BORROWER_ROLE, borrower);\n  }\n\n  /// @inheritdoc IACLManager\n  function isFlashBorrower(address borrower) external view override returns (bool) {\n    return hasRole(FLASH_BORROWER_ROLE, borrower);\n  }\n\n  /// @inheritdoc IACLManager\n  function addBridge(address bridge) external override {\n    grantRole(BRIDGE_ROLE, bridge);\n  }\n\n  /// @inheritdoc IACLManager\n  function removeBridge(address bridge) external override {\n    revokeRole(BRIDGE_ROLE, bridge);\n  }\n\n  /// @inheritdoc IACLManager\n  function isBridge(address bridge) external view override returns (bool) {\n    return hasRole(BRIDGE_ROLE, bridge);\n  }\n\n  /// @inheritdoc IACLManager\n  function addAssetListingAdmin(address admin) external override {\n    grantRole(ASSET_LISTING_ADMIN_ROLE, admin);\n  }\n\n  /// @inheritdoc IACLManager\n  function removeAssetListingAdmin(address admin) external override {\n    revokeRole(ASSET_LISTING_ADMIN_ROLE, admin);\n  }\n\n  /// @inheritdoc IACLManager\n  function isAssetListingAdmin(address admin) external view override returns (bool) {\n    return hasRole(ASSET_LISTING_ADMIN_ROLE, admin);\n  }\n}\n"},"@aave/core-v3/contracts/protocol/configuration/PoolAddressesProvider.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {Ownable} from '../../dependencies/openzeppelin/contracts/Ownable.sol';\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\nimport {InitializableImmutableAdminUpgradeabilityProxy} from '../libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol';\n\n/**\n * @title PoolAddressesProvider\n * @author Aave\n * @notice Main registry of addresses part of or connected to the protocol, including permissioned roles\n * @dev Acts as factory of proxies and admin of those, so with right to change its implementations\n * @dev Owned by the Aave Governance\n */\ncontract PoolAddressesProvider is Ownable, IPoolAddressesProvider {\n  // Identifier of the Aave Market\n  string private _marketId;\n\n  // Map of registered addresses (identifier => registeredAddress)\n  mapping(bytes32 => address) private _addresses;\n\n  // Main identifiers\n  bytes32 private constant POOL = 'POOL';\n  bytes32 private constant POOL_CONFIGURATOR = 'POOL_CONFIGURATOR';\n  bytes32 private constant PRICE_ORACLE = 'PRICE_ORACLE';\n  bytes32 private constant ACL_MANAGER = 'ACL_MANAGER';\n  bytes32 private constant ACL_ADMIN = 'ACL_ADMIN';\n  bytes32 private constant PRICE_ORACLE_SENTINEL = 'PRICE_ORACLE_SENTINEL';\n  bytes32 private constant DATA_PROVIDER = 'DATA_PROVIDER';\n\n  /**\n   * @dev Constructor.\n   * @param marketId The identifier of the market.\n   * @param owner The owner address of this contract.\n   */\n  constructor(string memory marketId, address owner) {\n    _setMarketId(marketId);\n    transferOwnership(owner);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function getMarketId() external view override returns (string memory) {\n    return _marketId;\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function setMarketId(string memory newMarketId) external override onlyOwner {\n    _setMarketId(newMarketId);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function getAddress(bytes32 id) public view override returns (address) {\n    return _addresses[id];\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function setAddress(bytes32 id, address newAddress) external override onlyOwner {\n    address oldAddress = _addresses[id];\n    _addresses[id] = newAddress;\n    emit AddressSet(id, oldAddress, newAddress);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function setAddressAsProxy(\n    bytes32 id,\n    address newImplementationAddress\n  ) external override onlyOwner {\n    address proxyAddress = _addresses[id];\n    address oldImplementationAddress = _getProxyImplementation(id);\n    _updateImpl(id, newImplementationAddress);\n    emit AddressSetAsProxy(id, proxyAddress, oldImplementationAddress, newImplementationAddress);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function getPool() external view override returns (address) {\n    return getAddress(POOL);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function setPoolImpl(address newPoolImpl) external override onlyOwner {\n    address oldPoolImpl = _getProxyImplementation(POOL);\n    _updateImpl(POOL, newPoolImpl);\n    emit PoolUpdated(oldPoolImpl, newPoolImpl);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function getPoolConfigurator() external view override returns (address) {\n    return getAddress(POOL_CONFIGURATOR);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external override onlyOwner {\n    address oldPoolConfiguratorImpl = _getProxyImplementation(POOL_CONFIGURATOR);\n    _updateImpl(POOL_CONFIGURATOR, newPoolConfiguratorImpl);\n    emit PoolConfiguratorUpdated(oldPoolConfiguratorImpl, newPoolConfiguratorImpl);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function getPriceOracle() external view override returns (address) {\n    return getAddress(PRICE_ORACLE);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function setPriceOracle(address newPriceOracle) external override onlyOwner {\n    address oldPriceOracle = _addresses[PRICE_ORACLE];\n    _addresses[PRICE_ORACLE] = newPriceOracle;\n    emit PriceOracleUpdated(oldPriceOracle, newPriceOracle);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function getACLManager() external view override returns (address) {\n    return getAddress(ACL_MANAGER);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function setACLManager(address newAclManager) external override onlyOwner {\n    address oldAclManager = _addresses[ACL_MANAGER];\n    _addresses[ACL_MANAGER] = newAclManager;\n    emit ACLManagerUpdated(oldAclManager, newAclManager);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function getACLAdmin() external view override returns (address) {\n    return getAddress(ACL_ADMIN);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function setACLAdmin(address newAclAdmin) external override onlyOwner {\n    address oldAclAdmin = _addresses[ACL_ADMIN];\n    _addresses[ACL_ADMIN] = newAclAdmin;\n    emit ACLAdminUpdated(oldAclAdmin, newAclAdmin);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function getPriceOracleSentinel() external view override returns (address) {\n    return getAddress(PRICE_ORACLE_SENTINEL);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external override onlyOwner {\n    address oldPriceOracleSentinel = _addresses[PRICE_ORACLE_SENTINEL];\n    _addresses[PRICE_ORACLE_SENTINEL] = newPriceOracleSentinel;\n    emit PriceOracleSentinelUpdated(oldPriceOracleSentinel, newPriceOracleSentinel);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function getPoolDataProvider() external view override returns (address) {\n    return getAddress(DATA_PROVIDER);\n  }\n\n  /// @inheritdoc IPoolAddressesProvider\n  function setPoolDataProvider(address newDataProvider) external override onlyOwner {\n    address oldDataProvider = _addresses[DATA_PROVIDER];\n    _addresses[DATA_PROVIDER] = newDataProvider;\n    emit PoolDataProviderUpdated(oldDataProvider, newDataProvider);\n  }\n\n  /**\n   * @notice Internal function to update the implementation of a specific proxied component of the protocol.\n   * @dev If there is no proxy registered with the given identifier, it creates the proxy setting `newAddress`\n   *   as implementation and calls the initialize() function on the proxy\n   * @dev If there is already a proxy registered, it just updates the implementation to `newAddress` and\n   *   calls the initialize() function via upgradeToAndCall() in the proxy\n   * @param id The id of the proxy to be updated\n   * @param newAddress The address of the new implementation\n   */\n  function _updateImpl(bytes32 id, address newAddress) internal {\n    address proxyAddress = _addresses[id];\n    InitializableImmutableAdminUpgradeabilityProxy proxy;\n    bytes memory params = abi.encodeWithSignature('initialize(address)', address(this));\n\n    if (proxyAddress == address(0)) {\n      proxy = new InitializableImmutableAdminUpgradeabilityProxy(address(this));\n      _addresses[id] = proxyAddress = address(proxy);\n      proxy.initialize(newAddress, params);\n      emit ProxyCreated(id, proxyAddress, newAddress);\n    } else {\n      proxy = InitializableImmutableAdminUpgradeabilityProxy(payable(proxyAddress));\n      proxy.upgradeToAndCall(newAddress, params);\n    }\n  }\n\n  /**\n   * @notice Updates the identifier of the Aave market.\n   * @param newMarketId The new id of the market\n   */\n  function _setMarketId(string memory newMarketId) internal {\n    string memory oldMarketId = _marketId;\n    _marketId = newMarketId;\n    emit MarketIdSet(oldMarketId, newMarketId);\n  }\n\n  /**\n   * @notice Returns the the implementation contract of the proxy contract by its identifier.\n   * @dev It returns ZERO if there is no registered address with the given id\n   * @dev It reverts if the registered address with the given id is not `InitializableImmutableAdminUpgradeabilityProxy`\n   * @param id The id\n   * @return The address of the implementation contract\n   */\n  function _getProxyImplementation(bytes32 id) internal returns (address) {\n    address proxyAddress = _addresses[id];\n    if (proxyAddress == address(0)) {\n      return address(0);\n    } else {\n      address payable payableProxyAddress = payable(proxyAddress);\n      return InitializableImmutableAdminUpgradeabilityProxy(payableProxyAddress).implementation();\n    }\n  }\n}\n"},"@aave/core-v3/contracts/protocol/configuration/PoolAddressesProviderRegistry.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {Ownable} from '../../dependencies/openzeppelin/contracts/Ownable.sol';\nimport {Errors} from '../libraries/helpers/Errors.sol';\nimport {IPoolAddressesProviderRegistry} from '../../interfaces/IPoolAddressesProviderRegistry.sol';\n\n/**\n * @title PoolAddressesProviderRegistry\n * @author Aave\n * @notice Main registry of PoolAddressesProvider of Aave markets.\n * @dev Used for indexing purposes of Aave protocol's markets. The id assigned to a PoolAddressesProvider refers to the\n * market it is connected with, for example with `1` for the Aave main market and `2` for the next created.\n */\ncontract PoolAddressesProviderRegistry is Ownable, IPoolAddressesProviderRegistry {\n  // Map of address provider ids (addressesProvider => id)\n  mapping(address => uint256) private _addressesProviderToId;\n  // Map of id to address provider (id => addressesProvider)\n  mapping(uint256 => address) private _idToAddressesProvider;\n  // List of addresses providers\n  address[] private _addressesProvidersList;\n  // Map of address provider list indexes (addressesProvider => indexInList)\n  mapping(address => uint256) private _addressesProvidersIndexes;\n\n  /**\n   * @dev Constructor.\n   * @param owner The owner address of this contract.\n   */\n  constructor(address owner) {\n    transferOwnership(owner);\n  }\n\n  /// @inheritdoc IPoolAddressesProviderRegistry\n  function getAddressesProvidersList() external view override returns (address[] memory) {\n    return _addressesProvidersList;\n  }\n\n  /// @inheritdoc IPoolAddressesProviderRegistry\n  function registerAddressesProvider(address provider, uint256 id) external override onlyOwner {\n    require(id != 0, Errors.INVALID_ADDRESSES_PROVIDER_ID);\n    require(_idToAddressesProvider[id] == address(0), Errors.INVALID_ADDRESSES_PROVIDER_ID);\n    require(_addressesProviderToId[provider] == 0, Errors.ADDRESSES_PROVIDER_ALREADY_ADDED);\n\n    _addressesProviderToId[provider] = id;\n    _idToAddressesProvider[id] = provider;\n\n    _addToAddressesProvidersList(provider);\n    emit AddressesProviderRegistered(provider, id);\n  }\n\n  /// @inheritdoc IPoolAddressesProviderRegistry\n  function unregisterAddressesProvider(address provider) external override onlyOwner {\n    require(_addressesProviderToId[provider] != 0, Errors.ADDRESSES_PROVIDER_NOT_REGISTERED);\n    uint256 oldId = _addressesProviderToId[provider];\n    _idToAddressesProvider[oldId] = address(0);\n    _addressesProviderToId[provider] = 0;\n\n    _removeFromAddressesProvidersList(provider);\n\n    emit AddressesProviderUnregistered(provider, oldId);\n  }\n\n  /// @inheritdoc IPoolAddressesProviderRegistry\n  function getAddressesProviderIdByAddress(\n    address addressesProvider\n  ) external view override returns (uint256) {\n    return _addressesProviderToId[addressesProvider];\n  }\n\n  /// @inheritdoc IPoolAddressesProviderRegistry\n  function getAddressesProviderAddressById(uint256 id) external view override returns (address) {\n    return _idToAddressesProvider[id];\n  }\n\n  /**\n   * @notice Adds the addresses provider address to the list.\n   * @param provider The address of the PoolAddressesProvider\n   */\n  function _addToAddressesProvidersList(address provider) internal {\n    _addressesProvidersIndexes[provider] = _addressesProvidersList.length;\n    _addressesProvidersList.push(provider);\n  }\n\n  /**\n   * @notice Removes the addresses provider address from the list.\n   * @param provider The address of the PoolAddressesProvider\n   */\n  function _removeFromAddressesProvidersList(address provider) internal {\n    uint256 index = _addressesProvidersIndexes[provider];\n\n    _addressesProvidersIndexes[provider] = 0;\n\n    // Swap the index of the last addresses provider in the list with the index of the provider to remove\n    uint256 lastIndex = _addressesProvidersList.length - 1;\n    if (index < lastIndex) {\n      address lastProvider = _addressesProvidersList[lastIndex];\n      _addressesProvidersList[index] = lastProvider;\n      _addressesProvidersIndexes[lastProvider] = index;\n    }\n    _addressesProvidersList.pop();\n  }\n}\n"},"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {BaseUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol';\n\n/**\n * @title BaseImmutableAdminUpgradeabilityProxy\n * @author Aave, inspired by the OpenZeppelin upgradeability proxy pattern\n * @notice This contract combines an upgradeability proxy with an authorization\n * mechanism for administrative tasks.\n * @dev The admin role is stored in an immutable, which helps saving transactions costs\n * All external functions in this contract must be guarded by the\n * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\n * feature proposal that would enable this to be done automatically.\n */\ncontract BaseImmutableAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\n  address internal immutable _admin;\n\n  /**\n   * @dev Constructor.\n   * @param admin The address of the admin\n   */\n  constructor(address admin) {\n    _admin = admin;\n  }\n\n  modifier ifAdmin() {\n    if (msg.sender == _admin) {\n      _;\n    } else {\n      _fallback();\n    }\n  }\n\n  /**\n   * @notice Return the admin address\n   * @return The address of the proxy admin.\n   */\n  function admin() external ifAdmin returns (address) {\n    return _admin;\n  }\n\n  /**\n   * @notice Return the implementation address\n   * @return The address of the implementation.\n   */\n  function implementation() external ifAdmin returns (address) {\n    return _implementation();\n  }\n\n  /**\n   * @notice Upgrade the backing implementation of the proxy.\n   * @dev Only the admin can call this function.\n   * @param newImplementation The address of the new implementation.\n   */\n  function upgradeTo(address newImplementation) external ifAdmin {\n    _upgradeTo(newImplementation);\n  }\n\n  /**\n   * @notice Upgrade the backing implementation of the proxy and call a function\n   * on the new implementation.\n   * @dev This is useful to initialize the proxied contract.\n   * @param newImplementation The address of the new implementation.\n   * @param data Data to send as msg.data in the low level call.\n   * It should include the signature and the parameters of the function to be called, as described in\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n   */\n  function upgradeToAndCall(\n    address newImplementation,\n    bytes calldata data\n  ) external payable ifAdmin {\n    _upgradeTo(newImplementation);\n    (bool success, ) = newImplementation.delegatecall(data);\n    require(success);\n  }\n\n  /**\n   * @notice Only fall back when the sender is not the admin.\n   */\n  function _willFallback() internal virtual override {\n    require(msg.sender != _admin, 'Cannot call fallback function from the proxy admin');\n    super._willFallback();\n  }\n}\n"},"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\nimport {InitializableUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol';\nimport {Proxy} from '../../../dependencies/openzeppelin/upgradeability/Proxy.sol';\nimport {BaseImmutableAdminUpgradeabilityProxy} from './BaseImmutableAdminUpgradeabilityProxy.sol';\n\n/**\n * @title InitializableAdminUpgradeabilityProxy\n * @author Aave\n * @dev Extends BaseAdminUpgradeabilityProxy with an initializer function\n */\ncontract InitializableImmutableAdminUpgradeabilityProxy is\n  BaseImmutableAdminUpgradeabilityProxy,\n  InitializableUpgradeabilityProxy\n{\n  /**\n   * @dev Constructor.\n   * @param admin The address of the admin\n   */\n  constructor(address admin) BaseImmutableAdminUpgradeabilityProxy(admin) {\n    // Intentionally left blank\n  }\n\n  /// @inheritdoc BaseImmutableAdminUpgradeabilityProxy\n  function _willFallback() internal override(BaseImmutableAdminUpgradeabilityProxy, Proxy) {\n    BaseImmutableAdminUpgradeabilityProxy._willFallback();\n  }\n}\n"},"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.0;\n\n/**\n * @title VersionedInitializable\n * @author Aave, inspired by the OpenZeppelin Initializable contract\n * @notice Helper contract to implement initializer functions. To use it, replace\n * the constructor with a function that has the `initializer` modifier.\n * @dev WARNING: Unlike constructors, initializer functions must be manually\n * invoked. This applies both to deploying an Initializable contract, as well\n * as extending an Initializable contract via inheritance.\n * WARNING: When used with inheritance, manual care must be taken to not invoke\n * a parent initializer twice, or ensure that all initializers are idempotent,\n * because this is not dealt with automatically as with constructors.\n */\nabstract contract VersionedInitializable {\n  /**\n   * @dev Indicates that the contract has been initialized.\n   */\n  uint256 private lastInitializedRevision = 0;\n\n  /**\n   * @dev Indicates that the contract is in the process of being initialized.\n   */\n  bool private initializing;\n\n  /**\n   * @dev Modifier to use in the initializer function of a contract.\n   */\n  modifier initializer() {\n    uint256 revision = getRevision();\n    require(\n      initializing || isConstructor() || revision > lastInitializedRevision,\n      'Contract instance has already been initialized'\n    );\n\n    bool isTopLevelCall = !initializing;\n    if (isTopLevelCall) {\n      initializing = true;\n      lastInitializedRevision = revision;\n    }\n\n    _;\n\n    if (isTopLevelCall) {\n      initializing = false;\n    }\n  }\n\n  /**\n   * @notice Returns the revision number of the contract\n   * @dev Needs to be defined in the inherited class as a constant.\n   * @return The revision number\n   */\n  function getRevision() internal pure virtual returns (uint256);\n\n  /**\n   * @notice Returns true if and only if the function is running in the constructor\n   * @return True if the function is running in the constructor\n   */\n  function isConstructor() private view returns (bool) {\n    // extcodesize checks the size of the code stored in an address, and\n    // address returns the current address. Since the code is still not\n    // deployed when running a constructor, any checks on its code size will\n    // yield zero, making it an effective way to detect if a contract is\n    // under construction or not.\n    uint256 cs;\n    //solium-disable-next-line\n    assembly {\n      cs := extcodesize(address())\n    }\n    return cs == 0;\n  }\n\n  // Reserved storage space to allow for layout changes in the future.\n  uint256[50] private ______gap;\n}\n"},"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {Errors} from '../helpers/Errors.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\n\n/**\n * @title ReserveConfiguration library\n * @author Aave\n * @notice Implements the bitmap logic to handle the reserve configuration\n */\nlibrary ReserveConfiguration {\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\n\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\n\n  uint256 internal constant MAX_VALID_LTV = 65535;\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\n\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\n  uint16 public constant MAX_RESERVES_COUNT = 128;\n\n  /**\n   * @notice Sets the Loan to Value of the reserve\n   * @param self The reserve configuration\n   * @param ltv The new ltv\n   */\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\n\n    self.data = (self.data & LTV_MASK) | ltv;\n  }\n\n  /**\n   * @notice Gets the Loan to Value of the reserve\n   * @param self The reserve configuration\n   * @return The loan to value\n   */\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\n    return self.data & ~LTV_MASK;\n  }\n\n  /**\n   * @notice Sets the liquidation threshold of the reserve\n   * @param self The reserve configuration\n   * @param threshold The new liquidation threshold\n   */\n  function setLiquidationThreshold(\n    DataTypes.ReserveConfigurationMap memory self,\n    uint256 threshold\n  ) internal pure {\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\n\n    self.data =\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the liquidation threshold of the reserve\n   * @param self The reserve configuration\n   * @return The liquidation threshold\n   */\n  function getLiquidationThreshold(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (uint256) {\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\n  }\n\n  /**\n   * @notice Sets the liquidation bonus of the reserve\n   * @param self The reserve configuration\n   * @param bonus The new liquidation bonus\n   */\n  function setLiquidationBonus(\n    DataTypes.ReserveConfigurationMap memory self,\n    uint256 bonus\n  ) internal pure {\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\n\n    self.data =\n      (self.data & LIQUIDATION_BONUS_MASK) |\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the liquidation bonus of the reserve\n   * @param self The reserve configuration\n   * @return The liquidation bonus\n   */\n  function getLiquidationBonus(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (uint256) {\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\n  }\n\n  /**\n   * @notice Sets the decimals of the underlying asset of the reserve\n   * @param self The reserve configuration\n   * @param decimals The decimals\n   */\n  function setDecimals(\n    DataTypes.ReserveConfigurationMap memory self,\n    uint256 decimals\n  ) internal pure {\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\n\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the decimals of the underlying asset of the reserve\n   * @param self The reserve configuration\n   * @return The decimals of the asset\n   */\n  function getDecimals(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (uint256) {\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\n  }\n\n  /**\n   * @notice Sets the active state of the reserve\n   * @param self The reserve configuration\n   * @param active The active state\n   */\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\n    self.data =\n      (self.data & ACTIVE_MASK) |\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the active state of the reserve\n   * @param self The reserve configuration\n   * @return The active state\n   */\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\n    return (self.data & ~ACTIVE_MASK) != 0;\n  }\n\n  /**\n   * @notice Sets the frozen state of the reserve\n   * @param self The reserve configuration\n   * @param frozen The frozen state\n   */\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\n    self.data =\n      (self.data & FROZEN_MASK) |\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the frozen state of the reserve\n   * @param self The reserve configuration\n   * @return The frozen state\n   */\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\n    return (self.data & ~FROZEN_MASK) != 0;\n  }\n\n  /**\n   * @notice Sets the paused state of the reserve\n   * @param self The reserve configuration\n   * @param paused The paused state\n   */\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\n    self.data =\n      (self.data & PAUSED_MASK) |\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the paused state of the reserve\n   * @param self The reserve configuration\n   * @return The paused state\n   */\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\n    return (self.data & ~PAUSED_MASK) != 0;\n  }\n\n  /**\n   * @notice Sets the borrowable in isolation flag for the reserve.\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\n   * amount will be accumulated in the isolated collateral's total debt exposure.\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\n   * consistency in the debt ceiling calculations.\n   * @param self The reserve configuration\n   * @param borrowable True if the asset is borrowable\n   */\n  function setBorrowableInIsolation(\n    DataTypes.ReserveConfigurationMap memory self,\n    bool borrowable\n  ) internal pure {\n    self.data =\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the borrowable in isolation flag for the reserve.\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\n   * consistency in the debt ceiling calculations.\n   * @param self The reserve configuration\n   * @return The borrowable in isolation flag\n   */\n  function getBorrowableInIsolation(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (bool) {\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\n  }\n\n  /**\n   * @notice Sets the siloed borrowing flag for the reserve.\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\n   * @param self The reserve configuration\n   * @param siloed True if the asset is siloed\n   */\n  function setSiloedBorrowing(\n    DataTypes.ReserveConfigurationMap memory self,\n    bool siloed\n  ) internal pure {\n    self.data =\n      (self.data & SILOED_BORROWING_MASK) |\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the siloed borrowing flag for the reserve.\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\n   * @param self The reserve configuration\n   * @return The siloed borrowing flag\n   */\n  function getSiloedBorrowing(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (bool) {\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\n  }\n\n  /**\n   * @notice Enables or disables borrowing on the reserve\n   * @param self The reserve configuration\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\n   */\n  function setBorrowingEnabled(\n    DataTypes.ReserveConfigurationMap memory self,\n    bool enabled\n  ) internal pure {\n    self.data =\n      (self.data & BORROWING_MASK) |\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the borrowing state of the reserve\n   * @param self The reserve configuration\n   * @return The borrowing state\n   */\n  function getBorrowingEnabled(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (bool) {\n    return (self.data & ~BORROWING_MASK) != 0;\n  }\n\n  /**\n   * @notice Enables or disables stable rate borrowing on the reserve\n   * @param self The reserve configuration\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\n   */\n  function setStableRateBorrowingEnabled(\n    DataTypes.ReserveConfigurationMap memory self,\n    bool enabled\n  ) internal pure {\n    self.data =\n      (self.data & STABLE_BORROWING_MASK) |\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the stable rate borrowing state of the reserve\n   * @param self The reserve configuration\n   * @return The stable rate borrowing state\n   */\n  function getStableRateBorrowingEnabled(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (bool) {\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\n  }\n\n  /**\n   * @notice Sets the reserve factor of the reserve\n   * @param self The reserve configuration\n   * @param reserveFactor The reserve factor\n   */\n  function setReserveFactor(\n    DataTypes.ReserveConfigurationMap memory self,\n    uint256 reserveFactor\n  ) internal pure {\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\n\n    self.data =\n      (self.data & RESERVE_FACTOR_MASK) |\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the reserve factor of the reserve\n   * @param self The reserve configuration\n   * @return The reserve factor\n   */\n  function getReserveFactor(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (uint256) {\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\n  }\n\n  /**\n   * @notice Sets the borrow cap of the reserve\n   * @param self The reserve configuration\n   * @param borrowCap The borrow cap\n   */\n  function setBorrowCap(\n    DataTypes.ReserveConfigurationMap memory self,\n    uint256 borrowCap\n  ) internal pure {\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\n\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the borrow cap of the reserve\n   * @param self The reserve configuration\n   * @return The borrow cap\n   */\n  function getBorrowCap(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (uint256) {\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\n  }\n\n  /**\n   * @notice Sets the supply cap of the reserve\n   * @param self The reserve configuration\n   * @param supplyCap The supply cap\n   */\n  function setSupplyCap(\n    DataTypes.ReserveConfigurationMap memory self,\n    uint256 supplyCap\n  ) internal pure {\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\n\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the supply cap of the reserve\n   * @param self The reserve configuration\n   * @return The supply cap\n   */\n  function getSupplyCap(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (uint256) {\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\n  }\n\n  /**\n   * @notice Sets the debt ceiling in isolation mode for the asset\n   * @param self The reserve configuration\n   * @param ceiling The maximum debt ceiling for the asset\n   */\n  function setDebtCeiling(\n    DataTypes.ReserveConfigurationMap memory self,\n    uint256 ceiling\n  ) internal pure {\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\n\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\n   * @param self The reserve configuration\n   * @return The debt ceiling (0 = isolation mode disabled)\n   */\n  function getDebtCeiling(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (uint256) {\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\n  }\n\n  /**\n   * @notice Sets the liquidation protocol fee of the reserve\n   * @param self The reserve configuration\n   * @param liquidationProtocolFee The liquidation protocol fee\n   */\n  function setLiquidationProtocolFee(\n    DataTypes.ReserveConfigurationMap memory self,\n    uint256 liquidationProtocolFee\n  ) internal pure {\n    require(\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\n    );\n\n    self.data =\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\n  }\n\n  /**\n   * @dev Gets the liquidation protocol fee\n   * @param self The reserve configuration\n   * @return The liquidation protocol fee\n   */\n  function getLiquidationProtocolFee(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (uint256) {\n    return\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\n  }\n\n  /**\n   * @notice Sets the unbacked mint cap of the reserve\n   * @param self The reserve configuration\n   * @param unbackedMintCap The unbacked mint cap\n   */\n  function setUnbackedMintCap(\n    DataTypes.ReserveConfigurationMap memory self,\n    uint256 unbackedMintCap\n  ) internal pure {\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\n\n    self.data =\n      (self.data & UNBACKED_MINT_CAP_MASK) |\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\n  }\n\n  /**\n   * @dev Gets the unbacked mint cap of the reserve\n   * @param self The reserve configuration\n   * @return The unbacked mint cap\n   */\n  function getUnbackedMintCap(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (uint256) {\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\n  }\n\n  /**\n   * @notice Sets the eMode asset category\n   * @param self The reserve configuration\n   * @param category The asset category when the user selects the eMode\n   */\n  function setEModeCategory(\n    DataTypes.ReserveConfigurationMap memory self,\n    uint256 category\n  ) internal pure {\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\n\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\n  }\n\n  /**\n   * @dev Gets the eMode asset category\n   * @param self The reserve configuration\n   * @return The eMode category for the asset\n   */\n  function getEModeCategory(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (uint256) {\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\n  }\n\n  /**\n   * @notice Sets the flashloanable flag for the reserve\n   * @param self The reserve configuration\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\n   */\n  function setFlashLoanEnabled(\n    DataTypes.ReserveConfigurationMap memory self,\n    bool flashLoanEnabled\n  ) internal pure {\n    self.data =\n      (self.data & FLASHLOAN_ENABLED_MASK) |\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\n  }\n\n  /**\n   * @notice Gets the flashloanable flag for the reserve\n   * @param self The reserve configuration\n   * @return The flashloanable flag\n   */\n  function getFlashLoanEnabled(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (bool) {\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\n  }\n\n  /**\n   * @notice Gets the configuration flags of the reserve\n   * @param self The reserve configuration\n   * @return The state flag representing active\n   * @return The state flag representing frozen\n   * @return The state flag representing borrowing enabled\n   * @return The state flag representing stableRateBorrowing enabled\n   * @return The state flag representing paused\n   */\n  function getFlags(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (bool, bool, bool, bool, bool) {\n    uint256 dataLocal = self.data;\n\n    return (\n      (dataLocal & ~ACTIVE_MASK) != 0,\n      (dataLocal & ~FROZEN_MASK) != 0,\n      (dataLocal & ~BORROWING_MASK) != 0,\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\n      (dataLocal & ~PAUSED_MASK) != 0\n    );\n  }\n\n  /**\n   * @notice Gets the configuration parameters of the reserve from storage\n   * @param self The reserve configuration\n   * @return The state param representing ltv\n   * @return The state param representing liquidation threshold\n   * @return The state param representing liquidation bonus\n   * @return The state param representing reserve decimals\n   * @return The state param representing reserve factor\n   * @return The state param representing eMode category\n   */\n  function getParams(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\n    uint256 dataLocal = self.data;\n\n    return (\n      dataLocal & ~LTV_MASK,\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\n    );\n  }\n\n  /**\n   * @notice Gets the caps parameters of the reserve from storage\n   * @param self The reserve configuration\n   * @return The state param representing borrow cap\n   * @return The state param representing supply cap.\n   */\n  function getCaps(\n    DataTypes.ReserveConfigurationMap memory self\n  ) internal pure returns (uint256, uint256) {\n    uint256 dataLocal = self.data;\n\n    return (\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\n    );\n  }\n}\n"},"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {Errors} from '../helpers/Errors.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\n\n/**\n * @title UserConfiguration library\n * @author Aave\n * @notice Implements the bitmap logic to handle the user configuration\n */\nlibrary UserConfiguration {\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n\n  uint256 internal constant BORROWING_MASK =\n    0x5555555555555555555555555555555555555555555555555555555555555555;\n  uint256 internal constant COLLATERAL_MASK =\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\n\n  /**\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\n   * @param self The configuration object\n   * @param reserveIndex The index of the reserve in the bitmap\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\n   */\n  function setBorrowing(\n    DataTypes.UserConfigurationMap storage self,\n    uint256 reserveIndex,\n    bool borrowing\n  ) internal {\n    unchecked {\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\n      uint256 bit = 1 << (reserveIndex << 1);\n      if (borrowing) {\n        self.data |= bit;\n      } else {\n        self.data &= ~bit;\n      }\n    }\n  }\n\n  /**\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\n   * @param self The configuration object\n   * @param reserveIndex The index of the reserve in the bitmap\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\n   */\n  function setUsingAsCollateral(\n    DataTypes.UserConfigurationMap storage self,\n    uint256 reserveIndex,\n    bool usingAsCollateral\n  ) internal {\n    unchecked {\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\n      if (usingAsCollateral) {\n        self.data |= bit;\n      } else {\n        self.data &= ~bit;\n      }\n    }\n  }\n\n  /**\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\n   * @param self The configuration object\n   * @param reserveIndex The index of the reserve in the bitmap\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\n   */\n  function isUsingAsCollateralOrBorrowing(\n    DataTypes.UserConfigurationMap memory self,\n    uint256 reserveIndex\n  ) internal pure returns (bool) {\n    unchecked {\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\n    }\n  }\n\n  /**\n   * @notice Validate a user has been using the reserve for borrowing\n   * @param self The configuration object\n   * @param reserveIndex The index of the reserve in the bitmap\n   * @return True if the user has been using a reserve for borrowing, false otherwise\n   */\n  function isBorrowing(\n    DataTypes.UserConfigurationMap memory self,\n    uint256 reserveIndex\n  ) internal pure returns (bool) {\n    unchecked {\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\n    }\n  }\n\n  /**\n   * @notice Validate a user has been using the reserve as collateral\n   * @param self The configuration object\n   * @param reserveIndex The index of the reserve in the bitmap\n   * @return True if the user has been using a reserve as collateral, false otherwise\n   */\n  function isUsingAsCollateral(\n    DataTypes.UserConfigurationMap memory self,\n    uint256 reserveIndex\n  ) internal pure returns (bool) {\n    unchecked {\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\n    }\n  }\n\n  /**\n   * @notice Checks if a user has been supplying only one reserve as collateral\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\n   * @param self The configuration object\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\n   */\n  function isUsingAsCollateralOne(\n    DataTypes.UserConfigurationMap memory self\n  ) internal pure returns (bool) {\n    uint256 collateralData = self.data & COLLATERAL_MASK;\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\n  }\n\n  /**\n   * @notice Checks if a user has been supplying any reserve as collateral\n   * @param self The configuration object\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\n   */\n  function isUsingAsCollateralAny(\n    DataTypes.UserConfigurationMap memory self\n  ) internal pure returns (bool) {\n    return self.data & COLLATERAL_MASK != 0;\n  }\n\n  /**\n   * @notice Checks if a user has been borrowing only one asset\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\n   * @param self The configuration object\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\n   */\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\n    uint256 borrowingData = self.data & BORROWING_MASK;\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\n  }\n\n  /**\n   * @notice Checks if a user has been borrowing from any reserve\n   * @param self The configuration object\n   * @return True if the user has been borrowing any reserve, false otherwise\n   */\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\n    return self.data & BORROWING_MASK != 0;\n  }\n\n  /**\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\n   * @param self The configuration object\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\n   */\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\n    return self.data == 0;\n  }\n\n  /**\n   * @notice Returns the Isolation Mode state of the user\n   * @param self The configuration object\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @return True if the user is in isolation mode, false otherwise\n   * @return The address of the only asset used as collateral\n   * @return The debt ceiling of the reserve\n   */\n  function getIsolationModeState(\n    DataTypes.UserConfigurationMap memory self,\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList\n  ) internal view returns (bool, address, uint256) {\n    if (isUsingAsCollateralOne(self)) {\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\n\n      address assetAddress = reservesList[assetId];\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\n      if (ceiling != 0) {\n        return (true, assetAddress, ceiling);\n      }\n    }\n    return (false, address(0), 0);\n  }\n\n  /**\n   * @notice Returns the siloed borrowing state for the user\n   * @param self The configuration object\n   * @param reservesData The data of all the reserves\n   * @param reservesList The reserve list\n   * @return True if the user has borrowed a siloed asset, false otherwise\n   * @return The address of the only borrowed asset\n   */\n  function getSiloedBorrowingState(\n    DataTypes.UserConfigurationMap memory self,\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList\n  ) internal view returns (bool, address) {\n    if (isBorrowingOne(self)) {\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\n      address assetAddress = reservesList[assetId];\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\n        return (true, assetAddress);\n      }\n    }\n\n    return (false, address(0));\n  }\n\n  /**\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\n   * @param self The configuration object\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\n   */\n  function _getFirstAssetIdByMask(\n    DataTypes.UserConfigurationMap memory self,\n    uint256 mask\n  ) internal pure returns (uint256) {\n    unchecked {\n      uint256 bitmapData = self.data & mask;\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\n      uint256 id;\n\n      while ((firstAssetPosition >>= 2) != 0) {\n        id += 1;\n      }\n      return id;\n    }\n  }\n}\n"},"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\n/**\n * @title Errors library\n * @author Aave\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\n */\nlibrary Errors {\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\n}\n"},"@aave/core-v3/contracts/protocol/libraries/helpers/Helpers.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\n\n/**\n * @title Helpers library\n * @author Aave\n */\nlibrary Helpers {\n  /**\n   * @notice Fetches the user current stable and variable debt balances\n   * @param user The user address\n   * @param reserveCache The reserve cache data object\n   * @return The stable debt balance\n   * @return The variable debt balance\n   */\n  function getUserCurrentDebt(\n    address user,\n    DataTypes.ReserveCache memory reserveCache\n  ) internal view returns (uint256, uint256) {\n    return (\n      IERC20(reserveCache.stableDebtTokenAddress).balanceOf(user),\n      IERC20(reserveCache.variableDebtTokenAddress).balanceOf(user)\n    );\n  }\n}\n"},"@aave/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\nimport {IAToken} from '../../../interfaces/IAToken.sol';\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\nimport {Helpers} from '../helpers/Helpers.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\nimport {ValidationLogic} from './ValidationLogic.sol';\nimport {ReserveLogic} from './ReserveLogic.sol';\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\n\n/**\n * @title BorrowLogic library\n * @author Aave\n * @notice Implements the base logic for all the actions related to borrowing\n */\nlibrary BorrowLogic {\n  using ReserveLogic for DataTypes.ReserveCache;\n  using ReserveLogic for DataTypes.ReserveData;\n  using GPv2SafeERC20 for IERC20;\n  using UserConfiguration for DataTypes.UserConfigurationMap;\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n  using SafeCast for uint256;\n\n  // See `IPool` for descriptions\n  event Borrow(\n    address indexed reserve,\n    address user,\n    address indexed onBehalfOf,\n    uint256 amount,\n    DataTypes.InterestRateMode interestRateMode,\n    uint256 borrowRate,\n    uint16 indexed referralCode\n  );\n  event Repay(\n    address indexed reserve,\n    address indexed user,\n    address indexed repayer,\n    uint256 amount,\n    bool useATokens\n  );\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\n  event SwapBorrowRateMode(\n    address indexed reserve,\n    address indexed user,\n    DataTypes.InterestRateMode interestRateMode\n  );\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\n\n  /**\n   * @notice Implements the borrow feature. Borrowing allows users that provided collateral to draw liquidity from the\n   * Aave protocol proportionally to their collateralization power. For isolated positions, it also increases the\n   * isolated debt.\n   * @dev  Emits the `Borrow()` event\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n   * @param params The additional parameters needed to execute the borrow function\n   */\n  function executeBorrow(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    DataTypes.UserConfigurationMap storage userConfig,\n    DataTypes.ExecuteBorrowParams memory params\n  ) public {\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\n\n    reserve.updateState(reserveCache);\n\n    (\n      bool isolationModeActive,\n      address isolationModeCollateralAddress,\n      uint256 isolationModeDebtCeiling\n    ) = userConfig.getIsolationModeState(reservesData, reservesList);\n\n    ValidationLogic.validateBorrow(\n      reservesData,\n      reservesList,\n      eModeCategories,\n      DataTypes.ValidateBorrowParams({\n        reserveCache: reserveCache,\n        userConfig: userConfig,\n        asset: params.asset,\n        userAddress: params.onBehalfOf,\n        amount: params.amount,\n        interestRateMode: params.interestRateMode,\n        maxStableLoanPercent: params.maxStableRateBorrowSizePercent,\n        reservesCount: params.reservesCount,\n        oracle: params.oracle,\n        userEModeCategory: params.userEModeCategory,\n        priceOracleSentinel: params.priceOracleSentinel,\n        isolationModeActive: isolationModeActive,\n        isolationModeCollateralAddress: isolationModeCollateralAddress,\n        isolationModeDebtCeiling: isolationModeDebtCeiling\n      })\n    );\n\n    uint256 currentStableRate = 0;\n    bool isFirstBorrowing = false;\n\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\n      currentStableRate = reserve.currentStableBorrowRate;\n\n      (\n        isFirstBorrowing,\n        reserveCache.nextTotalStableDebt,\n        reserveCache.nextAvgStableBorrowRate\n      ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).mint(\n        params.user,\n        params.onBehalfOf,\n        params.amount,\n        currentStableRate\n      );\n    } else {\n      (isFirstBorrowing, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\n        reserveCache.variableDebtTokenAddress\n      ).mint(params.user, params.onBehalfOf, params.amount, reserveCache.nextVariableBorrowIndex);\n    }\n\n    if (isFirstBorrowing) {\n      userConfig.setBorrowing(reserve.id, true);\n    }\n\n    if (isolationModeActive) {\n      uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\n        .isolationModeTotalDebt += (params.amount /\n        10 **\n          (reserveCache.reserveConfiguration.getDecimals() -\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\n      emit IsolationModeTotalDebtUpdated(\n        isolationModeCollateralAddress,\n        nextIsolationModeTotalDebt\n      );\n    }\n\n    reserve.updateInterestRates(\n      reserveCache,\n      params.asset,\n      0,\n      params.releaseUnderlying ? params.amount : 0\n    );\n\n    if (params.releaseUnderlying) {\n      IAToken(reserveCache.aTokenAddress).transferUnderlyingTo(params.user, params.amount);\n    }\n\n    emit Borrow(\n      params.asset,\n      params.user,\n      params.onBehalfOf,\n      params.amount,\n      params.interestRateMode,\n      params.interestRateMode == DataTypes.InterestRateMode.STABLE\n        ? currentStableRate\n        : reserve.currentVariableBorrowRate,\n      params.referralCode\n    );\n  }\n\n  /**\n   * @notice Implements the repay feature. Repaying transfers the underlying back to the aToken and clears the\n   * equivalent amount of debt for the user by burning the corresponding debt token. For isolated positions, it also\n   * reduces the isolated debt.\n   * @dev  Emits the `Repay()` event\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n   * @param params The additional parameters needed to execute the repay function\n   * @return The actual amount being repaid\n   */\n  function executeRepay(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    DataTypes.UserConfigurationMap storage userConfig,\n    DataTypes.ExecuteRepayParams memory params\n  ) external returns (uint256) {\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\n    reserve.updateState(reserveCache);\n\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\n      params.onBehalfOf,\n      reserveCache\n    );\n\n    ValidationLogic.validateRepay(\n      reserveCache,\n      params.amount,\n      params.interestRateMode,\n      params.onBehalfOf,\n      stableDebt,\n      variableDebt\n    );\n\n    uint256 paybackAmount = params.interestRateMode == DataTypes.InterestRateMode.STABLE\n      ? stableDebt\n      : variableDebt;\n\n    // Allows a user to repay with aTokens without leaving dust from interest.\n    if (params.useATokens && params.amount == type(uint256).max) {\n      params.amount = IAToken(reserveCache.aTokenAddress).balanceOf(msg.sender);\n    }\n\n    if (params.amount < paybackAmount) {\n      paybackAmount = params.amount;\n    }\n\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\n        reserveCache.stableDebtTokenAddress\n      ).burn(params.onBehalfOf, paybackAmount);\n    } else {\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\n        reserveCache.variableDebtTokenAddress\n      ).burn(params.onBehalfOf, paybackAmount, reserveCache.nextVariableBorrowIndex);\n    }\n\n    reserve.updateInterestRates(\n      reserveCache,\n      params.asset,\n      params.useATokens ? 0 : paybackAmount,\n      0\n    );\n\n    if (stableDebt + variableDebt - paybackAmount == 0) {\n      userConfig.setBorrowing(reserve.id, false);\n    }\n\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\n      reservesData,\n      reservesList,\n      userConfig,\n      reserveCache,\n      paybackAmount\n    );\n\n    if (params.useATokens) {\n      IAToken(reserveCache.aTokenAddress).burn(\n        msg.sender,\n        reserveCache.aTokenAddress,\n        paybackAmount,\n        reserveCache.nextLiquidityIndex\n      );\n    } else {\n      IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, paybackAmount);\n      IAToken(reserveCache.aTokenAddress).handleRepayment(\n        msg.sender,\n        params.onBehalfOf,\n        paybackAmount\n      );\n    }\n\n    emit Repay(params.asset, params.onBehalfOf, msg.sender, paybackAmount, params.useATokens);\n\n    return paybackAmount;\n  }\n\n  /**\n   * @notice Implements the rebalance stable borrow rate feature. In case of liquidity crunches on the protocol, stable\n   * rate borrows might need to be rebalanced to bring back equilibrium between the borrow and supply APYs.\n   * @dev The rules that define if a position can be rebalanced are implemented in `ValidationLogic.validateRebalanceStableBorrowRate()`\n   * @dev Emits the `RebalanceStableBorrowRate()` event\n   * @param reserve The state of the reserve of the asset being repaid\n   * @param asset The asset of the position being rebalanced\n   * @param user The user being rebalanced\n   */\n  function executeRebalanceStableBorrowRate(\n    DataTypes.ReserveData storage reserve,\n    address asset,\n    address user\n  ) external {\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\n    reserve.updateState(reserveCache);\n\n    ValidationLogic.validateRebalanceStableBorrowRate(reserve, reserveCache, asset);\n\n    IStableDebtToken stableDebtToken = IStableDebtToken(reserveCache.stableDebtTokenAddress);\n    uint256 stableDebt = IERC20(address(stableDebtToken)).balanceOf(user);\n\n    stableDebtToken.burn(user, stableDebt);\n\n    (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = stableDebtToken\n      .mint(user, user, stableDebt, reserve.currentStableBorrowRate);\n\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\n\n    emit RebalanceStableBorrowRate(asset, user);\n  }\n\n  /**\n   * @notice Implements the swap borrow rate feature. Borrowers can swap from variable to stable positions at any time.\n   * @dev Emits the `Swap()` event\n   * @param reserve The of the reserve of the asset being repaid\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n   * @param asset The asset of the position being swapped\n   * @param interestRateMode The current interest rate mode of the position being swapped\n   */\n  function executeSwapBorrowRateMode(\n    DataTypes.ReserveData storage reserve,\n    DataTypes.UserConfigurationMap storage userConfig,\n    address asset,\n    DataTypes.InterestRateMode interestRateMode\n  ) external {\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\n\n    reserve.updateState(reserveCache);\n\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\n      msg.sender,\n      reserveCache\n    );\n\n    ValidationLogic.validateSwapRateMode(\n      reserve,\n      reserveCache,\n      userConfig,\n      stableDebt,\n      variableDebt,\n      interestRateMode\n    );\n\n    if (interestRateMode == DataTypes.InterestRateMode.STABLE) {\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\n        reserveCache.stableDebtTokenAddress\n      ).burn(msg.sender, stableDebt);\n\n      (, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\n        reserveCache.variableDebtTokenAddress\n      ).mint(msg.sender, msg.sender, stableDebt, reserveCache.nextVariableBorrowIndex);\n    } else {\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\n        reserveCache.variableDebtTokenAddress\n      ).burn(msg.sender, variableDebt, reserveCache.nextVariableBorrowIndex);\n\n      (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\n        reserveCache.stableDebtTokenAddress\n      ).mint(msg.sender, msg.sender, variableDebt, reserve.currentStableBorrowRate);\n    }\n\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\n\n    emit SwapBorrowRateMode(asset, msg.sender, interestRateMode);\n  }\n}\n"},"@aave/core-v3/contracts/protocol/libraries/logic/BridgeLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\nimport {IAToken} from '../../../interfaces/IAToken.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\nimport {WadRayMath} from '../math/WadRayMath.sol';\nimport {PercentageMath} from '../math/PercentageMath.sol';\nimport {Errors} from '../helpers/Errors.sol';\nimport {ValidationLogic} from './ValidationLogic.sol';\nimport {ReserveLogic} from './ReserveLogic.sol';\n\nlibrary BridgeLogic {\n  using ReserveLogic for DataTypes.ReserveCache;\n  using ReserveLogic for DataTypes.ReserveData;\n  using UserConfiguration for DataTypes.UserConfigurationMap;\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n  using WadRayMath for uint256;\n  using PercentageMath for uint256;\n  using SafeCast for uint256;\n  using GPv2SafeERC20 for IERC20;\n\n  // See `IPool` for descriptions\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\n  event MintUnbacked(\n    address indexed reserve,\n    address user,\n    address indexed onBehalfOf,\n    uint256 amount,\n    uint16 indexed referralCode\n  );\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\n\n  /**\n   * @notice Mint unbacked aTokens to a user and updates the unbacked for the reserve.\n   * @dev Essentially a supply without transferring the underlying.\n   * @dev Emits the `MintUnbacked` event\n   * @dev Emits the `ReserveUsedAsCollateralEnabled` if asset is set as collateral\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n   * @param asset The address of the underlying asset to mint aTokens of\n   * @param amount The amount to mint\n   * @param onBehalfOf The address that will receive the aTokens\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n   *   0 if the action is executed directly by the user, without any middle-man\n   */\n  function executeMintUnbacked(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    DataTypes.UserConfigurationMap storage userConfig,\n    address asset,\n    uint256 amount,\n    address onBehalfOf,\n    uint16 referralCode\n  ) external {\n    DataTypes.ReserveData storage reserve = reservesData[asset];\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\n\n    reserve.updateState(reserveCache);\n\n    ValidationLogic.validateSupply(reserveCache, reserve, amount);\n\n    uint256 unbackedMintCap = reserveCache.reserveConfiguration.getUnbackedMintCap();\n    uint256 reserveDecimals = reserveCache.reserveConfiguration.getDecimals();\n\n    uint256 unbacked = reserve.unbacked += amount.toUint128();\n\n    require(\n      unbacked <= unbackedMintCap * (10 ** reserveDecimals),\n      Errors.UNBACKED_MINT_CAP_EXCEEDED\n    );\n\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\n\n    bool isFirstSupply = IAToken(reserveCache.aTokenAddress).mint(\n      msg.sender,\n      onBehalfOf,\n      amount,\n      reserveCache.nextLiquidityIndex\n    );\n\n    if (isFirstSupply) {\n      if (\n        ValidationLogic.validateAutomaticUseAsCollateral(\n          reservesData,\n          reservesList,\n          userConfig,\n          reserveCache.reserveConfiguration,\n          reserveCache.aTokenAddress\n        )\n      ) {\n        userConfig.setUsingAsCollateral(reserve.id, true);\n        emit ReserveUsedAsCollateralEnabled(asset, onBehalfOf);\n      }\n    }\n\n    emit MintUnbacked(asset, msg.sender, onBehalfOf, amount, referralCode);\n  }\n\n  /**\n   * @notice Back the current unbacked with `amount` and pay `fee`.\n   * @dev It is not possible to back more than the existing unbacked amount of the reserve\n   * @dev Emits the `BackUnbacked` event\n   * @param reserve The reserve to back unbacked for\n   * @param asset The address of the underlying asset to repay\n   * @param amount The amount to back\n   * @param fee The amount paid in fees\n   * @param protocolFeeBps The fraction of fees in basis points paid to the protocol\n   * @return The backed amount\n   */\n  function executeBackUnbacked(\n    DataTypes.ReserveData storage reserve,\n    address asset,\n    uint256 amount,\n    uint256 fee,\n    uint256 protocolFeeBps\n  ) external returns (uint256) {\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\n\n    reserve.updateState(reserveCache);\n\n    uint256 backingAmount = (amount < reserve.unbacked) ? amount : reserve.unbacked;\n\n    uint256 feeToProtocol = fee.percentMul(protocolFeeBps);\n    uint256 feeToLP = fee - feeToProtocol;\n    uint256 added = backingAmount + fee;\n\n    reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex(\n      IERC20(reserveCache.aTokenAddress).totalSupply() +\n        uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex),\n      feeToLP\n    );\n\n    reserve.accruedToTreasury += feeToProtocol.rayDiv(reserveCache.nextLiquidityIndex).toUint128();\n\n    reserve.unbacked -= backingAmount.toUint128();\n    reserve.updateInterestRates(reserveCache, asset, added, 0);\n\n    IERC20(asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, added);\n\n    emit BackUnbacked(asset, msg.sender, backingAmount, fee);\n\n    return backingAmount;\n  }\n}\n"},"@aave/core-v3/contracts/protocol/libraries/logic/ConfiguratorLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IPool} from '../../../interfaces/IPool.sol';\nimport {IInitializableAToken} from '../../../interfaces/IInitializableAToken.sol';\nimport {IInitializableDebtToken} from '../../../interfaces/IInitializableDebtToken.sol';\nimport {InitializableImmutableAdminUpgradeabilityProxy} from '../aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol';\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\nimport {ConfiguratorInputTypes} from '../types/ConfiguratorInputTypes.sol';\n\n/**\n * @title ConfiguratorLogic library\n * @author Aave\n * @notice Implements the functions to initialize reserves and update aTokens and debtTokens\n */\nlibrary ConfiguratorLogic {\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n\n  // See `IPoolConfigurator` for descriptions\n  event ReserveInitialized(\n    address indexed asset,\n    address indexed aToken,\n    address stableDebtToken,\n    address variableDebtToken,\n    address interestRateStrategyAddress\n  );\n  event ATokenUpgraded(\n    address indexed asset,\n    address indexed proxy,\n    address indexed implementation\n  );\n  event StableDebtTokenUpgraded(\n    address indexed asset,\n    address indexed proxy,\n    address indexed implementation\n  );\n  event VariableDebtTokenUpgraded(\n    address indexed asset,\n    address indexed proxy,\n    address indexed implementation\n  );\n\n  /**\n   * @notice Initialize a reserve by creating and initializing aToken, stable debt token and variable debt token\n   * @dev Emits the `ReserveInitialized` event\n   * @param pool The Pool in which the reserve will be initialized\n   * @param input The needed parameters for the initialization\n   */\n  function executeInitReserve(\n    IPool pool,\n    ConfiguratorInputTypes.InitReserveInput calldata input\n  ) public {\n    address aTokenProxyAddress = _initTokenWithProxy(\n      input.aTokenImpl,\n      abi.encodeWithSelector(\n        IInitializableAToken.initialize.selector,\n        pool,\n        input.treasury,\n        input.underlyingAsset,\n        input.incentivesController,\n        input.underlyingAssetDecimals,\n        input.aTokenName,\n        input.aTokenSymbol,\n        input.params\n      )\n    );\n\n    address stableDebtTokenProxyAddress = _initTokenWithProxy(\n      input.stableDebtTokenImpl,\n      abi.encodeWithSelector(\n        IInitializableDebtToken.initialize.selector,\n        pool,\n        input.underlyingAsset,\n        input.incentivesController,\n        input.underlyingAssetDecimals,\n        input.stableDebtTokenName,\n        input.stableDebtTokenSymbol,\n        input.params\n      )\n    );\n\n    address variableDebtTokenProxyAddress = _initTokenWithProxy(\n      input.variableDebtTokenImpl,\n      abi.encodeWithSelector(\n        IInitializableDebtToken.initialize.selector,\n        pool,\n        input.underlyingAsset,\n        input.incentivesController,\n        input.underlyingAssetDecimals,\n        input.variableDebtTokenName,\n        input.variableDebtTokenSymbol,\n        input.params\n      )\n    );\n\n    pool.initReserve(\n      input.underlyingAsset,\n      aTokenProxyAddress,\n      stableDebtTokenProxyAddress,\n      variableDebtTokenProxyAddress,\n      input.interestRateStrategyAddress\n    );\n\n    DataTypes.ReserveConfigurationMap memory currentConfig = DataTypes.ReserveConfigurationMap(0);\n\n    currentConfig.setDecimals(input.underlyingAssetDecimals);\n\n    currentConfig.setActive(true);\n    currentConfig.setPaused(false);\n    currentConfig.setFrozen(false);\n\n    pool.setConfiguration(input.underlyingAsset, currentConfig);\n\n    emit ReserveInitialized(\n      input.underlyingAsset,\n      aTokenProxyAddress,\n      stableDebtTokenProxyAddress,\n      variableDebtTokenProxyAddress,\n      input.interestRateStrategyAddress\n    );\n  }\n\n  /**\n   * @notice Updates the aToken implementation and initializes it\n   * @dev Emits the `ATokenUpgraded` event\n   * @param cachedPool The Pool containing the reserve with the aToken\n   * @param input The parameters needed for the initialize call\n   */\n  function executeUpdateAToken(\n    IPool cachedPool,\n    ConfiguratorInputTypes.UpdateATokenInput calldata input\n  ) public {\n    DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);\n\n    (, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();\n\n    bytes memory encodedCall = abi.encodeWithSelector(\n      IInitializableAToken.initialize.selector,\n      cachedPool,\n      input.treasury,\n      input.asset,\n      input.incentivesController,\n      decimals,\n      input.name,\n      input.symbol,\n      input.params\n    );\n\n    _upgradeTokenImplementation(reserveData.aTokenAddress, input.implementation, encodedCall);\n\n    emit ATokenUpgraded(input.asset, reserveData.aTokenAddress, input.implementation);\n  }\n\n  /**\n   * @notice Updates the stable debt token implementation and initializes it\n   * @dev Emits the `StableDebtTokenUpgraded` event\n   * @param cachedPool The Pool containing the reserve with the stable debt token\n   * @param input The parameters needed for the initialize call\n   */\n  function executeUpdateStableDebtToken(\n    IPool cachedPool,\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\n  ) public {\n    DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);\n\n    (, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();\n\n    bytes memory encodedCall = abi.encodeWithSelector(\n      IInitializableDebtToken.initialize.selector,\n      cachedPool,\n      input.asset,\n      input.incentivesController,\n      decimals,\n      input.name,\n      input.symbol,\n      input.params\n    );\n\n    _upgradeTokenImplementation(\n      reserveData.stableDebtTokenAddress,\n      input.implementation,\n      encodedCall\n    );\n\n    emit StableDebtTokenUpgraded(\n      input.asset,\n      reserveData.stableDebtTokenAddress,\n      input.implementation\n    );\n  }\n\n  /**\n   * @notice Updates the variable debt token implementation and initializes it\n   * @dev Emits the `VariableDebtTokenUpgraded` event\n   * @param cachedPool The Pool containing the reserve with the variable debt token\n   * @param input The parameters needed for the initialize call\n   */\n  function executeUpdateVariableDebtToken(\n    IPool cachedPool,\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\n  ) public {\n    DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);\n\n    (, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();\n\n    bytes memory encodedCall = abi.encodeWithSelector(\n      IInitializableDebtToken.initialize.selector,\n      cachedPool,\n      input.asset,\n      input.incentivesController,\n      decimals,\n      input.name,\n      input.symbol,\n      input.params\n    );\n\n    _upgradeTokenImplementation(\n      reserveData.variableDebtTokenAddress,\n      input.implementation,\n      encodedCall\n    );\n\n    emit VariableDebtTokenUpgraded(\n      input.asset,\n      reserveData.variableDebtTokenAddress,\n      input.implementation\n    );\n  }\n\n  /**\n   * @notice Creates a new proxy and initializes the implementation\n   * @param implementation The address of the implementation\n   * @param initParams The parameters that is passed to the implementation to initialize\n   * @return The address of initialized proxy\n   */\n  function _initTokenWithProxy(\n    address implementation,\n    bytes memory initParams\n  ) internal returns (address) {\n    InitializableImmutableAdminUpgradeabilityProxy proxy = new InitializableImmutableAdminUpgradeabilityProxy(\n        address(this)\n      );\n\n    proxy.initialize(implementation, initParams);\n\n    return address(proxy);\n  }\n\n  /**\n   * @notice Upgrades the implementation and makes call to the proxy\n   * @dev The call is used to initialize the new implementation.\n   * @param proxyAddress The address of the proxy\n   * @param implementation The address of the new implementation\n   * @param  initParams The parameters to the call after the upgrade\n   */\n  function _upgradeTokenImplementation(\n    address proxyAddress,\n    address implementation,\n    bytes memory initParams\n  ) internal {\n    InitializableImmutableAdminUpgradeabilityProxy proxy = InitializableImmutableAdminUpgradeabilityProxy(\n        payable(proxyAddress)\n      );\n\n    proxy.upgradeToAndCall(implementation, initParams);\n  }\n}\n"},"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\nimport {Errors} from '../helpers/Errors.sol';\nimport {WadRayMath} from '../math/WadRayMath.sol';\nimport {PercentageMath} from '../math/PercentageMath.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\nimport {ValidationLogic} from './ValidationLogic.sol';\nimport {ReserveLogic} from './ReserveLogic.sol';\n\n/**\n * @title EModeLogic library\n * @author Aave\n * @notice Implements the base logic for all the actions related to the eMode\n */\nlibrary EModeLogic {\n  using ReserveLogic for DataTypes.ReserveCache;\n  using ReserveLogic for DataTypes.ReserveData;\n  using GPv2SafeERC20 for IERC20;\n  using UserConfiguration for DataTypes.UserConfigurationMap;\n  using WadRayMath for uint256;\n  using PercentageMath for uint256;\n\n  // See `IPool` for descriptions\n  event UserEModeSet(address indexed user, uint8 categoryId);\n\n  /**\n   * @notice Updates the user efficiency mode category\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\n   * @dev Emits the `UserEModeSet` event\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param usersEModeCategory The state of all users efficiency mode category\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n   * @param params The additional parameters needed to execute the setUserEMode function\n   */\n  function executeSetUserEMode(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    mapping(address => uint8) storage usersEModeCategory,\n    DataTypes.UserConfigurationMap storage userConfig,\n    DataTypes.ExecuteSetUserEModeParams memory params\n  ) external {\n    ValidationLogic.validateSetUserEMode(\n      reservesData,\n      reservesList,\n      eModeCategories,\n      userConfig,\n      params.reservesCount,\n      params.categoryId\n    );\n\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\n    usersEModeCategory[msg.sender] = params.categoryId;\n\n    if (prevCategoryId != 0) {\n      ValidationLogic.validateHealthFactor(\n        reservesData,\n        reservesList,\n        eModeCategories,\n        userConfig,\n        msg.sender,\n        params.categoryId,\n        params.reservesCount,\n        params.oracle\n      );\n    }\n    emit UserEModeSet(msg.sender, params.categoryId);\n  }\n\n  /**\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\n   * @dev The eMode asset price returned is 0 if no oracle is specified\n   * @param category The user eMode category\n   * @param oracle The price oracle\n   * @return The eMode ltv\n   * @return The eMode liquidation threshold\n   * @return The eMode asset price\n   */\n  function getEModeConfiguration(\n    DataTypes.EModeCategory storage category,\n    IPriceOracleGetter oracle\n  ) internal view returns (uint256, uint256, uint256) {\n    uint256 eModeAssetPrice = 0;\n    address eModePriceSource = category.priceSource;\n\n    if (eModePriceSource != address(0)) {\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\n    }\n\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\n  }\n\n  /**\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\n   * @param eModeUserCategory The user eMode category\n   * @param eModeAssetCategory The asset eMode category\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\n   */\n  function isInEModeCategory(\n    uint256 eModeUserCategory,\n    uint256 eModeAssetCategory\n  ) internal pure returns (bool) {\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\n  }\n}\n"},"@aave/core-v3/contracts/protocol/libraries/logic/FlashLoanLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {IAToken} from '../../../interfaces/IAToken.sol';\nimport {IFlashLoanReceiver} from '../../../flashloan/interfaces/IFlashLoanReceiver.sol';\nimport {IFlashLoanSimpleReceiver} from '../../../flashloan/interfaces/IFlashLoanSimpleReceiver.sol';\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\nimport {Errors} from '../helpers/Errors.sol';\nimport {WadRayMath} from '../math/WadRayMath.sol';\nimport {PercentageMath} from '../math/PercentageMath.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\nimport {ValidationLogic} from './ValidationLogic.sol';\nimport {BorrowLogic} from './BorrowLogic.sol';\nimport {ReserveLogic} from './ReserveLogic.sol';\n\n/**\n * @title FlashLoanLogic library\n * @author Aave\n * @notice Implements the logic for the flash loans\n */\nlibrary FlashLoanLogic {\n  using ReserveLogic for DataTypes.ReserveCache;\n  using ReserveLogic for DataTypes.ReserveData;\n  using GPv2SafeERC20 for IERC20;\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n  using WadRayMath for uint256;\n  using PercentageMath for uint256;\n  using SafeCast for uint256;\n\n  // See `IPool` for descriptions\n  event FlashLoan(\n    address indexed target,\n    address initiator,\n    address indexed asset,\n    uint256 amount,\n    DataTypes.InterestRateMode interestRateMode,\n    uint256 premium,\n    uint16 indexed referralCode\n  );\n\n  // Helper struct for internal variables used in the `executeFlashLoan` function\n  struct FlashLoanLocalVars {\n    IFlashLoanReceiver receiver;\n    uint256 i;\n    address currentAsset;\n    uint256 currentAmount;\n    uint256[] totalPremiums;\n    uint256 flashloanPremiumTotal;\n    uint256 flashloanPremiumToProtocol;\n  }\n\n  /**\n   * @notice Implements the flashloan feature that allow users to access liquidity of the pool for one transaction\n   * as long as the amount taken plus fee is returned or debt is opened.\n   * @dev For authorized flashborrowers the fee is waived\n   * @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\n   * if the receiver have not approved the pool the transaction will revert.\n   * @dev Emits the `FlashLoan()` event\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n   * @param params The additional parameters needed to execute the flashloan function\n   */\n  function executeFlashLoan(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    DataTypes.UserConfigurationMap storage userConfig,\n    DataTypes.FlashloanParams memory params\n  ) external {\n    // The usual action flow (cache -> updateState -> validation -> changeState -> updateRates)\n    // is altered to (validation -> user payload -> cache -> updateState -> changeState -> updateRates) for flashloans.\n    // This is done to protect against reentrance and rate manipulation within the user specified payload.\n\n    ValidationLogic.validateFlashloan(reservesData, params.assets, params.amounts);\n\n    FlashLoanLocalVars memory vars;\n\n    vars.totalPremiums = new uint256[](params.assets.length);\n\n    vars.receiver = IFlashLoanReceiver(params.receiverAddress);\n    (vars.flashloanPremiumTotal, vars.flashloanPremiumToProtocol) = params.isAuthorizedFlashBorrower\n      ? (0, 0)\n      : (params.flashLoanPremiumTotal, params.flashLoanPremiumToProtocol);\n\n    for (vars.i = 0; vars.i < params.assets.length; vars.i++) {\n      vars.currentAmount = params.amounts[vars.i];\n      vars.totalPremiums[vars.i] = DataTypes.InterestRateMode(params.interestRateModes[vars.i]) ==\n        DataTypes.InterestRateMode.NONE\n        ? vars.currentAmount.percentMul(vars.flashloanPremiumTotal)\n        : 0;\n      IAToken(reservesData[params.assets[vars.i]].aTokenAddress).transferUnderlyingTo(\n        params.receiverAddress,\n        vars.currentAmount\n      );\n    }\n\n    require(\n      vars.receiver.executeOperation(\n        params.assets,\n        params.amounts,\n        vars.totalPremiums,\n        msg.sender,\n        params.params\n      ),\n      Errors.INVALID_FLASHLOAN_EXECUTOR_RETURN\n    );\n\n    for (vars.i = 0; vars.i < params.assets.length; vars.i++) {\n      vars.currentAsset = params.assets[vars.i];\n      vars.currentAmount = params.amounts[vars.i];\n\n      if (\n        DataTypes.InterestRateMode(params.interestRateModes[vars.i]) ==\n        DataTypes.InterestRateMode.NONE\n      ) {\n        _handleFlashLoanRepayment(\n          reservesData[vars.currentAsset],\n          DataTypes.FlashLoanRepaymentParams({\n            asset: vars.currentAsset,\n            receiverAddress: params.receiverAddress,\n            amount: vars.currentAmount,\n            totalPremium: vars.totalPremiums[vars.i],\n            flashLoanPremiumToProtocol: vars.flashloanPremiumToProtocol,\n            referralCode: params.referralCode\n          })\n        );\n      } else {\n        // If the user chose to not return the funds, the system checks if there is enough collateral and\n        // eventually opens a debt position\n        BorrowLogic.executeBorrow(\n          reservesData,\n          reservesList,\n          eModeCategories,\n          userConfig,\n          DataTypes.ExecuteBorrowParams({\n            asset: vars.currentAsset,\n            user: msg.sender,\n            onBehalfOf: params.onBehalfOf,\n            amount: vars.currentAmount,\n            interestRateMode: DataTypes.InterestRateMode(params.interestRateModes[vars.i]),\n            referralCode: params.referralCode,\n            releaseUnderlying: false,\n            maxStableRateBorrowSizePercent: params.maxStableRateBorrowSizePercent,\n            reservesCount: params.reservesCount,\n            oracle: IPoolAddressesProvider(params.addressesProvider).getPriceOracle(),\n            userEModeCategory: params.userEModeCategory,\n            priceOracleSentinel: IPoolAddressesProvider(params.addressesProvider)\n              .getPriceOracleSentinel()\n          })\n        );\n        // no premium is paid when taking on the flashloan as debt\n        emit FlashLoan(\n          params.receiverAddress,\n          msg.sender,\n          vars.currentAsset,\n          vars.currentAmount,\n          DataTypes.InterestRateMode(params.interestRateModes[vars.i]),\n          0,\n          params.referralCode\n        );\n      }\n    }\n  }\n\n  /**\n   * @notice Implements the simple flashloan feature that allow users to access liquidity of ONE reserve for one\n   * transaction as long as the amount taken plus fee is returned.\n   * @dev Does not waive fee for approved flashborrowers nor allow taking on debt instead of repaying to save gas\n   * @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\n   * if the receiver have not approved the pool the transaction will revert.\n   * @dev Emits the `FlashLoan()` event\n   * @param reserve The state of the flashloaned reserve\n   * @param params The additional parameters needed to execute the simple flashloan function\n   */\n  function executeFlashLoanSimple(\n    DataTypes.ReserveData storage reserve,\n    DataTypes.FlashloanSimpleParams memory params\n  ) external {\n    // The usual action flow (cache -> updateState -> validation -> changeState -> updateRates)\n    // is altered to (validation -> user payload -> cache -> updateState -> changeState -> updateRates) for flashloans.\n    // This is done to protect against reentrance and rate manipulation within the user specified payload.\n\n    ValidationLogic.validateFlashloanSimple(reserve);\n\n    IFlashLoanSimpleReceiver receiver = IFlashLoanSimpleReceiver(params.receiverAddress);\n    uint256 totalPremium = params.amount.percentMul(params.flashLoanPremiumTotal);\n    IAToken(reserve.aTokenAddress).transferUnderlyingTo(params.receiverAddress, params.amount);\n\n    require(\n      receiver.executeOperation(\n        params.asset,\n        params.amount,\n        totalPremium,\n        msg.sender,\n        params.params\n      ),\n      Errors.INVALID_FLASHLOAN_EXECUTOR_RETURN\n    );\n\n    _handleFlashLoanRepayment(\n      reserve,\n      DataTypes.FlashLoanRepaymentParams({\n        asset: params.asset,\n        receiverAddress: params.receiverAddress,\n        amount: params.amount,\n        totalPremium: totalPremium,\n        flashLoanPremiumToProtocol: params.flashLoanPremiumToProtocol,\n        referralCode: params.referralCode\n      })\n    );\n  }\n\n  /**\n   * @notice Handles repayment of flashloaned assets + premium\n   * @dev Will pull the amount + premium from the receiver, so must have approved pool\n   * @param reserve The state of the flashloaned reserve\n   * @param params The additional parameters needed to execute the repayment function\n   */\n  function _handleFlashLoanRepayment(\n    DataTypes.ReserveData storage reserve,\n    DataTypes.FlashLoanRepaymentParams memory params\n  ) internal {\n    uint256 premiumToProtocol = params.totalPremium.percentMul(params.flashLoanPremiumToProtocol);\n    uint256 premiumToLP = params.totalPremium - premiumToProtocol;\n    uint256 amountPlusPremium = params.amount + params.totalPremium;\n\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\n    reserve.updateState(reserveCache);\n    reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex(\n      IERC20(reserveCache.aTokenAddress).totalSupply() +\n        uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex),\n      premiumToLP\n    );\n\n    reserve.accruedToTreasury += premiumToProtocol\n      .rayDiv(reserveCache.nextLiquidityIndex)\n      .toUint128();\n\n    reserve.updateInterestRates(reserveCache, params.asset, amountPlusPremium, 0);\n\n    IERC20(params.asset).safeTransferFrom(\n      params.receiverAddress,\n      reserveCache.aTokenAddress,\n      amountPlusPremium\n    );\n\n    IAToken(reserveCache.aTokenAddress).handleRepayment(\n      params.receiverAddress,\n      params.receiverAddress,\n      amountPlusPremium\n    );\n\n    emit FlashLoan(\n      params.receiverAddress,\n      msg.sender,\n      params.asset,\n      params.amount,\n      DataTypes.InterestRateMode(0),\n      params.totalPremium,\n      params.referralCode\n    );\n  }\n}\n"},"@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\nimport {PercentageMath} from '../math/PercentageMath.sol';\nimport {WadRayMath} from '../math/WadRayMath.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\nimport {ReserveLogic} from './ReserveLogic.sol';\nimport {EModeLogic} from './EModeLogic.sol';\n\n/**\n * @title GenericLogic library\n * @author Aave\n * @notice Implements protocol-level logic to calculate and validate the state of a user\n */\nlibrary GenericLogic {\n  using ReserveLogic for DataTypes.ReserveData;\n  using WadRayMath for uint256;\n  using PercentageMath for uint256;\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n  using UserConfiguration for DataTypes.UserConfigurationMap;\n\n  struct CalculateUserAccountDataVars {\n    uint256 assetPrice;\n    uint256 assetUnit;\n    uint256 userBalanceInBaseCurrency;\n    uint256 decimals;\n    uint256 ltv;\n    uint256 liquidationThreshold;\n    uint256 i;\n    uint256 healthFactor;\n    uint256 totalCollateralInBaseCurrency;\n    uint256 totalDebtInBaseCurrency;\n    uint256 avgLtv;\n    uint256 avgLiquidationThreshold;\n    uint256 eModeAssetPrice;\n    uint256 eModeLtv;\n    uint256 eModeLiqThreshold;\n    uint256 eModeAssetCategory;\n    address currentReserveAddress;\n    bool hasZeroLtvCollateral;\n    bool isInEModeCategory;\n  }\n\n  /**\n   * @notice Calculates the user data across the reserves.\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param params Additional parameters needed for the calculation\n   * @return The total collateral of the user in the base currency used by the price feed\n   * @return The total debt of the user in the base currency used by the price feed\n   * @return The average ltv of the user\n   * @return The average liquidation threshold of the user\n   * @return The health factor of the user\n   * @return True if the ltv is zero, false otherwise\n   */\n  function calculateUserAccountData(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    DataTypes.CalculateUserAccountDataParams memory params\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\n    if (params.userConfig.isEmpty()) {\n      return (0, 0, 0, 0, type(uint256).max, false);\n    }\n\n    CalculateUserAccountDataVars memory vars;\n\n    if (params.userEModeCategory != 0) {\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\n        .getEModeConfiguration(\n          eModeCategories[params.userEModeCategory],\n          IPriceOracleGetter(params.oracle)\n        );\n    }\n\n    while (vars.i < params.reservesCount) {\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\n        unchecked {\n          ++vars.i;\n        }\n        continue;\n      }\n\n      vars.currentReserveAddress = reservesList[vars.i];\n\n      if (vars.currentReserveAddress == address(0)) {\n        unchecked {\n          ++vars.i;\n        }\n        continue;\n      }\n\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\n\n      (\n        vars.ltv,\n        vars.liquidationThreshold,\n        ,\n        vars.decimals,\n        ,\n        vars.eModeAssetCategory\n      ) = currentReserve.configuration.getParams();\n\n      unchecked {\n        vars.assetUnit = 10 ** vars.decimals;\n      }\n\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\n        params.userEModeCategory == vars.eModeAssetCategory\n        ? vars.eModeAssetPrice\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\n\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\n          params.user,\n          currentReserve,\n          vars.assetPrice,\n          vars.assetUnit\n        );\n\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\n\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\n          params.userEModeCategory,\n          vars.eModeAssetCategory\n        );\n\n        if (vars.ltv != 0) {\n          vars.avgLtv +=\n            vars.userBalanceInBaseCurrency *\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\n        } else {\n          vars.hasZeroLtvCollateral = true;\n        }\n\n        vars.avgLiquidationThreshold +=\n          vars.userBalanceInBaseCurrency *\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\n      }\n\n      if (params.userConfig.isBorrowing(vars.i)) {\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\n          params.user,\n          currentReserve,\n          vars.assetPrice,\n          vars.assetUnit\n        );\n      }\n\n      unchecked {\n        ++vars.i;\n      }\n    }\n\n    unchecked {\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\n        : 0;\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\n        : 0;\n    }\n\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\n      ? type(uint256).max\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\n        vars.totalDebtInBaseCurrency\n      );\n    return (\n      vars.totalCollateralInBaseCurrency,\n      vars.totalDebtInBaseCurrency,\n      vars.avgLtv,\n      vars.avgLiquidationThreshold,\n      vars.healthFactor,\n      vars.hasZeroLtvCollateral\n    );\n  }\n\n  /**\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\n   * and the average Loan To Value\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\n   * @param ltv The average loan to value\n   * @return The amount available to borrow in the base currency of the used by the price feed\n   */\n  function calculateAvailableBorrows(\n    uint256 totalCollateralInBaseCurrency,\n    uint256 totalDebtInBaseCurrency,\n    uint256 ltv\n  ) internal pure returns (uint256) {\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\n\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\n      return 0;\n    }\n\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\n    return availableBorrowsInBaseCurrency;\n  }\n\n  /**\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\n   * fetching `balanceOf`\n   * @param user The address of the user\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\n   * @return The total debt of the user normalized to the base currency\n   */\n  function _getUserDebtInBaseCurrency(\n    address user,\n    DataTypes.ReserveData storage reserve,\n    uint256 assetPrice,\n    uint256 assetUnit\n  ) private view returns (uint256) {\n    // fetching variable debt\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\n      user\n    );\n    if (userTotalDebt != 0) {\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\n    }\n\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\n\n    userTotalDebt = assetPrice * userTotalDebt;\n\n    unchecked {\n      return userTotalDebt / assetUnit;\n    }\n  }\n\n  /**\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\n   * is cheaper than fetching `balanceOf`\n   * @param user The address of the user\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\n   */\n  function _getUserBalanceInBaseCurrency(\n    address user,\n    DataTypes.ReserveData storage reserve,\n    uint256 assetPrice,\n    uint256 assetUnit\n  ) private view returns (uint256) {\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\n    uint256 balance = (\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\n    ) * assetPrice;\n\n    unchecked {\n      return balance / assetUnit;\n    }\n  }\n}\n"},"@aave/core-v3/contracts/protocol/libraries/logic/IsolationModeLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {DataTypes} from '../types/DataTypes.sol';\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\n\n/**\n * @title IsolationModeLogic library\n * @author Aave\n * @notice Implements the base logic for handling repayments for assets borrowed in isolation mode\n */\nlibrary IsolationModeLogic {\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n  using UserConfiguration for DataTypes.UserConfigurationMap;\n  using SafeCast for uint256;\n\n  // See `IPool` for descriptions\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\n\n  /**\n   * @notice updated the isolated debt whenever a position collateralized by an isolated asset is repaid or liquidated\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param userConfig The user configuration mapping\n   * @param reserveCache The cached data of the reserve\n   * @param repayAmount The amount being repaid\n   */\n  function updateIsolatedDebtIfIsolated(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    DataTypes.UserConfigurationMap storage userConfig,\n    DataTypes.ReserveCache memory reserveCache,\n    uint256 repayAmount\n  ) internal {\n    (bool isolationModeActive, address isolationModeCollateralAddress, ) = userConfig\n      .getIsolationModeState(reservesData, reservesList);\n\n    if (isolationModeActive) {\n      uint128 isolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\n        .isolationModeTotalDebt;\n\n      uint128 isolatedDebtRepaid = (repayAmount /\n        10 **\n          (reserveCache.reserveConfiguration.getDecimals() -\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\n\n      // since the debt ceiling does not take into account the interest accrued, it might happen that amount\n      // repaid > debt in isolation mode\n      if (isolationModeTotalDebt <= isolatedDebtRepaid) {\n        reservesData[isolationModeCollateralAddress].isolationModeTotalDebt = 0;\n        emit IsolationModeTotalDebtUpdated(isolationModeCollateralAddress, 0);\n      } else {\n        uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\n          .isolationModeTotalDebt = isolationModeTotalDebt - isolatedDebtRepaid;\n        emit IsolationModeTotalDebtUpdated(\n          isolationModeCollateralAddress,\n          nextIsolationModeTotalDebt\n        );\n      }\n    }\n  }\n}\n"},"@aave/core-v3/contracts/protocol/libraries/logic/LiquidationLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts//IERC20.sol';\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {PercentageMath} from '../../libraries/math/PercentageMath.sol';\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\nimport {Helpers} from '../../libraries/helpers/Helpers.sol';\nimport {DataTypes} from '../../libraries/types/DataTypes.sol';\nimport {ReserveLogic} from './ReserveLogic.sol';\nimport {ValidationLogic} from './ValidationLogic.sol';\nimport {GenericLogic} from './GenericLogic.sol';\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\nimport {EModeLogic} from './EModeLogic.sol';\nimport {UserConfiguration} from '../../libraries/configuration/UserConfiguration.sol';\nimport {ReserveConfiguration} from '../../libraries/configuration/ReserveConfiguration.sol';\nimport {IAToken} from '../../../interfaces/IAToken.sol';\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\n\n/**\n * @title LiquidationLogic library\n * @author Aave\n * @notice Implements actions involving management of collateral in the protocol, the main one being the liquidations\n */\nlibrary LiquidationLogic {\n  using WadRayMath for uint256;\n  using PercentageMath for uint256;\n  using ReserveLogic for DataTypes.ReserveCache;\n  using ReserveLogic for DataTypes.ReserveData;\n  using UserConfiguration for DataTypes.UserConfigurationMap;\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n  using GPv2SafeERC20 for IERC20;\n\n  // See `IPool` for descriptions\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\n  event LiquidationCall(\n    address indexed collateralAsset,\n    address indexed debtAsset,\n    address indexed user,\n    uint256 debtToCover,\n    uint256 liquidatedCollateralAmount,\n    address liquidator,\n    bool receiveAToken\n  );\n\n  /**\n   * @dev Default percentage of borrower's debt to be repaid in a liquidation.\n   * @dev Percentage applied when the users health factor is above `CLOSE_FACTOR_HF_THRESHOLD`\n   * Expressed in bps, a value of 0.5e4 results in 50.00%\n   */\n  uint256 internal constant DEFAULT_LIQUIDATION_CLOSE_FACTOR = 0.5e4;\n\n  /**\n   * @dev Maximum percentage of borrower's debt to be repaid in a liquidation\n   * @dev Percentage applied when the users health factor is below `CLOSE_FACTOR_HF_THRESHOLD`\n   * Expressed in bps, a value of 1e4 results in 100.00%\n   */\n  uint256 public constant MAX_LIQUIDATION_CLOSE_FACTOR = 1e4;\n\n  /**\n   * @dev This constant represents below which health factor value it is possible to liquidate\n   * an amount of debt corresponding to `MAX_LIQUIDATION_CLOSE_FACTOR`.\n   * A value of 0.95e18 results in 0.95\n   */\n  uint256 public constant CLOSE_FACTOR_HF_THRESHOLD = 0.95e18;\n\n  struct LiquidationCallLocalVars {\n    uint256 userCollateralBalance;\n    uint256 userVariableDebt;\n    uint256 userTotalDebt;\n    uint256 actualDebtToLiquidate;\n    uint256 actualCollateralToLiquidate;\n    uint256 liquidationBonus;\n    uint256 healthFactor;\n    uint256 liquidationProtocolFeeAmount;\n    address collateralPriceSource;\n    address debtPriceSource;\n    IAToken collateralAToken;\n    DataTypes.ReserveCache debtReserveCache;\n  }\n\n  /**\n   * @notice Function to liquidate a position if its Health Factor drops below 1. The caller (liquidator)\n   * covers `debtToCover` amount of debt of the user getting liquidated, and receives\n   * a proportional amount of the `collateralAsset` plus a bonus to cover market risk\n   * @dev Emits the `LiquidationCall()` event\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param params The additional parameters needed to execute the liquidation function\n   */\n  function executeLiquidationCall(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    DataTypes.ExecuteLiquidationCallParams memory params\n  ) external {\n    LiquidationCallLocalVars memory vars;\n\n    DataTypes.ReserveData storage collateralReserve = reservesData[params.collateralAsset];\n    DataTypes.ReserveData storage debtReserve = reservesData[params.debtAsset];\n    DataTypes.UserConfigurationMap storage userConfig = usersConfig[params.user];\n    vars.debtReserveCache = debtReserve.cache();\n    debtReserve.updateState(vars.debtReserveCache);\n\n    (, , , , vars.healthFactor, ) = GenericLogic.calculateUserAccountData(\n      reservesData,\n      reservesList,\n      eModeCategories,\n      DataTypes.CalculateUserAccountDataParams({\n        userConfig: userConfig,\n        reservesCount: params.reservesCount,\n        user: params.user,\n        oracle: params.priceOracle,\n        userEModeCategory: params.userEModeCategory\n      })\n    );\n\n    (vars.userVariableDebt, vars.userTotalDebt, vars.actualDebtToLiquidate) = _calculateDebt(\n      vars.debtReserveCache,\n      params,\n      vars.healthFactor\n    );\n\n    ValidationLogic.validateLiquidationCall(\n      userConfig,\n      collateralReserve,\n      DataTypes.ValidateLiquidationCallParams({\n        debtReserveCache: vars.debtReserveCache,\n        totalDebt: vars.userTotalDebt,\n        healthFactor: vars.healthFactor,\n        priceOracleSentinel: params.priceOracleSentinel\n      })\n    );\n\n    (\n      vars.collateralAToken,\n      vars.collateralPriceSource,\n      vars.debtPriceSource,\n      vars.liquidationBonus\n    ) = _getConfigurationData(eModeCategories, collateralReserve, params);\n\n    vars.userCollateralBalance = vars.collateralAToken.balanceOf(params.user);\n\n    (\n      vars.actualCollateralToLiquidate,\n      vars.actualDebtToLiquidate,\n      vars.liquidationProtocolFeeAmount\n    ) = _calculateAvailableCollateralToLiquidate(\n      collateralReserve,\n      vars.debtReserveCache,\n      vars.collateralPriceSource,\n      vars.debtPriceSource,\n      vars.actualDebtToLiquidate,\n      vars.userCollateralBalance,\n      vars.liquidationBonus,\n      IPriceOracleGetter(params.priceOracle)\n    );\n\n    if (vars.userTotalDebt == vars.actualDebtToLiquidate) {\n      userConfig.setBorrowing(debtReserve.id, false);\n    }\n\n    // If the collateral being liquidated is equal to the user balance,\n    // we set the currency as not being used as collateral anymore\n    if (\n      vars.actualCollateralToLiquidate + vars.liquidationProtocolFeeAmount ==\n      vars.userCollateralBalance\n    ) {\n      userConfig.setUsingAsCollateral(collateralReserve.id, false);\n      emit ReserveUsedAsCollateralDisabled(params.collateralAsset, params.user);\n    }\n\n    _burnDebtTokens(params, vars);\n\n    debtReserve.updateInterestRates(\n      vars.debtReserveCache,\n      params.debtAsset,\n      vars.actualDebtToLiquidate,\n      0\n    );\n\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\n      reservesData,\n      reservesList,\n      userConfig,\n      vars.debtReserveCache,\n      vars.actualDebtToLiquidate\n    );\n\n    if (params.receiveAToken) {\n      _liquidateATokens(reservesData, reservesList, usersConfig, collateralReserve, params, vars);\n    } else {\n      _burnCollateralATokens(collateralReserve, params, vars);\n    }\n\n    // Transfer fee to treasury if it is non-zero\n    if (vars.liquidationProtocolFeeAmount != 0) {\n      uint256 liquidityIndex = collateralReserve.getNormalizedIncome();\n      uint256 scaledDownLiquidationProtocolFee = vars.liquidationProtocolFeeAmount.rayDiv(\n        liquidityIndex\n      );\n      uint256 scaledDownUserBalance = vars.collateralAToken.scaledBalanceOf(params.user);\n      // To avoid trying to send more aTokens than available on balance, due to 1 wei imprecision\n      if (scaledDownLiquidationProtocolFee > scaledDownUserBalance) {\n        vars.liquidationProtocolFeeAmount = scaledDownUserBalance.rayMul(liquidityIndex);\n      }\n      vars.collateralAToken.transferOnLiquidation(\n        params.user,\n        vars.collateralAToken.RESERVE_TREASURY_ADDRESS(),\n        vars.liquidationProtocolFeeAmount\n      );\n    }\n\n    // Transfers the debt asset being repaid to the aToken, where the liquidity is kept\n    IERC20(params.debtAsset).safeTransferFrom(\n      msg.sender,\n      vars.debtReserveCache.aTokenAddress,\n      vars.actualDebtToLiquidate\n    );\n\n    IAToken(vars.debtReserveCache.aTokenAddress).handleRepayment(\n      msg.sender,\n      params.user,\n      vars.actualDebtToLiquidate\n    );\n\n    emit LiquidationCall(\n      params.collateralAsset,\n      params.debtAsset,\n      params.user,\n      vars.actualDebtToLiquidate,\n      vars.actualCollateralToLiquidate,\n      msg.sender,\n      params.receiveAToken\n    );\n  }\n\n  /**\n   * @notice Burns the collateral aTokens and transfers the underlying to the liquidator.\n   * @dev   The function also updates the state and the interest rate of the collateral reserve.\n   * @param collateralReserve The data of the collateral reserve\n   * @param params The additional parameters needed to execute the liquidation function\n   * @param vars The executeLiquidationCall() function local vars\n   */\n  function _burnCollateralATokens(\n    DataTypes.ReserveData storage collateralReserve,\n    DataTypes.ExecuteLiquidationCallParams memory params,\n    LiquidationCallLocalVars memory vars\n  ) internal {\n    DataTypes.ReserveCache memory collateralReserveCache = collateralReserve.cache();\n    collateralReserve.updateState(collateralReserveCache);\n    collateralReserve.updateInterestRates(\n      collateralReserveCache,\n      params.collateralAsset,\n      0,\n      vars.actualCollateralToLiquidate\n    );\n\n    // Burn the equivalent amount of aToken, sending the underlying to the liquidator\n    vars.collateralAToken.burn(\n      params.user,\n      msg.sender,\n      vars.actualCollateralToLiquidate,\n      collateralReserveCache.nextLiquidityIndex\n    );\n  }\n\n  /**\n   * @notice Liquidates the user aTokens by transferring them to the liquidator.\n   * @dev   The function also checks the state of the liquidator and activates the aToken as collateral\n   *        as in standard transfers if the isolation mode constraints are respected.\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\n   * @param collateralReserve The data of the collateral reserve\n   * @param params The additional parameters needed to execute the liquidation function\n   * @param vars The executeLiquidationCall() function local vars\n   */\n  function _liquidateATokens(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\n    DataTypes.ReserveData storage collateralReserve,\n    DataTypes.ExecuteLiquidationCallParams memory params,\n    LiquidationCallLocalVars memory vars\n  ) internal {\n    uint256 liquidatorPreviousATokenBalance = IERC20(vars.collateralAToken).balanceOf(msg.sender);\n    vars.collateralAToken.transferOnLiquidation(\n      params.user,\n      msg.sender,\n      vars.actualCollateralToLiquidate\n    );\n\n    if (liquidatorPreviousATokenBalance == 0) {\n      DataTypes.UserConfigurationMap storage liquidatorConfig = usersConfig[msg.sender];\n      if (\n        ValidationLogic.validateAutomaticUseAsCollateral(\n          reservesData,\n          reservesList,\n          liquidatorConfig,\n          collateralReserve.configuration,\n          collateralReserve.aTokenAddress\n        )\n      ) {\n        liquidatorConfig.setUsingAsCollateral(collateralReserve.id, true);\n        emit ReserveUsedAsCollateralEnabled(params.collateralAsset, msg.sender);\n      }\n    }\n  }\n\n  /**\n   * @notice Burns the debt tokens of the user up to the amount being repaid by the liquidator.\n   * @dev The function alters the `debtReserveCache` state in `vars` to update the debt related data.\n   * @param params The additional parameters needed to execute the liquidation function\n   * @param vars the executeLiquidationCall() function local vars\n   */\n  function _burnDebtTokens(\n    DataTypes.ExecuteLiquidationCallParams memory params,\n    LiquidationCallLocalVars memory vars\n  ) internal {\n    if (vars.userVariableDebt >= vars.actualDebtToLiquidate) {\n      vars.debtReserveCache.nextScaledVariableDebt = IVariableDebtToken(\n        vars.debtReserveCache.variableDebtTokenAddress\n      ).burn(\n          params.user,\n          vars.actualDebtToLiquidate,\n          vars.debtReserveCache.nextVariableBorrowIndex\n        );\n    } else {\n      // If the user doesn't have variable debt, no need to try to burn variable debt tokens\n      if (vars.userVariableDebt != 0) {\n        vars.debtReserveCache.nextScaledVariableDebt = IVariableDebtToken(\n          vars.debtReserveCache.variableDebtTokenAddress\n        ).burn(params.user, vars.userVariableDebt, vars.debtReserveCache.nextVariableBorrowIndex);\n      }\n      (\n        vars.debtReserveCache.nextTotalStableDebt,\n        vars.debtReserveCache.nextAvgStableBorrowRate\n      ) = IStableDebtToken(vars.debtReserveCache.stableDebtTokenAddress).burn(\n        params.user,\n        vars.actualDebtToLiquidate - vars.userVariableDebt\n      );\n    }\n  }\n\n  /**\n   * @notice Calculates the total debt of the user and the actual amount to liquidate depending on the health factor\n   * and corresponding close factor.\n   * @dev If the Health Factor is below CLOSE_FACTOR_HF_THRESHOLD, the close factor is increased to MAX_LIQUIDATION_CLOSE_FACTOR\n   * @param debtReserveCache The reserve cache data object of the debt reserve\n   * @param params The additional parameters needed to execute the liquidation function\n   * @param healthFactor The health factor of the position\n   * @return The variable debt of the user\n   * @return The total debt of the user\n   * @return The actual debt to liquidate as a function of the closeFactor\n   */\n  function _calculateDebt(\n    DataTypes.ReserveCache memory debtReserveCache,\n    DataTypes.ExecuteLiquidationCallParams memory params,\n    uint256 healthFactor\n  ) internal view returns (uint256, uint256, uint256) {\n    (uint256 userStableDebt, uint256 userVariableDebt) = Helpers.getUserCurrentDebt(\n      params.user,\n      debtReserveCache\n    );\n\n    uint256 userTotalDebt = userStableDebt + userVariableDebt;\n\n    uint256 closeFactor = healthFactor > CLOSE_FACTOR_HF_THRESHOLD\n      ? DEFAULT_LIQUIDATION_CLOSE_FACTOR\n      : MAX_LIQUIDATION_CLOSE_FACTOR;\n\n    uint256 maxLiquidatableDebt = userTotalDebt.percentMul(closeFactor);\n\n    uint256 actualDebtToLiquidate = params.debtToCover > maxLiquidatableDebt\n      ? maxLiquidatableDebt\n      : params.debtToCover;\n\n    return (userVariableDebt, userTotalDebt, actualDebtToLiquidate);\n  }\n\n  /**\n   * @notice Returns the configuration data for the debt and the collateral reserves.\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param collateralReserve The data of the collateral reserve\n   * @param params The additional parameters needed to execute the liquidation function\n   * @return The collateral aToken\n   * @return The address to use as price source for the collateral\n   * @return The address to use as price source for the debt\n   * @return The liquidation bonus to apply to the collateral\n   */\n  function _getConfigurationData(\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    DataTypes.ReserveData storage collateralReserve,\n    DataTypes.ExecuteLiquidationCallParams memory params\n  ) internal view returns (IAToken, address, address, uint256) {\n    IAToken collateralAToken = IAToken(collateralReserve.aTokenAddress);\n    uint256 liquidationBonus = collateralReserve.configuration.getLiquidationBonus();\n\n    address collateralPriceSource = params.collateralAsset;\n    address debtPriceSource = params.debtAsset;\n\n    if (params.userEModeCategory != 0) {\n      address eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\n\n      if (\n        EModeLogic.isInEModeCategory(\n          params.userEModeCategory,\n          collateralReserve.configuration.getEModeCategory()\n        )\n      ) {\n        liquidationBonus = eModeCategories[params.userEModeCategory].liquidationBonus;\n\n        if (eModePriceSource != address(0)) {\n          collateralPriceSource = eModePriceSource;\n        }\n      }\n\n      // when in eMode, debt will always be in the same eMode category, can skip matching category check\n      if (eModePriceSource != address(0)) {\n        debtPriceSource = eModePriceSource;\n      }\n    }\n\n    return (collateralAToken, collateralPriceSource, debtPriceSource, liquidationBonus);\n  }\n\n  struct AvailableCollateralToLiquidateLocalVars {\n    uint256 collateralPrice;\n    uint256 debtAssetPrice;\n    uint256 maxCollateralToLiquidate;\n    uint256 baseCollateral;\n    uint256 bonusCollateral;\n    uint256 debtAssetDecimals;\n    uint256 collateralDecimals;\n    uint256 collateralAssetUnit;\n    uint256 debtAssetUnit;\n    uint256 collateralAmount;\n    uint256 debtAmountNeeded;\n    uint256 liquidationProtocolFeePercentage;\n    uint256 liquidationProtocolFee;\n  }\n\n  /**\n   * @notice Calculates how much of a specific collateral can be liquidated, given\n   * a certain amount of debt asset.\n   * @dev This function needs to be called after all the checks to validate the liquidation have been performed,\n   *   otherwise it might fail.\n   * @param collateralReserve The data of the collateral reserve\n   * @param debtReserveCache The cached data of the debt reserve\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\n   * @param userCollateralBalance The collateral balance for the specific `collateralAsset` of the user being liquidated\n   * @param liquidationBonus The collateral bonus percentage to receive as result of the liquidation\n   * @return The maximum amount that is possible to liquidate given all the liquidation constraints (user balance, close factor)\n   * @return The amount to repay with the liquidation\n   * @return The fee taken from the liquidation bonus amount to be paid to the protocol\n   */\n  function _calculateAvailableCollateralToLiquidate(\n    DataTypes.ReserveData storage collateralReserve,\n    DataTypes.ReserveCache memory debtReserveCache,\n    address collateralAsset,\n    address debtAsset,\n    uint256 debtToCover,\n    uint256 userCollateralBalance,\n    uint256 liquidationBonus,\n    IPriceOracleGetter oracle\n  ) internal view returns (uint256, uint256, uint256) {\n    AvailableCollateralToLiquidateLocalVars memory vars;\n\n    vars.collateralPrice = oracle.getAssetPrice(collateralAsset);\n    vars.debtAssetPrice = oracle.getAssetPrice(debtAsset);\n\n    vars.collateralDecimals = collateralReserve.configuration.getDecimals();\n    vars.debtAssetDecimals = debtReserveCache.reserveConfiguration.getDecimals();\n\n    unchecked {\n      vars.collateralAssetUnit = 10 ** vars.collateralDecimals;\n      vars.debtAssetUnit = 10 ** vars.debtAssetDecimals;\n    }\n\n    vars.liquidationProtocolFeePercentage = collateralReserve\n      .configuration\n      .getLiquidationProtocolFee();\n\n    // This is the base collateral to liquidate based on the given debt to cover\n    vars.baseCollateral =\n      ((vars.debtAssetPrice * debtToCover * vars.collateralAssetUnit)) /\n      (vars.collateralPrice * vars.debtAssetUnit);\n\n    vars.maxCollateralToLiquidate = vars.baseCollateral.percentMul(liquidationBonus);\n\n    if (vars.maxCollateralToLiquidate > userCollateralBalance) {\n      vars.collateralAmount = userCollateralBalance;\n      vars.debtAmountNeeded = ((vars.collateralPrice * vars.collateralAmount * vars.debtAssetUnit) /\n        (vars.debtAssetPrice * vars.collateralAssetUnit)).percentDiv(liquidationBonus);\n    } else {\n      vars.collateralAmount = vars.maxCollateralToLiquidate;\n      vars.debtAmountNeeded = debtToCover;\n    }\n\n    if (vars.liquidationProtocolFeePercentage != 0) {\n      vars.bonusCollateral =\n        vars.collateralAmount -\n        vars.collateralAmount.percentDiv(liquidationBonus);\n\n      vars.liquidationProtocolFee = vars.bonusCollateral.percentMul(\n        vars.liquidationProtocolFeePercentage\n      );\n\n      return (\n        vars.collateralAmount - vars.liquidationProtocolFee,\n        vars.debtAmountNeeded,\n        vars.liquidationProtocolFee\n      );\n    } else {\n      return (vars.collateralAmount, vars.debtAmountNeeded, 0);\n    }\n  }\n}\n"},"@aave/core-v3/contracts/protocol/libraries/logic/PoolLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {IAToken} from '../../../interfaces/IAToken.sol';\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\nimport {Errors} from '../helpers/Errors.sol';\nimport {WadRayMath} from '../math/WadRayMath.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\nimport {ReserveLogic} from './ReserveLogic.sol';\nimport {ValidationLogic} from './ValidationLogic.sol';\nimport {GenericLogic} from './GenericLogic.sol';\n\n/**\n * @title PoolLogic library\n * @author Aave\n * @notice Implements the logic for Pool specific functions\n */\nlibrary PoolLogic {\n  using GPv2SafeERC20 for IERC20;\n  using WadRayMath for uint256;\n  using ReserveLogic for DataTypes.ReserveData;\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n\n  // See `IPool` for descriptions\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\n\n  /**\n   * @notice Initialize an asset reserve and add the reserve to the list of reserves\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param params Additional parameters needed for initiation\n   * @return true if appended, false if inserted at existing empty spot\n   */\n  function executeInitReserve(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    DataTypes.InitReserveParams memory params\n  ) external returns (bool) {\n    require(Address.isContract(params.asset), Errors.NOT_CONTRACT);\n    reservesData[params.asset].init(\n      params.aTokenAddress,\n      params.stableDebtAddress,\n      params.variableDebtAddress,\n      params.interestRateStrategyAddress\n    );\n\n    bool reserveAlreadyAdded = reservesData[params.asset].id != 0 ||\n      reservesList[0] == params.asset;\n    require(!reserveAlreadyAdded, Errors.RESERVE_ALREADY_ADDED);\n\n    for (uint16 i = 0; i < params.reservesCount; i++) {\n      if (reservesList[i] == address(0)) {\n        reservesData[params.asset].id = i;\n        reservesList[i] = params.asset;\n        return false;\n      }\n    }\n\n    require(params.reservesCount < params.maxNumberReserves, Errors.NO_MORE_RESERVES_ALLOWED);\n    reservesData[params.asset].id = params.reservesCount;\n    reservesList[params.reservesCount] = params.asset;\n    return true;\n  }\n\n  /**\n   * @notice Rescue and transfer tokens locked in this contract\n   * @param token The address of the token\n   * @param to The address of the recipient\n   * @param amount The amount of token to transfer\n   */\n  function executeRescueTokens(address token, address to, uint256 amount) external {\n    IERC20(token).safeTransfer(to, amount);\n  }\n\n  /**\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\n   * @param reservesData The state of all the reserves\n   * @param assets The list of reserves for which the minting needs to be executed\n   */\n  function executeMintToTreasury(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    address[] calldata assets\n  ) external {\n    for (uint256 i = 0; i < assets.length; i++) {\n      address assetAddress = assets[i];\n\n      DataTypes.ReserveData storage reserve = reservesData[assetAddress];\n\n      // this cover both inactive reserves and invalid reserves since the flag will be 0 for both\n      if (!reserve.configuration.getActive()) {\n        continue;\n      }\n\n      uint256 accruedToTreasury = reserve.accruedToTreasury;\n\n      if (accruedToTreasury != 0) {\n        reserve.accruedToTreasury = 0;\n        uint256 normalizedIncome = reserve.getNormalizedIncome();\n        uint256 amountToMint = accruedToTreasury.rayMul(normalizedIncome);\n        IAToken(reserve.aTokenAddress).mintToTreasury(amountToMint, normalizedIncome);\n\n        emit MintedToTreasury(assetAddress, amountToMint);\n      }\n    }\n  }\n\n  /**\n   * @notice Resets the isolation mode total debt of the given asset to zero\n   * @dev It requires the given asset has zero debt ceiling\n   * @param reservesData The state of all the reserves\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\n   */\n  function executeResetIsolationModeTotalDebt(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    address asset\n  ) external {\n    require(reservesData[asset].configuration.getDebtCeiling() == 0, Errors.DEBT_CEILING_NOT_ZERO);\n    reservesData[asset].isolationModeTotalDebt = 0;\n    emit IsolationModeTotalDebtUpdated(asset, 0);\n  }\n\n  /**\n   * @notice Drop a reserve\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param asset The address of the underlying asset of the reserve\n   */\n  function executeDropReserve(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    address asset\n  ) external {\n    DataTypes.ReserveData storage reserve = reservesData[asset];\n    ValidationLogic.validateDropReserve(reservesList, reserve, asset);\n    reservesList[reservesData[asset].id] = address(0);\n    delete reservesData[asset];\n  }\n\n  /**\n   * @notice Returns the user account data across all the reserves\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param params Additional params needed for the calculation\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\n   * @return currentLiquidationThreshold The liquidation threshold of the user\n   * @return ltv The loan to value of The user\n   * @return healthFactor The current health factor of the user\n   */\n  function executeGetUserAccountData(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    DataTypes.CalculateUserAccountDataParams memory params\n  )\n    external\n    view\n    returns (\n      uint256 totalCollateralBase,\n      uint256 totalDebtBase,\n      uint256 availableBorrowsBase,\n      uint256 currentLiquidationThreshold,\n      uint256 ltv,\n      uint256 healthFactor\n    )\n  {\n    (\n      totalCollateralBase,\n      totalDebtBase,\n      ltv,\n      currentLiquidationThreshold,\n      healthFactor,\n\n    ) = GenericLogic.calculateUserAccountData(reservesData, reservesList, eModeCategories, params);\n\n    availableBorrowsBase = GenericLogic.calculateAvailableBorrows(\n      totalCollateralBase,\n      totalDebtBase,\n      ltv\n    );\n  }\n}\n"},"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\nimport {MathUtils} from '../math/MathUtils.sol';\nimport {WadRayMath} from '../math/WadRayMath.sol';\nimport {PercentageMath} from '../math/PercentageMath.sol';\nimport {Errors} from '../helpers/Errors.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\n\n/**\n * @title ReserveLogic library\n * @author Aave\n * @notice Implements the logic to update the reserves state\n */\nlibrary ReserveLogic {\n  using WadRayMath for uint256;\n  using PercentageMath for uint256;\n  using SafeCast for uint256;\n  using GPv2SafeERC20 for IERC20;\n  using ReserveLogic for DataTypes.ReserveData;\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n\n  // See `IPool` for descriptions\n  event ReserveDataUpdated(\n    address indexed reserve,\n    uint256 liquidityRate,\n    uint256 stableBorrowRate,\n    uint256 variableBorrowRate,\n    uint256 liquidityIndex,\n    uint256 variableBorrowIndex\n  );\n\n  /**\n   * @notice Returns the ongoing normalized income for the reserve.\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\n   * @param reserve The reserve object\n   * @return The normalized income, expressed in ray\n   */\n  function getNormalizedIncome(\n    DataTypes.ReserveData storage reserve\n  ) internal view returns (uint256) {\n    uint40 timestamp = reserve.lastUpdateTimestamp;\n\n    //solium-disable-next-line\n    if (timestamp == block.timestamp) {\n      //if the index was updated in the same block, no need to perform any calculation\n      return reserve.liquidityIndex;\n    } else {\n      return\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\n          reserve.liquidityIndex\n        );\n    }\n  }\n\n  /**\n   * @notice Returns the ongoing normalized variable debt for the reserve.\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\n   * @param reserve The reserve object\n   * @return The normalized variable debt, expressed in ray\n   */\n  function getNormalizedDebt(\n    DataTypes.ReserveData storage reserve\n  ) internal view returns (uint256) {\n    uint40 timestamp = reserve.lastUpdateTimestamp;\n\n    //solium-disable-next-line\n    if (timestamp == block.timestamp) {\n      //if the index was updated in the same block, no need to perform any calculation\n      return reserve.variableBorrowIndex;\n    } else {\n      return\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\n          reserve.variableBorrowIndex\n        );\n    }\n  }\n\n  /**\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\n   * @param reserve The reserve object\n   * @param reserveCache The caching layer for the reserve data\n   */\n  function updateState(\n    DataTypes.ReserveData storage reserve,\n    DataTypes.ReserveCache memory reserveCache\n  ) internal {\n    // If time didn't pass since last stored timestamp, skip state update\n    //solium-disable-next-line\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\n      return;\n    }\n\n    _updateIndexes(reserve, reserveCache);\n    _accrueToTreasury(reserve, reserveCache);\n\n    //solium-disable-next-line\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\n  }\n\n  /**\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\n   * @param reserve The reserve object\n   * @param totalLiquidity The total liquidity available in the reserve\n   * @param amount The amount to accumulate\n   * @return The next liquidity index of the reserve\n   */\n  function cumulateToLiquidityIndex(\n    DataTypes.ReserveData storage reserve,\n    uint256 totalLiquidity,\n    uint256 amount\n  ) internal returns (uint256) {\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\n    //division `amount / totalLiquidity` done in ray for precision\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\n      reserve.liquidityIndex\n    );\n    reserve.liquidityIndex = result.toUint128();\n    return result;\n  }\n\n  /**\n   * @notice Initializes a reserve.\n   * @param reserve The reserve object\n   * @param aTokenAddress The address of the overlying atoken contract\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\n   */\n  function init(\n    DataTypes.ReserveData storage reserve,\n    address aTokenAddress,\n    address stableDebtTokenAddress,\n    address variableDebtTokenAddress,\n    address interestRateStrategyAddress\n  ) internal {\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\n\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\n    reserve.aTokenAddress = aTokenAddress;\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\n  }\n\n  struct UpdateInterestRatesLocalVars {\n    uint256 nextLiquidityRate;\n    uint256 nextStableRate;\n    uint256 nextVariableRate;\n    uint256 totalVariableDebt;\n  }\n\n  /**\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\n   * @param reserve The reserve reserve to be updated\n   * @param reserveCache The caching layer for the reserve data\n   * @param reserveAddress The address of the reserve to be updated\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\n   */\n  function updateInterestRates(\n    DataTypes.ReserveData storage reserve,\n    DataTypes.ReserveCache memory reserveCache,\n    address reserveAddress,\n    uint256 liquidityAdded,\n    uint256 liquidityTaken\n  ) internal {\n    UpdateInterestRatesLocalVars memory vars;\n\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\n      reserveCache.nextVariableBorrowIndex\n    );\n\n    (\n      vars.nextLiquidityRate,\n      vars.nextStableRate,\n      vars.nextVariableRate\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\n      DataTypes.CalculateInterestRatesParams({\n        unbacked: reserve.unbacked,\n        liquidityAdded: liquidityAdded,\n        liquidityTaken: liquidityTaken,\n        totalStableDebt: reserveCache.nextTotalStableDebt,\n        totalVariableDebt: vars.totalVariableDebt,\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\n        reserveFactor: reserveCache.reserveFactor,\n        reserve: reserveAddress,\n        aToken: reserveCache.aTokenAddress\n      })\n    );\n\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\n\n    emit ReserveDataUpdated(\n      reserveAddress,\n      vars.nextLiquidityRate,\n      vars.nextStableRate,\n      vars.nextVariableRate,\n      reserveCache.nextLiquidityIndex,\n      reserveCache.nextVariableBorrowIndex\n    );\n  }\n\n  struct AccrueToTreasuryLocalVars {\n    uint256 prevTotalStableDebt;\n    uint256 prevTotalVariableDebt;\n    uint256 currTotalVariableDebt;\n    uint256 cumulatedStableInterest;\n    uint256 totalDebtAccrued;\n    uint256 amountToMint;\n  }\n\n  /**\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\n   * specific asset.\n   * @param reserve The reserve to be updated\n   * @param reserveCache The caching layer for the reserve data\n   */\n  function _accrueToTreasury(\n    DataTypes.ReserveData storage reserve,\n    DataTypes.ReserveCache memory reserveCache\n  ) internal {\n    AccrueToTreasuryLocalVars memory vars;\n\n    if (reserveCache.reserveFactor == 0) {\n      return;\n    }\n\n    //calculate the total variable debt at moment of the last interaction\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\n      reserveCache.currVariableBorrowIndex\n    );\n\n    //calculate the new total variable debt after accumulation of the interest on the index\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\n      reserveCache.nextVariableBorrowIndex\n    );\n\n    //calculate the stable debt until the last timestamp update\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\n      reserveCache.currAvgStableBorrowRate,\n      reserveCache.stableDebtLastUpdateTimestamp,\n      reserveCache.reserveLastUpdateTimestamp\n    );\n\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\n      vars.cumulatedStableInterest\n    );\n\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\n    vars.totalDebtAccrued =\n      vars.currTotalVariableDebt +\n      reserveCache.currTotalStableDebt -\n      vars.prevTotalVariableDebt -\n      vars.prevTotalStableDebt;\n\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\n\n    if (vars.amountToMint != 0) {\n      reserve.accruedToTreasury += vars\n        .amountToMint\n        .rayDiv(reserveCache.nextLiquidityIndex)\n        .toUint128();\n    }\n  }\n\n  /**\n   * @notice Updates the reserve indexes and the timestamp of the update.\n   * @param reserve The reserve reserve to be updated\n   * @param reserveCache The cache layer holding the cached protocol data\n   */\n  function _updateIndexes(\n    DataTypes.ReserveData storage reserve,\n    DataTypes.ReserveCache memory reserveCache\n  ) internal {\n    // Only cumulating on the supply side if there is any income being produced\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\n    // as liquidity index should not be updated\n    if (reserveCache.currLiquidityRate != 0) {\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\n        reserveCache.currLiquidityRate,\n        reserveCache.reserveLastUpdateTimestamp\n      );\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\n        reserveCache.currLiquidityIndex\n      );\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\n    }\n\n    // Variable borrow index only gets updated if there is any variable debt.\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\n    // because a positive base variable rate can be stored on\n    // reserveCache.currVariableBorrowRate, but the index should not increase\n    if (reserveCache.currScaledVariableDebt != 0) {\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\n        reserveCache.currVariableBorrowRate,\n        reserveCache.reserveLastUpdateTimestamp\n      );\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\n        reserveCache.currVariableBorrowIndex\n      );\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\n    }\n  }\n\n  /**\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\n   * interest rates.\n   * @param reserve The reserve object for which the cache will be filled\n   * @return The cache object\n   */\n  function cache(\n    DataTypes.ReserveData storage reserve\n  ) internal view returns (DataTypes.ReserveCache memory) {\n    DataTypes.ReserveCache memory reserveCache;\n\n    reserveCache.reserveConfiguration = reserve.configuration;\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\n      .variableBorrowIndex;\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\n\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\n\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\n\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\n      reserveCache.variableDebtTokenAddress\n    ).scaledTotalSupply();\n\n    (\n      reserveCache.currPrincipalStableDebt,\n      reserveCache.currTotalStableDebt,\n      reserveCache.currAvgStableBorrowRate,\n      reserveCache.stableDebtLastUpdateTimestamp\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\n\n    // by default the actions are considered as not affecting the debt balances.\n    // if the action involves mint/burn of debt, the cache needs to be updated\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\n\n    return reserveCache;\n  }\n}\n"},"@aave/core-v3/contracts/protocol/libraries/logic/SupplyLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {IAToken} from '../../../interfaces/IAToken.sol';\nimport {Errors} from '../helpers/Errors.sol';\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\nimport {WadRayMath} from '../math/WadRayMath.sol';\nimport {PercentageMath} from '../math/PercentageMath.sol';\nimport {ValidationLogic} from './ValidationLogic.sol';\nimport {ReserveLogic} from './ReserveLogic.sol';\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\n\n/**\n * @title SupplyLogic library\n * @author Aave\n * @notice Implements the base logic for supply/withdraw\n */\nlibrary SupplyLogic {\n  using ReserveLogic for DataTypes.ReserveCache;\n  using ReserveLogic for DataTypes.ReserveData;\n  using GPv2SafeERC20 for IERC20;\n  using UserConfiguration for DataTypes.UserConfigurationMap;\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n  using WadRayMath for uint256;\n  using PercentageMath for uint256;\n\n  // See `IPool` for descriptions\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\n  event Supply(\n    address indexed reserve,\n    address user,\n    address indexed onBehalfOf,\n    uint256 amount,\n    uint16 indexed referralCode\n  );\n\n  /**\n   * @notice Implements the supply feature. Through `supply()`, users supply assets to the Aave protocol.\n   * @dev Emits the `Supply()` event.\n   * @dev In the first supply action, `ReserveUsedAsCollateralEnabled()` is emitted, if the asset can be enabled as\n   * collateral.\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n   * @param params The additional parameters needed to execute the supply function\n   */\n  function executeSupply(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    DataTypes.UserConfigurationMap storage userConfig,\n    DataTypes.ExecuteSupplyParams memory params\n  ) external {\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\n\n    reserve.updateState(reserveCache);\n\n    ValidationLogic.validateSupply(reserveCache, reserve, params.amount);\n\n    reserve.updateInterestRates(reserveCache, params.asset, params.amount, 0);\n\n    IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, params.amount);\n\n    bool isFirstSupply = IAToken(reserveCache.aTokenAddress).mint(\n      msg.sender,\n      params.onBehalfOf,\n      params.amount,\n      reserveCache.nextLiquidityIndex\n    );\n\n    if (isFirstSupply) {\n      if (\n        ValidationLogic.validateAutomaticUseAsCollateral(\n          reservesData,\n          reservesList,\n          userConfig,\n          reserveCache.reserveConfiguration,\n          reserveCache.aTokenAddress\n        )\n      ) {\n        userConfig.setUsingAsCollateral(reserve.id, true);\n        emit ReserveUsedAsCollateralEnabled(params.asset, params.onBehalfOf);\n      }\n    }\n\n    emit Supply(params.asset, msg.sender, params.onBehalfOf, params.amount, params.referralCode);\n  }\n\n  /**\n   * @notice Implements the withdraw feature. Through `withdraw()`, users redeem their aTokens for the underlying asset\n   * previously supplied in the Aave protocol.\n   * @dev Emits the `Withdraw()` event.\n   * @dev If the user withdraws everything, `ReserveUsedAsCollateralDisabled()` is emitted.\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n   * @param params The additional parameters needed to execute the withdraw function\n   * @return The actual amount withdrawn\n   */\n  function executeWithdraw(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    DataTypes.UserConfigurationMap storage userConfig,\n    DataTypes.ExecuteWithdrawParams memory params\n  ) external returns (uint256) {\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\n\n    reserve.updateState(reserveCache);\n\n    uint256 userBalance = IAToken(reserveCache.aTokenAddress).scaledBalanceOf(msg.sender).rayMul(\n      reserveCache.nextLiquidityIndex\n    );\n\n    uint256 amountToWithdraw = params.amount;\n\n    if (params.amount == type(uint256).max) {\n      amountToWithdraw = userBalance;\n    }\n\n    ValidationLogic.validateWithdraw(reserveCache, amountToWithdraw, userBalance);\n\n    reserve.updateInterestRates(reserveCache, params.asset, 0, amountToWithdraw);\n\n    bool isCollateral = userConfig.isUsingAsCollateral(reserve.id);\n\n    if (isCollateral && amountToWithdraw == userBalance) {\n      userConfig.setUsingAsCollateral(reserve.id, false);\n      emit ReserveUsedAsCollateralDisabled(params.asset, msg.sender);\n    }\n\n    IAToken(reserveCache.aTokenAddress).burn(\n      msg.sender,\n      params.to,\n      amountToWithdraw,\n      reserveCache.nextLiquidityIndex\n    );\n\n    if (isCollateral && userConfig.isBorrowingAny()) {\n      ValidationLogic.validateHFAndLtv(\n        reservesData,\n        reservesList,\n        eModeCategories,\n        userConfig,\n        params.asset,\n        msg.sender,\n        params.reservesCount,\n        params.oracle,\n        params.userEModeCategory\n      );\n    }\n\n    emit Withdraw(params.asset, msg.sender, params.to, amountToWithdraw);\n\n    return amountToWithdraw;\n  }\n\n  /**\n   * @notice Validates a transfer of aTokens. The sender is subjected to health factor validation to avoid\n   * collateralization constraints violation.\n   * @dev Emits the `ReserveUsedAsCollateralEnabled()` event for the `to` account, if the asset is being activated as\n   * collateral.\n   * @dev In case the `from` user transfers everything, `ReserveUsedAsCollateralDisabled()` is emitted for `from`.\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\n   * @param params The additional parameters needed to execute the finalizeTransfer function\n   */\n  function executeFinalizeTransfer(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\n    DataTypes.FinalizeTransferParams memory params\n  ) external {\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\n\n    ValidationLogic.validateTransfer(reserve);\n\n    uint256 reserveId = reserve.id;\n\n    if (params.from != params.to && params.amount != 0) {\n      DataTypes.UserConfigurationMap storage fromConfig = usersConfig[params.from];\n\n      if (fromConfig.isUsingAsCollateral(reserveId)) {\n        if (fromConfig.isBorrowingAny()) {\n          ValidationLogic.validateHFAndLtv(\n            reservesData,\n            reservesList,\n            eModeCategories,\n            usersConfig[params.from],\n            params.asset,\n            params.from,\n            params.reservesCount,\n            params.oracle,\n            params.fromEModeCategory\n          );\n        }\n        if (params.balanceFromBefore == params.amount) {\n          fromConfig.setUsingAsCollateral(reserveId, false);\n          emit ReserveUsedAsCollateralDisabled(params.asset, params.from);\n        }\n      }\n\n      if (params.balanceToBefore == 0) {\n        DataTypes.UserConfigurationMap storage toConfig = usersConfig[params.to];\n        if (\n          ValidationLogic.validateAutomaticUseAsCollateral(\n            reservesData,\n            reservesList,\n            toConfig,\n            reserve.configuration,\n            reserve.aTokenAddress\n          )\n        ) {\n          toConfig.setUsingAsCollateral(reserveId, true);\n          emit ReserveUsedAsCollateralEnabled(params.asset, params.to);\n        }\n      }\n    }\n  }\n\n  /**\n   * @notice Executes the 'set as collateral' feature. A user can choose to activate or deactivate an asset as\n   * collateral at any point in time. Deactivating an asset as collateral is subjected to the usual health factor\n   * checks to ensure collateralization.\n   * @dev Emits the `ReserveUsedAsCollateralEnabled()` event if the asset can be activated as collateral.\n   * @dev In case the asset is being deactivated as collateral, `ReserveUsedAsCollateralDisabled()` is emitted.\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param userConfig The users configuration mapping that track the supplied/borrowed assets\n   * @param asset The address of the asset being configured as collateral\n   * @param useAsCollateral True if the user wants to set the asset as collateral, false otherwise\n   * @param reservesCount The number of initialized reserves\n   * @param priceOracle The address of the price oracle\n   * @param userEModeCategory The eMode category chosen by the user\n   */\n  function executeUseReserveAsCollateral(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    DataTypes.UserConfigurationMap storage userConfig,\n    address asset,\n    bool useAsCollateral,\n    uint256 reservesCount,\n    address priceOracle,\n    uint8 userEModeCategory\n  ) external {\n    DataTypes.ReserveData storage reserve = reservesData[asset];\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\n\n    uint256 userBalance = IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender);\n\n    ValidationLogic.validateSetUseReserveAsCollateral(reserveCache, userBalance);\n\n    if (useAsCollateral == userConfig.isUsingAsCollateral(reserve.id)) return;\n\n    if (useAsCollateral) {\n      require(\n        ValidationLogic.validateUseAsCollateral(\n          reservesData,\n          reservesList,\n          userConfig,\n          reserveCache.reserveConfiguration\n        ),\n        Errors.USER_IN_ISOLATION_MODE_OR_LTV_ZERO\n      );\n\n      userConfig.setUsingAsCollateral(reserve.id, true);\n      emit ReserveUsedAsCollateralEnabled(asset, msg.sender);\n    } else {\n      userConfig.setUsingAsCollateral(reserve.id, false);\n      ValidationLogic.validateHFAndLtv(\n        reservesData,\n        reservesList,\n        eModeCategories,\n        userConfig,\n        asset,\n        msg.sender,\n        reservesCount,\n        priceOracle,\n        userEModeCategory\n      );\n\n      emit ReserveUsedAsCollateralDisabled(asset, msg.sender);\n    }\n  }\n}\n"},"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\nimport {IAToken} from '../../../interfaces/IAToken.sol';\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\nimport {Errors} from '../helpers/Errors.sol';\nimport {WadRayMath} from '../math/WadRayMath.sol';\nimport {PercentageMath} from '../math/PercentageMath.sol';\nimport {DataTypes} from '../types/DataTypes.sol';\nimport {ReserveLogic} from './ReserveLogic.sol';\nimport {GenericLogic} from './GenericLogic.sol';\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\n\n/**\n * @title ReserveLogic library\n * @author Aave\n * @notice Implements functions to validate the different actions of the protocol\n */\nlibrary ValidationLogic {\n  using ReserveLogic for DataTypes.ReserveData;\n  using WadRayMath for uint256;\n  using PercentageMath for uint256;\n  using SafeCast for uint256;\n  using GPv2SafeERC20 for IERC20;\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n  using UserConfiguration for DataTypes.UserConfigurationMap;\n  using Address for address;\n\n  // Factor to apply to \"only-variable-debt\" liquidity rate to get threshold for rebalancing, expressed in bps\n  // A value of 0.9e4 results in 90%\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\n\n  // Minimum health factor allowed under any circumstance\n  // A value of 0.95e18 results in 0.95\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\n\n  /**\n   * @dev Minimum health factor to consider a user position healthy\n   * A value of 1e18 results in 1\n   */\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\n\n  /**\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\n   */\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\n\n  /**\n   * @notice Validates a supply action.\n   * @param reserveCache The cached data of the reserve\n   * @param amount The amount to be supplied\n   */\n  function validateSupply(\n    DataTypes.ReserveCache memory reserveCache,\n    DataTypes.ReserveData storage reserve,\n    uint256 amount\n  ) internal view {\n    require(amount != 0, Errors.INVALID_AMOUNT);\n\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\n      .reserveConfiguration\n      .getFlags();\n    require(isActive, Errors.RESERVE_INACTIVE);\n    require(!isPaused, Errors.RESERVE_PAUSED);\n    require(!isFrozen, Errors.RESERVE_FROZEN);\n\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\n    require(\n      supplyCap == 0 ||\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\n      Errors.SUPPLY_CAP_EXCEEDED\n    );\n  }\n\n  /**\n   * @notice Validates a withdraw action.\n   * @param reserveCache The cached data of the reserve\n   * @param amount The amount to be withdrawn\n   * @param userBalance The balance of the user\n   */\n  function validateWithdraw(\n    DataTypes.ReserveCache memory reserveCache,\n    uint256 amount,\n    uint256 userBalance\n  ) internal pure {\n    require(amount != 0, Errors.INVALID_AMOUNT);\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\n\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\n    require(isActive, Errors.RESERVE_INACTIVE);\n    require(!isPaused, Errors.RESERVE_PAUSED);\n  }\n\n  struct ValidateBorrowLocalVars {\n    uint256 currentLtv;\n    uint256 collateralNeededInBaseCurrency;\n    uint256 userCollateralInBaseCurrency;\n    uint256 userDebtInBaseCurrency;\n    uint256 availableLiquidity;\n    uint256 healthFactor;\n    uint256 totalDebt;\n    uint256 totalSupplyVariableDebt;\n    uint256 reserveDecimals;\n    uint256 borrowCap;\n    uint256 amountInBaseCurrency;\n    uint256 assetUnit;\n    address eModePriceSource;\n    address siloedBorrowingAddress;\n    bool isActive;\n    bool isFrozen;\n    bool isPaused;\n    bool borrowingEnabled;\n    bool stableRateBorrowingEnabled;\n    bool siloedBorrowingEnabled;\n  }\n\n  /**\n   * @notice Validates a borrow action.\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param params Additional params needed for the validation\n   */\n  function validateBorrow(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    DataTypes.ValidateBorrowParams memory params\n  ) internal view {\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\n\n    ValidateBorrowLocalVars memory vars;\n\n    (\n      vars.isActive,\n      vars.isFrozen,\n      vars.borrowingEnabled,\n      vars.stableRateBorrowingEnabled,\n      vars.isPaused\n    ) = params.reserveCache.reserveConfiguration.getFlags();\n\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\n\n    require(\n      params.priceOracleSentinel == address(0) ||\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\n    );\n\n    //validate interest rate mode\n    require(\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\n    );\n\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\n    unchecked {\n      vars.assetUnit = 10 ** vars.reserveDecimals;\n    }\n\n    if (vars.borrowCap != 0) {\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\n        params.reserveCache.nextVariableBorrowIndex\n      );\n\n      vars.totalDebt =\n        params.reserveCache.currTotalStableDebt +\n        vars.totalSupplyVariableDebt +\n        params.amount;\n\n      unchecked {\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\n      }\n    }\n\n    if (params.isolationModeActive) {\n      // check that the asset being borrowed is borrowable in isolation mode AND\n      // the total exposure is no bigger than the collateral debt ceiling\n      require(\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\n      );\n\n      require(\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\n          (params.amount /\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\n            .toUint128() <=\n          params.isolationModeDebtCeiling,\n        Errors.DEBT_CEILING_EXCEEDED\n      );\n    }\n\n    if (params.userEModeCategory != 0) {\n      require(\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\n        Errors.INCONSISTENT_EMODE_CATEGORY\n      );\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\n    }\n\n    (\n      vars.userCollateralInBaseCurrency,\n      vars.userDebtInBaseCurrency,\n      vars.currentLtv,\n      ,\n      vars.healthFactor,\n\n    ) = GenericLogic.calculateUserAccountData(\n      reservesData,\n      reservesList,\n      eModeCategories,\n      DataTypes.CalculateUserAccountDataParams({\n        userConfig: params.userConfig,\n        reservesCount: params.reservesCount,\n        user: params.userAddress,\n        oracle: params.oracle,\n        userEModeCategory: params.userEModeCategory\n      })\n    );\n\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\n\n    require(\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\n    );\n\n    vars.amountInBaseCurrency =\n      IPriceOracleGetter(params.oracle).getAssetPrice(\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\n      ) *\n      params.amount;\n    unchecked {\n      vars.amountInBaseCurrency /= vars.assetUnit;\n    }\n\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\n\n    require(\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\n    );\n\n    /**\n     * Following conditions need to be met if the user is borrowing at a stable rate:\n     * 1. Reserve must be enabled for stable rate borrowing\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\n     *    they are borrowing, to prevent abuses.\n     * 3. Users will be able to borrow only a portion of the total available liquidity\n     */\n\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\n\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\n\n      require(\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\n      );\n\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\n\n      //calculate the max available loan size in stable rate mode as a percentage of the\n      //available liquidity\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\n\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\n    }\n\n    if (params.userConfig.isBorrowingAny()) {\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\n        .userConfig\n        .getSiloedBorrowingState(reservesData, reservesList);\n\n      if (vars.siloedBorrowingEnabled) {\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\n      } else {\n        require(\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\n          Errors.SILOED_BORROWING_VIOLATION\n        );\n      }\n    }\n  }\n\n  /**\n   * @notice Validates a repay action.\n   * @param reserveCache The cached data of the reserve\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\n   * @param interestRateMode The interest rate mode of the debt being repaid\n   * @param onBehalfOf The address of the user msg.sender is repaying for\n   * @param stableDebt The borrow balance of the user\n   * @param variableDebt The borrow balance of the user\n   */\n  function validateRepay(\n    DataTypes.ReserveCache memory reserveCache,\n    uint256 amountSent,\n    DataTypes.InterestRateMode interestRateMode,\n    address onBehalfOf,\n    uint256 stableDebt,\n    uint256 variableDebt\n  ) internal view {\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\n    require(\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\n    );\n\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\n    require(isActive, Errors.RESERVE_INACTIVE);\n    require(!isPaused, Errors.RESERVE_PAUSED);\n\n    require(\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\n      Errors.NO_DEBT_OF_SELECTED_TYPE\n    );\n  }\n\n  /**\n   * @notice Validates a swap of borrow rate mode.\n   * @param reserve The reserve state on which the user is swapping the rate\n   * @param reserveCache The cached data of the reserve\n   * @param userConfig The user reserves configuration\n   * @param stableDebt The stable debt of the user\n   * @param variableDebt The variable debt of the user\n   * @param currentRateMode The rate mode of the debt being swapped\n   */\n  function validateSwapRateMode(\n    DataTypes.ReserveData storage reserve,\n    DataTypes.ReserveCache memory reserveCache,\n    DataTypes.UserConfigurationMap storage userConfig,\n    uint256 stableDebt,\n    uint256 variableDebt,\n    DataTypes.InterestRateMode currentRateMode\n  ) internal view {\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\n      .reserveConfiguration\n      .getFlags();\n    require(isActive, Errors.RESERVE_INACTIVE);\n    require(!isPaused, Errors.RESERVE_PAUSED);\n    require(!isFrozen, Errors.RESERVE_FROZEN);\n\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\n      /**\n       * user wants to swap to stable, before swapping we need to ensure that\n       * 1. stable borrow rate is enabled on the reserve\n       * 2. user is not trying to abuse the reserve by supplying\n       * more collateral than he is borrowing, artificially lowering\n       * the interest rate, borrowing at variable, and switching to stable\n       */\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\n\n      require(\n        !userConfig.isUsingAsCollateral(reserve.id) ||\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\n      );\n    } else {\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\n    }\n  }\n\n  /**\n   * @notice Validates a stable borrow rate rebalance action.\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\n   * @param reserve The reserve state on which the user is getting rebalanced\n   * @param reserveCache The cached state of the reserve\n   * @param reserveAddress The address of the reserve\n   */\n  function validateRebalanceStableBorrowRate(\n    DataTypes.ReserveData storage reserve,\n    DataTypes.ReserveCache memory reserveCache,\n    address reserveAddress\n  ) internal view {\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\n    require(isActive, Errors.RESERVE_INACTIVE);\n    require(!isPaused, Errors.RESERVE_PAUSED);\n\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\n\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\n      reserve.interestRateStrategyAddress\n    ).calculateInterestRates(\n        DataTypes.CalculateInterestRatesParams({\n          unbacked: reserve.unbacked,\n          liquidityAdded: 0,\n          liquidityTaken: 0,\n          totalStableDebt: 0,\n          totalVariableDebt: totalDebt,\n          averageStableBorrowRate: 0,\n          reserveFactor: reserveCache.reserveFactor,\n          reserve: reserveAddress,\n          aToken: reserveCache.aTokenAddress\n        })\n      );\n\n    require(\n      reserveCache.currLiquidityRate <=\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\n    );\n  }\n\n  /**\n   * @notice Validates the action of setting an asset as collateral.\n   * @param reserveCache The cached data of the reserve\n   * @param userBalance The balance of the user\n   */\n  function validateSetUseReserveAsCollateral(\n    DataTypes.ReserveCache memory reserveCache,\n    uint256 userBalance\n  ) internal pure {\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\n\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\n    require(isActive, Errors.RESERVE_INACTIVE);\n    require(!isPaused, Errors.RESERVE_PAUSED);\n  }\n\n  /**\n   * @notice Validates a flashloan action.\n   * @param reservesData The state of all the reserves\n   * @param assets The assets being flash-borrowed\n   * @param amounts The amounts for each asset being borrowed\n   */\n  function validateFlashloan(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    address[] memory assets,\n    uint256[] memory amounts\n  ) internal view {\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\n    for (uint256 i = 0; i < assets.length; i++) {\n      validateFlashloanSimple(reservesData[assets[i]]);\n    }\n  }\n\n  /**\n   * @notice Validates a flashloan action.\n   * @param reserve The state of the reserve\n   */\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\n  }\n\n  struct ValidateLiquidationCallLocalVars {\n    bool collateralReserveActive;\n    bool collateralReservePaused;\n    bool principalReserveActive;\n    bool principalReservePaused;\n    bool isCollateralEnabled;\n  }\n\n  /**\n   * @notice Validates the liquidation action.\n   * @param userConfig The user configuration mapping\n   * @param collateralReserve The reserve data of the collateral\n   * @param params Additional parameters needed for the validation\n   */\n  function validateLiquidationCall(\n    DataTypes.UserConfigurationMap storage userConfig,\n    DataTypes.ReserveData storage collateralReserve,\n    DataTypes.ValidateLiquidationCallParams memory params\n  ) internal view {\n    ValidateLiquidationCallLocalVars memory vars;\n\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\n      .configuration\n      .getFlags();\n\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\n      .debtReserveCache\n      .reserveConfiguration\n      .getFlags();\n\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\n\n    require(\n      params.priceOracleSentinel == address(0) ||\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\n    );\n\n    require(\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\n    );\n\n    vars.isCollateralEnabled =\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\n      userConfig.isUsingAsCollateral(collateralReserve.id);\n\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\n  }\n\n  /**\n   * @notice Validates the health factor of a user.\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param userConfig The state of the user for the specific reserve\n   * @param user The user to validate health factor of\n   * @param userEModeCategory The users active efficiency mode category\n   * @param reservesCount The number of available reserves\n   * @param oracle The price oracle\n   */\n  function validateHealthFactor(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    DataTypes.UserConfigurationMap memory userConfig,\n    address user,\n    uint8 userEModeCategory,\n    uint256 reservesCount,\n    address oracle\n  ) internal view returns (uint256, bool) {\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\n      .calculateUserAccountData(\n        reservesData,\n        reservesList,\n        eModeCategories,\n        DataTypes.CalculateUserAccountDataParams({\n          userConfig: userConfig,\n          reservesCount: reservesCount,\n          user: user,\n          oracle: oracle,\n          userEModeCategory: userEModeCategory\n        })\n      );\n\n    require(\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\n    );\n\n    return (healthFactor, hasZeroLtvCollateral);\n  }\n\n  /**\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param eModeCategories The configuration of all the efficiency mode categories\n   * @param userConfig The state of the user for the specific reserve\n   * @param asset The asset for which the ltv will be validated\n   * @param from The user from which the aTokens are being transferred\n   * @param reservesCount The number of available reserves\n   * @param oracle The price oracle\n   * @param userEModeCategory The users active efficiency mode category\n   */\n  function validateHFAndLtv(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    DataTypes.UserConfigurationMap memory userConfig,\n    address asset,\n    address from,\n    uint256 reservesCount,\n    address oracle,\n    uint8 userEModeCategory\n  ) internal view {\n    DataTypes.ReserveData memory reserve = reservesData[asset];\n\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\n      reservesData,\n      reservesList,\n      eModeCategories,\n      userConfig,\n      from,\n      userEModeCategory,\n      reservesCount,\n      oracle\n    );\n\n    require(\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\n      Errors.LTV_VALIDATION_FAILED\n    );\n  }\n\n  /**\n   * @notice Validates a transfer action.\n   * @param reserve The reserve object\n   */\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\n  }\n\n  /**\n   * @notice Validates a drop reserve action.\n   * @param reservesList The addresses of all the active reserves\n   * @param reserve The reserve object\n   * @param asset The address of the reserve's underlying asset\n   */\n  function validateDropReserve(\n    mapping(uint256 => address) storage reservesList,\n    DataTypes.ReserveData storage reserve,\n    address asset\n  ) internal view {\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\n    require(\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\n    );\n    require(\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\n    );\n  }\n\n  /**\n   * @notice Validates the action of setting efficiency mode.\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\n   * @param userConfig the user configuration\n   * @param reservesCount The total number of valid reserves\n   * @param categoryId The id of the category\n   */\n  function validateSetUserEMode(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\n    DataTypes.UserConfigurationMap memory userConfig,\n    uint256 reservesCount,\n    uint8 categoryId\n  ) internal view {\n    // category is invalid if the liq threshold is not set\n    require(\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\n      Errors.INCONSISTENT_EMODE_CATEGORY\n    );\n\n    // eMode can always be enabled if the user hasn't supplied anything\n    if (userConfig.isEmpty()) {\n      return;\n    }\n\n    // if user is trying to set another category than default we require that\n    // either the user is not borrowing, or it's borrowing assets of categoryId\n    if (categoryId != 0) {\n      unchecked {\n        for (uint256 i = 0; i < reservesCount; i++) {\n          if (userConfig.isBorrowing(i)) {\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\n              .configuration;\n            require(\n              configuration.getEModeCategory() == categoryId,\n              Errors.INCONSISTENT_EMODE_CATEGORY\n            );\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * @notice Validates the action of activating the asset as collateral.\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param userConfig the user configuration\n   * @param reserveConfig The reserve configuration\n   * @return True if the asset can be activated as collateral, false otherwise\n   */\n  function validateUseAsCollateral(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    DataTypes.UserConfigurationMap storage userConfig,\n    DataTypes.ReserveConfigurationMap memory reserveConfig\n  ) internal view returns (bool) {\n    if (reserveConfig.getLtv() == 0) {\n      return false;\n    }\n    if (!userConfig.isUsingAsCollateralAny()) {\n      return true;\n    }\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\n\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\n  }\n\n  /**\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\n   * transfer, mint unbacked, and liquidate\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\n   * @param reservesData The state of all the reserves\n   * @param reservesList The addresses of all the active reserves\n   * @param userConfig the user configuration\n   * @param reserveConfig The reserve configuration\n   * @return True if the asset can be activated as collateral, false otherwise\n   */\n  function validateAutomaticUseAsCollateral(\n    mapping(address => DataTypes.ReserveData) storage reservesData,\n    mapping(uint256 => address) storage reservesList,\n    DataTypes.UserConfigurationMap storage userConfig,\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\n    address aTokenAddress\n  ) internal view returns (bool) {\n    if (reserveConfig.getDebtCeiling() != 0) {\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\n        .POOL()\n        .ADDRESSES_PROVIDER();\n      if (\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\n          msg.sender\n        )\n      ) return false;\n    }\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\n  }\n}\n"},"@aave/core-v3/contracts/protocol/libraries/math/MathUtils.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {WadRayMath} from './WadRayMath.sol';\n\n/**\n * @title MathUtils library\n * @author Aave\n * @notice Provides functions to perform linear and compounded interest calculations\n */\nlibrary MathUtils {\n  using WadRayMath for uint256;\n\n  /// @dev Ignoring leap years\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\n\n  /**\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\n   * @param rate The interest rate, in ray\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\n   */\n  function calculateLinearInterest(\n    uint256 rate,\n    uint40 lastUpdateTimestamp\n  ) internal view returns (uint256) {\n    //solium-disable-next-line\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\n    unchecked {\n      result = result / SECONDS_PER_YEAR;\n    }\n\n    return WadRayMath.RAY + result;\n  }\n\n  /**\n   * @dev Function to calculate the interest using a compounded interest rate formula\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\n   *\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\n   *\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\n   * error per different time periods\n   *\n   * @param rate The interest rate, in ray\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\n   * @return The interest rate compounded during the timeDelta, in ray\n   */\n  function calculateCompoundedInterest(\n    uint256 rate,\n    uint40 lastUpdateTimestamp,\n    uint256 currentTimestamp\n  ) internal pure returns (uint256) {\n    //solium-disable-next-line\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\n\n    if (exp == 0) {\n      return WadRayMath.RAY;\n    }\n\n    uint256 expMinusOne;\n    uint256 expMinusTwo;\n    uint256 basePowerTwo;\n    uint256 basePowerThree;\n    unchecked {\n      expMinusOne = exp - 1;\n\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\n\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\n    }\n\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\n    unchecked {\n      secondTerm /= 2;\n    }\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\n    unchecked {\n      thirdTerm /= 6;\n    }\n\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\n  }\n\n  /**\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\n   * @param rate The interest rate (in ray)\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\n   */\n  function calculateCompoundedInterest(\n    uint256 rate,\n    uint40 lastUpdateTimestamp\n  ) internal view returns (uint256) {\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\n  }\n}\n"},"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\n/**\n * @title PercentageMath library\n * @author Aave\n * @notice Provides functions to perform percentage calculations\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\n */\nlibrary PercentageMath {\n  // Maximum percentage factor (100.00%)\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\n\n  // Half percentage factor (50.00%)\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\n\n  /**\n   * @notice Executes a percentage multiplication\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n   * @param value The value of which the percentage needs to be calculated\n   * @param percentage The percentage of the value to be calculated\n   * @return result value percentmul percentage\n   */\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\n    assembly {\n      if iszero(\n        or(\n          iszero(percentage),\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\n        )\n      ) {\n        revert(0, 0)\n      }\n\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\n    }\n  }\n\n  /**\n   * @notice Executes a percentage division\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n   * @param value The value of which the percentage needs to be calculated\n   * @param percentage The percentage of the value to be calculated\n   * @return result value percentdiv percentage\n   */\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\n    assembly {\n      if or(\n        iszero(percentage),\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\n      ) {\n        revert(0, 0)\n      }\n\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\n    }\n  }\n}\n"},"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\n/**\n * @title WadRayMath library\n * @author Aave\n * @notice Provides functions to perform calculations with Wad and Ray units\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\n * with 27 digits of precision)\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\n */\nlibrary WadRayMath {\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\n  uint256 internal constant WAD = 1e18;\n  uint256 internal constant HALF_WAD = 0.5e18;\n\n  uint256 internal constant RAY = 1e27;\n  uint256 internal constant HALF_RAY = 0.5e27;\n\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\n\n  /**\n   * @dev Multiplies two wad, rounding half up to the nearest wad\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n   * @param a Wad\n   * @param b Wad\n   * @return c = a*b, in wad\n   */\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\n    assembly {\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\n        revert(0, 0)\n      }\n\n      c := div(add(mul(a, b), HALF_WAD), WAD)\n    }\n  }\n\n  /**\n   * @dev Divides two wad, rounding half up to the nearest wad\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n   * @param a Wad\n   * @param b Wad\n   * @return c = a/b, in wad\n   */\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\n    assembly {\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\n        revert(0, 0)\n      }\n\n      c := div(add(mul(a, WAD), div(b, 2)), b)\n    }\n  }\n\n  /**\n   * @notice Multiplies two ray, rounding half up to the nearest ray\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n   * @param a Ray\n   * @param b Ray\n   * @return c = a raymul b\n   */\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\n    assembly {\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\n        revert(0, 0)\n      }\n\n      c := div(add(mul(a, b), HALF_RAY), RAY)\n    }\n  }\n\n  /**\n   * @notice Divides two ray, rounding half up to the nearest ray\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n   * @param a Ray\n   * @param b Ray\n   * @return c = a raydiv b\n   */\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\n    assembly {\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\n        revert(0, 0)\n      }\n\n      c := div(add(mul(a, RAY), div(b, 2)), b)\n    }\n  }\n\n  /**\n   * @dev Casts ray down to wad\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n   * @param a Ray\n   * @return b = a converted to wad, rounded half up to the nearest wad\n   */\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\n    assembly {\n      b := div(a, WAD_RAY_RATIO)\n      let remainder := mod(a, WAD_RAY_RATIO)\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\n        b := add(b, 1)\n      }\n    }\n  }\n\n  /**\n   * @dev Converts wad up to ray\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n   * @param a Wad\n   * @return b = a converted in ray\n   */\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\n    // to avoid overflow, b/WAD_RAY_RATIO == a\n    assembly {\n      b := mul(a, WAD_RAY_RATIO)\n\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\n        revert(0, 0)\n      }\n    }\n  }\n}\n"},"@aave/core-v3/contracts/protocol/libraries/types/ConfiguratorInputTypes.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nlibrary ConfiguratorInputTypes {\n  struct InitReserveInput {\n    address aTokenImpl;\n    address stableDebtTokenImpl;\n    address variableDebtTokenImpl;\n    uint8 underlyingAssetDecimals;\n    address interestRateStrategyAddress;\n    address underlyingAsset;\n    address treasury;\n    address incentivesController;\n    string aTokenName;\n    string aTokenSymbol;\n    string variableDebtTokenName;\n    string variableDebtTokenSymbol;\n    string stableDebtTokenName;\n    string stableDebtTokenSymbol;\n    bytes params;\n  }\n\n  struct UpdateATokenInput {\n    address asset;\n    address treasury;\n    address incentivesController;\n    string name;\n    string symbol;\n    address implementation;\n    bytes params;\n  }\n\n  struct UpdateDebtTokenInput {\n    address asset;\n    address incentivesController;\n    string name;\n    string symbol;\n    address implementation;\n    bytes params;\n  }\n}\n"},"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nlibrary DataTypes {\n  struct ReserveData {\n    //stores the reserve configuration\n    ReserveConfigurationMap configuration;\n    //the liquidity index. Expressed in ray\n    uint128 liquidityIndex;\n    //the current supply rate. Expressed in ray\n    uint128 currentLiquidityRate;\n    //variable borrow index. Expressed in ray\n    uint128 variableBorrowIndex;\n    //the current variable borrow rate. Expressed in ray\n    uint128 currentVariableBorrowRate;\n    //the current stable borrow rate. Expressed in ray\n    uint128 currentStableBorrowRate;\n    //timestamp of last update\n    uint40 lastUpdateTimestamp;\n    //the id of the reserve. Represents the position in the list of the active reserves\n    uint16 id;\n    //aToken address\n    address aTokenAddress;\n    //stableDebtToken address\n    address stableDebtTokenAddress;\n    //variableDebtToken address\n    address variableDebtTokenAddress;\n    //address of the interest rate strategy\n    address interestRateStrategyAddress;\n    //the current treasury balance, scaled\n    uint128 accruedToTreasury;\n    //the outstanding unbacked aTokens minted through the bridging feature\n    uint128 unbacked;\n    //the outstanding debt borrowed against this asset in isolation mode\n    uint128 isolationModeTotalDebt;\n  }\n\n  struct ReserveConfigurationMap {\n    //bit 0-15: LTV\n    //bit 16-31: Liq. threshold\n    //bit 32-47: Liq. bonus\n    //bit 48-55: Decimals\n    //bit 56: reserve is active\n    //bit 57: reserve is frozen\n    //bit 58: borrowing is enabled\n    //bit 59: stable rate borrowing enabled\n    //bit 60: asset is paused\n    //bit 61: borrowing in isolation mode is enabled\n    //bit 62: siloed borrowing enabled\n    //bit 63: flashloaning enabled\n    //bit 64-79: reserve factor\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\n    //bit 152-167 liquidation protocol fee\n    //bit 168-175 eMode category\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\n    //bit 252-255 unused\n\n    uint256 data;\n  }\n\n  struct UserConfigurationMap {\n    /**\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\n     * asset is borrowed by the user.\n     */\n    uint256 data;\n  }\n\n  struct EModeCategory {\n    // each eMode category has a custom ltv and liquidation threshold\n    uint16 ltv;\n    uint16 liquidationThreshold;\n    uint16 liquidationBonus;\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\n    address priceSource;\n    string label;\n  }\n\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\n\n  struct ReserveCache {\n    uint256 currScaledVariableDebt;\n    uint256 nextScaledVariableDebt;\n    uint256 currPrincipalStableDebt;\n    uint256 currAvgStableBorrowRate;\n    uint256 currTotalStableDebt;\n    uint256 nextAvgStableBorrowRate;\n    uint256 nextTotalStableDebt;\n    uint256 currLiquidityIndex;\n    uint256 nextLiquidityIndex;\n    uint256 currVariableBorrowIndex;\n    uint256 nextVariableBorrowIndex;\n    uint256 currLiquidityRate;\n    uint256 currVariableBorrowRate;\n    uint256 reserveFactor;\n    ReserveConfigurationMap reserveConfiguration;\n    address aTokenAddress;\n    address stableDebtTokenAddress;\n    address variableDebtTokenAddress;\n    uint40 reserveLastUpdateTimestamp;\n    uint40 stableDebtLastUpdateTimestamp;\n  }\n\n  struct ExecuteLiquidationCallParams {\n    uint256 reservesCount;\n    uint256 debtToCover;\n    address collateralAsset;\n    address debtAsset;\n    address user;\n    bool receiveAToken;\n    address priceOracle;\n    uint8 userEModeCategory;\n    address priceOracleSentinel;\n  }\n\n  struct ExecuteSupplyParams {\n    address asset;\n    uint256 amount;\n    address onBehalfOf;\n    uint16 referralCode;\n  }\n\n  struct ExecuteBorrowParams {\n    address asset;\n    address user;\n    address onBehalfOf;\n    uint256 amount;\n    InterestRateMode interestRateMode;\n    uint16 referralCode;\n    bool releaseUnderlying;\n    uint256 maxStableRateBorrowSizePercent;\n    uint256 reservesCount;\n    address oracle;\n    uint8 userEModeCategory;\n    address priceOracleSentinel;\n  }\n\n  struct ExecuteRepayParams {\n    address asset;\n    uint256 amount;\n    InterestRateMode interestRateMode;\n    address onBehalfOf;\n    bool useATokens;\n  }\n\n  struct ExecuteWithdrawParams {\n    address asset;\n    uint256 amount;\n    address to;\n    uint256 reservesCount;\n    address oracle;\n    uint8 userEModeCategory;\n  }\n\n  struct ExecuteSetUserEModeParams {\n    uint256 reservesCount;\n    address oracle;\n    uint8 categoryId;\n  }\n\n  struct FinalizeTransferParams {\n    address asset;\n    address from;\n    address to;\n    uint256 amount;\n    uint256 balanceFromBefore;\n    uint256 balanceToBefore;\n    uint256 reservesCount;\n    address oracle;\n    uint8 fromEModeCategory;\n  }\n\n  struct FlashloanParams {\n    address receiverAddress;\n    address[] assets;\n    uint256[] amounts;\n    uint256[] interestRateModes;\n    address onBehalfOf;\n    bytes params;\n    uint16 referralCode;\n    uint256 flashLoanPremiumToProtocol;\n    uint256 flashLoanPremiumTotal;\n    uint256 maxStableRateBorrowSizePercent;\n    uint256 reservesCount;\n    address addressesProvider;\n    uint8 userEModeCategory;\n    bool isAuthorizedFlashBorrower;\n  }\n\n  struct FlashloanSimpleParams {\n    address receiverAddress;\n    address asset;\n    uint256 amount;\n    bytes params;\n    uint16 referralCode;\n    uint256 flashLoanPremiumToProtocol;\n    uint256 flashLoanPremiumTotal;\n  }\n\n  struct FlashLoanRepaymentParams {\n    uint256 amount;\n    uint256 totalPremium;\n    uint256 flashLoanPremiumToProtocol;\n    address asset;\n    address receiverAddress;\n    uint16 referralCode;\n  }\n\n  struct CalculateUserAccountDataParams {\n    UserConfigurationMap userConfig;\n    uint256 reservesCount;\n    address user;\n    address oracle;\n    uint8 userEModeCategory;\n  }\n\n  struct ValidateBorrowParams {\n    ReserveCache reserveCache;\n    UserConfigurationMap userConfig;\n    address asset;\n    address userAddress;\n    uint256 amount;\n    InterestRateMode interestRateMode;\n    uint256 maxStableLoanPercent;\n    uint256 reservesCount;\n    address oracle;\n    uint8 userEModeCategory;\n    address priceOracleSentinel;\n    bool isolationModeActive;\n    address isolationModeCollateralAddress;\n    uint256 isolationModeDebtCeiling;\n  }\n\n  struct ValidateLiquidationCallParams {\n    ReserveCache debtReserveCache;\n    uint256 totalDebt;\n    uint256 healthFactor;\n    address priceOracleSentinel;\n  }\n\n  struct CalculateInterestRatesParams {\n    uint256 unbacked;\n    uint256 liquidityAdded;\n    uint256 liquidityTaken;\n    uint256 totalStableDebt;\n    uint256 totalVariableDebt;\n    uint256 averageStableBorrowRate;\n    uint256 reserveFactor;\n    address reserve;\n    address aToken;\n  }\n\n  struct InitReserveParams {\n    address asset;\n    address aTokenAddress;\n    address stableDebtAddress;\n    address variableDebtAddress;\n    address interestRateStrategyAddress;\n    uint16 reservesCount;\n    uint16 maxNumberReserves;\n  }\n}\n"},"@aave/core-v3/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\nimport {PercentageMath} from '../libraries/math/PercentageMath.sol';\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\nimport {Errors} from '../libraries/helpers/Errors.sol';\nimport {IDefaultInterestRateStrategy} from '../../interfaces/IDefaultInterestRateStrategy.sol';\nimport {IReserveInterestRateStrategy} from '../../interfaces/IReserveInterestRateStrategy.sol';\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\n\n/**\n * @title DefaultReserveInterestRateStrategy contract\n * @author Aave\n * @notice Implements the calculation of the interest rates depending on the reserve state\n * @dev The model of interest rate is based on 2 slopes, one before the `OPTIMAL_USAGE_RATIO`\n * point of usage and another from that one to 100%.\n * - An instance of this same contract, can't be used across different Aave markets, due to the caching\n *   of the PoolAddressesProvider\n */\ncontract DefaultReserveInterestRateStrategy is IDefaultInterestRateStrategy {\n  using WadRayMath for uint256;\n  using PercentageMath for uint256;\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  uint256 public immutable OPTIMAL_USAGE_RATIO;\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  uint256 public immutable OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO;\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  uint256 public immutable MAX_EXCESS_USAGE_RATIO;\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  uint256 public immutable MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO;\n\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\n\n  // Base variable borrow rate when usage rate = 0. Expressed in ray\n  uint256 internal immutable _baseVariableBorrowRate;\n\n  // Slope of the variable interest curve when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO. Expressed in ray\n  uint256 internal immutable _variableRateSlope1;\n\n  // Slope of the variable interest curve when usage ratio > OPTIMAL_USAGE_RATIO. Expressed in ray\n  uint256 internal immutable _variableRateSlope2;\n\n  // Slope of the stable interest curve when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO. Expressed in ray\n  uint256 internal immutable _stableRateSlope1;\n\n  // Slope of the stable interest curve when usage ratio > OPTIMAL_USAGE_RATIO. Expressed in ray\n  uint256 internal immutable _stableRateSlope2;\n\n  // Premium on top of `_variableRateSlope1` for base stable borrowing rate\n  uint256 internal immutable _baseStableRateOffset;\n\n  // Additional premium applied to stable rate when stable debt surpass `OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO`\n  uint256 internal immutable _stableRateExcessOffset;\n\n  /**\n   * @dev Constructor.\n   * @param provider The address of the PoolAddressesProvider contract\n   * @param optimalUsageRatio The optimal usage ratio\n   * @param baseVariableBorrowRate The base variable borrow rate\n   * @param variableRateSlope1 The variable rate slope below optimal usage ratio\n   * @param variableRateSlope2 The variable rate slope above optimal usage ratio\n   * @param stableRateSlope1 The stable rate slope below optimal usage ratio\n   * @param stableRateSlope2 The stable rate slope above optimal usage ratio\n   * @param baseStableRateOffset The premium on top of variable rate for base stable borrowing rate\n   * @param stableRateExcessOffset The premium on top of stable rate when there stable debt surpass the threshold\n   * @param optimalStableToTotalDebtRatio The optimal stable debt to total debt ratio of the reserve\n   */\n  constructor(\n    IPoolAddressesProvider provider,\n    uint256 optimalUsageRatio,\n    uint256 baseVariableBorrowRate,\n    uint256 variableRateSlope1,\n    uint256 variableRateSlope2,\n    uint256 stableRateSlope1,\n    uint256 stableRateSlope2,\n    uint256 baseStableRateOffset,\n    uint256 stableRateExcessOffset,\n    uint256 optimalStableToTotalDebtRatio\n  ) {\n    require(WadRayMath.RAY >= optimalUsageRatio, Errors.INVALID_OPTIMAL_USAGE_RATIO);\n    require(\n      WadRayMath.RAY >= optimalStableToTotalDebtRatio,\n      Errors.INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\n    );\n    OPTIMAL_USAGE_RATIO = optimalUsageRatio;\n    MAX_EXCESS_USAGE_RATIO = WadRayMath.RAY - optimalUsageRatio;\n    OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = optimalStableToTotalDebtRatio;\n    MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO = WadRayMath.RAY - optimalStableToTotalDebtRatio;\n    ADDRESSES_PROVIDER = provider;\n    _baseVariableBorrowRate = baseVariableBorrowRate;\n    _variableRateSlope1 = variableRateSlope1;\n    _variableRateSlope2 = variableRateSlope2;\n    _stableRateSlope1 = stableRateSlope1;\n    _stableRateSlope2 = stableRateSlope2;\n    _baseStableRateOffset = baseStableRateOffset;\n    _stableRateExcessOffset = stableRateExcessOffset;\n  }\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  function getVariableRateSlope1() external view returns (uint256) {\n    return _variableRateSlope1;\n  }\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  function getVariableRateSlope2() external view returns (uint256) {\n    return _variableRateSlope2;\n  }\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  function getStableRateSlope1() external view returns (uint256) {\n    return _stableRateSlope1;\n  }\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  function getStableRateSlope2() external view returns (uint256) {\n    return _stableRateSlope2;\n  }\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  function getStableRateExcessOffset() external view returns (uint256) {\n    return _stableRateExcessOffset;\n  }\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  function getBaseStableBorrowRate() public view returns (uint256) {\n    return _variableRateSlope1 + _baseStableRateOffset;\n  }\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  function getBaseVariableBorrowRate() external view override returns (uint256) {\n    return _baseVariableBorrowRate;\n  }\n\n  /// @inheritdoc IDefaultInterestRateStrategy\n  function getMaxVariableBorrowRate() external view override returns (uint256) {\n    return _baseVariableBorrowRate + _variableRateSlope1 + _variableRateSlope2;\n  }\n\n  struct CalcInterestRatesLocalVars {\n    uint256 availableLiquidity;\n    uint256 totalDebt;\n    uint256 currentVariableBorrowRate;\n    uint256 currentStableBorrowRate;\n    uint256 currentLiquidityRate;\n    uint256 borrowUsageRatio;\n    uint256 supplyUsageRatio;\n    uint256 stableToTotalDebtRatio;\n    uint256 availableLiquidityPlusDebt;\n  }\n\n  /// @inheritdoc IReserveInterestRateStrategy\n  function calculateInterestRates(\n    DataTypes.CalculateInterestRatesParams memory params\n  ) public view override returns (uint256, uint256, uint256) {\n    CalcInterestRatesLocalVars memory vars;\n\n    vars.totalDebt = params.totalStableDebt + params.totalVariableDebt;\n\n    vars.currentLiquidityRate = 0;\n    vars.currentVariableBorrowRate = _baseVariableBorrowRate;\n    vars.currentStableBorrowRate = getBaseStableBorrowRate();\n\n    if (vars.totalDebt != 0) {\n      vars.stableToTotalDebtRatio = params.totalStableDebt.rayDiv(vars.totalDebt);\n      vars.availableLiquidity =\n        IERC20(params.reserve).balanceOf(params.aToken) +\n        params.liquidityAdded -\n        params.liquidityTaken;\n\n      vars.availableLiquidityPlusDebt = vars.availableLiquidity + vars.totalDebt;\n      vars.borrowUsageRatio = vars.totalDebt.rayDiv(vars.availableLiquidityPlusDebt);\n      vars.supplyUsageRatio = vars.totalDebt.rayDiv(\n        vars.availableLiquidityPlusDebt + params.unbacked\n      );\n    }\n\n    if (vars.borrowUsageRatio > OPTIMAL_USAGE_RATIO) {\n      uint256 excessBorrowUsageRatio = (vars.borrowUsageRatio - OPTIMAL_USAGE_RATIO).rayDiv(\n        MAX_EXCESS_USAGE_RATIO\n      );\n\n      vars.currentStableBorrowRate +=\n        _stableRateSlope1 +\n        _stableRateSlope2.rayMul(excessBorrowUsageRatio);\n\n      vars.currentVariableBorrowRate +=\n        _variableRateSlope1 +\n        _variableRateSlope2.rayMul(excessBorrowUsageRatio);\n    } else {\n      vars.currentStableBorrowRate += _stableRateSlope1.rayMul(vars.borrowUsageRatio).rayDiv(\n        OPTIMAL_USAGE_RATIO\n      );\n\n      vars.currentVariableBorrowRate += _variableRateSlope1.rayMul(vars.borrowUsageRatio).rayDiv(\n        OPTIMAL_USAGE_RATIO\n      );\n    }\n\n    if (vars.stableToTotalDebtRatio > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO) {\n      uint256 excessStableDebtRatio = (vars.stableToTotalDebtRatio -\n        OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO).rayDiv(MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO);\n      vars.currentStableBorrowRate += _stableRateExcessOffset.rayMul(excessStableDebtRatio);\n    }\n\n    vars.currentLiquidityRate = _getOverallBorrowRate(\n      params.totalStableDebt,\n      params.totalVariableDebt,\n      vars.currentVariableBorrowRate,\n      params.averageStableBorrowRate\n    ).rayMul(vars.supplyUsageRatio).percentMul(\n        PercentageMath.PERCENTAGE_FACTOR - params.reserveFactor\n      );\n\n    return (\n      vars.currentLiquidityRate,\n      vars.currentStableBorrowRate,\n      vars.currentVariableBorrowRate\n    );\n  }\n\n  /**\n   * @dev Calculates the overall borrow rate as the weighted average between the total variable debt and total stable\n   * debt\n   * @param totalStableDebt The total borrowed from the reserve at a stable rate\n   * @param totalVariableDebt The total borrowed from the reserve at a variable rate\n   * @param currentVariableBorrowRate The current variable borrow rate of the reserve\n   * @param currentAverageStableBorrowRate The current weighted average of all the stable rate loans\n   * @return The weighted averaged borrow rate\n   */\n  function _getOverallBorrowRate(\n    uint256 totalStableDebt,\n    uint256 totalVariableDebt,\n    uint256 currentVariableBorrowRate,\n    uint256 currentAverageStableBorrowRate\n  ) internal pure returns (uint256) {\n    uint256 totalDebt = totalStableDebt + totalVariableDebt;\n\n    if (totalDebt == 0) return 0;\n\n    uint256 weightedVariableRate = totalVariableDebt.wadToRay().rayMul(currentVariableBorrowRate);\n\n    uint256 weightedStableRate = totalStableDebt.wadToRay().rayMul(currentAverageStableBorrowRate);\n\n    uint256 overallBorrowRate = (weightedVariableRate + weightedStableRate).rayDiv(\n      totalDebt.wadToRay()\n    );\n\n    return overallBorrowRate;\n  }\n}\n"},"@aave/core-v3/contracts/protocol/pool/Pool.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\nimport {Errors} from '../libraries/helpers/Errors.sol';\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\nimport {PoolLogic} from '../libraries/logic/PoolLogic.sol';\nimport {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';\nimport {EModeLogic} from '../libraries/logic/EModeLogic.sol';\nimport {SupplyLogic} from '../libraries/logic/SupplyLogic.sol';\nimport {FlashLoanLogic} from '../libraries/logic/FlashLoanLogic.sol';\nimport {BorrowLogic} from '../libraries/logic/BorrowLogic.sol';\nimport {LiquidationLogic} from '../libraries/logic/LiquidationLogic.sol';\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\nimport {BridgeLogic} from '../libraries/logic/BridgeLogic.sol';\nimport {IERC20WithPermit} from '../../interfaces/IERC20WithPermit.sol';\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\nimport {IACLManager} from '../../interfaces/IACLManager.sol';\nimport {PoolStorage} from './PoolStorage.sol';\n\n/**\n * @title Pool contract\n * @author Aave\n * @notice Main point of interaction with an Aave protocol's market\n * - Users can:\n *   # Supply\n *   # Withdraw\n *   # Borrow\n *   # Repay\n *   # Swap their loans between variable and stable rate\n *   # Enable/disable their supplied assets as collateral rebalance stable rate borrow positions\n *   # Liquidate positions\n *   # Execute Flash Loans\n * @dev To be covered by a proxy contract, owned by the PoolAddressesProvider of the specific market\n * @dev All admin functions are callable by the PoolConfigurator contract defined also in the\n *   PoolAddressesProvider\n */\ncontract Pool is VersionedInitializable, PoolStorage, IPool {\n  using ReserveLogic for DataTypes.ReserveData;\n\n  uint256 public constant POOL_REVISION = 0x1;\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\n\n  /**\n   * @dev Only pool configurator can call functions marked by this modifier.\n   */\n  modifier onlyPoolConfigurator() {\n    _onlyPoolConfigurator();\n    _;\n  }\n\n  /**\n   * @dev Only pool admin can call functions marked by this modifier.\n   */\n  modifier onlyPoolAdmin() {\n    _onlyPoolAdmin();\n    _;\n  }\n\n  /**\n   * @dev Only bridge can call functions marked by this modifier.\n   */\n  modifier onlyBridge() {\n    _onlyBridge();\n    _;\n  }\n\n  function _onlyPoolConfigurator() internal view virtual {\n    require(\n      ADDRESSES_PROVIDER.getPoolConfigurator() == msg.sender,\n      Errors.CALLER_NOT_POOL_CONFIGURATOR\n    );\n  }\n\n  function _onlyPoolAdmin() internal view virtual {\n    require(\n      IACLManager(ADDRESSES_PROVIDER.getACLManager()).isPoolAdmin(msg.sender),\n      Errors.CALLER_NOT_POOL_ADMIN\n    );\n  }\n\n  function _onlyBridge() internal view virtual {\n    require(\n      IACLManager(ADDRESSES_PROVIDER.getACLManager()).isBridge(msg.sender),\n      Errors.CALLER_NOT_BRIDGE\n    );\n  }\n\n  function getRevision() internal pure virtual override returns (uint256) {\n    return POOL_REVISION;\n  }\n\n  /**\n   * @dev Constructor.\n   * @param provider The address of the PoolAddressesProvider contract\n   */\n  constructor(IPoolAddressesProvider provider) {\n    ADDRESSES_PROVIDER = provider;\n  }\n\n  /**\n   * @notice Initializes the Pool.\n   * @dev Function is invoked by the proxy contract when the Pool contract is added to the\n   * PoolAddressesProvider of the market.\n   * @dev Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations\n   * @param provider The address of the PoolAddressesProvider\n   */\n  function initialize(IPoolAddressesProvider provider) external virtual initializer {\n    require(provider == ADDRESSES_PROVIDER, Errors.INVALID_ADDRESSES_PROVIDER);\n    _maxStableRateBorrowSizePercent = 0.25e4;\n  }\n\n  /// @inheritdoc IPool\n  function mintUnbacked(\n    address asset,\n    uint256 amount,\n    address onBehalfOf,\n    uint16 referralCode\n  ) external virtual override onlyBridge {\n    BridgeLogic.executeMintUnbacked(\n      _reserves,\n      _reservesList,\n      _usersConfig[onBehalfOf],\n      asset,\n      amount,\n      onBehalfOf,\n      referralCode\n    );\n  }\n\n  /// @inheritdoc IPool\n  function backUnbacked(\n    address asset,\n    uint256 amount,\n    uint256 fee\n  ) external virtual override onlyBridge returns (uint256) {\n    return\n      BridgeLogic.executeBackUnbacked(_reserves[asset], asset, amount, fee, _bridgeProtocolFee);\n  }\n\n  /// @inheritdoc IPool\n  function supply(\n    address asset,\n    uint256 amount,\n    address onBehalfOf,\n    uint16 referralCode\n  ) public virtual override {\n    SupplyLogic.executeSupply(\n      _reserves,\n      _reservesList,\n      _usersConfig[onBehalfOf],\n      DataTypes.ExecuteSupplyParams({\n        asset: asset,\n        amount: amount,\n        onBehalfOf: onBehalfOf,\n        referralCode: referralCode\n      })\n    );\n  }\n\n  /// @inheritdoc IPool\n  function supplyWithPermit(\n    address asset,\n    uint256 amount,\n    address onBehalfOf,\n    uint16 referralCode,\n    uint256 deadline,\n    uint8 permitV,\n    bytes32 permitR,\n    bytes32 permitS\n  ) public virtual override {\n    IERC20WithPermit(asset).permit(\n      msg.sender,\n      address(this),\n      amount,\n      deadline,\n      permitV,\n      permitR,\n      permitS\n    );\n    SupplyLogic.executeSupply(\n      _reserves,\n      _reservesList,\n      _usersConfig[onBehalfOf],\n      DataTypes.ExecuteSupplyParams({\n        asset: asset,\n        amount: amount,\n        onBehalfOf: onBehalfOf,\n        referralCode: referralCode\n      })\n    );\n  }\n\n  /// @inheritdoc IPool\n  function withdraw(\n    address asset,\n    uint256 amount,\n    address to\n  ) public virtual override returns (uint256) {\n    return\n      SupplyLogic.executeWithdraw(\n        _reserves,\n        _reservesList,\n        _eModeCategories,\n        _usersConfig[msg.sender],\n        DataTypes.ExecuteWithdrawParams({\n          asset: asset,\n          amount: amount,\n          to: to,\n          reservesCount: _reservesCount,\n          oracle: ADDRESSES_PROVIDER.getPriceOracle(),\n          userEModeCategory: _usersEModeCategory[msg.sender]\n        })\n      );\n  }\n\n  /// @inheritdoc IPool\n  function borrow(\n    address asset,\n    uint256 amount,\n    uint256 interestRateMode,\n    uint16 referralCode,\n    address onBehalfOf\n  ) public virtual override {\n    BorrowLogic.executeBorrow(\n      _reserves,\n      _reservesList,\n      _eModeCategories,\n      _usersConfig[onBehalfOf],\n      DataTypes.ExecuteBorrowParams({\n        asset: asset,\n        user: msg.sender,\n        onBehalfOf: onBehalfOf,\n        amount: amount,\n        interestRateMode: DataTypes.InterestRateMode(interestRateMode),\n        referralCode: referralCode,\n        releaseUnderlying: true,\n        maxStableRateBorrowSizePercent: _maxStableRateBorrowSizePercent,\n        reservesCount: _reservesCount,\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\n        userEModeCategory: _usersEModeCategory[onBehalfOf],\n        priceOracleSentinel: ADDRESSES_PROVIDER.getPriceOracleSentinel()\n      })\n    );\n  }\n\n  /// @inheritdoc IPool\n  function repay(\n    address asset,\n    uint256 amount,\n    uint256 interestRateMode,\n    address onBehalfOf\n  ) public virtual override returns (uint256) {\n    return\n      BorrowLogic.executeRepay(\n        _reserves,\n        _reservesList,\n        _usersConfig[onBehalfOf],\n        DataTypes.ExecuteRepayParams({\n          asset: asset,\n          amount: amount,\n          interestRateMode: DataTypes.InterestRateMode(interestRateMode),\n          onBehalfOf: onBehalfOf,\n          useATokens: false\n        })\n      );\n  }\n\n  /// @inheritdoc IPool\n  function repayWithPermit(\n    address asset,\n    uint256 amount,\n    uint256 interestRateMode,\n    address onBehalfOf,\n    uint256 deadline,\n    uint8 permitV,\n    bytes32 permitR,\n    bytes32 permitS\n  ) public virtual override returns (uint256) {\n    {\n      IERC20WithPermit(asset).permit(\n        msg.sender,\n        address(this),\n        amount,\n        deadline,\n        permitV,\n        permitR,\n        permitS\n      );\n    }\n    {\n      DataTypes.ExecuteRepayParams memory params = DataTypes.ExecuteRepayParams({\n        asset: asset,\n        amount: amount,\n        interestRateMode: DataTypes.InterestRateMode(interestRateMode),\n        onBehalfOf: onBehalfOf,\n        useATokens: false\n      });\n      return BorrowLogic.executeRepay(_reserves, _reservesList, _usersConfig[onBehalfOf], params);\n    }\n  }\n\n  /// @inheritdoc IPool\n  function repayWithATokens(\n    address asset,\n    uint256 amount,\n    uint256 interestRateMode\n  ) public virtual override returns (uint256) {\n    return\n      BorrowLogic.executeRepay(\n        _reserves,\n        _reservesList,\n        _usersConfig[msg.sender],\n        DataTypes.ExecuteRepayParams({\n          asset: asset,\n          amount: amount,\n          interestRateMode: DataTypes.InterestRateMode(interestRateMode),\n          onBehalfOf: msg.sender,\n          useATokens: true\n        })\n      );\n  }\n\n  /// @inheritdoc IPool\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) public virtual override {\n    BorrowLogic.executeSwapBorrowRateMode(\n      _reserves[asset],\n      _usersConfig[msg.sender],\n      asset,\n      DataTypes.InterestRateMode(interestRateMode)\n    );\n  }\n\n  /// @inheritdoc IPool\n  function rebalanceStableBorrowRate(address asset, address user) public virtual override {\n    BorrowLogic.executeRebalanceStableBorrowRate(_reserves[asset], asset, user);\n  }\n\n  /// @inheritdoc IPool\n  function setUserUseReserveAsCollateral(\n    address asset,\n    bool useAsCollateral\n  ) public virtual override {\n    SupplyLogic.executeUseReserveAsCollateral(\n      _reserves,\n      _reservesList,\n      _eModeCategories,\n      _usersConfig[msg.sender],\n      asset,\n      useAsCollateral,\n      _reservesCount,\n      ADDRESSES_PROVIDER.getPriceOracle(),\n      _usersEModeCategory[msg.sender]\n    );\n  }\n\n  /// @inheritdoc IPool\n  function liquidationCall(\n    address collateralAsset,\n    address debtAsset,\n    address user,\n    uint256 debtToCover,\n    bool receiveAToken\n  ) public virtual override {\n    LiquidationLogic.executeLiquidationCall(\n      _reserves,\n      _reservesList,\n      _usersConfig,\n      _eModeCategories,\n      DataTypes.ExecuteLiquidationCallParams({\n        reservesCount: _reservesCount,\n        debtToCover: debtToCover,\n        collateralAsset: collateralAsset,\n        debtAsset: debtAsset,\n        user: user,\n        receiveAToken: receiveAToken,\n        priceOracle: ADDRESSES_PROVIDER.getPriceOracle(),\n        userEModeCategory: _usersEModeCategory[user],\n        priceOracleSentinel: ADDRESSES_PROVIDER.getPriceOracleSentinel()\n      })\n    );\n  }\n\n  /// @inheritdoc IPool\n  function flashLoan(\n    address receiverAddress,\n    address[] calldata assets,\n    uint256[] calldata amounts,\n    uint256[] calldata interestRateModes,\n    address onBehalfOf,\n    bytes calldata params,\n    uint16 referralCode\n  ) public virtual override {\n    DataTypes.FlashloanParams memory flashParams = DataTypes.FlashloanParams({\n      receiverAddress: receiverAddress,\n      assets: assets,\n      amounts: amounts,\n      interestRateModes: interestRateModes,\n      onBehalfOf: onBehalfOf,\n      params: params,\n      referralCode: referralCode,\n      flashLoanPremiumToProtocol: _flashLoanPremiumToProtocol,\n      flashLoanPremiumTotal: _flashLoanPremiumTotal,\n      maxStableRateBorrowSizePercent: _maxStableRateBorrowSizePercent,\n      reservesCount: _reservesCount,\n      addressesProvider: address(ADDRESSES_PROVIDER),\n      userEModeCategory: _usersEModeCategory[onBehalfOf],\n      isAuthorizedFlashBorrower: IACLManager(ADDRESSES_PROVIDER.getACLManager()).isFlashBorrower(\n        msg.sender\n      )\n    });\n\n    FlashLoanLogic.executeFlashLoan(\n      _reserves,\n      _reservesList,\n      _eModeCategories,\n      _usersConfig[onBehalfOf],\n      flashParams\n    );\n  }\n\n  /// @inheritdoc IPool\n  function flashLoanSimple(\n    address receiverAddress,\n    address asset,\n    uint256 amount,\n    bytes calldata params,\n    uint16 referralCode\n  ) public virtual override {\n    DataTypes.FlashloanSimpleParams memory flashParams = DataTypes.FlashloanSimpleParams({\n      receiverAddress: receiverAddress,\n      asset: asset,\n      amount: amount,\n      params: params,\n      referralCode: referralCode,\n      flashLoanPremiumToProtocol: _flashLoanPremiumToProtocol,\n      flashLoanPremiumTotal: _flashLoanPremiumTotal\n    });\n    FlashLoanLogic.executeFlashLoanSimple(_reserves[asset], flashParams);\n  }\n\n  /// @inheritdoc IPool\n  function mintToTreasury(address[] calldata assets) external virtual override {\n    PoolLogic.executeMintToTreasury(_reserves, assets);\n  }\n\n  /// @inheritdoc IPool\n  function getReserveData(\n    address asset\n  ) external view virtual override returns (DataTypes.ReserveData memory) {\n    return _reserves[asset];\n  }\n\n  /// @inheritdoc IPool\n  function getUserAccountData(\n    address user\n  )\n    external\n    view\n    virtual\n    override\n    returns (\n      uint256 totalCollateralBase,\n      uint256 totalDebtBase,\n      uint256 availableBorrowsBase,\n      uint256 currentLiquidationThreshold,\n      uint256 ltv,\n      uint256 healthFactor\n    )\n  {\n    return\n      PoolLogic.executeGetUserAccountData(\n        _reserves,\n        _reservesList,\n        _eModeCategories,\n        DataTypes.CalculateUserAccountDataParams({\n          userConfig: _usersConfig[user],\n          reservesCount: _reservesCount,\n          user: user,\n          oracle: ADDRESSES_PROVIDER.getPriceOracle(),\n          userEModeCategory: _usersEModeCategory[user]\n        })\n      );\n  }\n\n  /// @inheritdoc IPool\n  function getConfiguration(\n    address asset\n  ) external view virtual override returns (DataTypes.ReserveConfigurationMap memory) {\n    return _reserves[asset].configuration;\n  }\n\n  /// @inheritdoc IPool\n  function getUserConfiguration(\n    address user\n  ) external view virtual override returns (DataTypes.UserConfigurationMap memory) {\n    return _usersConfig[user];\n  }\n\n  /// @inheritdoc IPool\n  function getReserveNormalizedIncome(\n    address asset\n  ) external view virtual override returns (uint256) {\n    return _reserves[asset].getNormalizedIncome();\n  }\n\n  /// @inheritdoc IPool\n  function getReserveNormalizedVariableDebt(\n    address asset\n  ) external view virtual override returns (uint256) {\n    return _reserves[asset].getNormalizedDebt();\n  }\n\n  /// @inheritdoc IPool\n  function getReservesList() external view virtual override returns (address[] memory) {\n    uint256 reservesListCount = _reservesCount;\n    uint256 droppedReservesCount = 0;\n    address[] memory reservesList = new address[](reservesListCount);\n\n    for (uint256 i = 0; i < reservesListCount; i++) {\n      if (_reservesList[i] != address(0)) {\n        reservesList[i - droppedReservesCount] = _reservesList[i];\n      } else {\n        droppedReservesCount++;\n      }\n    }\n\n    // Reduces the length of the reserves array by `droppedReservesCount`\n    assembly {\n      mstore(reservesList, sub(reservesListCount, droppedReservesCount))\n    }\n    return reservesList;\n  }\n\n  /// @inheritdoc IPool\n  function getReserveAddressById(uint16 id) external view returns (address) {\n    return _reservesList[id];\n  }\n\n  /// @inheritdoc IPool\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() public view virtual override returns (uint256) {\n    return _maxStableRateBorrowSizePercent;\n  }\n\n  /// @inheritdoc IPool\n  function BRIDGE_PROTOCOL_FEE() public view virtual override returns (uint256) {\n    return _bridgeProtocolFee;\n  }\n\n  /// @inheritdoc IPool\n  function FLASHLOAN_PREMIUM_TOTAL() public view virtual override returns (uint128) {\n    return _flashLoanPremiumTotal;\n  }\n\n  /// @inheritdoc IPool\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() public view virtual override returns (uint128) {\n    return _flashLoanPremiumToProtocol;\n  }\n\n  /// @inheritdoc IPool\n  function MAX_NUMBER_RESERVES() public view virtual override returns (uint16) {\n    return ReserveConfiguration.MAX_RESERVES_COUNT;\n  }\n\n  /// @inheritdoc IPool\n  function finalizeTransfer(\n    address asset,\n    address from,\n    address to,\n    uint256 amount,\n    uint256 balanceFromBefore,\n    uint256 balanceToBefore\n  ) external virtual override {\n    require(msg.sender == _reserves[asset].aTokenAddress, Errors.CALLER_NOT_ATOKEN);\n    SupplyLogic.executeFinalizeTransfer(\n      _reserves,\n      _reservesList,\n      _eModeCategories,\n      _usersConfig,\n      DataTypes.FinalizeTransferParams({\n        asset: asset,\n        from: from,\n        to: to,\n        amount: amount,\n        balanceFromBefore: balanceFromBefore,\n        balanceToBefore: balanceToBefore,\n        reservesCount: _reservesCount,\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\n        fromEModeCategory: _usersEModeCategory[from]\n      })\n    );\n  }\n\n  /// @inheritdoc IPool\n  function initReserve(\n    address asset,\n    address aTokenAddress,\n    address stableDebtAddress,\n    address variableDebtAddress,\n    address interestRateStrategyAddress\n  ) external virtual override onlyPoolConfigurator {\n    if (\n      PoolLogic.executeInitReserve(\n        _reserves,\n        _reservesList,\n        DataTypes.InitReserveParams({\n          asset: asset,\n          aTokenAddress: aTokenAddress,\n          stableDebtAddress: stableDebtAddress,\n          variableDebtAddress: variableDebtAddress,\n          interestRateStrategyAddress: interestRateStrategyAddress,\n          reservesCount: _reservesCount,\n          maxNumberReserves: MAX_NUMBER_RESERVES()\n        })\n      )\n    ) {\n      _reservesCount++;\n    }\n  }\n\n  /// @inheritdoc IPool\n  function dropReserve(address asset) external virtual override onlyPoolConfigurator {\n    PoolLogic.executeDropReserve(_reserves, _reservesList, asset);\n  }\n\n  /// @inheritdoc IPool\n  function setReserveInterestRateStrategyAddress(\n    address asset,\n    address rateStrategyAddress\n  ) external virtual override onlyPoolConfigurator {\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\n    require(_reserves[asset].id != 0 || _reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\n    _reserves[asset].interestRateStrategyAddress = rateStrategyAddress;\n  }\n\n  /// @inheritdoc IPool\n  function setConfiguration(\n    address asset,\n    DataTypes.ReserveConfigurationMap calldata configuration\n  ) external virtual override onlyPoolConfigurator {\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\n    require(_reserves[asset].id != 0 || _reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\n    _reserves[asset].configuration = configuration;\n  }\n\n  /// @inheritdoc IPool\n  function updateBridgeProtocolFee(\n    uint256 protocolFee\n  ) external virtual override onlyPoolConfigurator {\n    _bridgeProtocolFee = protocolFee;\n  }\n\n  /// @inheritdoc IPool\n  function updateFlashloanPremiums(\n    uint128 flashLoanPremiumTotal,\n    uint128 flashLoanPremiumToProtocol\n  ) external virtual override onlyPoolConfigurator {\n    _flashLoanPremiumTotal = flashLoanPremiumTotal;\n    _flashLoanPremiumToProtocol = flashLoanPremiumToProtocol;\n  }\n\n  /// @inheritdoc IPool\n  function configureEModeCategory(\n    uint8 id,\n    DataTypes.EModeCategory memory category\n  ) external virtual override onlyPoolConfigurator {\n    // category 0 is reserved for volatile heterogeneous assets and it's always disabled\n    require(id != 0, Errors.EMODE_CATEGORY_RESERVED);\n    _eModeCategories[id] = category;\n  }\n\n  /// @inheritdoc IPool\n  function getEModeCategoryData(\n    uint8 id\n  ) external view virtual override returns (DataTypes.EModeCategory memory) {\n    return _eModeCategories[id];\n  }\n\n  /// @inheritdoc IPool\n  function setUserEMode(uint8 categoryId) external virtual override {\n    EModeLogic.executeSetUserEMode(\n      _reserves,\n      _reservesList,\n      _eModeCategories,\n      _usersEModeCategory,\n      _usersConfig[msg.sender],\n      DataTypes.ExecuteSetUserEModeParams({\n        reservesCount: _reservesCount,\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\n        categoryId: categoryId\n      })\n    );\n  }\n\n  /// @inheritdoc IPool\n  function getUserEMode(address user) external view virtual override returns (uint256) {\n    return _usersEModeCategory[user];\n  }\n\n  /// @inheritdoc IPool\n  function resetIsolationModeTotalDebt(\n    address asset\n  ) external virtual override onlyPoolConfigurator {\n    PoolLogic.executeResetIsolationModeTotalDebt(_reserves, asset);\n  }\n\n  /// @inheritdoc IPool\n  function rescueTokens(\n    address token,\n    address to,\n    uint256 amount\n  ) external virtual override onlyPoolAdmin {\n    PoolLogic.executeRescueTokens(token, to, amount);\n  }\n\n  /// @inheritdoc IPool\n  /// @dev Deprecated: maintained for compatibility purposes\n  function deposit(\n    address asset,\n    uint256 amount,\n    address onBehalfOf,\n    uint16 referralCode\n  ) external virtual override {\n    SupplyLogic.executeSupply(\n      _reserves,\n      _reservesList,\n      _usersConfig[onBehalfOf],\n      DataTypes.ExecuteSupplyParams({\n        asset: asset,\n        amount: amount,\n        onBehalfOf: onBehalfOf,\n        referralCode: referralCode\n      })\n    );\n  }\n}\n"},"@aave/core-v3/contracts/protocol/pool/PoolConfigurator.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\nimport {Errors} from '../libraries/helpers/Errors.sol';\nimport {PercentageMath} from '../libraries/math/PercentageMath.sol';\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\nimport {ConfiguratorLogic} from '../libraries/logic/ConfiguratorLogic.sol';\nimport {ConfiguratorInputTypes} from '../libraries/types/ConfiguratorInputTypes.sol';\nimport {IPoolConfigurator} from '../../interfaces/IPoolConfigurator.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\nimport {IACLManager} from '../../interfaces/IACLManager.sol';\nimport {IPoolDataProvider} from '../../interfaces/IPoolDataProvider.sol';\n\n/**\n * @title PoolConfigurator\n * @author Aave\n * @dev Implements the configuration methods for the Aave protocol\n */\ncontract PoolConfigurator is VersionedInitializable, IPoolConfigurator {\n  using PercentageMath for uint256;\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n\n  IPoolAddressesProvider internal _addressesProvider;\n  IPool internal _pool;\n\n  /**\n   * @dev Only pool admin can call functions marked by this modifier.\n   */\n  modifier onlyPoolAdmin() {\n    _onlyPoolAdmin();\n    _;\n  }\n\n  /**\n   * @dev Only emergency admin can call functions marked by this modifier.\n   */\n  modifier onlyEmergencyAdmin() {\n    _onlyEmergencyAdmin();\n    _;\n  }\n\n  /**\n   * @dev Only emergency or pool admin can call functions marked by this modifier.\n   */\n  modifier onlyEmergencyOrPoolAdmin() {\n    _onlyPoolOrEmergencyAdmin();\n    _;\n  }\n\n  /**\n   * @dev Only asset listing or pool admin can call functions marked by this modifier.\n   */\n  modifier onlyAssetListingOrPoolAdmins() {\n    _onlyAssetListingOrPoolAdmins();\n    _;\n  }\n\n  /**\n   * @dev Only risk or pool admin can call functions marked by this modifier.\n   */\n  modifier onlyRiskOrPoolAdmins() {\n    _onlyRiskOrPoolAdmins();\n    _;\n  }\n\n  uint256 public constant CONFIGURATOR_REVISION = 0x1;\n\n  /// @inheritdoc VersionedInitializable\n  function getRevision() internal pure virtual override returns (uint256) {\n    return CONFIGURATOR_REVISION;\n  }\n\n  function initialize(IPoolAddressesProvider provider) public initializer {\n    _addressesProvider = provider;\n    _pool = IPool(_addressesProvider.getPool());\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function initReserves(\n    ConfiguratorInputTypes.InitReserveInput[] calldata input\n  ) external override onlyAssetListingOrPoolAdmins {\n    IPool cachedPool = _pool;\n    for (uint256 i = 0; i < input.length; i++) {\n      ConfiguratorLogic.executeInitReserve(cachedPool, input[i]);\n    }\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function dropReserve(address asset) external override onlyPoolAdmin {\n    _pool.dropReserve(asset);\n    emit ReserveDropped(asset);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function updateAToken(\n    ConfiguratorInputTypes.UpdateATokenInput calldata input\n  ) external override onlyPoolAdmin {\n    ConfiguratorLogic.executeUpdateAToken(_pool, input);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function updateStableDebtToken(\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\n  ) external override onlyPoolAdmin {\n    ConfiguratorLogic.executeUpdateStableDebtToken(_pool, input);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function updateVariableDebtToken(\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\n  ) external override onlyPoolAdmin {\n    ConfiguratorLogic.executeUpdateVariableDebtToken(_pool, input);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setReserveBorrowing(address asset, bool enabled) external override onlyRiskOrPoolAdmins {\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n    if (!enabled) {\n      require(!currentConfig.getStableRateBorrowingEnabled(), Errors.STABLE_BORROWING_ENABLED);\n    }\n    currentConfig.setBorrowingEnabled(enabled);\n    _pool.setConfiguration(asset, currentConfig);\n    emit ReserveBorrowing(asset, enabled);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function configureReserveAsCollateral(\n    address asset,\n    uint256 ltv,\n    uint256 liquidationThreshold,\n    uint256 liquidationBonus\n  ) external override onlyRiskOrPoolAdmins {\n    //validation of the parameters: the LTV can\n    //only be lower or equal than the liquidation threshold\n    //(otherwise a loan against the asset would cause instantaneous liquidation)\n    require(ltv <= liquidationThreshold, Errors.INVALID_RESERVE_PARAMS);\n\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n\n    if (liquidationThreshold != 0) {\n      //liquidation bonus must be bigger than 100.00%, otherwise the liquidator would receive less\n      //collateral than needed to cover the debt\n      require(liquidationBonus > PercentageMath.PERCENTAGE_FACTOR, Errors.INVALID_RESERVE_PARAMS);\n\n      //if threshold * bonus is less than PERCENTAGE_FACTOR, it's guaranteed that at the moment\n      //a loan is taken there is enough collateral available to cover the liquidation bonus\n      require(\n        liquidationThreshold.percentMul(liquidationBonus) <= PercentageMath.PERCENTAGE_FACTOR,\n        Errors.INVALID_RESERVE_PARAMS\n      );\n    } else {\n      require(liquidationBonus == 0, Errors.INVALID_RESERVE_PARAMS);\n      //if the liquidation threshold is being set to 0,\n      // the reserve is being disabled as collateral. To do so,\n      //we need to ensure no liquidity is supplied\n      _checkNoSuppliers(asset);\n    }\n\n    currentConfig.setLtv(ltv);\n    currentConfig.setLiquidationThreshold(liquidationThreshold);\n    currentConfig.setLiquidationBonus(liquidationBonus);\n\n    _pool.setConfiguration(asset, currentConfig);\n\n    emit CollateralConfigurationChanged(asset, ltv, liquidationThreshold, liquidationBonus);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setReserveStableRateBorrowing(\n    address asset,\n    bool enabled\n  ) external override onlyRiskOrPoolAdmins {\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n    if (enabled) {\n      require(currentConfig.getBorrowingEnabled(), Errors.BORROWING_NOT_ENABLED);\n    }\n    currentConfig.setStableRateBorrowingEnabled(enabled);\n    _pool.setConfiguration(asset, currentConfig);\n    emit ReserveStableRateBorrowing(asset, enabled);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setReserveFlashLoaning(\n    address asset,\n    bool enabled\n  ) external override onlyRiskOrPoolAdmins {\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n\n    currentConfig.setFlashLoanEnabled(enabled);\n    _pool.setConfiguration(asset, currentConfig);\n    emit ReserveFlashLoaning(asset, enabled);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setReserveActive(address asset, bool active) external override onlyPoolAdmin {\n    if (!active) _checkNoSuppliers(asset);\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n    currentConfig.setActive(active);\n    _pool.setConfiguration(asset, currentConfig);\n    emit ReserveActive(asset, active);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setReserveFreeze(address asset, bool freeze) external override onlyRiskOrPoolAdmins {\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n    currentConfig.setFrozen(freeze);\n    _pool.setConfiguration(asset, currentConfig);\n    emit ReserveFrozen(asset, freeze);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setBorrowableInIsolation(\n    address asset,\n    bool borrowable\n  ) external override onlyRiskOrPoolAdmins {\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n    currentConfig.setBorrowableInIsolation(borrowable);\n    _pool.setConfiguration(asset, currentConfig);\n    emit BorrowableInIsolationChanged(asset, borrowable);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setReservePause(address asset, bool paused) public override onlyEmergencyOrPoolAdmin {\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n    currentConfig.setPaused(paused);\n    _pool.setConfiguration(asset, currentConfig);\n    emit ReservePaused(asset, paused);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setReserveFactor(\n    address asset,\n    uint256 newReserveFactor\n  ) external override onlyRiskOrPoolAdmins {\n    require(newReserveFactor <= PercentageMath.PERCENTAGE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n    uint256 oldReserveFactor = currentConfig.getReserveFactor();\n    currentConfig.setReserveFactor(newReserveFactor);\n    _pool.setConfiguration(asset, currentConfig);\n    emit ReserveFactorChanged(asset, oldReserveFactor, newReserveFactor);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setDebtCeiling(\n    address asset,\n    uint256 newDebtCeiling\n  ) external override onlyRiskOrPoolAdmins {\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n\n    uint256 oldDebtCeiling = currentConfig.getDebtCeiling();\n    if (oldDebtCeiling == 0) {\n      _checkNoSuppliers(asset);\n    }\n    currentConfig.setDebtCeiling(newDebtCeiling);\n    _pool.setConfiguration(asset, currentConfig);\n\n    if (newDebtCeiling == 0) {\n      _pool.resetIsolationModeTotalDebt(asset);\n    }\n\n    emit DebtCeilingChanged(asset, oldDebtCeiling, newDebtCeiling);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setSiloedBorrowing(\n    address asset,\n    bool newSiloed\n  ) external override onlyRiskOrPoolAdmins {\n    if (newSiloed) {\n      _checkNoBorrowers(asset);\n    }\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n\n    bool oldSiloed = currentConfig.getSiloedBorrowing();\n\n    currentConfig.setSiloedBorrowing(newSiloed);\n\n    _pool.setConfiguration(asset, currentConfig);\n\n    emit SiloedBorrowingChanged(asset, oldSiloed, newSiloed);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setBorrowCap(\n    address asset,\n    uint256 newBorrowCap\n  ) external override onlyRiskOrPoolAdmins {\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n    uint256 oldBorrowCap = currentConfig.getBorrowCap();\n    currentConfig.setBorrowCap(newBorrowCap);\n    _pool.setConfiguration(asset, currentConfig);\n    emit BorrowCapChanged(asset, oldBorrowCap, newBorrowCap);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setSupplyCap(\n    address asset,\n    uint256 newSupplyCap\n  ) external override onlyRiskOrPoolAdmins {\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n    uint256 oldSupplyCap = currentConfig.getSupplyCap();\n    currentConfig.setSupplyCap(newSupplyCap);\n    _pool.setConfiguration(asset, currentConfig);\n    emit SupplyCapChanged(asset, oldSupplyCap, newSupplyCap);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setLiquidationProtocolFee(\n    address asset,\n    uint256 newFee\n  ) external override onlyRiskOrPoolAdmins {\n    require(newFee <= PercentageMath.PERCENTAGE_FACTOR, Errors.INVALID_LIQUIDATION_PROTOCOL_FEE);\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n    uint256 oldFee = currentConfig.getLiquidationProtocolFee();\n    currentConfig.setLiquidationProtocolFee(newFee);\n    _pool.setConfiguration(asset, currentConfig);\n    emit LiquidationProtocolFeeChanged(asset, oldFee, newFee);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setEModeCategory(\n    uint8 categoryId,\n    uint16 ltv,\n    uint16 liquidationThreshold,\n    uint16 liquidationBonus,\n    address oracle,\n    string calldata label\n  ) external override onlyRiskOrPoolAdmins {\n    require(ltv != 0, Errors.INVALID_EMODE_CATEGORY_PARAMS);\n    require(liquidationThreshold != 0, Errors.INVALID_EMODE_CATEGORY_PARAMS);\n\n    // validation of the parameters: the LTV can\n    // only be lower or equal than the liquidation threshold\n    // (otherwise a loan against the asset would cause instantaneous liquidation)\n    require(ltv <= liquidationThreshold, Errors.INVALID_EMODE_CATEGORY_PARAMS);\n    require(\n      liquidationBonus > PercentageMath.PERCENTAGE_FACTOR,\n      Errors.INVALID_EMODE_CATEGORY_PARAMS\n    );\n\n    // if threshold * bonus is less than PERCENTAGE_FACTOR, it's guaranteed that at the moment\n    // a loan is taken there is enough collateral available to cover the liquidation bonus\n    require(\n      uint256(liquidationThreshold).percentMul(liquidationBonus) <=\n        PercentageMath.PERCENTAGE_FACTOR,\n      Errors.INVALID_EMODE_CATEGORY_PARAMS\n    );\n\n    address[] memory reserves = _pool.getReservesList();\n    for (uint256 i = 0; i < reserves.length; i++) {\n      DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(reserves[i]);\n      if (categoryId == currentConfig.getEModeCategory()) {\n        require(ltv > currentConfig.getLtv(), Errors.INVALID_EMODE_CATEGORY_PARAMS);\n        require(\n          liquidationThreshold > currentConfig.getLiquidationThreshold(),\n          Errors.INVALID_EMODE_CATEGORY_PARAMS\n        );\n      }\n    }\n\n    _pool.configureEModeCategory(\n      categoryId,\n      DataTypes.EModeCategory({\n        ltv: ltv,\n        liquidationThreshold: liquidationThreshold,\n        liquidationBonus: liquidationBonus,\n        priceSource: oracle,\n        label: label\n      })\n    );\n    emit EModeCategoryAdded(categoryId, ltv, liquidationThreshold, liquidationBonus, oracle, label);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setAssetEModeCategory(\n    address asset,\n    uint8 newCategoryId\n  ) external override onlyRiskOrPoolAdmins {\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n\n    if (newCategoryId != 0) {\n      DataTypes.EModeCategory memory categoryData = _pool.getEModeCategoryData(newCategoryId);\n      require(\n        categoryData.liquidationThreshold > currentConfig.getLiquidationThreshold(),\n        Errors.INVALID_EMODE_CATEGORY_ASSIGNMENT\n      );\n    }\n    uint256 oldCategoryId = currentConfig.getEModeCategory();\n    currentConfig.setEModeCategory(newCategoryId);\n    _pool.setConfiguration(asset, currentConfig);\n    emit EModeAssetCategoryChanged(asset, uint8(oldCategoryId), newCategoryId);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setUnbackedMintCap(\n    address asset,\n    uint256 newUnbackedMintCap\n  ) external override onlyRiskOrPoolAdmins {\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\n    uint256 oldUnbackedMintCap = currentConfig.getUnbackedMintCap();\n    currentConfig.setUnbackedMintCap(newUnbackedMintCap);\n    _pool.setConfiguration(asset, currentConfig);\n    emit UnbackedMintCapChanged(asset, oldUnbackedMintCap, newUnbackedMintCap);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setReserveInterestRateStrategyAddress(\n    address asset,\n    address newRateStrategyAddress\n  ) external override onlyRiskOrPoolAdmins {\n    DataTypes.ReserveData memory reserve = _pool.getReserveData(asset);\n    address oldRateStrategyAddress = reserve.interestRateStrategyAddress;\n    _pool.setReserveInterestRateStrategyAddress(asset, newRateStrategyAddress);\n    emit ReserveInterestRateStrategyChanged(asset, oldRateStrategyAddress, newRateStrategyAddress);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function setPoolPause(bool paused) external override onlyEmergencyAdmin {\n    address[] memory reserves = _pool.getReservesList();\n\n    for (uint256 i = 0; i < reserves.length; i++) {\n      if (reserves[i] != address(0)) {\n        setReservePause(reserves[i], paused);\n      }\n    }\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function updateBridgeProtocolFee(uint256 newBridgeProtocolFee) external override onlyPoolAdmin {\n    require(\n      newBridgeProtocolFee <= PercentageMath.PERCENTAGE_FACTOR,\n      Errors.BRIDGE_PROTOCOL_FEE_INVALID\n    );\n    uint256 oldBridgeProtocolFee = _pool.BRIDGE_PROTOCOL_FEE();\n    _pool.updateBridgeProtocolFee(newBridgeProtocolFee);\n    emit BridgeProtocolFeeUpdated(oldBridgeProtocolFee, newBridgeProtocolFee);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function updateFlashloanPremiumTotal(\n    uint128 newFlashloanPremiumTotal\n  ) external override onlyPoolAdmin {\n    require(\n      newFlashloanPremiumTotal <= PercentageMath.PERCENTAGE_FACTOR,\n      Errors.FLASHLOAN_PREMIUM_INVALID\n    );\n    uint128 oldFlashloanPremiumTotal = _pool.FLASHLOAN_PREMIUM_TOTAL();\n    _pool.updateFlashloanPremiums(newFlashloanPremiumTotal, _pool.FLASHLOAN_PREMIUM_TO_PROTOCOL());\n    emit FlashloanPremiumTotalUpdated(oldFlashloanPremiumTotal, newFlashloanPremiumTotal);\n  }\n\n  /// @inheritdoc IPoolConfigurator\n  function updateFlashloanPremiumToProtocol(\n    uint128 newFlashloanPremiumToProtocol\n  ) external override onlyPoolAdmin {\n    require(\n      newFlashloanPremiumToProtocol <= PercentageMath.PERCENTAGE_FACTOR,\n      Errors.FLASHLOAN_PREMIUM_INVALID\n    );\n    uint128 oldFlashloanPremiumToProtocol = _pool.FLASHLOAN_PREMIUM_TO_PROTOCOL();\n    _pool.updateFlashloanPremiums(_pool.FLASHLOAN_PREMIUM_TOTAL(), newFlashloanPremiumToProtocol);\n    emit FlashloanPremiumToProtocolUpdated(\n      oldFlashloanPremiumToProtocol,\n      newFlashloanPremiumToProtocol\n    );\n  }\n\n  function _checkNoSuppliers(address asset) internal view {\n    (, uint256 accruedToTreasury, uint256 totalATokens, , , , , , , , , ) = IPoolDataProvider(\n      _addressesProvider.getPoolDataProvider()\n    ).getReserveData(asset);\n\n    require(totalATokens == 0 && accruedToTreasury == 0, Errors.RESERVE_LIQUIDITY_NOT_ZERO);\n  }\n\n  function _checkNoBorrowers(address asset) internal view {\n    uint256 totalDebt = IPoolDataProvider(_addressesProvider.getPoolDataProvider()).getTotalDebt(\n      asset\n    );\n    require(totalDebt == 0, Errors.RESERVE_DEBT_NOT_ZERO);\n  }\n\n  function _onlyPoolAdmin() internal view {\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\n  }\n\n  function _onlyEmergencyAdmin() internal view {\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\n    require(aclManager.isEmergencyAdmin(msg.sender), Errors.CALLER_NOT_EMERGENCY_ADMIN);\n  }\n\n  function _onlyPoolOrEmergencyAdmin() internal view {\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\n    require(\n      aclManager.isPoolAdmin(msg.sender) || aclManager.isEmergencyAdmin(msg.sender),\n      Errors.CALLER_NOT_POOL_OR_EMERGENCY_ADMIN\n    );\n  }\n\n  function _onlyAssetListingOrPoolAdmins() internal view {\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\n    require(\n      aclManager.isAssetListingAdmin(msg.sender) || aclManager.isPoolAdmin(msg.sender),\n      Errors.CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN\n    );\n  }\n\n  function _onlyRiskOrPoolAdmins() internal view {\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\n    require(\n      aclManager.isRiskAdmin(msg.sender) || aclManager.isPoolAdmin(msg.sender),\n      Errors.CALLER_NOT_RISK_OR_POOL_ADMIN\n    );\n  }\n}\n"},"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol';\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\nimport {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\n\n/**\n * @title PoolStorage\n * @author Aave\n * @notice Contract used as storage of the Pool contract.\n * @dev It defines the storage layout of the Pool contract.\n */\ncontract PoolStorage {\n  using ReserveLogic for DataTypes.ReserveData;\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n  using UserConfiguration for DataTypes.UserConfigurationMap;\n\n  // Map of reserves and their data (underlyingAssetOfReserve => reserveData)\n  mapping(address => DataTypes.ReserveData) internal _reserves;\n\n  // Map of users address and their configuration data (userAddress => userConfiguration)\n  mapping(address => DataTypes.UserConfigurationMap) internal _usersConfig;\n\n  // List of reserves as a map (reserveId => reserve).\n  // It is structured as a mapping for gas savings reasons, using the reserve id as index\n  mapping(uint256 => address) internal _reservesList;\n\n  // List of eMode categories as a map (eModeCategoryId => eModeCategory).\n  // It is structured as a mapping for gas savings reasons, using the eModeCategoryId as index\n  mapping(uint8 => DataTypes.EModeCategory) internal _eModeCategories;\n\n  // Map of users address and their eMode category (userAddress => eModeCategoryId)\n  mapping(address => uint8) internal _usersEModeCategory;\n\n  // Fee of the protocol bridge, expressed in bps\n  uint256 internal _bridgeProtocolFee;\n\n  // Total FlashLoan Premium, expressed in bps\n  uint128 internal _flashLoanPremiumTotal;\n\n  // FlashLoan premium paid to protocol treasury, expressed in bps\n  uint128 internal _flashLoanPremiumToProtocol;\n\n  // Available liquidity that can be borrowed at once at stable rate, expressed in bps\n  uint64 internal _maxStableRateBorrowSizePercent;\n\n  // Maximum number of active reserves there have been in the protocol. It is the upper bound of the reserves list\n  uint16 internal _reservesCount;\n}\n"},"@aave/core-v3/contracts/protocol/tokenization/AToken.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {GPv2SafeERC20} from '../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {SafeCast} from '../../dependencies/openzeppelin/contracts/SafeCast.sol';\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\nimport {Errors} from '../libraries/helpers/Errors.sol';\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\nimport {IAToken} from '../../interfaces/IAToken.sol';\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\nimport {IInitializableAToken} from '../../interfaces/IInitializableAToken.sol';\nimport {ScaledBalanceTokenBase} from './base/ScaledBalanceTokenBase.sol';\nimport {IncentivizedERC20} from './base/IncentivizedERC20.sol';\nimport {EIP712Base} from './base/EIP712Base.sol';\n\n/**\n * @title Aave ERC20 AToken\n * @author Aave\n * @notice Implementation of the interest bearing token for the Aave protocol\n */\ncontract AToken is VersionedInitializable, ScaledBalanceTokenBase, EIP712Base, IAToken {\n  using WadRayMath for uint256;\n  using SafeCast for uint256;\n  using GPv2SafeERC20 for IERC20;\n\n  bytes32 public constant PERMIT_TYPEHASH =\n    keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');\n\n  uint256 public constant ATOKEN_REVISION = 0x1;\n\n  address internal _treasury;\n  address internal _underlyingAsset;\n\n  /// @inheritdoc VersionedInitializable\n  function getRevision() internal pure virtual override returns (uint256) {\n    return ATOKEN_REVISION;\n  }\n\n  /**\n   * @dev Constructor.\n   * @param pool The address of the Pool contract\n   */\n  constructor(\n    IPool pool\n  ) ScaledBalanceTokenBase(pool, 'ATOKEN_IMPL', 'ATOKEN_IMPL', 0) EIP712Base() {\n    // Intentionally left blank\n  }\n\n  /// @inheritdoc IInitializableAToken\n  function initialize(\n    IPool initializingPool,\n    address treasury,\n    address underlyingAsset,\n    IAaveIncentivesController incentivesController,\n    uint8 aTokenDecimals,\n    string calldata aTokenName,\n    string calldata aTokenSymbol,\n    bytes calldata params\n  ) public virtual override initializer {\n    require(initializingPool == POOL, Errors.POOL_ADDRESSES_DO_NOT_MATCH);\n    _setName(aTokenName);\n    _setSymbol(aTokenSymbol);\n    _setDecimals(aTokenDecimals);\n\n    _treasury = treasury;\n    _underlyingAsset = underlyingAsset;\n    _incentivesController = incentivesController;\n\n    _domainSeparator = _calculateDomainSeparator();\n\n    emit Initialized(\n      underlyingAsset,\n      address(POOL),\n      treasury,\n      address(incentivesController),\n      aTokenDecimals,\n      aTokenName,\n      aTokenSymbol,\n      params\n    );\n  }\n\n  /// @inheritdoc IAToken\n  function mint(\n    address caller,\n    address onBehalfOf,\n    uint256 amount,\n    uint256 index\n  ) external virtual override onlyPool returns (bool) {\n    return _mintScaled(caller, onBehalfOf, amount, index);\n  }\n\n  /// @inheritdoc IAToken\n  function burn(\n    address from,\n    address receiverOfUnderlying,\n    uint256 amount,\n    uint256 index\n  ) external virtual override onlyPool {\n    _burnScaled(from, receiverOfUnderlying, amount, index);\n    if (receiverOfUnderlying != address(this)) {\n      IERC20(_underlyingAsset).safeTransfer(receiverOfUnderlying, amount);\n    }\n  }\n\n  /// @inheritdoc IAToken\n  function mintToTreasury(uint256 amount, uint256 index) external virtual override onlyPool {\n    if (amount == 0) {\n      return;\n    }\n    _mintScaled(address(POOL), _treasury, amount, index);\n  }\n\n  /// @inheritdoc IAToken\n  function transferOnLiquidation(\n    address from,\n    address to,\n    uint256 value\n  ) external virtual override onlyPool {\n    // Being a normal transfer, the Transfer() and BalanceTransfer() are emitted\n    // so no need to emit a specific event here\n    _transfer(from, to, value, false);\n  }\n\n  /// @inheritdoc IERC20\n  function balanceOf(\n    address user\n  ) public view virtual override(IncentivizedERC20, IERC20) returns (uint256) {\n    return super.balanceOf(user).rayMul(POOL.getReserveNormalizedIncome(_underlyingAsset));\n  }\n\n  /// @inheritdoc IERC20\n  function totalSupply() public view virtual override(IncentivizedERC20, IERC20) returns (uint256) {\n    uint256 currentSupplyScaled = super.totalSupply();\n\n    if (currentSupplyScaled == 0) {\n      return 0;\n    }\n\n    return currentSupplyScaled.rayMul(POOL.getReserveNormalizedIncome(_underlyingAsset));\n  }\n\n  /// @inheritdoc IAToken\n  function RESERVE_TREASURY_ADDRESS() external view override returns (address) {\n    return _treasury;\n  }\n\n  /// @inheritdoc IAToken\n  function UNDERLYING_ASSET_ADDRESS() external view override returns (address) {\n    return _underlyingAsset;\n  }\n\n  /// @inheritdoc IAToken\n  function transferUnderlyingTo(address target, uint256 amount) external virtual override onlyPool {\n    IERC20(_underlyingAsset).safeTransfer(target, amount);\n  }\n\n  /// @inheritdoc IAToken\n  function handleRepayment(\n    address user,\n    address onBehalfOf,\n    uint256 amount\n  ) external virtual override onlyPool {\n    // Intentionally left blank\n  }\n\n  /// @inheritdoc IAToken\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 override {\n    require(owner != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\n    //solium-disable-next-line\n    require(block.timestamp <= deadline, Errors.INVALID_EXPIRATION);\n    uint256 currentValidNonce = _nonces[owner];\n    bytes32 digest = keccak256(\n      abi.encodePacked(\n        '\\x19\\x01',\n        DOMAIN_SEPARATOR(),\n        keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, currentValidNonce, deadline))\n      )\n    );\n    require(owner == ecrecover(digest, v, r, s), Errors.INVALID_SIGNATURE);\n    _nonces[owner] = currentValidNonce + 1;\n    _approve(owner, spender, value);\n  }\n\n  /**\n   * @notice Transfers the aTokens between two users. Validates the transfer\n   * (ie checks for valid HF after the transfer) if required\n   * @param from The source address\n   * @param to The destination address\n   * @param amount The amount getting transferred\n   * @param validate True if the transfer needs to be validated, false otherwise\n   */\n  function _transfer(address from, address to, uint256 amount, bool validate) internal virtual {\n    address underlyingAsset = _underlyingAsset;\n\n    uint256 index = POOL.getReserveNormalizedIncome(underlyingAsset);\n\n    uint256 fromBalanceBefore = super.balanceOf(from).rayMul(index);\n    uint256 toBalanceBefore = super.balanceOf(to).rayMul(index);\n\n    super._transfer(from, to, amount, index);\n\n    if (validate) {\n      POOL.finalizeTransfer(underlyingAsset, from, to, amount, fromBalanceBefore, toBalanceBefore);\n    }\n\n    emit BalanceTransfer(from, to, amount.rayDiv(index), index);\n  }\n\n  /**\n   * @notice Overrides the parent _transfer to force validated transfer() and transferFrom()\n   * @param from The source address\n   * @param to The destination address\n   * @param amount The amount getting transferred\n   */\n  function _transfer(address from, address to, uint128 amount) internal virtual override {\n    _transfer(from, to, amount, true);\n  }\n\n  /**\n   * @dev Overrides the base function to fully implement IAToken\n   * @dev see `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation\n   */\n  function DOMAIN_SEPARATOR() public view override(IAToken, EIP712Base) returns (bytes32) {\n    return super.DOMAIN_SEPARATOR();\n  }\n\n  /**\n   * @dev Overrides the base function to fully implement IAToken\n   * @dev see `EIP712Base.nonces()` for more detailed documentation\n   */\n  function nonces(address owner) public view override(IAToken, EIP712Base) returns (uint256) {\n    return super.nonces(owner);\n  }\n\n  /// @inheritdoc EIP712Base\n  function _EIP712BaseId() internal view override returns (string memory) {\n    return name();\n  }\n\n  /// @inheritdoc IAToken\n  function rescueTokens(address token, address to, uint256 amount) external override onlyPoolAdmin {\n    require(token != _underlyingAsset, Errors.UNDERLYING_CANNOT_BE_RESCUED);\n    IERC20(token).safeTransfer(to, amount);\n  }\n}\n"},"@aave/core-v3/contracts/protocol/tokenization/base/DebtTokenBase.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\nimport {Errors} from '../../libraries/helpers/Errors.sol';\nimport {VersionedInitializable} from '../../libraries/aave-upgradeability/VersionedInitializable.sol';\nimport {ICreditDelegationToken} from '../../../interfaces/ICreditDelegationToken.sol';\nimport {EIP712Base} from './EIP712Base.sol';\n\n/**\n * @title DebtTokenBase\n * @author Aave\n * @notice Base contract for different types of debt tokens, like StableDebtToken or VariableDebtToken\n */\nabstract contract DebtTokenBase is\n  VersionedInitializable,\n  EIP712Base,\n  Context,\n  ICreditDelegationToken\n{\n  // Map of borrow allowances (delegator => delegatee => borrowAllowanceAmount)\n  mapping(address => mapping(address => uint256)) internal _borrowAllowances;\n\n  // Credit Delegation Typehash\n  bytes32 public constant DELEGATION_WITH_SIG_TYPEHASH =\n    keccak256('DelegationWithSig(address delegatee,uint256 value,uint256 nonce,uint256 deadline)');\n\n  address internal _underlyingAsset;\n\n  /**\n   * @dev Constructor.\n   */\n  constructor() EIP712Base() {\n    // Intentionally left blank\n  }\n\n  /// @inheritdoc ICreditDelegationToken\n  function approveDelegation(address delegatee, uint256 amount) external override {\n    _approveDelegation(_msgSender(), delegatee, amount);\n  }\n\n  /// @inheritdoc ICreditDelegationToken\n  function delegationWithSig(\n    address delegator,\n    address delegatee,\n    uint256 value,\n    uint256 deadline,\n    uint8 v,\n    bytes32 r,\n    bytes32 s\n  ) external {\n    require(delegator != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\n    //solium-disable-next-line\n    require(block.timestamp <= deadline, Errors.INVALID_EXPIRATION);\n    uint256 currentValidNonce = _nonces[delegator];\n    bytes32 digest = keccak256(\n      abi.encodePacked(\n        '\\x19\\x01',\n        DOMAIN_SEPARATOR(),\n        keccak256(\n          abi.encode(DELEGATION_WITH_SIG_TYPEHASH, delegatee, value, currentValidNonce, deadline)\n        )\n      )\n    );\n    require(delegator == ecrecover(digest, v, r, s), Errors.INVALID_SIGNATURE);\n    _nonces[delegator] = currentValidNonce + 1;\n    _approveDelegation(delegator, delegatee, value);\n  }\n\n  /// @inheritdoc ICreditDelegationToken\n  function borrowAllowance(\n    address fromUser,\n    address toUser\n  ) external view override returns (uint256) {\n    return _borrowAllowances[fromUser][toUser];\n  }\n\n  /**\n   * @notice Updates the borrow allowance of a user on the specific debt token.\n   * @param delegator The address delegating the borrowing power\n   * @param delegatee The address receiving the delegated borrowing power\n   * @param amount The allowance amount being delegated.\n   */\n  function _approveDelegation(address delegator, address delegatee, uint256 amount) internal {\n    _borrowAllowances[delegator][delegatee] = amount;\n    emit BorrowAllowanceDelegated(delegator, delegatee, _underlyingAsset, amount);\n  }\n\n  /**\n   * @notice Decreases the borrow allowance of a user on the specific debt token.\n   * @param delegator The address delegating the borrowing power\n   * @param delegatee The address receiving the delegated borrowing power\n   * @param amount The amount to subtract from the current allowance\n   */\n  function _decreaseBorrowAllowance(address delegator, address delegatee, uint256 amount) internal {\n    uint256 newAllowance = _borrowAllowances[delegator][delegatee] - amount;\n\n    _borrowAllowances[delegator][delegatee] = newAllowance;\n\n    emit BorrowAllowanceDelegated(delegator, delegatee, _underlyingAsset, newAllowance);\n  }\n}\n"},"@aave/core-v3/contracts/protocol/tokenization/base/EIP712Base.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\n/**\n * @title EIP712Base\n * @author Aave\n * @notice Base contract implementation of EIP712.\n */\nabstract contract EIP712Base {\n  bytes public constant EIP712_REVISION = bytes('1');\n  bytes32 internal constant EIP712_DOMAIN =\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\n\n  // Map of address nonces (address => nonce)\n  mapping(address => uint256) internal _nonces;\n\n  bytes32 internal _domainSeparator;\n  uint256 internal immutable _chainId;\n\n  /**\n   * @dev Constructor.\n   */\n  constructor() {\n    _chainId = block.chainid;\n  }\n\n  /**\n   * @notice Get the domain separator for the token\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\n   * @return The domain separator of the token at current chain\n   */\n  function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\n    if (block.chainid == _chainId) {\n      return _domainSeparator;\n    }\n    return _calculateDomainSeparator();\n  }\n\n  /**\n   * @notice Returns the nonce value for address specified as parameter\n   * @param owner The address for which the nonce is being returned\n   * @return The nonce value for the input address`\n   */\n  function nonces(address owner) public view virtual returns (uint256) {\n    return _nonces[owner];\n  }\n\n  /**\n   * @notice Compute the current domain separator\n   * @return The domain separator for the token\n   */\n  function _calculateDomainSeparator() internal view returns (bytes32) {\n    return\n      keccak256(\n        abi.encode(\n          EIP712_DOMAIN,\n          keccak256(bytes(_EIP712BaseId())),\n          keccak256(EIP712_REVISION),\n          block.chainid,\n          address(this)\n        )\n      );\n  }\n\n  /**\n   * @notice Returns the user readable name of signing domain (e.g. token name)\n   * @return The name of the signing domain\n   */\n  function _EIP712BaseId() internal view virtual returns (string memory);\n}\n"},"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\nimport {Errors} from '../../libraries/helpers/Errors.sol';\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\nimport {IPool} from '../../../interfaces/IPool.sol';\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\n\n/**\n * @title IncentivizedERC20\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\n * @notice Basic ERC20 implementation\n */\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\n  using WadRayMath for uint256;\n  using SafeCast for uint256;\n\n  /**\n   * @dev Only pool admin can call functions marked by this modifier.\n   */\n  modifier onlyPoolAdmin() {\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\n    _;\n  }\n\n  /**\n   * @dev Only pool can call functions marked by this modifier.\n   */\n  modifier onlyPool() {\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\n    _;\n  }\n\n  /**\n   * @dev UserState - additionalData is a flexible field.\n   * ATokens and VariableDebtTokens use this field store the index of the\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\n   * this field to store the user's stable rate.\n   */\n  struct UserState {\n    uint128 balance;\n    uint128 additionalData;\n  }\n  // Map of users address and their state data (userAddress => userStateData)\n  mapping(address => UserState) internal _userState;\n\n  // Map of allowances (delegator => delegatee => allowanceAmount)\n  mapping(address => mapping(address => uint256)) private _allowances;\n\n  uint256 internal _totalSupply;\n  string private _name;\n  string private _symbol;\n  uint8 private _decimals;\n  IAaveIncentivesController internal _incentivesController;\n  IPoolAddressesProvider internal immutable _addressesProvider;\n  IPool public immutable POOL;\n\n  /**\n   * @dev Constructor.\n   * @param pool The reference to the main Pool contract\n   * @param name The name of the token\n   * @param symbol The symbol of the token\n   * @param decimals The number of decimals of the token\n   */\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\n    _name = name;\n    _symbol = symbol;\n    _decimals = decimals;\n    POOL = pool;\n  }\n\n  /// @inheritdoc IERC20Detailed\n  function name() public view override returns (string memory) {\n    return _name;\n  }\n\n  /// @inheritdoc IERC20Detailed\n  function symbol() external view override returns (string memory) {\n    return _symbol;\n  }\n\n  /// @inheritdoc IERC20Detailed\n  function decimals() external view override returns (uint8) {\n    return _decimals;\n  }\n\n  /// @inheritdoc IERC20\n  function totalSupply() public view virtual override returns (uint256) {\n    return _totalSupply;\n  }\n\n  /// @inheritdoc IERC20\n  function balanceOf(address account) public view virtual override returns (uint256) {\n    return _userState[account].balance;\n  }\n\n  /**\n   * @notice Returns the address of the Incentives Controller contract\n   * @return The address of the Incentives Controller\n   */\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\n    return _incentivesController;\n  }\n\n  /**\n   * @notice Sets a new Incentives Controller\n   * @param controller the new Incentives controller\n   */\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\n    _incentivesController = controller;\n  }\n\n  /// @inheritdoc IERC20\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\n    uint128 castAmount = amount.toUint128();\n    _transfer(_msgSender(), recipient, castAmount);\n    return true;\n  }\n\n  /// @inheritdoc IERC20\n  function allowance(\n    address owner,\n    address spender\n  ) external view virtual override returns (uint256) {\n    return _allowances[owner][spender];\n  }\n\n  /// @inheritdoc IERC20\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\n    _approve(_msgSender(), spender, amount);\n    return true;\n  }\n\n  /// @inheritdoc IERC20\n  function transferFrom(\n    address sender,\n    address recipient,\n    uint256 amount\n  ) external virtual override returns (bool) {\n    uint128 castAmount = amount.toUint128();\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\n    _transfer(sender, recipient, castAmount);\n    return true;\n  }\n\n  /**\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\n   * @param spender The user allowed to spend on behalf of _msgSender()\n   * @param addedValue The amount being added to the allowance\n   * @return `true`\n   */\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\n    return true;\n  }\n\n  /**\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\n   * @param spender The user allowed to spend on behalf of _msgSender()\n   * @param subtractedValue The amount being subtracted to the allowance\n   * @return `true`\n   */\n  function decreaseAllowance(\n    address spender,\n    uint256 subtractedValue\n  ) external virtual returns (bool) {\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\n    return true;\n  }\n\n  /**\n   * @notice Transfers tokens between two users and apply incentives if defined.\n   * @param sender The source address\n   * @param recipient The destination address\n   * @param amount The amount getting transferred\n   */\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\n    uint128 oldSenderBalance = _userState[sender].balance;\n    _userState[sender].balance = oldSenderBalance - amount;\n    uint128 oldRecipientBalance = _userState[recipient].balance;\n    _userState[recipient].balance = oldRecipientBalance + amount;\n\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\n    if (address(incentivesControllerLocal) != address(0)) {\n      uint256 currentTotalSupply = _totalSupply;\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\n      if (sender != recipient) {\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\n      }\n    }\n  }\n\n  /**\n   * @notice Approve `spender` to use `amount` of `owner`s balance\n   * @param owner The address owning the tokens\n   * @param spender The address approved for spending\n   * @param amount The amount of tokens to approve spending of\n   */\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\n    _allowances[owner][spender] = amount;\n    emit Approval(owner, spender, amount);\n  }\n\n  /**\n   * @notice Update the name of the token\n   * @param newName The new name for the token\n   */\n  function _setName(string memory newName) internal {\n    _name = newName;\n  }\n\n  /**\n   * @notice Update the symbol for the token\n   * @param newSymbol The new symbol for the token\n   */\n  function _setSymbol(string memory newSymbol) internal {\n    _symbol = newSymbol;\n  }\n\n  /**\n   * @notice Update the number of decimals for the token\n   * @param newDecimals The new number of decimals for the token\n   */\n  function _setDecimals(uint8 newDecimals) internal {\n    _decimals = newDecimals;\n  }\n}\n"},"@aave/core-v3/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\nimport {IPool} from '../../../interfaces/IPool.sol';\nimport {IncentivizedERC20} from './IncentivizedERC20.sol';\n\n/**\n * @title MintableIncentivizedERC20\n * @author Aave\n * @notice Implements mint and burn functions for IncentivizedERC20\n */\nabstract contract MintableIncentivizedERC20 is IncentivizedERC20 {\n  /**\n   * @dev Constructor.\n   * @param pool The reference to the main Pool contract\n   * @param name The name of the token\n   * @param symbol The symbol of the token\n   * @param decimals The number of decimals of the token\n   */\n  constructor(\n    IPool pool,\n    string memory name,\n    string memory symbol,\n    uint8 decimals\n  ) IncentivizedERC20(pool, name, symbol, decimals) {\n    // Intentionally left blank\n  }\n\n  /**\n   * @notice Mints tokens to an account and apply incentives if defined\n   * @param account The address receiving tokens\n   * @param amount The amount of tokens to mint\n   */\n  function _mint(address account, uint128 amount) internal virtual {\n    uint256 oldTotalSupply = _totalSupply;\n    _totalSupply = oldTotalSupply + amount;\n\n    uint128 oldAccountBalance = _userState[account].balance;\n    _userState[account].balance = oldAccountBalance + amount;\n\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\n    if (address(incentivesControllerLocal) != address(0)) {\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\n    }\n  }\n\n  /**\n   * @notice Burns tokens from an account and apply incentives if defined\n   * @param account The account whose tokens are burnt\n   * @param amount The amount of tokens to burn\n   */\n  function _burn(address account, uint128 amount) internal virtual {\n    uint256 oldTotalSupply = _totalSupply;\n    _totalSupply = oldTotalSupply - amount;\n\n    uint128 oldAccountBalance = _userState[account].balance;\n    _userState[account].balance = oldAccountBalance - amount;\n\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\n\n    if (address(incentivesControllerLocal) != address(0)) {\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\n    }\n  }\n}\n"},"@aave/core-v3/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\nimport {Errors} from '../../libraries/helpers/Errors.sol';\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\nimport {IPool} from '../../../interfaces/IPool.sol';\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\nimport {MintableIncentivizedERC20} from './MintableIncentivizedERC20.sol';\n\n/**\n * @title ScaledBalanceTokenBase\n * @author Aave\n * @notice Basic ERC20 implementation of scaled balance token\n */\nabstract contract ScaledBalanceTokenBase is MintableIncentivizedERC20, IScaledBalanceToken {\n  using WadRayMath for uint256;\n  using SafeCast for uint256;\n\n  /**\n   * @dev Constructor.\n   * @param pool The reference to the main Pool contract\n   * @param name The name of the token\n   * @param symbol The symbol of the token\n   * @param decimals The number of decimals of the token\n   */\n  constructor(\n    IPool pool,\n    string memory name,\n    string memory symbol,\n    uint8 decimals\n  ) MintableIncentivizedERC20(pool, name, symbol, decimals) {\n    // Intentionally left blank\n  }\n\n  /// @inheritdoc IScaledBalanceToken\n  function scaledBalanceOf(address user) external view override returns (uint256) {\n    return super.balanceOf(user);\n  }\n\n  /// @inheritdoc IScaledBalanceToken\n  function getScaledUserBalanceAndSupply(\n    address user\n  ) external view override returns (uint256, uint256) {\n    return (super.balanceOf(user), super.totalSupply());\n  }\n\n  /// @inheritdoc IScaledBalanceToken\n  function scaledTotalSupply() public view virtual override returns (uint256) {\n    return super.totalSupply();\n  }\n\n  /// @inheritdoc IScaledBalanceToken\n  function getPreviousIndex(address user) external view virtual override returns (uint256) {\n    return _userState[user].additionalData;\n  }\n\n  /**\n   * @notice Implements the basic logic to mint a scaled balance token.\n   * @param caller The address performing the mint\n   * @param onBehalfOf The address of the user that will receive the scaled tokens\n   * @param amount The amount of tokens getting minted\n   * @param index The next liquidity index of the reserve\n   * @return `true` if the the previous balance of the user was 0\n   */\n  function _mintScaled(\n    address caller,\n    address onBehalfOf,\n    uint256 amount,\n    uint256 index\n  ) internal returns (bool) {\n    uint256 amountScaled = amount.rayDiv(index);\n    require(amountScaled != 0, Errors.INVALID_MINT_AMOUNT);\n\n    uint256 scaledBalance = super.balanceOf(onBehalfOf);\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\n      scaledBalance.rayMul(_userState[onBehalfOf].additionalData);\n\n    _userState[onBehalfOf].additionalData = index.toUint128();\n\n    _mint(onBehalfOf, amountScaled.toUint128());\n\n    uint256 amountToMint = amount + balanceIncrease;\n    emit Transfer(address(0), onBehalfOf, amountToMint);\n    emit Mint(caller, onBehalfOf, amountToMint, balanceIncrease, index);\n\n    return (scaledBalance == 0);\n  }\n\n  /**\n   * @notice Implements the basic logic to burn a scaled balance token.\n   * @dev In some instances, a burn transaction will emit a mint event\n   * if the amount to burn is less than the interest that the user accrued\n   * @param user The user which debt is burnt\n   * @param target The address that will receive the underlying, if any\n   * @param amount The amount getting burned\n   * @param index The variable debt index of the reserve\n   */\n  function _burnScaled(address user, address target, uint256 amount, uint256 index) internal {\n    uint256 amountScaled = amount.rayDiv(index);\n    require(amountScaled != 0, Errors.INVALID_BURN_AMOUNT);\n\n    uint256 scaledBalance = super.balanceOf(user);\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\n      scaledBalance.rayMul(_userState[user].additionalData);\n\n    _userState[user].additionalData = index.toUint128();\n\n    _burn(user, amountScaled.toUint128());\n\n    if (balanceIncrease > amount) {\n      uint256 amountToMint = balanceIncrease - amount;\n      emit Transfer(address(0), user, amountToMint);\n      emit Mint(user, user, amountToMint, balanceIncrease, index);\n    } else {\n      uint256 amountToBurn = amount - balanceIncrease;\n      emit Transfer(user, address(0), amountToBurn);\n      emit Burn(user, target, amountToBurn, balanceIncrease, index);\n    }\n  }\n\n  /**\n   * @notice Implements the basic logic to transfer scaled balance tokens between two users\n   * @dev It emits a mint event with the interest accrued per user\n   * @param sender The source address\n   * @param recipient The destination address\n   * @param amount The amount getting transferred\n   * @param index The next liquidity index of the reserve\n   */\n  function _transfer(address sender, address recipient, uint256 amount, uint256 index) internal {\n    uint256 senderScaledBalance = super.balanceOf(sender);\n    uint256 senderBalanceIncrease = senderScaledBalance.rayMul(index) -\n      senderScaledBalance.rayMul(_userState[sender].additionalData);\n\n    uint256 recipientScaledBalance = super.balanceOf(recipient);\n    uint256 recipientBalanceIncrease = recipientScaledBalance.rayMul(index) -\n      recipientScaledBalance.rayMul(_userState[recipient].additionalData);\n\n    _userState[sender].additionalData = index.toUint128();\n    _userState[recipient].additionalData = index.toUint128();\n\n    super._transfer(sender, recipient, amount.rayDiv(index).toUint128());\n\n    if (senderBalanceIncrease > 0) {\n      emit Transfer(address(0), sender, senderBalanceIncrease);\n      emit Mint(_msgSender(), sender, senderBalanceIncrease, senderBalanceIncrease, index);\n    }\n\n    if (sender != recipient && recipientBalanceIncrease > 0) {\n      emit Transfer(address(0), recipient, recipientBalanceIncrease);\n      emit Mint(_msgSender(), recipient, recipientBalanceIncrease, recipientBalanceIncrease, index);\n    }\n\n    emit Transfer(sender, recipient, amount);\n  }\n}\n"},"@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IPool} from '../../interfaces/IPool.sol';\nimport {IDelegationToken} from '../../interfaces/IDelegationToken.sol';\nimport {AToken} from './AToken.sol';\n\n/**\n * @title DelegationAwareAToken\n * @author Aave\n * @notice AToken enabled to delegate voting power of the underlying asset to a different address\n * @dev The underlying asset needs to be compatible with the COMP delegation interface\n */\ncontract DelegationAwareAToken is AToken {\n  /**\n   * @dev Emitted when underlying voting power is delegated\n   * @param delegatee The address of the delegatee\n   */\n  event DelegateUnderlyingTo(address indexed delegatee);\n\n  /**\n   * @dev Constructor.\n   * @param pool The address of the Pool contract\n   */\n  constructor(IPool pool) AToken(pool) {\n    // Intentionally left blank\n  }\n\n  /**\n   * @notice Delegates voting power of the underlying asset to a `delegatee` address\n   * @param delegatee The address that will receive the delegation\n   */\n  function delegateUnderlyingTo(address delegatee) external onlyPoolAdmin {\n    IDelegationToken(_underlyingAsset).delegate(delegatee);\n    emit DelegateUnderlyingTo(delegatee);\n  }\n}\n"},"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\nimport {MathUtils} from '../libraries/math/MathUtils.sol';\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\nimport {Errors} from '../libraries/helpers/Errors.sol';\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\nimport {IInitializableDebtToken} from '../../interfaces/IInitializableDebtToken.sol';\nimport {IStableDebtToken} from '../../interfaces/IStableDebtToken.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\nimport {EIP712Base} from './base/EIP712Base.sol';\nimport {DebtTokenBase} from './base/DebtTokenBase.sol';\nimport {IncentivizedERC20} from './base/IncentivizedERC20.sol';\nimport {SafeCast} from '../../dependencies/openzeppelin/contracts/SafeCast.sol';\n\n/**\n * @title StableDebtToken\n * @author Aave\n * @notice Implements a stable debt token to track the borrowing positions of users\n * at stable rate mode\n * @dev Transfer and approve functionalities are disabled since its a non-transferable token\n */\ncontract StableDebtToken is DebtTokenBase, IncentivizedERC20, IStableDebtToken {\n  using WadRayMath for uint256;\n  using SafeCast for uint256;\n\n  uint256 public constant DEBT_TOKEN_REVISION = 0x1;\n\n  // Map of users address and the timestamp of their last update (userAddress => lastUpdateTimestamp)\n  mapping(address => uint40) internal _timestamps;\n\n  uint128 internal _avgStableRate;\n\n  // Timestamp of the last update of the total supply\n  uint40 internal _totalSupplyTimestamp;\n\n  /**\n   * @dev Constructor.\n   * @param pool The address of the Pool contract\n   */\n  constructor(\n    IPool pool\n  ) DebtTokenBase() IncentivizedERC20(pool, 'STABLE_DEBT_TOKEN_IMPL', 'STABLE_DEBT_TOKEN_IMPL', 0) {\n    // Intentionally left blank\n  }\n\n  /// @inheritdoc IInitializableDebtToken\n  function initialize(\n    IPool initializingPool,\n    address underlyingAsset,\n    IAaveIncentivesController incentivesController,\n    uint8 debtTokenDecimals,\n    string memory debtTokenName,\n    string memory debtTokenSymbol,\n    bytes calldata params\n  ) external override initializer {\n    require(initializingPool == POOL, Errors.POOL_ADDRESSES_DO_NOT_MATCH);\n    _setName(debtTokenName);\n    _setSymbol(debtTokenSymbol);\n    _setDecimals(debtTokenDecimals);\n\n    _underlyingAsset = underlyingAsset;\n    _incentivesController = incentivesController;\n\n    _domainSeparator = _calculateDomainSeparator();\n\n    emit Initialized(\n      underlyingAsset,\n      address(POOL),\n      address(incentivesController),\n      debtTokenDecimals,\n      debtTokenName,\n      debtTokenSymbol,\n      params\n    );\n  }\n\n  /// @inheritdoc VersionedInitializable\n  function getRevision() internal pure virtual override returns (uint256) {\n    return DEBT_TOKEN_REVISION;\n  }\n\n  /// @inheritdoc IStableDebtToken\n  function getAverageStableRate() external view virtual override returns (uint256) {\n    return _avgStableRate;\n  }\n\n  /// @inheritdoc IStableDebtToken\n  function getUserLastUpdated(address user) external view virtual override returns (uint40) {\n    return _timestamps[user];\n  }\n\n  /// @inheritdoc IStableDebtToken\n  function getUserStableRate(address user) external view virtual override returns (uint256) {\n    return _userState[user].additionalData;\n  }\n\n  /// @inheritdoc IERC20\n  function balanceOf(address account) public view virtual override returns (uint256) {\n    uint256 accountBalance = super.balanceOf(account);\n    uint256 stableRate = _userState[account].additionalData;\n    if (accountBalance == 0) {\n      return 0;\n    }\n    uint256 cumulatedInterest = MathUtils.calculateCompoundedInterest(\n      stableRate,\n      _timestamps[account]\n    );\n    return accountBalance.rayMul(cumulatedInterest);\n  }\n\n  struct MintLocalVars {\n    uint256 previousSupply;\n    uint256 nextSupply;\n    uint256 amountInRay;\n    uint256 currentStableRate;\n    uint256 nextStableRate;\n    uint256 currentAvgStableRate;\n  }\n\n  /// @inheritdoc IStableDebtToken\n  function mint(\n    address user,\n    address onBehalfOf,\n    uint256 amount,\n    uint256 rate\n  ) external virtual override onlyPool returns (bool, uint256, uint256) {\n    MintLocalVars memory vars;\n\n    if (user != onBehalfOf) {\n      _decreaseBorrowAllowance(onBehalfOf, user, amount);\n    }\n\n    (, uint256 currentBalance, uint256 balanceIncrease) = _calculateBalanceIncrease(onBehalfOf);\n\n    vars.previousSupply = totalSupply();\n    vars.currentAvgStableRate = _avgStableRate;\n    vars.nextSupply = _totalSupply = vars.previousSupply + amount;\n\n    vars.amountInRay = amount.wadToRay();\n\n    vars.currentStableRate = _userState[onBehalfOf].additionalData;\n    vars.nextStableRate = (vars.currentStableRate.rayMul(currentBalance.wadToRay()) +\n      vars.amountInRay.rayMul(rate)).rayDiv((currentBalance + amount).wadToRay());\n\n    _userState[onBehalfOf].additionalData = vars.nextStableRate.toUint128();\n\n    //solium-disable-next-line\n    _totalSupplyTimestamp = _timestamps[onBehalfOf] = uint40(block.timestamp);\n\n    // Calculates the updated average stable rate\n    vars.currentAvgStableRate = _avgStableRate = (\n      (vars.currentAvgStableRate.rayMul(vars.previousSupply.wadToRay()) +\n        rate.rayMul(vars.amountInRay)).rayDiv(vars.nextSupply.wadToRay())\n    ).toUint128();\n\n    uint256 amountToMint = amount + balanceIncrease;\n    _mint(onBehalfOf, amountToMint, vars.previousSupply);\n\n    emit Transfer(address(0), onBehalfOf, amountToMint);\n    emit Mint(\n      user,\n      onBehalfOf,\n      amountToMint,\n      currentBalance,\n      balanceIncrease,\n      vars.nextStableRate,\n      vars.currentAvgStableRate,\n      vars.nextSupply\n    );\n\n    return (currentBalance == 0, vars.nextSupply, vars.currentAvgStableRate);\n  }\n\n  /// @inheritdoc IStableDebtToken\n  function burn(\n    address from,\n    uint256 amount\n  ) external virtual override onlyPool returns (uint256, uint256) {\n    (, uint256 currentBalance, uint256 balanceIncrease) = _calculateBalanceIncrease(from);\n\n    uint256 previousSupply = totalSupply();\n    uint256 nextAvgStableRate = 0;\n    uint256 nextSupply = 0;\n    uint256 userStableRate = _userState[from].additionalData;\n\n    // Since the total supply and each single user debt accrue separately,\n    // there might be accumulation errors so that the last borrower repaying\n    // might actually try to repay more than the available debt supply.\n    // In this case we simply set the total supply and the avg stable rate to 0\n    if (previousSupply <= amount) {\n      _avgStableRate = 0;\n      _totalSupply = 0;\n    } else {\n      nextSupply = _totalSupply = previousSupply - amount;\n      uint256 firstTerm = uint256(_avgStableRate).rayMul(previousSupply.wadToRay());\n      uint256 secondTerm = userStableRate.rayMul(amount.wadToRay());\n\n      // For the same reason described above, when the last user is repaying it might\n      // happen that user rate * user balance > avg rate * total supply. In that case,\n      // we simply set the avg rate to 0\n      if (secondTerm >= firstTerm) {\n        nextAvgStableRate = _totalSupply = _avgStableRate = 0;\n      } else {\n        nextAvgStableRate = _avgStableRate = (\n          (firstTerm - secondTerm).rayDiv(nextSupply.wadToRay())\n        ).toUint128();\n      }\n    }\n\n    if (amount == currentBalance) {\n      _userState[from].additionalData = 0;\n      _timestamps[from] = 0;\n    } else {\n      //solium-disable-next-line\n      _timestamps[from] = uint40(block.timestamp);\n    }\n    //solium-disable-next-line\n    _totalSupplyTimestamp = uint40(block.timestamp);\n\n    if (balanceIncrease > amount) {\n      uint256 amountToMint = balanceIncrease - amount;\n      _mint(from, amountToMint, previousSupply);\n      emit Transfer(address(0), from, amountToMint);\n      emit Mint(\n        from,\n        from,\n        amountToMint,\n        currentBalance,\n        balanceIncrease,\n        userStableRate,\n        nextAvgStableRate,\n        nextSupply\n      );\n    } else {\n      uint256 amountToBurn = amount - balanceIncrease;\n      _burn(from, amountToBurn, previousSupply);\n      emit Transfer(from, address(0), amountToBurn);\n      emit Burn(from, amountToBurn, currentBalance, balanceIncrease, nextAvgStableRate, nextSupply);\n    }\n\n    return (nextSupply, nextAvgStableRate);\n  }\n\n  /**\n   * @notice Calculates the increase in balance since the last user interaction\n   * @param user The address of the user for which the interest is being accumulated\n   * @return The previous principal balance\n   * @return The new principal balance\n   * @return The balance increase\n   */\n  function _calculateBalanceIncrease(\n    address user\n  ) internal view returns (uint256, uint256, uint256) {\n    uint256 previousPrincipalBalance = super.balanceOf(user);\n\n    if (previousPrincipalBalance == 0) {\n      return (0, 0, 0);\n    }\n\n    uint256 newPrincipalBalance = balanceOf(user);\n\n    return (\n      previousPrincipalBalance,\n      newPrincipalBalance,\n      newPrincipalBalance - previousPrincipalBalance\n    );\n  }\n\n  /// @inheritdoc IStableDebtToken\n  function getSupplyData() external view override returns (uint256, uint256, uint256, uint40) {\n    uint256 avgRate = _avgStableRate;\n    return (super.totalSupply(), _calcTotalSupply(avgRate), avgRate, _totalSupplyTimestamp);\n  }\n\n  /// @inheritdoc IStableDebtToken\n  function getTotalSupplyAndAvgRate() external view override returns (uint256, uint256) {\n    uint256 avgRate = _avgStableRate;\n    return (_calcTotalSupply(avgRate), avgRate);\n  }\n\n  /// @inheritdoc IERC20\n  function totalSupply() public view virtual override returns (uint256) {\n    return _calcTotalSupply(_avgStableRate);\n  }\n\n  /// @inheritdoc IStableDebtToken\n  function getTotalSupplyLastUpdated() external view override returns (uint40) {\n    return _totalSupplyTimestamp;\n  }\n\n  /// @inheritdoc IStableDebtToken\n  function principalBalanceOf(address user) external view virtual override returns (uint256) {\n    return super.balanceOf(user);\n  }\n\n  /// @inheritdoc IStableDebtToken\n  function UNDERLYING_ASSET_ADDRESS() external view override returns (address) {\n    return _underlyingAsset;\n  }\n\n  /**\n   * @notice Calculates the total supply\n   * @param avgRate The average rate at which the total supply increases\n   * @return The debt balance of the user since the last burn/mint action\n   */\n  function _calcTotalSupply(uint256 avgRate) internal view returns (uint256) {\n    uint256 principalSupply = super.totalSupply();\n\n    if (principalSupply == 0) {\n      return 0;\n    }\n\n    uint256 cumulatedInterest = MathUtils.calculateCompoundedInterest(\n      avgRate,\n      _totalSupplyTimestamp\n    );\n\n    return principalSupply.rayMul(cumulatedInterest);\n  }\n\n  /**\n   * @notice Mints stable debt tokens to a user\n   * @param account The account receiving the debt tokens\n   * @param amount The amount being minted\n   * @param oldTotalSupply The total supply before the minting event\n   */\n  function _mint(address account, uint256 amount, uint256 oldTotalSupply) internal {\n    uint128 castAmount = amount.toUint128();\n    uint128 oldAccountBalance = _userState[account].balance;\n    _userState[account].balance = oldAccountBalance + castAmount;\n\n    if (address(_incentivesController) != address(0)) {\n      _incentivesController.handleAction(account, oldTotalSupply, oldAccountBalance);\n    }\n  }\n\n  /**\n   * @notice Burns stable debt tokens of a user\n   * @param account The user getting his debt burned\n   * @param amount The amount being burned\n   * @param oldTotalSupply The total supply before the burning event\n   */\n  function _burn(address account, uint256 amount, uint256 oldTotalSupply) internal {\n    uint128 castAmount = amount.toUint128();\n    uint128 oldAccountBalance = _userState[account].balance;\n    _userState[account].balance = oldAccountBalance - castAmount;\n\n    if (address(_incentivesController) != address(0)) {\n      _incentivesController.handleAction(account, oldTotalSupply, oldAccountBalance);\n    }\n  }\n\n  /// @inheritdoc EIP712Base\n  function _EIP712BaseId() internal view override returns (string memory) {\n    return name();\n  }\n\n  /**\n   * @dev Being non transferrable, the debt token does not implement any of the\n   * standard ERC20 functions for transfer and allowance.\n   */\n  function transfer(address, uint256) external virtual override returns (bool) {\n    revert(Errors.OPERATION_NOT_SUPPORTED);\n  }\n\n  function allowance(address, address) external view virtual override returns (uint256) {\n    revert(Errors.OPERATION_NOT_SUPPORTED);\n  }\n\n  function approve(address, uint256) external virtual override returns (bool) {\n    revert(Errors.OPERATION_NOT_SUPPORTED);\n  }\n\n  function transferFrom(address, address, uint256) external virtual override returns (bool) {\n    revert(Errors.OPERATION_NOT_SUPPORTED);\n  }\n\n  function increaseAllowance(address, uint256) external virtual override returns (bool) {\n    revert(Errors.OPERATION_NOT_SUPPORTED);\n  }\n\n  function decreaseAllowance(address, uint256) external virtual override returns (bool) {\n    revert(Errors.OPERATION_NOT_SUPPORTED);\n  }\n}\n"},"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\nimport {SafeCast} from '../../dependencies/openzeppelin/contracts/SafeCast.sol';\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\nimport {Errors} from '../libraries/helpers/Errors.sol';\nimport {IPool} from '../../interfaces/IPool.sol';\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\nimport {IInitializableDebtToken} from '../../interfaces/IInitializableDebtToken.sol';\nimport {IVariableDebtToken} from '../../interfaces/IVariableDebtToken.sol';\nimport {EIP712Base} from './base/EIP712Base.sol';\nimport {DebtTokenBase} from './base/DebtTokenBase.sol';\nimport {ScaledBalanceTokenBase} from './base/ScaledBalanceTokenBase.sol';\n\n/**\n * @title VariableDebtToken\n * @author Aave\n * @notice Implements a variable debt token to track the borrowing positions of users\n * at variable rate mode\n * @dev Transfer and approve functionalities are disabled since its a non-transferable token\n */\ncontract VariableDebtToken is DebtTokenBase, ScaledBalanceTokenBase, IVariableDebtToken {\n  using WadRayMath for uint256;\n  using SafeCast for uint256;\n\n  uint256 public constant DEBT_TOKEN_REVISION = 0x1;\n\n  /**\n   * @dev Constructor.\n   * @param pool The address of the Pool contract\n   */\n  constructor(\n    IPool pool\n  )\n    DebtTokenBase()\n    ScaledBalanceTokenBase(pool, 'VARIABLE_DEBT_TOKEN_IMPL', 'VARIABLE_DEBT_TOKEN_IMPL', 0)\n  {\n    // Intentionally left blank\n  }\n\n  /// @inheritdoc IInitializableDebtToken\n  function initialize(\n    IPool initializingPool,\n    address underlyingAsset,\n    IAaveIncentivesController incentivesController,\n    uint8 debtTokenDecimals,\n    string memory debtTokenName,\n    string memory debtTokenSymbol,\n    bytes calldata params\n  ) external override initializer {\n    require(initializingPool == POOL, Errors.POOL_ADDRESSES_DO_NOT_MATCH);\n    _setName(debtTokenName);\n    _setSymbol(debtTokenSymbol);\n    _setDecimals(debtTokenDecimals);\n\n    _underlyingAsset = underlyingAsset;\n    _incentivesController = incentivesController;\n\n    _domainSeparator = _calculateDomainSeparator();\n\n    emit Initialized(\n      underlyingAsset,\n      address(POOL),\n      address(incentivesController),\n      debtTokenDecimals,\n      debtTokenName,\n      debtTokenSymbol,\n      params\n    );\n  }\n\n  /// @inheritdoc VersionedInitializable\n  function getRevision() internal pure virtual override returns (uint256) {\n    return DEBT_TOKEN_REVISION;\n  }\n\n  /// @inheritdoc IERC20\n  function balanceOf(address user) public view virtual override returns (uint256) {\n    uint256 scaledBalance = super.balanceOf(user);\n\n    if (scaledBalance == 0) {\n      return 0;\n    }\n\n    return scaledBalance.rayMul(POOL.getReserveNormalizedVariableDebt(_underlyingAsset));\n  }\n\n  /// @inheritdoc IVariableDebtToken\n  function mint(\n    address user,\n    address onBehalfOf,\n    uint256 amount,\n    uint256 index\n  ) external virtual override onlyPool returns (bool, uint256) {\n    if (user != onBehalfOf) {\n      _decreaseBorrowAllowance(onBehalfOf, user, amount);\n    }\n    return (_mintScaled(user, onBehalfOf, amount, index), scaledTotalSupply());\n  }\n\n  /// @inheritdoc IVariableDebtToken\n  function burn(\n    address from,\n    uint256 amount,\n    uint256 index\n  ) external virtual override onlyPool returns (uint256) {\n    _burnScaled(from, address(0), amount, index);\n    return scaledTotalSupply();\n  }\n\n  /// @inheritdoc IERC20\n  function totalSupply() public view virtual override returns (uint256) {\n    return super.totalSupply().rayMul(POOL.getReserveNormalizedVariableDebt(_underlyingAsset));\n  }\n\n  /// @inheritdoc EIP712Base\n  function _EIP712BaseId() internal view override returns (string memory) {\n    return name();\n  }\n\n  /**\n   * @dev Being non transferrable, the debt token does not implement any of the\n   * standard ERC20 functions for transfer and allowance.\n   */\n  function transfer(address, uint256) external virtual override returns (bool) {\n    revert(Errors.OPERATION_NOT_SUPPORTED);\n  }\n\n  function allowance(address, address) external view virtual override returns (uint256) {\n    revert(Errors.OPERATION_NOT_SUPPORTED);\n  }\n\n  function approve(address, uint256) external virtual override returns (bool) {\n    revert(Errors.OPERATION_NOT_SUPPORTED);\n  }\n\n  function transferFrom(address, address, uint256) external virtual override returns (bool) {\n    revert(Errors.OPERATION_NOT_SUPPORTED);\n  }\n\n  function increaseAllowance(address, uint256) external virtual override returns (bool) {\n    revert(Errors.OPERATION_NOT_SUPPORTED);\n  }\n\n  function decreaseAllowance(address, uint256) external virtual override returns (bool) {\n    revert(Errors.OPERATION_NOT_SUPPORTED);\n  }\n\n  /// @inheritdoc IVariableDebtToken\n  function UNDERLYING_ASSET_ADDRESS() external view override returns (address) {\n    return _underlyingAsset;\n  }\n}\n"},"contracts/adapters/paraswap/BaseParaSwapAdapter.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {DataTypes} from '@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol';\nimport {FlashLoanSimpleReceiverBase} from '@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol';\nimport {GPv2SafeERC20} from '@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\nimport {IERC20WithPermit} from '@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol';\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\nimport {IPriceOracleGetter} from '@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol';\nimport {SafeMath} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol';\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\n\n/**\n * @title BaseParaSwapAdapter\n * @notice Utility functions for adapters using ParaSwap\n * @author Jason Raymond Bell\n */\nabstract contract BaseParaSwapAdapter is FlashLoanSimpleReceiverBase, Ownable {\n  using SafeMath for uint256;\n  using GPv2SafeERC20 for IERC20;\n  using GPv2SafeERC20 for IERC20Detailed;\n  using GPv2SafeERC20 for IERC20WithPermit;\n\n  struct PermitSignature {\n    uint256 amount;\n    uint256 deadline;\n    uint8 v;\n    bytes32 r;\n    bytes32 s;\n  }\n\n  // Max slippage percent allowed\n  uint256 public constant MAX_SLIPPAGE_PERCENT = 3000; // 30%\n\n  IPriceOracleGetter public immutable ORACLE;\n\n  event Swapped(\n    address indexed fromAsset,\n    address indexed toAsset,\n    uint256 fromAmount,\n    uint256 receivedAmount\n  );\n  event Bought(\n    address indexed fromAsset,\n    address indexed toAsset,\n    uint256 amountSold,\n    uint256 receivedAmount\n  );\n\n  constructor(\n    IPoolAddressesProvider addressesProvider\n  ) FlashLoanSimpleReceiverBase(addressesProvider) {\n    ORACLE = IPriceOracleGetter(addressesProvider.getPriceOracle());\n  }\n\n  /**\n   * @dev Get the price of the asset from the oracle denominated in eth\n   * @param asset address\n   * @return eth price for the asset\n   */\n  function _getPrice(address asset) internal view returns (uint256) {\n    return ORACLE.getAssetPrice(asset);\n  }\n\n  /**\n   * @dev Get the decimals of an asset\n   * @return number of decimals of the asset\n   */\n  function _getDecimals(IERC20Detailed asset) internal view returns (uint8) {\n    uint8 decimals = asset.decimals();\n    // Ensure 10**decimals won't overflow a uint256\n    require(decimals <= 77, 'TOO_MANY_DECIMALS_ON_TOKEN');\n    return decimals;\n  }\n\n  /**\n   * @dev Get the aToken associated to the asset\n   * @return address of the aToken\n   */\n  function _getReserveData(address asset) internal view returns (DataTypes.ReserveData memory) {\n    return POOL.getReserveData(asset);\n  }\n\n  function _pullATokenAndWithdraw(\n    address reserve,\n    address user,\n    uint256 amount,\n    PermitSignature memory permitSignature\n  ) internal {\n    IERC20WithPermit reserveAToken = IERC20WithPermit(\n      _getReserveData(address(reserve)).aTokenAddress\n    );\n    _pullATokenAndWithdraw(reserve, reserveAToken, user, amount, permitSignature);\n  }\n\n  /**\n   * @dev Pull the ATokens from the user\n   * @param reserve address of the asset\n   * @param reserveAToken address of the aToken of the reserve\n   * @param user address\n   * @param amount of tokens to be transferred to the contract\n   * @param permitSignature struct containing the permit signature\n   */\n  function _pullATokenAndWithdraw(\n    address reserve,\n    IERC20WithPermit reserveAToken,\n    address user,\n    uint256 amount,\n    PermitSignature memory permitSignature\n  ) internal {\n    // If deadline is set to zero, assume there is no signature for permit\n    if (permitSignature.deadline != 0) {\n      reserveAToken.permit(\n        user,\n        address(this),\n        permitSignature.amount,\n        permitSignature.deadline,\n        permitSignature.v,\n        permitSignature.r,\n        permitSignature.s\n      );\n    }\n\n    // transfer from user to adapter\n    reserveAToken.safeTransferFrom(user, address(this), amount);\n\n    // withdraw reserve\n    require(POOL.withdraw(reserve, amount, address(this)) == amount, 'UNEXPECTED_AMOUNT_WITHDRAWN');\n  }\n\n  /**\n   * @dev Emergency rescue for token stucked on this contract, as failsafe mechanism\n   * - Funds should never remain in this contract more time than during transactions\n   * - Only callable by the owner\n   */\n  function rescueTokens(IERC20 token) external onlyOwner {\n    token.safeTransfer(owner(), token.balanceOf(address(this)));\n  }\n}\n"},"contracts/adapters/paraswap/BaseParaSwapBuyAdapter.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {SafeERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol';\nimport {SafeMath} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol';\nimport {PercentageMath} from '@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol';\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\nimport {IParaSwapAugustus} from './interfaces/IParaSwapAugustus.sol';\nimport {IParaSwapAugustusRegistry} from './interfaces/IParaSwapAugustusRegistry.sol';\nimport {BaseParaSwapAdapter} from './BaseParaSwapAdapter.sol';\n\n/**\n * @title BaseParaSwapBuyAdapter\n * @notice Implements the logic for buying tokens on ParaSwap\n */\nabstract contract BaseParaSwapBuyAdapter is BaseParaSwapAdapter {\n  using PercentageMath for uint256;\n  using SafeMath for uint256;\n  using SafeERC20 for IERC20Detailed;\n\n  IParaSwapAugustusRegistry public immutable AUGUSTUS_REGISTRY;\n\n  constructor(\n    IPoolAddressesProvider addressesProvider,\n    IParaSwapAugustusRegistry augustusRegistry\n  ) BaseParaSwapAdapter(addressesProvider) {\n    // Do something on Augustus registry to check the right contract was passed\n    require(!augustusRegistry.isValidAugustus(address(0)), 'Not a valid Augustus address');\n    AUGUSTUS_REGISTRY = augustusRegistry;\n  }\n\n  /**\n   * @dev Swaps a token for another using ParaSwap\n   * @param toAmountOffset Offset of toAmount in Augustus calldata if it should be overwritten, otherwise 0\n   * @param paraswapData Data for Paraswap Adapter\n   * @param assetToSwapFrom Address of the asset to be swapped from\n   * @param assetToSwapTo Address of the asset to be swapped to\n   * @param maxAmountToSwap Max amount to be swapped\n   * @param amountToReceive Amount to be received from the swap\n   * @return amountSold The amount sold during the swap\n   */\n  function _buyOnParaSwap(\n    uint256 toAmountOffset,\n    bytes memory paraswapData,\n    IERC20Detailed assetToSwapFrom,\n    IERC20Detailed assetToSwapTo,\n    uint256 maxAmountToSwap,\n    uint256 amountToReceive\n  ) internal returns (uint256 amountSold) {\n    (bytes memory buyCalldata, IParaSwapAugustus augustus) = abi.decode(\n      paraswapData,\n      (bytes, IParaSwapAugustus)\n    );\n\n    require(AUGUSTUS_REGISTRY.isValidAugustus(address(augustus)), 'INVALID_AUGUSTUS');\n\n    {\n      uint256 fromAssetDecimals = _getDecimals(assetToSwapFrom);\n      uint256 toAssetDecimals = _getDecimals(assetToSwapTo);\n\n      uint256 fromAssetPrice = _getPrice(address(assetToSwapFrom));\n      uint256 toAssetPrice = _getPrice(address(assetToSwapTo));\n\n      uint256 expectedMaxAmountToSwap = amountToReceive\n        .mul(toAssetPrice.mul(10 ** fromAssetDecimals))\n        .div(fromAssetPrice.mul(10 ** toAssetDecimals))\n        .percentMul(PercentageMath.PERCENTAGE_FACTOR.add(MAX_SLIPPAGE_PERCENT));\n\n      require(maxAmountToSwap <= expectedMaxAmountToSwap, 'maxAmountToSwap exceed max slippage');\n    }\n\n    uint256 balanceBeforeAssetFrom = assetToSwapFrom.balanceOf(address(this));\n    require(balanceBeforeAssetFrom >= maxAmountToSwap, 'INSUFFICIENT_BALANCE_BEFORE_SWAP');\n    uint256 balanceBeforeAssetTo = assetToSwapTo.balanceOf(address(this));\n\n    address tokenTransferProxy = augustus.getTokenTransferProxy();\n    assetToSwapFrom.safeApprove(tokenTransferProxy, 0);\n    assetToSwapFrom.safeApprove(tokenTransferProxy, maxAmountToSwap);\n\n    if (toAmountOffset != 0) {\n      // Ensure 256 bit (32 bytes) toAmountOffset value is within bounds of the\n      // calldata, not overlapping with the first 4 bytes (function selector).\n      require(\n        toAmountOffset >= 4 && toAmountOffset <= buyCalldata.length.sub(32),\n        'TO_AMOUNT_OFFSET_OUT_OF_RANGE'\n      );\n      // Overwrite the toAmount with the correct amount for the buy.\n      // In memory, buyCalldata consists of a 256 bit length field, followed by\n      // the actual bytes data, that is why 32 is added to the byte offset.\n      assembly {\n        mstore(add(buyCalldata, add(toAmountOffset, 32)), amountToReceive)\n      }\n    }\n    (bool success, ) = address(augustus).call(buyCalldata);\n    if (!success) {\n      // Copy revert reason from call\n      assembly {\n        returndatacopy(0, 0, returndatasize())\n        revert(0, returndatasize())\n      }\n    }\n\n    uint256 balanceAfterAssetFrom = assetToSwapFrom.balanceOf(address(this));\n    amountSold = balanceBeforeAssetFrom - balanceAfterAssetFrom;\n    require(amountSold <= maxAmountToSwap, 'WRONG_BALANCE_AFTER_SWAP');\n    uint256 amountReceived = assetToSwapTo.balanceOf(address(this)).sub(balanceBeforeAssetTo);\n    require(amountReceived >= amountToReceive, 'INSUFFICIENT_AMOUNT_RECEIVED');\n\n    emit Bought(address(assetToSwapFrom), address(assetToSwapTo), amountSold, amountReceived);\n  }\n}\n"},"contracts/adapters/paraswap/BaseParaSwapSellAdapter.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {SafeERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol';\nimport {SafeMath} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol';\nimport {PercentageMath} from '@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol';\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\nimport {IParaSwapAugustus} from './interfaces/IParaSwapAugustus.sol';\nimport {IParaSwapAugustusRegistry} from './interfaces/IParaSwapAugustusRegistry.sol';\nimport {BaseParaSwapAdapter} from './BaseParaSwapAdapter.sol';\n\n/**\n * @title BaseParaSwapSellAdapter\n * @notice Implements the logic for selling tokens on ParaSwap\n * @author Jason Raymond Bell\n */\nabstract contract BaseParaSwapSellAdapter is BaseParaSwapAdapter {\n  using PercentageMath for uint256;\n  using SafeMath for uint256;\n  using SafeERC20 for IERC20Detailed;\n\n  IParaSwapAugustusRegistry public immutable AUGUSTUS_REGISTRY;\n\n  constructor(\n    IPoolAddressesProvider addressesProvider,\n    IParaSwapAugustusRegistry augustusRegistry\n  ) BaseParaSwapAdapter(addressesProvider) {\n    // Do something on Augustus registry to check the right contract was passed\n    require(!augustusRegistry.isValidAugustus(address(0)));\n    AUGUSTUS_REGISTRY = augustusRegistry;\n  }\n\n  /**\n   * @dev Swaps a token for another using ParaSwap\n   * @param fromAmountOffset Offset of fromAmount in Augustus calldata if it should be overwritten, otherwise 0\n   * @param swapCalldata Calldata for ParaSwap's AugustusSwapper contract\n   * @param augustus Address of ParaSwap's AugustusSwapper contract\n   * @param assetToSwapFrom Address of the asset to be swapped from\n   * @param assetToSwapTo Address of the asset to be swapped to\n   * @param amountToSwap Amount to be swapped\n   * @param minAmountToReceive Minimum amount to be received from the swap\n   * @return amountReceived The amount received from the swap\n   */\n  function _sellOnParaSwap(\n    uint256 fromAmountOffset,\n    bytes memory swapCalldata,\n    IParaSwapAugustus augustus,\n    IERC20Detailed assetToSwapFrom,\n    IERC20Detailed assetToSwapTo,\n    uint256 amountToSwap,\n    uint256 minAmountToReceive\n  ) internal returns (uint256 amountReceived) {\n    require(AUGUSTUS_REGISTRY.isValidAugustus(address(augustus)), 'INVALID_AUGUSTUS');\n\n    {\n      uint256 fromAssetDecimals = _getDecimals(assetToSwapFrom);\n      uint256 toAssetDecimals = _getDecimals(assetToSwapTo);\n\n      uint256 fromAssetPrice = _getPrice(address(assetToSwapFrom));\n      uint256 toAssetPrice = _getPrice(address(assetToSwapTo));\n\n      uint256 expectedMinAmountOut = amountToSwap\n        .mul(fromAssetPrice.mul(10 ** toAssetDecimals))\n        .div(toAssetPrice.mul(10 ** fromAssetDecimals))\n        .percentMul(PercentageMath.PERCENTAGE_FACTOR - MAX_SLIPPAGE_PERCENT);\n\n      require(expectedMinAmountOut <= minAmountToReceive, 'MIN_AMOUNT_EXCEEDS_MAX_SLIPPAGE');\n    }\n\n    uint256 balanceBeforeAssetFrom = assetToSwapFrom.balanceOf(address(this));\n    require(balanceBeforeAssetFrom >= amountToSwap, 'INSUFFICIENT_BALANCE_BEFORE_SWAP');\n    uint256 balanceBeforeAssetTo = assetToSwapTo.balanceOf(address(this));\n\n    address tokenTransferProxy = augustus.getTokenTransferProxy();\n    assetToSwapFrom.safeApprove(tokenTransferProxy, 0);\n    assetToSwapFrom.safeApprove(tokenTransferProxy, amountToSwap);\n\n    if (fromAmountOffset != 0) {\n      // Ensure 256 bit (32 bytes) fromAmount value is within bounds of the\n      // calldata, not overlapping with the first 4 bytes (function selector).\n      require(\n        fromAmountOffset >= 4 && fromAmountOffset <= swapCalldata.length.sub(32),\n        'FROM_AMOUNT_OFFSET_OUT_OF_RANGE'\n      );\n      // Overwrite the fromAmount with the correct amount for the swap.\n      // In memory, swapCalldata consists of a 256 bit length field, followed by\n      // the actual bytes data, that is why 32 is added to the byte offset.\n      assembly {\n        mstore(add(swapCalldata, add(fromAmountOffset, 32)), amountToSwap)\n      }\n    }\n    (bool success, ) = address(augustus).call(swapCalldata);\n    if (!success) {\n      // Copy revert reason from call\n      assembly {\n        returndatacopy(0, 0, returndatasize())\n        revert(0, returndatasize())\n      }\n    }\n    require(\n      assetToSwapFrom.balanceOf(address(this)) == balanceBeforeAssetFrom - amountToSwap,\n      'WRONG_BALANCE_AFTER_SWAP'\n    );\n    amountReceived = assetToSwapTo.balanceOf(address(this)).sub(balanceBeforeAssetTo);\n    require(amountReceived >= minAmountToReceive, 'INSUFFICIENT_AMOUNT_RECEIVED');\n\n    emit Swapped(address(assetToSwapFrom), address(assetToSwapTo), amountToSwap, amountReceived);\n  }\n}\n"},"contracts/adapters/paraswap/interfaces/IParaSwapAugustus.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\ninterface IParaSwapAugustus {\n  function getTokenTransferProxy() external view returns (address);\n}\n"},"contracts/adapters/paraswap/interfaces/IParaSwapAugustusRegistry.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\ninterface IParaSwapAugustusRegistry {\n  function isValidAugustus(address augustus) external view returns (bool);\n}\n"},"contracts/adapters/paraswap/ParaSwapLiquiditySwapAdapter.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\nimport {IERC20WithPermit} from '@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol';\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\nimport {SafeERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol';\nimport {SafeMath} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol';\nimport {BaseParaSwapSellAdapter} from './BaseParaSwapSellAdapter.sol';\nimport {IParaSwapAugustusRegistry} from './interfaces/IParaSwapAugustusRegistry.sol';\nimport {IParaSwapAugustus} from './interfaces/IParaSwapAugustus.sol';\nimport {ReentrancyGuard} from '../../dependencies/openzeppelin/ReentrancyGuard.sol';\n\n/**\n * @title ParaSwapLiquiditySwapAdapter\n * @notice Adapter to swap liquidity using ParaSwap.\n * @author Jason Raymond Bell\n */\ncontract ParaSwapLiquiditySwapAdapter is BaseParaSwapSellAdapter, ReentrancyGuard {\n  using SafeMath for uint256;\n  using SafeERC20 for IERC20Detailed;\n\n  constructor(\n    IPoolAddressesProvider addressesProvider,\n    IParaSwapAugustusRegistry augustusRegistry,\n    address owner\n  ) BaseParaSwapSellAdapter(addressesProvider, augustusRegistry) {\n    transferOwnership(owner);\n  }\n\n  /**\n   * @dev Swaps the received reserve amount from the flash loan into the asset specified in the params.\n   * The received funds from the swap are then deposited into the protocol on behalf of the user.\n   * The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset and repay the flash loan.\n   * @param asset The address of the flash-borrowed asset\n   * @param amount The amount of the flash-borrowed asset\n   * @param premium The fee of the flash-borrowed asset\n   * @param initiator The address of the flashloan initiator\n   * @param params The byte-encoded params passed when initiating the flashloan\n   * @return True if the execution of the operation succeeds, false otherwise\n   *   address assetToSwapTo Address of the underlying asset to be swapped to and deposited\n   *   uint256 minAmountToReceive Min amount to be received from the swap\n   *   uint256 swapAllBalanceOffset Set to offset of fromAmount in Augustus calldata if wanting to swap all balance, otherwise 0\n   *   bytes swapCalldata Calldata for ParaSwap's AugustusSwapper contract\n   *   address augustus Address of ParaSwap's AugustusSwapper contract\n   *   PermitSignature permitParams Struct containing the permit signatures, set to all zeroes if not used\n   */\n  function executeOperation(\n    address asset,\n    uint256 amount,\n    uint256 premium,\n    address initiator,\n    bytes calldata params\n  ) external override nonReentrant returns (bool) {\n    require(msg.sender == address(POOL), 'CALLER_MUST_BE_POOL');\n\n    uint256 flashLoanAmount = amount;\n    uint256 premiumLocal = premium;\n    address initiatorLocal = initiator;\n    IERC20Detailed assetToSwapFrom = IERC20Detailed(asset);\n    (\n      IERC20Detailed assetToSwapTo,\n      uint256 minAmountToReceive,\n      uint256 swapAllBalanceOffset,\n      bytes memory swapCalldata,\n      IParaSwapAugustus augustus,\n      PermitSignature memory permitParams\n    ) = abi.decode(\n        params,\n        (IERC20Detailed, uint256, uint256, bytes, IParaSwapAugustus, PermitSignature)\n      );\n\n    _swapLiquidity(\n      swapAllBalanceOffset,\n      swapCalldata,\n      augustus,\n      permitParams,\n      flashLoanAmount,\n      premiumLocal,\n      initiatorLocal,\n      assetToSwapFrom,\n      assetToSwapTo,\n      minAmountToReceive\n    );\n\n    return true;\n  }\n\n  /**\n   * @dev Swaps an amount of an asset to another and deposits the new asset amount on behalf of the user without using a flash loan.\n   * This method can be used when the temporary transfer of the collateral asset to this contract does not affect the user position.\n   * The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset and perform the swap.\n   * @param assetToSwapFrom Address of the underlying asset to be swapped from\n   * @param assetToSwapTo Address of the underlying asset to be swapped to and deposited\n   * @param amountToSwap Amount to be swapped, or maximum amount when swapping all balance\n   * @param minAmountToReceive Minimum amount to be received from the swap\n   * @param swapAllBalanceOffset Set to offset of fromAmount in Augustus calldata if wanting to swap all balance, otherwise 0\n   * @param swapCalldata Calldata for ParaSwap's AugustusSwapper contract\n   * @param augustus Address of ParaSwap's AugustusSwapper contract\n   * @param permitParams Struct containing the permit signatures, set to all zeroes if not used\n   */\n  function swapAndDeposit(\n    IERC20Detailed assetToSwapFrom,\n    IERC20Detailed assetToSwapTo,\n    uint256 amountToSwap,\n    uint256 minAmountToReceive,\n    uint256 swapAllBalanceOffset,\n    bytes calldata swapCalldata,\n    IParaSwapAugustus augustus,\n    PermitSignature calldata permitParams\n  ) external nonReentrant {\n    IERC20WithPermit aToken = IERC20WithPermit(\n      _getReserveData(address(assetToSwapFrom)).aTokenAddress\n    );\n\n    if (swapAllBalanceOffset != 0) {\n      uint256 balance = aToken.balanceOf(msg.sender);\n      require(balance <= amountToSwap, 'INSUFFICIENT_AMOUNT_TO_SWAP');\n      amountToSwap = balance;\n    }\n\n    _pullATokenAndWithdraw(\n      address(assetToSwapFrom),\n      aToken,\n      msg.sender,\n      amountToSwap,\n      permitParams\n    );\n\n    uint256 amountReceived = _sellOnParaSwap(\n      swapAllBalanceOffset,\n      swapCalldata,\n      augustus,\n      assetToSwapFrom,\n      assetToSwapTo,\n      amountToSwap,\n      minAmountToReceive\n    );\n\n    assetToSwapTo.safeApprove(address(POOL), 0);\n    assetToSwapTo.safeApprove(address(POOL), amountReceived);\n    POOL.deposit(address(assetToSwapTo), amountReceived, msg.sender, 0);\n  }\n\n  /**\n   * @dev Swaps an amount of an asset to another and deposits the funds on behalf of the initiator.\n   * @param swapAllBalanceOffset Set to offset of fromAmount in Augustus calldata if wanting to swap all balance, otherwise 0\n   * @param swapCalldata Calldata for ParaSwap's AugustusSwapper contract\n   * @param augustus Address of ParaSwap's AugustusSwapper contract\n   * @param permitParams Struct containing the permit signatures, set to all zeroes if not used\n   * @param flashLoanAmount Amount of the flash loan i.e. maximum amount to swap\n   * @param premium Fee of the flash loan\n   * @param initiator Account that initiated the flash loan\n   * @param assetToSwapFrom Address of the underyling asset to be swapped from\n   * @param assetToSwapTo Address of the underlying asset to be swapped to and deposited\n   * @param minAmountToReceive Min amount to be received from the swap\n   */\n  function _swapLiquidity(\n    uint256 swapAllBalanceOffset,\n    bytes memory swapCalldata,\n    IParaSwapAugustus augustus,\n    PermitSignature memory permitParams,\n    uint256 flashLoanAmount,\n    uint256 premium,\n    address initiator,\n    IERC20Detailed assetToSwapFrom,\n    IERC20Detailed assetToSwapTo,\n    uint256 minAmountToReceive\n  ) internal {\n    IERC20WithPermit aToken = IERC20WithPermit(\n      _getReserveData(address(assetToSwapFrom)).aTokenAddress\n    );\n    uint256 amountToSwap = flashLoanAmount;\n\n    uint256 balance = aToken.balanceOf(initiator);\n    if (swapAllBalanceOffset != 0) {\n      uint256 balanceToSwap = balance.sub(premium);\n      require(balanceToSwap <= amountToSwap, 'INSUFFICIENT_AMOUNT_TO_SWAP');\n      amountToSwap = balanceToSwap;\n    } else {\n      require(balance >= amountToSwap.add(premium), 'INSUFFICIENT_ATOKEN_BALANCE');\n    }\n\n    uint256 amountReceived = _sellOnParaSwap(\n      swapAllBalanceOffset,\n      swapCalldata,\n      augustus,\n      assetToSwapFrom,\n      assetToSwapTo,\n      amountToSwap,\n      minAmountToReceive\n    );\n\n    assetToSwapTo.safeApprove(address(POOL), 0);\n    assetToSwapTo.safeApprove(address(POOL), amountReceived);\n    POOL.deposit(address(assetToSwapTo), amountReceived, initiator, 0);\n\n    _pullATokenAndWithdraw(\n      address(assetToSwapFrom),\n      aToken,\n      initiator,\n      amountToSwap.add(premium),\n      permitParams\n    );\n\n    // Repay flash loan\n    assetToSwapFrom.safeApprove(address(POOL), 0);\n    assetToSwapFrom.safeApprove(address(POOL), flashLoanAmount.add(premium));\n  }\n}\n"},"contracts/adapters/paraswap/ParaSwapRepayAdapter.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {DataTypes} from '@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol';\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\nimport {IERC20WithPermit} from '@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol';\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\nimport {SafeERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol';\nimport {SafeMath} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol';\nimport {BaseParaSwapBuyAdapter} from './BaseParaSwapBuyAdapter.sol';\nimport {IParaSwapAugustusRegistry} from './interfaces/IParaSwapAugustusRegistry.sol';\nimport {IParaSwapAugustus} from './interfaces/IParaSwapAugustus.sol';\nimport {ReentrancyGuard} from '../../dependencies/openzeppelin/ReentrancyGuard.sol';\n\n/**\n * @title ParaSwapRepayAdapter\n * @notice ParaSwap Adapter to perform a repay of a debt with collateral.\n * @author Aave\n **/\ncontract ParaSwapRepayAdapter is BaseParaSwapBuyAdapter, ReentrancyGuard {\n  using SafeMath for uint256;\n  using SafeERC20 for IERC20;\n\n  struct RepayParams {\n    address collateralAsset;\n    uint256 collateralAmount;\n    uint256 rateMode;\n    PermitSignature permitSignature;\n    bool useEthPath;\n  }\n\n  constructor(\n    IPoolAddressesProvider addressesProvider,\n    IParaSwapAugustusRegistry augustusRegistry,\n    address owner\n  ) BaseParaSwapBuyAdapter(addressesProvider, augustusRegistry) {\n    transferOwnership(owner);\n  }\n\n  /**\n   * @dev Uses the received funds from the flash loan to repay a debt on the protocol on behalf of the user. Then pulls\n   * the collateral from the user and swaps it to the debt asset to repay the flash loan.\n   * The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset, swap it\n   * and repay the flash loan.\n   * Supports only one asset on the flash loan.\n   * @param asset The address of the flash-borrowed asset\n   * @param amount The amount of the flash-borrowed asset\n   * @param premium The fee of the flash-borrowed asset\n   * @param initiator The address of the flashloan initiator\n   * @param params The byte-encoded params passed when initiating the flashloan\n   * @return True if the execution of the operation succeeds, false otherwise\n   *   IERC20Detailed debtAsset Address of the debt asset\n   *   uint256 debtAmount Amount of debt to be repaid\n   *   uint256 rateMode Rate modes of the debt to be repaid\n   *   uint256 deadline Deadline for the permit signature\n   *   uint256 debtRateMode Rate mode of the debt to be repaid\n   *   bytes paraswapData Paraswap Data\n   *                    * bytes buyCallData Call data for augustus\n   *                    * IParaSwapAugustus augustus Address of Augustus Swapper\n   *   PermitSignature permitParams Struct containing the permit signatures, set to all zeroes if not used\n   */\n  function executeOperation(\n    address asset,\n    uint256 amount,\n    uint256 premium,\n    address initiator,\n    bytes calldata params\n  ) external override nonReentrant returns (bool) {\n    require(msg.sender == address(POOL), 'CALLER_MUST_BE_POOL');\n\n    uint256 collateralAmount = amount;\n    address initiatorLocal = initiator;\n\n    IERC20Detailed collateralAsset = IERC20Detailed(asset);\n\n    _swapAndRepay(params, premium, initiatorLocal, collateralAsset, collateralAmount);\n\n    return true;\n  }\n\n  /**\n   * @dev Swaps the user collateral for the debt asset and then repay the debt on the protocol on behalf of the user\n   * without using flash loans. This method can be used when the temporary transfer of the collateral asset to this\n   * contract does not affect the user position.\n   * The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset\n   * @param collateralAsset Address of asset to be swapped\n   * @param debtAsset Address of debt asset\n   * @param collateralAmount max Amount of the collateral to be swapped\n   * @param debtRepayAmount Amount of the debt to be repaid, or maximum amount when repaying entire debt\n   * @param debtRateMode Rate mode of the debt to be repaid\n   * @param buyAllBalanceOffset Set to offset of toAmount in Augustus calldata if wanting to pay entire debt, otherwise 0\n   * @param paraswapData Data for Paraswap Adapter\n   * @param permitSignature struct containing the permit signature\n   */\n  function swapAndRepay(\n    IERC20Detailed collateralAsset,\n    IERC20Detailed debtAsset,\n    uint256 collateralAmount,\n    uint256 debtRepayAmount,\n    uint256 debtRateMode,\n    uint256 buyAllBalanceOffset,\n    bytes calldata paraswapData,\n    PermitSignature calldata permitSignature\n  ) external nonReentrant {\n    debtRepayAmount = getDebtRepayAmount(\n      debtAsset,\n      debtRateMode,\n      buyAllBalanceOffset,\n      debtRepayAmount,\n      msg.sender\n    );\n\n    // Pull aTokens from user\n    _pullATokenAndWithdraw(address(collateralAsset), msg.sender, collateralAmount, permitSignature);\n    //buy debt asset using collateral asset\n    uint256 amountSold = _buyOnParaSwap(\n      buyAllBalanceOffset,\n      paraswapData,\n      collateralAsset,\n      debtAsset,\n      collateralAmount,\n      debtRepayAmount\n    );\n\n    uint256 collateralBalanceLeft = collateralAmount - amountSold;\n\n    //deposit collateral back in the pool, if left after the swap(buy)\n    if (collateralBalanceLeft > 0) {\n      IERC20(collateralAsset).safeApprove(address(POOL), 0);\n      IERC20(collateralAsset).safeApprove(address(POOL), collateralBalanceLeft);\n      POOL.deposit(address(collateralAsset), collateralBalanceLeft, msg.sender, 0);\n    }\n\n    // Repay debt. Approves 0 first to comply with tokens that implement the anti frontrunning approval fix\n    IERC20(debtAsset).safeApprove(address(POOL), 0);\n    IERC20(debtAsset).safeApprove(address(POOL), debtRepayAmount);\n    POOL.repay(address(debtAsset), debtRepayAmount, debtRateMode, msg.sender);\n  }\n\n  /**\n   * @dev Perform the repay of the debt, pulls the initiator collateral and swaps to repay the flash loan\n   * @param premium Fee of the flash loan\n   * @param initiator Address of the user\n   * @param collateralAsset Address of token to be swapped\n   * @param collateralAmount Amount of the reserve to be swapped(flash loan amount)\n   */\n\n  function _swapAndRepay(\n    bytes calldata params,\n    uint256 premium,\n    address initiator,\n    IERC20Detailed collateralAsset,\n    uint256 collateralAmount\n  ) private {\n    (\n      IERC20Detailed debtAsset,\n      uint256 debtRepayAmount,\n      uint256 buyAllBalanceOffset,\n      uint256 rateMode,\n      bytes memory paraswapData,\n      PermitSignature memory permitSignature\n    ) = abi.decode(params, (IERC20Detailed, uint256, uint256, uint256, bytes, PermitSignature));\n\n    debtRepayAmount = getDebtRepayAmount(\n      debtAsset,\n      rateMode,\n      buyAllBalanceOffset,\n      debtRepayAmount,\n      initiator\n    );\n\n    uint256 amountSold = _buyOnParaSwap(\n      buyAllBalanceOffset,\n      paraswapData,\n      collateralAsset,\n      debtAsset,\n      collateralAmount,\n      debtRepayAmount\n    );\n\n    // Repay debt. Approves for 0 first to comply with tokens that implement the anti frontrunning approval fix.\n    IERC20(debtAsset).safeApprove(address(POOL), 0);\n    IERC20(debtAsset).safeApprove(address(POOL), debtRepayAmount);\n    POOL.repay(address(debtAsset), debtRepayAmount, rateMode, initiator);\n\n    uint256 neededForFlashLoanRepay = amountSold.add(premium);\n\n    // Pull aTokens from user\n    _pullATokenAndWithdraw(\n      address(collateralAsset),\n      initiator,\n      neededForFlashLoanRepay,\n      permitSignature\n    );\n\n    // Repay flashloan. Approves for 0 first to comply with tokens that implement the anti frontrunning approval fix.\n    IERC20(collateralAsset).safeApprove(address(POOL), 0);\n    IERC20(collateralAsset).safeApprove(address(POOL), collateralAmount.add(premium));\n  }\n\n  function getDebtRepayAmount(\n    IERC20Detailed debtAsset,\n    uint256 rateMode,\n    uint256 buyAllBalanceOffset,\n    uint256 debtRepayAmount,\n    address initiator\n  ) private view returns (uint256) {\n    DataTypes.ReserveData memory debtReserveData = _getReserveData(address(debtAsset));\n\n    address debtToken = DataTypes.InterestRateMode(rateMode) == DataTypes.InterestRateMode.STABLE\n      ? debtReserveData.stableDebtTokenAddress\n      : debtReserveData.variableDebtTokenAddress;\n\n    uint256 currentDebt = IERC20(debtToken).balanceOf(initiator);\n\n    if (buyAllBalanceOffset != 0) {\n      require(currentDebt <= debtRepayAmount, 'INSUFFICIENT_AMOUNT_TO_REPAY');\n      debtRepayAmount = currentDebt;\n    } else {\n      require(debtRepayAmount <= currentDebt, 'INVALID_DEBT_REPAY_AMOUNT');\n    }\n\n    return debtRepayAmount;\n  }\n}\n"},"contracts/adapters/paraswap/ParaSwapWithdrawSwapAdapter.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\nimport {IERC20WithPermit} from '@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol';\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\nimport {BaseParaSwapSellAdapter} from './BaseParaSwapSellAdapter.sol';\nimport {IParaSwapAugustusRegistry} from './interfaces/IParaSwapAugustusRegistry.sol';\nimport {SafeERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol';\nimport {IParaSwapAugustus} from './interfaces/IParaSwapAugustus.sol';\nimport {ReentrancyGuard} from '../../dependencies/openzeppelin/ReentrancyGuard.sol';\n\ncontract ParaSwapWithdrawSwapAdapter is BaseParaSwapSellAdapter, ReentrancyGuard {\n  using SafeERC20 for IERC20Detailed;\n\n  constructor(\n    IPoolAddressesProvider addressesProvider,\n    IParaSwapAugustusRegistry augustusRegistry,\n    address owner\n  ) BaseParaSwapSellAdapter(addressesProvider, augustusRegistry) {\n    transferOwnership(owner);\n  }\n\n  function executeOperation(\n    address,\n    uint256,\n    uint256,\n    address,\n    bytes calldata\n  ) external override nonReentrant returns (bool) {\n    revert('NOT_SUPPORTED');\n  }\n\n  /**\n   * @dev Swaps an amount of an asset to another after a withdraw and transfers the new asset to the user.\n   * The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset and perform the swap.\n   * @param assetToSwapFrom Address of the underlying asset to be swapped from\n   * @param assetToSwapTo Address of the underlying asset to be swapped to\n   * @param amountToSwap Amount to be swapped, or maximum amount when swapping all balance\n   * @param minAmountToReceive Minimum amount to be received from the swap\n   * @param swapAllBalanceOffset Set to offset of fromAmount in Augustus calldata if wanting to swap all balance, otherwise 0\n   * @param swapCalldata Calldata for ParaSwap's AugustusSwapper contract\n   * @param augustus Address of ParaSwap's AugustusSwapper contract\n   * @param permitParams Struct containing the permit signatures, set to all zeroes if not used\n   */\n  function withdrawAndSwap(\n    IERC20Detailed assetToSwapFrom,\n    IERC20Detailed assetToSwapTo,\n    uint256 amountToSwap,\n    uint256 minAmountToReceive,\n    uint256 swapAllBalanceOffset,\n    bytes calldata swapCalldata,\n    IParaSwapAugustus augustus,\n    PermitSignature calldata permitParams\n  ) external nonReentrant {\n    IERC20WithPermit aToken = IERC20WithPermit(\n      _getReserveData(address(assetToSwapFrom)).aTokenAddress\n    );\n\n    if (swapAllBalanceOffset != 0) {\n      uint256 balance = aToken.balanceOf(msg.sender);\n      require(balance <= amountToSwap, 'INSUFFICIENT_AMOUNT_TO_SWAP');\n      amountToSwap = balance;\n    }\n\n    _pullATokenAndWithdraw(\n      address(assetToSwapFrom),\n      aToken,\n      msg.sender,\n      amountToSwap,\n      permitParams\n    );\n\n    uint256 amountReceived = _sellOnParaSwap(\n      swapAllBalanceOffset,\n      swapCalldata,\n      augustus,\n      assetToSwapFrom,\n      assetToSwapTo,\n      amountToSwap,\n      minAmountToReceive\n    );\n\n    assetToSwapTo.safeTransfer(msg.sender, amountReceived);\n  }\n}"},"contracts/dependencies/openzeppelin/ReentrancyGuard.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.10;\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    // On the first call to nonReentrant, _notEntered will be true\n    require(_status != _ENTERED, 'ReentrancyGuard: reentrant call');\n\n    // Any calls to nonReentrant after this point will fail\n    _status = _ENTERED;\n\n    _;\n\n    // By storing the original value once again, a refund is triggered (see\n    // https://eips.ethereum.org/EIPS/eip-2200)\n    _status = _NOT_ENTERED;\n  }\n}\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/dependencies/weth/WETH9.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/dependencies/weth/WETH9.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/deployments/ReservesSetupHelper.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/deployments/ReservesSetupHelper.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/misc/AaveOracle.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/misc/AaveOracle.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/misc/AaveProtocolDataProvider.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/misc/AaveProtocolDataProvider.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/flashloan/MockFlashLoanReceiver.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/mocks/flashloan/MockFlashLoanReceiver.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/helpers/MockIncentivesController.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/mocks/helpers/MockIncentivesController.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/helpers/MockPool.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/mocks/helpers/MockPool.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/helpers/MockReserveConfiguration.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/mocks/helpers/MockReserveConfiguration.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/oracle/CLAggregators/MockAggregator.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/mocks/oracle/CLAggregators/MockAggregator.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/oracle/PriceOracle.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/mocks/oracle/PriceOracle.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/tokens/MintableDelegationERC20.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/mocks/tokens/MintableDelegationERC20.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/tokens/WETH9Mocked.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/mocks/tokens/WETH9Mocked.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/configuration/ACLManager.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/protocol/configuration/ACLManager.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/configuration/PoolAddressesProvider.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/protocol/configuration/PoolAddressesProvider.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/configuration/PoolAddressesProviderRegistry.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/protocol/configuration/PoolAddressesProviderRegistry.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/logic/BridgeLogic.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/protocol/libraries/logic/BridgeLogic.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/logic/FlashLoanLogic.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/protocol/libraries/logic/FlashLoanLogic.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/logic/SupplyLogic.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/protocol/libraries/logic/SupplyLogic.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/pool/Pool.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/protocol/pool/Pool.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/pool/PoolConfigurator.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/protocol/pool/PoolConfigurator.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/tokenization/AToken.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/protocol/tokenization/AToken.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol';\n"},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol":{"content":"// SPDX-License-Identifier: UNLICENSED\npragma solidity >0.0.0;\nimport '@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol';\n"},"contracts/libraries/DataTypesHelper.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\nimport {DataTypes} from '@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol';\n\n/**\n * @title DataTypesHelper\n * @author Aave\n * @dev Helper library to track user current debt balance, used by WrappedTokenGatewayV3\n */\nlibrary DataTypesHelper {\n  /**\n   * @notice Fetches the user current stable and variable debt balances\n   * @param user The user address\n   * @param reserve The reserve data object\n   * @return The stable debt balance\n   * @return The variable debt balance\n   **/\n  function getUserCurrentDebt(\n    address user,\n    DataTypes.ReserveData memory reserve\n  ) internal view returns (uint256, uint256) {\n    return (\n      IERC20(reserve.stableDebtTokenAddress).balanceOf(user),\n      IERC20(reserve.variableDebtTokenAddress).balanceOf(user)\n    );\n  }\n}\n"},"contracts/misc/interfaces/IEACAggregatorProxy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\ninterface IEACAggregatorProxy {\n  function decimals() external view returns (uint8);\n\n  function latestAnswer() external view returns (int256);\n\n  function latestTimestamp() external view returns (uint256);\n\n  function latestRound() external view returns (uint256);\n\n  function getAnswer(uint256 roundId) external view returns (int256);\n\n  function getTimestamp(uint256 roundId) external view returns (uint256);\n\n  event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 timestamp);\n  event NewRound(uint256 indexed roundId, address indexed startedBy);\n}\n"},"contracts/misc/interfaces/IERC20DetailedBytes.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\n\ninterface IERC20DetailedBytes is IERC20 {\n  function name() external view returns (bytes32);\n\n  function symbol() external view returns (bytes32);\n\n  function decimals() external view returns (uint8);\n}\n"},"contracts/misc/interfaces/IUiIncentiveDataProviderV3.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\n\ninterface IUiIncentiveDataProviderV3 {\n  struct AggregatedReserveIncentiveData {\n    address underlyingAsset;\n    IncentiveData aIncentiveData;\n    IncentiveData vIncentiveData;\n    IncentiveData sIncentiveData;\n  }\n\n  struct IncentiveData {\n    address tokenAddress;\n    address incentiveControllerAddress;\n    RewardInfo[] rewardsTokenInformation;\n  }\n\n  struct RewardInfo {\n    string rewardTokenSymbol;\n    address rewardTokenAddress;\n    address rewardOracleAddress;\n    uint256 emissionPerSecond;\n    uint256 incentivesLastUpdateTimestamp;\n    uint256 tokenIncentivesIndex;\n    uint256 emissionEndTimestamp;\n    int256 rewardPriceFeed;\n    uint8 rewardTokenDecimals;\n    uint8 precision;\n    uint8 priceFeedDecimals;\n  }\n\n  struct UserReserveIncentiveData {\n    address underlyingAsset;\n    UserIncentiveData aTokenIncentivesUserData;\n    UserIncentiveData vTokenIncentivesUserData;\n    UserIncentiveData sTokenIncentivesUserData;\n  }\n\n  struct UserIncentiveData {\n    address tokenAddress;\n    address incentiveControllerAddress;\n    UserRewardInfo[] userRewardsInformation;\n  }\n\n  struct UserRewardInfo {\n    string rewardTokenSymbol;\n    address rewardOracleAddress;\n    address rewardTokenAddress;\n    uint256 userUnclaimedRewards;\n    uint256 tokenIncentivesUserIndex;\n    int256 rewardPriceFeed;\n    uint8 priceFeedDecimals;\n    uint8 rewardTokenDecimals;\n  }\n\n  function getReservesIncentivesData(\n    IPoolAddressesProvider provider\n  ) external view returns (AggregatedReserveIncentiveData[] memory);\n\n  function getUserReservesIncentivesData(\n    IPoolAddressesProvider provider,\n    address user\n  ) external view returns (UserReserveIncentiveData[] memory);\n\n  // generic method with full data\n  function getFullReservesIncentiveData(\n    IPoolAddressesProvider provider,\n    address user\n  )\n    external\n    view\n    returns (AggregatedReserveIncentiveData[] memory, UserReserveIncentiveData[] memory);\n}\n"},"contracts/misc/interfaces/IUiPoolDataProviderV3.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\n\ninterface IUiPoolDataProviderV3 {\n  struct InterestRates {\n    uint256 variableRateSlope1;\n    uint256 variableRateSlope2;\n    uint256 stableRateSlope1;\n    uint256 stableRateSlope2;\n    uint256 baseStableBorrowRate;\n    uint256 baseVariableBorrowRate;\n    uint256 optimalUsageRatio;\n  }\n\n  struct AggregatedReserveData {\n    address underlyingAsset;\n    string name;\n    string symbol;\n    uint256 decimals;\n    uint256 baseLTVasCollateral;\n    uint256 reserveLiquidationThreshold;\n    uint256 reserveLiquidationBonus;\n    uint256 reserveFactor;\n    bool usageAsCollateralEnabled;\n    bool borrowingEnabled;\n    bool stableBorrowRateEnabled;\n    bool isActive;\n    bool isFrozen;\n    // base data\n    uint128 liquidityIndex;\n    uint128 variableBorrowIndex;\n    uint128 liquidityRate;\n    uint128 variableBorrowRate;\n    uint128 stableBorrowRate;\n    uint40 lastUpdateTimestamp;\n    address aTokenAddress;\n    address stableDebtTokenAddress;\n    address variableDebtTokenAddress;\n    address interestRateStrategyAddress;\n    //\n    uint256 availableLiquidity;\n    uint256 totalPrincipalStableDebt;\n    uint256 averageStableRate;\n    uint256 stableDebtLastUpdateTimestamp;\n    uint256 totalScaledVariableDebt;\n    uint256 priceInMarketReferenceCurrency;\n    address priceOracle;\n    uint256 variableRateSlope1;\n    uint256 variableRateSlope2;\n    uint256 stableRateSlope1;\n    uint256 stableRateSlope2;\n    uint256 baseStableBorrowRate;\n    uint256 baseVariableBorrowRate;\n    uint256 optimalUsageRatio;\n    // v3 only\n    bool isPaused;\n    bool isSiloedBorrowing;\n    uint128 accruedToTreasury;\n    uint128 unbacked;\n    uint128 isolationModeTotalDebt;\n    bool flashLoanEnabled;\n    //\n    uint256 debtCeiling;\n    uint256 debtCeilingDecimals;\n    uint8 eModeCategoryId;\n    uint256 borrowCap;\n    uint256 supplyCap;\n    // eMode\n    uint16 eModeLtv;\n    uint16 eModeLiquidationThreshold;\n    uint16 eModeLiquidationBonus;\n    address eModePriceSource;\n    string eModeLabel;\n    bool borrowableInIsolation;\n  }\n\n  struct UserReserveData {\n    address underlyingAsset;\n    uint256 scaledATokenBalance;\n    bool usageAsCollateralEnabledOnUser;\n    uint256 stableBorrowRate;\n    uint256 scaledVariableDebt;\n    uint256 principalStableDebt;\n    uint256 stableBorrowLastUpdateTimestamp;\n  }\n\n  struct BaseCurrencyInfo {\n    uint256 marketReferenceCurrencyUnit;\n    int256 marketReferenceCurrencyPriceInUsd;\n    int256 networkBaseTokenPriceInUsd;\n    uint8 networkBaseTokenPriceDecimals;\n  }\n\n  function getReservesList(\n    IPoolAddressesProvider provider\n  ) external view returns (address[] memory);\n\n  function getReservesData(\n    IPoolAddressesProvider provider\n  ) external view returns (AggregatedReserveData[] memory, BaseCurrencyInfo memory);\n\n  function getUserReservesData(\n    IPoolAddressesProvider provider,\n    address user\n  ) external view returns (UserReserveData[] memory, uint8);\n}\n"},"contracts/misc/interfaces/IWETH.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\ninterface IWETH {\n  function deposit() external payable;\n\n  function withdraw(uint256) external;\n\n  function approve(address guy, uint256 wad) external returns (bool);\n\n  function transferFrom(address src, address dst, uint256 wad) external returns (bool);\n}\n"},"contracts/misc/interfaces/IWrappedTokenGatewayV3.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\ninterface IWrappedTokenGatewayV3 {\n  function depositETH(address pool, address onBehalfOf, uint16 referralCode) external payable;\n\n  function withdrawETH(address pool, uint256 amount, address onBehalfOf) external;\n\n  function repayETH(\n    address pool,\n    uint256 amount,\n    uint256 rateMode,\n    address onBehalfOf\n  ) external payable;\n\n  function borrowETH(\n    address pool,\n    uint256 amount,\n    uint256 interestRateMode,\n    uint16 referralCode\n  ) external;\n\n  function withdrawETHWithPermit(\n    address pool,\n    uint256 amount,\n    address to,\n    uint256 deadline,\n    uint8 permitV,\n    bytes32 permitR,\n    bytes32 permitS\n  ) external;\n}\n"},"contracts/misc/UiIncentiveDataProviderV3.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\nimport {IPool} from '@aave/core-v3/contracts/interfaces/IPool.sol';\nimport {IncentivizedERC20} from '@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol';\nimport {UserConfiguration} from '@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol';\nimport {DataTypes} from '@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol';\nimport {IRewardsController} from '../rewards/interfaces/IRewardsController.sol';\nimport {IEACAggregatorProxy} from './interfaces/IEACAggregatorProxy.sol';\nimport {IUiIncentiveDataProviderV3} from './interfaces/IUiIncentiveDataProviderV3.sol';\n\ncontract UiIncentiveDataProviderV3 is IUiIncentiveDataProviderV3 {\n  using UserConfiguration for DataTypes.UserConfigurationMap;\n\n  function getFullReservesIncentiveData(\n    IPoolAddressesProvider provider,\n    address user\n  )\n    external\n    view\n    override\n    returns (AggregatedReserveIncentiveData[] memory, UserReserveIncentiveData[] memory)\n  {\n    return (_getReservesIncentivesData(provider), _getUserReservesIncentivesData(provider, user));\n  }\n\n  function getReservesIncentivesData(\n    IPoolAddressesProvider provider\n  ) external view override returns (AggregatedReserveIncentiveData[] memory) {\n    return _getReservesIncentivesData(provider);\n  }\n\n  function _getReservesIncentivesData(\n    IPoolAddressesProvider provider\n  ) private view returns (AggregatedReserveIncentiveData[] memory) {\n    IPool pool = IPool(provider.getPool());\n    address[] memory reserves = pool.getReservesList();\n    AggregatedReserveIncentiveData[]\n      memory reservesIncentiveData = new AggregatedReserveIncentiveData[](reserves.length);\n    // Iterate through the reserves to get all the information from the (a/s/v) Tokens\n    for (uint256 i = 0; i < reserves.length; i++) {\n      AggregatedReserveIncentiveData memory reserveIncentiveData = reservesIncentiveData[i];\n      reserveIncentiveData.underlyingAsset = reserves[i];\n\n      DataTypes.ReserveData memory baseData = pool.getReserveData(reserves[i]);\n\n      // Get aTokens rewards information\n      // TODO: check that this is deployed correctly on contract and remove casting\n      IRewardsController aTokenIncentiveController = IRewardsController(\n        address(IncentivizedERC20(baseData.aTokenAddress).getIncentivesController())\n      );\n      RewardInfo[] memory aRewardsInformation;\n      if (address(aTokenIncentiveController) != address(0)) {\n        address[] memory aTokenRewardAddresses = aTokenIncentiveController.getRewardsByAsset(\n          baseData.aTokenAddress\n        );\n\n        aRewardsInformation = new RewardInfo[](aTokenRewardAddresses.length);\n        for (uint256 j = 0; j < aTokenRewardAddresses.length; ++j) {\n          RewardInfo memory rewardInformation;\n          rewardInformation.rewardTokenAddress = aTokenRewardAddresses[j];\n\n          (\n            rewardInformation.tokenIncentivesIndex,\n            rewardInformation.emissionPerSecond,\n            rewardInformation.incentivesLastUpdateTimestamp,\n            rewardInformation.emissionEndTimestamp\n          ) = aTokenIncentiveController.getRewardsData(\n            baseData.aTokenAddress,\n            rewardInformation.rewardTokenAddress\n          );\n\n          rewardInformation.precision = aTokenIncentiveController.getAssetDecimals(\n            baseData.aTokenAddress\n          );\n          rewardInformation.rewardTokenDecimals = IERC20Detailed(\n            rewardInformation.rewardTokenAddress\n          ).decimals();\n          rewardInformation.rewardTokenSymbol = IERC20Detailed(rewardInformation.rewardTokenAddress)\n            .symbol();\n\n          // Get price of reward token from Chainlink Proxy Oracle\n          rewardInformation.rewardOracleAddress = aTokenIncentiveController.getRewardOracle(\n            rewardInformation.rewardTokenAddress\n          );\n          rewardInformation.priceFeedDecimals = IEACAggregatorProxy(\n            rewardInformation.rewardOracleAddress\n          ).decimals();\n          rewardInformation.rewardPriceFeed = IEACAggregatorProxy(\n            rewardInformation.rewardOracleAddress\n          ).latestAnswer();\n\n          aRewardsInformation[j] = rewardInformation;\n        }\n      }\n\n      reserveIncentiveData.aIncentiveData = IncentiveData(\n        baseData.aTokenAddress,\n        address(aTokenIncentiveController),\n        aRewardsInformation\n      );\n\n      // Get vTokens rewards information\n      IRewardsController vTokenIncentiveController = IRewardsController(\n        address(IncentivizedERC20(baseData.variableDebtTokenAddress).getIncentivesController())\n      );\n      RewardInfo[] memory vRewardsInformation;\n      if (address(vTokenIncentiveController) != address(0)) {\n        address[] memory vTokenRewardAddresses = vTokenIncentiveController.getRewardsByAsset(\n          baseData.variableDebtTokenAddress\n        );\n        vRewardsInformation = new RewardInfo[](vTokenRewardAddresses.length);\n        for (uint256 j = 0; j < vTokenRewardAddresses.length; ++j) {\n          RewardInfo memory rewardInformation;\n          rewardInformation.rewardTokenAddress = vTokenRewardAddresses[j];\n\n          (\n            rewardInformation.tokenIncentivesIndex,\n            rewardInformation.emissionPerSecond,\n            rewardInformation.incentivesLastUpdateTimestamp,\n            rewardInformation.emissionEndTimestamp\n          ) = vTokenIncentiveController.getRewardsData(\n            baseData.variableDebtTokenAddress,\n            rewardInformation.rewardTokenAddress\n          );\n\n          rewardInformation.precision = vTokenIncentiveController.getAssetDecimals(\n            baseData.variableDebtTokenAddress\n          );\n          rewardInformation.rewardTokenDecimals = IERC20Detailed(\n            rewardInformation.rewardTokenAddress\n          ).decimals();\n          rewardInformation.rewardTokenSymbol = IERC20Detailed(rewardInformation.rewardTokenAddress)\n            .symbol();\n\n          // Get price of reward token from Chainlink Proxy Oracle\n          rewardInformation.rewardOracleAddress = vTokenIncentiveController.getRewardOracle(\n            rewardInformation.rewardTokenAddress\n          );\n          rewardInformation.priceFeedDecimals = IEACAggregatorProxy(\n            rewardInformation.rewardOracleAddress\n          ).decimals();\n          rewardInformation.rewardPriceFeed = IEACAggregatorProxy(\n            rewardInformation.rewardOracleAddress\n          ).latestAnswer();\n\n          vRewardsInformation[j] = rewardInformation;\n        }\n      }\n\n      reserveIncentiveData.vIncentiveData = IncentiveData(\n        baseData.variableDebtTokenAddress,\n        address(vTokenIncentiveController),\n        vRewardsInformation\n      );\n\n      // Get sTokens rewards information\n      IRewardsController sTokenIncentiveController = IRewardsController(\n        address(IncentivizedERC20(baseData.stableDebtTokenAddress).getIncentivesController())\n      );\n      RewardInfo[] memory sRewardsInformation;\n      if (address(sTokenIncentiveController) != address(0)) {\n        address[] memory sTokenRewardAddresses = sTokenIncentiveController.getRewardsByAsset(\n          baseData.stableDebtTokenAddress\n        );\n        sRewardsInformation = new RewardInfo[](sTokenRewardAddresses.length);\n        for (uint256 j = 0; j < sTokenRewardAddresses.length; ++j) {\n          RewardInfo memory rewardInformation;\n          rewardInformation.rewardTokenAddress = sTokenRewardAddresses[j];\n\n          (\n            rewardInformation.tokenIncentivesIndex,\n            rewardInformation.emissionPerSecond,\n            rewardInformation.incentivesLastUpdateTimestamp,\n            rewardInformation.emissionEndTimestamp\n          ) = sTokenIncentiveController.getRewardsData(\n            baseData.stableDebtTokenAddress,\n            rewardInformation.rewardTokenAddress\n          );\n\n          rewardInformation.precision = sTokenIncentiveController.getAssetDecimals(\n            baseData.stableDebtTokenAddress\n          );\n          rewardInformation.rewardTokenDecimals = IERC20Detailed(\n            rewardInformation.rewardTokenAddress\n          ).decimals();\n          rewardInformation.rewardTokenSymbol = IERC20Detailed(rewardInformation.rewardTokenAddress)\n            .symbol();\n\n          // Get price of reward token from Chainlink Proxy Oracle\n          rewardInformation.rewardOracleAddress = sTokenIncentiveController.getRewardOracle(\n            rewardInformation.rewardTokenAddress\n          );\n          rewardInformation.priceFeedDecimals = IEACAggregatorProxy(\n            rewardInformation.rewardOracleAddress\n          ).decimals();\n          rewardInformation.rewardPriceFeed = IEACAggregatorProxy(\n            rewardInformation.rewardOracleAddress\n          ).latestAnswer();\n\n          sRewardsInformation[j] = rewardInformation;\n        }\n      }\n\n      reserveIncentiveData.sIncentiveData = IncentiveData(\n        baseData.stableDebtTokenAddress,\n        address(sTokenIncentiveController),\n        sRewardsInformation\n      );\n    }\n\n    return (reservesIncentiveData);\n  }\n\n  function getUserReservesIncentivesData(\n    IPoolAddressesProvider provider,\n    address user\n  ) external view override returns (UserReserveIncentiveData[] memory) {\n    return _getUserReservesIncentivesData(provider, user);\n  }\n\n  function _getUserReservesIncentivesData(\n    IPoolAddressesProvider provider,\n    address user\n  ) private view returns (UserReserveIncentiveData[] memory) {\n    IPool pool = IPool(provider.getPool());\n    address[] memory reserves = pool.getReservesList();\n\n    UserReserveIncentiveData[] memory userReservesIncentivesData = new UserReserveIncentiveData[](\n      user != address(0) ? reserves.length : 0\n    );\n\n    for (uint256 i = 0; i < reserves.length; i++) {\n      DataTypes.ReserveData memory baseData = pool.getReserveData(reserves[i]);\n\n      // user reserve data\n      userReservesIncentivesData[i].underlyingAsset = reserves[i];\n\n      IRewardsController aTokenIncentiveController = IRewardsController(\n        address(IncentivizedERC20(baseData.aTokenAddress).getIncentivesController())\n      );\n      if (address(aTokenIncentiveController) != address(0)) {\n        // get all rewards information from the asset\n        address[] memory aTokenRewardAddresses = aTokenIncentiveController.getRewardsByAsset(\n          baseData.aTokenAddress\n        );\n        UserRewardInfo[] memory aUserRewardsInformation = new UserRewardInfo[](\n          aTokenRewardAddresses.length\n        );\n        for (uint256 j = 0; j < aTokenRewardAddresses.length; ++j) {\n          UserRewardInfo memory userRewardInformation;\n          userRewardInformation.rewardTokenAddress = aTokenRewardAddresses[j];\n\n          userRewardInformation.tokenIncentivesUserIndex = aTokenIncentiveController\n            .getUserAssetIndex(\n              user,\n              baseData.aTokenAddress,\n              userRewardInformation.rewardTokenAddress\n            );\n\n          userRewardInformation.userUnclaimedRewards = aTokenIncentiveController\n            .getUserAccruedRewards(user, userRewardInformation.rewardTokenAddress);\n          userRewardInformation.rewardTokenDecimals = IERC20Detailed(\n            userRewardInformation.rewardTokenAddress\n          ).decimals();\n          userRewardInformation.rewardTokenSymbol = IERC20Detailed(\n            userRewardInformation.rewardTokenAddress\n          ).symbol();\n\n          // Get price of reward token from Chainlink Proxy Oracle\n          userRewardInformation.rewardOracleAddress = aTokenIncentiveController.getRewardOracle(\n            userRewardInformation.rewardTokenAddress\n          );\n          userRewardInformation.priceFeedDecimals = IEACAggregatorProxy(\n            userRewardInformation.rewardOracleAddress\n          ).decimals();\n          userRewardInformation.rewardPriceFeed = IEACAggregatorProxy(\n            userRewardInformation.rewardOracleAddress\n          ).latestAnswer();\n\n          aUserRewardsInformation[j] = userRewardInformation;\n        }\n\n        userReservesIncentivesData[i].aTokenIncentivesUserData = UserIncentiveData(\n          baseData.aTokenAddress,\n          address(aTokenIncentiveController),\n          aUserRewardsInformation\n        );\n      }\n\n      // variable debt token\n      IRewardsController vTokenIncentiveController = IRewardsController(\n        address(IncentivizedERC20(baseData.variableDebtTokenAddress).getIncentivesController())\n      );\n      if (address(vTokenIncentiveController) != address(0)) {\n        // get all rewards information from the asset\n        address[] memory vTokenRewardAddresses = vTokenIncentiveController.getRewardsByAsset(\n          baseData.variableDebtTokenAddress\n        );\n        UserRewardInfo[] memory vUserRewardsInformation = new UserRewardInfo[](\n          vTokenRewardAddresses.length\n        );\n        for (uint256 j = 0; j < vTokenRewardAddresses.length; ++j) {\n          UserRewardInfo memory userRewardInformation;\n          userRewardInformation.rewardTokenAddress = vTokenRewardAddresses[j];\n\n          userRewardInformation.tokenIncentivesUserIndex = vTokenIncentiveController\n            .getUserAssetIndex(\n              user,\n              baseData.variableDebtTokenAddress,\n              userRewardInformation.rewardTokenAddress\n            );\n\n          userRewardInformation.userUnclaimedRewards = vTokenIncentiveController\n            .getUserAccruedRewards(user, userRewardInformation.rewardTokenAddress);\n          userRewardInformation.rewardTokenDecimals = IERC20Detailed(\n            userRewardInformation.rewardTokenAddress\n          ).decimals();\n          userRewardInformation.rewardTokenSymbol = IERC20Detailed(\n            userRewardInformation.rewardTokenAddress\n          ).symbol();\n\n          // Get price of reward token from Chainlink Proxy Oracle\n          userRewardInformation.rewardOracleAddress = vTokenIncentiveController.getRewardOracle(\n            userRewardInformation.rewardTokenAddress\n          );\n          userRewardInformation.priceFeedDecimals = IEACAggregatorProxy(\n            userRewardInformation.rewardOracleAddress\n          ).decimals();\n          userRewardInformation.rewardPriceFeed = IEACAggregatorProxy(\n            userRewardInformation.rewardOracleAddress\n          ).latestAnswer();\n\n          vUserRewardsInformation[j] = userRewardInformation;\n        }\n\n        userReservesIncentivesData[i].vTokenIncentivesUserData = UserIncentiveData(\n          baseData.variableDebtTokenAddress,\n          address(aTokenIncentiveController),\n          vUserRewardsInformation\n        );\n      }\n\n      // stable debt token\n      IRewardsController sTokenIncentiveController = IRewardsController(\n        address(IncentivizedERC20(baseData.stableDebtTokenAddress).getIncentivesController())\n      );\n      if (address(sTokenIncentiveController) != address(0)) {\n        // get all rewards information from the asset\n        address[] memory sTokenRewardAddresses = sTokenIncentiveController.getRewardsByAsset(\n          baseData.stableDebtTokenAddress\n        );\n        UserRewardInfo[] memory sUserRewardsInformation = new UserRewardInfo[](\n          sTokenRewardAddresses.length\n        );\n        for (uint256 j = 0; j < sTokenRewardAddresses.length; ++j) {\n          UserRewardInfo memory userRewardInformation;\n          userRewardInformation.rewardTokenAddress = sTokenRewardAddresses[j];\n\n          userRewardInformation.tokenIncentivesUserIndex = sTokenIncentiveController\n            .getUserAssetIndex(\n              user,\n              baseData.stableDebtTokenAddress,\n              userRewardInformation.rewardTokenAddress\n            );\n\n          userRewardInformation.userUnclaimedRewards = sTokenIncentiveController\n            .getUserAccruedRewards(user, userRewardInformation.rewardTokenAddress);\n          userRewardInformation.rewardTokenDecimals = IERC20Detailed(\n            userRewardInformation.rewardTokenAddress\n          ).decimals();\n          userRewardInformation.rewardTokenSymbol = IERC20Detailed(\n            userRewardInformation.rewardTokenAddress\n          ).symbol();\n\n          // Get price of reward token from Chainlink Proxy Oracle\n          userRewardInformation.rewardOracleAddress = sTokenIncentiveController.getRewardOracle(\n            userRewardInformation.rewardTokenAddress\n          );\n          userRewardInformation.priceFeedDecimals = IEACAggregatorProxy(\n            userRewardInformation.rewardOracleAddress\n          ).decimals();\n          userRewardInformation.rewardPriceFeed = IEACAggregatorProxy(\n            userRewardInformation.rewardOracleAddress\n          ).latestAnswer();\n\n          sUserRewardsInformation[j] = userRewardInformation;\n        }\n\n        userReservesIncentivesData[i].sTokenIncentivesUserData = UserIncentiveData(\n          baseData.stableDebtTokenAddress,\n          address(aTokenIncentiveController),\n          sUserRewardsInformation\n        );\n      }\n    }\n\n    return (userReservesIncentivesData);\n  }\n}\n"},"contracts/misc/UiPoolDataProviderV3.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\nimport {IPool} from '@aave/core-v3/contracts/interfaces/IPool.sol';\nimport {IAaveOracle} from '@aave/core-v3/contracts/interfaces/IAaveOracle.sol';\nimport {IAToken} from '@aave/core-v3/contracts/interfaces/IAToken.sol';\nimport {IVariableDebtToken} from '@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol';\nimport {IStableDebtToken} from '@aave/core-v3/contracts/interfaces/IStableDebtToken.sol';\nimport {DefaultReserveInterestRateStrategy} from '@aave/core-v3/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol';\nimport {AaveProtocolDataProvider} from '@aave/core-v3/contracts/misc/AaveProtocolDataProvider.sol';\nimport {WadRayMath} from '@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol';\nimport {ReserveConfiguration} from '@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol';\nimport {UserConfiguration} from '@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol';\nimport {DataTypes} from '@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol';\nimport {IEACAggregatorProxy} from './interfaces/IEACAggregatorProxy.sol';\nimport {IERC20DetailedBytes} from './interfaces/IERC20DetailedBytes.sol';\nimport {IUiPoolDataProviderV3} from './interfaces/IUiPoolDataProviderV3.sol';\n\ncontract UiPoolDataProviderV3 is IUiPoolDataProviderV3 {\n  using WadRayMath for uint256;\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n  using UserConfiguration for DataTypes.UserConfigurationMap;\n\n  IEACAggregatorProxy public immutable networkBaseTokenPriceInUsdProxyAggregator;\n  IEACAggregatorProxy public immutable marketReferenceCurrencyPriceInUsdProxyAggregator;\n  uint256 public constant ETH_CURRENCY_UNIT = 1 ether;\n  address public constant MKR_ADDRESS = 0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2;\n\n  constructor(\n    IEACAggregatorProxy _networkBaseTokenPriceInUsdProxyAggregator,\n    IEACAggregatorProxy _marketReferenceCurrencyPriceInUsdProxyAggregator\n  ) {\n    networkBaseTokenPriceInUsdProxyAggregator = _networkBaseTokenPriceInUsdProxyAggregator;\n    marketReferenceCurrencyPriceInUsdProxyAggregator = _marketReferenceCurrencyPriceInUsdProxyAggregator;\n  }\n\n  function getReservesList(\n    IPoolAddressesProvider provider\n  ) public view override returns (address[] memory) {\n    IPool pool = IPool(provider.getPool());\n    return pool.getReservesList();\n  }\n\n  function getReservesData(\n    IPoolAddressesProvider provider\n  ) public view override returns (AggregatedReserveData[] memory, BaseCurrencyInfo memory) {\n    IAaveOracle oracle = IAaveOracle(provider.getPriceOracle());\n    IPool pool = IPool(provider.getPool());\n    AaveProtocolDataProvider poolDataProvider = AaveProtocolDataProvider(\n      provider.getPoolDataProvider()\n    );\n\n    address[] memory reserves = pool.getReservesList();\n    AggregatedReserveData[] memory reservesData = new AggregatedReserveData[](reserves.length);\n\n    for (uint256 i = 0; i < reserves.length; i++) {\n      AggregatedReserveData memory reserveData = reservesData[i];\n      reserveData.underlyingAsset = reserves[i];\n\n      // reserve current state\n      DataTypes.ReserveData memory baseData = pool.getReserveData(reserveData.underlyingAsset);\n      //the liquidity index. Expressed in ray\n      reserveData.liquidityIndex = baseData.liquidityIndex;\n      //variable borrow index. Expressed in ray\n      reserveData.variableBorrowIndex = baseData.variableBorrowIndex;\n      //the current supply rate. Expressed in ray\n      reserveData.liquidityRate = baseData.currentLiquidityRate;\n      //the current variable borrow rate. Expressed in ray\n      reserveData.variableBorrowRate = baseData.currentVariableBorrowRate;\n      //the current stable borrow rate. Expressed in ray\n      reserveData.stableBorrowRate = baseData.currentStableBorrowRate;\n      reserveData.lastUpdateTimestamp = baseData.lastUpdateTimestamp;\n      reserveData.aTokenAddress = baseData.aTokenAddress;\n      reserveData.stableDebtTokenAddress = baseData.stableDebtTokenAddress;\n      reserveData.variableDebtTokenAddress = baseData.variableDebtTokenAddress;\n      //address of the interest rate strategy\n      reserveData.interestRateStrategyAddress = baseData.interestRateStrategyAddress;\n      reserveData.priceInMarketReferenceCurrency = oracle.getAssetPrice(\n        reserveData.underlyingAsset\n      );\n      reserveData.priceOracle = oracle.getSourceOfAsset(reserveData.underlyingAsset);\n      reserveData.availableLiquidity = IERC20Detailed(reserveData.underlyingAsset).balanceOf(\n        reserveData.aTokenAddress\n      );\n      (\n        reserveData.totalPrincipalStableDebt,\n        ,\n        reserveData.averageStableRate,\n        reserveData.stableDebtLastUpdateTimestamp\n      ) = IStableDebtToken(reserveData.stableDebtTokenAddress).getSupplyData();\n      reserveData.totalScaledVariableDebt = IVariableDebtToken(reserveData.variableDebtTokenAddress)\n        .scaledTotalSupply();\n\n      // Due we take the symbol from underlying token we need a special case for $MKR as symbol() returns bytes32\n      if (address(reserveData.underlyingAsset) == address(MKR_ADDRESS)) {\n        bytes32 symbol = IERC20DetailedBytes(reserveData.underlyingAsset).symbol();\n        bytes32 name = IERC20DetailedBytes(reserveData.underlyingAsset).name();\n        reserveData.symbol = bytes32ToString(symbol);\n        reserveData.name = bytes32ToString(name);\n      } else {\n        reserveData.symbol = IERC20Detailed(reserveData.underlyingAsset).symbol();\n        reserveData.name = IERC20Detailed(reserveData.underlyingAsset).name();\n      }\n\n      //stores the reserve configuration\n      DataTypes.ReserveConfigurationMap memory reserveConfigurationMap = baseData.configuration;\n      uint256 eModeCategoryId;\n      (\n        reserveData.baseLTVasCollateral,\n        reserveData.reserveLiquidationThreshold,\n        reserveData.reserveLiquidationBonus,\n        reserveData.decimals,\n        reserveData.reserveFactor,\n        eModeCategoryId\n      ) = reserveConfigurationMap.getParams();\n      reserveData.usageAsCollateralEnabled = reserveData.baseLTVasCollateral != 0;\n\n      (\n        reserveData.isActive,\n        reserveData.isFrozen,\n        reserveData.borrowingEnabled,\n        reserveData.stableBorrowRateEnabled,\n        reserveData.isPaused\n      ) = reserveConfigurationMap.getFlags();\n\n      // interest rates\n      try\n        DefaultReserveInterestRateStrategy(reserveData.interestRateStrategyAddress)\n          .getVariableRateSlope1()\n      returns (uint256 res) {\n        reserveData.variableRateSlope1 = res;\n      } catch {}\n      try\n        DefaultReserveInterestRateStrategy(reserveData.interestRateStrategyAddress)\n          .getVariableRateSlope2()\n      returns (uint256 res) {\n        reserveData.variableRateSlope2 = res;\n      } catch {}\n      try\n        DefaultReserveInterestRateStrategy(reserveData.interestRateStrategyAddress)\n          .getStableRateSlope1()\n      returns (uint256 res) {\n        reserveData.stableRateSlope1 = res;\n      } catch {}\n      try\n        DefaultReserveInterestRateStrategy(reserveData.interestRateStrategyAddress)\n          .getStableRateSlope2()\n      returns (uint256 res) {\n        reserveData.stableRateSlope2 = res;\n      } catch {}\n      try\n        DefaultReserveInterestRateStrategy(reserveData.interestRateStrategyAddress)\n          .getBaseStableBorrowRate()\n      returns (uint256 res) {\n        reserveData.baseStableBorrowRate = res;\n      } catch {}\n      try\n        DefaultReserveInterestRateStrategy(reserveData.interestRateStrategyAddress)\n          .getBaseVariableBorrowRate()\n      returns (uint256 res) {\n        reserveData.baseVariableBorrowRate = res;\n      } catch {}\n      try\n        DefaultReserveInterestRateStrategy(reserveData.interestRateStrategyAddress)\n          .OPTIMAL_USAGE_RATIO()\n      returns (uint256 res) {\n        reserveData.optimalUsageRatio = res;\n      } catch {}\n\n      // v3 only\n      reserveData.eModeCategoryId = uint8(eModeCategoryId);\n      reserveData.debtCeiling = reserveConfigurationMap.getDebtCeiling();\n      reserveData.debtCeilingDecimals = poolDataProvider.getDebtCeilingDecimals();\n      (reserveData.borrowCap, reserveData.supplyCap) = reserveConfigurationMap.getCaps();\n\n      try poolDataProvider.getFlashLoanEnabled(reserveData.underlyingAsset) returns (\n        bool flashLoanEnabled\n      ) {\n        reserveData.flashLoanEnabled = flashLoanEnabled;\n      } catch (bytes memory) {\n        reserveData.flashLoanEnabled = true;\n      }\n\n      reserveData.isSiloedBorrowing = reserveConfigurationMap.getSiloedBorrowing();\n      reserveData.unbacked = baseData.unbacked;\n      reserveData.isolationModeTotalDebt = baseData.isolationModeTotalDebt;\n      reserveData.accruedToTreasury = baseData.accruedToTreasury;\n\n      DataTypes.EModeCategory memory categoryData = pool.getEModeCategoryData(\n        reserveData.eModeCategoryId\n      );\n      reserveData.eModeLtv = categoryData.ltv;\n      reserveData.eModeLiquidationThreshold = categoryData.liquidationThreshold;\n      reserveData.eModeLiquidationBonus = categoryData.liquidationBonus;\n      // each eMode category may or may not have a custom oracle to override the individual assets price oracles\n      reserveData.eModePriceSource = categoryData.priceSource;\n      reserveData.eModeLabel = categoryData.label;\n\n      reserveData.borrowableInIsolation = reserveConfigurationMap.getBorrowableInIsolation();\n    }\n\n    BaseCurrencyInfo memory baseCurrencyInfo;\n    baseCurrencyInfo.networkBaseTokenPriceInUsd = networkBaseTokenPriceInUsdProxyAggregator\n      .latestAnswer();\n    baseCurrencyInfo.networkBaseTokenPriceDecimals = networkBaseTokenPriceInUsdProxyAggregator\n      .decimals();\n\n    try oracle.BASE_CURRENCY_UNIT() returns (uint256 baseCurrencyUnit) {\n      baseCurrencyInfo.marketReferenceCurrencyUnit = baseCurrencyUnit;\n      baseCurrencyInfo.marketReferenceCurrencyPriceInUsd = int256(baseCurrencyUnit);\n    } catch (bytes memory /*lowLevelData*/) {\n      baseCurrencyInfo.marketReferenceCurrencyUnit = ETH_CURRENCY_UNIT;\n      baseCurrencyInfo\n        .marketReferenceCurrencyPriceInUsd = marketReferenceCurrencyPriceInUsdProxyAggregator\n        .latestAnswer();\n    }\n\n    return (reservesData, baseCurrencyInfo);\n  }\n\n  function getUserReservesData(\n    IPoolAddressesProvider provider,\n    address user\n  ) external view override returns (UserReserveData[] memory, uint8) {\n    IPool pool = IPool(provider.getPool());\n    address[] memory reserves = pool.getReservesList();\n    DataTypes.UserConfigurationMap memory userConfig = pool.getUserConfiguration(user);\n\n    uint8 userEmodeCategoryId = uint8(pool.getUserEMode(user));\n\n    UserReserveData[] memory userReservesData = new UserReserveData[](\n      user != address(0) ? reserves.length : 0\n    );\n\n    for (uint256 i = 0; i < reserves.length; i++) {\n      DataTypes.ReserveData memory baseData = pool.getReserveData(reserves[i]);\n\n      // user reserve data\n      userReservesData[i].underlyingAsset = reserves[i];\n      userReservesData[i].scaledATokenBalance = IAToken(baseData.aTokenAddress).scaledBalanceOf(\n        user\n      );\n      userReservesData[i].usageAsCollateralEnabledOnUser = userConfig.isUsingAsCollateral(i);\n\n      if (userConfig.isBorrowing(i)) {\n        userReservesData[i].scaledVariableDebt = IVariableDebtToken(\n          baseData.variableDebtTokenAddress\n        ).scaledBalanceOf(user);\n        userReservesData[i].principalStableDebt = IStableDebtToken(baseData.stableDebtTokenAddress)\n          .principalBalanceOf(user);\n        if (userReservesData[i].principalStableDebt != 0) {\n          userReservesData[i].stableBorrowRate = IStableDebtToken(baseData.stableDebtTokenAddress)\n            .getUserStableRate(user);\n          userReservesData[i].stableBorrowLastUpdateTimestamp = IStableDebtToken(\n            baseData.stableDebtTokenAddress\n          ).getUserLastUpdated(user);\n        }\n      }\n    }\n\n    return (userReservesData, userEmodeCategoryId);\n  }\n\n  function bytes32ToString(bytes32 _bytes32) public pure returns (string memory) {\n    uint8 i = 0;\n    while (i < 32 && _bytes32[i] != 0) {\n      i++;\n    }\n    bytes memory bytesArray = new bytes(i);\n    for (i = 0; i < 32 && _bytes32[i] != 0; i++) {\n      bytesArray[i] = _bytes32[i];\n    }\n    return string(bytesArray);\n  }\n}\n"},"contracts/misc/WalletBalanceProvider.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {Address} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol';\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\n\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\nimport {IPool} from '@aave/core-v3/contracts/interfaces/IPool.sol';\nimport {GPv2SafeERC20} from '@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {ReserveConfiguration} from '@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol';\nimport {DataTypes} from '@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol';\n\n/**\n * @title WalletBalanceProvider contract\n * @author Aave, influenced by https://github.com/wbobeirne/eth-balance-checker/blob/master/contracts/BalanceChecker.sol\n * @notice Implements a logic of getting multiple tokens balance for one user address\n * @dev NOTE: THIS CONTRACT IS NOT USED WITHIN THE AAVE PROTOCOL. It's an accessory contract used to reduce the number of calls\n * towards the blockchain from the Aave backend.\n **/\ncontract WalletBalanceProvider {\n  using Address for address payable;\n  using Address for address;\n  using GPv2SafeERC20 for IERC20;\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n\n  address constant MOCK_ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;\n\n  /**\n    @dev Fallback function, don't accept any ETH\n    **/\n  receive() external payable {\n    //only contracts can send ETH to the core\n    require(msg.sender.isContract(), '22');\n  }\n\n  /**\n    @dev Check the token balance of a wallet in a token contract\n\n    Returns the balance of the token for user. Avoids possible errors:\n      - return 0 on non-contract address\n    **/\n  function balanceOf(address user, address token) public view returns (uint256) {\n    if (token == MOCK_ETH_ADDRESS) {\n      return user.balance; // ETH balance\n      // check if token is actually a contract\n    } else if (token.isContract()) {\n      return IERC20(token).balanceOf(user);\n    }\n    revert('INVALID_TOKEN');\n  }\n\n  /**\n   * @notice Fetches, for a list of _users and _tokens (ETH included with mock address), the balances\n   * @param users The list of users\n   * @param tokens The list of tokens\n   * @return And array with the concatenation of, for each user, his/her balances\n   **/\n  function batchBalanceOf(\n    address[] calldata users,\n    address[] calldata tokens\n  ) external view returns (uint256[] memory) {\n    uint256[] memory balances = new uint256[](users.length * tokens.length);\n\n    for (uint256 i = 0; i < users.length; i++) {\n      for (uint256 j = 0; j < tokens.length; j++) {\n        balances[i * tokens.length + j] = balanceOf(users[i], tokens[j]);\n      }\n    }\n\n    return balances;\n  }\n\n  /**\n    @dev provides balances of user wallet for all reserves available on the pool\n    */\n  function getUserWalletBalances(\n    address provider,\n    address user\n  ) external view returns (address[] memory, uint256[] memory) {\n    IPool pool = IPool(IPoolAddressesProvider(provider).getPool());\n\n    address[] memory reserves = pool.getReservesList();\n    address[] memory reservesWithEth = new address[](reserves.length + 1);\n    for (uint256 i = 0; i < reserves.length; i++) {\n      reservesWithEth[i] = reserves[i];\n    }\n    reservesWithEth[reserves.length] = MOCK_ETH_ADDRESS;\n\n    uint256[] memory balances = new uint256[](reservesWithEth.length);\n\n    for (uint256 j = 0; j < reserves.length; j++) {\n      DataTypes.ReserveConfigurationMap memory configuration = pool.getConfiguration(\n        reservesWithEth[j]\n      );\n\n      (bool isActive, , , , ) = configuration.getFlags();\n\n      if (!isActive) {\n        balances[j] = 0;\n        continue;\n      }\n      balances[j] = balanceOf(user, reservesWithEth[j]);\n    }\n    balances[reserves.length] = balanceOf(user, MOCK_ETH_ADDRESS);\n\n    return (reservesWithEth, balances);\n  }\n}\n"},"contracts/misc/WrappedTokenGatewayV3.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\nimport {GPv2SafeERC20} from '@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {IWETH} from '@aave/core-v3/contracts/misc/interfaces/IWETH.sol';\nimport {IPool} from '@aave/core-v3/contracts/interfaces/IPool.sol';\nimport {IAToken} from '@aave/core-v3/contracts/interfaces/IAToken.sol';\nimport {ReserveConfiguration} from '@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol';\nimport {UserConfiguration} from '@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol';\nimport {DataTypes} from '@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol';\nimport {IWrappedTokenGatewayV3} from './interfaces/IWrappedTokenGatewayV3.sol';\nimport {DataTypesHelper} from '../libraries/DataTypesHelper.sol';\n\n/**\n * @dev This contract is an upgrade of the WrappedTokenGatewayV3 contract, with immutable pool address.\n * This contract keeps the same interface of the deprecated WrappedTokenGatewayV3 contract.\n */\ncontract WrappedTokenGatewayV3 is IWrappedTokenGatewayV3, Ownable {\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\n  using UserConfiguration for DataTypes.UserConfigurationMap;\n  using GPv2SafeERC20 for IERC20;\n\n  IWETH internal immutable WETH;\n  IPool internal immutable POOL;\n\n  /**\n   * @dev Sets the WETH address and the PoolAddressesProvider address. Infinite approves pool.\n   * @param weth Address of the Wrapped Ether contract\n   * @param owner Address of the owner of this contract\n   **/\n  constructor(address weth, address owner, IPool pool) {\n    WETH = IWETH(weth);\n    POOL = pool;\n    transferOwnership(owner);\n    IWETH(weth).approve(address(pool), type(uint256).max);\n  }\n\n  /**\n   * @dev deposits WETH into the reserve, using native ETH. A corresponding amount of the overlying asset (aTokens)\n   * is minted.\n   * @param onBehalfOf address of the user who will receive the aTokens representing the deposit\n   * @param referralCode integrators are assigned a referral code and can potentially receive rewards.\n   **/\n  function depositETH(address, address onBehalfOf, uint16 referralCode) external payable override {\n    WETH.deposit{value: msg.value}();\n    POOL.deposit(address(WETH), msg.value, onBehalfOf, referralCode);\n  }\n\n  /**\n   * @dev withdraws the WETH _reserves of msg.sender.\n   * @param amount amount of aWETH to withdraw and receive native ETH\n   * @param to address of the user who will receive native ETH\n   */\n  function withdrawETH(address, uint256 amount, address to) external override {\n    IAToken aWETH = IAToken(POOL.getReserveData(address(WETH)).aTokenAddress);\n    uint256 userBalance = aWETH.balanceOf(msg.sender);\n    uint256 amountToWithdraw = amount;\n\n    // if amount is equal to uint(-1), the user wants to redeem everything\n    if (amount == type(uint256).max) {\n      amountToWithdraw = userBalance;\n    }\n    aWETH.transferFrom(msg.sender, address(this), amountToWithdraw);\n    POOL.withdraw(address(WETH), amountToWithdraw, address(this));\n    WETH.withdraw(amountToWithdraw);\n    _safeTransferETH(to, amountToWithdraw);\n  }\n\n  /**\n   * @dev repays a borrow on the WETH reserve, for the specified amount (or for the whole amount, if uint256(-1) is specified).\n   * @param amount the amount to repay, or uint256(-1) if the user wants to repay everything\n   * @param rateMode the rate mode to repay\n   * @param onBehalfOf the address for which msg.sender is repaying\n   */\n  function repayETH(\n    address,\n    uint256 amount,\n    uint256 rateMode,\n    address onBehalfOf\n  ) external payable override {\n    (uint256 stableDebt, uint256 variableDebt) = DataTypesHelper.getUserCurrentDebt(\n      onBehalfOf,\n      POOL.getReserveData(address(WETH))\n    );\n\n    uint256 paybackAmount = DataTypes.InterestRateMode(rateMode) ==\n      DataTypes.InterestRateMode.STABLE\n      ? stableDebt\n      : variableDebt;\n\n    if (amount < paybackAmount) {\n      paybackAmount = amount;\n    }\n    require(msg.value >= paybackAmount, 'msg.value is less than repayment amount');\n    WETH.deposit{value: paybackAmount}();\n    POOL.repay(address(WETH), msg.value, rateMode, onBehalfOf);\n\n    // refund remaining dust eth\n    if (msg.value > paybackAmount) _safeTransferETH(msg.sender, msg.value - paybackAmount);\n  }\n\n  /**\n   * @dev borrow WETH, unwraps to ETH and send both the ETH and DebtTokens to msg.sender, via `approveDelegation` and onBehalf argument in `Pool.borrow`.\n   * @param amount the amount of ETH to borrow\n   * @param interestRateMode the interest rate mode\n   * @param referralCode integrators are assigned a referral code and can potentially receive rewards\n   */\n  function borrowETH(\n    address,\n    uint256 amount,\n    uint256 interestRateMode,\n    uint16 referralCode\n  ) external override {\n    POOL.borrow(address(WETH), amount, interestRateMode, referralCode, msg.sender);\n    WETH.withdraw(amount);\n    _safeTransferETH(msg.sender, amount);\n  }\n\n  /**\n   * @dev withdraws the WETH _reserves of msg.sender.\n   * @param amount amount of aWETH to withdraw and receive native ETH\n   * @param to address of the user who will receive native ETH\n   * @param deadline validity deadline of permit and so depositWithPermit signature\n   * @param permitV V parameter of ERC712 permit sig\n   * @param permitR R parameter of ERC712 permit sig\n   * @param permitS S parameter of ERC712 permit sig\n   */\n  function withdrawETHWithPermit(\n    address,\n    uint256 amount,\n    address to,\n    uint256 deadline,\n    uint8 permitV,\n    bytes32 permitR,\n    bytes32 permitS\n  ) external override {\n    IAToken aWETH = IAToken(POOL.getReserveData(address(WETH)).aTokenAddress);\n    uint256 userBalance = aWETH.balanceOf(msg.sender);\n    uint256 amountToWithdraw = amount;\n\n    // if amount is equal to type(uint256).max, the user wants to redeem everything\n    if (amount == type(uint256).max) {\n      amountToWithdraw = userBalance;\n    }\n    // permit `amount` rather than `amountToWithdraw` to make it easier for front-ends and integrators\n    aWETH.permit(msg.sender, address(this), amount, deadline, permitV, permitR, permitS);\n    aWETH.transferFrom(msg.sender, address(this), amountToWithdraw);\n    POOL.withdraw(address(WETH), amountToWithdraw, address(this));\n    WETH.withdraw(amountToWithdraw);\n    _safeTransferETH(to, amountToWithdraw);\n  }\n\n  /**\n   * @dev transfer ETH to an address, revert if it fails.\n   * @param to recipient of the transfer\n   * @param value the amount to send\n   */\n  function _safeTransferETH(address to, uint256 value) internal {\n    (bool success, ) = to.call{value: value}(new bytes(0));\n    require(success, 'ETH_TRANSFER_FAILED');\n  }\n\n  /**\n   * @dev transfer ERC20 from the utility contract, for ERC20 recovery in case of stuck tokens due\n   * direct transfers to the contract address.\n   * @param token token to transfer\n   * @param to recipient of the transfer\n   * @param amount amount to send\n   */\n  function emergencyTokenTransfer(address token, address to, uint256 amount) external onlyOwner {\n    IERC20(token).safeTransfer(to, amount);\n  }\n\n  /**\n   * @dev transfer native Ether from the utility contract, for native Ether recovery in case of stuck Ether\n   * due to selfdestructs or ether transfers to the pre-computed contract address before deployment.\n   * @param to recipient of the transfer\n   * @param amount amount to send\n   */\n  function emergencyEtherTransfer(address to, uint256 amount) external onlyOwner {\n    _safeTransferETH(to, amount);\n  }\n\n  /**\n   * @dev Get WETH address used by WrappedTokenGatewayV3\n   */\n  function getWETHAddress() external view returns (address) {\n    return address(WETH);\n  }\n\n  /**\n   * @dev Only WETH contract is allowed to transfer ETH here. Prevent other addresses to send Ether to this contract.\n   */\n  receive() external payable {\n    require(msg.sender == address(WETH), 'Receive not allowed');\n  }\n\n  /**\n   * @dev Revert fallback calls\n   */\n  fallback() external payable {\n    revert('Fallback not allowed');\n  }\n}\n"},"contracts/mocks/ATokenMock.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {IRewardsController} from '../rewards/interfaces/IRewardsController.sol';\n\ncontract ATokenMock {\n  IRewardsController public _aic;\n  uint256 internal _userBalance;\n  uint256 internal _totalSupply;\n  uint256 internal immutable _decimals;\n\n  // hack to be able to test event from Distribution manager properly\n  event AssetConfigUpdated(\n    address indexed asset,\n    address indexed reward,\n    uint256 emission,\n    uint256 distributionEnd,\n    uint256 assetIndex\n  );\n\n  event Accrued(\n    address indexed asset,\n    address indexed user,\n    uint256 assetIndex,\n    uint256 userIndex,\n    uint256 rewardsAccrued\n  );\n\n  constructor(IRewardsController aic, uint256 decimals) {\n    _aic = aic;\n    _decimals = decimals;\n  }\n\n  function handleActionOnAic(address user, uint256 totalSupply, uint256 userBalance) external {\n    _aic.handleAction(user, totalSupply, userBalance);\n  }\n\n  function doubleHandleActionOnAic(\n    address user,\n    uint256 totalSupply,\n    uint256 userBalance\n  ) external {\n    _aic.handleAction(user, totalSupply, userBalance);\n    _aic.handleAction(user, totalSupply, userBalance);\n  }\n\n  function setUserBalanceAndSupply(uint256 userBalance, uint256 totalSupply) public {\n    _userBalance = userBalance;\n    _totalSupply = totalSupply;\n  }\n\n  function getScaledUserBalanceAndSupply(address) external view returns (uint256, uint256) {\n    return (_userBalance, _totalSupply);\n  }\n\n  function scaledTotalSupply() external view returns (uint256) {\n    return _totalSupply;\n  }\n\n  function totalSupply() external view returns (uint256) {\n    return _totalSupply;\n  }\n\n  function cleanUserState() external {\n    _userBalance = 0;\n    _totalSupply = 0;\n  }\n\n  function decimals() external view returns (uint256) {\n    return _decimals;\n  }\n}\n"},"contracts/mocks/attacks/SelfdestructTransfer.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\ncontract SelfdestructTransfer {\n  function destroyAndTransfer(address payable to) external payable {\n    selfdestruct(to);\n  }\n}\n"},"contracts/mocks/MockBadTransferStrategy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {ITransferStrategyBase} from '../rewards/interfaces/ITransferStrategyBase.sol';\nimport {TransferStrategyBase} from '../rewards/transfer-strategies/TransferStrategyBase.sol';\nimport {GPv2SafeERC20} from '@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\n\n/**\n * @title MockBadTransferStrategy\n * @notice Transfer strategy that always return false at performTransfer and does noop.\n * @author Aave\n **/\ncontract MockBadTransferStrategy is TransferStrategyBase {\n  using GPv2SafeERC20 for IERC20;\n\n  // Added storage variable to prevent warnings at compilation for performTransfer\n  uint256 ignoreWarning;\n\n  constructor(\n    address incentivesController,\n    address rewardsAdmin\n  ) TransferStrategyBase(incentivesController, rewardsAdmin) {}\n\n  /// @inheritdoc TransferStrategyBase\n  function performTransfer(\n    address,\n    address,\n    uint256\n  ) external override onlyIncentivesController returns (bool) {\n    ignoreWarning = 1;\n    return false;\n  }\n}\n"},"contracts/mocks/swap/MockParaSwapAugustus.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {IParaSwapAugustus} from '../../adapters/paraswap/interfaces/IParaSwapAugustus.sol';\nimport {MockParaSwapTokenTransferProxy} from './MockParaSwapTokenTransferProxy.sol';\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\nimport {MintableERC20} from '@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol';\n\ncontract MockParaSwapAugustus is IParaSwapAugustus {\n  MockParaSwapTokenTransferProxy immutable TOKEN_TRANSFER_PROXY;\n  bool _expectingSwap;\n  address _expectedFromToken;\n  address _expectedToToken;\n\n  uint256 _expectedFromAmountMin;\n  uint256 _expectedFromAmountMax;\n  uint256 _receivedAmount;\n\n  uint256 _fromAmount;\n  uint256 _expectedToAmountMax;\n  uint256 _expectedToAmountMin;\n\n  constructor() {\n    TOKEN_TRANSFER_PROXY = new MockParaSwapTokenTransferProxy();\n  }\n\n  function getTokenTransferProxy() external view override returns (address) {\n    return address(TOKEN_TRANSFER_PROXY);\n  }\n\n  function expectSwap(\n    address fromToken,\n    address toToken,\n    uint256 fromAmountMin,\n    uint256 fromAmountMax,\n    uint256 receivedAmount\n  ) external {\n    _expectingSwap = true;\n    _expectedFromToken = fromToken;\n    _expectedToToken = toToken;\n    _expectedFromAmountMin = fromAmountMin;\n    _expectedFromAmountMax = fromAmountMax;\n    _receivedAmount = receivedAmount;\n  }\n\n  function expectBuy(\n    address fromToken,\n    address toToken,\n    uint256 fromAmount,\n    uint256 toAmountMin,\n    uint256 toAmountMax\n  ) external {\n    _expectingSwap = true;\n    _expectedFromToken = fromToken;\n    _expectedToToken = toToken;\n    _fromAmount = fromAmount;\n    _expectedToAmountMin = toAmountMin;\n    _expectedToAmountMax = toAmountMax;\n  }\n\n  function swap(\n    address fromToken,\n    address toToken,\n    uint256 fromAmount,\n    uint256 toAmount\n  ) external returns (uint256) {\n    require(_expectingSwap, 'Not expecting swap');\n    require(fromToken == _expectedFromToken, 'Unexpected from token');\n    require(toToken == _expectedToToken, 'Unexpected to token');\n    require(\n      fromAmount >= _expectedFromAmountMin && fromAmount <= _expectedFromAmountMax,\n      'From amount out of range'\n    );\n    require(_receivedAmount >= toAmount, 'Received amount of tokens are less than expected');\n    TOKEN_TRANSFER_PROXY.transferFrom(fromToken, msg.sender, address(this), fromAmount);\n    MintableERC20(toToken).mint(_receivedAmount);\n    IERC20(toToken).transfer(msg.sender, _receivedAmount);\n    _expectingSwap = false;\n    return _receivedAmount;\n  }\n\n  function buy(\n    address fromToken,\n    address toToken,\n    uint256 fromAmount,\n    uint256 toAmount\n  ) external returns (uint256) {\n    require(_expectingSwap, 'Not expecting swap');\n    require(fromToken == _expectedFromToken, 'Unexpected from token');\n    require(toToken == _expectedToToken, 'Unexpected to token');\n    require(\n      toAmount >= _expectedToAmountMin && toAmount <= _expectedToAmountMax,\n      'To amount out of range'\n    );\n    require(_fromAmount <= fromAmount, 'From amount of tokens are higher than expected');\n    TOKEN_TRANSFER_PROXY.transferFrom(fromToken, msg.sender, address(this), _fromAmount);\n    MintableERC20(toToken).mint(toAmount);\n    IERC20(toToken).transfer(msg.sender, toAmount);\n    _expectingSwap = false;\n    return fromAmount;\n  }\n}\n"},"contracts/mocks/swap/MockParaSwapAugustusRegistry.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {IParaSwapAugustusRegistry} from '../../adapters/paraswap/interfaces/IParaSwapAugustusRegistry.sol';\n\ncontract MockParaSwapAugustusRegistry is IParaSwapAugustusRegistry {\n  address immutable AUGUSTUS;\n\n  constructor(address augustus) {\n    AUGUSTUS = augustus;\n  }\n\n  function isValidAugustus(address augustus) external view override returns (bool) {\n    return augustus == AUGUSTUS;\n  }\n}\n"},"contracts/mocks/swap/MockParaSwapTokenTransferProxy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\n\ncontract MockParaSwapTokenTransferProxy is Ownable {\n  function transferFrom(\n    address token,\n    address from,\n    address to,\n    uint256 amount\n  ) external onlyOwner {\n    IERC20(token).transferFrom(from, to, amount);\n  }\n}\n"},"contracts/mocks/testnet-helpers/Faucet.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\nimport {TestnetERC20} from './TestnetERC20.sol';\nimport {IFaucet} from './IFaucet.sol';\n\n/**\n * @title Faucet\n * @dev Ownable Faucet Contract\n */\ncontract Faucet is IFaucet, Ownable {\n  uint256 internal maximumMintAmount;\n\n  // Mapping to control mint of assets (allowed by default)\n  mapping(address => bool) internal _nonMintable;\n\n  // If _permissioned is enabled, then only owner can mint Testnet ERC20 tokens\n  // If disabled, anyone can call mint at the faucet, for PoC environments\n  bool internal _permissioned;\n\n  constructor(address owner, bool permissioned, uint256 maxMinAmount) {\n    require(owner != address(0));\n    transferOwnership(owner);\n    _permissioned = permissioned;\n    maximumMintAmount = maxMinAmount;\n  }\n\n  /**\n   * @dev Function modifier, if _permissioned is enabled then msg.sender is required to be the owner\n   */\n  modifier onlyOwnerIfPermissioned() {\n    if (_permissioned == true) {\n      require(owner() == _msgSender(), 'Ownable: caller is not the owner');\n    }\n    _;\n  }\n\n  /// @inheritdoc IFaucet\n  function mint(\n    address token,\n    address to,\n    uint256 amount\n  ) external override onlyOwnerIfPermissioned returns (uint256) {\n    require(!_nonMintable[token], 'Error: not mintable');\n    require(\n      amount <= maximumMintAmount * (10 ** TestnetERC20(token).decimals()),\n      'Error: Mint limit transaction exceeded'\n    );\n\n    TestnetERC20(token).mint(to, amount);\n    return amount;\n  }\n\n  /// @inheritdoc IFaucet\n  function setPermissioned(bool permissioned) external override onlyOwner {\n    _permissioned = permissioned;\n  }\n\n  /// @inheritdoc IFaucet\n  function isPermissioned() external view override returns (bool) {\n    return _permissioned;\n  }\n\n  /// @inheritdoc IFaucet\n  function setMintable(address asset, bool active) external override onlyOwner {\n    _nonMintable[asset] = !active;\n  }\n\n  /// @inheritdoc IFaucet\n  function isMintable(address asset) external view override returns (bool) {\n    return !_nonMintable[asset];\n  }\n\n  /// @inheritdoc IFaucet\n  function transferOwnershipOfChild(\n    address[] calldata childContracts,\n    address newOwner\n  ) external override onlyOwner {\n    for (uint256 i = 0; i < childContracts.length; i++) {\n      Ownable(childContracts[i]).transferOwnership(newOwner);\n    }\n  }\n\n  /// @inheritdoc IFaucet\n  function setProtectedOfChild(\n    address[] calldata childContracts,\n    bool state\n  ) external override onlyOwner {\n    for (uint256 i = 0; i < childContracts.length; i++) {\n      TestnetERC20(childContracts[i]).setProtected(state);\n    }\n  }\n\n\n  /// @inheritdoc IFaucet\n  function setMaximumMintAmount(uint256 newMaxMintAmount) external override onlyOwner {\n    maximumMintAmount = newMaxMintAmount;\n  }\n\n  /// @inheritdoc IFaucet\n  function getMaximumMintAmount() external view override returns (uint256) {\n    return maximumMintAmount;\n  }\n}\n"},"contracts/mocks/testnet-helpers/IFaucet.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\ninterface IFaucet {\n  /**\n   * @notice Function to mint Testnet tokens to the destination address\n   * @param token The address of the token to perform the mint\n   * @param to The address to send the minted tokens\n   * @param amount The amount of tokens to mint\n   * @return The amount minted\n   **/\n  function mint(address token, address to, uint256 amount) external returns (uint256);\n\n  /**\n   * @notice Enable or disable the need of authentication to call `mint` function\n   * @param value If true, ask for authentication at `mint` function, if false, disable the authentication\n   */\n  function setPermissioned(bool value) external;\n\n  /**\n   * @notice Getter to determine if permissioned mode is enabled or disabled\n   * @return Returns a boolean, if true the mode is enabled, if false is disabled\n   */\n  function isPermissioned() external view returns (bool);\n\n  /**\n   * @notice Enable or disable the minting of the faucet asset\n   * @param asset The address of the asset\n   * @param active True to enable, false to disable\n   */\n  function setMintable(address asset, bool active) external;\n\n  /**\n   * @notice Returns whether the asset is mintable\n   * @param asset The address of the asset\n   * @return True if the asset is mintable, false otherwise\n   */\n  function isMintable(address asset) external view returns (bool);\n\n  /**\n   * @notice Transfer the ownership of child contracts\n   * @param childContracts A list of child contract addresses\n   * @param newOwner The address of the new owner\n   */\n  function transferOwnershipOfChild(address[] calldata childContracts, address newOwner) external;\n\n  /**\n   * @notice Updates protection of minting feature of child token contracts\n   * @param childContracts A list of child token contract addresses\n   * @param state True if tokens are only mintable through Faucet, false otherwise\n   */\n  function setProtectedOfChild(address[] calldata childContracts, bool state) external;\n\n  /**\n   * @notice Updates the maximum amount of tokens per mint allowed\n   * @param newMaxMintAmount The new value of maximum amount of tokens per mint (whole tokens)\n   */\n  function setMaximumMintAmount(uint256 newMaxMintAmount) external;\n\n  /**\n   * @notice Returns the maximum amount of tokens per mint allowed\n   * @return The maximum amount of tokens per mint allowed (whole tokens)\n   */\n  function getMaximumMintAmount() external view returns (uint256);\n}\n"},"contracts/mocks/testnet-helpers/TestnetERC20.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\nimport {ERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol';\nimport {IERC20WithPermit} from '@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol';\n\n/**\n * @title TestnetERC20\n * @dev ERC20 minting logic\n */\ncontract TestnetERC20 is IERC20WithPermit, ERC20, Ownable {\n  bytes public constant EIP712_REVISION = bytes('1');\n  bytes32 internal constant EIP712_DOMAIN =\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\n  bytes32 public constant PERMIT_TYPEHASH =\n    keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');\n\n  // Map of address nonces (address => nonce)\n  mapping(address => uint256) internal _nonces;\n\n  bytes32 public DOMAIN_SEPARATOR;\n\n  bool internal _protected;\n\n  /**\n   * @dev Function modifier, if _protected is enabled then msg.sender is required to be the owner\n   */\n  modifier onlyOwnerIfProtected() {\n    if (_protected == true) {\n      require(owner() == _msgSender(), 'Ownable: caller is not the owner');\n    }\n    _;\n  }\n\n  constructor(\n    string memory name,\n    string memory symbol,\n    uint8 decimals,\n    address owner\n  ) ERC20(name, symbol) {\n    uint256 chainId = block.chainid;\n\n    DOMAIN_SEPARATOR = keccak256(\n      abi.encode(\n        EIP712_DOMAIN,\n        keccak256(bytes(name)),\n        keccak256(EIP712_REVISION),\n        chainId,\n        address(this)\n      )\n    );\n    _setupDecimals(decimals);\n    require(owner != address(0));\n    transferOwnership(owner);\n    _protected = true;\n  }\n\n  /// @inheritdoc IERC20WithPermit\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 override {\n    require(owner != address(0), 'INVALID_OWNER');\n    //solium-disable-next-line\n    require(block.timestamp <= deadline, 'INVALID_EXPIRATION');\n    uint256 currentValidNonce = _nonces[owner];\n    bytes32 digest = keccak256(\n      abi.encodePacked(\n        '\\x19\\x01',\n        DOMAIN_SEPARATOR,\n        keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, currentValidNonce, deadline))\n      )\n    );\n    require(owner == ecrecover(digest, v, r, s), 'INVALID_SIGNATURE');\n    _nonces[owner] = currentValidNonce + 1;\n    _approve(owner, spender, value);\n  }\n\n  /**\n   * @dev Function to mint tokens\n   * @param value The amount of tokens to mint.\n   * @return A boolean that indicates if the operation was successful.\n   */\n  function mint(uint256 value) public virtual onlyOwnerIfProtected returns (bool) {\n    _mint(_msgSender(), value);\n    return true;\n  }\n\n  /**\n   * @dev Function to mint tokens to address\n   * @param account The account to mint tokens.\n   * @param value The amount of tokens to mint.\n   * @return A boolean that indicates if the operation was successful.\n   */\n  function mint(address account, uint256 value) public virtual onlyOwnerIfProtected returns (bool) {\n    _mint(account, value);\n    return true;\n  }\n\n  function nonces(address owner) public view returns (uint256) {\n    return _nonces[owner];\n  }\n\n  function setProtected(bool state) public onlyOwner {\n    _protected = state;\n  }\n\n  function isProtected() public view returns (bool) {\n    return _protected;\n  }\n}\n"},"contracts/mocks/WETH9Mock.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.0;\n\nimport {WETH9} from '@aave/core-v3/contracts/dependencies/weth/WETH9.sol';\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\n\ncontract WETH9Mock is WETH9, Ownable {\n  bool internal _protected;\n\n  /**\n   * @dev Function modifier, if _protected is enabled then msg.sender is required to be the owner\n   */\n  modifier onlyOwnerIfProtected() {\n    if (_protected == true) {\n      require(owner() == _msgSender(), 'Ownable: caller is not the owner');\n    }\n    _;\n  }\n\n  constructor(string memory mockName, string memory mockSymbol, address owner) {\n    name = mockName;\n    symbol = mockSymbol;\n\n    transferOwnership(owner);\n    _protected = true;\n  }\n\n  function mint(address account, uint256 value) public onlyOwnerIfProtected returns (bool) {\n    balanceOf[account] += value;\n    emit Transfer(address(0), account, value);\n    return true;\n  }\n\n  function setProtected(bool state) public onlyOwner {\n    _protected = state;\n  }\n\n  function isProtected() public view returns (bool) {\n    return _protected;\n  }\n}\n"},"contracts/rewards/EmissionManager.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\nimport {IEACAggregatorProxy} from '../misc/interfaces/IEACAggregatorProxy.sol';\nimport {IEmissionManager} from './interfaces/IEmissionManager.sol';\nimport {ITransferStrategyBase} from './interfaces/ITransferStrategyBase.sol';\nimport {IRewardsController} from './interfaces/IRewardsController.sol';\nimport {RewardsDataTypes} from './libraries/RewardsDataTypes.sol';\n\n/**\n * @title EmissionManager\n * @author Aave\n * @notice It manages the list of admins of reward emissions and provides functions to control reward emissions.\n */\ncontract EmissionManager is Ownable, IEmissionManager {\n  // reward => emissionAdmin\n  mapping(address => address) internal _emissionAdmins;\n\n  IRewardsController internal _rewardsController;\n\n  /**\n   * @dev Only emission admin of the given reward can call functions marked by this modifier.\n   **/\n  modifier onlyEmissionAdmin(address reward) {\n    require(msg.sender == _emissionAdmins[reward], 'ONLY_EMISSION_ADMIN');\n    _;\n  }\n\n  /**\n   * Constructor.\n   * @param owner The address of the owner\n   */\n  constructor(address owner) {\n    transferOwnership(owner);\n  }\n\n  /// @inheritdoc IEmissionManager\n  function configureAssets(RewardsDataTypes.RewardsConfigInput[] memory config) external override {\n    for (uint256 i = 0; i < config.length; i++) {\n      require(_emissionAdmins[config[i].reward] == msg.sender, 'ONLY_EMISSION_ADMIN');\n    }\n    _rewardsController.configureAssets(config);\n  }\n\n  /// @inheritdoc IEmissionManager\n  function setTransferStrategy(\n    address reward,\n    ITransferStrategyBase transferStrategy\n  ) external override onlyEmissionAdmin(reward) {\n    _rewardsController.setTransferStrategy(reward, transferStrategy);\n  }\n\n  /// @inheritdoc IEmissionManager\n  function setRewardOracle(\n    address reward,\n    IEACAggregatorProxy rewardOracle\n  ) external override onlyEmissionAdmin(reward) {\n    _rewardsController.setRewardOracle(reward, rewardOracle);\n  }\n\n  /// @inheritdoc IEmissionManager\n  function setDistributionEnd(\n    address asset,\n    address reward,\n    uint32 newDistributionEnd\n  ) external override onlyEmissionAdmin(reward) {\n    _rewardsController.setDistributionEnd(asset, reward, newDistributionEnd);\n  }\n\n  /// @inheritdoc IEmissionManager\n  function setEmissionPerSecond(\n    address asset,\n    address[] calldata rewards,\n    uint88[] calldata newEmissionsPerSecond\n  ) external override {\n    for (uint256 i = 0; i < rewards.length; i++) {\n      require(_emissionAdmins[rewards[i]] == msg.sender, 'ONLY_EMISSION_ADMIN');\n    }\n    _rewardsController.setEmissionPerSecond(asset, rewards, newEmissionsPerSecond);\n  }\n\n  /// @inheritdoc IEmissionManager\n  function setClaimer(address user, address claimer) external override onlyOwner {\n    _rewardsController.setClaimer(user, claimer);\n  }\n\n  /// @inheritdoc IEmissionManager\n  function setEmissionAdmin(address reward, address admin) external override onlyOwner {\n    address oldAdmin = _emissionAdmins[reward];\n    _emissionAdmins[reward] = admin;\n    emit EmissionAdminUpdated(reward, oldAdmin, admin);\n  }\n\n  /// @inheritdoc IEmissionManager\n  function setRewardsController(address controller) external override onlyOwner {\n    _rewardsController = IRewardsController(controller);\n  }\n\n  /// @inheritdoc IEmissionManager\n  function getRewardsController() external view override returns (IRewardsController) {\n    return _rewardsController;\n  }\n\n  /// @inheritdoc IEmissionManager\n  function getEmissionAdmin(address reward) external view override returns (address) {\n    return _emissionAdmins[reward];\n  }\n}\n"},"contracts/rewards/interfaces/IEmissionManager.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {IEACAggregatorProxy} from '../../misc/interfaces/IEACAggregatorProxy.sol';\nimport {RewardsDataTypes} from '../libraries/RewardsDataTypes.sol';\nimport {ITransferStrategyBase} from './ITransferStrategyBase.sol';\nimport {IRewardsController} from './IRewardsController.sol';\n\n/**\n * @title IEmissionManager\n * @author Aave\n * @notice Defines the basic interface for the Emission Manager\n */\ninterface IEmissionManager {\n  /**\n   * @dev Emitted when the admin of a reward emission is updated.\n   * @param reward The address of the rewarding token\n   * @param oldAdmin The address of the old emission admin\n   * @param newAdmin The address of the new emission admin\n   */\n  event EmissionAdminUpdated(\n    address indexed reward,\n    address indexed oldAdmin,\n    address indexed newAdmin\n  );\n\n  /**\n   * @dev Configure assets to incentivize with an emission of rewards per second until the end of distribution.\n   * @dev Only callable by the emission admin of the given rewards\n   * @param config The assets configuration input, the list of structs contains the following fields:\n   *   uint104 emissionPerSecond: The emission per second following rewards unit decimals.\n   *   uint256 totalSupply: The total supply of the asset to incentivize\n   *   uint40 distributionEnd: The end of the distribution of the incentives for an asset\n   *   address asset: The asset address to incentivize\n   *   address reward: The reward token address\n   *   ITransferStrategy transferStrategy: The TransferStrategy address with the install hook and claim logic.\n   *   IEACAggregatorProxy rewardOracle: The Price Oracle of a reward to visualize the incentives at the UI Frontend.\n   *                                     Must follow Chainlink Aggregator IEACAggregatorProxy interface to be compatible.\n   */\n  function configureAssets(RewardsDataTypes.RewardsConfigInput[] memory config) external;\n\n  /**\n   * @dev Sets a TransferStrategy logic contract that determines the logic of the rewards transfer\n   * @dev Only callable by the emission admin of the given reward\n   * @param reward The address of the reward token\n   * @param transferStrategy The address of the TransferStrategy logic contract\n   */\n  function setTransferStrategy(address reward, ITransferStrategyBase transferStrategy) external;\n\n  /**\n   * @dev Sets an Aave Oracle contract to enforce rewards with a source of value.\n   * @dev Only callable by the emission admin of the given reward\n   * @notice At the moment of reward configuration, the Incentives Controller performs\n   * a check to see if the reward asset oracle is compatible with IEACAggregator proxy.\n   * This check is enforced for integrators to be able to show incentives at\n   * the current Aave UI without the need to setup an external price registry\n   * @param reward The address of the reward to set the price aggregator\n   * @param rewardOracle The address of price aggregator that follows IEACAggregatorProxy interface\n   */\n  function setRewardOracle(address reward, IEACAggregatorProxy rewardOracle) external;\n\n  /**\n   * @dev Sets the end date for the distribution\n   * @dev Only callable by the emission admin of the given reward\n   * @param asset The asset to incentivize\n   * @param reward The reward token that incentives the asset\n   * @param newDistributionEnd The end date of the incentivization, in unix time format\n   **/\n  function setDistributionEnd(address asset, address reward, uint32 newDistributionEnd) external;\n\n  /**\n   * @dev Sets the emission per second of a set of reward distributions\n   * @param asset The asset is being incentivized\n   * @param rewards List of reward addresses are being distributed\n   * @param newEmissionsPerSecond List of new reward emissions per second\n   */\n  function setEmissionPerSecond(\n    address asset,\n    address[] calldata rewards,\n    uint88[] calldata newEmissionsPerSecond\n  ) external;\n\n  /**\n   * @dev Whitelists an address to claim the rewards on behalf of another address\n   * @dev Only callable by the owner of the EmissionManager\n   * @param user The address of the user\n   * @param claimer The address of the claimer\n   */\n  function setClaimer(address user, address claimer) external;\n\n  /**\n   * @dev Updates the admin of the reward emission\n   * @dev Only callable by the owner of the EmissionManager\n   * @param reward The address of the reward token\n   * @param admin The address of the new admin of the emission\n   */\n  function setEmissionAdmin(address reward, address admin) external;\n\n  /**\n   * @dev Updates the address of the rewards controller\n   * @dev Only callable by the owner of the EmissionManager\n   * @param controller the address of the RewardsController contract\n   */\n  function setRewardsController(address controller) external;\n\n  /**\n   * @dev Returns the rewards controller address\n   * @return The address of the RewardsController contract\n   */\n  function getRewardsController() external view returns (IRewardsController);\n\n  /**\n   * @dev Returns the admin of the given reward emission\n   * @param reward The address of the reward token\n   * @return The address of the emission admin\n   */\n  function getEmissionAdmin(address reward) external view returns (address);\n}\n"},"contracts/rewards/interfaces/IPullRewardsTransferStrategy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {ITransferStrategyBase} from './ITransferStrategyBase.sol';\n\n/**\n * @title IPullRewardsTransferStrategy\n * @author Aave\n **/\ninterface IPullRewardsTransferStrategy is ITransferStrategyBase {\n  /**\n   * @return Address of the rewards vault\n   */\n  function getRewardsVault() external view returns (address);\n}\n"},"contracts/rewards/interfaces/IRewardsController.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {IRewardsDistributor} from './IRewardsDistributor.sol';\nimport {ITransferStrategyBase} from './ITransferStrategyBase.sol';\nimport {IEACAggregatorProxy} from '../../misc/interfaces/IEACAggregatorProxy.sol';\nimport {RewardsDataTypes} from '../libraries/RewardsDataTypes.sol';\n\n/**\n * @title IRewardsController\n * @author Aave\n * @notice Defines the basic interface for a Rewards Controller.\n */\ninterface IRewardsController is IRewardsDistributor {\n  /**\n   * @dev Emitted when a new address is whitelisted as claimer of rewards on behalf of a user\n   * @param user The address of the user\n   * @param claimer The address of the claimer\n   */\n  event ClaimerSet(address indexed user, address indexed claimer);\n\n  /**\n   * @dev Emitted when rewards are claimed\n   * @param user The address of the user rewards has been claimed on behalf of\n   * @param reward The address of the token reward is claimed\n   * @param to The address of the receiver of the rewards\n   * @param claimer The address of the claimer\n   * @param amount The amount of rewards claimed\n   */\n  event RewardsClaimed(\n    address indexed user,\n    address indexed reward,\n    address indexed to,\n    address claimer,\n    uint256 amount\n  );\n\n  /**\n   * @dev Emitted when a transfer strategy is installed for the reward distribution\n   * @param reward The address of the token reward\n   * @param transferStrategy The address of TransferStrategy contract\n   */\n  event TransferStrategyInstalled(address indexed reward, address indexed transferStrategy);\n\n  /**\n   * @dev Emitted when the reward oracle is updated\n   * @param reward The address of the token reward\n   * @param rewardOracle The address of oracle\n   */\n  event RewardOracleUpdated(address indexed reward, address indexed rewardOracle);\n\n  /**\n   * @dev Whitelists an address to claim the rewards on behalf of another address\n   * @param user The address of the user\n   * @param claimer The address of the claimer\n   */\n  function setClaimer(address user, address claimer) external;\n\n  /**\n   * @dev Sets a TransferStrategy logic contract that determines the logic of the rewards transfer\n   * @param reward The address of the reward token\n   * @param transferStrategy The address of the TransferStrategy logic contract\n   */\n  function setTransferStrategy(address reward, ITransferStrategyBase transferStrategy) external;\n\n  /**\n   * @dev Sets an Aave Oracle contract to enforce rewards with a source of value.\n   * @notice At the moment of reward configuration, the Incentives Controller performs\n   * a check to see if the reward asset oracle is compatible with IEACAggregator proxy.\n   * This check is enforced for integrators to be able to show incentives at\n   * the current Aave UI without the need to setup an external price registry\n   * @param reward The address of the reward to set the price aggregator\n   * @param rewardOracle The address of price aggregator that follows IEACAggregatorProxy interface\n   */\n  function setRewardOracle(address reward, IEACAggregatorProxy rewardOracle) external;\n\n  /**\n   * @dev Get the price aggregator oracle address\n   * @param reward The address of the reward\n   * @return The price oracle of the reward\n   */\n  function getRewardOracle(address reward) external view returns (address);\n\n  /**\n   * @dev Returns the whitelisted claimer for a certain address (0x0 if not set)\n   * @param user The address of the user\n   * @return The claimer address\n   */\n  function getClaimer(address user) external view returns (address);\n\n  /**\n   * @dev Returns the Transfer Strategy implementation contract address being used for a reward address\n   * @param reward The address of the reward\n   * @return The address of the TransferStrategy contract\n   */\n  function getTransferStrategy(address reward) external view returns (address);\n\n  /**\n   * @dev Configure assets to incentivize with an emission of rewards per second until the end of distribution.\n   * @param config The assets configuration input, the list of structs contains the following fields:\n   *   uint104 emissionPerSecond: The emission per second following rewards unit decimals.\n   *   uint256 totalSupply: The total supply of the asset to incentivize\n   *   uint40 distributionEnd: The end of the distribution of the incentives for an asset\n   *   address asset: The asset address to incentivize\n   *   address reward: The reward token address\n   *   ITransferStrategy transferStrategy: The TransferStrategy address with the install hook and claim logic.\n   *   IEACAggregatorProxy rewardOracle: The Price Oracle of a reward to visualize the incentives at the UI Frontend.\n   *                                     Must follow Chainlink Aggregator IEACAggregatorProxy interface to be compatible.\n   */\n  function configureAssets(RewardsDataTypes.RewardsConfigInput[] memory config) external;\n\n  /**\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\n   * @param user The address of the user whose asset balance has changed\n   * @param totalSupply The total supply of the asset prior to user balance change\n   * @param userBalance The previous user balance prior to balance change\n   **/\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\n\n  /**\n   * @dev Claims reward for a user to the desired address, on all the assets of the pool, accumulating the pending rewards\n   * @param assets List of assets to check eligible distributions before claiming rewards\n   * @param amount The amount of rewards to claim\n   * @param to The address that will be receiving the rewards\n   * @param reward The address of the reward token\n   * @return The amount of rewards claimed\n   **/\n  function claimRewards(\n    address[] calldata assets,\n    uint256 amount,\n    address to,\n    address reward\n  ) external returns (uint256);\n\n  /**\n   * @dev Claims reward for a user on behalf, on all the assets of the pool, accumulating the pending rewards. The\n   * caller must be whitelisted via \"allowClaimOnBehalf\" function by the RewardsAdmin role manager\n   * @param assets The list of assets to check eligible distributions before claiming rewards\n   * @param amount The amount of rewards to claim\n   * @param user The address to check and claim rewards\n   * @param to The address that will be receiving the rewards\n   * @param reward The address of the reward token\n   * @return The amount of rewards claimed\n   **/\n  function claimRewardsOnBehalf(\n    address[] calldata assets,\n    uint256 amount,\n    address user,\n    address to,\n    address reward\n  ) external returns (uint256);\n\n  /**\n   * @dev Claims reward for msg.sender, on all the assets of the pool, accumulating the pending rewards\n   * @param assets The list of assets to check eligible distributions before claiming rewards\n   * @param amount The amount of rewards to claim\n   * @param reward The address of the reward token\n   * @return The amount of rewards claimed\n   **/\n  function claimRewardsToSelf(\n    address[] calldata assets,\n    uint256 amount,\n    address reward\n  ) external returns (uint256);\n\n  /**\n   * @dev Claims all rewards for a user to the desired address, on all the assets of the pool, accumulating the pending rewards\n   * @param assets The list of assets to check eligible distributions before claiming rewards\n   * @param to The address that will be receiving the rewards\n   * @return rewardsList List of addresses of the reward tokens\n   * @return claimedAmounts List that contains the claimed amount per reward, following same order as \"rewardList\"\n   **/\n  function claimAllRewards(\n    address[] calldata assets,\n    address to\n  ) external returns (address[] memory rewardsList, uint256[] memory claimedAmounts);\n\n  /**\n   * @dev Claims all rewards for a user on behalf, on all the assets of the pool, accumulating the pending rewards. The caller must\n   * be whitelisted via \"allowClaimOnBehalf\" function by the RewardsAdmin role manager\n   * @param assets The list of assets to check eligible distributions before claiming rewards\n   * @param user The address to check and claim rewards\n   * @param to The address that will be receiving the rewards\n   * @return rewardsList List of addresses of the reward tokens\n   * @return claimedAmounts List that contains the claimed amount per reward, following same order as \"rewardsList\"\n   **/\n  function claimAllRewardsOnBehalf(\n    address[] calldata assets,\n    address user,\n    address to\n  ) external returns (address[] memory rewardsList, uint256[] memory claimedAmounts);\n\n  /**\n   * @dev Claims all reward for msg.sender, on all the assets of the pool, accumulating the pending rewards\n   * @param assets The list of assets to check eligible distributions before claiming rewards\n   * @return rewardsList List of addresses of the reward tokens\n   * @return claimedAmounts List that contains the claimed amount per reward, following same order as \"rewardsList\"\n   **/\n  function claimAllRewardsToSelf(\n    address[] calldata assets\n  ) external returns (address[] memory rewardsList, uint256[] memory claimedAmounts);\n}\n"},"contracts/rewards/interfaces/IRewardsDistributor.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\n/**\n * @title IRewardsDistributor\n * @author Aave\n * @notice Defines the basic interface for a Rewards Distributor.\n */\ninterface IRewardsDistributor {\n  /**\n   * @dev Emitted when the configuration of the rewards of an asset is updated.\n   * @param asset The address of the incentivized asset\n   * @param reward The address of the reward token\n   * @param oldEmission The old emissions per second value of the reward distribution\n   * @param newEmission The new emissions per second value of the reward distribution\n   * @param oldDistributionEnd The old end timestamp of the reward distribution\n   * @param newDistributionEnd The new end timestamp of the reward distribution\n   * @param assetIndex The index of the asset distribution\n   */\n  event AssetConfigUpdated(\n    address indexed asset,\n    address indexed reward,\n    uint256 oldEmission,\n    uint256 newEmission,\n    uint256 oldDistributionEnd,\n    uint256 newDistributionEnd,\n    uint256 assetIndex\n  );\n\n  /**\n   * @dev Emitted when rewards of an asset are accrued on behalf of a user.\n   * @param asset The address of the incentivized asset\n   * @param reward The address of the reward token\n   * @param user The address of the user that rewards are accrued on behalf of\n   * @param assetIndex The index of the asset distribution\n   * @param userIndex The index of the asset distribution on behalf of the user\n   * @param rewardsAccrued The amount of rewards accrued\n   */\n  event Accrued(\n    address indexed asset,\n    address indexed reward,\n    address indexed user,\n    uint256 assetIndex,\n    uint256 userIndex,\n    uint256 rewardsAccrued\n  );\n\n  /**\n   * @dev Sets the end date for the distribution\n   * @param asset The asset to incentivize\n   * @param reward The reward token that incentives the asset\n   * @param newDistributionEnd The end date of the incentivization, in unix time format\n   **/\n  function setDistributionEnd(address asset, address reward, uint32 newDistributionEnd) external;\n\n  /**\n   * @dev Sets the emission per second of a set of reward distributions\n   * @param asset The asset is being incentivized\n   * @param rewards List of reward addresses are being distributed\n   * @param newEmissionsPerSecond List of new reward emissions per second\n   */\n  function setEmissionPerSecond(\n    address asset,\n    address[] calldata rewards,\n    uint88[] calldata newEmissionsPerSecond\n  ) external;\n\n  /**\n   * @dev Gets the end date for the distribution\n   * @param asset The incentivized asset\n   * @param reward The reward token of the incentivized asset\n   * @return The timestamp with the end of the distribution, in unix time format\n   **/\n  function getDistributionEnd(address asset, address reward) external view returns (uint256);\n\n  /**\n   * @dev Returns the index of a user on a reward distribution\n   * @param user Address of the user\n   * @param asset The incentivized asset\n   * @param reward The reward token of the incentivized asset\n   * @return The current user asset index, not including new distributions\n   **/\n  function getUserAssetIndex(\n    address user,\n    address asset,\n    address reward\n  ) external view returns (uint256);\n\n  /**\n   * @dev Returns the configuration of the distribution reward for a certain asset\n   * @param asset The incentivized asset\n   * @param reward The reward token of the incentivized asset\n   * @return The index of the asset distribution\n   * @return The emission per second of the reward distribution\n   * @return The timestamp of the last update of the index\n   * @return The timestamp of the distribution end\n   **/\n  function getRewardsData(\n    address asset,\n    address reward\n  ) external view returns (uint256, uint256, uint256, uint256);\n\n  /**\n   * @dev Calculates the next value of an specific distribution index, with validations.\n   * @param asset The incentivized asset\n   * @param reward The reward token of the incentivized asset\n   * @return The old index of the asset distribution\n   * @return The new index of the asset distribution\n   **/\n  function getAssetIndex(address asset, address reward) external view returns (uint256, uint256);\n\n  /**\n   * @dev Returns the list of available reward token addresses of an incentivized asset\n   * @param asset The incentivized asset\n   * @return List of rewards addresses of the input asset\n   **/\n  function getRewardsByAsset(address asset) external view returns (address[] memory);\n\n  /**\n   * @dev Returns the list of available reward addresses\n   * @return List of rewards supported in this contract\n   **/\n  function getRewardsList() external view returns (address[] memory);\n\n  /**\n   * @dev Returns the accrued rewards balance of a user, not including virtually accrued rewards since last distribution.\n   * @param user The address of the user\n   * @param reward The address of the reward token\n   * @return Unclaimed rewards, not including new distributions\n   **/\n  function getUserAccruedRewards(address user, address reward) external view returns (uint256);\n\n  /**\n   * @dev Returns a single rewards balance of a user, including virtually accrued and unrealized claimable rewards.\n   * @param assets List of incentivized assets to check eligible distributions\n   * @param user The address of the user\n   * @param reward The address of the reward token\n   * @return The rewards amount\n   **/\n  function getUserRewards(\n    address[] calldata assets,\n    address user,\n    address reward\n  ) external view returns (uint256);\n\n  /**\n   * @dev Returns a list all rewards of a user, including already accrued and unrealized claimable rewards\n   * @param assets List of incentivized assets to check eligible distributions\n   * @param user The address of the user\n   * @return The list of reward addresses\n   * @return The list of unclaimed amount of rewards\n   **/\n  function getAllUserRewards(\n    address[] calldata assets,\n    address user\n  ) external view returns (address[] memory, uint256[] memory);\n\n  /**\n   * @dev Returns the decimals of an asset to calculate the distribution delta\n   * @param asset The address to retrieve decimals\n   * @return The decimals of an underlying asset\n   */\n  function getAssetDecimals(address asset) external view returns (uint8);\n\n  /**\n   * @dev Returns the address of the emission manager\n   * @return The address of the EmissionManager\n   */\n  function EMISSION_MANAGER() external view returns (address);\n\n  /**\n   * @dev Returns the address of the emission manager.\n   * Deprecated: This getter is maintained for compatibility purposes. Use the `EMISSION_MANAGER()` function instead.\n   * @return The address of the EmissionManager\n   */\n  function getEmissionManager() external view returns (address);\n}\n"},"contracts/rewards/interfaces/IStakedToken.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\ninterface IStakedToken {\n  function STAKED_TOKEN() external view returns (address);\n\n  function stake(address to, uint256 amount) external;\n\n  function redeem(address to, uint256 amount) external;\n\n  function cooldown() external;\n\n  function claimRewards(address to, uint256 amount) external;\n}\n"},"contracts/rewards/interfaces/IStakedTokenTransferStrategy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {IStakedToken} from '../interfaces/IStakedToken.sol';\nimport {ITransferStrategyBase} from './ITransferStrategyBase.sol';\n\n/**\n * @title IStakedTokenTransferStrategy\n * @author Aave\n **/\ninterface IStakedTokenTransferStrategy is ITransferStrategyBase {\n  /**\n   * @dev Perform a MAX_UINT approval of AAVE to the Staked Aave contract.\n   */\n  function renewApproval() external;\n\n  /**\n   * @dev Drop approval of AAVE to the Staked Aave contract in case of emergency.\n   */\n  function dropApproval() external;\n\n  /**\n   * @return Staked Token contract address\n   */\n  function getStakeContract() external view returns (address);\n\n  /**\n   * @return Underlying token address from the stake contract\n   */\n  function getUnderlyingToken() external view returns (address);\n}\n"},"contracts/rewards/interfaces/ITransferStrategyBase.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\ninterface ITransferStrategyBase {\n  event EmergencyWithdrawal(\n    address indexed caller,\n    address indexed token,\n    address indexed to,\n    uint256 amount\n  );\n\n  /**\n   * @dev Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation\n   * @param to Account to transfer rewards\n   * @param reward Address of the reward token\n   * @param amount Amount to transfer to the \"to\" address parameter\n   * @return Returns true bool if transfer logic succeeds\n   */\n  function performTransfer(address to, address reward, uint256 amount) external returns (bool);\n\n  /**\n   * @return Returns the address of the Incentives Controller\n   */\n  function getIncentivesController() external view returns (address);\n\n  /**\n   * @return Returns the address of the Rewards admin\n   */\n  function getRewardsAdmin() external view returns (address);\n\n  /**\n   * @dev Perform an emergency token withdrawal only callable by the Rewards admin\n   * @param token Address of the token to withdraw funds from this contract\n   * @param to Address of the recipient of the withdrawal\n   * @param amount Amount of the withdrawal\n   */\n  function emergencyWithdrawal(address token, address to, uint256 amount) external;\n}\n"},"contracts/rewards/libraries/RewardsDataTypes.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {ITransferStrategyBase} from '../interfaces/ITransferStrategyBase.sol';\nimport {IEACAggregatorProxy} from '../../misc/interfaces/IEACAggregatorProxy.sol';\n\nlibrary RewardsDataTypes {\n  struct RewardsConfigInput {\n    uint88 emissionPerSecond;\n    uint256 totalSupply;\n    uint32 distributionEnd;\n    address asset;\n    address reward;\n    ITransferStrategyBase transferStrategy;\n    IEACAggregatorProxy rewardOracle;\n  }\n\n  struct UserAssetBalance {\n    address asset;\n    uint256 userBalance;\n    uint256 totalSupply;\n  }\n\n  struct UserData {\n    // Liquidity index of the reward distribution for the user\n    uint104 index;\n    // Amount of accrued rewards for the user since last user index update\n    uint128 accrued;\n  }\n\n  struct RewardData {\n    // Liquidity index of the reward distribution\n    uint104 index;\n    // Amount of reward tokens distributed per second\n    uint88 emissionPerSecond;\n    // Timestamp of the last reward index update\n    uint32 lastUpdateTimestamp;\n    // The end of the distribution of rewards (in seconds)\n    uint32 distributionEnd;\n    // Map of user addresses and their rewards data (userAddress => userData)\n    mapping(address => UserData) usersData;\n  }\n\n  struct AssetData {\n    // Map of reward token addresses and their data (rewardTokenAddress => rewardData)\n    mapping(address => RewardData) rewards;\n    // List of reward token addresses for the asset\n    mapping(uint128 => address) availableRewards;\n    // Count of reward tokens for the asset\n    uint128 availableRewardsCount;\n    // Number of decimals of the asset\n    uint8 decimals;\n  }\n}\n"},"contracts/rewards/RewardsController.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {VersionedInitializable} from '@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol';\nimport {SafeCast} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol';\nimport {IScaledBalanceToken} from '@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol';\nimport {RewardsDistributor} from './RewardsDistributor.sol';\nimport {IRewardsController} from './interfaces/IRewardsController.sol';\nimport {ITransferStrategyBase} from './interfaces/ITransferStrategyBase.sol';\nimport {RewardsDataTypes} from './libraries/RewardsDataTypes.sol';\nimport {IEACAggregatorProxy} from '../misc/interfaces/IEACAggregatorProxy.sol';\n\n/**\n * @title RewardsController\n * @notice Abstract contract template to build Distributors contracts for ERC20 rewards to protocol participants\n * @author Aave\n **/\ncontract RewardsController is RewardsDistributor, VersionedInitializable, IRewardsController {\n  using SafeCast for uint256;\n\n  uint256 public constant REVISION = 1;\n\n  // This mapping allows whitelisted addresses to claim on behalf of others\n  // useful for contracts that hold tokens to be rewarded but don't have any native logic to claim Liquidity Mining rewards\n  mapping(address => address) internal _authorizedClaimers;\n\n  // reward => transfer strategy implementation contract\n  // The TransferStrategy contract abstracts the logic regarding\n  // the source of the reward and how to transfer it to the user.\n  mapping(address => ITransferStrategyBase) internal _transferStrategy;\n\n  // This mapping contains the price oracle per reward.\n  // A price oracle is enforced for integrators to be able to show incentives at\n  // the current Aave UI without the need to setup an external price registry\n  // At the moment of reward configuration, the Incentives Controller performs\n  // a check to see if the provided reward oracle contains `latestAnswer`.\n  mapping(address => IEACAggregatorProxy) internal _rewardOracle;\n\n  modifier onlyAuthorizedClaimers(address claimer, address user) {\n    require(_authorizedClaimers[user] == claimer, 'CLAIMER_UNAUTHORIZED');\n    _;\n  }\n\n  constructor(address emissionManager) RewardsDistributor(emissionManager) {}\n\n  /**\n   * @dev Initialize for RewardsController\n   * @dev It expects an address as argument since its initialized via PoolAddressesProvider._updateImpl()\n   **/\n  function initialize(address) external initializer {}\n\n  /// @inheritdoc IRewardsController\n  function getClaimer(address user) external view override returns (address) {\n    return _authorizedClaimers[user];\n  }\n\n  /**\n   * @dev Returns the revision of the implementation contract\n   * @return uint256, current revision version\n   */\n  function getRevision() internal pure override returns (uint256) {\n    return REVISION;\n  }\n\n  /// @inheritdoc IRewardsController\n  function getRewardOracle(address reward) external view override returns (address) {\n    return address(_rewardOracle[reward]);\n  }\n\n  /// @inheritdoc IRewardsController\n  function getTransferStrategy(address reward) external view override returns (address) {\n    return address(_transferStrategy[reward]);\n  }\n\n  /// @inheritdoc IRewardsController\n  function configureAssets(\n    RewardsDataTypes.RewardsConfigInput[] memory config\n  ) external override onlyEmissionManager {\n    for (uint256 i = 0; i < config.length; i++) {\n      // Get the current Scaled Total Supply of AToken or Debt token\n      config[i].totalSupply = IScaledBalanceToken(config[i].asset).scaledTotalSupply();\n\n      // Install TransferStrategy logic at IncentivesController\n      _installTransferStrategy(config[i].reward, config[i].transferStrategy);\n\n      // Set reward oracle, enforces input oracle to have latestPrice function\n      _setRewardOracle(config[i].reward, config[i].rewardOracle);\n    }\n    _configureAssets(config);\n  }\n\n  /// @inheritdoc IRewardsController\n  function setTransferStrategy(\n    address reward,\n    ITransferStrategyBase transferStrategy\n  ) external onlyEmissionManager {\n    _installTransferStrategy(reward, transferStrategy);\n  }\n\n  /// @inheritdoc IRewardsController\n  function setRewardOracle(\n    address reward,\n    IEACAggregatorProxy rewardOracle\n  ) external onlyEmissionManager {\n    _setRewardOracle(reward, rewardOracle);\n  }\n\n  /// @inheritdoc IRewardsController\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external override {\n    _updateData(msg.sender, user, userBalance, totalSupply);\n  }\n\n  /// @inheritdoc IRewardsController\n  function claimRewards(\n    address[] calldata assets,\n    uint256 amount,\n    address to,\n    address reward\n  ) external override returns (uint256) {\n    require(to != address(0), 'INVALID_TO_ADDRESS');\n    return _claimRewards(assets, amount, msg.sender, msg.sender, to, reward);\n  }\n\n  /// @inheritdoc IRewardsController\n  function claimRewardsOnBehalf(\n    address[] calldata assets,\n    uint256 amount,\n    address user,\n    address to,\n    address reward\n  ) external override onlyAuthorizedClaimers(msg.sender, user) returns (uint256) {\n    require(user != address(0), 'INVALID_USER_ADDRESS');\n    require(to != address(0), 'INVALID_TO_ADDRESS');\n    return _claimRewards(assets, amount, msg.sender, user, to, reward);\n  }\n\n  /// @inheritdoc IRewardsController\n  function claimRewardsToSelf(\n    address[] calldata assets,\n    uint256 amount,\n    address reward\n  ) external override returns (uint256) {\n    return _claimRewards(assets, amount, msg.sender, msg.sender, msg.sender, reward);\n  }\n\n  /// @inheritdoc IRewardsController\n  function claimAllRewards(\n    address[] calldata assets,\n    address to\n  ) external override returns (address[] memory rewardsList, uint256[] memory claimedAmounts) {\n    require(to != address(0), 'INVALID_TO_ADDRESS');\n    return _claimAllRewards(assets, msg.sender, msg.sender, to);\n  }\n\n  /// @inheritdoc IRewardsController\n  function claimAllRewardsOnBehalf(\n    address[] calldata assets,\n    address user,\n    address to\n  )\n    external\n    override\n    onlyAuthorizedClaimers(msg.sender, user)\n    returns (address[] memory rewardsList, uint256[] memory claimedAmounts)\n  {\n    require(user != address(0), 'INVALID_USER_ADDRESS');\n    require(to != address(0), 'INVALID_TO_ADDRESS');\n    return _claimAllRewards(assets, msg.sender, user, to);\n  }\n\n  /// @inheritdoc IRewardsController\n  function claimAllRewardsToSelf(\n    address[] calldata assets\n  ) external override returns (address[] memory rewardsList, uint256[] memory claimedAmounts) {\n    return _claimAllRewards(assets, msg.sender, msg.sender, msg.sender);\n  }\n\n  /// @inheritdoc IRewardsController\n  function setClaimer(address user, address caller) external override onlyEmissionManager {\n    _authorizedClaimers[user] = caller;\n    emit ClaimerSet(user, caller);\n  }\n\n  /**\n   * @dev Get user balances and total supply of all the assets specified by the assets parameter\n   * @param assets List of assets to retrieve user balance and total supply\n   * @param user Address of the user\n   * @return userAssetBalances contains a list of structs with user balance and total supply of the given assets\n   */\n  function _getUserAssetBalances(\n    address[] calldata assets,\n    address user\n  ) internal view override returns (RewardsDataTypes.UserAssetBalance[] memory userAssetBalances) {\n    userAssetBalances = new RewardsDataTypes.UserAssetBalance[](assets.length);\n    for (uint256 i = 0; i < assets.length; i++) {\n      userAssetBalances[i].asset = assets[i];\n      (userAssetBalances[i].userBalance, userAssetBalances[i].totalSupply) = IScaledBalanceToken(\n        assets[i]\n      ).getScaledUserBalanceAndSupply(user);\n    }\n    return userAssetBalances;\n  }\n\n  /**\n   * @dev Claims one type of reward for a user on behalf, on all the assets of the pool, accumulating the pending rewards.\n   * @param assets List of assets to check eligible distributions before claiming rewards\n   * @param amount Amount of rewards to claim\n   * @param claimer Address of the claimer who claims rewards on behalf of user\n   * @param user Address to check and claim rewards\n   * @param to Address that will be receiving the rewards\n   * @param reward Address of the reward token\n   * @return Rewards claimed\n   **/\n  function _claimRewards(\n    address[] calldata assets,\n    uint256 amount,\n    address claimer,\n    address user,\n    address to,\n    address reward\n  ) internal returns (uint256) {\n    if (amount == 0) {\n      return 0;\n    }\n    uint256 totalRewards;\n\n    _updateDataMultiple(user, _getUserAssetBalances(assets, user));\n    for (uint256 i = 0; i < assets.length; i++) {\n      address asset = assets[i];\n      totalRewards += _assets[asset].rewards[reward].usersData[user].accrued;\n\n      if (totalRewards <= amount) {\n        _assets[asset].rewards[reward].usersData[user].accrued = 0;\n      } else {\n        uint256 difference = totalRewards - amount;\n        totalRewards -= difference;\n        _assets[asset].rewards[reward].usersData[user].accrued = difference.toUint128();\n        break;\n      }\n    }\n\n    if (totalRewards == 0) {\n      return 0;\n    }\n\n    _transferRewards(to, reward, totalRewards);\n    emit RewardsClaimed(user, reward, to, claimer, totalRewards);\n\n    return totalRewards;\n  }\n\n  /**\n   * @dev Claims one type of reward for a user on behalf, on all the assets of the pool, accumulating the pending rewards.\n   * @param assets List of assets to check eligible distributions before claiming rewards\n   * @param claimer Address of the claimer on behalf of user\n   * @param user Address to check and claim rewards\n   * @param to Address that will be receiving the rewards\n   * @return\n   *   rewardsList List of reward addresses\n   *   claimedAmount List of claimed amounts, follows \"rewardsList\" items order\n   **/\n  function _claimAllRewards(\n    address[] calldata assets,\n    address claimer,\n    address user,\n    address to\n  ) internal returns (address[] memory rewardsList, uint256[] memory claimedAmounts) {\n    uint256 rewardsListLength = _rewardsList.length;\n    rewardsList = new address[](rewardsListLength);\n    claimedAmounts = new uint256[](rewardsListLength);\n\n    _updateDataMultiple(user, _getUserAssetBalances(assets, user));\n\n    for (uint256 i = 0; i < assets.length; i++) {\n      address asset = assets[i];\n      for (uint256 j = 0; j < rewardsListLength; j++) {\n        if (rewardsList[j] == address(0)) {\n          rewardsList[j] = _rewardsList[j];\n        }\n        uint256 rewardAmount = _assets[asset].rewards[rewardsList[j]].usersData[user].accrued;\n        if (rewardAmount != 0) {\n          claimedAmounts[j] += rewardAmount;\n          _assets[asset].rewards[rewardsList[j]].usersData[user].accrued = 0;\n        }\n      }\n    }\n    for (uint256 i = 0; i < rewardsListLength; i++) {\n      _transferRewards(to, rewardsList[i], claimedAmounts[i]);\n      emit RewardsClaimed(user, rewardsList[i], to, claimer, claimedAmounts[i]);\n    }\n    return (rewardsList, claimedAmounts);\n  }\n\n  /**\n   * @dev Function to transfer rewards to the desired account using delegatecall and\n   * @param to Account address to send the rewards\n   * @param reward Address of the reward token\n   * @param amount Amount of rewards to transfer\n   */\n  function _transferRewards(address to, address reward, uint256 amount) internal {\n    ITransferStrategyBase transferStrategy = _transferStrategy[reward];\n\n    bool success = transferStrategy.performTransfer(to, reward, amount);\n\n    require(success == true, 'TRANSFER_ERROR');\n  }\n\n  /**\n   * @dev Returns true if `account` is a contract.\n   * @param account The address of the account\n   * @return bool, true if contract, false otherwise\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  /**\n   * @dev Internal function to call the optional install hook at the TransferStrategy\n   * @param reward The address of the reward token\n   * @param transferStrategy The address of the reward TransferStrategy\n   */\n  function _installTransferStrategy(\n    address reward,\n    ITransferStrategyBase transferStrategy\n  ) internal {\n    require(address(transferStrategy) != address(0), 'STRATEGY_CAN_NOT_BE_ZERO');\n    require(_isContract(address(transferStrategy)) == true, 'STRATEGY_MUST_BE_CONTRACT');\n\n    _transferStrategy[reward] = transferStrategy;\n\n    emit TransferStrategyInstalled(reward, address(transferStrategy));\n  }\n\n  /**\n   * @dev Update the Price Oracle of a reward token. The Price Oracle must follow Chainlink IEACAggregatorProxy interface.\n   * @notice The Price Oracle of a reward is used for displaying correct data about the incentives at the UI frontend.\n   * @param reward The address of the reward token\n   * @param rewardOracle The address of the price oracle\n   */\n\n  function _setRewardOracle(address reward, IEACAggregatorProxy rewardOracle) internal {\n    require(rewardOracle.latestAnswer() > 0, 'ORACLE_MUST_RETURN_PRICE');\n    _rewardOracle[reward] = rewardOracle;\n    emit RewardOracleUpdated(reward, address(rewardOracle));\n  }\n}\n"},"contracts/rewards/RewardsDistributor.sol":{"content":"// SPDX-License-Identifier: BUSL-1.1\npragma solidity ^0.8.10;\n\nimport {IScaledBalanceToken} from '@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol';\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\nimport {SafeCast} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol';\nimport {IRewardsDistributor} from './interfaces/IRewardsDistributor.sol';\nimport {RewardsDataTypes} from './libraries/RewardsDataTypes.sol';\n\n/**\n * @title RewardsDistributor\n * @notice Accounting contract to manage multiple staking distributions with multiple rewards\n * @author Aave\n **/\nabstract contract RewardsDistributor is IRewardsDistributor {\n  using SafeCast for uint256;\n\n  // Manager of incentives\n  address public immutable EMISSION_MANAGER;\n  // Deprecated: This storage slot is kept for backwards compatibility purposes.\n  address internal _emissionManager;\n\n  // Map of rewarded asset addresses and their data (assetAddress => assetData)\n  mapping(address => RewardsDataTypes.AssetData) internal _assets;\n\n  // Map of reward assets (rewardAddress => enabled)\n  mapping(address => bool) internal _isRewardEnabled;\n\n  // Rewards list\n  address[] internal _rewardsList;\n\n  // Assets list\n  address[] internal _assetsList;\n\n  modifier onlyEmissionManager() {\n    require(msg.sender == EMISSION_MANAGER, 'ONLY_EMISSION_MANAGER');\n    _;\n  }\n\n  constructor(address emissionManager) {\n    EMISSION_MANAGER = emissionManager;\n  }\n\n  /// @inheritdoc IRewardsDistributor\n  function getRewardsData(\n    address asset,\n    address reward\n  ) public view override returns (uint256, uint256, uint256, uint256) {\n    return (\n      _assets[asset].rewards[reward].index,\n      _assets[asset].rewards[reward].emissionPerSecond,\n      _assets[asset].rewards[reward].lastUpdateTimestamp,\n      _assets[asset].rewards[reward].distributionEnd\n    );\n  }\n\n  /// @inheritdoc IRewardsDistributor\n  function getAssetIndex(\n    address asset,\n    address reward\n  ) external view override returns (uint256, uint256) {\n    RewardsDataTypes.RewardData storage rewardData = _assets[asset].rewards[reward];\n    return\n      _getAssetIndex(\n        rewardData,\n        IScaledBalanceToken(asset).scaledTotalSupply(),\n        10 ** _assets[asset].decimals\n      );\n  }\n\n  /// @inheritdoc IRewardsDistributor\n  function getDistributionEnd(\n    address asset,\n    address reward\n  ) external view override returns (uint256) {\n    return _assets[asset].rewards[reward].distributionEnd;\n  }\n\n  /// @inheritdoc IRewardsDistributor\n  function getRewardsByAsset(address asset) external view override returns (address[] memory) {\n    uint128 rewardsCount = _assets[asset].availableRewardsCount;\n    address[] memory availableRewards = new address[](rewardsCount);\n\n    for (uint128 i = 0; i < rewardsCount; i++) {\n      availableRewards[i] = _assets[asset].availableRewards[i];\n    }\n    return availableRewards;\n  }\n\n  /// @inheritdoc IRewardsDistributor\n  function getRewardsList() external view override returns (address[] memory) {\n    return _rewardsList;\n  }\n\n  /// @inheritdoc IRewardsDistributor\n  function getUserAssetIndex(\n    address user,\n    address asset,\n    address reward\n  ) public view override returns (uint256) {\n    return _assets[asset].rewards[reward].usersData[user].index;\n  }\n\n  /// @inheritdoc IRewardsDistributor\n  function getUserAccruedRewards(\n    address user,\n    address reward\n  ) external view override returns (uint256) {\n    uint256 totalAccrued;\n    for (uint256 i = 0; i < _assetsList.length; i++) {\n      totalAccrued += _assets[_assetsList[i]].rewards[reward].usersData[user].accrued;\n    }\n\n    return totalAccrued;\n  }\n\n  /// @inheritdoc IRewardsDistributor\n  function getUserRewards(\n    address[] calldata assets,\n    address user,\n    address reward\n  ) external view override returns (uint256) {\n    return _getUserReward(user, reward, _getUserAssetBalances(assets, user));\n  }\n\n  /// @inheritdoc IRewardsDistributor\n  function getAllUserRewards(\n    address[] calldata assets,\n    address user\n  )\n    external\n    view\n    override\n    returns (address[] memory rewardsList, uint256[] memory unclaimedAmounts)\n  {\n    RewardsDataTypes.UserAssetBalance[] memory userAssetBalances = _getUserAssetBalances(\n      assets,\n      user\n    );\n    rewardsList = new address[](_rewardsList.length);\n    unclaimedAmounts = new uint256[](rewardsList.length);\n\n    // Add unrealized rewards from user to unclaimedRewards\n    for (uint256 i = 0; i < userAssetBalances.length; i++) {\n      for (uint256 r = 0; r < rewardsList.length; r++) {\n        rewardsList[r] = _rewardsList[r];\n        unclaimedAmounts[r] += _assets[userAssetBalances[i].asset]\n          .rewards[rewardsList[r]]\n          .usersData[user]\n          .accrued;\n\n        if (userAssetBalances[i].userBalance == 0) {\n          continue;\n        }\n        unclaimedAmounts[r] += _getPendingRewards(user, rewardsList[r], userAssetBalances[i]);\n      }\n    }\n    return (rewardsList, unclaimedAmounts);\n  }\n\n  /// @inheritdoc IRewardsDistributor\n  function setDistributionEnd(\n    address asset,\n    address reward,\n    uint32 newDistributionEnd\n  ) external override onlyEmissionManager {\n    uint256 oldDistributionEnd = _assets[asset].rewards[reward].distributionEnd;\n    _assets[asset].rewards[reward].distributionEnd = newDistributionEnd;\n\n    emit AssetConfigUpdated(\n      asset,\n      reward,\n      _assets[asset].rewards[reward].emissionPerSecond,\n      _assets[asset].rewards[reward].emissionPerSecond,\n      oldDistributionEnd,\n      newDistributionEnd,\n      _assets[asset].rewards[reward].index\n    );\n  }\n\n  /// @inheritdoc IRewardsDistributor\n  function setEmissionPerSecond(\n    address asset,\n    address[] calldata rewards,\n    uint88[] calldata newEmissionsPerSecond\n  ) external override onlyEmissionManager {\n    require(rewards.length == newEmissionsPerSecond.length, 'INVALID_INPUT');\n    for (uint256 i = 0; i < rewards.length; i++) {\n      RewardsDataTypes.AssetData storage assetConfig = _assets[asset];\n      RewardsDataTypes.RewardData storage rewardConfig = _assets[asset].rewards[rewards[i]];\n      uint256 decimals = assetConfig.decimals;\n      require(\n        decimals != 0 && rewardConfig.lastUpdateTimestamp != 0,\n        'DISTRIBUTION_DOES_NOT_EXIST'\n      );\n\n      (uint256 newIndex, ) = _updateRewardData(\n        rewardConfig,\n        IScaledBalanceToken(asset).scaledTotalSupply(),\n        10 ** decimals\n      );\n\n      uint256 oldEmissionPerSecond = rewardConfig.emissionPerSecond;\n      rewardConfig.emissionPerSecond = newEmissionsPerSecond[i];\n\n      emit AssetConfigUpdated(\n        asset,\n        rewards[i],\n        oldEmissionPerSecond,\n        newEmissionsPerSecond[i],\n        rewardConfig.distributionEnd,\n        rewardConfig.distributionEnd,\n        newIndex\n      );\n    }\n  }\n\n  /**\n   * @dev Configure the _assets for a specific emission\n   * @param rewardsInput The array of each asset configuration\n   **/\n  function _configureAssets(RewardsDataTypes.RewardsConfigInput[] memory rewardsInput) internal {\n    for (uint256 i = 0; i < rewardsInput.length; i++) {\n      if (_assets[rewardsInput[i].asset].decimals == 0) {\n        //never initialized before, adding to the list of assets\n        _assetsList.push(rewardsInput[i].asset);\n      }\n\n      uint256 decimals = _assets[rewardsInput[i].asset].decimals = IERC20Detailed(\n        rewardsInput[i].asset\n      ).decimals();\n\n      RewardsDataTypes.RewardData storage rewardConfig = _assets[rewardsInput[i].asset].rewards[\n        rewardsInput[i].reward\n      ];\n\n      // Add reward address to asset available rewards if latestUpdateTimestamp is zero\n      if (rewardConfig.lastUpdateTimestamp == 0) {\n        _assets[rewardsInput[i].asset].availableRewards[\n          _assets[rewardsInput[i].asset].availableRewardsCount\n        ] = rewardsInput[i].reward;\n        _assets[rewardsInput[i].asset].availableRewardsCount++;\n      }\n\n      // Add reward address to global rewards list if still not enabled\n      if (_isRewardEnabled[rewardsInput[i].reward] == false) {\n        _isRewardEnabled[rewardsInput[i].reward] = true;\n        _rewardsList.push(rewardsInput[i].reward);\n      }\n\n      // Due emissions is still zero, updates only latestUpdateTimestamp\n      (uint256 newIndex, ) = _updateRewardData(\n        rewardConfig,\n        rewardsInput[i].totalSupply,\n        10 ** decimals\n      );\n\n      // Configure emission and distribution end of the reward per asset\n      uint88 oldEmissionsPerSecond = rewardConfig.emissionPerSecond;\n      uint32 oldDistributionEnd = rewardConfig.distributionEnd;\n      rewardConfig.emissionPerSecond = rewardsInput[i].emissionPerSecond;\n      rewardConfig.distributionEnd = rewardsInput[i].distributionEnd;\n\n      emit AssetConfigUpdated(\n        rewardsInput[i].asset,\n        rewardsInput[i].reward,\n        oldEmissionsPerSecond,\n        rewardsInput[i].emissionPerSecond,\n        oldDistributionEnd,\n        rewardsInput[i].distributionEnd,\n        newIndex\n      );\n    }\n  }\n\n  /**\n   * @dev Updates the state of the distribution for the specified reward\n   * @param rewardData Storage pointer to the distribution reward config\n   * @param totalSupply Current total of underlying assets for this distribution\n   * @param assetUnit One unit of asset (10**decimals)\n   * @return The new distribution index\n   * @return True if the index was updated, false otherwise\n   **/\n  function _updateRewardData(\n    RewardsDataTypes.RewardData storage rewardData,\n    uint256 totalSupply,\n    uint256 assetUnit\n  ) internal returns (uint256, bool) {\n    (uint256 oldIndex, uint256 newIndex) = _getAssetIndex(rewardData, totalSupply, assetUnit);\n    bool indexUpdated;\n    if (newIndex != oldIndex) {\n      require(newIndex <= type(uint104).max, 'INDEX_OVERFLOW');\n      indexUpdated = true;\n\n      //optimization: storing one after another saves one SSTORE\n      rewardData.index = uint104(newIndex);\n      rewardData.lastUpdateTimestamp = block.timestamp.toUint32();\n    } else {\n      rewardData.lastUpdateTimestamp = block.timestamp.toUint32();\n    }\n\n    return (newIndex, indexUpdated);\n  }\n\n  /**\n   * @dev Updates the state of the distribution for the specific user\n   * @param rewardData Storage pointer to the distribution reward config\n   * @param user The address of the user\n   * @param userBalance The user balance of the asset\n   * @param newAssetIndex The new index of the asset distribution\n   * @param assetUnit One unit of asset (10**decimals)\n   * @return The rewards accrued since the last update\n   **/\n  function _updateUserData(\n    RewardsDataTypes.RewardData storage rewardData,\n    address user,\n    uint256 userBalance,\n    uint256 newAssetIndex,\n    uint256 assetUnit\n  ) internal returns (uint256, bool) {\n    uint256 userIndex = rewardData.usersData[user].index;\n    uint256 rewardsAccrued;\n    bool dataUpdated;\n    if ((dataUpdated = userIndex != newAssetIndex)) {\n      // already checked for overflow in _updateRewardData\n      rewardData.usersData[user].index = uint104(newAssetIndex);\n      if (userBalance != 0) {\n        rewardsAccrued = _getRewards(userBalance, newAssetIndex, userIndex, assetUnit);\n\n        rewardData.usersData[user].accrued += rewardsAccrued.toUint128();\n      }\n    }\n    return (rewardsAccrued, dataUpdated);\n  }\n\n  /**\n   * @dev Iterates and accrues all the rewards for asset of the specific user\n   * @param asset The address of the reference asset of the distribution\n   * @param user The user address\n   * @param userBalance The current user asset balance\n   * @param totalSupply Total supply of the asset\n   **/\n  function _updateData(\n    address asset,\n    address user,\n    uint256 userBalance,\n    uint256 totalSupply\n  ) internal {\n    uint256 assetUnit;\n    uint256 numAvailableRewards = _assets[asset].availableRewardsCount;\n    unchecked {\n      assetUnit = 10 ** _assets[asset].decimals;\n    }\n\n    if (numAvailableRewards == 0) {\n      return;\n    }\n    unchecked {\n      for (uint128 r = 0; r < numAvailableRewards; r++) {\n        address reward = _assets[asset].availableRewards[r];\n        RewardsDataTypes.RewardData storage rewardData = _assets[asset].rewards[reward];\n\n        (uint256 newAssetIndex, bool rewardDataUpdated) = _updateRewardData(\n          rewardData,\n          totalSupply,\n          assetUnit\n        );\n\n        (uint256 rewardsAccrued, bool userDataUpdated) = _updateUserData(\n          rewardData,\n          user,\n          userBalance,\n          newAssetIndex,\n          assetUnit\n        );\n\n        if (rewardDataUpdated || userDataUpdated) {\n          emit Accrued(asset, reward, user, newAssetIndex, newAssetIndex, rewardsAccrued);\n        }\n      }\n    }\n  }\n\n  /**\n   * @dev Accrues all the rewards of the assets specified in the userAssetBalances list\n   * @param user The address of the user\n   * @param userAssetBalances List of structs with the user balance and total supply of a set of assets\n   **/\n  function _updateDataMultiple(\n    address user,\n    RewardsDataTypes.UserAssetBalance[] memory userAssetBalances\n  ) internal {\n    for (uint256 i = 0; i < userAssetBalances.length; i++) {\n      _updateData(\n        userAssetBalances[i].asset,\n        user,\n        userAssetBalances[i].userBalance,\n        userAssetBalances[i].totalSupply\n      );\n    }\n  }\n\n  /**\n   * @dev Return the accrued unclaimed amount of a reward from a user over a list of distribution\n   * @param user The address of the user\n   * @param reward The address of the reward token\n   * @param userAssetBalances List of structs with the user balance and total supply of a set of assets\n   * @return unclaimedRewards The accrued rewards for the user until the moment\n   **/\n  function _getUserReward(\n    address user,\n    address reward,\n    RewardsDataTypes.UserAssetBalance[] memory userAssetBalances\n  ) internal view returns (uint256 unclaimedRewards) {\n    // Add unrealized rewards\n    for (uint256 i = 0; i < userAssetBalances.length; i++) {\n      if (userAssetBalances[i].userBalance == 0) {\n        unclaimedRewards += _assets[userAssetBalances[i].asset]\n          .rewards[reward]\n          .usersData[user]\n          .accrued;\n      } else {\n        unclaimedRewards +=\n          _getPendingRewards(user, reward, userAssetBalances[i]) +\n          _assets[userAssetBalances[i].asset].rewards[reward].usersData[user].accrued;\n      }\n    }\n\n    return unclaimedRewards;\n  }\n\n  /**\n   * @dev Calculates the pending (not yet accrued) rewards since the last user action\n   * @param user The address of the user\n   * @param reward The address of the reward token\n   * @param userAssetBalance struct with the user balance and total supply of the incentivized asset\n   * @return The pending rewards for the user since the last user action\n   **/\n  function _getPendingRewards(\n    address user,\n    address reward,\n    RewardsDataTypes.UserAssetBalance memory userAssetBalance\n  ) internal view returns (uint256) {\n    RewardsDataTypes.RewardData storage rewardData = _assets[userAssetBalance.asset].rewards[\n      reward\n    ];\n    uint256 assetUnit = 10 ** _assets[userAssetBalance.asset].decimals;\n    (, uint256 nextIndex) = _getAssetIndex(rewardData, userAssetBalance.totalSupply, assetUnit);\n\n    return\n      _getRewards(\n        userAssetBalance.userBalance,\n        nextIndex,\n        rewardData.usersData[user].index,\n        assetUnit\n      );\n  }\n\n  /**\n   * @dev Internal function for the calculation of user's rewards on a distribution\n   * @param userBalance Balance of the user asset on a distribution\n   * @param reserveIndex Current index of the distribution\n   * @param userIndex Index stored for the user, representation his staking moment\n   * @param assetUnit One unit of asset (10**decimals)\n   * @return The rewards\n   **/\n  function _getRewards(\n    uint256 userBalance,\n    uint256 reserveIndex,\n    uint256 userIndex,\n    uint256 assetUnit\n  ) internal pure returns (uint256) {\n    uint256 result = userBalance * (reserveIndex - userIndex);\n    assembly {\n      result := div(result, assetUnit)\n    }\n    return result;\n  }\n\n  /**\n   * @dev Calculates the next value of an specific distribution index, with validations\n   * @param rewardData Storage pointer to the distribution reward config\n   * @param totalSupply of the asset being rewarded\n   * @param assetUnit One unit of asset (10**decimals)\n   * @return The new index.\n   **/\n  function _getAssetIndex(\n    RewardsDataTypes.RewardData storage rewardData,\n    uint256 totalSupply,\n    uint256 assetUnit\n  ) internal view returns (uint256, uint256) {\n    uint256 oldIndex = rewardData.index;\n    uint256 distributionEnd = rewardData.distributionEnd;\n    uint256 emissionPerSecond = rewardData.emissionPerSecond;\n    uint256 lastUpdateTimestamp = rewardData.lastUpdateTimestamp;\n\n    if (\n      emissionPerSecond == 0 ||\n      totalSupply == 0 ||\n      lastUpdateTimestamp == block.timestamp ||\n      lastUpdateTimestamp >= distributionEnd\n    ) {\n      return (oldIndex, oldIndex);\n    }\n\n    uint256 currentTimestamp = block.timestamp > distributionEnd\n      ? distributionEnd\n      : block.timestamp;\n    uint256 timeDelta = currentTimestamp - lastUpdateTimestamp;\n    uint256 firstTerm = emissionPerSecond * timeDelta * assetUnit;\n    assembly {\n      firstTerm := div(firstTerm, totalSupply)\n    }\n    return (oldIndex, (firstTerm + oldIndex));\n  }\n\n  /**\n   * @dev Get user balances and total supply of all the assets specified by the assets parameter\n   * @param assets List of assets to retrieve user balance and total supply\n   * @param user Address of the user\n   * @return userAssetBalances contains a list of structs with user balance and total supply of the given assets\n   */\n  function _getUserAssetBalances(\n    address[] calldata assets,\n    address user\n  ) internal view virtual returns (RewardsDataTypes.UserAssetBalance[] memory userAssetBalances);\n\n  /// @inheritdoc IRewardsDistributor\n  function getAssetDecimals(address asset) external view returns (uint8) {\n    return _assets[asset].decimals;\n  }\n\n  /// @inheritdoc IRewardsDistributor\n  function getEmissionManager() external view returns (address) {\n    return EMISSION_MANAGER;\n  }\n}\n"},"contracts/rewards/transfer-strategies/PullRewardsTransferStrategy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {IPullRewardsTransferStrategy} from '../interfaces/IPullRewardsTransferStrategy.sol';\nimport {ITransferStrategyBase} from '../interfaces/ITransferStrategyBase.sol';\nimport {TransferStrategyBase} from './TransferStrategyBase.sol';\nimport {GPv2SafeERC20} from '@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\n\n/**\n * @title PullRewardsTransferStrategy\n * @notice Transfer strategy that pulls ERC20 rewards from an external account to the user address.\n * The external account could be a smart contract or EOA that must approve to the PullRewardsTransferStrategy contract address.\n * @author Aave\n **/\ncontract PullRewardsTransferStrategy is TransferStrategyBase, IPullRewardsTransferStrategy {\n  using GPv2SafeERC20 for IERC20;\n\n  address internal immutable REWARDS_VAULT;\n\n  constructor(\n    address incentivesController,\n    address rewardsAdmin,\n    address rewardsVault\n  ) TransferStrategyBase(incentivesController, rewardsAdmin) {\n    REWARDS_VAULT = rewardsVault;\n  }\n\n  /// @inheritdoc TransferStrategyBase\n  function performTransfer(\n    address to,\n    address reward,\n    uint256 amount\n  )\n    external\n    override(TransferStrategyBase, ITransferStrategyBase)\n    onlyIncentivesController\n    returns (bool)\n  {\n    IERC20(reward).safeTransferFrom(REWARDS_VAULT, to, amount);\n\n    return true;\n  }\n\n  /// @inheritdoc IPullRewardsTransferStrategy\n  function getRewardsVault() external view returns (address) {\n    return REWARDS_VAULT;\n  }\n}\n"},"contracts/rewards/transfer-strategies/StakedTokenTransferStrategy.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {IStakedToken} from '../interfaces/IStakedToken.sol';\nimport {IStakedTokenTransferStrategy} from '../interfaces/IStakedTokenTransferStrategy.sol';\nimport {ITransferStrategyBase} from '../interfaces/ITransferStrategyBase.sol';\nimport {TransferStrategyBase} from './TransferStrategyBase.sol';\nimport {GPv2SafeERC20} from '@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\n\n/**\n * @title StakedTokenTransferStrategy\n * @notice Transfer strategy that stakes the rewards into a staking contract and transfers the staking contract token.\n * The underlying token must be transferred to this contract to be able to stake it on demand.\n * @author Aave\n **/\ncontract StakedTokenTransferStrategy is TransferStrategyBase, IStakedTokenTransferStrategy {\n  using GPv2SafeERC20 for IERC20;\n\n  IStakedToken internal immutable STAKE_CONTRACT;\n  address internal immutable UNDERLYING_TOKEN;\n\n  constructor(\n    address incentivesController,\n    address rewardsAdmin,\n    IStakedToken stakeToken\n  ) TransferStrategyBase(incentivesController, rewardsAdmin) {\n    STAKE_CONTRACT = stakeToken;\n    UNDERLYING_TOKEN = STAKE_CONTRACT.STAKED_TOKEN();\n\n    IERC20(UNDERLYING_TOKEN).approve(address(STAKE_CONTRACT), 0);\n    IERC20(UNDERLYING_TOKEN).approve(address(STAKE_CONTRACT), type(uint256).max);\n  }\n\n  /// @inheritdoc TransferStrategyBase\n  function performTransfer(\n    address to,\n    address reward,\n    uint256 amount\n  )\n    external\n    override(TransferStrategyBase, ITransferStrategyBase)\n    onlyIncentivesController\n    returns (bool)\n  {\n    require(reward == address(STAKE_CONTRACT), 'REWARD_TOKEN_NOT_STAKE_CONTRACT');\n\n    STAKE_CONTRACT.stake(to, amount);\n\n    return true;\n  }\n\n  /// @inheritdoc IStakedTokenTransferStrategy\n  function renewApproval() external onlyRewardsAdmin {\n    IERC20(UNDERLYING_TOKEN).approve(address(STAKE_CONTRACT), 0);\n    IERC20(UNDERLYING_TOKEN).approve(address(STAKE_CONTRACT), type(uint256).max);\n  }\n\n  /// @inheritdoc IStakedTokenTransferStrategy\n  function dropApproval() external onlyRewardsAdmin {\n    IERC20(UNDERLYING_TOKEN).approve(address(STAKE_CONTRACT), 0);\n  }\n\n  /// @inheritdoc IStakedTokenTransferStrategy\n  function getStakeContract() external view returns (address) {\n    return address(STAKE_CONTRACT);\n  }\n\n  /// @inheritdoc IStakedTokenTransferStrategy\n  function getUnderlyingToken() external view returns (address) {\n    return UNDERLYING_TOKEN;\n  }\n}\n"},"contracts/rewards/transfer-strategies/TransferStrategyBase.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {ITransferStrategyBase} from '../interfaces/ITransferStrategyBase.sol';\nimport {GPv2SafeERC20} from '@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol';\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\n\n/**\n * @title TransferStrategyStorage\n * @author Aave\n **/\nabstract contract TransferStrategyBase is ITransferStrategyBase {\n  using GPv2SafeERC20 for IERC20;\n\n  address internal immutable INCENTIVES_CONTROLLER;\n  address internal immutable REWARDS_ADMIN;\n\n  constructor(address incentivesController, address rewardsAdmin) {\n    INCENTIVES_CONTROLLER = incentivesController;\n    REWARDS_ADMIN = rewardsAdmin;\n  }\n\n  /**\n   * @dev Modifier for incentives controller only functions\n   */\n  modifier onlyIncentivesController() {\n    require(INCENTIVES_CONTROLLER == msg.sender, 'CALLER_NOT_INCENTIVES_CONTROLLER');\n    _;\n  }\n\n  /**\n   * @dev Modifier for reward admin only functions\n   */\n  modifier onlyRewardsAdmin() {\n    require(msg.sender == REWARDS_ADMIN, 'ONLY_REWARDS_ADMIN');\n    _;\n  }\n\n  /// @inheritdoc ITransferStrategyBase\n  function getIncentivesController() external view override returns (address) {\n    return INCENTIVES_CONTROLLER;\n  }\n\n  /// @inheritdoc ITransferStrategyBase\n  function getRewardsAdmin() external view override returns (address) {\n    return REWARDS_ADMIN;\n  }\n\n  /// @inheritdoc ITransferStrategyBase\n  function performTransfer(\n    address to,\n    address reward,\n    uint256 amount\n  ) external virtual returns (bool);\n\n  /// @inheritdoc ITransferStrategyBase\n  function emergencyWithdrawal(\n    address token,\n    address to,\n    uint256 amount\n  ) external onlyRewardsAdmin {\n    IERC20(token).safeTransfer(to, amount);\n\n    emit EmergencyWithdrawal(msg.sender, token, to, amount);\n  }\n}\n"},"contracts/treasury/AaveEcosystemReserveController.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.10;\n\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\nimport {IStreamable} from './interfaces/IStreamable.sol';\nimport {IAdminControlledEcosystemReserve} from './interfaces/IAdminControlledEcosystemReserve.sol';\nimport {IAaveEcosystemReserveController} from './interfaces/IAaveEcosystemReserveController.sol';\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\n\ncontract AaveEcosystemReserveController is Ownable, IAaveEcosystemReserveController {\n  /**\n   * @notice Constructor.\n   * @param aaveGovShortTimelock The address of the Aave's governance executor, owning this contract\n   */\n  constructor(address aaveGovShortTimelock) {\n    transferOwnership(aaveGovShortTimelock);\n  }\n\n  /// @inheritdoc IAaveEcosystemReserveController\n  function approve(\n    address collector,\n    IERC20 token,\n    address recipient,\n    uint256 amount\n  ) external onlyOwner {\n    IAdminControlledEcosystemReserve(collector).approve(token, recipient, amount);\n  }\n\n  /// @inheritdoc IAaveEcosystemReserveController\n  function transfer(\n    address collector,\n    IERC20 token,\n    address recipient,\n    uint256 amount\n  ) external onlyOwner {\n    IAdminControlledEcosystemReserve(collector).transfer(token, recipient, amount);\n  }\n\n  /// @inheritdoc IAaveEcosystemReserveController\n  function createStream(\n    address collector,\n    address recipient,\n    uint256 deposit,\n    IERC20 tokenAddress,\n    uint256 startTime,\n    uint256 stopTime\n  ) external onlyOwner returns (uint256) {\n    return\n      IStreamable(collector).createStream(\n        recipient,\n        deposit,\n        address(tokenAddress),\n        startTime,\n        stopTime\n      );\n  }\n\n  /// @inheritdoc IAaveEcosystemReserveController\n  function withdrawFromStream(\n    address collector,\n    uint256 streamId,\n    uint256 funds\n  ) external onlyOwner returns (bool) {\n    return IStreamable(collector).withdrawFromStream(streamId, funds);\n  }\n\n  /// @inheritdoc IAaveEcosystemReserveController\n  function cancelStream(address collector, uint256 streamId) external onlyOwner returns (bool) {\n    return IStreamable(collector).cancelStream(streamId);\n  }\n}\n"},"contracts/treasury/AaveEcosystemReserveV2.sol":{"content":"// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.10;\n\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\nimport {IStreamable} from './interfaces/IStreamable.sol';\nimport {AdminControlledEcosystemReserve} from './AdminControlledEcosystemReserve.sol';\nimport {ReentrancyGuard} from './libs/ReentrancyGuard.sol';\nimport {SafeERC20} from './libs/SafeERC20.sol';\n\n/**\n * @title AaveEcosystemReserve v2\n * @notice Stores ERC20 tokens of an ecosystem reserve, adding streaming capabilities.\n * Modification of Sablier https://github.com/sablierhq/sablier/blob/develop/packages/protocol/contracts/Sablier.sol\n * Original can be found also deployed on https://etherscan.io/address/0xCD18eAa163733Da39c232722cBC4E8940b1D8888\n * Modifications:\n * - Sablier \"pulls\" the funds from the creator of the stream at creation. In the Aave case, we already have the funds.\n * - Anybody can create streams on Sablier. Here, only the funds admin (Aave governance via controller) can\n * - Adapted codebase to Solidity 0.8.11, mainly removing SafeMath and CarefulMath to use native safe math\n * - Same as with creation, on Sablier the `sender` and `recipient` can cancel a stream. Here, only fund admin and recipient\n * @author BGD Labs\n **/\ncontract AaveEcosystemReserveV2 is AdminControlledEcosystemReserve, ReentrancyGuard, IStreamable {\n  using SafeERC20 for IERC20;\n\n  /*** Storage Properties ***/\n\n  /**\n   * @notice Counter for new stream ids.\n   */\n  uint256 private _nextStreamId;\n\n  /**\n   * @notice The stream objects identifiable by their unsigned integer ids.\n   */\n  mapping(uint256 => Stream) private _streams;\n\n  /*** Modifiers ***/\n\n  /**\n   * @dev Throws if the caller is not the funds admin of the recipient of the stream.\n   */\n  modifier onlyAdminOrRecipient(uint256 streamId) {\n    require(\n      msg.sender == _fundsAdmin || msg.sender == _streams[streamId].recipient,\n      'caller is not the funds admin or the recipient of the stream'\n    );\n    _;\n  }\n\n  /**\n   * @dev Throws if the provided id does not point to a valid stream.\n   */\n  modifier streamExists(uint256 streamId) {\n    require(_streams[streamId].isEntity, 'stream does not exist');\n    _;\n  }\n\n  /*** Contract Logic Starts Here */\n\n  function initialize(address fundsAdmin) external initializer {\n    _nextStreamId = 100000;\n    _setFundsAdmin(fundsAdmin);\n  }\n\n  /*** View Functions ***/\n\n  /**\n   * @notice Returns the next available stream id\n   * @notice Returns the stream id.\n   */\n  function getNextStreamId() external view returns (uint256) {\n    return _nextStreamId;\n  }\n\n  /**\n   * @notice Returns the stream with all its properties.\n   * @dev Throws if the id does not point to a valid stream.\n   * @param streamId The id of the stream to query.\n   * @notice Returns the stream object.\n   */\n  function getStream(\n    uint256 streamId\n  )\n    external\n    view\n    streamExists(streamId)\n    returns (\n      address sender,\n      address recipient,\n      uint256 deposit,\n      address tokenAddress,\n      uint256 startTime,\n      uint256 stopTime,\n      uint256 remainingBalance,\n      uint256 ratePerSecond\n    )\n  {\n    sender = _streams[streamId].sender;\n    recipient = _streams[streamId].recipient;\n    deposit = _streams[streamId].deposit;\n    tokenAddress = _streams[streamId].tokenAddress;\n    startTime = _streams[streamId].startTime;\n    stopTime = _streams[streamId].stopTime;\n    remainingBalance = _streams[streamId].remainingBalance;\n    ratePerSecond = _streams[streamId].ratePerSecond;\n  }\n\n  /**\n   * @notice Returns either the delta in seconds between `block.timestamp` and `startTime` or\n   *  between `stopTime` and `startTime, whichever is smaller. If `block.timestamp` is before\n   *  `startTime`, it returns 0.\n   * @dev Throws if the id does not point to a valid stream.\n   * @param streamId The id of the stream for which to query the delta.\n   * @notice Returns the time delta in seconds.\n   */\n  function deltaOf(uint256 streamId) public view streamExists(streamId) returns (uint256 delta) {\n    Stream memory stream = _streams[streamId];\n    if (block.timestamp <= stream.startTime) return 0;\n    if (block.timestamp < stream.stopTime) return block.timestamp - stream.startTime;\n    return stream.stopTime - stream.startTime;\n  }\n\n  struct BalanceOfLocalVars {\n    uint256 recipientBalance;\n    uint256 withdrawalAmount;\n    uint256 senderBalance;\n  }\n\n  /**\n   * @notice Returns the available funds for the given stream id and address.\n   * @dev Throws if the id does not point to a valid stream.\n   * @param streamId The id of the stream for which to query the balance.\n   * @param who The address for which to query the balance.\n   * @notice Returns the total funds allocated to `who` as uint256.\n   */\n  function balanceOf(\n    uint256 streamId,\n    address who\n  ) public view streamExists(streamId) returns (uint256 balance) {\n    Stream memory stream = _streams[streamId];\n    BalanceOfLocalVars memory vars;\n\n    uint256 delta = deltaOf(streamId);\n    vars.recipientBalance = delta * stream.ratePerSecond;\n\n    /*\n     * If the stream `balance` does not equal `deposit`, it means there have been withdrawals.\n     * We have to subtract the total amount withdrawn from the amount of money that has been\n     * streamed until now.\n     */\n    if (stream.deposit > stream.remainingBalance) {\n      vars.withdrawalAmount = stream.deposit - stream.remainingBalance;\n      vars.recipientBalance = vars.recipientBalance - vars.withdrawalAmount;\n    }\n\n    if (who == stream.recipient) return vars.recipientBalance;\n    if (who == stream.sender) {\n      vars.senderBalance = stream.remainingBalance - vars.recipientBalance;\n      return vars.senderBalance;\n    }\n    return 0;\n  }\n\n  /*** Public Effects & Interactions Functions ***/\n\n  struct CreateStreamLocalVars {\n    uint256 duration;\n    uint256 ratePerSecond;\n  }\n\n  /**\n   * @notice Creates a new stream funded by this contracts itself and paid towards `recipient`.\n   * @dev Throws if the recipient is the zero address, the contract itself or the caller.\n   *  Throws if the deposit is 0.\n   *  Throws if the start time is before `block.timestamp`.\n   *  Throws if the stop time is before the start time.\n   *  Throws if the duration calculation has a math error.\n   *  Throws if the deposit is smaller than the duration.\n   *  Throws if the deposit is not a multiple of the duration.\n   *  Throws if the rate calculation has a math error.\n   *  Throws if the next stream id calculation has a math error.\n   *  Throws if the contract is not allowed to transfer enough tokens.\n   *  Throws if there is a token transfer failure.\n   * @param recipient The address towards which the money is streamed.\n   * @param deposit The amount of money to be streamed.\n   * @param tokenAddress The ERC20 token to use as streaming currency.\n   * @param startTime The unix timestamp for when the stream starts.\n   * @param stopTime The unix timestamp for when the stream stops.\n   * @notice Returns the uint256 id of the newly created stream.\n   */\n  function createStream(\n    address recipient,\n    uint256 deposit,\n    address tokenAddress,\n    uint256 startTime,\n    uint256 stopTime\n  ) external onlyFundsAdmin returns (uint256) {\n    require(recipient != address(0), 'stream to the zero address');\n    require(recipient != address(this), 'stream to the contract itself');\n    require(recipient != msg.sender, 'stream to the caller');\n    require(deposit > 0, 'deposit is zero');\n    require(startTime >= block.timestamp, 'start time before block.timestamp');\n    require(stopTime > startTime, 'stop time before the start time');\n\n    CreateStreamLocalVars memory vars;\n    vars.duration = stopTime - startTime;\n\n    /* Without this, the rate per second would be zero. */\n    require(deposit >= vars.duration, 'deposit smaller than time delta');\n\n    /* This condition avoids dealing with remainders */\n    require(deposit % vars.duration == 0, 'deposit not multiple of time delta');\n\n    vars.ratePerSecond = deposit / vars.duration;\n\n    /* Create and store the stream object. */\n    uint256 streamId = _nextStreamId;\n    _streams[streamId] = Stream({\n      remainingBalance: deposit,\n      deposit: deposit,\n      isEntity: true,\n      ratePerSecond: vars.ratePerSecond,\n      recipient: recipient,\n      sender: address(this),\n      startTime: startTime,\n      stopTime: stopTime,\n      tokenAddress: tokenAddress\n    });\n\n    /* Increment the next stream id. */\n    _nextStreamId++;\n\n    emit CreateStream(\n      streamId,\n      address(this),\n      recipient,\n      deposit,\n      tokenAddress,\n      startTime,\n      stopTime\n    );\n    return streamId;\n  }\n\n  /**\n   * @notice Withdraws from the contract to the recipient's account.\n   * @dev Throws if the id does not point to a valid stream.\n   *  Throws if the caller is not the funds admin or the recipient of the stream.\n   *  Throws if the amount exceeds the available balance.\n   *  Throws if there is a token transfer failure.\n   * @param streamId The id of the stream to withdraw tokens from.\n   * @param amount The amount of tokens to withdraw.\n   */\n  function withdrawFromStream(\n    uint256 streamId,\n    uint256 amount\n  ) external nonReentrant streamExists(streamId) onlyAdminOrRecipient(streamId) returns (bool) {\n    require(amount > 0, 'amount is zero');\n    Stream memory stream = _streams[streamId];\n\n    uint256 balance = balanceOf(streamId, stream.recipient);\n    require(balance >= amount, 'amount exceeds the available balance');\n\n    _streams[streamId].remainingBalance = stream.remainingBalance - amount;\n\n    if (_streams[streamId].remainingBalance == 0) delete _streams[streamId];\n\n    IERC20(stream.tokenAddress).safeTransfer(stream.recipient, amount);\n    emit WithdrawFromStream(streamId, stream.recipient, amount);\n    return true;\n  }\n\n  /**\n   * @notice Cancels the stream and transfers the tokens back on a pro rata basis.\n   * @dev Throws if the id does not point to a valid stream.\n   *  Throws if the caller is not the funds admin or the recipient of the stream.\n   *  Throws if there is a token transfer failure.\n   * @param streamId The id of the stream to cancel.\n   * @notice Returns bool true=success, otherwise false.\n   */\n  function cancelStream(\n    uint256 streamId\n  ) external nonReentrant streamExists(streamId) onlyAdminOrRecipient(streamId) returns (bool) {\n    Stream memory stream = _streams[streamId];\n    uint256 senderBalance = balanceOf(streamId, stream.sender);\n    uint256 recipientBalance = balanceOf(streamId, stream.recipient);\n\n    delete _streams[streamId];\n\n    IERC20 token = IERC20(stream.tokenAddress);\n    if (recipientBalance > 0) token.safeTransfer(stream.recipient, recipientBalance);\n\n    emit CancelStream(streamId, stream.sender, stream.recipient, senderBalance, recipientBalance);\n    return true;\n  }\n}\n"},"contracts/treasury/AdminControlledEcosystemReserve.sol":{"content":"// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.10;\n\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\nimport {IAdminControlledEcosystemReserve} from './interfaces/IAdminControlledEcosystemReserve.sol';\nimport {VersionedInitializable} from './libs/VersionedInitializable.sol';\nimport {SafeERC20} from './libs/SafeERC20.sol';\nimport {ReentrancyGuard} from './libs/ReentrancyGuard.sol';\nimport {Address} from './libs/Address.sol';\n\n/**\n * @title AdminControlledEcosystemReserve\n * @notice Stores ERC20 tokens, and allows to dispose of them via approval or transfer dynamics\n * Adapted to be an implementation of a transparent proxy\n * @dev Done abstract to add an `initialize()` function on the child, with `initializer` modifier\n * @author BGD Labs\n **/\nabstract contract AdminControlledEcosystemReserve is\n  VersionedInitializable,\n  IAdminControlledEcosystemReserve\n{\n  using SafeERC20 for IERC20;\n  using Address for address payable;\n\n  address internal _fundsAdmin;\n\n  uint256 public constant REVISION = 1;\n\n  /// @inheritdoc IAdminControlledEcosystemReserve\n  address public constant ETH_MOCK_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;\n\n  modifier onlyFundsAdmin() {\n    require(msg.sender == _fundsAdmin, 'ONLY_BY_FUNDS_ADMIN');\n    _;\n  }\n\n  function getRevision() internal pure override returns (uint256) {\n    return REVISION;\n  }\n\n  /// @inheritdoc IAdminControlledEcosystemReserve\n  function getFundsAdmin() external view returns (address) {\n    return _fundsAdmin;\n  }\n\n  /// @inheritdoc IAdminControlledEcosystemReserve\n  function approve(IERC20 token, address recipient, uint256 amount) external onlyFundsAdmin {\n    token.safeApprove(recipient, amount);\n  }\n\n  /// @inheritdoc IAdminControlledEcosystemReserve\n  function transfer(IERC20 token, address recipient, uint256 amount) external onlyFundsAdmin {\n    require(recipient != address(0), 'INVALID_0X_RECIPIENT');\n\n    if (address(token) == ETH_MOCK_ADDRESS) {\n      payable(recipient).sendValue(amount);\n    } else {\n      token.safeTransfer(recipient, amount);\n    }\n  }\n\n  /// @dev needed in order to receive ETH from the Aave v1 ecosystem reserve\n  receive() external payable {}\n\n  function _setFundsAdmin(address admin) internal {\n    _fundsAdmin = admin;\n    emit NewFundsAdmin(admin);\n  }\n}\n"},"contracts/treasury/Collector.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {VersionedInitializable} from '@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol';\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\nimport {ICollector} from './interfaces/ICollector.sol';\n\n/**\n * @title Collector\n * @notice Stores the fees collected by the protocol and allows the fund administrator\n *         to approve or transfer the collected ERC20 tokens.\n * @dev Implementation contract that must be initialized using transparent proxy pattern.\n * @author Aave\n **/\ncontract Collector is VersionedInitializable, ICollector {\n  // Store the current funds administrator address\n  address internal _fundsAdmin;\n\n  // Revision version of this implementation contract\n  uint256 public constant REVISION = 1;\n\n  /**\n   * @dev Allow only the funds administrator address to call functions marked by this modifier\n   */\n  modifier onlyFundsAdmin() {\n    require(msg.sender == _fundsAdmin, 'ONLY_BY_FUNDS_ADMIN');\n    _;\n  }\n\n  /**\n   * @dev Initialize the transparent proxy with the admin of the Collector\n   * @param reserveController The address of the admin that controls Collector\n   */\n  function initialize(address reserveController) external initializer {\n    _setFundsAdmin(reserveController);\n  }\n\n  /// @inheritdoc VersionedInitializable\n  function getRevision() internal pure override returns (uint256) {\n    return REVISION;\n  }\n\n  /// @inheritdoc ICollector\n  function getFundsAdmin() external view returns (address) {\n    return _fundsAdmin;\n  }\n\n  /// @inheritdoc ICollector\n  function approve(IERC20 token, address recipient, uint256 amount) external onlyFundsAdmin {\n    token.approve(recipient, amount);\n  }\n\n  /// @inheritdoc ICollector\n  function transfer(IERC20 token, address recipient, uint256 amount) external onlyFundsAdmin {\n    token.transfer(recipient, amount);\n  }\n\n  /// @inheritdoc ICollector\n  function setFundsAdmin(address admin) external onlyFundsAdmin {\n    _setFundsAdmin(admin);\n  }\n\n  /**\n   * @dev Transfer the ownership of the funds administrator role.\n   * @param admin The address of the new funds administrator\n   */\n  function _setFundsAdmin(address admin) internal {\n    _fundsAdmin = admin;\n    emit NewFundsAdmin(admin);\n  }\n}\n"},"contracts/treasury/CollectorController.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\nimport {ICollector} from './interfaces/ICollector.sol';\n\n/**\n * @title CollectorController\n * @notice The CollectorController contracts allows the owner of the contract\n           to approve or transfer tokens from the specified collector proxy contract.\n           The admin of the Collector proxy can't be the same as the fundsAdmin address.\n           This is needed due the usage of transparent proxy pattern.\n * @author Aave\n **/\ncontract CollectorController is Ownable {\n  /**\n   * @dev Constructor setups the ownership of the contract\n   * @param owner The address of the owner of the CollectorController\n   */\n  constructor(address owner) {\n    transferOwnership(owner);\n  }\n\n  /**\n   * @dev Transfer an amount of tokens to the recipient.\n   * @param collector The address of the collector contract\n   * @param token The address of the asset\n   * @param recipient The address of the entity to transfer the tokens.\n   * @param amount The amount to be transferred.\n   */\n  function approve(\n    address collector,\n    IERC20 token,\n    address recipient,\n    uint256 amount\n  ) external onlyOwner {\n    ICollector(collector).approve(token, recipient, amount);\n  }\n\n  /**\n   * @dev Transfer an amount of tokens to the recipient.\n   * @param collector The address of the collector contract to retrieve funds from (e.g. Aave ecosystem reserve)\n   * @param token The address of the asset\n   * @param recipient The address of the entity to transfer the tokens.\n   * @param amount The amount to be transferred.\n   */\n  function transfer(\n    address collector,\n    IERC20 token,\n    address recipient,\n    uint256 amount\n  ) external onlyOwner {\n    ICollector(collector).transfer(token, recipient, amount);\n  }\n}\n"},"contracts/treasury/interfaces/IAaveEcosystemReserveController.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.10;\n\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\n\ninterface IAaveEcosystemReserveController {\n  /**\n   * @notice Proxy function for ERC20's approve(), pointing to a specific collector contract\n   * @param collector The collector contract with funds (Aave ecosystem reserve)\n   * @param token The asset address\n   * @param recipient Allowance's recipient\n   * @param amount Allowance to approve\n   **/\n  function approve(address collector, IERC20 token, address recipient, uint256 amount) external;\n\n  /**\n   * @notice Proxy function for ERC20's transfer(), pointing to a specific collector contract\n   * @param collector The collector contract with funds (Aave ecosystem reserve)\n   * @param token The asset address\n   * @param recipient Transfer's recipient\n   * @param amount Amount to transfer\n   **/\n  function transfer(address collector, IERC20 token, address recipient, uint256 amount) external;\n\n  /**\n   * @notice Proxy function to create a stream of token on a specific collector contract\n   * @param collector The collector contract with funds (Aave ecosystem reserve)\n   * @param recipient The recipient of the stream of token\n   * @param deposit Total amount to be streamed\n   * @param tokenAddress The ERC20 token to use as streaming asset\n   * @param startTime The unix timestamp for when the stream starts\n   * @param stopTime The unix timestamp for when the stream stops\n   * @return uint256 The stream id created\n   **/\n  function createStream(\n    address collector,\n    address recipient,\n    uint256 deposit,\n    IERC20 tokenAddress,\n    uint256 startTime,\n    uint256 stopTime\n  ) external returns (uint256);\n\n  /**\n   * @notice Proxy function to withdraw from a stream of token on a specific collector contract\n   * @param collector The collector contract with funds (Aave ecosystem reserve)\n   * @param streamId The id of the stream to withdraw tokens from\n   * @param funds Amount to withdraw\n   * @return bool If the withdrawal finished properly\n   **/\n  function withdrawFromStream(\n    address collector,\n    uint256 streamId,\n    uint256 funds\n  ) external returns (bool);\n\n  /**\n   * @notice Proxy function to cancel a stream of token on a specific collector contract\n   * @param collector The collector contract with funds (Aave ecosystem reserve)\n   * @param streamId The id of the stream to cancel\n   * @return bool If the cancellation happened correctly\n   **/\n  function cancelStream(address collector, uint256 streamId) external returns (bool);\n}\n"},"contracts/treasury/interfaces/IAdminControlledEcosystemReserve.sol":{"content":"// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.10;\n\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\n\ninterface IAdminControlledEcosystemReserve {\n  /** @notice Emitted when the funds admin changes\n   * @param fundsAdmin The new funds admin\n   **/\n  event NewFundsAdmin(address indexed fundsAdmin);\n\n  /** @notice Returns the mock ETH reference address\n   * @return address The address\n   **/\n  function ETH_MOCK_ADDRESS() external pure returns (address);\n\n  /**\n   * @notice Return the funds admin, only entity to be able to interact with this contract (controller of reserve)\n   * @return address The address of the funds admin\n   **/\n  function getFundsAdmin() external view returns (address);\n\n  /**\n   * @dev Function for the funds admin to give ERC20 allowance to other parties\n   * @param token The address of the token to give allowance from\n   * @param recipient Allowance's recipient\n   * @param amount Allowance to approve\n   **/\n  function approve(IERC20 token, address recipient, uint256 amount) external;\n\n  /**\n   * @notice Function for the funds admin to transfer ERC20 tokens to other parties\n   * @param token The address of the token to transfer\n   * @param recipient Transfer's recipient\n   * @param amount Amount to transfer\n   **/\n  function transfer(IERC20 token, address recipient, uint256 amount) external;\n}\n"},"contracts/treasury/interfaces/ICollector.sol":{"content":"// SPDX-License-Identifier: AGPL-3.0\npragma solidity ^0.8.10;\n\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\n\n/**\n * @title ICollector\n * @notice Defines the interface of the Collector contract\n * @author Aave\n **/\ninterface ICollector {\n  /**\n   * @dev Emitted during the transfer of ownership of the funds administrator address\n   * @param fundsAdmin The new funds administrator address\n   **/\n  event NewFundsAdmin(address indexed fundsAdmin);\n\n  /**\n   * @dev Retrieve the current implementation Revision of the proxy\n   * @return The revision version\n   */\n  function REVISION() external view returns (uint256);\n\n  /**\n   * @dev Retrieve the current funds administrator\n   * @return The address of the funds administrator\n   */\n  function getFundsAdmin() external view returns (address);\n\n  /**\n   * @dev Approve an amount of tokens to be pulled by the recipient.\n   * @param token The address of the asset\n   * @param recipient The address of the entity allowed to pull tokens\n   * @param amount The amount allowed to be pulled. If zero it will revoke the approval.\n   */\n  function approve(IERC20 token, address recipient, uint256 amount) external;\n\n  /**\n   * @dev Transfer an amount of tokens to the recipient.\n   * @param token The address of the asset\n   * @param recipient The address of the entity to transfer the tokens.\n   * @param amount The amount to be transferred.\n   */\n  function transfer(IERC20 token, address recipient, uint256 amount) external;\n\n  /**\n   * @dev Transfer the ownership of the funds administrator role.\n          This function should only be callable by the current funds administrator.\n   * @param admin The address of the new funds administrator\n   */\n  function setFundsAdmin(address admin) external;\n}\n"},"contracts/treasury/interfaces/IStreamable.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.10;\n\ninterface IStreamable {\n  struct Stream {\n    uint256 deposit;\n    uint256 ratePerSecond;\n    uint256 remainingBalance;\n    uint256 startTime;\n    uint256 stopTime;\n    address recipient;\n    address sender;\n    address tokenAddress;\n    bool isEntity;\n  }\n\n  event CreateStream(\n    uint256 indexed streamId,\n    address indexed sender,\n    address indexed recipient,\n    uint256 deposit,\n    address tokenAddress,\n    uint256 startTime,\n    uint256 stopTime\n  );\n\n  event WithdrawFromStream(uint256 indexed streamId, address indexed recipient, uint256 amount);\n\n  event CancelStream(\n    uint256 indexed streamId,\n    address indexed sender,\n    address indexed recipient,\n    uint256 senderBalance,\n    uint256 recipientBalance\n  );\n\n  function balanceOf(uint256 streamId, address who) external view returns (uint256 balance);\n\n  function getStream(\n    uint256 streamId\n  )\n    external\n    view\n    returns (\n      address sender,\n      address recipient,\n      uint256 deposit,\n      address token,\n      uint256 startTime,\n      uint256 stopTime,\n      uint256 remainingBalance,\n      uint256 ratePerSecond\n    );\n\n  function createStream(\n    address recipient,\n    uint256 deposit,\n    address tokenAddress,\n    uint256 startTime,\n    uint256 stopTime\n  ) external returns (uint256 streamId);\n\n  function withdrawFromStream(uint256 streamId, uint256 funds) external returns (bool);\n\n  function cancelStream(uint256 streamId) external returns (bool);\n\n  function initialize(address fundsAdmin) external;\n}\n"},"contracts/treasury/libs/Address.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n  /**\n   * @dev Returns true if `account` is a contract.\n   *\n   * [IMPORTANT]\n   * ====\n   * It is unsafe to assume that an address for which this function returns\n   * false is an externally-owned account (EOA) and not a contract.\n   *\n   * Among others, `isContract` will return false for the following\n   * types of addresses:\n   *\n   *  - an externally-owned account\n   *  - a contract in construction\n   *  - an address where a contract will be created\n   *  - an address where a contract lived, but was destroyed\n   * ====\n   *\n   * [IMPORTANT]\n   * ====\n   * You shouldn't rely on `isContract` to protect against flash loan attacks!\n   *\n   * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n   * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n   * constructor.\n   * ====\n   */\n  function isContract(address account) internal view returns (bool) {\n    // This method relies on extcodesize/address.code.length, which returns 0\n    // for contracts in construction, since the code is only stored at the end\n    // of the constructor execution.\n\n    return account.code.length > 0;\n  }\n\n  /**\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n   * `recipient`, forwarding all available gas and reverting on errors.\n   *\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\n   * imposed by `transfer`, making them unable to receive funds via\n   * `transfer`. {sendValue} removes this limitation.\n   *\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n   *\n   * IMPORTANT: because control is transferred to `recipient`, care must be\n   * taken to not create reentrancy vulnerabilities. Consider using\n   * {ReentrancyGuard} or the\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n   */\n  function sendValue(address payable recipient, uint256 amount) internal {\n    require(address(this).balance >= amount, 'Address: insufficient balance');\n\n    (bool success, ) = recipient.call{value: amount}('');\n    require(success, 'Address: unable to send value, recipient may have reverted');\n  }\n\n  /**\n   * @dev Performs a Solidity function call using a low level `call`. A\n   * plain `call` is an unsafe replacement for a function call: use this\n   * function instead.\n   *\n   * If `target` reverts with a revert reason, it is bubbled up by this\n   * function (like regular Solidity function calls).\n   *\n   * Returns the raw returned data. To convert to the expected return value,\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n   *\n   * Requirements:\n   *\n   * - `target` must be a contract.\n   * - calling `target` with `data` must not revert.\n   *\n   * _Available since v3.1._\n   */\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n    return functionCall(target, data, 'Address: low-level call failed');\n  }\n\n  /**\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n   * `errorMessage` as a fallback revert reason when `target` reverts.\n   *\n   * _Available since v3.1._\n   */\n  function functionCall(\n    address target,\n    bytes memory data,\n    string memory errorMessage\n  ) internal returns (bytes memory) {\n    return functionCallWithValue(target, data, 0, errorMessage);\n  }\n\n  /**\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n   * but also transferring `value` wei to `target`.\n   *\n   * Requirements:\n   *\n   * - the calling contract must have an ETH balance of at least `value`.\n   * - the called Solidity function must be `payable`.\n   *\n   * _Available since v3.1._\n   */\n  function functionCallWithValue(\n    address target,\n    bytes memory data,\n    uint256 value\n  ) internal returns (bytes memory) {\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\n  }\n\n  /**\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\n   *\n   * _Available since v3.1._\n   */\n  function functionCallWithValue(\n    address target,\n    bytes memory data,\n    uint256 value,\n    string memory errorMessage\n  ) internal returns (bytes memory) {\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\n    require(isContract(target), 'Address: call to non-contract');\n\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\n    return verifyCallResult(success, returndata, errorMessage);\n  }\n\n  /**\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n   * but performing a static call.\n   *\n   * _Available since v3.3._\n   */\n  function functionStaticCall(\n    address target,\n    bytes memory data\n  ) internal view returns (bytes memory) {\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\n  }\n\n  /**\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n   * but performing a static call.\n   *\n   * _Available since v3.3._\n   */\n  function functionStaticCall(\n    address target,\n    bytes memory data,\n    string memory errorMessage\n  ) internal view returns (bytes memory) {\n    require(isContract(target), 'Address: static call to non-contract');\n\n    (bool success, bytes memory returndata) = target.staticcall(data);\n    return verifyCallResult(success, returndata, errorMessage);\n  }\n\n  /**\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n   * but performing a delegate call.\n   *\n   * _Available since v3.4._\n   */\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\n  }\n\n  /**\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n   * but performing a delegate call.\n   *\n   * _Available since v3.4._\n   */\n  function functionDelegateCall(\n    address target,\n    bytes memory data,\n    string memory errorMessage\n  ) internal returns (bytes memory) {\n    require(isContract(target), 'Address: delegate call to non-contract');\n\n    (bool success, bytes memory returndata) = target.delegatecall(data);\n    return verifyCallResult(success, returndata, errorMessage);\n  }\n\n  /**\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n   * revert reason using the provided one.\n   *\n   * _Available since v4.3._\n   */\n  function verifyCallResult(\n    bool success,\n    bytes memory returndata,\n    string memory errorMessage\n  ) internal pure returns (bytes memory) {\n    if (success) {\n      return returndata;\n    } else {\n      // 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\n        assembly {\n          let returndata_size := mload(returndata)\n          revert(add(32, returndata), returndata_size)\n        }\n      } else {\n        revert(errorMessage);\n      }\n    }\n  }\n}\n"},"contracts/treasury/libs/ReentrancyGuard.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuard {\n  // Booleans are more expensive than uint256 or any type that takes up a full\n  // word because each write operation emits an extra SLOAD to first read the\n  // slot's contents, replace the bits taken up by the boolean, and then write\n  // back. This is the compiler's defense against contract upgrades and\n  // pointer aliasing, and it cannot be disabled.\n\n  // The values being non-zero value makes deployment a bit more expensive,\n  // but in exchange the refund on every call to nonReentrant will be lower in\n  // amount. Since refunds are capped to a percentage of the total\n  // transaction's gas, it is best to keep them low in cases like this one, to\n  // increase the likelihood of the full refund coming into effect.\n  uint256 private constant _NOT_ENTERED = 1;\n  uint256 private constant _ENTERED = 2;\n\n  uint256 private _status;\n\n  constructor() {\n    _status = _NOT_ENTERED;\n  }\n\n  /**\n   * @dev Prevents a contract from calling itself, directly or indirectly.\n   * Calling a `nonReentrant` function from another `nonReentrant`\n   * function is not supported. It is possible to prevent this from happening\n   * by making the `nonReentrant` function external, and making it call a\n   * `private` function that does the actual work.\n   */\n  modifier nonReentrant() {\n    // On the first call to nonReentrant, _notEntered will be true\n    require(_status != _ENTERED, 'ReentrancyGuard: reentrant call');\n\n    // Any calls to nonReentrant after this point will fail\n    _status = _ENTERED;\n\n    _;\n\n    // By storing the original value once again, a refund is triggered (see\n    // https://eips.ethereum.org/EIPS/eip-2200)\n    _status = _NOT_ENTERED;\n  }\n}\n"},"contracts/treasury/libs/SafeERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.0;\n\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\nimport {Address} from './Address.sol';\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n  using Address for address;\n\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\n    _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\n  }\n\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n    _callOptionalReturn(\n      token,\n      abi.encodeWithSelector(token.transferFrom.selector, from, to, value)\n    );\n  }\n\n  /**\n   * @dev Deprecated. This function has issues similar to the ones found in\n   * {IERC20-approve}, and its usage is discouraged.\n   *\n   * Whenever possible, use {safeIncreaseAllowance} and\n   * {safeDecreaseAllowance} instead.\n   */\n  function safeApprove(IERC20 token, address spender, uint256 value) internal {\n    // safeApprove should only be called when setting an initial allowance,\n    // or when resetting it to zero. To increase and decrease it, use\n    // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\n    require(\n      (value == 0) || (token.allowance(address(this), spender) == 0),\n      'SafeERC20: approve from non-zero to non-zero allowance'\n    );\n    _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\n  }\n\n  function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n    uint256 newAllowance = token.allowance(address(this), spender) + value;\n    _callOptionalReturn(\n      token,\n      abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\n    );\n  }\n\n  function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n    unchecked {\n      uint256 oldAllowance = token.allowance(address(this), spender);\n      require(oldAllowance >= value, 'SafeERC20: decreased allowance below zero');\n      uint256 newAllowance = oldAllowance - value;\n      _callOptionalReturn(\n        token,\n        abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\n      );\n    }\n  }\n\n  /**\n   * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n   * on the return value: the return value is optional (but if data is returned, it must not be false).\n   * @param token The token targeted by the call.\n   * @param data The call data (encoded using abi.encode or one of its variants).\n   */\n  function _callOptionalReturn(IERC20 token, bytes memory data) private {\n    // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n    // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\n    // the target address contains contract code and also asserts for success in the low-level call.\n\n    bytes memory returndata = address(token).functionCall(data, 'SafeERC20: low-level call failed');\n    if (returndata.length > 0) {\n      // Return data is optional\n      require(abi.decode(returndata, (bool)), 'SafeERC20: ERC20 operation did not succeed');\n    }\n  }\n}\n"},"contracts/treasury/libs/VersionedInitializable.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.10;\n\n/**\n * @title VersionedInitializable\n *\n * @dev Helper contract to support initializer functions. To use it, replace\n * the constructor with a function that has the `initializer` modifier.\n * WARNING: Unlike constructors, initializer functions must be manually\n * invoked. This applies both to deploying an Initializable contract, as well\n * as extending an Initializable contract via inheritance.\n * WARNING: When used with inheritance, manual care must be taken to not invoke\n * a parent initializer twice, or ensure that all initializers are idempotent,\n * because this is not dealt with automatically as with constructors.\n *\n * @author Aave, inspired by the OpenZeppelin Initializable contract\n */\nabstract contract VersionedInitializable {\n  /**\n   * @dev Indicates that the contract has been initialized.\n   */\n  uint256 internal lastInitializedRevision = 0;\n\n  /**\n   * @dev Modifier to use in the initializer function of a contract.\n   */\n  modifier initializer() {\n    uint256 revision = getRevision();\n    require(revision > lastInitializedRevision, 'Contract instance has already been initialized');\n\n    lastInitializedRevision = revision;\n\n    _;\n  }\n\n  /// @dev returns the revision number of the contract.\n  /// Needs to be defined in the inherited class as a constant.\n  function getRevision() internal pure virtual returns (uint256);\n\n  // Reserved storage space to allow for layout changes in the future.\n  uint256[50] private ______gap;\n}\n"}},"settings":{"optimizer":{"enabled":true,"runs":25000},"evmVersion":"london","outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata","devdoc","userdoc","storageLayout","evm.gasEstimates"],"":["ast"]}},"metadata":{"useLiteralContent":true}}},"output":{"errors":[{"component":"general","errorCode":"1878","formattedMessage":"Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: <SPDX-License>\" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.\n--> @aave/core-v3/contracts/dependencies/weth/WETH9.sol\n\n","message":"SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: <SPDX-License>\" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.","severity":"warning","sourceLocation":{"end":-1,"file":"@aave/core-v3/contracts/dependencies/weth/WETH9.sol","start":-1},"type":"Warning"},{"component":"general","errorCode":"2519","formattedMessage":"Warning: This declaration shadows an existing declaration.\n  --> @aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol:57:15:\n   |\n57 |   constructor(string memory name, string memory symbol) {\n   |               ^^^^^^^^^^^^^^^^^^\nNote: The shadowed declaration is here:\n  --> @aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol:66:3:\n   |\n66 |   function name() public view returns (string memory) {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This declaration shadows an existing declaration.","secondarySourceLocations":[{"end":2198,"file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol","message":"The shadowed declaration is here:","start":2123}],"severity":"warning","sourceLocation":{"end":1977,"file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol","start":1959},"type":"Warning"},{"component":"general","errorCode":"2519","formattedMessage":"Warning: This declaration shadows an existing declaration.\n  --> @aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol:57:35:\n   |\n57 |   constructor(string memory name, string memory symbol) {\n   |                                   ^^^^^^^^^^^^^^^^^^^^\nNote: The shadowed declaration is here:\n  --> @aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol:74:3:\n   |\n74 |   function symbol() public view returns (string memory) {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This declaration shadows an existing declaration.","secondarySourceLocations":[{"end":2380,"file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol","message":"The shadowed declaration is here:","start":2301}],"severity":"warning","sourceLocation":{"end":1999,"file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol","start":1979},"type":"Warning"},{"component":"general","errorCode":"8760","formattedMessage":"Warning: This declaration has the same name as another declaration.\n  --> @aave/core-v3/contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol:23:15:\n   |\n23 |   constructor(address admin) {\n   |               ^^^^^^^^^^^^^\nNote: The other declaration is here:\n  --> @aave/core-v3/contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol:39:3:\n   |\n39 |   function admin() external ifAdmin returns (address) {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This declaration has the same name as another declaration.","secondarySourceLocations":[{"end":1248,"file":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol","message":"The other declaration is here:","start":1172}],"severity":"warning","sourceLocation":{"end":939,"file":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol","start":926},"type":"Warning"},{"component":"general","errorCode":"2519","formattedMessage":"Warning: This declaration shadows an existing declaration.\n  --> @aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol:72:27:\n   |\n72 |   constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\n   |                           ^^^^^^^^^^^^^^^^^^\nNote: The shadowed declaration is here:\n  --> @aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol:81:3:\n   |\n81 |   function name() public view override returns (string memory) {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This declaration shadows an existing declaration.","secondarySourceLocations":[{"end":3014,"file":"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol","message":"The shadowed declaration is here:","start":2930}],"severity":"warning","sourceLocation":{"end":2713,"file":"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol","start":2695},"type":"Warning"},{"component":"general","errorCode":"8760","formattedMessage":"Warning: This declaration has the same name as another declaration.\n  --> @aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol:72:47:\n   |\n72 |   constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\n   |                                               ^^^^^^^^^^^^^^^^^^^^\nNote: The other declaration is here:\n  --> @aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol:86:3:\n   |\n86 |   function symbol() external view override returns (string memory) {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This declaration has the same name as another declaration.","secondarySourceLocations":[{"end":3141,"file":"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol","message":"The other declaration is here:","start":3051}],"severity":"warning","sourceLocation":{"end":2735,"file":"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol","start":2715},"type":"Warning"},{"component":"general","errorCode":"8760","formattedMessage":"Warning: This declaration has the same name as another declaration.\n  --> @aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol:72:69:\n   |\n72 |   constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\n   |                                                                     ^^^^^^^^^^^^^^\nNote: The other declaration is here:\n  --> @aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol:91:3:\n   |\n91 |   function decimals() external view override returns (uint8) {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This declaration has the same name as another declaration.","secondarySourceLocations":[{"end":3264,"file":"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol","message":"The other declaration is here:","start":3178}],"severity":"warning","sourceLocation":{"end":2751,"file":"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol","start":2737},"type":"Warning"},{"component":"general","errorCode":"8760","formattedMessage":"Warning: This declaration has the same name as another declaration.\n  --> contracts/mocks/ATokenMock.sol:29:39:\n   |\n29 |   constructor(IRewardsController aic, uint256 decimals) {\n   |                                       ^^^^^^^^^^^^^^^^\nNote: The other declaration is here:\n  --> contracts/mocks/ATokenMock.sol:69:3:\n   |\n69 |   function decimals() external view returns (uint256) {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This declaration has the same name as another declaration.","secondarySourceLocations":[{"end":1832,"file":"contracts/mocks/ATokenMock.sol","message":"The other declaration is here:","start":1753}],"severity":"warning","sourceLocation":{"end":745,"file":"contracts/mocks/ATokenMock.sol","start":729},"type":"Warning"},{"component":"general","errorCode":"8760","formattedMessage":"Warning: This declaration has the same name as another declaration.\n  --> contracts/mocks/ATokenMock.sol:34:44:\n   |\n34 |   function handleActionOnAic(address user, uint256 totalSupply, uint256 userBalance) external {\n   |                                            ^^^^^^^^^^^^^^^^^^^\nNote: The other declaration is here:\n  --> contracts/mocks/ATokenMock.sol:60:3:\n   |\n60 |   function totalSupply() external view returns (uint256) {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This declaration has the same name as another declaration.","secondarySourceLocations":[{"end":1661,"file":"contracts/mocks/ATokenMock.sol","message":"The other declaration is here:","start":1576}],"severity":"warning","sourceLocation":{"end":858,"file":"contracts/mocks/ATokenMock.sol","start":839},"type":"Warning"},{"component":"general","errorCode":"8760","formattedMessage":"Warning: This declaration has the same name as another declaration.\n  --> contracts/mocks/ATokenMock.sol:40:5:\n   |\n40 |     uint256 totalSupply,\n   |     ^^^^^^^^^^^^^^^^^^^\nNote: The other declaration is here:\n  --> contracts/mocks/ATokenMock.sol:60:3:\n   |\n60 |   function totalSupply() external view returns (uint256) {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This declaration has the same name as another declaration.","secondarySourceLocations":[{"end":1661,"file":"contracts/mocks/ATokenMock.sol","message":"The other declaration is here:","start":1576}],"severity":"warning","sourceLocation":{"end":1029,"file":"contracts/mocks/ATokenMock.sol","start":1010},"type":"Warning"},{"component":"general","errorCode":"8760","formattedMessage":"Warning: This declaration has the same name as another declaration.\n  --> contracts/mocks/ATokenMock.sol:47:57:\n   |\n47 |   function setUserBalanceAndSupply(uint256 userBalance, uint256 totalSupply) public {\n   |                                                         ^^^^^^^^^^^^^^^^^^^\nNote: The other declaration is here:\n  --> contracts/mocks/ATokenMock.sol:60:3:\n   |\n60 |   function totalSupply() external view returns (uint256) {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This declaration has the same name as another declaration.","secondarySourceLocations":[{"end":1661,"file":"contracts/mocks/ATokenMock.sol","message":"The other declaration is here:","start":1576}],"severity":"warning","sourceLocation":{"end":1260,"file":"contracts/mocks/ATokenMock.sol","start":1241},"type":"Warning"},{"component":"general","errorCode":"3628","formattedMessage":"Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.\n  --> @aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol:14:1:\n   |\n14 | contract BaseAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\n   | ^ (Relevant source part starts here and spans across multiple lines).\nNote: The payable fallback function is defined here.\n  --> @aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol:17:3:\n   |\n17 |   fallback() external payable {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.","secondarySourceLocations":[{"end":588,"file":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol","message":"The payable fallback function is defined here.","start":538}],"severity":"warning","sourceLocation":{"end":3846,"file":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol","start":462},"type":"Warning"},{"component":"general","errorCode":"3628","formattedMessage":"Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.\n  --> @aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol:11:1:\n   |\n11 | contract InitializableUpgradeabilityProxy is BaseUpgradeabilityProxy {\n   | ^ (Relevant source part starts here and spans across multiple lines).\nNote: The payable fallback function is defined here.\n  --> @aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol:17:3:\n   |\n17 |   fallback() external payable {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.","secondarySourceLocations":[{"end":588,"file":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol","message":"The payable fallback function is defined here.","start":538}],"severity":"warning","sourceLocation":{"end":1226,"file":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol","start":264},"type":"Warning"},{"component":"general","errorCode":"3628","formattedMessage":"Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.\n  --> @aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol:12:1:\n   |\n12 | contract InitializableAdminUpgradeabilityProxy is\n   | ^ (Relevant source part starts here and spans across multiple lines).\nNote: The payable fallback function is defined here.\n  --> @aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol:17:3:\n   |\n17 |   fallback() external payable {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.","secondarySourceLocations":[{"end":588,"file":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol","message":"The payable fallback function is defined here.","start":538}],"severity":"warning","sourceLocation":{"end":1548,"file":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol","start":345},"type":"Warning"},{"component":"general","errorCode":"3628","formattedMessage":"Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.\n  --> @aave/core-v3/contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol:16:1:\n   |\n16 | contract BaseImmutableAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\n   | ^ (Relevant source part starts here and spans across multiple lines).\nNote: The payable fallback function is defined here.\n  --> @aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol:17:3:\n   |\n17 |   fallback() external payable {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.","secondarySourceLocations":[{"end":588,"file":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol","message":"The payable fallback function is defined here.","start":538}],"severity":"warning","sourceLocation":{"end":2769,"file":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol","start":720},"type":"Warning"},{"component":"general","errorCode":"3628","formattedMessage":"Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.\n  --> @aave/core-v3/contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol:13:1:\n   |\n13 | contract InitializableImmutableAdminUpgradeabilityProxy is\n   | ^ (Relevant source part starts here and spans across multiple lines).\nNote: The payable fallback function is defined here.\n  --> @aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol:17:3:\n   |\n17 |   fallback() external payable {\n   |   ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.","secondarySourceLocations":[{"end":588,"file":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol","message":"The payable fallback function is defined here.","start":538}],"severity":"warning","sourceLocation":{"end":1069,"file":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol","start":528},"type":"Warning"},{"component":"general","errorCode":"5740","formattedMessage":"Warning: Unreachable code.\n  --> contracts/dependencies/openzeppelin/ReentrancyGuard.sol:60:5:\n   |\n60 |     _status = _NOT_ENTERED;\n   |     ^^^^^^^^^^^^^^^^^^^^^^\n\n","message":"Unreachable code.","severity":"warning","sourceLocation":{"end":2503,"file":"contracts/dependencies/openzeppelin/ReentrancyGuard.sol","start":2481},"type":"Warning"}],"sources":{"@aave/core-v3/contracts/dependencies/chainlink/AggregatorInterface.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/dependencies/chainlink/AggregatorInterface.sol","exportedSymbols":{"AggregatorInterface":[47]},"id":48,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"60:23:0"},{"abstract":false,"baseContracts":[],"canonicalName":"AggregatorInterface","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":47,"linearizedBaseContracts":[47],"name":"AggregatorInterface","nameLocation":"95:19:0","nodeType":"ContractDefinition","nodes":[{"functionSelector":"50d25bcd","id":6,"implemented":false,"kind":"function","modifiers":[],"name":"latestAnswer","nameLocation":"128:12:0","nodeType":"FunctionDefinition","parameters":{"id":2,"nodeType":"ParameterList","parameters":[],"src":"140:2:0"},"returnParameters":{"id":5,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6,"src":"166:6:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3,"name":"int256","nodeType":"ElementaryTypeName","src":"166:6:0","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"165:8:0"},"scope":47,"src":"119:55:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"8205bf6a","id":11,"implemented":false,"kind":"function","modifiers":[],"name":"latestTimestamp","nameLocation":"187:15:0","nodeType":"FunctionDefinition","parameters":{"id":7,"nodeType":"ParameterList","parameters":[],"src":"202:2:0"},"returnParameters":{"id":10,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11,"src":"228:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8,"name":"uint256","nodeType":"ElementaryTypeName","src":"228:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"227:9:0"},"scope":47,"src":"178:59:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"668a0f02","id":16,"implemented":false,"kind":"function","modifiers":[],"name":"latestRound","nameLocation":"250:11:0","nodeType":"FunctionDefinition","parameters":{"id":12,"nodeType":"ParameterList","parameters":[],"src":"261:2:0"},"returnParameters":{"id":15,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16,"src":"287:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13,"name":"uint256","nodeType":"ElementaryTypeName","src":"287:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"286:9:0"},"scope":47,"src":"241:55:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"b5ab58dc","id":23,"implemented":false,"kind":"function","modifiers":[],"name":"getAnswer","nameLocation":"309:9:0","nodeType":"FunctionDefinition","parameters":{"id":19,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18,"mutability":"mutable","name":"roundId","nameLocation":"327:7:0","nodeType":"VariableDeclaration","scope":23,"src":"319:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17,"name":"uint256","nodeType":"ElementaryTypeName","src":"319:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"318:17:0"},"returnParameters":{"id":22,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23,"src":"359:6:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":20,"name":"int256","nodeType":"ElementaryTypeName","src":"359:6:0","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"358:8:0"},"scope":47,"src":"300:67:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"b633620c","id":30,"implemented":false,"kind":"function","modifiers":[],"name":"getTimestamp","nameLocation":"380:12:0","nodeType":"FunctionDefinition","parameters":{"id":26,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25,"mutability":"mutable","name":"roundId","nameLocation":"401:7:0","nodeType":"VariableDeclaration","scope":30,"src":"393:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24,"name":"uint256","nodeType":"ElementaryTypeName","src":"393:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"392:17:0"},"returnParameters":{"id":29,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30,"src":"433:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27,"name":"uint256","nodeType":"ElementaryTypeName","src":"433:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"432:9:0"},"scope":47,"src":"371:71:0","stateMutability":"view","virtual":false,"visibility":"external"},{"anonymous":false,"id":38,"name":"AnswerUpdated","nameLocation":"452:13:0","nodeType":"EventDefinition","parameters":{"id":37,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32,"indexed":true,"mutability":"mutable","name":"current","nameLocation":"481:7:0","nodeType":"VariableDeclaration","scope":38,"src":"466:22:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":31,"name":"int256","nodeType":"ElementaryTypeName","src":"466:6:0","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":34,"indexed":true,"mutability":"mutable","name":"roundId","nameLocation":"506:7:0","nodeType":"VariableDeclaration","scope":38,"src":"490:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33,"name":"uint256","nodeType":"ElementaryTypeName","src":"490:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":36,"indexed":false,"mutability":"mutable","name":"updatedAt","nameLocation":"523:9:0","nodeType":"VariableDeclaration","scope":38,"src":"515:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35,"name":"uint256","nodeType":"ElementaryTypeName","src":"515:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"465:68:0"},"src":"446:88:0"},{"anonymous":false,"id":46,"name":"NewRound","nameLocation":"544:8:0","nodeType":"EventDefinition","parameters":{"id":45,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40,"indexed":true,"mutability":"mutable","name":"roundId","nameLocation":"569:7:0","nodeType":"VariableDeclaration","scope":46,"src":"553:23:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39,"name":"uint256","nodeType":"ElementaryTypeName","src":"553:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42,"indexed":true,"mutability":"mutable","name":"startedBy","nameLocation":"594:9:0","nodeType":"VariableDeclaration","scope":46,"src":"578:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41,"name":"address","nodeType":"ElementaryTypeName","src":"578:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":44,"indexed":false,"mutability":"mutable","name":"startedAt","nameLocation":"613:9:0","nodeType":"VariableDeclaration","scope":46,"src":"605:17:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43,"name":"uint256","nodeType":"ElementaryTypeName","src":"605:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"552:71:0"},"src":"538:86:0"}],"scope":48,"src":"85:541:0","usedErrors":[]}],"src":"60:567:0"},"id":0},"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","exportedSymbols":{"GPv2SafeERC20":[118],"IERC20":[1442]},"id":119,"license":"LGPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":49,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"46:23:1"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../openzeppelin/contracts/IERC20.sol","id":51,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":119,"sourceUnit":1443,"src":"71:63:1","symbolAliases":[{"foreign":{"id":50,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"79:6:1","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"GPv2SafeERC20","contractDependencies":[],"contractKind":"library","documentation":{"id":52,"nodeType":"StructuredDocumentation","src":"136:157:1","text":"@title Gnosis Protocol v2 Safe ERC20 Transfer Library\n @author Gnosis Developers\n @dev Gas-efficient version of Openzeppelin's SafeERC20 contract."},"fullyImplemented":true,"id":118,"linearizedBaseContracts":[118],"name":"GPv2SafeERC20","nameLocation":"301:13:1","nodeType":"ContractDefinition","nodes":[{"body":{"id":77,"nodeType":"Block","src":"513:585:1","statements":[{"assignments":[64],"declarations":[{"constant":false,"id":64,"mutability":"mutable","name":"selector_","nameLocation":"526:9:1","nodeType":"VariableDeclaration","scope":77,"src":"519:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":63,"name":"bytes4","nodeType":"ElementaryTypeName","src":"519:6:1","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":68,"initialValue":{"expression":{"expression":{"id":65,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56,"src":"538:5:1","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":66,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":1391,"src":"538:14:1","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":67,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"538:23:1","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"519:42:1"},{"AST":{"nodeType":"YulBlock","src":"629:396:1","statements":[{"nodeType":"YulVariableDeclaration","src":"637:36:1","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"668:4:1","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"662:5:1"},"nodeType":"YulFunctionCall","src":"662:11:1"},"variables":[{"name":"freeMemoryPointer","nodeType":"YulTypedName","src":"641:17:1","type":""}]},{"expression":{"arguments":[{"name":"freeMemoryPointer","nodeType":"YulIdentifier","src":"687:17:1"},{"name":"selector_","nodeType":"YulIdentifier","src":"706:9:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"680:6:1"},"nodeType":"YulFunctionCall","src":"680:36:1"},"nodeType":"YulExpressionStatement","src":"680:36:1"},{"expression":{"arguments":[{"arguments":[{"name":"freeMemoryPointer","nodeType":"YulIdentifier","src":"734:17:1"},{"kind":"number","nodeType":"YulLiteral","src":"753:1:1","type":"","value":"4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"730:3:1"},"nodeType":"YulFunctionCall","src":"730:25:1"},{"arguments":[{"name":"to","nodeType":"YulIdentifier","src":"761:2:1"},{"kind":"number","nodeType":"YulLiteral","src":"765:42:1","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"757:3:1"},"nodeType":"YulFunctionCall","src":"757:51:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"723:6:1"},"nodeType":"YulFunctionCall","src":"723:86:1"},"nodeType":"YulExpressionStatement","src":"723:86:1"},{"expression":{"arguments":[{"arguments":[{"name":"freeMemoryPointer","nodeType":"YulIdentifier","src":"827:17:1"},{"kind":"number","nodeType":"YulLiteral","src":"846:2:1","type":"","value":"36"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"823:3:1"},"nodeType":"YulFunctionCall","src":"823:26:1"},{"name":"value","nodeType":"YulIdentifier","src":"851:5:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"816:6:1"},"nodeType":"YulFunctionCall","src":"816:41:1"},"nodeType":"YulExpressionStatement","src":"816:41:1"},{"body":{"nodeType":"YulBlock","src":"927:92:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"952:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"955:1:1","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"958:14:1"},"nodeType":"YulFunctionCall","src":"958:16:1"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"937:14:1"},"nodeType":"YulFunctionCall","src":"937:38:1"},"nodeType":"YulExpressionStatement","src":"937:38:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"991:1:1","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"994:14:1"},"nodeType":"YulFunctionCall","src":"994:16:1"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"984:6:1"},"nodeType":"YulFunctionCall","src":"984:27:1"},"nodeType":"YulExpressionStatement","src":"984:27:1"}]},"condition":{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"880:3:1"},"nodeType":"YulFunctionCall","src":"880:5:1"},{"name":"token","nodeType":"YulIdentifier","src":"887:5:1"},{"kind":"number","nodeType":"YulLiteral","src":"894:1:1","type":"","value":"0"},{"name":"freeMemoryPointer","nodeType":"YulIdentifier","src":"897:17:1"},{"kind":"number","nodeType":"YulLiteral","src":"916:2:1","type":"","value":"68"},{"kind":"number","nodeType":"YulLiteral","src":"920:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"923:1:1","type":"","value":"0"}],"functionName":{"name":"call","nodeType":"YulIdentifier","src":"875:4:1"},"nodeType":"YulFunctionCall","src":"875:50:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"868:6:1"},"nodeType":"YulFunctionCall","src":"868:58:1"},"nodeType":"YulIf","src":"865:154:1"}]},"evmVersion":"london","externalReferences":[{"declaration":64,"isOffset":false,"isSlot":false,"src":"706:9:1","valueSize":1},{"declaration":58,"isOffset":false,"isSlot":false,"src":"761:2:1","valueSize":1},{"declaration":56,"isOffset":false,"isSlot":false,"src":"887:5:1","valueSize":1},{"declaration":60,"isOffset":false,"isSlot":false,"src":"851:5:1","valueSize":1}],"id":69,"nodeType":"InlineAssembly","src":"620:405:1"},{"expression":{"arguments":[{"arguments":[{"id":72,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56,"src":"1061:5:1","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}],"id":71,"name":"getLastTransferResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117,"src":"1039:21:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$1442_$returns$_t_bool_$","typeString":"function (contract IERC20) view returns (bool)"}},"id":73,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1039:28:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"475076323a206661696c6564207472616e73666572","id":74,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1069:23:1","typeDescriptions":{"typeIdentifier":"t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96","typeString":"literal_string \"GPv2: failed transfer\""},"value":"GPv2: failed transfer"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96","typeString":"literal_string \"GPv2: failed transfer\""}],"id":70,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1031:7:1","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":75,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1031:62:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":76,"nodeType":"ExpressionStatement","src":"1031:62:1"}]},"documentation":{"id":53,"nodeType":"StructuredDocumentation","src":"319:119:1","text":"@dev Wrapper around a call to the ERC20 function `transfer` that reverts\n also when the token returns `false`."},"id":78,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransfer","nameLocation":"450:12:1","nodeType":"FunctionDefinition","parameters":{"id":61,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56,"mutability":"mutable","name":"token","nameLocation":"470:5:1","nodeType":"VariableDeclaration","scope":78,"src":"463:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":55,"nodeType":"UserDefinedTypeName","pathNode":{"id":54,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"463:6:1"},"referencedDeclaration":1442,"src":"463:6:1","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":58,"mutability":"mutable","name":"to","nameLocation":"485:2:1","nodeType":"VariableDeclaration","scope":78,"src":"477:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":57,"name":"address","nodeType":"ElementaryTypeName","src":"477:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":60,"mutability":"mutable","name":"value","nameLocation":"497:5:1","nodeType":"VariableDeclaration","scope":78,"src":"489:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59,"name":"uint256","nodeType":"ElementaryTypeName","src":"489:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"462:41:1"},"returnParameters":{"id":62,"nodeType":"ParameterList","parameters":[],"src":"513:0:1"},"scope":118,"src":"441:657:1","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":105,"nodeType":"Block","src":"1318:690:1","statements":[{"assignments":[92],"declarations":[{"constant":false,"id":92,"mutability":"mutable","name":"selector_","nameLocation":"1331:9:1","nodeType":"VariableDeclaration","scope":105,"src":"1324:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":91,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1324:6:1","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":96,"initialValue":{"expression":{"expression":{"id":93,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":82,"src":"1343:5:1","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":94,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":1423,"src":"1343:18:1","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":95,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"1343:27:1","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"1324:46:1"},{"AST":{"nodeType":"YulBlock","src":"1438:493:1","statements":[{"nodeType":"YulVariableDeclaration","src":"1446:36:1","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1477:4:1","type":"","value":"0x40"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1471:5:1"},"nodeType":"YulFunctionCall","src":"1471:11:1"},"variables":[{"name":"freeMemoryPointer","nodeType":"YulTypedName","src":"1450:17:1","type":""}]},{"expression":{"arguments":[{"name":"freeMemoryPointer","nodeType":"YulIdentifier","src":"1496:17:1"},{"name":"selector_","nodeType":"YulIdentifier","src":"1515:9:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1489:6:1"},"nodeType":"YulFunctionCall","src":"1489:36:1"},"nodeType":"YulExpressionStatement","src":"1489:36:1"},{"expression":{"arguments":[{"arguments":[{"name":"freeMemoryPointer","nodeType":"YulIdentifier","src":"1543:17:1"},{"kind":"number","nodeType":"YulLiteral","src":"1562:1:1","type":"","value":"4"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1539:3:1"},"nodeType":"YulFunctionCall","src":"1539:25:1"},{"arguments":[{"name":"from","nodeType":"YulIdentifier","src":"1570:4:1"},{"kind":"number","nodeType":"YulLiteral","src":"1576:42:1","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1566:3:1"},"nodeType":"YulFunctionCall","src":"1566:53:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1532:6:1"},"nodeType":"YulFunctionCall","src":"1532:88:1"},"nodeType":"YulExpressionStatement","src":"1532:88:1"},{"expression":{"arguments":[{"arguments":[{"name":"freeMemoryPointer","nodeType":"YulIdentifier","src":"1638:17:1"},{"kind":"number","nodeType":"YulLiteral","src":"1657:2:1","type":"","value":"36"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1634:3:1"},"nodeType":"YulFunctionCall","src":"1634:26:1"},{"arguments":[{"name":"to","nodeType":"YulIdentifier","src":"1666:2:1"},{"kind":"number","nodeType":"YulLiteral","src":"1670:42:1","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1662:3:1"},"nodeType":"YulFunctionCall","src":"1662:51:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1627:6:1"},"nodeType":"YulFunctionCall","src":"1627:87:1"},"nodeType":"YulExpressionStatement","src":"1627:87:1"},{"expression":{"arguments":[{"arguments":[{"name":"freeMemoryPointer","nodeType":"YulIdentifier","src":"1732:17:1"},{"kind":"number","nodeType":"YulLiteral","src":"1751:2:1","type":"","value":"68"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1728:3:1"},"nodeType":"YulFunctionCall","src":"1728:26:1"},{"name":"value","nodeType":"YulIdentifier","src":"1756:5:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1721:6:1"},"nodeType":"YulFunctionCall","src":"1721:41:1"},"nodeType":"YulExpressionStatement","src":"1721:41:1"},{"body":{"nodeType":"YulBlock","src":"1833:92:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1858:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1861:1:1","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"1864:14:1"},"nodeType":"YulFunctionCall","src":"1864:16:1"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"1843:14:1"},"nodeType":"YulFunctionCall","src":"1843:38:1"},"nodeType":"YulExpressionStatement","src":"1843:38:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1897:1:1","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"1900:14:1"},"nodeType":"YulFunctionCall","src":"1900:16:1"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1890:6:1"},"nodeType":"YulFunctionCall","src":"1890:27:1"},"nodeType":"YulExpressionStatement","src":"1890:27:1"}]},"condition":{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"1785:3:1"},"nodeType":"YulFunctionCall","src":"1785:5:1"},{"name":"token","nodeType":"YulIdentifier","src":"1792:5:1"},{"kind":"number","nodeType":"YulLiteral","src":"1799:1:1","type":"","value":"0"},{"name":"freeMemoryPointer","nodeType":"YulIdentifier","src":"1802:17:1"},{"kind":"number","nodeType":"YulLiteral","src":"1821:3:1","type":"","value":"100"},{"kind":"number","nodeType":"YulLiteral","src":"1826:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1829:1:1","type":"","value":"0"}],"functionName":{"name":"call","nodeType":"YulIdentifier","src":"1780:4:1"},"nodeType":"YulFunctionCall","src":"1780:51:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1773:6:1"},"nodeType":"YulFunctionCall","src":"1773:59:1"},"nodeType":"YulIf","src":"1770:155:1"}]},"evmVersion":"london","externalReferences":[{"declaration":84,"isOffset":false,"isSlot":false,"src":"1570:4:1","valueSize":1},{"declaration":92,"isOffset":false,"isSlot":false,"src":"1515:9:1","valueSize":1},{"declaration":86,"isOffset":false,"isSlot":false,"src":"1666:2:1","valueSize":1},{"declaration":82,"isOffset":false,"isSlot":false,"src":"1792:5:1","valueSize":1},{"declaration":88,"isOffset":false,"isSlot":false,"src":"1756:5:1","valueSize":1}],"id":97,"nodeType":"InlineAssembly","src":"1429:502:1"},{"expression":{"arguments":[{"arguments":[{"id":100,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":82,"src":"1967:5:1","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}],"id":99,"name":"getLastTransferResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":117,"src":"1945:21:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$1442_$returns$_t_bool_$","typeString":"function (contract IERC20) view returns (bool)"}},"id":101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1945:28:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"475076323a206661696c6564207472616e7366657246726f6d","id":102,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1975:27:1","typeDescriptions":{"typeIdentifier":"t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e","typeString":"literal_string \"GPv2: failed transferFrom\""},"value":"GPv2: failed transferFrom"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e","typeString":"literal_string \"GPv2: failed transferFrom\""}],"id":98,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1937:7:1","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1937:66:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":104,"nodeType":"ExpressionStatement","src":"1937:66:1"}]},"documentation":{"id":79,"nodeType":"StructuredDocumentation","src":"1102:123:1","text":"@dev Wrapper around a call to the ERC20 function `transferFrom` that\n reverts also when the token returns `false`."},"id":106,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"1237:16:1","nodeType":"FunctionDefinition","parameters":{"id":89,"nodeType":"ParameterList","parameters":[{"constant":false,"id":82,"mutability":"mutable","name":"token","nameLocation":"1261:5:1","nodeType":"VariableDeclaration","scope":106,"src":"1254:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":81,"nodeType":"UserDefinedTypeName","pathNode":{"id":80,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1254:6:1"},"referencedDeclaration":1442,"src":"1254:6:1","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":84,"mutability":"mutable","name":"from","nameLocation":"1276:4:1","nodeType":"VariableDeclaration","scope":106,"src":"1268:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":83,"name":"address","nodeType":"ElementaryTypeName","src":"1268:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":86,"mutability":"mutable","name":"to","nameLocation":"1290:2:1","nodeType":"VariableDeclaration","scope":106,"src":"1282:10:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":85,"name":"address","nodeType":"ElementaryTypeName","src":"1282:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":88,"mutability":"mutable","name":"value","nameLocation":"1302:5:1","nodeType":"VariableDeclaration","scope":106,"src":"1294:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":87,"name":"uint256","nodeType":"ElementaryTypeName","src":"1294:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1253:55:1"},"returnParameters":{"id":90,"nodeType":"ParameterList","parameters":[],"src":"1318:0:1"},"scope":118,"src":"1228:780:1","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":116,"nodeType":"Block","src":"2279:2443:1","statements":[{"AST":{"nodeType":"YulBlock","src":"2741:1977:1","statements":[{"body":{"nodeType":"YulBlock","src":"3367:163:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3384:4:1","type":"","value":"0x00"},{"hexValue":"08c379a0","kind":"string","nodeType":"YulLiteral","src":"3390:18:1","type":""}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3377:6:1"},"nodeType":"YulFunctionCall","src":"3377:32:1"},"nodeType":"YulExpressionStatement","src":"3377:32:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3425:4:1","type":"","value":"0x04"},{"kind":"number","nodeType":"YulLiteral","src":"3431:4:1","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3418:6:1"},"nodeType":"YulFunctionCall","src":"3418:18:1"},"nodeType":"YulExpressionStatement","src":"3418:18:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3452:4:1","type":"","value":"0x24"},{"name":"length","nodeType":"YulIdentifier","src":"3458:6:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3445:6:1"},"nodeType":"YulFunctionCall","src":"3445:20:1"},"nodeType":"YulExpressionStatement","src":"3445:20:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3481:4:1","type":"","value":"0x44"},{"name":"message","nodeType":"YulIdentifier","src":"3487:7:1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3474:6:1"},"nodeType":"YulFunctionCall","src":"3474:21:1"},"nodeType":"YulExpressionStatement","src":"3474:21:1"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3511:4:1","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"3517:4:1","type":"","value":"0x64"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3504:6:1"},"nodeType":"YulFunctionCall","src":"3504:18:1"},"nodeType":"YulExpressionStatement","src":"3504:18:1"}]},"name":"revertWithMessage","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nodeType":"YulTypedName","src":"3350:6:1","type":""},{"name":"message","nodeType":"YulTypedName","src":"3358:7:1","type":""}],"src":"3323:207:1"},{"cases":[{"body":{"nodeType":"YulBlock","src":"3628:434:1","statements":[{"body":{"nodeType":"YulBlock","src":"3965:67:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3995:2:1","type":"","value":"20"},{"hexValue":"475076323a206e6f74206120636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"3999:22:1","type":"","value":"GPv2: not a contract"}],"functionName":{"name":"revertWithMessage","nodeType":"YulIdentifier","src":"3977:17:1"},"nodeType":"YulFunctionCall","src":"3977:45:1"},"nodeType":"YulExpressionStatement","src":"3977:45:1"}]},"condition":{"arguments":[{"arguments":[{"name":"token","nodeType":"YulIdentifier","src":"3957:5:1"}],"functionName":{"name":"extcodesize","nodeType":"YulIdentifier","src":"3945:11:1"},"nodeType":"YulFunctionCall","src":"3945:18:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3938:6:1"},"nodeType":"YulFunctionCall","src":"3938:26:1"},"nodeType":"YulIf","src":"3935:97:1"},{"nodeType":"YulAssignment","src":"4042:12:1","value":{"kind":"number","nodeType":"YulLiteral","src":"4053:1:1","type":"","value":"1"},"variableNames":[{"name":"success","nodeType":"YulIdentifier","src":"4042:7:1"}]}]},"nodeType":"YulCase","src":"3621:441:1","value":{"kind":"number","nodeType":"YulLiteral","src":"3626:1:1","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"4143:480:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4168:1:1","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4171:1:1","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"4174:14:1"},"nodeType":"YulFunctionCall","src":"4174:16:1"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"4153:14:1"},"nodeType":"YulFunctionCall","src":"4153:38:1"},"nodeType":"YulExpressionStatement","src":"4153:38:1"},{"nodeType":"YulAssignment","src":"4580:35:1","value":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4611:1:1","type":"","value":"0"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4605:5:1"},"nodeType":"YulFunctionCall","src":"4605:8:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4598:6:1"},"nodeType":"YulFunctionCall","src":"4598:16:1"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4591:6:1"},"nodeType":"YulFunctionCall","src":"4591:24:1"},"variableNames":[{"name":"success","nodeType":"YulIdentifier","src":"4580:7:1"}]}]},"nodeType":"YulCase","src":"4135:488:1","value":{"kind":"number","nodeType":"YulLiteral","src":"4140:2:1","type":"","value":"32"}},{"body":{"nodeType":"YulBlock","src":"4638:74:1","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4666:2:1","type":"","value":"31"},{"hexValue":"475076323a206d616c666f726d6564207472616e7366657220726573756c74","kind":"string","nodeType":"YulLiteral","src":"4670:33:1","type":"","value":"GPv2: malformed transfer result"}],"functionName":{"name":"revertWithMessage","nodeType":"YulIdentifier","src":"4648:17:1"},"nodeType":"YulFunctionCall","src":"4648:56:1"},"nodeType":"YulExpressionStatement","src":"4648:56:1"}]},"nodeType":"YulCase","src":"4630:82:1","value":"default"}],"expression":{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"3545:14:1"},"nodeType":"YulFunctionCall","src":"3545:16:1"},"nodeType":"YulSwitch","src":"3538:1174:1"}]},"evmVersion":"london","externalReferences":[{"declaration":113,"isOffset":false,"isSlot":false,"src":"4042:7:1","valueSize":1},{"declaration":113,"isOffset":false,"isSlot":false,"src":"4580:7:1","valueSize":1},{"declaration":110,"isOffset":false,"isSlot":false,"src":"3957:5:1","valueSize":1}],"id":115,"nodeType":"InlineAssembly","src":"2732:1986:1"}]},"documentation":{"id":107,"nodeType":"StructuredDocumentation","src":"2012:183:1","text":"@dev Verifies that the last return was a successful `transfer*` call.\n This is done by checking that the return data is either empty, or\n is a valid ABI encoded boolean."},"id":117,"implemented":true,"kind":"function","modifiers":[],"name":"getLastTransferResult","nameLocation":"2207:21:1","nodeType":"FunctionDefinition","parameters":{"id":111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110,"mutability":"mutable","name":"token","nameLocation":"2236:5:1","nodeType":"VariableDeclaration","scope":117,"src":"2229:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":109,"nodeType":"UserDefinedTypeName","pathNode":{"id":108,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"2229:6:1"},"referencedDeclaration":1442,"src":"2229:6:1","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2228:14:1"},"returnParameters":{"id":114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":113,"mutability":"mutable","name":"success","nameLocation":"2270:7:1","nodeType":"VariableDeclaration","scope":117,"src":"2265:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":112,"name":"bool","nodeType":"ElementaryTypeName","src":"2265:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2264:14:1"},"scope":118,"src":"2198:2524:1","stateMutability":"view","virtual":false,"visibility":"private"}],"scope":119,"src":"293:4431:1","usedErrors":[]}],"src":"46:4679:1"},"id":1},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/AccessControl.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/AccessControl.sol","exportedSymbols":{"AccessControl":[425],"Context":[748],"ERC165":[772],"IAccessControl":[1352],"IERC165":[1364],"Strings":[2513]},"id":426,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":120,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"33:23:2"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol","file":"./IAccessControl.sol","id":121,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":426,"sourceUnit":1353,"src":"58:30:2","symbolAliases":[],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol","file":"./Context.sol","id":122,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":426,"sourceUnit":749,"src":"89:23:2","symbolAliases":[],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Strings.sol","file":"./Strings.sol","id":123,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":426,"sourceUnit":2514,"src":"113:23:2","symbolAliases":[],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC165.sol","file":"./ERC165.sol","id":124,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":426,"sourceUnit":773,"src":"137:22:2","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":126,"name":"Context","nodeType":"IdentifierPath","referencedDeclaration":748,"src":"1731:7:2"},"id":127,"nodeType":"InheritanceSpecifier","src":"1731:7:2"},{"baseName":{"id":128,"name":"IAccessControl","nodeType":"IdentifierPath","referencedDeclaration":1352,"src":"1740:14:2"},"id":129,"nodeType":"InheritanceSpecifier","src":"1740:14:2"},{"baseName":{"id":130,"name":"ERC165","nodeType":"IdentifierPath","referencedDeclaration":772,"src":"1756:6:2"},"id":131,"nodeType":"InheritanceSpecifier","src":"1756:6:2"}],"canonicalName":"AccessControl","contractDependencies":[],"contractKind":"contract","documentation":{"id":125,"nodeType":"StructuredDocumentation","src":"161:1534:2","text":" @dev Contract module that allows children to implement role-based access\n control mechanisms. This is a lightweight version that doesn't allow enumerating role\n members except through off-chain means by accessing the contract event logs. Some\n applications may benefit from on-chain enumerability, for those cases see\n {AccessControlEnumerable}.\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":425,"linearizedBaseContracts":[425,772,1364,1352,748],"name":"AccessControl","nameLocation":"1714:13:2","nodeType":"ContractDefinition","nodes":[{"canonicalName":"AccessControl.RoleData","id":138,"members":[{"constant":false,"id":135,"mutability":"mutable","name":"members","nameLocation":"1814:7:2","nodeType":"VariableDeclaration","scope":138,"src":"1789:32:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":134,"keyType":{"id":132,"name":"address","nodeType":"ElementaryTypeName","src":"1797:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1789:24:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueType":{"id":133,"name":"bool","nodeType":"ElementaryTypeName","src":"1808:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":137,"mutability":"mutable","name":"adminRole","nameLocation":"1835:9:2","nodeType":"VariableDeclaration","scope":138,"src":"1827:17:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":136,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1827:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"RoleData","nameLocation":"1774:8:2","nodeType":"StructDefinition","scope":425,"src":"1767:82:2","visibility":"public"},{"constant":false,"id":143,"mutability":"mutable","name":"_roles","nameLocation":"1890:6:2","nodeType":"VariableDeclaration","scope":425,"src":"1853:43:2","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$138_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData)"},"typeName":{"id":142,"keyType":{"id":139,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1861:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"1853:28:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$138_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData)"},"valueType":{"id":141,"nodeType":"UserDefinedTypeName","pathNode":{"id":140,"name":"RoleData","nodeType":"IdentifierPath","referencedDeclaration":138,"src":"1872:8:2"},"referencedDeclaration":138,"src":"1872:8:2","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$138_storage_ptr","typeString":"struct AccessControl.RoleData"}}},"visibility":"private"},{"constant":true,"functionSelector":"a217fddf","id":146,"mutability":"constant","name":"DEFAULT_ADMIN_ROLE","nameLocation":"1925:18:2","nodeType":"VariableDeclaration","scope":425,"src":"1901:49:2","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":144,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1901:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"30783030","id":145,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1946:4:2","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0x00"},"visibility":"public"},{"body":{"id":158,"nodeType":"Block","src":"2347:48:2","statements":[{"expression":{"arguments":[{"id":152,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":149,"src":"2364:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"id":153,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"2370:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2370:12:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":151,"name":"_checkRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":243,"src":"2353:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) view"}},"id":155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2353:30:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":156,"nodeType":"ExpressionStatement","src":"2353:30:2"},{"id":157,"nodeType":"PlaceholderStatement","src":"2389:1:2"}]},"documentation":{"id":147,"nodeType":"StructuredDocumentation","src":"1955:357:2","text":" @dev Modifier that checks that an account has a specific role. Reverts\n with a standardized message including the required role.\n The format of the revert reason is given by the following regular expression:\n  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\n _Available since v4.1._"},"id":159,"name":"onlyRole","nameLocation":"2324:8:2","nodeType":"ModifierDefinition","parameters":{"id":150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":149,"mutability":"mutable","name":"role","nameLocation":"2341:4:2","nodeType":"VariableDeclaration","scope":159,"src":"2333:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":148,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2333:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2332:14:2"},"src":"2315:80:2","virtual":false,"visibility":"internal"},{"baseFunctions":[771],"body":{"id":180,"nodeType":"Block","src":"2545:105:2","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":168,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":162,"src":"2558:11:2","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":170,"name":"IAccessControl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1352,"src":"2578:14:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAccessControl_$1352_$","typeString":"type(contract IAccessControl)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IAccessControl_$1352_$","typeString":"type(contract IAccessControl)"}],"id":169,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2573:4:2","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":171,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2573:20:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IAccessControl_$1352","typeString":"type(contract IAccessControl)"}},"id":172,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"interfaceId","nodeType":"MemberAccess","src":"2573:32:2","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"2558:47:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":176,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":162,"src":"2633:11:2","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":174,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"2609:5:2","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AccessControl_$425_$","typeString":"type(contract super AccessControl)"}},"id":175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"supportsInterface","nodeType":"MemberAccess","referencedDeclaration":771,"src":"2609:23:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bool_$","typeString":"function (bytes4) view returns (bool)"}},"id":177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2609:36:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2558:87:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":167,"id":179,"nodeType":"Return","src":"2551:94:2"}]},"documentation":{"id":160,"nodeType":"StructuredDocumentation","src":"2399:52:2","text":" @dev See {IERC165-supportsInterface}."},"functionSelector":"01ffc9a7","id":181,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"2463:17:2","nodeType":"FunctionDefinition","overrides":{"id":164,"nodeType":"OverrideSpecifier","overrides":[],"src":"2521:8:2"},"parameters":{"id":163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":162,"mutability":"mutable","name":"interfaceId","nameLocation":"2488:11:2","nodeType":"VariableDeclaration","scope":181,"src":"2481:18:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":161,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2481:6:2","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"2480:20:2"},"returnParameters":{"id":167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":166,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":181,"src":"2539:4:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":165,"name":"bool","nodeType":"ElementaryTypeName","src":"2539:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2538:6:2"},"scope":425,"src":"2454:196:2","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1319],"body":{"id":199,"nodeType":"Block","src":"2813:47:2","statements":[{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":192,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":143,"src":"2826:6:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$138_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":194,"indexExpression":{"id":193,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":184,"src":"2833:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2826:12:2","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$138_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":195,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"members","nodeType":"MemberAccess","referencedDeclaration":135,"src":"2826:20:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":197,"indexExpression":{"id":196,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":186,"src":"2847:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2826:29:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":191,"id":198,"nodeType":"Return","src":"2819:36:2"}]},"documentation":{"id":182,"nodeType":"StructuredDocumentation","src":"2654:72:2","text":" @dev Returns `true` if `account` has been granted `role`."},"functionSelector":"91d14854","id":200,"implemented":true,"kind":"function","modifiers":[],"name":"hasRole","nameLocation":"2738:7:2","nodeType":"FunctionDefinition","overrides":{"id":188,"nodeType":"OverrideSpecifier","overrides":[],"src":"2789:8:2"},"parameters":{"id":187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":184,"mutability":"mutable","name":"role","nameLocation":"2754:4:2","nodeType":"VariableDeclaration","scope":200,"src":"2746:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":183,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2746:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":186,"mutability":"mutable","name":"account","nameLocation":"2768:7:2","nodeType":"VariableDeclaration","scope":200,"src":"2760:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":185,"name":"address","nodeType":"ElementaryTypeName","src":"2760:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2745:31:2"},"returnParameters":{"id":191,"nodeType":"ParameterList","parameters":[{"constant":false,"id":190,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":200,"src":"2807:4:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":189,"name":"bool","nodeType":"ElementaryTypeName","src":"2807:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2806:6:2"},"scope":425,"src":"2729:131:2","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":242,"nodeType":"Block","src":"3190:313:2","statements":[{"condition":{"id":212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3200:23:2","subExpression":{"arguments":[{"id":209,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":203,"src":"3209:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":210,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":205,"src":"3215:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":208,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":200,"src":"3201:7:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3201:22:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":241,"nodeType":"IfStatement","src":"3196:303:2","trueBody":{"id":240,"nodeType":"Block","src":"3225:274:2","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"hexValue":"416363657373436f6e74726f6c3a206163636f756e7420","id":218,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3297:25:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_da0d07ce4a2849fbfc4cb9d6f939e9bd93016c372ca4a5ff14fe06caf3d67874","typeString":"literal_string \"AccessControl: account \""},"value":"AccessControl: account "},{"arguments":[{"arguments":[{"id":223,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":205,"src":"3364:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":222,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3356:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":221,"name":"uint160","nodeType":"ElementaryTypeName","src":"3356:7:2","typeDescriptions":{}}},"id":224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3356:16:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},{"hexValue":"3230","id":225,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3374:2:2","typeDescriptions":{"typeIdentifier":"t_rational_20_by_1","typeString":"int_const 20"},"value":"20"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"},{"typeIdentifier":"t_rational_20_by_1","typeString":"int_const 20"}],"expression":{"id":219,"name":"Strings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2513,"src":"3336:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Strings_$2513_$","typeString":"type(library Strings)"}},"id":220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toHexString","nodeType":"MemberAccess","referencedDeclaration":2512,"src":"3336:19:2","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (string memory)"}},"id":226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3336:41:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"206973206d697373696e6720726f6c6520","id":227,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3391:19:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_f986ce851518a691bccd44ea42a5a185d1b866ef6cb07984a09b81694d20ab69","typeString":"literal_string \" is missing role \""},"value":" is missing role "},{"arguments":[{"arguments":[{"id":232,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":203,"src":"3452:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":231,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3444:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":230,"name":"uint256","nodeType":"ElementaryTypeName","src":"3444:7:2","typeDescriptions":{}}},"id":233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3444:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"3332","id":234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3459:2:2","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"}],"expression":{"id":228,"name":"Strings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2513,"src":"3424:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Strings_$2513_$","typeString":"type(library Strings)"}},"id":229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toHexString","nodeType":"MemberAccess","referencedDeclaration":2512,"src":"3424:19:2","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (string memory)"}},"id":235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3424:38:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_da0d07ce4a2849fbfc4cb9d6f939e9bd93016c372ca4a5ff14fe06caf3d67874","typeString":"literal_string \"AccessControl: account \""},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_stringliteral_f986ce851518a691bccd44ea42a5a185d1b866ef6cb07984a09b81694d20ab69","typeString":"literal_string \" is missing role \""},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":216,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3267:3:2","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":217,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"3267:16:2","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3267:207:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":215,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3249:6:2","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":214,"name":"string","nodeType":"ElementaryTypeName","src":"3249:6:2","typeDescriptions":{}}},"id":237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3249:235:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":213,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"3233:6:2","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3233:259:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":239,"nodeType":"ExpressionStatement","src":"3233:259:2"}]}}]},"documentation":{"id":201,"nodeType":"StructuredDocumentation","src":"2864:258:2","text":" @dev Revert with a standard message if `account` is missing `role`.\n The format of the revert reason is given by the following regular expression:\n  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/"},"id":243,"implemented":true,"kind":"function","modifiers":[],"name":"_checkRole","nameLocation":"3134:10:2","nodeType":"FunctionDefinition","parameters":{"id":206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":203,"mutability":"mutable","name":"role","nameLocation":"3153:4:2","nodeType":"VariableDeclaration","scope":243,"src":"3145:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":202,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3145:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":205,"mutability":"mutable","name":"account","nameLocation":"3167:7:2","nodeType":"VariableDeclaration","scope":243,"src":"3159:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":204,"name":"address","nodeType":"ElementaryTypeName","src":"3159:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3144:31:2"},"returnParameters":{"id":207,"nodeType":"ParameterList","parameters":[],"src":"3190:0:2"},"scope":425,"src":"3125:378:2","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[1327],"body":{"id":257,"nodeType":"Block","src":"3745:40:2","statements":[{"expression":{"expression":{"baseExpression":{"id":252,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":143,"src":"3758:6:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$138_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":254,"indexExpression":{"id":253,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":246,"src":"3765:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3758:12:2","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$138_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":255,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"adminRole","nodeType":"MemberAccess","referencedDeclaration":137,"src":"3758:22:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":251,"id":256,"nodeType":"Return","src":"3751:29:2"}]},"documentation":{"id":244,"nodeType":"StructuredDocumentation","src":"3507:160:2","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":258,"implemented":true,"kind":"function","modifiers":[],"name":"getRoleAdmin","nameLocation":"3679:12:2","nodeType":"FunctionDefinition","overrides":{"id":248,"nodeType":"OverrideSpecifier","overrides":[],"src":"3718:8:2"},"parameters":{"id":247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":246,"mutability":"mutable","name":"role","nameLocation":"3700:4:2","nodeType":"VariableDeclaration","scope":258,"src":"3692:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":245,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3692:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3691:14:2"},"returnParameters":{"id":251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":250,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":258,"src":"3736:7:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":249,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3736:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3735:9:2"},"scope":425,"src":"3670:115:2","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[1335],"body":{"id":277,"nodeType":"Block","src":"4128:36:2","statements":[{"expression":{"arguments":[{"id":273,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":261,"src":"4145:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":274,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":263,"src":"4151:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":272,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":394,"src":"4134:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4134:25:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":276,"nodeType":"ExpressionStatement","src":"4134:25:2"}]},"documentation":{"id":259,"nodeType":"StructuredDocumentation","src":"3789:221:2","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":278,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"arguments":[{"id":268,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":261,"src":"4121:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":267,"name":"getRoleAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":258,"src":"4108:12:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) view returns (bytes32)"}},"id":269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4108:18:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":270,"kind":"modifierInvocation","modifierName":{"id":266,"name":"onlyRole","nodeType":"IdentifierPath","referencedDeclaration":159,"src":"4099:8:2"},"nodeType":"ModifierInvocation","src":"4099:28:2"}],"name":"grantRole","nameLocation":"4022:9:2","nodeType":"FunctionDefinition","overrides":{"id":265,"nodeType":"OverrideSpecifier","overrides":[],"src":"4090:8:2"},"parameters":{"id":264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":261,"mutability":"mutable","name":"role","nameLocation":"4045:4:2","nodeType":"VariableDeclaration","scope":278,"src":"4037:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":260,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4037:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":263,"mutability":"mutable","name":"account","nameLocation":"4063:7:2","nodeType":"VariableDeclaration","scope":278,"src":"4055:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":262,"name":"address","nodeType":"ElementaryTypeName","src":"4055:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4031:43:2"},"returnParameters":{"id":271,"nodeType":"ParameterList","parameters":[],"src":"4128:0:2"},"scope":425,"src":"4013:151:2","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[1343],"body":{"id":297,"nodeType":"Block","src":"4494:37:2","statements":[{"expression":{"arguments":[{"id":293,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":281,"src":"4512:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":294,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":283,"src":"4518:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":292,"name":"_revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":424,"src":"4500:11:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4500:26:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":296,"nodeType":"ExpressionStatement","src":"4500:26:2"}]},"documentation":{"id":279,"nodeType":"StructuredDocumentation","src":"4168:207:2","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":298,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"arguments":[{"id":288,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":281,"src":"4487:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":287,"name":"getRoleAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":258,"src":"4474:12:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) view returns (bytes32)"}},"id":289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4474:18:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":290,"kind":"modifierInvocation","modifierName":{"id":286,"name":"onlyRole","nodeType":"IdentifierPath","referencedDeclaration":159,"src":"4465:8:2"},"nodeType":"ModifierInvocation","src":"4465:28:2"}],"name":"revokeRole","nameLocation":"4387:10:2","nodeType":"FunctionDefinition","overrides":{"id":285,"nodeType":"OverrideSpecifier","overrides":[],"src":"4456:8:2"},"parameters":{"id":284,"nodeType":"ParameterList","parameters":[{"constant":false,"id":281,"mutability":"mutable","name":"role","nameLocation":"4411:4:2","nodeType":"VariableDeclaration","scope":298,"src":"4403:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":280,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4403:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":283,"mutability":"mutable","name":"account","nameLocation":"4429:7:2","nodeType":"VariableDeclaration","scope":298,"src":"4421:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":282,"name":"address","nodeType":"ElementaryTypeName","src":"4421:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4397:43:2"},"returnParameters":{"id":291,"nodeType":"ParameterList","parameters":[],"src":"4494:0:2"},"scope":425,"src":"4378:153:2","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[1351],"body":{"id":320,"nodeType":"Block","src":"5069:127:2","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":308,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":303,"src":"5083:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":309,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"5094:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":310,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5094:12:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"5083:23:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66","id":312,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5108:49:2","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":307,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5075:7:2","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":313,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5075:83:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":314,"nodeType":"ExpressionStatement","src":"5075:83:2"},{"expression":{"arguments":[{"id":316,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":301,"src":"5177:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":317,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":303,"src":"5183:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":315,"name":"_revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":424,"src":"5165:11:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5165:26:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":319,"nodeType":"ExpressionStatement","src":"5165:26:2"}]},"documentation":{"id":299,"nodeType":"StructuredDocumentation","src":"4535:454:2","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":321,"implemented":true,"kind":"function","modifiers":[],"name":"renounceRole","nameLocation":"5001:12:2","nodeType":"FunctionDefinition","overrides":{"id":305,"nodeType":"OverrideSpecifier","overrides":[],"src":"5060:8:2"},"parameters":{"id":304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":301,"mutability":"mutable","name":"role","nameLocation":"5022:4:2","nodeType":"VariableDeclaration","scope":321,"src":"5014:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":300,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5014:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":303,"mutability":"mutable","name":"account","nameLocation":"5036:7:2","nodeType":"VariableDeclaration","scope":321,"src":"5028:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":302,"name":"address","nodeType":"ElementaryTypeName","src":"5028:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5013:31:2"},"returnParameters":{"id":306,"nodeType":"ParameterList","parameters":[],"src":"5069:0:2"},"scope":425,"src":"4992:204:2","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":334,"nodeType":"Block","src":"5795:36:2","statements":[{"expression":{"arguments":[{"id":330,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":324,"src":"5812:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":331,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":326,"src":"5818:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":329,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":394,"src":"5801:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5801:25:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":333,"nodeType":"ExpressionStatement","src":"5801:25:2"}]},"documentation":{"id":322,"nodeType":"StructuredDocumentation","src":"5200:524:2","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":335,"implemented":true,"kind":"function","modifiers":[],"name":"_setupRole","nameLocation":"5736:10:2","nodeType":"FunctionDefinition","parameters":{"id":327,"nodeType":"ParameterList","parameters":[{"constant":false,"id":324,"mutability":"mutable","name":"role","nameLocation":"5755:4:2","nodeType":"VariableDeclaration","scope":335,"src":"5747:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":323,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5747:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":326,"mutability":"mutable","name":"account","nameLocation":"5769:7:2","nodeType":"VariableDeclaration","scope":335,"src":"5761:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":325,"name":"address","nodeType":"ElementaryTypeName","src":"5761:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5746:31:2"},"returnParameters":{"id":328,"nodeType":"ParameterList","parameters":[],"src":"5795:0:2"},"scope":425,"src":"5727:104:2","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":362,"nodeType":"Block","src":"6017:160:2","statements":[{"assignments":[344],"declarations":[{"constant":false,"id":344,"mutability":"mutable","name":"previousAdminRole","nameLocation":"6031:17:2","nodeType":"VariableDeclaration","scope":362,"src":"6023:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":343,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6023:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":348,"initialValue":{"arguments":[{"id":346,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":338,"src":"6064:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":345,"name":"getRoleAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":258,"src":"6051:12:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) view returns (bytes32)"}},"id":347,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6051:18:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"6023:46:2"},{"expression":{"id":354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":349,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":143,"src":"6075:6:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$138_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":351,"indexExpression":{"id":350,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":338,"src":"6082:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6075:12:2","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$138_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":352,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"adminRole","nodeType":"MemberAccess","referencedDeclaration":137,"src":"6075:22:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":353,"name":"adminRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":340,"src":"6100:9:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"6075:34:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":355,"nodeType":"ExpressionStatement","src":"6075:34:2"},{"eventCall":{"arguments":[{"id":357,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":338,"src":"6137:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":358,"name":"previousAdminRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":344,"src":"6143:17:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":359,"name":"adminRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":340,"src":"6162:9:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":356,"name":"RoleAdminChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1291,"src":"6120:16:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (bytes32,bytes32,bytes32)"}},"id":360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6120:52:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":361,"nodeType":"EmitStatement","src":"6115:57:2"}]},"documentation":{"id":336,"nodeType":"StructuredDocumentation","src":"5835:106:2","text":" @dev Sets `adminRole` as ``role``'s admin role.\n Emits a {RoleAdminChanged} event."},"id":363,"implemented":true,"kind":"function","modifiers":[],"name":"_setRoleAdmin","nameLocation":"5953:13:2","nodeType":"FunctionDefinition","parameters":{"id":341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":338,"mutability":"mutable","name":"role","nameLocation":"5975:4:2","nodeType":"VariableDeclaration","scope":363,"src":"5967:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":337,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5967:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":340,"mutability":"mutable","name":"adminRole","nameLocation":"5989:9:2","nodeType":"VariableDeclaration","scope":363,"src":"5981:17:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":339,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5981:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5966:33:2"},"returnParameters":{"id":342,"nodeType":"ParameterList","parameters":[],"src":"6017:0:2"},"scope":425,"src":"5944:233:2","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":393,"nodeType":"Block","src":"6240:143:2","statements":[{"condition":{"id":374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6250:23:2","subExpression":{"arguments":[{"id":371,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":365,"src":"6259:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":372,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":367,"src":"6265:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":370,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":200,"src":"6251:7:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6251:22:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":392,"nodeType":"IfStatement","src":"6246:133:2","trueBody":{"id":391,"nodeType":"Block","src":"6275:104:2","statements":[{"expression":{"id":382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"baseExpression":{"id":375,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":143,"src":"6283:6:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$138_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":377,"indexExpression":{"id":376,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":365,"src":"6290:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6283:12:2","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$138_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":378,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"members","nodeType":"MemberAccess","referencedDeclaration":135,"src":"6283:20:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":380,"indexExpression":{"id":379,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":367,"src":"6304:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6283:29:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6315:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"6283:36:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":383,"nodeType":"ExpressionStatement","src":"6283:36:2"},{"eventCall":{"arguments":[{"id":385,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":365,"src":"6344:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":386,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":367,"src":"6350:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":387,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"6359:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6359:12:2","tryCall":false,"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":384,"name":"RoleGranted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1300,"src":"6332:11:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$","typeString":"function (bytes32,address,address)"}},"id":389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6332:40:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":390,"nodeType":"EmitStatement","src":"6327:45:2"}]}}]},"id":394,"implemented":true,"kind":"function","modifiers":[],"name":"_grantRole","nameLocation":"6190:10:2","nodeType":"FunctionDefinition","parameters":{"id":368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":365,"mutability":"mutable","name":"role","nameLocation":"6209:4:2","nodeType":"VariableDeclaration","scope":394,"src":"6201:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":364,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6201:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":367,"mutability":"mutable","name":"account","nameLocation":"6223:7:2","nodeType":"VariableDeclaration","scope":394,"src":"6215:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":366,"name":"address","nodeType":"ElementaryTypeName","src":"6215:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6200:31:2"},"returnParameters":{"id":369,"nodeType":"ParameterList","parameters":[],"src":"6240:0:2"},"scope":425,"src":"6181:202:2","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":423,"nodeType":"Block","src":"6447:143:2","statements":[{"condition":{"arguments":[{"id":402,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":396,"src":"6465:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":403,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":398,"src":"6471:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":401,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":200,"src":"6457:7:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":404,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6457:22:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":422,"nodeType":"IfStatement","src":"6453:133:2","trueBody":{"id":421,"nodeType":"Block","src":"6481:105:2","statements":[{"expression":{"id":412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"baseExpression":{"id":405,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":143,"src":"6489:6:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$138_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":407,"indexExpression":{"id":406,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":396,"src":"6496:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6489:12:2","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$138_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":408,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"members","nodeType":"MemberAccess","referencedDeclaration":135,"src":"6489:20:2","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":410,"indexExpression":{"id":409,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":398,"src":"6510:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6489:29:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":411,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6521:5:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"6489:37:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":413,"nodeType":"ExpressionStatement","src":"6489:37:2"},{"eventCall":{"arguments":[{"id":415,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":396,"src":"6551:4:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":416,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":398,"src":"6557:7:2","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":417,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"6566:10:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6566:12:2","tryCall":false,"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":414,"name":"RoleRevoked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1309,"src":"6539:11:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$","typeString":"function (bytes32,address,address)"}},"id":419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6539:40:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":420,"nodeType":"EmitStatement","src":"6534:45:2"}]}}]},"id":424,"implemented":true,"kind":"function","modifiers":[],"name":"_revokeRole","nameLocation":"6396:11:2","nodeType":"FunctionDefinition","parameters":{"id":399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":396,"mutability":"mutable","name":"role","nameLocation":"6416:4:2","nodeType":"VariableDeclaration","scope":424,"src":"6408:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":395,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6408:7:2","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":398,"mutability":"mutable","name":"account","nameLocation":"6430:7:2","nodeType":"VariableDeclaration","scope":424,"src":"6422:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":397,"name":"address","nodeType":"ElementaryTypeName","src":"6422:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6407:31:2"},"returnParameters":{"id":400,"nodeType":"ParameterList","parameters":[],"src":"6447:0:2"},"scope":425,"src":"6387:203:2","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":426,"src":"1696:4896:2","usedErrors":[]}],"src":"33:6560:2"},"id":2},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol","exportedSymbols":{"Address":[722]},"id":723,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":427,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"86:23:3"},{"abstract":false,"baseContracts":[],"canonicalName":"Address","contractDependencies":[],"contractKind":"library","documentation":{"id":428,"nodeType":"StructuredDocumentation","src":"111:67:3","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":722,"linearizedBaseContracts":[722],"name":"Address","nameLocation":"187:7:3","nodeType":"ContractDefinition","nodes":[{"body":{"id":444,"nodeType":"Block","src":"801:275:3","statements":[{"assignments":[437],"declarations":[{"constant":false,"id":437,"mutability":"mutable","name":"size","nameLocation":"990:4:3","nodeType":"VariableDeclaration","scope":444,"src":"982:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":436,"name":"uint256","nodeType":"ElementaryTypeName","src":"982:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":438,"nodeType":"VariableDeclarationStatement","src":"982:12:3"},{"AST":{"nodeType":"YulBlock","src":"1009:42:3","statements":[{"nodeType":"YulAssignment","src":"1017:28:3","value":{"arguments":[{"name":"account","nodeType":"YulIdentifier","src":"1037:7:3"}],"functionName":{"name":"extcodesize","nodeType":"YulIdentifier","src":"1025:11:3"},"nodeType":"YulFunctionCall","src":"1025:20:3"},"variableNames":[{"name":"size","nodeType":"YulIdentifier","src":"1017:4:3"}]}]},"evmVersion":"london","externalReferences":[{"declaration":431,"isOffset":false,"isSlot":false,"src":"1037:7:3","valueSize":1},{"declaration":437,"isOffset":false,"isSlot":false,"src":"1017:4:3","valueSize":1}],"id":439,"nodeType":"InlineAssembly","src":"1000:51:3"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":440,"name":"size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":437,"src":"1063:4:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":441,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1070:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1063:8:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":435,"id":443,"nodeType":"Return","src":"1056:15:3"}]},"documentation":{"id":429,"nodeType":"StructuredDocumentation","src":"199:533:3","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":445,"implemented":true,"kind":"function","modifiers":[],"name":"isContract","nameLocation":"744:10:3","nodeType":"FunctionDefinition","parameters":{"id":432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":431,"mutability":"mutable","name":"account","nameLocation":"763:7:3","nodeType":"VariableDeclaration","scope":445,"src":"755:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":430,"name":"address","nodeType":"ElementaryTypeName","src":"755:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"754:17:3"},"returnParameters":{"id":435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":434,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":445,"src":"795:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":433,"name":"bool","nodeType":"ElementaryTypeName","src":"795:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"794:6:3"},"scope":722,"src":"735:341:3","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":478,"nodeType":"Block","src":"2030:227:3","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":456,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2052:4:3","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$722","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$722","typeString":"library Address"}],"id":455,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2044:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":454,"name":"address","nodeType":"ElementaryTypeName","src":"2044:7:3","typeDescriptions":{}}},"id":457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2044:13:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","src":"2044:21:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":459,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":450,"src":"2069:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2044:31:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","id":461,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2077:31:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""},"value":"Address: insufficient balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""}],"id":453,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2036:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2036:73:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":463,"nodeType":"ExpressionStatement","src":"2036:73:3"},{"assignments":[465,null],"declarations":[{"constant":false,"id":465,"mutability":"mutable","name":"success","nameLocation":"2122:7:3","nodeType":"VariableDeclaration","scope":478,"src":"2117:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":464,"name":"bool","nodeType":"ElementaryTypeName","src":"2117:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":472,"initialValue":{"arguments":[{"hexValue":"","id":470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2165:2:3","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":466,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":448,"src":"2135:9:3","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"call","nodeType":"MemberAccess","src":"2135:14:3","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":469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":468,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":450,"src":"2157:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"2135:29:3","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":471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2135:33:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"2116:52:3"},{"expression":{"arguments":[{"id":474,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":465,"src":"2182:7:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564","id":475,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2191:60:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""},"value":"Address: unable to send value, recipient may have reverted"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""}],"id":473,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2174:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2174:78:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":477,"nodeType":"ExpressionStatement","src":"2174:78:3"}]},"documentation":{"id":446,"nodeType":"StructuredDocumentation","src":"1080:876:3","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":479,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"1968:9:3","nodeType":"FunctionDefinition","parameters":{"id":451,"nodeType":"ParameterList","parameters":[{"constant":false,"id":448,"mutability":"mutable","name":"recipient","nameLocation":"1994:9:3","nodeType":"VariableDeclaration","scope":479,"src":"1978:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":447,"name":"address","nodeType":"ElementaryTypeName","src":"1978:15:3","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":450,"mutability":"mutable","name":"amount","nameLocation":"2013:6:3","nodeType":"VariableDeclaration","scope":479,"src":"2005:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":449,"name":"uint256","nodeType":"ElementaryTypeName","src":"2005:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1977:43:3"},"returnParameters":{"id":452,"nodeType":"ParameterList","parameters":[],"src":"2030:0:3"},"scope":722,"src":"1959:298:3","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":495,"nodeType":"Block","src":"3050:78:3","statements":[{"expression":{"arguments":[{"id":490,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":482,"src":"3076:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":491,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":484,"src":"3084:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564","id":492,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3090:32:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""},"value":"Address: low-level call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""}],"id":489,"name":"functionCall","nodeType":"Identifier","overloadedDeclarations":[496,516],"referencedDeclaration":516,"src":"3063:12:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) returns (bytes memory)"}},"id":493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3063:60:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":488,"id":494,"nodeType":"Return","src":"3056:67:3"}]},"documentation":{"id":480,"nodeType":"StructuredDocumentation","src":"2261:697:3","text":" @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._"},"id":496,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"2970:12:3","nodeType":"FunctionDefinition","parameters":{"id":485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":482,"mutability":"mutable","name":"target","nameLocation":"2991:6:3","nodeType":"VariableDeclaration","scope":496,"src":"2983:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":481,"name":"address","nodeType":"ElementaryTypeName","src":"2983:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":484,"mutability":"mutable","name":"data","nameLocation":"3012:4:3","nodeType":"VariableDeclaration","scope":496,"src":"2999:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":483,"name":"bytes","nodeType":"ElementaryTypeName","src":"2999:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2982:35:3"},"returnParameters":{"id":488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":487,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":496,"src":"3036:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":486,"name":"bytes","nodeType":"ElementaryTypeName","src":"3036:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3035:14:3"},"scope":722,"src":"2961:167:3","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":515,"nodeType":"Block","src":"3469:70:3","statements":[{"expression":{"arguments":[{"id":509,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":499,"src":"3504:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":510,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":501,"src":"3512:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3518:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":512,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":503,"src":"3521:12:3","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":508,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[536,586],"referencedDeclaration":586,"src":"3482:21:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3482:52:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":507,"id":514,"nodeType":"Return","src":"3475:59:3"}]},"documentation":{"id":497,"nodeType":"StructuredDocumentation","src":"3132:201:3","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":516,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"3345:12:3","nodeType":"FunctionDefinition","parameters":{"id":504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":499,"mutability":"mutable","name":"target","nameLocation":"3371:6:3","nodeType":"VariableDeclaration","scope":516,"src":"3363:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":498,"name":"address","nodeType":"ElementaryTypeName","src":"3363:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":501,"mutability":"mutable","name":"data","nameLocation":"3396:4:3","nodeType":"VariableDeclaration","scope":516,"src":"3383:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":500,"name":"bytes","nodeType":"ElementaryTypeName","src":"3383:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":503,"mutability":"mutable","name":"errorMessage","nameLocation":"3420:12:3","nodeType":"VariableDeclaration","scope":516,"src":"3406:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":502,"name":"string","nodeType":"ElementaryTypeName","src":"3406:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3357:79:3"},"returnParameters":{"id":507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":506,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":516,"src":"3455:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":505,"name":"bytes","nodeType":"ElementaryTypeName","src":"3455:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3454:14:3"},"scope":722,"src":"3336:203:3","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":535,"nodeType":"Block","src":"4006:105:3","statements":[{"expression":{"arguments":[{"id":529,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":519,"src":"4041:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":530,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":521,"src":"4049:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":531,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":523,"src":"4055:5:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564","id":532,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4062:43:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""},"value":"Address: low-level call with value failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""}],"id":528,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[536,586],"referencedDeclaration":586,"src":"4019:21:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":533,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4019:87:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":527,"id":534,"nodeType":"Return","src":"4012:94:3"}]},"documentation":{"id":517,"nodeType":"StructuredDocumentation","src":"3543:331:3","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._"},"id":536,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"3886:21:3","nodeType":"FunctionDefinition","parameters":{"id":524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":519,"mutability":"mutable","name":"target","nameLocation":"3921:6:3","nodeType":"VariableDeclaration","scope":536,"src":"3913:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":518,"name":"address","nodeType":"ElementaryTypeName","src":"3913:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":521,"mutability":"mutable","name":"data","nameLocation":"3946:4:3","nodeType":"VariableDeclaration","scope":536,"src":"3933:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":520,"name":"bytes","nodeType":"ElementaryTypeName","src":"3933:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":523,"mutability":"mutable","name":"value","nameLocation":"3964:5:3","nodeType":"VariableDeclaration","scope":536,"src":"3956:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":522,"name":"uint256","nodeType":"ElementaryTypeName","src":"3956:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3907:66:3"},"returnParameters":{"id":527,"nodeType":"ParameterList","parameters":[{"constant":false,"id":526,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":536,"src":"3992:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":525,"name":"bytes","nodeType":"ElementaryTypeName","src":"3992:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3991:14:3"},"scope":722,"src":"3877:234:3","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":585,"nodeType":"Block","src":"4506:302:3","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":553,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4528:4:3","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$722","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$722","typeString":"library Address"}],"id":552,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4520:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":551,"name":"address","nodeType":"ElementaryTypeName","src":"4520:7:3","typeDescriptions":{}}},"id":554,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4520:13:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","src":"4520:21:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":556,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":543,"src":"4545:5:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4520:30:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c","id":558,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4552:40:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""},"value":"Address: insufficient balance for call"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""}],"id":550,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4512:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4512:81:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":560,"nodeType":"ExpressionStatement","src":"4512:81:3"},{"expression":{"arguments":[{"arguments":[{"id":563,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":539,"src":"4618:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":562,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":445,"src":"4607:10:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4607:18:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","id":565,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4627:31:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""},"value":"Address: call to non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""}],"id":561,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4599:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4599:60:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":567,"nodeType":"ExpressionStatement","src":"4599:60:3"},{"assignments":[569,571],"declarations":[{"constant":false,"id":569,"mutability":"mutable","name":"success","nameLocation":"4672:7:3","nodeType":"VariableDeclaration","scope":585,"src":"4667:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":568,"name":"bool","nodeType":"ElementaryTypeName","src":"4667:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":571,"mutability":"mutable","name":"returndata","nameLocation":"4694:10:3","nodeType":"VariableDeclaration","scope":585,"src":"4681:23:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":570,"name":"bytes","nodeType":"ElementaryTypeName","src":"4681:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":578,"initialValue":{"arguments":[{"id":576,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":541,"src":"4734:4:3","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":572,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":539,"src":"4708:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"call","nodeType":"MemberAccess","src":"4708:11:3","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":575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":574,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":543,"src":"4727:5:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"4708:25:3","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":577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4708:31:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4666:73:3"},{"expression":{"arguments":[{"id":580,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":569,"src":"4769:7:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":581,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":571,"src":"4778:10:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":582,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":545,"src":"4790:12:3","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":579,"name":"verifyCallResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":721,"src":"4752:16:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bool,bytes memory,string memory) pure returns (bytes memory)"}},"id":583,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4752:51:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":549,"id":584,"nodeType":"Return","src":"4745:58:3"}]},"documentation":{"id":537,"nodeType":"StructuredDocumentation","src":"4115:227:3","text":" @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":586,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"4354:21:3","nodeType":"FunctionDefinition","parameters":{"id":546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":539,"mutability":"mutable","name":"target","nameLocation":"4389:6:3","nodeType":"VariableDeclaration","scope":586,"src":"4381:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":538,"name":"address","nodeType":"ElementaryTypeName","src":"4381:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":541,"mutability":"mutable","name":"data","nameLocation":"4414:4:3","nodeType":"VariableDeclaration","scope":586,"src":"4401:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":540,"name":"bytes","nodeType":"ElementaryTypeName","src":"4401:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":543,"mutability":"mutable","name":"value","nameLocation":"4432:5:3","nodeType":"VariableDeclaration","scope":586,"src":"4424:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":542,"name":"uint256","nodeType":"ElementaryTypeName","src":"4424:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":545,"mutability":"mutable","name":"errorMessage","nameLocation":"4457:12:3","nodeType":"VariableDeclaration","scope":586,"src":"4443:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":544,"name":"string","nodeType":"ElementaryTypeName","src":"4443:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4375:98:3"},"returnParameters":{"id":549,"nodeType":"ParameterList","parameters":[{"constant":false,"id":548,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":586,"src":"4492:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":547,"name":"bytes","nodeType":"ElementaryTypeName","src":"4492:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4491:14:3"},"scope":722,"src":"4345:463:3","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":602,"nodeType":"Block","src":"5083:91:3","statements":[{"expression":{"arguments":[{"id":597,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":589,"src":"5115:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":598,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":591,"src":"5123:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564","id":599,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5129:39:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""},"value":"Address: low-level static call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""}],"id":596,"name":"functionStaticCall","nodeType":"Identifier","overloadedDeclarations":[603,638],"referencedDeclaration":638,"src":"5096:18:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) view returns (bytes memory)"}},"id":600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5096:73:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":595,"id":601,"nodeType":"Return","src":"5089:80:3"}]},"documentation":{"id":587,"nodeType":"StructuredDocumentation","src":"4812:156:3","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":603,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"4980:18:3","nodeType":"FunctionDefinition","parameters":{"id":592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":589,"mutability":"mutable","name":"target","nameLocation":"5012:6:3","nodeType":"VariableDeclaration","scope":603,"src":"5004:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":588,"name":"address","nodeType":"ElementaryTypeName","src":"5004:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":591,"mutability":"mutable","name":"data","nameLocation":"5037:4:3","nodeType":"VariableDeclaration","scope":603,"src":"5024:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":590,"name":"bytes","nodeType":"ElementaryTypeName","src":"5024:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4998:47:3"},"returnParameters":{"id":595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":594,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":603,"src":"5069:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":593,"name":"bytes","nodeType":"ElementaryTypeName","src":"5069:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5068:14:3"},"scope":722,"src":"4971:203:3","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":637,"nodeType":"Block","src":"5488:214:3","statements":[{"expression":{"arguments":[{"arguments":[{"id":617,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":606,"src":"5513:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":616,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":445,"src":"5502:10:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5502:18:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a207374617469632063616c6c20746f206e6f6e2d636f6e7472616374","id":619,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5522:38:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9","typeString":"literal_string \"Address: static call to non-contract\""},"value":"Address: static call to non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9","typeString":"literal_string \"Address: static call to non-contract\""}],"id":615,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5494:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5494:67:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":621,"nodeType":"ExpressionStatement","src":"5494:67:3"},{"assignments":[623,625],"declarations":[{"constant":false,"id":623,"mutability":"mutable","name":"success","nameLocation":"5574:7:3","nodeType":"VariableDeclaration","scope":637,"src":"5569:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":622,"name":"bool","nodeType":"ElementaryTypeName","src":"5569:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":625,"mutability":"mutable","name":"returndata","nameLocation":"5596:10:3","nodeType":"VariableDeclaration","scope":637,"src":"5583:23:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":624,"name":"bytes","nodeType":"ElementaryTypeName","src":"5583:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":630,"initialValue":{"arguments":[{"id":628,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":608,"src":"5628:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":626,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":606,"src":"5610:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"staticcall","nodeType":"MemberAccess","src":"5610:17:3","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5610:23:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"5568:65:3"},{"expression":{"arguments":[{"id":632,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":623,"src":"5663:7:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":633,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":625,"src":"5672:10:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":634,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":610,"src":"5684:12:3","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":631,"name":"verifyCallResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":721,"src":"5646:16:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bool,bytes memory,string memory) pure returns (bytes memory)"}},"id":635,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5646:51:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":614,"id":636,"nodeType":"Return","src":"5639:58:3"}]},"documentation":{"id":604,"nodeType":"StructuredDocumentation","src":"5178:163:3","text":" @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":638,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"5353:18:3","nodeType":"FunctionDefinition","parameters":{"id":611,"nodeType":"ParameterList","parameters":[{"constant":false,"id":606,"mutability":"mutable","name":"target","nameLocation":"5385:6:3","nodeType":"VariableDeclaration","scope":638,"src":"5377:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":605,"name":"address","nodeType":"ElementaryTypeName","src":"5377:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":608,"mutability":"mutable","name":"data","nameLocation":"5410:4:3","nodeType":"VariableDeclaration","scope":638,"src":"5397:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":607,"name":"bytes","nodeType":"ElementaryTypeName","src":"5397:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":610,"mutability":"mutable","name":"errorMessage","nameLocation":"5434:12:3","nodeType":"VariableDeclaration","scope":638,"src":"5420:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":609,"name":"string","nodeType":"ElementaryTypeName","src":"5420:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5371:79:3"},"returnParameters":{"id":614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":613,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":638,"src":"5474:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":612,"name":"bytes","nodeType":"ElementaryTypeName","src":"5474:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5473:14:3"},"scope":722,"src":"5344:358:3","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":654,"nodeType":"Block","src":"5964:95:3","statements":[{"expression":{"arguments":[{"id":649,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":641,"src":"5998:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":650,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":643,"src":"6006:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564","id":651,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6012:41:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398","typeString":"literal_string \"Address: low-level delegate call failed\""},"value":"Address: low-level delegate call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398","typeString":"literal_string \"Address: low-level delegate call failed\""}],"id":648,"name":"functionDelegateCall","nodeType":"Identifier","overloadedDeclarations":[655,690],"referencedDeclaration":690,"src":"5977:20:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) returns (bytes memory)"}},"id":652,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5977:77:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":647,"id":653,"nodeType":"Return","src":"5970:84:3"}]},"documentation":{"id":639,"nodeType":"StructuredDocumentation","src":"5706:158:3","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"},"id":655,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"5876:20:3","nodeType":"FunctionDefinition","parameters":{"id":644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":641,"mutability":"mutable","name":"target","nameLocation":"5905:6:3","nodeType":"VariableDeclaration","scope":655,"src":"5897:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":640,"name":"address","nodeType":"ElementaryTypeName","src":"5897:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":643,"mutability":"mutable","name":"data","nameLocation":"5926:4:3","nodeType":"VariableDeclaration","scope":655,"src":"5913:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":642,"name":"bytes","nodeType":"ElementaryTypeName","src":"5913:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5896:35:3"},"returnParameters":{"id":647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":646,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":655,"src":"5950:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":645,"name":"bytes","nodeType":"ElementaryTypeName","src":"5950:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5949:14:3"},"scope":722,"src":"5867:192:3","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":689,"nodeType":"Block","src":"6372:218:3","statements":[{"expression":{"arguments":[{"arguments":[{"id":669,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":658,"src":"6397:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":668,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":445,"src":"6386:10:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6386:18:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374","id":671,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6406:40:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520","typeString":"literal_string \"Address: delegate call to non-contract\""},"value":"Address: delegate call to non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520","typeString":"literal_string \"Address: delegate call to non-contract\""}],"id":667,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6378:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6378:69:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":673,"nodeType":"ExpressionStatement","src":"6378:69:3"},{"assignments":[675,677],"declarations":[{"constant":false,"id":675,"mutability":"mutable","name":"success","nameLocation":"6460:7:3","nodeType":"VariableDeclaration","scope":689,"src":"6455:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":674,"name":"bool","nodeType":"ElementaryTypeName","src":"6455:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":677,"mutability":"mutable","name":"returndata","nameLocation":"6482:10:3","nodeType":"VariableDeclaration","scope":689,"src":"6469:23:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":676,"name":"bytes","nodeType":"ElementaryTypeName","src":"6469:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":682,"initialValue":{"arguments":[{"id":680,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":660,"src":"6516:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":678,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":658,"src":"6496:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"delegatecall","nodeType":"MemberAccess","src":"6496:19:3","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":681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6496:25:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"6454:67:3"},{"expression":{"arguments":[{"id":684,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":675,"src":"6551:7:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":685,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":677,"src":"6560:10:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":686,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":662,"src":"6572:12:3","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":683,"name":"verifyCallResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":721,"src":"6534:16:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bool,bytes memory,string memory) pure returns (bytes memory)"}},"id":687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6534:51:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":666,"id":688,"nodeType":"Return","src":"6527:58:3"}]},"documentation":{"id":656,"nodeType":"StructuredDocumentation","src":"6063:165:3","text":" @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"},"id":690,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"6240:20:3","nodeType":"FunctionDefinition","parameters":{"id":663,"nodeType":"ParameterList","parameters":[{"constant":false,"id":658,"mutability":"mutable","name":"target","nameLocation":"6274:6:3","nodeType":"VariableDeclaration","scope":690,"src":"6266:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":657,"name":"address","nodeType":"ElementaryTypeName","src":"6266:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":660,"mutability":"mutable","name":"data","nameLocation":"6299:4:3","nodeType":"VariableDeclaration","scope":690,"src":"6286:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":659,"name":"bytes","nodeType":"ElementaryTypeName","src":"6286:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":662,"mutability":"mutable","name":"errorMessage","nameLocation":"6323:12:3","nodeType":"VariableDeclaration","scope":690,"src":"6309:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":661,"name":"string","nodeType":"ElementaryTypeName","src":"6309:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6260:79:3"},"returnParameters":{"id":666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":665,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":690,"src":"6358:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":664,"name":"bytes","nodeType":"ElementaryTypeName","src":"6358:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6357:14:3"},"scope":722,"src":"6231:359:3","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":720,"nodeType":"Block","src":"6942:436:3","statements":[{"condition":{"id":702,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":693,"src":"6952:7:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":718,"nodeType":"Block","src":"6999:375:3","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":706,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":695,"src":"7071:10:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"7071:17:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":708,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7091:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7071:21:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":716,"nodeType":"Block","src":"7329:39:3","statements":[{"expression":{"arguments":[{"id":713,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":697,"src":"7346:12:3","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":712,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"7339:6:3","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7339:20:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":715,"nodeType":"ExpressionStatement","src":"7339:20:3"}]},"id":717,"nodeType":"IfStatement","src":"7067:301:3","trueBody":{"id":711,"nodeType":"Block","src":"7094:229:3","statements":[{"AST":{"nodeType":"YulBlock","src":"7198:117:3","statements":[{"nodeType":"YulVariableDeclaration","src":"7210:40:3","value":{"arguments":[{"name":"returndata","nodeType":"YulIdentifier","src":"7239:10:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7233:5:3"},"nodeType":"YulFunctionCall","src":"7233:17:3"},"variables":[{"name":"returndata_size","nodeType":"YulTypedName","src":"7214:15:3","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7272:2:3","type":"","value":"32"},{"name":"returndata","nodeType":"YulIdentifier","src":"7276:10:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7268:3:3"},"nodeType":"YulFunctionCall","src":"7268:19:3"},{"name":"returndata_size","nodeType":"YulIdentifier","src":"7289:15:3"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7261:6:3"},"nodeType":"YulFunctionCall","src":"7261:44:3"},"nodeType":"YulExpressionStatement","src":"7261:44:3"}]},"evmVersion":"london","externalReferences":[{"declaration":695,"isOffset":false,"isSlot":false,"src":"7239:10:3","valueSize":1},{"declaration":695,"isOffset":false,"isSlot":false,"src":"7276:10:3","valueSize":1}],"id":710,"nodeType":"InlineAssembly","src":"7189:126:3"}]}}]},"id":719,"nodeType":"IfStatement","src":"6948:426:3","trueBody":{"id":705,"nodeType":"Block","src":"6961:32:3","statements":[{"expression":{"id":703,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":695,"src":"6976:10:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":701,"id":704,"nodeType":"Return","src":"6969:17:3"}]}}]},"documentation":{"id":691,"nodeType":"StructuredDocumentation","src":"6594:199:3","text":" @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n revert reason using the provided one.\n _Available since v4.3._"},"id":721,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"6805:16:3","nodeType":"FunctionDefinition","parameters":{"id":698,"nodeType":"ParameterList","parameters":[{"constant":false,"id":693,"mutability":"mutable","name":"success","nameLocation":"6832:7:3","nodeType":"VariableDeclaration","scope":721,"src":"6827:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":692,"name":"bool","nodeType":"ElementaryTypeName","src":"6827:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":695,"mutability":"mutable","name":"returndata","nameLocation":"6858:10:3","nodeType":"VariableDeclaration","scope":721,"src":"6845:23:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":694,"name":"bytes","nodeType":"ElementaryTypeName","src":"6845:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":697,"mutability":"mutable","name":"errorMessage","nameLocation":"6888:12:3","nodeType":"VariableDeclaration","scope":721,"src":"6874:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":696,"name":"string","nodeType":"ElementaryTypeName","src":"6874:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6821:83:3"},"returnParameters":{"id":701,"nodeType":"ParameterList","parameters":[{"constant":false,"id":700,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":721,"src":"6928:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":699,"name":"bytes","nodeType":"ElementaryTypeName","src":"6928:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6927:14:3"},"scope":722,"src":"6796:582:3","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":723,"src":"179:7201:3","usedErrors":[]}],"src":"86:7295:3"},"id":3},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol","exportedSymbols":{"Context":[748]},"id":749,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":724,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"32:23:4"},{"abstract":true,"baseContracts":[],"canonicalName":"Context","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":748,"linearizedBaseContracts":[748],"name":"Context","nameLocation":"575:7:4","nodeType":"ContractDefinition","nodes":[{"body":{"id":735,"nodeType":"Block","src":"657:37:4","statements":[{"expression":{"arguments":[{"expression":{"id":731,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"678:3:4","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"678:10:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":730,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"670:8:4","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":729,"name":"address","nodeType":"ElementaryTypeName","src":"670:8:4","stateMutability":"payable","typeDescriptions":{}}},"id":733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"670:19:4","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"functionReturnParameters":728,"id":734,"nodeType":"Return","src":"663:26:4"}]},"id":736,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"596:10:4","nodeType":"FunctionDefinition","parameters":{"id":725,"nodeType":"ParameterList","parameters":[],"src":"606:2:4"},"returnParameters":{"id":728,"nodeType":"ParameterList","parameters":[{"constant":false,"id":727,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":736,"src":"640:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":726,"name":"address","nodeType":"ElementaryTypeName","src":"640:15:4","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"src":"639:17:4"},"scope":748,"src":"587:107:4","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":746,"nodeType":"Block","src":"763:155:4","statements":[{"expression":{"id":741,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"769:4:4","typeDescriptions":{"typeIdentifier":"t_contract$_Context_$748","typeString":"contract Context"}},"id":742,"nodeType":"ExpressionStatement","src":"769:4:4"},{"expression":{"expression":{"id":743,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"905:3:4","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","src":"905:8:4","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":740,"id":745,"nodeType":"Return","src":"898:15:4"}]},"id":747,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nameLocation":"707:8:4","nodeType":"FunctionDefinition","parameters":{"id":737,"nodeType":"ParameterList","parameters":[],"src":"715:2:4"},"returnParameters":{"id":740,"nodeType":"ParameterList","parameters":[{"constant":false,"id":739,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":747,"src":"749:12:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":738,"name":"bytes","nodeType":"ElementaryTypeName","src":"749:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"748:14:4"},"scope":748,"src":"698:220:4","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":749,"src":"557:363:4","usedErrors":[]}],"src":"32:889:4"},"id":4},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC165.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC165.sol","exportedSymbols":{"ERC165":[772],"IERC165":[1364]},"id":773,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":750,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"33:23:5"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC165.sol","file":"./IERC165.sol","id":751,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":773,"sourceUnit":1365,"src":"58:23:5","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":753,"name":"IERC165","nodeType":"IdentifierPath","referencedDeclaration":1364,"src":"688:7:5"},"id":754,"nodeType":"InheritanceSpecifier","src":"688:7:5"}],"canonicalName":"ERC165","contractDependencies":[],"contractKind":"contract","documentation":{"id":752,"nodeType":"StructuredDocumentation","src":"83:576:5","text":" @dev Implementation of the {IERC165} interface.\n Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n for the additional interface id that will be supported. For example:\n ```solidity\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n }\n ```\n Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation."},"fullyImplemented":true,"id":772,"linearizedBaseContracts":[772,1364],"name":"ERC165","nameLocation":"678:6:5","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[1363],"body":{"id":770,"nodeType":"Block","src":"846:58:5","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":763,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":757,"src":"859:11:5","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":765,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1364,"src":"879:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC165_$1364_$","typeString":"type(contract IERC165)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IERC165_$1364_$","typeString":"type(contract IERC165)"}],"id":764,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"874:4:5","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":766,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"874:13:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IERC165_$1364","typeString":"type(contract IERC165)"}},"id":767,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"interfaceId","nodeType":"MemberAccess","src":"874:25:5","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"859:40:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":762,"id":769,"nodeType":"Return","src":"852:47:5"}]},"documentation":{"id":755,"nodeType":"StructuredDocumentation","src":"700:52:5","text":" @dev See {IERC165-supportsInterface}."},"functionSelector":"01ffc9a7","id":771,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"764:17:5","nodeType":"FunctionDefinition","overrides":{"id":759,"nodeType":"OverrideSpecifier","overrides":[],"src":"822:8:5"},"parameters":{"id":758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":757,"mutability":"mutable","name":"interfaceId","nameLocation":"789:11:5","nodeType":"VariableDeclaration","scope":771,"src":"782:18:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":756,"name":"bytes4","nodeType":"ElementaryTypeName","src":"782:6:5","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"781:20:5"},"returnParameters":{"id":762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":761,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":771,"src":"840:4:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":760,"name":"bool","nodeType":"ElementaryTypeName","src":"840:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"839:6:5"},"scope":772,"src":"755:149:5","stateMutability":"view","virtual":true,"visibility":"public"}],"scope":773,"src":"660:246:5","usedErrors":[]}],"src":"33:874:5"},"id":5},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol","exportedSymbols":{"Address":[722],"Context":[748],"ERC20":[1279],"IERC20":[1442],"SafeMath":[2310]},"id":1280,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":774,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"33:23:6"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol","file":"./Context.sol","id":775,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1280,"sourceUnit":749,"src":"58:23:6","symbolAliases":[],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"./IERC20.sol","id":776,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1280,"sourceUnit":1443,"src":"82:22:6","symbolAliases":[],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol","file":"./SafeMath.sol","id":777,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1280,"sourceUnit":2311,"src":"105:24:6","symbolAliases":[],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol","file":"./Address.sol","id":778,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1280,"sourceUnit":723,"src":"130:23:6","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":780,"name":"Context","nodeType":"IdentifierPath","referencedDeclaration":748,"src":"1336:7:6"},"id":781,"nodeType":"InheritanceSpecifier","src":"1336:7:6"},{"baseName":{"id":782,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1345:6:6"},"id":783,"nodeType":"InheritanceSpecifier","src":"1345:6:6"}],"canonicalName":"ERC20","contractDependencies":[],"contractKind":"contract","documentation":{"id":779,"nodeType":"StructuredDocumentation","src":"155:1162:6","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":1279,"linearizedBaseContracts":[1279,1442,748],"name":"ERC20","nameLocation":"1327:5:6","nodeType":"ContractDefinition","nodes":[{"id":786,"libraryName":{"id":784,"name":"SafeMath","nodeType":"IdentifierPath","referencedDeclaration":2310,"src":"1362:8:6"},"nodeType":"UsingForDirective","src":"1356:27:6","typeName":{"id":785,"name":"uint256","nodeType":"ElementaryTypeName","src":"1375:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":789,"libraryName":{"id":787,"name":"Address","nodeType":"IdentifierPath","referencedDeclaration":722,"src":"1392:7:6"},"nodeType":"UsingForDirective","src":"1386:26:6","typeName":{"id":788,"name":"address","nodeType":"ElementaryTypeName","src":"1404:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"constant":false,"id":793,"mutability":"mutable","name":"_balances","nameLocation":"1452:9:6","nodeType":"VariableDeclaration","scope":1279,"src":"1416:45:6","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":792,"keyType":{"id":790,"name":"address","nodeType":"ElementaryTypeName","src":"1424:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1416:27:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":791,"name":"uint256","nodeType":"ElementaryTypeName","src":"1435:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"constant":false,"id":799,"mutability":"mutable","name":"_allowances","nameLocation":"1522:11:6","nodeType":"VariableDeclaration","scope":1279,"src":"1466:67:6","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":798,"keyType":{"id":794,"name":"address","nodeType":"ElementaryTypeName","src":"1474:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1466:47:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueType":{"id":797,"keyType":{"id":795,"name":"address","nodeType":"ElementaryTypeName","src":"1493:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1485:27:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":796,"name":"uint256","nodeType":"ElementaryTypeName","src":"1504:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"private"},{"constant":false,"id":801,"mutability":"mutable","name":"_totalSupply","nameLocation":"1554:12:6","nodeType":"VariableDeclaration","scope":1279,"src":"1538:28:6","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":800,"name":"uint256","nodeType":"ElementaryTypeName","src":"1538:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":803,"mutability":"mutable","name":"_name","nameLocation":"1586:5:6","nodeType":"VariableDeclaration","scope":1279,"src":"1571:20:6","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":802,"name":"string","nodeType":"ElementaryTypeName","src":"1571:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":805,"mutability":"mutable","name":"_symbol","nameLocation":"1610:7:6","nodeType":"VariableDeclaration","scope":1279,"src":"1595:22:6","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":804,"name":"string","nodeType":"ElementaryTypeName","src":"1595:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":807,"mutability":"mutable","name":"_decimals","nameLocation":"1635:9:6","nodeType":"VariableDeclaration","scope":1279,"src":"1621:23:6","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":806,"name":"uint8","nodeType":"ElementaryTypeName","src":"1621:5:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"private"},{"body":{"id":827,"nodeType":"Block","src":"2001:65:6","statements":[{"expression":{"id":817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":815,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":803,"src":"2007:5:6","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":816,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":810,"src":"2015:4:6","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2007:12:6","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":818,"nodeType":"ExpressionStatement","src":"2007:12:6"},{"expression":{"id":821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":819,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":805,"src":"2025:7:6","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":820,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":812,"src":"2035:6:6","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2025:16:6","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":822,"nodeType":"ExpressionStatement","src":"2025:16:6"},{"expression":{"id":825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":823,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":807,"src":"2047:9:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"3138","id":824,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2059:2:6","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"src":"2047:14:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":826,"nodeType":"ExpressionStatement","src":"2047:14:6"}]},"documentation":{"id":808,"nodeType":"StructuredDocumentation","src":"1649:295:6","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":828,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":810,"mutability":"mutable","name":"name","nameLocation":"1973:4:6","nodeType":"VariableDeclaration","scope":828,"src":"1959:18:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":809,"name":"string","nodeType":"ElementaryTypeName","src":"1959:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":812,"mutability":"mutable","name":"symbol","nameLocation":"1993:6:6","nodeType":"VariableDeclaration","scope":828,"src":"1979:20:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":811,"name":"string","nodeType":"ElementaryTypeName","src":"1979:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1958:42:6"},"returnParameters":{"id":814,"nodeType":"ParameterList","parameters":[],"src":"2001:0:6"},"scope":1279,"src":"1947:119:6","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":836,"nodeType":"Block","src":"2175:23:6","statements":[{"expression":{"id":834,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":803,"src":"2188:5:6","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":833,"id":835,"nodeType":"Return","src":"2181:12:6"}]},"documentation":{"id":829,"nodeType":"StructuredDocumentation","src":"2070:50:6","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":837,"implemented":true,"kind":"function","modifiers":[],"name":"name","nameLocation":"2132:4:6","nodeType":"FunctionDefinition","parameters":{"id":830,"nodeType":"ParameterList","parameters":[],"src":"2136:2:6"},"returnParameters":{"id":833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":832,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":837,"src":"2160:13:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":831,"name":"string","nodeType":"ElementaryTypeName","src":"2160:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2159:15:6"},"scope":1279,"src":"2123:75:6","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":845,"nodeType":"Block","src":"2355:25:6","statements":[{"expression":{"id":843,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":805,"src":"2368:7:6","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":842,"id":844,"nodeType":"Return","src":"2361:14:6"}]},"documentation":{"id":838,"nodeType":"StructuredDocumentation","src":"2202:96:6","text":" @dev Returns the symbol of the token, usually a shorter version of the\n name."},"functionSelector":"95d89b41","id":846,"implemented":true,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"2310:6:6","nodeType":"FunctionDefinition","parameters":{"id":839,"nodeType":"ParameterList","parameters":[],"src":"2316:2:6"},"returnParameters":{"id":842,"nodeType":"ParameterList","parameters":[{"constant":false,"id":841,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":846,"src":"2340:13:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":840,"name":"string","nodeType":"ElementaryTypeName","src":"2340:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2339:15:6"},"scope":1279,"src":"2301:79:6","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":854,"nodeType":"Block","src":"3023:27:6","statements":[{"expression":{"id":852,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":807,"src":"3036:9:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":851,"id":853,"nodeType":"Return","src":"3029:16:6"}]},"documentation":{"id":847,"nodeType":"StructuredDocumentation","src":"2384:588:6","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":855,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"2984:8:6","nodeType":"FunctionDefinition","parameters":{"id":848,"nodeType":"ParameterList","parameters":[],"src":"2992:2:6"},"returnParameters":{"id":851,"nodeType":"ParameterList","parameters":[{"constant":false,"id":850,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":855,"src":"3016:5:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":849,"name":"uint8","nodeType":"ElementaryTypeName","src":"3016:5:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"3015:7:6"},"scope":1279,"src":"2975:75:6","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[1373],"body":{"id":864,"nodeType":"Block","src":"3164:30:6","statements":[{"expression":{"id":862,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"3177:12:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":861,"id":863,"nodeType":"Return","src":"3170:19:6"}]},"documentation":{"id":856,"nodeType":"StructuredDocumentation","src":"3054:45:6","text":" @dev See {IERC20-totalSupply}."},"functionSelector":"18160ddd","id":865,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"3111:11:6","nodeType":"FunctionDefinition","overrides":{"id":858,"nodeType":"OverrideSpecifier","overrides":[],"src":"3137:8:6"},"parameters":{"id":857,"nodeType":"ParameterList","parameters":[],"src":"3122:2:6"},"returnParameters":{"id":861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":860,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":865,"src":"3155:7:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":859,"name":"uint256","nodeType":"ElementaryTypeName","src":"3155:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3154:9:6"},"scope":1279,"src":"3102:92:6","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[1381],"body":{"id":878,"nodeType":"Block","src":"3319:36:6","statements":[{"expression":{"baseExpression":{"id":874,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":793,"src":"3332:9:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":876,"indexExpression":{"id":875,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":868,"src":"3342:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3332:18:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":873,"id":877,"nodeType":"Return","src":"3325:25:6"}]},"documentation":{"id":866,"nodeType":"StructuredDocumentation","src":"3198:43:6","text":" @dev See {IERC20-balanceOf}."},"functionSelector":"70a08231","id":879,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"3253:9:6","nodeType":"FunctionDefinition","overrides":{"id":870,"nodeType":"OverrideSpecifier","overrides":[],"src":"3292:8:6"},"parameters":{"id":869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":868,"mutability":"mutable","name":"account","nameLocation":"3271:7:6","nodeType":"VariableDeclaration","scope":879,"src":"3263:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":867,"name":"address","nodeType":"ElementaryTypeName","src":"3263:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3262:17:6"},"returnParameters":{"id":873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":872,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":879,"src":"3310:7:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":871,"name":"uint256","nodeType":"ElementaryTypeName","src":"3310:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3309:9:6"},"scope":1279,"src":"3244:111:6","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[1391],"body":{"id":899,"nodeType":"Block","src":"3632:70:6","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":891,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"3648:10:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":892,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3648:12:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":893,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":882,"src":"3662:9:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":894,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":884,"src":"3673:6:6","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":890,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1100,"src":"3638:9:6","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3638:42:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":896,"nodeType":"ExpressionStatement","src":"3638:42:6"},{"expression":{"hexValue":"74727565","id":897,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3693:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":889,"id":898,"nodeType":"Return","src":"3686:11:6"}]},"documentation":{"id":880,"nodeType":"StructuredDocumentation","src":"3359:178:6","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":900,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"3549:8:6","nodeType":"FunctionDefinition","overrides":{"id":886,"nodeType":"OverrideSpecifier","overrides":[],"src":"3608:8:6"},"parameters":{"id":885,"nodeType":"ParameterList","parameters":[{"constant":false,"id":882,"mutability":"mutable","name":"recipient","nameLocation":"3566:9:6","nodeType":"VariableDeclaration","scope":900,"src":"3558:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":881,"name":"address","nodeType":"ElementaryTypeName","src":"3558:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":884,"mutability":"mutable","name":"amount","nameLocation":"3585:6:6","nodeType":"VariableDeclaration","scope":900,"src":"3577:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":883,"name":"uint256","nodeType":"ElementaryTypeName","src":"3577:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3557:35:6"},"returnParameters":{"id":889,"nodeType":"ParameterList","parameters":[{"constant":false,"id":888,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":900,"src":"3626:4:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":887,"name":"bool","nodeType":"ElementaryTypeName","src":"3626:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3625:6:6"},"scope":1279,"src":"3540:162:6","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[1401],"body":{"id":917,"nodeType":"Block","src":"3862:45:6","statements":[{"expression":{"baseExpression":{"baseExpression":{"id":911,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"3875:11:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":913,"indexExpression":{"id":912,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":903,"src":"3887:5:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3875:18:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":915,"indexExpression":{"id":914,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":905,"src":"3894:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3875:27:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":910,"id":916,"nodeType":"Return","src":"3868:34:6"}]},"documentation":{"id":901,"nodeType":"StructuredDocumentation","src":"3706:43:6","text":" @dev See {IERC20-allowance}."},"functionSelector":"dd62ed3e","id":918,"implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"3761:9:6","nodeType":"FunctionDefinition","overrides":{"id":907,"nodeType":"OverrideSpecifier","overrides":[],"src":"3835:8:6"},"parameters":{"id":906,"nodeType":"ParameterList","parameters":[{"constant":false,"id":903,"mutability":"mutable","name":"owner","nameLocation":"3784:5:6","nodeType":"VariableDeclaration","scope":918,"src":"3776:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":902,"name":"address","nodeType":"ElementaryTypeName","src":"3776:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":905,"mutability":"mutable","name":"spender","nameLocation":"3803:7:6","nodeType":"VariableDeclaration","scope":918,"src":"3795:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":904,"name":"address","nodeType":"ElementaryTypeName","src":"3795:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3770:44:6"},"returnParameters":{"id":910,"nodeType":"ParameterList","parameters":[{"constant":false,"id":909,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":918,"src":"3853:7:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":908,"name":"uint256","nodeType":"ElementaryTypeName","src":"3853:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3852:9:6"},"scope":1279,"src":"3752:155:6","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1411],"body":{"id":938,"nodeType":"Block","src":"4118:67:6","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":930,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"4133:10:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4133:12:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":932,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":921,"src":"4147:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":933,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":923,"src":"4156:6:6","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":929,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1256,"src":"4124:8:6","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4124:39:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":935,"nodeType":"ExpressionStatement","src":"4124:39:6"},{"expression":{"hexValue":"74727565","id":936,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4176:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":928,"id":937,"nodeType":"Return","src":"4169:11:6"}]},"documentation":{"id":919,"nodeType":"StructuredDocumentation","src":"3911:115:6","text":" @dev See {IERC20-approve}.\n Requirements:\n - `spender` cannot be the zero address."},"functionSelector":"095ea7b3","id":939,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"4038:7:6","nodeType":"FunctionDefinition","overrides":{"id":925,"nodeType":"OverrideSpecifier","overrides":[],"src":"4094:8:6"},"parameters":{"id":924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":921,"mutability":"mutable","name":"spender","nameLocation":"4054:7:6","nodeType":"VariableDeclaration","scope":939,"src":"4046:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":920,"name":"address","nodeType":"ElementaryTypeName","src":"4046:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":923,"mutability":"mutable","name":"amount","nameLocation":"4071:6:6","nodeType":"VariableDeclaration","scope":939,"src":"4063:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":922,"name":"uint256","nodeType":"ElementaryTypeName","src":"4063:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4045:33:6"},"returnParameters":{"id":928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":927,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":939,"src":"4112:4:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":926,"name":"bool","nodeType":"ElementaryTypeName","src":"4112:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4111:6:6"},"scope":1279,"src":"4029:156:6","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[1423],"body":{"id":976,"nodeType":"Block","src":"4747:215:6","statements":[{"expression":{"arguments":[{"id":953,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":942,"src":"4763:6:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":954,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":944,"src":"4771:9:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":955,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":946,"src":"4782:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":952,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1100,"src":"4753:9:6","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":956,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4753:36:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":957,"nodeType":"ExpressionStatement","src":"4753:36:6"},{"expression":{"arguments":[{"id":959,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":942,"src":"4811:6:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":960,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"4825:10:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4825:12:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"arguments":[{"id":969,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":946,"src":"4883:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365","id":970,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4891:42:6","typeDescriptions":{"typeIdentifier":"t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330","typeString":"literal_string \"ERC20: transfer amount exceeds allowance\""},"value":"ERC20: transfer amount exceeds allowance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330","typeString":"literal_string \"ERC20: transfer amount exceeds allowance\""}],"expression":{"baseExpression":{"baseExpression":{"id":962,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"4845:11:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":964,"indexExpression":{"id":963,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":942,"src":"4857:6:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4845:19:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":967,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":965,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"4865:10:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4865:12:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4845:33:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2265,"src":"4845:37:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4845:89:6","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":958,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1256,"src":"4795:8:6","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4795:145:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":973,"nodeType":"ExpressionStatement","src":"4795:145:6"},{"expression":{"hexValue":"74727565","id":974,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4953:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":951,"id":975,"nodeType":"Return","src":"4946:11:6"}]},"documentation":{"id":940,"nodeType":"StructuredDocumentation","src":"4189:427:6","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":977,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"4628:12:6","nodeType":"FunctionDefinition","overrides":{"id":948,"nodeType":"OverrideSpecifier","overrides":[],"src":"4723:8:6"},"parameters":{"id":947,"nodeType":"ParameterList","parameters":[{"constant":false,"id":942,"mutability":"mutable","name":"sender","nameLocation":"4654:6:6","nodeType":"VariableDeclaration","scope":977,"src":"4646:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":941,"name":"address","nodeType":"ElementaryTypeName","src":"4646:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":944,"mutability":"mutable","name":"recipient","nameLocation":"4674:9:6","nodeType":"VariableDeclaration","scope":977,"src":"4666:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":943,"name":"address","nodeType":"ElementaryTypeName","src":"4666:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":946,"mutability":"mutable","name":"amount","nameLocation":"4697:6:6","nodeType":"VariableDeclaration","scope":977,"src":"4689:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":945,"name":"uint256","nodeType":"ElementaryTypeName","src":"4689:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4640:67:6"},"returnParameters":{"id":951,"nodeType":"ParameterList","parameters":[{"constant":false,"id":950,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":977,"src":"4741:4:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":949,"name":"bool","nodeType":"ElementaryTypeName","src":"4741:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4740:6:6"},"scope":1279,"src":"4619:343:6","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1004,"nodeType":"Block","src":"5425:111:6","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":988,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"5440:10:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5440:12:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":990,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":980,"src":"5454:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":998,"name":"addedValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":982,"src":"5502:10:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"baseExpression":{"id":991,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"5463:11:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":994,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":992,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"5475:10:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5475:12:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5463:25:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":996,"indexExpression":{"id":995,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":980,"src":"5489:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5463:34:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":2216,"src":"5463:38:6","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":999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5463:50:6","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":987,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1256,"src":"5431:8:6","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5431:83:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1001,"nodeType":"ExpressionStatement","src":"5431:83:6"},{"expression":{"hexValue":"74727565","id":1002,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5527:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":986,"id":1003,"nodeType":"Return","src":"5520:11:6"}]},"documentation":{"id":978,"nodeType":"StructuredDocumentation","src":"4966:362:6","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":1005,"implemented":true,"kind":"function","modifiers":[],"name":"increaseAllowance","nameLocation":"5340:17:6","nodeType":"FunctionDefinition","parameters":{"id":983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":980,"mutability":"mutable","name":"spender","nameLocation":"5366:7:6","nodeType":"VariableDeclaration","scope":1005,"src":"5358:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":979,"name":"address","nodeType":"ElementaryTypeName","src":"5358:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":982,"mutability":"mutable","name":"addedValue","nameLocation":"5383:10:6","nodeType":"VariableDeclaration","scope":1005,"src":"5375:18:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":981,"name":"uint256","nodeType":"ElementaryTypeName","src":"5375:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5357:37:6"},"returnParameters":{"id":986,"nodeType":"ParameterList","parameters":[{"constant":false,"id":985,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1005,"src":"5419:4:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":984,"name":"bool","nodeType":"ElementaryTypeName","src":"5419:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5418:6:6"},"scope":1279,"src":"5331:205:6","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1033,"nodeType":"Block","src":"6104:205:6","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":1016,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"6126:10:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":1017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6126:12:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":1018,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1008,"src":"6146:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":1026,"name":"subtractedValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1010,"src":"6209:15:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f","id":1027,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6234:39:6","typeDescriptions":{"typeIdentifier":"t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8","typeString":"literal_string \"ERC20: decreased allowance below zero\""},"value":"ERC20: decreased allowance below zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8","typeString":"literal_string \"ERC20: decreased allowance below zero\""}],"expression":{"baseExpression":{"baseExpression":{"id":1019,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"6161:11:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":1022,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":1020,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"6173:10:6","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":1021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6173:12:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6161:25:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1024,"indexExpression":{"id":1023,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1008,"src":"6187:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6161:34:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2265,"src":"6161:38:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":1028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6161:120:6","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":1015,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1256,"src":"6110:8:6","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6110:177:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1030,"nodeType":"ExpressionStatement","src":"6110:177:6"},{"expression":{"hexValue":"74727565","id":1031,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6300:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":1014,"id":1032,"nodeType":"Return","src":"6293:11:6"}]},"documentation":{"id":1006,"nodeType":"StructuredDocumentation","src":"5540:450:6","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":1034,"implemented":true,"kind":"function","modifiers":[],"name":"decreaseAllowance","nameLocation":"6002:17:6","nodeType":"FunctionDefinition","parameters":{"id":1011,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1008,"mutability":"mutable","name":"spender","nameLocation":"6033:7:6","nodeType":"VariableDeclaration","scope":1034,"src":"6025:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1007,"name":"address","nodeType":"ElementaryTypeName","src":"6025:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1010,"mutability":"mutable","name":"subtractedValue","nameLocation":"6054:15:6","nodeType":"VariableDeclaration","scope":1034,"src":"6046:23:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1009,"name":"uint256","nodeType":"ElementaryTypeName","src":"6046:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6019:54:6"},"returnParameters":{"id":1014,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1013,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1034,"src":"6098:4:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1012,"name":"bool","nodeType":"ElementaryTypeName","src":"6098:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6097:6:6"},"scope":1279,"src":"5993:316:6","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1099,"nodeType":"Block","src":"6840:417:6","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1045,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1037,"src":"6854:6:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1048,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6872:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1047,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6864:7:6","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1046,"name":"address","nodeType":"ElementaryTypeName","src":"6864:7:6","typeDescriptions":{}}},"id":1049,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6864:10:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6854:20:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373","id":1051,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6876:39:6","typeDescriptions":{"typeIdentifier":"t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea","typeString":"literal_string \"ERC20: transfer from the zero address\""},"value":"ERC20: transfer from the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea","typeString":"literal_string \"ERC20: transfer from the zero address\""}],"id":1044,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6846:7:6","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6846:70:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1053,"nodeType":"ExpressionStatement","src":"6846:70:6"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1055,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1039,"src":"6930:9:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1058,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6951:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1057,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6943:7:6","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1056,"name":"address","nodeType":"ElementaryTypeName","src":"6943:7:6","typeDescriptions":{}}},"id":1059,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6943:10:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6930:23:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a207472616e7366657220746f20746865207a65726f2061646472657373","id":1061,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6955:37:6","typeDescriptions":{"typeIdentifier":"t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f","typeString":"literal_string \"ERC20: transfer to the zero address\""},"value":"ERC20: transfer to the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f","typeString":"literal_string \"ERC20: transfer to the zero address\""}],"id":1054,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6922:7:6","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6922:71:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1063,"nodeType":"ExpressionStatement","src":"6922:71:6"},{"expression":{"arguments":[{"id":1065,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1037,"src":"7021:6:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1066,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1039,"src":"7029:9:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1067,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1041,"src":"7040:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1064,"name":"_beforeTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1278,"src":"7000:20:6","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7000:47:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1069,"nodeType":"ExpressionStatement","src":"7000:47:6"},{"expression":{"id":1080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1070,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":793,"src":"7054:9:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1072,"indexExpression":{"id":1071,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1037,"src":"7064:6:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7054:17:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1077,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1041,"src":"7096:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365","id":1078,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7104:40:6","typeDescriptions":{"typeIdentifier":"t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6","typeString":"literal_string \"ERC20: transfer amount exceeds balance\""},"value":"ERC20: transfer amount exceeds balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6","typeString":"literal_string \"ERC20: transfer amount exceeds balance\""}],"expression":{"baseExpression":{"id":1073,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":793,"src":"7074:9:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1075,"indexExpression":{"id":1074,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1037,"src":"7084:6:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7074:17:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2265,"src":"7074:21:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":1079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7074:71:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7054:91:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1081,"nodeType":"ExpressionStatement","src":"7054:91:6"},{"expression":{"id":1091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1082,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":793,"src":"7151:9:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1084,"indexExpression":{"id":1083,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1039,"src":"7161:9:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7151:20:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1089,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1041,"src":"7199:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":1085,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":793,"src":"7174:9:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1087,"indexExpression":{"id":1086,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1039,"src":"7184:9:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7174:20:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":2216,"src":"7174:24:6","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":1090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7174:32:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7151:55:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1092,"nodeType":"ExpressionStatement","src":"7151:55:6"},{"eventCall":{"arguments":[{"id":1094,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1037,"src":"7226:6:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1095,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1039,"src":"7234:9:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1096,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1041,"src":"7245:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1093,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"7217:8:6","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7217:35:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1098,"nodeType":"EmitStatement","src":"7212:40:6"}]},"documentation":{"id":1035,"nodeType":"StructuredDocumentation","src":"6313:437:6","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":1100,"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"6762:9:6","nodeType":"FunctionDefinition","parameters":{"id":1042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1037,"mutability":"mutable","name":"sender","nameLocation":"6780:6:6","nodeType":"VariableDeclaration","scope":1100,"src":"6772:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1036,"name":"address","nodeType":"ElementaryTypeName","src":"6772:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1039,"mutability":"mutable","name":"recipient","nameLocation":"6796:9:6","nodeType":"VariableDeclaration","scope":1100,"src":"6788:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1038,"name":"address","nodeType":"ElementaryTypeName","src":"6788:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1041,"mutability":"mutable","name":"amount","nameLocation":"6815:6:6","nodeType":"VariableDeclaration","scope":1100,"src":"6807:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1040,"name":"uint256","nodeType":"ElementaryTypeName","src":"6807:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6771:51:6"},"returnParameters":{"id":1043,"nodeType":"ParameterList","parameters":[],"src":"6840:0:6"},"scope":1279,"src":"6753:504:6","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":1154,"nodeType":"Block","src":"7572:283:6","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1109,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1103,"src":"7586:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1112,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7605:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1111,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7597:7:6","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1110,"name":"address","nodeType":"ElementaryTypeName","src":"7597:7:6","typeDescriptions":{}}},"id":1113,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7597:10:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7586:21:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a206d696e7420746f20746865207a65726f2061646472657373","id":1115,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7609:33:6","typeDescriptions":{"typeIdentifier":"t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e","typeString":"literal_string \"ERC20: mint to the zero address\""},"value":"ERC20: mint to the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e","typeString":"literal_string \"ERC20: mint to the zero address\""}],"id":1108,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7578:7:6","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7578:65:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1117,"nodeType":"ExpressionStatement","src":"7578:65:6"},{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":1121,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7679:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1120,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7671:7:6","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1119,"name":"address","nodeType":"ElementaryTypeName","src":"7671:7:6","typeDescriptions":{}}},"id":1122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7671:10:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1123,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1103,"src":"7683:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1124,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1105,"src":"7692:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1118,"name":"_beforeTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1278,"src":"7650:20:6","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1125,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7650:49:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1126,"nodeType":"ExpressionStatement","src":"7650:49:6"},{"expression":{"id":1132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1127,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"7706:12:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1130,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1105,"src":"7738:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1128,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"7721:12:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":2216,"src":"7721:16:6","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":1131,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7721:24:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7706:39:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1133,"nodeType":"ExpressionStatement","src":"7706:39:6"},{"expression":{"id":1143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1134,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":793,"src":"7751:9:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1136,"indexExpression":{"id":1135,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1103,"src":"7761:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7751:18:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1141,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1105,"src":"7795:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":1137,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":793,"src":"7772:9:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1139,"indexExpression":{"id":1138,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1103,"src":"7782:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7772:18:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":2216,"src":"7772:22:6","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":1142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7772:30:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7751:51:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1144,"nodeType":"ExpressionStatement","src":"7751:51:6"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":1148,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7830:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1147,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7822:7:6","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1146,"name":"address","nodeType":"ElementaryTypeName","src":"7822:7:6","typeDescriptions":{}}},"id":1149,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7822:10:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1150,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1103,"src":"7834:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1151,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1105,"src":"7843:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1145,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"7813:8:6","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7813:37:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1153,"nodeType":"EmitStatement","src":"7808:42:6"}]},"documentation":{"id":1101,"nodeType":"StructuredDocumentation","src":"7261:243:6","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":1155,"implemented":true,"kind":"function","modifiers":[],"name":"_mint","nameLocation":"7516:5:6","nodeType":"FunctionDefinition","parameters":{"id":1106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1103,"mutability":"mutable","name":"account","nameLocation":"7530:7:6","nodeType":"VariableDeclaration","scope":1155,"src":"7522:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1102,"name":"address","nodeType":"ElementaryTypeName","src":"7522:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1105,"mutability":"mutable","name":"amount","nameLocation":"7547:6:6","nodeType":"VariableDeclaration","scope":1155,"src":"7539:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1104,"name":"uint256","nodeType":"ElementaryTypeName","src":"7539:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7521:33:6"},"returnParameters":{"id":1107,"nodeType":"ParameterList","parameters":[],"src":"7572:0:6"},"scope":1279,"src":"7507:348:6","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":1210,"nodeType":"Block","src":"8215:323:6","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1164,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1158,"src":"8229:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1167,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8248:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1166,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8240:7:6","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1165,"name":"address","nodeType":"ElementaryTypeName","src":"8240:7:6","typeDescriptions":{}}},"id":1168,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8240:10:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8229:21:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a206275726e2066726f6d20746865207a65726f2061646472657373","id":1170,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8252:35:6","typeDescriptions":{"typeIdentifier":"t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f","typeString":"literal_string \"ERC20: burn from the zero address\""},"value":"ERC20: burn from the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f","typeString":"literal_string \"ERC20: burn from the zero address\""}],"id":1163,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8221:7:6","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8221:67:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1172,"nodeType":"ExpressionStatement","src":"8221:67:6"},{"expression":{"arguments":[{"id":1174,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1158,"src":"8316:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":1177,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8333:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1176,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8325:7:6","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1175,"name":"address","nodeType":"ElementaryTypeName","src":"8325:7:6","typeDescriptions":{}}},"id":1178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8325:10:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1179,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1160,"src":"8337:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1173,"name":"_beforeTokenTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1278,"src":"8295:20:6","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8295:49:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1181,"nodeType":"ExpressionStatement","src":"8295:49:6"},{"expression":{"id":1192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1182,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":793,"src":"8351:9:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1184,"indexExpression":{"id":1183,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1158,"src":"8361:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8351:18:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1189,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1160,"src":"8395:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365","id":1190,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8403:36:6","typeDescriptions":{"typeIdentifier":"t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd","typeString":"literal_string \"ERC20: burn amount exceeds balance\""},"value":"ERC20: burn amount exceeds balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd","typeString":"literal_string \"ERC20: burn amount exceeds balance\""}],"expression":{"baseExpression":{"id":1185,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":793,"src":"8372:9:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1187,"indexExpression":{"id":1186,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1158,"src":"8382:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8372:18:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2265,"src":"8372:22:6","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":1191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8372:68:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8351:89:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1193,"nodeType":"ExpressionStatement","src":"8351:89:6"},{"expression":{"id":1199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1194,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"8446:12:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":1197,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1160,"src":"8478:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1195,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":801,"src":"8461:12:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2239,"src":"8461:16:6","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":1198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8461:24:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8446:39:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1200,"nodeType":"ExpressionStatement","src":"8446:39:6"},{"eventCall":{"arguments":[{"id":1202,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1158,"src":"8505:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":1205,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8522:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1204,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8514:7:6","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1203,"name":"address","nodeType":"ElementaryTypeName","src":"8514:7:6","typeDescriptions":{}}},"id":1206,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8514:10:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1207,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1160,"src":"8526:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1201,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"8496:8:6","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8496:37:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1209,"nodeType":"EmitStatement","src":"8491:42:6"}]},"documentation":{"id":1156,"nodeType":"StructuredDocumentation","src":"7859:288:6","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":1211,"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"8159:5:6","nodeType":"FunctionDefinition","parameters":{"id":1161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1158,"mutability":"mutable","name":"account","nameLocation":"8173:7:6","nodeType":"VariableDeclaration","scope":1211,"src":"8165:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1157,"name":"address","nodeType":"ElementaryTypeName","src":"8165:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1160,"mutability":"mutable","name":"amount","nameLocation":"8190:6:6","nodeType":"VariableDeclaration","scope":1211,"src":"8182:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1159,"name":"uint256","nodeType":"ElementaryTypeName","src":"8182:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8164:33:6"},"returnParameters":{"id":1162,"nodeType":"ParameterList","parameters":[],"src":"8215:0:6"},"scope":1279,"src":"8150:388:6","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":1255,"nodeType":"Block","src":"9018:239:6","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1222,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1214,"src":"9032:5:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1225,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9049:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1224,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9041:7:6","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1223,"name":"address","nodeType":"ElementaryTypeName","src":"9041:7:6","typeDescriptions":{}}},"id":1226,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9041:10:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9032:19:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373","id":1228,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9053:38:6","typeDescriptions":{"typeIdentifier":"t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208","typeString":"literal_string \"ERC20: approve from the zero address\""},"value":"ERC20: approve from the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208","typeString":"literal_string \"ERC20: approve from the zero address\""}],"id":1221,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9024:7:6","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9024:68:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1230,"nodeType":"ExpressionStatement","src":"9024:68:6"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1232,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1216,"src":"9106:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1235,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9125:1:6","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":1234,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9117:7:6","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1233,"name":"address","nodeType":"ElementaryTypeName","src":"9117:7:6","typeDescriptions":{}}},"id":1236,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9117:10:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9106:21:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"45524332303a20617070726f766520746f20746865207a65726f2061646472657373","id":1238,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9129:36:6","typeDescriptions":{"typeIdentifier":"t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029","typeString":"literal_string \"ERC20: approve to the zero address\""},"value":"ERC20: approve to the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029","typeString":"literal_string \"ERC20: approve to the zero address\""}],"id":1231,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9098:7:6","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9098:68:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1240,"nodeType":"ExpressionStatement","src":"9098:68:6"},{"expression":{"id":1247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":1241,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":799,"src":"9173:11:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":1244,"indexExpression":{"id":1242,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1214,"src":"9185:5:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9173:18:6","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":1245,"indexExpression":{"id":1243,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1216,"src":"9192:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9173:27:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1246,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1218,"src":"9203:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9173:36:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1248,"nodeType":"ExpressionStatement","src":"9173:36:6"},{"eventCall":{"arguments":[{"id":1250,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1214,"src":"9229:5:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1251,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1216,"src":"9236:7:6","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1252,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1218,"src":"9245:6:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1249,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1441,"src":"9220:8:6","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":1253,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9220:32:6","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1254,"nodeType":"EmitStatement","src":"9215:37:6"}]},"documentation":{"id":1212,"nodeType":"StructuredDocumentation","src":"8542:390:6","text":" @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.\n This is 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":1256,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"8944:8:6","nodeType":"FunctionDefinition","parameters":{"id":1219,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1214,"mutability":"mutable","name":"owner","nameLocation":"8961:5:6","nodeType":"VariableDeclaration","scope":1256,"src":"8953:13:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1213,"name":"address","nodeType":"ElementaryTypeName","src":"8953:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1216,"mutability":"mutable","name":"spender","nameLocation":"8976:7:6","nodeType":"VariableDeclaration","scope":1256,"src":"8968:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1215,"name":"address","nodeType":"ElementaryTypeName","src":"8968:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1218,"mutability":"mutable","name":"amount","nameLocation":"8993:6:6","nodeType":"VariableDeclaration","scope":1256,"src":"8985:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1217,"name":"uint256","nodeType":"ElementaryTypeName","src":"8985:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8952:48:6"},"returnParameters":{"id":1220,"nodeType":"ParameterList","parameters":[],"src":"9018:0:6"},"scope":1279,"src":"8935:322:6","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":1266,"nodeType":"Block","src":"9614:32:6","statements":[{"expression":{"id":1264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1262,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":807,"src":"9620:9:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1263,"name":"decimals_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1259,"src":"9632:9:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"9620:21:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":1265,"nodeType":"ExpressionStatement","src":"9620:21:6"}]},"documentation":{"id":1257,"nodeType":"StructuredDocumentation","src":"9261:300:6","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":1267,"implemented":true,"kind":"function","modifiers":[],"name":"_setupDecimals","nameLocation":"9573:14:6","nodeType":"FunctionDefinition","parameters":{"id":1260,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1259,"mutability":"mutable","name":"decimals_","nameLocation":"9594:9:6","nodeType":"VariableDeclaration","scope":1267,"src":"9588:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1258,"name":"uint8","nodeType":"ElementaryTypeName","src":"9588:5:6","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"9587:17:6"},"returnParameters":{"id":1261,"nodeType":"ParameterList","parameters":[],"src":"9614:0:6"},"scope":1279,"src":"9564:82:6","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":1277,"nodeType":"Block","src":"10292:2:6","statements":[]},"documentation":{"id":1268,"nodeType":"StructuredDocumentation","src":"9650:550:6","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":1278,"implemented":true,"kind":"function","modifiers":[],"name":"_beforeTokenTransfer","nameLocation":"10212:20:6","nodeType":"FunctionDefinition","parameters":{"id":1275,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1270,"mutability":"mutable","name":"from","nameLocation":"10241:4:6","nodeType":"VariableDeclaration","scope":1278,"src":"10233:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1269,"name":"address","nodeType":"ElementaryTypeName","src":"10233:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1272,"mutability":"mutable","name":"to","nameLocation":"10255:2:6","nodeType":"VariableDeclaration","scope":1278,"src":"10247:10:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1271,"name":"address","nodeType":"ElementaryTypeName","src":"10247:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1274,"mutability":"mutable","name":"amount","nameLocation":"10267:6:6","nodeType":"VariableDeclaration","scope":1278,"src":"10259:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1273,"name":"uint256","nodeType":"ElementaryTypeName","src":"10259:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10232:42:6"},"returnParameters":{"id":1276,"nodeType":"ParameterList","parameters":[],"src":"10292:0:6"},"scope":1279,"src":"10203:91:6","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":1280,"src":"1318:8978:6","usedErrors":[]}],"src":"33:10264:6"},"id":6},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol","exportedSymbols":{"IAccessControl":[1352]},"id":1353,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1281,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"33:23:7"},{"abstract":false,"baseContracts":[],"canonicalName":"IAccessControl","contractDependencies":[],"contractKind":"interface","documentation":{"id":1282,"nodeType":"StructuredDocumentation","src":"58:89:7","text":" @dev External interface of AccessControl declared to support ERC165 detection."},"fullyImplemented":false,"id":1352,"linearizedBaseContracts":[1352],"name":"IAccessControl","nameLocation":"158:14:7","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1283,"nodeType":"StructuredDocumentation","src":"177:278:7","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":1291,"name":"RoleAdminChanged","nameLocation":"464:16:7","nodeType":"EventDefinition","parameters":{"id":1290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1285,"indexed":true,"mutability":"mutable","name":"role","nameLocation":"502:4:7","nodeType":"VariableDeclaration","scope":1291,"src":"486:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1284,"name":"bytes32","nodeType":"ElementaryTypeName","src":"486:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1287,"indexed":true,"mutability":"mutable","name":"previousAdminRole","nameLocation":"528:17:7","nodeType":"VariableDeclaration","scope":1291,"src":"512:33:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1286,"name":"bytes32","nodeType":"ElementaryTypeName","src":"512:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1289,"indexed":true,"mutability":"mutable","name":"newAdminRole","nameLocation":"567:12:7","nodeType":"VariableDeclaration","scope":1291,"src":"551:28:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1288,"name":"bytes32","nodeType":"ElementaryTypeName","src":"551:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"480:103:7"},"src":"458:126:7"},{"anonymous":false,"documentation":{"id":1292,"nodeType":"StructuredDocumentation","src":"588:202:7","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 {AccessControl-_setupRole}."},"id":1300,"name":"RoleGranted","nameLocation":"799:11:7","nodeType":"EventDefinition","parameters":{"id":1299,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1294,"indexed":true,"mutability":"mutable","name":"role","nameLocation":"827:4:7","nodeType":"VariableDeclaration","scope":1300,"src":"811:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1293,"name":"bytes32","nodeType":"ElementaryTypeName","src":"811:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1296,"indexed":true,"mutability":"mutable","name":"account","nameLocation":"849:7:7","nodeType":"VariableDeclaration","scope":1300,"src":"833:23:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1295,"name":"address","nodeType":"ElementaryTypeName","src":"833:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1298,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"874:6:7","nodeType":"VariableDeclaration","scope":1300,"src":"858:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1297,"name":"address","nodeType":"ElementaryTypeName","src":"858:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"810:71:7"},"src":"793:89:7"},{"anonymous":false,"documentation":{"id":1301,"nodeType":"StructuredDocumentation","src":"886:263:7","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":1309,"name":"RoleRevoked","nameLocation":"1158:11:7","nodeType":"EventDefinition","parameters":{"id":1308,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1303,"indexed":true,"mutability":"mutable","name":"role","nameLocation":"1186:4:7","nodeType":"VariableDeclaration","scope":1309,"src":"1170:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1302,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1170:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1305,"indexed":true,"mutability":"mutable","name":"account","nameLocation":"1208:7:7","nodeType":"VariableDeclaration","scope":1309,"src":"1192:23:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1304,"name":"address","nodeType":"ElementaryTypeName","src":"1192:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1307,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"1233:6:7","nodeType":"VariableDeclaration","scope":1309,"src":"1217:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1306,"name":"address","nodeType":"ElementaryTypeName","src":"1217:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1169:71:7"},"src":"1152:89:7"},{"documentation":{"id":1310,"nodeType":"StructuredDocumentation","src":"1245:72:7","text":" @dev Returns `true` if `account` has been granted `role`."},"functionSelector":"91d14854","id":1319,"implemented":false,"kind":"function","modifiers":[],"name":"hasRole","nameLocation":"1329:7:7","nodeType":"FunctionDefinition","parameters":{"id":1315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1312,"mutability":"mutable","name":"role","nameLocation":"1345:4:7","nodeType":"VariableDeclaration","scope":1319,"src":"1337:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1311,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1337:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1314,"mutability":"mutable","name":"account","nameLocation":"1359:7:7","nodeType":"VariableDeclaration","scope":1319,"src":"1351:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1313,"name":"address","nodeType":"ElementaryTypeName","src":"1351:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1336:31:7"},"returnParameters":{"id":1318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1317,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1319,"src":"1391:4:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1316,"name":"bool","nodeType":"ElementaryTypeName","src":"1391:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1390:6:7"},"scope":1352,"src":"1320:77:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1320,"nodeType":"StructuredDocumentation","src":"1401:174:7","text":" @dev Returns the admin role that controls `role`. See {grantRole} and\n {revokeRole}.\n To change a role's admin, use {AccessControl-_setRoleAdmin}."},"functionSelector":"248a9ca3","id":1327,"implemented":false,"kind":"function","modifiers":[],"name":"getRoleAdmin","nameLocation":"1587:12:7","nodeType":"FunctionDefinition","parameters":{"id":1323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1322,"mutability":"mutable","name":"role","nameLocation":"1608:4:7","nodeType":"VariableDeclaration","scope":1327,"src":"1600:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1321,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1600:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1599:14:7"},"returnParameters":{"id":1326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1325,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1327,"src":"1637:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1324,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1637:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1636:9:7"},"scope":1352,"src":"1578:68:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1328,"nodeType":"StructuredDocumentation","src":"1650:221:7","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":1335,"implemented":false,"kind":"function","modifiers":[],"name":"grantRole","nameLocation":"1883:9:7","nodeType":"FunctionDefinition","parameters":{"id":1333,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1330,"mutability":"mutable","name":"role","nameLocation":"1901:4:7","nodeType":"VariableDeclaration","scope":1335,"src":"1893:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1329,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1893:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1332,"mutability":"mutable","name":"account","nameLocation":"1915:7:7","nodeType":"VariableDeclaration","scope":1335,"src":"1907:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1331,"name":"address","nodeType":"ElementaryTypeName","src":"1907:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1892:31:7"},"returnParameters":{"id":1334,"nodeType":"ParameterList","parameters":[],"src":"1932:0:7"},"scope":1352,"src":"1874:59:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1336,"nodeType":"StructuredDocumentation","src":"1937:207:7","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":1343,"implemented":false,"kind":"function","modifiers":[],"name":"revokeRole","nameLocation":"2156:10:7","nodeType":"FunctionDefinition","parameters":{"id":1341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1338,"mutability":"mutable","name":"role","nameLocation":"2175:4:7","nodeType":"VariableDeclaration","scope":1343,"src":"2167:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1337,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2167:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1340,"mutability":"mutable","name":"account","nameLocation":"2189:7:7","nodeType":"VariableDeclaration","scope":1343,"src":"2181:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1339,"name":"address","nodeType":"ElementaryTypeName","src":"2181:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2166:31:7"},"returnParameters":{"id":1342,"nodeType":"ParameterList","parameters":[],"src":"2206:0:7"},"scope":1352,"src":"2147:60:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1344,"nodeType":"StructuredDocumentation","src":"2211:454:7","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":1351,"implemented":false,"kind":"function","modifiers":[],"name":"renounceRole","nameLocation":"2677:12:7","nodeType":"FunctionDefinition","parameters":{"id":1349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1346,"mutability":"mutable","name":"role","nameLocation":"2698:4:7","nodeType":"VariableDeclaration","scope":1351,"src":"2690:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1345,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2690:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1348,"mutability":"mutable","name":"account","nameLocation":"2712:7:7","nodeType":"VariableDeclaration","scope":1351,"src":"2704:15:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1347,"name":"address","nodeType":"ElementaryTypeName","src":"2704:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2689:31:7"},"returnParameters":{"id":1350,"nodeType":"ParameterList","parameters":[],"src":"2729:0:7"},"scope":1352,"src":"2668:62:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1353,"src":"148:2584:7","usedErrors":[]}],"src":"33:2700:7"},"id":7},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC165.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC165.sol","exportedSymbols":{"IERC165":[1364]},"id":1365,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1354,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"33:23:8"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC165","contractDependencies":[],"contractKind":"interface","documentation":{"id":1355,"nodeType":"StructuredDocumentation","src":"58:279:8","text":" @dev Interface of the ERC165 standard, as defined in the\n https://eips.ethereum.org/EIPS/eip-165[EIP].\n Implementers can declare support of contract interfaces, which can then be\n queried by others ({ERC165Checker}).\n For an implementation, see {ERC165}."},"fullyImplemented":false,"id":1364,"linearizedBaseContracts":[1364],"name":"IERC165","nameLocation":"348:7:8","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1356,"nodeType":"StructuredDocumentation","src":"360:326:8","text":" @dev Returns true if this contract implements the interface defined by\n `interfaceId`. See the corresponding\n https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n to learn more about how these ids are created.\n This function call must use less than 30 000 gas."},"functionSelector":"01ffc9a7","id":1363,"implemented":false,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"698:17:8","nodeType":"FunctionDefinition","parameters":{"id":1359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1358,"mutability":"mutable","name":"interfaceId","nameLocation":"723:11:8","nodeType":"VariableDeclaration","scope":1363,"src":"716:18:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":1357,"name":"bytes4","nodeType":"ElementaryTypeName","src":"716:6:8","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"715:20:8"},"returnParameters":{"id":1362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1361,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1363,"src":"759:4:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1360,"name":"bool","nodeType":"ElementaryTypeName","src":"759:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"758:6:8"},"scope":1364,"src":"689:76:8","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1365,"src":"338:429:8","usedErrors":[]}],"src":"33:735:8"},"id":8},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","exportedSymbols":{"IERC20":[1442]},"id":1443,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":1366,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:9"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20","contractDependencies":[],"contractKind":"interface","documentation":{"id":1367,"nodeType":"StructuredDocumentation","src":"62:70:9","text":" @dev Interface of the ERC20 standard as defined in the EIP."},"fullyImplemented":false,"id":1442,"linearizedBaseContracts":[1442],"name":"IERC20","nameLocation":"143:6:9","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1368,"nodeType":"StructuredDocumentation","src":"154:62:9","text":" @dev Returns the amount of tokens in existence."},"functionSelector":"18160ddd","id":1373,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"228:11:9","nodeType":"FunctionDefinition","parameters":{"id":1369,"nodeType":"ParameterList","parameters":[],"src":"239:2:9"},"returnParameters":{"id":1372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1371,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1373,"src":"265:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1370,"name":"uint256","nodeType":"ElementaryTypeName","src":"265:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"264:9:9"},"scope":1442,"src":"219:55:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1374,"nodeType":"StructuredDocumentation","src":"278:68:9","text":" @dev Returns the amount of tokens owned by `account`."},"functionSelector":"70a08231","id":1381,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"358:9:9","nodeType":"FunctionDefinition","parameters":{"id":1377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1376,"mutability":"mutable","name":"account","nameLocation":"376:7:9","nodeType":"VariableDeclaration","scope":1381,"src":"368:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1375,"name":"address","nodeType":"ElementaryTypeName","src":"368:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"367:17:9"},"returnParameters":{"id":1380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1379,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1381,"src":"408:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1378,"name":"uint256","nodeType":"ElementaryTypeName","src":"408:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"407:9:9"},"scope":1442,"src":"349:68:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1382,"nodeType":"StructuredDocumentation","src":"421:197:9","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":1391,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"630:8:9","nodeType":"FunctionDefinition","parameters":{"id":1387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1384,"mutability":"mutable","name":"recipient","nameLocation":"647:9:9","nodeType":"VariableDeclaration","scope":1391,"src":"639:17:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1383,"name":"address","nodeType":"ElementaryTypeName","src":"639:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1386,"mutability":"mutable","name":"amount","nameLocation":"666:6:9","nodeType":"VariableDeclaration","scope":1391,"src":"658:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1385,"name":"uint256","nodeType":"ElementaryTypeName","src":"658:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"638:35:9"},"returnParameters":{"id":1390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1389,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1391,"src":"692:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1388,"name":"bool","nodeType":"ElementaryTypeName","src":"692:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"691:6:9"},"scope":1442,"src":"621:77:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1392,"nodeType":"StructuredDocumentation","src":"702:252:9","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":1401,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"966:9:9","nodeType":"FunctionDefinition","parameters":{"id":1397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1394,"mutability":"mutable","name":"owner","nameLocation":"984:5:9","nodeType":"VariableDeclaration","scope":1401,"src":"976:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1393,"name":"address","nodeType":"ElementaryTypeName","src":"976:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1396,"mutability":"mutable","name":"spender","nameLocation":"999:7:9","nodeType":"VariableDeclaration","scope":1401,"src":"991:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1395,"name":"address","nodeType":"ElementaryTypeName","src":"991:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"975:32:9"},"returnParameters":{"id":1400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1399,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1401,"src":"1031:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1398,"name":"uint256","nodeType":"ElementaryTypeName","src":"1031:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1030:9:9"},"scope":1442,"src":"957:83:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1402,"nodeType":"StructuredDocumentation","src":"1044:616:9","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":1411,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"1672:7:9","nodeType":"FunctionDefinition","parameters":{"id":1407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1404,"mutability":"mutable","name":"spender","nameLocation":"1688:7:9","nodeType":"VariableDeclaration","scope":1411,"src":"1680:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1403,"name":"address","nodeType":"ElementaryTypeName","src":"1680:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1406,"mutability":"mutable","name":"amount","nameLocation":"1705:6:9","nodeType":"VariableDeclaration","scope":1411,"src":"1697:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1405,"name":"uint256","nodeType":"ElementaryTypeName","src":"1697:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1679:33:9"},"returnParameters":{"id":1410,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1409,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1411,"src":"1731:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1408,"name":"bool","nodeType":"ElementaryTypeName","src":"1731:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1730:6:9"},"scope":1442,"src":"1663:74:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1412,"nodeType":"StructuredDocumentation","src":"1741:280:9","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":1423,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"2033:12:9","nodeType":"FunctionDefinition","parameters":{"id":1419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1414,"mutability":"mutable","name":"sender","nameLocation":"2054:6:9","nodeType":"VariableDeclaration","scope":1423,"src":"2046:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1413,"name":"address","nodeType":"ElementaryTypeName","src":"2046:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1416,"mutability":"mutable","name":"recipient","nameLocation":"2070:9:9","nodeType":"VariableDeclaration","scope":1423,"src":"2062:17:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1415,"name":"address","nodeType":"ElementaryTypeName","src":"2062:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1418,"mutability":"mutable","name":"amount","nameLocation":"2089:6:9","nodeType":"VariableDeclaration","scope":1423,"src":"2081:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1417,"name":"uint256","nodeType":"ElementaryTypeName","src":"2081:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2045:51:9"},"returnParameters":{"id":1422,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1421,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1423,"src":"2115:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1420,"name":"bool","nodeType":"ElementaryTypeName","src":"2115:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2114:6:9"},"scope":1442,"src":"2024:97:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"anonymous":false,"documentation":{"id":1424,"nodeType":"StructuredDocumentation","src":"2125:148:9","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"id":1432,"name":"Transfer","nameLocation":"2282:8:9","nodeType":"EventDefinition","parameters":{"id":1431,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1426,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"2307:4:9","nodeType":"VariableDeclaration","scope":1432,"src":"2291:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1425,"name":"address","nodeType":"ElementaryTypeName","src":"2291:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1428,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"2329:2:9","nodeType":"VariableDeclaration","scope":1432,"src":"2313:18:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1427,"name":"address","nodeType":"ElementaryTypeName","src":"2313:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1430,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"2341:5:9","nodeType":"VariableDeclaration","scope":1432,"src":"2333:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1429,"name":"uint256","nodeType":"ElementaryTypeName","src":"2333:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2290:57:9"},"src":"2276:72:9"},{"anonymous":false,"documentation":{"id":1433,"nodeType":"StructuredDocumentation","src":"2352:142:9","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":1441,"name":"Approval","nameLocation":"2503:8:9","nodeType":"EventDefinition","parameters":{"id":1440,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1435,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"2528:5:9","nodeType":"VariableDeclaration","scope":1441,"src":"2512:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1434,"name":"address","nodeType":"ElementaryTypeName","src":"2512:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1437,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"2551:7:9","nodeType":"VariableDeclaration","scope":1441,"src":"2535:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1436,"name":"address","nodeType":"ElementaryTypeName","src":"2535:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1439,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"2568:5:9","nodeType":"VariableDeclaration","scope":1441,"src":"2560:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1438,"name":"uint256","nodeType":"ElementaryTypeName","src":"2560:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2511:63:9"},"src":"2497:78:9"}],"scope":1443,"src":"133:2444:9","usedErrors":[]}],"src":"37:2541:9"},"id":9},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","exportedSymbols":{"IERC20":[1442],"IERC20Detailed":[1464]},"id":1465,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":1444,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:10"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"./IERC20.sol","id":1446,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1465,"sourceUnit":1443,"src":"62:36:10","symbolAliases":[{"foreign":{"id":1445,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1447,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"128:6:10"},"id":1448,"nodeType":"InheritanceSpecifier","src":"128:6:10"}],"canonicalName":"IERC20Detailed","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":1464,"linearizedBaseContracts":[1464,1442],"name":"IERC20Detailed","nameLocation":"110:14:10","nodeType":"ContractDefinition","nodes":[{"functionSelector":"06fdde03","id":1453,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"148:4:10","nodeType":"FunctionDefinition","parameters":{"id":1449,"nodeType":"ParameterList","parameters":[],"src":"152:2:10"},"returnParameters":{"id":1452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1451,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1453,"src":"178:13:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1450,"name":"string","nodeType":"ElementaryTypeName","src":"178:6:10","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"177:15:10"},"scope":1464,"src":"139:54:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"95d89b41","id":1458,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"206:6:10","nodeType":"FunctionDefinition","parameters":{"id":1454,"nodeType":"ParameterList","parameters":[],"src":"212:2:10"},"returnParameters":{"id":1457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1456,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1458,"src":"238:13:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1455,"name":"string","nodeType":"ElementaryTypeName","src":"238:6:10","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"237:15:10"},"scope":1464,"src":"197:56:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"313ce567","id":1463,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"266:8:10","nodeType":"FunctionDefinition","parameters":{"id":1459,"nodeType":"ParameterList","parameters":[],"src":"274:2:10"},"returnParameters":{"id":1462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1461,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1463,"src":"300:5:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1460,"name":"uint8","nodeType":"ElementaryTypeName","src":"300:5:10","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"299:7:10"},"scope":1464,"src":"257:50:10","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1465,"src":"100:209:10","usedErrors":[]}],"src":"37:273:10"},"id":10},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol","exportedSymbols":{"Context":[748],"Ownable":[1573]},"id":1574,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1466,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"33:23:11"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol","file":"./Context.sol","id":1467,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1574,"sourceUnit":749,"src":"58:23:11","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1469,"name":"Context","nodeType":"IdentifierPath","referencedDeclaration":748,"src":"598:7:11"},"id":1470,"nodeType":"InheritanceSpecifier","src":"598:7:11"}],"canonicalName":"Ownable","contractDependencies":[],"contractKind":"contract","documentation":{"id":1468,"nodeType":"StructuredDocumentation","src":"83:494:11","text":" @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n By default, the owner account will be the one that deploys the contract. This\n can later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner."},"fullyImplemented":true,"id":1573,"linearizedBaseContracts":[1573,748],"name":"Ownable","nameLocation":"587:7:11","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":1472,"mutability":"mutable","name":"_owner","nameLocation":"626:6:11","nodeType":"VariableDeclaration","scope":1573,"src":"610:22:11","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1471,"name":"address","nodeType":"ElementaryTypeName","src":"610:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"anonymous":false,"id":1478,"name":"OwnershipTransferred","nameLocation":"643:20:11","nodeType":"EventDefinition","parameters":{"id":1477,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1474,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"680:13:11","nodeType":"VariableDeclaration","scope":1478,"src":"664:29:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1473,"name":"address","nodeType":"ElementaryTypeName","src":"664:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1476,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"711:8:11","nodeType":"VariableDeclaration","scope":1478,"src":"695:24:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1475,"name":"address","nodeType":"ElementaryTypeName","src":"695:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"663:57:11"},"src":"637:84:11"},{"body":{"id":1499,"nodeType":"Block","src":"829:121:11","statements":[{"assignments":[1483],"declarations":[{"constant":false,"id":1483,"mutability":"mutable","name":"msgSender","nameLocation":"843:9:11","nodeType":"VariableDeclaration","scope":1499,"src":"835:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1482,"name":"address","nodeType":"ElementaryTypeName","src":"835:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":1486,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":1484,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"855:10:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":1485,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"855:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"VariableDeclarationStatement","src":"835:32:11"},{"expression":{"id":1489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1487,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1472,"src":"873:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1488,"name":"msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1483,"src":"882:9:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"873:18:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1490,"nodeType":"ExpressionStatement","src":"873:18:11"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":1494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"931:1:11","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":1493,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"923:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1492,"name":"address","nodeType":"ElementaryTypeName","src":"923:7:11","typeDescriptions":{}}},"id":1495,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"923:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1496,"name":"msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1483,"src":"935:9:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1491,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1478,"src":"902:20:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":1497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"902:43:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1498,"nodeType":"EmitStatement","src":"897:48:11"}]},"documentation":{"id":1479,"nodeType":"StructuredDocumentation","src":"725:87:11","text":" @dev Initializes the contract setting the deployer as the initial owner."},"id":1500,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":1480,"nodeType":"ParameterList","parameters":[],"src":"826:2:11"},"returnParameters":{"id":1481,"nodeType":"ParameterList","parameters":[],"src":"829:0:11"},"scope":1573,"src":"815:135:11","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":1508,"nodeType":"Block","src":"1065:24:11","statements":[{"expression":{"id":1506,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1472,"src":"1078:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":1505,"id":1507,"nodeType":"Return","src":"1071:13:11"}]},"documentation":{"id":1501,"nodeType":"StructuredDocumentation","src":"954:61:11","text":" @dev Returns the address of the current owner."},"functionSelector":"8da5cb5b","id":1509,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nameLocation":"1027:5:11","nodeType":"FunctionDefinition","parameters":{"id":1502,"nodeType":"ParameterList","parameters":[],"src":"1032:2:11"},"returnParameters":{"id":1505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1504,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1509,"src":"1056:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1503,"name":"address","nodeType":"ElementaryTypeName","src":"1056:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1055:9:11"},"scope":1573,"src":"1018:71:11","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":1521,"nodeType":"Block","src":"1190:85:11","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1513,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1472,"src":"1204:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":1514,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"1214:10:11","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":1515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1214:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1204:22:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","id":1517,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1228:34:11","typeDescriptions":{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""},"value":"Ownable: caller is not the owner"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""}],"id":1512,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1196:7:11","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1518,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1196:67:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1519,"nodeType":"ExpressionStatement","src":"1196:67:11"},{"id":1520,"nodeType":"PlaceholderStatement","src":"1269:1:11"}]},"documentation":{"id":1510,"nodeType":"StructuredDocumentation","src":"1093:73:11","text":" @dev Throws if called by any account other than the owner."},"id":1522,"name":"onlyOwner","nameLocation":"1178:9:11","nodeType":"ModifierDefinition","parameters":{"id":1511,"nodeType":"ParameterList","parameters":[],"src":"1187:2:11"},"src":"1169:106:11","virtual":false,"visibility":"internal"},{"body":{"id":1543,"nodeType":"Block","src":"1655:81:11","statements":[{"eventCall":{"arguments":[{"id":1529,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1472,"src":"1687:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":1532,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1703:1:11","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":1531,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1695:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1530,"name":"address","nodeType":"ElementaryTypeName","src":"1695:7:11","typeDescriptions":{}}},"id":1533,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1695:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1528,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1478,"src":"1666:20:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":1534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1666:40:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1535,"nodeType":"EmitStatement","src":"1661:45:11"},{"expression":{"id":1541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1536,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1472,"src":"1712:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":1539,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1729:1:11","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":1538,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1721:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1537,"name":"address","nodeType":"ElementaryTypeName","src":"1721:7:11","typeDescriptions":{}}},"id":1540,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1721:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1712:19:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1542,"nodeType":"ExpressionStatement","src":"1712:19:11"}]},"documentation":{"id":1523,"nodeType":"StructuredDocumentation","src":"1279:319:11","text":" @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions anymore. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby removing any functionality that is only available to the owner."},"functionSelector":"715018a6","id":1544,"implemented":true,"kind":"function","modifiers":[{"id":1526,"kind":"modifierInvocation","modifierName":{"id":1525,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"1645:9:11"},"nodeType":"ModifierInvocation","src":"1645:9:11"}],"name":"renounceOwnership","nameLocation":"1610:17:11","nodeType":"FunctionDefinition","parameters":{"id":1524,"nodeType":"ParameterList","parameters":[],"src":"1627:2:11"},"returnParameters":{"id":1527,"nodeType":"ParameterList","parameters":[],"src":"1655:0:11"},"scope":1573,"src":"1601:135:11","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":1571,"nodeType":"Block","src":"1945:156:11","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":1558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1553,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1547,"src":"1959:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":1556,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1979:1:11","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":1555,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1971:7:11","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":1554,"name":"address","nodeType":"ElementaryTypeName","src":"1971:7:11","typeDescriptions":{}}},"id":1557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1971:10:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1959:22:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373","id":1559,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1983:40:11","typeDescriptions":{"typeIdentifier":"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","typeString":"literal_string \"Ownable: new owner is the zero address\""},"value":"Ownable: new owner is the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","typeString":"literal_string \"Ownable: new owner is the zero address\""}],"id":1552,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1951:7:11","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1951:73:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1561,"nodeType":"ExpressionStatement","src":"1951:73:11"},{"eventCall":{"arguments":[{"id":1563,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1472,"src":"2056:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1564,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1547,"src":"2064:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1562,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1478,"src":"2035:20:11","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":1565,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2035:38:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1566,"nodeType":"EmitStatement","src":"2030:43:11"},{"expression":{"id":1569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1567,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1472,"src":"2079:6:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":1568,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1547,"src":"2088:8:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2079:17:11","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1570,"nodeType":"ExpressionStatement","src":"2079:17:11"}]},"documentation":{"id":1545,"nodeType":"StructuredDocumentation","src":"1740:132:11","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":1572,"implemented":true,"kind":"function","modifiers":[{"id":1550,"kind":"modifierInvocation","modifierName":{"id":1549,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"1935:9:11"},"nodeType":"ModifierInvocation","src":"1935:9:11"}],"name":"transferOwnership","nameLocation":"1884:17:11","nodeType":"FunctionDefinition","parameters":{"id":1548,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1547,"mutability":"mutable","name":"newOwner","nameLocation":"1910:8:11","nodeType":"VariableDeclaration","scope":1572,"src":"1902:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1546,"name":"address","nodeType":"ElementaryTypeName","src":"1902:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1901:18:11"},"returnParameters":{"id":1551,"nodeType":"ParameterList","parameters":[],"src":"1945:0:11"},"scope":1573,"src":"1875:226:11","stateMutability":"nonpayable","virtual":true,"visibility":"public"}],"scope":1574,"src":"578:1525:11","usedErrors":[]}],"src":"33:2071:11"},"id":11},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol","exportedSymbols":{"SafeCast":[1966]},"id":1967,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1575,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"91:23:12"},{"abstract":false,"baseContracts":[],"canonicalName":"SafeCast","contractDependencies":[],"contractKind":"library","documentation":{"id":1576,"nodeType":"StructuredDocumentation","src":"116:709:12","text":" @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n checks.\n Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n easily result in undesired exploitation or bugs, since developers usually\n assume that overflows raise errors. `SafeCast` restores this intuition by\n reverting the transaction when such an 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.\n Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\n all math on `uint256` and `int256` and then downcasting."},"fullyImplemented":true,"id":1966,"linearizedBaseContracts":[1966],"name":"SafeCast","nameLocation":"834:8:12","nodeType":"ContractDefinition","nodes":[{"body":{"id":1600,"nodeType":"Block","src":"1178:116:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1585,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1579,"src":"1192:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1588,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1206:7:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":1587,"name":"uint224","nodeType":"ElementaryTypeName","src":"1206:7:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"}],"id":1586,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1201:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1589,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1201:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint224","typeString":"type(uint224)"}},"id":1590,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"1201:17:12","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"1192:26:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e203232342062697473","id":1592,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1220:41:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_9d2acf551b2466898443b9bc3a403a4d86037386bc5a8960c1bbb0f204e69b79","typeString":"literal_string \"SafeCast: value doesn't fit in 224 bits\""},"value":"SafeCast: value doesn't fit in 224 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9d2acf551b2466898443b9bc3a403a4d86037386bc5a8960c1bbb0f204e69b79","typeString":"literal_string \"SafeCast: value doesn't fit in 224 bits\""}],"id":1584,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1184:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1184:78:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1594,"nodeType":"ExpressionStatement","src":"1184:78:12"},{"expression":{"arguments":[{"id":1597,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1579,"src":"1283:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1596,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1275:7:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":1595,"name":"uint224","nodeType":"ElementaryTypeName","src":"1275:7:12","typeDescriptions":{}}},"id":1598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1275:14:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"functionReturnParameters":1583,"id":1599,"nodeType":"Return","src":"1268:21:12"}]},"documentation":{"id":1577,"nodeType":"StructuredDocumentation","src":"847:262:12","text":" @dev Returns the downcasted uint224 from uint256, reverting on\n overflow (when the input is greater than largest uint224).\n Counterpart to Solidity's `uint224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":1601,"implemented":true,"kind":"function","modifiers":[],"name":"toUint224","nameLocation":"1121:9:12","nodeType":"FunctionDefinition","parameters":{"id":1580,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1579,"mutability":"mutable","name":"value","nameLocation":"1139:5:12","nodeType":"VariableDeclaration","scope":1601,"src":"1131:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1578,"name":"uint256","nodeType":"ElementaryTypeName","src":"1131:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1130:15:12"},"returnParameters":{"id":1583,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1582,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1601,"src":"1169:7:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"},"typeName":{"id":1581,"name":"uint224","nodeType":"ElementaryTypeName","src":"1169:7:12","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"visibility":"internal"}],"src":"1168:9:12"},"scope":1966,"src":"1112:182:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1625,"nodeType":"Block","src":"1629:116:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1610,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1604,"src":"1643:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1613,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1657:7:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":1612,"name":"uint128","nodeType":"ElementaryTypeName","src":"1657:7:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":1611,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1652:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1614,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1652:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":1615,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"1652:17:12","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"1643:26:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e203132382062697473","id":1617,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1671:41:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c","typeString":"literal_string \"SafeCast: value doesn't fit in 128 bits\""},"value":"SafeCast: value doesn't fit in 128 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c","typeString":"literal_string \"SafeCast: value doesn't fit in 128 bits\""}],"id":1609,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1635:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1635:78:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1619,"nodeType":"ExpressionStatement","src":"1635:78:12"},{"expression":{"arguments":[{"id":1622,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1604,"src":"1734:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1621,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1726:7:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":1620,"name":"uint128","nodeType":"ElementaryTypeName","src":"1726:7:12","typeDescriptions":{}}},"id":1623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1726:14:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":1608,"id":1624,"nodeType":"Return","src":"1719:21:12"}]},"documentation":{"id":1602,"nodeType":"StructuredDocumentation","src":"1298:262:12","text":" @dev Returns the downcasted uint128 from uint256, reverting on\n overflow (when the input is greater than largest uint128).\n Counterpart to Solidity's `uint128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":1626,"implemented":true,"kind":"function","modifiers":[],"name":"toUint128","nameLocation":"1572:9:12","nodeType":"FunctionDefinition","parameters":{"id":1605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1604,"mutability":"mutable","name":"value","nameLocation":"1590:5:12","nodeType":"VariableDeclaration","scope":1626,"src":"1582:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1603,"name":"uint256","nodeType":"ElementaryTypeName","src":"1582:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1581:15:12"},"returnParameters":{"id":1608,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1607,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1626,"src":"1620:7:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":1606,"name":"uint128","nodeType":"ElementaryTypeName","src":"1620:7:12","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1619:9:12"},"scope":1966,"src":"1563:182:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1650,"nodeType":"Block","src":"2074:113:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1635,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1629,"src":"2088:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1638,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2102:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":1637,"name":"uint96","nodeType":"ElementaryTypeName","src":"2102:6:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"}],"id":1636,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2097:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1639,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2097:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint96","typeString":"type(uint96)"}},"id":1640,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"2097:16:12","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"2088:25:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2039362062697473","id":1642,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2115:40:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_06d20189090e973729391526269baef79c35dd621633195648e5f8309eef9e19","typeString":"literal_string \"SafeCast: value doesn't fit in 96 bits\""},"value":"SafeCast: value doesn't fit in 96 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_06d20189090e973729391526269baef79c35dd621633195648e5f8309eef9e19","typeString":"literal_string \"SafeCast: value doesn't fit in 96 bits\""}],"id":1634,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2080:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2080:76:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1644,"nodeType":"ExpressionStatement","src":"2080:76:12"},{"expression":{"arguments":[{"id":1647,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1629,"src":"2176:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1646,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2169:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":1645,"name":"uint96","nodeType":"ElementaryTypeName","src":"2169:6:12","typeDescriptions":{}}},"id":1648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2169:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"functionReturnParameters":1633,"id":1649,"nodeType":"Return","src":"2162:20:12"}]},"documentation":{"id":1627,"nodeType":"StructuredDocumentation","src":"1749:258:12","text":" @dev Returns the downcasted uint96 from uint256, reverting on\n overflow (when the input is greater than largest uint96).\n Counterpart to Solidity's `uint96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":1651,"implemented":true,"kind":"function","modifiers":[],"name":"toUint96","nameLocation":"2019:8:12","nodeType":"FunctionDefinition","parameters":{"id":1630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1629,"mutability":"mutable","name":"value","nameLocation":"2036:5:12","nodeType":"VariableDeclaration","scope":1651,"src":"2028:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1628,"name":"uint256","nodeType":"ElementaryTypeName","src":"2028:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2027:15:12"},"returnParameters":{"id":1633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1632,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1651,"src":"2066:6:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":1631,"name":"uint96","nodeType":"ElementaryTypeName","src":"2066:6:12","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"src":"2065:8:12"},"scope":1966,"src":"2010:177:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1675,"nodeType":"Block","src":"2516:113:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1660,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1654,"src":"2530:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1663,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2544:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":1662,"name":"uint64","nodeType":"ElementaryTypeName","src":"2544:6:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"}],"id":1661,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2539:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1664,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2539:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint64","typeString":"type(uint64)"}},"id":1665,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"2539:16:12","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"2530:25:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2036342062697473","id":1667,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2557:40:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_93ae0c6bf6ffaece591a770b1865daa9f65157e541970aa9d8dc5f89a9490939","typeString":"literal_string \"SafeCast: value doesn't fit in 64 bits\""},"value":"SafeCast: value doesn't fit in 64 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_93ae0c6bf6ffaece591a770b1865daa9f65157e541970aa9d8dc5f89a9490939","typeString":"literal_string \"SafeCast: value doesn't fit in 64 bits\""}],"id":1659,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2522:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2522:76:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1669,"nodeType":"ExpressionStatement","src":"2522:76:12"},{"expression":{"arguments":[{"id":1672,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1654,"src":"2618:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1671,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2611:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":1670,"name":"uint64","nodeType":"ElementaryTypeName","src":"2611:6:12","typeDescriptions":{}}},"id":1673,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2611:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":1658,"id":1674,"nodeType":"Return","src":"2604:20:12"}]},"documentation":{"id":1652,"nodeType":"StructuredDocumentation","src":"2191:258:12","text":" @dev Returns the downcasted uint64 from uint256, reverting on\n overflow (when the input is greater than largest uint64).\n Counterpart to Solidity's `uint64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":1676,"implemented":true,"kind":"function","modifiers":[],"name":"toUint64","nameLocation":"2461:8:12","nodeType":"FunctionDefinition","parameters":{"id":1655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1654,"mutability":"mutable","name":"value","nameLocation":"2478:5:12","nodeType":"VariableDeclaration","scope":1676,"src":"2470:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1653,"name":"uint256","nodeType":"ElementaryTypeName","src":"2470:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2469:15:12"},"returnParameters":{"id":1658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1657,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1676,"src":"2508:6:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":1656,"name":"uint64","nodeType":"ElementaryTypeName","src":"2508:6:12","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"2507:8:12"},"scope":1966,"src":"2452:177:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1700,"nodeType":"Block","src":"2958:113:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1685,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1679,"src":"2972:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1688,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2986:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":1687,"name":"uint32","nodeType":"ElementaryTypeName","src":"2986:6:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"}],"id":1686,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2981:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1689,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2981:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint32","typeString":"type(uint32)"}},"id":1690,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"2981:16:12","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"2972:25:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2033322062697473","id":1692,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2999:40:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19","typeString":"literal_string \"SafeCast: value doesn't fit in 32 bits\""},"value":"SafeCast: value doesn't fit in 32 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19","typeString":"literal_string \"SafeCast: value doesn't fit in 32 bits\""}],"id":1684,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2964:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2964:76:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1694,"nodeType":"ExpressionStatement","src":"2964:76:12"},{"expression":{"arguments":[{"id":1697,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1679,"src":"3060:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1696,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3053:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":1695,"name":"uint32","nodeType":"ElementaryTypeName","src":"3053:6:12","typeDescriptions":{}}},"id":1698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3053:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":1683,"id":1699,"nodeType":"Return","src":"3046:20:12"}]},"documentation":{"id":1677,"nodeType":"StructuredDocumentation","src":"2633:258:12","text":" @dev Returns the downcasted uint32 from uint256, reverting on\n overflow (when the input is greater than largest uint32).\n Counterpart to Solidity's `uint32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":1701,"implemented":true,"kind":"function","modifiers":[],"name":"toUint32","nameLocation":"2903:8:12","nodeType":"FunctionDefinition","parameters":{"id":1680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1679,"mutability":"mutable","name":"value","nameLocation":"2920:5:12","nodeType":"VariableDeclaration","scope":1701,"src":"2912:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1678,"name":"uint256","nodeType":"ElementaryTypeName","src":"2912:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2911:15:12"},"returnParameters":{"id":1683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1682,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1701,"src":"2950:6:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1681,"name":"uint32","nodeType":"ElementaryTypeName","src":"2950:6:12","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2949:8:12"},"scope":1966,"src":"2894:177:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1725,"nodeType":"Block","src":"3400:113:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1710,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1704,"src":"3414:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1713,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3428:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":1712,"name":"uint16","nodeType":"ElementaryTypeName","src":"3428:6:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"}],"id":1711,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3423:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1714,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3423:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint16","typeString":"type(uint16)"}},"id":1715,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"3423:16:12","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"3414:25:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031362062697473","id":1717,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3441:40:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_13d3a66f9e0e5c92bbe7743bcd3bdb4695009d5f3a96e5ff49718d715b484033","typeString":"literal_string \"SafeCast: value doesn't fit in 16 bits\""},"value":"SafeCast: value doesn't fit in 16 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_13d3a66f9e0e5c92bbe7743bcd3bdb4695009d5f3a96e5ff49718d715b484033","typeString":"literal_string \"SafeCast: value doesn't fit in 16 bits\""}],"id":1709,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3406:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1718,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3406:76:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1719,"nodeType":"ExpressionStatement","src":"3406:76:12"},{"expression":{"arguments":[{"id":1722,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1704,"src":"3502:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1721,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3495:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":1720,"name":"uint16","nodeType":"ElementaryTypeName","src":"3495:6:12","typeDescriptions":{}}},"id":1723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3495:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"functionReturnParameters":1708,"id":1724,"nodeType":"Return","src":"3488:20:12"}]},"documentation":{"id":1702,"nodeType":"StructuredDocumentation","src":"3075:258:12","text":" @dev Returns the downcasted uint16 from uint256, reverting on\n overflow (when the input is greater than largest uint16).\n Counterpart to Solidity's `uint16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":1726,"implemented":true,"kind":"function","modifiers":[],"name":"toUint16","nameLocation":"3345:8:12","nodeType":"FunctionDefinition","parameters":{"id":1705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1704,"mutability":"mutable","name":"value","nameLocation":"3362:5:12","nodeType":"VariableDeclaration","scope":1726,"src":"3354:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1703,"name":"uint256","nodeType":"ElementaryTypeName","src":"3354:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3353:15:12"},"returnParameters":{"id":1708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1707,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1726,"src":"3392:6:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":1706,"name":"uint16","nodeType":"ElementaryTypeName","src":"3392:6:12","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"3391:8:12"},"scope":1966,"src":"3336:177:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1750,"nodeType":"Block","src":"3837:110:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1735,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1729,"src":"3851:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1738,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3865:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":1737,"name":"uint8","nodeType":"ElementaryTypeName","src":"3865:5:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":1736,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3860:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1739,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3860:11:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":1740,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"3860:15:12","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"3851:24:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e20382062697473","id":1742,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3877:39:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_2610961ba53259047cd57c60366c5ad0b8aabf5eb4132487619b736715a740d1","typeString":"literal_string \"SafeCast: value doesn't fit in 8 bits\""},"value":"SafeCast: value doesn't fit in 8 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2610961ba53259047cd57c60366c5ad0b8aabf5eb4132487619b736715a740d1","typeString":"literal_string \"SafeCast: value doesn't fit in 8 bits\""}],"id":1734,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3843:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3843:74:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1744,"nodeType":"ExpressionStatement","src":"3843:74:12"},{"expression":{"arguments":[{"id":1747,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1729,"src":"3936:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1746,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3930:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":1745,"name":"uint8","nodeType":"ElementaryTypeName","src":"3930:5:12","typeDescriptions":{}}},"id":1748,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3930:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":1733,"id":1749,"nodeType":"Return","src":"3923:19:12"}]},"documentation":{"id":1727,"nodeType":"StructuredDocumentation","src":"3517:255:12","text":" @dev Returns the downcasted uint8 from uint256, reverting on\n overflow (when the input is greater than largest uint8).\n Counterpart to Solidity's `uint8` operator.\n Requirements:\n - input must fit into 8 bits."},"id":1751,"implemented":true,"kind":"function","modifiers":[],"name":"toUint8","nameLocation":"3784:7:12","nodeType":"FunctionDefinition","parameters":{"id":1730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1729,"mutability":"mutable","name":"value","nameLocation":"3800:5:12","nodeType":"VariableDeclaration","scope":1751,"src":"3792:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1728,"name":"uint256","nodeType":"ElementaryTypeName","src":"3792:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3791:15:12"},"returnParameters":{"id":1733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1732,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1751,"src":"3830:5:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1731,"name":"uint8","nodeType":"ElementaryTypeName","src":"3830:5:12","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"3829:7:12"},"scope":1966,"src":"3775:172:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1771,"nodeType":"Block","src":"4167:93:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1760,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1754,"src":"4181:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"30","id":1761,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4190:1:12","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4181:10:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c7565206d75737420626520706f736974697665","id":1763,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4193:34:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_74e6d3a4204092bea305532ded31d3763fc378e46be3884a93ceff08a0761807","typeString":"literal_string \"SafeCast: value must be positive\""},"value":"SafeCast: value must be positive"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_74e6d3a4204092bea305532ded31d3763fc378e46be3884a93ceff08a0761807","typeString":"literal_string \"SafeCast: value must be positive\""}],"id":1759,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4173:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4173:55:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1765,"nodeType":"ExpressionStatement","src":"4173:55:12"},{"expression":{"arguments":[{"id":1768,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1754,"src":"4249:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":1767,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4241:7:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1766,"name":"uint256","nodeType":"ElementaryTypeName","src":"4241:7:12","typeDescriptions":{}}},"id":1769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4241:14:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1758,"id":1770,"nodeType":"Return","src":"4234:21:12"}]},"documentation":{"id":1752,"nodeType":"StructuredDocumentation","src":"3951:148:12","text":" @dev Converts a signed int256 into an unsigned uint256.\n Requirements:\n - input must be greater than or equal to 0."},"id":1772,"implemented":true,"kind":"function","modifiers":[],"name":"toUint256","nameLocation":"4111:9:12","nodeType":"FunctionDefinition","parameters":{"id":1755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1754,"mutability":"mutable","name":"value","nameLocation":"4128:5:12","nodeType":"VariableDeclaration","scope":1772,"src":"4121:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1753,"name":"int256","nodeType":"ElementaryTypeName","src":"4121:6:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4120:14:12"},"returnParameters":{"id":1758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1757,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1772,"src":"4158:7:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1756,"name":"uint256","nodeType":"ElementaryTypeName","src":"4158:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4157:9:12"},"scope":1966,"src":"4102:158:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1804,"nodeType":"Block","src":"4656:161:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1781,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1775,"src":"4677:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"arguments":[{"id":1784,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4691:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int128_$","typeString":"type(int128)"},"typeName":{"id":1783,"name":"int128","nodeType":"ElementaryTypeName","src":"4691:6:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int128_$","typeString":"type(int128)"}],"id":1782,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4686:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1785,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4686:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int128","typeString":"type(int128)"}},"id":1786,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"min","nodeType":"MemberAccess","src":"4686:16:12","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"src":"4677:25:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1788,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1775,"src":"4706:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1791,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4720:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int128_$","typeString":"type(int128)"},"typeName":{"id":1790,"name":"int128","nodeType":"ElementaryTypeName","src":"4720:6:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int128_$","typeString":"type(int128)"}],"id":1789,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4715:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1792,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4715:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int128","typeString":"type(int128)"}},"id":1793,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"4715:16:12","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"src":"4706:25:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4677:54:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e203132382062697473","id":1796,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4739:41:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c","typeString":"literal_string \"SafeCast: value doesn't fit in 128 bits\""},"value":"SafeCast: value doesn't fit in 128 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c","typeString":"literal_string \"SafeCast: value doesn't fit in 128 bits\""}],"id":1780,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4662:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1797,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4662:124:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1798,"nodeType":"ExpressionStatement","src":"4662:124:12"},{"expression":{"arguments":[{"id":1801,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1775,"src":"4806:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":1800,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4799:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int128_$","typeString":"type(int128)"},"typeName":{"id":1799,"name":"int128","nodeType":"ElementaryTypeName","src":"4799:6:12","typeDescriptions":{}}},"id":1802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4799:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"functionReturnParameters":1779,"id":1803,"nodeType":"Return","src":"4792:20:12"}]},"documentation":{"id":1773,"nodeType":"StructuredDocumentation","src":"4264:326:12","text":" @dev Returns the downcasted int128 from int256, reverting on\n overflow (when the input is less than smallest int128 or\n greater than largest int128).\n Counterpart to Solidity's `int128` operator.\n Requirements:\n - input must fit into 128 bits\n _Available since v3.1._"},"id":1805,"implemented":true,"kind":"function","modifiers":[],"name":"toInt128","nameLocation":"4602:8:12","nodeType":"FunctionDefinition","parameters":{"id":1776,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1775,"mutability":"mutable","name":"value","nameLocation":"4618:5:12","nodeType":"VariableDeclaration","scope":1805,"src":"4611:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1774,"name":"int256","nodeType":"ElementaryTypeName","src":"4611:6:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4610:14:12"},"returnParameters":{"id":1779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1778,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1805,"src":"4648:6:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"},"typeName":{"id":1777,"name":"int128","nodeType":"ElementaryTypeName","src":"4648:6:12","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"visibility":"internal"}],"src":"4647:8:12"},"scope":1966,"src":"4593:224:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1837,"nodeType":"Block","src":"5206:157:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1814,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1808,"src":"5227:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"arguments":[{"id":1817,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5241:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int64_$","typeString":"type(int64)"},"typeName":{"id":1816,"name":"int64","nodeType":"ElementaryTypeName","src":"5241:5:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int64_$","typeString":"type(int64)"}],"id":1815,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5236:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1818,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5236:11:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int64","typeString":"type(int64)"}},"id":1819,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"min","nodeType":"MemberAccess","src":"5236:15:12","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"src":"5227:24:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1821,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1808,"src":"5255:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1824,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5269:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int64_$","typeString":"type(int64)"},"typeName":{"id":1823,"name":"int64","nodeType":"ElementaryTypeName","src":"5269:5:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int64_$","typeString":"type(int64)"}],"id":1822,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5264:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1825,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5264:11:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int64","typeString":"type(int64)"}},"id":1826,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"5264:15:12","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"src":"5255:24:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5227:52:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2036342062697473","id":1829,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5287:40:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_93ae0c6bf6ffaece591a770b1865daa9f65157e541970aa9d8dc5f89a9490939","typeString":"literal_string \"SafeCast: value doesn't fit in 64 bits\""},"value":"SafeCast: value doesn't fit in 64 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_93ae0c6bf6ffaece591a770b1865daa9f65157e541970aa9d8dc5f89a9490939","typeString":"literal_string \"SafeCast: value doesn't fit in 64 bits\""}],"id":1813,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5212:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5212:121:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1831,"nodeType":"ExpressionStatement","src":"5212:121:12"},{"expression":{"arguments":[{"id":1834,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1808,"src":"5352:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":1833,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5346:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int64_$","typeString":"type(int64)"},"typeName":{"id":1832,"name":"int64","nodeType":"ElementaryTypeName","src":"5346:5:12","typeDescriptions":{}}},"id":1835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5346:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"functionReturnParameters":1812,"id":1836,"nodeType":"Return","src":"5339:19:12"}]},"documentation":{"id":1806,"nodeType":"StructuredDocumentation","src":"4821:321:12","text":" @dev Returns the downcasted int64 from int256, reverting on\n overflow (when the input is less than smallest int64 or\n greater than largest int64).\n Counterpart to Solidity's `int64` operator.\n Requirements:\n - input must fit into 64 bits\n _Available since v3.1._"},"id":1838,"implemented":true,"kind":"function","modifiers":[],"name":"toInt64","nameLocation":"5154:7:12","nodeType":"FunctionDefinition","parameters":{"id":1809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1808,"mutability":"mutable","name":"value","nameLocation":"5169:5:12","nodeType":"VariableDeclaration","scope":1838,"src":"5162:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1807,"name":"int256","nodeType":"ElementaryTypeName","src":"5162:6:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"5161:14:12"},"returnParameters":{"id":1812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1811,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1838,"src":"5199:5:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"},"typeName":{"id":1810,"name":"int64","nodeType":"ElementaryTypeName","src":"5199:5:12","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"visibility":"internal"}],"src":"5198:7:12"},"scope":1966,"src":"5145:218:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1870,"nodeType":"Block","src":"5752:157:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1847,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1841,"src":"5773:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"arguments":[{"id":1850,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5787:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int32_$","typeString":"type(int32)"},"typeName":{"id":1849,"name":"int32","nodeType":"ElementaryTypeName","src":"5787:5:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int32_$","typeString":"type(int32)"}],"id":1848,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5782:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1851,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5782:11:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int32","typeString":"type(int32)"}},"id":1852,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"min","nodeType":"MemberAccess","src":"5782:15:12","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"src":"5773:24:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1854,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1841,"src":"5801:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1857,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5815:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int32_$","typeString":"type(int32)"},"typeName":{"id":1856,"name":"int32","nodeType":"ElementaryTypeName","src":"5815:5:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int32_$","typeString":"type(int32)"}],"id":1855,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5810:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1858,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5810:11:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int32","typeString":"type(int32)"}},"id":1859,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"5810:15:12","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"src":"5801:24:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5773:52:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2033322062697473","id":1862,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5833:40:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19","typeString":"literal_string \"SafeCast: value doesn't fit in 32 bits\""},"value":"SafeCast: value doesn't fit in 32 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19","typeString":"literal_string \"SafeCast: value doesn't fit in 32 bits\""}],"id":1846,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5758:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5758:121:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1864,"nodeType":"ExpressionStatement","src":"5758:121:12"},{"expression":{"arguments":[{"id":1867,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1841,"src":"5898:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":1866,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5892:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int32_$","typeString":"type(int32)"},"typeName":{"id":1865,"name":"int32","nodeType":"ElementaryTypeName","src":"5892:5:12","typeDescriptions":{}}},"id":1868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5892:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"functionReturnParameters":1845,"id":1869,"nodeType":"Return","src":"5885:19:12"}]},"documentation":{"id":1839,"nodeType":"StructuredDocumentation","src":"5367:321:12","text":" @dev Returns the downcasted int32 from int256, reverting on\n overflow (when the input is less than smallest int32 or\n greater than largest int32).\n Counterpart to Solidity's `int32` operator.\n Requirements:\n - input must fit into 32 bits\n _Available since v3.1._"},"id":1871,"implemented":true,"kind":"function","modifiers":[],"name":"toInt32","nameLocation":"5700:7:12","nodeType":"FunctionDefinition","parameters":{"id":1842,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1841,"mutability":"mutable","name":"value","nameLocation":"5715:5:12","nodeType":"VariableDeclaration","scope":1871,"src":"5708:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1840,"name":"int256","nodeType":"ElementaryTypeName","src":"5708:6:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"5707:14:12"},"returnParameters":{"id":1845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1844,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1871,"src":"5745:5:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"},"typeName":{"id":1843,"name":"int32","nodeType":"ElementaryTypeName","src":"5745:5:12","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"visibility":"internal"}],"src":"5744:7:12"},"scope":1966,"src":"5691:218:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1903,"nodeType":"Block","src":"6298:157:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1880,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1874,"src":"6319:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"arguments":[{"id":1883,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6333:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int16_$","typeString":"type(int16)"},"typeName":{"id":1882,"name":"int16","nodeType":"ElementaryTypeName","src":"6333:5:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int16_$","typeString":"type(int16)"}],"id":1881,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6328:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1884,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6328:11:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int16","typeString":"type(int16)"}},"id":1885,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"min","nodeType":"MemberAccess","src":"6328:15:12","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"src":"6319:24:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1887,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1874,"src":"6347:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1890,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6361:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int16_$","typeString":"type(int16)"},"typeName":{"id":1889,"name":"int16","nodeType":"ElementaryTypeName","src":"6361:5:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int16_$","typeString":"type(int16)"}],"id":1888,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6356:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1891,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6356:11:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int16","typeString":"type(int16)"}},"id":1892,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"6356:15:12","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"src":"6347:24:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6319:52:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031362062697473","id":1895,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6379:40:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_13d3a66f9e0e5c92bbe7743bcd3bdb4695009d5f3a96e5ff49718d715b484033","typeString":"literal_string \"SafeCast: value doesn't fit in 16 bits\""},"value":"SafeCast: value doesn't fit in 16 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_13d3a66f9e0e5c92bbe7743bcd3bdb4695009d5f3a96e5ff49718d715b484033","typeString":"literal_string \"SafeCast: value doesn't fit in 16 bits\""}],"id":1879,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6304:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1896,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6304:121:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1897,"nodeType":"ExpressionStatement","src":"6304:121:12"},{"expression":{"arguments":[{"id":1900,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1874,"src":"6444:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":1899,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6438:5:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int16_$","typeString":"type(int16)"},"typeName":{"id":1898,"name":"int16","nodeType":"ElementaryTypeName","src":"6438:5:12","typeDescriptions":{}}},"id":1901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6438:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"functionReturnParameters":1878,"id":1902,"nodeType":"Return","src":"6431:19:12"}]},"documentation":{"id":1872,"nodeType":"StructuredDocumentation","src":"5913:321:12","text":" @dev Returns the downcasted int16 from int256, reverting on\n overflow (when the input is less than smallest int16 or\n greater than largest int16).\n Counterpart to Solidity's `int16` operator.\n Requirements:\n - input must fit into 16 bits\n _Available since v3.1._"},"id":1904,"implemented":true,"kind":"function","modifiers":[],"name":"toInt16","nameLocation":"6246:7:12","nodeType":"FunctionDefinition","parameters":{"id":1875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1874,"mutability":"mutable","name":"value","nameLocation":"6261:5:12","nodeType":"VariableDeclaration","scope":1904,"src":"6254:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1873,"name":"int256","nodeType":"ElementaryTypeName","src":"6254:6:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"6253:14:12"},"returnParameters":{"id":1878,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1877,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1904,"src":"6291:5:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"},"typeName":{"id":1876,"name":"int16","nodeType":"ElementaryTypeName","src":"6291:5:12","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"visibility":"internal"}],"src":"6290:7:12"},"scope":1966,"src":"6237:218:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1936,"nodeType":"Block","src":"6838:153:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1913,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"6859:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"arguments":[{"id":1916,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6873:4:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int8_$","typeString":"type(int8)"},"typeName":{"id":1915,"name":"int8","nodeType":"ElementaryTypeName","src":"6873:4:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int8_$","typeString":"type(int8)"}],"id":1914,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6868:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1917,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6868:10:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int8","typeString":"type(int8)"}},"id":1918,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"min","nodeType":"MemberAccess","src":"6868:14:12","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"src":"6859:23:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":1926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1920,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"6886:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":1923,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6900:4:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int8_$","typeString":"type(int8)"},"typeName":{"id":1922,"name":"int8","nodeType":"ElementaryTypeName","src":"6900:4:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int8_$","typeString":"type(int8)"}],"id":1921,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6895:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1924,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6895:10:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int8","typeString":"type(int8)"}},"id":1925,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"6895:14:12","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"src":"6886:23:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6859:50:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e20382062697473","id":1928,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6917:39:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_2610961ba53259047cd57c60366c5ad0b8aabf5eb4132487619b736715a740d1","typeString":"literal_string \"SafeCast: value doesn't fit in 8 bits\""},"value":"SafeCast: value doesn't fit in 8 bits"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2610961ba53259047cd57c60366c5ad0b8aabf5eb4132487619b736715a740d1","typeString":"literal_string \"SafeCast: value doesn't fit in 8 bits\""}],"id":1912,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6844:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6844:118:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1930,"nodeType":"ExpressionStatement","src":"6844:118:12"},{"expression":{"arguments":[{"id":1933,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1907,"src":"6980:5:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":1932,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6975:4:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int8_$","typeString":"type(int8)"},"typeName":{"id":1931,"name":"int8","nodeType":"ElementaryTypeName","src":"6975:4:12","typeDescriptions":{}}},"id":1934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6975:11:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"functionReturnParameters":1911,"id":1935,"nodeType":"Return","src":"6968:18:12"}]},"documentation":{"id":1905,"nodeType":"StructuredDocumentation","src":"6459:317:12","text":" @dev Returns the downcasted int8 from int256, reverting on\n overflow (when the input is less than smallest int8 or\n greater than largest int8).\n Counterpart to Solidity's `int8` operator.\n Requirements:\n - input must fit into 8 bits.\n _Available since v3.1._"},"id":1937,"implemented":true,"kind":"function","modifiers":[],"name":"toInt8","nameLocation":"6788:6:12","nodeType":"FunctionDefinition","parameters":{"id":1908,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1907,"mutability":"mutable","name":"value","nameLocation":"6802:5:12","nodeType":"VariableDeclaration","scope":1937,"src":"6795:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1906,"name":"int256","nodeType":"ElementaryTypeName","src":"6795:6:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"6794:14:12"},"returnParameters":{"id":1911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1910,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1937,"src":"6832:4:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"},"typeName":{"id":1909,"name":"int8","nodeType":"ElementaryTypeName","src":"6832:4:12","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"visibility":"internal"}],"src":"6831:6:12"},"scope":1966,"src":"6779:212:12","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1964,"nodeType":"Block","src":"7215:219:12","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1946,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1940,"src":"7324:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"expression":{"arguments":[{"id":1951,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7346:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":1950,"name":"int256","nodeType":"ElementaryTypeName","src":"7346:6:12","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"}],"id":1949,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7341:4:12","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1952,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7341:12:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int256","typeString":"type(int256)"}},"id":1953,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"7341:16:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":1948,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7333:7:12","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1947,"name":"uint256","nodeType":"ElementaryTypeName","src":"7333:7:12","typeDescriptions":{}}},"id":1954,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7333:25:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7324:34:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e74323536","id":1956,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7360:42:12","typeDescriptions":{"typeIdentifier":"t_stringliteral_d70dcf21692b3c91b4c5fbb89ed57f464aa42efbe5b0ea96c4acb7c080144227","typeString":"literal_string \"SafeCast: value doesn't fit in an int256\""},"value":"SafeCast: value doesn't fit in an int256"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d70dcf21692b3c91b4c5fbb89ed57f464aa42efbe5b0ea96c4acb7c080144227","typeString":"literal_string \"SafeCast: value doesn't fit in an int256\""}],"id":1945,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7316:7:12","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7316:87:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1958,"nodeType":"ExpressionStatement","src":"7316:87:12"},{"expression":{"arguments":[{"id":1961,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1940,"src":"7423:5:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1960,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7416:6:12","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":1959,"name":"int256","nodeType":"ElementaryTypeName","src":"7416:6:12","typeDescriptions":{}}},"id":1962,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7416:13:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":1944,"id":1963,"nodeType":"Return","src":"7409:20:12"}]},"documentation":{"id":1938,"nodeType":"StructuredDocumentation","src":"6995:153:12","text":" @dev Converts an unsigned uint256 into a signed int256.\n Requirements:\n - input must be less than or equal to maxInt256."},"id":1965,"implemented":true,"kind":"function","modifiers":[],"name":"toInt256","nameLocation":"7160:8:12","nodeType":"FunctionDefinition","parameters":{"id":1941,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1940,"mutability":"mutable","name":"value","nameLocation":"7177:5:12","nodeType":"VariableDeclaration","scope":1965,"src":"7169:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1939,"name":"uint256","nodeType":"ElementaryTypeName","src":"7169:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7168:15:12"},"returnParameters":{"id":1944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1943,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1965,"src":"7207:6:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1942,"name":"int256","nodeType":"ElementaryTypeName","src":"7207:6:12","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7206:8:12"},"scope":1966,"src":"7151:283:12","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":1967,"src":"826:6610:12","usedErrors":[]}],"src":"91:7346:12"},"id":12},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol","exportedSymbols":{"Address":[722],"IERC20":[1442],"SafeERC20":[2190]},"id":2191,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1968,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"100:23:13"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"./IERC20.sol","id":1969,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2191,"sourceUnit":1443,"src":"125:22:13","symbolAliases":[],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol","file":"./Address.sol","id":1970,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2191,"sourceUnit":723,"src":"148:23:13","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"SafeERC20","contractDependencies":[],"contractKind":"library","documentation":{"id":1971,"nodeType":"StructuredDocumentation","src":"173:457:13","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":2190,"linearizedBaseContracts":[2190],"name":"SafeERC20","nameLocation":"639:9:13","nodeType":"ContractDefinition","nodes":[{"id":1974,"libraryName":{"id":1972,"name":"Address","nodeType":"IdentifierPath","referencedDeclaration":722,"src":"659:7:13"},"nodeType":"UsingForDirective","src":"653:26:13","typeName":{"id":1973,"name":"address","nodeType":"ElementaryTypeName","src":"671:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"body":{"id":1996,"nodeType":"Block","src":"755:97:13","statements":[{"expression":{"arguments":[{"id":1985,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1977,"src":"781:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},{"arguments":[{"expression":{"expression":{"id":1988,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1977,"src":"811:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":1989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":1391,"src":"811:14:13","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":1990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"811:23:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":1991,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1979,"src":"836:2:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":1992,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1981,"src":"840:5:13","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":1986,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"788:3:13","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":1987,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"788:22:13","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":1993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"788:58:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1984,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2189,"src":"761:19:13","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":1994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"761:86:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1995,"nodeType":"ExpressionStatement","src":"761:86:13"}]},"id":1997,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransfer","nameLocation":"692:12:13","nodeType":"FunctionDefinition","parameters":{"id":1982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1977,"mutability":"mutable","name":"token","nameLocation":"712:5:13","nodeType":"VariableDeclaration","scope":1997,"src":"705:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":1976,"nodeType":"UserDefinedTypeName","pathNode":{"id":1975,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"705:6:13"},"referencedDeclaration":1442,"src":"705:6:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1979,"mutability":"mutable","name":"to","nameLocation":"727:2:13","nodeType":"VariableDeclaration","scope":1997,"src":"719:10:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1978,"name":"address","nodeType":"ElementaryTypeName","src":"719:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1981,"mutability":"mutable","name":"value","nameLocation":"739:5:13","nodeType":"VariableDeclaration","scope":1997,"src":"731:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1980,"name":"uint256","nodeType":"ElementaryTypeName","src":"731:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"704:41:13"},"returnParameters":{"id":1983,"nodeType":"ParameterList","parameters":[],"src":"755:0:13"},"scope":2190,"src":"683:169:13","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2022,"nodeType":"Block","src":"946:125:13","statements":[{"expression":{"arguments":[{"id":2010,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2000,"src":"979:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},{"arguments":[{"expression":{"expression":{"id":2013,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2000,"src":"1015:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":2014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":1423,"src":"1015:18:13","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":2015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"1015:27:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":2016,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2002,"src":"1044:4:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2017,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2004,"src":"1050:2:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2018,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2006,"src":"1054:5:13","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":2011,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"992:3:13","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2012,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"992:22:13","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":2019,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"992:68:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2009,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2189,"src":"952:19:13","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":2020,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"952:114:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2021,"nodeType":"ExpressionStatement","src":"952:114:13"}]},"id":2023,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"865:16:13","nodeType":"FunctionDefinition","parameters":{"id":2007,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2000,"mutability":"mutable","name":"token","nameLocation":"889:5:13","nodeType":"VariableDeclaration","scope":2023,"src":"882:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":1999,"nodeType":"UserDefinedTypeName","pathNode":{"id":1998,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"882:6:13"},"referencedDeclaration":1442,"src":"882:6:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2002,"mutability":"mutable","name":"from","nameLocation":"904:4:13","nodeType":"VariableDeclaration","scope":2023,"src":"896:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2001,"name":"address","nodeType":"ElementaryTypeName","src":"896:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2004,"mutability":"mutable","name":"to","nameLocation":"918:2:13","nodeType":"VariableDeclaration","scope":2023,"src":"910:10:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2003,"name":"address","nodeType":"ElementaryTypeName","src":"910:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2006,"mutability":"mutable","name":"value","nameLocation":"930:5:13","nodeType":"VariableDeclaration","scope":2023,"src":"922:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2005,"name":"uint256","nodeType":"ElementaryTypeName","src":"922:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"881:55:13"},"returnParameters":{"id":2008,"nodeType":"ParameterList","parameters":[],"src":"946:0:13"},"scope":2190,"src":"856:215:13","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2066,"nodeType":"Block","src":"1391:459:13","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2035,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2031,"src":"1618:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2036,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1627:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1618:10:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":2038,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1617:12:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":2043,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1658:4:13","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$2190","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$2190","typeString":"library SafeERC20"}],"id":2042,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1650:7:13","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2041,"name":"address","nodeType":"ElementaryTypeName","src":"1650:7:13","typeDescriptions":{}}},"id":2044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1650:13:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2045,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2029,"src":"1665:7:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":2039,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2027,"src":"1634:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":2040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":1401,"src":"1634:15:13","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":2046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1634:39:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1677:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1634:44:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":2049,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1633:46:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1617:62:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365","id":2051,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1687:56:13","typeDescriptions":{"typeIdentifier":"t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25","typeString":"literal_string \"SafeERC20: approve from non-zero to non-zero allowance\""},"value":"SafeERC20: approve from non-zero to non-zero allowance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25","typeString":"literal_string \"SafeERC20: approve from non-zero to non-zero allowance\""}],"id":2034,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1602:7:13","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1602:147:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2053,"nodeType":"ExpressionStatement","src":"1602:147:13"},{"expression":{"arguments":[{"id":2055,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2027,"src":"1775:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},{"arguments":[{"expression":{"expression":{"id":2058,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2027,"src":"1805:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":2059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1411,"src":"1805:13:13","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":2060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"1805:22:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":2061,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2029,"src":"1829:7:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2062,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2031,"src":"1838:5:13","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":2056,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1782:3:13","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2057,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"1782:22:13","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":2063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1782:62:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2054,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2189,"src":"1755:19:13","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":2064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1755:90:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2065,"nodeType":"ExpressionStatement","src":"1755:90:13"}]},"documentation":{"id":2024,"nodeType":"StructuredDocumentation","src":"1075:237:13","text":" @dev Deprecated. This function has issues similar to the ones found in\n {IERC20-approve}, and its usage is discouraged.\n Whenever possible, use {safeIncreaseAllowance} and\n {safeDecreaseAllowance} instead."},"id":2067,"implemented":true,"kind":"function","modifiers":[],"name":"safeApprove","nameLocation":"1324:11:13","nodeType":"FunctionDefinition","parameters":{"id":2032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2027,"mutability":"mutable","name":"token","nameLocation":"1343:5:13","nodeType":"VariableDeclaration","scope":2067,"src":"1336:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":2026,"nodeType":"UserDefinedTypeName","pathNode":{"id":2025,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1336:6:13"},"referencedDeclaration":1442,"src":"1336:6:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2029,"mutability":"mutable","name":"spender","nameLocation":"1358:7:13","nodeType":"VariableDeclaration","scope":2067,"src":"1350:15:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2028,"name":"address","nodeType":"ElementaryTypeName","src":"1350:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2031,"mutability":"mutable","name":"value","nameLocation":"1375:5:13","nodeType":"VariableDeclaration","scope":2067,"src":"1367:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2030,"name":"uint256","nodeType":"ElementaryTypeName","src":"1367:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1335:46:13"},"returnParameters":{"id":2033,"nodeType":"ParameterList","parameters":[],"src":"1391:0:13"},"scope":2190,"src":"1315:535:13","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2102,"nodeType":"Block","src":"1940:202:13","statements":[{"assignments":[2078],"declarations":[{"constant":false,"id":2078,"mutability":"mutable","name":"newAllowance","nameLocation":"1954:12:13","nodeType":"VariableDeclaration","scope":2102,"src":"1946:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2077,"name":"uint256","nodeType":"ElementaryTypeName","src":"1946:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2089,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":2083,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1993:4:13","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$2190","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$2190","typeString":"library SafeERC20"}],"id":2082,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1985:7:13","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2081,"name":"address","nodeType":"ElementaryTypeName","src":"1985:7:13","typeDescriptions":{}}},"id":2084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1985:13:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2085,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2072,"src":"2000:7:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":2079,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2070,"src":"1969:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":2080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":1401,"src":"1969:15:13","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":2086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1969:39:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":2087,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2074,"src":"2011:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1969:47:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1946:70:13"},{"expression":{"arguments":[{"id":2091,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2070,"src":"2049:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},{"arguments":[{"expression":{"expression":{"id":2094,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2070,"src":"2085:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":2095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1411,"src":"2085:13:13","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":2096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"2085:22:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":2097,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2072,"src":"2109:7:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2098,"name":"newAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2078,"src":"2118:12:13","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":2092,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2062:3:13","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2093,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"2062:22:13","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":2099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2062:69:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2090,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2189,"src":"2022:19:13","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":2100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2022:115:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2101,"nodeType":"ExpressionStatement","src":"2022:115:13"}]},"id":2103,"implemented":true,"kind":"function","modifiers":[],"name":"safeIncreaseAllowance","nameLocation":"1863:21:13","nodeType":"FunctionDefinition","parameters":{"id":2075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2070,"mutability":"mutable","name":"token","nameLocation":"1892:5:13","nodeType":"VariableDeclaration","scope":2103,"src":"1885:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":2069,"nodeType":"UserDefinedTypeName","pathNode":{"id":2068,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1885:6:13"},"referencedDeclaration":1442,"src":"1885:6:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2072,"mutability":"mutable","name":"spender","nameLocation":"1907:7:13","nodeType":"VariableDeclaration","scope":2103,"src":"1899:15:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2071,"name":"address","nodeType":"ElementaryTypeName","src":"1899:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2074,"mutability":"mutable","name":"value","nameLocation":"1924:5:13","nodeType":"VariableDeclaration","scope":2103,"src":"1916:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2073,"name":"uint256","nodeType":"ElementaryTypeName","src":"1916:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1884:46:13"},"returnParameters":{"id":2076,"nodeType":"ParameterList","parameters":[],"src":"1940:0:13"},"scope":2190,"src":"1854:288:13","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2150,"nodeType":"Block","src":"2232:360:13","statements":[{"id":2149,"nodeType":"UncheckedBlock","src":"2238:350:13","statements":[{"assignments":[2114],"declarations":[{"constant":false,"id":2114,"mutability":"mutable","name":"oldAllowance","nameLocation":"2264:12:13","nodeType":"VariableDeclaration","scope":2149,"src":"2256:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2113,"name":"uint256","nodeType":"ElementaryTypeName","src":"2256:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2123,"initialValue":{"arguments":[{"arguments":[{"id":2119,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2303:4:13","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$2190","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$2190","typeString":"library SafeERC20"}],"id":2118,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2295:7:13","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2117,"name":"address","nodeType":"ElementaryTypeName","src":"2295:7:13","typeDescriptions":{}}},"id":2120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2295:13:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2121,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2108,"src":"2310:7:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":2115,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2106,"src":"2279:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":2116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":1401,"src":"2279:15:13","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":2122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2279:39:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2256:62:13"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2125,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2114,"src":"2334:12:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":2126,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2110,"src":"2350:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2334:21:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5361666545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f","id":2128,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2357:43:13","typeDescriptions":{"typeIdentifier":"t_stringliteral_2c3af60974a758b7e72e108c9bf0943ecc9e4f2e8af4695da5f52fbf57a63d3a","typeString":"literal_string \"SafeERC20: decreased allowance below zero\""},"value":"SafeERC20: decreased allowance below zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2c3af60974a758b7e72e108c9bf0943ecc9e4f2e8af4695da5f52fbf57a63d3a","typeString":"literal_string \"SafeERC20: decreased allowance below zero\""}],"id":2124,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2326:7:13","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2326:75:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2130,"nodeType":"ExpressionStatement","src":"2326:75:13"},{"assignments":[2132],"declarations":[{"constant":false,"id":2132,"mutability":"mutable","name":"newAllowance","nameLocation":"2417:12:13","nodeType":"VariableDeclaration","scope":2149,"src":"2409:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2131,"name":"uint256","nodeType":"ElementaryTypeName","src":"2409:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2136,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2133,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2114,"src":"2432:12:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":2134,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2110,"src":"2447:5:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2432:20:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2409:43:13"},{"expression":{"arguments":[{"id":2138,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2106,"src":"2489:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},{"arguments":[{"expression":{"expression":{"id":2141,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2106,"src":"2527:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":2142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1411,"src":"2527:13:13","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":2143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"2527:22:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":2144,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2108,"src":"2551:7:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2145,"name":"newAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2132,"src":"2560:12:13","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":2139,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2504:3:13","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2140,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"2504:22:13","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":2146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2504:69:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2137,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2189,"src":"2460:19:13","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":2147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2460:121:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2148,"nodeType":"ExpressionStatement","src":"2460:121:13"}]}]},"id":2151,"implemented":true,"kind":"function","modifiers":[],"name":"safeDecreaseAllowance","nameLocation":"2155:21:13","nodeType":"FunctionDefinition","parameters":{"id":2111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2106,"mutability":"mutable","name":"token","nameLocation":"2184:5:13","nodeType":"VariableDeclaration","scope":2151,"src":"2177:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":2105,"nodeType":"UserDefinedTypeName","pathNode":{"id":2104,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"2177:6:13"},"referencedDeclaration":1442,"src":"2177:6:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2108,"mutability":"mutable","name":"spender","nameLocation":"2199:7:13","nodeType":"VariableDeclaration","scope":2151,"src":"2191:15:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2107,"name":"address","nodeType":"ElementaryTypeName","src":"2191:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2110,"mutability":"mutable","name":"value","nameLocation":"2216:5:13","nodeType":"VariableDeclaration","scope":2151,"src":"2208:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2109,"name":"uint256","nodeType":"ElementaryTypeName","src":"2208:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2176:46:13"},"returnParameters":{"id":2112,"nodeType":"ParameterList","parameters":[],"src":"2232:0:13"},"scope":2190,"src":"2146:446:13","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2188,"nodeType":"Block","src":"3031:598:13","statements":[{"assignments":[2161],"declarations":[{"constant":false,"id":2161,"mutability":"mutable","name":"returndata","nameLocation":"3377:10:13","nodeType":"VariableDeclaration","scope":2188,"src":"3364:23:13","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2160,"name":"bytes","nodeType":"ElementaryTypeName","src":"3364:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":2170,"initialValue":{"arguments":[{"id":2167,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2157,"src":"3418:4:13","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564","id":2168,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3424:34:13","typeDescriptions":{"typeIdentifier":"t_stringliteral_47fb62c2c272651d2f0f342bac006756b8ba07f21cc5cb87e0fbb9d50c0c585b","typeString":"literal_string \"SafeERC20: low-level call failed\""},"value":"SafeERC20: low-level call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_47fb62c2c272651d2f0f342bac006756b8ba07f21cc5cb87e0fbb9d50c0c585b","typeString":"literal_string \"SafeERC20: low-level call failed\""}],"expression":{"arguments":[{"id":2164,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2155,"src":"3398:5:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}],"id":2163,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3390:7:13","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2162,"name":"address","nodeType":"ElementaryTypeName","src":"3390:7:13","typeDescriptions":{}}},"id":2165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3390:14:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"functionCall","nodeType":"MemberAccess","referencedDeclaration":516,"src":"3390:27:13","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_address_$","typeString":"function (address,bytes memory,string memory) returns (bytes memory)"}},"id":2169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3390:69:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3364:95:13"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2171,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2161,"src":"3469:10:13","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3469:17:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":2173,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3489:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3469:21:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2187,"nodeType":"IfStatement","src":"3465:160:13","trueBody":{"id":2186,"nodeType":"Block","src":"3492:133:13","statements":[{"expression":{"arguments":[{"arguments":[{"id":2178,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2161,"src":"3552:10:13","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":2180,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3565:4:13","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":2179,"name":"bool","nodeType":"ElementaryTypeName","src":"3565:4:13","typeDescriptions":{}}}],"id":2181,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3564:6:13","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":2176,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3541:3:13","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2177,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"decode","nodeType":"MemberAccess","src":"3541:10:13","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":2182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3541:30:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564","id":2183,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3573:44:13","typeDescriptions":{"typeIdentifier":"t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd","typeString":"literal_string \"SafeERC20: ERC20 operation did not succeed\""},"value":"SafeERC20: ERC20 operation did not succeed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd","typeString":"literal_string \"SafeERC20: ERC20 operation did not succeed\""}],"id":2175,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3533:7:13","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3533:85:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2185,"nodeType":"ExpressionStatement","src":"3533:85:13"}]}}]},"documentation":{"id":2152,"nodeType":"StructuredDocumentation","src":"2596:362:13","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants)."},"id":2189,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturn","nameLocation":"2970:19:13","nodeType":"FunctionDefinition","parameters":{"id":2158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2155,"mutability":"mutable","name":"token","nameLocation":"2997:5:13","nodeType":"VariableDeclaration","scope":2189,"src":"2990:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":2154,"nodeType":"UserDefinedTypeName","pathNode":{"id":2153,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"2990:6:13"},"referencedDeclaration":1442,"src":"2990:6:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2157,"mutability":"mutable","name":"data","nameLocation":"3017:4:13","nodeType":"VariableDeclaration","scope":2189,"src":"3004:17:13","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2156,"name":"bytes","nodeType":"ElementaryTypeName","src":"3004:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2989:33:13"},"returnParameters":{"id":2159,"nodeType":"ParameterList","parameters":[],"src":"3031:0:13"},"scope":2190,"src":"2961:668:13","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":2191,"src":"631:3000:13","usedErrors":[]}],"src":"100:3532:13"},"id":13},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol","exportedSymbols":{"SafeMath":[2310]},"id":2311,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":2192,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:14"},{"abstract":false,"baseContracts":[],"canonicalName":"SafeMath","contractDependencies":[],"contractKind":"library","documentation":{"id":2193,"nodeType":"StructuredDocumentation","src":"62:178:14","text":"@title Optimized overflow and underflow safe math operations\n @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost"},"fullyImplemented":true,"id":2310,"linearizedBaseContracts":[2310],"name":"SafeMath","nameLocation":"248:8:14","nodeType":"ContractDefinition","nodes":[{"body":{"id":2215,"nodeType":"Block","src":"479:60:14","statements":[{"id":2214,"nodeType":"UncheckedBlock","src":"485:50:14","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"id":2208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2204,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2201,"src":"512:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2205,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2196,"src":"516:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":2206,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2198,"src":"520:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"516:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"512:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2209,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"511:11:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":2210,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2196,"src":"526:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"511:16:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2203,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"503:7:14","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":2212,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"503:25:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2213,"nodeType":"ExpressionStatement","src":"503:25:14"}]}]},"documentation":{"id":2194,"nodeType":"StructuredDocumentation","src":"261:146:14","text":"@notice Returns x + y, reverts if sum overflows uint256\n @param x The augend\n @param y The addend\n @return z The sum of x and y"},"id":2216,"implemented":true,"kind":"function","modifiers":[],"name":"add","nameLocation":"419:3:14","nodeType":"FunctionDefinition","parameters":{"id":2199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2196,"mutability":"mutable","name":"x","nameLocation":"431:1:14","nodeType":"VariableDeclaration","scope":2216,"src":"423:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2195,"name":"uint256","nodeType":"ElementaryTypeName","src":"423:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2198,"mutability":"mutable","name":"y","nameLocation":"442:1:14","nodeType":"VariableDeclaration","scope":2216,"src":"434:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2197,"name":"uint256","nodeType":"ElementaryTypeName","src":"434:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"422:22:14"},"returnParameters":{"id":2202,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2201,"mutability":"mutable","name":"z","nameLocation":"476:1:14","nodeType":"VariableDeclaration","scope":2216,"src":"468:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2200,"name":"uint256","nodeType":"ElementaryTypeName","src":"468:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"467:11:14"},"scope":2310,"src":"410:129:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2238,"nodeType":"Block","src":"762:60:14","statements":[{"id":2237,"nodeType":"UncheckedBlock","src":"768:50:14","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"id":2231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2227,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2224,"src":"795:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2228,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2219,"src":"799:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":2229,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2221,"src":"803:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"799:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"795:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2232,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"794:11:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":2233,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2219,"src":"809:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"794:16:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2226,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"786:7:14","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":2235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"786:25:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2236,"nodeType":"ExpressionStatement","src":"786:25:14"}]}]},"documentation":{"id":2217,"nodeType":"StructuredDocumentation","src":"543:147:14","text":"@notice Returns x - y, reverts if underflows\n @param x The minuend\n @param y The subtrahend\n @return z The difference of x and y"},"id":2239,"implemented":true,"kind":"function","modifiers":[],"name":"sub","nameLocation":"702:3:14","nodeType":"FunctionDefinition","parameters":{"id":2222,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2219,"mutability":"mutable","name":"x","nameLocation":"714:1:14","nodeType":"VariableDeclaration","scope":2239,"src":"706:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2218,"name":"uint256","nodeType":"ElementaryTypeName","src":"706:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2221,"mutability":"mutable","name":"y","nameLocation":"725:1:14","nodeType":"VariableDeclaration","scope":2239,"src":"717:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2220,"name":"uint256","nodeType":"ElementaryTypeName","src":"717:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"705:22:14"},"returnParameters":{"id":2225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2224,"mutability":"mutable","name":"z","nameLocation":"759:1:14","nodeType":"VariableDeclaration","scope":2239,"src":"751:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2223,"name":"uint256","nodeType":"ElementaryTypeName","src":"751:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"750:11:14"},"scope":2310,"src":"693:129:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2264,"nodeType":"Block","src":"1103:69:14","statements":[{"id":2263,"nodeType":"UncheckedBlock","src":"1109:59:14","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"id":2256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2252,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2249,"src":"1136:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2253,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2242,"src":"1140:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":2254,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2244,"src":"1144:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1140:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1136:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2257,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1135:11:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":2258,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2242,"src":"1150:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1135:16:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":2260,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2246,"src":"1153:7:14","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2251,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1127:7:14","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1127:34:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2262,"nodeType":"ExpressionStatement","src":"1127:34:14"}]}]},"documentation":{"id":2240,"nodeType":"StructuredDocumentation","src":"826:182:14","text":"@notice Returns x - y, reverts if underflows\n @param x The minuend\n @param y The subtrahend\n @param message The error msg\n @return z The difference of x and y"},"id":2265,"implemented":true,"kind":"function","modifiers":[],"name":"sub","nameLocation":"1020:3:14","nodeType":"FunctionDefinition","parameters":{"id":2247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2242,"mutability":"mutable","name":"x","nameLocation":"1032:1:14","nodeType":"VariableDeclaration","scope":2265,"src":"1024:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2241,"name":"uint256","nodeType":"ElementaryTypeName","src":"1024:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2244,"mutability":"mutable","name":"y","nameLocation":"1043:1:14","nodeType":"VariableDeclaration","scope":2265,"src":"1035:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2243,"name":"uint256","nodeType":"ElementaryTypeName","src":"1035:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2246,"mutability":"mutable","name":"message","nameLocation":"1060:7:14","nodeType":"VariableDeclaration","scope":2265,"src":"1046:21:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2245,"name":"string","nodeType":"ElementaryTypeName","src":"1046:6:14","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1023:45:14"},"returnParameters":{"id":2250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2249,"mutability":"mutable","name":"z","nameLocation":"1100:1:14","nodeType":"VariableDeclaration","scope":2265,"src":"1092:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2248,"name":"uint256","nodeType":"ElementaryTypeName","src":"1092:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1091:11:14"},"scope":2310,"src":"1011:161:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2293,"nodeType":"Block","src":"1396:74:14","statements":[{"id":2292,"nodeType":"UncheckedBlock","src":"1402:64:14","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2276,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2268,"src":"1428:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2277,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1433:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1428:6:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"id":2283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2279,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2273,"src":"1439:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2280,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2268,"src":"1443:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2281,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2270,"src":"1447:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1443:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1439:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2284,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1438:11:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":2285,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2268,"src":"1452:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1438:15:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2287,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2270,"src":"1457:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1438:20:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1428:30:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2275,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1420:7:14","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":2290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1420:39:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2291,"nodeType":"ExpressionStatement","src":"1420:39:14"}]}]},"documentation":{"id":2266,"nodeType":"StructuredDocumentation","src":"1176:148:14","text":"@notice Returns x * y, reverts if overflows\n @param x The multiplicand\n @param y The multiplier\n @return z The product of x and y"},"id":2294,"implemented":true,"kind":"function","modifiers":[],"name":"mul","nameLocation":"1336:3:14","nodeType":"FunctionDefinition","parameters":{"id":2271,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2268,"mutability":"mutable","name":"x","nameLocation":"1348:1:14","nodeType":"VariableDeclaration","scope":2294,"src":"1340:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2267,"name":"uint256","nodeType":"ElementaryTypeName","src":"1340:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2270,"mutability":"mutable","name":"y","nameLocation":"1359:1:14","nodeType":"VariableDeclaration","scope":2294,"src":"1351:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2269,"name":"uint256","nodeType":"ElementaryTypeName","src":"1351:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1339:22:14"},"returnParameters":{"id":2274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2273,"mutability":"mutable","name":"z","nameLocation":"1393:1:14","nodeType":"VariableDeclaration","scope":2294,"src":"1385:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2272,"name":"uint256","nodeType":"ElementaryTypeName","src":"1385:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1384:11:14"},"scope":2310,"src":"1327:143:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2308,"nodeType":"Block","src":"1747:23:14","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2304,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2297,"src":"1760:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":2305,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2299,"src":"1764:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1760:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2303,"id":2307,"nodeType":"Return","src":"1753:12:14"}]},"documentation":{"id":2295,"nodeType":"StructuredDocumentation","src":"1474:201:14","text":"@notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\n @param x The numerator\n @param y The denominator\n @return z The product of x and y"},"id":2309,"implemented":true,"kind":"function","modifiers":[],"name":"div","nameLocation":"1687:3:14","nodeType":"FunctionDefinition","parameters":{"id":2300,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2297,"mutability":"mutable","name":"x","nameLocation":"1699:1:14","nodeType":"VariableDeclaration","scope":2309,"src":"1691:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2296,"name":"uint256","nodeType":"ElementaryTypeName","src":"1691:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2299,"mutability":"mutable","name":"y","nameLocation":"1710:1:14","nodeType":"VariableDeclaration","scope":2309,"src":"1702:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2298,"name":"uint256","nodeType":"ElementaryTypeName","src":"1702:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1690:22:14"},"returnParameters":{"id":2303,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2302,"mutability":"mutable","name":"z","nameLocation":"1744:1:14","nodeType":"VariableDeclaration","scope":2309,"src":"1736:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2301,"name":"uint256","nodeType":"ElementaryTypeName","src":"1736:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1735:11:14"},"scope":2310,"src":"1678:92:14","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":2311,"src":"240:1532:14","usedErrors":[]}],"src":"37:1736:14"},"id":14},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Strings.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Strings.sol","exportedSymbols":{"Strings":[2513]},"id":2514,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2312,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"33:23:15"},{"abstract":false,"baseContracts":[],"canonicalName":"Strings","contractDependencies":[],"contractKind":"library","documentation":{"id":2313,"nodeType":"StructuredDocumentation","src":"58:34:15","text":" @dev String operations."},"fullyImplemented":true,"id":2513,"linearizedBaseContracts":[2513],"name":"Strings","nameLocation":"101:7:15","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":2316,"mutability":"constant","name":"_HEX_SYMBOLS","nameLocation":"138:12:15","nodeType":"VariableDeclaration","scope":2513,"src":"113:58:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"typeName":{"id":2314,"name":"bytes16","nodeType":"ElementaryTypeName","src":"113:7:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"value":{"hexValue":"30313233343536373839616263646566","id":2315,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"153:18:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_cb29997ed99ead0db59ce4d12b7d3723198c827273e5796737c926d78019c39f","typeString":"literal_string \"0123456789abcdef\""},"value":"0123456789abcdef"},"visibility":"private"},{"body":{"id":2394,"nodeType":"Block","src":"336:546:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2324,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"526:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2325,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"535:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"526:10:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2330,"nodeType":"IfStatement","src":"522:41:15","trueBody":{"id":2329,"nodeType":"Block","src":"538:25:15","statements":[{"expression":{"hexValue":"30","id":2327,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"553:3:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d","typeString":"literal_string \"0\""},"value":"0"},"functionReturnParameters":2323,"id":2328,"nodeType":"Return","src":"546:10:15"}]}},{"assignments":[2332],"declarations":[{"constant":false,"id":2332,"mutability":"mutable","name":"temp","nameLocation":"576:4:15","nodeType":"VariableDeclaration","scope":2394,"src":"568:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2331,"name":"uint256","nodeType":"ElementaryTypeName","src":"568:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2334,"initialValue":{"id":2333,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"583:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"568:20:15"},{"assignments":[2336],"declarations":[{"constant":false,"id":2336,"mutability":"mutable","name":"digits","nameLocation":"602:6:15","nodeType":"VariableDeclaration","scope":2394,"src":"594:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2335,"name":"uint256","nodeType":"ElementaryTypeName","src":"594:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2337,"nodeType":"VariableDeclarationStatement","src":"594:14:15"},{"body":{"id":2348,"nodeType":"Block","src":"632:41:15","statements":[{"expression":{"id":2342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"640:8:15","subExpression":{"id":2341,"name":"digits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2336,"src":"640:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2343,"nodeType":"ExpressionStatement","src":"640:8:15"},{"expression":{"id":2346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2344,"name":"temp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2332,"src":"656:4:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"hexValue":"3130","id":2345,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"664:2:15","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"656:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2347,"nodeType":"ExpressionStatement","src":"656:10:15"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2338,"name":"temp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2332,"src":"621:4:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":2339,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"629:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"621:9:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2349,"nodeType":"WhileStatement","src":"614:59:15"},{"assignments":[2351],"declarations":[{"constant":false,"id":2351,"mutability":"mutable","name":"buffer","nameLocation":"691:6:15","nodeType":"VariableDeclaration","scope":2394,"src":"678:19:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2350,"name":"bytes","nodeType":"ElementaryTypeName","src":"678:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":2356,"initialValue":{"arguments":[{"id":2354,"name":"digits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2336,"src":"710:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2353,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"700:9:15","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":2352,"name":"bytes","nodeType":"ElementaryTypeName","src":"704:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":2355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"700:17:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"678:39:15"},{"body":{"id":2387,"nodeType":"Block","src":"742:109:15","statements":[{"expression":{"id":2362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2360,"name":"digits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2336,"src":"750:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"hexValue":"31","id":2361,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"760:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"750:11:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2363,"nodeType":"ExpressionStatement","src":"750:11:15"},{"expression":{"id":2381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":2364,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2351,"src":"769:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2366,"indexExpression":{"id":2365,"name":"digits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2336,"src":"776:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"769:14:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3438","id":2371,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"799:2:15","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2374,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"812:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"hexValue":"3130","id":2375,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"820:2:15","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"812:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2373,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"804:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2372,"name":"uint256","nodeType":"ElementaryTypeName","src":"804:7:15","typeDescriptions":{}}},"id":2377,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"804:19:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"799:24:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2370,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"793:5:15","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":2369,"name":"uint8","nodeType":"ElementaryTypeName","src":"793:5:15","typeDescriptions":{}}},"id":2379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"793:31:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":2368,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"786:6:15","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":2367,"name":"bytes1","nodeType":"ElementaryTypeName","src":"786:6:15","typeDescriptions":{}}},"id":2380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"786:39:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"769:56:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":2382,"nodeType":"ExpressionStatement","src":"769:56:15"},{"expression":{"id":2385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2383,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"833:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"hexValue":"3130","id":2384,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"842:2:15","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"833:11:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2386,"nodeType":"ExpressionStatement","src":"833:11:15"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2357,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2319,"src":"730:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":2358,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"739:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"730:10:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2388,"nodeType":"WhileStatement","src":"723:128:15"},{"expression":{"arguments":[{"id":2391,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2351,"src":"870:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2390,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"863:6:15","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":2389,"name":"string","nodeType":"ElementaryTypeName","src":"863:6:15","typeDescriptions":{}}},"id":2392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"863:14:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":2323,"id":2393,"nodeType":"Return","src":"856:21:15"}]},"documentation":{"id":2317,"nodeType":"StructuredDocumentation","src":"176:86:15","text":" @dev Converts a `uint256` to its ASCII `string` decimal representation."},"id":2395,"implemented":true,"kind":"function","modifiers":[],"name":"toString","nameLocation":"274:8:15","nodeType":"FunctionDefinition","parameters":{"id":2320,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2319,"mutability":"mutable","name":"value","nameLocation":"291:5:15","nodeType":"VariableDeclaration","scope":2395,"src":"283:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2318,"name":"uint256","nodeType":"ElementaryTypeName","src":"283:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"282:15:15"},"returnParameters":{"id":2323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2322,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2395,"src":"321:13:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2321,"name":"string","nodeType":"ElementaryTypeName","src":"321:6:15","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"320:15:15"},"scope":2513,"src":"265:617:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2435,"nodeType":"Block","src":"1053:207:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2403,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2398,"src":"1063:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2404,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1072:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1063:10:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2409,"nodeType":"IfStatement","src":"1059:44:15","trueBody":{"id":2408,"nodeType":"Block","src":"1075:28:15","statements":[{"expression":{"hexValue":"30783030","id":2406,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1090:6:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_27489e20a0060b723a1748bdff5e44570ee9fae64141728105692eac6031e8a4","typeString":"literal_string \"0x00\""},"value":"0x00"},"functionReturnParameters":2402,"id":2407,"nodeType":"Return","src":"1083:13:15"}]}},{"assignments":[2411],"declarations":[{"constant":false,"id":2411,"mutability":"mutable","name":"temp","nameLocation":"1116:4:15","nodeType":"VariableDeclaration","scope":2435,"src":"1108:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2410,"name":"uint256","nodeType":"ElementaryTypeName","src":"1108:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2413,"initialValue":{"id":2412,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2398,"src":"1123:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1108:20:15"},{"assignments":[2415],"declarations":[{"constant":false,"id":2415,"mutability":"mutable","name":"length","nameLocation":"1142:6:15","nodeType":"VariableDeclaration","scope":2435,"src":"1134:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2414,"name":"uint256","nodeType":"ElementaryTypeName","src":"1134:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2417,"initialValue":{"hexValue":"30","id":2416,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1151:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1134:18:15"},{"body":{"id":2428,"nodeType":"Block","src":"1176:41:15","statements":[{"expression":{"id":2422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1184:8:15","subExpression":{"id":2421,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2415,"src":"1184:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2423,"nodeType":"ExpressionStatement","src":"1184:8:15"},{"expression":{"id":2426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2424,"name":"temp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2411,"src":"1200:4:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"38","id":2425,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1209:1:15","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"1200:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2427,"nodeType":"ExpressionStatement","src":"1200:10:15"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2418,"name":"temp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2411,"src":"1165:4:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":2419,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1173:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1165:9:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2429,"nodeType":"WhileStatement","src":"1158:59:15"},{"expression":{"arguments":[{"id":2431,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2398,"src":"1241:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2432,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2415,"src":"1248:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2430,"name":"toHexString","nodeType":"Identifier","overloadedDeclarations":[2436,2512],"referencedDeclaration":2512,"src":"1229:11:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (string memory)"}},"id":2433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1229:26:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":2402,"id":2434,"nodeType":"Return","src":"1222:33:15"}]},"documentation":{"id":2396,"nodeType":"StructuredDocumentation","src":"886:90:15","text":" @dev Converts a `uint256` to its ASCII `string` hexadecimal representation."},"id":2436,"implemented":true,"kind":"function","modifiers":[],"name":"toHexString","nameLocation":"988:11:15","nodeType":"FunctionDefinition","parameters":{"id":2399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2398,"mutability":"mutable","name":"value","nameLocation":"1008:5:15","nodeType":"VariableDeclaration","scope":2436,"src":"1000:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2397,"name":"uint256","nodeType":"ElementaryTypeName","src":"1000:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"999:15:15"},"returnParameters":{"id":2402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2401,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2436,"src":"1038:13:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2400,"name":"string","nodeType":"ElementaryTypeName","src":"1038:6:15","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1037:15:15"},"scope":2513,"src":"979:281:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2511,"nodeType":"Block","src":"1465:309:15","statements":[{"assignments":[2447],"declarations":[{"constant":false,"id":2447,"mutability":"mutable","name":"buffer","nameLocation":"1484:6:15","nodeType":"VariableDeclaration","scope":2511,"src":"1471:19:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2446,"name":"bytes","nodeType":"ElementaryTypeName","src":"1471:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":2456,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":2450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1503:1:15","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2451,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2441,"src":"1507:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1503:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"32","id":2453,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1516:1:15","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"1503:14:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2449,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1493:9:15","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":2448,"name":"bytes","nodeType":"ElementaryTypeName","src":"1497:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":2455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1493:25:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"1471:47:15"},{"expression":{"id":2461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":2457,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2447,"src":"1524:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2459,"indexExpression":{"hexValue":"30","id":2458,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1531:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1524:9:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":2460,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1536:3:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d","typeString":"literal_string \"0\""},"value":"0"},"src":"1524:15:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":2462,"nodeType":"ExpressionStatement","src":"1524:15:15"},{"expression":{"id":2467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":2463,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2447,"src":"1545:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2465,"indexExpression":{"hexValue":"31","id":2464,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1552:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1545:9:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"78","id":2466,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1557:3:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_7521d1cadbcfa91eec65aa16715b94ffc1c9654ba57ea2ef1a2127bca1127a83","typeString":"literal_string \"x\""},"value":"x"},"src":"1545:15:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":2468,"nodeType":"ExpressionStatement","src":"1545:15:15"},{"body":{"id":2497,"nodeType":"Block","src":"1611:71:15","statements":[{"expression":{"id":2491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":2483,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2447,"src":"1619:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2485,"indexExpression":{"id":2484,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2470,"src":"1626:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1619:9:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":2486,"name":"_HEX_SYMBOLS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2316,"src":"1631:12:15","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"id":2490,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2487,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2439,"src":"1644:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307866","id":2488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1652:3:15","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"0xf"},"src":"1644:11:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1631:25:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"1619:37:15","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":2492,"nodeType":"ExpressionStatement","src":"1619:37:15"},{"expression":{"id":2495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2493,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2439,"src":"1664:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"34","id":2494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1674:1:15","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"1664:11:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2496,"nodeType":"ExpressionStatement","src":"1664:11:15"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2477,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2470,"src":"1599:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"31","id":2478,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1603:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1599:5:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2498,"initializationExpression":{"assignments":[2470],"declarations":[{"constant":false,"id":2470,"mutability":"mutable","name":"i","nameLocation":"1579:1:15","nodeType":"VariableDeclaration","scope":2498,"src":"1571:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2469,"name":"uint256","nodeType":"ElementaryTypeName","src":"1571:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2476,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":2471,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1583:1:15","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2472,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2441,"src":"1587:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1583:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2474,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1596:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1583:14:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1571:26:15"},"loopExpression":{"expression":{"id":2481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":true,"src":"1606:3:15","subExpression":{"id":2480,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2470,"src":"1608:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2482,"nodeType":"ExpressionStatement","src":"1606:3:15"},"nodeType":"ForStatement","src":"1566:116:15"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2500,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2439,"src":"1695:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2501,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1704:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1695:10:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"537472696e67733a20686578206c656e67746820696e73756666696369656e74","id":2503,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1707:34:15","typeDescriptions":{"typeIdentifier":"t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2","typeString":"literal_string \"Strings: hex length insufficient\""},"value":"Strings: hex length insufficient"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2","typeString":"literal_string \"Strings: hex length insufficient\""}],"id":2499,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1687:7:15","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1687:55:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2505,"nodeType":"ExpressionStatement","src":"1687:55:15"},{"expression":{"arguments":[{"id":2508,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2447,"src":"1762:6:15","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2507,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1755:6:15","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":2506,"name":"string","nodeType":"ElementaryTypeName","src":"1755:6:15","typeDescriptions":{}}},"id":2509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1755:14:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":2445,"id":2510,"nodeType":"Return","src":"1748:21:15"}]},"documentation":{"id":2437,"nodeType":"StructuredDocumentation","src":"1264:108:15","text":" @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length."},"id":2512,"implemented":true,"kind":"function","modifiers":[],"name":"toHexString","nameLocation":"1384:11:15","nodeType":"FunctionDefinition","parameters":{"id":2442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2439,"mutability":"mutable","name":"value","nameLocation":"1404:5:15","nodeType":"VariableDeclaration","scope":2512,"src":"1396:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2438,"name":"uint256","nodeType":"ElementaryTypeName","src":"1396:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2441,"mutability":"mutable","name":"length","nameLocation":"1419:6:15","nodeType":"VariableDeclaration","scope":2512,"src":"1411:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2440,"name":"uint256","nodeType":"ElementaryTypeName","src":"1411:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1395:31:15"},"returnParameters":{"id":2445,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2444,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2512,"src":"1450:13:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2443,"name":"string","nodeType":"ElementaryTypeName","src":"1450:6:15","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1449:15:15"},"scope":2513,"src":"1375:399:15","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":2514,"src":"93:1683:15","usedErrors":[]}],"src":"33:1744:15"},"id":15},"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol","exportedSymbols":{"Address":[722],"BaseAdminUpgradeabilityProxy":[2683],"BaseUpgradeabilityProxy":[2748],"Proxy":[2926],"UpgradeabilityProxy":[2979]},"id":2684,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":2515,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:16"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol","file":"./UpgradeabilityProxy.sol","id":2516,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2684,"sourceUnit":2980,"src":"62:35:16","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2518,"name":"BaseUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":2748,"src":"503:23:16"},"id":2519,"nodeType":"InheritanceSpecifier","src":"503:23:16"}],"canonicalName":"BaseAdminUpgradeabilityProxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":2517,"nodeType":"StructuredDocumentation","src":"99:362:16","text":" @title BaseAdminUpgradeabilityProxy\n @dev This contract combines an upgradeability proxy with an authorization\n mechanism for administrative tasks.\n All external functions in this contract must be guarded by the\n `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\n feature proposal that would enable this to be done automatically."},"fullyImplemented":true,"id":2683,"linearizedBaseContracts":[2683,2748,2926],"name":"BaseAdminUpgradeabilityProxy","nameLocation":"471:28:16","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":2520,"nodeType":"StructuredDocumentation","src":"531:177:16","text":" @dev Emitted when the administration has been transferred.\n @param previousAdmin Address of the previous admin.\n @param newAdmin Address of the new admin."},"id":2526,"name":"AdminChanged","nameLocation":"717:12:16","nodeType":"EventDefinition","parameters":{"id":2525,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2522,"indexed":false,"mutability":"mutable","name":"previousAdmin","nameLocation":"738:13:16","nodeType":"VariableDeclaration","scope":2526,"src":"730:21:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2521,"name":"address","nodeType":"ElementaryTypeName","src":"730:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2524,"indexed":false,"mutability":"mutable","name":"newAdmin","nameLocation":"761:8:16","nodeType":"VariableDeclaration","scope":2526,"src":"753:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2523,"name":"address","nodeType":"ElementaryTypeName","src":"753:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"729:41:16"},"src":"711:60:16"},{"constant":true,"documentation":{"id":2527,"nodeType":"StructuredDocumentation","src":"775:181:16","text":" @dev Storage slot with the admin of the contract.\n This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n validated in the constructor."},"id":2530,"mutability":"constant","name":"ADMIN_SLOT","nameLocation":"985:10:16","nodeType":"VariableDeclaration","scope":2683,"src":"959:109:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2528,"name":"bytes32","nodeType":"ElementaryTypeName","src":"959:7:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307862353331323736383461353638623331373361653133623966386136303136653234336536336236653865653131373864366137313738353062356436313033","id":2529,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1002:66:16","typeDescriptions":{"typeIdentifier":"t_rational_81955473079516046949633743016697847541294818689821282749996681496272635257091_by_1","typeString":"int_const 8195...(69 digits omitted)...7091"},"value":"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"},"visibility":"internal"},{"body":{"id":2545,"nodeType":"Block","src":"1277:86:16","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2533,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1287:3:16","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1287:10:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":2535,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2650,"src":"1301:6:16","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":2536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1301:8:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1287:22:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2543,"nodeType":"Block","src":"1333:26:16","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2540,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2925,"src":"1341:9:16","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1341:11:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2542,"nodeType":"ExpressionStatement","src":"1341:11:16"}]},"id":2544,"nodeType":"IfStatement","src":"1283:76:16","trueBody":{"id":2539,"nodeType":"Block","src":"1311:16:16","statements":[{"id":2538,"nodeType":"PlaceholderStatement","src":"1319:1:16"}]}}]},"documentation":{"id":2531,"nodeType":"StructuredDocumentation","src":"1073:182:16","text":" @dev Modifier to check whether the `msg.sender` is the admin.\n If it is, it will run the function. Otherwise, it will delegate the call\n to the implementation."},"id":2546,"name":"ifAdmin","nameLocation":"1267:7:16","nodeType":"ModifierDefinition","parameters":{"id":2532,"nodeType":"ParameterList","parameters":[],"src":"1274:2:16"},"src":"1258:105:16","virtual":false,"visibility":"internal"},{"body":{"id":2557,"nodeType":"Block","src":"1476:26:16","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2554,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2650,"src":"1489:6:16","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":2555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1489:8:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":2553,"id":2556,"nodeType":"Return","src":"1482:15:16"}]},"documentation":{"id":2547,"nodeType":"StructuredDocumentation","src":"1367:54:16","text":" @return The address of the proxy admin."},"functionSelector":"f851a440","id":2558,"implemented":true,"kind":"function","modifiers":[{"id":2550,"kind":"modifierInvocation","modifierName":{"id":2549,"name":"ifAdmin","nodeType":"IdentifierPath","referencedDeclaration":2546,"src":"1450:7:16"},"nodeType":"ModifierInvocation","src":"1450:7:16"}],"name":"admin","nameLocation":"1433:5:16","nodeType":"FunctionDefinition","parameters":{"id":2548,"nodeType":"ParameterList","parameters":[],"src":"1438:2:16"},"returnParameters":{"id":2553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2552,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2558,"src":"1467:7:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2551,"name":"address","nodeType":"ElementaryTypeName","src":"1467:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1466:9:16"},"scope":2683,"src":"1424:78:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":2569,"nodeType":"Block","src":"1627:35:16","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2566,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[2712],"referencedDeclaration":2712,"src":"1640:15:16","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":2567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1640:17:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":2565,"id":2568,"nodeType":"Return","src":"1633:24:16"}]},"documentation":{"id":2559,"nodeType":"StructuredDocumentation","src":"1506:57:16","text":" @return The address of the implementation."},"functionSelector":"5c60da1b","id":2570,"implemented":true,"kind":"function","modifiers":[{"id":2562,"kind":"modifierInvocation","modifierName":{"id":2561,"name":"ifAdmin","nodeType":"IdentifierPath","referencedDeclaration":2546,"src":"1601:7:16"},"nodeType":"ModifierInvocation","src":"1601:7:16"}],"name":"implementation","nameLocation":"1575:14:16","nodeType":"FunctionDefinition","parameters":{"id":2560,"nodeType":"ParameterList","parameters":[],"src":"1589:2:16"},"returnParameters":{"id":2565,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2564,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2570,"src":"1618:7:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2563,"name":"address","nodeType":"ElementaryTypeName","src":"1618:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1617:9:16"},"scope":2683,"src":"1566:96:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":2598,"nodeType":"Block","src":"1894:168:16","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2579,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2573,"src":"1908:8:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":2582,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1928:1:16","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":2581,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1920:7:16","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2580,"name":"address","nodeType":"ElementaryTypeName","src":"1920:7:16","typeDescriptions":{}}},"id":2583,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1920:10:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1908:22:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f787920746f20746865207a65726f2061646472657373","id":2585,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1932:56:16","typeDescriptions":{"typeIdentifier":"t_stringliteral_37112268ceb11e15373f32f9374a1f3287d0a3e6e5a9a435ac06367e6cd0cf00","typeString":"literal_string \"Cannot change the admin of a proxy to the zero address\""},"value":"Cannot change the admin of a proxy to the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_37112268ceb11e15373f32f9374a1f3287d0a3e6e5a9a435ac06367e6cd0cf00","typeString":"literal_string \"Cannot change the admin of a proxy to the zero address\""}],"id":2578,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1900:7:16","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1900:89:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2587,"nodeType":"ExpressionStatement","src":"1900:89:16"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":2589,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2650,"src":"2013:6:16","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":2590,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2013:8:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2591,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2573,"src":"2023:8:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2588,"name":"AdminChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2526,"src":"2000:12:16","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":2592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2000:32:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2593,"nodeType":"EmitStatement","src":"1995:37:16"},{"expression":{"arguments":[{"id":2595,"name":"newAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2573,"src":"2048:8:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2594,"name":"_setAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2662,"src":"2038:9:16","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2038:19:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2597,"nodeType":"ExpressionStatement","src":"2038:19:16"}]},"documentation":{"id":2571,"nodeType":"StructuredDocumentation","src":"1666:169:16","text":" @dev Changes the admin of the proxy.\n Only the current admin can call this function.\n @param newAdmin Address to transfer proxy administration to."},"functionSelector":"8f283970","id":2599,"implemented":true,"kind":"function","modifiers":[{"id":2576,"kind":"modifierInvocation","modifierName":{"id":2575,"name":"ifAdmin","nodeType":"IdentifierPath","referencedDeclaration":2546,"src":"1886:7:16"},"nodeType":"ModifierInvocation","src":"1886:7:16"}],"name":"changeAdmin","nameLocation":"1847:11:16","nodeType":"FunctionDefinition","parameters":{"id":2574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2573,"mutability":"mutable","name":"newAdmin","nameLocation":"1867:8:16","nodeType":"VariableDeclaration","scope":2599,"src":"1859:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2572,"name":"address","nodeType":"ElementaryTypeName","src":"1859:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1858:18:16"},"returnParameters":{"id":2577,"nodeType":"ParameterList","parameters":[],"src":"1894:0:16"},"scope":2683,"src":"1838:224:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":2611,"nodeType":"Block","src":"2309:40:16","statements":[{"expression":{"arguments":[{"id":2608,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2602,"src":"2326:17:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2607,"name":"_upgradeTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2727,"src":"2315:10:16","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2609,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2315:29:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2610,"nodeType":"ExpressionStatement","src":"2315:29:16"}]},"documentation":{"id":2600,"nodeType":"StructuredDocumentation","src":"2066:177:16","text":" @dev Upgrade the backing implementation of the proxy.\n Only the admin can call this function.\n @param newImplementation Address of the new implementation."},"functionSelector":"3659cfe6","id":2612,"implemented":true,"kind":"function","modifiers":[{"id":2605,"kind":"modifierInvocation","modifierName":{"id":2604,"name":"ifAdmin","nodeType":"IdentifierPath","referencedDeclaration":2546,"src":"2301:7:16"},"nodeType":"ModifierInvocation","src":"2301:7:16"}],"name":"upgradeTo","nameLocation":"2255:9:16","nodeType":"FunctionDefinition","parameters":{"id":2603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2602,"mutability":"mutable","name":"newImplementation","nameLocation":"2273:17:16","nodeType":"VariableDeclaration","scope":2612,"src":"2265:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2601,"name":"address","nodeType":"ElementaryTypeName","src":"2265:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2264:27:16"},"returnParameters":{"id":2606,"nodeType":"ParameterList","parameters":[],"src":"2309:0:16"},"scope":2683,"src":"2246:103:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":2637,"nodeType":"Block","src":"2977:123:16","statements":[{"expression":{"arguments":[{"id":2623,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2615,"src":"2994:17:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2622,"name":"_upgradeTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2727,"src":"2983:10:16","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2624,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2983:29:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2625,"nodeType":"ExpressionStatement","src":"2983:29:16"},{"assignments":[2627,null],"declarations":[{"constant":false,"id":2627,"mutability":"mutable","name":"success","nameLocation":"3024:7:16","nodeType":"VariableDeclaration","scope":2637,"src":"3019:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2626,"name":"bool","nodeType":"ElementaryTypeName","src":"3019:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":2632,"initialValue":{"arguments":[{"id":2630,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2617,"src":"3068:4:16","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":2628,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2615,"src":"3037:17:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"delegatecall","nodeType":"MemberAccess","src":"3037:30:16","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":2631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3037:36:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3018:55:16"},{"expression":{"arguments":[{"id":2634,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2627,"src":"3087:7:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2633,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3079:7:16","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":2635,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3079:16:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2636,"nodeType":"ExpressionStatement","src":"3079:16:16"}]},"documentation":{"id":2613,"nodeType":"StructuredDocumentation","src":"2353:510:16","text":" @dev Upgrade the backing implementation of the proxy and call a function\n on the new implementation.\n This is useful to initialize the proxied contract.\n @param newImplementation Address of the new implementation.\n @param data Data to send as msg.data in the low level call.\n It should include the signature and the parameters of the function to be called, as described in\n https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding."},"functionSelector":"4f1ef286","id":2638,"implemented":true,"kind":"function","modifiers":[{"id":2620,"kind":"modifierInvocation","modifierName":{"id":2619,"name":"ifAdmin","nodeType":"IdentifierPath","referencedDeclaration":2546,"src":"2969:7:16"},"nodeType":"ModifierInvocation","src":"2969:7:16"}],"name":"upgradeToAndCall","nameLocation":"2875:16:16","nodeType":"FunctionDefinition","parameters":{"id":2618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2615,"mutability":"mutable","name":"newImplementation","nameLocation":"2905:17:16","nodeType":"VariableDeclaration","scope":2638,"src":"2897:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2614,"name":"address","nodeType":"ElementaryTypeName","src":"2897:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2617,"mutability":"mutable","name":"data","nameLocation":"2943:4:16","nodeType":"VariableDeclaration","scope":2638,"src":"2928:19:16","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2616,"name":"bytes","nodeType":"ElementaryTypeName","src":"2928:5:16","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2891:60:16"},"returnParameters":{"id":2621,"nodeType":"ParameterList","parameters":[],"src":"2977:0:16"},"scope":2683,"src":"2866:234:16","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":2649,"nodeType":"Block","src":"3203:113:16","statements":[{"assignments":[2645],"declarations":[{"constant":false,"id":2645,"mutability":"mutable","name":"slot","nameLocation":"3217:4:16","nodeType":"VariableDeclaration","scope":2649,"src":"3209:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2644,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3209:7:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2647,"initialValue":{"id":2646,"name":"ADMIN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2530,"src":"3224:10:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3209:25:16"},{"AST":{"nodeType":"YulBlock","src":"3280:32:16","statements":[{"nodeType":"YulAssignment","src":"3288:18:16","value":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"3301:4:16"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"3295:5:16"},"nodeType":"YulFunctionCall","src":"3295:11:16"},"variableNames":[{"name":"adm","nodeType":"YulIdentifier","src":"3288:3:16"}]}]},"evmVersion":"london","externalReferences":[{"declaration":2642,"isOffset":false,"isSlot":false,"src":"3288:3:16","valueSize":1},{"declaration":2645,"isOffset":false,"isSlot":false,"src":"3301:4:16","valueSize":1}],"id":2648,"nodeType":"InlineAssembly","src":"3271:41:16"}]},"documentation":{"id":2639,"nodeType":"StructuredDocumentation","src":"3104:42:16","text":" @return adm The admin slot."},"id":2650,"implemented":true,"kind":"function","modifiers":[],"name":"_admin","nameLocation":"3158:6:16","nodeType":"FunctionDefinition","parameters":{"id":2640,"nodeType":"ParameterList","parameters":[],"src":"3164:2:16"},"returnParameters":{"id":2643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2642,"mutability":"mutable","name":"adm","nameLocation":"3198:3:16","nodeType":"VariableDeclaration","scope":2650,"src":"3190:11:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2641,"name":"address","nodeType":"ElementaryTypeName","src":"3190:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3189:13:16"},"scope":2683,"src":"3149:167:16","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2661,"nodeType":"Block","src":"3478:117:16","statements":[{"assignments":[2657],"declarations":[{"constant":false,"id":2657,"mutability":"mutable","name":"slot","nameLocation":"3492:4:16","nodeType":"VariableDeclaration","scope":2661,"src":"3484:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2656,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3484:7:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2659,"initialValue":{"id":2658,"name":"ADMIN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2530,"src":"3499:10:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3484:25:16"},{"AST":{"nodeType":"YulBlock","src":"3555:36:16","statements":[{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"3570:4:16"},{"name":"newAdmin","nodeType":"YulIdentifier","src":"3576:8:16"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"3563:6:16"},"nodeType":"YulFunctionCall","src":"3563:22:16"},"nodeType":"YulExpressionStatement","src":"3563:22:16"}]},"evmVersion":"london","externalReferences":[{"declaration":2653,"isOffset":false,"isSlot":false,"src":"3576:8:16","valueSize":1},{"declaration":2657,"isOffset":false,"isSlot":false,"src":"3570:4:16","valueSize":1}],"id":2660,"nodeType":"InlineAssembly","src":"3546:45:16"}]},"documentation":{"id":2651,"nodeType":"StructuredDocumentation","src":"3320:109:16","text":" @dev Sets the address of the proxy admin.\n @param newAdmin Address of the new proxy admin."},"id":2662,"implemented":true,"kind":"function","modifiers":[],"name":"_setAdmin","nameLocation":"3441:9:16","nodeType":"FunctionDefinition","parameters":{"id":2654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2653,"mutability":"mutable","name":"newAdmin","nameLocation":"3459:8:16","nodeType":"VariableDeclaration","scope":2662,"src":"3451:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2652,"name":"address","nodeType":"ElementaryTypeName","src":"3451:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3450:18:16"},"returnParameters":{"id":2655,"nodeType":"ParameterList","parameters":[],"src":"3478:0:16"},"scope":2683,"src":"3432:163:16","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[2912],"body":{"id":2681,"nodeType":"Block","src":"3721:123:16","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2668,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3735:3:16","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3735:10:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":2670,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2650,"src":"3749:6:16","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":2671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3749:8:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3735:22:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e","id":2673,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3759:52:16","typeDescriptions":{"typeIdentifier":"t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9","typeString":"literal_string \"Cannot call fallback function from the proxy admin\""},"value":"Cannot call fallback function from the proxy admin"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9","typeString":"literal_string \"Cannot call fallback function from the proxy admin\""}],"id":2667,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3727:7:16","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3727:85:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2675,"nodeType":"ExpressionStatement","src":"3727:85:16"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":2676,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"3818:5:16","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_BaseAdminUpgradeabilityProxy_$2683_$","typeString":"type(contract super BaseAdminUpgradeabilityProxy)"}},"id":2678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_willFallback","nodeType":"MemberAccess","referencedDeclaration":2912,"src":"3818:19:16","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3818:21:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2680,"nodeType":"ExpressionStatement","src":"3818:21:16"}]},"documentation":{"id":2663,"nodeType":"StructuredDocumentation","src":"3599:68:16","text":" @dev Only fall back when the sender is not the admin."},"id":2682,"implemented":true,"kind":"function","modifiers":[],"name":"_willFallback","nameLocation":"3679:13:16","nodeType":"FunctionDefinition","overrides":{"id":2665,"nodeType":"OverrideSpecifier","overrides":[],"src":"3712:8:16"},"parameters":{"id":2664,"nodeType":"ParameterList","parameters":[],"src":"3692:2:16"},"returnParameters":{"id":2666,"nodeType":"ParameterList","parameters":[],"src":"3721:0:16"},"scope":2683,"src":"3670:174:16","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":2684,"src":"462:3384:16","usedErrors":[]}],"src":"37:3810:16"},"id":16},"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol","exportedSymbols":{"Address":[722],"BaseUpgradeabilityProxy":[2748],"Proxy":[2926]},"id":2749,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":2685,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:17"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol","file":"./Proxy.sol","id":2686,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2749,"sourceUnit":2927,"src":"62:21:17","symbolAliases":[],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol","file":"../contracts/Address.sol","id":2687,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2749,"sourceUnit":723,"src":"84:34:17","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2689,"name":"Proxy","nodeType":"IdentifierPath","referencedDeclaration":2926,"src":"372:5:17"},"id":2690,"nodeType":"InheritanceSpecifier","src":"372:5:17"}],"canonicalName":"BaseUpgradeabilityProxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":2688,"nodeType":"StructuredDocumentation","src":"120:215:17","text":" @title BaseUpgradeabilityProxy\n @dev This contract implements a proxy that allows to change the\n implementation address to which it will delegate.\n Such a change is called an implementation upgrade."},"fullyImplemented":true,"id":2748,"linearizedBaseContracts":[2748,2926],"name":"BaseUpgradeabilityProxy","nameLocation":"345:23:17","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":2691,"nodeType":"StructuredDocumentation","src":"382:126:17","text":" @dev Emitted when the implementation is upgraded.\n @param implementation Address of the new implementation."},"id":2695,"name":"Upgraded","nameLocation":"517:8:17","nodeType":"EventDefinition","parameters":{"id":2694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2693,"indexed":true,"mutability":"mutable","name":"implementation","nameLocation":"542:14:17","nodeType":"VariableDeclaration","scope":2695,"src":"526:30:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2692,"name":"address","nodeType":"ElementaryTypeName","src":"526:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"525:32:17"},"src":"511:47:17"},{"constant":true,"documentation":{"id":2696,"nodeType":"StructuredDocumentation","src":"562:206:17","text":" @dev Storage slot with the address of the current implementation.\n This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n validated in the constructor."},"id":2699,"mutability":"constant","name":"IMPLEMENTATION_SLOT","nameLocation":"797:19:17","nodeType":"VariableDeclaration","scope":2748,"src":"771:118:17","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2697,"name":"bytes32","nodeType":"ElementaryTypeName","src":"771:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307833363038393461313362613161333231303636376338323834393264623938646361336532303736636333373335613932306133636135303564333832626263","id":2698,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"823:66:17","typeDescriptions":{"typeIdentifier":"t_rational_24440054405305269366569402256811496959409073762505157381672968839269610695612_by_1","typeString":"int_const 2444...(69 digits omitted)...5612"},"value":"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"},"visibility":"internal"},{"baseFunctions":[2899],"body":{"id":2711,"nodeType":"Block","src":"1081:123:17","statements":[{"assignments":[2707],"declarations":[{"constant":false,"id":2707,"mutability":"mutable","name":"slot","nameLocation":"1095:4:17","nodeType":"VariableDeclaration","scope":2711,"src":"1087:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2706,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1087:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2709,"initialValue":{"id":2708,"name":"IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2699,"src":"1102:19:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1087:34:17"},{"AST":{"nodeType":"YulBlock","src":"1167:33:17","statements":[{"nodeType":"YulAssignment","src":"1175:19:17","value":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"1189:4:17"}],"functionName":{"name":"sload","nodeType":"YulIdentifier","src":"1183:5:17"},"nodeType":"YulFunctionCall","src":"1183:11:17"},"variableNames":[{"name":"impl","nodeType":"YulIdentifier","src":"1175:4:17"}]}]},"evmVersion":"london","externalReferences":[{"declaration":2704,"isOffset":false,"isSlot":false,"src":"1175:4:17","valueSize":1},{"declaration":2707,"isOffset":false,"isSlot":false,"src":"1189:4:17","valueSize":1}],"id":2710,"nodeType":"InlineAssembly","src":"1158:42:17"}]},"documentation":{"id":2700,"nodeType":"StructuredDocumentation","src":"894:111:17","text":" @dev Returns the current implementation.\n @return impl Address of the current implementation"},"id":2712,"implemented":true,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"1017:15:17","nodeType":"FunctionDefinition","overrides":{"id":2702,"nodeType":"OverrideSpecifier","overrides":[],"src":"1049:8:17"},"parameters":{"id":2701,"nodeType":"ParameterList","parameters":[],"src":"1032:2:17"},"returnParameters":{"id":2705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2704,"mutability":"mutable","name":"impl","nameLocation":"1075:4:17","nodeType":"VariableDeclaration","scope":2712,"src":"1067:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2703,"name":"address","nodeType":"ElementaryTypeName","src":"1067:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1066:14:17"},"scope":2748,"src":"1008:196:17","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2726,"nodeType":"Block","src":"1395:86:17","statements":[{"expression":{"arguments":[{"id":2719,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2715,"src":"1420:17:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2718,"name":"_setImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2747,"src":"1401:18:17","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1401:37:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2721,"nodeType":"ExpressionStatement","src":"1401:37:17"},{"eventCall":{"arguments":[{"id":2723,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2715,"src":"1458:17:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2722,"name":"Upgraded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2695,"src":"1449:8:17","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1449:27:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2725,"nodeType":"EmitStatement","src":"1444:32:17"}]},"documentation":{"id":2713,"nodeType":"StructuredDocumentation","src":"1208:128:17","text":" @dev Upgrades the proxy to a new implementation.\n @param newImplementation Address of the new implementation."},"id":2727,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeTo","nameLocation":"1348:10:17","nodeType":"FunctionDefinition","parameters":{"id":2716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2715,"mutability":"mutable","name":"newImplementation","nameLocation":"1367:17:17","nodeType":"VariableDeclaration","scope":2727,"src":"1359:25:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2714,"name":"address","nodeType":"ElementaryTypeName","src":"1359:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1358:27:17"},"returnParameters":{"id":2717,"nodeType":"ParameterList","parameters":[],"src":"1395:0:17"},"scope":2748,"src":"1339:142:17","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2746,"nodeType":"Block","src":"1682:270:17","statements":[{"expression":{"arguments":[{"arguments":[{"id":2736,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2730,"src":"1722:17:17","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":2734,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":722,"src":"1703:7:17","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$722_$","typeString":"type(library Address)"}},"id":2735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":445,"src":"1703:18:17","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":2737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1703:37:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"43616e6e6f742073657420612070726f787920696d706c656d656e746174696f6e20746f2061206e6f6e2d636f6e74726163742061646472657373","id":2738,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1748:61:17","typeDescriptions":{"typeIdentifier":"t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c","typeString":"literal_string \"Cannot set a proxy implementation to a non-contract address\""},"value":"Cannot set a proxy implementation to a non-contract address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c","typeString":"literal_string \"Cannot set a proxy implementation to a non-contract address\""}],"id":2733,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1688:7:17","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1688:127:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2740,"nodeType":"ExpressionStatement","src":"1688:127:17"},{"assignments":[2742],"declarations":[{"constant":false,"id":2742,"mutability":"mutable","name":"slot","nameLocation":"1830:4:17","nodeType":"VariableDeclaration","scope":2746,"src":"1822:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2741,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1822:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2744,"initialValue":{"id":2743,"name":"IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2699,"src":"1837:19:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1822:34:17"},{"AST":{"nodeType":"YulBlock","src":"1903:45:17","statements":[{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"1918:4:17"},{"name":"newImplementation","nodeType":"YulIdentifier","src":"1924:17:17"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"1911:6:17"},"nodeType":"YulFunctionCall","src":"1911:31:17"},"nodeType":"YulExpressionStatement","src":"1911:31:17"}]},"evmVersion":"london","externalReferences":[{"declaration":2730,"isOffset":false,"isSlot":false,"src":"1924:17:17","valueSize":1},{"declaration":2742,"isOffset":false,"isSlot":false,"src":"1918:4:17","valueSize":1}],"id":2745,"nodeType":"InlineAssembly","src":"1894:54:17"}]},"documentation":{"id":2728,"nodeType":"StructuredDocumentation","src":"1485:130:17","text":" @dev Sets the implementation address of the proxy.\n @param newImplementation Address of the new implementation."},"id":2747,"implemented":true,"kind":"function","modifiers":[],"name":"_setImplementation","nameLocation":"1627:18:17","nodeType":"FunctionDefinition","parameters":{"id":2731,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2730,"mutability":"mutable","name":"newImplementation","nameLocation":"1654:17:17","nodeType":"VariableDeclaration","scope":2747,"src":"1646:25:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2729,"name":"address","nodeType":"ElementaryTypeName","src":"1646:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1645:27:17"},"returnParameters":{"id":2732,"nodeType":"ParameterList","parameters":[],"src":"1682:0:17"},"scope":2748,"src":"1618:334:17","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":2749,"src":"336:1618:17","usedErrors":[]}],"src":"37:1918:17"},"id":17},"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol","exportedSymbols":{"Address":[722],"BaseAdminUpgradeabilityProxy":[2683],"BaseUpgradeabilityProxy":[2748],"InitializableAdminUpgradeabilityProxy":[2819],"InitializableUpgradeabilityProxy":[2882],"Proxy":[2926],"UpgradeabilityProxy":[2979]},"id":2820,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":2750,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:18"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol","file":"./BaseAdminUpgradeabilityProxy.sol","id":2751,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2820,"sourceUnit":2684,"src":"62:44:18","symbolAliases":[],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol","file":"./InitializableUpgradeabilityProxy.sol","id":2752,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2820,"sourceUnit":2883,"src":"107:48:18","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2754,"name":"BaseAdminUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":2683,"src":"397:28:18"},"id":2755,"nodeType":"InheritanceSpecifier","src":"397:28:18"},{"baseName":{"id":2756,"name":"InitializableUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":2882,"src":"429:32:18"},"id":2757,"nodeType":"InheritanceSpecifier","src":"429:32:18"}],"canonicalName":"InitializableAdminUpgradeabilityProxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":2753,"nodeType":"StructuredDocumentation","src":"157:187:18","text":" @title InitializableAdminUpgradeabilityProxy\n @dev Extends from BaseAdminUpgradeabilityProxy with an initializer for\n initializing the implementation, admin, and init data."},"fullyImplemented":true,"id":2819,"linearizedBaseContracts":[2819,2882,2683,2748,2926],"name":"InitializableAdminUpgradeabilityProxy","nameLocation":"354:37:18","nodeType":"ContractDefinition","nodes":[{"body":{"id":2804,"nodeType":"Block","src":"1119:217:18","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":2768,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[2712],"referencedDeclaration":2712,"src":"1133:15:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":2769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1133:17:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2772,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1162:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2771,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1154:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2770,"name":"address","nodeType":"ElementaryTypeName","src":"1154:7:18","typeDescriptions":{}}},"id":2773,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1154:10:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1133:31:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2767,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1125:7:18","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":2775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1125:40:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2776,"nodeType":"ExpressionStatement","src":"1125:40:18"},{"expression":{"arguments":[{"id":2780,"name":"logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2760,"src":"1215:5:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2781,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2764,"src":"1222:4:18","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":2777,"name":"InitializableUpgradeabilityProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2882,"src":"1171:32:18","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InitializableUpgradeabilityProxy_$2882_$","typeString":"type(contract InitializableUpgradeabilityProxy)"}},"id":2779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":2881,"src":"1171:43:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory)"}},"id":2782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1171:56:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2783,"nodeType":"ExpressionStatement","src":"1171:56:18"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":2797,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":2785,"name":"ADMIN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2530,"src":"1240:10:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2795,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"hexValue":"656970313936372e70726f78792e61646d696e","id":2791,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1280:21:18","typeDescriptions":{"typeIdentifier":"t_stringliteral_b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104","typeString":"literal_string \"eip1967.proxy.admin\""},"value":"eip1967.proxy.admin"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104","typeString":"literal_string \"eip1967.proxy.admin\""}],"id":2790,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1270:9:18","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2792,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1270:32:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":2789,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1262:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2788,"name":"uint256","nodeType":"ElementaryTypeName","src":"1262:7:18","typeDescriptions":{}}},"id":2793,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1262:41:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2794,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1306:1:18","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1262:45:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2787,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1254:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":2786,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1254:7:18","typeDescriptions":{}}},"id":2796,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1254:54:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1240:68:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2784,"name":"assert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-3,"src":"1233:6:18","typeDescriptions":{"typeIdentifier":"t_function_assert_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":2798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1233:76:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2799,"nodeType":"ExpressionStatement","src":"1233:76:18"},{"expression":{"arguments":[{"id":2801,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2762,"src":"1325:5:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2800,"name":"_setAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2662,"src":"1315:9:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1315:16:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2803,"nodeType":"ExpressionStatement","src":"1315:16:18"}]},"documentation":{"id":2758,"nodeType":"StructuredDocumentation","src":"466:566:18","text":" Contract initializer.\n @param logic address of the initial implementation.\n @param admin Address of the proxy administrator.\n @param data Data to send as msg.data to the implementation to initialize the proxied contract.\n It should include the signature and the parameters of the function to be called, as described in\n https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n This parameter is optional, if no data is given the initialization call to proxied contract will be skipped."},"functionSelector":"cf7a1d77","id":2805,"implemented":true,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"1044:10:18","nodeType":"FunctionDefinition","parameters":{"id":2765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2760,"mutability":"mutable","name":"logic","nameLocation":"1063:5:18","nodeType":"VariableDeclaration","scope":2805,"src":"1055:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2759,"name":"address","nodeType":"ElementaryTypeName","src":"1055:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2762,"mutability":"mutable","name":"admin","nameLocation":"1078:5:18","nodeType":"VariableDeclaration","scope":2805,"src":"1070:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2761,"name":"address","nodeType":"ElementaryTypeName","src":"1070:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2764,"mutability":"mutable","name":"data","nameLocation":"1098:4:18","nodeType":"VariableDeclaration","scope":2805,"src":"1085:17:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2763,"name":"bytes","nodeType":"ElementaryTypeName","src":"1085:5:18","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1054:49:18"},"returnParameters":{"id":2766,"nodeType":"ParameterList","parameters":[],"src":"1119:0:18"},"scope":2819,"src":"1035:301:18","stateMutability":"payable","virtual":false,"visibility":"public"},{"baseFunctions":[2682,2912],"body":{"id":2817,"nodeType":"Block","src":"1491:55:18","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":2812,"name":"BaseAdminUpgradeabilityProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2683,"src":"1497:28:18","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BaseAdminUpgradeabilityProxy_$2683_$","typeString":"type(contract BaseAdminUpgradeabilityProxy)"}},"id":2814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_willFallback","nodeType":"MemberAccess","referencedDeclaration":2682,"src":"1497:42:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1497:44:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2816,"nodeType":"ExpressionStatement","src":"1497:44:18"}]},"documentation":{"id":2806,"nodeType":"StructuredDocumentation","src":"1340:68:18","text":" @dev Only fall back when the sender is not the admin."},"id":2818,"implemented":true,"kind":"function","modifiers":[],"name":"_willFallback","nameLocation":"1420:13:18","nodeType":"FunctionDefinition","overrides":{"id":2810,"nodeType":"OverrideSpecifier","overrides":[{"id":2808,"name":"BaseAdminUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":2683,"src":"1454:28:18"},{"id":2809,"name":"Proxy","nodeType":"IdentifierPath","referencedDeclaration":2926,"src":"1484:5:18"}],"src":"1445:45:18"},"parameters":{"id":2807,"nodeType":"ParameterList","parameters":[],"src":"1433:2:18"},"returnParameters":{"id":2811,"nodeType":"ParameterList","parameters":[],"src":"1491:0:18"},"scope":2819,"src":"1411:135:18","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":2820,"src":"345:1203:18","usedErrors":[]}],"src":"37:1512:18"},"id":18},"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol","exportedSymbols":{"Address":[722],"BaseUpgradeabilityProxy":[2748],"InitializableUpgradeabilityProxy":[2882],"Proxy":[2926]},"id":2883,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":2821,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:19"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol","file":"./BaseUpgradeabilityProxy.sol","id":2822,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2883,"sourceUnit":2749,"src":"62:39:19","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2824,"name":"BaseUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":2748,"src":"309:23:19"},"id":2825,"nodeType":"InheritanceSpecifier","src":"309:23:19"}],"canonicalName":"InitializableUpgradeabilityProxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":2823,"nodeType":"StructuredDocumentation","src":"103:160:19","text":" @title InitializableUpgradeabilityProxy\n @dev Extends BaseUpgradeabilityProxy with an initializer for initializing\n implementation and init data."},"fullyImplemented":true,"id":2882,"linearizedBaseContracts":[2882,2748,2926],"name":"InitializableUpgradeabilityProxy","nameLocation":"273:32:19","nodeType":"ContractDefinition","nodes":[{"body":{"id":2880,"nodeType":"Block","src":"930:294:19","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":2834,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[2712],"referencedDeclaration":2712,"src":"944:15:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":2835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"944:17:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2838,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"973:1:19","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":2837,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"965:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2836,"name":"address","nodeType":"ElementaryTypeName","src":"965:7:19","typeDescriptions":{}}},"id":2839,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"965:10:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"944:31:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2833,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"936:7:19","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":2841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"936:40:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2842,"nodeType":"ExpressionStatement","src":"936:40:19"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":2856,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":2844,"name":"IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2699,"src":"989:19:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2854,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"hexValue":"656970313936372e70726f78792e696d706c656d656e746174696f6e","id":2850,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1038:30:19","typeDescriptions":{"typeIdentifier":"t_stringliteral_360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd","typeString":"literal_string \"eip1967.proxy.implementation\""},"value":"eip1967.proxy.implementation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd","typeString":"literal_string \"eip1967.proxy.implementation\""}],"id":2849,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1028:9:19","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2851,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1028:41:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":2848,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1020:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2847,"name":"uint256","nodeType":"ElementaryTypeName","src":"1020:7:19","typeDescriptions":{}}},"id":2852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1020:50:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2853,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1073:1:19","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1020:54:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2846,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1012:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":2845,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1012:7:19","typeDescriptions":{}}},"id":2855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1012:63:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"989:86:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2843,"name":"assert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-3,"src":"982:6:19","typeDescriptions":{"typeIdentifier":"t_function_assert_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":2857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"982:94:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2858,"nodeType":"ExpressionStatement","src":"982:94:19"},{"expression":{"arguments":[{"id":2860,"name":"_logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2828,"src":"1101:6:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2859,"name":"_setImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2747,"src":"1082:18:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1082:26:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2862,"nodeType":"ExpressionStatement","src":"1082:26:19"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2863,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2830,"src":"1118:5:19","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1118:12:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":2865,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1133:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1118:16:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2879,"nodeType":"IfStatement","src":"1114:106:19","trueBody":{"id":2878,"nodeType":"Block","src":"1136:84:19","statements":[{"assignments":[2868,null],"declarations":[{"constant":false,"id":2868,"mutability":"mutable","name":"success","nameLocation":"1150:7:19","nodeType":"VariableDeclaration","scope":2878,"src":"1145:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2867,"name":"bool","nodeType":"ElementaryTypeName","src":"1145:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":2873,"initialValue":{"arguments":[{"id":2871,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2830,"src":"1183:5:19","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":2869,"name":"_logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2828,"src":"1163:6:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"delegatecall","nodeType":"MemberAccess","src":"1163:19:19","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":2872,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1163:26:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"1144:45:19"},{"expression":{"arguments":[{"id":2875,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2868,"src":"1205:7:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2874,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1197:7:19","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":2876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1197:16:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2877,"nodeType":"ExpressionStatement","src":"1197:16:19"}]}}]},"documentation":{"id":2826,"nodeType":"StructuredDocumentation","src":"337:519:19","text":" @dev Contract initializer.\n @param _logic Address of the initial implementation.\n @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\n It should include the signature and the parameters of the function to be called, as described in\n https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n This parameter is optional, if no data is given the initialization call to proxied contract will be skipped."},"functionSelector":"d1f57894","id":2881,"implemented":true,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"868:10:19","nodeType":"FunctionDefinition","parameters":{"id":2831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2828,"mutability":"mutable","name":"_logic","nameLocation":"887:6:19","nodeType":"VariableDeclaration","scope":2881,"src":"879:14:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2827,"name":"address","nodeType":"ElementaryTypeName","src":"879:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2830,"mutability":"mutable","name":"_data","nameLocation":"908:5:19","nodeType":"VariableDeclaration","scope":2881,"src":"895:18:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2829,"name":"bytes","nodeType":"ElementaryTypeName","src":"895:5:19","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"878:36:19"},"returnParameters":{"id":2832,"nodeType":"ParameterList","parameters":[],"src":"930:0:19"},"scope":2882,"src":"859:365:19","stateMutability":"payable","virtual":false,"visibility":"public"}],"scope":2883,"src":"264:962:19","usedErrors":[]}],"src":"37:1190:19"},"id":19},"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol","exportedSymbols":{"Proxy":[2926]},"id":2927,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":2884,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:20"},{"abstract":true,"baseContracts":[],"canonicalName":"Proxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":2885,"nodeType":"StructuredDocumentation","src":"62:290:20","text":" @title Proxy\n @dev Implements delegation of calls to other contracts, with proper\n forwarding of return values and bubbling of failures.\n It defines a fallback function that delegates all calls to the address\n returned by the abstract _implementation() internal function."},"fullyImplemented":false,"id":2926,"linearizedBaseContracts":[2926],"name":"Proxy","nameLocation":"371:5:20","nodeType":"ContractDefinition","nodes":[{"body":{"id":2892,"nodeType":"Block","src":"566:22:20","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2889,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2925,"src":"572:9:20","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"572:11:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2891,"nodeType":"ExpressionStatement","src":"572:11:20"}]},"documentation":{"id":2886,"nodeType":"StructuredDocumentation","src":"381:154:20","text":" @dev Fallback function.\n Will run if no other function in the contract matches the call data.\n Implemented entirely in `_fallback`."},"id":2893,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":2887,"nodeType":"ParameterList","parameters":[],"src":"546:2:20"},"returnParameters":{"id":2888,"nodeType":"ParameterList","parameters":[],"src":"566:0:20"},"scope":2926,"src":"538:50:20","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2894,"nodeType":"StructuredDocumentation","src":"592:57:20","text":" @return The Address of the implementation."},"id":2899,"implemented":false,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"661:15:20","nodeType":"FunctionDefinition","parameters":{"id":2895,"nodeType":"ParameterList","parameters":[],"src":"676:2:20"},"returnParameters":{"id":2898,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2897,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2899,"src":"710:7:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2896,"name":"address","nodeType":"ElementaryTypeName","src":"710:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"709:9:20"},"scope":2926,"src":"652:67:20","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":2906,"nodeType":"Block","src":"1057:750:20","statements":[{"AST":{"nodeType":"YulBlock","src":"1103:700:20","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1332:1:20","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1335:1:20","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"1338:12:20"},"nodeType":"YulFunctionCall","src":"1338:14:20"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1319:12:20"},"nodeType":"YulFunctionCall","src":"1319:34:20"},"nodeType":"YulExpressionStatement","src":"1319:34:20"},{"nodeType":"YulVariableDeclaration","src":"1462:74:20","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nodeType":"YulIdentifier","src":"1489:3:20"},"nodeType":"YulFunctionCall","src":"1489:5:20"},{"name":"implementation","nodeType":"YulIdentifier","src":"1496:14:20"},{"kind":"number","nodeType":"YulLiteral","src":"1512:1:20","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"1515:12:20"},"nodeType":"YulFunctionCall","src":"1515:14:20"},{"kind":"number","nodeType":"YulLiteral","src":"1531:1:20","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1534:1:20","type":"","value":"0"}],"functionName":{"name":"delegatecall","nodeType":"YulIdentifier","src":"1476:12:20"},"nodeType":"YulFunctionCall","src":"1476:60:20"},"variables":[{"name":"result","nodeType":"YulTypedName","src":"1466:6:20","type":""}]},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1592:1:20","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1595:1:20","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"1598:14:20"},"nodeType":"YulFunctionCall","src":"1598:16:20"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"1577:14:20"},"nodeType":"YulFunctionCall","src":"1577:38:20"},"nodeType":"YulExpressionStatement","src":"1577:38:20"},{"cases":[{"body":{"nodeType":"YulBlock","src":"1692:45:20","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1709:1:20","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"1712:14:20"},"nodeType":"YulFunctionCall","src":"1712:16:20"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1702:6:20"},"nodeType":"YulFunctionCall","src":"1702:27:20"},"nodeType":"YulExpressionStatement","src":"1702:27:20"}]},"nodeType":"YulCase","src":"1685:52:20","value":{"kind":"number","nodeType":"YulLiteral","src":"1690:1:20","type":"","value":"0"}},{"body":{"nodeType":"YulBlock","src":"1752:45:20","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1769:1:20","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"1772:14:20"},"nodeType":"YulFunctionCall","src":"1772:16:20"}],"functionName":{"name":"return","nodeType":"YulIdentifier","src":"1762:6:20"},"nodeType":"YulFunctionCall","src":"1762:27:20"},"nodeType":"YulExpressionStatement","src":"1762:27:20"}]},"nodeType":"YulCase","src":"1744:53:20","value":"default"}],"expression":{"name":"result","nodeType":"YulIdentifier","src":"1630:6:20"},"nodeType":"YulSwitch","src":"1623:174:20"}]},"evmVersion":"london","externalReferences":[{"declaration":2902,"isOffset":false,"isSlot":false,"src":"1496:14:20","valueSize":1}],"id":2905,"nodeType":"InlineAssembly","src":"1094:709:20"}]},"documentation":{"id":2900,"nodeType":"StructuredDocumentation","src":"723:279:20","text":" @dev Delegates execution to an implementation contract.\n This is a low level function that doesn't return to its internal call site.\n It will return to the external caller whatever the implementation returns.\n @param implementation Address to delegate."},"id":2907,"implemented":true,"kind":"function","modifiers":[],"name":"_delegate","nameLocation":"1014:9:20","nodeType":"FunctionDefinition","parameters":{"id":2903,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2902,"mutability":"mutable","name":"implementation","nameLocation":"1032:14:20","nodeType":"VariableDeclaration","scope":2907,"src":"1024:22:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2901,"name":"address","nodeType":"ElementaryTypeName","src":"1024:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1023:24:20"},"returnParameters":{"id":2904,"nodeType":"ParameterList","parameters":[],"src":"1057:0:20"},"scope":2926,"src":"1005:802:20","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2911,"nodeType":"Block","src":"2058:2:20","statements":[]},"documentation":{"id":2908,"nodeType":"StructuredDocumentation","src":"1811:202:20","text":" @dev Function that is run as the first thing in the fallback function.\n Can be redefined in derived contracts to add functionality.\n Redefinitions must call super._willFallback()."},"id":2912,"implemented":true,"kind":"function","modifiers":[],"name":"_willFallback","nameLocation":"2025:13:20","nodeType":"FunctionDefinition","parameters":{"id":2909,"nodeType":"ParameterList","parameters":[],"src":"2038:2:20"},"returnParameters":{"id":2910,"nodeType":"ParameterList","parameters":[],"src":"2058:0:20"},"scope":2926,"src":"2016:44:20","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":2924,"nodeType":"Block","src":"2185:60:20","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2916,"name":"_willFallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2912,"src":"2191:13:20","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2191:15:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2918,"nodeType":"ExpressionStatement","src":"2191:15:20"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":2920,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2899,"src":"2222:15:20","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":2921,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2222:17:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2919,"name":"_delegate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2907,"src":"2212:9:20","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2922,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2212:28:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2923,"nodeType":"ExpressionStatement","src":"2212:28:20"}]},"documentation":{"id":2913,"nodeType":"StructuredDocumentation","src":"2064:88:20","text":" @dev fallback implementation.\n Extracted to enable manual triggering."},"id":2925,"implemented":true,"kind":"function","modifiers":[],"name":"_fallback","nameLocation":"2164:9:20","nodeType":"FunctionDefinition","parameters":{"id":2914,"nodeType":"ParameterList","parameters":[],"src":"2173:2:20"},"returnParameters":{"id":2915,"nodeType":"ParameterList","parameters":[],"src":"2185:0:20"},"scope":2926,"src":"2155:90:20","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":2927,"src":"353:1894:20","usedErrors":[]}],"src":"37:2211:20"},"id":20},"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol","exportedSymbols":{"Address":[722],"BaseUpgradeabilityProxy":[2748],"Proxy":[2926],"UpgradeabilityProxy":[2979]},"id":2980,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":2928,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:21"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol","file":"./BaseUpgradeabilityProxy.sol","id":2929,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2980,"sourceUnit":2749,"src":"62:39:21","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2931,"name":"BaseUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":2748,"src":"282:23:21"},"id":2932,"nodeType":"InheritanceSpecifier","src":"282:23:21"}],"canonicalName":"UpgradeabilityProxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":2930,"nodeType":"StructuredDocumentation","src":"103:146:21","text":" @title UpgradeabilityProxy\n @dev Extends BaseUpgradeabilityProxy with a constructor for initializing\n implementation and init data."},"fullyImplemented":true,"id":2979,"linearizedBaseContracts":[2979,2748,2926],"name":"UpgradeabilityProxy","nameLocation":"259:19:21","nodeType":"ContractDefinition","nodes":[{"body":{"id":2977,"nodeType":"Block","src":"888:248:21","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":2953,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":2941,"name":"IMPLEMENTATION_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2699,"src":"901:19:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2951,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"hexValue":"656970313936372e70726f78792e696d706c656d656e746174696f6e","id":2947,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"950:30:21","typeDescriptions":{"typeIdentifier":"t_stringliteral_360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd","typeString":"literal_string \"eip1967.proxy.implementation\""},"value":"eip1967.proxy.implementation"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd","typeString":"literal_string \"eip1967.proxy.implementation\""}],"id":2946,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"940:9:21","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2948,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"940:41:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":2945,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"932:7:21","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2944,"name":"uint256","nodeType":"ElementaryTypeName","src":"932:7:21","typeDescriptions":{}}},"id":2949,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"932:50:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"985:1:21","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"932:54:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2943,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"924:7:21","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":2942,"name":"bytes32","nodeType":"ElementaryTypeName","src":"924:7:21","typeDescriptions":{}}},"id":2952,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"924:63:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"901:86:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2940,"name":"assert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-3,"src":"894:6:21","typeDescriptions":{"typeIdentifier":"t_function_assert_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":2954,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"894:94:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2955,"nodeType":"ExpressionStatement","src":"894:94:21"},{"expression":{"arguments":[{"id":2957,"name":"_logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2935,"src":"1013:6:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2956,"name":"_setImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2747,"src":"994:18:21","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"994:26:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2959,"nodeType":"ExpressionStatement","src":"994:26:21"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2960,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2937,"src":"1030:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":2961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1030:12:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":2962,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1045:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1030:16:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2976,"nodeType":"IfStatement","src":"1026:106:21","trueBody":{"id":2975,"nodeType":"Block","src":"1048:84:21","statements":[{"assignments":[2965,null],"declarations":[{"constant":false,"id":2965,"mutability":"mutable","name":"success","nameLocation":"1062:7:21","nodeType":"VariableDeclaration","scope":2975,"src":"1057:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2964,"name":"bool","nodeType":"ElementaryTypeName","src":"1057:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":2970,"initialValue":{"arguments":[{"id":2968,"name":"_data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2937,"src":"1095:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":2966,"name":"_logic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2935,"src":"1075:6:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"delegatecall","nodeType":"MemberAccess","src":"1075:19:21","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":2969,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1075:26:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"1056:45:21"},{"expression":{"arguments":[{"id":2972,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2965,"src":"1117:7:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":2971,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1109:7:21","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":2973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1109:16:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2974,"nodeType":"ExpressionStatement","src":"1109:16:21"}]}}]},"documentation":{"id":2933,"nodeType":"StructuredDocumentation","src":"310:519:21","text":" @dev Contract constructor.\n @param _logic Address of the initial implementation.\n @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\n It should include the signature and the parameters of the function to be called, as described in\n https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\n This parameter is optional, if no data is given the initialization call to proxied contract will be skipped."},"id":2978,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":2938,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2935,"mutability":"mutable","name":"_logic","nameLocation":"852:6:21","nodeType":"VariableDeclaration","scope":2978,"src":"844:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2934,"name":"address","nodeType":"ElementaryTypeName","src":"844:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2937,"mutability":"mutable","name":"_data","nameLocation":"873:5:21","nodeType":"VariableDeclaration","scope":2978,"src":"860:18:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2936,"name":"bytes","nodeType":"ElementaryTypeName","src":"860:5:21","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"843:36:21"},"returnParameters":{"id":2939,"nodeType":"ParameterList","parameters":[],"src":"888:0:21"},"scope":2979,"src":"832:304:21","stateMutability":"payable","virtual":false,"visibility":"public"}],"scope":2980,"src":"250:888:21","usedErrors":[]}],"src":"37:1102:21"},"id":21},"@aave/core-v3/contracts/dependencies/weth/WETH9.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/dependencies/weth/WETH9.sol","exportedSymbols":{"WETH9":[3228]},"id":3229,"nodeType":"SourceUnit","nodes":[{"id":2981,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"686:24:22"},{"abstract":false,"baseContracts":[],"canonicalName":"WETH9","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":3228,"linearizedBaseContracts":[3228],"name":"WETH9","nameLocation":"721:5:22","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"06fdde03","id":2984,"mutability":"mutable","name":"name","nameLocation":"745:4:22","nodeType":"VariableDeclaration","scope":3228,"src":"731:36:22","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":2982,"name":"string","nodeType":"ElementaryTypeName","src":"731:6:22","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"57726170706564204574686572","id":2983,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"752:15:22","typeDescriptions":{"typeIdentifier":"t_stringliteral_00cd3d46df44f2cbb950cf84eb2e92aa2ddd23195b1a009173ea59a063357ed3","typeString":"literal_string \"Wrapped Ether\""},"value":"Wrapped Ether"},"visibility":"public"},{"constant":false,"functionSelector":"95d89b41","id":2987,"mutability":"mutable","name":"symbol","nameLocation":"785:6:22","nodeType":"VariableDeclaration","scope":3228,"src":"771:29:22","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":2985,"name":"string","nodeType":"ElementaryTypeName","src":"771:6:22","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"57455448","id":2986,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"794:6:22","typeDescriptions":{"typeIdentifier":"t_stringliteral_0f8a193ff464434486c0daf7db2a895884365d2bc84ba47a68fcf89c1b14b5b8","typeString":"literal_string \"WETH\""},"value":"WETH"},"visibility":"public"},{"constant":false,"functionSelector":"313ce567","id":2990,"mutability":"mutable","name":"decimals","nameLocation":"817:8:22","nodeType":"VariableDeclaration","scope":3228,"src":"804:26:22","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":2988,"name":"uint8","nodeType":"ElementaryTypeName","src":"804:5:22","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"3138","id":2989,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"828:2:22","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"visibility":"public"},{"anonymous":false,"id":2998,"name":"Approval","nameLocation":"841:8:22","nodeType":"EventDefinition","parameters":{"id":2997,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2992,"indexed":true,"mutability":"mutable","name":"src","nameLocation":"866:3:22","nodeType":"VariableDeclaration","scope":2998,"src":"850:19:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2991,"name":"address","nodeType":"ElementaryTypeName","src":"850:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2994,"indexed":true,"mutability":"mutable","name":"guy","nameLocation":"887:3:22","nodeType":"VariableDeclaration","scope":2998,"src":"871:19:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2993,"name":"address","nodeType":"ElementaryTypeName","src":"871:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2996,"indexed":false,"mutability":"mutable","name":"wad","nameLocation":"900:3:22","nodeType":"VariableDeclaration","scope":2998,"src":"892:11:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2995,"name":"uint256","nodeType":"ElementaryTypeName","src":"892:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"849:55:22"},"src":"835:70:22"},{"anonymous":false,"id":3006,"name":"Transfer","nameLocation":"914:8:22","nodeType":"EventDefinition","parameters":{"id":3005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3000,"indexed":true,"mutability":"mutable","name":"src","nameLocation":"939:3:22","nodeType":"VariableDeclaration","scope":3006,"src":"923:19:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2999,"name":"address","nodeType":"ElementaryTypeName","src":"923:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3002,"indexed":true,"mutability":"mutable","name":"dst","nameLocation":"960:3:22","nodeType":"VariableDeclaration","scope":3006,"src":"944:19:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3001,"name":"address","nodeType":"ElementaryTypeName","src":"944:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3004,"indexed":false,"mutability":"mutable","name":"wad","nameLocation":"973:3:22","nodeType":"VariableDeclaration","scope":3006,"src":"965:11:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3003,"name":"uint256","nodeType":"ElementaryTypeName","src":"965:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"922:55:22"},"src":"908:70:22"},{"anonymous":false,"id":3012,"name":"Deposit","nameLocation":"987:7:22","nodeType":"EventDefinition","parameters":{"id":3011,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3008,"indexed":true,"mutability":"mutable","name":"dst","nameLocation":"1011:3:22","nodeType":"VariableDeclaration","scope":3012,"src":"995:19:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3007,"name":"address","nodeType":"ElementaryTypeName","src":"995:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3010,"indexed":false,"mutability":"mutable","name":"wad","nameLocation":"1024:3:22","nodeType":"VariableDeclaration","scope":3012,"src":"1016:11:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3009,"name":"uint256","nodeType":"ElementaryTypeName","src":"1016:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"994:34:22"},"src":"981:48:22"},{"anonymous":false,"id":3018,"name":"Withdrawal","nameLocation":"1038:10:22","nodeType":"EventDefinition","parameters":{"id":3017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3014,"indexed":true,"mutability":"mutable","name":"src","nameLocation":"1065:3:22","nodeType":"VariableDeclaration","scope":3018,"src":"1049:19:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3013,"name":"address","nodeType":"ElementaryTypeName","src":"1049:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3016,"indexed":false,"mutability":"mutable","name":"wad","nameLocation":"1078:3:22","nodeType":"VariableDeclaration","scope":3018,"src":"1070:11:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3015,"name":"uint256","nodeType":"ElementaryTypeName","src":"1070:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1048:34:22"},"src":"1032:51:22"},{"constant":false,"functionSelector":"70a08231","id":3022,"mutability":"mutable","name":"balanceOf","nameLocation":"1122:9:22","nodeType":"VariableDeclaration","scope":3228,"src":"1087:44:22","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":3021,"keyType":{"id":3019,"name":"address","nodeType":"ElementaryTypeName","src":"1095:7:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1087:27:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":3020,"name":"uint256","nodeType":"ElementaryTypeName","src":"1106:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"public"},{"constant":false,"functionSelector":"dd62ed3e","id":3028,"mutability":"mutable","name":"allowance","nameLocation":"1190:9:22","nodeType":"VariableDeclaration","scope":3228,"src":"1135:64:22","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":3027,"keyType":{"id":3023,"name":"address","nodeType":"ElementaryTypeName","src":"1143:7:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1135:47:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueType":{"id":3026,"keyType":{"id":3024,"name":"address","nodeType":"ElementaryTypeName","src":"1162:7:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1154:27:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":3025,"name":"uint256","nodeType":"ElementaryTypeName","src":"1173:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"public"},{"body":{"id":3034,"nodeType":"Block","src":"1231:20:22","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":3031,"name":"deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3054,"src":"1237:7:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":3032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1237:9:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3033,"nodeType":"ExpressionStatement","src":"1237:9:22"}]},"id":3035,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":3029,"nodeType":"ParameterList","parameters":[],"src":"1211:2:22"},"returnParameters":{"id":3030,"nodeType":"ParameterList","parameters":[],"src":"1231:0:22"},"scope":3228,"src":"1204:47:22","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":3053,"nodeType":"Block","src":"1289:86:22","statements":[{"expression":{"id":3044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3038,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3022,"src":"1295:9:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3041,"indexExpression":{"expression":{"id":3039,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1305:3:22","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1305:10:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1295:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"expression":{"id":3042,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1320:3:22","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"1320:9:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1295:34:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3045,"nodeType":"ExpressionStatement","src":"1295:34:22"},{"eventCall":{"arguments":[{"expression":{"id":3047,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1348:3:22","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1348:10:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":3049,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1360:3:22","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"1360:9:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3046,"name":"Deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3012,"src":"1340:7:22","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":3051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1340:30:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3052,"nodeType":"EmitStatement","src":"1335:35:22"}]},"functionSelector":"d0e30db0","id":3054,"implemented":true,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"1264:7:22","nodeType":"FunctionDefinition","parameters":{"id":3036,"nodeType":"ParameterList","parameters":[],"src":"1271:2:22"},"returnParameters":{"id":3037,"nodeType":"ParameterList","parameters":[],"src":"1289:0:22"},"scope":3228,"src":"1255:120:22","stateMutability":"payable","virtual":false,"visibility":"public"},{"body":{"id":3090,"nodeType":"Block","src":"1417:159:22","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":3060,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3022,"src":"1431:9:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3063,"indexExpression":{"expression":{"id":3061,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1441:3:22","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1441:10:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1431:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3064,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3056,"src":"1456:3:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1431:28:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":3059,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1423:7:22","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":3066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1423:37:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3067,"nodeType":"ExpressionStatement","src":"1423:37:22"},{"expression":{"id":3073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3068,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3022,"src":"1466:9:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3071,"indexExpression":{"expression":{"id":3069,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1476:3:22","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3070,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1476:10:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1466:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3072,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3056,"src":"1491:3:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1466:28:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3074,"nodeType":"ExpressionStatement","src":"1466:28:22"},{"expression":{"arguments":[{"id":3081,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3056,"src":"1529:3:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":3077,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1508:3:22","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1508:10:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3076,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1500:8:22","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":3075,"name":"address","nodeType":"ElementaryTypeName","src":"1500:8:22","stateMutability":"payable","typeDescriptions":{}}},"id":3079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1500:19:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":3080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transfer","nodeType":"MemberAccess","src":"1500:28:22","typeDescriptions":{"typeIdentifier":"t_function_transfer_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":3082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1500:33:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3083,"nodeType":"ExpressionStatement","src":"1500:33:22"},{"eventCall":{"arguments":[{"expression":{"id":3085,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1555:3:22","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1555:10:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3087,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3056,"src":"1567:3:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3084,"name":"Withdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3018,"src":"1544:10:22","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":3088,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1544:27:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3089,"nodeType":"EmitStatement","src":"1539:32:22"}]},"functionSelector":"2e1a7d4d","id":3091,"implemented":true,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"1388:8:22","nodeType":"FunctionDefinition","parameters":{"id":3057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3056,"mutability":"mutable","name":"wad","nameLocation":"1405:3:22","nodeType":"VariableDeclaration","scope":3091,"src":"1397:11:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3055,"name":"uint256","nodeType":"ElementaryTypeName","src":"1397:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1396:13:22"},"returnParameters":{"id":3058,"nodeType":"ParameterList","parameters":[],"src":"1417:0:22"},"scope":3228,"src":"1379:197:22","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3102,"nodeType":"Block","src":"1633:39:22","statements":[{"expression":{"expression":{"arguments":[{"id":3098,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1654:4:22","typeDescriptions":{"typeIdentifier":"t_contract$_WETH9_$3228","typeString":"contract WETH9"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_WETH9_$3228","typeString":"contract WETH9"}],"id":3097,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1646:7:22","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3096,"name":"address","nodeType":"ElementaryTypeName","src":"1646:7:22","typeDescriptions":{}}},"id":3099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1646:13:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","src":"1646:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3095,"id":3101,"nodeType":"Return","src":"1639:28:22"}]},"functionSelector":"18160ddd","id":3103,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"1589:11:22","nodeType":"FunctionDefinition","parameters":{"id":3092,"nodeType":"ParameterList","parameters":[],"src":"1600:2:22"},"returnParameters":{"id":3095,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3094,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3103,"src":"1624:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3093,"name":"uint256","nodeType":"ElementaryTypeName","src":"1624:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1623:9:22"},"scope":3228,"src":"1580:92:22","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":3130,"nodeType":"Block","src":"1741:101:22","statements":[{"expression":{"id":3119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":3112,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3028,"src":"1747:9:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3116,"indexExpression":{"expression":{"id":3113,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1757:3:22","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1757:10:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1747:21:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3117,"indexExpression":{"id":3115,"name":"guy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3105,"src":"1769:3:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1747:26:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3118,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3107,"src":"1776:3:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1747:32:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3120,"nodeType":"ExpressionStatement","src":"1747:32:22"},{"eventCall":{"arguments":[{"expression":{"id":3122,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1799:3:22","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1799:10:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3124,"name":"guy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3105,"src":"1811:3:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3125,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3107,"src":"1816:3:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3121,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2998,"src":"1790:8:22","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1790:30:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3127,"nodeType":"EmitStatement","src":"1785:35:22"},{"expression":{"hexValue":"74727565","id":3128,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1833:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3111,"id":3129,"nodeType":"Return","src":"1826:11:22"}]},"functionSelector":"095ea7b3","id":3131,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"1685:7:22","nodeType":"FunctionDefinition","parameters":{"id":3108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3105,"mutability":"mutable","name":"guy","nameLocation":"1701:3:22","nodeType":"VariableDeclaration","scope":3131,"src":"1693:11:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3104,"name":"address","nodeType":"ElementaryTypeName","src":"1693:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3107,"mutability":"mutable","name":"wad","nameLocation":"1714:3:22","nodeType":"VariableDeclaration","scope":3131,"src":"1706:11:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3106,"name":"uint256","nodeType":"ElementaryTypeName","src":"1706:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1692:26:22"},"returnParameters":{"id":3111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3110,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3131,"src":"1735:4:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3109,"name":"bool","nodeType":"ElementaryTypeName","src":"1735:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1734:6:22"},"scope":3228,"src":"1676:166:22","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3147,"nodeType":"Block","src":"1912:52:22","statements":[{"expression":{"arguments":[{"expression":{"id":3141,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1938:3:22","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1938:10:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3143,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3133,"src":"1950:3:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3144,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3135,"src":"1955:3:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3140,"name":"transferFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3227,"src":"1925:12:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) returns (bool)"}},"id":3145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1925:34:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":3139,"id":3146,"nodeType":"Return","src":"1918:41:22"}]},"functionSelector":"a9059cbb","id":3148,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1855:8:22","nodeType":"FunctionDefinition","parameters":{"id":3136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3133,"mutability":"mutable","name":"dst","nameLocation":"1872:3:22","nodeType":"VariableDeclaration","scope":3148,"src":"1864:11:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3132,"name":"address","nodeType":"ElementaryTypeName","src":"1864:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3135,"mutability":"mutable","name":"wad","nameLocation":"1885:3:22","nodeType":"VariableDeclaration","scope":3148,"src":"1877:11:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3134,"name":"uint256","nodeType":"ElementaryTypeName","src":"1877:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1863:26:22"},"returnParameters":{"id":3139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3138,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3148,"src":"1906:4:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3137,"name":"bool","nodeType":"ElementaryTypeName","src":"1906:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1905:6:22"},"scope":3228,"src":"1846:118:22","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3226,"nodeType":"Block","src":"2051:327:22","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":3160,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3022,"src":"2065:9:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3162,"indexExpression":{"id":3161,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3150,"src":"2075:3:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2065:14:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3163,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3154,"src":"2083:3:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2065:21:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":3159,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2057:7:22","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":3165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2057:30:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3166,"nodeType":"ExpressionStatement","src":"2057:30:22"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3167,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3150,"src":"2098:3:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":3168,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2105:3:22","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2105:10:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2098:17:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":3171,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3028,"src":"2119:9:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3173,"indexExpression":{"id":3172,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3150,"src":"2129:3:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2119:14:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3176,"indexExpression":{"expression":{"id":3174,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2134:3:22","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2134:10:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2119:26:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"arguments":[{"id":3179,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2154:7:22","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":3178,"name":"uint256","nodeType":"ElementaryTypeName","src":"2154:7:22","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":3177,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2149:4:22","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":3180,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2149:13:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":3181,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"2149:17:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2119:47:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2098:68:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3205,"nodeType":"IfStatement","src":"2094:172:22","trueBody":{"id":3204,"nodeType":"Block","src":"2168:98:22","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":3185,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3028,"src":"2184:9:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3187,"indexExpression":{"id":3186,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3150,"src":"2194:3:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2184:14:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3190,"indexExpression":{"expression":{"id":3188,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2199:3:22","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2199:10:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2184:26:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3191,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3154,"src":"2214:3:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2184:33:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":3184,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2176:7:22","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":3193,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2176:42:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3194,"nodeType":"ExpressionStatement","src":"2176:42:22"},{"expression":{"id":3202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":3195,"name":"allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3028,"src":"2226:9:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":3199,"indexExpression":{"id":3196,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3150,"src":"2236:3:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2226:14:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3200,"indexExpression":{"expression":{"id":3197,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2241:3:22","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2241:10:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2226:26:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3201,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3154,"src":"2256:3:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2226:33:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3203,"nodeType":"ExpressionStatement","src":"2226:33:22"}]}},{"expression":{"id":3210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3206,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3022,"src":"2272:9:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3208,"indexExpression":{"id":3207,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3150,"src":"2282:3:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2272:14:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3209,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3154,"src":"2290:3:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2272:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3211,"nodeType":"ExpressionStatement","src":"2272:21:22"},{"expression":{"id":3216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3212,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3022,"src":"2299:9:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":3214,"indexExpression":{"id":3213,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3152,"src":"2309:3:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2299:14:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3215,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3154,"src":"2317:3:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2299:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3217,"nodeType":"ExpressionStatement","src":"2299:21:22"},{"eventCall":{"arguments":[{"id":3219,"name":"src","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3150,"src":"2341:3:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3220,"name":"dst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3152,"src":"2346:3:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3221,"name":"wad","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3154,"src":"2351:3:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3218,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3006,"src":"2332:8:22","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":3222,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2332:23:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3223,"nodeType":"EmitStatement","src":"2327:28:22"},{"expression":{"hexValue":"74727565","id":3224,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2369:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3158,"id":3225,"nodeType":"Return","src":"2362:11:22"}]},"functionSelector":"23b872dd","id":3227,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"1977:12:22","nodeType":"FunctionDefinition","parameters":{"id":3155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3150,"mutability":"mutable","name":"src","nameLocation":"1998:3:22","nodeType":"VariableDeclaration","scope":3227,"src":"1990:11:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3149,"name":"address","nodeType":"ElementaryTypeName","src":"1990:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3152,"mutability":"mutable","name":"dst","nameLocation":"2011:3:22","nodeType":"VariableDeclaration","scope":3227,"src":"2003:11:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3151,"name":"address","nodeType":"ElementaryTypeName","src":"2003:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3154,"mutability":"mutable","name":"wad","nameLocation":"2024:3:22","nodeType":"VariableDeclaration","scope":3227,"src":"2016:11:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3153,"name":"uint256","nodeType":"ElementaryTypeName","src":"2016:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1989:39:22"},"returnParameters":{"id":3158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3157,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3227,"src":"2045:4:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3156,"name":"bool","nodeType":"ElementaryTypeName","src":"2045:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2044:6:22"},"scope":3228,"src":"1968:410:22","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":3229,"src":"712:1668:22","usedErrors":[]}],"src":"686:36850:22"},"id":22},"@aave/core-v3/contracts/deployments/ReservesSetupHelper.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/deployments/ReservesSetupHelper.sol","exportedSymbols":{"Ownable":[1573],"PoolConfigurator":[25278],"ReservesSetupHelper":[3388]},"id":3389,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":3230,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:23"},{"absolutePath":"@aave/core-v3/contracts/protocol/pool/PoolConfigurator.sol","file":"../protocol/pool/PoolConfigurator.sol","id":3232,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3389,"sourceUnit":25279,"src":"62:71:23","symbolAliases":[{"foreign":{"id":3231,"name":"PoolConfigurator","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:16:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol","file":"../dependencies/openzeppelin/contracts/Ownable.sol","id":3234,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3389,"sourceUnit":1574,"src":"134:75:23","symbolAliases":[{"foreign":{"id":3233,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"src":"142:7:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3236,"name":"Ownable","nodeType":"IdentifierPath","referencedDeclaration":1573,"src":"510:7:23"},"id":3237,"nodeType":"InheritanceSpecifier","src":"510:7:23"}],"canonicalName":"ReservesSetupHelper","contractDependencies":[],"contractKind":"contract","documentation":{"id":3235,"nodeType":"StructuredDocumentation","src":"211:266:23","text":" @title ReservesSetupHelper\n @author Aave\n @notice Deployment helper to setup the assets risk parameters at PoolConfigurator in batch.\n @dev The ReservesSetupHelper is an Ownable contract, so only the deployer or future owners can call this contract."},"fullyImplemented":true,"id":3388,"linearizedBaseContracts":[3388,1573,748],"name":"ReservesSetupHelper","nameLocation":"487:19:23","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ReservesSetupHelper.ConfigureReserveInput","id":3258,"members":[{"constant":false,"id":3239,"mutability":"mutable","name":"asset","nameLocation":"565:5:23","nodeType":"VariableDeclaration","scope":3258,"src":"557:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3238,"name":"address","nodeType":"ElementaryTypeName","src":"557:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3241,"mutability":"mutable","name":"baseLTV","nameLocation":"584:7:23","nodeType":"VariableDeclaration","scope":3258,"src":"576:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3240,"name":"uint256","nodeType":"ElementaryTypeName","src":"576:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3243,"mutability":"mutable","name":"liquidationThreshold","nameLocation":"605:20:23","nodeType":"VariableDeclaration","scope":3258,"src":"597:28:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3242,"name":"uint256","nodeType":"ElementaryTypeName","src":"597:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3245,"mutability":"mutable","name":"liquidationBonus","nameLocation":"639:16:23","nodeType":"VariableDeclaration","scope":3258,"src":"631:24:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3244,"name":"uint256","nodeType":"ElementaryTypeName","src":"631:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3247,"mutability":"mutable","name":"reserveFactor","nameLocation":"669:13:23","nodeType":"VariableDeclaration","scope":3258,"src":"661:21:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3246,"name":"uint256","nodeType":"ElementaryTypeName","src":"661:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3249,"mutability":"mutable","name":"borrowCap","nameLocation":"696:9:23","nodeType":"VariableDeclaration","scope":3258,"src":"688:17:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3248,"name":"uint256","nodeType":"ElementaryTypeName","src":"688:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3251,"mutability":"mutable","name":"supplyCap","nameLocation":"719:9:23","nodeType":"VariableDeclaration","scope":3258,"src":"711:17:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3250,"name":"uint256","nodeType":"ElementaryTypeName","src":"711:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3253,"mutability":"mutable","name":"stableBorrowingEnabled","nameLocation":"739:22:23","nodeType":"VariableDeclaration","scope":3258,"src":"734:27:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3252,"name":"bool","nodeType":"ElementaryTypeName","src":"734:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3255,"mutability":"mutable","name":"borrowingEnabled","nameLocation":"772:16:23","nodeType":"VariableDeclaration","scope":3258,"src":"767:21:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3254,"name":"bool","nodeType":"ElementaryTypeName","src":"767:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3257,"mutability":"mutable","name":"flashLoanEnabled","nameLocation":"799:16:23","nodeType":"VariableDeclaration","scope":3258,"src":"794:21:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3256,"name":"bool","nodeType":"ElementaryTypeName","src":"794:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"ConfigureReserveInput","nameLocation":"529:21:23","nodeType":"StructDefinition","scope":3388,"src":"522:298:23","visibility":"public"},{"body":{"id":3386,"nodeType":"Block","src":"1371:890:23","statements":[{"body":{"id":3384,"nodeType":"Block","src":"1426:831:23","statements":[{"expression":{"arguments":[{"expression":{"baseExpression":{"id":3285,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3266,"src":"1485:11:23","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3258_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3287,"indexExpression":{"id":3286,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3272,"src":"1497:1:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1485:14:23","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3258_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":3239,"src":"1485:20:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":3289,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3266,"src":"1515:11:23","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3258_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3291,"indexExpression":{"id":3290,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3272,"src":"1527:1:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1515:14:23","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3258_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"baseLTV","nodeType":"MemberAccess","referencedDeclaration":3241,"src":"1515:22:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"baseExpression":{"id":3293,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3266,"src":"1547:11:23","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3258_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3295,"indexExpression":{"id":3294,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3272,"src":"1559:1:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1547:14:23","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3258_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"liquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":3243,"src":"1547:35:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"baseExpression":{"id":3297,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3266,"src":"1592:11:23","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3258_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3299,"indexExpression":{"id":3298,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3272,"src":"1604:1:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1592:14:23","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3258_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"liquidationBonus","nodeType":"MemberAccess","referencedDeclaration":3245,"src":"1592:31:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3282,"name":"configurator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3262,"src":"1434:12:23","typeDescriptions":{"typeIdentifier":"t_contract$_PoolConfigurator_$25278","typeString":"contract PoolConfigurator"}},"id":3284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"configureReserveAsCollateral","nodeType":"MemberAccess","referencedDeclaration":24025,"src":"1434:41:23","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256,uint256) external"}},"id":3301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1434:197:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3302,"nodeType":"ExpressionStatement","src":"1434:197:23"},{"condition":{"expression":{"baseExpression":{"id":3303,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3266,"src":"1644:11:23","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3258_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3305,"indexExpression":{"id":3304,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3272,"src":"1656:1:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1644:14:23","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3258_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"borrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":3255,"src":"1644:31:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3344,"nodeType":"IfStatement","src":"1640:343:23","trueBody":{"id":3343,"nodeType":"Block","src":"1677:306:23","statements":[{"expression":{"arguments":[{"expression":{"baseExpression":{"id":3310,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3266,"src":"1720:11:23","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3258_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3312,"indexExpression":{"id":3311,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3272,"src":"1732:1:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1720:14:23","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3258_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":3239,"src":"1720:20:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"74727565","id":3314,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1742:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":3307,"name":"configurator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3262,"src":"1687:12:23","typeDescriptions":{"typeIdentifier":"t_contract$_PoolConfigurator_$25278","typeString":"contract PoolConfigurator"}},"id":3309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setReserveBorrowing","nodeType":"MemberAccess","referencedDeclaration":23920,"src":"1687:32:23","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool) external"}},"id":3315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1687:60:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3316,"nodeType":"ExpressionStatement","src":"1687:60:23"},{"expression":{"arguments":[{"expression":{"baseExpression":{"id":3320,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3266,"src":"1784:11:23","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3258_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3322,"indexExpression":{"id":3321,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3272,"src":"1796:1:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1784:14:23","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3258_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":3239,"src":"1784:20:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":3324,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3266,"src":"1806:11:23","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3258_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3326,"indexExpression":{"id":3325,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3272,"src":"1818:1:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1806:14:23","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3258_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"borrowCap","nodeType":"MemberAccess","referencedDeclaration":3249,"src":"1806:24:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3317,"name":"configurator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3262,"src":"1758:12:23","typeDescriptions":{"typeIdentifier":"t_contract$_PoolConfigurator_$25278","typeString":"contract PoolConfigurator"}},"id":3319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setBorrowCap","nodeType":"MemberAccess","referencedDeclaration":24507,"src":"1758:25:23","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":3328,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1758:73:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3329,"nodeType":"ExpressionStatement","src":"1758:73:23"},{"expression":{"arguments":[{"expression":{"baseExpression":{"id":3333,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3266,"src":"1895:11:23","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3258_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3335,"indexExpression":{"id":3334,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3272,"src":"1907:1:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1895:14:23","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3258_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":3239,"src":"1895:20:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":3337,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3266,"src":"1927:11:23","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3258_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3339,"indexExpression":{"id":3338,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3272,"src":"1939:1:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1927:14:23","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3258_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"stableBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":3253,"src":"1927:37:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":3330,"name":"configurator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3262,"src":"1841:12:23","typeDescriptions":{"typeIdentifier":"t_contract$_PoolConfigurator_$25278","typeString":"contract PoolConfigurator"}},"id":3332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setReserveStableRateBorrowing","nodeType":"MemberAccess","referencedDeclaration":24076,"src":"1841:42:23","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool) external"}},"id":3341,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1841:133:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3342,"nodeType":"ExpressionStatement","src":"1841:133:23"}]}},{"expression":{"arguments":[{"expression":{"baseExpression":{"id":3348,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3266,"src":"2026:11:23","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3258_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3350,"indexExpression":{"id":3349,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3272,"src":"2038:1:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2026:14:23","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3258_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":3239,"src":"2026:20:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":3352,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3266,"src":"2048:11:23","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3258_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3354,"indexExpression":{"id":3353,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3272,"src":"2060:1:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2048:14:23","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3258_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"flashLoanEnabled","nodeType":"MemberAccess","referencedDeclaration":3257,"src":"2048:31:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":3345,"name":"configurator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3262,"src":"1990:12:23","typeDescriptions":{"typeIdentifier":"t_contract$_PoolConfigurator_$25278","typeString":"contract PoolConfigurator"}},"id":3347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setReserveFlashLoaning","nodeType":"MemberAccess","referencedDeclaration":24116,"src":"1990:35:23","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool) external"}},"id":3356,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1990:90:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3357,"nodeType":"ExpressionStatement","src":"1990:90:23"},{"expression":{"arguments":[{"expression":{"baseExpression":{"id":3361,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3266,"src":"2114:11:23","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3258_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3363,"indexExpression":{"id":3362,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3272,"src":"2126:1:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2114:14:23","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3258_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":3239,"src":"2114:20:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":3365,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3266,"src":"2136:11:23","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3258_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3367,"indexExpression":{"id":3366,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3272,"src":"2148:1:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2136:14:23","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3258_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"supplyCap","nodeType":"MemberAccess","referencedDeclaration":3251,"src":"2136:24:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3358,"name":"configurator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3262,"src":"2088:12:23","typeDescriptions":{"typeIdentifier":"t_contract$_PoolConfigurator_$25278","typeString":"contract PoolConfigurator"}},"id":3360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setSupplyCap","nodeType":"MemberAccess","referencedDeclaration":24554,"src":"2088:25:23","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":3369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2088:73:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3370,"nodeType":"ExpressionStatement","src":"2088:73:23"},{"expression":{"arguments":[{"expression":{"baseExpression":{"id":3374,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3266,"src":"2199:11:23","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3258_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3376,"indexExpression":{"id":3375,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3272,"src":"2211:1:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2199:14:23","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3258_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":3239,"src":"2199:20:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":3378,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3266,"src":"2221:11:23","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3258_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3380,"indexExpression":{"id":3379,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3272,"src":"2233:1:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2221:14:23","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3258_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata"}},"id":3381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"reserveFactor","nodeType":"MemberAccess","referencedDeclaration":3247,"src":"2221:28:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3371,"name":"configurator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3262,"src":"2169:12:23","typeDescriptions":{"typeIdentifier":"t_contract$_PoolConfigurator_$25278","typeString":"contract PoolConfigurator"}},"id":3373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setReserveFactor","nodeType":"MemberAccess","referencedDeclaration":24339,"src":"2169:29:23","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":3382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2169:81:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3383,"nodeType":"ExpressionStatement","src":"2169:81:23"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3275,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3272,"src":"1397:1:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":3276,"name":"inputParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3266,"src":"1401:11:23","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3258_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput calldata[] calldata"}},"id":3277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1401:18:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1397:22:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3385,"initializationExpression":{"assignments":[3272],"declarations":[{"constant":false,"id":3272,"mutability":"mutable","name":"i","nameLocation":"1390:1:23","nodeType":"VariableDeclaration","scope":3385,"src":"1382:9:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3271,"name":"uint256","nodeType":"ElementaryTypeName","src":"1382:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3274,"initialValue":{"hexValue":"30","id":3273,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1394:1:23","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1382:13:23"},"loopExpression":{"expression":{"id":3280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1421:3:23","subExpression":{"id":3279,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3272,"src":"1421:1:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3281,"nodeType":"ExpressionStatement","src":"1421:3:23"},"nodeType":"ForStatement","src":"1377:880:23"}]},"documentation":{"id":3259,"nodeType":"StructuredDocumentation","src":"824:409:23","text":" @notice External function called by the owner account to setup the assets risk parameters in batch.\n @dev The Pool or Risk admin must transfer the ownership to ReservesSetupHelper before calling this function\n @param configurator The address of PoolConfigurator contract\n @param inputParams An array of ConfigureReserveInput struct that contains the assets and their risk parameters"},"functionSelector":"23bb1093","id":3387,"implemented":true,"kind":"function","modifiers":[{"id":3269,"kind":"modifierInvocation","modifierName":{"id":3268,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"1361:9:23"},"nodeType":"ModifierInvocation","src":"1361:9:23"}],"name":"configureReserves","nameLocation":"1245:17:23","nodeType":"FunctionDefinition","parameters":{"id":3267,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3262,"mutability":"mutable","name":"configurator","nameLocation":"1285:12:23","nodeType":"VariableDeclaration","scope":3387,"src":"1268:29:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_PoolConfigurator_$25278","typeString":"contract PoolConfigurator"},"typeName":{"id":3261,"nodeType":"UserDefinedTypeName","pathNode":{"id":3260,"name":"PoolConfigurator","nodeType":"IdentifierPath","referencedDeclaration":25278,"src":"1268:16:23"},"referencedDeclaration":25278,"src":"1268:16:23","typeDescriptions":{"typeIdentifier":"t_contract$_PoolConfigurator_$25278","typeString":"contract PoolConfigurator"}},"visibility":"internal"},{"constant":false,"id":3266,"mutability":"mutable","name":"inputParams","nameLocation":"1336:11:23","nodeType":"VariableDeclaration","scope":3387,"src":"1303:44:23","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3258_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput[]"},"typeName":{"baseType":{"id":3264,"nodeType":"UserDefinedTypeName","pathNode":{"id":3263,"name":"ConfigureReserveInput","nodeType":"IdentifierPath","referencedDeclaration":3258,"src":"1303:21:23"},"referencedDeclaration":3258,"src":"1303:21:23","typeDescriptions":{"typeIdentifier":"t_struct$_ConfigureReserveInput_$3258_storage_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput"}},"id":3265,"nodeType":"ArrayTypeName","src":"1303:23:23","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_ConfigureReserveInput_$3258_storage_$dyn_storage_ptr","typeString":"struct ReservesSetupHelper.ConfigureReserveInput[]"}},"visibility":"internal"}],"src":"1262:89:23"},"returnParameters":{"id":3270,"nodeType":"ParameterList","parameters":[],"src":"1371:0:23"},"scope":3388,"src":"1236:1025:23","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3389,"src":"478:1785:23","usedErrors":[]}],"src":"37:2227:23"},"id":23},"@aave/core-v3/contracts/flashloan/base/FlashLoanReceiverBase.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/flashloan/base/FlashLoanReceiverBase.sol","exportedSymbols":{"FlashLoanReceiverBase":[3427],"IFlashLoanReceiver":[3505],"IPool":[4860],"IPoolAddressesProvider":[5069]},"id":3428,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":3390,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:24"},{"absolutePath":"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanReceiver.sol","file":"../interfaces/IFlashLoanReceiver.sol","id":3392,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3428,"sourceUnit":3506,"src":"62:72:24","symbolAliases":[{"foreign":{"id":3391,"name":"IFlashLoanReceiver","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:18:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":3394,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3428,"sourceUnit":5070,"src":"135:83:24","symbolAliases":[{"foreign":{"id":3393,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"143:22:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":3396,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3428,"sourceUnit":4861,"src":"219:49:24","symbolAliases":[{"foreign":{"id":3395,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"227:5:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":3398,"name":"IFlashLoanReceiver","nodeType":"IdentifierPath","referencedDeclaration":3505,"src":"436:18:24"},"id":3399,"nodeType":"InheritanceSpecifier","src":"436:18:24"}],"canonicalName":"FlashLoanReceiverBase","contractDependencies":[],"contractKind":"contract","documentation":{"id":3397,"nodeType":"StructuredDocumentation","src":"270:122:24","text":" @title FlashLoanReceiverBase\n @author Aave\n @notice Base contract to develop a flashloan-receiver contract."},"fullyImplemented":false,"id":3427,"linearizedBaseContracts":[3427,3505],"name":"FlashLoanReceiverBase","nameLocation":"411:21:24","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[3498],"constant":false,"functionSelector":"0542975c","id":3403,"mutability":"immutable","name":"ADDRESSES_PROVIDER","nameLocation":"508:18:24","nodeType":"VariableDeclaration","overrides":{"id":3402,"nodeType":"OverrideSpecifier","overrides":[],"src":"499:8:24"},"scope":3427,"src":"459:67:24","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":3401,"nodeType":"UserDefinedTypeName","pathNode":{"id":3400,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"459:22:24"},"referencedDeclaration":5069,"src":"459:22:24","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"public"},{"baseFunctions":[3504],"constant":false,"functionSelector":"7535d246","id":3407,"mutability":"immutable","name":"POOL","nameLocation":"562:4:24","nodeType":"VariableDeclaration","overrides":{"id":3406,"nodeType":"OverrideSpecifier","overrides":[],"src":"553:8:24"},"scope":3427,"src":"530:36:24","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":3405,"nodeType":"UserDefinedTypeName","pathNode":{"id":3404,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"530:5:24"},"referencedDeclaration":4860,"src":"530:5:24","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"public"},{"body":{"id":3425,"nodeType":"Block","src":"616:78:24","statements":[{"expression":{"id":3415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3413,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3403,"src":"622:18:24","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3414,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3410,"src":"643:8:24","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"src":"622:29:24","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":3416,"nodeType":"ExpressionStatement","src":"622:29:24"},{"expression":{"id":3423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3417,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3407,"src":"657:4:24","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3419,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3410,"src":"670:8:24","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":3420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"670:16:24","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":3421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"670:18:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3418,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"664:5:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":3422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"664:25:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"src":"657:32:24","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":3424,"nodeType":"ExpressionStatement","src":"657:32:24"}]},"id":3426,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":3411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3410,"mutability":"mutable","name":"provider","nameLocation":"606:8:24","nodeType":"VariableDeclaration","scope":3426,"src":"583:31:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":3409,"nodeType":"UserDefinedTypeName","pathNode":{"id":3408,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"583:22:24"},"referencedDeclaration":5069,"src":"583:22:24","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"582:33:24"},"returnParameters":{"id":3412,"nodeType":"ParameterList","parameters":[],"src":"616:0:24"},"scope":3427,"src":"571:123:24","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":3428,"src":"393:303:24","usedErrors":[]}],"src":"37:660:24"},"id":24},"@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol","exportedSymbols":{"FlashLoanSimpleReceiverBase":[3466],"IFlashLoanSimpleReceiver":[3541],"IPool":[4860],"IPoolAddressesProvider":[5069]},"id":3467,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":3429,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:25"},{"absolutePath":"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol","file":"../interfaces/IFlashLoanSimpleReceiver.sol","id":3431,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3467,"sourceUnit":3542,"src":"62:84:25","symbolAliases":[{"foreign":{"id":3430,"name":"IFlashLoanSimpleReceiver","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:24:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":3433,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3467,"sourceUnit":5070,"src":"147:83:25","symbolAliases":[{"foreign":{"id":3432,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"155:22:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":3435,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3467,"sourceUnit":4861,"src":"231:49:25","symbolAliases":[{"foreign":{"id":3434,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"239:5:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":3437,"name":"IFlashLoanSimpleReceiver","nodeType":"IdentifierPath","referencedDeclaration":3541,"src":"460:24:25"},"id":3438,"nodeType":"InheritanceSpecifier","src":"460:24:25"}],"canonicalName":"FlashLoanSimpleReceiverBase","contractDependencies":[],"contractKind":"contract","documentation":{"id":3436,"nodeType":"StructuredDocumentation","src":"282:128:25","text":" @title FlashLoanSimpleReceiverBase\n @author Aave\n @notice Base contract to develop a flashloan-receiver contract."},"fullyImplemented":false,"id":3466,"linearizedBaseContracts":[3466,3541],"name":"FlashLoanSimpleReceiverBase","nameLocation":"429:27:25","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[3534],"constant":false,"functionSelector":"0542975c","id":3442,"mutability":"immutable","name":"ADDRESSES_PROVIDER","nameLocation":"538:18:25","nodeType":"VariableDeclaration","overrides":{"id":3441,"nodeType":"OverrideSpecifier","overrides":[],"src":"529:8:25"},"scope":3466,"src":"489:67:25","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":3440,"nodeType":"UserDefinedTypeName","pathNode":{"id":3439,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"489:22:25"},"referencedDeclaration":5069,"src":"489:22:25","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"public"},{"baseFunctions":[3540],"constant":false,"functionSelector":"7535d246","id":3446,"mutability":"immutable","name":"POOL","nameLocation":"592:4:25","nodeType":"VariableDeclaration","overrides":{"id":3445,"nodeType":"OverrideSpecifier","overrides":[],"src":"583:8:25"},"scope":3466,"src":"560:36:25","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":3444,"nodeType":"UserDefinedTypeName","pathNode":{"id":3443,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"560:5:25"},"referencedDeclaration":4860,"src":"560:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"public"},{"body":{"id":3464,"nodeType":"Block","src":"646:78:25","statements":[{"expression":{"id":3454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3452,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3442,"src":"652:18:25","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3453,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3449,"src":"673:8:25","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"src":"652:29:25","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":3455,"nodeType":"ExpressionStatement","src":"652:29:25"},{"expression":{"id":3462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3456,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"687:4:25","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3458,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3449,"src":"700:8:25","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":3459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"700:16:25","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":3460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"700:18:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3457,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"694:5:25","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":3461,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"694:25:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"src":"687:32:25","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":3463,"nodeType":"ExpressionStatement","src":"687:32:25"}]},"id":3465,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":3450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3449,"mutability":"mutable","name":"provider","nameLocation":"636:8:25","nodeType":"VariableDeclaration","scope":3465,"src":"613:31:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":3448,"nodeType":"UserDefinedTypeName","pathNode":{"id":3447,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"613:22:25"},"referencedDeclaration":5069,"src":"613:22:25","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"612:33:25"},"returnParameters":{"id":3451,"nodeType":"ParameterList","parameters":[],"src":"646:0:25"},"scope":3466,"src":"601:123:25","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":3467,"src":"411:315:25","usedErrors":[]}],"src":"37:690:25"},"id":25},"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanReceiver.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanReceiver.sol","exportedSymbols":{"IFlashLoanReceiver":[3505],"IPool":[4860],"IPoolAddressesProvider":[5069]},"id":3506,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":3468,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:26"},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":3470,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3506,"sourceUnit":5070,"src":"62:83:26","symbolAliases":[{"foreign":{"id":3469,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:22:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":3472,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3506,"sourceUnit":4861,"src":"146:49:26","symbolAliases":[{"foreign":{"id":3471,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"154:5:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IFlashLoanReceiver","contractDependencies":[],"contractKind":"interface","documentation":{"id":3473,"nodeType":"StructuredDocumentation","src":"197:219:26","text":" @title IFlashLoanReceiver\n @author Aave\n @notice Defines the basic interface of a flashloan-receiver contract.\n @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract"},"fullyImplemented":false,"id":3505,"linearizedBaseContracts":[3505],"name":"IFlashLoanReceiver","nameLocation":"427:18:26","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3474,"nodeType":"StructuredDocumentation","src":"450:645:26","text":" @notice Executes an operation after receiving the flash-borrowed assets\n @dev Ensure that the contract can return the debt + premium, e.g., has\n      enough funds to repay and has approved the Pool to pull the total amount\n @param assets The addresses of the flash-borrowed assets\n @param amounts The amounts of the flash-borrowed assets\n @param premiums The fee of each flash-borrowed asset\n @param initiator The address of the flashloan initiator\n @param params The byte-encoded params passed when initiating the flashloan\n @return True if the execution of the operation succeeds, false otherwise"},"functionSelector":"920f5c84","id":3492,"implemented":false,"kind":"function","modifiers":[],"name":"executeOperation","nameLocation":"1107:16:26","nodeType":"FunctionDefinition","parameters":{"id":3488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3477,"mutability":"mutable","name":"assets","nameLocation":"1148:6:26","nodeType":"VariableDeclaration","scope":3492,"src":"1129:25:26","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":3475,"name":"address","nodeType":"ElementaryTypeName","src":"1129:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3476,"nodeType":"ArrayTypeName","src":"1129:9:26","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":3480,"mutability":"mutable","name":"amounts","nameLocation":"1179:7:26","nodeType":"VariableDeclaration","scope":3492,"src":"1160:26:26","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3478,"name":"uint256","nodeType":"ElementaryTypeName","src":"1160:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3479,"nodeType":"ArrayTypeName","src":"1160:9:26","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3483,"mutability":"mutable","name":"premiums","nameLocation":"1211:8:26","nodeType":"VariableDeclaration","scope":3492,"src":"1192:27:26","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3481,"name":"uint256","nodeType":"ElementaryTypeName","src":"1192:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3482,"nodeType":"ArrayTypeName","src":"1192:9:26","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3485,"mutability":"mutable","name":"initiator","nameLocation":"1233:9:26","nodeType":"VariableDeclaration","scope":3492,"src":"1225:17:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3484,"name":"address","nodeType":"ElementaryTypeName","src":"1225:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3487,"mutability":"mutable","name":"params","nameLocation":"1263:6:26","nodeType":"VariableDeclaration","scope":3492,"src":"1248:21:26","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3486,"name":"bytes","nodeType":"ElementaryTypeName","src":"1248:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1123:150:26"},"returnParameters":{"id":3491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3490,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3492,"src":"1292:4:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3489,"name":"bool","nodeType":"ElementaryTypeName","src":"1292:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1291:6:26"},"scope":3505,"src":"1098:200:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"0542975c","id":3498,"implemented":false,"kind":"function","modifiers":[],"name":"ADDRESSES_PROVIDER","nameLocation":"1311:18:26","nodeType":"FunctionDefinition","parameters":{"id":3493,"nodeType":"ParameterList","parameters":[],"src":"1329:2:26"},"returnParameters":{"id":3497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3496,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3498,"src":"1355:22:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":3495,"nodeType":"UserDefinedTypeName","pathNode":{"id":3494,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"1355:22:26"},"referencedDeclaration":5069,"src":"1355:22:26","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"1354:24:26"},"scope":3505,"src":"1302:77:26","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"7535d246","id":3504,"implemented":false,"kind":"function","modifiers":[],"name":"POOL","nameLocation":"1392:4:26","nodeType":"FunctionDefinition","parameters":{"id":3499,"nodeType":"ParameterList","parameters":[],"src":"1396:2:26"},"returnParameters":{"id":3503,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3502,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3504,"src":"1422:5:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":3501,"nodeType":"UserDefinedTypeName","pathNode":{"id":3500,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"1422:5:26"},"referencedDeclaration":4860,"src":"1422:5:26","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"}],"src":"1421:7:26"},"scope":3505,"src":"1383:46:26","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3506,"src":"417:1014:26","usedErrors":[]}],"src":"37:1395:26"},"id":26},"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol","exportedSymbols":{"IFlashLoanSimpleReceiver":[3541],"IPool":[4860],"IPoolAddressesProvider":[5069]},"id":3542,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":3507,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:27"},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":3509,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3542,"sourceUnit":5070,"src":"62:83:27","symbolAliases":[{"foreign":{"id":3508,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:22:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":3511,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3542,"sourceUnit":4861,"src":"146:49:27","symbolAliases":[{"foreign":{"id":3510,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"154:5:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IFlashLoanSimpleReceiver","contractDependencies":[],"contractKind":"interface","documentation":{"id":3512,"nodeType":"StructuredDocumentation","src":"197:225:27","text":" @title IFlashLoanSimpleReceiver\n @author Aave\n @notice Defines the basic interface of a flashloan-receiver contract.\n @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract"},"fullyImplemented":false,"id":3541,"linearizedBaseContracts":[3541],"name":"IFlashLoanSimpleReceiver","nameLocation":"433:24:27","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3513,"nodeType":"StructuredDocumentation","src":"462:635:27","text":" @notice Executes an operation after receiving the flash-borrowed asset\n @dev Ensure that the contract can return the debt + premium, e.g., has\n      enough funds to repay and has approved the Pool to pull the total amount\n @param asset The address of the flash-borrowed asset\n @param amount The amount of the flash-borrowed asset\n @param premium The fee of the flash-borrowed asset\n @param initiator The address of the flashloan initiator\n @param params The byte-encoded params passed when initiating the flashloan\n @return True if the execution of the operation succeeds, false otherwise"},"functionSelector":"1b11d0ff","id":3528,"implemented":false,"kind":"function","modifiers":[],"name":"executeOperation","nameLocation":"1109:16:27","nodeType":"FunctionDefinition","parameters":{"id":3524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3515,"mutability":"mutable","name":"asset","nameLocation":"1139:5:27","nodeType":"VariableDeclaration","scope":3528,"src":"1131:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3514,"name":"address","nodeType":"ElementaryTypeName","src":"1131:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3517,"mutability":"mutable","name":"amount","nameLocation":"1158:6:27","nodeType":"VariableDeclaration","scope":3528,"src":"1150:14:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3516,"name":"uint256","nodeType":"ElementaryTypeName","src":"1150:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3519,"mutability":"mutable","name":"premium","nameLocation":"1178:7:27","nodeType":"VariableDeclaration","scope":3528,"src":"1170:15:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3518,"name":"uint256","nodeType":"ElementaryTypeName","src":"1170:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3521,"mutability":"mutable","name":"initiator","nameLocation":"1199:9:27","nodeType":"VariableDeclaration","scope":3528,"src":"1191:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3520,"name":"address","nodeType":"ElementaryTypeName","src":"1191:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3523,"mutability":"mutable","name":"params","nameLocation":"1229:6:27","nodeType":"VariableDeclaration","scope":3528,"src":"1214:21:27","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3522,"name":"bytes","nodeType":"ElementaryTypeName","src":"1214:5:27","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1125:114:27"},"returnParameters":{"id":3527,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3526,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3528,"src":"1258:4:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3525,"name":"bool","nodeType":"ElementaryTypeName","src":"1258:4:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1257:6:27"},"scope":3541,"src":"1100:164:27","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"0542975c","id":3534,"implemented":false,"kind":"function","modifiers":[],"name":"ADDRESSES_PROVIDER","nameLocation":"1277:18:27","nodeType":"FunctionDefinition","parameters":{"id":3529,"nodeType":"ParameterList","parameters":[],"src":"1295:2:27"},"returnParameters":{"id":3533,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3532,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3534,"src":"1321:22:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":3531,"nodeType":"UserDefinedTypeName","pathNode":{"id":3530,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"1321:22:27"},"referencedDeclaration":5069,"src":"1321:22:27","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"1320:24:27"},"scope":3541,"src":"1268:77:27","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"7535d246","id":3540,"implemented":false,"kind":"function","modifiers":[],"name":"POOL","nameLocation":"1358:4:27","nodeType":"FunctionDefinition","parameters":{"id":3535,"nodeType":"ParameterList","parameters":[],"src":"1362:2:27"},"returnParameters":{"id":3539,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3538,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3540,"src":"1388:5:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":3537,"nodeType":"UserDefinedTypeName","pathNode":{"id":3536,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"1388:5:27"},"referencedDeclaration":4860,"src":"1388:5:27","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"}],"src":"1387:7:27"},"scope":3541,"src":"1349:46:27","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3542,"src":"423:974:27","usedErrors":[]}],"src":"37:1361:27"},"id":27},"@aave/core-v3/contracts/interfaces/IACLManager.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/interfaces/IACLManager.sol","exportedSymbols":{"IACLManager":[3718],"IPoolAddressesProvider":[5069]},"id":3719,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":3543,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:28"},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"./IPoolAddressesProvider.sol","id":3545,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3719,"sourceUnit":5070,"src":"62:68:28","symbolAliases":[{"foreign":{"id":3544,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:22:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IACLManager","contractDependencies":[],"contractKind":"interface","documentation":{"id":3546,"nodeType":"StructuredDocumentation","src":"132:104:28","text":" @title IACLManager\n @author Aave\n @notice Defines the basic interface for the ACL Manager"},"fullyImplemented":false,"id":3718,"linearizedBaseContracts":[3718],"name":"IACLManager","nameLocation":"247:11:28","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3547,"nodeType":"StructuredDocumentation","src":"263:134:28","text":" @notice Returns the contract address of the PoolAddressesProvider\n @return The address of the PoolAddressesProvider"},"functionSelector":"0542975c","id":3553,"implemented":false,"kind":"function","modifiers":[],"name":"ADDRESSES_PROVIDER","nameLocation":"409:18:28","nodeType":"FunctionDefinition","parameters":{"id":3548,"nodeType":"ParameterList","parameters":[],"src":"427:2:28"},"returnParameters":{"id":3552,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3551,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3553,"src":"453:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":3550,"nodeType":"UserDefinedTypeName","pathNode":{"id":3549,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"453:22:28"},"referencedDeclaration":5069,"src":"453:22:28","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"452:24:28"},"scope":3718,"src":"400:77:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3554,"nodeType":"StructuredDocumentation","src":"481:109:28","text":" @notice Returns the identifier of the PoolAdmin role\n @return The id of the PoolAdmin role"},"functionSelector":"b8f6dba7","id":3559,"implemented":false,"kind":"function","modifiers":[],"name":"POOL_ADMIN_ROLE","nameLocation":"602:15:28","nodeType":"FunctionDefinition","parameters":{"id":3555,"nodeType":"ParameterList","parameters":[],"src":"617:2:28"},"returnParameters":{"id":3558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3557,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3559,"src":"643:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3556,"name":"bytes32","nodeType":"ElementaryTypeName","src":"643:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"642:9:28"},"scope":3718,"src":"593:59:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3560,"nodeType":"StructuredDocumentation","src":"656:119:28","text":" @notice Returns the identifier of the EmergencyAdmin role\n @return The id of the EmergencyAdmin role"},"functionSelector":"6e76fc8f","id":3565,"implemented":false,"kind":"function","modifiers":[],"name":"EMERGENCY_ADMIN_ROLE","nameLocation":"787:20:28","nodeType":"FunctionDefinition","parameters":{"id":3561,"nodeType":"ParameterList","parameters":[],"src":"807:2:28"},"returnParameters":{"id":3564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3563,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3565,"src":"833:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3562,"name":"bytes32","nodeType":"ElementaryTypeName","src":"833:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"832:9:28"},"scope":3718,"src":"778:64:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3566,"nodeType":"StructuredDocumentation","src":"846:109:28","text":" @notice Returns the identifier of the RiskAdmin role\n @return The id of the RiskAdmin role"},"functionSelector":"4f16b425","id":3571,"implemented":false,"kind":"function","modifiers":[],"name":"RISK_ADMIN_ROLE","nameLocation":"967:15:28","nodeType":"FunctionDefinition","parameters":{"id":3567,"nodeType":"ParameterList","parameters":[],"src":"982:2:28"},"returnParameters":{"id":3570,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3569,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3571,"src":"1008:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3568,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1008:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1007:9:28"},"scope":3718,"src":"958:59:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3572,"nodeType":"StructuredDocumentation","src":"1021:117:28","text":" @notice Returns the identifier of the FlashBorrower role\n @return The id of the FlashBorrower role"},"functionSelector":"5577b7a9","id":3577,"implemented":false,"kind":"function","modifiers":[],"name":"FLASH_BORROWER_ROLE","nameLocation":"1150:19:28","nodeType":"FunctionDefinition","parameters":{"id":3573,"nodeType":"ParameterList","parameters":[],"src":"1169:2:28"},"returnParameters":{"id":3576,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3575,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3577,"src":"1195:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3574,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1195:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1194:9:28"},"scope":3718,"src":"1141:63:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3578,"nodeType":"StructuredDocumentation","src":"1208:103:28","text":" @notice Returns the identifier of the Bridge role\n @return The id of the Bridge role"},"functionSelector":"b5bfddea","id":3583,"implemented":false,"kind":"function","modifiers":[],"name":"BRIDGE_ROLE","nameLocation":"1323:11:28","nodeType":"FunctionDefinition","parameters":{"id":3579,"nodeType":"ParameterList","parameters":[],"src":"1334:2:28"},"returnParameters":{"id":3582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3581,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3583,"src":"1360:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3580,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1360:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1359:9:28"},"scope":3718,"src":"1314:55:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3584,"nodeType":"StructuredDocumentation","src":"1373:125:28","text":" @notice Returns the identifier of the AssetListingAdmin role\n @return The id of the AssetListingAdmin role"},"functionSelector":"78bb0a43","id":3589,"implemented":false,"kind":"function","modifiers":[],"name":"ASSET_LISTING_ADMIN_ROLE","nameLocation":"1510:24:28","nodeType":"FunctionDefinition","parameters":{"id":3585,"nodeType":"ParameterList","parameters":[],"src":"1534:2:28"},"returnParameters":{"id":3588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3587,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3589,"src":"1560:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3586,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1560:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1559:9:28"},"scope":3718,"src":"1501:68:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3590,"nodeType":"StructuredDocumentation","src":"1573:234:28","text":" @notice Set the role as admin of a specific role.\n @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\n @param role The role to be managed by the admin role\n @param adminRole The admin role"},"functionSelector":"1e4e0091","id":3597,"implemented":false,"kind":"function","modifiers":[],"name":"setRoleAdmin","nameLocation":"1819:12:28","nodeType":"FunctionDefinition","parameters":{"id":3595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3592,"mutability":"mutable","name":"role","nameLocation":"1840:4:28","nodeType":"VariableDeclaration","scope":3597,"src":"1832:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3591,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1832:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3594,"mutability":"mutable","name":"adminRole","nameLocation":"1854:9:28","nodeType":"VariableDeclaration","scope":3597,"src":"1846:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3593,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1846:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1831:33:28"},"returnParameters":{"id":3596,"nodeType":"ParameterList","parameters":[],"src":"1873:0:28"},"scope":3718,"src":"1810:64:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3598,"nodeType":"StructuredDocumentation","src":"1878:99:28","text":" @notice Adds a new admin as PoolAdmin\n @param admin The address of the new admin"},"functionSelector":"22650caf","id":3603,"implemented":false,"kind":"function","modifiers":[],"name":"addPoolAdmin","nameLocation":"1989:12:28","nodeType":"FunctionDefinition","parameters":{"id":3601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3600,"mutability":"mutable","name":"admin","nameLocation":"2010:5:28","nodeType":"VariableDeclaration","scope":3603,"src":"2002:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3599,"name":"address","nodeType":"ElementaryTypeName","src":"2002:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2001:15:28"},"returnParameters":{"id":3602,"nodeType":"ParameterList","parameters":[],"src":"2025:0:28"},"scope":3718,"src":"1980:46:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3604,"nodeType":"StructuredDocumentation","src":"2030:105:28","text":" @notice Removes an admin as PoolAdmin\n @param admin The address of the admin to remove"},"functionSelector":"f83695cb","id":3609,"implemented":false,"kind":"function","modifiers":[],"name":"removePoolAdmin","nameLocation":"2147:15:28","nodeType":"FunctionDefinition","parameters":{"id":3607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3606,"mutability":"mutable","name":"admin","nameLocation":"2171:5:28","nodeType":"VariableDeclaration","scope":3609,"src":"2163:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3605,"name":"address","nodeType":"ElementaryTypeName","src":"2163:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2162:15:28"},"returnParameters":{"id":3608,"nodeType":"ParameterList","parameters":[],"src":"2186:0:28"},"scope":3718,"src":"2138:49:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3610,"nodeType":"StructuredDocumentation","src":"2191:188:28","text":" @notice Returns true if the address is PoolAdmin, false otherwise\n @param admin The address to check\n @return True if the given address is PoolAdmin, false otherwise"},"functionSelector":"7be53ca1","id":3617,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolAdmin","nameLocation":"2391:11:28","nodeType":"FunctionDefinition","parameters":{"id":3613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3612,"mutability":"mutable","name":"admin","nameLocation":"2411:5:28","nodeType":"VariableDeclaration","scope":3617,"src":"2403:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3611,"name":"address","nodeType":"ElementaryTypeName","src":"2403:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2402:15:28"},"returnParameters":{"id":3616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3615,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3617,"src":"2441:4:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3614,"name":"bool","nodeType":"ElementaryTypeName","src":"2441:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2440:6:28"},"scope":3718,"src":"2382:65:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3618,"nodeType":"StructuredDocumentation","src":"2451:104:28","text":" @notice Adds a new admin as EmergencyAdmin\n @param admin The address of the new admin"},"functionSelector":"179efb09","id":3623,"implemented":false,"kind":"function","modifiers":[],"name":"addEmergencyAdmin","nameLocation":"2567:17:28","nodeType":"FunctionDefinition","parameters":{"id":3621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3620,"mutability":"mutable","name":"admin","nameLocation":"2593:5:28","nodeType":"VariableDeclaration","scope":3623,"src":"2585:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3619,"name":"address","nodeType":"ElementaryTypeName","src":"2585:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2584:15:28"},"returnParameters":{"id":3622,"nodeType":"ParameterList","parameters":[],"src":"2608:0:28"},"scope":3718,"src":"2558:51:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3624,"nodeType":"StructuredDocumentation","src":"2613:110:28","text":" @notice Removes an admin as EmergencyAdmin\n @param admin The address of the admin to remove"},"functionSelector":"7a9a93f4","id":3629,"implemented":false,"kind":"function","modifiers":[],"name":"removeEmergencyAdmin","nameLocation":"2735:20:28","nodeType":"FunctionDefinition","parameters":{"id":3627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3626,"mutability":"mutable","name":"admin","nameLocation":"2764:5:28","nodeType":"VariableDeclaration","scope":3629,"src":"2756:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3625,"name":"address","nodeType":"ElementaryTypeName","src":"2756:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2755:15:28"},"returnParameters":{"id":3628,"nodeType":"ParameterList","parameters":[],"src":"2779:0:28"},"scope":3718,"src":"2726:54:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3630,"nodeType":"StructuredDocumentation","src":"2784:198:28","text":" @notice Returns true if the address is EmergencyAdmin, false otherwise\n @param admin The address to check\n @return True if the given address is EmergencyAdmin, false otherwise"},"functionSelector":"2500f2b6","id":3637,"implemented":false,"kind":"function","modifiers":[],"name":"isEmergencyAdmin","nameLocation":"2994:16:28","nodeType":"FunctionDefinition","parameters":{"id":3633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3632,"mutability":"mutable","name":"admin","nameLocation":"3019:5:28","nodeType":"VariableDeclaration","scope":3637,"src":"3011:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3631,"name":"address","nodeType":"ElementaryTypeName","src":"3011:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3010:15:28"},"returnParameters":{"id":3636,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3635,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3637,"src":"3049:4:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3634,"name":"bool","nodeType":"ElementaryTypeName","src":"3049:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3048:6:28"},"scope":3718,"src":"2985:70:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3638,"nodeType":"StructuredDocumentation","src":"3059:99:28","text":" @notice Adds a new admin as RiskAdmin\n @param admin The address of the new admin"},"functionSelector":"5b9a94e4","id":3643,"implemented":false,"kind":"function","modifiers":[],"name":"addRiskAdmin","nameLocation":"3170:12:28","nodeType":"FunctionDefinition","parameters":{"id":3641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3640,"mutability":"mutable","name":"admin","nameLocation":"3191:5:28","nodeType":"VariableDeclaration","scope":3643,"src":"3183:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3639,"name":"address","nodeType":"ElementaryTypeName","src":"3183:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3182:15:28"},"returnParameters":{"id":3642,"nodeType":"ParameterList","parameters":[],"src":"3206:0:28"},"scope":3718,"src":"3161:46:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3644,"nodeType":"StructuredDocumentation","src":"3211:105:28","text":" @notice Removes an admin as RiskAdmin\n @param admin The address of the admin to remove"},"functionSelector":"3c5a08e5","id":3649,"implemented":false,"kind":"function","modifiers":[],"name":"removeRiskAdmin","nameLocation":"3328:15:28","nodeType":"FunctionDefinition","parameters":{"id":3647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3646,"mutability":"mutable","name":"admin","nameLocation":"3352:5:28","nodeType":"VariableDeclaration","scope":3649,"src":"3344:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3645,"name":"address","nodeType":"ElementaryTypeName","src":"3344:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3343:15:28"},"returnParameters":{"id":3648,"nodeType":"ParameterList","parameters":[],"src":"3367:0:28"},"scope":3718,"src":"3319:49:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3650,"nodeType":"StructuredDocumentation","src":"3372:188:28","text":" @notice Returns true if the address is RiskAdmin, false otherwise\n @param admin The address to check\n @return True if the given address is RiskAdmin, false otherwise"},"functionSelector":"674b5e4d","id":3657,"implemented":false,"kind":"function","modifiers":[],"name":"isRiskAdmin","nameLocation":"3572:11:28","nodeType":"FunctionDefinition","parameters":{"id":3653,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3652,"mutability":"mutable","name":"admin","nameLocation":"3592:5:28","nodeType":"VariableDeclaration","scope":3657,"src":"3584:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3651,"name":"address","nodeType":"ElementaryTypeName","src":"3584:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3583:15:28"},"returnParameters":{"id":3656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3655,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3657,"src":"3622:4:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3654,"name":"bool","nodeType":"ElementaryTypeName","src":"3622:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3621:6:28"},"scope":3718,"src":"3563:65:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3658,"nodeType":"StructuredDocumentation","src":"3632:116:28","text":" @notice Adds a new address as FlashBorrower\n @param borrower The address of the new FlashBorrower"},"functionSelector":"9ac9d80b","id":3663,"implemented":false,"kind":"function","modifiers":[],"name":"addFlashBorrower","nameLocation":"3760:16:28","nodeType":"FunctionDefinition","parameters":{"id":3661,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3660,"mutability":"mutable","name":"borrower","nameLocation":"3785:8:28","nodeType":"VariableDeclaration","scope":3663,"src":"3777:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3659,"name":"address","nodeType":"ElementaryTypeName","src":"3777:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3776:18:28"},"returnParameters":{"id":3662,"nodeType":"ParameterList","parameters":[],"src":"3803:0:28"},"scope":3718,"src":"3751:53:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3664,"nodeType":"StructuredDocumentation","src":"3808:122:28","text":" @notice Removes an address as FlashBorrower\n @param borrower The address of the FlashBorrower to remove"},"functionSelector":"253cf980","id":3669,"implemented":false,"kind":"function","modifiers":[],"name":"removeFlashBorrower","nameLocation":"3942:19:28","nodeType":"FunctionDefinition","parameters":{"id":3667,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3666,"mutability":"mutable","name":"borrower","nameLocation":"3970:8:28","nodeType":"VariableDeclaration","scope":3669,"src":"3962:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3665,"name":"address","nodeType":"ElementaryTypeName","src":"3962:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3961:18:28"},"returnParameters":{"id":3668,"nodeType":"ParameterList","parameters":[],"src":"3988:0:28"},"scope":3718,"src":"3933:56:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3670,"nodeType":"StructuredDocumentation","src":"3993:199:28","text":" @notice Returns true if the address is FlashBorrower, false otherwise\n @param borrower The address to check\n @return True if the given address is FlashBorrower, false otherwise"},"functionSelector":"fa50f297","id":3677,"implemented":false,"kind":"function","modifiers":[],"name":"isFlashBorrower","nameLocation":"4204:15:28","nodeType":"FunctionDefinition","parameters":{"id":3673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3672,"mutability":"mutable","name":"borrower","nameLocation":"4228:8:28","nodeType":"VariableDeclaration","scope":3677,"src":"4220:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3671,"name":"address","nodeType":"ElementaryTypeName","src":"4220:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4219:18:28"},"returnParameters":{"id":3676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3675,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3677,"src":"4261:4:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3674,"name":"bool","nodeType":"ElementaryTypeName","src":"4261:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4260:6:28"},"scope":3718,"src":"4195:72:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3678,"nodeType":"StructuredDocumentation","src":"4271:100:28","text":" @notice Adds a new address as Bridge\n @param bridge The address of the new Bridge"},"functionSelector":"9712fdf8","id":3683,"implemented":false,"kind":"function","modifiers":[],"name":"addBridge","nameLocation":"4383:9:28","nodeType":"FunctionDefinition","parameters":{"id":3681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3680,"mutability":"mutable","name":"bridge","nameLocation":"4401:6:28","nodeType":"VariableDeclaration","scope":3683,"src":"4393:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3679,"name":"address","nodeType":"ElementaryTypeName","src":"4393:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4392:16:28"},"returnParameters":{"id":3682,"nodeType":"ParameterList","parameters":[],"src":"4417:0:28"},"scope":3718,"src":"4374:44:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3684,"nodeType":"StructuredDocumentation","src":"4422:106:28","text":" @notice Removes an address as Bridge\n @param bridge The address of the bridge to remove"},"functionSelector":"04df017d","id":3689,"implemented":false,"kind":"function","modifiers":[],"name":"removeBridge","nameLocation":"4540:12:28","nodeType":"FunctionDefinition","parameters":{"id":3687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3686,"mutability":"mutable","name":"bridge","nameLocation":"4561:6:28","nodeType":"VariableDeclaration","scope":3689,"src":"4553:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3685,"name":"address","nodeType":"ElementaryTypeName","src":"4553:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4552:16:28"},"returnParameters":{"id":3688,"nodeType":"ParameterList","parameters":[],"src":"4577:0:28"},"scope":3718,"src":"4531:47:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3690,"nodeType":"StructuredDocumentation","src":"4582:183:28","text":" @notice Returns true if the address is Bridge, false otherwise\n @param bridge The address to check\n @return True if the given address is Bridge, false otherwise"},"functionSelector":"726600ce","id":3697,"implemented":false,"kind":"function","modifiers":[],"name":"isBridge","nameLocation":"4777:8:28","nodeType":"FunctionDefinition","parameters":{"id":3693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3692,"mutability":"mutable","name":"bridge","nameLocation":"4794:6:28","nodeType":"VariableDeclaration","scope":3697,"src":"4786:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3691,"name":"address","nodeType":"ElementaryTypeName","src":"4786:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4785:16:28"},"returnParameters":{"id":3696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3695,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3697,"src":"4825:4:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3694,"name":"bool","nodeType":"ElementaryTypeName","src":"4825:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4824:6:28"},"scope":3718,"src":"4768:63:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3698,"nodeType":"StructuredDocumentation","src":"4835:107:28","text":" @notice Adds a new admin as AssetListingAdmin\n @param admin The address of the new admin"},"functionSelector":"9a2b96f7","id":3703,"implemented":false,"kind":"function","modifiers":[],"name":"addAssetListingAdmin","nameLocation":"4954:20:28","nodeType":"FunctionDefinition","parameters":{"id":3701,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3700,"mutability":"mutable","name":"admin","nameLocation":"4983:5:28","nodeType":"VariableDeclaration","scope":3703,"src":"4975:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3699,"name":"address","nodeType":"ElementaryTypeName","src":"4975:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4974:15:28"},"returnParameters":{"id":3702,"nodeType":"ParameterList","parameters":[],"src":"4998:0:28"},"scope":3718,"src":"4945:54:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3704,"nodeType":"StructuredDocumentation","src":"5003:113:28","text":" @notice Removes an admin as AssetListingAdmin\n @param admin The address of the admin to remove"},"functionSelector":"a21bce15","id":3709,"implemented":false,"kind":"function","modifiers":[],"name":"removeAssetListingAdmin","nameLocation":"5128:23:28","nodeType":"FunctionDefinition","parameters":{"id":3707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3706,"mutability":"mutable","name":"admin","nameLocation":"5160:5:28","nodeType":"VariableDeclaration","scope":3709,"src":"5152:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3705,"name":"address","nodeType":"ElementaryTypeName","src":"5152:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5151:15:28"},"returnParameters":{"id":3708,"nodeType":"ParameterList","parameters":[],"src":"5175:0:28"},"scope":3718,"src":"5119:57:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3710,"nodeType":"StructuredDocumentation","src":"5180:204:28","text":" @notice Returns true if the address is AssetListingAdmin, false otherwise\n @param admin The address to check\n @return True if the given address is AssetListingAdmin, false otherwise"},"functionSelector":"13ee32e0","id":3717,"implemented":false,"kind":"function","modifiers":[],"name":"isAssetListingAdmin","nameLocation":"5396:19:28","nodeType":"FunctionDefinition","parameters":{"id":3713,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3712,"mutability":"mutable","name":"admin","nameLocation":"5424:5:28","nodeType":"VariableDeclaration","scope":3717,"src":"5416:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3711,"name":"address","nodeType":"ElementaryTypeName","src":"5416:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5415:15:28"},"returnParameters":{"id":3716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3715,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3717,"src":"5454:4:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3714,"name":"bool","nodeType":"ElementaryTypeName","src":"5454:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5453:6:28"},"scope":3718,"src":"5387:73:28","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3719,"src":"237:5225:28","usedErrors":[]}],"src":"37:5426:28"},"id":28},"@aave/core-v3/contracts/interfaces/IAToken.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/interfaces/IAToken.sol","exportedSymbols":{"IAToken":[3861],"IERC20":[1442],"IInitializableAToken":[4176],"IScaledBalanceToken":[5975]},"id":3862,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":3720,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:29"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../dependencies/openzeppelin/contracts/IERC20.sol","id":3722,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3862,"sourceUnit":1443,"src":"62:73:29","symbolAliases":[{"foreign":{"id":3721,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:6:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol","file":"./IScaledBalanceToken.sol","id":3724,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3862,"sourceUnit":5976,"src":"136:62:29","symbolAliases":[{"foreign":{"id":3723,"name":"IScaledBalanceToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"144:19:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol","file":"./IInitializableAToken.sol","id":3726,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3862,"sourceUnit":4177,"src":"199:64:29","symbolAliases":[{"foreign":{"id":3725,"name":"IInitializableAToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"207:20:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3728,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"382:6:29"},"id":3729,"nodeType":"InheritanceSpecifier","src":"382:6:29"},{"baseName":{"id":3730,"name":"IScaledBalanceToken","nodeType":"IdentifierPath","referencedDeclaration":5975,"src":"390:19:29"},"id":3731,"nodeType":"InheritanceSpecifier","src":"390:19:29"},{"baseName":{"id":3732,"name":"IInitializableAToken","nodeType":"IdentifierPath","referencedDeclaration":4176,"src":"411:20:29"},"id":3733,"nodeType":"InheritanceSpecifier","src":"411:20:29"}],"canonicalName":"IAToken","contractDependencies":[],"contractKind":"interface","documentation":{"id":3727,"nodeType":"StructuredDocumentation","src":"265:95:29","text":" @title IAToken\n @author Aave\n @notice Defines the basic interface for an AToken."},"fullyImplemented":false,"id":3861,"linearizedBaseContracts":[3861,4176,5975,1442],"name":"IAToken","nameLocation":"371:7:29","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":3734,"nodeType":"StructuredDocumentation","src":"436:256:29","text":" @dev Emitted during the transfer action\n @param from The user whose tokens are being transferred\n @param to The recipient\n @param value The scaled amount being transferred\n @param index The next liquidity index of the reserve"},"id":3744,"name":"BalanceTransfer","nameLocation":"701:15:29","nodeType":"EventDefinition","parameters":{"id":3743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3736,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"733:4:29","nodeType":"VariableDeclaration","scope":3744,"src":"717:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3735,"name":"address","nodeType":"ElementaryTypeName","src":"717:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3738,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"755:2:29","nodeType":"VariableDeclaration","scope":3744,"src":"739:18:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3737,"name":"address","nodeType":"ElementaryTypeName","src":"739:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3740,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"767:5:29","nodeType":"VariableDeclaration","scope":3744,"src":"759:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3739,"name":"uint256","nodeType":"ElementaryTypeName","src":"759:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3742,"indexed":false,"mutability":"mutable","name":"index","nameLocation":"782:5:29","nodeType":"VariableDeclaration","scope":3744,"src":"774:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3741,"name":"uint256","nodeType":"ElementaryTypeName","src":"774:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"716:72:29"},"src":"695:94:29"},{"documentation":{"id":3745,"nodeType":"StructuredDocumentation","src":"793:369:29","text":" @notice Mints `amount` aTokens to `user`\n @param caller The address performing the mint\n @param onBehalfOf The address of the user that will receive the minted aTokens\n @param amount The amount of tokens getting minted\n @param index The next liquidity index of the reserve\n @return `true` if the the previous balance of the user was 0"},"functionSelector":"b3f1c93d","id":3758,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"1174:4:29","nodeType":"FunctionDefinition","parameters":{"id":3754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3747,"mutability":"mutable","name":"caller","nameLocation":"1192:6:29","nodeType":"VariableDeclaration","scope":3758,"src":"1184:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3746,"name":"address","nodeType":"ElementaryTypeName","src":"1184:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3749,"mutability":"mutable","name":"onBehalfOf","nameLocation":"1212:10:29","nodeType":"VariableDeclaration","scope":3758,"src":"1204:18:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3748,"name":"address","nodeType":"ElementaryTypeName","src":"1204:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3751,"mutability":"mutable","name":"amount","nameLocation":"1236:6:29","nodeType":"VariableDeclaration","scope":3758,"src":"1228:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3750,"name":"uint256","nodeType":"ElementaryTypeName","src":"1228:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3753,"mutability":"mutable","name":"index","nameLocation":"1256:5:29","nodeType":"VariableDeclaration","scope":3758,"src":"1248:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3752,"name":"uint256","nodeType":"ElementaryTypeName","src":"1248:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1178:87:29"},"returnParameters":{"id":3757,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3756,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3758,"src":"1284:4:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3755,"name":"bool","nodeType":"ElementaryTypeName","src":"1284:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1283:6:29"},"scope":3861,"src":"1165:125:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3759,"nodeType":"StructuredDocumentation","src":"1294:526:29","text":" @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\n @dev In some instances, the mint event could be emitted from a burn transaction\n if the amount to burn is less than the interest that the user accrued\n @param from The address from which the aTokens will be burned\n @param receiverOfUnderlying The address that will receive the underlying\n @param amount The amount being burned\n @param index The next liquidity index of the reserve"},"functionSelector":"d7020d0a","id":3770,"implemented":false,"kind":"function","modifiers":[],"name":"burn","nameLocation":"1832:4:29","nodeType":"FunctionDefinition","parameters":{"id":3768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3761,"mutability":"mutable","name":"from","nameLocation":"1845:4:29","nodeType":"VariableDeclaration","scope":3770,"src":"1837:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3760,"name":"address","nodeType":"ElementaryTypeName","src":"1837:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3763,"mutability":"mutable","name":"receiverOfUnderlying","nameLocation":"1859:20:29","nodeType":"VariableDeclaration","scope":3770,"src":"1851:28:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3762,"name":"address","nodeType":"ElementaryTypeName","src":"1851:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3765,"mutability":"mutable","name":"amount","nameLocation":"1889:6:29","nodeType":"VariableDeclaration","scope":3770,"src":"1881:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3764,"name":"uint256","nodeType":"ElementaryTypeName","src":"1881:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3767,"mutability":"mutable","name":"index","nameLocation":"1905:5:29","nodeType":"VariableDeclaration","scope":3770,"src":"1897:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3766,"name":"uint256","nodeType":"ElementaryTypeName","src":"1897:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1836:75:29"},"returnParameters":{"id":3769,"nodeType":"ParameterList","parameters":[],"src":"1920:0:29"},"scope":3861,"src":"1823:98:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3771,"nodeType":"StructuredDocumentation","src":"1925:173:29","text":" @notice Mints aTokens to the reserve treasury\n @param amount The amount of tokens getting minted\n @param index The next liquidity index of the reserve"},"functionSelector":"7df5bd3b","id":3778,"implemented":false,"kind":"function","modifiers":[],"name":"mintToTreasury","nameLocation":"2110:14:29","nodeType":"FunctionDefinition","parameters":{"id":3776,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3773,"mutability":"mutable","name":"amount","nameLocation":"2133:6:29","nodeType":"VariableDeclaration","scope":3778,"src":"2125:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3772,"name":"uint256","nodeType":"ElementaryTypeName","src":"2125:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3775,"mutability":"mutable","name":"index","nameLocation":"2149:5:29","nodeType":"VariableDeclaration","scope":3778,"src":"2141:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3774,"name":"uint256","nodeType":"ElementaryTypeName","src":"2141:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2124:31:29"},"returnParameters":{"id":3777,"nodeType":"ParameterList","parameters":[],"src":"2164:0:29"},"scope":3861,"src":"2101:64:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3779,"nodeType":"StructuredDocumentation","src":"2169:293:29","text":" @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\n @param from The address getting liquidated, current owner of the aTokens\n @param to The recipient\n @param value The amount of tokens getting transferred"},"functionSelector":"f866c319","id":3788,"implemented":false,"kind":"function","modifiers":[],"name":"transferOnLiquidation","nameLocation":"2474:21:29","nodeType":"FunctionDefinition","parameters":{"id":3786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3781,"mutability":"mutable","name":"from","nameLocation":"2504:4:29","nodeType":"VariableDeclaration","scope":3788,"src":"2496:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3780,"name":"address","nodeType":"ElementaryTypeName","src":"2496:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3783,"mutability":"mutable","name":"to","nameLocation":"2518:2:29","nodeType":"VariableDeclaration","scope":3788,"src":"2510:10:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3782,"name":"address","nodeType":"ElementaryTypeName","src":"2510:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3785,"mutability":"mutable","name":"value","nameLocation":"2530:5:29","nodeType":"VariableDeclaration","scope":3788,"src":"2522:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3784,"name":"uint256","nodeType":"ElementaryTypeName","src":"2522:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2495:41:29"},"returnParameters":{"id":3787,"nodeType":"ParameterList","parameters":[],"src":"2545:0:29"},"scope":3861,"src":"2465:81:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3789,"nodeType":"StructuredDocumentation","src":"2550:253:29","text":" @notice Transfers the underlying asset to `target`.\n @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\n @param target The recipient of the underlying\n @param amount The amount getting transferred"},"functionSelector":"4efecaa5","id":3796,"implemented":false,"kind":"function","modifiers":[],"name":"transferUnderlyingTo","nameLocation":"2815:20:29","nodeType":"FunctionDefinition","parameters":{"id":3794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3791,"mutability":"mutable","name":"target","nameLocation":"2844:6:29","nodeType":"VariableDeclaration","scope":3796,"src":"2836:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3790,"name":"address","nodeType":"ElementaryTypeName","src":"2836:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3793,"mutability":"mutable","name":"amount","nameLocation":"2860:6:29","nodeType":"VariableDeclaration","scope":3796,"src":"2852:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3792,"name":"uint256","nodeType":"ElementaryTypeName","src":"2852:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2835:32:29"},"returnParameters":{"id":3795,"nodeType":"ParameterList","parameters":[],"src":"2876:0:29"},"scope":3861,"src":"2806:71:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3797,"nodeType":"StructuredDocumentation","src":"2881:630:29","text":" @notice Handles the underlying received by the aToken after the transfer has been completed.\n @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\n transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\n to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\n @param user The user executing the repayment\n @param onBehalfOf The address of the user who will get his debt reduced/removed\n @param amount The amount getting repaid"},"functionSelector":"6fd97676","id":3806,"implemented":false,"kind":"function","modifiers":[],"name":"handleRepayment","nameLocation":"3523:15:29","nodeType":"FunctionDefinition","parameters":{"id":3804,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3799,"mutability":"mutable","name":"user","nameLocation":"3547:4:29","nodeType":"VariableDeclaration","scope":3806,"src":"3539:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3798,"name":"address","nodeType":"ElementaryTypeName","src":"3539:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3801,"mutability":"mutable","name":"onBehalfOf","nameLocation":"3561:10:29","nodeType":"VariableDeclaration","scope":3806,"src":"3553:18:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3800,"name":"address","nodeType":"ElementaryTypeName","src":"3553:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3803,"mutability":"mutable","name":"amount","nameLocation":"3581:6:29","nodeType":"VariableDeclaration","scope":3806,"src":"3573:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3802,"name":"uint256","nodeType":"ElementaryTypeName","src":"3573:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3538:50:29"},"returnParameters":{"id":3805,"nodeType":"ParameterList","parameters":[],"src":"3597:0:29"},"scope":3861,"src":"3514:84:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3807,"nodeType":"StructuredDocumentation","src":"3602:494:29","text":" @notice Allow passing a signed message to approve spending\n @dev implements the permit function as for\n https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\n @param owner The owner of the funds\n @param spender The spender\n @param value The amount\n @param deadline The deadline timestamp, type(uint256).max for max deadline\n @param v Signature param\n @param s Signature param\n @param r Signature param"},"functionSelector":"d505accf","id":3824,"implemented":false,"kind":"function","modifiers":[],"name":"permit","nameLocation":"4108:6:29","nodeType":"FunctionDefinition","parameters":{"id":3822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3809,"mutability":"mutable","name":"owner","nameLocation":"4128:5:29","nodeType":"VariableDeclaration","scope":3824,"src":"4120:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3808,"name":"address","nodeType":"ElementaryTypeName","src":"4120:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3811,"mutability":"mutable","name":"spender","nameLocation":"4147:7:29","nodeType":"VariableDeclaration","scope":3824,"src":"4139:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3810,"name":"address","nodeType":"ElementaryTypeName","src":"4139:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3813,"mutability":"mutable","name":"value","nameLocation":"4168:5:29","nodeType":"VariableDeclaration","scope":3824,"src":"4160:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3812,"name":"uint256","nodeType":"ElementaryTypeName","src":"4160:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3815,"mutability":"mutable","name":"deadline","nameLocation":"4187:8:29","nodeType":"VariableDeclaration","scope":3824,"src":"4179:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3814,"name":"uint256","nodeType":"ElementaryTypeName","src":"4179:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3817,"mutability":"mutable","name":"v","nameLocation":"4207:1:29","nodeType":"VariableDeclaration","scope":3824,"src":"4201:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3816,"name":"uint8","nodeType":"ElementaryTypeName","src":"4201:5:29","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":3819,"mutability":"mutable","name":"r","nameLocation":"4222:1:29","nodeType":"VariableDeclaration","scope":3824,"src":"4214:9:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3818,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4214:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3821,"mutability":"mutable","name":"s","nameLocation":"4237:1:29","nodeType":"VariableDeclaration","scope":3824,"src":"4229:9:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3820,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4229:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4114:128:29"},"returnParameters":{"id":3823,"nodeType":"ParameterList","parameters":[],"src":"4251:0:29"},"scope":3861,"src":"4099:153:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3825,"nodeType":"StructuredDocumentation","src":"4256:152:29","text":" @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\n @return The address of the underlying asset"},"functionSelector":"b16a19de","id":3830,"implemented":false,"kind":"function","modifiers":[],"name":"UNDERLYING_ASSET_ADDRESS","nameLocation":"4420:24:29","nodeType":"FunctionDefinition","parameters":{"id":3826,"nodeType":"ParameterList","parameters":[],"src":"4444:2:29"},"returnParameters":{"id":3829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3828,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3830,"src":"4470:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3827,"name":"address","nodeType":"ElementaryTypeName","src":"4470:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4469:9:29"},"scope":3861,"src":"4411:68:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3831,"nodeType":"StructuredDocumentation","src":"4483:141:29","text":" @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\n @return Address of the Aave treasury"},"functionSelector":"ae167335","id":3836,"implemented":false,"kind":"function","modifiers":[],"name":"RESERVE_TREASURY_ADDRESS","nameLocation":"4636:24:29","nodeType":"FunctionDefinition","parameters":{"id":3832,"nodeType":"ParameterList","parameters":[],"src":"4660:2:29"},"returnParameters":{"id":3835,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3834,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3836,"src":"4686:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3833,"name":"address","nodeType":"ElementaryTypeName","src":"4686:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4685:9:29"},"scope":3861,"src":"4627:68:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3837,"nodeType":"StructuredDocumentation","src":"4699:212:29","text":" @notice Get the domain separator for the token\n @dev Return cached value if chainId matches cache, otherwise recomputes separator\n @return The domain separator of the token at current chain"},"functionSelector":"3644e515","id":3842,"implemented":false,"kind":"function","modifiers":[],"name":"DOMAIN_SEPARATOR","nameLocation":"4923:16:29","nodeType":"FunctionDefinition","parameters":{"id":3838,"nodeType":"ParameterList","parameters":[],"src":"4939:2:29"},"returnParameters":{"id":3841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3840,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3842,"src":"4965:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3839,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4965:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4964:9:29"},"scope":3861,"src":"4914:60:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3843,"nodeType":"StructuredDocumentation","src":"4978:130:29","text":" @notice Returns the nonce for owner.\n @param owner The address of the owner\n @return The nonce of the owner"},"functionSelector":"7ecebe00","id":3850,"implemented":false,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"5120:6:29","nodeType":"FunctionDefinition","parameters":{"id":3846,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3845,"mutability":"mutable","name":"owner","nameLocation":"5135:5:29","nodeType":"VariableDeclaration","scope":3850,"src":"5127:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3844,"name":"address","nodeType":"ElementaryTypeName","src":"5127:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5126:15:29"},"returnParameters":{"id":3849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3848,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3850,"src":"5165:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3847,"name":"uint256","nodeType":"ElementaryTypeName","src":"5165:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5164:9:29"},"scope":3861,"src":"5111:63:29","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3851,"nodeType":"StructuredDocumentation","src":"5178:211:29","text":" @notice Rescue and transfer tokens locked in this contract\n @param token The address of the token\n @param to The address of the recipient\n @param amount The amount of token to transfer"},"functionSelector":"cea9d26f","id":3860,"implemented":false,"kind":"function","modifiers":[],"name":"rescueTokens","nameLocation":"5401:12:29","nodeType":"FunctionDefinition","parameters":{"id":3858,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3853,"mutability":"mutable","name":"token","nameLocation":"5422:5:29","nodeType":"VariableDeclaration","scope":3860,"src":"5414:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3852,"name":"address","nodeType":"ElementaryTypeName","src":"5414:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3855,"mutability":"mutable","name":"to","nameLocation":"5437:2:29","nodeType":"VariableDeclaration","scope":3860,"src":"5429:10:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3854,"name":"address","nodeType":"ElementaryTypeName","src":"5429:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3857,"mutability":"mutable","name":"amount","nameLocation":"5449:6:29","nodeType":"VariableDeclaration","scope":3860,"src":"5441:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3856,"name":"uint256","nodeType":"ElementaryTypeName","src":"5441:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5413:43:29"},"returnParameters":{"id":3859,"nodeType":"ParameterList","parameters":[],"src":"5465:0:29"},"scope":3861,"src":"5392:74:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3862,"src":"361:5107:29","usedErrors":[]}],"src":"37:5432:29"},"id":29},"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol","exportedSymbols":{"IAaveIncentivesController":[3875]},"id":3876,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":3863,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:30"},{"abstract":false,"baseContracts":[],"canonicalName":"IAaveIncentivesController","contractDependencies":[],"contractKind":"interface","documentation":{"id":3864,"nodeType":"StructuredDocumentation","src":"62:231:30","text":" @title IAaveIncentivesController\n @author Aave\n @notice Defines the basic interface for an Aave Incentives Controller.\n @dev It only contains one single function, needed as a hook on aToken and debtToken transfers."},"fullyImplemented":false,"id":3875,"linearizedBaseContracts":[3875],"name":"IAaveIncentivesController","nameLocation":"304:25:30","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3865,"nodeType":"StructuredDocumentation","src":"334:420:30","text":" @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\n @dev The units of `totalSupply` and `userBalance` should be the same.\n @param user The address of the user whose asset balance has changed\n @param totalSupply The total supply of the asset prior to user balance change\n @param userBalance The previous user balance prior to balance change"},"functionSelector":"31873e2e","id":3874,"implemented":false,"kind":"function","modifiers":[],"name":"handleAction","nameLocation":"766:12:30","nodeType":"FunctionDefinition","parameters":{"id":3872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3867,"mutability":"mutable","name":"user","nameLocation":"787:4:30","nodeType":"VariableDeclaration","scope":3874,"src":"779:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3866,"name":"address","nodeType":"ElementaryTypeName","src":"779:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3869,"mutability":"mutable","name":"totalSupply","nameLocation":"801:11:30","nodeType":"VariableDeclaration","scope":3874,"src":"793:19:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3868,"name":"uint256","nodeType":"ElementaryTypeName","src":"793:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3871,"mutability":"mutable","name":"userBalance","nameLocation":"822:11:30","nodeType":"VariableDeclaration","scope":3874,"src":"814:19:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3870,"name":"uint256","nodeType":"ElementaryTypeName","src":"814:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"778:56:30"},"returnParameters":{"id":3873,"nodeType":"ParameterList","parameters":[],"src":"843:0:30"},"scope":3875,"src":"757:87:30","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3876,"src":"294:552:30","usedErrors":[]}],"src":"37:810:30"},"id":30},"@aave/core-v3/contracts/interfaces/IAaveOracle.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/interfaces/IAaveOracle.sol","exportedSymbols":{"IAaveOracle":[3951],"IPoolAddressesProvider":[5069],"IPriceOracleGetter":[5835]},"id":3952,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":3877,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:31"},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol","file":"./IPriceOracleGetter.sol","id":3879,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3952,"sourceUnit":5836,"src":"62:60:31","symbolAliases":[{"foreign":{"id":3878,"name":"IPriceOracleGetter","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:18:31","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"./IPoolAddressesProvider.sol","id":3881,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3952,"sourceUnit":5070,"src":"123:68:31","symbolAliases":[{"foreign":{"id":3880,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"131:22:31","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3883,"name":"IPriceOracleGetter","nodeType":"IdentifierPath","referencedDeclaration":5835,"src":"323:18:31"},"id":3884,"nodeType":"InheritanceSpecifier","src":"323:18:31"}],"canonicalName":"IAaveOracle","contractDependencies":[],"contractKind":"interface","documentation":{"id":3882,"nodeType":"StructuredDocumentation","src":"193:104:31","text":" @title IAaveOracle\n @author Aave\n @notice Defines the basic interface for the Aave Oracle"},"fullyImplemented":false,"id":3951,"linearizedBaseContracts":[3951,5835],"name":"IAaveOracle","nameLocation":"308:11:31","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":3885,"nodeType":"StructuredDocumentation","src":"346:185:31","text":" @dev Emitted after the base currency is set\n @param baseCurrency The base currency of used for price quotes\n @param baseCurrencyUnit The unit of the base currency"},"id":3891,"name":"BaseCurrencySet","nameLocation":"540:15:31","nodeType":"EventDefinition","parameters":{"id":3890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3887,"indexed":true,"mutability":"mutable","name":"baseCurrency","nameLocation":"572:12:31","nodeType":"VariableDeclaration","scope":3891,"src":"556:28:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3886,"name":"address","nodeType":"ElementaryTypeName","src":"556:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3889,"indexed":false,"mutability":"mutable","name":"baseCurrencyUnit","nameLocation":"594:16:31","nodeType":"VariableDeclaration","scope":3891,"src":"586:24:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3888,"name":"uint256","nodeType":"ElementaryTypeName","src":"586:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"555:56:31"},"src":"534:78:31"},{"anonymous":false,"documentation":{"id":3892,"nodeType":"StructuredDocumentation","src":"616:165:31","text":" @dev Emitted after the price source of an asset is updated\n @param asset The address of the asset\n @param source The price source of the asset"},"id":3898,"name":"AssetSourceUpdated","nameLocation":"790:18:31","nodeType":"EventDefinition","parameters":{"id":3897,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3894,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"825:5:31","nodeType":"VariableDeclaration","scope":3898,"src":"809:21:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3893,"name":"address","nodeType":"ElementaryTypeName","src":"809:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3896,"indexed":true,"mutability":"mutable","name":"source","nameLocation":"848:6:31","nodeType":"VariableDeclaration","scope":3898,"src":"832:22:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3895,"name":"address","nodeType":"ElementaryTypeName","src":"832:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"808:47:31"},"src":"784:72:31"},{"anonymous":false,"documentation":{"id":3899,"nodeType":"StructuredDocumentation","src":"860:137:31","text":" @dev Emitted after the address of fallback oracle is updated\n @param fallbackOracle The address of the fallback oracle"},"id":3903,"name":"FallbackOracleUpdated","nameLocation":"1006:21:31","nodeType":"EventDefinition","parameters":{"id":3902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3901,"indexed":true,"mutability":"mutable","name":"fallbackOracle","nameLocation":"1044:14:31","nodeType":"VariableDeclaration","scope":3903,"src":"1028:30:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3900,"name":"address","nodeType":"ElementaryTypeName","src":"1028:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1027:32:31"},"src":"1000:60:31"},{"documentation":{"id":3904,"nodeType":"StructuredDocumentation","src":"1064:119:31","text":" @notice Returns the PoolAddressesProvider\n @return The address of the PoolAddressesProvider contract"},"functionSelector":"0542975c","id":3910,"implemented":false,"kind":"function","modifiers":[],"name":"ADDRESSES_PROVIDER","nameLocation":"1195:18:31","nodeType":"FunctionDefinition","parameters":{"id":3905,"nodeType":"ParameterList","parameters":[],"src":"1213:2:31"},"returnParameters":{"id":3909,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3908,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3910,"src":"1239:22:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":3907,"nodeType":"UserDefinedTypeName","pathNode":{"id":3906,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"1239:22:31"},"referencedDeclaration":5069,"src":"1239:22:31","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"1238:24:31"},"scope":3951,"src":"1186:77:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3911,"nodeType":"StructuredDocumentation","src":"1267:165:31","text":" @notice Sets or replaces price sources of assets\n @param assets The addresses of the assets\n @param sources The addresses of the price sources"},"functionSelector":"abfd5310","id":3920,"implemented":false,"kind":"function","modifiers":[],"name":"setAssetSources","nameLocation":"1444:15:31","nodeType":"FunctionDefinition","parameters":{"id":3918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3914,"mutability":"mutable","name":"assets","nameLocation":"1479:6:31","nodeType":"VariableDeclaration","scope":3920,"src":"1460:25:31","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":3912,"name":"address","nodeType":"ElementaryTypeName","src":"1460:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3913,"nodeType":"ArrayTypeName","src":"1460:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":3917,"mutability":"mutable","name":"sources","nameLocation":"1506:7:31","nodeType":"VariableDeclaration","scope":3920,"src":"1487:26:31","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":3915,"name":"address","nodeType":"ElementaryTypeName","src":"1487:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3916,"nodeType":"ArrayTypeName","src":"1487:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1459:55:31"},"returnParameters":{"id":3919,"nodeType":"ParameterList","parameters":[],"src":"1523:0:31"},"scope":3951,"src":"1435:89:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3921,"nodeType":"StructuredDocumentation","src":"1528:109:31","text":" @notice Sets the fallback oracle\n @param fallbackOracle The address of the fallback oracle"},"functionSelector":"170aee73","id":3926,"implemented":false,"kind":"function","modifiers":[],"name":"setFallbackOracle","nameLocation":"1649:17:31","nodeType":"FunctionDefinition","parameters":{"id":3924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3923,"mutability":"mutable","name":"fallbackOracle","nameLocation":"1675:14:31","nodeType":"VariableDeclaration","scope":3926,"src":"1667:22:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3922,"name":"address","nodeType":"ElementaryTypeName","src":"1667:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1666:24:31"},"returnParameters":{"id":3925,"nodeType":"ParameterList","parameters":[],"src":"1699:0:31"},"scope":3951,"src":"1640:60:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3927,"nodeType":"StructuredDocumentation","src":"1704:171:31","text":" @notice Returns a list of prices from a list of assets addresses\n @param assets The list of assets addresses\n @return The prices of the given assets"},"functionSelector":"9d23d9f2","id":3936,"implemented":false,"kind":"function","modifiers":[],"name":"getAssetsPrices","nameLocation":"1887:15:31","nodeType":"FunctionDefinition","parameters":{"id":3931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3930,"mutability":"mutable","name":"assets","nameLocation":"1922:6:31","nodeType":"VariableDeclaration","scope":3936,"src":"1903:25:31","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":3928,"name":"address","nodeType":"ElementaryTypeName","src":"1903:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3929,"nodeType":"ArrayTypeName","src":"1903:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1902:27:31"},"returnParameters":{"id":3935,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3934,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3936,"src":"1953:16:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3932,"name":"uint256","nodeType":"ElementaryTypeName","src":"1953:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3933,"nodeType":"ArrayTypeName","src":"1953:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1952:18:31"},"scope":3951,"src":"1878:93:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3937,"nodeType":"StructuredDocumentation","src":"1975:159:31","text":" @notice Returns the address of the source for an asset address\n @param asset The address of the asset\n @return The address of the source"},"functionSelector":"92bf2be0","id":3944,"implemented":false,"kind":"function","modifiers":[],"name":"getSourceOfAsset","nameLocation":"2146:16:31","nodeType":"FunctionDefinition","parameters":{"id":3940,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3939,"mutability":"mutable","name":"asset","nameLocation":"2171:5:31","nodeType":"VariableDeclaration","scope":3944,"src":"2163:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3938,"name":"address","nodeType":"ElementaryTypeName","src":"2163:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2162:15:31"},"returnParameters":{"id":3943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3942,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3944,"src":"2201:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3941,"name":"address","nodeType":"ElementaryTypeName","src":"2201:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2200:9:31"},"scope":3951,"src":"2137:73:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3945,"nodeType":"StructuredDocumentation","src":"2214:113:31","text":" @notice Returns the address of the fallback oracle\n @return The address of the fallback oracle"},"functionSelector":"6210308c","id":3950,"implemented":false,"kind":"function","modifiers":[],"name":"getFallbackOracle","nameLocation":"2339:17:31","nodeType":"FunctionDefinition","parameters":{"id":3946,"nodeType":"ParameterList","parameters":[],"src":"2356:2:31"},"returnParameters":{"id":3949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3948,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3950,"src":"2382:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3947,"name":"address","nodeType":"ElementaryTypeName","src":"2382:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2381:9:31"},"scope":3951,"src":"2330:61:31","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3952,"src":"298:2095:31","usedErrors":[]}],"src":"37:2357:31"},"id":31},"@aave/core-v3/contracts/interfaces/ICreditDelegationToken.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/interfaces/ICreditDelegationToken.sol","exportedSymbols":{"ICreditDelegationToken":[4002]},"id":4003,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":3953,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:32"},{"abstract":false,"baseContracts":[],"canonicalName":"ICreditDelegationToken","contractDependencies":[],"contractKind":"interface","documentation":{"id":3954,"nodeType":"StructuredDocumentation","src":"62:137:32","text":" @title ICreditDelegationToken\n @author Aave\n @notice Defines the basic interface for a token supporting credit delegation."},"fullyImplemented":false,"id":4002,"linearizedBaseContracts":[4002],"name":"ICreditDelegationToken","nameLocation":"210:22:32","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":3955,"nodeType":"StructuredDocumentation","src":"237:268:32","text":" @dev Emitted on `approveDelegation` and `borrowAllowance\n @param fromUser The address of the delegator\n @param toUser The address of the delegatee\n @param asset The address of the delegated asset\n @param amount The amount being delegated"},"id":3965,"name":"BorrowAllowanceDelegated","nameLocation":"514:24:32","nodeType":"EventDefinition","parameters":{"id":3964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3957,"indexed":true,"mutability":"mutable","name":"fromUser","nameLocation":"560:8:32","nodeType":"VariableDeclaration","scope":3965,"src":"544:24:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3956,"name":"address","nodeType":"ElementaryTypeName","src":"544:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3959,"indexed":true,"mutability":"mutable","name":"toUser","nameLocation":"590:6:32","nodeType":"VariableDeclaration","scope":3965,"src":"574:22:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3958,"name":"address","nodeType":"ElementaryTypeName","src":"574:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3961,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"618:5:32","nodeType":"VariableDeclaration","scope":3965,"src":"602:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3960,"name":"address","nodeType":"ElementaryTypeName","src":"602:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3963,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"637:6:32","nodeType":"VariableDeclaration","scope":3965,"src":"629:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3962,"name":"uint256","nodeType":"ElementaryTypeName","src":"629:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"538:109:32"},"src":"508:140:32"},{"documentation":{"id":3966,"nodeType":"StructuredDocumentation","src":"652:358:32","text":" @notice Delegates borrowing power to a user on the specific debt token.\n Delegation will still respect the liquidation constraints (even if delegated, a\n delegatee cannot force a delegator HF to go below 1)\n @param delegatee The address receiving the delegated borrowing power\n @param amount The maximum amount being delegated."},"functionSelector":"c04a8a10","id":3973,"implemented":false,"kind":"function","modifiers":[],"name":"approveDelegation","nameLocation":"1022:17:32","nodeType":"FunctionDefinition","parameters":{"id":3971,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3968,"mutability":"mutable","name":"delegatee","nameLocation":"1048:9:32","nodeType":"VariableDeclaration","scope":3973,"src":"1040:17:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3967,"name":"address","nodeType":"ElementaryTypeName","src":"1040:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3970,"mutability":"mutable","name":"amount","nameLocation":"1067:6:32","nodeType":"VariableDeclaration","scope":3973,"src":"1059:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3969,"name":"uint256","nodeType":"ElementaryTypeName","src":"1059:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1039:35:32"},"returnParameters":{"id":3972,"nodeType":"ParameterList","parameters":[],"src":"1083:0:32"},"scope":4002,"src":"1013:71:32","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3974,"nodeType":"StructuredDocumentation","src":"1088:209:32","text":" @notice Returns the borrow allowance of the user\n @param fromUser The user to giving allowance\n @param toUser The user to give allowance to\n @return The current allowance of `toUser`"},"functionSelector":"6bd76d24","id":3983,"implemented":false,"kind":"function","modifiers":[],"name":"borrowAllowance","nameLocation":"1309:15:32","nodeType":"FunctionDefinition","parameters":{"id":3979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3976,"mutability":"mutable","name":"fromUser","nameLocation":"1333:8:32","nodeType":"VariableDeclaration","scope":3983,"src":"1325:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3975,"name":"address","nodeType":"ElementaryTypeName","src":"1325:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3978,"mutability":"mutable","name":"toUser","nameLocation":"1351:6:32","nodeType":"VariableDeclaration","scope":3983,"src":"1343:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3977,"name":"address","nodeType":"ElementaryTypeName","src":"1343:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1324:34:32"},"returnParameters":{"id":3982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3981,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3983,"src":"1382:7:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3980,"name":"uint256","nodeType":"ElementaryTypeName","src":"1382:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1381:9:32"},"scope":4002,"src":"1300:91:32","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3984,"nodeType":"StructuredDocumentation","src":"1395:449:32","text":" @notice Delegates borrowing power to a user on the specific debt token via ERC712 signature\n @param delegator The delegator of the credit\n @param delegatee The delegatee that can use the credit\n @param value The amount to be delegated\n @param deadline The deadline timestamp, type(uint256).max for max deadline\n @param v The V signature param\n @param s The S signature param\n @param r The R signature param"},"functionSelector":"0b52d558","id":4001,"implemented":false,"kind":"function","modifiers":[],"name":"delegationWithSig","nameLocation":"1856:17:32","nodeType":"FunctionDefinition","parameters":{"id":3999,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3986,"mutability":"mutable","name":"delegator","nameLocation":"1887:9:32","nodeType":"VariableDeclaration","scope":4001,"src":"1879:17:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3985,"name":"address","nodeType":"ElementaryTypeName","src":"1879:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3988,"mutability":"mutable","name":"delegatee","nameLocation":"1910:9:32","nodeType":"VariableDeclaration","scope":4001,"src":"1902:17:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3987,"name":"address","nodeType":"ElementaryTypeName","src":"1902:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3990,"mutability":"mutable","name":"value","nameLocation":"1933:5:32","nodeType":"VariableDeclaration","scope":4001,"src":"1925:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3989,"name":"uint256","nodeType":"ElementaryTypeName","src":"1925:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3992,"mutability":"mutable","name":"deadline","nameLocation":"1952:8:32","nodeType":"VariableDeclaration","scope":4001,"src":"1944:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3991,"name":"uint256","nodeType":"ElementaryTypeName","src":"1944:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3994,"mutability":"mutable","name":"v","nameLocation":"1972:1:32","nodeType":"VariableDeclaration","scope":4001,"src":"1966:7:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3993,"name":"uint8","nodeType":"ElementaryTypeName","src":"1966:5:32","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":3996,"mutability":"mutable","name":"r","nameLocation":"1987:1:32","nodeType":"VariableDeclaration","scope":4001,"src":"1979:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3995,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1979:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3998,"mutability":"mutable","name":"s","nameLocation":"2002:1:32","nodeType":"VariableDeclaration","scope":4001,"src":"1994:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3997,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1994:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1873:134:32"},"returnParameters":{"id":4000,"nodeType":"ParameterList","parameters":[],"src":"2016:0:32"},"scope":4002,"src":"1847:170:32","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":4003,"src":"200:1819:32","usedErrors":[]}],"src":"37:1983:32"},"id":32},"@aave/core-v3/contracts/interfaces/IDefaultInterestRateStrategy.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/interfaces/IDefaultInterestRateStrategy.sol","exportedSymbols":{"IDefaultInterestRateStrategy":[4091],"IPoolAddressesProvider":[5069],"IReserveInterestRateStrategy":[5913]},"id":4092,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":4004,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:33"},{"absolutePath":"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol","file":"./IReserveInterestRateStrategy.sol","id":4006,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4092,"sourceUnit":5914,"src":"62:80:33","symbolAliases":[{"foreign":{"id":4005,"name":"IReserveInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:28:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"./IPoolAddressesProvider.sol","id":4008,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4092,"sourceUnit":5070,"src":"143:68:33","symbolAliases":[{"foreign":{"id":4007,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"151:22:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4010,"name":"IReserveInterestRateStrategy","nodeType":"IdentifierPath","referencedDeclaration":5913,"src":"399:28:33"},"id":4011,"nodeType":"InheritanceSpecifier","src":"399:28:33"}],"canonicalName":"IDefaultInterestRateStrategy","contractDependencies":[],"contractKind":"interface","documentation":{"id":4009,"nodeType":"StructuredDocumentation","src":"213:143:33","text":" @title IDefaultInterestRateStrategy\n @author Aave\n @notice Defines the basic interface of the DefaultReserveInterestRateStrategy"},"fullyImplemented":false,"id":4091,"linearizedBaseContracts":[4091,5913],"name":"IDefaultInterestRateStrategy","nameLocation":"367:28:33","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4012,"nodeType":"StructuredDocumentation","src":"432:166:33","text":" @notice Returns the usage ratio at which the pool aims to obtain most competitive borrow rates.\n @return The optimal usage ratio, expressed in ray."},"functionSelector":"54c365c6","id":4017,"implemented":false,"kind":"function","modifiers":[],"name":"OPTIMAL_USAGE_RATIO","nameLocation":"610:19:33","nodeType":"FunctionDefinition","parameters":{"id":4013,"nodeType":"ParameterList","parameters":[],"src":"629:2:33"},"returnParameters":{"id":4016,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4015,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4017,"src":"655:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4014,"name":"uint256","nodeType":"ElementaryTypeName","src":"655:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"654:9:33"},"scope":4091,"src":"601:63:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4018,"nodeType":"StructuredDocumentation","src":"668:156:33","text":" @notice Returns the optimal stable to total debt ratio of the reserve.\n @return The optimal stable to total debt ratio, expressed in ray."},"functionSelector":"6fb92589","id":4023,"implemented":false,"kind":"function","modifiers":[],"name":"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","nameLocation":"836:34:33","nodeType":"FunctionDefinition","parameters":{"id":4019,"nodeType":"ParameterList","parameters":[],"src":"870:2:33"},"returnParameters":{"id":4022,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4021,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4023,"src":"896:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4020,"name":"uint256","nodeType":"ElementaryTypeName","src":"896:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"895:9:33"},"scope":4091,"src":"827:78:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4024,"nodeType":"StructuredDocumentation","src":"909:226:33","text":" @notice Returns the excess usage ratio above the optimal.\n @dev It's always equal to 1-optimal usage ratio (added as constant for gas optimizations)\n @return The max excess usage ratio, expressed in ray."},"functionSelector":"a9c622f8","id":4029,"implemented":false,"kind":"function","modifiers":[],"name":"MAX_EXCESS_USAGE_RATIO","nameLocation":"1147:22:33","nodeType":"FunctionDefinition","parameters":{"id":4025,"nodeType":"ParameterList","parameters":[],"src":"1169:2:33"},"returnParameters":{"id":4028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4027,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4029,"src":"1195:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4026,"name":"uint256","nodeType":"ElementaryTypeName","src":"1195:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1194:9:33"},"scope":4091,"src":"1138:66:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4030,"nodeType":"StructuredDocumentation","src":"1208:262:33","text":" @notice Returns the excess stable debt ratio above the optimal.\n @dev It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations)\n @return The max excess stable to total debt ratio, expressed in ray."},"functionSelector":"fe5fd698","id":4035,"implemented":false,"kind":"function","modifiers":[],"name":"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO","nameLocation":"1482:37:33","nodeType":"FunctionDefinition","parameters":{"id":4031,"nodeType":"ParameterList","parameters":[],"src":"1519:2:33"},"returnParameters":{"id":4034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4033,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4035,"src":"1545:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4032,"name":"uint256","nodeType":"ElementaryTypeName","src":"1545:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1544:9:33"},"scope":4091,"src":"1473:81:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4036,"nodeType":"StructuredDocumentation","src":"1558:134:33","text":" @notice Returns the address of the PoolAddressesProvider\n @return The address of the PoolAddressesProvider contract"},"functionSelector":"0542975c","id":4042,"implemented":false,"kind":"function","modifiers":[],"name":"ADDRESSES_PROVIDER","nameLocation":"1704:18:33","nodeType":"FunctionDefinition","parameters":{"id":4037,"nodeType":"ParameterList","parameters":[],"src":"1722:2:33"},"returnParameters":{"id":4041,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4040,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4042,"src":"1748:22:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":4039,"nodeType":"UserDefinedTypeName","pathNode":{"id":4038,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"1748:22:33"},"referencedDeclaration":5069,"src":"1748:22:33","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"1747:24:33"},"scope":4091,"src":"1695:77:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4043,"nodeType":"StructuredDocumentation","src":"1776:216:33","text":" @notice Returns the variable rate slope below optimal usage ratio\n @dev It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\n @return The variable rate slope, expressed in ray"},"functionSelector":"0b3429a2","id":4048,"implemented":false,"kind":"function","modifiers":[],"name":"getVariableRateSlope1","nameLocation":"2004:21:33","nodeType":"FunctionDefinition","parameters":{"id":4044,"nodeType":"ParameterList","parameters":[],"src":"2025:2:33"},"returnParameters":{"id":4047,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4046,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4048,"src":"2051:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4045,"name":"uint256","nodeType":"ElementaryTypeName","src":"2051:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2050:9:33"},"scope":4091,"src":"1995:65:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4049,"nodeType":"StructuredDocumentation","src":"2064:207:33","text":" @notice Returns the variable rate slope above optimal usage ratio\n @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\n @return The variable rate slope, expressed in ray"},"functionSelector":"f4202409","id":4054,"implemented":false,"kind":"function","modifiers":[],"name":"getVariableRateSlope2","nameLocation":"2283:21:33","nodeType":"FunctionDefinition","parameters":{"id":4050,"nodeType":"ParameterList","parameters":[],"src":"2304:2:33"},"returnParameters":{"id":4053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4052,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4054,"src":"2330:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4051,"name":"uint256","nodeType":"ElementaryTypeName","src":"2330:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2329:9:33"},"scope":4091,"src":"2274:65:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4055,"nodeType":"StructuredDocumentation","src":"2343:210:33","text":" @notice Returns the stable rate slope below optimal usage ratio\n @dev It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\n @return The stable rate slope, expressed in ray"},"functionSelector":"d5cd7391","id":4060,"implemented":false,"kind":"function","modifiers":[],"name":"getStableRateSlope1","nameLocation":"2565:19:33","nodeType":"FunctionDefinition","parameters":{"id":4056,"nodeType":"ParameterList","parameters":[],"src":"2584:2:33"},"returnParameters":{"id":4059,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4058,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4060,"src":"2610:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4057,"name":"uint256","nodeType":"ElementaryTypeName","src":"2610:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2609:9:33"},"scope":4091,"src":"2556:63:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4061,"nodeType":"StructuredDocumentation","src":"2623:203:33","text":" @notice Returns the stable rate slope above optimal usage ratio\n @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\n @return The stable rate slope, expressed in ray"},"functionSelector":"14e32da4","id":4066,"implemented":false,"kind":"function","modifiers":[],"name":"getStableRateSlope2","nameLocation":"2838:19:33","nodeType":"FunctionDefinition","parameters":{"id":4062,"nodeType":"ParameterList","parameters":[],"src":"2857:2:33"},"returnParameters":{"id":4065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4064,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4066,"src":"2883:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4063,"name":"uint256","nodeType":"ElementaryTypeName","src":"2883:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2882:9:33"},"scope":4091,"src":"2829:63:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4067,"nodeType":"StructuredDocumentation","src":"2896:234:33","text":" @notice Returns the stable rate excess offset\n @dev It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\n @return The stable rate excess offset, expressed in ray"},"functionSelector":"bc626908","id":4072,"implemented":false,"kind":"function","modifiers":[],"name":"getStableRateExcessOffset","nameLocation":"3142:25:33","nodeType":"FunctionDefinition","parameters":{"id":4068,"nodeType":"ParameterList","parameters":[],"src":"3167:2:33"},"returnParameters":{"id":4071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4070,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4072,"src":"3193:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4069,"name":"uint256","nodeType":"ElementaryTypeName","src":"3193:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3192:9:33"},"scope":4091,"src":"3133:69:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4073,"nodeType":"StructuredDocumentation","src":"3206:117:33","text":" @notice Returns the base stable borrow rate\n @return The base stable borrow rate, expressed in ray"},"functionSelector":"acd78686","id":4078,"implemented":false,"kind":"function","modifiers":[],"name":"getBaseStableBorrowRate","nameLocation":"3335:23:33","nodeType":"FunctionDefinition","parameters":{"id":4074,"nodeType":"ParameterList","parameters":[],"src":"3358:2:33"},"returnParameters":{"id":4077,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4076,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4078,"src":"3384:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4075,"name":"uint256","nodeType":"ElementaryTypeName","src":"3384:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3383:9:33"},"scope":4091,"src":"3326:67:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4079,"nodeType":"StructuredDocumentation","src":"3397:121:33","text":" @notice Returns the base variable borrow rate\n @return The base variable borrow rate, expressed in ray"},"functionSelector":"34762ca5","id":4084,"implemented":false,"kind":"function","modifiers":[],"name":"getBaseVariableBorrowRate","nameLocation":"3530:25:33","nodeType":"FunctionDefinition","parameters":{"id":4080,"nodeType":"ParameterList","parameters":[],"src":"3555:2:33"},"returnParameters":{"id":4083,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4082,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4084,"src":"3581:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4081,"name":"uint256","nodeType":"ElementaryTypeName","src":"3581:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3580:9:33"},"scope":4091,"src":"3521:69:33","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4085,"nodeType":"StructuredDocumentation","src":"3594:127:33","text":" @notice Returns the maximum variable borrow rate\n @return The maximum variable borrow rate, expressed in ray"},"functionSelector":"80031e37","id":4090,"implemented":false,"kind":"function","modifiers":[],"name":"getMaxVariableBorrowRate","nameLocation":"3733:24:33","nodeType":"FunctionDefinition","parameters":{"id":4086,"nodeType":"ParameterList","parameters":[],"src":"3757:2:33"},"returnParameters":{"id":4089,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4088,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4090,"src":"3783:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4087,"name":"uint256","nodeType":"ElementaryTypeName","src":"3783:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3782:9:33"},"scope":4091,"src":"3724:68:33","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":4092,"src":"357:3437:33","usedErrors":[]}],"src":"37:3758:33"},"id":33},"@aave/core-v3/contracts/interfaces/IDelegationToken.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/interfaces/IDelegationToken.sol","exportedSymbols":{"IDelegationToken":[4101]},"id":4102,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":4093,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:34"},{"abstract":false,"baseContracts":[],"canonicalName":"IDelegationToken","contractDependencies":[],"contractKind":"interface","documentation":{"id":4094,"nodeType":"StructuredDocumentation","src":"62:132:34","text":" @title IDelegationToken\n @author Aave\n @notice Implements an interface for tokens with delegation COMP/UNI compatible"},"fullyImplemented":false,"id":4101,"linearizedBaseContracts":[4101],"name":"IDelegationToken","nameLocation":"205:16:34","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4095,"nodeType":"StructuredDocumentation","src":"226:110:34","text":" @notice Delegate voting power to a delegatee\n @param delegatee The address of the delegatee"},"functionSelector":"5c19a95c","id":4100,"implemented":false,"kind":"function","modifiers":[],"name":"delegate","nameLocation":"348:8:34","nodeType":"FunctionDefinition","parameters":{"id":4098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4097,"mutability":"mutable","name":"delegatee","nameLocation":"365:9:34","nodeType":"VariableDeclaration","scope":4100,"src":"357:17:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4096,"name":"address","nodeType":"ElementaryTypeName","src":"357:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"356:19:34"},"returnParameters":{"id":4099,"nodeType":"ParameterList","parameters":[],"src":"384:0:34"},"scope":4101,"src":"339:46:34","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":4102,"src":"195:192:34","usedErrors":[]}],"src":"37:351:34"},"id":34},"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol","exportedSymbols":{"IERC20":[1442],"IERC20WithPermit":[4127]},"id":4128,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":4103,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:35"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../dependencies/openzeppelin/contracts/IERC20.sol","id":4105,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4128,"sourceUnit":1443,"src":"62:73:35","symbolAliases":[{"foreign":{"id":4104,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:6:35","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4107,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"274:6:35"},"id":4108,"nodeType":"InheritanceSpecifier","src":"274:6:35"}],"canonicalName":"IERC20WithPermit","contractDependencies":[],"contractKind":"interface","documentation":{"id":4106,"nodeType":"StructuredDocumentation","src":"137:106:35","text":" @title IERC20WithPermit\n @author Aave\n @notice Interface for the permit function (EIP-2612)"},"fullyImplemented":false,"id":4127,"linearizedBaseContracts":[4127,1442],"name":"IERC20WithPermit","nameLocation":"254:16:35","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4109,"nodeType":"StructuredDocumentation","src":"285:494:35","text":" @notice Allow passing a signed message to approve spending\n @dev implements the permit function as for\n https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\n @param owner The owner of the funds\n @param spender The spender\n @param value The amount\n @param deadline The deadline timestamp, type(uint256).max for max deadline\n @param v Signature param\n @param s Signature param\n @param r Signature param"},"functionSelector":"d505accf","id":4126,"implemented":false,"kind":"function","modifiers":[],"name":"permit","nameLocation":"791:6:35","nodeType":"FunctionDefinition","parameters":{"id":4124,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4111,"mutability":"mutable","name":"owner","nameLocation":"811:5:35","nodeType":"VariableDeclaration","scope":4126,"src":"803:13:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4110,"name":"address","nodeType":"ElementaryTypeName","src":"803:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4113,"mutability":"mutable","name":"spender","nameLocation":"830:7:35","nodeType":"VariableDeclaration","scope":4126,"src":"822:15:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4112,"name":"address","nodeType":"ElementaryTypeName","src":"822:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4115,"mutability":"mutable","name":"value","nameLocation":"851:5:35","nodeType":"VariableDeclaration","scope":4126,"src":"843:13:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4114,"name":"uint256","nodeType":"ElementaryTypeName","src":"843:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4117,"mutability":"mutable","name":"deadline","nameLocation":"870:8:35","nodeType":"VariableDeclaration","scope":4126,"src":"862:16:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4116,"name":"uint256","nodeType":"ElementaryTypeName","src":"862:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4119,"mutability":"mutable","name":"v","nameLocation":"890:1:35","nodeType":"VariableDeclaration","scope":4126,"src":"884:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4118,"name":"uint8","nodeType":"ElementaryTypeName","src":"884:5:35","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":4121,"mutability":"mutable","name":"r","nameLocation":"905:1:35","nodeType":"VariableDeclaration","scope":4126,"src":"897:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4120,"name":"bytes32","nodeType":"ElementaryTypeName","src":"897:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4123,"mutability":"mutable","name":"s","nameLocation":"920:1:35","nodeType":"VariableDeclaration","scope":4126,"src":"912:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4122,"name":"bytes32","nodeType":"ElementaryTypeName","src":"912:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"797:128:35"},"returnParameters":{"id":4125,"nodeType":"ParameterList","parameters":[],"src":"934:0:35"},"scope":4127,"src":"782:153:35","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":4128,"src":"244:693:35","usedErrors":[]}],"src":"37:901:35"},"id":35},"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol","exportedSymbols":{"IAaveIncentivesController":[3875],"IInitializableAToken":[4176],"IPool":[4860]},"id":4177,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":4129,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:36"},{"absolutePath":"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol","file":"./IAaveIncentivesController.sol","id":4131,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4177,"sourceUnit":3876,"src":"62:74:36","symbolAliases":[{"foreign":{"id":4130,"name":"IAaveIncentivesController","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:25:36","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","file":"./IPool.sol","id":4133,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4177,"sourceUnit":4861,"src":"137:34:36","symbolAliases":[{"foreign":{"id":4132,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"145:5:36","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IInitializableAToken","contractDependencies":[],"contractKind":"interface","documentation":{"id":4134,"nodeType":"StructuredDocumentation","src":"173:113:36","text":" @title IInitializableAToken\n @author Aave\n @notice Interface for the initialize function on AToken"},"fullyImplemented":false,"id":4176,"linearizedBaseContracts":[4176],"name":"IInitializableAToken","nameLocation":"297:20:36","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":4135,"nodeType":"StructuredDocumentation","src":"322:543:36","text":" @dev Emitted when an aToken is initialized\n @param underlyingAsset The address of the underlying asset\n @param pool The address of the associated pool\n @param treasury The address of the treasury\n @param incentivesController The address of the incentives controller for this aToken\n @param aTokenDecimals The decimals of the underlying\n @param aTokenName The name of the aToken\n @param aTokenSymbol The symbol of the aToken\n @param params A set of encoded parameters for additional initialization"},"id":4153,"name":"Initialized","nameLocation":"874:11:36","nodeType":"EventDefinition","parameters":{"id":4152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4137,"indexed":true,"mutability":"mutable","name":"underlyingAsset","nameLocation":"907:15:36","nodeType":"VariableDeclaration","scope":4153,"src":"891:31:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4136,"name":"address","nodeType":"ElementaryTypeName","src":"891:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4139,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"944:4:36","nodeType":"VariableDeclaration","scope":4153,"src":"928:20:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4138,"name":"address","nodeType":"ElementaryTypeName","src":"928:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4141,"indexed":false,"mutability":"mutable","name":"treasury","nameLocation":"962:8:36","nodeType":"VariableDeclaration","scope":4153,"src":"954:16:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4140,"name":"address","nodeType":"ElementaryTypeName","src":"954:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4143,"indexed":false,"mutability":"mutable","name":"incentivesController","nameLocation":"984:20:36","nodeType":"VariableDeclaration","scope":4153,"src":"976:28:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4142,"name":"address","nodeType":"ElementaryTypeName","src":"976:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4145,"indexed":false,"mutability":"mutable","name":"aTokenDecimals","nameLocation":"1016:14:36","nodeType":"VariableDeclaration","scope":4153,"src":"1010:20:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4144,"name":"uint8","nodeType":"ElementaryTypeName","src":"1010:5:36","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":4147,"indexed":false,"mutability":"mutable","name":"aTokenName","nameLocation":"1043:10:36","nodeType":"VariableDeclaration","scope":4153,"src":"1036:17:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4146,"name":"string","nodeType":"ElementaryTypeName","src":"1036:6:36","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":4149,"indexed":false,"mutability":"mutable","name":"aTokenSymbol","nameLocation":"1066:12:36","nodeType":"VariableDeclaration","scope":4153,"src":"1059:19:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4148,"name":"string","nodeType":"ElementaryTypeName","src":"1059:6:36","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":4151,"indexed":false,"mutability":"mutable","name":"params","nameLocation":"1090:6:36","nodeType":"VariableDeclaration","scope":4153,"src":"1084:12:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4150,"name":"bytes","nodeType":"ElementaryTypeName","src":"1084:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"885:215:36"},"src":"868:233:36"},{"documentation":{"id":4154,"nodeType":"StructuredDocumentation","src":"1105:659:36","text":" @notice Initializes the aToken\n @param pool The pool contract that is initializing this contract\n @param treasury The address of the Aave treasury, receiving the fees on this aToken\n @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\n @param incentivesController The smart contract managing potential incentives distribution\n @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\n @param aTokenName The name of the aToken\n @param aTokenSymbol The symbol of the aToken\n @param params A set of encoded parameters for additional initialization"},"functionSelector":"183fb413","id":4175,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"1776:10:36","nodeType":"FunctionDefinition","parameters":{"id":4173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4157,"mutability":"mutable","name":"pool","nameLocation":"1798:4:36","nodeType":"VariableDeclaration","scope":4175,"src":"1792:10:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":4156,"nodeType":"UserDefinedTypeName","pathNode":{"id":4155,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"1792:5:36"},"referencedDeclaration":4860,"src":"1792:5:36","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"},{"constant":false,"id":4159,"mutability":"mutable","name":"treasury","nameLocation":"1816:8:36","nodeType":"VariableDeclaration","scope":4175,"src":"1808:16:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4158,"name":"address","nodeType":"ElementaryTypeName","src":"1808:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4161,"mutability":"mutable","name":"underlyingAsset","nameLocation":"1838:15:36","nodeType":"VariableDeclaration","scope":4175,"src":"1830:23:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4160,"name":"address","nodeType":"ElementaryTypeName","src":"1830:7:36","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4164,"mutability":"mutable","name":"incentivesController","nameLocation":"1885:20:36","nodeType":"VariableDeclaration","scope":4175,"src":"1859:46:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"},"typeName":{"id":4163,"nodeType":"UserDefinedTypeName","pathNode":{"id":4162,"name":"IAaveIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":3875,"src":"1859:25:36"},"referencedDeclaration":3875,"src":"1859:25:36","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"visibility":"internal"},{"constant":false,"id":4166,"mutability":"mutable","name":"aTokenDecimals","nameLocation":"1917:14:36","nodeType":"VariableDeclaration","scope":4175,"src":"1911:20:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4165,"name":"uint8","nodeType":"ElementaryTypeName","src":"1911:5:36","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":4168,"mutability":"mutable","name":"aTokenName","nameLocation":"1953:10:36","nodeType":"VariableDeclaration","scope":4175,"src":"1937:26:36","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":4167,"name":"string","nodeType":"ElementaryTypeName","src":"1937:6:36","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":4170,"mutability":"mutable","name":"aTokenSymbol","nameLocation":"1985:12:36","nodeType":"VariableDeclaration","scope":4175,"src":"1969:28:36","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":4169,"name":"string","nodeType":"ElementaryTypeName","src":"1969:6:36","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":4172,"mutability":"mutable","name":"params","nameLocation":"2018:6:36","nodeType":"VariableDeclaration","scope":4175,"src":"2003:21:36","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4171,"name":"bytes","nodeType":"ElementaryTypeName","src":"2003:5:36","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1786:242:36"},"returnParameters":{"id":4174,"nodeType":"ParameterList","parameters":[],"src":"2037:0:36"},"scope":4176,"src":"1767:271:36","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":4177,"src":"287:1753:36","usedErrors":[]}],"src":"37:2004:36"},"id":36},"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol","exportedSymbols":{"IAaveIncentivesController":[3875],"IInitializableDebtToken":[4221],"IPool":[4860]},"id":4222,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":4178,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:37"},{"absolutePath":"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol","file":"./IAaveIncentivesController.sol","id":4180,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4222,"sourceUnit":3876,"src":"62:74:37","symbolAliases":[{"foreign":{"id":4179,"name":"IAaveIncentivesController","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:25:37","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","file":"./IPool.sol","id":4182,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4222,"sourceUnit":4861,"src":"137:34:37","symbolAliases":[{"foreign":{"id":4181,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"145:5:37","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IInitializableDebtToken","contractDependencies":[],"contractKind":"interface","documentation":{"id":4183,"nodeType":"StructuredDocumentation","src":"173:133:37","text":" @title IInitializableDebtToken\n @author Aave\n @notice Interface for the initialize function common between debt tokens"},"fullyImplemented":false,"id":4221,"linearizedBaseContracts":[4221],"name":"IInitializableDebtToken","nameLocation":"317:23:37","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":4184,"nodeType":"StructuredDocumentation","src":"345:514:37","text":" @dev Emitted when a debt token is initialized\n @param underlyingAsset The address of the underlying asset\n @param pool The address of the associated pool\n @param incentivesController The address of the incentives controller for this aToken\n @param debtTokenDecimals The decimals of the debt token\n @param debtTokenName The name of the debt token\n @param debtTokenSymbol The symbol of the debt token\n @param params A set of encoded parameters for additional initialization"},"id":4200,"name":"Initialized","nameLocation":"868:11:37","nodeType":"EventDefinition","parameters":{"id":4199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4186,"indexed":true,"mutability":"mutable","name":"underlyingAsset","nameLocation":"901:15:37","nodeType":"VariableDeclaration","scope":4200,"src":"885:31:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4185,"name":"address","nodeType":"ElementaryTypeName","src":"885:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4188,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"938:4:37","nodeType":"VariableDeclaration","scope":4200,"src":"922:20:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4187,"name":"address","nodeType":"ElementaryTypeName","src":"922:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4190,"indexed":false,"mutability":"mutable","name":"incentivesController","nameLocation":"956:20:37","nodeType":"VariableDeclaration","scope":4200,"src":"948:28:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4189,"name":"address","nodeType":"ElementaryTypeName","src":"948:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4192,"indexed":false,"mutability":"mutable","name":"debtTokenDecimals","nameLocation":"988:17:37","nodeType":"VariableDeclaration","scope":4200,"src":"982:23:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4191,"name":"uint8","nodeType":"ElementaryTypeName","src":"982:5:37","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":4194,"indexed":false,"mutability":"mutable","name":"debtTokenName","nameLocation":"1018:13:37","nodeType":"VariableDeclaration","scope":4200,"src":"1011:20:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4193,"name":"string","nodeType":"ElementaryTypeName","src":"1011:6:37","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":4196,"indexed":false,"mutability":"mutable","name":"debtTokenSymbol","nameLocation":"1044:15:37","nodeType":"VariableDeclaration","scope":4200,"src":"1037:22:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4195,"name":"string","nodeType":"ElementaryTypeName","src":"1037:6:37","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":4198,"indexed":false,"mutability":"mutable","name":"params","nameLocation":"1071:6:37","nodeType":"VariableDeclaration","scope":4200,"src":"1065:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4197,"name":"bytes","nodeType":"ElementaryTypeName","src":"1065:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"879:202:37"},"src":"862:220:37"},{"documentation":{"id":4201,"nodeType":"StructuredDocumentation","src":"1086:585:37","text":" @notice Initializes the debt token.\n @param pool The pool contract that is initializing this contract\n @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\n @param incentivesController The smart contract managing potential incentives distribution\n @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\n @param debtTokenName The name of the token\n @param debtTokenSymbol The symbol of the token\n @param params A set of encoded parameters for additional initialization"},"functionSelector":"c222ec8a","id":4220,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"1683:10:37","nodeType":"FunctionDefinition","parameters":{"id":4218,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4204,"mutability":"mutable","name":"pool","nameLocation":"1705:4:37","nodeType":"VariableDeclaration","scope":4220,"src":"1699:10:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":4203,"nodeType":"UserDefinedTypeName","pathNode":{"id":4202,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"1699:5:37"},"referencedDeclaration":4860,"src":"1699:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"},{"constant":false,"id":4206,"mutability":"mutable","name":"underlyingAsset","nameLocation":"1723:15:37","nodeType":"VariableDeclaration","scope":4220,"src":"1715:23:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4205,"name":"address","nodeType":"ElementaryTypeName","src":"1715:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4209,"mutability":"mutable","name":"incentivesController","nameLocation":"1770:20:37","nodeType":"VariableDeclaration","scope":4220,"src":"1744:46:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"},"typeName":{"id":4208,"nodeType":"UserDefinedTypeName","pathNode":{"id":4207,"name":"IAaveIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":3875,"src":"1744:25:37"},"referencedDeclaration":3875,"src":"1744:25:37","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"visibility":"internal"},{"constant":false,"id":4211,"mutability":"mutable","name":"debtTokenDecimals","nameLocation":"1802:17:37","nodeType":"VariableDeclaration","scope":4220,"src":"1796:23:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4210,"name":"uint8","nodeType":"ElementaryTypeName","src":"1796:5:37","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":4213,"mutability":"mutable","name":"debtTokenName","nameLocation":"1839:13:37","nodeType":"VariableDeclaration","scope":4220,"src":"1825:27:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4212,"name":"string","nodeType":"ElementaryTypeName","src":"1825:6:37","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":4215,"mutability":"mutable","name":"debtTokenSymbol","nameLocation":"1872:15:37","nodeType":"VariableDeclaration","scope":4220,"src":"1858:29:37","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4214,"name":"string","nodeType":"ElementaryTypeName","src":"1858:6:37","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":4217,"mutability":"mutable","name":"params","nameLocation":"1908:6:37","nodeType":"VariableDeclaration","scope":4220,"src":"1893:21:37","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4216,"name":"bytes","nodeType":"ElementaryTypeName","src":"1893:5:37","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1693:225:37"},"returnParameters":{"id":4219,"nodeType":"ParameterList","parameters":[],"src":"1927:0:37"},"scope":4221,"src":"1674:254:37","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":4222,"src":"307:1623:37","usedErrors":[]}],"src":"37:1894:37"},"id":37},"@aave/core-v3/contracts/interfaces/IPool.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","exportedSymbols":{"DataTypes":[21633],"IPool":[4860],"IPoolAddressesProvider":[5069]},"id":4861,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":4223,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:38"},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"./IPoolAddressesProvider.sol","id":4225,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4861,"sourceUnit":5070,"src":"62:68:38","symbolAliases":[{"foreign":{"id":4224,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:22:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"../protocol/libraries/types/DataTypes.sol","id":4227,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4861,"sourceUnit":21634,"src":"131:68:38","symbolAliases":[{"foreign":{"id":4226,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"139:9:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IPool","contractDependencies":[],"contractKind":"interface","documentation":{"id":4228,"nodeType":"StructuredDocumentation","src":"201:96:38","text":" @title IPool\n @author Aave\n @notice Defines the basic interface for an Aave Pool."},"fullyImplemented":false,"id":4860,"linearizedBaseContracts":[4860],"name":"IPool","nameLocation":"308:5:38","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":4229,"nodeType":"StructuredDocumentation","src":"318:349:38","text":" @dev Emitted on mintUnbacked()\n @param reserve The address of the underlying asset of the reserve\n @param user The address initiating the supply\n @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\n @param amount The amount of supplied assets\n @param referralCode The referral code used"},"id":4241,"name":"MintUnbacked","nameLocation":"676:12:38","nodeType":"EventDefinition","parameters":{"id":4240,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4231,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"710:7:38","nodeType":"VariableDeclaration","scope":4241,"src":"694:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4230,"name":"address","nodeType":"ElementaryTypeName","src":"694:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4233,"indexed":false,"mutability":"mutable","name":"user","nameLocation":"731:4:38","nodeType":"VariableDeclaration","scope":4241,"src":"723:12:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4232,"name":"address","nodeType":"ElementaryTypeName","src":"723:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4235,"indexed":true,"mutability":"mutable","name":"onBehalfOf","nameLocation":"757:10:38","nodeType":"VariableDeclaration","scope":4241,"src":"741:26:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4234,"name":"address","nodeType":"ElementaryTypeName","src":"741:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4237,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"781:6:38","nodeType":"VariableDeclaration","scope":4241,"src":"773:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4236,"name":"uint256","nodeType":"ElementaryTypeName","src":"773:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4239,"indexed":true,"mutability":"mutable","name":"referralCode","nameLocation":"808:12:38","nodeType":"VariableDeclaration","scope":4241,"src":"793:27:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4238,"name":"uint16","nodeType":"ElementaryTypeName","src":"793:6:38","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"688:136:38"},"src":"670:155:38"},{"anonymous":false,"documentation":{"id":4242,"nodeType":"StructuredDocumentation","src":"829:257:38","text":" @dev Emitted on backUnbacked()\n @param reserve The address of the underlying asset of the reserve\n @param backer The address paying for the backing\n @param amount The amount added as backing\n @param fee The amount paid in fees"},"id":4252,"name":"BackUnbacked","nameLocation":"1095:12:38","nodeType":"EventDefinition","parameters":{"id":4251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4244,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1124:7:38","nodeType":"VariableDeclaration","scope":4252,"src":"1108:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4243,"name":"address","nodeType":"ElementaryTypeName","src":"1108:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4246,"indexed":true,"mutability":"mutable","name":"backer","nameLocation":"1149:6:38","nodeType":"VariableDeclaration","scope":4252,"src":"1133:22:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4245,"name":"address","nodeType":"ElementaryTypeName","src":"1133:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4248,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1165:6:38","nodeType":"VariableDeclaration","scope":4252,"src":"1157:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4247,"name":"uint256","nodeType":"ElementaryTypeName","src":"1157:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4250,"indexed":false,"mutability":"mutable","name":"fee","nameLocation":"1181:3:38","nodeType":"VariableDeclaration","scope":4252,"src":"1173:11:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4249,"name":"uint256","nodeType":"ElementaryTypeName","src":"1173:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1107:78:38"},"src":"1089:97:38"},{"anonymous":false,"documentation":{"id":4253,"nodeType":"StructuredDocumentation","src":"1190:324:38","text":" @dev Emitted on supply()\n @param reserve The address of the underlying asset of the reserve\n @param user The address initiating the supply\n @param onBehalfOf The beneficiary of the supply, receiving the aTokens\n @param amount The amount supplied\n @param referralCode The referral code used"},"id":4265,"name":"Supply","nameLocation":"1523:6:38","nodeType":"EventDefinition","parameters":{"id":4264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4255,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1551:7:38","nodeType":"VariableDeclaration","scope":4265,"src":"1535:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4254,"name":"address","nodeType":"ElementaryTypeName","src":"1535:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4257,"indexed":false,"mutability":"mutable","name":"user","nameLocation":"1572:4:38","nodeType":"VariableDeclaration","scope":4265,"src":"1564:12:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4256,"name":"address","nodeType":"ElementaryTypeName","src":"1564:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4259,"indexed":true,"mutability":"mutable","name":"onBehalfOf","nameLocation":"1598:10:38","nodeType":"VariableDeclaration","scope":4265,"src":"1582:26:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4258,"name":"address","nodeType":"ElementaryTypeName","src":"1582:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4261,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1622:6:38","nodeType":"VariableDeclaration","scope":4265,"src":"1614:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4260,"name":"uint256","nodeType":"ElementaryTypeName","src":"1614:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4263,"indexed":true,"mutability":"mutable","name":"referralCode","nameLocation":"1649:12:38","nodeType":"VariableDeclaration","scope":4265,"src":"1634:27:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4262,"name":"uint16","nodeType":"ElementaryTypeName","src":"1634:6:38","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"1529:136:38"},"src":"1517:149:38"},{"anonymous":false,"documentation":{"id":4266,"nodeType":"StructuredDocumentation","src":"1670:292:38","text":" @dev Emitted on withdraw()\n @param reserve The address of the underlying asset being withdrawn\n @param user The address initiating the withdrawal, owner of aTokens\n @param to The address that will receive the underlying\n @param amount The amount to be withdrawn"},"id":4276,"name":"Withdraw","nameLocation":"1971:8:38","nodeType":"EventDefinition","parameters":{"id":4275,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4268,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1996:7:38","nodeType":"VariableDeclaration","scope":4276,"src":"1980:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4267,"name":"address","nodeType":"ElementaryTypeName","src":"1980:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4270,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"2021:4:38","nodeType":"VariableDeclaration","scope":4276,"src":"2005:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4269,"name":"address","nodeType":"ElementaryTypeName","src":"2005:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4272,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"2043:2:38","nodeType":"VariableDeclaration","scope":4276,"src":"2027:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4271,"name":"address","nodeType":"ElementaryTypeName","src":"2027:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4274,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2055:6:38","nodeType":"VariableDeclaration","scope":4276,"src":"2047:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4273,"name":"uint256","nodeType":"ElementaryTypeName","src":"2047:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1979:83:38"},"src":"1965:98:38"},{"anonymous":false,"documentation":{"id":4277,"nodeType":"StructuredDocumentation","src":"2067:628:38","text":" @dev Emitted on borrow() and flashLoan() when debt needs to be opened\n @param reserve The address of the underlying asset being borrowed\n @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\n initiator of the transaction on flashLoan()\n @param onBehalfOf The address that will be getting the debt\n @param amount The amount borrowed out\n @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\n @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\n @param referralCode The referral code used"},"id":4294,"name":"Borrow","nameLocation":"2704:6:38","nodeType":"EventDefinition","parameters":{"id":4293,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4279,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"2732:7:38","nodeType":"VariableDeclaration","scope":4294,"src":"2716:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4278,"name":"address","nodeType":"ElementaryTypeName","src":"2716:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4281,"indexed":false,"mutability":"mutable","name":"user","nameLocation":"2753:4:38","nodeType":"VariableDeclaration","scope":4294,"src":"2745:12:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4280,"name":"address","nodeType":"ElementaryTypeName","src":"2745:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4283,"indexed":true,"mutability":"mutable","name":"onBehalfOf","nameLocation":"2779:10:38","nodeType":"VariableDeclaration","scope":4294,"src":"2763:26:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4282,"name":"address","nodeType":"ElementaryTypeName","src":"2763:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4285,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2803:6:38","nodeType":"VariableDeclaration","scope":4294,"src":"2795:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4284,"name":"uint256","nodeType":"ElementaryTypeName","src":"2795:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4288,"indexed":false,"mutability":"mutable","name":"interestRateMode","nameLocation":"2842:16:38","nodeType":"VariableDeclaration","scope":4294,"src":"2815:43:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"typeName":{"id":4287,"nodeType":"UserDefinedTypeName","pathNode":{"id":4286,"name":"DataTypes.InterestRateMode","nodeType":"IdentifierPath","referencedDeclaration":21337,"src":"2815:26:38"},"referencedDeclaration":21337,"src":"2815:26:38","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"visibility":"internal"},{"constant":false,"id":4290,"indexed":false,"mutability":"mutable","name":"borrowRate","nameLocation":"2872:10:38","nodeType":"VariableDeclaration","scope":4294,"src":"2864:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4289,"name":"uint256","nodeType":"ElementaryTypeName","src":"2864:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4292,"indexed":true,"mutability":"mutable","name":"referralCode","nameLocation":"2903:12:38","nodeType":"VariableDeclaration","scope":4294,"src":"2888:27:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4291,"name":"uint16","nodeType":"ElementaryTypeName","src":"2888:6:38","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"2710:209:38"},"src":"2698:222:38"},{"anonymous":false,"documentation":{"id":4295,"nodeType":"StructuredDocumentation","src":"2924:425:38","text":" @dev Emitted on repay()\n @param reserve The address of the underlying asset of the reserve\n @param user The beneficiary of the repayment, getting his debt reduced\n @param repayer The address of the user initiating the repay(), providing the funds\n @param amount The amount repaid\n @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly"},"id":4307,"name":"Repay","nameLocation":"3358:5:38","nodeType":"EventDefinition","parameters":{"id":4306,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4297,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"3385:7:38","nodeType":"VariableDeclaration","scope":4307,"src":"3369:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4296,"name":"address","nodeType":"ElementaryTypeName","src":"3369:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4299,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"3414:4:38","nodeType":"VariableDeclaration","scope":4307,"src":"3398:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4298,"name":"address","nodeType":"ElementaryTypeName","src":"3398:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4301,"indexed":true,"mutability":"mutable","name":"repayer","nameLocation":"3440:7:38","nodeType":"VariableDeclaration","scope":4307,"src":"3424:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4300,"name":"address","nodeType":"ElementaryTypeName","src":"3424:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4303,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"3461:6:38","nodeType":"VariableDeclaration","scope":4307,"src":"3453:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4302,"name":"uint256","nodeType":"ElementaryTypeName","src":"3453:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4305,"indexed":false,"mutability":"mutable","name":"useATokens","nameLocation":"3478:10:38","nodeType":"VariableDeclaration","scope":4307,"src":"3473:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4304,"name":"bool","nodeType":"ElementaryTypeName","src":"3473:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3363:129:38"},"src":"3352:141:38"},{"anonymous":false,"documentation":{"id":4308,"nodeType":"StructuredDocumentation","src":"3497:306:38","text":" @dev Emitted on swapBorrowRateMode()\n @param reserve The address of the underlying asset of the reserve\n @param user The address of the user swapping his rate mode\n @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable"},"id":4317,"name":"SwapBorrowRateMode","nameLocation":"3812:18:38","nodeType":"EventDefinition","parameters":{"id":4316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4310,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"3852:7:38","nodeType":"VariableDeclaration","scope":4317,"src":"3836:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4309,"name":"address","nodeType":"ElementaryTypeName","src":"3836:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4312,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"3881:4:38","nodeType":"VariableDeclaration","scope":4317,"src":"3865:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4311,"name":"address","nodeType":"ElementaryTypeName","src":"3865:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4315,"indexed":false,"mutability":"mutable","name":"interestRateMode","nameLocation":"3918:16:38","nodeType":"VariableDeclaration","scope":4317,"src":"3891:43:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"typeName":{"id":4314,"nodeType":"UserDefinedTypeName","pathNode":{"id":4313,"name":"DataTypes.InterestRateMode","nodeType":"IdentifierPath","referencedDeclaration":21337,"src":"3891:26:38"},"referencedDeclaration":21337,"src":"3891:26:38","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"visibility":"internal"}],"src":"3830:108:38"},"src":"3806:133:38"},{"anonymous":false,"documentation":{"id":4318,"nodeType":"StructuredDocumentation","src":"3943:234:38","text":" @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\n @param asset The address of the underlying asset of the reserve\n @param totalDebt The total isolation mode debt for the reserve"},"id":4324,"name":"IsolationModeTotalDebtUpdated","nameLocation":"4186:29:38","nodeType":"EventDefinition","parameters":{"id":4323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4320,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"4232:5:38","nodeType":"VariableDeclaration","scope":4324,"src":"4216:21:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4319,"name":"address","nodeType":"ElementaryTypeName","src":"4216:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4322,"indexed":false,"mutability":"mutable","name":"totalDebt","nameLocation":"4247:9:38","nodeType":"VariableDeclaration","scope":4324,"src":"4239:17:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4321,"name":"uint256","nodeType":"ElementaryTypeName","src":"4239:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4215:42:38"},"src":"4180:78:38"},{"anonymous":false,"documentation":{"id":4325,"nodeType":"StructuredDocumentation","src":"4262:164:38","text":" @dev Emitted when the user selects a certain asset category for eMode\n @param user The address of the user\n @param categoryId The category id"},"id":4331,"name":"UserEModeSet","nameLocation":"4435:12:38","nodeType":"EventDefinition","parameters":{"id":4330,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4327,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"4464:4:38","nodeType":"VariableDeclaration","scope":4331,"src":"4448:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4326,"name":"address","nodeType":"ElementaryTypeName","src":"4448:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4329,"indexed":false,"mutability":"mutable","name":"categoryId","nameLocation":"4476:10:38","nodeType":"VariableDeclaration","scope":4331,"src":"4470:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4328,"name":"uint8","nodeType":"ElementaryTypeName","src":"4470:5:38","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"4447:40:38"},"src":"4429:59:38"},{"anonymous":false,"documentation":{"id":4332,"nodeType":"StructuredDocumentation","src":"4492:207:38","text":" @dev Emitted on setUserUseReserveAsCollateral()\n @param reserve The address of the underlying asset of the reserve\n @param user The address of the user enabling the usage as collateral"},"id":4338,"name":"ReserveUsedAsCollateralEnabled","nameLocation":"4708:30:38","nodeType":"EventDefinition","parameters":{"id":4337,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4334,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"4755:7:38","nodeType":"VariableDeclaration","scope":4338,"src":"4739:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4333,"name":"address","nodeType":"ElementaryTypeName","src":"4739:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4336,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"4780:4:38","nodeType":"VariableDeclaration","scope":4338,"src":"4764:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4335,"name":"address","nodeType":"ElementaryTypeName","src":"4764:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4738:47:38"},"src":"4702:84:38"},{"anonymous":false,"documentation":{"id":4339,"nodeType":"StructuredDocumentation","src":"4790:207:38","text":" @dev Emitted on setUserUseReserveAsCollateral()\n @param reserve The address of the underlying asset of the reserve\n @param user The address of the user enabling the usage as collateral"},"id":4345,"name":"ReserveUsedAsCollateralDisabled","nameLocation":"5006:31:38","nodeType":"EventDefinition","parameters":{"id":4344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4341,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"5054:7:38","nodeType":"VariableDeclaration","scope":4345,"src":"5038:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4340,"name":"address","nodeType":"ElementaryTypeName","src":"5038:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4343,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"5079:4:38","nodeType":"VariableDeclaration","scope":4345,"src":"5063:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4342,"name":"address","nodeType":"ElementaryTypeName","src":"5063:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5037:47:38"},"src":"5000:85:38"},{"anonymous":false,"documentation":{"id":4346,"nodeType":"StructuredDocumentation","src":"5089:212:38","text":" @dev Emitted on rebalanceStableBorrowRate()\n @param reserve The address of the underlying asset of the reserve\n @param user The address of the user for which the rebalance has been executed"},"id":4352,"name":"RebalanceStableBorrowRate","nameLocation":"5310:25:38","nodeType":"EventDefinition","parameters":{"id":4351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4348,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"5352:7:38","nodeType":"VariableDeclaration","scope":4352,"src":"5336:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4347,"name":"address","nodeType":"ElementaryTypeName","src":"5336:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4350,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"5377:4:38","nodeType":"VariableDeclaration","scope":4352,"src":"5361:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4349,"name":"address","nodeType":"ElementaryTypeName","src":"5361:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5335:47:38"},"src":"5304:79:38"},{"anonymous":false,"documentation":{"id":4353,"nodeType":"StructuredDocumentation","src":"5387:482:38","text":" @dev Emitted on flashLoan()\n @param target The address of the flash loan receiver contract\n @param initiator The address initiating the flash loan\n @param asset The address of the asset being flash borrowed\n @param amount The amount flash borrowed\n @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\n @param premium The fee flash borrowed\n @param referralCode The referral code used"},"id":4370,"name":"FlashLoan","nameLocation":"5878:9:38","nodeType":"EventDefinition","parameters":{"id":4369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4355,"indexed":true,"mutability":"mutable","name":"target","nameLocation":"5909:6:38","nodeType":"VariableDeclaration","scope":4370,"src":"5893:22:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4354,"name":"address","nodeType":"ElementaryTypeName","src":"5893:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4357,"indexed":false,"mutability":"mutable","name":"initiator","nameLocation":"5929:9:38","nodeType":"VariableDeclaration","scope":4370,"src":"5921:17:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4356,"name":"address","nodeType":"ElementaryTypeName","src":"5921:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4359,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"5960:5:38","nodeType":"VariableDeclaration","scope":4370,"src":"5944:21:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4358,"name":"address","nodeType":"ElementaryTypeName","src":"5944:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4361,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"5979:6:38","nodeType":"VariableDeclaration","scope":4370,"src":"5971:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4360,"name":"uint256","nodeType":"ElementaryTypeName","src":"5971:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4364,"indexed":false,"mutability":"mutable","name":"interestRateMode","nameLocation":"6018:16:38","nodeType":"VariableDeclaration","scope":4370,"src":"5991:43:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"typeName":{"id":4363,"nodeType":"UserDefinedTypeName","pathNode":{"id":4362,"name":"DataTypes.InterestRateMode","nodeType":"IdentifierPath","referencedDeclaration":21337,"src":"5991:26:38"},"referencedDeclaration":21337,"src":"5991:26:38","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"visibility":"internal"},{"constant":false,"id":4366,"indexed":false,"mutability":"mutable","name":"premium","nameLocation":"6048:7:38","nodeType":"VariableDeclaration","scope":4370,"src":"6040:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4365,"name":"uint256","nodeType":"ElementaryTypeName","src":"6040:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4368,"indexed":true,"mutability":"mutable","name":"referralCode","nameLocation":"6076:12:38","nodeType":"VariableDeclaration","scope":4370,"src":"6061:27:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4367,"name":"uint16","nodeType":"ElementaryTypeName","src":"6061:6:38","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"5887:205:38"},"src":"5872:221:38"},{"anonymous":false,"documentation":{"id":4371,"nodeType":"StructuredDocumentation","src":"6097:749:38","text":" @dev Emitted when a borrower is liquidated.\n @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\n @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\n @param user The address of the borrower getting liquidated\n @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\n @param liquidatedCollateralAmount The amount of collateral received by the liquidator\n @param liquidator The address of the liquidator\n @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\n to receive the underlying collateral asset directly"},"id":4387,"name":"LiquidationCall","nameLocation":"6855:15:38","nodeType":"EventDefinition","parameters":{"id":4386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4373,"indexed":true,"mutability":"mutable","name":"collateralAsset","nameLocation":"6892:15:38","nodeType":"VariableDeclaration","scope":4387,"src":"6876:31:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4372,"name":"address","nodeType":"ElementaryTypeName","src":"6876:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4375,"indexed":true,"mutability":"mutable","name":"debtAsset","nameLocation":"6929:9:38","nodeType":"VariableDeclaration","scope":4387,"src":"6913:25:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4374,"name":"address","nodeType":"ElementaryTypeName","src":"6913:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4377,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"6960:4:38","nodeType":"VariableDeclaration","scope":4387,"src":"6944:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4376,"name":"address","nodeType":"ElementaryTypeName","src":"6944:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4379,"indexed":false,"mutability":"mutable","name":"debtToCover","nameLocation":"6978:11:38","nodeType":"VariableDeclaration","scope":4387,"src":"6970:19:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4378,"name":"uint256","nodeType":"ElementaryTypeName","src":"6970:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4381,"indexed":false,"mutability":"mutable","name":"liquidatedCollateralAmount","nameLocation":"7003:26:38","nodeType":"VariableDeclaration","scope":4387,"src":"6995:34:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4380,"name":"uint256","nodeType":"ElementaryTypeName","src":"6995:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4383,"indexed":false,"mutability":"mutable","name":"liquidator","nameLocation":"7043:10:38","nodeType":"VariableDeclaration","scope":4387,"src":"7035:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4382,"name":"address","nodeType":"ElementaryTypeName","src":"7035:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4385,"indexed":false,"mutability":"mutable","name":"receiveAToken","nameLocation":"7064:13:38","nodeType":"VariableDeclaration","scope":4387,"src":"7059:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4384,"name":"bool","nodeType":"ElementaryTypeName","src":"7059:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6870:211:38"},"src":"6849:233:38"},{"anonymous":false,"documentation":{"id":4388,"nodeType":"StructuredDocumentation","src":"7086:421:38","text":" @dev Emitted when the state of a reserve is updated.\n @param reserve The address of the underlying asset of the reserve\n @param liquidityRate The next liquidity rate\n @param stableBorrowRate The next stable borrow rate\n @param variableBorrowRate The next variable borrow rate\n @param liquidityIndex The next liquidity index\n @param variableBorrowIndex The next variable borrow index"},"id":4402,"name":"ReserveDataUpdated","nameLocation":"7516:18:38","nodeType":"EventDefinition","parameters":{"id":4401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4390,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"7556:7:38","nodeType":"VariableDeclaration","scope":4402,"src":"7540:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4389,"name":"address","nodeType":"ElementaryTypeName","src":"7540:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4392,"indexed":false,"mutability":"mutable","name":"liquidityRate","nameLocation":"7577:13:38","nodeType":"VariableDeclaration","scope":4402,"src":"7569:21:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4391,"name":"uint256","nodeType":"ElementaryTypeName","src":"7569:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4394,"indexed":false,"mutability":"mutable","name":"stableBorrowRate","nameLocation":"7604:16:38","nodeType":"VariableDeclaration","scope":4402,"src":"7596:24:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4393,"name":"uint256","nodeType":"ElementaryTypeName","src":"7596:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4396,"indexed":false,"mutability":"mutable","name":"variableBorrowRate","nameLocation":"7634:18:38","nodeType":"VariableDeclaration","scope":4402,"src":"7626:26:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4395,"name":"uint256","nodeType":"ElementaryTypeName","src":"7626:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4398,"indexed":false,"mutability":"mutable","name":"liquidityIndex","nameLocation":"7666:14:38","nodeType":"VariableDeclaration","scope":4402,"src":"7658:22:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4397,"name":"uint256","nodeType":"ElementaryTypeName","src":"7658:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4400,"indexed":false,"mutability":"mutable","name":"variableBorrowIndex","nameLocation":"7694:19:38","nodeType":"VariableDeclaration","scope":4402,"src":"7686:27:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4399,"name":"uint256","nodeType":"ElementaryTypeName","src":"7686:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7534:183:38"},"src":"7510:208:38"},{"anonymous":false,"documentation":{"id":4403,"nodeType":"StructuredDocumentation","src":"7722:211:38","text":" @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\n @param reserve The address of the reserve\n @param amountMinted The amount minted to the treasury"},"id":4409,"name":"MintedToTreasury","nameLocation":"7942:16:38","nodeType":"EventDefinition","parameters":{"id":4408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4405,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"7975:7:38","nodeType":"VariableDeclaration","scope":4409,"src":"7959:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4404,"name":"address","nodeType":"ElementaryTypeName","src":"7959:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4407,"indexed":false,"mutability":"mutable","name":"amountMinted","nameLocation":"7992:12:38","nodeType":"VariableDeclaration","scope":4409,"src":"7984:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4406,"name":"uint256","nodeType":"ElementaryTypeName","src":"7984:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7958:47:38"},"src":"7936:70:38"},{"documentation":{"id":4410,"nodeType":"StructuredDocumentation","src":"8010:428:38","text":" @notice Mints an `amount` of aTokens to the `onBehalfOf`\n @param asset The address of the underlying asset to mint\n @param amount The amount to mint\n @param onBehalfOf The address that will receive the aTokens\n @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n   0 if the action is executed directly by the user, without any middle-man"},"functionSelector":"69a933a5","id":4421,"implemented":false,"kind":"function","modifiers":[],"name":"mintUnbacked","nameLocation":"8450:12:38","nodeType":"FunctionDefinition","parameters":{"id":4419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4412,"mutability":"mutable","name":"asset","nameLocation":"8476:5:38","nodeType":"VariableDeclaration","scope":4421,"src":"8468:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4411,"name":"address","nodeType":"ElementaryTypeName","src":"8468:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4414,"mutability":"mutable","name":"amount","nameLocation":"8495:6:38","nodeType":"VariableDeclaration","scope":4421,"src":"8487:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4413,"name":"uint256","nodeType":"ElementaryTypeName","src":"8487:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4416,"mutability":"mutable","name":"onBehalfOf","nameLocation":"8515:10:38","nodeType":"VariableDeclaration","scope":4421,"src":"8507:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4415,"name":"address","nodeType":"ElementaryTypeName","src":"8507:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4418,"mutability":"mutable","name":"referralCode","nameLocation":"8538:12:38","nodeType":"VariableDeclaration","scope":4421,"src":"8531:19:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4417,"name":"uint16","nodeType":"ElementaryTypeName","src":"8531:6:38","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"8462:92:38"},"returnParameters":{"id":4420,"nodeType":"ParameterList","parameters":[],"src":"8563:0:38"},"scope":4860,"src":"8441:123:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4422,"nodeType":"StructuredDocumentation","src":"8568:259:38","text":" @notice Back the current unbacked underlying with `amount` and pay `fee`.\n @param asset The address of the underlying asset to back\n @param amount The amount to back\n @param fee The amount paid in fees\n @return The backed amount"},"functionSelector":"d65dc7a1","id":4433,"implemented":false,"kind":"function","modifiers":[],"name":"backUnbacked","nameLocation":"8839:12:38","nodeType":"FunctionDefinition","parameters":{"id":4429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4424,"mutability":"mutable","name":"asset","nameLocation":"8860:5:38","nodeType":"VariableDeclaration","scope":4433,"src":"8852:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4423,"name":"address","nodeType":"ElementaryTypeName","src":"8852:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4426,"mutability":"mutable","name":"amount","nameLocation":"8875:6:38","nodeType":"VariableDeclaration","scope":4433,"src":"8867:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4425,"name":"uint256","nodeType":"ElementaryTypeName","src":"8867:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4428,"mutability":"mutable","name":"fee","nameLocation":"8891:3:38","nodeType":"VariableDeclaration","scope":4433,"src":"8883:11:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4427,"name":"uint256","nodeType":"ElementaryTypeName","src":"8883:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8851:44:38"},"returnParameters":{"id":4432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4431,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4433,"src":"8914:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4430,"name":"uint256","nodeType":"ElementaryTypeName","src":"8914:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8913:9:38"},"scope":4860,"src":"8830:93:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4434,"nodeType":"StructuredDocumentation","src":"8927:712:38","text":" @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\n - E.g. User supplies 100 USDC and gets in return 100 aUSDC\n @param asset The address of the underlying asset to supply\n @param amount The amount to be supplied\n @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\n   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\n   is a different wallet\n @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n   0 if the action is executed directly by the user, without any middle-man"},"functionSelector":"617ba037","id":4445,"implemented":false,"kind":"function","modifiers":[],"name":"supply","nameLocation":"9651:6:38","nodeType":"FunctionDefinition","parameters":{"id":4443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4436,"mutability":"mutable","name":"asset","nameLocation":"9666:5:38","nodeType":"VariableDeclaration","scope":4445,"src":"9658:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4435,"name":"address","nodeType":"ElementaryTypeName","src":"9658:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4438,"mutability":"mutable","name":"amount","nameLocation":"9681:6:38","nodeType":"VariableDeclaration","scope":4445,"src":"9673:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4437,"name":"uint256","nodeType":"ElementaryTypeName","src":"9673:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4440,"mutability":"mutable","name":"onBehalfOf","nameLocation":"9697:10:38","nodeType":"VariableDeclaration","scope":4445,"src":"9689:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4439,"name":"address","nodeType":"ElementaryTypeName","src":"9689:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4442,"mutability":"mutable","name":"referralCode","nameLocation":"9716:12:38","nodeType":"VariableDeclaration","scope":4445,"src":"9709:19:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4441,"name":"uint16","nodeType":"ElementaryTypeName","src":"9709:6:38","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"9657:72:38"},"returnParameters":{"id":4444,"nodeType":"ParameterList","parameters":[],"src":"9738:0:38"},"scope":4860,"src":"9642:97:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4446,"nodeType":"StructuredDocumentation","src":"9743:962:38","text":" @notice Supply with transfer approval of asset to be supplied done via permit function\n see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\n @param asset The address of the underlying asset to supply\n @param amount The amount to be supplied\n @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\n   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\n   is a different wallet\n @param deadline The deadline timestamp that the permit is valid\n @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n   0 if the action is executed directly by the user, without any middle-man\n @param permitV The V parameter of ERC712 permit sig\n @param permitR The R parameter of ERC712 permit sig\n @param permitS The S parameter of ERC712 permit sig"},"functionSelector":"02c205f0","id":4465,"implemented":false,"kind":"function","modifiers":[],"name":"supplyWithPermit","nameLocation":"10717:16:38","nodeType":"FunctionDefinition","parameters":{"id":4463,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4448,"mutability":"mutable","name":"asset","nameLocation":"10747:5:38","nodeType":"VariableDeclaration","scope":4465,"src":"10739:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4447,"name":"address","nodeType":"ElementaryTypeName","src":"10739:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4450,"mutability":"mutable","name":"amount","nameLocation":"10766:6:38","nodeType":"VariableDeclaration","scope":4465,"src":"10758:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4449,"name":"uint256","nodeType":"ElementaryTypeName","src":"10758:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4452,"mutability":"mutable","name":"onBehalfOf","nameLocation":"10786:10:38","nodeType":"VariableDeclaration","scope":4465,"src":"10778:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4451,"name":"address","nodeType":"ElementaryTypeName","src":"10778:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4454,"mutability":"mutable","name":"referralCode","nameLocation":"10809:12:38","nodeType":"VariableDeclaration","scope":4465,"src":"10802:19:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4453,"name":"uint16","nodeType":"ElementaryTypeName","src":"10802:6:38","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":4456,"mutability":"mutable","name":"deadline","nameLocation":"10835:8:38","nodeType":"VariableDeclaration","scope":4465,"src":"10827:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4455,"name":"uint256","nodeType":"ElementaryTypeName","src":"10827:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4458,"mutability":"mutable","name":"permitV","nameLocation":"10855:7:38","nodeType":"VariableDeclaration","scope":4465,"src":"10849:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4457,"name":"uint8","nodeType":"ElementaryTypeName","src":"10849:5:38","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":4460,"mutability":"mutable","name":"permitR","nameLocation":"10876:7:38","nodeType":"VariableDeclaration","scope":4465,"src":"10868:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4459,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10868:7:38","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4462,"mutability":"mutable","name":"permitS","nameLocation":"10897:7:38","nodeType":"VariableDeclaration","scope":4465,"src":"10889:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4461,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10889:7:38","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10733:175:38"},"returnParameters":{"id":4464,"nodeType":"ParameterList","parameters":[],"src":"10917:0:38"},"scope":4860,"src":"10708:210:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4466,"nodeType":"StructuredDocumentation","src":"10922:671:38","text":" @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\n E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\n @param asset The address of the underlying asset to withdraw\n @param amount The underlying amount to be withdrawn\n   - Send the value type(uint256).max in order to withdraw the whole aToken balance\n @param to The address that will receive the underlying, same as msg.sender if the user\n   wants to receive it on his own wallet, or a different address if the beneficiary is a\n   different wallet\n @return The final amount withdrawn"},"functionSelector":"69328dec","id":4477,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"11605:8:38","nodeType":"FunctionDefinition","parameters":{"id":4473,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4468,"mutability":"mutable","name":"asset","nameLocation":"11622:5:38","nodeType":"VariableDeclaration","scope":4477,"src":"11614:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4467,"name":"address","nodeType":"ElementaryTypeName","src":"11614:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4470,"mutability":"mutable","name":"amount","nameLocation":"11637:6:38","nodeType":"VariableDeclaration","scope":4477,"src":"11629:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4469,"name":"uint256","nodeType":"ElementaryTypeName","src":"11629:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4472,"mutability":"mutable","name":"to","nameLocation":"11653:2:38","nodeType":"VariableDeclaration","scope":4477,"src":"11645:10:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4471,"name":"address","nodeType":"ElementaryTypeName","src":"11645:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11613:43:38"},"returnParameters":{"id":4476,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4475,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4477,"src":"11675:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4474,"name":"uint256","nodeType":"ElementaryTypeName","src":"11675:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11674:9:38"},"scope":4860,"src":"11596:88:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4478,"nodeType":"StructuredDocumentation","src":"11688:1198:38","text":" @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\n already supplied enough collateral, or he was given enough allowance by a credit delegator on the\n corresponding debt token (StableDebtToken or VariableDebtToken)\n - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\n   and 100 stable/variable debt tokens, depending on the `interestRateMode`\n @param asset The address of the underlying asset to borrow\n @param amount The amount to be borrowed\n @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\n @param referralCode The code used to register the integrator originating the operation, for potential rewards.\n   0 if the action is executed directly by the user, without any middle-man\n @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\n calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\n if he has been given credit delegation allowance"},"functionSelector":"a415bcad","id":4491,"implemented":false,"kind":"function","modifiers":[],"name":"borrow","nameLocation":"12898:6:38","nodeType":"FunctionDefinition","parameters":{"id":4489,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4480,"mutability":"mutable","name":"asset","nameLocation":"12918:5:38","nodeType":"VariableDeclaration","scope":4491,"src":"12910:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4479,"name":"address","nodeType":"ElementaryTypeName","src":"12910:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4482,"mutability":"mutable","name":"amount","nameLocation":"12937:6:38","nodeType":"VariableDeclaration","scope":4491,"src":"12929:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4481,"name":"uint256","nodeType":"ElementaryTypeName","src":"12929:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4484,"mutability":"mutable","name":"interestRateMode","nameLocation":"12957:16:38","nodeType":"VariableDeclaration","scope":4491,"src":"12949:24:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4483,"name":"uint256","nodeType":"ElementaryTypeName","src":"12949:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4486,"mutability":"mutable","name":"referralCode","nameLocation":"12986:12:38","nodeType":"VariableDeclaration","scope":4491,"src":"12979:19:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4485,"name":"uint16","nodeType":"ElementaryTypeName","src":"12979:6:38","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":4488,"mutability":"mutable","name":"onBehalfOf","nameLocation":"13012:10:38","nodeType":"VariableDeclaration","scope":4491,"src":"13004:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4487,"name":"address","nodeType":"ElementaryTypeName","src":"13004:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12904:122:38"},"returnParameters":{"id":4490,"nodeType":"ParameterList","parameters":[],"src":"13035:0:38"},"scope":4860,"src":"12889:147:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4492,"nodeType":"StructuredDocumentation","src":"13040:873:38","text":" @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\n - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\n @param asset The address of the borrowed underlying asset previously borrowed\n @param amount The amount to repay\n - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\n @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\n @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\n user calling the function if he wants to reduce/remove his own debt, or the address of any other\n other borrower whose debt should be removed\n @return The final amount repaid"},"functionSelector":"573ade81","id":4505,"implemented":false,"kind":"function","modifiers":[],"name":"repay","nameLocation":"13925:5:38","nodeType":"FunctionDefinition","parameters":{"id":4501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4494,"mutability":"mutable","name":"asset","nameLocation":"13944:5:38","nodeType":"VariableDeclaration","scope":4505,"src":"13936:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4493,"name":"address","nodeType":"ElementaryTypeName","src":"13936:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4496,"mutability":"mutable","name":"amount","nameLocation":"13963:6:38","nodeType":"VariableDeclaration","scope":4505,"src":"13955:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4495,"name":"uint256","nodeType":"ElementaryTypeName","src":"13955:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4498,"mutability":"mutable","name":"interestRateMode","nameLocation":"13983:16:38","nodeType":"VariableDeclaration","scope":4505,"src":"13975:24:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4497,"name":"uint256","nodeType":"ElementaryTypeName","src":"13975:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4500,"mutability":"mutable","name":"onBehalfOf","nameLocation":"14013:10:38","nodeType":"VariableDeclaration","scope":4505,"src":"14005:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4499,"name":"address","nodeType":"ElementaryTypeName","src":"14005:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13930:97:38"},"returnParameters":{"id":4504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4503,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4505,"src":"14046:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4502,"name":"uint256","nodeType":"ElementaryTypeName","src":"14046:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14045:9:38"},"scope":4860,"src":"13916:139:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4506,"nodeType":"StructuredDocumentation","src":"14059:1085:38","text":" @notice Repay with transfer approval of asset to be repaid done via permit function\n see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\n @param asset The address of the borrowed underlying asset previously borrowed\n @param amount The amount to repay\n - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\n @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\n @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\n user calling the function if he wants to reduce/remove his own debt, or the address of any other\n other borrower whose debt should be removed\n @param deadline The deadline timestamp that the permit is valid\n @param permitV The V parameter of ERC712 permit sig\n @param permitR The R parameter of ERC712 permit sig\n @param permitS The S parameter of ERC712 permit sig\n @return The final amount repaid"},"functionSelector":"ee3e210b","id":4527,"implemented":false,"kind":"function","modifiers":[],"name":"repayWithPermit","nameLocation":"15156:15:38","nodeType":"FunctionDefinition","parameters":{"id":4523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4508,"mutability":"mutable","name":"asset","nameLocation":"15185:5:38","nodeType":"VariableDeclaration","scope":4527,"src":"15177:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4507,"name":"address","nodeType":"ElementaryTypeName","src":"15177:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4510,"mutability":"mutable","name":"amount","nameLocation":"15204:6:38","nodeType":"VariableDeclaration","scope":4527,"src":"15196:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4509,"name":"uint256","nodeType":"ElementaryTypeName","src":"15196:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4512,"mutability":"mutable","name":"interestRateMode","nameLocation":"15224:16:38","nodeType":"VariableDeclaration","scope":4527,"src":"15216:24:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4511,"name":"uint256","nodeType":"ElementaryTypeName","src":"15216:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4514,"mutability":"mutable","name":"onBehalfOf","nameLocation":"15254:10:38","nodeType":"VariableDeclaration","scope":4527,"src":"15246:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4513,"name":"address","nodeType":"ElementaryTypeName","src":"15246:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4516,"mutability":"mutable","name":"deadline","nameLocation":"15278:8:38","nodeType":"VariableDeclaration","scope":4527,"src":"15270:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4515,"name":"uint256","nodeType":"ElementaryTypeName","src":"15270:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4518,"mutability":"mutable","name":"permitV","nameLocation":"15298:7:38","nodeType":"VariableDeclaration","scope":4527,"src":"15292:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4517,"name":"uint8","nodeType":"ElementaryTypeName","src":"15292:5:38","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":4520,"mutability":"mutable","name":"permitR","nameLocation":"15319:7:38","nodeType":"VariableDeclaration","scope":4527,"src":"15311:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4519,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15311:7:38","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4522,"mutability":"mutable","name":"permitS","nameLocation":"15340:7:38","nodeType":"VariableDeclaration","scope":4527,"src":"15332:15:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4521,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15332:7:38","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"15171:180:38"},"returnParameters":{"id":4526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4525,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4527,"src":"15370:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4524,"name":"uint256","nodeType":"ElementaryTypeName","src":"15370:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15369:9:38"},"scope":4860,"src":"15147:232:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4528,"nodeType":"StructuredDocumentation","src":"15383:779:38","text":" @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\n equivalent debt tokens\n - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\n @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\n balance is not enough to cover the whole debt\n @param asset The address of the borrowed underlying asset previously borrowed\n @param amount The amount to repay\n - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\n @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\n @return The final amount repaid"},"functionSelector":"2dad97d4","id":4539,"implemented":false,"kind":"function","modifiers":[],"name":"repayWithATokens","nameLocation":"16174:16:38","nodeType":"FunctionDefinition","parameters":{"id":4535,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4530,"mutability":"mutable","name":"asset","nameLocation":"16204:5:38","nodeType":"VariableDeclaration","scope":4539,"src":"16196:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4529,"name":"address","nodeType":"ElementaryTypeName","src":"16196:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4532,"mutability":"mutable","name":"amount","nameLocation":"16223:6:38","nodeType":"VariableDeclaration","scope":4539,"src":"16215:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4531,"name":"uint256","nodeType":"ElementaryTypeName","src":"16215:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4534,"mutability":"mutable","name":"interestRateMode","nameLocation":"16243:16:38","nodeType":"VariableDeclaration","scope":4539,"src":"16235:24:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4533,"name":"uint256","nodeType":"ElementaryTypeName","src":"16235:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16190:73:38"},"returnParameters":{"id":4538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4537,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4539,"src":"16282:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4536,"name":"uint256","nodeType":"ElementaryTypeName","src":"16282:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16281:9:38"},"scope":4860,"src":"16165:126:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4540,"nodeType":"StructuredDocumentation","src":"16295:288:38","text":" @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\n @param asset The address of the underlying asset borrowed\n @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable"},"functionSelector":"94ba89a2","id":4547,"implemented":false,"kind":"function","modifiers":[],"name":"swapBorrowRateMode","nameLocation":"16595:18:38","nodeType":"FunctionDefinition","parameters":{"id":4545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4542,"mutability":"mutable","name":"asset","nameLocation":"16622:5:38","nodeType":"VariableDeclaration","scope":4547,"src":"16614:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4541,"name":"address","nodeType":"ElementaryTypeName","src":"16614:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4544,"mutability":"mutable","name":"interestRateMode","nameLocation":"16637:16:38","nodeType":"VariableDeclaration","scope":4547,"src":"16629:24:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4543,"name":"uint256","nodeType":"ElementaryTypeName","src":"16629:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16613:41:38"},"returnParameters":{"id":4546,"nodeType":"ParameterList","parameters":[],"src":"16663:0:38"},"scope":4860,"src":"16586:78:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4548,"nodeType":"StructuredDocumentation","src":"16668:553:38","text":" @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\n - Users can be rebalanced if the following conditions are satisfied:\n     1. Usage ratio is above 95%\n     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\n        much has been borrowed at a stable rate and suppliers are not earning enough\n @param asset The address of the underlying asset borrowed\n @param user The address of the user to be rebalanced"},"functionSelector":"cd112382","id":4555,"implemented":false,"kind":"function","modifiers":[],"name":"rebalanceStableBorrowRate","nameLocation":"17233:25:38","nodeType":"FunctionDefinition","parameters":{"id":4553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4550,"mutability":"mutable","name":"asset","nameLocation":"17267:5:38","nodeType":"VariableDeclaration","scope":4555,"src":"17259:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4549,"name":"address","nodeType":"ElementaryTypeName","src":"17259:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4552,"mutability":"mutable","name":"user","nameLocation":"17282:4:38","nodeType":"VariableDeclaration","scope":4555,"src":"17274:12:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4551,"name":"address","nodeType":"ElementaryTypeName","src":"17274:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17258:29:38"},"returnParameters":{"id":4554,"nodeType":"ParameterList","parameters":[],"src":"17296:0:38"},"scope":4860,"src":"17224:73:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4556,"nodeType":"StructuredDocumentation","src":"17301:260:38","text":" @notice Allows suppliers to enable/disable a specific supplied asset as collateral\n @param asset The address of the underlying asset supplied\n @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise"},"functionSelector":"5a3b74b9","id":4563,"implemented":false,"kind":"function","modifiers":[],"name":"setUserUseReserveAsCollateral","nameLocation":"17573:29:38","nodeType":"FunctionDefinition","parameters":{"id":4561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4558,"mutability":"mutable","name":"asset","nameLocation":"17611:5:38","nodeType":"VariableDeclaration","scope":4563,"src":"17603:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4557,"name":"address","nodeType":"ElementaryTypeName","src":"17603:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4560,"mutability":"mutable","name":"useAsCollateral","nameLocation":"17623:15:38","nodeType":"VariableDeclaration","scope":4563,"src":"17618:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4559,"name":"bool","nodeType":"ElementaryTypeName","src":"17618:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"17602:37:38"},"returnParameters":{"id":4562,"nodeType":"ParameterList","parameters":[],"src":"17648:0:38"},"scope":4860,"src":"17564:85:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4564,"nodeType":"StructuredDocumentation","src":"17653:860:38","text":" @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\n - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\n   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\n @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\n @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\n @param user The address of the borrower getting liquidated\n @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\n @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\n to receive the underlying collateral asset directly"},"functionSelector":"00a718a9","id":4577,"implemented":false,"kind":"function","modifiers":[],"name":"liquidationCall","nameLocation":"18525:15:38","nodeType":"FunctionDefinition","parameters":{"id":4575,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4566,"mutability":"mutable","name":"collateralAsset","nameLocation":"18554:15:38","nodeType":"VariableDeclaration","scope":4577,"src":"18546:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4565,"name":"address","nodeType":"ElementaryTypeName","src":"18546:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4568,"mutability":"mutable","name":"debtAsset","nameLocation":"18583:9:38","nodeType":"VariableDeclaration","scope":4577,"src":"18575:17:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4567,"name":"address","nodeType":"ElementaryTypeName","src":"18575:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4570,"mutability":"mutable","name":"user","nameLocation":"18606:4:38","nodeType":"VariableDeclaration","scope":4577,"src":"18598:12:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4569,"name":"address","nodeType":"ElementaryTypeName","src":"18598:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4572,"mutability":"mutable","name":"debtToCover","nameLocation":"18624:11:38","nodeType":"VariableDeclaration","scope":4577,"src":"18616:19:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4571,"name":"uint256","nodeType":"ElementaryTypeName","src":"18616:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4574,"mutability":"mutable","name":"receiveAToken","nameLocation":"18646:13:38","nodeType":"VariableDeclaration","scope":4577,"src":"18641:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4573,"name":"bool","nodeType":"ElementaryTypeName","src":"18641:4:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"18540:123:38"},"returnParameters":{"id":4576,"nodeType":"ParameterList","parameters":[],"src":"18672:0:38"},"scope":4860,"src":"18516:157:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4578,"nodeType":"StructuredDocumentation","src":"18677:1407:38","text":" @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\n as long as the amount taken plus a fee is returned.\n @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\n into consideration. For further details please visit https://docs.aave.com/developers/\n @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\n @param assets The addresses of the assets being flash-borrowed\n @param amounts The amounts of the assets being flash-borrowed\n @param interestRateModes Types of the debt to open if the flash loan is not returned:\n   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\n   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\n   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\n @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\n @param params Variadic packed params to pass to the receiver as extra information\n @param referralCode The code used to register the integrator originating the operation, for potential rewards.\n   0 if the action is executed directly by the user, without any middle-man"},"functionSelector":"ab9c4b5d","id":4598,"implemented":false,"kind":"function","modifiers":[],"name":"flashLoan","nameLocation":"20096:9:38","nodeType":"FunctionDefinition","parameters":{"id":4596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4580,"mutability":"mutable","name":"receiverAddress","nameLocation":"20119:15:38","nodeType":"VariableDeclaration","scope":4598,"src":"20111:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4579,"name":"address","nodeType":"ElementaryTypeName","src":"20111:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4583,"mutability":"mutable","name":"assets","nameLocation":"20159:6:38","nodeType":"VariableDeclaration","scope":4598,"src":"20140:25:38","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4581,"name":"address","nodeType":"ElementaryTypeName","src":"20140:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4582,"nodeType":"ArrayTypeName","src":"20140:9:38","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":4586,"mutability":"mutable","name":"amounts","nameLocation":"20190:7:38","nodeType":"VariableDeclaration","scope":4598,"src":"20171:26:38","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4584,"name":"uint256","nodeType":"ElementaryTypeName","src":"20171:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4585,"nodeType":"ArrayTypeName","src":"20171:9:38","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4589,"mutability":"mutable","name":"interestRateModes","nameLocation":"20222:17:38","nodeType":"VariableDeclaration","scope":4598,"src":"20203:36:38","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4587,"name":"uint256","nodeType":"ElementaryTypeName","src":"20203:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4588,"nodeType":"ArrayTypeName","src":"20203:9:38","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4591,"mutability":"mutable","name":"onBehalfOf","nameLocation":"20253:10:38","nodeType":"VariableDeclaration","scope":4598,"src":"20245:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4590,"name":"address","nodeType":"ElementaryTypeName","src":"20245:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4593,"mutability":"mutable","name":"params","nameLocation":"20284:6:38","nodeType":"VariableDeclaration","scope":4598,"src":"20269:21:38","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4592,"name":"bytes","nodeType":"ElementaryTypeName","src":"20269:5:38","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4595,"mutability":"mutable","name":"referralCode","nameLocation":"20303:12:38","nodeType":"VariableDeclaration","scope":4598,"src":"20296:19:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4594,"name":"uint16","nodeType":"ElementaryTypeName","src":"20296:6:38","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"20105:214:38"},"returnParameters":{"id":4597,"nodeType":"ParameterList","parameters":[],"src":"20328:0:38"},"scope":4860,"src":"20087:242:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4599,"nodeType":"StructuredDocumentation","src":"20333:902:38","text":" @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\n as long as the amount taken plus a fee is returned.\n @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\n into consideration. For further details please visit https://docs.aave.com/developers/\n @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\n @param asset The address of the asset being flash-borrowed\n @param amount The amount of the asset being flash-borrowed\n @param params Variadic packed params to pass to the receiver as extra information\n @param referralCode The code used to register the integrator originating the operation, for potential rewards.\n   0 if the action is executed directly by the user, without any middle-man"},"functionSelector":"42b0b77c","id":4612,"implemented":false,"kind":"function","modifiers":[],"name":"flashLoanSimple","nameLocation":"21247:15:38","nodeType":"FunctionDefinition","parameters":{"id":4610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4601,"mutability":"mutable","name":"receiverAddress","nameLocation":"21276:15:38","nodeType":"VariableDeclaration","scope":4612,"src":"21268:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4600,"name":"address","nodeType":"ElementaryTypeName","src":"21268:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4603,"mutability":"mutable","name":"asset","nameLocation":"21305:5:38","nodeType":"VariableDeclaration","scope":4612,"src":"21297:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4602,"name":"address","nodeType":"ElementaryTypeName","src":"21297:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4605,"mutability":"mutable","name":"amount","nameLocation":"21324:6:38","nodeType":"VariableDeclaration","scope":4612,"src":"21316:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4604,"name":"uint256","nodeType":"ElementaryTypeName","src":"21316:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4607,"mutability":"mutable","name":"params","nameLocation":"21351:6:38","nodeType":"VariableDeclaration","scope":4612,"src":"21336:21:38","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4606,"name":"bytes","nodeType":"ElementaryTypeName","src":"21336:5:38","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":4609,"mutability":"mutable","name":"referralCode","nameLocation":"21370:12:38","nodeType":"VariableDeclaration","scope":4612,"src":"21363:19:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4608,"name":"uint16","nodeType":"ElementaryTypeName","src":"21363:6:38","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"21262:124:38"},"returnParameters":{"id":4611,"nodeType":"ParameterList","parameters":[],"src":"21395:0:38"},"scope":4860,"src":"21238:158:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4613,"nodeType":"StructuredDocumentation","src":"21400:630:38","text":" @notice Returns the user account data across all the reserves\n @param user The address of the user\n @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\n @return totalDebtBase The total debt of the user in the base currency used by the price feed\n @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\n @return currentLiquidationThreshold The liquidation threshold of the user\n @return ltv The loan to value of The user\n @return healthFactor The current health factor of the user"},"functionSelector":"bf92857c","id":4630,"implemented":false,"kind":"function","modifiers":[],"name":"getUserAccountData","nameLocation":"22042:18:38","nodeType":"FunctionDefinition","parameters":{"id":4616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4615,"mutability":"mutable","name":"user","nameLocation":"22074:4:38","nodeType":"VariableDeclaration","scope":4630,"src":"22066:12:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4614,"name":"address","nodeType":"ElementaryTypeName","src":"22066:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"22060:22:38"},"returnParameters":{"id":4629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4618,"mutability":"mutable","name":"totalCollateralBase","nameLocation":"22133:19:38","nodeType":"VariableDeclaration","scope":4630,"src":"22125:27:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4617,"name":"uint256","nodeType":"ElementaryTypeName","src":"22125:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4620,"mutability":"mutable","name":"totalDebtBase","nameLocation":"22168:13:38","nodeType":"VariableDeclaration","scope":4630,"src":"22160:21:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4619,"name":"uint256","nodeType":"ElementaryTypeName","src":"22160:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4622,"mutability":"mutable","name":"availableBorrowsBase","nameLocation":"22197:20:38","nodeType":"VariableDeclaration","scope":4630,"src":"22189:28:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4621,"name":"uint256","nodeType":"ElementaryTypeName","src":"22189:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4624,"mutability":"mutable","name":"currentLiquidationThreshold","nameLocation":"22233:27:38","nodeType":"VariableDeclaration","scope":4630,"src":"22225:35:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4623,"name":"uint256","nodeType":"ElementaryTypeName","src":"22225:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4626,"mutability":"mutable","name":"ltv","nameLocation":"22276:3:38","nodeType":"VariableDeclaration","scope":4630,"src":"22268:11:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4625,"name":"uint256","nodeType":"ElementaryTypeName","src":"22268:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4628,"mutability":"mutable","name":"healthFactor","nameLocation":"22295:12:38","nodeType":"VariableDeclaration","scope":4630,"src":"22287:20:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4627,"name":"uint256","nodeType":"ElementaryTypeName","src":"22287:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22117:196:38"},"scope":4860,"src":"22033:281:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4631,"nodeType":"StructuredDocumentation","src":"22318:645:38","text":" @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\n interest rate strategy\n @dev Only callable by the PoolConfigurator contract\n @param asset The address of the underlying asset of the reserve\n @param aTokenAddress The address of the aToken that will be assigned to the reserve\n @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\n @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\n @param interestRateStrategyAddress The address of the interest rate strategy contract"},"functionSelector":"7a708e92","id":4644,"implemented":false,"kind":"function","modifiers":[],"name":"initReserve","nameLocation":"22975:11:38","nodeType":"FunctionDefinition","parameters":{"id":4642,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4633,"mutability":"mutable","name":"asset","nameLocation":"23000:5:38","nodeType":"VariableDeclaration","scope":4644,"src":"22992:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4632,"name":"address","nodeType":"ElementaryTypeName","src":"22992:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4635,"mutability":"mutable","name":"aTokenAddress","nameLocation":"23019:13:38","nodeType":"VariableDeclaration","scope":4644,"src":"23011:21:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4634,"name":"address","nodeType":"ElementaryTypeName","src":"23011:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4637,"mutability":"mutable","name":"stableDebtAddress","nameLocation":"23046:17:38","nodeType":"VariableDeclaration","scope":4644,"src":"23038:25:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4636,"name":"address","nodeType":"ElementaryTypeName","src":"23038:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4639,"mutability":"mutable","name":"variableDebtAddress","nameLocation":"23077:19:38","nodeType":"VariableDeclaration","scope":4644,"src":"23069:27:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4638,"name":"address","nodeType":"ElementaryTypeName","src":"23069:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4641,"mutability":"mutable","name":"interestRateStrategyAddress","nameLocation":"23110:27:38","nodeType":"VariableDeclaration","scope":4644,"src":"23102:35:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4640,"name":"address","nodeType":"ElementaryTypeName","src":"23102:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"22986:155:38"},"returnParameters":{"id":4643,"nodeType":"ParameterList","parameters":[],"src":"23150:0:38"},"scope":4860,"src":"22966:185:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4645,"nodeType":"StructuredDocumentation","src":"23155:163:38","text":" @notice Drop a reserve\n @dev Only callable by the PoolConfigurator contract\n @param asset The address of the underlying asset of the reserve"},"functionSelector":"63c9b860","id":4650,"implemented":false,"kind":"function","modifiers":[],"name":"dropReserve","nameLocation":"23330:11:38","nodeType":"FunctionDefinition","parameters":{"id":4648,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4647,"mutability":"mutable","name":"asset","nameLocation":"23350:5:38","nodeType":"VariableDeclaration","scope":4650,"src":"23342:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4646,"name":"address","nodeType":"ElementaryTypeName","src":"23342:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"23341:15:38"},"returnParameters":{"id":4649,"nodeType":"ParameterList","parameters":[],"src":"23365:0:38"},"scope":4860,"src":"23321:45:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4651,"nodeType":"StructuredDocumentation","src":"23370:290:38","text":" @notice Updates the address of the interest rate strategy contract\n @dev Only callable by the PoolConfigurator contract\n @param asset The address of the underlying asset of the reserve\n @param rateStrategyAddress The address of the interest rate strategy contract"},"functionSelector":"1d2118f9","id":4658,"implemented":false,"kind":"function","modifiers":[],"name":"setReserveInterestRateStrategyAddress","nameLocation":"23672:37:38","nodeType":"FunctionDefinition","parameters":{"id":4656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4653,"mutability":"mutable","name":"asset","nameLocation":"23723:5:38","nodeType":"VariableDeclaration","scope":4658,"src":"23715:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4652,"name":"address","nodeType":"ElementaryTypeName","src":"23715:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4655,"mutability":"mutable","name":"rateStrategyAddress","nameLocation":"23742:19:38","nodeType":"VariableDeclaration","scope":4658,"src":"23734:27:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4654,"name":"address","nodeType":"ElementaryTypeName","src":"23734:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"23709:56:38"},"returnParameters":{"id":4657,"nodeType":"ParameterList","parameters":[],"src":"23774:0:38"},"scope":4860,"src":"23663:112:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4659,"nodeType":"StructuredDocumentation","src":"23779:259:38","text":" @notice Sets the configuration bitmap of the reserve as a whole\n @dev Only callable by the PoolConfigurator contract\n @param asset The address of the underlying asset of the reserve\n @param configuration The new configuration bitmap"},"functionSelector":"f51e435b","id":4667,"implemented":false,"kind":"function","modifiers":[],"name":"setConfiguration","nameLocation":"24050:16:38","nodeType":"FunctionDefinition","parameters":{"id":4665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4661,"mutability":"mutable","name":"asset","nameLocation":"24080:5:38","nodeType":"VariableDeclaration","scope":4667,"src":"24072:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4660,"name":"address","nodeType":"ElementaryTypeName","src":"24072:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4664,"mutability":"mutable","name":"configuration","nameLocation":"24134:13:38","nodeType":"VariableDeclaration","scope":4667,"src":"24091:56:38","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_calldata_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":4663,"nodeType":"UserDefinedTypeName","pathNode":{"id":4662,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"24091:33:38"},"referencedDeclaration":21318,"src":"24091:33:38","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"24066:85:38"},"returnParameters":{"id":4666,"nodeType":"ParameterList","parameters":[],"src":"24160:0:38"},"scope":4860,"src":"24041:120:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4668,"nodeType":"StructuredDocumentation","src":"24165:178:38","text":" @notice Returns the configuration of the reserve\n @param asset The address of the underlying asset of the reserve\n @return The configuration of the reserve"},"functionSelector":"c44b11f7","id":4676,"implemented":false,"kind":"function","modifiers":[],"name":"getConfiguration","nameLocation":"24355:16:38","nodeType":"FunctionDefinition","parameters":{"id":4671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4670,"mutability":"mutable","name":"asset","nameLocation":"24385:5:38","nodeType":"VariableDeclaration","scope":4676,"src":"24377:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4669,"name":"address","nodeType":"ElementaryTypeName","src":"24377:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"24371:23:38"},"returnParameters":{"id":4675,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4674,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4676,"src":"24418:40:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":4673,"nodeType":"UserDefinedTypeName","pathNode":{"id":4672,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"24418:33:38"},"referencedDeclaration":21318,"src":"24418:33:38","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"24417:42:38"},"scope":4860,"src":"24346:114:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4677,"nodeType":"StructuredDocumentation","src":"24464:161:38","text":" @notice Returns the configuration of the user across all the reserves\n @param user The user address\n @return The configuration of the user"},"functionSelector":"4417a583","id":4685,"implemented":false,"kind":"function","modifiers":[],"name":"getUserConfiguration","nameLocation":"24637:20:38","nodeType":"FunctionDefinition","parameters":{"id":4680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4679,"mutability":"mutable","name":"user","nameLocation":"24671:4:38","nodeType":"VariableDeclaration","scope":4685,"src":"24663:12:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4678,"name":"address","nodeType":"ElementaryTypeName","src":"24663:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"24657:22:38"},"returnParameters":{"id":4684,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4683,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4685,"src":"24703:37:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":4682,"nodeType":"UserDefinedTypeName","pathNode":{"id":4681,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"24703:30:38"},"referencedDeclaration":21322,"src":"24703:30:38","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"src":"24702:39:38"},"scope":4860,"src":"24628:114:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4686,"nodeType":"StructuredDocumentation","src":"24746:181:38","text":" @notice Returns the normalized income of the reserve\n @param asset The address of the underlying asset of the reserve\n @return The reserve's normalized income"},"functionSelector":"d15e0053","id":4693,"implemented":false,"kind":"function","modifiers":[],"name":"getReserveNormalizedIncome","nameLocation":"24939:26:38","nodeType":"FunctionDefinition","parameters":{"id":4689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4688,"mutability":"mutable","name":"asset","nameLocation":"24974:5:38","nodeType":"VariableDeclaration","scope":4693,"src":"24966:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4687,"name":"address","nodeType":"ElementaryTypeName","src":"24966:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"24965:15:38"},"returnParameters":{"id":4692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4691,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4693,"src":"25004:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4690,"name":"uint256","nodeType":"ElementaryTypeName","src":"25004:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25003:9:38"},"scope":4860,"src":"24930:83:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4694,"nodeType":"StructuredDocumentation","src":"25017:805:38","text":" @notice Returns the normalized variable debt per unit of asset\n @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\n \"dynamic\" variable index based on time, current stored index and virtual rate at the current\n moment (approx. a borrower would get if opening a position). This means that is always used in\n combination with variable debt supply/balances.\n If using this function externally, consider that is possible to have an increasing normalized\n variable debt that is not equivalent to how the variable debt index would be updated in storage\n (e.g. only updates with non-zero variable debt supply)\n @param asset The address of the underlying asset of the reserve\n @return The reserve normalized variable debt"},"functionSelector":"386497fd","id":4701,"implemented":false,"kind":"function","modifiers":[],"name":"getReserveNormalizedVariableDebt","nameLocation":"25834:32:38","nodeType":"FunctionDefinition","parameters":{"id":4697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4696,"mutability":"mutable","name":"asset","nameLocation":"25875:5:38","nodeType":"VariableDeclaration","scope":4701,"src":"25867:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4695,"name":"address","nodeType":"ElementaryTypeName","src":"25867:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"25866:15:38"},"returnParameters":{"id":4700,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4699,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4701,"src":"25905:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4698,"name":"uint256","nodeType":"ElementaryTypeName","src":"25905:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25904:9:38"},"scope":4860,"src":"25825:89:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4702,"nodeType":"StructuredDocumentation","src":"25918:203:38","text":" @notice Returns the state and configuration of the reserve\n @param asset The address of the underlying asset of the reserve\n @return The state and configuration data of the reserve"},"functionSelector":"35ea6a75","id":4710,"implemented":false,"kind":"function","modifiers":[],"name":"getReserveData","nameLocation":"26133:14:38","nodeType":"FunctionDefinition","parameters":{"id":4705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4704,"mutability":"mutable","name":"asset","nameLocation":"26156:5:38","nodeType":"VariableDeclaration","scope":4710,"src":"26148:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4703,"name":"address","nodeType":"ElementaryTypeName","src":"26148:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"26147:15:38"},"returnParameters":{"id":4709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4708,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4710,"src":"26186:28:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":4707,"nodeType":"UserDefinedTypeName","pathNode":{"id":4706,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"26186:21:38"},"referencedDeclaration":21315,"src":"26186:21:38","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"src":"26185:30:38"},"scope":4860,"src":"26124:92:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4711,"nodeType":"StructuredDocumentation","src":"26220:537:38","text":" @notice Validates and finalizes an aToken transfer\n @dev Only callable by the overlying aToken of the `asset`\n @param asset The address of the underlying asset of the aToken\n @param from The user from which the aTokens are transferred\n @param to The user receiving the aTokens\n @param amount The amount being transferred/withdrawn\n @param balanceFromBefore The aToken balance of the `from` user before the transfer\n @param balanceToBefore The aToken balance of the `to` user before the transfer"},"functionSelector":"d5ed3933","id":4726,"implemented":false,"kind":"function","modifiers":[],"name":"finalizeTransfer","nameLocation":"26769:16:38","nodeType":"FunctionDefinition","parameters":{"id":4724,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4713,"mutability":"mutable","name":"asset","nameLocation":"26799:5:38","nodeType":"VariableDeclaration","scope":4726,"src":"26791:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4712,"name":"address","nodeType":"ElementaryTypeName","src":"26791:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4715,"mutability":"mutable","name":"from","nameLocation":"26818:4:38","nodeType":"VariableDeclaration","scope":4726,"src":"26810:12:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4714,"name":"address","nodeType":"ElementaryTypeName","src":"26810:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4717,"mutability":"mutable","name":"to","nameLocation":"26836:2:38","nodeType":"VariableDeclaration","scope":4726,"src":"26828:10:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4716,"name":"address","nodeType":"ElementaryTypeName","src":"26828:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4719,"mutability":"mutable","name":"amount","nameLocation":"26852:6:38","nodeType":"VariableDeclaration","scope":4726,"src":"26844:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4718,"name":"uint256","nodeType":"ElementaryTypeName","src":"26844:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4721,"mutability":"mutable","name":"balanceFromBefore","nameLocation":"26872:17:38","nodeType":"VariableDeclaration","scope":4726,"src":"26864:25:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4720,"name":"uint256","nodeType":"ElementaryTypeName","src":"26864:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4723,"mutability":"mutable","name":"balanceToBefore","nameLocation":"26903:15:38","nodeType":"VariableDeclaration","scope":4726,"src":"26895:23:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4722,"name":"uint256","nodeType":"ElementaryTypeName","src":"26895:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26785:137:38"},"returnParameters":{"id":4725,"nodeType":"ParameterList","parameters":[],"src":"26931:0:38"},"scope":4860,"src":"26760:172:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4727,"nodeType":"StructuredDocumentation","src":"26936:223:38","text":" @notice Returns the list of the underlying assets of all the initialized reserves\n @dev It does not include dropped reserves\n @return The addresses of the underlying assets of the initialized reserves"},"functionSelector":"d1946dbc","id":4733,"implemented":false,"kind":"function","modifiers":[],"name":"getReservesList","nameLocation":"27171:15:38","nodeType":"FunctionDefinition","parameters":{"id":4728,"nodeType":"ParameterList","parameters":[],"src":"27186:2:38"},"returnParameters":{"id":4732,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4731,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4733,"src":"27212:16:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4729,"name":"address","nodeType":"ElementaryTypeName","src":"27212:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4730,"nodeType":"ArrayTypeName","src":"27212:9:38","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"27211:18:38"},"scope":4860,"src":"27162:68:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4734,"nodeType":"StructuredDocumentation","src":"27234:285:38","text":" @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\n @param id The id of the reserve as stored in the DataTypes.ReserveData struct\n @return The address of the reserve associated with id"},"functionSelector":"52751797","id":4741,"implemented":false,"kind":"function","modifiers":[],"name":"getReserveAddressById","nameLocation":"27531:21:38","nodeType":"FunctionDefinition","parameters":{"id":4737,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4736,"mutability":"mutable","name":"id","nameLocation":"27560:2:38","nodeType":"VariableDeclaration","scope":4741,"src":"27553:9:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4735,"name":"uint16","nodeType":"ElementaryTypeName","src":"27553:6:38","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"27552:11:38"},"returnParameters":{"id":4740,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4739,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4741,"src":"27587:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4738,"name":"address","nodeType":"ElementaryTypeName","src":"27587:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"27586:9:38"},"scope":4860,"src":"27522:74:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4742,"nodeType":"StructuredDocumentation","src":"27600:137:38","text":" @notice Returns the PoolAddressesProvider connected to this contract\n @return The address of the PoolAddressesProvider"},"functionSelector":"0542975c","id":4748,"implemented":false,"kind":"function","modifiers":[],"name":"ADDRESSES_PROVIDER","nameLocation":"27749:18:38","nodeType":"FunctionDefinition","parameters":{"id":4743,"nodeType":"ParameterList","parameters":[],"src":"27767:2:38"},"returnParameters":{"id":4747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4746,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4748,"src":"27793:22:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":4745,"nodeType":"UserDefinedTypeName","pathNode":{"id":4744,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"27793:22:38"},"referencedDeclaration":5069,"src":"27793:22:38","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"27792:24:38"},"scope":4860,"src":"27740:77:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4749,"nodeType":"StructuredDocumentation","src":"27821:147:38","text":" @notice Updates the protocol fee on the bridging\n @param bridgeProtocolFee The part of the premium sent to the protocol treasury"},"functionSelector":"3036b439","id":4754,"implemented":false,"kind":"function","modifiers":[],"name":"updateBridgeProtocolFee","nameLocation":"27980:23:38","nodeType":"FunctionDefinition","parameters":{"id":4752,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4751,"mutability":"mutable","name":"bridgeProtocolFee","nameLocation":"28012:17:38","nodeType":"VariableDeclaration","scope":4754,"src":"28004:25:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4750,"name":"uint256","nodeType":"ElementaryTypeName","src":"28004:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"28003:27:38"},"returnParameters":{"id":4753,"nodeType":"ParameterList","parameters":[],"src":"28039:0:38"},"scope":4860,"src":"27971:69:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4755,"nodeType":"StructuredDocumentation","src":"28044:650:38","text":" @notice Updates flash loan premiums. Flash loan premium consists of two parts:\n - A part is sent to aToken holders as extra, one time accumulated interest\n - A part is collected by the protocol treasury\n @dev The total premium is calculated on the total borrowed amount\n @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\n @dev Only callable by the PoolConfigurator contract\n @param flashLoanPremiumTotal The total premium, expressed in bps\n @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps"},"functionSelector":"bcb6e522","id":4762,"implemented":false,"kind":"function","modifiers":[],"name":"updateFlashloanPremiums","nameLocation":"28706:23:38","nodeType":"FunctionDefinition","parameters":{"id":4760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4757,"mutability":"mutable","name":"flashLoanPremiumTotal","nameLocation":"28743:21:38","nodeType":"VariableDeclaration","scope":4762,"src":"28735:29:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":4756,"name":"uint128","nodeType":"ElementaryTypeName","src":"28735:7:38","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":4759,"mutability":"mutable","name":"flashLoanPremiumToProtocol","nameLocation":"28778:26:38","nodeType":"VariableDeclaration","scope":4762,"src":"28770:34:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":4758,"name":"uint128","nodeType":"ElementaryTypeName","src":"28770:7:38","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"28729:79:38"},"returnParameters":{"id":4761,"nodeType":"ParameterList","parameters":[],"src":"28817:0:38"},"scope":4860,"src":"28697:121:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4763,"nodeType":"StructuredDocumentation","src":"28822:331:38","text":" @notice Configures a new category for the eMode.\n @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\n The category 0 is reserved as it's the default for volatile assets\n @param id The id of the category\n @param config The configuration of the category"},"functionSelector":"d579ea7d","id":4771,"implemented":false,"kind":"function","modifiers":[],"name":"configureEModeCategory","nameLocation":"29165:22:38","nodeType":"FunctionDefinition","parameters":{"id":4769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4765,"mutability":"mutable","name":"id","nameLocation":"29194:2:38","nodeType":"VariableDeclaration","scope":4771,"src":"29188:8:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4764,"name":"uint8","nodeType":"ElementaryTypeName","src":"29188:5:38","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":4768,"mutability":"mutable","name":"config","nameLocation":"29229:6:38","nodeType":"VariableDeclaration","scope":4771,"src":"29198:37:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_memory_ptr","typeString":"struct DataTypes.EModeCategory"},"typeName":{"id":4767,"nodeType":"UserDefinedTypeName","pathNode":{"id":4766,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":21333,"src":"29198:23:38"},"referencedDeclaration":21333,"src":"29198:23:38","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory"}},"visibility":"internal"}],"src":"29187:49:38"},"returnParameters":{"id":4770,"nodeType":"ParameterList","parameters":[],"src":"29245:0:38"},"scope":4860,"src":"29156:90:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4772,"nodeType":"StructuredDocumentation","src":"29250:150:38","text":" @notice Returns the data of an eMode category\n @param id The id of the category\n @return The configuration data of the category"},"functionSelector":"6c6f6ae1","id":4780,"implemented":false,"kind":"function","modifiers":[],"name":"getEModeCategoryData","nameLocation":"29412:20:38","nodeType":"FunctionDefinition","parameters":{"id":4775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4774,"mutability":"mutable","name":"id","nameLocation":"29439:2:38","nodeType":"VariableDeclaration","scope":4780,"src":"29433:8:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4773,"name":"uint8","nodeType":"ElementaryTypeName","src":"29433:5:38","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"29432:10:38"},"returnParameters":{"id":4779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4778,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4780,"src":"29466:30:38","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_memory_ptr","typeString":"struct DataTypes.EModeCategory"},"typeName":{"id":4777,"nodeType":"UserDefinedTypeName","pathNode":{"id":4776,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":21333,"src":"29466:23:38"},"referencedDeclaration":21333,"src":"29466:23:38","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory"}},"visibility":"internal"}],"src":"29465:32:38"},"scope":4860,"src":"29403:95:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4781,"nodeType":"StructuredDocumentation","src":"29502:111:38","text":" @notice Allows a user to use the protocol in eMode\n @param categoryId The id of the category"},"functionSelector":"28530a47","id":4786,"implemented":false,"kind":"function","modifiers":[],"name":"setUserEMode","nameLocation":"29625:12:38","nodeType":"FunctionDefinition","parameters":{"id":4784,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4783,"mutability":"mutable","name":"categoryId","nameLocation":"29644:10:38","nodeType":"VariableDeclaration","scope":4786,"src":"29638:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":4782,"name":"uint8","nodeType":"ElementaryTypeName","src":"29638:5:38","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"29637:18:38"},"returnParameters":{"id":4785,"nodeType":"ParameterList","parameters":[],"src":"29664:0:38"},"scope":4860,"src":"29616:49:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4787,"nodeType":"StructuredDocumentation","src":"29669:125:38","text":" @notice Returns the eMode the user is using\n @param user The address of the user\n @return The eMode id"},"functionSelector":"eddf1b79","id":4794,"implemented":false,"kind":"function","modifiers":[],"name":"getUserEMode","nameLocation":"29806:12:38","nodeType":"FunctionDefinition","parameters":{"id":4790,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4789,"mutability":"mutable","name":"user","nameLocation":"29827:4:38","nodeType":"VariableDeclaration","scope":4794,"src":"29819:12:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4788,"name":"address","nodeType":"ElementaryTypeName","src":"29819:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"29818:14:38"},"returnParameters":{"id":4793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4792,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4794,"src":"29856:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4791,"name":"uint256","nodeType":"ElementaryTypeName","src":"29856:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29855:9:38"},"scope":4860,"src":"29797:68:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4795,"nodeType":"StructuredDocumentation","src":"29869:236:38","text":" @notice Resets the isolation mode total debt of the given asset to zero\n @dev It requires the given asset has zero debt ceiling\n @param asset The address of the underlying asset to reset the isolationModeTotalDebt"},"functionSelector":"e43e88a1","id":4800,"implemented":false,"kind":"function","modifiers":[],"name":"resetIsolationModeTotalDebt","nameLocation":"30117:27:38","nodeType":"FunctionDefinition","parameters":{"id":4798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4797,"mutability":"mutable","name":"asset","nameLocation":"30153:5:38","nodeType":"VariableDeclaration","scope":4800,"src":"30145:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4796,"name":"address","nodeType":"ElementaryTypeName","src":"30145:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30144:15:38"},"returnParameters":{"id":4799,"nodeType":"ParameterList","parameters":[],"src":"30168:0:38"},"scope":4860,"src":"30108:61:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4801,"nodeType":"StructuredDocumentation","src":"30173:191:38","text":" @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\n @return The percentage of available liquidity to borrow, expressed in bps"},"functionSelector":"e82fec2f","id":4806,"implemented":false,"kind":"function","modifiers":[],"name":"MAX_STABLE_RATE_BORROW_SIZE_PERCENT","nameLocation":"30376:35:38","nodeType":"FunctionDefinition","parameters":{"id":4802,"nodeType":"ParameterList","parameters":[],"src":"30411:2:38"},"returnParameters":{"id":4805,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4804,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4806,"src":"30437:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4803,"name":"uint256","nodeType":"ElementaryTypeName","src":"30437:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30436:9:38"},"scope":4860,"src":"30367:79:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4807,"nodeType":"StructuredDocumentation","src":"30450:100:38","text":" @notice Returns the total fee on flash loans\n @return The total fee on flashloans"},"functionSelector":"074b2e43","id":4812,"implemented":false,"kind":"function","modifiers":[],"name":"FLASHLOAN_PREMIUM_TOTAL","nameLocation":"30562:23:38","nodeType":"FunctionDefinition","parameters":{"id":4808,"nodeType":"ParameterList","parameters":[],"src":"30585:2:38"},"returnParameters":{"id":4811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4810,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4812,"src":"30611:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":4809,"name":"uint128","nodeType":"ElementaryTypeName","src":"30611:7:38","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"30610:9:38"},"scope":4860,"src":"30553:67:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4813,"nodeType":"StructuredDocumentation","src":"30624:133:38","text":" @notice Returns the part of the bridge fees sent to protocol\n @return The bridge fee sent to the protocol treasury"},"functionSelector":"272d9072","id":4818,"implemented":false,"kind":"function","modifiers":[],"name":"BRIDGE_PROTOCOL_FEE","nameLocation":"30769:19:38","nodeType":"FunctionDefinition","parameters":{"id":4814,"nodeType":"ParameterList","parameters":[],"src":"30788:2:38"},"returnParameters":{"id":4817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4816,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4818,"src":"30814:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4815,"name":"uint256","nodeType":"ElementaryTypeName","src":"30814:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30813:9:38"},"scope":4860,"src":"30760:63:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4819,"nodeType":"StructuredDocumentation","src":"30827:139:38","text":" @notice Returns the part of the flashloan fees sent to protocol\n @return The flashloan fee sent to the protocol treasury"},"functionSelector":"6a99c036","id":4824,"implemented":false,"kind":"function","modifiers":[],"name":"FLASHLOAN_PREMIUM_TO_PROTOCOL","nameLocation":"30978:29:38","nodeType":"FunctionDefinition","parameters":{"id":4820,"nodeType":"ParameterList","parameters":[],"src":"31007:2:38"},"returnParameters":{"id":4823,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4822,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4824,"src":"31033:7:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":4821,"name":"uint128","nodeType":"ElementaryTypeName","src":"31033:7:38","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"31032:9:38"},"scope":4860,"src":"30969:73:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4825,"nodeType":"StructuredDocumentation","src":"31046:151:38","text":" @notice Returns the maximum number of reserves supported to be listed in this Pool\n @return The maximum number of reserves supported"},"functionSelector":"f8119d51","id":4830,"implemented":false,"kind":"function","modifiers":[],"name":"MAX_NUMBER_RESERVES","nameLocation":"31209:19:38","nodeType":"FunctionDefinition","parameters":{"id":4826,"nodeType":"ParameterList","parameters":[],"src":"31228:2:38"},"returnParameters":{"id":4829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4828,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4830,"src":"31254:6:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4827,"name":"uint16","nodeType":"ElementaryTypeName","src":"31254:6:38","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"31253:8:38"},"scope":4860,"src":"31200:62:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4831,"nodeType":"StructuredDocumentation","src":"31266:196:38","text":" @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\n @param assets The list of reserves for which the minting needs to be executed"},"functionSelector":"9cd19996","id":4837,"implemented":false,"kind":"function","modifiers":[],"name":"mintToTreasury","nameLocation":"31474:14:38","nodeType":"FunctionDefinition","parameters":{"id":4835,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4834,"mutability":"mutable","name":"assets","nameLocation":"31508:6:38","nodeType":"VariableDeclaration","scope":4837,"src":"31489:25:38","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4832,"name":"address","nodeType":"ElementaryTypeName","src":"31489:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4833,"nodeType":"ArrayTypeName","src":"31489:9:38","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"31488:27:38"},"returnParameters":{"id":4836,"nodeType":"ParameterList","parameters":[],"src":"31524:0:38"},"scope":4860,"src":"31465:60:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4838,"nodeType":"StructuredDocumentation","src":"31529:211:38","text":" @notice Rescue and transfer tokens locked in this contract\n @param token The address of the token\n @param to The address of the recipient\n @param amount The amount of token to transfer"},"functionSelector":"cea9d26f","id":4847,"implemented":false,"kind":"function","modifiers":[],"name":"rescueTokens","nameLocation":"31752:12:38","nodeType":"FunctionDefinition","parameters":{"id":4845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4840,"mutability":"mutable","name":"token","nameLocation":"31773:5:38","nodeType":"VariableDeclaration","scope":4847,"src":"31765:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4839,"name":"address","nodeType":"ElementaryTypeName","src":"31765:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4842,"mutability":"mutable","name":"to","nameLocation":"31788:2:38","nodeType":"VariableDeclaration","scope":4847,"src":"31780:10:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4841,"name":"address","nodeType":"ElementaryTypeName","src":"31780:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4844,"mutability":"mutable","name":"amount","nameLocation":"31800:6:38","nodeType":"VariableDeclaration","scope":4847,"src":"31792:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4843,"name":"uint256","nodeType":"ElementaryTypeName","src":"31792:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31764:43:38"},"returnParameters":{"id":4846,"nodeType":"ParameterList","parameters":[],"src":"31816:0:38"},"scope":4860,"src":"31743:74:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4848,"nodeType":"StructuredDocumentation","src":"31821:768:38","text":" @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\n - E.g. User supplies 100 USDC and gets in return 100 aUSDC\n @dev Deprecated: Use the `supply` function instead\n @param asset The address of the underlying asset to supply\n @param amount The amount to be supplied\n @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\n   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\n   is a different wallet\n @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n   0 if the action is executed directly by the user, without any middle-man"},"functionSelector":"e8eda9df","id":4859,"implemented":false,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"32601:7:38","nodeType":"FunctionDefinition","parameters":{"id":4857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4850,"mutability":"mutable","name":"asset","nameLocation":"32617:5:38","nodeType":"VariableDeclaration","scope":4859,"src":"32609:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4849,"name":"address","nodeType":"ElementaryTypeName","src":"32609:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4852,"mutability":"mutable","name":"amount","nameLocation":"32632:6:38","nodeType":"VariableDeclaration","scope":4859,"src":"32624:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4851,"name":"uint256","nodeType":"ElementaryTypeName","src":"32624:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4854,"mutability":"mutable","name":"onBehalfOf","nameLocation":"32648:10:38","nodeType":"VariableDeclaration","scope":4859,"src":"32640:18:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4853,"name":"address","nodeType":"ElementaryTypeName","src":"32640:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4856,"mutability":"mutable","name":"referralCode","nameLocation":"32667:12:38","nodeType":"VariableDeclaration","scope":4859,"src":"32660:19:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":4855,"name":"uint16","nodeType":"ElementaryTypeName","src":"32660:6:38","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"32608:72:38"},"returnParameters":{"id":4858,"nodeType":"ParameterList","parameters":[],"src":"32689:0:38"},"scope":4860,"src":"32592:98:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":4861,"src":"298:32394:38","usedErrors":[]}],"src":"37:32656:38"},"id":38},"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","exportedSymbols":{"IPoolAddressesProvider":[5069]},"id":5070,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":4862,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:39"},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolAddressesProvider","contractDependencies":[],"contractKind":"interface","documentation":{"id":4863,"nodeType":"StructuredDocumentation","src":"62:126:39","text":" @title IPoolAddressesProvider\n @author Aave\n @notice Defines the basic interface for a Pool Addresses Provider."},"fullyImplemented":false,"id":5069,"linearizedBaseContracts":[5069],"name":"IPoolAddressesProvider","nameLocation":"199:22:39","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":4864,"nodeType":"StructuredDocumentation","src":"226:164:39","text":" @dev Emitted when the market identifier is updated.\n @param oldMarketId The old id of the market\n @param newMarketId The new id of the market"},"id":4870,"name":"MarketIdSet","nameLocation":"399:11:39","nodeType":"EventDefinition","parameters":{"id":4869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4866,"indexed":true,"mutability":"mutable","name":"oldMarketId","nameLocation":"426:11:39","nodeType":"VariableDeclaration","scope":4870,"src":"411:26:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4865,"name":"string","nodeType":"ElementaryTypeName","src":"411:6:39","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":4868,"indexed":true,"mutability":"mutable","name":"newMarketId","nameLocation":"454:11:39","nodeType":"VariableDeclaration","scope":4870,"src":"439:26:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4867,"name":"string","nodeType":"ElementaryTypeName","src":"439:6:39","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"410:56:39"},"src":"393:74:39"},{"anonymous":false,"documentation":{"id":4871,"nodeType":"StructuredDocumentation","src":"471:155:39","text":" @dev Emitted when the pool is updated.\n @param oldAddress The old address of the Pool\n @param newAddress The new address of the Pool"},"id":4877,"name":"PoolUpdated","nameLocation":"635:11:39","nodeType":"EventDefinition","parameters":{"id":4876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4873,"indexed":true,"mutability":"mutable","name":"oldAddress","nameLocation":"663:10:39","nodeType":"VariableDeclaration","scope":4877,"src":"647:26:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4872,"name":"address","nodeType":"ElementaryTypeName","src":"647:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4875,"indexed":true,"mutability":"mutable","name":"newAddress","nameLocation":"691:10:39","nodeType":"VariableDeclaration","scope":4877,"src":"675:26:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4874,"name":"address","nodeType":"ElementaryTypeName","src":"675:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"646:56:39"},"src":"629:74:39"},{"anonymous":false,"documentation":{"id":4878,"nodeType":"StructuredDocumentation","src":"707:192:39","text":" @dev Emitted when the pool configurator is updated.\n @param oldAddress The old address of the PoolConfigurator\n @param newAddress The new address of the PoolConfigurator"},"id":4884,"name":"PoolConfiguratorUpdated","nameLocation":"908:23:39","nodeType":"EventDefinition","parameters":{"id":4883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4880,"indexed":true,"mutability":"mutable","name":"oldAddress","nameLocation":"948:10:39","nodeType":"VariableDeclaration","scope":4884,"src":"932:26:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4879,"name":"address","nodeType":"ElementaryTypeName","src":"932:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4882,"indexed":true,"mutability":"mutable","name":"newAddress","nameLocation":"976:10:39","nodeType":"VariableDeclaration","scope":4884,"src":"960:26:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4881,"name":"address","nodeType":"ElementaryTypeName","src":"960:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"931:56:39"},"src":"902:86:39"},{"anonymous":false,"documentation":{"id":4885,"nodeType":"StructuredDocumentation","src":"992:177:39","text":" @dev Emitted when the price oracle is updated.\n @param oldAddress The old address of the PriceOracle\n @param newAddress The new address of the PriceOracle"},"id":4891,"name":"PriceOracleUpdated","nameLocation":"1178:18:39","nodeType":"EventDefinition","parameters":{"id":4890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4887,"indexed":true,"mutability":"mutable","name":"oldAddress","nameLocation":"1213:10:39","nodeType":"VariableDeclaration","scope":4891,"src":"1197:26:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4886,"name":"address","nodeType":"ElementaryTypeName","src":"1197:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4889,"indexed":true,"mutability":"mutable","name":"newAddress","nameLocation":"1241:10:39","nodeType":"VariableDeclaration","scope":4891,"src":"1225:26:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4888,"name":"address","nodeType":"ElementaryTypeName","src":"1225:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1196:56:39"},"src":"1172:81:39"},{"anonymous":false,"documentation":{"id":4892,"nodeType":"StructuredDocumentation","src":"1257:174:39","text":" @dev Emitted when the ACL manager is updated.\n @param oldAddress The old address of the ACLManager\n @param newAddress The new address of the ACLManager"},"id":4898,"name":"ACLManagerUpdated","nameLocation":"1440:17:39","nodeType":"EventDefinition","parameters":{"id":4897,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4894,"indexed":true,"mutability":"mutable","name":"oldAddress","nameLocation":"1474:10:39","nodeType":"VariableDeclaration","scope":4898,"src":"1458:26:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4893,"name":"address","nodeType":"ElementaryTypeName","src":"1458:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4896,"indexed":true,"mutability":"mutable","name":"newAddress","nameLocation":"1502:10:39","nodeType":"VariableDeclaration","scope":4898,"src":"1486:26:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4895,"name":"address","nodeType":"ElementaryTypeName","src":"1486:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1457:56:39"},"src":"1434:80:39"},{"anonymous":false,"documentation":{"id":4899,"nodeType":"StructuredDocumentation","src":"1518:168:39","text":" @dev Emitted when the ACL admin is updated.\n @param oldAddress The old address of the ACLAdmin\n @param newAddress The new address of the ACLAdmin"},"id":4905,"name":"ACLAdminUpdated","nameLocation":"1695:15:39","nodeType":"EventDefinition","parameters":{"id":4904,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4901,"indexed":true,"mutability":"mutable","name":"oldAddress","nameLocation":"1727:10:39","nodeType":"VariableDeclaration","scope":4905,"src":"1711:26:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4900,"name":"address","nodeType":"ElementaryTypeName","src":"1711:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4903,"indexed":true,"mutability":"mutable","name":"newAddress","nameLocation":"1755:10:39","nodeType":"VariableDeclaration","scope":4905,"src":"1739:26:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4902,"name":"address","nodeType":"ElementaryTypeName","src":"1739:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1710:56:39"},"src":"1689:78:39"},{"anonymous":false,"documentation":{"id":4906,"nodeType":"StructuredDocumentation","src":"1771:202:39","text":" @dev Emitted when the price oracle sentinel is updated.\n @param oldAddress The old address of the PriceOracleSentinel\n @param newAddress The new address of the PriceOracleSentinel"},"id":4912,"name":"PriceOracleSentinelUpdated","nameLocation":"1982:26:39","nodeType":"EventDefinition","parameters":{"id":4911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4908,"indexed":true,"mutability":"mutable","name":"oldAddress","nameLocation":"2025:10:39","nodeType":"VariableDeclaration","scope":4912,"src":"2009:26:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4907,"name":"address","nodeType":"ElementaryTypeName","src":"2009:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4910,"indexed":true,"mutability":"mutable","name":"newAddress","nameLocation":"2053:10:39","nodeType":"VariableDeclaration","scope":4912,"src":"2037:26:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4909,"name":"address","nodeType":"ElementaryTypeName","src":"2037:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2008:56:39"},"src":"1976:89:39"},{"anonymous":false,"documentation":{"id":4913,"nodeType":"StructuredDocumentation","src":"2069:193:39","text":" @dev Emitted when the pool data provider is updated.\n @param oldAddress The old address of the PoolDataProvider\n @param newAddress The new address of the PoolDataProvider"},"id":4919,"name":"PoolDataProviderUpdated","nameLocation":"2271:23:39","nodeType":"EventDefinition","parameters":{"id":4918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4915,"indexed":true,"mutability":"mutable","name":"oldAddress","nameLocation":"2311:10:39","nodeType":"VariableDeclaration","scope":4919,"src":"2295:26:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4914,"name":"address","nodeType":"ElementaryTypeName","src":"2295:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4917,"indexed":true,"mutability":"mutable","name":"newAddress","nameLocation":"2339:10:39","nodeType":"VariableDeclaration","scope":4919,"src":"2323:26:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4916,"name":"address","nodeType":"ElementaryTypeName","src":"2323:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2294:56:39"},"src":"2265:86:39"},{"anonymous":false,"documentation":{"id":4920,"nodeType":"StructuredDocumentation","src":"2355:243:39","text":" @dev Emitted when a new proxy is created.\n @param id The identifier of the proxy\n @param proxyAddress The address of the created proxy contract\n @param implementationAddress The address of the implementation contract"},"id":4928,"name":"ProxyCreated","nameLocation":"2607:12:39","nodeType":"EventDefinition","parameters":{"id":4927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4922,"indexed":true,"mutability":"mutable","name":"id","nameLocation":"2641:2:39","nodeType":"VariableDeclaration","scope":4928,"src":"2625:18:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4921,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2625:7:39","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4924,"indexed":true,"mutability":"mutable","name":"proxyAddress","nameLocation":"2665:12:39","nodeType":"VariableDeclaration","scope":4928,"src":"2649:28:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4923,"name":"address","nodeType":"ElementaryTypeName","src":"2649:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4926,"indexed":true,"mutability":"mutable","name":"implementationAddress","nameLocation":"2699:21:39","nodeType":"VariableDeclaration","scope":4928,"src":"2683:37:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4925,"name":"address","nodeType":"ElementaryTypeName","src":"2683:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2619:105:39"},"src":"2601:124:39"},{"anonymous":false,"documentation":{"id":4929,"nodeType":"StructuredDocumentation","src":"2729:238:39","text":" @dev Emitted when a new non-proxied contract address is registered.\n @param id The identifier of the contract\n @param oldAddress The address of the old contract\n @param newAddress The address of the new contract"},"id":4937,"name":"AddressSet","nameLocation":"2976:10:39","nodeType":"EventDefinition","parameters":{"id":4936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4931,"indexed":true,"mutability":"mutable","name":"id","nameLocation":"3003:2:39","nodeType":"VariableDeclaration","scope":4937,"src":"2987:18:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4930,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2987:7:39","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4933,"indexed":true,"mutability":"mutable","name":"oldAddress","nameLocation":"3023:10:39","nodeType":"VariableDeclaration","scope":4937,"src":"3007:26:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4932,"name":"address","nodeType":"ElementaryTypeName","src":"3007:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4935,"indexed":true,"mutability":"mutable","name":"newAddress","nameLocation":"3051:10:39","nodeType":"VariableDeclaration","scope":4937,"src":"3035:26:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4934,"name":"address","nodeType":"ElementaryTypeName","src":"3035:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2986:76:39"},"src":"2970:93:39"},{"anonymous":false,"documentation":{"id":4938,"nodeType":"StructuredDocumentation","src":"3067:367:39","text":" @dev Emitted when the implementation of the proxy registered with id is updated\n @param id The identifier of the contract\n @param proxyAddress The address of the proxy contract\n @param oldImplementationAddress The address of the old implementation contract\n @param newImplementationAddress The address of the new implementation contract"},"id":4948,"name":"AddressSetAsProxy","nameLocation":"3443:17:39","nodeType":"EventDefinition","parameters":{"id":4947,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4940,"indexed":true,"mutability":"mutable","name":"id","nameLocation":"3482:2:39","nodeType":"VariableDeclaration","scope":4948,"src":"3466:18:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4939,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3466:7:39","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4942,"indexed":true,"mutability":"mutable","name":"proxyAddress","nameLocation":"3506:12:39","nodeType":"VariableDeclaration","scope":4948,"src":"3490:28:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4941,"name":"address","nodeType":"ElementaryTypeName","src":"3490:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4944,"indexed":false,"mutability":"mutable","name":"oldImplementationAddress","nameLocation":"3532:24:39","nodeType":"VariableDeclaration","scope":4948,"src":"3524:32:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4943,"name":"address","nodeType":"ElementaryTypeName","src":"3524:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4946,"indexed":true,"mutability":"mutable","name":"newImplementationAddress","nameLocation":"3578:24:39","nodeType":"VariableDeclaration","scope":4948,"src":"3562:40:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4945,"name":"address","nodeType":"ElementaryTypeName","src":"3562:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3460:146:39"},"src":"3437:170:39"},{"documentation":{"id":4949,"nodeType":"StructuredDocumentation","src":"3611:117:39","text":" @notice Returns the id of the Aave market to which this contract points to.\n @return The market id"},"functionSelector":"568ef470","id":4954,"implemented":false,"kind":"function","modifiers":[],"name":"getMarketId","nameLocation":"3740:11:39","nodeType":"FunctionDefinition","parameters":{"id":4950,"nodeType":"ParameterList","parameters":[],"src":"3751:2:39"},"returnParameters":{"id":4953,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4952,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4954,"src":"3777:13:39","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4951,"name":"string","nodeType":"ElementaryTypeName","src":"3777:6:39","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3776:15:39"},"scope":5069,"src":"3731:61:39","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4955,"nodeType":"StructuredDocumentation","src":"3796:252:39","text":" @notice Associates an id with a specific PoolAddressesProvider.\n @dev This can be used to create an onchain registry of PoolAddressesProviders to\n identify and validate multiple Aave markets.\n @param newMarketId The market id"},"functionSelector":"f67b1847","id":4960,"implemented":false,"kind":"function","modifiers":[],"name":"setMarketId","nameLocation":"4060:11:39","nodeType":"FunctionDefinition","parameters":{"id":4958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4957,"mutability":"mutable","name":"newMarketId","nameLocation":"4088:11:39","nodeType":"VariableDeclaration","scope":4960,"src":"4072:27:39","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":4956,"name":"string","nodeType":"ElementaryTypeName","src":"4072:6:39","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4071:29:39"},"returnParameters":{"id":4959,"nodeType":"ParameterList","parameters":[],"src":"4109:0:39"},"scope":5069,"src":"4051:59:39","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4961,"nodeType":"StructuredDocumentation","src":"4114:306:39","text":" @notice Returns an address by its identifier.\n @dev The returned address might be an EOA or a contract, potentially proxied\n @dev It returns ZERO if there is no registered address with the given id\n @param id The id\n @return The address of the registered for the specified id"},"functionSelector":"21f8a721","id":4968,"implemented":false,"kind":"function","modifiers":[],"name":"getAddress","nameLocation":"4432:10:39","nodeType":"FunctionDefinition","parameters":{"id":4964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4963,"mutability":"mutable","name":"id","nameLocation":"4451:2:39","nodeType":"VariableDeclaration","scope":4968,"src":"4443:10:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4962,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4443:7:39","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4442:12:39"},"returnParameters":{"id":4967,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4966,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4968,"src":"4478:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4965,"name":"address","nodeType":"ElementaryTypeName","src":"4478:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4477:9:39"},"scope":5069,"src":"4423:64:39","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4969,"nodeType":"StructuredDocumentation","src":"4491:485:39","text":" @notice General function to update the implementation of a proxy registered with\n certain `id`. If there is no proxy registered, it will instantiate one and\n set as implementation the `newImplementationAddress`.\n @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\n setter function, in order to avoid unexpected consequences\n @param id The id\n @param newImplementationAddress The address of the new implementation"},"functionSelector":"5dcc528c","id":4976,"implemented":false,"kind":"function","modifiers":[],"name":"setAddressAsProxy","nameLocation":"4988:17:39","nodeType":"FunctionDefinition","parameters":{"id":4974,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4971,"mutability":"mutable","name":"id","nameLocation":"5014:2:39","nodeType":"VariableDeclaration","scope":4976,"src":"5006:10:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4970,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5006:7:39","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4973,"mutability":"mutable","name":"newImplementationAddress","nameLocation":"5026:24:39","nodeType":"VariableDeclaration","scope":4976,"src":"5018:32:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4972,"name":"address","nodeType":"ElementaryTypeName","src":"5018:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5005:46:39"},"returnParameters":{"id":4975,"nodeType":"ParameterList","parameters":[],"src":"5060:0:39"},"scope":5069,"src":"4979:82:39","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4977,"nodeType":"StructuredDocumentation","src":"5065:244:39","text":" @notice Sets an address for an id replacing the address saved in the addresses map.\n @dev IMPORTANT Use this function carefully, as it will do a hard replacement\n @param id The id\n @param newAddress The address to set"},"functionSelector":"ca446dd9","id":4984,"implemented":false,"kind":"function","modifiers":[],"name":"setAddress","nameLocation":"5321:10:39","nodeType":"FunctionDefinition","parameters":{"id":4982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4979,"mutability":"mutable","name":"id","nameLocation":"5340:2:39","nodeType":"VariableDeclaration","scope":4984,"src":"5332:10:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4978,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5332:7:39","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4981,"mutability":"mutable","name":"newAddress","nameLocation":"5352:10:39","nodeType":"VariableDeclaration","scope":4984,"src":"5344:18:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4980,"name":"address","nodeType":"ElementaryTypeName","src":"5344:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5331:32:39"},"returnParameters":{"id":4983,"nodeType":"ParameterList","parameters":[],"src":"5372:0:39"},"scope":5069,"src":"5312:61:39","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4985,"nodeType":"StructuredDocumentation","src":"5377:97:39","text":" @notice Returns the address of the Pool proxy.\n @return The Pool proxy address"},"functionSelector":"026b1d5f","id":4990,"implemented":false,"kind":"function","modifiers":[],"name":"getPool","nameLocation":"5486:7:39","nodeType":"FunctionDefinition","parameters":{"id":4986,"nodeType":"ParameterList","parameters":[],"src":"5493:2:39"},"returnParameters":{"id":4989,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4988,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4990,"src":"5519:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4987,"name":"address","nodeType":"ElementaryTypeName","src":"5519:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5518:9:39"},"scope":5069,"src":"5477:51:39","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4991,"nodeType":"StructuredDocumentation","src":"5532:224:39","text":" @notice Updates the implementation of the Pool, or creates a proxy\n setting the new `pool` implementation when the function is called for the first time.\n @param newPoolImpl The new Pool implementation"},"functionSelector":"a1564406","id":4996,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolImpl","nameLocation":"5768:11:39","nodeType":"FunctionDefinition","parameters":{"id":4994,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4993,"mutability":"mutable","name":"newPoolImpl","nameLocation":"5788:11:39","nodeType":"VariableDeclaration","scope":4996,"src":"5780:19:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4992,"name":"address","nodeType":"ElementaryTypeName","src":"5780:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5779:21:39"},"returnParameters":{"id":4995,"nodeType":"ParameterList","parameters":[],"src":"5809:0:39"},"scope":5069,"src":"5759:51:39","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4997,"nodeType":"StructuredDocumentation","src":"5814:121:39","text":" @notice Returns the address of the PoolConfigurator proxy.\n @return The PoolConfigurator proxy address"},"functionSelector":"631adfca","id":5002,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolConfigurator","nameLocation":"5947:19:39","nodeType":"FunctionDefinition","parameters":{"id":4998,"nodeType":"ParameterList","parameters":[],"src":"5966:2:39"},"returnParameters":{"id":5001,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5000,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5002,"src":"5992:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4999,"name":"address","nodeType":"ElementaryTypeName","src":"5992:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5991:9:39"},"scope":5069,"src":"5938:63:39","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5003,"nodeType":"StructuredDocumentation","src":"6005:272:39","text":" @notice Updates the implementation of the PoolConfigurator, or creates a proxy\n setting the new `PoolConfigurator` implementation when the function is called for the first time.\n @param newPoolConfiguratorImpl The new PoolConfigurator implementation"},"functionSelector":"e4ca28b7","id":5008,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolConfiguratorImpl","nameLocation":"6289:23:39","nodeType":"FunctionDefinition","parameters":{"id":5006,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5005,"mutability":"mutable","name":"newPoolConfiguratorImpl","nameLocation":"6321:23:39","nodeType":"VariableDeclaration","scope":5008,"src":"6313:31:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5004,"name":"address","nodeType":"ElementaryTypeName","src":"6313:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6312:33:39"},"returnParameters":{"id":5007,"nodeType":"ParameterList","parameters":[],"src":"6354:0:39"},"scope":5069,"src":"6280:75:39","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5009,"nodeType":"StructuredDocumentation","src":"6359:107:39","text":" @notice Returns the address of the price oracle.\n @return The address of the PriceOracle"},"functionSelector":"fca513a8","id":5014,"implemented":false,"kind":"function","modifiers":[],"name":"getPriceOracle","nameLocation":"6478:14:39","nodeType":"FunctionDefinition","parameters":{"id":5010,"nodeType":"ParameterList","parameters":[],"src":"6492:2:39"},"returnParameters":{"id":5013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5012,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5014,"src":"6518:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5011,"name":"address","nodeType":"ElementaryTypeName","src":"6518:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6517:9:39"},"scope":5069,"src":"6469:58:39","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5015,"nodeType":"StructuredDocumentation","src":"6531:125:39","text":" @notice Updates the address of the price oracle.\n @param newPriceOracle The address of the new PriceOracle"},"functionSelector":"530e784f","id":5020,"implemented":false,"kind":"function","modifiers":[],"name":"setPriceOracle","nameLocation":"6668:14:39","nodeType":"FunctionDefinition","parameters":{"id":5018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5017,"mutability":"mutable","name":"newPriceOracle","nameLocation":"6691:14:39","nodeType":"VariableDeclaration","scope":5020,"src":"6683:22:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5016,"name":"address","nodeType":"ElementaryTypeName","src":"6683:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6682:24:39"},"returnParameters":{"id":5019,"nodeType":"ParameterList","parameters":[],"src":"6715:0:39"},"scope":5069,"src":"6659:57:39","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5021,"nodeType":"StructuredDocumentation","src":"6720:105:39","text":" @notice Returns the address of the ACL manager.\n @return The address of the ACLManager"},"functionSelector":"707cd716","id":5026,"implemented":false,"kind":"function","modifiers":[],"name":"getACLManager","nameLocation":"6837:13:39","nodeType":"FunctionDefinition","parameters":{"id":5022,"nodeType":"ParameterList","parameters":[],"src":"6850:2:39"},"returnParameters":{"id":5025,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5024,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5026,"src":"6876:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5023,"name":"address","nodeType":"ElementaryTypeName","src":"6876:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6875:9:39"},"scope":5069,"src":"6828:57:39","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5027,"nodeType":"StructuredDocumentation","src":"6889:122:39","text":" @notice Updates the address of the ACL manager.\n @param newAclManager The address of the new ACLManager"},"functionSelector":"ed301ca9","id":5032,"implemented":false,"kind":"function","modifiers":[],"name":"setACLManager","nameLocation":"7023:13:39","nodeType":"FunctionDefinition","parameters":{"id":5030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5029,"mutability":"mutable","name":"newAclManager","nameLocation":"7045:13:39","nodeType":"VariableDeclaration","scope":5032,"src":"7037:21:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5028,"name":"address","nodeType":"ElementaryTypeName","src":"7037:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7036:23:39"},"returnParameters":{"id":5031,"nodeType":"ParameterList","parameters":[],"src":"7068:0:39"},"scope":5069,"src":"7014:55:39","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5033,"nodeType":"StructuredDocumentation","src":"7073:102:39","text":" @notice Returns the address of the ACL admin.\n @return The address of the ACL admin"},"functionSelector":"0e67178c","id":5038,"implemented":false,"kind":"function","modifiers":[],"name":"getACLAdmin","nameLocation":"7187:11:39","nodeType":"FunctionDefinition","parameters":{"id":5034,"nodeType":"ParameterList","parameters":[],"src":"7198:2:39"},"returnParameters":{"id":5037,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5036,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5038,"src":"7224:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5035,"name":"address","nodeType":"ElementaryTypeName","src":"7224:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7223:9:39"},"scope":5069,"src":"7178:55:39","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5039,"nodeType":"StructuredDocumentation","src":"7237:117:39","text":" @notice Updates the address of the ACL admin.\n @param newAclAdmin The address of the new ACL admin"},"functionSelector":"76d84ffc","id":5044,"implemented":false,"kind":"function","modifiers":[],"name":"setACLAdmin","nameLocation":"7366:11:39","nodeType":"FunctionDefinition","parameters":{"id":5042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5041,"mutability":"mutable","name":"newAclAdmin","nameLocation":"7386:11:39","nodeType":"VariableDeclaration","scope":5044,"src":"7378:19:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5040,"name":"address","nodeType":"ElementaryTypeName","src":"7378:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7377:21:39"},"returnParameters":{"id":5043,"nodeType":"ParameterList","parameters":[],"src":"7407:0:39"},"scope":5069,"src":"7357:51:39","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5045,"nodeType":"StructuredDocumentation","src":"7412:124:39","text":" @notice Returns the address of the price oracle sentinel.\n @return The address of the PriceOracleSentinel"},"functionSelector":"5eb88d3d","id":5050,"implemented":false,"kind":"function","modifiers":[],"name":"getPriceOracleSentinel","nameLocation":"7548:22:39","nodeType":"FunctionDefinition","parameters":{"id":5046,"nodeType":"ParameterList","parameters":[],"src":"7570:2:39"},"returnParameters":{"id":5049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5048,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5050,"src":"7596:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5047,"name":"address","nodeType":"ElementaryTypeName","src":"7596:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7595:9:39"},"scope":5069,"src":"7539:66:39","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5051,"nodeType":"StructuredDocumentation","src":"7609:150:39","text":" @notice Updates the address of the price oracle sentinel.\n @param newPriceOracleSentinel The address of the new PriceOracleSentinel"},"functionSelector":"74944cec","id":5056,"implemented":false,"kind":"function","modifiers":[],"name":"setPriceOracleSentinel","nameLocation":"7771:22:39","nodeType":"FunctionDefinition","parameters":{"id":5054,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5053,"mutability":"mutable","name":"newPriceOracleSentinel","nameLocation":"7802:22:39","nodeType":"VariableDeclaration","scope":5056,"src":"7794:30:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5052,"name":"address","nodeType":"ElementaryTypeName","src":"7794:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7793:32:39"},"returnParameters":{"id":5055,"nodeType":"ParameterList","parameters":[],"src":"7834:0:39"},"scope":5069,"src":"7762:73:39","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5057,"nodeType":"StructuredDocumentation","src":"7839:109:39","text":" @notice Returns the address of the data provider.\n @return The address of the DataProvider"},"functionSelector":"e860accb","id":5062,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolDataProvider","nameLocation":"7960:19:39","nodeType":"FunctionDefinition","parameters":{"id":5058,"nodeType":"ParameterList","parameters":[],"src":"7979:2:39"},"returnParameters":{"id":5061,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5060,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5062,"src":"8005:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5059,"name":"address","nodeType":"ElementaryTypeName","src":"8005:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8004:9:39"},"scope":5069,"src":"7951:63:39","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5063,"nodeType":"StructuredDocumentation","src":"8018:128:39","text":" @notice Updates the address of the data provider.\n @param newDataProvider The address of the new DataProvider"},"functionSelector":"e44e9ed1","id":5068,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolDataProvider","nameLocation":"8158:19:39","nodeType":"FunctionDefinition","parameters":{"id":5066,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5065,"mutability":"mutable","name":"newDataProvider","nameLocation":"8186:15:39","nodeType":"VariableDeclaration","scope":5068,"src":"8178:23:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5064,"name":"address","nodeType":"ElementaryTypeName","src":"8178:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8177:25:39"},"returnParameters":{"id":5067,"nodeType":"ParameterList","parameters":[],"src":"8211:0:39"},"scope":5069,"src":"8149:63:39","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":5070,"src":"189:8025:39","usedErrors":[]}],"src":"37:8178:39"},"id":39},"@aave/core-v3/contracts/interfaces/IPoolAddressesProviderRegistry.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProviderRegistry.sol","exportedSymbols":{"IPoolAddressesProviderRegistry":[5124]},"id":5125,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":5071,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:40"},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolAddressesProviderRegistry","contractDependencies":[],"contractKind":"interface","documentation":{"id":5072,"nodeType":"StructuredDocumentation","src":"62:149:40","text":" @title IPoolAddressesProviderRegistry\n @author Aave\n @notice Defines the basic interface for an Aave Pool Addresses Provider Registry."},"fullyImplemented":false,"id":5124,"linearizedBaseContracts":[5124],"name":"IPoolAddressesProviderRegistry","nameLocation":"222:30:40","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":5073,"nodeType":"StructuredDocumentation","src":"257:215:40","text":" @dev Emitted when a new AddressesProvider is registered.\n @param addressesProvider The address of the registered PoolAddressesProvider\n @param id The id of the registered PoolAddressesProvider"},"id":5079,"name":"AddressesProviderRegistered","nameLocation":"481:27:40","nodeType":"EventDefinition","parameters":{"id":5078,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5075,"indexed":true,"mutability":"mutable","name":"addressesProvider","nameLocation":"525:17:40","nodeType":"VariableDeclaration","scope":5079,"src":"509:33:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5074,"name":"address","nodeType":"ElementaryTypeName","src":"509:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5077,"indexed":true,"mutability":"mutable","name":"id","nameLocation":"560:2:40","nodeType":"VariableDeclaration","scope":5079,"src":"544:18:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5076,"name":"uint256","nodeType":"ElementaryTypeName","src":"544:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"508:55:40"},"src":"475:89:40"},{"anonymous":false,"documentation":{"id":5080,"nodeType":"StructuredDocumentation","src":"568:218:40","text":" @dev Emitted when an AddressesProvider is unregistered.\n @param addressesProvider The address of the unregistered PoolAddressesProvider\n @param id The id of the unregistered PoolAddressesProvider"},"id":5086,"name":"AddressesProviderUnregistered","nameLocation":"795:29:40","nodeType":"EventDefinition","parameters":{"id":5085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5082,"indexed":true,"mutability":"mutable","name":"addressesProvider","nameLocation":"841:17:40","nodeType":"VariableDeclaration","scope":5086,"src":"825:33:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5081,"name":"address","nodeType":"ElementaryTypeName","src":"825:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5084,"indexed":true,"mutability":"mutable","name":"id","nameLocation":"876:2:40","nodeType":"VariableDeclaration","scope":5086,"src":"860:18:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5083,"name":"uint256","nodeType":"ElementaryTypeName","src":"860:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"824:55:40"},"src":"789:91:40"},{"documentation":{"id":5087,"nodeType":"StructuredDocumentation","src":"884:118:40","text":" @notice Returns the list of registered addresses providers\n @return The list of addresses providers"},"functionSelector":"365ccbbf","id":5093,"implemented":false,"kind":"function","modifiers":[],"name":"getAddressesProvidersList","nameLocation":"1014:25:40","nodeType":"FunctionDefinition","parameters":{"id":5088,"nodeType":"ParameterList","parameters":[],"src":"1039:2:40"},"returnParameters":{"id":5092,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5091,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5093,"src":"1065:16:40","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":5089,"name":"address","nodeType":"ElementaryTypeName","src":"1065:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5090,"nodeType":"ArrayTypeName","src":"1065:9:40","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1064:18:40"},"scope":5124,"src":"1005:78:40","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5094,"nodeType":"StructuredDocumentation","src":"1087:221:40","text":" @notice Returns the id of a registered PoolAddressesProvider\n @param addressesProvider The address of the PoolAddressesProvider\n @return The id of the PoolAddressesProvider or 0 if is not registered"},"functionSelector":"d0267be7","id":5101,"implemented":false,"kind":"function","modifiers":[],"name":"getAddressesProviderIdByAddress","nameLocation":"1320:31:40","nodeType":"FunctionDefinition","parameters":{"id":5097,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5096,"mutability":"mutable","name":"addressesProvider","nameLocation":"1365:17:40","nodeType":"VariableDeclaration","scope":5101,"src":"1357:25:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5095,"name":"address","nodeType":"ElementaryTypeName","src":"1357:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1351:35:40"},"returnParameters":{"id":5100,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5099,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5101,"src":"1410:7:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5098,"name":"uint256","nodeType":"ElementaryTypeName","src":"1410:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1409:9:40"},"scope":5124,"src":"1311:108:40","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5102,"nodeType":"StructuredDocumentation","src":"1423:228:40","text":" @notice Returns the address of a registered PoolAddressesProvider\n @param id The id of the market\n @return The address of the PoolAddressesProvider with the given id or zero address if it is not registered"},"functionSelector":"57dc0566","id":5109,"implemented":false,"kind":"function","modifiers":[],"name":"getAddressesProviderAddressById","nameLocation":"1663:31:40","nodeType":"FunctionDefinition","parameters":{"id":5105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5104,"mutability":"mutable","name":"id","nameLocation":"1703:2:40","nodeType":"VariableDeclaration","scope":5109,"src":"1695:10:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5103,"name":"uint256","nodeType":"ElementaryTypeName","src":"1695:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1694:12:40"},"returnParameters":{"id":5108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5107,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5109,"src":"1730:7:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5106,"name":"address","nodeType":"ElementaryTypeName","src":"1730:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1729:9:40"},"scope":5124,"src":"1654:85:40","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5110,"nodeType":"StructuredDocumentation","src":"1743:379:40","text":" @notice Registers an addresses provider\n @dev The PoolAddressesProvider must not already be registered in the registry\n @dev The id must not be used by an already registered PoolAddressesProvider\n @param provider The address of the new PoolAddressesProvider\n @param id The id for the new PoolAddressesProvider, referring to the market it belongs to"},"functionSelector":"d258191e","id":5117,"implemented":false,"kind":"function","modifiers":[],"name":"registerAddressesProvider","nameLocation":"2134:25:40","nodeType":"FunctionDefinition","parameters":{"id":5115,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5112,"mutability":"mutable","name":"provider","nameLocation":"2168:8:40","nodeType":"VariableDeclaration","scope":5117,"src":"2160:16:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5111,"name":"address","nodeType":"ElementaryTypeName","src":"2160:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5114,"mutability":"mutable","name":"id","nameLocation":"2186:2:40","nodeType":"VariableDeclaration","scope":5117,"src":"2178:10:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5113,"name":"uint256","nodeType":"ElementaryTypeName","src":"2178:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2159:30:40"},"returnParameters":{"id":5116,"nodeType":"ParameterList","parameters":[],"src":"2198:0:40"},"scope":5124,"src":"2125:74:40","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5118,"nodeType":"StructuredDocumentation","src":"2203:155:40","text":" @notice Removes an addresses provider from the list of registered addresses providers\n @param provider The PoolAddressesProvider address"},"functionSelector":"0de26707","id":5123,"implemented":false,"kind":"function","modifiers":[],"name":"unregisterAddressesProvider","nameLocation":"2370:27:40","nodeType":"FunctionDefinition","parameters":{"id":5121,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5120,"mutability":"mutable","name":"provider","nameLocation":"2406:8:40","nodeType":"VariableDeclaration","scope":5123,"src":"2398:16:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5119,"name":"address","nodeType":"ElementaryTypeName","src":"2398:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2397:18:40"},"returnParameters":{"id":5122,"nodeType":"ParameterList","parameters":[],"src":"2424:0:40"},"scope":5124,"src":"2361:64:40","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":5125,"src":"212:2215:40","usedErrors":[]}],"src":"37:2391:40"},"id":40},"@aave/core-v3/contracts/interfaces/IPoolConfigurator.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolConfigurator.sol","exportedSymbols":{"ConfiguratorInputTypes":[21281],"IPoolConfigurator":[5567]},"id":5568,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":5126,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:41"},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/ConfiguratorInputTypes.sol","file":"../protocol/libraries/types/ConfiguratorInputTypes.sol","id":5128,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5568,"sourceUnit":21282,"src":"62:94:41","symbolAliases":[{"foreign":{"id":5127,"name":"ConfiguratorInputTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:22:41","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolConfigurator","contractDependencies":[],"contractKind":"interface","documentation":{"id":5129,"nodeType":"StructuredDocumentation","src":"158:115:41","text":" @title IPoolConfigurator\n @author Aave\n @notice Defines the basic interface for a Pool configurator."},"fullyImplemented":false,"id":5567,"linearizedBaseContracts":[5567],"name":"IPoolConfigurator","nameLocation":"284:17:41","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":5130,"nodeType":"StructuredDocumentation","src":"306:456:41","text":" @dev Emitted when a reserve is initialized.\n @param asset The address of the underlying asset of the reserve\n @param aToken The address of the associated aToken contract\n @param stableDebtToken The address of the associated stable rate debt token\n @param variableDebtToken The address of the associated variable rate debt token\n @param interestRateStrategyAddress The address of the interest rate strategy for the reserve"},"id":5142,"name":"ReserveInitialized","nameLocation":"771:18:41","nodeType":"EventDefinition","parameters":{"id":5141,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5132,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"811:5:41","nodeType":"VariableDeclaration","scope":5142,"src":"795:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5131,"name":"address","nodeType":"ElementaryTypeName","src":"795:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5134,"indexed":true,"mutability":"mutable","name":"aToken","nameLocation":"838:6:41","nodeType":"VariableDeclaration","scope":5142,"src":"822:22:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5133,"name":"address","nodeType":"ElementaryTypeName","src":"822:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5136,"indexed":false,"mutability":"mutable","name":"stableDebtToken","nameLocation":"858:15:41","nodeType":"VariableDeclaration","scope":5142,"src":"850:23:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5135,"name":"address","nodeType":"ElementaryTypeName","src":"850:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5138,"indexed":false,"mutability":"mutable","name":"variableDebtToken","nameLocation":"887:17:41","nodeType":"VariableDeclaration","scope":5142,"src":"879:25:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5137,"name":"address","nodeType":"ElementaryTypeName","src":"879:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5140,"indexed":false,"mutability":"mutable","name":"interestRateStrategyAddress","nameLocation":"918:27:41","nodeType":"VariableDeclaration","scope":5142,"src":"910:35:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5139,"name":"address","nodeType":"ElementaryTypeName","src":"910:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"789:160:41"},"src":"765:185:41"},{"anonymous":false,"documentation":{"id":5143,"nodeType":"StructuredDocumentation","src":"954:214:41","text":" @dev Emitted when borrowing is enabled or disabled on a reserve.\n @param asset The address of the underlying asset of the reserve\n @param enabled True if borrowing is enabled, false otherwise"},"id":5149,"name":"ReserveBorrowing","nameLocation":"1177:16:41","nodeType":"EventDefinition","parameters":{"id":5148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5145,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"1210:5:41","nodeType":"VariableDeclaration","scope":5149,"src":"1194:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5144,"name":"address","nodeType":"ElementaryTypeName","src":"1194:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5147,"indexed":false,"mutability":"mutable","name":"enabled","nameLocation":"1222:7:41","nodeType":"VariableDeclaration","scope":5149,"src":"1217:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5146,"name":"bool","nodeType":"ElementaryTypeName","src":"1217:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1193:37:41"},"src":"1171:60:41"},{"anonymous":false,"documentation":{"id":5150,"nodeType":"StructuredDocumentation","src":"1235:218:41","text":" @dev Emitted when flashloans are enabled or disabled on a reserve.\n @param asset The address of the underlying asset of the reserve\n @param enabled True if flashloans are enabled, false otherwise"},"id":5156,"name":"ReserveFlashLoaning","nameLocation":"1462:19:41","nodeType":"EventDefinition","parameters":{"id":5155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5152,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"1498:5:41","nodeType":"VariableDeclaration","scope":5156,"src":"1482:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5151,"name":"address","nodeType":"ElementaryTypeName","src":"1482:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5154,"indexed":false,"mutability":"mutable","name":"enabled","nameLocation":"1510:7:41","nodeType":"VariableDeclaration","scope":5156,"src":"1505:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5153,"name":"bool","nodeType":"ElementaryTypeName","src":"1505:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1481:37:41"},"src":"1456:63:41"},{"anonymous":false,"documentation":{"id":5157,"nodeType":"StructuredDocumentation","src":"1523:462:41","text":" @dev Emitted when the collateralization risk parameters for the specified asset are updated.\n @param asset The address of the underlying asset of the reserve\n @param ltv The loan to value of the asset when used as collateral\n @param liquidationThreshold The threshold at which loans using this asset as collateral will be considered undercollateralized\n @param liquidationBonus The bonus liquidators receive to liquidate this asset"},"id":5167,"name":"CollateralConfigurationChanged","nameLocation":"1994:30:41","nodeType":"EventDefinition","parameters":{"id":5166,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5159,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"2046:5:41","nodeType":"VariableDeclaration","scope":5167,"src":"2030:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5158,"name":"address","nodeType":"ElementaryTypeName","src":"2030:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5161,"indexed":false,"mutability":"mutable","name":"ltv","nameLocation":"2065:3:41","nodeType":"VariableDeclaration","scope":5167,"src":"2057:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5160,"name":"uint256","nodeType":"ElementaryTypeName","src":"2057:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5163,"indexed":false,"mutability":"mutable","name":"liquidationThreshold","nameLocation":"2082:20:41","nodeType":"VariableDeclaration","scope":5167,"src":"2074:28:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5162,"name":"uint256","nodeType":"ElementaryTypeName","src":"2074:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5165,"indexed":false,"mutability":"mutable","name":"liquidationBonus","nameLocation":"2116:16:41","nodeType":"VariableDeclaration","scope":5167,"src":"2108:24:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5164,"name":"uint256","nodeType":"ElementaryTypeName","src":"2108:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2024:112:41"},"src":"1988:149:41"},{"anonymous":false,"documentation":{"id":5168,"nodeType":"StructuredDocumentation","src":"2141:237:41","text":" @dev Emitted when stable rate borrowing is enabled or disabled on a reserve\n @param asset The address of the underlying asset of the reserve\n @param enabled True if stable rate borrowing is enabled, false otherwise"},"id":5174,"name":"ReserveStableRateBorrowing","nameLocation":"2387:26:41","nodeType":"EventDefinition","parameters":{"id":5173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5170,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"2430:5:41","nodeType":"VariableDeclaration","scope":5174,"src":"2414:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5169,"name":"address","nodeType":"ElementaryTypeName","src":"2414:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5172,"indexed":false,"mutability":"mutable","name":"enabled","nameLocation":"2442:7:41","nodeType":"VariableDeclaration","scope":5174,"src":"2437:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5171,"name":"bool","nodeType":"ElementaryTypeName","src":"2437:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2413:37:41"},"src":"2381:70:41"},{"anonymous":false,"documentation":{"id":5175,"nodeType":"StructuredDocumentation","src":"2455:201:41","text":" @dev Emitted when a reserve is activated or deactivated\n @param asset The address of the underlying asset of the reserve\n @param active True if reserve is active, false otherwise"},"id":5181,"name":"ReserveActive","nameLocation":"2665:13:41","nodeType":"EventDefinition","parameters":{"id":5180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5177,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"2695:5:41","nodeType":"VariableDeclaration","scope":5181,"src":"2679:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5176,"name":"address","nodeType":"ElementaryTypeName","src":"2679:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5179,"indexed":false,"mutability":"mutable","name":"active","nameLocation":"2707:6:41","nodeType":"VariableDeclaration","scope":5181,"src":"2702:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5178,"name":"bool","nodeType":"ElementaryTypeName","src":"2702:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2678:36:41"},"src":"2659:56:41"},{"anonymous":false,"documentation":{"id":5182,"nodeType":"StructuredDocumentation","src":"2719:195:41","text":" @dev Emitted when a reserve is frozen or unfrozen\n @param asset The address of the underlying asset of the reserve\n @param frozen True if reserve is frozen, false otherwise"},"id":5188,"name":"ReserveFrozen","nameLocation":"2923:13:41","nodeType":"EventDefinition","parameters":{"id":5187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5184,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"2953:5:41","nodeType":"VariableDeclaration","scope":5188,"src":"2937:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5183,"name":"address","nodeType":"ElementaryTypeName","src":"2937:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5186,"indexed":false,"mutability":"mutable","name":"frozen","nameLocation":"2965:6:41","nodeType":"VariableDeclaration","scope":5188,"src":"2960:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5185,"name":"bool","nodeType":"ElementaryTypeName","src":"2960:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2936:36:41"},"src":"2917:56:41"},{"anonymous":false,"documentation":{"id":5189,"nodeType":"StructuredDocumentation","src":"2977:195:41","text":" @dev Emitted when a reserve is paused or unpaused\n @param asset The address of the underlying asset of the reserve\n @param paused True if reserve is paused, false otherwise"},"id":5195,"name":"ReservePaused","nameLocation":"3181:13:41","nodeType":"EventDefinition","parameters":{"id":5194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5191,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"3211:5:41","nodeType":"VariableDeclaration","scope":5195,"src":"3195:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5190,"name":"address","nodeType":"ElementaryTypeName","src":"3195:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5193,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"3223:6:41","nodeType":"VariableDeclaration","scope":5195,"src":"3218:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5192,"name":"bool","nodeType":"ElementaryTypeName","src":"3218:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3194:36:41"},"src":"3175:56:41"},{"anonymous":false,"documentation":{"id":5196,"nodeType":"StructuredDocumentation","src":"3235:123:41","text":" @dev Emitted when a reserve is dropped.\n @param asset The address of the underlying asset of the reserve"},"id":5200,"name":"ReserveDropped","nameLocation":"3367:14:41","nodeType":"EventDefinition","parameters":{"id":5199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5198,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"3398:5:41","nodeType":"VariableDeclaration","scope":5200,"src":"3382:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5197,"name":"address","nodeType":"ElementaryTypeName","src":"3382:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3381:23:41"},"src":"3361:44:41"},{"anonymous":false,"documentation":{"id":5201,"nodeType":"StructuredDocumentation","src":"3409:270:41","text":" @dev Emitted when a reserve factor is updated.\n @param asset The address of the underlying asset of the reserve\n @param oldReserveFactor The old reserve factor, expressed in bps\n @param newReserveFactor The new reserve factor, expressed in bps"},"id":5209,"name":"ReserveFactorChanged","nameLocation":"3688:20:41","nodeType":"EventDefinition","parameters":{"id":5208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5203,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"3730:5:41","nodeType":"VariableDeclaration","scope":5209,"src":"3714:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5202,"name":"address","nodeType":"ElementaryTypeName","src":"3714:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5205,"indexed":false,"mutability":"mutable","name":"oldReserveFactor","nameLocation":"3749:16:41","nodeType":"VariableDeclaration","scope":5209,"src":"3741:24:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5204,"name":"uint256","nodeType":"ElementaryTypeName","src":"3741:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5207,"indexed":false,"mutability":"mutable","name":"newReserveFactor","nameLocation":"3779:16:41","nodeType":"VariableDeclaration","scope":5209,"src":"3771:24:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5206,"name":"uint256","nodeType":"ElementaryTypeName","src":"3771:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3708:91:41"},"src":"3682:118:41"},{"anonymous":false,"documentation":{"id":5210,"nodeType":"StructuredDocumentation","src":"3804:229:41","text":" @dev Emitted when the borrow cap of a reserve is updated.\n @param asset The address of the underlying asset of the reserve\n @param oldBorrowCap The old borrow cap\n @param newBorrowCap The new borrow cap"},"id":5218,"name":"BorrowCapChanged","nameLocation":"4042:16:41","nodeType":"EventDefinition","parameters":{"id":5217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5212,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"4075:5:41","nodeType":"VariableDeclaration","scope":5218,"src":"4059:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5211,"name":"address","nodeType":"ElementaryTypeName","src":"4059:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5214,"indexed":false,"mutability":"mutable","name":"oldBorrowCap","nameLocation":"4090:12:41","nodeType":"VariableDeclaration","scope":5218,"src":"4082:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5213,"name":"uint256","nodeType":"ElementaryTypeName","src":"4082:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5216,"indexed":false,"mutability":"mutable","name":"newBorrowCap","nameLocation":"4112:12:41","nodeType":"VariableDeclaration","scope":5218,"src":"4104:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5215,"name":"uint256","nodeType":"ElementaryTypeName","src":"4104:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4058:67:41"},"src":"4036:90:41"},{"anonymous":false,"documentation":{"id":5219,"nodeType":"StructuredDocumentation","src":"4130:229:41","text":" @dev Emitted when the supply cap of a reserve is updated.\n @param asset The address of the underlying asset of the reserve\n @param oldSupplyCap The old supply cap\n @param newSupplyCap The new supply cap"},"id":5227,"name":"SupplyCapChanged","nameLocation":"4368:16:41","nodeType":"EventDefinition","parameters":{"id":5226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5221,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"4401:5:41","nodeType":"VariableDeclaration","scope":5227,"src":"4385:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5220,"name":"address","nodeType":"ElementaryTypeName","src":"4385:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5223,"indexed":false,"mutability":"mutable","name":"oldSupplyCap","nameLocation":"4416:12:41","nodeType":"VariableDeclaration","scope":5227,"src":"4408:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5222,"name":"uint256","nodeType":"ElementaryTypeName","src":"4408:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5225,"indexed":false,"mutability":"mutable","name":"newSupplyCap","nameLocation":"4438:12:41","nodeType":"VariableDeclaration","scope":5227,"src":"4430:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5224,"name":"uint256","nodeType":"ElementaryTypeName","src":"4430:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4384:67:41"},"src":"4362:90:41"},{"anonymous":false,"documentation":{"id":5228,"nodeType":"StructuredDocumentation","src":"4456:295:41","text":" @dev Emitted when the liquidation protocol fee of a reserve is updated.\n @param asset The address of the underlying asset of the reserve\n @param oldFee The old liquidation protocol fee, expressed in bps\n @param newFee The new liquidation protocol fee, expressed in bps"},"id":5236,"name":"LiquidationProtocolFeeChanged","nameLocation":"4760:29:41","nodeType":"EventDefinition","parameters":{"id":5235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5230,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"4806:5:41","nodeType":"VariableDeclaration","scope":5236,"src":"4790:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5229,"name":"address","nodeType":"ElementaryTypeName","src":"4790:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5232,"indexed":false,"mutability":"mutable","name":"oldFee","nameLocation":"4821:6:41","nodeType":"VariableDeclaration","scope":5236,"src":"4813:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5231,"name":"uint256","nodeType":"ElementaryTypeName","src":"4813:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5234,"indexed":false,"mutability":"mutable","name":"newFee","nameLocation":"4837:6:41","nodeType":"VariableDeclaration","scope":5236,"src":"4829:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5233,"name":"uint256","nodeType":"ElementaryTypeName","src":"4829:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4789:55:41"},"src":"4754:91:41"},{"anonymous":false,"documentation":{"id":5237,"nodeType":"StructuredDocumentation","src":"4849:262:41","text":" @dev Emitted when the unbacked mint cap of a reserve is updated.\n @param asset The address of the underlying asset of the reserve\n @param oldUnbackedMintCap The old unbacked mint cap\n @param newUnbackedMintCap The new unbacked mint cap"},"id":5245,"name":"UnbackedMintCapChanged","nameLocation":"5120:22:41","nodeType":"EventDefinition","parameters":{"id":5244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5239,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"5164:5:41","nodeType":"VariableDeclaration","scope":5245,"src":"5148:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5238,"name":"address","nodeType":"ElementaryTypeName","src":"5148:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5241,"indexed":false,"mutability":"mutable","name":"oldUnbackedMintCap","nameLocation":"5183:18:41","nodeType":"VariableDeclaration","scope":5245,"src":"5175:26:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5240,"name":"uint256","nodeType":"ElementaryTypeName","src":"5175:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5243,"indexed":false,"mutability":"mutable","name":"newUnbackedMintCap","nameLocation":"5215:18:41","nodeType":"VariableDeclaration","scope":5245,"src":"5207:26:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5242,"name":"uint256","nodeType":"ElementaryTypeName","src":"5207:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5142:95:41"},"src":"5114:124:41"},{"anonymous":false,"documentation":{"id":5246,"nodeType":"StructuredDocumentation","src":"5242:257:41","text":" @dev Emitted when the category of an asset in eMode is changed.\n @param asset The address of the underlying asset of the reserve\n @param oldCategoryId The old eMode asset category\n @param newCategoryId The new eMode asset category"},"id":5254,"name":"EModeAssetCategoryChanged","nameLocation":"5508:25:41","nodeType":"EventDefinition","parameters":{"id":5253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5248,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"5550:5:41","nodeType":"VariableDeclaration","scope":5254,"src":"5534:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5247,"name":"address","nodeType":"ElementaryTypeName","src":"5534:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5250,"indexed":false,"mutability":"mutable","name":"oldCategoryId","nameLocation":"5563:13:41","nodeType":"VariableDeclaration","scope":5254,"src":"5557:19:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":5249,"name":"uint8","nodeType":"ElementaryTypeName","src":"5557:5:41","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":5252,"indexed":false,"mutability":"mutable","name":"newCategoryId","nameLocation":"5584:13:41","nodeType":"VariableDeclaration","scope":5254,"src":"5578:19:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":5251,"name":"uint8","nodeType":"ElementaryTypeName","src":"5578:5:41","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"5533:65:41"},"src":"5502:97:41"},{"anonymous":false,"documentation":{"id":5255,"nodeType":"StructuredDocumentation","src":"5603:490:41","text":" @dev Emitted when a new eMode category is added.\n @param categoryId The new eMode category id\n @param ltv The ltv for the asset category in eMode\n @param liquidationThreshold The liquidationThreshold for the asset category in eMode\n @param liquidationBonus The liquidationBonus for the asset category in eMode\n @param oracle The optional address of the price oracle specific for this category\n @param label A human readable identifier for the category"},"id":5269,"name":"EModeCategoryAdded","nameLocation":"6102:18:41","nodeType":"EventDefinition","parameters":{"id":5268,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5257,"indexed":true,"mutability":"mutable","name":"categoryId","nameLocation":"6140:10:41","nodeType":"VariableDeclaration","scope":5269,"src":"6126:24:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":5256,"name":"uint8","nodeType":"ElementaryTypeName","src":"6126:5:41","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":5259,"indexed":false,"mutability":"mutable","name":"ltv","nameLocation":"6164:3:41","nodeType":"VariableDeclaration","scope":5269,"src":"6156:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5258,"name":"uint256","nodeType":"ElementaryTypeName","src":"6156:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5261,"indexed":false,"mutability":"mutable","name":"liquidationThreshold","nameLocation":"6181:20:41","nodeType":"VariableDeclaration","scope":5269,"src":"6173:28:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5260,"name":"uint256","nodeType":"ElementaryTypeName","src":"6173:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5263,"indexed":false,"mutability":"mutable","name":"liquidationBonus","nameLocation":"6215:16:41","nodeType":"VariableDeclaration","scope":5269,"src":"6207:24:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5262,"name":"uint256","nodeType":"ElementaryTypeName","src":"6207:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5265,"indexed":false,"mutability":"mutable","name":"oracle","nameLocation":"6245:6:41","nodeType":"VariableDeclaration","scope":5269,"src":"6237:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5264,"name":"address","nodeType":"ElementaryTypeName","src":"6237:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5267,"indexed":false,"mutability":"mutable","name":"label","nameLocation":"6264:5:41","nodeType":"VariableDeclaration","scope":5269,"src":"6257:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":5266,"name":"string","nodeType":"ElementaryTypeName","src":"6257:6:41","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6120:153:41"},"src":"6096:178:41"},{"anonymous":false,"documentation":{"id":5270,"nodeType":"StructuredDocumentation","src":"6278:298:41","text":" @dev Emitted when a reserve interest strategy contract is updated.\n @param asset The address of the underlying asset of the reserve\n @param oldStrategy The address of the old interest strategy contract\n @param newStrategy The address of the new interest strategy contract"},"id":5278,"name":"ReserveInterestRateStrategyChanged","nameLocation":"6585:34:41","nodeType":"EventDefinition","parameters":{"id":5277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5272,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"6641:5:41","nodeType":"VariableDeclaration","scope":5278,"src":"6625:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5271,"name":"address","nodeType":"ElementaryTypeName","src":"6625:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5274,"indexed":false,"mutability":"mutable","name":"oldStrategy","nameLocation":"6660:11:41","nodeType":"VariableDeclaration","scope":5278,"src":"6652:19:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5273,"name":"address","nodeType":"ElementaryTypeName","src":"6652:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5276,"indexed":false,"mutability":"mutable","name":"newStrategy","nameLocation":"6685:11:41","nodeType":"VariableDeclaration","scope":5278,"src":"6677:19:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5275,"name":"address","nodeType":"ElementaryTypeName","src":"6677:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6619:81:41"},"src":"6579:122:41"},{"anonymous":false,"documentation":{"id":5279,"nodeType":"StructuredDocumentation","src":"6705:239:41","text":" @dev Emitted when an aToken implementation is upgraded.\n @param asset The address of the underlying asset of the reserve\n @param proxy The aToken proxy address\n @param implementation The new aToken implementation"},"id":5287,"name":"ATokenUpgraded","nameLocation":"6953:14:41","nodeType":"EventDefinition","parameters":{"id":5286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5281,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"6989:5:41","nodeType":"VariableDeclaration","scope":5287,"src":"6973:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5280,"name":"address","nodeType":"ElementaryTypeName","src":"6973:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5283,"indexed":true,"mutability":"mutable","name":"proxy","nameLocation":"7016:5:41","nodeType":"VariableDeclaration","scope":5287,"src":"7000:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5282,"name":"address","nodeType":"ElementaryTypeName","src":"7000:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5285,"indexed":true,"mutability":"mutable","name":"implementation","nameLocation":"7043:14:41","nodeType":"VariableDeclaration","scope":5287,"src":"7027:30:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5284,"name":"address","nodeType":"ElementaryTypeName","src":"7027:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6967:94:41"},"src":"6947:115:41"},{"anonymous":false,"documentation":{"id":5288,"nodeType":"StructuredDocumentation","src":"7066:267:41","text":" @dev Emitted when the implementation of a stable debt token is upgraded.\n @param asset The address of the underlying asset of the reserve\n @param proxy The stable debt token proxy address\n @param implementation The new aToken implementation"},"id":5296,"name":"StableDebtTokenUpgraded","nameLocation":"7342:23:41","nodeType":"EventDefinition","parameters":{"id":5295,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5290,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"7387:5:41","nodeType":"VariableDeclaration","scope":5296,"src":"7371:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5289,"name":"address","nodeType":"ElementaryTypeName","src":"7371:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5292,"indexed":true,"mutability":"mutable","name":"proxy","nameLocation":"7414:5:41","nodeType":"VariableDeclaration","scope":5296,"src":"7398:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5291,"name":"address","nodeType":"ElementaryTypeName","src":"7398:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5294,"indexed":true,"mutability":"mutable","name":"implementation","nameLocation":"7441:14:41","nodeType":"VariableDeclaration","scope":5296,"src":"7425:30:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5293,"name":"address","nodeType":"ElementaryTypeName","src":"7425:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7365:94:41"},"src":"7336:124:41"},{"anonymous":false,"documentation":{"id":5297,"nodeType":"StructuredDocumentation","src":"7464:271:41","text":" @dev Emitted when the implementation of a variable debt token is upgraded.\n @param asset The address of the underlying asset of the reserve\n @param proxy The variable debt token proxy address\n @param implementation The new aToken implementation"},"id":5305,"name":"VariableDebtTokenUpgraded","nameLocation":"7744:25:41","nodeType":"EventDefinition","parameters":{"id":5304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5299,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"7791:5:41","nodeType":"VariableDeclaration","scope":5305,"src":"7775:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5298,"name":"address","nodeType":"ElementaryTypeName","src":"7775:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5301,"indexed":true,"mutability":"mutable","name":"proxy","nameLocation":"7818:5:41","nodeType":"VariableDeclaration","scope":5305,"src":"7802:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5300,"name":"address","nodeType":"ElementaryTypeName","src":"7802:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5303,"indexed":true,"mutability":"mutable","name":"implementation","nameLocation":"7845:14:41","nodeType":"VariableDeclaration","scope":5305,"src":"7829:30:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5302,"name":"address","nodeType":"ElementaryTypeName","src":"7829:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7769:94:41"},"src":"7738:126:41"},{"anonymous":false,"documentation":{"id":5306,"nodeType":"StructuredDocumentation","src":"7868:234:41","text":" @dev Emitted when the debt ceiling of an asset is set.\n @param asset The address of the underlying asset of the reserve\n @param oldDebtCeiling The old debt ceiling\n @param newDebtCeiling The new debt ceiling"},"id":5314,"name":"DebtCeilingChanged","nameLocation":"8111:18:41","nodeType":"EventDefinition","parameters":{"id":5313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5308,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"8146:5:41","nodeType":"VariableDeclaration","scope":5314,"src":"8130:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5307,"name":"address","nodeType":"ElementaryTypeName","src":"8130:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5310,"indexed":false,"mutability":"mutable","name":"oldDebtCeiling","nameLocation":"8161:14:41","nodeType":"VariableDeclaration","scope":5314,"src":"8153:22:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5309,"name":"uint256","nodeType":"ElementaryTypeName","src":"8153:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5312,"indexed":false,"mutability":"mutable","name":"newDebtCeiling","nameLocation":"8185:14:41","nodeType":"VariableDeclaration","scope":5314,"src":"8177:22:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5311,"name":"uint256","nodeType":"ElementaryTypeName","src":"8177:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8129:71:41"},"src":"8105:96:41"},{"anonymous":false,"documentation":{"id":5315,"nodeType":"StructuredDocumentation","src":"8205:261:41","text":" @dev Emitted when the the siloed borrowing state for an asset is changed.\n @param asset The address of the underlying asset of the reserve\n @param oldState The old siloed borrowing state\n @param newState The new siloed borrowing state"},"id":5323,"name":"SiloedBorrowingChanged","nameLocation":"8475:22:41","nodeType":"EventDefinition","parameters":{"id":5322,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5317,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"8514:5:41","nodeType":"VariableDeclaration","scope":5323,"src":"8498:21:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5316,"name":"address","nodeType":"ElementaryTypeName","src":"8498:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5319,"indexed":false,"mutability":"mutable","name":"oldState","nameLocation":"8526:8:41","nodeType":"VariableDeclaration","scope":5323,"src":"8521:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5318,"name":"bool","nodeType":"ElementaryTypeName","src":"8521:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5321,"indexed":false,"mutability":"mutable","name":"newState","nameLocation":"8541:8:41","nodeType":"VariableDeclaration","scope":5323,"src":"8536:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5320,"name":"bool","nodeType":"ElementaryTypeName","src":"8536:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8497:53:41"},"src":"8469:82:41"},{"anonymous":false,"documentation":{"id":5324,"nodeType":"StructuredDocumentation","src":"8555:212:41","text":" @dev Emitted when the bridge protocol fee is updated.\n @param oldBridgeProtocolFee The old protocol fee, expressed in bps\n @param newBridgeProtocolFee The new protocol fee, expressed in bps"},"id":5330,"name":"BridgeProtocolFeeUpdated","nameLocation":"8776:24:41","nodeType":"EventDefinition","parameters":{"id":5329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5326,"indexed":false,"mutability":"mutable","name":"oldBridgeProtocolFee","nameLocation":"8809:20:41","nodeType":"VariableDeclaration","scope":5330,"src":"8801:28:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5325,"name":"uint256","nodeType":"ElementaryTypeName","src":"8801:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5328,"indexed":false,"mutability":"mutable","name":"newBridgeProtocolFee","nameLocation":"8839:20:41","nodeType":"VariableDeclaration","scope":5330,"src":"8831:28:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5327,"name":"uint256","nodeType":"ElementaryTypeName","src":"8831:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8800:60:41"},"src":"8770:91:41"},{"anonymous":false,"documentation":{"id":5331,"nodeType":"StructuredDocumentation","src":"8865:218:41","text":" @dev Emitted when the total premium on flashloans is updated.\n @param oldFlashloanPremiumTotal The old premium, expressed in bps\n @param newFlashloanPremiumTotal The new premium, expressed in bps"},"id":5337,"name":"FlashloanPremiumTotalUpdated","nameLocation":"9092:28:41","nodeType":"EventDefinition","parameters":{"id":5336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5333,"indexed":false,"mutability":"mutable","name":"oldFlashloanPremiumTotal","nameLocation":"9134:24:41","nodeType":"VariableDeclaration","scope":5337,"src":"9126:32:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":5332,"name":"uint128","nodeType":"ElementaryTypeName","src":"9126:7:41","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":5335,"indexed":false,"mutability":"mutable","name":"newFlashloanPremiumTotal","nameLocation":"9172:24:41","nodeType":"VariableDeclaration","scope":5337,"src":"9164:32:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":5334,"name":"uint128","nodeType":"ElementaryTypeName","src":"9164:7:41","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"9120:80:41"},"src":"9086:115:41"},{"anonymous":false,"documentation":{"id":5338,"nodeType":"StructuredDocumentation","src":"9205:242:41","text":" @dev Emitted when the part of the premium that goes to protocol is updated.\n @param oldFlashloanPremiumToProtocol The old premium, expressed in bps\n @param newFlashloanPremiumToProtocol The new premium, expressed in bps"},"id":5344,"name":"FlashloanPremiumToProtocolUpdated","nameLocation":"9456:33:41","nodeType":"EventDefinition","parameters":{"id":5343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5340,"indexed":false,"mutability":"mutable","name":"oldFlashloanPremiumToProtocol","nameLocation":"9503:29:41","nodeType":"VariableDeclaration","scope":5344,"src":"9495:37:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":5339,"name":"uint128","nodeType":"ElementaryTypeName","src":"9495:7:41","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":5342,"indexed":false,"mutability":"mutable","name":"newFlashloanPremiumToProtocol","nameLocation":"9546:29:41","nodeType":"VariableDeclaration","scope":5344,"src":"9538:37:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":5341,"name":"uint128","nodeType":"ElementaryTypeName","src":"9538:7:41","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"9489:90:41"},"src":"9450:130:41"},{"anonymous":false,"documentation":{"id":5345,"nodeType":"StructuredDocumentation","src":"9584:255:41","text":" @dev Emitted when the reserve is set as borrowable/non borrowable in isolation mode.\n @param asset The address of the underlying asset of the reserve\n @param borrowable True if the reserve is borrowable in isolation, false otherwise"},"id":5351,"name":"BorrowableInIsolationChanged","nameLocation":"9848:28:41","nodeType":"EventDefinition","parameters":{"id":5350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5347,"indexed":false,"mutability":"mutable","name":"asset","nameLocation":"9885:5:41","nodeType":"VariableDeclaration","scope":5351,"src":"9877:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5346,"name":"address","nodeType":"ElementaryTypeName","src":"9877:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5349,"indexed":false,"mutability":"mutable","name":"borrowable","nameLocation":"9897:10:41","nodeType":"VariableDeclaration","scope":5351,"src":"9892:15:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5348,"name":"bool","nodeType":"ElementaryTypeName","src":"9892:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9876:32:41"},"src":"9842:67:41"},{"documentation":{"id":5352,"nodeType":"StructuredDocumentation","src":"9913:110:41","text":" @notice Initializes multiple reserves.\n @param input The array of initialization parameters"},"functionSelector":"02fb45e6","id":5359,"implemented":false,"kind":"function","modifiers":[],"name":"initReserves","nameLocation":"10035:12:41","nodeType":"FunctionDefinition","parameters":{"id":5357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5356,"mutability":"mutable","name":"input","nameLocation":"10099:5:41","nodeType":"VariableDeclaration","scope":5359,"src":"10048:56:41","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_InitReserveInput_$21252_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput[]"},"typeName":{"baseType":{"id":5354,"nodeType":"UserDefinedTypeName","pathNode":{"id":5353,"name":"ConfiguratorInputTypes.InitReserveInput","nodeType":"IdentifierPath","referencedDeclaration":21252,"src":"10048:39:41"},"referencedDeclaration":21252,"src":"10048:39:41","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_storage_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput"}},"id":5355,"nodeType":"ArrayTypeName","src":"10048:41:41","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_InitReserveInput_$21252_storage_$dyn_storage_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput[]"}},"visibility":"internal"}],"src":"10047:58:41"},"returnParameters":{"id":5358,"nodeType":"ParameterList","parameters":[],"src":"10114:0:41"},"scope":5567,"src":"10026:89:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5360,"nodeType":"StructuredDocumentation","src":"10119:117:41","text":" @dev Updates the aToken implementation for the reserve.\n @param input The aToken update parameters"},"functionSelector":"bb01c37c","id":5366,"implemented":false,"kind":"function","modifiers":[],"name":"updateAToken","nameLocation":"10248:12:41","nodeType":"FunctionDefinition","parameters":{"id":5364,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5363,"mutability":"mutable","name":"input","nameLocation":"10311:5:41","nodeType":"VariableDeclaration","scope":5366,"src":"10261:55:41","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$21267_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput"},"typeName":{"id":5362,"nodeType":"UserDefinedTypeName","pathNode":{"id":5361,"name":"ConfiguratorInputTypes.UpdateATokenInput","nodeType":"IdentifierPath","referencedDeclaration":21267,"src":"10261:40:41"},"referencedDeclaration":21267,"src":"10261:40:41","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$21267_storage_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput"}},"visibility":"internal"}],"src":"10260:57:41"},"returnParameters":{"id":5365,"nodeType":"ParameterList","parameters":[],"src":"10326:0:41"},"scope":5567,"src":"10239:88:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5367,"nodeType":"StructuredDocumentation","src":"10331:140:41","text":" @notice Updates the stable debt token implementation for the reserve.\n @param input The stableDebtToken update parameters"},"functionSelector":"7626cde3","id":5373,"implemented":false,"kind":"function","modifiers":[],"name":"updateStableDebtToken","nameLocation":"10483:21:41","nodeType":"FunctionDefinition","parameters":{"id":5371,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5370,"mutability":"mutable","name":"input","nameLocation":"10563:5:41","nodeType":"VariableDeclaration","scope":5373,"src":"10510:58:41","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput"},"typeName":{"id":5369,"nodeType":"UserDefinedTypeName","pathNode":{"id":5368,"name":"ConfiguratorInputTypes.UpdateDebtTokenInput","nodeType":"IdentifierPath","referencedDeclaration":21280,"src":"10510:43:41"},"referencedDeclaration":21280,"src":"10510:43:41","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_storage_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput"}},"visibility":"internal"}],"src":"10504:68:41"},"returnParameters":{"id":5372,"nodeType":"ParameterList","parameters":[],"src":"10581:0:41"},"scope":5567,"src":"10474:108:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5374,"nodeType":"StructuredDocumentation","src":"10586:142:41","text":" @notice Updates the variable debt token implementation for the asset.\n @param input The variableDebtToken update parameters"},"functionSelector":"ad4e6432","id":5380,"implemented":false,"kind":"function","modifiers":[],"name":"updateVariableDebtToken","nameLocation":"10740:23:41","nodeType":"FunctionDefinition","parameters":{"id":5378,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5377,"mutability":"mutable","name":"input","nameLocation":"10822:5:41","nodeType":"VariableDeclaration","scope":5380,"src":"10769:58:41","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput"},"typeName":{"id":5376,"nodeType":"UserDefinedTypeName","pathNode":{"id":5375,"name":"ConfiguratorInputTypes.UpdateDebtTokenInput","nodeType":"IdentifierPath","referencedDeclaration":21280,"src":"10769:43:41"},"referencedDeclaration":21280,"src":"10769:43:41","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_storage_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput"}},"visibility":"internal"}],"src":"10763:68:41"},"returnParameters":{"id":5379,"nodeType":"ParameterList","parameters":[],"src":"10840:0:41"},"scope":5567,"src":"10731:110:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5381,"nodeType":"StructuredDocumentation","src":"10845:279:41","text":" @notice Configures borrowing on a reserve.\n @dev Can only be disabled (set to false) if stable borrowing is disabled\n @param asset The address of the underlying asset of the reserve\n @param enabled True if borrowing needs to be enabled, false otherwise"},"functionSelector":"682cf264","id":5388,"implemented":false,"kind":"function","modifiers":[],"name":"setReserveBorrowing","nameLocation":"11136:19:41","nodeType":"FunctionDefinition","parameters":{"id":5386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5383,"mutability":"mutable","name":"asset","nameLocation":"11164:5:41","nodeType":"VariableDeclaration","scope":5388,"src":"11156:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5382,"name":"address","nodeType":"ElementaryTypeName","src":"11156:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5385,"mutability":"mutable","name":"enabled","nameLocation":"11176:7:41","nodeType":"VariableDeclaration","scope":5388,"src":"11171:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5384,"name":"bool","nodeType":"ElementaryTypeName","src":"11171:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11155:29:41"},"returnParameters":{"id":5387,"nodeType":"ParameterList","parameters":[],"src":"11193:0:41"},"scope":5567,"src":"11127:67:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5389,"nodeType":"StructuredDocumentation","src":"11198:630:41","text":" @notice Configures the reserve collateralization parameters.\n @dev All the values are expressed in bps. A value of 10000, results in 100.00%\n @dev The `liquidationBonus` is always above 100%. A value of 105% means the liquidator will receive a 5% bonus\n @param asset The address of the underlying asset of the reserve\n @param ltv The loan to value of the asset when used as collateral\n @param liquidationThreshold The threshold at which loans using this asset as collateral will be considered undercollateralized\n @param liquidationBonus The bonus liquidators receive to liquidate this asset"},"functionSelector":"7c4e560b","id":5400,"implemented":false,"kind":"function","modifiers":[],"name":"configureReserveAsCollateral","nameLocation":"11840:28:41","nodeType":"FunctionDefinition","parameters":{"id":5398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5391,"mutability":"mutable","name":"asset","nameLocation":"11882:5:41","nodeType":"VariableDeclaration","scope":5400,"src":"11874:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5390,"name":"address","nodeType":"ElementaryTypeName","src":"11874:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5393,"mutability":"mutable","name":"ltv","nameLocation":"11901:3:41","nodeType":"VariableDeclaration","scope":5400,"src":"11893:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5392,"name":"uint256","nodeType":"ElementaryTypeName","src":"11893:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5395,"mutability":"mutable","name":"liquidationThreshold","nameLocation":"11918:20:41","nodeType":"VariableDeclaration","scope":5400,"src":"11910:28:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5394,"name":"uint256","nodeType":"ElementaryTypeName","src":"11910:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5397,"mutability":"mutable","name":"liquidationBonus","nameLocation":"11952:16:41","nodeType":"VariableDeclaration","scope":5400,"src":"11944:24:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5396,"name":"uint256","nodeType":"ElementaryTypeName","src":"11944:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11868:104:41"},"returnParameters":{"id":5399,"nodeType":"ParameterList","parameters":[],"src":"11981:0:41"},"scope":5567,"src":"11831:151:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5401,"nodeType":"StructuredDocumentation","src":"11986:300:41","text":" @notice Enable or disable stable rate borrowing on a reserve.\n @dev Can only be enabled (set to true) if borrowing is enabled\n @param asset The address of the underlying asset of the reserve\n @param enabled True if stable rate borrowing needs to be enabled, false otherwise"},"functionSelector":"8a751a60","id":5408,"implemented":false,"kind":"function","modifiers":[],"name":"setReserveStableRateBorrowing","nameLocation":"12298:29:41","nodeType":"FunctionDefinition","parameters":{"id":5406,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5403,"mutability":"mutable","name":"asset","nameLocation":"12336:5:41","nodeType":"VariableDeclaration","scope":5408,"src":"12328:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5402,"name":"address","nodeType":"ElementaryTypeName","src":"12328:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5405,"mutability":"mutable","name":"enabled","nameLocation":"12348:7:41","nodeType":"VariableDeclaration","scope":5408,"src":"12343:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5404,"name":"bool","nodeType":"ElementaryTypeName","src":"12343:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12327:29:41"},"returnParameters":{"id":5407,"nodeType":"ParameterList","parameters":[],"src":"12365:0:41"},"scope":5567,"src":"12289:77:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5409,"nodeType":"StructuredDocumentation","src":"12370:208:41","text":" @notice Enable or disable flashloans on a reserve\n @param asset The address of the underlying asset of the reserve\n @param enabled True if flashloans need to be enabled, false otherwise"},"functionSelector":"f213ef0e","id":5416,"implemented":false,"kind":"function","modifiers":[],"name":"setReserveFlashLoaning","nameLocation":"12590:22:41","nodeType":"FunctionDefinition","parameters":{"id":5414,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5411,"mutability":"mutable","name":"asset","nameLocation":"12621:5:41","nodeType":"VariableDeclaration","scope":5416,"src":"12613:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5410,"name":"address","nodeType":"ElementaryTypeName","src":"12613:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5413,"mutability":"mutable","name":"enabled","nameLocation":"12633:7:41","nodeType":"VariableDeclaration","scope":5416,"src":"12628:12:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5412,"name":"bool","nodeType":"ElementaryTypeName","src":"12628:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12612:29:41"},"returnParameters":{"id":5415,"nodeType":"ParameterList","parameters":[],"src":"12650:0:41"},"scope":5567,"src":"12581:70:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5417,"nodeType":"StructuredDocumentation","src":"12655:199:41","text":" @notice Activate or deactivate a reserve\n @param asset The address of the underlying asset of the reserve\n @param active True if the reserve needs to be active, false otherwise"},"functionSelector":"b736aaeb","id":5424,"implemented":false,"kind":"function","modifiers":[],"name":"setReserveActive","nameLocation":"12866:16:41","nodeType":"FunctionDefinition","parameters":{"id":5422,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5419,"mutability":"mutable","name":"asset","nameLocation":"12891:5:41","nodeType":"VariableDeclaration","scope":5424,"src":"12883:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5418,"name":"address","nodeType":"ElementaryTypeName","src":"12883:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5421,"mutability":"mutable","name":"active","nameLocation":"12903:6:41","nodeType":"VariableDeclaration","scope":5424,"src":"12898:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5420,"name":"bool","nodeType":"ElementaryTypeName","src":"12898:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12882:28:41"},"returnParameters":{"id":5423,"nodeType":"ParameterList","parameters":[],"src":"12919:0:41"},"scope":5567,"src":"12857:63:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5425,"nodeType":"StructuredDocumentation","src":"12924:338:41","text":" @notice Freeze or unfreeze a reserve. A frozen reserve doesn't allow any new supply, borrow\n or rate swap but allows repayments, liquidations, rate rebalances and withdrawals.\n @param asset The address of the underlying asset of the reserve\n @param freeze True if the reserve needs to be frozen, false otherwise"},"functionSelector":"96e957c4","id":5432,"implemented":false,"kind":"function","modifiers":[],"name":"setReserveFreeze","nameLocation":"13274:16:41","nodeType":"FunctionDefinition","parameters":{"id":5430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5427,"mutability":"mutable","name":"asset","nameLocation":"13299:5:41","nodeType":"VariableDeclaration","scope":5432,"src":"13291:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5426,"name":"address","nodeType":"ElementaryTypeName","src":"13291:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5429,"mutability":"mutable","name":"freeze","nameLocation":"13311:6:41","nodeType":"VariableDeclaration","scope":5432,"src":"13306:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5428,"name":"bool","nodeType":"ElementaryTypeName","src":"13306:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13290:28:41"},"returnParameters":{"id":5431,"nodeType":"ParameterList","parameters":[],"src":"13327:0:41"},"scope":5567,"src":"13265:63:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5433,"nodeType":"StructuredDocumentation","src":"13332:596:41","text":" @notice Sets the borrowable in isolation flag for the reserve.\n @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the\n borrowed amount will be accumulated in the isolated collateral's total debt exposure\n @dev Only assets of the same family (e.g. USD stablecoins) should be borrowable in isolation mode to keep\n consistency in the debt ceiling calculations\n @param asset The address of the underlying asset of the reserve\n @param borrowable True if the asset should be borrowable in isolation, false otherwise"},"functionSelector":"38ae0cc3","id":5440,"implemented":false,"kind":"function","modifiers":[],"name":"setBorrowableInIsolation","nameLocation":"13940:24:41","nodeType":"FunctionDefinition","parameters":{"id":5438,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5435,"mutability":"mutable","name":"asset","nameLocation":"13973:5:41","nodeType":"VariableDeclaration","scope":5440,"src":"13965:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5434,"name":"address","nodeType":"ElementaryTypeName","src":"13965:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5437,"mutability":"mutable","name":"borrowable","nameLocation":"13985:10:41","nodeType":"VariableDeclaration","scope":5440,"src":"13980:15:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5436,"name":"bool","nodeType":"ElementaryTypeName","src":"13980:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13964:32:41"},"returnParameters":{"id":5439,"nodeType":"ParameterList","parameters":[],"src":"14005:0:41"},"scope":5567,"src":"13931:75:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5441,"nodeType":"StructuredDocumentation","src":"14010:303:41","text":" @notice Pauses a reserve. A paused reserve does not allow any interaction (supply, borrow, repay,\n swap interest rate, liquidate, atoken transfers).\n @param asset The address of the underlying asset of the reserve\n @param paused True if pausing the reserve, false if unpausing"},"functionSelector":"48d9fba9","id":5448,"implemented":false,"kind":"function","modifiers":[],"name":"setReservePause","nameLocation":"14325:15:41","nodeType":"FunctionDefinition","parameters":{"id":5446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5443,"mutability":"mutable","name":"asset","nameLocation":"14349:5:41","nodeType":"VariableDeclaration","scope":5448,"src":"14341:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5442,"name":"address","nodeType":"ElementaryTypeName","src":"14341:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5445,"mutability":"mutable","name":"paused","nameLocation":"14361:6:41","nodeType":"VariableDeclaration","scope":5448,"src":"14356:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5444,"name":"bool","nodeType":"ElementaryTypeName","src":"14356:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14340:28:41"},"returnParameters":{"id":5447,"nodeType":"ParameterList","parameters":[],"src":"14377:0:41"},"scope":5567,"src":"14316:62:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5449,"nodeType":"StructuredDocumentation","src":"14382:199:41","text":" @notice Updates the reserve factor of a reserve.\n @param asset The address of the underlying asset of the reserve\n @param newReserveFactor The new reserve factor of the reserve"},"functionSelector":"4b4e6753","id":5456,"implemented":false,"kind":"function","modifiers":[],"name":"setReserveFactor","nameLocation":"14593:16:41","nodeType":"FunctionDefinition","parameters":{"id":5454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5451,"mutability":"mutable","name":"asset","nameLocation":"14618:5:41","nodeType":"VariableDeclaration","scope":5456,"src":"14610:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5450,"name":"address","nodeType":"ElementaryTypeName","src":"14610:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5453,"mutability":"mutable","name":"newReserveFactor","nameLocation":"14633:16:41","nodeType":"VariableDeclaration","scope":5456,"src":"14625:24:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5452,"name":"uint256","nodeType":"ElementaryTypeName","src":"14625:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14609:41:41"},"returnParameters":{"id":5455,"nodeType":"ParameterList","parameters":[],"src":"14659:0:41"},"scope":5567,"src":"14584:76:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5457,"nodeType":"StructuredDocumentation","src":"14664:222:41","text":" @notice Sets the interest rate strategy of a reserve.\n @param asset The address of the underlying asset of the reserve\n @param newRateStrategyAddress The address of the new interest strategy contract"},"functionSelector":"1d2118f9","id":5464,"implemented":false,"kind":"function","modifiers":[],"name":"setReserveInterestRateStrategyAddress","nameLocation":"14898:37:41","nodeType":"FunctionDefinition","parameters":{"id":5462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5459,"mutability":"mutable","name":"asset","nameLocation":"14949:5:41","nodeType":"VariableDeclaration","scope":5464,"src":"14941:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5458,"name":"address","nodeType":"ElementaryTypeName","src":"14941:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5461,"mutability":"mutable","name":"newRateStrategyAddress","nameLocation":"14968:22:41","nodeType":"VariableDeclaration","scope":5464,"src":"14960:30:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5460,"name":"address","nodeType":"ElementaryTypeName","src":"14960:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14935:59:41"},"returnParameters":{"id":5463,"nodeType":"ParameterList","parameters":[],"src":"15003:0:41"},"scope":5567,"src":"14889:115:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5465,"nodeType":"StructuredDocumentation","src":"15008:210:41","text":" @notice Pauses or unpauses all the protocol reserves. In the paused state all the protocol interactions\n are suspended.\n @param paused True if protocol needs to be paused, false otherwise"},"functionSelector":"7641f3d9","id":5470,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolPause","nameLocation":"15230:12:41","nodeType":"FunctionDefinition","parameters":{"id":5468,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5467,"mutability":"mutable","name":"paused","nameLocation":"15248:6:41","nodeType":"VariableDeclaration","scope":5470,"src":"15243:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5466,"name":"bool","nodeType":"ElementaryTypeName","src":"15243:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15242:13:41"},"returnParameters":{"id":5469,"nodeType":"ParameterList","parameters":[],"src":"15264:0:41"},"scope":5567,"src":"15221:44:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5471,"nodeType":"StructuredDocumentation","src":"15269:187:41","text":" @notice Updates the borrow cap of a reserve.\n @param asset The address of the underlying asset of the reserve\n @param newBorrowCap The new borrow cap of the reserve"},"functionSelector":"d14a0983","id":5478,"implemented":false,"kind":"function","modifiers":[],"name":"setBorrowCap","nameLocation":"15468:12:41","nodeType":"FunctionDefinition","parameters":{"id":5476,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5473,"mutability":"mutable","name":"asset","nameLocation":"15489:5:41","nodeType":"VariableDeclaration","scope":5478,"src":"15481:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5472,"name":"address","nodeType":"ElementaryTypeName","src":"15481:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5475,"mutability":"mutable","name":"newBorrowCap","nameLocation":"15504:12:41","nodeType":"VariableDeclaration","scope":5478,"src":"15496:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5474,"name":"uint256","nodeType":"ElementaryTypeName","src":"15496:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15480:37:41"},"returnParameters":{"id":5477,"nodeType":"ParameterList","parameters":[],"src":"15526:0:41"},"scope":5567,"src":"15459:68:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5479,"nodeType":"StructuredDocumentation","src":"15531:187:41","text":" @notice Updates the supply cap of a reserve.\n @param asset The address of the underlying asset of the reserve\n @param newSupplyCap The new supply cap of the reserve"},"functionSelector":"571f03e5","id":5486,"implemented":false,"kind":"function","modifiers":[],"name":"setSupplyCap","nameLocation":"15730:12:41","nodeType":"FunctionDefinition","parameters":{"id":5484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5481,"mutability":"mutable","name":"asset","nameLocation":"15751:5:41","nodeType":"VariableDeclaration","scope":5486,"src":"15743:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5480,"name":"address","nodeType":"ElementaryTypeName","src":"15743:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5483,"mutability":"mutable","name":"newSupplyCap","nameLocation":"15766:12:41","nodeType":"VariableDeclaration","scope":5486,"src":"15758:20:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5482,"name":"uint256","nodeType":"ElementaryTypeName","src":"15758:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15742:37:41"},"returnParameters":{"id":5485,"nodeType":"ParameterList","parameters":[],"src":"15788:0:41"},"scope":5567,"src":"15721:68:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5487,"nodeType":"StructuredDocumentation","src":"15793:225:41","text":" @notice Updates the liquidation protocol fee of reserve.\n @param asset The address of the underlying asset of the reserve\n @param newFee The new liquidation protocol fee of the reserve, expressed in bps"},"functionSelector":"26d2cec2","id":5494,"implemented":false,"kind":"function","modifiers":[],"name":"setLiquidationProtocolFee","nameLocation":"16030:25:41","nodeType":"FunctionDefinition","parameters":{"id":5492,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5489,"mutability":"mutable","name":"asset","nameLocation":"16064:5:41","nodeType":"VariableDeclaration","scope":5494,"src":"16056:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5488,"name":"address","nodeType":"ElementaryTypeName","src":"16056:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5491,"mutability":"mutable","name":"newFee","nameLocation":"16079:6:41","nodeType":"VariableDeclaration","scope":5494,"src":"16071:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5490,"name":"uint256","nodeType":"ElementaryTypeName","src":"16071:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16055:31:41"},"returnParameters":{"id":5493,"nodeType":"ParameterList","parameters":[],"src":"16095:0:41"},"scope":5567,"src":"16021:75:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5495,"nodeType":"StructuredDocumentation","src":"16100:205:41","text":" @notice Updates the unbacked mint cap of reserve.\n @param asset The address of the underlying asset of the reserve\n @param newUnbackedMintCap The new unbacked mint cap of the reserve"},"functionSelector":"145f5892","id":5502,"implemented":false,"kind":"function","modifiers":[],"name":"setUnbackedMintCap","nameLocation":"16317:18:41","nodeType":"FunctionDefinition","parameters":{"id":5500,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5497,"mutability":"mutable","name":"asset","nameLocation":"16344:5:41","nodeType":"VariableDeclaration","scope":5502,"src":"16336:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5496,"name":"address","nodeType":"ElementaryTypeName","src":"16336:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5499,"mutability":"mutable","name":"newUnbackedMintCap","nameLocation":"16359:18:41","nodeType":"VariableDeclaration","scope":5502,"src":"16351:26:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5498,"name":"uint256","nodeType":"ElementaryTypeName","src":"16351:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16335:43:41"},"returnParameters":{"id":5501,"nodeType":"ParameterList","parameters":[],"src":"16387:0:41"},"scope":5567,"src":"16308:80:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5503,"nodeType":"StructuredDocumentation","src":"16392:203:41","text":" @notice Assign an efficiency mode (eMode) category to asset.\n @param asset The address of the underlying asset of the reserve\n @param newCategoryId The new category id of the asset"},"functionSelector":"d4fe3f99","id":5510,"implemented":false,"kind":"function","modifiers":[],"name":"setAssetEModeCategory","nameLocation":"16607:21:41","nodeType":"FunctionDefinition","parameters":{"id":5508,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5505,"mutability":"mutable","name":"asset","nameLocation":"16637:5:41","nodeType":"VariableDeclaration","scope":5510,"src":"16629:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5504,"name":"address","nodeType":"ElementaryTypeName","src":"16629:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5507,"mutability":"mutable","name":"newCategoryId","nameLocation":"16650:13:41","nodeType":"VariableDeclaration","scope":5510,"src":"16644:19:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":5506,"name":"uint8","nodeType":"ElementaryTypeName","src":"16644:5:41","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"16628:36:41"},"returnParameters":{"id":5509,"nodeType":"ParameterList","parameters":[],"src":"16673:0:41"},"scope":5567,"src":"16598:76:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5511,"nodeType":"StructuredDocumentation","src":"16678:797:41","text":" @notice Adds a new efficiency mode (eMode) category.\n @dev If zero is provided as oracle address, the default asset oracles will be used to compute the overall debt and\n overcollateralization of the users using this category.\n @dev The new ltv and liquidation threshold must be greater than the base\n ltvs and liquidation thresholds of all assets within the eMode category\n @param categoryId The id of the category to be configured\n @param ltv The ltv associated with the category\n @param liquidationThreshold The liquidation threshold associated with the category\n @param liquidationBonus The liquidation bonus associated with the category\n @param oracle The oracle associated with the category\n @param label A label identifying the category"},"functionSelector":"c19d61e4","id":5526,"implemented":false,"kind":"function","modifiers":[],"name":"setEModeCategory","nameLocation":"17487:16:41","nodeType":"FunctionDefinition","parameters":{"id":5524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5513,"mutability":"mutable","name":"categoryId","nameLocation":"17515:10:41","nodeType":"VariableDeclaration","scope":5526,"src":"17509:16:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":5512,"name":"uint8","nodeType":"ElementaryTypeName","src":"17509:5:41","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":5515,"mutability":"mutable","name":"ltv","nameLocation":"17538:3:41","nodeType":"VariableDeclaration","scope":5526,"src":"17531:10:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":5514,"name":"uint16","nodeType":"ElementaryTypeName","src":"17531:6:41","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":5517,"mutability":"mutable","name":"liquidationThreshold","nameLocation":"17554:20:41","nodeType":"VariableDeclaration","scope":5526,"src":"17547:27:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":5516,"name":"uint16","nodeType":"ElementaryTypeName","src":"17547:6:41","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":5519,"mutability":"mutable","name":"liquidationBonus","nameLocation":"17587:16:41","nodeType":"VariableDeclaration","scope":5526,"src":"17580:23:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":5518,"name":"uint16","nodeType":"ElementaryTypeName","src":"17580:6:41","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":5521,"mutability":"mutable","name":"oracle","nameLocation":"17617:6:41","nodeType":"VariableDeclaration","scope":5526,"src":"17609:14:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5520,"name":"address","nodeType":"ElementaryTypeName","src":"17609:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5523,"mutability":"mutable","name":"label","nameLocation":"17645:5:41","nodeType":"VariableDeclaration","scope":5526,"src":"17629:21:41","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":5522,"name":"string","nodeType":"ElementaryTypeName","src":"17629:6:41","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"17503:151:41"},"returnParameters":{"id":5525,"nodeType":"ParameterList","parameters":[],"src":"17663:0:41"},"scope":5567,"src":"17478:186:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5527,"nodeType":"StructuredDocumentation","src":"17668:101:41","text":" @notice Drops a reserve entirely.\n @param asset The address of the reserve to drop"},"functionSelector":"63c9b860","id":5532,"implemented":false,"kind":"function","modifiers":[],"name":"dropReserve","nameLocation":"17781:11:41","nodeType":"FunctionDefinition","parameters":{"id":5530,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5529,"mutability":"mutable","name":"asset","nameLocation":"17801:5:41","nodeType":"VariableDeclaration","scope":5532,"src":"17793:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5528,"name":"address","nodeType":"ElementaryTypeName","src":"17793:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17792:15:41"},"returnParameters":{"id":5531,"nodeType":"ParameterList","parameters":[],"src":"17816:0:41"},"scope":5567,"src":"17772:45:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5533,"nodeType":"StructuredDocumentation","src":"17821:182:41","text":" @notice Updates the bridge fee collected by the protocol reserves.\n @param newBridgeProtocolFee The part of the fee sent to the protocol treasury, expressed in bps"},"functionSelector":"3036b439","id":5538,"implemented":false,"kind":"function","modifiers":[],"name":"updateBridgeProtocolFee","nameLocation":"18015:23:41","nodeType":"FunctionDefinition","parameters":{"id":5536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5535,"mutability":"mutable","name":"newBridgeProtocolFee","nameLocation":"18047:20:41","nodeType":"VariableDeclaration","scope":5538,"src":"18039:28:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5534,"name":"uint256","nodeType":"ElementaryTypeName","src":"18039:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18038:30:41"},"returnParameters":{"id":5537,"nodeType":"ParameterList","parameters":[],"src":"18077:0:41"},"scope":5567,"src":"18006:72:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5539,"nodeType":"StructuredDocumentation","src":"18082:379:41","text":" @notice Updates the total flash loan premium.\n Total flash loan premium consists of two parts:\n - A part is sent to aToken holders as extra balance\n - A part is collected by the protocol reserves\n @dev Expressed in bps\n @dev The premium is calculated on the total amount borrowed\n @param newFlashloanPremiumTotal The total flashloan premium"},"functionSelector":"8a493676","id":5544,"implemented":false,"kind":"function","modifiers":[],"name":"updateFlashloanPremiumTotal","nameLocation":"18473:27:41","nodeType":"FunctionDefinition","parameters":{"id":5542,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5541,"mutability":"mutable","name":"newFlashloanPremiumTotal","nameLocation":"18509:24:41","nodeType":"VariableDeclaration","scope":5544,"src":"18501:32:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":5540,"name":"uint128","nodeType":"ElementaryTypeName","src":"18501:7:41","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"18500:34:41"},"returnParameters":{"id":5543,"nodeType":"ParameterList","parameters":[],"src":"18543:0:41"},"scope":5567,"src":"18464:80:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5545,"nodeType":"StructuredDocumentation","src":"18548:296:41","text":" @notice Updates the flash loan premium collected by protocol reserves\n @dev Expressed in bps\n @dev The premium to protocol is calculated on the total flashloan premium\n @param newFlashloanPremiumToProtocol The part of the flashloan premium sent to the protocol treasury"},"functionSelector":"1df970bd","id":5550,"implemented":false,"kind":"function","modifiers":[],"name":"updateFlashloanPremiumToProtocol","nameLocation":"18856:32:41","nodeType":"FunctionDefinition","parameters":{"id":5548,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5547,"mutability":"mutable","name":"newFlashloanPremiumToProtocol","nameLocation":"18897:29:41","nodeType":"VariableDeclaration","scope":5550,"src":"18889:37:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":5546,"name":"uint128","nodeType":"ElementaryTypeName","src":"18889:7:41","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"18888:39:41"},"returnParameters":{"id":5549,"nodeType":"ParameterList","parameters":[],"src":"18936:0:41"},"scope":5567,"src":"18847:90:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5551,"nodeType":"StructuredDocumentation","src":"18941:106:41","text":" @notice Sets the debt ceiling for an asset.\n @param newDebtCeiling The new debt ceiling"},"functionSelector":"aeb4fcc1","id":5558,"implemented":false,"kind":"function","modifiers":[],"name":"setDebtCeiling","nameLocation":"19059:14:41","nodeType":"FunctionDefinition","parameters":{"id":5556,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5553,"mutability":"mutable","name":"asset","nameLocation":"19082:5:41","nodeType":"VariableDeclaration","scope":5558,"src":"19074:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5552,"name":"address","nodeType":"ElementaryTypeName","src":"19074:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5555,"mutability":"mutable","name":"newDebtCeiling","nameLocation":"19097:14:41","nodeType":"VariableDeclaration","scope":5558,"src":"19089:22:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5554,"name":"uint256","nodeType":"ElementaryTypeName","src":"19089:7:41","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19073:39:41"},"returnParameters":{"id":5557,"nodeType":"ParameterList","parameters":[],"src":"19121:0:41"},"scope":5567,"src":"19050:72:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5559,"nodeType":"StructuredDocumentation","src":"19126:107:41","text":" @notice Sets siloed borrowing for an asset\n @param siloed The new siloed borrowing state"},"functionSelector":"a7fa83b7","id":5566,"implemented":false,"kind":"function","modifiers":[],"name":"setSiloedBorrowing","nameLocation":"19245:18:41","nodeType":"FunctionDefinition","parameters":{"id":5564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5561,"mutability":"mutable","name":"asset","nameLocation":"19272:5:41","nodeType":"VariableDeclaration","scope":5566,"src":"19264:13:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5560,"name":"address","nodeType":"ElementaryTypeName","src":"19264:7:41","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5563,"mutability":"mutable","name":"siloed","nameLocation":"19284:6:41","nodeType":"VariableDeclaration","scope":5566,"src":"19279:11:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5562,"name":"bool","nodeType":"ElementaryTypeName","src":"19279:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19263:28:41"},"returnParameters":{"id":5565,"nodeType":"ParameterList","parameters":[],"src":"19300:0:41"},"scope":5567,"src":"19236:65:41","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":5568,"src":"274:19029:41","usedErrors":[]}],"src":"37:19267:41"},"id":41},"@aave/core-v3/contracts/interfaces/IPoolDataProvider.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolDataProvider.sol","exportedSymbols":{"IPoolAddressesProvider":[5069],"IPoolDataProvider":[5791]},"id":5792,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":5569,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:42"},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"./IPoolAddressesProvider.sol","id":5571,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5792,"sourceUnit":5070,"src":"62:68:42","symbolAliases":[{"foreign":{"id":5570,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:22:42","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolDataProvider","contractDependencies":[],"contractKind":"interface","documentation":{"id":5572,"nodeType":"StructuredDocumentation","src":"132:112:42","text":" @title IPoolDataProvider\n @author Aave\n @notice Defines the basic interface of a PoolDataProvider"},"fullyImplemented":false,"id":5791,"linearizedBaseContracts":[5791],"name":"IPoolDataProvider","nameLocation":"255:17:42","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IPoolDataProvider.TokenData","id":5577,"members":[{"constant":false,"id":5574,"mutability":"mutable","name":"symbol","nameLocation":"307:6:42","nodeType":"VariableDeclaration","scope":5577,"src":"300:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":5573,"name":"string","nodeType":"ElementaryTypeName","src":"300:6:42","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":5576,"mutability":"mutable","name":"tokenAddress","nameLocation":"327:12:42","nodeType":"VariableDeclaration","scope":5577,"src":"319:20:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5575,"name":"address","nodeType":"ElementaryTypeName","src":"319:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"TokenData","nameLocation":"284:9:42","nodeType":"StructDefinition","scope":5791,"src":"277:67:42","visibility":"public"},{"documentation":{"id":5578,"nodeType":"StructuredDocumentation","src":"348:146:42","text":" @notice Returns the address for the PoolAddressesProvider contract.\n @return The address for the PoolAddressesProvider contract"},"functionSelector":"0542975c","id":5584,"implemented":false,"kind":"function","modifiers":[],"name":"ADDRESSES_PROVIDER","nameLocation":"506:18:42","nodeType":"FunctionDefinition","parameters":{"id":5579,"nodeType":"ParameterList","parameters":[],"src":"524:2:42"},"returnParameters":{"id":5583,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5582,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5584,"src":"550:22:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":5581,"nodeType":"UserDefinedTypeName","pathNode":{"id":5580,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"550:22:42"},"referencedDeclaration":5069,"src":"550:22:42","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"549:24:42"},"scope":5791,"src":"497:77:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5585,"nodeType":"StructuredDocumentation","src":"578:245:42","text":" @notice Returns the list of the existing reserves in the pool.\n @dev Handling MKR and ETH in a different way since they do not have standard `symbol` functions.\n @return The list of reserves, pairs of symbols and addresses"},"functionSelector":"b316ff89","id":5592,"implemented":false,"kind":"function","modifiers":[],"name":"getAllReservesTokens","nameLocation":"835:20:42","nodeType":"FunctionDefinition","parameters":{"id":5586,"nodeType":"ParameterList","parameters":[],"src":"855:2:42"},"returnParameters":{"id":5591,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5590,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5592,"src":"881:18:42","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5577_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData[]"},"typeName":{"baseType":{"id":5588,"nodeType":"UserDefinedTypeName","pathNode":{"id":5587,"name":"TokenData","nodeType":"IdentifierPath","referencedDeclaration":5577,"src":"881:9:42"},"referencedDeclaration":5577,"src":"881:9:42","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5577_storage_ptr","typeString":"struct IPoolDataProvider.TokenData"}},"id":5589,"nodeType":"ArrayTypeName","src":"881:11:42","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5577_storage_$dyn_storage_ptr","typeString":"struct IPoolDataProvider.TokenData[]"}},"visibility":"internal"}],"src":"880:20:42"},"scope":5791,"src":"826:75:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5593,"nodeType":"StructuredDocumentation","src":"905:141:42","text":" @notice Returns the list of the existing ATokens in the pool.\n @return The list of ATokens, pairs of symbols and addresses"},"functionSelector":"f561ae41","id":5600,"implemented":false,"kind":"function","modifiers":[],"name":"getAllATokens","nameLocation":"1058:13:42","nodeType":"FunctionDefinition","parameters":{"id":5594,"nodeType":"ParameterList","parameters":[],"src":"1071:2:42"},"returnParameters":{"id":5599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5598,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5600,"src":"1097:18:42","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5577_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData[]"},"typeName":{"baseType":{"id":5596,"nodeType":"UserDefinedTypeName","pathNode":{"id":5595,"name":"TokenData","nodeType":"IdentifierPath","referencedDeclaration":5577,"src":"1097:9:42"},"referencedDeclaration":5577,"src":"1097:9:42","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5577_storage_ptr","typeString":"struct IPoolDataProvider.TokenData"}},"id":5597,"nodeType":"ArrayTypeName","src":"1097:11:42","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5577_storage_$dyn_storage_ptr","typeString":"struct IPoolDataProvider.TokenData[]"}},"visibility":"internal"}],"src":"1096:20:42"},"scope":5791,"src":"1049:68:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5601,"nodeType":"StructuredDocumentation","src":"1121:907:42","text":" @notice Returns the configuration data of the reserve\n @dev Not returning borrow and supply caps for compatibility, nor pause flag\n @param asset The address of the underlying asset of the reserve\n @return decimals The number of decimals of the reserve\n @return ltv The ltv of the reserve\n @return liquidationThreshold The liquidationThreshold of the reserve\n @return liquidationBonus The liquidationBonus of the reserve\n @return reserveFactor The reserveFactor of the reserve\n @return usageAsCollateralEnabled True if the usage as collateral is enabled, false otherwise\n @return borrowingEnabled True if borrowing is enabled, false otherwise\n @return stableBorrowRateEnabled True if stable rate borrowing is enabled, false otherwise\n @return isActive True if it is active, false otherwise\n @return isFrozen True if it is frozen, false otherwise"},"functionSelector":"3e150141","id":5626,"implemented":false,"kind":"function","modifiers":[],"name":"getReserveConfigurationData","nameLocation":"2040:27:42","nodeType":"FunctionDefinition","parameters":{"id":5604,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5603,"mutability":"mutable","name":"asset","nameLocation":"2081:5:42","nodeType":"VariableDeclaration","scope":5626,"src":"2073:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5602,"name":"address","nodeType":"ElementaryTypeName","src":"2073:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2067:23:42"},"returnParameters":{"id":5625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5606,"mutability":"mutable","name":"decimals","nameLocation":"2141:8:42","nodeType":"VariableDeclaration","scope":5626,"src":"2133:16:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5605,"name":"uint256","nodeType":"ElementaryTypeName","src":"2133:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5608,"mutability":"mutable","name":"ltv","nameLocation":"2165:3:42","nodeType":"VariableDeclaration","scope":5626,"src":"2157:11:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5607,"name":"uint256","nodeType":"ElementaryTypeName","src":"2157:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5610,"mutability":"mutable","name":"liquidationThreshold","nameLocation":"2184:20:42","nodeType":"VariableDeclaration","scope":5626,"src":"2176:28:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5609,"name":"uint256","nodeType":"ElementaryTypeName","src":"2176:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5612,"mutability":"mutable","name":"liquidationBonus","nameLocation":"2220:16:42","nodeType":"VariableDeclaration","scope":5626,"src":"2212:24:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5611,"name":"uint256","nodeType":"ElementaryTypeName","src":"2212:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5614,"mutability":"mutable","name":"reserveFactor","nameLocation":"2252:13:42","nodeType":"VariableDeclaration","scope":5626,"src":"2244:21:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5613,"name":"uint256","nodeType":"ElementaryTypeName","src":"2244:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5616,"mutability":"mutable","name":"usageAsCollateralEnabled","nameLocation":"2278:24:42","nodeType":"VariableDeclaration","scope":5626,"src":"2273:29:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5615,"name":"bool","nodeType":"ElementaryTypeName","src":"2273:4:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5618,"mutability":"mutable","name":"borrowingEnabled","nameLocation":"2315:16:42","nodeType":"VariableDeclaration","scope":5626,"src":"2310:21:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5617,"name":"bool","nodeType":"ElementaryTypeName","src":"2310:4:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5620,"mutability":"mutable","name":"stableBorrowRateEnabled","nameLocation":"2344:23:42","nodeType":"VariableDeclaration","scope":5626,"src":"2339:28:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5619,"name":"bool","nodeType":"ElementaryTypeName","src":"2339:4:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5622,"mutability":"mutable","name":"isActive","nameLocation":"2380:8:42","nodeType":"VariableDeclaration","scope":5626,"src":"2375:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5621,"name":"bool","nodeType":"ElementaryTypeName","src":"2375:4:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5624,"mutability":"mutable","name":"isFrozen","nameLocation":"2401:8:42","nodeType":"VariableDeclaration","scope":5626,"src":"2396:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5623,"name":"bool","nodeType":"ElementaryTypeName","src":"2396:4:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2125:290:42"},"scope":5791,"src":"2031:385:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5627,"nodeType":"StructuredDocumentation","src":"2420:184:42","text":" @notice Returns the efficiency mode category of the reserve\n @param asset The address of the underlying asset of the reserve\n @return The eMode id of the reserve"},"functionSelector":"163a0f20","id":5634,"implemented":false,"kind":"function","modifiers":[],"name":"getReserveEModeCategory","nameLocation":"2616:23:42","nodeType":"FunctionDefinition","parameters":{"id":5630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5629,"mutability":"mutable","name":"asset","nameLocation":"2648:5:42","nodeType":"VariableDeclaration","scope":5634,"src":"2640:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5628,"name":"address","nodeType":"ElementaryTypeName","src":"2640:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2639:15:42"},"returnParameters":{"id":5633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5632,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5634,"src":"2678:7:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5631,"name":"uint256","nodeType":"ElementaryTypeName","src":"2678:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2677:9:42"},"scope":5791,"src":"2607:80:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5635,"nodeType":"StructuredDocumentation","src":"2691:240:42","text":" @notice Returns the caps parameters of the reserve\n @param asset The address of the underlying asset of the reserve\n @return borrowCap The borrow cap of the reserve\n @return supplyCap The supply cap of the reserve"},"functionSelector":"46fbe558","id":5644,"implemented":false,"kind":"function","modifiers":[],"name":"getReserveCaps","nameLocation":"2943:14:42","nodeType":"FunctionDefinition","parameters":{"id":5638,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5637,"mutability":"mutable","name":"asset","nameLocation":"2971:5:42","nodeType":"VariableDeclaration","scope":5644,"src":"2963:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5636,"name":"address","nodeType":"ElementaryTypeName","src":"2963:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2957:23:42"},"returnParameters":{"id":5643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5640,"mutability":"mutable","name":"borrowCap","nameLocation":"3012:9:42","nodeType":"VariableDeclaration","scope":5644,"src":"3004:17:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5639,"name":"uint256","nodeType":"ElementaryTypeName","src":"3004:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5642,"mutability":"mutable","name":"supplyCap","nameLocation":"3031:9:42","nodeType":"VariableDeclaration","scope":5644,"src":"3023:17:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5641,"name":"uint256","nodeType":"ElementaryTypeName","src":"3023:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3003:38:42"},"scope":5791,"src":"2934:108:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5645,"nodeType":"StructuredDocumentation","src":"3046:187:42","text":" @notice Returns if the pool is paused\n @param asset The address of the underlying asset of the reserve\n @return isPaused True if the pool is paused, false otherwise"},"functionSelector":"b55d9904","id":5652,"implemented":false,"kind":"function","modifiers":[],"name":"getPaused","nameLocation":"3245:9:42","nodeType":"FunctionDefinition","parameters":{"id":5648,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5647,"mutability":"mutable","name":"asset","nameLocation":"3263:5:42","nodeType":"VariableDeclaration","scope":5652,"src":"3255:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5646,"name":"address","nodeType":"ElementaryTypeName","src":"3255:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3254:15:42"},"returnParameters":{"id":5651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5650,"mutability":"mutable","name":"isPaused","nameLocation":"3298:8:42","nodeType":"VariableDeclaration","scope":5652,"src":"3293:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5649,"name":"bool","nodeType":"ElementaryTypeName","src":"3293:4:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3292:15:42"},"scope":5791,"src":"3236:72:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5653,"nodeType":"StructuredDocumentation","src":"3312:180:42","text":" @notice Returns the siloed borrowing flag\n @param asset The address of the underlying asset of the reserve\n @return True if the asset is siloed for borrowing"},"functionSelector":"fcf40a62","id":5660,"implemented":false,"kind":"function","modifiers":[],"name":"getSiloedBorrowing","nameLocation":"3504:18:42","nodeType":"FunctionDefinition","parameters":{"id":5656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5655,"mutability":"mutable","name":"asset","nameLocation":"3531:5:42","nodeType":"VariableDeclaration","scope":5660,"src":"3523:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5654,"name":"address","nodeType":"ElementaryTypeName","src":"3523:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3522:15:42"},"returnParameters":{"id":5659,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5658,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5660,"src":"3561:4:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5657,"name":"bool","nodeType":"ElementaryTypeName","src":"3561:4:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3560:6:42"},"scope":5791,"src":"3495:72:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5661,"nodeType":"StructuredDocumentation","src":"3571:186:42","text":" @notice Returns the protocol fee on the liquidation bonus\n @param asset The address of the underlying asset of the reserve\n @return The protocol fee on liquidation"},"functionSelector":"3cb8a622","id":5668,"implemented":false,"kind":"function","modifiers":[],"name":"getLiquidationProtocolFee","nameLocation":"3769:25:42","nodeType":"FunctionDefinition","parameters":{"id":5664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5663,"mutability":"mutable","name":"asset","nameLocation":"3803:5:42","nodeType":"VariableDeclaration","scope":5668,"src":"3795:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5662,"name":"address","nodeType":"ElementaryTypeName","src":"3795:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3794:15:42"},"returnParameters":{"id":5667,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5666,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5668,"src":"3833:7:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5665,"name":"uint256","nodeType":"ElementaryTypeName","src":"3833:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3832:9:42"},"scope":5791,"src":"3760:82:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5669,"nodeType":"StructuredDocumentation","src":"3846:186:42","text":" @notice Returns the unbacked mint cap of the reserve\n @param asset The address of the underlying asset of the reserve\n @return The unbacked mint cap of the reserve"},"functionSelector":"7ba1ae36","id":5676,"implemented":false,"kind":"function","modifiers":[],"name":"getUnbackedMintCap","nameLocation":"4044:18:42","nodeType":"FunctionDefinition","parameters":{"id":5672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5671,"mutability":"mutable","name":"asset","nameLocation":"4071:5:42","nodeType":"VariableDeclaration","scope":5676,"src":"4063:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5670,"name":"address","nodeType":"ElementaryTypeName","src":"4063:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4062:15:42"},"returnParameters":{"id":5675,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5674,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5676,"src":"4101:7:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5673,"name":"uint256","nodeType":"ElementaryTypeName","src":"4101:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4100:9:42"},"scope":5791,"src":"4035:75:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5677,"nodeType":"StructuredDocumentation","src":"4114:176:42","text":" @notice Returns the debt ceiling of the reserve\n @param asset The address of the underlying asset of the reserve\n @return The debt ceiling of the reserve"},"functionSelector":"3c798109","id":5684,"implemented":false,"kind":"function","modifiers":[],"name":"getDebtCeiling","nameLocation":"4302:14:42","nodeType":"FunctionDefinition","parameters":{"id":5680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5679,"mutability":"mutable","name":"asset","nameLocation":"4325:5:42","nodeType":"VariableDeclaration","scope":5684,"src":"4317:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5678,"name":"address","nodeType":"ElementaryTypeName","src":"4317:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4316:15:42"},"returnParameters":{"id":5683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5682,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5684,"src":"4355:7:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5681,"name":"uint256","nodeType":"ElementaryTypeName","src":"4355:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4354:9:42"},"scope":5791,"src":"4293:71:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5685,"nodeType":"StructuredDocumentation","src":"4368:95:42","text":" @notice Returns the debt ceiling decimals\n @return The debt ceiling decimals"},"functionSelector":"69b169e1","id":5690,"implemented":false,"kind":"function","modifiers":[],"name":"getDebtCeilingDecimals","nameLocation":"4475:22:42","nodeType":"FunctionDefinition","parameters":{"id":5686,"nodeType":"ParameterList","parameters":[],"src":"4497:2:42"},"returnParameters":{"id":5689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5688,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5690,"src":"4523:7:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5687,"name":"uint256","nodeType":"ElementaryTypeName","src":"4523:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4522:9:42"},"scope":5791,"src":"4466:66:42","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":5691,"nodeType":"StructuredDocumentation","src":"4536:968:42","text":" @notice Returns the reserve data\n @param asset The address of the underlying asset of the reserve\n @return unbacked The amount of unbacked tokens\n @return accruedToTreasuryScaled The scaled amount of tokens accrued to treasury that is to be minted\n @return totalAToken The total supply of the aToken\n @return totalStableDebt The total stable debt of the reserve\n @return totalVariableDebt The total variable debt of the reserve\n @return liquidityRate The liquidity rate of the reserve\n @return variableBorrowRate The variable borrow rate of the reserve\n @return stableBorrowRate The stable borrow rate of the reserve\n @return averageStableBorrowRate The average stable borrow rate of the reserve\n @return liquidityIndex The liquidity index of the reserve\n @return variableBorrowIndex The variable borrow index of the reserve\n @return lastUpdateTimestamp The timestamp of the last update of the reserve"},"functionSelector":"35ea6a75","id":5720,"implemented":false,"kind":"function","modifiers":[],"name":"getReserveData","nameLocation":"5516:14:42","nodeType":"FunctionDefinition","parameters":{"id":5694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5693,"mutability":"mutable","name":"asset","nameLocation":"5544:5:42","nodeType":"VariableDeclaration","scope":5720,"src":"5536:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5692,"name":"address","nodeType":"ElementaryTypeName","src":"5536:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5530:23:42"},"returnParameters":{"id":5719,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5696,"mutability":"mutable","name":"unbacked","nameLocation":"5604:8:42","nodeType":"VariableDeclaration","scope":5720,"src":"5596:16:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5695,"name":"uint256","nodeType":"ElementaryTypeName","src":"5596:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5698,"mutability":"mutable","name":"accruedToTreasuryScaled","nameLocation":"5628:23:42","nodeType":"VariableDeclaration","scope":5720,"src":"5620:31:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5697,"name":"uint256","nodeType":"ElementaryTypeName","src":"5620:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5700,"mutability":"mutable","name":"totalAToken","nameLocation":"5667:11:42","nodeType":"VariableDeclaration","scope":5720,"src":"5659:19:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5699,"name":"uint256","nodeType":"ElementaryTypeName","src":"5659:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5702,"mutability":"mutable","name":"totalStableDebt","nameLocation":"5694:15:42","nodeType":"VariableDeclaration","scope":5720,"src":"5686:23:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5701,"name":"uint256","nodeType":"ElementaryTypeName","src":"5686:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5704,"mutability":"mutable","name":"totalVariableDebt","nameLocation":"5725:17:42","nodeType":"VariableDeclaration","scope":5720,"src":"5717:25:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5703,"name":"uint256","nodeType":"ElementaryTypeName","src":"5717:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5706,"mutability":"mutable","name":"liquidityRate","nameLocation":"5758:13:42","nodeType":"VariableDeclaration","scope":5720,"src":"5750:21:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5705,"name":"uint256","nodeType":"ElementaryTypeName","src":"5750:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5708,"mutability":"mutable","name":"variableBorrowRate","nameLocation":"5787:18:42","nodeType":"VariableDeclaration","scope":5720,"src":"5779:26:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5707,"name":"uint256","nodeType":"ElementaryTypeName","src":"5779:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5710,"mutability":"mutable","name":"stableBorrowRate","nameLocation":"5821:16:42","nodeType":"VariableDeclaration","scope":5720,"src":"5813:24:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5709,"name":"uint256","nodeType":"ElementaryTypeName","src":"5813:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5712,"mutability":"mutable","name":"averageStableBorrowRate","nameLocation":"5853:23:42","nodeType":"VariableDeclaration","scope":5720,"src":"5845:31:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5711,"name":"uint256","nodeType":"ElementaryTypeName","src":"5845:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5714,"mutability":"mutable","name":"liquidityIndex","nameLocation":"5892:14:42","nodeType":"VariableDeclaration","scope":5720,"src":"5884:22:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5713,"name":"uint256","nodeType":"ElementaryTypeName","src":"5884:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5716,"mutability":"mutable","name":"variableBorrowIndex","nameLocation":"5922:19:42","nodeType":"VariableDeclaration","scope":5720,"src":"5914:27:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5715,"name":"uint256","nodeType":"ElementaryTypeName","src":"5914:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5718,"mutability":"mutable","name":"lastUpdateTimestamp","nameLocation":"5956:19:42","nodeType":"VariableDeclaration","scope":5720,"src":"5949:26:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":5717,"name":"uint40","nodeType":"ElementaryTypeName","src":"5949:6:42","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"5588:393:42"},"scope":5791,"src":"5507:475:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5721,"nodeType":"StructuredDocumentation","src":"5986:189:42","text":" @notice Returns the total supply of aTokens for a given asset\n @param asset The address of the underlying asset of the reserve\n @return The total supply of the aToken"},"functionSelector":"51460e25","id":5728,"implemented":false,"kind":"function","modifiers":[],"name":"getATokenTotalSupply","nameLocation":"6187:20:42","nodeType":"FunctionDefinition","parameters":{"id":5724,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5723,"mutability":"mutable","name":"asset","nameLocation":"6216:5:42","nodeType":"VariableDeclaration","scope":5728,"src":"6208:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5722,"name":"address","nodeType":"ElementaryTypeName","src":"6208:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6207:15:42"},"returnParameters":{"id":5727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5726,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5728,"src":"6246:7:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5725,"name":"uint256","nodeType":"ElementaryTypeName","src":"6246:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6245:9:42"},"scope":5791,"src":"6178:77:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5729,"nodeType":"StructuredDocumentation","src":"6259:170:42","text":" @notice Returns the total debt for a given asset\n @param asset The address of the underlying asset of the reserve\n @return The total debt for asset"},"functionSelector":"4d44ac4f","id":5736,"implemented":false,"kind":"function","modifiers":[],"name":"getTotalDebt","nameLocation":"6441:12:42","nodeType":"FunctionDefinition","parameters":{"id":5732,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5731,"mutability":"mutable","name":"asset","nameLocation":"6462:5:42","nodeType":"VariableDeclaration","scope":5736,"src":"6454:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5730,"name":"address","nodeType":"ElementaryTypeName","src":"6454:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6453:15:42"},"returnParameters":{"id":5735,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5734,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5736,"src":"6492:7:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5733,"name":"uint256","nodeType":"ElementaryTypeName","src":"6492:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6491:9:42"},"scope":5791,"src":"6432:69:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5737,"nodeType":"StructuredDocumentation","src":"6505:854:42","text":" @notice Returns the user data in a reserve\n @param asset The address of the underlying asset of the reserve\n @param user The address of the user\n @return currentATokenBalance The current AToken balance of the user\n @return currentStableDebt The current stable debt of the user\n @return currentVariableDebt The current variable debt of the user\n @return principalStableDebt The principal stable debt of the user\n @return scaledVariableDebt The scaled variable debt of the user\n @return stableBorrowRate The stable borrow rate of the user\n @return liquidityRate The liquidity rate of the reserve\n @return stableRateLastUpdated The timestamp of the last update of the user stable rate\n @return usageAsCollateralEnabled True if the user is using the asset as collateral, false\n         otherwise"},"functionSelector":"28dd2d01","id":5762,"implemented":false,"kind":"function","modifiers":[],"name":"getUserReserveData","nameLocation":"7371:18:42","nodeType":"FunctionDefinition","parameters":{"id":5742,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5739,"mutability":"mutable","name":"asset","nameLocation":"7403:5:42","nodeType":"VariableDeclaration","scope":5762,"src":"7395:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5738,"name":"address","nodeType":"ElementaryTypeName","src":"7395:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5741,"mutability":"mutable","name":"user","nameLocation":"7422:4:42","nodeType":"VariableDeclaration","scope":5762,"src":"7414:12:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5740,"name":"address","nodeType":"ElementaryTypeName","src":"7414:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7389:41:42"},"returnParameters":{"id":5761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5744,"mutability":"mutable","name":"currentATokenBalance","nameLocation":"7481:20:42","nodeType":"VariableDeclaration","scope":5762,"src":"7473:28:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5743,"name":"uint256","nodeType":"ElementaryTypeName","src":"7473:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5746,"mutability":"mutable","name":"currentStableDebt","nameLocation":"7517:17:42","nodeType":"VariableDeclaration","scope":5762,"src":"7509:25:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5745,"name":"uint256","nodeType":"ElementaryTypeName","src":"7509:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5748,"mutability":"mutable","name":"currentVariableDebt","nameLocation":"7550:19:42","nodeType":"VariableDeclaration","scope":5762,"src":"7542:27:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5747,"name":"uint256","nodeType":"ElementaryTypeName","src":"7542:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5750,"mutability":"mutable","name":"principalStableDebt","nameLocation":"7585:19:42","nodeType":"VariableDeclaration","scope":5762,"src":"7577:27:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5749,"name":"uint256","nodeType":"ElementaryTypeName","src":"7577:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5752,"mutability":"mutable","name":"scaledVariableDebt","nameLocation":"7620:18:42","nodeType":"VariableDeclaration","scope":5762,"src":"7612:26:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5751,"name":"uint256","nodeType":"ElementaryTypeName","src":"7612:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5754,"mutability":"mutable","name":"stableBorrowRate","nameLocation":"7654:16:42","nodeType":"VariableDeclaration","scope":5762,"src":"7646:24:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5753,"name":"uint256","nodeType":"ElementaryTypeName","src":"7646:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5756,"mutability":"mutable","name":"liquidityRate","nameLocation":"7686:13:42","nodeType":"VariableDeclaration","scope":5762,"src":"7678:21:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5755,"name":"uint256","nodeType":"ElementaryTypeName","src":"7678:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5758,"mutability":"mutable","name":"stableRateLastUpdated","nameLocation":"7714:21:42","nodeType":"VariableDeclaration","scope":5762,"src":"7707:28:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":5757,"name":"uint40","nodeType":"ElementaryTypeName","src":"7707:6:42","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"constant":false,"id":5760,"mutability":"mutable","name":"usageAsCollateralEnabled","nameLocation":"7748:24:42","nodeType":"VariableDeclaration","scope":5762,"src":"7743:29:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5759,"name":"bool","nodeType":"ElementaryTypeName","src":"7743:4:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7465:313:42"},"scope":5791,"src":"7362:417:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5763,"nodeType":"StructuredDocumentation","src":"7783:357:42","text":" @notice Returns the token addresses of the reserve\n @param asset The address of the underlying asset of the reserve\n @return aTokenAddress The AToken address of the reserve\n @return stableDebtTokenAddress The StableDebtToken address of the reserve\n @return variableDebtTokenAddress The VariableDebtToken address of the reserve"},"functionSelector":"d2493b6c","id":5774,"implemented":false,"kind":"function","modifiers":[],"name":"getReserveTokensAddresses","nameLocation":"8152:25:42","nodeType":"FunctionDefinition","parameters":{"id":5766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5765,"mutability":"mutable","name":"asset","nameLocation":"8191:5:42","nodeType":"VariableDeclaration","scope":5774,"src":"8183:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5764,"name":"address","nodeType":"ElementaryTypeName","src":"8183:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8177:23:42"},"returnParameters":{"id":5773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5768,"mutability":"mutable","name":"aTokenAddress","nameLocation":"8251:13:42","nodeType":"VariableDeclaration","scope":5774,"src":"8243:21:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5767,"name":"address","nodeType":"ElementaryTypeName","src":"8243:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5770,"mutability":"mutable","name":"stableDebtTokenAddress","nameLocation":"8280:22:42","nodeType":"VariableDeclaration","scope":5774,"src":"8272:30:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5769,"name":"address","nodeType":"ElementaryTypeName","src":"8272:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5772,"mutability":"mutable","name":"variableDebtTokenAddress","nameLocation":"8318:24:42","nodeType":"VariableDeclaration","scope":5774,"src":"8310:32:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5771,"name":"address","nodeType":"ElementaryTypeName","src":"8310:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8235:113:42"},"scope":5791,"src":"8143:206:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5775,"nodeType":"StructuredDocumentation","src":"8353:214:42","text":" @notice Returns the address of the Interest Rate strategy\n @param asset The address of the underlying asset of the reserve\n @return irStrategyAddress The address of the Interest Rate strategy"},"functionSelector":"6744362a","id":5782,"implemented":false,"kind":"function","modifiers":[],"name":"getInterestRateStrategyAddress","nameLocation":"8579:30:42","nodeType":"FunctionDefinition","parameters":{"id":5778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5777,"mutability":"mutable","name":"asset","nameLocation":"8623:5:42","nodeType":"VariableDeclaration","scope":5782,"src":"8615:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5776,"name":"address","nodeType":"ElementaryTypeName","src":"8615:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8609:23:42"},"returnParameters":{"id":5781,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5780,"mutability":"mutable","name":"irStrategyAddress","nameLocation":"8664:17:42","nodeType":"VariableDeclaration","scope":5782,"src":"8656:25:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5779,"name":"address","nodeType":"ElementaryTypeName","src":"8656:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8655:27:42"},"scope":5791,"src":"8570:113:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5783,"nodeType":"StructuredDocumentation","src":"8687:215:42","text":" @notice Returns whether the reserve has FlashLoans enabled or disabled\n @param asset The address of the underlying asset of the reserve\n @return True if FlashLoans are enabled, false otherwise"},"functionSelector":"d7ed3ef4","id":5790,"implemented":false,"kind":"function","modifiers":[],"name":"getFlashLoanEnabled","nameLocation":"8914:19:42","nodeType":"FunctionDefinition","parameters":{"id":5786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5785,"mutability":"mutable","name":"asset","nameLocation":"8942:5:42","nodeType":"VariableDeclaration","scope":5790,"src":"8934:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5784,"name":"address","nodeType":"ElementaryTypeName","src":"8934:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8933:15:42"},"returnParameters":{"id":5789,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5788,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5790,"src":"8972:4:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5787,"name":"bool","nodeType":"ElementaryTypeName","src":"8972:4:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8971:6:42"},"scope":5791,"src":"8905:73:42","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":5792,"src":"245:8735:42","usedErrors":[]}],"src":"37:8944:42"},"id":42},"@aave/core-v3/contracts/interfaces/IPriceOracle.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/interfaces/IPriceOracle.sol","exportedSymbols":{"IPriceOracle":[5811]},"id":5812,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":5793,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:43"},{"abstract":false,"baseContracts":[],"canonicalName":"IPriceOracle","contractDependencies":[],"contractKind":"interface","documentation":{"id":5794,"nodeType":"StructuredDocumentation","src":"62:105:43","text":" @title IPriceOracle\n @author Aave\n @notice Defines the basic interface for a Price oracle."},"fullyImplemented":false,"id":5811,"linearizedBaseContracts":[5811],"name":"IPriceOracle","nameLocation":"178:12:43","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":5795,"nodeType":"StructuredDocumentation","src":"195:146:43","text":" @notice Returns the asset price in the base currency\n @param asset The address of the asset\n @return The price of the asset"},"functionSelector":"b3596f07","id":5802,"implemented":false,"kind":"function","modifiers":[],"name":"getAssetPrice","nameLocation":"353:13:43","nodeType":"FunctionDefinition","parameters":{"id":5798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5797,"mutability":"mutable","name":"asset","nameLocation":"375:5:43","nodeType":"VariableDeclaration","scope":5802,"src":"367:13:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5796,"name":"address","nodeType":"ElementaryTypeName","src":"367:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"366:15:43"},"returnParameters":{"id":5801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5800,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5802,"src":"405:7:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5799,"name":"uint256","nodeType":"ElementaryTypeName","src":"405:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"404:9:43"},"scope":5811,"src":"344:70:43","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5803,"nodeType":"StructuredDocumentation","src":"418:133:43","text":" @notice Set the price of the asset\n @param asset The address of the asset\n @param price The price of the asset"},"functionSelector":"51323f72","id":5810,"implemented":false,"kind":"function","modifiers":[],"name":"setAssetPrice","nameLocation":"563:13:43","nodeType":"FunctionDefinition","parameters":{"id":5808,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5805,"mutability":"mutable","name":"asset","nameLocation":"585:5:43","nodeType":"VariableDeclaration","scope":5810,"src":"577:13:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5804,"name":"address","nodeType":"ElementaryTypeName","src":"577:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5807,"mutability":"mutable","name":"price","nameLocation":"600:5:43","nodeType":"VariableDeclaration","scope":5810,"src":"592:13:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5806,"name":"uint256","nodeType":"ElementaryTypeName","src":"592:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"576:30:43"},"returnParameters":{"id":5809,"nodeType":"ParameterList","parameters":[],"src":"615:0:43"},"scope":5811,"src":"554:62:43","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":5812,"src":"168:450:43","usedErrors":[]}],"src":"37:582:43"},"id":43},"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol","exportedSymbols":{"IPriceOracleGetter":[5835]},"id":5836,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":5813,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:44"},{"abstract":false,"baseContracts":[],"canonicalName":"IPriceOracleGetter","contractDependencies":[],"contractKind":"interface","documentation":{"id":5814,"nodeType":"StructuredDocumentation","src":"62:100:44","text":" @title IPriceOracleGetter\n @author Aave\n @notice Interface for the Aave price oracle."},"fullyImplemented":false,"id":5835,"linearizedBaseContracts":[5835],"name":"IPriceOracleGetter","nameLocation":"173:18:44","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":5815,"nodeType":"StructuredDocumentation","src":"196:164:44","text":" @notice Returns the base currency address\n @dev Address 0x0 is reserved for USD as base currency.\n @return Returns the base currency address."},"functionSelector":"e19f4700","id":5820,"implemented":false,"kind":"function","modifiers":[],"name":"BASE_CURRENCY","nameLocation":"372:13:44","nodeType":"FunctionDefinition","parameters":{"id":5816,"nodeType":"ParameterList","parameters":[],"src":"385:2:44"},"returnParameters":{"id":5819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5818,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5820,"src":"411:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5817,"name":"address","nodeType":"ElementaryTypeName","src":"411:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"410:9:44"},"scope":5835,"src":"363:57:44","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5821,"nodeType":"StructuredDocumentation","src":"424:138:44","text":" @notice Returns the base currency unit\n @dev 1 ether for ETH, 1e8 for USD.\n @return Returns the base currency unit."},"functionSelector":"8c89b64f","id":5826,"implemented":false,"kind":"function","modifiers":[],"name":"BASE_CURRENCY_UNIT","nameLocation":"574:18:44","nodeType":"FunctionDefinition","parameters":{"id":5822,"nodeType":"ParameterList","parameters":[],"src":"592:2:44"},"returnParameters":{"id":5825,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5824,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5826,"src":"618:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5823,"name":"uint256","nodeType":"ElementaryTypeName","src":"618:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"617:9:44"},"scope":5835,"src":"565:62:44","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5827,"nodeType":"StructuredDocumentation","src":"631:146:44","text":" @notice Returns the asset price in the base currency\n @param asset The address of the asset\n @return The price of the asset"},"functionSelector":"b3596f07","id":5834,"implemented":false,"kind":"function","modifiers":[],"name":"getAssetPrice","nameLocation":"789:13:44","nodeType":"FunctionDefinition","parameters":{"id":5830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5829,"mutability":"mutable","name":"asset","nameLocation":"811:5:44","nodeType":"VariableDeclaration","scope":5834,"src":"803:13:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5828,"name":"address","nodeType":"ElementaryTypeName","src":"803:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"802:15:44"},"returnParameters":{"id":5833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5832,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5834,"src":"841:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5831,"name":"uint256","nodeType":"ElementaryTypeName","src":"841:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"840:9:44"},"scope":5835,"src":"780:70:44","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":5836,"src":"163:689:44","usedErrors":[]}],"src":"37:816:44"},"id":44},"@aave/core-v3/contracts/interfaces/IPriceOracleSentinel.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/interfaces/IPriceOracleSentinel.sol","exportedSymbols":{"IPoolAddressesProvider":[5069],"IPriceOracleSentinel":[5894]},"id":5895,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":5837,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:45"},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"./IPoolAddressesProvider.sol","id":5839,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5895,"sourceUnit":5070,"src":"62:68:45","symbolAliases":[{"foreign":{"id":5838,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:22:45","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IPriceOracleSentinel","contractDependencies":[],"contractKind":"interface","documentation":{"id":5840,"nodeType":"StructuredDocumentation","src":"132:121:45","text":" @title IPriceOracleSentinel\n @author Aave\n @notice Defines the basic interface for the PriceOracleSentinel"},"fullyImplemented":false,"id":5894,"linearizedBaseContracts":[5894],"name":"IPriceOracleSentinel","nameLocation":"264:20:45","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":5841,"nodeType":"StructuredDocumentation","src":"289:121:45","text":" @dev Emitted after the sequencer oracle is updated\n @param newSequencerOracle The new sequencer oracle"},"id":5845,"name":"SequencerOracleUpdated","nameLocation":"419:22:45","nodeType":"EventDefinition","parameters":{"id":5844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5843,"indexed":false,"mutability":"mutable","name":"newSequencerOracle","nameLocation":"450:18:45","nodeType":"VariableDeclaration","scope":5845,"src":"442:26:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5842,"name":"address","nodeType":"ElementaryTypeName","src":"442:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"441:28:45"},"src":"413:57:45"},{"anonymous":false,"documentation":{"id":5846,"nodeType":"StructuredDocumentation","src":"474:115:45","text":" @dev Emitted after the grace period is updated\n @param newGracePeriod The new grace period value"},"id":5850,"name":"GracePeriodUpdated","nameLocation":"598:18:45","nodeType":"EventDefinition","parameters":{"id":5849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5848,"indexed":false,"mutability":"mutable","name":"newGracePeriod","nameLocation":"625:14:45","nodeType":"VariableDeclaration","scope":5850,"src":"617:22:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5847,"name":"uint256","nodeType":"ElementaryTypeName","src":"617:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"616:24:45"},"src":"592:49:45"},{"documentation":{"id":5851,"nodeType":"StructuredDocumentation","src":"645:119:45","text":" @notice Returns the PoolAddressesProvider\n @return The address of the PoolAddressesProvider contract"},"functionSelector":"0542975c","id":5857,"implemented":false,"kind":"function","modifiers":[],"name":"ADDRESSES_PROVIDER","nameLocation":"776:18:45","nodeType":"FunctionDefinition","parameters":{"id":5852,"nodeType":"ParameterList","parameters":[],"src":"794:2:45"},"returnParameters":{"id":5856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5855,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5857,"src":"820:22:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":5854,"nodeType":"UserDefinedTypeName","pathNode":{"id":5853,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"820:22:45"},"referencedDeclaration":5069,"src":"820:22:45","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"819:24:45"},"scope":5894,"src":"767:77:45","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5858,"nodeType":"StructuredDocumentation","src":"848:231:45","text":" @notice Returns true if the `borrow` operation is allowed.\n @dev Operation not allowed when PriceOracle is down or grace period not passed.\n @return True if the `borrow` operation is allowed, false otherwise."},"functionSelector":"49aa2e81","id":5863,"implemented":false,"kind":"function","modifiers":[],"name":"isBorrowAllowed","nameLocation":"1091:15:45","nodeType":"FunctionDefinition","parameters":{"id":5859,"nodeType":"ParameterList","parameters":[],"src":"1106:2:45"},"returnParameters":{"id":5862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5861,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5863,"src":"1132:4:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5860,"name":"bool","nodeType":"ElementaryTypeName","src":"1132:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1131:6:45"},"scope":5894,"src":"1082:56:45","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5864,"nodeType":"StructuredDocumentation","src":"1142:241:45","text":" @notice Returns true if the `liquidation` operation is allowed.\n @dev Operation not allowed when PriceOracle is down or grace period not passed.\n @return True if the `liquidation` operation is allowed, false otherwise."},"functionSelector":"7a5d20ea","id":5869,"implemented":false,"kind":"function","modifiers":[],"name":"isLiquidationAllowed","nameLocation":"1395:20:45","nodeType":"FunctionDefinition","parameters":{"id":5865,"nodeType":"ParameterList","parameters":[],"src":"1415:2:45"},"returnParameters":{"id":5868,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5867,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5869,"src":"1441:4:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5866,"name":"bool","nodeType":"ElementaryTypeName","src":"1441:4:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1440:6:45"},"scope":5894,"src":"1386:61:45","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5870,"nodeType":"StructuredDocumentation","src":"1451:144:45","text":" @notice Updates the address of the sequencer oracle\n @param newSequencerOracle The address of the new Sequencer Oracle to use"},"functionSelector":"f0aef31c","id":5875,"implemented":false,"kind":"function","modifiers":[],"name":"setSequencerOracle","nameLocation":"1607:18:45","nodeType":"FunctionDefinition","parameters":{"id":5873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5872,"mutability":"mutable","name":"newSequencerOracle","nameLocation":"1634:18:45","nodeType":"VariableDeclaration","scope":5875,"src":"1626:26:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5871,"name":"address","nodeType":"ElementaryTypeName","src":"1626:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1625:28:45"},"returnParameters":{"id":5874,"nodeType":"ParameterList","parameters":[],"src":"1662:0:45"},"scope":5894,"src":"1598:65:45","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5876,"nodeType":"StructuredDocumentation","src":"1667:133:45","text":" @notice Updates the duration of the grace period\n @param newGracePeriod The value of the new grace period duration"},"functionSelector":"f2f65960","id":5881,"implemented":false,"kind":"function","modifiers":[],"name":"setGracePeriod","nameLocation":"1812:14:45","nodeType":"FunctionDefinition","parameters":{"id":5879,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5878,"mutability":"mutable","name":"newGracePeriod","nameLocation":"1835:14:45","nodeType":"VariableDeclaration","scope":5881,"src":"1827:22:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5877,"name":"uint256","nodeType":"ElementaryTypeName","src":"1827:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1826:24:45"},"returnParameters":{"id":5880,"nodeType":"ParameterList","parameters":[],"src":"1859:0:45"},"scope":5894,"src":"1803:57:45","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":5882,"nodeType":"StructuredDocumentation","src":"1864:108:45","text":" @notice Returns the SequencerOracle\n @return The address of the sequencer oracle contract"},"functionSelector":"12168dc2","id":5887,"implemented":false,"kind":"function","modifiers":[],"name":"getSequencerOracle","nameLocation":"1984:18:45","nodeType":"FunctionDefinition","parameters":{"id":5883,"nodeType":"ParameterList","parameters":[],"src":"2002:2:45"},"returnParameters":{"id":5886,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5885,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5887,"src":"2028:7:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5884,"name":"address","nodeType":"ElementaryTypeName","src":"2028:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2027:9:45"},"scope":5894,"src":"1975:62:45","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5888,"nodeType":"StructuredDocumentation","src":"2041:93:45","text":" @notice Returns the grace period\n @return The duration of the grace period"},"functionSelector":"dbd18388","id":5893,"implemented":false,"kind":"function","modifiers":[],"name":"getGracePeriod","nameLocation":"2146:14:45","nodeType":"FunctionDefinition","parameters":{"id":5889,"nodeType":"ParameterList","parameters":[],"src":"2160:2:45"},"returnParameters":{"id":5892,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5891,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5893,"src":"2186:7:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5890,"name":"uint256","nodeType":"ElementaryTypeName","src":"2186:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2185:9:45"},"scope":5894,"src":"2137:58:45","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":5895,"src":"254:1943:45","usedErrors":[]}],"src":"37:2161:45"},"id":45},"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol","exportedSymbols":{"DataTypes":[21633],"IReserveInterestRateStrategy":[5913]},"id":5914,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":5896,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:46"},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"../protocol/libraries/types/DataTypes.sol","id":5898,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5914,"sourceUnit":21634,"src":"62:68:46","symbolAliases":[{"foreign":{"id":5897,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:9:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IReserveInterestRateStrategy","contractDependencies":[],"contractKind":"interface","documentation":{"id":5899,"nodeType":"StructuredDocumentation","src":"132:125:46","text":" @title IReserveInterestRateStrategy\n @author Aave\n @notice Interface for the calculation of the interest rates"},"fullyImplemented":false,"id":5913,"linearizedBaseContracts":[5913],"name":"IReserveInterestRateStrategy","nameLocation":"268:28:46","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":5900,"nodeType":"StructuredDocumentation","src":"301:383:46","text":" @notice Calculates the interest rates depending on the reserve's state and configurations\n @param params The parameters needed to calculate interest rates\n @return liquidityRate The liquidity rate expressed in rays\n @return stableBorrowRate The stable borrow rate expressed in rays\n @return variableBorrowRate The variable borrow rate expressed in rays"},"functionSelector":"a5898709","id":5912,"implemented":false,"kind":"function","modifiers":[],"name":"calculateInterestRates","nameLocation":"696:22:46","nodeType":"FunctionDefinition","parameters":{"id":5904,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5903,"mutability":"mutable","name":"params","nameLocation":"770:6:46","nodeType":"VariableDeclaration","scope":5912,"src":"724:52:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$21617_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams"},"typeName":{"id":5902,"nodeType":"UserDefinedTypeName","pathNode":{"id":5901,"name":"DataTypes.CalculateInterestRatesParams","nodeType":"IdentifierPath","referencedDeclaration":21617,"src":"724:38:46"},"referencedDeclaration":21617,"src":"724:38:46","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$21617_storage_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams"}},"visibility":"internal"}],"src":"718:62:46"},"returnParameters":{"id":5911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5906,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5912,"src":"804:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5905,"name":"uint256","nodeType":"ElementaryTypeName","src":"804:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5908,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5912,"src":"813:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5907,"name":"uint256","nodeType":"ElementaryTypeName","src":"813:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5910,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5912,"src":"822:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5909,"name":"uint256","nodeType":"ElementaryTypeName","src":"822:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"803:27:46"},"scope":5913,"src":"687:144:46","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":5914,"src":"258:575:46","usedErrors":[]}],"src":"37:797:46"},"id":46},"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol","exportedSymbols":{"IScaledBalanceToken":[5975]},"id":5976,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":5915,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:47"},{"abstract":false,"baseContracts":[],"canonicalName":"IScaledBalanceToken","contractDependencies":[],"contractKind":"interface","documentation":{"id":5916,"nodeType":"StructuredDocumentation","src":"62:120:47","text":" @title IScaledBalanceToken\n @author Aave\n @notice Defines the basic interface for a scaled-balance token."},"fullyImplemented":false,"id":5975,"linearizedBaseContracts":[5975],"name":"IScaledBalanceToken","nameLocation":"193:19:47","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":5917,"nodeType":"StructuredDocumentation","src":"217:459:47","text":" @dev Emitted after the mint action\n @param caller The address performing the mint\n @param onBehalfOf The address of the user that will receive the minted tokens\n @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\n @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\n @param index The next liquidity index of the reserve"},"id":5929,"name":"Mint","nameLocation":"685:4:47","nodeType":"EventDefinition","parameters":{"id":5928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5919,"indexed":true,"mutability":"mutable","name":"caller","nameLocation":"711:6:47","nodeType":"VariableDeclaration","scope":5929,"src":"695:22:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5918,"name":"address","nodeType":"ElementaryTypeName","src":"695:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5921,"indexed":true,"mutability":"mutable","name":"onBehalfOf","nameLocation":"739:10:47","nodeType":"VariableDeclaration","scope":5929,"src":"723:26:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5920,"name":"address","nodeType":"ElementaryTypeName","src":"723:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5923,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"763:5:47","nodeType":"VariableDeclaration","scope":5929,"src":"755:13:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5922,"name":"uint256","nodeType":"ElementaryTypeName","src":"755:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5925,"indexed":false,"mutability":"mutable","name":"balanceIncrease","nameLocation":"782:15:47","nodeType":"VariableDeclaration","scope":5929,"src":"774:23:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5924,"name":"uint256","nodeType":"ElementaryTypeName","src":"774:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5927,"indexed":false,"mutability":"mutable","name":"index","nameLocation":"811:5:47","nodeType":"VariableDeclaration","scope":5929,"src":"803:13:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5926,"name":"uint256","nodeType":"ElementaryTypeName","src":"803:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"689:131:47"},"src":"679:142:47"},{"anonymous":false,"documentation":{"id":5930,"nodeType":"StructuredDocumentation","src":"825:566:47","text":" @dev Emitted after the burn action\n @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\n @param from The address from which the tokens will be burned\n @param target The address that will receive the underlying, if any\n @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\n @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\n @param index The next liquidity index of the reserve"},"id":5942,"name":"Burn","nameLocation":"1400:4:47","nodeType":"EventDefinition","parameters":{"id":5941,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5932,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"1426:4:47","nodeType":"VariableDeclaration","scope":5942,"src":"1410:20:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5931,"name":"address","nodeType":"ElementaryTypeName","src":"1410:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5934,"indexed":true,"mutability":"mutable","name":"target","nameLocation":"1452:6:47","nodeType":"VariableDeclaration","scope":5942,"src":"1436:22:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5933,"name":"address","nodeType":"ElementaryTypeName","src":"1436:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5936,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"1472:5:47","nodeType":"VariableDeclaration","scope":5942,"src":"1464:13:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5935,"name":"uint256","nodeType":"ElementaryTypeName","src":"1464:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5938,"indexed":false,"mutability":"mutable","name":"balanceIncrease","nameLocation":"1491:15:47","nodeType":"VariableDeclaration","scope":5942,"src":"1483:23:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5937,"name":"uint256","nodeType":"ElementaryTypeName","src":"1483:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5940,"indexed":false,"mutability":"mutable","name":"index","nameLocation":"1520:5:47","nodeType":"VariableDeclaration","scope":5942,"src":"1512:13:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5939,"name":"uint256","nodeType":"ElementaryTypeName","src":"1512:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1404:125:47"},"src":"1394:136:47"},{"documentation":{"id":5943,"nodeType":"StructuredDocumentation","src":"1534:308:47","text":" @notice Returns the scaled balance of the user.\n @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\n at the moment of the update\n @param user The user whose balance is calculated\n @return The scaled balance of the user"},"functionSelector":"1da24f3e","id":5950,"implemented":false,"kind":"function","modifiers":[],"name":"scaledBalanceOf","nameLocation":"1854:15:47","nodeType":"FunctionDefinition","parameters":{"id":5946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5945,"mutability":"mutable","name":"user","nameLocation":"1878:4:47","nodeType":"VariableDeclaration","scope":5950,"src":"1870:12:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5944,"name":"address","nodeType":"ElementaryTypeName","src":"1870:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1869:14:47"},"returnParameters":{"id":5949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5948,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5950,"src":"1907:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5947,"name":"uint256","nodeType":"ElementaryTypeName","src":"1907:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1906:9:47"},"scope":5975,"src":"1845:71:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5951,"nodeType":"StructuredDocumentation","src":"1920:212:47","text":" @notice Returns the scaled balance of the user and the scaled total supply.\n @param user The address of the user\n @return The scaled balance of the user\n @return The scaled total supply"},"functionSelector":"0afbcdc9","id":5960,"implemented":false,"kind":"function","modifiers":[],"name":"getScaledUserBalanceAndSupply","nameLocation":"2144:29:47","nodeType":"FunctionDefinition","parameters":{"id":5954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5953,"mutability":"mutable","name":"user","nameLocation":"2182:4:47","nodeType":"VariableDeclaration","scope":5960,"src":"2174:12:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5952,"name":"address","nodeType":"ElementaryTypeName","src":"2174:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2173:14:47"},"returnParameters":{"id":5959,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5956,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5960,"src":"2211:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5955,"name":"uint256","nodeType":"ElementaryTypeName","src":"2211:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5958,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5960,"src":"2220:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5957,"name":"uint256","nodeType":"ElementaryTypeName","src":"2220:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2210:18:47"},"scope":5975,"src":"2135:94:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5961,"nodeType":"StructuredDocumentation","src":"2233:147:47","text":" @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\n @return The scaled total supply"},"functionSelector":"b1bf962d","id":5966,"implemented":false,"kind":"function","modifiers":[],"name":"scaledTotalSupply","nameLocation":"2392:17:47","nodeType":"FunctionDefinition","parameters":{"id":5962,"nodeType":"ParameterList","parameters":[],"src":"2409:2:47"},"returnParameters":{"id":5965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5964,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5966,"src":"2435:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5963,"name":"uint256","nodeType":"ElementaryTypeName","src":"2435:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2434:9:47"},"scope":5975,"src":"2383:61:47","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":5967,"nodeType":"StructuredDocumentation","src":"2448:214:47","text":" @notice Returns last index interest was accrued to the user's balance\n @param user The address of the user\n @return The last index interest was accrued to the user's balance, expressed in ray"},"functionSelector":"e0753986","id":5974,"implemented":false,"kind":"function","modifiers":[],"name":"getPreviousIndex","nameLocation":"2674:16:47","nodeType":"FunctionDefinition","parameters":{"id":5970,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5969,"mutability":"mutable","name":"user","nameLocation":"2699:4:47","nodeType":"VariableDeclaration","scope":5974,"src":"2691:12:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5968,"name":"address","nodeType":"ElementaryTypeName","src":"2691:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2690:14:47"},"returnParameters":{"id":5973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5972,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5974,"src":"2728:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5971,"name":"uint256","nodeType":"ElementaryTypeName","src":"2728:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2727:9:47"},"scope":5975,"src":"2665:72:47","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":5976,"src":"183:2556:47","usedErrors":[]}],"src":"37:2703:47"},"id":47},"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol","exportedSymbols":{"IInitializableDebtToken":[4221],"IStableDebtToken":[6109]},"id":6110,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":5977,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:48"},{"absolutePath":"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol","file":"./IInitializableDebtToken.sol","id":5979,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6110,"sourceUnit":4222,"src":"62:70:48","symbolAliases":[{"foreign":{"id":5978,"name":"IInitializableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:23:48","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":5981,"name":"IInitializableDebtToken","nodeType":"IdentifierPath","referencedDeclaration":4221,"src":"335:23:48"},"id":5982,"nodeType":"InheritanceSpecifier","src":"335:23:48"}],"canonicalName":"IStableDebtToken","contractDependencies":[],"contractKind":"interface","documentation":{"id":5980,"nodeType":"StructuredDocumentation","src":"134:170:48","text":" @title IStableDebtToken\n @author Aave\n @notice Defines the interface for the stable debt token\n @dev It does not inherit from IERC20 to save in code size"},"fullyImplemented":false,"id":6109,"linearizedBaseContracts":[6109,4221],"name":"IStableDebtToken","nameLocation":"315:16:48","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":5983,"nodeType":"StructuredDocumentation","src":"363:714:48","text":" @dev Emitted when new stable debt is minted\n @param user The address of the user who triggered the minting\n @param onBehalfOf The recipient of stable debt tokens\n @param amount The amount minted (user entered amount + balance increase from interest)\n @param currentBalance The balance of the user based on the previous balance and balance increase from interest\n @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\n @param newRate The rate of the debt after the minting\n @param avgStableRate The next average stable rate after the minting\n @param newTotalSupply The next total supply of the stable debt token after the action"},"id":6001,"name":"Mint","nameLocation":"1086:4:48","nodeType":"EventDefinition","parameters":{"id":6000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5985,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1112:4:48","nodeType":"VariableDeclaration","scope":6001,"src":"1096:20:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5984,"name":"address","nodeType":"ElementaryTypeName","src":"1096:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5987,"indexed":true,"mutability":"mutable","name":"onBehalfOf","nameLocation":"1138:10:48","nodeType":"VariableDeclaration","scope":6001,"src":"1122:26:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5986,"name":"address","nodeType":"ElementaryTypeName","src":"1122:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5989,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1162:6:48","nodeType":"VariableDeclaration","scope":6001,"src":"1154:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5988,"name":"uint256","nodeType":"ElementaryTypeName","src":"1154:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5991,"indexed":false,"mutability":"mutable","name":"currentBalance","nameLocation":"1182:14:48","nodeType":"VariableDeclaration","scope":6001,"src":"1174:22:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5990,"name":"uint256","nodeType":"ElementaryTypeName","src":"1174:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5993,"indexed":false,"mutability":"mutable","name":"balanceIncrease","nameLocation":"1210:15:48","nodeType":"VariableDeclaration","scope":6001,"src":"1202:23:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5992,"name":"uint256","nodeType":"ElementaryTypeName","src":"1202:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5995,"indexed":false,"mutability":"mutable","name":"newRate","nameLocation":"1239:7:48","nodeType":"VariableDeclaration","scope":6001,"src":"1231:15:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5994,"name":"uint256","nodeType":"ElementaryTypeName","src":"1231:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5997,"indexed":false,"mutability":"mutable","name":"avgStableRate","nameLocation":"1260:13:48","nodeType":"VariableDeclaration","scope":6001,"src":"1252:21:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5996,"name":"uint256","nodeType":"ElementaryTypeName","src":"1252:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5999,"indexed":false,"mutability":"mutable","name":"newTotalSupply","nameLocation":"1287:14:48","nodeType":"VariableDeclaration","scope":6001,"src":"1279:22:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5998,"name":"uint256","nodeType":"ElementaryTypeName","src":"1279:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1090:215:48"},"src":"1080:226:48"},{"anonymous":false,"documentation":{"id":6002,"nodeType":"StructuredDocumentation","src":"1310:584:48","text":" @dev Emitted when new stable debt is burned\n @param from The address from which the debt will be burned\n @param amount The amount being burned (user entered amount - balance increase from interest)\n @param currentBalance The balance of the user based on the previous balance and balance increase from interest\n @param balanceIncrease The increase in balance since the last action of 'from'\n @param avgStableRate The next average stable rate after the burning\n @param newTotalSupply The next total supply of the stable debt token after the action"},"id":6016,"name":"Burn","nameLocation":"1903:4:48","nodeType":"EventDefinition","parameters":{"id":6015,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6004,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"1929:4:48","nodeType":"VariableDeclaration","scope":6016,"src":"1913:20:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6003,"name":"address","nodeType":"ElementaryTypeName","src":"1913:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6006,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1947:6:48","nodeType":"VariableDeclaration","scope":6016,"src":"1939:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6005,"name":"uint256","nodeType":"ElementaryTypeName","src":"1939:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6008,"indexed":false,"mutability":"mutable","name":"currentBalance","nameLocation":"1967:14:48","nodeType":"VariableDeclaration","scope":6016,"src":"1959:22:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6007,"name":"uint256","nodeType":"ElementaryTypeName","src":"1959:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6010,"indexed":false,"mutability":"mutable","name":"balanceIncrease","nameLocation":"1995:15:48","nodeType":"VariableDeclaration","scope":6016,"src":"1987:23:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6009,"name":"uint256","nodeType":"ElementaryTypeName","src":"1987:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6012,"indexed":false,"mutability":"mutable","name":"avgStableRate","nameLocation":"2024:13:48","nodeType":"VariableDeclaration","scope":6016,"src":"2016:21:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6011,"name":"uint256","nodeType":"ElementaryTypeName","src":"2016:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6014,"indexed":false,"mutability":"mutable","name":"newTotalSupply","nameLocation":"2051:14:48","nodeType":"VariableDeclaration","scope":6016,"src":"2043:22:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6013,"name":"uint256","nodeType":"ElementaryTypeName","src":"2043:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1907:162:48"},"src":"1897:173:48"},{"documentation":{"id":6017,"nodeType":"StructuredDocumentation","src":"2074:649:48","text":" @notice Mints debt token to the `onBehalfOf` address.\n @dev The resulting rate is the weighted average between the rate of the new debt\n and the rate of the previous debt\n @param user The address receiving the borrowed underlying, being the delegatee in case\n of credit delegate, or same as `onBehalfOf` otherwise\n @param onBehalfOf The address receiving the debt tokens\n @param amount The amount of debt tokens to mint\n @param rate The rate of the debt being minted\n @return True if it is the first borrow, false otherwise\n @return The total stable debt\n @return The average stable borrow rate"},"functionSelector":"b3f1c93d","id":6034,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"2735:4:48","nodeType":"FunctionDefinition","parameters":{"id":6026,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6019,"mutability":"mutable","name":"user","nameLocation":"2753:4:48","nodeType":"VariableDeclaration","scope":6034,"src":"2745:12:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6018,"name":"address","nodeType":"ElementaryTypeName","src":"2745:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6021,"mutability":"mutable","name":"onBehalfOf","nameLocation":"2771:10:48","nodeType":"VariableDeclaration","scope":6034,"src":"2763:18:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6020,"name":"address","nodeType":"ElementaryTypeName","src":"2763:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6023,"mutability":"mutable","name":"amount","nameLocation":"2795:6:48","nodeType":"VariableDeclaration","scope":6034,"src":"2787:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6022,"name":"uint256","nodeType":"ElementaryTypeName","src":"2787:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6025,"mutability":"mutable","name":"rate","nameLocation":"2815:4:48","nodeType":"VariableDeclaration","scope":6034,"src":"2807:12:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6024,"name":"uint256","nodeType":"ElementaryTypeName","src":"2807:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2739:84:48"},"returnParameters":{"id":6033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6028,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6034,"src":"2842:4:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6027,"name":"bool","nodeType":"ElementaryTypeName","src":"2842:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6030,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6034,"src":"2848:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6029,"name":"uint256","nodeType":"ElementaryTypeName","src":"2848:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6032,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6034,"src":"2857:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6031,"name":"uint256","nodeType":"ElementaryTypeName","src":"2857:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2841:24:48"},"scope":6109,"src":"2726:140:48","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6035,"nodeType":"StructuredDocumentation","src":"2870:511:48","text":" @notice Burns debt of `user`\n @dev The resulting rate is the weighted average between the rate of the new debt\n and the rate of the previous debt\n @dev In some instances, a burn transaction will emit a mint event\n if the amount to burn is less than the interest the user earned\n @param from The address from which the debt will be burned\n @param amount The amount of debt tokens getting burned\n @return The total stable debt\n @return The average stable borrow rate"},"functionSelector":"9dc29fac","id":6046,"implemented":false,"kind":"function","modifiers":[],"name":"burn","nameLocation":"3393:4:48","nodeType":"FunctionDefinition","parameters":{"id":6040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6037,"mutability":"mutable","name":"from","nameLocation":"3406:4:48","nodeType":"VariableDeclaration","scope":6046,"src":"3398:12:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6036,"name":"address","nodeType":"ElementaryTypeName","src":"3398:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6039,"mutability":"mutable","name":"amount","nameLocation":"3420:6:48","nodeType":"VariableDeclaration","scope":6046,"src":"3412:14:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6038,"name":"uint256","nodeType":"ElementaryTypeName","src":"3412:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3397:30:48"},"returnParameters":{"id":6045,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6042,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6046,"src":"3446:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6041,"name":"uint256","nodeType":"ElementaryTypeName","src":"3446:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6044,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6046,"src":"3455:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6043,"name":"uint256","nodeType":"ElementaryTypeName","src":"3455:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3445:18:48"},"scope":6109,"src":"3384:80:48","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6047,"nodeType":"StructuredDocumentation","src":"3468:114:48","text":" @notice Returns the average rate of all the stable rate loans.\n @return The average stable rate"},"functionSelector":"90f6fcf2","id":6052,"implemented":false,"kind":"function","modifiers":[],"name":"getAverageStableRate","nameLocation":"3594:20:48","nodeType":"FunctionDefinition","parameters":{"id":6048,"nodeType":"ParameterList","parameters":[],"src":"3614:2:48"},"returnParameters":{"id":6051,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6050,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6052,"src":"3640:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6049,"name":"uint256","nodeType":"ElementaryTypeName","src":"3640:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3639:9:48"},"scope":6109,"src":"3585:64:48","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6053,"nodeType":"StructuredDocumentation","src":"3653:145:48","text":" @notice Returns the stable rate of the user debt\n @param user The address of the user\n @return The stable rate of the user"},"functionSelector":"e78c9b3b","id":6060,"implemented":false,"kind":"function","modifiers":[],"name":"getUserStableRate","nameLocation":"3810:17:48","nodeType":"FunctionDefinition","parameters":{"id":6056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6055,"mutability":"mutable","name":"user","nameLocation":"3836:4:48","nodeType":"VariableDeclaration","scope":6060,"src":"3828:12:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6054,"name":"address","nodeType":"ElementaryTypeName","src":"3828:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3827:14:48"},"returnParameters":{"id":6059,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6058,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6060,"src":"3865:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6057,"name":"uint256","nodeType":"ElementaryTypeName","src":"3865:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3864:9:48"},"scope":6109,"src":"3801:73:48","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6061,"nodeType":"StructuredDocumentation","src":"3878:143:48","text":" @notice Returns the timestamp of the last update of the user\n @param user The address of the user\n @return The timestamp"},"functionSelector":"79ce6b8c","id":6068,"implemented":false,"kind":"function","modifiers":[],"name":"getUserLastUpdated","nameLocation":"4033:18:48","nodeType":"FunctionDefinition","parameters":{"id":6064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6063,"mutability":"mutable","name":"user","nameLocation":"4060:4:48","nodeType":"VariableDeclaration","scope":6068,"src":"4052:12:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6062,"name":"address","nodeType":"ElementaryTypeName","src":"4052:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4051:14:48"},"returnParameters":{"id":6067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6066,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6068,"src":"4089:6:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":6065,"name":"uint40","nodeType":"ElementaryTypeName","src":"4089:6:48","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"4088:8:48"},"scope":6109,"src":"4024:73:48","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6069,"nodeType":"StructuredDocumentation","src":"4101:265:48","text":" @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\n @return The principal\n @return The total supply\n @return The average stable rate\n @return The timestamp of the last update"},"functionSelector":"79774338","id":6080,"implemented":false,"kind":"function","modifiers":[],"name":"getSupplyData","nameLocation":"4378:13:48","nodeType":"FunctionDefinition","parameters":{"id":6070,"nodeType":"ParameterList","parameters":[],"src":"4391:2:48"},"returnParameters":{"id":6079,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6072,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6080,"src":"4417:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6071,"name":"uint256","nodeType":"ElementaryTypeName","src":"4417:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6074,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6080,"src":"4426:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6073,"name":"uint256","nodeType":"ElementaryTypeName","src":"4426:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6076,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6080,"src":"4435:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6075,"name":"uint256","nodeType":"ElementaryTypeName","src":"4435:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6078,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6080,"src":"4444:6:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":6077,"name":"uint40","nodeType":"ElementaryTypeName","src":"4444:6:48","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"4416:35:48"},"scope":6109,"src":"4369:83:48","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6081,"nodeType":"StructuredDocumentation","src":"4456:110:48","text":" @notice Returns the timestamp of the last update of the total supply\n @return The timestamp"},"functionSelector":"e7484890","id":6086,"implemented":false,"kind":"function","modifiers":[],"name":"getTotalSupplyLastUpdated","nameLocation":"4578:25:48","nodeType":"FunctionDefinition","parameters":{"id":6082,"nodeType":"ParameterList","parameters":[],"src":"4603:2:48"},"returnParameters":{"id":6085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6084,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6086,"src":"4629:6:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":6083,"name":"uint40","nodeType":"ElementaryTypeName","src":"4629:6:48","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"4628:8:48"},"scope":6109,"src":"4569:68:48","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6087,"nodeType":"StructuredDocumentation","src":"4641:135:48","text":" @notice Returns the total supply and the average stable rate\n @return The total supply\n @return The average rate"},"functionSelector":"f731e9be","id":6094,"implemented":false,"kind":"function","modifiers":[],"name":"getTotalSupplyAndAvgRate","nameLocation":"4788:24:48","nodeType":"FunctionDefinition","parameters":{"id":6088,"nodeType":"ParameterList","parameters":[],"src":"4812:2:48"},"returnParameters":{"id":6093,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6090,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6094,"src":"4838:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6089,"name":"uint256","nodeType":"ElementaryTypeName","src":"4838:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6092,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6094,"src":"4847:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6091,"name":"uint256","nodeType":"ElementaryTypeName","src":"4847:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4837:18:48"},"scope":6109,"src":"4779:77:48","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6095,"nodeType":"StructuredDocumentation","src":"4860:143:48","text":" @notice Returns the principal debt balance of the user\n @return The debt balance of the user since the last burn/mint action"},"functionSelector":"c634dfaa","id":6102,"implemented":false,"kind":"function","modifiers":[],"name":"principalBalanceOf","nameLocation":"5015:18:48","nodeType":"FunctionDefinition","parameters":{"id":6098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6097,"mutability":"mutable","name":"user","nameLocation":"5042:4:48","nodeType":"VariableDeclaration","scope":6102,"src":"5034:12:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6096,"name":"address","nodeType":"ElementaryTypeName","src":"5034:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5033:14:48"},"returnParameters":{"id":6101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6100,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6102,"src":"5071:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6099,"name":"uint256","nodeType":"ElementaryTypeName","src":"5071:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5070:9:48"},"scope":6109,"src":"5006:74:48","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6103,"nodeType":"StructuredDocumentation","src":"5084:170:48","text":" @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\n @return The address of the underlying asset"},"functionSelector":"b16a19de","id":6108,"implemented":false,"kind":"function","modifiers":[],"name":"UNDERLYING_ASSET_ADDRESS","nameLocation":"5266:24:48","nodeType":"FunctionDefinition","parameters":{"id":6104,"nodeType":"ParameterList","parameters":[],"src":"5290:2:48"},"returnParameters":{"id":6107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6106,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6108,"src":"5316:7:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6105,"name":"address","nodeType":"ElementaryTypeName","src":"5316:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5315:9:48"},"scope":6109,"src":"5257:68:48","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6110,"src":"305:5022:48","usedErrors":[]}],"src":"37:5291:48"},"id":48},"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol","exportedSymbols":{"IInitializableDebtToken":[4221],"IScaledBalanceToken":[5975],"IVariableDebtToken":[6155]},"id":6156,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":6111,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:49"},{"absolutePath":"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol","file":"./IScaledBalanceToken.sol","id":6113,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6156,"sourceUnit":5976,"src":"62:62:49","symbolAliases":[{"foreign":{"id":6112,"name":"IScaledBalanceToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:19:49","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol","file":"./IInitializableDebtToken.sol","id":6115,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6156,"sourceUnit":4222,"src":"125:70:49","symbolAliases":[{"foreign":{"id":6114,"name":"IInitializableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"133:23:49","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6117,"name":"IScaledBalanceToken","nodeType":"IdentifierPath","referencedDeclaration":5975,"src":"348:19:49"},"id":6118,"nodeType":"InheritanceSpecifier","src":"348:19:49"},{"baseName":{"id":6119,"name":"IInitializableDebtToken","nodeType":"IdentifierPath","referencedDeclaration":4221,"src":"369:23:49"},"id":6120,"nodeType":"InheritanceSpecifier","src":"369:23:49"}],"canonicalName":"IVariableDebtToken","contractDependencies":[],"contractKind":"interface","documentation":{"id":6116,"nodeType":"StructuredDocumentation","src":"197:118:49","text":" @title IVariableDebtToken\n @author Aave\n @notice Defines the basic interface for a variable debt token."},"fullyImplemented":false,"id":6155,"linearizedBaseContracts":[6155,4221,5975],"name":"IVariableDebtToken","nameLocation":"326:18:49","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6121,"nodeType":"StructuredDocumentation","src":"397:513:49","text":" @notice Mints debt token to the `onBehalfOf` address\n @param user The address receiving the borrowed underlying, being the delegatee in case\n of credit delegate, or same as `onBehalfOf` otherwise\n @param onBehalfOf The address receiving the debt tokens\n @param amount The amount of debt being minted\n @param index The variable debt index of the reserve\n @return True if the previous balance of the user is 0, false otherwise\n @return The scaled total debt of the reserve"},"functionSelector":"b3f1c93d","id":6136,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"922:4:49","nodeType":"FunctionDefinition","parameters":{"id":6130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6123,"mutability":"mutable","name":"user","nameLocation":"940:4:49","nodeType":"VariableDeclaration","scope":6136,"src":"932:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6122,"name":"address","nodeType":"ElementaryTypeName","src":"932:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6125,"mutability":"mutable","name":"onBehalfOf","nameLocation":"958:10:49","nodeType":"VariableDeclaration","scope":6136,"src":"950:18:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6124,"name":"address","nodeType":"ElementaryTypeName","src":"950:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6127,"mutability":"mutable","name":"amount","nameLocation":"982:6:49","nodeType":"VariableDeclaration","scope":6136,"src":"974:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6126,"name":"uint256","nodeType":"ElementaryTypeName","src":"974:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6129,"mutability":"mutable","name":"index","nameLocation":"1002:5:49","nodeType":"VariableDeclaration","scope":6136,"src":"994:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6128,"name":"uint256","nodeType":"ElementaryTypeName","src":"994:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"926:85:49"},"returnParameters":{"id":6135,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6132,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6136,"src":"1030:4:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6131,"name":"bool","nodeType":"ElementaryTypeName","src":"1030:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6134,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6136,"src":"1036:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6133,"name":"uint256","nodeType":"ElementaryTypeName","src":"1036:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1029:15:49"},"scope":6155,"src":"913:132:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6137,"nodeType":"StructuredDocumentation","src":"1049:409:49","text":" @notice Burns user variable debt\n @dev In some instances, a burn transaction will emit a mint event\n if the amount to burn is less than the interest that the user accrued\n @param from The address from which the debt will be burned\n @param amount The amount getting burned\n @param index The variable debt index of the reserve\n @return The scaled total debt of the reserve"},"functionSelector":"f5298aca","id":6148,"implemented":false,"kind":"function","modifiers":[],"name":"burn","nameLocation":"1470:4:49","nodeType":"FunctionDefinition","parameters":{"id":6144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6139,"mutability":"mutable","name":"from","nameLocation":"1483:4:49","nodeType":"VariableDeclaration","scope":6148,"src":"1475:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6138,"name":"address","nodeType":"ElementaryTypeName","src":"1475:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6141,"mutability":"mutable","name":"amount","nameLocation":"1497:6:49","nodeType":"VariableDeclaration","scope":6148,"src":"1489:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6140,"name":"uint256","nodeType":"ElementaryTypeName","src":"1489:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6143,"mutability":"mutable","name":"index","nameLocation":"1513:5:49","nodeType":"VariableDeclaration","scope":6148,"src":"1505:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6142,"name":"uint256","nodeType":"ElementaryTypeName","src":"1505:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1474:45:49"},"returnParameters":{"id":6147,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6146,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6148,"src":"1538:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6145,"name":"uint256","nodeType":"ElementaryTypeName","src":"1538:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1537:9:49"},"scope":6155,"src":"1461:86:49","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6149,"nodeType":"StructuredDocumentation","src":"1551:166:49","text":" @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\n @return The address of the underlying asset"},"functionSelector":"b16a19de","id":6154,"implemented":false,"kind":"function","modifiers":[],"name":"UNDERLYING_ASSET_ADDRESS","nameLocation":"1729:24:49","nodeType":"FunctionDefinition","parameters":{"id":6150,"nodeType":"ParameterList","parameters":[],"src":"1753:2:49"},"returnParameters":{"id":6153,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6152,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6154,"src":"1779:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6151,"name":"address","nodeType":"ElementaryTypeName","src":"1779:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1778:9:49"},"scope":6155,"src":"1720:68:49","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6156,"src":"316:1474:49","usedErrors":[]}],"src":"37:1754:49"},"id":49},"@aave/core-v3/contracts/misc/AaveOracle.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/misc/AaveOracle.sol","exportedSymbols":{"AaveOracle":[6519],"AggregatorInterface":[47],"Errors":[12642],"IACLManager":[3718],"IAaveOracle":[3951],"IPoolAddressesProvider":[5069],"IPriceOracleGetter":[5835]},"id":6520,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":6157,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:50"},{"absolutePath":"@aave/core-v3/contracts/dependencies/chainlink/AggregatorInterface.sol","file":"../dependencies/chainlink/AggregatorInterface.sol","id":6159,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6520,"sourceUnit":48,"src":"63:86:50","symbolAliases":[{"foreign":{"id":6158,"name":"AggregatorInterface","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:19:50","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol","file":"../protocol/libraries/helpers/Errors.sol","id":6161,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6520,"sourceUnit":12643,"src":"150:64:50","symbolAliases":[{"foreign":{"id":6160,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"158:6:50","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IACLManager.sol","file":"../interfaces/IACLManager.sol","id":6163,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6520,"sourceUnit":3719,"src":"215:58:50","symbolAliases":[{"foreign":{"id":6162,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"src":"223:11:50","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"../interfaces/IPoolAddressesProvider.sol","id":6165,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6520,"sourceUnit":5070,"src":"274:80:50","symbolAliases":[{"foreign":{"id":6164,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"282:22:50","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol","file":"../interfaces/IPriceOracleGetter.sol","id":6167,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6520,"sourceUnit":5836,"src":"355:72:50","symbolAliases":[{"foreign":{"id":6166,"name":"IPriceOracleGetter","nodeType":"Identifier","overloadedDeclarations":[],"src":"363:18:50","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IAaveOracle.sol","file":"../interfaces/IAaveOracle.sol","id":6169,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6520,"sourceUnit":3952,"src":"428:58:50","symbolAliases":[{"foreign":{"id":6168,"name":"IAaveOracle","nodeType":"Identifier","overloadedDeclarations":[],"src":"436:11:50","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6171,"name":"IAaveOracle","nodeType":"IdentifierPath","referencedDeclaration":3951,"src":"847:11:50"},"id":6172,"nodeType":"InheritanceSpecifier","src":"847:11:50"}],"canonicalName":"AaveOracle","contractDependencies":[],"contractKind":"contract","documentation":{"id":6170,"nodeType":"StructuredDocumentation","src":"488:335:50","text":" @title AaveOracle\n @author Aave\n @notice Contract to get asset prices, manage price sources and update the fallback oracle\n - Use of Chainlink Aggregators as first source of price\n - If the returned price by a Chainlink aggregator is <= 0, the call is forwarded to a fallback oracle\n - Owned by the Aave governance"},"fullyImplemented":true,"id":6519,"linearizedBaseContracts":[6519,3951,5835],"name":"AaveOracle","nameLocation":"833:10:50","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[3910],"constant":false,"functionSelector":"0542975c","id":6175,"mutability":"immutable","name":"ADDRESSES_PROVIDER","nameLocation":"903:18:50","nodeType":"VariableDeclaration","scope":6519,"src":"863:58:50","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":6174,"nodeType":"UserDefinedTypeName","pathNode":{"id":6173,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"863:22:50"},"referencedDeclaration":5069,"src":"863:22:50","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"public"},{"constant":false,"id":6180,"mutability":"mutable","name":"assetsSources","nameLocation":"1029:13:50","nodeType":"VariableDeclaration","scope":6519,"src":"981:61:50","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_AggregatorInterface_$47_$","typeString":"mapping(address => contract AggregatorInterface)"},"typeName":{"id":6179,"keyType":{"id":6176,"name":"address","nodeType":"ElementaryTypeName","src":"989:7:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"981:39:50","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_AggregatorInterface_$47_$","typeString":"mapping(address => contract AggregatorInterface)"},"valueType":{"id":6178,"nodeType":"UserDefinedTypeName","pathNode":{"id":6177,"name":"AggregatorInterface","nodeType":"IdentifierPath","referencedDeclaration":47,"src":"1000:19:50"},"referencedDeclaration":47,"src":"1000:19:50","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorInterface_$47","typeString":"contract AggregatorInterface"}}},"visibility":"private"},{"constant":false,"id":6183,"mutability":"mutable","name":"_fallbackOracle","nameLocation":"1074:15:50","nodeType":"VariableDeclaration","scope":6519,"src":"1047:42:50","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"},"typeName":{"id":6182,"nodeType":"UserDefinedTypeName","pathNode":{"id":6181,"name":"IPriceOracleGetter","nodeType":"IdentifierPath","referencedDeclaration":5835,"src":"1047:18:50"},"referencedDeclaration":5835,"src":"1047:18:50","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"}},"visibility":"private"},{"baseFunctions":[5820],"constant":false,"functionSelector":"e19f4700","id":6186,"mutability":"immutable","name":"BASE_CURRENCY","nameLocation":"1127:13:50","nodeType":"VariableDeclaration","overrides":{"id":6185,"nodeType":"OverrideSpecifier","overrides":[],"src":"1118:8:50"},"scope":6519,"src":"1093:47:50","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6184,"name":"address","nodeType":"ElementaryTypeName","src":"1093:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"baseFunctions":[5826],"constant":false,"functionSelector":"8c89b64f","id":6189,"mutability":"immutable","name":"BASE_CURRENCY_UNIT","nameLocation":"1178:18:50","nodeType":"VariableDeclaration","overrides":{"id":6188,"nodeType":"OverrideSpecifier","overrides":[],"src":"1169:8:50"},"scope":6519,"src":"1144:52:50","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6187,"name":"uint256","nodeType":"ElementaryTypeName","src":"1144:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"body":{"id":6196,"nodeType":"Block","src":"1340:49:50","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6192,"name":"_onlyAssetListingOrPoolAdmins","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6518,"src":"1346:29:50","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":6193,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1346:31:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6194,"nodeType":"ExpressionStatement","src":"1346:31:50"},{"id":6195,"nodeType":"PlaceholderStatement","src":"1383:1:50"}]},"documentation":{"id":6190,"nodeType":"StructuredDocumentation","src":"1201:96:50","text":" @dev Only asset listing or pool admin can call functions marked by this modifier."},"id":6197,"name":"onlyAssetListingOrPoolAdmins","nameLocation":"1309:28:50","nodeType":"ModifierDefinition","parameters":{"id":6191,"nodeType":"ParameterList","parameters":[],"src":"1337:2:50"},"src":"1300:89:50","virtual":false,"visibility":"internal"},{"body":{"id":6242,"nodeType":"Block","src":"2093:255:50","statements":[{"expression":{"id":6218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6216,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6175,"src":"2099:18:50","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6217,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6201,"src":"2120:8:50","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"src":"2099:29:50","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":6219,"nodeType":"ExpressionStatement","src":"2099:29:50"},{"expression":{"arguments":[{"id":6221,"name":"fallbackOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6209,"src":"2153:14:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6220,"name":"_setFallbackOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6348,"src":"2134:18:50","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":6222,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2134:34:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6223,"nodeType":"ExpressionStatement","src":"2134:34:50"},{"expression":{"arguments":[{"id":6225,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6204,"src":"2192:6:50","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"id":6226,"name":"sources","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6207,"src":"2200:7:50","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"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"id":6224,"name":"_setAssetsSources","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6331,"src":"2174:17:50","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory,address[] memory)"}},"id":6227,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2174:34:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6228,"nodeType":"ExpressionStatement","src":"2174:34:50"},{"expression":{"id":6231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6229,"name":"BASE_CURRENCY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6186,"src":"2214:13:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6230,"name":"baseCurrency","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6211,"src":"2230:12:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2214:28:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6232,"nodeType":"ExpressionStatement","src":"2214:28:50"},{"expression":{"id":6235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6233,"name":"BASE_CURRENCY_UNIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6189,"src":"2248:18:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6234,"name":"baseCurrencyUnit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6213,"src":"2269:16:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2248:37:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6236,"nodeType":"ExpressionStatement","src":"2248:37:50"},{"eventCall":{"arguments":[{"id":6238,"name":"baseCurrency","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6211,"src":"2312:12:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6239,"name":"baseCurrencyUnit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6213,"src":"2326:16:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6237,"name":"BaseCurrencySet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3891,"src":"2296:15:50","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":6240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2296:47:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6241,"nodeType":"EmitStatement","src":"2291:52:50"}]},"documentation":{"id":6198,"nodeType":"StructuredDocumentation","src":"1393:501:50","text":" @notice Constructor\n @param provider The address of the new PoolAddressesProvider\n @param assets The addresses of the assets\n @param sources The address of the source of each asset\n @param fallbackOracle The address of the fallback oracle to use if the data of an\n        aggregator is not consistent\n @param baseCurrency The base currency used for the price quotes. If USD is used, base currency is 0x0\n @param baseCurrencyUnit The unit of the base currency"},"id":6243,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":6214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6201,"mutability":"mutable","name":"provider","nameLocation":"1937:8:50","nodeType":"VariableDeclaration","scope":6243,"src":"1914:31:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":6200,"nodeType":"UserDefinedTypeName","pathNode":{"id":6199,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"1914:22:50"},"referencedDeclaration":5069,"src":"1914:22:50","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"},{"constant":false,"id":6204,"mutability":"mutable","name":"assets","nameLocation":"1968:6:50","nodeType":"VariableDeclaration","scope":6243,"src":"1951:23:50","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":6202,"name":"address","nodeType":"ElementaryTypeName","src":"1951:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6203,"nodeType":"ArrayTypeName","src":"1951:9:50","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":6207,"mutability":"mutable","name":"sources","nameLocation":"1997:7:50","nodeType":"VariableDeclaration","scope":6243,"src":"1980:24:50","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":6205,"name":"address","nodeType":"ElementaryTypeName","src":"1980:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6206,"nodeType":"ArrayTypeName","src":"1980:9:50","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":6209,"mutability":"mutable","name":"fallbackOracle","nameLocation":"2018:14:50","nodeType":"VariableDeclaration","scope":6243,"src":"2010:22:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6208,"name":"address","nodeType":"ElementaryTypeName","src":"2010:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6211,"mutability":"mutable","name":"baseCurrency","nameLocation":"2046:12:50","nodeType":"VariableDeclaration","scope":6243,"src":"2038:20:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6210,"name":"address","nodeType":"ElementaryTypeName","src":"2038:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6213,"mutability":"mutable","name":"baseCurrencyUnit","nameLocation":"2072:16:50","nodeType":"VariableDeclaration","scope":6243,"src":"2064:24:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6212,"name":"uint256","nodeType":"ElementaryTypeName","src":"2064:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1908:184:50"},"returnParameters":{"id":6215,"nodeType":"ParameterList","parameters":[],"src":"2093:0:50"},"scope":6519,"src":"1897:451:50","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[3920],"body":{"id":6261,"nodeType":"Block","src":"2521:45:50","statements":[{"expression":{"arguments":[{"id":6257,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6247,"src":"2545:6:50","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"id":6258,"name":"sources","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6250,"src":"2553:7:50","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"},{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}],"id":6256,"name":"_setAssetsSources","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6331,"src":"2527:17:50","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory,address[] memory)"}},"id":6259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2527:34:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6260,"nodeType":"ExpressionStatement","src":"2527:34:50"}]},"documentation":{"id":6244,"nodeType":"StructuredDocumentation","src":"2352:27:50","text":"@inheritdoc IAaveOracle"},"functionSelector":"abfd5310","id":6262,"implemented":true,"kind":"function","modifiers":[{"id":6254,"kind":"modifierInvocation","modifierName":{"id":6253,"name":"onlyAssetListingOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":6197,"src":"2492:28:50"},"nodeType":"ModifierInvocation","src":"2492:28:50"}],"name":"setAssetSources","nameLocation":"2391:15:50","nodeType":"FunctionDefinition","overrides":{"id":6252,"nodeType":"OverrideSpecifier","overrides":[],"src":"2483:8:50"},"parameters":{"id":6251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6247,"mutability":"mutable","name":"assets","nameLocation":"2431:6:50","nodeType":"VariableDeclaration","scope":6262,"src":"2412:25:50","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":6245,"name":"address","nodeType":"ElementaryTypeName","src":"2412:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6246,"nodeType":"ArrayTypeName","src":"2412:9:50","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":6250,"mutability":"mutable","name":"sources","nameLocation":"2462:7:50","nodeType":"VariableDeclaration","scope":6262,"src":"2443:26:50","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":6248,"name":"address","nodeType":"ElementaryTypeName","src":"2443:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6249,"nodeType":"ArrayTypeName","src":"2443:9:50","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2406:67:50"},"returnParameters":{"id":6255,"nodeType":"ParameterList","parameters":[],"src":"2521:0:50"},"scope":6519,"src":"2382:184:50","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3926],"body":{"id":6275,"nodeType":"Block","src":"2706:45:50","statements":[{"expression":{"arguments":[{"id":6272,"name":"fallbackOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6265,"src":"2731:14:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6271,"name":"_setFallbackOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6348,"src":"2712:18:50","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":6273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2712:34:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6274,"nodeType":"ExpressionStatement","src":"2712:34:50"}]},"documentation":{"id":6263,"nodeType":"StructuredDocumentation","src":"2570:27:50","text":"@inheritdoc IAaveOracle"},"functionSelector":"170aee73","id":6276,"implemented":true,"kind":"function","modifiers":[{"id":6269,"kind":"modifierInvocation","modifierName":{"id":6268,"name":"onlyAssetListingOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":6197,"src":"2677:28:50"},"nodeType":"ModifierInvocation","src":"2677:28:50"}],"name":"setFallbackOracle","nameLocation":"2609:17:50","nodeType":"FunctionDefinition","overrides":{"id":6267,"nodeType":"OverrideSpecifier","overrides":[],"src":"2668:8:50"},"parameters":{"id":6266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6265,"mutability":"mutable","name":"fallbackOracle","nameLocation":"2640:14:50","nodeType":"VariableDeclaration","scope":6276,"src":"2632:22:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6264,"name":"address","nodeType":"ElementaryTypeName","src":"2632:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2626:32:50"},"returnParameters":{"id":6270,"nodeType":"ParameterList","parameters":[],"src":"2706:0:50"},"scope":6519,"src":"2600:151:50","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":6330,"nodeType":"Block","src":"3026:262:50","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6287,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6280,"src":"3040:6:50","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3040:13:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":6289,"name":"sources","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6283,"src":"3057:7:50","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3057:14:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3040:31:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":6292,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"3073:6:50","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":6293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INCONSISTENT_PARAMS_LENGTH","nodeType":"MemberAccess","referencedDeclaration":12596,"src":"3073:33:50","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":6286,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3032:7:50","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3032:75:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6295,"nodeType":"ExpressionStatement","src":"3032:75:50"},{"body":{"id":6328,"nodeType":"Block","src":"3157:127:50","statements":[{"expression":{"id":6317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6307,"name":"assetsSources","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6180,"src":"3165:13:50","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_AggregatorInterface_$47_$","typeString":"mapping(address => contract AggregatorInterface)"}},"id":6311,"indexExpression":{"baseExpression":{"id":6308,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6280,"src":"3179:6:50","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6310,"indexExpression":{"id":6309,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6297,"src":"3186:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3179:9:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3165:24:50","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorInterface_$47","typeString":"contract AggregatorInterface"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":6313,"name":"sources","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6283,"src":"3212:7:50","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6315,"indexExpression":{"id":6314,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6297,"src":"3220:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3212:10:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6312,"name":"AggregatorInterface","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"3192:19:50","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AggregatorInterface_$47_$","typeString":"type(contract AggregatorInterface)"}},"id":6316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3192:31:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorInterface_$47","typeString":"contract AggregatorInterface"}},"src":"3165:58:50","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorInterface_$47","typeString":"contract AggregatorInterface"}},"id":6318,"nodeType":"ExpressionStatement","src":"3165:58:50"},{"eventCall":{"arguments":[{"baseExpression":{"id":6320,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6280,"src":"3255:6:50","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6322,"indexExpression":{"id":6321,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6297,"src":"3262:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3255:9:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":6323,"name":"sources","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6283,"src":"3266:7:50","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6325,"indexExpression":{"id":6324,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6297,"src":"3274:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3266:10:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6319,"name":"AssetSourceUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3898,"src":"3236:18:50","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":6326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3236:41:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6327,"nodeType":"EmitStatement","src":"3231:46:50"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6300,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6297,"src":"3133:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":6301,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6280,"src":"3137:6:50","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3137:13:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3133:17:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6329,"initializationExpression":{"assignments":[6297],"declarations":[{"constant":false,"id":6297,"mutability":"mutable","name":"i","nameLocation":"3126:1:50","nodeType":"VariableDeclaration","scope":6329,"src":"3118:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6296,"name":"uint256","nodeType":"ElementaryTypeName","src":"3118:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6299,"initialValue":{"hexValue":"30","id":6298,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3130:1:50","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3118:13:50"},"loopExpression":{"expression":{"id":6305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3152:3:50","subExpression":{"id":6304,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6297,"src":"3152:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6306,"nodeType":"ExpressionStatement","src":"3152:3:50"},"nodeType":"ForStatement","src":"3113:171:50"}]},"documentation":{"id":6277,"nodeType":"StructuredDocumentation","src":"2755:181:50","text":" @notice Internal function to set the sources for each asset\n @param assets The addresses of the assets\n @param sources The address of the source of each asset"},"id":6331,"implemented":true,"kind":"function","modifiers":[],"name":"_setAssetsSources","nameLocation":"2948:17:50","nodeType":"FunctionDefinition","parameters":{"id":6284,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6280,"mutability":"mutable","name":"assets","nameLocation":"2983:6:50","nodeType":"VariableDeclaration","scope":6331,"src":"2966:23:50","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":6278,"name":"address","nodeType":"ElementaryTypeName","src":"2966:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6279,"nodeType":"ArrayTypeName","src":"2966:9:50","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":6283,"mutability":"mutable","name":"sources","nameLocation":"3008:7:50","nodeType":"VariableDeclaration","scope":6331,"src":"2991:24:50","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":6281,"name":"address","nodeType":"ElementaryTypeName","src":"2991:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6282,"nodeType":"ArrayTypeName","src":"2991:9:50","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2965:51:50"},"returnParameters":{"id":6285,"nodeType":"ParameterList","parameters":[],"src":"3026:0:50"},"scope":6519,"src":"2939:349:50","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6347,"nodeType":"Block","src":"3485:111:50","statements":[{"expression":{"id":6341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6337,"name":"_fallbackOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6183,"src":"3491:15:50","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":6339,"name":"fallbackOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6334,"src":"3528:14:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6338,"name":"IPriceOracleGetter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5835,"src":"3509:18:50","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPriceOracleGetter_$5835_$","typeString":"type(contract IPriceOracleGetter)"}},"id":6340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3509:34:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"}},"src":"3491:52:50","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"}},"id":6342,"nodeType":"ExpressionStatement","src":"3491:52:50"},{"eventCall":{"arguments":[{"id":6344,"name":"fallbackOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6334,"src":"3576:14:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6343,"name":"FallbackOracleUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3903,"src":"3554:21:50","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":6345,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3554:37:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6346,"nodeType":"EmitStatement","src":"3549:42:50"}]},"documentation":{"id":6332,"nodeType":"StructuredDocumentation","src":"3292:129:50","text":" @notice Internal function to set the fallback oracle\n @param fallbackOracle The address of the fallback oracle"},"id":6348,"implemented":true,"kind":"function","modifiers":[],"name":"_setFallbackOracle","nameLocation":"3433:18:50","nodeType":"FunctionDefinition","parameters":{"id":6335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6334,"mutability":"mutable","name":"fallbackOracle","nameLocation":"3460:14:50","nodeType":"VariableDeclaration","scope":6348,"src":"3452:22:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6333,"name":"address","nodeType":"ElementaryTypeName","src":"3452:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3451:24:50"},"returnParameters":{"id":6336,"nodeType":"ParameterList","parameters":[],"src":"3485:0:50"},"scope":6519,"src":"3424:172:50","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[5834],"body":{"id":6410,"nodeType":"Block","src":"3714:420:50","statements":[{"assignments":[6359],"declarations":[{"constant":false,"id":6359,"mutability":"mutable","name":"source","nameLocation":"3740:6:50","nodeType":"VariableDeclaration","scope":6410,"src":"3720:26:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorInterface_$47","typeString":"contract AggregatorInterface"},"typeName":{"id":6358,"nodeType":"UserDefinedTypeName","pathNode":{"id":6357,"name":"AggregatorInterface","nodeType":"IdentifierPath","referencedDeclaration":47,"src":"3720:19:50"},"referencedDeclaration":47,"src":"3720:19:50","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorInterface_$47","typeString":"contract AggregatorInterface"}},"visibility":"internal"}],"id":6363,"initialValue":{"baseExpression":{"id":6360,"name":"assetsSources","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6180,"src":"3749:13:50","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_AggregatorInterface_$47_$","typeString":"mapping(address => contract AggregatorInterface)"}},"id":6362,"indexExpression":{"id":6361,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6351,"src":"3763:5:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3749:20:50","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorInterface_$47","typeString":"contract AggregatorInterface"}},"nodeType":"VariableDeclarationStatement","src":"3720:49:50"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6364,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6351,"src":"3780:5:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":6365,"name":"BASE_CURRENCY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6186,"src":"3789:13:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3780:22:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6372,"name":"source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6359,"src":"3862:6:50","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorInterface_$47","typeString":"contract AggregatorInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AggregatorInterface_$47","typeString":"contract AggregatorInterface"}],"id":6371,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3854:7:50","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6370,"name":"address","nodeType":"ElementaryTypeName","src":"3854:7:50","typeDescriptions":{}}},"id":6373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3854:15:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":6376,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3881: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":6375,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3873:7:50","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6374,"name":"address","nodeType":"ElementaryTypeName","src":"3873:7:50","typeDescriptions":{}}},"id":6377,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3873:10:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3854:29:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6407,"nodeType":"Block","src":"3949:181:50","statements":[{"assignments":[6386],"declarations":[{"constant":false,"id":6386,"mutability":"mutable","name":"price","nameLocation":"3964:5:50","nodeType":"VariableDeclaration","scope":6407,"src":"3957:12:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6385,"name":"int256","nodeType":"ElementaryTypeName","src":"3957:6:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6390,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6387,"name":"source","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6359,"src":"3972:6:50","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorInterface_$47","typeString":"contract AggregatorInterface"}},"id":6388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"latestAnswer","nodeType":"MemberAccess","referencedDeclaration":6,"src":"3972:19:50","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_int256_$","typeString":"function () view external returns (int256)"}},"id":6389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3972:21:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"3957:36:50"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6391,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6386,"src":"4005:5:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":6392,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4013:1:50","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4005:9:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6405,"nodeType":"Block","src":"4062:62:50","statements":[{"expression":{"arguments":[{"id":6402,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6351,"src":"4109:5:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6400,"name":"_fallbackOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6183,"src":"4079:15:50","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"}},"id":6401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getAssetPrice","nodeType":"MemberAccess","referencedDeclaration":5834,"src":"4079:29:50","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":6403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4079:36:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6356,"id":6404,"nodeType":"Return","src":"4072:43:50"}]},"id":6406,"nodeType":"IfStatement","src":"4001:123:50","trueBody":{"id":6399,"nodeType":"Block","src":"4016:40:50","statements":[{"expression":{"arguments":[{"id":6396,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6386,"src":"4041:5:50","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":6395,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4033:7:50","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6394,"name":"uint256","nodeType":"ElementaryTypeName","src":"4033:7:50","typeDescriptions":{}}},"id":6397,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4033:14:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6356,"id":6398,"nodeType":"Return","src":"4026:21:50"}]}}]},"id":6408,"nodeType":"IfStatement","src":"3850:280:50","trueBody":{"id":6384,"nodeType":"Block","src":"3885:58:50","statements":[{"expression":{"arguments":[{"id":6381,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6351,"src":"3930:5:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6379,"name":"_fallbackOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6183,"src":"3900:15:50","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"}},"id":6380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getAssetPrice","nodeType":"MemberAccess","referencedDeclaration":5834,"src":"3900:29:50","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":6382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3900:36:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6356,"id":6383,"nodeType":"Return","src":"3893:43:50"}]}},"id":6409,"nodeType":"IfStatement","src":"3776:354:50","trueBody":{"id":6369,"nodeType":"Block","src":"3804:40:50","statements":[{"expression":{"id":6367,"name":"BASE_CURRENCY_UNIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6189,"src":"3819:18:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6356,"id":6368,"nodeType":"Return","src":"3812:25:50"}]}}]},"documentation":{"id":6349,"nodeType":"StructuredDocumentation","src":"3600:34:50","text":"@inheritdoc IPriceOracleGetter"},"functionSelector":"b3596f07","id":6411,"implemented":true,"kind":"function","modifiers":[],"name":"getAssetPrice","nameLocation":"3646:13:50","nodeType":"FunctionDefinition","overrides":{"id":6353,"nodeType":"OverrideSpecifier","overrides":[],"src":"3687:8:50"},"parameters":{"id":6352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6351,"mutability":"mutable","name":"asset","nameLocation":"3668:5:50","nodeType":"VariableDeclaration","scope":6411,"src":"3660:13:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6350,"name":"address","nodeType":"ElementaryTypeName","src":"3660:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3659:15:50"},"returnParameters":{"id":6356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6355,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6411,"src":"3705:7:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6354,"name":"uint256","nodeType":"ElementaryTypeName","src":"3705:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3704:9:50"},"scope":6519,"src":"3637:497:50","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[3936],"body":{"id":6459,"nodeType":"Block","src":"4278:184:50","statements":[{"assignments":[6426],"declarations":[{"constant":false,"id":6426,"mutability":"mutable","name":"prices","nameLocation":"4301:6:50","nodeType":"VariableDeclaration","scope":6459,"src":"4284:23:50","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6424,"name":"uint256","nodeType":"ElementaryTypeName","src":"4284:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6425,"nodeType":"ArrayTypeName","src":"4284:9:50","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":6433,"initialValue":{"arguments":[{"expression":{"id":6430,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6415,"src":"4324:6:50","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":6431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"4324:13:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6429,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"4310:13:50","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":6427,"name":"uint256","nodeType":"ElementaryTypeName","src":"4314:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6428,"nodeType":"ArrayTypeName","src":"4314:9:50","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":6432,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4310:28:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"4284:54:50"},{"body":{"id":6455,"nodeType":"Block","src":"4388:51:50","statements":[{"expression":{"id":6453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6445,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6426,"src":"4396:6:50","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6447,"indexExpression":{"id":6446,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6435,"src":"4403:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4396:9:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":6449,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6415,"src":"4422:6:50","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":6451,"indexExpression":{"id":6450,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6435,"src":"4429:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4422:9:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6448,"name":"getAssetPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6411,"src":"4408:13:50","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":6452,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4408:24:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4396:36:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6454,"nodeType":"ExpressionStatement","src":"4396:36:50"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6438,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6435,"src":"4364:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":6439,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6415,"src":"4368:6:50","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":6440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"4368:13:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4364:17:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6456,"initializationExpression":{"assignments":[6435],"declarations":[{"constant":false,"id":6435,"mutability":"mutable","name":"i","nameLocation":"4357:1:50","nodeType":"VariableDeclaration","scope":6456,"src":"4349:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6434,"name":"uint256","nodeType":"ElementaryTypeName","src":"4349:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6437,"initialValue":{"hexValue":"30","id":6436,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4361:1:50","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4349:13:50"},"loopExpression":{"expression":{"id":6443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"4383:3:50","subExpression":{"id":6442,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6435,"src":"4383:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6444,"nodeType":"ExpressionStatement","src":"4383:3:50"},"nodeType":"ForStatement","src":"4344:95:50"},{"expression":{"id":6457,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6426,"src":"4451:6:50","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":6421,"id":6458,"nodeType":"Return","src":"4444:13:50"}]},"documentation":{"id":6412,"nodeType":"StructuredDocumentation","src":"4138:27:50","text":"@inheritdoc IAaveOracle"},"functionSelector":"9d23d9f2","id":6460,"implemented":true,"kind":"function","modifiers":[],"name":"getAssetsPrices","nameLocation":"4177:15:50","nodeType":"FunctionDefinition","overrides":{"id":6417,"nodeType":"OverrideSpecifier","overrides":[],"src":"4242:8:50"},"parameters":{"id":6416,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6415,"mutability":"mutable","name":"assets","nameLocation":"4217:6:50","nodeType":"VariableDeclaration","scope":6460,"src":"4198:25:50","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":6413,"name":"address","nodeType":"ElementaryTypeName","src":"4198:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6414,"nodeType":"ArrayTypeName","src":"4198:9:50","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"4192:35:50"},"returnParameters":{"id":6421,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6420,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6460,"src":"4260:16:50","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6418,"name":"uint256","nodeType":"ElementaryTypeName","src":"4260:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6419,"nodeType":"ArrayTypeName","src":"4260:9:50","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4259:18:50"},"scope":6519,"src":"4168:294:50","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3944],"body":{"id":6476,"nodeType":"Block","src":"4578:47:50","statements":[{"expression":{"arguments":[{"baseExpression":{"id":6471,"name":"assetsSources","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6180,"src":"4599:13:50","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_AggregatorInterface_$47_$","typeString":"mapping(address => contract AggregatorInterface)"}},"id":6473,"indexExpression":{"id":6472,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6463,"src":"4613:5:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4599:20:50","typeDescriptions":{"typeIdentifier":"t_contract$_AggregatorInterface_$47","typeString":"contract AggregatorInterface"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AggregatorInterface_$47","typeString":"contract AggregatorInterface"}],"id":6470,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4591:7:50","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6469,"name":"address","nodeType":"ElementaryTypeName","src":"4591:7:50","typeDescriptions":{}}},"id":6474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4591:29:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":6468,"id":6475,"nodeType":"Return","src":"4584:36:50"}]},"documentation":{"id":6461,"nodeType":"StructuredDocumentation","src":"4466:27:50","text":"@inheritdoc IAaveOracle"},"functionSelector":"92bf2be0","id":6477,"implemented":true,"kind":"function","modifiers":[],"name":"getSourceOfAsset","nameLocation":"4505:16:50","nodeType":"FunctionDefinition","overrides":{"id":6465,"nodeType":"OverrideSpecifier","overrides":[],"src":"4551:8:50"},"parameters":{"id":6464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6463,"mutability":"mutable","name":"asset","nameLocation":"4530:5:50","nodeType":"VariableDeclaration","scope":6477,"src":"4522:13:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6462,"name":"address","nodeType":"ElementaryTypeName","src":"4522:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4521:15:50"},"returnParameters":{"id":6468,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6467,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6477,"src":"4569:7:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6466,"name":"address","nodeType":"ElementaryTypeName","src":"4569:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4568:9:50"},"scope":6519,"src":"4496:129:50","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3950],"body":{"id":6488,"nodeType":"Block","src":"4720:42:50","statements":[{"expression":{"arguments":[{"id":6485,"name":"_fallbackOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6183,"src":"4741:15:50","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"}],"id":6484,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4733:7:50","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6483,"name":"address","nodeType":"ElementaryTypeName","src":"4733:7:50","typeDescriptions":{}}},"id":6486,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4733:24:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":6482,"id":6487,"nodeType":"Return","src":"4726:31:50"}]},"documentation":{"id":6478,"nodeType":"StructuredDocumentation","src":"4629:27:50","text":"@inheritdoc IAaveOracle"},"functionSelector":"6210308c","id":6489,"implemented":true,"kind":"function","modifiers":[],"name":"getFallbackOracle","nameLocation":"4668:17:50","nodeType":"FunctionDefinition","parameters":{"id":6479,"nodeType":"ParameterList","parameters":[],"src":"4685:2:50"},"returnParameters":{"id":6482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6481,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6489,"src":"4711:7:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6480,"name":"address","nodeType":"ElementaryTypeName","src":"4711:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4710:9:50"},"scope":6519,"src":"4659:103:50","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":6517,"nodeType":"Block","src":"4821:243:50","statements":[{"assignments":[6494],"declarations":[{"constant":false,"id":6494,"mutability":"mutable","name":"aclManager","nameLocation":"4839:10:50","nodeType":"VariableDeclaration","scope":6517,"src":"4827:22:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"},"typeName":{"id":6493,"nodeType":"UserDefinedTypeName","pathNode":{"id":6492,"name":"IACLManager","nodeType":"IdentifierPath","referencedDeclaration":3718,"src":"4827:11:50"},"referencedDeclaration":3718,"src":"4827:11:50","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"visibility":"internal"}],"id":6500,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6496,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6175,"src":"4864:18:50","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":6497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLManager","nodeType":"MemberAccess","referencedDeclaration":5026,"src":"4864:32:50","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":6498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4864:34:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6495,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3718,"src":"4852:11:50","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IACLManager_$3718_$","typeString":"type(contract IACLManager)"}},"id":6499,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4852:47:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"nodeType":"VariableDeclarationStatement","src":"4827:72:50"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":6504,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4951:3:50","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"4951:10:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6502,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6494,"src":"4920:10:50","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"id":6503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isAssetListingAdmin","nodeType":"MemberAccess","referencedDeclaration":3717,"src":"4920:30:50","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":6506,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4920:42:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"expression":{"id":6509,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4989:3:50","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"4989:10:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6507,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6494,"src":"4966:10:50","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"id":6508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isPoolAdmin","nodeType":"MemberAccess","referencedDeclaration":3617,"src":"4966:22:50","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":6511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4966:34:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4920:80:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":6513,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"5008:6:50","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":6514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN","nodeType":"MemberAccess","referencedDeclaration":12386,"src":"5008:45:50","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":6501,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4905:7:50","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":6515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4905:154:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6516,"nodeType":"ExpressionStatement","src":"4905:154:50"}]},"id":6518,"implemented":true,"kind":"function","modifiers":[],"name":"_onlyAssetListingOrPoolAdmins","nameLocation":"4775:29:50","nodeType":"FunctionDefinition","parameters":{"id":6490,"nodeType":"ParameterList","parameters":[],"src":"4804:2:50"},"returnParameters":{"id":6491,"nodeType":"ParameterList","parameters":[],"src":"4821:0:50"},"scope":6519,"src":"4766:298:50","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":6520,"src":"824:4242:50","usedErrors":[]}],"src":"37:5030:50"},"id":50},"@aave/core-v3/contracts/misc/AaveProtocolDataProvider.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/misc/AaveProtocolDataProvider.sol","exportedSymbols":{"AaveProtocolDataProvider":[7403],"DataTypes":[21633],"IERC20Detailed":[1464],"IPool":[4860],"IPoolAddressesProvider":[5069],"IPoolDataProvider":[5791],"IStableDebtToken":[6109],"IVariableDebtToken":[6155],"ReserveConfiguration":[11857],"UserConfiguration":[12368],"WadRayMath":[21219]},"id":7404,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":6521,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:51"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","file":"../dependencies/openzeppelin/contracts/IERC20Detailed.sol","id":6523,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7404,"sourceUnit":1465,"src":"63:89:51","symbolAliases":[{"foreign":{"id":6522,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:14:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../protocol/libraries/configuration/ReserveConfiguration.sol","id":6525,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7404,"sourceUnit":11858,"src":"153:98:51","symbolAliases":[{"foreign":{"id":6524,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"161:20:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"../protocol/libraries/configuration/UserConfiguration.sol","id":6527,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7404,"sourceUnit":12369,"src":"252:92:51","symbolAliases":[{"foreign":{"id":6526,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"260:17:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"../protocol/libraries/types/DataTypes.sol","id":6529,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7404,"sourceUnit":21634,"src":"345:68:51","symbolAliases":[{"foreign":{"id":6528,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"353:9:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol","file":"../protocol/libraries/math/WadRayMath.sol","id":6531,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7404,"sourceUnit":21220,"src":"414:69:51","symbolAliases":[{"foreign":{"id":6530,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"422:10:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"../interfaces/IPoolAddressesProvider.sol","id":6533,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7404,"sourceUnit":5070,"src":"484:80:51","symbolAliases":[{"foreign":{"id":6532,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"492:22:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol","file":"../interfaces/IStableDebtToken.sol","id":6535,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7404,"sourceUnit":6110,"src":"565:68:51","symbolAliases":[{"foreign":{"id":6534,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"573:16:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol","file":"../interfaces/IVariableDebtToken.sol","id":6537,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7404,"sourceUnit":6156,"src":"634:72:51","symbolAliases":[{"foreign":{"id":6536,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"642:18:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","file":"../interfaces/IPool.sol","id":6539,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7404,"sourceUnit":4861,"src":"707:46:51","symbolAliases":[{"foreign":{"id":6538,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"715:5:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolDataProvider.sol","file":"../interfaces/IPoolDataProvider.sol","id":6541,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7404,"sourceUnit":5792,"src":"754:70:51","symbolAliases":[{"foreign":{"id":6540,"name":"IPoolDataProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"762:17:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6543,"name":"IPoolDataProvider","nodeType":"IdentifierPath","referencedDeclaration":5791,"src":"1007:17:51"},"id":6544,"nodeType":"InheritanceSpecifier","src":"1007:17:51"}],"canonicalName":"AaveProtocolDataProvider","contractDependencies":[],"contractKind":"contract","documentation":{"id":6542,"nodeType":"StructuredDocumentation","src":"826:143:51","text":" @title AaveProtocolDataProvider\n @author Aave\n @notice Peripheral contract to collect and pre-process information from the Pool."},"fullyImplemented":true,"id":7403,"linearizedBaseContracts":[7403,5791],"name":"AaveProtocolDataProvider","nameLocation":"979:24:51","nodeType":"ContractDefinition","nodes":[{"id":6548,"libraryName":{"id":6545,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":11857,"src":"1035:20:51"},"nodeType":"UsingForDirective","src":"1029:65:51","typeName":{"id":6547,"nodeType":"UserDefinedTypeName","pathNode":{"id":6546,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"1060:33:51"},"referencedDeclaration":21318,"src":"1060:33:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"id":6552,"libraryName":{"id":6549,"name":"UserConfiguration","nodeType":"IdentifierPath","referencedDeclaration":12368,"src":"1103:17:51"},"nodeType":"UsingForDirective","src":"1097:59:51","typeName":{"id":6551,"nodeType":"UserDefinedTypeName","pathNode":{"id":6550,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"1125:30:51"},"referencedDeclaration":21322,"src":"1125:30:51","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},{"id":6555,"libraryName":{"id":6553,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":21219,"src":"1165:10:51"},"nodeType":"UsingForDirective","src":"1159:29:51","typeName":{"id":6554,"name":"uint256","nodeType":"ElementaryTypeName","src":"1180:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"constant":true,"id":6558,"mutability":"constant","name":"MKR","nameLocation":"1209:3:51","nodeType":"VariableDeclaration","scope":7403,"src":"1192:65:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6556,"name":"address","nodeType":"ElementaryTypeName","src":"1192:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307839663846373261413933303463384235393364353535463132654636353839634333413537394132","id":6557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1215:42:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2"},"visibility":"internal"},{"constant":true,"id":6561,"mutability":"constant","name":"ETH","nameLocation":"1278:3:51","nodeType":"VariableDeclaration","scope":7403,"src":"1261:65:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6559,"name":"address","nodeType":"ElementaryTypeName","src":"1261:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307845656565654565656545654565654565456545656545454565656565456565656565656545456545","id":6560,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1284:42:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"},"visibility":"internal"},{"baseFunctions":[5584],"constant":false,"documentation":{"id":6562,"nodeType":"StructuredDocumentation","src":"1331:33:51","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"0542975c","id":6565,"mutability":"immutable","name":"ADDRESSES_PROVIDER","nameLocation":"1407:18:51","nodeType":"VariableDeclaration","scope":7403,"src":"1367:58:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":6564,"nodeType":"UserDefinedTypeName","pathNode":{"id":6563,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"1367:22:51"},"referencedDeclaration":5069,"src":"1367:22:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"public"},{"body":{"id":6576,"nodeType":"Block","src":"1601:49:51","statements":[{"expression":{"id":6574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6572,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"1607:18:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6573,"name":"addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6569,"src":"1628:17:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"src":"1607:38:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":6575,"nodeType":"ExpressionStatement","src":"1607:38:51"}]},"documentation":{"id":6566,"nodeType":"StructuredDocumentation","src":"1430:114:51","text":" @notice Constructor\n @param addressesProvider The address of the PoolAddressesProvider contract"},"id":6577,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":6570,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6569,"mutability":"mutable","name":"addressesProvider","nameLocation":"1582:17:51","nodeType":"VariableDeclaration","scope":6577,"src":"1559:40:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":6568,"nodeType":"UserDefinedTypeName","pathNode":{"id":6567,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"1559:22:51"},"referencedDeclaration":5069,"src":"1559:22:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"1558:42:51"},"returnParameters":{"id":6571,"nodeType":"ParameterList","parameters":[],"src":"1601:0:51"},"scope":7403,"src":"1547:103:51","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[5592],"body":{"id":6687,"nodeType":"Block","src":"1774:692:51","statements":[{"assignments":[6588],"declarations":[{"constant":false,"id":6588,"mutability":"mutable","name":"pool","nameLocation":"1786:4:51","nodeType":"VariableDeclaration","scope":6687,"src":"1780:10:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":6587,"nodeType":"UserDefinedTypeName","pathNode":{"id":6586,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"1780:5:51"},"referencedDeclaration":4860,"src":"1780:5:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"}],"id":6594,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6590,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"1799:18:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":6591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"1799:26:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":6592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1799:28:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6589,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"1793:5:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":6593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1793:35:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"nodeType":"VariableDeclarationStatement","src":"1780:48:51"},{"assignments":[6599],"declarations":[{"constant":false,"id":6599,"mutability":"mutable","name":"reserves","nameLocation":"1851:8:51","nodeType":"VariableDeclaration","scope":6687,"src":"1834:25:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":6597,"name":"address","nodeType":"ElementaryTypeName","src":"1834:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6598,"nodeType":"ArrayTypeName","src":"1834:9:51","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":6603,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6600,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6588,"src":"1862:4:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":6601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReservesList","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"1862:20:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view external returns (address[] memory)"}},"id":6602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1862:22:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1834:50:51"},{"assignments":[6608],"declarations":[{"constant":false,"id":6608,"mutability":"mutable","name":"reservesTokens","nameLocation":"1909:14:51","nodeType":"VariableDeclaration","scope":6687,"src":"1890:33:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5577_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData[]"},"typeName":{"baseType":{"id":6606,"nodeType":"UserDefinedTypeName","pathNode":{"id":6605,"name":"TokenData","nodeType":"IdentifierPath","referencedDeclaration":5577,"src":"1890:9:51"},"referencedDeclaration":5577,"src":"1890:9:51","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5577_storage_ptr","typeString":"struct IPoolDataProvider.TokenData"}},"id":6607,"nodeType":"ArrayTypeName","src":"1890:11:51","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5577_storage_$dyn_storage_ptr","typeString":"struct IPoolDataProvider.TokenData[]"}},"visibility":"internal"}],"id":6616,"initialValue":{"arguments":[{"expression":{"id":6613,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6599,"src":"1942:8:51","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1942:15:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6612,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1926:15:51","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_TokenData_$5577_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct IPoolDataProvider.TokenData memory[] memory)"},"typeName":{"baseType":{"id":6610,"nodeType":"UserDefinedTypeName","pathNode":{"id":6609,"name":"TokenData","nodeType":"IdentifierPath","referencedDeclaration":5577,"src":"1930:9:51"},"referencedDeclaration":5577,"src":"1930:9:51","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5577_storage_ptr","typeString":"struct IPoolDataProvider.TokenData"}},"id":6611,"nodeType":"ArrayTypeName","src":"1930:11:51","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5577_storage_$dyn_storage_ptr","typeString":"struct IPoolDataProvider.TokenData[]"}}},"id":6615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1926:32:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5577_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1890:68:51"},{"body":{"id":6683,"nodeType":"Block","src":"2010:425:51","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":6628,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6599,"src":"2022:8:51","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6630,"indexExpression":{"id":6629,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6618,"src":"2031:1:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2022:11:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":6631,"name":"MKR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6558,"src":"2037:3:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2022:18:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6646,"nodeType":"IfStatement","src":"2018:134:51","trueBody":{"id":6645,"nodeType":"Block","src":"2042:110:51","statements":[{"expression":{"id":6642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6633,"name":"reservesTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"2052:14:51","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5577_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory[] memory"}},"id":6635,"indexExpression":{"id":6634,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6618,"src":"2067:1:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2052:17:51","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5577_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"4d4b52","id":6637,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2091:5:51","typeDescriptions":{"typeIdentifier":"t_stringliteral_ec76ec3a7e5f010a9229e69fa1945af6f0c6cc5b0a625bf03bd6381222192020","typeString":"literal_string \"MKR\""},"value":"MKR"},{"baseExpression":{"id":6638,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6599,"src":"2112:8:51","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6640,"indexExpression":{"id":6639,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6618,"src":"2121:1:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2112:11:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_ec76ec3a7e5f010a9229e69fa1945af6f0c6cc5b0a625bf03bd6381222192020","typeString":"literal_string \"MKR\""},{"typeIdentifier":"t_address","typeString":"address"}],"id":6636,"name":"TokenData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5577,"src":"2072:9:51","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_TokenData_$5577_storage_ptr_$","typeString":"type(struct IPoolDataProvider.TokenData storage pointer)"}},"id":6641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["symbol","tokenAddress"],"nodeType":"FunctionCall","src":"2072:53:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5577_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory"}},"src":"2052:73:51","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5577_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory"}},"id":6643,"nodeType":"ExpressionStatement","src":"2052:73:51"},{"id":6644,"nodeType":"Continue","src":"2135:8:51"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":6647,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6599,"src":"2163:8:51","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6649,"indexExpression":{"id":6648,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6618,"src":"2172:1:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2163:11:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":6650,"name":"ETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6561,"src":"2178:3:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2163:18:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6665,"nodeType":"IfStatement","src":"2159:134:51","trueBody":{"id":6664,"nodeType":"Block","src":"2183:110:51","statements":[{"expression":{"id":6661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6652,"name":"reservesTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"2193:14:51","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5577_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory[] memory"}},"id":6654,"indexExpression":{"id":6653,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6618,"src":"2208:1:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2193:17:51","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5577_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"455448","id":6656,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2232:5:51","typeDescriptions":{"typeIdentifier":"t_stringliteral_aaaebeba3810b1e6b70781f14b2d72c1cb89c0b2b320c43bb67ff79f562f5ff4","typeString":"literal_string \"ETH\""},"value":"ETH"},{"baseExpression":{"id":6657,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6599,"src":"2253:8:51","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6659,"indexExpression":{"id":6658,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6618,"src":"2262:1:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2253:11:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_aaaebeba3810b1e6b70781f14b2d72c1cb89c0b2b320c43bb67ff79f562f5ff4","typeString":"literal_string \"ETH\""},{"typeIdentifier":"t_address","typeString":"address"}],"id":6655,"name":"TokenData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5577,"src":"2213:9:51","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_TokenData_$5577_storage_ptr_$","typeString":"type(struct IPoolDataProvider.TokenData storage pointer)"}},"id":6660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["symbol","tokenAddress"],"nodeType":"FunctionCall","src":"2213:53:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5577_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory"}},"src":"2193:73:51","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5577_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory"}},"id":6662,"nodeType":"ExpressionStatement","src":"2193:73:51"},{"id":6663,"nodeType":"Continue","src":"2276:8:51"}]}},{"expression":{"id":6681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6666,"name":"reservesTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"2300:14:51","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5577_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory[] memory"}},"id":6668,"indexExpression":{"id":6667,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6618,"src":"2315:1:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2300:17:51","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5577_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"baseExpression":{"id":6671,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6599,"src":"2363:8:51","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6673,"indexExpression":{"id":6672,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6618,"src":"2372:1:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2363:11:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6670,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"2348:14:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":6674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2348:27:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":6675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":1458,"src":"2348:34:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view external returns (string memory)"}},"id":6676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2348:36:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"baseExpression":{"id":6677,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6599,"src":"2408:8:51","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6679,"indexExpression":{"id":6678,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6618,"src":"2417:1:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2408:11:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6669,"name":"TokenData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5577,"src":"2320:9:51","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_TokenData_$5577_storage_ptr_$","typeString":"type(struct IPoolDataProvider.TokenData storage pointer)"}},"id":6680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["symbol","tokenAddress"],"nodeType":"FunctionCall","src":"2320:108:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5577_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory"}},"src":"2300:128:51","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5577_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory"}},"id":6682,"nodeType":"ExpressionStatement","src":"2300:128:51"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6621,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6618,"src":"1984:1:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":6622,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6599,"src":"1988:8:51","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1988:15:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1984:19:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6684,"initializationExpression":{"assignments":[6618],"declarations":[{"constant":false,"id":6618,"mutability":"mutable","name":"i","nameLocation":"1977:1:51","nodeType":"VariableDeclaration","scope":6684,"src":"1969:9:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6617,"name":"uint256","nodeType":"ElementaryTypeName","src":"1969:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6620,"initialValue":{"hexValue":"30","id":6619,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1981:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1969:13:51"},"loopExpression":{"expression":{"id":6626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2005:3:51","subExpression":{"id":6625,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6618,"src":"2005:1:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6627,"nodeType":"ExpressionStatement","src":"2005:3:51"},"nodeType":"ForStatement","src":"1964:471:51"},{"expression":{"id":6685,"name":"reservesTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"2447:14:51","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5577_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory[] memory"}},"functionReturnParameters":6585,"id":6686,"nodeType":"Return","src":"2440:21:51"}]},"documentation":{"id":6578,"nodeType":"StructuredDocumentation","src":"1654:33:51","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"b316ff89","id":6688,"implemented":true,"kind":"function","modifiers":[],"name":"getAllReservesTokens","nameLocation":"1699:20:51","nodeType":"FunctionDefinition","overrides":{"id":6580,"nodeType":"OverrideSpecifier","overrides":[],"src":"1736:8:51"},"parameters":{"id":6579,"nodeType":"ParameterList","parameters":[],"src":"1719:2:51"},"returnParameters":{"id":6585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6584,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6688,"src":"1754:18:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5577_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData[]"},"typeName":{"baseType":{"id":6582,"nodeType":"UserDefinedTypeName","pathNode":{"id":6581,"name":"TokenData","nodeType":"IdentifierPath","referencedDeclaration":5577,"src":"1754:9:51"},"referencedDeclaration":5577,"src":"1754:9:51","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5577_storage_ptr","typeString":"struct IPoolDataProvider.TokenData"}},"id":6583,"nodeType":"ArrayTypeName","src":"1754:11:51","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5577_storage_$dyn_storage_ptr","typeString":"struct IPoolDataProvider.TokenData[]"}},"visibility":"internal"}],"src":"1753:20:51"},"scope":7403,"src":"1690:776:51","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5600],"body":{"id":6770,"nodeType":"Block","src":"2583:500:51","statements":[{"assignments":[6699],"declarations":[{"constant":false,"id":6699,"mutability":"mutable","name":"pool","nameLocation":"2595:4:51","nodeType":"VariableDeclaration","scope":6770,"src":"2589:10:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":6698,"nodeType":"UserDefinedTypeName","pathNode":{"id":6697,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"2589:5:51"},"referencedDeclaration":4860,"src":"2589:5:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"}],"id":6705,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6701,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"2608:18:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":6702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"2608:26:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":6703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2608:28:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6700,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"2602:5:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":6704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2602:35:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"nodeType":"VariableDeclarationStatement","src":"2589:48:51"},{"assignments":[6710],"declarations":[{"constant":false,"id":6710,"mutability":"mutable","name":"reserves","nameLocation":"2660:8:51","nodeType":"VariableDeclaration","scope":6770,"src":"2643:25:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":6708,"name":"address","nodeType":"ElementaryTypeName","src":"2643:7:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6709,"nodeType":"ArrayTypeName","src":"2643:9:51","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":6714,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6711,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6699,"src":"2671:4:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":6712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReservesList","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"2671:20:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view external returns (address[] memory)"}},"id":6713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2671:22:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"2643:50:51"},{"assignments":[6719],"declarations":[{"constant":false,"id":6719,"mutability":"mutable","name":"aTokens","nameLocation":"2718:7:51","nodeType":"VariableDeclaration","scope":6770,"src":"2699:26:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5577_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData[]"},"typeName":{"baseType":{"id":6717,"nodeType":"UserDefinedTypeName","pathNode":{"id":6716,"name":"TokenData","nodeType":"IdentifierPath","referencedDeclaration":5577,"src":"2699:9:51"},"referencedDeclaration":5577,"src":"2699:9:51","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5577_storage_ptr","typeString":"struct IPoolDataProvider.TokenData"}},"id":6718,"nodeType":"ArrayTypeName","src":"2699:11:51","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5577_storage_$dyn_storage_ptr","typeString":"struct IPoolDataProvider.TokenData[]"}},"visibility":"internal"}],"id":6727,"initialValue":{"arguments":[{"expression":{"id":6724,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6710,"src":"2744:8:51","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"2744:15:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6723,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2728:15:51","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_TokenData_$5577_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct IPoolDataProvider.TokenData memory[] memory)"},"typeName":{"baseType":{"id":6721,"nodeType":"UserDefinedTypeName","pathNode":{"id":6720,"name":"TokenData","nodeType":"IdentifierPath","referencedDeclaration":5577,"src":"2732:9:51"},"referencedDeclaration":5577,"src":"2732:9:51","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5577_storage_ptr","typeString":"struct IPoolDataProvider.TokenData"}},"id":6722,"nodeType":"ArrayTypeName","src":"2732:11:51","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5577_storage_$dyn_storage_ptr","typeString":"struct IPoolDataProvider.TokenData[]"}}},"id":6726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2728:32:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5577_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"2699:61:51"},{"body":{"id":6766,"nodeType":"Block","src":"2812:247:51","statements":[{"assignments":[6743],"declarations":[{"constant":false,"id":6743,"mutability":"mutable","name":"reserveData","nameLocation":"2849:11:51","nodeType":"VariableDeclaration","scope":6766,"src":"2820:40:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":6742,"nodeType":"UserDefinedTypeName","pathNode":{"id":6741,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"2820:21:51"},"referencedDeclaration":21315,"src":"2820:21:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":6750,"initialValue":{"arguments":[{"baseExpression":{"id":6746,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6710,"src":"2883:8:51","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6748,"indexExpression":{"id":6747,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6729,"src":"2892:1:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2883:11:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6744,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6699,"src":"2863:4:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":6745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4710,"src":"2863:19:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$21315_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":6749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2863:32:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"2820:75:51"},{"expression":{"id":6764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6751,"name":"aTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6719,"src":"2903:7:51","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5577_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory[] memory"}},"id":6753,"indexExpression":{"id":6752,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6729,"src":"2911:1:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2903:10:51","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5577_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":6756,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6743,"src":"2959:11:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":6757,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"2959:25:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6755,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"2944:14:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":6758,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2944:41:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":6759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":1458,"src":"2944:48:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view external returns (string memory)"}},"id":6760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2944:50:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"expression":{"id":6761,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6743,"src":"3018:11:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":6762,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"3018:25:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6754,"name":"TokenData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5577,"src":"2916:9:51","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_TokenData_$5577_storage_ptr_$","typeString":"type(struct IPoolDataProvider.TokenData storage pointer)"}},"id":6763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["symbol","tokenAddress"],"nodeType":"FunctionCall","src":"2916:136:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5577_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory"}},"src":"2903:149:51","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5577_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory"}},"id":6765,"nodeType":"ExpressionStatement","src":"2903:149:51"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6732,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6729,"src":"2786:1:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":6733,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6710,"src":"2790:8:51","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":6734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"2790:15:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2786:19:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6767,"initializationExpression":{"assignments":[6729],"declarations":[{"constant":false,"id":6729,"mutability":"mutable","name":"i","nameLocation":"2779:1:51","nodeType":"VariableDeclaration","scope":6767,"src":"2771:9:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6728,"name":"uint256","nodeType":"ElementaryTypeName","src":"2771:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6731,"initialValue":{"hexValue":"30","id":6730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2783:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2771:13:51"},"loopExpression":{"expression":{"id":6737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2807:3:51","subExpression":{"id":6736,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6729,"src":"2807:1:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6738,"nodeType":"ExpressionStatement","src":"2807:3:51"},"nodeType":"ForStatement","src":"2766:293:51"},{"expression":{"id":6768,"name":"aTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6719,"src":"3071:7:51","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5577_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData memory[] memory"}},"functionReturnParameters":6696,"id":6769,"nodeType":"Return","src":"3064:14:51"}]},"documentation":{"id":6689,"nodeType":"StructuredDocumentation","src":"2470:33:51","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"f561ae41","id":6771,"implemented":true,"kind":"function","modifiers":[],"name":"getAllATokens","nameLocation":"2515:13:51","nodeType":"FunctionDefinition","overrides":{"id":6691,"nodeType":"OverrideSpecifier","overrides":[],"src":"2545:8:51"},"parameters":{"id":6690,"nodeType":"ParameterList","parameters":[],"src":"2528:2:51"},"returnParameters":{"id":6696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6695,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6771,"src":"2563:18:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5577_memory_ptr_$dyn_memory_ptr","typeString":"struct IPoolDataProvider.TokenData[]"},"typeName":{"baseType":{"id":6693,"nodeType":"UserDefinedTypeName","pathNode":{"id":6692,"name":"TokenData","nodeType":"IdentifierPath","referencedDeclaration":5577,"src":"2563:9:51"},"referencedDeclaration":5577,"src":"2563:9:51","typeDescriptions":{"typeIdentifier":"t_struct$_TokenData_$5577_storage_ptr","typeString":"struct IPoolDataProvider.TokenData"}},"id":6694,"nodeType":"ArrayTypeName","src":"2563:11:51","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenData_$5577_storage_$dyn_storage_ptr","typeString":"struct IPoolDataProvider.TokenData[]"}},"visibility":"internal"}],"src":"2562:20:51"},"scope":7403,"src":"2506:577:51","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5626],"body":{"id":6839,"nodeType":"Block","src":"3523:406:51","statements":[{"assignments":[6802],"declarations":[{"constant":false,"id":6802,"mutability":"mutable","name":"configuration","nameLocation":"3570:13:51","nodeType":"VariableDeclaration","scope":6839,"src":"3529:54:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":6801,"nodeType":"UserDefinedTypeName","pathNode":{"id":6800,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"3529:33:51"},"referencedDeclaration":21318,"src":"3529:33:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":6811,"initialValue":{"arguments":[{"id":6809,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6774,"src":"3646:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6804,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"3592:18:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":6805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"3592:26:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":6806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3592:28:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6803,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"3586:5:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":6807,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3586:35:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":6808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"3586:59:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":6810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3586:66:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"3529:123:51"},{"expression":{"id":6821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":6812,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6780,"src":"3660:3:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6813,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6782,"src":"3665:20:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6814,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6784,"src":"3687:16:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6815,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6778,"src":"3705:8:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6816,"name":"reserveFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6786,"src":"3715:13:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null],"id":6817,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3659:72:51","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$__$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6818,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6802,"src":"3734:13:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":6819,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getParams","nodeType":"MemberAccess","referencedDeclaration":11823,"src":"3734:30:51","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256,uint256,uint256,uint256,uint256,uint256)"}},"id":6820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3734:32:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,uint256)"}},"src":"3659:107:51","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6822,"nodeType":"ExpressionStatement","src":"3659:107:51"},{"expression":{"id":6831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":6823,"name":"isActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6794,"src":"3774:8:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":6824,"name":"isFrozen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6796,"src":"3784:8:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":6825,"name":"borrowingEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6790,"src":"3794:16:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":6826,"name":"stableBorrowRateEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6792,"src":"3812:23:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},null],"id":6827,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3773:65:51","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$__$","typeString":"tuple(bool,bool,bool,bool,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6828,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6802,"src":"3841:13:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":6829,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":11757,"src":"3841:22:51","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":6830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3841:24:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"src":"3773:92:51","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6832,"nodeType":"ExpressionStatement","src":"3773:92:51"},{"expression":{"id":6837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6833,"name":"usageAsCollateralEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6788,"src":"3872:24:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6834,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6782,"src":"3899:20:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":6835,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3923:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3899:25:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3872:52:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6838,"nodeType":"ExpressionStatement","src":"3872:52:51"}]},"documentation":{"id":6772,"nodeType":"StructuredDocumentation","src":"3087:33:51","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"3e150141","id":6840,"implemented":true,"kind":"function","modifiers":[],"name":"getReserveConfigurationData","nameLocation":"3132:27:51","nodeType":"FunctionDefinition","overrides":{"id":6776,"nodeType":"OverrideSpecifier","overrides":[],"src":"3209:8:51"},"parameters":{"id":6775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6774,"mutability":"mutable","name":"asset","nameLocation":"3173:5:51","nodeType":"VariableDeclaration","scope":6840,"src":"3165:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6773,"name":"address","nodeType":"ElementaryTypeName","src":"3165:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3159:23:51"},"returnParameters":{"id":6797,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6778,"mutability":"mutable","name":"decimals","nameLocation":"3246:8:51","nodeType":"VariableDeclaration","scope":6840,"src":"3238:16:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6777,"name":"uint256","nodeType":"ElementaryTypeName","src":"3238:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6780,"mutability":"mutable","name":"ltv","nameLocation":"3270:3:51","nodeType":"VariableDeclaration","scope":6840,"src":"3262:11:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6779,"name":"uint256","nodeType":"ElementaryTypeName","src":"3262:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6782,"mutability":"mutable","name":"liquidationThreshold","nameLocation":"3289:20:51","nodeType":"VariableDeclaration","scope":6840,"src":"3281:28:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6781,"name":"uint256","nodeType":"ElementaryTypeName","src":"3281:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6784,"mutability":"mutable","name":"liquidationBonus","nameLocation":"3325:16:51","nodeType":"VariableDeclaration","scope":6840,"src":"3317:24:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6783,"name":"uint256","nodeType":"ElementaryTypeName","src":"3317:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6786,"mutability":"mutable","name":"reserveFactor","nameLocation":"3357:13:51","nodeType":"VariableDeclaration","scope":6840,"src":"3349:21:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6785,"name":"uint256","nodeType":"ElementaryTypeName","src":"3349:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6788,"mutability":"mutable","name":"usageAsCollateralEnabled","nameLocation":"3383:24:51","nodeType":"VariableDeclaration","scope":6840,"src":"3378:29:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6787,"name":"bool","nodeType":"ElementaryTypeName","src":"3378:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6790,"mutability":"mutable","name":"borrowingEnabled","nameLocation":"3420:16:51","nodeType":"VariableDeclaration","scope":6840,"src":"3415:21:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6789,"name":"bool","nodeType":"ElementaryTypeName","src":"3415:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6792,"mutability":"mutable","name":"stableBorrowRateEnabled","nameLocation":"3449:23:51","nodeType":"VariableDeclaration","scope":6840,"src":"3444:28:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6791,"name":"bool","nodeType":"ElementaryTypeName","src":"3444:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6794,"mutability":"mutable","name":"isActive","nameLocation":"3485:8:51","nodeType":"VariableDeclaration","scope":6840,"src":"3480:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6793,"name":"bool","nodeType":"ElementaryTypeName","src":"3480:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6796,"mutability":"mutable","name":"isFrozen","nameLocation":"3506:8:51","nodeType":"VariableDeclaration","scope":6840,"src":"3501:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6795,"name":"bool","nodeType":"ElementaryTypeName","src":"3501:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3230:290:51"},"scope":7403,"src":"3123:806:51","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5634],"body":{"id":6867,"nodeType":"Block","src":"4058:179:51","statements":[{"assignments":[6853],"declarations":[{"constant":false,"id":6853,"mutability":"mutable","name":"configuration","nameLocation":"4105:13:51","nodeType":"VariableDeclaration","scope":6867,"src":"4064:54:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":6852,"nodeType":"UserDefinedTypeName","pathNode":{"id":6851,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"4064:33:51"},"referencedDeclaration":21318,"src":"4064:33:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":6862,"initialValue":{"arguments":[{"id":6860,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6843,"src":"4181:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6855,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"4127:18:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":6856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"4127:26:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":6857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4127:28:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6854,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"4121:5:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":6858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4121:35:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":6859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"4121:59:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":6861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4121:66:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"4064:123:51"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6863,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6853,"src":"4200:13:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":6864,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getEModeCategory","nodeType":"MemberAccess","referencedDeclaration":11647,"src":"4200:30:51","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":6865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4200:32:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6848,"id":6866,"nodeType":"Return","src":"4193:39:51"}]},"documentation":{"id":6841,"nodeType":"StructuredDocumentation","src":"3933:33:51","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"163a0f20","id":6868,"implemented":true,"kind":"function","modifiers":[],"name":"getReserveEModeCategory","nameLocation":"3978:23:51","nodeType":"FunctionDefinition","overrides":{"id":6845,"nodeType":"OverrideSpecifier","overrides":[],"src":"4031:8:51"},"parameters":{"id":6844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6843,"mutability":"mutable","name":"asset","nameLocation":"4010:5:51","nodeType":"VariableDeclaration","scope":6868,"src":"4002:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6842,"name":"address","nodeType":"ElementaryTypeName","src":"4002:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4001:15:51"},"returnParameters":{"id":6848,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6847,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6868,"src":"4049:7:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6846,"name":"uint256","nodeType":"ElementaryTypeName","src":"4049:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4048:9:51"},"scope":7403,"src":"3969:268:51","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5644],"body":{"id":6894,"nodeType":"Block","src":"4394:105:51","statements":[{"expression":{"id":6892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":6879,"name":"borrowCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6875,"src":"4401:9:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6880,"name":"supplyCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6877,"src":"4412:9:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6881,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"4400:22:51","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":6888,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6871,"src":"4478:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6883,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"4431:18:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":6884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"4431:26:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":6885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4431:28:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6882,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"4425:5:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":6886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4425:35:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":6887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"4425:52:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":6889,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4425:59:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":6890,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getCaps","nodeType":"MemberAccess","referencedDeclaration":11856,"src":"4425:67:51","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256,uint256)"}},"id":6891,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4425:69:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"4400:94:51","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6893,"nodeType":"ExpressionStatement","src":"4400:94:51"}]},"documentation":{"id":6869,"nodeType":"StructuredDocumentation","src":"4241:33:51","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"46fbe558","id":6895,"implemented":true,"kind":"function","modifiers":[],"name":"getReserveCaps","nameLocation":"4286:14:51","nodeType":"FunctionDefinition","overrides":{"id":6873,"nodeType":"OverrideSpecifier","overrides":[],"src":"4338:8:51"},"parameters":{"id":6872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6871,"mutability":"mutable","name":"asset","nameLocation":"4314:5:51","nodeType":"VariableDeclaration","scope":6895,"src":"4306:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6870,"name":"address","nodeType":"ElementaryTypeName","src":"4306:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4300:23:51"},"returnParameters":{"id":6878,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6875,"mutability":"mutable","name":"borrowCap","nameLocation":"4364:9:51","nodeType":"VariableDeclaration","scope":6895,"src":"4356:17:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6874,"name":"uint256","nodeType":"ElementaryTypeName","src":"4356:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6877,"mutability":"mutable","name":"supplyCap","nameLocation":"4383:9:51","nodeType":"VariableDeclaration","scope":6895,"src":"4375:17:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6876,"name":"uint256","nodeType":"ElementaryTypeName","src":"4375:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4355:38:51"},"scope":7403,"src":"4277:222:51","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5652],"body":{"id":6918,"nodeType":"Block","src":"4620:102:51","statements":[{"expression":{"id":6916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[null,null,null,null,{"id":6904,"name":"isPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6902,"src":"4635:8:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":6905,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"4626:18:51","typeDescriptions":{"typeIdentifier":"t_tuple$__$__$__$__$_t_bool_$","typeString":"tuple(,,,,bool)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":6912,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6898,"src":"4700:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6907,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"4653:18:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":6908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"4653:26:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":6909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4653:28:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6906,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"4647:5:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":6910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4647:35:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":6911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"4647:52:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":6913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4647:59:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":6914,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":11757,"src":"4647:68:51","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":6915,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4647:70:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"src":"4626:91:51","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6917,"nodeType":"ExpressionStatement","src":"4626:91:51"}]},"documentation":{"id":6896,"nodeType":"StructuredDocumentation","src":"4503:33:51","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"b55d9904","id":6919,"implemented":true,"kind":"function","modifiers":[],"name":"getPaused","nameLocation":"4548:9:51","nodeType":"FunctionDefinition","overrides":{"id":6900,"nodeType":"OverrideSpecifier","overrides":[],"src":"4587:8:51"},"parameters":{"id":6899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6898,"mutability":"mutable","name":"asset","nameLocation":"4566:5:51","nodeType":"VariableDeclaration","scope":6919,"src":"4558:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6897,"name":"address","nodeType":"ElementaryTypeName","src":"4558:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4557:15:51"},"returnParameters":{"id":6903,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6902,"mutability":"mutable","name":"isPaused","nameLocation":"4610:8:51","nodeType":"VariableDeclaration","scope":6919,"src":"4605:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6901,"name":"bool","nodeType":"ElementaryTypeName","src":"4605:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4604:15:51"},"scope":7403,"src":"4539:183:51","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5660],"body":{"id":6939,"nodeType":"Block","src":"4843:98:51","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":6934,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6922,"src":"4909:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6929,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"4862:18:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":6930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"4862:26:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":6931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4862:28:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6928,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"4856:5:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":6932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4856:35:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":6933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"4856:52:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":6935,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4856:59:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":6936,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getSiloedBorrowing","nodeType":"MemberAccess","referencedDeclaration":11183,"src":"4856:78:51","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":6937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4856:80:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":6927,"id":6938,"nodeType":"Return","src":"4849:87:51"}]},"documentation":{"id":6920,"nodeType":"StructuredDocumentation","src":"4726:33:51","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"fcf40a62","id":6940,"implemented":true,"kind":"function","modifiers":[],"name":"getSiloedBorrowing","nameLocation":"4771:18:51","nodeType":"FunctionDefinition","overrides":{"id":6924,"nodeType":"OverrideSpecifier","overrides":[],"src":"4819:8:51"},"parameters":{"id":6923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6922,"mutability":"mutable","name":"asset","nameLocation":"4798:5:51","nodeType":"VariableDeclaration","scope":6940,"src":"4790:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6921,"name":"address","nodeType":"ElementaryTypeName","src":"4790:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4789:15:51"},"returnParameters":{"id":6927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6926,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6940,"src":"4837:4:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6925,"name":"bool","nodeType":"ElementaryTypeName","src":"4837:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4836:6:51"},"scope":7403,"src":"4762:179:51","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5668],"body":{"id":6960,"nodeType":"Block","src":"5072:105:51","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":6955,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6943,"src":"5138:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6950,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"5091:18:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":6951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"5091:26:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":6952,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5091:28:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6949,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"5085:5:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":6953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5085:35:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":6954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"5085:52:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":6956,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5085:59:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":6957,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLiquidationProtocolFee","nodeType":"MemberAccess","referencedDeclaration":11543,"src":"5085:85:51","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":6958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5085:87:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6948,"id":6959,"nodeType":"Return","src":"5078:94:51"}]},"documentation":{"id":6941,"nodeType":"StructuredDocumentation","src":"4945:33:51","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"3cb8a622","id":6961,"implemented":true,"kind":"function","modifiers":[],"name":"getLiquidationProtocolFee","nameLocation":"4990:25:51","nodeType":"FunctionDefinition","overrides":{"id":6945,"nodeType":"OverrideSpecifier","overrides":[],"src":"5045:8:51"},"parameters":{"id":6944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6943,"mutability":"mutable","name":"asset","nameLocation":"5024:5:51","nodeType":"VariableDeclaration","scope":6961,"src":"5016:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6942,"name":"address","nodeType":"ElementaryTypeName","src":"5016:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5015:15:51"},"returnParameters":{"id":6948,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6947,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6961,"src":"5063:7:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6946,"name":"uint256","nodeType":"ElementaryTypeName","src":"5063:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5062:9:51"},"scope":7403,"src":"4981:196:51","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5676],"body":{"id":6981,"nodeType":"Block","src":"5301:98:51","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":6976,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6964,"src":"5367:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6971,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"5320:18:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":6972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"5320:26:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":6973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5320:28:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6970,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"5314:5:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":6974,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5314:35:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":6975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"5314:52:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":6977,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5314:59:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":6978,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getUnbackedMintCap","nodeType":"MemberAccess","referencedDeclaration":11595,"src":"5314:78:51","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":6979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5314:80:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6969,"id":6980,"nodeType":"Return","src":"5307:87:51"}]},"documentation":{"id":6962,"nodeType":"StructuredDocumentation","src":"5181:33:51","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"7ba1ae36","id":6982,"implemented":true,"kind":"function","modifiers":[],"name":"getUnbackedMintCap","nameLocation":"5226:18:51","nodeType":"FunctionDefinition","overrides":{"id":6966,"nodeType":"OverrideSpecifier","overrides":[],"src":"5274:8:51"},"parameters":{"id":6965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6964,"mutability":"mutable","name":"asset","nameLocation":"5253:5:51","nodeType":"VariableDeclaration","scope":6982,"src":"5245:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6963,"name":"address","nodeType":"ElementaryTypeName","src":"5245:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5244:15:51"},"returnParameters":{"id":6969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6968,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6982,"src":"5292:7:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6967,"name":"uint256","nodeType":"ElementaryTypeName","src":"5292:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5291:9:51"},"scope":7403,"src":"5217:182:51","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5684],"body":{"id":7002,"nodeType":"Block","src":"5519:94:51","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":6997,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6985,"src":"5585:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6992,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"5538:18:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":6993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"5538:26:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":6994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5538:28:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6991,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"5532:5:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":6995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5532:35:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":6996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"5532:52:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":6998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5532:59:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":6999,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDebtCeiling","nodeType":"MemberAccess","referencedDeclaration":11491,"src":"5532:74:51","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":7000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5532:76:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6990,"id":7001,"nodeType":"Return","src":"5525:83:51"}]},"documentation":{"id":6983,"nodeType":"StructuredDocumentation","src":"5403:33:51","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"3c798109","id":7003,"implemented":true,"kind":"function","modifiers":[],"name":"getDebtCeiling","nameLocation":"5448:14:51","nodeType":"FunctionDefinition","overrides":{"id":6987,"nodeType":"OverrideSpecifier","overrides":[],"src":"5492:8:51"},"parameters":{"id":6986,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6985,"mutability":"mutable","name":"asset","nameLocation":"5471:5:51","nodeType":"VariableDeclaration","scope":7003,"src":"5463:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6984,"name":"address","nodeType":"ElementaryTypeName","src":"5463:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5462:15:51"},"returnParameters":{"id":6990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6989,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7003,"src":"5510:7:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6988,"name":"uint256","nodeType":"ElementaryTypeName","src":"5510:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5509:9:51"},"scope":7403,"src":"5439:174:51","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5690],"body":{"id":7013,"nodeType":"Block","src":"5728:60:51","statements":[{"expression":{"expression":{"id":7010,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11857,"src":"5741:20:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReserveConfiguration_$11857_$","typeString":"type(library ReserveConfiguration)"}},"id":7011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"DEBT_CEILING_DECIMALS","nodeType":"MemberAccess","referencedDeclaration":10728,"src":"5741:42:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7009,"id":7012,"nodeType":"Return","src":"5734:49:51"}]},"documentation":{"id":7004,"nodeType":"StructuredDocumentation","src":"5617:33:51","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"69b169e1","id":7014,"implemented":true,"kind":"function","modifiers":[],"name":"getDebtCeilingDecimals","nameLocation":"5662:22:51","nodeType":"FunctionDefinition","overrides":{"id":7006,"nodeType":"OverrideSpecifier","overrides":[],"src":"5701:8:51"},"parameters":{"id":7005,"nodeType":"ParameterList","parameters":[],"src":"5684:2:51"},"returnParameters":{"id":7009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7008,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7014,"src":"5719:7:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7007,"name":"uint256","nodeType":"ElementaryTypeName","src":"5719:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5718:9:51"},"scope":7403,"src":"5653:135:51","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[5720],"body":{"id":7101,"nodeType":"Block","src":"6318:688:51","statements":[{"assignments":[7049],"declarations":[{"constant":false,"id":7049,"mutability":"mutable","name":"reserve","nameLocation":"6353:7:51","nodeType":"VariableDeclaration","scope":7101,"src":"6324:36:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":7048,"nodeType":"UserDefinedTypeName","pathNode":{"id":7047,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"6324:21:51"},"referencedDeclaration":21315,"src":"6324:21:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":7058,"initialValue":{"arguments":[{"id":7056,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7017,"src":"6421:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7051,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"6369:18:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":7052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"6369:26:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":7053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6369:28:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7050,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"6363:5:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":7054,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6363:35:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":7055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4710,"src":"6363:50:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$21315_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":7057,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6363:69:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"6324:108:51"},{"expression":{"components":[{"expression":{"id":7059,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"6454:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7060,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"unbacked","nodeType":"MemberAccess","referencedDeclaration":21312,"src":"6454:16:51","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"id":7061,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"6478:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7062,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"accruedToTreasury","nodeType":"MemberAccess","referencedDeclaration":21310,"src":"6478:25:51","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":7064,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"6526:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7065,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"6526:21:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7063,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"6511:14:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":7066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6511:37:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":7067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"6511:49:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":7068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6511:51:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":7070,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"6585:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7071,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"6585:30:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7069,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"6570:14:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":7072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6570:46:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":7073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"6570:58:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":7074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6570:60:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":7076,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"6653:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7077,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21306,"src":"6653:32:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7075,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"6638:14:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":7078,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6638:48:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":7079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"6638:60:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":7080,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6638:62:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":7081,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"6708:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7082,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":21290,"src":"6708:28:51","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"id":7083,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"6744:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7084,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21294,"src":"6744:33:51","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"id":7085,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"6785:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7086,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21296,"src":"6785:31:51","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":7088,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"6841:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7089,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"6841:30:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7087,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6109,"src":"6824:16:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6109_$","typeString":"type(contract IStableDebtToken)"}},"id":7090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6824:48:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6109","typeString":"contract IStableDebtToken"}},"id":7091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getAverageStableRate","nodeType":"MemberAccess","referencedDeclaration":6052,"src":"6824:69:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":7092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6824:71:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":7093,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"6903:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7094,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21288,"src":"6903:22:51","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"id":7095,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"6933:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7096,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":21292,"src":"6933:27:51","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"id":7097,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7049,"src":"6968:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7098,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"lastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":21298,"src":"6968:27:51","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"id":7099,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6446:555:51","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint128_$_t_uint128_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint128_$_t_uint128_$_t_uint128_$_t_uint256_$_t_uint128_$_t_uint128_$_t_uint40_$","typeString":"tuple(uint128,uint128,uint256,uint256,uint256,uint128,uint128,uint128,uint256,uint128,uint128,uint40)"}},"functionReturnParameters":7044,"id":7100,"nodeType":"Return","src":"6439:562:51"}]},"documentation":{"id":7015,"nodeType":"StructuredDocumentation","src":"5792:33:51","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"35ea6a75","id":7102,"implemented":true,"kind":"function","modifiers":[],"name":"getReserveData","nameLocation":"5837:14:51","nodeType":"FunctionDefinition","overrides":{"id":7019,"nodeType":"OverrideSpecifier","overrides":[],"src":"5901:8:51"},"parameters":{"id":7018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7017,"mutability":"mutable","name":"asset","nameLocation":"5865:5:51","nodeType":"VariableDeclaration","scope":7102,"src":"5857:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7016,"name":"address","nodeType":"ElementaryTypeName","src":"5857:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5851:23:51"},"returnParameters":{"id":7044,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7021,"mutability":"mutable","name":"unbacked","nameLocation":"5938:8:51","nodeType":"VariableDeclaration","scope":7102,"src":"5930:16:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7020,"name":"uint256","nodeType":"ElementaryTypeName","src":"5930:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7023,"mutability":"mutable","name":"accruedToTreasuryScaled","nameLocation":"5962:23:51","nodeType":"VariableDeclaration","scope":7102,"src":"5954:31:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7022,"name":"uint256","nodeType":"ElementaryTypeName","src":"5954:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7025,"mutability":"mutable","name":"totalAToken","nameLocation":"6001:11:51","nodeType":"VariableDeclaration","scope":7102,"src":"5993:19:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7024,"name":"uint256","nodeType":"ElementaryTypeName","src":"5993:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7027,"mutability":"mutable","name":"totalStableDebt","nameLocation":"6028:15:51","nodeType":"VariableDeclaration","scope":7102,"src":"6020:23:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7026,"name":"uint256","nodeType":"ElementaryTypeName","src":"6020:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7029,"mutability":"mutable","name":"totalVariableDebt","nameLocation":"6059:17:51","nodeType":"VariableDeclaration","scope":7102,"src":"6051:25:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7028,"name":"uint256","nodeType":"ElementaryTypeName","src":"6051:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7031,"mutability":"mutable","name":"liquidityRate","nameLocation":"6092:13:51","nodeType":"VariableDeclaration","scope":7102,"src":"6084:21:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7030,"name":"uint256","nodeType":"ElementaryTypeName","src":"6084:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7033,"mutability":"mutable","name":"variableBorrowRate","nameLocation":"6121:18:51","nodeType":"VariableDeclaration","scope":7102,"src":"6113:26:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7032,"name":"uint256","nodeType":"ElementaryTypeName","src":"6113:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7035,"mutability":"mutable","name":"stableBorrowRate","nameLocation":"6155:16:51","nodeType":"VariableDeclaration","scope":7102,"src":"6147:24:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7034,"name":"uint256","nodeType":"ElementaryTypeName","src":"6147:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7037,"mutability":"mutable","name":"averageStableBorrowRate","nameLocation":"6187:23:51","nodeType":"VariableDeclaration","scope":7102,"src":"6179:31:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7036,"name":"uint256","nodeType":"ElementaryTypeName","src":"6179:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7039,"mutability":"mutable","name":"liquidityIndex","nameLocation":"6226:14:51","nodeType":"VariableDeclaration","scope":7102,"src":"6218:22:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7038,"name":"uint256","nodeType":"ElementaryTypeName","src":"6218:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7041,"mutability":"mutable","name":"variableBorrowIndex","nameLocation":"6256:19:51","nodeType":"VariableDeclaration","scope":7102,"src":"6248:27:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7040,"name":"uint256","nodeType":"ElementaryTypeName","src":"6248:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7043,"mutability":"mutable","name":"lastUpdateTimestamp","nameLocation":"6290:19:51","nodeType":"VariableDeclaration","scope":7102,"src":"6283:26:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":7042,"name":"uint40","nodeType":"ElementaryTypeName","src":"6283:6:51","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"5922:393:51"},"scope":7403,"src":"5828:1178:51","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5728],"body":{"id":7132,"nodeType":"Block","src":"7132:183:51","statements":[{"assignments":[7115],"declarations":[{"constant":false,"id":7115,"mutability":"mutable","name":"reserve","nameLocation":"7167:7:51","nodeType":"VariableDeclaration","scope":7132,"src":"7138:36:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":7114,"nodeType":"UserDefinedTypeName","pathNode":{"id":7113,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"7138:21:51"},"referencedDeclaration":21315,"src":"7138:21:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":7124,"initialValue":{"arguments":[{"id":7122,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7105,"src":"7235:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7117,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"7183:18:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":7118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"7183:26:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":7119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7183:28:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7116,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"7177:5:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":7120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7177:35:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":7121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4710,"src":"7177:50:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$21315_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":7123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7177:69:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"7138:108:51"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":7126,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7115,"src":"7274:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7127,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"7274:21:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7125,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"7259:14:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":7128,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7259:37:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":7129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"7259:49:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":7130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7259:51:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7110,"id":7131,"nodeType":"Return","src":"7252:58:51"}]},"documentation":{"id":7103,"nodeType":"StructuredDocumentation","src":"7010:33:51","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"51460e25","id":7133,"implemented":true,"kind":"function","modifiers":[],"name":"getATokenTotalSupply","nameLocation":"7055:20:51","nodeType":"FunctionDefinition","overrides":{"id":7107,"nodeType":"OverrideSpecifier","overrides":[],"src":"7105:8:51"},"parameters":{"id":7106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7105,"mutability":"mutable","name":"asset","nameLocation":"7084:5:51","nodeType":"VariableDeclaration","scope":7133,"src":"7076:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7104,"name":"address","nodeType":"ElementaryTypeName","src":"7076:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7075:15:51"},"returnParameters":{"id":7110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7109,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7133,"src":"7123:7:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7108,"name":"uint256","nodeType":"ElementaryTypeName","src":"7123:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7122:9:51"},"scope":7403,"src":"7046:269:51","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5736],"body":{"id":7170,"nodeType":"Block","src":"7433:269:51","statements":[{"assignments":[7146],"declarations":[{"constant":false,"id":7146,"mutability":"mutable","name":"reserve","nameLocation":"7468:7:51","nodeType":"VariableDeclaration","scope":7170,"src":"7439:36:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":7145,"nodeType":"UserDefinedTypeName","pathNode":{"id":7144,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"7439:21:51"},"referencedDeclaration":21315,"src":"7439:21:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":7155,"initialValue":{"arguments":[{"id":7153,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7136,"src":"7536:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7148,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"7484:18:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":7149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"7484:26:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":7150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7484:28:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7147,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"7478:5:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":7151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7478:35:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":7152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4710,"src":"7478:50:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$21315_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":7154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7478:69:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"7439:108:51"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":7157,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7146,"src":"7581:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7158,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"7581:30:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7156,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"7566:14:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":7159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7566:46:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":7160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"7566:58:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":7161,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7566:60:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":7163,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7146,"src":"7650:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7164,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21306,"src":"7650:32:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7162,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"7635:14:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":7165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7635:48:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":7166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"7635:60:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":7167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7635:62:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7566:131:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7141,"id":7169,"nodeType":"Return","src":"7553:144:51"}]},"documentation":{"id":7134,"nodeType":"StructuredDocumentation","src":"7319:33:51","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"4d44ac4f","id":7171,"implemented":true,"kind":"function","modifiers":[],"name":"getTotalDebt","nameLocation":"7364:12:51","nodeType":"FunctionDefinition","overrides":{"id":7138,"nodeType":"OverrideSpecifier","overrides":[],"src":"7406:8:51"},"parameters":{"id":7137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7136,"mutability":"mutable","name":"asset","nameLocation":"7385:5:51","nodeType":"VariableDeclaration","scope":7171,"src":"7377:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7135,"name":"address","nodeType":"ElementaryTypeName","src":"7377:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7376:15:51"},"returnParameters":{"id":7141,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7140,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7171,"src":"7424:7:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7139,"name":"uint256","nodeType":"ElementaryTypeName","src":"7424:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7423:9:51"},"scope":7403,"src":"7355:347:51","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5762],"body":{"id":7309,"nodeType":"Block","src":"8174:1048:51","statements":[{"assignments":[7202],"declarations":[{"constant":false,"id":7202,"mutability":"mutable","name":"reserve","nameLocation":"8209:7:51","nodeType":"VariableDeclaration","scope":7309,"src":"8180:36:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":7201,"nodeType":"UserDefinedTypeName","pathNode":{"id":7200,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"8180:21:51"},"referencedDeclaration":21315,"src":"8180:21:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":7211,"initialValue":{"arguments":[{"id":7209,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7174,"src":"8277:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7204,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"8225:18:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":7205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"8225:26:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":7206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8225:28:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7203,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"8219:5:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":7207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8219:35:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":7208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4710,"src":"8219:50:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$21315_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":7210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8219:69:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"8180:108:51"},{"assignments":[7216],"declarations":[{"constant":false,"id":7216,"mutability":"mutable","name":"userConfig","nameLocation":"8333:10:51","nodeType":"VariableDeclaration","scope":7309,"src":"8295:48:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":7215,"nodeType":"UserDefinedTypeName","pathNode":{"id":7214,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"8295:30:51"},"referencedDeclaration":21322,"src":"8295:30:51","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"id":7225,"initialValue":{"arguments":[{"id":7223,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7176,"src":"8410:4:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7218,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"8352:18:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":7219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"8352:26:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":7220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8352:28:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7217,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"8346:5:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":7221,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8346:35:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":7222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getUserConfiguration","nodeType":"MemberAccess","referencedDeclaration":4685,"src":"8346:63:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.UserConfigurationMap memory)"}},"id":7224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8346:69:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"8295:120:51"},{"expression":{"id":7234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7226,"name":"currentATokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7180,"src":"8422:20:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":7232,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7176,"src":"8493:4:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":7228,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7202,"src":"8460:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7229,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"8460:21:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7227,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"8445:14:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":7230,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8445:37:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":7231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"8445:47:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":7233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8445:53:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8422:76:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7235,"nodeType":"ExpressionStatement","src":"8422:76:51"},{"expression":{"id":7244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7236,"name":"currentVariableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7184,"src":"8504:19:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":7242,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7176,"src":"8585:4:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":7238,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7202,"src":"8541:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7239,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21306,"src":"8541:32:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7237,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"8526:14:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":7240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8526:48:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":7241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"8526:58:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":7243,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8526:64:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8504:86:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7245,"nodeType":"ExpressionStatement","src":"8504:86:51"},{"expression":{"id":7254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7246,"name":"currentStableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7182,"src":"8596:17:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":7252,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7176,"src":"8673:4:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":7248,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7202,"src":"8631:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7249,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"8631:30:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7247,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"8616:14:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":7250,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8616:46:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":7251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"8616:56:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":7253,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8616:62:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8596:82:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7255,"nodeType":"ExpressionStatement","src":"8596:82:51"},{"expression":{"id":7264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7256,"name":"principalStableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7186,"src":"8684:19:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":7262,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7176,"src":"8774:4:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":7258,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7202,"src":"8723:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7259,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"8723:30:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7257,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6109,"src":"8706:16:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6109_$","typeString":"type(contract IStableDebtToken)"}},"id":7260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8706:48:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6109","typeString":"contract IStableDebtToken"}},"id":7261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"principalBalanceOf","nodeType":"MemberAccess","referencedDeclaration":6102,"src":"8706:67:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":7263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8706:73:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8684:95:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7265,"nodeType":"ExpressionStatement","src":"8684:95:51"},{"expression":{"id":7274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7266,"name":"scaledVariableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7188,"src":"8785:18:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":7272,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7176,"src":"8875:4:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":7268,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7202,"src":"8825:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7269,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21306,"src":"8825:32:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7267,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6155,"src":"8806:18:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVariableDebtToken_$6155_$","typeString":"type(contract IVariableDebtToken)"}},"id":7270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8806:52:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVariableDebtToken_$6155","typeString":"contract IVariableDebtToken"}},"id":7271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"scaledBalanceOf","nodeType":"MemberAccess","referencedDeclaration":5950,"src":"8806:68:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":7273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8806:74:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8785:95:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7275,"nodeType":"ExpressionStatement","src":"8785:95:51"},{"expression":{"id":7279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7276,"name":"liquidityRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7192,"src":"8886:13:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":7277,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7202,"src":"8902:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7278,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":21290,"src":"8902:28:51","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"8886:44:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7280,"nodeType":"ExpressionStatement","src":"8886:44:51"},{"expression":{"id":7289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7281,"name":"stableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7190,"src":"8936:16:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":7287,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7176,"src":"9022:4:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":7283,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7202,"src":"8972:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7284,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"8972:30:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7282,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6109,"src":"8955:16:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6109_$","typeString":"type(contract IStableDebtToken)"}},"id":7285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8955:48:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6109","typeString":"contract IStableDebtToken"}},"id":7286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getUserStableRate","nodeType":"MemberAccess","referencedDeclaration":6060,"src":"8955:66:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":7288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8955:72:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8936:91:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7290,"nodeType":"ExpressionStatement","src":"8936:91:51"},{"expression":{"id":7299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7291,"name":"stableRateLastUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7194,"src":"9033:21:51","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":7297,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7176,"src":"9132:4:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":7293,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7202,"src":"9074:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7294,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"9074:30:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7292,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6109,"src":"9057:16:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6109_$","typeString":"type(contract IStableDebtToken)"}},"id":7295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9057:48:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6109","typeString":"contract IStableDebtToken"}},"id":7296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getUserLastUpdated","nodeType":"MemberAccess","referencedDeclaration":6068,"src":"9057:67:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint40_$","typeString":"function (address) view external returns (uint40)"}},"id":7298,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9057:85:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"9033:109:51","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"id":7300,"nodeType":"ExpressionStatement","src":"9033:109:51"},{"expression":{"id":7307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7301,"name":"usageAsCollateralEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7196,"src":"9148:24:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":7304,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7202,"src":"9206:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7305,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"9206:10:51","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":7302,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7216,"src":"9175:10:51","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":7303,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":12083,"src":"9175:30:51","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (bool)"}},"id":7306,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9175:42:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9148:69:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7308,"nodeType":"ExpressionStatement","src":"9148:69:51"}]},"documentation":{"id":7172,"nodeType":"StructuredDocumentation","src":"7706:33:51","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"28dd2d01","id":7310,"implemented":true,"kind":"function","modifiers":[],"name":"getUserReserveData","nameLocation":"7751:18:51","nodeType":"FunctionDefinition","overrides":{"id":7178,"nodeType":"OverrideSpecifier","overrides":[],"src":"7837:8:51"},"parameters":{"id":7177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7174,"mutability":"mutable","name":"asset","nameLocation":"7783:5:51","nodeType":"VariableDeclaration","scope":7310,"src":"7775:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7173,"name":"address","nodeType":"ElementaryTypeName","src":"7775:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7176,"mutability":"mutable","name":"user","nameLocation":"7802:4:51","nodeType":"VariableDeclaration","scope":7310,"src":"7794:12:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7175,"name":"address","nodeType":"ElementaryTypeName","src":"7794:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7769:41:51"},"returnParameters":{"id":7197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7180,"mutability":"mutable","name":"currentATokenBalance","nameLocation":"7874:20:51","nodeType":"VariableDeclaration","scope":7310,"src":"7866:28:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7179,"name":"uint256","nodeType":"ElementaryTypeName","src":"7866:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7182,"mutability":"mutable","name":"currentStableDebt","nameLocation":"7910:17:51","nodeType":"VariableDeclaration","scope":7310,"src":"7902:25:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7181,"name":"uint256","nodeType":"ElementaryTypeName","src":"7902:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7184,"mutability":"mutable","name":"currentVariableDebt","nameLocation":"7943:19:51","nodeType":"VariableDeclaration","scope":7310,"src":"7935:27:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7183,"name":"uint256","nodeType":"ElementaryTypeName","src":"7935:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7186,"mutability":"mutable","name":"principalStableDebt","nameLocation":"7978:19:51","nodeType":"VariableDeclaration","scope":7310,"src":"7970:27:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7185,"name":"uint256","nodeType":"ElementaryTypeName","src":"7970:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7188,"mutability":"mutable","name":"scaledVariableDebt","nameLocation":"8013:18:51","nodeType":"VariableDeclaration","scope":7310,"src":"8005:26:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7187,"name":"uint256","nodeType":"ElementaryTypeName","src":"8005:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7190,"mutability":"mutable","name":"stableBorrowRate","nameLocation":"8047:16:51","nodeType":"VariableDeclaration","scope":7310,"src":"8039:24:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7189,"name":"uint256","nodeType":"ElementaryTypeName","src":"8039:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7192,"mutability":"mutable","name":"liquidityRate","nameLocation":"8079:13:51","nodeType":"VariableDeclaration","scope":7310,"src":"8071:21:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7191,"name":"uint256","nodeType":"ElementaryTypeName","src":"8071:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7194,"mutability":"mutable","name":"stableRateLastUpdated","nameLocation":"8107:21:51","nodeType":"VariableDeclaration","scope":7310,"src":"8100:28:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":7193,"name":"uint40","nodeType":"ElementaryTypeName","src":"8100:6:51","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"constant":false,"id":7196,"mutability":"mutable","name":"usageAsCollateralEnabled","nameLocation":"8141:24:51","nodeType":"VariableDeclaration","scope":7310,"src":"8136:29:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7195,"name":"bool","nodeType":"ElementaryTypeName","src":"8136:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7858:313:51"},"scope":7403,"src":"7742:1480:51","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5774],"body":{"id":7345,"nodeType":"Block","src":"9483:246:51","statements":[{"assignments":[7327],"declarations":[{"constant":false,"id":7327,"mutability":"mutable","name":"reserve","nameLocation":"9518:7:51","nodeType":"VariableDeclaration","scope":7345,"src":"9489:36:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":7326,"nodeType":"UserDefinedTypeName","pathNode":{"id":7325,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"9489:21:51"},"referencedDeclaration":21315,"src":"9489:21:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":7336,"initialValue":{"arguments":[{"id":7334,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7313,"src":"9586:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7329,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"9534:18:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":7330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"9534:26:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":7331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9534:28:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7328,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"9528:5:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":7332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9528:35:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":7333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4710,"src":"9528:50:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$21315_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":7335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9528:69:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"9489:108:51"},{"expression":{"components":[{"expression":{"id":7337,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7327,"src":"9619:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7338,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"9619:21:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":7339,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7327,"src":"9648:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7340,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"9648:30:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":7341,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7327,"src":"9686:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7342,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21306,"src":"9686:32:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":7343,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9611:113:51","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_address_$","typeString":"tuple(address,address,address)"}},"functionReturnParameters":7322,"id":7344,"nodeType":"Return","src":"9604:120:51"}]},"documentation":{"id":7311,"nodeType":"StructuredDocumentation","src":"9226:33:51","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"d2493b6c","id":7346,"implemented":true,"kind":"function","modifiers":[],"name":"getReserveTokensAddresses","nameLocation":"9271:25:51","nodeType":"FunctionDefinition","overrides":{"id":7315,"nodeType":"OverrideSpecifier","overrides":[],"src":"9346:8:51"},"parameters":{"id":7314,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7313,"mutability":"mutable","name":"asset","nameLocation":"9310:5:51","nodeType":"VariableDeclaration","scope":7346,"src":"9302:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7312,"name":"address","nodeType":"ElementaryTypeName","src":"9302:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9296:23:51"},"returnParameters":{"id":7322,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7317,"mutability":"mutable","name":"aTokenAddress","nameLocation":"9383:13:51","nodeType":"VariableDeclaration","scope":7346,"src":"9375:21:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7316,"name":"address","nodeType":"ElementaryTypeName","src":"9375:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7319,"mutability":"mutable","name":"stableDebtTokenAddress","nameLocation":"9412:22:51","nodeType":"VariableDeclaration","scope":7346,"src":"9404:30:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7318,"name":"address","nodeType":"ElementaryTypeName","src":"9404:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7321,"mutability":"mutable","name":"variableDebtTokenAddress","nameLocation":"9450:24:51","nodeType":"VariableDeclaration","scope":7346,"src":"9442:32:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7320,"name":"address","nodeType":"ElementaryTypeName","src":"9442:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9367:113:51"},"scope":7403,"src":"9262:467:51","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5782],"body":{"id":7373,"nodeType":"Block","src":"9891:170:51","statements":[{"assignments":[7359],"declarations":[{"constant":false,"id":7359,"mutability":"mutable","name":"reserve","nameLocation":"9926:7:51","nodeType":"VariableDeclaration","scope":7373,"src":"9897:36:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":7358,"nodeType":"UserDefinedTypeName","pathNode":{"id":7357,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"9897:21:51"},"referencedDeclaration":21315,"src":"9897:21:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":7368,"initialValue":{"arguments":[{"id":7366,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7349,"src":"9994:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7361,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"9942:18:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":7362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"9942:26:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":7363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9942:28:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7360,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"9936:5:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":7364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9936:35:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":7365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4710,"src":"9936:50:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$21315_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":7367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9936:69:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"9897:108:51"},{"expression":{"components":[{"expression":{"id":7369,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7359,"src":"10020:7:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":7370,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":21308,"src":"10020:35:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":7371,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10019:37:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":7354,"id":7372,"nodeType":"Return","src":"10012:44:51"}]},"documentation":{"id":7347,"nodeType":"StructuredDocumentation","src":"9733:33:51","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"6744362a","id":7374,"implemented":true,"kind":"function","modifiers":[],"name":"getInterestRateStrategyAddress","nameLocation":"9778:30:51","nodeType":"FunctionDefinition","overrides":{"id":7351,"nodeType":"OverrideSpecifier","overrides":[],"src":"9846:8:51"},"parameters":{"id":7350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7349,"mutability":"mutable","name":"asset","nameLocation":"9822:5:51","nodeType":"VariableDeclaration","scope":7374,"src":"9814:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7348,"name":"address","nodeType":"ElementaryTypeName","src":"9814:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9808:23:51"},"returnParameters":{"id":7354,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7353,"mutability":"mutable","name":"irStrategyAddress","nameLocation":"9872:17:51","nodeType":"VariableDeclaration","scope":7374,"src":"9864:25:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7352,"name":"address","nodeType":"ElementaryTypeName","src":"9864:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9863:27:51"},"scope":7403,"src":"9769:292:51","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5790],"body":{"id":7401,"nodeType":"Block","src":"10183:183:51","statements":[{"assignments":[7387],"declarations":[{"constant":false,"id":7387,"mutability":"mutable","name":"configuration","nameLocation":"10230:13:51","nodeType":"VariableDeclaration","scope":7401,"src":"10189:54:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":7386,"nodeType":"UserDefinedTypeName","pathNode":{"id":7385,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"10189:33:51"},"referencedDeclaration":21318,"src":"10189:33:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":7396,"initialValue":{"arguments":[{"id":7394,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7377,"src":"10306:5:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7389,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"10252:18:51","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":7390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"10252:26:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":7391,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10252:28:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7388,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"10246:5:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":7392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10246:35:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":7393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"10246:59:51","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":7395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10246:66:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"10189:123:51"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7397,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7387,"src":"10326:13:51","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":7398,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlashLoanEnabled","nodeType":"MemberAccess","referencedDeclaration":11697,"src":"10326:33:51","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":7399,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10326:35:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7382,"id":7400,"nodeType":"Return","src":"10319:42:51"}]},"documentation":{"id":7375,"nodeType":"StructuredDocumentation","src":"10065:33:51","text":"@inheritdoc IPoolDataProvider"},"functionSelector":"d7ed3ef4","id":7402,"implemented":true,"kind":"function","modifiers":[],"name":"getFlashLoanEnabled","nameLocation":"10110:19:51","nodeType":"FunctionDefinition","overrides":{"id":7379,"nodeType":"OverrideSpecifier","overrides":[],"src":"10159:8:51"},"parameters":{"id":7378,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7377,"mutability":"mutable","name":"asset","nameLocation":"10138:5:51","nodeType":"VariableDeclaration","scope":7402,"src":"10130:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7376,"name":"address","nodeType":"ElementaryTypeName","src":"10130:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10129:15:51"},"returnParameters":{"id":7382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7381,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7402,"src":"10177:4:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7380,"name":"bool","nodeType":"ElementaryTypeName","src":"10177:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10176:6:51"},"scope":7403,"src":"10101:265:51","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":7404,"src":"970:9398:51","usedErrors":[]}],"src":"37:10332:51"},"id":51},"@aave/core-v3/contracts/misc/interfaces/IWETH.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/misc/interfaces/IWETH.sol","exportedSymbols":{"IWETH":[7434]},"id":7435,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":7405,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:52"},{"abstract":false,"baseContracts":[],"canonicalName":"IWETH","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":7434,"linearizedBaseContracts":[7434],"name":"IWETH","nameLocation":"72:5:52","nodeType":"ContractDefinition","nodes":[{"functionSelector":"d0e30db0","id":7408,"implemented":false,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"91:7:52","nodeType":"FunctionDefinition","parameters":{"id":7406,"nodeType":"ParameterList","parameters":[],"src":"98:2:52"},"returnParameters":{"id":7407,"nodeType":"ParameterList","parameters":[],"src":"117:0:52"},"scope":7434,"src":"82:36:52","stateMutability":"payable","virtual":false,"visibility":"external"},{"functionSelector":"2e1a7d4d","id":7413,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"131:8:52","nodeType":"FunctionDefinition","parameters":{"id":7411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7410,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7413,"src":"140:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7409,"name":"uint256","nodeType":"ElementaryTypeName","src":"140:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"139:9:52"},"returnParameters":{"id":7412,"nodeType":"ParameterList","parameters":[],"src":"157:0:52"},"scope":7434,"src":"122:36:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"095ea7b3","id":7422,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"171:7:52","nodeType":"FunctionDefinition","parameters":{"id":7418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7415,"mutability":"mutable","name":"guy","nameLocation":"187:3:52","nodeType":"VariableDeclaration","scope":7422,"src":"179:11:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7414,"name":"address","nodeType":"ElementaryTypeName","src":"179:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7417,"mutability":"mutable","name":"wad","nameLocation":"200:3:52","nodeType":"VariableDeclaration","scope":7422,"src":"192:11:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7416,"name":"uint256","nodeType":"ElementaryTypeName","src":"192:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"178:26:52"},"returnParameters":{"id":7421,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7420,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7422,"src":"223:4:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7419,"name":"bool","nodeType":"ElementaryTypeName","src":"223:4:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"222:6:52"},"scope":7434,"src":"162:67:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"23b872dd","id":7433,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"242:12:52","nodeType":"FunctionDefinition","parameters":{"id":7429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7424,"mutability":"mutable","name":"src","nameLocation":"263:3:52","nodeType":"VariableDeclaration","scope":7433,"src":"255:11:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7423,"name":"address","nodeType":"ElementaryTypeName","src":"255:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7426,"mutability":"mutable","name":"dst","nameLocation":"276:3:52","nodeType":"VariableDeclaration","scope":7433,"src":"268:11:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7425,"name":"address","nodeType":"ElementaryTypeName","src":"268:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7428,"mutability":"mutable","name":"wad","nameLocation":"289:3:52","nodeType":"VariableDeclaration","scope":7433,"src":"281:11:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7427,"name":"uint256","nodeType":"ElementaryTypeName","src":"281:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"254:39:52"},"returnParameters":{"id":7432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7431,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7433,"src":"312:4:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7430,"name":"bool","nodeType":"ElementaryTypeName","src":"312:4:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"311:6:52"},"scope":7434,"src":"233:85:52","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":7435,"src":"62:258:52","usedErrors":[]}],"src":"37:284:52"},"id":52},"@aave/core-v3/contracts/mocks/flashloan/MockFlashLoanReceiver.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/mocks/flashloan/MockFlashLoanReceiver.sol","exportedSymbols":{"FlashLoanReceiverBase":[3427],"GPv2SafeERC20":[118],"IERC20":[1442],"IPoolAddressesProvider":[5069],"MintableERC20":[8768],"MockFlashLoanReceiver":[7659]},"id":7660,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":7436,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:53"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../dependencies/openzeppelin/contracts/IERC20.sol","id":7438,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7660,"sourceUnit":1443,"src":"62:76:53","symbolAliases":[{"foreign":{"id":7437,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:6:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"../../dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":7440,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7660,"sourceUnit":119,"src":"139:84:53","symbolAliases":[{"foreign":{"id":7439,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"147:13:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":7442,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7660,"sourceUnit":5070,"src":"224:83:53","symbolAliases":[{"foreign":{"id":7441,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"232:22:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/flashloan/base/FlashLoanReceiverBase.sol","file":"../../flashloan/base/FlashLoanReceiverBase.sol","id":7444,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7660,"sourceUnit":3428,"src":"308:85:53","symbolAliases":[{"foreign":{"id":7443,"name":"FlashLoanReceiverBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"316:21:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol","file":"../tokens/MintableERC20.sol","id":7446,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7660,"sourceUnit":8769,"src":"394:58:53","symbolAliases":[{"foreign":{"id":7445,"name":"MintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"402:13:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":7447,"name":"FlashLoanReceiverBase","nodeType":"IdentifierPath","referencedDeclaration":3427,"src":"488:21:53"},"id":7448,"nodeType":"InheritanceSpecifier","src":"488:21:53"}],"canonicalName":"MockFlashLoanReceiver","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":7659,"linearizedBaseContracts":[7659,3427,3505],"name":"MockFlashLoanReceiver","nameLocation":"463:21:53","nodeType":"ContractDefinition","nodes":[{"id":7452,"libraryName":{"id":7449,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"520:13:53"},"nodeType":"UsingForDirective","src":"514:31:53","typeName":{"id":7451,"nodeType":"UserDefinedTypeName","pathNode":{"id":7450,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"538:6:53"},"referencedDeclaration":1442,"src":"538:6:53","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"anonymous":false,"id":7463,"name":"ExecutedWithFail","nameLocation":"555:16:53","nodeType":"EventDefinition","parameters":{"id":7462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7455,"indexed":false,"mutability":"mutable","name":"_assets","nameLocation":"582:7:53","nodeType":"VariableDeclaration","scope":7463,"src":"572:17:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":7453,"name":"address","nodeType":"ElementaryTypeName","src":"572:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7454,"nodeType":"ArrayTypeName","src":"572:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":7458,"indexed":false,"mutability":"mutable","name":"_amounts","nameLocation":"601:8:53","nodeType":"VariableDeclaration","scope":7463,"src":"591:18:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7456,"name":"uint256","nodeType":"ElementaryTypeName","src":"591:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7457,"nodeType":"ArrayTypeName","src":"591:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":7461,"indexed":false,"mutability":"mutable","name":"_premiums","nameLocation":"621:9:53","nodeType":"VariableDeclaration","scope":7463,"src":"611:19:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7459,"name":"uint256","nodeType":"ElementaryTypeName","src":"611:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7460,"nodeType":"ArrayTypeName","src":"611:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"571:60:53"},"src":"549:83:53"},{"anonymous":false,"id":7474,"name":"ExecutedWithSuccess","nameLocation":"641:19:53","nodeType":"EventDefinition","parameters":{"id":7473,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7466,"indexed":false,"mutability":"mutable","name":"_assets","nameLocation":"671:7:53","nodeType":"VariableDeclaration","scope":7474,"src":"661:17:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":7464,"name":"address","nodeType":"ElementaryTypeName","src":"661:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7465,"nodeType":"ArrayTypeName","src":"661:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":7469,"indexed":false,"mutability":"mutable","name":"_amounts","nameLocation":"690:8:53","nodeType":"VariableDeclaration","scope":7474,"src":"680:18:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7467,"name":"uint256","nodeType":"ElementaryTypeName","src":"680:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7468,"nodeType":"ArrayTypeName","src":"680:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":7472,"indexed":false,"mutability":"mutable","name":"_premiums","nameLocation":"710:9:53","nodeType":"VariableDeclaration","scope":7474,"src":"700:19:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7470,"name":"uint256","nodeType":"ElementaryTypeName","src":"700:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7471,"nodeType":"ArrayTypeName","src":"700:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"660:60:53"},"src":"635:86:53"},{"constant":false,"id":7476,"mutability":"mutable","name":"_failExecution","nameLocation":"739:14:53","nodeType":"VariableDeclaration","scope":7659,"src":"725:28:53","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7475,"name":"bool","nodeType":"ElementaryTypeName","src":"725:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7478,"mutability":"mutable","name":"_amountToApprove","nameLocation":"774:16:53","nodeType":"VariableDeclaration","scope":7659,"src":"757:33:53","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7477,"name":"uint256","nodeType":"ElementaryTypeName","src":"757:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7480,"mutability":"mutable","name":"_simulateEOA","nameLocation":"808:12:53","nodeType":"VariableDeclaration","scope":7659,"src":"794:26:53","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7479,"name":"bool","nodeType":"ElementaryTypeName","src":"794:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"body":{"id":7489,"nodeType":"Block","src":"902:2:53","statements":[]},"id":7490,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":7486,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7483,"src":"892:8:53","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}}],"id":7487,"kind":"baseConstructorSpecifier","modifierName":{"id":7485,"name":"FlashLoanReceiverBase","nodeType":"IdentifierPath","referencedDeclaration":3427,"src":"870:21:53"},"nodeType":"ModifierInvocation","src":"870:31:53"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":7484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7483,"mutability":"mutable","name":"provider","nameLocation":"860:8:53","nodeType":"VariableDeclaration","scope":7490,"src":"837:31:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":7482,"nodeType":"UserDefinedTypeName","pathNode":{"id":7481,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"837:22:53"},"referencedDeclaration":5069,"src":"837:22:53","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"836:33:53"},"returnParameters":{"id":7488,"nodeType":"ParameterList","parameters":[],"src":"902:0:53"},"scope":7659,"src":"825:79:53","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":7499,"nodeType":"Block","src":"960:32:53","statements":[{"expression":{"id":7497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7495,"name":"_failExecution","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7476,"src":"966:14:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7496,"name":"fail","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7492,"src":"983:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"966:21:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7498,"nodeType":"ExpressionStatement","src":"966:21:53"}]},"functionSelector":"388f70f1","id":7500,"implemented":true,"kind":"function","modifiers":[],"name":"setFailExecutionTransfer","nameLocation":"917:24:53","nodeType":"FunctionDefinition","parameters":{"id":7493,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7492,"mutability":"mutable","name":"fail","nameLocation":"947:4:53","nodeType":"VariableDeclaration","scope":7500,"src":"942:9:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7491,"name":"bool","nodeType":"ElementaryTypeName","src":"942:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"941:11:53"},"returnParameters":{"id":7494,"nodeType":"ParameterList","parameters":[],"src":"960:0:53"},"scope":7659,"src":"908:84:53","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":7509,"nodeType":"Block","src":"1056:45:53","statements":[{"expression":{"id":7507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7505,"name":"_amountToApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7478,"src":"1062:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7506,"name":"amountToApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7502,"src":"1081:15:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1062:34:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7508,"nodeType":"ExpressionStatement","src":"1062:34:53"}]},"functionSelector":"bf443f85","id":7510,"implemented":true,"kind":"function","modifiers":[],"name":"setAmountToApprove","nameLocation":"1005:18:53","nodeType":"FunctionDefinition","parameters":{"id":7503,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7502,"mutability":"mutable","name":"amountToApprove","nameLocation":"1032:15:53","nodeType":"VariableDeclaration","scope":7510,"src":"1024:23:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7501,"name":"uint256","nodeType":"ElementaryTypeName","src":"1024:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1023:25:53"},"returnParameters":{"id":7504,"nodeType":"ParameterList","parameters":[],"src":"1056:0:53"},"scope":7659,"src":"996:105:53","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":7519,"nodeType":"Block","src":"1147:30:53","statements":[{"expression":{"id":7517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7515,"name":"_simulateEOA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7480,"src":"1153:12:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7516,"name":"flag","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7512,"src":"1168:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1153:19:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7518,"nodeType":"ExpressionStatement","src":"1153:19:53"}]},"functionSelector":"e9a6a25b","id":7520,"implemented":true,"kind":"function","modifiers":[],"name":"setSimulateEOA","nameLocation":"1114:14:53","nodeType":"FunctionDefinition","parameters":{"id":7513,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7512,"mutability":"mutable","name":"flag","nameLocation":"1134:4:53","nodeType":"VariableDeclaration","scope":7520,"src":"1129:9:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7511,"name":"bool","nodeType":"ElementaryTypeName","src":"1129:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1128:11:53"},"returnParameters":{"id":7514,"nodeType":"ParameterList","parameters":[],"src":"1147:0:53"},"scope":7659,"src":"1105:72:53","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":7527,"nodeType":"Block","src":"1241:34:53","statements":[{"expression":{"id":7525,"name":"_amountToApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7478,"src":"1254:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7524,"id":7526,"nodeType":"Return","src":"1247:23:53"}]},"functionSelector":"5e76bba3","id":7528,"implemented":true,"kind":"function","modifiers":[],"name":"getAmountToApprove","nameLocation":"1190:18:53","nodeType":"FunctionDefinition","parameters":{"id":7521,"nodeType":"ParameterList","parameters":[],"src":"1208:2:53"},"returnParameters":{"id":7524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7523,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7528,"src":"1232:7:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7522,"name":"uint256","nodeType":"ElementaryTypeName","src":"1232:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1231:9:53"},"scope":7659,"src":"1181:94:53","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":7535,"nodeType":"Block","src":"1329:30:53","statements":[{"expression":{"id":7533,"name":"_simulateEOA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7480,"src":"1342:12:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7532,"id":7534,"nodeType":"Return","src":"1335:19:53"}]},"functionSelector":"4444f331","id":7536,"implemented":true,"kind":"function","modifiers":[],"name":"simulateEOA","nameLocation":"1288:11:53","nodeType":"FunctionDefinition","parameters":{"id":7529,"nodeType":"ParameterList","parameters":[],"src":"1299:2:53"},"returnParameters":{"id":7532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7531,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7536,"src":"1323:4:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7530,"name":"bool","nodeType":"ElementaryTypeName","src":"1323:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1322:6:53"},"scope":7659,"src":"1279:80:53","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[3492],"body":{"id":7657,"nodeType":"Block","src":"1568:858:53","statements":[{"condition":{"id":7555,"name":"_failExecution","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7476,"src":"1578:14:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7566,"nodeType":"IfStatement","src":"1574:111:53","trueBody":{"id":7565,"nodeType":"Block","src":"1594:91:53","statements":[{"eventCall":{"arguments":[{"id":7557,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7539,"src":"1624:6:53","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"id":7558,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7542,"src":"1632:7:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":7559,"name":"premiums","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7545,"src":"1641:8:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":7556,"name":"ExecutedWithFail","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7463,"src":"1607:16:53","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory,uint256[] memory,uint256[] memory)"}},"id":7560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1607:43:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7561,"nodeType":"EmitStatement","src":"1602:48:53"},{"expression":{"id":7563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1665:13:53","subExpression":{"id":7562,"name":"_simulateEOA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7480,"src":"1666:12:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7554,"id":7564,"nodeType":"Return","src":"1658:20:53"}]}},{"body":{"id":7647,"nodeType":"Block","src":"1735:611:53","statements":[{"assignments":[7580],"declarations":[{"constant":false,"id":7580,"mutability":"mutable","name":"token","nameLocation":"1807:5:53","nodeType":"VariableDeclaration","scope":7647,"src":"1793:19:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$8768","typeString":"contract MintableERC20"},"typeName":{"id":7579,"nodeType":"UserDefinedTypeName","pathNode":{"id":7578,"name":"MintableERC20","nodeType":"IdentifierPath","referencedDeclaration":8768,"src":"1793:13:53"},"referencedDeclaration":8768,"src":"1793:13:53","typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$8768","typeString":"contract MintableERC20"}},"visibility":"internal"}],"id":7586,"initialValue":{"arguments":[{"baseExpression":{"id":7582,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7539,"src":"1829:6:53","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":7584,"indexExpression":{"id":7583,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7568,"src":"1836:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1829:9:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7581,"name":"MintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8768,"src":"1815:13:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MintableERC20_$8768_$","typeString":"type(contract MintableERC20)"}},"id":7585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1815:24:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$8768","typeString":"contract MintableERC20"}},"nodeType":"VariableDeclarationStatement","src":"1793:46:53"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":7588,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7542,"src":"1918:7:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7590,"indexExpression":{"id":7589,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7568,"src":"1926:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1918:10:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"arguments":[{"id":7599,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1968:4:53","typeDescriptions":{"typeIdentifier":"t_contract$_MockFlashLoanReceiver_$7659","typeString":"contract MockFlashLoanReceiver"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MockFlashLoanReceiver_$7659","typeString":"contract MockFlashLoanReceiver"}],"id":7598,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1960:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7597,"name":"address","nodeType":"ElementaryTypeName","src":"1960:7:53","typeDescriptions":{}}},"id":7600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1960:13:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"baseExpression":{"id":7592,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7539,"src":"1939:6:53","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":7594,"indexExpression":{"id":7593,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7568,"src":"1946:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1939:9:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7591,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"1932:6:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":7595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1932:17:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":7596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"1932:27:53","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":7601,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1932:42:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1918:56:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e76616c69642062616c616e636520666f722074686520636f6e7472616374","id":7603,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1984:34:53","typeDescriptions":{"typeIdentifier":"t_stringliteral_b7eb1acc2a916521532d41db798e862e3bc634b536ffa4062c39b663132b6869","typeString":"literal_string \"Invalid balance for the contract\""},"value":"Invalid balance for the contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b7eb1acc2a916521532d41db798e862e3bc634b536ffa4062c39b663132b6869","typeString":"literal_string \"Invalid balance for the contract\""}],"id":7587,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1901:7:53","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":7604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1901:125:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7605,"nodeType":"ExpressionStatement","src":"1901:125:53"},{"assignments":[7607],"declarations":[{"constant":false,"id":7607,"mutability":"mutable","name":"amountToReturn","nameLocation":"2043:14:53","nodeType":"VariableDeclaration","scope":7647,"src":"2035:22:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7606,"name":"uint256","nodeType":"ElementaryTypeName","src":"2035:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7621,"initialValue":{"condition":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7608,"name":"_amountToApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7478,"src":"2061:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":7609,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2081:1:53","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2061:21:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":7611,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2060:23:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":7613,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7542,"src":"2121:7:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7615,"indexExpression":{"id":7614,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7568,"src":"2129:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2121:10:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"baseExpression":{"id":7616,"name":"premiums","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7545,"src":"2134:8:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7618,"indexExpression":{"id":7617,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7568,"src":"2143:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2134:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2121:24:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"2060:85:53","trueExpression":{"id":7612,"name":"_amountToApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7478,"src":"2094:16:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2035:110:53"},{"expression":{"arguments":[{"arguments":[{"id":7627,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2255:4:53","typeDescriptions":{"typeIdentifier":"t_contract$_MockFlashLoanReceiver_$7659","typeString":"contract MockFlashLoanReceiver"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MockFlashLoanReceiver_$7659","typeString":"contract MockFlashLoanReceiver"}],"id":7626,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2247:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7625,"name":"address","nodeType":"ElementaryTypeName","src":"2247:7:53","typeDescriptions":{}}},"id":7628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2247:13:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":7629,"name":"premiums","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7545,"src":"2262:8:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":7631,"indexExpression":{"id":7630,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7568,"src":"2271:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2262:11:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7622,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7580,"src":"2236:5:53","typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$8768","typeString":"contract MintableERC20"}},"id":7624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":8755,"src":"2236:10:53","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":7632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2236:38:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7633,"nodeType":"ExpressionStatement","src":"2236:38:53"},{"expression":{"arguments":[{"arguments":[{"id":7642,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3407,"src":"2317:4:53","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}],"id":7641,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2309:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7640,"name":"address","nodeType":"ElementaryTypeName","src":"2309:7:53","typeDescriptions":{}}},"id":7643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2309:13:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7644,"name":"amountToReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7607,"src":"2324:14:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"baseExpression":{"id":7635,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7539,"src":"2290:6:53","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":7637,"indexExpression":{"id":7636,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7568,"src":"2297:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2290:9:53","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7634,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"2283:6:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":7638,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2283:17:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":7639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1411,"src":"2283:25:53","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":7645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2283:56:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7646,"nodeType":"ExpressionStatement","src":"2283:56:53"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7571,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7568,"src":"1711:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":7572,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7539,"src":"1715:6:53","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":7573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1715:13:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1711:17:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7648,"initializationExpression":{"assignments":[7568],"declarations":[{"constant":false,"id":7568,"mutability":"mutable","name":"i","nameLocation":"1704:1:53","nodeType":"VariableDeclaration","scope":7648,"src":"1696:9:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7567,"name":"uint256","nodeType":"ElementaryTypeName","src":"1696:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7570,"initialValue":{"hexValue":"30","id":7569,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1708:1:53","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1696:13:53"},"loopExpression":{"expression":{"id":7576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1730:3:53","subExpression":{"id":7575,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7568,"src":"1730:1:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7577,"nodeType":"ExpressionStatement","src":"1730:3:53"},"nodeType":"ForStatement","src":"1691:655:53"},{"eventCall":{"arguments":[{"id":7650,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7539,"src":"2377:6:53","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"id":7651,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7542,"src":"2385:7:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":7652,"name":"premiums","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7545,"src":"2394:8:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":7649,"name":"ExecutedWithSuccess","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7474,"src":"2357:19:53","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address[] memory,uint256[] memory,uint256[] memory)"}},"id":7653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2357:46:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7654,"nodeType":"EmitStatement","src":"2352:51:53"},{"expression":{"hexValue":"74727565","id":7655,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2417:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":7554,"id":7656,"nodeType":"Return","src":"2410:11:53"}]},"functionSelector":"920f5c84","id":7658,"implemented":true,"kind":"function","modifiers":[],"name":"executeOperation","nameLocation":"1372:16:53","nodeType":"FunctionDefinition","overrides":{"id":7551,"nodeType":"OverrideSpecifier","overrides":[],"src":"1544:8:53"},"parameters":{"id":7550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7539,"mutability":"mutable","name":"assets","nameLocation":"1411:6:53","nodeType":"VariableDeclaration","scope":7658,"src":"1394:23:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":7537,"name":"address","nodeType":"ElementaryTypeName","src":"1394:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7538,"nodeType":"ArrayTypeName","src":"1394:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":7542,"mutability":"mutable","name":"amounts","nameLocation":"1440:7:53","nodeType":"VariableDeclaration","scope":7658,"src":"1423:24:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7540,"name":"uint256","nodeType":"ElementaryTypeName","src":"1423:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7541,"nodeType":"ArrayTypeName","src":"1423:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":7545,"mutability":"mutable","name":"premiums","nameLocation":"1470:8:53","nodeType":"VariableDeclaration","scope":7658,"src":"1453:25:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7543,"name":"uint256","nodeType":"ElementaryTypeName","src":"1453:7:53","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7544,"nodeType":"ArrayTypeName","src":"1453:9:53","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":7547,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7658,"src":"1484:7:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7546,"name":"address","nodeType":"ElementaryTypeName","src":"1484:7:53","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7549,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7658,"src":"1510:12:53","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7548,"name":"bytes","nodeType":"ElementaryTypeName","src":"1510:5:53","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1388:148:53"},"returnParameters":{"id":7554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7553,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7658,"src":"1562:4:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7552,"name":"bool","nodeType":"ElementaryTypeName","src":"1562:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1561:6:53"},"scope":7659,"src":"1363:1063:53","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":7660,"src":"454:1974:53","usedErrors":[]}],"src":"37:2392:53"},"id":53},"@aave/core-v3/contracts/mocks/helpers/MockIncentivesController.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/mocks/helpers/MockIncentivesController.sol","exportedSymbols":{"IAaveIncentivesController":[3875],"MockIncentivesController":[7677]},"id":7678,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":7661,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:54"},{"absolutePath":"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol","file":"../../interfaces/IAaveIncentivesController.sol","id":7663,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7678,"sourceUnit":3876,"src":"62:89:54","symbolAliases":[{"foreign":{"id":7662,"name":"IAaveIncentivesController","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:25:54","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":7664,"name":"IAaveIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":3875,"src":"190:25:54"},"id":7665,"nodeType":"InheritanceSpecifier","src":"190:25:54"}],"canonicalName":"MockIncentivesController","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":7677,"linearizedBaseContracts":[7677,3875],"name":"MockIncentivesController","nameLocation":"162:24:54","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[3874],"body":{"id":7675,"nodeType":"Block","src":"287:2:54","statements":[]},"functionSelector":"31873e2e","id":7676,"implemented":true,"kind":"function","modifiers":[],"name":"handleAction","nameLocation":"229:12:54","nodeType":"FunctionDefinition","overrides":{"id":7673,"nodeType":"OverrideSpecifier","overrides":[],"src":"278:8:54"},"parameters":{"id":7672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7667,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7676,"src":"242:7:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7666,"name":"address","nodeType":"ElementaryTypeName","src":"242:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7669,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7676,"src":"251:7:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7668,"name":"uint256","nodeType":"ElementaryTypeName","src":"251:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7671,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7676,"src":"260:7:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7670,"name":"uint256","nodeType":"ElementaryTypeName","src":"260:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"241:27:54"},"returnParameters":{"id":7674,"nodeType":"ParameterList","parameters":[],"src":"287:0:54"},"scope":7677,"src":"220:69:54","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":7678,"src":"153:138:54","usedErrors":[]}],"src":"37:255:54"},"id":54},"@aave/core-v3/contracts/mocks/helpers/MockPool.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol","exportedSymbols":{"IPoolAddressesProvider":[5069],"MockPool":[7754],"MockPoolInherited":[7824],"Pool":[23636]},"id":7825,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":7679,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:55"},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":7681,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7825,"sourceUnit":5070,"src":"62:83:55","symbolAliases":[{"foreign":{"id":7680,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:22:55","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"MockPool","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":7754,"linearizedBaseContracts":[7754],"name":"MockPool","nameLocation":"156:8:55","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":7685,"mutability":"mutable","name":"______gap","nameLocation":"246:9:55","nodeType":"VariableDeclaration","scope":7754,"src":"225:30:55","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$100_storage","typeString":"uint256[100]"},"typeName":{"baseType":{"id":7682,"name":"uint256","nodeType":"ElementaryTypeName","src":"225:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7684,"length":{"hexValue":"313030","id":7683,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"233:3:55","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"nodeType":"ArrayTypeName","src":"225:12:55","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$100_storage_ptr","typeString":"uint256[100]"}},"visibility":"private"},{"constant":false,"id":7687,"mutability":"mutable","name":"_addressesProvider","nameLocation":"277:18:55","nodeType":"VariableDeclaration","scope":7754,"src":"260:35:55","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7686,"name":"address","nodeType":"ElementaryTypeName","src":"260:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7690,"mutability":"mutable","name":"_reserveList","nameLocation":"318:12:55","nodeType":"VariableDeclaration","scope":7754,"src":"299:31:55","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[]"},"typeName":{"baseType":{"id":7688,"name":"address","nodeType":"ElementaryTypeName","src":"299:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7689,"nodeType":"ArrayTypeName","src":"299:9:55","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"body":{"id":7699,"nodeType":"Block","src":"382:40:55","statements":[{"expression":{"id":7697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7695,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7687,"src":"388:18:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7696,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7692,"src":"409:8:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"388:29:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7698,"nodeType":"ExpressionStatement","src":"388:29:55"}]},"functionSelector":"c4d66de8","id":7700,"implemented":true,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"344:10:55","nodeType":"FunctionDefinition","parameters":{"id":7693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7692,"mutability":"mutable","name":"provider","nameLocation":"363:8:55","nodeType":"VariableDeclaration","scope":7700,"src":"355:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7691,"name":"address","nodeType":"ElementaryTypeName","src":"355:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"354:18:55"},"returnParameters":{"id":7694,"nodeType":"ParameterList","parameters":[],"src":"382:0:55"},"scope":7754,"src":"335:87:55","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7711,"nodeType":"Block","src":"486:37:55","statements":[{"expression":{"arguments":[{"id":7708,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7702,"src":"510:7:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7705,"name":"_reserveList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7690,"src":"492:12:55","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":7707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"push","nodeType":"MemberAccess","src":"492:17:55","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$_t_address_$returns$__$bound_to$_t_array$_t_address_$dyn_storage_ptr_$","typeString":"function (address[] storage pointer,address)"}},"id":7709,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"492:26:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7710,"nodeType":"ExpressionStatement","src":"492:26:55"}]},"functionSelector":"e636a4f4","id":7712,"implemented":true,"kind":"function","modifiers":[],"name":"addReserveToReservesList","nameLocation":"435:24:55","nodeType":"FunctionDefinition","parameters":{"id":7703,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7702,"mutability":"mutable","name":"reserve","nameLocation":"468:7:55","nodeType":"VariableDeclaration","scope":7712,"src":"460:15:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7701,"name":"address","nodeType":"ElementaryTypeName","src":"460:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"459:17:55"},"returnParameters":{"id":7704,"nodeType":"ParameterList","parameters":[],"src":"486:0:55"},"scope":7754,"src":"426:97:55","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7752,"nodeType":"Block","src":"595:201:55","statements":[{"assignments":[7722],"declarations":[{"constant":false,"id":7722,"mutability":"mutable","name":"reservesList","nameLocation":"618:12:55","nodeType":"VariableDeclaration","scope":7752,"src":"601:29:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":7720,"name":"address","nodeType":"ElementaryTypeName","src":"601:7:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7721,"nodeType":"ArrayTypeName","src":"601:9:55","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":7729,"initialValue":{"arguments":[{"expression":{"id":7726,"name":"_reserveList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7690,"src":"647:12:55","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":7727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"647:19:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7725,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"633:13:55","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":7723,"name":"address","nodeType":"ElementaryTypeName","src":"637:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7724,"nodeType":"ArrayTypeName","src":"637:9:55","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":7728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"633:34:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"601:66:55"},{"body":{"id":7748,"nodeType":"Block","src":"719:48:55","statements":[{"expression":{"id":7746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":7740,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7722,"src":"727:12:55","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":7742,"indexExpression":{"id":7741,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7731,"src":"740:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"727:15:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":7743,"name":"_reserveList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7690,"src":"745:12:55","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":7745,"indexExpression":{"id":7744,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7731,"src":"758:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"745:15:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"727:33:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7747,"nodeType":"ExpressionStatement","src":"727:33:55"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7733,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7731,"src":"689:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":7734,"name":"_reserveList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7690,"src":"693:12:55","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":7735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"693:19:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"689:23:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7749,"initializationExpression":{"assignments":[7731],"declarations":[{"constant":false,"id":7731,"mutability":"mutable","name":"i","nameLocation":"686:1:55","nodeType":"VariableDeclaration","scope":7749,"src":"678:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7730,"name":"uint256","nodeType":"ElementaryTypeName","src":"678:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7732,"nodeType":"VariableDeclarationStatement","src":"678:9:55"},"loopExpression":{"expression":{"id":7738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"714:3:55","subExpression":{"id":7737,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7731,"src":"714:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7739,"nodeType":"ExpressionStatement","src":"714:3:55"},"nodeType":"ForStatement","src":"673:94:55"},{"expression":{"id":7750,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7722,"src":"779:12:55","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":7717,"id":7751,"nodeType":"Return","src":"772:19:55"}]},"functionSelector":"d1946dbc","id":7753,"implemented":true,"kind":"function","modifiers":[],"name":"getReservesList","nameLocation":"536:15:55","nodeType":"FunctionDefinition","parameters":{"id":7713,"nodeType":"ParameterList","parameters":[],"src":"551:2:55"},"returnParameters":{"id":7717,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7716,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7753,"src":"577:16:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":7714,"name":"address","nodeType":"ElementaryTypeName","src":"577:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7715,"nodeType":"ArrayTypeName","src":"577:9:55","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"576:18:55"},"scope":7754,"src":"527:269:55","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":7825,"src":"147:651:55","usedErrors":[]},{"absolutePath":"@aave/core-v3/contracts/protocol/pool/Pool.sol","file":"../../protocol/pool/Pool.sol","id":7756,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7825,"sourceUnit":23637,"src":"800:50:55","symbolAliases":[{"foreign":{"id":7755,"name":"Pool","nodeType":"Identifier","overloadedDeclarations":[],"src":"808:4:55","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":7757,"name":"Pool","nodeType":"IdentifierPath","referencedDeclaration":23636,"src":"882:4:55"},"id":7758,"nodeType":"InheritanceSpecifier","src":"882:4:55"}],"canonicalName":"MockPoolInherited","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":7824,"linearizedBaseContracts":[7824,23636,4860,25335,10573],"name":"MockPoolInherited","nameLocation":"861:17:55","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":7761,"mutability":"mutable","name":"_maxNumberOfReserves","nameLocation":"907:20:55","nodeType":"VariableDeclaration","scope":7824,"src":"891:42:55","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":7759,"name":"uint16","nodeType":"ElementaryTypeName","src":"891:6:55","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"value":{"hexValue":"313238","id":7760,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"930:3:55","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"visibility":"internal"},{"baseFunctions":[22328],"body":{"id":7769,"nodeType":"Block","src":"1002:21:55","statements":[{"expression":{"hexValue":"307833","id":7767,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1015:3:55","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"0x3"},"functionReturnParameters":7766,"id":7768,"nodeType":"Return","src":"1008:10:55"}]},"id":7770,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"947:11:55","nodeType":"FunctionDefinition","overrides":{"id":7763,"nodeType":"OverrideSpecifier","overrides":[],"src":"975:8:55"},"parameters":{"id":7762,"nodeType":"ParameterList","parameters":[],"src":"958:2:55"},"returnParameters":{"id":7766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7765,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7770,"src":"993:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7764,"name":"uint256","nodeType":"ElementaryTypeName","src":"993:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"992:9:55"},"scope":7824,"src":"938:85:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7779,"nodeType":"Block","src":"1087:2:55","statements":[]},"id":7780,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":7776,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7773,"src":"1077:8:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}}],"id":7777,"kind":"baseConstructorSpecifier","modifierName":{"id":7775,"name":"Pool","nodeType":"IdentifierPath","referencedDeclaration":23636,"src":"1072:4:55"},"nodeType":"ModifierInvocation","src":"1072:14:55"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":7774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7773,"mutability":"mutable","name":"provider","nameLocation":"1062:8:55","nodeType":"VariableDeclaration","scope":7780,"src":"1039:31:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":7772,"nodeType":"UserDefinedTypeName","pathNode":{"id":7771,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"1039:22:55"},"referencedDeclaration":5069,"src":"1039:22:55","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"1038:33:55"},"returnParameters":{"id":7778,"nodeType":"ParameterList","parameters":[],"src":"1087:0:55"},"scope":7824,"src":"1027:62:55","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":7789,"nodeType":"Block","src":"1163:56:55","statements":[{"expression":{"id":7787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7785,"name":"_maxNumberOfReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7761,"src":"1169:20:55","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7786,"name":"newMaxNumberOfReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7782,"src":"1192:22:55","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"1169:45:55","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":7788,"nodeType":"ExpressionStatement","src":"1169:45:55"}]},"functionSelector":"57c68dc4","id":7790,"implemented":true,"kind":"function","modifiers":[],"name":"setMaxNumberOfReserves","nameLocation":"1102:22:55","nodeType":"FunctionDefinition","parameters":{"id":7783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7782,"mutability":"mutable","name":"newMaxNumberOfReserves","nameLocation":"1132:22:55","nodeType":"VariableDeclaration","scope":7790,"src":"1125:29:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":7781,"name":"uint16","nodeType":"ElementaryTypeName","src":"1125:6:55","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"1124:31:55"},"returnParameters":{"id":7784,"nodeType":"ParameterList","parameters":[],"src":"1163:0:55"},"scope":7824,"src":"1093:126:55","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[23239],"body":{"id":7798,"nodeType":"Block","src":"1292:38:55","statements":[{"expression":{"id":7796,"name":"_maxNumberOfReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7761,"src":"1305:20:55","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"functionReturnParameters":7795,"id":7797,"nodeType":"Return","src":"1298:27:55"}]},"functionSelector":"f8119d51","id":7799,"implemented":true,"kind":"function","modifiers":[],"name":"MAX_NUMBER_RESERVES","nameLocation":"1232:19:55","nodeType":"FunctionDefinition","overrides":{"id":7792,"nodeType":"OverrideSpecifier","overrides":[],"src":"1266:8:55"},"parameters":{"id":7791,"nodeType":"ParameterList","parameters":[],"src":"1251:2:55"},"returnParameters":{"id":7795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7794,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7799,"src":"1284:6:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":7793,"name":"uint16","nodeType":"ElementaryTypeName","src":"1284:6:55","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"1283:8:55"},"scope":7824,"src":"1223:107:55","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[23351],"body":{"id":7822,"nodeType":"Block","src":"1388:87:55","statements":[{"expression":{"id":7815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":7805,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25315,"src":"1394:13:55","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":7810,"indexExpression":{"expression":{"baseExpression":{"id":7806,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"1408:9:55","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":7808,"indexExpression":{"id":7807,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7801,"src":"1418:5:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1408:16:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":7809,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"1408:19:55","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1394:34:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":7813,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1439: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"}],"id":7812,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1431:7:55","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7811,"name":"address","nodeType":"ElementaryTypeName","src":"1431:7:55","typeDescriptions":{}}},"id":7814,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1431:10:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1394:47:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7816,"nodeType":"ExpressionStatement","src":"1394:47:55"},{"expression":{"id":7820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"1447:23:55","subExpression":{"baseExpression":{"id":7817,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"1454:9:55","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":7819,"indexExpression":{"id":7818,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7801,"src":"1464:5:55","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1454:16:55","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7821,"nodeType":"ExpressionStatement","src":"1447:23:55"}]},"functionSelector":"63c9b860","id":7823,"implemented":true,"kind":"function","modifiers":[],"name":"dropReserve","nameLocation":"1343:11:55","nodeType":"FunctionDefinition","overrides":{"id":7803,"nodeType":"OverrideSpecifier","overrides":[],"src":"1379:8:55"},"parameters":{"id":7802,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7801,"mutability":"mutable","name":"asset","nameLocation":"1363:5:55","nodeType":"VariableDeclaration","scope":7823,"src":"1355:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7800,"name":"address","nodeType":"ElementaryTypeName","src":"1355:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1354:15:55"},"returnParameters":{"id":7804,"nodeType":"ParameterList","parameters":[],"src":"1388:0:55"},"scope":7824,"src":"1334:141:55","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":7825,"src":"852:625:55","usedErrors":[]}],"src":"37:1441:55"},"id":55},"@aave/core-v3/contracts/mocks/helpers/MockReserveConfiguration.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/mocks/helpers/MockReserveConfiguration.sol","exportedSymbols":{"DataTypes":[21633],"MockReserveConfiguration":[8350],"ReserveConfiguration":[11857]},"id":8351,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":7826,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:56"},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../../protocol/libraries/configuration/ReserveConfiguration.sol","id":7828,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8351,"sourceUnit":11858,"src":"62:101:56","symbolAliases":[{"foreign":{"id":7827,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:20:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"../../protocol/libraries/types/DataTypes.sol","id":7830,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8351,"sourceUnit":21634,"src":"164:71:56","symbolAliases":[{"foreign":{"id":7829,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"172:9:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"MockReserveConfiguration","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":8350,"linearizedBaseContracts":[8350],"name":"MockReserveConfiguration","nameLocation":"246:24:56","nodeType":"ContractDefinition","nodes":[{"id":7834,"libraryName":{"id":7831,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":11857,"src":"281:20:56"},"nodeType":"UsingForDirective","src":"275:65:56","typeName":{"id":7833,"nodeType":"UserDefinedTypeName","pathNode":{"id":7832,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"306:33:56"},"referencedDeclaration":21318,"src":"306:33:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"constant":false,"functionSelector":"6c70bee9","id":7837,"mutability":"mutable","name":"configuration","nameLocation":"385:13:56","nodeType":"VariableDeclaration","scope":8350,"src":"344:54:56","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":7836,"nodeType":"UserDefinedTypeName","pathNode":{"id":7835,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"344:33:56"},"referencedDeclaration":21318,"src":"344:33:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"public"},{"body":{"id":7859,"nodeType":"Block","src":"441:126:56","statements":[{"assignments":[7846],"declarations":[{"constant":false,"id":7846,"mutability":"mutable","name":"config","nameLocation":"488:6:56","nodeType":"VariableDeclaration","scope":7859,"src":"447:47:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":7845,"nodeType":"UserDefinedTypeName","pathNode":{"id":7844,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"447:33:56"},"referencedDeclaration":21318,"src":"447:33:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":7848,"initialValue":{"id":7847,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"497:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"447:63:56"},{"expression":{"arguments":[{"id":7852,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7839,"src":"530:3:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7849,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7846,"src":"516:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":7851,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setLtv","nodeType":"MemberAccess","referencedDeclaration":10761,"src":"516:13:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":7853,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"516:18:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7854,"nodeType":"ExpressionStatement","src":"516:18:56"},{"expression":{"id":7857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7855,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"540:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7856,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7846,"src":"556:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"540:22:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":7858,"nodeType":"ExpressionStatement","src":"540:22:56"}]},"functionSelector":"a37e52e3","id":7860,"implemented":true,"kind":"function","modifiers":[],"name":"setLtv","nameLocation":"412:6:56","nodeType":"FunctionDefinition","parameters":{"id":7840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7839,"mutability":"mutable","name":"ltv","nameLocation":"427:3:56","nodeType":"VariableDeclaration","scope":7860,"src":"419:11:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7838,"name":"uint256","nodeType":"ElementaryTypeName","src":"419:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"418:13:56"},"returnParameters":{"id":7841,"nodeType":"ParameterList","parameters":[],"src":"441:0:56"},"scope":8350,"src":"403:164:56","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7869,"nodeType":"Block","src":"621:40:56","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7865,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"634:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":7866,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLtv","nodeType":"MemberAccess","referencedDeclaration":10777,"src":"634:20:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":7867,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"634:22:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7864,"id":7868,"nodeType":"Return","src":"627:29:56"}]},"functionSelector":"8145bd2e","id":7870,"implemented":true,"kind":"function","modifiers":[],"name":"getLtv","nameLocation":"580:6:56","nodeType":"FunctionDefinition","parameters":{"id":7861,"nodeType":"ParameterList","parameters":[],"src":"586:2:56"},"returnParameters":{"id":7864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7863,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7870,"src":"612:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7862,"name":"uint256","nodeType":"ElementaryTypeName","src":"612:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"611:9:56"},"scope":8350,"src":"571:90:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":7892,"nodeType":"Block","src":"718:141:56","statements":[{"assignments":[7879],"declarations":[{"constant":false,"id":7879,"mutability":"mutable","name":"config","nameLocation":"765:6:56","nodeType":"VariableDeclaration","scope":7892,"src":"724:47:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":7878,"nodeType":"UserDefinedTypeName","pathNode":{"id":7877,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"724:33:56"},"referencedDeclaration":21318,"src":"724:33:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":7881,"initialValue":{"id":7880,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"774:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"724:63:56"},{"expression":{"arguments":[{"id":7885,"name":"bonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7872,"src":"820:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7882,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7879,"src":"793:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":7884,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setLiquidationBonus","nodeType":"MemberAccess","referencedDeclaration":10862,"src":"793:26:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":7886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"793:33:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7887,"nodeType":"ExpressionStatement","src":"793:33:56"},{"expression":{"id":7890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7888,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"832:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7889,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7879,"src":"848:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"832:22:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":7891,"nodeType":"ExpressionStatement","src":"832:22:56"}]},"functionSelector":"28842d4f","id":7893,"implemented":true,"kind":"function","modifiers":[],"name":"setLiquidationBonus","nameLocation":"674:19:56","nodeType":"FunctionDefinition","parameters":{"id":7873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7872,"mutability":"mutable","name":"bonus","nameLocation":"702:5:56","nodeType":"VariableDeclaration","scope":7893,"src":"694:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7871,"name":"uint256","nodeType":"ElementaryTypeName","src":"694:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"693:15:56"},"returnParameters":{"id":7874,"nodeType":"ParameterList","parameters":[],"src":"718:0:56"},"scope":8350,"src":"665:194:56","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7902,"nodeType":"Block","src":"926:53:56","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7898,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"939:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":7899,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLiquidationBonus","nodeType":"MemberAccess","referencedDeclaration":10881,"src":"939:33:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":7900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"939:35:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7897,"id":7901,"nodeType":"Return","src":"932:42:56"}]},"functionSelector":"59aa9e72","id":7903,"implemented":true,"kind":"function","modifiers":[],"name":"getLiquidationBonus","nameLocation":"872:19:56","nodeType":"FunctionDefinition","parameters":{"id":7894,"nodeType":"ParameterList","parameters":[],"src":"891:2:56"},"returnParameters":{"id":7897,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7896,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7903,"src":"917:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7895,"name":"uint256","nodeType":"ElementaryTypeName","src":"917:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"916:9:56"},"scope":8350,"src":"863:116:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":7925,"nodeType":"Block","src":"1044:149:56","statements":[{"assignments":[7912],"declarations":[{"constant":false,"id":7912,"mutability":"mutable","name":"config","nameLocation":"1091:6:56","nodeType":"VariableDeclaration","scope":7925,"src":"1050:47:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":7911,"nodeType":"UserDefinedTypeName","pathNode":{"id":7910,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"1050:33:56"},"referencedDeclaration":21318,"src":"1050:33:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":7914,"initialValue":{"id":7913,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"1100:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"1050:63:56"},{"expression":{"arguments":[{"id":7918,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7905,"src":"1150:9:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7915,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7912,"src":"1119:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":7917,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setLiquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":10810,"src":"1119:30:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":7919,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1119:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7920,"nodeType":"ExpressionStatement","src":"1119:41:56"},{"expression":{"id":7923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7921,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"1166:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7922,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7912,"src":"1182:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"1166:22:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":7924,"nodeType":"ExpressionStatement","src":"1166:22:56"}]},"functionSelector":"d0b0c816","id":7926,"implemented":true,"kind":"function","modifiers":[],"name":"setLiquidationThreshold","nameLocation":"992:23:56","nodeType":"FunctionDefinition","parameters":{"id":7906,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7905,"mutability":"mutable","name":"threshold","nameLocation":"1024:9:56","nodeType":"VariableDeclaration","scope":7926,"src":"1016:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7904,"name":"uint256","nodeType":"ElementaryTypeName","src":"1016:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1015:19:56"},"returnParameters":{"id":7907,"nodeType":"ParameterList","parameters":[],"src":"1044:0:56"},"scope":8350,"src":"983:210:56","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7935,"nodeType":"Block","src":"1264:57:56","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7931,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"1277:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":7932,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLiquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":10829,"src":"1277:37:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":7933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1277:39:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7930,"id":7934,"nodeType":"Return","src":"1270:46:56"}]},"functionSelector":"4ae9b8bc","id":7936,"implemented":true,"kind":"function","modifiers":[],"name":"getLiquidationThreshold","nameLocation":"1206:23:56","nodeType":"FunctionDefinition","parameters":{"id":7927,"nodeType":"ParameterList","parameters":[],"src":"1229:2:56"},"returnParameters":{"id":7930,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7929,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7936,"src":"1255:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7928,"name":"uint256","nodeType":"ElementaryTypeName","src":"1255:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1254:9:56"},"scope":8350,"src":"1197:124:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":7958,"nodeType":"Block","src":"1373:136:56","statements":[{"assignments":[7945],"declarations":[{"constant":false,"id":7945,"mutability":"mutable","name":"config","nameLocation":"1420:6:56","nodeType":"VariableDeclaration","scope":7958,"src":"1379:47:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":7944,"nodeType":"UserDefinedTypeName","pathNode":{"id":7943,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"1379:33:56"},"referencedDeclaration":21318,"src":"1379:33:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":7947,"initialValue":{"id":7946,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"1429:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"1379:63:56"},{"expression":{"arguments":[{"id":7951,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7938,"src":"1467:8:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7948,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7945,"src":"1448:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":7950,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setDecimals","nodeType":"MemberAccess","referencedDeclaration":10914,"src":"1448:18:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":7952,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1448:28:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7953,"nodeType":"ExpressionStatement","src":"1448:28:56"},{"expression":{"id":7956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7954,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"1482:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7955,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7945,"src":"1498:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"1482:22:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":7957,"nodeType":"ExpressionStatement","src":"1482:22:56"}]},"functionSelector":"8c8885c8","id":7959,"implemented":true,"kind":"function","modifiers":[],"name":"setDecimals","nameLocation":"1334:11:56","nodeType":"FunctionDefinition","parameters":{"id":7939,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7938,"mutability":"mutable","name":"decimals","nameLocation":"1354:8:56","nodeType":"VariableDeclaration","scope":7959,"src":"1346:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7937,"name":"uint256","nodeType":"ElementaryTypeName","src":"1346:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1345:18:56"},"returnParameters":{"id":7940,"nodeType":"ParameterList","parameters":[],"src":"1373:0:56"},"scope":8350,"src":"1325:184:56","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":7968,"nodeType":"Block","src":"1568:45:56","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7964,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"1581:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":7965,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDecimals","nodeType":"MemberAccess","referencedDeclaration":10933,"src":"1581:25:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":7966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1581:27:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7963,"id":7967,"nodeType":"Return","src":"1574:34:56"}]},"functionSelector":"f0141d84","id":7969,"implemented":true,"kind":"function","modifiers":[],"name":"getDecimals","nameLocation":"1522:11:56","nodeType":"FunctionDefinition","parameters":{"id":7960,"nodeType":"ParameterList","parameters":[],"src":"1533:2:56"},"returnParameters":{"id":7963,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7962,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7969,"src":"1559:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7961,"name":"uint256","nodeType":"ElementaryTypeName","src":"1559:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1558:9:56"},"scope":8350,"src":"1513:100:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":7991,"nodeType":"Block","src":"1658:132:56","statements":[{"assignments":[7978],"declarations":[{"constant":false,"id":7978,"mutability":"mutable","name":"config","nameLocation":"1705:6:56","nodeType":"VariableDeclaration","scope":7991,"src":"1664:47:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":7977,"nodeType":"UserDefinedTypeName","pathNode":{"id":7976,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"1664:33:56"},"referencedDeclaration":21318,"src":"1664:33:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":7980,"initialValue":{"id":7979,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"1714:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"1664:63:56"},{"expression":{"arguments":[{"id":7984,"name":"frozen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7971,"src":"1750:6:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":7981,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7978,"src":"1733:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":7983,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setFrozen","nodeType":"MemberAccess","referencedDeclaration":11014,"src":"1733:16:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":7985,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1733:24:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7986,"nodeType":"ExpressionStatement","src":"1733:24:56"},{"expression":{"id":7989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7987,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"1763:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7988,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7978,"src":"1779:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"1763:22:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":7990,"nodeType":"ExpressionStatement","src":"1763:22:56"}]},"functionSelector":"7e932d32","id":7992,"implemented":true,"kind":"function","modifiers":[],"name":"setFrozen","nameLocation":"1626:9:56","nodeType":"FunctionDefinition","parameters":{"id":7972,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7971,"mutability":"mutable","name":"frozen","nameLocation":"1641:6:56","nodeType":"VariableDeclaration","scope":7992,"src":"1636:11:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7970,"name":"bool","nodeType":"ElementaryTypeName","src":"1636:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1635:13:56"},"returnParameters":{"id":7973,"nodeType":"ParameterList","parameters":[],"src":"1658:0:56"},"scope":8350,"src":"1617:173:56","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8001,"nodeType":"Block","src":"1844:43:56","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7997,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"1857:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":7998,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFrozen","nodeType":"MemberAccess","referencedDeclaration":11033,"src":"1857:23:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":7999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1857:25:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7996,"id":8000,"nodeType":"Return","src":"1850:32:56"}]},"functionSelector":"7495b353","id":8002,"implemented":true,"kind":"function","modifiers":[],"name":"getFrozen","nameLocation":"1803:9:56","nodeType":"FunctionDefinition","parameters":{"id":7993,"nodeType":"ParameterList","parameters":[],"src":"1812:2:56"},"returnParameters":{"id":7996,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7995,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8002,"src":"1838:4:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7994,"name":"bool","nodeType":"ElementaryTypeName","src":"1838:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1837:6:56"},"scope":8350,"src":"1794:93:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8024,"nodeType":"Block","src":"1943:143:56","statements":[{"assignments":[8011],"declarations":[{"constant":false,"id":8011,"mutability":"mutable","name":"config","nameLocation":"1990:6:56","nodeType":"VariableDeclaration","scope":8024,"src":"1949:47:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":8010,"nodeType":"UserDefinedTypeName","pathNode":{"id":8009,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"1949:33:56"},"referencedDeclaration":21318,"src":"1949:33:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":8013,"initialValue":{"id":8012,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"1999:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"1949:63:56"},{"expression":{"arguments":[{"id":8017,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8004,"src":"2045:7:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":8014,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8011,"src":"2018:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":8016,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":11214,"src":"2018:26:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":8018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2018:35:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8019,"nodeType":"ExpressionStatement","src":"2018:35:56"},{"expression":{"id":8022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8020,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"2059:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8021,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8011,"src":"2075:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"2059:22:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":8023,"nodeType":"ExpressionStatement","src":"2059:22:56"}]},"functionSelector":"f1514a1a","id":8025,"implemented":true,"kind":"function","modifiers":[],"name":"setBorrowingEnabled","nameLocation":"1900:19:56","nodeType":"FunctionDefinition","parameters":{"id":8005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8004,"mutability":"mutable","name":"enabled","nameLocation":"1925:7:56","nodeType":"VariableDeclaration","scope":8025,"src":"1920:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8003,"name":"bool","nodeType":"ElementaryTypeName","src":"1920:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1919:14:56"},"returnParameters":{"id":8006,"nodeType":"ParameterList","parameters":[],"src":"1943:0:56"},"scope":8350,"src":"1891:195:56","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8034,"nodeType":"Block","src":"2150:53:56","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8030,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"2163:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":8031,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":11233,"src":"2163:33:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":8032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2163:35:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":8029,"id":8033,"nodeType":"Return","src":"2156:42:56"}]},"functionSelector":"79750bc4","id":8035,"implemented":true,"kind":"function","modifiers":[],"name":"getBorrowingEnabled","nameLocation":"2099:19:56","nodeType":"FunctionDefinition","parameters":{"id":8026,"nodeType":"ParameterList","parameters":[],"src":"2118:2:56"},"returnParameters":{"id":8029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8028,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8035,"src":"2144:4:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8027,"name":"bool","nodeType":"ElementaryTypeName","src":"2144:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2143:6:56"},"scope":8350,"src":"2090:113:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8057,"nodeType":"Block","src":"2269:153:56","statements":[{"assignments":[8044],"declarations":[{"constant":false,"id":8044,"mutability":"mutable","name":"config","nameLocation":"2316:6:56","nodeType":"VariableDeclaration","scope":8057,"src":"2275:47:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":8043,"nodeType":"UserDefinedTypeName","pathNode":{"id":8042,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"2275:33:56"},"referencedDeclaration":21318,"src":"2275:33:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":8046,"initialValue":{"id":8045,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"2325:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2275:63:56"},{"expression":{"arguments":[{"id":8050,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8037,"src":"2381:7:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":8047,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8044,"src":"2344:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":8049,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setStableRateBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":11264,"src":"2344:36:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":8051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2344:45:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8052,"nodeType":"ExpressionStatement","src":"2344:45:56"},{"expression":{"id":8055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8053,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"2395:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8054,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8044,"src":"2411:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"2395:22:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":8056,"nodeType":"ExpressionStatement","src":"2395:22:56"}]},"functionSelector":"71cb1332","id":8058,"implemented":true,"kind":"function","modifiers":[],"name":"setStableRateBorrowingEnabled","nameLocation":"2216:29:56","nodeType":"FunctionDefinition","parameters":{"id":8038,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8037,"mutability":"mutable","name":"enabled","nameLocation":"2251:7:56","nodeType":"VariableDeclaration","scope":8058,"src":"2246:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8036,"name":"bool","nodeType":"ElementaryTypeName","src":"2246:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2245:14:56"},"returnParameters":{"id":8039,"nodeType":"ParameterList","parameters":[],"src":"2269:0:56"},"scope":8350,"src":"2207:215:56","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8067,"nodeType":"Block","src":"2496:63:56","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8063,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"2509:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":8064,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getStableRateBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":11283,"src":"2509:43:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":8065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2509:45:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":8062,"id":8066,"nodeType":"Return","src":"2502:52:56"}]},"functionSelector":"e08a28a3","id":8068,"implemented":true,"kind":"function","modifiers":[],"name":"getStableRateBorrowingEnabled","nameLocation":"2435:29:56","nodeType":"FunctionDefinition","parameters":{"id":8059,"nodeType":"ParameterList","parameters":[],"src":"2464:2:56"},"returnParameters":{"id":8062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8061,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8068,"src":"2490:4:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8060,"name":"bool","nodeType":"ElementaryTypeName","src":"2490:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2489:6:56"},"scope":8350,"src":"2426:133:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8090,"nodeType":"Block","src":"2621:146:56","statements":[{"assignments":[8077],"declarations":[{"constant":false,"id":8077,"mutability":"mutable","name":"config","nameLocation":"2668:6:56","nodeType":"VariableDeclaration","scope":8090,"src":"2627:47:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":8076,"nodeType":"UserDefinedTypeName","pathNode":{"id":8075,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"2627:33:56"},"referencedDeclaration":21318,"src":"2627:33:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":8079,"initialValue":{"id":8078,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"2677:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2627:63:56"},{"expression":{"arguments":[{"id":8083,"name":"reserveFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8070,"src":"2720:13:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8080,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8077,"src":"2696:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":8082,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setReserveFactor","nodeType":"MemberAccess","referencedDeclaration":11316,"src":"2696:23:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":8084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2696:38:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8085,"nodeType":"ExpressionStatement","src":"2696:38:56"},{"expression":{"id":8088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8086,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"2740:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8087,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8077,"src":"2756:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"2740:22:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":8089,"nodeType":"ExpressionStatement","src":"2740:22:56"}]},"functionSelector":"1c446983","id":8091,"implemented":true,"kind":"function","modifiers":[],"name":"setReserveFactor","nameLocation":"2572:16:56","nodeType":"FunctionDefinition","parameters":{"id":8071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8070,"mutability":"mutable","name":"reserveFactor","nameLocation":"2597:13:56","nodeType":"VariableDeclaration","scope":8091,"src":"2589:21:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8069,"name":"uint256","nodeType":"ElementaryTypeName","src":"2589:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2588:23:56"},"returnParameters":{"id":8072,"nodeType":"ParameterList","parameters":[],"src":"2621:0:56"},"scope":8350,"src":"2563:204:56","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8100,"nodeType":"Block","src":"2831:50:56","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8096,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"2844:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":8097,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getReserveFactor","nodeType":"MemberAccess","referencedDeclaration":11335,"src":"2844:30:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":8098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2844:32:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8095,"id":8099,"nodeType":"Return","src":"2837:39:56"}]},"functionSelector":"5f558e53","id":8101,"implemented":true,"kind":"function","modifiers":[],"name":"getReserveFactor","nameLocation":"2780:16:56","nodeType":"FunctionDefinition","parameters":{"id":8092,"nodeType":"ParameterList","parameters":[],"src":"2796:2:56"},"returnParameters":{"id":8095,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8094,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8101,"src":"2822:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8093,"name":"uint256","nodeType":"ElementaryTypeName","src":"2822:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2821:9:56"},"scope":8350,"src":"2771:110:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8123,"nodeType":"Block","src":"2935:138:56","statements":[{"assignments":[8110],"declarations":[{"constant":false,"id":8110,"mutability":"mutable","name":"config","nameLocation":"2982:6:56","nodeType":"VariableDeclaration","scope":8123,"src":"2941:47:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":8109,"nodeType":"UserDefinedTypeName","pathNode":{"id":8108,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"2941:33:56"},"referencedDeclaration":21318,"src":"2941:33:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":8112,"initialValue":{"id":8111,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"2991:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2941:63:56"},{"expression":{"arguments":[{"id":8116,"name":"borrowCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8103,"src":"3030:9:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8113,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8110,"src":"3010:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":8115,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setBorrowCap","nodeType":"MemberAccess","referencedDeclaration":11368,"src":"3010:19:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":8117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3010:30:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8118,"nodeType":"ExpressionStatement","src":"3010:30:56"},{"expression":{"id":8121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8119,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"3046:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8120,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8110,"src":"3062:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"3046:22:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":8122,"nodeType":"ExpressionStatement","src":"3046:22:56"}]},"functionSelector":"717186d1","id":8124,"implemented":true,"kind":"function","modifiers":[],"name":"setBorrowCap","nameLocation":"2894:12:56","nodeType":"FunctionDefinition","parameters":{"id":8104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8103,"mutability":"mutable","name":"borrowCap","nameLocation":"2915:9:56","nodeType":"VariableDeclaration","scope":8124,"src":"2907:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8102,"name":"uint256","nodeType":"ElementaryTypeName","src":"2907:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2906:19:56"},"returnParameters":{"id":8105,"nodeType":"ParameterList","parameters":[],"src":"2935:0:56"},"scope":8350,"src":"2885:188:56","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8133,"nodeType":"Block","src":"3133:46:56","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8129,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"3146:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":8130,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getBorrowCap","nodeType":"MemberAccess","referencedDeclaration":11387,"src":"3146:26:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":8131,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3146:28:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8128,"id":8132,"nodeType":"Return","src":"3139:35:56"}]},"functionSelector":"aede7b76","id":8134,"implemented":true,"kind":"function","modifiers":[],"name":"getBorrowCap","nameLocation":"3086:12:56","nodeType":"FunctionDefinition","parameters":{"id":8125,"nodeType":"ParameterList","parameters":[],"src":"3098:2:56"},"returnParameters":{"id":8128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8127,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8134,"src":"3124:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8126,"name":"uint256","nodeType":"ElementaryTypeName","src":"3124:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3123:9:56"},"scope":8350,"src":"3077:102:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8143,"nodeType":"Block","src":"3243:50:56","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8139,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"3256:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":8140,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getEModeCategory","nodeType":"MemberAccess","referencedDeclaration":11647,"src":"3256:30:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":8141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3256:32:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8138,"id":8142,"nodeType":"Return","src":"3249:39:56"}]},"functionSelector":"356f235c","id":8144,"implemented":true,"kind":"function","modifiers":[],"name":"getEModeCategory","nameLocation":"3192:16:56","nodeType":"FunctionDefinition","parameters":{"id":8135,"nodeType":"ParameterList","parameters":[],"src":"3208:2:56"},"returnParameters":{"id":8138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8137,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8144,"src":"3234:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8136,"name":"uint256","nodeType":"ElementaryTypeName","src":"3234:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3233:9:56"},"scope":8350,"src":"3183:110:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8166,"nodeType":"Block","src":"3352:143:56","statements":[{"assignments":[8153],"declarations":[{"constant":false,"id":8153,"mutability":"mutable","name":"config","nameLocation":"3399:6:56","nodeType":"VariableDeclaration","scope":8166,"src":"3358:47:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":8152,"nodeType":"UserDefinedTypeName","pathNode":{"id":8151,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"3358:33:56"},"referencedDeclaration":21318,"src":"3358:33:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":8155,"initialValue":{"id":8154,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"3408:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"3358:63:56"},{"expression":{"arguments":[{"id":8159,"name":"categoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8146,"src":"3451:10:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8156,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8153,"src":"3427:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":8158,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setEModeCategory","nodeType":"MemberAccess","referencedDeclaration":11628,"src":"3427:23:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":8160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3427:35:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8161,"nodeType":"ExpressionStatement","src":"3427:35:56"},{"expression":{"id":8164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8162,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"3468:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8163,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8153,"src":"3484:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"3468:22:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":8165,"nodeType":"ExpressionStatement","src":"3468:22:56"}]},"functionSelector":"fa573d07","id":8167,"implemented":true,"kind":"function","modifiers":[],"name":"setEModeCategory","nameLocation":"3306:16:56","nodeType":"FunctionDefinition","parameters":{"id":8147,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8146,"mutability":"mutable","name":"categoryId","nameLocation":"3331:10:56","nodeType":"VariableDeclaration","scope":8167,"src":"3323:18:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8145,"name":"uint256","nodeType":"ElementaryTypeName","src":"3323:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3322:20:56"},"returnParameters":{"id":8148,"nodeType":"ParameterList","parameters":[],"src":"3352:0:56"},"scope":8350,"src":"3297:198:56","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8189,"nodeType":"Block","src":"3551:143:56","statements":[{"assignments":[8176],"declarations":[{"constant":false,"id":8176,"mutability":"mutable","name":"config","nameLocation":"3598:6:56","nodeType":"VariableDeclaration","scope":8189,"src":"3557:47:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":8175,"nodeType":"UserDefinedTypeName","pathNode":{"id":8174,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"3557:33:56"},"referencedDeclaration":21318,"src":"3557:33:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":8178,"initialValue":{"id":8177,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"3607:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"3557:63:56"},{"expression":{"arguments":[{"id":8182,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8169,"src":"3653:7:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":8179,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8176,"src":"3626:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":8181,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setFlashLoanEnabled","nodeType":"MemberAccess","referencedDeclaration":11678,"src":"3626:26:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":8183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3626:35:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8184,"nodeType":"ExpressionStatement","src":"3626:35:56"},{"expression":{"id":8187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8185,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"3667:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8186,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8176,"src":"3683:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"3667:22:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":8188,"nodeType":"ExpressionStatement","src":"3667:22:56"}]},"functionSelector":"a55102f7","id":8190,"implemented":true,"kind":"function","modifiers":[],"name":"setFlashLoanEnabled","nameLocation":"3508:19:56","nodeType":"FunctionDefinition","parameters":{"id":8170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8169,"mutability":"mutable","name":"enabled","nameLocation":"3533:7:56","nodeType":"VariableDeclaration","scope":8190,"src":"3528:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8168,"name":"bool","nodeType":"ElementaryTypeName","src":"3528:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3527:14:56"},"returnParameters":{"id":8171,"nodeType":"ParameterList","parameters":[],"src":"3551:0:56"},"scope":8350,"src":"3499:195:56","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8199,"nodeType":"Block","src":"3758:53:56","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8195,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"3771:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":8196,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlashLoanEnabled","nodeType":"MemberAccess","referencedDeclaration":11697,"src":"3771:33:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":8197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3771:35:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":8194,"id":8198,"nodeType":"Return","src":"3764:42:56"}]},"functionSelector":"d1c11f18","id":8200,"implemented":true,"kind":"function","modifiers":[],"name":"getFlashLoanEnabled","nameLocation":"3707:19:56","nodeType":"FunctionDefinition","parameters":{"id":8191,"nodeType":"ParameterList","parameters":[],"src":"3726:2:56"},"returnParameters":{"id":8194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8193,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8200,"src":"3752:4:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8192,"name":"bool","nodeType":"ElementaryTypeName","src":"3752:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3751:6:56"},"scope":8350,"src":"3698:113:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8222,"nodeType":"Block","src":"3865:138:56","statements":[{"assignments":[8209],"declarations":[{"constant":false,"id":8209,"mutability":"mutable","name":"config","nameLocation":"3912:6:56","nodeType":"VariableDeclaration","scope":8222,"src":"3871:47:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":8208,"nodeType":"UserDefinedTypeName","pathNode":{"id":8207,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"3871:33:56"},"referencedDeclaration":21318,"src":"3871:33:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":8211,"initialValue":{"id":8210,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"3921:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"3871:63:56"},{"expression":{"arguments":[{"id":8215,"name":"supplyCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8202,"src":"3960:9:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8212,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8209,"src":"3940:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":8214,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setSupplyCap","nodeType":"MemberAccess","referencedDeclaration":11420,"src":"3940:19:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":8216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3940:30:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8217,"nodeType":"ExpressionStatement","src":"3940:30:56"},{"expression":{"id":8220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8218,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"3976:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8219,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8209,"src":"3992:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"3976:22:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":8221,"nodeType":"ExpressionStatement","src":"3976:22:56"}]},"functionSelector":"b6a3f59a","id":8223,"implemented":true,"kind":"function","modifiers":[],"name":"setSupplyCap","nameLocation":"3824:12:56","nodeType":"FunctionDefinition","parameters":{"id":8203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8202,"mutability":"mutable","name":"supplyCap","nameLocation":"3845:9:56","nodeType":"VariableDeclaration","scope":8223,"src":"3837:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8201,"name":"uint256","nodeType":"ElementaryTypeName","src":"3837:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3836:19:56"},"returnParameters":{"id":8204,"nodeType":"ParameterList","parameters":[],"src":"3865:0:56"},"scope":8350,"src":"3815:188:56","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8232,"nodeType":"Block","src":"4063:46:56","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8228,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"4076:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":8229,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getSupplyCap","nodeType":"MemberAccess","referencedDeclaration":11439,"src":"4076:26:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":8230,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4076:28:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8227,"id":8231,"nodeType":"Return","src":"4069:35:56"}]},"functionSelector":"20361814","id":8233,"implemented":true,"kind":"function","modifiers":[],"name":"getSupplyCap","nameLocation":"4016:12:56","nodeType":"FunctionDefinition","parameters":{"id":8224,"nodeType":"ParameterList","parameters":[],"src":"4028:2:56"},"returnParameters":{"id":8227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8226,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8233,"src":"4054:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8225,"name":"uint256","nodeType":"ElementaryTypeName","src":"4054:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4053:9:56"},"scope":8350,"src":"4007:102:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8255,"nodeType":"Block","src":"4189:164:56","statements":[{"assignments":[8242],"declarations":[{"constant":false,"id":8242,"mutability":"mutable","name":"config","nameLocation":"4236:6:56","nodeType":"VariableDeclaration","scope":8255,"src":"4195:47:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":8241,"nodeType":"UserDefinedTypeName","pathNode":{"id":8240,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"4195:33:56"},"referencedDeclaration":21318,"src":"4195:33:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":8244,"initialValue":{"id":8243,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"4245:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"4195:63:56"},{"expression":{"arguments":[{"id":8248,"name":"liquidationProtocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8235,"src":"4297:22:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8245,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8242,"src":"4264:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":8247,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setLiquidationProtocolFee","nodeType":"MemberAccess","referencedDeclaration":11524,"src":"4264:32:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":8249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4264:56:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8250,"nodeType":"ExpressionStatement","src":"4264:56:56"},{"expression":{"id":8253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8251,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"4326:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8252,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8242,"src":"4342:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"4326:22:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":8254,"nodeType":"ExpressionStatement","src":"4326:22:56"}]},"functionSelector":"a6200635","id":8256,"implemented":true,"kind":"function","modifiers":[],"name":"setLiquidationProtocolFee","nameLocation":"4122:25:56","nodeType":"FunctionDefinition","parameters":{"id":8236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8235,"mutability":"mutable","name":"liquidationProtocolFee","nameLocation":"4156:22:56","nodeType":"VariableDeclaration","scope":8256,"src":"4148:30:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8234,"name":"uint256","nodeType":"ElementaryTypeName","src":"4148:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4147:32:56"},"returnParameters":{"id":8237,"nodeType":"ParameterList","parameters":[],"src":"4189:0:56"},"scope":8350,"src":"4113:240:56","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8265,"nodeType":"Block","src":"4426:59:56","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8261,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"4439:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":8262,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLiquidationProtocolFee","nodeType":"MemberAccess","referencedDeclaration":11543,"src":"4439:39:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":8263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4439:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8260,"id":8264,"nodeType":"Return","src":"4432:48:56"}]},"functionSelector":"c37bdcec","id":8266,"implemented":true,"kind":"function","modifiers":[],"name":"getLiquidationProtocolFee","nameLocation":"4366:25:56","nodeType":"FunctionDefinition","parameters":{"id":8257,"nodeType":"ParameterList","parameters":[],"src":"4391:2:56"},"returnParameters":{"id":8260,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8259,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8266,"src":"4417:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8258,"name":"uint256","nodeType":"ElementaryTypeName","src":"4417:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4416:9:56"},"scope":8350,"src":"4357:128:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8288,"nodeType":"Block","src":"4551:150:56","statements":[{"assignments":[8275],"declarations":[{"constant":false,"id":8275,"mutability":"mutable","name":"config","nameLocation":"4598:6:56","nodeType":"VariableDeclaration","scope":8288,"src":"4557:47:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":8274,"nodeType":"UserDefinedTypeName","pathNode":{"id":8273,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"4557:33:56"},"referencedDeclaration":21318,"src":"4557:33:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":8277,"initialValue":{"id":8276,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"4607:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"4557:63:56"},{"expression":{"arguments":[{"id":8281,"name":"unbackedMintCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8268,"src":"4652:15:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8278,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8275,"src":"4626:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":8280,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setUnbackedMintCap","nodeType":"MemberAccess","referencedDeclaration":11576,"src":"4626:25:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":8282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4626:42:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8283,"nodeType":"ExpressionStatement","src":"4626:42:56"},{"expression":{"id":8286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8284,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"4674:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8285,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8275,"src":"4690:6:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"src":"4674:22:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":8287,"nodeType":"ExpressionStatement","src":"4674:22:56"}]},"functionSelector":"92dfb2fb","id":8289,"implemented":true,"kind":"function","modifiers":[],"name":"setUnbackedMintCap","nameLocation":"4498:18:56","nodeType":"FunctionDefinition","parameters":{"id":8269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8268,"mutability":"mutable","name":"unbackedMintCap","nameLocation":"4525:15:56","nodeType":"VariableDeclaration","scope":8289,"src":"4517:23:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8267,"name":"uint256","nodeType":"ElementaryTypeName","src":"4517:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4516:25:56"},"returnParameters":{"id":8270,"nodeType":"ParameterList","parameters":[],"src":"4551:0:56"},"scope":8350,"src":"4489:212:56","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8298,"nodeType":"Block","src":"4767:52:56","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8294,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"4780:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":8295,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getUnbackedMintCap","nodeType":"MemberAccess","referencedDeclaration":11595,"src":"4780:32:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":8296,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4780:34:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8293,"id":8297,"nodeType":"Return","src":"4773:41:56"}]},"functionSelector":"ead8aa02","id":8299,"implemented":true,"kind":"function","modifiers":[],"name":"getUnbackedMintCap","nameLocation":"4714:18:56","nodeType":"FunctionDefinition","parameters":{"id":8290,"nodeType":"ParameterList","parameters":[],"src":"4732:2:56"},"returnParameters":{"id":8293,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8292,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8299,"src":"4758:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8291,"name":"uint256","nodeType":"ElementaryTypeName","src":"4758:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4757:9:56"},"scope":8350,"src":"4705:114:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8316,"nodeType":"Block","src":"4896:42:56","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8312,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"4909:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":8313,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":11757,"src":"4909:22:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":8314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4909:24:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"functionReturnParameters":8311,"id":8315,"nodeType":"Return","src":"4902:31:56"}]},"functionSelector":"6cc7149d","id":8317,"implemented":true,"kind":"function","modifiers":[],"name":"getFlags","nameLocation":"4832:8:56","nodeType":"FunctionDefinition","parameters":{"id":8300,"nodeType":"ParameterList","parameters":[],"src":"4840:2:56"},"returnParameters":{"id":8311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8302,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8317,"src":"4866:4:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8301,"name":"bool","nodeType":"ElementaryTypeName","src":"4866:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":8304,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8317,"src":"4872:4:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8303,"name":"bool","nodeType":"ElementaryTypeName","src":"4872:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":8306,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8317,"src":"4878:4:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8305,"name":"bool","nodeType":"ElementaryTypeName","src":"4878:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":8308,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8317,"src":"4884:4:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8307,"name":"bool","nodeType":"ElementaryTypeName","src":"4884:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":8310,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8317,"src":"4890:4:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8309,"name":"bool","nodeType":"ElementaryTypeName","src":"4890:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4865:30:56"},"scope":8350,"src":"4823:115:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8336,"nodeType":"Block","src":"5054:43:56","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8332,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"5067:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":8333,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getParams","nodeType":"MemberAccess","referencedDeclaration":11823,"src":"5067:23:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256,uint256,uint256,uint256,uint256,uint256)"}},"id":8334,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5067:25:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,uint256)"}},"functionReturnParameters":8331,"id":8335,"nodeType":"Return","src":"5060:32:56"}]},"functionSelector":"5e615a6b","id":8337,"implemented":true,"kind":"function","modifiers":[],"name":"getParams","nameLocation":"4951:9:56","nodeType":"FunctionDefinition","parameters":{"id":8318,"nodeType":"ParameterList","parameters":[],"src":"4960:2:56"},"returnParameters":{"id":8331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8320,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8337,"src":"4998:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8319,"name":"uint256","nodeType":"ElementaryTypeName","src":"4998:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8322,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8337,"src":"5007:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8321,"name":"uint256","nodeType":"ElementaryTypeName","src":"5007:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8324,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8337,"src":"5016:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8323,"name":"uint256","nodeType":"ElementaryTypeName","src":"5016:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8326,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8337,"src":"5025:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8325,"name":"uint256","nodeType":"ElementaryTypeName","src":"5025:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8328,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8337,"src":"5034:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8327,"name":"uint256","nodeType":"ElementaryTypeName","src":"5034:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8330,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8337,"src":"5043:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8329,"name":"uint256","nodeType":"ElementaryTypeName","src":"5043:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4997:54:56"},"scope":8350,"src":"4942:155:56","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8348,"nodeType":"Block","src":"5161:41:56","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8344,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"5174:13:56","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":8345,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getCaps","nodeType":"MemberAccess","referencedDeclaration":11856,"src":"5174:21:56","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256,uint256)"}},"id":8346,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5174:23:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":8343,"id":8347,"nodeType":"Return","src":"5167:30:56"}]},"functionSelector":"9d706d31","id":8349,"implemented":true,"kind":"function","modifiers":[],"name":"getCaps","nameLocation":"5110:7:56","nodeType":"FunctionDefinition","parameters":{"id":8338,"nodeType":"ParameterList","parameters":[],"src":"5117:2:56"},"returnParameters":{"id":8343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8340,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8349,"src":"5143:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8339,"name":"uint256","nodeType":"ElementaryTypeName","src":"5143:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8342,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8349,"src":"5152:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8341,"name":"uint256","nodeType":"ElementaryTypeName","src":"5152:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5142:18:56"},"scope":8350,"src":"5101:101:56","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":8351,"src":"237:4967:56","usedErrors":[]}],"src":"37:5168:56"},"id":56},"@aave/core-v3/contracts/mocks/oracle/CLAggregators/MockAggregator.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/mocks/oracle/CLAggregators/MockAggregator.sol","exportedSymbols":{"MockAggregator":[8404]},"id":8405,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":8352,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:57"},{"abstract":false,"baseContracts":[],"canonicalName":"MockAggregator","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":8404,"linearizedBaseContracts":[8404],"name":"MockAggregator","nameLocation":"71:14:57","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":8354,"mutability":"mutable","name":"_latestAnswer","nameLocation":"105:13:57","nodeType":"VariableDeclaration","scope":8404,"src":"90:28:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8353,"name":"int256","nodeType":"ElementaryTypeName","src":"90:6:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"private"},{"anonymous":false,"id":8362,"name":"AnswerUpdated","nameLocation":"129:13:57","nodeType":"EventDefinition","parameters":{"id":8361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8356,"indexed":true,"mutability":"mutable","name":"current","nameLocation":"158:7:57","nodeType":"VariableDeclaration","scope":8362,"src":"143:22:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8355,"name":"int256","nodeType":"ElementaryTypeName","src":"143:6:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":8358,"indexed":true,"mutability":"mutable","name":"roundId","nameLocation":"183:7:57","nodeType":"VariableDeclaration","scope":8362,"src":"167:23:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8357,"name":"uint256","nodeType":"ElementaryTypeName","src":"167:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8360,"indexed":false,"mutability":"mutable","name":"updatedAt","nameLocation":"200:9:57","nodeType":"VariableDeclaration","scope":8362,"src":"192:17:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8359,"name":"uint256","nodeType":"ElementaryTypeName","src":"192:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"142:68:57"},"src":"123:88:57"},{"body":{"id":8378,"nodeType":"Block","src":"249:99:57","statements":[{"expression":{"id":8369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8367,"name":"_latestAnswer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8354,"src":"255:13:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8368,"name":"initialAnswer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8364,"src":"271:13:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"255:29:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8370,"nodeType":"ExpressionStatement","src":"255:29:57"},{"eventCall":{"arguments":[{"id":8372,"name":"initialAnswer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8364,"src":"309:13:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"hexValue":"30","id":8373,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"324:1:57","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"id":8374,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"327:5:57","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":8375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"327:15:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8371,"name":"AnswerUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8362,"src":"295:13:57","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_int256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (int256,uint256,uint256)"}},"id":8376,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"295:48:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8377,"nodeType":"EmitStatement","src":"290:53:57"}]},"id":8379,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":8365,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8364,"mutability":"mutable","name":"initialAnswer","nameLocation":"234:13:57","nodeType":"VariableDeclaration","scope":8379,"src":"227:20:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8363,"name":"int256","nodeType":"ElementaryTypeName","src":"227:6:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"226:22:57"},"returnParameters":{"id":8366,"nodeType":"ParameterList","parameters":[],"src":"249:0:57"},"scope":8404,"src":"215:133:57","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":8386,"nodeType":"Block","src":"407:31:57","statements":[{"expression":{"id":8384,"name":"_latestAnswer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8354,"src":"420:13:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":8383,"id":8385,"nodeType":"Return","src":"413:20:57"}]},"functionSelector":"50d25bcd","id":8387,"implemented":true,"kind":"function","modifiers":[],"name":"latestAnswer","nameLocation":"361:12:57","nodeType":"FunctionDefinition","parameters":{"id":8380,"nodeType":"ParameterList","parameters":[],"src":"373:2:57"},"returnParameters":{"id":8383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8382,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8387,"src":"399:6:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8381,"name":"int256","nodeType":"ElementaryTypeName","src":"399:6:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"398:8:57"},"scope":8404,"src":"352:86:57","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8394,"nodeType":"Block","src":"498:19:57","statements":[{"expression":{"hexValue":"31","id":8392,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"511:1:57","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"functionReturnParameters":8391,"id":8393,"nodeType":"Return","src":"504:8:57"}]},"functionSelector":"fcab1819","id":8395,"implemented":true,"kind":"function","modifiers":[],"name":"getTokenType","nameLocation":"451:12:57","nodeType":"FunctionDefinition","parameters":{"id":8388,"nodeType":"ParameterList","parameters":[],"src":"463:2:57"},"returnParameters":{"id":8391,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8390,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8395,"src":"489:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8389,"name":"uint256","nodeType":"ElementaryTypeName","src":"489:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"488:9:57"},"scope":8404,"src":"442:75:57","stateMutability":"pure","virtual":false,"visibility":"external"},{"body":{"id":8402,"nodeType":"Block","src":"571:19:57","statements":[{"expression":{"hexValue":"38","id":8400,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"584:1:57","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"functionReturnParameters":8399,"id":8401,"nodeType":"Return","src":"577:8:57"}]},"functionSelector":"313ce567","id":8403,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"530:8:57","nodeType":"FunctionDefinition","parameters":{"id":8396,"nodeType":"ParameterList","parameters":[],"src":"538:2:57"},"returnParameters":{"id":8399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8398,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8403,"src":"564:5:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":8397,"name":"uint8","nodeType":"ElementaryTypeName","src":"564:5:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"563:7:57"},"scope":8404,"src":"521:69:57","stateMutability":"pure","virtual":false,"visibility":"external"}],"scope":8405,"src":"62:530:57","usedErrors":[]}],"src":"37:556:57"},"id":57},"@aave/core-v3/contracts/mocks/oracle/PriceOracle.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/mocks/oracle/PriceOracle.sol","exportedSymbols":{"IPriceOracle":[5811],"PriceOracle":[8490]},"id":8491,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":8406,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:58"},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPriceOracle.sol","file":"../../interfaces/IPriceOracle.sol","id":8408,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8491,"sourceUnit":5812,"src":"62:63:58","symbolAliases":[{"foreign":{"id":8407,"name":"IPriceOracle","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:12:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":8409,"name":"IPriceOracle","nodeType":"IdentifierPath","referencedDeclaration":5811,"src":"151:12:58"},"id":8410,"nodeType":"InheritanceSpecifier","src":"151:12:58"}],"canonicalName":"PriceOracle","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":8490,"linearizedBaseContracts":[8490,5811],"name":"PriceOracle","nameLocation":"136:11:58","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":8414,"mutability":"mutable","name":"prices","nameLocation":"247:6:58","nodeType":"VariableDeclaration","scope":8490,"src":"210:43:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":8413,"keyType":{"id":8411,"name":"address","nodeType":"ElementaryTypeName","src":"218:7:58","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"210:27:58","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":8412,"name":"uint256","nodeType":"ElementaryTypeName","src":"229:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":8416,"mutability":"mutable","name":"ethPriceUsd","nameLocation":"275:11:58","nodeType":"VariableDeclaration","scope":8490,"src":"258:28:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8415,"name":"uint256","nodeType":"ElementaryTypeName","src":"258:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"anonymous":false,"id":8424,"name":"AssetPriceUpdated","nameLocation":"297:17:58","nodeType":"EventDefinition","parameters":{"id":8423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8418,"indexed":false,"mutability":"mutable","name":"asset","nameLocation":"323:5:58","nodeType":"VariableDeclaration","scope":8424,"src":"315:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8417,"name":"address","nodeType":"ElementaryTypeName","src":"315:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8420,"indexed":false,"mutability":"mutable","name":"price","nameLocation":"338:5:58","nodeType":"VariableDeclaration","scope":8424,"src":"330:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8419,"name":"uint256","nodeType":"ElementaryTypeName","src":"330:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8422,"indexed":false,"mutability":"mutable","name":"timestamp","nameLocation":"353:9:58","nodeType":"VariableDeclaration","scope":8424,"src":"345:17:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8421,"name":"uint256","nodeType":"ElementaryTypeName","src":"345:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"314:49:58"},"src":"291:73:58"},{"anonymous":false,"id":8430,"name":"EthPriceUpdated","nameLocation":"373:15:58","nodeType":"EventDefinition","parameters":{"id":8429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8426,"indexed":false,"mutability":"mutable","name":"price","nameLocation":"397:5:58","nodeType":"VariableDeclaration","scope":8430,"src":"389:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8425,"name":"uint256","nodeType":"ElementaryTypeName","src":"389:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8428,"indexed":false,"mutability":"mutable","name":"timestamp","nameLocation":"412:9:58","nodeType":"VariableDeclaration","scope":8430,"src":"404:17:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8427,"name":"uint256","nodeType":"ElementaryTypeName","src":"404:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"388:34:58"},"src":"367:56:58"},{"baseFunctions":[5802],"body":{"id":8442,"nodeType":"Block","src":"506:31:58","statements":[{"expression":{"baseExpression":{"id":8438,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8414,"src":"519:6:58","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8440,"indexExpression":{"id":8439,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8432,"src":"526:5:58","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"519:13:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8437,"id":8441,"nodeType":"Return","src":"512:20:58"}]},"functionSelector":"b3596f07","id":8443,"implemented":true,"kind":"function","modifiers":[],"name":"getAssetPrice","nameLocation":"436:13:58","nodeType":"FunctionDefinition","overrides":{"id":8434,"nodeType":"OverrideSpecifier","overrides":[],"src":"479:8:58"},"parameters":{"id":8433,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8432,"mutability":"mutable","name":"asset","nameLocation":"458:5:58","nodeType":"VariableDeclaration","scope":8443,"src":"450:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8431,"name":"address","nodeType":"ElementaryTypeName","src":"450:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"449:15:58"},"returnParameters":{"id":8437,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8436,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8443,"src":"497:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8435,"name":"uint256","nodeType":"ElementaryTypeName","src":"497:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"496:9:58"},"scope":8490,"src":"427:110:58","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5810],"body":{"id":8464,"nodeType":"Block","src":"612:91:58","statements":[{"expression":{"id":8455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8451,"name":"prices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8414,"src":"618:6:58","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8453,"indexExpression":{"id":8452,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8445,"src":"625:5:58","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"618:13:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8454,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8447,"src":"634:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"618:21:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8456,"nodeType":"ExpressionStatement","src":"618:21:58"},{"eventCall":{"arguments":[{"id":8458,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8445,"src":"668:5:58","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8459,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8447,"src":"675:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":8460,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"682:5:58","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":8461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"682:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8457,"name":"AssetPriceUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8424,"src":"650:17:58","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":8462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"650:48:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8463,"nodeType":"EmitStatement","src":"645:53:58"}]},"functionSelector":"51323f72","id":8465,"implemented":true,"kind":"function","modifiers":[],"name":"setAssetPrice","nameLocation":"550:13:58","nodeType":"FunctionDefinition","overrides":{"id":8449,"nodeType":"OverrideSpecifier","overrides":[],"src":"603:8:58"},"parameters":{"id":8448,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8445,"mutability":"mutable","name":"asset","nameLocation":"572:5:58","nodeType":"VariableDeclaration","scope":8465,"src":"564:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8444,"name":"address","nodeType":"ElementaryTypeName","src":"564:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8447,"mutability":"mutable","name":"price","nameLocation":"587:5:58","nodeType":"VariableDeclaration","scope":8465,"src":"579:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8446,"name":"uint256","nodeType":"ElementaryTypeName","src":"579:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"563:30:58"},"returnParameters":{"id":8450,"nodeType":"ParameterList","parameters":[],"src":"612:0:58"},"scope":8490,"src":"541:162:58","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8472,"nodeType":"Block","src":"765:29:58","statements":[{"expression":{"id":8470,"name":"ethPriceUsd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8416,"src":"778:11:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8469,"id":8471,"nodeType":"Return","src":"771:18:58"}]},"functionSelector":"a0a8045e","id":8473,"implemented":true,"kind":"function","modifiers":[],"name":"getEthUsdPrice","nameLocation":"716:14:58","nodeType":"FunctionDefinition","parameters":{"id":8466,"nodeType":"ParameterList","parameters":[],"src":"730:2:58"},"returnParameters":{"id":8469,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8468,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8473,"src":"756:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8467,"name":"uint256","nodeType":"ElementaryTypeName","src":"756:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"755:9:58"},"scope":8490,"src":"707:87:58","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":8488,"nodeType":"Block","src":"846:80:58","statements":[{"expression":{"id":8480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8478,"name":"ethPriceUsd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8416,"src":"852:11:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8479,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8475,"src":"866:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"852:19:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8481,"nodeType":"ExpressionStatement","src":"852:19:58"},{"eventCall":{"arguments":[{"id":8483,"name":"price","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8475,"src":"898:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":8484,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"905:5:58","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":8485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"905:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8482,"name":"EthPriceUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8430,"src":"882:15:58","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":8486,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"882:39:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8487,"nodeType":"EmitStatement","src":"877:44:58"}]},"functionSelector":"b951883a","id":8489,"implemented":true,"kind":"function","modifiers":[],"name":"setEthUsdPrice","nameLocation":"807:14:58","nodeType":"FunctionDefinition","parameters":{"id":8476,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8475,"mutability":"mutable","name":"price","nameLocation":"830:5:58","nodeType":"VariableDeclaration","scope":8489,"src":"822:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8474,"name":"uint256","nodeType":"ElementaryTypeName","src":"822:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"821:15:58"},"returnParameters":{"id":8477,"nodeType":"ParameterList","parameters":[],"src":"846:0:58"},"scope":8490,"src":"798:128:58","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":8491,"src":"127:801:58","usedErrors":[]}],"src":"37:892:58"},"id":58},"@aave/core-v3/contracts/mocks/tokens/MintableDelegationERC20.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/mocks/tokens/MintableDelegationERC20.sol","exportedSymbols":{"ERC20":[1279],"IDelegationToken":[4101],"MintableDelegationERC20":[8550]},"id":8551,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":8492,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:59"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol","file":"../../dependencies/openzeppelin/contracts/ERC20.sol","id":8494,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8551,"sourceUnit":1280,"src":"62:74:59","symbolAliases":[{"foreign":{"id":8493,"name":"ERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:5:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IDelegationToken.sol","file":"../../interfaces/IDelegationToken.sol","id":8496,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8551,"sourceUnit":4102,"src":"137:71:59","symbolAliases":[{"foreign":{"id":8495,"name":"IDelegationToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"145:16:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":8498,"name":"IDelegationToken","nodeType":"IdentifierPath","referencedDeclaration":4101,"src":"332:16:59"},"id":8499,"nodeType":"InheritanceSpecifier","src":"332:16:59"},{"baseName":{"id":8500,"name":"ERC20","nodeType":"IdentifierPath","referencedDeclaration":1279,"src":"350:5:59"},"id":8501,"nodeType":"InheritanceSpecifier","src":"350:5:59"}],"canonicalName":"MintableDelegationERC20","contractDependencies":[],"contractKind":"contract","documentation":{"id":8497,"nodeType":"StructuredDocumentation","src":"210:85:59","text":" @title MintableDelegationERC20\n @dev ERC20 minting logic with delegation"},"fullyImplemented":true,"id":8550,"linearizedBaseContracts":[8550,1279,1442,748,4101],"name":"MintableDelegationERC20","nameLocation":"305:23:59","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"1e31d053","id":8503,"mutability":"mutable","name":"delegatee","nameLocation":"375:9:59","nodeType":"VariableDeclaration","scope":8550,"src":"360:24:59","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8502,"name":"address","nodeType":"ElementaryTypeName","src":"360:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"body":{"id":8520,"nodeType":"Block","src":"479:35:59","statements":[{"expression":{"arguments":[{"id":8517,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8509,"src":"500:8:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":8516,"name":"_setupDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1267,"src":"485:14:59","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint8_$returns$__$","typeString":"function (uint8)"}},"id":8518,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"485:24:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8519,"nodeType":"ExpressionStatement","src":"485:24:59"}]},"id":8521,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":8512,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8505,"src":"465:4:59","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":8513,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8507,"src":"471:6:59","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":8514,"kind":"baseConstructorSpecifier","modifierName":{"id":8511,"name":"ERC20","nodeType":"IdentifierPath","referencedDeclaration":1279,"src":"459:5:59"},"nodeType":"ModifierInvocation","src":"459:19:59"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":8510,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8505,"mutability":"mutable","name":"name","nameLocation":"415:4:59","nodeType":"VariableDeclaration","scope":8521,"src":"401:18:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8504,"name":"string","nodeType":"ElementaryTypeName","src":"401:6:59","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":8507,"mutability":"mutable","name":"symbol","nameLocation":"435:6:59","nodeType":"VariableDeclaration","scope":8521,"src":"421:20:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8506,"name":"string","nodeType":"ElementaryTypeName","src":"421:6:59","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":8509,"mutability":"mutable","name":"decimals","nameLocation":"449:8:59","nodeType":"VariableDeclaration","scope":8521,"src":"443:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":8508,"name":"uint8","nodeType":"ElementaryTypeName","src":"443:5:59","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"400:58:59"},"returnParameters":{"id":8515,"nodeType":"ParameterList","parameters":[],"src":"479:0:59"},"scope":8550,"src":"389:125:59","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":8537,"nodeType":"Block","src":"734:52:59","statements":[{"expression":{"arguments":[{"expression":{"id":8530,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"746:3:59","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":8531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"746:10:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8532,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8524,"src":"758:5:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8529,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1155,"src":"740:5:59","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":8533,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"740:24:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8534,"nodeType":"ExpressionStatement","src":"740:24:59"},{"expression":{"hexValue":"74727565","id":8535,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"777:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":8528,"id":8536,"nodeType":"Return","src":"770:11:59"}]},"documentation":{"id":8522,"nodeType":"StructuredDocumentation","src":"518:162:59","text":" @dev Function to mint tokens\n @param value The amount of tokens to mint.\n @return A boolean that indicates if the operation was successful."},"functionSelector":"a0712d68","id":8538,"implemented":true,"kind":"function","modifiers":[],"name":"mint","nameLocation":"692:4:59","nodeType":"FunctionDefinition","parameters":{"id":8525,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8524,"mutability":"mutable","name":"value","nameLocation":"705:5:59","nodeType":"VariableDeclaration","scope":8538,"src":"697:13:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8523,"name":"uint256","nodeType":"ElementaryTypeName","src":"697:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"696:15:59"},"returnParameters":{"id":8528,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8527,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8538,"src":"728:4:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8526,"name":"bool","nodeType":"ElementaryTypeName","src":"728:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"727:6:59"},"scope":8550,"src":"683:103:59","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[4100],"body":{"id":8548,"nodeType":"Block","src":"852:39:59","statements":[{"expression":{"id":8546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8544,"name":"delegatee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8503,"src":"858:9:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8545,"name":"delegateeAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8540,"src":"870:16:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"858:28:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":8547,"nodeType":"ExpressionStatement","src":"858:28:59"}]},"functionSelector":"5c19a95c","id":8549,"implemented":true,"kind":"function","modifiers":[],"name":"delegate","nameLocation":"799:8:59","nodeType":"FunctionDefinition","overrides":{"id":8542,"nodeType":"OverrideSpecifier","overrides":[],"src":"843:8:59"},"parameters":{"id":8541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8540,"mutability":"mutable","name":"delegateeAddress","nameLocation":"816:16:59","nodeType":"VariableDeclaration","scope":8549,"src":"808:24:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8539,"name":"address","nodeType":"ElementaryTypeName","src":"808:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"807:26:59"},"returnParameters":{"id":8543,"nodeType":"ParameterList","parameters":[],"src":"852:0:59"},"scope":8550,"src":"790:101:59","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":8551,"src":"296:597:59","usedErrors":[]}],"src":"37:857:59"},"id":59},"@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol","exportedSymbols":{"ERC20":[1279],"IERC20WithPermit":[4127],"MintableERC20":[8768]},"id":8769,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":8552,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:60"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol","file":"../../dependencies/openzeppelin/contracts/ERC20.sol","id":8554,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8769,"sourceUnit":1280,"src":"62:74:60","symbolAliases":[{"foreign":{"id":8553,"name":"ERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:5:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol","file":"../../interfaces/IERC20WithPermit.sol","id":8556,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8769,"sourceUnit":4128,"src":"137:71:60","symbolAliases":[{"foreign":{"id":8555,"name":"IERC20WithPermit","nodeType":"Identifier","overloadedDeclarations":[],"src":"145:16:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":8558,"name":"IERC20WithPermit","nodeType":"IdentifierPath","referencedDeclaration":4127,"src":"296:16:60"},"id":8559,"nodeType":"InheritanceSpecifier","src":"296:16:60"},{"baseName":{"id":8560,"name":"ERC20","nodeType":"IdentifierPath","referencedDeclaration":1279,"src":"314:5:60"},"id":8561,"nodeType":"InheritanceSpecifier","src":"314:5:60"}],"canonicalName":"MintableERC20","contractDependencies":[],"contractKind":"contract","documentation":{"id":8557,"nodeType":"StructuredDocumentation","src":"210:59:60","text":" @title ERC20Mintable\n @dev ERC20 minting logic"},"fullyImplemented":true,"id":8768,"linearizedBaseContracts":[8768,1279,4127,1442,748],"name":"MintableERC20","nameLocation":"279:13:60","nodeType":"ContractDefinition","nodes":[{"constant":true,"functionSelector":"78160376","id":8567,"mutability":"constant","name":"EIP712_REVISION","nameLocation":"346:15:60","nodeType":"VariableDeclaration","scope":8768,"src":"324:50:60","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":8562,"name":"bytes","nodeType":"ElementaryTypeName","src":"324:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"value":{"arguments":[{"hexValue":"31","id":8565,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"370:3:60","typeDescriptions":{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""}],"id":8564,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"364:5:60","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8563,"name":"bytes","nodeType":"ElementaryTypeName","src":"364:5:60","typeDescriptions":{}}},"id":8566,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"364:10:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"visibility":"public"},{"constant":true,"id":8572,"mutability":"constant","name":"EIP712_DOMAIN","nameLocation":"404:13:60","nodeType":"VariableDeclaration","scope":8768,"src":"378:141:60","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8568,"name":"bytes32","nodeType":"ElementaryTypeName","src":"378:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429","id":8570,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"434:84:60","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":8569,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"424:9:60","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":8571,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"424:95:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":true,"functionSelector":"30adf81f","id":8577,"mutability":"constant","name":"PERMIT_TYPEHASH","nameLocation":"547:15:60","nodeType":"VariableDeclaration","scope":8768,"src":"523:141:60","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8573,"name":"bytes32","nodeType":"ElementaryTypeName","src":"523:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"5065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529","id":8575,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"579:84:60","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":8574,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"569:9:60","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":8576,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"569:95:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"constant":false,"id":8581,"mutability":"mutable","name":"_nonces","nameLocation":"752:7:60","nodeType":"VariableDeclaration","scope":8768,"src":"715:44:60","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":8580,"keyType":{"id":8578,"name":"address","nodeType":"ElementaryTypeName","src":"723:7:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"715:27:60","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":8579,"name":"uint256","nodeType":"ElementaryTypeName","src":"734:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"functionSelector":"3644e515","id":8583,"mutability":"mutable","name":"DOMAIN_SEPARATOR","nameLocation":"779:16:60","nodeType":"VariableDeclaration","scope":8768,"src":"764:31:60","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8582,"name":"bytes32","nodeType":"ElementaryTypeName","src":"764:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"body":{"id":8628,"nodeType":"Block","src":"890:270:60","statements":[{"assignments":[8597],"declarations":[{"constant":false,"id":8597,"mutability":"mutable","name":"chainId","nameLocation":"904:7:60","nodeType":"VariableDeclaration","scope":8628,"src":"896:15:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8596,"name":"uint256","nodeType":"ElementaryTypeName","src":"896:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8600,"initialValue":{"expression":{"id":8598,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"914:5:60","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":8599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"chainid","nodeType":"MemberAccess","src":"914:13:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"896:31:60"},{"expression":{"id":8622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8601,"name":"DOMAIN_SEPARATOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8583,"src":"934:16:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":8605,"name":"EIP712_DOMAIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8572,"src":"990:13:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"arguments":[{"id":8609,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8585,"src":"1029:4:60","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8608,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1023:5:60","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8607,"name":"bytes","nodeType":"ElementaryTypeName","src":"1023:5:60","typeDescriptions":{}}},"id":8610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1023:11:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":8606,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1013:9:60","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":8611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1013:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":8613,"name":"EIP712_REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8567,"src":"1055:15:60","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":8612,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1045:9:60","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":8614,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1045:26:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":8615,"name":"chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8597,"src":"1081:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":8618,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1106:4:60","typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$8768","typeString":"contract MintableERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MintableERC20_$8768","typeString":"contract MintableERC20"}],"id":8617,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1098:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8616,"name":"address","nodeType":"ElementaryTypeName","src":"1098:7:60","typeDescriptions":{}}},"id":8619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1098:13:60","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":8603,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"970:3:60","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":8604,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"970:10:60","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":8620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"970:149:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":8602,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"953:9:60","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":8621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"953:172:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"934:191:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":8623,"nodeType":"ExpressionStatement","src":"934:191:60"},{"expression":{"arguments":[{"id":8625,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8589,"src":"1146:8:60","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":8624,"name":"_setupDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1267,"src":"1131:14:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint8_$returns$__$","typeString":"function (uint8)"}},"id":8626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1131:24:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8627,"nodeType":"ExpressionStatement","src":"1131:24:60"}]},"id":8629,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":8592,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8585,"src":"876:4:60","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":8593,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8587,"src":"882:6:60","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":8594,"kind":"baseConstructorSpecifier","modifierName":{"id":8591,"name":"ERC20","nodeType":"IdentifierPath","referencedDeclaration":1279,"src":"870:5:60"},"nodeType":"ModifierInvocation","src":"870:19:60"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":8590,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8585,"mutability":"mutable","name":"name","nameLocation":"826:4:60","nodeType":"VariableDeclaration","scope":8629,"src":"812:18:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8584,"name":"string","nodeType":"ElementaryTypeName","src":"812:6:60","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":8587,"mutability":"mutable","name":"symbol","nameLocation":"846:6:60","nodeType":"VariableDeclaration","scope":8629,"src":"832:20:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8586,"name":"string","nodeType":"ElementaryTypeName","src":"832:6:60","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":8589,"mutability":"mutable","name":"decimals","nameLocation":"860:8:60","nodeType":"VariableDeclaration","scope":8629,"src":"854:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":8588,"name":"uint8","nodeType":"ElementaryTypeName","src":"854:5:60","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"811:58:60"},"returnParameters":{"id":8595,"nodeType":"ParameterList","parameters":[],"src":"890:0:60"},"scope":8768,"src":"800:360:60","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[4126],"body":{"id":8719,"nodeType":"Block","src":"1361:567:60","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":8654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8649,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8632,"src":"1375:5:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":8652,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1392: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":8651,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1384:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8650,"name":"address","nodeType":"ElementaryTypeName","src":"1384:7:60","typeDescriptions":{}}},"id":8653,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1384:10:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1375:19:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e56414c49445f4f574e4552","id":8655,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1396:15:60","typeDescriptions":{"typeIdentifier":"t_stringliteral_a30e2b4f22d955e30086ae3aef0adfd87eec9d0d3f055d6aa9af61f522dda886","typeString":"literal_string \"INVALID_OWNER\""},"value":"INVALID_OWNER"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a30e2b4f22d955e30086ae3aef0adfd87eec9d0d3f055d6aa9af61f522dda886","typeString":"literal_string \"INVALID_OWNER\""}],"id":8648,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1367:7:60","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":8656,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1367:45:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8657,"nodeType":"ExpressionStatement","src":"1367:45:60"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":8659,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1457:5:60","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":8660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"1457:15:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":8661,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8638,"src":"1476:8:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1457:27:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e56414c49445f45585049524154494f4e","id":8663,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1486:20:60","typeDescriptions":{"typeIdentifier":"t_stringliteral_9fe3e5cf49f72bf8a6a8455c3e990f8479f5dfa09ac808886f330a39b0029c2d","typeString":"literal_string \"INVALID_EXPIRATION\""},"value":"INVALID_EXPIRATION"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9fe3e5cf49f72bf8a6a8455c3e990f8479f5dfa09ac808886f330a39b0029c2d","typeString":"literal_string \"INVALID_EXPIRATION\""}],"id":8658,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1449:7:60","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":8664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1449:58:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8665,"nodeType":"ExpressionStatement","src":"1449:58:60"},{"assignments":[8667],"declarations":[{"constant":false,"id":8667,"mutability":"mutable","name":"currentValidNonce","nameLocation":"1521:17:60","nodeType":"VariableDeclaration","scope":8719,"src":"1513:25:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8666,"name":"uint256","nodeType":"ElementaryTypeName","src":"1513:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8671,"initialValue":{"baseExpression":{"id":8668,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8581,"src":"1541:7:60","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8670,"indexExpression":{"id":8669,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8632,"src":"1549:5:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1541:14:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1513:42:60"},{"assignments":[8673],"declarations":[{"constant":false,"id":8673,"mutability":"mutable","name":"digest","nameLocation":"1569:6:60","nodeType":"VariableDeclaration","scope":8719,"src":"1561:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8672,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1561:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":8692,"initialValue":{"arguments":[{"arguments":[{"hexValue":"1901","id":8677,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1621:10:60","typeDescriptions":{"typeIdentifier":"t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541","typeString":"literal_string hex\"1901\""},"value":"\u0019\u0001"},{"id":8678,"name":"DOMAIN_SEPARATOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8583,"src":"1641:16:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"arguments":[{"id":8682,"name":"PERMIT_TYPEHASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8577,"src":"1688:15:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":8683,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8632,"src":"1705:5:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8684,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8634,"src":"1712:7:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8685,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8636,"src":"1721:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8686,"name":"currentValidNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8667,"src":"1728:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8687,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8638,"src":"1747:8:60","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":8680,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1677:3:60","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":8681,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"1677:10:60","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":8688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1677:79:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":8679,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1667:9:60","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":8689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1667:90:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541","typeString":"literal_string hex\"1901\""},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":8675,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1595:3:60","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":8676,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"1595:16:60","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":8690,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1595:170:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":8674,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1578:9:60","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":8691,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1578:193:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1561:210:60"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":8701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8694,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8632,"src":"1785:5:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":8696,"name":"digest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8673,"src":"1804:6:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":8697,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8640,"src":"1812:1:60","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":8698,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8642,"src":"1815:1:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":8699,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8644,"src":"1818:1:60","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":8695,"name":"ecrecover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-6,"src":"1794:9:60","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":8700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1794:26:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1785:35:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e56414c49445f5349474e4154555245","id":8702,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1822:19:60","typeDescriptions":{"typeIdentifier":"t_stringliteral_5e2e9eaa2d734966dea0900deacd15b20129fbce05255d633a3ce5ebca181b88","typeString":"literal_string \"INVALID_SIGNATURE\""},"value":"INVALID_SIGNATURE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5e2e9eaa2d734966dea0900deacd15b20129fbce05255d633a3ce5ebca181b88","typeString":"literal_string \"INVALID_SIGNATURE\""}],"id":8693,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1777:7:60","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":8703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1777:65:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8704,"nodeType":"ExpressionStatement","src":"1777:65:60"},{"expression":{"id":8711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8705,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8581,"src":"1848:7:60","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8707,"indexExpression":{"id":8706,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8632,"src":"1856:5:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1848:14:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8708,"name":"currentValidNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8667,"src":"1865:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":8709,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1885:1:60","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1865:21:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1848:38:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8712,"nodeType":"ExpressionStatement","src":"1848:38:60"},{"expression":{"arguments":[{"id":8714,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8632,"src":"1901:5:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8715,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8634,"src":"1908:7:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8716,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8636,"src":"1917:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8713,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1256,"src":"1892:8:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":8717,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1892:31:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8718,"nodeType":"ExpressionStatement","src":"1892:31:60"}]},"documentation":{"id":8630,"nodeType":"StructuredDocumentation","src":"1164:32:60","text":"@inheritdoc IERC20WithPermit"},"functionSelector":"d505accf","id":8720,"implemented":true,"kind":"function","modifiers":[],"name":"permit","nameLocation":"1208:6:60","nodeType":"FunctionDefinition","overrides":{"id":8646,"nodeType":"OverrideSpecifier","overrides":[],"src":"1352:8:60"},"parameters":{"id":8645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8632,"mutability":"mutable","name":"owner","nameLocation":"1228:5:60","nodeType":"VariableDeclaration","scope":8720,"src":"1220:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8631,"name":"address","nodeType":"ElementaryTypeName","src":"1220:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8634,"mutability":"mutable","name":"spender","nameLocation":"1247:7:60","nodeType":"VariableDeclaration","scope":8720,"src":"1239:15:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8633,"name":"address","nodeType":"ElementaryTypeName","src":"1239:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8636,"mutability":"mutable","name":"value","nameLocation":"1268:5:60","nodeType":"VariableDeclaration","scope":8720,"src":"1260:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8635,"name":"uint256","nodeType":"ElementaryTypeName","src":"1260:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8638,"mutability":"mutable","name":"deadline","nameLocation":"1287:8:60","nodeType":"VariableDeclaration","scope":8720,"src":"1279:16:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8637,"name":"uint256","nodeType":"ElementaryTypeName","src":"1279:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8640,"mutability":"mutable","name":"v","nameLocation":"1307:1:60","nodeType":"VariableDeclaration","scope":8720,"src":"1301:7:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":8639,"name":"uint8","nodeType":"ElementaryTypeName","src":"1301:5:60","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":8642,"mutability":"mutable","name":"r","nameLocation":"1322:1:60","nodeType":"VariableDeclaration","scope":8720,"src":"1314:9:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8641,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1314:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":8644,"mutability":"mutable","name":"s","nameLocation":"1337:1:60","nodeType":"VariableDeclaration","scope":8720,"src":"1329:9:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8643,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1329:7:60","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1214:128:60"},"returnParameters":{"id":8647,"nodeType":"ParameterList","parameters":[],"src":"1361:0:60"},"scope":8768,"src":"1199:729:60","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8736,"nodeType":"Block","src":"2148:54:60","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":8729,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"2160:10:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":8730,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2160:12:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":8731,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8723,"src":"2174:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8728,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1155,"src":"2154:5:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":8732,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2154:26:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8733,"nodeType":"ExpressionStatement","src":"2154:26:60"},{"expression":{"hexValue":"74727565","id":8734,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2193:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":8727,"id":8735,"nodeType":"Return","src":"2186:11:60"}]},"documentation":{"id":8721,"nodeType":"StructuredDocumentation","src":"1932:162:60","text":" @dev Function to mint tokens\n @param value The amount of tokens to mint.\n @return A boolean that indicates if the operation was successful."},"functionSelector":"a0712d68","id":8737,"implemented":true,"kind":"function","modifiers":[],"name":"mint","nameLocation":"2106:4:60","nodeType":"FunctionDefinition","parameters":{"id":8724,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8723,"mutability":"mutable","name":"value","nameLocation":"2119:5:60","nodeType":"VariableDeclaration","scope":8737,"src":"2111:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8722,"name":"uint256","nodeType":"ElementaryTypeName","src":"2111:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2110:15:60"},"returnParameters":{"id":8727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8726,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8737,"src":"2142:4:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8725,"name":"bool","nodeType":"ElementaryTypeName","src":"2142:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2141:6:60"},"scope":8768,"src":"2097:105:60","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":8754,"nodeType":"Block","src":"2498:49:60","statements":[{"expression":{"arguments":[{"id":8748,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8740,"src":"2510:7:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8749,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8742,"src":"2519:5:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8747,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1155,"src":"2504:5:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":8750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2504:21:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8751,"nodeType":"ExpressionStatement","src":"2504:21:60"},{"expression":{"hexValue":"74727565","id":8752,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2538:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":8746,"id":8753,"nodeType":"Return","src":"2531:11:60"}]},"documentation":{"id":8738,"nodeType":"StructuredDocumentation","src":"2206:221:60","text":" @dev Function to mint tokens to address\n @param account The account to mint tokens.\n @param value The amount of tokens to mint.\n @return A boolean that indicates if the operation was successful."},"functionSelector":"40c10f19","id":8755,"implemented":true,"kind":"function","modifiers":[],"name":"mint","nameLocation":"2439:4:60","nodeType":"FunctionDefinition","parameters":{"id":8743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8740,"mutability":"mutable","name":"account","nameLocation":"2452:7:60","nodeType":"VariableDeclaration","scope":8755,"src":"2444:15:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8739,"name":"address","nodeType":"ElementaryTypeName","src":"2444:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8742,"mutability":"mutable","name":"value","nameLocation":"2469:5:60","nodeType":"VariableDeclaration","scope":8755,"src":"2461:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8741,"name":"uint256","nodeType":"ElementaryTypeName","src":"2461:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2443:32:60"},"returnParameters":{"id":8746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8745,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8755,"src":"2492:4:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8744,"name":"bool","nodeType":"ElementaryTypeName","src":"2492:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2491:6:60"},"scope":8768,"src":"2430:117:60","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":8766,"nodeType":"Block","src":"2620:32:60","statements":[{"expression":{"baseExpression":{"id":8762,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8581,"src":"2633:7:60","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8764,"indexExpression":{"id":8763,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8757,"src":"2641:5:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2633:14:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8761,"id":8765,"nodeType":"Return","src":"2626:21:60"}]},"functionSelector":"7ecebe00","id":8767,"implemented":true,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"2560:6:60","nodeType":"FunctionDefinition","parameters":{"id":8758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8757,"mutability":"mutable","name":"owner","nameLocation":"2575:5:60","nodeType":"VariableDeclaration","scope":8767,"src":"2567:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8756,"name":"address","nodeType":"ElementaryTypeName","src":"2567:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2566:15:60"},"returnParameters":{"id":8761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8760,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8767,"src":"2611:7:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8759,"name":"uint256","nodeType":"ElementaryTypeName","src":"2611:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2610:9:60"},"scope":8768,"src":"2551:101:60","stateMutability":"view","virtual":true,"visibility":"public"}],"scope":8769,"src":"270:2384:60","usedErrors":[]}],"src":"37:2618:60"},"id":60},"@aave/core-v3/contracts/mocks/tokens/WETH9Mocked.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/mocks/tokens/WETH9Mocked.sol","exportedSymbols":{"WETH9":[3228],"WETH9Mocked":[8829]},"id":8830,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":8770,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:61"},{"absolutePath":"@aave/core-v3/contracts/dependencies/weth/WETH9.sol","file":"../../dependencies/weth/WETH9.sol","id":8772,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8830,"sourceUnit":3229,"src":"62:56:61","symbolAliases":[{"foreign":{"id":8771,"name":"WETH9","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:5:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":8773,"name":"WETH9","nodeType":"IdentifierPath","referencedDeclaration":3228,"src":"144:5:61"},"id":8774,"nodeType":"InheritanceSpecifier","src":"144:5:61"}],"canonicalName":"WETH9Mocked","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":8829,"linearizedBaseContracts":[8829,3228],"name":"WETH9Mocked","nameLocation":"129:11:61","nodeType":"ContractDefinition","nodes":[{"body":{"id":8800,"nodeType":"Block","src":"262:108:61","statements":[{"expression":{"id":8786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8781,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3022,"src":"268:9:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8784,"indexExpression":{"expression":{"id":8782,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"278:3:61","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":8783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"278:10:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"268:21:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":8785,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8776,"src":"293:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"268:30:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8787,"nodeType":"ExpressionStatement","src":"268:30:61"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":8791,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"326:1:61","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":8790,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"318:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8789,"name":"address","nodeType":"ElementaryTypeName","src":"318:7:61","typeDescriptions":{}}},"id":8792,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"318:10:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":8793,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"330:3:61","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":8794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"330:10:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8795,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8776,"src":"342:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8788,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3006,"src":"309:8:61","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":8796,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"309:39:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8797,"nodeType":"EmitStatement","src":"304:44:61"},{"expression":{"hexValue":"74727565","id":8798,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"361:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":8780,"id":8799,"nodeType":"Return","src":"354:11:61"}]},"functionSelector":"a0712d68","id":8801,"implemented":true,"kind":"function","modifiers":[],"name":"mint","nameLocation":"220:4:61","nodeType":"FunctionDefinition","parameters":{"id":8777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8776,"mutability":"mutable","name":"value","nameLocation":"233:5:61","nodeType":"VariableDeclaration","scope":8801,"src":"225:13:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8775,"name":"uint256","nodeType":"ElementaryTypeName","src":"225:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"224:15:61"},"returnParameters":{"id":8780,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8779,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8801,"src":"256:4:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8778,"name":"bool","nodeType":"ElementaryTypeName","src":"256:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"255:6:61"},"scope":8829,"src":"211:159:61","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":8827,"nodeType":"Block","src":"442:102:61","statements":[{"expression":{"id":8814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8810,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3022,"src":"448:9:61","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":8812,"indexExpression":{"id":8811,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8803,"src":"458:7:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"448:18:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":8813,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8805,"src":"470:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"448:27:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8815,"nodeType":"ExpressionStatement","src":"448:27:61"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":8819,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"503:1:61","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":8818,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"495:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8817,"name":"address","nodeType":"ElementaryTypeName","src":"495:7:61","typeDescriptions":{}}},"id":8820,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"495:10:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8821,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8803,"src":"507:7:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":8822,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8805,"src":"516:5:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8816,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3006,"src":"486:8:61","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":8823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"486:36:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8824,"nodeType":"EmitStatement","src":"481:41:61"},{"expression":{"hexValue":"74727565","id":8825,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"535:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":8809,"id":8826,"nodeType":"Return","src":"528:11:61"}]},"functionSelector":"40c10f19","id":8828,"implemented":true,"kind":"function","modifiers":[],"name":"mint","nameLocation":"383:4:61","nodeType":"FunctionDefinition","parameters":{"id":8806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8803,"mutability":"mutable","name":"account","nameLocation":"396:7:61","nodeType":"VariableDeclaration","scope":8828,"src":"388:15:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8802,"name":"address","nodeType":"ElementaryTypeName","src":"388:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":8805,"mutability":"mutable","name":"value","nameLocation":"413:5:61","nodeType":"VariableDeclaration","scope":8828,"src":"405:13:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8804,"name":"uint256","nodeType":"ElementaryTypeName","src":"405:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"387:32:61"},"returnParameters":{"id":8809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8808,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8828,"src":"436:4:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8807,"name":"bool","nodeType":"ElementaryTypeName","src":"436:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"435:6:61"},"scope":8829,"src":"374:170:61","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":8830,"src":"120:426:61","usedErrors":[]}],"src":"37:510:61"},"id":61},"@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol","exportedSymbols":{"AToken":[25985],"IPool":[4860],"MockAToken":[8857]},"id":8858,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":8831,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:62"},{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/AToken.sol","file":"../../protocol/tokenization/AToken.sol","id":8833,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8858,"sourceUnit":25986,"src":"62:62:62","symbolAliases":[{"foreign":{"id":8832,"name":"AToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:6:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":8835,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8858,"sourceUnit":4861,"src":"125:49:62","symbolAliases":[{"foreign":{"id":8834,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"133:5:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":8836,"name":"AToken","nodeType":"IdentifierPath","referencedDeclaration":25985,"src":"199:6:62"},"id":8837,"nodeType":"InheritanceSpecifier","src":"199:6:62"}],"canonicalName":"MockAToken","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":8857,"linearizedBaseContracts":[8857,25985,3861,4176,27822,28966,5975,28499,28349,1464,1442,748,10573],"name":"MockAToken","nameLocation":"185:10:62","nodeType":"ContractDefinition","nodes":[{"body":{"id":8846,"nodeType":"Block","src":"247:2:62","statements":[]},"id":8847,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":8843,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8840,"src":"241:4:62","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"id":8844,"kind":"baseConstructorSpecifier","modifierName":{"id":8842,"name":"AToken","nodeType":"IdentifierPath","referencedDeclaration":25985,"src":"234:6:62"},"nodeType":"ModifierInvocation","src":"234:12:62"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":8841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8840,"mutability":"mutable","name":"pool","nameLocation":"228:4:62","nodeType":"VariableDeclaration","scope":8847,"src":"222:10:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":8839,"nodeType":"UserDefinedTypeName","pathNode":{"id":8838,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"222:5:62"},"referencedDeclaration":4860,"src":"222:5:62","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"}],"src":"221:12:62"},"returnParameters":{"id":8845,"nodeType":"ParameterList","parameters":[],"src":"247:0:62"},"scope":8857,"src":"210:39:62","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[25404],"body":{"id":8855,"nodeType":"Block","src":"317:21:62","statements":[{"expression":{"hexValue":"307832","id":8853,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"330:3:62","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"0x2"},"functionReturnParameters":8852,"id":8854,"nodeType":"Return","src":"323:10:62"}]},"id":8856,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"262:11:62","nodeType":"FunctionDefinition","overrides":{"id":8849,"nodeType":"OverrideSpecifier","overrides":[],"src":"290:8:62"},"parameters":{"id":8848,"nodeType":"ParameterList","parameters":[],"src":"273:2:62"},"returnParameters":{"id":8852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8851,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8856,"src":"308:7:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8850,"name":"uint256","nodeType":"ElementaryTypeName","src":"308:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"307:9:62"},"scope":8857,"src":"253:85:62","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":8858,"src":"176:164:62","usedErrors":[]}],"src":"37:304:62"},"id":62},"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol","exportedSymbols":{"MockInitializableFromConstructorImple":[9037],"MockInitializableImple":[8929],"MockInitializableImpleV2":[8997],"MockReentrantInitializableImple":[9078],"VersionedInitializable":[10573]},"id":9079,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":8859,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:63"},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol","file":"../../protocol/libraries/aave-upgradeability/VersionedInitializable.sol","id":8861,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9079,"sourceUnit":10574,"src":"62:111:63","symbolAliases":[{"foreign":{"id":8860,"name":"VersionedInitializable","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:22:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":8862,"name":"VersionedInitializable","nodeType":"IdentifierPath","referencedDeclaration":10573,"src":"210:22:63"},"id":8863,"nodeType":"InheritanceSpecifier","src":"210:22:63"}],"canonicalName":"MockInitializableImple","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":8929,"linearizedBaseContracts":[8929,10573],"name":"MockInitializableImple","nameLocation":"184:22:63","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"3fa4f245","id":8865,"mutability":"mutable","name":"value","nameLocation":"252:5:63","nodeType":"VariableDeclaration","scope":8929,"src":"237:20:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8864,"name":"uint256","nodeType":"ElementaryTypeName","src":"237:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"functionSelector":"1f1bd692","id":8867,"mutability":"mutable","name":"text","nameLocation":"275:4:63","nodeType":"VariableDeclaration","scope":8929,"src":"261:18:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":8866,"name":"string","nodeType":"ElementaryTypeName","src":"261:6:63","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"public"},{"constant":false,"functionSelector":"5e383d21","id":8870,"mutability":"mutable","name":"values","nameLocation":"300:6:63","nodeType":"VariableDeclaration","scope":8929,"src":"283:23:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[]"},"typeName":{"baseType":{"id":8868,"name":"uint256","nodeType":"ElementaryTypeName","src":"283:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8869,"nodeType":"ArrayTypeName","src":"283:9:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"public"},{"constant":true,"functionSelector":"dde43cba","id":8873,"mutability":"constant","name":"REVISION","nameLocation":"335:8:63","nodeType":"VariableDeclaration","scope":8929,"src":"311:36:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8871,"name":"uint256","nodeType":"ElementaryTypeName","src":"311:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":8872,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"346:1:63","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"public"},{"baseFunctions":[10553],"body":{"id":8882,"nodeType":"Block","src":"545:26:63","statements":[{"expression":{"id":8880,"name":"REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8873,"src":"558:8:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8879,"id":8881,"nodeType":"Return","src":"551:15:63"}]},"documentation":{"id":8874,"nodeType":"StructuredDocumentation","src":"352:126:63","text":" @dev returns the revision number of the contract\n Needs to be defined in the inherited class as a constant."},"id":8883,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"490:11:63","nodeType":"FunctionDefinition","overrides":{"id":8876,"nodeType":"OverrideSpecifier","overrides":[],"src":"518:8:63"},"parameters":{"id":8875,"nodeType":"ParameterList","parameters":[],"src":"501:2:63"},"returnParameters":{"id":8879,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8878,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8883,"src":"536:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8877,"name":"uint256","nodeType":"ElementaryTypeName","src":"536:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"535:9:63"},"scope":8929,"src":"481:90:63","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8907,"nodeType":"Block","src":"671:57:63","statements":[{"expression":{"id":8897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8895,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8865,"src":"677:5:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8896,"name":"val","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8885,"src":"685:3:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"677:11:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8898,"nodeType":"ExpressionStatement","src":"677:11:63"},{"expression":{"id":8901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8899,"name":"text","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8867,"src":"694:4:63","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8900,"name":"txt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8887,"src":"701:3:63","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"694:10:63","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":8902,"nodeType":"ExpressionStatement","src":"694:10:63"},{"expression":{"id":8905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8903,"name":"values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8870,"src":"710:6:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8904,"name":"vals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8890,"src":"719:4:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"710:13:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":8906,"nodeType":"ExpressionStatement","src":"710:13:63"}]},"functionSelector":"d31f8b6b","id":8908,"implemented":true,"kind":"function","modifiers":[{"id":8893,"kind":"modifierInvocation","modifierName":{"id":8892,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":10547,"src":"659:11:63"},"nodeType":"ModifierInvocation","src":"659:11:63"}],"name":"initialize","nameLocation":"584:10:63","nodeType":"FunctionDefinition","parameters":{"id":8891,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8885,"mutability":"mutable","name":"val","nameLocation":"603:3:63","nodeType":"VariableDeclaration","scope":8908,"src":"595:11:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8884,"name":"uint256","nodeType":"ElementaryTypeName","src":"595:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8887,"mutability":"mutable","name":"txt","nameLocation":"622:3:63","nodeType":"VariableDeclaration","scope":8908,"src":"608:17:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8886,"name":"string","nodeType":"ElementaryTypeName","src":"608:6:63","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":8890,"mutability":"mutable","name":"vals","nameLocation":"644:4:63","nodeType":"VariableDeclaration","scope":8908,"src":"627:21:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":8888,"name":"uint256","nodeType":"ElementaryTypeName","src":"627:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8889,"nodeType":"ArrayTypeName","src":"627:9:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"594:55:63"},"returnParameters":{"id":8894,"nodeType":"ParameterList","parameters":[],"src":"671:0:63"},"scope":8929,"src":"575:153:63","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":8917,"nodeType":"Block","src":"775:27:63","statements":[{"expression":{"id":8915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8913,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8865,"src":"781:5:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8914,"name":"newValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8910,"src":"789:8:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"781:16:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8916,"nodeType":"ExpressionStatement","src":"781:16:63"}]},"functionSelector":"55241077","id":8918,"implemented":true,"kind":"function","modifiers":[],"name":"setValue","nameLocation":"741:8:63","nodeType":"FunctionDefinition","parameters":{"id":8911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8910,"mutability":"mutable","name":"newValue","nameLocation":"758:8:63","nodeType":"VariableDeclaration","scope":8918,"src":"750:16:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8909,"name":"uint256","nodeType":"ElementaryTypeName","src":"750:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"749:18:63"},"returnParameters":{"id":8912,"nodeType":"ParameterList","parameters":[],"src":"775:0:63"},"scope":8929,"src":"732:70:63","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":8927,"nodeType":"Block","src":"857:27:63","statements":[{"expression":{"id":8925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8923,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8865,"src":"863:5:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8924,"name":"newValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8920,"src":"871:8:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"863:16:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8926,"nodeType":"ExpressionStatement","src":"863:16:63"}]},"functionSelector":"5dd21610","id":8928,"implemented":true,"kind":"function","modifiers":[],"name":"setValueViaProxy","nameLocation":"815:16:63","nodeType":"FunctionDefinition","parameters":{"id":8921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8920,"mutability":"mutable","name":"newValue","nameLocation":"840:8:63","nodeType":"VariableDeclaration","scope":8928,"src":"832:16:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8919,"name":"uint256","nodeType":"ElementaryTypeName","src":"832:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"831:18:63"},"returnParameters":{"id":8922,"nodeType":"ParameterList","parameters":[],"src":"857:0:63"},"scope":8929,"src":"806:78:63","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":9079,"src":"175:711:63","usedErrors":[]},{"abstract":false,"baseContracts":[{"baseName":{"id":8930,"name":"VersionedInitializable","nodeType":"IdentifierPath","referencedDeclaration":10573,"src":"925:22:63"},"id":8931,"nodeType":"InheritanceSpecifier","src":"925:22:63"}],"canonicalName":"MockInitializableImpleV2","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":8997,"linearizedBaseContracts":[8997,10573],"name":"MockInitializableImpleV2","nameLocation":"897:24:63","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"3fa4f245","id":8933,"mutability":"mutable","name":"value","nameLocation":"967:5:63","nodeType":"VariableDeclaration","scope":8997,"src":"952:20:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8932,"name":"uint256","nodeType":"ElementaryTypeName","src":"952:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"functionSelector":"1f1bd692","id":8935,"mutability":"mutable","name":"text","nameLocation":"990:4:63","nodeType":"VariableDeclaration","scope":8997,"src":"976:18:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":8934,"name":"string","nodeType":"ElementaryTypeName","src":"976:6:63","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"public"},{"constant":false,"functionSelector":"5e383d21","id":8938,"mutability":"mutable","name":"values","nameLocation":"1015:6:63","nodeType":"VariableDeclaration","scope":8997,"src":"998:23:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[]"},"typeName":{"baseType":{"id":8936,"name":"uint256","nodeType":"ElementaryTypeName","src":"998:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8937,"nodeType":"ArrayTypeName","src":"998:9:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"public"},{"constant":true,"functionSelector":"dde43cba","id":8941,"mutability":"constant","name":"REVISION","nameLocation":"1050:8:63","nodeType":"VariableDeclaration","scope":8997,"src":"1026:36:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8939,"name":"uint256","nodeType":"ElementaryTypeName","src":"1026:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":8940,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1061:1:63","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"public"},{"baseFunctions":[10553],"body":{"id":8950,"nodeType":"Block","src":"1260:26:63","statements":[{"expression":{"id":8948,"name":"REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8941,"src":"1273:8:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8947,"id":8949,"nodeType":"Return","src":"1266:15:63"}]},"documentation":{"id":8942,"nodeType":"StructuredDocumentation","src":"1067:126:63","text":" @dev returns the revision number of the contract\n Needs to be defined in the inherited class as a constant."},"id":8951,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"1205:11:63","nodeType":"FunctionDefinition","overrides":{"id":8944,"nodeType":"OverrideSpecifier","overrides":[],"src":"1233:8:63"},"parameters":{"id":8943,"nodeType":"ParameterList","parameters":[],"src":"1216:2:63"},"returnParameters":{"id":8947,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8946,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8951,"src":"1251:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8945,"name":"uint256","nodeType":"ElementaryTypeName","src":"1251:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1250:9:63"},"scope":8997,"src":"1196:90:63","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8975,"nodeType":"Block","src":"1384:57:63","statements":[{"expression":{"id":8965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8963,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8933,"src":"1390:5:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8964,"name":"val","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8953,"src":"1398:3:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1390:11:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8966,"nodeType":"ExpressionStatement","src":"1390:11:63"},{"expression":{"id":8969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8967,"name":"text","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8935,"src":"1407:4:63","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8968,"name":"txt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8955,"src":"1414:3:63","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1407:10:63","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":8970,"nodeType":"ExpressionStatement","src":"1407:10:63"},{"expression":{"id":8973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8971,"name":"values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8938,"src":"1423:6:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8972,"name":"vals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8958,"src":"1432:4:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"1423:13:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":8974,"nodeType":"ExpressionStatement","src":"1423:13:63"}]},"functionSelector":"d31f8b6b","id":8976,"implemented":true,"kind":"function","modifiers":[{"id":8961,"kind":"modifierInvocation","modifierName":{"id":8960,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":10547,"src":"1372:11:63"},"nodeType":"ModifierInvocation","src":"1372:11:63"}],"name":"initialize","nameLocation":"1299:10:63","nodeType":"FunctionDefinition","parameters":{"id":8959,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8953,"mutability":"mutable","name":"val","nameLocation":"1318:3:63","nodeType":"VariableDeclaration","scope":8976,"src":"1310:11:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8952,"name":"uint256","nodeType":"ElementaryTypeName","src":"1310:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8955,"mutability":"mutable","name":"txt","nameLocation":"1337:3:63","nodeType":"VariableDeclaration","scope":8976,"src":"1323:17:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8954,"name":"string","nodeType":"ElementaryTypeName","src":"1323:6:63","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":8958,"mutability":"mutable","name":"vals","nameLocation":"1359:4:63","nodeType":"VariableDeclaration","scope":8976,"src":"1342:21:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":8956,"name":"uint256","nodeType":"ElementaryTypeName","src":"1342:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8957,"nodeType":"ArrayTypeName","src":"1342:9:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1309:55:63"},"returnParameters":{"id":8962,"nodeType":"ParameterList","parameters":[],"src":"1384:0:63"},"scope":8997,"src":"1290:151:63","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":8985,"nodeType":"Block","src":"1488:27:63","statements":[{"expression":{"id":8983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8981,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8933,"src":"1494:5:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8982,"name":"newValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8978,"src":"1502:8:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1494:16:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8984,"nodeType":"ExpressionStatement","src":"1494:16:63"}]},"functionSelector":"55241077","id":8986,"implemented":true,"kind":"function","modifiers":[],"name":"setValue","nameLocation":"1454:8:63","nodeType":"FunctionDefinition","parameters":{"id":8979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8978,"mutability":"mutable","name":"newValue","nameLocation":"1471:8:63","nodeType":"VariableDeclaration","scope":8986,"src":"1463:16:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8977,"name":"uint256","nodeType":"ElementaryTypeName","src":"1463:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1462:18:63"},"returnParameters":{"id":8980,"nodeType":"ParameterList","parameters":[],"src":"1488:0:63"},"scope":8997,"src":"1445:70:63","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":8995,"nodeType":"Block","src":"1570:27:63","statements":[{"expression":{"id":8993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8991,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8933,"src":"1576:5:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8992,"name":"newValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8988,"src":"1584:8:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1576:16:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8994,"nodeType":"ExpressionStatement","src":"1576:16:63"}]},"functionSelector":"5dd21610","id":8996,"implemented":true,"kind":"function","modifiers":[],"name":"setValueViaProxy","nameLocation":"1528:16:63","nodeType":"FunctionDefinition","parameters":{"id":8989,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8988,"mutability":"mutable","name":"newValue","nameLocation":"1553:8:63","nodeType":"VariableDeclaration","scope":8996,"src":"1545:16:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8987,"name":"uint256","nodeType":"ElementaryTypeName","src":"1545:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1544:18:63"},"returnParameters":{"id":8990,"nodeType":"ParameterList","parameters":[],"src":"1570:0:63"},"scope":8997,"src":"1519:78:63","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":9079,"src":"888:711:63","usedErrors":[]},{"abstract":false,"baseContracts":[{"baseName":{"id":8998,"name":"VersionedInitializable","nodeType":"IdentifierPath","referencedDeclaration":10573,"src":"1651:22:63"},"id":8999,"nodeType":"InheritanceSpecifier","src":"1651:22:63"}],"canonicalName":"MockInitializableFromConstructorImple","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":9037,"linearizedBaseContracts":[9037,10573],"name":"MockInitializableFromConstructorImple","nameLocation":"1610:37:63","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"3fa4f245","id":9001,"mutability":"mutable","name":"value","nameLocation":"1693:5:63","nodeType":"VariableDeclaration","scope":9037,"src":"1678:20:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9000,"name":"uint256","nodeType":"ElementaryTypeName","src":"1678:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":true,"functionSelector":"dde43cba","id":9004,"mutability":"constant","name":"REVISION","nameLocation":"1727:8:63","nodeType":"VariableDeclaration","scope":9037,"src":"1703:36:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9002,"name":"uint256","nodeType":"ElementaryTypeName","src":"1703:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":9003,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1738:1:63","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"public"},{"baseFunctions":[10553],"body":{"id":9013,"nodeType":"Block","src":"1937:26:63","statements":[{"expression":{"id":9011,"name":"REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9004,"src":"1950:8:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9010,"id":9012,"nodeType":"Return","src":"1943:15:63"}]},"documentation":{"id":9005,"nodeType":"StructuredDocumentation","src":"1744:126:63","text":" @dev returns the revision number of the contract\n Needs to be defined in the inherited class as a constant."},"id":9014,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"1882:11:63","nodeType":"FunctionDefinition","overrides":{"id":9007,"nodeType":"OverrideSpecifier","overrides":[],"src":"1910:8:63"},"parameters":{"id":9006,"nodeType":"ParameterList","parameters":[],"src":"1893:2:63"},"returnParameters":{"id":9010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9009,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9014,"src":"1928:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9008,"name":"uint256","nodeType":"ElementaryTypeName","src":"1928:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1927:9:63"},"scope":9037,"src":"1873:90:63","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9023,"nodeType":"Block","src":"1992:26:63","statements":[{"expression":{"arguments":[{"id":9020,"name":"val","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9016,"src":"2009:3:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9019,"name":"initialize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9036,"src":"1998:10:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":9021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1998:15:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9022,"nodeType":"ExpressionStatement","src":"1998:15:63"}]},"id":9024,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9016,"mutability":"mutable","name":"val","nameLocation":"1987:3:63","nodeType":"VariableDeclaration","scope":9024,"src":"1979:11:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9015,"name":"uint256","nodeType":"ElementaryTypeName","src":"1979:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1978:13:63"},"returnParameters":{"id":9018,"nodeType":"ParameterList","parameters":[],"src":"1992:0:63"},"scope":9037,"src":"1967:51:63","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":9035,"nodeType":"Block","src":"2074:22:63","statements":[{"expression":{"id":9033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9031,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9001,"src":"2080:5:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9032,"name":"val","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9026,"src":"2088:3:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2080:11:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9034,"nodeType":"ExpressionStatement","src":"2080:11:63"}]},"functionSelector":"fe4b84df","id":9036,"implemented":true,"kind":"function","modifiers":[{"id":9029,"kind":"modifierInvocation","modifierName":{"id":9028,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":10547,"src":"2062:11:63"},"nodeType":"ModifierInvocation","src":"2062:11:63"}],"name":"initialize","nameLocation":"2031:10:63","nodeType":"FunctionDefinition","parameters":{"id":9027,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9026,"mutability":"mutable","name":"val","nameLocation":"2050:3:63","nodeType":"VariableDeclaration","scope":9036,"src":"2042:11:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9025,"name":"uint256","nodeType":"ElementaryTypeName","src":"2042:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2041:13:63"},"returnParameters":{"id":9030,"nodeType":"ParameterList","parameters":[],"src":"2074:0:63"},"scope":9037,"src":"2022:74:63","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":9079,"src":"1601:497:63","usedErrors":[]},{"abstract":false,"baseContracts":[{"baseName":{"id":9038,"name":"VersionedInitializable","nodeType":"IdentifierPath","referencedDeclaration":10573,"src":"2144:22:63"},"id":9039,"nodeType":"InheritanceSpecifier","src":"2144:22:63"}],"canonicalName":"MockReentrantInitializableImple","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":9078,"linearizedBaseContracts":[9078,10573],"name":"MockReentrantInitializableImple","nameLocation":"2109:31:63","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"3fa4f245","id":9041,"mutability":"mutable","name":"value","nameLocation":"2186:5:63","nodeType":"VariableDeclaration","scope":9078,"src":"2171:20:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9040,"name":"uint256","nodeType":"ElementaryTypeName","src":"2171:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":true,"functionSelector":"dde43cba","id":9044,"mutability":"constant","name":"REVISION","nameLocation":"2220:8:63","nodeType":"VariableDeclaration","scope":9078,"src":"2196:36:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9042,"name":"uint256","nodeType":"ElementaryTypeName","src":"2196:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":9043,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2231:1:63","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"public"},{"baseFunctions":[10553],"body":{"id":9053,"nodeType":"Block","src":"2430:26:63","statements":[{"expression":{"id":9051,"name":"REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9044,"src":"2443:8:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9050,"id":9052,"nodeType":"Return","src":"2436:15:63"}]},"documentation":{"id":9045,"nodeType":"StructuredDocumentation","src":"2237:126:63","text":" @dev returns the revision number of the contract\n Needs to be defined in the inherited class as a constant."},"id":9054,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"2375:11:63","nodeType":"FunctionDefinition","overrides":{"id":9047,"nodeType":"OverrideSpecifier","overrides":[],"src":"2403:8:63"},"parameters":{"id":9046,"nodeType":"ParameterList","parameters":[],"src":"2386:2:63"},"returnParameters":{"id":9050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9049,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9054,"src":"2421:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9048,"name":"uint256","nodeType":"ElementaryTypeName","src":"2421:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2420:9:63"},"scope":9078,"src":"2366:90:63","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9076,"nodeType":"Block","src":"2512:78:63","statements":[{"expression":{"id":9063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9061,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9041,"src":"2518:5:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9062,"name":"val","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9056,"src":"2526:3:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2518:11:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9064,"nodeType":"ExpressionStatement","src":"2518:11:63"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9065,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9041,"src":"2539:5:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"32","id":9066,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2547:1:63","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"2539:9:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9075,"nodeType":"IfStatement","src":"2535:51:63","trueBody":{"id":9074,"nodeType":"Block","src":"2550:36:63","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9069,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9041,"src":"2569:5:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":9070,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2577:1:63","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2569:9:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9068,"name":"initialize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9077,"src":"2558:10:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":9072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2558:21:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9073,"nodeType":"ExpressionStatement","src":"2558:21:63"}]}}]},"functionSelector":"fe4b84df","id":9077,"implemented":true,"kind":"function","modifiers":[{"id":9059,"kind":"modifierInvocation","modifierName":{"id":9058,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":10547,"src":"2500:11:63"},"nodeType":"ModifierInvocation","src":"2500:11:63"}],"name":"initialize","nameLocation":"2469:10:63","nodeType":"FunctionDefinition","parameters":{"id":9057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9056,"mutability":"mutable","name":"val","nameLocation":"2488:3:63","nodeType":"VariableDeclaration","scope":9077,"src":"2480:11:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9055,"name":"uint256","nodeType":"ElementaryTypeName","src":"2480:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2479:13:63"},"returnParameters":{"id":9060,"nodeType":"ParameterList","parameters":[],"src":"2512:0:63"},"scope":9078,"src":"2460:130:63","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":9079,"src":"2100:492:63","usedErrors":[]}],"src":"37:2556:63"},"id":63},"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol","exportedSymbols":{"IPool":[4860],"MockStableDebtToken":[9106],"StableDebtToken":[27108]},"id":9107,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":9080,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:64"},{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol","file":"../../protocol/tokenization/StableDebtToken.sol","id":9082,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9107,"sourceUnit":27109,"src":"62:80:64","symbolAliases":[{"foreign":{"id":9081,"name":"StableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:15:64","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":9084,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9107,"sourceUnit":4861,"src":"143:49:64","symbolAliases":[{"foreign":{"id":9083,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"151:5:64","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":9085,"name":"StableDebtToken","nodeType":"IdentifierPath","referencedDeclaration":27108,"src":"226:15:64"},"id":9086,"nodeType":"InheritanceSpecifier","src":"226:15:64"}],"canonicalName":"MockStableDebtToken","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":9106,"linearizedBaseContracts":[9106,27108,6109,4221,28349,1464,1442,27722,4002,748,27822,10573],"name":"MockStableDebtToken","nameLocation":"203:19:64","nodeType":"ContractDefinition","nodes":[{"body":{"id":9095,"nodeType":"Block","src":"292:2:64","statements":[]},"id":9096,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":9092,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9089,"src":"286:4:64","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"id":9093,"kind":"baseConstructorSpecifier","modifierName":{"id":9091,"name":"StableDebtToken","nodeType":"IdentifierPath","referencedDeclaration":27108,"src":"270:15:64"},"nodeType":"ModifierInvocation","src":"270:21:64"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9089,"mutability":"mutable","name":"pool","nameLocation":"264:4:64","nodeType":"VariableDeclaration","scope":9096,"src":"258:10:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":9088,"nodeType":"UserDefinedTypeName","pathNode":{"id":9087,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"258:5:64"},"referencedDeclaration":4860,"src":"258:5:64","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"}],"src":"257:12:64"},"returnParameters":{"id":9094,"nodeType":"ParameterList","parameters":[],"src":"292:0:64"},"scope":9106,"src":"246:48:64","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[26184],"body":{"id":9104,"nodeType":"Block","src":"362:21:64","statements":[{"expression":{"hexValue":"307833","id":9102,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"375:3:64","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"0x3"},"functionReturnParameters":9101,"id":9103,"nodeType":"Return","src":"368:10:64"}]},"id":9105,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"307:11:64","nodeType":"FunctionDefinition","overrides":{"id":9098,"nodeType":"OverrideSpecifier","overrides":[],"src":"335:8:64"},"parameters":{"id":9097,"nodeType":"ParameterList","parameters":[],"src":"318:2:64"},"returnParameters":{"id":9101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9100,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9105,"src":"353:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9099,"name":"uint256","nodeType":"ElementaryTypeName","src":"353:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"352:9:64"},"scope":9106,"src":"298:85:64","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":9107,"src":"194:191:64","usedErrors":[]}],"src":"37:349:64"},"id":64},"@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol","exportedSymbols":{"IPool":[4860],"MockVariableDebtToken":[9134],"VariableDebtToken":[27490]},"id":9135,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":9108,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:65"},{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol","file":"../../protocol/tokenization/VariableDebtToken.sol","id":9110,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9135,"sourceUnit":27491,"src":"62:84:65","symbolAliases":[{"foreign":{"id":9109,"name":"VariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:17:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":9112,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9135,"sourceUnit":4861,"src":"147:49:65","symbolAliases":[{"foreign":{"id":9111,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"155:5:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":9113,"name":"VariableDebtToken","nodeType":"IdentifierPath","referencedDeclaration":27490,"src":"232:17:65"},"id":9114,"nodeType":"InheritanceSpecifier","src":"232:17:65"}],"canonicalName":"MockVariableDebtToken","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":9134,"linearizedBaseContracts":[9134,27490,6155,4221,28966,5975,28499,28349,1464,1442,27722,4002,748,27822,10573],"name":"MockVariableDebtToken","nameLocation":"207:21:65","nodeType":"ContractDefinition","nodes":[{"body":{"id":9123,"nodeType":"Block","src":"302:2:65","statements":[]},"id":9124,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":9120,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9117,"src":"296:4:65","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"id":9121,"kind":"baseConstructorSpecifier","modifierName":{"id":9119,"name":"VariableDebtToken","nodeType":"IdentifierPath","referencedDeclaration":27490,"src":"278:17:65"},"nodeType":"ModifierInvocation","src":"278:23:65"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9118,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9117,"mutability":"mutable","name":"pool","nameLocation":"272:4:65","nodeType":"VariableDeclaration","scope":9124,"src":"266:10:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":9116,"nodeType":"UserDefinedTypeName","pathNode":{"id":9115,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"266:5:65"},"referencedDeclaration":4860,"src":"266:5:65","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"}],"src":"265:12:65"},"returnParameters":{"id":9122,"nodeType":"ParameterList","parameters":[],"src":"302:0:65"},"scope":9134,"src":"254:50:65","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[27249],"body":{"id":9132,"nodeType":"Block","src":"372:21:65","statements":[{"expression":{"hexValue":"307833","id":9130,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"385:3:65","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"0x3"},"functionReturnParameters":9129,"id":9131,"nodeType":"Return","src":"378:10:65"}]},"id":9133,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"317:11:65","nodeType":"FunctionDefinition","overrides":{"id":9126,"nodeType":"OverrideSpecifier","overrides":[],"src":"345:8:65"},"parameters":{"id":9125,"nodeType":"ParameterList","parameters":[],"src":"328:2:65"},"returnParameters":{"id":9129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9128,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9133,"src":"363:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9127,"name":"uint256","nodeType":"ElementaryTypeName","src":"363:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"362:9:65"},"scope":9134,"src":"308:85:65","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":9135,"src":"198:197:65","usedErrors":[]}],"src":"37:359:65"},"id":65},"@aave/core-v3/contracts/protocol/configuration/ACLManager.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/configuration/ACLManager.sol","exportedSymbols":{"ACLManager":[9487],"AccessControl":[425],"Errors":[12642],"IACLManager":[3718],"IPoolAddressesProvider":[5069]},"id":9488,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":9136,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:66"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/AccessControl.sol","file":"../../dependencies/openzeppelin/contracts/AccessControl.sol","id":9138,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9488,"sourceUnit":426,"src":"63:90:66","symbolAliases":[{"foreign":{"id":9137,"name":"AccessControl","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:13:66","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":9140,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9488,"sourceUnit":5070,"src":"154:83:66","symbolAliases":[{"foreign":{"id":9139,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"162:22:66","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IACLManager.sol","file":"../../interfaces/IACLManager.sol","id":9142,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9488,"sourceUnit":3719,"src":"238:61:66","symbolAliases":[{"foreign":{"id":9141,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"src":"246:11:66","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol","file":"../libraries/helpers/Errors.sol","id":9144,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9488,"sourceUnit":12643,"src":"300:55:66","symbolAliases":[{"foreign":{"id":9143,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"308:6:66","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":9146,"name":"AccessControl","nodeType":"IdentifierPath","referencedDeclaration":425,"src":"512:13:66"},"id":9147,"nodeType":"InheritanceSpecifier","src":"512:13:66"},{"baseName":{"id":9148,"name":"IACLManager","nodeType":"IdentifierPath","referencedDeclaration":3718,"src":"527:11:66"},"id":9149,"nodeType":"InheritanceSpecifier","src":"527:11:66"}],"canonicalName":"ACLManager","contractDependencies":[],"contractKind":"contract","documentation":{"id":9145,"nodeType":"StructuredDocumentation","src":"357:131:66","text":" @title ACLManager\n @author Aave\n @notice Access Control List Manager. Main registry of system roles and permissions."},"fullyImplemented":true,"id":9487,"linearizedBaseContracts":[9487,3718,425,772,1364,1352,748],"name":"ACLManager","nameLocation":"498:10:66","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[3559],"constant":true,"functionSelector":"b8f6dba7","id":9155,"mutability":"constant","name":"POOL_ADMIN_ROLE","nameLocation":"576:15:66","nodeType":"VariableDeclaration","overrides":{"id":9151,"nodeType":"OverrideSpecifier","overrides":[],"src":"567:8:66"},"scope":9487,"src":"543:74:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9150,"name":"bytes32","nodeType":"ElementaryTypeName","src":"543:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"504f4f4c5f41444d494e","id":9153,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"604:12:66","typeDescriptions":{"typeIdentifier":"t_stringliteral_12ad05bde78c5ab75238ce885307f96ecd482bb402ef831f99e7018a0f169b7b","typeString":"literal_string \"POOL_ADMIN\""},"value":"POOL_ADMIN"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_12ad05bde78c5ab75238ce885307f96ecd482bb402ef831f99e7018a0f169b7b","typeString":"literal_string \"POOL_ADMIN\""}],"id":9152,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"594:9:66","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":9154,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"594:23:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"baseFunctions":[3565],"constant":true,"functionSelector":"6e76fc8f","id":9161,"mutability":"constant","name":"EMERGENCY_ADMIN_ROLE","nameLocation":"654:20:66","nodeType":"VariableDeclaration","overrides":{"id":9157,"nodeType":"OverrideSpecifier","overrides":[],"src":"645:8:66"},"scope":9487,"src":"621:84:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9156,"name":"bytes32","nodeType":"ElementaryTypeName","src":"621:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"454d455247454e43595f41444d494e","id":9159,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"687:17:66","typeDescriptions":{"typeIdentifier":"t_stringliteral_5c91514091af31f62f596a314af7d5be40146b2f2355969392f055e12e0982fb","typeString":"literal_string \"EMERGENCY_ADMIN\""},"value":"EMERGENCY_ADMIN"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_5c91514091af31f62f596a314af7d5be40146b2f2355969392f055e12e0982fb","typeString":"literal_string \"EMERGENCY_ADMIN\""}],"id":9158,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"677:9:66","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":9160,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"677:28:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"baseFunctions":[3571],"constant":true,"functionSelector":"4f16b425","id":9167,"mutability":"constant","name":"RISK_ADMIN_ROLE","nameLocation":"742:15:66","nodeType":"VariableDeclaration","overrides":{"id":9163,"nodeType":"OverrideSpecifier","overrides":[],"src":"733:8:66"},"scope":9487,"src":"709:74:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9162,"name":"bytes32","nodeType":"ElementaryTypeName","src":"709:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"5249534b5f41444d494e","id":9165,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"770:12:66","typeDescriptions":{"typeIdentifier":"t_stringliteral_8aa855a911518ecfbe5bc3088c8f3dda7badf130faaf8ace33fdc33828e18167","typeString":"literal_string \"RISK_ADMIN\""},"value":"RISK_ADMIN"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_8aa855a911518ecfbe5bc3088c8f3dda7badf130faaf8ace33fdc33828e18167","typeString":"literal_string \"RISK_ADMIN\""}],"id":9164,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"760:9:66","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":9166,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"760:23:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"baseFunctions":[3577],"constant":true,"functionSelector":"5577b7a9","id":9173,"mutability":"constant","name":"FLASH_BORROWER_ROLE","nameLocation":"820:19:66","nodeType":"VariableDeclaration","overrides":{"id":9169,"nodeType":"OverrideSpecifier","overrides":[],"src":"811:8:66"},"scope":9487,"src":"787:82:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9168,"name":"bytes32","nodeType":"ElementaryTypeName","src":"787:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"464c4153485f424f52524f574552","id":9171,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"852:16:66","typeDescriptions":{"typeIdentifier":"t_stringliteral_939b8dfb57ecef2aea54a93a15e86768b9d4089f1ba61c245e6ec980695f4ca4","typeString":"literal_string \"FLASH_BORROWER\""},"value":"FLASH_BORROWER"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_939b8dfb57ecef2aea54a93a15e86768b9d4089f1ba61c245e6ec980695f4ca4","typeString":"literal_string \"FLASH_BORROWER\""}],"id":9170,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"842:9:66","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":9172,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"842:27:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"baseFunctions":[3583],"constant":true,"functionSelector":"b5bfddea","id":9179,"mutability":"constant","name":"BRIDGE_ROLE","nameLocation":"906:11:66","nodeType":"VariableDeclaration","overrides":{"id":9175,"nodeType":"OverrideSpecifier","overrides":[],"src":"897:8:66"},"scope":9487,"src":"873:66:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9174,"name":"bytes32","nodeType":"ElementaryTypeName","src":"873:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"425249444745","id":9177,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"930:8:66","typeDescriptions":{"typeIdentifier":"t_stringliteral_08fb31c3e81624356c3314088aa971b73bcc82d22bc3e3b184b4593077ae3278","typeString":"literal_string \"BRIDGE\""},"value":"BRIDGE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_08fb31c3e81624356c3314088aa971b73bcc82d22bc3e3b184b4593077ae3278","typeString":"literal_string \"BRIDGE\""}],"id":9176,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"920:9:66","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":9178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"920:19:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"baseFunctions":[3589],"constant":true,"functionSelector":"78bb0a43","id":9185,"mutability":"constant","name":"ASSET_LISTING_ADMIN_ROLE","nameLocation":"976:24:66","nodeType":"VariableDeclaration","overrides":{"id":9181,"nodeType":"OverrideSpecifier","overrides":[],"src":"967:8:66"},"scope":9487,"src":"943:92:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9180,"name":"bytes32","nodeType":"ElementaryTypeName","src":"943:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"41535345545f4c495354494e475f41444d494e","id":9183,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1013:21:66","typeDescriptions":{"typeIdentifier":"t_stringliteral_19c860a63258efbd0ecb7d55c626237bf5c2044c26c073390b74f0c13c857433","typeString":"literal_string \"ASSET_LISTING_ADMIN\""},"value":"ASSET_LISTING_ADMIN"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_19c860a63258efbd0ecb7d55c626237bf5c2044c26c073390b74f0c13c857433","typeString":"literal_string \"ASSET_LISTING_ADMIN\""}],"id":9182,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1003:9:66","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":9184,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1003:32:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"baseFunctions":[3553],"constant":false,"functionSelector":"0542975c","id":9188,"mutability":"immutable","name":"ADDRESSES_PROVIDER","nameLocation":"1080:18:66","nodeType":"VariableDeclaration","scope":9487,"src":"1040:58:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":9187,"nodeType":"UserDefinedTypeName","pathNode":{"id":9186,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"1040:22:66"},"referencedDeclaration":5069,"src":"1040:22:66","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"public"},{"body":{"id":9221,"nodeType":"Block","src":"1326:203:66","statements":[{"expression":{"id":9197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9195,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9188,"src":"1332:18:66","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9196,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9192,"src":"1353:8:66","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"src":"1332:29:66","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":9198,"nodeType":"ExpressionStatement","src":"1332:29:66"},{"assignments":[9200],"declarations":[{"constant":false,"id":9200,"mutability":"mutable","name":"aclAdmin","nameLocation":"1375:8:66","nodeType":"VariableDeclaration","scope":9221,"src":"1367:16:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9199,"name":"address","nodeType":"ElementaryTypeName","src":"1367:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9204,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9201,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9192,"src":"1386:8:66","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":9202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLAdmin","nodeType":"MemberAccess","referencedDeclaration":5038,"src":"1386:20:66","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":9203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1386:22:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1367:41:66"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9206,"name":"aclAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9200,"src":"1422:8:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":9209,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1442:1:66","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":9208,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1434:7:66","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9207,"name":"address","nodeType":"ElementaryTypeName","src":"1434:7:66","typeDescriptions":{}}},"id":9210,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1434:10:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1422:22:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":9212,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"1446:6:66","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":9213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ACL_ADMIN_CANNOT_BE_ZERO","nodeType":"MemberAccess","referencedDeclaration":12593,"src":"1446:31:66","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":9205,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1414:7:66","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":9214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1414:64:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9215,"nodeType":"ExpressionStatement","src":"1414:64:66"},{"expression":{"arguments":[{"id":9217,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":146,"src":"1495:18:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9218,"name":"aclAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9200,"src":"1515:8:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9216,"name":"_setupRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":335,"src":"1484:10:66","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":9219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1484:40:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9220,"nodeType":"ExpressionStatement","src":"1484:40:66"}]},"documentation":{"id":9189,"nodeType":"StructuredDocumentation","src":"1103:175:66","text":" @dev Constructor\n @dev The ACL admin should be initialized at the addressesProvider beforehand\n @param provider The address of the PoolAddressesProvider"},"id":9222,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9192,"mutability":"mutable","name":"provider","nameLocation":"1316:8:66","nodeType":"VariableDeclaration","scope":9222,"src":"1293:31:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":9191,"nodeType":"UserDefinedTypeName","pathNode":{"id":9190,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"1293:22:66"},"referencedDeclaration":5069,"src":"1293:22:66","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"1292:33:66"},"returnParameters":{"id":9194,"nodeType":"ParameterList","parameters":[],"src":"1326:0:66"},"scope":9487,"src":"1281:248:66","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[3597],"body":{"id":9239,"nodeType":"Block","src":"1677:41:66","statements":[{"expression":{"arguments":[{"id":9235,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9225,"src":"1697:4:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9236,"name":"adminRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9227,"src":"1703:9:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9234,"name":"_setRoleAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":363,"src":"1683:13:66","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (bytes32,bytes32)"}},"id":9237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1683:30:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9238,"nodeType":"ExpressionStatement","src":"1683:30:66"}]},"documentation":{"id":9223,"nodeType":"StructuredDocumentation","src":"1533:27:66","text":"@inheritdoc IACLManager"},"functionSelector":"1e4e0091","id":9240,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":9231,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":146,"src":"1657:18:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":9232,"kind":"modifierInvocation","modifierName":{"id":9230,"name":"onlyRole","nodeType":"IdentifierPath","referencedDeclaration":159,"src":"1648:8:66"},"nodeType":"ModifierInvocation","src":"1648:28:66"}],"name":"setRoleAdmin","nameLocation":"1572:12:66","nodeType":"FunctionDefinition","overrides":{"id":9229,"nodeType":"OverrideSpecifier","overrides":[],"src":"1639:8:66"},"parameters":{"id":9228,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9225,"mutability":"mutable","name":"role","nameLocation":"1598:4:66","nodeType":"VariableDeclaration","scope":9240,"src":"1590:12:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9224,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1590:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":9227,"mutability":"mutable","name":"adminRole","nameLocation":"1616:9:66","nodeType":"VariableDeclaration","scope":9240,"src":"1608:17:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9226,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1608:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1584:45:66"},"returnParameters":{"id":9233,"nodeType":"ParameterList","parameters":[],"src":"1677:0:66"},"scope":9487,"src":"1563:155:66","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3603],"body":{"id":9252,"nodeType":"Block","src":"1807:44:66","statements":[{"expression":{"arguments":[{"id":9248,"name":"POOL_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9155,"src":"1823:15:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9249,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9243,"src":"1840:5:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9247,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":278,"src":"1813:9:66","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":9250,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1813:33:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9251,"nodeType":"ExpressionStatement","src":"1813:33:66"}]},"documentation":{"id":9241,"nodeType":"StructuredDocumentation","src":"1722:27:66","text":"@inheritdoc IACLManager"},"functionSelector":"22650caf","id":9253,"implemented":true,"kind":"function","modifiers":[],"name":"addPoolAdmin","nameLocation":"1761:12:66","nodeType":"FunctionDefinition","overrides":{"id":9245,"nodeType":"OverrideSpecifier","overrides":[],"src":"1798:8:66"},"parameters":{"id":9244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9243,"mutability":"mutable","name":"admin","nameLocation":"1782:5:66","nodeType":"VariableDeclaration","scope":9253,"src":"1774:13:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9242,"name":"address","nodeType":"ElementaryTypeName","src":"1774:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1773:15:66"},"returnParameters":{"id":9246,"nodeType":"ParameterList","parameters":[],"src":"1807:0:66"},"scope":9487,"src":"1752:99:66","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3609],"body":{"id":9265,"nodeType":"Block","src":"1943:45:66","statements":[{"expression":{"arguments":[{"id":9261,"name":"POOL_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9155,"src":"1960:15:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9262,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9256,"src":"1977:5:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9260,"name":"revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"1949:10:66","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":9263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1949:34:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9264,"nodeType":"ExpressionStatement","src":"1949:34:66"}]},"documentation":{"id":9254,"nodeType":"StructuredDocumentation","src":"1855:27:66","text":"@inheritdoc IACLManager"},"functionSelector":"f83695cb","id":9266,"implemented":true,"kind":"function","modifiers":[],"name":"removePoolAdmin","nameLocation":"1894:15:66","nodeType":"FunctionDefinition","overrides":{"id":9258,"nodeType":"OverrideSpecifier","overrides":[],"src":"1934:8:66"},"parameters":{"id":9257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9256,"mutability":"mutable","name":"admin","nameLocation":"1918:5:66","nodeType":"VariableDeclaration","scope":9266,"src":"1910:13:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9255,"name":"address","nodeType":"ElementaryTypeName","src":"1910:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1909:15:66"},"returnParameters":{"id":9259,"nodeType":"ParameterList","parameters":[],"src":"1943:0:66"},"scope":9487,"src":"1885:103:66","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3617],"body":{"id":9280,"nodeType":"Block","src":"2096:49:66","statements":[{"expression":{"arguments":[{"id":9276,"name":"POOL_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9155,"src":"2117:15:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9277,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9269,"src":"2134:5:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9275,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":200,"src":"2109:7:66","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":9278,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2109:31:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":9274,"id":9279,"nodeType":"Return","src":"2102:38:66"}]},"documentation":{"id":9267,"nodeType":"StructuredDocumentation","src":"1992:27:66","text":"@inheritdoc IACLManager"},"functionSelector":"7be53ca1","id":9281,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolAdmin","nameLocation":"2031:11:66","nodeType":"FunctionDefinition","overrides":{"id":9271,"nodeType":"OverrideSpecifier","overrides":[],"src":"2072:8:66"},"parameters":{"id":9270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9269,"mutability":"mutable","name":"admin","nameLocation":"2051:5:66","nodeType":"VariableDeclaration","scope":9281,"src":"2043:13:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9268,"name":"address","nodeType":"ElementaryTypeName","src":"2043:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2042:15:66"},"returnParameters":{"id":9274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9273,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9281,"src":"2090:4:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9272,"name":"bool","nodeType":"ElementaryTypeName","src":"2090:4:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2089:6:66"},"scope":9487,"src":"2022:123:66","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3623],"body":{"id":9293,"nodeType":"Block","src":"2239:49:66","statements":[{"expression":{"arguments":[{"id":9289,"name":"EMERGENCY_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9161,"src":"2255:20:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9290,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9284,"src":"2277:5:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9288,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":278,"src":"2245:9:66","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":9291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2245:38:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9292,"nodeType":"ExpressionStatement","src":"2245:38:66"}]},"documentation":{"id":9282,"nodeType":"StructuredDocumentation","src":"2149:27:66","text":"@inheritdoc IACLManager"},"functionSelector":"179efb09","id":9294,"implemented":true,"kind":"function","modifiers":[],"name":"addEmergencyAdmin","nameLocation":"2188:17:66","nodeType":"FunctionDefinition","overrides":{"id":9286,"nodeType":"OverrideSpecifier","overrides":[],"src":"2230:8:66"},"parameters":{"id":9285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9284,"mutability":"mutable","name":"admin","nameLocation":"2214:5:66","nodeType":"VariableDeclaration","scope":9294,"src":"2206:13:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9283,"name":"address","nodeType":"ElementaryTypeName","src":"2206:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2205:15:66"},"returnParameters":{"id":9287,"nodeType":"ParameterList","parameters":[],"src":"2239:0:66"},"scope":9487,"src":"2179:109:66","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3629],"body":{"id":9306,"nodeType":"Block","src":"2385:50:66","statements":[{"expression":{"arguments":[{"id":9302,"name":"EMERGENCY_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9161,"src":"2402:20:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9303,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9297,"src":"2424:5:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9301,"name":"revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"2391:10:66","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":9304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2391:39:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9305,"nodeType":"ExpressionStatement","src":"2391:39:66"}]},"documentation":{"id":9295,"nodeType":"StructuredDocumentation","src":"2292:27:66","text":"@inheritdoc IACLManager"},"functionSelector":"7a9a93f4","id":9307,"implemented":true,"kind":"function","modifiers":[],"name":"removeEmergencyAdmin","nameLocation":"2331:20:66","nodeType":"FunctionDefinition","overrides":{"id":9299,"nodeType":"OverrideSpecifier","overrides":[],"src":"2376:8:66"},"parameters":{"id":9298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9297,"mutability":"mutable","name":"admin","nameLocation":"2360:5:66","nodeType":"VariableDeclaration","scope":9307,"src":"2352:13:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9296,"name":"address","nodeType":"ElementaryTypeName","src":"2352:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2351:15:66"},"returnParameters":{"id":9300,"nodeType":"ParameterList","parameters":[],"src":"2385:0:66"},"scope":9487,"src":"2322:113:66","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3637],"body":{"id":9321,"nodeType":"Block","src":"2548:54:66","statements":[{"expression":{"arguments":[{"id":9317,"name":"EMERGENCY_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9161,"src":"2569:20:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9318,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9310,"src":"2591:5:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9316,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":200,"src":"2561:7:66","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":9319,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2561:36:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":9315,"id":9320,"nodeType":"Return","src":"2554:43:66"}]},"documentation":{"id":9308,"nodeType":"StructuredDocumentation","src":"2439:27:66","text":"@inheritdoc IACLManager"},"functionSelector":"2500f2b6","id":9322,"implemented":true,"kind":"function","modifiers":[],"name":"isEmergencyAdmin","nameLocation":"2478:16:66","nodeType":"FunctionDefinition","overrides":{"id":9312,"nodeType":"OverrideSpecifier","overrides":[],"src":"2524:8:66"},"parameters":{"id":9311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9310,"mutability":"mutable","name":"admin","nameLocation":"2503:5:66","nodeType":"VariableDeclaration","scope":9322,"src":"2495:13:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9309,"name":"address","nodeType":"ElementaryTypeName","src":"2495:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2494:15:66"},"returnParameters":{"id":9315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9314,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9322,"src":"2542:4:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9313,"name":"bool","nodeType":"ElementaryTypeName","src":"2542:4:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2541:6:66"},"scope":9487,"src":"2469:133:66","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3643],"body":{"id":9334,"nodeType":"Block","src":"2691:44:66","statements":[{"expression":{"arguments":[{"id":9330,"name":"RISK_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9167,"src":"2707:15:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9331,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9325,"src":"2724:5:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9329,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":278,"src":"2697:9:66","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":9332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2697:33:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9333,"nodeType":"ExpressionStatement","src":"2697:33:66"}]},"documentation":{"id":9323,"nodeType":"StructuredDocumentation","src":"2606:27:66","text":"@inheritdoc IACLManager"},"functionSelector":"5b9a94e4","id":9335,"implemented":true,"kind":"function","modifiers":[],"name":"addRiskAdmin","nameLocation":"2645:12:66","nodeType":"FunctionDefinition","overrides":{"id":9327,"nodeType":"OverrideSpecifier","overrides":[],"src":"2682:8:66"},"parameters":{"id":9326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9325,"mutability":"mutable","name":"admin","nameLocation":"2666:5:66","nodeType":"VariableDeclaration","scope":9335,"src":"2658:13:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9324,"name":"address","nodeType":"ElementaryTypeName","src":"2658:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2657:15:66"},"returnParameters":{"id":9328,"nodeType":"ParameterList","parameters":[],"src":"2691:0:66"},"scope":9487,"src":"2636:99:66","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3649],"body":{"id":9347,"nodeType":"Block","src":"2827:45:66","statements":[{"expression":{"arguments":[{"id":9343,"name":"RISK_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9167,"src":"2844:15:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9344,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9338,"src":"2861:5:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9342,"name":"revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"2833:10:66","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":9345,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2833:34:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9346,"nodeType":"ExpressionStatement","src":"2833:34:66"}]},"documentation":{"id":9336,"nodeType":"StructuredDocumentation","src":"2739:27:66","text":"@inheritdoc IACLManager"},"functionSelector":"3c5a08e5","id":9348,"implemented":true,"kind":"function","modifiers":[],"name":"removeRiskAdmin","nameLocation":"2778:15:66","nodeType":"FunctionDefinition","overrides":{"id":9340,"nodeType":"OverrideSpecifier","overrides":[],"src":"2818:8:66"},"parameters":{"id":9339,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9338,"mutability":"mutable","name":"admin","nameLocation":"2802:5:66","nodeType":"VariableDeclaration","scope":9348,"src":"2794:13:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9337,"name":"address","nodeType":"ElementaryTypeName","src":"2794:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2793:15:66"},"returnParameters":{"id":9341,"nodeType":"ParameterList","parameters":[],"src":"2827:0:66"},"scope":9487,"src":"2769:103:66","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3657],"body":{"id":9362,"nodeType":"Block","src":"2980:49:66","statements":[{"expression":{"arguments":[{"id":9358,"name":"RISK_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9167,"src":"3001:15:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9359,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9351,"src":"3018:5:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9357,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":200,"src":"2993:7:66","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":9360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2993:31:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":9356,"id":9361,"nodeType":"Return","src":"2986:38:66"}]},"documentation":{"id":9349,"nodeType":"StructuredDocumentation","src":"2876:27:66","text":"@inheritdoc IACLManager"},"functionSelector":"674b5e4d","id":9363,"implemented":true,"kind":"function","modifiers":[],"name":"isRiskAdmin","nameLocation":"2915:11:66","nodeType":"FunctionDefinition","overrides":{"id":9353,"nodeType":"OverrideSpecifier","overrides":[],"src":"2956:8:66"},"parameters":{"id":9352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9351,"mutability":"mutable","name":"admin","nameLocation":"2935:5:66","nodeType":"VariableDeclaration","scope":9363,"src":"2927:13:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9350,"name":"address","nodeType":"ElementaryTypeName","src":"2927:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2926:15:66"},"returnParameters":{"id":9356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9355,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9363,"src":"2974:4:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9354,"name":"bool","nodeType":"ElementaryTypeName","src":"2974:4:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2973:6:66"},"scope":9487,"src":"2906:123:66","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3663],"body":{"id":9375,"nodeType":"Block","src":"3125:51:66","statements":[{"expression":{"arguments":[{"id":9371,"name":"FLASH_BORROWER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9173,"src":"3141:19:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9372,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9366,"src":"3162:8:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9370,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":278,"src":"3131:9:66","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":9373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3131:40:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9374,"nodeType":"ExpressionStatement","src":"3131:40:66"}]},"documentation":{"id":9364,"nodeType":"StructuredDocumentation","src":"3033:27:66","text":"@inheritdoc IACLManager"},"functionSelector":"9ac9d80b","id":9376,"implemented":true,"kind":"function","modifiers":[],"name":"addFlashBorrower","nameLocation":"3072:16:66","nodeType":"FunctionDefinition","overrides":{"id":9368,"nodeType":"OverrideSpecifier","overrides":[],"src":"3116:8:66"},"parameters":{"id":9367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9366,"mutability":"mutable","name":"borrower","nameLocation":"3097:8:66","nodeType":"VariableDeclaration","scope":9376,"src":"3089:16:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9365,"name":"address","nodeType":"ElementaryTypeName","src":"3089:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3088:18:66"},"returnParameters":{"id":9369,"nodeType":"ParameterList","parameters":[],"src":"3125:0:66"},"scope":9487,"src":"3063:113:66","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3669],"body":{"id":9388,"nodeType":"Block","src":"3275:52:66","statements":[{"expression":{"arguments":[{"id":9384,"name":"FLASH_BORROWER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9173,"src":"3292:19:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9385,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9379,"src":"3313:8:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9383,"name":"revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"3281:10:66","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":9386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3281:41:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9387,"nodeType":"ExpressionStatement","src":"3281:41:66"}]},"documentation":{"id":9377,"nodeType":"StructuredDocumentation","src":"3180:27:66","text":"@inheritdoc IACLManager"},"functionSelector":"253cf980","id":9389,"implemented":true,"kind":"function","modifiers":[],"name":"removeFlashBorrower","nameLocation":"3219:19:66","nodeType":"FunctionDefinition","overrides":{"id":9381,"nodeType":"OverrideSpecifier","overrides":[],"src":"3266:8:66"},"parameters":{"id":9380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9379,"mutability":"mutable","name":"borrower","nameLocation":"3247:8:66","nodeType":"VariableDeclaration","scope":9389,"src":"3239:16:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9378,"name":"address","nodeType":"ElementaryTypeName","src":"3239:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3238:18:66"},"returnParameters":{"id":9382,"nodeType":"ParameterList","parameters":[],"src":"3275:0:66"},"scope":9487,"src":"3210:117:66","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3677],"body":{"id":9403,"nodeType":"Block","src":"3442:56:66","statements":[{"expression":{"arguments":[{"id":9399,"name":"FLASH_BORROWER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9173,"src":"3463:19:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9400,"name":"borrower","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9392,"src":"3484:8:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9398,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":200,"src":"3455:7:66","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":9401,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3455:38:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":9397,"id":9402,"nodeType":"Return","src":"3448:45:66"}]},"documentation":{"id":9390,"nodeType":"StructuredDocumentation","src":"3331:27:66","text":"@inheritdoc IACLManager"},"functionSelector":"fa50f297","id":9404,"implemented":true,"kind":"function","modifiers":[],"name":"isFlashBorrower","nameLocation":"3370:15:66","nodeType":"FunctionDefinition","overrides":{"id":9394,"nodeType":"OverrideSpecifier","overrides":[],"src":"3418:8:66"},"parameters":{"id":9393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9392,"mutability":"mutable","name":"borrower","nameLocation":"3394:8:66","nodeType":"VariableDeclaration","scope":9404,"src":"3386:16:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9391,"name":"address","nodeType":"ElementaryTypeName","src":"3386:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3385:18:66"},"returnParameters":{"id":9397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9396,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9404,"src":"3436:4:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9395,"name":"bool","nodeType":"ElementaryTypeName","src":"3436:4:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3435:6:66"},"scope":9487,"src":"3361:137:66","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3683],"body":{"id":9416,"nodeType":"Block","src":"3585:41:66","statements":[{"expression":{"arguments":[{"id":9412,"name":"BRIDGE_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9179,"src":"3601:11:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9413,"name":"bridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9407,"src":"3614:6:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9411,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":278,"src":"3591:9:66","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":9414,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3591:30:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9415,"nodeType":"ExpressionStatement","src":"3591:30:66"}]},"documentation":{"id":9405,"nodeType":"StructuredDocumentation","src":"3502:27:66","text":"@inheritdoc IACLManager"},"functionSelector":"9712fdf8","id":9417,"implemented":true,"kind":"function","modifiers":[],"name":"addBridge","nameLocation":"3541:9:66","nodeType":"FunctionDefinition","overrides":{"id":9409,"nodeType":"OverrideSpecifier","overrides":[],"src":"3576:8:66"},"parameters":{"id":9408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9407,"mutability":"mutable","name":"bridge","nameLocation":"3559:6:66","nodeType":"VariableDeclaration","scope":9417,"src":"3551:14:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9406,"name":"address","nodeType":"ElementaryTypeName","src":"3551:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3550:16:66"},"returnParameters":{"id":9410,"nodeType":"ParameterList","parameters":[],"src":"3585:0:66"},"scope":9487,"src":"3532:94:66","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3689],"body":{"id":9429,"nodeType":"Block","src":"3716:42:66","statements":[{"expression":{"arguments":[{"id":9425,"name":"BRIDGE_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9179,"src":"3733:11:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9426,"name":"bridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9420,"src":"3746:6:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9424,"name":"revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"3722:10:66","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":9427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3722:31:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9428,"nodeType":"ExpressionStatement","src":"3722:31:66"}]},"documentation":{"id":9418,"nodeType":"StructuredDocumentation","src":"3630:27:66","text":"@inheritdoc IACLManager"},"functionSelector":"04df017d","id":9430,"implemented":true,"kind":"function","modifiers":[],"name":"removeBridge","nameLocation":"3669:12:66","nodeType":"FunctionDefinition","overrides":{"id":9422,"nodeType":"OverrideSpecifier","overrides":[],"src":"3707:8:66"},"parameters":{"id":9421,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9420,"mutability":"mutable","name":"bridge","nameLocation":"3690:6:66","nodeType":"VariableDeclaration","scope":9430,"src":"3682:14:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9419,"name":"address","nodeType":"ElementaryTypeName","src":"3682:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3681:16:66"},"returnParameters":{"id":9423,"nodeType":"ParameterList","parameters":[],"src":"3716:0:66"},"scope":9487,"src":"3660:98:66","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3697],"body":{"id":9444,"nodeType":"Block","src":"3864:46:66","statements":[{"expression":{"arguments":[{"id":9440,"name":"BRIDGE_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9179,"src":"3885:11:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9441,"name":"bridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9433,"src":"3898:6:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9439,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":200,"src":"3877:7:66","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":9442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3877:28:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":9438,"id":9443,"nodeType":"Return","src":"3870:35:66"}]},"documentation":{"id":9431,"nodeType":"StructuredDocumentation","src":"3762:27:66","text":"@inheritdoc IACLManager"},"functionSelector":"726600ce","id":9445,"implemented":true,"kind":"function","modifiers":[],"name":"isBridge","nameLocation":"3801:8:66","nodeType":"FunctionDefinition","overrides":{"id":9435,"nodeType":"OverrideSpecifier","overrides":[],"src":"3840:8:66"},"parameters":{"id":9434,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9433,"mutability":"mutable","name":"bridge","nameLocation":"3818:6:66","nodeType":"VariableDeclaration","scope":9445,"src":"3810:14:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9432,"name":"address","nodeType":"ElementaryTypeName","src":"3810:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3809:16:66"},"returnParameters":{"id":9438,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9437,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9445,"src":"3858:4:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9436,"name":"bool","nodeType":"ElementaryTypeName","src":"3858:4:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3857:6:66"},"scope":9487,"src":"3792:118:66","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3703],"body":{"id":9457,"nodeType":"Block","src":"4007:53:66","statements":[{"expression":{"arguments":[{"id":9453,"name":"ASSET_LISTING_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9185,"src":"4023:24:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9454,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9448,"src":"4049:5:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9452,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":278,"src":"4013:9:66","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":9455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4013:42:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9456,"nodeType":"ExpressionStatement","src":"4013:42:66"}]},"documentation":{"id":9446,"nodeType":"StructuredDocumentation","src":"3914:27:66","text":"@inheritdoc IACLManager"},"functionSelector":"9a2b96f7","id":9458,"implemented":true,"kind":"function","modifiers":[],"name":"addAssetListingAdmin","nameLocation":"3953:20:66","nodeType":"FunctionDefinition","overrides":{"id":9450,"nodeType":"OverrideSpecifier","overrides":[],"src":"3998:8:66"},"parameters":{"id":9449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9448,"mutability":"mutable","name":"admin","nameLocation":"3982:5:66","nodeType":"VariableDeclaration","scope":9458,"src":"3974:13:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9447,"name":"address","nodeType":"ElementaryTypeName","src":"3974:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3973:15:66"},"returnParameters":{"id":9451,"nodeType":"ParameterList","parameters":[],"src":"4007:0:66"},"scope":9487,"src":"3944:116:66","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3709],"body":{"id":9470,"nodeType":"Block","src":"4160:54:66","statements":[{"expression":{"arguments":[{"id":9466,"name":"ASSET_LISTING_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9185,"src":"4177:24:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9467,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9461,"src":"4203:5:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9465,"name":"revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":298,"src":"4166:10:66","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":9468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4166:43:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9469,"nodeType":"ExpressionStatement","src":"4166:43:66"}]},"documentation":{"id":9459,"nodeType":"StructuredDocumentation","src":"4064:27:66","text":"@inheritdoc IACLManager"},"functionSelector":"a21bce15","id":9471,"implemented":true,"kind":"function","modifiers":[],"name":"removeAssetListingAdmin","nameLocation":"4103:23:66","nodeType":"FunctionDefinition","overrides":{"id":9463,"nodeType":"OverrideSpecifier","overrides":[],"src":"4151:8:66"},"parameters":{"id":9462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9461,"mutability":"mutable","name":"admin","nameLocation":"4135:5:66","nodeType":"VariableDeclaration","scope":9471,"src":"4127:13:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9460,"name":"address","nodeType":"ElementaryTypeName","src":"4127:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4126:15:66"},"returnParameters":{"id":9464,"nodeType":"ParameterList","parameters":[],"src":"4160:0:66"},"scope":9487,"src":"4094:120:66","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3717],"body":{"id":9485,"nodeType":"Block","src":"4330:58:66","statements":[{"expression":{"arguments":[{"id":9481,"name":"ASSET_LISTING_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9185,"src":"4351:24:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9482,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9474,"src":"4377:5:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9480,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":200,"src":"4343:7:66","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":9483,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4343:40:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":9479,"id":9484,"nodeType":"Return","src":"4336:47:66"}]},"documentation":{"id":9472,"nodeType":"StructuredDocumentation","src":"4218:27:66","text":"@inheritdoc IACLManager"},"functionSelector":"13ee32e0","id":9486,"implemented":true,"kind":"function","modifiers":[],"name":"isAssetListingAdmin","nameLocation":"4257:19:66","nodeType":"FunctionDefinition","overrides":{"id":9476,"nodeType":"OverrideSpecifier","overrides":[],"src":"4306:8:66"},"parameters":{"id":9475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9474,"mutability":"mutable","name":"admin","nameLocation":"4285:5:66","nodeType":"VariableDeclaration","scope":9486,"src":"4277:13:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9473,"name":"address","nodeType":"ElementaryTypeName","src":"4277:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4276:15:66"},"returnParameters":{"id":9479,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9478,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9486,"src":"4324:4:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9477,"name":"bool","nodeType":"ElementaryTypeName","src":"4324:4:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4323:6:66"},"scope":9487,"src":"4248:140:66","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":9488,"src":"489:3901:66","usedErrors":[]}],"src":"37:4354:66"},"id":66},"@aave/core-v3/contracts/protocol/configuration/PoolAddressesProvider.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/configuration/PoolAddressesProvider.sol","exportedSymbols":{"IPoolAddressesProvider":[5069],"InitializableImmutableAdminUpgradeabilityProxy":[10492],"Ownable":[1573],"PoolAddressesProvider":[10072]},"id":10073,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":9489,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:67"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol","file":"../../dependencies/openzeppelin/contracts/Ownable.sol","id":9491,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10073,"sourceUnit":1574,"src":"63:78:67","symbolAliases":[{"foreign":{"id":9490,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:7:67","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":9493,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10073,"sourceUnit":5070,"src":"142:83:67","symbolAliases":[{"foreign":{"id":9492,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"150:22:67","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol","file":"../libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol","id":9495,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10073,"sourceUnit":10493,"src":"226:147:67","symbolAliases":[{"foreign":{"id":9494,"name":"InitializableImmutableAdminUpgradeabilityProxy","nodeType":"Identifier","overloadedDeclarations":[],"src":"234:46:67","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":9497,"name":"Ownable","nodeType":"IdentifierPath","referencedDeclaration":1573,"src":"706:7:67"},"id":9498,"nodeType":"InheritanceSpecifier","src":"706:7:67"},{"baseName":{"id":9499,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"715:22:67"},"id":9500,"nodeType":"InheritanceSpecifier","src":"715:22:67"}],"canonicalName":"PoolAddressesProvider","contractDependencies":[10492],"contractKind":"contract","documentation":{"id":9496,"nodeType":"StructuredDocumentation","src":"375:296:67","text":" @title PoolAddressesProvider\n @author Aave\n @notice Main registry of addresses part of or connected to the protocol, including permissioned roles\n @dev Acts as factory of proxies and admin of those, so with right to change its implementations\n @dev Owned by the Aave Governance"},"fullyImplemented":true,"id":10072,"linearizedBaseContracts":[10072,5069,1573,748],"name":"PoolAddressesProvider","nameLocation":"681:21:67","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":9502,"mutability":"mutable","name":"_marketId","nameLocation":"792:9:67","nodeType":"VariableDeclaration","scope":10072,"src":"777:24:67","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":9501,"name":"string","nodeType":"ElementaryTypeName","src":"777:6:67","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":9506,"mutability":"mutable","name":"_addresses","nameLocation":"909:10:67","nodeType":"VariableDeclaration","scope":10072,"src":"873:46:67","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"},"typeName":{"id":9505,"keyType":{"id":9503,"name":"bytes32","nodeType":"ElementaryTypeName","src":"881:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"873:27:67","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"},"valueType":{"id":9504,"name":"address","nodeType":"ElementaryTypeName","src":"892:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"private"},{"constant":true,"id":9509,"mutability":"constant","name":"POOL","nameLocation":"971:4:67","nodeType":"VariableDeclaration","scope":10072,"src":"946:38:67","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9507,"name":"bytes32","nodeType":"ElementaryTypeName","src":"946:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"504f4f4c","id":9508,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"978:6:67","typeDescriptions":{"typeIdentifier":"t_stringliteral_5d5c2d2522b7f6ec8d1c86f44956b9ecd4376b1842cd263d54a5368aa149486d","typeString":"literal_string \"POOL\""},"value":"POOL"},"visibility":"private"},{"constant":true,"id":9512,"mutability":"constant","name":"POOL_CONFIGURATOR","nameLocation":"1013:17:67","nodeType":"VariableDeclaration","scope":10072,"src":"988:64:67","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9510,"name":"bytes32","nodeType":"ElementaryTypeName","src":"988:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"504f4f4c5f434f4e464947555241544f52","id":9511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1033:19:67","typeDescriptions":{"typeIdentifier":"t_stringliteral_7ac30f54e4a5d88ecad45a0103446836c9967d1e8d22f2fbe70930162fb0624b","typeString":"literal_string \"POOL_CONFIGURATOR\""},"value":"POOL_CONFIGURATOR"},"visibility":"private"},{"constant":true,"id":9515,"mutability":"constant","name":"PRICE_ORACLE","nameLocation":"1081:12:67","nodeType":"VariableDeclaration","scope":10072,"src":"1056:54:67","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9513,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1056:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"50524943455f4f5241434c45","id":9514,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1096:14:67","typeDescriptions":{"typeIdentifier":"t_stringliteral_dd24a0f121e5ab7c3e97c63eaaf859e0b46792c3e0edfd86e2b3ad50f63011d8","typeString":"literal_string \"PRICE_ORACLE\""},"value":"PRICE_ORACLE"},"visibility":"private"},{"constant":true,"id":9518,"mutability":"constant","name":"ACL_MANAGER","nameLocation":"1139:11:67","nodeType":"VariableDeclaration","scope":10072,"src":"1114:52:67","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9516,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1114:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"41434c5f4d414e41474552","id":9517,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1153:13:67","typeDescriptions":{"typeIdentifier":"t_stringliteral_c287a3aa39c31ece62d3fa9ff394eec87eda2b6600ae0d39b3edebe7593fce72","typeString":"literal_string \"ACL_MANAGER\""},"value":"ACL_MANAGER"},"visibility":"private"},{"constant":true,"id":9521,"mutability":"constant","name":"ACL_ADMIN","nameLocation":"1195:9:67","nodeType":"VariableDeclaration","scope":10072,"src":"1170:48:67","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9519,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1170:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"41434c5f41444d494e","id":9520,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1207:11:67","typeDescriptions":{"typeIdentifier":"t_stringliteral_7b712d922b13ad4caade18fe1173c3b60a52cf9139e1553859c7067333972244","typeString":"literal_string \"ACL_ADMIN\""},"value":"ACL_ADMIN"},"visibility":"private"},{"constant":true,"id":9524,"mutability":"constant","name":"PRICE_ORACLE_SENTINEL","nameLocation":"1247:21:67","nodeType":"VariableDeclaration","scope":10072,"src":"1222:72:67","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9522,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1222:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"50524943455f4f5241434c455f53454e54494e454c","id":9523,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1271:23:67","typeDescriptions":{"typeIdentifier":"t_stringliteral_850bfd4b118fcb6d899cca9a9fb41471772c200f1c36c2493c98d3bc7a305d65","typeString":"literal_string \"PRICE_ORACLE_SENTINEL\""},"value":"PRICE_ORACLE_SENTINEL"},"visibility":"private"},{"constant":true,"id":9527,"mutability":"constant","name":"DATA_PROVIDER","nameLocation":"1323:13:67","nodeType":"VariableDeclaration","scope":10072,"src":"1298:56:67","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9525,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1298:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"444154415f50524f5649444552","id":9526,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1339:15:67","typeDescriptions":{"typeIdentifier":"t_stringliteral_5164d5c7193030abda56ab2da6b1ecfb83373a1a97075675ab8548ca2be633d9","typeString":"literal_string \"DATA_PROVIDER\""},"value":"DATA_PROVIDER"},"visibility":"private"},{"body":{"id":9543,"nodeType":"Block","src":"1550:63:67","statements":[{"expression":{"arguments":[{"id":9536,"name":"marketId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9530,"src":"1569:8:67","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":9535,"name":"_setMarketId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10029,"src":"1556:12:67","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":9537,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1556:22:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9538,"nodeType":"ExpressionStatement","src":"1556:22:67"},{"expression":{"arguments":[{"id":9540,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9532,"src":"1602:5:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9539,"name":"transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1572,"src":"1584:17:67","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":9541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1584:24:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9542,"nodeType":"ExpressionStatement","src":"1584:24:67"}]},"documentation":{"id":9528,"nodeType":"StructuredDocumentation","src":"1359:137:67","text":" @dev Constructor.\n @param marketId The identifier of the market.\n @param owner The owner address of this contract."},"id":9544,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9533,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9530,"mutability":"mutable","name":"marketId","nameLocation":"1525:8:67","nodeType":"VariableDeclaration","scope":9544,"src":"1511:22:67","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9529,"name":"string","nodeType":"ElementaryTypeName","src":"1511:6:67","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":9532,"mutability":"mutable","name":"owner","nameLocation":"1543:5:67","nodeType":"VariableDeclaration","scope":9544,"src":"1535:13:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9531,"name":"address","nodeType":"ElementaryTypeName","src":"1535:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1510:39:67"},"returnParameters":{"id":9534,"nodeType":"ParameterList","parameters":[],"src":"1550:0:67"},"scope":10072,"src":"1499:114:67","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[4954],"body":{"id":9553,"nodeType":"Block","src":"1728:27:67","statements":[{"expression":{"id":9551,"name":"_marketId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9502,"src":"1741:9:67","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":9550,"id":9552,"nodeType":"Return","src":"1734:16:67"}]},"documentation":{"id":9545,"nodeType":"StructuredDocumentation","src":"1617:38:67","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"568ef470","id":9554,"implemented":true,"kind":"function","modifiers":[],"name":"getMarketId","nameLocation":"1667:11:67","nodeType":"FunctionDefinition","overrides":{"id":9547,"nodeType":"OverrideSpecifier","overrides":[],"src":"1695:8:67"},"parameters":{"id":9546,"nodeType":"ParameterList","parameters":[],"src":"1678:2:67"},"returnParameters":{"id":9550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9549,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9554,"src":"1713:13:67","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9548,"name":"string","nodeType":"ElementaryTypeName","src":"1713:6:67","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1712:15:67"},"scope":10072,"src":"1658:97:67","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4960],"body":{"id":9567,"nodeType":"Block","src":"1876:36:67","statements":[{"expression":{"arguments":[{"id":9564,"name":"newMarketId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9557,"src":"1895:11:67","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":9563,"name":"_setMarketId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10029,"src":"1882:12:67","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":9565,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1882:25:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9566,"nodeType":"ExpressionStatement","src":"1882:25:67"}]},"documentation":{"id":9555,"nodeType":"StructuredDocumentation","src":"1759:38:67","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"f67b1847","id":9568,"implemented":true,"kind":"function","modifiers":[{"id":9561,"kind":"modifierInvocation","modifierName":{"id":9560,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"1866:9:67"},"nodeType":"ModifierInvocation","src":"1866:9:67"}],"name":"setMarketId","nameLocation":"1809:11:67","nodeType":"FunctionDefinition","overrides":{"id":9559,"nodeType":"OverrideSpecifier","overrides":[],"src":"1857:8:67"},"parameters":{"id":9558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9557,"mutability":"mutable","name":"newMarketId","nameLocation":"1835:11:67","nodeType":"VariableDeclaration","scope":9568,"src":"1821:25:67","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9556,"name":"string","nodeType":"ElementaryTypeName","src":"1821:6:67","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1820:27:67"},"returnParameters":{"id":9562,"nodeType":"ParameterList","parameters":[],"src":"1876:0:67"},"scope":10072,"src":"1800:112:67","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4968],"body":{"id":9581,"nodeType":"Block","src":"2028:32:67","statements":[{"expression":{"baseExpression":{"id":9577,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9506,"src":"2041:10:67","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":9579,"indexExpression":{"id":9578,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9571,"src":"2052:2:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2041:14:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9576,"id":9580,"nodeType":"Return","src":"2034:21:67"}]},"documentation":{"id":9569,"nodeType":"StructuredDocumentation","src":"1916:38:67","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"21f8a721","id":9582,"implemented":true,"kind":"function","modifiers":[],"name":"getAddress","nameLocation":"1966:10:67","nodeType":"FunctionDefinition","overrides":{"id":9573,"nodeType":"OverrideSpecifier","overrides":[],"src":"2001:8:67"},"parameters":{"id":9572,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9571,"mutability":"mutable","name":"id","nameLocation":"1985:2:67","nodeType":"VariableDeclaration","scope":9582,"src":"1977:10:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9570,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1977:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1976:12:67"},"returnParameters":{"id":9576,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9575,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9582,"src":"2019:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9574,"name":"address","nodeType":"ElementaryTypeName","src":"2019:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2018:9:67"},"scope":10072,"src":"1957:103:67","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[4984],"body":{"id":9611,"nodeType":"Block","src":"2185:128:67","statements":[{"assignments":[9594],"declarations":[{"constant":false,"id":9594,"mutability":"mutable","name":"oldAddress","nameLocation":"2199:10:67","nodeType":"VariableDeclaration","scope":9611,"src":"2191:18:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9593,"name":"address","nodeType":"ElementaryTypeName","src":"2191:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9598,"initialValue":{"baseExpression":{"id":9595,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9506,"src":"2212:10:67","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":9597,"indexExpression":{"id":9596,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9585,"src":"2223:2:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2212:14:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2191:35:67"},{"expression":{"id":9603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":9599,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9506,"src":"2232:10:67","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":9601,"indexExpression":{"id":9600,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9585,"src":"2243:2:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2232:14:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9602,"name":"newAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9587,"src":"2249:10:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2232:27:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9604,"nodeType":"ExpressionStatement","src":"2232:27:67"},{"eventCall":{"arguments":[{"id":9606,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9585,"src":"2281:2:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9607,"name":"oldAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9594,"src":"2285:10:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9608,"name":"newAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9587,"src":"2297:10:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9605,"name":"AddressSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4937,"src":"2270:10:67","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$","typeString":"function (bytes32,address,address)"}},"id":9609,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2270:38:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9610,"nodeType":"EmitStatement","src":"2265:43:67"}]},"documentation":{"id":9583,"nodeType":"StructuredDocumentation","src":"2064:38:67","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"ca446dd9","id":9612,"implemented":true,"kind":"function","modifiers":[{"id":9591,"kind":"modifierInvocation","modifierName":{"id":9590,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"2175:9:67"},"nodeType":"ModifierInvocation","src":"2175:9:67"}],"name":"setAddress","nameLocation":"2114:10:67","nodeType":"FunctionDefinition","overrides":{"id":9589,"nodeType":"OverrideSpecifier","overrides":[],"src":"2166:8:67"},"parameters":{"id":9588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9585,"mutability":"mutable","name":"id","nameLocation":"2133:2:67","nodeType":"VariableDeclaration","scope":9612,"src":"2125:10:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9584,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2125:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":9587,"mutability":"mutable","name":"newAddress","nameLocation":"2145:10:67","nodeType":"VariableDeclaration","scope":9612,"src":"2137:18:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9586,"name":"address","nodeType":"ElementaryTypeName","src":"2137:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2124:32:67"},"returnParameters":{"id":9592,"nodeType":"ParameterList","parameters":[],"src":"2185:0:67"},"scope":10072,"src":"2105:208:67","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4976],"body":{"id":9647,"nodeType":"Block","src":"2471:261:67","statements":[{"assignments":[9624],"declarations":[{"constant":false,"id":9624,"mutability":"mutable","name":"proxyAddress","nameLocation":"2485:12:67","nodeType":"VariableDeclaration","scope":9647,"src":"2477:20:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9623,"name":"address","nodeType":"ElementaryTypeName","src":"2477:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9628,"initialValue":{"baseExpression":{"id":9625,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9506,"src":"2500:10:67","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":9627,"indexExpression":{"id":9626,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9615,"src":"2511:2:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2500:14:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2477:37:67"},{"assignments":[9630],"declarations":[{"constant":false,"id":9630,"mutability":"mutable","name":"oldImplementationAddress","nameLocation":"2528:24:67","nodeType":"VariableDeclaration","scope":9647,"src":"2520:32:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9629,"name":"address","nodeType":"ElementaryTypeName","src":"2520:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9634,"initialValue":{"arguments":[{"id":9632,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9615,"src":"2579:2:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9631,"name":"_getProxyImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10071,"src":"2555:23:67","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) returns (address)"}},"id":9633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2555:27:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2520:62:67"},{"expression":{"arguments":[{"id":9636,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9615,"src":"2600:2:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9637,"name":"newImplementationAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9617,"src":"2604:24:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9635,"name":"_updateImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10009,"src":"2588:11:67","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":9638,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2588:41:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9639,"nodeType":"ExpressionStatement","src":"2588:41:67"},{"eventCall":{"arguments":[{"id":9641,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9615,"src":"2658:2:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9642,"name":"proxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9624,"src":"2662:12:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9643,"name":"oldImplementationAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9630,"src":"2676:24:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9644,"name":"newImplementationAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9617,"src":"2702:24:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9640,"name":"AddressSetAsProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4948,"src":"2640:17:67","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (bytes32,address,address,address)"}},"id":9645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2640:87:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9646,"nodeType":"EmitStatement","src":"2635:92:67"}]},"documentation":{"id":9613,"nodeType":"StructuredDocumentation","src":"2317:38:67","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"5dcc528c","id":9648,"implemented":true,"kind":"function","modifiers":[{"id":9621,"kind":"modifierInvocation","modifierName":{"id":9620,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"2461:9:67"},"nodeType":"ModifierInvocation","src":"2461:9:67"}],"name":"setAddressAsProxy","nameLocation":"2367:17:67","nodeType":"FunctionDefinition","overrides":{"id":9619,"nodeType":"OverrideSpecifier","overrides":[],"src":"2452:8:67"},"parameters":{"id":9618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9615,"mutability":"mutable","name":"id","nameLocation":"2398:2:67","nodeType":"VariableDeclaration","scope":9648,"src":"2390:10:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9614,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2390:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":9617,"mutability":"mutable","name":"newImplementationAddress","nameLocation":"2414:24:67","nodeType":"VariableDeclaration","scope":9648,"src":"2406:32:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9616,"name":"address","nodeType":"ElementaryTypeName","src":"2406:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2384:58:67"},"returnParameters":{"id":9622,"nodeType":"ParameterList","parameters":[],"src":"2471:0:67"},"scope":10072,"src":"2358:374:67","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4990],"body":{"id":9659,"nodeType":"Block","src":"2837:34:67","statements":[{"expression":{"arguments":[{"id":9656,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9509,"src":"2861:4:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9655,"name":"getAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9582,"src":"2850:10:67","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) view returns (address)"}},"id":9657,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2850:16:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9654,"id":9658,"nodeType":"Return","src":"2843:23:67"}]},"documentation":{"id":9649,"nodeType":"StructuredDocumentation","src":"2736:38:67","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"026b1d5f","id":9660,"implemented":true,"kind":"function","modifiers":[],"name":"getPool","nameLocation":"2786:7:67","nodeType":"FunctionDefinition","overrides":{"id":9651,"nodeType":"OverrideSpecifier","overrides":[],"src":"2810:8:67"},"parameters":{"id":9650,"nodeType":"ParameterList","parameters":[],"src":"2793:2:67"},"returnParameters":{"id":9654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9653,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9660,"src":"2828:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9652,"name":"address","nodeType":"ElementaryTypeName","src":"2828:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2827:9:67"},"scope":10072,"src":"2777:94:67","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4996],"body":{"id":9685,"nodeType":"Block","src":"2986:146:67","statements":[{"assignments":[9670],"declarations":[{"constant":false,"id":9670,"mutability":"mutable","name":"oldPoolImpl","nameLocation":"3000:11:67","nodeType":"VariableDeclaration","scope":9685,"src":"2992:19:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9669,"name":"address","nodeType":"ElementaryTypeName","src":"2992:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9674,"initialValue":{"arguments":[{"id":9672,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9509,"src":"3038:4:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9671,"name":"_getProxyImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10071,"src":"3014:23:67","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) returns (address)"}},"id":9673,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3014:29:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2992:51:67"},{"expression":{"arguments":[{"id":9676,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9509,"src":"3061:4:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9677,"name":"newPoolImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9663,"src":"3067:11:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9675,"name":"_updateImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10009,"src":"3049:11:67","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":9678,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3049:30:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9679,"nodeType":"ExpressionStatement","src":"3049:30:67"},{"eventCall":{"arguments":[{"id":9681,"name":"oldPoolImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9670,"src":"3102:11:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9682,"name":"newPoolImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9663,"src":"3115:11:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9680,"name":"PoolUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4877,"src":"3090:11:67","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":9683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3090:37:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9684,"nodeType":"EmitStatement","src":"3085:42:67"}]},"documentation":{"id":9661,"nodeType":"StructuredDocumentation","src":"2875:38:67","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"a1564406","id":9686,"implemented":true,"kind":"function","modifiers":[{"id":9667,"kind":"modifierInvocation","modifierName":{"id":9666,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"2976:9:67"},"nodeType":"ModifierInvocation","src":"2976:9:67"}],"name":"setPoolImpl","nameLocation":"2925:11:67","nodeType":"FunctionDefinition","overrides":{"id":9665,"nodeType":"OverrideSpecifier","overrides":[],"src":"2967:8:67"},"parameters":{"id":9664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9663,"mutability":"mutable","name":"newPoolImpl","nameLocation":"2945:11:67","nodeType":"VariableDeclaration","scope":9686,"src":"2937:19:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9662,"name":"address","nodeType":"ElementaryTypeName","src":"2937:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2936:21:67"},"returnParameters":{"id":9668,"nodeType":"ParameterList","parameters":[],"src":"2986:0:67"},"scope":10072,"src":"2916:216:67","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5002],"body":{"id":9697,"nodeType":"Block","src":"3249:47:67","statements":[{"expression":{"arguments":[{"id":9694,"name":"POOL_CONFIGURATOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9512,"src":"3273:17:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9693,"name":"getAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9582,"src":"3262:10:67","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) view returns (address)"}},"id":9695,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3262:29:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9692,"id":9696,"nodeType":"Return","src":"3255:36:67"}]},"documentation":{"id":9687,"nodeType":"StructuredDocumentation","src":"3136:38:67","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"631adfca","id":9698,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolConfigurator","nameLocation":"3186:19:67","nodeType":"FunctionDefinition","overrides":{"id":9689,"nodeType":"OverrideSpecifier","overrides":[],"src":"3222:8:67"},"parameters":{"id":9688,"nodeType":"ParameterList","parameters":[],"src":"3205:2:67"},"returnParameters":{"id":9692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9691,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9698,"src":"3240:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9690,"name":"address","nodeType":"ElementaryTypeName","src":"3240:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3239:9:67"},"scope":10072,"src":"3177:119:67","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5008],"body":{"id":9723,"nodeType":"Block","src":"3435:232:67","statements":[{"assignments":[9708],"declarations":[{"constant":false,"id":9708,"mutability":"mutable","name":"oldPoolConfiguratorImpl","nameLocation":"3449:23:67","nodeType":"VariableDeclaration","scope":9723,"src":"3441:31:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9707,"name":"address","nodeType":"ElementaryTypeName","src":"3441:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9712,"initialValue":{"arguments":[{"id":9710,"name":"POOL_CONFIGURATOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9512,"src":"3499:17:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9709,"name":"_getProxyImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10071,"src":"3475:23:67","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) returns (address)"}},"id":9711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3475:42:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3441:76:67"},{"expression":{"arguments":[{"id":9714,"name":"POOL_CONFIGURATOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9512,"src":"3535:17:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9715,"name":"newPoolConfiguratorImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9701,"src":"3554:23:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9713,"name":"_updateImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10009,"src":"3523:11:67","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":9716,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3523:55:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9717,"nodeType":"ExpressionStatement","src":"3523:55:67"},{"eventCall":{"arguments":[{"id":9719,"name":"oldPoolConfiguratorImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9708,"src":"3613:23:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9720,"name":"newPoolConfiguratorImpl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9701,"src":"3638:23:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9718,"name":"PoolConfiguratorUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4884,"src":"3589:23:67","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":9721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3589:73:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9722,"nodeType":"EmitStatement","src":"3584:78:67"}]},"documentation":{"id":9699,"nodeType":"StructuredDocumentation","src":"3300:38:67","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"e4ca28b7","id":9724,"implemented":true,"kind":"function","modifiers":[{"id":9705,"kind":"modifierInvocation","modifierName":{"id":9704,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"3425:9:67"},"nodeType":"ModifierInvocation","src":"3425:9:67"}],"name":"setPoolConfiguratorImpl","nameLocation":"3350:23:67","nodeType":"FunctionDefinition","overrides":{"id":9703,"nodeType":"OverrideSpecifier","overrides":[],"src":"3416:8:67"},"parameters":{"id":9702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9701,"mutability":"mutable","name":"newPoolConfiguratorImpl","nameLocation":"3382:23:67","nodeType":"VariableDeclaration","scope":9724,"src":"3374:31:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9700,"name":"address","nodeType":"ElementaryTypeName","src":"3374:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3373:33:67"},"returnParameters":{"id":9706,"nodeType":"ParameterList","parameters":[],"src":"3435:0:67"},"scope":10072,"src":"3341:326:67","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5014],"body":{"id":9735,"nodeType":"Block","src":"3779:42:67","statements":[{"expression":{"arguments":[{"id":9732,"name":"PRICE_ORACLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9515,"src":"3803:12:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9731,"name":"getAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9582,"src":"3792:10:67","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) view returns (address)"}},"id":9733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3792:24:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9730,"id":9734,"nodeType":"Return","src":"3785:31:67"}]},"documentation":{"id":9725,"nodeType":"StructuredDocumentation","src":"3671:38:67","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"fca513a8","id":9736,"implemented":true,"kind":"function","modifiers":[],"name":"getPriceOracle","nameLocation":"3721:14:67","nodeType":"FunctionDefinition","overrides":{"id":9727,"nodeType":"OverrideSpecifier","overrides":[],"src":"3752:8:67"},"parameters":{"id":9726,"nodeType":"ParameterList","parameters":[],"src":"3735:2:67"},"returnParameters":{"id":9730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9729,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9736,"src":"3770:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9728,"name":"address","nodeType":"ElementaryTypeName","src":"3770:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3769:9:67"},"scope":10072,"src":"3712:109:67","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5020],"body":{"id":9762,"nodeType":"Block","src":"3942:168:67","statements":[{"assignments":[9746],"declarations":[{"constant":false,"id":9746,"mutability":"mutable","name":"oldPriceOracle","nameLocation":"3956:14:67","nodeType":"VariableDeclaration","scope":9762,"src":"3948:22:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9745,"name":"address","nodeType":"ElementaryTypeName","src":"3948:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9750,"initialValue":{"baseExpression":{"id":9747,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9506,"src":"3973:10:67","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":9749,"indexExpression":{"id":9748,"name":"PRICE_ORACLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9515,"src":"3984:12:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3973:24:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3948:49:67"},{"expression":{"id":9755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":9751,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9506,"src":"4003:10:67","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":9753,"indexExpression":{"id":9752,"name":"PRICE_ORACLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9515,"src":"4014:12:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4003:24:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9754,"name":"newPriceOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9739,"src":"4030:14:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4003:41:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9756,"nodeType":"ExpressionStatement","src":"4003:41:67"},{"eventCall":{"arguments":[{"id":9758,"name":"oldPriceOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9746,"src":"4074:14:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9759,"name":"newPriceOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9739,"src":"4090:14:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9757,"name":"PriceOracleUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4891,"src":"4055:18:67","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":9760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4055:50:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9761,"nodeType":"EmitStatement","src":"4050:55:67"}]},"documentation":{"id":9737,"nodeType":"StructuredDocumentation","src":"3825:38:67","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"530e784f","id":9763,"implemented":true,"kind":"function","modifiers":[{"id":9743,"kind":"modifierInvocation","modifierName":{"id":9742,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"3932:9:67"},"nodeType":"ModifierInvocation","src":"3932:9:67"}],"name":"setPriceOracle","nameLocation":"3875:14:67","nodeType":"FunctionDefinition","overrides":{"id":9741,"nodeType":"OverrideSpecifier","overrides":[],"src":"3923:8:67"},"parameters":{"id":9740,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9739,"mutability":"mutable","name":"newPriceOracle","nameLocation":"3898:14:67","nodeType":"VariableDeclaration","scope":9763,"src":"3890:22:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9738,"name":"address","nodeType":"ElementaryTypeName","src":"3890:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3889:24:67"},"returnParameters":{"id":9744,"nodeType":"ParameterList","parameters":[],"src":"3942:0:67"},"scope":10072,"src":"3866:244:67","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5026],"body":{"id":9774,"nodeType":"Block","src":"4221:41:67","statements":[{"expression":{"arguments":[{"id":9771,"name":"ACL_MANAGER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9518,"src":"4245:11:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9770,"name":"getAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9582,"src":"4234:10:67","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) view returns (address)"}},"id":9772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4234:23:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9769,"id":9773,"nodeType":"Return","src":"4227:30:67"}]},"documentation":{"id":9764,"nodeType":"StructuredDocumentation","src":"4114:38:67","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"707cd716","id":9775,"implemented":true,"kind":"function","modifiers":[],"name":"getACLManager","nameLocation":"4164:13:67","nodeType":"FunctionDefinition","overrides":{"id":9766,"nodeType":"OverrideSpecifier","overrides":[],"src":"4194:8:67"},"parameters":{"id":9765,"nodeType":"ParameterList","parameters":[],"src":"4177:2:67"},"returnParameters":{"id":9769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9768,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9775,"src":"4212:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9767,"name":"address","nodeType":"ElementaryTypeName","src":"4212:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4211:9:67"},"scope":10072,"src":"4155:107:67","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5032],"body":{"id":9801,"nodeType":"Block","src":"4381:161:67","statements":[{"assignments":[9785],"declarations":[{"constant":false,"id":9785,"mutability":"mutable","name":"oldAclManager","nameLocation":"4395:13:67","nodeType":"VariableDeclaration","scope":9801,"src":"4387:21:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9784,"name":"address","nodeType":"ElementaryTypeName","src":"4387:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9789,"initialValue":{"baseExpression":{"id":9786,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9506,"src":"4411:10:67","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":9788,"indexExpression":{"id":9787,"name":"ACL_MANAGER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9518,"src":"4422:11:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4411:23:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4387:47:67"},{"expression":{"id":9794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":9790,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9506,"src":"4440:10:67","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":9792,"indexExpression":{"id":9791,"name":"ACL_MANAGER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9518,"src":"4451:11:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4440:23:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9793,"name":"newAclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9778,"src":"4466:13:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4440:39:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9795,"nodeType":"ExpressionStatement","src":"4440:39:67"},{"eventCall":{"arguments":[{"id":9797,"name":"oldAclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9785,"src":"4508:13:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9798,"name":"newAclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9778,"src":"4523:13:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9796,"name":"ACLManagerUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4898,"src":"4490:17:67","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":9799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4490:47:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9800,"nodeType":"EmitStatement","src":"4485:52:67"}]},"documentation":{"id":9776,"nodeType":"StructuredDocumentation","src":"4266:38:67","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"ed301ca9","id":9802,"implemented":true,"kind":"function","modifiers":[{"id":9782,"kind":"modifierInvocation","modifierName":{"id":9781,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"4371:9:67"},"nodeType":"ModifierInvocation","src":"4371:9:67"}],"name":"setACLManager","nameLocation":"4316:13:67","nodeType":"FunctionDefinition","overrides":{"id":9780,"nodeType":"OverrideSpecifier","overrides":[],"src":"4362:8:67"},"parameters":{"id":9779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9778,"mutability":"mutable","name":"newAclManager","nameLocation":"4338:13:67","nodeType":"VariableDeclaration","scope":9802,"src":"4330:21:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9777,"name":"address","nodeType":"ElementaryTypeName","src":"4330:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4329:23:67"},"returnParameters":{"id":9783,"nodeType":"ParameterList","parameters":[],"src":"4381:0:67"},"scope":10072,"src":"4307:235:67","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5038],"body":{"id":9813,"nodeType":"Block","src":"4651:39:67","statements":[{"expression":{"arguments":[{"id":9810,"name":"ACL_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9521,"src":"4675:9:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9809,"name":"getAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9582,"src":"4664:10:67","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) view returns (address)"}},"id":9811,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4664:21:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9808,"id":9812,"nodeType":"Return","src":"4657:28:67"}]},"documentation":{"id":9803,"nodeType":"StructuredDocumentation","src":"4546:38:67","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"0e67178c","id":9814,"implemented":true,"kind":"function","modifiers":[],"name":"getACLAdmin","nameLocation":"4596:11:67","nodeType":"FunctionDefinition","overrides":{"id":9805,"nodeType":"OverrideSpecifier","overrides":[],"src":"4624:8:67"},"parameters":{"id":9804,"nodeType":"ParameterList","parameters":[],"src":"4607:2:67"},"returnParameters":{"id":9808,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9807,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9814,"src":"4642:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9806,"name":"address","nodeType":"ElementaryTypeName","src":"4642:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4641:9:67"},"scope":10072,"src":"4587:103:67","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5044],"body":{"id":9840,"nodeType":"Block","src":"4805:147:67","statements":[{"assignments":[9824],"declarations":[{"constant":false,"id":9824,"mutability":"mutable","name":"oldAclAdmin","nameLocation":"4819:11:67","nodeType":"VariableDeclaration","scope":9840,"src":"4811:19:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9823,"name":"address","nodeType":"ElementaryTypeName","src":"4811:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9828,"initialValue":{"baseExpression":{"id":9825,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9506,"src":"4833:10:67","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":9827,"indexExpression":{"id":9826,"name":"ACL_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9521,"src":"4844:9:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4833:21:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4811:43:67"},{"expression":{"id":9833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":9829,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9506,"src":"4860:10:67","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":9831,"indexExpression":{"id":9830,"name":"ACL_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9521,"src":"4871:9:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4860:21:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9832,"name":"newAclAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9817,"src":"4884:11:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4860:35:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9834,"nodeType":"ExpressionStatement","src":"4860:35:67"},{"eventCall":{"arguments":[{"id":9836,"name":"oldAclAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9824,"src":"4922:11:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9837,"name":"newAclAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9817,"src":"4935:11:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9835,"name":"ACLAdminUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4905,"src":"4906:15:67","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":9838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4906:41:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9839,"nodeType":"EmitStatement","src":"4901:46:67"}]},"documentation":{"id":9815,"nodeType":"StructuredDocumentation","src":"4694:38:67","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"76d84ffc","id":9841,"implemented":true,"kind":"function","modifiers":[{"id":9821,"kind":"modifierInvocation","modifierName":{"id":9820,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"4795:9:67"},"nodeType":"ModifierInvocation","src":"4795:9:67"}],"name":"setACLAdmin","nameLocation":"4744:11:67","nodeType":"FunctionDefinition","overrides":{"id":9819,"nodeType":"OverrideSpecifier","overrides":[],"src":"4786:8:67"},"parameters":{"id":9818,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9817,"mutability":"mutable","name":"newAclAdmin","nameLocation":"4764:11:67","nodeType":"VariableDeclaration","scope":9841,"src":"4756:19:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9816,"name":"address","nodeType":"ElementaryTypeName","src":"4756:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4755:21:67"},"returnParameters":{"id":9822,"nodeType":"ParameterList","parameters":[],"src":"4805:0:67"},"scope":10072,"src":"4735:217:67","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5050],"body":{"id":9852,"nodeType":"Block","src":"5072:51:67","statements":[{"expression":{"arguments":[{"id":9849,"name":"PRICE_ORACLE_SENTINEL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9524,"src":"5096:21:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9848,"name":"getAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9582,"src":"5085:10:67","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) view returns (address)"}},"id":9850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5085:33:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9847,"id":9851,"nodeType":"Return","src":"5078:40:67"}]},"documentation":{"id":9842,"nodeType":"StructuredDocumentation","src":"4956:38:67","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"5eb88d3d","id":9853,"implemented":true,"kind":"function","modifiers":[],"name":"getPriceOracleSentinel","nameLocation":"5006:22:67","nodeType":"FunctionDefinition","overrides":{"id":9844,"nodeType":"OverrideSpecifier","overrides":[],"src":"5045:8:67"},"parameters":{"id":9843,"nodeType":"ParameterList","parameters":[],"src":"5028:2:67"},"returnParameters":{"id":9847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9846,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9853,"src":"5063:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9845,"name":"address","nodeType":"ElementaryTypeName","src":"5063:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5062:9:67"},"scope":10072,"src":"4997:126:67","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5056],"body":{"id":9879,"nodeType":"Block","src":"5260:226:67","statements":[{"assignments":[9863],"declarations":[{"constant":false,"id":9863,"mutability":"mutable","name":"oldPriceOracleSentinel","nameLocation":"5274:22:67","nodeType":"VariableDeclaration","scope":9879,"src":"5266:30:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9862,"name":"address","nodeType":"ElementaryTypeName","src":"5266:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9867,"initialValue":{"baseExpression":{"id":9864,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9506,"src":"5299:10:67","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":9866,"indexExpression":{"id":9865,"name":"PRICE_ORACLE_SENTINEL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9524,"src":"5310:21:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5299:33:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5266:66:67"},{"expression":{"id":9872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":9868,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9506,"src":"5338:10:67","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":9870,"indexExpression":{"id":9869,"name":"PRICE_ORACLE_SENTINEL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9524,"src":"5349:21:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5338:33:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9871,"name":"newPriceOracleSentinel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9856,"src":"5374:22:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5338:58:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9873,"nodeType":"ExpressionStatement","src":"5338:58:67"},{"eventCall":{"arguments":[{"id":9875,"name":"oldPriceOracleSentinel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9863,"src":"5434:22:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9876,"name":"newPriceOracleSentinel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9856,"src":"5458:22:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9874,"name":"PriceOracleSentinelUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4912,"src":"5407:26:67","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":9877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5407:74:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9878,"nodeType":"EmitStatement","src":"5402:79:67"}]},"documentation":{"id":9854,"nodeType":"StructuredDocumentation","src":"5127:38:67","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"74944cec","id":9880,"implemented":true,"kind":"function","modifiers":[{"id":9860,"kind":"modifierInvocation","modifierName":{"id":9859,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"5250:9:67"},"nodeType":"ModifierInvocation","src":"5250:9:67"}],"name":"setPriceOracleSentinel","nameLocation":"5177:22:67","nodeType":"FunctionDefinition","overrides":{"id":9858,"nodeType":"OverrideSpecifier","overrides":[],"src":"5241:8:67"},"parameters":{"id":9857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9856,"mutability":"mutable","name":"newPriceOracleSentinel","nameLocation":"5208:22:67","nodeType":"VariableDeclaration","scope":9880,"src":"5200:30:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9855,"name":"address","nodeType":"ElementaryTypeName","src":"5200:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5199:32:67"},"returnParameters":{"id":9861,"nodeType":"ParameterList","parameters":[],"src":"5260:0:67"},"scope":10072,"src":"5168:318:67","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5062],"body":{"id":9891,"nodeType":"Block","src":"5603:43:67","statements":[{"expression":{"arguments":[{"id":9888,"name":"DATA_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9527,"src":"5627:13:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9887,"name":"getAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9582,"src":"5616:10:67","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32) view returns (address)"}},"id":9889,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5616:25:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9886,"id":9890,"nodeType":"Return","src":"5609:32:67"}]},"documentation":{"id":9881,"nodeType":"StructuredDocumentation","src":"5490:38:67","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"e860accb","id":9892,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolDataProvider","nameLocation":"5540:19:67","nodeType":"FunctionDefinition","overrides":{"id":9883,"nodeType":"OverrideSpecifier","overrides":[],"src":"5576:8:67"},"parameters":{"id":9882,"nodeType":"ParameterList","parameters":[],"src":"5559:2:67"},"returnParameters":{"id":9886,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9885,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9892,"src":"5594:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9884,"name":"address","nodeType":"ElementaryTypeName","src":"5594:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5593:9:67"},"scope":10072,"src":"5531:115:67","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5068],"body":{"id":9918,"nodeType":"Block","src":"5773:179:67","statements":[{"assignments":[9902],"declarations":[{"constant":false,"id":9902,"mutability":"mutable","name":"oldDataProvider","nameLocation":"5787:15:67","nodeType":"VariableDeclaration","scope":9918,"src":"5779:23:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9901,"name":"address","nodeType":"ElementaryTypeName","src":"5779:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9906,"initialValue":{"baseExpression":{"id":9903,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9506,"src":"5805:10:67","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":9905,"indexExpression":{"id":9904,"name":"DATA_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9527,"src":"5816:13:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5805:25:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5779:51:67"},{"expression":{"id":9911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":9907,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9506,"src":"5836:10:67","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":9909,"indexExpression":{"id":9908,"name":"DATA_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9527,"src":"5847:13:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5836:25:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9910,"name":"newDataProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9895,"src":"5864:15:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5836:43:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9912,"nodeType":"ExpressionStatement","src":"5836:43:67"},{"eventCall":{"arguments":[{"id":9914,"name":"oldDataProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9902,"src":"5914:15:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9915,"name":"newDataProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9895,"src":"5931:15:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9913,"name":"PoolDataProviderUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4919,"src":"5890:23:67","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":9916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5890:57:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9917,"nodeType":"EmitStatement","src":"5885:62:67"}]},"documentation":{"id":9893,"nodeType":"StructuredDocumentation","src":"5650:38:67","text":"@inheritdoc IPoolAddressesProvider"},"functionSelector":"e44e9ed1","id":9919,"implemented":true,"kind":"function","modifiers":[{"id":9899,"kind":"modifierInvocation","modifierName":{"id":9898,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"5763:9:67"},"nodeType":"ModifierInvocation","src":"5763:9:67"}],"name":"setPoolDataProvider","nameLocation":"5700:19:67","nodeType":"FunctionDefinition","overrides":{"id":9897,"nodeType":"OverrideSpecifier","overrides":[],"src":"5754:8:67"},"parameters":{"id":9896,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9895,"mutability":"mutable","name":"newDataProvider","nameLocation":"5728:15:67","nodeType":"VariableDeclaration","scope":9919,"src":"5720:23:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9894,"name":"address","nodeType":"ElementaryTypeName","src":"5720:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5719:25:67"},"returnParameters":{"id":9900,"nodeType":"ParameterList","parameters":[],"src":"5773:0:67"},"scope":10072,"src":"5691:261:67","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10008,"nodeType":"Block","src":"6614:622:67","statements":[{"assignments":[9928],"declarations":[{"constant":false,"id":9928,"mutability":"mutable","name":"proxyAddress","nameLocation":"6628:12:67","nodeType":"VariableDeclaration","scope":10008,"src":"6620:20:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9927,"name":"address","nodeType":"ElementaryTypeName","src":"6620:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9932,"initialValue":{"baseExpression":{"id":9929,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9506,"src":"6643:10:67","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":9931,"indexExpression":{"id":9930,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9922,"src":"6654:2:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6643:14:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6620:37:67"},{"assignments":[9935],"declarations":[{"constant":false,"id":9935,"mutability":"mutable","name":"proxy","nameLocation":"6710:5:67","nodeType":"VariableDeclaration","scope":10008,"src":"6663:52:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"},"typeName":{"id":9934,"nodeType":"UserDefinedTypeName","pathNode":{"id":9933,"name":"InitializableImmutableAdminUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":10492,"src":"6663:46:67"},"referencedDeclaration":10492,"src":"6663:46:67","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"visibility":"internal"}],"id":9936,"nodeType":"VariableDeclarationStatement","src":"6663:52:67"},{"assignments":[9938],"declarations":[{"constant":false,"id":9938,"mutability":"mutable","name":"params","nameLocation":"6734:6:67","nodeType":"VariableDeclaration","scope":10008,"src":"6721:19:67","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9937,"name":"bytes","nodeType":"ElementaryTypeName","src":"6721:5:67","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":9947,"initialValue":{"arguments":[{"hexValue":"696e697469616c697a65286164647265737329","id":9941,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6767:21:67","typeDescriptions":{"typeIdentifier":"t_stringliteral_c4d66de8473e8f74cb05df264ee8262da16b56717ef1f05d73bfdcea3adc85e5","typeString":"literal_string \"initialize(address)\""},"value":"initialize(address)"},{"arguments":[{"id":9944,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6798:4:67","typeDescriptions":{"typeIdentifier":"t_contract$_PoolAddressesProvider_$10072","typeString":"contract PoolAddressesProvider"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PoolAddressesProvider_$10072","typeString":"contract PoolAddressesProvider"}],"id":9943,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6790:7:67","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9942,"name":"address","nodeType":"ElementaryTypeName","src":"6790:7:67","typeDescriptions":{}}},"id":9945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6790:13:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c4d66de8473e8f74cb05df264ee8262da16b56717ef1f05d73bfdcea3adc85e5","typeString":"literal_string \"initialize(address)\""},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9939,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6743:3:67","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":9940,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSignature","nodeType":"MemberAccess","src":"6743:23:67","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (string memory) pure returns (bytes memory)"}},"id":9946,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6743:61:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"6721:83:67"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9948,"name":"proxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9928,"src":"6815:12:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":9951,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6839: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":9950,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6831:7:67","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9949,"name":"address","nodeType":"ElementaryTypeName","src":"6831:7:67","typeDescriptions":{}}},"id":9952,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6831:10:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6815:26:67","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":10006,"nodeType":"Block","src":"7090:142:67","statements":[{"expression":{"id":9997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9990,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9935,"src":"7098:5:67","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":9994,"name":"proxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9928,"src":"7161:12:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9993,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7153:8:67","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":9992,"name":"address","nodeType":"ElementaryTypeName","src":"7153:8:67","stateMutability":"payable","typeDescriptions":{}}},"id":9995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7153:21:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":9991,"name":"InitializableImmutableAdminUpgradeabilityProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10492,"src":"7106:46:67","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492_$","typeString":"type(contract InitializableImmutableAdminUpgradeabilityProxy)"}},"id":9996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7106:69:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"src":"7098:77:67","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"id":9998,"nodeType":"ExpressionStatement","src":"7098:77:67"},{"expression":{"arguments":[{"id":10002,"name":"newAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9924,"src":"7206:10:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10003,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9938,"src":"7218:6:67","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":9999,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9935,"src":"7183:5:67","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"id":10001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"upgradeToAndCall","nodeType":"MemberAccess","referencedDeclaration":10435,"src":"7183:22:67","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory) payable external"}},"id":10004,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7183:42:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10005,"nodeType":"ExpressionStatement","src":"7183:42:67"}]},"id":10007,"nodeType":"IfStatement","src":"6811:421:67","trueBody":{"id":9989,"nodeType":"Block","src":"6843:241:67","statements":[{"expression":{"id":9963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9954,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9935,"src":"6851:5:67","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":9960,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6918:4:67","typeDescriptions":{"typeIdentifier":"t_contract$_PoolAddressesProvider_$10072","typeString":"contract PoolAddressesProvider"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PoolAddressesProvider_$10072","typeString":"contract PoolAddressesProvider"}],"id":9959,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6910:7:67","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9958,"name":"address","nodeType":"ElementaryTypeName","src":"6910:7:67","typeDescriptions":{}}},"id":9961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6910:13:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"6859:50:67","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$_t_address_$returns$_t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492_$","typeString":"function (address) returns (contract InitializableImmutableAdminUpgradeabilityProxy)"},"typeName":{"id":9956,"nodeType":"UserDefinedTypeName","pathNode":{"id":9955,"name":"InitializableImmutableAdminUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":10492,"src":"6863:46:67"},"referencedDeclaration":10492,"src":"6863:46:67","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}}},"id":9962,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6859:65:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"src":"6851:73:67","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"id":9964,"nodeType":"ExpressionStatement","src":"6851:73:67"},{"expression":{"id":9974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":9965,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9506,"src":"6932:10:67","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":9967,"indexExpression":{"id":9966,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9922,"src":"6943:2:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6932:14:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9968,"name":"proxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9928,"src":"6949:12:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9971,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9935,"src":"6972:5:67","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}],"id":9970,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6964:7:67","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9969,"name":"address","nodeType":"ElementaryTypeName","src":"6964:7:67","typeDescriptions":{}}},"id":9972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6964:14:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6949:29:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6932:46:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9975,"nodeType":"ExpressionStatement","src":"6932:46:67"},{"expression":{"arguments":[{"id":9979,"name":"newAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9924,"src":"7003:10:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9980,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9938,"src":"7015:6:67","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":9976,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9935,"src":"6986:5:67","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"id":9978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":2881,"src":"6986:16:67","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory) payable external"}},"id":9981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6986:36:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9982,"nodeType":"ExpressionStatement","src":"6986:36:67"},{"eventCall":{"arguments":[{"id":9984,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9922,"src":"7048:2:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9985,"name":"proxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9928,"src":"7052:12:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9986,"name":"newAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9924,"src":"7066:10:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":9983,"name":"ProxyCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4928,"src":"7035:12:67","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$","typeString":"function (bytes32,address,address)"}},"id":9987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7035:42:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9988,"nodeType":"EmitStatement","src":"7030:47:67"}]}}]},"documentation":{"id":9920,"nodeType":"StructuredDocumentation","src":"5956:593:67","text":" @notice Internal function to update the implementation of a specific proxied component of the protocol.\n @dev If there is no proxy registered with the given identifier, it creates the proxy setting `newAddress`\n   as implementation and calls the initialize() function on the proxy\n @dev If there is already a proxy registered, it just updates the implementation to `newAddress` and\n   calls the initialize() function via upgradeToAndCall() in the proxy\n @param id The id of the proxy to be updated\n @param newAddress The address of the new implementation"},"id":10009,"implemented":true,"kind":"function","modifiers":[],"name":"_updateImpl","nameLocation":"6561:11:67","nodeType":"FunctionDefinition","parameters":{"id":9925,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9922,"mutability":"mutable","name":"id","nameLocation":"6581:2:67","nodeType":"VariableDeclaration","scope":10009,"src":"6573:10:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9921,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6573:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":9924,"mutability":"mutable","name":"newAddress","nameLocation":"6593:10:67","nodeType":"VariableDeclaration","scope":10009,"src":"6585:18:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9923,"name":"address","nodeType":"ElementaryTypeName","src":"6585:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6572:32:67"},"returnParameters":{"id":9926,"nodeType":"ParameterList","parameters":[],"src":"6614:0:67"},"scope":10072,"src":"6552:684:67","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10028,"nodeType":"Block","src":"7415:125:67","statements":[{"assignments":[10016],"declarations":[{"constant":false,"id":10016,"mutability":"mutable","name":"oldMarketId","nameLocation":"7435:11:67","nodeType":"VariableDeclaration","scope":10028,"src":"7421:25:67","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10015,"name":"string","nodeType":"ElementaryTypeName","src":"7421:6:67","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":10018,"initialValue":{"id":10017,"name":"_marketId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9502,"src":"7449:9:67","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"VariableDeclarationStatement","src":"7421:37:67"},{"expression":{"id":10021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10019,"name":"_marketId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9502,"src":"7464:9:67","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10020,"name":"newMarketId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10012,"src":"7476:11:67","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"7464:23:67","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":10022,"nodeType":"ExpressionStatement","src":"7464:23:67"},{"eventCall":{"arguments":[{"id":10024,"name":"oldMarketId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10016,"src":"7510:11:67","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":10025,"name":"newMarketId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10012,"src":"7523:11:67","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":10023,"name":"MarketIdSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4870,"src":"7498:11:67","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":10026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7498:37:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10027,"nodeType":"EmitStatement","src":"7493:42:67"}]},"documentation":{"id":10010,"nodeType":"StructuredDocumentation","src":"7240:114:67","text":" @notice Updates the identifier of the Aave market.\n @param newMarketId The new id of the market"},"id":10029,"implemented":true,"kind":"function","modifiers":[],"name":"_setMarketId","nameLocation":"7366:12:67","nodeType":"FunctionDefinition","parameters":{"id":10013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10012,"mutability":"mutable","name":"newMarketId","nameLocation":"7393:11:67","nodeType":"VariableDeclaration","scope":10029,"src":"7379:25:67","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10011,"name":"string","nodeType":"ElementaryTypeName","src":"7379:6:67","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7378:27:67"},"returnParameters":{"id":10014,"nodeType":"ParameterList","parameters":[],"src":"7415:0:67"},"scope":10072,"src":"7357:183:67","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10070,"nodeType":"Block","src":"7999:296:67","statements":[{"assignments":[10038],"declarations":[{"constant":false,"id":10038,"mutability":"mutable","name":"proxyAddress","nameLocation":"8013:12:67","nodeType":"VariableDeclaration","scope":10070,"src":"8005:20:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10037,"name":"address","nodeType":"ElementaryTypeName","src":"8005:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":10042,"initialValue":{"baseExpression":{"id":10039,"name":"_addresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9506,"src":"8028:10:67","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_address_$","typeString":"mapping(bytes32 => address)"}},"id":10041,"indexExpression":{"id":10040,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10032,"src":"8039:2:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8028:14:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8005:37:67"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10043,"name":"proxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10038,"src":"8052:12:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10046,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8076: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":10045,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8068:7:67","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10044,"name":"address","nodeType":"ElementaryTypeName","src":"8068:7:67","typeDescriptions":{}}},"id":10047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8068:10:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8052:26:67","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":10068,"nodeType":"Block","src":"8118:173:67","statements":[{"assignments":[10056],"declarations":[{"constant":false,"id":10056,"mutability":"mutable","name":"payableProxyAddress","nameLocation":"8142:19:67","nodeType":"VariableDeclaration","scope":10068,"src":"8126:35:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":10055,"name":"address","nodeType":"ElementaryTypeName","src":"8126:15:67","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"id":10061,"initialValue":{"arguments":[{"id":10059,"name":"proxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10038,"src":"8172:12:67","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10058,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8164:8:67","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":10057,"name":"address","nodeType":"ElementaryTypeName","src":"8164:8:67","stateMutability":"payable","typeDescriptions":{}}},"id":10060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8164:21:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"VariableDeclarationStatement","src":"8126:59:67"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":10063,"name":"payableProxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10056,"src":"8247:19:67","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":10062,"name":"InitializableImmutableAdminUpgradeabilityProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10492,"src":"8200:46:67","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492_$","typeString":"type(contract InitializableImmutableAdminUpgradeabilityProxy)"}},"id":10064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8200:67:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"id":10065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":10396,"src":"8200:82:67","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$_t_address_$","typeString":"function () external returns (address)"}},"id":10066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8200:84:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":10036,"id":10067,"nodeType":"Return","src":"8193:91:67"}]},"id":10069,"nodeType":"IfStatement","src":"8048:243:67","trueBody":{"id":10054,"nodeType":"Block","src":"8080:32:67","statements":[{"expression":{"arguments":[{"hexValue":"30","id":10051,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8103: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":10050,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8095:7:67","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10049,"name":"address","nodeType":"ElementaryTypeName","src":"8095:7:67","typeDescriptions":{}}},"id":10052,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8095:10:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":10036,"id":10053,"nodeType":"Return","src":"8088:17:67"}]}}]},"documentation":{"id":10030,"nodeType":"StructuredDocumentation","src":"7544:380:67","text":" @notice Returns the the implementation contract of the proxy contract by its identifier.\n @dev It returns ZERO if there is no registered address with the given id\n @dev It reverts if the registered address with the given id is not `InitializableImmutableAdminUpgradeabilityProxy`\n @param id The id\n @return The address of the implementation contract"},"id":10071,"implemented":true,"kind":"function","modifiers":[],"name":"_getProxyImplementation","nameLocation":"7936:23:67","nodeType":"FunctionDefinition","parameters":{"id":10033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10032,"mutability":"mutable","name":"id","nameLocation":"7968:2:67","nodeType":"VariableDeclaration","scope":10071,"src":"7960:10:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10031,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7960:7:67","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7959:12:67"},"returnParameters":{"id":10036,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10035,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10071,"src":"7990:7:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10034,"name":"address","nodeType":"ElementaryTypeName","src":"7990:7:67","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7989:9:67"},"scope":10072,"src":"7927:368:67","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":10073,"src":"672:7625:67","usedErrors":[]}],"src":"37:8261:67"},"id":67},"@aave/core-v3/contracts/protocol/configuration/PoolAddressesProviderRegistry.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/configuration/PoolAddressesProviderRegistry.sol","exportedSymbols":{"Errors":[12642],"IPoolAddressesProviderRegistry":[5124],"Ownable":[1573],"PoolAddressesProviderRegistry":[10339]},"id":10340,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":10074,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:68"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol","file":"../../dependencies/openzeppelin/contracts/Ownable.sol","id":10076,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10340,"sourceUnit":1574,"src":"63:78:68","symbolAliases":[{"foreign":{"id":10075,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:7:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol","file":"../libraries/helpers/Errors.sol","id":10078,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10340,"sourceUnit":12643,"src":"142:55:68","symbolAliases":[{"foreign":{"id":10077,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"150:6:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProviderRegistry.sol","file":"../../interfaces/IPoolAddressesProviderRegistry.sol","id":10080,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10340,"sourceUnit":5125,"src":"198:99:68","symbolAliases":[{"foreign":{"id":10079,"name":"IPoolAddressesProviderRegistry","nodeType":"Identifier","overloadedDeclarations":[],"src":"206:30:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":10082,"name":"Ownable","nodeType":"IdentifierPath","referencedDeclaration":1573,"src":"700:7:68"},"id":10083,"nodeType":"InheritanceSpecifier","src":"700:7:68"},{"baseName":{"id":10084,"name":"IPoolAddressesProviderRegistry","nodeType":"IdentifierPath","referencedDeclaration":5124,"src":"709:30:68"},"id":10085,"nodeType":"InheritanceSpecifier","src":"709:30:68"}],"canonicalName":"PoolAddressesProviderRegistry","contractDependencies":[],"contractKind":"contract","documentation":{"id":10081,"nodeType":"StructuredDocumentation","src":"299:358:68","text":" @title PoolAddressesProviderRegistry\n @author Aave\n @notice Main registry of PoolAddressesProvider of Aave markets.\n @dev Used for indexing purposes of Aave protocol's markets. The id assigned to a PoolAddressesProvider refers to the\n market it is connected with, for example with `1` for the Aave main market and `2` for the next created."},"fullyImplemented":true,"id":10339,"linearizedBaseContracts":[10339,5124,1573,748],"name":"PoolAddressesProviderRegistry","nameLocation":"667:29:68","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":10089,"mutability":"mutable","name":"_addressesProviderToId","nameLocation":"839:22:68","nodeType":"VariableDeclaration","scope":10339,"src":"803:58:68","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":10088,"keyType":{"id":10086,"name":"address","nodeType":"ElementaryTypeName","src":"811:7:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"803:27:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":10087,"name":"uint256","nodeType":"ElementaryTypeName","src":"822:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"constant":false,"id":10093,"mutability":"mutable","name":"_idToAddressesProvider","nameLocation":"962:22:68","nodeType":"VariableDeclaration","scope":10339,"src":"926:58:68","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":10092,"keyType":{"id":10090,"name":"uint256","nodeType":"ElementaryTypeName","src":"934:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"926:27:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":10091,"name":"address","nodeType":"ElementaryTypeName","src":"945:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"private"},{"constant":false,"id":10096,"mutability":"mutable","name":"_addressesProvidersList","nameLocation":"1039:23:68","nodeType":"VariableDeclaration","scope":10339,"src":"1021:41:68","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[]"},"typeName":{"baseType":{"id":10094,"name":"address","nodeType":"ElementaryTypeName","src":"1021:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10095,"nodeType":"ArrayTypeName","src":"1021:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"private"},{"constant":false,"id":10100,"mutability":"mutable","name":"_addressesProvidersIndexes","nameLocation":"1179:26:68","nodeType":"VariableDeclaration","scope":10339,"src":"1143:62:68","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":10099,"keyType":{"id":10097,"name":"address","nodeType":"ElementaryTypeName","src":"1151:7:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1143:27:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":10098,"name":"uint256","nodeType":"ElementaryTypeName","src":"1162:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"body":{"id":10110,"nodeType":"Block","src":"1326:35:68","statements":[{"expression":{"arguments":[{"id":10107,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10103,"src":"1350:5:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10106,"name":"transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1572,"src":"1332:17:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":10108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1332:24:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10109,"nodeType":"ExpressionStatement","src":"1332:24:68"}]},"documentation":{"id":10101,"nodeType":"StructuredDocumentation","src":"1210:86:68","text":" @dev Constructor.\n @param owner The owner address of this contract."},"id":10111,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":10104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10103,"mutability":"mutable","name":"owner","nameLocation":"1319:5:68","nodeType":"VariableDeclaration","scope":10111,"src":"1311:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10102,"name":"address","nodeType":"ElementaryTypeName","src":"1311:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1310:15:68"},"returnParameters":{"id":10105,"nodeType":"ParameterList","parameters":[],"src":"1326:0:68"},"scope":10339,"src":"1299:62:68","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[5093],"body":{"id":10121,"nodeType":"Block","src":"1501:41:68","statements":[{"expression":{"id":10119,"name":"_addressesProvidersList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10096,"src":"1514:23:68","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"functionReturnParameters":10118,"id":10120,"nodeType":"Return","src":"1507:30:68"}]},"documentation":{"id":10112,"nodeType":"StructuredDocumentation","src":"1365:46:68","text":"@inheritdoc IPoolAddressesProviderRegistry"},"functionSelector":"365ccbbf","id":10122,"implemented":true,"kind":"function","modifiers":[],"name":"getAddressesProvidersList","nameLocation":"1423:25:68","nodeType":"FunctionDefinition","overrides":{"id":10114,"nodeType":"OverrideSpecifier","overrides":[],"src":"1465:8:68"},"parameters":{"id":10113,"nodeType":"ParameterList","parameters":[],"src":"1448:2:68"},"returnParameters":{"id":10118,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10117,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10122,"src":"1483:16:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":10115,"name":"address","nodeType":"ElementaryTypeName","src":"1483:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10116,"nodeType":"ArrayTypeName","src":"1483:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1482:18:68"},"scope":10339,"src":"1414:128:68","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5117],"body":{"id":10185,"nodeType":"Block","src":"1688:435:68","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10134,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10127,"src":"1702:2:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":10135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1708:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1702:7:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":10137,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"1711:6:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":10138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_ADDRESSES_PROVIDER_ID","nodeType":"MemberAccess","referencedDeclaration":12395,"src":"1711:36:68","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":10133,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1694:7:68","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1694:54:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10140,"nodeType":"ExpressionStatement","src":"1694:54:68"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":10142,"name":"_idToAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10093,"src":"1762:22:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":10144,"indexExpression":{"id":10143,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10127,"src":"1785:2:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1762:26:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":10147,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1800: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":10146,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1792:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10145,"name":"address","nodeType":"ElementaryTypeName","src":"1792:7:68","typeDescriptions":{}}},"id":10148,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1792:10:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1762:40:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":10150,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"1804:6:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":10151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_ADDRESSES_PROVIDER_ID","nodeType":"MemberAccess","referencedDeclaration":12395,"src":"1804:36:68","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":10141,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1754:7:68","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1754:87:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10153,"nodeType":"ExpressionStatement","src":"1754:87:68"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":10155,"name":"_addressesProviderToId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10089,"src":"1855:22:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10157,"indexExpression":{"id":10156,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10125,"src":"1878:8:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1855:32:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10158,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1891:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1855:37:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":10160,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"1894:6:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":10161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ADDRESSES_PROVIDER_ALREADY_ADDED","nodeType":"MemberAccess","referencedDeclaration":12626,"src":"1894:39:68","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":10154,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1847:7:68","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1847:87:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10163,"nodeType":"ExpressionStatement","src":"1847:87:68"},{"expression":{"id":10168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10164,"name":"_addressesProviderToId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10089,"src":"1941:22:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10166,"indexExpression":{"id":10165,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10125,"src":"1964:8:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1941:32:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10167,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10127,"src":"1976:2:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1941:37:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10169,"nodeType":"ExpressionStatement","src":"1941:37:68"},{"expression":{"id":10174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10170,"name":"_idToAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10093,"src":"1984:22:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":10172,"indexExpression":{"id":10171,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10127,"src":"2007:2:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1984:26:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10173,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10125,"src":"2013:8:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1984:37:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10175,"nodeType":"ExpressionStatement","src":"1984:37:68"},{"expression":{"arguments":[{"id":10177,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10125,"src":"2057:8:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10176,"name":"_addToAddressesProvidersList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10284,"src":"2028:28:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":10178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2028:38:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10179,"nodeType":"ExpressionStatement","src":"2028:38:68"},{"eventCall":{"arguments":[{"id":10181,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10125,"src":"2105:8:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10182,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10127,"src":"2115:2:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10180,"name":"AddressesProviderRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5079,"src":"2077:27:68","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":10183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2077:41:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10184,"nodeType":"EmitStatement","src":"2072:46:68"}]},"documentation":{"id":10123,"nodeType":"StructuredDocumentation","src":"1546:46:68","text":"@inheritdoc IPoolAddressesProviderRegistry"},"functionSelector":"d258191e","id":10186,"implemented":true,"kind":"function","modifiers":[{"id":10131,"kind":"modifierInvocation","modifierName":{"id":10130,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"1678:9:68"},"nodeType":"ModifierInvocation","src":"1678:9:68"}],"name":"registerAddressesProvider","nameLocation":"1604:25:68","nodeType":"FunctionDefinition","overrides":{"id":10129,"nodeType":"OverrideSpecifier","overrides":[],"src":"1669:8:68"},"parameters":{"id":10128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10125,"mutability":"mutable","name":"provider","nameLocation":"1638:8:68","nodeType":"VariableDeclaration","scope":10186,"src":"1630:16:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10124,"name":"address","nodeType":"ElementaryTypeName","src":"1630:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10127,"mutability":"mutable","name":"id","nameLocation":"1656:2:68","nodeType":"VariableDeclaration","scope":10186,"src":"1648:10:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10126,"name":"uint256","nodeType":"ElementaryTypeName","src":"1648:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1629:30:68"},"returnParameters":{"id":10132,"nodeType":"ParameterList","parameters":[],"src":"1688:0:68"},"scope":10339,"src":"1595:528:68","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5123],"body":{"id":10235,"nodeType":"Block","src":"2259:351:68","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":10196,"name":"_addressesProviderToId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10089,"src":"2273:22:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10198,"indexExpression":{"id":10197,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10189,"src":"2296:8:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2273:32:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":10199,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2309:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2273:37:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":10201,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"2312:6:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":10202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ADDRESSES_PROVIDER_NOT_REGISTERED","nodeType":"MemberAccess","referencedDeclaration":12392,"src":"2312:40:68","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":10195,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2265:7:68","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2265:88:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10204,"nodeType":"ExpressionStatement","src":"2265:88:68"},{"assignments":[10206],"declarations":[{"constant":false,"id":10206,"mutability":"mutable","name":"oldId","nameLocation":"2367:5:68","nodeType":"VariableDeclaration","scope":10235,"src":"2359:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10205,"name":"uint256","nodeType":"ElementaryTypeName","src":"2359:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10210,"initialValue":{"baseExpression":{"id":10207,"name":"_addressesProviderToId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10089,"src":"2375:22:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10209,"indexExpression":{"id":10208,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10189,"src":"2398:8:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2375:32:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2359:48:68"},{"expression":{"id":10218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10211,"name":"_idToAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10093,"src":"2413:22:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":10213,"indexExpression":{"id":10212,"name":"oldId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10206,"src":"2436:5:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2413:29:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":10216,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2453: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":10215,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2445:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10214,"name":"address","nodeType":"ElementaryTypeName","src":"2445:7:68","typeDescriptions":{}}},"id":10217,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2445:10:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2413:42:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10219,"nodeType":"ExpressionStatement","src":"2413:42:68"},{"expression":{"id":10224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10220,"name":"_addressesProviderToId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10089,"src":"2461:22:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10222,"indexExpression":{"id":10221,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10189,"src":"2484:8:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2461:32:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":10223,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2496:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2461:36:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10225,"nodeType":"ExpressionStatement","src":"2461:36:68"},{"expression":{"arguments":[{"id":10227,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10189,"src":"2538:8:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10226,"name":"_removeFromAddressesProvidersList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10338,"src":"2504:33:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":10228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2504:43:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10229,"nodeType":"ExpressionStatement","src":"2504:43:68"},{"eventCall":{"arguments":[{"id":10231,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10189,"src":"2589:8:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10232,"name":"oldId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10206,"src":"2599:5:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10230,"name":"AddressesProviderUnregistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5086,"src":"2559:29:68","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":10233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2559:46:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10234,"nodeType":"EmitStatement","src":"2554:51:68"}]},"documentation":{"id":10187,"nodeType":"StructuredDocumentation","src":"2127:46:68","text":"@inheritdoc IPoolAddressesProviderRegistry"},"functionSelector":"0de26707","id":10236,"implemented":true,"kind":"function","modifiers":[{"id":10193,"kind":"modifierInvocation","modifierName":{"id":10192,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"2249:9:68"},"nodeType":"ModifierInvocation","src":"2249:9:68"}],"name":"unregisterAddressesProvider","nameLocation":"2185:27:68","nodeType":"FunctionDefinition","overrides":{"id":10191,"nodeType":"OverrideSpecifier","overrides":[],"src":"2240:8:68"},"parameters":{"id":10190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10189,"mutability":"mutable","name":"provider","nameLocation":"2221:8:68","nodeType":"VariableDeclaration","scope":10236,"src":"2213:16:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10188,"name":"address","nodeType":"ElementaryTypeName","src":"2213:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2212:18:68"},"returnParameters":{"id":10194,"nodeType":"ParameterList","parameters":[],"src":"2259:0:68"},"scope":10339,"src":"2176:434:68","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5101],"body":{"id":10249,"nodeType":"Block","src":"2780:59:68","statements":[{"expression":{"baseExpression":{"id":10245,"name":"_addressesProviderToId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10089,"src":"2793:22:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10247,"indexExpression":{"id":10246,"name":"addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10239,"src":"2816:17:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2793:41:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10244,"id":10248,"nodeType":"Return","src":"2786:48:68"}]},"documentation":{"id":10237,"nodeType":"StructuredDocumentation","src":"2614:46:68","text":"@inheritdoc IPoolAddressesProviderRegistry"},"functionSelector":"d0267be7","id":10250,"implemented":true,"kind":"function","modifiers":[],"name":"getAddressesProviderIdByAddress","nameLocation":"2672:31:68","nodeType":"FunctionDefinition","overrides":{"id":10241,"nodeType":"OverrideSpecifier","overrides":[],"src":"2753:8:68"},"parameters":{"id":10240,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10239,"mutability":"mutable","name":"addressesProvider","nameLocation":"2717:17:68","nodeType":"VariableDeclaration","scope":10250,"src":"2709:25:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10238,"name":"address","nodeType":"ElementaryTypeName","src":"2709:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2703:35:68"},"returnParameters":{"id":10244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10243,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10250,"src":"2771:7:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10242,"name":"uint256","nodeType":"ElementaryTypeName","src":"2771:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2770:9:68"},"scope":10339,"src":"2663:176:68","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5109],"body":{"id":10263,"nodeType":"Block","src":"2986:44:68","statements":[{"expression":{"baseExpression":{"id":10259,"name":"_idToAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10093,"src":"2999:22:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":10261,"indexExpression":{"id":10260,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10253,"src":"3022:2:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2999:26:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":10258,"id":10262,"nodeType":"Return","src":"2992:33:68"}]},"documentation":{"id":10251,"nodeType":"StructuredDocumentation","src":"2843:46:68","text":"@inheritdoc IPoolAddressesProviderRegistry"},"functionSelector":"57dc0566","id":10264,"implemented":true,"kind":"function","modifiers":[],"name":"getAddressesProviderAddressById","nameLocation":"2901:31:68","nodeType":"FunctionDefinition","overrides":{"id":10255,"nodeType":"OverrideSpecifier","overrides":[],"src":"2959:8:68"},"parameters":{"id":10254,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10253,"mutability":"mutable","name":"id","nameLocation":"2941:2:68","nodeType":"VariableDeclaration","scope":10264,"src":"2933:10:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10252,"name":"uint256","nodeType":"ElementaryTypeName","src":"2933:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2932:12:68"},"returnParameters":{"id":10258,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10257,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10264,"src":"2977:7:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10256,"name":"address","nodeType":"ElementaryTypeName","src":"2977:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2976:9:68"},"scope":10339,"src":"2892:138:68","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":10283,"nodeType":"Block","src":"3235:124:68","statements":[{"expression":{"id":10275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10270,"name":"_addressesProvidersIndexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10100,"src":"3241:26:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10272,"indexExpression":{"id":10271,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10267,"src":"3268:8:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3241:36:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":10273,"name":"_addressesProvidersList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10096,"src":"3280:23:68","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":10274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3280:30:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3241:69:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10276,"nodeType":"ExpressionStatement","src":"3241:69:68"},{"expression":{"arguments":[{"id":10280,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10267,"src":"3345:8:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":10277,"name":"_addressesProvidersList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10096,"src":"3316:23:68","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":10279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"push","nodeType":"MemberAccess","src":"3316:28:68","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$_t_address_$returns$__$bound_to$_t_array$_t_address_$dyn_storage_ptr_$","typeString":"function (address[] storage pointer,address)"}},"id":10281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3316:38:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10282,"nodeType":"ExpressionStatement","src":"3316:38:68"}]},"documentation":{"id":10265,"nodeType":"StructuredDocumentation","src":"3034:133:68","text":" @notice Adds the addresses provider address to the list.\n @param provider The address of the PoolAddressesProvider"},"id":10284,"implemented":true,"kind":"function","modifiers":[],"name":"_addToAddressesProvidersList","nameLocation":"3179:28:68","nodeType":"FunctionDefinition","parameters":{"id":10268,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10267,"mutability":"mutable","name":"provider","nameLocation":"3216:8:68","nodeType":"VariableDeclaration","scope":10284,"src":"3208:16:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10266,"name":"address","nodeType":"ElementaryTypeName","src":"3208:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3207:18:68"},"returnParameters":{"id":10269,"nodeType":"ParameterList","parameters":[],"src":"3235:0:68"},"scope":10339,"src":"3170:189:68","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10337,"nodeType":"Block","src":"3574:521:68","statements":[{"assignments":[10291],"declarations":[{"constant":false,"id":10291,"mutability":"mutable","name":"index","nameLocation":"3588:5:68","nodeType":"VariableDeclaration","scope":10337,"src":"3580:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10290,"name":"uint256","nodeType":"ElementaryTypeName","src":"3580:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10295,"initialValue":{"baseExpression":{"id":10292,"name":"_addressesProvidersIndexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10100,"src":"3596:26:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10294,"indexExpression":{"id":10293,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10287,"src":"3623:8:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3596:36:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3580:52:68"},{"expression":{"id":10300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10296,"name":"_addressesProvidersIndexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10100,"src":"3639:26:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10298,"indexExpression":{"id":10297,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10287,"src":"3666:8:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3639:36:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":10299,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3678:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3639:40:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10301,"nodeType":"ExpressionStatement","src":"3639:40:68"},{"assignments":[10303],"declarations":[{"constant":false,"id":10303,"mutability":"mutable","name":"lastIndex","nameLocation":"3800:9:68","nodeType":"VariableDeclaration","scope":10337,"src":"3792:17:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10302,"name":"uint256","nodeType":"ElementaryTypeName","src":"3792:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10308,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":10304,"name":"_addressesProvidersList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10096,"src":"3812:23:68","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":10305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3812:30:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":10306,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3845:1:68","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3812:34:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3792:54:68"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10309,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10291,"src":"3856:5:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":10310,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10303,"src":"3864:9:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3856:17:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10331,"nodeType":"IfStatement","src":"3852:204:68","trueBody":{"id":10330,"nodeType":"Block","src":"3875:181:68","statements":[{"assignments":[10313],"declarations":[{"constant":false,"id":10313,"mutability":"mutable","name":"lastProvider","nameLocation":"3891:12:68","nodeType":"VariableDeclaration","scope":10330,"src":"3883:20:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10312,"name":"address","nodeType":"ElementaryTypeName","src":"3883:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":10317,"initialValue":{"baseExpression":{"id":10314,"name":"_addressesProvidersList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10096,"src":"3906:23:68","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":10316,"indexExpression":{"id":10315,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10303,"src":"3930:9:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3906:34:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3883:57:68"},{"expression":{"id":10322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10318,"name":"_addressesProvidersList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10096,"src":"3948:23:68","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":10320,"indexExpression":{"id":10319,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10291,"src":"3972:5:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3948:30:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10321,"name":"lastProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10313,"src":"3981:12:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3948:45:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10323,"nodeType":"ExpressionStatement","src":"3948:45:68"},{"expression":{"id":10328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10324,"name":"_addressesProvidersIndexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10100,"src":"4001:26:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":10326,"indexExpression":{"id":10325,"name":"lastProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10313,"src":"4028:12:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4001:40:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10327,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10291,"src":"4044:5:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4001:48:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10329,"nodeType":"ExpressionStatement","src":"4001:48:68"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":10332,"name":"_addressesProvidersList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10096,"src":"4061:23:68","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":10334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"pop","nodeType":"MemberAccess","src":"4061:27:68","typeDescriptions":{"typeIdentifier":"t_function_arraypop_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$returns$__$bound_to$_t_array$_t_address_$dyn_storage_ptr_$","typeString":"function (address[] storage pointer)"}},"id":10335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4061:29:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10336,"nodeType":"ExpressionStatement","src":"4061:29:68"}]},"documentation":{"id":10285,"nodeType":"StructuredDocumentation","src":"3363:138:68","text":" @notice Removes the addresses provider address from the list.\n @param provider The address of the PoolAddressesProvider"},"id":10338,"implemented":true,"kind":"function","modifiers":[],"name":"_removeFromAddressesProvidersList","nameLocation":"3513:33:68","nodeType":"FunctionDefinition","parameters":{"id":10288,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10287,"mutability":"mutable","name":"provider","nameLocation":"3555:8:68","nodeType":"VariableDeclaration","scope":10338,"src":"3547:16:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10286,"name":"address","nodeType":"ElementaryTypeName","src":"3547:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3546:18:68"},"returnParameters":{"id":10289,"nodeType":"ParameterList","parameters":[],"src":"3574:0:68"},"scope":10339,"src":"3504:591:68","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":10340,"src":"658:3439:68","usedErrors":[]}],"src":"37:4061:68"},"id":68},"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol","exportedSymbols":{"BaseImmutableAdminUpgradeabilityProxy":[10455],"BaseUpgradeabilityProxy":[2748]},"id":10456,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":10341,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:69"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol","file":"../../../dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol","id":10343,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10456,"sourceUnit":2749,"src":"62:118:69","symbolAliases":[{"foreign":{"id":10342,"name":"BaseUpgradeabilityProxy","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:23:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":10345,"name":"BaseUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":2748,"src":"770:23:69"},"id":10346,"nodeType":"InheritanceSpecifier","src":"770:23:69"}],"canonicalName":"BaseImmutableAdminUpgradeabilityProxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":10344,"nodeType":"StructuredDocumentation","src":"182:537:69","text":" @title BaseImmutableAdminUpgradeabilityProxy\n @author Aave, inspired by the OpenZeppelin upgradeability proxy pattern\n @notice This contract combines an upgradeability proxy with an authorization\n mechanism for administrative tasks.\n @dev The admin role is stored in an immutable, which helps saving transactions costs\n All external functions in this contract must be guarded by the\n `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\n feature proposal that would enable this to be done automatically."},"fullyImplemented":true,"id":10455,"linearizedBaseContracts":[10455,2748,2926],"name":"BaseImmutableAdminUpgradeabilityProxy","nameLocation":"729:37:69","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":10348,"mutability":"immutable","name":"_admin","nameLocation":"825:6:69","nodeType":"VariableDeclaration","scope":10455,"src":"798:33:69","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10347,"name":"address","nodeType":"ElementaryTypeName","src":"798:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"body":{"id":10358,"nodeType":"Block","src":"941:25:69","statements":[{"expression":{"id":10356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10354,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10348,"src":"947:6:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10355,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10351,"src":"956:5:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"947:14:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10357,"nodeType":"ExpressionStatement","src":"947:14:69"}]},"documentation":{"id":10349,"nodeType":"StructuredDocumentation","src":"836:75:69","text":" @dev Constructor.\n @param admin The address of the admin"},"id":10359,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":10352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10351,"mutability":"mutable","name":"admin","nameLocation":"934:5:69","nodeType":"VariableDeclaration","scope":10359,"src":"926:13:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10350,"name":"address","nodeType":"ElementaryTypeName","src":"926:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"925:15:69"},"returnParameters":{"id":10353,"nodeType":"ParameterList","parameters":[],"src":"941:0:69"},"scope":10455,"src":"914:52:69","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":10372,"nodeType":"Block","src":"989:84:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":10361,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"999:3:69","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":10362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"999:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":10363,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10348,"src":"1013:6:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"999:20:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":10370,"nodeType":"Block","src":"1043:26:69","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":10367,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2925,"src":"1051:9:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":10368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1051:11:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10369,"nodeType":"ExpressionStatement","src":"1051:11:69"}]},"id":10371,"nodeType":"IfStatement","src":"995:74:69","trueBody":{"id":10366,"nodeType":"Block","src":"1021:16:69","statements":[{"id":10365,"nodeType":"PlaceholderStatement","src":"1029:1:69"}]}}]},"id":10373,"name":"ifAdmin","nameLocation":"979:7:69","nodeType":"ModifierDefinition","parameters":{"id":10360,"nodeType":"ParameterList","parameters":[],"src":"986:2:69"},"src":"970:103:69","virtual":false,"visibility":"internal"},{"body":{"id":10383,"nodeType":"Block","src":"1224:24:69","statements":[{"expression":{"id":10381,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10348,"src":"1237:6:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":10380,"id":10382,"nodeType":"Return","src":"1230:13:69"}]},"documentation":{"id":10374,"nodeType":"StructuredDocumentation","src":"1077:92:69","text":" @notice Return the admin address\n @return The address of the proxy admin."},"functionSelector":"f851a440","id":10384,"implemented":true,"kind":"function","modifiers":[{"id":10377,"kind":"modifierInvocation","modifierName":{"id":10376,"name":"ifAdmin","nodeType":"IdentifierPath","referencedDeclaration":10373,"src":"1198:7:69"},"nodeType":"ModifierInvocation","src":"1198:7:69"}],"name":"admin","nameLocation":"1181:5:69","nodeType":"FunctionDefinition","parameters":{"id":10375,"nodeType":"ParameterList","parameters":[],"src":"1186:2:69"},"returnParameters":{"id":10380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10379,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10384,"src":"1215:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10378,"name":"address","nodeType":"ElementaryTypeName","src":"1215:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1214:9:69"},"scope":10455,"src":"1172:76:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10395,"nodeType":"Block","src":"1420:35:69","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":10392,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[2712],"referencedDeclaration":2712,"src":"1433:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":10393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1433:17:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":10391,"id":10394,"nodeType":"Return","src":"1426:24:69"}]},"documentation":{"id":10385,"nodeType":"StructuredDocumentation","src":"1252:104:69","text":" @notice Return the implementation address\n @return The address of the implementation."},"functionSelector":"5c60da1b","id":10396,"implemented":true,"kind":"function","modifiers":[{"id":10388,"kind":"modifierInvocation","modifierName":{"id":10387,"name":"ifAdmin","nodeType":"IdentifierPath","referencedDeclaration":10373,"src":"1394:7:69"},"nodeType":"ModifierInvocation","src":"1394:7:69"}],"name":"implementation","nameLocation":"1368:14:69","nodeType":"FunctionDefinition","parameters":{"id":10386,"nodeType":"ParameterList","parameters":[],"src":"1382:2:69"},"returnParameters":{"id":10391,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10390,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10396,"src":"1411:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10389,"name":"address","nodeType":"ElementaryTypeName","src":"1411:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1410:9:69"},"scope":10455,"src":"1359:96:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10408,"nodeType":"Block","src":"1714:40:69","statements":[{"expression":{"arguments":[{"id":10405,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10399,"src":"1731:17:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10404,"name":"_upgradeTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2727,"src":"1720:10:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":10406,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1720:29:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10407,"nodeType":"ExpressionStatement","src":"1720:29:69"}]},"documentation":{"id":10397,"nodeType":"StructuredDocumentation","src":"1459:189:69","text":" @notice Upgrade the backing implementation of the proxy.\n @dev Only the admin can call this function.\n @param newImplementation The address of the new implementation."},"functionSelector":"3659cfe6","id":10409,"implemented":true,"kind":"function","modifiers":[{"id":10402,"kind":"modifierInvocation","modifierName":{"id":10401,"name":"ifAdmin","nodeType":"IdentifierPath","referencedDeclaration":10373,"src":"1706:7:69"},"nodeType":"ModifierInvocation","src":"1706:7:69"}],"name":"upgradeTo","nameLocation":"1660:9:69","nodeType":"FunctionDefinition","parameters":{"id":10400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10399,"mutability":"mutable","name":"newImplementation","nameLocation":"1678:17:69","nodeType":"VariableDeclaration","scope":10409,"src":"1670:25:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10398,"name":"address","nodeType":"ElementaryTypeName","src":"1670:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1669:27:69"},"returnParameters":{"id":10403,"nodeType":"ParameterList","parameters":[],"src":"1714:0:69"},"scope":10455,"src":"1651:103:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10434,"nodeType":"Block","src":"2394:123:69","statements":[{"expression":{"arguments":[{"id":10420,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10412,"src":"2411:17:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10419,"name":"_upgradeTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2727,"src":"2400:10:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":10421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2400:29:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10422,"nodeType":"ExpressionStatement","src":"2400:29:69"},{"assignments":[10424,null],"declarations":[{"constant":false,"id":10424,"mutability":"mutable","name":"success","nameLocation":"2441:7:69","nodeType":"VariableDeclaration","scope":10434,"src":"2436:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10423,"name":"bool","nodeType":"ElementaryTypeName","src":"2436:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":10429,"initialValue":{"arguments":[{"id":10427,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10414,"src":"2485:4:69","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":10425,"name":"newImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10412,"src":"2454:17:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"delegatecall","nodeType":"MemberAccess","src":"2454:30:69","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":10428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2454:36:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"2435:55:69"},{"expression":{"arguments":[{"id":10431,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10424,"src":"2504:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":10430,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2496:7:69","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":10432,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2496:16:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10433,"nodeType":"ExpressionStatement","src":"2496:16:69"}]},"documentation":{"id":10410,"nodeType":"StructuredDocumentation","src":"1758:522:69","text":" @notice Upgrade the backing implementation of the proxy and call a function\n on the new implementation.\n @dev This is useful to initialize the proxied contract.\n @param newImplementation The address of the new implementation.\n @param data Data to send as msg.data in the low level call.\n It should include the signature and the parameters of the function to be called, as described in\n https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding."},"functionSelector":"4f1ef286","id":10435,"implemented":true,"kind":"function","modifiers":[{"id":10417,"kind":"modifierInvocation","modifierName":{"id":10416,"name":"ifAdmin","nodeType":"IdentifierPath","referencedDeclaration":10373,"src":"2386:7:69"},"nodeType":"ModifierInvocation","src":"2386:7:69"}],"name":"upgradeToAndCall","nameLocation":"2292:16:69","nodeType":"FunctionDefinition","parameters":{"id":10415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10412,"mutability":"mutable","name":"newImplementation","nameLocation":"2322:17:69","nodeType":"VariableDeclaration","scope":10435,"src":"2314:25:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10411,"name":"address","nodeType":"ElementaryTypeName","src":"2314:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10414,"mutability":"mutable","name":"data","nameLocation":"2360:4:69","nodeType":"VariableDeclaration","scope":10435,"src":"2345:19:69","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":10413,"name":"bytes","nodeType":"ElementaryTypeName","src":"2345:5:69","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2308:60:69"},"returnParameters":{"id":10418,"nodeType":"ParameterList","parameters":[],"src":"2394:0:69"},"scope":10455,"src":"2283:234:69","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[2912],"body":{"id":10453,"nodeType":"Block","src":"2646:121:69","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":10444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":10441,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2660:3:69","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":10442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2660:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":10443,"name":"_admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10348,"src":"2674:6:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2660:20:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e2066726f6d207468652070726f78792061646d696e","id":10445,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2682:52:69","typeDescriptions":{"typeIdentifier":"t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9","typeString":"literal_string \"Cannot call fallback function from the proxy admin\""},"value":"Cannot call fallback function from the proxy admin"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9","typeString":"literal_string \"Cannot call fallback function from the proxy admin\""}],"id":10440,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2652:7:69","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2652:83:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10447,"nodeType":"ExpressionStatement","src":"2652:83:69"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":10448,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"2741:5:69","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_BaseImmutableAdminUpgradeabilityProxy_$10455_$","typeString":"type(contract super BaseImmutableAdminUpgradeabilityProxy)"}},"id":10450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_willFallback","nodeType":"MemberAccess","referencedDeclaration":2912,"src":"2741:19:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":10451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2741:21:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10452,"nodeType":"ExpressionStatement","src":"2741:21:69"}]},"documentation":{"id":10436,"nodeType":"StructuredDocumentation","src":"2521:71:69","text":" @notice Only fall back when the sender is not the admin."},"id":10454,"implemented":true,"kind":"function","modifiers":[],"name":"_willFallback","nameLocation":"2604:13:69","nodeType":"FunctionDefinition","overrides":{"id":10438,"nodeType":"OverrideSpecifier","overrides":[],"src":"2637:8:69"},"parameters":{"id":10437,"nodeType":"ParameterList","parameters":[],"src":"2617:2:69"},"returnParameters":{"id":10439,"nodeType":"ParameterList","parameters":[],"src":"2646:0:69"},"scope":10455,"src":"2595:172:69","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":10456,"src":"720:2049:69","usedErrors":[]}],"src":"37:2733:69"},"id":69},"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol","exportedSymbols":{"BaseImmutableAdminUpgradeabilityProxy":[10455],"InitializableImmutableAdminUpgradeabilityProxy":[10492],"InitializableUpgradeabilityProxy":[2882],"Proxy":[2926]},"id":10493,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":10457,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:70"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol","file":"../../../dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol","id":10459,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10493,"sourceUnit":2883,"src":"62:136:70","symbolAliases":[{"foreign":{"id":10458,"name":"InitializableUpgradeabilityProxy","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:32:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol","file":"../../../dependencies/openzeppelin/upgradeability/Proxy.sol","id":10461,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10493,"sourceUnit":2927,"src":"199:82:70","symbolAliases":[{"foreign":{"id":10460,"name":"Proxy","nodeType":"Identifier","overloadedDeclarations":[],"src":"207:5:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol","file":"./BaseImmutableAdminUpgradeabilityProxy.sol","id":10463,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10493,"sourceUnit":10456,"src":"282:98:70","symbolAliases":[{"foreign":{"id":10462,"name":"BaseImmutableAdminUpgradeabilityProxy","nodeType":"Identifier","overloadedDeclarations":[],"src":"290:37:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":10465,"name":"BaseImmutableAdminUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":10455,"src":"589:37:70"},"id":10466,"nodeType":"InheritanceSpecifier","src":"589:37:70"},{"baseName":{"id":10467,"name":"InitializableUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":2882,"src":"630:32:70"},"id":10468,"nodeType":"InheritanceSpecifier","src":"630:32:70"}],"canonicalName":"InitializableImmutableAdminUpgradeabilityProxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":10464,"nodeType":"StructuredDocumentation","src":"382:145:70","text":" @title InitializableAdminUpgradeabilityProxy\n @author Aave\n @dev Extends BaseAdminUpgradeabilityProxy with an initializer function"},"fullyImplemented":true,"id":10492,"linearizedBaseContracts":[10492,2882,10455,2748,2926],"name":"InitializableImmutableAdminUpgradeabilityProxy","nameLocation":"537:46:70","nodeType":"ContractDefinition","nodes":[{"body":{"id":10477,"nodeType":"Block","src":"817:37:70","statements":[]},"documentation":{"id":10469,"nodeType":"StructuredDocumentation","src":"667:75:70","text":" @dev Constructor.\n @param admin The address of the admin"},"id":10478,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":10474,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10471,"src":"810:5:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":10475,"kind":"baseConstructorSpecifier","modifierName":{"id":10473,"name":"BaseImmutableAdminUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":10455,"src":"772:37:70"},"nodeType":"ModifierInvocation","src":"772:44:70"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":10472,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10471,"mutability":"mutable","name":"admin","nameLocation":"765:5:70","nodeType":"VariableDeclaration","scope":10478,"src":"757:13:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10470,"name":"address","nodeType":"ElementaryTypeName","src":"757:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"756:15:70"},"returnParameters":{"id":10476,"nodeType":"ParameterList","parameters":[],"src":"817:0:70"},"scope":10492,"src":"745:109:70","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[2912,10454],"body":{"id":10490,"nodeType":"Block","src":"1003:64:70","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":10485,"name":"BaseImmutableAdminUpgradeabilityProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10455,"src":"1009:37:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BaseImmutableAdminUpgradeabilityProxy_$10455_$","typeString":"type(contract BaseImmutableAdminUpgradeabilityProxy)"}},"id":10487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_willFallback","nodeType":"MemberAccess","referencedDeclaration":10454,"src":"1009:51:70","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":10488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1009:53:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10489,"nodeType":"ExpressionStatement","src":"1009:53:70"}]},"documentation":{"id":10479,"nodeType":"StructuredDocumentation","src":"858:53:70","text":"@inheritdoc BaseImmutableAdminUpgradeabilityProxy"},"id":10491,"implemented":true,"kind":"function","modifiers":[],"name":"_willFallback","nameLocation":"923:13:70","nodeType":"FunctionDefinition","overrides":{"id":10483,"nodeType":"OverrideSpecifier","overrides":[{"id":10481,"name":"BaseImmutableAdminUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":10455,"src":"957:37:70"},{"id":10482,"name":"Proxy","nodeType":"IdentifierPath","referencedDeclaration":2926,"src":"996:5:70"}],"src":"948:54:70"},"parameters":{"id":10480,"nodeType":"ParameterList","parameters":[],"src":"936:2:70"},"returnParameters":{"id":10484,"nodeType":"ParameterList","parameters":[],"src":"1003:0:70"},"scope":10492,"src":"914:153:70","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":10493,"src":"528:541:70","usedErrors":[]}],"src":"37:1033:70"},"id":70},"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol","exportedSymbols":{"VersionedInitializable":[10573]},"id":10574,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":10494,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:71"},{"abstract":true,"baseContracts":[],"canonicalName":"VersionedInitializable","contractDependencies":[],"contractKind":"contract","documentation":{"id":10495,"nodeType":"StructuredDocumentation","src":"62:706:71","text":" @title VersionedInitializable\n @author Aave, inspired by the OpenZeppelin Initializable contract\n @notice Helper contract to implement initializer functions. To use it, replace\n the constructor with a function that has the `initializer` modifier.\n @dev WARNING: Unlike constructors, initializer functions must be manually\n invoked. This applies both to deploying an Initializable contract, as well\n as extending an Initializable contract via inheritance.\n WARNING: When used with inheritance, manual care must be taken to not invoke\n a parent initializer twice, or ensure that all initializers are idempotent,\n because this is not dealt with automatically as with constructors."},"fullyImplemented":false,"id":10573,"linearizedBaseContracts":[10573],"name":"VersionedInitializable","nameLocation":"787:22:71","nodeType":"ContractDefinition","nodes":[{"constant":false,"documentation":{"id":10496,"nodeType":"StructuredDocumentation","src":"814:69:71","text":" @dev Indicates that the contract has been initialized."},"id":10499,"mutability":"mutable","name":"lastInitializedRevision","nameLocation":"902:23:71","nodeType":"VariableDeclaration","scope":10573,"src":"886:43:71","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10497,"name":"uint256","nodeType":"ElementaryTypeName","src":"886:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":10498,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"928:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"private"},{"constant":false,"documentation":{"id":10500,"nodeType":"StructuredDocumentation","src":"934:87:71","text":" @dev Indicates that the contract is in the process of being initialized."},"id":10502,"mutability":"mutable","name":"initializing","nameLocation":"1037:12:71","nodeType":"VariableDeclaration","scope":10573,"src":"1024:25:71","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10501,"name":"bool","nodeType":"ElementaryTypeName","src":"1024:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"body":{"id":10546,"nodeType":"Block","src":"1158:407:71","statements":[{"assignments":[10506],"declarations":[{"constant":false,"id":10506,"mutability":"mutable","name":"revision","nameLocation":"1172:8:71","nodeType":"VariableDeclaration","scope":10546,"src":"1164:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10505,"name":"uint256","nodeType":"ElementaryTypeName","src":"1164:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10509,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":10507,"name":"getRevision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10553,"src":"1183:11:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_uint256_$","typeString":"function () pure returns (uint256)"}},"id":10508,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1183:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1164:32:71"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":10518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":10514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10511,"name":"initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10502,"src":"1217:12:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":10512,"name":"isConstructor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10568,"src":"1233:13:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":10513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1233:15:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1217:31:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10515,"name":"revision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10506,"src":"1252:8:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":10516,"name":"lastInitializedRevision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10499,"src":"1263:23:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1252:34:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1217:69:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564","id":10519,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1294:48:71","typeDescriptions":{"typeIdentifier":"t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4","typeString":"literal_string \"Contract instance has already been initialized\""},"value":"Contract instance has already been initialized"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4","typeString":"literal_string \"Contract instance has already been initialized\""}],"id":10510,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1202:7:71","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10520,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1202:146:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10521,"nodeType":"ExpressionStatement","src":"1202:146:71"},{"assignments":[10523],"declarations":[{"constant":false,"id":10523,"mutability":"mutable","name":"isTopLevelCall","nameLocation":"1360:14:71","nodeType":"VariableDeclaration","scope":10546,"src":"1355:19:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10522,"name":"bool","nodeType":"ElementaryTypeName","src":"1355:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":10526,"initialValue":{"id":10525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1377:13:71","subExpression":{"id":10524,"name":"initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10502,"src":"1378:12:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"1355:35:71"},{"condition":{"id":10527,"name":"isTopLevelCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10523,"src":"1400:14:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10537,"nodeType":"IfStatement","src":"1396:96:71","trueBody":{"id":10536,"nodeType":"Block","src":"1416:76:71","statements":[{"expression":{"id":10530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10528,"name":"initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10502,"src":"1424:12:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":10529,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1439:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"1424:19:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10531,"nodeType":"ExpressionStatement","src":"1424:19:71"},{"expression":{"id":10534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10532,"name":"lastInitializedRevision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10499,"src":"1451:23:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10533,"name":"revision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10506,"src":"1477:8:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1451:34:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10535,"nodeType":"ExpressionStatement","src":"1451:34:71"}]}},{"id":10538,"nodeType":"PlaceholderStatement","src":"1498:1:71"},{"condition":{"id":10539,"name":"isTopLevelCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10523,"src":"1510:14:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10545,"nodeType":"IfStatement","src":"1506:55:71","trueBody":{"id":10544,"nodeType":"Block","src":"1526:35:71","statements":[{"expression":{"id":10542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10540,"name":"initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10502,"src":"1534:12:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":10541,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1549:5:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"1534:20:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10543,"nodeType":"ExpressionStatement","src":"1534:20:71"}]}}]},"documentation":{"id":10503,"nodeType":"StructuredDocumentation","src":"1054:78:71","text":" @dev Modifier to use in the initializer function of a contract."},"id":10547,"name":"initializer","nameLocation":"1144:11:71","nodeType":"ModifierDefinition","parameters":{"id":10504,"nodeType":"ParameterList","parameters":[],"src":"1155:2:71"},"src":"1135:430:71","virtual":false,"visibility":"internal"},{"documentation":{"id":10548,"nodeType":"StructuredDocumentation","src":"1569:167:71","text":" @notice Returns the revision number of the contract\n @dev Needs to be defined in the inherited class as a constant.\n @return The revision number"},"id":10553,"implemented":false,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"1748:11:71","nodeType":"FunctionDefinition","parameters":{"id":10549,"nodeType":"ParameterList","parameters":[],"src":"1759:2:71"},"returnParameters":{"id":10552,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10551,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10553,"src":"1793:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10550,"name":"uint256","nodeType":"ElementaryTypeName","src":"1793:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1792:9:71"},"scope":10573,"src":"1739:63:71","stateMutability":"pure","virtual":true,"visibility":"internal"},{"body":{"id":10567,"nodeType":"Block","src":"2019:457:71","statements":[{"assignments":[10560],"declarations":[{"constant":false,"id":10560,"mutability":"mutable","name":"cs","nameLocation":"2362:2:71","nodeType":"VariableDeclaration","scope":10567,"src":"2354:10:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10559,"name":"uint256","nodeType":"ElementaryTypeName","src":"2354:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10561,"nodeType":"VariableDeclarationStatement","src":"2354:10:71"},{"AST":{"nodeType":"YulBlock","src":"2410:42:71","statements":[{"nodeType":"YulAssignment","src":"2418:28:71","value":{"arguments":[{"arguments":[],"functionName":{"name":"address","nodeType":"YulIdentifier","src":"2436:7:71"},"nodeType":"YulFunctionCall","src":"2436:9:71"}],"functionName":{"name":"extcodesize","nodeType":"YulIdentifier","src":"2424:11:71"},"nodeType":"YulFunctionCall","src":"2424:22:71"},"variableNames":[{"name":"cs","nodeType":"YulIdentifier","src":"2418:2:71"}]}]},"evmVersion":"london","externalReferences":[{"declaration":10560,"isOffset":false,"isSlot":false,"src":"2418:2:71","valueSize":1}],"id":10562,"nodeType":"InlineAssembly","src":"2401:51:71"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10563,"name":"cs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10560,"src":"2464:2:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10564,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2470:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2464:7:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":10558,"id":10566,"nodeType":"Return","src":"2457:14:71"}]},"documentation":{"id":10554,"nodeType":"StructuredDocumentation","src":"1806:157:71","text":" @notice Returns true if and only if the function is running in the constructor\n @return True if the function is running in the constructor"},"id":10568,"implemented":true,"kind":"function","modifiers":[],"name":"isConstructor","nameLocation":"1975:13:71","nodeType":"FunctionDefinition","parameters":{"id":10555,"nodeType":"ParameterList","parameters":[],"src":"1988:2:71"},"returnParameters":{"id":10558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10557,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10568,"src":"2013:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10556,"name":"bool","nodeType":"ElementaryTypeName","src":"2013:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2012:6:71"},"scope":10573,"src":"1966:510:71","stateMutability":"view","virtual":false,"visibility":"private"},{"constant":false,"id":10572,"mutability":"mutable","name":"______gap","nameLocation":"2571:9:71","nodeType":"VariableDeclaration","scope":10573,"src":"2551:29:71","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage","typeString":"uint256[50]"},"typeName":{"baseType":{"id":10569,"name":"uint256","nodeType":"ElementaryTypeName","src":"2551:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10571,"length":{"hexValue":"3530","id":10570,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2559:2:71","typeDescriptions":{"typeIdentifier":"t_rational_50_by_1","typeString":"int_const 50"},"value":"50"},"nodeType":"ArrayTypeName","src":"2551:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage_ptr","typeString":"uint256[50]"}},"visibility":"private"}],"scope":10574,"src":"769:1814:71","usedErrors":[]}],"src":"37:2547:71"},"id":71},"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol","exportedSymbols":{"DataTypes":[21633],"Errors":[12642],"ReserveConfiguration":[11857]},"id":11858,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":10575,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:72"},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol","file":"../helpers/Errors.sol","id":10577,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11858,"sourceUnit":12643,"src":"62:45:72","symbolAliases":[{"foreign":{"id":10576,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:6:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":10579,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11858,"sourceUnit":21634,"src":"108:49:72","symbolAliases":[{"foreign":{"id":10578,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"116:9:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"ReserveConfiguration","contractDependencies":[],"contractKind":"library","documentation":{"id":10580,"nodeType":"StructuredDocumentation","src":"159:137:72","text":" @title ReserveConfiguration library\n @author Aave\n @notice Implements the bitmap logic to handle the reserve configuration"},"fullyImplemented":true,"id":11857,"linearizedBaseContracts":[11857],"name":"ReserveConfiguration","nameLocation":"305:20:72","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":10583,"mutability":"constant","name":"LTV_MASK","nameLocation":"356:8:72","nodeType":"VariableDeclaration","scope":11857,"src":"330:125:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10581,"name":"uint256","nodeType":"ElementaryTypeName","src":"330:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464630303030","id":10582,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"389:66:72","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039457584007913129574400_by_1","typeString":"int_const 1157...(70 digits omitted)...4400"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000"},"visibility":"internal"},{"constant":true,"id":10586,"mutability":"constant","name":"LIQUIDATION_THRESHOLD_MASK","nameLocation":"504:26:72","nodeType":"VariableDeclaration","scope":11857,"src":"478:125:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10584,"name":"uint256","nodeType":"ElementaryTypeName","src":"478:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646463030303046464646","id":10585,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"537:66:72","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039457584007908834738175_by_1","typeString":"int_const 1157...(70 digits omitted)...8175"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF"},"visibility":"internal"},{"constant":true,"id":10589,"mutability":"constant","name":"LIQUIDATION_BONUS_MASK","nameLocation":"652:22:72","nodeType":"VariableDeclaration","scope":11857,"src":"626:125:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10587,"name":"uint256","nodeType":"ElementaryTypeName","src":"626:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646303030304646464646464646","id":10588,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"685:66:72","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039457583726442447896575_by_1","typeString":"int_const 1157...(70 digits omitted)...6575"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF"},"visibility":"internal"},{"constant":true,"id":10592,"mutability":"constant","name":"DECIMALS_MASK","nameLocation":"800:13:72","nodeType":"VariableDeclaration","scope":11857,"src":"774:125:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10590,"name":"uint256","nodeType":"ElementaryTypeName","src":"774:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646463030464646464646464646464646","id":10591,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"833:66:72","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039457512231794068422655_by_1","typeString":"int_const 1157...(70 digits omitted)...2655"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":10595,"mutability":"constant","name":"ACTIVE_MASK","nameLocation":"948:11:72","nodeType":"VariableDeclaration","scope":11857,"src":"922:125:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10593,"name":"uint256","nodeType":"ElementaryTypeName","src":"922:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646454646464646464646464646464646","id":10594,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"981:66:72","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039457511950319091711999_by_1","typeString":"int_const 1157...(70 digits omitted)...1999"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":10598,"mutability":"constant","name":"FROZEN_MASK","nameLocation":"1096:11:72","nodeType":"VariableDeclaration","scope":11857,"src":"1070:125:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10596,"name":"uint256","nodeType":"ElementaryTypeName","src":"1070:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646444646464646464646464646464646","id":10597,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1129:66:72","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039457439892725053784063_by_1","typeString":"int_const 1157...(70 digits omitted)...4063"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":10601,"mutability":"constant","name":"BORROWING_MASK","nameLocation":"1244:14:72","nodeType":"VariableDeclaration","scope":11857,"src":"1218:125:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10599,"name":"uint256","nodeType":"ElementaryTypeName","src":"1218:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646424646464646464646464646464646","id":10600,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1277:66:72","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039457295777536977928191_by_1","typeString":"int_const 1157...(70 digits omitted)...8191"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":10604,"mutability":"constant","name":"STABLE_BORROWING_MASK","nameLocation":"1392:21:72","nodeType":"VariableDeclaration","scope":11857,"src":"1366:125:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10602,"name":"uint256","nodeType":"ElementaryTypeName","src":"1366:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646374646464646464646464646464646","id":10603,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1425:66:72","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039457007547160826216447_by_1","typeString":"int_const 1157...(70 digits omitted)...6447"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":10607,"mutability":"constant","name":"PAUSED_MASK","nameLocation":"1540:11:72","nodeType":"VariableDeclaration","scope":11857,"src":"1514:125:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10605,"name":"uint256","nodeType":"ElementaryTypeName","src":"1514:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464645464646464646464646464646464646","id":10606,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1573:66:72","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039456431086408522792959_by_1","typeString":"int_const 1157...(70 digits omitted)...2959"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":10610,"mutability":"constant","name":"BORROWABLE_IN_ISOLATION_MASK","nameLocation":"1688:28:72","nodeType":"VariableDeclaration","scope":11857,"src":"1662:125:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10608,"name":"uint256","nodeType":"ElementaryTypeName","src":"1662:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464644464646464646464646464646464646","id":10609,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1721:66:72","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039455278164903915945983_by_1","typeString":"int_const 1157...(70 digits omitted)...5983"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":10613,"mutability":"constant","name":"SILOED_BORROWING_MASK","nameLocation":"1836:21:72","nodeType":"VariableDeclaration","scope":11857,"src":"1810:125:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10611,"name":"uint256","nodeType":"ElementaryTypeName","src":"1810:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464642464646464646464646464646464646","id":10612,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1869:66:72","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039452972321894702252031_by_1","typeString":"int_const 1157...(70 digits omitted)...2031"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":10616,"mutability":"constant","name":"FLASHLOAN_ENABLED_MASK","nameLocation":"1984:22:72","nodeType":"VariableDeclaration","scope":11857,"src":"1958:125:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10614,"name":"uint256","nodeType":"ElementaryTypeName","src":"1958:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464637464646464646464646464646464646","id":10615,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2017:66:72","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640564039448360635876274864127_by_1","typeString":"int_const 1157...(70 digits omitted)...4127"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":10619,"mutability":"constant","name":"RESERVE_FACTOR_MASK","nameLocation":"2132:19:72","nodeType":"VariableDeclaration","scope":11857,"src":"2106:125:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10617,"name":"uint256","nodeType":"ElementaryTypeName","src":"2106:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646464646464646464646463030303046464646464646464646464646464646","id":10618,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2165:66:72","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269984665640562830550211137357664485375_by_1","typeString":"int_const 1157...(70 digits omitted)...5375"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":10622,"mutability":"constant","name":"BORROW_CAP_MASK","nameLocation":"2280:15:72","nodeType":"VariableDeclaration","scope":11857,"src":"2254:125:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10620,"name":"uint256","nodeType":"ElementaryTypeName","src":"2254:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646464646464646464646463030303030303030304646464646464646464646464646464646464646","id":10621,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2313:66:72","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008687907853269901588890828691141347134601036824575_by_1","typeString":"int_const 1157...(70 digits omitted)...4575"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":10625,"mutability":"constant","name":"SUPPLY_CAP_MASK","nameLocation":"2428:15:72","nodeType":"VariableDeclaration","scope":11857,"src":"2402:125:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10623,"name":"uint256","nodeType":"ElementaryTypeName","src":"2402:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646464646463030303030303030304646464646464646464646464646464646464646464646464646464646","id":10624,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2461:66:72","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570985008682198862499243902866067452821842515308866174975_by_1","typeString":"int_const 1157...(70 digits omitted)...4975"},"value":"0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":10628,"mutability":"constant","name":"LIQUIDATION_PROTOCOL_FEE_MASK","nameLocation":"2576:29:72","nodeType":"VariableDeclaration","scope":11857,"src":"2550:125:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10626,"name":"uint256","nodeType":"ElementaryTypeName","src":"2550:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646464646303030304646464646464646464646464646464646464646464646464646464646464646464646464646","id":10627,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2609:66:72","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570984634549197687329661445021480007966928956539929624575_by_1","typeString":"int_const 1157...(70 digits omitted)...4575"},"value":"0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":10631,"mutability":"constant","name":"EMODE_CATEGORY_MASK","nameLocation":"2724:19:72","nodeType":"VariableDeclaration","scope":11857,"src":"2698:125:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10629,"name":"uint256","nodeType":"ElementaryTypeName","src":"2698:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646464646464646464646463030464646464646464646464646464646464646464646464646464646464646464646464646464646464646","id":10630,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2757:66:72","typeDescriptions":{"typeIdentifier":"t_rational_115792089237316195423570889601861022891927484329094684320502060868636724166655_by_1","typeString":"int_const 1157...(70 digits omitted)...6655"},"value":"0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":10634,"mutability":"constant","name":"UNBACKED_MINT_CAP_MASK","nameLocation":"2872:22:72","nodeType":"VariableDeclaration","scope":11857,"src":"2846:125:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10632,"name":"uint256","nodeType":"ElementaryTypeName","src":"2846:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846464646464646464646463030303030303030304646464646464646464646464646464646464646464646464646464646464646464646464646464646464646","id":10633,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2905:66:72","typeDescriptions":{"typeIdentifier":"t_rational_115792089237309613405341795965490592094593402660309829990319025859654871678975_by_1","typeString":"int_const 1157...(70 digits omitted)...8975"},"value":"0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"id":10637,"mutability":"constant","name":"DEBT_CEILING_MASK","nameLocation":"3020:17:72","nodeType":"VariableDeclaration","scope":11857,"src":"2994:125:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10635,"name":"uint256","nodeType":"ElementaryTypeName","src":"2994:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307846303030303030303030304646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646","id":10636,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3053:66:72","typeDescriptions":{"typeIdentifier":"t_rational_108555083659990515227827083269813533489170840026057959730454019326871953473535_by_1","typeString":"int_const 1085...(70 digits omitted)...3535"},"value":"0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},"visibility":"internal"},{"constant":true,"documentation":{"id":10638,"nodeType":"StructuredDocumentation","src":"3143:83:72","text":"@dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed"},"id":10641,"mutability":"constant","name":"LIQUIDATION_THRESHOLD_START_BIT_POSITION","nameLocation":"3255:40:72","nodeType":"VariableDeclaration","scope":11857,"src":"3229:71:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10639,"name":"uint256","nodeType":"ElementaryTypeName","src":"3229:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3136","id":10640,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3298:2:72","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"visibility":"internal"},{"constant":true,"id":10644,"mutability":"constant","name":"LIQUIDATION_BONUS_START_BIT_POSITION","nameLocation":"3330:36:72","nodeType":"VariableDeclaration","scope":11857,"src":"3304:67:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10642,"name":"uint256","nodeType":"ElementaryTypeName","src":"3304:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3332","id":10643,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3369:2:72","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"visibility":"internal"},{"constant":true,"id":10647,"mutability":"constant","name":"RESERVE_DECIMALS_START_BIT_POSITION","nameLocation":"3401:35:72","nodeType":"VariableDeclaration","scope":11857,"src":"3375:66:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10645,"name":"uint256","nodeType":"ElementaryTypeName","src":"3375:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3438","id":10646,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3439:2:72","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},"visibility":"internal"},{"constant":true,"id":10650,"mutability":"constant","name":"IS_ACTIVE_START_BIT_POSITION","nameLocation":"3471:28:72","nodeType":"VariableDeclaration","scope":11857,"src":"3445:59:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10648,"name":"uint256","nodeType":"ElementaryTypeName","src":"3445:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3536","id":10649,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3502:2:72","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},"visibility":"internal"},{"constant":true,"id":10653,"mutability":"constant","name":"IS_FROZEN_START_BIT_POSITION","nameLocation":"3534:28:72","nodeType":"VariableDeclaration","scope":11857,"src":"3508:59:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10651,"name":"uint256","nodeType":"ElementaryTypeName","src":"3508:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3537","id":10652,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3565:2:72","typeDescriptions":{"typeIdentifier":"t_rational_57_by_1","typeString":"int_const 57"},"value":"57"},"visibility":"internal"},{"constant":true,"id":10656,"mutability":"constant","name":"BORROWING_ENABLED_START_BIT_POSITION","nameLocation":"3597:36:72","nodeType":"VariableDeclaration","scope":11857,"src":"3571:67:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10654,"name":"uint256","nodeType":"ElementaryTypeName","src":"3571:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3538","id":10655,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3636:2:72","typeDescriptions":{"typeIdentifier":"t_rational_58_by_1","typeString":"int_const 58"},"value":"58"},"visibility":"internal"},{"constant":true,"id":10659,"mutability":"constant","name":"STABLE_BORROWING_ENABLED_START_BIT_POSITION","nameLocation":"3668:43:72","nodeType":"VariableDeclaration","scope":11857,"src":"3642:74:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10657,"name":"uint256","nodeType":"ElementaryTypeName","src":"3642:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3539","id":10658,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3714:2:72","typeDescriptions":{"typeIdentifier":"t_rational_59_by_1","typeString":"int_const 59"},"value":"59"},"visibility":"internal"},{"constant":true,"id":10662,"mutability":"constant","name":"IS_PAUSED_START_BIT_POSITION","nameLocation":"3746:28:72","nodeType":"VariableDeclaration","scope":11857,"src":"3720:59:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10660,"name":"uint256","nodeType":"ElementaryTypeName","src":"3720:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3630","id":10661,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3777:2:72","typeDescriptions":{"typeIdentifier":"t_rational_60_by_1","typeString":"int_const 60"},"value":"60"},"visibility":"internal"},{"constant":true,"id":10665,"mutability":"constant","name":"BORROWABLE_IN_ISOLATION_START_BIT_POSITION","nameLocation":"3809:42:72","nodeType":"VariableDeclaration","scope":11857,"src":"3783:73:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10663,"name":"uint256","nodeType":"ElementaryTypeName","src":"3783:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3631","id":10664,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3854:2:72","typeDescriptions":{"typeIdentifier":"t_rational_61_by_1","typeString":"int_const 61"},"value":"61"},"visibility":"internal"},{"constant":true,"id":10668,"mutability":"constant","name":"SILOED_BORROWING_START_BIT_POSITION","nameLocation":"3886:35:72","nodeType":"VariableDeclaration","scope":11857,"src":"3860:66:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10666,"name":"uint256","nodeType":"ElementaryTypeName","src":"3860:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3632","id":10667,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3924:2:72","typeDescriptions":{"typeIdentifier":"t_rational_62_by_1","typeString":"int_const 62"},"value":"62"},"visibility":"internal"},{"constant":true,"id":10671,"mutability":"constant","name":"FLASHLOAN_ENABLED_START_BIT_POSITION","nameLocation":"3956:36:72","nodeType":"VariableDeclaration","scope":11857,"src":"3930:67:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10669,"name":"uint256","nodeType":"ElementaryTypeName","src":"3930:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3633","id":10670,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3995:2:72","typeDescriptions":{"typeIdentifier":"t_rational_63_by_1","typeString":"int_const 63"},"value":"63"},"visibility":"internal"},{"constant":true,"id":10674,"mutability":"constant","name":"RESERVE_FACTOR_START_BIT_POSITION","nameLocation":"4027:33:72","nodeType":"VariableDeclaration","scope":11857,"src":"4001:64:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10672,"name":"uint256","nodeType":"ElementaryTypeName","src":"4001:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3634","id":10673,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4063:2:72","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"visibility":"internal"},{"constant":true,"id":10677,"mutability":"constant","name":"BORROW_CAP_START_BIT_POSITION","nameLocation":"4095:29:72","nodeType":"VariableDeclaration","scope":11857,"src":"4069:60:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10675,"name":"uint256","nodeType":"ElementaryTypeName","src":"4069:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3830","id":10676,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4127:2:72","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},"visibility":"internal"},{"constant":true,"id":10680,"mutability":"constant","name":"SUPPLY_CAP_START_BIT_POSITION","nameLocation":"4159:29:72","nodeType":"VariableDeclaration","scope":11857,"src":"4133:61:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10678,"name":"uint256","nodeType":"ElementaryTypeName","src":"4133:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"313136","id":10679,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4191:3:72","typeDescriptions":{"typeIdentifier":"t_rational_116_by_1","typeString":"int_const 116"},"value":"116"},"visibility":"internal"},{"constant":true,"id":10683,"mutability":"constant","name":"LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION","nameLocation":"4224:43:72","nodeType":"VariableDeclaration","scope":11857,"src":"4198:75:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10681,"name":"uint256","nodeType":"ElementaryTypeName","src":"4198:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"313532","id":10682,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4270:3:72","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},"visibility":"internal"},{"constant":true,"id":10686,"mutability":"constant","name":"EMODE_CATEGORY_START_BIT_POSITION","nameLocation":"4303:33:72","nodeType":"VariableDeclaration","scope":11857,"src":"4277:65:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10684,"name":"uint256","nodeType":"ElementaryTypeName","src":"4277:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"313638","id":10685,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4339:3:72","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},"visibility":"internal"},{"constant":true,"id":10689,"mutability":"constant","name":"UNBACKED_MINT_CAP_START_BIT_POSITION","nameLocation":"4372:36:72","nodeType":"VariableDeclaration","scope":11857,"src":"4346:68:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10687,"name":"uint256","nodeType":"ElementaryTypeName","src":"4346:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"313736","id":10688,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4411:3:72","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},"visibility":"internal"},{"constant":true,"id":10692,"mutability":"constant","name":"DEBT_CEILING_START_BIT_POSITION","nameLocation":"4444:31:72","nodeType":"VariableDeclaration","scope":11857,"src":"4418:63:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10690,"name":"uint256","nodeType":"ElementaryTypeName","src":"4418:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"323132","id":10691,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4478:3:72","typeDescriptions":{"typeIdentifier":"t_rational_212_by_1","typeString":"int_const 212"},"value":"212"},"visibility":"internal"},{"constant":true,"id":10695,"mutability":"constant","name":"MAX_VALID_LTV","nameLocation":"4512:13:72","nodeType":"VariableDeclaration","scope":11857,"src":"4486:47:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10693,"name":"uint256","nodeType":"ElementaryTypeName","src":"4486:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3635353335","id":10694,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4528:5:72","typeDescriptions":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"},"value":"65535"},"visibility":"internal"},{"constant":true,"id":10698,"mutability":"constant","name":"MAX_VALID_LIQUIDATION_THRESHOLD","nameLocation":"4563:31:72","nodeType":"VariableDeclaration","scope":11857,"src":"4537:65:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10696,"name":"uint256","nodeType":"ElementaryTypeName","src":"4537:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3635353335","id":10697,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4597:5:72","typeDescriptions":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"},"value":"65535"},"visibility":"internal"},{"constant":true,"id":10701,"mutability":"constant","name":"MAX_VALID_LIQUIDATION_BONUS","nameLocation":"4632:27:72","nodeType":"VariableDeclaration","scope":11857,"src":"4606:61:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10699,"name":"uint256","nodeType":"ElementaryTypeName","src":"4606:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3635353335","id":10700,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4662:5:72","typeDescriptions":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"},"value":"65535"},"visibility":"internal"},{"constant":true,"id":10704,"mutability":"constant","name":"MAX_VALID_DECIMALS","nameLocation":"4697:18:72","nodeType":"VariableDeclaration","scope":11857,"src":"4671:50:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10702,"name":"uint256","nodeType":"ElementaryTypeName","src":"4671:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"323535","id":10703,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4718:3:72","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"visibility":"internal"},{"constant":true,"id":10707,"mutability":"constant","name":"MAX_VALID_RESERVE_FACTOR","nameLocation":"4751:24:72","nodeType":"VariableDeclaration","scope":11857,"src":"4725:58:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10705,"name":"uint256","nodeType":"ElementaryTypeName","src":"4725:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3635353335","id":10706,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4778:5:72","typeDescriptions":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"},"value":"65535"},"visibility":"internal"},{"constant":true,"id":10710,"mutability":"constant","name":"MAX_VALID_BORROW_CAP","nameLocation":"4813:20:72","nodeType":"VariableDeclaration","scope":11857,"src":"4787:60:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10708,"name":"uint256","nodeType":"ElementaryTypeName","src":"4787:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3638373139343736373335","id":10709,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4836:11:72","typeDescriptions":{"typeIdentifier":"t_rational_68719476735_by_1","typeString":"int_const 68719476735"},"value":"68719476735"},"visibility":"internal"},{"constant":true,"id":10713,"mutability":"constant","name":"MAX_VALID_SUPPLY_CAP","nameLocation":"4877:20:72","nodeType":"VariableDeclaration","scope":11857,"src":"4851:60:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10711,"name":"uint256","nodeType":"ElementaryTypeName","src":"4851:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3638373139343736373335","id":10712,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4900:11:72","typeDescriptions":{"typeIdentifier":"t_rational_68719476735_by_1","typeString":"int_const 68719476735"},"value":"68719476735"},"visibility":"internal"},{"constant":true,"id":10716,"mutability":"constant","name":"MAX_VALID_LIQUIDATION_PROTOCOL_FEE","nameLocation":"4941:34:72","nodeType":"VariableDeclaration","scope":11857,"src":"4915:68:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10714,"name":"uint256","nodeType":"ElementaryTypeName","src":"4915:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3635353335","id":10715,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4978:5:72","typeDescriptions":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"},"value":"65535"},"visibility":"internal"},{"constant":true,"id":10719,"mutability":"constant","name":"MAX_VALID_EMODE_CATEGORY","nameLocation":"5013:24:72","nodeType":"VariableDeclaration","scope":11857,"src":"4987:56:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10717,"name":"uint256","nodeType":"ElementaryTypeName","src":"4987:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"323535","id":10718,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5040:3:72","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"visibility":"internal"},{"constant":true,"id":10722,"mutability":"constant","name":"MAX_VALID_UNBACKED_MINT_CAP","nameLocation":"5073:27:72","nodeType":"VariableDeclaration","scope":11857,"src":"5047:67:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10720,"name":"uint256","nodeType":"ElementaryTypeName","src":"5047:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3638373139343736373335","id":10721,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5103:11:72","typeDescriptions":{"typeIdentifier":"t_rational_68719476735_by_1","typeString":"int_const 68719476735"},"value":"68719476735"},"visibility":"internal"},{"constant":true,"id":10725,"mutability":"constant","name":"MAX_VALID_DEBT_CEILING","nameLocation":"5144:22:72","nodeType":"VariableDeclaration","scope":11857,"src":"5118:64:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10723,"name":"uint256","nodeType":"ElementaryTypeName","src":"5118:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31303939353131363237373735","id":10724,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5169:13:72","typeDescriptions":{"typeIdentifier":"t_rational_1099511627775_by_1","typeString":"int_const 1099511627775"},"value":"1099511627775"},"visibility":"internal"},{"constant":true,"functionSelector":"280d5de9","id":10728,"mutability":"constant","name":"DEBT_CEILING_DECIMALS","nameLocation":"5211:21:72","nodeType":"VariableDeclaration","scope":11857,"src":"5187:49:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10726,"name":"uint256","nodeType":"ElementaryTypeName","src":"5187:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":10727,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5235:1:72","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"public"},{"constant":true,"functionSelector":"31b561ba","id":10731,"mutability":"constant","name":"MAX_RESERVES_COUNT","nameLocation":"5263:18:72","nodeType":"VariableDeclaration","scope":11857,"src":"5240:47:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":10729,"name":"uint16","nodeType":"ElementaryTypeName","src":"5240:6:72","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"value":{"hexValue":"313238","id":10730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5284:3:72","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"visibility":"public"},{"body":{"id":10760,"nodeType":"Block","src":"5516:107:72","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10741,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10737,"src":"5530:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":10742,"name":"MAX_VALID_LTV","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10695,"src":"5537:13:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5530:20:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":10744,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"5552:6:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":10745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_LTV","nodeType":"MemberAccess","referencedDeclaration":12557,"src":"5552:18:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":10740,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5522:7:72","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10746,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5522:49:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10747,"nodeType":"ExpressionStatement","src":"5522:49:72"},{"expression":{"id":10758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":10748,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10735,"src":"5578:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":10750,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"5578:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":10751,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10735,"src":"5591:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":10752,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"5591:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":10753,"name":"LTV_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10583,"src":"5603:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5591:20:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10755,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5590:22:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"id":10756,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10737,"src":"5615:3:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5590:28:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5578:40:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10759,"nodeType":"ExpressionStatement","src":"5578:40:72"}]},"documentation":{"id":10732,"nodeType":"StructuredDocumentation","src":"5292:131:72","text":" @notice Sets the Loan to Value of the reserve\n @param self The reserve configuration\n @param ltv The new ltv"},"id":10761,"implemented":true,"kind":"function","modifiers":[],"name":"setLtv","nameLocation":"5435:6:72","nodeType":"FunctionDefinition","parameters":{"id":10738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10735,"mutability":"mutable","name":"self","nameLocation":"5483:4:72","nodeType":"VariableDeclaration","scope":10761,"src":"5442:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":10734,"nodeType":"UserDefinedTypeName","pathNode":{"id":10733,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"5442:33:72"},"referencedDeclaration":21318,"src":"5442:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":10737,"mutability":"mutable","name":"ltv","nameLocation":"5497:3:72","nodeType":"VariableDeclaration","scope":10761,"src":"5489:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10736,"name":"uint256","nodeType":"ElementaryTypeName","src":"5489:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5441:60:72"},"returnParameters":{"id":10739,"nodeType":"ParameterList","parameters":[],"src":"5516:0:72"},"scope":11857,"src":"5426:197:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10776,"nodeType":"Block","src":"5859:39:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":10770,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10765,"src":"5872:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":10771,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"5872:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":10773,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"5884:9:72","subExpression":{"id":10772,"name":"LTV_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10583,"src":"5885:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5872:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10769,"id":10775,"nodeType":"Return","src":"5865:28:72"}]},"documentation":{"id":10762,"nodeType":"StructuredDocumentation","src":"5627:134:72","text":" @notice Gets the Loan to Value of the reserve\n @param self The reserve configuration\n @return The loan to value"},"id":10777,"implemented":true,"kind":"function","modifiers":[],"name":"getLtv","nameLocation":"5773:6:72","nodeType":"FunctionDefinition","parameters":{"id":10766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10765,"mutability":"mutable","name":"self","nameLocation":"5821:4:72","nodeType":"VariableDeclaration","scope":10777,"src":"5780:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":10764,"nodeType":"UserDefinedTypeName","pathNode":{"id":10763,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"5780:33:72"},"referencedDeclaration":21318,"src":"5780:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"5779:47:72"},"returnParameters":{"id":10769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10768,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10777,"src":"5850:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10767,"name":"uint256","nodeType":"ElementaryTypeName","src":"5850:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5849:9:72"},"scope":11857,"src":"5764:134:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10809,"nodeType":"Block","src":"6193:223:72","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10787,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10783,"src":"6207:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":10788,"name":"MAX_VALID_LIQUIDATION_THRESHOLD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10698,"src":"6220:31:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6207:44:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":10790,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"6253:6:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":10791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_LIQ_THRESHOLD","nodeType":"MemberAccess","referencedDeclaration":12560,"src":"6253:28:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":10786,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6199:7:72","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6199:83:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10793,"nodeType":"ExpressionStatement","src":"6199:83:72"},{"expression":{"id":10807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":10794,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10781,"src":"6289:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":10796,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"6289:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":10797,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10781,"src":"6308:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":10798,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"6308:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":10799,"name":"LIQUIDATION_THRESHOLD_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10586,"src":"6320:26:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6308:38:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10801,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6307:40:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10802,"name":"threshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10783,"src":"6357:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":10803,"name":"LIQUIDATION_THRESHOLD_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10641,"src":"6370:40:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6357:53:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10805,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6356:55:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6307:104:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6289:122:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10808,"nodeType":"ExpressionStatement","src":"6289:122:72"}]},"documentation":{"id":10778,"nodeType":"StructuredDocumentation","src":"5902:163:72","text":" @notice Sets the liquidation threshold of the reserve\n @param self The reserve configuration\n @param threshold The new liquidation threshold"},"id":10810,"implemented":true,"kind":"function","modifiers":[],"name":"setLiquidationThreshold","nameLocation":"6077:23:72","nodeType":"FunctionDefinition","parameters":{"id":10784,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10781,"mutability":"mutable","name":"self","nameLocation":"6147:4:72","nodeType":"VariableDeclaration","scope":10810,"src":"6106:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":10780,"nodeType":"UserDefinedTypeName","pathNode":{"id":10779,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"6106:33:72"},"referencedDeclaration":21318,"src":"6106:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":10783,"mutability":"mutable","name":"threshold","nameLocation":"6165:9:72","nodeType":"VariableDeclaration","scope":10810,"src":"6157:17:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10782,"name":"uint256","nodeType":"ElementaryTypeName","src":"6157:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6100:78:72"},"returnParameters":{"id":10785,"nodeType":"ParameterList","parameters":[],"src":"6193:0:72"},"scope":11857,"src":"6068:348:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10828,"nodeType":"Block","src":"6693:103:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":10819,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10814,"src":"6707:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":10820,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"6707:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":10822,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"6719:27:72","subExpression":{"id":10821,"name":"LIQUIDATION_THRESHOLD_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10586,"src":"6720:26:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6707:39:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10824,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6706:41:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":10825,"name":"LIQUIDATION_THRESHOLD_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10641,"src":"6751:40:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6706:85:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10818,"id":10827,"nodeType":"Return","src":"6699:92:72"}]},"documentation":{"id":10811,"nodeType":"StructuredDocumentation","src":"6420:150:72","text":" @notice Gets the liquidation threshold of the reserve\n @param self The reserve configuration\n @return The liquidation threshold"},"id":10829,"implemented":true,"kind":"function","modifiers":[],"name":"getLiquidationThreshold","nameLocation":"6582:23:72","nodeType":"FunctionDefinition","parameters":{"id":10815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10814,"mutability":"mutable","name":"self","nameLocation":"6652:4:72","nodeType":"VariableDeclaration","scope":10829,"src":"6611:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":10813,"nodeType":"UserDefinedTypeName","pathNode":{"id":10812,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"6611:33:72"},"referencedDeclaration":21318,"src":"6611:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"6605:55:72"},"returnParameters":{"id":10818,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10817,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10829,"src":"6684:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10816,"name":"uint256","nodeType":"ElementaryTypeName","src":"6684:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6683:9:72"},"scope":11857,"src":"6573:223:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10861,"nodeType":"Block","src":"7071:199:72","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10839,"name":"bonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10835,"src":"7085:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":10840,"name":"MAX_VALID_LIQUIDATION_BONUS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10701,"src":"7094:27:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7085:36:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":10842,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"7123:6:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":10843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_LIQ_BONUS","nodeType":"MemberAccess","referencedDeclaration":12563,"src":"7123:24:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":10838,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7077:7:72","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10844,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7077:71:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10845,"nodeType":"ExpressionStatement","src":"7077:71:72"},{"expression":{"id":10859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":10846,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10833,"src":"7155:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":10848,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"7155:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":10849,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10833,"src":"7174:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":10850,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"7174:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":10851,"name":"LIQUIDATION_BONUS_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10589,"src":"7186:22:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7174:34:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10853,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7173:36:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10854,"name":"bonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10835,"src":"7219:5:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":10855,"name":"LIQUIDATION_BONUS_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10644,"src":"7228:36:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7219:45:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10857,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7218:47:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7173:92:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7155:110:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10860,"nodeType":"ExpressionStatement","src":"7155:110:72"}]},"documentation":{"id":10830,"nodeType":"StructuredDocumentation","src":"6800:151:72","text":" @notice Sets the liquidation bonus of the reserve\n @param self The reserve configuration\n @param bonus The new liquidation bonus"},"id":10862,"implemented":true,"kind":"function","modifiers":[],"name":"setLiquidationBonus","nameLocation":"6963:19:72","nodeType":"FunctionDefinition","parameters":{"id":10836,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10833,"mutability":"mutable","name":"self","nameLocation":"7029:4:72","nodeType":"VariableDeclaration","scope":10862,"src":"6988:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":10832,"nodeType":"UserDefinedTypeName","pathNode":{"id":10831,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"6988:33:72"},"referencedDeclaration":21318,"src":"6988:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":10835,"mutability":"mutable","name":"bonus","nameLocation":"7047:5:72","nodeType":"VariableDeclaration","scope":10862,"src":"7039:13:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10834,"name":"uint256","nodeType":"ElementaryTypeName","src":"7039:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6982:74:72"},"returnParameters":{"id":10837,"nodeType":"ParameterList","parameters":[],"src":"7071:0:72"},"scope":11857,"src":"6954:316:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10880,"nodeType":"Block","src":"7535:95:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":10871,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10866,"src":"7549:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":10872,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"7549:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":10874,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"7561:23:72","subExpression":{"id":10873,"name":"LIQUIDATION_BONUS_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10589,"src":"7562:22:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7549:35:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10876,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7548:37:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":10877,"name":"LIQUIDATION_BONUS_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10644,"src":"7589:36:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7548:77:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10870,"id":10879,"nodeType":"Return","src":"7541:84:72"}]},"documentation":{"id":10863,"nodeType":"StructuredDocumentation","src":"7274:142:72","text":" @notice Gets the liquidation bonus of the reserve\n @param self The reserve configuration\n @return The liquidation bonus"},"id":10881,"implemented":true,"kind":"function","modifiers":[],"name":"getLiquidationBonus","nameLocation":"7428:19:72","nodeType":"FunctionDefinition","parameters":{"id":10867,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10866,"mutability":"mutable","name":"self","nameLocation":"7494:4:72","nodeType":"VariableDeclaration","scope":10881,"src":"7453:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":10865,"nodeType":"UserDefinedTypeName","pathNode":{"id":10864,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"7453:33:72"},"referencedDeclaration":21318,"src":"7453:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"7447:55:72"},"returnParameters":{"id":10870,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10869,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10881,"src":"7526:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10868,"name":"uint256","nodeType":"ElementaryTypeName","src":"7526:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7525:9:72"},"scope":11857,"src":"7419:211:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10913,"nodeType":"Block","src":"7905:173:72","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10891,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10887,"src":"7919:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":10892,"name":"MAX_VALID_DECIMALS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10704,"src":"7931:18:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7919:30:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":10894,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"7951:6:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":10895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_DECIMALS","nodeType":"MemberAccess","referencedDeclaration":12566,"src":"7951:23:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":10890,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7911:7:72","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":10896,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7911:64:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10897,"nodeType":"ExpressionStatement","src":"7911:64:72"},{"expression":{"id":10911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":10898,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10885,"src":"7982:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":10900,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"7982:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":10901,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10885,"src":"7995:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":10902,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"7995:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":10903,"name":"DECIMALS_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10592,"src":"8007:13:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7995:25:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10905,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7994:27:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10906,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10887,"src":"8025:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":10907,"name":"RESERVE_DECIMALS_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10647,"src":"8037:35:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8025:47:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10909,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8024:49:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7994:79:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7982:91:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10912,"nodeType":"ExpressionStatement","src":"7982:91:72"}]},"documentation":{"id":10882,"nodeType":"StructuredDocumentation","src":"7634:156:72","text":" @notice Sets the decimals of the underlying asset of the reserve\n @param self The reserve configuration\n @param decimals The decimals"},"id":10914,"implemented":true,"kind":"function","modifiers":[],"name":"setDecimals","nameLocation":"7802:11:72","nodeType":"FunctionDefinition","parameters":{"id":10888,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10885,"mutability":"mutable","name":"self","nameLocation":"7860:4:72","nodeType":"VariableDeclaration","scope":10914,"src":"7819:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":10884,"nodeType":"UserDefinedTypeName","pathNode":{"id":10883,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"7819:33:72"},"referencedDeclaration":21318,"src":"7819:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":10887,"mutability":"mutable","name":"decimals","nameLocation":"7878:8:72","nodeType":"VariableDeclaration","scope":10914,"src":"7870:16:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10886,"name":"uint256","nodeType":"ElementaryTypeName","src":"7870:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7813:77:72"},"returnParameters":{"id":10889,"nodeType":"ParameterList","parameters":[],"src":"7905:0:72"},"scope":11857,"src":"7793:285:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10932,"nodeType":"Block","src":"8354:85:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":10923,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10918,"src":"8368:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":10924,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"8368:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":10926,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"8380:14:72","subExpression":{"id":10925,"name":"DECIMALS_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10592,"src":"8381:13:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8368:26:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10928,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8367:28:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":10929,"name":"RESERVE_DECIMALS_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10647,"src":"8399:35:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8367:67:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10922,"id":10931,"nodeType":"Return","src":"8360:74:72"}]},"documentation":{"id":10915,"nodeType":"StructuredDocumentation","src":"8082:161:72","text":" @notice Gets the decimals of the underlying asset of the reserve\n @param self The reserve configuration\n @return The decimals of the asset"},"id":10933,"implemented":true,"kind":"function","modifiers":[],"name":"getDecimals","nameLocation":"8255:11:72","nodeType":"FunctionDefinition","parameters":{"id":10919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10918,"mutability":"mutable","name":"self","nameLocation":"8313:4:72","nodeType":"VariableDeclaration","scope":10933,"src":"8272:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":10917,"nodeType":"UserDefinedTypeName","pathNode":{"id":10916,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"8272:33:72"},"referencedDeclaration":21318,"src":"8272:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"8266:55:72"},"returnParameters":{"id":10922,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10921,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10933,"src":"8345:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10920,"name":"uint256","nodeType":"ElementaryTypeName","src":"8345:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8344:9:72"},"scope":11857,"src":"8246:193:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10963,"nodeType":"Block","src":"8677:120:72","statements":[{"expression":{"id":10961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":10942,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10937,"src":"8683:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":10944,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"8683:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":10945,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10937,"src":"8702:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":10946,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"8702:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":10947,"name":"ACTIVE_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10595,"src":"8714:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8702:23:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10949,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8701:25:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"condition":{"id":10952,"name":"active","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10939,"src":"8744:6:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":10954,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8757:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":10955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"8744:14:72","trueExpression":{"hexValue":"31","id":10953,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8753:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":10951,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8736:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":10950,"name":"uint256","nodeType":"ElementaryTypeName","src":"8736:7:72","typeDescriptions":{}}},"id":10956,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8736:23:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":10957,"name":"IS_ACTIVE_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10650,"src":"8763:28:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8736:55:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10959,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8735:57:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8701:91:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8683:109:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10962,"nodeType":"ExpressionStatement","src":"8683:109:72"}]},"documentation":{"id":10934,"nodeType":"StructuredDocumentation","src":"8443:138:72","text":" @notice Sets the active state of the reserve\n @param self The reserve configuration\n @param active The active state"},"id":10964,"implemented":true,"kind":"function","modifiers":[],"name":"setActive","nameLocation":"8593:9:72","nodeType":"FunctionDefinition","parameters":{"id":10940,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10937,"mutability":"mutable","name":"self","nameLocation":"8644:4:72","nodeType":"VariableDeclaration","scope":10964,"src":"8603:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":10936,"nodeType":"UserDefinedTypeName","pathNode":{"id":10935,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"8603:33:72"},"referencedDeclaration":21318,"src":"8603:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":10939,"mutability":"mutable","name":"active","nameLocation":"8655:6:72","nodeType":"VariableDeclaration","scope":10964,"src":"8650:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10938,"name":"bool","nodeType":"ElementaryTypeName","src":"8650:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8602:60:72"},"returnParameters":{"id":10941,"nodeType":"ParameterList","parameters":[],"src":"8677:0:72"},"scope":11857,"src":"8584:213:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10982,"nodeType":"Block","src":"9031:49:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":10973,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10968,"src":"9045:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":10974,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"9045:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":10976,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"9057:12:72","subExpression":{"id":10975,"name":"ACTIVE_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10595,"src":"9058:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9045:24:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10978,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9044:26:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":10979,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9074:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9044:31:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":10972,"id":10981,"nodeType":"Return","src":"9037:38:72"}]},"documentation":{"id":10965,"nodeType":"StructuredDocumentation","src":"8801:132:72","text":" @notice Gets the active state of the reserve\n @param self The reserve configuration\n @return The active state"},"id":10983,"implemented":true,"kind":"function","modifiers":[],"name":"getActive","nameLocation":"8945:9:72","nodeType":"FunctionDefinition","parameters":{"id":10969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10968,"mutability":"mutable","name":"self","nameLocation":"8996:4:72","nodeType":"VariableDeclaration","scope":10983,"src":"8955:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":10967,"nodeType":"UserDefinedTypeName","pathNode":{"id":10966,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"8955:33:72"},"referencedDeclaration":21318,"src":"8955:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"8954:47:72"},"returnParameters":{"id":10972,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10971,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10983,"src":"9025:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10970,"name":"bool","nodeType":"ElementaryTypeName","src":"9025:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9024:6:72"},"scope":11857,"src":"8936:144:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11013,"nodeType":"Block","src":"9318:120:72","statements":[{"expression":{"id":11011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":10992,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10987,"src":"9324:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":10994,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"9324:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11010,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":10995,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10987,"src":"9343:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":10996,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"9343:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":10997,"name":"FROZEN_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10598,"src":"9355:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9343:23:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10999,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9342:25:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"condition":{"id":11002,"name":"frozen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10989,"src":"9385:6:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":11004,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9398:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":11005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"9385:14:72","trueExpression":{"hexValue":"31","id":11003,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9394:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":11001,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9377:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":11000,"name":"uint256","nodeType":"ElementaryTypeName","src":"9377:7:72","typeDescriptions":{}}},"id":11006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9377:23:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":11007,"name":"IS_FROZEN_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10653,"src":"9404:28:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9377:55:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11009,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9376:57:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9342:91:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9324:109:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11012,"nodeType":"ExpressionStatement","src":"9324:109:72"}]},"documentation":{"id":10984,"nodeType":"StructuredDocumentation","src":"9084:138:72","text":" @notice Sets the frozen state of the reserve\n @param self The reserve configuration\n @param frozen The frozen state"},"id":11014,"implemented":true,"kind":"function","modifiers":[],"name":"setFrozen","nameLocation":"9234:9:72","nodeType":"FunctionDefinition","parameters":{"id":10990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10987,"mutability":"mutable","name":"self","nameLocation":"9285:4:72","nodeType":"VariableDeclaration","scope":11014,"src":"9244:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":10986,"nodeType":"UserDefinedTypeName","pathNode":{"id":10985,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"9244:33:72"},"referencedDeclaration":21318,"src":"9244:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":10989,"mutability":"mutable","name":"frozen","nameLocation":"9296:6:72","nodeType":"VariableDeclaration","scope":11014,"src":"9291:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10988,"name":"bool","nodeType":"ElementaryTypeName","src":"9291:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9243:60:72"},"returnParameters":{"id":10991,"nodeType":"ParameterList","parameters":[],"src":"9318:0:72"},"scope":11857,"src":"9225:213:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11032,"nodeType":"Block","src":"9672:49:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11023,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11018,"src":"9686:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11024,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"9686:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11026,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"9698:12:72","subExpression":{"id":11025,"name":"FROZEN_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10598,"src":"9699:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9686:24:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11028,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9685:26:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":11029,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9715:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9685:31:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":11022,"id":11031,"nodeType":"Return","src":"9678:38:72"}]},"documentation":{"id":11015,"nodeType":"StructuredDocumentation","src":"9442:132:72","text":" @notice Gets the frozen state of the reserve\n @param self The reserve configuration\n @return The frozen state"},"id":11033,"implemented":true,"kind":"function","modifiers":[],"name":"getFrozen","nameLocation":"9586:9:72","nodeType":"FunctionDefinition","parameters":{"id":11019,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11018,"mutability":"mutable","name":"self","nameLocation":"9637:4:72","nodeType":"VariableDeclaration","scope":11033,"src":"9596:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11017,"nodeType":"UserDefinedTypeName","pathNode":{"id":11016,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"9596:33:72"},"referencedDeclaration":21318,"src":"9596:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"9595:47:72"},"returnParameters":{"id":11022,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11021,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11033,"src":"9666:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11020,"name":"bool","nodeType":"ElementaryTypeName","src":"9666:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9665:6:72"},"scope":11857,"src":"9577:144:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11063,"nodeType":"Block","src":"9959:120:72","statements":[{"expression":{"id":11061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11042,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11037,"src":"9965:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11044,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"9965:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11045,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11037,"src":"9984:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11046,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"9984:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11047,"name":"PAUSED_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10607,"src":"9996:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9984:23:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11049,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9983:25:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"condition":{"id":11052,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11039,"src":"10026:6:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":11054,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10039:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":11055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"10026:14:72","trueExpression":{"hexValue":"31","id":11053,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10035:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":11051,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10018:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":11050,"name":"uint256","nodeType":"ElementaryTypeName","src":"10018:7:72","typeDescriptions":{}}},"id":11056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10018:23:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":11057,"name":"IS_PAUSED_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10662,"src":"10045:28:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10018:55:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11059,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10017:57:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9983:91:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9965:109:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11062,"nodeType":"ExpressionStatement","src":"9965:109:72"}]},"documentation":{"id":11034,"nodeType":"StructuredDocumentation","src":"9725:138:72","text":" @notice Sets the paused state of the reserve\n @param self The reserve configuration\n @param paused The paused state"},"id":11064,"implemented":true,"kind":"function","modifiers":[],"name":"setPaused","nameLocation":"9875:9:72","nodeType":"FunctionDefinition","parameters":{"id":11040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11037,"mutability":"mutable","name":"self","nameLocation":"9926:4:72","nodeType":"VariableDeclaration","scope":11064,"src":"9885:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11036,"nodeType":"UserDefinedTypeName","pathNode":{"id":11035,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"9885:33:72"},"referencedDeclaration":21318,"src":"9885:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":11039,"mutability":"mutable","name":"paused","nameLocation":"9937:6:72","nodeType":"VariableDeclaration","scope":11064,"src":"9932:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11038,"name":"bool","nodeType":"ElementaryTypeName","src":"9932:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9884:60:72"},"returnParameters":{"id":11041,"nodeType":"ParameterList","parameters":[],"src":"9959:0:72"},"scope":11857,"src":"9866:213:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11082,"nodeType":"Block","src":"10313:49:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11073,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11068,"src":"10327:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11074,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"10327:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11076,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"10339:12:72","subExpression":{"id":11075,"name":"PAUSED_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10607,"src":"10340:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10327:24:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11078,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10326:26:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":11079,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10356:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10326:31:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":11072,"id":11081,"nodeType":"Return","src":"10319:38:72"}]},"documentation":{"id":11065,"nodeType":"StructuredDocumentation","src":"10083:132:72","text":" @notice Gets the paused state of the reserve\n @param self The reserve configuration\n @return The paused state"},"id":11083,"implemented":true,"kind":"function","modifiers":[],"name":"getPaused","nameLocation":"10227:9:72","nodeType":"FunctionDefinition","parameters":{"id":11069,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11068,"mutability":"mutable","name":"self","nameLocation":"10278:4:72","nodeType":"VariableDeclaration","scope":11083,"src":"10237:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11067,"nodeType":"UserDefinedTypeName","pathNode":{"id":11066,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"10237:33:72"},"referencedDeclaration":21318,"src":"10237:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"10236:47:72"},"returnParameters":{"id":11072,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11071,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11083,"src":"10307:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11070,"name":"bool","nodeType":"ElementaryTypeName","src":"10307:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10306:6:72"},"scope":11857,"src":"10218:144:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11113,"nodeType":"Block","src":"11026:155:72","statements":[{"expression":{"id":11111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11092,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11087,"src":"11032:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11094,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"11032:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11095,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11087,"src":"11051:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11096,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"11051:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11097,"name":"BORROWABLE_IN_ISOLATION_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10610,"src":"11063:28:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11051:40:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11099,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11050:42:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"condition":{"id":11102,"name":"borrowable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11089,"src":"11110:10:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":11104,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11127:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":11105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11110:18:72","trueExpression":{"hexValue":"31","id":11103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11123:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":11101,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11102:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":11100,"name":"uint256","nodeType":"ElementaryTypeName","src":"11102:7:72","typeDescriptions":{}}},"id":11106,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11102:27:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":11107,"name":"BORROWABLE_IN_ISOLATION_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10665,"src":"11133:42:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11102:73:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11109,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11101:75:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11050:126:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11032:144:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11112,"nodeType":"ExpressionStatement","src":"11032:144:72"}]},"documentation":{"id":11084,"nodeType":"StructuredDocumentation","src":"10366:533:72","text":" @notice Sets the borrowable in isolation flag for the reserve.\n @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\n amount will be accumulated in the isolated collateral's total debt exposure.\n @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\n consistency in the debt ceiling calculations.\n @param self The reserve configuration\n @param borrowable True if the asset is borrowable"},"id":11114,"implemented":true,"kind":"function","modifiers":[],"name":"setBorrowableInIsolation","nameLocation":"10911:24:72","nodeType":"FunctionDefinition","parameters":{"id":11090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11087,"mutability":"mutable","name":"self","nameLocation":"10982:4:72","nodeType":"VariableDeclaration","scope":11114,"src":"10941:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11086,"nodeType":"UserDefinedTypeName","pathNode":{"id":11085,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"10941:33:72"},"referencedDeclaration":21318,"src":"10941:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":11089,"mutability":"mutable","name":"borrowable","nameLocation":"10997:10:72","nodeType":"VariableDeclaration","scope":11114,"src":"10992:15:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11088,"name":"bool","nodeType":"ElementaryTypeName","src":"10992:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10935:76:72"},"returnParameters":{"id":11091,"nodeType":"ParameterList","parameters":[],"src":"11026:0:72"},"scope":11857,"src":"10902:279:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11132,"nodeType":"Block","src":"11838:66:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11123,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11118,"src":"11852:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11124,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"11852:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11126,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"11864:29:72","subExpression":{"id":11125,"name":"BORROWABLE_IN_ISOLATION_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10610,"src":"11865:28:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11852:41:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11128,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11851:43:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":11129,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11898:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11851:48:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":11122,"id":11131,"nodeType":"Return","src":"11844:55:72"}]},"documentation":{"id":11115,"nodeType":"StructuredDocumentation","src":"11185:532:72","text":" @notice Gets the borrowable in isolation flag for the reserve.\n @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\n isolated collateral is accounted for in the isolated collateral's total debt exposure.\n @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\n consistency in the debt ceiling calculations.\n @param self The reserve configuration\n @return The borrowable in isolation flag"},"id":11133,"implemented":true,"kind":"function","modifiers":[],"name":"getBorrowableInIsolation","nameLocation":"11729:24:72","nodeType":"FunctionDefinition","parameters":{"id":11119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11118,"mutability":"mutable","name":"self","nameLocation":"11800:4:72","nodeType":"VariableDeclaration","scope":11133,"src":"11759:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11117,"nodeType":"UserDefinedTypeName","pathNode":{"id":11116,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"11759:33:72"},"referencedDeclaration":21318,"src":"11759:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"11753:55:72"},"returnParameters":{"id":11122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11121,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11133,"src":"11832:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11120,"name":"bool","nodeType":"ElementaryTypeName","src":"11832:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11831:6:72"},"scope":11857,"src":"11720:184:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11163,"nodeType":"Block","src":"12300:137:72","statements":[{"expression":{"id":11161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11142,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11137,"src":"12306:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11144,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"12306:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11145,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11137,"src":"12325:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11146,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"12325:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11147,"name":"SILOED_BORROWING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10613,"src":"12337:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12325:33:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11149,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12324:35:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"condition":{"id":11152,"name":"siloed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11139,"src":"12377:6:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":11154,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12390:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":11155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"12377:14:72","trueExpression":{"hexValue":"31","id":11153,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12386:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":11151,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12369:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":11150,"name":"uint256","nodeType":"ElementaryTypeName","src":"12369:7:72","typeDescriptions":{}}},"id":11156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12369:23:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":11157,"name":"SILOED_BORROWING_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10668,"src":"12396:35:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12369:62:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11159,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12368:64:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12324:108:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12306:126:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11162,"nodeType":"ExpressionStatement","src":"12306:126:72"}]},"documentation":{"id":11134,"nodeType":"StructuredDocumentation","src":"11908:275:72","text":" @notice Sets the siloed borrowing flag for the reserve.\n @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\n @param self The reserve configuration\n @param siloed True if the asset is siloed"},"id":11164,"implemented":true,"kind":"function","modifiers":[],"name":"setSiloedBorrowing","nameLocation":"12195:18:72","nodeType":"FunctionDefinition","parameters":{"id":11140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11137,"mutability":"mutable","name":"self","nameLocation":"12260:4:72","nodeType":"VariableDeclaration","scope":11164,"src":"12219:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11136,"nodeType":"UserDefinedTypeName","pathNode":{"id":11135,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"12219:33:72"},"referencedDeclaration":21318,"src":"12219:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":11139,"mutability":"mutable","name":"siloed","nameLocation":"12275:6:72","nodeType":"VariableDeclaration","scope":11164,"src":"12270:11:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11138,"name":"bool","nodeType":"ElementaryTypeName","src":"12270:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12213:72:72"},"returnParameters":{"id":11141,"nodeType":"ParameterList","parameters":[],"src":"12300:0:72"},"scope":11857,"src":"12186:251:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11182,"nodeType":"Block","src":"12823:59:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11173,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11168,"src":"12837:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11174,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"12837:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11176,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"12849:22:72","subExpression":{"id":11175,"name":"SILOED_BORROWING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10613,"src":"12850:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12837:34:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11178,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12836:36:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":11179,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12876:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12836:41:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":11172,"id":11181,"nodeType":"Return","src":"12829:48:72"}]},"documentation":{"id":11165,"nodeType":"StructuredDocumentation","src":"12441:267:72","text":" @notice Gets the siloed borrowing flag for the reserve.\n @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\n @param self The reserve configuration\n @return The siloed borrowing flag"},"id":11183,"implemented":true,"kind":"function","modifiers":[],"name":"getSiloedBorrowing","nameLocation":"12720:18:72","nodeType":"FunctionDefinition","parameters":{"id":11169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11168,"mutability":"mutable","name":"self","nameLocation":"12785:4:72","nodeType":"VariableDeclaration","scope":11183,"src":"12744:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11167,"nodeType":"UserDefinedTypeName","pathNode":{"id":11166,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"12744:33:72"},"referencedDeclaration":21318,"src":"12744:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"12738:55:72"},"returnParameters":{"id":11172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11171,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11183,"src":"12817:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11170,"name":"bool","nodeType":"ElementaryTypeName","src":"12817:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12816:6:72"},"scope":11857,"src":"12711:171:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11213,"nodeType":"Block","src":"13194:132:72","statements":[{"expression":{"id":11211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11192,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11187,"src":"13200:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11194,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"13200:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11195,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11187,"src":"13219:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11196,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"13219:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11197,"name":"BORROWING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10601,"src":"13231:14:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13219:26:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11199,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13218:28:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"condition":{"id":11202,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11189,"src":"13264:7:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":11204,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13278:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":11205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"13264:15:72","trueExpression":{"hexValue":"31","id":11203,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13274:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":11201,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13256:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":11200,"name":"uint256","nodeType":"ElementaryTypeName","src":"13256:7:72","typeDescriptions":{}}},"id":11206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13256:24:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":11207,"name":"BORROWING_ENABLED_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10656,"src":"13284:36:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13256:64:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11209,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13255:66:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13218:103:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13200:121:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11212,"nodeType":"ExpressionStatement","src":"13200:121:72"}]},"documentation":{"id":11184,"nodeType":"StructuredDocumentation","src":"12886:189:72","text":" @notice Enables or disables borrowing on the reserve\n @param self The reserve configuration\n @param enabled True if the borrowing needs to be enabled, false otherwise"},"id":11214,"implemented":true,"kind":"function","modifiers":[],"name":"setBorrowingEnabled","nameLocation":"13087:19:72","nodeType":"FunctionDefinition","parameters":{"id":11190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11187,"mutability":"mutable","name":"self","nameLocation":"13153:4:72","nodeType":"VariableDeclaration","scope":11214,"src":"13112:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11186,"nodeType":"UserDefinedTypeName","pathNode":{"id":11185,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"13112:33:72"},"referencedDeclaration":21318,"src":"13112:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":11189,"mutability":"mutable","name":"enabled","nameLocation":"13168:7:72","nodeType":"VariableDeclaration","scope":11214,"src":"13163:12:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11188,"name":"bool","nodeType":"ElementaryTypeName","src":"13163:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13106:73:72"},"returnParameters":{"id":11191,"nodeType":"ParameterList","parameters":[],"src":"13194:0:72"},"scope":11857,"src":"13078:248:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11232,"nodeType":"Block","src":"13584:52:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11223,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11218,"src":"13598:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11224,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"13598:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11226,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"13610:15:72","subExpression":{"id":11225,"name":"BORROWING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10601,"src":"13611:14:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13598:27:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11228,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13597:29:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":11229,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13630:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13597:34:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":11222,"id":11231,"nodeType":"Return","src":"13590:41:72"}]},"documentation":{"id":11215,"nodeType":"StructuredDocumentation","src":"13330:138:72","text":" @notice Gets the borrowing state of the reserve\n @param self The reserve configuration\n @return The borrowing state"},"id":11233,"implemented":true,"kind":"function","modifiers":[],"name":"getBorrowingEnabled","nameLocation":"13480:19:72","nodeType":"FunctionDefinition","parameters":{"id":11219,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11218,"mutability":"mutable","name":"self","nameLocation":"13546:4:72","nodeType":"VariableDeclaration","scope":11233,"src":"13505:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11217,"nodeType":"UserDefinedTypeName","pathNode":{"id":11216,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"13505:33:72"},"referencedDeclaration":21318,"src":"13505:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"13499:55:72"},"returnParameters":{"id":11222,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11221,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11233,"src":"13578:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11220,"name":"bool","nodeType":"ElementaryTypeName","src":"13578:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13577:6:72"},"scope":11857,"src":"13471:165:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11263,"nodeType":"Block","src":"13982:146:72","statements":[{"expression":{"id":11261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11242,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11237,"src":"13988:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11244,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"13988:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11245,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11237,"src":"14007:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11246,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"14007:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11247,"name":"STABLE_BORROWING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10604,"src":"14019:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14007:33:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11249,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14006:35:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"condition":{"id":11252,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11239,"src":"14059:7:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":11254,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14073:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":11255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"14059:15:72","trueExpression":{"hexValue":"31","id":11253,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14069:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":11251,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14051:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":11250,"name":"uint256","nodeType":"ElementaryTypeName","src":"14051:7:72","typeDescriptions":{}}},"id":11256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14051:24:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":11257,"name":"STABLE_BORROWING_ENABLED_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10659,"src":"14079:43:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14051:71:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11259,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14050:73:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14006:117:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13988:135:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11262,"nodeType":"ExpressionStatement","src":"13988:135:72"}]},"documentation":{"id":11234,"nodeType":"StructuredDocumentation","src":"13640:213:72","text":" @notice Enables or disables stable rate borrowing on the reserve\n @param self The reserve configuration\n @param enabled True if the stable rate borrowing needs to be enabled, false otherwise"},"id":11264,"implemented":true,"kind":"function","modifiers":[],"name":"setStableRateBorrowingEnabled","nameLocation":"13865:29:72","nodeType":"FunctionDefinition","parameters":{"id":11240,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11237,"mutability":"mutable","name":"self","nameLocation":"13941:4:72","nodeType":"VariableDeclaration","scope":11264,"src":"13900:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11236,"nodeType":"UserDefinedTypeName","pathNode":{"id":11235,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"13900:33:72"},"referencedDeclaration":21318,"src":"13900:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":11239,"mutability":"mutable","name":"enabled","nameLocation":"13956:7:72","nodeType":"VariableDeclaration","scope":11264,"src":"13951:12:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11238,"name":"bool","nodeType":"ElementaryTypeName","src":"13951:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13894:73:72"},"returnParameters":{"id":11241,"nodeType":"ParameterList","parameters":[],"src":"13982:0:72"},"scope":11857,"src":"13856:272:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11282,"nodeType":"Block","src":"14420:59:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11273,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11268,"src":"14434:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11274,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"14434:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11276,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"14446:22:72","subExpression":{"id":11275,"name":"STABLE_BORROWING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10604,"src":"14447:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14434:34:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11278,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14433:36:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":11279,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14473:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14433:41:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":11272,"id":11281,"nodeType":"Return","src":"14426:48:72"}]},"documentation":{"id":11265,"nodeType":"StructuredDocumentation","src":"14132:162:72","text":" @notice Gets the stable rate borrowing state of the reserve\n @param self The reserve configuration\n @return The stable rate borrowing state"},"id":11283,"implemented":true,"kind":"function","modifiers":[],"name":"getStableRateBorrowingEnabled","nameLocation":"14306:29:72","nodeType":"FunctionDefinition","parameters":{"id":11269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11268,"mutability":"mutable","name":"self","nameLocation":"14382:4:72","nodeType":"VariableDeclaration","scope":11283,"src":"14341:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11267,"nodeType":"UserDefinedTypeName","pathNode":{"id":11266,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"14341:33:72"},"referencedDeclaration":21318,"src":"14341:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"14335:55:72"},"returnParameters":{"id":11272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11271,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11283,"src":"14414:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11270,"name":"bool","nodeType":"ElementaryTypeName","src":"14414:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14413:6:72"},"scope":11857,"src":"14297:182:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11315,"nodeType":"Block","src":"14757:211:72","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11293,"name":"reserveFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11289,"src":"14771:13:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":11294,"name":"MAX_VALID_RESERVE_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10707,"src":"14788:24:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14771:41:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":11296,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"14814:6:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":11297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_RESERVE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":12569,"src":"14814:29:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":11292,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14763:7:72","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11298,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14763:81:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11299,"nodeType":"ExpressionStatement","src":"14763:81:72"},{"expression":{"id":11313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11300,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11287,"src":"14851:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11302,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"14851:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11303,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11287,"src":"14870:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11304,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"14870:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11305,"name":"RESERVE_FACTOR_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10619,"src":"14882:19:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14870:31:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11307,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14869:33:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11308,"name":"reserveFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11289,"src":"14912:13:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":11309,"name":"RESERVE_FACTOR_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10674,"src":"14929:33:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14912:50:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11311,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14911:52:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14869:94:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14851:112:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11314,"nodeType":"ExpressionStatement","src":"14851:112:72"}]},"documentation":{"id":11284,"nodeType":"StructuredDocumentation","src":"14483:149:72","text":" @notice Sets the reserve factor of the reserve\n @param self The reserve configuration\n @param reserveFactor The reserve factor"},"id":11316,"implemented":true,"kind":"function","modifiers":[],"name":"setReserveFactor","nameLocation":"14644:16:72","nodeType":"FunctionDefinition","parameters":{"id":11290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11287,"mutability":"mutable","name":"self","nameLocation":"14707:4:72","nodeType":"VariableDeclaration","scope":11316,"src":"14666:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11286,"nodeType":"UserDefinedTypeName","pathNode":{"id":11285,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"14666:33:72"},"referencedDeclaration":21318,"src":"14666:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":11289,"mutability":"mutable","name":"reserveFactor","nameLocation":"14725:13:72","nodeType":"VariableDeclaration","scope":11316,"src":"14717:21:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11288,"name":"uint256","nodeType":"ElementaryTypeName","src":"14717:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14660:82:72"},"returnParameters":{"id":11291,"nodeType":"ParameterList","parameters":[],"src":"14757:0:72"},"scope":11857,"src":"14635:333:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11334,"nodeType":"Block","src":"15224:89:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11325,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11320,"src":"15238:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11326,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"15238:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11328,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"15250:20:72","subExpression":{"id":11327,"name":"RESERVE_FACTOR_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10619,"src":"15251:19:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15238:32:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11330,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"15237:34:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":11331,"name":"RESERVE_FACTOR_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10674,"src":"15275:33:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15237:71:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11324,"id":11333,"nodeType":"Return","src":"15230:78:72"}]},"documentation":{"id":11317,"nodeType":"StructuredDocumentation","src":"14972:136:72","text":" @notice Gets the reserve factor of the reserve\n @param self The reserve configuration\n @return The reserve factor"},"id":11335,"implemented":true,"kind":"function","modifiers":[],"name":"getReserveFactor","nameLocation":"15120:16:72","nodeType":"FunctionDefinition","parameters":{"id":11321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11320,"mutability":"mutable","name":"self","nameLocation":"15183:4:72","nodeType":"VariableDeclaration","scope":11335,"src":"15142:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11319,"nodeType":"UserDefinedTypeName","pathNode":{"id":11318,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"15142:33:72"},"referencedDeclaration":21318,"src":"15142:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"15136:55:72"},"returnParameters":{"id":11324,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11323,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11335,"src":"15215:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11322,"name":"uint256","nodeType":"ElementaryTypeName","src":"15215:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15214:9:72"},"scope":11857,"src":"15111:202:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11367,"nodeType":"Block","src":"15571:175:72","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11345,"name":"borrowCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11341,"src":"15585:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":11346,"name":"MAX_VALID_BORROW_CAP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10710,"src":"15598:20:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15585:33:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":11348,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"15620:6:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":11349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_BORROW_CAP","nodeType":"MemberAccess","referencedDeclaration":12572,"src":"15620:25:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":11344,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"15577:7:72","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11350,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15577:69:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11351,"nodeType":"ExpressionStatement","src":"15577:69:72"},{"expression":{"id":11365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11352,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11339,"src":"15653:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11354,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"15653:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11358,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11355,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11339,"src":"15666:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11356,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"15666:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11357,"name":"BORROW_CAP_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10622,"src":"15678:15:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15666:27:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11359,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"15665:29:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11360,"name":"borrowCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11341,"src":"15698:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":11361,"name":"BORROW_CAP_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10677,"src":"15711:29:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15698:42:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11363,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"15697:44:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15665:76:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15653:88:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11366,"nodeType":"ExpressionStatement","src":"15653:88:72"}]},"documentation":{"id":11336,"nodeType":"StructuredDocumentation","src":"15317:137:72","text":" @notice Sets the borrow cap of the reserve\n @param self The reserve configuration\n @param borrowCap The borrow cap"},"id":11368,"implemented":true,"kind":"function","modifiers":[],"name":"setBorrowCap","nameLocation":"15466:12:72","nodeType":"FunctionDefinition","parameters":{"id":11342,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11339,"mutability":"mutable","name":"self","nameLocation":"15525:4:72","nodeType":"VariableDeclaration","scope":11368,"src":"15484:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11338,"nodeType":"UserDefinedTypeName","pathNode":{"id":11337,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"15484:33:72"},"referencedDeclaration":21318,"src":"15484:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":11341,"mutability":"mutable","name":"borrowCap","nameLocation":"15543:9:72","nodeType":"VariableDeclaration","scope":11368,"src":"15535:17:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11340,"name":"uint256","nodeType":"ElementaryTypeName","src":"15535:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15478:78:72"},"returnParameters":{"id":11343,"nodeType":"ParameterList","parameters":[],"src":"15571:0:72"},"scope":11857,"src":"15457:289:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11386,"nodeType":"Block","src":"15990:81:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11377,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11372,"src":"16004:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11378,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"16004:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11380,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"16016:16:72","subExpression":{"id":11379,"name":"BORROW_CAP_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10622,"src":"16017:15:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16004:28:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11382,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"16003:30:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":11383,"name":"BORROW_CAP_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10677,"src":"16037:29:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16003:63:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11376,"id":11385,"nodeType":"Return","src":"15996:70:72"}]},"documentation":{"id":11369,"nodeType":"StructuredDocumentation","src":"15750:128:72","text":" @notice Gets the borrow cap of the reserve\n @param self The reserve configuration\n @return The borrow cap"},"id":11387,"implemented":true,"kind":"function","modifiers":[],"name":"getBorrowCap","nameLocation":"15890:12:72","nodeType":"FunctionDefinition","parameters":{"id":11373,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11372,"mutability":"mutable","name":"self","nameLocation":"15949:4:72","nodeType":"VariableDeclaration","scope":11387,"src":"15908:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11371,"nodeType":"UserDefinedTypeName","pathNode":{"id":11370,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"15908:33:72"},"referencedDeclaration":21318,"src":"15908:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"15902:55:72"},"returnParameters":{"id":11376,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11375,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11387,"src":"15981:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11374,"name":"uint256","nodeType":"ElementaryTypeName","src":"15981:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15980:9:72"},"scope":11857,"src":"15881:190:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11419,"nodeType":"Block","src":"16329:175:72","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11397,"name":"supplyCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11393,"src":"16343:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":11398,"name":"MAX_VALID_SUPPLY_CAP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10713,"src":"16356:20:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16343:33:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":11400,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"16378:6:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":11401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_SUPPLY_CAP","nodeType":"MemberAccess","referencedDeclaration":12575,"src":"16378:25:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":11396,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16335:7:72","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11402,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16335:69:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11403,"nodeType":"ExpressionStatement","src":"16335:69:72"},{"expression":{"id":11417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11404,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11391,"src":"16411:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11406,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"16411:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11407,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11391,"src":"16424:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11408,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"16424:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11409,"name":"SUPPLY_CAP_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10625,"src":"16436:15:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16424:27:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11411,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"16423:29:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11412,"name":"supplyCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11393,"src":"16456:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":11413,"name":"SUPPLY_CAP_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10680,"src":"16469:29:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16456:42:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11415,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"16455:44:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16423:76:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16411:88:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11418,"nodeType":"ExpressionStatement","src":"16411:88:72"}]},"documentation":{"id":11388,"nodeType":"StructuredDocumentation","src":"16075:137:72","text":" @notice Sets the supply cap of the reserve\n @param self The reserve configuration\n @param supplyCap The supply cap"},"id":11420,"implemented":true,"kind":"function","modifiers":[],"name":"setSupplyCap","nameLocation":"16224:12:72","nodeType":"FunctionDefinition","parameters":{"id":11394,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11391,"mutability":"mutable","name":"self","nameLocation":"16283:4:72","nodeType":"VariableDeclaration","scope":11420,"src":"16242:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11390,"nodeType":"UserDefinedTypeName","pathNode":{"id":11389,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"16242:33:72"},"referencedDeclaration":21318,"src":"16242:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":11393,"mutability":"mutable","name":"supplyCap","nameLocation":"16301:9:72","nodeType":"VariableDeclaration","scope":11420,"src":"16293:17:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11392,"name":"uint256","nodeType":"ElementaryTypeName","src":"16293:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16236:78:72"},"returnParameters":{"id":11395,"nodeType":"ParameterList","parameters":[],"src":"16329:0:72"},"scope":11857,"src":"16215:289:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11438,"nodeType":"Block","src":"16748:81:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11429,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11424,"src":"16762:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11430,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"16762:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11432,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"16774:16:72","subExpression":{"id":11431,"name":"SUPPLY_CAP_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10625,"src":"16775:15:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16762:28:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11434,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"16761:30:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":11435,"name":"SUPPLY_CAP_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10680,"src":"16795:29:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16761:63:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11428,"id":11437,"nodeType":"Return","src":"16754:70:72"}]},"documentation":{"id":11421,"nodeType":"StructuredDocumentation","src":"16508:128:72","text":" @notice Gets the supply cap of the reserve\n @param self The reserve configuration\n @return The supply cap"},"id":11439,"implemented":true,"kind":"function","modifiers":[],"name":"getSupplyCap","nameLocation":"16648:12:72","nodeType":"FunctionDefinition","parameters":{"id":11425,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11424,"mutability":"mutable","name":"self","nameLocation":"16707:4:72","nodeType":"VariableDeclaration","scope":11439,"src":"16666:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11423,"nodeType":"UserDefinedTypeName","pathNode":{"id":11422,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"16666:33:72"},"referencedDeclaration":21318,"src":"16666:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"16660:55:72"},"returnParameters":{"id":11428,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11427,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11439,"src":"16739:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11426,"name":"uint256","nodeType":"ElementaryTypeName","src":"16739:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16738:9:72"},"scope":11857,"src":"16639:190:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11471,"nodeType":"Block","src":"17128:179:72","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11449,"name":"ceiling","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11445,"src":"17142:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":11450,"name":"MAX_VALID_DEBT_CEILING","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10725,"src":"17153:22:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17142:33:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":11452,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"17177:6:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":11453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_DEBT_CEILING","nodeType":"MemberAccess","referencedDeclaration":12587,"src":"17177:27:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":11448,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17134:7:72","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17134:71:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11455,"nodeType":"ExpressionStatement","src":"17134:71:72"},{"expression":{"id":11469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11456,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11443,"src":"17212:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11458,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"17212:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11459,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11443,"src":"17225:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11460,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"17225:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11461,"name":"DEBT_CEILING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10637,"src":"17237:17:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17225:29:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11463,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17224:31:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11464,"name":"ceiling","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11445,"src":"17259:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":11465,"name":"DEBT_CEILING_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10692,"src":"17270:31:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17259:42:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11467,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17258:44:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17224:78:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17212:90:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11470,"nodeType":"ExpressionStatement","src":"17212:90:72"}]},"documentation":{"id":11440,"nodeType":"StructuredDocumentation","src":"16833:178:72","text":" @notice Sets the debt ceiling in isolation mode for the asset\n @param self The reserve configuration\n @param ceiling The maximum debt ceiling for the asset"},"id":11472,"implemented":true,"kind":"function","modifiers":[],"name":"setDebtCeiling","nameLocation":"17023:14:72","nodeType":"FunctionDefinition","parameters":{"id":11446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11443,"mutability":"mutable","name":"self","nameLocation":"17084:4:72","nodeType":"VariableDeclaration","scope":11472,"src":"17043:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11442,"nodeType":"UserDefinedTypeName","pathNode":{"id":11441,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"17043:33:72"},"referencedDeclaration":21318,"src":"17043:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":11445,"mutability":"mutable","name":"ceiling","nameLocation":"17102:7:72","nodeType":"VariableDeclaration","scope":11472,"src":"17094:15:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11444,"name":"uint256","nodeType":"ElementaryTypeName","src":"17094:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17037:76:72"},"returnParameters":{"id":11447,"nodeType":"ParameterList","parameters":[],"src":"17128:0:72"},"scope":11857,"src":"17014:293:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11490,"nodeType":"Block","src":"17620:85:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11481,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11476,"src":"17634:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11482,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"17634:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11484,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"17646:18:72","subExpression":{"id":11483,"name":"DEBT_CEILING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10637,"src":"17647:17:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17634:30:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11486,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17633:32:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":11487,"name":"DEBT_CEILING_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10692,"src":"17669:31:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17633:67:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11480,"id":11489,"nodeType":"Return","src":"17626:74:72"}]},"documentation":{"id":11473,"nodeType":"StructuredDocumentation","src":"17311:195:72","text":" @notice Gets the debt ceiling for the asset if the asset is in isolation mode\n @param self The reserve configuration\n @return The debt ceiling (0 = isolation mode disabled)"},"id":11491,"implemented":true,"kind":"function","modifiers":[],"name":"getDebtCeiling","nameLocation":"17518:14:72","nodeType":"FunctionDefinition","parameters":{"id":11477,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11476,"mutability":"mutable","name":"self","nameLocation":"17579:4:72","nodeType":"VariableDeclaration","scope":11491,"src":"17538:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11475,"nodeType":"UserDefinedTypeName","pathNode":{"id":11474,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"17538:33:72"},"referencedDeclaration":21318,"src":"17538:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"17532:55:72"},"returnParameters":{"id":11480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11479,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11491,"src":"17611:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11478,"name":"uint256","nodeType":"ElementaryTypeName","src":"17611:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17610:9:72"},"scope":11857,"src":"17509:196:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11523,"nodeType":"Block","src":"18030:287:72","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11501,"name":"liquidationProtocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11497,"src":"18051:22:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":11502,"name":"MAX_VALID_LIQUIDATION_PROTOCOL_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10716,"src":"18077:34:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18051:60:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":11504,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"18119:6:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":11505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_LIQUIDATION_PROTOCOL_FEE","nodeType":"MemberAccess","referencedDeclaration":12578,"src":"18119:39:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":11500,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18036:7:72","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11506,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18036:128:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11507,"nodeType":"ExpressionStatement","src":"18036:128:72"},{"expression":{"id":11521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11508,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11495,"src":"18171:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11510,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"18171:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11511,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11495,"src":"18190:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11512,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"18190:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11513,"name":"LIQUIDATION_PROTOCOL_FEE_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10628,"src":"18202:29:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18190:41:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11515,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18189:43:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11516,"name":"liquidationProtocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11497,"src":"18242:22:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":11517,"name":"LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10683,"src":"18268:43:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18242:69:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11519,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18241:71:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18189:123:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18171:141:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11522,"nodeType":"ExpressionStatement","src":"18171:141:72"}]},"documentation":{"id":11492,"nodeType":"StructuredDocumentation","src":"17709:178:72","text":" @notice Sets the liquidation protocol fee of the reserve\n @param self The reserve configuration\n @param liquidationProtocolFee The liquidation protocol fee"},"id":11524,"implemented":true,"kind":"function","modifiers":[],"name":"setLiquidationProtocolFee","nameLocation":"17899:25:72","nodeType":"FunctionDefinition","parameters":{"id":11498,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11495,"mutability":"mutable","name":"self","nameLocation":"17971:4:72","nodeType":"VariableDeclaration","scope":11524,"src":"17930:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11494,"nodeType":"UserDefinedTypeName","pathNode":{"id":11493,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"17930:33:72"},"referencedDeclaration":21318,"src":"17930:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":11497,"mutability":"mutable","name":"liquidationProtocolFee","nameLocation":"17989:22:72","nodeType":"VariableDeclaration","scope":11524,"src":"17981:30:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11496,"name":"uint256","nodeType":"ElementaryTypeName","src":"17981:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17924:91:72"},"returnParameters":{"id":11499,"nodeType":"ParameterList","parameters":[],"src":"18030:0:72"},"scope":11857,"src":"17890:427:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11542,"nodeType":"Block","src":"18584:115:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11533,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11528,"src":"18604:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11534,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"18604:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11536,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"18616:30:72","subExpression":{"id":11535,"name":"LIQUIDATION_PROTOCOL_FEE_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10628,"src":"18617:29:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18604:42:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11538,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18603:44:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":11539,"name":"LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10683,"src":"18651:43:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18603:91:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11532,"id":11541,"nodeType":"Return","src":"18590:104:72"}]},"documentation":{"id":11525,"nodeType":"StructuredDocumentation","src":"18321:138:72","text":" @dev Gets the liquidation protocol fee\n @param self The reserve configuration\n @return The liquidation protocol fee"},"id":11543,"implemented":true,"kind":"function","modifiers":[],"name":"getLiquidationProtocolFee","nameLocation":"18471:25:72","nodeType":"FunctionDefinition","parameters":{"id":11529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11528,"mutability":"mutable","name":"self","nameLocation":"18543:4:72","nodeType":"VariableDeclaration","scope":11543,"src":"18502:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11527,"nodeType":"UserDefinedTypeName","pathNode":{"id":11526,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"18502:33:72"},"referencedDeclaration":21318,"src":"18502:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"18496:55:72"},"returnParameters":{"id":11532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11531,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11543,"src":"18575:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11530,"name":"uint256","nodeType":"ElementaryTypeName","src":"18575:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18574:9:72"},"scope":11857,"src":"18462:237:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11575,"nodeType":"Block","src":"18989:227:72","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11553,"name":"unbackedMintCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11549,"src":"19003:15:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":11554,"name":"MAX_VALID_UNBACKED_MINT_CAP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10722,"src":"19022:27:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19003:46:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":11556,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"19051:6:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":11557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_UNBACKED_MINT_CAP","nodeType":"MemberAccess","referencedDeclaration":12584,"src":"19051:32:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":11552,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18995:7:72","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11558,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18995:89:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11559,"nodeType":"ExpressionStatement","src":"18995:89:72"},{"expression":{"id":11573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11560,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11547,"src":"19091:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11562,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"19091:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11563,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11547,"src":"19110:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11564,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"19110:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11565,"name":"UNBACKED_MINT_CAP_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10634,"src":"19122:22:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19110:34:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11567,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19109:36:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11568,"name":"unbackedMintCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11549,"src":"19155:15:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":11569,"name":"UNBACKED_MINT_CAP_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10689,"src":"19174:36:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19155:55:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11571,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19154:57:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19109:102:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19091:120:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11574,"nodeType":"ExpressionStatement","src":"19091:120:72"}]},"documentation":{"id":11544,"nodeType":"StructuredDocumentation","src":"18703:157:72","text":" @notice Sets the unbacked mint cap of the reserve\n @param self The reserve configuration\n @param unbackedMintCap The unbacked mint cap"},"id":11576,"implemented":true,"kind":"function","modifiers":[],"name":"setUnbackedMintCap","nameLocation":"18872:18:72","nodeType":"FunctionDefinition","parameters":{"id":11550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11547,"mutability":"mutable","name":"self","nameLocation":"18937:4:72","nodeType":"VariableDeclaration","scope":11576,"src":"18896:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11546,"nodeType":"UserDefinedTypeName","pathNode":{"id":11545,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"18896:33:72"},"referencedDeclaration":21318,"src":"18896:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":11549,"mutability":"mutable","name":"unbackedMintCap","nameLocation":"18955:15:72","nodeType":"VariableDeclaration","scope":11576,"src":"18947:23:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11548,"name":"uint256","nodeType":"ElementaryTypeName","src":"18947:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18890:84:72"},"returnParameters":{"id":11551,"nodeType":"ParameterList","parameters":[],"src":"18989:0:72"},"scope":11857,"src":"18863:353:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11594,"nodeType":"Block","src":"19477:95:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11585,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11580,"src":"19491:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11586,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"19491:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11588,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"19503:23:72","subExpression":{"id":11587,"name":"UNBACKED_MINT_CAP_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10634,"src":"19504:22:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19491:35:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11590,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19490:37:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":11591,"name":"UNBACKED_MINT_CAP_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10689,"src":"19531:36:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19490:77:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11584,"id":11593,"nodeType":"Return","src":"19483:84:72"}]},"documentation":{"id":11577,"nodeType":"StructuredDocumentation","src":"19220:139:72","text":" @dev Gets the unbacked mint cap of the reserve\n @param self The reserve configuration\n @return The unbacked mint cap"},"id":11595,"implemented":true,"kind":"function","modifiers":[],"name":"getUnbackedMintCap","nameLocation":"19371:18:72","nodeType":"FunctionDefinition","parameters":{"id":11581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11580,"mutability":"mutable","name":"self","nameLocation":"19436:4:72","nodeType":"VariableDeclaration","scope":11595,"src":"19395:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11579,"nodeType":"UserDefinedTypeName","pathNode":{"id":11578,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"19395:33:72"},"referencedDeclaration":21318,"src":"19395:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"19389:55:72"},"returnParameters":{"id":11584,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11583,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11595,"src":"19468:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11582,"name":"uint256","nodeType":"ElementaryTypeName","src":"19468:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19467:9:72"},"scope":11857,"src":"19362:210:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11627,"nodeType":"Block","src":"19863:189:72","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11605,"name":"category","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11601,"src":"19877:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":11606,"name":"MAX_VALID_EMODE_CATEGORY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10719,"src":"19889:24:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19877:36:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":11608,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"19915:6:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":11609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_EMODE_CATEGORY","nodeType":"MemberAccess","referencedDeclaration":12581,"src":"19915:29:72","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":11604,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"19869:7:72","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19869:76:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11611,"nodeType":"ExpressionStatement","src":"19869:76:72"},{"expression":{"id":11625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11612,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11599,"src":"19952:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11614,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"19952:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11615,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11599,"src":"19965:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11616,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"19965:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11617,"name":"EMODE_CATEGORY_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10631,"src":"19977:19:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19965:31:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11619,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19964:33:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11620,"name":"category","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11601,"src":"20001:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":11621,"name":"EMODE_CATEGORY_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10686,"src":"20013:33:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20001:45:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11623,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20000:47:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19964:83:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19952:95:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11626,"nodeType":"ExpressionStatement","src":"19952:95:72"}]},"documentation":{"id":11596,"nodeType":"StructuredDocumentation","src":"19576:167:72","text":" @notice Sets the eMode asset category\n @param self The reserve configuration\n @param category The asset category when the user selects the eMode"},"id":11628,"implemented":true,"kind":"function","modifiers":[],"name":"setEModeCategory","nameLocation":"19755:16:72","nodeType":"FunctionDefinition","parameters":{"id":11602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11599,"mutability":"mutable","name":"self","nameLocation":"19818:4:72","nodeType":"VariableDeclaration","scope":11628,"src":"19777:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11598,"nodeType":"UserDefinedTypeName","pathNode":{"id":11597,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"19777:33:72"},"referencedDeclaration":21318,"src":"19777:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":11601,"mutability":"mutable","name":"category","nameLocation":"19836:8:72","nodeType":"VariableDeclaration","scope":11628,"src":"19828:16:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11600,"name":"uint256","nodeType":"ElementaryTypeName","src":"19828:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19771:77:72"},"returnParameters":{"id":11603,"nodeType":"ParameterList","parameters":[],"src":"19863:0:72"},"scope":11857,"src":"19746:306:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11646,"nodeType":"Block","src":"20310:89:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11637,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11632,"src":"20324:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11638,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"20324:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11640,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"20336:20:72","subExpression":{"id":11639,"name":"EMODE_CATEGORY_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10631,"src":"20337:19:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20324:32:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11642,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20323:34:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":11643,"name":"EMODE_CATEGORY_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10686,"src":"20361:33:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20323:71:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11636,"id":11645,"nodeType":"Return","src":"20316:78:72"}]},"documentation":{"id":11629,"nodeType":"StructuredDocumentation","src":"20056:138:72","text":" @dev Gets the eMode asset category\n @param self The reserve configuration\n @return The eMode category for the asset"},"id":11647,"implemented":true,"kind":"function","modifiers":[],"name":"getEModeCategory","nameLocation":"20206:16:72","nodeType":"FunctionDefinition","parameters":{"id":11633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11632,"mutability":"mutable","name":"self","nameLocation":"20269:4:72","nodeType":"VariableDeclaration","scope":11647,"src":"20228:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11631,"nodeType":"UserDefinedTypeName","pathNode":{"id":11630,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"20228:33:72"},"referencedDeclaration":21318,"src":"20228:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"20222:55:72"},"returnParameters":{"id":11636,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11635,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11647,"src":"20301:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11634,"name":"uint256","nodeType":"ElementaryTypeName","src":"20301:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20300:9:72"},"scope":11857,"src":"20197:202:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11677,"nodeType":"Block","src":"20721:149:72","statements":[{"expression":{"id":11675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11656,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11651,"src":"20727:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11658,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"20727:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11659,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11651,"src":"20746:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11660,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"20746:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11661,"name":"FLASHLOAN_ENABLED_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10616,"src":"20758:22:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20746:34:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11663,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20745:36:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"condition":{"id":11666,"name":"flashLoanEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11653,"src":"20799:16:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":11668,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20822:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":11669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"20799:24:72","trueExpression":{"hexValue":"31","id":11667,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20818:1:72","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":11665,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20791:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":11664,"name":"uint256","nodeType":"ElementaryTypeName","src":"20791:7:72","typeDescriptions":{}}},"id":11670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20791:33:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":11671,"name":"FLASHLOAN_ENABLED_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10671,"src":"20828:36:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20791:73:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11673,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20790:75:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20745:120:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20727:138:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11676,"nodeType":"ExpressionStatement","src":"20727:138:72"}]},"documentation":{"id":11648,"nodeType":"StructuredDocumentation","src":"20403:190:72","text":" @notice Sets the flashloanable flag for the reserve\n @param self The reserve configuration\n @param flashLoanEnabled True if the asset is flashloanable, false otherwise"},"id":11678,"implemented":true,"kind":"function","modifiers":[],"name":"setFlashLoanEnabled","nameLocation":"20605:19:72","nodeType":"FunctionDefinition","parameters":{"id":11654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11651,"mutability":"mutable","name":"self","nameLocation":"20671:4:72","nodeType":"VariableDeclaration","scope":11678,"src":"20630:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11650,"nodeType":"UserDefinedTypeName","pathNode":{"id":11649,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"20630:33:72"},"referencedDeclaration":21318,"src":"20630:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":11653,"mutability":"mutable","name":"flashLoanEnabled","nameLocation":"20686:16:72","nodeType":"VariableDeclaration","scope":11678,"src":"20681:21:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11652,"name":"bool","nodeType":"ElementaryTypeName","src":"20681:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"20624:82:72"},"returnParameters":{"id":11655,"nodeType":"ParameterList","parameters":[],"src":"20721:0:72"},"scope":11857,"src":"20596:274:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11696,"nodeType":"Block","src":"21135:60:72","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11687,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11682,"src":"21149:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11688,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"21149:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11690,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"21161:23:72","subExpression":{"id":11689,"name":"FLASHLOAN_ENABLED_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10616,"src":"21162:22:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21149:35:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11692,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21148:37:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":11693,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21189:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"21148:42:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":11686,"id":11695,"nodeType":"Return","src":"21141:49:72"}]},"documentation":{"id":11679,"nodeType":"StructuredDocumentation","src":"20874:145:72","text":" @notice Gets the flashloanable flag for the reserve\n @param self The reserve configuration\n @return The flashloanable flag"},"id":11697,"implemented":true,"kind":"function","modifiers":[],"name":"getFlashLoanEnabled","nameLocation":"21031:19:72","nodeType":"FunctionDefinition","parameters":{"id":11683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11682,"mutability":"mutable","name":"self","nameLocation":"21097:4:72","nodeType":"VariableDeclaration","scope":11697,"src":"21056:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11681,"nodeType":"UserDefinedTypeName","pathNode":{"id":11680,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"21056:33:72"},"referencedDeclaration":21318,"src":"21056:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"21050:55:72"},"returnParameters":{"id":11686,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11685,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11697,"src":"21129:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11684,"name":"bool","nodeType":"ElementaryTypeName","src":"21129:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"21128:6:72"},"scope":11857,"src":"21022:173:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11756,"nodeType":"Block","src":"21709:268:72","statements":[{"assignments":[11715],"declarations":[{"constant":false,"id":11715,"mutability":"mutable","name":"dataLocal","nameLocation":"21723:9:72","nodeType":"VariableDeclaration","scope":11756,"src":"21715:17:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11714,"name":"uint256","nodeType":"ElementaryTypeName","src":"21715:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11718,"initialValue":{"expression":{"id":11716,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11701,"src":"21735:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11717,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"21735:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21715:29:72"},{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11719,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11715,"src":"21767:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11721,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"21779:12:72","subExpression":{"id":11720,"name":"ACTIVE_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10595,"src":"21780:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21767:24:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11723,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21766:26:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":11724,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21796:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"21766:31:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11726,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11715,"src":"21806:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11728,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"21818:12:72","subExpression":{"id":11727,"name":"FROZEN_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10598,"src":"21819:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21806:24:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11730,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21805:26:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":11731,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21835:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"21805:31:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11733,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11715,"src":"21845:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11735,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"21857:15:72","subExpression":{"id":11734,"name":"BORROWING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10601,"src":"21858:14:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21845:27:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11737,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21844:29:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":11738,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21877:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"21844:34:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11740,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11715,"src":"21887:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11742,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"21899:22:72","subExpression":{"id":11741,"name":"STABLE_BORROWING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10604,"src":"21900:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21887:34:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11744,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21886:36:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":11745,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21926:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"21886:41:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11747,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11715,"src":"21936:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11749,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"21948:12:72","subExpression":{"id":11748,"name":"PAUSED_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10607,"src":"21949:11:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21936:24:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11751,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21935:26:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":11752,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21965:1:72","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"21935:31:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":11754,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21758:214:72","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"functionReturnParameters":11713,"id":11755,"nodeType":"Return","src":"21751:221:72"}]},"documentation":{"id":11698,"nodeType":"StructuredDocumentation","src":"21199:381:72","text":" @notice Gets the configuration flags of the reserve\n @param self The reserve configuration\n @return The state flag representing active\n @return The state flag representing frozen\n @return The state flag representing borrowing enabled\n @return The state flag representing stableRateBorrowing enabled\n @return The state flag representing paused"},"id":11757,"implemented":true,"kind":"function","modifiers":[],"name":"getFlags","nameLocation":"21592:8:72","nodeType":"FunctionDefinition","parameters":{"id":11702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11701,"mutability":"mutable","name":"self","nameLocation":"21647:4:72","nodeType":"VariableDeclaration","scope":11757,"src":"21606:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11700,"nodeType":"UserDefinedTypeName","pathNode":{"id":11699,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"21606:33:72"},"referencedDeclaration":21318,"src":"21606:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"21600:55:72"},"returnParameters":{"id":11713,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11704,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11757,"src":"21679:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11703,"name":"bool","nodeType":"ElementaryTypeName","src":"21679:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11706,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11757,"src":"21685:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11705,"name":"bool","nodeType":"ElementaryTypeName","src":"21685:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11708,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11757,"src":"21691:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11707,"name":"bool","nodeType":"ElementaryTypeName","src":"21691:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11710,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11757,"src":"21697:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11709,"name":"bool","nodeType":"ElementaryTypeName","src":"21697:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11712,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11757,"src":"21703:4:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11711,"name":"bool","nodeType":"ElementaryTypeName","src":"21703:4:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"21678:30:72"},"scope":11857,"src":"21583:394:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11822,"nodeType":"Block","src":"22605:500:72","statements":[{"assignments":[11777],"declarations":[{"constant":false,"id":11777,"mutability":"mutable","name":"dataLocal","nameLocation":"22619:9:72","nodeType":"VariableDeclaration","scope":11822,"src":"22611:17:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11776,"name":"uint256","nodeType":"ElementaryTypeName","src":"22611:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11780,"initialValue":{"expression":{"id":11778,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11761,"src":"22631:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11779,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"22631:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"22611:29:72"},{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11781,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11777,"src":"22662:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11783,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"22674:9:72","subExpression":{"id":11782,"name":"LTV_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10583,"src":"22675:8:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22662:21:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11785,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11777,"src":"22692:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11787,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"22704:27:72","subExpression":{"id":11786,"name":"LIQUIDATION_THRESHOLD_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10586,"src":"22705:26:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22692:39:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11789,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22691:41:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":11790,"name":"LIQUIDATION_THRESHOLD_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10641,"src":"22736:40:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22691:85:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11792,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11777,"src":"22785:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11794,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"22797:23:72","subExpression":{"id":11793,"name":"LIQUIDATION_BONUS_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10589,"src":"22798:22:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22785:35:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11796,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22784:37:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":11797,"name":"LIQUIDATION_BONUS_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10644,"src":"22825:36:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22784:77:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11799,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11777,"src":"22870:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11801,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"22882:14:72","subExpression":{"id":11800,"name":"DECIMALS_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10592,"src":"22883:13:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22870:26:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11803,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22869:28:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":11804,"name":"RESERVE_DECIMALS_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10647,"src":"22901:35:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22869:67:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11806,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11777,"src":"22945:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11808,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"22957:20:72","subExpression":{"id":11807,"name":"RESERVE_FACTOR_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10619,"src":"22958:19:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22945:32:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11810,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22944:34:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":11811,"name":"RESERVE_FACTOR_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10674,"src":"22982:33:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22944:71:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11813,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11777,"src":"23024:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11815,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"23036:20:72","subExpression":{"id":11814,"name":"EMODE_CATEGORY_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10631,"src":"23037:19:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23024:32:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11817,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"23023:34:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":11818,"name":"EMODE_CATEGORY_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10686,"src":"23061:33:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23023:71:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11820,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22654:446:72","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,uint256)"}},"functionReturnParameters":11775,"id":11821,"nodeType":"Return","src":"22647:453:72"}]},"documentation":{"id":11758,"nodeType":"StructuredDocumentation","src":"21981:470:72","text":" @notice Gets the configuration parameters of the reserve from storage\n @param self The reserve configuration\n @return The state param representing ltv\n @return The state param representing liquidation threshold\n @return The state param representing liquidation bonus\n @return The state param representing reserve decimals\n @return The state param representing reserve factor\n @return The state param representing eMode category"},"id":11823,"implemented":true,"kind":"function","modifiers":[],"name":"getParams","nameLocation":"22463:9:72","nodeType":"FunctionDefinition","parameters":{"id":11762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11761,"mutability":"mutable","name":"self","nameLocation":"22519:4:72","nodeType":"VariableDeclaration","scope":11823,"src":"22478:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11760,"nodeType":"UserDefinedTypeName","pathNode":{"id":11759,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"22478:33:72"},"referencedDeclaration":21318,"src":"22478:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"22472:55:72"},"returnParameters":{"id":11775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11764,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11823,"src":"22551:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11763,"name":"uint256","nodeType":"ElementaryTypeName","src":"22551:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11766,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11823,"src":"22560:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11765,"name":"uint256","nodeType":"ElementaryTypeName","src":"22560:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11768,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11823,"src":"22569:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11767,"name":"uint256","nodeType":"ElementaryTypeName","src":"22569:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11770,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11823,"src":"22578:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11769,"name":"uint256","nodeType":"ElementaryTypeName","src":"22578:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11772,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11823,"src":"22587:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11771,"name":"uint256","nodeType":"ElementaryTypeName","src":"22587:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11774,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11823,"src":"22596:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11773,"name":"uint256","nodeType":"ElementaryTypeName","src":"22596:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22550:54:72"},"scope":11857,"src":"22454:651:72","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11855,"nodeType":"Block","src":"23450:202:72","statements":[{"assignments":[11835],"declarations":[{"constant":false,"id":11835,"mutability":"mutable","name":"dataLocal","nameLocation":"23464:9:72","nodeType":"VariableDeclaration","scope":11855,"src":"23456:17:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11834,"name":"uint256","nodeType":"ElementaryTypeName","src":"23456:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11838,"initialValue":{"expression":{"id":11836,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11827,"src":"23476:4:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":11837,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21317,"src":"23476:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"23456:29:72"},{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11839,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11835,"src":"23508:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11841,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"23520:16:72","subExpression":{"id":11840,"name":"BORROW_CAP_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10622,"src":"23521:15:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23508:28:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11843,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"23507:30:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":11844,"name":"BORROW_CAP_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10677,"src":"23541:29:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23507:63:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11846,"name":"dataLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11835,"src":"23579:9:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":11848,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"23591:16:72","subExpression":{"id":11847,"name":"SUPPLY_CAP_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10625,"src":"23592:15:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23579:28:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11850,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"23578:30:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":11851,"name":"SUPPLY_CAP_START_BIT_POSITION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10680,"src":"23612:29:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23578:63:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11853,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"23499:148:72","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":11833,"id":11854,"nodeType":"Return","src":"23492:155:72"}]},"documentation":{"id":11824,"nodeType":"StructuredDocumentation","src":"23109:225:72","text":" @notice Gets the caps parameters of the reserve from storage\n @param self The reserve configuration\n @return The state param representing borrow cap\n @return The state param representing supply cap."},"id":11856,"implemented":true,"kind":"function","modifiers":[],"name":"getCaps","nameLocation":"23346:7:72","nodeType":"FunctionDefinition","parameters":{"id":11828,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11827,"mutability":"mutable","name":"self","nameLocation":"23400:4:72","nodeType":"VariableDeclaration","scope":11856,"src":"23359:45:72","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":11826,"nodeType":"UserDefinedTypeName","pathNode":{"id":11825,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"23359:33:72"},"referencedDeclaration":21318,"src":"23359:33:72","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"23353:55:72"},"returnParameters":{"id":11833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11830,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11856,"src":"23432:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11829,"name":"uint256","nodeType":"ElementaryTypeName","src":"23432:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11832,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11856,"src":"23441:7:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11831,"name":"uint256","nodeType":"ElementaryTypeName","src":"23441:7:72","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23431:18:72"},"scope":11857,"src":"23337:315:72","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":11858,"src":"297:23357:72","usedErrors":[]}],"src":"37:23618:72"},"id":72},"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol","exportedSymbols":{"DataTypes":[21633],"Errors":[12642],"ReserveConfiguration":[11857],"UserConfiguration":[12368]},"id":12369,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":11859,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:73"},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol","file":"../helpers/Errors.sol","id":11861,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12369,"sourceUnit":12643,"src":"62:45:73","symbolAliases":[{"foreign":{"id":11860,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:6:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":11863,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12369,"sourceUnit":21634,"src":"108:49:73","symbolAliases":[{"foreign":{"id":11862,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"116:9:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"./ReserveConfiguration.sol","id":11865,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12369,"sourceUnit":11858,"src":"158:64:73","symbolAliases":[{"foreign":{"id":11864,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"166:20:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"UserConfiguration","contractDependencies":[],"contractKind":"library","documentation":{"id":11866,"nodeType":"StructuredDocumentation","src":"224:131:73","text":" @title UserConfiguration library\n @author Aave\n @notice Implements the bitmap logic to handle the user configuration"},"fullyImplemented":true,"id":12368,"linearizedBaseContracts":[12368],"name":"UserConfiguration","nameLocation":"364:17:73","nodeType":"ContractDefinition","nodes":[{"id":11870,"libraryName":{"id":11867,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":11857,"src":"392:20:73"},"nodeType":"UsingForDirective","src":"386:65:73","typeName":{"id":11869,"nodeType":"UserDefinedTypeName","pathNode":{"id":11868,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"417:33:73"},"referencedDeclaration":21318,"src":"417:33:73","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"constant":true,"id":11873,"mutability":"constant","name":"BORROWING_MASK","nameLocation":"481:14:73","nodeType":"VariableDeclaration","scope":12368,"src":"455:113:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11871,"name":"uint256","nodeType":"ElementaryTypeName","src":"455:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307835353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535","id":11872,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"502:66:73","typeDescriptions":{"typeIdentifier":"t_rational_38597363079105398474523661669562635951089994888546854679819194669304376546645_by_1","typeString":"int_const 3859...(69 digits omitted)...6645"},"value":"0x5555555555555555555555555555555555555555555555555555555555555555"},"visibility":"internal"},{"constant":true,"id":11876,"mutability":"constant","name":"COLLATERAL_MASK","nameLocation":"598:15:73","nodeType":"VariableDeclaration","scope":12368,"src":"572:114:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11874,"name":"uint256","nodeType":"ElementaryTypeName","src":"572:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307841414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141","id":11875,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"620:66:73","typeDescriptions":{"typeIdentifier":"t_rational_77194726158210796949047323339125271902179989777093709359638389338608753093290_by_1","typeString":"int_const 7719...(69 digits omitted)...3290"},"value":"0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"},"visibility":"internal"},{"body":{"id":11923,"nodeType":"Block","src":"1102:273:73","statements":[{"id":11922,"nodeType":"UncheckedBlock","src":"1108:263:73","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11888,"name":"reserveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11882,"src":"1134:12:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":11889,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11857,"src":"1149:20:73","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReserveConfiguration_$11857_$","typeString":"type(library ReserveConfiguration)"}},"id":11890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"MAX_RESERVES_COUNT","nodeType":"MemberAccess","referencedDeclaration":10731,"src":"1149:39:73","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"1134:54:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":11892,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"1190:6:73","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":11893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_RESERVE_INDEX","nodeType":"MemberAccess","referencedDeclaration":12590,"src":"1190:28:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":11887,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1126:7:73","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11894,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1126:93:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11895,"nodeType":"ExpressionStatement","src":"1126:93:73"},{"assignments":[11897],"declarations":[{"constant":false,"id":11897,"mutability":"mutable","name":"bit","nameLocation":"1235:3:73","nodeType":"VariableDeclaration","scope":11922,"src":"1227:11:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11896,"name":"uint256","nodeType":"ElementaryTypeName","src":"1227:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11904,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":11898,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1241:1:73","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11899,"name":"reserveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11882,"src":"1247:12:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"31","id":11900,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1263:1:73","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1247:17:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11902,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1246:19:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1241:24:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1227:38:73"},{"condition":{"id":11905,"name":"borrowing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11884,"src":"1277:9:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11920,"nodeType":"Block","src":"1329:36:73","statements":[{"expression":{"id":11918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11913,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11880,"src":"1339:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":11915,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21321,"src":"1339:9:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"&=","rightHandSide":{"id":11917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"1352:4:73","subExpression":{"id":11916,"name":"bit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11897,"src":"1353:3:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1339:17:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11919,"nodeType":"ExpressionStatement","src":"1339:17:73"}]},"id":11921,"nodeType":"IfStatement","src":"1273:92:73","trueBody":{"id":11912,"nodeType":"Block","src":"1288:35:73","statements":[{"expression":{"id":11910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11906,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11880,"src":"1298:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":11908,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21321,"src":"1298:9:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"id":11909,"name":"bit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11897,"src":"1311:3:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1298:16:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11911,"nodeType":"ExpressionStatement","src":"1298:16:73"}]}}]}]},"documentation":{"id":11877,"nodeType":"StructuredDocumentation","src":"691:278:73","text":" @notice Sets if the user is borrowing the reserve identified by reserveIndex\n @param self The configuration object\n @param reserveIndex The index of the reserve in the bitmap\n @param borrowing True if the user is borrowing the reserve, false otherwise"},"id":11924,"implemented":true,"kind":"function","modifiers":[],"name":"setBorrowing","nameLocation":"981:12:73","nodeType":"FunctionDefinition","parameters":{"id":11885,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11880,"mutability":"mutable","name":"self","nameLocation":"1038:4:73","nodeType":"VariableDeclaration","scope":11924,"src":"999:43:73","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":11879,"nodeType":"UserDefinedTypeName","pathNode":{"id":11878,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"999:30:73"},"referencedDeclaration":21322,"src":"999:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":11882,"mutability":"mutable","name":"reserveIndex","nameLocation":"1056:12:73","nodeType":"VariableDeclaration","scope":11924,"src":"1048:20:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11881,"name":"uint256","nodeType":"ElementaryTypeName","src":"1048:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11884,"mutability":"mutable","name":"borrowing","nameLocation":"1079:9:73","nodeType":"VariableDeclaration","scope":11924,"src":"1074:14:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11883,"name":"bool","nodeType":"ElementaryTypeName","src":"1074:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"993:99:73"},"returnParameters":{"id":11886,"nodeType":"ParameterList","parameters":[],"src":"1102:0:73"},"scope":12368,"src":"972:403:73","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":11974,"nodeType":"Block","src":"1834:287:73","statements":[{"id":11973,"nodeType":"UncheckedBlock","src":"1840:277:73","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11936,"name":"reserveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11930,"src":"1866:12:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":11937,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11857,"src":"1881:20:73","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReserveConfiguration_$11857_$","typeString":"type(library ReserveConfiguration)"}},"id":11938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"MAX_RESERVES_COUNT","nodeType":"MemberAccess","referencedDeclaration":10731,"src":"1881:39:73","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"1866:54:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":11940,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"1922:6:73","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":11941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_RESERVE_INDEX","nodeType":"MemberAccess","referencedDeclaration":12590,"src":"1922:28:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":11935,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1858:7:73","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11942,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1858:93:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11943,"nodeType":"ExpressionStatement","src":"1858:93:73"},{"assignments":[11945],"declarations":[{"constant":false,"id":11945,"mutability":"mutable","name":"bit","nameLocation":"1967:3:73","nodeType":"VariableDeclaration","scope":11973,"src":"1959:11:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11944,"name":"uint256","nodeType":"ElementaryTypeName","src":"1959:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11955,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":11946,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1973:1:73","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11947,"name":"reserveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11930,"src":"1980:12:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"31","id":11948,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1996:1:73","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1980:17:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11950,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1979:19:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":11951,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2001:1:73","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1979:23:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11953,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1978:25:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1973:30:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1959:44:73"},{"condition":{"id":11956,"name":"usingAsCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11932,"src":"2015:17:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":11971,"nodeType":"Block","src":"2075:36:73","statements":[{"expression":{"id":11969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11964,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11928,"src":"2085:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":11966,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21321,"src":"2085:9:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"&=","rightHandSide":{"id":11968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"2098:4:73","subExpression":{"id":11967,"name":"bit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11945,"src":"2099:3:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2085:17:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11970,"nodeType":"ExpressionStatement","src":"2085:17:73"}]},"id":11972,"nodeType":"IfStatement","src":"2011:100:73","trueBody":{"id":11963,"nodeType":"Block","src":"2034:35:73","statements":[{"expression":{"id":11961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":11957,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11928,"src":"2044:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":11959,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21321,"src":"2044:9:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"id":11960,"name":"bit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11945,"src":"2057:3:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2044:16:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11962,"nodeType":"ExpressionStatement","src":"2044:16:73"}]}}]}]},"documentation":{"id":11925,"nodeType":"StructuredDocumentation","src":"1379:306:73","text":" @notice Sets if the user is using as collateral the reserve identified by reserveIndex\n @param self The configuration object\n @param reserveIndex The index of the reserve in the bitmap\n @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise"},"id":11975,"implemented":true,"kind":"function","modifiers":[],"name":"setUsingAsCollateral","nameLocation":"1697:20:73","nodeType":"FunctionDefinition","parameters":{"id":11933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11928,"mutability":"mutable","name":"self","nameLocation":"1762:4:73","nodeType":"VariableDeclaration","scope":11975,"src":"1723:43:73","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":11927,"nodeType":"UserDefinedTypeName","pathNode":{"id":11926,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"1723:30:73"},"referencedDeclaration":21322,"src":"1723:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":11930,"mutability":"mutable","name":"reserveIndex","nameLocation":"1780:12:73","nodeType":"VariableDeclaration","scope":11975,"src":"1772:20:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11929,"name":"uint256","nodeType":"ElementaryTypeName","src":"1772:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11932,"mutability":"mutable","name":"usingAsCollateral","nameLocation":"1803:17:73","nodeType":"VariableDeclaration","scope":11975,"src":"1798:22:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11931,"name":"bool","nodeType":"ElementaryTypeName","src":"1798:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1717:107:73"},"returnParameters":{"id":11934,"nodeType":"ParameterList","parameters":[],"src":"1834:0:73"},"scope":12368,"src":"1688:433:73","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12009,"nodeType":"Block","src":"2582:186:73","statements":[{"id":12008,"nodeType":"UncheckedBlock","src":"2588:176:73","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11987,"name":"reserveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11981,"src":"2614:12:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":11988,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11857,"src":"2629:20:73","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReserveConfiguration_$11857_$","typeString":"type(library ReserveConfiguration)"}},"id":11989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"MAX_RESERVES_COUNT","nodeType":"MemberAccess","referencedDeclaration":10731,"src":"2629:39:73","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"2614:54:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":11991,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"2670:6:73","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":11992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_RESERVE_INDEX","nodeType":"MemberAccess","referencedDeclaration":12590,"src":"2670:28:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":11986,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2606:7:73","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":11993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2606:93:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11994,"nodeType":"ExpressionStatement","src":"2606:93:73"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":11995,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11979,"src":"2715:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":11996,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21321,"src":"2715:9:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11997,"name":"reserveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11981,"src":"2729:12:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"31","id":11998,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2745:1:73","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2729:17:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12000,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2728:19:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2715:32:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12002,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2714:34:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"33","id":12003,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2751:1:73","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"2714:38:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":12005,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2756:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2714:43:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":11985,"id":12007,"nodeType":"Return","src":"2707:50:73"}]}]},"documentation":{"id":11976,"nodeType":"StructuredDocumentation","src":"2125:307:73","text":" @notice Returns if a user has been using the reserve for borrowing or as collateral\n @param self The configuration object\n @param reserveIndex The index of the reserve in the bitmap\n @return True if the user has been using a reserve for borrowing or as collateral, false otherwise"},"id":12010,"implemented":true,"kind":"function","modifiers":[],"name":"isUsingAsCollateralOrBorrowing","nameLocation":"2444:30:73","nodeType":"FunctionDefinition","parameters":{"id":11982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11979,"mutability":"mutable","name":"self","nameLocation":"2518:4:73","nodeType":"VariableDeclaration","scope":12010,"src":"2480:42:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":11978,"nodeType":"UserDefinedTypeName","pathNode":{"id":11977,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"2480:30:73"},"referencedDeclaration":21322,"src":"2480:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":11981,"mutability":"mutable","name":"reserveIndex","nameLocation":"2536:12:73","nodeType":"VariableDeclaration","scope":12010,"src":"2528:20:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11980,"name":"uint256","nodeType":"ElementaryTypeName","src":"2528:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2474:78:73"},"returnParameters":{"id":11985,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11984,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12010,"src":"2576:4:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11983,"name":"bool","nodeType":"ElementaryTypeName","src":"2576:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2575:6:73"},"scope":12368,"src":"2435:333:73","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12044,"nodeType":"Block","src":"3174:186:73","statements":[{"id":12043,"nodeType":"UncheckedBlock","src":"3180:176:73","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12022,"name":"reserveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12016,"src":"3206:12:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":12023,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11857,"src":"3221:20:73","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReserveConfiguration_$11857_$","typeString":"type(library ReserveConfiguration)"}},"id":12024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"MAX_RESERVES_COUNT","nodeType":"MemberAccess","referencedDeclaration":10731,"src":"3221:39:73","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"3206:54:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":12026,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"3262:6:73","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":12027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_RESERVE_INDEX","nodeType":"MemberAccess","referencedDeclaration":12590,"src":"3262:28:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":12021,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3198:7:73","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":12028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3198:93:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12029,"nodeType":"ExpressionStatement","src":"3198:93:73"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12030,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12014,"src":"3307:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":12031,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21321,"src":"3307:9:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12032,"name":"reserveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12016,"src":"3321:12:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"31","id":12033,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3337:1:73","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3321:17:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12035,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3320:19:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3307:32:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12037,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3306:34:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":12038,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3343:1:73","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3306:38:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":12040,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3348:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3306:43:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12020,"id":12042,"nodeType":"Return","src":"3299:50:73"}]}]},"documentation":{"id":12011,"nodeType":"StructuredDocumentation","src":"2772:271:73","text":" @notice Validate a user has been using the reserve for borrowing\n @param self The configuration object\n @param reserveIndex The index of the reserve in the bitmap\n @return True if the user has been using a reserve for borrowing, false otherwise"},"id":12045,"implemented":true,"kind":"function","modifiers":[],"name":"isBorrowing","nameLocation":"3055:11:73","nodeType":"FunctionDefinition","parameters":{"id":12017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12014,"mutability":"mutable","name":"self","nameLocation":"3110:4:73","nodeType":"VariableDeclaration","scope":12045,"src":"3072:42:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":12013,"nodeType":"UserDefinedTypeName","pathNode":{"id":12012,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"3072:30:73"},"referencedDeclaration":21322,"src":"3072:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":12016,"mutability":"mutable","name":"reserveIndex","nameLocation":"3128:12:73","nodeType":"VariableDeclaration","scope":12045,"src":"3120:20:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12015,"name":"uint256","nodeType":"ElementaryTypeName","src":"3120:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3066:78:73"},"returnParameters":{"id":12020,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12019,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12045,"src":"3168:4:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12018,"name":"bool","nodeType":"ElementaryTypeName","src":"3168:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3167:6:73"},"scope":12368,"src":"3046:314:73","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12082,"nodeType":"Block","src":"3774:192:73","statements":[{"id":12081,"nodeType":"UncheckedBlock","src":"3780:182:73","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12057,"name":"reserveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12051,"src":"3806:12:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":12058,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11857,"src":"3821:20:73","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReserveConfiguration_$11857_$","typeString":"type(library ReserveConfiguration)"}},"id":12059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"MAX_RESERVES_COUNT","nodeType":"MemberAccess","referencedDeclaration":10731,"src":"3821:39:73","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"3806:54:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":12061,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"3862:6:73","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":12062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_RESERVE_INDEX","nodeType":"MemberAccess","referencedDeclaration":12590,"src":"3862:28:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":12056,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3798:7:73","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":12063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3798:93:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12064,"nodeType":"ExpressionStatement","src":"3798:93:73"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12065,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12049,"src":"3907:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":12066,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21321,"src":"3907:9:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12067,"name":"reserveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12051,"src":"3922:12:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"31","id":12068,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3938:1:73","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3922:17:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12070,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3921:19:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":12071,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3943:1:73","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3921:23:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12073,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3920:25:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3907:38:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12075,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3906:40:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"31","id":12076,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3949:1:73","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3906:44:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":12078,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3954:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3906:49:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12055,"id":12080,"nodeType":"Return","src":"3899:56:73"}]}]},"documentation":{"id":12046,"nodeType":"StructuredDocumentation","src":"3364:271:73","text":" @notice Validate a user has been using the reserve as collateral\n @param self The configuration object\n @param reserveIndex The index of the reserve in the bitmap\n @return True if the user has been using a reserve as collateral, false otherwise"},"id":12083,"implemented":true,"kind":"function","modifiers":[],"name":"isUsingAsCollateral","nameLocation":"3647:19:73","nodeType":"FunctionDefinition","parameters":{"id":12052,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12049,"mutability":"mutable","name":"self","nameLocation":"3710:4:73","nodeType":"VariableDeclaration","scope":12083,"src":"3672:42:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":12048,"nodeType":"UserDefinedTypeName","pathNode":{"id":12047,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"3672:30:73"},"referencedDeclaration":21322,"src":"3672:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":12051,"mutability":"mutable","name":"reserveIndex","nameLocation":"3728:12:73","nodeType":"VariableDeclaration","scope":12083,"src":"3720:20:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12050,"name":"uint256","nodeType":"ElementaryTypeName","src":"3720:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3666:78:73"},"returnParameters":{"id":12055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12054,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12083,"src":"3768:4:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12053,"name":"bool","nodeType":"ElementaryTypeName","src":"3768:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3767:6:73"},"scope":12368,"src":"3638:328:73","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12113,"nodeType":"Block","src":"4417:143:73","statements":[{"assignments":[12093],"declarations":[{"constant":false,"id":12093,"mutability":"mutable","name":"collateralData","nameLocation":"4431:14:73","nodeType":"VariableDeclaration","scope":12113,"src":"4423:22:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12092,"name":"uint256","nodeType":"ElementaryTypeName","src":"4423:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12098,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12094,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12087,"src":"4448:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":12095,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21321,"src":"4448:9:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":12096,"name":"COLLATERAL_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11876,"src":"4460:15:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4448:27:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4423:52:73"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":12111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12099,"name":"collateralData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12093,"src":"4488:14:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":12100,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4506:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4488:19:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12107,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12102,"name":"collateralData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12093,"src":"4512:14:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12103,"name":"collateralData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12093,"src":"4530:14:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":12104,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4547:1:73","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4530:18:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12106,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4529:20:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4512:37:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":12108,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4553:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4512:42:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":12110,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4511:44:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4488:67:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12091,"id":12112,"nodeType":"Return","src":"4481:74:73"}]},"documentation":{"id":12084,"nodeType":"StructuredDocumentation","src":"3970:331:73","text":" @notice Checks if a user has been supplying only one reserve as collateral\n @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\n @param self The configuration object\n @return True if the user has been supplying as collateral one reserve, false otherwise"},"id":12114,"implemented":true,"kind":"function","modifiers":[],"name":"isUsingAsCollateralOne","nameLocation":"4313:22:73","nodeType":"FunctionDefinition","parameters":{"id":12088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12087,"mutability":"mutable","name":"self","nameLocation":"4379:4:73","nodeType":"VariableDeclaration","scope":12114,"src":"4341:42:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":12086,"nodeType":"UserDefinedTypeName","pathNode":{"id":12085,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"4341:30:73"},"referencedDeclaration":21322,"src":"4341:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"src":"4335:52:73"},"returnParameters":{"id":12091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12090,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12114,"src":"4411:4:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12089,"name":"bool","nodeType":"ElementaryTypeName","src":"4411:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4410:6:73"},"scope":12368,"src":"4304:256:73","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12130,"nodeType":"Block","src":"4898:50:73","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12123,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12118,"src":"4911:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":12124,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21321,"src":"4911:9:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":12125,"name":"COLLATERAL_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11876,"src":"4923:15:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4911:27:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":12127,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4942:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4911:32:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12122,"id":12129,"nodeType":"Return","src":"4904:39:73"}]},"documentation":{"id":12115,"nodeType":"StructuredDocumentation","src":"4564:218:73","text":" @notice Checks if a user has been supplying any reserve as collateral\n @param self The configuration object\n @return True if the user has been supplying as collateral any reserve, false otherwise"},"id":12131,"implemented":true,"kind":"function","modifiers":[],"name":"isUsingAsCollateralAny","nameLocation":"4794:22:73","nodeType":"FunctionDefinition","parameters":{"id":12119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12118,"mutability":"mutable","name":"self","nameLocation":"4860:4:73","nodeType":"VariableDeclaration","scope":12131,"src":"4822:42:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":12117,"nodeType":"UserDefinedTypeName","pathNode":{"id":12116,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"4822:30:73"},"referencedDeclaration":21322,"src":"4822:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"src":"4816:52:73"},"returnParameters":{"id":12122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12121,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12131,"src":"4892:4:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12120,"name":"bool","nodeType":"ElementaryTypeName","src":"4892:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4891:6:73"},"scope":12368,"src":"4785:163:73","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12161,"nodeType":"Block","src":"5367:138:73","statements":[{"assignments":[12141],"declarations":[{"constant":false,"id":12141,"mutability":"mutable","name":"borrowingData","nameLocation":"5381:13:73","nodeType":"VariableDeclaration","scope":12161,"src":"5373:21:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12140,"name":"uint256","nodeType":"ElementaryTypeName","src":"5373:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12146,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12142,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12135,"src":"5397:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":12143,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21321,"src":"5397:9:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":12144,"name":"BORROWING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11873,"src":"5409:14:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5397:26:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5373:50:73"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":12159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12147,"name":"borrowingData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12141,"src":"5436:13:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":12148,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5453:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5436:18:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12150,"name":"borrowingData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12141,"src":"5459:13:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12151,"name":"borrowingData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12141,"src":"5476:13:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":12152,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5492:1:73","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5476:17:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12154,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5475:19:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5459:35:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":12156,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5498:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5459:40:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":12158,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5458:42:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5436:64:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12139,"id":12160,"nodeType":"Return","src":"5429:71:73"}]},"documentation":{"id":12132,"nodeType":"StructuredDocumentation","src":"4952:315:73","text":" @notice Checks if a user has been borrowing only one asset\n @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\n @param self The configuration object\n @return True if the user has been supplying as collateral one reserve, false otherwise"},"id":12162,"implemented":true,"kind":"function","modifiers":[],"name":"isBorrowingOne","nameLocation":"5279:14:73","nodeType":"FunctionDefinition","parameters":{"id":12136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12135,"mutability":"mutable","name":"self","nameLocation":"5332:4:73","nodeType":"VariableDeclaration","scope":12162,"src":"5294:42:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":12134,"nodeType":"UserDefinedTypeName","pathNode":{"id":12133,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"5294:30:73"},"referencedDeclaration":21322,"src":"5294:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"src":"5293:44:73"},"returnParameters":{"id":12139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12138,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12162,"src":"5361:4:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12137,"name":"bool","nodeType":"ElementaryTypeName","src":"5361:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5360:6:73"},"scope":12368,"src":"5270:235:73","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12178,"nodeType":"Block","src":"5804:49:73","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12171,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12166,"src":"5817:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":12172,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21321,"src":"5817:9:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":12173,"name":"BORROWING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11873,"src":"5829:14:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5817:26:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":12175,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5847:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5817:31:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12170,"id":12177,"nodeType":"Return","src":"5810:38:73"}]},"documentation":{"id":12163,"nodeType":"StructuredDocumentation","src":"5509:195:73","text":" @notice Checks if a user has been borrowing from any reserve\n @param self The configuration object\n @return True if the user has been borrowing any reserve, false otherwise"},"id":12179,"implemented":true,"kind":"function","modifiers":[],"name":"isBorrowingAny","nameLocation":"5716:14:73","nodeType":"FunctionDefinition","parameters":{"id":12167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12166,"mutability":"mutable","name":"self","nameLocation":"5769:4:73","nodeType":"VariableDeclaration","scope":12179,"src":"5731:42:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":12165,"nodeType":"UserDefinedTypeName","pathNode":{"id":12164,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"5731:30:73"},"referencedDeclaration":21322,"src":"5731:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"src":"5730:44:73"},"returnParameters":{"id":12170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12169,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12179,"src":"5798:4:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12168,"name":"bool","nodeType":"ElementaryTypeName","src":"5798:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5797:6:73"},"scope":12368,"src":"5707:146:73","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12193,"nodeType":"Block","src":"6181:32:73","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12188,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12183,"src":"6194:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":12189,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21321,"src":"6194:9:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":12190,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6207:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6194:14:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":12187,"id":12192,"nodeType":"Return","src":"6187:21:73"}]},"documentation":{"id":12180,"nodeType":"StructuredDocumentation","src":"5857:231:73","text":" @notice Checks if a user has not been using any reserve for borrowing or supply\n @param self The configuration object\n @return True if the user has not been borrowing or supplying any reserve, false otherwise"},"id":12194,"implemented":true,"kind":"function","modifiers":[],"name":"isEmpty","nameLocation":"6100:7:73","nodeType":"FunctionDefinition","parameters":{"id":12184,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12183,"mutability":"mutable","name":"self","nameLocation":"6146:4:73","nodeType":"VariableDeclaration","scope":12194,"src":"6108:42:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":12182,"nodeType":"UserDefinedTypeName","pathNode":{"id":12181,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"6108:30:73"},"referencedDeclaration":21322,"src":"6108:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"src":"6107:44:73"},"returnParameters":{"id":12187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12186,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12194,"src":"6175:4:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12185,"name":"bool","nodeType":"ElementaryTypeName","src":"6175:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6174:6:73"},"scope":12368,"src":"6091:122:73","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12261,"nodeType":"Block","src":"6877:373:73","statements":[{"condition":{"arguments":[{"id":12217,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12198,"src":"6910:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}],"id":12216,"name":"isUsingAsCollateralOne","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12114,"src":"6887:22:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$returns$_t_bool_$","typeString":"function (struct DataTypes.UserConfigurationMap memory) pure returns (bool)"}},"id":12218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6887:28:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12252,"nodeType":"IfStatement","src":"6883:328:73","trueBody":{"id":12251,"nodeType":"Block","src":"6917:294:73","statements":[{"assignments":[12220],"declarations":[{"constant":false,"id":12220,"mutability":"mutable","name":"assetId","nameLocation":"6933:7:73","nodeType":"VariableDeclaration","scope":12251,"src":"6925:15:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12219,"name":"uint256","nodeType":"ElementaryTypeName","src":"6925:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12225,"initialValue":{"arguments":[{"id":12222,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12198,"src":"6966:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},{"id":12223,"name":"COLLATERAL_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11876,"src":"6972:15:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12221,"name":"_getFirstAssetIdByMask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12367,"src":"6943:22:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (uint256)"}},"id":12224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6943:45:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6925:63:73"},{"assignments":[12227],"declarations":[{"constant":false,"id":12227,"mutability":"mutable","name":"assetAddress","nameLocation":"7005:12:73","nodeType":"VariableDeclaration","scope":12251,"src":"6997:20:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12226,"name":"address","nodeType":"ElementaryTypeName","src":"6997:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":12231,"initialValue":{"baseExpression":{"id":12228,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12207,"src":"7020:12:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":12230,"indexExpression":{"id":12229,"name":"assetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12220,"src":"7033:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7020:21:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6997:44:73"},{"assignments":[12233],"declarations":[{"constant":false,"id":12233,"mutability":"mutable","name":"ceiling","nameLocation":"7057:7:73","nodeType":"VariableDeclaration","scope":12251,"src":"7049:15:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12232,"name":"uint256","nodeType":"ElementaryTypeName","src":"7049:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12240,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"baseExpression":{"id":12234,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12203,"src":"7067:12:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":12236,"indexExpression":{"id":12235,"name":"assetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12227,"src":"7080:12:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7067:26:73","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":12237,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":21286,"src":"7067:40:73","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":12238,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDebtCeiling","nodeType":"MemberAccess","referencedDeclaration":11491,"src":"7067:55:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":12239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7067:57:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7049:75:73"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12241,"name":"ceiling","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12233,"src":"7136:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":12242,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7147:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7136:12:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12250,"nodeType":"IfStatement","src":"7132:73:73","trueBody":{"id":12249,"nodeType":"Block","src":"7150:55:73","statements":[{"expression":{"components":[{"hexValue":"74727565","id":12244,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7168:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":12245,"name":"assetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12227,"src":"7174:12:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12246,"name":"ceiling","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12233,"src":"7188:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12247,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7167:29:73","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$_t_uint256_$","typeString":"tuple(bool,address,uint256)"}},"functionReturnParameters":12215,"id":12248,"nodeType":"Return","src":"7160:36:73"}]}}]}},{"expression":{"components":[{"hexValue":"66616c7365","id":12253,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7224:5:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"arguments":[{"hexValue":"30","id":12256,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7239: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":12255,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7231:7:73","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12254,"name":"address","nodeType":"ElementaryTypeName","src":"7231:7:73","typeDescriptions":{}}},"id":12257,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7231:10:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":12258,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7243:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":12259,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"7223:22:73","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(bool,address,int_const 0)"}},"functionReturnParameters":12215,"id":12260,"nodeType":"Return","src":"7216:29:73"}]},"documentation":{"id":12195,"nodeType":"StructuredDocumentation","src":"6217:405:73","text":" @notice Returns the Isolation Mode state of the user\n @param self The configuration object\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @return True if the user is in isolation mode, false otherwise\n @return The address of the only asset used as collateral\n @return The debt ceiling of the reserve"},"id":12262,"implemented":true,"kind":"function","modifiers":[],"name":"getIsolationModeState","nameLocation":"6634:21:73","nodeType":"FunctionDefinition","parameters":{"id":12208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12198,"mutability":"mutable","name":"self","nameLocation":"6699:4:73","nodeType":"VariableDeclaration","scope":12262,"src":"6661:42:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":12197,"nodeType":"UserDefinedTypeName","pathNode":{"id":12196,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"6661:30:73"},"referencedDeclaration":21322,"src":"6661:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":12203,"mutability":"mutable","name":"reservesData","nameLocation":"6759:12:73","nodeType":"VariableDeclaration","scope":12262,"src":"6709:62:73","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":12202,"keyType":{"id":12199,"name":"address","nodeType":"ElementaryTypeName","src":"6717:7:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6709:41:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":12201,"nodeType":"UserDefinedTypeName","pathNode":{"id":12200,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"6728:21:73"},"referencedDeclaration":21315,"src":"6728:21:73","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":12207,"mutability":"mutable","name":"reservesList","nameLocation":"6813:12:73","nodeType":"VariableDeclaration","scope":12262,"src":"6777:48:73","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":12206,"keyType":{"id":12204,"name":"uint256","nodeType":"ElementaryTypeName","src":"6785:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"6777:27:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":12205,"name":"address","nodeType":"ElementaryTypeName","src":"6796:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"}],"src":"6655:174:73"},"returnParameters":{"id":12215,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12210,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12262,"src":"6853:4:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12209,"name":"bool","nodeType":"ElementaryTypeName","src":"6853:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12212,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12262,"src":"6859:7:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12211,"name":"address","nodeType":"ElementaryTypeName","src":"6859:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12214,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12262,"src":"6868:7:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12213,"name":"uint256","nodeType":"ElementaryTypeName","src":"6868:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6852:24:73"},"scope":12368,"src":"6625:625:73","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":12319,"nodeType":"Block","src":"7837:318:73","statements":[{"condition":{"arguments":[{"id":12283,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12266,"src":"7862:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}],"id":12282,"name":"isBorrowingOne","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12162,"src":"7847:14:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$returns$_t_bool_$","typeString":"function (struct DataTypes.UserConfigurationMap memory) pure returns (bool)"}},"id":12284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7847:20:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12311,"nodeType":"IfStatement","src":"7843:275:73","trueBody":{"id":12310,"nodeType":"Block","src":"7869:249:73","statements":[{"assignments":[12286],"declarations":[{"constant":false,"id":12286,"mutability":"mutable","name":"assetId","nameLocation":"7885:7:73","nodeType":"VariableDeclaration","scope":12310,"src":"7877:15:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12285,"name":"uint256","nodeType":"ElementaryTypeName","src":"7877:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12291,"initialValue":{"arguments":[{"id":12288,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12266,"src":"7918:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},{"id":12289,"name":"BORROWING_MASK","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11873,"src":"7924:14:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12287,"name":"_getFirstAssetIdByMask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12367,"src":"7895:22:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (uint256)"}},"id":12290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7895:44:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7877:62:73"},{"assignments":[12293],"declarations":[{"constant":false,"id":12293,"mutability":"mutable","name":"assetAddress","nameLocation":"7955:12:73","nodeType":"VariableDeclaration","scope":12310,"src":"7947:20:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12292,"name":"address","nodeType":"ElementaryTypeName","src":"7947:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":12297,"initialValue":{"baseExpression":{"id":12294,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12275,"src":"7970:12:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":12296,"indexExpression":{"id":12295,"name":"assetId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12286,"src":"7983:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7970:21:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"7947:44:73"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"baseExpression":{"id":12298,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12271,"src":"8003:12:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":12300,"indexExpression":{"id":12299,"name":"assetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12293,"src":"8016:12:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8003:26:73","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":12301,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":21286,"src":"8003:40:73","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":12302,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getSiloedBorrowing","nodeType":"MemberAccess","referencedDeclaration":11183,"src":"8003:59:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":12303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8003:61:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12309,"nodeType":"IfStatement","src":"7999:113:73","trueBody":{"id":12308,"nodeType":"Block","src":"8066:46:73","statements":[{"expression":{"components":[{"hexValue":"74727565","id":12304,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8084:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":12305,"name":"assetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12293,"src":"8090:12:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":12306,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8083:20:73","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$","typeString":"tuple(bool,address)"}},"functionReturnParameters":12281,"id":12307,"nodeType":"Return","src":"8076:27:73"}]}}]}},{"expression":{"components":[{"hexValue":"66616c7365","id":12312,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8132:5:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"arguments":[{"hexValue":"30","id":12315,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8147: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":12314,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8139:7:73","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12313,"name":"address","nodeType":"ElementaryTypeName","src":"8139:7:73","typeDescriptions":{}}},"id":12316,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8139:10:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":12317,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"8131:19:73","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$","typeString":"tuple(bool,address)"}},"functionReturnParameters":12281,"id":12318,"nodeType":"Return","src":"8124:26:73"}]},"documentation":{"id":12263,"nodeType":"StructuredDocumentation","src":"7254:335:73","text":" @notice Returns the siloed borrowing state for the user\n @param self The configuration object\n @param reservesData The data of all the reserves\n @param reservesList The reserve list\n @return True if the user has borrowed a siloed asset, false otherwise\n @return The address of the only borrowed asset"},"id":12320,"implemented":true,"kind":"function","modifiers":[],"name":"getSiloedBorrowingState","nameLocation":"7601:23:73","nodeType":"FunctionDefinition","parameters":{"id":12276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12266,"mutability":"mutable","name":"self","nameLocation":"7668:4:73","nodeType":"VariableDeclaration","scope":12320,"src":"7630:42:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":12265,"nodeType":"UserDefinedTypeName","pathNode":{"id":12264,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"7630:30:73"},"referencedDeclaration":21322,"src":"7630:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":12271,"mutability":"mutable","name":"reservesData","nameLocation":"7728:12:73","nodeType":"VariableDeclaration","scope":12320,"src":"7678:62:73","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":12270,"keyType":{"id":12267,"name":"address","nodeType":"ElementaryTypeName","src":"7686:7:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"7678:41:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":12269,"nodeType":"UserDefinedTypeName","pathNode":{"id":12268,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"7697:21:73"},"referencedDeclaration":21315,"src":"7697:21:73","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":12275,"mutability":"mutable","name":"reservesList","nameLocation":"7782:12:73","nodeType":"VariableDeclaration","scope":12320,"src":"7746:48:73","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":12274,"keyType":{"id":12272,"name":"uint256","nodeType":"ElementaryTypeName","src":"7754:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"7746:27:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":12273,"name":"address","nodeType":"ElementaryTypeName","src":"7765:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"}],"src":"7624:174:73"},"returnParameters":{"id":12281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12278,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12320,"src":"7822:4:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12277,"name":"bool","nodeType":"ElementaryTypeName","src":"7822:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12280,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12320,"src":"7828:7:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12279,"name":"address","nodeType":"ElementaryTypeName","src":"7828:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7821:15:73"},"scope":12368,"src":"7592:563:73","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":12366,"nodeType":"Block","src":"8556:248:73","statements":[{"id":12365,"nodeType":"UncheckedBlock","src":"8562:238:73","statements":[{"assignments":[12332],"declarations":[{"constant":false,"id":12332,"mutability":"mutable","name":"bitmapData","nameLocation":"8588:10:73","nodeType":"VariableDeclaration","scope":12365,"src":"8580:18:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12331,"name":"uint256","nodeType":"ElementaryTypeName","src":"8580:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12337,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12333,"name":"self","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12324,"src":"8601:4:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":12334,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","referencedDeclaration":21321,"src":"8601:9:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":12335,"name":"mask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12326,"src":"8613:4:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8601:16:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8580:37:73"},{"assignments":[12339],"declarations":[{"constant":false,"id":12339,"mutability":"mutable","name":"firstAssetPosition","nameLocation":"8633:18:73","nodeType":"VariableDeclaration","scope":12365,"src":"8625:26:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12338,"name":"uint256","nodeType":"ElementaryTypeName","src":"8625:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12347,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12340,"name":"bitmapData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12332,"src":"8654:10:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":12345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"8667:17:73","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12341,"name":"bitmapData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12332,"src":"8669:10:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":12342,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8682:1:73","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8669:14:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12344,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8668:16:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8654:30:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8625:59:73"},{"assignments":[12349],"declarations":[{"constant":false,"id":12349,"mutability":"mutable","name":"id","nameLocation":"8700:2:73","nodeType":"VariableDeclaration","scope":12365,"src":"8692:10:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12348,"name":"uint256","nodeType":"ElementaryTypeName","src":"8692:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12350,"nodeType":"VariableDeclarationStatement","src":"8692:10:73"},{"body":{"id":12361,"nodeType":"Block","src":"8751:26:73","statements":[{"expression":{"id":12359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12357,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12349,"src":"8761:2:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":12358,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8767:1:73","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8761:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12360,"nodeType":"ExpressionStatement","src":"8761:7:73"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"id":12353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12351,"name":"firstAssetPosition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12339,"src":"8719:18:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"32","id":12352,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8742:1:73","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"8719:24:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12354,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8718:26:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":12355,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8748:1:73","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8718:31:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12362,"nodeType":"WhileStatement","src":"8711:66:73"},{"expression":{"id":12363,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12349,"src":"8791:2:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12330,"id":12364,"nodeType":"Return","src":"8784:9:73"}]}]},"documentation":{"id":12321,"nodeType":"StructuredDocumentation","src":"8159:260:73","text":" @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\n @param self The configuration object\n @return The index of the first asset flagged in the bitmap once the corresponding mask is applied"},"id":12367,"implemented":true,"kind":"function","modifiers":[],"name":"_getFirstAssetIdByMask","nameLocation":"8431:22:73","nodeType":"FunctionDefinition","parameters":{"id":12327,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12324,"mutability":"mutable","name":"self","nameLocation":"8497:4:73","nodeType":"VariableDeclaration","scope":12367,"src":"8459:42:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":12323,"nodeType":"UserDefinedTypeName","pathNode":{"id":12322,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"8459:30:73"},"referencedDeclaration":21322,"src":"8459:30:73","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":12326,"mutability":"mutable","name":"mask","nameLocation":"8515:4:73","nodeType":"VariableDeclaration","scope":12367,"src":"8507:12:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12325,"name":"uint256","nodeType":"ElementaryTypeName","src":"8507:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8453:70:73"},"returnParameters":{"id":12330,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12329,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12367,"src":"8547:7:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12328,"name":"uint256","nodeType":"ElementaryTypeName","src":"8547:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8546:9:73"},"scope":12368,"src":"8422:382:73","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":12369,"src":"356:8450:73","usedErrors":[]}],"src":"37:8770:73"},"id":73},"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol","exportedSymbols":{"Errors":[12642]},"id":12643,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":12370,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:74"},{"abstract":false,"baseContracts":[],"canonicalName":"Errors","contractDependencies":[],"contractKind":"library","documentation":{"id":12371,"nodeType":"StructuredDocumentation","src":"62:142:74","text":" @title Errors library\n @author Aave\n @notice Defines the error messages emitted by the different contracts of the Aave protocol"},"fullyImplemented":true,"id":12642,"linearizedBaseContracts":[12642],"name":"Errors","nameLocation":"213:6:74","nodeType":"ContractDefinition","nodes":[{"constant":true,"functionSelector":"ac753236","id":12374,"mutability":"constant","name":"CALLER_NOT_POOL_ADMIN","nameLocation":"247:21:74","nodeType":"VariableDeclaration","scope":12642,"src":"224:50:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12372,"name":"string","nodeType":"ElementaryTypeName","src":"224:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"31","id":12373,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"271:3:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""},"value":"1"},"visibility":"public"},{"constant":true,"functionSelector":"485c8ff6","id":12377,"mutability":"constant","name":"CALLER_NOT_EMERGENCY_ADMIN","nameLocation":"353:26:74","nodeType":"VariableDeclaration","scope":12642,"src":"330:55:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12375,"name":"string","nodeType":"ElementaryTypeName","src":"330:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"32","id":12376,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"382:3:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_ad7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a5","typeString":"literal_string \"2\""},"value":"2"},"visibility":"public"},{"constant":true,"functionSelector":"26e7b312","id":12380,"mutability":"constant","name":"CALLER_NOT_POOL_OR_EMERGENCY_ADMIN","nameLocation":"470:34:74","nodeType":"VariableDeclaration","scope":12642,"src":"447:63:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12378,"name":"string","nodeType":"ElementaryTypeName","src":"447:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"33","id":12379,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"507:3:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de","typeString":"literal_string \"3\""},"value":"3"},"visibility":"public"},{"constant":true,"functionSelector":"b5e79366","id":12383,"mutability":"constant","name":"CALLER_NOT_RISK_OR_POOL_ADMIN","nameLocation":"602:29:74","nodeType":"VariableDeclaration","scope":12642,"src":"579:58:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12381,"name":"string","nodeType":"ElementaryTypeName","src":"579:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"34","id":12382,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"634:3:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_13600b294191fc92924bb3ce4b969c1e7e2bab8f4c93c3fc6d0a51733df3c060","typeString":"literal_string \"4\""},"value":"4"},"visibility":"public"},{"constant":true,"functionSelector":"2c8e3b4c","id":12386,"mutability":"constant","name":"CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN","nameLocation":"724:38:74","nodeType":"VariableDeclaration","scope":12642,"src":"701:67:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12384,"name":"string","nodeType":"ElementaryTypeName","src":"701:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"35","id":12385,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"765:3:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_ceebf77a833b30520287ddd9478ff51abbdffa30aa90a8d655dba0e8a79ce0c1","typeString":"literal_string \"5\""},"value":"5"},"visibility":"public"},{"constant":true,"functionSelector":"4f77647b","id":12389,"mutability":"constant","name":"CALLER_NOT_BRIDGE","nameLocation":"865:17:74","nodeType":"VariableDeclaration","scope":12642,"src":"842:46:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12387,"name":"string","nodeType":"ElementaryTypeName","src":"842:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"36","id":12388,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"885:3:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_e455bf8ea6e7463a1046a0b52804526e119b4bf5136279614e0b1e8e296a4e2d","typeString":"literal_string \"6\""},"value":"6"},"visibility":"public"},{"constant":true,"functionSelector":"e02f07ee","id":12392,"mutability":"constant","name":"ADDRESSES_PROVIDER_NOT_REGISTERED","nameLocation":"963:33:74","nodeType":"VariableDeclaration","scope":12642,"src":"940:62:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12390,"name":"string","nodeType":"ElementaryTypeName","src":"940:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"37","id":12391,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"999:3:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_52f1a9b320cab38e5da8a8f97989383aab0a49165fc91c737310e4f7e9821021","typeString":"literal_string \"7\""},"value":"7"},"visibility":"public"},{"constant":true,"functionSelector":"60c3de80","id":12395,"mutability":"constant","name":"INVALID_ADDRESSES_PROVIDER_ID","nameLocation":"1076:29:74","nodeType":"VariableDeclaration","scope":12642,"src":"1053:58:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12393,"name":"string","nodeType":"ElementaryTypeName","src":"1053:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"38","id":12394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1108:3:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_e4b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10","typeString":"literal_string \"8\""},"value":"8"},"visibility":"public"},{"constant":true,"functionSelector":"11d7b006","id":12398,"mutability":"constant","name":"NOT_CONTRACT","nameLocation":"1186:12:74","nodeType":"VariableDeclaration","scope":12642,"src":"1163:41:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12396,"name":"string","nodeType":"ElementaryTypeName","src":"1163:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"39","id":12397,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1201:3:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_d2f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afb","typeString":"literal_string \"9\""},"value":"9"},"visibility":"public"},{"constant":true,"functionSelector":"61c111d2","id":12401,"mutability":"constant","name":"CALLER_NOT_POOL_CONFIGURATOR","nameLocation":"1262:28:74","nodeType":"VariableDeclaration","scope":12642,"src":"1239:58:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12399,"name":"string","nodeType":"ElementaryTypeName","src":"1239:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3130","id":12400,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1293:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_1a192fabce13988b84994d4296e6cdc418d55e2f1d7f942188d4040b94fc57ac","typeString":"literal_string \"10\""},"value":"10"},"visibility":"public"},{"constant":true,"functionSelector":"a2e976c6","id":12404,"mutability":"constant","name":"CALLER_NOT_ATOKEN","nameLocation":"1385:17:74","nodeType":"VariableDeclaration","scope":12642,"src":"1362:47:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12402,"name":"string","nodeType":"ElementaryTypeName","src":"1362:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3131","id":12403,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1405:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_7880aec93413f117ef14bd4e6d130875ab2c7d7d55a064fac3c2f7bd51516380","typeString":"literal_string \"11\""},"value":"11"},"visibility":"public"},{"constant":true,"functionSelector":"37930782","id":12407,"mutability":"constant","name":"INVALID_ADDRESSES_PROVIDER","nameLocation":"1485:26:74","nodeType":"VariableDeclaration","scope":12642,"src":"1462:56:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12405,"name":"string","nodeType":"ElementaryTypeName","src":"1462:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3132","id":12406,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1514:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_7f8b6b088b6d74c2852fc86c796dca07b44eed6fb3daf5e6b59f7c364db14528","typeString":"literal_string \"12\""},"value":"12"},"visibility":"public"},{"constant":true,"functionSelector":"7fea6f36","id":12410,"mutability":"constant","name":"INVALID_FLASHLOAN_EXECUTOR_RETURN","nameLocation":"1604:33:74","nodeType":"VariableDeclaration","scope":12642,"src":"1581:63:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12408,"name":"string","nodeType":"ElementaryTypeName","src":"1581:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3133","id":12409,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1640:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_789bcdf275fa270780a52ae3b79bb1ce0fda7e0aaad87b57b74bb99ac290714a","typeString":"literal_string \"13\""},"value":"13"},"visibility":"public"},{"constant":true,"functionSelector":"12dcade8","id":12413,"mutability":"constant","name":"RESERVE_ALREADY_ADDED","nameLocation":"1732:21:74","nodeType":"VariableDeclaration","scope":12642,"src":"1709:51:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12411,"name":"string","nodeType":"ElementaryTypeName","src":"1709:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3134","id":12412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1756:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_5c4c6aa067b6f8e6cb38e6ab843832a94d1712d661a04d73c517d6a1931a9e5d","typeString":"literal_string \"14\""},"value":"14"},"visibility":"public"},{"constant":true,"functionSelector":"76ae8fca","id":12416,"mutability":"constant","name":"NO_MORE_RESERVES_ALLOWED","nameLocation":"1839:24:74","nodeType":"VariableDeclaration","scope":12642,"src":"1816:54:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12414,"name":"string","nodeType":"ElementaryTypeName","src":"1816:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3135","id":12415,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1866:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_1d3be50b2bb17407dd170f1d5da128d1def30c6b1598d6a629e79b4775265526","typeString":"literal_string \"15\""},"value":"15"},"visibility":"public"},{"constant":true,"functionSelector":"f479ea11","id":12419,"mutability":"constant","name":"EMODE_CATEGORY_RESERVED","nameLocation":"1949:23:74","nodeType":"VariableDeclaration","scope":12642,"src":"1926:53:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12417,"name":"string","nodeType":"ElementaryTypeName","src":"1926:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3136","id":12418,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1975:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_277ab82e5a4641341820a4a2933a62c1de997e42e92548657ae21b3728d580fe","typeString":"literal_string \"16\""},"value":"16"},"visibility":"public"},{"constant":true,"functionSelector":"5d9c76c0","id":12422,"mutability":"constant","name":"INVALID_EMODE_CATEGORY_ASSIGNMENT","nameLocation":"2077:33:74","nodeType":"VariableDeclaration","scope":12642,"src":"2054:63:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12420,"name":"string","nodeType":"ElementaryTypeName","src":"2054:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3137","id":12421,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2113:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_8e8fab5f003314da8d1873ea7720e8d9f47650136d916064d1edb8a11d682624","typeString":"literal_string \"17\""},"value":"17"},"visibility":"public"},{"constant":true,"functionSelector":"084dfa0d","id":12425,"mutability":"constant","name":"RESERVE_LIQUIDITY_NOT_ZERO","nameLocation":"2192:26:74","nodeType":"VariableDeclaration","scope":12642,"src":"2169:56:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12423,"name":"string","nodeType":"ElementaryTypeName","src":"2169:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3138","id":12424,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2221:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_8fef2229291b68be841adf029e58b87f39ba144b2d3b0af1760243d0a9bc6a1c","typeString":"literal_string \"18\""},"value":"18"},"visibility":"public"},{"constant":true,"functionSelector":"747fa556","id":12428,"mutability":"constant","name":"FLASHLOAN_PREMIUM_INVALID","nameLocation":"2300:25:74","nodeType":"VariableDeclaration","scope":12642,"src":"2277:55:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12426,"name":"string","nodeType":"ElementaryTypeName","src":"2277:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3139","id":12427,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2328:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_939eb54753ed0cc7e2272bfb34cbe098308c93936ed54d79078f76ade0b2e789","typeString":"literal_string \"19\""},"value":"19"},"visibility":"public"},{"constant":true,"functionSelector":"335763de","id":12431,"mutability":"constant","name":"INVALID_RESERVE_PARAMS","nameLocation":"2390:22:74","nodeType":"VariableDeclaration","scope":12642,"src":"2367:52:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12429,"name":"string","nodeType":"ElementaryTypeName","src":"2367:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3230","id":12430,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2415:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_731dc163f73d31d8c68f9917ce4ff967753939f70432973c04fd2c2a48148607","typeString":"literal_string \"20\""},"value":"20"},"visibility":"public"},{"constant":true,"functionSelector":"47cf1523","id":12434,"mutability":"constant","name":"INVALID_EMODE_CATEGORY_PARAMS","nameLocation":"2491:29:74","nodeType":"VariableDeclaration","scope":12642,"src":"2468:59:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12432,"name":"string","nodeType":"ElementaryTypeName","src":"2468:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3231","id":12433,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2523:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_f4c2b5de886427473655d4c904c743576dc2d53249b7535d96c06cc97ae7216b","typeString":"literal_string \"21\""},"value":"21"},"visibility":"public"},{"constant":true,"functionSelector":"7aa0767e","id":12437,"mutability":"constant","name":"BRIDGE_PROTOCOL_FEE_INVALID","nameLocation":"2606:27:74","nodeType":"VariableDeclaration","scope":12642,"src":"2583:57:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12435,"name":"string","nodeType":"ElementaryTypeName","src":"2583:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3232","id":12436,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2636:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_d4d1a59767271eefdc7830a772b9732a11d503531d972ab8c981a6b1c0e666e5","typeString":"literal_string \"22\""},"value":"22"},"visibility":"public"},{"constant":true,"functionSelector":"471df685","id":12440,"mutability":"constant","name":"CALLER_MUST_BE_POOL","nameLocation":"2700:19:74","nodeType":"VariableDeclaration","scope":12642,"src":"2677:49:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12438,"name":"string","nodeType":"ElementaryTypeName","src":"2677:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3233","id":12439,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2722:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_1572b593c53d839d80004aa4b8c51211864104f06ace9e22be9c4365b50655ea","typeString":"literal_string \"23\""},"value":"23"},"visibility":"public"},{"constant":true,"functionSelector":"abd351b1","id":12443,"mutability":"constant","name":"INVALID_MINT_AMOUNT","nameLocation":"2801:19:74","nodeType":"VariableDeclaration","scope":12642,"src":"2778:49:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12441,"name":"string","nodeType":"ElementaryTypeName","src":"2778:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3234","id":12442,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2823:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_6585423cb6456b1d4957f6454d2f004f0c4f58d53a00082412d5c2ef4b1b31fd","typeString":"literal_string \"24\""},"value":"24"},"visibility":"public"},{"constant":true,"functionSelector":"51267450","id":12446,"mutability":"constant","name":"INVALID_BURN_AMOUNT","nameLocation":"2882:19:74","nodeType":"VariableDeclaration","scope":12642,"src":"2859:49:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12444,"name":"string","nodeType":"ElementaryTypeName","src":"2859:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3235","id":12445,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2904:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_81e080ffc23e8b8d44dd829bc823229e92b893eb1d8f624419d3f5682eb97fc3","typeString":"literal_string \"25\""},"value":"25"},"visibility":"public"},{"constant":true,"functionSelector":"fae82791","id":12449,"mutability":"constant","name":"INVALID_AMOUNT","nameLocation":"2963:14:74","nodeType":"VariableDeclaration","scope":12642,"src":"2940:44:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12447,"name":"string","nodeType":"ElementaryTypeName","src":"2940:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3236","id":12448,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2980:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_9cce9eb03c9f29c6481fca9f0f942b15bef0bbbc47fda0ddb44df157019835d9","typeString":"literal_string \"26\""},"value":"26"},"visibility":"public"},{"constant":true,"functionSelector":"52ba9dbe","id":12452,"mutability":"constant","name":"RESERVE_INACTIVE","nameLocation":"3046:16:74","nodeType":"VariableDeclaration","scope":12642,"src":"3023:46:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12450,"name":"string","nodeType":"ElementaryTypeName","src":"3023:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3237","id":12451,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3065:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_58a280f74f57bf051c40f060139dc747e015be52f68c57e2c4ab2e4bd4146f43","typeString":"literal_string \"27\""},"value":"27"},"visibility":"public"},{"constant":true,"functionSelector":"6cd3cfbc","id":12455,"mutability":"constant","name":"RESERVE_FROZEN","nameLocation":"3135:14:74","nodeType":"VariableDeclaration","scope":12642,"src":"3112:44:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12453,"name":"string","nodeType":"ElementaryTypeName","src":"3112:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3238","id":12454,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3152:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_9560168699514dcd528543d614e81b4f36adf182dc624d2f1eb91df8addd987e","typeString":"literal_string \"28\""},"value":"28"},"visibility":"public"},{"constant":true,"functionSelector":"b68774e9","id":12458,"mutability":"constant","name":"RESERVE_PAUSED","nameLocation":"3245:14:74","nodeType":"VariableDeclaration","scope":12642,"src":"3222:44:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12456,"name":"string","nodeType":"ElementaryTypeName","src":"3222:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3239","id":12457,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3262:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_7749cc8014201da2069c21d93ba99c584b6f62d393fde534ed47eac227e31561","typeString":"literal_string \"29\""},"value":"29"},"visibility":"public"},{"constant":true,"functionSelector":"4ef999ff","id":12461,"mutability":"constant","name":"BORROWING_NOT_ENABLED","nameLocation":"3355:21:74","nodeType":"VariableDeclaration","scope":12642,"src":"3332:51:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12459,"name":"string","nodeType":"ElementaryTypeName","src":"3332:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3330","id":12460,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3379:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_bbf5a24880b10a5f9f601c4058e4771ddea17e7d765ceb3c903814e1c0d621e0","typeString":"literal_string \"30\""},"value":"30"},"visibility":"public"},{"constant":true,"functionSelector":"4d86f393","id":12464,"mutability":"constant","name":"STABLE_BORROWING_NOT_ENABLED","nameLocation":"3440:28:74","nodeType":"VariableDeclaration","scope":12642,"src":"3417:58:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12462,"name":"string","nodeType":"ElementaryTypeName","src":"3417:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3331","id":12463,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3471:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_933c48a61c3bad621ebc5d57117f9e773fefae4468bceaf9d3198a3bf7c1d678","typeString":"literal_string \"31\""},"value":"31"},"visibility":"public"},{"constant":true,"functionSelector":"b7f5e224","id":12467,"mutability":"constant","name":"NOT_ENOUGH_AVAILABLE_USER_BALANCE","nameLocation":"3539:33:74","nodeType":"VariableDeclaration","scope":12642,"src":"3516:63:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12465,"name":"string","nodeType":"ElementaryTypeName","src":"3516:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3332","id":12466,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3575:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_8b953cbb84328003779eb1ef176ef07f7dd0ae3d4a8e408de53d15a36466c86e","typeString":"literal_string \"32\""},"value":"32"},"visibility":"public"},{"constant":true,"functionSelector":"89c5d45f","id":12470,"mutability":"constant","name":"INVALID_INTEREST_RATE_MODE_SELECTED","nameLocation":"3664:35:74","nodeType":"VariableDeclaration","scope":12642,"src":"3641:65:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12468,"name":"string","nodeType":"ElementaryTypeName","src":"3641:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3333","id":12469,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3702:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_ed93c67e1a9b7f09d3b44ee593360f0073603a8e45415e2c3c69afc994a1103d","typeString":"literal_string \"33\""},"value":"33"},"visibility":"public"},{"constant":true,"functionSelector":"4e01e3c1","id":12473,"mutability":"constant","name":"COLLATERAL_BALANCE_IS_ZERO","nameLocation":"3774:26:74","nodeType":"VariableDeclaration","scope":12642,"src":"3751:56:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12471,"name":"string","nodeType":"ElementaryTypeName","src":"3751:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3334","id":12472,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3803:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_77c32b454bb61eb9df9e3848d0ded3e59753acda90ae58befe564733aec82e4c","typeString":"literal_string \"34\""},"value":"34"},"visibility":"public"},{"constant":true,"functionSelector":"366eb54d","id":12476,"mutability":"constant","name":"HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD","nameLocation":"3867:46:74","nodeType":"VariableDeclaration","scope":12642,"src":"3844:76:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12474,"name":"string","nodeType":"ElementaryTypeName","src":"3844:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3335","id":12475,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3916:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_5ca7b081b8c6c57b0469c340dba43ec8d33c0b898c69e55c4f74ff7ed9ac71ea","typeString":"literal_string \"35\""},"value":"35"},"visibility":"public"},{"constant":true,"functionSelector":"e3fa20f5","id":12479,"mutability":"constant","name":"COLLATERAL_CANNOT_COVER_NEW_BORROW","nameLocation":"4007:34:74","nodeType":"VariableDeclaration","scope":12642,"src":"3984:64:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12477,"name":"string","nodeType":"ElementaryTypeName","src":"3984:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3336","id":12478,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4044:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_3b4066bd7b7960752225af105d3beafb5c47a26c5aae7e6798a437b7c0bb33e6","typeString":"literal_string \"36\""},"value":"36"},"visibility":"public"},{"constant":true,"functionSelector":"8a344000","id":12482,"mutability":"constant","name":"COLLATERAL_SAME_AS_BORROWING_CURRENCY","nameLocation":"4133:37:74","nodeType":"VariableDeclaration","scope":12642,"src":"4110:67:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12480,"name":"string","nodeType":"ElementaryTypeName","src":"4110:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3337","id":12481,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4173:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_5bc0457d8881b800fd1bc0d6df907345b3bf287e43a5790ded3d08dbacf9c03a","typeString":"literal_string \"37\""},"value":"37"},"visibility":"public"},{"constant":true,"functionSelector":"f07f6785","id":12485,"mutability":"constant","name":"AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE","nameLocation":"4273:39:74","nodeType":"VariableDeclaration","scope":12642,"src":"4250:69:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12483,"name":"string","nodeType":"ElementaryTypeName","src":"4250:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3338","id":12484,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4315:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_d67d834462ca31eaef1f30157e31659f60355143b7441e6fc7d9eae1fa79f3f8","typeString":"literal_string \"38\""},"value":"38"},"visibility":"public"},{"constant":true,"functionSelector":"dc191bd9","id":12488,"mutability":"constant","name":"NO_DEBT_OF_SELECTED_TYPE","nameLocation":"4426:24:74","nodeType":"VariableDeclaration","scope":12642,"src":"4403:54:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12486,"name":"string","nodeType":"ElementaryTypeName","src":"4403:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3339","id":12487,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4453:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_318a541463286d7584b45438601196fbc1a55628e303a0613eb6d46e60640c95","typeString":"literal_string \"39\""},"value":"39"},"visibility":"public"},{"constant":true,"functionSelector":"712f536a","id":12491,"mutability":"constant","name":"NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF","nameLocation":"4569:37:74","nodeType":"VariableDeclaration","scope":12642,"src":"4546:67:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12489,"name":"string","nodeType":"ElementaryTypeName","src":"4546:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3430","id":12490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4609:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_880de8116b3dfac28e9ff528a9fef1d1e0a51449c1addce011ffec1f302992b6","typeString":"literal_string \"40\""},"value":"40"},"visibility":"public"},{"constant":true,"functionSelector":"74459b14","id":12494,"mutability":"constant","name":"NO_OUTSTANDING_STABLE_DEBT","nameLocation":"4712:26:74","nodeType":"VariableDeclaration","scope":12642,"src":"4689:56:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12492,"name":"string","nodeType":"ElementaryTypeName","src":"4689:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3431","id":12493,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4741:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_6bcaf047ba4c8ac400fca43393035242dd1aabda2d6068a0c51242b97224de8d","typeString":"literal_string \"41\""},"value":"41"},"visibility":"public"},{"constant":true,"functionSelector":"b4a45730","id":12497,"mutability":"constant","name":"NO_OUTSTANDING_VARIABLE_DEBT","nameLocation":"4841:28:74","nodeType":"VariableDeclaration","scope":12642,"src":"4818:58:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12495,"name":"string","nodeType":"ElementaryTypeName","src":"4818:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3432","id":12496,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4872:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_ccb1f717aa77602faf03a594761a36956b1c4cf44c6b336d1db57da799b331b8","typeString":"literal_string \"42\""},"value":"42"},"visibility":"public"},{"constant":true,"functionSelector":"a2797c80","id":12500,"mutability":"constant","name":"UNDERLYING_BALANCE_ZERO","nameLocation":"4974:23:74","nodeType":"VariableDeclaration","scope":12642,"src":"4951:53:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12498,"name":"string","nodeType":"ElementaryTypeName","src":"4951:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3433","id":12499,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5000:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_4dfb3440902001bce9b7ebf7be7d95fe9e2056bd5ce309ceb83b32f4e00e21ed","typeString":"literal_string \"43\""},"value":"43"},"visibility":"public"},{"constant":true,"functionSelector":"2926c971","id":12503,"mutability":"constant","name":"INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET","nameLocation":"5086:42:74","nodeType":"VariableDeclaration","scope":12642,"src":"5063:72:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12501,"name":"string","nodeType":"ElementaryTypeName","src":"5063:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3434","id":12502,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5131:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_2e9b7c94e032d8b3b8b30bd825717a5ac74958b53e7c37a892a4fd7dc56e4975","typeString":"literal_string \"44\""},"value":"44"},"visibility":"public"},{"constant":true,"functionSelector":"952633c5","id":12506,"mutability":"constant","name":"HEALTH_FACTOR_NOT_BELOW_THRESHOLD","nameLocation":"5215:33:74","nodeType":"VariableDeclaration","scope":12642,"src":"5192:63:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12504,"name":"string","nodeType":"ElementaryTypeName","src":"5192:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3435","id":12505,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5251:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc1431a2586c1e11fb75c87e5ee58e4204126a9fdde07075c91770f50276cbb0","typeString":"literal_string \"45\""},"value":"45"},"visibility":"public"},{"constant":true,"functionSelector":"895f7dc8","id":12509,"mutability":"constant","name":"COLLATERAL_CANNOT_BE_LIQUIDATED","nameLocation":"5328:31:74","nodeType":"VariableDeclaration","scope":12642,"src":"5305:61:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12507,"name":"string","nodeType":"ElementaryTypeName","src":"5305:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3436","id":12508,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5362:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_c47ece0ffae697632ce145a7086cbcf260f7fa60876ff2606761ea2b7581ee76","typeString":"literal_string \"46\""},"value":"46"},"visibility":"public"},{"constant":true,"functionSelector":"22a73446","id":12512,"mutability":"constant","name":"SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER","nameLocation":"5441:39:74","nodeType":"VariableDeclaration","scope":12642,"src":"5418:69:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12510,"name":"string","nodeType":"ElementaryTypeName","src":"5418:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3437","id":12511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5483:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_eb09910a03c892999c305d4a86a46fa82693119d981eef22c8d043b31f9e8a31","typeString":"literal_string \"47\""},"value":"47"},"visibility":"public"},{"constant":true,"functionSelector":"73dea5e3","id":12515,"mutability":"constant","name":"INCONSISTENT_FLASHLOAN_PARAMS","nameLocation":"5562:29:74","nodeType":"VariableDeclaration","scope":12642,"src":"5539:59:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12513,"name":"string","nodeType":"ElementaryTypeName","src":"5539:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3439","id":12514,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5594:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_59c0d2b7af0a8e6d3d8e710a078764bd67b7223777026c424cdb4f599824bb79","typeString":"literal_string \"49\""},"value":"49"},"visibility":"public"},{"constant":true,"functionSelector":"2eed17e8","id":12518,"mutability":"constant","name":"BORROW_CAP_EXCEEDED","nameLocation":"5664:19:74","nodeType":"VariableDeclaration","scope":12642,"src":"5641:49:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12516,"name":"string","nodeType":"ElementaryTypeName","src":"5641:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3530","id":12517,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5686:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_215d56ac8bbcf4ec574772ebea743ba30ac9d1c5e1b1ff899e5de1045f5df803","typeString":"literal_string \"50\""},"value":"50"},"visibility":"public"},{"constant":true,"functionSelector":"b0510054","id":12521,"mutability":"constant","name":"SUPPLY_CAP_EXCEEDED","nameLocation":"5745:19:74","nodeType":"VariableDeclaration","scope":12642,"src":"5722:49:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12519,"name":"string","nodeType":"ElementaryTypeName","src":"5722:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3531","id":12520,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5767:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_f928ede1c39c5595ff22fe845412ee05a93eeaa584f8ef0c46b5eeb14cb99ec8","typeString":"literal_string \"51\""},"value":"51"},"visibility":"public"},{"constant":true,"functionSelector":"6b3f7cc7","id":12524,"mutability":"constant","name":"UNBACKED_MINT_CAP_EXCEEDED","nameLocation":"5826:26:74","nodeType":"VariableDeclaration","scope":12642,"src":"5803:56:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12522,"name":"string","nodeType":"ElementaryTypeName","src":"5803:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3532","id":12523,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5855:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_cd41b8bf8f20f7ad95d96d948a315af225b219053fc98a80aee13063b692b681","typeString":"literal_string \"52\""},"value":"52"},"visibility":"public"},{"constant":true,"functionSelector":"65a83bab","id":12527,"mutability":"constant","name":"DEBT_CEILING_EXCEEDED","nameLocation":"5921:21:74","nodeType":"VariableDeclaration","scope":12642,"src":"5898:51:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12525,"name":"string","nodeType":"ElementaryTypeName","src":"5898:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3533","id":12526,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5945:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_bbd48b257be1b8216d144ef9be5734f8d11697959c9e0f7768bec89db74a63a3","typeString":"literal_string \"53\""},"value":"53"},"visibility":"public"},{"constant":true,"functionSelector":"94f9fd8a","id":12530,"mutability":"constant","name":"UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO","nameLocation":"6006:36:74","nodeType":"VariableDeclaration","scope":12642,"src":"5983:66:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12528,"name":"string","nodeType":"ElementaryTypeName","src":"5983:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3534","id":12529,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6045:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_006b3e710f3089a74ecb6b0f5948e5ff07a3db6ba4da475d2be17624ba96b95b","typeString":"literal_string \"54\""},"value":"54"},"visibility":"public"},{"constant":true,"functionSelector":"65e7ef4c","id":12533,"mutability":"constant","name":"STABLE_DEBT_NOT_ZERO","nameLocation":"6160:20:74","nodeType":"VariableDeclaration","scope":12642,"src":"6137:50:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12531,"name":"string","nodeType":"ElementaryTypeName","src":"6137:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3535","id":12532,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6183:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_6590fa52fa76f967656340b874bc9ca09733c2fddea9886210ebcbbceee04b35","typeString":"literal_string \"55\""},"value":"55"},"visibility":"public"},{"constant":true,"functionSelector":"f10727db","id":12536,"mutability":"constant","name":"VARIABLE_DEBT_SUPPLY_NOT_ZERO","nameLocation":"6250:29:74","nodeType":"VariableDeclaration","scope":12642,"src":"6227:59:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12534,"name":"string","nodeType":"ElementaryTypeName","src":"6227:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3536","id":12535,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6282:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_32da71dbd53bc029835bc5ecdd3e688035cc92bb61b1811d1685e67ba974e19f","typeString":"literal_string \"56\""},"value":"56"},"visibility":"public"},{"constant":true,"functionSelector":"b87041c2","id":12539,"mutability":"constant","name":"LTV_VALIDATION_FAILED","nameLocation":"6351:21:74","nodeType":"VariableDeclaration","scope":12642,"src":"6328:51:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12537,"name":"string","nodeType":"ElementaryTypeName","src":"6328:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3537","id":12538,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6375:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_e921da22f871c25c63f06c1365385cbb26397f64f79055cdbab32187a9377d16","typeString":"literal_string \"57\""},"value":"57"},"visibility":"public"},{"constant":true,"functionSelector":"8f7722b2","id":12542,"mutability":"constant","name":"INCONSISTENT_EMODE_CATEGORY","nameLocation":"6433:27:74","nodeType":"VariableDeclaration","scope":12642,"src":"6410:57:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12540,"name":"string","nodeType":"ElementaryTypeName","src":"6410:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3538","id":12541,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6463:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_59d26ca75eb04b47ab1bca5d789d02e4d0cf9ff8cb49c9041caeeeab4eccafbf","typeString":"literal_string \"58\""},"value":"58"},"visibility":"public"},{"constant":true,"functionSelector":"c8638082","id":12545,"mutability":"constant","name":"PRICE_ORACLE_SENTINEL_CHECK_FAILED","nameLocation":"6527:34:74","nodeType":"VariableDeclaration","scope":12642,"src":"6504:64:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12543,"name":"string","nodeType":"ElementaryTypeName","src":"6504:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3539","id":12544,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6564:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_dec29173c70f4e70086d64e09cb72b415f3d6a1843817cff62483903f0e12f62","typeString":"literal_string \"59\""},"value":"59"},"visibility":"public"},{"constant":true,"functionSelector":"8596aad5","id":12548,"mutability":"constant","name":"ASSET_NOT_BORROWABLE_IN_ISOLATION","nameLocation":"6640:33:74","nodeType":"VariableDeclaration","scope":12642,"src":"6617:63:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12546,"name":"string","nodeType":"ElementaryTypeName","src":"6617:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3630","id":12547,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6676:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_7446b42d7fe1689ec32fc1ca65129d9f21f1979742315d34500a6886f6986bea","typeString":"literal_string \"60\""},"value":"60"},"visibility":"public"},{"constant":true,"functionSelector":"d9adda85","id":12551,"mutability":"constant","name":"RESERVE_ALREADY_INITIALIZED","nameLocation":"6754:27:74","nodeType":"VariableDeclaration","scope":12642,"src":"6731:57:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12549,"name":"string","nodeType":"ElementaryTypeName","src":"6731:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3631","id":12550,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6784:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_5ae62207e7adee0b793bf869601474e77943fa4d9e3e0420f34d788e59bc19bd","typeString":"literal_string \"61\""},"value":"61"},"visibility":"public"},{"constant":true,"functionSelector":"480702ae","id":12554,"mutability":"constant","name":"USER_IN_ISOLATION_MODE_OR_LTV_ZERO","nameLocation":"6857:34:74","nodeType":"VariableDeclaration","scope":12642,"src":"6834:64:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12552,"name":"string","nodeType":"ElementaryTypeName","src":"6834:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3632","id":12553,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6894:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_d9670a00d025e59e1bd58d53874bea4ab34fea782716e2c168e89a3c8452d3bb","typeString":"literal_string \"62\""},"value":"62"},"visibility":"public"},{"constant":true,"functionSelector":"99ce53f3","id":12557,"mutability":"constant","name":"INVALID_LTV","nameLocation":"6971:11:74","nodeType":"VariableDeclaration","scope":12642,"src":"6948:41:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12555,"name":"string","nodeType":"ElementaryTypeName","src":"6948:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3633","id":12556,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6985:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_4569971f3d79dc8da7f8a6820be6cb8dc4a52bb0df6599b2aae7182111b63cd5","typeString":"literal_string \"63\""},"value":"63"},"visibility":"public"},{"constant":true,"functionSelector":"dd1dd95f","id":12560,"mutability":"constant","name":"INVALID_LIQ_THRESHOLD","nameLocation":"7059:21:74","nodeType":"VariableDeclaration","scope":12642,"src":"7036:51:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12558,"name":"string","nodeType":"ElementaryTypeName","src":"7036:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3634","id":12559,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7083:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_646d998f946f968f0675fd4e3cb527e1222094ea0d9cc1fd615146a8fe29802e","typeString":"literal_string \"64\""},"value":"64"},"visibility":"public"},{"constant":true,"functionSelector":"9527e9d9","id":12563,"mutability":"constant","name":"INVALID_LIQ_BONUS","nameLocation":"7173:17:74","nodeType":"VariableDeclaration","scope":12642,"src":"7150:47:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12561,"name":"string","nodeType":"ElementaryTypeName","src":"7150:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3635","id":12562,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7193:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_606503ebd6bdca7290248af82fd5a09ca0489398da9f242244210336ae6ece9f","typeString":"literal_string \"65\""},"value":"65"},"visibility":"public"},{"constant":true,"functionSelector":"fa163a83","id":12566,"mutability":"constant","name":"INVALID_DECIMALS","nameLocation":"7279:16:74","nodeType":"VariableDeclaration","scope":12642,"src":"7256:46:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12564,"name":"string","nodeType":"ElementaryTypeName","src":"7256:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3636","id":12565,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7298:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_35bb2e240092263378f77ea1e9c278099a33b604c4c4e26d13ea227e8bb74470","typeString":"literal_string \"66\""},"value":"66"},"visibility":"public"},{"constant":true,"functionSelector":"a4868dca","id":12569,"mutability":"constant","name":"INVALID_RESERVE_FACTOR","nameLocation":"7400:22:74","nodeType":"VariableDeclaration","scope":12642,"src":"7377:52:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12567,"name":"string","nodeType":"ElementaryTypeName","src":"7377:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3637","id":12568,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7425:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_eafa31dc210956fc0884ec5660eba9405197797219cbbda41b6aaf7118c651d8","typeString":"literal_string \"67\""},"value":"67"},"visibility":"public"},{"constant":true,"functionSelector":"d6f9fcde","id":12572,"mutability":"constant","name":"INVALID_BORROW_CAP","nameLocation":"7510:18:74","nodeType":"VariableDeclaration","scope":12642,"src":"7487:48:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12570,"name":"string","nodeType":"ElementaryTypeName","src":"7487:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3638","id":12571,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7531:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc143a676b82d5e07b2c9d57717b403ab3c58caa273a42cdb95b15980141a86c","typeString":"literal_string \"68\""},"value":"68"},"visibility":"public"},{"constant":true,"functionSelector":"26bbd053","id":12575,"mutability":"constant","name":"INVALID_SUPPLY_CAP","nameLocation":"7602:18:74","nodeType":"VariableDeclaration","scope":12642,"src":"7579:48:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12573,"name":"string","nodeType":"ElementaryTypeName","src":"7579:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3639","id":12574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7623:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_db37925934a3d3177db64e11f5e0156ceb8a756fee58ded16e549afa607ddb1d","typeString":"literal_string \"69\""},"value":"69"},"visibility":"public"},{"constant":true,"functionSelector":"8eda46bd","id":12578,"mutability":"constant","name":"INVALID_LIQUIDATION_PROTOCOL_FEE","nameLocation":"7694:32:74","nodeType":"VariableDeclaration","scope":12642,"src":"7671:62:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12576,"name":"string","nodeType":"ElementaryTypeName","src":"7671:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3730","id":12577,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7729:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_cdbc23227c72e0a3f4683bdbccfcbed38047ca1a70d48b78c210dc5393029019","typeString":"literal_string \"70\""},"value":"70"},"visibility":"public"},{"constant":true,"functionSelector":"a8c97853","id":12581,"mutability":"constant","name":"INVALID_EMODE_CATEGORY","nameLocation":"7814:22:74","nodeType":"VariableDeclaration","scope":12642,"src":"7791:52:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12579,"name":"string","nodeType":"ElementaryTypeName","src":"7791:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3731","id":12580,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7839:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_2cc0d3dcb20652cd8f106aee76b6a7391771a130885634c0eb2bbe3cde796691","typeString":"literal_string \"71\""},"value":"71"},"visibility":"public"},{"constant":true,"functionSelector":"47ba93d8","id":12584,"mutability":"constant","name":"INVALID_UNBACKED_MINT_CAP","nameLocation":"7914:25:74","nodeType":"VariableDeclaration","scope":12642,"src":"7891:55:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12582,"name":"string","nodeType":"ElementaryTypeName","src":"7891:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3732","id":12583,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7942:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_8fd0324b6a5df169e0aa0c7938ef0034d0e971a998f91b36eba211882d3617b1","typeString":"literal_string \"72\""},"value":"72"},"visibility":"public"},{"constant":true,"functionSelector":"dcc56db6","id":12587,"mutability":"constant","name":"INVALID_DEBT_CEILING","nameLocation":"8020:20:74","nodeType":"VariableDeclaration","scope":12642,"src":"7997:50:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12585,"name":"string","nodeType":"ElementaryTypeName","src":"7997:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3733","id":12586,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8043:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_b2219b801710730437d0358146c829b62297a059eceaa0b40b27aea2daecf595","typeString":"literal_string \"73\""},"value":"73"},"visibility":"public"},{"constant":true,"functionSelector":"d1cd8b1d","id":12590,"mutability":"constant","name":"INVALID_RESERVE_INDEX","nameLocation":"8115:21:74","nodeType":"VariableDeclaration","scope":12642,"src":"8092:51:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12588,"name":"string","nodeType":"ElementaryTypeName","src":"8092:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3734","id":12589,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8139:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_57014f1e5f1d53e43fa40624186159531d6372d1ab8f40ec7882845ca66de31d","typeString":"literal_string \"74\""},"value":"74"},"visibility":"public"},{"constant":true,"functionSelector":"fd1828ff","id":12593,"mutability":"constant","name":"ACL_ADMIN_CANNOT_BE_ZERO","nameLocation":"8197:24:74","nodeType":"VariableDeclaration","scope":12642,"src":"8174:54:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12591,"name":"string","nodeType":"ElementaryTypeName","src":"8174:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3735","id":12592,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8224:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_6dbb33232cde86c8a04f90a8bed9fc1c5ef520188a14538d96eb100d69bc2a94","typeString":"literal_string \"75\""},"value":"75"},"visibility":"public"},{"constant":true,"functionSelector":"bad8308c","id":12596,"mutability":"constant","name":"INCONSISTENT_PARAMS_LENGTH","nameLocation":"8304:26:74","nodeType":"VariableDeclaration","scope":12642,"src":"8281:56:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12594,"name":"string","nodeType":"ElementaryTypeName","src":"8281:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3736","id":12595,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8333:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_f1ae7da53f98170be52cc9330214a82f7ba06ee306297b4e1fb86fb21c611aa6","typeString":"literal_string \"76\""},"value":"76"},"visibility":"public"},{"constant":true,"functionSelector":"d14bb17a","id":12599,"mutability":"constant","name":"ZERO_ADDRESS_NOT_VALID","nameLocation":"8422:22:74","nodeType":"VariableDeclaration","scope":12642,"src":"8399:52:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12597,"name":"string","nodeType":"ElementaryTypeName","src":"8399:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3737","id":12598,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8447:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_7fe86492ed9171487feeb17b76d71244c5fb104d897816bb03a924e5871f3fa3","typeString":"literal_string \"77\""},"value":"77"},"visibility":"public"},{"constant":true,"functionSelector":"c08a1146","id":12602,"mutability":"constant","name":"INVALID_EXPIRATION","nameLocation":"8506:18:74","nodeType":"VariableDeclaration","scope":12642,"src":"8483:48:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12600,"name":"string","nodeType":"ElementaryTypeName","src":"8483:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3738","id":12601,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8527:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_63867b8d5e748cf93e24f7b381d92337d037805bfc271d6d67e0e86772662677","typeString":"literal_string \"78\""},"value":"78"},"visibility":"public"},{"constant":true,"functionSelector":"a3402a38","id":12605,"mutability":"constant","name":"INVALID_SIGNATURE","nameLocation":"8582:17:74","nodeType":"VariableDeclaration","scope":12642,"src":"8559:47:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12603,"name":"string","nodeType":"ElementaryTypeName","src":"8559:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3739","id":12604,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8602:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_2bf418e3ea3cce1b306c1bbf566df40bf3703cc73b456ccd399088d784bc76ee","typeString":"literal_string \"79\""},"value":"79"},"visibility":"public"},{"constant":true,"functionSelector":"8b8b98d7","id":12608,"mutability":"constant","name":"OPERATION_NOT_SUPPORTED","nameLocation":"8656:23:74","nodeType":"VariableDeclaration","scope":12642,"src":"8633:53:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12606,"name":"string","nodeType":"ElementaryTypeName","src":"8633:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3830","id":12607,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8682:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_742ccb3c5ad7b0e2030ad7fa03711e32b9f4236452343c6e16a6cf67d464d149","typeString":"literal_string \"80\""},"value":"80"},"visibility":"public"},{"constant":true,"functionSelector":"e4dd8b74","id":12611,"mutability":"constant","name":"DEBT_CEILING_NOT_ZERO","nameLocation":"8742:21:74","nodeType":"VariableDeclaration","scope":12642,"src":"8719:51:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12609,"name":"string","nodeType":"ElementaryTypeName","src":"8719:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3831","id":12610,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8766:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_e2ecacab2e0418b841e7d0b206f5c40e0e0489353c5747dd1cc77d7f5a66829f","typeString":"literal_string \"81\""},"value":"81"},"visibility":"public"},{"constant":true,"functionSelector":"cd23367c","id":12614,"mutability":"constant","name":"ASSET_NOT_LISTED","nameLocation":"8827:16:74","nodeType":"VariableDeclaration","scope":12642,"src":"8804:46:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12612,"name":"string","nodeType":"ElementaryTypeName","src":"8804:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3832","id":12613,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8846:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_5392f7a671cdf89487ccf8e3646ea8f7570009490584962db6fa064c6e4ad499","typeString":"literal_string \"82\""},"value":"82"},"visibility":"public"},{"constant":true,"functionSelector":"4e3aed37","id":12617,"mutability":"constant","name":"INVALID_OPTIMAL_USAGE_RATIO","nameLocation":"8902:27:74","nodeType":"VariableDeclaration","scope":12642,"src":"8879:57:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12615,"name":"string","nodeType":"ElementaryTypeName","src":"8879:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3833","id":12616,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8932:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_043ab7193d962ca510e48770a5a13714f4684febe0e5affcfd1eb73cfed1f218","typeString":"literal_string \"83\""},"value":"83"},"visibility":"public"},{"constant":true,"functionSelector":"c899301a","id":12620,"mutability":"constant","name":"INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","nameLocation":"8996:42:74","nodeType":"VariableDeclaration","scope":12642,"src":"8973:72:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12618,"name":"string","nodeType":"ElementaryTypeName","src":"8973:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3834","id":12619,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9041:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_ab20a672b3c5d5f71a8da6c43d4bf580ed35b623d6b0366b1de9df7e12238080","typeString":"literal_string \"84\""},"value":"84"},"visibility":"public"},{"constant":true,"functionSelector":"ab883ca0","id":12623,"mutability":"constant","name":"UNDERLYING_CANNOT_BE_RESCUED","nameLocation":"9120:28:74","nodeType":"VariableDeclaration","scope":12642,"src":"9097:58:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12621,"name":"string","nodeType":"ElementaryTypeName","src":"9097:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3835","id":12622,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9151:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_17157e479612de6088d957c64aca858964825e74089b3c7dacc26409e6d53000","typeString":"literal_string \"85\""},"value":"85"},"visibility":"public"},{"constant":true,"functionSelector":"14dcfbbc","id":12626,"mutability":"constant","name":"ADDRESSES_PROVIDER_ALREADY_ADDED","nameLocation":"9226:32:74","nodeType":"VariableDeclaration","scope":12642,"src":"9203:62:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12624,"name":"string","nodeType":"ElementaryTypeName","src":"9203:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3836","id":12625,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9261:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc193713febc75d3d9bd2f9ce113f403ff19633f15c8cdbcf79756ae23e77f9a","typeString":"literal_string \"86\""},"value":"86"},"visibility":"public"},{"constant":true,"functionSelector":"1abbb001","id":12629,"mutability":"constant","name":"POOL_ADDRESSES_DO_NOT_MATCH","nameLocation":"9344:27:74","nodeType":"VariableDeclaration","scope":12642,"src":"9321:57:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12627,"name":"string","nodeType":"ElementaryTypeName","src":"9321:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3837","id":12628,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9374:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_845e9c18ca148a712f01bf14c91c3e2fe352eabe86c44817e3f33b63f585a343","typeString":"literal_string \"87\""},"value":"87"},"visibility":"public"},{"constant":true,"functionSelector":"198d6a6b","id":12632,"mutability":"constant","name":"STABLE_BORROWING_ENABLED","nameLocation":"9516:24:74","nodeType":"VariableDeclaration","scope":12642,"src":"9493:54:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12630,"name":"string","nodeType":"ElementaryTypeName","src":"9493:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3838","id":12631,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9543:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_a3bcf8af6929b66d6da7ee355c48fd1cf926fd090bc75a4dcbf7bd8e365645e3","typeString":"literal_string \"88\""},"value":"88"},"visibility":"public"},{"constant":true,"functionSelector":"de24948c","id":12635,"mutability":"constant","name":"SILOED_BORROWING_VIOLATION","nameLocation":"9607:26:74","nodeType":"VariableDeclaration","scope":12642,"src":"9584:56:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12633,"name":"string","nodeType":"ElementaryTypeName","src":"9584:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3839","id":12634,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9636:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_5ad0f966e4dd8863f27c0e6ee7d684c0c8f4319efed210fe15662a0d29bcd615","typeString":"literal_string \"89\""},"value":"89"},"visibility":"public"},{"constant":true,"functionSelector":"e981483a","id":12638,"mutability":"constant","name":"RESERVE_DEBT_NOT_ZERO","nameLocation":"9736:21:74","nodeType":"VariableDeclaration","scope":12642,"src":"9713:51:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12636,"name":"string","nodeType":"ElementaryTypeName","src":"9713:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3930","id":12637,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9760:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_04e57633024368235fc5219bfb9802814291d3a7b9a68d0aeb7bd3d297ac474e","typeString":"literal_string \"90\""},"value":"90"},"visibility":"public"},{"constant":true,"functionSelector":"8aa3ca4c","id":12641,"mutability":"constant","name":"FLASHLOAN_DISABLED","nameLocation":"9838:18:74","nodeType":"VariableDeclaration","scope":12642,"src":"9815:48:74","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12639,"name":"string","nodeType":"ElementaryTypeName","src":"9815:6:74","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"3931","id":12640,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9859:4:74","typeDescriptions":{"typeIdentifier":"t_stringliteral_4393e7114eb674248a1480712950c28cb06e118e040859a2eafa3ca8a6dfbd69","typeString":"literal_string \"91\""},"value":"91"},"visibility":"public"}],"scope":12643,"src":"205:9704:74","usedErrors":[]}],"src":"37:9873:74"},"id":74},"@aave/core-v3/contracts/protocol/libraries/helpers/Helpers.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Helpers.sol","exportedSymbols":{"DataTypes":[21633],"Helpers":[12680],"IERC20":[1442]},"id":12681,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":12644,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:75"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../../dependencies/openzeppelin/contracts/IERC20.sol","id":12646,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12681,"sourceUnit":1443,"src":"62:79:75","symbolAliases":[{"foreign":{"id":12645,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:6:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":12648,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12681,"sourceUnit":21634,"src":"142:49:75","symbolAliases":[{"foreign":{"id":12647,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"150:9:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"Helpers","contractDependencies":[],"contractKind":"library","documentation":{"id":12649,"nodeType":"StructuredDocumentation","src":"193:49:75","text":" @title Helpers library\n @author Aave"},"fullyImplemented":true,"id":12680,"linearizedBaseContracts":[12680],"name":"Helpers","nameLocation":"251:7:75","nodeType":"ContractDefinition","nodes":[{"body":{"id":12678,"nodeType":"Block","src":"651:160:75","statements":[{"expression":{"components":[{"arguments":[{"id":12667,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12652,"src":"726:4:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":12663,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12655,"src":"679:12:75","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":12664,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21372,"src":"679:35:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12662,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"672:6:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":12665,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"672:43:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":12666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"672:53:75","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":12668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"672:59:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":12674,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12652,"src":"795:4:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":12670,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12655,"src":"746:12:75","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":12671,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21374,"src":"746:37:75","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12669,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"739:6:75","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":12672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"739:45:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":12673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"739:55:75","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":12675,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"739:61:75","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12676,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"664:142:75","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":12661,"id":12677,"nodeType":"Return","src":"657:149:75"}]},"documentation":{"id":12650,"nodeType":"StructuredDocumentation","src":"263:246:75","text":" @notice Fetches the user current stable and variable debt balances\n @param user The user address\n @param reserveCache The reserve cache data object\n @return The stable debt balance\n @return The variable debt balance"},"id":12679,"implemented":true,"kind":"function","modifiers":[],"name":"getUserCurrentDebt","nameLocation":"521:18:75","nodeType":"FunctionDefinition","parameters":{"id":12656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12652,"mutability":"mutable","name":"user","nameLocation":"553:4:75","nodeType":"VariableDeclaration","scope":12679,"src":"545:12:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12651,"name":"address","nodeType":"ElementaryTypeName","src":"545:7:75","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12655,"mutability":"mutable","name":"reserveCache","nameLocation":"593:12:75","nodeType":"VariableDeclaration","scope":12679,"src":"563:42:75","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":12654,"nodeType":"UserDefinedTypeName","pathNode":{"id":12653,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"563:22:75"},"referencedDeclaration":21379,"src":"563:22:75","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"src":"539:70:75"},"returnParameters":{"id":12661,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12658,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12679,"src":"633:7:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12657,"name":"uint256","nodeType":"ElementaryTypeName","src":"633:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12660,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12679,"src":"642:7:75","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12659,"name":"uint256","nodeType":"ElementaryTypeName","src":"642:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"632:18:75"},"scope":12680,"src":"512:299:75","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":12681,"src":"243:570:75","usedErrors":[]}],"src":"37:777:75"},"id":75},"@aave/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol","exportedSymbols":{"BorrowLogic":[13543],"DataTypes":[21633],"GPv2SafeERC20":[118],"Helpers":[12680],"IAToken":[3861],"IERC20":[1442],"IStableDebtToken":[6109],"IVariableDebtToken":[6155],"IsolationModeLogic":[15978],"ReserveConfiguration":[11857],"ReserveLogic":[18377],"SafeCast":[1966],"UserConfiguration":[12368],"ValidationLogic":[20908]},"id":13544,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":12682,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:76"},{"absolutePath":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":12684,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13544,"sourceUnit":119,"src":"63:87:76","symbolAliases":[{"foreign":{"id":12683,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:13:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"../../../dependencies/openzeppelin/contracts/SafeCast.sol","id":12686,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13544,"sourceUnit":1967,"src":"151:83:76","symbolAliases":[{"foreign":{"id":12685,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"159:8:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../../dependencies/openzeppelin/contracts/IERC20.sol","id":12688,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13544,"sourceUnit":1443,"src":"235:79:76","symbolAliases":[{"foreign":{"id":12687,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"243:6:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol","file":"../../../interfaces/IStableDebtToken.sol","id":12690,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13544,"sourceUnit":6110,"src":"315:74:76","symbolAliases":[{"foreign":{"id":12689,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"323:16:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol","file":"../../../interfaces/IVariableDebtToken.sol","id":12692,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13544,"sourceUnit":6156,"src":"390:78:76","symbolAliases":[{"foreign":{"id":12691,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"398:18:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IAToken.sol","file":"../../../interfaces/IAToken.sol","id":12694,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13544,"sourceUnit":3862,"src":"469:56:76","symbolAliases":[{"foreign":{"id":12693,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"477:7:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"../configuration/UserConfiguration.sol","id":12696,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13544,"sourceUnit":12369,"src":"526:73:76","symbolAliases":[{"foreign":{"id":12695,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"534:17:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../configuration/ReserveConfiguration.sol","id":12698,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13544,"sourceUnit":11858,"src":"600:79:76","symbolAliases":[{"foreign":{"id":12697,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"608:20:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Helpers.sol","file":"../helpers/Helpers.sol","id":12700,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13544,"sourceUnit":12681,"src":"680:47:76","symbolAliases":[{"foreign":{"id":12699,"name":"Helpers","nodeType":"Identifier","overloadedDeclarations":[],"src":"688:7:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":12702,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13544,"sourceUnit":21634,"src":"728:49:76","symbolAliases":[{"foreign":{"id":12701,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"736:9:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol","file":"./ValidationLogic.sol","id":12704,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13544,"sourceUnit":20909,"src":"778:54:76","symbolAliases":[{"foreign":{"id":12703,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"786:15:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol","file":"./ReserveLogic.sol","id":12706,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13544,"sourceUnit":18378,"src":"833:48:76","symbolAliases":[{"foreign":{"id":12705,"name":"ReserveLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"841:12:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/IsolationModeLogic.sol","file":"./IsolationModeLogic.sol","id":12708,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13544,"sourceUnit":15979,"src":"882:60:76","symbolAliases":[{"foreign":{"id":12707,"name":"IsolationModeLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"890:18:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"BorrowLogic","contractDependencies":[],"contractKind":"library","documentation":{"id":12709,"nodeType":"StructuredDocumentation","src":"944:131:76","text":" @title BorrowLogic library\n @author Aave\n @notice Implements the base logic for all the actions related to borrowing"},"fullyImplemented":true,"id":13543,"linearizedBaseContracts":[13543],"name":"BorrowLogic","nameLocation":"1084:11:76","nodeType":"ContractDefinition","nodes":[{"id":12713,"libraryName":{"id":12710,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":18377,"src":"1106:12:76"},"nodeType":"UsingForDirective","src":"1100:46:76","typeName":{"id":12712,"nodeType":"UserDefinedTypeName","pathNode":{"id":12711,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"1123:22:76"},"referencedDeclaration":21379,"src":"1123:22:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}}},{"id":12717,"libraryName":{"id":12714,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":18377,"src":"1155:12:76"},"nodeType":"UsingForDirective","src":"1149:45:76","typeName":{"id":12716,"nodeType":"UserDefinedTypeName","pathNode":{"id":12715,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"1172:21:76"},"referencedDeclaration":21315,"src":"1172:21:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},{"id":12721,"libraryName":{"id":12718,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"1203:13:76"},"nodeType":"UsingForDirective","src":"1197:31:76","typeName":{"id":12720,"nodeType":"UserDefinedTypeName","pathNode":{"id":12719,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1221:6:76"},"referencedDeclaration":1442,"src":"1221:6:76","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"id":12725,"libraryName":{"id":12722,"name":"UserConfiguration","nodeType":"IdentifierPath","referencedDeclaration":12368,"src":"1237:17:76"},"nodeType":"UsingForDirective","src":"1231:59:76","typeName":{"id":12724,"nodeType":"UserDefinedTypeName","pathNode":{"id":12723,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"1259:30:76"},"referencedDeclaration":21322,"src":"1259:30:76","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},{"id":12729,"libraryName":{"id":12726,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":11857,"src":"1299:20:76"},"nodeType":"UsingForDirective","src":"1293:65:76","typeName":{"id":12728,"nodeType":"UserDefinedTypeName","pathNode":{"id":12727,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"1324:33:76"},"referencedDeclaration":21318,"src":"1324:33:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"id":12732,"libraryName":{"id":12730,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"1367:8:76"},"nodeType":"UsingForDirective","src":"1361:27:76","typeName":{"id":12731,"name":"uint256","nodeType":"ElementaryTypeName","src":"1380:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"anonymous":false,"id":12749,"name":"Borrow","nameLocation":"1432:6:76","nodeType":"EventDefinition","parameters":{"id":12748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12734,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1460:7:76","nodeType":"VariableDeclaration","scope":12749,"src":"1444:23:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12733,"name":"address","nodeType":"ElementaryTypeName","src":"1444:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12736,"indexed":false,"mutability":"mutable","name":"user","nameLocation":"1481:4:76","nodeType":"VariableDeclaration","scope":12749,"src":"1473:12:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12735,"name":"address","nodeType":"ElementaryTypeName","src":"1473:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12738,"indexed":true,"mutability":"mutable","name":"onBehalfOf","nameLocation":"1507:10:76","nodeType":"VariableDeclaration","scope":12749,"src":"1491:26:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12737,"name":"address","nodeType":"ElementaryTypeName","src":"1491:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12740,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1531:6:76","nodeType":"VariableDeclaration","scope":12749,"src":"1523:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12739,"name":"uint256","nodeType":"ElementaryTypeName","src":"1523:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12743,"indexed":false,"mutability":"mutable","name":"interestRateMode","nameLocation":"1570:16:76","nodeType":"VariableDeclaration","scope":12749,"src":"1543:43:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"typeName":{"id":12742,"nodeType":"UserDefinedTypeName","pathNode":{"id":12741,"name":"DataTypes.InterestRateMode","nodeType":"IdentifierPath","referencedDeclaration":21337,"src":"1543:26:76"},"referencedDeclaration":21337,"src":"1543:26:76","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"visibility":"internal"},{"constant":false,"id":12745,"indexed":false,"mutability":"mutable","name":"borrowRate","nameLocation":"1600:10:76","nodeType":"VariableDeclaration","scope":12749,"src":"1592:18:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12744,"name":"uint256","nodeType":"ElementaryTypeName","src":"1592:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12747,"indexed":true,"mutability":"mutable","name":"referralCode","nameLocation":"1631:12:76","nodeType":"VariableDeclaration","scope":12749,"src":"1616:27:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":12746,"name":"uint16","nodeType":"ElementaryTypeName","src":"1616:6:76","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"1438:209:76"},"src":"1426:222:76"},{"anonymous":false,"id":12761,"name":"Repay","nameLocation":"1657:5:76","nodeType":"EventDefinition","parameters":{"id":12760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12751,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1684:7:76","nodeType":"VariableDeclaration","scope":12761,"src":"1668:23:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12750,"name":"address","nodeType":"ElementaryTypeName","src":"1668:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12753,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1713:4:76","nodeType":"VariableDeclaration","scope":12761,"src":"1697:20:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12752,"name":"address","nodeType":"ElementaryTypeName","src":"1697:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12755,"indexed":true,"mutability":"mutable","name":"repayer","nameLocation":"1739:7:76","nodeType":"VariableDeclaration","scope":12761,"src":"1723:23:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12754,"name":"address","nodeType":"ElementaryTypeName","src":"1723:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12757,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1760:6:76","nodeType":"VariableDeclaration","scope":12761,"src":"1752:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12756,"name":"uint256","nodeType":"ElementaryTypeName","src":"1752:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12759,"indexed":false,"mutability":"mutable","name":"useATokens","nameLocation":"1777:10:76","nodeType":"VariableDeclaration","scope":12761,"src":"1772:15:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12758,"name":"bool","nodeType":"ElementaryTypeName","src":"1772:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1662:129:76"},"src":"1651:141:76"},{"anonymous":false,"id":12767,"name":"RebalanceStableBorrowRate","nameLocation":"1801:25:76","nodeType":"EventDefinition","parameters":{"id":12766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12763,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1843:7:76","nodeType":"VariableDeclaration","scope":12767,"src":"1827:23:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12762,"name":"address","nodeType":"ElementaryTypeName","src":"1827:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12765,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1868:4:76","nodeType":"VariableDeclaration","scope":12767,"src":"1852:20:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12764,"name":"address","nodeType":"ElementaryTypeName","src":"1852:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1826:47:76"},"src":"1795:79:76"},{"anonymous":false,"id":12776,"name":"SwapBorrowRateMode","nameLocation":"1883:18:76","nodeType":"EventDefinition","parameters":{"id":12775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12769,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1923:7:76","nodeType":"VariableDeclaration","scope":12776,"src":"1907:23:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12768,"name":"address","nodeType":"ElementaryTypeName","src":"1907:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12771,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1952:4:76","nodeType":"VariableDeclaration","scope":12776,"src":"1936:20:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12770,"name":"address","nodeType":"ElementaryTypeName","src":"1936:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12774,"indexed":false,"mutability":"mutable","name":"interestRateMode","nameLocation":"1989:16:76","nodeType":"VariableDeclaration","scope":12776,"src":"1962:43:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"typeName":{"id":12773,"nodeType":"UserDefinedTypeName","pathNode":{"id":12772,"name":"DataTypes.InterestRateMode","nodeType":"IdentifierPath","referencedDeclaration":21337,"src":"1962:26:76"},"referencedDeclaration":21337,"src":"1962:26:76","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"visibility":"internal"}],"src":"1901:108:76"},"src":"1877:133:76"},{"anonymous":false,"id":12782,"name":"IsolationModeTotalDebtUpdated","nameLocation":"2019:29:76","nodeType":"EventDefinition","parameters":{"id":12781,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12778,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"2065:5:76","nodeType":"VariableDeclaration","scope":12782,"src":"2049:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12777,"name":"address","nodeType":"ElementaryTypeName","src":"2049:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12780,"indexed":false,"mutability":"mutable","name":"totalDebt","nameLocation":"2080:9:76","nodeType":"VariableDeclaration","scope":12782,"src":"2072:17:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12779,"name":"uint256","nodeType":"ElementaryTypeName","src":"2072:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2048:42:76"},"src":"2013:78:76"},{"body":{"id":13038,"nodeType":"Block","src":"3112:3052:76","statements":[{"assignments":[12810],"declarations":[{"constant":false,"id":12810,"mutability":"mutable","name":"reserve","nameLocation":"3148:7:76","nodeType":"VariableDeclaration","scope":13038,"src":"3118:37:76","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":12809,"nodeType":"UserDefinedTypeName","pathNode":{"id":12808,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"3118:21:76"},"referencedDeclaration":21315,"src":"3118:21:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":12815,"initialValue":{"baseExpression":{"id":12811,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12788,"src":"3158:12:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":12814,"indexExpression":{"expression":{"id":12812,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"3171:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":12813,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21409,"src":"3171:12:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3158:26:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"3118:66:76"},{"assignments":[12820],"declarations":[{"constant":false,"id":12820,"mutability":"mutable","name":"reserveCache","nameLocation":"3220:12:76","nodeType":"VariableDeclaration","scope":13038,"src":"3190:42:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":12819,"nodeType":"UserDefinedTypeName","pathNode":{"id":12818,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"3190:22:76"},"referencedDeclaration":21379,"src":"3190:22:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"id":12824,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12821,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12810,"src":"3235:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":12822,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cache","nodeType":"MemberAccess","referencedDeclaration":18376,"src":"3235:13:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$21315_storage_ptr_$returns$_t_struct$_ReserveCache_$21379_memory_ptr_$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (struct DataTypes.ReserveCache memory)"}},"id":12823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3235:15:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"nodeType":"VariableDeclarationStatement","src":"3190:60:76"},{"expression":{"arguments":[{"id":12828,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12820,"src":"3277:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":12825,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12810,"src":"3257:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":12827,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":17793,"src":"3257:19:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$returns$__$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":12829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3257:33:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12830,"nodeType":"ExpressionStatement","src":"3257:33:76"},{"assignments":[12832,12834,12836],"declarations":[{"constant":false,"id":12832,"mutability":"mutable","name":"isolationModeActive","nameLocation":"3310:19:76","nodeType":"VariableDeclaration","scope":13038,"src":"3305:24:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12831,"name":"bool","nodeType":"ElementaryTypeName","src":"3305:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12834,"mutability":"mutable","name":"isolationModeCollateralAddress","nameLocation":"3345:30:76","nodeType":"VariableDeclaration","scope":13038,"src":"3337:38:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":12833,"name":"address","nodeType":"ElementaryTypeName","src":"3337:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":12836,"mutability":"mutable","name":"isolationModeDebtCeiling","nameLocation":"3391:24:76","nodeType":"VariableDeclaration","scope":13038,"src":"3383:32:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12835,"name":"uint256","nodeType":"ElementaryTypeName","src":"3383:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12842,"initialValue":{"arguments":[{"id":12839,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12788,"src":"3457:12:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":12840,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12792,"src":"3471:12:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}],"expression":{"id":12837,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12800,"src":"3424:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":12838,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getIsolationModeState","nodeType":"MemberAccess","referencedDeclaration":12262,"src":"3424:32:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$returns$_t_bool_$_t_address_$_t_uint256_$bound_to$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address)) view returns (bool,address,uint256)"}},"id":12841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3424:60:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$_t_uint256_$","typeString":"tuple(bool,address,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"3297:187:76"},{"expression":{"arguments":[{"id":12846,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12788,"src":"3529:12:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":12847,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12792,"src":"3549:12:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":12848,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12797,"src":"3569:15:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"arguments":[{"id":12851,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12820,"src":"3647:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":12852,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12800,"src":"3681:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"expression":{"id":12853,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"3708:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":12854,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21409,"src":"3708:12:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":12855,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"3743:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":12856,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":21413,"src":"3743:17:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":12857,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"3778:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":12858,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21415,"src":"3778:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":12859,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"3819:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":12860,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateMode","nodeType":"MemberAccess","referencedDeclaration":21418,"src":"3819:23:76","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},{"expression":{"id":12861,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"3874:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":12862,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"maxStableRateBorrowSizePercent","nodeType":"MemberAccess","referencedDeclaration":21424,"src":"3874:37:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":12863,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"3936:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":12864,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":21426,"src":"3936:20:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":12865,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"3974:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":12866,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"oracle","nodeType":"MemberAccess","referencedDeclaration":21428,"src":"3974:13:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":12867,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"4016:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":12868,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":21430,"src":"4016:24:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"expression":{"id":12869,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"4071:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":12870,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"priceOracleSentinel","nodeType":"MemberAccess","referencedDeclaration":21432,"src":"4071:26:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12871,"name":"isolationModeActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12832,"src":"4128:19:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":12872,"name":"isolationModeCollateralAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12834,"src":"4189:30:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12873,"name":"isolationModeDebtCeiling","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12836,"src":"4255:24:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12849,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"3592:9:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":12850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ValidateBorrowParams","nodeType":"MemberAccess","referencedDeclaration":21588,"src":"3592:30:76","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ValidateBorrowParams_$21588_storage_ptr_$","typeString":"type(struct DataTypes.ValidateBorrowParams storage pointer)"}},"id":12874,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["reserveCache","userConfig","asset","userAddress","amount","interestRateMode","maxStableLoanPercent","reservesCount","oracle","userEModeCategory","priceOracleSentinel","isolationModeActive","isolationModeCollateralAddress","isolationModeDebtCeiling"],"nodeType":"FunctionCall","src":"3592:696:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}],"expression":{"id":12843,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20908,"src":"3491:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$20908_$","typeString":"type(library ValidationLogic)"}},"id":12845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateBorrow","nodeType":"MemberAccess","referencedDeclaration":19883,"src":"3491:30:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_$_t_struct$_ValidateBorrowParams_$21588_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.ValidateBorrowParams memory) view"}},"id":12875,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3491:803:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12876,"nodeType":"ExpressionStatement","src":"3491:803:76"},{"assignments":[12878],"declarations":[{"constant":false,"id":12878,"mutability":"mutable","name":"currentStableRate","nameLocation":"4309:17:76","nodeType":"VariableDeclaration","scope":13038,"src":"4301:25:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12877,"name":"uint256","nodeType":"ElementaryTypeName","src":"4301:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12880,"initialValue":{"hexValue":"30","id":12879,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4329:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4301:29:76"},{"assignments":[12882],"declarations":[{"constant":false,"id":12882,"mutability":"mutable","name":"isFirstBorrowing","nameLocation":"4341:16:76","nodeType":"VariableDeclaration","scope":13038,"src":"4336:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12881,"name":"bool","nodeType":"ElementaryTypeName","src":"4336:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":12884,"initialValue":{"hexValue":"66616c7365","id":12883,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4360:5:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"4336:29:76"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"id":12890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12885,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"4376:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":12886,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateMode","nodeType":"MemberAccess","referencedDeclaration":21418,"src":"4376:23:76","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":12887,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"4403:9:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":12888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"4403:26:76","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":12889,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"STABLE","nodeType":"MemberAccess","referencedDeclaration":21335,"src":"4403:33:76","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"src":"4376:60:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":12938,"nodeType":"Block","src":"4808:236:76","statements":[{"expression":{"id":12936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":12918,"name":"isFirstBorrowing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12882,"src":"4817:16:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":12919,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12820,"src":"4835:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":12920,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":21341,"src":"4835:35:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12921,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"4816:55:76","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":12927,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"4953:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":12928,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":21411,"src":"4953:11:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":12929,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"4966:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":12930,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":21413,"src":"4966:17:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":12931,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"4985:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":12932,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21415,"src":"4985:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":12933,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12820,"src":"5000:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":12934,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":21359,"src":"5000:36:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":12923,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12820,"src":"4902:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":12924,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21374,"src":"4902:37:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12922,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6155,"src":"4874:18:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVariableDebtToken_$6155_$","typeString":"type(contract IVariableDebtToken)"}},"id":12925,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4874:73:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVariableDebtToken_$6155","typeString":"contract IVariableDebtToken"}},"id":12926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":6136,"src":"4874:78:76","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (address,address,uint256,uint256) external returns (bool,uint256)"}},"id":12935,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4874:163:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"src":"4816:221:76","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12937,"nodeType":"ExpressionStatement","src":"4816:221:76"}]},"id":12939,"nodeType":"IfStatement","src":"4372:672:76","trueBody":{"id":12917,"nodeType":"Block","src":"4438:364:76","statements":[{"expression":{"id":12894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12891,"name":"currentStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12878,"src":"4446:17:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":12892,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12810,"src":"4466:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":12893,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21296,"src":"4466:31:76","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"4446:51:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12895,"nodeType":"ExpressionStatement","src":"4446:51:76"},{"expression":{"id":12915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":12896,"name":"isFirstBorrowing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12882,"src":"4516:16:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":12897,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12820,"src":"4542:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":12898,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":21351,"src":"4542:32:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":12899,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12820,"src":"4584:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":12900,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextAvgStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21349,"src":"4584:36:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12901,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"4506:122:76","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$_t_uint256_$","typeString":"tuple(bool,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":12907,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"4699:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":12908,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":21411,"src":"4699:11:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":12909,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"4720:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":12910,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":21413,"src":"4720:17:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":12911,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"4747:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":12912,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21415,"src":"4747:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12913,"name":"currentStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12878,"src":"4770:17:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":12903,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12820,"src":"4648:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":12904,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21372,"src":"4648:35:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12902,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6109,"src":"4631:16:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6109_$","typeString":"type(contract IStableDebtToken)"}},"id":12905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4631:53:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6109","typeString":"contract IStableDebtToken"}},"id":12906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":6034,"src":"4631:58:76","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$_t_uint256_$","typeString":"function (address,address,uint256,uint256) external returns (bool,uint256,uint256)"}},"id":12914,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4631:164:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$_t_uint256_$","typeString":"tuple(bool,uint256,uint256)"}},"src":"4506:289:76","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12916,"nodeType":"ExpressionStatement","src":"4506:289:76"}]}},{"condition":{"id":12940,"name":"isFirstBorrowing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12882,"src":"5054:16:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12950,"nodeType":"IfStatement","src":"5050:78:76","trueBody":{"id":12949,"nodeType":"Block","src":"5072:56:76","statements":[{"expression":{"arguments":[{"expression":{"id":12944,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12810,"src":"5104:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":12945,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"5104:10:76","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"hexValue":"74727565","id":12946,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5116:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":12941,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12800,"src":"5080:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":12943,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setBorrowing","nodeType":"MemberAccess","referencedDeclaration":11924,"src":"5080:23:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_uint256_$_t_bool_$returns$__$bound_to$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)"}},"id":12947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5080:41:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12948,"nodeType":"ExpressionStatement","src":"5080:41:76"}]}},{"condition":{"id":12951,"name":"isolationModeActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12832,"src":"5138:19:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12982,"nodeType":"IfStatement","src":"5134:443:76","trueBody":{"id":12981,"nodeType":"Block","src":"5159:418:76","statements":[{"assignments":[12953],"declarations":[{"constant":false,"id":12953,"mutability":"mutable","name":"nextIsolationModeTotalDebt","nameLocation":"5175:26:76","nodeType":"VariableDeclaration","scope":12981,"src":"5167:34:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12952,"name":"uint256","nodeType":"ElementaryTypeName","src":"5167:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12975,"initialValue":{"id":12974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":12954,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12788,"src":"5204:12:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":12956,"indexExpression":{"id":12955,"name":"isolationModeCollateralAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12834,"src":"5217:30:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5204:44:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":12957,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"isolationModeTotalDebt","nodeType":"MemberAccess","referencedDeclaration":21314,"src":"5204:76:76","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12958,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"5285:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":12959,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21415,"src":"5285:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":12960,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5309:2:76","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":12961,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12820,"src":"5326:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":12962,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"5326:33:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":12963,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDecimals","nodeType":"MemberAccess","referencedDeclaration":10933,"src":"5326:45:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":12964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5326:47:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":12965,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11857,"src":"5388:20:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReserveConfiguration_$11857_$","typeString":"type(library ReserveConfiguration)"}},"id":12966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"DEBT_CEILING_DECIMALS","nodeType":"MemberAccess","referencedDeclaration":10728,"src":"5388:42:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5326:104:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12968,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5325:106:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5309:122:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5285:146:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":12971,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5284:148:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"5284:158:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":12973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5284:160:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"5204:240:76","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"5167:277:76"},{"eventCall":{"arguments":[{"id":12977,"name":"isolationModeCollateralAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12834,"src":"5496:30:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12978,"name":"nextIsolationModeTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12953,"src":"5536:26:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12976,"name":"IsolationModeTotalDebtUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12782,"src":"5457:29:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":12979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5457:113:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12980,"nodeType":"EmitStatement","src":"5452:118:76"}]}},{"expression":{"arguments":[{"id":12986,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12820,"src":"5618:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"expression":{"id":12987,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"5638:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":12988,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21409,"src":"5638:12:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":12989,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5658:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"condition":{"expression":{"id":12990,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"5667:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":12991,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"releaseUnderlying","nodeType":"MemberAccess","referencedDeclaration":21422,"src":"5667:24:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":12994,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5710:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":12995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"5667:44:76","trueExpression":{"expression":{"id":12992,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"5694:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":12993,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21415,"src":"5694:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12983,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12810,"src":"5583:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":12985,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateInterestRates","nodeType":"MemberAccess","referencedDeclaration":18024,"src":"5583:27:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,uint256,uint256)"}},"id":12996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5583:134:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12997,"nodeType":"ExpressionStatement","src":"5583:134:76"},{"condition":{"expression":{"id":12998,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"5728:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":12999,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"releaseUnderlying","nodeType":"MemberAccess","referencedDeclaration":21422,"src":"5728:24:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13012,"nodeType":"IfStatement","src":"5724:129:76","trueBody":{"id":13011,"nodeType":"Block","src":"5754:99:76","statements":[{"expression":{"arguments":[{"expression":{"id":13005,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"5819:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":13006,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":21411,"src":"5819:11:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13007,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"5832:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":13008,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21415,"src":"5832:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":13001,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12820,"src":"5770:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13002,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"5770:26:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13000,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3861,"src":"5762:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3861_$","typeString":"type(contract IAToken)"}},"id":13003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5762:35:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":13004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferUnderlyingTo","nodeType":"MemberAccess","referencedDeclaration":3796,"src":"5762:56:76","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":13009,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5762:84:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13010,"nodeType":"ExpressionStatement","src":"5762:84:76"}]}},{"eventCall":{"arguments":[{"expression":{"id":13014,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"5878:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":13015,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21409,"src":"5878:12:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13016,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"5898:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":13017,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":21411,"src":"5898:11:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13018,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"5917:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":13019,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":21413,"src":"5917:17:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13020,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"5942:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":13021,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21415,"src":"5942:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13022,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"5963:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":13023,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateMode","nodeType":"MemberAccess","referencedDeclaration":21418,"src":"5963:23:76","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},{"condition":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"id":13029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13024,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"5994:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":13025,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateMode","nodeType":"MemberAccess","referencedDeclaration":21418,"src":"5994:23:76","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":13026,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"6021:9:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":13027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"6021:26:76","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":13028,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"STABLE","nodeType":"MemberAccess","referencedDeclaration":21335,"src":"6021:33:76","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"src":"5994:60:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":13031,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12810,"src":"6093:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13032,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21294,"src":"6093:33:76","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":13033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"5994:132:76","trueExpression":{"id":13030,"name":"currentStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12878,"src":"6065:17:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13034,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12803,"src":"6134:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}},"id":13035,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"referralCode","nodeType":"MemberAccess","referencedDeclaration":21420,"src":"6134:19:76","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"id":13013,"name":"Borrow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12749,"src":"5864:6:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_enum$_InterestRateMode_$21337_$_t_uint256_$_t_uint16_$returns$__$","typeString":"function (address,address,address,uint256,enum DataTypes.InterestRateMode,uint256,uint16)"}},"id":13036,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5864:295:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13037,"nodeType":"EmitStatement","src":"5859:300:76"}]},"documentation":{"id":12783,"nodeType":"StructuredDocumentation","src":"2095:683:76","text":" @notice Implements the borrow feature. Borrowing allows users that provided collateral to draw liquidity from the\n Aave protocol proportionally to their collateralization power. For isolated positions, it also increases the\n isolated debt.\n @dev  Emits the `Borrow()` event\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param eModeCategories The configuration of all the efficiency mode categories\n @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n @param params The additional parameters needed to execute the borrow function"},"functionSelector":"1e6473f9","id":13039,"implemented":true,"kind":"function","modifiers":[],"name":"executeBorrow","nameLocation":"2790:13:76","nodeType":"FunctionDefinition","parameters":{"id":12804,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12788,"mutability":"mutable","name":"reservesData","nameLocation":"2859:12:76","nodeType":"VariableDeclaration","scope":13039,"src":"2809:62:76","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":12787,"keyType":{"id":12784,"name":"address","nodeType":"ElementaryTypeName","src":"2817:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2809:41:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":12786,"nodeType":"UserDefinedTypeName","pathNode":{"id":12785,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"2828:21:76"},"referencedDeclaration":21315,"src":"2828:21:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":12792,"mutability":"mutable","name":"reservesList","nameLocation":"2913:12:76","nodeType":"VariableDeclaration","scope":13039,"src":"2877:48:76","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":12791,"keyType":{"id":12789,"name":"uint256","nodeType":"ElementaryTypeName","src":"2885:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"2877:27:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":12790,"name":"address","nodeType":"ElementaryTypeName","src":"2896:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":12797,"mutability":"mutable","name":"eModeCategories","nameLocation":"2981:15:76","nodeType":"VariableDeclaration","scope":13039,"src":"2931:65:76","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":12796,"keyType":{"id":12793,"name":"uint8","nodeType":"ElementaryTypeName","src":"2939:5:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"2931:41:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":12795,"nodeType":"UserDefinedTypeName","pathNode":{"id":12794,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":21333,"src":"2948:23:76"},"referencedDeclaration":21333,"src":"2948:23:76","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":12800,"mutability":"mutable","name":"userConfig","nameLocation":"3041:10:76","nodeType":"VariableDeclaration","scope":13039,"src":"3002:49:76","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":12799,"nodeType":"UserDefinedTypeName","pathNode":{"id":12798,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"3002:30:76"},"referencedDeclaration":21322,"src":"3002:30:76","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":12803,"mutability":"mutable","name":"params","nameLocation":"3094:6:76","nodeType":"VariableDeclaration","scope":13039,"src":"3057:43:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams"},"typeName":{"id":12802,"nodeType":"UserDefinedTypeName","pathNode":{"id":12801,"name":"DataTypes.ExecuteBorrowParams","nodeType":"IdentifierPath","referencedDeclaration":21433,"src":"3057:29:76"},"referencedDeclaration":21433,"src":"3057:29:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_storage_ptr","typeString":"struct DataTypes.ExecuteBorrowParams"}},"visibility":"internal"}],"src":"2803:301:76"},"returnParameters":{"id":12805,"nodeType":"ParameterList","parameters":[],"src":"3112:0:76"},"scope":13543,"src":"2781:3383:76","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":13299,"nodeType":"Block","src":"7097:2410:76","statements":[{"assignments":[13064],"declarations":[{"constant":false,"id":13064,"mutability":"mutable","name":"reserve","nameLocation":"7133:7:76","nodeType":"VariableDeclaration","scope":13299,"src":"7103:37:76","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":13063,"nodeType":"UserDefinedTypeName","pathNode":{"id":13062,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"7103:21:76"},"referencedDeclaration":21315,"src":"7103:21:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":13069,"initialValue":{"baseExpression":{"id":13065,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13045,"src":"7143:12:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":13068,"indexExpression":{"expression":{"id":13066,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13055,"src":"7156:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":13067,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21435,"src":"7156:12:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7143:26:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"7103:66:76"},{"assignments":[13074],"declarations":[{"constant":false,"id":13074,"mutability":"mutable","name":"reserveCache","nameLocation":"7205:12:76","nodeType":"VariableDeclaration","scope":13299,"src":"7175:42:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":13073,"nodeType":"UserDefinedTypeName","pathNode":{"id":13072,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"7175:22:76"},"referencedDeclaration":21379,"src":"7175:22:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"id":13078,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":13075,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13064,"src":"7220:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13076,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cache","nodeType":"MemberAccess","referencedDeclaration":18376,"src":"7220:13:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$21315_storage_ptr_$returns$_t_struct$_ReserveCache_$21379_memory_ptr_$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (struct DataTypes.ReserveCache memory)"}},"id":13077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7220:15:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"nodeType":"VariableDeclarationStatement","src":"7175:60:76"},{"expression":{"arguments":[{"id":13082,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13074,"src":"7261:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":13079,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13064,"src":"7241:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13081,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":17793,"src":"7241:19:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$returns$__$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":13083,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7241:33:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13084,"nodeType":"ExpressionStatement","src":"7241:33:76"},{"assignments":[13086,13088],"declarations":[{"constant":false,"id":13086,"mutability":"mutable","name":"stableDebt","nameLocation":"7290:10:76","nodeType":"VariableDeclaration","scope":13299,"src":"7282:18:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13085,"name":"uint256","nodeType":"ElementaryTypeName","src":"7282:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13088,"mutability":"mutable","name":"variableDebt","nameLocation":"7310:12:76","nodeType":"VariableDeclaration","scope":13299,"src":"7302:20:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13087,"name":"uint256","nodeType":"ElementaryTypeName","src":"7302:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13095,"initialValue":{"arguments":[{"expression":{"id":13091,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13055,"src":"7360:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":13092,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":21442,"src":"7360:17:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13093,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13074,"src":"7385:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":13089,"name":"Helpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12680,"src":"7326:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Helpers_$12680_$","typeString":"type(library Helpers)"}},"id":13090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getUserCurrentDebt","nodeType":"MemberAccess","referencedDeclaration":12679,"src":"7326:26:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_struct$_ReserveCache_$21379_memory_ptr_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,struct DataTypes.ReserveCache memory) view returns (uint256,uint256)"}},"id":13094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7326:77:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"7281:122:76"},{"expression":{"arguments":[{"id":13099,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13074,"src":"7447:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"expression":{"id":13100,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13055,"src":"7467:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":13101,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21437,"src":"7467:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13102,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13055,"src":"7488:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":13103,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateMode","nodeType":"MemberAccess","referencedDeclaration":21440,"src":"7488:23:76","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},{"expression":{"id":13104,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13055,"src":"7519:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":13105,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":21442,"src":"7519:17:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13106,"name":"stableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13086,"src":"7544:10:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13107,"name":"variableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13088,"src":"7562:12:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13096,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20908,"src":"7410:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$20908_$","typeString":"type(library ValidationLogic)"}},"id":13098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateRepay","nodeType":"MemberAccess","referencedDeclaration":19975,"src":"7410:29:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveCache_$21379_memory_ptr_$_t_uint256_$_t_enum$_InterestRateMode_$21337_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (struct DataTypes.ReserveCache memory,uint256,enum DataTypes.InterestRateMode,address,uint256,uint256) view"}},"id":13108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7410:170:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13109,"nodeType":"ExpressionStatement","src":"7410:170:76"},{"assignments":[13111],"declarations":[{"constant":false,"id":13111,"mutability":"mutable","name":"paybackAmount","nameLocation":"7595:13:76","nodeType":"VariableDeclaration","scope":13299,"src":"7587:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13110,"name":"uint256","nodeType":"ElementaryTypeName","src":"7587:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13121,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"id":13117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13112,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13055,"src":"7611:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":13113,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateMode","nodeType":"MemberAccess","referencedDeclaration":21440,"src":"7611:23:76","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":13114,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"7638:9:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":13115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"7638:26:76","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":13116,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"STABLE","nodeType":"MemberAccess","referencedDeclaration":21335,"src":"7638:33:76","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"src":"7611:60:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":13119,"name":"variableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13088,"src":"7699:12:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"7611:100:76","trueExpression":{"id":13118,"name":"stableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13086,"src":"7680:10:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7587:124:76"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13122,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13055,"src":"7801:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":13123,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"useATokens","nodeType":"MemberAccess","referencedDeclaration":21444,"src":"7801:17:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13124,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13055,"src":"7822:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":13125,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21437,"src":"7822:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":13128,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7844:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13127,"name":"uint256","nodeType":"ElementaryTypeName","src":"7844:7:76","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":13126,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7839:4:76","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":13129,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7839:13:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":13130,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"7839:17:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7822:34:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7801:55:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13147,"nodeType":"IfStatement","src":"7797:149:76","trueBody":{"id":13146,"nodeType":"Block","src":"7858:88:76","statements":[{"expression":{"id":13144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13133,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13055,"src":"7866:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":13135,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21437,"src":"7866:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":13141,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7928:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"7928:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":13137,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13074,"src":"7890:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13138,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"7890:26:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13136,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3861,"src":"7882:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3861_$","typeString":"type(contract IAToken)"}},"id":13139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7882:35:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":13140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"7882:45:76","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":13143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7882:57:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7866:73:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13145,"nodeType":"ExpressionStatement","src":"7866:73:76"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13148,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13055,"src":"7956:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":13149,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21437,"src":"7956:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":13150,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13111,"src":"7972:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7956:29:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13158,"nodeType":"IfStatement","src":"7952:79:76","trueBody":{"id":13157,"nodeType":"Block","src":"7987:44:76","statements":[{"expression":{"id":13155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13152,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13111,"src":"7995:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":13153,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13055,"src":"8011:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":13154,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21437,"src":"8011:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7995:29:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13156,"nodeType":"ExpressionStatement","src":"7995:29:76"}]}},{"condition":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"id":13164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13159,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13055,"src":"8041:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":13160,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateMode","nodeType":"MemberAccess","referencedDeclaration":21440,"src":"8041:23:76","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":13161,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"8068:9:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":13162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"8068:26:76","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":13163,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"STABLE","nodeType":"MemberAccess","referencedDeclaration":21335,"src":"8068:33:76","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"src":"8041:60:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":13199,"nodeType":"Block","src":"8307:203:76","statements":[{"expression":{"id":13197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13183,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13074,"src":"8315:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13185,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":21341,"src":"8315:35:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":13191,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13055,"src":"8432:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":13192,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":21442,"src":"8432:17:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13193,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13111,"src":"8451:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13194,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13074,"src":"8466:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13195,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":21359,"src":"8466:36:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":13187,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13074,"src":"8381:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13188,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21374,"src":"8381:37:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13186,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6155,"src":"8353:18:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVariableDebtToken_$6155_$","typeString":"type(contract IVariableDebtToken)"}},"id":13189,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8353:73:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVariableDebtToken_$6155","typeString":"contract IVariableDebtToken"}},"id":13190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":6148,"src":"8353:78:76","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,uint256,uint256) external returns (uint256)"}},"id":13196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8353:150:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8315:188:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13198,"nodeType":"ExpressionStatement","src":"8315:188:76"}]},"id":13200,"nodeType":"IfStatement","src":"8037:473:76","trueBody":{"id":13182,"nodeType":"Block","src":"8103:198:76","statements":[{"expression":{"id":13180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":13165,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13074,"src":"8112:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13167,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":21351,"src":"8112:32:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13168,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13074,"src":"8146:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13169,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextAvgStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21349,"src":"8146:36:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13170,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"8111:72:76","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":13176,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13055,"src":"8261:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":13177,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":21442,"src":"8261:17:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13178,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13111,"src":"8280:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":13172,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13074,"src":"8212:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13173,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21372,"src":"8212:35:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13171,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6109,"src":"8186:16:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6109_$","typeString":"type(contract IStableDebtToken)"}},"id":13174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8186:69:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6109","typeString":"contract IStableDebtToken"}},"id":13175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":6046,"src":"8186:74:76","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,uint256) external returns (uint256,uint256)"}},"id":13179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8186:108:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"8111:183:76","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13181,"nodeType":"ExpressionStatement","src":"8111:183:76"}]}},{"expression":{"arguments":[{"id":13204,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13074,"src":"8551:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"expression":{"id":13205,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13055,"src":"8571:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":13206,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21435,"src":"8571:12:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"condition":{"expression":{"id":13207,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13055,"src":"8591:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":13208,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"useATokens","nodeType":"MemberAccess","referencedDeclaration":21444,"src":"8591:17:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":13210,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13111,"src":"8615:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"8591:37:76","trueExpression":{"hexValue":"30","id":13209,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8611:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":13212,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8636:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":13201,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13064,"src":"8516:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13203,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateInterestRates","nodeType":"MemberAccess","referencedDeclaration":18024,"src":"8516:27:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,uint256,uint256)"}},"id":13213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8516:127:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13214,"nodeType":"ExpressionStatement","src":"8516:127:76"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13215,"name":"stableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13086,"src":"8654:10:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":13216,"name":"variableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13088,"src":"8667:12:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8654:25:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":13218,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13111,"src":"8682:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8654:41:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13220,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8699:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8654:46:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13231,"nodeType":"IfStatement","src":"8650:109:76","trueBody":{"id":13230,"nodeType":"Block","src":"8702:57:76","statements":[{"expression":{"arguments":[{"expression":{"id":13225,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13064,"src":"8734:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13226,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"8734:10:76","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"hexValue":"66616c7365","id":13227,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8746:5:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13222,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13052,"src":"8710:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":13224,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setBorrowing","nodeType":"MemberAccess","referencedDeclaration":11924,"src":"8710:23:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_uint256_$_t_bool_$returns$__$bound_to$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)"}},"id":13228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8710:42:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13229,"nodeType":"ExpressionStatement","src":"8710:42:76"}]}},{"expression":{"arguments":[{"id":13235,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13045,"src":"8820:12:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":13236,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13049,"src":"8840:12:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":13237,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13052,"src":"8860:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"id":13238,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13074,"src":"8878:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":13239,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13111,"src":"8898:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13232,"name":"IsolationModeLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15978,"src":"8765:18:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IsolationModeLogic_$15978_$","typeString":"type(library IsolationModeLogic)"}},"id":13234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"updateIsolatedDebtIfIsolated","nodeType":"MemberAccess","referencedDeclaration":15977,"src":"8765:47:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveCache memory,uint256)"}},"id":13240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8765:152:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13241,"nodeType":"ExpressionStatement","src":"8765:152:76"},{"condition":{"expression":{"id":13242,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13055,"src":"8928:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":13243,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"useATokens","nodeType":"MemberAccess","referencedDeclaration":21444,"src":"8928:17:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":13283,"nodeType":"Block","src":"9136:244:76","statements":[{"expression":{"arguments":[{"expression":{"id":13264,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9182:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"9182:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13266,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13074,"src":"9194:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13267,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"9194:26:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13268,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13111,"src":"9222:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":13260,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13055,"src":"9151:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":13261,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21435,"src":"9151:12:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13259,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"9144:6:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":13262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9144:20:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":13263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":106,"src":"9144:37:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":13269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9144:92:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13270,"nodeType":"ExpressionStatement","src":"9144:92:76"},{"expression":{"arguments":[{"expression":{"id":13276,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9305:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"9305:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13278,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13055,"src":"9325:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":13279,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":21442,"src":"9325:17:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13280,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13111,"src":"9352:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":13272,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13074,"src":"9252:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13273,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"9252:26:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13271,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3861,"src":"9244:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3861_$","typeString":"type(contract IAToken)"}},"id":13274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9244:35:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":13275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"handleRepayment","nodeType":"MemberAccess","referencedDeclaration":3806,"src":"9244:51:76","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":13281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9244:129:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13282,"nodeType":"ExpressionStatement","src":"9244:129:76"}]},"id":13284,"nodeType":"IfStatement","src":"8924:456:76","trueBody":{"id":13258,"nodeType":"Block","src":"8947:183:76","statements":[{"expression":{"arguments":[{"expression":{"id":13249,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9005:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"9005:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13251,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13074,"src":"9025:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13252,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"9025:26:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13253,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13111,"src":"9061:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13254,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13074,"src":"9084:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13255,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21355,"src":"9084:31:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":13245,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13074,"src":"8963:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13246,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"8963:26:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13244,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3861,"src":"8955:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3861_$","typeString":"type(contract IAToken)"}},"id":13247,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8955:35:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":13248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":3770,"src":"8955:40:76","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256) external"}},"id":13256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8955:168:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13257,"nodeType":"ExpressionStatement","src":"8955:168:76"}]}},{"eventCall":{"arguments":[{"expression":{"id":13286,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13055,"src":"9397:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":13287,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21435,"src":"9397:12:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13288,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13055,"src":"9411:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":13289,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":21442,"src":"9411:17:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13290,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9430:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"9430:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13292,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13111,"src":"9442:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13293,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13055,"src":"9457:6:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"id":13294,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"useATokens","nodeType":"MemberAccess","referencedDeclaration":21444,"src":"9457:17:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":13285,"name":"Repay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12761,"src":"9391:5:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,address,address,uint256,bool)"}},"id":13295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9391:84:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13296,"nodeType":"EmitStatement","src":"9386:89:76"},{"expression":{"id":13297,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13111,"src":"9489:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13059,"id":13298,"nodeType":"Return","src":"9482:20:76"}]},"documentation":{"id":13040,"nodeType":"StructuredDocumentation","src":"6168:648:76","text":" @notice Implements the repay feature. Repaying transfers the underlying back to the aToken and clears the\n equivalent amount of debt for the user by burning the corresponding debt token. For isolated positions, it also\n reduces the isolated debt.\n @dev  Emits the `Repay()` event\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n @param params The additional parameters needed to execute the repay function\n @return The actual amount being repaid"},"functionSelector":"40e95de6","id":13300,"implemented":true,"kind":"function","modifiers":[],"name":"executeRepay","nameLocation":"6828:12:76","nodeType":"FunctionDefinition","parameters":{"id":13056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13045,"mutability":"mutable","name":"reservesData","nameLocation":"6896:12:76","nodeType":"VariableDeclaration","scope":13300,"src":"6846:62:76","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":13044,"keyType":{"id":13041,"name":"address","nodeType":"ElementaryTypeName","src":"6854:7:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6846:41:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":13043,"nodeType":"UserDefinedTypeName","pathNode":{"id":13042,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"6865:21:76"},"referencedDeclaration":21315,"src":"6865:21:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":13049,"mutability":"mutable","name":"reservesList","nameLocation":"6950:12:76","nodeType":"VariableDeclaration","scope":13300,"src":"6914:48:76","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":13048,"keyType":{"id":13046,"name":"uint256","nodeType":"ElementaryTypeName","src":"6922:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"6914:27:76","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":13047,"name":"address","nodeType":"ElementaryTypeName","src":"6933:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":13052,"mutability":"mutable","name":"userConfig","nameLocation":"7007:10:76","nodeType":"VariableDeclaration","scope":13300,"src":"6968:49:76","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":13051,"nodeType":"UserDefinedTypeName","pathNode":{"id":13050,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"6968:30:76"},"referencedDeclaration":21322,"src":"6968:30:76","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":13055,"mutability":"mutable","name":"params","nameLocation":"7059:6:76","nodeType":"VariableDeclaration","scope":13300,"src":"7023:42:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams"},"typeName":{"id":13054,"nodeType":"UserDefinedTypeName","pathNode":{"id":13053,"name":"DataTypes.ExecuteRepayParams","nodeType":"IdentifierPath","referencedDeclaration":21445,"src":"7023:28:76"},"referencedDeclaration":21445,"src":"7023:28:76","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_storage_ptr","typeString":"struct DataTypes.ExecuteRepayParams"}},"visibility":"internal"}],"src":"6840:229:76"},"returnParameters":{"id":13059,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13058,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13300,"src":"7088:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13057,"name":"uint256","nodeType":"ElementaryTypeName","src":"7088:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7087:9:76"},"scope":13543,"src":"6819:2688:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":13391,"nodeType":"Block","src":"10254:690:76","statements":[{"assignments":[13315],"declarations":[{"constant":false,"id":13315,"mutability":"mutable","name":"reserveCache","nameLocation":"10290:12:76","nodeType":"VariableDeclaration","scope":13391,"src":"10260:42:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":13314,"nodeType":"UserDefinedTypeName","pathNode":{"id":13313,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"10260:22:76"},"referencedDeclaration":21379,"src":"10260:22:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"id":13319,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":13316,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13304,"src":"10305:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13317,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cache","nodeType":"MemberAccess","referencedDeclaration":18376,"src":"10305:13:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$21315_storage_ptr_$returns$_t_struct$_ReserveCache_$21379_memory_ptr_$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (struct DataTypes.ReserveCache memory)"}},"id":13318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10305:15:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"nodeType":"VariableDeclarationStatement","src":"10260:60:76"},{"expression":{"arguments":[{"id":13323,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13315,"src":"10346:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":13320,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13304,"src":"10326:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13322,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":17793,"src":"10326:19:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$returns$__$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":13324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10326:33:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13325,"nodeType":"ExpressionStatement","src":"10326:33:76"},{"expression":{"arguments":[{"id":13329,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13304,"src":"10416:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"id":13330,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13315,"src":"10425:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":13331,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13306,"src":"10439:5:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":13326,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20908,"src":"10366:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$20908_$","typeString":"type(library ValidationLogic)"}},"id":13328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateRebalanceStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":20189,"src":"10366:49:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$_t_address_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address) view"}},"id":13332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10366:79:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13333,"nodeType":"ExpressionStatement","src":"10366:79:76"},{"assignments":[13336],"declarations":[{"constant":false,"id":13336,"mutability":"mutable","name":"stableDebtToken","nameLocation":"10469:15:76","nodeType":"VariableDeclaration","scope":13391,"src":"10452:32:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6109","typeString":"contract IStableDebtToken"},"typeName":{"id":13335,"nodeType":"UserDefinedTypeName","pathNode":{"id":13334,"name":"IStableDebtToken","nodeType":"IdentifierPath","referencedDeclaration":6109,"src":"10452:16:76"},"referencedDeclaration":6109,"src":"10452:16:76","typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6109","typeString":"contract IStableDebtToken"}},"visibility":"internal"}],"id":13341,"initialValue":{"arguments":[{"expression":{"id":13338,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13315,"src":"10504:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13339,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21372,"src":"10504:35:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13337,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6109,"src":"10487:16:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6109_$","typeString":"type(contract IStableDebtToken)"}},"id":13340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10487:53:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6109","typeString":"contract IStableDebtToken"}},"nodeType":"VariableDeclarationStatement","src":"10452:88:76"},{"assignments":[13343],"declarations":[{"constant":false,"id":13343,"mutability":"mutable","name":"stableDebt","nameLocation":"10554:10:76","nodeType":"VariableDeclaration","scope":13391,"src":"10546:18:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13342,"name":"uint256","nodeType":"ElementaryTypeName","src":"10546:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13353,"initialValue":{"arguments":[{"id":13351,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13308,"src":"10610:4:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[{"id":13347,"name":"stableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13336,"src":"10582:15:76","typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6109","typeString":"contract IStableDebtToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IStableDebtToken_$6109","typeString":"contract IStableDebtToken"}],"id":13346,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10574:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13345,"name":"address","nodeType":"ElementaryTypeName","src":"10574:7:76","typeDescriptions":{}}},"id":13348,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10574:24:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13344,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"10567:6:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":13349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10567:32:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":13350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"10567:42:76","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":13352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10567:48:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10546:69:76"},{"expression":{"arguments":[{"id":13357,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13308,"src":"10643:4:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13358,"name":"stableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13343,"src":"10649:10:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13354,"name":"stableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13336,"src":"10622:15:76","typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6109","typeString":"contract IStableDebtToken"}},"id":13356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":6046,"src":"10622:20:76","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,uint256) external returns (uint256,uint256)"}},"id":13359,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10622:38:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":13360,"nodeType":"ExpressionStatement","src":"10622:38:76"},{"expression":{"id":13375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[null,{"expression":{"id":13361,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13315,"src":"10670:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13363,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":21351,"src":"10670:32:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13364,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13315,"src":"10704:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13365,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextAvgStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21349,"src":"10704:36:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13366,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"10667:74:76","typeDescriptions":{"typeIdentifier":"t_tuple$__$_t_uint256_$_t_uint256_$","typeString":"tuple(,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13369,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13308,"src":"10772:4:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13370,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13308,"src":"10778:4:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13371,"name":"stableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13343,"src":"10784:10:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13372,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13304,"src":"10796:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13373,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21296,"src":"10796:31:76","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":13367,"name":"stableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13336,"src":"10744:15:76","typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6109","typeString":"contract IStableDebtToken"}},"id":13368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":6034,"src":"10744:27:76","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$_t_uint256_$","typeString":"function (address,address,uint256,uint256) external returns (bool,uint256,uint256)"}},"id":13374,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10744:84:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$_t_uint256_$","typeString":"tuple(bool,uint256,uint256)"}},"src":"10667:161:76","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13376,"nodeType":"ExpressionStatement","src":"10667:161:76"},{"expression":{"arguments":[{"id":13380,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13315,"src":"10863:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":13381,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13306,"src":"10877:5:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":13382,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10884:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":13383,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10887:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"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"}],"expression":{"id":13377,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13304,"src":"10835:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13379,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateInterestRates","nodeType":"MemberAccess","referencedDeclaration":18024,"src":"10835:27:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,uint256,uint256)"}},"id":13384,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10835:54:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13385,"nodeType":"ExpressionStatement","src":"10835:54:76"},{"eventCall":{"arguments":[{"id":13387,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13306,"src":"10927:5:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13388,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13308,"src":"10934:4:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":13386,"name":"RebalanceStableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12767,"src":"10901:25:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":13389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10901:38:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13390,"nodeType":"EmitStatement","src":"10896:43:76"}]},"documentation":{"id":13301,"nodeType":"StructuredDocumentation","src":"9511:605:76","text":" @notice Implements the rebalance stable borrow rate feature. In case of liquidity crunches on the protocol, stable\n rate borrows might need to be rebalanced to bring back equilibrium between the borrow and supply APYs.\n @dev The rules that define if a position can be rebalanced are implemented in `ValidationLogic.validateRebalanceStableBorrowRate()`\n @dev Emits the `RebalanceStableBorrowRate()` event\n @param reserve The state of the reserve of the asset being repaid\n @param asset The asset of the position being rebalanced\n @param user The user being rebalanced"},"functionSelector":"6973f744","id":13392,"implemented":true,"kind":"function","modifiers":[],"name":"executeRebalanceStableBorrowRate","nameLocation":"10128:32:76","nodeType":"FunctionDefinition","parameters":{"id":13309,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13304,"mutability":"mutable","name":"reserve","nameLocation":"10196:7:76","nodeType":"VariableDeclaration","scope":13392,"src":"10166:37:76","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":13303,"nodeType":"UserDefinedTypeName","pathNode":{"id":13302,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"10166:21:76"},"referencedDeclaration":21315,"src":"10166:21:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":13306,"mutability":"mutable","name":"asset","nameLocation":"10217:5:76","nodeType":"VariableDeclaration","scope":13392,"src":"10209:13:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13305,"name":"address","nodeType":"ElementaryTypeName","src":"10209:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13308,"mutability":"mutable","name":"user","nameLocation":"10236:4:76","nodeType":"VariableDeclaration","scope":13392,"src":"10228:12:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13307,"name":"address","nodeType":"ElementaryTypeName","src":"10228:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10160:84:76"},"returnParameters":{"id":13310,"nodeType":"ParameterList","parameters":[],"src":"10254:0:76"},"scope":13543,"src":"10119:825:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":13541,"nodeType":"Block","src":"11637:1413:76","statements":[{"assignments":[13411],"declarations":[{"constant":false,"id":13411,"mutability":"mutable","name":"reserveCache","nameLocation":"11673:12:76","nodeType":"VariableDeclaration","scope":13541,"src":"11643:42:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":13410,"nodeType":"UserDefinedTypeName","pathNode":{"id":13409,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"11643:22:76"},"referencedDeclaration":21379,"src":"11643:22:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"id":13415,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":13412,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13396,"src":"11688:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13413,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cache","nodeType":"MemberAccess","referencedDeclaration":18376,"src":"11688:13:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$21315_storage_ptr_$returns$_t_struct$_ReserveCache_$21379_memory_ptr_$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (struct DataTypes.ReserveCache memory)"}},"id":13414,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11688:15:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"nodeType":"VariableDeclarationStatement","src":"11643:60:76"},{"expression":{"arguments":[{"id":13419,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13411,"src":"11730:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":13416,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13396,"src":"11710:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13418,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":17793,"src":"11710:19:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$returns$__$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":13420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11710:33:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13421,"nodeType":"ExpressionStatement","src":"11710:33:76"},{"assignments":[13423,13425],"declarations":[{"constant":false,"id":13423,"mutability":"mutable","name":"stableDebt","nameLocation":"11759:10:76","nodeType":"VariableDeclaration","scope":13541,"src":"11751:18:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13422,"name":"uint256","nodeType":"ElementaryTypeName","src":"11751:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13425,"mutability":"mutable","name":"variableDebt","nameLocation":"11779:12:76","nodeType":"VariableDeclaration","scope":13541,"src":"11771:20:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13424,"name":"uint256","nodeType":"ElementaryTypeName","src":"11771:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13432,"initialValue":{"arguments":[{"expression":{"id":13428,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11829:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"11829:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13430,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13411,"src":"11847:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":13426,"name":"Helpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12680,"src":"11795:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Helpers_$12680_$","typeString":"type(library Helpers)"}},"id":13427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getUserCurrentDebt","nodeType":"MemberAccess","referencedDeclaration":12679,"src":"11795:26:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_struct$_ReserveCache_$21379_memory_ptr_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,struct DataTypes.ReserveCache memory) view returns (uint256,uint256)"}},"id":13431,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11795:70:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"11750:115:76"},{"expression":{"arguments":[{"id":13436,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13396,"src":"11916:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"id":13437,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13411,"src":"11931:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":13438,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13399,"src":"11951:10:76","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"id":13439,"name":"stableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13423,"src":"11969:10:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13440,"name":"variableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13425,"src":"11987:12:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13441,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13404,"src":"12007:16:76","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}],"expression":{"id":13433,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20908,"src":"11872:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$20908_$","typeString":"type(library ValidationLogic)"}},"id":13435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateSwapRateMode","nodeType":"MemberAccess","referencedDeclaration":20102,"src":"11872:36:76","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_uint256_$_t_uint256_$_t_enum$_InterestRateMode_$21337_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,struct DataTypes.UserConfigurationMap storage pointer,uint256,uint256,enum DataTypes.InterestRateMode) view"}},"id":13442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11872:157:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13443,"nodeType":"ExpressionStatement","src":"11872:157:76"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"id":13448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13444,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13404,"src":"12040:16:76","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":13445,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"12060:9:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":13446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"12060:26:76","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":13447,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"STABLE","nodeType":"MemberAccess","referencedDeclaration":21335,"src":"12060:33:76","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"src":"12040:53:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":13523,"nodeType":"Block","src":"12492:426:76","statements":[{"expression":{"id":13500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13486,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13411,"src":"12500:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13488,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":21341,"src":"12500:35:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":13494,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12617:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"12617:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13496,"name":"variableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13425,"src":"12629:12:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13497,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13411,"src":"12643:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13498,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":21359,"src":"12643:36:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":13490,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13411,"src":"12566:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13491,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21374,"src":"12566:37:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13489,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6155,"src":"12538:18:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVariableDebtToken_$6155_$","typeString":"type(contract IVariableDebtToken)"}},"id":13492,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12538:73:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVariableDebtToken_$6155","typeString":"contract IVariableDebtToken"}},"id":13493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":6148,"src":"12538:78:76","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,uint256,uint256) external returns (uint256)"}},"id":13499,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12538:142:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12500:180:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13501,"nodeType":"ExpressionStatement","src":"12500:180:76"},{"expression":{"id":13521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[null,{"expression":{"id":13502,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13411,"src":"12692:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13504,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":21351,"src":"12692:32:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13505,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13411,"src":"12726:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13506,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextAvgStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21349,"src":"12726:36:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13507,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"12689:74:76","typeDescriptions":{"typeIdentifier":"t_tuple$__$_t_uint256_$_t_uint256_$","typeString":"tuple(,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":13513,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12841:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"12841:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13515,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12853:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"12853:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13517,"name":"variableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13425,"src":"12865:12:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13518,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13396,"src":"12879:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13519,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21296,"src":"12879:31:76","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"expression":{"id":13509,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13411,"src":"12792:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13510,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21372,"src":"12792:35:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13508,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6109,"src":"12766:16:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6109_$","typeString":"type(contract IStableDebtToken)"}},"id":13511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12766:69:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6109","typeString":"contract IStableDebtToken"}},"id":13512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":6034,"src":"12766:74:76","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$_t_uint256_$","typeString":"function (address,address,uint256,uint256) external returns (bool,uint256,uint256)"}},"id":13520,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12766:145:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$_t_uint256_$","typeString":"tuple(bool,uint256,uint256)"}},"src":"12689:222:76","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13522,"nodeType":"ExpressionStatement","src":"12689:222:76"}]},"id":13524,"nodeType":"IfStatement","src":"12036:882:76","trueBody":{"id":13485,"nodeType":"Block","src":"12095:391:76","statements":[{"expression":{"id":13464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":13449,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13411,"src":"12104:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13451,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":21351,"src":"12104:32:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13452,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13411,"src":"12138:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13453,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextAvgStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21349,"src":"12138:36:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13454,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"12103:72:76","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":13460,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12253:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"12253:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13462,"name":"stableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13423,"src":"12265:10:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":13456,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13411,"src":"12204:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13457,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21372,"src":"12204:35:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13455,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6109,"src":"12178:16:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6109_$","typeString":"type(contract IStableDebtToken)"}},"id":13458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12178:69:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6109","typeString":"contract IStableDebtToken"}},"id":13459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":6046,"src":"12178:74:76","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,uint256) external returns (uint256,uint256)"}},"id":13463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12178:98:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"12103:173:76","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13465,"nodeType":"ExpressionStatement","src":"12103:173:76"},{"expression":{"id":13483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[null,{"expression":{"id":13466,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13411,"src":"12288:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13468,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":21341,"src":"12288:35:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13469,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"12285:39:76","typeDescriptions":{"typeIdentifier":"t_tuple$__$_t_uint256_$","typeString":"tuple(,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":13475,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12406:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"12406:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13477,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12418:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"12418:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13479,"name":"stableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13423,"src":"12430:10:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13480,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13411,"src":"12442:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13481,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":21359,"src":"12442:36:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":13471,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13411,"src":"12355:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13472,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21374,"src":"12355:37:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13470,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6155,"src":"12327:18:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVariableDebtToken_$6155_$","typeString":"type(contract IVariableDebtToken)"}},"id":13473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12327:73:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVariableDebtToken_$6155","typeString":"contract IVariableDebtToken"}},"id":13474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":6136,"src":"12327:78:76","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (address,address,uint256,uint256) external returns (bool,uint256)"}},"id":13482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12327:152:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"src":"12285:194:76","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13484,"nodeType":"ExpressionStatement","src":"12285:194:76"}]}},{"expression":{"arguments":[{"id":13528,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13411,"src":"12952:12:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":13529,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13401,"src":"12966:5:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":13530,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12973:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":13531,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12976:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"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"}],"expression":{"id":13525,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13396,"src":"12924:7:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13527,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateInterestRates","nodeType":"MemberAccess","referencedDeclaration":18024,"src":"12924:27:76","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,uint256,uint256)"}},"id":13532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12924:54:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13533,"nodeType":"ExpressionStatement","src":"12924:54:76"},{"eventCall":{"arguments":[{"id":13535,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13401,"src":"13009:5:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13536,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13016:3:76","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"13016:10:76","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13538,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13404,"src":"13028:16:76","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}],"id":13534,"name":"SwapBorrowRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12776,"src":"12990:18:76","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_enum$_InterestRateMode_$21337_$returns$__$","typeString":"function (address,address,enum DataTypes.InterestRateMode)"}},"id":13539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12990:55:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13540,"nodeType":"EmitStatement","src":"12985:60:76"}]},"documentation":{"id":13393,"nodeType":"StructuredDocumentation","src":"10948:472:76","text":" @notice Implements the swap borrow rate feature. Borrowers can swap from variable to stable positions at any time.\n @dev Emits the `Swap()` event\n @param reserve The of the reserve of the asset being repaid\n @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n @param asset The asset of the position being swapped\n @param interestRateMode The current interest rate mode of the position being swapped"},"functionSelector":"eac4d703","id":13542,"implemented":true,"kind":"function","modifiers":[],"name":"executeSwapBorrowRateMode","nameLocation":"11432:25:76","nodeType":"FunctionDefinition","parameters":{"id":13405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13396,"mutability":"mutable","name":"reserve","nameLocation":"11493:7:76","nodeType":"VariableDeclaration","scope":13542,"src":"11463:37:76","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":13395,"nodeType":"UserDefinedTypeName","pathNode":{"id":13394,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"11463:21:76"},"referencedDeclaration":21315,"src":"11463:21:76","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":13399,"mutability":"mutable","name":"userConfig","nameLocation":"11545:10:76","nodeType":"VariableDeclaration","scope":13542,"src":"11506:49:76","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":13398,"nodeType":"UserDefinedTypeName","pathNode":{"id":13397,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"11506:30:76"},"referencedDeclaration":21322,"src":"11506:30:76","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":13401,"mutability":"mutable","name":"asset","nameLocation":"11569:5:76","nodeType":"VariableDeclaration","scope":13542,"src":"11561:13:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13400,"name":"address","nodeType":"ElementaryTypeName","src":"11561:7:76","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13404,"mutability":"mutable","name":"interestRateMode","nameLocation":"11607:16:76","nodeType":"VariableDeclaration","scope":13542,"src":"11580:43:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"typeName":{"id":13403,"nodeType":"UserDefinedTypeName","pathNode":{"id":13402,"name":"DataTypes.InterestRateMode","nodeType":"IdentifierPath","referencedDeclaration":21337,"src":"11580:26:76"},"referencedDeclaration":21337,"src":"11580:26:76","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"visibility":"internal"}],"src":"11457:170:76"},"returnParameters":{"id":13406,"nodeType":"ParameterList","parameters":[],"src":"11637:0:76"},"scope":13543,"src":"11423:1627:76","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":13544,"src":"1076:11976:76","usedErrors":[]}],"src":"37:13016:76"},"id":76},"@aave/core-v3/contracts/protocol/libraries/logic/BridgeLogic.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/BridgeLogic.sol","exportedSymbols":{"BridgeLogic":[13920],"DataTypes":[21633],"Errors":[12642],"GPv2SafeERC20":[118],"IAToken":[3861],"IERC20":[1442],"PercentageMath":[21132],"ReserveConfiguration":[11857],"ReserveLogic":[18377],"SafeCast":[1966],"UserConfiguration":[12368],"ValidationLogic":[20908],"WadRayMath":[21219]},"id":13921,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":13545,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:77"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../../dependencies/openzeppelin/contracts/IERC20.sol","id":13547,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13921,"sourceUnit":1443,"src":"63:79:77","symbolAliases":[{"foreign":{"id":13546,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:6:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":13549,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13921,"sourceUnit":119,"src":"143:87:77","symbolAliases":[{"foreign":{"id":13548,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"151:13:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"../../../dependencies/openzeppelin/contracts/SafeCast.sol","id":13551,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13921,"sourceUnit":1967,"src":"231:83:77","symbolAliases":[{"foreign":{"id":13550,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"239:8:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IAToken.sol","file":"../../../interfaces/IAToken.sol","id":13553,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13921,"sourceUnit":3862,"src":"315:56:77","symbolAliases":[{"foreign":{"id":13552,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"323:7:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":13555,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13921,"sourceUnit":21634,"src":"372:49:77","symbolAliases":[{"foreign":{"id":13554,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"380:9:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"../configuration/UserConfiguration.sol","id":13557,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13921,"sourceUnit":12369,"src":"422:73:77","symbolAliases":[{"foreign":{"id":13556,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"430:17:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../configuration/ReserveConfiguration.sol","id":13559,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13921,"sourceUnit":11858,"src":"496:79:77","symbolAliases":[{"foreign":{"id":13558,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"504:20:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol","file":"../math/WadRayMath.sol","id":13561,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13921,"sourceUnit":21220,"src":"576:50:77","symbolAliases":[{"foreign":{"id":13560,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"584:10:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol","file":"../math/PercentageMath.sol","id":13563,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13921,"sourceUnit":21133,"src":"627:58:77","symbolAliases":[{"foreign":{"id":13562,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"635:14:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol","file":"../helpers/Errors.sol","id":13565,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13921,"sourceUnit":12643,"src":"686:45:77","symbolAliases":[{"foreign":{"id":13564,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"694:6:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol","file":"./ValidationLogic.sol","id":13567,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13921,"sourceUnit":20909,"src":"732:54:77","symbolAliases":[{"foreign":{"id":13566,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"740:15:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol","file":"./ReserveLogic.sol","id":13569,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13921,"sourceUnit":18378,"src":"787:48:77","symbolAliases":[{"foreign":{"id":13568,"name":"ReserveLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"795:12:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"BridgeLogic","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":13920,"linearizedBaseContracts":[13920],"name":"BridgeLogic","nameLocation":"845:11:77","nodeType":"ContractDefinition","nodes":[{"id":13573,"libraryName":{"id":13570,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":18377,"src":"867:12:77"},"nodeType":"UsingForDirective","src":"861:46:77","typeName":{"id":13572,"nodeType":"UserDefinedTypeName","pathNode":{"id":13571,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"884:22:77"},"referencedDeclaration":21379,"src":"884:22:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}}},{"id":13577,"libraryName":{"id":13574,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":18377,"src":"916:12:77"},"nodeType":"UsingForDirective","src":"910:45:77","typeName":{"id":13576,"nodeType":"UserDefinedTypeName","pathNode":{"id":13575,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"933:21:77"},"referencedDeclaration":21315,"src":"933:21:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},{"id":13581,"libraryName":{"id":13578,"name":"UserConfiguration","nodeType":"IdentifierPath","referencedDeclaration":12368,"src":"964:17:77"},"nodeType":"UsingForDirective","src":"958:59:77","typeName":{"id":13580,"nodeType":"UserDefinedTypeName","pathNode":{"id":13579,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"986:30:77"},"referencedDeclaration":21322,"src":"986:30:77","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},{"id":13585,"libraryName":{"id":13582,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":11857,"src":"1026:20:77"},"nodeType":"UsingForDirective","src":"1020:65:77","typeName":{"id":13584,"nodeType":"UserDefinedTypeName","pathNode":{"id":13583,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"1051:33:77"},"referencedDeclaration":21318,"src":"1051:33:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"id":13588,"libraryName":{"id":13586,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":21219,"src":"1094:10:77"},"nodeType":"UsingForDirective","src":"1088:29:77","typeName":{"id":13587,"name":"uint256","nodeType":"ElementaryTypeName","src":"1109:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":13591,"libraryName":{"id":13589,"name":"PercentageMath","nodeType":"IdentifierPath","referencedDeclaration":21132,"src":"1126:14:77"},"nodeType":"UsingForDirective","src":"1120:33:77","typeName":{"id":13590,"name":"uint256","nodeType":"ElementaryTypeName","src":"1145:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":13594,"libraryName":{"id":13592,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"1162:8:77"},"nodeType":"UsingForDirective","src":"1156:27:77","typeName":{"id":13593,"name":"uint256","nodeType":"ElementaryTypeName","src":"1175:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":13598,"libraryName":{"id":13595,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"1192:13:77"},"nodeType":"UsingForDirective","src":"1186:31:77","typeName":{"id":13597,"nodeType":"UserDefinedTypeName","pathNode":{"id":13596,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1210:6:77"},"referencedDeclaration":1442,"src":"1210:6:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"anonymous":false,"id":13604,"name":"ReserveUsedAsCollateralEnabled","nameLocation":"1261:30:77","nodeType":"EventDefinition","parameters":{"id":13603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13600,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1308:7:77","nodeType":"VariableDeclaration","scope":13604,"src":"1292:23:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13599,"name":"address","nodeType":"ElementaryTypeName","src":"1292:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13602,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1333:4:77","nodeType":"VariableDeclaration","scope":13604,"src":"1317:20:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13601,"name":"address","nodeType":"ElementaryTypeName","src":"1317:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1291:47:77"},"src":"1255:84:77"},{"anonymous":false,"id":13616,"name":"MintUnbacked","nameLocation":"1348:12:77","nodeType":"EventDefinition","parameters":{"id":13615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13606,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1382:7:77","nodeType":"VariableDeclaration","scope":13616,"src":"1366:23:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13605,"name":"address","nodeType":"ElementaryTypeName","src":"1366:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13608,"indexed":false,"mutability":"mutable","name":"user","nameLocation":"1403:4:77","nodeType":"VariableDeclaration","scope":13616,"src":"1395:12:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13607,"name":"address","nodeType":"ElementaryTypeName","src":"1395:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13610,"indexed":true,"mutability":"mutable","name":"onBehalfOf","nameLocation":"1429:10:77","nodeType":"VariableDeclaration","scope":13616,"src":"1413:26:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13609,"name":"address","nodeType":"ElementaryTypeName","src":"1413:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13612,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1453:6:77","nodeType":"VariableDeclaration","scope":13616,"src":"1445:14:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13611,"name":"uint256","nodeType":"ElementaryTypeName","src":"1445:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13614,"indexed":true,"mutability":"mutable","name":"referralCode","nameLocation":"1480:12:77","nodeType":"VariableDeclaration","scope":13616,"src":"1465:27:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":13613,"name":"uint16","nodeType":"ElementaryTypeName","src":"1465:6:77","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"1360:136:77"},"src":"1342:155:77"},{"anonymous":false,"id":13626,"name":"BackUnbacked","nameLocation":"1506:12:77","nodeType":"EventDefinition","parameters":{"id":13625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13618,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1535:7:77","nodeType":"VariableDeclaration","scope":13626,"src":"1519:23:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13617,"name":"address","nodeType":"ElementaryTypeName","src":"1519:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13620,"indexed":true,"mutability":"mutable","name":"backer","nameLocation":"1560:6:77","nodeType":"VariableDeclaration","scope":13626,"src":"1544:22:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13619,"name":"address","nodeType":"ElementaryTypeName","src":"1544:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13622,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1576:6:77","nodeType":"VariableDeclaration","scope":13626,"src":"1568:14:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13621,"name":"uint256","nodeType":"ElementaryTypeName","src":"1568:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13624,"indexed":false,"mutability":"mutable","name":"fee","nameLocation":"1592:3:77","nodeType":"VariableDeclaration","scope":13626,"src":"1584:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13623,"name":"uint256","nodeType":"ElementaryTypeName","src":"1584:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1518:78:77"},"src":"1500:97:77"},{"body":{"id":13779,"nodeType":"Block","src":"2783:1301:77","statements":[{"assignments":[13654],"declarations":[{"constant":false,"id":13654,"mutability":"mutable","name":"reserve","nameLocation":"2819:7:77","nodeType":"VariableDeclaration","scope":13779,"src":"2789:37:77","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":13653,"nodeType":"UserDefinedTypeName","pathNode":{"id":13652,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"2789:21:77"},"referencedDeclaration":21315,"src":"2789:21:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":13658,"initialValue":{"baseExpression":{"id":13655,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13632,"src":"2829:12:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":13657,"indexExpression":{"id":13656,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13641,"src":"2842:5:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2829:19:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2789:59:77"},{"assignments":[13663],"declarations":[{"constant":false,"id":13663,"mutability":"mutable","name":"reserveCache","nameLocation":"2884:12:77","nodeType":"VariableDeclaration","scope":13779,"src":"2854:42:77","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":13662,"nodeType":"UserDefinedTypeName","pathNode":{"id":13661,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"2854:22:77"},"referencedDeclaration":21379,"src":"2854:22:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"id":13667,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":13664,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"2899:7:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13665,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cache","nodeType":"MemberAccess","referencedDeclaration":18376,"src":"2899:13:77","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$21315_storage_ptr_$returns$_t_struct$_ReserveCache_$21379_memory_ptr_$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (struct DataTypes.ReserveCache memory)"}},"id":13666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2899:15:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"nodeType":"VariableDeclarationStatement","src":"2854:60:77"},{"expression":{"arguments":[{"id":13671,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13663,"src":"2941:12:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":13668,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"2921:7:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13670,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":17793,"src":"2921:19:77","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$returns$__$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":13672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2921:33:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13673,"nodeType":"ExpressionStatement","src":"2921:33:77"},{"expression":{"arguments":[{"id":13677,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13663,"src":"2992:12:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":13678,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"3006:7:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"id":13679,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13643,"src":"3015:6:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13674,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20908,"src":"2961:15:77","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$20908_$","typeString":"type(library ValidationLogic)"}},"id":13676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateSupply","nodeType":"MemberAccess","referencedDeclaration":19277,"src":"2961:30:77","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveCache_$21379_memory_ptr_$_t_struct$_ReserveData_$21315_storage_ptr_$_t_uint256_$returns$__$","typeString":"function (struct DataTypes.ReserveCache memory,struct DataTypes.ReserveData storage pointer,uint256) view"}},"id":13680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2961:61:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13681,"nodeType":"ExpressionStatement","src":"2961:61:77"},{"assignments":[13683],"declarations":[{"constant":false,"id":13683,"mutability":"mutable","name":"unbackedMintCap","nameLocation":"3037:15:77","nodeType":"VariableDeclaration","scope":13779,"src":"3029:23:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13682,"name":"uint256","nodeType":"ElementaryTypeName","src":"3029:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13688,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":13684,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13663,"src":"3055:12:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13685,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"3055:33:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13686,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getUnbackedMintCap","nodeType":"MemberAccess","referencedDeclaration":11595,"src":"3055:52:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":13687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3055:54:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3029:80:77"},{"assignments":[13690],"declarations":[{"constant":false,"id":13690,"mutability":"mutable","name":"reserveDecimals","nameLocation":"3123:15:77","nodeType":"VariableDeclaration","scope":13779,"src":"3115:23:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13689,"name":"uint256","nodeType":"ElementaryTypeName","src":"3115:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13695,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":13691,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13663,"src":"3141:12:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13692,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"3141:33:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":13693,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDecimals","nodeType":"MemberAccess","referencedDeclaration":10933,"src":"3141:45:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":13694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3141:47:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3115:73:77"},{"assignments":[13697],"declarations":[{"constant":false,"id":13697,"mutability":"mutable","name":"unbacked","nameLocation":"3203:8:77","nodeType":"VariableDeclaration","scope":13779,"src":"3195:16:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13696,"name":"uint256","nodeType":"ElementaryTypeName","src":"3195:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13704,"initialValue":{"id":13703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13698,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"3214:7:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13699,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"unbacked","nodeType":"MemberAccess","referencedDeclaration":21312,"src":"3214:16:77","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":13700,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13643,"src":"3234:6:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"3234:16:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":13702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3234:18:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"3214:38:77","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"3195:57:77"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13706,"name":"unbacked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13697,"src":"3274:8:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13707,"name":"unbackedMintCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13683,"src":"3286:15:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":13708,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3305:2:77","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":13709,"name":"reserveDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13690,"src":"3311:15:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3305:21:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13711,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3304:23:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3286:41:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3274:53:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":13714,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"3335:6:77","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":13715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"UNBACKED_MINT_CAP_EXCEEDED","nodeType":"MemberAccess","referencedDeclaration":12524,"src":"3335:33:77","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":13705,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3259:7:77","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":13716,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3259:115:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13717,"nodeType":"ExpressionStatement","src":"3259:115:77"},{"expression":{"arguments":[{"id":13721,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13663,"src":"3409:12:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":13722,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13641,"src":"3423:5:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":13723,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3430:1:77","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":13724,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3433:1:77","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"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"}],"expression":{"id":13718,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"3381:7:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13720,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateInterestRates","nodeType":"MemberAccess","referencedDeclaration":18024,"src":"3381:27:77","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,uint256,uint256)"}},"id":13725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3381:54:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13726,"nodeType":"ExpressionStatement","src":"3381:54:77"},{"assignments":[13728],"declarations":[{"constant":false,"id":13728,"mutability":"mutable","name":"isFirstSupply","nameLocation":"3447:13:77","nodeType":"VariableDeclaration","scope":13779,"src":"3442:18:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13727,"name":"bool","nodeType":"ElementaryTypeName","src":"3442:4:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":13741,"initialValue":{"arguments":[{"expression":{"id":13734,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3511:3:77","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3511:10:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13736,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13645,"src":"3529:10:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13737,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13643,"src":"3547:6:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13738,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13663,"src":"3561:12:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13739,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21355,"src":"3561:31:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":13730,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13663,"src":"3471:12:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13731,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"3471:26:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13729,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3861,"src":"3463:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3861_$","typeString":"type(contract IAToken)"}},"id":13732,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3463:35:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":13733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":3758,"src":"3463:40:77","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256,uint256) external returns (bool)"}},"id":13740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3463:135:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3442:156:77"},{"condition":{"id":13742,"name":"isFirstSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13728,"src":"3609:13:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13769,"nodeType":"IfStatement","src":"3605:398:77","trueBody":{"id":13768,"nodeType":"Block","src":"3624:379:77","statements":[{"condition":{"arguments":[{"id":13745,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13632,"src":"3705:12:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":13746,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13636,"src":"3729:12:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":13747,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13639,"src":"3753:10:77","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"expression":{"id":13748,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13663,"src":"3775:12:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13749,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"3775:33:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},{"expression":{"id":13750,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13663,"src":"3820:12:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13751,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"3820:26:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":13743,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20908,"src":"3645:15:77","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$20908_$","typeString":"type(library ValidationLogic)"}},"id":13744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateAutomaticUseAsCollateral","nodeType":"MemberAccess","referencedDeclaration":20907,"src":"3645:48:77","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_address_$returns$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveConfigurationMap memory,address) view returns (bool)"}},"id":13752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3645:211:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13767,"nodeType":"IfStatement","src":"3632:365:77","trueBody":{"id":13766,"nodeType":"Block","src":"3865:132:77","statements":[{"expression":{"arguments":[{"expression":{"id":13756,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13654,"src":"3907:7:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13757,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"3907:10:77","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"hexValue":"74727565","id":13758,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3919:4:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13753,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13639,"src":"3875:10:77","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":13755,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":11975,"src":"3875:31:77","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_uint256_$_t_bool_$returns$__$bound_to$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)"}},"id":13759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3875:49:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13760,"nodeType":"ExpressionStatement","src":"3875:49:77"},{"eventCall":{"arguments":[{"id":13762,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13641,"src":"3970:5:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13763,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13645,"src":"3977:10:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":13761,"name":"ReserveUsedAsCollateralEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13604,"src":"3939:30:77","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":13764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3939:49:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13765,"nodeType":"EmitStatement","src":"3934:54:77"}]}}]}},{"eventCall":{"arguments":[{"id":13771,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13641,"src":"4027:5:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13772,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4034:3:77","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"4034:10:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13774,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13645,"src":"4046:10:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13775,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13643,"src":"4058:6:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13776,"name":"referralCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13647,"src":"4066:12:77","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"id":13770,"name":"MintUnbacked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13616,"src":"4014:12:77","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint16_$returns$__$","typeString":"function (address,address,address,uint256,uint16)"}},"id":13777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4014:65:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13778,"nodeType":"EmitStatement","src":"4009:70:77"}]},"documentation":{"id":13627,"nodeType":"StructuredDocumentation","src":"1601:872:77","text":" @notice Mint unbacked aTokens to a user and updates the unbacked for the reserve.\n @dev Essentially a supply without transferring the underlying.\n @dev Emits the `MintUnbacked` event\n @dev Emits the `ReserveUsedAsCollateralEnabled` if asset is set as collateral\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n @param asset The address of the underlying asset to mint aTokens of\n @param amount The amount to mint\n @param onBehalfOf The address that will receive the aTokens\n @param referralCode Code used to register the integrator originating the operation, for potential rewards.\n   0 if the action is executed directly by the user, without any middle-man"},"functionSelector":"0413c86f","id":13780,"implemented":true,"kind":"function","modifiers":[],"name":"executeMintUnbacked","nameLocation":"2485:19:77","nodeType":"FunctionDefinition","parameters":{"id":13648,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13632,"mutability":"mutable","name":"reservesData","nameLocation":"2560:12:77","nodeType":"VariableDeclaration","scope":13780,"src":"2510:62:77","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":13631,"keyType":{"id":13628,"name":"address","nodeType":"ElementaryTypeName","src":"2518:7:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2510:41:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":13630,"nodeType":"UserDefinedTypeName","pathNode":{"id":13629,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"2529:21:77"},"referencedDeclaration":21315,"src":"2529:21:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":13636,"mutability":"mutable","name":"reservesList","nameLocation":"2614:12:77","nodeType":"VariableDeclaration","scope":13780,"src":"2578:48:77","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":13635,"keyType":{"id":13633,"name":"uint256","nodeType":"ElementaryTypeName","src":"2586:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"2578:27:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":13634,"name":"address","nodeType":"ElementaryTypeName","src":"2597:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":13639,"mutability":"mutable","name":"userConfig","nameLocation":"2671:10:77","nodeType":"VariableDeclaration","scope":13780,"src":"2632:49:77","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":13638,"nodeType":"UserDefinedTypeName","pathNode":{"id":13637,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"2632:30:77"},"referencedDeclaration":21322,"src":"2632:30:77","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":13641,"mutability":"mutable","name":"asset","nameLocation":"2695:5:77","nodeType":"VariableDeclaration","scope":13780,"src":"2687:13:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13640,"name":"address","nodeType":"ElementaryTypeName","src":"2687:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13643,"mutability":"mutable","name":"amount","nameLocation":"2714:6:77","nodeType":"VariableDeclaration","scope":13780,"src":"2706:14:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13642,"name":"uint256","nodeType":"ElementaryTypeName","src":"2706:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13645,"mutability":"mutable","name":"onBehalfOf","nameLocation":"2734:10:77","nodeType":"VariableDeclaration","scope":13780,"src":"2726:18:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13644,"name":"address","nodeType":"ElementaryTypeName","src":"2726:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13647,"mutability":"mutable","name":"referralCode","nameLocation":"2757:12:77","nodeType":"VariableDeclaration","scope":13780,"src":"2750:19:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":13646,"name":"uint16","nodeType":"ElementaryTypeName","src":"2750:6:77","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"2504:269:77"},"returnParameters":{"id":13649,"nodeType":"ParameterList","parameters":[],"src":"2783:0:77"},"scope":13920,"src":"2476:1608:77","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":13918,"nodeType":"Block","src":"4797:968:77","statements":[{"assignments":[13801],"declarations":[{"constant":false,"id":13801,"mutability":"mutable","name":"reserveCache","nameLocation":"4833:12:77","nodeType":"VariableDeclaration","scope":13918,"src":"4803:42:77","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":13800,"nodeType":"UserDefinedTypeName","pathNode":{"id":13799,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"4803:22:77"},"referencedDeclaration":21379,"src":"4803:22:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"id":13805,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":13802,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13784,"src":"4848:7:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13803,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cache","nodeType":"MemberAccess","referencedDeclaration":18376,"src":"4848:13:77","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$21315_storage_ptr_$returns$_t_struct$_ReserveCache_$21379_memory_ptr_$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (struct DataTypes.ReserveCache memory)"}},"id":13804,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4848:15:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"nodeType":"VariableDeclarationStatement","src":"4803:60:77"},{"expression":{"arguments":[{"id":13809,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13801,"src":"4890:12:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":13806,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13784,"src":"4870:7:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13808,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":17793,"src":"4870:19:77","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$returns$__$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":13810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4870:33:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13811,"nodeType":"ExpressionStatement","src":"4870:33:77"},{"assignments":[13813],"declarations":[{"constant":false,"id":13813,"mutability":"mutable","name":"backingAmount","nameLocation":"4918:13:77","nodeType":"VariableDeclaration","scope":13918,"src":"4910:21:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13812,"name":"uint256","nodeType":"ElementaryTypeName","src":"4910:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13823,"initialValue":{"condition":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13814,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13788,"src":"4935:6:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":13815,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13784,"src":"4944:7:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13816,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"unbacked","nodeType":"MemberAccess","referencedDeclaration":21312,"src":"4944:16:77","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"4935:25:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":13818,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4934:27:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":13820,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13784,"src":"4973:7:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13821,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"unbacked","nodeType":"MemberAccess","referencedDeclaration":21312,"src":"4973:16:77","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":13822,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"4934:55:77","trueExpression":{"id":13819,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13788,"src":"4964:6:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4910:79:77"},{"assignments":[13825],"declarations":[{"constant":false,"id":13825,"mutability":"mutable","name":"feeToProtocol","nameLocation":"5004:13:77","nodeType":"VariableDeclaration","scope":13918,"src":"4996:21:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13824,"name":"uint256","nodeType":"ElementaryTypeName","src":"4996:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13830,"initialValue":{"arguments":[{"id":13828,"name":"protocolFeeBps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13792,"src":"5035:14:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13826,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13790,"src":"5020:3:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":21119,"src":"5020:14:77","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":13829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5020:30:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4996:54:77"},{"assignments":[13832],"declarations":[{"constant":false,"id":13832,"mutability":"mutable","name":"feeToLP","nameLocation":"5064:7:77","nodeType":"VariableDeclaration","scope":13918,"src":"5056:15:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13831,"name":"uint256","nodeType":"ElementaryTypeName","src":"5056:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13836,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13833,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13790,"src":"5074:3:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":13834,"name":"feeToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13825,"src":"5080:13:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5074:19:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5056:37:77"},{"assignments":[13838],"declarations":[{"constant":false,"id":13838,"mutability":"mutable","name":"added","nameLocation":"5107:5:77","nodeType":"VariableDeclaration","scope":13918,"src":"5099:13:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13837,"name":"uint256","nodeType":"ElementaryTypeName","src":"5099:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13842,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13839,"name":"backingAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13813,"src":"5115:13:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":13840,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13790,"src":"5131:3:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5115:19:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5099:35:77"},{"expression":{"id":13866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13843,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13801,"src":"5141:12:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13845,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21355,"src":"5141:31:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":13849,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13801,"src":"5222:12:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13850,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"5222:26:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13848,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"5215:6:77","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":13851,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5215:34:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":13852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"5215:46:77","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":13853,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5215:48:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"expression":{"id":13860,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13801,"src":"5316:12:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13861,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21355,"src":"5316:31:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":13856,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13784,"src":"5282:7:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13857,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"accruedToTreasury","nodeType":"MemberAccess","referencedDeclaration":21310,"src":"5282:25:77","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":13855,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5274:7:77","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13854,"name":"uint256","nodeType":"ElementaryTypeName","src":"5274:7:77","typeDescriptions":{}}},"id":13858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5274:34:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"5274:41:77","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":13862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5274:74:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5215:133:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13864,"name":"feeToLP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13832,"src":"5356:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13846,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13784,"src":"5175:7:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13847,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cumulateToLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":17836,"src":"5175:32:77","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,uint256,uint256) returns (uint256)"}},"id":13865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5175:194:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5141:228:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13867,"nodeType":"ExpressionStatement","src":"5141:228:77"},{"expression":{"id":13878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13868,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13784,"src":"5376:7:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13870,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"accruedToTreasury","nodeType":"MemberAccess","referencedDeclaration":21310,"src":"5376:25:77","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":13873,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13801,"src":"5426:12:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13874,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21355,"src":"5426:31:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13871,"name":"feeToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13825,"src":"5405:13:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":21198,"src":"5405:20:77","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":13875,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5405:53:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"5405:63:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":13877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5405:65:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"5376:94:77","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":13879,"nodeType":"ExpressionStatement","src":"5376:94:77"},{"expression":{"id":13886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13880,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13784,"src":"5477:7:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13882,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"unbacked","nodeType":"MemberAccess","referencedDeclaration":21312,"src":"5477:16:77","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":13883,"name":"backingAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13813,"src":"5497:13:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"5497:23:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":13885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5497:25:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"5477:45:77","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":13887,"nodeType":"ExpressionStatement","src":"5477:45:77"},{"expression":{"arguments":[{"id":13891,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13801,"src":"5556:12:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":13892,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13786,"src":"5570:5:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13893,"name":"added","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13838,"src":"5577:5:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":13894,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5584:1:77","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":13888,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13784,"src":"5528:7:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":13890,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateInterestRates","nodeType":"MemberAccess","referencedDeclaration":18024,"src":"5528:27:77","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,uint256,uint256)"}},"id":13895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5528:58:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13896,"nodeType":"ExpressionStatement","src":"5528:58:77"},{"expression":{"arguments":[{"expression":{"id":13901,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5624:3:77","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5624:10:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13903,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13801,"src":"5636:12:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":13904,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"5636:26:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13905,"name":"added","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13838,"src":"5664:5:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":13898,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13786,"src":"5600:5:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13897,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"5593:6:77","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":13899,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5593:13:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":13900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":106,"src":"5593:30:77","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":13906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5593:77:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13907,"nodeType":"ExpressionStatement","src":"5593:77:77"},{"eventCall":{"arguments":[{"id":13909,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13786,"src":"5695:5:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13910,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5702:3:77","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5702:10:77","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13912,"name":"backingAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13813,"src":"5714:13:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13913,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13790,"src":"5729:3:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13908,"name":"BackUnbacked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13626,"src":"5682:12:77","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":13914,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5682:51:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13915,"nodeType":"EmitStatement","src":"5677:56:77"},{"expression":{"id":13916,"name":"backingAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13813,"src":"5747:13:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13796,"id":13917,"nodeType":"Return","src":"5740:20:77"}]},"documentation":{"id":13781,"nodeType":"StructuredDocumentation","src":"4088:519:77","text":" @notice Back the current unbacked with `amount` and pay `fee`.\n @dev It is not possible to back more than the existing unbacked amount of the reserve\n @dev Emits the `BackUnbacked` event\n @param reserve The reserve to back unbacked for\n @param asset The address of the underlying asset to repay\n @param amount The amount to back\n @param fee The amount paid in fees\n @param protocolFeeBps The fraction of fees in basis points paid to the protocol\n @return The backed amount"},"functionSelector":"8e743248","id":13919,"implemented":true,"kind":"function","modifiers":[],"name":"executeBackUnbacked","nameLocation":"4619:19:77","nodeType":"FunctionDefinition","parameters":{"id":13793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13784,"mutability":"mutable","name":"reserve","nameLocation":"4674:7:77","nodeType":"VariableDeclaration","scope":13919,"src":"4644:37:77","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":13783,"nodeType":"UserDefinedTypeName","pathNode":{"id":13782,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"4644:21:77"},"referencedDeclaration":21315,"src":"4644:21:77","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":13786,"mutability":"mutable","name":"asset","nameLocation":"4695:5:77","nodeType":"VariableDeclaration","scope":13919,"src":"4687:13:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13785,"name":"address","nodeType":"ElementaryTypeName","src":"4687:7:77","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13788,"mutability":"mutable","name":"amount","nameLocation":"4714:6:77","nodeType":"VariableDeclaration","scope":13919,"src":"4706:14:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13787,"name":"uint256","nodeType":"ElementaryTypeName","src":"4706:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13790,"mutability":"mutable","name":"fee","nameLocation":"4734:3:77","nodeType":"VariableDeclaration","scope":13919,"src":"4726:11:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13789,"name":"uint256","nodeType":"ElementaryTypeName","src":"4726:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13792,"mutability":"mutable","name":"protocolFeeBps","nameLocation":"4751:14:77","nodeType":"VariableDeclaration","scope":13919,"src":"4743:22:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13791,"name":"uint256","nodeType":"ElementaryTypeName","src":"4743:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4638:131:77"},"returnParameters":{"id":13796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13795,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13919,"src":"4788:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13794,"name":"uint256","nodeType":"ElementaryTypeName","src":"4788:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4787:9:77"},"scope":13920,"src":"4610:1155:77","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":13921,"src":"837:4930:77","usedErrors":[]}],"src":"37:5731:77"},"id":77},"@aave/core-v3/contracts/protocol/libraries/logic/ConfiguratorLogic.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/ConfiguratorLogic.sol","exportedSymbols":{"ConfiguratorInputTypes":[21281],"ConfiguratorLogic":[14409],"DataTypes":[21633],"IInitializableAToken":[4176],"IInitializableDebtToken":[4221],"IPool":[4860],"InitializableImmutableAdminUpgradeabilityProxy":[10492],"ReserveConfiguration":[11857]},"id":14410,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":13922,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:78"},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","file":"../../../interfaces/IPool.sol","id":13924,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14410,"sourceUnit":4861,"src":"63:52:78","symbolAliases":[{"foreign":{"id":13923,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:5:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol","file":"../../../interfaces/IInitializableAToken.sol","id":13926,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14410,"sourceUnit":4177,"src":"116:82:78","symbolAliases":[{"foreign":{"id":13925,"name":"IInitializableAToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"124:20:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol","file":"../../../interfaces/IInitializableDebtToken.sol","id":13928,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14410,"sourceUnit":4222,"src":"199:88:78","symbolAliases":[{"foreign":{"id":13927,"name":"IInitializableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"207:23:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol","file":"../aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol","id":13930,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14410,"sourceUnit":10493,"src":"288:137:78","symbolAliases":[{"foreign":{"id":13929,"name":"InitializableImmutableAdminUpgradeabilityProxy","nodeType":"Identifier","overloadedDeclarations":[],"src":"296:46:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../configuration/ReserveConfiguration.sol","id":13932,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14410,"sourceUnit":11858,"src":"426:79:78","symbolAliases":[{"foreign":{"id":13931,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"434:20:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":13934,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14410,"sourceUnit":21634,"src":"506:49:78","symbolAliases":[{"foreign":{"id":13933,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"514:9:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/ConfiguratorInputTypes.sol","file":"../types/ConfiguratorInputTypes.sol","id":13936,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14410,"sourceUnit":21282,"src":"556:75:78","symbolAliases":[{"foreign":{"id":13935,"name":"ConfiguratorInputTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"564:22:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"ConfiguratorLogic","contractDependencies":[10492],"contractKind":"library","documentation":{"id":13937,"nodeType":"StructuredDocumentation","src":"633:152:78","text":" @title ConfiguratorLogic library\n @author Aave\n @notice Implements the functions to initialize reserves and update aTokens and debtTokens"},"fullyImplemented":true,"id":14409,"linearizedBaseContracts":[14409],"name":"ConfiguratorLogic","nameLocation":"794:17:78","nodeType":"ContractDefinition","nodes":[{"id":13941,"libraryName":{"id":13938,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":11857,"src":"822:20:78"},"nodeType":"UsingForDirective","src":"816:65:78","typeName":{"id":13940,"nodeType":"UserDefinedTypeName","pathNode":{"id":13939,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"847:33:78"},"referencedDeclaration":21318,"src":"847:33:78","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"anonymous":false,"id":13953,"name":"ReserveInitialized","nameLocation":"937:18:78","nodeType":"EventDefinition","parameters":{"id":13952,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13943,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"977:5:78","nodeType":"VariableDeclaration","scope":13953,"src":"961:21:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13942,"name":"address","nodeType":"ElementaryTypeName","src":"961:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13945,"indexed":true,"mutability":"mutable","name":"aToken","nameLocation":"1004:6:78","nodeType":"VariableDeclaration","scope":13953,"src":"988:22:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13944,"name":"address","nodeType":"ElementaryTypeName","src":"988:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13947,"indexed":false,"mutability":"mutable","name":"stableDebtToken","nameLocation":"1024:15:78","nodeType":"VariableDeclaration","scope":13953,"src":"1016:23:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13946,"name":"address","nodeType":"ElementaryTypeName","src":"1016:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13949,"indexed":false,"mutability":"mutable","name":"variableDebtToken","nameLocation":"1053:17:78","nodeType":"VariableDeclaration","scope":13953,"src":"1045:25:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13948,"name":"address","nodeType":"ElementaryTypeName","src":"1045:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13951,"indexed":false,"mutability":"mutable","name":"interestRateStrategyAddress","nameLocation":"1084:27:78","nodeType":"VariableDeclaration","scope":13953,"src":"1076:35:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13950,"name":"address","nodeType":"ElementaryTypeName","src":"1076:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"955:160:78"},"src":"931:185:78"},{"anonymous":false,"id":13961,"name":"ATokenUpgraded","nameLocation":"1125:14:78","nodeType":"EventDefinition","parameters":{"id":13960,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13955,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"1161:5:78","nodeType":"VariableDeclaration","scope":13961,"src":"1145:21:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13954,"name":"address","nodeType":"ElementaryTypeName","src":"1145:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13957,"indexed":true,"mutability":"mutable","name":"proxy","nameLocation":"1188:5:78","nodeType":"VariableDeclaration","scope":13961,"src":"1172:21:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13956,"name":"address","nodeType":"ElementaryTypeName","src":"1172:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13959,"indexed":true,"mutability":"mutable","name":"implementation","nameLocation":"1215:14:78","nodeType":"VariableDeclaration","scope":13961,"src":"1199:30:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13958,"name":"address","nodeType":"ElementaryTypeName","src":"1199:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1139:94:78"},"src":"1119:115:78"},{"anonymous":false,"id":13969,"name":"StableDebtTokenUpgraded","nameLocation":"1243:23:78","nodeType":"EventDefinition","parameters":{"id":13968,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13963,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"1288:5:78","nodeType":"VariableDeclaration","scope":13969,"src":"1272:21:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13962,"name":"address","nodeType":"ElementaryTypeName","src":"1272:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13965,"indexed":true,"mutability":"mutable","name":"proxy","nameLocation":"1315:5:78","nodeType":"VariableDeclaration","scope":13969,"src":"1299:21:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13964,"name":"address","nodeType":"ElementaryTypeName","src":"1299:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13967,"indexed":true,"mutability":"mutable","name":"implementation","nameLocation":"1342:14:78","nodeType":"VariableDeclaration","scope":13969,"src":"1326:30:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13966,"name":"address","nodeType":"ElementaryTypeName","src":"1326:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1266:94:78"},"src":"1237:124:78"},{"anonymous":false,"id":13977,"name":"VariableDebtTokenUpgraded","nameLocation":"1370:25:78","nodeType":"EventDefinition","parameters":{"id":13976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13971,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"1417:5:78","nodeType":"VariableDeclaration","scope":13977,"src":"1401:21:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13970,"name":"address","nodeType":"ElementaryTypeName","src":"1401:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13973,"indexed":true,"mutability":"mutable","name":"proxy","nameLocation":"1444:5:78","nodeType":"VariableDeclaration","scope":13977,"src":"1428:21:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13972,"name":"address","nodeType":"ElementaryTypeName","src":"1428:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13975,"indexed":true,"mutability":"mutable","name":"implementation","nameLocation":"1471:14:78","nodeType":"VariableDeclaration","scope":13977,"src":"1455:30:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13974,"name":"address","nodeType":"ElementaryTypeName","src":"1455:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1395:94:78"},"src":"1364:126:78"},{"body":{"id":14132,"nodeType":"Block","src":"1911:1959:78","statements":[{"assignments":[13988],"declarations":[{"constant":false,"id":13988,"mutability":"mutable","name":"aTokenProxyAddress","nameLocation":"1925:18:78","nodeType":"VariableDeclaration","scope":14132,"src":"1917:26:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13987,"name":"address","nodeType":"ElementaryTypeName","src":"1917:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":14014,"initialValue":{"arguments":[{"expression":{"id":13990,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"1973:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":13991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"aTokenImpl","nodeType":"MemberAccess","referencedDeclaration":21223,"src":"1973:16:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":13994,"name":"IInitializableAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4176,"src":"2029:20:78","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IInitializableAToken_$4176_$","typeString":"type(contract IInitializableAToken)"}},"id":13995,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":4175,"src":"2029:31:78","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IPool_$4860_$_t_address_$_t_address_$_t_contract$_IAaveIncentivesController_$3875_$_t_uint8_$_t_string_calldata_ptr_$_t_string_calldata_ptr_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function IInitializableAToken.initialize(contract IPool,address,address,contract IAaveIncentivesController,uint8,string calldata,string calldata,bytes calldata)"}},"id":13996,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"2029:40:78","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":13997,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13981,"src":"2079:4:78","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},{"expression":{"id":13998,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"2093:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":13999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"treasury","nodeType":"MemberAccess","referencedDeclaration":21235,"src":"2093:14:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14000,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"2117:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":21233,"src":"2117:21:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14002,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"2148:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"incentivesController","nodeType":"MemberAccess","referencedDeclaration":21237,"src":"2148:26:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14004,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"2184:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"underlyingAssetDecimals","nodeType":"MemberAccess","referencedDeclaration":21229,"src":"2184:29:78","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"expression":{"id":14006,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"2223:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"aTokenName","nodeType":"MemberAccess","referencedDeclaration":21239,"src":"2223:16:78","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"expression":{"id":14008,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"2249:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"aTokenSymbol","nodeType":"MemberAccess","referencedDeclaration":21241,"src":"2249:18:78","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"expression":{"id":14010,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"2277:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"params","nodeType":"MemberAccess","referencedDeclaration":21251,"src":"2277:12:78","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":13992,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1997:3:78","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":13993,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"1997:22:78","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":14012,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1997:300:78","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":13989,"name":"_initTokenWithProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14380,"src":"1946:19:78","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_address_$","typeString":"function (address,bytes memory) returns (address)"}},"id":14013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1946:357:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1917:386:78"},{"assignments":[14016],"declarations":[{"constant":false,"id":14016,"mutability":"mutable","name":"stableDebtTokenProxyAddress","nameLocation":"2318:27:78","nodeType":"VariableDeclaration","scope":14132,"src":"2310:35:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14015,"name":"address","nodeType":"ElementaryTypeName","src":"2310:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":14040,"initialValue":{"arguments":[{"expression":{"id":14018,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"2375:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenImpl","nodeType":"MemberAccess","referencedDeclaration":21225,"src":"2375:25:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":14022,"name":"IInitializableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4221,"src":"2440:23:78","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IInitializableDebtToken_$4221_$","typeString":"type(contract IInitializableDebtToken)"}},"id":14023,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":4220,"src":"2440:34:78","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IPool_$4860_$_t_address_$_t_contract$_IAaveIncentivesController_$3875_$_t_uint8_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function IInitializableDebtToken.initialize(contract IPool,address,contract IAaveIncentivesController,uint8,string memory,string memory,bytes calldata)"}},"id":14024,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"2440:43:78","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":14025,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13981,"src":"2493:4:78","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},{"expression":{"id":14026,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"2507:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":21233,"src":"2507:21:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14028,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"2538:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"incentivesController","nodeType":"MemberAccess","referencedDeclaration":21237,"src":"2538:26:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14030,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"2574:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"underlyingAssetDecimals","nodeType":"MemberAccess","referencedDeclaration":21229,"src":"2574:29:78","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"expression":{"id":14032,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"2613:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenName","nodeType":"MemberAccess","referencedDeclaration":21247,"src":"2613:25:78","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"expression":{"id":14034,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"2648:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenSymbol","nodeType":"MemberAccess","referencedDeclaration":21249,"src":"2648:27:78","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"expression":{"id":14036,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"2685:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"params","nodeType":"MemberAccess","referencedDeclaration":21251,"src":"2685:12:78","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":14020,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2408:3:78","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":14021,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"2408:22:78","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":14038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2408:297:78","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":14017,"name":"_initTokenWithProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14380,"src":"2348:19:78","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_address_$","typeString":"function (address,bytes memory) returns (address)"}},"id":14039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2348:363:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2310:401:78"},{"assignments":[14042],"declarations":[{"constant":false,"id":14042,"mutability":"mutable","name":"variableDebtTokenProxyAddress","nameLocation":"2726:29:78","nodeType":"VariableDeclaration","scope":14132,"src":"2718:37:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14041,"name":"address","nodeType":"ElementaryTypeName","src":"2718:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":14066,"initialValue":{"arguments":[{"expression":{"id":14044,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"2785:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenImpl","nodeType":"MemberAccess","referencedDeclaration":21227,"src":"2785:27:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"expression":{"id":14048,"name":"IInitializableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4221,"src":"2852:23:78","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IInitializableDebtToken_$4221_$","typeString":"type(contract IInitializableDebtToken)"}},"id":14049,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":4220,"src":"2852:34:78","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IPool_$4860_$_t_address_$_t_contract$_IAaveIncentivesController_$3875_$_t_uint8_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function IInitializableDebtToken.initialize(contract IPool,address,contract IAaveIncentivesController,uint8,string memory,string memory,bytes calldata)"}},"id":14050,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"2852:43:78","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":14051,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13981,"src":"2905:4:78","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},{"expression":{"id":14052,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"2919:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":21233,"src":"2919:21:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14054,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"2950:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"incentivesController","nodeType":"MemberAccess","referencedDeclaration":21237,"src":"2950:26:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14056,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"2986:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"underlyingAssetDecimals","nodeType":"MemberAccess","referencedDeclaration":21229,"src":"2986:29:78","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"expression":{"id":14058,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"3025:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenName","nodeType":"MemberAccess","referencedDeclaration":21243,"src":"3025:27:78","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"expression":{"id":14060,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"3062:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenSymbol","nodeType":"MemberAccess","referencedDeclaration":21245,"src":"3062:29:78","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"expression":{"id":14062,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"3101:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"params","nodeType":"MemberAccess","referencedDeclaration":21251,"src":"3101:12:78","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":14046,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2820:3:78","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":14047,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"2820:22:78","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":14064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2820:301:78","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":14043,"name":"_initTokenWithProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14380,"src":"2758:19:78","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_address_$","typeString":"function (address,bytes memory) returns (address)"}},"id":14065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2758:369:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2718:409:78"},{"expression":{"arguments":[{"expression":{"id":14070,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"3158:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":21233,"src":"3158:21:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14072,"name":"aTokenProxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13988,"src":"3187:18:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14073,"name":"stableDebtTokenProxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14016,"src":"3213:27:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14074,"name":"variableDebtTokenProxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14042,"src":"3248:29:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14075,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"3285:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":21231,"src":"3285:33:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14067,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13981,"src":"3134:4:78","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":14069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"initReserve","nodeType":"MemberAccess","referencedDeclaration":4644,"src":"3134:16:78","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address,address,address) external"}},"id":14077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3134:190:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14078,"nodeType":"ExpressionStatement","src":"3134:190:78"},{"assignments":[14083],"declarations":[{"constant":false,"id":14083,"mutability":"mutable","name":"currentConfig","nameLocation":"3372:13:78","nodeType":"VariableDeclaration","scope":14132,"src":"3331:54:78","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":14082,"nodeType":"UserDefinedTypeName","pathNode":{"id":14081,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"3331:33:78"},"referencedDeclaration":21318,"src":"3331:33:78","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":14088,"initialValue":{"arguments":[{"hexValue":"30","id":14086,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3422:1:78","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":14084,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"3388:9:78","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":14085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ReserveConfigurationMap","nodeType":"MemberAccess","referencedDeclaration":21318,"src":"3388:33:78","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ReserveConfigurationMap_$21318_storage_ptr_$","typeString":"type(struct DataTypes.ReserveConfigurationMap storage pointer)"}},"id":14087,"isConstant":false,"isLValue":false,"isPure":true,"kind":"structConstructorCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3388:36:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"3331:93:78"},{"expression":{"arguments":[{"expression":{"id":14092,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"3457:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"underlyingAssetDecimals","nodeType":"MemberAccess","referencedDeclaration":21229,"src":"3457:29:78","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":14089,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14083,"src":"3431:13:78","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":14091,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setDecimals","nodeType":"MemberAccess","referencedDeclaration":10914,"src":"3431:25:78","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":14094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3431:56:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14095,"nodeType":"ExpressionStatement","src":"3431:56:78"},{"expression":{"arguments":[{"hexValue":"74727565","id":14099,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3518:4:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14096,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14083,"src":"3494:13:78","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":14098,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setActive","nodeType":"MemberAccess","referencedDeclaration":10964,"src":"3494:23:78","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":14100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3494:29:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14101,"nodeType":"ExpressionStatement","src":"3494:29:78"},{"expression":{"arguments":[{"hexValue":"66616c7365","id":14105,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3553:5:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14102,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14083,"src":"3529:13:78","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":14104,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setPaused","nodeType":"MemberAccess","referencedDeclaration":11064,"src":"3529:23:78","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":14106,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3529:30:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14107,"nodeType":"ExpressionStatement","src":"3529:30:78"},{"expression":{"arguments":[{"hexValue":"66616c7365","id":14111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3589:5:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":14108,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14083,"src":"3565:13:78","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":14110,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setFrozen","nodeType":"MemberAccess","referencedDeclaration":11014,"src":"3565:23:78","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":14112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3565:30:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14113,"nodeType":"ExpressionStatement","src":"3565:30:78"},{"expression":{"arguments":[{"expression":{"id":14117,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"3624:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":21233,"src":"3624:21:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14119,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14083,"src":"3647:13:78","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":14114,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13981,"src":"3602:4:78","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":14116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4667,"src":"3602:21:78","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":14120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3602:59:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14121,"nodeType":"ExpressionStatement","src":"3602:59:78"},{"eventCall":{"arguments":[{"expression":{"id":14123,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"3699:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":21233,"src":"3699:21:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14125,"name":"aTokenProxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13988,"src":"3728:18:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14126,"name":"stableDebtTokenProxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14016,"src":"3754:27:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14127,"name":"variableDebtTokenProxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14042,"src":"3789:29:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14128,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13984,"src":"3826:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}},"id":14129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":21231,"src":"3826:33:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":14122,"name":"ReserveInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13953,"src":"3673:18:78","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address,address,address)"}},"id":14130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3673:192:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14131,"nodeType":"EmitStatement","src":"3668:197:78"}]},"documentation":{"id":13978,"nodeType":"StructuredDocumentation","src":"1494:299:78","text":" @notice Initialize a reserve by creating and initializing aToken, stable debt token and variable debt token\n @dev Emits the `ReserveInitialized` event\n @param pool The Pool in which the reserve will be initialized\n @param input The needed parameters for the initialization"},"functionSelector":"df59b8b2","id":14133,"implemented":true,"kind":"function","modifiers":[],"name":"executeInitReserve","nameLocation":"1805:18:78","nodeType":"FunctionDefinition","parameters":{"id":13985,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13981,"mutability":"mutable","name":"pool","nameLocation":"1835:4:78","nodeType":"VariableDeclaration","scope":14133,"src":"1829:10:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":13980,"nodeType":"UserDefinedTypeName","pathNode":{"id":13979,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"1829:5:78"},"referencedDeclaration":4860,"src":"1829:5:78","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"},{"constant":false,"id":13984,"mutability":"mutable","name":"input","nameLocation":"1894:5:78","nodeType":"VariableDeclaration","scope":14133,"src":"1845:54:78","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput"},"typeName":{"id":13983,"nodeType":"UserDefinedTypeName","pathNode":{"id":13982,"name":"ConfiguratorInputTypes.InitReserveInput","nodeType":"IdentifierPath","referencedDeclaration":21252,"src":"1845:39:78"},"referencedDeclaration":21252,"src":"1845:39:78","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_storage_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput"}},"visibility":"internal"}],"src":"1823:80:78"},"returnParameters":{"id":13986,"nodeType":"ParameterList","parameters":[],"src":"1911:0:78"},"scope":14409,"src":"1796:2074:78","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":14204,"nodeType":"Block","src":"4253:643:78","statements":[{"assignments":[14147],"declarations":[{"constant":false,"id":14147,"mutability":"mutable","name":"reserveData","nameLocation":"4288:11:78","nodeType":"VariableDeclaration","scope":14204,"src":"4259:40:78","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":14146,"nodeType":"UserDefinedTypeName","pathNode":{"id":14145,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"4259:21:78"},"referencedDeclaration":21315,"src":"4259:21:78","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":14153,"initialValue":{"arguments":[{"expression":{"id":14150,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14140,"src":"4328:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$21267_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}},"id":14151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21254,"src":"4328:11:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14148,"name":"cachedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14137,"src":"4302:10:78","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":14149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4710,"src":"4302:25:78","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$21315_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":14152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4302:38:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"4259:81:78"},{"assignments":[null,null,null,14155,null,null],"declarations":[null,null,null,{"constant":false,"id":14155,"mutability":"mutable","name":"decimals","nameLocation":"4362:8:78","nodeType":"VariableDeclaration","scope":14204,"src":"4354:16:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14154,"name":"uint256","nodeType":"ElementaryTypeName","src":"4354:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null,null],"id":14163,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":14158,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14140,"src":"4406:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$21267_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}},"id":14159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21254,"src":"4406:11:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14156,"name":"cachedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14137,"src":"4378:10:78","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":14157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"4378:27:78","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":14160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4378:40:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":14161,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getParams","nodeType":"MemberAccess","referencedDeclaration":11823,"src":"4378:50:78","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256,uint256,uint256,uint256,uint256,uint256)"}},"id":14162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4378:52:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4347:83:78"},{"assignments":[14165],"declarations":[{"constant":false,"id":14165,"mutability":"mutable","name":"encodedCall","nameLocation":"4450:11:78","nodeType":"VariableDeclaration","scope":14204,"src":"4437:24:78","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":14164,"name":"bytes","nodeType":"ElementaryTypeName","src":"4437:5:78","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":14186,"initialValue":{"arguments":[{"expression":{"expression":{"id":14168,"name":"IInitializableAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4176,"src":"4494:20:78","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IInitializableAToken_$4176_$","typeString":"type(contract IInitializableAToken)"}},"id":14169,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":4175,"src":"4494:31:78","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IPool_$4860_$_t_address_$_t_address_$_t_contract$_IAaveIncentivesController_$3875_$_t_uint8_$_t_string_calldata_ptr_$_t_string_calldata_ptr_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function IInitializableAToken.initialize(contract IPool,address,address,contract IAaveIncentivesController,uint8,string calldata,string calldata,bytes calldata)"}},"id":14170,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"4494:40:78","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":14171,"name":"cachedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14137,"src":"4542:10:78","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},{"expression":{"id":14172,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14140,"src":"4560:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$21267_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}},"id":14173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"treasury","nodeType":"MemberAccess","referencedDeclaration":21256,"src":"4560:14:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14174,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14140,"src":"4582:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$21267_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}},"id":14175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21254,"src":"4582:11:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14176,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14140,"src":"4601:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$21267_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}},"id":14177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"incentivesController","nodeType":"MemberAccess","referencedDeclaration":21258,"src":"4601:26:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14178,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14155,"src":"4635:8:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14179,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14140,"src":"4651:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$21267_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}},"id":14180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"name","nodeType":"MemberAccess","referencedDeclaration":21260,"src":"4651:10:78","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"expression":{"id":14181,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14140,"src":"4669:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$21267_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}},"id":14182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":21262,"src":"4669:12:78","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"expression":{"id":14183,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14140,"src":"4689:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$21267_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}},"id":14184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"params","nodeType":"MemberAccess","referencedDeclaration":21266,"src":"4689:12:78","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":14166,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4464:3:78","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":14167,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"4464:22:78","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":14185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4464:243:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4437:270:78"},{"expression":{"arguments":[{"expression":{"id":14188,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14147,"src":"4742:11:78","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":14189,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"4742:25:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14190,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14140,"src":"4769:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$21267_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}},"id":14191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":21264,"src":"4769:20:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14192,"name":"encodedCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14165,"src":"4791:11:78","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":14187,"name":"_upgradeTokenImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14408,"src":"4714:27:78","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,bytes memory)"}},"id":14193,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4714:89:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14194,"nodeType":"ExpressionStatement","src":"4714:89:78"},{"eventCall":{"arguments":[{"expression":{"id":14196,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14140,"src":"4830:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$21267_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}},"id":14197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21254,"src":"4830:11:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14198,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14147,"src":"4843:11:78","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":14199,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"4843:25:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14200,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14140,"src":"4870:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$21267_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}},"id":14201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":21264,"src":"4870:20:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":14195,"name":"ATokenUpgraded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13961,"src":"4815:14:78","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":14202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4815:76:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14203,"nodeType":"EmitStatement","src":"4810:81:78"}]},"documentation":{"id":14134,"nodeType":"StructuredDocumentation","src":"3874:253:78","text":" @notice Updates the aToken implementation and initializes it\n @dev Emits the `ATokenUpgraded` event\n @param cachedPool The Pool containing the reserve with the aToken\n @param input The parameters needed for the initialize call"},"functionSelector":"b13c96a8","id":14205,"implemented":true,"kind":"function","modifiers":[],"name":"executeUpdateAToken","nameLocation":"4139:19:78","nodeType":"FunctionDefinition","parameters":{"id":14141,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14137,"mutability":"mutable","name":"cachedPool","nameLocation":"4170:10:78","nodeType":"VariableDeclaration","scope":14205,"src":"4164:16:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":14136,"nodeType":"UserDefinedTypeName","pathNode":{"id":14135,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"4164:5:78"},"referencedDeclaration":4860,"src":"4164:5:78","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"},{"constant":false,"id":14140,"mutability":"mutable","name":"input","nameLocation":"4236:5:78","nodeType":"VariableDeclaration","scope":14205,"src":"4186:55:78","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$21267_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput"},"typeName":{"id":14139,"nodeType":"UserDefinedTypeName","pathNode":{"id":14138,"name":"ConfiguratorInputTypes.UpdateATokenInput","nodeType":"IdentifierPath","referencedDeclaration":21267,"src":"4186:40:78"},"referencedDeclaration":21267,"src":"4186:40:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$21267_storage_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput"}},"visibility":"internal"}],"src":"4158:87:78"},"returnParameters":{"id":14142,"nodeType":"ParameterList","parameters":[],"src":"4253:0:78"},"scope":14409,"src":"4130:766:78","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":14274,"nodeType":"Block","src":"5322:699:78","statements":[{"assignments":[14219],"declarations":[{"constant":false,"id":14219,"mutability":"mutable","name":"reserveData","nameLocation":"5357:11:78","nodeType":"VariableDeclaration","scope":14274,"src":"5328:40:78","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":14218,"nodeType":"UserDefinedTypeName","pathNode":{"id":14217,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"5328:21:78"},"referencedDeclaration":21315,"src":"5328:21:78","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":14225,"initialValue":{"arguments":[{"expression":{"id":14222,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14212,"src":"5397:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":14223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21269,"src":"5397:11:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14220,"name":"cachedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14209,"src":"5371:10:78","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":14221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4710,"src":"5371:25:78","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$21315_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":14224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5371:38:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"5328:81:78"},{"assignments":[null,null,null,14227,null,null],"declarations":[null,null,null,{"constant":false,"id":14227,"mutability":"mutable","name":"decimals","nameLocation":"5431:8:78","nodeType":"VariableDeclaration","scope":14274,"src":"5423:16:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14226,"name":"uint256","nodeType":"ElementaryTypeName","src":"5423:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null,null],"id":14235,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":14230,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14212,"src":"5475:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":14231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21269,"src":"5475:11:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14228,"name":"cachedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14209,"src":"5447:10:78","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":14229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"5447:27:78","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":14232,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5447:40:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":14233,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getParams","nodeType":"MemberAccess","referencedDeclaration":11823,"src":"5447:50:78","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256,uint256,uint256,uint256,uint256,uint256)"}},"id":14234,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5447:52:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"5416:83:78"},{"assignments":[14237],"declarations":[{"constant":false,"id":14237,"mutability":"mutable","name":"encodedCall","nameLocation":"5519:11:78","nodeType":"VariableDeclaration","scope":14274,"src":"5506:24:78","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":14236,"name":"bytes","nodeType":"ElementaryTypeName","src":"5506:5:78","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":14256,"initialValue":{"arguments":[{"expression":{"expression":{"id":14240,"name":"IInitializableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4221,"src":"5563:23:78","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IInitializableDebtToken_$4221_$","typeString":"type(contract IInitializableDebtToken)"}},"id":14241,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":4220,"src":"5563:34:78","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IPool_$4860_$_t_address_$_t_contract$_IAaveIncentivesController_$3875_$_t_uint8_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function IInitializableDebtToken.initialize(contract IPool,address,contract IAaveIncentivesController,uint8,string memory,string memory,bytes calldata)"}},"id":14242,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"5563:43:78","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":14243,"name":"cachedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14209,"src":"5614:10:78","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},{"expression":{"id":14244,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14212,"src":"5632:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":14245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21269,"src":"5632:11:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14246,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14212,"src":"5651:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":14247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"incentivesController","nodeType":"MemberAccess","referencedDeclaration":21271,"src":"5651:26:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14248,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14227,"src":"5685:8:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14249,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14212,"src":"5701:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":14250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"name","nodeType":"MemberAccess","referencedDeclaration":21273,"src":"5701:10:78","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"expression":{"id":14251,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14212,"src":"5719:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":14252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":21275,"src":"5719:12:78","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"expression":{"id":14253,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14212,"src":"5739:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":14254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"params","nodeType":"MemberAccess","referencedDeclaration":21279,"src":"5739:12:78","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":14238,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5533:3:78","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":14239,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"5533:22:78","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":14255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5533:224:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"5506:251:78"},{"expression":{"arguments":[{"expression":{"id":14258,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14219,"src":"5799:11:78","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":14259,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"5799:34:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14260,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14212,"src":"5841:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":14261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":21277,"src":"5841:20:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14262,"name":"encodedCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14237,"src":"5869:11:78","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":14257,"name":"_upgradeTokenImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14408,"src":"5764:27:78","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,bytes memory)"}},"id":14263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5764:122:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14264,"nodeType":"ExpressionStatement","src":"5764:122:78"},{"eventCall":{"arguments":[{"expression":{"id":14266,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14212,"src":"5929:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":14267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21269,"src":"5929:11:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14268,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14219,"src":"5948:11:78","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":14269,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"5948:34:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14270,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14212,"src":"5990:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":14271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":21277,"src":"5990:20:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":14265,"name":"StableDebtTokenUpgraded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13969,"src":"5898:23:78","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":14272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5898:118:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14273,"nodeType":"EmitStatement","src":"5893:123:78"}]},"documentation":{"id":14206,"nodeType":"StructuredDocumentation","src":"4900:284:78","text":" @notice Updates the stable debt token implementation and initializes it\n @dev Emits the `StableDebtTokenUpgraded` event\n @param cachedPool The Pool containing the reserve with the stable debt token\n @param input The parameters needed for the initialize call"},"functionSelector":"f5b50e70","id":14275,"implemented":true,"kind":"function","modifiers":[],"name":"executeUpdateStableDebtToken","nameLocation":"5196:28:78","nodeType":"FunctionDefinition","parameters":{"id":14213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14209,"mutability":"mutable","name":"cachedPool","nameLocation":"5236:10:78","nodeType":"VariableDeclaration","scope":14275,"src":"5230:16:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":14208,"nodeType":"UserDefinedTypeName","pathNode":{"id":14207,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"5230:5:78"},"referencedDeclaration":4860,"src":"5230:5:78","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"},{"constant":false,"id":14212,"mutability":"mutable","name":"input","nameLocation":"5305:5:78","nodeType":"VariableDeclaration","scope":14275,"src":"5252:58:78","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput"},"typeName":{"id":14211,"nodeType":"UserDefinedTypeName","pathNode":{"id":14210,"name":"ConfiguratorInputTypes.UpdateDebtTokenInput","nodeType":"IdentifierPath","referencedDeclaration":21280,"src":"5252:43:78"},"referencedDeclaration":21280,"src":"5252:43:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_storage_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput"}},"visibility":"internal"}],"src":"5224:90:78"},"returnParameters":{"id":14214,"nodeType":"ParameterList","parameters":[],"src":"5322:0:78"},"scope":14409,"src":"5187:834:78","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":14344,"nodeType":"Block","src":"6455:705:78","statements":[{"assignments":[14289],"declarations":[{"constant":false,"id":14289,"mutability":"mutable","name":"reserveData","nameLocation":"6490:11:78","nodeType":"VariableDeclaration","scope":14344,"src":"6461:40:78","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":14288,"nodeType":"UserDefinedTypeName","pathNode":{"id":14287,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"6461:21:78"},"referencedDeclaration":21315,"src":"6461:21:78","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":14295,"initialValue":{"arguments":[{"expression":{"id":14292,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14282,"src":"6530:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":14293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21269,"src":"6530:11:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14290,"name":"cachedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14279,"src":"6504:10:78","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":14291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4710,"src":"6504:25:78","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$21315_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":14294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6504:38:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"6461:81:78"},{"assignments":[null,null,null,14297,null,null],"declarations":[null,null,null,{"constant":false,"id":14297,"mutability":"mutable","name":"decimals","nameLocation":"6564:8:78","nodeType":"VariableDeclaration","scope":14344,"src":"6556:16:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14296,"name":"uint256","nodeType":"ElementaryTypeName","src":"6556:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null,null],"id":14305,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":14300,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14282,"src":"6608:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":14301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21269,"src":"6608:11:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14298,"name":"cachedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14279,"src":"6580:10:78","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":14299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"6580:27:78","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":14302,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6580:40:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":14303,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getParams","nodeType":"MemberAccess","referencedDeclaration":11823,"src":"6580:50:78","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256,uint256,uint256,uint256,uint256,uint256)"}},"id":14304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6580:52:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"6549:83:78"},{"assignments":[14307],"declarations":[{"constant":false,"id":14307,"mutability":"mutable","name":"encodedCall","nameLocation":"6652:11:78","nodeType":"VariableDeclaration","scope":14344,"src":"6639:24:78","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":14306,"name":"bytes","nodeType":"ElementaryTypeName","src":"6639:5:78","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":14326,"initialValue":{"arguments":[{"expression":{"expression":{"id":14310,"name":"IInitializableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4221,"src":"6696:23:78","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IInitializableDebtToken_$4221_$","typeString":"type(contract IInitializableDebtToken)"}},"id":14311,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":4220,"src":"6696:34:78","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IPool_$4860_$_t_address_$_t_contract$_IAaveIncentivesController_$3875_$_t_uint8_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function IInitializableDebtToken.initialize(contract IPool,address,contract IAaveIncentivesController,uint8,string memory,string memory,bytes calldata)"}},"id":14312,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"6696:43:78","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":14313,"name":"cachedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14279,"src":"6747:10:78","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},{"expression":{"id":14314,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14282,"src":"6765:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":14315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21269,"src":"6765:11:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14316,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14282,"src":"6784:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":14317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"incentivesController","nodeType":"MemberAccess","referencedDeclaration":21271,"src":"6784:26:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14318,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14297,"src":"6818:8:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14319,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14282,"src":"6834:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":14320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"name","nodeType":"MemberAccess","referencedDeclaration":21273,"src":"6834:10:78","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"expression":{"id":14321,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14282,"src":"6852:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":14322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":21275,"src":"6852:12:78","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"expression":{"id":14323,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14282,"src":"6872:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":14324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"params","nodeType":"MemberAccess","referencedDeclaration":21279,"src":"6872:12:78","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"},{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":14308,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6666:3:78","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":14309,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"6666:22:78","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":14325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6666:224:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"6639:251:78"},{"expression":{"arguments":[{"expression":{"id":14328,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14289,"src":"6932:11:78","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":14329,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21306,"src":"6932:36:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14330,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14282,"src":"6976:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":14331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":21277,"src":"6976:20:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14332,"name":"encodedCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14307,"src":"7004:11:78","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":14327,"name":"_upgradeTokenImplementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14408,"src":"6897:27:78","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,bytes memory)"}},"id":14333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6897:124:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14334,"nodeType":"ExpressionStatement","src":"6897:124:78"},{"eventCall":{"arguments":[{"expression":{"id":14336,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14282,"src":"7066:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":14337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21269,"src":"7066:11:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14338,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14289,"src":"7085:11:78","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":14339,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21306,"src":"7085:36:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14340,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14282,"src":"7129:5:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}},"id":14341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"implementation","nodeType":"MemberAccess","referencedDeclaration":21277,"src":"7129:20:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":14335,"name":"VariableDebtTokenUpgraded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13977,"src":"7033:25:78","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":14342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7033:122:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14343,"nodeType":"EmitStatement","src":"7028:127:78"}]},"documentation":{"id":14276,"nodeType":"StructuredDocumentation","src":"6025:290:78","text":" @notice Updates the variable debt token implementation and initializes it\n @dev Emits the `VariableDebtTokenUpgraded` event\n @param cachedPool The Pool containing the reserve with the variable debt token\n @param input The parameters needed for the initialize call"},"functionSelector":"b0f09355","id":14345,"implemented":true,"kind":"function","modifiers":[],"name":"executeUpdateVariableDebtToken","nameLocation":"6327:30:78","nodeType":"FunctionDefinition","parameters":{"id":14283,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14279,"mutability":"mutable","name":"cachedPool","nameLocation":"6369:10:78","nodeType":"VariableDeclaration","scope":14345,"src":"6363:16:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":14278,"nodeType":"UserDefinedTypeName","pathNode":{"id":14277,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"6363:5:78"},"referencedDeclaration":4860,"src":"6363:5:78","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"},{"constant":false,"id":14282,"mutability":"mutable","name":"input","nameLocation":"6438:5:78","nodeType":"VariableDeclaration","scope":14345,"src":"6385:58:78","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput"},"typeName":{"id":14281,"nodeType":"UserDefinedTypeName","pathNode":{"id":14280,"name":"ConfiguratorInputTypes.UpdateDebtTokenInput","nodeType":"IdentifierPath","referencedDeclaration":21280,"src":"6385:43:78"},"referencedDeclaration":21280,"src":"6385:43:78","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_storage_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput"}},"visibility":"internal"}],"src":"6357:90:78"},"returnParameters":{"id":14284,"nodeType":"ParameterList","parameters":[],"src":"6455:0:78"},"scope":14409,"src":"6318:842:78","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":14379,"nodeType":"Block","src":"7557:226:78","statements":[{"assignments":[14357],"declarations":[{"constant":false,"id":14357,"mutability":"mutable","name":"proxy","nameLocation":"7610:5:78","nodeType":"VariableDeclaration","scope":14379,"src":"7563:52:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"},"typeName":{"id":14356,"nodeType":"UserDefinedTypeName","pathNode":{"id":14355,"name":"InitializableImmutableAdminUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":10492,"src":"7563:46:78"},"referencedDeclaration":10492,"src":"7563:46:78","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"visibility":"internal"}],"id":14366,"initialValue":{"arguments":[{"arguments":[{"id":14363,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7686:4:78","typeDescriptions":{"typeIdentifier":"t_contract$_ConfiguratorLogic_$14409","typeString":"library ConfiguratorLogic"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ConfiguratorLogic_$14409","typeString":"library ConfiguratorLogic"}],"id":14362,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7678:7:78","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14361,"name":"address","nodeType":"ElementaryTypeName","src":"7678:7:78","typeDescriptions":{}}},"id":14364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7678:13:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"7618:50:78","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$_t_address_$returns$_t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492_$","typeString":"function (address) returns (contract InitializableImmutableAdminUpgradeabilityProxy)"},"typeName":{"id":14359,"nodeType":"UserDefinedTypeName","pathNode":{"id":14358,"name":"InitializableImmutableAdminUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":10492,"src":"7622:46:78"},"referencedDeclaration":10492,"src":"7622:46:78","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}}},"id":14365,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7618:81:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"nodeType":"VariableDeclarationStatement","src":"7563:136:78"},{"expression":{"arguments":[{"id":14370,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14348,"src":"7723:14:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14371,"name":"initParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14350,"src":"7739:10:78","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":14367,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14357,"src":"7706:5:78","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"id":14369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":2881,"src":"7706:16:78","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory) payable external"}},"id":14372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7706:44:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14373,"nodeType":"ExpressionStatement","src":"7706:44:78"},{"expression":{"arguments":[{"id":14376,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14357,"src":"7772:5:78","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}],"id":14375,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7764:7:78","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14374,"name":"address","nodeType":"ElementaryTypeName","src":"7764:7:78","typeDescriptions":{}}},"id":14377,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7764:14:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":14354,"id":14378,"nodeType":"Return","src":"7757:21:78"}]},"documentation":{"id":14346,"nodeType":"StructuredDocumentation","src":"7164:273:78","text":" @notice Creates a new proxy and initializes the implementation\n @param implementation The address of the implementation\n @param initParams The parameters that is passed to the implementation to initialize\n @return The address of initialized proxy"},"id":14380,"implemented":true,"kind":"function","modifiers":[],"name":"_initTokenWithProxy","nameLocation":"7449:19:78","nodeType":"FunctionDefinition","parameters":{"id":14351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14348,"mutability":"mutable","name":"implementation","nameLocation":"7482:14:78","nodeType":"VariableDeclaration","scope":14380,"src":"7474:22:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14347,"name":"address","nodeType":"ElementaryTypeName","src":"7474:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14350,"mutability":"mutable","name":"initParams","nameLocation":"7515:10:78","nodeType":"VariableDeclaration","scope":14380,"src":"7502:23:78","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":14349,"name":"bytes","nodeType":"ElementaryTypeName","src":"7502:5:78","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7468:61:78"},"returnParameters":{"id":14354,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14353,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14380,"src":"7548:7:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14352,"name":"address","nodeType":"ElementaryTypeName","src":"7548:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7547:9:78"},"scope":14409,"src":"7440:343:78","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":14407,"nodeType":"Block","src":"8250:208:78","statements":[{"assignments":[14392],"declarations":[{"constant":false,"id":14392,"mutability":"mutable","name":"proxy","nameLocation":"8303:5:78","nodeType":"VariableDeclaration","scope":14407,"src":"8256:52:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"},"typeName":{"id":14391,"nodeType":"UserDefinedTypeName","pathNode":{"id":14390,"name":"InitializableImmutableAdminUpgradeabilityProxy","nodeType":"IdentifierPath","referencedDeclaration":10492,"src":"8256:46:78"},"referencedDeclaration":10492,"src":"8256:46:78","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"visibility":"internal"}],"id":14399,"initialValue":{"arguments":[{"arguments":[{"id":14396,"name":"proxyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14383,"src":"8375:12:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14395,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8367:8:78","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":14394,"name":"address","nodeType":"ElementaryTypeName","src":"8367:8:78","stateMutability":"payable","typeDescriptions":{}}},"id":14397,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8367:21:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":14393,"name":"InitializableImmutableAdminUpgradeabilityProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10492,"src":"8311:46:78","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492_$","typeString":"type(contract InitializableImmutableAdminUpgradeabilityProxy)"}},"id":14398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8311:85:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"nodeType":"VariableDeclarationStatement","src":"8256:140:78"},{"expression":{"arguments":[{"id":14403,"name":"implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14385,"src":"8426:14:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14404,"name":"initParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14387,"src":"8442:10:78","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":14400,"name":"proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14392,"src":"8403:5:78","typeDescriptions":{"typeIdentifier":"t_contract$_InitializableImmutableAdminUpgradeabilityProxy_$10492","typeString":"contract InitializableImmutableAdminUpgradeabilityProxy"}},"id":14402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"upgradeToAndCall","nodeType":"MemberAccess","referencedDeclaration":10435,"src":"8403:22:78","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_address_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes memory) payable external"}},"id":14405,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8403:50:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14406,"nodeType":"ExpressionStatement","src":"8403:50:78"}]},"documentation":{"id":14381,"nodeType":"StructuredDocumentation","src":"7787:327:78","text":" @notice Upgrades the implementation and makes call to the proxy\n @dev The call is used to initialize the new implementation.\n @param proxyAddress The address of the proxy\n @param implementation The address of the new implementation\n @param  initParams The parameters to the call after the upgrade"},"id":14408,"implemented":true,"kind":"function","modifiers":[],"name":"_upgradeTokenImplementation","nameLocation":"8126:27:78","nodeType":"FunctionDefinition","parameters":{"id":14388,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14383,"mutability":"mutable","name":"proxyAddress","nameLocation":"8167:12:78","nodeType":"VariableDeclaration","scope":14408,"src":"8159:20:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14382,"name":"address","nodeType":"ElementaryTypeName","src":"8159:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14385,"mutability":"mutable","name":"implementation","nameLocation":"8193:14:78","nodeType":"VariableDeclaration","scope":14408,"src":"8185:22:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14384,"name":"address","nodeType":"ElementaryTypeName","src":"8185:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14387,"mutability":"mutable","name":"initParams","nameLocation":"8226:10:78","nodeType":"VariableDeclaration","scope":14408,"src":"8213:23:78","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":14386,"name":"bytes","nodeType":"ElementaryTypeName","src":"8213:5:78","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8153:87:78"},"returnParameters":{"id":14389,"nodeType":"ParameterList","parameters":[],"src":"8250:0:78"},"scope":14409,"src":"8117:341:78","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":14410,"src":"786:7674:78","usedErrors":[]}],"src":"37:8424:78"},"id":78},"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol","exportedSymbols":{"DataTypes":[21633],"EModeLogic":[14615],"Errors":[12642],"GPv2SafeERC20":[118],"IERC20":[1442],"IPriceOracleGetter":[5835],"PercentageMath":[21132],"ReserveLogic":[18377],"UserConfiguration":[12368],"ValidationLogic":[20908],"WadRayMath":[21219]},"id":14616,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":14411,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:79"},{"absolutePath":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":14413,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14616,"sourceUnit":119,"src":"63:87:79","symbolAliases":[{"foreign":{"id":14412,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:13:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../../dependencies/openzeppelin/contracts/IERC20.sol","id":14415,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14616,"sourceUnit":1443,"src":"151:79:79","symbolAliases":[{"foreign":{"id":14414,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"159:6:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol","file":"../../../interfaces/IPriceOracleGetter.sol","id":14417,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14616,"sourceUnit":5836,"src":"231:78:79","symbolAliases":[{"foreign":{"id":14416,"name":"IPriceOracleGetter","nodeType":"Identifier","overloadedDeclarations":[],"src":"239:18:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"../configuration/UserConfiguration.sol","id":14419,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14616,"sourceUnit":12369,"src":"310:73:79","symbolAliases":[{"foreign":{"id":14418,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"318:17:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol","file":"../helpers/Errors.sol","id":14421,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14616,"sourceUnit":12643,"src":"384:45:79","symbolAliases":[{"foreign":{"id":14420,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"392:6:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol","file":"../math/WadRayMath.sol","id":14423,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14616,"sourceUnit":21220,"src":"430:50:79","symbolAliases":[{"foreign":{"id":14422,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"438:10:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol","file":"../math/PercentageMath.sol","id":14425,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14616,"sourceUnit":21133,"src":"481:58:79","symbolAliases":[{"foreign":{"id":14424,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"489:14:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":14427,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14616,"sourceUnit":21634,"src":"540:49:79","symbolAliases":[{"foreign":{"id":14426,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"548:9:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol","file":"./ValidationLogic.sol","id":14429,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14616,"sourceUnit":20909,"src":"590:54:79","symbolAliases":[{"foreign":{"id":14428,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"598:15:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol","file":"./ReserveLogic.sol","id":14431,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14616,"sourceUnit":18378,"src":"645:48:79","symbolAliases":[{"foreign":{"id":14430,"name":"ReserveLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"653:12:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"EModeLogic","contractDependencies":[],"contractKind":"library","documentation":{"id":14432,"nodeType":"StructuredDocumentation","src":"695:130:79","text":" @title EModeLogic library\n @author Aave\n @notice Implements the base logic for all the actions related to the eMode"},"fullyImplemented":true,"id":14615,"linearizedBaseContracts":[14615],"name":"EModeLogic","nameLocation":"834:10:79","nodeType":"ContractDefinition","nodes":[{"id":14436,"libraryName":{"id":14433,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":18377,"src":"855:12:79"},"nodeType":"UsingForDirective","src":"849:46:79","typeName":{"id":14435,"nodeType":"UserDefinedTypeName","pathNode":{"id":14434,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"872:22:79"},"referencedDeclaration":21379,"src":"872:22:79","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}}},{"id":14440,"libraryName":{"id":14437,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":18377,"src":"904:12:79"},"nodeType":"UsingForDirective","src":"898:45:79","typeName":{"id":14439,"nodeType":"UserDefinedTypeName","pathNode":{"id":14438,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"921:21:79"},"referencedDeclaration":21315,"src":"921:21:79","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},{"id":14444,"libraryName":{"id":14441,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"952:13:79"},"nodeType":"UsingForDirective","src":"946:31:79","typeName":{"id":14443,"nodeType":"UserDefinedTypeName","pathNode":{"id":14442,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"970:6:79"},"referencedDeclaration":1442,"src":"970:6:79","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"id":14448,"libraryName":{"id":14445,"name":"UserConfiguration","nodeType":"IdentifierPath","referencedDeclaration":12368,"src":"986:17:79"},"nodeType":"UsingForDirective","src":"980:59:79","typeName":{"id":14447,"nodeType":"UserDefinedTypeName","pathNode":{"id":14446,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"1008:30:79"},"referencedDeclaration":21322,"src":"1008:30:79","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},{"id":14451,"libraryName":{"id":14449,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":21219,"src":"1048:10:79"},"nodeType":"UsingForDirective","src":"1042:29:79","typeName":{"id":14450,"name":"uint256","nodeType":"ElementaryTypeName","src":"1063:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":14454,"libraryName":{"id":14452,"name":"PercentageMath","nodeType":"IdentifierPath","referencedDeclaration":21132,"src":"1080:14:79"},"nodeType":"UsingForDirective","src":"1074:33:79","typeName":{"id":14453,"name":"uint256","nodeType":"ElementaryTypeName","src":"1099:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"anonymous":false,"id":14460,"name":"UserEModeSet","nameLocation":"1151:12:79","nodeType":"EventDefinition","parameters":{"id":14459,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14456,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1180:4:79","nodeType":"VariableDeclaration","scope":14460,"src":"1164:20:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14455,"name":"address","nodeType":"ElementaryTypeName","src":"1164:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14458,"indexed":false,"mutability":"mutable","name":"categoryId","nameLocation":"1192:10:79","nodeType":"VariableDeclaration","scope":14460,"src":"1186:16:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":14457,"name":"uint8","nodeType":"ElementaryTypeName","src":"1186:5:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1163:40:79"},"src":"1145:59:79"},{"body":{"id":14545,"nodeType":"Block","src":"2312:636:79","statements":[{"expression":{"arguments":[{"id":14491,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14466,"src":"2362:12:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":14492,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14470,"src":"2382:12:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":14493,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14475,"src":"2402:15:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"id":14494,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14482,"src":"2425:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"expression":{"id":14495,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14485,"src":"2443:6:79","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr","typeString":"struct DataTypes.ExecuteSetUserEModeParams memory"}},"id":14496,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":21460,"src":"2443:20:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14497,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14485,"src":"2471:6:79","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr","typeString":"struct DataTypes.ExecuteSetUserEModeParams memory"}},"id":14498,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"categoryId","nodeType":"MemberAccess","referencedDeclaration":21464,"src":"2471:17:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":14488,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20908,"src":"2318:15:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$20908_$","typeString":"type(library ValidationLogic)"}},"id":14490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateSetUserEMode","nodeType":"MemberAccess","referencedDeclaration":20787,"src":"2318:36:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_uint256_$_t_uint8_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap memory,uint256,uint8) view"}},"id":14499,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2318:176:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14500,"nodeType":"ExpressionStatement","src":"2318:176:79"},{"assignments":[14502],"declarations":[{"constant":false,"id":14502,"mutability":"mutable","name":"prevCategoryId","nameLocation":"2507:14:79","nodeType":"VariableDeclaration","scope":14545,"src":"2501:20:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":14501,"name":"uint8","nodeType":"ElementaryTypeName","src":"2501:5:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":14507,"initialValue":{"baseExpression":{"id":14503,"name":"usersEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14479,"src":"2524:18:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":14506,"indexExpression":{"expression":{"id":14504,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2543:3:79","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2543:10:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2524:30:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"2501:53:79"},{"expression":{"id":14514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":14508,"name":"usersEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14479,"src":"2560:18:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":14511,"indexExpression":{"expression":{"id":14509,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2579:3:79","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2579:10:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2560:30:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":14512,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14485,"src":"2593:6:79","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr","typeString":"struct DataTypes.ExecuteSetUserEModeParams memory"}},"id":14513,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"categoryId","nodeType":"MemberAccess","referencedDeclaration":21464,"src":"2593:17:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"2560:50:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":14515,"nodeType":"ExpressionStatement","src":"2560:50:79"},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":14518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14516,"name":"prevCategoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14502,"src":"2621:14:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":14517,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2639:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2621:19:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14537,"nodeType":"IfStatement","src":"2617:273:79","trueBody":{"id":14536,"nodeType":"Block","src":"2642:248:79","statements":[{"expression":{"arguments":[{"id":14522,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14466,"src":"2696:12:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":14523,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14470,"src":"2718:12:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":14524,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14475,"src":"2740:15:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"id":14525,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14482,"src":"2765:10:79","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"expression":{"id":14526,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2785:3:79","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2785:10:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14528,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14485,"src":"2805:6:79","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr","typeString":"struct DataTypes.ExecuteSetUserEModeParams memory"}},"id":14529,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"categoryId","nodeType":"MemberAccess","referencedDeclaration":21464,"src":"2805:17:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"expression":{"id":14530,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14485,"src":"2832:6:79","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr","typeString":"struct DataTypes.ExecuteSetUserEModeParams memory"}},"id":14531,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":21460,"src":"2832:20:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14532,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14485,"src":"2862:6:79","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr","typeString":"struct DataTypes.ExecuteSetUserEModeParams memory"}},"id":14533,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"oracle","nodeType":"MemberAccess","referencedDeclaration":21462,"src":"2862:13:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14519,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20908,"src":"2650:15:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$20908_$","typeString":"type(library ValidationLogic)"}},"id":14521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateHealthFactor","nodeType":"MemberAccess","referencedDeclaration":20524,"src":"2650:36:79","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_address_$_t_uint8_$_t_uint256_$_t_address_$returns$_t_uint256_$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap memory,address,uint8,uint256,address) view returns (uint256,bool)"}},"id":14534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2650:233:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"id":14535,"nodeType":"ExpressionStatement","src":"2650:233:79"}]}},{"eventCall":{"arguments":[{"expression":{"id":14539,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2913:3:79","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2913:10:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14541,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14485,"src":"2925:6:79","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr","typeString":"struct DataTypes.ExecuteSetUserEModeParams memory"}},"id":14542,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"categoryId","nodeType":"MemberAccess","referencedDeclaration":21464,"src":"2925:17:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":14538,"name":"UserEModeSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14460,"src":"2900:12:79","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint8_$returns$__$","typeString":"function (address,uint8)"}},"id":14543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2900:43:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14544,"nodeType":"EmitStatement","src":"2895:48:79"}]},"documentation":{"id":14461,"nodeType":"StructuredDocumentation","src":"1208:698:79","text":" @notice Updates the user efficiency mode category\n @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\n @dev Emits the `UserEModeSet` event\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param eModeCategories The configuration of all the efficiency mode categories\n @param usersEModeCategory The state of all users efficiency mode category\n @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n @param params The additional parameters needed to execute the setUserEMode function"},"functionSelector":"5d5dc313","id":14546,"implemented":true,"kind":"function","modifiers":[],"name":"executeSetUserEMode","nameLocation":"1918:19:79","nodeType":"FunctionDefinition","parameters":{"id":14486,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14466,"mutability":"mutable","name":"reservesData","nameLocation":"1993:12:79","nodeType":"VariableDeclaration","scope":14546,"src":"1943:62:79","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":14465,"keyType":{"id":14462,"name":"address","nodeType":"ElementaryTypeName","src":"1951:7:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1943:41:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":14464,"nodeType":"UserDefinedTypeName","pathNode":{"id":14463,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"1962:21:79"},"referencedDeclaration":21315,"src":"1962:21:79","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":14470,"mutability":"mutable","name":"reservesList","nameLocation":"2047:12:79","nodeType":"VariableDeclaration","scope":14546,"src":"2011:48:79","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":14469,"keyType":{"id":14467,"name":"uint256","nodeType":"ElementaryTypeName","src":"2019:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"2011:27:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":14468,"name":"address","nodeType":"ElementaryTypeName","src":"2030:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":14475,"mutability":"mutable","name":"eModeCategories","nameLocation":"2115:15:79","nodeType":"VariableDeclaration","scope":14546,"src":"2065:65:79","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":14474,"keyType":{"id":14471,"name":"uint8","nodeType":"ElementaryTypeName","src":"2073:5:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"2065:41:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":14473,"nodeType":"UserDefinedTypeName","pathNode":{"id":14472,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":21333,"src":"2082:23:79"},"referencedDeclaration":21333,"src":"2082:23:79","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":14479,"mutability":"mutable","name":"usersEModeCategory","nameLocation":"2170:18:79","nodeType":"VariableDeclaration","scope":14546,"src":"2136:52:79","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"},"typeName":{"id":14478,"keyType":{"id":14476,"name":"address","nodeType":"ElementaryTypeName","src":"2144:7:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2136:25:79","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"},"valueType":{"id":14477,"name":"uint8","nodeType":"ElementaryTypeName","src":"2155:5:79","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}},"visibility":"internal"},{"constant":false,"id":14482,"mutability":"mutable","name":"userConfig","nameLocation":"2233:10:79","nodeType":"VariableDeclaration","scope":14546,"src":"2194:49:79","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":14481,"nodeType":"UserDefinedTypeName","pathNode":{"id":14480,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"2194:30:79"},"referencedDeclaration":21322,"src":"2194:30:79","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":14485,"mutability":"mutable","name":"params","nameLocation":"2292:6:79","nodeType":"VariableDeclaration","scope":14546,"src":"2249:49:79","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr","typeString":"struct DataTypes.ExecuteSetUserEModeParams"},"typeName":{"id":14484,"nodeType":"UserDefinedTypeName","pathNode":{"id":14483,"name":"DataTypes.ExecuteSetUserEModeParams","nodeType":"IdentifierPath","referencedDeclaration":21465,"src":"2249:35:79"},"referencedDeclaration":21465,"src":"2249:35:79","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSetUserEModeParams_$21465_storage_ptr","typeString":"struct DataTypes.ExecuteSetUserEModeParams"}},"visibility":"internal"}],"src":"1937:365:79"},"returnParameters":{"id":14487,"nodeType":"ParameterList","parameters":[],"src":"2312:0:79"},"scope":14615,"src":"1909:1039:79","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":14593,"nodeType":"Block","src":"3498:280:79","statements":[{"assignments":[14563],"declarations":[{"constant":false,"id":14563,"mutability":"mutable","name":"eModeAssetPrice","nameLocation":"3512:15:79","nodeType":"VariableDeclaration","scope":14593,"src":"3504:23:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14562,"name":"uint256","nodeType":"ElementaryTypeName","src":"3504:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14565,"initialValue":{"hexValue":"30","id":14564,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3530:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3504:27:79"},{"assignments":[14567],"declarations":[{"constant":false,"id":14567,"mutability":"mutable","name":"eModePriceSource","nameLocation":"3545:16:79","nodeType":"VariableDeclaration","scope":14593,"src":"3537:24:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14566,"name":"address","nodeType":"ElementaryTypeName","src":"3537:7:79","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":14570,"initialValue":{"expression":{"id":14568,"name":"category","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14550,"src":"3564:8:79","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory storage pointer"}},"id":14569,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"priceSource","nodeType":"MemberAccess","referencedDeclaration":21330,"src":"3564:20:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3537:47:79"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":14576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14571,"name":"eModePriceSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14567,"src":"3595:16:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":14574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3623:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":14573,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3615:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14572,"name":"address","nodeType":"ElementaryTypeName","src":"3615:7:79","typeDescriptions":{}}},"id":14575,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3615:10:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3595:30:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14585,"nodeType":"IfStatement","src":"3591:107:79","trueBody":{"id":14584,"nodeType":"Block","src":"3627:71:79","statements":[{"expression":{"id":14582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14577,"name":"eModeAssetPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14563,"src":"3635:15:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":14580,"name":"eModePriceSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14567,"src":"3674:16:79","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14578,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14553,"src":"3653:6:79","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"}},"id":14579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getAssetPrice","nodeType":"MemberAccess","referencedDeclaration":5834,"src":"3653:20:79","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":14581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3653:38:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3635:56:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14583,"nodeType":"ExpressionStatement","src":"3635:56:79"}]}},{"expression":{"components":[{"expression":{"id":14586,"name":"category","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14550,"src":"3712:8:79","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory storage pointer"}},"id":14587,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"ltv","nodeType":"MemberAccess","referencedDeclaration":21324,"src":"3712:12:79","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"expression":{"id":14588,"name":"category","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14550,"src":"3726:8:79","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory storage pointer"}},"id":14589,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":21326,"src":"3726:29:79","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":14590,"name":"eModeAssetPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14563,"src":"3757:15:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14591,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3711:62:79","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint16_$_t_uint16_$_t_uint256_$","typeString":"tuple(uint16,uint16,uint256)"}},"functionReturnParameters":14561,"id":14592,"nodeType":"Return","src":"3704:69:79"}]},"documentation":{"id":14547,"nodeType":"StructuredDocumentation","src":"2952:381:79","text":" @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\n @dev The eMode asset price returned is 0 if no oracle is specified\n @param category The user eMode category\n @param oracle The price oracle\n @return The eMode ltv\n @return The eMode liquidation threshold\n @return The eMode asset price"},"id":14594,"implemented":true,"kind":"function","modifiers":[],"name":"getEModeConfiguration","nameLocation":"3345:21:79","nodeType":"FunctionDefinition","parameters":{"id":14554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14550,"mutability":"mutable","name":"category","nameLocation":"3404:8:79","nodeType":"VariableDeclaration","scope":14594,"src":"3372:40:79","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory"},"typeName":{"id":14549,"nodeType":"UserDefinedTypeName","pathNode":{"id":14548,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":21333,"src":"3372:23:79"},"referencedDeclaration":21333,"src":"3372:23:79","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory"}},"visibility":"internal"},{"constant":false,"id":14553,"mutability":"mutable","name":"oracle","nameLocation":"3437:6:79","nodeType":"VariableDeclaration","scope":14594,"src":"3418:25:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"},"typeName":{"id":14552,"nodeType":"UserDefinedTypeName","pathNode":{"id":14551,"name":"IPriceOracleGetter","nodeType":"IdentifierPath","referencedDeclaration":5835,"src":"3418:18:79"},"referencedDeclaration":5835,"src":"3418:18:79","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"}},"visibility":"internal"}],"src":"3366:81:79"},"returnParameters":{"id":14561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14556,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14594,"src":"3471:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14555,"name":"uint256","nodeType":"ElementaryTypeName","src":"3471:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14558,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14594,"src":"3480:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14557,"name":"uint256","nodeType":"ElementaryTypeName","src":"3480:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14560,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14594,"src":"3489:7:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14559,"name":"uint256","nodeType":"ElementaryTypeName","src":"3489:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3470:27:79"},"scope":14615,"src":"3336:442:79","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":14613,"nodeType":"Block","src":"4256:85:79","statements":[{"expression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":14610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14604,"name":"eModeUserCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14597,"src":"4270:17:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":14605,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4291:1:79","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4270:22:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14607,"name":"eModeAssetCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14599,"src":"4296:18:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":14608,"name":"eModeUserCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14597,"src":"4318:17:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4296:39:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4270:65:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":14611,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4269:67:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":14603,"id":14612,"nodeType":"Return","src":"4262:74:79"}]},"documentation":{"id":14595,"nodeType":"StructuredDocumentation","src":"3782:348:79","text":" @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\n @param eModeUserCategory The user eMode category\n @param eModeAssetCategory The asset eMode category\n @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise"},"id":14614,"implemented":true,"kind":"function","modifiers":[],"name":"isInEModeCategory","nameLocation":"4142:17:79","nodeType":"FunctionDefinition","parameters":{"id":14600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14597,"mutability":"mutable","name":"eModeUserCategory","nameLocation":"4173:17:79","nodeType":"VariableDeclaration","scope":14614,"src":"4165:25:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14596,"name":"uint256","nodeType":"ElementaryTypeName","src":"4165:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14599,"mutability":"mutable","name":"eModeAssetCategory","nameLocation":"4204:18:79","nodeType":"VariableDeclaration","scope":14614,"src":"4196:26:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14598,"name":"uint256","nodeType":"ElementaryTypeName","src":"4196:7:79","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4159:67:79"},"returnParameters":{"id":14603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14602,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14614,"src":"4250:4:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14601,"name":"bool","nodeType":"ElementaryTypeName","src":"4250:4:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4249:6:79"},"scope":14615,"src":"4133:208:79","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":14616,"src":"826:3517:79","usedErrors":[]}],"src":"37:4307:79"},"id":79},"@aave/core-v3/contracts/protocol/libraries/logic/FlashLoanLogic.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/FlashLoanLogic.sol","exportedSymbols":{"BorrowLogic":[13543],"DataTypes":[21633],"Errors":[12642],"FlashLoanLogic":[15250],"GPv2SafeERC20":[118],"IAToken":[3861],"IERC20":[1442],"IFlashLoanReceiver":[3505],"IFlashLoanSimpleReceiver":[3541],"IPoolAddressesProvider":[5069],"PercentageMath":[21132],"ReserveConfiguration":[11857],"ReserveLogic":[18377],"SafeCast":[1966],"UserConfiguration":[12368],"ValidationLogic":[20908],"WadRayMath":[21219]},"id":15251,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":14617,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:80"},{"absolutePath":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":14619,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15251,"sourceUnit":119,"src":"63:87:80","symbolAliases":[{"foreign":{"id":14618,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:13:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"../../../dependencies/openzeppelin/contracts/SafeCast.sol","id":14621,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15251,"sourceUnit":1967,"src":"151:83:80","symbolAliases":[{"foreign":{"id":14620,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"159:8:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../../dependencies/openzeppelin/contracts/IERC20.sol","id":14623,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15251,"sourceUnit":1443,"src":"235:79:80","symbolAliases":[{"foreign":{"id":14622,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"243:6:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IAToken.sol","file":"../../../interfaces/IAToken.sol","id":14625,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15251,"sourceUnit":3862,"src":"315:56:80","symbolAliases":[{"foreign":{"id":14624,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"323:7:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanReceiver.sol","file":"../../../flashloan/interfaces/IFlashLoanReceiver.sol","id":14627,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15251,"sourceUnit":3506,"src":"372:88:80","symbolAliases":[{"foreign":{"id":14626,"name":"IFlashLoanReceiver","nodeType":"Identifier","overloadedDeclarations":[],"src":"380:18:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol","file":"../../../flashloan/interfaces/IFlashLoanSimpleReceiver.sol","id":14629,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15251,"sourceUnit":3542,"src":"461:100:80","symbolAliases":[{"foreign":{"id":14628,"name":"IFlashLoanSimpleReceiver","nodeType":"Identifier","overloadedDeclarations":[],"src":"469:24:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"../../../interfaces/IPoolAddressesProvider.sol","id":14631,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15251,"sourceUnit":5070,"src":"562:86:80","symbolAliases":[{"foreign":{"id":14630,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"570:22:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"../configuration/UserConfiguration.sol","id":14633,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15251,"sourceUnit":12369,"src":"649:73:80","symbolAliases":[{"foreign":{"id":14632,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"657:17:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../configuration/ReserveConfiguration.sol","id":14635,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15251,"sourceUnit":11858,"src":"723:79:80","symbolAliases":[{"foreign":{"id":14634,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"731:20:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol","file":"../helpers/Errors.sol","id":14637,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15251,"sourceUnit":12643,"src":"803:45:80","symbolAliases":[{"foreign":{"id":14636,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"811:6:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol","file":"../math/WadRayMath.sol","id":14639,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15251,"sourceUnit":21220,"src":"849:50:80","symbolAliases":[{"foreign":{"id":14638,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"857:10:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol","file":"../math/PercentageMath.sol","id":14641,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15251,"sourceUnit":21133,"src":"900:58:80","symbolAliases":[{"foreign":{"id":14640,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"908:14:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":14643,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15251,"sourceUnit":21634,"src":"959:49:80","symbolAliases":[{"foreign":{"id":14642,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"967:9:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol","file":"./ValidationLogic.sol","id":14645,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15251,"sourceUnit":20909,"src":"1009:54:80","symbolAliases":[{"foreign":{"id":14644,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"1017:15:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol","file":"./BorrowLogic.sol","id":14647,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15251,"sourceUnit":13544,"src":"1064:46:80","symbolAliases":[{"foreign":{"id":14646,"name":"BorrowLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"1072:11:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol","file":"./ReserveLogic.sol","id":14649,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15251,"sourceUnit":18378,"src":"1111:48:80","symbolAliases":[{"foreign":{"id":14648,"name":"ReserveLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"1119:12:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"FlashLoanLogic","contractDependencies":[],"contractKind":"library","documentation":{"id":14650,"nodeType":"StructuredDocumentation","src":"1161:108:80","text":" @title FlashLoanLogic library\n @author Aave\n @notice Implements the logic for the flash loans"},"fullyImplemented":true,"id":15250,"linearizedBaseContracts":[15250],"name":"FlashLoanLogic","nameLocation":"1278:14:80","nodeType":"ContractDefinition","nodes":[{"id":14654,"libraryName":{"id":14651,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":18377,"src":"1303:12:80"},"nodeType":"UsingForDirective","src":"1297:46:80","typeName":{"id":14653,"nodeType":"UserDefinedTypeName","pathNode":{"id":14652,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"1320:22:80"},"referencedDeclaration":21379,"src":"1320:22:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}}},{"id":14658,"libraryName":{"id":14655,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":18377,"src":"1352:12:80"},"nodeType":"UsingForDirective","src":"1346:45:80","typeName":{"id":14657,"nodeType":"UserDefinedTypeName","pathNode":{"id":14656,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"1369:21:80"},"referencedDeclaration":21315,"src":"1369:21:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},{"id":14662,"libraryName":{"id":14659,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"1400:13:80"},"nodeType":"UsingForDirective","src":"1394:31:80","typeName":{"id":14661,"nodeType":"UserDefinedTypeName","pathNode":{"id":14660,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1418:6:80"},"referencedDeclaration":1442,"src":"1418:6:80","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"id":14666,"libraryName":{"id":14663,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":11857,"src":"1434:20:80"},"nodeType":"UsingForDirective","src":"1428:65:80","typeName":{"id":14665,"nodeType":"UserDefinedTypeName","pathNode":{"id":14664,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"1459:33:80"},"referencedDeclaration":21318,"src":"1459:33:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"id":14669,"libraryName":{"id":14667,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":21219,"src":"1502:10:80"},"nodeType":"UsingForDirective","src":"1496:29:80","typeName":{"id":14668,"name":"uint256","nodeType":"ElementaryTypeName","src":"1517:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":14672,"libraryName":{"id":14670,"name":"PercentageMath","nodeType":"IdentifierPath","referencedDeclaration":21132,"src":"1534:14:80"},"nodeType":"UsingForDirective","src":"1528:33:80","typeName":{"id":14671,"name":"uint256","nodeType":"ElementaryTypeName","src":"1553:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":14675,"libraryName":{"id":14673,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"1570:8:80"},"nodeType":"UsingForDirective","src":"1564:27:80","typeName":{"id":14674,"name":"uint256","nodeType":"ElementaryTypeName","src":"1583:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"anonymous":false,"id":14692,"name":"FlashLoan","nameLocation":"1635:9:80","nodeType":"EventDefinition","parameters":{"id":14691,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14677,"indexed":true,"mutability":"mutable","name":"target","nameLocation":"1666:6:80","nodeType":"VariableDeclaration","scope":14692,"src":"1650:22:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14676,"name":"address","nodeType":"ElementaryTypeName","src":"1650:7:80","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14679,"indexed":false,"mutability":"mutable","name":"initiator","nameLocation":"1686:9:80","nodeType":"VariableDeclaration","scope":14692,"src":"1678:17:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14678,"name":"address","nodeType":"ElementaryTypeName","src":"1678:7:80","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14681,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"1717:5:80","nodeType":"VariableDeclaration","scope":14692,"src":"1701:21:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14680,"name":"address","nodeType":"ElementaryTypeName","src":"1701:7:80","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14683,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1736:6:80","nodeType":"VariableDeclaration","scope":14692,"src":"1728:14:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14682,"name":"uint256","nodeType":"ElementaryTypeName","src":"1728:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14686,"indexed":false,"mutability":"mutable","name":"interestRateMode","nameLocation":"1775:16:80","nodeType":"VariableDeclaration","scope":14692,"src":"1748:43:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"typeName":{"id":14685,"nodeType":"UserDefinedTypeName","pathNode":{"id":14684,"name":"DataTypes.InterestRateMode","nodeType":"IdentifierPath","referencedDeclaration":21337,"src":"1748:26:80"},"referencedDeclaration":21337,"src":"1748:26:80","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"visibility":"internal"},{"constant":false,"id":14688,"indexed":false,"mutability":"mutable","name":"premium","nameLocation":"1805:7:80","nodeType":"VariableDeclaration","scope":14692,"src":"1797:15:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14687,"name":"uint256","nodeType":"ElementaryTypeName","src":"1797:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14690,"indexed":true,"mutability":"mutable","name":"referralCode","nameLocation":"1833:12:80","nodeType":"VariableDeclaration","scope":14692,"src":"1818:27:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":14689,"name":"uint16","nodeType":"ElementaryTypeName","src":"1818:6:80","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"1644:205:80"},"src":"1629:221:80"},{"canonicalName":"FlashLoanLogic.FlashLoanLocalVars","id":14709,"members":[{"constant":false,"id":14695,"mutability":"mutable","name":"receiver","nameLocation":"1987:8:80","nodeType":"VariableDeclaration","scope":14709,"src":"1968:27:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IFlashLoanReceiver_$3505","typeString":"contract IFlashLoanReceiver"},"typeName":{"id":14694,"nodeType":"UserDefinedTypeName","pathNode":{"id":14693,"name":"IFlashLoanReceiver","nodeType":"IdentifierPath","referencedDeclaration":3505,"src":"1968:18:80"},"referencedDeclaration":3505,"src":"1968:18:80","typeDescriptions":{"typeIdentifier":"t_contract$_IFlashLoanReceiver_$3505","typeString":"contract IFlashLoanReceiver"}},"visibility":"internal"},{"constant":false,"id":14697,"mutability":"mutable","name":"i","nameLocation":"2009:1:80","nodeType":"VariableDeclaration","scope":14709,"src":"2001:9:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14696,"name":"uint256","nodeType":"ElementaryTypeName","src":"2001:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14699,"mutability":"mutable","name":"currentAsset","nameLocation":"2024:12:80","nodeType":"VariableDeclaration","scope":14709,"src":"2016:20:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14698,"name":"address","nodeType":"ElementaryTypeName","src":"2016:7:80","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14701,"mutability":"mutable","name":"currentAmount","nameLocation":"2050:13:80","nodeType":"VariableDeclaration","scope":14709,"src":"2042:21:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14700,"name":"uint256","nodeType":"ElementaryTypeName","src":"2042:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14704,"mutability":"mutable","name":"totalPremiums","nameLocation":"2079:13:80","nodeType":"VariableDeclaration","scope":14709,"src":"2069:23:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14702,"name":"uint256","nodeType":"ElementaryTypeName","src":"2069:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14703,"nodeType":"ArrayTypeName","src":"2069:9:80","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":14706,"mutability":"mutable","name":"flashloanPremiumTotal","nameLocation":"2106:21:80","nodeType":"VariableDeclaration","scope":14709,"src":"2098:29:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14705,"name":"uint256","nodeType":"ElementaryTypeName","src":"2098:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14708,"mutability":"mutable","name":"flashloanPremiumToProtocol","nameLocation":"2141:26:80","nodeType":"VariableDeclaration","scope":14709,"src":"2133:34:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14707,"name":"uint256","nodeType":"ElementaryTypeName","src":"2133:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"FlashLoanLocalVars","nameLocation":"1943:18:80","nodeType":"StructDefinition","scope":15250,"src":"1936:236:80","visibility":"public"},{"body":{"id":15028,"nodeType":"Block","src":"3369:3685:80","statements":[{"expression":{"arguments":[{"id":14736,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14715,"src":"3733:12:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"expression":{"id":14737,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"3747:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14738,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assets","nodeType":"MemberAccess","referencedDeclaration":21489,"src":"3747:13:80","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"expression":{"id":14739,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"3762:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14740,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amounts","nodeType":"MemberAccess","referencedDeclaration":21492,"src":"3762:14:80","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"id":14733,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20908,"src":"3699:15:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$20908_$","typeString":"type(library ValidationLogic)"}},"id":14735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateFlashloan","nodeType":"MemberAccess","referencedDeclaration":20276,"src":"3699:33:80","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),address[] memory,uint256[] memory) view"}},"id":14741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3699:78:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14742,"nodeType":"ExpressionStatement","src":"3699:78:80"},{"assignments":[14745],"declarations":[{"constant":false,"id":14745,"mutability":"mutable","name":"vars","nameLocation":"3810:4:80","nodeType":"VariableDeclaration","scope":15028,"src":"3784:30:80","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars"},"typeName":{"id":14744,"nodeType":"UserDefinedTypeName","pathNode":{"id":14743,"name":"FlashLoanLocalVars","nodeType":"IdentifierPath","referencedDeclaration":14709,"src":"3784:18:80"},"referencedDeclaration":14709,"src":"3784:18:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_storage_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars"}},"visibility":"internal"}],"id":14746,"nodeType":"VariableDeclarationStatement","src":"3784:30:80"},{"expression":{"id":14757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14747,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"3821:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14749,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalPremiums","nodeType":"MemberAccess","referencedDeclaration":14704,"src":"3821:18:80","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":14753,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"3856:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14754,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assets","nodeType":"MemberAccess","referencedDeclaration":21489,"src":"3856:13:80","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":14755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3856:20:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14752,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"3842:13:80","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":14750,"name":"uint256","nodeType":"ElementaryTypeName","src":"3846:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14751,"nodeType":"ArrayTypeName","src":"3846:9:80","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":14756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3842:35:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"3821:56:80","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14758,"nodeType":"ExpressionStatement","src":"3821:56:80"},{"expression":{"id":14766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14759,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"3884:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14761,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"receiver","nodeType":"MemberAccess","referencedDeclaration":14695,"src":"3884:13:80","typeDescriptions":{"typeIdentifier":"t_contract$_IFlashLoanReceiver_$3505","typeString":"contract IFlashLoanReceiver"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":14763,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"3919:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14764,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiverAddress","nodeType":"MemberAccess","referencedDeclaration":21486,"src":"3919:22:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14762,"name":"IFlashLoanReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3505,"src":"3900:18:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IFlashLoanReceiver_$3505_$","typeString":"type(contract IFlashLoanReceiver)"}},"id":14765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3900:42:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IFlashLoanReceiver_$3505","typeString":"contract IFlashLoanReceiver"}},"src":"3884:58:80","typeDescriptions":{"typeIdentifier":"t_contract$_IFlashLoanReceiver_$3505","typeString":"contract IFlashLoanReceiver"}},"id":14767,"nodeType":"ExpressionStatement","src":"3884:58:80"},{"expression":{"id":14785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":14768,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"3949:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14770,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"flashloanPremiumTotal","nodeType":"MemberAccess","referencedDeclaration":14706,"src":"3949:26:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14771,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"3977:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14772,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"flashloanPremiumToProtocol","nodeType":"MemberAccess","referencedDeclaration":14708,"src":"3977:31:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14773,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3948:61:80","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"expression":{"id":14774,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"4012:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14775,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isAuthorizedFlashBorrower","nodeType":"MemberAccess","referencedDeclaration":21515,"src":"4012:32:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"components":[{"expression":{"id":14779,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"4069:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14780,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"flashLoanPremiumTotal","nodeType":"MemberAccess","referencedDeclaration":21505,"src":"4069:28:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14781,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"4099:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14782,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"flashLoanPremiumToProtocol","nodeType":"MemberAccess","referencedDeclaration":21503,"src":"4099:33:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14783,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4068:65:80","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":14784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"4012:121:80","trueExpression":{"components":[{"hexValue":"30","id":14776,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4054:1:80","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":14777,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4057:1:80","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":14778,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4053:6:80","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_rational_0_by_1_$","typeString":"tuple(int_const 0,int_const 0)"}},"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"3948:185:80","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14786,"nodeType":"ExpressionStatement","src":"3948:185:80"},{"body":{"id":14858,"nodeType":"Block","src":"4198:433:80","statements":[{"expression":{"id":14811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14803,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"4206:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14805,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentAmount","nodeType":"MemberAccess","referencedDeclaration":14701,"src":"4206:18:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"id":14806,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"4227:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14807,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amounts","nodeType":"MemberAccess","referencedDeclaration":21492,"src":"4227:14:80","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14810,"indexExpression":{"expression":{"id":14808,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"4242:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14809,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":14697,"src":"4242:6:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4227:22:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4206:43:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14812,"nodeType":"ExpressionStatement","src":"4206:43:80"},{"expression":{"id":14839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":14813,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"4257:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14817,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPremiums","nodeType":"MemberAccess","referencedDeclaration":14704,"src":"4257:18:80","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14818,"indexExpression":{"expression":{"id":14815,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"4276:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14816,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":14697,"src":"4276:6:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4257:26:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"id":14830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"baseExpression":{"expression":{"id":14821,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"4313:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14822,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateModes","nodeType":"MemberAccess","referencedDeclaration":21495,"src":"4313:24:80","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14825,"indexExpression":{"expression":{"id":14823,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"4338:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14824,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":14697,"src":"4338:6:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4313:32:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14819,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"4286:9:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":14820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"4286:26:80","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":14826,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4286:60:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":14827,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"4358:9:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":14828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"4358:26:80","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":14829,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"NONE","nodeType":"MemberAccess","referencedDeclaration":21334,"src":"4358:31:80","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"src":"4286:103:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":14837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4468:1:80","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":14838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"4286:183:80","trueExpression":{"arguments":[{"expression":{"id":14834,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"4430:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14835,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"flashloanPremiumTotal","nodeType":"MemberAccess","referencedDeclaration":14706,"src":"4430:26:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":14831,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"4400:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14832,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentAmount","nodeType":"MemberAccess","referencedDeclaration":14701,"src":"4400:18:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":21119,"src":"4400:29:80","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":14836,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4400:57:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4257:212:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14840,"nodeType":"ExpressionStatement","src":"4257:212:80"},{"expression":{"arguments":[{"expression":{"id":14852,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"4566:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14853,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiverAddress","nodeType":"MemberAccess","referencedDeclaration":21486,"src":"4566:22:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14854,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"4598:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14855,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentAmount","nodeType":"MemberAccess","referencedDeclaration":14701,"src":"4598:18:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"baseExpression":{"id":14842,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14715,"src":"4485:12:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":14848,"indexExpression":{"baseExpression":{"expression":{"id":14843,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"4498:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14844,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assets","nodeType":"MemberAccess","referencedDeclaration":21489,"src":"4498:13:80","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":14847,"indexExpression":{"expression":{"id":14845,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"4512:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14846,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":14697,"src":"4512:6:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4498:21:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4485:35:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":14849,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"4485:49:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14841,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3861,"src":"4477:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3861_$","typeString":"type(contract IAToken)"}},"id":14850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4477:58:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":14851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferUnderlyingTo","nodeType":"MemberAccess","referencedDeclaration":3796,"src":"4477:79:80","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":14856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4477:147:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14857,"nodeType":"ExpressionStatement","src":"4477:147:80"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14793,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"4157:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14794,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":14697,"src":"4157:6:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":14795,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"4166:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14796,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assets","nodeType":"MemberAccess","referencedDeclaration":21489,"src":"4166:13:80","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":14797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"4166:20:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4157:29:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14859,"initializationExpression":{"expression":{"id":14791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14787,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"4145:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14789,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":14697,"src":"4145:6:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":14790,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4154:1:80","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4145:10:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14792,"nodeType":"ExpressionStatement","src":"4145:10:80"},"loopExpression":{"expression":{"id":14801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"4188:8:80","subExpression":{"expression":{"id":14799,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"4188:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14800,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":14697,"src":"4188:6:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14802,"nodeType":"ExpressionStatement","src":"4188:8:80"},"nodeType":"ForStatement","src":"4140:491:80"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":14864,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"4692:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14865,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assets","nodeType":"MemberAccess","referencedDeclaration":21489,"src":"4692:13:80","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"expression":{"id":14866,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"4715:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14867,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amounts","nodeType":"MemberAccess","referencedDeclaration":21492,"src":"4715:14:80","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":14868,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"4739:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14869,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPremiums","nodeType":"MemberAccess","referencedDeclaration":14704,"src":"4739:18:80","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":14870,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4767:3:80","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"4767:10:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14872,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"4787:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14873,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"params","nodeType":"MemberAccess","referencedDeclaration":21499,"src":"4787:13:80","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"expression":{"id":14861,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"4652:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14862,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiver","nodeType":"MemberAccess","referencedDeclaration":14695,"src":"4652:13:80","typeDescriptions":{"typeIdentifier":"t_contract$_IFlashLoanReceiver_$3505","typeString":"contract IFlashLoanReceiver"}},"id":14863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeOperation","nodeType":"MemberAccess","referencedDeclaration":3492,"src":"4652:30:80","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address[] memory,uint256[] memory,uint256[] memory,address,bytes memory) external returns (bool)"}},"id":14874,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4652:156:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":14875,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"4816:6:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":14876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_FLASHLOAN_EXECUTOR_RETURN","nodeType":"MemberAccess","referencedDeclaration":12410,"src":"4816:40:80","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":14860,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4637:7:80","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":14877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4637:225:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14878,"nodeType":"ExpressionStatement","src":"4637:225:80"},{"body":{"id":15026,"nodeType":"Block","src":"4927:2123:80","statements":[{"expression":{"id":14903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14895,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"4935:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14897,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentAsset","nodeType":"MemberAccess","referencedDeclaration":14699,"src":"4935:17:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"id":14898,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"4955:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14899,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assets","nodeType":"MemberAccess","referencedDeclaration":21489,"src":"4955:13:80","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":14902,"indexExpression":{"expression":{"id":14900,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"4969:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14901,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":14697,"src":"4969:6:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4955:21:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4935:41:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":14904,"nodeType":"ExpressionStatement","src":"4935:41:80"},{"expression":{"id":14913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14905,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"4984:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14907,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentAmount","nodeType":"MemberAccess","referencedDeclaration":14701,"src":"4984:18:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"id":14908,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"5005:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14909,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amounts","nodeType":"MemberAccess","referencedDeclaration":21492,"src":"5005:14:80","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14912,"indexExpression":{"expression":{"id":14910,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"5020:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14911,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":14697,"src":"5020:6:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5005:22:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4984:43:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14914,"nodeType":"ExpressionStatement","src":"4984:43:80"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"id":14926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"baseExpression":{"expression":{"id":14917,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"5076:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14918,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateModes","nodeType":"MemberAccess","referencedDeclaration":21495,"src":"5076:24:80","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14921,"indexExpression":{"expression":{"id":14919,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"5101:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14920,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":14697,"src":"5101:6:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5076:32:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14915,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"5049:9:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":14916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"5049:26:80","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":14922,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5049:60:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":14923,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"5121:9:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":14924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"5121:26:80","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":14925,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"NONE","nodeType":"MemberAccess","referencedDeclaration":21334,"src":"5121:31:80","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"src":"5049:103:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15024,"nodeType":"Block","src":"5629:1415:80","statements":[{"expression":{"arguments":[{"id":14956,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14715,"src":"5826:12:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":14957,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14719,"src":"5850:12:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":14958,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14724,"src":"5874:15:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"id":14959,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14727,"src":"5901:10:80","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"arguments":[{"expression":{"id":14962,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"5974:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14963,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentAsset","nodeType":"MemberAccess","referencedDeclaration":14699,"src":"5974:17:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14964,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6011:3:80","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"6011:10:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14966,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"6047:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14967,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":21497,"src":"6047:17:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14968,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"6086:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14969,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentAmount","nodeType":"MemberAccess","referencedDeclaration":14701,"src":"6086:18:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"baseExpression":{"expression":{"id":14972,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"6163:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14973,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateModes","nodeType":"MemberAccess","referencedDeclaration":21495,"src":"6163:24:80","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14976,"indexExpression":{"expression":{"id":14974,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"6188:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14975,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":14697,"src":"6188:6:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6163:32:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14970,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"6136:9:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":14971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"6136:26:80","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":14977,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6136:60:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},{"expression":{"id":14978,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"6224:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14979,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"referralCode","nodeType":"MemberAccess","referencedDeclaration":21501,"src":"6224:19:80","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"hexValue":"66616c7365","id":14980,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6276:5:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"expression":{"id":14981,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"6327:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14982,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"maxStableRateBorrowSizePercent","nodeType":"MemberAccess","referencedDeclaration":21507,"src":"6327:37:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14983,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"6393:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14984,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":21509,"src":"6393:20:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":14986,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"6458:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14987,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"addressesProvider","nodeType":"MemberAccess","referencedDeclaration":21511,"src":"6458:24:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14985,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5069,"src":"6435:22:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPoolAddressesProvider_$5069_$","typeString":"type(contract IPoolAddressesProvider)"}},"id":14988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6435:48:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":14989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriceOracle","nodeType":"MemberAccess","referencedDeclaration":5014,"src":"6435:63:80","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":14990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6435:65:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14991,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"6533:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14992,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":21513,"src":"6533:24:80","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":14994,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"6615:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14995,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"addressesProvider","nodeType":"MemberAccess","referencedDeclaration":21511,"src":"6615:24:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14993,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5069,"src":"6592:22:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPoolAddressesProvider_$5069_$","typeString":"type(contract IPoolAddressesProvider)"}},"id":14996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6592:48:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":14997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriceOracleSentinel","nodeType":"MemberAccess","referencedDeclaration":5050,"src":"6592:86:80","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":14998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6592:88:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14960,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"5923:9:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":14961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ExecuteBorrowParams","nodeType":"MemberAccess","referencedDeclaration":21433,"src":"5923:29:80","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExecuteBorrowParams_$21433_storage_ptr_$","typeString":"type(struct DataTypes.ExecuteBorrowParams storage pointer)"}},"id":14999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","user","onBehalfOf","amount","interestRateMode","referralCode","releaseUnderlying","maxStableRateBorrowSizePercent","reservesCount","oracle","userEModeCategory","priceOracleSentinel"],"nodeType":"FunctionCall","src":"5923:770:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}],"expression":{"id":14953,"name":"BorrowLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13543,"src":"5789:11:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BorrowLogic_$13543_$","typeString":"type(library BorrowLogic)"}},"id":14955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeBorrow","nodeType":"MemberAccess","referencedDeclaration":13039,"src":"5789:25:80","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_struct$_ExecuteBorrowParams_$21433_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ExecuteBorrowParams memory)"}},"id":15000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5789:914:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15001,"nodeType":"ExpressionStatement","src":"5789:914:80"},{"eventCall":{"arguments":[{"expression":{"id":15003,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"6806:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":15004,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiverAddress","nodeType":"MemberAccess","referencedDeclaration":21486,"src":"6806:22:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15005,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6840:3:80","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"6840:10:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15007,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"6862:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":15008,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentAsset","nodeType":"MemberAccess","referencedDeclaration":14699,"src":"6862:17:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15009,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"6891:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":15010,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentAmount","nodeType":"MemberAccess","referencedDeclaration":14701,"src":"6891:18:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"baseExpression":{"expression":{"id":15013,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"6948:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":15014,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateModes","nodeType":"MemberAccess","referencedDeclaration":21495,"src":"6948:24:80","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15017,"indexExpression":{"expression":{"id":15015,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"6973:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":15016,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":14697,"src":"6973:6:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6948:32:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15011,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"6921:9:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":15012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"6921:26:80","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":15018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6921:60:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},{"hexValue":"30","id":15019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6993:1:80","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"id":15020,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"7006:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":15021,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"referralCode","nodeType":"MemberAccess","referencedDeclaration":21501,"src":"7006:19:80","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"id":15002,"name":"FlashLoan","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14692,"src":"6785:9:80","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_enum$_InterestRateMode_$21337_$_t_uint256_$_t_uint16_$returns$__$","typeString":"function (address,address,address,uint256,enum DataTypes.InterestRateMode,uint256,uint16)"}},"id":15022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6785:250:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15023,"nodeType":"EmitStatement","src":"6780:255:80"}]},"id":15025,"nodeType":"IfStatement","src":"5036:2008:80","trueBody":{"id":14952,"nodeType":"Block","src":"5161:462:80","statements":[{"expression":{"arguments":[{"baseExpression":{"id":14928,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14715,"src":"5208:12:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":14931,"indexExpression":{"expression":{"id":14929,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"5221:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14930,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentAsset","nodeType":"MemberAccess","referencedDeclaration":14699,"src":"5221:17:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5208:31:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},{"arguments":[{"expression":{"id":14934,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"5307:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14935,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentAsset","nodeType":"MemberAccess","referencedDeclaration":14699,"src":"5307:17:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14936,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"5355:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14937,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiverAddress","nodeType":"MemberAccess","referencedDeclaration":21486,"src":"5355:22:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14938,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"5399:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14939,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentAmount","nodeType":"MemberAccess","referencedDeclaration":14701,"src":"5399:18:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":14940,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"5445:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14941,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPremiums","nodeType":"MemberAccess","referencedDeclaration":14704,"src":"5445:18:80","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14944,"indexExpression":{"expression":{"id":14942,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"5464:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14943,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":14697,"src":"5464:6:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5445:26:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14945,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"5513:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14946,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"flashloanPremiumToProtocol","nodeType":"MemberAccess","referencedDeclaration":14708,"src":"5513:31:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14947,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"5572:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14948,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"referralCode","nodeType":"MemberAccess","referencedDeclaration":21501,"src":"5572:19:80","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":14932,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"5251:9:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":14933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FlashLoanRepaymentParams","nodeType":"MemberAccess","referencedDeclaration":21544,"src":"5251:34:80","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_FlashLoanRepaymentParams_$21544_storage_ptr_$","typeString":"type(struct DataTypes.FlashLoanRepaymentParams storage pointer)"}},"id":14949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","receiverAddress","amount","totalPremium","flashLoanPremiumToProtocol","referralCode"],"nodeType":"FunctionCall","src":"5251:353:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$21544_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"},{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$21544_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}],"id":14927,"name":"_handleFlashLoanRepayment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15249,"src":"5171:25:80","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_FlashLoanRepaymentParams_$21544_memory_ptr_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.FlashLoanRepaymentParams memory)"}},"id":14950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5171:443:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14951,"nodeType":"ExpressionStatement","src":"5171:443:80"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":14885,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"4886:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14886,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":14697,"src":"4886:6:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":14887,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14730,"src":"4895:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"id":14888,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assets","nodeType":"MemberAccess","referencedDeclaration":21489,"src":"4895:13:80","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":14889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"4895:20:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4886:29:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15027,"initializationExpression":{"expression":{"id":14883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14879,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"4874:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14881,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":14697,"src":"4874:6:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":14882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4883:1:80","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4874:10:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14884,"nodeType":"ExpressionStatement","src":"4874:10:80"},"loopExpression":{"expression":{"id":14893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"4917:8:80","subExpression":{"expression":{"id":14891,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14745,"src":"4917:4:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanLocalVars_$14709_memory_ptr","typeString":"struct FlashLoanLogic.FlashLoanLocalVars memory"}},"id":14892,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":14697,"src":"4917:6:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14894,"nodeType":"ExpressionStatement","src":"4917:8:80"},"nodeType":"ForStatement","src":"4869:2181:80"}]},"documentation":{"id":14710,"nodeType":"StructuredDocumentation","src":"2176:858:80","text":" @notice Implements the flashloan feature that allow users to access liquidity of the pool for one transaction\n as long as the amount taken plus fee is returned or debt is opened.\n @dev For authorized flashborrowers the fee is waived\n @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\n if the receiver have not approved the pool the transaction will revert.\n @dev Emits the `FlashLoan()` event\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param eModeCategories The configuration of all the efficiency mode categories\n @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n @param params The additional parameters needed to execute the flashloan function"},"functionSelector":"2e7263ea","id":15029,"implemented":true,"kind":"function","modifiers":[],"name":"executeFlashLoan","nameLocation":"3046:16:80","nodeType":"FunctionDefinition","parameters":{"id":14731,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14715,"mutability":"mutable","name":"reservesData","nameLocation":"3118:12:80","nodeType":"VariableDeclaration","scope":15029,"src":"3068:62:80","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":14714,"keyType":{"id":14711,"name":"address","nodeType":"ElementaryTypeName","src":"3076:7:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3068:41:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":14713,"nodeType":"UserDefinedTypeName","pathNode":{"id":14712,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"3087:21:80"},"referencedDeclaration":21315,"src":"3087:21:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":14719,"mutability":"mutable","name":"reservesList","nameLocation":"3172:12:80","nodeType":"VariableDeclaration","scope":15029,"src":"3136:48:80","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":14718,"keyType":{"id":14716,"name":"uint256","nodeType":"ElementaryTypeName","src":"3144:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"3136:27:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":14717,"name":"address","nodeType":"ElementaryTypeName","src":"3155:7:80","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":14724,"mutability":"mutable","name":"eModeCategories","nameLocation":"3240:15:80","nodeType":"VariableDeclaration","scope":15029,"src":"3190:65:80","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":14723,"keyType":{"id":14720,"name":"uint8","nodeType":"ElementaryTypeName","src":"3198:5:80","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"3190:41:80","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":14722,"nodeType":"UserDefinedTypeName","pathNode":{"id":14721,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":21333,"src":"3207:23:80"},"referencedDeclaration":21333,"src":"3207:23:80","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":14727,"mutability":"mutable","name":"userConfig","nameLocation":"3300:10:80","nodeType":"VariableDeclaration","scope":15029,"src":"3261:49:80","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":14726,"nodeType":"UserDefinedTypeName","pathNode":{"id":14725,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"3261:30:80"},"referencedDeclaration":21322,"src":"3261:30:80","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":14730,"mutability":"mutable","name":"params","nameLocation":"3349:6:80","nodeType":"VariableDeclaration","scope":15029,"src":"3316:39:80","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams"},"typeName":{"id":14729,"nodeType":"UserDefinedTypeName","pathNode":{"id":14728,"name":"DataTypes.FlashloanParams","nodeType":"IdentifierPath","referencedDeclaration":21516,"src":"3316:25:80"},"referencedDeclaration":21516,"src":"3316:25:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_storage_ptr","typeString":"struct DataTypes.FlashloanParams"}},"visibility":"internal"}],"src":"3062:297:80"},"returnParameters":{"id":14732,"nodeType":"ParameterList","parameters":[],"src":"3369:0:80"},"scope":15250,"src":"3037:4017:80","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":15108,"nodeType":"Block","src":"7870:1236:80","statements":[{"expression":{"arguments":[{"id":15042,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15033,"src":"8240:7:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}],"expression":{"id":15039,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20908,"src":"8200:15:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$20908_$","typeString":"type(library ValidationLogic)"}},"id":15041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateFlashloanSimple","nodeType":"MemberAccess","referencedDeclaration":20317,"src":"8200:39:80","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$21315_storage_ptr_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer) view"}},"id":15043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8200:48:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15044,"nodeType":"ExpressionStatement","src":"8200:48:80"},{"assignments":[15047],"declarations":[{"constant":false,"id":15047,"mutability":"mutable","name":"receiver","nameLocation":"8280:8:80","nodeType":"VariableDeclaration","scope":15108,"src":"8255:33:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IFlashLoanSimpleReceiver_$3541","typeString":"contract IFlashLoanSimpleReceiver"},"typeName":{"id":15046,"nodeType":"UserDefinedTypeName","pathNode":{"id":15045,"name":"IFlashLoanSimpleReceiver","nodeType":"IdentifierPath","referencedDeclaration":3541,"src":"8255:24:80"},"referencedDeclaration":3541,"src":"8255:24:80","typeDescriptions":{"typeIdentifier":"t_contract$_IFlashLoanSimpleReceiver_$3541","typeString":"contract IFlashLoanSimpleReceiver"}},"visibility":"internal"}],"id":15052,"initialValue":{"arguments":[{"expression":{"id":15049,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15036,"src":"8316:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$21531_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":15050,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiverAddress","nodeType":"MemberAccess","referencedDeclaration":21518,"src":"8316:22:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15048,"name":"IFlashLoanSimpleReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3541,"src":"8291:24:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IFlashLoanSimpleReceiver_$3541_$","typeString":"type(contract IFlashLoanSimpleReceiver)"}},"id":15051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8291:48:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IFlashLoanSimpleReceiver_$3541","typeString":"contract IFlashLoanSimpleReceiver"}},"nodeType":"VariableDeclarationStatement","src":"8255:84:80"},{"assignments":[15054],"declarations":[{"constant":false,"id":15054,"mutability":"mutable","name":"totalPremium","nameLocation":"8353:12:80","nodeType":"VariableDeclaration","scope":15108,"src":"8345:20:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15053,"name":"uint256","nodeType":"ElementaryTypeName","src":"8345:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15061,"initialValue":{"arguments":[{"expression":{"id":15058,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15036,"src":"8393:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$21531_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":15059,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"flashLoanPremiumTotal","nodeType":"MemberAccess","referencedDeclaration":21530,"src":"8393:28:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":15055,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15036,"src":"8368:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$21531_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":15056,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21522,"src":"8368:13:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":21119,"src":"8368:24:80","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":15060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8368:54:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8345:77:80"},{"expression":{"arguments":[{"expression":{"id":15067,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15036,"src":"8480:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$21531_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":15068,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiverAddress","nodeType":"MemberAccess","referencedDeclaration":21518,"src":"8480:22:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15069,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15036,"src":"8504:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$21531_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":15070,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21522,"src":"8504:13:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":15063,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15033,"src":"8436:7:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15064,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"8436:21:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15062,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3861,"src":"8428:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3861_$","typeString":"type(contract IAToken)"}},"id":15065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8428:30:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":15066,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferUnderlyingTo","nodeType":"MemberAccess","referencedDeclaration":3796,"src":"8428:51:80","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":15071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8428:90:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15072,"nodeType":"ExpressionStatement","src":"8428:90:80"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":15076,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15036,"src":"8575:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$21531_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":15077,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21520,"src":"8575:12:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15078,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15036,"src":"8597:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$21531_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":15079,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21522,"src":"8597:13:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15080,"name":"totalPremium","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15054,"src":"8620:12:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15081,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8642:3:80","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"8642:10:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15083,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15036,"src":"8662:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$21531_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":15084,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"params","nodeType":"MemberAccess","referencedDeclaration":21524,"src":"8662:13:80","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":15074,"name":"receiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15047,"src":"8540:8:80","typeDescriptions":{"typeIdentifier":"t_contract$_IFlashLoanSimpleReceiver_$3541","typeString":"contract IFlashLoanSimpleReceiver"}},"id":15075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeOperation","nodeType":"MemberAccess","referencedDeclaration":3528,"src":"8540:25:80","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,uint256,uint256,address,bytes memory) external returns (bool)"}},"id":15085,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8540:143:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":15086,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"8691:6:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":15087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_FLASHLOAN_EXECUTOR_RETURN","nodeType":"MemberAccess","referencedDeclaration":12410,"src":"8691:40:80","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":15073,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8525:7:80","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":15088,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8525:212:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15089,"nodeType":"ExpressionStatement","src":"8525:212:80"},{"expression":{"arguments":[{"id":15091,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15033,"src":"8777:7:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"arguments":[{"expression":{"id":15094,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15036,"src":"8844:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$21531_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":15095,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21520,"src":"8844:12:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15096,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15036,"src":"8883:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$21531_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":15097,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiverAddress","nodeType":"MemberAccess","referencedDeclaration":21518,"src":"8883:22:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15098,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15036,"src":"8923:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$21531_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":15099,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21522,"src":"8923:13:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15100,"name":"totalPremium","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15054,"src":"8960:12:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15101,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15036,"src":"9010:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$21531_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":15102,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"flashLoanPremiumToProtocol","nodeType":"MemberAccess","referencedDeclaration":21528,"src":"9010:33:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15103,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15036,"src":"9067:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$21531_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"id":15104,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"referralCode","nodeType":"MemberAccess","referencedDeclaration":21526,"src":"9067:19:80","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":15092,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"8792:9:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":15093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FlashLoanRepaymentParams","nodeType":"MemberAccess","referencedDeclaration":21544,"src":"8792:34:80","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_FlashLoanRepaymentParams_$21544_storage_ptr_$","typeString":"type(struct DataTypes.FlashLoanRepaymentParams storage pointer)"}},"id":15105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","receiverAddress","amount","totalPremium","flashLoanPremiumToProtocol","referralCode"],"nodeType":"FunctionCall","src":"8792:303:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$21544_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$21544_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}],"id":15090,"name":"_handleFlashLoanRepayment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15249,"src":"8744:25:80","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_FlashLoanRepaymentParams_$21544_memory_ptr_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.FlashLoanRepaymentParams memory)"}},"id":15106,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8744:357:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15107,"nodeType":"ExpressionStatement","src":"8744:357:80"}]},"documentation":{"id":15030,"nodeType":"StructuredDocumentation","src":"7058:670:80","text":" @notice Implements the simple flashloan feature that allow users to access liquidity of ONE reserve for one\n transaction as long as the amount taken plus fee is returned.\n @dev Does not waive fee for approved flashborrowers nor allow taking on debt instead of repaying to save gas\n @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\n if the receiver have not approved the pool the transaction will revert.\n @dev Emits the `FlashLoan()` event\n @param reserve The state of the flashloaned reserve\n @param params The additional parameters needed to execute the simple flashloan function"},"functionSelector":"a1fe0e8d","id":15109,"implemented":true,"kind":"function","modifiers":[],"name":"executeFlashLoanSimple","nameLocation":"7740:22:80","nodeType":"FunctionDefinition","parameters":{"id":15037,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15033,"mutability":"mutable","name":"reserve","nameLocation":"7798:7:80","nodeType":"VariableDeclaration","scope":15109,"src":"7768:37:80","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":15032,"nodeType":"UserDefinedTypeName","pathNode":{"id":15031,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"7768:21:80"},"referencedDeclaration":21315,"src":"7768:21:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":15036,"mutability":"mutable","name":"params","nameLocation":"7850:6:80","nodeType":"VariableDeclaration","scope":15109,"src":"7811:45:80","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$21531_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams"},"typeName":{"id":15035,"nodeType":"UserDefinedTypeName","pathNode":{"id":15034,"name":"DataTypes.FlashloanSimpleParams","nodeType":"IdentifierPath","referencedDeclaration":21531,"src":"7811:31:80"},"referencedDeclaration":21531,"src":"7811:31:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$21531_storage_ptr","typeString":"struct DataTypes.FlashloanSimpleParams"}},"visibility":"internal"}],"src":"7762:98:80"},"returnParameters":{"id":15038,"nodeType":"ParameterList","parameters":[],"src":"7870:0:80"},"scope":15250,"src":"7731:1375:80","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":15248,"nodeType":"Block","src":"9560:1282:80","statements":[{"assignments":[15120],"declarations":[{"constant":false,"id":15120,"mutability":"mutable","name":"premiumToProtocol","nameLocation":"9574:17:80","nodeType":"VariableDeclaration","scope":15248,"src":"9566:25:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15119,"name":"uint256","nodeType":"ElementaryTypeName","src":"9566:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15127,"initialValue":{"arguments":[{"expression":{"id":15124,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15116,"src":"9625:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$21544_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":15125,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"flashLoanPremiumToProtocol","nodeType":"MemberAccess","referencedDeclaration":21537,"src":"9625:33:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":15121,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15116,"src":"9594:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$21544_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":15122,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPremium","nodeType":"MemberAccess","referencedDeclaration":21535,"src":"9594:19:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":21119,"src":"9594:30:80","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":15126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9594:65:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9566:93:80"},{"assignments":[15129],"declarations":[{"constant":false,"id":15129,"mutability":"mutable","name":"premiumToLP","nameLocation":"9673:11:80","nodeType":"VariableDeclaration","scope":15248,"src":"9665:19:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15128,"name":"uint256","nodeType":"ElementaryTypeName","src":"9665:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15134,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15130,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15116,"src":"9687:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$21544_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":15131,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPremium","nodeType":"MemberAccess","referencedDeclaration":21535,"src":"9687:19:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":15132,"name":"premiumToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15120,"src":"9709:17:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9687:39:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9665:61:80"},{"assignments":[15136],"declarations":[{"constant":false,"id":15136,"mutability":"mutable","name":"amountPlusPremium","nameLocation":"9740:17:80","nodeType":"VariableDeclaration","scope":15248,"src":"9732:25:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15135,"name":"uint256","nodeType":"ElementaryTypeName","src":"9732:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15142,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15137,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15116,"src":"9760:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$21544_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":15138,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21533,"src":"9760:13:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":15139,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15116,"src":"9776:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$21544_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":15140,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPremium","nodeType":"MemberAccess","referencedDeclaration":21535,"src":"9776:19:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9760:35:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9732:63:80"},{"assignments":[15147],"declarations":[{"constant":false,"id":15147,"mutability":"mutable","name":"reserveCache","nameLocation":"9832:12:80","nodeType":"VariableDeclaration","scope":15248,"src":"9802:42:80","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":15146,"nodeType":"UserDefinedTypeName","pathNode":{"id":15145,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"9802:22:80"},"referencedDeclaration":21379,"src":"9802:22:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"id":15151,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15148,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15113,"src":"9847:7:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15149,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cache","nodeType":"MemberAccess","referencedDeclaration":18376,"src":"9847:13:80","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$21315_storage_ptr_$returns$_t_struct$_ReserveCache_$21379_memory_ptr_$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (struct DataTypes.ReserveCache memory)"}},"id":15150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9847:15:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"nodeType":"VariableDeclarationStatement","src":"9802:60:80"},{"expression":{"arguments":[{"id":15155,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15147,"src":"9888:12:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":15152,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15113,"src":"9868:7:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15154,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":17793,"src":"9868:19:80","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$returns$__$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":15156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9868:33:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15157,"nodeType":"ExpressionStatement","src":"9868:33:80"},{"expression":{"id":15181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15158,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15147,"src":"9907:12:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15160,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21355,"src":"9907:31:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":15164,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15147,"src":"9988:12:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15165,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"9988:26:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15163,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"9981:6:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":15166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9981:34:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":15167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"9981:46:80","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":15168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9981:48:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"expression":{"id":15175,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15147,"src":"10082:12:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15176,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21355,"src":"10082:31:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":15171,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15113,"src":"10048:7:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15172,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"accruedToTreasury","nodeType":"MemberAccess","referencedDeclaration":21310,"src":"10048:25:80","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":15170,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10040:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":15169,"name":"uint256","nodeType":"ElementaryTypeName","src":"10040:7:80","typeDescriptions":{}}},"id":15173,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10040:34:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"10040:41:80","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":15177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10040:74:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9981:133:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15179,"name":"premiumToLP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15129,"src":"10122:11:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15161,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15113,"src":"9941:7:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15162,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cumulateToLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":17836,"src":"9941:32:80","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,uint256,uint256) returns (uint256)"}},"id":15180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9941:198:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9907:232:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15182,"nodeType":"ExpressionStatement","src":"9907:232:80"},{"expression":{"id":15193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15183,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15113,"src":"10146:7:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15185,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"accruedToTreasury","nodeType":"MemberAccess","referencedDeclaration":21310,"src":"10146:25:80","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":15188,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15147,"src":"10207:12:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15189,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21355,"src":"10207:31:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15186,"name":"premiumToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15120,"src":"10175:17:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":21198,"src":"10175:31:80","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":15190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10175:64:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"10175:81:80","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":15192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10175:83:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"10146:112:80","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":15194,"nodeType":"ExpressionStatement","src":"10146:112:80"},{"expression":{"arguments":[{"id":15198,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15147,"src":"10293:12:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"expression":{"id":15199,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15116,"src":"10307:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$21544_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":15200,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21539,"src":"10307:12:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15201,"name":"amountPlusPremium","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15136,"src":"10321:17:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":15202,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10340:1:80","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":15195,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15113,"src":"10265:7:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15197,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateInterestRates","nodeType":"MemberAccess","referencedDeclaration":18024,"src":"10265:27:80","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,uint256,uint256)"}},"id":15203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10265:77:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15204,"nodeType":"ExpressionStatement","src":"10265:77:80"},{"expression":{"arguments":[{"expression":{"id":15210,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15116,"src":"10394:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$21544_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":15211,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiverAddress","nodeType":"MemberAccess","referencedDeclaration":21541,"src":"10394:22:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15212,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15147,"src":"10424:12:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15213,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"10424:26:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15214,"name":"amountPlusPremium","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15136,"src":"10458:17:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":15206,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15116,"src":"10356:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$21544_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":15207,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21539,"src":"10356:12:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15205,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"10349:6:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":15208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10349:20:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":15209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":106,"src":"10349:37:80","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":15215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10349:132:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15216,"nodeType":"ExpressionStatement","src":"10349:132:80"},{"expression":{"arguments":[{"expression":{"id":15222,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15116,"src":"10547:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$21544_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":15223,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiverAddress","nodeType":"MemberAccess","referencedDeclaration":21541,"src":"10547:22:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15224,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15116,"src":"10577:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$21544_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":15225,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiverAddress","nodeType":"MemberAccess","referencedDeclaration":21541,"src":"10577:22:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15226,"name":"amountPlusPremium","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15136,"src":"10607:17:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":15218,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15147,"src":"10496:12:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15219,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"10496:26:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15217,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3861,"src":"10488:7:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3861_$","typeString":"type(contract IAToken)"}},"id":15220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10488:35:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":15221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"handleRepayment","nodeType":"MemberAccess","referencedDeclaration":3806,"src":"10488:51:80","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":15227,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10488:142:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15228,"nodeType":"ExpressionStatement","src":"10488:142:80"},{"eventCall":{"arguments":[{"expression":{"id":15230,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15116,"src":"10659:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$21544_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":15231,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiverAddress","nodeType":"MemberAccess","referencedDeclaration":21541,"src":"10659:22:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15232,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10689:3:80","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"10689:10:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15234,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15116,"src":"10707:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$21544_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":15235,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21539,"src":"10707:12:80","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15236,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15116,"src":"10727:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$21544_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":15237,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21533,"src":"10727:13:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"30","id":15240,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10775:1:80","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":15238,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"10748:9:80","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":15239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"10748:26:80","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":15241,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10748:29:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},{"expression":{"id":15242,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15116,"src":"10785:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$21544_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":15243,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalPremium","nodeType":"MemberAccess","referencedDeclaration":21535,"src":"10785:19:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15244,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15116,"src":"10812:6:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$21544_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams memory"}},"id":15245,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"referralCode","nodeType":"MemberAccess","referencedDeclaration":21543,"src":"10812:19:80","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"id":15229,"name":"FlashLoan","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14692,"src":"10642:9:80","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_enum$_InterestRateMode_$21337_$_t_uint256_$_t_uint16_$returns$__$","typeString":"function (address,address,address,uint256,enum DataTypes.InterestRateMode,uint256,uint16)"}},"id":15246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10642:195:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15247,"nodeType":"EmitStatement","src":"10637:200:80"}]},"documentation":{"id":15110,"nodeType":"StructuredDocumentation","src":"9110:302:80","text":" @notice Handles repayment of flashloaned assets + premium\n @dev Will pull the amount + premium from the receiver, so must have approved pool\n @param reserve The state of the flashloaned reserve\n @param params The additional parameters needed to execute the repayment function"},"id":15249,"implemented":true,"kind":"function","modifiers":[],"name":"_handleFlashLoanRepayment","nameLocation":"9424:25:80","nodeType":"FunctionDefinition","parameters":{"id":15117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15113,"mutability":"mutable","name":"reserve","nameLocation":"9485:7:80","nodeType":"VariableDeclaration","scope":15249,"src":"9455:37:80","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":15112,"nodeType":"UserDefinedTypeName","pathNode":{"id":15111,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"9455:21:80"},"referencedDeclaration":21315,"src":"9455:21:80","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":15116,"mutability":"mutable","name":"params","nameLocation":"9540:6:80","nodeType":"VariableDeclaration","scope":15249,"src":"9498:48:80","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$21544_memory_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams"},"typeName":{"id":15115,"nodeType":"UserDefinedTypeName","pathNode":{"id":15114,"name":"DataTypes.FlashLoanRepaymentParams","nodeType":"IdentifierPath","referencedDeclaration":21544,"src":"9498:34:80"},"referencedDeclaration":21544,"src":"9498:34:80","typeDescriptions":{"typeIdentifier":"t_struct$_FlashLoanRepaymentParams_$21544_storage_ptr","typeString":"struct DataTypes.FlashLoanRepaymentParams"}},"visibility":"internal"}],"src":"9449:101:80"},"returnParameters":{"id":15118,"nodeType":"ParameterList","parameters":[],"src":"9560:0:80"},"scope":15250,"src":"9415:1427:80","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":15251,"src":"1270:9574:80","usedErrors":[]}],"src":"37:10808:80"},"id":80},"@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol","exportedSymbols":{"DataTypes":[21633],"EModeLogic":[14615],"GenericLogic":[15855],"IERC20":[1442],"IPriceOracleGetter":[5835],"IScaledBalanceToken":[5975],"PercentageMath":[21132],"ReserveConfiguration":[11857],"ReserveLogic":[18377],"UserConfiguration":[12368],"WadRayMath":[21219]},"id":15856,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":15252,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:81"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../../dependencies/openzeppelin/contracts/IERC20.sol","id":15254,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15856,"sourceUnit":1443,"src":"63:79:81","symbolAliases":[{"foreign":{"id":15253,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:6:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol","file":"../../../interfaces/IScaledBalanceToken.sol","id":15256,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15856,"sourceUnit":5976,"src":"143:80:81","symbolAliases":[{"foreign":{"id":15255,"name":"IScaledBalanceToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"151:19:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol","file":"../../../interfaces/IPriceOracleGetter.sol","id":15258,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15856,"sourceUnit":5836,"src":"224:78:81","symbolAliases":[{"foreign":{"id":15257,"name":"IPriceOracleGetter","nodeType":"Identifier","overloadedDeclarations":[],"src":"232:18:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../configuration/ReserveConfiguration.sol","id":15260,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15856,"sourceUnit":11858,"src":"303:79:81","symbolAliases":[{"foreign":{"id":15259,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"311:20:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"../configuration/UserConfiguration.sol","id":15262,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15856,"sourceUnit":12369,"src":"383:73:81","symbolAliases":[{"foreign":{"id":15261,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"391:17:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol","file":"../math/PercentageMath.sol","id":15264,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15856,"sourceUnit":21133,"src":"457:58:81","symbolAliases":[{"foreign":{"id":15263,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"465:14:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol","file":"../math/WadRayMath.sol","id":15266,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15856,"sourceUnit":21220,"src":"516:50:81","symbolAliases":[{"foreign":{"id":15265,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"524:10:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":15268,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15856,"sourceUnit":21634,"src":"567:49:81","symbolAliases":[{"foreign":{"id":15267,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"575:9:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol","file":"./ReserveLogic.sol","id":15270,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15856,"sourceUnit":18378,"src":"617:48:81","symbolAliases":[{"foreign":{"id":15269,"name":"ReserveLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"625:12:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol","file":"./EModeLogic.sol","id":15272,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15856,"sourceUnit":14616,"src":"666:44:81","symbolAliases":[{"foreign":{"id":15271,"name":"EModeLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"674:10:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"GenericLogic","contractDependencies":[],"contractKind":"library","documentation":{"id":15273,"nodeType":"StructuredDocumentation","src":"712:143:81","text":" @title GenericLogic library\n @author Aave\n @notice Implements protocol-level logic to calculate and validate the state of a user"},"fullyImplemented":true,"id":15855,"linearizedBaseContracts":[15855],"name":"GenericLogic","nameLocation":"864:12:81","nodeType":"ContractDefinition","nodes":[{"id":15277,"libraryName":{"id":15274,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":18377,"src":"887:12:81"},"nodeType":"UsingForDirective","src":"881:45:81","typeName":{"id":15276,"nodeType":"UserDefinedTypeName","pathNode":{"id":15275,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"904:21:81"},"referencedDeclaration":21315,"src":"904:21:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},{"id":15280,"libraryName":{"id":15278,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":21219,"src":"935:10:81"},"nodeType":"UsingForDirective","src":"929:29:81","typeName":{"id":15279,"name":"uint256","nodeType":"ElementaryTypeName","src":"950:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":15283,"libraryName":{"id":15281,"name":"PercentageMath","nodeType":"IdentifierPath","referencedDeclaration":21132,"src":"967:14:81"},"nodeType":"UsingForDirective","src":"961:33:81","typeName":{"id":15282,"name":"uint256","nodeType":"ElementaryTypeName","src":"986:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":15287,"libraryName":{"id":15284,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":11857,"src":"1003:20:81"},"nodeType":"UsingForDirective","src":"997:65:81","typeName":{"id":15286,"nodeType":"UserDefinedTypeName","pathNode":{"id":15285,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"1028:33:81"},"referencedDeclaration":21318,"src":"1028:33:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"id":15291,"libraryName":{"id":15288,"name":"UserConfiguration","nodeType":"IdentifierPath","referencedDeclaration":12368,"src":"1071:17:81"},"nodeType":"UsingForDirective","src":"1065:59:81","typeName":{"id":15290,"nodeType":"UserDefinedTypeName","pathNode":{"id":15289,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"1093:30:81"},"referencedDeclaration":21322,"src":"1093:30:81","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},{"canonicalName":"GenericLogic.CalculateUserAccountDataVars","id":15330,"members":[{"constant":false,"id":15293,"mutability":"mutable","name":"assetPrice","nameLocation":"1178:10:81","nodeType":"VariableDeclaration","scope":15330,"src":"1170:18:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15292,"name":"uint256","nodeType":"ElementaryTypeName","src":"1170:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15295,"mutability":"mutable","name":"assetUnit","nameLocation":"1202:9:81","nodeType":"VariableDeclaration","scope":15330,"src":"1194:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15294,"name":"uint256","nodeType":"ElementaryTypeName","src":"1194:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15297,"mutability":"mutable","name":"userBalanceInBaseCurrency","nameLocation":"1225:25:81","nodeType":"VariableDeclaration","scope":15330,"src":"1217:33:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15296,"name":"uint256","nodeType":"ElementaryTypeName","src":"1217:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15299,"mutability":"mutable","name":"decimals","nameLocation":"1264:8:81","nodeType":"VariableDeclaration","scope":15330,"src":"1256:16:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15298,"name":"uint256","nodeType":"ElementaryTypeName","src":"1256:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15301,"mutability":"mutable","name":"ltv","nameLocation":"1286:3:81","nodeType":"VariableDeclaration","scope":15330,"src":"1278:11:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15300,"name":"uint256","nodeType":"ElementaryTypeName","src":"1278:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15303,"mutability":"mutable","name":"liquidationThreshold","nameLocation":"1303:20:81","nodeType":"VariableDeclaration","scope":15330,"src":"1295:28:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15302,"name":"uint256","nodeType":"ElementaryTypeName","src":"1295:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15305,"mutability":"mutable","name":"i","nameLocation":"1337:1:81","nodeType":"VariableDeclaration","scope":15330,"src":"1329:9:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15304,"name":"uint256","nodeType":"ElementaryTypeName","src":"1329:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15307,"mutability":"mutable","name":"healthFactor","nameLocation":"1352:12:81","nodeType":"VariableDeclaration","scope":15330,"src":"1344:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15306,"name":"uint256","nodeType":"ElementaryTypeName","src":"1344:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15309,"mutability":"mutable","name":"totalCollateralInBaseCurrency","nameLocation":"1378:29:81","nodeType":"VariableDeclaration","scope":15330,"src":"1370:37:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15308,"name":"uint256","nodeType":"ElementaryTypeName","src":"1370:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15311,"mutability":"mutable","name":"totalDebtInBaseCurrency","nameLocation":"1421:23:81","nodeType":"VariableDeclaration","scope":15330,"src":"1413:31:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15310,"name":"uint256","nodeType":"ElementaryTypeName","src":"1413:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15313,"mutability":"mutable","name":"avgLtv","nameLocation":"1458:6:81","nodeType":"VariableDeclaration","scope":15330,"src":"1450:14:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15312,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15315,"mutability":"mutable","name":"avgLiquidationThreshold","nameLocation":"1478:23:81","nodeType":"VariableDeclaration","scope":15330,"src":"1470:31:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15314,"name":"uint256","nodeType":"ElementaryTypeName","src":"1470:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15317,"mutability":"mutable","name":"eModeAssetPrice","nameLocation":"1515:15:81","nodeType":"VariableDeclaration","scope":15330,"src":"1507:23:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15316,"name":"uint256","nodeType":"ElementaryTypeName","src":"1507:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15319,"mutability":"mutable","name":"eModeLtv","nameLocation":"1544:8:81","nodeType":"VariableDeclaration","scope":15330,"src":"1536:16:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15318,"name":"uint256","nodeType":"ElementaryTypeName","src":"1536:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15321,"mutability":"mutable","name":"eModeLiqThreshold","nameLocation":"1566:17:81","nodeType":"VariableDeclaration","scope":15330,"src":"1558:25:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15320,"name":"uint256","nodeType":"ElementaryTypeName","src":"1558:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15323,"mutability":"mutable","name":"eModeAssetCategory","nameLocation":"1597:18:81","nodeType":"VariableDeclaration","scope":15330,"src":"1589:26:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15322,"name":"uint256","nodeType":"ElementaryTypeName","src":"1589:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15325,"mutability":"mutable","name":"currentReserveAddress","nameLocation":"1629:21:81","nodeType":"VariableDeclaration","scope":15330,"src":"1621:29:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15324,"name":"address","nodeType":"ElementaryTypeName","src":"1621:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15327,"mutability":"mutable","name":"hasZeroLtvCollateral","nameLocation":"1661:20:81","nodeType":"VariableDeclaration","scope":15330,"src":"1656:25:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15326,"name":"bool","nodeType":"ElementaryTypeName","src":"1656:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":15329,"mutability":"mutable","name":"isInEModeCategory","nameLocation":"1692:17:81","nodeType":"VariableDeclaration","scope":15330,"src":"1687:22:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15328,"name":"bool","nodeType":"ElementaryTypeName","src":"1687:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"CalculateUserAccountDataVars","nameLocation":"1135:28:81","nodeType":"StructDefinition","scope":15855,"src":"1128:586:81","visibility":"public"},{"body":{"id":15712,"nodeType":"Block","src":"2998:3358:81","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":15363,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15348,"src":"3008:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":15364,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userConfig","nodeType":"MemberAccess","referencedDeclaration":21547,"src":"3008:17:81","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":15365,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isEmpty","nodeType":"MemberAccess","referencedDeclaration":12194,"src":"3008:25:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory) pure returns (bool)"}},"id":15366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3008:27:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15380,"nodeType":"IfStatement","src":"3004:93:81","trueBody":{"id":15379,"nodeType":"Block","src":"3037:60:81","statements":[{"expression":{"components":[{"hexValue":"30","id":15367,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3053:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":15368,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3056:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":15369,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3059:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":15370,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3062:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"arguments":[{"id":15373,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3070:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":15372,"name":"uint256","nodeType":"ElementaryTypeName","src":"3070:7:81","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":15371,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3065:4:81","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15374,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3065:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":15375,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"3065:17:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":15376,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3084:5:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"id":15377,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3052:38:81","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_rational_0_by_1_$_t_rational_0_by_1_$_t_rational_0_by_1_$_t_uint256_$_t_bool_$","typeString":"tuple(int_const 0,int_const 0,int_const 0,int_const 0,uint256,bool)"}},"functionReturnParameters":15362,"id":15378,"nodeType":"Return","src":"3045:45:81"}]}},{"assignments":[15383],"declarations":[{"constant":false,"id":15383,"mutability":"mutable","name":"vars","nameLocation":"3139:4:81","nodeType":"VariableDeclaration","scope":15712,"src":"3103:40:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars"},"typeName":{"id":15382,"nodeType":"UserDefinedTypeName","pathNode":{"id":15381,"name":"CalculateUserAccountDataVars","nodeType":"IdentifierPath","referencedDeclaration":15330,"src":"3103:28:81"},"referencedDeclaration":15330,"src":"3103:28:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_storage_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars"}},"visibility":"internal"}],"id":15384,"nodeType":"VariableDeclarationStatement","src":"3103:40:81"},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":15388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15385,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15348,"src":"3154:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":15386,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":21555,"src":"3154:24:81","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":15387,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3182:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3154:29:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15411,"nodeType":"IfStatement","src":"3150:263:81","trueBody":{"id":15410,"nodeType":"Block","src":"3185:228:81","statements":[{"expression":{"id":15408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":15389,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"3194:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15391,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"eModeLtv","nodeType":"MemberAccess","referencedDeclaration":15319,"src":"3194:13:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15392,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"3209:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15393,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"eModeLiqThreshold","nodeType":"MemberAccess","referencedDeclaration":15321,"src":"3209:22:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15394,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"3233:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15395,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"eModeAssetPrice","nodeType":"MemberAccess","referencedDeclaration":15317,"src":"3233:20:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15396,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3193:61:81","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":15399,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15345,"src":"3310:15:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},"id":15402,"indexExpression":{"expression":{"id":15400,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15348,"src":"3326:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":15401,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":21555,"src":"3326:24:81","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3310:41:81","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage","typeString":"struct DataTypes.EModeCategory storage ref"}},{"arguments":[{"expression":{"id":15404,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15348,"src":"3382:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":15405,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"oracle","nodeType":"MemberAccess","referencedDeclaration":21553,"src":"3382:13:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15403,"name":"IPriceOracleGetter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5835,"src":"3363:18:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPriceOracleGetter_$5835_$","typeString":"type(contract IPriceOracleGetter)"}},"id":15406,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3363:33:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage","typeString":"struct DataTypes.EModeCategory storage ref"},{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"}],"expression":{"id":15397,"name":"EModeLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14615,"src":"3257:10:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_EModeLogic_$14615_$","typeString":"type(library EModeLogic)"}},"id":15398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getEModeConfiguration","nodeType":"MemberAccess","referencedDeclaration":14594,"src":"3257:41:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_EModeCategory_$21333_storage_ptr_$_t_contract$_IPriceOracleGetter_$5835_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct DataTypes.EModeCategory storage pointer,contract IPriceOracleGetter) view returns (uint256,uint256,uint256)"}},"id":15407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3257:149:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"src":"3193:213:81","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15409,"nodeType":"ExpressionStatement","src":"3193:213:81"}]}},{"body":{"id":15636,"nodeType":"Block","src":"3457:2137:81","statements":[{"condition":{"id":15423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3469:57:81","subExpression":{"arguments":[{"expression":{"id":15420,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"3519:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15421,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":15305,"src":"3519:6:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":15417,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15348,"src":"3470:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":15418,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userConfig","nodeType":"MemberAccess","referencedDeclaration":21547,"src":"3470:17:81","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":15419,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isUsingAsCollateralOrBorrowing","nodeType":"MemberAccess","referencedDeclaration":12010,"src":"3470:48:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (bool)"}},"id":15422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3470:56:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15431,"nodeType":"IfStatement","src":"3465:140:81","trueBody":{"id":15430,"nodeType":"Block","src":"3528:77:81","statements":[{"id":15428,"nodeType":"UncheckedBlock","src":"3538:41:81","statements":[{"expression":{"id":15426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3560:8:81","subExpression":{"expression":{"id":15424,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"3562:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15425,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":15305,"src":"3562:6:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15427,"nodeType":"ExpressionStatement","src":"3560:8:81"}]},{"id":15429,"nodeType":"Continue","src":"3588:8:81"}]}},{"expression":{"id":15439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15432,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"3613:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15434,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentReserveAddress","nodeType":"MemberAccess","referencedDeclaration":15325,"src":"3613:26:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":15435,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15340,"src":"3642:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":15438,"indexExpression":{"expression":{"id":15436,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"3655:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15437,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":15305,"src":"3655:6:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3642:20:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3613:49:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":15440,"nodeType":"ExpressionStatement","src":"3613:49:81"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":15447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15441,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"3675:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15442,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentReserveAddress","nodeType":"MemberAccess","referencedDeclaration":15325,"src":"3675:26:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":15445,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3713:1:81","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":15444,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3705:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15443,"name":"address","nodeType":"ElementaryTypeName","src":"3705:7:81","typeDescriptions":{}}},"id":15446,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3705:10:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3675:40:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15455,"nodeType":"IfStatement","src":"3671:123:81","trueBody":{"id":15454,"nodeType":"Block","src":"3717:77:81","statements":[{"id":15452,"nodeType":"UncheckedBlock","src":"3727:41:81","statements":[{"expression":{"id":15450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3749:8:81","subExpression":{"expression":{"id":15448,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"3751:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15449,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":15305,"src":"3751:6:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15451,"nodeType":"ExpressionStatement","src":"3749:8:81"}]},{"id":15453,"nodeType":"Continue","src":"3777:8:81"}]}},{"assignments":[15460],"declarations":[{"constant":false,"id":15460,"mutability":"mutable","name":"currentReserve","nameLocation":"3832:14:81","nodeType":"VariableDeclaration","scope":15636,"src":"3802:44:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":15459,"nodeType":"UserDefinedTypeName","pathNode":{"id":15458,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"3802:21:81"},"referencedDeclaration":21315,"src":"3802:21:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":15465,"initialValue":{"baseExpression":{"id":15461,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15336,"src":"3849:12:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":15464,"indexExpression":{"expression":{"id":15462,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"3862:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15463,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentReserveAddress","nodeType":"MemberAccess","referencedDeclaration":15325,"src":"3862:26:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3849:40:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"3802:87:81"},{"expression":{"id":15480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":15466,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"3908:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15468,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"ltv","nodeType":"MemberAccess","referencedDeclaration":15301,"src":"3908:8:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15469,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"3926:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15470,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"liquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":15303,"src":"3926:25:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null,{"expression":{"id":15471,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"3971:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15472,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":15299,"src":"3971:13:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null,{"expression":{"id":15473,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"4004:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15474,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"eModeAssetCategory","nodeType":"MemberAccess","referencedDeclaration":15323,"src":"4004:23:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15475,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3898:137:81","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$__$_t_uint256_$__$_t_uint256_$","typeString":"tuple(uint256,uint256,,uint256,,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":15476,"name":"currentReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15460,"src":"4038:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15477,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":21286,"src":"4038:28:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":15478,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getParams","nodeType":"MemberAccess","referencedDeclaration":11823,"src":"4038:38:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256,uint256,uint256,uint256,uint256,uint256)"}},"id":15479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4038:40:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,uint256)"}},"src":"3898:180:81","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15481,"nodeType":"ExpressionStatement","src":"3898:180:81"},{"id":15491,"nodeType":"UncheckedBlock","src":"4087:65:81","statements":[{"expression":{"id":15489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15482,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"4107:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15484,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"assetUnit","nodeType":"MemberAccess","referencedDeclaration":15295,"src":"4107:14:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":15485,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4124:2:81","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"expression":{"id":15486,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"4130:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15487,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":15299,"src":"4130:13:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4124:19:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4107:36:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15490,"nodeType":"ExpressionStatement","src":"4107:36:81"}]},{"expression":{"id":15516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15492,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"4160:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15494,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"assetPrice","nodeType":"MemberAccess","referencedDeclaration":15293,"src":"4160:15:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15495,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"4178:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15496,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"eModeAssetPrice","nodeType":"MemberAccess","referencedDeclaration":15317,"src":"4178:20:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":15497,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4202:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4178:25:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15499,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15348,"src":"4215:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":15500,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":21555,"src":"4215:24:81","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":15501,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"4243:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15502,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"eModeAssetCategory","nodeType":"MemberAccess","referencedDeclaration":15323,"src":"4243:23:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4215:51:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4178:88:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"expression":{"id":15512,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"4356:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15513,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentReserveAddress","nodeType":"MemberAccess","referencedDeclaration":15325,"src":"4356:26:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":15508,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15348,"src":"4327:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":15509,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"oracle","nodeType":"MemberAccess","referencedDeclaration":21553,"src":"4327:13:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15507,"name":"IPriceOracleGetter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5835,"src":"4308:18:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPriceOracleGetter_$5835_$","typeString":"type(contract IPriceOracleGetter)"}},"id":15510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4308:33:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"}},"id":15511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getAssetPrice","nodeType":"MemberAccess","referencedDeclaration":5834,"src":"4308:47:81","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":15514,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4308:75:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"4178:205:81","trueExpression":{"expression":{"id":15505,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"4277:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15506,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"eModeAssetPrice","nodeType":"MemberAccess","referencedDeclaration":15317,"src":"4277:20:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4160:223:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15517,"nodeType":"ExpressionStatement","src":"4160:223:81"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15518,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"4396:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15519,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":15303,"src":"4396:25:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":15520,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4425:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4396:30:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"arguments":[{"expression":{"id":15525,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"4468:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15526,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":15305,"src":"4468:6:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":15522,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15348,"src":"4430:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":15523,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userConfig","nodeType":"MemberAccess","referencedDeclaration":21547,"src":"4430:17:81","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":15524,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":12083,"src":"4430:37:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (bool)"}},"id":15527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4430:45:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4396:79:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15608,"nodeType":"IfStatement","src":"4392:911:81","trueBody":{"id":15607,"nodeType":"Block","src":"4477:826:81","statements":[{"expression":{"id":15541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15529,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"4487:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15531,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userBalanceInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":15297,"src":"4487:30:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":15533,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15348,"src":"4561:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":15534,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":21551,"src":"4561:11:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15535,"name":"currentReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15460,"src":"4584:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"expression":{"id":15536,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"4610:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15537,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assetPrice","nodeType":"MemberAccess","referencedDeclaration":15293,"src":"4610:15:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15538,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"4637:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15539,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assetUnit","nodeType":"MemberAccess","referencedDeclaration":15295,"src":"4637:14:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15532,"name":"_getUserBalanceInBaseCurrency","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15854,"src":"4520:29:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_struct$_ReserveData_$21315_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,struct DataTypes.ReserveData storage pointer,uint256,uint256) view returns (uint256)"}},"id":15540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4520:141:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4487:174:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15542,"nodeType":"ExpressionStatement","src":"4487:174:81"},{"expression":{"id":15548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15543,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"4672:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15545,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalCollateralInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":15309,"src":"4672:34:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"expression":{"id":15546,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"4710:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15547,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userBalanceInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":15297,"src":"4710:30:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4672:68:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15549,"nodeType":"ExpressionStatement","src":"4672:68:81"},{"expression":{"id":15560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15550,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"4751:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15552,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"isInEModeCategory","nodeType":"MemberAccess","referencedDeclaration":15329,"src":"4751:22:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":15555,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15348,"src":"4816:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":15556,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":21555,"src":"4816:24:81","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"expression":{"id":15557,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"4852:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15558,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"eModeAssetCategory","nodeType":"MemberAccess","referencedDeclaration":15323,"src":"4852:23:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15553,"name":"EModeLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14615,"src":"4776:10:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_EModeLogic_$14615_$","typeString":"type(library EModeLogic)"}},"id":15554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isInEModeCategory","nodeType":"MemberAccess","referencedDeclaration":14614,"src":"4776:28:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}},"id":15559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4776:109:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4751:134:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15561,"nodeType":"ExpressionStatement","src":"4751:134:81"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15562,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"4900:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15563,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"ltv","nodeType":"MemberAccess","referencedDeclaration":15301,"src":"4900:8:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":15564,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4912:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4900:13:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15589,"nodeType":"Block","src":"5067:55:81","statements":[{"expression":{"id":15587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15583,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"5079:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15585,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"hasZeroLtvCollateral","nodeType":"MemberAccess","referencedDeclaration":15327,"src":"5079:25:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":15586,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5107:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"5079:32:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15588,"nodeType":"ExpressionStatement","src":"5079:32:81"}]},"id":15590,"nodeType":"IfStatement","src":"4896:226:81","trueBody":{"id":15582,"nodeType":"Block","src":"4915:146:81","statements":[{"expression":{"id":15580,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15566,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"4927:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15568,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"avgLtv","nodeType":"MemberAccess","referencedDeclaration":15313,"src":"4927:11:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15569,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"4954:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15570,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userBalanceInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":15297,"src":"4954:30:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"condition":{"expression":{"id":15571,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"5000:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15572,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isInEModeCategory","nodeType":"MemberAccess","referencedDeclaration":15329,"src":"5000:22:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":15575,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"5041:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15576,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"ltv","nodeType":"MemberAccess","referencedDeclaration":15301,"src":"5041:8:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"5000:49:81","trueExpression":{"expression":{"id":15573,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"5025:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15574,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"eModeLtv","nodeType":"MemberAccess","referencedDeclaration":15319,"src":"5025:13:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15578,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4999:51:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4954:96:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4927:123:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15581,"nodeType":"ExpressionStatement","src":"4927:123:81"}]}},{"expression":{"id":15605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15591,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"5132:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15593,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"avgLiquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":15315,"src":"5132:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15594,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"5174:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15595,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userBalanceInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":15297,"src":"5174:30:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"condition":{"expression":{"id":15596,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"5218:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15597,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isInEModeCategory","nodeType":"MemberAccess","referencedDeclaration":15329,"src":"5218:22:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":15600,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"5268:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15601,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":15303,"src":"5268:25:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"5218:75:81","trueExpression":{"expression":{"id":15598,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"5243:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15599,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"eModeLiqThreshold","nodeType":"MemberAccess","referencedDeclaration":15321,"src":"5243:22:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15603,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5217:77:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5174:120:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5132:162:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15606,"nodeType":"ExpressionStatement","src":"5132:162:81"}]}},{"condition":{"arguments":[{"expression":{"id":15612,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"5345:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15613,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":15305,"src":"5345:6:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":15609,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15348,"src":"5315:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":15610,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userConfig","nodeType":"MemberAccess","referencedDeclaration":21547,"src":"5315:17:81","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":15611,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isBorrowing","nodeType":"MemberAccess","referencedDeclaration":12045,"src":"5315:29:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (bool)"}},"id":15614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5315:37:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15630,"nodeType":"IfStatement","src":"5311:232:81","trueBody":{"id":15629,"nodeType":"Block","src":"5354:189:81","statements":[{"expression":{"id":15627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15615,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"5364:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15617,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalDebtInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":15311,"src":"5364:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"expression":{"id":15619,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15348,"src":"5434:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":15620,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":21551,"src":"5434:11:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15621,"name":"currentReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15460,"src":"5457:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"expression":{"id":15622,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"5483:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15623,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assetPrice","nodeType":"MemberAccess","referencedDeclaration":15293,"src":"5483:15:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15624,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"5510:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15625,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assetUnit","nodeType":"MemberAccess","referencedDeclaration":15295,"src":"5510:14:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15618,"name":"_getUserDebtInBaseCurrency","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15811,"src":"5396:26:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_struct$_ReserveData_$21315_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,struct DataTypes.ReserveData storage pointer,uint256,uint256) view returns (uint256)"}},"id":15626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5396:138:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5364:170:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15628,"nodeType":"ExpressionStatement","src":"5364:170:81"}]}},{"id":15635,"nodeType":"UncheckedBlock","src":"5551:37:81","statements":[{"expression":{"id":15633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5571:8:81","subExpression":{"expression":{"id":15631,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"5573:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15632,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":15305,"src":"5573:6:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15634,"nodeType":"ExpressionStatement","src":"5571:8:81"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15412,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"3426:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15413,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"i","nodeType":"MemberAccess","referencedDeclaration":15305,"src":"3426:6:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":15414,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15348,"src":"3435:6:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}},"id":15415,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":21549,"src":"3435:20:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3426:29:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15637,"nodeType":"WhileStatement","src":"3419:2175:81"},{"id":15670,"nodeType":"UncheckedBlock","src":"5600:315:81","statements":[{"expression":{"id":15652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15638,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"5618:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15640,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"avgLtv","nodeType":"MemberAccess","referencedDeclaration":15313,"src":"5618:11:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15641,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"5632:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15642,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalCollateralInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":15309,"src":"5632:34:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":15643,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5670:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5632:39:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":15650,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5741:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":15651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"5632:110:81","trueExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15645,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"5682:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15646,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"avgLtv","nodeType":"MemberAccess","referencedDeclaration":15313,"src":"5682:11:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":15647,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"5696:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15648,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalCollateralInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":15309,"src":"5696:34:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5682:48:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5618:124:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15653,"nodeType":"ExpressionStatement","src":"5618:124:81"},{"expression":{"id":15668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15654,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"5750:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15656,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"avgLiquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":15315,"src":"5750:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15657,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"5781:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15658,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalCollateralInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":15309,"src":"5781:34:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":15659,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5819:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5781:39:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":15666,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5907:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":15667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"5781:127:81","trueExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15661,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"5831:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15662,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"avgLiquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":15315,"src":"5831:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":15663,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"5862:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15664,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalCollateralInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":15309,"src":"5862:34:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5831:65:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5750:158:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15669,"nodeType":"ExpressionStatement","src":"5750:158:81"}]},{"expression":{"id":15696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15671,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"5921:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15673,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"healthFactor","nodeType":"MemberAccess","referencedDeclaration":15307,"src":"5921:17:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15674,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"5942:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15675,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalDebtInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":15311,"src":"5942:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":15676,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5974:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5942:33:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":15678,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5941:35:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"expression":{"id":15692,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"6105:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15693,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalDebtInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":15311,"src":"6105:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"arguments":[{"expression":{"id":15687,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"6058:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15688,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"avgLiquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":15315,"src":"6058:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":15684,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"6012:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15685,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalCollateralInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":15309,"src":"6012:34:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":21119,"src":"6012:45:81","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":15689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6012:75:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15690,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6011:77:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadDiv","nodeType":"MemberAccess","referencedDeclaration":21174,"src":"6011:84:81","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":15694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6011:130:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"5941:200:81","trueExpression":{"expression":{"arguments":[{"id":15681,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5990:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":15680,"name":"uint256","nodeType":"ElementaryTypeName","src":"5990:7:81","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":15679,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5985:4:81","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":15682,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5985:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":15683,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"5985:17:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5921:220:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15697,"nodeType":"ExpressionStatement","src":"5921:220:81"},{"expression":{"components":[{"expression":{"id":15698,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"6162:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15699,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalCollateralInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":15309,"src":"6162:34:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15700,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"6204:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15701,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalDebtInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":15311,"src":"6204:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15702,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"6240:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15703,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"avgLtv","nodeType":"MemberAccess","referencedDeclaration":15313,"src":"6240:11:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15704,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"6259:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15705,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"avgLiquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":15315,"src":"6259:28:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15706,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"6295:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15707,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"healthFactor","nodeType":"MemberAccess","referencedDeclaration":15307,"src":"6295:17:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15708,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15383,"src":"6320:4:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataVars_$15330_memory_ptr","typeString":"struct GenericLogic.CalculateUserAccountDataVars memory"}},"id":15709,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"hasZeroLtvCollateral","nodeType":"MemberAccess","referencedDeclaration":15327,"src":"6320:25:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":15710,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6154:197:81","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,bool)"}},"functionReturnParameters":15362,"id":15711,"nodeType":"Return","src":"6147:204:81"}]},"documentation":{"id":15331,"nodeType":"StructuredDocumentation","src":"1718:912:81","text":" @notice Calculates the user data across the reserves.\n @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\n the average Loan To Value, the average Liquidation Ratio, and the Health factor.\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param eModeCategories The configuration of all the efficiency mode categories\n @param params Additional parameters needed for the calculation\n @return The total collateral of the user in the base currency used by the price feed\n @return The total debt of the user in the base currency used by the price feed\n @return The average ltv of the user\n @return The average liquidation threshold of the user\n @return The health factor of the user\n @return True if the ltv is zero, false otherwise"},"id":15713,"implemented":true,"kind":"function","modifiers":[],"name":"calculateUserAccountData","nameLocation":"2642:24:81","nodeType":"FunctionDefinition","parameters":{"id":15349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15336,"mutability":"mutable","name":"reservesData","nameLocation":"2722:12:81","nodeType":"VariableDeclaration","scope":15713,"src":"2672:62:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":15335,"keyType":{"id":15332,"name":"address","nodeType":"ElementaryTypeName","src":"2680:7:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2672:41:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":15334,"nodeType":"UserDefinedTypeName","pathNode":{"id":15333,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"2691:21:81"},"referencedDeclaration":21315,"src":"2691:21:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":15340,"mutability":"mutable","name":"reservesList","nameLocation":"2776:12:81","nodeType":"VariableDeclaration","scope":15713,"src":"2740:48:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":15339,"keyType":{"id":15337,"name":"uint256","nodeType":"ElementaryTypeName","src":"2748:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"2740:27:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":15338,"name":"address","nodeType":"ElementaryTypeName","src":"2759:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":15345,"mutability":"mutable","name":"eModeCategories","nameLocation":"2844:15:81","nodeType":"VariableDeclaration","scope":15713,"src":"2794:65:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":15344,"keyType":{"id":15341,"name":"uint8","nodeType":"ElementaryTypeName","src":"2802:5:81","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"2794:41:81","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":15343,"nodeType":"UserDefinedTypeName","pathNode":{"id":15342,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":21333,"src":"2811:23:81"},"referencedDeclaration":21333,"src":"2811:23:81","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":15348,"mutability":"mutable","name":"params","nameLocation":"2913:6:81","nodeType":"VariableDeclaration","scope":15713,"src":"2865:54:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams"},"typeName":{"id":15347,"nodeType":"UserDefinedTypeName","pathNode":{"id":15346,"name":"DataTypes.CalculateUserAccountDataParams","nodeType":"IdentifierPath","referencedDeclaration":21556,"src":"2865:40:81"},"referencedDeclaration":21556,"src":"2865:40:81","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_storage_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams"}},"visibility":"internal"}],"src":"2666:257:81"},"returnParameters":{"id":15362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15351,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15713,"src":"2947:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15350,"name":"uint256","nodeType":"ElementaryTypeName","src":"2947:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15353,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15713,"src":"2956:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15352,"name":"uint256","nodeType":"ElementaryTypeName","src":"2956:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15355,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15713,"src":"2965:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15354,"name":"uint256","nodeType":"ElementaryTypeName","src":"2965:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15357,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15713,"src":"2974:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15356,"name":"uint256","nodeType":"ElementaryTypeName","src":"2974:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15359,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15713,"src":"2983:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15358,"name":"uint256","nodeType":"ElementaryTypeName","src":"2983:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15361,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15713,"src":"2992:4:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15360,"name":"bool","nodeType":"ElementaryTypeName","src":"2992:4:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2946:51:81"},"scope":15855,"src":"2633:3723:81","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":15747,"nodeType":"Block","src":"7042:327:81","statements":[{"assignments":[15726],"declarations":[{"constant":false,"id":15726,"mutability":"mutable","name":"availableBorrowsInBaseCurrency","nameLocation":"7056:30:81","nodeType":"VariableDeclaration","scope":15747,"src":"7048:38:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15725,"name":"uint256","nodeType":"ElementaryTypeName","src":"7048:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15731,"initialValue":{"arguments":[{"id":15729,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15720,"src":"7130:3:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15727,"name":"totalCollateralInBaseCurrency","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15716,"src":"7089:29:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":21119,"src":"7089:40:81","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":15730,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7089:45:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7048:86:81"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15732,"name":"availableBorrowsInBaseCurrency","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15726,"src":"7145:30:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":15733,"name":"totalDebtInBaseCurrency","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15718,"src":"7178:23:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7145:56:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15738,"nodeType":"IfStatement","src":"7141:85:81","trueBody":{"id":15737,"nodeType":"Block","src":"7203:23:81","statements":[{"expression":{"hexValue":"30","id":15735,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7218:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":15724,"id":15736,"nodeType":"Return","src":"7211:8:81"}]}},{"expression":{"id":15743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15739,"name":"availableBorrowsInBaseCurrency","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15726,"src":"7232:30:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15740,"name":"availableBorrowsInBaseCurrency","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15726,"src":"7265:30:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":15741,"name":"totalDebtInBaseCurrency","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15718,"src":"7298:23:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7265:56:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7232:89:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15744,"nodeType":"ExpressionStatement","src":"7232:89:81"},{"expression":{"id":15745,"name":"availableBorrowsInBaseCurrency","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15726,"src":"7334:30:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15724,"id":15746,"nodeType":"Return","src":"7327:37:81"}]},"documentation":{"id":15714,"nodeType":"StructuredDocumentation","src":"6360:511:81","text":" @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\n and the average Loan To Value\n @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\n @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\n @param ltv The average loan to value\n @return The amount available to borrow in the base currency of the used by the price feed"},"id":15748,"implemented":true,"kind":"function","modifiers":[],"name":"calculateAvailableBorrows","nameLocation":"6883:25:81","nodeType":"FunctionDefinition","parameters":{"id":15721,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15716,"mutability":"mutable","name":"totalCollateralInBaseCurrency","nameLocation":"6922:29:81","nodeType":"VariableDeclaration","scope":15748,"src":"6914:37:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15715,"name":"uint256","nodeType":"ElementaryTypeName","src":"6914:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15718,"mutability":"mutable","name":"totalDebtInBaseCurrency","nameLocation":"6965:23:81","nodeType":"VariableDeclaration","scope":15748,"src":"6957:31:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15717,"name":"uint256","nodeType":"ElementaryTypeName","src":"6957:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15720,"mutability":"mutable","name":"ltv","nameLocation":"7002:3:81","nodeType":"VariableDeclaration","scope":15748,"src":"6994:11:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15719,"name":"uint256","nodeType":"ElementaryTypeName","src":"6994:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6908:101:81"},"returnParameters":{"id":15724,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15723,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15748,"src":"7033:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15722,"name":"uint256","nodeType":"ElementaryTypeName","src":"7033:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7032:9:81"},"scope":15855,"src":"6874:495:81","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15810,"nodeType":"Block","src":"8329:466:81","statements":[{"assignments":[15764],"declarations":[{"constant":false,"id":15764,"mutability":"mutable","name":"userTotalDebt","nameLocation":"8373:13:81","nodeType":"VariableDeclaration","scope":15810,"src":"8365:21:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15763,"name":"uint256","nodeType":"ElementaryTypeName","src":"8365:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15772,"initialValue":{"arguments":[{"id":15770,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15751,"src":"8466:4:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":15766,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15754,"src":"8409:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15767,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21306,"src":"8409:32:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15765,"name":"IScaledBalanceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5975,"src":"8389:19:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IScaledBalanceToken_$5975_$","typeString":"type(contract IScaledBalanceToken)"}},"id":15768,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8389:53:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IScaledBalanceToken_$5975","typeString":"contract IScaledBalanceToken"}},"id":15769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"scaledBalanceOf","nodeType":"MemberAccess","referencedDeclaration":5950,"src":"8389:69:81","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":15771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8389:87:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8365:111:81"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15773,"name":"userTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15764,"src":"8486:13:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":15774,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8503:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8486:18:81","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15786,"nodeType":"IfStatement","src":"8482:104:81","trueBody":{"id":15785,"nodeType":"Block","src":"8506:80:81","statements":[{"expression":{"id":15783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15776,"name":"userTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15764,"src":"8514:13:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15779,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15754,"src":"8551:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15780,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getNormalizedDebt","nodeType":"MemberAccess","referencedDeclaration":17751,"src":"8551:25:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$21315_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (uint256)"}},"id":15781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8551:27:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15777,"name":"userTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15764,"src":"8530:13:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"8530:20:81","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":15782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8530:49:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8514:65:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15784,"nodeType":"ExpressionStatement","src":"8514:65:81"}]}},{"expression":{"id":15797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15787,"name":"userTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15764,"src":"8592:13:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15788,"name":"userTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15764,"src":"8608:13:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"id":15794,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15751,"src":"8673:4:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":15790,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15754,"src":"8631:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15791,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"8631:30:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15789,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"8624:6:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":15792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8624:38:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":15793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"8624:48:81","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":15795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8624:54:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8608:70:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8592:86:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15798,"nodeType":"ExpressionStatement","src":"8592:86:81"},{"expression":{"id":15803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15799,"name":"userTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15764,"src":"8685:13:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15800,"name":"assetPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15756,"src":"8701:10:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":15801,"name":"userTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15764,"src":"8714:13:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8701:26:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8685:42:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15804,"nodeType":"ExpressionStatement","src":"8685:42:81"},{"id":15809,"nodeType":"UncheckedBlock","src":"8734:57:81","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15805,"name":"userTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15764,"src":"8759:13:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":15806,"name":"assetUnit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15758,"src":"8775:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8759:25:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15762,"id":15808,"nodeType":"Return","src":"8752:32:81"}]}]},"documentation":{"id":15749,"nodeType":"StructuredDocumentation","src":"7373:774:81","text":" @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\n @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\n variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\n fetching `balanceOf`\n @param user The address of the user\n @param reserve The data of the reserve for which the total debt of the user is being calculated\n @param assetPrice The price of the asset for which the total debt of the user is being calculated\n @param assetUnit The value representing one full unit of the asset (10^decimals)\n @return The total debt of the user normalized to the base currency"},"id":15811,"implemented":true,"kind":"function","modifiers":[],"name":"_getUserDebtInBaseCurrency","nameLocation":"8159:26:81","nodeType":"FunctionDefinition","parameters":{"id":15759,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15751,"mutability":"mutable","name":"user","nameLocation":"8199:4:81","nodeType":"VariableDeclaration","scope":15811,"src":"8191:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15750,"name":"address","nodeType":"ElementaryTypeName","src":"8191:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15754,"mutability":"mutable","name":"reserve","nameLocation":"8239:7:81","nodeType":"VariableDeclaration","scope":15811,"src":"8209:37:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":15753,"nodeType":"UserDefinedTypeName","pathNode":{"id":15752,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"8209:21:81"},"referencedDeclaration":21315,"src":"8209:21:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":15756,"mutability":"mutable","name":"assetPrice","nameLocation":"8260:10:81","nodeType":"VariableDeclaration","scope":15811,"src":"8252:18:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15755,"name":"uint256","nodeType":"ElementaryTypeName","src":"8252:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15758,"mutability":"mutable","name":"assetUnit","nameLocation":"8284:9:81","nodeType":"VariableDeclaration","scope":15811,"src":"8276:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15757,"name":"uint256","nodeType":"ElementaryTypeName","src":"8276:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8185:112:81"},"returnParameters":{"id":15762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15761,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15811,"src":"8320:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15760,"name":"uint256","nodeType":"ElementaryTypeName","src":"8320:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8319:9:81"},"scope":15855,"src":"8150:645:81","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":15853,"nodeType":"Block","src":"9706:264:81","statements":[{"assignments":[15827],"declarations":[{"constant":false,"id":15827,"mutability":"mutable","name":"normalizedIncome","nameLocation":"9720:16:81","nodeType":"VariableDeclaration","scope":15853,"src":"9712:24:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15826,"name":"uint256","nodeType":"ElementaryTypeName","src":"9712:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15831,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15828,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15817,"src":"9739:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15829,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getNormalizedIncome","nodeType":"MemberAccess","referencedDeclaration":17715,"src":"9739:27:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$21315_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (uint256)"}},"id":15830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9739:29:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9712:56:81"},{"assignments":[15833],"declarations":[{"constant":false,"id":15833,"mutability":"mutable","name":"balance","nameLocation":"9782:7:81","nodeType":"VariableDeclaration","scope":15853,"src":"9774:15:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15832,"name":"uint256","nodeType":"ElementaryTypeName","src":"9774:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15847,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"arguments":[{"id":15842,"name":"normalizedIncome","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15827,"src":"9872:16:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":15839,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15814,"src":"9859:4:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":15835,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15817,"src":"9820:7:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":15836,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"9820:21:81","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15834,"name":"IScaledBalanceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5975,"src":"9800:19:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IScaledBalanceToken_$5975_$","typeString":"type(contract IScaledBalanceToken)"}},"id":15837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9800:42:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IScaledBalanceToken_$5975","typeString":"contract IScaledBalanceToken"}},"id":15838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"scaledBalanceOf","nodeType":"MemberAccess","referencedDeclaration":5950,"src":"9800:58:81","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":15840,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9800:64:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"9800:71:81","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":15843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9800:89:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15844,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9792:103:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":15845,"name":"assetPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15819,"src":"9898:10:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9792:116:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9774:134:81"},{"id":15852,"nodeType":"UncheckedBlock","src":"9915:51:81","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15848,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15833,"src":"9940:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":15849,"name":"assetUnit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15821,"src":"9950:9:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9940:19:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15825,"id":15851,"nodeType":"Return","src":"9933:26:81"}]}]},"documentation":{"id":15812,"nodeType":"StructuredDocumentation","src":"8799:722:81","text":" @notice Calculates total aToken balance of the user in the based currency used by the price oracle\n @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\n is cheaper than fetching `balanceOf`\n @param user The address of the user\n @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\n @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\n @param assetUnit The value representing one full unit of the asset (10^decimals)\n @return The total aToken balance of the user normalized to the base currency of the price oracle"},"id":15854,"implemented":true,"kind":"function","modifiers":[],"name":"_getUserBalanceInBaseCurrency","nameLocation":"9533:29:81","nodeType":"FunctionDefinition","parameters":{"id":15822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15814,"mutability":"mutable","name":"user","nameLocation":"9576:4:81","nodeType":"VariableDeclaration","scope":15854,"src":"9568:12:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15813,"name":"address","nodeType":"ElementaryTypeName","src":"9568:7:81","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15817,"mutability":"mutable","name":"reserve","nameLocation":"9616:7:81","nodeType":"VariableDeclaration","scope":15854,"src":"9586:37:81","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":15816,"nodeType":"UserDefinedTypeName","pathNode":{"id":15815,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"9586:21:81"},"referencedDeclaration":21315,"src":"9586:21:81","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":15819,"mutability":"mutable","name":"assetPrice","nameLocation":"9637:10:81","nodeType":"VariableDeclaration","scope":15854,"src":"9629:18:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15818,"name":"uint256","nodeType":"ElementaryTypeName","src":"9629:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15821,"mutability":"mutable","name":"assetUnit","nameLocation":"9661:9:81","nodeType":"VariableDeclaration","scope":15854,"src":"9653:17:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15820,"name":"uint256","nodeType":"ElementaryTypeName","src":"9653:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9562:112:81"},"returnParameters":{"id":15825,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15824,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15854,"src":"9697:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15823,"name":"uint256","nodeType":"ElementaryTypeName","src":"9697:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9696:9:81"},"scope":15855,"src":"9524:446:81","stateMutability":"view","virtual":false,"visibility":"private"}],"scope":15856,"src":"856:9116:81","usedErrors":[]}],"src":"37:9936:81"},"id":81},"@aave/core-v3/contracts/protocol/libraries/logic/IsolationModeLogic.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/IsolationModeLogic.sol","exportedSymbols":{"DataTypes":[21633],"IsolationModeLogic":[15978],"ReserveConfiguration":[11857],"SafeCast":[1966],"UserConfiguration":[12368]},"id":15979,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":15857,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:82"},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":15859,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15979,"sourceUnit":21634,"src":"63:49:82","symbolAliases":[{"foreign":{"id":15858,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:9:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../configuration/ReserveConfiguration.sol","id":15861,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15979,"sourceUnit":11858,"src":"113:79:82","symbolAliases":[{"foreign":{"id":15860,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"121:20:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"../configuration/UserConfiguration.sol","id":15863,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15979,"sourceUnit":12369,"src":"193:73:82","symbolAliases":[{"foreign":{"id":15862,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"201:17:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"../../../dependencies/openzeppelin/contracts/SafeCast.sol","id":15865,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":15979,"sourceUnit":1967,"src":"267:83:82","symbolAliases":[{"foreign":{"id":15864,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"275:8:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IsolationModeLogic","contractDependencies":[],"contractKind":"library","documentation":{"id":15866,"nodeType":"StructuredDocumentation","src":"352:159:82","text":" @title IsolationModeLogic library\n @author Aave\n @notice Implements the base logic for handling repayments for assets borrowed in isolation mode"},"fullyImplemented":true,"id":15978,"linearizedBaseContracts":[15978],"name":"IsolationModeLogic","nameLocation":"520:18:82","nodeType":"ContractDefinition","nodes":[{"id":15870,"libraryName":{"id":15867,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":11857,"src":"549:20:82"},"nodeType":"UsingForDirective","src":"543:65:82","typeName":{"id":15869,"nodeType":"UserDefinedTypeName","pathNode":{"id":15868,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"574:33:82"},"referencedDeclaration":21318,"src":"574:33:82","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"id":15874,"libraryName":{"id":15871,"name":"UserConfiguration","nodeType":"IdentifierPath","referencedDeclaration":12368,"src":"617:17:82"},"nodeType":"UsingForDirective","src":"611:59:82","typeName":{"id":15873,"nodeType":"UserDefinedTypeName","pathNode":{"id":15872,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"639:30:82"},"referencedDeclaration":21322,"src":"639:30:82","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},{"id":15877,"libraryName":{"id":15875,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"679:8:82"},"nodeType":"UsingForDirective","src":"673:27:82","typeName":{"id":15876,"name":"uint256","nodeType":"ElementaryTypeName","src":"692:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"anonymous":false,"id":15883,"name":"IsolationModeTotalDebtUpdated","nameLocation":"744:29:82","nodeType":"EventDefinition","parameters":{"id":15882,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15879,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"790:5:82","nodeType":"VariableDeclaration","scope":15883,"src":"774:21:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15878,"name":"address","nodeType":"ElementaryTypeName","src":"774:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15881,"indexed":false,"mutability":"mutable","name":"totalDebt","nameLocation":"805:9:82","nodeType":"VariableDeclaration","scope":15883,"src":"797:17:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15880,"name":"uint256","nodeType":"ElementaryTypeName","src":"797:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"773:42:82"},"src":"738:78:82"},{"body":{"id":15976,"nodeType":"Block","src":"1531:1197:82","statements":[{"assignments":[15905,15907,null],"declarations":[{"constant":false,"id":15905,"mutability":"mutable","name":"isolationModeActive","nameLocation":"1543:19:82","nodeType":"VariableDeclaration","scope":15976,"src":"1538:24:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15904,"name":"bool","nodeType":"ElementaryTypeName","src":"1538:4:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":15907,"mutability":"mutable","name":"isolationModeCollateralAddress","nameLocation":"1572:30:82","nodeType":"VariableDeclaration","scope":15976,"src":"1564:38:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15906,"name":"address","nodeType":"ElementaryTypeName","src":"1564:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},null],"id":15913,"initialValue":{"arguments":[{"id":15910,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15889,"src":"1648:12:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":15911,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15893,"src":"1662:12:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}],"expression":{"id":15908,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15896,"src":"1608:10:82","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":15909,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getIsolationModeState","nodeType":"MemberAccess","referencedDeclaration":12262,"src":"1608:39:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$returns$_t_bool_$_t_address_$_t_uint256_$bound_to$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address)) view returns (bool,address,uint256)"}},"id":15912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1608:67:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$_t_uint256_$","typeString":"tuple(bool,address,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"1537:138:82"},{"condition":{"id":15914,"name":"isolationModeActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15905,"src":"1686:19:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15975,"nodeType":"IfStatement","src":"1682:1042:82","trueBody":{"id":15974,"nodeType":"Block","src":"1707:1017:82","statements":[{"assignments":[15916],"declarations":[{"constant":false,"id":15916,"mutability":"mutable","name":"isolationModeTotalDebt","nameLocation":"1723:22:82","nodeType":"VariableDeclaration","scope":15974,"src":"1715:30:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":15915,"name":"uint128","nodeType":"ElementaryTypeName","src":"1715:7:82","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":15921,"initialValue":{"expression":{"baseExpression":{"id":15917,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15889,"src":"1748:12:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":15919,"indexExpression":{"id":15918,"name":"isolationModeCollateralAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15907,"src":"1761:30:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1748:44:82","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":15920,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isolationModeTotalDebt","nodeType":"MemberAccess","referencedDeclaration":21314,"src":"1748:76:82","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"1715:109:82"},{"assignments":[15923],"declarations":[{"constant":false,"id":15923,"mutability":"mutable","name":"isolatedDebtRepaid","nameLocation":"1841:18:82","nodeType":"VariableDeclaration","scope":15974,"src":"1833:26:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":15922,"name":"uint128","nodeType":"ElementaryTypeName","src":"1833:7:82","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":15939,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15924,"name":"repayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15901,"src":"1863:11:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":15925,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1885:2:82","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":15926,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15899,"src":"1902:12:82","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":15927,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"1902:33:82","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":15928,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDecimals","nodeType":"MemberAccess","referencedDeclaration":10933,"src":"1902:45:82","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":15929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1902:47:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":15930,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11857,"src":"1964:20:82","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReserveConfiguration_$11857_$","typeString":"type(library ReserveConfiguration)"}},"id":15931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"DEBT_CEILING_DECIMALS","nodeType":"MemberAccess","referencedDeclaration":10728,"src":"1964:42:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1902:104:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15933,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1901:106:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1885:122:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1863:144:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15936,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1862:146:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"1862:156:82","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":15938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1862:158:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"1833:187:82"},{"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":15942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15940,"name":"isolationModeTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15916,"src":"2183:22:82","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":15941,"name":"isolatedDebtRepaid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15923,"src":"2209:18:82","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"2183:44:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15972,"nodeType":"Block","src":"2404:314:82","statements":[{"assignments":[15957],"declarations":[{"constant":false,"id":15957,"mutability":"mutable","name":"nextIsolationModeTotalDebt","nameLocation":"2422:26:82","nodeType":"VariableDeclaration","scope":15972,"src":"2414:34:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15956,"name":"uint256","nodeType":"ElementaryTypeName","src":"2414:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15966,"initialValue":{"id":15965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":15958,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15889,"src":"2451:12:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":15960,"indexExpression":{"id":15959,"name":"isolationModeCollateralAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15907,"src":"2464:30:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2451:44:82","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":15961,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"isolationModeTotalDebt","nodeType":"MemberAccess","referencedDeclaration":21314,"src":"2451:78:82","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":15964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15962,"name":"isolationModeTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15916,"src":"2532:22:82","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":15963,"name":"isolatedDebtRepaid","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15923,"src":"2557:18:82","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"2532:43:82","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"2451:124:82","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"2414:161:82"},{"eventCall":{"arguments":[{"id":15968,"name":"isolationModeCollateralAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15907,"src":"2631:30:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15969,"name":"nextIsolationModeTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15957,"src":"2673:26:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15967,"name":"IsolationModeTotalDebtUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15883,"src":"2590:29:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":15970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2590:119:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15971,"nodeType":"EmitStatement","src":"2585:124:82"}]},"id":15973,"nodeType":"IfStatement","src":"2179:539:82","trueBody":{"id":15955,"nodeType":"Block","src":"2229:169:82","statements":[{"expression":{"id":15948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":15943,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15889,"src":"2239:12:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":15945,"indexExpression":{"id":15944,"name":"isolationModeCollateralAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15907,"src":"2252:30:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2239:44:82","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":15946,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"isolationModeTotalDebt","nodeType":"MemberAccess","referencedDeclaration":21314,"src":"2239:67:82","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":15947,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2309:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2239:71:82","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":15949,"nodeType":"ExpressionStatement","src":"2239:71:82"},{"eventCall":{"arguments":[{"id":15951,"name":"isolationModeCollateralAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15907,"src":"2355:30:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":15952,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2387:1:82","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":15950,"name":"IsolationModeTotalDebtUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15883,"src":"2325:29:82","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":15953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2325:64:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15954,"nodeType":"EmitStatement","src":"2320:69:82"}]}}]}}]},"documentation":{"id":15884,"nodeType":"StructuredDocumentation","src":"820:407:82","text":" @notice updated the isolated debt whenever a position collateralized by an isolated asset is repaid or liquidated\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param userConfig The user configuration mapping\n @param reserveCache The cached data of the reserve\n @param repayAmount The amount being repaid"},"id":15977,"implemented":true,"kind":"function","modifiers":[],"name":"updateIsolatedDebtIfIsolated","nameLocation":"1239:28:82","nodeType":"FunctionDefinition","parameters":{"id":15902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15889,"mutability":"mutable","name":"reservesData","nameLocation":"1323:12:82","nodeType":"VariableDeclaration","scope":15977,"src":"1273:62:82","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":15888,"keyType":{"id":15885,"name":"address","nodeType":"ElementaryTypeName","src":"1281:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1273:41:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":15887,"nodeType":"UserDefinedTypeName","pathNode":{"id":15886,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"1292:21:82"},"referencedDeclaration":21315,"src":"1292:21:82","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":15893,"mutability":"mutable","name":"reservesList","nameLocation":"1377:12:82","nodeType":"VariableDeclaration","scope":15977,"src":"1341:48:82","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":15892,"keyType":{"id":15890,"name":"uint256","nodeType":"ElementaryTypeName","src":"1349:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"1341:27:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":15891,"name":"address","nodeType":"ElementaryTypeName","src":"1360:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":15896,"mutability":"mutable","name":"userConfig","nameLocation":"1434:10:82","nodeType":"VariableDeclaration","scope":15977,"src":"1395:49:82","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":15895,"nodeType":"UserDefinedTypeName","pathNode":{"id":15894,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"1395:30:82"},"referencedDeclaration":21322,"src":"1395:30:82","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":15899,"mutability":"mutable","name":"reserveCache","nameLocation":"1480:12:82","nodeType":"VariableDeclaration","scope":15977,"src":"1450:42:82","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":15898,"nodeType":"UserDefinedTypeName","pathNode":{"id":15897,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"1450:22:82"},"referencedDeclaration":21379,"src":"1450:22:82","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"},{"constant":false,"id":15901,"mutability":"mutable","name":"repayAmount","nameLocation":"1506:11:82","nodeType":"VariableDeclaration","scope":15977,"src":"1498:19:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15900,"name":"uint256","nodeType":"ElementaryTypeName","src":"1498:7:82","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1267:254:82"},"returnParameters":{"id":15903,"nodeType":"ParameterList","parameters":[],"src":"1531:0:82"},"scope":15978,"src":"1230:1498:82","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":15979,"src":"512:2218:82","usedErrors":[]}],"src":"37:2694:82"},"id":82},"@aave/core-v3/contracts/protocol/libraries/logic/LiquidationLogic.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/LiquidationLogic.sol","exportedSymbols":{"DataTypes":[21633],"EModeLogic":[14615],"GPv2SafeERC20":[118],"GenericLogic":[15855],"Helpers":[12680],"IAToken":[3861],"IERC20":[1442],"IPriceOracleGetter":[5835],"IStableDebtToken":[6109],"IVariableDebtToken":[6155],"IsolationModeLogic":[15978],"LiquidationLogic":[17171],"PercentageMath":[21132],"ReserveConfiguration":[11857],"ReserveLogic":[18377],"UserConfiguration":[12368],"ValidationLogic":[20908],"WadRayMath":[21219]},"id":17172,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":15980,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:83"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../../dependencies/openzeppelin/contracts//IERC20.sol","id":15982,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17172,"sourceUnit":1443,"src":"63:80:83","symbolAliases":[{"foreign":{"id":15981,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:6:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":15984,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17172,"sourceUnit":119,"src":"144:87:83","symbolAliases":[{"foreign":{"id":15983,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"152:13:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol","file":"../../libraries/math/PercentageMath.sol","id":15986,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17172,"sourceUnit":21133,"src":"232:71:83","symbolAliases":[{"foreign":{"id":15985,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"240:14:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol","file":"../../libraries/math/WadRayMath.sol","id":15988,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17172,"sourceUnit":21220,"src":"304:63:83","symbolAliases":[{"foreign":{"id":15987,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"312:10:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Helpers.sol","file":"../../libraries/helpers/Helpers.sol","id":15990,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17172,"sourceUnit":12681,"src":"368:60:83","symbolAliases":[{"foreign":{"id":15989,"name":"Helpers","nodeType":"Identifier","overloadedDeclarations":[],"src":"376:7:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"../../libraries/types/DataTypes.sol","id":15992,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17172,"sourceUnit":21634,"src":"429:62:83","symbolAliases":[{"foreign":{"id":15991,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"437:9:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol","file":"./ReserveLogic.sol","id":15994,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17172,"sourceUnit":18378,"src":"492:48:83","symbolAliases":[{"foreign":{"id":15993,"name":"ReserveLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"500:12:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol","file":"./ValidationLogic.sol","id":15996,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17172,"sourceUnit":20909,"src":"541:54:83","symbolAliases":[{"foreign":{"id":15995,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"549:15:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol","file":"./GenericLogic.sol","id":15998,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17172,"sourceUnit":15856,"src":"596:48:83","symbolAliases":[{"foreign":{"id":15997,"name":"GenericLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"604:12:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/IsolationModeLogic.sol","file":"./IsolationModeLogic.sol","id":16000,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17172,"sourceUnit":15979,"src":"645:60:83","symbolAliases":[{"foreign":{"id":15999,"name":"IsolationModeLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"653:18:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol","file":"./EModeLogic.sol","id":16002,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17172,"sourceUnit":14616,"src":"706:44:83","symbolAliases":[{"foreign":{"id":16001,"name":"EModeLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"714:10:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"../../libraries/configuration/UserConfiguration.sol","id":16004,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17172,"sourceUnit":12369,"src":"751:86:83","symbolAliases":[{"foreign":{"id":16003,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"759:17:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../../libraries/configuration/ReserveConfiguration.sol","id":16006,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17172,"sourceUnit":11858,"src":"838:92:83","symbolAliases":[{"foreign":{"id":16005,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"846:20:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IAToken.sol","file":"../../../interfaces/IAToken.sol","id":16008,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17172,"sourceUnit":3862,"src":"931:56:83","symbolAliases":[{"foreign":{"id":16007,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"939:7:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol","file":"../../../interfaces/IStableDebtToken.sol","id":16010,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17172,"sourceUnit":6110,"src":"988:74:83","symbolAliases":[{"foreign":{"id":16009,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"996:16:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol","file":"../../../interfaces/IVariableDebtToken.sol","id":16012,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17172,"sourceUnit":6156,"src":"1063:78:83","symbolAliases":[{"foreign":{"id":16011,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"1071:18:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol","file":"../../../interfaces/IPriceOracleGetter.sol","id":16014,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17172,"sourceUnit":5836,"src":"1142:78:83","symbolAliases":[{"foreign":{"id":16013,"name":"IPriceOracleGetter","nodeType":"Identifier","overloadedDeclarations":[],"src":"1150:18:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"LiquidationLogic","contractDependencies":[],"contractKind":"library","documentation":{"id":16015,"nodeType":"StructuredDocumentation","src":"1222:176:83","text":" @title LiquidationLogic library\n @author Aave\n @notice Implements actions involving management of collateral in the protocol, the main one being the liquidations"},"fullyImplemented":true,"id":17171,"linearizedBaseContracts":[17171],"name":"LiquidationLogic","nameLocation":"1407:16:83","nodeType":"ContractDefinition","nodes":[{"id":16018,"libraryName":{"id":16016,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":21219,"src":"1434:10:83"},"nodeType":"UsingForDirective","src":"1428:29:83","typeName":{"id":16017,"name":"uint256","nodeType":"ElementaryTypeName","src":"1449:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":16021,"libraryName":{"id":16019,"name":"PercentageMath","nodeType":"IdentifierPath","referencedDeclaration":21132,"src":"1466:14:83"},"nodeType":"UsingForDirective","src":"1460:33:83","typeName":{"id":16020,"name":"uint256","nodeType":"ElementaryTypeName","src":"1485:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":16025,"libraryName":{"id":16022,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":18377,"src":"1502:12:83"},"nodeType":"UsingForDirective","src":"1496:46:83","typeName":{"id":16024,"nodeType":"UserDefinedTypeName","pathNode":{"id":16023,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"1519:22:83"},"referencedDeclaration":21379,"src":"1519:22:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}}},{"id":16029,"libraryName":{"id":16026,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":18377,"src":"1551:12:83"},"nodeType":"UsingForDirective","src":"1545:45:83","typeName":{"id":16028,"nodeType":"UserDefinedTypeName","pathNode":{"id":16027,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"1568:21:83"},"referencedDeclaration":21315,"src":"1568:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},{"id":16033,"libraryName":{"id":16030,"name":"UserConfiguration","nodeType":"IdentifierPath","referencedDeclaration":12368,"src":"1599:17:83"},"nodeType":"UsingForDirective","src":"1593:59:83","typeName":{"id":16032,"nodeType":"UserDefinedTypeName","pathNode":{"id":16031,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"1621:30:83"},"referencedDeclaration":21322,"src":"1621:30:83","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},{"id":16037,"libraryName":{"id":16034,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":11857,"src":"1661:20:83"},"nodeType":"UsingForDirective","src":"1655:65:83","typeName":{"id":16036,"nodeType":"UserDefinedTypeName","pathNode":{"id":16035,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"1686:33:83"},"referencedDeclaration":21318,"src":"1686:33:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"id":16041,"libraryName":{"id":16038,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"1729:13:83"},"nodeType":"UsingForDirective","src":"1723:31:83","typeName":{"id":16040,"nodeType":"UserDefinedTypeName","pathNode":{"id":16039,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1747:6:83"},"referencedDeclaration":1442,"src":"1747:6:83","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"anonymous":false,"id":16047,"name":"ReserveUsedAsCollateralEnabled","nameLocation":"1798:30:83","nodeType":"EventDefinition","parameters":{"id":16046,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16043,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1845:7:83","nodeType":"VariableDeclaration","scope":16047,"src":"1829:23:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16042,"name":"address","nodeType":"ElementaryTypeName","src":"1829:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16045,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1870:4:83","nodeType":"VariableDeclaration","scope":16047,"src":"1854:20:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16044,"name":"address","nodeType":"ElementaryTypeName","src":"1854:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1828:47:83"},"src":"1792:84:83"},{"anonymous":false,"id":16053,"name":"ReserveUsedAsCollateralDisabled","nameLocation":"1885:31:83","nodeType":"EventDefinition","parameters":{"id":16052,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16049,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1933:7:83","nodeType":"VariableDeclaration","scope":16053,"src":"1917:23:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16048,"name":"address","nodeType":"ElementaryTypeName","src":"1917:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16051,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1958:4:83","nodeType":"VariableDeclaration","scope":16053,"src":"1942:20:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16050,"name":"address","nodeType":"ElementaryTypeName","src":"1942:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1916:47:83"},"src":"1879:85:83"},{"anonymous":false,"id":16069,"name":"LiquidationCall","nameLocation":"1973:15:83","nodeType":"EventDefinition","parameters":{"id":16068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16055,"indexed":true,"mutability":"mutable","name":"collateralAsset","nameLocation":"2010:15:83","nodeType":"VariableDeclaration","scope":16069,"src":"1994:31:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16054,"name":"address","nodeType":"ElementaryTypeName","src":"1994:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16057,"indexed":true,"mutability":"mutable","name":"debtAsset","nameLocation":"2047:9:83","nodeType":"VariableDeclaration","scope":16069,"src":"2031:25:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16056,"name":"address","nodeType":"ElementaryTypeName","src":"2031:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16059,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"2078:4:83","nodeType":"VariableDeclaration","scope":16069,"src":"2062:20:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16058,"name":"address","nodeType":"ElementaryTypeName","src":"2062:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16061,"indexed":false,"mutability":"mutable","name":"debtToCover","nameLocation":"2096:11:83","nodeType":"VariableDeclaration","scope":16069,"src":"2088:19:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16060,"name":"uint256","nodeType":"ElementaryTypeName","src":"2088:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16063,"indexed":false,"mutability":"mutable","name":"liquidatedCollateralAmount","nameLocation":"2121:26:83","nodeType":"VariableDeclaration","scope":16069,"src":"2113:34:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16062,"name":"uint256","nodeType":"ElementaryTypeName","src":"2113:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16065,"indexed":false,"mutability":"mutable","name":"liquidator","nameLocation":"2161:10:83","nodeType":"VariableDeclaration","scope":16069,"src":"2153:18:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16064,"name":"address","nodeType":"ElementaryTypeName","src":"2153:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16067,"indexed":false,"mutability":"mutable","name":"receiveAToken","nameLocation":"2182:13:83","nodeType":"VariableDeclaration","scope":16069,"src":"2177:18:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16066,"name":"bool","nodeType":"ElementaryTypeName","src":"2177:4:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1988:211:83"},"src":"1967:233:83"},{"constant":true,"documentation":{"id":16070,"nodeType":"StructuredDocumentation","src":"2204:241:83","text":" @dev Default percentage of borrower's debt to be repaid in a liquidation.\n @dev Percentage applied when the users health factor is above `CLOSE_FACTOR_HF_THRESHOLD`\n Expressed in bps, a value of 0.5e4 results in 50.00%"},"id":16073,"mutability":"constant","name":"DEFAULT_LIQUIDATION_CLOSE_FACTOR","nameLocation":"2474:32:83","nodeType":"VariableDeclaration","scope":17171,"src":"2448:66:83","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16071,"name":"uint256","nodeType":"ElementaryTypeName","src":"2448:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"302e356534","id":16072,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2509:5:83","typeDescriptions":{"typeIdentifier":"t_rational_5000_by_1","typeString":"int_const 5000"},"value":"0.5e4"},"visibility":"internal"},{"constant":true,"documentation":{"id":16074,"nodeType":"StructuredDocumentation","src":"2519:239:83","text":" @dev Maximum percentage of borrower's debt to be repaid in a liquidation\n @dev Percentage applied when the users health factor is below `CLOSE_FACTOR_HF_THRESHOLD`\n Expressed in bps, a value of 1e4 results in 100.00%"},"functionSelector":"d2467544","id":16077,"mutability":"constant","name":"MAX_LIQUIDATION_CLOSE_FACTOR","nameLocation":"2785:28:83","nodeType":"VariableDeclaration","scope":17171,"src":"2761:58:83","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16075,"name":"uint256","nodeType":"ElementaryTypeName","src":"2761:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"316534","id":16076,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2816:3:83","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"1e4"},"visibility":"public"},{"constant":true,"documentation":{"id":16078,"nodeType":"StructuredDocumentation","src":"2824:216:83","text":" @dev This constant represents below which health factor value it is possible to liquidate\n an amount of debt corresponding to `MAX_LIQUIDATION_CLOSE_FACTOR`.\n A value of 0.95e18 results in 0.95"},"functionSelector":"a18964a5","id":16081,"mutability":"constant","name":"CLOSE_FACTOR_HF_THRESHOLD","nameLocation":"3067:25:83","nodeType":"VariableDeclaration","scope":17171,"src":"3043:59:83","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16079,"name":"uint256","nodeType":"ElementaryTypeName","src":"3043:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"302e3935653138","id":16080,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3095:7:83","typeDescriptions":{"typeIdentifier":"t_rational_950000000000000000_by_1","typeString":"int_const 950000000000000000"},"value":"0.95e18"},"visibility":"public"},{"canonicalName":"LiquidationLogic.LiquidationCallLocalVars","id":16108,"members":[{"constant":false,"id":16083,"mutability":"mutable","name":"userCollateralBalance","nameLocation":"3153:21:83","nodeType":"VariableDeclaration","scope":16108,"src":"3145:29:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16082,"name":"uint256","nodeType":"ElementaryTypeName","src":"3145:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16085,"mutability":"mutable","name":"userVariableDebt","nameLocation":"3188:16:83","nodeType":"VariableDeclaration","scope":16108,"src":"3180:24:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16084,"name":"uint256","nodeType":"ElementaryTypeName","src":"3180:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16087,"mutability":"mutable","name":"userTotalDebt","nameLocation":"3218:13:83","nodeType":"VariableDeclaration","scope":16108,"src":"3210:21:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16086,"name":"uint256","nodeType":"ElementaryTypeName","src":"3210:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16089,"mutability":"mutable","name":"actualDebtToLiquidate","nameLocation":"3245:21:83","nodeType":"VariableDeclaration","scope":16108,"src":"3237:29:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16088,"name":"uint256","nodeType":"ElementaryTypeName","src":"3237:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16091,"mutability":"mutable","name":"actualCollateralToLiquidate","nameLocation":"3280:27:83","nodeType":"VariableDeclaration","scope":16108,"src":"3272:35:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16090,"name":"uint256","nodeType":"ElementaryTypeName","src":"3272:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16093,"mutability":"mutable","name":"liquidationBonus","nameLocation":"3321:16:83","nodeType":"VariableDeclaration","scope":16108,"src":"3313:24:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16092,"name":"uint256","nodeType":"ElementaryTypeName","src":"3313:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16095,"mutability":"mutable","name":"healthFactor","nameLocation":"3351:12:83","nodeType":"VariableDeclaration","scope":16108,"src":"3343:20:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16094,"name":"uint256","nodeType":"ElementaryTypeName","src":"3343:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16097,"mutability":"mutable","name":"liquidationProtocolFeeAmount","nameLocation":"3377:28:83","nodeType":"VariableDeclaration","scope":16108,"src":"3369:36:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16096,"name":"uint256","nodeType":"ElementaryTypeName","src":"3369:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16099,"mutability":"mutable","name":"collateralPriceSource","nameLocation":"3419:21:83","nodeType":"VariableDeclaration","scope":16108,"src":"3411:29:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16098,"name":"address","nodeType":"ElementaryTypeName","src":"3411:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16101,"mutability":"mutable","name":"debtPriceSource","nameLocation":"3454:15:83","nodeType":"VariableDeclaration","scope":16108,"src":"3446:23:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16100,"name":"address","nodeType":"ElementaryTypeName","src":"3446:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16104,"mutability":"mutable","name":"collateralAToken","nameLocation":"3483:16:83","nodeType":"VariableDeclaration","scope":16108,"src":"3475:24:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"},"typeName":{"id":16103,"nodeType":"UserDefinedTypeName","pathNode":{"id":16102,"name":"IAToken","nodeType":"IdentifierPath","referencedDeclaration":3861,"src":"3475:7:83"},"referencedDeclaration":3861,"src":"3475:7:83","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"visibility":"internal"},{"constant":false,"id":16107,"mutability":"mutable","name":"debtReserveCache","nameLocation":"3528:16:83","nodeType":"VariableDeclaration","scope":16108,"src":"3505:39:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":16106,"nodeType":"UserDefinedTypeName","pathNode":{"id":16105,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"3505:22:83"},"referencedDeclaration":21379,"src":"3505:22:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"name":"LiquidationCallLocalVars","nameLocation":"3114:24:83","nodeType":"StructDefinition","scope":17171,"src":"3107:442:83","visibility":"public"},{"body":{"id":16491,"nodeType":"Block","src":"4650:4584:83","statements":[{"assignments":[16136],"declarations":[{"constant":false,"id":16136,"mutability":"mutable","name":"vars","nameLocation":"4688:4:83","nodeType":"VariableDeclaration","scope":16491,"src":"4656:36:83","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars"},"typeName":{"id":16135,"nodeType":"UserDefinedTypeName","pathNode":{"id":16134,"name":"LiquidationCallLocalVars","nodeType":"IdentifierPath","referencedDeclaration":16108,"src":"4656:24:83"},"referencedDeclaration":16108,"src":"4656:24:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_storage_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars"}},"visibility":"internal"}],"id":16137,"nodeType":"VariableDeclarationStatement","src":"4656:36:83"},{"assignments":[16142],"declarations":[{"constant":false,"id":16142,"mutability":"mutable","name":"collateralReserve","nameLocation":"4729:17:83","nodeType":"VariableDeclaration","scope":16491,"src":"4699:47:83","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":16141,"nodeType":"UserDefinedTypeName","pathNode":{"id":16140,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"4699:21:83"},"referencedDeclaration":21315,"src":"4699:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":16147,"initialValue":{"baseExpression":{"id":16143,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16114,"src":"4749:12:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":16146,"indexExpression":{"expression":{"id":16144,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"4762:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16145,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAsset","nodeType":"MemberAccess","referencedDeclaration":21385,"src":"4762:22:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4749:36:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"4699:86:83"},{"assignments":[16152],"declarations":[{"constant":false,"id":16152,"mutability":"mutable","name":"debtReserve","nameLocation":"4821:11:83","nodeType":"VariableDeclaration","scope":16491,"src":"4791:41:83","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":16151,"nodeType":"UserDefinedTypeName","pathNode":{"id":16150,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"4791:21:83"},"referencedDeclaration":21315,"src":"4791:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":16157,"initialValue":{"baseExpression":{"id":16153,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16114,"src":"4835:12:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":16156,"indexExpression":{"expression":{"id":16154,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"4848:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16155,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtAsset","nodeType":"MemberAccess","referencedDeclaration":21387,"src":"4848:16:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4835:30:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"4791:74:83"},{"assignments":[16162],"declarations":[{"constant":false,"id":16162,"mutability":"mutable","name":"userConfig","nameLocation":"4910:10:83","nodeType":"VariableDeclaration","scope":16491,"src":"4871:49:83","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":16161,"nodeType":"UserDefinedTypeName","pathNode":{"id":16160,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"4871:30:83"},"referencedDeclaration":21322,"src":"4871:30:83","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"id":16167,"initialValue":{"baseExpression":{"id":16163,"name":"usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16123,"src":"4923:11:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":16166,"indexExpression":{"expression":{"id":16164,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"4935:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16165,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":21389,"src":"4935:11:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4923:24:83","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"4871:76:83"},{"expression":{"id":16174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":16168,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"4953:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16170,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":16107,"src":"4953:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16171,"name":"debtReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16152,"src":"4977:11:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":16172,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cache","nodeType":"MemberAccess","referencedDeclaration":18376,"src":"4977:17:83","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$21315_storage_ptr_$returns$_t_struct$_ReserveCache_$21379_memory_ptr_$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (struct DataTypes.ReserveCache memory)"}},"id":16173,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4977:19:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"src":"4953:43:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":16175,"nodeType":"ExpressionStatement","src":"4953:43:83"},{"expression":{"arguments":[{"expression":{"id":16179,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"5026:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16180,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":16107,"src":"5026:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":16176,"name":"debtReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16152,"src":"5002:11:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":16178,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":17793,"src":"5002:23:83","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$returns$__$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":16181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5002:46:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16182,"nodeType":"ExpressionStatement","src":"5002:46:83"},{"expression":{"id":16205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[null,null,null,null,{"expression":{"id":16183,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"5064:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16185,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"healthFactor","nodeType":"MemberAccess","referencedDeclaration":16095,"src":"5064:17:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null],"id":16186,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"5055:29:83","typeDescriptions":{"typeIdentifier":"t_tuple$__$__$__$__$_t_uint256_$__$","typeString":"tuple(,,,,uint256,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16189,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16114,"src":"5132:12:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":16190,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16118,"src":"5152:12:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":16191,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16128,"src":"5172:15:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"arguments":[{"id":16194,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16162,"src":"5258:10:83","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"expression":{"id":16195,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"5293:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16196,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":21381,"src":"5293:20:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16197,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"5329:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16198,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":21389,"src":"5329:11:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16199,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"5358:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16200,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"priceOracle","nodeType":"MemberAccess","referencedDeclaration":21393,"src":"5358:18:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16201,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"5405:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16202,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":21395,"src":"5405:24:83","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":16192,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"5195:9:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":16193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CalculateUserAccountDataParams","nodeType":"MemberAccess","referencedDeclaration":21556,"src":"5195:40:83","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_CalculateUserAccountDataParams_$21556_storage_ptr_$","typeString":"type(struct DataTypes.CalculateUserAccountDataParams storage pointer)"}},"id":16203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["userConfig","reservesCount","user","oracle","userEModeCategory"],"nodeType":"FunctionCall","src":"5195:243:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}],"expression":{"id":16187,"name":"GenericLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15855,"src":"5087:12:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GenericLogic_$15855_$","typeString":"type(library GenericLogic)"}},"id":16188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateUserAccountData","nodeType":"MemberAccess","referencedDeclaration":15713,"src":"5087:37:83","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_$_t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.CalculateUserAccountDataParams memory) view returns (uint256,uint256,uint256,uint256,uint256,bool)"}},"id":16204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5087:357:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,bool)"}},"src":"5055:389:83","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16206,"nodeType":"ExpressionStatement","src":"5055:389:83"},{"expression":{"id":16222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":16207,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"5452:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16209,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userVariableDebt","nodeType":"MemberAccess","referencedDeclaration":16085,"src":"5452:21:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16210,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"5475:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16211,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userTotalDebt","nodeType":"MemberAccess","referencedDeclaration":16087,"src":"5475:18:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16212,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"5495:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16213,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"actualDebtToLiquidate","nodeType":"MemberAccess","referencedDeclaration":16089,"src":"5495:26:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16214,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"5451:71:83","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":16216,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"5547:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16217,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":16107,"src":"5547:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":16218,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"5576:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},{"expression":{"id":16219,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"5590:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16220,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"healthFactor","nodeType":"MemberAccess","referencedDeclaration":16095,"src":"5590:17:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16215,"name":"_calculateDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16801,"src":"5525:14:83","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveCache_$21379_memory_ptr_$_t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct DataTypes.ReserveCache memory,struct DataTypes.ExecuteLiquidationCallParams memory,uint256) view returns (uint256,uint256,uint256)"}},"id":16221,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5525:88:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"src":"5451:162:83","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16223,"nodeType":"ExpressionStatement","src":"5451:162:83"},{"expression":{"arguments":[{"id":16227,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16162,"src":"5667:10:83","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"id":16228,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16142,"src":"5685:17:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"arguments":[{"expression":{"id":16231,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"5778:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16232,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":16107,"src":"5778:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"expression":{"id":16233,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"5820:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16234,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userTotalDebt","nodeType":"MemberAccess","referencedDeclaration":16087,"src":"5820:18:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16235,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"5862:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16236,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"healthFactor","nodeType":"MemberAccess","referencedDeclaration":16095,"src":"5862:17:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16237,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"5910:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16238,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"priceOracleSentinel","nodeType":"MemberAccess","referencedDeclaration":21397,"src":"5910:26:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16229,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"5710:9:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":16230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ValidateLiquidationCallParams","nodeType":"MemberAccess","referencedDeclaration":21598,"src":"5710:39:83","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ValidateLiquidationCallParams_$21598_storage_ptr_$","typeString":"type(struct DataTypes.ValidateLiquidationCallParams storage pointer)"}},"id":16239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["debtReserveCache","totalDebt","healthFactor","priceOracleSentinel"],"nodeType":"FunctionCall","src":"5710:235:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallParams_$21598_memory_ptr","typeString":"struct DataTypes.ValidateLiquidationCallParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_struct$_ValidateLiquidationCallParams_$21598_memory_ptr","typeString":"struct DataTypes.ValidateLiquidationCallParams memory"}],"expression":{"id":16224,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20908,"src":"5620:15:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$20908_$","typeString":"type(library ValidationLogic)"}},"id":16226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateLiquidationCall","nodeType":"MemberAccess","referencedDeclaration":20459,"src":"5620:39:83","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ValidateLiquidationCallParams_$21598_memory_ptr_$returns$__$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveData storage pointer,struct DataTypes.ValidateLiquidationCallParams memory) view"}},"id":16240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5620:331:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16241,"nodeType":"ExpressionStatement","src":"5620:331:83"},{"expression":{"id":16257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":16242,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"5966:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16244,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"collateralAToken","nodeType":"MemberAccess","referencedDeclaration":16104,"src":"5966:21:83","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},{"expression":{"id":16245,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"5995:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16246,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"collateralPriceSource","nodeType":"MemberAccess","referencedDeclaration":16099,"src":"5995:26:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16247,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"6029:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16248,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"debtPriceSource","nodeType":"MemberAccess","referencedDeclaration":16101,"src":"6029:20:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16249,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"6057:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16250,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"liquidationBonus","nodeType":"MemberAccess","referencedDeclaration":16093,"src":"6057:21:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16251,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"5958:126:83","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IAToken_$3861_$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(contract IAToken,address,address,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16253,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16128,"src":"6109:15:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"id":16254,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16142,"src":"6126:17:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"id":16255,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"6145:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}],"id":16252,"name":"_getConfigurationData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16914,"src":"6087:21:83","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr_$returns$_t_contract$_IAToken_$3861_$_t_address_$_t_address_$_t_uint256_$","typeString":"function (mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.ReserveData storage pointer,struct DataTypes.ExecuteLiquidationCallParams memory) view returns (contract IAToken,address,address,uint256)"}},"id":16256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6087:65:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IAToken_$3861_$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(contract IAToken,address,address,uint256)"}},"src":"5958:194:83","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16258,"nodeType":"ExpressionStatement","src":"5958:194:83"},{"expression":{"id":16268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":16259,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"6159:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16261,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userCollateralBalance","nodeType":"MemberAccess","referencedDeclaration":16083,"src":"6159:26:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":16265,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"6220:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16266,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":21389,"src":"6220:11:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":16262,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"6188:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16263,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAToken","nodeType":"MemberAccess","referencedDeclaration":16104,"src":"6188:21:83","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":16264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"6188:31:83","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":16267,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6188:44:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6159:73:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16269,"nodeType":"ExpressionStatement","src":"6159:73:83"},{"expression":{"id":16297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":16270,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"6247:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16272,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"actualCollateralToLiquidate","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"6247:32:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16273,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"6287:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16274,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"actualDebtToLiquidate","nodeType":"MemberAccess","referencedDeclaration":16089,"src":"6287:26:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16275,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"6321:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16276,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"liquidationProtocolFeeAmount","nodeType":"MemberAccess","referencedDeclaration":16097,"src":"6321:33:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16277,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"6239:121:83","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16279,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16142,"src":"6411:17:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"expression":{"id":16280,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"6436:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16281,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":16107,"src":"6436:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"expression":{"id":16282,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"6465:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16283,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralPriceSource","nodeType":"MemberAccess","referencedDeclaration":16099,"src":"6465:26:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16284,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"6499:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16285,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtPriceSource","nodeType":"MemberAccess","referencedDeclaration":16101,"src":"6499:20:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16286,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"6527:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16287,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualDebtToLiquidate","nodeType":"MemberAccess","referencedDeclaration":16089,"src":"6527:26:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16288,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"6561:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16289,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userCollateralBalance","nodeType":"MemberAccess","referencedDeclaration":16083,"src":"6561:26:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16290,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"6595:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16291,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationBonus","nodeType":"MemberAccess","referencedDeclaration":16093,"src":"6595:21:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":16293,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"6643:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16294,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"priceOracle","nodeType":"MemberAccess","referencedDeclaration":21393,"src":"6643:18:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16292,"name":"IPriceOracleGetter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5835,"src":"6624:18:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPriceOracleGetter_$5835_$","typeString":"type(contract IPriceOracleGetter)"}},"id":16295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6624:38:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"}],"id":16278,"name":"_calculateAvailableCollateralToLiquidate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17170,"src":"6363:40:83","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_contract$_IPriceOracleGetter_$5835_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,address,uint256,uint256,uint256,contract IPriceOracleGetter) view returns (uint256,uint256,uint256)"}},"id":16296,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6363:305:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"src":"6239:429:83","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16298,"nodeType":"ExpressionStatement","src":"6239:429:83"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":16299,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"6679:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16300,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userTotalDebt","nodeType":"MemberAccess","referencedDeclaration":16087,"src":"6679:18:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":16301,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"6701:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16302,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualDebtToLiquidate","nodeType":"MemberAccess","referencedDeclaration":16089,"src":"6701:26:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6679:48:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16313,"nodeType":"IfStatement","src":"6675:115:83","trueBody":{"id":16312,"nodeType":"Block","src":"6729:61:83","statements":[{"expression":{"arguments":[{"expression":{"id":16307,"name":"debtReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16152,"src":"6761:11:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":16308,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"6761:14:83","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"hexValue":"66616c7365","id":16309,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6777:5:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":16304,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16162,"src":"6737:10:83","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":16306,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setBorrowing","nodeType":"MemberAccess","referencedDeclaration":11924,"src":"6737:23:83","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_uint256_$_t_bool_$returns$__$bound_to$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)"}},"id":16310,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6737:46:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16311,"nodeType":"ExpressionStatement","src":"6737:46:83"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":16314,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"6946:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16315,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualCollateralToLiquidate","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"6946:32:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":16316,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"6981:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16317,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationProtocolFeeAmount","nodeType":"MemberAccess","referencedDeclaration":16097,"src":"6981:33:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6946:68:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":16319,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"7024:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16320,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userCollateralBalance","nodeType":"MemberAccess","referencedDeclaration":16083,"src":"7024:26:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6946:104:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16338,"nodeType":"IfStatement","src":"6935:278:83","trueBody":{"id":16337,"nodeType":"Block","src":"7057:156:83","statements":[{"expression":{"arguments":[{"expression":{"id":16325,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16142,"src":"7097:17:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":16326,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"7097:20:83","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"hexValue":"66616c7365","id":16327,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7119:5:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":16322,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16162,"src":"7065:10:83","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":16324,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":11975,"src":"7065:31:83","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_uint256_$_t_bool_$returns$__$bound_to$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)"}},"id":16328,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7065:60:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16329,"nodeType":"ExpressionStatement","src":"7065:60:83"},{"eventCall":{"arguments":[{"expression":{"id":16331,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"7170:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16332,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAsset","nodeType":"MemberAccess","referencedDeclaration":21385,"src":"7170:22:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16333,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"7194:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16334,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":21389,"src":"7194:11:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":16330,"name":"ReserveUsedAsCollateralDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16053,"src":"7138:31:83","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":16335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7138:68:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16336,"nodeType":"EmitStatement","src":"7133:73:83"}]}},{"expression":{"arguments":[{"id":16340,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"7235:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},{"id":16341,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"7243:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"},{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}],"id":16339,"name":"_burnDebtTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16733,"src":"7219:15:83","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr_$_t_struct$_LiquidationCallLocalVars_$16108_memory_ptr_$returns$__$","typeString":"function (struct DataTypes.ExecuteLiquidationCallParams memory,struct LiquidationLogic.LiquidationCallLocalVars memory)"}},"id":16342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7219:29:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16343,"nodeType":"ExpressionStatement","src":"7219:29:83"},{"expression":{"arguments":[{"expression":{"id":16347,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"7294:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16348,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":16107,"src":"7294:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"expression":{"id":16349,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"7323:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16350,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtAsset","nodeType":"MemberAccess","referencedDeclaration":21387,"src":"7323:16:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16351,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"7347:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16352,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualDebtToLiquidate","nodeType":"MemberAccess","referencedDeclaration":16089,"src":"7347:26:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":16353,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7381:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":16344,"name":"debtReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16152,"src":"7255:11:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":16346,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateInterestRates","nodeType":"MemberAccess","referencedDeclaration":18024,"src":"7255:31:83","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,uint256,uint256)"}},"id":16354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7255:133:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16355,"nodeType":"ExpressionStatement","src":"7255:133:83"},{"expression":{"arguments":[{"id":16359,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16114,"src":"7450:12:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":16360,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16118,"src":"7470:12:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":16361,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16162,"src":"7490:10:83","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"expression":{"id":16362,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"7508:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16363,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":16107,"src":"7508:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"expression":{"id":16364,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"7537:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16365,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualDebtToLiquidate","nodeType":"MemberAccess","referencedDeclaration":16089,"src":"7537:26:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16356,"name":"IsolationModeLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15978,"src":"7395:18:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IsolationModeLogic_$15978_$","typeString":"type(library IsolationModeLogic)"}},"id":16358,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"updateIsolatedDebtIfIsolated","nodeType":"MemberAccess","referencedDeclaration":15977,"src":"7395:47:83","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveCache memory,uint256)"}},"id":16366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7395:174:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16367,"nodeType":"ExpressionStatement","src":"7395:174:83"},{"condition":{"expression":{"id":16368,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"7580:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16369,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiveAToken","nodeType":"MemberAccess","referencedDeclaration":21391,"src":"7580:20:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":16386,"nodeType":"Block","src":"7714:70:83","statements":[{"expression":{"arguments":[{"id":16381,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16142,"src":"7745:17:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"id":16382,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"7764:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},{"id":16383,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"7772:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"},{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}],"id":16380,"name":"_burnCollateralATokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16547,"src":"7722:22:83","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr_$_t_struct$_LiquidationCallLocalVars_$16108_memory_ptr_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ExecuteLiquidationCallParams memory,struct LiquidationLogic.LiquidationCallLocalVars memory)"}},"id":16384,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7722:55:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16385,"nodeType":"ExpressionStatement","src":"7722:55:83"}]},"id":16387,"nodeType":"IfStatement","src":"7576:208:83","trueBody":{"id":16379,"nodeType":"Block","src":"7602:106:83","statements":[{"expression":{"arguments":[{"id":16371,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16114,"src":"7628:12:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":16372,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16118,"src":"7642:12:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":16373,"name":"usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16123,"src":"7656:11:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},{"id":16374,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16142,"src":"7669:17:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"id":16375,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"7688:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},{"id":16376,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"7696:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"},{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"},{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}],"id":16370,"name":"_liquidateATokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16641,"src":"7610:17:83","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$_$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr_$_t_struct$_LiquidationCallLocalVars_$16108_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(address => struct DataTypes.UserConfigurationMap storage ref),struct DataTypes.ReserveData storage pointer,struct DataTypes.ExecuteLiquidationCallParams memory,struct LiquidationLogic.LiquidationCallLocalVars memory)"}},"id":16377,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7610:91:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16378,"nodeType":"ExpressionStatement","src":"7610:91:83"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":16388,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"7844:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16389,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationProtocolFeeAmount","nodeType":"MemberAccess","referencedDeclaration":16097,"src":"7844:33:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":16390,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7881:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7844:38:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16445,"nodeType":"IfStatement","src":"7840:783:83","trueBody":{"id":16444,"nodeType":"Block","src":"7884:739:83","statements":[{"assignments":[16393],"declarations":[{"constant":false,"id":16393,"mutability":"mutable","name":"liquidityIndex","nameLocation":"7900:14:83","nodeType":"VariableDeclaration","scope":16444,"src":"7892:22:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16392,"name":"uint256","nodeType":"ElementaryTypeName","src":"7892:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16397,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16394,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16142,"src":"7917:17:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":16395,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getNormalizedIncome","nodeType":"MemberAccess","referencedDeclaration":17715,"src":"7917:37:83","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$21315_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (uint256)"}},"id":16396,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7917:39:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7892:64:83"},{"assignments":[16399],"declarations":[{"constant":false,"id":16399,"mutability":"mutable","name":"scaledDownLiquidationProtocolFee","nameLocation":"7972:32:83","nodeType":"VariableDeclaration","scope":16444,"src":"7964:40:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16398,"name":"uint256","nodeType":"ElementaryTypeName","src":"7964:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16405,"initialValue":{"arguments":[{"id":16403,"name":"liquidityIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16393,"src":"8057:14:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":16400,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"8007:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16401,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationProtocolFeeAmount","nodeType":"MemberAccess","referencedDeclaration":16097,"src":"8007:33:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":21198,"src":"8007:40:83","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":16404,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8007:72:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7964:115:83"},{"assignments":[16407],"declarations":[{"constant":false,"id":16407,"mutability":"mutable","name":"scaledDownUserBalance","nameLocation":"8095:21:83","nodeType":"VariableDeclaration","scope":16444,"src":"8087:29:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16406,"name":"uint256","nodeType":"ElementaryTypeName","src":"8087:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16414,"initialValue":{"arguments":[{"expression":{"id":16411,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"8157:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16412,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":21389,"src":"8157:11:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"expression":{"id":16408,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"8119:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16409,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAToken","nodeType":"MemberAccess","referencedDeclaration":16104,"src":"8119:21:83","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":16410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"scaledBalanceOf","nodeType":"MemberAccess","referencedDeclaration":5950,"src":"8119:37:83","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":16413,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8119:50:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8087:82:83"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16415,"name":"scaledDownLiquidationProtocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16399,"src":"8279:32:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":16416,"name":"scaledDownUserBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16407,"src":"8314:21:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8279:56:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16428,"nodeType":"IfStatement","src":"8275:161:83","trueBody":{"id":16427,"nodeType":"Block","src":"8337:99:83","statements":[{"expression":{"id":16425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":16418,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"8347:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16420,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"liquidationProtocolFeeAmount","nodeType":"MemberAccess","referencedDeclaration":16097,"src":"8347:33:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16423,"name":"liquidityIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16393,"src":"8412:14:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16421,"name":"scaledDownUserBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16407,"src":"8383:21:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"8383:28:83","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":16424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8383:44:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8347:80:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16426,"nodeType":"ExpressionStatement","src":"8347:80:83"}]}},{"expression":{"arguments":[{"expression":{"id":16434,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"8496:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16435,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":21389,"src":"8496:11:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":16436,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"8517:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16437,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAToken","nodeType":"MemberAccess","referencedDeclaration":16104,"src":"8517:21:83","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":16438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_TREASURY_ADDRESS","nodeType":"MemberAccess","referencedDeclaration":3836,"src":"8517:46:83","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":16439,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8517:48:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16440,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"8575:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16441,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationProtocolFeeAmount","nodeType":"MemberAccess","referencedDeclaration":16097,"src":"8575:33:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":16429,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"8443:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16432,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAToken","nodeType":"MemberAccess","referencedDeclaration":16104,"src":"8443:21:83","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":16433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferOnLiquidation","nodeType":"MemberAccess","referencedDeclaration":3788,"src":"8443:43:83","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":16442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8443:173:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16443,"nodeType":"ExpressionStatement","src":"8443:173:83"}]}},{"expression":{"arguments":[{"expression":{"id":16451,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8766:3:83","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"8766:10:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"expression":{"id":16453,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"8784:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16454,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":16107,"src":"8784:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":16455,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"8784:35:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16456,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"8827:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16457,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualDebtToLiquidate","nodeType":"MemberAccess","referencedDeclaration":16089,"src":"8827:26:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":16447,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"8724:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16448,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtAsset","nodeType":"MemberAccess","referencedDeclaration":21387,"src":"8724:16:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16446,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"8717:6:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":16449,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8717:24:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":16450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":106,"src":"8717:41:83","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":16458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8717:142:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16459,"nodeType":"ExpressionStatement","src":"8717:142:83"},{"expression":{"arguments":[{"expression":{"id":16466,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8934:3:83","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"8934:10:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16468,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"8952:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16469,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":21389,"src":"8952:11:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16470,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"8971:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16471,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualDebtToLiquidate","nodeType":"MemberAccess","referencedDeclaration":16089,"src":"8971:26:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"expression":{"id":16461,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"8874:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16462,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":16107,"src":"8874:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":16463,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"8874:35:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16460,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3861,"src":"8866:7:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3861_$","typeString":"type(contract IAToken)"}},"id":16464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8866:44:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":16465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"handleRepayment","nodeType":"MemberAccess","referencedDeclaration":3806,"src":"8866:60:83","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":16472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8866:137:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16473,"nodeType":"ExpressionStatement","src":"8866:137:83"},{"eventCall":{"arguments":[{"expression":{"id":16475,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"9038:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16476,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAsset","nodeType":"MemberAccess","referencedDeclaration":21385,"src":"9038:22:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16477,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"9068:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16478,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtAsset","nodeType":"MemberAccess","referencedDeclaration":21387,"src":"9068:16:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16479,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"9092:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16480,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":21389,"src":"9092:11:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16481,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"9111:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16482,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualDebtToLiquidate","nodeType":"MemberAccess","referencedDeclaration":16089,"src":"9111:26:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16483,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16136,"src":"9145:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16484,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualCollateralToLiquidate","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"9145:32:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16485,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9185:3:83","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"9185:10:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16487,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"9203:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16488,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"receiveAToken","nodeType":"MemberAccess","referencedDeclaration":21391,"src":"9203:20:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":16474,"name":"LiquidationCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16069,"src":"9015:15:83","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,address,uint256,uint256,address,bool)"}},"id":16489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9015:214:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16490,"nodeType":"EmitStatement","src":"9010:219:83"}]},"documentation":{"id":16109,"nodeType":"StructuredDocumentation","src":"3553:722:83","text":" @notice Function to liquidate a position if its Health Factor drops below 1. The caller (liquidator)\n covers `debtToCover` amount of debt of the user getting liquidated, and receives\n a proportional amount of the `collateralAsset` plus a bonus to cover market risk\n @dev Emits the `LiquidationCall()` event\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param usersConfig The users configuration mapping that track the supplied/borrowed assets\n @param eModeCategories The configuration of all the efficiency mode categories\n @param params The additional parameters needed to execute the liquidation function"},"functionSelector":"83c1087d","id":16492,"implemented":true,"kind":"function","modifiers":[],"name":"executeLiquidationCall","nameLocation":"4287:22:83","nodeType":"FunctionDefinition","parameters":{"id":16132,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16114,"mutability":"mutable","name":"reservesData","nameLocation":"4365:12:83","nodeType":"VariableDeclaration","scope":16492,"src":"4315:62:83","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":16113,"keyType":{"id":16110,"name":"address","nodeType":"ElementaryTypeName","src":"4323:7:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"4315:41:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":16112,"nodeType":"UserDefinedTypeName","pathNode":{"id":16111,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"4334:21:83"},"referencedDeclaration":21315,"src":"4334:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":16118,"mutability":"mutable","name":"reservesList","nameLocation":"4419:12:83","nodeType":"VariableDeclaration","scope":16492,"src":"4383:48:83","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":16117,"keyType":{"id":16115,"name":"uint256","nodeType":"ElementaryTypeName","src":"4391:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"4383:27:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":16116,"name":"address","nodeType":"ElementaryTypeName","src":"4402:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":16123,"mutability":"mutable","name":"usersConfig","nameLocation":"4496:11:83","nodeType":"VariableDeclaration","scope":16492,"src":"4437:70:83","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap)"},"typeName":{"id":16122,"keyType":{"id":16119,"name":"address","nodeType":"ElementaryTypeName","src":"4445:7:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"4437:50:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap)"},"valueType":{"id":16121,"nodeType":"UserDefinedTypeName","pathNode":{"id":16120,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"4456:30:83"},"referencedDeclaration":21322,"src":"4456:30:83","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},"visibility":"internal"},{"constant":false,"id":16128,"mutability":"mutable","name":"eModeCategories","nameLocation":"4563:15:83","nodeType":"VariableDeclaration","scope":16492,"src":"4513:65:83","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":16127,"keyType":{"id":16124,"name":"uint8","nodeType":"ElementaryTypeName","src":"4521:5:83","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"4513:41:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":16126,"nodeType":"UserDefinedTypeName","pathNode":{"id":16125,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":21333,"src":"4530:23:83"},"referencedDeclaration":21333,"src":"4530:23:83","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":16131,"mutability":"mutable","name":"params","nameLocation":"4630:6:83","nodeType":"VariableDeclaration","scope":16492,"src":"4584:52:83","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams"},"typeName":{"id":16130,"nodeType":"UserDefinedTypeName","pathNode":{"id":16129,"name":"DataTypes.ExecuteLiquidationCallParams","nodeType":"IdentifierPath","referencedDeclaration":21398,"src":"4584:38:83"},"referencedDeclaration":21398,"src":"4584:38:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_storage_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams"}},"visibility":"internal"}],"src":"4309:331:83"},"returnParameters":{"id":16133,"nodeType":"ParameterList","parameters":[],"src":"4650:0:83"},"scope":17171,"src":"4278:4956:83","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":16546,"nodeType":"Block","src":"9854:559:83","statements":[{"assignments":[16509],"declarations":[{"constant":false,"id":16509,"mutability":"mutable","name":"collateralReserveCache","nameLocation":"9890:22:83","nodeType":"VariableDeclaration","scope":16546,"src":"9860:52:83","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":16508,"nodeType":"UserDefinedTypeName","pathNode":{"id":16507,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"9860:22:83"},"referencedDeclaration":21379,"src":"9860:22:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"id":16513,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16510,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16496,"src":"9915:17:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":16511,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cache","nodeType":"MemberAccess","referencedDeclaration":18376,"src":"9915:23:83","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$21315_storage_ptr_$returns$_t_struct$_ReserveCache_$21379_memory_ptr_$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (struct DataTypes.ReserveCache memory)"}},"id":16512,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9915:25:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"nodeType":"VariableDeclarationStatement","src":"9860:80:83"},{"expression":{"arguments":[{"id":16517,"name":"collateralReserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16509,"src":"9976:22:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":16514,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16496,"src":"9946:17:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":16516,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":17793,"src":"9946:29:83","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$returns$__$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":16518,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9946:53:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16519,"nodeType":"ExpressionStatement","src":"9946:53:83"},{"expression":{"arguments":[{"id":16523,"name":"collateralReserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16509,"src":"10050:22:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"expression":{"id":16524,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16499,"src":"10080:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16525,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAsset","nodeType":"MemberAccess","referencedDeclaration":21385,"src":"10080:22:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":16526,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10110:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"id":16527,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16502,"src":"10119:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16528,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualCollateralToLiquidate","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"10119:32:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16520,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16496,"src":"10005:17:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":16522,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateInterestRates","nodeType":"MemberAccess","referencedDeclaration":18024,"src":"10005:37:83","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,uint256,uint256)"}},"id":16529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10005:152:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16530,"nodeType":"ExpressionStatement","src":"10005:152:83"},{"expression":{"arguments":[{"expression":{"id":16536,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16499,"src":"10284:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16537,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":21389,"src":"10284:11:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16538,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10303:3:83","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"10303:10:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16540,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16502,"src":"10321:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16541,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualCollateralToLiquidate","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"10321:32:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16542,"name":"collateralReserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16509,"src":"10361:22:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":16543,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21355,"src":"10361:41:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":16531,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16502,"src":"10250:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16534,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAToken","nodeType":"MemberAccess","referencedDeclaration":16104,"src":"10250:21:83","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":16535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":3770,"src":"10250:26:83","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256) external"}},"id":16544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10250:158:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16545,"nodeType":"ExpressionStatement","src":"10250:158:83"}]},"documentation":{"id":16493,"nodeType":"StructuredDocumentation","src":"9238:415:83","text":" @notice Burns the collateral aTokens and transfers the underlying to the liquidator.\n @dev   The function also updates the state and the interest rate of the collateral reserve.\n @param collateralReserve The data of the collateral reserve\n @param params The additional parameters needed to execute the liquidation function\n @param vars The executeLiquidationCall() function local vars"},"id":16547,"implemented":true,"kind":"function","modifiers":[],"name":"_burnCollateralATokens","nameLocation":"9665:22:83","nodeType":"FunctionDefinition","parameters":{"id":16503,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16496,"mutability":"mutable","name":"collateralReserve","nameLocation":"9723:17:83","nodeType":"VariableDeclaration","scope":16547,"src":"9693:47:83","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":16495,"nodeType":"UserDefinedTypeName","pathNode":{"id":16494,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"9693:21:83"},"referencedDeclaration":21315,"src":"9693:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":16499,"mutability":"mutable","name":"params","nameLocation":"9792:6:83","nodeType":"VariableDeclaration","scope":16547,"src":"9746:52:83","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams"},"typeName":{"id":16498,"nodeType":"UserDefinedTypeName","pathNode":{"id":16497,"name":"DataTypes.ExecuteLiquidationCallParams","nodeType":"IdentifierPath","referencedDeclaration":21398,"src":"9746:38:83"},"referencedDeclaration":21398,"src":"9746:38:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_storage_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams"}},"visibility":"internal"},{"constant":false,"id":16502,"mutability":"mutable","name":"vars","nameLocation":"9836:4:83","nodeType":"VariableDeclaration","scope":16547,"src":"9804:36:83","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars"},"typeName":{"id":16501,"nodeType":"UserDefinedTypeName","pathNode":{"id":16500,"name":"LiquidationCallLocalVars","nodeType":"IdentifierPath","referencedDeclaration":16108,"src":"9804:24:83"},"referencedDeclaration":16108,"src":"9804:24:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_storage_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars"}},"visibility":"internal"}],"src":"9687:157:83"},"returnParameters":{"id":16504,"nodeType":"ParameterList","parameters":[],"src":"9854:0:83"},"scope":17171,"src":"9656:757:83","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16640,"nodeType":"Block","src":"11527:794:83","statements":[{"assignments":[16575],"declarations":[{"constant":false,"id":16575,"mutability":"mutable","name":"liquidatorPreviousATokenBalance","nameLocation":"11541:31:83","nodeType":"VariableDeclaration","scope":16640,"src":"11533:39:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16574,"name":"uint256","nodeType":"ElementaryTypeName","src":"11533:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16584,"initialValue":{"arguments":[{"expression":{"id":16581,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11615:3:83","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"11615:10:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":16577,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16571,"src":"11582:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16578,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAToken","nodeType":"MemberAccess","referencedDeclaration":16104,"src":"11582:21:83","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}],"id":16576,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"11575:6:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":16579,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11575:29:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":16580,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"11575:39:83","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":16583,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11575:51:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11533:93:83"},{"expression":{"arguments":[{"expression":{"id":16590,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16568,"src":"11683:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16591,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":21389,"src":"11683:11:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16592,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11702:3:83","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"11702:10:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16594,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16571,"src":"11720:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16595,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualCollateralToLiquidate","nodeType":"MemberAccess","referencedDeclaration":16091,"src":"11720:32:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":16585,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16571,"src":"11632:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16588,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAToken","nodeType":"MemberAccess","referencedDeclaration":16104,"src":"11632:21:83","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":16589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferOnLiquidation","nodeType":"MemberAccess","referencedDeclaration":3788,"src":"11632:43:83","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":16596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11632:126:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16597,"nodeType":"ExpressionStatement","src":"11632:126:83"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16598,"name":"liquidatorPreviousATokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16575,"src":"11769:31:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":16599,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11804:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11769:36:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16639,"nodeType":"IfStatement","src":"11765:552:83","trueBody":{"id":16638,"nodeType":"Block","src":"11807:510:83","statements":[{"assignments":[16605],"declarations":[{"constant":false,"id":16605,"mutability":"mutable","name":"liquidatorConfig","nameLocation":"11854:16:83","nodeType":"VariableDeclaration","scope":16638,"src":"11815:55:83","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":16604,"nodeType":"UserDefinedTypeName","pathNode":{"id":16603,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"11815:30:83"},"referencedDeclaration":21322,"src":"11815:30:83","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"id":16610,"initialValue":{"baseExpression":{"id":16606,"name":"usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16562,"src":"11873:11:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":16609,"indexExpression":{"expression":{"id":16607,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11885:3:83","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"11885:10:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11873:23:83","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"11815:81:83"},{"condition":{"arguments":[{"id":16613,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16553,"src":"11977:12:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":16614,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16557,"src":"12001:12:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":16615,"name":"liquidatorConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16605,"src":"12025:16:83","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"expression":{"id":16616,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16565,"src":"12053:17:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":16617,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":21286,"src":"12053:31:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},{"expression":{"id":16618,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16565,"src":"12096:17:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":16619,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"12096:31:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16611,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20908,"src":"11917:15:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$20908_$","typeString":"type(library ValidationLogic)"}},"id":16612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateAutomaticUseAsCollateral","nodeType":"MemberAccess","referencedDeclaration":20907,"src":"11917:48:83","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_address_$returns$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveConfigurationMap memory,address) view returns (bool)"}},"id":16620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11917:220:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16637,"nodeType":"IfStatement","src":"11904:407:83","trueBody":{"id":16636,"nodeType":"Block","src":"12146:165:83","statements":[{"expression":{"arguments":[{"expression":{"id":16624,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16565,"src":"12194:17:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":16625,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"12194:20:83","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"hexValue":"74727565","id":16626,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12216:4:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":16621,"name":"liquidatorConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16605,"src":"12156:16:83","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":16623,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":11975,"src":"12156:37:83","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_uint256_$_t_bool_$returns$__$bound_to$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)"}},"id":16627,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12156:65:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16628,"nodeType":"ExpressionStatement","src":"12156:65:83"},{"eventCall":{"arguments":[{"expression":{"id":16630,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16568,"src":"12267:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16631,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAsset","nodeType":"MemberAccess","referencedDeclaration":21385,"src":"12267:22:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16632,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12291:3:83","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"12291:10:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":16629,"name":"ReserveUsedAsCollateralEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16047,"src":"12236:30:83","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":16634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12236:66:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16635,"nodeType":"EmitStatement","src":"12231:71:83"}]}}]}}]},"documentation":{"id":16548,"nodeType":"StructuredDocumentation","src":"10417:716:83","text":" @notice Liquidates the user aTokens by transferring them to the liquidator.\n @dev   The function also checks the state of the liquidator and activates the aToken as collateral\n        as in standard transfers if the isolation mode constraints are respected.\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param usersConfig The users configuration mapping that track the supplied/borrowed assets\n @param collateralReserve The data of the collateral reserve\n @param params The additional parameters needed to execute the liquidation function\n @param vars The executeLiquidationCall() function local vars"},"id":16641,"implemented":true,"kind":"function","modifiers":[],"name":"_liquidateATokens","nameLocation":"11145:17:83","nodeType":"FunctionDefinition","parameters":{"id":16572,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16553,"mutability":"mutable","name":"reservesData","nameLocation":"11218:12:83","nodeType":"VariableDeclaration","scope":16641,"src":"11168:62:83","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":16552,"keyType":{"id":16549,"name":"address","nodeType":"ElementaryTypeName","src":"11176:7:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"11168:41:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":16551,"nodeType":"UserDefinedTypeName","pathNode":{"id":16550,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"11187:21:83"},"referencedDeclaration":21315,"src":"11187:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":16557,"mutability":"mutable","name":"reservesList","nameLocation":"11272:12:83","nodeType":"VariableDeclaration","scope":16641,"src":"11236:48:83","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":16556,"keyType":{"id":16554,"name":"uint256","nodeType":"ElementaryTypeName","src":"11244:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"11236:27:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":16555,"name":"address","nodeType":"ElementaryTypeName","src":"11255:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":16562,"mutability":"mutable","name":"usersConfig","nameLocation":"11349:11:83","nodeType":"VariableDeclaration","scope":16641,"src":"11290:70:83","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap)"},"typeName":{"id":16561,"keyType":{"id":16558,"name":"address","nodeType":"ElementaryTypeName","src":"11298:7:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"11290:50:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap)"},"valueType":{"id":16560,"nodeType":"UserDefinedTypeName","pathNode":{"id":16559,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"11309:30:83"},"referencedDeclaration":21322,"src":"11309:30:83","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},"visibility":"internal"},{"constant":false,"id":16565,"mutability":"mutable","name":"collateralReserve","nameLocation":"11396:17:83","nodeType":"VariableDeclaration","scope":16641,"src":"11366:47:83","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":16564,"nodeType":"UserDefinedTypeName","pathNode":{"id":16563,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"11366:21:83"},"referencedDeclaration":21315,"src":"11366:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":16568,"mutability":"mutable","name":"params","nameLocation":"11465:6:83","nodeType":"VariableDeclaration","scope":16641,"src":"11419:52:83","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams"},"typeName":{"id":16567,"nodeType":"UserDefinedTypeName","pathNode":{"id":16566,"name":"DataTypes.ExecuteLiquidationCallParams","nodeType":"IdentifierPath","referencedDeclaration":21398,"src":"11419:38:83"},"referencedDeclaration":21398,"src":"11419:38:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_storage_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams"}},"visibility":"internal"},{"constant":false,"id":16571,"mutability":"mutable","name":"vars","nameLocation":"11509:4:83","nodeType":"VariableDeclaration","scope":16641,"src":"11477:36:83","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars"},"typeName":{"id":16570,"nodeType":"UserDefinedTypeName","pathNode":{"id":16569,"name":"LiquidationCallLocalVars","nodeType":"IdentifierPath","referencedDeclaration":16108,"src":"11477:24:83"},"referencedDeclaration":16108,"src":"11477:24:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_storage_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars"}},"visibility":"internal"}],"src":"11162:355:83"},"returnParameters":{"id":16573,"nodeType":"ParameterList","parameters":[],"src":"11527:0:83"},"scope":17171,"src":"11136:1185:83","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16732,"nodeType":"Block","src":"12827:1010:83","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":16651,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16648,"src":"12837:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16652,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userVariableDebt","nodeType":"MemberAccess","referencedDeclaration":16085,"src":"12837:21:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":16653,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16648,"src":"12862:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16654,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualDebtToLiquidate","nodeType":"MemberAccess","referencedDeclaration":16089,"src":"12862:26:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12837:51:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":16730,"nodeType":"Block","src":"13173:660:83","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":16678,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16648,"src":"13278:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16679,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userVariableDebt","nodeType":"MemberAccess","referencedDeclaration":16085,"src":"13278:21:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":16680,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13303:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13278:26:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16704,"nodeType":"IfStatement","src":"13274:272:83","trueBody":{"id":16703,"nodeType":"Block","src":"13306:240:83","statements":[{"expression":{"id":16701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":16682,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16648,"src":"13316:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16685,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":16107,"src":"13316:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":16686,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":21341,"src":"13316:44:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":16693,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16645,"src":"13455:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16694,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":21389,"src":"13455:11:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16695,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16648,"src":"13468:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16696,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userVariableDebt","nodeType":"MemberAccess","referencedDeclaration":16085,"src":"13468:21:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":16697,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16648,"src":"13491:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16698,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":16107,"src":"13491:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":16699,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":21359,"src":"13491:45:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"expression":{"id":16688,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16648,"src":"13393:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16689,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":16107,"src":"13393:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":16690,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21374,"src":"13393:46:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16687,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6155,"src":"13363:18:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVariableDebtToken_$6155_$","typeString":"type(contract IVariableDebtToken)"}},"id":16691,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13363:86:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVariableDebtToken_$6155","typeString":"contract IVariableDebtToken"}},"id":16692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":6148,"src":"13363:91:83","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,uint256,uint256) external returns (uint256)"}},"id":16700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13363:174:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13316:221:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16702,"nodeType":"ExpressionStatement","src":"13316:221:83"}]}},{"expression":{"id":16728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"expression":{"id":16705,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16648,"src":"13563:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16708,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":16107,"src":"13563:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":16709,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":21351,"src":"13563:41:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":16710,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16648,"src":"13614:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16711,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":16107,"src":"13614:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":16712,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextAvgStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21349,"src":"13614:45:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16713,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"13553:114:83","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":16720,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16645,"src":"13747:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16721,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":21389,"src":"13747:11:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":16722,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16648,"src":"13768:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16723,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualDebtToLiquidate","nodeType":"MemberAccess","referencedDeclaration":16089,"src":"13768:26:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":16724,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16648,"src":"13797:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16725,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userVariableDebt","nodeType":"MemberAccess","referencedDeclaration":16085,"src":"13797:21:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13768:50:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"expression":{"id":16715,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16648,"src":"13687:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16716,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":16107,"src":"13687:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":16717,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21372,"src":"13687:44:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16714,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6109,"src":"13670:16:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6109_$","typeString":"type(contract IStableDebtToken)"}},"id":16718,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13670:62:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6109","typeString":"contract IStableDebtToken"}},"id":16719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":6046,"src":"13670:67:83","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,uint256) external returns (uint256,uint256)"}},"id":16727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13670:156:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"13553:273:83","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16729,"nodeType":"ExpressionStatement","src":"13553:273:83"}]},"id":16731,"nodeType":"IfStatement","src":"12833:1000:83","trueBody":{"id":16677,"nodeType":"Block","src":"12890:277:83","statements":[{"expression":{"id":16675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"expression":{"id":16656,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16648,"src":"12898:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16659,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":16107,"src":"12898:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":16660,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":21341,"src":"12898:44:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":16667,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16645,"src":"13044:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16668,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":21389,"src":"13044:11:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16669,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16648,"src":"13067:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16670,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"actualDebtToLiquidate","nodeType":"MemberAccess","referencedDeclaration":16089,"src":"13067:26:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":16671,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16648,"src":"13105:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16672,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":16107,"src":"13105:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":16673,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":21359,"src":"13105:45:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"expression":{"id":16662,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16648,"src":"12973:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars memory"}},"id":16663,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":16107,"src":"12973:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":16664,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21374,"src":"12973:46:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16661,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6155,"src":"12945:18:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVariableDebtToken_$6155_$","typeString":"type(contract IVariableDebtToken)"}},"id":16665,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12945:82:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVariableDebtToken_$6155","typeString":"contract IVariableDebtToken"}},"id":16666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":6148,"src":"12945:87:83","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,uint256,uint256) external returns (uint256)"}},"id":16674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12945:215:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12898:262:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16676,"nodeType":"ExpressionStatement","src":"12898:262:83"}]}}]},"documentation":{"id":16642,"nodeType":"StructuredDocumentation","src":"12325:361:83","text":" @notice Burns the debt tokens of the user up to the amount being repaid by the liquidator.\n @dev The function alters the `debtReserveCache` state in `vars` to update the debt related data.\n @param params The additional parameters needed to execute the liquidation function\n @param vars the executeLiquidationCall() function local vars"},"id":16733,"implemented":true,"kind":"function","modifiers":[],"name":"_burnDebtTokens","nameLocation":"12698:15:83","nodeType":"FunctionDefinition","parameters":{"id":16649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16645,"mutability":"mutable","name":"params","nameLocation":"12765:6:83","nodeType":"VariableDeclaration","scope":16733,"src":"12719:52:83","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams"},"typeName":{"id":16644,"nodeType":"UserDefinedTypeName","pathNode":{"id":16643,"name":"DataTypes.ExecuteLiquidationCallParams","nodeType":"IdentifierPath","referencedDeclaration":21398,"src":"12719:38:83"},"referencedDeclaration":21398,"src":"12719:38:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_storage_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams"}},"visibility":"internal"},{"constant":false,"id":16648,"mutability":"mutable","name":"vars","nameLocation":"12809:4:83","nodeType":"VariableDeclaration","scope":16733,"src":"12777:36:83","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_memory_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars"},"typeName":{"id":16647,"nodeType":"UserDefinedTypeName","pathNode":{"id":16646,"name":"LiquidationCallLocalVars","nodeType":"IdentifierPath","referencedDeclaration":16108,"src":"12777:24:83"},"referencedDeclaration":16108,"src":"12777:24:83","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidationCallLocalVars_$16108_storage_ptr","typeString":"struct LiquidationLogic.LiquidationCallLocalVars"}},"visibility":"internal"}],"src":"12713:104:83"},"returnParameters":{"id":16650,"nodeType":"ParameterList","parameters":[],"src":"12827:0:83"},"scope":17171,"src":"12689:1148:83","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":16800,"nodeType":"Block","src":"14734:628:83","statements":[{"assignments":[16752,16754],"declarations":[{"constant":false,"id":16752,"mutability":"mutable","name":"userStableDebt","nameLocation":"14749:14:83","nodeType":"VariableDeclaration","scope":16800,"src":"14741:22:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16751,"name":"uint256","nodeType":"ElementaryTypeName","src":"14741:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16754,"mutability":"mutable","name":"userVariableDebt","nameLocation":"14773:16:83","nodeType":"VariableDeclaration","scope":16800,"src":"14765:24:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16753,"name":"uint256","nodeType":"ElementaryTypeName","src":"14765:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16761,"initialValue":{"arguments":[{"expression":{"id":16757,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16740,"src":"14827:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16758,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"user","nodeType":"MemberAccess","referencedDeclaration":21389,"src":"14827:11:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16759,"name":"debtReserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16737,"src":"14846:16:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":16755,"name":"Helpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12680,"src":"14793:7:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Helpers_$12680_$","typeString":"type(library Helpers)"}},"id":16756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getUserCurrentDebt","nodeType":"MemberAccess","referencedDeclaration":12679,"src":"14793:26:83","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_struct$_ReserveCache_$21379_memory_ptr_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,struct DataTypes.ReserveCache memory) view returns (uint256,uint256)"}},"id":16760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14793:75:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"14740:128:83"},{"assignments":[16763],"declarations":[{"constant":false,"id":16763,"mutability":"mutable","name":"userTotalDebt","nameLocation":"14883:13:83","nodeType":"VariableDeclaration","scope":16800,"src":"14875:21:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16762,"name":"uint256","nodeType":"ElementaryTypeName","src":"14875:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16767,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16764,"name":"userStableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16752,"src":"14899:14:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":16765,"name":"userVariableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16754,"src":"14916:16:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14899:33:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14875:57:83"},{"assignments":[16769],"declarations":[{"constant":false,"id":16769,"mutability":"mutable","name":"closeFactor","nameLocation":"14947:11:83","nodeType":"VariableDeclaration","scope":16800,"src":"14939:19:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16768,"name":"uint256","nodeType":"ElementaryTypeName","src":"14939:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16776,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16770,"name":"healthFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16742,"src":"14961:12:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":16771,"name":"CLOSE_FACTOR_HF_THRESHOLD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16081,"src":"14976:25:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14961:40:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":16774,"name":"MAX_LIQUIDATION_CLOSE_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16077,"src":"15051:28:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"14961:118:83","trueExpression":{"id":16773,"name":"DEFAULT_LIQUIDATION_CLOSE_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16073,"src":"15010:32:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14939:140:83"},{"assignments":[16778],"declarations":[{"constant":false,"id":16778,"mutability":"mutable","name":"maxLiquidatableDebt","nameLocation":"15094:19:83","nodeType":"VariableDeclaration","scope":16800,"src":"15086:27:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16777,"name":"uint256","nodeType":"ElementaryTypeName","src":"15086:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16783,"initialValue":{"arguments":[{"id":16781,"name":"closeFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16769,"src":"15141:11:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16779,"name":"userTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16763,"src":"15116:13:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":21119,"src":"15116:24:83","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":16782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15116:37:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15086:67:83"},{"assignments":[16785],"declarations":[{"constant":false,"id":16785,"mutability":"mutable","name":"actualDebtToLiquidate","nameLocation":"15168:21:83","nodeType":"VariableDeclaration","scope":16800,"src":"15160:29:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16784,"name":"uint256","nodeType":"ElementaryTypeName","src":"15160:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16794,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":16786,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16740,"src":"15192:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16787,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtToCover","nodeType":"MemberAccess","referencedDeclaration":21383,"src":"15192:18:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":16788,"name":"maxLiquidatableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16778,"src":"15213:19:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15192:40:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":16791,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16740,"src":"15269:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16792,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtToCover","nodeType":"MemberAccess","referencedDeclaration":21383,"src":"15269:18:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"15192:95:83","trueExpression":{"id":16790,"name":"maxLiquidatableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16778,"src":"15241:19:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15160:127:83"},{"expression":{"components":[{"id":16795,"name":"userVariableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16754,"src":"15302:16:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16796,"name":"userTotalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16763,"src":"15320:13:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16797,"name":"actualDebtToLiquidate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16785,"src":"15335:21:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16798,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"15301:56:83","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"functionReturnParameters":16750,"id":16799,"nodeType":"Return","src":"15294:63:83"}]},"documentation":{"id":16734,"nodeType":"StructuredDocumentation","src":"13841:676:83","text":" @notice Calculates the total debt of the user and the actual amount to liquidate depending on the health factor\n and corresponding close factor.\n @dev If the Health Factor is below CLOSE_FACTOR_HF_THRESHOLD, the close factor is increased to MAX_LIQUIDATION_CLOSE_FACTOR\n @param debtReserveCache The reserve cache data object of the debt reserve\n @param params The additional parameters needed to execute the liquidation function\n @param healthFactor The health factor of the position\n @return The variable debt of the user\n @return The total debt of the user\n @return The actual debt to liquidate as a function of the closeFactor"},"id":16801,"implemented":true,"kind":"function","modifiers":[],"name":"_calculateDebt","nameLocation":"14529:14:83","nodeType":"FunctionDefinition","parameters":{"id":16743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16737,"mutability":"mutable","name":"debtReserveCache","nameLocation":"14579:16:83","nodeType":"VariableDeclaration","scope":16801,"src":"14549:46:83","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":16736,"nodeType":"UserDefinedTypeName","pathNode":{"id":16735,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"14549:22:83"},"referencedDeclaration":21379,"src":"14549:22:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"},{"constant":false,"id":16740,"mutability":"mutable","name":"params","nameLocation":"14647:6:83","nodeType":"VariableDeclaration","scope":16801,"src":"14601:52:83","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams"},"typeName":{"id":16739,"nodeType":"UserDefinedTypeName","pathNode":{"id":16738,"name":"DataTypes.ExecuteLiquidationCallParams","nodeType":"IdentifierPath","referencedDeclaration":21398,"src":"14601:38:83"},"referencedDeclaration":21398,"src":"14601:38:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_storage_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams"}},"visibility":"internal"},{"constant":false,"id":16742,"mutability":"mutable","name":"healthFactor","nameLocation":"14667:12:83","nodeType":"VariableDeclaration","scope":16801,"src":"14659:20:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16741,"name":"uint256","nodeType":"ElementaryTypeName","src":"14659:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14543:140:83"},"returnParameters":{"id":16750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16745,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16801,"src":"14707:7:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16744,"name":"uint256","nodeType":"ElementaryTypeName","src":"14707:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16747,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16801,"src":"14716:7:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16746,"name":"uint256","nodeType":"ElementaryTypeName","src":"14716:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16749,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16801,"src":"14725:7:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16748,"name":"uint256","nodeType":"ElementaryTypeName","src":"14725:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14706:27:83"},"scope":17171,"src":"14520:842:83","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16913,"nodeType":"Block","src":"16202:1072:83","statements":[{"assignments":[16827],"declarations":[{"constant":false,"id":16827,"mutability":"mutable","name":"collateralAToken","nameLocation":"16216:16:83","nodeType":"VariableDeclaration","scope":16913,"src":"16208:24:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"},"typeName":{"id":16826,"nodeType":"UserDefinedTypeName","pathNode":{"id":16825,"name":"IAToken","nodeType":"IdentifierPath","referencedDeclaration":3861,"src":"16208:7:83"},"referencedDeclaration":3861,"src":"16208:7:83","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"visibility":"internal"}],"id":16832,"initialValue":{"arguments":[{"expression":{"id":16829,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16810,"src":"16243:17:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":16830,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"16243:31:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16828,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3861,"src":"16235:7:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3861_$","typeString":"type(contract IAToken)"}},"id":16831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16235:40:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"nodeType":"VariableDeclarationStatement","src":"16208:67:83"},{"assignments":[16834],"declarations":[{"constant":false,"id":16834,"mutability":"mutable","name":"liquidationBonus","nameLocation":"16289:16:83","nodeType":"VariableDeclaration","scope":16913,"src":"16281:24:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16833,"name":"uint256","nodeType":"ElementaryTypeName","src":"16281:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16839,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":16835,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16810,"src":"16308:17:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":16836,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":21286,"src":"16308:31:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":16837,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLiquidationBonus","nodeType":"MemberAccess","referencedDeclaration":10881,"src":"16308:51:83","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":16838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16308:53:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16281:80:83"},{"assignments":[16841],"declarations":[{"constant":false,"id":16841,"mutability":"mutable","name":"collateralPriceSource","nameLocation":"16376:21:83","nodeType":"VariableDeclaration","scope":16913,"src":"16368:29:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16840,"name":"address","nodeType":"ElementaryTypeName","src":"16368:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":16844,"initialValue":{"expression":{"id":16842,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16813,"src":"16400:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16843,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAsset","nodeType":"MemberAccess","referencedDeclaration":21385,"src":"16400:22:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16368:54:83"},{"assignments":[16846],"declarations":[{"constant":false,"id":16846,"mutability":"mutable","name":"debtPriceSource","nameLocation":"16436:15:83","nodeType":"VariableDeclaration","scope":16913,"src":"16428:23:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16845,"name":"address","nodeType":"ElementaryTypeName","src":"16428:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":16849,"initialValue":{"expression":{"id":16847,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16813,"src":"16454:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16848,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtAsset","nodeType":"MemberAccess","referencedDeclaration":21387,"src":"16454:16:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16428:42:83"},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":16853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":16850,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16813,"src":"16481:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16851,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":21395,"src":"16481:24:83","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":16852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16509:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16481:29:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16906,"nodeType":"IfStatement","src":"16477:703:83","trueBody":{"id":16905,"nodeType":"Block","src":"16512:668:83","statements":[{"assignments":[16855],"declarations":[{"constant":false,"id":16855,"mutability":"mutable","name":"eModePriceSource","nameLocation":"16528:16:83","nodeType":"VariableDeclaration","scope":16905,"src":"16520:24:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16854,"name":"address","nodeType":"ElementaryTypeName","src":"16520:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":16861,"initialValue":{"expression":{"baseExpression":{"id":16856,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16807,"src":"16547:15:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},"id":16859,"indexExpression":{"expression":{"id":16857,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16813,"src":"16563:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16858,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":21395,"src":"16563:24:83","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16547:41:83","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage","typeString":"struct DataTypes.EModeCategory storage ref"}},"id":16860,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"priceSource","nodeType":"MemberAccess","referencedDeclaration":21330,"src":"16547:53:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16520:80:83"},{"condition":{"arguments":[{"expression":{"id":16864,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16813,"src":"16662:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16865,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":21395,"src":"16662:24:83","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":16866,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16810,"src":"16698:17:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":16867,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":21286,"src":"16698:31:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":16868,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getEModeCategory","nodeType":"MemberAccess","referencedDeclaration":11647,"src":"16698:48:83","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":16869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16698:50:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16862,"name":"EModeLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14615,"src":"16622:10:83","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_EModeLogic_$14615_$","typeString":"type(library EModeLogic)"}},"id":16863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isInEModeCategory","nodeType":"MemberAccess","referencedDeclaration":14614,"src":"16622:28:83","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) pure returns (bool)"}},"id":16870,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16622:136:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16892,"nodeType":"IfStatement","src":"16609:363:83","trueBody":{"id":16891,"nodeType":"Block","src":"16767:205:83","statements":[{"expression":{"id":16877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16871,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16834,"src":"16777:16:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":16872,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16807,"src":"16796:15:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},"id":16875,"indexExpression":{"expression":{"id":16873,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16813,"src":"16812:6:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}},"id":16874,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":21395,"src":"16812:24:83","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16796:41:83","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage","typeString":"struct DataTypes.EModeCategory storage ref"}},"id":16876,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationBonus","nodeType":"MemberAccess","referencedDeclaration":21328,"src":"16796:58:83","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"16777:77:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16878,"nodeType":"ExpressionStatement","src":"16777:77:83"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":16884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16879,"name":"eModePriceSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16855,"src":"16869:16:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":16882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16897:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":16881,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16889:7:83","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16880,"name":"address","nodeType":"ElementaryTypeName","src":"16889:7:83","typeDescriptions":{}}},"id":16883,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16889:10:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16869:30:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16890,"nodeType":"IfStatement","src":"16865:99:83","trueBody":{"id":16889,"nodeType":"Block","src":"16901:63:83","statements":[{"expression":{"id":16887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16885,"name":"collateralPriceSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16841,"src":"16913:21:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":16886,"name":"eModePriceSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16855,"src":"16937:16:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16913:40:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16888,"nodeType":"ExpressionStatement","src":"16913:40:83"}]}}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":16898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16893,"name":"eModePriceSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16855,"src":"17089:16:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":16896,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17117:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":16895,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17109:7:83","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16894,"name":"address","nodeType":"ElementaryTypeName","src":"17109:7:83","typeDescriptions":{}}},"id":16897,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17109:10:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17089:30:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16904,"nodeType":"IfStatement","src":"17085:89:83","trueBody":{"id":16903,"nodeType":"Block","src":"17121:53:83","statements":[{"expression":{"id":16901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16899,"name":"debtPriceSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16846,"src":"17131:15:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":16900,"name":"eModePriceSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16855,"src":"17149:16:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17131:34:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16902,"nodeType":"ExpressionStatement","src":"17131:34:83"}]}}]}},{"expression":{"components":[{"id":16907,"name":"collateralAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16827,"src":"17194:16:83","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},{"id":16908,"name":"collateralPriceSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16841,"src":"17212:21:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16909,"name":"debtPriceSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16846,"src":"17235:15:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16910,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16834,"src":"17252:16:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16911,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17193:76:83","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IAToken_$3861_$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(contract IAToken,address,address,uint256)"}},"functionReturnParameters":16824,"id":16912,"nodeType":"Return","src":"17186:83:83"}]},"documentation":{"id":16802,"nodeType":"StructuredDocumentation","src":"15366:557:83","text":" @notice Returns the configuration data for the debt and the collateral reserves.\n @param eModeCategories The configuration of all the efficiency mode categories\n @param collateralReserve The data of the collateral reserve\n @param params The additional parameters needed to execute the liquidation function\n @return The collateral aToken\n @return The address to use as price source for the collateral\n @return The address to use as price source for the debt\n @return The liquidation bonus to apply to the collateral"},"id":16914,"implemented":true,"kind":"function","modifiers":[],"name":"_getConfigurationData","nameLocation":"15935:21:83","nodeType":"FunctionDefinition","parameters":{"id":16814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16807,"mutability":"mutable","name":"eModeCategories","nameLocation":"16012:15:83","nodeType":"VariableDeclaration","scope":16914,"src":"15962:65:83","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":16806,"keyType":{"id":16803,"name":"uint8","nodeType":"ElementaryTypeName","src":"15970:5:83","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"15962:41:83","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":16805,"nodeType":"UserDefinedTypeName","pathNode":{"id":16804,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":21333,"src":"15979:23:83"},"referencedDeclaration":21333,"src":"15979:23:83","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":16810,"mutability":"mutable","name":"collateralReserve","nameLocation":"16063:17:83","nodeType":"VariableDeclaration","scope":16914,"src":"16033:47:83","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":16809,"nodeType":"UserDefinedTypeName","pathNode":{"id":16808,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"16033:21:83"},"referencedDeclaration":21315,"src":"16033:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":16813,"mutability":"mutable","name":"params","nameLocation":"16132:6:83","nodeType":"VariableDeclaration","scope":16914,"src":"16086:52:83","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams"},"typeName":{"id":16812,"nodeType":"UserDefinedTypeName","pathNode":{"id":16811,"name":"DataTypes.ExecuteLiquidationCallParams","nodeType":"IdentifierPath","referencedDeclaration":21398,"src":"16086:38:83"},"referencedDeclaration":21398,"src":"16086:38:83","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_storage_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams"}},"visibility":"internal"}],"src":"15956:186:83"},"returnParameters":{"id":16824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16817,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16914,"src":"16166:7:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"},"typeName":{"id":16816,"nodeType":"UserDefinedTypeName","pathNode":{"id":16815,"name":"IAToken","nodeType":"IdentifierPath","referencedDeclaration":3861,"src":"16166:7:83"},"referencedDeclaration":3861,"src":"16166:7:83","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"visibility":"internal"},{"constant":false,"id":16819,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16914,"src":"16175:7:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16818,"name":"address","nodeType":"ElementaryTypeName","src":"16175:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16821,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16914,"src":"16184:7:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16820,"name":"address","nodeType":"ElementaryTypeName","src":"16184:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16823,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16914,"src":"16193:7:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16822,"name":"uint256","nodeType":"ElementaryTypeName","src":"16193:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16165:36:83"},"scope":17171,"src":"15926:1348:83","stateMutability":"view","virtual":false,"visibility":"internal"},{"canonicalName":"LiquidationLogic.AvailableCollateralToLiquidateLocalVars","id":16941,"members":[{"constant":false,"id":16916,"mutability":"mutable","name":"collateralPrice","nameLocation":"17339:15:83","nodeType":"VariableDeclaration","scope":16941,"src":"17331:23:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16915,"name":"uint256","nodeType":"ElementaryTypeName","src":"17331:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16918,"mutability":"mutable","name":"debtAssetPrice","nameLocation":"17368:14:83","nodeType":"VariableDeclaration","scope":16941,"src":"17360:22:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16917,"name":"uint256","nodeType":"ElementaryTypeName","src":"17360:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16920,"mutability":"mutable","name":"maxCollateralToLiquidate","nameLocation":"17396:24:83","nodeType":"VariableDeclaration","scope":16941,"src":"17388:32:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16919,"name":"uint256","nodeType":"ElementaryTypeName","src":"17388:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16922,"mutability":"mutable","name":"baseCollateral","nameLocation":"17434:14:83","nodeType":"VariableDeclaration","scope":16941,"src":"17426:22:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16921,"name":"uint256","nodeType":"ElementaryTypeName","src":"17426:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16924,"mutability":"mutable","name":"bonusCollateral","nameLocation":"17462:15:83","nodeType":"VariableDeclaration","scope":16941,"src":"17454:23:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16923,"name":"uint256","nodeType":"ElementaryTypeName","src":"17454:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16926,"mutability":"mutable","name":"debtAssetDecimals","nameLocation":"17491:17:83","nodeType":"VariableDeclaration","scope":16941,"src":"17483:25:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16925,"name":"uint256","nodeType":"ElementaryTypeName","src":"17483:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16928,"mutability":"mutable","name":"collateralDecimals","nameLocation":"17522:18:83","nodeType":"VariableDeclaration","scope":16941,"src":"17514:26:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16927,"name":"uint256","nodeType":"ElementaryTypeName","src":"17514:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16930,"mutability":"mutable","name":"collateralAssetUnit","nameLocation":"17554:19:83","nodeType":"VariableDeclaration","scope":16941,"src":"17546:27:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16929,"name":"uint256","nodeType":"ElementaryTypeName","src":"17546:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16932,"mutability":"mutable","name":"debtAssetUnit","nameLocation":"17587:13:83","nodeType":"VariableDeclaration","scope":16941,"src":"17579:21:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16931,"name":"uint256","nodeType":"ElementaryTypeName","src":"17579:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16934,"mutability":"mutable","name":"collateralAmount","nameLocation":"17614:16:83","nodeType":"VariableDeclaration","scope":16941,"src":"17606:24:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16933,"name":"uint256","nodeType":"ElementaryTypeName","src":"17606:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16936,"mutability":"mutable","name":"debtAmountNeeded","nameLocation":"17644:16:83","nodeType":"VariableDeclaration","scope":16941,"src":"17636:24:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16935,"name":"uint256","nodeType":"ElementaryTypeName","src":"17636:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16938,"mutability":"mutable","name":"liquidationProtocolFeePercentage","nameLocation":"17674:32:83","nodeType":"VariableDeclaration","scope":16941,"src":"17666:40:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16937,"name":"uint256","nodeType":"ElementaryTypeName","src":"17666:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16940,"mutability":"mutable","name":"liquidationProtocolFee","nameLocation":"17720:22:83","nodeType":"VariableDeclaration","scope":16941,"src":"17712:30:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16939,"name":"uint256","nodeType":"ElementaryTypeName","src":"17712:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"AvailableCollateralToLiquidateLocalVars","nameLocation":"17285:39:83","nodeType":"StructDefinition","scope":17171,"src":"17278:469:83","visibility":"public"},{"body":{"id":17169,"nodeType":"Block","src":"19348:1899:83","statements":[{"assignments":[16972],"declarations":[{"constant":false,"id":16972,"mutability":"mutable","name":"vars","nameLocation":"19401:4:83","nodeType":"VariableDeclaration","scope":17169,"src":"19354:51:83","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars"},"typeName":{"id":16971,"nodeType":"UserDefinedTypeName","pathNode":{"id":16970,"name":"AvailableCollateralToLiquidateLocalVars","nodeType":"IdentifierPath","referencedDeclaration":16941,"src":"19354:39:83"},"referencedDeclaration":16941,"src":"19354:39:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_storage_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars"}},"visibility":"internal"}],"id":16973,"nodeType":"VariableDeclarationStatement","src":"19354:51:83"},{"expression":{"id":16981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":16974,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"19412:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":16976,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"collateralPrice","nodeType":"MemberAccess","referencedDeclaration":16916,"src":"19412:20:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16979,"name":"collateralAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16950,"src":"19456:15:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16977,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16961,"src":"19435:6:83","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"}},"id":16978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getAssetPrice","nodeType":"MemberAccess","referencedDeclaration":5834,"src":"19435:20:83","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":16980,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19435:37:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19412:60:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16982,"nodeType":"ExpressionStatement","src":"19412:60:83"},{"expression":{"id":16990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":16983,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"19478:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":16985,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"debtAssetPrice","nodeType":"MemberAccess","referencedDeclaration":16918,"src":"19478:19:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16988,"name":"debtAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16952,"src":"19521:9:83","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16986,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16961,"src":"19500:6:83","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"}},"id":16987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getAssetPrice","nodeType":"MemberAccess","referencedDeclaration":5834,"src":"19500:20:83","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":16989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19500:31:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19478:53:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16991,"nodeType":"ExpressionStatement","src":"19478:53:83"},{"expression":{"id":16999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":16992,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"19538:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":16994,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"collateralDecimals","nodeType":"MemberAccess","referencedDeclaration":16928,"src":"19538:23:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":16995,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16945,"src":"19564:17:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":16996,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":21286,"src":"19564:31:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":16997,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDecimals","nodeType":"MemberAccess","referencedDeclaration":10933,"src":"19564:43:83","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":16998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19564:45:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19538:71:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17000,"nodeType":"ExpressionStatement","src":"19538:71:83"},{"expression":{"id":17008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17001,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"19615:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17003,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"debtAssetDecimals","nodeType":"MemberAccess","referencedDeclaration":16926,"src":"19615:22:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":17004,"name":"debtReserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16948,"src":"19640:16:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":17005,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"19640:37:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":17006,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDecimals","nodeType":"MemberAccess","referencedDeclaration":10933,"src":"19640:49:83","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":17007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19640:51:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19615:76:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17009,"nodeType":"ExpressionStatement","src":"19615:76:83"},{"id":17028,"nodeType":"UncheckedBlock","src":"19698:138:83","statements":[{"expression":{"id":17017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17010,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"19716:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17012,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"collateralAssetUnit","nodeType":"MemberAccess","referencedDeclaration":16930,"src":"19716:24:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":17013,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19743:2:83","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"expression":{"id":17014,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"19749:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17015,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralDecimals","nodeType":"MemberAccess","referencedDeclaration":16928,"src":"19749:23:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19743:29:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19716:56:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17018,"nodeType":"ExpressionStatement","src":"19716:56:83"},{"expression":{"id":17026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17019,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"19780:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17021,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"debtAssetUnit","nodeType":"MemberAccess","referencedDeclaration":16932,"src":"19780:18:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":17022,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19801:2:83","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"expression":{"id":17023,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"19807:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17024,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtAssetDecimals","nodeType":"MemberAccess","referencedDeclaration":16926,"src":"19807:22:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19801:28:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19780:49:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17027,"nodeType":"ExpressionStatement","src":"19780:49:83"}]},{"expression":{"id":17036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17029,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"19842:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17031,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"liquidationProtocolFeePercentage","nodeType":"MemberAccess","referencedDeclaration":16938,"src":"19842:37:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":17032,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16945,"src":"19882:17:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17033,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":21286,"src":"19882:38:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":17034,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLiquidationProtocolFee","nodeType":"MemberAccess","referencedDeclaration":11543,"src":"19882:71:83","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":17035,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19882:73:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19842:113:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17037,"nodeType":"ExpressionStatement","src":"19842:113:83"},{"expression":{"id":17057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17038,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20043:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17040,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"baseCollateral","nodeType":"MemberAccess","referencedDeclaration":16922,"src":"20043:19:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17041,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20073:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17042,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtAssetPrice","nodeType":"MemberAccess","referencedDeclaration":16918,"src":"20073:19:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":17043,"name":"debtToCover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16954,"src":"20095:11:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20073:33:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":17045,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20109:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17046,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAssetUnit","nodeType":"MemberAccess","referencedDeclaration":16930,"src":"20109:24:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20073:60:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17048,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20072:62:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17049,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20071:64:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17050,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20145:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17051,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralPrice","nodeType":"MemberAccess","referencedDeclaration":16916,"src":"20145:20:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":17052,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20168:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17053,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtAssetUnit","nodeType":"MemberAccess","referencedDeclaration":16932,"src":"20168:18:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20145:41:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17055,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20144:43:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20071:116:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20043:144:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17058,"nodeType":"ExpressionStatement","src":"20043:144:83"},{"expression":{"id":17067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17059,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20194:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17061,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"maxCollateralToLiquidate","nodeType":"MemberAccess","referencedDeclaration":16920,"src":"20194:29:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17065,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16958,"src":"20257:16:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":17062,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20226:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17063,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"baseCollateral","nodeType":"MemberAccess","referencedDeclaration":16922,"src":"20226:19:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":21119,"src":"20226:30:83","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":17066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20226:48:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20194:80:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17068,"nodeType":"ExpressionStatement","src":"20194:80:83"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17069,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20285:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17070,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"maxCollateralToLiquidate","nodeType":"MemberAccess","referencedDeclaration":16920,"src":"20285:29:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":17071,"name":"userCollateralBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16956,"src":"20317:21:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20285:53:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17118,"nodeType":"Block","src":"20595:111:83","statements":[{"expression":{"id":17110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17105,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20603:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17107,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"collateralAmount","nodeType":"MemberAccess","referencedDeclaration":16934,"src":"20603:21:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":17108,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20627:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17109,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"maxCollateralToLiquidate","nodeType":"MemberAccess","referencedDeclaration":16920,"src":"20627:29:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20603:53:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17111,"nodeType":"ExpressionStatement","src":"20603:53:83"},{"expression":{"id":17116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17112,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20664:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17114,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"debtAmountNeeded","nodeType":"MemberAccess","referencedDeclaration":16936,"src":"20664:21:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17115,"name":"debtToCover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16954,"src":"20688:11:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20664:35:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17117,"nodeType":"ExpressionStatement","src":"20664:35:83"}]},"id":17119,"nodeType":"IfStatement","src":"20281:425:83","trueBody":{"id":17104,"nodeType":"Block","src":"20340:249:83","statements":[{"expression":{"id":17077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17073,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20348:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17075,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"collateralAmount","nodeType":"MemberAccess","referencedDeclaration":16934,"src":"20348:21:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17076,"name":"userCollateralBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16956,"src":"20372:21:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20348:45:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17078,"nodeType":"ExpressionStatement","src":"20348:45:83"},{"expression":{"id":17102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17079,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20401:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17081,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"debtAmountNeeded","nodeType":"MemberAccess","referencedDeclaration":16936,"src":"20401:21:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17100,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16958,"src":"20565:16:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17082,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20427:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17083,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralPrice","nodeType":"MemberAccess","referencedDeclaration":16916,"src":"20427:20:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":17084,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20450:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17085,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAmount","nodeType":"MemberAccess","referencedDeclaration":16934,"src":"20450:21:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20427:44:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":17087,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20474:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17088,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtAssetUnit","nodeType":"MemberAccess","referencedDeclaration":16932,"src":"20474:18:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20427:65:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17090,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20426:67:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17091,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20505:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17092,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtAssetPrice","nodeType":"MemberAccess","referencedDeclaration":16918,"src":"20505:19:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":17093,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20527:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17094,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAssetUnit","nodeType":"MemberAccess","referencedDeclaration":16930,"src":"20527:24:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20505:46:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17096,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20504:48:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20426:126:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17098,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20425:128:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentDiv","nodeType":"MemberAccess","referencedDeclaration":21131,"src":"20425:139:83","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":17101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20425:157:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20401:181:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17103,"nodeType":"ExpressionStatement","src":"20401:181:83"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17120,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20716:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17121,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationProtocolFeePercentage","nodeType":"MemberAccess","referencedDeclaration":16938,"src":"20716:37:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":17122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20757:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20716:42:83","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17167,"nodeType":"Block","src":"21172:71:83","statements":[{"expression":{"components":[{"expression":{"id":17160,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"21188:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17161,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAmount","nodeType":"MemberAccess","referencedDeclaration":16934,"src":"21188:21:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17162,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"21211:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17163,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtAmountNeeded","nodeType":"MemberAccess","referencedDeclaration":16936,"src":"21211:21:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":17164,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21234:1:83","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":17165,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21187:49:83","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_rational_0_by_1_$","typeString":"tuple(uint256,uint256,int_const 0)"}},"functionReturnParameters":16969,"id":17166,"nodeType":"Return","src":"21180:56:83"}]},"id":17168,"nodeType":"IfStatement","src":"20712:531:83","trueBody":{"id":17159,"nodeType":"Block","src":"20760:406:83","statements":[{"expression":{"id":17135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17124,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20768:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17126,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"bonusCollateral","nodeType":"MemberAccess","referencedDeclaration":16924,"src":"20768:20:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17127,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20799:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17128,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAmount","nodeType":"MemberAccess","referencedDeclaration":16934,"src":"20799:21:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"id":17132,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16958,"src":"20864:16:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":17129,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20831:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17130,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAmount","nodeType":"MemberAccess","referencedDeclaration":16934,"src":"20831:21:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentDiv","nodeType":"MemberAccess","referencedDeclaration":21131,"src":"20831:32:83","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":17133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20831:50:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20799:82:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20768:113:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17136,"nodeType":"ExpressionStatement","src":"20768:113:83"},{"expression":{"id":17146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17137,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20890:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17139,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"liquidationProtocolFee","nodeType":"MemberAccess","referencedDeclaration":16940,"src":"20890:27:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":17143,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20961:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17144,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationProtocolFeePercentage","nodeType":"MemberAccess","referencedDeclaration":16938,"src":"20961:37:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":17140,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"20920:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17141,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"bonusCollateral","nodeType":"MemberAccess","referencedDeclaration":16924,"src":"20920:20:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":21119,"src":"20920:31:83","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":17145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20920:86:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20890:116:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17147,"nodeType":"ExpressionStatement","src":"20890:116:83"},{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17148,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"21032:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17149,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralAmount","nodeType":"MemberAccess","referencedDeclaration":16934,"src":"21032:21:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":17150,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"21056:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17151,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationProtocolFee","nodeType":"MemberAccess","referencedDeclaration":16940,"src":"21056:27:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21032:51:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17153,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"21093:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17154,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtAmountNeeded","nodeType":"MemberAccess","referencedDeclaration":16936,"src":"21093:21:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17155,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16972,"src":"21124:4:83","typeDescriptions":{"typeIdentifier":"t_struct$_AvailableCollateralToLiquidateLocalVars_$16941_memory_ptr","typeString":"struct LiquidationLogic.AvailableCollateralToLiquidateLocalVars memory"}},"id":17156,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationProtocolFee","nodeType":"MemberAccess","referencedDeclaration":16940,"src":"21124:27:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17157,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21022:137:83","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"functionReturnParameters":16969,"id":17158,"nodeType":"Return","src":"21015:144:83"}]}}]},"documentation":{"id":16942,"nodeType":"StructuredDocumentation","src":"17751:1212:83","text":" @notice Calculates how much of a specific collateral can be liquidated, given\n a certain amount of debt asset.\n @dev This function needs to be called after all the checks to validate the liquidation have been performed,\n   otherwise it might fail.\n @param collateralReserve The data of the collateral reserve\n @param debtReserveCache The cached data of the debt reserve\n @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\n @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\n @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\n @param userCollateralBalance The collateral balance for the specific `collateralAsset` of the user being liquidated\n @param liquidationBonus The collateral bonus percentage to receive as result of the liquidation\n @return The maximum amount that is possible to liquidate given all the liquidation constraints (user balance, close factor)\n @return The amount to repay with the liquidation\n @return The fee taken from the liquidation bonus amount to be paid to the protocol"},"id":17170,"implemented":true,"kind":"function","modifiers":[],"name":"_calculateAvailableCollateralToLiquidate","nameLocation":"18975:40:83","nodeType":"FunctionDefinition","parameters":{"id":16962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16945,"mutability":"mutable","name":"collateralReserve","nameLocation":"19051:17:83","nodeType":"VariableDeclaration","scope":17170,"src":"19021:47:83","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":16944,"nodeType":"UserDefinedTypeName","pathNode":{"id":16943,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"19021:21:83"},"referencedDeclaration":21315,"src":"19021:21:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":16948,"mutability":"mutable","name":"debtReserveCache","nameLocation":"19104:16:83","nodeType":"VariableDeclaration","scope":17170,"src":"19074:46:83","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":16947,"nodeType":"UserDefinedTypeName","pathNode":{"id":16946,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"19074:22:83"},"referencedDeclaration":21379,"src":"19074:22:83","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"},{"constant":false,"id":16950,"mutability":"mutable","name":"collateralAsset","nameLocation":"19134:15:83","nodeType":"VariableDeclaration","scope":17170,"src":"19126:23:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16949,"name":"address","nodeType":"ElementaryTypeName","src":"19126:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16952,"mutability":"mutable","name":"debtAsset","nameLocation":"19163:9:83","nodeType":"VariableDeclaration","scope":17170,"src":"19155:17:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16951,"name":"address","nodeType":"ElementaryTypeName","src":"19155:7:83","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16954,"mutability":"mutable","name":"debtToCover","nameLocation":"19186:11:83","nodeType":"VariableDeclaration","scope":17170,"src":"19178:19:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16953,"name":"uint256","nodeType":"ElementaryTypeName","src":"19178:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16956,"mutability":"mutable","name":"userCollateralBalance","nameLocation":"19211:21:83","nodeType":"VariableDeclaration","scope":17170,"src":"19203:29:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16955,"name":"uint256","nodeType":"ElementaryTypeName","src":"19203:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16958,"mutability":"mutable","name":"liquidationBonus","nameLocation":"19246:16:83","nodeType":"VariableDeclaration","scope":17170,"src":"19238:24:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16957,"name":"uint256","nodeType":"ElementaryTypeName","src":"19238:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16961,"mutability":"mutable","name":"oracle","nameLocation":"19287:6:83","nodeType":"VariableDeclaration","scope":17170,"src":"19268:25:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"},"typeName":{"id":16960,"nodeType":"UserDefinedTypeName","pathNode":{"id":16959,"name":"IPriceOracleGetter","nodeType":"IdentifierPath","referencedDeclaration":5835,"src":"19268:18:83"},"referencedDeclaration":5835,"src":"19268:18:83","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"}},"visibility":"internal"}],"src":"19015:282:83"},"returnParameters":{"id":16969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16964,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17170,"src":"19321:7:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16963,"name":"uint256","nodeType":"ElementaryTypeName","src":"19321:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16966,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17170,"src":"19330:7:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16965,"name":"uint256","nodeType":"ElementaryTypeName","src":"19330:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16968,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17170,"src":"19339:7:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16967,"name":"uint256","nodeType":"ElementaryTypeName","src":"19339:7:83","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19320:27:83"},"scope":17171,"src":"18966:2281:83","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":17172,"src":"1399:19850:83","usedErrors":[]}],"src":"37:21213:83"},"id":83},"@aave/core-v3/contracts/protocol/libraries/logic/PoolLogic.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/PoolLogic.sol","exportedSymbols":{"Address":[722],"DataTypes":[21633],"Errors":[12642],"GPv2SafeERC20":[118],"GenericLogic":[15855],"IAToken":[3861],"IERC20":[1442],"PoolLogic":[17617],"ReserveConfiguration":[11857],"ReserveLogic":[18377],"ValidationLogic":[20908],"WadRayMath":[21219]},"id":17618,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":17173,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:84"},{"absolutePath":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":17175,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17618,"sourceUnit":119,"src":"63:87:84","symbolAliases":[{"foreign":{"id":17174,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:13:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol","file":"../../../dependencies/openzeppelin/contracts/Address.sol","id":17177,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17618,"sourceUnit":723,"src":"151:81:84","symbolAliases":[{"foreign":{"id":17176,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"src":"159:7:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../../dependencies/openzeppelin/contracts/IERC20.sol","id":17179,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17618,"sourceUnit":1443,"src":"233:79:84","symbolAliases":[{"foreign":{"id":17178,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"241:6:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IAToken.sol","file":"../../../interfaces/IAToken.sol","id":17181,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17618,"sourceUnit":3862,"src":"313:56:84","symbolAliases":[{"foreign":{"id":17180,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"321:7:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../configuration/ReserveConfiguration.sol","id":17183,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17618,"sourceUnit":11858,"src":"370:79:84","symbolAliases":[{"foreign":{"id":17182,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"378:20:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol","file":"../helpers/Errors.sol","id":17185,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17618,"sourceUnit":12643,"src":"450:45:84","symbolAliases":[{"foreign":{"id":17184,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"458:6:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol","file":"../math/WadRayMath.sol","id":17187,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17618,"sourceUnit":21220,"src":"496:50:84","symbolAliases":[{"foreign":{"id":17186,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"504:10:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":17189,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17618,"sourceUnit":21634,"src":"547:49:84","symbolAliases":[{"foreign":{"id":17188,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"555:9:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol","file":"./ReserveLogic.sol","id":17191,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17618,"sourceUnit":18378,"src":"597:48:84","symbolAliases":[{"foreign":{"id":17190,"name":"ReserveLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"605:12:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol","file":"./ValidationLogic.sol","id":17193,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17618,"sourceUnit":20909,"src":"646:54:84","symbolAliases":[{"foreign":{"id":17192,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"654:15:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol","file":"./GenericLogic.sol","id":17195,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17618,"sourceUnit":15856,"src":"701:48:84","symbolAliases":[{"foreign":{"id":17194,"name":"GenericLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"709:12:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"PoolLogic","contractDependencies":[],"contractKind":"library","documentation":{"id":17196,"nodeType":"StructuredDocumentation","src":"751:111:84","text":" @title PoolLogic library\n @author Aave\n @notice Implements the logic for Pool specific functions"},"fullyImplemented":true,"id":17617,"linearizedBaseContracts":[17617],"name":"PoolLogic","nameLocation":"871:9:84","nodeType":"ContractDefinition","nodes":[{"id":17200,"libraryName":{"id":17197,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"891:13:84"},"nodeType":"UsingForDirective","src":"885:31:84","typeName":{"id":17199,"nodeType":"UserDefinedTypeName","pathNode":{"id":17198,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"909:6:84"},"referencedDeclaration":1442,"src":"909:6:84","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"id":17203,"libraryName":{"id":17201,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":21219,"src":"925:10:84"},"nodeType":"UsingForDirective","src":"919:29:84","typeName":{"id":17202,"name":"uint256","nodeType":"ElementaryTypeName","src":"940:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":17207,"libraryName":{"id":17204,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":18377,"src":"957:12:84"},"nodeType":"UsingForDirective","src":"951:45:84","typeName":{"id":17206,"nodeType":"UserDefinedTypeName","pathNode":{"id":17205,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"974:21:84"},"referencedDeclaration":21315,"src":"974:21:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},{"id":17211,"libraryName":{"id":17208,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":11857,"src":"1005:20:84"},"nodeType":"UsingForDirective","src":"999:65:84","typeName":{"id":17210,"nodeType":"UserDefinedTypeName","pathNode":{"id":17209,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"1030:33:84"},"referencedDeclaration":21318,"src":"1030:33:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"anonymous":false,"id":17217,"name":"MintedToTreasury","nameLocation":"1108:16:84","nodeType":"EventDefinition","parameters":{"id":17216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17213,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1141:7:84","nodeType":"VariableDeclaration","scope":17217,"src":"1125:23:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17212,"name":"address","nodeType":"ElementaryTypeName","src":"1125:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17215,"indexed":false,"mutability":"mutable","name":"amountMinted","nameLocation":"1158:12:84","nodeType":"VariableDeclaration","scope":17217,"src":"1150:20:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17214,"name":"uint256","nodeType":"ElementaryTypeName","src":"1150:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1124:47:84"},"src":"1102:70:84"},{"anonymous":false,"id":17223,"name":"IsolationModeTotalDebtUpdated","nameLocation":"1181:29:84","nodeType":"EventDefinition","parameters":{"id":17222,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17219,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"1227:5:84","nodeType":"VariableDeclaration","scope":17223,"src":"1211:21:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17218,"name":"address","nodeType":"ElementaryTypeName","src":"1211:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17221,"indexed":false,"mutability":"mutable","name":"totalDebt","nameLocation":"1242:9:84","nodeType":"VariableDeclaration","scope":17223,"src":"1234:17:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17220,"name":"uint256","nodeType":"ElementaryTypeName","src":"1234:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1210:42:84"},"src":"1175:78:84"},{"body":{"id":17359,"nodeType":"Block","src":"1835:871:84","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":17244,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17236,"src":"1868:6:84","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$21632_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":17245,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21619,"src":"1868:12:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":17242,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":722,"src":"1849:7:84","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$722_$","typeString":"type(library Address)"}},"id":17243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":445,"src":"1849:18:84","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":17246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1849:32:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":17247,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"1883:6:84","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":17248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"NOT_CONTRACT","nodeType":"MemberAccess","referencedDeclaration":12398,"src":"1883:19:84","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17241,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1841:7:84","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":17249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1841:62:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17250,"nodeType":"ExpressionStatement","src":"1841:62:84"},{"expression":{"arguments":[{"expression":{"id":17256,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17236,"src":"1948:6:84","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$21632_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":17257,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21621,"src":"1948:20:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17258,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17236,"src":"1976:6:84","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$21632_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":17259,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtAddress","nodeType":"MemberAccess","referencedDeclaration":21623,"src":"1976:24:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17260,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17236,"src":"2008:6:84","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$21632_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":17261,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtAddress","nodeType":"MemberAccess","referencedDeclaration":21625,"src":"2008:26:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17262,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17236,"src":"2042:6:84","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$21632_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":17263,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":21627,"src":"2042:34:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":17251,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17229,"src":"1909:12:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":17254,"indexExpression":{"expression":{"id":17252,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17236,"src":"1922:6:84","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$21632_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":17253,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21619,"src":"1922:12:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1909:26:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":17255,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"init","nodeType":"MemberAccess","referencedDeclaration":17908,"src":"1909:31:84","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_address_$_t_address_$_t_address_$_t_address_$returns$__$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,address,address,address,address)"}},"id":17264,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1909:173:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17265,"nodeType":"ExpressionStatement","src":"1909:173:84"},{"assignments":[17267],"declarations":[{"constant":false,"id":17267,"mutability":"mutable","name":"reserveAlreadyAdded","nameLocation":"2094:19:84","nodeType":"VariableDeclaration","scope":17359,"src":"2089:24:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17266,"name":"bool","nodeType":"ElementaryTypeName","src":"2089:4:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":17282,"initialValue":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":17274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":17268,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17229,"src":"2116:12:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":17271,"indexExpression":{"expression":{"id":17269,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17236,"src":"2129:6:84","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$21632_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":17270,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21619,"src":"2129:12:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2116:26:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":17272,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"2116:29:84","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":17273,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2149:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2116:34:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":17275,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17233,"src":"2160:12:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":17277,"indexExpression":{"hexValue":"30","id":17276,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2173:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2160:15:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":17278,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17236,"src":"2179:6:84","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$21632_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":17279,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21619,"src":"2179:12:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2160:31:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2116:75:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"2089:102:84"},{"expression":{"arguments":[{"id":17285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"2205:20:84","subExpression":{"id":17284,"name":"reserveAlreadyAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17267,"src":"2206:19:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":17286,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"2227:6:84","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":17287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_ALREADY_ADDED","nodeType":"MemberAccess","referencedDeclaration":12413,"src":"2227:28:84","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17283,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2197:7:84","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":17288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2197:59:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17289,"nodeType":"ExpressionStatement","src":"2197:59:84"},{"body":{"id":17328,"nodeType":"Block","src":"2313:163:84","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":17301,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17233,"src":"2325:12:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":17303,"indexExpression":{"id":17302,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17291,"src":"2338:1:84","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2325:15:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":17306,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2352:1:84","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":17305,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2344:7:84","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17304,"name":"address","nodeType":"ElementaryTypeName","src":"2344:7:84","typeDescriptions":{}}},"id":17307,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2344:10:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2325:29:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17327,"nodeType":"IfStatement","src":"2321:149:84","trueBody":{"id":17326,"nodeType":"Block","src":"2356:114:84","statements":[{"expression":{"id":17315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":17309,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17229,"src":"2366:12:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":17312,"indexExpression":{"expression":{"id":17310,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17236,"src":"2379:6:84","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$21632_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":17311,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21619,"src":"2379:12:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2366:26:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":17313,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"2366:29:84","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17314,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17291,"src":"2398:1:84","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"2366:33:84","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":17316,"nodeType":"ExpressionStatement","src":"2366:33:84"},{"expression":{"id":17322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17317,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17233,"src":"2409:12:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":17319,"indexExpression":{"id":17318,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17291,"src":"2422:1:84","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2409:15:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":17320,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17236,"src":"2427:6:84","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$21632_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":17321,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21619,"src":"2427:12:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2409:30:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":17323,"nodeType":"ExpressionStatement","src":"2409:30:84"},{"expression":{"hexValue":"66616c7365","id":17324,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2456:5:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":17240,"id":17325,"nodeType":"Return","src":"2449:12:84"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":17297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17294,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17291,"src":"2282:1:84","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":17295,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17236,"src":"2286:6:84","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$21632_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":17296,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":21629,"src":"2286:20:84","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"2282:24:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17329,"initializationExpression":{"assignments":[17291],"declarations":[{"constant":false,"id":17291,"mutability":"mutable","name":"i","nameLocation":"2275:1:84","nodeType":"VariableDeclaration","scope":17329,"src":"2268:8:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":17290,"name":"uint16","nodeType":"ElementaryTypeName","src":"2268:6:84","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"id":17293,"initialValue":{"hexValue":"30","id":17292,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2279:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2268:12:84"},"loopExpression":{"expression":{"id":17299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2308:3:84","subExpression":{"id":17298,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17291,"src":"2308:1:84","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":17300,"nodeType":"ExpressionStatement","src":"2308:3:84"},"nodeType":"ForStatement","src":"2263:213:84"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":17335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17331,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17236,"src":"2490:6:84","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$21632_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":17332,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":21629,"src":"2490:20:84","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":17333,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17236,"src":"2513:6:84","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$21632_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":17334,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"maxNumberReserves","nodeType":"MemberAccess","referencedDeclaration":21631,"src":"2513:24:84","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"2490:47:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":17336,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"2539:6:84","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":17337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"NO_MORE_RESERVES_ALLOWED","nodeType":"MemberAccess","referencedDeclaration":12416,"src":"2539:31:84","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17330,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2482:7:84","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":17338,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2482:89:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17339,"nodeType":"ExpressionStatement","src":"2482:89:84"},{"expression":{"id":17347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":17340,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17229,"src":"2577:12:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":17343,"indexExpression":{"expression":{"id":17341,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17236,"src":"2590:6:84","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$21632_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":17342,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21619,"src":"2590:12:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2577:26:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":17344,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"2577:29:84","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":17345,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17236,"src":"2609:6:84","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$21632_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":17346,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":21629,"src":"2609:20:84","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"2577:52:84","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":17348,"nodeType":"ExpressionStatement","src":"2577:52:84"},{"expression":{"id":17355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17349,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17233,"src":"2635:12:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":17352,"indexExpression":{"expression":{"id":17350,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17236,"src":"2648:6:84","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$21632_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":17351,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":21629,"src":"2648:20:84","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2635:34:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":17353,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17236,"src":"2672:6:84","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$21632_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}},"id":17354,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21619,"src":"2672:12:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2635:49:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":17356,"nodeType":"ExpressionStatement","src":"2635:49:84"},{"expression":{"hexValue":"74727565","id":17357,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2697:4:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":17240,"id":17358,"nodeType":"Return","src":"2690:11:84"}]},"documentation":{"id":17224,"nodeType":"StructuredDocumentation","src":"1257:350:84","text":" @notice Initialize an asset reserve and add the reserve to the list of reserves\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param params Additional parameters needed for initiation\n @return true if appended, false if inserted at existing empty spot"},"functionSelector":"69fc1bdf","id":17360,"implemented":true,"kind":"function","modifiers":[],"name":"executeInitReserve","nameLocation":"1619:18:84","nodeType":"FunctionDefinition","parameters":{"id":17237,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17229,"mutability":"mutable","name":"reservesData","nameLocation":"1693:12:84","nodeType":"VariableDeclaration","scope":17360,"src":"1643:62:84","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":17228,"keyType":{"id":17225,"name":"address","nodeType":"ElementaryTypeName","src":"1651:7:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1643:41:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":17227,"nodeType":"UserDefinedTypeName","pathNode":{"id":17226,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"1662:21:84"},"referencedDeclaration":21315,"src":"1662:21:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":17233,"mutability":"mutable","name":"reservesList","nameLocation":"1747:12:84","nodeType":"VariableDeclaration","scope":17360,"src":"1711:48:84","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":17232,"keyType":{"id":17230,"name":"uint256","nodeType":"ElementaryTypeName","src":"1719:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"1711:27:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":17231,"name":"address","nodeType":"ElementaryTypeName","src":"1730:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":17236,"mutability":"mutable","name":"params","nameLocation":"1800:6:84","nodeType":"VariableDeclaration","scope":17360,"src":"1765:41:84","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$21632_memory_ptr","typeString":"struct DataTypes.InitReserveParams"},"typeName":{"id":17235,"nodeType":"UserDefinedTypeName","pathNode":{"id":17234,"name":"DataTypes.InitReserveParams","nodeType":"IdentifierPath","referencedDeclaration":21632,"src":"1765:27:84"},"referencedDeclaration":21632,"src":"1765:27:84","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$21632_storage_ptr","typeString":"struct DataTypes.InitReserveParams"}},"visibility":"internal"}],"src":"1637:173:84"},"returnParameters":{"id":17240,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17239,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17360,"src":"1829:4:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17238,"name":"bool","nodeType":"ElementaryTypeName","src":"1829:4:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1828:6:84"},"scope":17617,"src":"1610:1096:84","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":17378,"nodeType":"Block","src":"3005:49:84","statements":[{"expression":{"arguments":[{"id":17374,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17365,"src":"3038:2:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17375,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17367,"src":"3042:6:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":17371,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17363,"src":"3018:5:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17370,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"3011:6:84","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":17372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3011:13:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":17373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":78,"src":"3011:26:84","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":17376,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3011:38:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17377,"nodeType":"ExpressionStatement","src":"3011:38:84"}]},"documentation":{"id":17361,"nodeType":"StructuredDocumentation","src":"2710:211:84","text":" @notice Rescue and transfer tokens locked in this contract\n @param token The address of the token\n @param to The address of the recipient\n @param amount The amount of token to transfer"},"functionSelector":"87b322b2","id":17379,"implemented":true,"kind":"function","modifiers":[],"name":"executeRescueTokens","nameLocation":"2933:19:84","nodeType":"FunctionDefinition","parameters":{"id":17368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17363,"mutability":"mutable","name":"token","nameLocation":"2961:5:84","nodeType":"VariableDeclaration","scope":17379,"src":"2953:13:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17362,"name":"address","nodeType":"ElementaryTypeName","src":"2953:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17365,"mutability":"mutable","name":"to","nameLocation":"2976:2:84","nodeType":"VariableDeclaration","scope":17379,"src":"2968:10:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17364,"name":"address","nodeType":"ElementaryTypeName","src":"2968:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17367,"mutability":"mutable","name":"amount","nameLocation":"2988:6:84","nodeType":"VariableDeclaration","scope":17379,"src":"2980:14:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17366,"name":"uint256","nodeType":"ElementaryTypeName","src":"2980:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2952:43:84"},"returnParameters":{"id":17369,"nodeType":"ParameterList","parameters":[],"src":"3005:0:84"},"scope":17617,"src":"2924:130:84","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":17470,"nodeType":"Block","src":"3455:783:84","statements":[{"body":{"id":17468,"nodeType":"Block","src":"3505:729:84","statements":[{"assignments":[17403],"declarations":[{"constant":false,"id":17403,"mutability":"mutable","name":"assetAddress","nameLocation":"3521:12:84","nodeType":"VariableDeclaration","scope":17468,"src":"3513:20:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17402,"name":"address","nodeType":"ElementaryTypeName","src":"3513:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":17407,"initialValue":{"baseExpression":{"id":17404,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17388,"src":"3536:6:84","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":17406,"indexExpression":{"id":17405,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17392,"src":"3543:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3536:9:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3513:32:84"},{"assignments":[17412],"declarations":[{"constant":false,"id":17412,"mutability":"mutable","name":"reserve","nameLocation":"3584:7:84","nodeType":"VariableDeclaration","scope":17468,"src":"3554:37:84","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":17411,"nodeType":"UserDefinedTypeName","pathNode":{"id":17410,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"3554:21:84"},"referencedDeclaration":21315,"src":"3554:21:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":17416,"initialValue":{"baseExpression":{"id":17413,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17385,"src":"3594:12:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":17415,"indexExpression":{"id":17414,"name":"assetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17403,"src":"3607:12:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3594:26:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"3554:66:84"},{"condition":{"id":17421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3731:34:84","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":17417,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17412,"src":"3732:7:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17418,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":21286,"src":"3732:21:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":17419,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getActive","nodeType":"MemberAccess","referencedDeclaration":10983,"src":"3732:31:84","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":17420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3732:33:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17424,"nodeType":"IfStatement","src":"3727:67:84","trueBody":{"id":17423,"nodeType":"Block","src":"3767:27:84","statements":[{"id":17422,"nodeType":"Continue","src":"3777:8:84"}]}},{"assignments":[17426],"declarations":[{"constant":false,"id":17426,"mutability":"mutable","name":"accruedToTreasury","nameLocation":"3810:17:84","nodeType":"VariableDeclaration","scope":17468,"src":"3802:25:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17425,"name":"uint256","nodeType":"ElementaryTypeName","src":"3802:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17429,"initialValue":{"expression":{"id":17427,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17412,"src":"3830:7:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17428,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"accruedToTreasury","nodeType":"MemberAccess","referencedDeclaration":21310,"src":"3830:25:84","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"3802:53:84"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17430,"name":"accruedToTreasury","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17426,"src":"3868:17:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":17431,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3889:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3868:22:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17467,"nodeType":"IfStatement","src":"3864:364:84","trueBody":{"id":17466,"nodeType":"Block","src":"3892:336:84","statements":[{"expression":{"id":17437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17433,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17412,"src":"3902:7:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17435,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"accruedToTreasury","nodeType":"MemberAccess","referencedDeclaration":21310,"src":"3902:25:84","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":17436,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3930:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3902:29:84","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":17438,"nodeType":"ExpressionStatement","src":"3902:29:84"},{"assignments":[17440],"declarations":[{"constant":false,"id":17440,"mutability":"mutable","name":"normalizedIncome","nameLocation":"3949:16:84","nodeType":"VariableDeclaration","scope":17466,"src":"3941:24:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17439,"name":"uint256","nodeType":"ElementaryTypeName","src":"3941:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17444,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17441,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17412,"src":"3968:7:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17442,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getNormalizedIncome","nodeType":"MemberAccess","referencedDeclaration":17715,"src":"3968:27:84","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$21315_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (uint256)"}},"id":17443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3968:29:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3941:56:84"},{"assignments":[17446],"declarations":[{"constant":false,"id":17446,"mutability":"mutable","name":"amountToMint","nameLocation":"4015:12:84","nodeType":"VariableDeclaration","scope":17466,"src":"4007:20:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17445,"name":"uint256","nodeType":"ElementaryTypeName","src":"4007:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17451,"initialValue":{"arguments":[{"id":17449,"name":"normalizedIncome","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17440,"src":"4055:16:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17447,"name":"accruedToTreasury","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17426,"src":"4030:17:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"4030:24:84","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":17450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4030:42:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4007:65:84"},{"expression":{"arguments":[{"id":17457,"name":"amountToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17446,"src":"4128:12:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17458,"name":"normalizedIncome","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17440,"src":"4142:16:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":17453,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17412,"src":"4090:7:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17454,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"4090:21:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17452,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3861,"src":"4082:7:84","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3861_$","typeString":"type(contract IAToken)"}},"id":17455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4082:30:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":17456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mintToTreasury","nodeType":"MemberAccess","referencedDeclaration":3778,"src":"4082:45:84","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) external"}},"id":17459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4082:77:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17460,"nodeType":"ExpressionStatement","src":"4082:77:84"},{"eventCall":{"arguments":[{"id":17462,"name":"assetAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17403,"src":"4192:12:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17463,"name":"amountToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17446,"src":"4206:12:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17461,"name":"MintedToTreasury","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17217,"src":"4175:16:84","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":17464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4175:44:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17465,"nodeType":"EmitStatement","src":"4170:49:84"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17395,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17392,"src":"3481:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":17396,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17388,"src":"3485:6:84","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":17397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3485:13:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3481:17:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17469,"initializationExpression":{"assignments":[17392],"declarations":[{"constant":false,"id":17392,"mutability":"mutable","name":"i","nameLocation":"3474:1:84","nodeType":"VariableDeclaration","scope":17469,"src":"3466:9:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17391,"name":"uint256","nodeType":"ElementaryTypeName","src":"3466:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17394,"initialValue":{"hexValue":"30","id":17393,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3478:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3466:13:84"},"loopExpression":{"expression":{"id":17400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3500:3:84","subExpression":{"id":17399,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17392,"src":"3500:1:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17401,"nodeType":"ExpressionStatement","src":"3500:3:84"},"nodeType":"ForStatement","src":"3461:773:84"}]},"documentation":{"id":17380,"nodeType":"StructuredDocumentation","src":"3058:251:84","text":" @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\n @param reservesData The state of all the reserves\n @param assets The list of reserves for which the minting needs to be executed"},"functionSelector":"48c2ca8c","id":17471,"implemented":true,"kind":"function","modifiers":[],"name":"executeMintToTreasury","nameLocation":"3321:21:84","nodeType":"FunctionDefinition","parameters":{"id":17389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17385,"mutability":"mutable","name":"reservesData","nameLocation":"3398:12:84","nodeType":"VariableDeclaration","scope":17471,"src":"3348:62:84","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":17384,"keyType":{"id":17381,"name":"address","nodeType":"ElementaryTypeName","src":"3356:7:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3348:41:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":17383,"nodeType":"UserDefinedTypeName","pathNode":{"id":17382,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"3367:21:84"},"referencedDeclaration":21315,"src":"3367:21:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":17388,"mutability":"mutable","name":"assets","nameLocation":"3435:6:84","nodeType":"VariableDeclaration","scope":17471,"src":"3416:25:84","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":17386,"name":"address","nodeType":"ElementaryTypeName","src":"3416:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":17387,"nodeType":"ArrayTypeName","src":"3416:9:84","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3342:103:84"},"returnParameters":{"id":17390,"nodeType":"ParameterList","parameters":[],"src":"3455:0:84"},"scope":17617,"src":"3312:926:84","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":17507,"nodeType":"Block","src":"4680:207:84","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"baseExpression":{"id":17483,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17477,"src":"4694:12:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":17485,"indexExpression":{"id":17484,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17479,"src":"4707:5:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4694:19:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":17486,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":21286,"src":"4694:33:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":17487,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDebtCeiling","nodeType":"MemberAccess","referencedDeclaration":11491,"src":"4694:48:84","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":17488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4694:50:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":17489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4748:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4694:55:84","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":17491,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"4751:6:84","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":17492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"DEBT_CEILING_NOT_ZERO","nodeType":"MemberAccess","referencedDeclaration":12611,"src":"4751:28:84","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17482,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4686:7:84","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":17493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4686:94:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17494,"nodeType":"ExpressionStatement","src":"4686:94:84"},{"expression":{"id":17500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":17495,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17477,"src":"4786:12:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":17497,"indexExpression":{"id":17496,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17479,"src":"4799:5:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4786:19:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":17498,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"isolationModeTotalDebt","nodeType":"MemberAccess","referencedDeclaration":21314,"src":"4786:42:84","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":17499,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4831:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4786:46:84","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":17501,"nodeType":"ExpressionStatement","src":"4786:46:84"},{"eventCall":{"arguments":[{"id":17503,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17479,"src":"4873:5:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":17504,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4880:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":17502,"name":"IsolationModeTotalDebtUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17223,"src":"4843:29:84","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":17505,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4843:39:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17506,"nodeType":"EmitStatement","src":"4838:44:84"}]},"documentation":{"id":17472,"nodeType":"StructuredDocumentation","src":"4242:291:84","text":" @notice Resets the isolation mode total debt of the given asset to zero\n @dev It requires the given asset has zero debt ceiling\n @param reservesData The state of all the reserves\n @param asset The address of the underlying asset to reset the isolationModeTotalDebt"},"functionSelector":"1e3b4145","id":17508,"implemented":true,"kind":"function","modifiers":[],"name":"executeResetIsolationModeTotalDebt","nameLocation":"4545:34:84","nodeType":"FunctionDefinition","parameters":{"id":17480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17477,"mutability":"mutable","name":"reservesData","nameLocation":"4635:12:84","nodeType":"VariableDeclaration","scope":17508,"src":"4585:62:84","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":17476,"keyType":{"id":17473,"name":"address","nodeType":"ElementaryTypeName","src":"4593:7:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"4585:41:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":17475,"nodeType":"UserDefinedTypeName","pathNode":{"id":17474,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"4604:21:84"},"referencedDeclaration":21315,"src":"4604:21:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":17479,"mutability":"mutable","name":"asset","nameLocation":"4661:5:84","nodeType":"VariableDeclaration","scope":17508,"src":"4653:13:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17478,"name":"address","nodeType":"ElementaryTypeName","src":"4653:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4579:91:84"},"returnParameters":{"id":17481,"nodeType":"ParameterList","parameters":[],"src":"4680:0:84"},"scope":17617,"src":"4536:351:84","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":17557,"nodeType":"Block","src":"5303:228:84","statements":[{"assignments":[17527],"declarations":[{"constant":false,"id":17527,"mutability":"mutable","name":"reserve","nameLocation":"5339:7:84","nodeType":"VariableDeclaration","scope":17557,"src":"5309:37:84","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":17526,"nodeType":"UserDefinedTypeName","pathNode":{"id":17525,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"5309:21:84"},"referencedDeclaration":21315,"src":"5309:21:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":17531,"initialValue":{"baseExpression":{"id":17528,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17514,"src":"5349:12:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":17530,"indexExpression":{"id":17529,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17520,"src":"5362:5:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5349:19:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"5309:59:84"},{"expression":{"arguments":[{"id":17535,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17518,"src":"5410:12:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":17536,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17527,"src":"5424:7:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"id":17537,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17520,"src":"5433:5:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":17532,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20908,"src":"5374:15:84","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$20908_$","typeString":"type(library ValidationLogic)"}},"id":17534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateDropReserve","nodeType":"MemberAccess","referencedDeclaration":20694,"src":"5374:35:84","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_ReserveData_$21315_storage_ptr_$_t_address_$returns$__$","typeString":"function (mapping(uint256 => address),struct DataTypes.ReserveData storage pointer,address) view"}},"id":17538,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5374:65:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17539,"nodeType":"ExpressionStatement","src":"5374:65:84"},{"expression":{"id":17550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":17540,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17518,"src":"5445:12:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":17545,"indexExpression":{"expression":{"baseExpression":{"id":17541,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17514,"src":"5458:12:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":17543,"indexExpression":{"id":17542,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17520,"src":"5471:5:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5458:19:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":17544,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"5458:22:84","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5445:36:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":17548,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5492:1:84","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":17547,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5484:7:84","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17546,"name":"address","nodeType":"ElementaryTypeName","src":"5484:7:84","typeDescriptions":{}}},"id":17549,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5484:10:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5445:49:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":17551,"nodeType":"ExpressionStatement","src":"5445:49:84"},{"expression":{"id":17555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"5500:26:84","subExpression":{"baseExpression":{"id":17552,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17514,"src":"5507:12:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":17554,"indexExpression":{"id":17553,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17520,"src":"5520:5:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5507:19:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17556,"nodeType":"ExpressionStatement","src":"5500:26:84"}]},"documentation":{"id":17509,"nodeType":"StructuredDocumentation","src":"4891:227:84","text":" @notice Drop a reserve\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param asset The address of the underlying asset of the reserve"},"functionSelector":"9cf57023","id":17558,"implemented":true,"kind":"function","modifiers":[],"name":"executeDropReserve","nameLocation":"5130:18:84","nodeType":"FunctionDefinition","parameters":{"id":17521,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17514,"mutability":"mutable","name":"reservesData","nameLocation":"5204:12:84","nodeType":"VariableDeclaration","scope":17558,"src":"5154:62:84","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":17513,"keyType":{"id":17510,"name":"address","nodeType":"ElementaryTypeName","src":"5162:7:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5154:41:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":17512,"nodeType":"UserDefinedTypeName","pathNode":{"id":17511,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"5173:21:84"},"referencedDeclaration":21315,"src":"5173:21:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":17518,"mutability":"mutable","name":"reservesList","nameLocation":"5258:12:84","nodeType":"VariableDeclaration","scope":17558,"src":"5222:48:84","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":17517,"keyType":{"id":17515,"name":"uint256","nodeType":"ElementaryTypeName","src":"5230:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"5222:27:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":17516,"name":"address","nodeType":"ElementaryTypeName","src":"5241:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":17520,"mutability":"mutable","name":"asset","nameLocation":"5284:5:84","nodeType":"VariableDeclaration","scope":17558,"src":"5276:13:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17519,"name":"address","nodeType":"ElementaryTypeName","src":"5276:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5148:145:84"},"returnParameters":{"id":17522,"nodeType":"ParameterList","parameters":[],"src":"5303:0:84"},"scope":17617,"src":"5121:410:84","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":17615,"nodeType":"Block","src":"6921:359:84","statements":[{"expression":{"id":17604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":17591,"name":"totalCollateralBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17579,"src":"6935:19:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17592,"name":"totalDebtBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17581,"src":"6962:13:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17593,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17587,"src":"6983:3:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17594,"name":"currentLiquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17585,"src":"6994:27:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17595,"name":"healthFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17589,"src":"7029:12:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null],"id":17596,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"6927:122:84","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$__$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17599,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17564,"src":"7090:12:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":17600,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17568,"src":"7104:12:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":17601,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17573,"src":"7118:15:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"id":17602,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17576,"src":"7135:6:84","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}],"expression":{"id":17597,"name":"GenericLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15855,"src":"7052:12:84","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GenericLogic_$15855_$","typeString":"type(library GenericLogic)"}},"id":17598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateUserAccountData","nodeType":"MemberAccess","referencedDeclaration":15713,"src":"7052:37:84","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_$_t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.CalculateUserAccountDataParams memory) view returns (uint256,uint256,uint256,uint256,uint256,bool)"}},"id":17603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7052:90:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,bool)"}},"src":"6927:215:84","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17605,"nodeType":"ExpressionStatement","src":"6927:215:84"},{"expression":{"id":17613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17606,"name":"availableBorrowsBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17583,"src":"7149:20:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17609,"name":"totalCollateralBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17579,"src":"7218:19:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17610,"name":"totalDebtBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17581,"src":"7245:13:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17611,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17587,"src":"7266:3:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17607,"name":"GenericLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15855,"src":"7172:12:84","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GenericLogic_$15855_$","typeString":"type(library GenericLogic)"}},"id":17608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateAvailableBorrows","nodeType":"MemberAccess","referencedDeclaration":15748,"src":"7172:38:84","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":17612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7172:103:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7149:126:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17614,"nodeType":"ExpressionStatement","src":"7149:126:84"}]},"documentation":{"id":17559,"nodeType":"StructuredDocumentation","src":"5535:858:84","text":" @notice Returns the user account data across all the reserves\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param eModeCategories The configuration of all the efficiency mode categories\n @param params Additional params needed for the calculation\n @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\n @return totalDebtBase The total debt of the user in the base currency used by the price feed\n @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\n @return currentLiquidationThreshold The liquidation threshold of the user\n @return ltv The loan to value of The user\n @return healthFactor The current health factor of the user"},"functionSelector":"26ec273f","id":17616,"implemented":true,"kind":"function","modifiers":[],"name":"executeGetUserAccountData","nameLocation":"6405:25:84","nodeType":"FunctionDefinition","parameters":{"id":17577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17564,"mutability":"mutable","name":"reservesData","nameLocation":"6486:12:84","nodeType":"VariableDeclaration","scope":17616,"src":"6436:62:84","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":17563,"keyType":{"id":17560,"name":"address","nodeType":"ElementaryTypeName","src":"6444:7:84","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6436:41:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":17562,"nodeType":"UserDefinedTypeName","pathNode":{"id":17561,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"6455:21:84"},"referencedDeclaration":21315,"src":"6455:21:84","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":17568,"mutability":"mutable","name":"reservesList","nameLocation":"6540:12:84","nodeType":"VariableDeclaration","scope":17616,"src":"6504:48:84","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":17567,"keyType":{"id":17565,"name":"uint256","nodeType":"ElementaryTypeName","src":"6512:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"6504:27:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":17566,"name":"address","nodeType":"ElementaryTypeName","src":"6523:7:84","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":17573,"mutability":"mutable","name":"eModeCategories","nameLocation":"6608:15:84","nodeType":"VariableDeclaration","scope":17616,"src":"6558:65:84","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":17572,"keyType":{"id":17569,"name":"uint8","nodeType":"ElementaryTypeName","src":"6566:5:84","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"6558:41:84","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":17571,"nodeType":"UserDefinedTypeName","pathNode":{"id":17570,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":21333,"src":"6575:23:84"},"referencedDeclaration":21333,"src":"6575:23:84","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":17576,"mutability":"mutable","name":"params","nameLocation":"6677:6:84","nodeType":"VariableDeclaration","scope":17616,"src":"6629:54:84","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams"},"typeName":{"id":17575,"nodeType":"UserDefinedTypeName","pathNode":{"id":17574,"name":"DataTypes.CalculateUserAccountDataParams","nodeType":"IdentifierPath","referencedDeclaration":21556,"src":"6629:40:84"},"referencedDeclaration":21556,"src":"6629:40:84","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_storage_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams"}},"visibility":"internal"}],"src":"6430:257:84"},"returnParameters":{"id":17590,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17579,"mutability":"mutable","name":"totalCollateralBase","nameLocation":"6738:19:84","nodeType":"VariableDeclaration","scope":17616,"src":"6730:27:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17578,"name":"uint256","nodeType":"ElementaryTypeName","src":"6730:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17581,"mutability":"mutable","name":"totalDebtBase","nameLocation":"6773:13:84","nodeType":"VariableDeclaration","scope":17616,"src":"6765:21:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17580,"name":"uint256","nodeType":"ElementaryTypeName","src":"6765:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17583,"mutability":"mutable","name":"availableBorrowsBase","nameLocation":"6802:20:84","nodeType":"VariableDeclaration","scope":17616,"src":"6794:28:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17582,"name":"uint256","nodeType":"ElementaryTypeName","src":"6794:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17585,"mutability":"mutable","name":"currentLiquidationThreshold","nameLocation":"6838:27:84","nodeType":"VariableDeclaration","scope":17616,"src":"6830:35:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17584,"name":"uint256","nodeType":"ElementaryTypeName","src":"6830:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17587,"mutability":"mutable","name":"ltv","nameLocation":"6881:3:84","nodeType":"VariableDeclaration","scope":17616,"src":"6873:11:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17586,"name":"uint256","nodeType":"ElementaryTypeName","src":"6873:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17589,"mutability":"mutable","name":"healthFactor","nameLocation":"6900:12:84","nodeType":"VariableDeclaration","scope":17616,"src":"6892:20:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17588,"name":"uint256","nodeType":"ElementaryTypeName","src":"6892:7:84","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6722:196:84"},"scope":17617,"src":"6396:884:84","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":17618,"src":"863:6419:84","usedErrors":[]}],"src":"37:7246:84"},"id":84},"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol","exportedSymbols":{"DataTypes":[21633],"Errors":[12642],"GPv2SafeERC20":[118],"IERC20":[1442],"IReserveInterestRateStrategy":[5913],"IStableDebtToken":[6109],"IVariableDebtToken":[6155],"MathUtils":[21098],"PercentageMath":[21132],"ReserveConfiguration":[11857],"ReserveLogic":[18377],"SafeCast":[1966],"WadRayMath":[21219]},"id":18378,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":17619,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:85"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../../dependencies/openzeppelin/contracts/IERC20.sol","id":17621,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18378,"sourceUnit":1443,"src":"63:79:85","symbolAliases":[{"foreign":{"id":17620,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:6:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":17623,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18378,"sourceUnit":119,"src":"143:87:85","symbolAliases":[{"foreign":{"id":17622,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"151:13:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol","file":"../../../interfaces/IStableDebtToken.sol","id":17625,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18378,"sourceUnit":6110,"src":"231:74:85","symbolAliases":[{"foreign":{"id":17624,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"239:16:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol","file":"../../../interfaces/IVariableDebtToken.sol","id":17627,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18378,"sourceUnit":6156,"src":"306:78:85","symbolAliases":[{"foreign":{"id":17626,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"314:18:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol","file":"../../../interfaces/IReserveInterestRateStrategy.sol","id":17629,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18378,"sourceUnit":5914,"src":"385:98:85","symbolAliases":[{"foreign":{"id":17628,"name":"IReserveInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"src":"393:28:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../configuration/ReserveConfiguration.sol","id":17631,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18378,"sourceUnit":11858,"src":"484:79:85","symbolAliases":[{"foreign":{"id":17630,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"492:20:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/MathUtils.sol","file":"../math/MathUtils.sol","id":17633,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18378,"sourceUnit":21099,"src":"564:48:85","symbolAliases":[{"foreign":{"id":17632,"name":"MathUtils","nodeType":"Identifier","overloadedDeclarations":[],"src":"572:9:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol","file":"../math/WadRayMath.sol","id":17635,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18378,"sourceUnit":21220,"src":"613:50:85","symbolAliases":[{"foreign":{"id":17634,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"621:10:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol","file":"../math/PercentageMath.sol","id":17637,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18378,"sourceUnit":21133,"src":"664:58:85","symbolAliases":[{"foreign":{"id":17636,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"672:14:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol","file":"../helpers/Errors.sol","id":17639,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18378,"sourceUnit":12643,"src":"723:45:85","symbolAliases":[{"foreign":{"id":17638,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"731:6:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":17641,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18378,"sourceUnit":21634,"src":"769:49:85","symbolAliases":[{"foreign":{"id":17640,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"777:9:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"../../../dependencies/openzeppelin/contracts/SafeCast.sol","id":17643,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18378,"sourceUnit":1967,"src":"819:83:85","symbolAliases":[{"foreign":{"id":17642,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"827:8:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"ReserveLogic","contractDependencies":[],"contractKind":"library","documentation":{"id":17644,"nodeType":"StructuredDocumentation","src":"904:115:85","text":" @title ReserveLogic library\n @author Aave\n @notice Implements the logic to update the reserves state"},"fullyImplemented":true,"id":18377,"linearizedBaseContracts":[18377],"name":"ReserveLogic","nameLocation":"1028:12:85","nodeType":"ContractDefinition","nodes":[{"id":17647,"libraryName":{"id":17645,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":21219,"src":"1051:10:85"},"nodeType":"UsingForDirective","src":"1045:29:85","typeName":{"id":17646,"name":"uint256","nodeType":"ElementaryTypeName","src":"1066:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":17650,"libraryName":{"id":17648,"name":"PercentageMath","nodeType":"IdentifierPath","referencedDeclaration":21132,"src":"1083:14:85"},"nodeType":"UsingForDirective","src":"1077:33:85","typeName":{"id":17649,"name":"uint256","nodeType":"ElementaryTypeName","src":"1102:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":17653,"libraryName":{"id":17651,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"1119:8:85"},"nodeType":"UsingForDirective","src":"1113:27:85","typeName":{"id":17652,"name":"uint256","nodeType":"ElementaryTypeName","src":"1132:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":17657,"libraryName":{"id":17654,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"1149:13:85"},"nodeType":"UsingForDirective","src":"1143:31:85","typeName":{"id":17656,"nodeType":"UserDefinedTypeName","pathNode":{"id":17655,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1167:6:85"},"referencedDeclaration":1442,"src":"1167:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"id":17661,"libraryName":{"id":17658,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":18377,"src":"1183:12:85"},"nodeType":"UsingForDirective","src":"1177:45:85","typeName":{"id":17660,"nodeType":"UserDefinedTypeName","pathNode":{"id":17659,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"1200:21:85"},"referencedDeclaration":21315,"src":"1200:21:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},{"id":17665,"libraryName":{"id":17662,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":11857,"src":"1231:20:85"},"nodeType":"UsingForDirective","src":"1225:65:85","typeName":{"id":17664,"nodeType":"UserDefinedTypeName","pathNode":{"id":17663,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"1256:33:85"},"referencedDeclaration":21318,"src":"1256:33:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"anonymous":false,"id":17679,"name":"ReserveDataUpdated","nameLocation":"1334:18:85","nodeType":"EventDefinition","parameters":{"id":17678,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17667,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1374:7:85","nodeType":"VariableDeclaration","scope":17679,"src":"1358:23:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17666,"name":"address","nodeType":"ElementaryTypeName","src":"1358:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17669,"indexed":false,"mutability":"mutable","name":"liquidityRate","nameLocation":"1395:13:85","nodeType":"VariableDeclaration","scope":17679,"src":"1387:21:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17668,"name":"uint256","nodeType":"ElementaryTypeName","src":"1387:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17671,"indexed":false,"mutability":"mutable","name":"stableBorrowRate","nameLocation":"1422:16:85","nodeType":"VariableDeclaration","scope":17679,"src":"1414:24:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17670,"name":"uint256","nodeType":"ElementaryTypeName","src":"1414:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17673,"indexed":false,"mutability":"mutable","name":"variableBorrowRate","nameLocation":"1452:18:85","nodeType":"VariableDeclaration","scope":17679,"src":"1444:26:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17672,"name":"uint256","nodeType":"ElementaryTypeName","src":"1444:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17675,"indexed":false,"mutability":"mutable","name":"liquidityIndex","nameLocation":"1484:14:85","nodeType":"VariableDeclaration","scope":17679,"src":"1476:22:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17674,"name":"uint256","nodeType":"ElementaryTypeName","src":"1476:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17677,"indexed":false,"mutability":"mutable","name":"variableBorrowIndex","nameLocation":"1512:19:85","nodeType":"VariableDeclaration","scope":17679,"src":"1504:27:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17676,"name":"uint256","nodeType":"ElementaryTypeName","src":"1504:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1352:183:85"},"src":"1328:208:85"},{"body":{"id":17714,"nodeType":"Block","src":"2003:420:85","statements":[{"assignments":[17689],"declarations":[{"constant":false,"id":17689,"mutability":"mutable","name":"timestamp","nameLocation":"2016:9:85","nodeType":"VariableDeclaration","scope":17714,"src":"2009:16:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":17688,"name":"uint40","nodeType":"ElementaryTypeName","src":"2009:6:85","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"id":17692,"initialValue":{"expression":{"id":17690,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17683,"src":"2028:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17691,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"lastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":21298,"src":"2028:27:85","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"VariableDeclarationStatement","src":"2009:46:85"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17693,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17689,"src":"2097:9:85","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":17694,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2110:5:85","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":17695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"2110:15:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2097:28:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17712,"nodeType":"Block","src":"2264:155:85","statements":[{"expression":{"arguments":[{"expression":{"id":17708,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17683,"src":"2380:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17709,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21288,"src":"2380:22:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"expression":{"id":17703,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17683,"src":"2321:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17704,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":21290,"src":"2321:28:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":17705,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17689,"src":"2351:9:85","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint40","typeString":"uint40"}],"expression":{"id":17701,"name":"MathUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21098,"src":"2287:9:85","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MathUtils_$21098_$","typeString":"type(library MathUtils)"}},"id":17702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateLinearInterest","nodeType":"MemberAccess","referencedDeclaration":20956,"src":"2287:33:85","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint40_$returns$_t_uint256_$","typeString":"function (uint256,uint40) view returns (uint256)"}},"id":17706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2287:74:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"2287:81:85","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":17710,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2287:125:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17687,"id":17711,"nodeType":"Return","src":"2272:140:85"}]},"id":17713,"nodeType":"IfStatement","src":"2093:326:85","trueBody":{"id":17700,"nodeType":"Block","src":"2127:131:85","statements":[{"expression":{"expression":{"id":17697,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17683,"src":"2229:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17698,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21288,"src":"2229:22:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":17687,"id":17699,"nodeType":"Return","src":"2222:29:85"}]}}]},"documentation":{"id":17680,"nodeType":"StructuredDocumentation","src":"1540:352:85","text":" @notice Returns the ongoing normalized income for the reserve.\n @dev A value of 1e27 means there is no income. As time passes, the income is accrued\n @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\n @param reserve The reserve object\n @return The normalized income, expressed in ray"},"id":17715,"implemented":true,"kind":"function","modifiers":[],"name":"getNormalizedIncome","nameLocation":"1904:19:85","nodeType":"FunctionDefinition","parameters":{"id":17684,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17683,"mutability":"mutable","name":"reserve","nameLocation":"1959:7:85","nodeType":"VariableDeclaration","scope":17715,"src":"1929:37:85","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":17682,"nodeType":"UserDefinedTypeName","pathNode":{"id":17681,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"1929:21:85"},"referencedDeclaration":21315,"src":"1929:21:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"src":"1923:47:85"},"returnParameters":{"id":17687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17686,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17715,"src":"1994:7:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17685,"name":"uint256","nodeType":"ElementaryTypeName","src":"1994:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1993:9:85"},"scope":18377,"src":"1895:528:85","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17750,"nodeType":"Block","src":"2915:439:85","statements":[{"assignments":[17725],"declarations":[{"constant":false,"id":17725,"mutability":"mutable","name":"timestamp","nameLocation":"2928:9:85","nodeType":"VariableDeclaration","scope":17750,"src":"2921:16:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":17724,"name":"uint40","nodeType":"ElementaryTypeName","src":"2921:6:85","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"id":17728,"initialValue":{"expression":{"id":17726,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17719,"src":"2940:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17727,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"lastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":21298,"src":"2940:27:85","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"VariableDeclarationStatement","src":"2921:46:85"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17729,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17725,"src":"3009:9:85","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":17730,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3022:5:85","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":17731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"3022:15:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3009:28:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17748,"nodeType":"Block","src":"3181:169:85","statements":[{"expression":{"arguments":[{"expression":{"id":17744,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17719,"src":"3306:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17745,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":21292,"src":"3306:27:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"arguments":[{"expression":{"id":17739,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17719,"src":"3242:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17740,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21294,"src":"3242:33:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":17741,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17725,"src":"3277:9:85","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint40","typeString":"uint40"}],"expression":{"id":17737,"name":"MathUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21098,"src":"3204:9:85","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MathUtils_$21098_$","typeString":"type(library MathUtils)"}},"id":17738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateCompoundedInterest","nodeType":"MemberAccess","referencedDeclaration":21097,"src":"3204:37:85","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint40_$returns$_t_uint256_$","typeString":"function (uint256,uint40) view returns (uint256)"}},"id":17742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3204:83:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"3204:90:85","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":17746,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3204:139:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17723,"id":17747,"nodeType":"Return","src":"3189:154:85"}]},"id":17749,"nodeType":"IfStatement","src":"3005:345:85","trueBody":{"id":17736,"nodeType":"Block","src":"3039:136:85","statements":[{"expression":{"expression":{"id":17733,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17719,"src":"3141:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17734,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":21292,"src":"3141:27:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":17723,"id":17735,"nodeType":"Return","src":"3134:34:85"}]}}]},"documentation":{"id":17716,"nodeType":"StructuredDocumentation","src":"2427:379:85","text":" @notice Returns the ongoing normalized variable debt for the reserve.\n @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\n @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\n @param reserve The reserve object\n @return The normalized variable debt, expressed in ray"},"id":17751,"implemented":true,"kind":"function","modifiers":[],"name":"getNormalizedDebt","nameLocation":"2818:17:85","nodeType":"FunctionDefinition","parameters":{"id":17720,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17719,"mutability":"mutable","name":"reserve","nameLocation":"2871:7:85","nodeType":"VariableDeclaration","scope":17751,"src":"2841:37:85","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":17718,"nodeType":"UserDefinedTypeName","pathNode":{"id":17717,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"2841:21:85"},"referencedDeclaration":21315,"src":"2841:21:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"src":"2835:47:85"},"returnParameters":{"id":17723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17722,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17751,"src":"2906:7:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17721,"name":"uint256","nodeType":"ElementaryTypeName","src":"2906:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2905:9:85"},"scope":18377,"src":"2809:545:85","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17792,"nodeType":"Block","src":"3681:377:85","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint40","typeString":"uint40"},"id":17768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17761,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17755,"src":"3796:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17762,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"lastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":21298,"src":"3796:27:85","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"expression":{"id":17765,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3834:5:85","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":17766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"3834:15:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17764,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3827:6:85","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":17763,"name":"uint40","nodeType":"ElementaryTypeName","src":"3827:6:85","typeDescriptions":{}}},"id":17767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3827:23:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"3796:54:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17771,"nodeType":"IfStatement","src":"3792:81:85","trueBody":{"id":17770,"nodeType":"Block","src":"3852:21:85","statements":[{"functionReturnParameters":17760,"id":17769,"nodeType":"Return","src":"3860:7:85"}]}},{"expression":{"arguments":[{"id":17773,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17755,"src":"3894:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"id":17774,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17758,"src":"3903:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"id":17772,"name":"_updateIndexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18233,"src":"3879:14:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":17775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3879:37:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17776,"nodeType":"ExpressionStatement","src":"3879:37:85"},{"expression":{"arguments":[{"id":17778,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17755,"src":"3940:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"id":17779,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17758,"src":"3949:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"id":17777,"name":"_accrueToTreasury","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18152,"src":"3922:17:85","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":17780,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3922:40:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17781,"nodeType":"ExpressionStatement","src":"3922:40:85"},{"expression":{"id":17790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17782,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17755,"src":"4000:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17784,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"lastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":21298,"src":"4000:27:85","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":17787,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"4037:5:85","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":17788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"4037:15:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17786,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4030:6:85","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":17785,"name":"uint40","nodeType":"ElementaryTypeName","src":"4030:6:85","typeDescriptions":{}}},"id":17789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4030:23:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"4000:53:85","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"id":17791,"nodeType":"ExpressionStatement","src":"4000:53:85"}]},"documentation":{"id":17752,"nodeType":"StructuredDocumentation","src":"3358:195:85","text":" @notice Updates the liquidity cumulative index and the variable borrow index.\n @param reserve The reserve object\n @param reserveCache The caching layer for the reserve data"},"id":17793,"implemented":true,"kind":"function","modifiers":[],"name":"updateState","nameLocation":"3565:11:85","nodeType":"FunctionDefinition","parameters":{"id":17759,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17755,"mutability":"mutable","name":"reserve","nameLocation":"3612:7:85","nodeType":"VariableDeclaration","scope":17793,"src":"3582:37:85","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":17754,"nodeType":"UserDefinedTypeName","pathNode":{"id":17753,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"3582:21:85"},"referencedDeclaration":21315,"src":"3582:21:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":17758,"mutability":"mutable","name":"reserveCache","nameLocation":"3655:12:85","nodeType":"VariableDeclaration","scope":17793,"src":"3625:42:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":17757,"nodeType":"UserDefinedTypeName","pathNode":{"id":17756,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"3625:22:85"},"referencedDeclaration":21379,"src":"3625:22:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"src":"3576:95:85"},"returnParameters":{"id":17760,"nodeType":"ParameterList","parameters":[],"src":"3681:0:85"},"scope":18377,"src":"3556:502:85","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17835,"nodeType":"Block","src":"4652:378:85","statements":[{"assignments":[17807],"declarations":[{"constant":false,"id":17807,"mutability":"mutable","name":"result","nameLocation":"4835:6:85","nodeType":"VariableDeclaration","scope":17835,"src":"4827:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17806,"name":"uint256","nodeType":"ElementaryTypeName","src":"4827:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17824,"initialValue":{"arguments":[{"expression":{"id":17821,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17797,"src":"4929:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17822,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21288,"src":"4929:22:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17812,"name":"totalLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17799,"src":"4870:14:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":21218,"src":"4870:23:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":17814,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4870:25:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17808,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17801,"src":"4845:6:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":21218,"src":"4845:15:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":17810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4845:17:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":21198,"src":"4845:24:85","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":17815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4845:51:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":17816,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21219,"src":"4899:10:85","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$21219_$","typeString":"type(library WadRayMath)"}},"id":17817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RAY","nodeType":"MemberAccess","referencedDeclaration":21144,"src":"4899:14:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4845:68:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17819,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4844:70:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"4844:77:85","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":17823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4844:113:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4827:130:85"},{"expression":{"id":17831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17825,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17797,"src":"4963:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17827,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"liquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21288,"src":"4963:22:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17828,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17807,"src":"4988:6:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"4988:16:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":17830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4988:18:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"4963:43:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":17832,"nodeType":"ExpressionStatement","src":"4963:43:85"},{"expression":{"id":17833,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17807,"src":"5019:6:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17805,"id":17834,"nodeType":"Return","src":"5012:13:85"}]},"documentation":{"id":17794,"nodeType":"StructuredDocumentation","src":"4062:431:85","text":" @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\n to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\n @param reserve The reserve object\n @param totalLiquidity The total liquidity available in the reserve\n @param amount The amount to accumulate\n @return The next liquidity index of the reserve"},"id":17836,"implemented":true,"kind":"function","modifiers":[],"name":"cumulateToLiquidityIndex","nameLocation":"4505:24:85","nodeType":"FunctionDefinition","parameters":{"id":17802,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17797,"mutability":"mutable","name":"reserve","nameLocation":"4565:7:85","nodeType":"VariableDeclaration","scope":17836,"src":"4535:37:85","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":17796,"nodeType":"UserDefinedTypeName","pathNode":{"id":17795,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"4535:21:85"},"referencedDeclaration":21315,"src":"4535:21:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":17799,"mutability":"mutable","name":"totalLiquidity","nameLocation":"4586:14:85","nodeType":"VariableDeclaration","scope":17836,"src":"4578:22:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17798,"name":"uint256","nodeType":"ElementaryTypeName","src":"4578:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17801,"mutability":"mutable","name":"amount","nameLocation":"4614:6:85","nodeType":"VariableDeclaration","scope":17836,"src":"4606:14:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17800,"name":"uint256","nodeType":"ElementaryTypeName","src":"4606:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4529:95:85"},"returnParameters":{"id":17805,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17804,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17836,"src":"4643:7:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17803,"name":"uint256","nodeType":"ElementaryTypeName","src":"4643:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4642:9:85"},"scope":18377,"src":"4496:534:85","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":17907,"nodeType":"Block","src":"5681:445:85","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17852,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17840,"src":"5695:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17853,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"5695:21:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":17856,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5728:1:85","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":17855,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5720:7:85","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17854,"name":"address","nodeType":"ElementaryTypeName","src":"5720:7:85","typeDescriptions":{}}},"id":17857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5720:10:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5695:35:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":17859,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"5732:6:85","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":17860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_ALREADY_INITIALIZED","nodeType":"MemberAccess","referencedDeclaration":12551,"src":"5732:34:85","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":17851,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5687:7:85","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":17861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5687:80:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17862,"nodeType":"ExpressionStatement","src":"5687:80:85"},{"expression":{"id":17871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17863,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17840,"src":"5774:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17865,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"liquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21288,"src":"5774:22:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":17868,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21219,"src":"5807:10:85","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$21219_$","typeString":"type(library WadRayMath)"}},"id":17869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RAY","nodeType":"MemberAccess","referencedDeclaration":21144,"src":"5807:14:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17867,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5799:7:85","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":17866,"name":"uint128","nodeType":"ElementaryTypeName","src":"5799:7:85","typeDescriptions":{}}},"id":17870,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5799:23:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"5774:48:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":17872,"nodeType":"ExpressionStatement","src":"5774:48:85"},{"expression":{"id":17881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17873,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17840,"src":"5828:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17875,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"variableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":21292,"src":"5828:27:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":17878,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21219,"src":"5866:10:85","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$21219_$","typeString":"type(library WadRayMath)"}},"id":17879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RAY","nodeType":"MemberAccess","referencedDeclaration":21144,"src":"5866:14:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17877,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5858:7:85","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":17876,"name":"uint128","nodeType":"ElementaryTypeName","src":"5858:7:85","typeDescriptions":{}}},"id":17880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5858:23:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"5828:53:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":17882,"nodeType":"ExpressionStatement","src":"5828:53:85"},{"expression":{"id":17887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17883,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17840,"src":"5887:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17885,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"5887:21:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17886,"name":"aTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17842,"src":"5911:13:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5887:37:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":17888,"nodeType":"ExpressionStatement","src":"5887:37:85"},{"expression":{"id":17893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17889,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17840,"src":"5930:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17891,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"5930:30:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17892,"name":"stableDebtTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17844,"src":"5963:22:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5930:55:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":17894,"nodeType":"ExpressionStatement","src":"5930:55:85"},{"expression":{"id":17899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17895,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17840,"src":"5991:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17897,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21306,"src":"5991:32:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17898,"name":"variableDebtTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17846,"src":"6026:24:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5991:59:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":17900,"nodeType":"ExpressionStatement","src":"5991:59:85"},{"expression":{"id":17905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17901,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17840,"src":"6056:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17903,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":21308,"src":"6056:35:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17904,"name":"interestRateStrategyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17848,"src":"6094:27:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6056:65:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":17906,"nodeType":"ExpressionStatement","src":"6056:65:85"}]},"documentation":{"id":17837,"nodeType":"StructuredDocumentation","src":"5034:432:85","text":" @notice Initializes a reserve.\n @param reserve The reserve object\n @param aTokenAddress The address of the overlying atoken contract\n @param stableDebtTokenAddress The address of the overlying stable debt token contract\n @param variableDebtTokenAddress The address of the overlying variable debt token contract\n @param interestRateStrategyAddress The address of the interest rate strategy contract"},"id":17908,"implemented":true,"kind":"function","modifiers":[],"name":"init","nameLocation":"5478:4:85","nodeType":"FunctionDefinition","parameters":{"id":17849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17840,"mutability":"mutable","name":"reserve","nameLocation":"5518:7:85","nodeType":"VariableDeclaration","scope":17908,"src":"5488:37:85","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":17839,"nodeType":"UserDefinedTypeName","pathNode":{"id":17838,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"5488:21:85"},"referencedDeclaration":21315,"src":"5488:21:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":17842,"mutability":"mutable","name":"aTokenAddress","nameLocation":"5539:13:85","nodeType":"VariableDeclaration","scope":17908,"src":"5531:21:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17841,"name":"address","nodeType":"ElementaryTypeName","src":"5531:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17844,"mutability":"mutable","name":"stableDebtTokenAddress","nameLocation":"5566:22:85","nodeType":"VariableDeclaration","scope":17908,"src":"5558:30:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17843,"name":"address","nodeType":"ElementaryTypeName","src":"5558:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17846,"mutability":"mutable","name":"variableDebtTokenAddress","nameLocation":"5602:24:85","nodeType":"VariableDeclaration","scope":17908,"src":"5594:32:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17845,"name":"address","nodeType":"ElementaryTypeName","src":"5594:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17848,"mutability":"mutable","name":"interestRateStrategyAddress","nameLocation":"5640:27:85","nodeType":"VariableDeclaration","scope":17908,"src":"5632:35:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17847,"name":"address","nodeType":"ElementaryTypeName","src":"5632:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5482:189:85"},"returnParameters":{"id":17850,"nodeType":"ParameterList","parameters":[],"src":"5681:0:85"},"scope":18377,"src":"5469:657:85","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"canonicalName":"ReserveLogic.UpdateInterestRatesLocalVars","id":17917,"members":[{"constant":false,"id":17910,"mutability":"mutable","name":"nextLiquidityRate","nameLocation":"6180:17:85","nodeType":"VariableDeclaration","scope":17917,"src":"6172:25:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17909,"name":"uint256","nodeType":"ElementaryTypeName","src":"6172:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17912,"mutability":"mutable","name":"nextStableRate","nameLocation":"6211:14:85","nodeType":"VariableDeclaration","scope":17917,"src":"6203:22:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17911,"name":"uint256","nodeType":"ElementaryTypeName","src":"6203:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17914,"mutability":"mutable","name":"nextVariableRate","nameLocation":"6239:16:85","nodeType":"VariableDeclaration","scope":17917,"src":"6231:24:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17913,"name":"uint256","nodeType":"ElementaryTypeName","src":"6231:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17916,"mutability":"mutable","name":"totalVariableDebt","nameLocation":"6269:17:85","nodeType":"VariableDeclaration","scope":17917,"src":"6261:25:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17915,"name":"uint256","nodeType":"ElementaryTypeName","src":"6261:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"UpdateInterestRatesLocalVars","nameLocation":"6137:28:85","nodeType":"StructDefinition","scope":18377,"src":"6130:161:85","visibility":"public"},{"body":{"id":18023,"nodeType":"Block","src":"7044:1297:85","statements":[{"assignments":[17935],"declarations":[{"constant":false,"id":17935,"mutability":"mutable","name":"vars","nameLocation":"7086:4:85","nodeType":"VariableDeclaration","scope":18023,"src":"7050:40:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$17917_memory_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars"},"typeName":{"id":17934,"nodeType":"UserDefinedTypeName","pathNode":{"id":17933,"name":"UpdateInterestRatesLocalVars","nodeType":"IdentifierPath","referencedDeclaration":17917,"src":"7050:28:85"},"referencedDeclaration":17917,"src":"7050:28:85","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$17917_storage_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars"}},"visibility":"internal"}],"id":17936,"nodeType":"VariableDeclarationStatement","src":"7050:40:85"},{"expression":{"id":17946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17937,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17935,"src":"7097:4:85","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$17917_memory_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars memory"}},"id":17939,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalVariableDebt","nodeType":"MemberAccess","referencedDeclaration":17916,"src":"7097:22:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":17943,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17924,"src":"7172:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":17944,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":21359,"src":"7172:36:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":17940,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17924,"src":"7122:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":17941,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":21341,"src":"7122:35:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"7122:42:85","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":17945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7122:92:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7097:117:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17947,"nodeType":"ExpressionStatement","src":"7097:117:85"},{"expression":{"id":17980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":17948,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17935,"src":"7229:4:85","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$17917_memory_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars memory"}},"id":17950,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":17910,"src":"7229:22:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17951,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17935,"src":"7259:4:85","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$17917_memory_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars memory"}},"id":17952,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextStableRate","nodeType":"MemberAccess","referencedDeclaration":17912,"src":"7259:19:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17953,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17935,"src":"7286:4:85","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$17917_memory_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars memory"}},"id":17954,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextVariableRate","nodeType":"MemberAccess","referencedDeclaration":17914,"src":"7286:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17955,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"7221:92:85","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"expression":{"id":17963,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17921,"src":"7471:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17964,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"unbacked","nodeType":"MemberAccess","referencedDeclaration":21312,"src":"7471:16:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":17965,"name":"liquidityAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17928,"src":"7513:14:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17966,"name":"liquidityTaken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17930,"src":"7553:14:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17967,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17924,"src":"7594:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":17968,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":21351,"src":"7594:32:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17969,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17935,"src":"7655:4:85","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$17917_memory_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars memory"}},"id":17970,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalVariableDebt","nodeType":"MemberAccess","referencedDeclaration":17916,"src":"7655:22:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17971,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17924,"src":"7712:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":17972,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextAvgStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21349,"src":"7712:36:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17973,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17924,"src":"7773:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":17974,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveFactor","nodeType":"MemberAccess","referencedDeclaration":21365,"src":"7773:26:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17975,"name":"reserveAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17926,"src":"7818:14:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17976,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17924,"src":"7850:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":17977,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"7850:26:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":17961,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"7412:9:85","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":17962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CalculateInterestRatesParams","nodeType":"MemberAccess","referencedDeclaration":21617,"src":"7412:38:85","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_CalculateInterestRatesParams_$21617_storage_ptr_$","typeString":"type(struct DataTypes.CalculateInterestRatesParams storage pointer)"}},"id":17978,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["unbacked","liquidityAdded","liquidityTaken","totalStableDebt","totalVariableDebt","averageStableBorrowRate","reserveFactor","reserve","aToken"],"nodeType":"FunctionCall","src":"7412:473:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$21617_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$21617_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}],"expression":{"arguments":[{"expression":{"id":17957,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17921,"src":"7345:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17958,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":21308,"src":"7345:35:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17956,"name":"IReserveInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5913,"src":"7316:28:85","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IReserveInterestRateStrategy_$5913_$","typeString":"type(contract IReserveInterestRateStrategy)"}},"id":17959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7316:65:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IReserveInterestRateStrategy_$5913","typeString":"contract IReserveInterestRateStrategy"}},"id":17960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateInterestRates","nodeType":"MemberAccess","referencedDeclaration":5912,"src":"7316:88:85","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct DataTypes.CalculateInterestRatesParams memory) view external returns (uint256,uint256,uint256)"}},"id":17979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7316:575:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"src":"7221:670:85","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17981,"nodeType":"ExpressionStatement","src":"7221:670:85"},{"expression":{"id":17989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17982,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17921,"src":"7898:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17984,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":21290,"src":"7898:28:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":17985,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17935,"src":"7929:4:85","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$17917_memory_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars memory"}},"id":17986,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":17910,"src":"7929:22:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"7929:32:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":17988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7929:34:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"7898:65:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":17990,"nodeType":"ExpressionStatement","src":"7898:65:85"},{"expression":{"id":17998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":17991,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17921,"src":"7969:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":17993,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21296,"src":"7969:31:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":17994,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17935,"src":"8003:4:85","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$17917_memory_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars memory"}},"id":17995,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextStableRate","nodeType":"MemberAccess","referencedDeclaration":17912,"src":"8003:19:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"8003:29:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":17997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8003:31:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"7969:65:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":17999,"nodeType":"ExpressionStatement","src":"7969:65:85"},{"expression":{"id":18007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18000,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17921,"src":"8040:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18002,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21294,"src":"8040:33:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":18003,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17935,"src":"8076:4:85","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$17917_memory_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars memory"}},"id":18004,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableRate","nodeType":"MemberAccess","referencedDeclaration":17914,"src":"8076:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"8076:31:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":18006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8076:33:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"8040:69:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":18008,"nodeType":"ExpressionStatement","src":"8040:69:85"},{"eventCall":{"arguments":[{"id":18010,"name":"reserveAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17926,"src":"8147:14:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18011,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17935,"src":"8169:4:85","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$17917_memory_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars memory"}},"id":18012,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":17910,"src":"8169:22:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18013,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17935,"src":"8199:4:85","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$17917_memory_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars memory"}},"id":18014,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextStableRate","nodeType":"MemberAccess","referencedDeclaration":17912,"src":"8199:19:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18015,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17935,"src":"8226:4:85","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateInterestRatesLocalVars_$17917_memory_ptr","typeString":"struct ReserveLogic.UpdateInterestRatesLocalVars memory"}},"id":18016,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableRate","nodeType":"MemberAccess","referencedDeclaration":17914,"src":"8226:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18017,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17924,"src":"8255:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18018,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21355,"src":"8255:31:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18019,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17924,"src":"8294:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18020,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":21359,"src":"8294:36:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18009,"name":"ReserveDataUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17679,"src":"8121:18:85","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256,uint256,uint256,uint256)"}},"id":18021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8121:215:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18022,"nodeType":"EmitStatement","src":"8116:220:85"}]},"documentation":{"id":17918,"nodeType":"StructuredDocumentation","src":"6295:529:85","text":" @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\n @param reserve The reserve reserve to be updated\n @param reserveCache The caching layer for the reserve data\n @param reserveAddress The address of the reserve to be updated\n @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\n @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)"},"id":18024,"implemented":true,"kind":"function","modifiers":[],"name":"updateInterestRates","nameLocation":"6836:19:85","nodeType":"FunctionDefinition","parameters":{"id":17931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17921,"mutability":"mutable","name":"reserve","nameLocation":"6891:7:85","nodeType":"VariableDeclaration","scope":18024,"src":"6861:37:85","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":17920,"nodeType":"UserDefinedTypeName","pathNode":{"id":17919,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"6861:21:85"},"referencedDeclaration":21315,"src":"6861:21:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":17924,"mutability":"mutable","name":"reserveCache","nameLocation":"6934:12:85","nodeType":"VariableDeclaration","scope":18024,"src":"6904:42:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":17923,"nodeType":"UserDefinedTypeName","pathNode":{"id":17922,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"6904:22:85"},"referencedDeclaration":21379,"src":"6904:22:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"},{"constant":false,"id":17926,"mutability":"mutable","name":"reserveAddress","nameLocation":"6960:14:85","nodeType":"VariableDeclaration","scope":18024,"src":"6952:22:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17925,"name":"address","nodeType":"ElementaryTypeName","src":"6952:7:85","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17928,"mutability":"mutable","name":"liquidityAdded","nameLocation":"6988:14:85","nodeType":"VariableDeclaration","scope":18024,"src":"6980:22:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17927,"name":"uint256","nodeType":"ElementaryTypeName","src":"6980:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17930,"mutability":"mutable","name":"liquidityTaken","nameLocation":"7016:14:85","nodeType":"VariableDeclaration","scope":18024,"src":"7008:22:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17929,"name":"uint256","nodeType":"ElementaryTypeName","src":"7008:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6855:179:85"},"returnParameters":{"id":17932,"nodeType":"ParameterList","parameters":[],"src":"7044:0:85"},"scope":18377,"src":"6827:1514:85","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"canonicalName":"ReserveLogic.AccrueToTreasuryLocalVars","id":18037,"members":[{"constant":false,"id":18026,"mutability":"mutable","name":"prevTotalStableDebt","nameLocation":"8392:19:85","nodeType":"VariableDeclaration","scope":18037,"src":"8384:27:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18025,"name":"uint256","nodeType":"ElementaryTypeName","src":"8384:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18028,"mutability":"mutable","name":"prevTotalVariableDebt","nameLocation":"8425:21:85","nodeType":"VariableDeclaration","scope":18037,"src":"8417:29:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18027,"name":"uint256","nodeType":"ElementaryTypeName","src":"8417:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18030,"mutability":"mutable","name":"currTotalVariableDebt","nameLocation":"8460:21:85","nodeType":"VariableDeclaration","scope":18037,"src":"8452:29:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18029,"name":"uint256","nodeType":"ElementaryTypeName","src":"8452:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18032,"mutability":"mutable","name":"cumulatedStableInterest","nameLocation":"8495:23:85","nodeType":"VariableDeclaration","scope":18037,"src":"8487:31:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18031,"name":"uint256","nodeType":"ElementaryTypeName","src":"8487:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18034,"mutability":"mutable","name":"totalDebtAccrued","nameLocation":"8532:16:85","nodeType":"VariableDeclaration","scope":18037,"src":"8524:24:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18033,"name":"uint256","nodeType":"ElementaryTypeName","src":"8524:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18036,"mutability":"mutable","name":"amountToMint","nameLocation":"8562:12:85","nodeType":"VariableDeclaration","scope":18037,"src":"8554:20:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18035,"name":"uint256","nodeType":"ElementaryTypeName","src":"8554:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"AccrueToTreasuryLocalVars","nameLocation":"8352:25:85","nodeType":"StructDefinition","scope":18377,"src":"8345:234:85","visibility":"public"},{"body":{"id":18151,"nodeType":"Block","src":"8972:1467:85","statements":[{"assignments":[18049],"declarations":[{"constant":false,"id":18049,"mutability":"mutable","name":"vars","nameLocation":"9011:4:85","nodeType":"VariableDeclaration","scope":18151,"src":"8978:37:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$18037_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars"},"typeName":{"id":18048,"nodeType":"UserDefinedTypeName","pathNode":{"id":18047,"name":"AccrueToTreasuryLocalVars","nodeType":"IdentifierPath","referencedDeclaration":18037,"src":"8978:25:85"},"referencedDeclaration":18037,"src":"8978:25:85","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$18037_storage_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars"}},"visibility":"internal"}],"id":18050,"nodeType":"VariableDeclarationStatement","src":"8978:37:85"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18051,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18044,"src":"9026:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18052,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveFactor","nodeType":"MemberAccess","referencedDeclaration":21365,"src":"9026:26:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":18053,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9056:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9026:31:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18057,"nodeType":"IfStatement","src":"9022:58:85","trueBody":{"id":18056,"nodeType":"Block","src":"9059:21:85","statements":[{"functionReturnParameters":18046,"id":18055,"nodeType":"Return","src":"9067:7:85"}]}},{"expression":{"id":18067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18058,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18049,"src":"9160:4:85","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$18037_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":18060,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"prevTotalVariableDebt","nodeType":"MemberAccess","referencedDeclaration":18028,"src":"9160:26:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":18064,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18044,"src":"9239:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18065,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":21357,"src":"9239:36:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":18061,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18044,"src":"9189:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18062,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":21339,"src":"9189:35:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"9189:42:85","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":18066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9189:92:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9160:121:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18068,"nodeType":"ExpressionStatement","src":"9160:121:85"},{"expression":{"id":18078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18069,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18049,"src":"9380:4:85","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$18037_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":18071,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currTotalVariableDebt","nodeType":"MemberAccess","referencedDeclaration":18030,"src":"9380:26:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":18075,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18044,"src":"9459:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18076,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":21359,"src":"9459:36:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":18072,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18044,"src":"9409:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18073,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":21339,"src":"9409:35:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"9409:42:85","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":18077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9409:92:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9380:121:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18079,"nodeType":"ExpressionStatement","src":"9380:121:85"},{"expression":{"id":18092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18080,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18049,"src":"9572:4:85","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$18037_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":18082,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"cumulatedStableInterest","nodeType":"MemberAccess","referencedDeclaration":18032,"src":"9572:28:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":18085,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18044,"src":"9648:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18086,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currAvgStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21345,"src":"9648:36:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18087,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18044,"src":"9692:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18088,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtLastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":21378,"src":"9692:42:85","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},{"expression":{"id":18089,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18044,"src":"9742:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18090,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveLastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":21376,"src":"9742:39:85","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint40","typeString":"uint40"},{"typeIdentifier":"t_uint40","typeString":"uint40"}],"expression":{"id":18083,"name":"MathUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21098,"src":"9603:9:85","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MathUtils_$21098_$","typeString":"type(library MathUtils)"}},"id":18084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateCompoundedInterest","nodeType":"MemberAccess","referencedDeclaration":21079,"src":"9603:37:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint40_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint40,uint256) pure returns (uint256)"}},"id":18091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9603:184:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9572:215:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18093,"nodeType":"ExpressionStatement","src":"9572:215:85"},{"expression":{"id":18103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18094,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18049,"src":"9794:4:85","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$18037_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":18096,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"prevTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":18026,"src":"9794:24:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":18100,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18049,"src":"9872:4:85","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$18037_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":18101,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cumulatedStableInterest","nodeType":"MemberAccess","referencedDeclaration":18032,"src":"9872:28:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":18097,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18044,"src":"9821:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18098,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currPrincipalStableDebt","nodeType":"MemberAccess","referencedDeclaration":21343,"src":"9821:36:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"9821:43:85","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":18102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9821:85:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9794:112:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18104,"nodeType":"ExpressionStatement","src":"9794:112:85"},{"expression":{"id":18119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18105,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18049,"src":"10008:4:85","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$18037_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":18107,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalDebtAccrued","nodeType":"MemberAccess","referencedDeclaration":18034,"src":"10008:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18108,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18049,"src":"10038:4:85","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$18037_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":18109,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currTotalVariableDebt","nodeType":"MemberAccess","referencedDeclaration":18030,"src":"10038:26:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":18110,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18044,"src":"10073:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18111,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":21347,"src":"10073:32:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10038:67:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":18113,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18049,"src":"10114:4:85","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$18037_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":18114,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"prevTotalVariableDebt","nodeType":"MemberAccess","referencedDeclaration":18028,"src":"10114:26:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10038:102:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":18116,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18049,"src":"10149:4:85","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$18037_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":18117,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"prevTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":18026,"src":"10149:24:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10038:135:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10008:165:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18120,"nodeType":"ExpressionStatement","src":"10008:165:85"},{"expression":{"id":18130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18121,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18049,"src":"10180:4:85","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$18037_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":18123,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"amountToMint","nodeType":"MemberAccess","referencedDeclaration":18036,"src":"10180:17:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":18127,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18044,"src":"10233:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18128,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveFactor","nodeType":"MemberAccess","referencedDeclaration":21365,"src":"10233:26:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":18124,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18049,"src":"10200:4:85","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$18037_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":18125,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalDebtAccrued","nodeType":"MemberAccess","referencedDeclaration":18034,"src":"10200:21:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":21119,"src":"10200:32:85","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":18129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10200:60:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10180:80:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18131,"nodeType":"ExpressionStatement","src":"10180:80:85"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18132,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18049,"src":"10271:4:85","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$18037_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":18133,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amountToMint","nodeType":"MemberAccess","referencedDeclaration":18036,"src":"10271:17:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":18134,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10292:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10271:22:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18150,"nodeType":"IfStatement","src":"10267:168:85","trueBody":{"id":18149,"nodeType":"Block","src":"10295:140:85","statements":[{"expression":{"id":18147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18136,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18041,"src":"10303:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18138,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"accruedToTreasury","nodeType":"MemberAccess","referencedDeclaration":21310,"src":"10303:25:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":18142,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18044,"src":"10375:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18143,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21355,"src":"10375:31:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":18139,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18049,"src":"10332:4:85","typeDescriptions":{"typeIdentifier":"t_struct$_AccrueToTreasuryLocalVars_$18037_memory_ptr","typeString":"struct ReserveLogic.AccrueToTreasuryLocalVars memory"}},"id":18140,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amountToMint","nodeType":"MemberAccess","referencedDeclaration":18036,"src":"10332:26:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":21198,"src":"10332:42:85","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":18144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10332:75:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"10332:94:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":18146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10332:96:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"10303:125:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":18148,"nodeType":"ExpressionStatement","src":"10303:125:85"}]}}]},"documentation":{"id":18038,"nodeType":"StructuredDocumentation","src":"8583:255:85","text":" @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\n specific asset.\n @param reserve The reserve to be updated\n @param reserveCache The caching layer for the reserve data"},"id":18152,"implemented":true,"kind":"function","modifiers":[],"name":"_accrueToTreasury","nameLocation":"8850:17:85","nodeType":"FunctionDefinition","parameters":{"id":18045,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18041,"mutability":"mutable","name":"reserve","nameLocation":"8903:7:85","nodeType":"VariableDeclaration","scope":18152,"src":"8873:37:85","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":18040,"nodeType":"UserDefinedTypeName","pathNode":{"id":18039,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"8873:21:85"},"referencedDeclaration":21315,"src":"8873:21:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":18044,"mutability":"mutable","name":"reserveCache","nameLocation":"8946:12:85","nodeType":"VariableDeclaration","scope":18152,"src":"8916:42:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":18043,"nodeType":"UserDefinedTypeName","pathNode":{"id":18042,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"8916:22:85"},"referencedDeclaration":21379,"src":"8916:22:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"src":"8867:95:85"},"returnParameters":{"id":18046,"nodeType":"ParameterList","parameters":[],"src":"8972:0:85"},"scope":18377,"src":"8841:1598:85","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":18232,"nodeType":"Block","src":"10785:1414:85","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18162,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18159,"src":"11008:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18163,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":21361,"src":"11008:30:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":18164,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11042:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11008:35:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18196,"nodeType":"IfStatement","src":"11004:423:85","trueBody":{"id":18195,"nodeType":"Block","src":"11045:382:85","statements":[{"assignments":[18167],"declarations":[{"constant":false,"id":18167,"mutability":"mutable","name":"cumulatedLiquidityInterest","nameLocation":"11061:26:85","nodeType":"VariableDeclaration","scope":18195,"src":"11053:34:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18166,"name":"uint256","nodeType":"ElementaryTypeName","src":"11053:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18175,"initialValue":{"arguments":[{"expression":{"id":18170,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18159,"src":"11133:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18171,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":21361,"src":"11133:30:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18172,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18159,"src":"11173:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18173,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveLastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":21376,"src":"11173:39:85","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint40","typeString":"uint40"}],"expression":{"id":18168,"name":"MathUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21098,"src":"11090:9:85","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MathUtils_$21098_$","typeString":"type(library MathUtils)"}},"id":18169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateLinearInterest","nodeType":"MemberAccess","referencedDeclaration":20956,"src":"11090:33:85","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint40_$returns$_t_uint256_$","typeString":"function (uint256,uint40) view returns (uint256)"}},"id":18174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11090:130:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11053:167:85"},{"expression":{"id":18184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18176,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18159,"src":"11228:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18178,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21355,"src":"11228:31:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":18181,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18159,"src":"11305:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18182,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21353,"src":"11305:31:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18179,"name":"cumulatedLiquidityInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18167,"src":"11262:26:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"11262:33:85","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":18183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11262:82:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11228:116:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18185,"nodeType":"ExpressionStatement","src":"11228:116:85"},{"expression":{"id":18193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18186,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18156,"src":"11352:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18188,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"liquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21288,"src":"11352:22:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":18189,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18159,"src":"11377:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18190,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21355,"src":"11377:31:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"11377:41:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":18192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11377:43:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"11352:68:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":18194,"nodeType":"ExpressionStatement","src":"11352:68:85"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18197,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18159,"src":"11732:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18198,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":21339,"src":"11732:35:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":18199,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11771:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11732:40:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18231,"nodeType":"IfStatement","src":"11728:467:85","trueBody":{"id":18230,"nodeType":"Block","src":"11774:421:85","statements":[{"assignments":[18202],"declarations":[{"constant":false,"id":18202,"mutability":"mutable","name":"cumulatedVariableBorrowInterest","nameLocation":"11790:31:85","nodeType":"VariableDeclaration","scope":18230,"src":"11782:39:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18201,"name":"uint256","nodeType":"ElementaryTypeName","src":"11782:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18210,"initialValue":{"arguments":[{"expression":{"id":18205,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18159,"src":"11871:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18206,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21363,"src":"11871:35:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18207,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18159,"src":"11916:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18208,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveLastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":21376,"src":"11916:39:85","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint40","typeString":"uint40"}],"expression":{"id":18203,"name":"MathUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21098,"src":"11824:9:85","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MathUtils_$21098_$","typeString":"type(library MathUtils)"}},"id":18204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateCompoundedInterest","nodeType":"MemberAccess","referencedDeclaration":21097,"src":"11824:37:85","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint40_$returns$_t_uint256_$","typeString":"function (uint256,uint40) view returns (uint256)"}},"id":18209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11824:139:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11782:181:85"},{"expression":{"id":18219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18211,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18159,"src":"11971:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18213,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":21359,"src":"11971:36:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":18216,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18159,"src":"12058:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18217,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":21357,"src":"12058:36:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18214,"name":"cumulatedVariableBorrowInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18202,"src":"12010:31:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"12010:38:85","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":18218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12010:92:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11971:131:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18220,"nodeType":"ExpressionStatement","src":"11971:131:85"},{"expression":{"id":18228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18221,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18156,"src":"12110:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18223,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"variableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":21292,"src":"12110:27:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":18224,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18159,"src":"12140:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18225,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":21359,"src":"12140:36:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"12140:46:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":18227,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12140:48:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"12110:78:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":18229,"nodeType":"ExpressionStatement","src":"12110:78:85"}]}}]},"documentation":{"id":18153,"nodeType":"StructuredDocumentation","src":"10443:211:85","text":" @notice Updates the reserve indexes and the timestamp of the update.\n @param reserve The reserve reserve to be updated\n @param reserveCache The cache layer holding the cached protocol data"},"id":18233,"implemented":true,"kind":"function","modifiers":[],"name":"_updateIndexes","nameLocation":"10666:14:85","nodeType":"FunctionDefinition","parameters":{"id":18160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18156,"mutability":"mutable","name":"reserve","nameLocation":"10716:7:85","nodeType":"VariableDeclaration","scope":18233,"src":"10686:37:85","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":18155,"nodeType":"UserDefinedTypeName","pathNode":{"id":18154,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"10686:21:85"},"referencedDeclaration":21315,"src":"10686:21:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":18159,"mutability":"mutable","name":"reserveCache","nameLocation":"10759:12:85","nodeType":"VariableDeclaration","scope":18233,"src":"10729:42:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":18158,"nodeType":"UserDefinedTypeName","pathNode":{"id":18157,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"10729:22:85"},"referencedDeclaration":21379,"src":"10729:22:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"src":"10680:95:85"},"returnParameters":{"id":18161,"nodeType":"ParameterList","parameters":[],"src":"10785:0:85"},"scope":18377,"src":"10657:1542:85","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":18375,"nodeType":"Block","src":"12576:1623:85","statements":[{"assignments":[18247],"declarations":[{"constant":false,"id":18247,"mutability":"mutable","name":"reserveCache","nameLocation":"12612:12:85","nodeType":"VariableDeclaration","scope":18375,"src":"12582:42:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":18246,"nodeType":"UserDefinedTypeName","pathNode":{"id":18245,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"12582:22:85"},"referencedDeclaration":21379,"src":"12582:22:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"id":18248,"nodeType":"VariableDeclarationStatement","src":"12582:42:85"},{"expression":{"id":18254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18249,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"12631:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18251,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"12631:33:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":18252,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18237,"src":"12667:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18253,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":21286,"src":"12667:21:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"src":"12631:57:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":18255,"nodeType":"ExpressionStatement","src":"12631:57:85"},{"expression":{"id":18263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18256,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"12694:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18258,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"reserveFactor","nodeType":"MemberAccess","referencedDeclaration":21365,"src":"12694:26:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":18259,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"12723:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18260,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"12723:33:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":18261,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getReserveFactor","nodeType":"MemberAccess","referencedDeclaration":11335,"src":"12723:50:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":18262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12723:52:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12694:81:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18264,"nodeType":"ExpressionStatement","src":"12694:81:85"},{"expression":{"id":18273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18265,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"12781:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18267,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21353,"src":"12781:31:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18268,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"12815:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18269,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21355,"src":"12815:31:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":18270,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18237,"src":"12849:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18271,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21288,"src":"12849:22:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"12815:56:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12781:90:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18274,"nodeType":"ExpressionStatement","src":"12781:90:85"},{"expression":{"id":18283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18275,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"12877:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18277,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":21357,"src":"12877:36:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18278,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"12916:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18279,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":21359,"src":"12916:36:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":18280,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18237,"src":"12955:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18281,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":21292,"src":"12955:34:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"12916:73:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12877:112:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18284,"nodeType":"ExpressionStatement","src":"12877:112:85"},{"expression":{"id":18290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18285,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"12995:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18287,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":21361,"src":"12995:30:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":18288,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18237,"src":"13028:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18289,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":21290,"src":"13028:28:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"12995:61:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18291,"nodeType":"ExpressionStatement","src":"12995:61:85"},{"expression":{"id":18297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18292,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"13062:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18294,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21363,"src":"13062:35:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":18295,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18237,"src":"13100:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18296,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21294,"src":"13100:33:85","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"13062:71:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18298,"nodeType":"ExpressionStatement","src":"13062:71:85"},{"expression":{"id":18304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18299,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"13140:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18301,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"13140:26:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":18302,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18237,"src":"13169:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18303,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"13169:21:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13140:50:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18305,"nodeType":"ExpressionStatement","src":"13140:50:85"},{"expression":{"id":18311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18306,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"13196:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18308,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21372,"src":"13196:35:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":18309,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18237,"src":"13234:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18310,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"13234:30:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13196:68:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18312,"nodeType":"ExpressionStatement","src":"13196:68:85"},{"expression":{"id":18318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18313,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"13270:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18315,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21374,"src":"13270:37:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":18316,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18237,"src":"13310:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18317,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21306,"src":"13310:32:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13270:72:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18319,"nodeType":"ExpressionStatement","src":"13270:72:85"},{"expression":{"id":18325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18320,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"13349:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18322,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"reserveLastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":21376,"src":"13349:39:85","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":18323,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18237,"src":"13391:7:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18324,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"lastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":21298,"src":"13391:27:85","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"13349:69:85","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"id":18326,"nodeType":"ExpressionStatement","src":"13349:69:85"},{"expression":{"id":18339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18327,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"13425:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18329,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":21339,"src":"13425:35:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18330,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"13463:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18331,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":21341,"src":"13463:35:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":18333,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"13527:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18334,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21374,"src":"13527:37:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18332,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6155,"src":"13501:18:85","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVariableDebtToken_$6155_$","typeString":"type(contract IVariableDebtToken)"}},"id":18335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13501:69:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVariableDebtToken_$6155","typeString":"contract IVariableDebtToken"}},"id":18336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"scaledTotalSupply","nodeType":"MemberAccess","referencedDeclaration":5966,"src":"13501:87:85","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":18337,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13501:89:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13463:127:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13425:165:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18340,"nodeType":"ExpressionStatement","src":"13425:165:85"},{"expression":{"id":18357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":18341,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"13605:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18343,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currPrincipalStableDebt","nodeType":"MemberAccess","referencedDeclaration":21343,"src":"13605:36:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18344,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"13649:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18345,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":21347,"src":"13649:32:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18346,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"13689:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18347,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currAvgStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21345,"src":"13689:36:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18348,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"13733:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18349,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"stableDebtLastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":21378,"src":"13733:42:85","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"id":18350,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"13597:184:85","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint40_$","typeString":"tuple(uint256,uint256,uint256,uint40)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":18352,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"13801:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18353,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21372,"src":"13801:35:85","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18351,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6109,"src":"13784:16:85","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6109_$","typeString":"type(contract IStableDebtToken)"}},"id":18354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13784:53:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6109","typeString":"contract IStableDebtToken"}},"id":18355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getSupplyData","nodeType":"MemberAccess","referencedDeclaration":6080,"src":"13784:67:85","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint40_$","typeString":"function () view external returns (uint256,uint256,uint256,uint40)"}},"id":18356,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13784:69:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint40_$","typeString":"tuple(uint256,uint256,uint256,uint40)"}},"src":"13597:256:85","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18358,"nodeType":"ExpressionStatement","src":"13597:256:85"},{"expression":{"id":18364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18359,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"14020:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18361,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":21351,"src":"14020:32:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":18362,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"14055:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18363,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":21347,"src":"14055:32:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14020:67:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18365,"nodeType":"ExpressionStatement","src":"14020:67:85"},{"expression":{"id":18371,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18366,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"14093:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18368,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextAvgStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21349,"src":"14093:36:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":18369,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"14132:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18370,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currAvgStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21345,"src":"14132:36:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14093:75:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18372,"nodeType":"ExpressionStatement","src":"14093:75:85"},{"expression":{"id":18373,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18247,"src":"14182:12:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"functionReturnParameters":18242,"id":18374,"nodeType":"Return","src":"14175:19:85"}]},"documentation":{"id":18234,"nodeType":"StructuredDocumentation","src":"12203:254:85","text":" @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\n interest rates.\n @param reserve The reserve object for which the cache will be filled\n @return The cache object"},"id":18376,"implemented":true,"kind":"function","modifiers":[],"name":"cache","nameLocation":"12469:5:85","nodeType":"FunctionDefinition","parameters":{"id":18238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18237,"mutability":"mutable","name":"reserve","nameLocation":"12510:7:85","nodeType":"VariableDeclaration","scope":18376,"src":"12480:37:85","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":18236,"nodeType":"UserDefinedTypeName","pathNode":{"id":18235,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"12480:21:85"},"referencedDeclaration":21315,"src":"12480:21:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"src":"12474:47:85"},"returnParameters":{"id":18242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18241,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18376,"src":"12545:29:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":18240,"nodeType":"UserDefinedTypeName","pathNode":{"id":18239,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"12545:22:85"},"referencedDeclaration":21379,"src":"12545:22:85","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"src":"12544:31:85"},"scope":18377,"src":"12460:1739:85","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":18378,"src":"1020:13181:85","usedErrors":[]}],"src":"37:14165:85"},"id":85},"@aave/core-v3/contracts/protocol/libraries/logic/SupplyLogic.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/SupplyLogic.sol","exportedSymbols":{"DataTypes":[21633],"Errors":[12642],"GPv2SafeERC20":[118],"IAToken":[3861],"IERC20":[1442],"PercentageMath":[21132],"ReserveConfiguration":[11857],"ReserveLogic":[18377],"SupplyLogic":[19090],"UserConfiguration":[12368],"ValidationLogic":[20908],"WadRayMath":[21219]},"id":19091,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":18379,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:86"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../../dependencies/openzeppelin/contracts/IERC20.sol","id":18381,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19091,"sourceUnit":1443,"src":"63:79:86","symbolAliases":[{"foreign":{"id":18380,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:6:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":18383,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19091,"sourceUnit":119,"src":"143:87:86","symbolAliases":[{"foreign":{"id":18382,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"151:13:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IAToken.sol","file":"../../../interfaces/IAToken.sol","id":18385,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19091,"sourceUnit":3862,"src":"231:56:86","symbolAliases":[{"foreign":{"id":18384,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"239:7:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol","file":"../helpers/Errors.sol","id":18387,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19091,"sourceUnit":12643,"src":"288:45:86","symbolAliases":[{"foreign":{"id":18386,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"296:6:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"../configuration/UserConfiguration.sol","id":18389,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19091,"sourceUnit":12369,"src":"334:73:86","symbolAliases":[{"foreign":{"id":18388,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"342:17:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":18391,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19091,"sourceUnit":21634,"src":"408:49:86","symbolAliases":[{"foreign":{"id":18390,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"416:9:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol","file":"../math/WadRayMath.sol","id":18393,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19091,"sourceUnit":21220,"src":"458:50:86","symbolAliases":[{"foreign":{"id":18392,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"466:10:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol","file":"../math/PercentageMath.sol","id":18395,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19091,"sourceUnit":21133,"src":"509:58:86","symbolAliases":[{"foreign":{"id":18394,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"517:14:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol","file":"./ValidationLogic.sol","id":18397,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19091,"sourceUnit":20909,"src":"568:54:86","symbolAliases":[{"foreign":{"id":18396,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"576:15:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol","file":"./ReserveLogic.sol","id":18399,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19091,"sourceUnit":18378,"src":"623:48:86","symbolAliases":[{"foreign":{"id":18398,"name":"ReserveLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"631:12:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../configuration/ReserveConfiguration.sol","id":18401,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19091,"sourceUnit":11858,"src":"672:79:86","symbolAliases":[{"foreign":{"id":18400,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"680:20:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"SupplyLogic","contractDependencies":[],"contractKind":"library","documentation":{"id":18402,"nodeType":"StructuredDocumentation","src":"753:110:86","text":" @title SupplyLogic library\n @author Aave\n @notice Implements the base logic for supply/withdraw"},"fullyImplemented":true,"id":19090,"linearizedBaseContracts":[19090],"name":"SupplyLogic","nameLocation":"872:11:86","nodeType":"ContractDefinition","nodes":[{"id":18406,"libraryName":{"id":18403,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":18377,"src":"894:12:86"},"nodeType":"UsingForDirective","src":"888:46:86","typeName":{"id":18405,"nodeType":"UserDefinedTypeName","pathNode":{"id":18404,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"911:22:86"},"referencedDeclaration":21379,"src":"911:22:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}}},{"id":18410,"libraryName":{"id":18407,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":18377,"src":"943:12:86"},"nodeType":"UsingForDirective","src":"937:45:86","typeName":{"id":18409,"nodeType":"UserDefinedTypeName","pathNode":{"id":18408,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"960:21:86"},"referencedDeclaration":21315,"src":"960:21:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},{"id":18414,"libraryName":{"id":18411,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"991:13:86"},"nodeType":"UsingForDirective","src":"985:31:86","typeName":{"id":18413,"nodeType":"UserDefinedTypeName","pathNode":{"id":18412,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1009:6:86"},"referencedDeclaration":1442,"src":"1009:6:86","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"id":18418,"libraryName":{"id":18415,"name":"UserConfiguration","nodeType":"IdentifierPath","referencedDeclaration":12368,"src":"1025:17:86"},"nodeType":"UsingForDirective","src":"1019:59:86","typeName":{"id":18417,"nodeType":"UserDefinedTypeName","pathNode":{"id":18416,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"1047:30:86"},"referencedDeclaration":21322,"src":"1047:30:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},{"id":18422,"libraryName":{"id":18419,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":11857,"src":"1087:20:86"},"nodeType":"UsingForDirective","src":"1081:65:86","typeName":{"id":18421,"nodeType":"UserDefinedTypeName","pathNode":{"id":18420,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"1112:33:86"},"referencedDeclaration":21318,"src":"1112:33:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"id":18425,"libraryName":{"id":18423,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":21219,"src":"1155:10:86"},"nodeType":"UsingForDirective","src":"1149:29:86","typeName":{"id":18424,"name":"uint256","nodeType":"ElementaryTypeName","src":"1170:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":18428,"libraryName":{"id":18426,"name":"PercentageMath","nodeType":"IdentifierPath","referencedDeclaration":21132,"src":"1187:14:86"},"nodeType":"UsingForDirective","src":"1181:33:86","typeName":{"id":18427,"name":"uint256","nodeType":"ElementaryTypeName","src":"1206:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"anonymous":false,"id":18434,"name":"ReserveUsedAsCollateralEnabled","nameLocation":"1258:30:86","nodeType":"EventDefinition","parameters":{"id":18433,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18430,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1305:7:86","nodeType":"VariableDeclaration","scope":18434,"src":"1289:23:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18429,"name":"address","nodeType":"ElementaryTypeName","src":"1289:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18432,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1330:4:86","nodeType":"VariableDeclaration","scope":18434,"src":"1314:20:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18431,"name":"address","nodeType":"ElementaryTypeName","src":"1314:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1288:47:86"},"src":"1252:84:86"},{"anonymous":false,"id":18440,"name":"ReserveUsedAsCollateralDisabled","nameLocation":"1345:31:86","nodeType":"EventDefinition","parameters":{"id":18439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18436,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1393:7:86","nodeType":"VariableDeclaration","scope":18440,"src":"1377:23:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18435,"name":"address","nodeType":"ElementaryTypeName","src":"1377:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18438,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1418:4:86","nodeType":"VariableDeclaration","scope":18440,"src":"1402:20:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18437,"name":"address","nodeType":"ElementaryTypeName","src":"1402:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1376:47:86"},"src":"1339:85:86"},{"anonymous":false,"id":18450,"name":"Withdraw","nameLocation":"1433:8:86","nodeType":"EventDefinition","parameters":{"id":18449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18442,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1458:7:86","nodeType":"VariableDeclaration","scope":18450,"src":"1442:23:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18441,"name":"address","nodeType":"ElementaryTypeName","src":"1442:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18444,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1483:4:86","nodeType":"VariableDeclaration","scope":18450,"src":"1467:20:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18443,"name":"address","nodeType":"ElementaryTypeName","src":"1467:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18446,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"1505:2:86","nodeType":"VariableDeclaration","scope":18450,"src":"1489:18:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18445,"name":"address","nodeType":"ElementaryTypeName","src":"1489:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18448,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1517:6:86","nodeType":"VariableDeclaration","scope":18450,"src":"1509:14:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18447,"name":"uint256","nodeType":"ElementaryTypeName","src":"1509:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1441:83:86"},"src":"1427:98:86"},{"anonymous":false,"id":18462,"name":"Supply","nameLocation":"1534:6:86","nodeType":"EventDefinition","parameters":{"id":18461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18452,"indexed":true,"mutability":"mutable","name":"reserve","nameLocation":"1562:7:86","nodeType":"VariableDeclaration","scope":18462,"src":"1546:23:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18451,"name":"address","nodeType":"ElementaryTypeName","src":"1546:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18454,"indexed":false,"mutability":"mutable","name":"user","nameLocation":"1583:4:86","nodeType":"VariableDeclaration","scope":18462,"src":"1575:12:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18453,"name":"address","nodeType":"ElementaryTypeName","src":"1575:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18456,"indexed":true,"mutability":"mutable","name":"onBehalfOf","nameLocation":"1609:10:86","nodeType":"VariableDeclaration","scope":18462,"src":"1593:26:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18455,"name":"address","nodeType":"ElementaryTypeName","src":"1593:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18458,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1633:6:86","nodeType":"VariableDeclaration","scope":18462,"src":"1625:14:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18457,"name":"uint256","nodeType":"ElementaryTypeName","src":"1625:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18460,"indexed":true,"mutability":"mutable","name":"referralCode","nameLocation":"1660:12:86","nodeType":"VariableDeclaration","scope":18462,"src":"1645:27:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":18459,"name":"uint16","nodeType":"ElementaryTypeName","src":"1645:6:86","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"1540:136:86"},"src":"1528:149:86"},{"body":{"id":18599,"nodeType":"Block","src":"2531:1131:86","statements":[{"assignments":[18485],"declarations":[{"constant":false,"id":18485,"mutability":"mutable","name":"reserve","nameLocation":"2567:7:86","nodeType":"VariableDeclaration","scope":18599,"src":"2537:37:86","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":18484,"nodeType":"UserDefinedTypeName","pathNode":{"id":18483,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"2537:21:86"},"referencedDeclaration":21315,"src":"2537:21:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":18490,"initialValue":{"baseExpression":{"id":18486,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18468,"src":"2577:12:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":18489,"indexExpression":{"expression":{"id":18487,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18478,"src":"2590:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$21407_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":18488,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21400,"src":"2590:12:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2577:26:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2537:66:86"},{"assignments":[18495],"declarations":[{"constant":false,"id":18495,"mutability":"mutable","name":"reserveCache","nameLocation":"2639:12:86","nodeType":"VariableDeclaration","scope":18599,"src":"2609:42:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":18494,"nodeType":"UserDefinedTypeName","pathNode":{"id":18493,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"2609:22:86"},"referencedDeclaration":21379,"src":"2609:22:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"id":18499,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18496,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18485,"src":"2654:7:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18497,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cache","nodeType":"MemberAccess","referencedDeclaration":18376,"src":"2654:13:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$21315_storage_ptr_$returns$_t_struct$_ReserveCache_$21379_memory_ptr_$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (struct DataTypes.ReserveCache memory)"}},"id":18498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2654:15:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"nodeType":"VariableDeclarationStatement","src":"2609:60:86"},{"expression":{"arguments":[{"id":18503,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18495,"src":"2696:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":18500,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18485,"src":"2676:7:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18502,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":17793,"src":"2676:19:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$returns$__$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":18504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2676:33:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18505,"nodeType":"ExpressionStatement","src":"2676:33:86"},{"expression":{"arguments":[{"id":18509,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18495,"src":"2747:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":18510,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18485,"src":"2761:7:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},{"expression":{"id":18511,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18478,"src":"2770:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$21407_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":18512,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21402,"src":"2770:13:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18506,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20908,"src":"2716:15:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$20908_$","typeString":"type(library ValidationLogic)"}},"id":18508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateSupply","nodeType":"MemberAccess","referencedDeclaration":19277,"src":"2716:30:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveCache_$21379_memory_ptr_$_t_struct$_ReserveData_$21315_storage_ptr_$_t_uint256_$returns$__$","typeString":"function (struct DataTypes.ReserveCache memory,struct DataTypes.ReserveData storage pointer,uint256) view"}},"id":18513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2716:68:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18514,"nodeType":"ExpressionStatement","src":"2716:68:86"},{"expression":{"arguments":[{"id":18518,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18495,"src":"2819:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"expression":{"id":18519,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18478,"src":"2833:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$21407_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":18520,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21400,"src":"2833:12:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18521,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18478,"src":"2847:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$21407_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":18522,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21402,"src":"2847:13:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":18523,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2862:1:86","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":18515,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18485,"src":"2791:7:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18517,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateInterestRates","nodeType":"MemberAccess","referencedDeclaration":18024,"src":"2791:27:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,uint256,uint256)"}},"id":18524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2791:73:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18525,"nodeType":"ExpressionStatement","src":"2791:73:86"},{"expression":{"arguments":[{"expression":{"id":18531,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2909:3:86","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2909:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18533,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18495,"src":"2921:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18534,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"2921:26:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18535,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18478,"src":"2949:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$21407_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":18536,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21402,"src":"2949:13:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":18527,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18478,"src":"2878:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$21407_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":18528,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21400,"src":"2878:12:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18526,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"2871:6:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":18529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2871:20:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":18530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":106,"src":"2871:37:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":18537,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2871:92:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18538,"nodeType":"ExpressionStatement","src":"2871:92:86"},{"assignments":[18540],"declarations":[{"constant":false,"id":18540,"mutability":"mutable","name":"isFirstSupply","nameLocation":"2975:13:86","nodeType":"VariableDeclaration","scope":18599,"src":"2970:18:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18539,"name":"bool","nodeType":"ElementaryTypeName","src":"2970:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":18555,"initialValue":{"arguments":[{"expression":{"id":18546,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3039:3:86","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3039:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18548,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18478,"src":"3057:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$21407_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":18549,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":21404,"src":"3057:17:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18550,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18478,"src":"3082:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$21407_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":18551,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21402,"src":"3082:13:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18552,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18495,"src":"3103:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18553,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21355,"src":"3103:31:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":18542,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18495,"src":"2999:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18543,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"2999:26:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18541,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3861,"src":"2991:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3861_$","typeString":"type(contract IAToken)"}},"id":18544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2991:35:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":18545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":3758,"src":"2991:40:86","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256,uint256) external returns (bool)"}},"id":18554,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2991:149:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"2970:170:86"},{"condition":{"id":18556,"name":"isFirstSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18540,"src":"3151:13:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18585,"nodeType":"IfStatement","src":"3147:412:86","trueBody":{"id":18584,"nodeType":"Block","src":"3166:393:86","statements":[{"condition":{"arguments":[{"id":18559,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18468,"src":"3247:12:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":18560,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18472,"src":"3271:12:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":18561,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18475,"src":"3295:10:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"expression":{"id":18562,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18495,"src":"3317:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18563,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"3317:33:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},{"expression":{"id":18564,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18495,"src":"3362:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18565,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"3362:26:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":18557,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20908,"src":"3187:15:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$20908_$","typeString":"type(library ValidationLogic)"}},"id":18558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateAutomaticUseAsCollateral","nodeType":"MemberAccess","referencedDeclaration":20907,"src":"3187:48:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_address_$returns$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveConfigurationMap memory,address) view returns (bool)"}},"id":18566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3187:211:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18583,"nodeType":"IfStatement","src":"3174:379:86","trueBody":{"id":18582,"nodeType":"Block","src":"3407:146:86","statements":[{"expression":{"arguments":[{"expression":{"id":18570,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18485,"src":"3449:7:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18571,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"3449:10:86","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"hexValue":"74727565","id":18572,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3461:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":18567,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18475,"src":"3417:10:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":18569,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":11975,"src":"3417:31:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_uint256_$_t_bool_$returns$__$bound_to$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)"}},"id":18573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3417:49:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18574,"nodeType":"ExpressionStatement","src":"3417:49:86"},{"eventCall":{"arguments":[{"expression":{"id":18576,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18478,"src":"3512:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$21407_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":18577,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21400,"src":"3512:12:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18578,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18478,"src":"3526:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$21407_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":18579,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":21404,"src":"3526:17:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18575,"name":"ReserveUsedAsCollateralEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18434,"src":"3481:30:86","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":18580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3481:63:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18581,"nodeType":"EmitStatement","src":"3476:68:86"}]}}]}},{"eventCall":{"arguments":[{"expression":{"id":18587,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18478,"src":"3577:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$21407_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":18588,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21400,"src":"3577:12:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18589,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3591:3:86","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3591:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18591,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18478,"src":"3603:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$21407_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":18592,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"onBehalfOf","nodeType":"MemberAccess","referencedDeclaration":21404,"src":"3603:17:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18593,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18478,"src":"3622:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$21407_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":18594,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21402,"src":"3622:13:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18595,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18478,"src":"3637:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$21407_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}},"id":18596,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"referralCode","nodeType":"MemberAccess","referencedDeclaration":21406,"src":"3637:19:86","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"id":18586,"name":"Supply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18462,"src":"3570:6:86","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint16_$returns$__$","typeString":"function (address,address,address,uint256,uint16)"}},"id":18597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3570:87:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18598,"nodeType":"EmitStatement","src":"3565:92:86"}]},"documentation":{"id":18463,"nodeType":"StructuredDocumentation","src":"1681:585:86","text":" @notice Implements the supply feature. Through `supply()`, users supply assets to the Aave protocol.\n @dev Emits the `Supply()` event.\n @dev In the first supply action, `ReserveUsedAsCollateralEnabled()` is emitted, if the asset can be enabled as\n collateral.\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n @param params The additional parameters needed to execute the supply function"},"functionSelector":"1913f161","id":18600,"implemented":true,"kind":"function","modifiers":[],"name":"executeSupply","nameLocation":"2278:13:86","nodeType":"FunctionDefinition","parameters":{"id":18479,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18468,"mutability":"mutable","name":"reservesData","nameLocation":"2347:12:86","nodeType":"VariableDeclaration","scope":18600,"src":"2297:62:86","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":18467,"keyType":{"id":18464,"name":"address","nodeType":"ElementaryTypeName","src":"2305:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2297:41:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":18466,"nodeType":"UserDefinedTypeName","pathNode":{"id":18465,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"2316:21:86"},"referencedDeclaration":21315,"src":"2316:21:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":18472,"mutability":"mutable","name":"reservesList","nameLocation":"2401:12:86","nodeType":"VariableDeclaration","scope":18600,"src":"2365:48:86","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":18471,"keyType":{"id":18469,"name":"uint256","nodeType":"ElementaryTypeName","src":"2373:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"2365:27:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":18470,"name":"address","nodeType":"ElementaryTypeName","src":"2384:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":18475,"mutability":"mutable","name":"userConfig","nameLocation":"2458:10:86","nodeType":"VariableDeclaration","scope":18600,"src":"2419:49:86","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":18474,"nodeType":"UserDefinedTypeName","pathNode":{"id":18473,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"2419:30:86"},"referencedDeclaration":21322,"src":"2419:30:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":18478,"mutability":"mutable","name":"params","nameLocation":"2511:6:86","nodeType":"VariableDeclaration","scope":18600,"src":"2474:43:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$21407_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams"},"typeName":{"id":18477,"nodeType":"UserDefinedTypeName","pathNode":{"id":18476,"name":"DataTypes.ExecuteSupplyParams","nodeType":"IdentifierPath","referencedDeclaration":21407,"src":"2474:29:86"},"referencedDeclaration":21407,"src":"2474:29:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$21407_storage_ptr","typeString":"struct DataTypes.ExecuteSupplyParams"}},"visibility":"internal"}],"src":"2291:230:86"},"returnParameters":{"id":18480,"nodeType":"ParameterList","parameters":[],"src":"2531:0:86"},"scope":19090,"src":"2269:1393:86","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18785,"nodeType":"Block","src":"4758:1479:86","statements":[{"assignments":[18630],"declarations":[{"constant":false,"id":18630,"mutability":"mutable","name":"reserve","nameLocation":"4794:7:86","nodeType":"VariableDeclaration","scope":18785,"src":"4764:37:86","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":18629,"nodeType":"UserDefinedTypeName","pathNode":{"id":18628,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"4764:21:86"},"referencedDeclaration":21315,"src":"4764:21:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":18635,"initialValue":{"baseExpression":{"id":18631,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18606,"src":"4804:12:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":18634,"indexExpression":{"expression":{"id":18632,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18621,"src":"4817:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$21458_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}},"id":18633,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21447,"src":"4817:12:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4804:26:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"4764:66:86"},{"assignments":[18640],"declarations":[{"constant":false,"id":18640,"mutability":"mutable","name":"reserveCache","nameLocation":"4866:12:86","nodeType":"VariableDeclaration","scope":18785,"src":"4836:42:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":18639,"nodeType":"UserDefinedTypeName","pathNode":{"id":18638,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"4836:22:86"},"referencedDeclaration":21379,"src":"4836:22:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"id":18644,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18641,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18630,"src":"4881:7:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18642,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cache","nodeType":"MemberAccess","referencedDeclaration":18376,"src":"4881:13:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$21315_storage_ptr_$returns$_t_struct$_ReserveCache_$21379_memory_ptr_$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (struct DataTypes.ReserveCache memory)"}},"id":18643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4881:15:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"nodeType":"VariableDeclarationStatement","src":"4836:60:86"},{"expression":{"arguments":[{"id":18648,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18640,"src":"4923:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}],"expression":{"id":18645,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18630,"src":"4903:7:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18647,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateState","nodeType":"MemberAccess","referencedDeclaration":17793,"src":"4903:19:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$returns$__$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)"}},"id":18649,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4903:33:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18650,"nodeType":"ExpressionStatement","src":"4903:33:86"},{"assignments":[18652],"declarations":[{"constant":false,"id":18652,"mutability":"mutable","name":"userBalance","nameLocation":"4951:11:86","nodeType":"VariableDeclaration","scope":18785,"src":"4943:19:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18651,"name":"uint256","nodeType":"ElementaryTypeName","src":"4943:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18665,"initialValue":{"arguments":[{"expression":{"id":18662,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18640,"src":"5043:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18663,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21355,"src":"5043:31:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":18658,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5017:3:86","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5017:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":18654,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18640,"src":"4973:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18655,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"4973:26:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18653,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3861,"src":"4965:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3861_$","typeString":"type(contract IAToken)"}},"id":18656,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4965:35:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":18657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"scaledBalanceOf","nodeType":"MemberAccess","referencedDeclaration":5950,"src":"4965:51:86","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":18660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4965:63:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"4965:70:86","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":18664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4965:115:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4943:137:86"},{"assignments":[18667],"declarations":[{"constant":false,"id":18667,"mutability":"mutable","name":"amountToWithdraw","nameLocation":"5095:16:86","nodeType":"VariableDeclaration","scope":18785,"src":"5087:24:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18666,"name":"uint256","nodeType":"ElementaryTypeName","src":"5087:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18670,"initialValue":{"expression":{"id":18668,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18621,"src":"5114:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$21458_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}},"id":18669,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21449,"src":"5114:13:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5087:40:86"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18671,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18621,"src":"5138:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$21458_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}},"id":18672,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21449,"src":"5138:13:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":18675,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5160:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":18674,"name":"uint256","nodeType":"ElementaryTypeName","src":"5160:7:86","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":18673,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5155:4:86","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":18676,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5155:13:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":18677,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"5155:17:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5138:34:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18684,"nodeType":"IfStatement","src":"5134:85:86","trueBody":{"id":18683,"nodeType":"Block","src":"5174:45:86","statements":[{"expression":{"id":18681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18679,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18667,"src":"5182:16:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18680,"name":"userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18652,"src":"5201:11:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5182:30:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18682,"nodeType":"ExpressionStatement","src":"5182:30:86"}]}},{"expression":{"arguments":[{"id":18688,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18640,"src":"5258:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":18689,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18667,"src":"5272:16:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18690,"name":"userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18652,"src":"5290:11:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18685,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20908,"src":"5225:15:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$20908_$","typeString":"type(library ValidationLogic)"}},"id":18687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateWithdraw","nodeType":"MemberAccess","referencedDeclaration":19327,"src":"5225:32:86","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveCache_$21379_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (struct DataTypes.ReserveCache memory,uint256,uint256) pure"}},"id":18691,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5225:77:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18692,"nodeType":"ExpressionStatement","src":"5225:77:86"},{"expression":{"arguments":[{"id":18696,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18640,"src":"5337:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"expression":{"id":18697,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18621,"src":"5351:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$21458_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}},"id":18698,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21447,"src":"5351:12:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":18699,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5365:1:86","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":18700,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18667,"src":"5368:16:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18693,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18630,"src":"5309:7:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18695,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"updateInterestRates","nodeType":"MemberAccess","referencedDeclaration":18024,"src":"5309:27:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_ReserveCache_$21379_memory_ptr_$_t_address_$_t_uint256_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,uint256,uint256)"}},"id":18701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5309:76:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18702,"nodeType":"ExpressionStatement","src":"5309:76:86"},{"assignments":[18704],"declarations":[{"constant":false,"id":18704,"mutability":"mutable","name":"isCollateral","nameLocation":"5397:12:86","nodeType":"VariableDeclaration","scope":18785,"src":"5392:17:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18703,"name":"bool","nodeType":"ElementaryTypeName","src":"5392:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":18710,"initialValue":{"arguments":[{"expression":{"id":18707,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18630,"src":"5443:7:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18708,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"5443:10:86","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":18705,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18618,"src":"5412:10:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":18706,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":12083,"src":"5412:30:86","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (bool)"}},"id":18709,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5412:42:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"5392:62:86"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18711,"name":"isCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18704,"src":"5465:12:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18712,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18667,"src":"5481:16:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":18713,"name":"userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18652,"src":"5501:11:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5481:31:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5465:47:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18732,"nodeType":"IfStatement","src":"5461:188:86","trueBody":{"id":18731,"nodeType":"Block","src":"5514:135:86","statements":[{"expression":{"arguments":[{"expression":{"id":18719,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18630,"src":"5554:7:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18720,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"5554:10:86","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"hexValue":"66616c7365","id":18721,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5566:5:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":18716,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18618,"src":"5522:10:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":18718,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":11975,"src":"5522:31:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_uint256_$_t_bool_$returns$__$bound_to$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)"}},"id":18722,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5522:50:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18723,"nodeType":"ExpressionStatement","src":"5522:50:86"},{"eventCall":{"arguments":[{"expression":{"id":18725,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18621,"src":"5617:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$21458_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}},"id":18726,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21447,"src":"5617:12:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18727,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5631:3:86","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5631:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18724,"name":"ReserveUsedAsCollateralDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18440,"src":"5585:31:86","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":18729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5585:57:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18730,"nodeType":"EmitStatement","src":"5580:62:86"}]}},{"expression":{"arguments":[{"expression":{"id":18738,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5703:3:86","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5703:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18740,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18621,"src":"5721:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$21458_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}},"id":18741,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"to","nodeType":"MemberAccess","referencedDeclaration":21451,"src":"5721:9:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18742,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18667,"src":"5738:16:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18743,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18640,"src":"5762:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18744,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21355,"src":"5762:31:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":18734,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18640,"src":"5663:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":18735,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"5663:26:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18733,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3861,"src":"5655:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3861_$","typeString":"type(contract IAToken)"}},"id":18736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5655:35:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":18737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"burn","nodeType":"MemberAccess","referencedDeclaration":3770,"src":"5655:40:86","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256) external"}},"id":18745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5655:144:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18746,"nodeType":"ExpressionStatement","src":"5655:144:86"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18747,"name":"isCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18704,"src":"5810:12:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18748,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18618,"src":"5826:10:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":18749,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isBorrowingAny","nodeType":"MemberAccess","referencedDeclaration":12179,"src":"5826:25:86","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory) pure returns (bool)"}},"id":18750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5826:27:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5810:43:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18772,"nodeType":"IfStatement","src":"5806:322:86","trueBody":{"id":18771,"nodeType":"Block","src":"5855:273:86","statements":[{"expression":{"arguments":[{"id":18755,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18606,"src":"5905:12:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":18756,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18610,"src":"5927:12:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":18757,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18615,"src":"5949:15:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"id":18758,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18618,"src":"5974:10:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"expression":{"id":18759,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18621,"src":"5994:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$21458_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}},"id":18760,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21447,"src":"5994:12:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18761,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6016:3:86","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"6016:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18763,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18621,"src":"6036:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$21458_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}},"id":18764,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":21453,"src":"6036:20:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18765,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18621,"src":"6066:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$21458_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}},"id":18766,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"oracle","nodeType":"MemberAccess","referencedDeclaration":21455,"src":"6066:13:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18767,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18621,"src":"6089:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$21458_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}},"id":18768,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":21457,"src":"6089:24:86","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":18752,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20908,"src":"5863:15:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$20908_$","typeString":"type(library ValidationLogic)"}},"id":18754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateHFAndLtv","nodeType":"MemberAccess","referencedDeclaration":20592,"src":"5863:32:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_uint8_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap memory,address,address,uint256,address,uint8) view"}},"id":18769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5863:258:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18770,"nodeType":"ExpressionStatement","src":"5863:258:86"}]}},{"eventCall":{"arguments":[{"expression":{"id":18774,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18621,"src":"6148:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$21458_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}},"id":18775,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21447,"src":"6148:12:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18776,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6162:3:86","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"6162:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18778,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18621,"src":"6174:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$21458_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}},"id":18779,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"to","nodeType":"MemberAccess","referencedDeclaration":21451,"src":"6174:9:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18780,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18667,"src":"6185:16:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18773,"name":"Withdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18450,"src":"6139:8:86","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":18781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6139:63:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18782,"nodeType":"EmitStatement","src":"6134:68:86"},{"expression":{"id":18783,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18667,"src":"6216:16:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":18625,"id":18784,"nodeType":"Return","src":"6209:23:86"}]},"documentation":{"id":18601,"nodeType":"StructuredDocumentation","src":"3666:734:86","text":" @notice Implements the withdraw feature. Through `withdraw()`, users redeem their aTokens for the underlying asset\n previously supplied in the Aave protocol.\n @dev Emits the `Withdraw()` event.\n @dev If the user withdraws everything, `ReserveUsedAsCollateralDisabled()` is emitted.\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param eModeCategories The configuration of all the efficiency mode categories\n @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\n @param params The additional parameters needed to execute the withdraw function\n @return The actual amount withdrawn"},"functionSelector":"186dea44","id":18786,"implemented":true,"kind":"function","modifiers":[],"name":"executeWithdraw","nameLocation":"4412:15:86","nodeType":"FunctionDefinition","parameters":{"id":18622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18606,"mutability":"mutable","name":"reservesData","nameLocation":"4483:12:86","nodeType":"VariableDeclaration","scope":18786,"src":"4433:62:86","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":18605,"keyType":{"id":18602,"name":"address","nodeType":"ElementaryTypeName","src":"4441:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"4433:41:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":18604,"nodeType":"UserDefinedTypeName","pathNode":{"id":18603,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"4452:21:86"},"referencedDeclaration":21315,"src":"4452:21:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":18610,"mutability":"mutable","name":"reservesList","nameLocation":"4537:12:86","nodeType":"VariableDeclaration","scope":18786,"src":"4501:48:86","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":18609,"keyType":{"id":18607,"name":"uint256","nodeType":"ElementaryTypeName","src":"4509:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"4501:27:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":18608,"name":"address","nodeType":"ElementaryTypeName","src":"4520:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":18615,"mutability":"mutable","name":"eModeCategories","nameLocation":"4605:15:86","nodeType":"VariableDeclaration","scope":18786,"src":"4555:65:86","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":18614,"keyType":{"id":18611,"name":"uint8","nodeType":"ElementaryTypeName","src":"4563:5:86","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"4555:41:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":18613,"nodeType":"UserDefinedTypeName","pathNode":{"id":18612,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":21333,"src":"4572:23:86"},"referencedDeclaration":21333,"src":"4572:23:86","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":18618,"mutability":"mutable","name":"userConfig","nameLocation":"4665:10:86","nodeType":"VariableDeclaration","scope":18786,"src":"4626:49:86","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":18617,"nodeType":"UserDefinedTypeName","pathNode":{"id":18616,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"4626:30:86"},"referencedDeclaration":21322,"src":"4626:30:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":18621,"mutability":"mutable","name":"params","nameLocation":"4720:6:86","nodeType":"VariableDeclaration","scope":18786,"src":"4681:45:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$21458_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams"},"typeName":{"id":18620,"nodeType":"UserDefinedTypeName","pathNode":{"id":18619,"name":"DataTypes.ExecuteWithdrawParams","nodeType":"IdentifierPath","referencedDeclaration":21458,"src":"4681:31:86"},"referencedDeclaration":21458,"src":"4681:31:86","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$21458_storage_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams"}},"visibility":"internal"}],"src":"4427:303:86"},"returnParameters":{"id":18625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18624,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18786,"src":"4749:7:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18623,"name":"uint256","nodeType":"ElementaryTypeName","src":"4749:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4748:9:86"},"scope":19090,"src":"4403:1834:86","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18951,"nodeType":"Block","src":"7417:1468:86","statements":[{"assignments":[18816],"declarations":[{"constant":false,"id":18816,"mutability":"mutable","name":"reserve","nameLocation":"7453:7:86","nodeType":"VariableDeclaration","scope":18951,"src":"7423:37:86","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":18815,"nodeType":"UserDefinedTypeName","pathNode":{"id":18814,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"7423:21:86"},"referencedDeclaration":21315,"src":"7423:21:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":18821,"initialValue":{"baseExpression":{"id":18817,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18792,"src":"7463:12:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":18820,"indexExpression":{"expression":{"id":18818,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18809,"src":"7476:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$21484_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":18819,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21467,"src":"7476:12:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7463:26:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"7423:66:86"},{"expression":{"arguments":[{"id":18825,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18816,"src":"7529:7:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}],"expression":{"id":18822,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20908,"src":"7496:15:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$20908_$","typeString":"type(library ValidationLogic)"}},"id":18824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateTransfer","nodeType":"MemberAccess","referencedDeclaration":20610,"src":"7496:32:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$21315_storage_ptr_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer) view"}},"id":18826,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7496:41:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18827,"nodeType":"ExpressionStatement","src":"7496:41:86"},{"assignments":[18829],"declarations":[{"constant":false,"id":18829,"mutability":"mutable","name":"reserveId","nameLocation":"7552:9:86","nodeType":"VariableDeclaration","scope":18951,"src":"7544:17:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18828,"name":"uint256","nodeType":"ElementaryTypeName","src":"7544:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18832,"initialValue":{"expression":{"id":18830,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18816,"src":"7564:7:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18831,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"7564:10:86","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"VariableDeclarationStatement","src":"7544:30:86"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":18842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":18837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18833,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18809,"src":"7585:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$21484_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":18834,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"from","nodeType":"MemberAccess","referencedDeclaration":21469,"src":"7585:11:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":18835,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18809,"src":"7600:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$21484_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":18836,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"to","nodeType":"MemberAccess","referencedDeclaration":21471,"src":"7600:9:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7585:24:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18838,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18809,"src":"7613:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$21484_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":18839,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21473,"src":"7613:13:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":18840,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7630:1:86","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7613:18:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7585:46:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18950,"nodeType":"IfStatement","src":"7581:1300:86","trueBody":{"id":18949,"nodeType":"Block","src":"7633:1248:86","statements":[{"assignments":[18847],"declarations":[{"constant":false,"id":18847,"mutability":"mutable","name":"fromConfig","nameLocation":"7680:10:86","nodeType":"VariableDeclaration","scope":18949,"src":"7641:49:86","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":18846,"nodeType":"UserDefinedTypeName","pathNode":{"id":18845,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"7641:30:86"},"referencedDeclaration":21322,"src":"7641:30:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"id":18852,"initialValue":{"baseExpression":{"id":18848,"name":"usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18806,"src":"7693:11:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":18851,"indexExpression":{"expression":{"id":18849,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18809,"src":"7705:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$21484_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":18850,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"from","nodeType":"MemberAccess","referencedDeclaration":21469,"src":"7705:11:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7693:24:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"7641:76:86"},{"condition":{"arguments":[{"id":18855,"name":"reserveId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18829,"src":"7761:9:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18853,"name":"fromConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18847,"src":"7730:10:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":18854,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":12083,"src":"7730:30:86","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (bool)"}},"id":18856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7730:41:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18906,"nodeType":"IfStatement","src":"7726:637:86","trueBody":{"id":18905,"nodeType":"Block","src":"7773:590:86","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18857,"name":"fromConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18847,"src":"7787:10:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":18858,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isBorrowingAny","nodeType":"MemberAccess","referencedDeclaration":12179,"src":"7787:25:86","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory) pure returns (bool)"}},"id":18859,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7787:27:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18883,"nodeType":"IfStatement","src":"7783:369:86","trueBody":{"id":18882,"nodeType":"Block","src":"7816:336:86","statements":[{"expression":{"arguments":[{"id":18863,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18792,"src":"7874:12:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":18864,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18796,"src":"7900:12:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":18865,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18801,"src":"7926:15:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"baseExpression":{"id":18866,"name":"usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18806,"src":"7955:11:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":18869,"indexExpression":{"expression":{"id":18867,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18809,"src":"7967:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$21484_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":18868,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"from","nodeType":"MemberAccess","referencedDeclaration":21469,"src":"7967:11:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7955:24:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"expression":{"id":18870,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18809,"src":"7993:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$21484_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":18871,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21467,"src":"7993:12:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18872,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18809,"src":"8019:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$21484_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":18873,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"from","nodeType":"MemberAccess","referencedDeclaration":21469,"src":"8019:11:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18874,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18809,"src":"8044:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$21484_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":18875,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":21479,"src":"8044:20:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18876,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18809,"src":"8078:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$21484_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":18877,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"oracle","nodeType":"MemberAccess","referencedDeclaration":21481,"src":"8078:13:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18878,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18809,"src":"8105:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$21484_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":18879,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"fromEModeCategory","nodeType":"MemberAccess","referencedDeclaration":21483,"src":"8105:24:86","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":18860,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20908,"src":"7828:15:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$20908_$","typeString":"type(library ValidationLogic)"}},"id":18862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateHFAndLtv","nodeType":"MemberAccess","referencedDeclaration":20592,"src":"7828:32:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_uint8_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap memory,address,address,uint256,address,uint8) view"}},"id":18880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7828:313:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18881,"nodeType":"ExpressionStatement","src":"7828:313:86"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18884,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18809,"src":"8165:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$21484_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":18885,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"balanceFromBefore","nodeType":"MemberAccess","referencedDeclaration":21475,"src":"8165:24:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":18886,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18809,"src":"8193:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$21484_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":18887,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21473,"src":"8193:13:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8165:41:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18904,"nodeType":"IfStatement","src":"8161:194:86","trueBody":{"id":18903,"nodeType":"Block","src":"8208:147:86","statements":[{"expression":{"arguments":[{"id":18892,"name":"reserveId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18829,"src":"8252:9:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":18893,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8263:5:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":18889,"name":"fromConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18847,"src":"8220:10:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":18891,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":11975,"src":"8220:31:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_uint256_$_t_bool_$returns$__$bound_to$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)"}},"id":18894,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8220:49:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18895,"nodeType":"ExpressionStatement","src":"8220:49:86"},{"eventCall":{"arguments":[{"expression":{"id":18897,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18809,"src":"8318:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$21484_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":18898,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21467,"src":"8318:12:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18899,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18809,"src":"8332:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$21484_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":18900,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"from","nodeType":"MemberAccess","referencedDeclaration":21469,"src":"8332:11:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18896,"name":"ReserveUsedAsCollateralDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18440,"src":"8286:31:86","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":18901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8286:58:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18902,"nodeType":"EmitStatement","src":"8281:63:86"}]}}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":18907,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18809,"src":"8375:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$21484_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":18908,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"balanceToBefore","nodeType":"MemberAccess","referencedDeclaration":21477,"src":"8375:22:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":18909,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8401:1:86","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8375:27:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18948,"nodeType":"IfStatement","src":"8371:504:86","trueBody":{"id":18947,"nodeType":"Block","src":"8404:471:86","statements":[{"assignments":[18915],"declarations":[{"constant":false,"id":18915,"mutability":"mutable","name":"toConfig","nameLocation":"8453:8:86","nodeType":"VariableDeclaration","scope":18947,"src":"8414:47:86","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":18914,"nodeType":"UserDefinedTypeName","pathNode":{"id":18913,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"8414:30:86"},"referencedDeclaration":21322,"src":"8414:30:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"id":18920,"initialValue":{"baseExpression":{"id":18916,"name":"usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18806,"src":"8464:11:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":18919,"indexExpression":{"expression":{"id":18917,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18809,"src":"8476:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$21484_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":18918,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"to","nodeType":"MemberAccess","referencedDeclaration":21471,"src":"8476:9:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8464:22:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"8414:72:86"},{"condition":{"arguments":[{"id":18923,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18792,"src":"8573:12:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":18924,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18796,"src":"8599:12:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":18925,"name":"toConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18915,"src":"8625:8:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"expression":{"id":18926,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18816,"src":"8647:7:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18927,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":21286,"src":"8647:21:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},{"expression":{"id":18928,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18816,"src":"8682:7:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18929,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"8682:21:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":18921,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20908,"src":"8511:15:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$20908_$","typeString":"type(library ValidationLogic)"}},"id":18922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateAutomaticUseAsCollateral","nodeType":"MemberAccess","referencedDeclaration":20907,"src":"8511:48:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_address_$returns$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveConfigurationMap memory,address) view returns (bool)"}},"id":18930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8511:204:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18946,"nodeType":"IfStatement","src":"8496:371:86","trueBody":{"id":18945,"nodeType":"Block","src":"8726:141:86","statements":[{"expression":{"arguments":[{"id":18934,"name":"reserveId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18829,"src":"8768:9:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":18935,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8779:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":18931,"name":"toConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18915,"src":"8738:8:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":18933,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":11975,"src":"8738:29:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_uint256_$_t_bool_$returns$__$bound_to$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)"}},"id":18936,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8738:46:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18937,"nodeType":"ExpressionStatement","src":"8738:46:86"},{"eventCall":{"arguments":[{"expression":{"id":18939,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18809,"src":"8832:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$21484_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":18940,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21467,"src":"8832:12:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18941,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18809,"src":"8846:6:86","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$21484_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}},"id":18942,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"to","nodeType":"MemberAccess","referencedDeclaration":21471,"src":"8846:9:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":18938,"name":"ReserveUsedAsCollateralEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18434,"src":"8801:30:86","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":18943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8801:55:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18944,"nodeType":"EmitStatement","src":"8796:60:86"}]}}]}}]}}]},"documentation":{"id":18787,"nodeType":"StructuredDocumentation","src":"6241:806:86","text":" @notice Validates a transfer of aTokens. The sender is subjected to health factor validation to avoid\n collateralization constraints violation.\n @dev Emits the `ReserveUsedAsCollateralEnabled()` event for the `to` account, if the asset is being activated as\n collateral.\n @dev In case the `from` user transfers everything, `ReserveUsedAsCollateralDisabled()` is emitted for `from`.\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param eModeCategories The configuration of all the efficiency mode categories\n @param usersConfig The users configuration mapping that track the supplied/borrowed assets\n @param params The additional parameters needed to execute the finalizeTransfer function"},"functionSelector":"8a5dadd1","id":18952,"implemented":true,"kind":"function","modifiers":[],"name":"executeFinalizeTransfer","nameLocation":"7059:23:86","nodeType":"FunctionDefinition","parameters":{"id":18810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18792,"mutability":"mutable","name":"reservesData","nameLocation":"7138:12:86","nodeType":"VariableDeclaration","scope":18952,"src":"7088:62:86","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":18791,"keyType":{"id":18788,"name":"address","nodeType":"ElementaryTypeName","src":"7096:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"7088:41:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":18790,"nodeType":"UserDefinedTypeName","pathNode":{"id":18789,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"7107:21:86"},"referencedDeclaration":21315,"src":"7107:21:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":18796,"mutability":"mutable","name":"reservesList","nameLocation":"7192:12:86","nodeType":"VariableDeclaration","scope":18952,"src":"7156:48:86","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":18795,"keyType":{"id":18793,"name":"uint256","nodeType":"ElementaryTypeName","src":"7164:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"7156:27:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":18794,"name":"address","nodeType":"ElementaryTypeName","src":"7175:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":18801,"mutability":"mutable","name":"eModeCategories","nameLocation":"7260:15:86","nodeType":"VariableDeclaration","scope":18952,"src":"7210:65:86","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":18800,"keyType":{"id":18797,"name":"uint8","nodeType":"ElementaryTypeName","src":"7218:5:86","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"7210:41:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":18799,"nodeType":"UserDefinedTypeName","pathNode":{"id":18798,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":21333,"src":"7227:23:86"},"referencedDeclaration":21333,"src":"7227:23:86","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":18806,"mutability":"mutable","name":"usersConfig","nameLocation":"7340:11:86","nodeType":"VariableDeclaration","scope":18952,"src":"7281:70:86","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap)"},"typeName":{"id":18805,"keyType":{"id":18802,"name":"address","nodeType":"ElementaryTypeName","src":"7289:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"7281:50:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap)"},"valueType":{"id":18804,"nodeType":"UserDefinedTypeName","pathNode":{"id":18803,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"7300:30:86"},"referencedDeclaration":21322,"src":"7300:30:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},"visibility":"internal"},{"constant":false,"id":18809,"mutability":"mutable","name":"params","nameLocation":"7397:6:86","nodeType":"VariableDeclaration","scope":18952,"src":"7357:46:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$21484_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams"},"typeName":{"id":18808,"nodeType":"UserDefinedTypeName","pathNode":{"id":18807,"name":"DataTypes.FinalizeTransferParams","nodeType":"IdentifierPath","referencedDeclaration":21484,"src":"7357:32:86"},"referencedDeclaration":21484,"src":"7357:32:86","typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$21484_storage_ptr","typeString":"struct DataTypes.FinalizeTransferParams"}},"visibility":"internal"}],"src":"7082:325:86"},"returnParameters":{"id":18811,"nodeType":"ParameterList","parameters":[],"src":"7417:0:86"},"scope":19090,"src":"7050:1835:86","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":19088,"nodeType":"Block","src":"10469:1164:86","statements":[{"assignments":[18987],"declarations":[{"constant":false,"id":18987,"mutability":"mutable","name":"reserve","nameLocation":"10505:7:86","nodeType":"VariableDeclaration","scope":19088,"src":"10475:37:86","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":18986,"nodeType":"UserDefinedTypeName","pathNode":{"id":18985,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"10475:21:86"},"referencedDeclaration":21315,"src":"10475:21:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":18991,"initialValue":{"baseExpression":{"id":18988,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18958,"src":"10515:12:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":18990,"indexExpression":{"id":18989,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18972,"src":"10528:5:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10515:19:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"10475:59:86"},{"assignments":[18996],"declarations":[{"constant":false,"id":18996,"mutability":"mutable","name":"reserveCache","nameLocation":"10570:12:86","nodeType":"VariableDeclaration","scope":19088,"src":"10540:42:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":18995,"nodeType":"UserDefinedTypeName","pathNode":{"id":18994,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"10540:22:86"},"referencedDeclaration":21379,"src":"10540:22:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"}],"id":19000,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":18997,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18987,"src":"10585:7:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":18998,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"cache","nodeType":"MemberAccess","referencedDeclaration":18376,"src":"10585:13:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$21315_storage_ptr_$returns$_t_struct$_ReserveCache_$21379_memory_ptr_$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (struct DataTypes.ReserveCache memory)"}},"id":18999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10585:15:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"nodeType":"VariableDeclarationStatement","src":"10540:60:86"},{"assignments":[19002],"declarations":[{"constant":false,"id":19002,"mutability":"mutable","name":"userBalance","nameLocation":"10615:11:86","nodeType":"VariableDeclaration","scope":19088,"src":"10607:19:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19001,"name":"uint256","nodeType":"ElementaryTypeName","src":"10607:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19011,"initialValue":{"arguments":[{"expression":{"id":19008,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10674:3:86","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"10674:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":19004,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18996,"src":"10636:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19005,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"10636:26:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19003,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"10629:6:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":19006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10629:34:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":19007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"10629:44:86","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":19010,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10629:56:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10607:78:86"},{"expression":{"arguments":[{"id":19015,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18996,"src":"10742:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},{"id":19016,"name":"userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19002,"src":"10756:11:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":19012,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20908,"src":"10692:15:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$20908_$","typeString":"type(library ValidationLogic)"}},"id":19014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateSetUseReserveAsCollateral","nodeType":"MemberAccess","referencedDeclaration":20229,"src":"10692:49:86","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveCache_$21379_memory_ptr_$_t_uint256_$returns$__$","typeString":"function (struct DataTypes.ReserveCache memory,uint256) pure"}},"id":19017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10692:76:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19018,"nodeType":"ExpressionStatement","src":"10692:76:86"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19019,"name":"useAsCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18974,"src":"10779:15:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"expression":{"id":19022,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18987,"src":"10829:7:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":19023,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"10829:10:86","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":19020,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18970,"src":"10798:10:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":19021,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":12083,"src":"10798:30:86","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (bool)"}},"id":19024,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10798:42:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10779:61:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19027,"nodeType":"IfStatement","src":"10775:74:86","trueBody":{"functionReturnParameters":18982,"id":19026,"nodeType":"Return","src":"10842:7:86"}},{"condition":{"id":19028,"name":"useAsCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18974,"src":"10859:15:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":19086,"nodeType":"Block","src":"11257:372:86","statements":[{"expression":{"arguments":[{"expression":{"id":19060,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18987,"src":"11297:7:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":19061,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"11297:10:86","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"hexValue":"66616c7365","id":19062,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11309:5:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":19057,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18970,"src":"11265:10:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":19059,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":11975,"src":"11265:31:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_uint256_$_t_bool_$returns$__$bound_to$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)"}},"id":19063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11265:50:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19064,"nodeType":"ExpressionStatement","src":"11265:50:86"},{"expression":{"arguments":[{"id":19068,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18958,"src":"11365:12:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":19069,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18962,"src":"11387:12:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":19070,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18967,"src":"11409:15:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"id":19071,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18970,"src":"11434:10:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"id":19072,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18972,"src":"11454:5:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19073,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11469:3:86","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"11469:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19075,"name":"reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18976,"src":"11489:13:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19076,"name":"priceOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18978,"src":"11512:11:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19077,"name":"userEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18980,"src":"11533:17:86","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":19065,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20908,"src":"11323:15:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$20908_$","typeString":"type(library ValidationLogic)"}},"id":19067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateHFAndLtv","nodeType":"MemberAccess","referencedDeclaration":20592,"src":"11323:32:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_uint8_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap memory,address,address,uint256,address,uint8) view"}},"id":19078,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11323:235:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19079,"nodeType":"ExpressionStatement","src":"11323:235:86"},{"eventCall":{"arguments":[{"id":19081,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18972,"src":"11604:5:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19082,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11611:3:86","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"11611:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":19080,"name":"ReserveUsedAsCollateralDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18440,"src":"11572:31:86","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":19084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11572:50:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19085,"nodeType":"EmitStatement","src":"11567:55:86"}]},"id":19087,"nodeType":"IfStatement","src":"10855:774:86","trueBody":{"id":19056,"nodeType":"Block","src":"10876:375:86","statements":[{"expression":{"arguments":[{"arguments":[{"id":19032,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18958,"src":"10952:12:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":19033,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18962,"src":"10976:12:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":19034,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18970,"src":"11000:10:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"expression":{"id":19035,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18996,"src":"11022:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19036,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"11022:33:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":19030,"name":"ValidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20908,"src":"10901:15:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ValidationLogic_$20908_$","typeString":"type(library ValidationLogic)"}},"id":19031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"validateUseAsCollateral","nodeType":"MemberAccess","referencedDeclaration":20844,"src":"10901:39:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveConfigurationMap memory) view returns (bool)"}},"id":19037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10901:164:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19038,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"11075:6:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"USER_IN_ISOLATION_MODE_OR_LTV_ZERO","nodeType":"MemberAccess","referencedDeclaration":12554,"src":"11075:41:86","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19029,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10884:7:86","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10884:240:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19041,"nodeType":"ExpressionStatement","src":"10884:240:86"},{"expression":{"arguments":[{"expression":{"id":19045,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18987,"src":"11165:7:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":19046,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"11165:10:86","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"hexValue":"74727565","id":19047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11177:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":19042,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18970,"src":"11133:10:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":19044,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":11975,"src":"11133:31:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_uint256_$_t_bool_$returns$__$bound_to$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)"}},"id":19048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11133:49:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19049,"nodeType":"ExpressionStatement","src":"11133:49:86"},{"eventCall":{"arguments":[{"id":19051,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18972,"src":"11226:5:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19052,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11233:3:86","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"11233:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":19050,"name":"ReserveUsedAsCollateralEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18434,"src":"11195:30:86","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":19054,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11195:49:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19055,"nodeType":"EmitStatement","src":"11190:54:86"}]}}]},"documentation":{"id":18953,"nodeType":"StructuredDocumentation","src":"8889:1151:86","text":" @notice Executes the 'set as collateral' feature. A user can choose to activate or deactivate an asset as\n collateral at any point in time. Deactivating an asset as collateral is subjected to the usual health factor\n checks to ensure collateralization.\n @dev Emits the `ReserveUsedAsCollateralEnabled()` event if the asset can be activated as collateral.\n @dev In case the asset is being deactivated as collateral, `ReserveUsedAsCollateralDisabled()` is emitted.\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param eModeCategories The configuration of all the efficiency mode categories\n @param userConfig The users configuration mapping that track the supplied/borrowed assets\n @param asset The address of the asset being configured as collateral\n @param useAsCollateral True if the user wants to set the asset as collateral, false otherwise\n @param reservesCount The number of initialized reserves\n @param priceOracle The address of the price oracle\n @param userEModeCategory The eMode category chosen by the user"},"functionSelector":"bf697a26","id":19089,"implemented":true,"kind":"function","modifiers":[],"name":"executeUseReserveAsCollateral","nameLocation":"10052:29:86","nodeType":"FunctionDefinition","parameters":{"id":18981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18958,"mutability":"mutable","name":"reservesData","nameLocation":"10137:12:86","nodeType":"VariableDeclaration","scope":19089,"src":"10087:62:86","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":18957,"keyType":{"id":18954,"name":"address","nodeType":"ElementaryTypeName","src":"10095:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"10087:41:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":18956,"nodeType":"UserDefinedTypeName","pathNode":{"id":18955,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"10106:21:86"},"referencedDeclaration":21315,"src":"10106:21:86","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":18962,"mutability":"mutable","name":"reservesList","nameLocation":"10191:12:86","nodeType":"VariableDeclaration","scope":19089,"src":"10155:48:86","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":18961,"keyType":{"id":18959,"name":"uint256","nodeType":"ElementaryTypeName","src":"10163:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"10155:27:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":18960,"name":"address","nodeType":"ElementaryTypeName","src":"10174:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":18967,"mutability":"mutable","name":"eModeCategories","nameLocation":"10259:15:86","nodeType":"VariableDeclaration","scope":19089,"src":"10209:65:86","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":18966,"keyType":{"id":18963,"name":"uint8","nodeType":"ElementaryTypeName","src":"10217:5:86","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"10209:41:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":18965,"nodeType":"UserDefinedTypeName","pathNode":{"id":18964,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":21333,"src":"10226:23:86"},"referencedDeclaration":21333,"src":"10226:23:86","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":18970,"mutability":"mutable","name":"userConfig","nameLocation":"10319:10:86","nodeType":"VariableDeclaration","scope":19089,"src":"10280:49:86","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":18969,"nodeType":"UserDefinedTypeName","pathNode":{"id":18968,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"10280:30:86"},"referencedDeclaration":21322,"src":"10280:30:86","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":18972,"mutability":"mutable","name":"asset","nameLocation":"10343:5:86","nodeType":"VariableDeclaration","scope":19089,"src":"10335:13:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18971,"name":"address","nodeType":"ElementaryTypeName","src":"10335:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18974,"mutability":"mutable","name":"useAsCollateral","nameLocation":"10359:15:86","nodeType":"VariableDeclaration","scope":19089,"src":"10354:20:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18973,"name":"bool","nodeType":"ElementaryTypeName","src":"10354:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":18976,"mutability":"mutable","name":"reservesCount","nameLocation":"10388:13:86","nodeType":"VariableDeclaration","scope":19089,"src":"10380:21:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18975,"name":"uint256","nodeType":"ElementaryTypeName","src":"10380:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18978,"mutability":"mutable","name":"priceOracle","nameLocation":"10415:11:86","nodeType":"VariableDeclaration","scope":19089,"src":"10407:19:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18977,"name":"address","nodeType":"ElementaryTypeName","src":"10407:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18980,"mutability":"mutable","name":"userEModeCategory","nameLocation":"10438:17:86","nodeType":"VariableDeclaration","scope":19089,"src":"10432:23:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18979,"name":"uint8","nodeType":"ElementaryTypeName","src":"10432:5:86","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"10081:378:86"},"returnParameters":{"id":18982,"nodeType":"ParameterList","parameters":[],"src":"10469:0:86"},"scope":19090,"src":"10043:1590:86","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":19091,"src":"864:10771:86","usedErrors":[]}],"src":"37:11599:86"},"id":86},"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol","exportedSymbols":{"Address":[722],"DataTypes":[21633],"Errors":[12642],"GPv2SafeERC20":[118],"GenericLogic":[15855],"IAToken":[3861],"IAccessControl":[1352],"IERC20":[1442],"IPoolAddressesProvider":[5069],"IPriceOracleGetter":[5835],"IPriceOracleSentinel":[5894],"IReserveInterestRateStrategy":[5913],"IScaledBalanceToken":[5975],"IStableDebtToken":[6109],"IncentivizedERC20":[28349],"PercentageMath":[21132],"ReserveConfiguration":[11857],"ReserveLogic":[18377],"SafeCast":[1966],"UserConfiguration":[12368],"ValidationLogic":[20908],"WadRayMath":[21219]},"id":20909,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":19092,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:87"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../../dependencies/openzeppelin/contracts/IERC20.sol","id":19094,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20909,"sourceUnit":1443,"src":"63:79:87","symbolAliases":[{"foreign":{"id":19093,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:6:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol","file":"../../../dependencies/openzeppelin/contracts/Address.sol","id":19096,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20909,"sourceUnit":723,"src":"143:81:87","symbolAliases":[{"foreign":{"id":19095,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"src":"151:7:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":19098,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20909,"sourceUnit":119,"src":"225:87:87","symbolAliases":[{"foreign":{"id":19097,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"233:13:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol","file":"../../../interfaces/IReserveInterestRateStrategy.sol","id":19100,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20909,"sourceUnit":5914,"src":"313:98:87","symbolAliases":[{"foreign":{"id":19099,"name":"IReserveInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"src":"321:28:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol","file":"../../../interfaces/IStableDebtToken.sol","id":19102,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20909,"sourceUnit":6110,"src":"412:74:87","symbolAliases":[{"foreign":{"id":19101,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"420:16:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol","file":"../../../interfaces/IScaledBalanceToken.sol","id":19104,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20909,"sourceUnit":5976,"src":"487:80:87","symbolAliases":[{"foreign":{"id":19103,"name":"IScaledBalanceToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"495:19:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol","file":"../../../interfaces/IPriceOracleGetter.sol","id":19106,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20909,"sourceUnit":5836,"src":"568:78:87","symbolAliases":[{"foreign":{"id":19105,"name":"IPriceOracleGetter","nodeType":"Identifier","overloadedDeclarations":[],"src":"576:18:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IAToken.sol","file":"../../../interfaces/IAToken.sol","id":19108,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20909,"sourceUnit":3862,"src":"647:56:87","symbolAliases":[{"foreign":{"id":19107,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"655:7:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPriceOracleSentinel.sol","file":"../../../interfaces/IPriceOracleSentinel.sol","id":19110,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20909,"sourceUnit":5895,"src":"704:82:87","symbolAliases":[{"foreign":{"id":19109,"name":"IPriceOracleSentinel","nodeType":"Identifier","overloadedDeclarations":[],"src":"712:20:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"../../../interfaces/IPoolAddressesProvider.sol","id":19112,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20909,"sourceUnit":5070,"src":"787:86:87","symbolAliases":[{"foreign":{"id":19111,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"795:22:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol","file":"../../../dependencies/openzeppelin/contracts/IAccessControl.sol","id":19114,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20909,"sourceUnit":1353,"src":"874:95:87","symbolAliases":[{"foreign":{"id":19113,"name":"IAccessControl","nodeType":"Identifier","overloadedDeclarations":[],"src":"882:14:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../configuration/ReserveConfiguration.sol","id":19116,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20909,"sourceUnit":11858,"src":"970:79:87","symbolAliases":[{"foreign":{"id":19115,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"978:20:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"../configuration/UserConfiguration.sol","id":19118,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20909,"sourceUnit":12369,"src":"1050:73:87","symbolAliases":[{"foreign":{"id":19117,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"1058:17:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol","file":"../helpers/Errors.sol","id":19120,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20909,"sourceUnit":12643,"src":"1124:45:87","symbolAliases":[{"foreign":{"id":19119,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"1132:6:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol","file":"../math/WadRayMath.sol","id":19122,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20909,"sourceUnit":21220,"src":"1170:50:87","symbolAliases":[{"foreign":{"id":19121,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"1178:10:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol","file":"../math/PercentageMath.sol","id":19124,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20909,"sourceUnit":21133,"src":"1221:58:87","symbolAliases":[{"foreign":{"id":19123,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"1229:14:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"../types/DataTypes.sol","id":19126,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20909,"sourceUnit":21634,"src":"1280:49:87","symbolAliases":[{"foreign":{"id":19125,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"1288:9:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol","file":"./ReserveLogic.sol","id":19128,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20909,"sourceUnit":18378,"src":"1330:48:87","symbolAliases":[{"foreign":{"id":19127,"name":"ReserveLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"1338:12:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol","file":"./GenericLogic.sol","id":19130,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20909,"sourceUnit":15856,"src":"1379:48:87","symbolAliases":[{"foreign":{"id":19129,"name":"GenericLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"1387:12:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"../../../dependencies/openzeppelin/contracts/SafeCast.sol","id":19132,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20909,"sourceUnit":1967,"src":"1428:83:87","symbolAliases":[{"foreign":{"id":19131,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"1436:8:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol","file":"../../tokenization/base/IncentivizedERC20.sol","id":19134,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":20909,"sourceUnit":28350,"src":"1512:80:87","symbolAliases":[{"foreign":{"id":19133,"name":"IncentivizedERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"1520:17:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"ValidationLogic","contractDependencies":[],"contractKind":"library","documentation":{"id":19135,"nodeType":"StructuredDocumentation","src":"1594:136:87","text":" @title ReserveLogic library\n @author Aave\n @notice Implements functions to validate the different actions of the protocol"},"fullyImplemented":true,"id":20908,"linearizedBaseContracts":[20908],"name":"ValidationLogic","nameLocation":"1739:15:87","nodeType":"ContractDefinition","nodes":[{"id":19139,"libraryName":{"id":19136,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":18377,"src":"1765:12:87"},"nodeType":"UsingForDirective","src":"1759:45:87","typeName":{"id":19138,"nodeType":"UserDefinedTypeName","pathNode":{"id":19137,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"1782:21:87"},"referencedDeclaration":21315,"src":"1782:21:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},{"id":19142,"libraryName":{"id":19140,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":21219,"src":"1813:10:87"},"nodeType":"UsingForDirective","src":"1807:29:87","typeName":{"id":19141,"name":"uint256","nodeType":"ElementaryTypeName","src":"1828:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":19145,"libraryName":{"id":19143,"name":"PercentageMath","nodeType":"IdentifierPath","referencedDeclaration":21132,"src":"1845:14:87"},"nodeType":"UsingForDirective","src":"1839:33:87","typeName":{"id":19144,"name":"uint256","nodeType":"ElementaryTypeName","src":"1864:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":19148,"libraryName":{"id":19146,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"1881:8:87"},"nodeType":"UsingForDirective","src":"1875:27:87","typeName":{"id":19147,"name":"uint256","nodeType":"ElementaryTypeName","src":"1894:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":19152,"libraryName":{"id":19149,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"1911:13:87"},"nodeType":"UsingForDirective","src":"1905:31:87","typeName":{"id":19151,"nodeType":"UserDefinedTypeName","pathNode":{"id":19150,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1929:6:87"},"referencedDeclaration":1442,"src":"1929:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"id":19156,"libraryName":{"id":19153,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":11857,"src":"1945:20:87"},"nodeType":"UsingForDirective","src":"1939:65:87","typeName":{"id":19155,"nodeType":"UserDefinedTypeName","pathNode":{"id":19154,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"1970:33:87"},"referencedDeclaration":21318,"src":"1970:33:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"id":19160,"libraryName":{"id":19157,"name":"UserConfiguration","nodeType":"IdentifierPath","referencedDeclaration":12368,"src":"2013:17:87"},"nodeType":"UsingForDirective","src":"2007:59:87","typeName":{"id":19159,"nodeType":"UserDefinedTypeName","pathNode":{"id":19158,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"2035:30:87"},"referencedDeclaration":21322,"src":"2035:30:87","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},{"id":19163,"libraryName":{"id":19161,"name":"Address","nodeType":"IdentifierPath","referencedDeclaration":722,"src":"2075:7:87"},"nodeType":"UsingForDirective","src":"2069:26:87","typeName":{"id":19162,"name":"address","nodeType":"ElementaryTypeName","src":"2087:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"constant":true,"functionSelector":"abfcc86a","id":19166,"mutability":"constant","name":"REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD","nameLocation":"2271:37:87","nodeType":"VariableDeclaration","scope":20908,"src":"2247:69:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19164,"name":"uint256","nodeType":"ElementaryTypeName","src":"2247:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"302e396534","id":19165,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2311:5:87","typeDescriptions":{"typeIdentifier":"t_rational_9000_by_1","typeString":"int_const 9000"},"value":"0.9e4"},"visibility":"public"},{"constant":true,"functionSelector":"561cbec9","id":19169,"mutability":"constant","name":"MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD","nameLocation":"2443:43:87","nodeType":"VariableDeclaration","scope":20908,"src":"2419:77:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19167,"name":"uint256","nodeType":"ElementaryTypeName","src":"2419:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"302e3935653138","id":19168,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2489:7:87","typeDescriptions":{"typeIdentifier":"t_rational_950000000000000000_by_1","typeString":"int_const 950000000000000000"},"value":"0.95e18"},"visibility":"public"},{"constant":true,"documentation":{"id":19170,"nodeType":"StructuredDocumentation","src":"2501:111:87","text":" @dev Minimum health factor to consider a user position healthy\n A value of 1e18 results in 1"},"functionSelector":"c3525c28","id":19173,"mutability":"constant","name":"HEALTH_FACTOR_LIQUIDATION_THRESHOLD","nameLocation":"2639:35:87","nodeType":"VariableDeclaration","scope":20908,"src":"2615:66:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19171,"name":"uint256","nodeType":"ElementaryTypeName","src":"2615:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653138","id":19172,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2677:4:87","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"public"},{"constant":true,"documentation":{"id":19174,"nodeType":"StructuredDocumentation","src":"2686:98:87","text":" @dev Role identifier for the role allowed to supply isolated reserves as collateral"},"functionSelector":"2b0139fa","id":19179,"mutability":"constant","name":"ISOLATED_COLLATERAL_SUPPLIER_ROLE","nameLocation":"2811:33:87","nodeType":"VariableDeclaration","scope":20908,"src":"2787:105:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19175,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2787:7:87","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"49534f4c415445445f434f4c4c41544552414c5f535550504c494552","id":19177,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2861:30:87","typeDescriptions":{"typeIdentifier":"t_stringliteral_d1d2cf869016112a9af1107bcf43c3759daf22cf734aad47d0c9c726e33bc782","typeString":"literal_string \"ISOLATED_COLLATERAL_SUPPLIER\""},"value":"ISOLATED_COLLATERAL_SUPPLIER"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_d1d2cf869016112a9af1107bcf43c3759daf22cf734aad47d0c9c726e33bc782","typeString":"literal_string \"ISOLATED_COLLATERAL_SUPPLIER\""}],"id":19176,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2851:9:87","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":19178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2851:41:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"body":{"id":19276,"nodeType":"Block","src":"3203:709:87","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19192,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19188,"src":"3217:6:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":19193,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3227:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3217:11:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19195,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"3230:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_AMOUNT","nodeType":"MemberAccess","referencedDeclaration":12449,"src":"3230:21:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19191,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3209:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3209:43:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19198,"nodeType":"ExpressionStatement","src":"3209:43:87"},{"assignments":[19200,19202,null,null,19204],"declarations":[{"constant":false,"id":19200,"mutability":"mutable","name":"isActive","nameLocation":"3265:8:87","nodeType":"VariableDeclaration","scope":19276,"src":"3260:13:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19199,"name":"bool","nodeType":"ElementaryTypeName","src":"3260:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":19202,"mutability":"mutable","name":"isFrozen","nameLocation":"3280:8:87","nodeType":"VariableDeclaration","scope":19276,"src":"3275:13:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19201,"name":"bool","nodeType":"ElementaryTypeName","src":"3275:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null,null,{"constant":false,"id":19204,"mutability":"mutable","name":"isPaused","nameLocation":"3299:8:87","nodeType":"VariableDeclaration","scope":19276,"src":"3294:13:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19203,"name":"bool","nodeType":"ElementaryTypeName","src":"3294:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":19209,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":19205,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19183,"src":"3311:12:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19206,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"3311:40:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":19207,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":11757,"src":"3311:56:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":19208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3311:58:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"nodeType":"VariableDeclarationStatement","src":"3259:110:87"},{"expression":{"arguments":[{"id":19211,"name":"isActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19200,"src":"3383:8:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19212,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"3393:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_INACTIVE","nodeType":"MemberAccess","referencedDeclaration":12452,"src":"3393:23:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19210,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3375:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3375:42:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19215,"nodeType":"ExpressionStatement","src":"3375:42:87"},{"expression":{"arguments":[{"id":19218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3431:9:87","subExpression":{"id":19217,"name":"isPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19204,"src":"3432:8:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19219,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"3442:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_PAUSED","nodeType":"MemberAccess","referencedDeclaration":12458,"src":"3442:21:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19216,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3423:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19221,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3423:41:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19222,"nodeType":"ExpressionStatement","src":"3423:41:87"},{"expression":{"arguments":[{"id":19225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3478:9:87","subExpression":{"id":19224,"name":"isFrozen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19202,"src":"3479:8:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19226,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"3489:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_FROZEN","nodeType":"MemberAccess","referencedDeclaration":12455,"src":"3489:21:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19223,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3470:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3470:41:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19229,"nodeType":"ExpressionStatement","src":"3470:41:87"},{"assignments":[19231],"declarations":[{"constant":false,"id":19231,"mutability":"mutable","name":"supplyCap","nameLocation":"3526:9:87","nodeType":"VariableDeclaration","scope":19276,"src":"3518:17:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19230,"name":"uint256","nodeType":"ElementaryTypeName","src":"3518:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19236,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":19232,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19183,"src":"3538:12:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19233,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"3538:33:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":19234,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getSupplyCap","nodeType":"MemberAccess","referencedDeclaration":11439,"src":"3538:46:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":19235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3538:48:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3518:68:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19238,"name":"supplyCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19231,"src":"3607:9:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19239,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3620:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3607:14:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":19255,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19183,"src":"3746:12:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19256,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextLiquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21355,"src":"3746:31:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":19242,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19183,"src":"3643:12:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19243,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"3643:26:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19241,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3861,"src":"3635:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3861_$","typeString":"type(contract IAToken)"}},"id":19244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3635:35:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":19245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"scaledTotalSupply","nodeType":"MemberAccess","referencedDeclaration":5966,"src":"3635:53:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":19246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3635:55:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"expression":{"id":19249,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19186,"src":"3711:7:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":19250,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"accruedToTreasury","nodeType":"MemberAccess","referencedDeclaration":21310,"src":"3711:25:87","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":19248,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3703:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":19247,"name":"uint256","nodeType":"ElementaryTypeName","src":"3703:7:87","typeDescriptions":{}}},"id":19251,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3703:34:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3635:102:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19253,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3634:104:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"3634:111:87","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":19257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3634:144:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":19258,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19188,"src":"3781:6:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3634:153:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19260,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3633:155:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19261,"name":"supplyCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19231,"src":"3800:9:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":19262,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3813:2:87","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":19263,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19183,"src":"3819:12:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19264,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"3819:33:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":19265,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDecimals","nodeType":"MemberAccess","referencedDeclaration":10933,"src":"3819:45:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":19266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3819:47:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3813:53:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19268,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3812:55:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3800:67:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3633:234:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3607:260:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19272,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"3875:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"SUPPLY_CAP_EXCEEDED","nodeType":"MemberAccess","referencedDeclaration":12521,"src":"3875:26:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19237,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3592:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3592:315:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19275,"nodeType":"ExpressionStatement","src":"3592:315:87"}]},"documentation":{"id":19180,"nodeType":"StructuredDocumentation","src":"2897:150:87","text":" @notice Validates a supply action.\n @param reserveCache The cached data of the reserve\n @param amount The amount to be supplied"},"id":19277,"implemented":true,"kind":"function","modifiers":[],"name":"validateSupply","nameLocation":"3059:14:87","nodeType":"FunctionDefinition","parameters":{"id":19189,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19183,"mutability":"mutable","name":"reserveCache","nameLocation":"3109:12:87","nodeType":"VariableDeclaration","scope":19277,"src":"3079:42:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":19182,"nodeType":"UserDefinedTypeName","pathNode":{"id":19181,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"3079:22:87"},"referencedDeclaration":21379,"src":"3079:22:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"},{"constant":false,"id":19186,"mutability":"mutable","name":"reserve","nameLocation":"3157:7:87","nodeType":"VariableDeclaration","scope":19277,"src":"3127:37:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":19185,"nodeType":"UserDefinedTypeName","pathNode":{"id":19184,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"3127:21:87"},"referencedDeclaration":21315,"src":"3127:21:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":19188,"mutability":"mutable","name":"amount","nameLocation":"3178:6:87","nodeType":"VariableDeclaration","scope":19277,"src":"3170:14:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19187,"name":"uint256","nodeType":"ElementaryTypeName","src":"3170:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3073:115:87"},"returnParameters":{"id":19190,"nodeType":"ParameterList","parameters":[],"src":"3203:0:87"},"scope":20908,"src":"3050:862:87","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":19326,"nodeType":"Block","src":"4257:317:87","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19289,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19283,"src":"4271:6:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":19290,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4281:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4271:11:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19292,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"4284:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_AMOUNT","nodeType":"MemberAccess","referencedDeclaration":12449,"src":"4284:21:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19288,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4263:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4263:43:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19295,"nodeType":"ExpressionStatement","src":"4263:43:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19297,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19283,"src":"4320:6:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":19298,"name":"userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19285,"src":"4330:11:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4320:21:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19300,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"4343:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"NOT_ENOUGH_AVAILABLE_USER_BALANCE","nodeType":"MemberAccess","referencedDeclaration":12467,"src":"4343:40:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19296,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4312:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19302,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4312:72:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19303,"nodeType":"ExpressionStatement","src":"4312:72:87"},{"assignments":[19305,null,null,null,19307],"declarations":[{"constant":false,"id":19305,"mutability":"mutable","name":"isActive","nameLocation":"4397:8:87","nodeType":"VariableDeclaration","scope":19326,"src":"4392:13:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19304,"name":"bool","nodeType":"ElementaryTypeName","src":"4392:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null,null,null,{"constant":false,"id":19307,"mutability":"mutable","name":"isPaused","nameLocation":"4418:8:87","nodeType":"VariableDeclaration","scope":19326,"src":"4413:13:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19306,"name":"bool","nodeType":"ElementaryTypeName","src":"4413:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":19312,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":19308,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19281,"src":"4430:12:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19309,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"4430:33:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":19310,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":11757,"src":"4430:42:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":19311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4430:44:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"nodeType":"VariableDeclarationStatement","src":"4391:83:87"},{"expression":{"arguments":[{"id":19314,"name":"isActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19305,"src":"4488:8:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19315,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"4498:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_INACTIVE","nodeType":"MemberAccess","referencedDeclaration":12452,"src":"4498:23:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19313,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4480:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4480:42:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19318,"nodeType":"ExpressionStatement","src":"4480:42:87"},{"expression":{"arguments":[{"id":19321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4536:9:87","subExpression":{"id":19320,"name":"isPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19307,"src":"4537:8:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19322,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"4547:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_PAUSED","nodeType":"MemberAccess","referencedDeclaration":12458,"src":"4547:21:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19319,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4528:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4528:41:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19325,"nodeType":"ExpressionStatement","src":"4528:41:87"}]},"documentation":{"id":19278,"nodeType":"StructuredDocumentation","src":"3916:201:87","text":" @notice Validates a withdraw action.\n @param reserveCache The cached data of the reserve\n @param amount The amount to be withdrawn\n @param userBalance The balance of the user"},"id":19327,"implemented":true,"kind":"function","modifiers":[],"name":"validateWithdraw","nameLocation":"4129:16:87","nodeType":"FunctionDefinition","parameters":{"id":19286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19281,"mutability":"mutable","name":"reserveCache","nameLocation":"4181:12:87","nodeType":"VariableDeclaration","scope":19327,"src":"4151:42:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":19280,"nodeType":"UserDefinedTypeName","pathNode":{"id":19279,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"4151:22:87"},"referencedDeclaration":21379,"src":"4151:22:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"},{"constant":false,"id":19283,"mutability":"mutable","name":"amount","nameLocation":"4207:6:87","nodeType":"VariableDeclaration","scope":19327,"src":"4199:14:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19282,"name":"uint256","nodeType":"ElementaryTypeName","src":"4199:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19285,"mutability":"mutable","name":"userBalance","nameLocation":"4227:11:87","nodeType":"VariableDeclaration","scope":19327,"src":"4219:19:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19284,"name":"uint256","nodeType":"ElementaryTypeName","src":"4219:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4145:97:87"},"returnParameters":{"id":19287,"nodeType":"ParameterList","parameters":[],"src":"4257:0:87"},"scope":20908,"src":"4120:454:87","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"ValidationLogic.ValidateBorrowLocalVars","id":19368,"members":[{"constant":false,"id":19329,"mutability":"mutable","name":"currentLtv","nameLocation":"4623:10:87","nodeType":"VariableDeclaration","scope":19368,"src":"4615:18:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19328,"name":"uint256","nodeType":"ElementaryTypeName","src":"4615:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19331,"mutability":"mutable","name":"collateralNeededInBaseCurrency","nameLocation":"4647:30:87","nodeType":"VariableDeclaration","scope":19368,"src":"4639:38:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19330,"name":"uint256","nodeType":"ElementaryTypeName","src":"4639:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19333,"mutability":"mutable","name":"userCollateralInBaseCurrency","nameLocation":"4691:28:87","nodeType":"VariableDeclaration","scope":19368,"src":"4683:36:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19332,"name":"uint256","nodeType":"ElementaryTypeName","src":"4683:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19335,"mutability":"mutable","name":"userDebtInBaseCurrency","nameLocation":"4733:22:87","nodeType":"VariableDeclaration","scope":19368,"src":"4725:30:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19334,"name":"uint256","nodeType":"ElementaryTypeName","src":"4725:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19337,"mutability":"mutable","name":"availableLiquidity","nameLocation":"4769:18:87","nodeType":"VariableDeclaration","scope":19368,"src":"4761:26:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19336,"name":"uint256","nodeType":"ElementaryTypeName","src":"4761:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19339,"mutability":"mutable","name":"healthFactor","nameLocation":"4801:12:87","nodeType":"VariableDeclaration","scope":19368,"src":"4793:20:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19338,"name":"uint256","nodeType":"ElementaryTypeName","src":"4793:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19341,"mutability":"mutable","name":"totalDebt","nameLocation":"4827:9:87","nodeType":"VariableDeclaration","scope":19368,"src":"4819:17:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19340,"name":"uint256","nodeType":"ElementaryTypeName","src":"4819:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19343,"mutability":"mutable","name":"totalSupplyVariableDebt","nameLocation":"4850:23:87","nodeType":"VariableDeclaration","scope":19368,"src":"4842:31:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19342,"name":"uint256","nodeType":"ElementaryTypeName","src":"4842:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19345,"mutability":"mutable","name":"reserveDecimals","nameLocation":"4887:15:87","nodeType":"VariableDeclaration","scope":19368,"src":"4879:23:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19344,"name":"uint256","nodeType":"ElementaryTypeName","src":"4879:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19347,"mutability":"mutable","name":"borrowCap","nameLocation":"4916:9:87","nodeType":"VariableDeclaration","scope":19368,"src":"4908:17:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19346,"name":"uint256","nodeType":"ElementaryTypeName","src":"4908:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19349,"mutability":"mutable","name":"amountInBaseCurrency","nameLocation":"4939:20:87","nodeType":"VariableDeclaration","scope":19368,"src":"4931:28:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19348,"name":"uint256","nodeType":"ElementaryTypeName","src":"4931:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19351,"mutability":"mutable","name":"assetUnit","nameLocation":"4973:9:87","nodeType":"VariableDeclaration","scope":19368,"src":"4965:17:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19350,"name":"uint256","nodeType":"ElementaryTypeName","src":"4965:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19353,"mutability":"mutable","name":"eModePriceSource","nameLocation":"4996:16:87","nodeType":"VariableDeclaration","scope":19368,"src":"4988:24:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19352,"name":"address","nodeType":"ElementaryTypeName","src":"4988:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19355,"mutability":"mutable","name":"siloedBorrowingAddress","nameLocation":"5026:22:87","nodeType":"VariableDeclaration","scope":19368,"src":"5018:30:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19354,"name":"address","nodeType":"ElementaryTypeName","src":"5018:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19357,"mutability":"mutable","name":"isActive","nameLocation":"5059:8:87","nodeType":"VariableDeclaration","scope":19368,"src":"5054:13:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19356,"name":"bool","nodeType":"ElementaryTypeName","src":"5054:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":19359,"mutability":"mutable","name":"isFrozen","nameLocation":"5078:8:87","nodeType":"VariableDeclaration","scope":19368,"src":"5073:13:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19358,"name":"bool","nodeType":"ElementaryTypeName","src":"5073:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":19361,"mutability":"mutable","name":"isPaused","nameLocation":"5097:8:87","nodeType":"VariableDeclaration","scope":19368,"src":"5092:13:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19360,"name":"bool","nodeType":"ElementaryTypeName","src":"5092:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":19363,"mutability":"mutable","name":"borrowingEnabled","nameLocation":"5116:16:87","nodeType":"VariableDeclaration","scope":19368,"src":"5111:21:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19362,"name":"bool","nodeType":"ElementaryTypeName","src":"5111:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":19365,"mutability":"mutable","name":"stableRateBorrowingEnabled","nameLocation":"5143:26:87","nodeType":"VariableDeclaration","scope":19368,"src":"5138:31:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19364,"name":"bool","nodeType":"ElementaryTypeName","src":"5138:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":19367,"mutability":"mutable","name":"siloedBorrowingEnabled","nameLocation":"5180:22:87","nodeType":"VariableDeclaration","scope":19368,"src":"5175:27:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19366,"name":"bool","nodeType":"ElementaryTypeName","src":"5175:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"ValidateBorrowLocalVars","nameLocation":"4585:23:87","nodeType":"StructDefinition","scope":20908,"src":"4578:629:87","visibility":"public"},{"body":{"id":19882,"nodeType":"Block","src":"5816:6067:87","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19390,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"5830:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19391,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21568,"src":"5830:13:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":19392,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5847:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5830:18:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19394,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"5850:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_AMOUNT","nodeType":"MemberAccess","referencedDeclaration":12449,"src":"5850:21:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19389,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5822:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19396,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5822:50:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19397,"nodeType":"ExpressionStatement","src":"5822:50:87"},{"assignments":[19400],"declarations":[{"constant":false,"id":19400,"mutability":"mutable","name":"vars","nameLocation":"5910:4:87","nodeType":"VariableDeclaration","scope":19882,"src":"5879:35:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars"},"typeName":{"id":19399,"nodeType":"UserDefinedTypeName","pathNode":{"id":19398,"name":"ValidateBorrowLocalVars","nodeType":"IdentifierPath","referencedDeclaration":19368,"src":"5879:23:87"},"referencedDeclaration":19368,"src":"5879:23:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_storage_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars"}},"visibility":"internal"}],"id":19401,"nodeType":"VariableDeclarationStatement","src":"5879:35:87"},{"expression":{"id":19419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":19402,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"5929:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19404,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":19357,"src":"5929:13:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19405,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"5950:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19406,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"isFrozen","nodeType":"MemberAccess","referencedDeclaration":19359,"src":"5950:13:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19407,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"5971:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19408,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"borrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":19363,"src":"5971:21:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19409,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"6000:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19410,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"stableRateBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":19365,"src":"6000:31:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19411,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"6039:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19412,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"isPaused","nodeType":"MemberAccess","referencedDeclaration":19361,"src":"6039:13:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":19413,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"5921:137:87","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"expression":{"id":19414,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"6061:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19415,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveCache","nodeType":"MemberAccess","referencedDeclaration":21559,"src":"6061:19:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19416,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"6061:40:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":19417,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":11757,"src":"6061:49:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":19418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6061:51:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"src":"5921:191:87","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19420,"nodeType":"ExpressionStatement","src":"5921:191:87"},{"expression":{"arguments":[{"expression":{"id":19422,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"6127:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19423,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":19357,"src":"6127:13:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19424,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"6142:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_INACTIVE","nodeType":"MemberAccess","referencedDeclaration":12452,"src":"6142:23:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19421,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6119:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19426,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6119:47:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19427,"nodeType":"ExpressionStatement","src":"6119:47:87"},{"expression":{"arguments":[{"id":19431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6180:14:87","subExpression":{"expression":{"id":19429,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"6181:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19430,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isPaused","nodeType":"MemberAccess","referencedDeclaration":19361,"src":"6181:13:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19432,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"6196:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_PAUSED","nodeType":"MemberAccess","referencedDeclaration":12458,"src":"6196:21:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19428,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6172:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6172:46:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19435,"nodeType":"ExpressionStatement","src":"6172:46:87"},{"expression":{"arguments":[{"id":19439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6232:14:87","subExpression":{"expression":{"id":19437,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"6233:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19438,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isFrozen","nodeType":"MemberAccess","referencedDeclaration":19359,"src":"6233:13:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19440,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"6248:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_FROZEN","nodeType":"MemberAccess","referencedDeclaration":12455,"src":"6248:21:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19436,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6224:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6224:46:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19443,"nodeType":"ExpressionStatement","src":"6224:46:87"},{"expression":{"arguments":[{"expression":{"id":19445,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"6284:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19446,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"borrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":19363,"src":"6284:21:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19447,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"6307:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"BORROWING_NOT_ENABLED","nodeType":"MemberAccess","referencedDeclaration":12461,"src":"6307:28:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19444,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6276:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19449,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6276:60:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19450,"nodeType":"ExpressionStatement","src":"6276:60:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19452,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"6358:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19453,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"priceOracleSentinel","nodeType":"MemberAccess","referencedDeclaration":21581,"src":"6358:26:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":19456,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6396:1:87","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":19455,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6388:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19454,"name":"address","nodeType":"ElementaryTypeName","src":"6388:7:87","typeDescriptions":{}}},"id":19457,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6388:10:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6358:40:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":19460,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"6431:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19461,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"priceOracleSentinel","nodeType":"MemberAccess","referencedDeclaration":21581,"src":"6431:26:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19459,"name":"IPriceOracleSentinel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5894,"src":"6410:20:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPriceOracleSentinel_$5894_$","typeString":"type(contract IPriceOracleSentinel)"}},"id":19462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6410:48:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleSentinel_$5894","typeString":"contract IPriceOracleSentinel"}},"id":19463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isBorrowAllowed","nodeType":"MemberAccess","referencedDeclaration":5863,"src":"6410:64:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bool_$","typeString":"function () view external returns (bool)"}},"id":19464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6410:66:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6358:118:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19466,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"6484:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PRICE_ORACLE_SENTINEL_CHECK_FAILED","nodeType":"MemberAccess","referencedDeclaration":12545,"src":"6484:41:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19451,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6343:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6343:188:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19469,"nodeType":"ExpressionStatement","src":"6343:188:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"id":19476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19471,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"6587:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19472,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateMode","nodeType":"MemberAccess","referencedDeclaration":21571,"src":"6587:23:87","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":19473,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"6614:9:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":19474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"6614:26:87","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":19475,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"VARIABLE","nodeType":"MemberAccess","referencedDeclaration":21336,"src":"6614:35:87","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"src":"6587:62:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"id":19482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19477,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"6661:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19478,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateMode","nodeType":"MemberAccess","referencedDeclaration":21571,"src":"6661:23:87","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":19479,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"6688:9:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":19480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"6688:26:87","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":19481,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"STABLE","nodeType":"MemberAccess","referencedDeclaration":21335,"src":"6688:33:87","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"src":"6661:60:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6587:134:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19484,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"6729:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_INTEREST_RATE_MODE_SELECTED","nodeType":"MemberAccess","referencedDeclaration":12470,"src":"6729:42:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19470,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6572:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19486,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6572:205:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19487,"nodeType":"ExpressionStatement","src":"6572:205:87"},{"expression":{"id":19496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19488,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"6784:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19490,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"reserveDecimals","nodeType":"MemberAccess","referencedDeclaration":19345,"src":"6784:20:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"expression":{"id":19491,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"6807:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19492,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveCache","nodeType":"MemberAccess","referencedDeclaration":21559,"src":"6807:19:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19493,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"6807:40:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":19494,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDecimals","nodeType":"MemberAccess","referencedDeclaration":10933,"src":"6807:52:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":19495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6807:54:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6784:77:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19497,"nodeType":"ExpressionStatement","src":"6784:77:87"},{"expression":{"id":19506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19498,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"6867:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19500,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"borrowCap","nodeType":"MemberAccess","referencedDeclaration":19347,"src":"6867:14:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"expression":{"id":19501,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"6884:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19502,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveCache","nodeType":"MemberAccess","referencedDeclaration":21559,"src":"6884:19:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19503,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"6884:40:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":19504,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getBorrowCap","nodeType":"MemberAccess","referencedDeclaration":11387,"src":"6884:53:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":19505,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6884:55:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6867:72:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19507,"nodeType":"ExpressionStatement","src":"6867:72:87"},{"id":19517,"nodeType":"UncheckedBlock","src":"6945:68:87","statements":[{"expression":{"id":19515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19508,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"6963:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19510,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"assetUnit","nodeType":"MemberAccess","referencedDeclaration":19351,"src":"6963:14:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":19511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6980:2:87","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"expression":{"id":19512,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"6986:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19513,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveDecimals","nodeType":"MemberAccess","referencedDeclaration":19345,"src":"6986:20:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6980:26:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6963:43:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19516,"nodeType":"ExpressionStatement","src":"6963:43:87"}]},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19518,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"7023:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19519,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"borrowCap","nodeType":"MemberAccess","referencedDeclaration":19347,"src":"7023:14:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":19520,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7041:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7023:19:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19564,"nodeType":"IfStatement","src":"7019:440:87","trueBody":{"id":19563,"nodeType":"Block","src":"7044:415:87","statements":[{"expression":{"id":19533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19522,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"7052:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19524,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalSupplyVariableDebt","nodeType":"MemberAccess","referencedDeclaration":19343,"src":"7052:28:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":19529,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"7142:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19530,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveCache","nodeType":"MemberAccess","referencedDeclaration":21559,"src":"7142:19:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19531,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextVariableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":21359,"src":"7142:43:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"expression":{"id":19525,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"7083:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19526,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveCache","nodeType":"MemberAccess","referencedDeclaration":21559,"src":"7083:19:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19527,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":21339,"src":"7083:42:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"7083:49:87","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":19532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7083:110:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7052:141:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19534,"nodeType":"ExpressionStatement","src":"7052:141:87"},{"expression":{"id":19547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19535,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"7202:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19537,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalDebt","nodeType":"MemberAccess","referencedDeclaration":19341,"src":"7202:14:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":19538,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"7227:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19539,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveCache","nodeType":"MemberAccess","referencedDeclaration":21559,"src":"7227:19:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19540,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currTotalStableDebt","nodeType":"MemberAccess","referencedDeclaration":21347,"src":"7227:39:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":19541,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"7277:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19542,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalSupplyVariableDebt","nodeType":"MemberAccess","referencedDeclaration":19343,"src":"7277:28:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7227:78:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":19544,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"7316:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19545,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21568,"src":"7316:13:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7227:102:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7202:127:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19548,"nodeType":"ExpressionStatement","src":"7202:127:87"},{"id":19562,"nodeType":"UncheckedBlock","src":"7338:115:87","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19550,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"7366:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19551,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalDebt","nodeType":"MemberAccess","referencedDeclaration":19341,"src":"7366:14:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19552,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"7384:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19553,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"borrowCap","nodeType":"MemberAccess","referencedDeclaration":19347,"src":"7384:14:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":19554,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"7401:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19555,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assetUnit","nodeType":"MemberAccess","referencedDeclaration":19351,"src":"7401:14:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7384:31:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7366:49:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19558,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"7417:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"BORROW_CAP_EXCEEDED","nodeType":"MemberAccess","referencedDeclaration":12518,"src":"7417:26:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19549,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7358:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7358:86:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19561,"nodeType":"ExpressionStatement","src":"7358:86:87"}]}]}},{"condition":{"expression":{"id":19565,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"7469:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19566,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isolationModeActive","nodeType":"MemberAccess","referencedDeclaration":21583,"src":"7469:26:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19606,"nodeType":"IfStatement","src":"7465:676:87","trueBody":{"id":19605,"nodeType":"Block","src":"7497:644:87","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"expression":{"id":19568,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"7677:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19569,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveCache","nodeType":"MemberAccess","referencedDeclaration":21559,"src":"7677:19:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19570,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"7677:40:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":19571,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getBorrowableInIsolation","nodeType":"MemberAccess","referencedDeclaration":11133,"src":"7677:65:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":19572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7677:67:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19573,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"7754:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ASSET_NOT_BORROWABLE_IN_ISOLATION","nodeType":"MemberAccess","referencedDeclaration":12548,"src":"7754:40:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19567,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7660:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7660:142:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19576,"nodeType":"ExpressionStatement","src":"7660:142:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":19597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":19578,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19374,"src":"7828:12:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":19581,"indexExpression":{"expression":{"id":19579,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"7841:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19580,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isolationModeCollateralAddress","nodeType":"MemberAccess","referencedDeclaration":21585,"src":"7841:37:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7828:51:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":19582,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isolationModeTotalDebt","nodeType":"MemberAccess","referencedDeclaration":21314,"src":"7828:74:87","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19583,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"7916:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19584,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21568,"src":"7916:13:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":19585,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7944:2:87","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19586,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"7951:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19587,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveDecimals","nodeType":"MemberAccess","referencedDeclaration":19345,"src":"7951:20:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":19588,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11857,"src":"7974:20:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReserveConfiguration_$11857_$","typeString":"type(library ReserveConfiguration)"}},"id":19589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"DEBT_CEILING_DECIMALS","nodeType":"MemberAccess","referencedDeclaration":10728,"src":"7974:42:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7951:65:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19591,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7950:67:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7944:73:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7916:101:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19594,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7915:103:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"7915:126:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":19596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7915:128:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"7828:215:87","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":19598,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"8057:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19599,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isolationModeDebtCeiling","nodeType":"MemberAccess","referencedDeclaration":21587,"src":"8057:31:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7828:260:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19601,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"8098:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"DEBT_CEILING_EXCEEDED","nodeType":"MemberAccess","referencedDeclaration":12527,"src":"8098:28:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19577,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7811:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7811:323:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19604,"nodeType":"ExpressionStatement","src":"7811:323:87"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":19610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19607,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"8151:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19608,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":21579,"src":"8151:24:87","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":19609,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8179:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8151:29:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19635,"nodeType":"IfStatement","src":"8147:291:87","trueBody":{"id":19634,"nodeType":"Block","src":"8182:256:87","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"expression":{"id":19612,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"8207:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19613,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveCache","nodeType":"MemberAccess","referencedDeclaration":21559,"src":"8207:19:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19614,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"8207:40:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":19615,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getEModeCategory","nodeType":"MemberAccess","referencedDeclaration":11647,"src":"8207:57:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":19616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8207:59:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":19617,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"8270:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19618,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":21579,"src":"8270:24:87","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"8207:87:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19620,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"8304:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INCONSISTENT_EMODE_CATEGORY","nodeType":"MemberAccess","referencedDeclaration":12542,"src":"8304:34:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19611,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8190:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8190:156:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19623,"nodeType":"ExpressionStatement","src":"8190:156:87"},{"expression":{"id":19632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19624,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"8354:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19626,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"eModePriceSource","nodeType":"MemberAccess","referencedDeclaration":19353,"src":"8354:21:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":19627,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19383,"src":"8378:15:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},"id":19630,"indexExpression":{"expression":{"id":19628,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"8394:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19629,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":21579,"src":"8394:24:87","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8378:41:87","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage","typeString":"struct DataTypes.EModeCategory storage ref"}},"id":19631,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"priceSource","nodeType":"MemberAccess","referencedDeclaration":21330,"src":"8378:53:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8354:77:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19633,"nodeType":"ExpressionStatement","src":"8354:77:87"}]}},{"expression":{"id":19665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":19636,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"8452:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19638,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userCollateralInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":19333,"src":"8452:33:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19639,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"8493:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19640,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userDebtInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":19335,"src":"8493:27:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19641,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"8528:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19642,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentLtv","nodeType":"MemberAccess","referencedDeclaration":19329,"src":"8528:15:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null,{"expression":{"id":19643,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"8559:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19644,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"healthFactor","nodeType":"MemberAccess","referencedDeclaration":19339,"src":"8559:17:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null],"id":19645,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"8444:140:87","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$__$_t_uint256_$__$","typeString":"tuple(uint256,uint256,uint256,,uint256,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":19648,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19374,"src":"8632:12:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":19649,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19378,"src":"8652:12:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":19650,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19383,"src":"8672:15:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"arguments":[{"expression":{"id":19653,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"8758:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19654,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userConfig","nodeType":"MemberAccess","referencedDeclaration":21562,"src":"8758:17:87","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},{"expression":{"id":19655,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"8800:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19656,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reservesCount","nodeType":"MemberAccess","referencedDeclaration":21575,"src":"8800:20:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19657,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"8836:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19658,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userAddress","nodeType":"MemberAccess","referencedDeclaration":21566,"src":"8836:18:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19659,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"8872:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19660,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"oracle","nodeType":"MemberAccess","referencedDeclaration":21577,"src":"8872:13:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19661,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"8914:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19662,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userEModeCategory","nodeType":"MemberAccess","referencedDeclaration":21579,"src":"8914:24:87","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":19651,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"8695:9:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":19652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CalculateUserAccountDataParams","nodeType":"MemberAccess","referencedDeclaration":21556,"src":"8695:40:87","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_CalculateUserAccountDataParams_$21556_storage_ptr_$","typeString":"type(struct DataTypes.CalculateUserAccountDataParams storage pointer)"}},"id":19663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["userConfig","reservesCount","user","oracle","userEModeCategory"],"nodeType":"FunctionCall","src":"8695:252:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}],"expression":{"id":19646,"name":"GenericLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15855,"src":"8587:12:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GenericLogic_$15855_$","typeString":"type(library GenericLogic)"}},"id":19647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateUserAccountData","nodeType":"MemberAccess","referencedDeclaration":15713,"src":"8587:37:87","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_$_t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.CalculateUserAccountDataParams memory) view returns (uint256,uint256,uint256,uint256,uint256,bool)"}},"id":19664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8587:366:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,bool)"}},"src":"8444:509:87","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19666,"nodeType":"ExpressionStatement","src":"8444:509:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19668,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"8968:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19669,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userCollateralInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":19333,"src":"8968:33:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":19670,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9005:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8968:38:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19672,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"9008:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"COLLATERAL_BALANCE_IS_ZERO","nodeType":"MemberAccess","referencedDeclaration":12473,"src":"9008:33:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19667,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8960:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8960:82:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19675,"nodeType":"ExpressionStatement","src":"8960:82:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19677,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"9056:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19678,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentLtv","nodeType":"MemberAccess","referencedDeclaration":19329,"src":"9056:15:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":19679,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9075:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9056:20:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19681,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"9078:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"LTV_VALIDATION_FAILED","nodeType":"MemberAccess","referencedDeclaration":12539,"src":"9078:28:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19676,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9048:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9048:59:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19684,"nodeType":"ExpressionStatement","src":"9048:59:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19686,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"9129:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19687,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"healthFactor","nodeType":"MemberAccess","referencedDeclaration":19339,"src":"9129:17:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":19688,"name":"HEALTH_FACTOR_LIQUIDATION_THRESHOLD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19173,"src":"9149:35:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9129:55:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19690,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"9192:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD","nodeType":"MemberAccess","referencedDeclaration":12476,"src":"9192:53:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19685,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9114:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19692,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9114:137:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19693,"nodeType":"ExpressionStatement","src":"9114:137:87"},{"expression":{"id":19718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19694,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"9258:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19696,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"amountInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":19349,"src":"9258:25:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19702,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"9349:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19703,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"eModePriceSource","nodeType":"MemberAccess","referencedDeclaration":19353,"src":"9349:21:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":19706,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9382:1:87","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":19705,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9374:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19704,"name":"address","nodeType":"ElementaryTypeName","src":"9374:7:87","typeDescriptions":{}}},"id":19707,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9374:10:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9349:35:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":19711,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"9411:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19712,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21564,"src":"9411:12:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"9349:74:87","trueExpression":{"expression":{"id":19709,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"9387:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19710,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"eModePriceSource","nodeType":"MemberAccess","referencedDeclaration":19353,"src":"9387:21:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":19698,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"9311:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19699,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"oracle","nodeType":"MemberAccess","referencedDeclaration":21577,"src":"9311:13:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19697,"name":"IPriceOracleGetter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5835,"src":"9292:18:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPriceOracleGetter_$5835_$","typeString":"type(contract IPriceOracleGetter)"}},"id":19700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9292:33:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"}},"id":19701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getAssetPrice","nodeType":"MemberAccess","referencedDeclaration":5834,"src":"9292:47:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":19714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9292:139:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":19715,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"9440:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19716,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21568,"src":"9440:13:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9292:161:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9258:195:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19719,"nodeType":"ExpressionStatement","src":"9258:195:87"},{"id":19727,"nodeType":"UncheckedBlock","src":"9459:68:87","statements":[{"expression":{"id":19725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19720,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"9477:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19722,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"amountInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":19349,"src":"9477:25:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"expression":{"id":19723,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"9506:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19724,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"assetUnit","nodeType":"MemberAccess","referencedDeclaration":19351,"src":"9506:14:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9477:43:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19726,"nodeType":"ExpressionStatement","src":"9477:43:87"}]},{"expression":{"id":19741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19728,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"9645:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19730,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"collateralNeededInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":19331,"src":"9645:35:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":19738,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"9759:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19739,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentLtv","nodeType":"MemberAccess","referencedDeclaration":19329,"src":"9759:15:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19731,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"9684:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19732,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userDebtInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":19335,"src":"9684:27:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":19733,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"9714:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19734,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amountInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":19349,"src":"9714:25:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9684:55:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19736,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9683:57:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentDiv","nodeType":"MemberAccess","referencedDeclaration":21131,"src":"9683:75:87","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":19740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9683:92:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9645:130:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19742,"nodeType":"ExpressionStatement","src":"9645:130:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19744,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"9831:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19745,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralNeededInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":19331,"src":"9831:35:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":19746,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"9870:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19747,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userCollateralInBaseCurrency","nodeType":"MemberAccess","referencedDeclaration":19333,"src":"9870:33:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9831:72:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19749,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"9911:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"COLLATERAL_CANNOT_COVER_NEW_BORROW","nodeType":"MemberAccess","referencedDeclaration":12479,"src":"9911:41:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19743,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9816:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9816:142:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19752,"nodeType":"ExpressionStatement","src":"9816:142:87"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"id":19758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19753,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"10365:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19754,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateMode","nodeType":"MemberAccess","referencedDeclaration":21571,"src":"10365:23:87","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":19755,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"10392:9:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":19756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"10392:26:87","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":19757,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"STABLE","nodeType":"MemberAccess","referencedDeclaration":21335,"src":"10392:33:87","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"src":"10365:60:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"documentation":" Following conditions need to be met if the user is borrowing at a stable rate:\n 1. Reserve must be enabled for stable rate borrowing\n 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\n    they are borrowing, to prevent abuses.\n 3. Users will be able to borrow only a portion of the total available liquidity","id":19835,"nodeType":"IfStatement","src":"10361:1001:87","trueBody":{"id":19834,"nodeType":"Block","src":"10427:935:87","statements":[{"expression":{"arguments":[{"expression":{"id":19760,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"10543:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19761,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableRateBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":19365,"src":"10543:31:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19762,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"10576:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"STABLE_BORROWING_NOT_ENABLED","nodeType":"MemberAccess","referencedDeclaration":12464,"src":"10576:35:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19759,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10535:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10535:77:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19765,"nodeType":"ExpressionStatement","src":"10535:77:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"10638:69:87","subExpression":{"arguments":[{"expression":{"baseExpression":{"id":19770,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19374,"src":"10677:12:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":19773,"indexExpression":{"expression":{"id":19771,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"10690:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19772,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21564,"src":"10690:12:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10677:26:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":19774,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"10677:29:87","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"expression":{"id":19767,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"10639:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19768,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userConfig","nodeType":"MemberAccess","referencedDeclaration":21562,"src":"10639:17:87","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":19769,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":12083,"src":"10639:37:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (bool)"}},"id":19775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10639:68:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"expression":{"id":19777,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"10721:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19778,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveCache","nodeType":"MemberAccess","referencedDeclaration":21559,"src":"10721:19:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19779,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"10721:40:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":19780,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLtv","nodeType":"MemberAccess","referencedDeclaration":10777,"src":"10721:47:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":19781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10721:49:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19782,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10774:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10721:54:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10638:137:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19785,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"10789:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19786,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21568,"src":"10789:13:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"expression":{"id":19793,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"10857:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19794,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userAddress","nodeType":"MemberAccess","referencedDeclaration":21566,"src":"10857:18:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"expression":{"id":19788,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"10812:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19789,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveCache","nodeType":"MemberAccess","referencedDeclaration":21559,"src":"10812:19:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19790,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"10812:33:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19787,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"10805:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":19791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10805:41:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":19792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"10805:51:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":19795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10805:71:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10789:87:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10638:238:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19798,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"10886:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"COLLATERAL_SAME_AS_BORROWING_CURRENCY","nodeType":"MemberAccess","referencedDeclaration":12482,"src":"10886:44:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19766,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"10621:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10621:317:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19801,"nodeType":"ExpressionStatement","src":"10621:317:87"},{"expression":{"id":19814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19802,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"10947:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19804,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"availableLiquidity","nodeType":"MemberAccess","referencedDeclaration":19337,"src":"10947:23:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":19810,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"11004:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19811,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveCache","nodeType":"MemberAccess","referencedDeclaration":21559,"src":"11004:19:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19812,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"11004:33:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":19806,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"10980:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19807,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21564,"src":"10980:12:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19805,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"10973:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":19808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10973:20:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":19809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"10973:30:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":19813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10973:65:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10947:91:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19815,"nodeType":"ExpressionStatement","src":"10947:91:87"},{"assignments":[19817],"declarations":[{"constant":false,"id":19817,"mutability":"mutable","name":"maxLoanSizeStable","nameLocation":"11172:17:87","nodeType":"VariableDeclaration","scope":19834,"src":"11164:25:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19816,"name":"uint256","nodeType":"ElementaryTypeName","src":"11164:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19824,"initialValue":{"arguments":[{"expression":{"id":19821,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"11227:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19822,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"maxStableLoanPercent","nodeType":"MemberAccess","referencedDeclaration":21573,"src":"11227:27:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":19818,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"11192:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19819,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"availableLiquidity","nodeType":"MemberAccess","referencedDeclaration":19337,"src":"11192:23:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":21119,"src":"11192:34:87","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":19823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11192:63:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11164:91:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19826,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"11272:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19827,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":21568,"src":"11272:13:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":19828,"name":"maxLoanSizeStable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19817,"src":"11289:17:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11272:34:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19830,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"11308:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE","nodeType":"MemberAccess","referencedDeclaration":12485,"src":"11308:46:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19825,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11264:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19832,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11264:91:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19833,"nodeType":"ExpressionStatement","src":"11264:91:87"}]}},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":19836,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"11372:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19837,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userConfig","nodeType":"MemberAccess","referencedDeclaration":21562,"src":"11372:17:87","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":19838,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isBorrowingAny","nodeType":"MemberAccess","referencedDeclaration":12179,"src":"11372:32:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory) pure returns (bool)"}},"id":19839,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11372:34:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19881,"nodeType":"IfStatement","src":"11368:511:87","trueBody":{"id":19880,"nodeType":"Block","src":"11408:471:87","statements":[{"expression":{"id":19852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":19840,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"11417:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19842,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"siloedBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":19367,"src":"11417:27:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19843,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"11446:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19844,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"siloedBorrowingAddress","nodeType":"MemberAccess","referencedDeclaration":19355,"src":"11446:27:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":19845,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"11416:58:87","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$","typeString":"tuple(bool,address)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":19849,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19374,"src":"11537:12:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":19850,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19378,"src":"11551:12:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}],"expression":{"expression":{"id":19846,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"11477:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19847,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userConfig","nodeType":"MemberAccess","referencedDeclaration":21562,"src":"11477:26:87","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":19848,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getSiloedBorrowingState","nodeType":"MemberAccess","referencedDeclaration":12320,"src":"11477:59:87","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$returns$_t_bool_$_t_address_$bound_to$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address)) view returns (bool,address)"}},"id":19851,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11477:87:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$","typeString":"tuple(bool,address)"}},"src":"11416:148:87","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19853,"nodeType":"ExpressionStatement","src":"11416:148:87"},{"condition":{"expression":{"id":19854,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"11577:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19855,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"siloedBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":19367,"src":"11577:27:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":19878,"nodeType":"Block","src":"11718:155:87","statements":[{"expression":{"arguments":[{"id":19873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"11747:62:87","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"expression":{"id":19868,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"11748:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19869,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveCache","nodeType":"MemberAccess","referencedDeclaration":21559,"src":"11748:19:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19870,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"11748:40:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":19871,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getSiloedBorrowing","nodeType":"MemberAccess","referencedDeclaration":11183,"src":"11748:59:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":19872,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11748:61:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19874,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"11821:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"SILOED_BORROWING_VIOLATION","nodeType":"MemberAccess","referencedDeclaration":12635,"src":"11821:33:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19867,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11728:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11728:136:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19877,"nodeType":"ExpressionStatement","src":"11728:136:87"}]},"id":19879,"nodeType":"IfStatement","src":"11573:300:87","trueBody":{"id":19866,"nodeType":"Block","src":"11606:106:87","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19857,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19400,"src":"11624:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowLocalVars_$19368_memory_ptr","typeString":"struct ValidationLogic.ValidateBorrowLocalVars memory"}},"id":19858,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"siloedBorrowingAddress","nodeType":"MemberAccess","referencedDeclaration":19355,"src":"11624:27:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":19859,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19386,"src":"11655:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams memory"}},"id":19860,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":21564,"src":"11655:12:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11624:43:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19862,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"11669:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"SILOED_BORROWING_VIOLATION","nodeType":"MemberAccess","referencedDeclaration":12635,"src":"11669:33:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19856,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11616:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11616:87:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19865,"nodeType":"ExpressionStatement","src":"11616:87:87"}]}}]}}]},"documentation":{"id":19369,"nodeType":"StructuredDocumentation","src":"5211:317:87","text":" @notice Validates a borrow action.\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param eModeCategories The configuration of all the efficiency mode categories\n @param params Additional params needed for the validation"},"id":19883,"implemented":true,"kind":"function","modifiers":[],"name":"validateBorrow","nameLocation":"5540:14:87","nodeType":"FunctionDefinition","parameters":{"id":19387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19374,"mutability":"mutable","name":"reservesData","nameLocation":"5610:12:87","nodeType":"VariableDeclaration","scope":19883,"src":"5560:62:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":19373,"keyType":{"id":19370,"name":"address","nodeType":"ElementaryTypeName","src":"5568:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5560:41:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":19372,"nodeType":"UserDefinedTypeName","pathNode":{"id":19371,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"5579:21:87"},"referencedDeclaration":21315,"src":"5579:21:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":19378,"mutability":"mutable","name":"reservesList","nameLocation":"5664:12:87","nodeType":"VariableDeclaration","scope":19883,"src":"5628:48:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":19377,"keyType":{"id":19375,"name":"uint256","nodeType":"ElementaryTypeName","src":"5636:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"5628:27:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":19376,"name":"address","nodeType":"ElementaryTypeName","src":"5647:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":19383,"mutability":"mutable","name":"eModeCategories","nameLocation":"5732:15:87","nodeType":"VariableDeclaration","scope":19883,"src":"5682:65:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":19382,"keyType":{"id":19379,"name":"uint8","nodeType":"ElementaryTypeName","src":"5690:5:87","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"5682:41:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":19381,"nodeType":"UserDefinedTypeName","pathNode":{"id":19380,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":21333,"src":"5699:23:87"},"referencedDeclaration":21333,"src":"5699:23:87","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":19386,"mutability":"mutable","name":"params","nameLocation":"5791:6:87","nodeType":"VariableDeclaration","scope":19883,"src":"5753:44:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_memory_ptr","typeString":"struct DataTypes.ValidateBorrowParams"},"typeName":{"id":19385,"nodeType":"UserDefinedTypeName","pathNode":{"id":19384,"name":"DataTypes.ValidateBorrowParams","nodeType":"IdentifierPath","referencedDeclaration":21588,"src":"5753:30:87"},"referencedDeclaration":21588,"src":"5753:30:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateBorrowParams_$21588_storage_ptr","typeString":"struct DataTypes.ValidateBorrowParams"}},"visibility":"internal"}],"src":"5554:247:87"},"returnParameters":{"id":19388,"nodeType":"ParameterList","parameters":[],"src":"5816:0:87"},"scope":20908,"src":"5531:6352:87","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":19974,"nodeType":"Block","src":"12584:612:87","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19902,"name":"amountSent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19889,"src":"12598:10:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":19903,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12612:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12598:15:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19905,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"12615:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_AMOUNT","nodeType":"MemberAccess","referencedDeclaration":12449,"src":"12615:21:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19901,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12590:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12590:47:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19908,"nodeType":"ExpressionStatement","src":"12590:47:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19910,"name":"amountSent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19889,"src":"12658:10:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"arguments":[{"id":19913,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12677:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":19912,"name":"uint256","nodeType":"ElementaryTypeName","src":"12677:7:87","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":19911,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12672:4:87","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":19914,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12672:13:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":19915,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"12672:17:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12658:31:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19920,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19917,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12693:3:87","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"12693:10:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":19919,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19894,"src":"12707:10:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12693:24:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12658:59:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19922,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"12725:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF","nodeType":"MemberAccess","referencedDeclaration":12491,"src":"12725:44:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19909,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12643:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12643:132:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19925,"nodeType":"ExpressionStatement","src":"12643:132:87"},{"assignments":[19927,null,null,null,19929],"declarations":[{"constant":false,"id":19927,"mutability":"mutable","name":"isActive","nameLocation":"12788:8:87","nodeType":"VariableDeclaration","scope":19974,"src":"12783:13:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19926,"name":"bool","nodeType":"ElementaryTypeName","src":"12783:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null,null,null,{"constant":false,"id":19929,"mutability":"mutable","name":"isPaused","nameLocation":"12809:8:87","nodeType":"VariableDeclaration","scope":19974,"src":"12804:13:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19928,"name":"bool","nodeType":"ElementaryTypeName","src":"12804:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":19934,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":19930,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19887,"src":"12821:12:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":19931,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"12821:33:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":19932,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":11757,"src":"12821:42:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":19933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12821:44:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"nodeType":"VariableDeclarationStatement","src":"12782:83:87"},{"expression":{"arguments":[{"id":19936,"name":"isActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19927,"src":"12879:8:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19937,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"12889:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_INACTIVE","nodeType":"MemberAccess","referencedDeclaration":12452,"src":"12889:23:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19935,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12871:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12871:42:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19940,"nodeType":"ExpressionStatement","src":"12871:42:87"},{"expression":{"arguments":[{"id":19943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"12927:9:87","subExpression":{"id":19942,"name":"isPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19929,"src":"12928:8:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19944,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"12938:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_PAUSED","nodeType":"MemberAccess","referencedDeclaration":12458,"src":"12938:21:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19941,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12919:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19946,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12919:41:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19947,"nodeType":"ExpressionStatement","src":"12919:41:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19949,"name":"stableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19896,"src":"12983:10:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":19950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12997:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12983:15:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"id":19956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19952,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19892,"src":"13002:16:87","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":19953,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"13022:9:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":19954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"13022:26:87","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":19955,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"STABLE","nodeType":"MemberAccess","referencedDeclaration":21335,"src":"13022:33:87","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"src":"13002:53:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12983:72:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":19958,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12982:74:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19959,"name":"variableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19898,"src":"13069:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":19960,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13085:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13069:17:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"id":19966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19962,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19892,"src":"13090:16:87","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":19963,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"13110:9:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":19964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"13110:26:87","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":19965,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"VARIABLE","nodeType":"MemberAccess","referencedDeclaration":21336,"src":"13110:35:87","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"src":"13090:55:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13069:76:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":19968,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13068:78:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12982:164:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":19970,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"13154:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":19971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"NO_DEBT_OF_SELECTED_TYPE","nodeType":"MemberAccess","referencedDeclaration":12488,"src":"13154:31:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":19948,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12967:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":19972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12967:224:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19973,"nodeType":"ExpressionStatement","src":"12967:224:87"}]},"documentation":{"id":19884,"nodeType":"StructuredDocumentation","src":"11887:458:87","text":" @notice Validates a repay action.\n @param reserveCache The cached data of the reserve\n @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\n @param interestRateMode The interest rate mode of the debt being repaid\n @param onBehalfOf The address of the user msg.sender is repaying for\n @param stableDebt The borrow balance of the user\n @param variableDebt The borrow balance of the user"},"id":19975,"implemented":true,"kind":"function","modifiers":[],"name":"validateRepay","nameLocation":"12357:13:87","nodeType":"FunctionDefinition","parameters":{"id":19899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19887,"mutability":"mutable","name":"reserveCache","nameLocation":"12406:12:87","nodeType":"VariableDeclaration","scope":19975,"src":"12376:42:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":19886,"nodeType":"UserDefinedTypeName","pathNode":{"id":19885,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"12376:22:87"},"referencedDeclaration":21379,"src":"12376:22:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"},{"constant":false,"id":19889,"mutability":"mutable","name":"amountSent","nameLocation":"12432:10:87","nodeType":"VariableDeclaration","scope":19975,"src":"12424:18:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19888,"name":"uint256","nodeType":"ElementaryTypeName","src":"12424:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19892,"mutability":"mutable","name":"interestRateMode","nameLocation":"12475:16:87","nodeType":"VariableDeclaration","scope":19975,"src":"12448:43:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"typeName":{"id":19891,"nodeType":"UserDefinedTypeName","pathNode":{"id":19890,"name":"DataTypes.InterestRateMode","nodeType":"IdentifierPath","referencedDeclaration":21337,"src":"12448:26:87"},"referencedDeclaration":21337,"src":"12448:26:87","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"visibility":"internal"},{"constant":false,"id":19894,"mutability":"mutable","name":"onBehalfOf","nameLocation":"12505:10:87","nodeType":"VariableDeclaration","scope":19975,"src":"12497:18:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19893,"name":"address","nodeType":"ElementaryTypeName","src":"12497:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19896,"mutability":"mutable","name":"stableDebt","nameLocation":"12529:10:87","nodeType":"VariableDeclaration","scope":19975,"src":"12521:18:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19895,"name":"uint256","nodeType":"ElementaryTypeName","src":"12521:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19898,"mutability":"mutable","name":"variableDebt","nameLocation":"12553:12:87","nodeType":"VariableDeclaration","scope":19975,"src":"12545:20:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19897,"name":"uint256","nodeType":"ElementaryTypeName","src":"12545:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12370:199:87"},"returnParameters":{"id":19900,"nodeType":"ParameterList","parameters":[],"src":"12584:0:87"},"scope":20908,"src":"12348:848:87","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":20101,"nodeType":"Block","src":"13917:1363:87","statements":[{"assignments":[19996,19998,null,20000,20002],"declarations":[{"constant":false,"id":19996,"mutability":"mutable","name":"isActive","nameLocation":"13929:8:87","nodeType":"VariableDeclaration","scope":20101,"src":"13924:13:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19995,"name":"bool","nodeType":"ElementaryTypeName","src":"13924:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":19998,"mutability":"mutable","name":"isFrozen","nameLocation":"13944:8:87","nodeType":"VariableDeclaration","scope":20101,"src":"13939:13:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19997,"name":"bool","nodeType":"ElementaryTypeName","src":"13939:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null,{"constant":false,"id":20000,"mutability":"mutable","name":"stableRateEnabled","nameLocation":"13961:17:87","nodeType":"VariableDeclaration","scope":20101,"src":"13956:22:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19999,"name":"bool","nodeType":"ElementaryTypeName","src":"13956:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":20002,"mutability":"mutable","name":"isPaused","nameLocation":"13985:8:87","nodeType":"VariableDeclaration","scope":20101,"src":"13980:13:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20001,"name":"bool","nodeType":"ElementaryTypeName","src":"13980:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":20007,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20003,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19982,"src":"13997:12:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20004,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"13997:40:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":20005,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":11757,"src":"13997:56:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":20006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13997:58:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"nodeType":"VariableDeclarationStatement","src":"13923:132:87"},{"expression":{"arguments":[{"id":20009,"name":"isActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19996,"src":"14069:8:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20010,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"14079:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_INACTIVE","nodeType":"MemberAccess","referencedDeclaration":12452,"src":"14079:23:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20008,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14061:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20012,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14061:42:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20013,"nodeType":"ExpressionStatement","src":"14061:42:87"},{"expression":{"arguments":[{"id":20016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"14117:9:87","subExpression":{"id":20015,"name":"isPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20002,"src":"14118:8:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20017,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"14128:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_PAUSED","nodeType":"MemberAccess","referencedDeclaration":12458,"src":"14128:21:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20014,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14109:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20019,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14109:41:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20020,"nodeType":"ExpressionStatement","src":"14109:41:87"},{"expression":{"arguments":[{"id":20023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"14164:9:87","subExpression":{"id":20022,"name":"isFrozen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19998,"src":"14165:8:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20024,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"14175:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_FROZEN","nodeType":"MemberAccess","referencedDeclaration":12455,"src":"14175:21:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20021,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14156:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14156:41:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20027,"nodeType":"ExpressionStatement","src":"14156:41:87"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"id":20032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20028,"name":"currentRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19992,"src":"14208:15:87","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":20029,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"14227:9:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":20030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"14227:26:87","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":20031,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"STABLE","nodeType":"MemberAccess","referencedDeclaration":21335,"src":"14227:33:87","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"src":"14208:52:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"id":20046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20042,"name":"currentRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19992,"src":"14346:15:87","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":20043,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"14365:9:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":20044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"14365:26:87","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":20045,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"VARIABLE","nodeType":"MemberAccess","referencedDeclaration":21336,"src":"14365:35:87","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"src":"14346:54:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":20098,"nodeType":"Block","src":"15211:65:87","statements":[{"expression":{"arguments":[{"expression":{"id":20094,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"15226:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_INTEREST_RATE_MODE_SELECTED","nodeType":"MemberAccess","referencedDeclaration":12470,"src":"15226:42:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20093,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"15219:6:87","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":20096,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15219:50:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20097,"nodeType":"ExpressionStatement","src":"15219:50:87"}]},"id":20099,"nodeType":"IfStatement","src":"14342:934:87","trueBody":{"id":20092,"nodeType":"Block","src":"14402:803:87","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20048,"name":"variableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19989,"src":"14418:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":20049,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14434:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14418:17:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20051,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"14437:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"NO_OUTSTANDING_VARIABLE_DEBT","nodeType":"MemberAccess","referencedDeclaration":12497,"src":"14437:35:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20047,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14410:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14410:63:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20054,"nodeType":"ExpressionStatement","src":"14410:63:87"},{"documentation":" user wants to swap to stable, before swapping we need to ensure that\n 1. stable borrow rate is enabled on the reserve\n 2. user is not trying to abuse the reserve by supplying\n more collateral than he is borrowing, artificially lowering\n the interest rate, borrowing at variable, and switching to stable","expression":{"arguments":[{"id":20056,"name":"stableRateEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20000,"src":"14853:17:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20057,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"14872:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"STABLE_BORROWING_NOT_ENABLED","nodeType":"MemberAccess","referencedDeclaration":12464,"src":"14872:35:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20055,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14845:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14845:63:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20060,"nodeType":"ExpressionStatement","src":"14845:63:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"14934:43:87","subExpression":{"arguments":[{"expression":{"id":20064,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19979,"src":"14966:7:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20065,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"14966:10:87","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":20062,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19985,"src":"14935:10:87","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":20063,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":12083,"src":"14935:30:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (bool)"}},"id":20066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14935:42:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20068,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19982,"src":"14991:12:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20069,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"14991:33:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":20070,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLtv","nodeType":"MemberAccess","referencedDeclaration":10777,"src":"14991:40:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":20071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14991:42:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":20072,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15037:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14991:47:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14934:104:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20075,"name":"stableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19987,"src":"15052:10:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":20076,"name":"variableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19989,"src":"15065:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15052:25:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"expression":{"id":20083,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"15125:3:87","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"15125:10:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":20079,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19982,"src":"15087:12:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20080,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"15087:26:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20078,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"15080:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":20081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15080:34:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":20082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"15080:44:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":20085,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15080:56:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15052:84:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14934:202:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20088,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"15146:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"COLLATERAL_SAME_AS_BORROWING_CURRENCY","nodeType":"MemberAccess","referencedDeclaration":12482,"src":"15146:44:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20061,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14917:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14917:281:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20091,"nodeType":"ExpressionStatement","src":"14917:281:87"}]}},"id":20100,"nodeType":"IfStatement","src":"14204:1072:87","trueBody":{"id":20041,"nodeType":"Block","src":"14262:74:87","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20034,"name":"stableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19987,"src":"14278:10:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":20035,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14292:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14278:15:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20037,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"14295:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"NO_OUTSTANDING_STABLE_DEBT","nodeType":"MemberAccess","referencedDeclaration":12494,"src":"14295:33:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20033,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14270:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14270:59:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20040,"nodeType":"ExpressionStatement","src":"14270:59:87"}]}}]},"documentation":{"id":19976,"nodeType":"StructuredDocumentation","src":"13200:422:87","text":" @notice Validates a swap of borrow rate mode.\n @param reserve The reserve state on which the user is swapping the rate\n @param reserveCache The cached data of the reserve\n @param userConfig The user reserves configuration\n @param stableDebt The stable debt of the user\n @param variableDebt The variable debt of the user\n @param currentRateMode The rate mode of the debt being swapped"},"id":20102,"implemented":true,"kind":"function","modifiers":[],"name":"validateSwapRateMode","nameLocation":"13634:20:87","nodeType":"FunctionDefinition","parameters":{"id":19993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19979,"mutability":"mutable","name":"reserve","nameLocation":"13690:7:87","nodeType":"VariableDeclaration","scope":20102,"src":"13660:37:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":19978,"nodeType":"UserDefinedTypeName","pathNode":{"id":19977,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"13660:21:87"},"referencedDeclaration":21315,"src":"13660:21:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":19982,"mutability":"mutable","name":"reserveCache","nameLocation":"13733:12:87","nodeType":"VariableDeclaration","scope":20102,"src":"13703:42:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":19981,"nodeType":"UserDefinedTypeName","pathNode":{"id":19980,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"13703:22:87"},"referencedDeclaration":21379,"src":"13703:22:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"},{"constant":false,"id":19985,"mutability":"mutable","name":"userConfig","nameLocation":"13790:10:87","nodeType":"VariableDeclaration","scope":20102,"src":"13751:49:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":19984,"nodeType":"UserDefinedTypeName","pathNode":{"id":19983,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"13751:30:87"},"referencedDeclaration":21322,"src":"13751:30:87","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":19987,"mutability":"mutable","name":"stableDebt","nameLocation":"13814:10:87","nodeType":"VariableDeclaration","scope":20102,"src":"13806:18:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19986,"name":"uint256","nodeType":"ElementaryTypeName","src":"13806:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19989,"mutability":"mutable","name":"variableDebt","nameLocation":"13838:12:87","nodeType":"VariableDeclaration","scope":20102,"src":"13830:20:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19988,"name":"uint256","nodeType":"ElementaryTypeName","src":"13830:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19992,"mutability":"mutable","name":"currentRateMode","nameLocation":"13883:15:87","nodeType":"VariableDeclaration","scope":20102,"src":"13856:42:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"typeName":{"id":19991,"nodeType":"UserDefinedTypeName","pathNode":{"id":19990,"name":"DataTypes.InterestRateMode","nodeType":"IdentifierPath","referencedDeclaration":21337,"src":"13856:26:87"},"referencedDeclaration":21337,"src":"13856:26:87","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"visibility":"internal"}],"src":"13654:248:87"},"returnParameters":{"id":19994,"nodeType":"ParameterList","parameters":[],"src":"13917:0:87"},"scope":20908,"src":"13625:1655:87","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":20188,"nodeType":"Block","src":"15989:1106:87","statements":[{"assignments":[20115,null,null,null,20117],"declarations":[{"constant":false,"id":20115,"mutability":"mutable","name":"isActive","nameLocation":"16001:8:87","nodeType":"VariableDeclaration","scope":20188,"src":"15996:13:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20114,"name":"bool","nodeType":"ElementaryTypeName","src":"15996:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null,null,null,{"constant":false,"id":20117,"mutability":"mutable","name":"isPaused","nameLocation":"16022:8:87","nodeType":"VariableDeclaration","scope":20188,"src":"16017:13:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20116,"name":"bool","nodeType":"ElementaryTypeName","src":"16017:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":20122,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20118,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20109,"src":"16034:12:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20119,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"16034:33:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":20120,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":11757,"src":"16034:42:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":20121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16034:44:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"nodeType":"VariableDeclarationStatement","src":"15995:83:87"},{"expression":{"arguments":[{"id":20124,"name":"isActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20115,"src":"16092:8:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20125,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"16102:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_INACTIVE","nodeType":"MemberAccess","referencedDeclaration":12452,"src":"16102:23:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20123,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16084:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16084:42:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20128,"nodeType":"ExpressionStatement","src":"16084:42:87"},{"expression":{"arguments":[{"id":20131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"16140:9:87","subExpression":{"id":20130,"name":"isPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20117,"src":"16141:8:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20132,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"16151:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_PAUSED","nodeType":"MemberAccess","referencedDeclaration":12458,"src":"16151:21:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20129,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16132:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16132:41:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20135,"nodeType":"ExpressionStatement","src":"16132:41:87"},{"assignments":[20137],"declarations":[{"constant":false,"id":20137,"mutability":"mutable","name":"totalDebt","nameLocation":"16188:9:87","nodeType":"VariableDeclaration","scope":20188,"src":"16180:17:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20136,"name":"uint256","nodeType":"ElementaryTypeName","src":"16180:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20151,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":20139,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20109,"src":"16207:12:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20140,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21372,"src":"16207:35:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20138,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"16200:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":20141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16200:43:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":20142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"16200:55:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":20143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16200:57:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":20145,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20109,"src":"16273:12:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20146,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21374,"src":"16273:37:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20144,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"16266:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":20147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16266:45:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":20148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"16266:57:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":20149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16266:59:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16200:125:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16180:145:87"},{"assignments":[20153,null,null],"declarations":[{"constant":false,"id":20153,"mutability":"mutable","name":"liquidityRateVariableDebtOnly","nameLocation":"16341:29:87","nodeType":"VariableDeclaration","scope":20188,"src":"16333:37:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20152,"name":"uint256","nodeType":"ElementaryTypeName","src":"16333:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null,null],"id":20175,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":20161,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20106,"src":"16549:7:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20162,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"unbacked","nodeType":"MemberAccess","referencedDeclaration":21312,"src":"16549:16:87","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"hexValue":"30","id":20163,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16593:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":20164,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16622:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":20165,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16652:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":20166,"name":"totalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20137,"src":"16684:9:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":20167,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16730:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"id":20168,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20109,"src":"16758:12:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20169,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveFactor","nodeType":"MemberAccess","referencedDeclaration":21365,"src":"16758:26:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20170,"name":"reserveAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20111,"src":"16805:14:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":20171,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20109,"src":"16839:12:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20172,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21370,"src":"16839:26:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":20159,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"16488:9:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":20160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CalculateInterestRatesParams","nodeType":"MemberAccess","referencedDeclaration":21617,"src":"16488:38:87","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_CalculateInterestRatesParams_$21617_storage_ptr_$","typeString":"type(struct DataTypes.CalculateInterestRatesParams storage pointer)"}},"id":20173,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["unbacked","liquidityAdded","liquidityTaken","totalStableDebt","totalVariableDebt","averageStableBorrowRate","reserveFactor","reserve","aToken"],"nodeType":"FunctionCall","src":"16488:388:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$21617_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$21617_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}],"expression":{"arguments":[{"expression":{"id":20155,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20106,"src":"16414:7:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20156,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":21308,"src":"16414:35:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20154,"name":"IReserveInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5913,"src":"16378:28:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IReserveInterestRateStrategy_$5913_$","typeString":"type(contract IReserveInterestRateStrategy)"}},"id":20157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16378:77:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IReserveInterestRateStrategy_$5913","typeString":"contract IReserveInterestRateStrategy"}},"id":20158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateInterestRates","nodeType":"MemberAccess","referencedDeclaration":5912,"src":"16378:100:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct DataTypes.CalculateInterestRatesParams memory) view external returns (uint256,uint256,uint256)"}},"id":20174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16378:506:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"16332:552:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20177,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20109,"src":"16906:12:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20178,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":21361,"src":"16906:30:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"id":20181,"name":"REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19166,"src":"16989:37:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":20179,"name":"liquidityRateVariableDebtOnly","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20153,"src":"16948:29:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":21119,"src":"16948:40:87","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":20182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16948:79:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16906:121:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20184,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"17035:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET","nodeType":"MemberAccess","referencedDeclaration":12503,"src":"17035:49:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20176,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16891:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16891:199:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20187,"nodeType":"ExpressionStatement","src":"16891:199:87"}]},"documentation":{"id":20103,"nodeType":"StructuredDocumentation","src":"15284:522:87","text":" @notice Validates a stable borrow rate rebalance action.\n @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\n For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\n @param reserve The reserve state on which the user is getting rebalanced\n @param reserveCache The cached state of the reserve\n @param reserveAddress The address of the reserve"},"id":20189,"implemented":true,"kind":"function","modifiers":[],"name":"validateRebalanceStableBorrowRate","nameLocation":"15818:33:87","nodeType":"FunctionDefinition","parameters":{"id":20112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20106,"mutability":"mutable","name":"reserve","nameLocation":"15887:7:87","nodeType":"VariableDeclaration","scope":20189,"src":"15857:37:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":20105,"nodeType":"UserDefinedTypeName","pathNode":{"id":20104,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"15857:21:87"},"referencedDeclaration":21315,"src":"15857:21:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":20109,"mutability":"mutable","name":"reserveCache","nameLocation":"15930:12:87","nodeType":"VariableDeclaration","scope":20189,"src":"15900:42:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":20108,"nodeType":"UserDefinedTypeName","pathNode":{"id":20107,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"15900:22:87"},"referencedDeclaration":21379,"src":"15900:22:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"},{"constant":false,"id":20111,"mutability":"mutable","name":"reserveAddress","nameLocation":"15956:14:87","nodeType":"VariableDeclaration","scope":20189,"src":"15948:22:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20110,"name":"address","nodeType":"ElementaryTypeName","src":"15948:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15851:123:87"},"returnParameters":{"id":20113,"nodeType":"ParameterList","parameters":[],"src":"15989:0:87"},"scope":20908,"src":"15809:1286:87","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":20228,"nodeType":"Block","src":"17418:253:87","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20199,"name":"userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20195,"src":"17432:11:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":20200,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17447:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17432:16:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20202,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"17450:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"UNDERLYING_BALANCE_ZERO","nodeType":"MemberAccess","referencedDeclaration":12500,"src":"17450:30:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20198,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17424:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17424:57:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20205,"nodeType":"ExpressionStatement","src":"17424:57:87"},{"assignments":[20207,null,null,null,20209],"declarations":[{"constant":false,"id":20207,"mutability":"mutable","name":"isActive","nameLocation":"17494:8:87","nodeType":"VariableDeclaration","scope":20228,"src":"17489:13:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20206,"name":"bool","nodeType":"ElementaryTypeName","src":"17489:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null,null,null,{"constant":false,"id":20209,"mutability":"mutable","name":"isPaused","nameLocation":"17515:8:87","nodeType":"VariableDeclaration","scope":20228,"src":"17510:13:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20208,"name":"bool","nodeType":"ElementaryTypeName","src":"17510:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":20214,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20210,"name":"reserveCache","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20193,"src":"17527:12:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20211,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"17527:33:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":20212,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":11757,"src":"17527:42:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":20213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17527:44:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"nodeType":"VariableDeclarationStatement","src":"17488:83:87"},{"expression":{"arguments":[{"id":20216,"name":"isActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20207,"src":"17585:8:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20217,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"17595:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_INACTIVE","nodeType":"MemberAccess","referencedDeclaration":12452,"src":"17595:23:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20215,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17577:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17577:42:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20220,"nodeType":"ExpressionStatement","src":"17577:42:87"},{"expression":{"arguments":[{"id":20223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"17633:9:87","subExpression":{"id":20222,"name":"isPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20209,"src":"17634:8:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20224,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"17644:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_PAUSED","nodeType":"MemberAccess","referencedDeclaration":12458,"src":"17644:21:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20221,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17625:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17625:41:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20227,"nodeType":"ExpressionStatement","src":"17625:41:87"}]},"documentation":{"id":20190,"nodeType":"StructuredDocumentation","src":"17099:182:87","text":" @notice Validates the action of setting an asset as collateral.\n @param reserveCache The cached data of the reserve\n @param userBalance The balance of the user"},"id":20229,"implemented":true,"kind":"function","modifiers":[],"name":"validateSetUseReserveAsCollateral","nameLocation":"17293:33:87","nodeType":"FunctionDefinition","parameters":{"id":20196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20193,"mutability":"mutable","name":"reserveCache","nameLocation":"17362:12:87","nodeType":"VariableDeclaration","scope":20229,"src":"17332:42:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":20192,"nodeType":"UserDefinedTypeName","pathNode":{"id":20191,"name":"DataTypes.ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"17332:22:87"},"referencedDeclaration":21379,"src":"17332:22:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"},{"constant":false,"id":20195,"mutability":"mutable","name":"userBalance","nameLocation":"17388:11:87","nodeType":"VariableDeclaration","scope":20229,"src":"17380:19:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20194,"name":"uint256","nodeType":"ElementaryTypeName","src":"17380:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17326:77:87"},"returnParameters":{"id":20197,"nodeType":"ParameterList","parameters":[],"src":"17418:0:87"},"scope":20908,"src":"17284:387:87","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":20275,"nodeType":"Block","src":"18070:201:87","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20245,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20238,"src":"18084:6:87","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":20246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"18084:13:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":20247,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20241,"src":"18101:7:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"18101:14:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18084:31:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20250,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"18117:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INCONSISTENT_FLASHLOAN_PARAMS","nodeType":"MemberAccess","referencedDeclaration":12515,"src":"18117:36:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20244,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18076:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20252,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18076:78:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20253,"nodeType":"ExpressionStatement","src":"18076:78:87"},{"body":{"id":20273,"nodeType":"Block","src":"18204:63:87","statements":[{"expression":{"arguments":[{"baseExpression":{"id":20266,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20235,"src":"18236:12:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":20270,"indexExpression":{"baseExpression":{"id":20267,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20238,"src":"18249:6:87","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":20269,"indexExpression":{"id":20268,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20255,"src":"18256:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18249:9:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18236:23:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}],"id":20265,"name":"validateFlashloanSimple","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20317,"src":"18212:23:87","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$21315_storage_ptr_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer) view"}},"id":20271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18212:48:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20272,"nodeType":"ExpressionStatement","src":"18212:48:87"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20258,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20255,"src":"18180:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":20259,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20238,"src":"18184:6:87","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":20260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"18184:13:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18180:17:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20274,"initializationExpression":{"assignments":[20255],"declarations":[{"constant":false,"id":20255,"mutability":"mutable","name":"i","nameLocation":"18173:1:87","nodeType":"VariableDeclaration","scope":20274,"src":"18165:9:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20254,"name":"uint256","nodeType":"ElementaryTypeName","src":"18165:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20257,"initialValue":{"hexValue":"30","id":20256,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18177:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"18165:13:87"},"loopExpression":{"expression":{"id":20263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"18199:3:87","subExpression":{"id":20262,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20255,"src":"18199:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20264,"nodeType":"ExpressionStatement","src":"18199:3:87"},"nodeType":"ForStatement","src":"18160:107:87"}]},"documentation":{"id":20230,"nodeType":"StructuredDocumentation","src":"17675:220:87","text":" @notice Validates a flashloan action.\n @param reservesData The state of all the reserves\n @param assets The assets being flash-borrowed\n @param amounts The amounts for each asset being borrowed"},"id":20276,"implemented":true,"kind":"function","modifiers":[],"name":"validateFlashloan","nameLocation":"17907:17:87","nodeType":"FunctionDefinition","parameters":{"id":20242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20235,"mutability":"mutable","name":"reservesData","nameLocation":"17980:12:87","nodeType":"VariableDeclaration","scope":20276,"src":"17930:62:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":20234,"keyType":{"id":20231,"name":"address","nodeType":"ElementaryTypeName","src":"17938:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"17930:41:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":20233,"nodeType":"UserDefinedTypeName","pathNode":{"id":20232,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"17949:21:87"},"referencedDeclaration":21315,"src":"17949:21:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":20238,"mutability":"mutable","name":"assets","nameLocation":"18015:6:87","nodeType":"VariableDeclaration","scope":20276,"src":"17998:23:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":20236,"name":"address","nodeType":"ElementaryTypeName","src":"17998:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":20237,"nodeType":"ArrayTypeName","src":"17998:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":20241,"mutability":"mutable","name":"amounts","nameLocation":"18044:7:87","nodeType":"VariableDeclaration","scope":20276,"src":"18027:24:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":20239,"name":"uint256","nodeType":"ElementaryTypeName","src":"18027:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20240,"nodeType":"ArrayTypeName","src":"18027:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"17924:131:87"},"returnParameters":{"id":20243,"nodeType":"ParameterList","parameters":[],"src":"18070:0:87"},"scope":20908,"src":"17898:373:87","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":20316,"nodeType":"Block","src":"18461:295:87","statements":[{"assignments":[20287],"declarations":[{"constant":false,"id":20287,"mutability":"mutable","name":"configuration","nameLocation":"18508:13:87","nodeType":"VariableDeclaration","scope":20316,"src":"18467:54:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":20286,"nodeType":"UserDefinedTypeName","pathNode":{"id":20285,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"18467:33:87"},"referencedDeclaration":21318,"src":"18467:33:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":20290,"initialValue":{"expression":{"id":20288,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20280,"src":"18524:7:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20289,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":21286,"src":"18524:21:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"18467:78:87"},{"expression":{"arguments":[{"id":20295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"18559:26:87","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20292,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20287,"src":"18560:13:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":20293,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getPaused","nodeType":"MemberAccess","referencedDeclaration":11083,"src":"18560:23:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":20294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18560:25:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20296,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"18587:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_PAUSED","nodeType":"MemberAccess","referencedDeclaration":12458,"src":"18587:21:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20291,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18551:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20298,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18551:58:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20299,"nodeType":"ExpressionStatement","src":"18551:58:87"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20301,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20287,"src":"18623:13:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":20302,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getActive","nodeType":"MemberAccess","referencedDeclaration":10983,"src":"18623:23:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":20303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18623:25:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20304,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"18650:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_INACTIVE","nodeType":"MemberAccess","referencedDeclaration":12452,"src":"18650:23:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20300,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18615:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20306,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18615:59:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20307,"nodeType":"ExpressionStatement","src":"18615:59:87"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20309,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20287,"src":"18688:13:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":20310,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlashLoanEnabled","nodeType":"MemberAccess","referencedDeclaration":11697,"src":"18688:33:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":20311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18688:35:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20312,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"18725:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FLASHLOAN_DISABLED","nodeType":"MemberAccess","referencedDeclaration":12641,"src":"18725:25:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20308,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18680:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18680:71:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20315,"nodeType":"ExpressionStatement","src":"18680:71:87"}]},"documentation":{"id":20277,"nodeType":"StructuredDocumentation","src":"18275:97:87","text":" @notice Validates a flashloan action.\n @param reserve The state of the reserve"},"id":20317,"implemented":true,"kind":"function","modifiers":[],"name":"validateFlashloanSimple","nameLocation":"18384:23:87","nodeType":"FunctionDefinition","parameters":{"id":20281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20280,"mutability":"mutable","name":"reserve","nameLocation":"18438:7:87","nodeType":"VariableDeclaration","scope":20317,"src":"18408:37:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":20279,"nodeType":"UserDefinedTypeName","pathNode":{"id":20278,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"18408:21:87"},"referencedDeclaration":21315,"src":"18408:21:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"src":"18407:39:87"},"returnParameters":{"id":20282,"nodeType":"ParameterList","parameters":[],"src":"18461:0:87"},"scope":20908,"src":"18375:381:87","stateMutability":"view","virtual":false,"visibility":"internal"},{"canonicalName":"ValidationLogic.ValidateLiquidationCallLocalVars","id":20328,"members":[{"constant":false,"id":20319,"mutability":"mutable","name":"collateralReserveActive","nameLocation":"18811:23:87","nodeType":"VariableDeclaration","scope":20328,"src":"18806:28:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20318,"name":"bool","nodeType":"ElementaryTypeName","src":"18806:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":20321,"mutability":"mutable","name":"collateralReservePaused","nameLocation":"18845:23:87","nodeType":"VariableDeclaration","scope":20328,"src":"18840:28:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20320,"name":"bool","nodeType":"ElementaryTypeName","src":"18840:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":20323,"mutability":"mutable","name":"principalReserveActive","nameLocation":"18879:22:87","nodeType":"VariableDeclaration","scope":20328,"src":"18874:27:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20322,"name":"bool","nodeType":"ElementaryTypeName","src":"18874:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":20325,"mutability":"mutable","name":"principalReservePaused","nameLocation":"18912:22:87","nodeType":"VariableDeclaration","scope":20328,"src":"18907:27:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20324,"name":"bool","nodeType":"ElementaryTypeName","src":"18907:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":20327,"mutability":"mutable","name":"isCollateralEnabled","nameLocation":"18945:19:87","nodeType":"VariableDeclaration","scope":20328,"src":"18940:24:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20326,"name":"bool","nodeType":"ElementaryTypeName","src":"18940:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"ValidateLiquidationCallLocalVars","nameLocation":"18767:32:87","nodeType":"StructDefinition","scope":20908,"src":"18760:209:87","visibility":"public"},{"body":{"id":20458,"nodeType":"Block","src":"19436:1355:87","statements":[{"assignments":[20343],"declarations":[{"constant":false,"id":20343,"mutability":"mutable","name":"vars","nameLocation":"19482:4:87","nodeType":"VariableDeclaration","scope":20458,"src":"19442:44:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallLocalVars_$20328_memory_ptr","typeString":"struct ValidationLogic.ValidateLiquidationCallLocalVars"},"typeName":{"id":20342,"nodeType":"UserDefinedTypeName","pathNode":{"id":20341,"name":"ValidateLiquidationCallLocalVars","nodeType":"IdentifierPath","referencedDeclaration":20328,"src":"19442:32:87"},"referencedDeclaration":20328,"src":"19442:32:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallLocalVars_$20328_storage_ptr","typeString":"struct ValidationLogic.ValidateLiquidationCallLocalVars"}},"visibility":"internal"}],"id":20344,"nodeType":"VariableDeclarationStatement","src":"19442:44:87"},{"expression":{"id":20355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":20345,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20343,"src":"19494:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallLocalVars_$20328_memory_ptr","typeString":"struct ValidationLogic.ValidateLiquidationCallLocalVars memory"}},"id":20347,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"collateralReserveActive","nodeType":"MemberAccess","referencedDeclaration":20319,"src":"19494:28:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},null,null,null,{"expression":{"id":20348,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20343,"src":"19530:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallLocalVars_$20328_memory_ptr","typeString":"struct ValidationLogic.ValidateLiquidationCallLocalVars memory"}},"id":20349,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"collateralReservePaused","nodeType":"MemberAccess","referencedDeclaration":20321,"src":"19530:28:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":20350,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"19493:66:87","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$__$__$__$_t_bool_$","typeString":"tuple(bool,,,,bool)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20351,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20335,"src":"19562:17:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20352,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":21286,"src":"19562:38:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":20353,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":11757,"src":"19562:54:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":20354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19562:56:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"src":"19493:125:87","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20356,"nodeType":"ExpressionStatement","src":"19493:125:87"},{"expression":{"id":20368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":20357,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20343,"src":"19626:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallLocalVars_$20328_memory_ptr","typeString":"struct ValidationLogic.ValidateLiquidationCallLocalVars memory"}},"id":20359,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"principalReserveActive","nodeType":"MemberAccess","referencedDeclaration":20323,"src":"19626:27:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},null,null,null,{"expression":{"id":20360,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20343,"src":"19661:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallLocalVars_$20328_memory_ptr","typeString":"struct ValidationLogic.ValidateLiquidationCallLocalVars memory"}},"id":20361,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"principalReservePaused","nodeType":"MemberAccess","referencedDeclaration":20325,"src":"19661:27:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":20362,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"19625:64:87","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$__$__$__$_t_bool_$","typeString":"tuple(bool,,,,bool)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"expression":{"id":20363,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20338,"src":"19692:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallParams_$21598_memory_ptr","typeString":"struct DataTypes.ValidateLiquidationCallParams memory"}},"id":20364,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"debtReserveCache","nodeType":"MemberAccess","referencedDeclaration":21591,"src":"19692:30:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_memory_ptr","typeString":"struct DataTypes.ReserveCache memory"}},"id":20365,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveConfiguration","nodeType":"MemberAccess","referencedDeclaration":21368,"src":"19692:58:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":20366,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":11757,"src":"19692:74:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":20367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19692:76:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"src":"19625:143:87","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20369,"nodeType":"ExpressionStatement","src":"19625:143:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20371,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20343,"src":"19783:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallLocalVars_$20328_memory_ptr","typeString":"struct ValidationLogic.ValidateLiquidationCallLocalVars memory"}},"id":20372,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralReserveActive","nodeType":"MemberAccess","referencedDeclaration":20319,"src":"19783:28:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"expression":{"id":20373,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20343,"src":"19815:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallLocalVars_$20328_memory_ptr","typeString":"struct ValidationLogic.ValidateLiquidationCallLocalVars memory"}},"id":20374,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"principalReserveActive","nodeType":"MemberAccess","referencedDeclaration":20323,"src":"19815:27:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19783:59:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20376,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"19844:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_INACTIVE","nodeType":"MemberAccess","referencedDeclaration":12452,"src":"19844:23:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20370,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"19775:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20378,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19775:93:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20379,"nodeType":"ExpressionStatement","src":"19775:93:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"19882:29:87","subExpression":{"expression":{"id":20381,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20343,"src":"19883:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallLocalVars_$20328_memory_ptr","typeString":"struct ValidationLogic.ValidateLiquidationCallLocalVars memory"}},"id":20382,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"collateralReservePaused","nodeType":"MemberAccess","referencedDeclaration":20321,"src":"19883:28:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":20386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"19915:28:87","subExpression":{"expression":{"id":20384,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20343,"src":"19916:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallLocalVars_$20328_memory_ptr","typeString":"struct ValidationLogic.ValidateLiquidationCallLocalVars memory"}},"id":20385,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"principalReservePaused","nodeType":"MemberAccess","referencedDeclaration":20325,"src":"19916:27:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19882:61:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20388,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"19945:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_PAUSED","nodeType":"MemberAccess","referencedDeclaration":12458,"src":"19945:21:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20380,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"19874:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19874:93:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20391,"nodeType":"ExpressionStatement","src":"19874:93:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20393,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20338,"src":"19989:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallParams_$21598_memory_ptr","typeString":"struct DataTypes.ValidateLiquidationCallParams memory"}},"id":20394,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"priceOracleSentinel","nodeType":"MemberAccess","referencedDeclaration":21597,"src":"19989:26:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":20397,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20027:1:87","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":20396,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20019:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20395,"name":"address","nodeType":"ElementaryTypeName","src":"20019:7:87","typeDescriptions":{}}},"id":20398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20019:10:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19989:40:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20400,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20338,"src":"20041:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallParams_$21598_memory_ptr","typeString":"struct DataTypes.ValidateLiquidationCallParams memory"}},"id":20401,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"healthFactor","nodeType":"MemberAccess","referencedDeclaration":21595,"src":"20041:19:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":20402,"name":"MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19169,"src":"20063:43:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20041:65:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19989:117:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":20406,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20338,"src":"20139:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallParams_$21598_memory_ptr","typeString":"struct DataTypes.ValidateLiquidationCallParams memory"}},"id":20407,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"priceOracleSentinel","nodeType":"MemberAccess","referencedDeclaration":21597,"src":"20139:26:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20405,"name":"IPriceOracleSentinel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5894,"src":"20118:20:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPriceOracleSentinel_$5894_$","typeString":"type(contract IPriceOracleSentinel)"}},"id":20408,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20118:48:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleSentinel_$5894","typeString":"contract IPriceOracleSentinel"}},"id":20409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isLiquidationAllowed","nodeType":"MemberAccess","referencedDeclaration":5869,"src":"20118:69:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bool_$","typeString":"function () view external returns (bool)"}},"id":20410,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20118:71:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19989:200:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20412,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"20197:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PRICE_ORACLE_SENTINEL_CHECK_FAILED","nodeType":"MemberAccess","referencedDeclaration":12545,"src":"20197:41:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20392,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"19974:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20414,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19974:270:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20415,"nodeType":"ExpressionStatement","src":"19974:270:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20417,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20338,"src":"20266:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallParams_$21598_memory_ptr","typeString":"struct DataTypes.ValidateLiquidationCallParams memory"}},"id":20418,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"healthFactor","nodeType":"MemberAccess","referencedDeclaration":21595,"src":"20266:19:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":20419,"name":"HEALTH_FACTOR_LIQUIDATION_THRESHOLD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19173,"src":"20288:35:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20266:57:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20421,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"20331:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"HEALTH_FACTOR_NOT_BELOW_THRESHOLD","nodeType":"MemberAccess","referencedDeclaration":12506,"src":"20331:40:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20416,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"20251:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20423,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20251:126:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20424,"nodeType":"ExpressionStatement","src":"20251:126:87"},{"expression":{"id":20440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20425,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20343,"src":"20384:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallLocalVars_$20328_memory_ptr","typeString":"struct ValidationLogic.ValidateLiquidationCallLocalVars memory"}},"id":20427,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"isCollateralEnabled","nodeType":"MemberAccess","referencedDeclaration":20327,"src":"20384:24:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20428,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20335,"src":"20417:17:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20429,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":21286,"src":"20417:31:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":20430,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLiquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":10829,"src":"20417:55:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":20431,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20417:57:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":20432,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20478:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20417:62:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"arguments":[{"expression":{"id":20436,"name":"collateralReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20335,"src":"20520:17:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20437,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"20520:20:87","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":20434,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20332,"src":"20489:10:87","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":20435,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":12083,"src":"20489:30:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (bool)"}},"id":20438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20489:52:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"20417:124:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"20384:157:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20441,"nodeType":"ExpressionStatement","src":"20384:157:87"},{"expression":{"arguments":[{"expression":{"id":20443,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20343,"src":"20637:4:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallLocalVars_$20328_memory_ptr","typeString":"struct ValidationLogic.ValidateLiquidationCallLocalVars memory"}},"id":20444,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isCollateralEnabled","nodeType":"MemberAccess","referencedDeclaration":20327,"src":"20637:24:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20445,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"20663:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"COLLATERAL_CANNOT_BE_LIQUIDATED","nodeType":"MemberAccess","referencedDeclaration":12509,"src":"20663:38:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20442,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"20629:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20447,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20629:73:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20448,"nodeType":"ExpressionStatement","src":"20629:73:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20450,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20338,"src":"20716:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallParams_$21598_memory_ptr","typeString":"struct DataTypes.ValidateLiquidationCallParams memory"}},"id":20451,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalDebt","nodeType":"MemberAccess","referencedDeclaration":21593,"src":"20716:16:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":20452,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20736:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20716:21:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20454,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"20739:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER","nodeType":"MemberAccess","referencedDeclaration":12512,"src":"20739:46:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20449,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"20708:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20708:78:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20457,"nodeType":"ExpressionStatement","src":"20708:78:87"}]},"documentation":{"id":20329,"nodeType":"StructuredDocumentation","src":"18973:242:87","text":" @notice Validates the liquidation action.\n @param userConfig The user configuration mapping\n @param collateralReserve The reserve data of the collateral\n @param params Additional parameters needed for the validation"},"id":20459,"implemented":true,"kind":"function","modifiers":[],"name":"validateLiquidationCall","nameLocation":"19227:23:87","nodeType":"FunctionDefinition","parameters":{"id":20339,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20332,"mutability":"mutable","name":"userConfig","nameLocation":"19295:10:87","nodeType":"VariableDeclaration","scope":20459,"src":"19256:49:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":20331,"nodeType":"UserDefinedTypeName","pathNode":{"id":20330,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"19256:30:87"},"referencedDeclaration":21322,"src":"19256:30:87","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":20335,"mutability":"mutable","name":"collateralReserve","nameLocation":"19341:17:87","nodeType":"VariableDeclaration","scope":20459,"src":"19311:47:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":20334,"nodeType":"UserDefinedTypeName","pathNode":{"id":20333,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"19311:21:87"},"referencedDeclaration":21315,"src":"19311:21:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":20338,"mutability":"mutable","name":"params","nameLocation":"19411:6:87","nodeType":"VariableDeclaration","scope":20459,"src":"19364:53:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallParams_$21598_memory_ptr","typeString":"struct DataTypes.ValidateLiquidationCallParams"},"typeName":{"id":20337,"nodeType":"UserDefinedTypeName","pathNode":{"id":20336,"name":"DataTypes.ValidateLiquidationCallParams","nodeType":"IdentifierPath","referencedDeclaration":21598,"src":"19364:39:87"},"referencedDeclaration":21598,"src":"19364:39:87","typeDescriptions":{"typeIdentifier":"t_struct$_ValidateLiquidationCallParams_$21598_storage_ptr","typeString":"struct DataTypes.ValidateLiquidationCallParams"}},"visibility":"internal"}],"src":"19250:171:87"},"returnParameters":{"id":20340,"nodeType":"ParameterList","parameters":[],"src":"19436:0:87"},"scope":20908,"src":"19218:1573:87","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":20523,"nodeType":"Block","src":"21769:614:87","statements":[{"assignments":[null,null,null,null,20493,20495],"declarations":[null,null,null,null,{"constant":false,"id":20493,"mutability":"mutable","name":"healthFactor","nameLocation":"21792:12:87","nodeType":"VariableDeclaration","scope":20523,"src":"21784:20:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20492,"name":"uint256","nodeType":"ElementaryTypeName","src":"21784:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20495,"mutability":"mutable","name":"hasZeroLtvCollateral","nameLocation":"21811:20:87","nodeType":"VariableDeclaration","scope":20523,"src":"21806:25:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20494,"name":"bool","nodeType":"ElementaryTypeName","src":"21806:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":20510,"initialValue":{"arguments":[{"id":20498,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20465,"src":"21889:12:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":20499,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20469,"src":"21911:12:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":20500,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20474,"src":"21933:15:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"arguments":[{"id":20503,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20477,"src":"22023:10:87","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},{"id":20504,"name":"reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20483,"src":"22060:13:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20505,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20479,"src":"22091:4:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20506,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20485,"src":"22115:6:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20507,"name":"userEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20481,"src":"22152:17:87","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":20501,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"21958:9:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":20502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CalculateUserAccountDataParams","nodeType":"MemberAccess","referencedDeclaration":21556,"src":"21958:40:87","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_CalculateUserAccountDataParams_$21556_storage_ptr_$","typeString":"type(struct DataTypes.CalculateUserAccountDataParams storage pointer)"}},"id":20508,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["userConfig","reservesCount","user","oracle","userEModeCategory"],"nodeType":"FunctionCall","src":"21958:222:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}],"expression":{"id":20496,"name":"GenericLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15855,"src":"21835:12:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GenericLogic_$15855_$","typeString":"type(library GenericLogic)"}},"id":20497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateUserAccountData","nodeType":"MemberAccess","referencedDeclaration":15713,"src":"21835:44:87","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_$_t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.CalculateUserAccountDataParams memory) view returns (uint256,uint256,uint256,uint256,uint256,bool)"}},"id":20509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"21835:353:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"21775:413:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20512,"name":"healthFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20493,"src":"22210:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":20513,"name":"HEALTH_FACTOR_LIQUIDATION_THRESHOLD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19173,"src":"22226:35:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22210:51:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20515,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"22269:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD","nodeType":"MemberAccess","referencedDeclaration":12476,"src":"22269:53:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20511,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"22195:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"22195:133:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20518,"nodeType":"ExpressionStatement","src":"22195:133:87"},{"expression":{"components":[{"id":20519,"name":"healthFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20493,"src":"22343:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20520,"name":"hasZeroLtvCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20495,"src":"22357:20:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":20521,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22342:36:87","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"functionReturnParameters":20491,"id":20522,"nodeType":"Return","src":"22335:43:87"}]},"documentation":{"id":20460,"nodeType":"StructuredDocumentation","src":"20795:558:87","text":" @notice Validates the health factor of a user.\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param eModeCategories The configuration of all the efficiency mode categories\n @param userConfig The state of the user for the specific reserve\n @param user The user to validate health factor of\n @param userEModeCategory The users active efficiency mode category\n @param reservesCount The number of available reserves\n @param oracle The price oracle"},"id":20524,"implemented":true,"kind":"function","modifiers":[],"name":"validateHealthFactor","nameLocation":"21365:20:87","nodeType":"FunctionDefinition","parameters":{"id":20486,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20465,"mutability":"mutable","name":"reservesData","nameLocation":"21441:12:87","nodeType":"VariableDeclaration","scope":20524,"src":"21391:62:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":20464,"keyType":{"id":20461,"name":"address","nodeType":"ElementaryTypeName","src":"21399:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"21391:41:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":20463,"nodeType":"UserDefinedTypeName","pathNode":{"id":20462,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"21410:21:87"},"referencedDeclaration":21315,"src":"21410:21:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":20469,"mutability":"mutable","name":"reservesList","nameLocation":"21495:12:87","nodeType":"VariableDeclaration","scope":20524,"src":"21459:48:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":20468,"keyType":{"id":20466,"name":"uint256","nodeType":"ElementaryTypeName","src":"21467:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"21459:27:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":20467,"name":"address","nodeType":"ElementaryTypeName","src":"21478:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":20474,"mutability":"mutable","name":"eModeCategories","nameLocation":"21563:15:87","nodeType":"VariableDeclaration","scope":20524,"src":"21513:65:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":20473,"keyType":{"id":20470,"name":"uint8","nodeType":"ElementaryTypeName","src":"21521:5:87","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"21513:41:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":20472,"nodeType":"UserDefinedTypeName","pathNode":{"id":20471,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":21333,"src":"21530:23:87"},"referencedDeclaration":21333,"src":"21530:23:87","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":20477,"mutability":"mutable","name":"userConfig","nameLocation":"21622:10:87","nodeType":"VariableDeclaration","scope":20524,"src":"21584:48:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":20476,"nodeType":"UserDefinedTypeName","pathNode":{"id":20475,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"21584:30:87"},"referencedDeclaration":21322,"src":"21584:30:87","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":20479,"mutability":"mutable","name":"user","nameLocation":"21646:4:87","nodeType":"VariableDeclaration","scope":20524,"src":"21638:12:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20478,"name":"address","nodeType":"ElementaryTypeName","src":"21638:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20481,"mutability":"mutable","name":"userEModeCategory","nameLocation":"21662:17:87","nodeType":"VariableDeclaration","scope":20524,"src":"21656:23:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":20480,"name":"uint8","nodeType":"ElementaryTypeName","src":"21656:5:87","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":20483,"mutability":"mutable","name":"reservesCount","nameLocation":"21693:13:87","nodeType":"VariableDeclaration","scope":20524,"src":"21685:21:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20482,"name":"uint256","nodeType":"ElementaryTypeName","src":"21685:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20485,"mutability":"mutable","name":"oracle","nameLocation":"21720:6:87","nodeType":"VariableDeclaration","scope":20524,"src":"21712:14:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20484,"name":"address","nodeType":"ElementaryTypeName","src":"21712:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21385:345:87"},"returnParameters":{"id":20491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20488,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20524,"src":"21754:7:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20487,"name":"uint256","nodeType":"ElementaryTypeName","src":"21754:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20490,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20524,"src":"21763:4:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20489,"name":"bool","nodeType":"ElementaryTypeName","src":"21763:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"21753:15:87"},"scope":20908,"src":"21356:1027:87","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":20591,"nodeType":"Block","src":"23473:411:87","statements":[{"assignments":[20559],"declarations":[{"constant":false,"id":20559,"mutability":"mutable","name":"reserve","nameLocation":"23508:7:87","nodeType":"VariableDeclaration","scope":20591,"src":"23479:36:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":20558,"nodeType":"UserDefinedTypeName","pathNode":{"id":20557,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"23479:21:87"},"referencedDeclaration":21315,"src":"23479:21:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":20563,"initialValue":{"baseExpression":{"id":20560,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20530,"src":"23518:12:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":20562,"indexExpression":{"id":20561,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20544,"src":"23531:5:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23518:19:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"23479:58:87"},{"assignments":[null,20565],"declarations":[null,{"constant":false,"id":20565,"mutability":"mutable","name":"hasZeroLtvCollateral","nameLocation":"23552:20:87","nodeType":"VariableDeclaration","scope":20591,"src":"23547:25:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20564,"name":"bool","nodeType":"ElementaryTypeName","src":"23547:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":20576,"initialValue":{"arguments":[{"id":20567,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20530,"src":"23604:12:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":20568,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20534,"src":"23624:12:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":20569,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20539,"src":"23644:15:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"id":20570,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20542,"src":"23667:10:87","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},{"id":20571,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20546,"src":"23685:4:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20572,"name":"userEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20552,"src":"23697:17:87","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":20573,"name":"reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20548,"src":"23722:13:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20574,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20550,"src":"23743:6:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":20566,"name":"validateHealthFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20524,"src":"23576:20:87","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_address_$_t_uint8_$_t_uint256_$_t_address_$returns$_t_uint256_$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap memory,address,uint8,uint256,address) view returns (uint256,bool)"}},"id":20575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23576:179:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"23544:211:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"23777:21:87","subExpression":{"id":20578,"name":"hasZeroLtvCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20565,"src":"23778:20:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20580,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20559,"src":"23802:7:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":20581,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":21286,"src":"23802:21:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":20582,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLtv","nodeType":"MemberAccess","referencedDeclaration":10777,"src":"23802:28:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":20583,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23802:30:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":20584,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23836:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"23802:35:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"23777:60:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20587,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"23845:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"LTV_VALIDATION_FAILED","nodeType":"MemberAccess","referencedDeclaration":12539,"src":"23845:28:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20577,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"23762:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"23762:117:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20590,"nodeType":"ExpressionStatement","src":"23762:117:87"}]},"documentation":{"id":20525,"nodeType":"StructuredDocumentation","src":"22387:679:87","text":" @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param eModeCategories The configuration of all the efficiency mode categories\n @param userConfig The state of the user for the specific reserve\n @param asset The asset for which the ltv will be validated\n @param from The user from which the aTokens are being transferred\n @param reservesCount The number of available reserves\n @param oracle The price oracle\n @param userEModeCategory The users active efficiency mode category"},"id":20592,"implemented":true,"kind":"function","modifiers":[],"name":"validateHFAndLtv","nameLocation":"23078:16:87","nodeType":"FunctionDefinition","parameters":{"id":20553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20530,"mutability":"mutable","name":"reservesData","nameLocation":"23150:12:87","nodeType":"VariableDeclaration","scope":20592,"src":"23100:62:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":20529,"keyType":{"id":20526,"name":"address","nodeType":"ElementaryTypeName","src":"23108:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"23100:41:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":20528,"nodeType":"UserDefinedTypeName","pathNode":{"id":20527,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"23119:21:87"},"referencedDeclaration":21315,"src":"23119:21:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":20534,"mutability":"mutable","name":"reservesList","nameLocation":"23204:12:87","nodeType":"VariableDeclaration","scope":20592,"src":"23168:48:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":20533,"keyType":{"id":20531,"name":"uint256","nodeType":"ElementaryTypeName","src":"23176:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"23168:27:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":20532,"name":"address","nodeType":"ElementaryTypeName","src":"23187:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":20539,"mutability":"mutable","name":"eModeCategories","nameLocation":"23272:15:87","nodeType":"VariableDeclaration","scope":20592,"src":"23222:65:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":20538,"keyType":{"id":20535,"name":"uint8","nodeType":"ElementaryTypeName","src":"23230:5:87","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"23222:41:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":20537,"nodeType":"UserDefinedTypeName","pathNode":{"id":20536,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":21333,"src":"23239:23:87"},"referencedDeclaration":21333,"src":"23239:23:87","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":20542,"mutability":"mutable","name":"userConfig","nameLocation":"23331:10:87","nodeType":"VariableDeclaration","scope":20592,"src":"23293:48:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":20541,"nodeType":"UserDefinedTypeName","pathNode":{"id":20540,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"23293:30:87"},"referencedDeclaration":21322,"src":"23293:30:87","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":20544,"mutability":"mutable","name":"asset","nameLocation":"23355:5:87","nodeType":"VariableDeclaration","scope":20592,"src":"23347:13:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20543,"name":"address","nodeType":"ElementaryTypeName","src":"23347:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20546,"mutability":"mutable","name":"from","nameLocation":"23374:4:87","nodeType":"VariableDeclaration","scope":20592,"src":"23366:12:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20545,"name":"address","nodeType":"ElementaryTypeName","src":"23366:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20548,"mutability":"mutable","name":"reservesCount","nameLocation":"23392:13:87","nodeType":"VariableDeclaration","scope":20592,"src":"23384:21:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20547,"name":"uint256","nodeType":"ElementaryTypeName","src":"23384:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20550,"mutability":"mutable","name":"oracle","nameLocation":"23419:6:87","nodeType":"VariableDeclaration","scope":20592,"src":"23411:14:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20549,"name":"address","nodeType":"ElementaryTypeName","src":"23411:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":20552,"mutability":"mutable","name":"userEModeCategory","nameLocation":"23437:17:87","nodeType":"VariableDeclaration","scope":20592,"src":"23431:23:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":20551,"name":"uint8","nodeType":"ElementaryTypeName","src":"23431:5:87","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"23094:364:87"},"returnParameters":{"id":20554,"nodeType":"ParameterList","parameters":[],"src":"23473:0:87"},"scope":20908,"src":"23069:815:87","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":20609,"nodeType":"Block","src":"24060:77:87","statements":[{"expression":{"arguments":[{"id":20604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"24074:34:87","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20600,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20596,"src":"24075:7:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20601,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":21286,"src":"24075:21:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":20602,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getPaused","nodeType":"MemberAccess","referencedDeclaration":11083,"src":"24075:31:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":20603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24075:33:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20605,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"24110:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_PAUSED","nodeType":"MemberAccess","referencedDeclaration":12458,"src":"24110:21:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20599,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"24066:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24066:66:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20608,"nodeType":"ExpressionStatement","src":"24066:66:87"}]},"documentation":{"id":20593,"nodeType":"StructuredDocumentation","src":"23888:90:87","text":" @notice Validates a transfer action.\n @param reserve The reserve object"},"id":20610,"implemented":true,"kind":"function","modifiers":[],"name":"validateTransfer","nameLocation":"23990:16:87","nodeType":"FunctionDefinition","parameters":{"id":20597,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20596,"mutability":"mutable","name":"reserve","nameLocation":"24037:7:87","nodeType":"VariableDeclaration","scope":20610,"src":"24007:37:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":20595,"nodeType":"UserDefinedTypeName","pathNode":{"id":20594,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"24007:21:87"},"referencedDeclaration":21315,"src":"24007:21:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"src":"24006:39:87"},"returnParameters":{"id":20598,"nodeType":"ParameterList","parameters":[],"src":"24060:0:87"},"scope":20908,"src":"23981:156:87","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":20693,"nodeType":"Block","src":"24531:544:87","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20624,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20620,"src":"24545:5:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":20627,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24562:1:87","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":20626,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24554:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":20625,"name":"address","nodeType":"ElementaryTypeName","src":"24554:7:87","typeDescriptions":{}}},"id":20628,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24554:10:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"24545:19:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20630,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"24566:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ZERO_ADDRESS_NOT_VALID","nodeType":"MemberAccess","referencedDeclaration":12599,"src":"24566:29:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20623,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"24537:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24537:59:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20633,"nodeType":"ExpressionStatement","src":"24537:59:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":20638,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20635,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20618,"src":"24610:7:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20636,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"24610:10:87","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":20637,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24624:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"24610:15:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":20643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":20639,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20615,"src":"24629:12:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":20641,"indexExpression":{"hexValue":"30","id":20640,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24642:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24629:15:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":20642,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20620,"src":"24648:5:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"24629:24:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"24610:43:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20645,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"24655:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ASSET_NOT_LISTED","nodeType":"MemberAccess","referencedDeclaration":12614,"src":"24655:23:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20634,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"24602:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20647,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24602:77:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20648,"nodeType":"ExpressionStatement","src":"24602:77:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":20651,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20618,"src":"24700:7:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20652,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"24700:30:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20650,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"24693:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":20653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24693:38:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":20654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"24693:50:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":20655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24693:52:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":20656,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24749:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"24693:57:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20658,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"24752:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"STABLE_DEBT_NOT_ZERO","nodeType":"MemberAccess","referencedDeclaration":12533,"src":"24752:27:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20649,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"24685:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24685:95:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20661,"nodeType":"ExpressionStatement","src":"24685:95:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":20664,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20618,"src":"24808:7:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20665,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21306,"src":"24808:32:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20663,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"24801:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":20666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24801:40:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":20667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"24801:52:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":20668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24801:54:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":20669,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24859:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"24801:59:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20671,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"24868:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"VARIABLE_DEBT_SUPPLY_NOT_ZERO","nodeType":"MemberAccess","referencedDeclaration":12536,"src":"24868:36:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20662,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"24786:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20673,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24786:124:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20674,"nodeType":"ExpressionStatement","src":"24786:124:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":20677,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20618,"src":"24938:7:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20678,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"24938:21:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20676,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"24931:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":20679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24931:29:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":20680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1373,"src":"24931:41:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":20681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24931:43:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":20682,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24978:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"24931:48:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":20687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20684,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20618,"src":"24983:7:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData storage pointer"}},"id":20685,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"accruedToTreasury","nodeType":"MemberAccess","referencedDeclaration":21310,"src":"24983:25:87","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":20686,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25012:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"24983:30:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"24931:82:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20689,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"25021:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO","nodeType":"MemberAccess","referencedDeclaration":12530,"src":"25021:43:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20675,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"24916:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20691,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"24916:154:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20692,"nodeType":"ExpressionStatement","src":"24916:154:87"}]},"documentation":{"id":20611,"nodeType":"StructuredDocumentation","src":"24141:224:87","text":" @notice Validates a drop reserve action.\n @param reservesList The addresses of all the active reserves\n @param reserve The reserve object\n @param asset The address of the reserve's underlying asset"},"id":20694,"implemented":true,"kind":"function","modifiers":[],"name":"validateDropReserve","nameLocation":"24377:19:87","nodeType":"FunctionDefinition","parameters":{"id":20621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20615,"mutability":"mutable","name":"reservesList","nameLocation":"24438:12:87","nodeType":"VariableDeclaration","scope":20694,"src":"24402:48:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":20614,"keyType":{"id":20612,"name":"uint256","nodeType":"ElementaryTypeName","src":"24410:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"24402:27:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":20613,"name":"address","nodeType":"ElementaryTypeName","src":"24421:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":20618,"mutability":"mutable","name":"reserve","nameLocation":"24486:7:87","nodeType":"VariableDeclaration","scope":20694,"src":"24456:37:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":20617,"nodeType":"UserDefinedTypeName","pathNode":{"id":20616,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"24456:21:87"},"referencedDeclaration":21315,"src":"24456:21:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"},{"constant":false,"id":20620,"mutability":"mutable","name":"asset","nameLocation":"24507:5:87","nodeType":"VariableDeclaration","scope":20694,"src":"24499:13:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20619,"name":"address","nodeType":"ElementaryTypeName","src":"24499:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"24396:120:87"},"returnParameters":{"id":20622,"nodeType":"ParameterList","parameters":[],"src":"24531:0:87"},"scope":20908,"src":"24368:707:87","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":20786,"nodeType":"Block","src":"25867:943:87","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":20722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20720,"name":"categoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20716,"src":"25947:10:87","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":20721,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25961:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"25947:15:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":20728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":20723,"name":"eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20709,"src":"25966:15:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},"id":20725,"indexExpression":{"id":20724,"name":"categoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20716,"src":"25982:10:87","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25966:27:87","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage","typeString":"struct DataTypes.EModeCategory storage ref"}},"id":20726,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":21326,"src":"25966:48:87","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":20727,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26018:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"25966:53:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"25947:72:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20730,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"26027:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INCONSISTENT_EMODE_CATEGORY","nodeType":"MemberAccess","referencedDeclaration":12542,"src":"26027:34:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20719,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"25932:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20732,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"25932:135:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20733,"nodeType":"ExpressionStatement","src":"25932:135:87"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20734,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20712,"src":"26150:10:87","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":20735,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isEmpty","nodeType":"MemberAccess","referencedDeclaration":12194,"src":"26150:18:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory) pure returns (bool)"}},"id":20736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"26150:20:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20739,"nodeType":"IfStatement","src":"26146:47:87","trueBody":{"id":20738,"nodeType":"Block","src":"26172:21:87","statements":[{"functionReturnParameters":20718,"id":20737,"nodeType":"Return","src":"26180:7:87"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":20742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20740,"name":"categoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20716,"src":"26361:10:87","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":20741,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26375:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"26361:15:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20785,"nodeType":"IfStatement","src":"26357:449:87","trueBody":{"id":20784,"nodeType":"Block","src":"26378:428:87","statements":[{"id":20783,"nodeType":"UncheckedBlock","src":"26386:414:87","statements":[{"body":{"id":20781,"nodeType":"Block","src":"26450:342:87","statements":[{"condition":{"arguments":[{"id":20755,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20744,"src":"26489:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":20753,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20712,"src":"26466:10:87","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":20754,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isBorrowing","nodeType":"MemberAccess","referencedDeclaration":12045,"src":"26466:22:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (bool)"}},"id":20756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"26466:25:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20780,"nodeType":"IfStatement","src":"26462:320:87","trueBody":{"id":20779,"nodeType":"Block","src":"26493:289:87","statements":[{"assignments":[20761],"declarations":[{"constant":false,"id":20761,"mutability":"mutable","name":"configuration","nameLocation":"26548:13:87","nodeType":"VariableDeclaration","scope":20779,"src":"26507:54:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":20760,"nodeType":"UserDefinedTypeName","pathNode":{"id":20759,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"26507:33:87"},"referencedDeclaration":21318,"src":"26507:33:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":20768,"initialValue":{"expression":{"baseExpression":{"id":20762,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20700,"src":"26564:12:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":20766,"indexExpression":{"baseExpression":{"id":20763,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20704,"src":"26577:12:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":20765,"indexExpression":{"id":20764,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20744,"src":"26590:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26577:15:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26564:29:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":20767,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":21286,"src":"26564:58:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"VariableDeclarationStatement","src":"26507:115:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20770,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20761,"src":"26659:13:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":20771,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getEModeCategory","nodeType":"MemberAccess","referencedDeclaration":11647,"src":"26659:30:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":20772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"26659:32:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":20773,"name":"categoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20716,"src":"26695:10:87","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"26659:46:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":20775,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"26721:6:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":20776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INCONSISTENT_EMODE_CATEGORY","nodeType":"MemberAccess","referencedDeclaration":12542,"src":"26721:34:87","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":20769,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"26636:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":20777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"26636:133:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20778,"nodeType":"ExpressionStatement","src":"26636:133:87"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20747,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20744,"src":"26426:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":20748,"name":"reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20714,"src":"26430:13:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26426:17:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20782,"initializationExpression":{"assignments":[20744],"declarations":[{"constant":false,"id":20744,"mutability":"mutable","name":"i","nameLocation":"26419:1:87","nodeType":"VariableDeclaration","scope":20782,"src":"26411:9:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20743,"name":"uint256","nodeType":"ElementaryTypeName","src":"26411:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20746,"initialValue":{"hexValue":"30","id":20745,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26423:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"26411:13:87"},"loopExpression":{"expression":{"id":20751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"26445:3:87","subExpression":{"id":20750,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20744,"src":"26445:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20752,"nodeType":"ExpressionStatement","src":"26445:3:87"},"nodeType":"ForStatement","src":"26406:386:87"}]}]}}]},"documentation":{"id":20695,"nodeType":"StructuredDocumentation","src":"25079:441:87","text":" @notice Validates the action of setting efficiency mode.\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param eModeCategories a mapping storing configurations for all efficiency mode categories\n @param userConfig the user configuration\n @param reservesCount The total number of valid reserves\n @param categoryId The id of the category"},"id":20787,"implemented":true,"kind":"function","modifiers":[],"name":"validateSetUserEMode","nameLocation":"25532:20:87","nodeType":"FunctionDefinition","parameters":{"id":20717,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20700,"mutability":"mutable","name":"reservesData","nameLocation":"25608:12:87","nodeType":"VariableDeclaration","scope":20787,"src":"25558:62:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":20699,"keyType":{"id":20696,"name":"address","nodeType":"ElementaryTypeName","src":"25566:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"25558:41:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":20698,"nodeType":"UserDefinedTypeName","pathNode":{"id":20697,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"25577:21:87"},"referencedDeclaration":21315,"src":"25577:21:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":20704,"mutability":"mutable","name":"reservesList","nameLocation":"25662:12:87","nodeType":"VariableDeclaration","scope":20787,"src":"25626:48:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":20703,"keyType":{"id":20701,"name":"uint256","nodeType":"ElementaryTypeName","src":"25634:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"25626:27:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":20702,"name":"address","nodeType":"ElementaryTypeName","src":"25645:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":20709,"mutability":"mutable","name":"eModeCategories","nameLocation":"25730:15:87","nodeType":"VariableDeclaration","scope":20787,"src":"25680:65:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":20708,"keyType":{"id":20705,"name":"uint8","nodeType":"ElementaryTypeName","src":"25688:5:87","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"25680:41:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":20707,"nodeType":"UserDefinedTypeName","pathNode":{"id":20706,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":21333,"src":"25697:23:87"},"referencedDeclaration":21333,"src":"25697:23:87","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":20712,"mutability":"mutable","name":"userConfig","nameLocation":"25789:10:87","nodeType":"VariableDeclaration","scope":20787,"src":"25751:48:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":20711,"nodeType":"UserDefinedTypeName","pathNode":{"id":20710,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"25751:30:87"},"referencedDeclaration":21322,"src":"25751:30:87","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":20714,"mutability":"mutable","name":"reservesCount","nameLocation":"25813:13:87","nodeType":"VariableDeclaration","scope":20787,"src":"25805:21:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20713,"name":"uint256","nodeType":"ElementaryTypeName","src":"25805:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20716,"mutability":"mutable","name":"categoryId","nameLocation":"25838:10:87","nodeType":"VariableDeclaration","scope":20787,"src":"25832:16:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":20715,"name":"uint8","nodeType":"ElementaryTypeName","src":"25832:5:87","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"25552:300:87"},"returnParameters":{"id":20718,"nodeType":"ParameterList","parameters":[],"src":"25867:0:87"},"scope":20908,"src":"25523:1287:87","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":20843,"nodeType":"Block","src":"27592:317:87","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20808,"name":"reserveConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20803,"src":"27602:13:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":20809,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLtv","nodeType":"MemberAccess","referencedDeclaration":10777,"src":"27602:20:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":20810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"27602:22:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":20811,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27628:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"27602:27:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20816,"nodeType":"IfStatement","src":"27598:60:87","trueBody":{"id":20815,"nodeType":"Block","src":"27631:27:87","statements":[{"expression":{"hexValue":"66616c7365","id":20813,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"27646:5:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":20807,"id":20814,"nodeType":"Return","src":"27639:12:87"}]}},{"condition":{"id":20820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"27667:36:87","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20817,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20800,"src":"27668:10:87","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":20818,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isUsingAsCollateralAny","nodeType":"MemberAccess","referencedDeclaration":12131,"src":"27668:33:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory) pure returns (bool)"}},"id":20819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"27668:35:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20824,"nodeType":"IfStatement","src":"27663:68:87","trueBody":{"id":20823,"nodeType":"Block","src":"27705:26:87","statements":[{"expression":{"hexValue":"74727565","id":20821,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"27720:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":20807,"id":20822,"nodeType":"Return","src":"27713:11:87"}]}},{"assignments":[20826,null,null],"declarations":[{"constant":false,"id":20826,"mutability":"mutable","name":"isolationModeActive","nameLocation":"27742:19:87","nodeType":"VariableDeclaration","scope":20843,"src":"27737:24:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20825,"name":"bool","nodeType":"ElementaryTypeName","src":"27737:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null,null],"id":20832,"initialValue":{"arguments":[{"id":20829,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20793,"src":"27802:12:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":20830,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20797,"src":"27816:12:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}],"expression":{"id":20827,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20800,"src":"27769:10:87","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},"id":20828,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getIsolationModeState","nodeType":"MemberAccess","referencedDeclaration":12262,"src":"27769:32:87","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$returns$_t_bool_$_t_address_$_t_uint256_$bound_to$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address)) view returns (bool,address,uint256)"}},"id":20831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"27769:60:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$_t_uint256_$","typeString":"tuple(bool,address,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"27736:93:87"},{"expression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":20840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"27844:20:87","subExpression":{"id":20833,"name":"isolationModeActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20826,"src":"27845:19:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20835,"name":"reserveConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20803,"src":"27868:13:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":20836,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDebtCeiling","nodeType":"MemberAccess","referencedDeclaration":11491,"src":"27868:28:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":20837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"27868:30:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":20838,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27902:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"27868:35:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"27844:59:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":20841,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27843:61:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":20807,"id":20842,"nodeType":"Return","src":"27836:68:87"}]},"documentation":{"id":20788,"nodeType":"StructuredDocumentation","src":"26814:472:87","text":" @notice Validates the action of activating the asset as collateral.\n @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param userConfig the user configuration\n @param reserveConfig The reserve configuration\n @return True if the asset can be activated as collateral, false otherwise"},"id":20844,"implemented":true,"kind":"function","modifiers":[],"name":"validateUseAsCollateral","nameLocation":"27298:23:87","nodeType":"FunctionDefinition","parameters":{"id":20804,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20793,"mutability":"mutable","name":"reservesData","nameLocation":"27377:12:87","nodeType":"VariableDeclaration","scope":20844,"src":"27327:62:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":20792,"keyType":{"id":20789,"name":"address","nodeType":"ElementaryTypeName","src":"27335:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"27327:41:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":20791,"nodeType":"UserDefinedTypeName","pathNode":{"id":20790,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"27346:21:87"},"referencedDeclaration":21315,"src":"27346:21:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":20797,"mutability":"mutable","name":"reservesList","nameLocation":"27431:12:87","nodeType":"VariableDeclaration","scope":20844,"src":"27395:48:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":20796,"keyType":{"id":20794,"name":"uint256","nodeType":"ElementaryTypeName","src":"27403:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"27395:27:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":20795,"name":"address","nodeType":"ElementaryTypeName","src":"27414:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":20800,"mutability":"mutable","name":"userConfig","nameLocation":"27488:10:87","nodeType":"VariableDeclaration","scope":20844,"src":"27449:49:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":20799,"nodeType":"UserDefinedTypeName","pathNode":{"id":20798,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"27449:30:87"},"referencedDeclaration":21322,"src":"27449:30:87","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":20803,"mutability":"mutable","name":"reserveConfig","nameLocation":"27545:13:87","nodeType":"VariableDeclaration","scope":20844,"src":"27504:54:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":20802,"nodeType":"UserDefinedTypeName","pathNode":{"id":20801,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"27504:33:87"},"referencedDeclaration":21318,"src":"27504:33:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"27321:241:87"},"returnParameters":{"id":20807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20806,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20844,"src":"27586:4:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20805,"name":"bool","nodeType":"ElementaryTypeName","src":"27586:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"27585:6:87"},"scope":20908,"src":"27289:620:87","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":20906,"nodeType":"Block","src":"28821:565:87","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20867,"name":"reserveConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20860,"src":"28831:13:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":20868,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDebtCeiling","nodeType":"MemberAccess","referencedDeclaration":11491,"src":"28831:28:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":20869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"28831:30:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":20870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28865:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"28831:35:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20898,"nodeType":"IfStatement","src":"28827:464:87","trueBody":{"id":20897,"nodeType":"Block","src":"28868:423:87","statements":[{"assignments":[20874],"declarations":[{"constant":false,"id":20874,"mutability":"mutable","name":"addressesProvider","nameLocation":"29009:17:87","nodeType":"VariableDeclaration","scope":20897,"src":"28986:40:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":20873,"nodeType":"UserDefinedTypeName","pathNode":{"id":20872,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"28986:22:87"},"referencedDeclaration":5069,"src":"28986:22:87","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"id":20882,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":20876,"name":"aTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20862,"src":"29047:13:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20875,"name":"IncentivizedERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28349,"src":"29029:17:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IncentivizedERC20_$28349_$","typeString":"type(contract IncentivizedERC20)"}},"id":20877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"29029:32:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IncentivizedERC20_$28349","typeString":"contract IncentivizedERC20"}},"id":20878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"POOL","nodeType":"MemberAccess","referencedDeclaration":27929,"src":"29029:46:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IPool_$4860_$","typeString":"function () view external returns (contract IPool)"}},"id":20879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"29029:48:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":20880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ADDRESSES_PROVIDER","nodeType":"MemberAccess","referencedDeclaration":4748,"src":"29029:76:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IPoolAddressesProvider_$5069_$","typeString":"function () view external returns (contract IPoolAddressesProvider)"}},"id":20881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"29029:78:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"nodeType":"VariableDeclarationStatement","src":"28986:121:87"},{"condition":{"id":20893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"29128:135:87","subExpression":{"arguments":[{"id":20889,"name":"ISOLATED_COLLATERAL_SUPPLIER_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19179,"src":"29198:33:87","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":20890,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"29243:3:87","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"29243:10:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":20884,"name":"addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20874,"src":"29144:17:87","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":20885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLManager","nodeType":"MemberAccess","referencedDeclaration":5026,"src":"29144:31:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":20886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"29144:33:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20883,"name":"IAccessControl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1352,"src":"29129:14:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAccessControl_$1352_$","typeString":"type(contract IAccessControl)"}},"id":20887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"29129:49:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControl_$1352","typeString":"contract IAccessControl"}},"id":20888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"hasRole","nodeType":"MemberAccess","referencedDeclaration":1319,"src":"29129:57:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view external returns (bool)"}},"id":20892,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"29129:134:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20896,"nodeType":"IfStatement","src":"29115:169:87","trueBody":{"expression":{"hexValue":"66616c7365","id":20894,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"29279:5:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":20866,"id":20895,"nodeType":"Return","src":"29272:12:87"}}]}},{"expression":{"arguments":[{"id":20900,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20850,"src":"29327:12:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":20901,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20854,"src":"29341:12:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":20902,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20857,"src":"29355:10:87","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"}},{"id":20903,"name":"reserveConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20860,"src":"29367:13:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap storage pointer"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"id":20899,"name":"validateUseAsCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20844,"src":"29303:23:87","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveConfigurationMap memory) view returns (bool)"}},"id":20904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"29303:78:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":20866,"id":20905,"nodeType":"Return","src":"29296:85:87"}]},"documentation":{"id":20845,"nodeType":"StructuredDocumentation","src":"27913:566:87","text":" @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\n transfer, mint unbacked, and liquidate\n @dev This is used to ensure that isolated assets are not enabled as collateral automatically\n @param reservesData The state of all the reserves\n @param reservesList The addresses of all the active reserves\n @param userConfig the user configuration\n @param reserveConfig The reserve configuration\n @return True if the asset can be activated as collateral, false otherwise"},"id":20907,"implemented":true,"kind":"function","modifiers":[],"name":"validateAutomaticUseAsCollateral","nameLocation":"28491:32:87","nodeType":"FunctionDefinition","parameters":{"id":20863,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20850,"mutability":"mutable","name":"reservesData","nameLocation":"28579:12:87","nodeType":"VariableDeclaration","scope":20907,"src":"28529:62:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":20849,"keyType":{"id":20846,"name":"address","nodeType":"ElementaryTypeName","src":"28537:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"28529:41:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":20848,"nodeType":"UserDefinedTypeName","pathNode":{"id":20847,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"28548:21:87"},"referencedDeclaration":21315,"src":"28548:21:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":20854,"mutability":"mutable","name":"reservesList","nameLocation":"28633:12:87","nodeType":"VariableDeclaration","scope":20907,"src":"28597:48:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":20853,"keyType":{"id":20851,"name":"uint256","nodeType":"ElementaryTypeName","src":"28605:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"28597:27:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":20852,"name":"address","nodeType":"ElementaryTypeName","src":"28616:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":20857,"mutability":"mutable","name":"userConfig","nameLocation":"28690:10:87","nodeType":"VariableDeclaration","scope":20907,"src":"28651:49:87","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":20856,"nodeType":"UserDefinedTypeName","pathNode":{"id":20855,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"28651:30:87"},"referencedDeclaration":21322,"src":"28651:30:87","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":20860,"mutability":"mutable","name":"reserveConfig","nameLocation":"28747:13:87","nodeType":"VariableDeclaration","scope":20907,"src":"28706:54:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":20859,"nodeType":"UserDefinedTypeName","pathNode":{"id":20858,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"28706:33:87"},"referencedDeclaration":21318,"src":"28706:33:87","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":20862,"mutability":"mutable","name":"aTokenAddress","nameLocation":"28774:13:87","nodeType":"VariableDeclaration","scope":20907,"src":"28766:21:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20861,"name":"address","nodeType":"ElementaryTypeName","src":"28766:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"28523:268:87"},"returnParameters":{"id":20866,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20865,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20907,"src":"28815:4:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":20864,"name":"bool","nodeType":"ElementaryTypeName","src":"28815:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"28814:6:87"},"scope":20908,"src":"28482:904:87","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":20909,"src":"1731:27657:87","usedErrors":[]}],"src":"37:29352:87"},"id":87},"@aave/core-v3/contracts/protocol/libraries/math/MathUtils.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/MathUtils.sol","exportedSymbols":{"MathUtils":[21098],"WadRayMath":[21219]},"id":21099,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":20910,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:88"},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol","file":"./WadRayMath.sol","id":20912,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":21099,"sourceUnit":21220,"src":"62:44:88","symbolAliases":[{"foreign":{"id":20911,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:10:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"MathUtils","contractDependencies":[],"contractKind":"library","documentation":{"id":20913,"nodeType":"StructuredDocumentation","src":"108:136:88","text":" @title MathUtils library\n @author Aave\n @notice Provides functions to perform linear and compounded interest calculations"},"fullyImplemented":true,"id":21098,"linearizedBaseContracts":[21098],"name":"MathUtils","nameLocation":"253:9:88","nodeType":"ContractDefinition","nodes":[{"id":20916,"libraryName":{"id":20914,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":21219,"src":"273:10:88"},"nodeType":"UsingForDirective","src":"267:29:88","typeName":{"id":20915,"name":"uint256","nodeType":"ElementaryTypeName","src":"288:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"constant":true,"documentation":{"id":20917,"nodeType":"StructuredDocumentation","src":"300:28:88","text":"@dev Ignoring leap years"},"id":20920,"mutability":"constant","name":"SECONDS_PER_YEAR","nameLocation":"357:16:88","nodeType":"VariableDeclaration","scope":21098,"src":"331:53:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20918,"name":"uint256","nodeType":"ElementaryTypeName","src":"331:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"333635","id":20919,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"376:8:88","subdenomination":"days","typeDescriptions":{"typeIdentifier":"t_rational_31536000_by_1","typeString":"int_const 31536000"},"value":"365"},"visibility":"internal"},{"body":{"id":20955,"nodeType":"Block","src":"819:215:88","statements":[{"assignments":[20931],"declarations":[{"constant":false,"id":20931,"mutability":"mutable","name":"result","nameLocation":"864:6:88","nodeType":"VariableDeclaration","scope":20955,"src":"856:14:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20930,"name":"uint256","nodeType":"ElementaryTypeName","src":"856:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20942,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20932,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20923,"src":"873:4:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20933,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"881:5:88","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":20934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"881:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"id":20937,"name":"lastUpdateTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20925,"src":"907:19:88","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint40","typeString":"uint40"}],"id":20936,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"899:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":20935,"name":"uint256","nodeType":"ElementaryTypeName","src":"899:7:88","typeDescriptions":{}}},"id":20938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"899:28:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"881:46:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20940,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"880:48:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"873:55:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"856:72:88"},{"id":20949,"nodeType":"UncheckedBlock","src":"934:59:88","statements":[{"expression":{"id":20947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20943,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20931,"src":"952:6:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20944,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20931,"src":"961:6:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":20945,"name":"SECONDS_PER_YEAR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20920,"src":"970:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"961:25:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"952:34:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20948,"nodeType":"ExpressionStatement","src":"952:34:88"}]},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20950,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21219,"src":"1006:10:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$21219_$","typeString":"type(library WadRayMath)"}},"id":20951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RAY","nodeType":"MemberAccess","referencedDeclaration":21144,"src":"1006:14:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":20952,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20931,"src":"1023:6:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1006:23:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20929,"id":20954,"nodeType":"Return","src":"999:30:88"}]},"documentation":{"id":20921,"nodeType":"StructuredDocumentation","src":"389:308:88","text":" @dev Function to calculate the interest accumulated using a linear interest rate formula\n @param rate The interest rate, in ray\n @param lastUpdateTimestamp The timestamp of the last update of the interest\n @return The interest rate linearly accumulated during the timeDelta, in ray"},"id":20956,"implemented":true,"kind":"function","modifiers":[],"name":"calculateLinearInterest","nameLocation":"709:23:88","nodeType":"FunctionDefinition","parameters":{"id":20926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20923,"mutability":"mutable","name":"rate","nameLocation":"746:4:88","nodeType":"VariableDeclaration","scope":20956,"src":"738:12:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20922,"name":"uint256","nodeType":"ElementaryTypeName","src":"738:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20925,"mutability":"mutable","name":"lastUpdateTimestamp","nameLocation":"763:19:88","nodeType":"VariableDeclaration","scope":20956,"src":"756:26:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":20924,"name":"uint40","nodeType":"ElementaryTypeName","src":"756:6:88","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"732:54:88"},"returnParameters":{"id":20929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20928,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20956,"src":"810:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20927,"name":"uint256","nodeType":"ElementaryTypeName","src":"810:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"809:9:88"},"scope":21098,"src":"700:334:88","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":21078,"nodeType":"Block","src":"1933:819:88","statements":[{"assignments":[20969],"declarations":[{"constant":false,"id":20969,"mutability":"mutable","name":"exp","nameLocation":"1978:3:88","nodeType":"VariableDeclaration","scope":21078,"src":"1970:11:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20968,"name":"uint256","nodeType":"ElementaryTypeName","src":"1970:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20976,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20970,"name":"currentTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20963,"src":"1984:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"id":20973,"name":"lastUpdateTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20961,"src":"2011:19:88","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint40","typeString":"uint40"}],"id":20972,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2003:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":20971,"name":"uint256","nodeType":"ElementaryTypeName","src":"2003:7:88","typeDescriptions":{}}},"id":20974,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2003:28:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1984:47:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1970:61:88"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20977,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20969,"src":"2042:3:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":20978,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2049:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2042:8:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20984,"nodeType":"IfStatement","src":"2038:50:88","trueBody":{"id":20983,"nodeType":"Block","src":"2052:36:88","statements":[{"expression":{"expression":{"id":20980,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21219,"src":"2067:10:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$21219_$","typeString":"type(library WadRayMath)"}},"id":20981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RAY","nodeType":"MemberAccess","referencedDeclaration":21144,"src":"2067:14:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20967,"id":20982,"nodeType":"Return","src":"2060:21:88"}]}},{"assignments":[20986],"declarations":[{"constant":false,"id":20986,"mutability":"mutable","name":"expMinusOne","nameLocation":"2102:11:88","nodeType":"VariableDeclaration","scope":21078,"src":"2094:19:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20985,"name":"uint256","nodeType":"ElementaryTypeName","src":"2094:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20987,"nodeType":"VariableDeclarationStatement","src":"2094:19:88"},{"assignments":[20989],"declarations":[{"constant":false,"id":20989,"mutability":"mutable","name":"expMinusTwo","nameLocation":"2127:11:88","nodeType":"VariableDeclaration","scope":21078,"src":"2119:19:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20988,"name":"uint256","nodeType":"ElementaryTypeName","src":"2119:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20990,"nodeType":"VariableDeclarationStatement","src":"2119:19:88"},{"assignments":[20992],"declarations":[{"constant":false,"id":20992,"mutability":"mutable","name":"basePowerTwo","nameLocation":"2152:12:88","nodeType":"VariableDeclaration","scope":21078,"src":"2144:20:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20991,"name":"uint256","nodeType":"ElementaryTypeName","src":"2144:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20993,"nodeType":"VariableDeclarationStatement","src":"2144:20:88"},{"assignments":[20995],"declarations":[{"constant":false,"id":20995,"mutability":"mutable","name":"basePowerThree","nameLocation":"2178:14:88","nodeType":"VariableDeclaration","scope":21078,"src":"2170:22:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20994,"name":"uint256","nodeType":"ElementaryTypeName","src":"2170:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20996,"nodeType":"VariableDeclarationStatement","src":"2170:22:88"},{"id":21035,"nodeType":"UncheckedBlock","src":"2198:240:88","statements":[{"expression":{"id":21001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20997,"name":"expMinusOne","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20986,"src":"2216:11:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20998,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20969,"src":"2230:3:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":20999,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2236:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2230:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2216:21:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21002,"nodeType":"ExpressionStatement","src":"2216:21:88"},{"expression":{"id":21012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21003,"name":"expMinusTwo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20989,"src":"2246:11:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21004,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20969,"src":"2260:3:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"32","id":21005,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2266:1:88","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"2260:7:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":21010,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2280:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":21011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"2260:21:88","trueExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21007,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20969,"src":"2270:3:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"32","id":21008,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2276:1:88","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"2270:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2246:35:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21013,"nodeType":"ExpressionStatement","src":"2246:35:88"},{"expression":{"id":21024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21014,"name":"basePowerTwo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20992,"src":"2290:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":21017,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20959,"src":"2317:4:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":21015,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20959,"src":"2305:4:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"2305:11:88","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":21018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2305:17:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21021,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":21019,"name":"SECONDS_PER_YEAR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20920,"src":"2326:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":21020,"name":"SECONDS_PER_YEAR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20920,"src":"2345:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2326:35:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":21022,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"2325:37:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2305:57:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2290:72:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21025,"nodeType":"ExpressionStatement","src":"2290:72:88"},{"expression":{"id":21033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21026,"name":"basePowerThree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20995,"src":"2370:14:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":21029,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20959,"src":"2407:4:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":21027,"name":"basePowerTwo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20992,"src":"2387:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"2387:19:88","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":21030,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2387:25:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":21031,"name":"SECONDS_PER_YEAR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20920,"src":"2415:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2387:44:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2370:61:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21034,"nodeType":"ExpressionStatement","src":"2370:61:88"}]},{"assignments":[21037],"declarations":[{"constant":false,"id":21037,"mutability":"mutable","name":"secondTerm","nameLocation":"2452:10:88","nodeType":"VariableDeclaration","scope":21078,"src":"2444:18:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21036,"name":"uint256","nodeType":"ElementaryTypeName","src":"2444:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21043,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21038,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20969,"src":"2465:3:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":21039,"name":"expMinusOne","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20986,"src":"2471:11:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2465:17:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":21041,"name":"basePowerTwo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20992,"src":"2485:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2465:32:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2444:53:88"},{"id":21048,"nodeType":"UncheckedBlock","src":"2503:40:88","statements":[{"expression":{"id":21046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21044,"name":"secondTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21037,"src":"2521:10:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"hexValue":"32","id":21045,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2535:1:88","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"2521:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21047,"nodeType":"ExpressionStatement","src":"2521:15:88"}]},{"assignments":[21050],"declarations":[{"constant":false,"id":21050,"mutability":"mutable","name":"thirdTerm","nameLocation":"2556:9:88","nodeType":"VariableDeclaration","scope":21078,"src":"2548:17:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21049,"name":"uint256","nodeType":"ElementaryTypeName","src":"2548:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21058,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21051,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20969,"src":"2568:3:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":21052,"name":"expMinusOne","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20986,"src":"2574:11:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2568:17:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":21054,"name":"expMinusTwo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20989,"src":"2588:11:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2568:31:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":21056,"name":"basePowerThree","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20995,"src":"2602:14:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2568:48:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2548:68:88"},{"id":21063,"nodeType":"UncheckedBlock","src":"2622:39:88","statements":[{"expression":{"id":21061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21059,"name":"thirdTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21050,"src":"2640:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"hexValue":"36","id":21060,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2653:1:88","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"2640:14:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21062,"nodeType":"ExpressionStatement","src":"2640:14:88"}]},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21064,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21219,"src":"2674:10:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$21219_$","typeString":"type(library WadRayMath)"}},"id":21065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RAY","nodeType":"MemberAccess","referencedDeclaration":21144,"src":"2674:14:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21066,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20959,"src":"2692:4:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":21067,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20969,"src":"2699:3:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2692:10:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":21069,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2691:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":21070,"name":"SECONDS_PER_YEAR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20920,"src":"2706:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2691:31:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2674:48:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":21073,"name":"secondTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21037,"src":"2725:10:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2674:61:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":21075,"name":"thirdTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21050,"src":"2738:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2674:73:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20967,"id":21077,"nodeType":"Return","src":"2667:80:88"}]},"documentation":{"id":20957,"nodeType":"StructuredDocumentation","src":"1038:739:88","text":" @dev Function to calculate the interest using a compounded interest rate formula\n To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\n  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\n The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\n gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\n error per different time periods\n @param rate The interest rate, in ray\n @param lastUpdateTimestamp The timestamp of the last update of the interest\n @return The interest rate compounded during the timeDelta, in ray"},"id":21079,"implemented":true,"kind":"function","modifiers":[],"name":"calculateCompoundedInterest","nameLocation":"1789:27:88","nodeType":"FunctionDefinition","parameters":{"id":20964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20959,"mutability":"mutable","name":"rate","nameLocation":"1830:4:88","nodeType":"VariableDeclaration","scope":21079,"src":"1822:12:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20958,"name":"uint256","nodeType":"ElementaryTypeName","src":"1822:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20961,"mutability":"mutable","name":"lastUpdateTimestamp","nameLocation":"1847:19:88","nodeType":"VariableDeclaration","scope":21079,"src":"1840:26:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":20960,"name":"uint40","nodeType":"ElementaryTypeName","src":"1840:6:88","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"constant":false,"id":20963,"mutability":"mutable","name":"currentTimestamp","nameLocation":"1880:16:88","nodeType":"VariableDeclaration","scope":21079,"src":"1872:24:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20962,"name":"uint256","nodeType":"ElementaryTypeName","src":"1872:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1816:84:88"},"returnParameters":{"id":20967,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20966,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21079,"src":"1924:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20965,"name":"uint256","nodeType":"ElementaryTypeName","src":"1924:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1923:9:88"},"scope":21098,"src":"1780:972:88","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":21096,"nodeType":"Block","src":"3265:89:88","statements":[{"expression":{"arguments":[{"id":21090,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21082,"src":"3306:4:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21091,"name":"lastUpdateTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21084,"src":"3312:19:88","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},{"expression":{"id":21092,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3333:5:88","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":21093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"3333:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint40","typeString":"uint40"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21089,"name":"calculateCompoundedInterest","nodeType":"Identifier","overloadedDeclarations":[21079,21097],"referencedDeclaration":21079,"src":"3278:27:88","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint40_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint40,uint256) pure returns (uint256)"}},"id":21094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3278:71:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21088,"id":21095,"nodeType":"Return","src":"3271:78:88"}]},"documentation":{"id":21080,"nodeType":"StructuredDocumentation","src":"2756:383:88","text":" @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\n @param rate The interest rate (in ray)\n @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\n @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray"},"id":21097,"implemented":true,"kind":"function","modifiers":[],"name":"calculateCompoundedInterest","nameLocation":"3151:27:88","nodeType":"FunctionDefinition","parameters":{"id":21085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21082,"mutability":"mutable","name":"rate","nameLocation":"3192:4:88","nodeType":"VariableDeclaration","scope":21097,"src":"3184:12:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21081,"name":"uint256","nodeType":"ElementaryTypeName","src":"3184:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21084,"mutability":"mutable","name":"lastUpdateTimestamp","nameLocation":"3209:19:88","nodeType":"VariableDeclaration","scope":21097,"src":"3202:26:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":21083,"name":"uint40","nodeType":"ElementaryTypeName","src":"3202:6:88","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"3178:54:88"},"returnParameters":{"id":21088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21087,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21097,"src":"3256:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21086,"name":"uint256","nodeType":"ElementaryTypeName","src":"3256:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3255:9:88"},"scope":21098,"src":"3142:212:88","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":21099,"src":"245:3111:88","usedErrors":[]}],"src":"37:3320:88"},"id":88},"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol","exportedSymbols":{"PercentageMath":[21132]},"id":21133,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":21100,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:89"},{"abstract":false,"baseContracts":[],"canonicalName":"PercentageMath","contractDependencies":[],"contractKind":"library","documentation":{"id":21101,"nodeType":"StructuredDocumentation","src":"62:347:89","text":" @title PercentageMath library\n @author Aave\n @notice Provides functions to perform percentage calculations\n @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\n @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down."},"fullyImplemented":true,"id":21132,"linearizedBaseContracts":[21132],"name":"PercentageMath","nameLocation":"418:14:89","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":21104,"mutability":"constant","name":"PERCENTAGE_FACTOR","nameLocation":"504:17:89","nodeType":"VariableDeclaration","scope":21132,"src":"478:49:89","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21102,"name":"uint256","nodeType":"ElementaryTypeName","src":"478:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"316534","id":21103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"524:3:89","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"1e4"},"visibility":"internal"},{"constant":true,"id":21107,"mutability":"constant","name":"HALF_PERCENTAGE_FACTOR","nameLocation":"595:22:89","nodeType":"VariableDeclaration","scope":21132,"src":"569:56:89","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21105,"name":"uint256","nodeType":"ElementaryTypeName","src":"569:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"302e356534","id":21106,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"620:5:89","typeDescriptions":{"typeIdentifier":"t_rational_5000_by_1","typeString":"int_const 5000"},"value":"0.5e4"},"visibility":"internal"},{"body":{"id":21118,"nodeType":"Block","src":"1099:402:89","statements":[{"AST":{"nodeType":"YulBlock","src":"1207:290:89","statements":[{"body":{"nodeType":"YulBlock","src":"1368:30:89","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1385:1:89","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1388:1:89","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1378:6:89"},"nodeType":"YulFunctionCall","src":"1378:12:89"},"nodeType":"YulExpressionStatement","src":"1378:12:89"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"percentage","nodeType":"YulIdentifier","src":"1255:10:89"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1248:6:89"},"nodeType":"YulFunctionCall","src":"1248:18:89"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1288:5:89"},{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1307:1:89","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1303:3:89"},"nodeType":"YulFunctionCall","src":"1303:6:89"},{"name":"HALF_PERCENTAGE_FACTOR","nodeType":"YulIdentifier","src":"1311:22:89"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1299:3:89"},"nodeType":"YulFunctionCall","src":"1299:35:89"},{"name":"percentage","nodeType":"YulIdentifier","src":"1336:10:89"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"1295:3:89"},"nodeType":"YulFunctionCall","src":"1295:52:89"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1285:2:89"},"nodeType":"YulFunctionCall","src":"1285:63:89"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1278:6:89"},"nodeType":"YulFunctionCall","src":"1278:71:89"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1234:2:89"},"nodeType":"YulFunctionCall","src":"1234:125:89"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1218:6:89"},"nodeType":"YulFunctionCall","src":"1218:149:89"},"nodeType":"YulIf","src":"1215:183:89"},{"nodeType":"YulAssignment","src":"1406:85:89","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1428:5:89"},{"name":"percentage","nodeType":"YulIdentifier","src":"1435:10:89"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"1424:3:89"},"nodeType":"YulFunctionCall","src":"1424:22:89"},{"name":"HALF_PERCENTAGE_FACTOR","nodeType":"YulIdentifier","src":"1448:22:89"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1420:3:89"},"nodeType":"YulFunctionCall","src":"1420:51:89"},{"name":"PERCENTAGE_FACTOR","nodeType":"YulIdentifier","src":"1473:17:89"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"1416:3:89"},"nodeType":"YulFunctionCall","src":"1416:75:89"},"variableNames":[{"name":"result","nodeType":"YulIdentifier","src":"1406:6:89"}]}]},"evmVersion":"london","externalReferences":[{"declaration":21107,"isOffset":false,"isSlot":false,"src":"1311:22:89","valueSize":1},{"declaration":21107,"isOffset":false,"isSlot":false,"src":"1448:22:89","valueSize":1},{"declaration":21104,"isOffset":false,"isSlot":false,"src":"1473:17:89","valueSize":1},{"declaration":21112,"isOffset":false,"isSlot":false,"src":"1255:10:89","valueSize":1},{"declaration":21112,"isOffset":false,"isSlot":false,"src":"1336:10:89","valueSize":1},{"declaration":21112,"isOffset":false,"isSlot":false,"src":"1435:10:89","valueSize":1},{"declaration":21115,"isOffset":false,"isSlot":false,"src":"1406:6:89","valueSize":1},{"declaration":21110,"isOffset":false,"isSlot":false,"src":"1288:5:89","valueSize":1},{"declaration":21110,"isOffset":false,"isSlot":false,"src":"1428:5:89","valueSize":1}],"id":21117,"nodeType":"InlineAssembly","src":"1198:299:89"}]},"documentation":{"id":21108,"nodeType":"StructuredDocumentation","src":"630:372:89","text":" @notice Executes a percentage multiplication\n @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n @param value The value of which the percentage needs to be calculated\n @param percentage The percentage of the value to be calculated\n @return result value percentmul percentage"},"id":21119,"implemented":true,"kind":"function","modifiers":[],"name":"percentMul","nameLocation":"1014:10:89","nodeType":"FunctionDefinition","parameters":{"id":21113,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21110,"mutability":"mutable","name":"value","nameLocation":"1033:5:89","nodeType":"VariableDeclaration","scope":21119,"src":"1025:13:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21109,"name":"uint256","nodeType":"ElementaryTypeName","src":"1025:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21112,"mutability":"mutable","name":"percentage","nameLocation":"1048:10:89","nodeType":"VariableDeclaration","scope":21119,"src":"1040:18:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21111,"name":"uint256","nodeType":"ElementaryTypeName","src":"1040:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1024:35:89"},"returnParameters":{"id":21116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21115,"mutability":"mutable","name":"result","nameLocation":"1091:6:89","nodeType":"VariableDeclaration","scope":21119,"src":"1083:14:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21114,"name":"uint256","nodeType":"ElementaryTypeName","src":"1083:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1082:16:89"},"scope":21132,"src":"1005:496:89","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":21130,"nodeType":"Block","src":"1968:378:89","statements":[{"AST":{"nodeType":"YulBlock","src":"2075:267:89","statements":[{"body":{"nodeType":"YulBlock","src":"2217:30:89","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2234:1:89","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2237:1:89","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2227:6:89"},"nodeType":"YulFunctionCall","src":"2227:12:89"},"nodeType":"YulExpressionStatement","src":"2227:12:89"}]},"condition":{"arguments":[{"arguments":[{"name":"percentage","nodeType":"YulIdentifier","src":"2105:10:89"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2098:6:89"},"nodeType":"YulFunctionCall","src":"2098:18:89"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2143:5:89"},{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2162:1:89","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2158:3:89"},"nodeType":"YulFunctionCall","src":"2158:6:89"},{"arguments":[{"name":"percentage","nodeType":"YulIdentifier","src":"2170:10:89"},{"kind":"number","nodeType":"YulLiteral","src":"2182:1:89","type":"","value":"2"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"2166:3:89"},"nodeType":"YulFunctionCall","src":"2166:18:89"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2154:3:89"},"nodeType":"YulFunctionCall","src":"2154:31:89"},{"name":"PERCENTAGE_FACTOR","nodeType":"YulIdentifier","src":"2187:17:89"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"2150:3:89"},"nodeType":"YulFunctionCall","src":"2150:55:89"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2140:2:89"},"nodeType":"YulFunctionCall","src":"2140:66:89"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2133:6:89"},"nodeType":"YulFunctionCall","src":"2133:74:89"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2126:6:89"},"nodeType":"YulFunctionCall","src":"2126:82:89"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2086:2:89"},"nodeType":"YulFunctionCall","src":"2086:130:89"},"nodeType":"YulIf","src":"2083:164:89"},{"nodeType":"YulAssignment","src":"2255:81:89","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2277:5:89"},{"name":"PERCENTAGE_FACTOR","nodeType":"YulIdentifier","src":"2284:17:89"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"2273:3:89"},"nodeType":"YulFunctionCall","src":"2273:29:89"},{"arguments":[{"name":"percentage","nodeType":"YulIdentifier","src":"2308:10:89"},{"kind":"number","nodeType":"YulLiteral","src":"2320:1:89","type":"","value":"2"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"2304:3:89"},"nodeType":"YulFunctionCall","src":"2304:18:89"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2269:3:89"},"nodeType":"YulFunctionCall","src":"2269:54:89"},{"name":"percentage","nodeType":"YulIdentifier","src":"2325:10:89"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"2265:3:89"},"nodeType":"YulFunctionCall","src":"2265:71:89"},"variableNames":[{"name":"result","nodeType":"YulIdentifier","src":"2255:6:89"}]}]},"evmVersion":"london","externalReferences":[{"declaration":21104,"isOffset":false,"isSlot":false,"src":"2187:17:89","valueSize":1},{"declaration":21104,"isOffset":false,"isSlot":false,"src":"2284:17:89","valueSize":1},{"declaration":21124,"isOffset":false,"isSlot":false,"src":"2105:10:89","valueSize":1},{"declaration":21124,"isOffset":false,"isSlot":false,"src":"2170:10:89","valueSize":1},{"declaration":21124,"isOffset":false,"isSlot":false,"src":"2308:10:89","valueSize":1},{"declaration":21124,"isOffset":false,"isSlot":false,"src":"2325:10:89","valueSize":1},{"declaration":21127,"isOffset":false,"isSlot":false,"src":"2255:6:89","valueSize":1},{"declaration":21122,"isOffset":false,"isSlot":false,"src":"2143:5:89","valueSize":1},{"declaration":21122,"isOffset":false,"isSlot":false,"src":"2277:5:89","valueSize":1}],"id":21129,"nodeType":"InlineAssembly","src":"2066:276:89"}]},"documentation":{"id":21120,"nodeType":"StructuredDocumentation","src":"1505:366:89","text":" @notice Executes a percentage division\n @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n @param value The value of which the percentage needs to be calculated\n @param percentage The percentage of the value to be calculated\n @return result value percentdiv percentage"},"id":21131,"implemented":true,"kind":"function","modifiers":[],"name":"percentDiv","nameLocation":"1883:10:89","nodeType":"FunctionDefinition","parameters":{"id":21125,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21122,"mutability":"mutable","name":"value","nameLocation":"1902:5:89","nodeType":"VariableDeclaration","scope":21131,"src":"1894:13:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21121,"name":"uint256","nodeType":"ElementaryTypeName","src":"1894:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21124,"mutability":"mutable","name":"percentage","nameLocation":"1917:10:89","nodeType":"VariableDeclaration","scope":21131,"src":"1909:18:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21123,"name":"uint256","nodeType":"ElementaryTypeName","src":"1909:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1893:35:89"},"returnParameters":{"id":21128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21127,"mutability":"mutable","name":"result","nameLocation":"1960:6:89","nodeType":"VariableDeclaration","scope":21131,"src":"1952:14:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21126,"name":"uint256","nodeType":"ElementaryTypeName","src":"1952:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1951:16:89"},"scope":21132,"src":"1874:472:89","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":21133,"src":"410:1938:89","usedErrors":[]}],"src":"37:2312:89"},"id":89},"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol","exportedSymbols":{"WadRayMath":[21219]},"id":21220,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":21134,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:90"},{"abstract":false,"baseContracts":[],"canonicalName":"WadRayMath","contractDependencies":[],"contractKind":"library","documentation":{"id":21135,"nodeType":"StructuredDocumentation","src":"62:376:90","text":" @title WadRayMath library\n @author Aave\n @notice Provides functions to perform calculations with Wad and Ray units\n @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\n with 27 digits of precision)\n @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down."},"fullyImplemented":true,"id":21219,"linearizedBaseContracts":[21219],"name":"WadRayMath","nameLocation":"447:10:90","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":21138,"mutability":"constant","name":"WAD","nameLocation":"610:3:90","nodeType":"VariableDeclaration","scope":21219,"src":"584:36:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21136,"name":"uint256","nodeType":"ElementaryTypeName","src":"584:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653138","id":21137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"616:4:90","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":21141,"mutability":"constant","name":"HALF_WAD","nameLocation":"650:8:90","nodeType":"VariableDeclaration","scope":21219,"src":"624:43:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21139,"name":"uint256","nodeType":"ElementaryTypeName","src":"624:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"302e35653138","id":21140,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"661:6:90","typeDescriptions":{"typeIdentifier":"t_rational_500000000000000000_by_1","typeString":"int_const 500000000000000000"},"value":"0.5e18"},"visibility":"internal"},{"constant":true,"id":21144,"mutability":"constant","name":"RAY","nameLocation":"698:3:90","nodeType":"VariableDeclaration","scope":21219,"src":"672:36:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21142,"name":"uint256","nodeType":"ElementaryTypeName","src":"672:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653237","id":21143,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"704:4:90","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000000000000_by_1","typeString":"int_const 1000000000000000000000000000"},"value":"1e27"},"visibility":"internal"},{"constant":true,"id":21147,"mutability":"constant","name":"HALF_RAY","nameLocation":"738:8:90","nodeType":"VariableDeclaration","scope":21219,"src":"712:43:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21145,"name":"uint256","nodeType":"ElementaryTypeName","src":"712:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"302e35653237","id":21146,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"749:6:90","typeDescriptions":{"typeIdentifier":"t_rational_500000000000000000000000000_by_1","typeString":"int_const 500000000000000000000000000"},"value":"0.5e27"},"visibility":"internal"},{"constant":true,"id":21150,"mutability":"constant","name":"WAD_RAY_RATIO","nameLocation":"786:13:90","nodeType":"VariableDeclaration","scope":21219,"src":"760:45:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21148,"name":"uint256","nodeType":"ElementaryTypeName","src":"760:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"316539","id":21149,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"802:3:90","typeDescriptions":{"typeIdentifier":"t_rational_1000000000_by_1","typeString":"int_const 1000000000"},"value":"1e9"},"visibility":"internal"},{"body":{"id":21161,"nodeType":"Block","src":"1147:247:90","statements":[{"AST":{"nodeType":"YulBlock","src":"1228:162:90","statements":[{"body":{"nodeType":"YulBlock","src":"1307:30:90","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1324:1:90","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1327:1:90","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1317:6:90"},"nodeType":"YulFunctionCall","src":"1317:12:90"},"nodeType":"YulExpressionStatement","src":"1317:12:90"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"b","nodeType":"YulIdentifier","src":"1256:1:90"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1249:6:90"},"nodeType":"YulFunctionCall","src":"1249:9:90"},{"arguments":[{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"1270:1:90"},{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1285:1:90","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1281:3:90"},"nodeType":"YulFunctionCall","src":"1281:6:90"},{"name":"HALF_WAD","nodeType":"YulIdentifier","src":"1289:8:90"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1277:3:90"},"nodeType":"YulFunctionCall","src":"1277:21:90"},{"name":"b","nodeType":"YulIdentifier","src":"1300:1:90"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"1273:3:90"},"nodeType":"YulFunctionCall","src":"1273:29:90"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1267:2:90"},"nodeType":"YulFunctionCall","src":"1267:36:90"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1260:6:90"},"nodeType":"YulFunctionCall","src":"1260:44:90"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1246:2:90"},"nodeType":"YulFunctionCall","src":"1246:59:90"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1239:6:90"},"nodeType":"YulFunctionCall","src":"1239:67:90"},"nodeType":"YulIf","src":"1236:101:90"},{"nodeType":"YulAssignment","src":"1345:39:90","value":{"arguments":[{"arguments":[{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"1362:1:90"},{"name":"b","nodeType":"YulIdentifier","src":"1365:1:90"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"1358:3:90"},"nodeType":"YulFunctionCall","src":"1358:9:90"},{"name":"HALF_WAD","nodeType":"YulIdentifier","src":"1369:8:90"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1354:3:90"},"nodeType":"YulFunctionCall","src":"1354:24:90"},{"name":"WAD","nodeType":"YulIdentifier","src":"1380:3:90"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"1350:3:90"},"nodeType":"YulFunctionCall","src":"1350:34:90"},"variableNames":[{"name":"c","nodeType":"YulIdentifier","src":"1345:1:90"}]}]},"evmVersion":"london","externalReferences":[{"declaration":21141,"isOffset":false,"isSlot":false,"src":"1289:8:90","valueSize":1},{"declaration":21141,"isOffset":false,"isSlot":false,"src":"1369:8:90","valueSize":1},{"declaration":21138,"isOffset":false,"isSlot":false,"src":"1380:3:90","valueSize":1},{"declaration":21153,"isOffset":false,"isSlot":false,"src":"1270:1:90","valueSize":1},{"declaration":21153,"isOffset":false,"isSlot":false,"src":"1362:1:90","valueSize":1},{"declaration":21155,"isOffset":false,"isSlot":false,"src":"1256:1:90","valueSize":1},{"declaration":21155,"isOffset":false,"isSlot":false,"src":"1300:1:90","valueSize":1},{"declaration":21155,"isOffset":false,"isSlot":false,"src":"1365:1:90","valueSize":1},{"declaration":21158,"isOffset":false,"isSlot":false,"src":"1345:1:90","valueSize":1}],"id":21160,"nodeType":"InlineAssembly","src":"1219:171:90"}]},"documentation":{"id":21151,"nodeType":"StructuredDocumentation","src":"810:262:90","text":" @dev Multiplies two wad, rounding half up to the nearest wad\n @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n @param a Wad\n @param b Wad\n @return c = a*b, in wad"},"id":21162,"implemented":true,"kind":"function","modifiers":[],"name":"wadMul","nameLocation":"1084:6:90","nodeType":"FunctionDefinition","parameters":{"id":21156,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21153,"mutability":"mutable","name":"a","nameLocation":"1099:1:90","nodeType":"VariableDeclaration","scope":21162,"src":"1091:9:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21152,"name":"uint256","nodeType":"ElementaryTypeName","src":"1091:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21155,"mutability":"mutable","name":"b","nameLocation":"1110:1:90","nodeType":"VariableDeclaration","scope":21162,"src":"1102:9:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21154,"name":"uint256","nodeType":"ElementaryTypeName","src":"1102:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1090:22:90"},"returnParameters":{"id":21159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21158,"mutability":"mutable","name":"c","nameLocation":"1144:1:90","nodeType":"VariableDeclaration","scope":21162,"src":"1136:9:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21157,"name":"uint256","nodeType":"ElementaryTypeName","src":"1136:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1135:11:90"},"scope":21219,"src":"1075:319:90","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":21173,"nodeType":"Block","src":"1732:250:90","statements":[{"AST":{"nodeType":"YulBlock","src":"1812:166:90","statements":[{"body":{"nodeType":"YulBlock","src":"1894:30:90","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1911:1:90","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1914:1:90","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1904:6:90"},"nodeType":"YulFunctionCall","src":"1904:12:90"},"nodeType":"YulExpressionStatement","src":"1904:12:90"}]},"condition":{"arguments":[{"arguments":[{"name":"b","nodeType":"YulIdentifier","src":"1833:1:90"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1826:6:90"},"nodeType":"YulFunctionCall","src":"1826:9:90"},{"arguments":[{"arguments":[{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"1854:1:90"},{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1869:1:90","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1865:3:90"},"nodeType":"YulFunctionCall","src":"1865:6:90"},{"arguments":[{"name":"b","nodeType":"YulIdentifier","src":"1877:1:90"},{"kind":"number","nodeType":"YulLiteral","src":"1880:1:90","type":"","value":"2"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"1873:3:90"},"nodeType":"YulFunctionCall","src":"1873:9:90"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1861:3:90"},"nodeType":"YulFunctionCall","src":"1861:22:90"},{"name":"WAD","nodeType":"YulIdentifier","src":"1885:3:90"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"1857:3:90"},"nodeType":"YulFunctionCall","src":"1857:32:90"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1851:2:90"},"nodeType":"YulFunctionCall","src":"1851:39:90"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1844:6:90"},"nodeType":"YulFunctionCall","src":"1844:47:90"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1837:6:90"},"nodeType":"YulFunctionCall","src":"1837:55:90"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1823:2:90"},"nodeType":"YulFunctionCall","src":"1823:70:90"},"nodeType":"YulIf","src":"1820:104:90"},{"nodeType":"YulAssignment","src":"1932:40:90","value":{"arguments":[{"arguments":[{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"1949:1:90"},{"name":"WAD","nodeType":"YulIdentifier","src":"1952:3:90"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"1945:3:90"},"nodeType":"YulFunctionCall","src":"1945:11:90"},{"arguments":[{"name":"b","nodeType":"YulIdentifier","src":"1962:1:90"},{"kind":"number","nodeType":"YulLiteral","src":"1965:1:90","type":"","value":"2"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"1958:3:90"},"nodeType":"YulFunctionCall","src":"1958:9:90"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1941:3:90"},"nodeType":"YulFunctionCall","src":"1941:27:90"},{"name":"b","nodeType":"YulIdentifier","src":"1970:1:90"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"1937:3:90"},"nodeType":"YulFunctionCall","src":"1937:35:90"},"variableNames":[{"name":"c","nodeType":"YulIdentifier","src":"1932:1:90"}]}]},"evmVersion":"london","externalReferences":[{"declaration":21138,"isOffset":false,"isSlot":false,"src":"1885:3:90","valueSize":1},{"declaration":21138,"isOffset":false,"isSlot":false,"src":"1952:3:90","valueSize":1},{"declaration":21165,"isOffset":false,"isSlot":false,"src":"1854:1:90","valueSize":1},{"declaration":21165,"isOffset":false,"isSlot":false,"src":"1949:1:90","valueSize":1},{"declaration":21167,"isOffset":false,"isSlot":false,"src":"1833:1:90","valueSize":1},{"declaration":21167,"isOffset":false,"isSlot":false,"src":"1877:1:90","valueSize":1},{"declaration":21167,"isOffset":false,"isSlot":false,"src":"1962:1:90","valueSize":1},{"declaration":21167,"isOffset":false,"isSlot":false,"src":"1970:1:90","valueSize":1},{"declaration":21170,"isOffset":false,"isSlot":false,"src":"1932:1:90","valueSize":1}],"id":21172,"nodeType":"InlineAssembly","src":"1803:175:90"}]},"documentation":{"id":21163,"nodeType":"StructuredDocumentation","src":"1398:259:90","text":" @dev Divides two wad, rounding half up to the nearest wad\n @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n @param a Wad\n @param b Wad\n @return c = a/b, in wad"},"id":21174,"implemented":true,"kind":"function","modifiers":[],"name":"wadDiv","nameLocation":"1669:6:90","nodeType":"FunctionDefinition","parameters":{"id":21168,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21165,"mutability":"mutable","name":"a","nameLocation":"1684:1:90","nodeType":"VariableDeclaration","scope":21174,"src":"1676:9:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21164,"name":"uint256","nodeType":"ElementaryTypeName","src":"1676:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21167,"mutability":"mutable","name":"b","nameLocation":"1695:1:90","nodeType":"VariableDeclaration","scope":21174,"src":"1687:9:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21166,"name":"uint256","nodeType":"ElementaryTypeName","src":"1687:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1675:22:90"},"returnParameters":{"id":21171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21170,"mutability":"mutable","name":"c","nameLocation":"1729:1:90","nodeType":"VariableDeclaration","scope":21174,"src":"1721:9:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21169,"name":"uint256","nodeType":"ElementaryTypeName","src":"1721:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1720:11:90"},"scope":21219,"src":"1660:322:90","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":21185,"nodeType":"Block","src":"2325:247:90","statements":[{"AST":{"nodeType":"YulBlock","src":"2406:162:90","statements":[{"body":{"nodeType":"YulBlock","src":"2485:30:90","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2502:1:90","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2505:1:90","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2495:6:90"},"nodeType":"YulFunctionCall","src":"2495:12:90"},"nodeType":"YulExpressionStatement","src":"2495:12:90"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"b","nodeType":"YulIdentifier","src":"2434:1:90"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2427:6:90"},"nodeType":"YulFunctionCall","src":"2427:9:90"},{"arguments":[{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"2448:1:90"},{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2463:1:90","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2459:3:90"},"nodeType":"YulFunctionCall","src":"2459:6:90"},{"name":"HALF_RAY","nodeType":"YulIdentifier","src":"2467:8:90"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2455:3:90"},"nodeType":"YulFunctionCall","src":"2455:21:90"},{"name":"b","nodeType":"YulIdentifier","src":"2478:1:90"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"2451:3:90"},"nodeType":"YulFunctionCall","src":"2451:29:90"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2445:2:90"},"nodeType":"YulFunctionCall","src":"2445:36:90"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2438:6:90"},"nodeType":"YulFunctionCall","src":"2438:44:90"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2424:2:90"},"nodeType":"YulFunctionCall","src":"2424:59:90"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2417:6:90"},"nodeType":"YulFunctionCall","src":"2417:67:90"},"nodeType":"YulIf","src":"2414:101:90"},{"nodeType":"YulAssignment","src":"2523:39:90","value":{"arguments":[{"arguments":[{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"2540:1:90"},{"name":"b","nodeType":"YulIdentifier","src":"2543:1:90"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"2536:3:90"},"nodeType":"YulFunctionCall","src":"2536:9:90"},{"name":"HALF_RAY","nodeType":"YulIdentifier","src":"2547:8:90"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2532:3:90"},"nodeType":"YulFunctionCall","src":"2532:24:90"},{"name":"RAY","nodeType":"YulIdentifier","src":"2558:3:90"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"2528:3:90"},"nodeType":"YulFunctionCall","src":"2528:34:90"},"variableNames":[{"name":"c","nodeType":"YulIdentifier","src":"2523:1:90"}]}]},"evmVersion":"london","externalReferences":[{"declaration":21147,"isOffset":false,"isSlot":false,"src":"2467:8:90","valueSize":1},{"declaration":21147,"isOffset":false,"isSlot":false,"src":"2547:8:90","valueSize":1},{"declaration":21144,"isOffset":false,"isSlot":false,"src":"2558:3:90","valueSize":1},{"declaration":21177,"isOffset":false,"isSlot":false,"src":"2448:1:90","valueSize":1},{"declaration":21177,"isOffset":false,"isSlot":false,"src":"2540:1:90","valueSize":1},{"declaration":21179,"isOffset":false,"isSlot":false,"src":"2434:1:90","valueSize":1},{"declaration":21179,"isOffset":false,"isSlot":false,"src":"2478:1:90","valueSize":1},{"declaration":21179,"isOffset":false,"isSlot":false,"src":"2543:1:90","valueSize":1},{"declaration":21182,"isOffset":false,"isSlot":false,"src":"2523:1:90","valueSize":1}],"id":21184,"nodeType":"InlineAssembly","src":"2397:171:90"}]},"documentation":{"id":21175,"nodeType":"StructuredDocumentation","src":"1986:264:90","text":" @notice Multiplies two ray, rounding half up to the nearest ray\n @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n @param a Ray\n @param b Ray\n @return c = a raymul b"},"id":21186,"implemented":true,"kind":"function","modifiers":[],"name":"rayMul","nameLocation":"2262:6:90","nodeType":"FunctionDefinition","parameters":{"id":21180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21177,"mutability":"mutable","name":"a","nameLocation":"2277:1:90","nodeType":"VariableDeclaration","scope":21186,"src":"2269:9:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21176,"name":"uint256","nodeType":"ElementaryTypeName","src":"2269:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21179,"mutability":"mutable","name":"b","nameLocation":"2288:1:90","nodeType":"VariableDeclaration","scope":21186,"src":"2280:9:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21178,"name":"uint256","nodeType":"ElementaryTypeName","src":"2280:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2268:22:90"},"returnParameters":{"id":21183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21182,"mutability":"mutable","name":"c","nameLocation":"2322:1:90","nodeType":"VariableDeclaration","scope":21186,"src":"2314:9:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21181,"name":"uint256","nodeType":"ElementaryTypeName","src":"2314:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2313:11:90"},"scope":21219,"src":"2253:319:90","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":21197,"nodeType":"Block","src":"2912:250:90","statements":[{"AST":{"nodeType":"YulBlock","src":"2992:166:90","statements":[{"body":{"nodeType":"YulBlock","src":"3074:30:90","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3091:1:90","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3094:1:90","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3084:6:90"},"nodeType":"YulFunctionCall","src":"3084:12:90"},"nodeType":"YulExpressionStatement","src":"3084:12:90"}]},"condition":{"arguments":[{"arguments":[{"name":"b","nodeType":"YulIdentifier","src":"3013:1:90"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3006:6:90"},"nodeType":"YulFunctionCall","src":"3006:9:90"},{"arguments":[{"arguments":[{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"3034:1:90"},{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3049:1:90","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3045:3:90"},"nodeType":"YulFunctionCall","src":"3045:6:90"},{"arguments":[{"name":"b","nodeType":"YulIdentifier","src":"3057:1:90"},{"kind":"number","nodeType":"YulLiteral","src":"3060:1:90","type":"","value":"2"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"3053:3:90"},"nodeType":"YulFunctionCall","src":"3053:9:90"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3041:3:90"},"nodeType":"YulFunctionCall","src":"3041:22:90"},{"name":"RAY","nodeType":"YulIdentifier","src":"3065:3:90"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"3037:3:90"},"nodeType":"YulFunctionCall","src":"3037:32:90"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3031:2:90"},"nodeType":"YulFunctionCall","src":"3031:39:90"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3024:6:90"},"nodeType":"YulFunctionCall","src":"3024:47:90"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3017:6:90"},"nodeType":"YulFunctionCall","src":"3017:55:90"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"3003:2:90"},"nodeType":"YulFunctionCall","src":"3003:70:90"},"nodeType":"YulIf","src":"3000:104:90"},{"nodeType":"YulAssignment","src":"3112:40:90","value":{"arguments":[{"arguments":[{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"3129:1:90"},{"name":"RAY","nodeType":"YulIdentifier","src":"3132:3:90"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"3125:3:90"},"nodeType":"YulFunctionCall","src":"3125:11:90"},{"arguments":[{"name":"b","nodeType":"YulIdentifier","src":"3142:1:90"},{"kind":"number","nodeType":"YulLiteral","src":"3145:1:90","type":"","value":"2"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"3138:3:90"},"nodeType":"YulFunctionCall","src":"3138:9:90"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3121:3:90"},"nodeType":"YulFunctionCall","src":"3121:27:90"},{"name":"b","nodeType":"YulIdentifier","src":"3150:1:90"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"3117:3:90"},"nodeType":"YulFunctionCall","src":"3117:35:90"},"variableNames":[{"name":"c","nodeType":"YulIdentifier","src":"3112:1:90"}]}]},"evmVersion":"london","externalReferences":[{"declaration":21144,"isOffset":false,"isSlot":false,"src":"3065:3:90","valueSize":1},{"declaration":21144,"isOffset":false,"isSlot":false,"src":"3132:3:90","valueSize":1},{"declaration":21189,"isOffset":false,"isSlot":false,"src":"3034:1:90","valueSize":1},{"declaration":21189,"isOffset":false,"isSlot":false,"src":"3129:1:90","valueSize":1},{"declaration":21191,"isOffset":false,"isSlot":false,"src":"3013:1:90","valueSize":1},{"declaration":21191,"isOffset":false,"isSlot":false,"src":"3057:1:90","valueSize":1},{"declaration":21191,"isOffset":false,"isSlot":false,"src":"3142:1:90","valueSize":1},{"declaration":21191,"isOffset":false,"isSlot":false,"src":"3150:1:90","valueSize":1},{"declaration":21194,"isOffset":false,"isSlot":false,"src":"3112:1:90","valueSize":1}],"id":21196,"nodeType":"InlineAssembly","src":"2983:175:90"}]},"documentation":{"id":21187,"nodeType":"StructuredDocumentation","src":"2576:261:90","text":" @notice Divides two ray, rounding half up to the nearest ray\n @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n @param a Ray\n @param b Ray\n @return c = a raydiv b"},"id":21198,"implemented":true,"kind":"function","modifiers":[],"name":"rayDiv","nameLocation":"2849:6:90","nodeType":"FunctionDefinition","parameters":{"id":21192,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21189,"mutability":"mutable","name":"a","nameLocation":"2864:1:90","nodeType":"VariableDeclaration","scope":21198,"src":"2856:9:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21188,"name":"uint256","nodeType":"ElementaryTypeName","src":"2856:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21191,"mutability":"mutable","name":"b","nameLocation":"2875:1:90","nodeType":"VariableDeclaration","scope":21198,"src":"2867:9:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21190,"name":"uint256","nodeType":"ElementaryTypeName","src":"2867:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2855:22:90"},"returnParameters":{"id":21195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21194,"mutability":"mutable","name":"c","nameLocation":"2909:1:90","nodeType":"VariableDeclaration","scope":21198,"src":"2901:9:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21193,"name":"uint256","nodeType":"ElementaryTypeName","src":"2901:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2900:11:90"},"scope":21219,"src":"2840:322:90","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":21207,"nodeType":"Block","src":"3485:191:90","statements":[{"AST":{"nodeType":"YulBlock","src":"3500:172:90","statements":[{"nodeType":"YulAssignment","src":"3508:26:90","value":{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"3517:1:90"},{"name":"WAD_RAY_RATIO","nodeType":"YulIdentifier","src":"3520:13:90"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"3513:3:90"},"nodeType":"YulFunctionCall","src":"3513:21:90"},"variableNames":[{"name":"b","nodeType":"YulIdentifier","src":"3508:1:90"}]},{"nodeType":"YulVariableDeclaration","src":"3541:38:90","value":{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"3562:1:90"},{"name":"WAD_RAY_RATIO","nodeType":"YulIdentifier","src":"3565:13:90"}],"functionName":{"name":"mod","nodeType":"YulIdentifier","src":"3558:3:90"},"nodeType":"YulFunctionCall","src":"3558:21:90"},"variables":[{"name":"remainder","nodeType":"YulTypedName","src":"3545:9:90","type":""}]},{"body":{"nodeType":"YulBlock","src":"3634:32:90","statements":[{"nodeType":"YulAssignment","src":"3644:14:90","value":{"arguments":[{"name":"b","nodeType":"YulIdentifier","src":"3653:1:90"},{"kind":"number","nodeType":"YulLiteral","src":"3656:1:90","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3649:3:90"},"nodeType":"YulFunctionCall","src":"3649:9:90"},"variableNames":[{"name":"b","nodeType":"YulIdentifier","src":"3644:1:90"}]}]},"condition":{"arguments":[{"arguments":[{"name":"remainder","nodeType":"YulIdentifier","src":"3599:9:90"},{"arguments":[{"name":"WAD_RAY_RATIO","nodeType":"YulIdentifier","src":"3614:13:90"},{"kind":"number","nodeType":"YulLiteral","src":"3629:1:90","type":"","value":"2"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"3610:3:90"},"nodeType":"YulFunctionCall","src":"3610:21:90"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3596:2:90"},"nodeType":"YulFunctionCall","src":"3596:36:90"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3589:6:90"},"nodeType":"YulFunctionCall","src":"3589:44:90"},"nodeType":"YulIf","src":"3586:80:90"}]},"evmVersion":"london","externalReferences":[{"declaration":21150,"isOffset":false,"isSlot":false,"src":"3520:13:90","valueSize":1},{"declaration":21150,"isOffset":false,"isSlot":false,"src":"3565:13:90","valueSize":1},{"declaration":21150,"isOffset":false,"isSlot":false,"src":"3614:13:90","valueSize":1},{"declaration":21201,"isOffset":false,"isSlot":false,"src":"3517:1:90","valueSize":1},{"declaration":21201,"isOffset":false,"isSlot":false,"src":"3562:1:90","valueSize":1},{"declaration":21204,"isOffset":false,"isSlot":false,"src":"3508:1:90","valueSize":1},{"declaration":21204,"isOffset":false,"isSlot":false,"src":"3644:1:90","valueSize":1},{"declaration":21204,"isOffset":false,"isSlot":false,"src":"3653:1:90","valueSize":1}],"id":21206,"nodeType":"InlineAssembly","src":"3491:181:90"}]},"documentation":{"id":21199,"nodeType":"StructuredDocumentation","src":"3166:253:90","text":" @dev Casts ray down to wad\n @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n @param a Ray\n @return b = a converted to wad, rounded half up to the nearest wad"},"id":21208,"implemented":true,"kind":"function","modifiers":[],"name":"rayToWad","nameLocation":"3431:8:90","nodeType":"FunctionDefinition","parameters":{"id":21202,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21201,"mutability":"mutable","name":"a","nameLocation":"3448:1:90","nodeType":"VariableDeclaration","scope":21208,"src":"3440:9:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21200,"name":"uint256","nodeType":"ElementaryTypeName","src":"3440:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3439:11:90"},"returnParameters":{"id":21205,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21204,"mutability":"mutable","name":"b","nameLocation":"3482:1:90","nodeType":"VariableDeclaration","scope":21208,"src":"3474:9:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21203,"name":"uint256","nodeType":"ElementaryTypeName","src":"3474:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3473:11:90"},"scope":21219,"src":"3422:254:90","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":21217,"nodeType":"Block","src":"3964:184:90","statements":[{"AST":{"nodeType":"YulBlock","src":"4026:118:90","statements":[{"nodeType":"YulAssignment","src":"4034:26:90","value":{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"4043:1:90"},{"name":"WAD_RAY_RATIO","nodeType":"YulIdentifier","src":"4046:13:90"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"4039:3:90"},"nodeType":"YulFunctionCall","src":"4039:21:90"},"variableNames":[{"name":"b","nodeType":"YulIdentifier","src":"4034:1:90"}]},{"body":{"nodeType":"YulBlock","src":"4108:30:90","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4125:1:90","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4128:1:90","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4118:6:90"},"nodeType":"YulFunctionCall","src":"4118:12:90"},"nodeType":"YulExpressionStatement","src":"4118:12:90"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"b","nodeType":"YulIdentifier","src":"4085:1:90"},{"name":"WAD_RAY_RATIO","nodeType":"YulIdentifier","src":"4088:13:90"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"4081:3:90"},"nodeType":"YulFunctionCall","src":"4081:21:90"},{"name":"a","nodeType":"YulIdentifier","src":"4104:1:90"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4078:2:90"},"nodeType":"YulFunctionCall","src":"4078:28:90"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4071:6:90"},"nodeType":"YulFunctionCall","src":"4071:36:90"},"nodeType":"YulIf","src":"4068:70:90"}]},"evmVersion":"london","externalReferences":[{"declaration":21150,"isOffset":false,"isSlot":false,"src":"4046:13:90","valueSize":1},{"declaration":21150,"isOffset":false,"isSlot":false,"src":"4088:13:90","valueSize":1},{"declaration":21211,"isOffset":false,"isSlot":false,"src":"4043:1:90","valueSize":1},{"declaration":21211,"isOffset":false,"isSlot":false,"src":"4104:1:90","valueSize":1},{"declaration":21214,"isOffset":false,"isSlot":false,"src":"4034:1:90","valueSize":1},{"declaration":21214,"isOffset":false,"isSlot":false,"src":"4085:1:90","valueSize":1}],"id":21216,"nodeType":"InlineAssembly","src":"4017:127:90"}]},"documentation":{"id":21209,"nodeType":"StructuredDocumentation","src":"3680:218:90","text":" @dev Converts wad up to ray\n @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\n @param a Wad\n @return b = a converted in ray"},"id":21218,"implemented":true,"kind":"function","modifiers":[],"name":"wadToRay","nameLocation":"3910:8:90","nodeType":"FunctionDefinition","parameters":{"id":21212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21211,"mutability":"mutable","name":"a","nameLocation":"3927:1:90","nodeType":"VariableDeclaration","scope":21218,"src":"3919:9:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21210,"name":"uint256","nodeType":"ElementaryTypeName","src":"3919:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3918:11:90"},"returnParameters":{"id":21215,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21214,"mutability":"mutable","name":"b","nameLocation":"3961:1:90","nodeType":"VariableDeclaration","scope":21218,"src":"3953:9:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21213,"name":"uint256","nodeType":"ElementaryTypeName","src":"3953:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3952:11:90"},"scope":21219,"src":"3901:247:90","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":21220,"src":"439:3711:90","usedErrors":[]}],"src":"37:4114:90"},"id":90},"@aave/core-v3/contracts/protocol/libraries/types/ConfiguratorInputTypes.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/ConfiguratorInputTypes.sol","exportedSymbols":{"ConfiguratorInputTypes":[21281]},"id":21282,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":21221,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:91"},{"abstract":false,"baseContracts":[],"canonicalName":"ConfiguratorInputTypes","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":21281,"linearizedBaseContracts":[21281],"name":"ConfiguratorInputTypes","nameLocation":"70:22:91","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ConfiguratorInputTypes.InitReserveInput","id":21252,"members":[{"constant":false,"id":21223,"mutability":"mutable","name":"aTokenImpl","nameLocation":"135:10:91","nodeType":"VariableDeclaration","scope":21252,"src":"127:18:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21222,"name":"address","nodeType":"ElementaryTypeName","src":"127:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21225,"mutability":"mutable","name":"stableDebtTokenImpl","nameLocation":"159:19:91","nodeType":"VariableDeclaration","scope":21252,"src":"151:27:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21224,"name":"address","nodeType":"ElementaryTypeName","src":"151:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21227,"mutability":"mutable","name":"variableDebtTokenImpl","nameLocation":"192:21:91","nodeType":"VariableDeclaration","scope":21252,"src":"184:29:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21226,"name":"address","nodeType":"ElementaryTypeName","src":"184:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21229,"mutability":"mutable","name":"underlyingAssetDecimals","nameLocation":"225:23:91","nodeType":"VariableDeclaration","scope":21252,"src":"219:29:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":21228,"name":"uint8","nodeType":"ElementaryTypeName","src":"219:5:91","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":21231,"mutability":"mutable","name":"interestRateStrategyAddress","nameLocation":"262:27:91","nodeType":"VariableDeclaration","scope":21252,"src":"254:35:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21230,"name":"address","nodeType":"ElementaryTypeName","src":"254:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21233,"mutability":"mutable","name":"underlyingAsset","nameLocation":"303:15:91","nodeType":"VariableDeclaration","scope":21252,"src":"295:23:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21232,"name":"address","nodeType":"ElementaryTypeName","src":"295:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21235,"mutability":"mutable","name":"treasury","nameLocation":"332:8:91","nodeType":"VariableDeclaration","scope":21252,"src":"324:16:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21234,"name":"address","nodeType":"ElementaryTypeName","src":"324:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21237,"mutability":"mutable","name":"incentivesController","nameLocation":"354:20:91","nodeType":"VariableDeclaration","scope":21252,"src":"346:28:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21236,"name":"address","nodeType":"ElementaryTypeName","src":"346:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21239,"mutability":"mutable","name":"aTokenName","nameLocation":"387:10:91","nodeType":"VariableDeclaration","scope":21252,"src":"380:17:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":21238,"name":"string","nodeType":"ElementaryTypeName","src":"380:6:91","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":21241,"mutability":"mutable","name":"aTokenSymbol","nameLocation":"410:12:91","nodeType":"VariableDeclaration","scope":21252,"src":"403:19:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":21240,"name":"string","nodeType":"ElementaryTypeName","src":"403:6:91","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":21243,"mutability":"mutable","name":"variableDebtTokenName","nameLocation":"435:21:91","nodeType":"VariableDeclaration","scope":21252,"src":"428:28:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":21242,"name":"string","nodeType":"ElementaryTypeName","src":"428:6:91","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":21245,"mutability":"mutable","name":"variableDebtTokenSymbol","nameLocation":"469:23:91","nodeType":"VariableDeclaration","scope":21252,"src":"462:30:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":21244,"name":"string","nodeType":"ElementaryTypeName","src":"462:6:91","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":21247,"mutability":"mutable","name":"stableDebtTokenName","nameLocation":"505:19:91","nodeType":"VariableDeclaration","scope":21252,"src":"498:26:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":21246,"name":"string","nodeType":"ElementaryTypeName","src":"498:6:91","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":21249,"mutability":"mutable","name":"stableDebtTokenSymbol","nameLocation":"537:21:91","nodeType":"VariableDeclaration","scope":21252,"src":"530:28:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":21248,"name":"string","nodeType":"ElementaryTypeName","src":"530:6:91","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":21251,"mutability":"mutable","name":"params","nameLocation":"570:6:91","nodeType":"VariableDeclaration","scope":21252,"src":"564:12:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":21250,"name":"bytes","nodeType":"ElementaryTypeName","src":"564:5:91","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"InitReserveInput","nameLocation":"104:16:91","nodeType":"StructDefinition","scope":21281,"src":"97:484:91","visibility":"public"},{"canonicalName":"ConfiguratorInputTypes.UpdateATokenInput","id":21267,"members":[{"constant":false,"id":21254,"mutability":"mutable","name":"asset","nameLocation":"624:5:91","nodeType":"VariableDeclaration","scope":21267,"src":"616:13:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21253,"name":"address","nodeType":"ElementaryTypeName","src":"616:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21256,"mutability":"mutable","name":"treasury","nameLocation":"643:8:91","nodeType":"VariableDeclaration","scope":21267,"src":"635:16:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21255,"name":"address","nodeType":"ElementaryTypeName","src":"635:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21258,"mutability":"mutable","name":"incentivesController","nameLocation":"665:20:91","nodeType":"VariableDeclaration","scope":21267,"src":"657:28:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21257,"name":"address","nodeType":"ElementaryTypeName","src":"657:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21260,"mutability":"mutable","name":"name","nameLocation":"698:4:91","nodeType":"VariableDeclaration","scope":21267,"src":"691:11:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":21259,"name":"string","nodeType":"ElementaryTypeName","src":"691:6:91","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":21262,"mutability":"mutable","name":"symbol","nameLocation":"715:6:91","nodeType":"VariableDeclaration","scope":21267,"src":"708:13:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":21261,"name":"string","nodeType":"ElementaryTypeName","src":"708:6:91","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":21264,"mutability":"mutable","name":"implementation","nameLocation":"735:14:91","nodeType":"VariableDeclaration","scope":21267,"src":"727:22:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21263,"name":"address","nodeType":"ElementaryTypeName","src":"727:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21266,"mutability":"mutable","name":"params","nameLocation":"761:6:91","nodeType":"VariableDeclaration","scope":21267,"src":"755:12:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":21265,"name":"bytes","nodeType":"ElementaryTypeName","src":"755:5:91","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"UpdateATokenInput","nameLocation":"592:17:91","nodeType":"StructDefinition","scope":21281,"src":"585:187:91","visibility":"public"},{"canonicalName":"ConfiguratorInputTypes.UpdateDebtTokenInput","id":21280,"members":[{"constant":false,"id":21269,"mutability":"mutable","name":"asset","nameLocation":"818:5:91","nodeType":"VariableDeclaration","scope":21280,"src":"810:13:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21268,"name":"address","nodeType":"ElementaryTypeName","src":"810:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21271,"mutability":"mutable","name":"incentivesController","nameLocation":"837:20:91","nodeType":"VariableDeclaration","scope":21280,"src":"829:28:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21270,"name":"address","nodeType":"ElementaryTypeName","src":"829:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21273,"mutability":"mutable","name":"name","nameLocation":"870:4:91","nodeType":"VariableDeclaration","scope":21280,"src":"863:11:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":21272,"name":"string","nodeType":"ElementaryTypeName","src":"863:6:91","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":21275,"mutability":"mutable","name":"symbol","nameLocation":"887:6:91","nodeType":"VariableDeclaration","scope":21280,"src":"880:13:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":21274,"name":"string","nodeType":"ElementaryTypeName","src":"880:6:91","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":21277,"mutability":"mutable","name":"implementation","nameLocation":"907:14:91","nodeType":"VariableDeclaration","scope":21280,"src":"899:22:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21276,"name":"address","nodeType":"ElementaryTypeName","src":"899:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21279,"mutability":"mutable","name":"params","nameLocation":"933:6:91","nodeType":"VariableDeclaration","scope":21280,"src":"927:12:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":21278,"name":"bytes","nodeType":"ElementaryTypeName","src":"927:5:91","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"UpdateDebtTokenInput","nameLocation":"783:20:91","nodeType":"StructDefinition","scope":21281,"src":"776:168:91","visibility":"public"}],"scope":21282,"src":"62:884:91","usedErrors":[]}],"src":"37:910:91"},"id":91},"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","exportedSymbols":{"DataTypes":[21633]},"id":21634,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":21283,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:92"},{"abstract":false,"baseContracts":[],"canonicalName":"DataTypes","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":21633,"linearizedBaseContracts":[21633],"name":"DataTypes","nameLocation":"70:9:92","nodeType":"ContractDefinition","nodes":[{"canonicalName":"DataTypes.ReserveData","id":21315,"members":[{"constant":false,"id":21286,"mutability":"mutable","name":"configuration","nameLocation":"172:13:92","nodeType":"VariableDeclaration","scope":21315,"src":"148:37:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":21285,"nodeType":"UserDefinedTypeName","pathNode":{"id":21284,"name":"ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"148:23:92"},"referencedDeclaration":21318,"src":"148:23:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":21288,"mutability":"mutable","name":"liquidityIndex","nameLocation":"243:14:92","nodeType":"VariableDeclaration","scope":21315,"src":"235:22:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":21287,"name":"uint128","nodeType":"ElementaryTypeName","src":"235:7:92","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":21290,"mutability":"mutable","name":"currentLiquidityRate","nameLocation":"319:20:92","nodeType":"VariableDeclaration","scope":21315,"src":"311:28:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":21289,"name":"uint128","nodeType":"ElementaryTypeName","src":"311:7:92","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":21292,"mutability":"mutable","name":"variableBorrowIndex","nameLocation":"399:19:92","nodeType":"VariableDeclaration","scope":21315,"src":"391:27:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":21291,"name":"uint128","nodeType":"ElementaryTypeName","src":"391:7:92","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":21294,"mutability":"mutable","name":"currentVariableBorrowRate","nameLocation":"489:25:92","nodeType":"VariableDeclaration","scope":21315,"src":"481:33:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":21293,"name":"uint128","nodeType":"ElementaryTypeName","src":"481:7:92","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":21296,"mutability":"mutable","name":"currentStableBorrowRate","nameLocation":"583:23:92","nodeType":"VariableDeclaration","scope":21315,"src":"575:31:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":21295,"name":"uint128","nodeType":"ElementaryTypeName","src":"575:7:92","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":21298,"mutability":"mutable","name":"lastUpdateTimestamp","nameLocation":"650:19:92","nodeType":"VariableDeclaration","scope":21315,"src":"643:26:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":21297,"name":"uint40","nodeType":"ElementaryTypeName","src":"643:6:92","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"constant":false,"id":21300,"mutability":"mutable","name":"id","nameLocation":"770:2:92","nodeType":"VariableDeclaration","scope":21315,"src":"763:9:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":21299,"name":"uint16","nodeType":"ElementaryTypeName","src":"763:6:92","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":21302,"mutability":"mutable","name":"aTokenAddress","nameLocation":"807:13:92","nodeType":"VariableDeclaration","scope":21315,"src":"799:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21301,"name":"address","nodeType":"ElementaryTypeName","src":"799:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21304,"mutability":"mutable","name":"stableDebtTokenAddress","nameLocation":"864:22:92","nodeType":"VariableDeclaration","scope":21315,"src":"856:30:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21303,"name":"address","nodeType":"ElementaryTypeName","src":"856:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21306,"mutability":"mutable","name":"variableDebtTokenAddress","nameLocation":"932:24:92","nodeType":"VariableDeclaration","scope":21315,"src":"924:32:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21305,"name":"address","nodeType":"ElementaryTypeName","src":"924:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21308,"mutability":"mutable","name":"interestRateStrategyAddress","nameLocation":"1014:27:92","nodeType":"VariableDeclaration","scope":21315,"src":"1006:35:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21307,"name":"address","nodeType":"ElementaryTypeName","src":"1006:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21310,"mutability":"mutable","name":"accruedToTreasury","nameLocation":"1098:17:92","nodeType":"VariableDeclaration","scope":21315,"src":"1090:25:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":21309,"name":"uint128","nodeType":"ElementaryTypeName","src":"1090:7:92","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":21312,"mutability":"mutable","name":"unbacked","nameLocation":"1204:8:92","nodeType":"VariableDeclaration","scope":21315,"src":"1196:16:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":21311,"name":"uint128","nodeType":"ElementaryTypeName","src":"1196:7:92","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":21314,"mutability":"mutable","name":"isolationModeTotalDebt","nameLocation":"1299:22:92","nodeType":"VariableDeclaration","scope":21315,"src":"1291:30:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":21313,"name":"uint128","nodeType":"ElementaryTypeName","src":"1291:7:92","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"name":"ReserveData","nameLocation":"91:11:92","nodeType":"StructDefinition","scope":21633,"src":"84:1242:92","visibility":"public"},{"canonicalName":"DataTypes.ReserveConfigurationMap","id":21318,"members":[{"constant":false,"id":21317,"mutability":"mutable","name":"data","nameLocation":"2260:4:92","nodeType":"VariableDeclaration","scope":21318,"src":"2252:12:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21316,"name":"uint256","nodeType":"ElementaryTypeName","src":"2252:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"ReserveConfigurationMap","nameLocation":"1337:23:92","nodeType":"StructDefinition","scope":21633,"src":"1330:939:92","visibility":"public"},{"canonicalName":"DataTypes.UserConfigurationMap","id":21322,"members":[{"constant":false,"id":21321,"mutability":"mutable","name":"data","nameLocation":"2578:4:92","nodeType":"VariableDeclaration","scope":21322,"src":"2570:12:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21320,"name":"uint256","nodeType":"ElementaryTypeName","src":"2570:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"UserConfigurationMap","nameLocation":"2280:20:92","nodeType":"StructDefinition","scope":21633,"src":"2273:314:92","visibility":"public"},{"canonicalName":"DataTypes.EModeCategory","id":21333,"members":[{"constant":false,"id":21324,"mutability":"mutable","name":"ltv","nameLocation":"2695:3:92","nodeType":"VariableDeclaration","scope":21333,"src":"2688:10:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":21323,"name":"uint16","nodeType":"ElementaryTypeName","src":"2688:6:92","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":21326,"mutability":"mutable","name":"liquidationThreshold","nameLocation":"2711:20:92","nodeType":"VariableDeclaration","scope":21333,"src":"2704:27:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":21325,"name":"uint16","nodeType":"ElementaryTypeName","src":"2704:6:92","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":21328,"mutability":"mutable","name":"liquidationBonus","nameLocation":"2744:16:92","nodeType":"VariableDeclaration","scope":21333,"src":"2737:23:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":21327,"name":"uint16","nodeType":"ElementaryTypeName","src":"2737:6:92","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":21330,"mutability":"mutable","name":"priceSource","nameLocation":"2885:11:92","nodeType":"VariableDeclaration","scope":21333,"src":"2877:19:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21329,"name":"address","nodeType":"ElementaryTypeName","src":"2877:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21332,"mutability":"mutable","name":"label","nameLocation":"2909:5:92","nodeType":"VariableDeclaration","scope":21333,"src":"2902:12:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":21331,"name":"string","nodeType":"ElementaryTypeName","src":"2902:6:92","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"name":"EModeCategory","nameLocation":"2598:13:92","nodeType":"StructDefinition","scope":21633,"src":"2591:328:92","visibility":"public"},{"canonicalName":"DataTypes.InterestRateMode","id":21337,"members":[{"id":21334,"name":"NONE","nameLocation":"2946:4:92","nodeType":"EnumValue","src":"2946:4:92"},{"id":21335,"name":"STABLE","nameLocation":"2952:6:92","nodeType":"EnumValue","src":"2952:6:92"},{"id":21336,"name":"VARIABLE","nameLocation":"2960:8:92","nodeType":"EnumValue","src":"2960:8:92"}],"name":"InterestRateMode","nameLocation":"2928:16:92","nodeType":"EnumDefinition","src":"2923:46:92"},{"canonicalName":"DataTypes.ReserveCache","id":21379,"members":[{"constant":false,"id":21339,"mutability":"mutable","name":"currScaledVariableDebt","nameLocation":"3007:22:92","nodeType":"VariableDeclaration","scope":21379,"src":"2999:30:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21338,"name":"uint256","nodeType":"ElementaryTypeName","src":"2999:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21341,"mutability":"mutable","name":"nextScaledVariableDebt","nameLocation":"3043:22:92","nodeType":"VariableDeclaration","scope":21379,"src":"3035:30:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21340,"name":"uint256","nodeType":"ElementaryTypeName","src":"3035:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21343,"mutability":"mutable","name":"currPrincipalStableDebt","nameLocation":"3079:23:92","nodeType":"VariableDeclaration","scope":21379,"src":"3071:31:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21342,"name":"uint256","nodeType":"ElementaryTypeName","src":"3071:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21345,"mutability":"mutable","name":"currAvgStableBorrowRate","nameLocation":"3116:23:92","nodeType":"VariableDeclaration","scope":21379,"src":"3108:31:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21344,"name":"uint256","nodeType":"ElementaryTypeName","src":"3108:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21347,"mutability":"mutable","name":"currTotalStableDebt","nameLocation":"3153:19:92","nodeType":"VariableDeclaration","scope":21379,"src":"3145:27:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21346,"name":"uint256","nodeType":"ElementaryTypeName","src":"3145:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21349,"mutability":"mutable","name":"nextAvgStableBorrowRate","nameLocation":"3186:23:92","nodeType":"VariableDeclaration","scope":21379,"src":"3178:31:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21348,"name":"uint256","nodeType":"ElementaryTypeName","src":"3178:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21351,"mutability":"mutable","name":"nextTotalStableDebt","nameLocation":"3223:19:92","nodeType":"VariableDeclaration","scope":21379,"src":"3215:27:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21350,"name":"uint256","nodeType":"ElementaryTypeName","src":"3215:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21353,"mutability":"mutable","name":"currLiquidityIndex","nameLocation":"3256:18:92","nodeType":"VariableDeclaration","scope":21379,"src":"3248:26:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21352,"name":"uint256","nodeType":"ElementaryTypeName","src":"3248:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21355,"mutability":"mutable","name":"nextLiquidityIndex","nameLocation":"3288:18:92","nodeType":"VariableDeclaration","scope":21379,"src":"3280:26:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21354,"name":"uint256","nodeType":"ElementaryTypeName","src":"3280:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21357,"mutability":"mutable","name":"currVariableBorrowIndex","nameLocation":"3320:23:92","nodeType":"VariableDeclaration","scope":21379,"src":"3312:31:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21356,"name":"uint256","nodeType":"ElementaryTypeName","src":"3312:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21359,"mutability":"mutable","name":"nextVariableBorrowIndex","nameLocation":"3357:23:92","nodeType":"VariableDeclaration","scope":21379,"src":"3349:31:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21358,"name":"uint256","nodeType":"ElementaryTypeName","src":"3349:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21361,"mutability":"mutable","name":"currLiquidityRate","nameLocation":"3394:17:92","nodeType":"VariableDeclaration","scope":21379,"src":"3386:25:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21360,"name":"uint256","nodeType":"ElementaryTypeName","src":"3386:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21363,"mutability":"mutable","name":"currVariableBorrowRate","nameLocation":"3425:22:92","nodeType":"VariableDeclaration","scope":21379,"src":"3417:30:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21362,"name":"uint256","nodeType":"ElementaryTypeName","src":"3417:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21365,"mutability":"mutable","name":"reserveFactor","nameLocation":"3461:13:92","nodeType":"VariableDeclaration","scope":21379,"src":"3453:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21364,"name":"uint256","nodeType":"ElementaryTypeName","src":"3453:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21368,"mutability":"mutable","name":"reserveConfiguration","nameLocation":"3504:20:92","nodeType":"VariableDeclaration","scope":21379,"src":"3480:44:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":21367,"nodeType":"UserDefinedTypeName","pathNode":{"id":21366,"name":"ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"3480:23:92"},"referencedDeclaration":21318,"src":"3480:23:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":21370,"mutability":"mutable","name":"aTokenAddress","nameLocation":"3538:13:92","nodeType":"VariableDeclaration","scope":21379,"src":"3530:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21369,"name":"address","nodeType":"ElementaryTypeName","src":"3530:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21372,"mutability":"mutable","name":"stableDebtTokenAddress","nameLocation":"3565:22:92","nodeType":"VariableDeclaration","scope":21379,"src":"3557:30:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21371,"name":"address","nodeType":"ElementaryTypeName","src":"3557:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21374,"mutability":"mutable","name":"variableDebtTokenAddress","nameLocation":"3601:24:92","nodeType":"VariableDeclaration","scope":21379,"src":"3593:32:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21373,"name":"address","nodeType":"ElementaryTypeName","src":"3593:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21376,"mutability":"mutable","name":"reserveLastUpdateTimestamp","nameLocation":"3638:26:92","nodeType":"VariableDeclaration","scope":21379,"src":"3631:33:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":21375,"name":"uint40","nodeType":"ElementaryTypeName","src":"3631:6:92","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"constant":false,"id":21378,"mutability":"mutable","name":"stableDebtLastUpdateTimestamp","nameLocation":"3677:29:92","nodeType":"VariableDeclaration","scope":21379,"src":"3670:36:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":21377,"name":"uint40","nodeType":"ElementaryTypeName","src":"3670:6:92","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"name":"ReserveCache","nameLocation":"2980:12:92","nodeType":"StructDefinition","scope":21633,"src":"2973:738:92","visibility":"public"},{"canonicalName":"DataTypes.ExecuteLiquidationCallParams","id":21398,"members":[{"constant":false,"id":21381,"mutability":"mutable","name":"reservesCount","nameLocation":"3765:13:92","nodeType":"VariableDeclaration","scope":21398,"src":"3757:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21380,"name":"uint256","nodeType":"ElementaryTypeName","src":"3757:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21383,"mutability":"mutable","name":"debtToCover","nameLocation":"3792:11:92","nodeType":"VariableDeclaration","scope":21398,"src":"3784:19:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21382,"name":"uint256","nodeType":"ElementaryTypeName","src":"3784:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21385,"mutability":"mutable","name":"collateralAsset","nameLocation":"3817:15:92","nodeType":"VariableDeclaration","scope":21398,"src":"3809:23:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21384,"name":"address","nodeType":"ElementaryTypeName","src":"3809:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21387,"mutability":"mutable","name":"debtAsset","nameLocation":"3846:9:92","nodeType":"VariableDeclaration","scope":21398,"src":"3838:17:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21386,"name":"address","nodeType":"ElementaryTypeName","src":"3838:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21389,"mutability":"mutable","name":"user","nameLocation":"3869:4:92","nodeType":"VariableDeclaration","scope":21398,"src":"3861:12:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21388,"name":"address","nodeType":"ElementaryTypeName","src":"3861:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21391,"mutability":"mutable","name":"receiveAToken","nameLocation":"3884:13:92","nodeType":"VariableDeclaration","scope":21398,"src":"3879:18:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21390,"name":"bool","nodeType":"ElementaryTypeName","src":"3879:4:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":21393,"mutability":"mutable","name":"priceOracle","nameLocation":"3911:11:92","nodeType":"VariableDeclaration","scope":21398,"src":"3903:19:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21392,"name":"address","nodeType":"ElementaryTypeName","src":"3903:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21395,"mutability":"mutable","name":"userEModeCategory","nameLocation":"3934:17:92","nodeType":"VariableDeclaration","scope":21398,"src":"3928:23:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":21394,"name":"uint8","nodeType":"ElementaryTypeName","src":"3928:5:92","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":21397,"mutability":"mutable","name":"priceOracleSentinel","nameLocation":"3965:19:92","nodeType":"VariableDeclaration","scope":21398,"src":"3957:27:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21396,"name":"address","nodeType":"ElementaryTypeName","src":"3957:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"ExecuteLiquidationCallParams","nameLocation":"3722:28:92","nodeType":"StructDefinition","scope":21633,"src":"3715:274:92","visibility":"public"},{"canonicalName":"DataTypes.ExecuteSupplyParams","id":21407,"members":[{"constant":false,"id":21400,"mutability":"mutable","name":"asset","nameLocation":"4034:5:92","nodeType":"VariableDeclaration","scope":21407,"src":"4026:13:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21399,"name":"address","nodeType":"ElementaryTypeName","src":"4026:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21402,"mutability":"mutable","name":"amount","nameLocation":"4053:6:92","nodeType":"VariableDeclaration","scope":21407,"src":"4045:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21401,"name":"uint256","nodeType":"ElementaryTypeName","src":"4045:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21404,"mutability":"mutable","name":"onBehalfOf","nameLocation":"4073:10:92","nodeType":"VariableDeclaration","scope":21407,"src":"4065:18:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21403,"name":"address","nodeType":"ElementaryTypeName","src":"4065:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21406,"mutability":"mutable","name":"referralCode","nameLocation":"4096:12:92","nodeType":"VariableDeclaration","scope":21407,"src":"4089:19:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":21405,"name":"uint16","nodeType":"ElementaryTypeName","src":"4089:6:92","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"name":"ExecuteSupplyParams","nameLocation":"4000:19:92","nodeType":"StructDefinition","scope":21633,"src":"3993:120:92","visibility":"public"},{"canonicalName":"DataTypes.ExecuteBorrowParams","id":21433,"members":[{"constant":false,"id":21409,"mutability":"mutable","name":"asset","nameLocation":"4158:5:92","nodeType":"VariableDeclaration","scope":21433,"src":"4150:13:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21408,"name":"address","nodeType":"ElementaryTypeName","src":"4150:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21411,"mutability":"mutable","name":"user","nameLocation":"4177:4:92","nodeType":"VariableDeclaration","scope":21433,"src":"4169:12:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21410,"name":"address","nodeType":"ElementaryTypeName","src":"4169:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21413,"mutability":"mutable","name":"onBehalfOf","nameLocation":"4195:10:92","nodeType":"VariableDeclaration","scope":21433,"src":"4187:18:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21412,"name":"address","nodeType":"ElementaryTypeName","src":"4187:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21415,"mutability":"mutable","name":"amount","nameLocation":"4219:6:92","nodeType":"VariableDeclaration","scope":21433,"src":"4211:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21414,"name":"uint256","nodeType":"ElementaryTypeName","src":"4211:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21418,"mutability":"mutable","name":"interestRateMode","nameLocation":"4248:16:92","nodeType":"VariableDeclaration","scope":21433,"src":"4231:33:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"typeName":{"id":21417,"nodeType":"UserDefinedTypeName","pathNode":{"id":21416,"name":"InterestRateMode","nodeType":"IdentifierPath","referencedDeclaration":21337,"src":"4231:16:92"},"referencedDeclaration":21337,"src":"4231:16:92","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"visibility":"internal"},{"constant":false,"id":21420,"mutability":"mutable","name":"referralCode","nameLocation":"4277:12:92","nodeType":"VariableDeclaration","scope":21433,"src":"4270:19:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":21419,"name":"uint16","nodeType":"ElementaryTypeName","src":"4270:6:92","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":21422,"mutability":"mutable","name":"releaseUnderlying","nameLocation":"4300:17:92","nodeType":"VariableDeclaration","scope":21433,"src":"4295:22:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21421,"name":"bool","nodeType":"ElementaryTypeName","src":"4295:4:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":21424,"mutability":"mutable","name":"maxStableRateBorrowSizePercent","nameLocation":"4331:30:92","nodeType":"VariableDeclaration","scope":21433,"src":"4323:38:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21423,"name":"uint256","nodeType":"ElementaryTypeName","src":"4323:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21426,"mutability":"mutable","name":"reservesCount","nameLocation":"4375:13:92","nodeType":"VariableDeclaration","scope":21433,"src":"4367:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21425,"name":"uint256","nodeType":"ElementaryTypeName","src":"4367:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21428,"mutability":"mutable","name":"oracle","nameLocation":"4402:6:92","nodeType":"VariableDeclaration","scope":21433,"src":"4394:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21427,"name":"address","nodeType":"ElementaryTypeName","src":"4394:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21430,"mutability":"mutable","name":"userEModeCategory","nameLocation":"4420:17:92","nodeType":"VariableDeclaration","scope":21433,"src":"4414:23:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":21429,"name":"uint8","nodeType":"ElementaryTypeName","src":"4414:5:92","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":21432,"mutability":"mutable","name":"priceOracleSentinel","nameLocation":"4451:19:92","nodeType":"VariableDeclaration","scope":21433,"src":"4443:27:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21431,"name":"address","nodeType":"ElementaryTypeName","src":"4443:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"ExecuteBorrowParams","nameLocation":"4124:19:92","nodeType":"StructDefinition","scope":21633,"src":"4117:358:92","visibility":"public"},{"canonicalName":"DataTypes.ExecuteRepayParams","id":21445,"members":[{"constant":false,"id":21435,"mutability":"mutable","name":"asset","nameLocation":"4519:5:92","nodeType":"VariableDeclaration","scope":21445,"src":"4511:13:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21434,"name":"address","nodeType":"ElementaryTypeName","src":"4511:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21437,"mutability":"mutable","name":"amount","nameLocation":"4538:6:92","nodeType":"VariableDeclaration","scope":21445,"src":"4530:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21436,"name":"uint256","nodeType":"ElementaryTypeName","src":"4530:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21440,"mutability":"mutable","name":"interestRateMode","nameLocation":"4567:16:92","nodeType":"VariableDeclaration","scope":21445,"src":"4550:33:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"typeName":{"id":21439,"nodeType":"UserDefinedTypeName","pathNode":{"id":21438,"name":"InterestRateMode","nodeType":"IdentifierPath","referencedDeclaration":21337,"src":"4550:16:92"},"referencedDeclaration":21337,"src":"4550:16:92","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"visibility":"internal"},{"constant":false,"id":21442,"mutability":"mutable","name":"onBehalfOf","nameLocation":"4597:10:92","nodeType":"VariableDeclaration","scope":21445,"src":"4589:18:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21441,"name":"address","nodeType":"ElementaryTypeName","src":"4589:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21444,"mutability":"mutable","name":"useATokens","nameLocation":"4618:10:92","nodeType":"VariableDeclaration","scope":21445,"src":"4613:15:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21443,"name":"bool","nodeType":"ElementaryTypeName","src":"4613:4:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"ExecuteRepayParams","nameLocation":"4486:18:92","nodeType":"StructDefinition","scope":21633,"src":"4479:154:92","visibility":"public"},{"canonicalName":"DataTypes.ExecuteWithdrawParams","id":21458,"members":[{"constant":false,"id":21447,"mutability":"mutable","name":"asset","nameLocation":"4680:5:92","nodeType":"VariableDeclaration","scope":21458,"src":"4672:13:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21446,"name":"address","nodeType":"ElementaryTypeName","src":"4672:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21449,"mutability":"mutable","name":"amount","nameLocation":"4699:6:92","nodeType":"VariableDeclaration","scope":21458,"src":"4691:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21448,"name":"uint256","nodeType":"ElementaryTypeName","src":"4691:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21451,"mutability":"mutable","name":"to","nameLocation":"4719:2:92","nodeType":"VariableDeclaration","scope":21458,"src":"4711:10:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21450,"name":"address","nodeType":"ElementaryTypeName","src":"4711:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21453,"mutability":"mutable","name":"reservesCount","nameLocation":"4735:13:92","nodeType":"VariableDeclaration","scope":21458,"src":"4727:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21452,"name":"uint256","nodeType":"ElementaryTypeName","src":"4727:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21455,"mutability":"mutable","name":"oracle","nameLocation":"4762:6:92","nodeType":"VariableDeclaration","scope":21458,"src":"4754:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21454,"name":"address","nodeType":"ElementaryTypeName","src":"4754:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21457,"mutability":"mutable","name":"userEModeCategory","nameLocation":"4780:17:92","nodeType":"VariableDeclaration","scope":21458,"src":"4774:23:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":21456,"name":"uint8","nodeType":"ElementaryTypeName","src":"4774:5:92","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"name":"ExecuteWithdrawParams","nameLocation":"4644:21:92","nodeType":"StructDefinition","scope":21633,"src":"4637:165:92","visibility":"public"},{"canonicalName":"DataTypes.ExecuteSetUserEModeParams","id":21465,"members":[{"constant":false,"id":21460,"mutability":"mutable","name":"reservesCount","nameLocation":"4853:13:92","nodeType":"VariableDeclaration","scope":21465,"src":"4845:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21459,"name":"uint256","nodeType":"ElementaryTypeName","src":"4845:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21462,"mutability":"mutable","name":"oracle","nameLocation":"4880:6:92","nodeType":"VariableDeclaration","scope":21465,"src":"4872:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21461,"name":"address","nodeType":"ElementaryTypeName","src":"4872:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21464,"mutability":"mutable","name":"categoryId","nameLocation":"4898:10:92","nodeType":"VariableDeclaration","scope":21465,"src":"4892:16:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":21463,"name":"uint8","nodeType":"ElementaryTypeName","src":"4892:5:92","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"name":"ExecuteSetUserEModeParams","nameLocation":"4813:25:92","nodeType":"StructDefinition","scope":21633,"src":"4806:107:92","visibility":"public"},{"canonicalName":"DataTypes.FinalizeTransferParams","id":21484,"members":[{"constant":false,"id":21467,"mutability":"mutable","name":"asset","nameLocation":"4961:5:92","nodeType":"VariableDeclaration","scope":21484,"src":"4953:13:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21466,"name":"address","nodeType":"ElementaryTypeName","src":"4953:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21469,"mutability":"mutable","name":"from","nameLocation":"4980:4:92","nodeType":"VariableDeclaration","scope":21484,"src":"4972:12:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21468,"name":"address","nodeType":"ElementaryTypeName","src":"4972:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21471,"mutability":"mutable","name":"to","nameLocation":"4998:2:92","nodeType":"VariableDeclaration","scope":21484,"src":"4990:10:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21470,"name":"address","nodeType":"ElementaryTypeName","src":"4990:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21473,"mutability":"mutable","name":"amount","nameLocation":"5014:6:92","nodeType":"VariableDeclaration","scope":21484,"src":"5006:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21472,"name":"uint256","nodeType":"ElementaryTypeName","src":"5006:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21475,"mutability":"mutable","name":"balanceFromBefore","nameLocation":"5034:17:92","nodeType":"VariableDeclaration","scope":21484,"src":"5026:25:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21474,"name":"uint256","nodeType":"ElementaryTypeName","src":"5026:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21477,"mutability":"mutable","name":"balanceToBefore","nameLocation":"5065:15:92","nodeType":"VariableDeclaration","scope":21484,"src":"5057:23:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21476,"name":"uint256","nodeType":"ElementaryTypeName","src":"5057:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21479,"mutability":"mutable","name":"reservesCount","nameLocation":"5094:13:92","nodeType":"VariableDeclaration","scope":21484,"src":"5086:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21478,"name":"uint256","nodeType":"ElementaryTypeName","src":"5086:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21481,"mutability":"mutable","name":"oracle","nameLocation":"5121:6:92","nodeType":"VariableDeclaration","scope":21484,"src":"5113:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21480,"name":"address","nodeType":"ElementaryTypeName","src":"5113:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21483,"mutability":"mutable","name":"fromEModeCategory","nameLocation":"5139:17:92","nodeType":"VariableDeclaration","scope":21484,"src":"5133:23:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":21482,"name":"uint8","nodeType":"ElementaryTypeName","src":"5133:5:92","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"name":"FinalizeTransferParams","nameLocation":"4924:22:92","nodeType":"StructDefinition","scope":21633,"src":"4917:244:92","visibility":"public"},{"canonicalName":"DataTypes.FlashloanParams","id":21516,"members":[{"constant":false,"id":21486,"mutability":"mutable","name":"receiverAddress","nameLocation":"5202:15:92","nodeType":"VariableDeclaration","scope":21516,"src":"5194:23:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21485,"name":"address","nodeType":"ElementaryTypeName","src":"5194:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21489,"mutability":"mutable","name":"assets","nameLocation":"5233:6:92","nodeType":"VariableDeclaration","scope":21516,"src":"5223:16:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":21487,"name":"address","nodeType":"ElementaryTypeName","src":"5223:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":21488,"nodeType":"ArrayTypeName","src":"5223:9:92","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":21492,"mutability":"mutable","name":"amounts","nameLocation":"5255:7:92","nodeType":"VariableDeclaration","scope":21516,"src":"5245:17:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":21490,"name":"uint256","nodeType":"ElementaryTypeName","src":"5245:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21491,"nodeType":"ArrayTypeName","src":"5245:9:92","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":21495,"mutability":"mutable","name":"interestRateModes","nameLocation":"5278:17:92","nodeType":"VariableDeclaration","scope":21516,"src":"5268:27:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":21493,"name":"uint256","nodeType":"ElementaryTypeName","src":"5268:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21494,"nodeType":"ArrayTypeName","src":"5268:9:92","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":21497,"mutability":"mutable","name":"onBehalfOf","nameLocation":"5309:10:92","nodeType":"VariableDeclaration","scope":21516,"src":"5301:18:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21496,"name":"address","nodeType":"ElementaryTypeName","src":"5301:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21499,"mutability":"mutable","name":"params","nameLocation":"5331:6:92","nodeType":"VariableDeclaration","scope":21516,"src":"5325:12:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":21498,"name":"bytes","nodeType":"ElementaryTypeName","src":"5325:5:92","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":21501,"mutability":"mutable","name":"referralCode","nameLocation":"5350:12:92","nodeType":"VariableDeclaration","scope":21516,"src":"5343:19:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":21500,"name":"uint16","nodeType":"ElementaryTypeName","src":"5343:6:92","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":21503,"mutability":"mutable","name":"flashLoanPremiumToProtocol","nameLocation":"5376:26:92","nodeType":"VariableDeclaration","scope":21516,"src":"5368:34:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21502,"name":"uint256","nodeType":"ElementaryTypeName","src":"5368:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21505,"mutability":"mutable","name":"flashLoanPremiumTotal","nameLocation":"5416:21:92","nodeType":"VariableDeclaration","scope":21516,"src":"5408:29:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21504,"name":"uint256","nodeType":"ElementaryTypeName","src":"5408:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21507,"mutability":"mutable","name":"maxStableRateBorrowSizePercent","nameLocation":"5451:30:92","nodeType":"VariableDeclaration","scope":21516,"src":"5443:38:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21506,"name":"uint256","nodeType":"ElementaryTypeName","src":"5443:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21509,"mutability":"mutable","name":"reservesCount","nameLocation":"5495:13:92","nodeType":"VariableDeclaration","scope":21516,"src":"5487:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21508,"name":"uint256","nodeType":"ElementaryTypeName","src":"5487:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21511,"mutability":"mutable","name":"addressesProvider","nameLocation":"5522:17:92","nodeType":"VariableDeclaration","scope":21516,"src":"5514:25:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21510,"name":"address","nodeType":"ElementaryTypeName","src":"5514:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21513,"mutability":"mutable","name":"userEModeCategory","nameLocation":"5551:17:92","nodeType":"VariableDeclaration","scope":21516,"src":"5545:23:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":21512,"name":"uint8","nodeType":"ElementaryTypeName","src":"5545:5:92","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":21515,"mutability":"mutable","name":"isAuthorizedFlashBorrower","nameLocation":"5579:25:92","nodeType":"VariableDeclaration","scope":21516,"src":"5574:30:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21514,"name":"bool","nodeType":"ElementaryTypeName","src":"5574:4:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"FlashloanParams","nameLocation":"5172:15:92","nodeType":"StructDefinition","scope":21633,"src":"5165:444:92","visibility":"public"},{"canonicalName":"DataTypes.FlashloanSimpleParams","id":21531,"members":[{"constant":false,"id":21518,"mutability":"mutable","name":"receiverAddress","nameLocation":"5656:15:92","nodeType":"VariableDeclaration","scope":21531,"src":"5648:23:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21517,"name":"address","nodeType":"ElementaryTypeName","src":"5648:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21520,"mutability":"mutable","name":"asset","nameLocation":"5685:5:92","nodeType":"VariableDeclaration","scope":21531,"src":"5677:13:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21519,"name":"address","nodeType":"ElementaryTypeName","src":"5677:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21522,"mutability":"mutable","name":"amount","nameLocation":"5704:6:92","nodeType":"VariableDeclaration","scope":21531,"src":"5696:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21521,"name":"uint256","nodeType":"ElementaryTypeName","src":"5696:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21524,"mutability":"mutable","name":"params","nameLocation":"5722:6:92","nodeType":"VariableDeclaration","scope":21531,"src":"5716:12:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":21523,"name":"bytes","nodeType":"ElementaryTypeName","src":"5716:5:92","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":21526,"mutability":"mutable","name":"referralCode","nameLocation":"5741:12:92","nodeType":"VariableDeclaration","scope":21531,"src":"5734:19:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":21525,"name":"uint16","nodeType":"ElementaryTypeName","src":"5734:6:92","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":21528,"mutability":"mutable","name":"flashLoanPremiumToProtocol","nameLocation":"5767:26:92","nodeType":"VariableDeclaration","scope":21531,"src":"5759:34:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21527,"name":"uint256","nodeType":"ElementaryTypeName","src":"5759:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21530,"mutability":"mutable","name":"flashLoanPremiumTotal","nameLocation":"5807:21:92","nodeType":"VariableDeclaration","scope":21531,"src":"5799:29:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21529,"name":"uint256","nodeType":"ElementaryTypeName","src":"5799:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"FlashloanSimpleParams","nameLocation":"5620:21:92","nodeType":"StructDefinition","scope":21633,"src":"5613:220:92","visibility":"public"},{"canonicalName":"DataTypes.FlashLoanRepaymentParams","id":21544,"members":[{"constant":false,"id":21533,"mutability":"mutable","name":"amount","nameLocation":"5883:6:92","nodeType":"VariableDeclaration","scope":21544,"src":"5875:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21532,"name":"uint256","nodeType":"ElementaryTypeName","src":"5875:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21535,"mutability":"mutable","name":"totalPremium","nameLocation":"5903:12:92","nodeType":"VariableDeclaration","scope":21544,"src":"5895:20:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21534,"name":"uint256","nodeType":"ElementaryTypeName","src":"5895:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21537,"mutability":"mutable","name":"flashLoanPremiumToProtocol","nameLocation":"5929:26:92","nodeType":"VariableDeclaration","scope":21544,"src":"5921:34:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21536,"name":"uint256","nodeType":"ElementaryTypeName","src":"5921:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21539,"mutability":"mutable","name":"asset","nameLocation":"5969:5:92","nodeType":"VariableDeclaration","scope":21544,"src":"5961:13:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21538,"name":"address","nodeType":"ElementaryTypeName","src":"5961:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21541,"mutability":"mutable","name":"receiverAddress","nameLocation":"5988:15:92","nodeType":"VariableDeclaration","scope":21544,"src":"5980:23:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21540,"name":"address","nodeType":"ElementaryTypeName","src":"5980:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21543,"mutability":"mutable","name":"referralCode","nameLocation":"6016:12:92","nodeType":"VariableDeclaration","scope":21544,"src":"6009:19:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":21542,"name":"uint16","nodeType":"ElementaryTypeName","src":"6009:6:92","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"name":"FlashLoanRepaymentParams","nameLocation":"5844:24:92","nodeType":"StructDefinition","scope":21633,"src":"5837:196:92","visibility":"public"},{"canonicalName":"DataTypes.CalculateUserAccountDataParams","id":21556,"members":[{"constant":false,"id":21547,"mutability":"mutable","name":"userConfig","nameLocation":"6102:10:92","nodeType":"VariableDeclaration","scope":21556,"src":"6081:31:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":21546,"nodeType":"UserDefinedTypeName","pathNode":{"id":21545,"name":"UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"6081:20:92"},"referencedDeclaration":21322,"src":"6081:20:92","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":21549,"mutability":"mutable","name":"reservesCount","nameLocation":"6126:13:92","nodeType":"VariableDeclaration","scope":21556,"src":"6118:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21548,"name":"uint256","nodeType":"ElementaryTypeName","src":"6118:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21551,"mutability":"mutable","name":"user","nameLocation":"6153:4:92","nodeType":"VariableDeclaration","scope":21556,"src":"6145:12:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21550,"name":"address","nodeType":"ElementaryTypeName","src":"6145:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21553,"mutability":"mutable","name":"oracle","nameLocation":"6171:6:92","nodeType":"VariableDeclaration","scope":21556,"src":"6163:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21552,"name":"address","nodeType":"ElementaryTypeName","src":"6163:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21555,"mutability":"mutable","name":"userEModeCategory","nameLocation":"6189:17:92","nodeType":"VariableDeclaration","scope":21556,"src":"6183:23:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":21554,"name":"uint8","nodeType":"ElementaryTypeName","src":"6183:5:92","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"name":"CalculateUserAccountDataParams","nameLocation":"6044:30:92","nodeType":"StructDefinition","scope":21633,"src":"6037:174:92","visibility":"public"},{"canonicalName":"DataTypes.ValidateBorrowParams","id":21588,"members":[{"constant":false,"id":21559,"mutability":"mutable","name":"reserveCache","nameLocation":"6262:12:92","nodeType":"VariableDeclaration","scope":21588,"src":"6249:25:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":21558,"nodeType":"UserDefinedTypeName","pathNode":{"id":21557,"name":"ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"6249:12:92"},"referencedDeclaration":21379,"src":"6249:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"},{"constant":false,"id":21562,"mutability":"mutable","name":"userConfig","nameLocation":"6301:10:92","nodeType":"VariableDeclaration","scope":21588,"src":"6280:31:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":21561,"nodeType":"UserDefinedTypeName","pathNode":{"id":21560,"name":"UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"6280:20:92"},"referencedDeclaration":21322,"src":"6280:20:92","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"},{"constant":false,"id":21564,"mutability":"mutable","name":"asset","nameLocation":"6325:5:92","nodeType":"VariableDeclaration","scope":21588,"src":"6317:13:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21563,"name":"address","nodeType":"ElementaryTypeName","src":"6317:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21566,"mutability":"mutable","name":"userAddress","nameLocation":"6344:11:92","nodeType":"VariableDeclaration","scope":21588,"src":"6336:19:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21565,"name":"address","nodeType":"ElementaryTypeName","src":"6336:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21568,"mutability":"mutable","name":"amount","nameLocation":"6369:6:92","nodeType":"VariableDeclaration","scope":21588,"src":"6361:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21567,"name":"uint256","nodeType":"ElementaryTypeName","src":"6361:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21571,"mutability":"mutable","name":"interestRateMode","nameLocation":"6398:16:92","nodeType":"VariableDeclaration","scope":21588,"src":"6381:33:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"typeName":{"id":21570,"nodeType":"UserDefinedTypeName","pathNode":{"id":21569,"name":"InterestRateMode","nodeType":"IdentifierPath","referencedDeclaration":21337,"src":"6381:16:92"},"referencedDeclaration":21337,"src":"6381:16:92","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"visibility":"internal"},{"constant":false,"id":21573,"mutability":"mutable","name":"maxStableLoanPercent","nameLocation":"6428:20:92","nodeType":"VariableDeclaration","scope":21588,"src":"6420:28:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21572,"name":"uint256","nodeType":"ElementaryTypeName","src":"6420:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21575,"mutability":"mutable","name":"reservesCount","nameLocation":"6462:13:92","nodeType":"VariableDeclaration","scope":21588,"src":"6454:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21574,"name":"uint256","nodeType":"ElementaryTypeName","src":"6454:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21577,"mutability":"mutable","name":"oracle","nameLocation":"6489:6:92","nodeType":"VariableDeclaration","scope":21588,"src":"6481:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21576,"name":"address","nodeType":"ElementaryTypeName","src":"6481:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21579,"mutability":"mutable","name":"userEModeCategory","nameLocation":"6507:17:92","nodeType":"VariableDeclaration","scope":21588,"src":"6501:23:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":21578,"name":"uint8","nodeType":"ElementaryTypeName","src":"6501:5:92","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":21581,"mutability":"mutable","name":"priceOracleSentinel","nameLocation":"6538:19:92","nodeType":"VariableDeclaration","scope":21588,"src":"6530:27:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21580,"name":"address","nodeType":"ElementaryTypeName","src":"6530:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21583,"mutability":"mutable","name":"isolationModeActive","nameLocation":"6568:19:92","nodeType":"VariableDeclaration","scope":21588,"src":"6563:24:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21582,"name":"bool","nodeType":"ElementaryTypeName","src":"6563:4:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":21585,"mutability":"mutable","name":"isolationModeCollateralAddress","nameLocation":"6601:30:92","nodeType":"VariableDeclaration","scope":21588,"src":"6593:38:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21584,"name":"address","nodeType":"ElementaryTypeName","src":"6593:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21587,"mutability":"mutable","name":"isolationModeDebtCeiling","nameLocation":"6645:24:92","nodeType":"VariableDeclaration","scope":21588,"src":"6637:32:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21586,"name":"uint256","nodeType":"ElementaryTypeName","src":"6637:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"ValidateBorrowParams","nameLocation":"6222:20:92","nodeType":"StructDefinition","scope":21633,"src":"6215:459:92","visibility":"public"},{"canonicalName":"DataTypes.ValidateLiquidationCallParams","id":21598,"members":[{"constant":false,"id":21591,"mutability":"mutable","name":"debtReserveCache","nameLocation":"6734:16:92","nodeType":"VariableDeclaration","scope":21598,"src":"6721:29:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"},"typeName":{"id":21590,"nodeType":"UserDefinedTypeName","pathNode":{"id":21589,"name":"ReserveCache","nodeType":"IdentifierPath","referencedDeclaration":21379,"src":"6721:12:92"},"referencedDeclaration":21379,"src":"6721:12:92","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveCache_$21379_storage_ptr","typeString":"struct DataTypes.ReserveCache"}},"visibility":"internal"},{"constant":false,"id":21593,"mutability":"mutable","name":"totalDebt","nameLocation":"6764:9:92","nodeType":"VariableDeclaration","scope":21598,"src":"6756:17:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21592,"name":"uint256","nodeType":"ElementaryTypeName","src":"6756:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21595,"mutability":"mutable","name":"healthFactor","nameLocation":"6787:12:92","nodeType":"VariableDeclaration","scope":21598,"src":"6779:20:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21594,"name":"uint256","nodeType":"ElementaryTypeName","src":"6779:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21597,"mutability":"mutable","name":"priceOracleSentinel","nameLocation":"6813:19:92","nodeType":"VariableDeclaration","scope":21598,"src":"6805:27:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21596,"name":"address","nodeType":"ElementaryTypeName","src":"6805:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"ValidateLiquidationCallParams","nameLocation":"6685:29:92","nodeType":"StructDefinition","scope":21633,"src":"6678:159:92","visibility":"public"},{"canonicalName":"DataTypes.CalculateInterestRatesParams","id":21617,"members":[{"constant":false,"id":21600,"mutability":"mutable","name":"unbacked","nameLocation":"6891:8:92","nodeType":"VariableDeclaration","scope":21617,"src":"6883:16:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21599,"name":"uint256","nodeType":"ElementaryTypeName","src":"6883:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21602,"mutability":"mutable","name":"liquidityAdded","nameLocation":"6913:14:92","nodeType":"VariableDeclaration","scope":21617,"src":"6905:22:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21601,"name":"uint256","nodeType":"ElementaryTypeName","src":"6905:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21604,"mutability":"mutable","name":"liquidityTaken","nameLocation":"6941:14:92","nodeType":"VariableDeclaration","scope":21617,"src":"6933:22:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21603,"name":"uint256","nodeType":"ElementaryTypeName","src":"6933:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21606,"mutability":"mutable","name":"totalStableDebt","nameLocation":"6969:15:92","nodeType":"VariableDeclaration","scope":21617,"src":"6961:23:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21605,"name":"uint256","nodeType":"ElementaryTypeName","src":"6961:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21608,"mutability":"mutable","name":"totalVariableDebt","nameLocation":"6998:17:92","nodeType":"VariableDeclaration","scope":21617,"src":"6990:25:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21607,"name":"uint256","nodeType":"ElementaryTypeName","src":"6990:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21610,"mutability":"mutable","name":"averageStableBorrowRate","nameLocation":"7029:23:92","nodeType":"VariableDeclaration","scope":21617,"src":"7021:31:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21609,"name":"uint256","nodeType":"ElementaryTypeName","src":"7021:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21612,"mutability":"mutable","name":"reserveFactor","nameLocation":"7066:13:92","nodeType":"VariableDeclaration","scope":21617,"src":"7058:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21611,"name":"uint256","nodeType":"ElementaryTypeName","src":"7058:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21614,"mutability":"mutable","name":"reserve","nameLocation":"7093:7:92","nodeType":"VariableDeclaration","scope":21617,"src":"7085:15:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21613,"name":"address","nodeType":"ElementaryTypeName","src":"7085:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21616,"mutability":"mutable","name":"aToken","nameLocation":"7114:6:92","nodeType":"VariableDeclaration","scope":21617,"src":"7106:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21615,"name":"address","nodeType":"ElementaryTypeName","src":"7106:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"CalculateInterestRatesParams","nameLocation":"6848:28:92","nodeType":"StructDefinition","scope":21633,"src":"6841:284:92","visibility":"public"},{"canonicalName":"DataTypes.InitReserveParams","id":21632,"members":[{"constant":false,"id":21619,"mutability":"mutable","name":"asset","nameLocation":"7168:5:92","nodeType":"VariableDeclaration","scope":21632,"src":"7160:13:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21618,"name":"address","nodeType":"ElementaryTypeName","src":"7160:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21621,"mutability":"mutable","name":"aTokenAddress","nameLocation":"7187:13:92","nodeType":"VariableDeclaration","scope":21632,"src":"7179:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21620,"name":"address","nodeType":"ElementaryTypeName","src":"7179:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21623,"mutability":"mutable","name":"stableDebtAddress","nameLocation":"7214:17:92","nodeType":"VariableDeclaration","scope":21632,"src":"7206:25:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21622,"name":"address","nodeType":"ElementaryTypeName","src":"7206:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21625,"mutability":"mutable","name":"variableDebtAddress","nameLocation":"7245:19:92","nodeType":"VariableDeclaration","scope":21632,"src":"7237:27:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21624,"name":"address","nodeType":"ElementaryTypeName","src":"7237:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21627,"mutability":"mutable","name":"interestRateStrategyAddress","nameLocation":"7278:27:92","nodeType":"VariableDeclaration","scope":21632,"src":"7270:35:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21626,"name":"address","nodeType":"ElementaryTypeName","src":"7270:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21629,"mutability":"mutable","name":"reservesCount","nameLocation":"7318:13:92","nodeType":"VariableDeclaration","scope":21632,"src":"7311:20:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":21628,"name":"uint16","nodeType":"ElementaryTypeName","src":"7311:6:92","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":21631,"mutability":"mutable","name":"maxNumberReserves","nameLocation":"7344:17:92","nodeType":"VariableDeclaration","scope":21632,"src":"7337:24:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":21630,"name":"uint16","nodeType":"ElementaryTypeName","src":"7337:6:92","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"name":"InitReserveParams","nameLocation":"7136:17:92","nodeType":"StructDefinition","scope":21633,"src":"7129:237:92","visibility":"public"}],"scope":21634,"src":"62:7306:92","usedErrors":[]}],"src":"37:7332:92"},"id":92},"@aave/core-v3/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol","exportedSymbols":{"DataTypes":[21633],"DefaultReserveInterestRateStrategy":[22191],"Errors":[12642],"IDefaultInterestRateStrategy":[4091],"IERC20":[1442],"IPoolAddressesProvider":[5069],"IReserveInterestRateStrategy":[5913],"PercentageMath":[21132],"WadRayMath":[21219]},"id":22192,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":21635,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:93"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../dependencies/openzeppelin/contracts/IERC20.sol","id":21637,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22192,"sourceUnit":1443,"src":"63:76:93","symbolAliases":[{"foreign":{"id":21636,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:6:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol","file":"../libraries/math/WadRayMath.sol","id":21639,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22192,"sourceUnit":21220,"src":"140:60:93","symbolAliases":[{"foreign":{"id":21638,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"148:10:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol","file":"../libraries/math/PercentageMath.sol","id":21641,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22192,"sourceUnit":21133,"src":"201:68:93","symbolAliases":[{"foreign":{"id":21640,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"209:14:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"../libraries/types/DataTypes.sol","id":21643,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22192,"sourceUnit":21634,"src":"270:59:93","symbolAliases":[{"foreign":{"id":21642,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"278:9:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol","file":"../libraries/helpers/Errors.sol","id":21645,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22192,"sourceUnit":12643,"src":"330:55:93","symbolAliases":[{"foreign":{"id":21644,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"338:6:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IDefaultInterestRateStrategy.sol","file":"../../interfaces/IDefaultInterestRateStrategy.sol","id":21647,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22192,"sourceUnit":4092,"src":"386:95:93","symbolAliases":[{"foreign":{"id":21646,"name":"IDefaultInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"src":"394:28:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol","file":"../../interfaces/IReserveInterestRateStrategy.sol","id":21649,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22192,"sourceUnit":5914,"src":"482:95:93","symbolAliases":[{"foreign":{"id":21648,"name":"IReserveInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"src":"490:28:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":21651,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22192,"sourceUnit":5070,"src":"578:83:93","symbolAliases":[{"foreign":{"id":21650,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"586:22:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":21653,"name":"IDefaultInterestRateStrategy","nodeType":"IdentifierPath","referencedDeclaration":4091,"src":"1164:28:93"},"id":21654,"nodeType":"InheritanceSpecifier","src":"1164:28:93"}],"canonicalName":"DefaultReserveInterestRateStrategy","contractDependencies":[],"contractKind":"contract","documentation":{"id":21652,"nodeType":"StructuredDocumentation","src":"663:453:93","text":" @title DefaultReserveInterestRateStrategy contract\n @author Aave\n @notice Implements the calculation of the interest rates depending on the reserve state\n @dev The model of interest rate is based on 2 slopes, one before the `OPTIMAL_USAGE_RATIO`\n point of usage and another from that one to 100%.\n - An instance of this same contract, can't be used across different Aave markets, due to the caching\n   of the PoolAddressesProvider"},"fullyImplemented":true,"id":22191,"linearizedBaseContracts":[22191,4091,5913],"name":"DefaultReserveInterestRateStrategy","nameLocation":"1126:34:93","nodeType":"ContractDefinition","nodes":[{"id":21657,"libraryName":{"id":21655,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":21219,"src":"1203:10:93"},"nodeType":"UsingForDirective","src":"1197:29:93","typeName":{"id":21656,"name":"uint256","nodeType":"ElementaryTypeName","src":"1218:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":21660,"libraryName":{"id":21658,"name":"PercentageMath","nodeType":"IdentifierPath","referencedDeclaration":21132,"src":"1235:14:93"},"nodeType":"UsingForDirective","src":"1229:33:93","typeName":{"id":21659,"name":"uint256","nodeType":"ElementaryTypeName","src":"1254:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"baseFunctions":[4017],"constant":false,"documentation":{"id":21661,"nodeType":"StructuredDocumentation","src":"1266:44:93","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"54c365c6","id":21663,"mutability":"immutable","name":"OPTIMAL_USAGE_RATIO","nameLocation":"1338:19:93","nodeType":"VariableDeclaration","scope":22191,"src":"1313:44:93","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21662,"name":"uint256","nodeType":"ElementaryTypeName","src":"1313:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"baseFunctions":[4023],"constant":false,"documentation":{"id":21664,"nodeType":"StructuredDocumentation","src":"1362:44:93","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"6fb92589","id":21666,"mutability":"immutable","name":"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","nameLocation":"1434:34:93","nodeType":"VariableDeclaration","scope":22191,"src":"1409:59:93","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21665,"name":"uint256","nodeType":"ElementaryTypeName","src":"1409:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"baseFunctions":[4029],"constant":false,"documentation":{"id":21667,"nodeType":"StructuredDocumentation","src":"1473:44:93","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"a9c622f8","id":21669,"mutability":"immutable","name":"MAX_EXCESS_USAGE_RATIO","nameLocation":"1545:22:93","nodeType":"VariableDeclaration","scope":22191,"src":"1520:47:93","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21668,"name":"uint256","nodeType":"ElementaryTypeName","src":"1520:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"baseFunctions":[4035],"constant":false,"documentation":{"id":21670,"nodeType":"StructuredDocumentation","src":"1572:44:93","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"fe5fd698","id":21672,"mutability":"immutable","name":"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO","nameLocation":"1644:37:93","nodeType":"VariableDeclaration","scope":22191,"src":"1619:62:93","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21671,"name":"uint256","nodeType":"ElementaryTypeName","src":"1619:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"baseFunctions":[4042],"constant":false,"functionSelector":"0542975c","id":21675,"mutability":"immutable","name":"ADDRESSES_PROVIDER","nameLocation":"1726:18:93","nodeType":"VariableDeclaration","scope":22191,"src":"1686:58:93","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":21674,"nodeType":"UserDefinedTypeName","pathNode":{"id":21673,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"1686:22:93"},"referencedDeclaration":5069,"src":"1686:22:93","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"public"},{"constant":false,"id":21677,"mutability":"immutable","name":"_baseVariableBorrowRate","nameLocation":"1845:23:93","nodeType":"VariableDeclaration","scope":22191,"src":"1818:50:93","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21676,"name":"uint256","nodeType":"ElementaryTypeName","src":"1818:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21679,"mutability":"immutable","name":"_variableRateSlope1","nameLocation":"2008:19:93","nodeType":"VariableDeclaration","scope":22191,"src":"1981:46:93","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21678,"name":"uint256","nodeType":"ElementaryTypeName","src":"1981:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21681,"mutability":"immutable","name":"_variableRateSlope2","nameLocation":"2158:19:93","nodeType":"VariableDeclaration","scope":22191,"src":"2131:46:93","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21680,"name":"uint256","nodeType":"ElementaryTypeName","src":"2131:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21683,"mutability":"immutable","name":"_stableRateSlope1","nameLocation":"2315:17:93","nodeType":"VariableDeclaration","scope":22191,"src":"2288:44:93","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21682,"name":"uint256","nodeType":"ElementaryTypeName","src":"2288:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21685,"mutability":"immutable","name":"_stableRateSlope2","nameLocation":"2461:17:93","nodeType":"VariableDeclaration","scope":22191,"src":"2434:44:93","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21684,"name":"uint256","nodeType":"ElementaryTypeName","src":"2434:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21687,"mutability":"immutable","name":"_baseStableRateOffset","nameLocation":"2586:21:93","nodeType":"VariableDeclaration","scope":22191,"src":"2559:48:93","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21686,"name":"uint256","nodeType":"ElementaryTypeName","src":"2559:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21689,"mutability":"immutable","name":"_stableRateExcessOffset","nameLocation":"2748:23:93","nodeType":"VariableDeclaration","scope":22191,"src":"2721:50:93","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21688,"name":"uint256","nodeType":"ElementaryTypeName","src":"2721:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"body":{"id":21786,"nodeType":"Block","src":"3989:865:93","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21715,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21219,"src":"4003:10:93","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$21219_$","typeString":"type(library WadRayMath)"}},"id":21716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RAY","nodeType":"MemberAccess","referencedDeclaration":21144,"src":"4003:14:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":21717,"name":"optimalUsageRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21695,"src":"4021:17:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4003:35:93","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":21719,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"4040:6:93","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":21720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_OPTIMAL_USAGE_RATIO","nodeType":"MemberAccess","referencedDeclaration":12617,"src":"4040:34:93","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":21714,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3995:7:93","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":21721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3995:80:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21722,"nodeType":"ExpressionStatement","src":"3995:80:93"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21724,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21219,"src":"4096:10:93","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$21219_$","typeString":"type(library WadRayMath)"}},"id":21725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RAY","nodeType":"MemberAccess","referencedDeclaration":21144,"src":"4096:14:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":21726,"name":"optimalStableToTotalDebtRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21711,"src":"4114:29:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4096:47:93","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":21728,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"4151:6:93","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":21729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","nodeType":"MemberAccess","referencedDeclaration":12620,"src":"4151:49:93","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":21723,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4081:7:93","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":21730,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4081:125:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21731,"nodeType":"ExpressionStatement","src":"4081:125:93"},{"expression":{"id":21734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21732,"name":"OPTIMAL_USAGE_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21663,"src":"4212:19:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21733,"name":"optimalUsageRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21695,"src":"4234:17:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4212:39:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21735,"nodeType":"ExpressionStatement","src":"4212:39:93"},{"expression":{"id":21741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21736,"name":"MAX_EXCESS_USAGE_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21669,"src":"4257:22:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21737,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21219,"src":"4282:10:93","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$21219_$","typeString":"type(library WadRayMath)"}},"id":21738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RAY","nodeType":"MemberAccess","referencedDeclaration":21144,"src":"4282:14:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":21739,"name":"optimalUsageRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21695,"src":"4299:17:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4282:34:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4257:59:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21742,"nodeType":"ExpressionStatement","src":"4257:59:93"},{"expression":{"id":21745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21743,"name":"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21666,"src":"4322:34:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21744,"name":"optimalStableToTotalDebtRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21711,"src":"4359:29:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4322:66:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21746,"nodeType":"ExpressionStatement","src":"4322:66:93"},{"expression":{"id":21752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21747,"name":"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21672,"src":"4394:37:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21748,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21219,"src":"4434:10:93","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WadRayMath_$21219_$","typeString":"type(library WadRayMath)"}},"id":21749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RAY","nodeType":"MemberAccess","referencedDeclaration":21144,"src":"4434:14:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":21750,"name":"optimalStableToTotalDebtRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21711,"src":"4451:29:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4434:46:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4394:86:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21753,"nodeType":"ExpressionStatement","src":"4394:86:93"},{"expression":{"id":21756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21754,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21675,"src":"4486:18:93","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21755,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21693,"src":"4507:8:93","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"src":"4486:29:93","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":21757,"nodeType":"ExpressionStatement","src":"4486:29:93"},{"expression":{"id":21760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21758,"name":"_baseVariableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21677,"src":"4521:23:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21759,"name":"baseVariableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21697,"src":"4547:22:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4521:48:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21761,"nodeType":"ExpressionStatement","src":"4521:48:93"},{"expression":{"id":21764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21762,"name":"_variableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21679,"src":"4575:19:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21763,"name":"variableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21699,"src":"4597:18:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4575:40:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21765,"nodeType":"ExpressionStatement","src":"4575:40:93"},{"expression":{"id":21768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21766,"name":"_variableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21681,"src":"4621:19:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21767,"name":"variableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21701,"src":"4643:18:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4621:40:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21769,"nodeType":"ExpressionStatement","src":"4621:40:93"},{"expression":{"id":21772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21770,"name":"_stableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21683,"src":"4667:17:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21771,"name":"stableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21703,"src":"4687:16:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4667:36:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21773,"nodeType":"ExpressionStatement","src":"4667:36:93"},{"expression":{"id":21776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21774,"name":"_stableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21685,"src":"4709:17:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21775,"name":"stableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21705,"src":"4729:16:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4709:36:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21777,"nodeType":"ExpressionStatement","src":"4709:36:93"},{"expression":{"id":21780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21778,"name":"_baseStableRateOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21687,"src":"4751:21:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21779,"name":"baseStableRateOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21707,"src":"4775:20:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4751:44:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21781,"nodeType":"ExpressionStatement","src":"4751:44:93"},{"expression":{"id":21784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21782,"name":"_stableRateExcessOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21689,"src":"4801:23:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21783,"name":"stableRateExcessOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21709,"src":"4827:22:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4801:48:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21785,"nodeType":"ExpressionStatement","src":"4801:48:93"}]},"documentation":{"id":21690,"nodeType":"StructuredDocumentation","src":"2776:853:93","text":" @dev Constructor.\n @param provider The address of the PoolAddressesProvider contract\n @param optimalUsageRatio The optimal usage ratio\n @param baseVariableBorrowRate The base variable borrow rate\n @param variableRateSlope1 The variable rate slope below optimal usage ratio\n @param variableRateSlope2 The variable rate slope above optimal usage ratio\n @param stableRateSlope1 The stable rate slope below optimal usage ratio\n @param stableRateSlope2 The stable rate slope above optimal usage ratio\n @param baseStableRateOffset The premium on top of variable rate for base stable borrowing rate\n @param stableRateExcessOffset The premium on top of stable rate when there stable debt surpass the threshold\n @param optimalStableToTotalDebtRatio The optimal stable debt to total debt ratio of the reserve"},"id":21787,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":21712,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21693,"mutability":"mutable","name":"provider","nameLocation":"3672:8:93","nodeType":"VariableDeclaration","scope":21787,"src":"3649:31:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":21692,"nodeType":"UserDefinedTypeName","pathNode":{"id":21691,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"3649:22:93"},"referencedDeclaration":5069,"src":"3649:22:93","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"},{"constant":false,"id":21695,"mutability":"mutable","name":"optimalUsageRatio","nameLocation":"3694:17:93","nodeType":"VariableDeclaration","scope":21787,"src":"3686:25:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21694,"name":"uint256","nodeType":"ElementaryTypeName","src":"3686:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21697,"mutability":"mutable","name":"baseVariableBorrowRate","nameLocation":"3725:22:93","nodeType":"VariableDeclaration","scope":21787,"src":"3717:30:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21696,"name":"uint256","nodeType":"ElementaryTypeName","src":"3717:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21699,"mutability":"mutable","name":"variableRateSlope1","nameLocation":"3761:18:93","nodeType":"VariableDeclaration","scope":21787,"src":"3753:26:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21698,"name":"uint256","nodeType":"ElementaryTypeName","src":"3753:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21701,"mutability":"mutable","name":"variableRateSlope2","nameLocation":"3793:18:93","nodeType":"VariableDeclaration","scope":21787,"src":"3785:26:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21700,"name":"uint256","nodeType":"ElementaryTypeName","src":"3785:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21703,"mutability":"mutable","name":"stableRateSlope1","nameLocation":"3825:16:93","nodeType":"VariableDeclaration","scope":21787,"src":"3817:24:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21702,"name":"uint256","nodeType":"ElementaryTypeName","src":"3817:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21705,"mutability":"mutable","name":"stableRateSlope2","nameLocation":"3855:16:93","nodeType":"VariableDeclaration","scope":21787,"src":"3847:24:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21704,"name":"uint256","nodeType":"ElementaryTypeName","src":"3847:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21707,"mutability":"mutable","name":"baseStableRateOffset","nameLocation":"3885:20:93","nodeType":"VariableDeclaration","scope":21787,"src":"3877:28:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21706,"name":"uint256","nodeType":"ElementaryTypeName","src":"3877:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21709,"mutability":"mutable","name":"stableRateExcessOffset","nameLocation":"3919:22:93","nodeType":"VariableDeclaration","scope":21787,"src":"3911:30:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21708,"name":"uint256","nodeType":"ElementaryTypeName","src":"3911:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21711,"mutability":"mutable","name":"optimalStableToTotalDebtRatio","nameLocation":"3955:29:93","nodeType":"VariableDeclaration","scope":21787,"src":"3947:37:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21710,"name":"uint256","nodeType":"ElementaryTypeName","src":"3947:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3643:345:93"},"returnParameters":{"id":21713,"nodeType":"ParameterList","parameters":[],"src":"3989:0:93"},"scope":22191,"src":"3632:1222:93","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[4048],"body":{"id":21795,"nodeType":"Block","src":"4970:37:93","statements":[{"expression":{"id":21793,"name":"_variableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21679,"src":"4983:19:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21792,"id":21794,"nodeType":"Return","src":"4976:26:93"}]},"documentation":{"id":21788,"nodeType":"StructuredDocumentation","src":"4858:44:93","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"0b3429a2","id":21796,"implemented":true,"kind":"function","modifiers":[],"name":"getVariableRateSlope1","nameLocation":"4914:21:93","nodeType":"FunctionDefinition","parameters":{"id":21789,"nodeType":"ParameterList","parameters":[],"src":"4935:2:93"},"returnParameters":{"id":21792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21791,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21796,"src":"4961:7:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21790,"name":"uint256","nodeType":"ElementaryTypeName","src":"4961:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4960:9:93"},"scope":22191,"src":"4905:102:93","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4054],"body":{"id":21804,"nodeType":"Block","src":"5123:37:93","statements":[{"expression":{"id":21802,"name":"_variableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21681,"src":"5136:19:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21801,"id":21803,"nodeType":"Return","src":"5129:26:93"}]},"documentation":{"id":21797,"nodeType":"StructuredDocumentation","src":"5011:44:93","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"f4202409","id":21805,"implemented":true,"kind":"function","modifiers":[],"name":"getVariableRateSlope2","nameLocation":"5067:21:93","nodeType":"FunctionDefinition","parameters":{"id":21798,"nodeType":"ParameterList","parameters":[],"src":"5088:2:93"},"returnParameters":{"id":21801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21800,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21805,"src":"5114:7:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21799,"name":"uint256","nodeType":"ElementaryTypeName","src":"5114:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5113:9:93"},"scope":22191,"src":"5058:102:93","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4060],"body":{"id":21813,"nodeType":"Block","src":"5274:35:93","statements":[{"expression":{"id":21811,"name":"_stableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21683,"src":"5287:17:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21810,"id":21812,"nodeType":"Return","src":"5280:24:93"}]},"documentation":{"id":21806,"nodeType":"StructuredDocumentation","src":"5164:44:93","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"d5cd7391","id":21814,"implemented":true,"kind":"function","modifiers":[],"name":"getStableRateSlope1","nameLocation":"5220:19:93","nodeType":"FunctionDefinition","parameters":{"id":21807,"nodeType":"ParameterList","parameters":[],"src":"5239:2:93"},"returnParameters":{"id":21810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21809,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21814,"src":"5265:7:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21808,"name":"uint256","nodeType":"ElementaryTypeName","src":"5265:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5264:9:93"},"scope":22191,"src":"5211:98:93","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4066],"body":{"id":21822,"nodeType":"Block","src":"5423:35:93","statements":[{"expression":{"id":21820,"name":"_stableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21685,"src":"5436:17:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21819,"id":21821,"nodeType":"Return","src":"5429:24:93"}]},"documentation":{"id":21815,"nodeType":"StructuredDocumentation","src":"5313:44:93","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"14e32da4","id":21823,"implemented":true,"kind":"function","modifiers":[],"name":"getStableRateSlope2","nameLocation":"5369:19:93","nodeType":"FunctionDefinition","parameters":{"id":21816,"nodeType":"ParameterList","parameters":[],"src":"5388:2:93"},"returnParameters":{"id":21819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21818,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21823,"src":"5414:7:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21817,"name":"uint256","nodeType":"ElementaryTypeName","src":"5414:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5413:9:93"},"scope":22191,"src":"5360:98:93","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4072],"body":{"id":21831,"nodeType":"Block","src":"5578:41:93","statements":[{"expression":{"id":21829,"name":"_stableRateExcessOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21689,"src":"5591:23:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21828,"id":21830,"nodeType":"Return","src":"5584:30:93"}]},"documentation":{"id":21824,"nodeType":"StructuredDocumentation","src":"5462:44:93","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"bc626908","id":21832,"implemented":true,"kind":"function","modifiers":[],"name":"getStableRateExcessOffset","nameLocation":"5518:25:93","nodeType":"FunctionDefinition","parameters":{"id":21825,"nodeType":"ParameterList","parameters":[],"src":"5543:2:93"},"returnParameters":{"id":21828,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21827,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21832,"src":"5569:7:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21826,"name":"uint256","nodeType":"ElementaryTypeName","src":"5569:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5568:9:93"},"scope":22191,"src":"5509:110:93","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4078],"body":{"id":21842,"nodeType":"Block","src":"5735:61:93","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21838,"name":"_variableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21679,"src":"5748:19:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":21839,"name":"_baseStableRateOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21687,"src":"5770:21:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5748:43:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21837,"id":21841,"nodeType":"Return","src":"5741:50:93"}]},"documentation":{"id":21833,"nodeType":"StructuredDocumentation","src":"5623:44:93","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"acd78686","id":21843,"implemented":true,"kind":"function","modifiers":[],"name":"getBaseStableBorrowRate","nameLocation":"5679:23:93","nodeType":"FunctionDefinition","parameters":{"id":21834,"nodeType":"ParameterList","parameters":[],"src":"5702:2:93"},"returnParameters":{"id":21837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21836,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21843,"src":"5726:7:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21835,"name":"uint256","nodeType":"ElementaryTypeName","src":"5726:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5725:9:93"},"scope":22191,"src":"5670:126:93","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[4084],"body":{"id":21852,"nodeType":"Block","src":"5925:41:93","statements":[{"expression":{"id":21850,"name":"_baseVariableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21677,"src":"5938:23:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21849,"id":21851,"nodeType":"Return","src":"5931:30:93"}]},"documentation":{"id":21844,"nodeType":"StructuredDocumentation","src":"5800:44:93","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"34762ca5","id":21853,"implemented":true,"kind":"function","modifiers":[],"name":"getBaseVariableBorrowRate","nameLocation":"5856:25:93","nodeType":"FunctionDefinition","overrides":{"id":21846,"nodeType":"OverrideSpecifier","overrides":[],"src":"5898:8:93"},"parameters":{"id":21845,"nodeType":"ParameterList","parameters":[],"src":"5881:2:93"},"returnParameters":{"id":21849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21848,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21853,"src":"5916:7:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21847,"name":"uint256","nodeType":"ElementaryTypeName","src":"5916:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5915:9:93"},"scope":22191,"src":"5847:119:93","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4090],"body":{"id":21866,"nodeType":"Block","src":"6094:85:93","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21860,"name":"_baseVariableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21677,"src":"6107:23:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":21861,"name":"_variableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21679,"src":"6133:19:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6107:45:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":21863,"name":"_variableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21681,"src":"6155:19:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6107:67:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":21859,"id":21865,"nodeType":"Return","src":"6100:74:93"}]},"documentation":{"id":21854,"nodeType":"StructuredDocumentation","src":"5970:44:93","text":"@inheritdoc IDefaultInterestRateStrategy"},"functionSelector":"80031e37","id":21867,"implemented":true,"kind":"function","modifiers":[],"name":"getMaxVariableBorrowRate","nameLocation":"6026:24:93","nodeType":"FunctionDefinition","overrides":{"id":21856,"nodeType":"OverrideSpecifier","overrides":[],"src":"6067:8:93"},"parameters":{"id":21855,"nodeType":"ParameterList","parameters":[],"src":"6050:2:93"},"returnParameters":{"id":21859,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21858,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21867,"src":"6085:7:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21857,"name":"uint256","nodeType":"ElementaryTypeName","src":"6085:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6084:9:93"},"scope":22191,"src":"6017:162:93","stateMutability":"view","virtual":false,"visibility":"external"},{"canonicalName":"DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars","id":21886,"members":[{"constant":false,"id":21869,"mutability":"mutable","name":"availableLiquidity","nameLocation":"6231:18:93","nodeType":"VariableDeclaration","scope":21886,"src":"6223:26:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21868,"name":"uint256","nodeType":"ElementaryTypeName","src":"6223:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21871,"mutability":"mutable","name":"totalDebt","nameLocation":"6263:9:93","nodeType":"VariableDeclaration","scope":21886,"src":"6255:17:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21870,"name":"uint256","nodeType":"ElementaryTypeName","src":"6255:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21873,"mutability":"mutable","name":"currentVariableBorrowRate","nameLocation":"6286:25:93","nodeType":"VariableDeclaration","scope":21886,"src":"6278:33:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21872,"name":"uint256","nodeType":"ElementaryTypeName","src":"6278:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21875,"mutability":"mutable","name":"currentStableBorrowRate","nameLocation":"6325:23:93","nodeType":"VariableDeclaration","scope":21886,"src":"6317:31:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21874,"name":"uint256","nodeType":"ElementaryTypeName","src":"6317:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21877,"mutability":"mutable","name":"currentLiquidityRate","nameLocation":"6362:20:93","nodeType":"VariableDeclaration","scope":21886,"src":"6354:28:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21876,"name":"uint256","nodeType":"ElementaryTypeName","src":"6354:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21879,"mutability":"mutable","name":"borrowUsageRatio","nameLocation":"6396:16:93","nodeType":"VariableDeclaration","scope":21886,"src":"6388:24:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21878,"name":"uint256","nodeType":"ElementaryTypeName","src":"6388:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21881,"mutability":"mutable","name":"supplyUsageRatio","nameLocation":"6426:16:93","nodeType":"VariableDeclaration","scope":21886,"src":"6418:24:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21880,"name":"uint256","nodeType":"ElementaryTypeName","src":"6418:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21883,"mutability":"mutable","name":"stableToTotalDebtRatio","nameLocation":"6456:22:93","nodeType":"VariableDeclaration","scope":21886,"src":"6448:30:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21882,"name":"uint256","nodeType":"ElementaryTypeName","src":"6448:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21885,"mutability":"mutable","name":"availableLiquidityPlusDebt","nameLocation":"6492:26:93","nodeType":"VariableDeclaration","scope":21886,"src":"6484:34:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21884,"name":"uint256","nodeType":"ElementaryTypeName","src":"6484:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"CalcInterestRatesLocalVars","nameLocation":"6190:26:93","nodeType":"StructDefinition","scope":22191,"src":"6183:340:93","visibility":"public"},{"baseFunctions":[5912],"body":{"id":22130,"nodeType":"Block","src":"6725:2353:93","statements":[{"assignments":[21902],"declarations":[{"constant":false,"id":21902,"mutability":"mutable","name":"vars","nameLocation":"6765:4:93","nodeType":"VariableDeclaration","scope":22130,"src":"6731:38:93","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars"},"typeName":{"id":21901,"nodeType":"UserDefinedTypeName","pathNode":{"id":21900,"name":"CalcInterestRatesLocalVars","nodeType":"IdentifierPath","referencedDeclaration":21886,"src":"6731:26:93"},"referencedDeclaration":21886,"src":"6731:26:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_storage_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars"}},"visibility":"internal"}],"id":21903,"nodeType":"VariableDeclarationStatement","src":"6731:38:93"},{"expression":{"id":21912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":21904,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"6776:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":21906,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalDebt","nodeType":"MemberAccess","referencedDeclaration":21871,"src":"6776:14:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21907,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21890,"src":"6793:6:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$21617_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}},"id":21908,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalStableDebt","nodeType":"MemberAccess","referencedDeclaration":21606,"src":"6793:22:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":21909,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21890,"src":"6818:6:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$21617_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}},"id":21910,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalVariableDebt","nodeType":"MemberAccess","referencedDeclaration":21608,"src":"6818:24:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6793:49:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6776:66:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21913,"nodeType":"ExpressionStatement","src":"6776:66:93"},{"expression":{"id":21918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":21914,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"6849:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":21916,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":21877,"src":"6849:25:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":21917,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6877:1:93","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6849:29:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21919,"nodeType":"ExpressionStatement","src":"6849:29:93"},{"expression":{"id":21924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":21920,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"6884:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":21922,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21873,"src":"6884:30:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21923,"name":"_baseVariableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21677,"src":"6917:23:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6884:56:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21925,"nodeType":"ExpressionStatement","src":"6884:56:93"},{"expression":{"id":21931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":21926,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"6946:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":21928,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21875,"src":"6946:28:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":21929,"name":"getBaseStableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21843,"src":"6977:23:93","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":21930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6977:25:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6946:56:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21932,"nodeType":"ExpressionStatement","src":"6946:56:93"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21933,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"7013:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":21934,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalDebt","nodeType":"MemberAccess","referencedDeclaration":21871,"src":"7013:14:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":21935,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7031:1:93","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7013:19:93","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22003,"nodeType":"IfStatement","src":"7009:557:93","trueBody":{"id":22002,"nodeType":"Block","src":"7034:532:93","statements":[{"expression":{"id":21946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":21937,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"7042:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":21939,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"stableToTotalDebtRatio","nodeType":"MemberAccess","referencedDeclaration":21883,"src":"7042:27:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":21943,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"7102:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":21944,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalDebt","nodeType":"MemberAccess","referencedDeclaration":21871,"src":"7102:14:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":21940,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21890,"src":"7072:6:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$21617_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}},"id":21941,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalStableDebt","nodeType":"MemberAccess","referencedDeclaration":21606,"src":"7072:22:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":21198,"src":"7072:29:93","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":21945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7072:45:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7042:75:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21947,"nodeType":"ExpressionStatement","src":"7042:75:93"},{"expression":{"id":21965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":21948,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"7125:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":21950,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"availableLiquidity","nodeType":"MemberAccess","referencedDeclaration":21869,"src":"7125:23:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":21956,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21890,"src":"7192:6:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$21617_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}},"id":21957,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aToken","nodeType":"MemberAccess","referencedDeclaration":21616,"src":"7192:13:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":21952,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21890,"src":"7166:6:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$21617_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}},"id":21953,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserve","nodeType":"MemberAccess","referencedDeclaration":21614,"src":"7166:14:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21951,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"7159:6:93","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":21954,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7159:22:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":21955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"7159:32:93","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":21958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7159:47:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":21959,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21890,"src":"7217:6:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$21617_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}},"id":21960,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidityAdded","nodeType":"MemberAccess","referencedDeclaration":21602,"src":"7217:21:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7159:79:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":21962,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21890,"src":"7249:6:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$21617_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}},"id":21963,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidityTaken","nodeType":"MemberAccess","referencedDeclaration":21604,"src":"7249:21:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7159:111:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7125:145:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21966,"nodeType":"ExpressionStatement","src":"7125:145:93"},{"expression":{"id":21975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":21967,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"7279:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":21969,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"availableLiquidityPlusDebt","nodeType":"MemberAccess","referencedDeclaration":21885,"src":"7279:31:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21970,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"7313:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":21971,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"availableLiquidity","nodeType":"MemberAccess","referencedDeclaration":21869,"src":"7313:23:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":21972,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"7339:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":21973,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalDebt","nodeType":"MemberAccess","referencedDeclaration":21871,"src":"7339:14:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7313:40:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7279:74:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21976,"nodeType":"ExpressionStatement","src":"7279:74:93"},{"expression":{"id":21986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":21977,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"7361:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":21979,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"borrowUsageRatio","nodeType":"MemberAccess","referencedDeclaration":21879,"src":"7361:21:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":21983,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"7407:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":21984,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"availableLiquidityPlusDebt","nodeType":"MemberAccess","referencedDeclaration":21885,"src":"7407:31:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":21980,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"7385:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":21981,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalDebt","nodeType":"MemberAccess","referencedDeclaration":21871,"src":"7385:14:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":21198,"src":"7385:21:93","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":21985,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7385:54:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7361:78:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21987,"nodeType":"ExpressionStatement","src":"7361:78:93"},{"expression":{"id":22000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":21988,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"7447:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":21990,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"supplyUsageRatio","nodeType":"MemberAccess","referencedDeclaration":21881,"src":"7447:21:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21994,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"7502:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":21995,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"availableLiquidityPlusDebt","nodeType":"MemberAccess","referencedDeclaration":21885,"src":"7502:31:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":21996,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21890,"src":"7536:6:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$21617_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}},"id":21997,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"unbacked","nodeType":"MemberAccess","referencedDeclaration":21600,"src":"7536:15:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7502:49:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":21991,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"7471:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":21992,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalDebt","nodeType":"MemberAccess","referencedDeclaration":21871,"src":"7471:14:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":21198,"src":"7471:21:93","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":21999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7471:88:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7447:112:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22001,"nodeType":"ExpressionStatement","src":"7447:112:93"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22004,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"7576:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":22005,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"borrowUsageRatio","nodeType":"MemberAccess","referencedDeclaration":21879,"src":"7576:21:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":22006,"name":"OPTIMAL_USAGE_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21663,"src":"7600:19:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7576:43:93","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":22068,"nodeType":"Block","src":"8023:274:93","statements":[{"expression":{"id":22053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22042,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"8031:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":22044,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21875,"src":"8031:28:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":22051,"name":"OPTIMAL_USAGE_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21663,"src":"8127:19:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":22047,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"8088:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":22048,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"borrowUsageRatio","nodeType":"MemberAccess","referencedDeclaration":21879,"src":"8088:21:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22045,"name":"_stableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21683,"src":"8063:17:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"8063:24:93","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":22049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8063:47:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":21198,"src":"8063:54:93","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":22052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8063:91:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8031:123:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22054,"nodeType":"ExpressionStatement","src":"8031:123:93"},{"expression":{"id":22066,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22055,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"8163:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":22057,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21873,"src":"8163:30:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":22064,"name":"OPTIMAL_USAGE_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21663,"src":"8263:19:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":22060,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"8224:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":22061,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"borrowUsageRatio","nodeType":"MemberAccess","referencedDeclaration":21879,"src":"8224:21:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22058,"name":"_variableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21679,"src":"8197:19:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"8197:26:93","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":22062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8197:49:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":21198,"src":"8197:56:93","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":22065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8197:93:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8163:127:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22067,"nodeType":"ExpressionStatement","src":"8163:127:93"}]},"id":22069,"nodeType":"IfStatement","src":"7572:725:93","trueBody":{"id":22041,"nodeType":"Block","src":"7621:396:93","statements":[{"assignments":[22009],"declarations":[{"constant":false,"id":22009,"mutability":"mutable","name":"excessBorrowUsageRatio","nameLocation":"7637:22:93","nodeType":"VariableDeclaration","scope":22041,"src":"7629:30:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22008,"name":"uint256","nodeType":"ElementaryTypeName","src":"7629:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22018,"initialValue":{"arguments":[{"id":22016,"name":"MAX_EXCESS_USAGE_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21669,"src":"7724:22:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22010,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"7663:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":22011,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"borrowUsageRatio","nodeType":"MemberAccess","referencedDeclaration":21879,"src":"7663:21:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":22012,"name":"OPTIMAL_USAGE_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21663,"src":"7687:19:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7663:43:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22014,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7662:45:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":21198,"src":"7662:52:93","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":22017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7662:92:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7629:125:93"},{"expression":{"id":22028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22019,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"7763:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":22021,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21875,"src":"7763:28:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22022,"name":"_stableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21683,"src":"7803:17:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"id":22025,"name":"excessBorrowUsageRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22009,"src":"7856:22:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22023,"name":"_stableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21685,"src":"7831:17:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"7831:24:93","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":22026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7831:48:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7803:76:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7763:116:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22029,"nodeType":"ExpressionStatement","src":"7763:116:93"},{"expression":{"id":22039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22030,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"7888:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":22032,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21873,"src":"7888:30:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22033,"name":"_variableRateSlope1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21679,"src":"7930:19:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"id":22036,"name":"excessBorrowUsageRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22009,"src":"7987:22:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22034,"name":"_variableRateSlope2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21681,"src":"7960:19:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"7960:26:93","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":22037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7960:50:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7930:80:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7888:122:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22040,"nodeType":"ExpressionStatement","src":"7888:122:93"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22070,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"8307:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":22071,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableToTotalDebtRatio","nodeType":"MemberAccess","referencedDeclaration":21883,"src":"8307:27:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":22072,"name":"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21666,"src":"8337:34:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8307:64:93","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22095,"nodeType":"IfStatement","src":"8303:330:93","trueBody":{"id":22094,"nodeType":"Block","src":"8373:260:93","statements":[{"assignments":[22075],"declarations":[{"constant":false,"id":22075,"mutability":"mutable","name":"excessStableDebtRatio","nameLocation":"8389:21:93","nodeType":"VariableDeclaration","scope":22094,"src":"8381:29:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22074,"name":"uint256","nodeType":"ElementaryTypeName","src":"8381:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22084,"initialValue":{"arguments":[{"id":22082,"name":"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21672,"src":"8495:37:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22076,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"8414:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":22077,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableToTotalDebtRatio","nodeType":"MemberAccess","referencedDeclaration":21883,"src":"8414:27:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":22078,"name":"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21666,"src":"8452:34:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8414:72:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22080,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8413:74:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":21198,"src":"8413:81:93","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":22083,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8413:120:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8381:152:93"},{"expression":{"id":22092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22085,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"8541:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":22087,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21875,"src":"8541:28:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":22090,"name":"excessStableDebtRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22075,"src":"8604:21:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22088,"name":"_stableRateExcessOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21689,"src":"8573:23:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"8573:30:93","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":22091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8573:53:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8541:85:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22093,"nodeType":"ExpressionStatement","src":"8541:85:93"}]}},{"expression":{"id":22120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":22096,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"8639:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":22098,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":21877,"src":"8639:25:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22114,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21132,"src":"8883:14:93","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PercentageMath_$21132_$","typeString":"type(library PercentageMath)"}},"id":22115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PERCENTAGE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":21104,"src":"8883:32:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":22116,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21890,"src":"8918:6:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$21617_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}},"id":22117,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reserveFactor","nodeType":"MemberAccess","referencedDeclaration":21612,"src":"8918:20:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8883:55:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":22110,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"8840:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":22111,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"supplyUsageRatio","nodeType":"MemberAccess","referencedDeclaration":21881,"src":"8840:21:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":22100,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21890,"src":"8696:6:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$21617_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}},"id":22101,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalStableDebt","nodeType":"MemberAccess","referencedDeclaration":21606,"src":"8696:22:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":22102,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21890,"src":"8726:6:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$21617_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}},"id":22103,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalVariableDebt","nodeType":"MemberAccess","referencedDeclaration":21608,"src":"8726:24:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":22104,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"8758:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":22105,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21873,"src":"8758:30:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":22106,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21890,"src":"8796:6:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$21617_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams memory"}},"id":22107,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"averageStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21610,"src":"8796:30:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22099,"name":"_getOverallBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22190,"src":"8667:21:93","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) pure returns (uint256)"}},"id":22108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8667:165:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"8667:172:93","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":22112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8667:195:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":21119,"src":"8667:206:93","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":22119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8667:279:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8639:307:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22121,"nodeType":"ExpressionStatement","src":"8639:307:93"},{"expression":{"components":[{"expression":{"id":22122,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"8968:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":22123,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":21877,"src":"8968:25:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":22124,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"9001:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":22125,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21875,"src":"9001:28:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":22126,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21902,"src":"9037:4:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalcInterestRatesLocalVars_$21886_memory_ptr","typeString":"struct DefaultReserveInterestRateStrategy.CalcInterestRatesLocalVars memory"}},"id":22127,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21873,"src":"9037:30:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22128,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8960:113:93","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"functionReturnParameters":21899,"id":22129,"nodeType":"Return","src":"8953:120:93"}]},"documentation":{"id":21887,"nodeType":"StructuredDocumentation","src":"6527:44:93","text":"@inheritdoc IReserveInterestRateStrategy"},"functionSelector":"a5898709","id":22131,"implemented":true,"kind":"function","modifiers":[],"name":"calculateInterestRates","nameLocation":"6583:22:93","nodeType":"FunctionDefinition","overrides":{"id":21892,"nodeType":"OverrideSpecifier","overrides":[],"src":"6680:8:93"},"parameters":{"id":21891,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21890,"mutability":"mutable","name":"params","nameLocation":"6657:6:93","nodeType":"VariableDeclaration","scope":22131,"src":"6611:52:93","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$21617_memory_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams"},"typeName":{"id":21889,"nodeType":"UserDefinedTypeName","pathNode":{"id":21888,"name":"DataTypes.CalculateInterestRatesParams","nodeType":"IdentifierPath","referencedDeclaration":21617,"src":"6611:38:93"},"referencedDeclaration":21617,"src":"6611:38:93","typeDescriptions":{"typeIdentifier":"t_struct$_CalculateInterestRatesParams_$21617_storage_ptr","typeString":"struct DataTypes.CalculateInterestRatesParams"}},"visibility":"internal"}],"src":"6605:62:93"},"returnParameters":{"id":21899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21894,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22131,"src":"6698:7:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21893,"name":"uint256","nodeType":"ElementaryTypeName","src":"6698:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21896,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22131,"src":"6707:7:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21895,"name":"uint256","nodeType":"ElementaryTypeName","src":"6707:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21898,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22131,"src":"6716:7:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21897,"name":"uint256","nodeType":"ElementaryTypeName","src":"6716:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6697:27:93"},"scope":22191,"src":"6574:2504:93","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":22189,"nodeType":"Block","src":"9832:452:93","statements":[{"assignments":[22146],"declarations":[{"constant":false,"id":22146,"mutability":"mutable","name":"totalDebt","nameLocation":"9846:9:93","nodeType":"VariableDeclaration","scope":22189,"src":"9838:17:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22145,"name":"uint256","nodeType":"ElementaryTypeName","src":"9838:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22150,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22147,"name":"totalStableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22134,"src":"9858:15:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":22148,"name":"totalVariableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22136,"src":"9876:17:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9858:35:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9838:55:93"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22151,"name":"totalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22146,"src":"9904:9:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":22152,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9917:1:93","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9904:14:93","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22156,"nodeType":"IfStatement","src":"9900:28:93","trueBody":{"expression":{"hexValue":"30","id":22154,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9927:1:93","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":22144,"id":22155,"nodeType":"Return","src":"9920:8:93"}},{"assignments":[22158],"declarations":[{"constant":false,"id":22158,"mutability":"mutable","name":"weightedVariableRate","nameLocation":"9943:20:93","nodeType":"VariableDeclaration","scope":22189,"src":"9935:28:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22157,"name":"uint256","nodeType":"ElementaryTypeName","src":"9935:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22165,"initialValue":{"arguments":[{"id":22163,"name":"currentVariableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22138,"src":"10002:25:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22159,"name":"totalVariableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22136,"src":"9966:17:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":21218,"src":"9966:26:93","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":22161,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9966:28:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"9966:35:93","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":22164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9966:62:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9935:93:93"},{"assignments":[22167],"declarations":[{"constant":false,"id":22167,"mutability":"mutable","name":"weightedStableRate","nameLocation":"10043:18:93","nodeType":"VariableDeclaration","scope":22189,"src":"10035:26:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22166,"name":"uint256","nodeType":"ElementaryTypeName","src":"10035:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22174,"initialValue":{"arguments":[{"id":22172,"name":"currentAverageStableBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22140,"src":"10098:30:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22168,"name":"totalStableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22134,"src":"10064:15:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":21218,"src":"10064:24:93","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":22170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10064:26:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"10064:33:93","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":22173,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10064:65:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10035:94:93"},{"assignments":[22176],"declarations":[{"constant":false,"id":22176,"mutability":"mutable","name":"overallBorrowRate","nameLocation":"10144:17:93","nodeType":"VariableDeclaration","scope":22189,"src":"10136:25:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22175,"name":"uint256","nodeType":"ElementaryTypeName","src":"10136:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22186,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22182,"name":"totalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22146,"src":"10222:9:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":21218,"src":"10222:18:93","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":22184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10222:20:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22177,"name":"weightedVariableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22158,"src":"10165:20:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":22178,"name":"weightedStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22167,"src":"10188:18:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10165:41:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22180,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10164:43:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":21198,"src":"10164:50:93","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":22185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10164:84:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10136:112:93"},{"expression":{"id":22187,"name":"overallBorrowRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22176,"src":"10262:17:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":22144,"id":22188,"nodeType":"Return","src":"10255:24:93"}]},"documentation":{"id":22132,"nodeType":"StructuredDocumentation","src":"9082:537:93","text":" @dev Calculates the overall borrow rate as the weighted average between the total variable debt and total stable\n debt\n @param totalStableDebt The total borrowed from the reserve at a stable rate\n @param totalVariableDebt The total borrowed from the reserve at a variable rate\n @param currentVariableBorrowRate The current variable borrow rate of the reserve\n @param currentAverageStableBorrowRate The current weighted average of all the stable rate loans\n @return The weighted averaged borrow rate"},"id":22190,"implemented":true,"kind":"function","modifiers":[],"name":"_getOverallBorrowRate","nameLocation":"9631:21:93","nodeType":"FunctionDefinition","parameters":{"id":22141,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22134,"mutability":"mutable","name":"totalStableDebt","nameLocation":"9666:15:93","nodeType":"VariableDeclaration","scope":22190,"src":"9658:23:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22133,"name":"uint256","nodeType":"ElementaryTypeName","src":"9658:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22136,"mutability":"mutable","name":"totalVariableDebt","nameLocation":"9695:17:93","nodeType":"VariableDeclaration","scope":22190,"src":"9687:25:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22135,"name":"uint256","nodeType":"ElementaryTypeName","src":"9687:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22138,"mutability":"mutable","name":"currentVariableBorrowRate","nameLocation":"9726:25:93","nodeType":"VariableDeclaration","scope":22190,"src":"9718:33:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22137,"name":"uint256","nodeType":"ElementaryTypeName","src":"9718:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22140,"mutability":"mutable","name":"currentAverageStableBorrowRate","nameLocation":"9765:30:93","nodeType":"VariableDeclaration","scope":22190,"src":"9757:38:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22139,"name":"uint256","nodeType":"ElementaryTypeName","src":"9757:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9652:147:93"},"returnParameters":{"id":22144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22143,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22190,"src":"9823:7:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22142,"name":"uint256","nodeType":"ElementaryTypeName","src":"9823:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9822:9:93"},"scope":22191,"src":"9622:662:93","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":22192,"src":"1117:9169:93","usedErrors":[]}],"src":"37:10250:93"},"id":93},"@aave/core-v3/contracts/protocol/pool/Pool.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/pool/Pool.sol","exportedSymbols":{"BorrowLogic":[13543],"BridgeLogic":[13920],"DataTypes":[21633],"EModeLogic":[14615],"Errors":[12642],"FlashLoanLogic":[15250],"IACLManager":[3718],"IERC20WithPermit":[4127],"IPool":[4860],"IPoolAddressesProvider":[5069],"LiquidationLogic":[17171],"Pool":[23636],"PoolLogic":[17617],"PoolStorage":[25335],"ReserveConfiguration":[11857],"ReserveLogic":[18377],"SupplyLogic":[19090],"VersionedInitializable":[10573]},"id":23637,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":22193,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:94"},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol","file":"../libraries/aave-upgradeability/VersionedInitializable.sol","id":22195,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23637,"sourceUnit":10574,"src":"63:99:94","symbolAliases":[{"foreign":{"id":22194,"name":"VersionedInitializable","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:22:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol","file":"../libraries/helpers/Errors.sol","id":22197,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23637,"sourceUnit":12643,"src":"163:55:94","symbolAliases":[{"foreign":{"id":22196,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"171:6:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../libraries/configuration/ReserveConfiguration.sol","id":22199,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23637,"sourceUnit":11858,"src":"219:89:94","symbolAliases":[{"foreign":{"id":22198,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"227:20:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/PoolLogic.sol","file":"../libraries/logic/PoolLogic.sol","id":22201,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23637,"sourceUnit":17618,"src":"309:59:94","symbolAliases":[{"foreign":{"id":22200,"name":"PoolLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"317:9:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol","file":"../libraries/logic/ReserveLogic.sol","id":22203,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23637,"sourceUnit":18378,"src":"369:65:94","symbolAliases":[{"foreign":{"id":22202,"name":"ReserveLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"377:12:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol","file":"../libraries/logic/EModeLogic.sol","id":22205,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23637,"sourceUnit":14616,"src":"435:61:94","symbolAliases":[{"foreign":{"id":22204,"name":"EModeLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"443:10:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/SupplyLogic.sol","file":"../libraries/logic/SupplyLogic.sol","id":22207,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23637,"sourceUnit":19091,"src":"497:63:94","symbolAliases":[{"foreign":{"id":22206,"name":"SupplyLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"505:11:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/FlashLoanLogic.sol","file":"../libraries/logic/FlashLoanLogic.sol","id":22209,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23637,"sourceUnit":15251,"src":"561:69:94","symbolAliases":[{"foreign":{"id":22208,"name":"FlashLoanLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"569:14:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol","file":"../libraries/logic/BorrowLogic.sol","id":22211,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23637,"sourceUnit":13544,"src":"631:63:94","symbolAliases":[{"foreign":{"id":22210,"name":"BorrowLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"639:11:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/LiquidationLogic.sol","file":"../libraries/logic/LiquidationLogic.sol","id":22213,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23637,"sourceUnit":17172,"src":"695:73:94","symbolAliases":[{"foreign":{"id":22212,"name":"LiquidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"703:16:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"../libraries/types/DataTypes.sol","id":22215,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23637,"sourceUnit":21634,"src":"769:59:94","symbolAliases":[{"foreign":{"id":22214,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"777:9:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/BridgeLogic.sol","file":"../libraries/logic/BridgeLogic.sol","id":22217,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23637,"sourceUnit":13921,"src":"829:63:94","symbolAliases":[{"foreign":{"id":22216,"name":"BridgeLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"837:11:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol","file":"../../interfaces/IERC20WithPermit.sol","id":22219,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23637,"sourceUnit":4128,"src":"893:71:94","symbolAliases":[{"foreign":{"id":22218,"name":"IERC20WithPermit","nodeType":"Identifier","overloadedDeclarations":[],"src":"901:16:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":22221,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23637,"sourceUnit":5070,"src":"965:83:94","symbolAliases":[{"foreign":{"id":22220,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"973:22:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":22223,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23637,"sourceUnit":4861,"src":"1049:49:94","symbolAliases":[{"foreign":{"id":22222,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"1057:5:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IACLManager.sol","file":"../../interfaces/IACLManager.sol","id":22225,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23637,"sourceUnit":3719,"src":"1099:61:94","symbolAliases":[{"foreign":{"id":22224,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"src":"1107:11:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol","file":"./PoolStorage.sol","id":22227,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":23637,"sourceUnit":25336,"src":"1161:46:94","symbolAliases":[{"foreign":{"id":22226,"name":"PoolStorage","nodeType":"Identifier","overloadedDeclarations":[],"src":"1169:11:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":22229,"name":"VersionedInitializable","nodeType":"IdentifierPath","referencedDeclaration":10573,"src":"1845:22:94"},"id":22230,"nodeType":"InheritanceSpecifier","src":"1845:22:94"},{"baseName":{"id":22231,"name":"PoolStorage","nodeType":"IdentifierPath","referencedDeclaration":25335,"src":"1869:11:94"},"id":22232,"nodeType":"InheritanceSpecifier","src":"1869:11:94"},{"baseName":{"id":22233,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"1882:5:94"},"id":22234,"nodeType":"InheritanceSpecifier","src":"1882:5:94"}],"canonicalName":"Pool","contractDependencies":[],"contractKind":"contract","documentation":{"id":22228,"nodeType":"StructuredDocumentation","src":"1209:618:94","text":" @title Pool contract\n @author Aave\n @notice Main point of interaction with an Aave protocol's market\n - Users can:\n   # Supply\n   # Withdraw\n   # Borrow\n   # Repay\n   # Swap their loans between variable and stable rate\n   # Enable/disable their supplied assets as collateral rebalance stable rate borrow positions\n   # Liquidate positions\n   # Execute Flash Loans\n @dev To be covered by a proxy contract, owned by the PoolAddressesProvider of the specific market\n @dev All admin functions are callable by the PoolConfigurator contract defined also in the\n   PoolAddressesProvider"},"fullyImplemented":true,"id":23636,"linearizedBaseContracts":[23636,4860,25335,10573],"name":"Pool","nameLocation":"1837:4:94","nodeType":"ContractDefinition","nodes":[{"id":22238,"libraryName":{"id":22235,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":18377,"src":"1898:12:94"},"nodeType":"UsingForDirective","src":"1892:45:94","typeName":{"id":22237,"nodeType":"UserDefinedTypeName","pathNode":{"id":22236,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"1915:21:94"},"referencedDeclaration":21315,"src":"1915:21:94","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},{"constant":true,"functionSelector":"0148170e","id":22241,"mutability":"constant","name":"POOL_REVISION","nameLocation":"1965:13:94","nodeType":"VariableDeclaration","scope":23636,"src":"1941:43:94","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22239,"name":"uint256","nodeType":"ElementaryTypeName","src":"1941:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307831","id":22240,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1981:3:94","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x1"},"visibility":"public"},{"baseFunctions":[4748],"constant":false,"functionSelector":"0542975c","id":22244,"mutability":"immutable","name":"ADDRESSES_PROVIDER","nameLocation":"2028:18:94","nodeType":"VariableDeclaration","scope":23636,"src":"1988:58:94","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":22243,"nodeType":"UserDefinedTypeName","pathNode":{"id":22242,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"1988:22:94"},"referencedDeclaration":5069,"src":"1988:22:94","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"public"},{"body":{"id":22251,"nodeType":"Block","src":"2172:41:94","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":22247,"name":"_onlyPoolConfigurator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22283,"src":"2178:21:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":22248,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2178:23:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22249,"nodeType":"ExpressionStatement","src":"2178:23:94"},{"id":22250,"nodeType":"PlaceholderStatement","src":"2207:1:94"}]},"documentation":{"id":22245,"nodeType":"StructuredDocumentation","src":"2051:86:94","text":" @dev Only pool configurator can call functions marked by this modifier."},"id":22252,"name":"onlyPoolConfigurator","nameLocation":"2149:20:94","nodeType":"ModifierDefinition","parameters":{"id":22246,"nodeType":"ParameterList","parameters":[],"src":"2169:2:94"},"src":"2140:73:94","virtual":false,"visibility":"internal"},{"body":{"id":22259,"nodeType":"Block","src":"2324:34:94","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":22255,"name":"_onlyPoolAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22301,"src":"2330:14:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":22256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2330:16:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22257,"nodeType":"ExpressionStatement","src":"2330:16:94"},{"id":22258,"nodeType":"PlaceholderStatement","src":"2352:1:94"}]},"documentation":{"id":22253,"nodeType":"StructuredDocumentation","src":"2217:79:94","text":" @dev Only pool admin can call functions marked by this modifier."},"id":22260,"name":"onlyPoolAdmin","nameLocation":"2308:13:94","nodeType":"ModifierDefinition","parameters":{"id":22254,"nodeType":"ParameterList","parameters":[],"src":"2321:2:94"},"src":"2299:59:94","virtual":false,"visibility":"internal"},{"body":{"id":22267,"nodeType":"Block","src":"2462:31:94","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":22263,"name":"_onlyBridge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22319,"src":"2468:11:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":22264,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2468:13:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22265,"nodeType":"ExpressionStatement","src":"2468:13:94"},{"id":22266,"nodeType":"PlaceholderStatement","src":"2487:1:94"}]},"documentation":{"id":22261,"nodeType":"StructuredDocumentation","src":"2362:75:94","text":" @dev Only bridge can call functions marked by this modifier."},"id":22268,"name":"onlyBridge","nameLocation":"2449:10:94","nodeType":"ModifierDefinition","parameters":{"id":22262,"nodeType":"ParameterList","parameters":[],"src":"2459:2:94"},"src":"2440:53:94","virtual":false,"visibility":"internal"},{"body":{"id":22282,"nodeType":"Block","src":"2552:129:94","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22272,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22244,"src":"2573:18:94","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":22273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPoolConfigurator","nodeType":"MemberAccess","referencedDeclaration":5002,"src":"2573:38:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":22274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2573:40:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":22275,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2617:3:94","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2617:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2573:54:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22278,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"2635:6:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":22279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_NOT_POOL_CONFIGURATOR","nodeType":"MemberAccess","referencedDeclaration":12401,"src":"2635:35:94","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22271,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2558:7:94","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2558:118:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22281,"nodeType":"ExpressionStatement","src":"2558:118:94"}]},"id":22283,"implemented":true,"kind":"function","modifiers":[],"name":"_onlyPoolConfigurator","nameLocation":"2506:21:94","nodeType":"FunctionDefinition","parameters":{"id":22269,"nodeType":"ParameterList","parameters":[],"src":"2527:2:94"},"returnParameters":{"id":22270,"nodeType":"ParameterList","parameters":[],"src":"2552:0:94"},"scope":23636,"src":"2497:184:94","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":22300,"nodeType":"Block","src":"2733:139:94","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":22293,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2814:3:94","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2814:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22288,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22244,"src":"2766:18:94","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":22289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLManager","nodeType":"MemberAccess","referencedDeclaration":5026,"src":"2766:32:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":22290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2766:34:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22287,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3718,"src":"2754:11:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IACLManager_$3718_$","typeString":"type(contract IACLManager)"}},"id":22291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2754:47:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"id":22292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isPoolAdmin","nodeType":"MemberAccess","referencedDeclaration":3617,"src":"2754:59:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":22295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2754:71:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22296,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"2833:6:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":22297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_NOT_POOL_ADMIN","nodeType":"MemberAccess","referencedDeclaration":12374,"src":"2833:28:94","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22286,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2739:7:94","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22298,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2739:128:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22299,"nodeType":"ExpressionStatement","src":"2739:128:94"}]},"id":22301,"implemented":true,"kind":"function","modifiers":[],"name":"_onlyPoolAdmin","nameLocation":"2694:14:94","nodeType":"FunctionDefinition","parameters":{"id":22284,"nodeType":"ParameterList","parameters":[],"src":"2708:2:94"},"returnParameters":{"id":22285,"nodeType":"ParameterList","parameters":[],"src":"2733:0:94"},"scope":23636,"src":"2685:187:94","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":22318,"nodeType":"Block","src":"2921:132:94","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":22311,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2999:3:94","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2999:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22306,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22244,"src":"2954:18:94","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":22307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLManager","nodeType":"MemberAccess","referencedDeclaration":5026,"src":"2954:32:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":22308,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2954:34:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22305,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3718,"src":"2942:11:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IACLManager_$3718_$","typeString":"type(contract IACLManager)"}},"id":22309,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2942:47:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"id":22310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isBridge","nodeType":"MemberAccess","referencedDeclaration":3697,"src":"2942:56:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":22313,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2942:68:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22314,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"3018:6:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":22315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_NOT_BRIDGE","nodeType":"MemberAccess","referencedDeclaration":12389,"src":"3018:24:94","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22304,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2927:7:94","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2927:121:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22317,"nodeType":"ExpressionStatement","src":"2927:121:94"}]},"id":22319,"implemented":true,"kind":"function","modifiers":[],"name":"_onlyBridge","nameLocation":"2885:11:94","nodeType":"FunctionDefinition","parameters":{"id":22302,"nodeType":"ParameterList","parameters":[],"src":"2896:2:94"},"returnParameters":{"id":22303,"nodeType":"ParameterList","parameters":[],"src":"2921:0:94"},"scope":23636,"src":"2876:177:94","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[10553],"body":{"id":22327,"nodeType":"Block","src":"3129:31:94","statements":[{"expression":{"id":22325,"name":"POOL_REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22241,"src":"3142:13:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":22324,"id":22326,"nodeType":"Return","src":"3135:20:94"}]},"id":22328,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"3066:11:94","nodeType":"FunctionDefinition","overrides":{"id":22321,"nodeType":"OverrideSpecifier","overrides":[],"src":"3102:8:94"},"parameters":{"id":22320,"nodeType":"ParameterList","parameters":[],"src":"3077:2:94"},"returnParameters":{"id":22324,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22323,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22328,"src":"3120:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22322,"name":"uint256","nodeType":"ElementaryTypeName","src":"3120:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3119:9:94"},"scope":23636,"src":"3057:103:94","stateMutability":"pure","virtual":true,"visibility":"internal"},{"body":{"id":22339,"nodeType":"Block","src":"3315:40:94","statements":[{"expression":{"id":22337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22335,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22244,"src":"3321:18:94","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22336,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22332,"src":"3342:8:94","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"src":"3321:29:94","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":22338,"nodeType":"ExpressionStatement","src":"3321:29:94"}]},"documentation":{"id":22329,"nodeType":"StructuredDocumentation","src":"3164:103:94","text":" @dev Constructor.\n @param provider The address of the PoolAddressesProvider contract"},"id":22340,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":22333,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22332,"mutability":"mutable","name":"provider","nameLocation":"3305:8:94","nodeType":"VariableDeclaration","scope":22340,"src":"3282:31:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":22331,"nodeType":"UserDefinedTypeName","pathNode":{"id":22330,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"3282:22:94"},"referencedDeclaration":5069,"src":"3282:22:94","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"3281:33:94"},"returnParameters":{"id":22334,"nodeType":"ParameterList","parameters":[],"src":"3315:0:94"},"scope":23636,"src":"3270:85:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":22361,"nodeType":"Block","src":"3802:131:94","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"id":22352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22350,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22344,"src":"3816:8:94","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":22351,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22244,"src":"3828:18:94","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"src":"3816:30:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":22353,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"3848:6:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":22354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_ADDRESSES_PROVIDER","nodeType":"MemberAccess","referencedDeclaration":12407,"src":"3848:33:94","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":22349,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3808:7:94","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":22355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3808:74:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22356,"nodeType":"ExpressionStatement","src":"3808:74:94"},{"expression":{"id":22359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22357,"name":"_maxStableRateBorrowSizePercent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25332,"src":"3888:31:94","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"302e32356534","id":22358,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3922:6:94","typeDescriptions":{"typeIdentifier":"t_rational_2500_by_1","typeString":"int_const 2500"},"value":"0.25e4"},"src":"3888:40:94","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":22360,"nodeType":"ExpressionStatement","src":"3888:40:94"}]},"documentation":{"id":22341,"nodeType":"StructuredDocumentation","src":"3359:358:94","text":" @notice Initializes the Pool.\n @dev Function is invoked by the proxy contract when the Pool contract is added to the\n PoolAddressesProvider of the market.\n @dev Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations\n @param provider The address of the PoolAddressesProvider"},"functionSelector":"c4d66de8","id":22362,"implemented":true,"kind":"function","modifiers":[{"id":22347,"kind":"modifierInvocation","modifierName":{"id":22346,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":10547,"src":"3790:11:94"},"nodeType":"ModifierInvocation","src":"3790:11:94"}],"name":"initialize","nameLocation":"3729:10:94","nodeType":"FunctionDefinition","parameters":{"id":22345,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22344,"mutability":"mutable","name":"provider","nameLocation":"3763:8:94","nodeType":"VariableDeclaration","scope":22362,"src":"3740:31:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":22343,"nodeType":"UserDefinedTypeName","pathNode":{"id":22342,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"3740:22:94"},"referencedDeclaration":5069,"src":"3740:22:94","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"3739:33:94"},"returnParameters":{"id":22348,"nodeType":"ParameterList","parameters":[],"src":"3802:0:94"},"scope":23636,"src":"3720:213:94","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4421],"body":{"id":22391,"nodeType":"Block","src":"4112:183:94","statements":[{"expression":{"arguments":[{"id":22380,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"4157:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":22381,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25315,"src":"4174:13:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"baseExpression":{"id":22382,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25311,"src":"4195:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":22384,"indexExpression":{"id":22383,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22369,"src":"4208:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4195:24:94","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"id":22385,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22365,"src":"4227:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22386,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22367,"src":"4240:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22387,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22369,"src":"4254:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22388,"name":"referralCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22371,"src":"4272:12:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":22377,"name":"BridgeLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13920,"src":"4118:11:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BridgeLogic_$13920_$","typeString":"type(library BridgeLogic)"}},"id":22379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeMintUnbacked","nodeType":"MemberAccess","referencedDeclaration":13780,"src":"4118:31:94","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_address_$_t_uint256_$_t_address_$_t_uint16_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,address,uint256,address,uint16)"}},"id":22389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4118:172:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22390,"nodeType":"ExpressionStatement","src":"4118:172:94"}]},"documentation":{"id":22363,"nodeType":"StructuredDocumentation","src":"3937:21:94","text":"@inheritdoc IPool"},"functionSelector":"69a933a5","id":22392,"implemented":true,"kind":"function","modifiers":[{"id":22375,"kind":"modifierInvocation","modifierName":{"id":22374,"name":"onlyBridge","nodeType":"IdentifierPath","referencedDeclaration":22268,"src":"4101:10:94"},"nodeType":"ModifierInvocation","src":"4101:10:94"}],"name":"mintUnbacked","nameLocation":"3970:12:94","nodeType":"FunctionDefinition","overrides":{"id":22373,"nodeType":"OverrideSpecifier","overrides":[],"src":"4092:8:94"},"parameters":{"id":22372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22365,"mutability":"mutable","name":"asset","nameLocation":"3996:5:94","nodeType":"VariableDeclaration","scope":22392,"src":"3988:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22364,"name":"address","nodeType":"ElementaryTypeName","src":"3988:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22367,"mutability":"mutable","name":"amount","nameLocation":"4015:6:94","nodeType":"VariableDeclaration","scope":22392,"src":"4007:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22366,"name":"uint256","nodeType":"ElementaryTypeName","src":"4007:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22369,"mutability":"mutable","name":"onBehalfOf","nameLocation":"4035:10:94","nodeType":"VariableDeclaration","scope":22392,"src":"4027:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22368,"name":"address","nodeType":"ElementaryTypeName","src":"4027:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22371,"mutability":"mutable","name":"referralCode","nameLocation":"4058:12:94","nodeType":"VariableDeclaration","scope":22392,"src":"4051:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":22370,"name":"uint16","nodeType":"ElementaryTypeName","src":"4051:6:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"3982:92:94"},"returnParameters":{"id":22376,"nodeType":"ParameterList","parameters":[],"src":"4112:0:94"},"scope":23636,"src":"3961:334:94","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4433],"body":{"id":22418,"nodeType":"Block","src":"4460:113:94","statements":[{"expression":{"arguments":[{"baseExpression":{"id":22409,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"4511:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":22411,"indexExpression":{"id":22410,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22395,"src":"4521:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4511:16:94","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},{"id":22412,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22395,"src":"4529:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22413,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22397,"src":"4536:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22414,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22399,"src":"4544:3:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22415,"name":"_bridgeProtocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25326,"src":"4549:18:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22407,"name":"BridgeLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13920,"src":"4479:11:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BridgeLogic_$13920_$","typeString":"type(library BridgeLogic)"}},"id":22408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeBackUnbacked","nodeType":"MemberAccess","referencedDeclaration":13919,"src":"4479:31:94","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct DataTypes.ReserveData storage pointer,address,uint256,uint256,uint256) returns (uint256)"}},"id":22416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4479:89:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":22406,"id":22417,"nodeType":"Return","src":"4466:102:94"}]},"documentation":{"id":22393,"nodeType":"StructuredDocumentation","src":"4299:21:94","text":"@inheritdoc IPool"},"functionSelector":"d65dc7a1","id":22419,"implemented":true,"kind":"function","modifiers":[{"id":22403,"kind":"modifierInvocation","modifierName":{"id":22402,"name":"onlyBridge","nodeType":"IdentifierPath","referencedDeclaration":22268,"src":"4431:10:94"},"nodeType":"ModifierInvocation","src":"4431:10:94"}],"name":"backUnbacked","nameLocation":"4332:12:94","nodeType":"FunctionDefinition","overrides":{"id":22401,"nodeType":"OverrideSpecifier","overrides":[],"src":"4422:8:94"},"parameters":{"id":22400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22395,"mutability":"mutable","name":"asset","nameLocation":"4358:5:94","nodeType":"VariableDeclaration","scope":22419,"src":"4350:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22394,"name":"address","nodeType":"ElementaryTypeName","src":"4350:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22397,"mutability":"mutable","name":"amount","nameLocation":"4377:6:94","nodeType":"VariableDeclaration","scope":22419,"src":"4369:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22396,"name":"uint256","nodeType":"ElementaryTypeName","src":"4369:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22399,"mutability":"mutable","name":"fee","nameLocation":"4397:3:94","nodeType":"VariableDeclaration","scope":22419,"src":"4389:11:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22398,"name":"uint256","nodeType":"ElementaryTypeName","src":"4389:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4344:60:94"},"returnParameters":{"id":22406,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22405,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22419,"src":"4451:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22404,"name":"uint256","nodeType":"ElementaryTypeName","src":"4451:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4450:9:94"},"scope":23636,"src":"4323:250:94","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4445],"body":{"id":22449,"nodeType":"Block","src":"4733:273:94","statements":[{"expression":{"arguments":[{"id":22435,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"4772:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":22436,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25315,"src":"4789:13:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"baseExpression":{"id":22437,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25311,"src":"4810:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":22439,"indexExpression":{"id":22438,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22426,"src":"4823:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4810:24:94","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"arguments":[{"id":22442,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22422,"src":"4889:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22443,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22424,"src":"4912:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22444,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22426,"src":"4940:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22445,"name":"referralCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22428,"src":"4974:12:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":22440,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"4842:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":22441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ExecuteSupplyParams","nodeType":"MemberAccess","referencedDeclaration":21407,"src":"4842:29:94","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExecuteSupplyParams_$21407_storage_ptr_$","typeString":"type(struct DataTypes.ExecuteSupplyParams storage pointer)"}},"id":22446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","amount","onBehalfOf","referralCode"],"nodeType":"FunctionCall","src":"4842:153:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$21407_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$21407_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}],"expression":{"id":22432,"name":"SupplyLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19090,"src":"4739:11:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SupplyLogic_$19090_$","typeString":"type(library SupplyLogic)"}},"id":22434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeSupply","nodeType":"MemberAccess","referencedDeclaration":18600,"src":"4739:25:94","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_struct$_ExecuteSupplyParams_$21407_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ExecuteSupplyParams memory)"}},"id":22447,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4739:262:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22448,"nodeType":"ExpressionStatement","src":"4739:262:94"}]},"documentation":{"id":22420,"nodeType":"StructuredDocumentation","src":"4577:21:94","text":"@inheritdoc IPool"},"functionSelector":"617ba037","id":22450,"implemented":true,"kind":"function","modifiers":[],"name":"supply","nameLocation":"4610:6:94","nodeType":"FunctionDefinition","overrides":{"id":22430,"nodeType":"OverrideSpecifier","overrides":[],"src":"4724:8:94"},"parameters":{"id":22429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22422,"mutability":"mutable","name":"asset","nameLocation":"4630:5:94","nodeType":"VariableDeclaration","scope":22450,"src":"4622:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22421,"name":"address","nodeType":"ElementaryTypeName","src":"4622:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22424,"mutability":"mutable","name":"amount","nameLocation":"4649:6:94","nodeType":"VariableDeclaration","scope":22450,"src":"4641:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22423,"name":"uint256","nodeType":"ElementaryTypeName","src":"4641:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22426,"mutability":"mutable","name":"onBehalfOf","nameLocation":"4669:10:94","nodeType":"VariableDeclaration","scope":22450,"src":"4661:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22425,"name":"address","nodeType":"ElementaryTypeName","src":"4661:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22428,"mutability":"mutable","name":"referralCode","nameLocation":"4692:12:94","nodeType":"VariableDeclaration","scope":22450,"src":"4685:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":22427,"name":"uint16","nodeType":"ElementaryTypeName","src":"4685:6:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"4616:92:94"},"returnParameters":{"id":22431,"nodeType":"ParameterList","parameters":[],"src":"4733:0:94"},"scope":23636,"src":"4601:405:94","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4465],"body":{"id":22505,"nodeType":"Block","src":"5259:429:94","statements":[{"expression":{"arguments":[{"expression":{"id":22475,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5303:3:94","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5303:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":22479,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5329:4:94","typeDescriptions":{"typeIdentifier":"t_contract$_Pool_$23636","typeString":"contract Pool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Pool_$23636","typeString":"contract Pool"}],"id":22478,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5321:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22477,"name":"address","nodeType":"ElementaryTypeName","src":"5321:7:94","typeDescriptions":{}}},"id":22480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5321:13:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22481,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22455,"src":"5342:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22482,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22461,"src":"5356:8:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22483,"name":"permitV","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22463,"src":"5372:7:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":22484,"name":"permitR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22465,"src":"5387:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":22485,"name":"permitS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22467,"src":"5402:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"arguments":[{"id":22472,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22453,"src":"5282:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22471,"name":"IERC20WithPermit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4127,"src":"5265:16:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20WithPermit_$4127_$","typeString":"type(contract IERC20WithPermit)"}},"id":22473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5265:23:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"}},"id":22474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"permit","nodeType":"MemberAccess","referencedDeclaration":4126,"src":"5265:30:94","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (address,address,uint256,uint256,uint8,bytes32,bytes32) external"}},"id":22486,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5265:150:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22487,"nodeType":"ExpressionStatement","src":"5265:150:94"},{"expression":{"arguments":[{"id":22491,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"5454:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":22492,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25315,"src":"5471:13:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"baseExpression":{"id":22493,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25311,"src":"5492:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":22495,"indexExpression":{"id":22494,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22457,"src":"5505:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5492:24:94","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"arguments":[{"id":22498,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22453,"src":"5571:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22499,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22455,"src":"5594:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22500,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22457,"src":"5622:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22501,"name":"referralCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22459,"src":"5656:12:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":22496,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"5524:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":22497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ExecuteSupplyParams","nodeType":"MemberAccess","referencedDeclaration":21407,"src":"5524:29:94","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExecuteSupplyParams_$21407_storage_ptr_$","typeString":"type(struct DataTypes.ExecuteSupplyParams storage pointer)"}},"id":22502,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","amount","onBehalfOf","referralCode"],"nodeType":"FunctionCall","src":"5524:153:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$21407_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$21407_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}],"expression":{"id":22488,"name":"SupplyLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19090,"src":"5421:11:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SupplyLogic_$19090_$","typeString":"type(library SupplyLogic)"}},"id":22490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeSupply","nodeType":"MemberAccess","referencedDeclaration":18600,"src":"5421:25:94","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_struct$_ExecuteSupplyParams_$21407_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ExecuteSupplyParams memory)"}},"id":22503,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5421:262:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22504,"nodeType":"ExpressionStatement","src":"5421:262:94"}]},"documentation":{"id":22451,"nodeType":"StructuredDocumentation","src":"5010:21:94","text":"@inheritdoc IPool"},"functionSelector":"02c205f0","id":22506,"implemented":true,"kind":"function","modifiers":[],"name":"supplyWithPermit","nameLocation":"5043:16:94","nodeType":"FunctionDefinition","overrides":{"id":22469,"nodeType":"OverrideSpecifier","overrides":[],"src":"5250:8:94"},"parameters":{"id":22468,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22453,"mutability":"mutable","name":"asset","nameLocation":"5073:5:94","nodeType":"VariableDeclaration","scope":22506,"src":"5065:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22452,"name":"address","nodeType":"ElementaryTypeName","src":"5065:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22455,"mutability":"mutable","name":"amount","nameLocation":"5092:6:94","nodeType":"VariableDeclaration","scope":22506,"src":"5084:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22454,"name":"uint256","nodeType":"ElementaryTypeName","src":"5084:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22457,"mutability":"mutable","name":"onBehalfOf","nameLocation":"5112:10:94","nodeType":"VariableDeclaration","scope":22506,"src":"5104:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22456,"name":"address","nodeType":"ElementaryTypeName","src":"5104:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22459,"mutability":"mutable","name":"referralCode","nameLocation":"5135:12:94","nodeType":"VariableDeclaration","scope":22506,"src":"5128:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":22458,"name":"uint16","nodeType":"ElementaryTypeName","src":"5128:6:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":22461,"mutability":"mutable","name":"deadline","nameLocation":"5161:8:94","nodeType":"VariableDeclaration","scope":22506,"src":"5153:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22460,"name":"uint256","nodeType":"ElementaryTypeName","src":"5153:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22463,"mutability":"mutable","name":"permitV","nameLocation":"5181:7:94","nodeType":"VariableDeclaration","scope":22506,"src":"5175:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":22462,"name":"uint8","nodeType":"ElementaryTypeName","src":"5175:5:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":22465,"mutability":"mutable","name":"permitR","nameLocation":"5202:7:94","nodeType":"VariableDeclaration","scope":22506,"src":"5194:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":22464,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5194:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":22467,"mutability":"mutable","name":"permitS","nameLocation":"5223:7:94","nodeType":"VariableDeclaration","scope":22506,"src":"5215:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":22466,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5215:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5059:175:94"},"returnParameters":{"id":22470,"nodeType":"ParameterList","parameters":[],"src":"5259:0:94"},"scope":23636,"src":"5034:654:94","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4477],"body":{"id":22544,"nodeType":"Block","src":"5835:440:94","statements":[{"expression":{"arguments":[{"id":22521,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"5891:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":22522,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25315,"src":"5910:13:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":22523,"name":"_eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25320,"src":"5933:16:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"baseExpression":{"id":22524,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25311,"src":"5959:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":22527,"indexExpression":{"expression":{"id":22525,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5972:3:94","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5972:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5959:24:94","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"arguments":[{"id":22530,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22509,"src":"6044:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22531,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22511,"src":"6069:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22532,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22513,"src":"6091:2:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22533,"name":"_reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25334,"src":"6120:14:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22534,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22244,"src":"6154:18:94","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":22535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriceOracle","nodeType":"MemberAccess","referencedDeclaration":5014,"src":"6154:33:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":22536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6154:35:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":22537,"name":"_usersEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25324,"src":"6220:19:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":22540,"indexExpression":{"expression":{"id":22538,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6240:3:94","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"6240:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6220:31:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":22528,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"5993:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":22529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ExecuteWithdrawParams","nodeType":"MemberAccess","referencedDeclaration":21458,"src":"5993:31:94","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExecuteWithdrawParams_$21458_storage_ptr_$","typeString":"type(struct DataTypes.ExecuteWithdrawParams storage pointer)"}},"id":22541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","amount","to","reservesCount","oracle","userEModeCategory"],"nodeType":"FunctionCall","src":"5993:269:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$21458_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_struct$_ExecuteWithdrawParams_$21458_memory_ptr","typeString":"struct DataTypes.ExecuteWithdrawParams memory"}],"expression":{"id":22519,"name":"SupplyLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19090,"src":"5854:11:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SupplyLogic_$19090_$","typeString":"type(library SupplyLogic)"}},"id":22520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeWithdraw","nodeType":"MemberAccess","referencedDeclaration":18786,"src":"5854:27:94","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_struct$_ExecuteWithdrawParams_$21458_memory_ptr_$returns$_t_uint256_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ExecuteWithdrawParams memory) returns (uint256)"}},"id":22542,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5854:416:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":22518,"id":22543,"nodeType":"Return","src":"5841:429:94"}]},"documentation":{"id":22507,"nodeType":"StructuredDocumentation","src":"5692:21:94","text":"@inheritdoc IPool"},"functionSelector":"69328dec","id":22545,"implemented":true,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"5725:8:94","nodeType":"FunctionDefinition","overrides":{"id":22515,"nodeType":"OverrideSpecifier","overrides":[],"src":"5808:8:94"},"parameters":{"id":22514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22509,"mutability":"mutable","name":"asset","nameLocation":"5747:5:94","nodeType":"VariableDeclaration","scope":22545,"src":"5739:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22508,"name":"address","nodeType":"ElementaryTypeName","src":"5739:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22511,"mutability":"mutable","name":"amount","nameLocation":"5766:6:94","nodeType":"VariableDeclaration","scope":22545,"src":"5758:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22510,"name":"uint256","nodeType":"ElementaryTypeName","src":"5758:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22513,"mutability":"mutable","name":"to","nameLocation":"5786:2:94","nodeType":"VariableDeclaration","scope":22545,"src":"5778:10:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22512,"name":"address","nodeType":"ElementaryTypeName","src":"5778:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5733:59:94"},"returnParameters":{"id":22518,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22517,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22545,"src":"5826:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22516,"name":"uint256","nodeType":"ElementaryTypeName","src":"5826:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5825:9:94"},"scope":23636,"src":"5716:559:94","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4491],"body":{"id":22596,"nodeType":"Block","src":"6465:727:94","statements":[{"expression":{"arguments":[{"id":22563,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"6504:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":22564,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25315,"src":"6521:13:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":22565,"name":"_eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25320,"src":"6542:16:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"baseExpression":{"id":22566,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25311,"src":"6566:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":22568,"indexExpression":{"id":22567,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22556,"src":"6579:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6566:24:94","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"arguments":[{"id":22571,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22548,"src":"6645:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":22572,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6666:3:94","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"6666:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22574,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22556,"src":"6698:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22575,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22550,"src":"6726:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":22578,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22552,"src":"6787:16:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22576,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"6760:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":22577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"6760:26:94","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":22579,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6760:44:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},{"id":22580,"name":"referralCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22554,"src":"6828:12:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"hexValue":"74727565","id":22581,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6869:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":22582,"name":"_maxStableRateBorrowSizePercent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25332,"src":"6915:31:94","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":22583,"name":"_reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25334,"src":"6971:14:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22584,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22244,"src":"7003:18:94","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":22585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriceOracle","nodeType":"MemberAccess","referencedDeclaration":5014,"src":"7003:33:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":22586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7003:35:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":22587,"name":"_usersEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25324,"src":"7067:19:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":22589,"indexExpression":{"id":22588,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22556,"src":"7087:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7067:31:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22590,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22244,"src":"7129:18:94","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":22591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriceOracleSentinel","nodeType":"MemberAccess","referencedDeclaration":5050,"src":"7129:41:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":22592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7129:43:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22569,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"6598:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":22570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ExecuteBorrowParams","nodeType":"MemberAccess","referencedDeclaration":21433,"src":"6598:29:94","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExecuteBorrowParams_$21433_storage_ptr_$","typeString":"type(struct DataTypes.ExecuteBorrowParams storage pointer)"}},"id":22593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","user","onBehalfOf","amount","interestRateMode","referralCode","releaseUnderlying","maxStableRateBorrowSizePercent","reservesCount","oracle","userEModeCategory","priceOracleSentinel"],"nodeType":"FunctionCall","src":"6598:583:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_struct$_ExecuteBorrowParams_$21433_memory_ptr","typeString":"struct DataTypes.ExecuteBorrowParams memory"}],"expression":{"id":22560,"name":"BorrowLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13543,"src":"6471:11:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BorrowLogic_$13543_$","typeString":"type(library BorrowLogic)"}},"id":22562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeBorrow","nodeType":"MemberAccess","referencedDeclaration":13039,"src":"6471:25:94","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_struct$_ExecuteBorrowParams_$21433_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ExecuteBorrowParams memory)"}},"id":22594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6471:716:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22595,"nodeType":"ExpressionStatement","src":"6471:716:94"}]},"documentation":{"id":22546,"nodeType":"StructuredDocumentation","src":"6279:21:94","text":"@inheritdoc IPool"},"functionSelector":"a415bcad","id":22597,"implemented":true,"kind":"function","modifiers":[],"name":"borrow","nameLocation":"6312:6:94","nodeType":"FunctionDefinition","overrides":{"id":22558,"nodeType":"OverrideSpecifier","overrides":[],"src":"6456:8:94"},"parameters":{"id":22557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22548,"mutability":"mutable","name":"asset","nameLocation":"6332:5:94","nodeType":"VariableDeclaration","scope":22597,"src":"6324:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22547,"name":"address","nodeType":"ElementaryTypeName","src":"6324:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22550,"mutability":"mutable","name":"amount","nameLocation":"6351:6:94","nodeType":"VariableDeclaration","scope":22597,"src":"6343:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22549,"name":"uint256","nodeType":"ElementaryTypeName","src":"6343:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22552,"mutability":"mutable","name":"interestRateMode","nameLocation":"6371:16:94","nodeType":"VariableDeclaration","scope":22597,"src":"6363:24:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22551,"name":"uint256","nodeType":"ElementaryTypeName","src":"6363:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22554,"mutability":"mutable","name":"referralCode","nameLocation":"6400:12:94","nodeType":"VariableDeclaration","scope":22597,"src":"6393:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":22553,"name":"uint16","nodeType":"ElementaryTypeName","src":"6393:6:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":22556,"mutability":"mutable","name":"onBehalfOf","nameLocation":"6426:10:94","nodeType":"VariableDeclaration","scope":22597,"src":"6418:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22555,"name":"address","nodeType":"ElementaryTypeName","src":"6418:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6318:122:94"},"returnParameters":{"id":22559,"nodeType":"ParameterList","parameters":[],"src":"6465:0:94"},"scope":23636,"src":"6303:889:94","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4505],"body":{"id":22632,"nodeType":"Block","src":"7374:369:94","statements":[{"expression":{"arguments":[{"id":22614,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"7427:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":22615,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25315,"src":"7446:13:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"baseExpression":{"id":22616,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25311,"src":"7469:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":22618,"indexExpression":{"id":22617,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22606,"src":"7482:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7469:24:94","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"arguments":[{"id":22621,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22600,"src":"7551:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22622,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22602,"src":"7576:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":22625,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22604,"src":"7639:16:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22623,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"7612:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":22624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"7612:26:94","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":22626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7612:44:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},{"id":22627,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22606,"src":"7680:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"66616c7365","id":22628,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7714:5:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":22619,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"7503:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":22620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ExecuteRepayParams","nodeType":"MemberAccess","referencedDeclaration":21445,"src":"7503:28:94","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExecuteRepayParams_$21445_storage_ptr_$","typeString":"type(struct DataTypes.ExecuteRepayParams storage pointer)"}},"id":22629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","amount","interestRateMode","onBehalfOf","useATokens"],"nodeType":"FunctionCall","src":"7503:227:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}],"expression":{"id":22612,"name":"BorrowLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13543,"src":"7393:11:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BorrowLogic_$13543_$","typeString":"type(library BorrowLogic)"}},"id":22613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeRepay","nodeType":"MemberAccess","referencedDeclaration":13300,"src":"7393:24:94","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_struct$_ExecuteRepayParams_$21445_memory_ptr_$returns$_t_uint256_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ExecuteRepayParams memory) returns (uint256)"}},"id":22630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7393:345:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":22611,"id":22631,"nodeType":"Return","src":"7380:358:94"}]},"documentation":{"id":22598,"nodeType":"StructuredDocumentation","src":"7196:21:94","text":"@inheritdoc IPool"},"functionSelector":"573ade81","id":22633,"implemented":true,"kind":"function","modifiers":[],"name":"repay","nameLocation":"7229:5:94","nodeType":"FunctionDefinition","overrides":{"id":22608,"nodeType":"OverrideSpecifier","overrides":[],"src":"7347:8:94"},"parameters":{"id":22607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22600,"mutability":"mutable","name":"asset","nameLocation":"7248:5:94","nodeType":"VariableDeclaration","scope":22633,"src":"7240:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22599,"name":"address","nodeType":"ElementaryTypeName","src":"7240:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22602,"mutability":"mutable","name":"amount","nameLocation":"7267:6:94","nodeType":"VariableDeclaration","scope":22633,"src":"7259:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22601,"name":"uint256","nodeType":"ElementaryTypeName","src":"7259:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22604,"mutability":"mutable","name":"interestRateMode","nameLocation":"7287:16:94","nodeType":"VariableDeclaration","scope":22633,"src":"7279:24:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22603,"name":"uint256","nodeType":"ElementaryTypeName","src":"7279:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22606,"mutability":"mutable","name":"onBehalfOf","nameLocation":"7317:10:94","nodeType":"VariableDeclaration","scope":22633,"src":"7309:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22605,"name":"address","nodeType":"ElementaryTypeName","src":"7309:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7234:97:94"},"returnParameters":{"id":22611,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22610,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22633,"src":"7365:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22609,"name":"uint256","nodeType":"ElementaryTypeName","src":"7365:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7364:9:94"},"scope":23636,"src":"7220:523:94","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4527],"body":{"id":22702,"nodeType":"Block","src":"8018:570:94","statements":[{"id":22673,"nodeType":"Block","src":"8024:181:94","statements":[{"expression":{"arguments":[{"expression":{"id":22660,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8072:3:94","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"8072:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":22664,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8100:4:94","typeDescriptions":{"typeIdentifier":"t_contract$_Pool_$23636","typeString":"contract Pool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Pool_$23636","typeString":"contract Pool"}],"id":22663,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8092:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22662,"name":"address","nodeType":"ElementaryTypeName","src":"8092:7:94","typeDescriptions":{}}},"id":22665,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8092:13:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22666,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22638,"src":"8115:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22667,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22644,"src":"8131:8:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22668,"name":"permitV","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22646,"src":"8149:7:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":22669,"name":"permitR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22648,"src":"8166:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":22670,"name":"permitS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22650,"src":"8183:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"arguments":[{"id":22657,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22636,"src":"8049:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22656,"name":"IERC20WithPermit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4127,"src":"8032:16:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20WithPermit_$4127_$","typeString":"type(contract IERC20WithPermit)"}},"id":22658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8032:23:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"}},"id":22659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"permit","nodeType":"MemberAccess","referencedDeclaration":4126,"src":"8032:30:94","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (address,address,uint256,uint256,uint8,bytes32,bytes32) external"}},"id":22671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8032:166:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22672,"nodeType":"ExpressionStatement","src":"8032:166:94"}]},{"id":22701,"nodeType":"Block","src":"8210:374:94","statements":[{"assignments":[22678],"declarations":[{"constant":false,"id":22678,"mutability":"mutable","name":"params","nameLocation":"8254:6:94","nodeType":"VariableDeclaration","scope":22701,"src":"8218:42:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams"},"typeName":{"id":22677,"nodeType":"UserDefinedTypeName","pathNode":{"id":22676,"name":"DataTypes.ExecuteRepayParams","nodeType":"IdentifierPath","referencedDeclaration":21445,"src":"8218:28:94"},"referencedDeclaration":21445,"src":"8218:28:94","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_storage_ptr","typeString":"struct DataTypes.ExecuteRepayParams"}},"visibility":"internal"}],"id":22690,"initialValue":{"arguments":[{"id":22681,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22636,"src":"8309:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22682,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22638,"src":"8332:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":22685,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22640,"src":"8393:16:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22683,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"8366:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":22684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"8366:26:94","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":22686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8366:44:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},{"id":22687,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22642,"src":"8432:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"66616c7365","id":22688,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8464:5:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":22679,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"8263:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":22680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ExecuteRepayParams","nodeType":"MemberAccess","referencedDeclaration":21445,"src":"8263:28:94","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExecuteRepayParams_$21445_storage_ptr_$","typeString":"type(struct DataTypes.ExecuteRepayParams storage pointer)"}},"id":22689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","amount","interestRateMode","onBehalfOf","useATokens"],"nodeType":"FunctionCall","src":"8263:215:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}},"nodeType":"VariableDeclarationStatement","src":"8218:260:94"},{"expression":{"arguments":[{"id":22693,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"8518:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":22694,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25315,"src":"8529:13:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"baseExpression":{"id":22695,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25311,"src":"8544:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":22697,"indexExpression":{"id":22696,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22642,"src":"8557:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8544:24:94","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"id":22698,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22678,"src":"8570:6:94","typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}],"expression":{"id":22691,"name":"BorrowLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13543,"src":"8493:11:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BorrowLogic_$13543_$","typeString":"type(library BorrowLogic)"}},"id":22692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeRepay","nodeType":"MemberAccess","referencedDeclaration":13300,"src":"8493:24:94","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_struct$_ExecuteRepayParams_$21445_memory_ptr_$returns$_t_uint256_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ExecuteRepayParams memory) returns (uint256)"}},"id":22699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8493:84:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":22655,"id":22700,"nodeType":"Return","src":"8486:91:94"}]}]},"documentation":{"id":22634,"nodeType":"StructuredDocumentation","src":"7747:21:94","text":"@inheritdoc IPool"},"functionSelector":"ee3e210b","id":22703,"implemented":true,"kind":"function","modifiers":[],"name":"repayWithPermit","nameLocation":"7780:15:94","nodeType":"FunctionDefinition","overrides":{"id":22652,"nodeType":"OverrideSpecifier","overrides":[],"src":"7991:8:94"},"parameters":{"id":22651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22636,"mutability":"mutable","name":"asset","nameLocation":"7809:5:94","nodeType":"VariableDeclaration","scope":22703,"src":"7801:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22635,"name":"address","nodeType":"ElementaryTypeName","src":"7801:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22638,"mutability":"mutable","name":"amount","nameLocation":"7828:6:94","nodeType":"VariableDeclaration","scope":22703,"src":"7820:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22637,"name":"uint256","nodeType":"ElementaryTypeName","src":"7820:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22640,"mutability":"mutable","name":"interestRateMode","nameLocation":"7848:16:94","nodeType":"VariableDeclaration","scope":22703,"src":"7840:24:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22639,"name":"uint256","nodeType":"ElementaryTypeName","src":"7840:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22642,"mutability":"mutable","name":"onBehalfOf","nameLocation":"7878:10:94","nodeType":"VariableDeclaration","scope":22703,"src":"7870:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22641,"name":"address","nodeType":"ElementaryTypeName","src":"7870:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22644,"mutability":"mutable","name":"deadline","nameLocation":"7902:8:94","nodeType":"VariableDeclaration","scope":22703,"src":"7894:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22643,"name":"uint256","nodeType":"ElementaryTypeName","src":"7894:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22646,"mutability":"mutable","name":"permitV","nameLocation":"7922:7:94","nodeType":"VariableDeclaration","scope":22703,"src":"7916:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":22645,"name":"uint8","nodeType":"ElementaryTypeName","src":"7916:5:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":22648,"mutability":"mutable","name":"permitR","nameLocation":"7943:7:94","nodeType":"VariableDeclaration","scope":22703,"src":"7935:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":22647,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7935:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":22650,"mutability":"mutable","name":"permitS","nameLocation":"7964:7:94","nodeType":"VariableDeclaration","scope":22703,"src":"7956:15:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":22649,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7956:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7795:180:94"},"returnParameters":{"id":22655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22654,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22703,"src":"8009:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22653,"name":"uint256","nodeType":"ElementaryTypeName","src":"8009:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8008:9:94"},"scope":23636,"src":"7771:817:94","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4539],"body":{"id":22738,"nodeType":"Block","src":"8757:368:94","statements":[{"expression":{"arguments":[{"id":22718,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"8810:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":22719,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25315,"src":"8829:13:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"baseExpression":{"id":22720,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25311,"src":"8852:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":22723,"indexExpression":{"expression":{"id":22721,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8865:3:94","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"8865:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8852:24:94","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"arguments":[{"id":22726,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22706,"src":"8934:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22727,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22708,"src":"8959:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":22730,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22710,"src":"9022:16:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22728,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"8995:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":22729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"8995:26:94","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":22731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8995:44:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},{"expression":{"id":22732,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9063:3:94","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"9063:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"74727565","id":22734,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9097:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":22724,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"8886:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":22725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ExecuteRepayParams","nodeType":"MemberAccess","referencedDeclaration":21445,"src":"8886:28:94","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExecuteRepayParams_$21445_storage_ptr_$","typeString":"type(struct DataTypes.ExecuteRepayParams storage pointer)"}},"id":22735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","amount","interestRateMode","onBehalfOf","useATokens"],"nodeType":"FunctionCall","src":"8886:226:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_struct$_ExecuteRepayParams_$21445_memory_ptr","typeString":"struct DataTypes.ExecuteRepayParams memory"}],"expression":{"id":22716,"name":"BorrowLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13543,"src":"8776:11:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BorrowLogic_$13543_$","typeString":"type(library BorrowLogic)"}},"id":22717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeRepay","nodeType":"MemberAccess","referencedDeclaration":13300,"src":"8776:24:94","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_struct$_ExecuteRepayParams_$21445_memory_ptr_$returns$_t_uint256_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ExecuteRepayParams memory) returns (uint256)"}},"id":22736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8776:344:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":22715,"id":22737,"nodeType":"Return","src":"8763:357:94"}]},"documentation":{"id":22704,"nodeType":"StructuredDocumentation","src":"8592:21:94","text":"@inheritdoc IPool"},"functionSelector":"2dad97d4","id":22739,"implemented":true,"kind":"function","modifiers":[],"name":"repayWithATokens","nameLocation":"8625:16:94","nodeType":"FunctionDefinition","overrides":{"id":22712,"nodeType":"OverrideSpecifier","overrides":[],"src":"8730:8:94"},"parameters":{"id":22711,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22706,"mutability":"mutable","name":"asset","nameLocation":"8655:5:94","nodeType":"VariableDeclaration","scope":22739,"src":"8647:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22705,"name":"address","nodeType":"ElementaryTypeName","src":"8647:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22708,"mutability":"mutable","name":"amount","nameLocation":"8674:6:94","nodeType":"VariableDeclaration","scope":22739,"src":"8666:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22707,"name":"uint256","nodeType":"ElementaryTypeName","src":"8666:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22710,"mutability":"mutable","name":"interestRateMode","nameLocation":"8694:16:94","nodeType":"VariableDeclaration","scope":22739,"src":"8686:24:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22709,"name":"uint256","nodeType":"ElementaryTypeName","src":"8686:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8641:73:94"},"returnParameters":{"id":22715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22714,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22739,"src":"8748:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22713,"name":"uint256","nodeType":"ElementaryTypeName","src":"8748:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8747:9:94"},"scope":23636,"src":"8616:509:94","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4547],"body":{"id":22765,"nodeType":"Block","src":"9246:175:94","statements":[{"expression":{"arguments":[{"baseExpression":{"id":22751,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"9297:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":22753,"indexExpression":{"id":22752,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22742,"src":"9307:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9297:16:94","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},{"baseExpression":{"id":22754,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25311,"src":"9321:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":22757,"indexExpression":{"expression":{"id":22755,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9334:3:94","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"9334:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9321:24:94","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"id":22758,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22742,"src":"9353:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":22761,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22744,"src":"9393:16:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22759,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"9366:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":22760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"9366:26:94","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":22762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9366:44:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}],"expression":{"id":22748,"name":"BorrowLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13543,"src":"9252:11:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BorrowLogic_$13543_$","typeString":"type(library BorrowLogic)"}},"id":22750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeSwapBorrowRateMode","nodeType":"MemberAccess","referencedDeclaration":13542,"src":"9252:37:94","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_address_$_t_enum$_InterestRateMode_$21337_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.UserConfigurationMap storage pointer,address,enum DataTypes.InterestRateMode)"}},"id":22763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9252:164:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22764,"nodeType":"ExpressionStatement","src":"9252:164:94"}]},"documentation":{"id":22740,"nodeType":"StructuredDocumentation","src":"9129:21:94","text":"@inheritdoc IPool"},"functionSelector":"94ba89a2","id":22766,"implemented":true,"kind":"function","modifiers":[],"name":"swapBorrowRateMode","nameLocation":"9162:18:94","nodeType":"FunctionDefinition","overrides":{"id":22746,"nodeType":"OverrideSpecifier","overrides":[],"src":"9237:8:94"},"parameters":{"id":22745,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22742,"mutability":"mutable","name":"asset","nameLocation":"9189:5:94","nodeType":"VariableDeclaration","scope":22766,"src":"9181:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22741,"name":"address","nodeType":"ElementaryTypeName","src":"9181:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22744,"mutability":"mutable","name":"interestRateMode","nameLocation":"9204:16:94","nodeType":"VariableDeclaration","scope":22766,"src":"9196:24:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22743,"name":"uint256","nodeType":"ElementaryTypeName","src":"9196:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9180:41:94"},"returnParameters":{"id":22747,"nodeType":"ParameterList","parameters":[],"src":"9246:0:94"},"scope":23636,"src":"9153:268:94","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4555],"body":{"id":22785,"nodeType":"Block","src":"9537:86:94","statements":[{"expression":{"arguments":[{"baseExpression":{"id":22778,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"9588:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":22780,"indexExpression":{"id":22779,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22769,"src":"9598:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9588:16:94","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},{"id":22781,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22769,"src":"9606:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22782,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22771,"src":"9613:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22775,"name":"BorrowLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13543,"src":"9543:11:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BorrowLogic_$13543_$","typeString":"type(library BorrowLogic)"}},"id":22777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeRebalanceStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":13392,"src":"9543:44:94","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_address_$_t_address_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer,address,address)"}},"id":22783,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9543:75:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22784,"nodeType":"ExpressionStatement","src":"9543:75:94"}]},"documentation":{"id":22767,"nodeType":"StructuredDocumentation","src":"9425:21:94","text":"@inheritdoc IPool"},"functionSelector":"cd112382","id":22786,"implemented":true,"kind":"function","modifiers":[],"name":"rebalanceStableBorrowRate","nameLocation":"9458:25:94","nodeType":"FunctionDefinition","overrides":{"id":22773,"nodeType":"OverrideSpecifier","overrides":[],"src":"9528:8:94"},"parameters":{"id":22772,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22769,"mutability":"mutable","name":"asset","nameLocation":"9492:5:94","nodeType":"VariableDeclaration","scope":22786,"src":"9484:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22768,"name":"address","nodeType":"ElementaryTypeName","src":"9484:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22771,"mutability":"mutable","name":"user","nameLocation":"9507:4:94","nodeType":"VariableDeclaration","scope":22786,"src":"9499:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22770,"name":"address","nodeType":"ElementaryTypeName","src":"9499:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9483:29:94"},"returnParameters":{"id":22774,"nodeType":"ParameterList","parameters":[],"src":"9537:0:94"},"scope":23636,"src":"9449:174:94","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4563],"body":{"id":22817,"nodeType":"Block","src":"9763:292:94","statements":[{"expression":{"arguments":[{"id":22798,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"9818:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":22799,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25315,"src":"9835:13:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":22800,"name":"_eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25320,"src":"9856:16:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"baseExpression":{"id":22801,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25311,"src":"9880:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":22804,"indexExpression":{"expression":{"id":22802,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9893:3:94","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"9893:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9880:24:94","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"id":22805,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22789,"src":"9912:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22806,"name":"useAsCollateral","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22791,"src":"9925:15:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":22807,"name":"_reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25334,"src":"9948:14:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22808,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22244,"src":"9970:18:94","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":22809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriceOracle","nodeType":"MemberAccess","referencedDeclaration":5014,"src":"9970:33:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":22810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9970:35:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":22811,"name":"_usersEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25324,"src":"10013:19:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":22814,"indexExpression":{"expression":{"id":22812,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10033:3:94","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"10033:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10013:31:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":22795,"name":"SupplyLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19090,"src":"9769:11:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SupplyLogic_$19090_$","typeString":"type(library SupplyLogic)"}},"id":22797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeUseReserveAsCollateral","nodeType":"MemberAccess","referencedDeclaration":19089,"src":"9769:41:94","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_address_$_t_bool_$_t_uint256_$_t_address_$_t_uint8_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap storage pointer,address,bool,uint256,address,uint8)"}},"id":22815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9769:281:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22816,"nodeType":"ExpressionStatement","src":"9769:281:94"}]},"documentation":{"id":22787,"nodeType":"StructuredDocumentation","src":"9627:21:94","text":"@inheritdoc IPool"},"functionSelector":"5a3b74b9","id":22818,"implemented":true,"kind":"function","modifiers":[],"name":"setUserUseReserveAsCollateral","nameLocation":"9660:29:94","nodeType":"FunctionDefinition","overrides":{"id":22793,"nodeType":"OverrideSpecifier","overrides":[],"src":"9754:8:94"},"parameters":{"id":22792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22789,"mutability":"mutable","name":"asset","nameLocation":"9703:5:94","nodeType":"VariableDeclaration","scope":22818,"src":"9695:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22788,"name":"address","nodeType":"ElementaryTypeName","src":"9695:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22791,"mutability":"mutable","name":"useAsCollateral","nameLocation":"9719:15:94","nodeType":"VariableDeclaration","scope":22818,"src":"9714:20:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22790,"name":"bool","nodeType":"ElementaryTypeName","src":"9714:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9689:49:94"},"returnParameters":{"id":22794,"nodeType":"ParameterList","parameters":[],"src":"9763:0:94"},"scope":23636,"src":"9651:404:94","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4577],"body":{"id":22860,"nodeType":"Block","src":"10255:583:94","statements":[{"expression":{"arguments":[{"id":22836,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"10308:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":22837,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25315,"src":"10325:13:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":22838,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25311,"src":"10346:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},{"id":22839,"name":"_eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25320,"src":"10366:16:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"arguments":[{"id":22842,"name":"_reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25334,"src":"10454:14:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":22843,"name":"debtToCover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22827,"src":"10491:11:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22844,"name":"collateralAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22821,"src":"10529:15:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22845,"name":"debtAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22823,"src":"10565:9:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22846,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22825,"src":"10590:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22847,"name":"receiveAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22829,"src":"10619:13:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22848,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22244,"src":"10655:18:94","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":22849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriceOracle","nodeType":"MemberAccess","referencedDeclaration":5014,"src":"10655:33:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":22850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10655:35:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":22851,"name":"_usersEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25324,"src":"10719:19:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":22853,"indexExpression":{"id":22852,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22825,"src":"10739:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10719:25:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22854,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22244,"src":"10775:18:94","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":22855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriceOracleSentinel","nodeType":"MemberAccess","referencedDeclaration":5050,"src":"10775:41:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":22856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10775:43:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22840,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"10390:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":22841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ExecuteLiquidationCallParams","nodeType":"MemberAccess","referencedDeclaration":21398,"src":"10390:38:94","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExecuteLiquidationCallParams_$21398_storage_ptr_$","typeString":"type(struct DataTypes.ExecuteLiquidationCallParams storage pointer)"}},"id":22857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["reservesCount","debtToCover","collateralAsset","debtAsset","user","receiveAToken","priceOracle","userEModeCategory","priceOracleSentinel"],"nodeType":"FunctionCall","src":"10390:437:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","typeString":"struct DataTypes.ExecuteLiquidationCallParams memory"}],"expression":{"id":22833,"name":"LiquidationLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17171,"src":"10261:16:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LiquidationLogic_$17171_$","typeString":"type(library LiquidationLogic)"}},"id":22835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeLiquidationCall","nodeType":"MemberAccess","referencedDeclaration":16492,"src":"10261:39:94","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_$_t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(address => struct DataTypes.UserConfigurationMap storage ref),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.ExecuteLiquidationCallParams memory)"}},"id":22858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10261:572:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22859,"nodeType":"ExpressionStatement","src":"10261:572:94"}]},"documentation":{"id":22819,"nodeType":"StructuredDocumentation","src":"10059:21:94","text":"@inheritdoc IPool"},"functionSelector":"00a718a9","id":22861,"implemented":true,"kind":"function","modifiers":[],"name":"liquidationCall","nameLocation":"10092:15:94","nodeType":"FunctionDefinition","overrides":{"id":22831,"nodeType":"OverrideSpecifier","overrides":[],"src":"10246:8:94"},"parameters":{"id":22830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22821,"mutability":"mutable","name":"collateralAsset","nameLocation":"10121:15:94","nodeType":"VariableDeclaration","scope":22861,"src":"10113:23:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22820,"name":"address","nodeType":"ElementaryTypeName","src":"10113:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22823,"mutability":"mutable","name":"debtAsset","nameLocation":"10150:9:94","nodeType":"VariableDeclaration","scope":22861,"src":"10142:17:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22822,"name":"address","nodeType":"ElementaryTypeName","src":"10142:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22825,"mutability":"mutable","name":"user","nameLocation":"10173:4:94","nodeType":"VariableDeclaration","scope":22861,"src":"10165:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22824,"name":"address","nodeType":"ElementaryTypeName","src":"10165:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22827,"mutability":"mutable","name":"debtToCover","nameLocation":"10191:11:94","nodeType":"VariableDeclaration","scope":22861,"src":"10183:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22826,"name":"uint256","nodeType":"ElementaryTypeName","src":"10183:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22829,"mutability":"mutable","name":"receiveAToken","nameLocation":"10213:13:94","nodeType":"VariableDeclaration","scope":22861,"src":"10208:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":22828,"name":"bool","nodeType":"ElementaryTypeName","src":"10208:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10107:123:94"},"returnParameters":{"id":22832,"nodeType":"ParameterList","parameters":[],"src":"10255:0:94"},"scope":23636,"src":"10083:755:94","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4598],"body":{"id":22931,"nodeType":"Block","src":"11123:926:94","statements":[{"assignments":[22887],"declarations":[{"constant":false,"id":22887,"mutability":"mutable","name":"flashParams","nameLocation":"11162:11:94","nodeType":"VariableDeclaration","scope":22931,"src":"11129:44:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams"},"typeName":{"id":22886,"nodeType":"UserDefinedTypeName","pathNode":{"id":22885,"name":"DataTypes.FlashloanParams","nodeType":"IdentifierPath","referencedDeclaration":21516,"src":"11129:25:94"},"referencedDeclaration":21516,"src":"11129:25:94","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_storage_ptr","typeString":"struct DataTypes.FlashloanParams"}},"visibility":"internal"}],"id":22918,"initialValue":{"arguments":[{"id":22890,"name":"receiverAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22864,"src":"11227:15:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22891,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22867,"src":"11258:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"id":22892,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22870,"src":"11281:7:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},{"id":22893,"name":"interestRateModes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22873,"src":"11315:17:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},{"id":22894,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22875,"src":"11352:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22895,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22877,"src":"11378:6:94","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":22896,"name":"referralCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22879,"src":"11406:12:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":22897,"name":"_flashLoanPremiumToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25330,"src":"11454:27:94","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":22898,"name":"_flashLoanPremiumTotal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25328,"src":"11512:22:94","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":22899,"name":"_maxStableRateBorrowSizePercent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25332,"src":"11574:31:94","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":22900,"name":"_reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25334,"src":"11628:14:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"arguments":[{"id":22903,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22244,"src":"11677:18:94","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}],"id":22902,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11669:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22901,"name":"address","nodeType":"ElementaryTypeName","src":"11669:7:94","typeDescriptions":{}}},"id":22904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11669:27:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":22905,"name":"_usersEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25324,"src":"11723:19:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":22907,"indexExpression":{"id":22906,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22875,"src":"11743:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11723:31:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"arguments":[{"expression":{"id":22914,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11862:3:94","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"11862:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22909,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22244,"src":"11801:18:94","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":22910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLManager","nodeType":"MemberAccess","referencedDeclaration":5026,"src":"11801:32:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":22911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11801:34:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22908,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3718,"src":"11789:11:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IACLManager_$3718_$","typeString":"type(contract IACLManager)"}},"id":22912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11789:47:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"id":22913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isFlashBorrower","nodeType":"MemberAccess","referencedDeclaration":3677,"src":"11789:63:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":22916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11789:91:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"},{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"},{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":22888,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"11176:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":22889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FlashloanParams","nodeType":"MemberAccess","referencedDeclaration":21516,"src":"11176:25:94","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_FlashloanParams_$21516_storage_ptr_$","typeString":"type(struct DataTypes.FlashloanParams storage pointer)"}},"id":22917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["receiverAddress","assets","amounts","interestRateModes","onBehalfOf","params","referralCode","flashLoanPremiumToProtocol","flashLoanPremiumTotal","maxStableRateBorrowSizePercent","reservesCount","addressesProvider","userEModeCategory","isAuthorizedFlashBorrower"],"nodeType":"FunctionCall","src":"11176:711:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}},"nodeType":"VariableDeclarationStatement","src":"11129:758:94"},{"expression":{"arguments":[{"id":22922,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"11933:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":22923,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25315,"src":"11950:13:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":22924,"name":"_eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25320,"src":"11971:16:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"baseExpression":{"id":22925,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25311,"src":"11995:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":22927,"indexExpression":{"id":22926,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22875,"src":"12008:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11995:24:94","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"id":22928,"name":"flashParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22887,"src":"12027:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_struct$_FlashloanParams_$21516_memory_ptr","typeString":"struct DataTypes.FlashloanParams memory"}],"expression":{"id":22919,"name":"FlashLoanLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15250,"src":"11894:14:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FlashLoanLogic_$15250_$","typeString":"type(library FlashLoanLogic)"}},"id":22921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeFlashLoan","nodeType":"MemberAccess","referencedDeclaration":15029,"src":"11894:31:94","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_struct$_FlashloanParams_$21516_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.FlashloanParams memory)"}},"id":22929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11894:150:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22930,"nodeType":"ExpressionStatement","src":"11894:150:94"}]},"documentation":{"id":22862,"nodeType":"StructuredDocumentation","src":"10842:21:94","text":"@inheritdoc IPool"},"functionSelector":"ab9c4b5d","id":22932,"implemented":true,"kind":"function","modifiers":[],"name":"flashLoan","nameLocation":"10875:9:94","nodeType":"FunctionDefinition","overrides":{"id":22881,"nodeType":"OverrideSpecifier","overrides":[],"src":"11114:8:94"},"parameters":{"id":22880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22864,"mutability":"mutable","name":"receiverAddress","nameLocation":"10898:15:94","nodeType":"VariableDeclaration","scope":22932,"src":"10890:23:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22863,"name":"address","nodeType":"ElementaryTypeName","src":"10890:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22867,"mutability":"mutable","name":"assets","nameLocation":"10938:6:94","nodeType":"VariableDeclaration","scope":22932,"src":"10919:25:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":22865,"name":"address","nodeType":"ElementaryTypeName","src":"10919:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":22866,"nodeType":"ArrayTypeName","src":"10919:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":22870,"mutability":"mutable","name":"amounts","nameLocation":"10969:7:94","nodeType":"VariableDeclaration","scope":22932,"src":"10950:26:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":22868,"name":"uint256","nodeType":"ElementaryTypeName","src":"10950:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22869,"nodeType":"ArrayTypeName","src":"10950:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":22873,"mutability":"mutable","name":"interestRateModes","nameLocation":"11001:17:94","nodeType":"VariableDeclaration","scope":22932,"src":"10982:36:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":22871,"name":"uint256","nodeType":"ElementaryTypeName","src":"10982:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22872,"nodeType":"ArrayTypeName","src":"10982:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":22875,"mutability":"mutable","name":"onBehalfOf","nameLocation":"11032:10:94","nodeType":"VariableDeclaration","scope":22932,"src":"11024:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22874,"name":"address","nodeType":"ElementaryTypeName","src":"11024:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22877,"mutability":"mutable","name":"params","nameLocation":"11063:6:94","nodeType":"VariableDeclaration","scope":22932,"src":"11048:21:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":22876,"name":"bytes","nodeType":"ElementaryTypeName","src":"11048:5:94","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":22879,"mutability":"mutable","name":"referralCode","nameLocation":"11082:12:94","nodeType":"VariableDeclaration","scope":22932,"src":"11075:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":22878,"name":"uint16","nodeType":"ElementaryTypeName","src":"11075:6:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"10884:214:94"},"returnParameters":{"id":22882,"nodeType":"ParameterList","parameters":[],"src":"11123:0:94"},"scope":23636,"src":"10866:1183:94","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4612],"body":{"id":22972,"nodeType":"Block","src":"12250:431:94","statements":[{"assignments":[22951],"declarations":[{"constant":false,"id":22951,"mutability":"mutable","name":"flashParams","nameLocation":"12295:11:94","nodeType":"VariableDeclaration","scope":22972,"src":"12256:50:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$21531_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams"},"typeName":{"id":22950,"nodeType":"UserDefinedTypeName","pathNode":{"id":22949,"name":"DataTypes.FlashloanSimpleParams","nodeType":"IdentifierPath","referencedDeclaration":21531,"src":"12256:31:94"},"referencedDeclaration":21531,"src":"12256:31:94","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$21531_storage_ptr","typeString":"struct DataTypes.FlashloanSimpleParams"}},"visibility":"internal"}],"id":22962,"initialValue":{"arguments":[{"id":22954,"name":"receiverAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22935,"src":"12366:15:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22955,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22937,"src":"12396:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22956,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22939,"src":"12417:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22957,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22941,"src":"12439:6:94","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":22958,"name":"referralCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22943,"src":"12467:12:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":22959,"name":"_flashLoanPremiumToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25330,"src":"12515:27:94","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":22960,"name":"_flashLoanPremiumTotal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25328,"src":"12573:22:94","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":22952,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"12309:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":22953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FlashloanSimpleParams","nodeType":"MemberAccess","referencedDeclaration":21531,"src":"12309:31:94","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_FlashloanSimpleParams_$21531_storage_ptr_$","typeString":"type(struct DataTypes.FlashloanSimpleParams storage pointer)"}},"id":22961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["receiverAddress","asset","amount","params","referralCode","flashLoanPremiumToProtocol","flashLoanPremiumTotal"],"nodeType":"FunctionCall","src":"12309:293:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$21531_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}},"nodeType":"VariableDeclarationStatement","src":"12256:346:94"},{"expression":{"arguments":[{"baseExpression":{"id":22966,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"12646:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":22968,"indexExpression":{"id":22967,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22937,"src":"12656:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12646:16:94","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},{"id":22969,"name":"flashParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22951,"src":"12664:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$21531_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"},{"typeIdentifier":"t_struct$_FlashloanSimpleParams_$21531_memory_ptr","typeString":"struct DataTypes.FlashloanSimpleParams memory"}],"expression":{"id":22963,"name":"FlashLoanLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15250,"src":"12608:14:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FlashLoanLogic_$15250_$","typeString":"type(library FlashLoanLogic)"}},"id":22965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeFlashLoanSimple","nodeType":"MemberAccess","referencedDeclaration":15109,"src":"12608:37:94","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_struct$_ReserveData_$21315_storage_ptr_$_t_struct$_FlashloanSimpleParams_$21531_memory_ptr_$returns$__$","typeString":"function (struct DataTypes.ReserveData storage pointer,struct DataTypes.FlashloanSimpleParams memory)"}},"id":22970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12608:68:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22971,"nodeType":"ExpressionStatement","src":"12608:68:94"}]},"documentation":{"id":22933,"nodeType":"StructuredDocumentation","src":"12053:21:94","text":"@inheritdoc IPool"},"functionSelector":"42b0b77c","id":22973,"implemented":true,"kind":"function","modifiers":[],"name":"flashLoanSimple","nameLocation":"12086:15:94","nodeType":"FunctionDefinition","overrides":{"id":22945,"nodeType":"OverrideSpecifier","overrides":[],"src":"12241:8:94"},"parameters":{"id":22944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22935,"mutability":"mutable","name":"receiverAddress","nameLocation":"12115:15:94","nodeType":"VariableDeclaration","scope":22973,"src":"12107:23:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22934,"name":"address","nodeType":"ElementaryTypeName","src":"12107:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22937,"mutability":"mutable","name":"asset","nameLocation":"12144:5:94","nodeType":"VariableDeclaration","scope":22973,"src":"12136:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22936,"name":"address","nodeType":"ElementaryTypeName","src":"12136:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":22939,"mutability":"mutable","name":"amount","nameLocation":"12163:6:94","nodeType":"VariableDeclaration","scope":22973,"src":"12155:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22938,"name":"uint256","nodeType":"ElementaryTypeName","src":"12155:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22941,"mutability":"mutable","name":"params","nameLocation":"12190:6:94","nodeType":"VariableDeclaration","scope":22973,"src":"12175:21:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":22940,"name":"bytes","nodeType":"ElementaryTypeName","src":"12175:5:94","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":22943,"mutability":"mutable","name":"referralCode","nameLocation":"12209:12:94","nodeType":"VariableDeclaration","scope":22973,"src":"12202:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":22942,"name":"uint16","nodeType":"ElementaryTypeName","src":"12202:6:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"12101:124:94"},"returnParameters":{"id":22946,"nodeType":"ParameterList","parameters":[],"src":"12250:0:94"},"scope":23636,"src":"12077:604:94","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[4837],"body":{"id":22988,"nodeType":"Block","src":"12786:61:94","statements":[{"expression":{"arguments":[{"id":22984,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"12824:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":22985,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22977,"src":"12835:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}],"expression":{"id":22981,"name":"PoolLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17617,"src":"12792:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolLogic_$17617_$","typeString":"type(library PoolLogic)"}},"id":22983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeMintToTreasury","nodeType":"MemberAccess","referencedDeclaration":17471,"src":"12792:31:94","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),address[] memory)"}},"id":22986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12792:50:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22987,"nodeType":"ExpressionStatement","src":"12792:50:94"}]},"documentation":{"id":22974,"nodeType":"StructuredDocumentation","src":"12685:21:94","text":"@inheritdoc IPool"},"functionSelector":"9cd19996","id":22989,"implemented":true,"kind":"function","modifiers":[],"name":"mintToTreasury","nameLocation":"12718:14:94","nodeType":"FunctionDefinition","overrides":{"id":22979,"nodeType":"OverrideSpecifier","overrides":[],"src":"12777:8:94"},"parameters":{"id":22978,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22977,"mutability":"mutable","name":"assets","nameLocation":"12752:6:94","nodeType":"VariableDeclaration","scope":22989,"src":"12733:25:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":22975,"name":"address","nodeType":"ElementaryTypeName","src":"12733:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":22976,"nodeType":"ArrayTypeName","src":"12733:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"12732:27:94"},"returnParameters":{"id":22980,"nodeType":"ParameterList","parameters":[],"src":"12786:0:94"},"scope":23636,"src":"12709:138:94","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4710],"body":{"id":23003,"nodeType":"Block","src":"12992:34:94","statements":[{"expression":{"baseExpression":{"id":22999,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"13005:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":23001,"indexExpression":{"id":23000,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22992,"src":"13015:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13005:16:94","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"functionReturnParameters":22998,"id":23002,"nodeType":"Return","src":"12998:23:94"}]},"documentation":{"id":22990,"nodeType":"StructuredDocumentation","src":"12851:21:94","text":"@inheritdoc IPool"},"functionSelector":"35ea6a75","id":23004,"implemented":true,"kind":"function","modifiers":[],"name":"getReserveData","nameLocation":"12884:14:94","nodeType":"FunctionDefinition","overrides":{"id":22994,"nodeType":"OverrideSpecifier","overrides":[],"src":"12944:8:94"},"parameters":{"id":22993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22992,"mutability":"mutable","name":"asset","nameLocation":"12912:5:94","nodeType":"VariableDeclaration","scope":23004,"src":"12904:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22991,"name":"address","nodeType":"ElementaryTypeName","src":"12904:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12898:23:94"},"returnParameters":{"id":22998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22997,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23004,"src":"12962:28:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":22996,"nodeType":"UserDefinedTypeName","pathNode":{"id":22995,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"12962:21:94"},"referencedDeclaration":21315,"src":"12962:21:94","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"src":"12961:30:94"},"scope":23636,"src":"12875:151:94","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[4630],"body":{"id":23044,"nodeType":"Block","src":"13362:413:94","statements":[{"expression":{"arguments":[{"id":23025,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"13426:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":23026,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25315,"src":"13445:13:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":23027,"name":"_eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25320,"src":"13468:16:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"arguments":[{"baseExpression":{"id":23030,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25311,"src":"13559:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":23032,"indexExpression":{"id":23031,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23007,"src":"13572:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13559:18:94","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"id":23033,"name":"_reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25334,"src":"13604:14:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":23034,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23007,"src":"13636:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23035,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22244,"src":"13660:18:94","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":23036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriceOracle","nodeType":"MemberAccess","referencedDeclaration":5014,"src":"13660:33:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":23037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13660:35:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":23038,"name":"_usersEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25324,"src":"13726:19:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":23040,"indexExpression":{"id":23039,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23007,"src":"13746:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13726:25:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":23028,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"13494:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":23029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CalculateUserAccountDataParams","nodeType":"MemberAccess","referencedDeclaration":21556,"src":"13494:40:94","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_CalculateUserAccountDataParams_$21556_storage_ptr_$","typeString":"type(struct DataTypes.CalculateUserAccountDataParams storage pointer)"}},"id":23041,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["userConfig","reservesCount","user","oracle","userEModeCategory"],"nodeType":"FunctionCall","src":"13494:268:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","typeString":"struct DataTypes.CalculateUserAccountDataParams memory"}],"expression":{"id":23023,"name":"PoolLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17617,"src":"13381:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolLogic_$17617_$","typeString":"type(library PoolLogic)"}},"id":23024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeGetUserAccountData","nodeType":"MemberAccess","referencedDeclaration":17616,"src":"13381:35:94","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_view$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_$_t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.CalculateUserAccountDataParams memory) view returns (uint256,uint256,uint256,uint256,uint256,uint256)"}},"id":23042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13381:389:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,uint256)"}},"functionReturnParameters":23022,"id":23043,"nodeType":"Return","src":"13368:402:94"}]},"documentation":{"id":23005,"nodeType":"StructuredDocumentation","src":"13030:21:94","text":"@inheritdoc IPool"},"functionSelector":"bf92857c","id":23045,"implemented":true,"kind":"function","modifiers":[],"name":"getUserAccountData","nameLocation":"13063:18:94","nodeType":"FunctionDefinition","overrides":{"id":23009,"nodeType":"OverrideSpecifier","overrides":[],"src":"13142:8:94"},"parameters":{"id":23008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23007,"mutability":"mutable","name":"user","nameLocation":"13095:4:94","nodeType":"VariableDeclaration","scope":23045,"src":"13087:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23006,"name":"address","nodeType":"ElementaryTypeName","src":"13087:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13081:22:94"},"returnParameters":{"id":23022,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23011,"mutability":"mutable","name":"totalCollateralBase","nameLocation":"13179:19:94","nodeType":"VariableDeclaration","scope":23045,"src":"13171:27:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23010,"name":"uint256","nodeType":"ElementaryTypeName","src":"13171:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23013,"mutability":"mutable","name":"totalDebtBase","nameLocation":"13214:13:94","nodeType":"VariableDeclaration","scope":23045,"src":"13206:21:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23012,"name":"uint256","nodeType":"ElementaryTypeName","src":"13206:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23015,"mutability":"mutable","name":"availableBorrowsBase","nameLocation":"13243:20:94","nodeType":"VariableDeclaration","scope":23045,"src":"13235:28:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23014,"name":"uint256","nodeType":"ElementaryTypeName","src":"13235:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23017,"mutability":"mutable","name":"currentLiquidationThreshold","nameLocation":"13279:27:94","nodeType":"VariableDeclaration","scope":23045,"src":"13271:35:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23016,"name":"uint256","nodeType":"ElementaryTypeName","src":"13271:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23019,"mutability":"mutable","name":"ltv","nameLocation":"13322:3:94","nodeType":"VariableDeclaration","scope":23045,"src":"13314:11:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23018,"name":"uint256","nodeType":"ElementaryTypeName","src":"13314:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23021,"mutability":"mutable","name":"healthFactor","nameLocation":"13341:12:94","nodeType":"VariableDeclaration","scope":23045,"src":"13333:20:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23020,"name":"uint256","nodeType":"ElementaryTypeName","src":"13333:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13163:196:94"},"scope":23636,"src":"13054:721:94","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[4676],"body":{"id":23060,"nodeType":"Block","src":"13934:48:94","statements":[{"expression":{"expression":{"baseExpression":{"id":23055,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"13947:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":23057,"indexExpression":{"id":23056,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23048,"src":"13957:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13947:16:94","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":23058,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":21286,"src":"13947:30:94","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"functionReturnParameters":23054,"id":23059,"nodeType":"Return","src":"13940:37:94"}]},"documentation":{"id":23046,"nodeType":"StructuredDocumentation","src":"13779:21:94","text":"@inheritdoc IPool"},"functionSelector":"c44b11f7","id":23061,"implemented":true,"kind":"function","modifiers":[],"name":"getConfiguration","nameLocation":"13812:16:94","nodeType":"FunctionDefinition","overrides":{"id":23050,"nodeType":"OverrideSpecifier","overrides":[],"src":"13874:8:94"},"parameters":{"id":23049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23048,"mutability":"mutable","name":"asset","nameLocation":"13842:5:94","nodeType":"VariableDeclaration","scope":23061,"src":"13834:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23047,"name":"address","nodeType":"ElementaryTypeName","src":"13834:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13828:23:94"},"returnParameters":{"id":23054,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23053,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23061,"src":"13892:40:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":23052,"nodeType":"UserDefinedTypeName","pathNode":{"id":23051,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"13892:33:94"},"referencedDeclaration":21318,"src":"13892:33:94","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"13891:42:94"},"scope":23636,"src":"13803:179:94","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[4685],"body":{"id":23075,"nodeType":"Block","src":"14141:36:94","statements":[{"expression":{"baseExpression":{"id":23071,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25311,"src":"14154:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":23073,"indexExpression":{"id":23072,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23064,"src":"14167:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14154:18:94","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},"functionReturnParameters":23070,"id":23074,"nodeType":"Return","src":"14147:25:94"}]},"documentation":{"id":23062,"nodeType":"StructuredDocumentation","src":"13986:21:94","text":"@inheritdoc IPool"},"functionSelector":"4417a583","id":23076,"implemented":true,"kind":"function","modifiers":[],"name":"getUserConfiguration","nameLocation":"14019:20:94","nodeType":"FunctionDefinition","overrides":{"id":23066,"nodeType":"OverrideSpecifier","overrides":[],"src":"14084:8:94"},"parameters":{"id":23065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23064,"mutability":"mutable","name":"user","nameLocation":"14053:4:94","nodeType":"VariableDeclaration","scope":23076,"src":"14045:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23063,"name":"address","nodeType":"ElementaryTypeName","src":"14045:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14039:22:94"},"returnParameters":{"id":23070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23069,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23076,"src":"14102:37:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":23068,"nodeType":"UserDefinedTypeName","pathNode":{"id":23067,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"14102:30:94"},"referencedDeclaration":21322,"src":"14102:30:94","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"src":"14101:39:94"},"scope":23636,"src":"14010:167:94","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[4693],"body":{"id":23091,"nodeType":"Block","src":"14313:56:94","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":23085,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"14326:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":23087,"indexExpression":{"id":23086,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23079,"src":"14336:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14326:16:94","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":23088,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getNormalizedIncome","nodeType":"MemberAccess","referencedDeclaration":17715,"src":"14326:36:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$21315_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (uint256)"}},"id":23089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14326:38:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":23084,"id":23090,"nodeType":"Return","src":"14319:45:94"}]},"documentation":{"id":23077,"nodeType":"StructuredDocumentation","src":"14181:21:94","text":"@inheritdoc IPool"},"functionSelector":"d15e0053","id":23092,"implemented":true,"kind":"function","modifiers":[],"name":"getReserveNormalizedIncome","nameLocation":"14214:26:94","nodeType":"FunctionDefinition","overrides":{"id":23081,"nodeType":"OverrideSpecifier","overrides":[],"src":"14286:8:94"},"parameters":{"id":23080,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23079,"mutability":"mutable","name":"asset","nameLocation":"14254:5:94","nodeType":"VariableDeclaration","scope":23092,"src":"14246:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23078,"name":"address","nodeType":"ElementaryTypeName","src":"14246:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14240:23:94"},"returnParameters":{"id":23084,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23083,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23092,"src":"14304:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23082,"name":"uint256","nodeType":"ElementaryTypeName","src":"14304:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14303:9:94"},"scope":23636,"src":"14205:164:94","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[4701],"body":{"id":23107,"nodeType":"Block","src":"14511:54:94","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":23101,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"14524:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":23103,"indexExpression":{"id":23102,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23095,"src":"14534:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14524:16:94","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":23104,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getNormalizedDebt","nodeType":"MemberAccess","referencedDeclaration":17751,"src":"14524:34:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_ReserveData_$21315_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveData_$21315_storage_ptr_$","typeString":"function (struct DataTypes.ReserveData storage pointer) view returns (uint256)"}},"id":23105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14524:36:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":23100,"id":23106,"nodeType":"Return","src":"14517:43:94"}]},"documentation":{"id":23093,"nodeType":"StructuredDocumentation","src":"14373:21:94","text":"@inheritdoc IPool"},"functionSelector":"386497fd","id":23108,"implemented":true,"kind":"function","modifiers":[],"name":"getReserveNormalizedVariableDebt","nameLocation":"14406:32:94","nodeType":"FunctionDefinition","overrides":{"id":23097,"nodeType":"OverrideSpecifier","overrides":[],"src":"14484:8:94"},"parameters":{"id":23096,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23095,"mutability":"mutable","name":"asset","nameLocation":"14452:5:94","nodeType":"VariableDeclaration","scope":23108,"src":"14444:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23094,"name":"address","nodeType":"ElementaryTypeName","src":"14444:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14438:23:94"},"returnParameters":{"id":23100,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23099,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23108,"src":"14502:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23098,"name":"uint256","nodeType":"ElementaryTypeName","src":"14502:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14501:9:94"},"scope":23636,"src":"14397:168:94","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[4733],"body":{"id":23174,"nodeType":"Block","src":"14678:582:94","statements":[{"assignments":[23117],"declarations":[{"constant":false,"id":23117,"mutability":"mutable","name":"reservesListCount","nameLocation":"14692:17:94","nodeType":"VariableDeclaration","scope":23174,"src":"14684:25:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23116,"name":"uint256","nodeType":"ElementaryTypeName","src":"14684:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23119,"initialValue":{"id":23118,"name":"_reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25334,"src":"14712:14:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"VariableDeclarationStatement","src":"14684:42:94"},{"assignments":[23121],"declarations":[{"constant":false,"id":23121,"mutability":"mutable","name":"droppedReservesCount","nameLocation":"14740:20:94","nodeType":"VariableDeclaration","scope":23174,"src":"14732:28:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23120,"name":"uint256","nodeType":"ElementaryTypeName","src":"14732:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23123,"initialValue":{"hexValue":"30","id":23122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14763:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"14732:32:94"},{"assignments":[23128],"declarations":[{"constant":false,"id":23128,"mutability":"mutable","name":"reservesList","nameLocation":"14787:12:94","nodeType":"VariableDeclaration","scope":23174,"src":"14770:29:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":23126,"name":"address","nodeType":"ElementaryTypeName","src":"14770:7:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":23127,"nodeType":"ArrayTypeName","src":"14770:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":23134,"initialValue":{"arguments":[{"id":23132,"name":"reservesListCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23117,"src":"14816:17:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23131,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"14802:13:94","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":23129,"name":"address","nodeType":"ElementaryTypeName","src":"14806:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":23130,"nodeType":"ArrayTypeName","src":"14806:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":23133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14802:32:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"14770:64:94"},{"body":{"id":23169,"nodeType":"Block","src":"14889:173:94","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":23145,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25315,"src":"14901:13:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":23147,"indexExpression":{"id":23146,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23136,"src":"14915:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14901:16:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":23150,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14929:1:94","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":23149,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14921:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23148,"name":"address","nodeType":"ElementaryTypeName","src":"14921:7:94","typeDescriptions":{}}},"id":23151,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14921:10:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14901:30:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":23167,"nodeType":"Block","src":"15015:41:94","statements":[{"expression":{"id":23165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"15025:22:94","subExpression":{"id":23164,"name":"droppedReservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23121,"src":"15025:20:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23166,"nodeType":"ExpressionStatement","src":"15025:22:94"}]},"id":23168,"nodeType":"IfStatement","src":"14897:159:94","trueBody":{"id":23163,"nodeType":"Block","src":"14933:76:94","statements":[{"expression":{"id":23161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":23153,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23128,"src":"14943:12:94","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":23157,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23154,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23136,"src":"14956:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":23155,"name":"droppedReservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23121,"src":"14960:20:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14956:24:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14943:38:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":23158,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25315,"src":"14984:13:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":23160,"indexExpression":{"id":23159,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23136,"src":"14998:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14984:16:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14943:57:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":23162,"nodeType":"ExpressionStatement","src":"14943:57:94"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23139,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23136,"src":"14861:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":23140,"name":"reservesListCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23117,"src":"14865:17:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14861:21:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23170,"initializationExpression":{"assignments":[23136],"declarations":[{"constant":false,"id":23136,"mutability":"mutable","name":"i","nameLocation":"14854:1:94","nodeType":"VariableDeclaration","scope":23170,"src":"14846:9:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23135,"name":"uint256","nodeType":"ElementaryTypeName","src":"14846:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23138,"initialValue":{"hexValue":"30","id":23137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14858:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"14846:13:94"},"loopExpression":{"expression":{"id":23143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"14884:3:94","subExpression":{"id":23142,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23136,"src":"14884:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23144,"nodeType":"ExpressionStatement","src":"14884:3:94"},"nodeType":"ForStatement","src":"14841:221:94"},{"AST":{"nodeType":"YulBlock","src":"15151:80:94","statements":[{"expression":{"arguments":[{"name":"reservesList","nodeType":"YulIdentifier","src":"15166:12:94"},{"arguments":[{"name":"reservesListCount","nodeType":"YulIdentifier","src":"15184:17:94"},{"name":"droppedReservesCount","nodeType":"YulIdentifier","src":"15203:20:94"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15180:3:94"},"nodeType":"YulFunctionCall","src":"15180:44:94"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15159:6:94"},"nodeType":"YulFunctionCall","src":"15159:66:94"},"nodeType":"YulExpressionStatement","src":"15159:66:94"}]},"evmVersion":"london","externalReferences":[{"declaration":23121,"isOffset":false,"isSlot":false,"src":"15203:20:94","valueSize":1},{"declaration":23128,"isOffset":false,"isSlot":false,"src":"15166:12:94","valueSize":1},{"declaration":23117,"isOffset":false,"isSlot":false,"src":"15184:17:94","valueSize":1}],"id":23171,"nodeType":"InlineAssembly","src":"15142:89:94"},{"expression":{"id":23172,"name":"reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23128,"src":"15243:12:94","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":23115,"id":23173,"nodeType":"Return","src":"15236:19:94"}]},"documentation":{"id":23109,"nodeType":"StructuredDocumentation","src":"14569:21:94","text":"@inheritdoc IPool"},"functionSelector":"d1946dbc","id":23175,"implemented":true,"kind":"function","modifiers":[],"name":"getReservesList","nameLocation":"14602:15:94","nodeType":"FunctionDefinition","overrides":{"id":23111,"nodeType":"OverrideSpecifier","overrides":[],"src":"14642:8:94"},"parameters":{"id":23110,"nodeType":"ParameterList","parameters":[],"src":"14617:2:94"},"returnParameters":{"id":23115,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23114,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23175,"src":"14660:16:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":23112,"name":"address","nodeType":"ElementaryTypeName","src":"14660:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":23113,"nodeType":"ArrayTypeName","src":"14660:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"14659:18:94"},"scope":23636,"src":"14593:667:94","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[4741],"body":{"id":23187,"nodeType":"Block","src":"15362:35:94","statements":[{"expression":{"baseExpression":{"id":23183,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25315,"src":"15375:13:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":23185,"indexExpression":{"id":23184,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23178,"src":"15389:2:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15375:17:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":23182,"id":23186,"nodeType":"Return","src":"15368:24:94"}]},"documentation":{"id":23176,"nodeType":"StructuredDocumentation","src":"15264:21:94","text":"@inheritdoc IPool"},"functionSelector":"52751797","id":23188,"implemented":true,"kind":"function","modifiers":[],"name":"getReserveAddressById","nameLocation":"15297:21:94","nodeType":"FunctionDefinition","parameters":{"id":23179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23178,"mutability":"mutable","name":"id","nameLocation":"15326:2:94","nodeType":"VariableDeclaration","scope":23188,"src":"15319:9:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":23177,"name":"uint16","nodeType":"ElementaryTypeName","src":"15319:6:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"15318:11:94"},"returnParameters":{"id":23182,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23181,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23188,"src":"15353:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23180,"name":"address","nodeType":"ElementaryTypeName","src":"15353:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15352:9:94"},"scope":23636,"src":"15288:109:94","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4806],"body":{"id":23197,"nodeType":"Block","src":"15519:49:94","statements":[{"expression":{"id":23195,"name":"_maxStableRateBorrowSizePercent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25332,"src":"15532:31:94","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":23194,"id":23196,"nodeType":"Return","src":"15525:38:94"}]},"documentation":{"id":23189,"nodeType":"StructuredDocumentation","src":"15401:21:94","text":"@inheritdoc IPool"},"functionSelector":"e82fec2f","id":23198,"implemented":true,"kind":"function","modifiers":[],"name":"MAX_STABLE_RATE_BORROW_SIZE_PERCENT","nameLocation":"15434:35:94","nodeType":"FunctionDefinition","overrides":{"id":23191,"nodeType":"OverrideSpecifier","overrides":[],"src":"15492:8:94"},"parameters":{"id":23190,"nodeType":"ParameterList","parameters":[],"src":"15469:2:94"},"returnParameters":{"id":23194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23193,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23198,"src":"15510:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23192,"name":"uint256","nodeType":"ElementaryTypeName","src":"15510:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15509:9:94"},"scope":23636,"src":"15425:143:94","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[4818],"body":{"id":23207,"nodeType":"Block","src":"15674:36:94","statements":[{"expression":{"id":23205,"name":"_bridgeProtocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25326,"src":"15687:18:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":23204,"id":23206,"nodeType":"Return","src":"15680:25:94"}]},"documentation":{"id":23199,"nodeType":"StructuredDocumentation","src":"15572:21:94","text":"@inheritdoc IPool"},"functionSelector":"272d9072","id":23208,"implemented":true,"kind":"function","modifiers":[],"name":"BRIDGE_PROTOCOL_FEE","nameLocation":"15605:19:94","nodeType":"FunctionDefinition","overrides":{"id":23201,"nodeType":"OverrideSpecifier","overrides":[],"src":"15647:8:94"},"parameters":{"id":23200,"nodeType":"ParameterList","parameters":[],"src":"15624:2:94"},"returnParameters":{"id":23204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23203,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23208,"src":"15665:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23202,"name":"uint256","nodeType":"ElementaryTypeName","src":"15665:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15664:9:94"},"scope":23636,"src":"15596:114:94","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[4812],"body":{"id":23217,"nodeType":"Block","src":"15820:40:94","statements":[{"expression":{"id":23215,"name":"_flashLoanPremiumTotal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25328,"src":"15833:22:94","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":23214,"id":23216,"nodeType":"Return","src":"15826:29:94"}]},"documentation":{"id":23209,"nodeType":"StructuredDocumentation","src":"15714:21:94","text":"@inheritdoc IPool"},"functionSelector":"074b2e43","id":23218,"implemented":true,"kind":"function","modifiers":[],"name":"FLASHLOAN_PREMIUM_TOTAL","nameLocation":"15747:23:94","nodeType":"FunctionDefinition","overrides":{"id":23211,"nodeType":"OverrideSpecifier","overrides":[],"src":"15793:8:94"},"parameters":{"id":23210,"nodeType":"ParameterList","parameters":[],"src":"15770:2:94"},"returnParameters":{"id":23214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23213,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23218,"src":"15811:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":23212,"name":"uint128","nodeType":"ElementaryTypeName","src":"15811:7:94","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"15810:9:94"},"scope":23636,"src":"15738:122:94","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[4824],"body":{"id":23227,"nodeType":"Block","src":"15976:45:94","statements":[{"expression":{"id":23225,"name":"_flashLoanPremiumToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25330,"src":"15989:27:94","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":23224,"id":23226,"nodeType":"Return","src":"15982:34:94"}]},"documentation":{"id":23219,"nodeType":"StructuredDocumentation","src":"15864:21:94","text":"@inheritdoc IPool"},"functionSelector":"6a99c036","id":23228,"implemented":true,"kind":"function","modifiers":[],"name":"FLASHLOAN_PREMIUM_TO_PROTOCOL","nameLocation":"15897:29:94","nodeType":"FunctionDefinition","overrides":{"id":23221,"nodeType":"OverrideSpecifier","overrides":[],"src":"15949:8:94"},"parameters":{"id":23220,"nodeType":"ParameterList","parameters":[],"src":"15926:2:94"},"returnParameters":{"id":23224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23223,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23228,"src":"15967:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":23222,"name":"uint128","nodeType":"ElementaryTypeName","src":"15967:7:94","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"15966:9:94"},"scope":23636,"src":"15888:133:94","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[4830],"body":{"id":23238,"nodeType":"Block","src":"16126:57:94","statements":[{"expression":{"expression":{"id":23235,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11857,"src":"16139:20:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReserveConfiguration_$11857_$","typeString":"type(library ReserveConfiguration)"}},"id":23236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"MAX_RESERVES_COUNT","nodeType":"MemberAccess","referencedDeclaration":10731,"src":"16139:39:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"functionReturnParameters":23234,"id":23237,"nodeType":"Return","src":"16132:46:94"}]},"documentation":{"id":23229,"nodeType":"StructuredDocumentation","src":"16025:21:94","text":"@inheritdoc IPool"},"functionSelector":"f8119d51","id":23239,"implemented":true,"kind":"function","modifiers":[],"name":"MAX_NUMBER_RESERVES","nameLocation":"16058:19:94","nodeType":"FunctionDefinition","overrides":{"id":23231,"nodeType":"OverrideSpecifier","overrides":[],"src":"16100:8:94"},"parameters":{"id":23230,"nodeType":"ParameterList","parameters":[],"src":"16077:2:94"},"returnParameters":{"id":23234,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23233,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23239,"src":"16118:6:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":23232,"name":"uint16","nodeType":"ElementaryTypeName","src":"16118:6:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"16117:8:94"},"scope":23636,"src":"16049:134:94","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[4726],"body":{"id":23293,"nodeType":"Block","src":"16400:585:94","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23257,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16414:3:94","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":23258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"16414:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"baseExpression":{"id":23259,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"16428:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":23261,"indexExpression":{"id":23260,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23242,"src":"16438:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16428:16:94","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":23262,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"16428:30:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16414:44:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23264,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"16460:6:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":23265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_NOT_ATOKEN","nodeType":"MemberAccess","referencedDeclaration":12404,"src":"16460:24:94","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23256,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16406:7:94","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16406:79:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23267,"nodeType":"ExpressionStatement","src":"16406:79:94"},{"expression":{"arguments":[{"id":23271,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"16534:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":23272,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25315,"src":"16551:13:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":23273,"name":"_eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25320,"src":"16572:16:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"id":23274,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25311,"src":"16596:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},{"arguments":[{"id":23277,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23242,"src":"16666:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23278,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23244,"src":"16687:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23279,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23246,"src":"16705:2:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23280,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23248,"src":"16725:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":23281,"name":"balanceFromBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23250,"src":"16760:17:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":23282,"name":"balanceToBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23252,"src":"16804:15:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":23283,"name":"_reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25334,"src":"16844:14:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23284,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22244,"src":"16876:18:94","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":23285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriceOracle","nodeType":"MemberAccess","referencedDeclaration":5014,"src":"16876:33:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":23286,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16876:35:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":23287,"name":"_usersEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25324,"src":"16940:19:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":23289,"indexExpression":{"id":23288,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23244,"src":"16960:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16940:25:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":23275,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"16616:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":23276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FinalizeTransferParams","nodeType":"MemberAccess","referencedDeclaration":21484,"src":"16616:32:94","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_FinalizeTransferParams_$21484_storage_ptr_$","typeString":"type(struct DataTypes.FinalizeTransferParams storage pointer)"}},"id":23290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","from","to","amount","balanceFromBefore","balanceToBefore","reservesCount","oracle","fromEModeCategory"],"nodeType":"FunctionCall","src":"16616:358:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_FinalizeTransferParams_$21484_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"},{"typeIdentifier":"t_struct$_FinalizeTransferParams_$21484_memory_ptr","typeString":"struct DataTypes.FinalizeTransferParams memory"}],"expression":{"id":23268,"name":"SupplyLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19090,"src":"16491:11:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SupplyLogic_$19090_$","typeString":"type(library SupplyLogic)"}},"id":23270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeFinalizeTransfer","nodeType":"MemberAccess","referencedDeclaration":18952,"src":"16491:35:94","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$_$_t_struct$_FinalizeTransferParams_$21484_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),mapping(address => struct DataTypes.UserConfigurationMap storage ref),struct DataTypes.FinalizeTransferParams memory)"}},"id":23291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16491:489:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23292,"nodeType":"ExpressionStatement","src":"16491:489:94"}]},"documentation":{"id":23240,"nodeType":"StructuredDocumentation","src":"16187:21:94","text":"@inheritdoc IPool"},"functionSelector":"d5ed3933","id":23294,"implemented":true,"kind":"function","modifiers":[],"name":"finalizeTransfer","nameLocation":"16220:16:94","nodeType":"FunctionDefinition","overrides":{"id":23254,"nodeType":"OverrideSpecifier","overrides":[],"src":"16391:8:94"},"parameters":{"id":23253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23242,"mutability":"mutable","name":"asset","nameLocation":"16250:5:94","nodeType":"VariableDeclaration","scope":23294,"src":"16242:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23241,"name":"address","nodeType":"ElementaryTypeName","src":"16242:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23244,"mutability":"mutable","name":"from","nameLocation":"16269:4:94","nodeType":"VariableDeclaration","scope":23294,"src":"16261:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23243,"name":"address","nodeType":"ElementaryTypeName","src":"16261:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23246,"mutability":"mutable","name":"to","nameLocation":"16287:2:94","nodeType":"VariableDeclaration","scope":23294,"src":"16279:10:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23245,"name":"address","nodeType":"ElementaryTypeName","src":"16279:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23248,"mutability":"mutable","name":"amount","nameLocation":"16303:6:94","nodeType":"VariableDeclaration","scope":23294,"src":"16295:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23247,"name":"uint256","nodeType":"ElementaryTypeName","src":"16295:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23250,"mutability":"mutable","name":"balanceFromBefore","nameLocation":"16323:17:94","nodeType":"VariableDeclaration","scope":23294,"src":"16315:25:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23249,"name":"uint256","nodeType":"ElementaryTypeName","src":"16315:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23252,"mutability":"mutable","name":"balanceToBefore","nameLocation":"16354:15:94","nodeType":"VariableDeclaration","scope":23294,"src":"16346:23:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23251,"name":"uint256","nodeType":"ElementaryTypeName","src":"16346:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16236:137:94"},"returnParameters":{"id":23255,"nodeType":"ParameterList","parameters":[],"src":"16400:0:94"},"scope":23636,"src":"16211:774:94","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4644],"body":{"id":23332,"nodeType":"Block","src":"17236:511:94","statements":[{"condition":{"arguments":[{"id":23313,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"17291:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":23314,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25315,"src":"17310:13:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"arguments":[{"id":23317,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23297,"src":"17380:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23318,"name":"aTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23299,"src":"17412:13:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23319,"name":"stableDebtAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23301,"src":"17456:17:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23320,"name":"variableDebtAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23303,"src":"17506:19:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23321,"name":"interestRateStrategyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23305,"src":"17566:27:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23322,"name":"_reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25334,"src":"17620:14:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"arguments":[],"expression":{"argumentTypes":[],"id":23323,"name":"MAX_NUMBER_RESERVES","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23239,"src":"17665:19:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint16_$","typeString":"function () view returns (uint16)"}},"id":23324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17665:21:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":23315,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"17333:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":23316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InitReserveParams","nodeType":"MemberAccess","referencedDeclaration":21632,"src":"17333:27:94","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_InitReserveParams_$21632_storage_ptr_$","typeString":"type(struct DataTypes.InitReserveParams storage pointer)"}},"id":23325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","aTokenAddress","stableDebtAddress","variableDebtAddress","interestRateStrategyAddress","reservesCount","maxNumberReserves"],"nodeType":"FunctionCall","src":"17333:364:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveParams_$21632_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_InitReserveParams_$21632_memory_ptr","typeString":"struct DataTypes.InitReserveParams memory"}],"expression":{"id":23311,"name":"PoolLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17617,"src":"17253:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolLogic_$17617_$","typeString":"type(library PoolLogic)"}},"id":23312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeInitReserve","nodeType":"MemberAccess","referencedDeclaration":17360,"src":"17253:28:94","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_InitReserveParams_$21632_memory_ptr_$returns$_t_bool_$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.InitReserveParams memory) returns (bool)"}},"id":23326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17253:452:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23331,"nodeType":"IfStatement","src":"17242:501:94","trueBody":{"id":23330,"nodeType":"Block","src":"17712:31:94","statements":[{"expression":{"id":23328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"17720:16:94","subExpression":{"id":23327,"name":"_reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25334,"src":"17720:14:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":23329,"nodeType":"ExpressionStatement","src":"17720:16:94"}]}}]},"documentation":{"id":23295,"nodeType":"StructuredDocumentation","src":"16989:21:94","text":"@inheritdoc IPool"},"functionSelector":"7a708e92","id":23333,"implemented":true,"kind":"function","modifiers":[{"id":23309,"kind":"modifierInvocation","modifierName":{"id":23308,"name":"onlyPoolConfigurator","nodeType":"IdentifierPath","referencedDeclaration":22252,"src":"17215:20:94"},"nodeType":"ModifierInvocation","src":"17215:20:94"}],"name":"initReserve","nameLocation":"17022:11:94","nodeType":"FunctionDefinition","overrides":{"id":23307,"nodeType":"OverrideSpecifier","overrides":[],"src":"17206:8:94"},"parameters":{"id":23306,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23297,"mutability":"mutable","name":"asset","nameLocation":"17047:5:94","nodeType":"VariableDeclaration","scope":23333,"src":"17039:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23296,"name":"address","nodeType":"ElementaryTypeName","src":"17039:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23299,"mutability":"mutable","name":"aTokenAddress","nameLocation":"17066:13:94","nodeType":"VariableDeclaration","scope":23333,"src":"17058:21:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23298,"name":"address","nodeType":"ElementaryTypeName","src":"17058:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23301,"mutability":"mutable","name":"stableDebtAddress","nameLocation":"17093:17:94","nodeType":"VariableDeclaration","scope":23333,"src":"17085:25:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23300,"name":"address","nodeType":"ElementaryTypeName","src":"17085:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23303,"mutability":"mutable","name":"variableDebtAddress","nameLocation":"17124:19:94","nodeType":"VariableDeclaration","scope":23333,"src":"17116:27:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23302,"name":"address","nodeType":"ElementaryTypeName","src":"17116:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23305,"mutability":"mutable","name":"interestRateStrategyAddress","nameLocation":"17157:27:94","nodeType":"VariableDeclaration","scope":23333,"src":"17149:35:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23304,"name":"address","nodeType":"ElementaryTypeName","src":"17149:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17033:155:94"},"returnParameters":{"id":23310,"nodeType":"ParameterList","parameters":[],"src":"17236:0:94"},"scope":23636,"src":"17013:734:94","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4650],"body":{"id":23350,"nodeType":"Block","src":"17858:72:94","statements":[{"expression":{"arguments":[{"id":23345,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"17893:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":23346,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25315,"src":"17904:13:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":23347,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23336,"src":"17919:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":23342,"name":"PoolLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17617,"src":"17864:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolLogic_$17617_$","typeString":"type(library PoolLogic)"}},"id":23344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeDropReserve","nodeType":"MemberAccess","referencedDeclaration":17558,"src":"17864:28:94","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_address_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),address)"}},"id":23348,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17864:61:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23349,"nodeType":"ExpressionStatement","src":"17864:61:94"}]},"documentation":{"id":23334,"nodeType":"StructuredDocumentation","src":"17751:21:94","text":"@inheritdoc IPool"},"functionSelector":"63c9b860","id":23351,"implemented":true,"kind":"function","modifiers":[{"id":23340,"kind":"modifierInvocation","modifierName":{"id":23339,"name":"onlyPoolConfigurator","nodeType":"IdentifierPath","referencedDeclaration":22252,"src":"17837:20:94"},"nodeType":"ModifierInvocation","src":"17837:20:94"}],"name":"dropReserve","nameLocation":"17784:11:94","nodeType":"FunctionDefinition","overrides":{"id":23338,"nodeType":"OverrideSpecifier","overrides":[],"src":"17828:8:94"},"parameters":{"id":23337,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23336,"mutability":"mutable","name":"asset","nameLocation":"17804:5:94","nodeType":"VariableDeclaration","scope":23351,"src":"17796:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23335,"name":"address","nodeType":"ElementaryTypeName","src":"17796:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17795:15:94"},"returnParameters":{"id":23341,"nodeType":"ParameterList","parameters":[],"src":"17858:0:94"},"scope":23636,"src":"17775:155:94","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4658],"body":{"id":23397,"nodeType":"Block","src":"18108:235:94","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23363,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23354,"src":"18122:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":23366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18139:1:94","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":23365,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18131:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23364,"name":"address","nodeType":"ElementaryTypeName","src":"18131:7:94","typeDescriptions":{}}},"id":23367,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18131:10:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18122:19:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23369,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"18143:6:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":23370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ZERO_ADDRESS_NOT_VALID","nodeType":"MemberAccess","referencedDeclaration":12599,"src":"18143:29:94","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23362,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18114:7:94","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18114:59:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23372,"nodeType":"ExpressionStatement","src":"18114:59:94"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":23379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":23374,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"18187:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":23376,"indexExpression":{"id":23375,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23354,"src":"18197:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18187:16:94","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":23377,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"18187:19:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":23378,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18210:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"18187:24:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":23380,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25315,"src":"18215:13:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":23382,"indexExpression":{"hexValue":"30","id":23381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18229:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18215:16:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":23383,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23354,"src":"18235:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18215:25:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"18187:53:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23386,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"18242:6:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":23387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ASSET_NOT_LISTED","nodeType":"MemberAccess","referencedDeclaration":12614,"src":"18242:23:94","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23373,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18179:7:94","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18179:87:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23389,"nodeType":"ExpressionStatement","src":"18179:87:94"},{"expression":{"id":23395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":23390,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"18272:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":23392,"indexExpression":{"id":23391,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23354,"src":"18282:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18272:16:94","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":23393,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":21308,"src":"18272:44:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":23394,"name":"rateStrategyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23356,"src":"18319:19:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18272:66:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":23396,"nodeType":"ExpressionStatement","src":"18272:66:94"}]},"documentation":{"id":23352,"nodeType":"StructuredDocumentation","src":"17934:21:94","text":"@inheritdoc IPool"},"functionSelector":"1d2118f9","id":23398,"implemented":true,"kind":"function","modifiers":[{"id":23360,"kind":"modifierInvocation","modifierName":{"id":23359,"name":"onlyPoolConfigurator","nodeType":"IdentifierPath","referencedDeclaration":22252,"src":"18087:20:94"},"nodeType":"ModifierInvocation","src":"18087:20:94"}],"name":"setReserveInterestRateStrategyAddress","nameLocation":"17967:37:94","nodeType":"FunctionDefinition","overrides":{"id":23358,"nodeType":"OverrideSpecifier","overrides":[],"src":"18078:8:94"},"parameters":{"id":23357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23354,"mutability":"mutable","name":"asset","nameLocation":"18018:5:94","nodeType":"VariableDeclaration","scope":23398,"src":"18010:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23353,"name":"address","nodeType":"ElementaryTypeName","src":"18010:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23356,"mutability":"mutable","name":"rateStrategyAddress","nameLocation":"18037:19:94","nodeType":"VariableDeclaration","scope":23398,"src":"18029:27:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23355,"name":"address","nodeType":"ElementaryTypeName","src":"18029:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18004:56:94"},"returnParameters":{"id":23361,"nodeType":"ParameterList","parameters":[],"src":"18108:0:94"},"scope":23636,"src":"17958:385:94","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4667],"body":{"id":23445,"nodeType":"Block","src":"18529:215:94","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23411,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23401,"src":"18543:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":23414,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18560:1:94","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":23413,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18552:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23412,"name":"address","nodeType":"ElementaryTypeName","src":"18552:7:94","typeDescriptions":{}}},"id":23415,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18552:10:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18543:19:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23417,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"18564:6:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":23418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ZERO_ADDRESS_NOT_VALID","nodeType":"MemberAccess","referencedDeclaration":12599,"src":"18564:29:94","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23410,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18535:7:94","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18535:59:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23420,"nodeType":"ExpressionStatement","src":"18535:59:94"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":23427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":23422,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"18608:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":23424,"indexExpression":{"id":23423,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23401,"src":"18618:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18608:16:94","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":23425,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"id","nodeType":"MemberAccess","referencedDeclaration":21300,"src":"18608:19:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":23426,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18631:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"18608:24:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":23428,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25315,"src":"18636:13:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":23430,"indexExpression":{"hexValue":"30","id":23429,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18650:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18636:16:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":23431,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23401,"src":"18656:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18636:25:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"18608:53:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23434,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"18663:6:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":23435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ASSET_NOT_LISTED","nodeType":"MemberAccess","referencedDeclaration":12614,"src":"18663:23:94","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23421,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18600:7:94","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23436,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18600:87:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23437,"nodeType":"ExpressionStatement","src":"18600:87:94"},{"expression":{"id":23443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":23438,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"18693:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},"id":23440,"indexExpression":{"id":23439,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23401,"src":"18703:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18693:16:94","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage","typeString":"struct DataTypes.ReserveData storage ref"}},"id":23441,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":21286,"src":"18693:30:94","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":23442,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23404,"src":"18726:13:94","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_calldata_ptr","typeString":"struct DataTypes.ReserveConfigurationMap calldata"}},"src":"18693:46:94","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage","typeString":"struct DataTypes.ReserveConfigurationMap storage ref"}},"id":23444,"nodeType":"ExpressionStatement","src":"18693:46:94"}]},"documentation":{"id":23399,"nodeType":"StructuredDocumentation","src":"18347:21:94","text":"@inheritdoc IPool"},"functionSelector":"f51e435b","id":23446,"implemented":true,"kind":"function","modifiers":[{"id":23408,"kind":"modifierInvocation","modifierName":{"id":23407,"name":"onlyPoolConfigurator","nodeType":"IdentifierPath","referencedDeclaration":22252,"src":"18508:20:94"},"nodeType":"ModifierInvocation","src":"18508:20:94"}],"name":"setConfiguration","nameLocation":"18380:16:94","nodeType":"FunctionDefinition","overrides":{"id":23406,"nodeType":"OverrideSpecifier","overrides":[],"src":"18499:8:94"},"parameters":{"id":23405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23401,"mutability":"mutable","name":"asset","nameLocation":"18410:5:94","nodeType":"VariableDeclaration","scope":23446,"src":"18402:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23400,"name":"address","nodeType":"ElementaryTypeName","src":"18402:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23404,"mutability":"mutable","name":"configuration","nameLocation":"18464:13:94","nodeType":"VariableDeclaration","scope":23446,"src":"18421:56:94","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_calldata_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":23403,"nodeType":"UserDefinedTypeName","pathNode":{"id":23402,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"18421:33:94"},"referencedDeclaration":21318,"src":"18421:33:94","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"src":"18396:85:94"},"returnParameters":{"id":23409,"nodeType":"ParameterList","parameters":[],"src":"18529:0:94"},"scope":23636,"src":"18371:373:94","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4754],"body":{"id":23459,"nodeType":"Block","src":"18881:43:94","statements":[{"expression":{"id":23457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23455,"name":"_bridgeProtocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25326,"src":"18887:18:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":23456,"name":"protocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23449,"src":"18908:11:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18887:32:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23458,"nodeType":"ExpressionStatement","src":"18887:32:94"}]},"documentation":{"id":23447,"nodeType":"StructuredDocumentation","src":"18748:21:94","text":"@inheritdoc IPool"},"functionSelector":"3036b439","id":23460,"implemented":true,"kind":"function","modifiers":[{"id":23453,"kind":"modifierInvocation","modifierName":{"id":23452,"name":"onlyPoolConfigurator","nodeType":"IdentifierPath","referencedDeclaration":22252,"src":"18860:20:94"},"nodeType":"ModifierInvocation","src":"18860:20:94"}],"name":"updateBridgeProtocolFee","nameLocation":"18781:23:94","nodeType":"FunctionDefinition","overrides":{"id":23451,"nodeType":"OverrideSpecifier","overrides":[],"src":"18851:8:94"},"parameters":{"id":23450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23449,"mutability":"mutable","name":"protocolFee","nameLocation":"18818:11:94","nodeType":"VariableDeclaration","scope":23460,"src":"18810:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23448,"name":"uint256","nodeType":"ElementaryTypeName","src":"18810:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18804:29:94"},"returnParameters":{"id":23454,"nodeType":"ParameterList","parameters":[],"src":"18881:0:94"},"scope":23636,"src":"18772:152:94","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4762],"body":{"id":23479,"nodeType":"Block","src":"19111:119:94","statements":[{"expression":{"id":23473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23471,"name":"_flashLoanPremiumTotal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25328,"src":"19117:22:94","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":23472,"name":"flashLoanPremiumTotal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23463,"src":"19142:21:94","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"19117:46:94","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":23474,"nodeType":"ExpressionStatement","src":"19117:46:94"},{"expression":{"id":23477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23475,"name":"_flashLoanPremiumToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25330,"src":"19169:27:94","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":23476,"name":"flashLoanPremiumToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23465,"src":"19199:26:94","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"19169:56:94","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":23478,"nodeType":"ExpressionStatement","src":"19169:56:94"}]},"documentation":{"id":23461,"nodeType":"StructuredDocumentation","src":"18928:21:94","text":"@inheritdoc IPool"},"functionSelector":"bcb6e522","id":23480,"implemented":true,"kind":"function","modifiers":[{"id":23469,"kind":"modifierInvocation","modifierName":{"id":23468,"name":"onlyPoolConfigurator","nodeType":"IdentifierPath","referencedDeclaration":22252,"src":"19090:20:94"},"nodeType":"ModifierInvocation","src":"19090:20:94"}],"name":"updateFlashloanPremiums","nameLocation":"18961:23:94","nodeType":"FunctionDefinition","overrides":{"id":23467,"nodeType":"OverrideSpecifier","overrides":[],"src":"19081:8:94"},"parameters":{"id":23466,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23463,"mutability":"mutable","name":"flashLoanPremiumTotal","nameLocation":"18998:21:94","nodeType":"VariableDeclaration","scope":23480,"src":"18990:29:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":23462,"name":"uint128","nodeType":"ElementaryTypeName","src":"18990:7:94","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":23465,"mutability":"mutable","name":"flashLoanPremiumToProtocol","nameLocation":"19033:26:94","nodeType":"VariableDeclaration","scope":23480,"src":"19025:34:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":23464,"name":"uint128","nodeType":"ElementaryTypeName","src":"19025:7:94","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"18984:79:94"},"returnParameters":{"id":23470,"nodeType":"ParameterList","parameters":[],"src":"19111:0:94"},"scope":23636,"src":"18952:278:94","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4771],"body":{"id":23506,"nodeType":"Block","src":"19400:185:94","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":23495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23493,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23483,"src":"19503:2:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":23494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19509:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"19503:7:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23496,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"19512:6:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":23497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"EMODE_CATEGORY_RESERVED","nodeType":"MemberAccess","referencedDeclaration":12419,"src":"19512:30:94","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23492,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"19495:7:94","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19495:48:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23499,"nodeType":"ExpressionStatement","src":"19495:48:94"},{"expression":{"id":23504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":23500,"name":"_eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25320,"src":"19549:16:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},"id":23502,"indexExpression":{"id":23501,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23483,"src":"19566:2:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"19549:20:94","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage","typeString":"struct DataTypes.EModeCategory storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":23503,"name":"category","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23486,"src":"19572:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_memory_ptr","typeString":"struct DataTypes.EModeCategory memory"}},"src":"19549:31:94","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage","typeString":"struct DataTypes.EModeCategory storage ref"}},"id":23505,"nodeType":"ExpressionStatement","src":"19549:31:94"}]},"documentation":{"id":23481,"nodeType":"StructuredDocumentation","src":"19234:21:94","text":"@inheritdoc IPool"},"functionSelector":"d579ea7d","id":23507,"implemented":true,"kind":"function","modifiers":[{"id":23490,"kind":"modifierInvocation","modifierName":{"id":23489,"name":"onlyPoolConfigurator","nodeType":"IdentifierPath","referencedDeclaration":22252,"src":"19379:20:94"},"nodeType":"ModifierInvocation","src":"19379:20:94"}],"name":"configureEModeCategory","nameLocation":"19267:22:94","nodeType":"FunctionDefinition","overrides":{"id":23488,"nodeType":"OverrideSpecifier","overrides":[],"src":"19370:8:94"},"parameters":{"id":23487,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23483,"mutability":"mutable","name":"id","nameLocation":"19301:2:94","nodeType":"VariableDeclaration","scope":23507,"src":"19295:8:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":23482,"name":"uint8","nodeType":"ElementaryTypeName","src":"19295:5:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":23486,"mutability":"mutable","name":"category","nameLocation":"19340:8:94","nodeType":"VariableDeclaration","scope":23507,"src":"19309:39:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_memory_ptr","typeString":"struct DataTypes.EModeCategory"},"typeName":{"id":23485,"nodeType":"UserDefinedTypeName","pathNode":{"id":23484,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":21333,"src":"19309:23:94"},"referencedDeclaration":21333,"src":"19309:23:94","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory"}},"visibility":"internal"}],"src":"19289:63:94"},"returnParameters":{"id":23491,"nodeType":"ParameterList","parameters":[],"src":"19400:0:94"},"scope":23636,"src":"19258:327:94","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4780],"body":{"id":23521,"nodeType":"Block","src":"19733:38:94","statements":[{"expression":{"baseExpression":{"id":23517,"name":"_eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25320,"src":"19746:16:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},"id":23519,"indexExpression":{"id":23518,"name":"id","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23510,"src":"19763:2:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19746:20:94","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage","typeString":"struct DataTypes.EModeCategory storage ref"}},"functionReturnParameters":23516,"id":23520,"nodeType":"Return","src":"19739:27:94"}]},"documentation":{"id":23508,"nodeType":"StructuredDocumentation","src":"19589:21:94","text":"@inheritdoc IPool"},"functionSelector":"6c6f6ae1","id":23522,"implemented":true,"kind":"function","modifiers":[],"name":"getEModeCategoryData","nameLocation":"19622:20:94","nodeType":"FunctionDefinition","overrides":{"id":23512,"nodeType":"OverrideSpecifier","overrides":[],"src":"19683:8:94"},"parameters":{"id":23511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23510,"mutability":"mutable","name":"id","nameLocation":"19654:2:94","nodeType":"VariableDeclaration","scope":23522,"src":"19648:8:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":23509,"name":"uint8","nodeType":"ElementaryTypeName","src":"19648:5:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"19642:18:94"},"returnParameters":{"id":23516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23515,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23522,"src":"19701:30:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_memory_ptr","typeString":"struct DataTypes.EModeCategory"},"typeName":{"id":23514,"nodeType":"UserDefinedTypeName","pathNode":{"id":23513,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":21333,"src":"19701:23:94"},"referencedDeclaration":21333,"src":"19701:23:94","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory"}},"visibility":"internal"}],"src":"19700:32:94"},"scope":23636,"src":"19613:158:94","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[4786],"body":{"id":23550,"nodeType":"Block","src":"19865:345:94","statements":[{"expression":{"arguments":[{"id":23532,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"19909:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":23533,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25315,"src":"19926:13:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"id":23534,"name":"_eModeCategories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25320,"src":"19947:16:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"}},{"id":23535,"name":"_usersEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25324,"src":"19971:19:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},{"baseExpression":{"id":23536,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25311,"src":"19998:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":23539,"indexExpression":{"expression":{"id":23537,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"20011:3:94","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":23538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"20011:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19998:24:94","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"arguments":[{"id":23542,"name":"_reservesCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25334,"src":"20091:14:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23543,"name":"ADDRESSES_PROVIDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22244,"src":"20123:18:94","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":23544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriceOracle","nodeType":"MemberAccess","referencedDeclaration":5014,"src":"20123:33:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":23545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20123:35:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23546,"name":"categoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23525,"src":"20180:10:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":23540,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"20030:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":23541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ExecuteSetUserEModeParams","nodeType":"MemberAccess","referencedDeclaration":21465,"src":"20030:35:94","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExecuteSetUserEModeParams_$21465_storage_ptr_$","typeString":"type(struct DataTypes.ExecuteSetUserEModeParams storage pointer)"}},"id":23547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["reservesCount","oracle","categoryId"],"nodeType":"FunctionCall","src":"20030:169:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr","typeString":"struct DataTypes.ExecuteSetUserEModeParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory storage ref)"},{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr","typeString":"struct DataTypes.ExecuteSetUserEModeParams memory"}],"expression":{"id":23529,"name":"EModeLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14615,"src":"19871:10:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_EModeLogic_$14615_$","typeString":"type(library EModeLogic)"}},"id":23531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeSetUserEMode","nodeType":"MemberAccess","referencedDeclaration":14546,"src":"19871:30:94","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_$_t_mapping$_t_address_$_t_uint8_$_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),mapping(address => uint8),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ExecuteSetUserEModeParams memory)"}},"id":23548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19871:334:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23549,"nodeType":"ExpressionStatement","src":"19871:334:94"}]},"documentation":{"id":23523,"nodeType":"StructuredDocumentation","src":"19775:21:94","text":"@inheritdoc IPool"},"functionSelector":"28530a47","id":23551,"implemented":true,"kind":"function","modifiers":[],"name":"setUserEMode","nameLocation":"19808:12:94","nodeType":"FunctionDefinition","overrides":{"id":23527,"nodeType":"OverrideSpecifier","overrides":[],"src":"19856:8:94"},"parameters":{"id":23526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23525,"mutability":"mutable","name":"categoryId","nameLocation":"19827:10:94","nodeType":"VariableDeclaration","scope":23551,"src":"19821:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":23524,"name":"uint8","nodeType":"ElementaryTypeName","src":"19821:5:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"19820:18:94"},"returnParameters":{"id":23528,"nodeType":"ParameterList","parameters":[],"src":"19865:0:94"},"scope":23636,"src":"19799:411:94","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4794],"body":{"id":23564,"nodeType":"Block","src":"20323:43:94","statements":[{"expression":{"baseExpression":{"id":23560,"name":"_usersEModeCategory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25324,"src":"20336:19:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"}},"id":23562,"indexExpression":{"id":23561,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23554,"src":"20356:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20336:25:94","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":23559,"id":23563,"nodeType":"Return","src":"20329:32:94"}]},"documentation":{"id":23552,"nodeType":"StructuredDocumentation","src":"20214:21:94","text":"@inheritdoc IPool"},"functionSelector":"eddf1b79","id":23565,"implemented":true,"kind":"function","modifiers":[],"name":"getUserEMode","nameLocation":"20247:12:94","nodeType":"FunctionDefinition","overrides":{"id":23556,"nodeType":"OverrideSpecifier","overrides":[],"src":"20296:8:94"},"parameters":{"id":23555,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23554,"mutability":"mutable","name":"user","nameLocation":"20268:4:94","nodeType":"VariableDeclaration","scope":23565,"src":"20260:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23553,"name":"address","nodeType":"ElementaryTypeName","src":"20260:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"20259:14:94"},"returnParameters":{"id":23559,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23558,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23565,"src":"20314:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23557,"name":"uint256","nodeType":"ElementaryTypeName","src":"20314:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20313:9:94"},"scope":23636,"src":"20238:128:94","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[4800],"body":{"id":23581,"nodeType":"Block","src":"20501:73:94","statements":[{"expression":{"arguments":[{"id":23577,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"20552:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":23578,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23568,"src":"20563:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":23574,"name":"PoolLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17617,"src":"20507:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolLogic_$17617_$","typeString":"type(library PoolLogic)"}},"id":23576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeResetIsolationModeTotalDebt","nodeType":"MemberAccess","referencedDeclaration":17508,"src":"20507:44:94","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_address_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),address)"}},"id":23579,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20507:62:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23580,"nodeType":"ExpressionStatement","src":"20507:62:94"}]},"documentation":{"id":23566,"nodeType":"StructuredDocumentation","src":"20370:21:94","text":"@inheritdoc IPool"},"functionSelector":"e43e88a1","id":23582,"implemented":true,"kind":"function","modifiers":[{"id":23572,"kind":"modifierInvocation","modifierName":{"id":23571,"name":"onlyPoolConfigurator","nodeType":"IdentifierPath","referencedDeclaration":22252,"src":"20480:20:94"},"nodeType":"ModifierInvocation","src":"20480:20:94"}],"name":"resetIsolationModeTotalDebt","nameLocation":"20403:27:94","nodeType":"FunctionDefinition","overrides":{"id":23570,"nodeType":"OverrideSpecifier","overrides":[],"src":"20471:8:94"},"parameters":{"id":23569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23568,"mutability":"mutable","name":"asset","nameLocation":"20444:5:94","nodeType":"VariableDeclaration","scope":23582,"src":"20436:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23567,"name":"address","nodeType":"ElementaryTypeName","src":"20436:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"20430:23:94"},"returnParameters":{"id":23573,"nodeType":"ParameterList","parameters":[],"src":"20501:0:94"},"scope":23636,"src":"20394:180:94","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4847],"body":{"id":23603,"nodeType":"Block","src":"20723:59:94","statements":[{"expression":{"arguments":[{"id":23598,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23585,"src":"20759:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23599,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23587,"src":"20766:2:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23600,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23589,"src":"20770:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":23595,"name":"PoolLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17617,"src":"20729:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolLogic_$17617_$","typeString":"type(library PoolLogic)"}},"id":23597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeRescueTokens","nodeType":"MemberAccess","referencedDeclaration":17379,"src":"20729:29:94","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":23601,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"20729:48:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23602,"nodeType":"ExpressionStatement","src":"20729:48:94"}]},"documentation":{"id":23583,"nodeType":"StructuredDocumentation","src":"20578:21:94","text":"@inheritdoc IPool"},"functionSelector":"cea9d26f","id":23604,"implemented":true,"kind":"function","modifiers":[{"id":23593,"kind":"modifierInvocation","modifierName":{"id":23592,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":22260,"src":"20709:13:94"},"nodeType":"ModifierInvocation","src":"20709:13:94"}],"name":"rescueTokens","nameLocation":"20611:12:94","nodeType":"FunctionDefinition","overrides":{"id":23591,"nodeType":"OverrideSpecifier","overrides":[],"src":"20700:8:94"},"parameters":{"id":23590,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23585,"mutability":"mutable","name":"token","nameLocation":"20637:5:94","nodeType":"VariableDeclaration","scope":23604,"src":"20629:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23584,"name":"address","nodeType":"ElementaryTypeName","src":"20629:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23587,"mutability":"mutable","name":"to","nameLocation":"20656:2:94","nodeType":"VariableDeclaration","scope":23604,"src":"20648:10:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23586,"name":"address","nodeType":"ElementaryTypeName","src":"20648:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23589,"mutability":"mutable","name":"amount","nameLocation":"20672:6:94","nodeType":"VariableDeclaration","scope":23604,"src":"20664:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23588,"name":"uint256","nodeType":"ElementaryTypeName","src":"20664:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20623:59:94"},"returnParameters":{"id":23594,"nodeType":"ParameterList","parameters":[],"src":"20723:0:94"},"scope":23636,"src":"20602:180:94","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[4859],"body":{"id":23634,"nodeType":"Block","src":"21006:273:94","statements":[{"expression":{"arguments":[{"id":23620,"name":"_reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25306,"src":"21045:9:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"}},{"id":23621,"name":"_reservesList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25315,"src":"21062:13:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},{"baseExpression":{"id":23622,"name":"_usersConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25311,"src":"21083:12:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap storage ref)"}},"id":23624,"indexExpression":{"id":23623,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23611,"src":"21096:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21083:24:94","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"}},{"arguments":[{"id":23627,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23607,"src":"21162:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23628,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23609,"src":"21185:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":23629,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23611,"src":"21213:10:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23630,"name":"referralCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23613,"src":"21247:12:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":23625,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"21115:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":23626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ExecuteSupplyParams","nodeType":"MemberAccess","referencedDeclaration":21407,"src":"21115:29:94","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ExecuteSupplyParams_$21407_storage_ptr_$","typeString":"type(struct DataTypes.ExecuteSupplyParams storage pointer)"}},"id":23631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["asset","amount","onBehalfOf","referralCode"],"nodeType":"FunctionCall","src":"21115:153:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$21407_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData storage ref)"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage","typeString":"struct DataTypes.UserConfigurationMap storage ref"},{"typeIdentifier":"t_struct$_ExecuteSupplyParams_$21407_memory_ptr","typeString":"struct DataTypes.ExecuteSupplyParams memory"}],"expression":{"id":23617,"name":"SupplyLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19090,"src":"21012:11:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SupplyLogic_$19090_$","typeString":"type(library SupplyLogic)"}},"id":23619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeSupply","nodeType":"MemberAccess","referencedDeclaration":18600,"src":"21012:25:94","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_$_t_mapping$_t_uint256_$_t_address_$_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_$_t_struct$_ExecuteSupplyParams_$21407_memory_ptr_$returns$__$","typeString":"function (mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ExecuteSupplyParams memory)"}},"id":23632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"21012:262:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23633,"nodeType":"ExpressionStatement","src":"21012:262:94"}]},"documentation":{"id":23605,"nodeType":"StructuredDocumentation","src":"20786:82:94","text":"@inheritdoc IPool\n @dev Deprecated: maintained for compatibility purposes"},"functionSelector":"e8eda9df","id":23635,"implemented":true,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"20880:7:94","nodeType":"FunctionDefinition","overrides":{"id":23615,"nodeType":"OverrideSpecifier","overrides":[],"src":"20997:8:94"},"parameters":{"id":23614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23607,"mutability":"mutable","name":"asset","nameLocation":"20901:5:94","nodeType":"VariableDeclaration","scope":23635,"src":"20893:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23606,"name":"address","nodeType":"ElementaryTypeName","src":"20893:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23609,"mutability":"mutable","name":"amount","nameLocation":"20920:6:94","nodeType":"VariableDeclaration","scope":23635,"src":"20912:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23608,"name":"uint256","nodeType":"ElementaryTypeName","src":"20912:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23611,"mutability":"mutable","name":"onBehalfOf","nameLocation":"20940:10:94","nodeType":"VariableDeclaration","scope":23635,"src":"20932:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23610,"name":"address","nodeType":"ElementaryTypeName","src":"20932:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23613,"mutability":"mutable","name":"referralCode","nameLocation":"20963:12:94","nodeType":"VariableDeclaration","scope":23635,"src":"20956:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":23612,"name":"uint16","nodeType":"ElementaryTypeName","src":"20956:6:94","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"20887:92:94"},"returnParameters":{"id":23616,"nodeType":"ParameterList","parameters":[],"src":"21006:0:94"},"scope":23636,"src":"20871:408:94","stateMutability":"nonpayable","virtual":true,"visibility":"external"}],"scope":23637,"src":"1828:19453:94","usedErrors":[]}],"src":"37:21245:94"},"id":94},"@aave/core-v3/contracts/protocol/pool/PoolConfigurator.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/pool/PoolConfigurator.sol","exportedSymbols":{"ConfiguratorInputTypes":[21281],"ConfiguratorLogic":[14409],"DataTypes":[21633],"Errors":[12642],"IACLManager":[3718],"IPool":[4860],"IPoolAddressesProvider":[5069],"IPoolConfigurator":[5567],"IPoolDataProvider":[5791],"PercentageMath":[21132],"PoolConfigurator":[25278],"ReserveConfiguration":[11857],"VersionedInitializable":[10573]},"id":25279,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":23638,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:95"},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol","file":"../libraries/aave-upgradeability/VersionedInitializable.sol","id":23640,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25279,"sourceUnit":10574,"src":"63:99:95","symbolAliases":[{"foreign":{"id":23639,"name":"VersionedInitializable","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:22:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../libraries/configuration/ReserveConfiguration.sol","id":23642,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25279,"sourceUnit":11858,"src":"163:89:95","symbolAliases":[{"foreign":{"id":23641,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"171:20:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"../../interfaces/IPoolAddressesProvider.sol","id":23644,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25279,"sourceUnit":5070,"src":"253:83:95","symbolAliases":[{"foreign":{"id":23643,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"261:22:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol","file":"../libraries/helpers/Errors.sol","id":23646,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25279,"sourceUnit":12643,"src":"337:55:95","symbolAliases":[{"foreign":{"id":23645,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"345:6:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol","file":"../libraries/math/PercentageMath.sol","id":23648,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25279,"sourceUnit":21133,"src":"393:68:95","symbolAliases":[{"foreign":{"id":23647,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"401:14:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"../libraries/types/DataTypes.sol","id":23650,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25279,"sourceUnit":21634,"src":"462:59:95","symbolAliases":[{"foreign":{"id":23649,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"470:9:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/ConfiguratorLogic.sol","file":"../libraries/logic/ConfiguratorLogic.sol","id":23652,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25279,"sourceUnit":14410,"src":"522:75:95","symbolAliases":[{"foreign":{"id":23651,"name":"ConfiguratorLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"530:17:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/ConfiguratorInputTypes.sol","file":"../libraries/types/ConfiguratorInputTypes.sol","id":23654,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25279,"sourceUnit":21282,"src":"598:85:95","symbolAliases":[{"foreign":{"id":23653,"name":"ConfiguratorInputTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"606:22:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolConfigurator.sol","file":"../../interfaces/IPoolConfigurator.sol","id":23656,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25279,"sourceUnit":5568,"src":"684:73:95","symbolAliases":[{"foreign":{"id":23655,"name":"IPoolConfigurator","nodeType":"Identifier","overloadedDeclarations":[],"src":"692:17:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":23658,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25279,"sourceUnit":4861,"src":"758:49:95","symbolAliases":[{"foreign":{"id":23657,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"766:5:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IACLManager.sol","file":"../../interfaces/IACLManager.sol","id":23660,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25279,"sourceUnit":3719,"src":"808:61:95","symbolAliases":[{"foreign":{"id":23659,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"src":"816:11:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolDataProvider.sol","file":"../../interfaces/IPoolDataProvider.sol","id":23662,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25279,"sourceUnit":5792,"src":"870:73:95","symbolAliases":[{"foreign":{"id":23661,"name":"IPoolDataProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"878:17:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":23664,"name":"VersionedInitializable","nodeType":"IdentifierPath","referencedDeclaration":10573,"src":"1092:22:95"},"id":23665,"nodeType":"InheritanceSpecifier","src":"1092:22:95"},{"baseName":{"id":23666,"name":"IPoolConfigurator","nodeType":"IdentifierPath","referencedDeclaration":5567,"src":"1116:17:95"},"id":23667,"nodeType":"InheritanceSpecifier","src":"1116:17:95"}],"canonicalName":"PoolConfigurator","contractDependencies":[],"contractKind":"contract","documentation":{"id":23663,"nodeType":"StructuredDocumentation","src":"945:117:95","text":" @title PoolConfigurator\n @author Aave\n @dev Implements the configuration methods for the Aave protocol"},"fullyImplemented":true,"id":25278,"linearizedBaseContracts":[25278,5567,10573],"name":"PoolConfigurator","nameLocation":"1072:16:95","nodeType":"ContractDefinition","nodes":[{"id":23670,"libraryName":{"id":23668,"name":"PercentageMath","nodeType":"IdentifierPath","referencedDeclaration":21132,"src":"1144:14:95"},"nodeType":"UsingForDirective","src":"1138:33:95","typeName":{"id":23669,"name":"uint256","nodeType":"ElementaryTypeName","src":"1163:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":23674,"libraryName":{"id":23671,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":11857,"src":"1180:20:95"},"nodeType":"UsingForDirective","src":"1174:65:95","typeName":{"id":23673,"nodeType":"UserDefinedTypeName","pathNode":{"id":23672,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"1205:33:95"},"referencedDeclaration":21318,"src":"1205:33:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"constant":false,"id":23677,"mutability":"mutable","name":"_addressesProvider","nameLocation":"1275:18:95","nodeType":"VariableDeclaration","scope":25278,"src":"1243:50:95","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":23676,"nodeType":"UserDefinedTypeName","pathNode":{"id":23675,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"1243:22:95"},"referencedDeclaration":5069,"src":"1243:22:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"},{"constant":false,"id":23680,"mutability":"mutable","name":"_pool","nameLocation":"1312:5:95","nodeType":"VariableDeclaration","scope":25278,"src":"1297:20:95","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":23679,"nodeType":"UserDefinedTypeName","pathNode":{"id":23678,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"1297:5:95"},"referencedDeclaration":4860,"src":"1297:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"},{"body":{"id":23687,"nodeType":"Block","src":"1429:34:95","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":23683,"name":"_onlyPoolAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25167,"src":"1435:14:95","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":23684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1435:16:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23685,"nodeType":"ExpressionStatement","src":"1435:16:95"},{"id":23686,"nodeType":"PlaceholderStatement","src":"1457:1:95"}]},"documentation":{"id":23681,"nodeType":"StructuredDocumentation","src":"1322:79:95","text":" @dev Only pool admin can call functions marked by this modifier."},"id":23688,"name":"onlyPoolAdmin","nameLocation":"1413:13:95","nodeType":"ModifierDefinition","parameters":{"id":23682,"nodeType":"ParameterList","parameters":[],"src":"1426:2:95"},"src":"1404:59:95","virtual":false,"visibility":"internal"},{"body":{"id":23695,"nodeType":"Block","src":"1584:39:95","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":23691,"name":"_onlyEmergencyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25190,"src":"1590:19:95","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":23692,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1590:21:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23693,"nodeType":"ExpressionStatement","src":"1590:21:95"},{"id":23694,"nodeType":"PlaceholderStatement","src":"1617:1:95"}]},"documentation":{"id":23689,"nodeType":"StructuredDocumentation","src":"1467:84:95","text":" @dev Only emergency admin can call functions marked by this modifier."},"id":23696,"name":"onlyEmergencyAdmin","nameLocation":"1563:18:95","nodeType":"ModifierDefinition","parameters":{"id":23690,"nodeType":"ParameterList","parameters":[],"src":"1581:2:95"},"src":"1554:69:95","virtual":false,"visibility":"internal"},{"body":{"id":23703,"nodeType":"Block","src":"1758:45:95","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":23699,"name":"_onlyPoolOrEmergencyAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25219,"src":"1764:25:95","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":23700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1764:27:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23701,"nodeType":"ExpressionStatement","src":"1764:27:95"},{"id":23702,"nodeType":"PlaceholderStatement","src":"1797:1:95"}]},"documentation":{"id":23697,"nodeType":"StructuredDocumentation","src":"1627:92:95","text":" @dev Only emergency or pool admin can call functions marked by this modifier."},"id":23704,"name":"onlyEmergencyOrPoolAdmin","nameLocation":"1731:24:95","nodeType":"ModifierDefinition","parameters":{"id":23698,"nodeType":"ParameterList","parameters":[],"src":"1755:2:95"},"src":"1722:81:95","virtual":false,"visibility":"internal"},{"body":{"id":23711,"nodeType":"Block","src":"1946:49:95","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":23707,"name":"_onlyAssetListingOrPoolAdmins","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25248,"src":"1952:29:95","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":23708,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1952:31:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23709,"nodeType":"ExpressionStatement","src":"1952:31:95"},{"id":23710,"nodeType":"PlaceholderStatement","src":"1989:1:95"}]},"documentation":{"id":23705,"nodeType":"StructuredDocumentation","src":"1807:96:95","text":" @dev Only asset listing or pool admin can call functions marked by this modifier."},"id":23712,"name":"onlyAssetListingOrPoolAdmins","nameLocation":"1915:28:95","nodeType":"ModifierDefinition","parameters":{"id":23706,"nodeType":"ParameterList","parameters":[],"src":"1943:2:95"},"src":"1906:89:95","virtual":false,"visibility":"internal"},{"body":{"id":23719,"nodeType":"Block","src":"2121:41:95","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":23715,"name":"_onlyRiskOrPoolAdmins","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25277,"src":"2127:21:95","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":23716,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2127:23:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23717,"nodeType":"ExpressionStatement","src":"2127:23:95"},{"id":23718,"nodeType":"PlaceholderStatement","src":"2156:1:95"}]},"documentation":{"id":23713,"nodeType":"StructuredDocumentation","src":"1999:87:95","text":" @dev Only risk or pool admin can call functions marked by this modifier."},"id":23720,"name":"onlyRiskOrPoolAdmins","nameLocation":"2098:20:95","nodeType":"ModifierDefinition","parameters":{"id":23714,"nodeType":"ParameterList","parameters":[],"src":"2118:2:95"},"src":"2089:73:95","virtual":false,"visibility":"internal"},{"constant":true,"functionSelector":"7af635a6","id":23723,"mutability":"constant","name":"CONFIGURATOR_REVISION","nameLocation":"2190:21:95","nodeType":"VariableDeclaration","scope":25278,"src":"2166:51:95","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23721,"name":"uint256","nodeType":"ElementaryTypeName","src":"2166:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307831","id":23722,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2214:3:95","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x1"},"visibility":"public"},{"baseFunctions":[10553],"body":{"id":23732,"nodeType":"Block","src":"2335:39:95","statements":[{"expression":{"id":23730,"name":"CONFIGURATOR_REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23723,"src":"2348:21:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":23729,"id":23731,"nodeType":"Return","src":"2341:28:95"}]},"documentation":{"id":23724,"nodeType":"StructuredDocumentation","src":"2222:38:95","text":"@inheritdoc VersionedInitializable"},"id":23733,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"2272:11:95","nodeType":"FunctionDefinition","overrides":{"id":23726,"nodeType":"OverrideSpecifier","overrides":[],"src":"2308:8:95"},"parameters":{"id":23725,"nodeType":"ParameterList","parameters":[],"src":"2283:2:95"},"returnParameters":{"id":23729,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23728,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23733,"src":"2326:7:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23727,"name":"uint256","nodeType":"ElementaryTypeName","src":"2326:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2325:9:95"},"scope":25278,"src":"2263:111:95","stateMutability":"pure","virtual":true,"visibility":"internal"},{"body":{"id":23753,"nodeType":"Block","src":"2450:89:95","statements":[{"expression":{"id":23743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23741,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23677,"src":"2456:18:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":23742,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23736,"src":"2477:8:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"src":"2456:29:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":23744,"nodeType":"ExpressionStatement","src":"2456:29:95"},{"expression":{"id":23751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23745,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"2491:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23747,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23677,"src":"2505:18:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":23748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"2505:26:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":23749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2505:28:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23746,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"2499:5:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":23750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2499:35:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"src":"2491:43:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":23752,"nodeType":"ExpressionStatement","src":"2491:43:95"}]},"functionSelector":"c4d66de8","id":23754,"implemented":true,"kind":"function","modifiers":[{"id":23739,"kind":"modifierInvocation","modifierName":{"id":23738,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":10547,"src":"2438:11:95"},"nodeType":"ModifierInvocation","src":"2438:11:95"}],"name":"initialize","nameLocation":"2387:10:95","nodeType":"FunctionDefinition","parameters":{"id":23737,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23736,"mutability":"mutable","name":"provider","nameLocation":"2421:8:95","nodeType":"VariableDeclaration","scope":23754,"src":"2398:31:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":23735,"nodeType":"UserDefinedTypeName","pathNode":{"id":23734,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"2398:22:95"},"referencedDeclaration":5069,"src":"2398:22:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"2397:33:95"},"returnParameters":{"id":23740,"nodeType":"ParameterList","parameters":[],"src":"2450:0:95"},"scope":25278,"src":"2378:161:95","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[5359],"body":{"id":23792,"nodeType":"Block","src":"2714:156:95","statements":[{"assignments":[23767],"declarations":[{"constant":false,"id":23767,"mutability":"mutable","name":"cachedPool","nameLocation":"2726:10:95","nodeType":"VariableDeclaration","scope":23792,"src":"2720:16:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":23766,"nodeType":"UserDefinedTypeName","pathNode":{"id":23765,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"2720:5:95"},"referencedDeclaration":4860,"src":"2720:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"}],"id":23769,"initialValue":{"id":23768,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"2739:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"nodeType":"VariableDeclarationStatement","src":"2720:24:95"},{"body":{"id":23790,"nodeType":"Block","src":"2793:73:95","statements":[{"expression":{"arguments":[{"id":23784,"name":"cachedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23767,"src":"2838:10:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},{"baseExpression":{"id":23785,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23759,"src":"2850:5:95","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_InitReserveInput_$21252_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata[] calldata"}},"id":23787,"indexExpression":{"id":23786,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23771,"src":"2856:1:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2850:8:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},{"typeIdentifier":"t_struct$_InitReserveInput_$21252_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata"}],"expression":{"id":23781,"name":"ConfiguratorLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14409,"src":"2801:17:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ConfiguratorLogic_$14409_$","typeString":"type(library ConfiguratorLogic)"}},"id":23783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeInitReserve","nodeType":"MemberAccess","referencedDeclaration":14133,"src":"2801:36:95","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_contract$_IPool_$4860_$_t_struct$_InitReserveInput_$21252_memory_ptr_$returns$__$","typeString":"function (contract IPool,struct ConfiguratorInputTypes.InitReserveInput memory)"}},"id":23788,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2801:58:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23789,"nodeType":"ExpressionStatement","src":"2801:58:95"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23774,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23771,"src":"2770:1:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":23775,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23759,"src":"2774:5:95","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_InitReserveInput_$21252_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput calldata[] calldata"}},"id":23776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"2774:12:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2770:16:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23791,"initializationExpression":{"assignments":[23771],"declarations":[{"constant":false,"id":23771,"mutability":"mutable","name":"i","nameLocation":"2763:1:95","nodeType":"VariableDeclaration","scope":23791,"src":"2755:9:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23770,"name":"uint256","nodeType":"ElementaryTypeName","src":"2755:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23773,"initialValue":{"hexValue":"30","id":23772,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2767:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2755:13:95"},"loopExpression":{"expression":{"id":23779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2788:3:95","subExpression":{"id":23778,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23771,"src":"2788:1:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23780,"nodeType":"ExpressionStatement","src":"2788:3:95"},"nodeType":"ForStatement","src":"2750:116:95"}]},"documentation":{"id":23755,"nodeType":"StructuredDocumentation","src":"2543:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"02fb45e6","id":23793,"implemented":true,"kind":"function","modifiers":[{"id":23763,"kind":"modifierInvocation","modifierName":{"id":23762,"name":"onlyAssetListingOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":23712,"src":"2685:28:95"},"nodeType":"ModifierInvocation","src":"2685:28:95"}],"name":"initReserves","nameLocation":"2588:12:95","nodeType":"FunctionDefinition","overrides":{"id":23761,"nodeType":"OverrideSpecifier","overrides":[],"src":"2676:8:95"},"parameters":{"id":23760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23759,"mutability":"mutable","name":"input","nameLocation":"2657:5:95","nodeType":"VariableDeclaration","scope":23793,"src":"2606:56:95","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_InitReserveInput_$21252_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput[]"},"typeName":{"baseType":{"id":23757,"nodeType":"UserDefinedTypeName","pathNode":{"id":23756,"name":"ConfiguratorInputTypes.InitReserveInput","nodeType":"IdentifierPath","referencedDeclaration":21252,"src":"2606:39:95"},"referencedDeclaration":21252,"src":"2606:39:95","typeDescriptions":{"typeIdentifier":"t_struct$_InitReserveInput_$21252_storage_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput"}},"id":23758,"nodeType":"ArrayTypeName","src":"2606:41:95","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_InitReserveInput_$21252_storage_$dyn_storage_ptr","typeString":"struct ConfiguratorInputTypes.InitReserveInput[]"}},"visibility":"internal"}],"src":"2600:66:95"},"returnParameters":{"id":23764,"nodeType":"ParameterList","parameters":[],"src":"2714:0:95"},"scope":25278,"src":"2579:291:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5532],"body":{"id":23812,"nodeType":"Block","src":"2978:67:95","statements":[{"expression":{"arguments":[{"id":23805,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23796,"src":"3002:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":23802,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"2984:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":23804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"dropReserve","nodeType":"MemberAccess","referencedDeclaration":4650,"src":"2984:17:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":23806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2984:24:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23807,"nodeType":"ExpressionStatement","src":"2984:24:95"},{"eventCall":{"arguments":[{"id":23809,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23796,"src":"3034:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23808,"name":"ReserveDropped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5200,"src":"3019:14:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":23810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3019:21:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23811,"nodeType":"EmitStatement","src":"3014:26:95"}]},"documentation":{"id":23794,"nodeType":"StructuredDocumentation","src":"2874:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"63c9b860","id":23813,"implemented":true,"kind":"function","modifiers":[{"id":23800,"kind":"modifierInvocation","modifierName":{"id":23799,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":23688,"src":"2964:13:95"},"nodeType":"ModifierInvocation","src":"2964:13:95"}],"name":"dropReserve","nameLocation":"2919:11:95","nodeType":"FunctionDefinition","overrides":{"id":23798,"nodeType":"OverrideSpecifier","overrides":[],"src":"2955:8:95"},"parameters":{"id":23797,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23796,"mutability":"mutable","name":"asset","nameLocation":"2939:5:95","nodeType":"VariableDeclaration","scope":23813,"src":"2931:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23795,"name":"address","nodeType":"ElementaryTypeName","src":"2931:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2930:15:95"},"returnParameters":{"id":23801,"nodeType":"ParameterList","parameters":[],"src":"2978:0:95"},"scope":25278,"src":"2910:135:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5366],"body":{"id":23830,"nodeType":"Block","src":"3204:62:95","statements":[{"expression":{"arguments":[{"id":23826,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"3248:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},{"id":23827,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23817,"src":"3255:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$21267_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},{"typeIdentifier":"t_struct$_UpdateATokenInput_$21267_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput calldata"}],"expression":{"id":23823,"name":"ConfiguratorLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14409,"src":"3210:17:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ConfiguratorLogic_$14409_$","typeString":"type(library ConfiguratorLogic)"}},"id":23825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeUpdateAToken","nodeType":"MemberAccess","referencedDeclaration":14205,"src":"3210:37:95","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_contract$_IPool_$4860_$_t_struct$_UpdateATokenInput_$21267_memory_ptr_$returns$__$","typeString":"function (contract IPool,struct ConfiguratorInputTypes.UpdateATokenInput memory)"}},"id":23828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3210:51:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23829,"nodeType":"ExpressionStatement","src":"3210:51:95"}]},"documentation":{"id":23814,"nodeType":"StructuredDocumentation","src":"3049:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"bb01c37c","id":23831,"implemented":true,"kind":"function","modifiers":[{"id":23821,"kind":"modifierInvocation","modifierName":{"id":23820,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":23688,"src":"3190:13:95"},"nodeType":"ModifierInvocation","src":"3190:13:95"}],"name":"updateAToken","nameLocation":"3094:12:95","nodeType":"FunctionDefinition","overrides":{"id":23819,"nodeType":"OverrideSpecifier","overrides":[],"src":"3181:8:95"},"parameters":{"id":23818,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23817,"mutability":"mutable","name":"input","nameLocation":"3162:5:95","nodeType":"VariableDeclaration","scope":23831,"src":"3112:55:95","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$21267_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput"},"typeName":{"id":23816,"nodeType":"UserDefinedTypeName","pathNode":{"id":23815,"name":"ConfiguratorInputTypes.UpdateATokenInput","nodeType":"IdentifierPath","referencedDeclaration":21267,"src":"3112:40:95"},"referencedDeclaration":21267,"src":"3112:40:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateATokenInput_$21267_storage_ptr","typeString":"struct ConfiguratorInputTypes.UpdateATokenInput"}},"visibility":"internal"}],"src":"3106:65:95"},"returnParameters":{"id":23822,"nodeType":"ParameterList","parameters":[],"src":"3204:0:95"},"scope":25278,"src":"3085:181:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5373],"body":{"id":23848,"nodeType":"Block","src":"3437:71:95","statements":[{"expression":{"arguments":[{"id":23844,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"3490:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},{"id":23845,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23835,"src":"3497:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}],"expression":{"id":23841,"name":"ConfiguratorLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14409,"src":"3443:17:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ConfiguratorLogic_$14409_$","typeString":"type(library ConfiguratorLogic)"}},"id":23843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeUpdateStableDebtToken","nodeType":"MemberAccess","referencedDeclaration":14275,"src":"3443:46:95","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_contract$_IPool_$4860_$_t_struct$_UpdateDebtTokenInput_$21280_memory_ptr_$returns$__$","typeString":"function (contract IPool,struct ConfiguratorInputTypes.UpdateDebtTokenInput memory)"}},"id":23846,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3443:60:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23847,"nodeType":"ExpressionStatement","src":"3443:60:95"}]},"documentation":{"id":23832,"nodeType":"StructuredDocumentation","src":"3270:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"7626cde3","id":23849,"implemented":true,"kind":"function","modifiers":[{"id":23839,"kind":"modifierInvocation","modifierName":{"id":23838,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":23688,"src":"3423:13:95"},"nodeType":"ModifierInvocation","src":"3423:13:95"}],"name":"updateStableDebtToken","nameLocation":"3315:21:95","nodeType":"FunctionDefinition","overrides":{"id":23837,"nodeType":"OverrideSpecifier","overrides":[],"src":"3414:8:95"},"parameters":{"id":23836,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23835,"mutability":"mutable","name":"input","nameLocation":"3395:5:95","nodeType":"VariableDeclaration","scope":23849,"src":"3342:58:95","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput"},"typeName":{"id":23834,"nodeType":"UserDefinedTypeName","pathNode":{"id":23833,"name":"ConfiguratorInputTypes.UpdateDebtTokenInput","nodeType":"IdentifierPath","referencedDeclaration":21280,"src":"3342:43:95"},"referencedDeclaration":21280,"src":"3342:43:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_storage_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput"}},"visibility":"internal"}],"src":"3336:68:95"},"returnParameters":{"id":23840,"nodeType":"ParameterList","parameters":[],"src":"3437:0:95"},"scope":25278,"src":"3306:202:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5380],"body":{"id":23866,"nodeType":"Block","src":"3681:73:95","statements":[{"expression":{"arguments":[{"id":23862,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"3736:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},{"id":23863,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23853,"src":"3743:5:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput calldata"}],"expression":{"id":23859,"name":"ConfiguratorLogic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14409,"src":"3687:17:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ConfiguratorLogic_$14409_$","typeString":"type(library ConfiguratorLogic)"}},"id":23861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"executeUpdateVariableDebtToken","nodeType":"MemberAccess","referencedDeclaration":14345,"src":"3687:48:95","typeDescriptions":{"typeIdentifier":"t_function_delegatecall_nonpayable$_t_contract$_IPool_$4860_$_t_struct$_UpdateDebtTokenInput_$21280_memory_ptr_$returns$__$","typeString":"function (contract IPool,struct ConfiguratorInputTypes.UpdateDebtTokenInput memory)"}},"id":23864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3687:62:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23865,"nodeType":"ExpressionStatement","src":"3687:62:95"}]},"documentation":{"id":23850,"nodeType":"StructuredDocumentation","src":"3512:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"ad4e6432","id":23867,"implemented":true,"kind":"function","modifiers":[{"id":23857,"kind":"modifierInvocation","modifierName":{"id":23856,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":23688,"src":"3667:13:95"},"nodeType":"ModifierInvocation","src":"3667:13:95"}],"name":"updateVariableDebtToken","nameLocation":"3557:23:95","nodeType":"FunctionDefinition","overrides":{"id":23855,"nodeType":"OverrideSpecifier","overrides":[],"src":"3658:8:95"},"parameters":{"id":23854,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23853,"mutability":"mutable","name":"input","nameLocation":"3639:5:95","nodeType":"VariableDeclaration","scope":23867,"src":"3586:58:95","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput"},"typeName":{"id":23852,"nodeType":"UserDefinedTypeName","pathNode":{"id":23851,"name":"ConfiguratorInputTypes.UpdateDebtTokenInput","nodeType":"IdentifierPath","referencedDeclaration":21280,"src":"3586:43:95"},"referencedDeclaration":21280,"src":"3586:43:95","typeDescriptions":{"typeIdentifier":"t_struct$_UpdateDebtTokenInput_$21280_storage_ptr","typeString":"struct ConfiguratorInputTypes.UpdateDebtTokenInput"}},"visibility":"internal"}],"src":"3580:68:95"},"returnParameters":{"id":23858,"nodeType":"ParameterList","parameters":[],"src":"3681:0:95"},"scope":25278,"src":"3548:206:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5388],"body":{"id":23919,"nodeType":"Block","src":"3891:360:95","statements":[{"assignments":[23882],"declarations":[{"constant":false,"id":23882,"mutability":"mutable","name":"currentConfig","nameLocation":"3938:13:95","nodeType":"VariableDeclaration","scope":23919,"src":"3897:54:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":23881,"nodeType":"UserDefinedTypeName","pathNode":{"id":23880,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"3897:33:95"},"referencedDeclaration":21318,"src":"3897:33:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":23887,"initialValue":{"arguments":[{"id":23885,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23870,"src":"3977:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":23883,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"3954:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":23884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"3954:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":23886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3954:29:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"3897:86:95"},{"condition":{"id":23889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3993:8:95","subExpression":{"id":23888,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23872,"src":"3994:7:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23900,"nodeType":"IfStatement","src":"3989:117:95","trueBody":{"id":23899,"nodeType":"Block","src":"4003:103:95","statements":[{"expression":{"arguments":[{"id":23894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4019:46:95","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23891,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23882,"src":"4020:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":23892,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getStableRateBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":11283,"src":"4020:43:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":23893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4020:45:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23895,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"4067:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":23896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"STABLE_BORROWING_ENABLED","nodeType":"MemberAccess","referencedDeclaration":12632,"src":"4067:31:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23890,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4011:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4011:88:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23898,"nodeType":"ExpressionStatement","src":"4011:88:95"}]}},{"expression":{"arguments":[{"id":23904,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23872,"src":"4145:7:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":23901,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23882,"src":"4111:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":23903,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":11214,"src":"4111:33:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":23905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4111:42:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23906,"nodeType":"ExpressionStatement","src":"4111:42:95"},{"expression":{"arguments":[{"id":23910,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23870,"src":"4182:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23911,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23882,"src":"4189:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":23907,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"4159:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":23909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4667,"src":"4159:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":23912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4159:44:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23913,"nodeType":"ExpressionStatement","src":"4159:44:95"},{"eventCall":{"arguments":[{"id":23915,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23870,"src":"4231:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23916,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23872,"src":"4238:7:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23914,"name":"ReserveBorrowing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5149,"src":"4214:16:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":23917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4214:32:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23918,"nodeType":"EmitStatement","src":"4209:37:95"}]},"documentation":{"id":23868,"nodeType":"StructuredDocumentation","src":"3758:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"682cf264","id":23920,"implemented":true,"kind":"function","modifiers":[{"id":23876,"kind":"modifierInvocation","modifierName":{"id":23875,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":23720,"src":"3870:20:95"},"nodeType":"ModifierInvocation","src":"3870:20:95"}],"name":"setReserveBorrowing","nameLocation":"3803:19:95","nodeType":"FunctionDefinition","overrides":{"id":23874,"nodeType":"OverrideSpecifier","overrides":[],"src":"3861:8:95"},"parameters":{"id":23873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23870,"mutability":"mutable","name":"asset","nameLocation":"3831:5:95","nodeType":"VariableDeclaration","scope":23920,"src":"3823:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23869,"name":"address","nodeType":"ElementaryTypeName","src":"3823:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23872,"mutability":"mutable","name":"enabled","nameLocation":"3843:7:95","nodeType":"VariableDeclaration","scope":23920,"src":"3838:12:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23871,"name":"bool","nodeType":"ElementaryTypeName","src":"3838:4:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3822:29:95"},"returnParameters":{"id":23877,"nodeType":"ParameterList","parameters":[],"src":"3891:0:95"},"scope":25278,"src":"3794:457:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5400],"body":{"id":24024,"nodeType":"Block","src":"4472:1581:95","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23936,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23925,"src":"4675:3:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":23937,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23927,"src":"4682:20:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4675:27:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23939,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"4704:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":23940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_RESERVE_PARAMS","nodeType":"MemberAccess","referencedDeclaration":12431,"src":"4704:29:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23935,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4667:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23941,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4667:67:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23942,"nodeType":"ExpressionStatement","src":"4667:67:95"},{"assignments":[23947],"declarations":[{"constant":false,"id":23947,"mutability":"mutable","name":"currentConfig","nameLocation":"4782:13:95","nodeType":"VariableDeclaration","scope":24024,"src":"4741:54:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":23946,"nodeType":"UserDefinedTypeName","pathNode":{"id":23945,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"4741:33:95"},"referencedDeclaration":21318,"src":"4741:33:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":23952,"initialValue":{"arguments":[{"id":23950,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23923,"src":"4821:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":23948,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"4798:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":23949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"4798:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":23951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4798:29:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"4741:86:95"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23953,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23927,"src":"4838:20:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":23954,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4862:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4838:25:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":23990,"nodeType":"Block","src":"5471:279:95","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23979,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23929,"src":"5487:16:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":23980,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5507:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5487:21:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23982,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"5510:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":23983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_RESERVE_PARAMS","nodeType":"MemberAccess","referencedDeclaration":12431,"src":"5510:29:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23978,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5479:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23984,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5479:61:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23985,"nodeType":"ExpressionStatement","src":"5479:61:95"},{"expression":{"arguments":[{"id":23987,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23923,"src":"5737:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23986,"name":"_checkNoSuppliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25119,"src":"5719:17:95","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":23988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5719:24:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23989,"nodeType":"ExpressionStatement","src":"5719:24:95"}]},"id":23991,"nodeType":"IfStatement","src":"4834:916:95","trueBody":{"id":23977,"nodeType":"Block","src":"4865:600:95","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23957,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23929,"src":"5029:16:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":23958,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21132,"src":"5048:14:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PercentageMath_$21132_$","typeString":"type(library PercentageMath)"}},"id":23959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PERCENTAGE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":21104,"src":"5048:32:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5029:51:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23961,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"5082:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":23962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_RESERVE_PARAMS","nodeType":"MemberAccess","referencedDeclaration":12431,"src":"5082:29:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23956,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5021:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23963,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5021:91:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23964,"nodeType":"ExpressionStatement","src":"5021:91:95"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":23968,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23929,"src":"5358:16:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":23966,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23927,"src":"5326:20:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":21119,"src":"5326:31:95","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":23969,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5326:49:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":23970,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21132,"src":"5379:14:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PercentageMath_$21132_$","typeString":"type(library PercentageMath)"}},"id":23971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PERCENTAGE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":21104,"src":"5379:32:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5326:85:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":23973,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"5421:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":23974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_RESERVE_PARAMS","nodeType":"MemberAccess","referencedDeclaration":12431,"src":"5421:29:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":23965,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5309:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5309:149:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23976,"nodeType":"ExpressionStatement","src":"5309:149:95"}]}},{"expression":{"arguments":[{"id":23995,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23925,"src":"5777:3:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":23992,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23947,"src":"5756:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":23994,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setLtv","nodeType":"MemberAccess","referencedDeclaration":10761,"src":"5756:20:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":23996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5756:25:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23997,"nodeType":"ExpressionStatement","src":"5756:25:95"},{"expression":{"arguments":[{"id":24001,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23927,"src":"5825:20:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":23998,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23947,"src":"5787:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24000,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setLiquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":10810,"src":"5787:37:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":24002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5787:59:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24003,"nodeType":"ExpressionStatement","src":"5787:59:95"},{"expression":{"arguments":[{"id":24007,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23929,"src":"5886:16:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24004,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23947,"src":"5852:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24006,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setLiquidationBonus","nodeType":"MemberAccess","referencedDeclaration":10862,"src":"5852:33:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":24008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5852:51:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24009,"nodeType":"ExpressionStatement","src":"5852:51:95"},{"expression":{"arguments":[{"id":24013,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23923,"src":"5933:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24014,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23947,"src":"5940:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":24010,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"5910:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4667,"src":"5910:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":24015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5910:44:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24016,"nodeType":"ExpressionStatement","src":"5910:44:95"},{"eventCall":{"arguments":[{"id":24018,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23923,"src":"5997:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24019,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23925,"src":"6004:3:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24020,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23927,"src":"6009:20:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24021,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23929,"src":"6031:16:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24017,"name":"CollateralConfigurationChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5167,"src":"5966:30:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256,uint256)"}},"id":24022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5966:82:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24023,"nodeType":"EmitStatement","src":"5961:87:95"}]},"documentation":{"id":23921,"nodeType":"StructuredDocumentation","src":"4255:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"7c4e560b","id":24025,"implemented":true,"kind":"function","modifiers":[{"id":23933,"kind":"modifierInvocation","modifierName":{"id":23932,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":23720,"src":"4451:20:95"},"nodeType":"ModifierInvocation","src":"4451:20:95"}],"name":"configureReserveAsCollateral","nameLocation":"4300:28:95","nodeType":"FunctionDefinition","overrides":{"id":23931,"nodeType":"OverrideSpecifier","overrides":[],"src":"4442:8:95"},"parameters":{"id":23930,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23923,"mutability":"mutable","name":"asset","nameLocation":"4342:5:95","nodeType":"VariableDeclaration","scope":24025,"src":"4334:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23922,"name":"address","nodeType":"ElementaryTypeName","src":"4334:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23925,"mutability":"mutable","name":"ltv","nameLocation":"4361:3:95","nodeType":"VariableDeclaration","scope":24025,"src":"4353:11:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23924,"name":"uint256","nodeType":"ElementaryTypeName","src":"4353:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23927,"mutability":"mutable","name":"liquidationThreshold","nameLocation":"4378:20:95","nodeType":"VariableDeclaration","scope":24025,"src":"4370:28:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23926,"name":"uint256","nodeType":"ElementaryTypeName","src":"4370:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23929,"mutability":"mutable","name":"liquidationBonus","nameLocation":"4412:16:95","nodeType":"VariableDeclaration","scope":24025,"src":"4404:24:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23928,"name":"uint256","nodeType":"ElementaryTypeName","src":"4404:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4328:104:95"},"returnParameters":{"id":23934,"nodeType":"ParameterList","parameters":[],"src":"4472:0:95"},"scope":25278,"src":"4291:1762:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5408],"body":{"id":24075,"nodeType":"Block","src":"6212:365:95","statements":[{"assignments":[24040],"declarations":[{"constant":false,"id":24040,"mutability":"mutable","name":"currentConfig","nameLocation":"6259:13:95","nodeType":"VariableDeclaration","scope":24075,"src":"6218:54:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":24039,"nodeType":"UserDefinedTypeName","pathNode":{"id":24038,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"6218:33:95"},"referencedDeclaration":21318,"src":"6218:33:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":24045,"initialValue":{"arguments":[{"id":24043,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24028,"src":"6298:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":24041,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"6275:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"6275:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":24044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6275:29:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"6218:86:95"},{"condition":{"id":24046,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24030,"src":"6314:7:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24056,"nodeType":"IfStatement","src":"6310:102:95","trueBody":{"id":24055,"nodeType":"Block","src":"6323:89:95","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24048,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24040,"src":"6339:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24049,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":11233,"src":"6339:33:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":24050,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6339:35:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":24051,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"6376:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":24052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"BORROWING_NOT_ENABLED","nodeType":"MemberAccess","referencedDeclaration":12461,"src":"6376:28:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":24047,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6331:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":24053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6331:74:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24054,"nodeType":"ExpressionStatement","src":"6331:74:95"}]}},{"expression":{"arguments":[{"id":24060,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24030,"src":"6461:7:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":24057,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24040,"src":"6417:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24059,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setStableRateBorrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":11264,"src":"6417:43:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":24061,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6417:52:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24062,"nodeType":"ExpressionStatement","src":"6417:52:95"},{"expression":{"arguments":[{"id":24066,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24028,"src":"6498:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24067,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24040,"src":"6505:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":24063,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"6475:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4667,"src":"6475:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":24068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6475:44:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24069,"nodeType":"ExpressionStatement","src":"6475:44:95"},{"eventCall":{"arguments":[{"id":24071,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24028,"src":"6557:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24072,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24030,"src":"6564:7:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":24070,"name":"ReserveStableRateBorrowing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5174,"src":"6530:26:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":24073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6530:42:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24074,"nodeType":"EmitStatement","src":"6525:47:95"}]},"documentation":{"id":24026,"nodeType":"StructuredDocumentation","src":"6057:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"8a751a60","id":24076,"implemented":true,"kind":"function","modifiers":[{"id":24034,"kind":"modifierInvocation","modifierName":{"id":24033,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":23720,"src":"6191:20:95"},"nodeType":"ModifierInvocation","src":"6191:20:95"}],"name":"setReserveStableRateBorrowing","nameLocation":"6102:29:95","nodeType":"FunctionDefinition","overrides":{"id":24032,"nodeType":"OverrideSpecifier","overrides":[],"src":"6182:8:95"},"parameters":{"id":24031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24028,"mutability":"mutable","name":"asset","nameLocation":"6145:5:95","nodeType":"VariableDeclaration","scope":24076,"src":"6137:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24027,"name":"address","nodeType":"ElementaryTypeName","src":"6137:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24030,"mutability":"mutable","name":"enabled","nameLocation":"6161:7:95","nodeType":"VariableDeclaration","scope":24076,"src":"6156:12:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24029,"name":"bool","nodeType":"ElementaryTypeName","src":"6156:4:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6131:41:95"},"returnParameters":{"id":24035,"nodeType":"ParameterList","parameters":[],"src":"6212:0:95"},"scope":25278,"src":"6093:484:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5416],"body":{"id":24115,"nodeType":"Block","src":"6729:242:95","statements":[{"assignments":[24091],"declarations":[{"constant":false,"id":24091,"mutability":"mutable","name":"currentConfig","nameLocation":"6776:13:95","nodeType":"VariableDeclaration","scope":24115,"src":"6735:54:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":24090,"nodeType":"UserDefinedTypeName","pathNode":{"id":24089,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"6735:33:95"},"referencedDeclaration":21318,"src":"6735:33:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":24096,"initialValue":{"arguments":[{"id":24094,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24079,"src":"6815:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":24092,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"6792:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"6792:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":24095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6792:29:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"6735:86:95"},{"expression":{"arguments":[{"id":24100,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24081,"src":"6862:7:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":24097,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24091,"src":"6828:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24099,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setFlashLoanEnabled","nodeType":"MemberAccess","referencedDeclaration":11678,"src":"6828:33:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":24101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6828:42:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24102,"nodeType":"ExpressionStatement","src":"6828:42:95"},{"expression":{"arguments":[{"id":24106,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24079,"src":"6899:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24107,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24091,"src":"6906:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":24103,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"6876:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4667,"src":"6876:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":24108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6876:44:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24109,"nodeType":"ExpressionStatement","src":"6876:44:95"},{"eventCall":{"arguments":[{"id":24111,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24079,"src":"6951:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24112,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24081,"src":"6958:7:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":24110,"name":"ReserveFlashLoaning","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5156,"src":"6931:19:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":24113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6931:35:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24114,"nodeType":"EmitStatement","src":"6926:40:95"}]},"documentation":{"id":24077,"nodeType":"StructuredDocumentation","src":"6581:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"f213ef0e","id":24116,"implemented":true,"kind":"function","modifiers":[{"id":24085,"kind":"modifierInvocation","modifierName":{"id":24084,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":23720,"src":"6708:20:95"},"nodeType":"ModifierInvocation","src":"6708:20:95"}],"name":"setReserveFlashLoaning","nameLocation":"6626:22:95","nodeType":"FunctionDefinition","overrides":{"id":24083,"nodeType":"OverrideSpecifier","overrides":[],"src":"6699:8:95"},"parameters":{"id":24082,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24079,"mutability":"mutable","name":"asset","nameLocation":"6662:5:95","nodeType":"VariableDeclaration","scope":24116,"src":"6654:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24078,"name":"address","nodeType":"ElementaryTypeName","src":"6654:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24081,"mutability":"mutable","name":"enabled","nameLocation":"6678:7:95","nodeType":"VariableDeclaration","scope":24116,"src":"6673:12:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24080,"name":"bool","nodeType":"ElementaryTypeName","src":"6673:4:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6648:41:95"},"returnParameters":{"id":24086,"nodeType":"ParameterList","parameters":[],"src":"6729:0:95"},"scope":25278,"src":"6617:354:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5424],"body":{"id":24162,"nodeType":"Block","src":"7097:266:95","statements":[{"condition":{"id":24128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7107:7:95","subExpression":{"id":24127,"name":"active","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24121,"src":"7108:6:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24133,"nodeType":"IfStatement","src":"7103:37:95","trueBody":{"expression":{"arguments":[{"id":24130,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24119,"src":"7134:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24129,"name":"_checkNoSuppliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25119,"src":"7116:17:95","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":24131,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7116:24:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24132,"nodeType":"ExpressionStatement","src":"7116:24:95"}},{"assignments":[24138],"declarations":[{"constant":false,"id":24138,"mutability":"mutable","name":"currentConfig","nameLocation":"7187:13:95","nodeType":"VariableDeclaration","scope":24162,"src":"7146:54:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":24137,"nodeType":"UserDefinedTypeName","pathNode":{"id":24136,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"7146:33:95"},"referencedDeclaration":21318,"src":"7146:33:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":24143,"initialValue":{"arguments":[{"id":24141,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24119,"src":"7226:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":24139,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"7203:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"7203:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":24142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7203:29:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"7146:86:95"},{"expression":{"arguments":[{"id":24147,"name":"active","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24121,"src":"7262:6:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":24144,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24138,"src":"7238:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24146,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setActive","nodeType":"MemberAccess","referencedDeclaration":10964,"src":"7238:23:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":24148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7238:31:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24149,"nodeType":"ExpressionStatement","src":"7238:31:95"},{"expression":{"arguments":[{"id":24153,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24119,"src":"7298:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24154,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24138,"src":"7305:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":24150,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"7275:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4667,"src":"7275:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":24155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7275:44:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24156,"nodeType":"ExpressionStatement","src":"7275:44:95"},{"eventCall":{"arguments":[{"id":24158,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24119,"src":"7344:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24159,"name":"active","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24121,"src":"7351:6:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":24157,"name":"ReserveActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5181,"src":"7330:13:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":24160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7330:28:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24161,"nodeType":"EmitStatement","src":"7325:33:95"}]},"documentation":{"id":24117,"nodeType":"StructuredDocumentation","src":"6975:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"b736aaeb","id":24163,"implemented":true,"kind":"function","modifiers":[{"id":24125,"kind":"modifierInvocation","modifierName":{"id":24124,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":23688,"src":"7083:13:95"},"nodeType":"ModifierInvocation","src":"7083:13:95"}],"name":"setReserveActive","nameLocation":"7020:16:95","nodeType":"FunctionDefinition","overrides":{"id":24123,"nodeType":"OverrideSpecifier","overrides":[],"src":"7074:8:95"},"parameters":{"id":24122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24119,"mutability":"mutable","name":"asset","nameLocation":"7045:5:95","nodeType":"VariableDeclaration","scope":24163,"src":"7037:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24118,"name":"address","nodeType":"ElementaryTypeName","src":"7037:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24121,"mutability":"mutable","name":"active","nameLocation":"7057:6:95","nodeType":"VariableDeclaration","scope":24163,"src":"7052:11:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24120,"name":"bool","nodeType":"ElementaryTypeName","src":"7052:4:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7036:28:95"},"returnParameters":{"id":24126,"nodeType":"ParameterList","parameters":[],"src":"7097:0:95"},"scope":25278,"src":"7011:352:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5432],"body":{"id":24202,"nodeType":"Block","src":"7496:223:95","statements":[{"assignments":[24178],"declarations":[{"constant":false,"id":24178,"mutability":"mutable","name":"currentConfig","nameLocation":"7543:13:95","nodeType":"VariableDeclaration","scope":24202,"src":"7502:54:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":24177,"nodeType":"UserDefinedTypeName","pathNode":{"id":24176,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"7502:33:95"},"referencedDeclaration":21318,"src":"7502:33:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":24183,"initialValue":{"arguments":[{"id":24181,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24166,"src":"7582:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":24179,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"7559:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"7559:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":24182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7559:29:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"7502:86:95"},{"expression":{"arguments":[{"id":24187,"name":"freeze","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24168,"src":"7618:6:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":24184,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24178,"src":"7594:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24186,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setFrozen","nodeType":"MemberAccess","referencedDeclaration":11014,"src":"7594:23:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":24188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7594:31:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24189,"nodeType":"ExpressionStatement","src":"7594:31:95"},{"expression":{"arguments":[{"id":24193,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24166,"src":"7654:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24194,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24178,"src":"7661:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":24190,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"7631:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4667,"src":"7631:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":24195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7631:44:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24196,"nodeType":"ExpressionStatement","src":"7631:44:95"},{"eventCall":{"arguments":[{"id":24198,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24166,"src":"7700:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24199,"name":"freeze","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24168,"src":"7707:6:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":24197,"name":"ReserveFrozen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5188,"src":"7686:13:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":24200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7686:28:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24201,"nodeType":"EmitStatement","src":"7681:33:95"}]},"documentation":{"id":24164,"nodeType":"StructuredDocumentation","src":"7367:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"96e957c4","id":24203,"implemented":true,"kind":"function","modifiers":[{"id":24172,"kind":"modifierInvocation","modifierName":{"id":24171,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":23720,"src":"7475:20:95"},"nodeType":"ModifierInvocation","src":"7475:20:95"}],"name":"setReserveFreeze","nameLocation":"7412:16:95","nodeType":"FunctionDefinition","overrides":{"id":24170,"nodeType":"OverrideSpecifier","overrides":[],"src":"7466:8:95"},"parameters":{"id":24169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24166,"mutability":"mutable","name":"asset","nameLocation":"7437:5:95","nodeType":"VariableDeclaration","scope":24203,"src":"7429:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24165,"name":"address","nodeType":"ElementaryTypeName","src":"7429:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24168,"mutability":"mutable","name":"freeze","nameLocation":"7449:6:95","nodeType":"VariableDeclaration","scope":24203,"src":"7444:11:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24167,"name":"bool","nodeType":"ElementaryTypeName","src":"7444:4:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7428:28:95"},"returnParameters":{"id":24173,"nodeType":"ParameterList","parameters":[],"src":"7496:0:95"},"scope":25278,"src":"7403:316:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5440],"body":{"id":24242,"nodeType":"Block","src":"7876:261:95","statements":[{"assignments":[24218],"declarations":[{"constant":false,"id":24218,"mutability":"mutable","name":"currentConfig","nameLocation":"7923:13:95","nodeType":"VariableDeclaration","scope":24242,"src":"7882:54:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":24217,"nodeType":"UserDefinedTypeName","pathNode":{"id":24216,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"7882:33:95"},"referencedDeclaration":21318,"src":"7882:33:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":24223,"initialValue":{"arguments":[{"id":24221,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24206,"src":"7962:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":24219,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"7939:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"7939:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":24222,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7939:29:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"7882:86:95"},{"expression":{"arguments":[{"id":24227,"name":"borrowable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24208,"src":"8013:10:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":24224,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24218,"src":"7974:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24226,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setBorrowableInIsolation","nodeType":"MemberAccess","referencedDeclaration":11114,"src":"7974:38:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":24228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7974:50:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24229,"nodeType":"ExpressionStatement","src":"7974:50:95"},{"expression":{"arguments":[{"id":24233,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24206,"src":"8053:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24234,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24218,"src":"8060:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":24230,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"8030:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4667,"src":"8030:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":24235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8030:44:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24236,"nodeType":"ExpressionStatement","src":"8030:44:95"},{"eventCall":{"arguments":[{"id":24238,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24206,"src":"8114:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24239,"name":"borrowable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24208,"src":"8121:10:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":24237,"name":"BorrowableInIsolationChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5351,"src":"8085:28:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":24240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8085:47:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24241,"nodeType":"EmitStatement","src":"8080:52:95"}]},"documentation":{"id":24204,"nodeType":"StructuredDocumentation","src":"7723:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"38ae0cc3","id":24243,"implemented":true,"kind":"function","modifiers":[{"id":24212,"kind":"modifierInvocation","modifierName":{"id":24211,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":23720,"src":"7855:20:95"},"nodeType":"ModifierInvocation","src":"7855:20:95"}],"name":"setBorrowableInIsolation","nameLocation":"7768:24:95","nodeType":"FunctionDefinition","overrides":{"id":24210,"nodeType":"OverrideSpecifier","overrides":[],"src":"7846:8:95"},"parameters":{"id":24209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24206,"mutability":"mutable","name":"asset","nameLocation":"7806:5:95","nodeType":"VariableDeclaration","scope":24243,"src":"7798:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24205,"name":"address","nodeType":"ElementaryTypeName","src":"7798:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24208,"mutability":"mutable","name":"borrowable","nameLocation":"7822:10:95","nodeType":"VariableDeclaration","scope":24243,"src":"7817:15:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24207,"name":"bool","nodeType":"ElementaryTypeName","src":"7817:4:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7792:44:95"},"returnParameters":{"id":24213,"nodeType":"ParameterList","parameters":[],"src":"7876:0:95"},"scope":25278,"src":"7759:378:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5448],"body":{"id":24282,"nodeType":"Block","src":"8271:223:95","statements":[{"assignments":[24258],"declarations":[{"constant":false,"id":24258,"mutability":"mutable","name":"currentConfig","nameLocation":"8318:13:95","nodeType":"VariableDeclaration","scope":24282,"src":"8277:54:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":24257,"nodeType":"UserDefinedTypeName","pathNode":{"id":24256,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"8277:33:95"},"referencedDeclaration":21318,"src":"8277:33:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":24263,"initialValue":{"arguments":[{"id":24261,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24246,"src":"8357:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":24259,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"8334:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"8334:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":24262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8334:29:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"8277:86:95"},{"expression":{"arguments":[{"id":24267,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24248,"src":"8393:6:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":24264,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24258,"src":"8369:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24266,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setPaused","nodeType":"MemberAccess","referencedDeclaration":11064,"src":"8369:23:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":24268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8369:31:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24269,"nodeType":"ExpressionStatement","src":"8369:31:95"},{"expression":{"arguments":[{"id":24273,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24246,"src":"8429:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24274,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24258,"src":"8436:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":24270,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"8406:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4667,"src":"8406:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":24275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8406:44:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24276,"nodeType":"ExpressionStatement","src":"8406:44:95"},{"eventCall":{"arguments":[{"id":24278,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24246,"src":"8475:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24279,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24248,"src":"8482:6:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":24277,"name":"ReservePaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5195,"src":"8461:13:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":24280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8461:28:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24281,"nodeType":"EmitStatement","src":"8456:33:95"}]},"documentation":{"id":24244,"nodeType":"StructuredDocumentation","src":"8141:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"48d9fba9","id":24283,"implemented":true,"kind":"function","modifiers":[{"id":24252,"kind":"modifierInvocation","modifierName":{"id":24251,"name":"onlyEmergencyOrPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":23704,"src":"8246:24:95"},"nodeType":"ModifierInvocation","src":"8246:24:95"}],"name":"setReservePause","nameLocation":"8186:15:95","nodeType":"FunctionDefinition","overrides":{"id":24250,"nodeType":"OverrideSpecifier","overrides":[],"src":"8237:8:95"},"parameters":{"id":24249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24246,"mutability":"mutable","name":"asset","nameLocation":"8210:5:95","nodeType":"VariableDeclaration","scope":24283,"src":"8202:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24245,"name":"address","nodeType":"ElementaryTypeName","src":"8202:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24248,"mutability":"mutable","name":"paused","nameLocation":"8222:6:95","nodeType":"VariableDeclaration","scope":24283,"src":"8217:11:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24247,"name":"bool","nodeType":"ElementaryTypeName","src":"8217:4:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8201:28:95"},"returnParameters":{"id":24253,"nodeType":"ParameterList","parameters":[],"src":"8271:0:95"},"scope":25278,"src":"8177:317:95","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[5456],"body":{"id":24338,"nodeType":"Block","src":"8652:438:95","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24295,"name":"newReserveFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24288,"src":"8666:16:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":24296,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21132,"src":"8686:14:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PercentageMath_$21132_$","typeString":"type(library PercentageMath)"}},"id":24297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PERCENTAGE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":21104,"src":"8686:32:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8666:52:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":24299,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"8720:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":24300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_RESERVE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":12569,"src":"8720:29:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":24294,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8658:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":24301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8658:92:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24302,"nodeType":"ExpressionStatement","src":"8658:92:95"},{"assignments":[24307],"declarations":[{"constant":false,"id":24307,"mutability":"mutable","name":"currentConfig","nameLocation":"8797:13:95","nodeType":"VariableDeclaration","scope":24338,"src":"8756:54:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":24306,"nodeType":"UserDefinedTypeName","pathNode":{"id":24305,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"8756:33:95"},"referencedDeclaration":21318,"src":"8756:33:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":24312,"initialValue":{"arguments":[{"id":24310,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24286,"src":"8836:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":24308,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"8813:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"8813:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":24311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8813:29:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"8756:86:95"},{"assignments":[24314],"declarations":[{"constant":false,"id":24314,"mutability":"mutable","name":"oldReserveFactor","nameLocation":"8856:16:95","nodeType":"VariableDeclaration","scope":24338,"src":"8848:24:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24313,"name":"uint256","nodeType":"ElementaryTypeName","src":"8848:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24318,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24315,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24307,"src":"8875:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24316,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getReserveFactor","nodeType":"MemberAccess","referencedDeclaration":11335,"src":"8875:30:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":24317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8875:32:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8848:59:95"},{"expression":{"arguments":[{"id":24322,"name":"newReserveFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24288,"src":"8944:16:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24319,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24307,"src":"8913:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24321,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setReserveFactor","nodeType":"MemberAccess","referencedDeclaration":11316,"src":"8913:30:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":24323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8913:48:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24324,"nodeType":"ExpressionStatement","src":"8913:48:95"},{"expression":{"arguments":[{"id":24328,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24286,"src":"8990:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24329,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24307,"src":"8997:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":24325,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"8967:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4667,"src":"8967:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":24330,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8967:44:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24331,"nodeType":"ExpressionStatement","src":"8967:44:95"},{"eventCall":{"arguments":[{"id":24333,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24286,"src":"9043:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24334,"name":"oldReserveFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24314,"src":"9050:16:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24335,"name":"newReserveFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24288,"src":"9068:16:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24332,"name":"ReserveFactorChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5209,"src":"9022:20:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":24336,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9022:63:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24337,"nodeType":"EmitStatement","src":"9017:68:95"}]},"documentation":{"id":24284,"nodeType":"StructuredDocumentation","src":"8498:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"4b4e6753","id":24339,"implemented":true,"kind":"function","modifiers":[{"id":24292,"kind":"modifierInvocation","modifierName":{"id":24291,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":23720,"src":"8631:20:95"},"nodeType":"ModifierInvocation","src":"8631:20:95"}],"name":"setReserveFactor","nameLocation":"8543:16:95","nodeType":"FunctionDefinition","overrides":{"id":24290,"nodeType":"OverrideSpecifier","overrides":[],"src":"8622:8:95"},"parameters":{"id":24289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24286,"mutability":"mutable","name":"asset","nameLocation":"8573:5:95","nodeType":"VariableDeclaration","scope":24339,"src":"8565:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24285,"name":"address","nodeType":"ElementaryTypeName","src":"8565:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24288,"mutability":"mutable","name":"newReserveFactor","nameLocation":"8592:16:95","nodeType":"VariableDeclaration","scope":24339,"src":"8584:24:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24287,"name":"uint256","nodeType":"ElementaryTypeName","src":"8584:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8559:53:95"},"returnParameters":{"id":24293,"nodeType":"ParameterList","parameters":[],"src":"8652:0:95"},"scope":25278,"src":"8534:556:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5558],"body":{"id":24405,"nodeType":"Block","src":"9244:483:95","statements":[{"assignments":[24354],"declarations":[{"constant":false,"id":24354,"mutability":"mutable","name":"currentConfig","nameLocation":"9291:13:95","nodeType":"VariableDeclaration","scope":24405,"src":"9250:54:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":24353,"nodeType":"UserDefinedTypeName","pathNode":{"id":24352,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"9250:33:95"},"referencedDeclaration":21318,"src":"9250:33:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":24359,"initialValue":{"arguments":[{"id":24357,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24342,"src":"9330:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":24355,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"9307:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"9307:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":24358,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9307:29:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"9250:86:95"},{"assignments":[24361],"declarations":[{"constant":false,"id":24361,"mutability":"mutable","name":"oldDebtCeiling","nameLocation":"9351:14:95","nodeType":"VariableDeclaration","scope":24405,"src":"9343:22:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24360,"name":"uint256","nodeType":"ElementaryTypeName","src":"9343:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24365,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24362,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24354,"src":"9368:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24363,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDebtCeiling","nodeType":"MemberAccess","referencedDeclaration":11491,"src":"9368:28:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":24364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9368:30:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9343:55:95"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24366,"name":"oldDebtCeiling","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24361,"src":"9408:14:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":24367,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9426:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9408:19:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24374,"nodeType":"IfStatement","src":"9404:64:95","trueBody":{"id":24373,"nodeType":"Block","src":"9429:39:95","statements":[{"expression":{"arguments":[{"id":24370,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24342,"src":"9455:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24369,"name":"_checkNoSuppliers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25119,"src":"9437:17:95","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":24371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9437:24:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24372,"nodeType":"ExpressionStatement","src":"9437:24:95"}]}},{"expression":{"arguments":[{"id":24378,"name":"newDebtCeiling","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24344,"src":"9502:14:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24375,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24354,"src":"9473:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24377,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setDebtCeiling","nodeType":"MemberAccess","referencedDeclaration":11472,"src":"9473:28:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":24379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9473:44:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24380,"nodeType":"ExpressionStatement","src":"9473:44:95"},{"expression":{"arguments":[{"id":24384,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24342,"src":"9546:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24385,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24354,"src":"9553:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":24381,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"9523:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4667,"src":"9523:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":24386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9523:44:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24387,"nodeType":"ExpressionStatement","src":"9523:44:95"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24388,"name":"newDebtCeiling","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24344,"src":"9578:14:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":24389,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9596:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9578:19:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24398,"nodeType":"IfStatement","src":"9574:80:95","trueBody":{"id":24397,"nodeType":"Block","src":"9599:55:95","statements":[{"expression":{"arguments":[{"id":24394,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24342,"src":"9641:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":24391,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"9607:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"resetIsolationModeTotalDebt","nodeType":"MemberAccess","referencedDeclaration":4800,"src":"9607:33:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":24395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9607:40:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24396,"nodeType":"ExpressionStatement","src":"9607:40:95"}]}},{"eventCall":{"arguments":[{"id":24400,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24342,"src":"9684:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24401,"name":"oldDebtCeiling","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24361,"src":"9691:14:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24402,"name":"newDebtCeiling","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24344,"src":"9707:14:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24399,"name":"DebtCeilingChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5314,"src":"9665:18:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":24403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9665:57:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24404,"nodeType":"EmitStatement","src":"9660:62:95"}]},"documentation":{"id":24340,"nodeType":"StructuredDocumentation","src":"9094:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"aeb4fcc1","id":24406,"implemented":true,"kind":"function","modifiers":[{"id":24348,"kind":"modifierInvocation","modifierName":{"id":24347,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":23720,"src":"9223:20:95"},"nodeType":"ModifierInvocation","src":"9223:20:95"}],"name":"setDebtCeiling","nameLocation":"9139:14:95","nodeType":"FunctionDefinition","overrides":{"id":24346,"nodeType":"OverrideSpecifier","overrides":[],"src":"9214:8:95"},"parameters":{"id":24345,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24342,"mutability":"mutable","name":"asset","nameLocation":"9167:5:95","nodeType":"VariableDeclaration","scope":24406,"src":"9159:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24341,"name":"address","nodeType":"ElementaryTypeName","src":"9159:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24344,"mutability":"mutable","name":"newDebtCeiling","nameLocation":"9186:14:95","nodeType":"VariableDeclaration","scope":24406,"src":"9178:22:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24343,"name":"uint256","nodeType":"ElementaryTypeName","src":"9178:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9153:51:95"},"returnParameters":{"id":24349,"nodeType":"ParameterList","parameters":[],"src":"9244:0:95"},"scope":25278,"src":"9130:597:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5566],"body":{"id":24459,"nodeType":"Block","src":"9877:378:95","statements":[{"condition":{"id":24417,"name":"newSiloed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24411,"src":"9887:9:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24423,"nodeType":"IfStatement","src":"9883:54:95","trueBody":{"id":24422,"nodeType":"Block","src":"9898:39:95","statements":[{"expression":{"arguments":[{"id":24419,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24409,"src":"9924:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24418,"name":"_checkNoBorrowers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25144,"src":"9906:17:95","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":24420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9906:24:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24421,"nodeType":"ExpressionStatement","src":"9906:24:95"}]}},{"assignments":[24428],"declarations":[{"constant":false,"id":24428,"mutability":"mutable","name":"currentConfig","nameLocation":"9983:13:95","nodeType":"VariableDeclaration","scope":24459,"src":"9942:54:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":24427,"nodeType":"UserDefinedTypeName","pathNode":{"id":24426,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"9942:33:95"},"referencedDeclaration":21318,"src":"9942:33:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":24433,"initialValue":{"arguments":[{"id":24431,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24409,"src":"10022:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":24429,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"9999:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"9999:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":24432,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9999:29:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"9942:86:95"},{"assignments":[24435],"declarations":[{"constant":false,"id":24435,"mutability":"mutable","name":"oldSiloed","nameLocation":"10040:9:95","nodeType":"VariableDeclaration","scope":24459,"src":"10035:14:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24434,"name":"bool","nodeType":"ElementaryTypeName","src":"10035:4:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":24439,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24436,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24428,"src":"10052:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24437,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getSiloedBorrowing","nodeType":"MemberAccess","referencedDeclaration":11183,"src":"10052:32:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":24438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10052:34:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"10035:51:95"},{"expression":{"arguments":[{"id":24443,"name":"newSiloed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24411,"src":"10126:9:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":24440,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24428,"src":"10093:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24442,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setSiloedBorrowing","nodeType":"MemberAccess","referencedDeclaration":11164,"src":"10093:32:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_bool_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,bool) pure"}},"id":24444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10093:43:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24445,"nodeType":"ExpressionStatement","src":"10093:43:95"},{"expression":{"arguments":[{"id":24449,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24409,"src":"10166:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24450,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24428,"src":"10173:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":24446,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"10143:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4667,"src":"10143:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":24451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10143:44:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24452,"nodeType":"ExpressionStatement","src":"10143:44:95"},{"eventCall":{"arguments":[{"id":24454,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24409,"src":"10222:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24455,"name":"oldSiloed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24435,"src":"10229:9:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":24456,"name":"newSiloed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24411,"src":"10240:9:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":24453,"name":"SiloedBorrowingChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5323,"src":"10199:22:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bool_$_t_bool_$returns$__$","typeString":"function (address,bool,bool)"}},"id":24457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10199:51:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24458,"nodeType":"EmitStatement","src":"10194:56:95"}]},"documentation":{"id":24407,"nodeType":"StructuredDocumentation","src":"9731:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"a7fa83b7","id":24460,"implemented":true,"kind":"function","modifiers":[{"id":24415,"kind":"modifierInvocation","modifierName":{"id":24414,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":23720,"src":"9856:20:95"},"nodeType":"ModifierInvocation","src":"9856:20:95"}],"name":"setSiloedBorrowing","nameLocation":"9776:18:95","nodeType":"FunctionDefinition","overrides":{"id":24413,"nodeType":"OverrideSpecifier","overrides":[],"src":"9847:8:95"},"parameters":{"id":24412,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24409,"mutability":"mutable","name":"asset","nameLocation":"9808:5:95","nodeType":"VariableDeclaration","scope":24460,"src":"9800:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24408,"name":"address","nodeType":"ElementaryTypeName","src":"9800:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24411,"mutability":"mutable","name":"newSiloed","nameLocation":"9824:9:95","nodeType":"VariableDeclaration","scope":24460,"src":"9819:14:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24410,"name":"bool","nodeType":"ElementaryTypeName","src":"9819:4:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9794:43:95"},"returnParameters":{"id":24416,"nodeType":"ParameterList","parameters":[],"src":"9877:0:95"},"scope":25278,"src":"9767:488:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5478],"body":{"id":24506,"nodeType":"Block","src":"10405:312:95","statements":[{"assignments":[24475],"declarations":[{"constant":false,"id":24475,"mutability":"mutable","name":"currentConfig","nameLocation":"10452:13:95","nodeType":"VariableDeclaration","scope":24506,"src":"10411:54:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":24474,"nodeType":"UserDefinedTypeName","pathNode":{"id":24473,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"10411:33:95"},"referencedDeclaration":21318,"src":"10411:33:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":24480,"initialValue":{"arguments":[{"id":24478,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24463,"src":"10491:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":24476,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"10468:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"10468:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":24479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10468:29:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"10411:86:95"},{"assignments":[24482],"declarations":[{"constant":false,"id":24482,"mutability":"mutable","name":"oldBorrowCap","nameLocation":"10511:12:95","nodeType":"VariableDeclaration","scope":24506,"src":"10503:20:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24481,"name":"uint256","nodeType":"ElementaryTypeName","src":"10503:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24486,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24483,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24475,"src":"10526:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24484,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getBorrowCap","nodeType":"MemberAccess","referencedDeclaration":11387,"src":"10526:26:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":24485,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10526:28:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10503:51:95"},{"expression":{"arguments":[{"id":24490,"name":"newBorrowCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24465,"src":"10587:12:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24487,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24475,"src":"10560:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24489,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setBorrowCap","nodeType":"MemberAccess","referencedDeclaration":11368,"src":"10560:26:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":24491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10560:40:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24492,"nodeType":"ExpressionStatement","src":"10560:40:95"},{"expression":{"arguments":[{"id":24496,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24463,"src":"10629:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24497,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24475,"src":"10636:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":24493,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"10606:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4667,"src":"10606:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":24498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10606:44:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24499,"nodeType":"ExpressionStatement","src":"10606:44:95"},{"eventCall":{"arguments":[{"id":24501,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24463,"src":"10678:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24502,"name":"oldBorrowCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24482,"src":"10685:12:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24503,"name":"newBorrowCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24465,"src":"10699:12:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24500,"name":"BorrowCapChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5218,"src":"10661:16:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":24504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10661:51:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24505,"nodeType":"EmitStatement","src":"10656:56:95"}]},"documentation":{"id":24461,"nodeType":"StructuredDocumentation","src":"10259:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"d14a0983","id":24507,"implemented":true,"kind":"function","modifiers":[{"id":24469,"kind":"modifierInvocation","modifierName":{"id":24468,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":23720,"src":"10384:20:95"},"nodeType":"ModifierInvocation","src":"10384:20:95"}],"name":"setBorrowCap","nameLocation":"10304:12:95","nodeType":"FunctionDefinition","overrides":{"id":24467,"nodeType":"OverrideSpecifier","overrides":[],"src":"10375:8:95"},"parameters":{"id":24466,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24463,"mutability":"mutable","name":"asset","nameLocation":"10330:5:95","nodeType":"VariableDeclaration","scope":24507,"src":"10322:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24462,"name":"address","nodeType":"ElementaryTypeName","src":"10322:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24465,"mutability":"mutable","name":"newBorrowCap","nameLocation":"10349:12:95","nodeType":"VariableDeclaration","scope":24507,"src":"10341:20:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24464,"name":"uint256","nodeType":"ElementaryTypeName","src":"10341:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10316:49:95"},"returnParameters":{"id":24470,"nodeType":"ParameterList","parameters":[],"src":"10405:0:95"},"scope":25278,"src":"10295:422:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5486],"body":{"id":24553,"nodeType":"Block","src":"10867:312:95","statements":[{"assignments":[24522],"declarations":[{"constant":false,"id":24522,"mutability":"mutable","name":"currentConfig","nameLocation":"10914:13:95","nodeType":"VariableDeclaration","scope":24553,"src":"10873:54:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":24521,"nodeType":"UserDefinedTypeName","pathNode":{"id":24520,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"10873:33:95"},"referencedDeclaration":21318,"src":"10873:33:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":24527,"initialValue":{"arguments":[{"id":24525,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24510,"src":"10953:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":24523,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"10930:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"10930:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":24526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10930:29:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"10873:86:95"},{"assignments":[24529],"declarations":[{"constant":false,"id":24529,"mutability":"mutable","name":"oldSupplyCap","nameLocation":"10973:12:95","nodeType":"VariableDeclaration","scope":24553,"src":"10965:20:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24528,"name":"uint256","nodeType":"ElementaryTypeName","src":"10965:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24533,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24530,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24522,"src":"10988:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24531,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getSupplyCap","nodeType":"MemberAccess","referencedDeclaration":11439,"src":"10988:26:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":24532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10988:28:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10965:51:95"},{"expression":{"arguments":[{"id":24537,"name":"newSupplyCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24512,"src":"11049:12:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24534,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24522,"src":"11022:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24536,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setSupplyCap","nodeType":"MemberAccess","referencedDeclaration":11420,"src":"11022:26:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":24538,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11022:40:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24539,"nodeType":"ExpressionStatement","src":"11022:40:95"},{"expression":{"arguments":[{"id":24543,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24510,"src":"11091:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24544,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24522,"src":"11098:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":24540,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"11068:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4667,"src":"11068:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":24545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11068:44:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24546,"nodeType":"ExpressionStatement","src":"11068:44:95"},{"eventCall":{"arguments":[{"id":24548,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24510,"src":"11140:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24549,"name":"oldSupplyCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24529,"src":"11147:12:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24550,"name":"newSupplyCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24512,"src":"11161:12:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24547,"name":"SupplyCapChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5227,"src":"11123:16:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":24551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11123:51:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24552,"nodeType":"EmitStatement","src":"11118:56:95"}]},"documentation":{"id":24508,"nodeType":"StructuredDocumentation","src":"10721:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"571f03e5","id":24554,"implemented":true,"kind":"function","modifiers":[{"id":24516,"kind":"modifierInvocation","modifierName":{"id":24515,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":23720,"src":"10846:20:95"},"nodeType":"ModifierInvocation","src":"10846:20:95"}],"name":"setSupplyCap","nameLocation":"10766:12:95","nodeType":"FunctionDefinition","overrides":{"id":24514,"nodeType":"OverrideSpecifier","overrides":[],"src":"10837:8:95"},"parameters":{"id":24513,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24510,"mutability":"mutable","name":"asset","nameLocation":"10792:5:95","nodeType":"VariableDeclaration","scope":24554,"src":"10784:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24509,"name":"address","nodeType":"ElementaryTypeName","src":"10784:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24512,"mutability":"mutable","name":"newSupplyCap","nameLocation":"10811:12:95","nodeType":"VariableDeclaration","scope":24554,"src":"10803:20:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24511,"name":"uint256","nodeType":"ElementaryTypeName","src":"10803:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10778:49:95"},"returnParameters":{"id":24517,"nodeType":"ParameterList","parameters":[],"src":"10867:0:95"},"scope":25278,"src":"10757:422:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5494],"body":{"id":24609,"nodeType":"Block","src":"11336:425:95","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24566,"name":"newFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24559,"src":"11350:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":24567,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21132,"src":"11360:14:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PercentageMath_$21132_$","typeString":"type(library PercentageMath)"}},"id":24568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PERCENTAGE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":21104,"src":"11360:32:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11350:42:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":24570,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"11394:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":24571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_LIQUIDATION_PROTOCOL_FEE","nodeType":"MemberAccess","referencedDeclaration":12578,"src":"11394:39:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":24565,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11342:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":24572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11342:92:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24573,"nodeType":"ExpressionStatement","src":"11342:92:95"},{"assignments":[24578],"declarations":[{"constant":false,"id":24578,"mutability":"mutable","name":"currentConfig","nameLocation":"11481:13:95","nodeType":"VariableDeclaration","scope":24609,"src":"11440:54:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":24577,"nodeType":"UserDefinedTypeName","pathNode":{"id":24576,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"11440:33:95"},"referencedDeclaration":21318,"src":"11440:33:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":24583,"initialValue":{"arguments":[{"id":24581,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24557,"src":"11520:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":24579,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"11497:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24580,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"11497:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":24582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11497:29:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"11440:86:95"},{"assignments":[24585],"declarations":[{"constant":false,"id":24585,"mutability":"mutable","name":"oldFee","nameLocation":"11540:6:95","nodeType":"VariableDeclaration","scope":24609,"src":"11532:14:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24584,"name":"uint256","nodeType":"ElementaryTypeName","src":"11532:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24589,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24586,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24578,"src":"11549:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24587,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLiquidationProtocolFee","nodeType":"MemberAccess","referencedDeclaration":11543,"src":"11549:39:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":24588,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11549:41:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11532:58:95"},{"expression":{"arguments":[{"id":24593,"name":"newFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24559,"src":"11636:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24590,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24578,"src":"11596:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24592,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setLiquidationProtocolFee","nodeType":"MemberAccess","referencedDeclaration":11524,"src":"11596:39:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":24594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11596:47:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24595,"nodeType":"ExpressionStatement","src":"11596:47:95"},{"expression":{"arguments":[{"id":24599,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24557,"src":"11672:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24600,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24578,"src":"11679:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":24596,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"11649:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4667,"src":"11649:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":24601,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11649:44:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24602,"nodeType":"ExpressionStatement","src":"11649:44:95"},{"eventCall":{"arguments":[{"id":24604,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24557,"src":"11734:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24605,"name":"oldFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24585,"src":"11741:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24606,"name":"newFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24559,"src":"11749:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24603,"name":"LiquidationProtocolFeeChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5236,"src":"11704:29:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":24607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11704:52:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24608,"nodeType":"EmitStatement","src":"11699:57:95"}]},"documentation":{"id":24555,"nodeType":"StructuredDocumentation","src":"11183:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"26d2cec2","id":24610,"implemented":true,"kind":"function","modifiers":[{"id":24563,"kind":"modifierInvocation","modifierName":{"id":24562,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":23720,"src":"11315:20:95"},"nodeType":"ModifierInvocation","src":"11315:20:95"}],"name":"setLiquidationProtocolFee","nameLocation":"11228:25:95","nodeType":"FunctionDefinition","overrides":{"id":24561,"nodeType":"OverrideSpecifier","overrides":[],"src":"11306:8:95"},"parameters":{"id":24560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24557,"mutability":"mutable","name":"asset","nameLocation":"11267:5:95","nodeType":"VariableDeclaration","scope":24610,"src":"11259:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24556,"name":"address","nodeType":"ElementaryTypeName","src":"11259:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24559,"mutability":"mutable","name":"newFee","nameLocation":"11286:6:95","nodeType":"VariableDeclaration","scope":24610,"src":"11278:14:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24558,"name":"uint256","nodeType":"ElementaryTypeName","src":"11278:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11253:43:95"},"returnParameters":{"id":24564,"nodeType":"ParameterList","parameters":[],"src":"11336:0:95"},"scope":25278,"src":"11219:542:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5526],"body":{"id":24761,"nodeType":"Block","src":"12017:1783:95","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":24632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24630,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24615,"src":"12031:3:95","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":24631,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12038:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12031:8:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":24633,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"12041:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":24634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_EMODE_CATEGORY_PARAMS","nodeType":"MemberAccess","referencedDeclaration":12434,"src":"12041:36:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":24629,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12023:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":24635,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12023:55:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24636,"nodeType":"ExpressionStatement","src":"12023:55:95"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":24640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24638,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24617,"src":"12092:20:95","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":24639,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12116:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12092:25:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":24641,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"12119:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":24642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_EMODE_CATEGORY_PARAMS","nodeType":"MemberAccess","referencedDeclaration":12434,"src":"12119:36:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":24637,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12084:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":24643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12084:72:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24644,"nodeType":"ExpressionStatement","src":"12084:72:95"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint16","typeString":"uint16"},"id":24648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24646,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24615,"src":"12363:3:95","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":24647,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24617,"src":"12370:20:95","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"12363:27:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":24649,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"12392:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":24650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_EMODE_CATEGORY_PARAMS","nodeType":"MemberAccess","referencedDeclaration":12434,"src":"12392:36:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":24645,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12355:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":24651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12355:74:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24652,"nodeType":"ExpressionStatement","src":"12355:74:95"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24654,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24619,"src":"12450:16:95","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":24655,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21132,"src":"12469:14:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PercentageMath_$21132_$","typeString":"type(library PercentageMath)"}},"id":24656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PERCENTAGE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":21104,"src":"12469:32:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12450:51:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":24658,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"12509:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":24659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_EMODE_CATEGORY_PARAMS","nodeType":"MemberAccess","referencedDeclaration":12434,"src":"12509:36:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":24653,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12435:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":24660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12435:116:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24661,"nodeType":"ExpressionStatement","src":"12435:116:95"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":24668,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24619,"src":"12800:16:95","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"arguments":[{"id":24665,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24617,"src":"12767:20:95","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"}],"id":24664,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12759:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":24663,"name":"uint256","nodeType":"ElementaryTypeName","src":"12759:7:95","typeDescriptions":{}}},"id":24666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12759:29:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":21119,"src":"12759:40:95","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":24669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12759:58:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":24670,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21132,"src":"12829:14:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PercentageMath_$21132_$","typeString":"type(library PercentageMath)"}},"id":24671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PERCENTAGE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":21104,"src":"12829:32:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12759:102:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":24673,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"12869:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":24674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_EMODE_CATEGORY_PARAMS","nodeType":"MemberAccess","referencedDeclaration":12434,"src":"12869:36:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":24662,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12744:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":24675,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12744:167:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24676,"nodeType":"ExpressionStatement","src":"12744:167:95"},{"assignments":[24681],"declarations":[{"constant":false,"id":24681,"mutability":"mutable","name":"reserves","nameLocation":"12935:8:95","nodeType":"VariableDeclaration","scope":24761,"src":"12918:25:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":24679,"name":"address","nodeType":"ElementaryTypeName","src":"12918:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":24680,"nodeType":"ArrayTypeName","src":"12918:9:95","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":24685,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24682,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"12946:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReservesList","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"12946:21:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view external returns (address[] memory)"}},"id":24684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12946:23:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"12918:51:95"},{"body":{"id":24736,"nodeType":"Block","src":"13021:409:95","statements":[{"assignments":[24701],"declarations":[{"constant":false,"id":24701,"mutability":"mutable","name":"currentConfig","nameLocation":"13070:13:95","nodeType":"VariableDeclaration","scope":24736,"src":"13029:54:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":24700,"nodeType":"UserDefinedTypeName","pathNode":{"id":24699,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"13029:33:95"},"referencedDeclaration":21318,"src":"13029:33:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":24708,"initialValue":{"arguments":[{"baseExpression":{"id":24704,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24681,"src":"13109:8:95","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":24706,"indexExpression":{"id":24705,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24687,"src":"13118:1:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13109:11:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":24702,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"13086:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"13086:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":24707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13086:35:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"13029:92:95"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24709,"name":"categoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24613,"src":"13133:10:95","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24710,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24701,"src":"13147:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24711,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getEModeCategory","nodeType":"MemberAccess","referencedDeclaration":11647,"src":"13147:30:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":24712,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13147:32:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13133:46:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24735,"nodeType":"IfStatement","src":"13129:295:95","trueBody":{"id":24734,"nodeType":"Block","src":"13181:243:95","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24715,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24615,"src":"13199:3:95","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24716,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24701,"src":"13205:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24717,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLtv","nodeType":"MemberAccess","referencedDeclaration":10777,"src":"13205:20:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":24718,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13205:22:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13199:28:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":24720,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"13229:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":24721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_EMODE_CATEGORY_PARAMS","nodeType":"MemberAccess","referencedDeclaration":12434,"src":"13229:36:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":24714,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"13191:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":24722,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13191:75:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24723,"nodeType":"ExpressionStatement","src":"13191:75:95"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24725,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24617,"src":"13295:20:95","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24726,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24701,"src":"13318:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24727,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLiquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":10829,"src":"13318:37:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":24728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13318:39:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13295:62:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":24730,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"13369:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":24731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_EMODE_CATEGORY_PARAMS","nodeType":"MemberAccess","referencedDeclaration":12434,"src":"13369:36:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":24724,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"13276:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":24732,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13276:139:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24733,"nodeType":"ExpressionStatement","src":"13276:139:95"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24690,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24687,"src":"12995:1:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":24691,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24681,"src":"12999:8:95","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":24692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"12999:15:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12995:19:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24737,"initializationExpression":{"assignments":[24687],"declarations":[{"constant":false,"id":24687,"mutability":"mutable","name":"i","nameLocation":"12988:1:95","nodeType":"VariableDeclaration","scope":24737,"src":"12980:9:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24686,"name":"uint256","nodeType":"ElementaryTypeName","src":"12980:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24689,"initialValue":{"hexValue":"30","id":24688,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12992:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12980:13:95"},"loopExpression":{"expression":{"id":24695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"13016:3:95","subExpression":{"id":24694,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24687,"src":"13016:1:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24696,"nodeType":"ExpressionStatement","src":"13016:3:95"},"nodeType":"ForStatement","src":"12975:455:95"},{"expression":{"arguments":[{"id":24741,"name":"categoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24613,"src":"13472:10:95","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"arguments":[{"id":24744,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24615,"src":"13529:3:95","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":24745,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24617,"src":"13564:20:95","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":24746,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24619,"src":"13612:16:95","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":24747,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24621,"src":"13651:6:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24748,"name":"label","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24623,"src":"13674:5:95","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"expression":{"id":24742,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"13490:9:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":24743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"EModeCategory","nodeType":"MemberAccess","referencedDeclaration":21333,"src":"13490:23:95","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_EModeCategory_$21333_storage_ptr_$","typeString":"type(struct DataTypes.EModeCategory storage pointer)"}},"id":24749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["ltv","liquidationThreshold","liquidationBonus","priceSource","label"],"nodeType":"FunctionCall","src":"13490:198:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_memory_ptr","typeString":"struct DataTypes.EModeCategory memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_struct$_EModeCategory_$21333_memory_ptr","typeString":"struct DataTypes.EModeCategory memory"}],"expression":{"id":24738,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"13436:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"configureEModeCategory","nodeType":"MemberAccess","referencedDeclaration":4771,"src":"13436:28:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint8_$_t_struct$_EModeCategory_$21333_memory_ptr_$returns$__$","typeString":"function (uint8,struct DataTypes.EModeCategory memory) external"}},"id":24750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13436:258:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24751,"nodeType":"ExpressionStatement","src":"13436:258:95"},{"eventCall":{"arguments":[{"id":24753,"name":"categoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24613,"src":"13724:10:95","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":24754,"name":"ltv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24615,"src":"13736:3:95","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":24755,"name":"liquidationThreshold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24617,"src":"13741:20:95","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":24756,"name":"liquidationBonus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24619,"src":"13763:16:95","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"id":24757,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24621,"src":"13781:6:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24758,"name":"label","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24623,"src":"13789:5:95","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":24752,"name":"EModeCategoryAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5269,"src":"13705:18:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint8_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (uint8,uint256,uint256,uint256,address,string memory)"}},"id":24759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13705:90:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24760,"nodeType":"EmitStatement","src":"13700:95:95"}]},"documentation":{"id":24611,"nodeType":"StructuredDocumentation","src":"11765:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"c19d61e4","id":24762,"implemented":true,"kind":"function","modifiers":[{"id":24627,"kind":"modifierInvocation","modifierName":{"id":24626,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":23720,"src":"11996:20:95"},"nodeType":"ModifierInvocation","src":"11996:20:95"}],"name":"setEModeCategory","nameLocation":"11810:16:95","nodeType":"FunctionDefinition","overrides":{"id":24625,"nodeType":"OverrideSpecifier","overrides":[],"src":"11987:8:95"},"parameters":{"id":24624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24613,"mutability":"mutable","name":"categoryId","nameLocation":"11838:10:95","nodeType":"VariableDeclaration","scope":24762,"src":"11832:16:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":24612,"name":"uint8","nodeType":"ElementaryTypeName","src":"11832:5:95","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":24615,"mutability":"mutable","name":"ltv","nameLocation":"11861:3:95","nodeType":"VariableDeclaration","scope":24762,"src":"11854:10:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":24614,"name":"uint16","nodeType":"ElementaryTypeName","src":"11854:6:95","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":24617,"mutability":"mutable","name":"liquidationThreshold","nameLocation":"11877:20:95","nodeType":"VariableDeclaration","scope":24762,"src":"11870:27:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":24616,"name":"uint16","nodeType":"ElementaryTypeName","src":"11870:6:95","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":24619,"mutability":"mutable","name":"liquidationBonus","nameLocation":"11910:16:95","nodeType":"VariableDeclaration","scope":24762,"src":"11903:23:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":24618,"name":"uint16","nodeType":"ElementaryTypeName","src":"11903:6:95","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":24621,"mutability":"mutable","name":"oracle","nameLocation":"11940:6:95","nodeType":"VariableDeclaration","scope":24762,"src":"11932:14:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24620,"name":"address","nodeType":"ElementaryTypeName","src":"11932:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24623,"mutability":"mutable","name":"label","nameLocation":"11968:5:95","nodeType":"VariableDeclaration","scope":24762,"src":"11952:21:95","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":24622,"name":"string","nodeType":"ElementaryTypeName","src":"11952:6:95","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"11826:151:95"},"returnParameters":{"id":24628,"nodeType":"ParameterList","parameters":[],"src":"12017:0:95"},"scope":25278,"src":"11801:1999:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5510],"body":{"id":24837,"nodeType":"Block","src":"13958:630:95","statements":[{"assignments":[24777],"declarations":[{"constant":false,"id":24777,"mutability":"mutable","name":"currentConfig","nameLocation":"14005:13:95","nodeType":"VariableDeclaration","scope":24837,"src":"13964:54:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":24776,"nodeType":"UserDefinedTypeName","pathNode":{"id":24775,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"13964:33:95"},"referencedDeclaration":21318,"src":"13964:33:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":24782,"initialValue":{"arguments":[{"id":24780,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24765,"src":"14044:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":24778,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"14021:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"14021:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":24781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14021:29:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"13964:86:95"},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":24785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24783,"name":"newCategoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24767,"src":"14061:13:95","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":24784,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14078:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14061:18:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24808,"nodeType":"IfStatement","src":"14057:284:95","trueBody":{"id":24807,"nodeType":"Block","src":"14081:260:95","statements":[{"assignments":[24790],"declarations":[{"constant":false,"id":24790,"mutability":"mutable","name":"categoryData","nameLocation":"14120:12:95","nodeType":"VariableDeclaration","scope":24807,"src":"14089:43:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_memory_ptr","typeString":"struct DataTypes.EModeCategory"},"typeName":{"id":24789,"nodeType":"UserDefinedTypeName","pathNode":{"id":24788,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":21333,"src":"14089:23:95"},"referencedDeclaration":21333,"src":"14089:23:95","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory"}},"visibility":"internal"}],"id":24795,"initialValue":{"arguments":[{"id":24793,"name":"newCategoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24767,"src":"14162:13:95","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":24791,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"14135:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getEModeCategoryData","nodeType":"MemberAccess","referencedDeclaration":4780,"src":"14135:26:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint8_$returns$_t_struct$_EModeCategory_$21333_memory_ptr_$","typeString":"function (uint8) view external returns (struct DataTypes.EModeCategory memory)"}},"id":24794,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14135:41:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_memory_ptr","typeString":"struct DataTypes.EModeCategory memory"}},"nodeType":"VariableDeclarationStatement","src":"14089:87:95"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":24797,"name":"categoryData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24790,"src":"14201:12:95","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_memory_ptr","typeString":"struct DataTypes.EModeCategory memory"}},"id":24798,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":21326,"src":"14201:33:95","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24799,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24777,"src":"14237:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24800,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getLiquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":10829,"src":"14237:37:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":24801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14237:39:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14201:75:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":24803,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"14286:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":24804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_EMODE_CATEGORY_ASSIGNMENT","nodeType":"MemberAccess","referencedDeclaration":12422,"src":"14286:40:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":24796,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"14184:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":24805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14184:150:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24806,"nodeType":"ExpressionStatement","src":"14184:150:95"}]}},{"assignments":[24810],"declarations":[{"constant":false,"id":24810,"mutability":"mutable","name":"oldCategoryId","nameLocation":"14354:13:95","nodeType":"VariableDeclaration","scope":24837,"src":"14346:21:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24809,"name":"uint256","nodeType":"ElementaryTypeName","src":"14346:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24814,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24811,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24777,"src":"14370:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24812,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getEModeCategory","nodeType":"MemberAccess","referencedDeclaration":11647,"src":"14370:30:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":24813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14370:32:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14346:56:95"},{"expression":{"arguments":[{"id":24818,"name":"newCategoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24767,"src":"14439:13:95","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":24815,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24777,"src":"14408:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24817,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setEModeCategory","nodeType":"MemberAccess","referencedDeclaration":11628,"src":"14408:30:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":24819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14408:45:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24820,"nodeType":"ExpressionStatement","src":"14408:45:95"},{"expression":{"arguments":[{"id":24824,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24765,"src":"14482:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24825,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24777,"src":"14489:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":24821,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"14459:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4667,"src":"14459:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":24826,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14459:44:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24827,"nodeType":"ExpressionStatement","src":"14459:44:95"},{"eventCall":{"arguments":[{"id":24829,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24765,"src":"14540:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":24832,"name":"oldCategoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24810,"src":"14553:13:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24831,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14547:5:95","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":24830,"name":"uint8","nodeType":"ElementaryTypeName","src":"14547:5:95","typeDescriptions":{}}},"id":24833,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14547:20:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":24834,"name":"newCategoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24767,"src":"14569:13:95","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":24828,"name":"EModeAssetCategoryChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5254,"src":"14514:25:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint8_$_t_uint8_$returns$__$","typeString":"function (address,uint8,uint8)"}},"id":24835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14514:69:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24836,"nodeType":"EmitStatement","src":"14509:74:95"}]},"documentation":{"id":24763,"nodeType":"StructuredDocumentation","src":"13804:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"d4fe3f99","id":24838,"implemented":true,"kind":"function","modifiers":[{"id":24771,"kind":"modifierInvocation","modifierName":{"id":24770,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":23720,"src":"13937:20:95"},"nodeType":"ModifierInvocation","src":"13937:20:95"}],"name":"setAssetEModeCategory","nameLocation":"13849:21:95","nodeType":"FunctionDefinition","overrides":{"id":24769,"nodeType":"OverrideSpecifier","overrides":[],"src":"13928:8:95"},"parameters":{"id":24768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24765,"mutability":"mutable","name":"asset","nameLocation":"13884:5:95","nodeType":"VariableDeclaration","scope":24838,"src":"13876:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24764,"name":"address","nodeType":"ElementaryTypeName","src":"13876:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24767,"mutability":"mutable","name":"newCategoryId","nameLocation":"13901:13:95","nodeType":"VariableDeclaration","scope":24838,"src":"13895:19:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":24766,"name":"uint8","nodeType":"ElementaryTypeName","src":"13895:5:95","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"13870:48:95"},"returnParameters":{"id":24772,"nodeType":"ParameterList","parameters":[],"src":"13958:0:95"},"scope":25278,"src":"13840:748:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5502],"body":{"id":24884,"nodeType":"Block","src":"14750:354:95","statements":[{"assignments":[24853],"declarations":[{"constant":false,"id":24853,"mutability":"mutable","name":"currentConfig","nameLocation":"14797:13:95","nodeType":"VariableDeclaration","scope":24884,"src":"14756:54:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":24852,"nodeType":"UserDefinedTypeName","pathNode":{"id":24851,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"14756:33:95"},"referencedDeclaration":21318,"src":"14756:33:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":24858,"initialValue":{"arguments":[{"id":24856,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24841,"src":"14836:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":24854,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"14813:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"14813:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":24857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14813:29:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"14756:86:95"},{"assignments":[24860],"declarations":[{"constant":false,"id":24860,"mutability":"mutable","name":"oldUnbackedMintCap","nameLocation":"14856:18:95","nodeType":"VariableDeclaration","scope":24884,"src":"14848:26:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24859,"name":"uint256","nodeType":"ElementaryTypeName","src":"14848:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24864,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24861,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24853,"src":"14877:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24862,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getUnbackedMintCap","nodeType":"MemberAccess","referencedDeclaration":11595,"src":"14877:32:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":24863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14877:34:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14848:63:95"},{"expression":{"arguments":[{"id":24868,"name":"newUnbackedMintCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24843,"src":"14950:18:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24865,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24853,"src":"14917:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":24867,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"setUnbackedMintCap","nodeType":"MemberAccess","referencedDeclaration":11576,"src":"14917:32:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$_t_uint256_$returns$__$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory,uint256) pure"}},"id":24869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14917:52:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24870,"nodeType":"ExpressionStatement","src":"14917:52:95"},{"expression":{"arguments":[{"id":24874,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24841,"src":"14998:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24875,"name":"currentConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24853,"src":"15005:13:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}],"expression":{"id":24871,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"14975:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setConfiguration","nodeType":"MemberAccess","referencedDeclaration":4667,"src":"14975:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$__$","typeString":"function (address,struct DataTypes.ReserveConfigurationMap memory) external"}},"id":24876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14975:44:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24877,"nodeType":"ExpressionStatement","src":"14975:44:95"},{"eventCall":{"arguments":[{"id":24879,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24841,"src":"15053:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24880,"name":"oldUnbackedMintCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24860,"src":"15060:18:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24881,"name":"newUnbackedMintCap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24843,"src":"15080:18:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24878,"name":"UnbackedMintCapChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5245,"src":"15030:22:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":24882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15030:69:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24883,"nodeType":"EmitStatement","src":"15025:74:95"}]},"documentation":{"id":24839,"nodeType":"StructuredDocumentation","src":"14592:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"145f5892","id":24885,"implemented":true,"kind":"function","modifiers":[{"id":24847,"kind":"modifierInvocation","modifierName":{"id":24846,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":23720,"src":"14729:20:95"},"nodeType":"ModifierInvocation","src":"14729:20:95"}],"name":"setUnbackedMintCap","nameLocation":"14637:18:95","nodeType":"FunctionDefinition","overrides":{"id":24845,"nodeType":"OverrideSpecifier","overrides":[],"src":"14720:8:95"},"parameters":{"id":24844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24841,"mutability":"mutable","name":"asset","nameLocation":"14669:5:95","nodeType":"VariableDeclaration","scope":24885,"src":"14661:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24840,"name":"address","nodeType":"ElementaryTypeName","src":"14661:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24843,"mutability":"mutable","name":"newUnbackedMintCap","nameLocation":"14688:18:95","nodeType":"VariableDeclaration","scope":24885,"src":"14680:26:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24842,"name":"uint256","nodeType":"ElementaryTypeName","src":"14680:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14655:55:95"},"returnParameters":{"id":24848,"nodeType":"ParameterList","parameters":[],"src":"14750:0:95"},"scope":25278,"src":"14628:476:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5464],"body":{"id":24924,"nodeType":"Block","src":"15289:331:95","statements":[{"assignments":[24900],"declarations":[{"constant":false,"id":24900,"mutability":"mutable","name":"reserve","nameLocation":"15324:7:95","nodeType":"VariableDeclaration","scope":24924,"src":"15295:36:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":24899,"nodeType":"UserDefinedTypeName","pathNode":{"id":24898,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"15295:21:95"},"referencedDeclaration":21315,"src":"15295:21:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":24905,"initialValue":{"arguments":[{"id":24903,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24888,"src":"15355:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":24901,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"15334:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4710,"src":"15334:20:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$21315_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":24904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15334:27:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"15295:66:95"},{"assignments":[24907],"declarations":[{"constant":false,"id":24907,"mutability":"mutable","name":"oldRateStrategyAddress","nameLocation":"15375:22:95","nodeType":"VariableDeclaration","scope":24924,"src":"15367:30:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24906,"name":"address","nodeType":"ElementaryTypeName","src":"15367:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":24910,"initialValue":{"expression":{"id":24908,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24900,"src":"15400:7:95","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":24909,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":21308,"src":"15400:35:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"15367:68:95"},{"expression":{"arguments":[{"id":24914,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24888,"src":"15485:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24915,"name":"newRateStrategyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24890,"src":"15492:22:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":24911,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"15441:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setReserveInterestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":4658,"src":"15441:43:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":24916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15441:74:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24917,"nodeType":"ExpressionStatement","src":"15441:74:95"},{"eventCall":{"arguments":[{"id":24919,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24888,"src":"15561:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24920,"name":"oldRateStrategyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24907,"src":"15568:22:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24921,"name":"newRateStrategyAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24890,"src":"15592:22:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":24918,"name":"ReserveInterestRateStrategyChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5278,"src":"15526:34:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":24922,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15526:89:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24923,"nodeType":"EmitStatement","src":"15521:94:95"}]},"documentation":{"id":24886,"nodeType":"StructuredDocumentation","src":"15108:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"1d2118f9","id":24925,"implemented":true,"kind":"function","modifiers":[{"id":24894,"kind":"modifierInvocation","modifierName":{"id":24893,"name":"onlyRiskOrPoolAdmins","nodeType":"IdentifierPath","referencedDeclaration":23720,"src":"15268:20:95"},"nodeType":"ModifierInvocation","src":"15268:20:95"}],"name":"setReserveInterestRateStrategyAddress","nameLocation":"15153:37:95","nodeType":"FunctionDefinition","overrides":{"id":24892,"nodeType":"OverrideSpecifier","overrides":[],"src":"15259:8:95"},"parameters":{"id":24891,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24888,"mutability":"mutable","name":"asset","nameLocation":"15204:5:95","nodeType":"VariableDeclaration","scope":24925,"src":"15196:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24887,"name":"address","nodeType":"ElementaryTypeName","src":"15196:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24890,"mutability":"mutable","name":"newRateStrategyAddress","nameLocation":"15223:22:95","nodeType":"VariableDeclaration","scope":24925,"src":"15215:30:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24889,"name":"address","nodeType":"ElementaryTypeName","src":"15215:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15190:59:95"},"returnParameters":{"id":24895,"nodeType":"ParameterList","parameters":[],"src":"15289:0:95"},"scope":25278,"src":"15144:476:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5470],"body":{"id":24973,"nodeType":"Block","src":"15732:214:95","statements":[{"assignments":[24938],"declarations":[{"constant":false,"id":24938,"mutability":"mutable","name":"reserves","nameLocation":"15755:8:95","nodeType":"VariableDeclaration","scope":24973,"src":"15738:25:95","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":24936,"name":"address","nodeType":"ElementaryTypeName","src":"15738:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":24937,"nodeType":"ArrayTypeName","src":"15738:9:95","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":24942,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24939,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"15766:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReservesList","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"15766:21:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view external returns (address[] memory)"}},"id":24941,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15766:23:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"15738:51:95"},{"body":{"id":24971,"nodeType":"Block","src":"15842:100:95","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":24961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":24954,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24938,"src":"15854:8:95","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":24956,"indexExpression":{"id":24955,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24944,"src":"15863:1:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15854:11:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":24959,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15877:1:95","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":24958,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15869:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24957,"name":"address","nodeType":"ElementaryTypeName","src":"15869:7:95","typeDescriptions":{}}},"id":24960,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15869:10:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"15854:25:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24970,"nodeType":"IfStatement","src":"15850:86:95","trueBody":{"id":24969,"nodeType":"Block","src":"15881:55:95","statements":[{"expression":{"arguments":[{"baseExpression":{"id":24963,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24938,"src":"15907:8:95","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":24965,"indexExpression":{"id":24964,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24944,"src":"15916:1:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15907:11:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24966,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24928,"src":"15920:6:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":24962,"name":"setReservePause","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24283,"src":"15891:15:95","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":24967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15891:36:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24968,"nodeType":"ExpressionStatement","src":"15891:36:95"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24947,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24944,"src":"15816:1:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":24948,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24938,"src":"15820:8:95","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":24949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"15820:15:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15816:19:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24972,"initializationExpression":{"assignments":[24944],"declarations":[{"constant":false,"id":24944,"mutability":"mutable","name":"i","nameLocation":"15809:1:95","nodeType":"VariableDeclaration","scope":24972,"src":"15801:9:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24943,"name":"uint256","nodeType":"ElementaryTypeName","src":"15801:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24946,"initialValue":{"hexValue":"30","id":24945,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15813:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15801:13:95"},"loopExpression":{"expression":{"id":24952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"15837:3:95","subExpression":{"id":24951,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24944,"src":"15837:1:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24953,"nodeType":"ExpressionStatement","src":"15837:3:95"},"nodeType":"ForStatement","src":"15796:146:95"}]},"documentation":{"id":24926,"nodeType":"StructuredDocumentation","src":"15624:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"7641f3d9","id":24974,"implemented":true,"kind":"function","modifiers":[{"id":24932,"kind":"modifierInvocation","modifierName":{"id":24931,"name":"onlyEmergencyAdmin","nodeType":"IdentifierPath","referencedDeclaration":23696,"src":"15713:18:95"},"nodeType":"ModifierInvocation","src":"15713:18:95"}],"name":"setPoolPause","nameLocation":"15669:12:95","nodeType":"FunctionDefinition","overrides":{"id":24930,"nodeType":"OverrideSpecifier","overrides":[],"src":"15704:8:95"},"parameters":{"id":24929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24928,"mutability":"mutable","name":"paused","nameLocation":"15687:6:95","nodeType":"VariableDeclaration","scope":24974,"src":"15682:11:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24927,"name":"bool","nodeType":"ElementaryTypeName","src":"15682:4:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15681:13:95"},"returnParameters":{"id":24933,"nodeType":"ParameterList","parameters":[],"src":"15732:0:95"},"scope":25278,"src":"15660:286:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5538],"body":{"id":25009,"nodeType":"Block","src":"16081:330:95","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24984,"name":"newBridgeProtocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24977,"src":"16102:20:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":24985,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21132,"src":"16126:14:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PercentageMath_$21132_$","typeString":"type(library PercentageMath)"}},"id":24986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PERCENTAGE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":21104,"src":"16126:32:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16102:56:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":24988,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"16166:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":24989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"BRIDGE_PROTOCOL_FEE_INVALID","nodeType":"MemberAccess","referencedDeclaration":12437,"src":"16166:34:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":24983,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16087:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":24990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16087:119:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24991,"nodeType":"ExpressionStatement","src":"16087:119:95"},{"assignments":[24993],"declarations":[{"constant":false,"id":24993,"mutability":"mutable","name":"oldBridgeProtocolFee","nameLocation":"16220:20:95","nodeType":"VariableDeclaration","scope":25009,"src":"16212:28:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24992,"name":"uint256","nodeType":"ElementaryTypeName","src":"16212:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24997,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24994,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"16243:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":24995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"BRIDGE_PROTOCOL_FEE","nodeType":"MemberAccess","referencedDeclaration":4818,"src":"16243:25:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":24996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16243:27:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16212:58:95"},{"expression":{"arguments":[{"id":25001,"name":"newBridgeProtocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24977,"src":"16306:20:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24998,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"16276:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":25000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"updateBridgeProtocolFee","nodeType":"MemberAccess","referencedDeclaration":4754,"src":"16276:29:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":25002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16276:51:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25003,"nodeType":"ExpressionStatement","src":"16276:51:95"},{"eventCall":{"arguments":[{"id":25005,"name":"oldBridgeProtocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24993,"src":"16363:20:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25006,"name":"newBridgeProtocolFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24977,"src":"16385:20:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":25004,"name":"BridgeProtocolFeeUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5330,"src":"16338:24:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":25007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16338:68:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25008,"nodeType":"EmitStatement","src":"16333:73:95"}]},"documentation":{"id":24975,"nodeType":"StructuredDocumentation","src":"15950:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"3036b439","id":25010,"implemented":true,"kind":"function","modifiers":[{"id":24981,"kind":"modifierInvocation","modifierName":{"id":24980,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":23688,"src":"16067:13:95"},"nodeType":"ModifierInvocation","src":"16067:13:95"}],"name":"updateBridgeProtocolFee","nameLocation":"15995:23:95","nodeType":"FunctionDefinition","overrides":{"id":24979,"nodeType":"OverrideSpecifier","overrides":[],"src":"16058:8:95"},"parameters":{"id":24978,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24977,"mutability":"mutable","name":"newBridgeProtocolFee","nameLocation":"16027:20:95","nodeType":"VariableDeclaration","scope":25010,"src":"16019:28:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24976,"name":"uint256","nodeType":"ElementaryTypeName","src":"16019:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16018:30:95"},"returnParameters":{"id":24982,"nodeType":"ParameterList","parameters":[],"src":"16081:0:95"},"scope":25278,"src":"15986:425:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5544],"body":{"id":25048,"nodeType":"Block","src":"16562:395:95","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25020,"name":"newFlashloanPremiumTotal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25013,"src":"16583:24:95","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":25021,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21132,"src":"16611:14:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PercentageMath_$21132_$","typeString":"type(library PercentageMath)"}},"id":25022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PERCENTAGE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":21104,"src":"16611:32:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16583:60:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":25024,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"16651:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":25025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FLASHLOAN_PREMIUM_INVALID","nodeType":"MemberAccess","referencedDeclaration":12428,"src":"16651:32:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":25019,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"16568:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16568:121:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25027,"nodeType":"ExpressionStatement","src":"16568:121:95"},{"assignments":[25029],"declarations":[{"constant":false,"id":25029,"mutability":"mutable","name":"oldFlashloanPremiumTotal","nameLocation":"16703:24:95","nodeType":"VariableDeclaration","scope":25048,"src":"16695:32:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":25028,"name":"uint128","nodeType":"ElementaryTypeName","src":"16695:7:95","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":25033,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25030,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"16730:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":25031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FLASHLOAN_PREMIUM_TOTAL","nodeType":"MemberAccess","referencedDeclaration":4812,"src":"16730:29:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint128_$","typeString":"function () view external returns (uint128)"}},"id":25032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16730:31:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"16695:66:95"},{"expression":{"arguments":[{"id":25037,"name":"newFlashloanPremiumTotal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25013,"src":"16797:24:95","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25038,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"16823:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":25039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FLASHLOAN_PREMIUM_TO_PROTOCOL","nodeType":"MemberAccess","referencedDeclaration":4824,"src":"16823:35:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint128_$","typeString":"function () view external returns (uint128)"}},"id":25040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16823:37:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":25034,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"16767:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":25036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"updateFlashloanPremiums","nodeType":"MemberAccess","referencedDeclaration":4762,"src":"16767:29:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint128_$_t_uint128_$returns$__$","typeString":"function (uint128,uint128) external"}},"id":25041,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16767:94:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25042,"nodeType":"ExpressionStatement","src":"16767:94:95"},{"eventCall":{"arguments":[{"id":25044,"name":"oldFlashloanPremiumTotal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25029,"src":"16901:24:95","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":25045,"name":"newFlashloanPremiumTotal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25013,"src":"16927:24:95","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":25043,"name":"FlashloanPremiumTotalUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5337,"src":"16872:28:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$_t_uint128_$returns$__$","typeString":"function (uint128,uint128)"}},"id":25046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16872:80:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25047,"nodeType":"EmitStatement","src":"16867:85:95"}]},"documentation":{"id":25011,"nodeType":"StructuredDocumentation","src":"16415:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"8a493676","id":25049,"implemented":true,"kind":"function","modifiers":[{"id":25017,"kind":"modifierInvocation","modifierName":{"id":25016,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":23688,"src":"16548:13:95"},"nodeType":"ModifierInvocation","src":"16548:13:95"}],"name":"updateFlashloanPremiumTotal","nameLocation":"16460:27:95","nodeType":"FunctionDefinition","overrides":{"id":25015,"nodeType":"OverrideSpecifier","overrides":[],"src":"16539:8:95"},"parameters":{"id":25014,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25013,"mutability":"mutable","name":"newFlashloanPremiumTotal","nameLocation":"16501:24:95","nodeType":"VariableDeclaration","scope":25049,"src":"16493:32:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":25012,"name":"uint128","nodeType":"ElementaryTypeName","src":"16493:7:95","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"16487:42:95"},"returnParameters":{"id":25018,"nodeType":"ParameterList","parameters":[],"src":"16562:0:95"},"scope":25278,"src":"16451:506:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[5550],"body":{"id":25087,"nodeType":"Block","src":"17118:443:95","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25059,"name":"newFlashloanPremiumToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25052,"src":"17139:29:95","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":25060,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21132,"src":"17172:14:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PercentageMath_$21132_$","typeString":"type(library PercentageMath)"}},"id":25061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PERCENTAGE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":21104,"src":"17172:32:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17139:65:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":25063,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"17212:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":25064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FLASHLOAN_PREMIUM_INVALID","nodeType":"MemberAccess","referencedDeclaration":12428,"src":"17212:32:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":25058,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17124:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17124:126:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25066,"nodeType":"ExpressionStatement","src":"17124:126:95"},{"assignments":[25068],"declarations":[{"constant":false,"id":25068,"mutability":"mutable","name":"oldFlashloanPremiumToProtocol","nameLocation":"17264:29:95","nodeType":"VariableDeclaration","scope":25087,"src":"17256:37:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":25067,"name":"uint128","nodeType":"ElementaryTypeName","src":"17256:7:95","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":25072,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25069,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"17296:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":25070,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FLASHLOAN_PREMIUM_TO_PROTOCOL","nodeType":"MemberAccess","referencedDeclaration":4824,"src":"17296:35:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint128_$","typeString":"function () view external returns (uint128)"}},"id":25071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17296:37:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"17256:77:95"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25076,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"17369:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":25077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"FLASHLOAN_PREMIUM_TOTAL","nodeType":"MemberAccess","referencedDeclaration":4812,"src":"17369:29:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint128_$","typeString":"function () view external returns (uint128)"}},"id":25078,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17369:31:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":25079,"name":"newFlashloanPremiumToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25052,"src":"17402:29:95","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":25073,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23680,"src":"17339:5:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":25075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"updateFlashloanPremiums","nodeType":"MemberAccess","referencedDeclaration":4762,"src":"17339:29:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint128_$_t_uint128_$returns$__$","typeString":"function (uint128,uint128) external"}},"id":25080,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17339:93:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25081,"nodeType":"ExpressionStatement","src":"17339:93:95"},{"eventCall":{"arguments":[{"id":25083,"name":"oldFlashloanPremiumToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25068,"src":"17484:29:95","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":25084,"name":"newFlashloanPremiumToProtocol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25052,"src":"17521:29:95","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":25082,"name":"FlashloanPremiumToProtocolUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5344,"src":"17443:33:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint128_$_t_uint128_$returns$__$","typeString":"function (uint128,uint128)"}},"id":25085,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17443:113:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25086,"nodeType":"EmitStatement","src":"17438:118:95"}]},"documentation":{"id":25050,"nodeType":"StructuredDocumentation","src":"16961:33:95","text":"@inheritdoc IPoolConfigurator"},"functionSelector":"1df970bd","id":25088,"implemented":true,"kind":"function","modifiers":[{"id":25056,"kind":"modifierInvocation","modifierName":{"id":25055,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":23688,"src":"17104:13:95"},"nodeType":"ModifierInvocation","src":"17104:13:95"}],"name":"updateFlashloanPremiumToProtocol","nameLocation":"17006:32:95","nodeType":"FunctionDefinition","overrides":{"id":25054,"nodeType":"OverrideSpecifier","overrides":[],"src":"17095:8:95"},"parameters":{"id":25053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25052,"mutability":"mutable","name":"newFlashloanPremiumToProtocol","nameLocation":"17052:29:95","nodeType":"VariableDeclaration","scope":25088,"src":"17044:37:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":25051,"name":"uint128","nodeType":"ElementaryTypeName","src":"17044:7:95","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"17038:47:95"},"returnParameters":{"id":25057,"nodeType":"ParameterList","parameters":[],"src":"17118:0:95"},"scope":25278,"src":"16997:564:95","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":25118,"nodeType":"Block","src":"17621:270:95","statements":[{"assignments":[null,25094,25096,null,null,null,null,null,null,null,null,null],"declarations":[null,{"constant":false,"id":25094,"mutability":"mutable","name":"accruedToTreasury","nameLocation":"17638:17:95","nodeType":"VariableDeclaration","scope":25118,"src":"17630:25:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25093,"name":"uint256","nodeType":"ElementaryTypeName","src":"17630:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25096,"mutability":"mutable","name":"totalATokens","nameLocation":"17665:12:95","nodeType":"VariableDeclaration","scope":25118,"src":"17657:20:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25095,"name":"uint256","nodeType":"ElementaryTypeName","src":"17657:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null,null,null,null,null,null,null,null,null],"id":25105,"initialValue":{"arguments":[{"id":25103,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25090,"src":"17786:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25098,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23677,"src":"17724:18:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":25099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPoolDataProvider","nodeType":"MemberAccess","referencedDeclaration":5062,"src":"17724:38:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":25100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17724:40:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25097,"name":"IPoolDataProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"17699:17:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPoolDataProvider_$5791_$","typeString":"type(contract IPoolDataProvider)"}},"id":25101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17699:71:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPoolDataProvider_$5791","typeString":"contract IPoolDataProvider"}},"id":25102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":5720,"src":"17699:86:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint40_$","typeString":"function (address) view external returns (uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint40)"}},"id":25104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17699:93:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint40_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint40)"}},"nodeType":"VariableDeclarationStatement","src":"17627:165:95"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":25113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25107,"name":"totalATokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25096,"src":"17807:12:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":25108,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17823:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17807:17:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25110,"name":"accruedToTreasury","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25094,"src":"17828:17:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":25111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17849:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17828:22:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17807:43:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":25114,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"17852:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":25115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_LIQUIDITY_NOT_ZERO","nodeType":"MemberAccess","referencedDeclaration":12425,"src":"17852:33:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":25106,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"17799:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17799:87:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25117,"nodeType":"ExpressionStatement","src":"17799:87:95"}]},"id":25119,"implemented":true,"kind":"function","modifiers":[],"name":"_checkNoSuppliers","nameLocation":"17574:17:95","nodeType":"FunctionDefinition","parameters":{"id":25091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25090,"mutability":"mutable","name":"asset","nameLocation":"17600:5:95","nodeType":"VariableDeclaration","scope":25119,"src":"17592:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25089,"name":"address","nodeType":"ElementaryTypeName","src":"17592:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17591:15:95"},"returnParameters":{"id":25092,"nodeType":"ParameterList","parameters":[],"src":"17621:0:95"},"scope":25278,"src":"17565:326:95","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":25143,"nodeType":"Block","src":"17951:181:95","statements":[{"assignments":[25125],"declarations":[{"constant":false,"id":25125,"mutability":"mutable","name":"totalDebt","nameLocation":"17965:9:95","nodeType":"VariableDeclaration","scope":25143,"src":"17957:17:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25124,"name":"uint256","nodeType":"ElementaryTypeName","src":"17957:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":25134,"initialValue":{"arguments":[{"id":25132,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25121,"src":"18057:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25127,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23677,"src":"17995:18:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":25128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPoolDataProvider","nodeType":"MemberAccess","referencedDeclaration":5062,"src":"17995:38:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":25129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17995:40:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25126,"name":"IPoolDataProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5791,"src":"17977:17:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPoolDataProvider_$5791_$","typeString":"type(contract IPoolDataProvider)"}},"id":25130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17977:59:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPoolDataProvider_$5791","typeString":"contract IPoolDataProvider"}},"id":25131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getTotalDebt","nodeType":"MemberAccess","referencedDeclaration":5736,"src":"17977:72:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":25133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17977:91:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17957:111:95"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25136,"name":"totalDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25125,"src":"18082:9:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":25137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18095:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"18082:14:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":25139,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"18098:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":25140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"RESERVE_DEBT_NOT_ZERO","nodeType":"MemberAccess","referencedDeclaration":12638,"src":"18098:28:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":25135,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18074:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18074:53:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25142,"nodeType":"ExpressionStatement","src":"18074:53:95"}]},"id":25144,"implemented":true,"kind":"function","modifiers":[],"name":"_checkNoBorrowers","nameLocation":"17904:17:95","nodeType":"FunctionDefinition","parameters":{"id":25122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25121,"mutability":"mutable","name":"asset","nameLocation":"17930:5:95","nodeType":"VariableDeclaration","scope":25144,"src":"17922:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25120,"name":"address","nodeType":"ElementaryTypeName","src":"17922:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17921:15:95"},"returnParameters":{"id":25123,"nodeType":"ParameterList","parameters":[],"src":"17951:0:95"},"scope":25278,"src":"17895:237:95","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":25166,"nodeType":"Block","src":"18176:162:95","statements":[{"assignments":[25149],"declarations":[{"constant":false,"id":25149,"mutability":"mutable","name":"aclManager","nameLocation":"18194:10:95","nodeType":"VariableDeclaration","scope":25166,"src":"18182:22:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"},"typeName":{"id":25148,"nodeType":"UserDefinedTypeName","pathNode":{"id":25147,"name":"IACLManager","nodeType":"IdentifierPath","referencedDeclaration":3718,"src":"18182:11:95"},"referencedDeclaration":3718,"src":"18182:11:95","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"visibility":"internal"}],"id":25155,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25151,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23677,"src":"18219:18:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":25152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLManager","nodeType":"MemberAccess","referencedDeclaration":5026,"src":"18219:32:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":25153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18219:34:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25150,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3718,"src":"18207:11:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IACLManager_$3718_$","typeString":"type(contract IACLManager)"}},"id":25154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18207:47:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"nodeType":"VariableDeclarationStatement","src":"18182:72:95"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":25159,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18291:3:95","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":25160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"18291:10:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":25157,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25149,"src":"18268:10:95","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"id":25158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isPoolAdmin","nodeType":"MemberAccess","referencedDeclaration":3617,"src":"18268:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":25161,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18268:34:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":25162,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"18304:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":25163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_NOT_POOL_ADMIN","nodeType":"MemberAccess","referencedDeclaration":12374,"src":"18304:28:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":25156,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18260:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18260:73:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25165,"nodeType":"ExpressionStatement","src":"18260:73:95"}]},"id":25167,"implemented":true,"kind":"function","modifiers":[],"name":"_onlyPoolAdmin","nameLocation":"18145:14:95","nodeType":"FunctionDefinition","parameters":{"id":25145,"nodeType":"ParameterList","parameters":[],"src":"18159:2:95"},"returnParameters":{"id":25146,"nodeType":"ParameterList","parameters":[],"src":"18176:0:95"},"scope":25278,"src":"18136:202:95","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":25189,"nodeType":"Block","src":"18387:172:95","statements":[{"assignments":[25172],"declarations":[{"constant":false,"id":25172,"mutability":"mutable","name":"aclManager","nameLocation":"18405:10:95","nodeType":"VariableDeclaration","scope":25189,"src":"18393:22:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"},"typeName":{"id":25171,"nodeType":"UserDefinedTypeName","pathNode":{"id":25170,"name":"IACLManager","nodeType":"IdentifierPath","referencedDeclaration":3718,"src":"18393:11:95"},"referencedDeclaration":3718,"src":"18393:11:95","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"visibility":"internal"}],"id":25178,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25174,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23677,"src":"18430:18:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":25175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLManager","nodeType":"MemberAccess","referencedDeclaration":5026,"src":"18430:32:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":25176,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18430:34:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25173,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3718,"src":"18418:11:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IACLManager_$3718_$","typeString":"type(contract IACLManager)"}},"id":25177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18418:47:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"nodeType":"VariableDeclarationStatement","src":"18393:72:95"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":25182,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18507:3:95","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":25183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"18507:10:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":25180,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25172,"src":"18479:10:95","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"id":25181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isEmergencyAdmin","nodeType":"MemberAccess","referencedDeclaration":3637,"src":"18479:27:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":25184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18479:39:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":25185,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"18520:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":25186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_NOT_EMERGENCY_ADMIN","nodeType":"MemberAccess","referencedDeclaration":12377,"src":"18520:33:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":25179,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18471:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18471:83:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25188,"nodeType":"ExpressionStatement","src":"18471:83:95"}]},"id":25190,"implemented":true,"kind":"function","modifiers":[],"name":"_onlyEmergencyAdmin","nameLocation":"18351:19:95","nodeType":"FunctionDefinition","parameters":{"id":25168,"nodeType":"ParameterList","parameters":[],"src":"18370:2:95"},"returnParameters":{"id":25169,"nodeType":"ParameterList","parameters":[],"src":"18387:0:95"},"scope":25278,"src":"18342:217:95","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":25218,"nodeType":"Block","src":"18614:236:95","statements":[{"assignments":[25195],"declarations":[{"constant":false,"id":25195,"mutability":"mutable","name":"aclManager","nameLocation":"18632:10:95","nodeType":"VariableDeclaration","scope":25218,"src":"18620:22:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"},"typeName":{"id":25194,"nodeType":"UserDefinedTypeName","pathNode":{"id":25193,"name":"IACLManager","nodeType":"IdentifierPath","referencedDeclaration":3718,"src":"18620:11:95"},"referencedDeclaration":3718,"src":"18620:11:95","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"visibility":"internal"}],"id":25201,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25197,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23677,"src":"18657:18:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":25198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLManager","nodeType":"MemberAccess","referencedDeclaration":5026,"src":"18657:32:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":25199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18657:34:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25196,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3718,"src":"18645:11:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IACLManager_$3718_$","typeString":"type(contract IACLManager)"}},"id":25200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18645:47:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"nodeType":"VariableDeclarationStatement","src":"18620:72:95"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":25213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":25205,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18736:3:95","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":25206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"18736:10:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":25203,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25195,"src":"18713:10:95","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"id":25204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isPoolAdmin","nodeType":"MemberAccess","referencedDeclaration":3617,"src":"18713:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":25207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18713:34:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"expression":{"id":25210,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18779:3:95","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":25211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"18779:10:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":25208,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25195,"src":"18751:10:95","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"id":25209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isEmergencyAdmin","nodeType":"MemberAccess","referencedDeclaration":3637,"src":"18751:27:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":25212,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18751:39:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"18713:77:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":25214,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"18798:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":25215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_NOT_POOL_OR_EMERGENCY_ADMIN","nodeType":"MemberAccess","referencedDeclaration":12380,"src":"18798:41:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":25202,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18698:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18698:147:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25217,"nodeType":"ExpressionStatement","src":"18698:147:95"}]},"id":25219,"implemented":true,"kind":"function","modifiers":[],"name":"_onlyPoolOrEmergencyAdmin","nameLocation":"18572:25:95","nodeType":"FunctionDefinition","parameters":{"id":25191,"nodeType":"ParameterList","parameters":[],"src":"18597:2:95"},"returnParameters":{"id":25192,"nodeType":"ParameterList","parameters":[],"src":"18614:0:95"},"scope":25278,"src":"18563:287:95","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":25247,"nodeType":"Block","src":"18909:243:95","statements":[{"assignments":[25224],"declarations":[{"constant":false,"id":25224,"mutability":"mutable","name":"aclManager","nameLocation":"18927:10:95","nodeType":"VariableDeclaration","scope":25247,"src":"18915:22:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"},"typeName":{"id":25223,"nodeType":"UserDefinedTypeName","pathNode":{"id":25222,"name":"IACLManager","nodeType":"IdentifierPath","referencedDeclaration":3718,"src":"18915:11:95"},"referencedDeclaration":3718,"src":"18915:11:95","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"visibility":"internal"}],"id":25230,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25226,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23677,"src":"18952:18:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":25227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLManager","nodeType":"MemberAccess","referencedDeclaration":5026,"src":"18952:32:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":25228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18952:34:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25225,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3718,"src":"18940:11:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IACLManager_$3718_$","typeString":"type(contract IACLManager)"}},"id":25229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18940:47:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"nodeType":"VariableDeclarationStatement","src":"18915:72:95"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":25242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":25234,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19039:3:95","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":25235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"19039:10:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":25232,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25224,"src":"19008:10:95","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"id":25233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isAssetListingAdmin","nodeType":"MemberAccess","referencedDeclaration":3717,"src":"19008:30:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":25236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19008:42:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"expression":{"id":25239,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19077:3:95","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":25240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"19077:10:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":25237,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25224,"src":"19054:10:95","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"id":25238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isPoolAdmin","nodeType":"MemberAccess","referencedDeclaration":3617,"src":"19054:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":25241,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19054:34:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19008:80:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":25243,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"19096:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":25244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN","nodeType":"MemberAccess","referencedDeclaration":12386,"src":"19096:45:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":25231,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"18993:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25245,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"18993:154:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25246,"nodeType":"ExpressionStatement","src":"18993:154:95"}]},"id":25248,"implemented":true,"kind":"function","modifiers":[],"name":"_onlyAssetListingOrPoolAdmins","nameLocation":"18863:29:95","nodeType":"FunctionDefinition","parameters":{"id":25220,"nodeType":"ParameterList","parameters":[],"src":"18892:2:95"},"returnParameters":{"id":25221,"nodeType":"ParameterList","parameters":[],"src":"18909:0:95"},"scope":25278,"src":"18854:298:95","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":25276,"nodeType":"Block","src":"19203:226:95","statements":[{"assignments":[25253],"declarations":[{"constant":false,"id":25253,"mutability":"mutable","name":"aclManager","nameLocation":"19221:10:95","nodeType":"VariableDeclaration","scope":25276,"src":"19209:22:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"},"typeName":{"id":25252,"nodeType":"UserDefinedTypeName","pathNode":{"id":25251,"name":"IACLManager","nodeType":"IdentifierPath","referencedDeclaration":3718,"src":"19209:11:95"},"referencedDeclaration":3718,"src":"19209:11:95","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"visibility":"internal"}],"id":25259,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25255,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23677,"src":"19246:18:95","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":25256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLManager","nodeType":"MemberAccess","referencedDeclaration":5026,"src":"19246:32:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":25257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19246:34:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25254,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3718,"src":"19234:11:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IACLManager_$3718_$","typeString":"type(contract IACLManager)"}},"id":25258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19234:47:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"nodeType":"VariableDeclarationStatement","src":"19209:72:95"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":25271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":25263,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19325:3:95","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":25264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"19325:10:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":25261,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25253,"src":"19302:10:95","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"id":25262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isRiskAdmin","nodeType":"MemberAccess","referencedDeclaration":3657,"src":"19302:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":25265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19302:34:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"expression":{"id":25268,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19363:3:95","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":25269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"19363:10:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":25266,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25253,"src":"19340:10:95","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"id":25267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isPoolAdmin","nodeType":"MemberAccess","referencedDeclaration":3617,"src":"19340:22:95","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":25270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19340:34:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19302:72:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":25272,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"19382:6:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":25273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_NOT_RISK_OR_POOL_ADMIN","nodeType":"MemberAccess","referencedDeclaration":12383,"src":"19382:36:95","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":25260,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"19287:7:95","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"19287:137:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25275,"nodeType":"ExpressionStatement","src":"19287:137:95"}]},"id":25277,"implemented":true,"kind":"function","modifiers":[],"name":"_onlyRiskOrPoolAdmins","nameLocation":"19165:21:95","nodeType":"FunctionDefinition","parameters":{"id":25249,"nodeType":"ParameterList","parameters":[],"src":"19186:2:95"},"returnParameters":{"id":25250,"nodeType":"ParameterList","parameters":[],"src":"19203:0:95"},"scope":25278,"src":"19156:273:95","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":25279,"src":"1063:18368:95","usedErrors":[]}],"src":"37:19395:95"},"id":95},"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol","exportedSymbols":{"DataTypes":[21633],"PoolStorage":[25335],"ReserveConfiguration":[11857],"ReserveLogic":[18377],"UserConfiguration":[12368]},"id":25336,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":25280,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:96"},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"../libraries/configuration/UserConfiguration.sol","id":25282,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25336,"sourceUnit":12369,"src":"63:83:96","symbolAliases":[{"foreign":{"id":25281,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:17:96","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"../libraries/configuration/ReserveConfiguration.sol","id":25284,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25336,"sourceUnit":11858,"src":"147:89:96","symbolAliases":[{"foreign":{"id":25283,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"155:20:96","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol","file":"../libraries/logic/ReserveLogic.sol","id":25286,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25336,"sourceUnit":18378,"src":"237:65:96","symbolAliases":[{"foreign":{"id":25285,"name":"ReserveLogic","nodeType":"Identifier","overloadedDeclarations":[],"src":"245:12:96","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"../libraries/types/DataTypes.sol","id":25288,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25336,"sourceUnit":21634,"src":"303:59:96","symbolAliases":[{"foreign":{"id":25287,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"311:9:96","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"PoolStorage","contractDependencies":[],"contractKind":"contract","documentation":{"id":25289,"nodeType":"StructuredDocumentation","src":"364:163:96","text":" @title PoolStorage\n @author Aave\n @notice Contract used as storage of the Pool contract.\n @dev It defines the storage layout of the Pool contract."},"fullyImplemented":true,"id":25335,"linearizedBaseContracts":[25335],"name":"PoolStorage","nameLocation":"537:11:96","nodeType":"ContractDefinition","nodes":[{"id":25293,"libraryName":{"id":25290,"name":"ReserveLogic","nodeType":"IdentifierPath","referencedDeclaration":18377,"src":"559:12:96"},"nodeType":"UsingForDirective","src":"553:45:96","typeName":{"id":25292,"nodeType":"UserDefinedTypeName","pathNode":{"id":25291,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"576:21:96"},"referencedDeclaration":21315,"src":"576:21:96","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},{"id":25297,"libraryName":{"id":25294,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":11857,"src":"607:20:96"},"nodeType":"UsingForDirective","src":"601:65:96","typeName":{"id":25296,"nodeType":"UserDefinedTypeName","pathNode":{"id":25295,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"632:33:96"},"referencedDeclaration":21318,"src":"632:33:96","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"id":25301,"libraryName":{"id":25298,"name":"UserConfiguration","nodeType":"IdentifierPath","referencedDeclaration":12368,"src":"675:17:96"},"nodeType":"UsingForDirective","src":"669:59:96","typeName":{"id":25300,"nodeType":"UserDefinedTypeName","pathNode":{"id":25299,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"697:30:96"},"referencedDeclaration":21322,"src":"697:30:96","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},{"constant":false,"id":25306,"mutability":"mutable","name":"_reserves","nameLocation":"861:9:96","nodeType":"VariableDeclaration","scope":25335,"src":"810:60:96","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"typeName":{"id":25305,"keyType":{"id":25302,"name":"address","nodeType":"ElementaryTypeName","src":"818:7:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"810:41:96","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$","typeString":"mapping(address => struct DataTypes.ReserveData)"},"valueType":{"id":25304,"nodeType":"UserDefinedTypeName","pathNode":{"id":25303,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"829:21:96"},"referencedDeclaration":21315,"src":"829:21:96","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}}},"visibility":"internal"},{"constant":false,"id":25311,"mutability":"mutable","name":"_usersConfig","nameLocation":"1025:12:96","nodeType":"VariableDeclaration","scope":25335,"src":"965:72:96","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap)"},"typeName":{"id":25310,"keyType":{"id":25307,"name":"address","nodeType":"ElementaryTypeName","src":"973:7:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"965:50:96","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$","typeString":"mapping(address => struct DataTypes.UserConfigurationMap)"},"valueType":{"id":25309,"nodeType":"UserDefinedTypeName","pathNode":{"id":25308,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"984:30:96"},"referencedDeclaration":21322,"src":"984:30:96","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},"visibility":"internal"},{"constant":false,"id":25315,"mutability":"mutable","name":"_reservesList","nameLocation":"1224:13:96","nodeType":"VariableDeclaration","scope":25335,"src":"1187:50:96","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"typeName":{"id":25314,"keyType":{"id":25312,"name":"uint256","nodeType":"ElementaryTypeName","src":"1195:7:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"1187:27:96","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"},"valueType":{"id":25313,"name":"address","nodeType":"ElementaryTypeName","src":"1206:7:96","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":25320,"mutability":"mutable","name":"_eModeCategories","nameLocation":"1463:16:96","nodeType":"VariableDeclaration","scope":25335,"src":"1412:67:96","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"typeName":{"id":25319,"keyType":{"id":25316,"name":"uint8","nodeType":"ElementaryTypeName","src":"1420:5:96","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Mapping","src":"1412:41:96","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$","typeString":"mapping(uint8 => struct DataTypes.EModeCategory)"},"valueType":{"id":25318,"nodeType":"UserDefinedTypeName","pathNode":{"id":25317,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":21333,"src":"1429:23:96"},"referencedDeclaration":21333,"src":"1429:23:96","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory"}}},"visibility":"internal"},{"constant":false,"id":25324,"mutability":"mutable","name":"_usersEModeCategory","nameLocation":"1603:19:96","nodeType":"VariableDeclaration","scope":25335,"src":"1568:54:96","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"},"typeName":{"id":25323,"keyType":{"id":25321,"name":"address","nodeType":"ElementaryTypeName","src":"1576:7:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1568:25:96","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint8_$","typeString":"mapping(address => uint8)"},"valueType":{"id":25322,"name":"uint8","nodeType":"ElementaryTypeName","src":"1587:5:96","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}},"visibility":"internal"},{"constant":false,"id":25326,"mutability":"mutable","name":"_bridgeProtocolFee","nameLocation":"1694:18:96","nodeType":"VariableDeclaration","scope":25335,"src":"1677:35:96","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25325,"name":"uint256","nodeType":"ElementaryTypeName","src":"1677:7:96","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25328,"mutability":"mutable","name":"_flashLoanPremiumTotal","nameLocation":"1781:22:96","nodeType":"VariableDeclaration","scope":25335,"src":"1764:39:96","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":25327,"name":"uint128","nodeType":"ElementaryTypeName","src":"1764:7:96","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":25330,"mutability":"mutable","name":"_flashLoanPremiumToProtocol","nameLocation":"1892:27:96","nodeType":"VariableDeclaration","scope":25335,"src":"1875:44:96","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":25329,"name":"uint128","nodeType":"ElementaryTypeName","src":"1875:7:96","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":25332,"mutability":"mutable","name":"_maxStableRateBorrowSizePercent","nameLocation":"2027:31:96","nodeType":"VariableDeclaration","scope":25335,"src":"2011:47:96","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":25331,"name":"uint64","nodeType":"ElementaryTypeName","src":"2011:6:96","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":25334,"mutability":"mutable","name":"_reservesCount","nameLocation":"2194:14:96","nodeType":"VariableDeclaration","scope":25335,"src":"2178:30:96","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":25333,"name":"uint16","nodeType":"ElementaryTypeName","src":"2178:6:96","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"scope":25336,"src":"528:1683:96","usedErrors":[]}],"src":"37:2175:96"},"id":96},"@aave/core-v3/contracts/protocol/tokenization/AToken.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/AToken.sol","exportedSymbols":{"AToken":[25985],"EIP712Base":[27822],"Errors":[12642],"GPv2SafeERC20":[118],"IAToken":[3861],"IAaveIncentivesController":[3875],"IERC20":[1442],"IInitializableAToken":[4176],"IPool":[4860],"IncentivizedERC20":[28349],"SafeCast":[1966],"ScaledBalanceTokenBase":[28966],"VersionedInitializable":[10573],"WadRayMath":[21219]},"id":25986,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":25337,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:97"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../dependencies/openzeppelin/contracts/IERC20.sol","id":25339,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25986,"sourceUnit":1443,"src":"63:76:97","symbolAliases":[{"foreign":{"id":25338,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:6:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"../../dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":25341,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25986,"sourceUnit":119,"src":"140:84:97","symbolAliases":[{"foreign":{"id":25340,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"148:13:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"../../dependencies/openzeppelin/contracts/SafeCast.sol","id":25343,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25986,"sourceUnit":1967,"src":"225:80:97","symbolAliases":[{"foreign":{"id":25342,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"233:8:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol","file":"../libraries/aave-upgradeability/VersionedInitializable.sol","id":25345,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25986,"sourceUnit":10574,"src":"306:99:97","symbolAliases":[{"foreign":{"id":25344,"name":"VersionedInitializable","nodeType":"Identifier","overloadedDeclarations":[],"src":"314:22:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol","file":"../libraries/helpers/Errors.sol","id":25347,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25986,"sourceUnit":12643,"src":"406:55:97","symbolAliases":[{"foreign":{"id":25346,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"414:6:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol","file":"../libraries/math/WadRayMath.sol","id":25349,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25986,"sourceUnit":21220,"src":"462:60:97","symbolAliases":[{"foreign":{"id":25348,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"470:10:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":25351,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25986,"sourceUnit":4861,"src":"523:49:97","symbolAliases":[{"foreign":{"id":25350,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"531:5:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IAToken.sol","file":"../../interfaces/IAToken.sol","id":25353,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25986,"sourceUnit":3862,"src":"573:53:97","symbolAliases":[{"foreign":{"id":25352,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"581:7:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol","file":"../../interfaces/IAaveIncentivesController.sol","id":25355,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25986,"sourceUnit":3876,"src":"627:89:97","symbolAliases":[{"foreign":{"id":25354,"name":"IAaveIncentivesController","nodeType":"Identifier","overloadedDeclarations":[],"src":"635:25:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol","file":"../../interfaces/IInitializableAToken.sol","id":25357,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25986,"sourceUnit":4177,"src":"717:79:97","symbolAliases":[{"foreign":{"id":25356,"name":"IInitializableAToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"725:20:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol","file":"./base/ScaledBalanceTokenBase.sol","id":25359,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25986,"sourceUnit":28967,"src":"797:73:97","symbolAliases":[{"foreign":{"id":25358,"name":"ScaledBalanceTokenBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"805:22:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol","file":"./base/IncentivizedERC20.sol","id":25361,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25986,"sourceUnit":28350,"src":"871:63:97","symbolAliases":[{"foreign":{"id":25360,"name":"IncentivizedERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"879:17:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/base/EIP712Base.sol","file":"./base/EIP712Base.sol","id":25363,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25986,"sourceUnit":27823,"src":"935:49:97","symbolAliases":[{"foreign":{"id":25362,"name":"EIP712Base","nodeType":"Identifier","overloadedDeclarations":[],"src":"943:10:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":25365,"name":"VersionedInitializable","nodeType":"IdentifierPath","referencedDeclaration":10573,"src":"1135:22:97"},"id":25366,"nodeType":"InheritanceSpecifier","src":"1135:22:97"},{"baseName":{"id":25367,"name":"ScaledBalanceTokenBase","nodeType":"IdentifierPath","referencedDeclaration":28966,"src":"1159:22:97"},"id":25368,"nodeType":"InheritanceSpecifier","src":"1159:22:97"},{"baseName":{"id":25369,"name":"EIP712Base","nodeType":"IdentifierPath","referencedDeclaration":27822,"src":"1183:10:97"},"id":25370,"nodeType":"InheritanceSpecifier","src":"1183:10:97"},{"baseName":{"id":25371,"name":"IAToken","nodeType":"IdentifierPath","referencedDeclaration":3861,"src":"1195:7:97"},"id":25372,"nodeType":"InheritanceSpecifier","src":"1195:7:97"}],"canonicalName":"AToken","contractDependencies":[],"contractKind":"contract","documentation":{"id":25364,"nodeType":"StructuredDocumentation","src":"986:129:97","text":" @title Aave ERC20 AToken\n @author Aave\n @notice Implementation of the interest bearing token for the Aave protocol"},"fullyImplemented":true,"id":25985,"linearizedBaseContracts":[25985,3861,4176,27822,28966,5975,28499,28349,1464,1442,748,10573],"name":"AToken","nameLocation":"1125:6:97","nodeType":"ContractDefinition","nodes":[{"id":25375,"libraryName":{"id":25373,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":21219,"src":"1213:10:97"},"nodeType":"UsingForDirective","src":"1207:29:97","typeName":{"id":25374,"name":"uint256","nodeType":"ElementaryTypeName","src":"1228:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":25378,"libraryName":{"id":25376,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"1245:8:97"},"nodeType":"UsingForDirective","src":"1239:27:97","typeName":{"id":25377,"name":"uint256","nodeType":"ElementaryTypeName","src":"1258:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":25382,"libraryName":{"id":25379,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"1275:13:97"},"nodeType":"UsingForDirective","src":"1269:31:97","typeName":{"id":25381,"nodeType":"UserDefinedTypeName","pathNode":{"id":25380,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1293:6:97"},"referencedDeclaration":1442,"src":"1293:6:97","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"constant":true,"functionSelector":"30adf81f","id":25387,"mutability":"constant","name":"PERMIT_TYPEHASH","nameLocation":"1328:15:97","nodeType":"VariableDeclaration","scope":25985,"src":"1304:141:97","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25383,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1304:7:97","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"5065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529","id":25385,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1360:84:97","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":25384,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1350:9:97","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":25386,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1350:95:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"constant":true,"functionSelector":"0bd7ad3b","id":25390,"mutability":"constant","name":"ATOKEN_REVISION","nameLocation":"1474:15:97","nodeType":"VariableDeclaration","scope":25985,"src":"1450:45:97","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25388,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307831","id":25389,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1492:3:97","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x1"},"visibility":"public"},{"constant":false,"id":25392,"mutability":"mutable","name":"_treasury","nameLocation":"1517:9:97","nodeType":"VariableDeclaration","scope":25985,"src":"1500:26:97","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25391,"name":"address","nodeType":"ElementaryTypeName","src":"1500:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25394,"mutability":"mutable","name":"_underlyingAsset","nameLocation":"1547:16:97","nodeType":"VariableDeclaration","scope":25985,"src":"1530:33:97","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25393,"name":"address","nodeType":"ElementaryTypeName","src":"1530:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"baseFunctions":[10553],"body":{"id":25403,"nodeType":"Block","src":"1681:33:97","statements":[{"expression":{"id":25401,"name":"ATOKEN_REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25390,"src":"1694:15:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25400,"id":25402,"nodeType":"Return","src":"1687:22:97"}]},"documentation":{"id":25395,"nodeType":"StructuredDocumentation","src":"1568:38:97","text":"@inheritdoc VersionedInitializable"},"id":25404,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"1618:11:97","nodeType":"FunctionDefinition","overrides":{"id":25397,"nodeType":"OverrideSpecifier","overrides":[],"src":"1654:8:97"},"parameters":{"id":25396,"nodeType":"ParameterList","parameters":[],"src":"1629:2:97"},"returnParameters":{"id":25400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25399,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25404,"src":"1672:7:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25398,"name":"uint256","nodeType":"ElementaryTypeName","src":"1672:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1671:9:97"},"scope":25985,"src":"1609:105:97","stateMutability":"pure","virtual":true,"visibility":"internal"},{"body":{"id":25419,"nodeType":"Block","src":"1910:37:97","statements":[]},"documentation":{"id":25405,"nodeType":"StructuredDocumentation","src":"1718:82:97","text":" @dev Constructor.\n @param pool The address of the Pool contract"},"id":25420,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":25411,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25408,"src":"1858:4:97","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},{"hexValue":"41544f4b454e5f494d504c","id":25412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1864:13:97","typeDescriptions":{"typeIdentifier":"t_stringliteral_60246dc83bf76f5d3ca1e7624837503501076ebb1100263b4d28583c6b2aa1e0","typeString":"literal_string \"ATOKEN_IMPL\""},"value":"ATOKEN_IMPL"},{"hexValue":"41544f4b454e5f494d504c","id":25413,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1879:13:97","typeDescriptions":{"typeIdentifier":"t_stringliteral_60246dc83bf76f5d3ca1e7624837503501076ebb1100263b4d28583c6b2aa1e0","typeString":"literal_string \"ATOKEN_IMPL\""},"value":"ATOKEN_IMPL"},{"hexValue":"30","id":25414,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1894:1:97","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":25415,"kind":"baseConstructorSpecifier","modifierName":{"id":25410,"name":"ScaledBalanceTokenBase","nodeType":"IdentifierPath","referencedDeclaration":28966,"src":"1835:22:97"},"nodeType":"ModifierInvocation","src":"1835:61:97"},{"arguments":[],"id":25417,"kind":"baseConstructorSpecifier","modifierName":{"id":25416,"name":"EIP712Base","nodeType":"IdentifierPath","referencedDeclaration":27822,"src":"1897:10:97"},"nodeType":"ModifierInvocation","src":"1897:12:97"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":25409,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25408,"mutability":"mutable","name":"pool","nameLocation":"1826:4:97","nodeType":"VariableDeclaration","scope":25420,"src":"1820:10:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":25407,"nodeType":"UserDefinedTypeName","pathNode":{"id":25406,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"1820:5:97"},"referencedDeclaration":4860,"src":"1820:5:97","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"}],"src":"1814:20:97"},"returnParameters":{"id":25418,"nodeType":"ParameterList","parameters":[],"src":"1910:0:97"},"scope":25985,"src":"1803:144:97","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[4175],"body":{"id":25499,"nodeType":"Block","src":"2300:540:97","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"id":25448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25446,"name":"initializingPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25424,"src":"2314:16:97","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":25447,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27929,"src":"2334:4:97","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"src":"2314:24:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":25449,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"2340:6:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":25450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"POOL_ADDRESSES_DO_NOT_MATCH","nodeType":"MemberAccess","referencedDeclaration":12629,"src":"2340:34:97","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":25445,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2306:7:97","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2306:69:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25452,"nodeType":"ExpressionStatement","src":"2306:69:97"},{"expression":{"arguments":[{"id":25454,"name":"aTokenName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25435,"src":"2390:10:97","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":25453,"name":"_setName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28326,"src":"2381:8:97","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":25455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2381:20:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25456,"nodeType":"ExpressionStatement","src":"2381:20:97"},{"expression":{"arguments":[{"id":25458,"name":"aTokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25437,"src":"2418:12:97","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":25457,"name":"_setSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28337,"src":"2407:10:97","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":25459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2407:24:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25460,"nodeType":"ExpressionStatement","src":"2407:24:97"},{"expression":{"arguments":[{"id":25462,"name":"aTokenDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25433,"src":"2450:14:97","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":25461,"name":"_setDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28348,"src":"2437:12:97","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint8_$returns$__$","typeString":"function (uint8)"}},"id":25463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2437:28:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25464,"nodeType":"ExpressionStatement","src":"2437:28:97"},{"expression":{"id":25467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":25465,"name":"_treasury","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25392,"src":"2472:9:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":25466,"name":"treasury","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25426,"src":"2484:8:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2472:20:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":25468,"nodeType":"ExpressionStatement","src":"2472:20:97"},{"expression":{"id":25471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":25469,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25394,"src":"2498:16:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":25470,"name":"underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25428,"src":"2517:15:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2498:34:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":25472,"nodeType":"ExpressionStatement","src":"2498:34:97"},{"expression":{"id":25475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":25473,"name":"_incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27923,"src":"2538:21:97","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":25474,"name":"incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25431,"src":"2562:20:97","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"src":"2538:44:97","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"id":25476,"nodeType":"ExpressionStatement","src":"2538:44:97"},{"expression":{"id":25480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":25477,"name":"_domainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27742,"src":"2589:16:97","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":25478,"name":"_calculateDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27815,"src":"2608:25:97","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":25479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2608:27:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2589:46:97","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":25481,"nodeType":"ExpressionStatement","src":"2589:46:97"},{"eventCall":{"arguments":[{"id":25483,"name":"underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25428,"src":"2666:15:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":25486,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27929,"src":"2697:4:97","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}],"id":25485,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2689:7:97","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":25484,"name":"address","nodeType":"ElementaryTypeName","src":"2689:7:97","typeDescriptions":{}}},"id":25487,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2689:13:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25488,"name":"treasury","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25426,"src":"2710:8:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":25491,"name":"incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25431,"src":"2734:20:97","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}],"id":25490,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2726:7:97","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":25489,"name":"address","nodeType":"ElementaryTypeName","src":"2726:7:97","typeDescriptions":{}}},"id":25492,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2726:29:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25493,"name":"aTokenDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25433,"src":"2763:14:97","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":25494,"name":"aTokenName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25435,"src":"2785:10:97","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"id":25495,"name":"aTokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25437,"src":"2803:12:97","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"id":25496,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25439,"src":"2823:6:97","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":25482,"name":"Initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4153,"src":"2647:11:97","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint8_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,address,uint8,string memory,string memory,bytes memory)"}},"id":25497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2647:188:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25498,"nodeType":"EmitStatement","src":"2642:193:97"}]},"documentation":{"id":25421,"nodeType":"StructuredDocumentation","src":"1951:36:97","text":"@inheritdoc IInitializableAToken"},"functionSelector":"183fb413","id":25500,"implemented":true,"kind":"function","modifiers":[{"id":25443,"kind":"modifierInvocation","modifierName":{"id":25442,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":10547,"src":"2288:11:97"},"nodeType":"ModifierInvocation","src":"2288:11:97"}],"name":"initialize","nameLocation":"1999:10:97","nodeType":"FunctionDefinition","overrides":{"id":25441,"nodeType":"OverrideSpecifier","overrides":[],"src":"2279:8:97"},"parameters":{"id":25440,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25424,"mutability":"mutable","name":"initializingPool","nameLocation":"2021:16:97","nodeType":"VariableDeclaration","scope":25500,"src":"2015:22:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":25423,"nodeType":"UserDefinedTypeName","pathNode":{"id":25422,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"2015:5:97"},"referencedDeclaration":4860,"src":"2015:5:97","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"},{"constant":false,"id":25426,"mutability":"mutable","name":"treasury","nameLocation":"2051:8:97","nodeType":"VariableDeclaration","scope":25500,"src":"2043:16:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25425,"name":"address","nodeType":"ElementaryTypeName","src":"2043:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25428,"mutability":"mutable","name":"underlyingAsset","nameLocation":"2073:15:97","nodeType":"VariableDeclaration","scope":25500,"src":"2065:23:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25427,"name":"address","nodeType":"ElementaryTypeName","src":"2065:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25431,"mutability":"mutable","name":"incentivesController","nameLocation":"2120:20:97","nodeType":"VariableDeclaration","scope":25500,"src":"2094:46:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"},"typeName":{"id":25430,"nodeType":"UserDefinedTypeName","pathNode":{"id":25429,"name":"IAaveIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":3875,"src":"2094:25:97"},"referencedDeclaration":3875,"src":"2094:25:97","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"visibility":"internal"},{"constant":false,"id":25433,"mutability":"mutable","name":"aTokenDecimals","nameLocation":"2152:14:97","nodeType":"VariableDeclaration","scope":25500,"src":"2146:20:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":25432,"name":"uint8","nodeType":"ElementaryTypeName","src":"2146:5:97","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":25435,"mutability":"mutable","name":"aTokenName","nameLocation":"2188:10:97","nodeType":"VariableDeclaration","scope":25500,"src":"2172:26:97","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":25434,"name":"string","nodeType":"ElementaryTypeName","src":"2172:6:97","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":25437,"mutability":"mutable","name":"aTokenSymbol","nameLocation":"2220:12:97","nodeType":"VariableDeclaration","scope":25500,"src":"2204:28:97","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":25436,"name":"string","nodeType":"ElementaryTypeName","src":"2204:6:97","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":25439,"mutability":"mutable","name":"params","nameLocation":"2253:6:97","nodeType":"VariableDeclaration","scope":25500,"src":"2238:21:97","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":25438,"name":"bytes","nodeType":"ElementaryTypeName","src":"2238:5:97","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2009:254:97"},"returnParameters":{"id":25444,"nodeType":"ParameterList","parameters":[],"src":"2300:0:97"},"scope":25985,"src":"1990:850:97","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[3758],"body":{"id":25524,"nodeType":"Block","src":"3021:64:97","statements":[{"expression":{"arguments":[{"id":25518,"name":"caller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25503,"src":"3046:6:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25519,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25505,"src":"3054:10:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25520,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25507,"src":"3066:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25521,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25509,"src":"3074:5:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":25517,"name":"_mintScaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28703,"src":"3034:11:97","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256,uint256) returns (bool)"}},"id":25522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3034:46:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":25516,"id":25523,"nodeType":"Return","src":"3027:53:97"}]},"documentation":{"id":25501,"nodeType":"StructuredDocumentation","src":"2844:23:97","text":"@inheritdoc IAToken"},"functionSelector":"b3f1c93d","id":25525,"implemented":true,"kind":"function","modifiers":[{"id":25513,"kind":"modifierInvocation","modifierName":{"id":25512,"name":"onlyPool","nodeType":"IdentifierPath","referencedDeclaration":27896,"src":"2997:8:97"},"nodeType":"ModifierInvocation","src":"2997:8:97"}],"name":"mint","nameLocation":"2879:4:97","nodeType":"FunctionDefinition","overrides":{"id":25511,"nodeType":"OverrideSpecifier","overrides":[],"src":"2988:8:97"},"parameters":{"id":25510,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25503,"mutability":"mutable","name":"caller","nameLocation":"2897:6:97","nodeType":"VariableDeclaration","scope":25525,"src":"2889:14:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25502,"name":"address","nodeType":"ElementaryTypeName","src":"2889:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25505,"mutability":"mutable","name":"onBehalfOf","nameLocation":"2917:10:97","nodeType":"VariableDeclaration","scope":25525,"src":"2909:18:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25504,"name":"address","nodeType":"ElementaryTypeName","src":"2909:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25507,"mutability":"mutable","name":"amount","nameLocation":"2941:6:97","nodeType":"VariableDeclaration","scope":25525,"src":"2933:14:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25506,"name":"uint256","nodeType":"ElementaryTypeName","src":"2933:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25509,"mutability":"mutable","name":"index","nameLocation":"2961:5:97","nodeType":"VariableDeclaration","scope":25525,"src":"2953:13:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25508,"name":"uint256","nodeType":"ElementaryTypeName","src":"2953:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2883:87:97"},"returnParameters":{"id":25516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25515,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25525,"src":"3015:4:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":25514,"name":"bool","nodeType":"ElementaryTypeName","src":"3015:4:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3014:6:97"},"scope":25985,"src":"2870:215:97","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[3770],"body":{"id":25563,"nodeType":"Block","src":"3259:195:97","statements":[{"expression":{"arguments":[{"id":25541,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25528,"src":"3277:4:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25542,"name":"receiverOfUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25530,"src":"3283:20:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25543,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25532,"src":"3305:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25544,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25534,"src":"3313:5:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":25540,"name":"_burnScaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28821,"src":"3265:11:97","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":25545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3265:54:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25546,"nodeType":"ExpressionStatement","src":"3265:54:97"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":25552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25547,"name":"receiverOfUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25530,"src":"3329:20:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":25550,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3361:4:97","typeDescriptions":{"typeIdentifier":"t_contract$_AToken_$25985","typeString":"contract AToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AToken_$25985","typeString":"contract AToken"}],"id":25549,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3353:7:97","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":25548,"name":"address","nodeType":"ElementaryTypeName","src":"3353:7:97","typeDescriptions":{}}},"id":25551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3353:13:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3329:37:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":25562,"nodeType":"IfStatement","src":"3325:125:97","trueBody":{"id":25561,"nodeType":"Block","src":"3368:82:97","statements":[{"expression":{"arguments":[{"id":25557,"name":"receiverOfUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25530,"src":"3414:20:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25558,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25532,"src":"3436:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":25554,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25394,"src":"3383:16:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25553,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"3376:6:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":25555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3376:24:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":25556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":78,"src":"3376:37:97","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":25559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3376:67:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25560,"nodeType":"ExpressionStatement","src":"3376:67:97"}]}}]},"documentation":{"id":25526,"nodeType":"StructuredDocumentation","src":"3089:23:97","text":"@inheritdoc IAToken"},"functionSelector":"d7020d0a","id":25564,"implemented":true,"kind":"function","modifiers":[{"id":25538,"kind":"modifierInvocation","modifierName":{"id":25537,"name":"onlyPool","nodeType":"IdentifierPath","referencedDeclaration":27896,"src":"3250:8:97"},"nodeType":"ModifierInvocation","src":"3250:8:97"}],"name":"burn","nameLocation":"3124:4:97","nodeType":"FunctionDefinition","overrides":{"id":25536,"nodeType":"OverrideSpecifier","overrides":[],"src":"3241:8:97"},"parameters":{"id":25535,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25528,"mutability":"mutable","name":"from","nameLocation":"3142:4:97","nodeType":"VariableDeclaration","scope":25564,"src":"3134:12:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25527,"name":"address","nodeType":"ElementaryTypeName","src":"3134:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25530,"mutability":"mutable","name":"receiverOfUnderlying","nameLocation":"3160:20:97","nodeType":"VariableDeclaration","scope":25564,"src":"3152:28:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25529,"name":"address","nodeType":"ElementaryTypeName","src":"3152:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25532,"mutability":"mutable","name":"amount","nameLocation":"3194:6:97","nodeType":"VariableDeclaration","scope":25564,"src":"3186:14:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25531,"name":"uint256","nodeType":"ElementaryTypeName","src":"3186:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25534,"mutability":"mutable","name":"index","nameLocation":"3214:5:97","nodeType":"VariableDeclaration","scope":25564,"src":"3206:13:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25533,"name":"uint256","nodeType":"ElementaryTypeName","src":"3206:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3128:95:97"},"returnParameters":{"id":25539,"nodeType":"ParameterList","parameters":[],"src":"3259:0:97"},"scope":25985,"src":"3115:339:97","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[3778],"body":{"id":25591,"nodeType":"Block","src":"3574:106:97","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25575,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25567,"src":"3584:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":25576,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3594:1:97","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3584:11:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":25580,"nodeType":"IfStatement","src":"3580:38:97","trueBody":{"id":25579,"nodeType":"Block","src":"3597:21:97","statements":[{"functionReturnParameters":25574,"id":25578,"nodeType":"Return","src":"3605:7:97"}]}},{"expression":{"arguments":[{"arguments":[{"id":25584,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27929,"src":"3643:4:97","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}],"id":25583,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3635:7:97","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":25582,"name":"address","nodeType":"ElementaryTypeName","src":"3635:7:97","typeDescriptions":{}}},"id":25585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3635:13:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25586,"name":"_treasury","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25392,"src":"3650:9:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25587,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25567,"src":"3661:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25588,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25569,"src":"3669:5:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":25581,"name":"_mintScaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28703,"src":"3623:11:97","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256,uint256) returns (bool)"}},"id":25589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3623:52:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":25590,"nodeType":"ExpressionStatement","src":"3623:52:97"}]},"documentation":{"id":25565,"nodeType":"StructuredDocumentation","src":"3458:23:97","text":"@inheritdoc IAToken"},"functionSelector":"7df5bd3b","id":25592,"implemented":true,"kind":"function","modifiers":[{"id":25573,"kind":"modifierInvocation","modifierName":{"id":25572,"name":"onlyPool","nodeType":"IdentifierPath","referencedDeclaration":27896,"src":"3565:8:97"},"nodeType":"ModifierInvocation","src":"3565:8:97"}],"name":"mintToTreasury","nameLocation":"3493:14:97","nodeType":"FunctionDefinition","overrides":{"id":25571,"nodeType":"OverrideSpecifier","overrides":[],"src":"3556:8:97"},"parameters":{"id":25570,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25567,"mutability":"mutable","name":"amount","nameLocation":"3516:6:97","nodeType":"VariableDeclaration","scope":25592,"src":"3508:14:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25566,"name":"uint256","nodeType":"ElementaryTypeName","src":"3508:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25569,"mutability":"mutable","name":"index","nameLocation":"3532:5:97","nodeType":"VariableDeclaration","scope":25592,"src":"3524:13:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25568,"name":"uint256","nodeType":"ElementaryTypeName","src":"3524:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3507:31:97"},"returnParameters":{"id":25574,"nodeType":"ParameterList","parameters":[],"src":"3574:0:97"},"scope":25985,"src":"3484:196:97","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[3788],"body":{"id":25612,"nodeType":"Block","src":"3833:173:97","statements":[{"expression":{"arguments":[{"id":25606,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25595,"src":"3978:4:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25607,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25597,"src":"3984:2:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25608,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25599,"src":"3988:5:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":25609,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3995:5:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":25605,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[25893,25912,28965],"referencedDeclaration":25893,"src":"3968:9:97","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,address,uint256,bool)"}},"id":25610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3968:33:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25611,"nodeType":"ExpressionStatement","src":"3968:33:97"}]},"documentation":{"id":25593,"nodeType":"StructuredDocumentation","src":"3684:23:97","text":"@inheritdoc IAToken"},"functionSelector":"f866c319","id":25613,"implemented":true,"kind":"function","modifiers":[{"id":25603,"kind":"modifierInvocation","modifierName":{"id":25602,"name":"onlyPool","nodeType":"IdentifierPath","referencedDeclaration":27896,"src":"3824:8:97"},"nodeType":"ModifierInvocation","src":"3824:8:97"}],"name":"transferOnLiquidation","nameLocation":"3719:21:97","nodeType":"FunctionDefinition","overrides":{"id":25601,"nodeType":"OverrideSpecifier","overrides":[],"src":"3815:8:97"},"parameters":{"id":25600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25595,"mutability":"mutable","name":"from","nameLocation":"3754:4:97","nodeType":"VariableDeclaration","scope":25613,"src":"3746:12:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25594,"name":"address","nodeType":"ElementaryTypeName","src":"3746:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25597,"mutability":"mutable","name":"to","nameLocation":"3772:2:97","nodeType":"VariableDeclaration","scope":25613,"src":"3764:10:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25596,"name":"address","nodeType":"ElementaryTypeName","src":"3764:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25599,"mutability":"mutable","name":"value","nameLocation":"3788:5:97","nodeType":"VariableDeclaration","scope":25613,"src":"3780:13:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25598,"name":"uint256","nodeType":"ElementaryTypeName","src":"3780:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3740:57:97"},"returnParameters":{"id":25604,"nodeType":"ParameterList","parameters":[],"src":"3833:0:97"},"scope":25985,"src":"3710:296:97","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[1381,28020],"body":{"id":25635,"nodeType":"Block","src":"4150:97:97","statements":[{"expression":{"arguments":[{"arguments":[{"id":25631,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25394,"src":"4224:16:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":25629,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27929,"src":"4192:4:97","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":25630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveNormalizedIncome","nodeType":"MemberAccess","referencedDeclaration":4693,"src":"4192:31:97","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":25632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4192:49:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":25626,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25616,"src":"4179:4:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":25624,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"4163:5:97","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AToken_$25985_$","typeString":"type(contract super AToken)"}},"id":25625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":28020,"src":"4163:15:97","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":25627,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4163:21:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"4163:28:97","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":25633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4163:79:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25623,"id":25634,"nodeType":"Return","src":"4156:86:97"}]},"documentation":{"id":25614,"nodeType":"StructuredDocumentation","src":"4010:22:97","text":"@inheritdoc IERC20"},"functionSelector":"70a08231","id":25636,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"4044:9:97","nodeType":"FunctionDefinition","overrides":{"id":25620,"nodeType":"OverrideSpecifier","overrides":[{"id":25618,"name":"IncentivizedERC20","nodeType":"IdentifierPath","referencedDeclaration":28349,"src":"4105:17:97"},{"id":25619,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"4124:6:97"}],"src":"4096:35:97"},"parameters":{"id":25617,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25616,"mutability":"mutable","name":"user","nameLocation":"4067:4:97","nodeType":"VariableDeclaration","scope":25636,"src":"4059:12:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25615,"name":"address","nodeType":"ElementaryTypeName","src":"4059:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4053:22:97"},"returnParameters":{"id":25623,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25622,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25636,"src":"4141:7:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25621,"name":"uint256","nodeType":"ElementaryTypeName","src":"4141:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4140:9:97"},"scope":25985,"src":"4035:212:97","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1373,28005],"body":{"id":25666,"nodeType":"Block","src":"4373:210:97","statements":[{"assignments":[25646],"declarations":[{"constant":false,"id":25646,"mutability":"mutable","name":"currentSupplyScaled","nameLocation":"4387:19:97","nodeType":"VariableDeclaration","scope":25666,"src":"4379:27:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25645,"name":"uint256","nodeType":"ElementaryTypeName","src":"4379:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":25650,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25647,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"4409:5:97","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AToken_$25985_$","typeString":"type(contract super AToken)"}},"id":25648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":28005,"src":"4409:17:97","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":25649,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4409:19:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4379:49:97"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25651,"name":"currentSupplyScaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25646,"src":"4439:19:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":25652,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4462:1:97","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4439:24:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":25657,"nodeType":"IfStatement","src":"4435:53:97","trueBody":{"id":25656,"nodeType":"Block","src":"4465:23:97","statements":[{"expression":{"hexValue":"30","id":25654,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4480:1:97","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":25644,"id":25655,"nodeType":"Return","src":"4473:8:97"}]}},{"expression":{"arguments":[{"arguments":[{"id":25662,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25394,"src":"4560:16:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":25660,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27929,"src":"4528:4:97","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":25661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveNormalizedIncome","nodeType":"MemberAccess","referencedDeclaration":4693,"src":"4528:31:97","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":25663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4528:49:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25658,"name":"currentSupplyScaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25646,"src":"4501:19:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"4501:26:97","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":25664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4501:77:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25644,"id":25665,"nodeType":"Return","src":"4494:84:97"}]},"documentation":{"id":25637,"nodeType":"StructuredDocumentation","src":"4251:22:97","text":"@inheritdoc IERC20"},"functionSelector":"18160ddd","id":25667,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"4285:11:97","nodeType":"FunctionDefinition","overrides":{"id":25641,"nodeType":"OverrideSpecifier","overrides":[{"id":25639,"name":"IncentivizedERC20","nodeType":"IdentifierPath","referencedDeclaration":28349,"src":"4328:17:97"},{"id":25640,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"4347:6:97"}],"src":"4319:35:97"},"parameters":{"id":25638,"nodeType":"ParameterList","parameters":[],"src":"4296:2:97"},"returnParameters":{"id":25644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25643,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25667,"src":"4364:7:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25642,"name":"uint256","nodeType":"ElementaryTypeName","src":"4364:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4363:9:97"},"scope":25985,"src":"4276:307:97","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[3836],"body":{"id":25676,"nodeType":"Block","src":"4690:27:97","statements":[{"expression":{"id":25674,"name":"_treasury","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25392,"src":"4703:9:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":25673,"id":25675,"nodeType":"Return","src":"4696:16:97"}]},"documentation":{"id":25668,"nodeType":"StructuredDocumentation","src":"4587:23:97","text":"@inheritdoc IAToken"},"functionSelector":"ae167335","id":25677,"implemented":true,"kind":"function","modifiers":[],"name":"RESERVE_TREASURY_ADDRESS","nameLocation":"4622:24:97","nodeType":"FunctionDefinition","overrides":{"id":25670,"nodeType":"OverrideSpecifier","overrides":[],"src":"4663:8:97"},"parameters":{"id":25669,"nodeType":"ParameterList","parameters":[],"src":"4646:2:97"},"returnParameters":{"id":25673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25672,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25677,"src":"4681:7:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25671,"name":"address","nodeType":"ElementaryTypeName","src":"4681:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4680:9:97"},"scope":25985,"src":"4613:104:97","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3830],"body":{"id":25686,"nodeType":"Block","src":"4824:34:97","statements":[{"expression":{"id":25684,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25394,"src":"4837:16:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":25683,"id":25685,"nodeType":"Return","src":"4830:23:97"}]},"documentation":{"id":25678,"nodeType":"StructuredDocumentation","src":"4721:23:97","text":"@inheritdoc IAToken"},"functionSelector":"b16a19de","id":25687,"implemented":true,"kind":"function","modifiers":[],"name":"UNDERLYING_ASSET_ADDRESS","nameLocation":"4756:24:97","nodeType":"FunctionDefinition","overrides":{"id":25680,"nodeType":"OverrideSpecifier","overrides":[],"src":"4797:8:97"},"parameters":{"id":25679,"nodeType":"ParameterList","parameters":[],"src":"4780:2:97"},"returnParameters":{"id":25683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25682,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25687,"src":"4815:7:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25681,"name":"address","nodeType":"ElementaryTypeName","src":"4815:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4814:9:97"},"scope":25985,"src":"4747:111:97","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3796],"body":{"id":25706,"nodeType":"Block","src":"4985:64:97","statements":[{"expression":{"arguments":[{"id":25702,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25690,"src":"5029:6:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25703,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25692,"src":"5037:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":25699,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25394,"src":"4998:16:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25698,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"4991:6:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":25700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4991:24:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":25701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":78,"src":"4991:37:97","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":25704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4991:53:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25705,"nodeType":"ExpressionStatement","src":"4991:53:97"}]},"documentation":{"id":25688,"nodeType":"StructuredDocumentation","src":"4862:23:97","text":"@inheritdoc IAToken"},"functionSelector":"4efecaa5","id":25707,"implemented":true,"kind":"function","modifiers":[{"id":25696,"kind":"modifierInvocation","modifierName":{"id":25695,"name":"onlyPool","nodeType":"IdentifierPath","referencedDeclaration":27896,"src":"4976:8:97"},"nodeType":"ModifierInvocation","src":"4976:8:97"}],"name":"transferUnderlyingTo","nameLocation":"4897:20:97","nodeType":"FunctionDefinition","overrides":{"id":25694,"nodeType":"OverrideSpecifier","overrides":[],"src":"4967:8:97"},"parameters":{"id":25693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25690,"mutability":"mutable","name":"target","nameLocation":"4926:6:97","nodeType":"VariableDeclaration","scope":25707,"src":"4918:14:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25689,"name":"address","nodeType":"ElementaryTypeName","src":"4918:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25692,"mutability":"mutable","name":"amount","nameLocation":"4942:6:97","nodeType":"VariableDeclaration","scope":25707,"src":"4934:14:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25691,"name":"uint256","nodeType":"ElementaryTypeName","src":"4934:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4917:32:97"},"returnParameters":{"id":25697,"nodeType":"ParameterList","parameters":[],"src":"4985:0:97"},"scope":25985,"src":"4888:161:97","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[3806],"body":{"id":25720,"nodeType":"Block","src":"5205:37:97","statements":[]},"documentation":{"id":25708,"nodeType":"StructuredDocumentation","src":"5053:23:97","text":"@inheritdoc IAToken"},"functionSelector":"6fd97676","id":25721,"implemented":true,"kind":"function","modifiers":[{"id":25718,"kind":"modifierInvocation","modifierName":{"id":25717,"name":"onlyPool","nodeType":"IdentifierPath","referencedDeclaration":27896,"src":"5196:8:97"},"nodeType":"ModifierInvocation","src":"5196:8:97"}],"name":"handleRepayment","nameLocation":"5088:15:97","nodeType":"FunctionDefinition","overrides":{"id":25716,"nodeType":"OverrideSpecifier","overrides":[],"src":"5187:8:97"},"parameters":{"id":25715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25710,"mutability":"mutable","name":"user","nameLocation":"5117:4:97","nodeType":"VariableDeclaration","scope":25721,"src":"5109:12:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25709,"name":"address","nodeType":"ElementaryTypeName","src":"5109:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25712,"mutability":"mutable","name":"onBehalfOf","nameLocation":"5135:10:97","nodeType":"VariableDeclaration","scope":25721,"src":"5127:18:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25711,"name":"address","nodeType":"ElementaryTypeName","src":"5127:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25714,"mutability":"mutable","name":"amount","nameLocation":"5159:6:97","nodeType":"VariableDeclaration","scope":25721,"src":"5151:14:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25713,"name":"uint256","nodeType":"ElementaryTypeName","src":"5151:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5103:66:97"},"returnParameters":{"id":25719,"nodeType":"ParameterList","parameters":[],"src":"5205:0:97"},"scope":25985,"src":"5079:163:97","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[3824],"body":{"id":25815,"nodeType":"Block","src":"5434:593:97","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":25746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25741,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25724,"src":"5448:5:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":25744,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5465:1:97","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":25743,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5457:7:97","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":25742,"name":"address","nodeType":"ElementaryTypeName","src":"5457:7:97","typeDescriptions":{}}},"id":25745,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5457:10:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5448:19:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":25747,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"5469:6:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":25748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ZERO_ADDRESS_NOT_VALID","nodeType":"MemberAccess","referencedDeclaration":12599,"src":"5469:29:97","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":25740,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5440:7:97","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5440:59:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25750,"nodeType":"ExpressionStatement","src":"5440:59:97"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":25752,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"5544:5:97","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":25753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"5544:15:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":25754,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25730,"src":"5563:8:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5544:27:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":25756,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"5573:6:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":25757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_EXPIRATION","nodeType":"MemberAccess","referencedDeclaration":12602,"src":"5573:25:97","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":25751,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5536:7:97","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25758,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5536:63:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25759,"nodeType":"ExpressionStatement","src":"5536:63:97"},{"assignments":[25761],"declarations":[{"constant":false,"id":25761,"mutability":"mutable","name":"currentValidNonce","nameLocation":"5613:17:97","nodeType":"VariableDeclaration","scope":25815,"src":"5605:25:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25760,"name":"uint256","nodeType":"ElementaryTypeName","src":"5605:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":25765,"initialValue":{"baseExpression":{"id":25762,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27740,"src":"5633:7:97","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":25764,"indexExpression":{"id":25763,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25724,"src":"5641:5:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5633:14:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5605:42:97"},{"assignments":[25767],"declarations":[{"constant":false,"id":25767,"mutability":"mutable","name":"digest","nameLocation":"5661:6:97","nodeType":"VariableDeclaration","scope":25815,"src":"5653:14:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25766,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5653:7:97","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":25787,"initialValue":{"arguments":[{"arguments":[{"hexValue":"1901","id":25771,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5713:10:97","typeDescriptions":{"typeIdentifier":"t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541","typeString":"literal_string hex\"1901\""},"value":"\u0019\u0001"},{"arguments":[],"expression":{"argumentTypes":[],"id":25772,"name":"DOMAIN_SEPARATOR","nodeType":"Identifier","overloadedDeclarations":[25926],"referencedDeclaration":25926,"src":"5733:16:97","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":25773,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5733:18:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"arguments":[{"id":25777,"name":"PERMIT_TYPEHASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25387,"src":"5782:15:97","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":25778,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25724,"src":"5799:5:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25779,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25726,"src":"5806:7:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25780,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25728,"src":"5815:5:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25781,"name":"currentValidNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25761,"src":"5822:17:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25782,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25730,"src":"5841:8:97","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":25775,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5771:3:97","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":25776,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"5771:10:97","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":25783,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5771:79:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":25774,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5761:9:97","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":25784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5761:90:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541","typeString":"literal_string hex\"1901\""},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":25769,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5687:3:97","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":25770,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"5687:16:97","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":25785,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5687:172:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":25768,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5670:9:97","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":25786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5670:195:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5653:212:97"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":25796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25789,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25724,"src":"5879:5:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":25791,"name":"digest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25767,"src":"5898:6:97","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":25792,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25732,"src":"5906:1:97","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":25793,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25734,"src":"5909:1:97","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":25794,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25736,"src":"5912:1:97","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":25790,"name":"ecrecover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-6,"src":"5888:9:97","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":25795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5888:26:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5879:35:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":25797,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"5916:6:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":25798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_SIGNATURE","nodeType":"MemberAccess","referencedDeclaration":12605,"src":"5916:24:97","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":25788,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5871:7:97","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5871:70:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25800,"nodeType":"ExpressionStatement","src":"5871:70:97"},{"expression":{"id":25807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":25801,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27740,"src":"5947:7:97","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":25803,"indexExpression":{"id":25802,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25724,"src":"5955:5:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5947:14:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25804,"name":"currentValidNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25761,"src":"5964:17:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":25805,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5984:1:97","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5964:21:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5947:38:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25808,"nodeType":"ExpressionStatement","src":"5947:38:97"},{"expression":{"arguments":[{"id":25810,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25724,"src":"6000:5:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25811,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25726,"src":"6007:7:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25812,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25728,"src":"6016:5:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":25809,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28315,"src":"5991:8:97","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":25813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5991:31:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25814,"nodeType":"ExpressionStatement","src":"5991:31:97"}]},"documentation":{"id":25722,"nodeType":"StructuredDocumentation","src":"5246:23:97","text":"@inheritdoc IAToken"},"functionSelector":"d505accf","id":25816,"implemented":true,"kind":"function","modifiers":[],"name":"permit","nameLocation":"5281:6:97","nodeType":"FunctionDefinition","overrides":{"id":25738,"nodeType":"OverrideSpecifier","overrides":[],"src":"5425:8:97"},"parameters":{"id":25737,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25724,"mutability":"mutable","name":"owner","nameLocation":"5301:5:97","nodeType":"VariableDeclaration","scope":25816,"src":"5293:13:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25723,"name":"address","nodeType":"ElementaryTypeName","src":"5293:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25726,"mutability":"mutable","name":"spender","nameLocation":"5320:7:97","nodeType":"VariableDeclaration","scope":25816,"src":"5312:15:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25725,"name":"address","nodeType":"ElementaryTypeName","src":"5312:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25728,"mutability":"mutable","name":"value","nameLocation":"5341:5:97","nodeType":"VariableDeclaration","scope":25816,"src":"5333:13:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25727,"name":"uint256","nodeType":"ElementaryTypeName","src":"5333:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25730,"mutability":"mutable","name":"deadline","nameLocation":"5360:8:97","nodeType":"VariableDeclaration","scope":25816,"src":"5352:16:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25729,"name":"uint256","nodeType":"ElementaryTypeName","src":"5352:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25732,"mutability":"mutable","name":"v","nameLocation":"5380:1:97","nodeType":"VariableDeclaration","scope":25816,"src":"5374:7:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":25731,"name":"uint8","nodeType":"ElementaryTypeName","src":"5374:5:97","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":25734,"mutability":"mutable","name":"r","nameLocation":"5395:1:97","nodeType":"VariableDeclaration","scope":25816,"src":"5387:9:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25733,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5387:7:97","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":25736,"mutability":"mutable","name":"s","nameLocation":"5410:1:97","nodeType":"VariableDeclaration","scope":25816,"src":"5402:9:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25735,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5402:7:97","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5287:128:97"},"returnParameters":{"id":25739,"nodeType":"ParameterList","parameters":[],"src":"5434:0:97"},"scope":25985,"src":"5272:755:97","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":25892,"nodeType":"Block","src":"6480:499:97","statements":[{"assignments":[25829],"declarations":[{"constant":false,"id":25829,"mutability":"mutable","name":"underlyingAsset","nameLocation":"6494:15:97","nodeType":"VariableDeclaration","scope":25892,"src":"6486:23:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25828,"name":"address","nodeType":"ElementaryTypeName","src":"6486:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":25831,"initialValue":{"id":25830,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25394,"src":"6512:16:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6486:42:97"},{"assignments":[25833],"declarations":[{"constant":false,"id":25833,"mutability":"mutable","name":"index","nameLocation":"6543:5:97","nodeType":"VariableDeclaration","scope":25892,"src":"6535:13:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25832,"name":"uint256","nodeType":"ElementaryTypeName","src":"6535:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":25838,"initialValue":{"arguments":[{"id":25836,"name":"underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25829,"src":"6583:15:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":25834,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27929,"src":"6551:4:97","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":25835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveNormalizedIncome","nodeType":"MemberAccess","referencedDeclaration":4693,"src":"6551:31:97","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":25837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6551:48:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6535:64:97"},{"assignments":[25840],"declarations":[{"constant":false,"id":25840,"mutability":"mutable","name":"fromBalanceBefore","nameLocation":"6614:17:97","nodeType":"VariableDeclaration","scope":25892,"src":"6606:25:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25839,"name":"uint256","nodeType":"ElementaryTypeName","src":"6606:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":25848,"initialValue":{"arguments":[{"id":25846,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25833,"src":"6663:5:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":25843,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25819,"src":"6650:4:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":25841,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"6634:5:97","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AToken_$25985_$","typeString":"type(contract super AToken)"}},"id":25842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":28020,"src":"6634:15:97","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":25844,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6634:21:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"6634:28:97","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":25847,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6634:35:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6606:63:97"},{"assignments":[25850],"declarations":[{"constant":false,"id":25850,"mutability":"mutable","name":"toBalanceBefore","nameLocation":"6683:15:97","nodeType":"VariableDeclaration","scope":25892,"src":"6675:23:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25849,"name":"uint256","nodeType":"ElementaryTypeName","src":"6675:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":25858,"initialValue":{"arguments":[{"id":25856,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25833,"src":"6728:5:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":25853,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25821,"src":"6717:2:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":25851,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"6701:5:97","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AToken_$25985_$","typeString":"type(contract super AToken)"}},"id":25852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":28020,"src":"6701:15:97","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":25854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6701:19:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"6701:26:97","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":25857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6701:33:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6675:59:97"},{"expression":{"arguments":[{"id":25862,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25819,"src":"6757:4:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25863,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25821,"src":"6763:2:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25864,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25823,"src":"6767:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25865,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25833,"src":"6775:5:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25859,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"6741:5:97","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AToken_$25985_$","typeString":"type(contract super AToken)"}},"id":25861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_transfer","nodeType":"MemberAccess","referencedDeclaration":28965,"src":"6741:15:97","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":25866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6741:40:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25867,"nodeType":"ExpressionStatement","src":"6741:40:97"},{"condition":{"id":25868,"name":"validate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25825,"src":"6792:8:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":25881,"nodeType":"IfStatement","src":"6788:121:97","trueBody":{"id":25880,"nodeType":"Block","src":"6802:107:97","statements":[{"expression":{"arguments":[{"id":25872,"name":"underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25829,"src":"6832:15:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25873,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25819,"src":"6849:4:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25874,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25821,"src":"6855:2:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25875,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25823,"src":"6859:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25876,"name":"fromBalanceBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25840,"src":"6867:17:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25877,"name":"toBalanceBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25850,"src":"6886:15:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"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":25869,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27929,"src":"6810:4:97","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":25871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"finalizeTransfer","nodeType":"MemberAccess","referencedDeclaration":4726,"src":"6810:21:97","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256,uint256,uint256) external"}},"id":25878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6810:92:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25879,"nodeType":"ExpressionStatement","src":"6810:92:97"}]}},{"eventCall":{"arguments":[{"id":25883,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25819,"src":"6936:4:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25884,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25821,"src":"6942:2:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":25887,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25833,"src":"6960:5:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25885,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25823,"src":"6946:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":21198,"src":"6946:13:97","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":25888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6946:20:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25889,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25833,"src":"6968:5:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":25882,"name":"BalanceTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3744,"src":"6920:15:97","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":25890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6920:54:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25891,"nodeType":"EmitStatement","src":"6915:59:97"}]},"documentation":{"id":25817,"nodeType":"StructuredDocumentation","src":"6031:353:97","text":" @notice Transfers the aTokens between two users. Validates the transfer\n (ie checks for valid HF after the transfer) if required\n @param from The source address\n @param to The destination address\n @param amount The amount getting transferred\n @param validate True if the transfer needs to be validated, false otherwise"},"id":25893,"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"6396:9:97","nodeType":"FunctionDefinition","parameters":{"id":25826,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25819,"mutability":"mutable","name":"from","nameLocation":"6414:4:97","nodeType":"VariableDeclaration","scope":25893,"src":"6406:12:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25818,"name":"address","nodeType":"ElementaryTypeName","src":"6406:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25821,"mutability":"mutable","name":"to","nameLocation":"6428:2:97","nodeType":"VariableDeclaration","scope":25893,"src":"6420:10:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25820,"name":"address","nodeType":"ElementaryTypeName","src":"6420:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25823,"mutability":"mutable","name":"amount","nameLocation":"6440:6:97","nodeType":"VariableDeclaration","scope":25893,"src":"6432:14:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25822,"name":"uint256","nodeType":"ElementaryTypeName","src":"6432:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25825,"mutability":"mutable","name":"validate","nameLocation":"6453:8:97","nodeType":"VariableDeclaration","scope":25893,"src":"6448:13:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":25824,"name":"bool","nodeType":"ElementaryTypeName","src":"6448:4:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6405:57:97"},"returnParameters":{"id":25827,"nodeType":"ParameterList","parameters":[],"src":"6480:0:97"},"scope":25985,"src":"6387:592:97","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"baseFunctions":[28290],"body":{"id":25911,"nodeType":"Block","src":"7300:44:97","statements":[{"expression":{"arguments":[{"id":25905,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25896,"src":"7316:4:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25906,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25898,"src":"7322:2:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25907,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25900,"src":"7326:6:97","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"hexValue":"74727565","id":25908,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7334:4:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":25904,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[25893,25912,28965],"referencedDeclaration":25893,"src":"7306:9:97","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,address,uint256,bool)"}},"id":25909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7306:33:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25910,"nodeType":"ExpressionStatement","src":"7306:33:97"}]},"documentation":{"id":25894,"nodeType":"StructuredDocumentation","src":"6983:227:97","text":" @notice Overrides the parent _transfer to force validated transfer() and transferFrom()\n @param from The source address\n @param to The destination address\n @param amount The amount getting transferred"},"id":25912,"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"7222:9:97","nodeType":"FunctionDefinition","overrides":{"id":25902,"nodeType":"OverrideSpecifier","overrides":[],"src":"7291:8:97"},"parameters":{"id":25901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25896,"mutability":"mutable","name":"from","nameLocation":"7240:4:97","nodeType":"VariableDeclaration","scope":25912,"src":"7232:12:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25895,"name":"address","nodeType":"ElementaryTypeName","src":"7232:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25898,"mutability":"mutable","name":"to","nameLocation":"7254:2:97","nodeType":"VariableDeclaration","scope":25912,"src":"7246:10:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25897,"name":"address","nodeType":"ElementaryTypeName","src":"7246:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25900,"mutability":"mutable","name":"amount","nameLocation":"7266:6:97","nodeType":"VariableDeclaration","scope":25912,"src":"7258:14:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":25899,"name":"uint128","nodeType":"ElementaryTypeName","src":"7258:7:97","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"7231:42:97"},"returnParameters":{"id":25903,"nodeType":"ParameterList","parameters":[],"src":"7300:0:97"},"scope":25985,"src":"7213:131:97","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"baseFunctions":[3842,27772],"body":{"id":25925,"nodeType":"Block","src":"7591:42:97","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25921,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"7604:5:97","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AToken_$25985_$","typeString":"type(contract super AToken)"}},"id":25922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"DOMAIN_SEPARATOR","nodeType":"MemberAccess","referencedDeclaration":27772,"src":"7604:22:97","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":25923,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7604:24:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":25920,"id":25924,"nodeType":"Return","src":"7597:31:97"}]},"documentation":{"id":25913,"nodeType":"StructuredDocumentation","src":"7348:152:97","text":" @dev Overrides the base function to fully implement IAToken\n @dev see `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation"},"functionSelector":"3644e515","id":25926,"implemented":true,"kind":"function","modifiers":[],"name":"DOMAIN_SEPARATOR","nameLocation":"7512:16:97","nodeType":"FunctionDefinition","overrides":{"id":25917,"nodeType":"OverrideSpecifier","overrides":[{"id":25915,"name":"IAToken","nodeType":"IdentifierPath","referencedDeclaration":3861,"src":"7552:7:97"},{"id":25916,"name":"EIP712Base","nodeType":"IdentifierPath","referencedDeclaration":27822,"src":"7561:10:97"}],"src":"7543:29:97"},"parameters":{"id":25914,"nodeType":"ParameterList","parameters":[],"src":"7528:2:97"},"returnParameters":{"id":25920,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25919,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25926,"src":"7582:7:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25918,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7582:7:97","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7581:9:97"},"scope":25985,"src":"7503:130:97","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[3850,27785],"body":{"id":25942,"nodeType":"Block","src":"7873:37:97","statements":[{"expression":{"arguments":[{"id":25939,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25929,"src":"7899:5:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":25937,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"7886:5:97","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AToken_$25985_$","typeString":"type(contract super AToken)"}},"id":25938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"nonces","nodeType":"MemberAccess","referencedDeclaration":27785,"src":"7886:12:97","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":25940,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7886:19:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25936,"id":25941,"nodeType":"Return","src":"7879:26:97"}]},"documentation":{"id":25927,"nodeType":"StructuredDocumentation","src":"7637:142:97","text":" @dev Overrides the base function to fully implement IAToken\n @dev see `EIP712Base.nonces()` for more detailed documentation"},"functionSelector":"7ecebe00","id":25943,"implemented":true,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"7791:6:97","nodeType":"FunctionDefinition","overrides":{"id":25933,"nodeType":"OverrideSpecifier","overrides":[{"id":25931,"name":"IAToken","nodeType":"IdentifierPath","referencedDeclaration":3861,"src":"7834:7:97"},{"id":25932,"name":"EIP712Base","nodeType":"IdentifierPath","referencedDeclaration":27822,"src":"7843:10:97"}],"src":"7825:29:97"},"parameters":{"id":25930,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25929,"mutability":"mutable","name":"owner","nameLocation":"7806:5:97","nodeType":"VariableDeclaration","scope":25943,"src":"7798:13:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25928,"name":"address","nodeType":"ElementaryTypeName","src":"7798:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7797:15:97"},"returnParameters":{"id":25936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25935,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25943,"src":"7864:7:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25934,"name":"uint256","nodeType":"ElementaryTypeName","src":"7864:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7863:9:97"},"scope":25985,"src":"7782:128:97","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[27821],"body":{"id":25953,"nodeType":"Block","src":"8015:24:97","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":25950,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27975,"src":"8028:4:97","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view returns (string memory)"}},"id":25951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8028:6:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":25949,"id":25952,"nodeType":"Return","src":"8021:13:97"}]},"documentation":{"id":25944,"nodeType":"StructuredDocumentation","src":"7914:26:97","text":"@inheritdoc EIP712Base"},"id":25954,"implemented":true,"kind":"function","modifiers":[],"name":"_EIP712BaseId","nameLocation":"7952:13:97","nodeType":"FunctionDefinition","overrides":{"id":25946,"nodeType":"OverrideSpecifier","overrides":[],"src":"7982:8:97"},"parameters":{"id":25945,"nodeType":"ParameterList","parameters":[],"src":"7965:2:97"},"returnParameters":{"id":25949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25948,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25954,"src":"8000:13:97","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":25947,"name":"string","nodeType":"ElementaryTypeName","src":"8000:6:97","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7999:15:97"},"scope":25985,"src":"7943:96:97","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[3860],"body":{"id":25983,"nodeType":"Block","src":"8166:126:97","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":25970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25968,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25957,"src":"8180:5:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":25969,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25394,"src":"8189:16:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8180:25:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":25971,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"8207:6:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":25972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"UNDERLYING_CANNOT_BE_RESCUED","nodeType":"MemberAccess","referencedDeclaration":12623,"src":"8207:35:97","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":25967,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8172:7:97","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":25973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8172:71:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25974,"nodeType":"ExpressionStatement","src":"8172:71:97"},{"expression":{"arguments":[{"id":25979,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25959,"src":"8276:2:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25980,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25961,"src":"8280:6:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":25976,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25957,"src":"8256:5:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25975,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"8249:6:97","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":25977,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8249:13:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":25978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":78,"src":"8249:26:97","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":25981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8249:38:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25982,"nodeType":"ExpressionStatement","src":"8249:38:97"}]},"documentation":{"id":25955,"nodeType":"StructuredDocumentation","src":"8043:23:97","text":"@inheritdoc IAToken"},"functionSelector":"cea9d26f","id":25984,"implemented":true,"kind":"function","modifiers":[{"id":25965,"kind":"modifierInvocation","modifierName":{"id":25964,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":27879,"src":"8152:13:97"},"nodeType":"ModifierInvocation","src":"8152:13:97"}],"name":"rescueTokens","nameLocation":"8078:12:97","nodeType":"FunctionDefinition","overrides":{"id":25963,"nodeType":"OverrideSpecifier","overrides":[],"src":"8143:8:97"},"parameters":{"id":25962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25957,"mutability":"mutable","name":"token","nameLocation":"8099:5:97","nodeType":"VariableDeclaration","scope":25984,"src":"8091:13:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25956,"name":"address","nodeType":"ElementaryTypeName","src":"8091:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25959,"mutability":"mutable","name":"to","nameLocation":"8114:2:97","nodeType":"VariableDeclaration","scope":25984,"src":"8106:10:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25958,"name":"address","nodeType":"ElementaryTypeName","src":"8106:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25961,"mutability":"mutable","name":"amount","nameLocation":"8126:6:97","nodeType":"VariableDeclaration","scope":25984,"src":"8118:14:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25960,"name":"uint256","nodeType":"ElementaryTypeName","src":"8118:7:97","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8090:43:97"},"returnParameters":{"id":25966,"nodeType":"ParameterList","parameters":[],"src":"8166:0:97"},"scope":25985,"src":"8069:223:97","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":25986,"src":"1116:7178:97","usedErrors":[]}],"src":"37:8258:97"},"id":97},"@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol","exportedSymbols":{"AToken":[25985],"DelegationAwareAToken":[26033],"IDelegationToken":[4101],"IPool":[4860]},"id":26034,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":25987,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:98"},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":25989,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26034,"sourceUnit":4861,"src":"63:49:98","symbolAliases":[{"foreign":{"id":25988,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:5:98","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IDelegationToken.sol","file":"../../interfaces/IDelegationToken.sol","id":25991,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26034,"sourceUnit":4102,"src":"113:71:98","symbolAliases":[{"foreign":{"id":25990,"name":"IDelegationToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"121:16:98","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/AToken.sol","file":"./AToken.sol","id":25993,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":26034,"sourceUnit":25986,"src":"185:36:98","symbolAliases":[{"foreign":{"id":25992,"name":"AToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"193:6:98","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":25995,"name":"AToken","nodeType":"IdentifierPath","referencedDeclaration":25985,"src":"498:6:98"},"id":25996,"nodeType":"InheritanceSpecifier","src":"498:6:98"}],"canonicalName":"DelegationAwareAToken","contractDependencies":[],"contractKind":"contract","documentation":{"id":25994,"nodeType":"StructuredDocumentation","src":"223:240:98","text":" @title DelegationAwareAToken\n @author Aave\n @notice AToken enabled to delegate voting power of the underlying asset to a different address\n @dev The underlying asset needs to be compatible with the COMP delegation interface"},"fullyImplemented":true,"id":26033,"linearizedBaseContracts":[26033,25985,3861,4176,27822,28966,5975,28499,28349,1464,1442,748,10573],"name":"DelegationAwareAToken","nameLocation":"473:21:98","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":25997,"nodeType":"StructuredDocumentation","src":"509:120:98","text":" @dev Emitted when underlying voting power is delegated\n @param delegatee The address of the delegatee"},"id":26001,"name":"DelegateUnderlyingTo","nameLocation":"638:20:98","nodeType":"EventDefinition","parameters":{"id":26000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25999,"indexed":true,"mutability":"mutable","name":"delegatee","nameLocation":"675:9:98","nodeType":"VariableDeclaration","scope":26001,"src":"659:25:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25998,"name":"address","nodeType":"ElementaryTypeName","src":"659:7:98","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"658:27:98"},"src":"632:54:98"},{"body":{"id":26011,"nodeType":"Block","src":"812:37:98","statements":[]},"documentation":{"id":26002,"nodeType":"StructuredDocumentation","src":"690:82:98","text":" @dev Constructor.\n @param pool The address of the Pool contract"},"id":26012,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":26008,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26005,"src":"806:4:98","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"id":26009,"kind":"baseConstructorSpecifier","modifierName":{"id":26007,"name":"AToken","nodeType":"IdentifierPath","referencedDeclaration":25985,"src":"799:6:98"},"nodeType":"ModifierInvocation","src":"799:12:98"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":26006,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26005,"mutability":"mutable","name":"pool","nameLocation":"793:4:98","nodeType":"VariableDeclaration","scope":26012,"src":"787:10:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":26004,"nodeType":"UserDefinedTypeName","pathNode":{"id":26003,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"787:5:98"},"referencedDeclaration":4860,"src":"787:5:98","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"}],"src":"786:12:98"},"returnParameters":{"id":26010,"nodeType":"ParameterList","parameters":[],"src":"812:0:98"},"scope":26033,"src":"775:74:98","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":26031,"nodeType":"Block","src":"1089:107:98","statements":[{"expression":{"arguments":[{"id":26024,"name":"delegatee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26015,"src":"1139:9:98","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":26021,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25394,"src":"1112:16:98","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":26020,"name":"IDelegationToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4101,"src":"1095:16:98","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IDelegationToken_$4101_$","typeString":"type(contract IDelegationToken)"}},"id":26022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1095:34:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IDelegationToken_$4101","typeString":"contract IDelegationToken"}},"id":26023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"delegate","nodeType":"MemberAccess","referencedDeclaration":4100,"src":"1095:43:98","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":26025,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1095:54:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26026,"nodeType":"ExpressionStatement","src":"1095:54:98"},{"eventCall":{"arguments":[{"id":26028,"name":"delegatee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26015,"src":"1181:9:98","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":26027,"name":"DelegateUnderlyingTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26001,"src":"1160:20:98","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":26029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1160:31:98","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26030,"nodeType":"EmitStatement","src":"1155:36:98"}]},"documentation":{"id":26013,"nodeType":"StructuredDocumentation","src":"853:161:98","text":" @notice Delegates voting power of the underlying asset to a `delegatee` address\n @param delegatee The address that will receive the delegation"},"functionSelector":"2f114618","id":26032,"implemented":true,"kind":"function","modifiers":[{"id":26018,"kind":"modifierInvocation","modifierName":{"id":26017,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":27879,"src":"1075:13:98"},"nodeType":"ModifierInvocation","src":"1075:13:98"}],"name":"delegateUnderlyingTo","nameLocation":"1026:20:98","nodeType":"FunctionDefinition","parameters":{"id":26016,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26015,"mutability":"mutable","name":"delegatee","nameLocation":"1055:9:98","nodeType":"VariableDeclaration","scope":26032,"src":"1047:17:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26014,"name":"address","nodeType":"ElementaryTypeName","src":"1047:7:98","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1046:19:98"},"returnParameters":{"id":26019,"nodeType":"ParameterList","parameters":[],"src":"1089:0:98"},"scope":26033,"src":"1017:179:98","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":26034,"src":"464:734:98","usedErrors":[]}],"src":"37:1162:98"},"id":98},"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol","exportedSymbols":{"DebtTokenBase":[27722],"EIP712Base":[27822],"Errors":[12642],"IAaveIncentivesController":[3875],"IERC20":[1442],"IInitializableDebtToken":[4221],"IPool":[4860],"IStableDebtToken":[6109],"IncentivizedERC20":[28349],"MathUtils":[21098],"SafeCast":[1966],"StableDebtToken":[27108],"VersionedInitializable":[10573],"WadRayMath":[21219]},"id":27109,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":26035,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:99"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../dependencies/openzeppelin/contracts/IERC20.sol","id":26037,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27109,"sourceUnit":1443,"src":"63:76:99","symbolAliases":[{"foreign":{"id":26036,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:6:99","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol","file":"../libraries/aave-upgradeability/VersionedInitializable.sol","id":26039,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27109,"sourceUnit":10574,"src":"140:99:99","symbolAliases":[{"foreign":{"id":26038,"name":"VersionedInitializable","nodeType":"Identifier","overloadedDeclarations":[],"src":"148:22:99","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/MathUtils.sol","file":"../libraries/math/MathUtils.sol","id":26041,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27109,"sourceUnit":21099,"src":"240:58:99","symbolAliases":[{"foreign":{"id":26040,"name":"MathUtils","nodeType":"Identifier","overloadedDeclarations":[],"src":"248:9:99","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol","file":"../libraries/math/WadRayMath.sol","id":26043,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27109,"sourceUnit":21220,"src":"299:60:99","symbolAliases":[{"foreign":{"id":26042,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"307:10:99","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol","file":"../libraries/helpers/Errors.sol","id":26045,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27109,"sourceUnit":12643,"src":"360:55:99","symbolAliases":[{"foreign":{"id":26044,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"368:6:99","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol","file":"../../interfaces/IAaveIncentivesController.sol","id":26047,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27109,"sourceUnit":3876,"src":"416:89:99","symbolAliases":[{"foreign":{"id":26046,"name":"IAaveIncentivesController","nodeType":"Identifier","overloadedDeclarations":[],"src":"424:25:99","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol","file":"../../interfaces/IInitializableDebtToken.sol","id":26049,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27109,"sourceUnit":4222,"src":"506:85:99","symbolAliases":[{"foreign":{"id":26048,"name":"IInitializableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"514:23:99","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol","file":"../../interfaces/IStableDebtToken.sol","id":26051,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27109,"sourceUnit":6110,"src":"592:71:99","symbolAliases":[{"foreign":{"id":26050,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"600:16:99","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":26053,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27109,"sourceUnit":4861,"src":"664:49:99","symbolAliases":[{"foreign":{"id":26052,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"672:5:99","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/base/EIP712Base.sol","file":"./base/EIP712Base.sol","id":26055,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27109,"sourceUnit":27823,"src":"714:49:99","symbolAliases":[{"foreign":{"id":26054,"name":"EIP712Base","nodeType":"Identifier","overloadedDeclarations":[],"src":"722:10:99","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/base/DebtTokenBase.sol","file":"./base/DebtTokenBase.sol","id":26057,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27109,"sourceUnit":27723,"src":"764:55:99","symbolAliases":[{"foreign":{"id":26056,"name":"DebtTokenBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"772:13:99","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol","file":"./base/IncentivizedERC20.sol","id":26059,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27109,"sourceUnit":28350,"src":"820:63:99","symbolAliases":[{"foreign":{"id":26058,"name":"IncentivizedERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"828:17:99","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"../../dependencies/openzeppelin/contracts/SafeCast.sol","id":26061,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27109,"sourceUnit":1967,"src":"884:80:99","symbolAliases":[{"foreign":{"id":26060,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"892:8:99","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":26063,"name":"DebtTokenBase","nodeType":"IdentifierPath","referencedDeclaration":27722,"src":"1244:13:99"},"id":26064,"nodeType":"InheritanceSpecifier","src":"1244:13:99"},{"baseName":{"id":26065,"name":"IncentivizedERC20","nodeType":"IdentifierPath","referencedDeclaration":28349,"src":"1259:17:99"},"id":26066,"nodeType":"InheritanceSpecifier","src":"1259:17:99"},{"baseName":{"id":26067,"name":"IStableDebtToken","nodeType":"IdentifierPath","referencedDeclaration":6109,"src":"1278:16:99"},"id":26068,"nodeType":"InheritanceSpecifier","src":"1278:16:99"}],"canonicalName":"StableDebtToken","contractDependencies":[],"contractKind":"contract","documentation":{"id":26062,"nodeType":"StructuredDocumentation","src":"966:249:99","text":" @title StableDebtToken\n @author Aave\n @notice Implements a stable debt token to track the borrowing positions of users\n at stable rate mode\n @dev Transfer and approve functionalities are disabled since its a non-transferable token"},"fullyImplemented":true,"id":27108,"linearizedBaseContracts":[27108,6109,4221,28349,1464,1442,27722,4002,748,27822,10573],"name":"StableDebtToken","nameLocation":"1225:15:99","nodeType":"ContractDefinition","nodes":[{"id":26071,"libraryName":{"id":26069,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":21219,"src":"1305:10:99"},"nodeType":"UsingForDirective","src":"1299:29:99","typeName":{"id":26070,"name":"uint256","nodeType":"ElementaryTypeName","src":"1320:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":26074,"libraryName":{"id":26072,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"1337:8:99"},"nodeType":"UsingForDirective","src":"1331:27:99","typeName":{"id":26073,"name":"uint256","nodeType":"ElementaryTypeName","src":"1350:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"constant":true,"functionSelector":"b9a7b622","id":26077,"mutability":"constant","name":"DEBT_TOKEN_REVISION","nameLocation":"1386:19:99","nodeType":"VariableDeclaration","scope":27108,"src":"1362:49:99","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26075,"name":"uint256","nodeType":"ElementaryTypeName","src":"1362:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307831","id":26076,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1408:3:99","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x1"},"visibility":"public"},{"constant":false,"id":26081,"mutability":"mutable","name":"_timestamps","nameLocation":"1554:11:99","nodeType":"VariableDeclaration","scope":27108,"src":"1518:47:99","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint40_$","typeString":"mapping(address => uint40)"},"typeName":{"id":26080,"keyType":{"id":26078,"name":"address","nodeType":"ElementaryTypeName","src":"1526:7:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1518:26:99","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint40_$","typeString":"mapping(address => uint40)"},"valueType":{"id":26079,"name":"uint40","nodeType":"ElementaryTypeName","src":"1537:6:99","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}},"visibility":"internal"},{"constant":false,"id":26083,"mutability":"mutable","name":"_avgStableRate","nameLocation":"1587:14:99","nodeType":"VariableDeclaration","scope":27108,"src":"1570:31:99","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":26082,"name":"uint128","nodeType":"ElementaryTypeName","src":"1570:7:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":26085,"mutability":"mutable","name":"_totalSupplyTimestamp","nameLocation":"1676:21:99","nodeType":"VariableDeclaration","scope":27108,"src":"1660:37:99","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":26084,"name":"uint40","nodeType":"ElementaryTypeName","src":"1660:6:99","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"body":{"id":26100,"nodeType":"Block","src":"1914:37:99","statements":[]},"documentation":{"id":26086,"nodeType":"StructuredDocumentation","src":"1702:82:99","text":" @dev Constructor.\n @param pool The address of the Pool contract"},"id":26101,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":26092,"kind":"baseConstructorSpecifier","modifierName":{"id":26091,"name":"DebtTokenBase","nodeType":"IdentifierPath","referencedDeclaration":27722,"src":"1819:13:99"},"nodeType":"ModifierInvocation","src":"1819:15:99"},{"arguments":[{"id":26094,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26089,"src":"1853:4:99","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},{"hexValue":"535441424c455f444542545f544f4b454e5f494d504c","id":26095,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1859:24:99","typeDescriptions":{"typeIdentifier":"t_stringliteral_d8a924851ae84ebd4bea6282eeeaea45c38e81aa54290363a47944b2edbeb9ac","typeString":"literal_string \"STABLE_DEBT_TOKEN_IMPL\""},"value":"STABLE_DEBT_TOKEN_IMPL"},{"hexValue":"535441424c455f444542545f544f4b454e5f494d504c","id":26096,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1885:24:99","typeDescriptions":{"typeIdentifier":"t_stringliteral_d8a924851ae84ebd4bea6282eeeaea45c38e81aa54290363a47944b2edbeb9ac","typeString":"literal_string \"STABLE_DEBT_TOKEN_IMPL\""},"value":"STABLE_DEBT_TOKEN_IMPL"},{"hexValue":"30","id":26097,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1911:1:99","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":26098,"kind":"baseConstructorSpecifier","modifierName":{"id":26093,"name":"IncentivizedERC20","nodeType":"IdentifierPath","referencedDeclaration":28349,"src":"1835:17:99"},"nodeType":"ModifierInvocation","src":"1835:78:99"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":26090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26089,"mutability":"mutable","name":"pool","nameLocation":"1810:4:99","nodeType":"VariableDeclaration","scope":26101,"src":"1804:10:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":26088,"nodeType":"UserDefinedTypeName","pathNode":{"id":26087,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"1804:5:99"},"referencedDeclaration":4860,"src":"1804:5:99","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"}],"src":"1798:20:99"},"returnParameters":{"id":26099,"nodeType":"ParameterList","parameters":[],"src":"1914:0:99"},"scope":27108,"src":"1787:164:99","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[4220],"body":{"id":26173,"nodeType":"Block","src":"2284:516:99","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"id":26127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26125,"name":"initializingPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26105,"src":"2298:16:99","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":26126,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27929,"src":"2318:4:99","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"src":"2298:24:99","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":26128,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"2324:6:99","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":26129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"POOL_ADDRESSES_DO_NOT_MATCH","nodeType":"MemberAccess","referencedDeclaration":12629,"src":"2324:34:99","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":26124,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2290:7:99","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":26130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2290:69:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26131,"nodeType":"ExpressionStatement","src":"2290:69:99"},{"expression":{"arguments":[{"id":26133,"name":"debtTokenName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26114,"src":"2374:13:99","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":26132,"name":"_setName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28326,"src":"2365:8:99","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":26134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2365:23:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26135,"nodeType":"ExpressionStatement","src":"2365:23:99"},{"expression":{"arguments":[{"id":26137,"name":"debtTokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26116,"src":"2405:15:99","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":26136,"name":"_setSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28337,"src":"2394:10:99","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":26138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2394:27:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26139,"nodeType":"ExpressionStatement","src":"2394:27:99"},{"expression":{"arguments":[{"id":26141,"name":"debtTokenDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26112,"src":"2440:17:99","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":26140,"name":"_setDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28348,"src":"2427:12:99","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint8_$returns$__$","typeString":"function (uint8)"}},"id":26142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2427:31:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26143,"nodeType":"ExpressionStatement","src":"2427:31:99"},{"expression":{"id":26146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26144,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27524,"src":"2465:16:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":26145,"name":"underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26107,"src":"2484:15:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2465:34:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":26147,"nodeType":"ExpressionStatement","src":"2465:34:99"},{"expression":{"id":26150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26148,"name":"_incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27923,"src":"2505:21:99","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":26149,"name":"incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26110,"src":"2529:20:99","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"src":"2505:44:99","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"id":26151,"nodeType":"ExpressionStatement","src":"2505:44:99"},{"expression":{"id":26155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26152,"name":"_domainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27742,"src":"2556:16:99","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":26153,"name":"_calculateDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27815,"src":"2575:25:99","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":26154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2575:27:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2556:46:99","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":26156,"nodeType":"ExpressionStatement","src":"2556:46:99"},{"eventCall":{"arguments":[{"id":26158,"name":"underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26107,"src":"2633:15:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":26161,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27929,"src":"2664:4:99","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}],"id":26160,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2656:7:99","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":26159,"name":"address","nodeType":"ElementaryTypeName","src":"2656:7:99","typeDescriptions":{}}},"id":26162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2656:13:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":26165,"name":"incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26110,"src":"2685:20:99","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}],"id":26164,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2677:7:99","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":26163,"name":"address","nodeType":"ElementaryTypeName","src":"2677:7:99","typeDescriptions":{}}},"id":26166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2677:29:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26167,"name":"debtTokenDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26112,"src":"2714:17:99","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":26168,"name":"debtTokenName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26114,"src":"2739:13:99","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":26169,"name":"debtTokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26116,"src":"2760:15:99","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":26170,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26118,"src":"2783:6:99","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":26157,"name":"Initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4200,"src":"2614:11:99","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint8_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,uint8,string memory,string memory,bytes memory)"}},"id":26171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2614:181:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26172,"nodeType":"EmitStatement","src":"2609:186:99"}]},"documentation":{"id":26102,"nodeType":"StructuredDocumentation","src":"1955:39:99","text":"@inheritdoc IInitializableDebtToken"},"functionSelector":"c222ec8a","id":26174,"implemented":true,"kind":"function","modifiers":[{"id":26122,"kind":"modifierInvocation","modifierName":{"id":26121,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":10547,"src":"2272:11:99"},"nodeType":"ModifierInvocation","src":"2272:11:99"}],"name":"initialize","nameLocation":"2006:10:99","nodeType":"FunctionDefinition","overrides":{"id":26120,"nodeType":"OverrideSpecifier","overrides":[],"src":"2263:8:99"},"parameters":{"id":26119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26105,"mutability":"mutable","name":"initializingPool","nameLocation":"2028:16:99","nodeType":"VariableDeclaration","scope":26174,"src":"2022:22:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":26104,"nodeType":"UserDefinedTypeName","pathNode":{"id":26103,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"2022:5:99"},"referencedDeclaration":4860,"src":"2022:5:99","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"},{"constant":false,"id":26107,"mutability":"mutable","name":"underlyingAsset","nameLocation":"2058:15:99","nodeType":"VariableDeclaration","scope":26174,"src":"2050:23:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26106,"name":"address","nodeType":"ElementaryTypeName","src":"2050:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26110,"mutability":"mutable","name":"incentivesController","nameLocation":"2105:20:99","nodeType":"VariableDeclaration","scope":26174,"src":"2079:46:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"},"typeName":{"id":26109,"nodeType":"UserDefinedTypeName","pathNode":{"id":26108,"name":"IAaveIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":3875,"src":"2079:25:99"},"referencedDeclaration":3875,"src":"2079:25:99","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"visibility":"internal"},{"constant":false,"id":26112,"mutability":"mutable","name":"debtTokenDecimals","nameLocation":"2137:17:99","nodeType":"VariableDeclaration","scope":26174,"src":"2131:23:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":26111,"name":"uint8","nodeType":"ElementaryTypeName","src":"2131:5:99","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":26114,"mutability":"mutable","name":"debtTokenName","nameLocation":"2174:13:99","nodeType":"VariableDeclaration","scope":26174,"src":"2160:27:99","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":26113,"name":"string","nodeType":"ElementaryTypeName","src":"2160:6:99","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":26116,"mutability":"mutable","name":"debtTokenSymbol","nameLocation":"2207:15:99","nodeType":"VariableDeclaration","scope":26174,"src":"2193:29:99","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":26115,"name":"string","nodeType":"ElementaryTypeName","src":"2193:6:99","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":26118,"mutability":"mutable","name":"params","nameLocation":"2243:6:99","nodeType":"VariableDeclaration","scope":26174,"src":"2228:21:99","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":26117,"name":"bytes","nodeType":"ElementaryTypeName","src":"2228:5:99","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2016:237:99"},"returnParameters":{"id":26123,"nodeType":"ParameterList","parameters":[],"src":"2284:0:99"},"scope":27108,"src":"1997:803:99","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[10553],"body":{"id":26183,"nodeType":"Block","src":"2917:37:99","statements":[{"expression":{"id":26181,"name":"DEBT_TOKEN_REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26077,"src":"2930:19:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":26180,"id":26182,"nodeType":"Return","src":"2923:26:99"}]},"documentation":{"id":26175,"nodeType":"StructuredDocumentation","src":"2804:38:99","text":"@inheritdoc VersionedInitializable"},"id":26184,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"2854:11:99","nodeType":"FunctionDefinition","overrides":{"id":26177,"nodeType":"OverrideSpecifier","overrides":[],"src":"2890:8:99"},"parameters":{"id":26176,"nodeType":"ParameterList","parameters":[],"src":"2865:2:99"},"returnParameters":{"id":26180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26179,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26184,"src":"2908:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26178,"name":"uint256","nodeType":"ElementaryTypeName","src":"2908:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2907:9:99"},"scope":27108,"src":"2845:109:99","stateMutability":"pure","virtual":true,"visibility":"internal"},{"baseFunctions":[6052],"body":{"id":26193,"nodeType":"Block","src":"3074:32:99","statements":[{"expression":{"id":26191,"name":"_avgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26083,"src":"3087:14:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":26190,"id":26192,"nodeType":"Return","src":"3080:21:99"}]},"documentation":{"id":26185,"nodeType":"StructuredDocumentation","src":"2958:32:99","text":"@inheritdoc IStableDebtToken"},"functionSelector":"90f6fcf2","id":26194,"implemented":true,"kind":"function","modifiers":[],"name":"getAverageStableRate","nameLocation":"3002:20:99","nodeType":"FunctionDefinition","overrides":{"id":26187,"nodeType":"OverrideSpecifier","overrides":[],"src":"3047:8:99"},"parameters":{"id":26186,"nodeType":"ParameterList","parameters":[],"src":"3022:2:99"},"returnParameters":{"id":26190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26189,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26194,"src":"3065:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26188,"name":"uint256","nodeType":"ElementaryTypeName","src":"3065:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3064:9:99"},"scope":27108,"src":"2993:113:99","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[6068],"body":{"id":26207,"nodeType":"Block","src":"3235:35:99","statements":[{"expression":{"baseExpression":{"id":26203,"name":"_timestamps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26081,"src":"3248:11:99","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint40_$","typeString":"mapping(address => uint40)"}},"id":26205,"indexExpression":{"id":26204,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26197,"src":"3260:4:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3248:17:99","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"functionReturnParameters":26202,"id":26206,"nodeType":"Return","src":"3241:24:99"}]},"documentation":{"id":26195,"nodeType":"StructuredDocumentation","src":"3110:32:99","text":"@inheritdoc IStableDebtToken"},"functionSelector":"79ce6b8c","id":26208,"implemented":true,"kind":"function","modifiers":[],"name":"getUserLastUpdated","nameLocation":"3154:18:99","nodeType":"FunctionDefinition","overrides":{"id":26199,"nodeType":"OverrideSpecifier","overrides":[],"src":"3209:8:99"},"parameters":{"id":26198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26197,"mutability":"mutable","name":"user","nameLocation":"3181:4:99","nodeType":"VariableDeclaration","scope":26208,"src":"3173:12:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26196,"name":"address","nodeType":"ElementaryTypeName","src":"3173:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3172:14:99"},"returnParameters":{"id":26202,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26201,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26208,"src":"3227:6:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":26200,"name":"uint40","nodeType":"ElementaryTypeName","src":"3227:6:99","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"3226:8:99"},"scope":27108,"src":"3145:125:99","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[6060],"body":{"id":26222,"nodeType":"Block","src":"3399:49:99","statements":[{"expression":{"expression":{"baseExpression":{"id":26217,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"3412:10:99","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":26219,"indexExpression":{"id":26218,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26211,"src":"3423:4:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3412:16:99","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":26220,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":27900,"src":"3412:31:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":26216,"id":26221,"nodeType":"Return","src":"3405:38:99"}]},"documentation":{"id":26209,"nodeType":"StructuredDocumentation","src":"3274:32:99","text":"@inheritdoc IStableDebtToken"},"functionSelector":"e78c9b3b","id":26223,"implemented":true,"kind":"function","modifiers":[],"name":"getUserStableRate","nameLocation":"3318:17:99","nodeType":"FunctionDefinition","overrides":{"id":26213,"nodeType":"OverrideSpecifier","overrides":[],"src":"3372:8:99"},"parameters":{"id":26212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26211,"mutability":"mutable","name":"user","nameLocation":"3344:4:99","nodeType":"VariableDeclaration","scope":26223,"src":"3336:12:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26210,"name":"address","nodeType":"ElementaryTypeName","src":"3336:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3335:14:99"},"returnParameters":{"id":26216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26215,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26223,"src":"3390:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26214,"name":"uint256","nodeType":"ElementaryTypeName","src":"3390:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3389:9:99"},"scope":27108,"src":"3309:139:99","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[28020],"body":{"id":26268,"nodeType":"Block","src":"3560:350:99","statements":[{"assignments":[26233],"declarations":[{"constant":false,"id":26233,"mutability":"mutable","name":"accountBalance","nameLocation":"3574:14:99","nodeType":"VariableDeclaration","scope":26268,"src":"3566:22:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26232,"name":"uint256","nodeType":"ElementaryTypeName","src":"3566:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26238,"initialValue":{"arguments":[{"id":26236,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26226,"src":"3607:7:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":26234,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"3591:5:99","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_StableDebtToken_$27108_$","typeString":"type(contract super StableDebtToken)"}},"id":26235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":28020,"src":"3591:15:99","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":26237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3591:24:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3566:49:99"},{"assignments":[26240],"declarations":[{"constant":false,"id":26240,"mutability":"mutable","name":"stableRate","nameLocation":"3629:10:99","nodeType":"VariableDeclaration","scope":26268,"src":"3621:18:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26239,"name":"uint256","nodeType":"ElementaryTypeName","src":"3621:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26245,"initialValue":{"expression":{"baseExpression":{"id":26241,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"3642:10:99","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":26243,"indexExpression":{"id":26242,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26226,"src":"3653:7:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3642:19:99","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":26244,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":27900,"src":"3642:34:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"3621:55:99"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26246,"name":"accountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26233,"src":"3686:14:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":26247,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3704:1:99","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3686:19:99","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26252,"nodeType":"IfStatement","src":"3682:48:99","trueBody":{"id":26251,"nodeType":"Block","src":"3707:23:99","statements":[{"expression":{"hexValue":"30","id":26249,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3722:1:99","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":26231,"id":26250,"nodeType":"Return","src":"3715:8:99"}]}},{"assignments":[26254],"declarations":[{"constant":false,"id":26254,"mutability":"mutable","name":"cumulatedInterest","nameLocation":"3743:17:99","nodeType":"VariableDeclaration","scope":26268,"src":"3735:25:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26253,"name":"uint256","nodeType":"ElementaryTypeName","src":"3735:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26262,"initialValue":{"arguments":[{"id":26257,"name":"stableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26240,"src":"3808:10:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":26258,"name":"_timestamps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26081,"src":"3826:11:99","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint40_$","typeString":"mapping(address => uint40)"}},"id":26260,"indexExpression":{"id":26259,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26226,"src":"3838:7:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3826:20:99","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint40","typeString":"uint40"}],"expression":{"id":26255,"name":"MathUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21098,"src":"3763:9:99","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MathUtils_$21098_$","typeString":"type(library MathUtils)"}},"id":26256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateCompoundedInterest","nodeType":"MemberAccess","referencedDeclaration":21097,"src":"3763:37:99","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint40_$returns$_t_uint256_$","typeString":"function (uint256,uint40) view returns (uint256)"}},"id":26261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3763:89:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3735:117:99"},{"expression":{"arguments":[{"id":26265,"name":"cumulatedInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26254,"src":"3887:17:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":26263,"name":"accountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26233,"src":"3865:14:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"3865:21:99","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":26266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3865:40:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":26231,"id":26267,"nodeType":"Return","src":"3858:47:99"}]},"documentation":{"id":26224,"nodeType":"StructuredDocumentation","src":"3452:22:99","text":"@inheritdoc IERC20"},"functionSelector":"70a08231","id":26269,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"3486:9:99","nodeType":"FunctionDefinition","overrides":{"id":26228,"nodeType":"OverrideSpecifier","overrides":[],"src":"3533:8:99"},"parameters":{"id":26227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26226,"mutability":"mutable","name":"account","nameLocation":"3504:7:99","nodeType":"VariableDeclaration","scope":26269,"src":"3496:15:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26225,"name":"address","nodeType":"ElementaryTypeName","src":"3496:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3495:17:99"},"returnParameters":{"id":26231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26230,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26269,"src":"3551:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26229,"name":"uint256","nodeType":"ElementaryTypeName","src":"3551:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3550:9:99"},"scope":27108,"src":"3477:433:99","stateMutability":"view","virtual":true,"visibility":"public"},{"canonicalName":"StableDebtToken.MintLocalVars","id":26282,"members":[{"constant":false,"id":26271,"mutability":"mutable","name":"previousSupply","nameLocation":"3949:14:99","nodeType":"VariableDeclaration","scope":26282,"src":"3941:22:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26270,"name":"uint256","nodeType":"ElementaryTypeName","src":"3941:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26273,"mutability":"mutable","name":"nextSupply","nameLocation":"3977:10:99","nodeType":"VariableDeclaration","scope":26282,"src":"3969:18:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26272,"name":"uint256","nodeType":"ElementaryTypeName","src":"3969:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26275,"mutability":"mutable","name":"amountInRay","nameLocation":"4001:11:99","nodeType":"VariableDeclaration","scope":26282,"src":"3993:19:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26274,"name":"uint256","nodeType":"ElementaryTypeName","src":"3993:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26277,"mutability":"mutable","name":"currentStableRate","nameLocation":"4026:17:99","nodeType":"VariableDeclaration","scope":26282,"src":"4018:25:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26276,"name":"uint256","nodeType":"ElementaryTypeName","src":"4018:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26279,"mutability":"mutable","name":"nextStableRate","nameLocation":"4057:14:99","nodeType":"VariableDeclaration","scope":26282,"src":"4049:22:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26278,"name":"uint256","nodeType":"ElementaryTypeName","src":"4049:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26281,"mutability":"mutable","name":"currentAvgStableRate","nameLocation":"4085:20:99","nodeType":"VariableDeclaration","scope":26282,"src":"4077:28:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26280,"name":"uint256","nodeType":"ElementaryTypeName","src":"4077:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"MintLocalVars","nameLocation":"3921:13:99","nodeType":"StructDefinition","scope":27108,"src":"3914:196:99","visibility":"public"},{"baseFunctions":[6034],"body":{"id":26492,"nodeType":"Block","src":"4315:1573:99","statements":[{"assignments":[26305],"declarations":[{"constant":false,"id":26305,"mutability":"mutable","name":"vars","nameLocation":"4342:4:99","nodeType":"VariableDeclaration","scope":26492,"src":"4321:25:99","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$26282_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars"},"typeName":{"id":26304,"nodeType":"UserDefinedTypeName","pathNode":{"id":26303,"name":"MintLocalVars","nodeType":"IdentifierPath","referencedDeclaration":26282,"src":"4321:13:99"},"referencedDeclaration":26282,"src":"4321:13:99","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$26282_storage_ptr","typeString":"struct StableDebtToken.MintLocalVars"}},"visibility":"internal"}],"id":26306,"nodeType":"VariableDeclarationStatement","src":"4321:25:99"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":26309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26307,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26285,"src":"4357:4:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":26308,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26287,"src":"4365:10:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4357:18:99","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26317,"nodeType":"IfStatement","src":"4353:89:99","trueBody":{"id":26316,"nodeType":"Block","src":"4377:65:99","statements":[{"expression":{"arguments":[{"id":26311,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26287,"src":"4410:10:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26312,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26285,"src":"4422:4:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26313,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26289,"src":"4428:6:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26310,"name":"_decreaseBorrowAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27721,"src":"4385:24:99","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":26314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4385:50:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26315,"nodeType":"ExpressionStatement","src":"4385:50:99"}]}},{"assignments":[null,26319,26321],"declarations":[null,{"constant":false,"id":26319,"mutability":"mutable","name":"currentBalance","nameLocation":"4459:14:99","nodeType":"VariableDeclaration","scope":26492,"src":"4451:22:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26318,"name":"uint256","nodeType":"ElementaryTypeName","src":"4451:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26321,"mutability":"mutable","name":"balanceIncrease","nameLocation":"4483:15:99","nodeType":"VariableDeclaration","scope":26492,"src":"4475:23:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26320,"name":"uint256","nodeType":"ElementaryTypeName","src":"4475:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26325,"initialValue":{"arguments":[{"id":26323,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26287,"src":"4528:10:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":26322,"name":"_calculateBalanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26763,"src":"4502:25:99","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (address) view returns (uint256,uint256,uint256)"}},"id":26324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4502:37:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"4448:91:99"},{"expression":{"id":26331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":26326,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"4546:4:99","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$26282_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":26328,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"previousSupply","nodeType":"MemberAccess","referencedDeclaration":26271,"src":"4546:19:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":26329,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[26823],"referencedDeclaration":26823,"src":"4568:11:99","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":26330,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4568:13:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4546:35:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26332,"nodeType":"ExpressionStatement","src":"4546:35:99"},{"expression":{"id":26337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":26333,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"4587:4:99","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$26282_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":26335,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentAvgStableRate","nodeType":"MemberAccess","referencedDeclaration":26281,"src":"4587:25:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":26336,"name":"_avgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26083,"src":"4615:14:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"4587:42:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26338,"nodeType":"ExpressionStatement","src":"4587:42:99"},{"expression":{"id":26348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":26339,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"4635:4:99","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$26282_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":26341,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextSupply","nodeType":"MemberAccess","referencedDeclaration":26273,"src":"4635:15:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":26347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26342,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27914,"src":"4653:12:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":26343,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"4668:4:99","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$26282_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":26344,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"previousSupply","nodeType":"MemberAccess","referencedDeclaration":26271,"src":"4668:19:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":26345,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26289,"src":"4690:6:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4668:28:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4653:43:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4635:61:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26349,"nodeType":"ExpressionStatement","src":"4635:61:99"},{"expression":{"id":26356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":26350,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"4703:4:99","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$26282_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":26352,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"amountInRay","nodeType":"MemberAccess","referencedDeclaration":26275,"src":"4703:16:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":26353,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26289,"src":"4722:6:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":21218,"src":"4722:15:99","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":26355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4722:17:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4703:36:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26357,"nodeType":"ExpressionStatement","src":"4703:36:99"},{"expression":{"id":26365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":26358,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"4746:4:99","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$26282_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":26360,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentStableRate","nodeType":"MemberAccess","referencedDeclaration":26277,"src":"4746:22:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":26361,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"4771:10:99","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":26363,"indexExpression":{"id":26362,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26287,"src":"4782:10:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4771:22:99","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":26364,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":27900,"src":"4771:37:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"4746:62:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26366,"nodeType":"ExpressionStatement","src":"4746:62:99"},{"expression":{"id":26392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":26367,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"4814:4:99","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$26282_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":26369,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"nextStableRate","nodeType":"MemberAccess","referencedDeclaration":26279,"src":"4814:19:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26385,"name":"currentBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26319,"src":"4941:14:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":26386,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26289,"src":"4958:6:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4941:23:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":26388,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4940:25:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":21218,"src":"4940:34:99","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":26390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4940:36:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":26373,"name":"currentBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26319,"src":"4867:14:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":21218,"src":"4867:23:99","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":26375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4867:25:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":26370,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"4837:4:99","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$26282_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":26371,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentStableRate","nodeType":"MemberAccess","referencedDeclaration":26277,"src":"4837:22:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"4837:29:99","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":26376,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4837:56:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"id":26380,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26291,"src":"4926:4:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":26377,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"4902:4:99","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$26282_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":26378,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amountInRay","nodeType":"MemberAccess","referencedDeclaration":26275,"src":"4902:16:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"4902:23:99","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":26381,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4902:29:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4837:94:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":26383,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4836:96:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":21198,"src":"4836:103:99","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":26391,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4836:141:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4814:163:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26393,"nodeType":"ExpressionStatement","src":"4814:163:99"},{"expression":{"id":26402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":26394,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"4984:10:99","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":26396,"indexExpression":{"id":26395,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26287,"src":"4995:10:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4984:22:99","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":26397,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":27900,"src":"4984:37:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":26398,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"5024:4:99","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$26282_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":26399,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextStableRate","nodeType":"MemberAccess","referencedDeclaration":26279,"src":"5024:19:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"5024:29:99","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":26401,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5024:31:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"4984:71:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":26403,"nodeType":"ExpressionStatement","src":"4984:71:99"},{"expression":{"id":26414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26404,"name":"_totalSupplyTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26085,"src":"5093:21:99","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":26413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":26405,"name":"_timestamps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26081,"src":"5117:11:99","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint40_$","typeString":"mapping(address => uint40)"}},"id":26407,"indexExpression":{"id":26406,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26287,"src":"5129:10:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5117:23:99","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":26410,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"5150:5:99","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":26411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"5150:15:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26409,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5143:6:99","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":26408,"name":"uint40","nodeType":"ElementaryTypeName","src":"5143:6:99","typeDescriptions":{}}},"id":26412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5143:23:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"5117:49:99","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"5093:73:99","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"id":26415,"nodeType":"ExpressionStatement","src":"5093:73:99"},{"expression":{"id":26445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":26416,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"5223:4:99","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$26282_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":26418,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"currentAvgStableRate","nodeType":"MemberAccess","referencedDeclaration":26281,"src":"5223:25:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":26444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26419,"name":"_avgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26083,"src":"5251:14:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":26436,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"5390:4:99","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$26282_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":26437,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextSupply","nodeType":"MemberAccess","referencedDeclaration":26273,"src":"5390:15:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":21218,"src":"5390:24:99","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":26439,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5390:26:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":26423,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"5310:4:99","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$26282_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":26424,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"previousSupply","nodeType":"MemberAccess","referencedDeclaration":26271,"src":"5310:19:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":21218,"src":"5310:28:99","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":26426,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5310:30:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":26420,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"5277:4:99","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$26282_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":26421,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentAvgStableRate","nodeType":"MemberAccess","referencedDeclaration":26281,"src":"5277:25:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"5277:32:99","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":26427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5277:64:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"expression":{"id":26430,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"5364:4:99","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$26282_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":26431,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amountInRay","nodeType":"MemberAccess","referencedDeclaration":26275,"src":"5364:16:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":26428,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26291,"src":"5352:4:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"5352:11:99","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":26432,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5352:29:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5277:104:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":26434,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5276:106:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":21198,"src":"5276:113:99","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":26440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5276:141:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":26441,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5268:155:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"5268:165:99","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":26443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5268:167:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"5251:184:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"5223:212:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26446,"nodeType":"ExpressionStatement","src":"5223:212:99"},{"assignments":[26448],"declarations":[{"constant":false,"id":26448,"mutability":"mutable","name":"amountToMint","nameLocation":"5450:12:99","nodeType":"VariableDeclaration","scope":26492,"src":"5442:20:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26447,"name":"uint256","nodeType":"ElementaryTypeName","src":"5442:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26452,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26449,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26289,"src":"5465:6:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":26450,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26321,"src":"5474:15:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5465:24:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5442:47:99"},{"expression":{"arguments":[{"id":26454,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26287,"src":"5501:10:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26455,"name":"amountToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26448,"src":"5513:12:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":26456,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"5527:4:99","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$26282_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":26457,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"previousSupply","nodeType":"MemberAccess","referencedDeclaration":26271,"src":"5527:19:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26453,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26945,"src":"5495:5:99","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":26458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5495:52:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26459,"nodeType":"ExpressionStatement","src":"5495:52:99"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":26463,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5576:1:99","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":26462,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5568:7:99","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":26461,"name":"address","nodeType":"ElementaryTypeName","src":"5568:7:99","typeDescriptions":{}}},"id":26464,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5568:10:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26465,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26287,"src":"5580:10:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26466,"name":"amountToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26448,"src":"5592:12:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26460,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"5559:8:99","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":26467,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5559:46:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26468,"nodeType":"EmitStatement","src":"5554:51:99"},{"eventCall":{"arguments":[{"id":26470,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26285,"src":"5628:4:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26471,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26287,"src":"5640:10:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26472,"name":"amountToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26448,"src":"5658:12:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26473,"name":"currentBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26319,"src":"5678:14:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26474,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26321,"src":"5700:15:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":26475,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"5723:4:99","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$26282_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":26476,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextStableRate","nodeType":"MemberAccess","referencedDeclaration":26279,"src":"5723:19:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":26477,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"5750:4:99","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$26282_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":26478,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentAvgStableRate","nodeType":"MemberAccess","referencedDeclaration":26281,"src":"5750:25:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":26479,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"5783:4:99","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$26282_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":26480,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextSupply","nodeType":"MemberAccess","referencedDeclaration":26273,"src":"5783:15:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26469,"name":"Mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6001,"src":"5616:4:99","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256,uint256,uint256,uint256,uint256)"}},"id":26481,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5616:188:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26482,"nodeType":"EmitStatement","src":"5611:193:99"},{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26483,"name":"currentBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26319,"src":"5819:14:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":26484,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5837:1:99","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5819:19:99","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":26486,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"5840:4:99","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$26282_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":26487,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"nextSupply","nodeType":"MemberAccess","referencedDeclaration":26273,"src":"5840:15:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":26488,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26305,"src":"5857:4:99","typeDescriptions":{"typeIdentifier":"t_struct$_MintLocalVars_$26282_memory_ptr","typeString":"struct StableDebtToken.MintLocalVars memory"}},"id":26489,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentAvgStableRate","nodeType":"MemberAccess","referencedDeclaration":26281,"src":"5857:25:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":26490,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5818:65:99","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$_t_uint256_$","typeString":"tuple(bool,uint256,uint256)"}},"functionReturnParameters":26302,"id":26491,"nodeType":"Return","src":"5811:72:99"}]},"documentation":{"id":26283,"nodeType":"StructuredDocumentation","src":"4114:32:99","text":"@inheritdoc IStableDebtToken"},"functionSelector":"b3f1c93d","id":26493,"implemented":true,"kind":"function","modifiers":[{"id":26295,"kind":"modifierInvocation","modifierName":{"id":26294,"name":"onlyPool","nodeType":"IdentifierPath","referencedDeclaration":27896,"src":"4273:8:99"},"nodeType":"ModifierInvocation","src":"4273:8:99"}],"name":"mint","nameLocation":"4158:4:99","nodeType":"FunctionDefinition","overrides":{"id":26293,"nodeType":"OverrideSpecifier","overrides":[],"src":"4264:8:99"},"parameters":{"id":26292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26285,"mutability":"mutable","name":"user","nameLocation":"4176:4:99","nodeType":"VariableDeclaration","scope":26493,"src":"4168:12:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26284,"name":"address","nodeType":"ElementaryTypeName","src":"4168:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26287,"mutability":"mutable","name":"onBehalfOf","nameLocation":"4194:10:99","nodeType":"VariableDeclaration","scope":26493,"src":"4186:18:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26286,"name":"address","nodeType":"ElementaryTypeName","src":"4186:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26289,"mutability":"mutable","name":"amount","nameLocation":"4218:6:99","nodeType":"VariableDeclaration","scope":26493,"src":"4210:14:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26288,"name":"uint256","nodeType":"ElementaryTypeName","src":"4210:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26291,"mutability":"mutable","name":"rate","nameLocation":"4238:4:99","nodeType":"VariableDeclaration","scope":26493,"src":"4230:12:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26290,"name":"uint256","nodeType":"ElementaryTypeName","src":"4230:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4162:84:99"},"returnParameters":{"id":26302,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26297,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26493,"src":"4291:4:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":26296,"name":"bool","nodeType":"ElementaryTypeName","src":"4291:4:99","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":26299,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26493,"src":"4297:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26298,"name":"uint256","nodeType":"ElementaryTypeName","src":"4297:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26301,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26493,"src":"4306:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26300,"name":"uint256","nodeType":"ElementaryTypeName","src":"4306:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4290:24:99"},"scope":27108,"src":"4149:1739:99","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[6046],"body":{"id":26719,"nodeType":"Block","src":"6045:2369:99","statements":[{"assignments":[null,26509,26511],"declarations":[null,{"constant":false,"id":26509,"mutability":"mutable","name":"currentBalance","nameLocation":"6062:14:99","nodeType":"VariableDeclaration","scope":26719,"src":"6054:22:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26508,"name":"uint256","nodeType":"ElementaryTypeName","src":"6054:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26511,"mutability":"mutable","name":"balanceIncrease","nameLocation":"6086:15:99","nodeType":"VariableDeclaration","scope":26719,"src":"6078:23:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26510,"name":"uint256","nodeType":"ElementaryTypeName","src":"6078:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26515,"initialValue":{"arguments":[{"id":26513,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26496,"src":"6131:4:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":26512,"name":"_calculateBalanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26763,"src":"6105:25:99","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (address) view returns (uint256,uint256,uint256)"}},"id":26514,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6105:31:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"6051:85:99"},{"assignments":[26517],"declarations":[{"constant":false,"id":26517,"mutability":"mutable","name":"previousSupply","nameLocation":"6151:14:99","nodeType":"VariableDeclaration","scope":26719,"src":"6143:22:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26516,"name":"uint256","nodeType":"ElementaryTypeName","src":"6143:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26520,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":26518,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[26823],"referencedDeclaration":26823,"src":"6168:11:99","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":26519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6168:13:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6143:38:99"},{"assignments":[26522],"declarations":[{"constant":false,"id":26522,"mutability":"mutable","name":"nextAvgStableRate","nameLocation":"6195:17:99","nodeType":"VariableDeclaration","scope":26719,"src":"6187:25:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26521,"name":"uint256","nodeType":"ElementaryTypeName","src":"6187:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26524,"initialValue":{"hexValue":"30","id":26523,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6215:1:99","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6187:29:99"},{"assignments":[26526],"declarations":[{"constant":false,"id":26526,"mutability":"mutable","name":"nextSupply","nameLocation":"6230:10:99","nodeType":"VariableDeclaration","scope":26719,"src":"6222:18:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26525,"name":"uint256","nodeType":"ElementaryTypeName","src":"6222:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26528,"initialValue":{"hexValue":"30","id":26527,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6243:1:99","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6222:22:99"},{"assignments":[26530],"declarations":[{"constant":false,"id":26530,"mutability":"mutable","name":"userStableRate","nameLocation":"6258:14:99","nodeType":"VariableDeclaration","scope":26719,"src":"6250:22:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26529,"name":"uint256","nodeType":"ElementaryTypeName","src":"6250:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26535,"initialValue":{"expression":{"baseExpression":{"id":26531,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"6275:10:99","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":26533,"indexExpression":{"id":26532,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26496,"src":"6286:4:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6275:16:99","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":26534,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":27900,"src":"6275:31:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"6250:56:99"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26536,"name":"previousSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26517,"src":"6621:14:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":26537,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26498,"src":"6639:6:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6621:24:99","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":26608,"nodeType":"Block","src":"6710:693:99","statements":[{"expression":{"id":26554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26548,"name":"nextSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26526,"src":"6718:10:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":26553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26549,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27914,"src":"6731:12:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26550,"name":"previousSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26517,"src":"6746:14:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":26551,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26498,"src":"6763:6:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6746:23:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6731:38:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6718:51:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26555,"nodeType":"ExpressionStatement","src":"6718:51:99"},{"assignments":[26557],"declarations":[{"constant":false,"id":26557,"mutability":"mutable","name":"firstTerm","nameLocation":"6785:9:99","nodeType":"VariableDeclaration","scope":26608,"src":"6777:17:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26556,"name":"uint256","nodeType":"ElementaryTypeName","src":"6777:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26567,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":26563,"name":"previousSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26517,"src":"6828:14:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":21218,"src":"6828:23:99","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":26565,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6828:25:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":26560,"name":"_avgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26083,"src":"6805:14:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":26559,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6797:7:99","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":26558,"name":"uint256","nodeType":"ElementaryTypeName","src":"6797:7:99","typeDescriptions":{}}},"id":26561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6797:23:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"6797:30:99","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":26566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6797:57:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6777:77:99"},{"assignments":[26569],"declarations":[{"constant":false,"id":26569,"mutability":"mutable","name":"secondTerm","nameLocation":"6870:10:99","nodeType":"VariableDeclaration","scope":26608,"src":"6862:18:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26568,"name":"uint256","nodeType":"ElementaryTypeName","src":"6862:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26576,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":26572,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26498,"src":"6905:6:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":21218,"src":"6905:15:99","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":26574,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6905:17:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":26570,"name":"userStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26530,"src":"6883:14:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"6883:21:99","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":26575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6883:40:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6862:61:99"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26577,"name":"secondTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26569,"src":"7150:10:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":26578,"name":"firstTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26557,"src":"7164:9:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7150:23:99","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":26606,"nodeType":"Block","src":"7253:144:99","statements":[{"expression":{"id":26604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26589,"name":"nextAvgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26522,"src":"7263:17:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":26603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26590,"name":"_avgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26083,"src":"7283:14:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":26596,"name":"nextSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26526,"src":"7344:10:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"wadToRay","nodeType":"MemberAccess","referencedDeclaration":21218,"src":"7344:19:99","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":26598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7344:21:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26591,"name":"firstTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26557,"src":"7313:9:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":26592,"name":"secondTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26569,"src":"7325:10:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7313:22:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":26594,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7312:24:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":21198,"src":"7312:31:99","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":26599,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7312:54:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":26600,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7300:76:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"7300:86:99","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":26602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7300:88:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"7283:105:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"7263:125:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26605,"nodeType":"ExpressionStatement","src":"7263:125:99"}]},"id":26607,"nodeType":"IfStatement","src":"7146:251:99","trueBody":{"id":26588,"nodeType":"Block","src":"7175:72:99","statements":[{"expression":{"id":26586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26580,"name":"nextAvgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26522,"src":"7185:17:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":26585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26581,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27914,"src":"7205:12:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":26584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26582,"name":"_avgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26083,"src":"7220:14:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":26583,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7237:1:99","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7220:18:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"7205:33:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7185:53:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26587,"nodeType":"ExpressionStatement","src":"7185:53:99"}]}}]},"id":26609,"nodeType":"IfStatement","src":"6617:786:99","trueBody":{"id":26547,"nodeType":"Block","src":"6647:57:99","statements":[{"expression":{"id":26541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26539,"name":"_avgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26083,"src":"6655:14:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":26540,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6672:1:99","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6655:18:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":26542,"nodeType":"ExpressionStatement","src":"6655:18:99"},{"expression":{"id":26545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26543,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27914,"src":"6681:12:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":26544,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6696:1:99","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6681:16:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26546,"nodeType":"ExpressionStatement","src":"6681:16:99"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26610,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26498,"src":"7413:6:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":26611,"name":"currentBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26509,"src":"7423:14:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7413:24:99","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":26637,"nodeType":"Block","src":"7524:91:99","statements":[{"expression":{"id":26635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":26627,"name":"_timestamps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26081,"src":"7565:11:99","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint40_$","typeString":"mapping(address => uint40)"}},"id":26629,"indexExpression":{"id":26628,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26496,"src":"7577:4:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7565:17:99","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":26632,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"7592:5:99","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":26633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"7592:15:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26631,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7585:6:99","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":26630,"name":"uint40","nodeType":"ElementaryTypeName","src":"7585:6:99","typeDescriptions":{}}},"id":26634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7585:23:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"7565:43:99","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"id":26636,"nodeType":"ExpressionStatement","src":"7565:43:99"}]},"id":26638,"nodeType":"IfStatement","src":"7409:206:99","trueBody":{"id":26626,"nodeType":"Block","src":"7439:79:99","statements":[{"expression":{"id":26618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":26613,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"7447:10:99","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":26615,"indexExpression":{"id":26614,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26496,"src":"7458:4:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7447:16:99","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":26616,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":27900,"src":"7447:31:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":26617,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7481:1:99","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7447:35:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":26619,"nodeType":"ExpressionStatement","src":"7447:35:99"},{"expression":{"id":26624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":26620,"name":"_timestamps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26081,"src":"7490:11:99","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint40_$","typeString":"mapping(address => uint40)"}},"id":26622,"indexExpression":{"id":26621,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26496,"src":"7502:4:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7490:17:99","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":26623,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7510:1:99","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7490:21:99","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"id":26625,"nodeType":"ExpressionStatement","src":"7490:21:99"}]}},{"expression":{"id":26645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26639,"name":"_totalSupplyTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26085,"src":"7651:21:99","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":26642,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"7682:5:99","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":26643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"7682:15:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26641,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7675:6:99","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":26640,"name":"uint40","nodeType":"ElementaryTypeName","src":"7675:6:99","typeDescriptions":{}}},"id":26644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7675:23:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"7651:47:99","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"id":26646,"nodeType":"ExpressionStatement","src":"7651:47:99"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26647,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26511,"src":"7709:15:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":26648,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26498,"src":"7727:6:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7709:24:99","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":26713,"nodeType":"Block","src":"8100:265:99","statements":[{"assignments":[26684],"declarations":[{"constant":false,"id":26684,"mutability":"mutable","name":"amountToBurn","nameLocation":"8116:12:99","nodeType":"VariableDeclaration","scope":26713,"src":"8108:20:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26683,"name":"uint256","nodeType":"ElementaryTypeName","src":"8108:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26688,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26685,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26498,"src":"8131:6:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":26686,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26511,"src":"8140:15:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8131:24:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8108:47:99"},{"expression":{"arguments":[{"id":26690,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26496,"src":"8169:4:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26691,"name":"amountToBurn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26684,"src":"8175:12:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26692,"name":"previousSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26517,"src":"8189:14:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26689,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26997,"src":"8163:5:99","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":26693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8163:41:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26694,"nodeType":"ExpressionStatement","src":"8163:41:99"},{"eventCall":{"arguments":[{"id":26696,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26496,"src":"8226:4:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":26699,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8240:1:99","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":26698,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8232:7:99","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":26697,"name":"address","nodeType":"ElementaryTypeName","src":"8232:7:99","typeDescriptions":{}}},"id":26700,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8232:10:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26701,"name":"amountToBurn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26684,"src":"8244:12:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26695,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"8217:8:99","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":26702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8217:40:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26703,"nodeType":"EmitStatement","src":"8212:45:99"},{"eventCall":{"arguments":[{"id":26705,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26496,"src":"8275:4:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26706,"name":"amountToBurn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26684,"src":"8281:12:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26707,"name":"currentBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26509,"src":"8295:14:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26708,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26511,"src":"8311:15:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26709,"name":"nextAvgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26522,"src":"8328:17:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26710,"name":"nextSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26526,"src":"8347:10:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26704,"name":"Burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6016,"src":"8270:4:99","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256,uint256,uint256,uint256)"}},"id":26711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8270:88:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26712,"nodeType":"EmitStatement","src":"8265:93:99"}]},"id":26714,"nodeType":"IfStatement","src":"7705:660:99","trueBody":{"id":26682,"nodeType":"Block","src":"7735:359:99","statements":[{"assignments":[26651],"declarations":[{"constant":false,"id":26651,"mutability":"mutable","name":"amountToMint","nameLocation":"7751:12:99","nodeType":"VariableDeclaration","scope":26682,"src":"7743:20:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26650,"name":"uint256","nodeType":"ElementaryTypeName","src":"7743:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26655,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26652,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26511,"src":"7766:15:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":26653,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26498,"src":"7784:6:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7766:24:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7743:47:99"},{"expression":{"arguments":[{"id":26657,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26496,"src":"7804:4:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26658,"name":"amountToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26651,"src":"7810:12:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26659,"name":"previousSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26517,"src":"7824:14:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26656,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26945,"src":"7798:5:99","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256)"}},"id":26660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7798:41:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26661,"nodeType":"ExpressionStatement","src":"7798:41:99"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":26665,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7869:1:99","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":26664,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7861:7:99","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":26663,"name":"address","nodeType":"ElementaryTypeName","src":"7861:7:99","typeDescriptions":{}}},"id":26666,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7861:10:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26667,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26496,"src":"7873:4:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26668,"name":"amountToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26651,"src":"7879:12:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26662,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"7852:8:99","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":26669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7852:40:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26670,"nodeType":"EmitStatement","src":"7847:45:99"},{"eventCall":{"arguments":[{"id":26672,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26496,"src":"7919:4:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26673,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26496,"src":"7933:4:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26674,"name":"amountToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26651,"src":"7947:12:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26675,"name":"currentBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26509,"src":"7969:14:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26676,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26511,"src":"7993:15:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26677,"name":"userStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26530,"src":"8018:14:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26678,"name":"nextAvgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26522,"src":"8042:17:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26679,"name":"nextSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26526,"src":"8069:10:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26671,"name":"Mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6001,"src":"7905:4:99","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256,uint256,uint256,uint256,uint256)"}},"id":26680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7905:182:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26681,"nodeType":"EmitStatement","src":"7900:187:99"}]}},{"expression":{"components":[{"id":26715,"name":"nextSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26526,"src":"8379:10:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26716,"name":"nextAvgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26522,"src":"8391:17:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":26717,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8378:31:99","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":26507,"id":26718,"nodeType":"Return","src":"8371:38:99"}]},"documentation":{"id":26494,"nodeType":"StructuredDocumentation","src":"5892:32:99","text":"@inheritdoc IStableDebtToken"},"functionSelector":"9dc29fac","id":26720,"implemented":true,"kind":"function","modifiers":[{"id":26502,"kind":"modifierInvocation","modifierName":{"id":26501,"name":"onlyPool","nodeType":"IdentifierPath","referencedDeclaration":27896,"src":"6009:8:99"},"nodeType":"ModifierInvocation","src":"6009:8:99"}],"name":"burn","nameLocation":"5936:4:99","nodeType":"FunctionDefinition","overrides":{"id":26500,"nodeType":"OverrideSpecifier","overrides":[],"src":"6000:8:99"},"parameters":{"id":26499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26496,"mutability":"mutable","name":"from","nameLocation":"5954:4:99","nodeType":"VariableDeclaration","scope":26720,"src":"5946:12:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26495,"name":"address","nodeType":"ElementaryTypeName","src":"5946:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26498,"mutability":"mutable","name":"amount","nameLocation":"5972:6:99","nodeType":"VariableDeclaration","scope":26720,"src":"5964:14:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26497,"name":"uint256","nodeType":"ElementaryTypeName","src":"5964:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5940:42:99"},"returnParameters":{"id":26507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26504,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26720,"src":"6027:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26503,"name":"uint256","nodeType":"ElementaryTypeName","src":"6027:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26506,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26720,"src":"6036:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26505,"name":"uint256","nodeType":"ElementaryTypeName","src":"6036:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6026:18:99"},"scope":27108,"src":"5927:2487:99","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"body":{"id":26762,"nodeType":"Block","src":"8819:324:99","statements":[{"assignments":[26733],"declarations":[{"constant":false,"id":26733,"mutability":"mutable","name":"previousPrincipalBalance","nameLocation":"8833:24:99","nodeType":"VariableDeclaration","scope":26762,"src":"8825:32:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26732,"name":"uint256","nodeType":"ElementaryTypeName","src":"8825:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26738,"initialValue":{"arguments":[{"id":26736,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26723,"src":"8876:4:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":26734,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"8860:5:99","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_StableDebtToken_$27108_$","typeString":"type(contract super StableDebtToken)"}},"id":26735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":28020,"src":"8860:15:99","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":26737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8860:21:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8825:56:99"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26739,"name":"previousPrincipalBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26733,"src":"8892:24:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":26740,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8920:1:99","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8892:29:99","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26748,"nodeType":"IfStatement","src":"8888:66:99","trueBody":{"id":26747,"nodeType":"Block","src":"8923:31:99","statements":[{"expression":{"components":[{"hexValue":"30","id":26742,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8939:1:99","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":26743,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8942:1:99","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":26744,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8945:1:99","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":26745,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"8938:9:99","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_rational_0_by_1_$_t_rational_0_by_1_$","typeString":"tuple(int_const 0,int_const 0,int_const 0)"}},"functionReturnParameters":26731,"id":26746,"nodeType":"Return","src":"8931:16:99"}]}},{"assignments":[26750],"declarations":[{"constant":false,"id":26750,"mutability":"mutable","name":"newPrincipalBalance","nameLocation":"8968:19:99","nodeType":"VariableDeclaration","scope":26762,"src":"8960:27:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26749,"name":"uint256","nodeType":"ElementaryTypeName","src":"8960:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26754,"initialValue":{"arguments":[{"id":26752,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26723,"src":"9000:4:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":26751,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[26269],"referencedDeclaration":26269,"src":"8990:9:99","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":26753,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8990:15:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8960:45:99"},{"expression":{"components":[{"id":26755,"name":"previousPrincipalBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26733,"src":"9027:24:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26756,"name":"newPrincipalBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26750,"src":"9059:19:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26757,"name":"newPrincipalBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26750,"src":"9086:19:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":26758,"name":"previousPrincipalBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26733,"src":"9108:24:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9086:46:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":26760,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9019:119:99","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"functionReturnParameters":26731,"id":26761,"nodeType":"Return","src":"9012:126:99"}]},"documentation":{"id":26721,"nodeType":"StructuredDocumentation","src":"8418:291:99","text":" @notice Calculates the increase in balance since the last user interaction\n @param user The address of the user for which the interest is being accumulated\n @return The previous principal balance\n @return The new principal balance\n @return The balance increase"},"id":26763,"implemented":true,"kind":"function","modifiers":[],"name":"_calculateBalanceIncrease","nameLocation":"8721:25:99","nodeType":"FunctionDefinition","parameters":{"id":26724,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26723,"mutability":"mutable","name":"user","nameLocation":"8760:4:99","nodeType":"VariableDeclaration","scope":26763,"src":"8752:12:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26722,"name":"address","nodeType":"ElementaryTypeName","src":"8752:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8746:22:99"},"returnParameters":{"id":26731,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26726,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26763,"src":"8792:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26725,"name":"uint256","nodeType":"ElementaryTypeName","src":"8792:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26728,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26763,"src":"8801:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26727,"name":"uint256","nodeType":"ElementaryTypeName","src":"8801:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26730,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26763,"src":"8810:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26729,"name":"uint256","nodeType":"ElementaryTypeName","src":"8810:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8791:27:99"},"scope":27108,"src":"8712:431:99","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[6080],"body":{"id":26790,"nodeType":"Block","src":"9274:136:99","statements":[{"assignments":[26777],"declarations":[{"constant":false,"id":26777,"mutability":"mutable","name":"avgRate","nameLocation":"9288:7:99","nodeType":"VariableDeclaration","scope":26790,"src":"9280:15:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26776,"name":"uint256","nodeType":"ElementaryTypeName","src":"9280:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26779,"initialValue":{"id":26778,"name":"_avgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26083,"src":"9298:14:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"9280:32:99"},{"expression":{"components":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":26780,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"9326:5:99","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_StableDebtToken_$27108_$","typeString":"type(contract super StableDebtToken)"}},"id":26781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":28005,"src":"9326:17:99","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":26782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9326:19:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":26784,"name":"avgRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26777,"src":"9364:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26783,"name":"_calcTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26893,"src":"9347:16:99","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":26785,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9347:25:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26786,"name":"avgRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26777,"src":"9374:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26787,"name":"_totalSupplyTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26085,"src":"9383:21:99","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"id":26788,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9325:80:99","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint40_$","typeString":"tuple(uint256,uint256,uint256,uint40)"}},"functionReturnParameters":26775,"id":26789,"nodeType":"Return","src":"9318:87:99"}]},"documentation":{"id":26764,"nodeType":"StructuredDocumentation","src":"9147:32:99","text":"@inheritdoc IStableDebtToken"},"functionSelector":"79774338","id":26791,"implemented":true,"kind":"function","modifiers":[],"name":"getSupplyData","nameLocation":"9191:13:99","nodeType":"FunctionDefinition","overrides":{"id":26766,"nodeType":"OverrideSpecifier","overrides":[],"src":"9221:8:99"},"parameters":{"id":26765,"nodeType":"ParameterList","parameters":[],"src":"9204:2:99"},"returnParameters":{"id":26775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26768,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26791,"src":"9239:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26767,"name":"uint256","nodeType":"ElementaryTypeName","src":"9239:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26770,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26791,"src":"9248:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26769,"name":"uint256","nodeType":"ElementaryTypeName","src":"9248:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26772,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26791,"src":"9257:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26771,"name":"uint256","nodeType":"ElementaryTypeName","src":"9257:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26774,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26791,"src":"9266:6:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":26773,"name":"uint40","nodeType":"ElementaryTypeName","src":"9266:6:99","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"9238:35:99"},"scope":27108,"src":"9182:228:99","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[6094],"body":{"id":26810,"nodeType":"Block","src":"9535:92:99","statements":[{"assignments":[26801],"declarations":[{"constant":false,"id":26801,"mutability":"mutable","name":"avgRate","nameLocation":"9549:7:99","nodeType":"VariableDeclaration","scope":26810,"src":"9541:15:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26800,"name":"uint256","nodeType":"ElementaryTypeName","src":"9541:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26803,"initialValue":{"id":26802,"name":"_avgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26083,"src":"9559:14:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"9541:32:99"},{"expression":{"components":[{"arguments":[{"id":26805,"name":"avgRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26801,"src":"9604:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26804,"name":"_calcTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26893,"src":"9587:16:99","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":26806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9587:25:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26807,"name":"avgRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26801,"src":"9614:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":26808,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9586:36:99","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":26799,"id":26809,"nodeType":"Return","src":"9579:43:99"}]},"documentation":{"id":26792,"nodeType":"StructuredDocumentation","src":"9414:32:99","text":"@inheritdoc IStableDebtToken"},"functionSelector":"f731e9be","id":26811,"implemented":true,"kind":"function","modifiers":[],"name":"getTotalSupplyAndAvgRate","nameLocation":"9458:24:99","nodeType":"FunctionDefinition","overrides":{"id":26794,"nodeType":"OverrideSpecifier","overrides":[],"src":"9499:8:99"},"parameters":{"id":26793,"nodeType":"ParameterList","parameters":[],"src":"9482:2:99"},"returnParameters":{"id":26799,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26796,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26811,"src":"9517:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26795,"name":"uint256","nodeType":"ElementaryTypeName","src":"9517:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26798,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26811,"src":"9526:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26797,"name":"uint256","nodeType":"ElementaryTypeName","src":"9526:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9516:18:99"},"scope":27108,"src":"9449:178:99","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[28005],"body":{"id":26822,"nodeType":"Block","src":"9726:50:99","statements":[{"expression":{"arguments":[{"id":26819,"name":"_avgStableRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26083,"src":"9756:14:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":26818,"name":"_calcTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26893,"src":"9739:16:99","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":26820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9739:32:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":26817,"id":26821,"nodeType":"Return","src":"9732:39:99"}]},"documentation":{"id":26812,"nodeType":"StructuredDocumentation","src":"9631:22:99","text":"@inheritdoc IERC20"},"functionSelector":"18160ddd","id":26823,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"9665:11:99","nodeType":"FunctionDefinition","overrides":{"id":26814,"nodeType":"OverrideSpecifier","overrides":[],"src":"9699:8:99"},"parameters":{"id":26813,"nodeType":"ParameterList","parameters":[],"src":"9676:2:99"},"returnParameters":{"id":26817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26816,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26823,"src":"9717:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26815,"name":"uint256","nodeType":"ElementaryTypeName","src":"9717:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9716:9:99"},"scope":27108,"src":"9656:120:99","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[6086],"body":{"id":26832,"nodeType":"Block","src":"9892:39:99","statements":[{"expression":{"id":26830,"name":"_totalSupplyTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26085,"src":"9905:21:99","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"functionReturnParameters":26829,"id":26831,"nodeType":"Return","src":"9898:28:99"}]},"documentation":{"id":26824,"nodeType":"StructuredDocumentation","src":"9780:32:99","text":"@inheritdoc IStableDebtToken"},"functionSelector":"e7484890","id":26833,"implemented":true,"kind":"function","modifiers":[],"name":"getTotalSupplyLastUpdated","nameLocation":"9824:25:99","nodeType":"FunctionDefinition","overrides":{"id":26826,"nodeType":"OverrideSpecifier","overrides":[],"src":"9866:8:99"},"parameters":{"id":26825,"nodeType":"ParameterList","parameters":[],"src":"9849:2:99"},"returnParameters":{"id":26829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26828,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26833,"src":"9884:6:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":26827,"name":"uint40","nodeType":"ElementaryTypeName","src":"9884:6:99","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"9883:8:99"},"scope":27108,"src":"9815:116:99","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[6102],"body":{"id":26847,"nodeType":"Block","src":"10061:39:99","statements":[{"expression":{"arguments":[{"id":26844,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26836,"src":"10090:4:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":26842,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"10074:5:99","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_StableDebtToken_$27108_$","typeString":"type(contract super StableDebtToken)"}},"id":26843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":28020,"src":"10074:15:99","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":26845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10074:21:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":26841,"id":26846,"nodeType":"Return","src":"10067:28:99"}]},"documentation":{"id":26834,"nodeType":"StructuredDocumentation","src":"9935:32:99","text":"@inheritdoc IStableDebtToken"},"functionSelector":"c634dfaa","id":26848,"implemented":true,"kind":"function","modifiers":[],"name":"principalBalanceOf","nameLocation":"9979:18:99","nodeType":"FunctionDefinition","overrides":{"id":26838,"nodeType":"OverrideSpecifier","overrides":[],"src":"10034:8:99"},"parameters":{"id":26837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26836,"mutability":"mutable","name":"user","nameLocation":"10006:4:99","nodeType":"VariableDeclaration","scope":26848,"src":"9998:12:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26835,"name":"address","nodeType":"ElementaryTypeName","src":"9998:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9997:14:99"},"returnParameters":{"id":26841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26840,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26848,"src":"10052:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26839,"name":"uint256","nodeType":"ElementaryTypeName","src":"10052:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10051:9:99"},"scope":27108,"src":"9970:130:99","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[6108],"body":{"id":26857,"nodeType":"Block","src":"10216:34:99","statements":[{"expression":{"id":26855,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27524,"src":"10229:16:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":26854,"id":26856,"nodeType":"Return","src":"10222:23:99"}]},"documentation":{"id":26849,"nodeType":"StructuredDocumentation","src":"10104:32:99","text":"@inheritdoc IStableDebtToken"},"functionSelector":"b16a19de","id":26858,"implemented":true,"kind":"function","modifiers":[],"name":"UNDERLYING_ASSET_ADDRESS","nameLocation":"10148:24:99","nodeType":"FunctionDefinition","overrides":{"id":26851,"nodeType":"OverrideSpecifier","overrides":[],"src":"10189:8:99"},"parameters":{"id":26850,"nodeType":"ParameterList","parameters":[],"src":"10172:2:99"},"returnParameters":{"id":26854,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26853,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26858,"src":"10207:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26852,"name":"address","nodeType":"ElementaryTypeName","src":"10207:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10206:9:99"},"scope":27108,"src":"10139:111:99","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":26892,"nodeType":"Block","src":"10529:288:99","statements":[{"assignments":[26867],"declarations":[{"constant":false,"id":26867,"mutability":"mutable","name":"principalSupply","nameLocation":"10543:15:99","nodeType":"VariableDeclaration","scope":26892,"src":"10535:23:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26866,"name":"uint256","nodeType":"ElementaryTypeName","src":"10535:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26871,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":26868,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"10561:5:99","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_StableDebtToken_$27108_$","typeString":"type(contract super StableDebtToken)"}},"id":26869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":28005,"src":"10561:17:99","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":26870,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10561:19:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10535:45:99"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26872,"name":"principalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26867,"src":"10591:15:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":26873,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10610:1:99","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10591:20:99","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26878,"nodeType":"IfStatement","src":"10587:49:99","trueBody":{"id":26877,"nodeType":"Block","src":"10613:23:99","statements":[{"expression":{"hexValue":"30","id":26875,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10628:1:99","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":26865,"id":26876,"nodeType":"Return","src":"10621:8:99"}]}},{"assignments":[26880],"declarations":[{"constant":false,"id":26880,"mutability":"mutable","name":"cumulatedInterest","nameLocation":"10650:17:99","nodeType":"VariableDeclaration","scope":26892,"src":"10642:25:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26879,"name":"uint256","nodeType":"ElementaryTypeName","src":"10642:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26886,"initialValue":{"arguments":[{"id":26883,"name":"avgRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26861,"src":"10715:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26884,"name":"_totalSupplyTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26085,"src":"10730:21:99","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint40","typeString":"uint40"}],"expression":{"id":26881,"name":"MathUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21098,"src":"10670:9:99","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MathUtils_$21098_$","typeString":"type(library MathUtils)"}},"id":26882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"calculateCompoundedInterest","nodeType":"MemberAccess","referencedDeclaration":21097,"src":"10670:37:99","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint40_$returns$_t_uint256_$","typeString":"function (uint256,uint40) view returns (uint256)"}},"id":26885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10670:87:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10642:115:99"},{"expression":{"arguments":[{"id":26889,"name":"cumulatedInterest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26880,"src":"10794:17:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":26887,"name":"principalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26867,"src":"10771:15:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"10771:22:99","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":26890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10771:41:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":26865,"id":26891,"nodeType":"Return","src":"10764:48:99"}]},"documentation":{"id":26859,"nodeType":"StructuredDocumentation","src":"10254:197:99","text":" @notice Calculates the total supply\n @param avgRate The average rate at which the total supply increases\n @return The debt balance of the user since the last burn/mint action"},"id":26893,"implemented":true,"kind":"function","modifiers":[],"name":"_calcTotalSupply","nameLocation":"10463:16:99","nodeType":"FunctionDefinition","parameters":{"id":26862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26861,"mutability":"mutable","name":"avgRate","nameLocation":"10488:7:99","nodeType":"VariableDeclaration","scope":26893,"src":"10480:15:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26860,"name":"uint256","nodeType":"ElementaryTypeName","src":"10480:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10479:17:99"},"returnParameters":{"id":26865,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26864,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26893,"src":"10520:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26863,"name":"uint256","nodeType":"ElementaryTypeName","src":"10520:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10519:9:99"},"scope":27108,"src":"10454:363:99","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":26944,"nodeType":"Block","src":"11132:326:99","statements":[{"assignments":[26904],"declarations":[{"constant":false,"id":26904,"mutability":"mutable","name":"castAmount","nameLocation":"11146:10:99","nodeType":"VariableDeclaration","scope":26944,"src":"11138:18:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":26903,"name":"uint128","nodeType":"ElementaryTypeName","src":"11138:7:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":26908,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":26905,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26898,"src":"11159:6:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"11159:16:99","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":26907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11159:18:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"11138:39:99"},{"assignments":[26910],"declarations":[{"constant":false,"id":26910,"mutability":"mutable","name":"oldAccountBalance","nameLocation":"11191:17:99","nodeType":"VariableDeclaration","scope":26944,"src":"11183:25:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":26909,"name":"uint128","nodeType":"ElementaryTypeName","src":"11183:7:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":26915,"initialValue":{"expression":{"baseExpression":{"id":26911,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"11211:10:99","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":26913,"indexExpression":{"id":26912,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26896,"src":"11222:7:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11211:19:99","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":26914,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":27898,"src":"11211:27:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"11183:55:99"},{"expression":{"id":26923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":26916,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"11244:10:99","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":26918,"indexExpression":{"id":26917,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26896,"src":"11255:7:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11244:19:99","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":26919,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":27898,"src":"11244:27:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":26922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26920,"name":"oldAccountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26910,"src":"11274:17:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":26921,"name":"castAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26904,"src":"11294:10:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"11274:30:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"11244:60:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":26924,"nodeType":"ExpressionStatement","src":"11244:60:99"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":26933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":26927,"name":"_incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27923,"src":"11323:21:99","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}],"id":26926,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11315:7:99","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":26925,"name":"address","nodeType":"ElementaryTypeName","src":"11315:7:99","typeDescriptions":{}}},"id":26928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11315:30:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":26931,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11357:1:99","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":26930,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11349:7:99","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":26929,"name":"address","nodeType":"ElementaryTypeName","src":"11349:7:99","typeDescriptions":{}}},"id":26932,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11349:10:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11315:44:99","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26943,"nodeType":"IfStatement","src":"11311:143:99","trueBody":{"id":26942,"nodeType":"Block","src":"11361:93:99","statements":[{"expression":{"arguments":[{"id":26937,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26896,"src":"11404:7:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26938,"name":"oldTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26900,"src":"11413:14:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26939,"name":"oldAccountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26910,"src":"11429:17:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":26934,"name":"_incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27923,"src":"11369:21:99","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"id":26936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"handleAction","nodeType":"MemberAccess","referencedDeclaration":3874,"src":"11369:34:99","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256) external"}},"id":26940,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11369:78:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26941,"nodeType":"ExpressionStatement","src":"11369:78:99"}]}}]},"documentation":{"id":26894,"nodeType":"StructuredDocumentation","src":"10821:227:99","text":" @notice Mints stable debt tokens to a user\n @param account The account receiving the debt tokens\n @param amount The amount being minted\n @param oldTotalSupply The total supply before the minting event"},"id":26945,"implemented":true,"kind":"function","modifiers":[],"name":"_mint","nameLocation":"11060:5:99","nodeType":"FunctionDefinition","parameters":{"id":26901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26896,"mutability":"mutable","name":"account","nameLocation":"11074:7:99","nodeType":"VariableDeclaration","scope":26945,"src":"11066:15:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26895,"name":"address","nodeType":"ElementaryTypeName","src":"11066:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26898,"mutability":"mutable","name":"amount","nameLocation":"11091:6:99","nodeType":"VariableDeclaration","scope":26945,"src":"11083:14:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26897,"name":"uint256","nodeType":"ElementaryTypeName","src":"11083:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26900,"mutability":"mutable","name":"oldTotalSupply","nameLocation":"11107:14:99","nodeType":"VariableDeclaration","scope":26945,"src":"11099:22:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26899,"name":"uint256","nodeType":"ElementaryTypeName","src":"11099:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11065:57:99"},"returnParameters":{"id":26902,"nodeType":"ParameterList","parameters":[],"src":"11132:0:99"},"scope":27108,"src":"11051:407:99","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":26996,"nodeType":"Block","src":"11768:326:99","statements":[{"assignments":[26956],"declarations":[{"constant":false,"id":26956,"mutability":"mutable","name":"castAmount","nameLocation":"11782:10:99","nodeType":"VariableDeclaration","scope":26996,"src":"11774:18:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":26955,"name":"uint128","nodeType":"ElementaryTypeName","src":"11774:7:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":26960,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":26957,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26950,"src":"11795:6:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"11795:16:99","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":26959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11795:18:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"11774:39:99"},{"assignments":[26962],"declarations":[{"constant":false,"id":26962,"mutability":"mutable","name":"oldAccountBalance","nameLocation":"11827:17:99","nodeType":"VariableDeclaration","scope":26996,"src":"11819:25:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":26961,"name":"uint128","nodeType":"ElementaryTypeName","src":"11819:7:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":26967,"initialValue":{"expression":{"baseExpression":{"id":26963,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"11847:10:99","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":26965,"indexExpression":{"id":26964,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26948,"src":"11858:7:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11847:19:99","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":26966,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":27898,"src":"11847:27:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"11819:55:99"},{"expression":{"id":26975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":26968,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"11880:10:99","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":26970,"indexExpression":{"id":26969,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26948,"src":"11891:7:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11880:19:99","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":26971,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":27898,"src":"11880:27:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":26974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26972,"name":"oldAccountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26962,"src":"11910:17:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":26973,"name":"castAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26956,"src":"11930:10:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"11910:30:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"11880:60:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":26976,"nodeType":"ExpressionStatement","src":"11880:60:99"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":26985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":26979,"name":"_incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27923,"src":"11959:21:99","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}],"id":26978,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11951:7:99","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":26977,"name":"address","nodeType":"ElementaryTypeName","src":"11951:7:99","typeDescriptions":{}}},"id":26980,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11951:30:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":26983,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11993:1:99","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":26982,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11985:7:99","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":26981,"name":"address","nodeType":"ElementaryTypeName","src":"11985:7:99","typeDescriptions":{}}},"id":26984,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11985:10:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11951:44:99","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26995,"nodeType":"IfStatement","src":"11947:143:99","trueBody":{"id":26994,"nodeType":"Block","src":"11997:93:99","statements":[{"expression":{"arguments":[{"id":26989,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26948,"src":"12040:7:99","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26990,"name":"oldTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26952,"src":"12049:14:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26991,"name":"oldAccountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26962,"src":"12065:17:99","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":26986,"name":"_incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27923,"src":"12005:21:99","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"id":26988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"handleAction","nodeType":"MemberAccess","referencedDeclaration":3874,"src":"12005:34:99","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256) external"}},"id":26992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12005:78:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26993,"nodeType":"ExpressionStatement","src":"12005:78:99"}]}}]},"documentation":{"id":26946,"nodeType":"StructuredDocumentation","src":"11462:222:99","text":" @notice Burns stable debt tokens of a user\n @param account The user getting his debt burned\n @param amount The amount being burned\n @param oldTotalSupply The total supply before the burning event"},"id":26997,"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"11696:5:99","nodeType":"FunctionDefinition","parameters":{"id":26953,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26948,"mutability":"mutable","name":"account","nameLocation":"11710:7:99","nodeType":"VariableDeclaration","scope":26997,"src":"11702:15:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26947,"name":"address","nodeType":"ElementaryTypeName","src":"11702:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26950,"mutability":"mutable","name":"amount","nameLocation":"11727:6:99","nodeType":"VariableDeclaration","scope":26997,"src":"11719:14:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26949,"name":"uint256","nodeType":"ElementaryTypeName","src":"11719:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26952,"mutability":"mutable","name":"oldTotalSupply","nameLocation":"11743:14:99","nodeType":"VariableDeclaration","scope":26997,"src":"11735:22:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26951,"name":"uint256","nodeType":"ElementaryTypeName","src":"11735:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11701:57:99"},"returnParameters":{"id":26954,"nodeType":"ParameterList","parameters":[],"src":"11768:0:99"},"scope":27108,"src":"11687:407:99","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[27821],"body":{"id":27007,"nodeType":"Block","src":"12199:24:99","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":27004,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27975,"src":"12212:4:99","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view returns (string memory)"}},"id":27005,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12212:6:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":27003,"id":27006,"nodeType":"Return","src":"12205:13:99"}]},"documentation":{"id":26998,"nodeType":"StructuredDocumentation","src":"12098:26:99","text":"@inheritdoc EIP712Base"},"id":27008,"implemented":true,"kind":"function","modifiers":[],"name":"_EIP712BaseId","nameLocation":"12136:13:99","nodeType":"FunctionDefinition","overrides":{"id":27000,"nodeType":"OverrideSpecifier","overrides":[],"src":"12166:8:99"},"parameters":{"id":26999,"nodeType":"ParameterList","parameters":[],"src":"12149:2:99"},"returnParameters":{"id":27003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27002,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27008,"src":"12184:13:99","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":27001,"name":"string","nodeType":"ElementaryTypeName","src":"12184:6:99","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"12183:15:99"},"scope":27108,"src":"12127:96:99","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[28071],"body":{"id":27024,"nodeType":"Block","src":"12454:49:99","statements":[{"expression":{"arguments":[{"expression":{"id":27020,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"12467:6:99","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":27021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPERATION_NOT_SUPPORTED","nodeType":"MemberAccess","referencedDeclaration":12608,"src":"12467:30:99","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27019,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"12460:6:99","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":27022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12460:38:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27023,"nodeType":"ExpressionStatement","src":"12460:38:99"}]},"documentation":{"id":27009,"nodeType":"StructuredDocumentation","src":"12227:147:99","text":" @dev Being non transferrable, the debt token does not implement any of the\n standard ERC20 functions for transfer and allowance."},"functionSelector":"a9059cbb","id":27025,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"12386:8:99","nodeType":"FunctionDefinition","overrides":{"id":27015,"nodeType":"OverrideSpecifier","overrides":[],"src":"12430:8:99"},"parameters":{"id":27014,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27011,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27025,"src":"12395:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27010,"name":"address","nodeType":"ElementaryTypeName","src":"12395:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27013,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27025,"src":"12404:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27012,"name":"uint256","nodeType":"ElementaryTypeName","src":"12404:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12394:18:99"},"returnParameters":{"id":27018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27017,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27025,"src":"12448:4:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27016,"name":"bool","nodeType":"ElementaryTypeName","src":"12448:4:99","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12447:6:99"},"scope":27108,"src":"12377:126:99","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[28089],"body":{"id":27040,"nodeType":"Block","src":"12593:49:99","statements":[{"expression":{"arguments":[{"expression":{"id":27036,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"12606:6:99","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":27037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPERATION_NOT_SUPPORTED","nodeType":"MemberAccess","referencedDeclaration":12608,"src":"12606:30:99","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27035,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"12599:6:99","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":27038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12599:38:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27039,"nodeType":"ExpressionStatement","src":"12599:38:99"}]},"functionSelector":"dd62ed3e","id":27041,"implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"12516:9:99","nodeType":"FunctionDefinition","overrides":{"id":27031,"nodeType":"OverrideSpecifier","overrides":[],"src":"12566:8:99"},"parameters":{"id":27030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27027,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27041,"src":"12526:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27026,"name":"address","nodeType":"ElementaryTypeName","src":"12526:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27029,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27041,"src":"12535:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27028,"name":"address","nodeType":"ElementaryTypeName","src":"12535:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12525:18:99"},"returnParameters":{"id":27034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27033,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27041,"src":"12584:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27032,"name":"uint256","nodeType":"ElementaryTypeName","src":"12584:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12583:9:99"},"scope":27108,"src":"12507:135:99","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[28110],"body":{"id":27056,"nodeType":"Block","src":"12722:49:99","statements":[{"expression":{"arguments":[{"expression":{"id":27052,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"12735:6:99","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":27053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPERATION_NOT_SUPPORTED","nodeType":"MemberAccess","referencedDeclaration":12608,"src":"12735:30:99","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27051,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"12728:6:99","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":27054,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12728:38:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27055,"nodeType":"ExpressionStatement","src":"12728:38:99"}]},"functionSelector":"095ea7b3","id":27057,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"12655:7:99","nodeType":"FunctionDefinition","overrides":{"id":27047,"nodeType":"OverrideSpecifier","overrides":[],"src":"12698:8:99"},"parameters":{"id":27046,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27043,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27057,"src":"12663:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27042,"name":"address","nodeType":"ElementaryTypeName","src":"12663:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27045,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27057,"src":"12672:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27044,"name":"uint256","nodeType":"ElementaryTypeName","src":"12672:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12662:18:99"},"returnParameters":{"id":27050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27049,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27057,"src":"12716:4:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27048,"name":"bool","nodeType":"ElementaryTypeName","src":"12716:4:99","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12715:6:99"},"scope":27108,"src":"12646:125:99","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[28152],"body":{"id":27074,"nodeType":"Block","src":"12865:49:99","statements":[{"expression":{"arguments":[{"expression":{"id":27070,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"12878:6:99","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":27071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPERATION_NOT_SUPPORTED","nodeType":"MemberAccess","referencedDeclaration":12608,"src":"12878:30:99","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27069,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"12871:6:99","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":27072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12871:38:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27073,"nodeType":"ExpressionStatement","src":"12871:38:99"}]},"functionSelector":"23b872dd","id":27075,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"12784:12:99","nodeType":"FunctionDefinition","overrides":{"id":27065,"nodeType":"OverrideSpecifier","overrides":[],"src":"12841:8:99"},"parameters":{"id":27064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27059,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27075,"src":"12797:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27058,"name":"address","nodeType":"ElementaryTypeName","src":"12797:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27061,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27075,"src":"12806:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27060,"name":"address","nodeType":"ElementaryTypeName","src":"12806:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27063,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27075,"src":"12815:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27062,"name":"uint256","nodeType":"ElementaryTypeName","src":"12815:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12796:27:99"},"returnParameters":{"id":27068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27067,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27075,"src":"12859:4:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27066,"name":"bool","nodeType":"ElementaryTypeName","src":"12859:4:99","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12858:6:99"},"scope":27108,"src":"12775:139:99","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[28179],"body":{"id":27090,"nodeType":"Block","src":"13004:49:99","statements":[{"expression":{"arguments":[{"expression":{"id":27086,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"13017:6:99","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":27087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPERATION_NOT_SUPPORTED","nodeType":"MemberAccess","referencedDeclaration":12608,"src":"13017:30:99","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27085,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"13010:6:99","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":27088,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13010:38:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27089,"nodeType":"ExpressionStatement","src":"13010:38:99"}]},"functionSelector":"39509351","id":27091,"implemented":true,"kind":"function","modifiers":[],"name":"increaseAllowance","nameLocation":"12927:17:99","nodeType":"FunctionDefinition","overrides":{"id":27081,"nodeType":"OverrideSpecifier","overrides":[],"src":"12980:8:99"},"parameters":{"id":27080,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27077,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27091,"src":"12945:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27076,"name":"address","nodeType":"ElementaryTypeName","src":"12945:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27079,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27091,"src":"12954:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27078,"name":"uint256","nodeType":"ElementaryTypeName","src":"12954:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12944:18:99"},"returnParameters":{"id":27084,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27083,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27091,"src":"12998:4:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27082,"name":"bool","nodeType":"ElementaryTypeName","src":"12998:4:99","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12997:6:99"},"scope":27108,"src":"12918:135:99","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[28206],"body":{"id":27106,"nodeType":"Block","src":"13143:49:99","statements":[{"expression":{"arguments":[{"expression":{"id":27102,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"13156:6:99","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":27103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPERATION_NOT_SUPPORTED","nodeType":"MemberAccess","referencedDeclaration":12608,"src":"13156:30:99","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27101,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"13149:6:99","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":27104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13149:38:99","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27105,"nodeType":"ExpressionStatement","src":"13149:38:99"}]},"functionSelector":"a457c2d7","id":27107,"implemented":true,"kind":"function","modifiers":[],"name":"decreaseAllowance","nameLocation":"13066:17:99","nodeType":"FunctionDefinition","overrides":{"id":27097,"nodeType":"OverrideSpecifier","overrides":[],"src":"13119:8:99"},"parameters":{"id":27096,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27093,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27107,"src":"13084:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27092,"name":"address","nodeType":"ElementaryTypeName","src":"13084:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27095,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27107,"src":"13093:7:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27094,"name":"uint256","nodeType":"ElementaryTypeName","src":"13093:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13083:18:99"},"returnParameters":{"id":27100,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27099,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27107,"src":"13137:4:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27098,"name":"bool","nodeType":"ElementaryTypeName","src":"13137:4:99","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13136:6:99"},"scope":27108,"src":"13057:135:99","stateMutability":"nonpayable","virtual":true,"visibility":"external"}],"scope":27109,"src":"1216:11978:99","usedErrors":[]}],"src":"37:13158:99"},"id":99},"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol","exportedSymbols":{"DebtTokenBase":[27722],"EIP712Base":[27822],"Errors":[12642],"IAaveIncentivesController":[3875],"IERC20":[1442],"IInitializableDebtToken":[4221],"IPool":[4860],"IVariableDebtToken":[6155],"SafeCast":[1966],"ScaledBalanceTokenBase":[28966],"VariableDebtToken":[27490],"VersionedInitializable":[10573],"WadRayMath":[21219]},"id":27491,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":27110,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:100"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../dependencies/openzeppelin/contracts/IERC20.sol","id":27112,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27491,"sourceUnit":1443,"src":"63:76:100","symbolAliases":[{"foreign":{"id":27111,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:6:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"../../dependencies/openzeppelin/contracts/SafeCast.sol","id":27114,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27491,"sourceUnit":1967,"src":"140:80:100","symbolAliases":[{"foreign":{"id":27113,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"148:8:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol","file":"../libraries/aave-upgradeability/VersionedInitializable.sol","id":27116,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27491,"sourceUnit":10574,"src":"221:99:100","symbolAliases":[{"foreign":{"id":27115,"name":"VersionedInitializable","nodeType":"Identifier","overloadedDeclarations":[],"src":"229:22:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol","file":"../libraries/math/WadRayMath.sol","id":27118,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27491,"sourceUnit":21220,"src":"321:60:100","symbolAliases":[{"foreign":{"id":27117,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"329:10:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol","file":"../libraries/helpers/Errors.sol","id":27120,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27491,"sourceUnit":12643,"src":"382:55:100","symbolAliases":[{"foreign":{"id":27119,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"390:6:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","file":"../../interfaces/IPool.sol","id":27122,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27491,"sourceUnit":4861,"src":"438:49:100","symbolAliases":[{"foreign":{"id":27121,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"446:5:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol","file":"../../interfaces/IAaveIncentivesController.sol","id":27124,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27491,"sourceUnit":3876,"src":"488:89:100","symbolAliases":[{"foreign":{"id":27123,"name":"IAaveIncentivesController","nodeType":"Identifier","overloadedDeclarations":[],"src":"496:25:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol","file":"../../interfaces/IInitializableDebtToken.sol","id":27126,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27491,"sourceUnit":4222,"src":"578:85:100","symbolAliases":[{"foreign":{"id":27125,"name":"IInitializableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"586:23:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol","file":"../../interfaces/IVariableDebtToken.sol","id":27128,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27491,"sourceUnit":6156,"src":"664:75:100","symbolAliases":[{"foreign":{"id":27127,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"672:18:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/base/EIP712Base.sol","file":"./base/EIP712Base.sol","id":27130,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27491,"sourceUnit":27823,"src":"740:49:100","symbolAliases":[{"foreign":{"id":27129,"name":"EIP712Base","nodeType":"Identifier","overloadedDeclarations":[],"src":"748:10:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/base/DebtTokenBase.sol","file":"./base/DebtTokenBase.sol","id":27132,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27491,"sourceUnit":27723,"src":"790:55:100","symbolAliases":[{"foreign":{"id":27131,"name":"DebtTokenBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"798:13:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol","file":"./base/ScaledBalanceTokenBase.sol","id":27134,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27491,"sourceUnit":28967,"src":"846:73:100","symbolAliases":[{"foreign":{"id":27133,"name":"ScaledBalanceTokenBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"854:22:100","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":27136,"name":"DebtTokenBase","nodeType":"IdentifierPath","referencedDeclaration":27722,"src":"1207:13:100"},"id":27137,"nodeType":"InheritanceSpecifier","src":"1207:13:100"},{"baseName":{"id":27138,"name":"ScaledBalanceTokenBase","nodeType":"IdentifierPath","referencedDeclaration":28966,"src":"1222:22:100"},"id":27139,"nodeType":"InheritanceSpecifier","src":"1222:22:100"},{"baseName":{"id":27140,"name":"IVariableDebtToken","nodeType":"IdentifierPath","referencedDeclaration":6155,"src":"1246:18:100"},"id":27141,"nodeType":"InheritanceSpecifier","src":"1246:18:100"}],"canonicalName":"VariableDebtToken","contractDependencies":[],"contractKind":"contract","documentation":{"id":27135,"nodeType":"StructuredDocumentation","src":"921:255:100","text":" @title VariableDebtToken\n @author Aave\n @notice Implements a variable debt token to track the borrowing positions of users\n at variable rate mode\n @dev Transfer and approve functionalities are disabled since its a non-transferable token"},"fullyImplemented":true,"id":27490,"linearizedBaseContracts":[27490,6155,4221,28966,5975,28499,28349,1464,1442,27722,4002,748,27822,10573],"name":"VariableDebtToken","nameLocation":"1186:17:100","nodeType":"ContractDefinition","nodes":[{"id":27144,"libraryName":{"id":27142,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":21219,"src":"1275:10:100"},"nodeType":"UsingForDirective","src":"1269:29:100","typeName":{"id":27143,"name":"uint256","nodeType":"ElementaryTypeName","src":"1290:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":27147,"libraryName":{"id":27145,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"1307:8:100"},"nodeType":"UsingForDirective","src":"1301:27:100","typeName":{"id":27146,"name":"uint256","nodeType":"ElementaryTypeName","src":"1320:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"constant":true,"functionSelector":"b9a7b622","id":27150,"mutability":"constant","name":"DEBT_TOKEN_REVISION","nameLocation":"1356:19:100","nodeType":"VariableDeclaration","scope":27490,"src":"1332:49:100","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27148,"name":"uint256","nodeType":"ElementaryTypeName","src":"1332:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"307831","id":27149,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1378:3:100","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x1"},"visibility":"public"},{"body":{"id":27165,"nodeType":"Block","src":"1617:37:100","statements":[]},"documentation":{"id":27151,"nodeType":"StructuredDocumentation","src":"1386:82:100","text":" @dev Constructor.\n @param pool The address of the Pool contract"},"id":27166,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":27157,"kind":"baseConstructorSpecifier","modifierName":{"id":27156,"name":"DebtTokenBase","nodeType":"IdentifierPath","referencedDeclaration":27722,"src":"1507:13:100"},"nodeType":"ModifierInvocation","src":"1507:15:100"},{"arguments":[{"id":27159,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27154,"src":"1550:4:100","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},{"hexValue":"5641524941424c455f444542545f544f4b454e5f494d504c","id":27160,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1556:26:100","typeDescriptions":{"typeIdentifier":"t_stringliteral_c0c183cc6be07edf097403ebce0bd9f1c8e459ad1322c258230ef0d121344336","typeString":"literal_string \"VARIABLE_DEBT_TOKEN_IMPL\""},"value":"VARIABLE_DEBT_TOKEN_IMPL"},{"hexValue":"5641524941424c455f444542545f544f4b454e5f494d504c","id":27161,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1584:26:100","typeDescriptions":{"typeIdentifier":"t_stringliteral_c0c183cc6be07edf097403ebce0bd9f1c8e459ad1322c258230ef0d121344336","typeString":"literal_string \"VARIABLE_DEBT_TOKEN_IMPL\""},"value":"VARIABLE_DEBT_TOKEN_IMPL"},{"hexValue":"30","id":27162,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1612:1:100","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":27163,"kind":"baseConstructorSpecifier","modifierName":{"id":27158,"name":"ScaledBalanceTokenBase","nodeType":"IdentifierPath","referencedDeclaration":28966,"src":"1527:22:100"},"nodeType":"ModifierInvocation","src":"1527:87:100"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":27155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27154,"mutability":"mutable","name":"pool","nameLocation":"1494:4:100","nodeType":"VariableDeclaration","scope":27166,"src":"1488:10:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":27153,"nodeType":"UserDefinedTypeName","pathNode":{"id":27152,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"1488:5:100"},"referencedDeclaration":4860,"src":"1488:5:100","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"}],"src":"1482:20:100"},"returnParameters":{"id":27164,"nodeType":"ParameterList","parameters":[],"src":"1617:0:100"},"scope":27490,"src":"1471:183:100","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[4220],"body":{"id":27238,"nodeType":"Block","src":"1987:516:100","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"id":27192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27190,"name":"initializingPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27170,"src":"2001:16:100","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":27191,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27929,"src":"2021:4:100","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"src":"2001:24:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":27193,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"2027:6:100","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":27194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"POOL_ADDRESSES_DO_NOT_MATCH","nodeType":"MemberAccess","referencedDeclaration":12629,"src":"2027:34:100","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27189,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1993:7:100","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1993:69:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27196,"nodeType":"ExpressionStatement","src":"1993:69:100"},{"expression":{"arguments":[{"id":27198,"name":"debtTokenName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27179,"src":"2077:13:100","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27197,"name":"_setName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28326,"src":"2068:8:100","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":27199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2068:23:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27200,"nodeType":"ExpressionStatement","src":"2068:23:100"},{"expression":{"arguments":[{"id":27202,"name":"debtTokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27181,"src":"2108:15:100","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27201,"name":"_setSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28337,"src":"2097:10:100","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":27203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2097:27:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27204,"nodeType":"ExpressionStatement","src":"2097:27:100"},{"expression":{"arguments":[{"id":27206,"name":"debtTokenDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27177,"src":"2143:17:100","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":27205,"name":"_setDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28348,"src":"2130:12:100","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint8_$returns$__$","typeString":"function (uint8)"}},"id":27207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2130:31:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27208,"nodeType":"ExpressionStatement","src":"2130:31:100"},{"expression":{"id":27211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":27209,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27524,"src":"2168:16:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":27210,"name":"underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27172,"src":"2187:15:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2168:34:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":27212,"nodeType":"ExpressionStatement","src":"2168:34:100"},{"expression":{"id":27215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":27213,"name":"_incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27923,"src":"2208:21:100","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":27214,"name":"incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27175,"src":"2232:20:100","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"src":"2208:44:100","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"id":27216,"nodeType":"ExpressionStatement","src":"2208:44:100"},{"expression":{"id":27220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":27217,"name":"_domainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27742,"src":"2259:16:100","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":27218,"name":"_calculateDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27815,"src":"2278:25:100","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":27219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2278:27:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2259:46:100","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":27221,"nodeType":"ExpressionStatement","src":"2259:46:100"},{"eventCall":{"arguments":[{"id":27223,"name":"underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27172,"src":"2336:15:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":27226,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27929,"src":"2367:4:100","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}],"id":27225,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2359:7:100","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":27224,"name":"address","nodeType":"ElementaryTypeName","src":"2359:7:100","typeDescriptions":{}}},"id":27227,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2359:13:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":27230,"name":"incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27175,"src":"2388:20:100","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}],"id":27229,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2380:7:100","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":27228,"name":"address","nodeType":"ElementaryTypeName","src":"2380:7:100","typeDescriptions":{}}},"id":27231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2380:29:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27232,"name":"debtTokenDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27177,"src":"2417:17:100","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":27233,"name":"debtTokenName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27179,"src":"2442:13:100","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":27234,"name":"debtTokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27181,"src":"2463:15:100","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":27235,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27183,"src":"2486:6:100","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":27222,"name":"Initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4200,"src":"2317:11:100","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint8_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,address,address,uint8,string memory,string memory,bytes memory)"}},"id":27236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2317:181:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27237,"nodeType":"EmitStatement","src":"2312:186:100"}]},"documentation":{"id":27167,"nodeType":"StructuredDocumentation","src":"1658:39:100","text":"@inheritdoc IInitializableDebtToken"},"functionSelector":"c222ec8a","id":27239,"implemented":true,"kind":"function","modifiers":[{"id":27187,"kind":"modifierInvocation","modifierName":{"id":27186,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":10547,"src":"1975:11:100"},"nodeType":"ModifierInvocation","src":"1975:11:100"}],"name":"initialize","nameLocation":"1709:10:100","nodeType":"FunctionDefinition","overrides":{"id":27185,"nodeType":"OverrideSpecifier","overrides":[],"src":"1966:8:100"},"parameters":{"id":27184,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27170,"mutability":"mutable","name":"initializingPool","nameLocation":"1731:16:100","nodeType":"VariableDeclaration","scope":27239,"src":"1725:22:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":27169,"nodeType":"UserDefinedTypeName","pathNode":{"id":27168,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"1725:5:100"},"referencedDeclaration":4860,"src":"1725:5:100","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"},{"constant":false,"id":27172,"mutability":"mutable","name":"underlyingAsset","nameLocation":"1761:15:100","nodeType":"VariableDeclaration","scope":27239,"src":"1753:23:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27171,"name":"address","nodeType":"ElementaryTypeName","src":"1753:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27175,"mutability":"mutable","name":"incentivesController","nameLocation":"1808:20:100","nodeType":"VariableDeclaration","scope":27239,"src":"1782:46:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"},"typeName":{"id":27174,"nodeType":"UserDefinedTypeName","pathNode":{"id":27173,"name":"IAaveIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":3875,"src":"1782:25:100"},"referencedDeclaration":3875,"src":"1782:25:100","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"visibility":"internal"},{"constant":false,"id":27177,"mutability":"mutable","name":"debtTokenDecimals","nameLocation":"1840:17:100","nodeType":"VariableDeclaration","scope":27239,"src":"1834:23:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":27176,"name":"uint8","nodeType":"ElementaryTypeName","src":"1834:5:100","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":27179,"mutability":"mutable","name":"debtTokenName","nameLocation":"1877:13:100","nodeType":"VariableDeclaration","scope":27239,"src":"1863:27:100","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":27178,"name":"string","nodeType":"ElementaryTypeName","src":"1863:6:100","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":27181,"mutability":"mutable","name":"debtTokenSymbol","nameLocation":"1910:15:100","nodeType":"VariableDeclaration","scope":27239,"src":"1896:29:100","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":27180,"name":"string","nodeType":"ElementaryTypeName","src":"1896:6:100","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":27183,"mutability":"mutable","name":"params","nameLocation":"1946:6:100","nodeType":"VariableDeclaration","scope":27239,"src":"1931:21:100","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":27182,"name":"bytes","nodeType":"ElementaryTypeName","src":"1931:5:100","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1719:237:100"},"returnParameters":{"id":27188,"nodeType":"ParameterList","parameters":[],"src":"1987:0:100"},"scope":27490,"src":"1700:803:100","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[10553],"body":{"id":27248,"nodeType":"Block","src":"2620:37:100","statements":[{"expression":{"id":27246,"name":"DEBT_TOKEN_REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27150,"src":"2633:19:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":27245,"id":27247,"nodeType":"Return","src":"2626:26:100"}]},"documentation":{"id":27240,"nodeType":"StructuredDocumentation","src":"2507:38:100","text":"@inheritdoc VersionedInitializable"},"id":27249,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"2557:11:100","nodeType":"FunctionDefinition","overrides":{"id":27242,"nodeType":"OverrideSpecifier","overrides":[],"src":"2593:8:100"},"parameters":{"id":27241,"nodeType":"ParameterList","parameters":[],"src":"2568:2:100"},"returnParameters":{"id":27245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27244,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27249,"src":"2611:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27243,"name":"uint256","nodeType":"ElementaryTypeName","src":"2611:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2610:9:100"},"scope":27490,"src":"2548:109:100","stateMutability":"pure","virtual":true,"visibility":"internal"},{"baseFunctions":[28020],"body":{"id":27280,"nodeType":"Block","src":"2766:200:100","statements":[{"assignments":[27259],"declarations":[{"constant":false,"id":27259,"mutability":"mutable","name":"scaledBalance","nameLocation":"2780:13:100","nodeType":"VariableDeclaration","scope":27280,"src":"2772:21:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27258,"name":"uint256","nodeType":"ElementaryTypeName","src":"2772:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27264,"initialValue":{"arguments":[{"id":27262,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27252,"src":"2812:4:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":27260,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"2796:5:100","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_VariableDebtToken_$27490_$","typeString":"type(contract super VariableDebtToken)"}},"id":27261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":28020,"src":"2796:15:100","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":27263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2796:21:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2772:45:100"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27265,"name":"scaledBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27259,"src":"2828:13:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":27266,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2845:1:100","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2828:18:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27271,"nodeType":"IfStatement","src":"2824:47:100","trueBody":{"id":27270,"nodeType":"Block","src":"2848:23:100","statements":[{"expression":{"hexValue":"30","id":27268,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2863:1:100","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":27257,"id":27269,"nodeType":"Return","src":"2856:8:100"}]}},{"expression":{"arguments":[{"arguments":[{"id":27276,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27524,"src":"2943:16:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":27274,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27929,"src":"2905:4:100","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":27275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveNormalizedVariableDebt","nodeType":"MemberAccess","referencedDeclaration":4701,"src":"2905:37:100","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":27277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2905:55:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":27272,"name":"scaledBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27259,"src":"2884:13:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"2884:20:100","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":27278,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2884:77:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":27257,"id":27279,"nodeType":"Return","src":"2877:84:100"}]},"documentation":{"id":27250,"nodeType":"StructuredDocumentation","src":"2661:22:100","text":"@inheritdoc IERC20"},"functionSelector":"70a08231","id":27281,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"2695:9:100","nodeType":"FunctionDefinition","overrides":{"id":27254,"nodeType":"OverrideSpecifier","overrides":[],"src":"2739:8:100"},"parameters":{"id":27253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27252,"mutability":"mutable","name":"user","nameLocation":"2713:4:100","nodeType":"VariableDeclaration","scope":27281,"src":"2705:12:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27251,"name":"address","nodeType":"ElementaryTypeName","src":"2705:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2704:14:100"},"returnParameters":{"id":27257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27256,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27281,"src":"2757:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27255,"name":"uint256","nodeType":"ElementaryTypeName","src":"2757:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2756:9:100"},"scope":27490,"src":"2686:280:100","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[6136],"body":{"id":27321,"nodeType":"Block","src":"3165:179:100","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":27302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27300,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27284,"src":"3175:4:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":27301,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27286,"src":"3183:10:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3175:18:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27310,"nodeType":"IfStatement","src":"3171:89:100","trueBody":{"id":27309,"nodeType":"Block","src":"3195:65:100","statements":[{"expression":{"arguments":[{"id":27304,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27286,"src":"3228:10:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27305,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27284,"src":"3240:4:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27306,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27288,"src":"3246:6:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27303,"name":"_decreaseBorrowAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27721,"src":"3203:24:100","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":27307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3203:50:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27308,"nodeType":"ExpressionStatement","src":"3203:50:100"}]}},{"expression":{"components":[{"arguments":[{"id":27312,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27284,"src":"3285:4:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27313,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27286,"src":"3291:10:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27314,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27288,"src":"3303:6:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":27315,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27290,"src":"3311:5:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27311,"name":"_mintScaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28703,"src":"3273:11:100","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256,uint256) returns (bool)"}},"id":27316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3273:44:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"id":27317,"name":"scaledTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28592,"src":"3319:17:100","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":27318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3319:19:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":27319,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3272:67:100","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":27299,"id":27320,"nodeType":"Return","src":"3265:74:100"}]},"documentation":{"id":27282,"nodeType":"StructuredDocumentation","src":"2970:34:100","text":"@inheritdoc IVariableDebtToken"},"functionSelector":"b3f1c93d","id":27322,"implemented":true,"kind":"function","modifiers":[{"id":27294,"kind":"modifierInvocation","modifierName":{"id":27293,"name":"onlyPool","nodeType":"IdentifierPath","referencedDeclaration":27896,"src":"3132:8:100"},"nodeType":"ModifierInvocation","src":"3132:8:100"}],"name":"mint","nameLocation":"3016:4:100","nodeType":"FunctionDefinition","overrides":{"id":27292,"nodeType":"OverrideSpecifier","overrides":[],"src":"3123:8:100"},"parameters":{"id":27291,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27284,"mutability":"mutable","name":"user","nameLocation":"3034:4:100","nodeType":"VariableDeclaration","scope":27322,"src":"3026:12:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27283,"name":"address","nodeType":"ElementaryTypeName","src":"3026:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27286,"mutability":"mutable","name":"onBehalfOf","nameLocation":"3052:10:100","nodeType":"VariableDeclaration","scope":27322,"src":"3044:18:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27285,"name":"address","nodeType":"ElementaryTypeName","src":"3044:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27288,"mutability":"mutable","name":"amount","nameLocation":"3076:6:100","nodeType":"VariableDeclaration","scope":27322,"src":"3068:14:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27287,"name":"uint256","nodeType":"ElementaryTypeName","src":"3068:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27290,"mutability":"mutable","name":"index","nameLocation":"3096:5:100","nodeType":"VariableDeclaration","scope":27322,"src":"3088:13:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27289,"name":"uint256","nodeType":"ElementaryTypeName","src":"3088:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3020:85:100"},"returnParameters":{"id":27299,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27296,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27322,"src":"3150:4:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27295,"name":"bool","nodeType":"ElementaryTypeName","src":"3150:4:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":27298,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27322,"src":"3156:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27297,"name":"uint256","nodeType":"ElementaryTypeName","src":"3156:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3149:15:100"},"scope":27490,"src":"3007:337:100","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[6148],"body":{"id":27350,"nodeType":"Block","src":"3513:87:100","statements":[{"expression":{"arguments":[{"id":27338,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27325,"src":"3531:4:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":27341,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3545:1:100","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":27340,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3537:7:100","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":27339,"name":"address","nodeType":"ElementaryTypeName","src":"3537:7:100","typeDescriptions":{}}},"id":27342,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3537:10:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27343,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27327,"src":"3549:6:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":27344,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27329,"src":"3557:5:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27337,"name":"_burnScaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28821,"src":"3519:11:100","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":27345,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3519:44:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27346,"nodeType":"ExpressionStatement","src":"3519:44:100"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":27347,"name":"scaledTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28592,"src":"3576:17:100","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":27348,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3576:19:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":27336,"id":27349,"nodeType":"Return","src":"3569:26:100"}]},"documentation":{"id":27323,"nodeType":"StructuredDocumentation","src":"3348:34:100","text":"@inheritdoc IVariableDebtToken"},"functionSelector":"f5298aca","id":27351,"implemented":true,"kind":"function","modifiers":[{"id":27333,"kind":"modifierInvocation","modifierName":{"id":27332,"name":"onlyPool","nodeType":"IdentifierPath","referencedDeclaration":27896,"src":"3486:8:100"},"nodeType":"ModifierInvocation","src":"3486:8:100"}],"name":"burn","nameLocation":"3394:4:100","nodeType":"FunctionDefinition","overrides":{"id":27331,"nodeType":"OverrideSpecifier","overrides":[],"src":"3477:8:100"},"parameters":{"id":27330,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27325,"mutability":"mutable","name":"from","nameLocation":"3412:4:100","nodeType":"VariableDeclaration","scope":27351,"src":"3404:12:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27324,"name":"address","nodeType":"ElementaryTypeName","src":"3404:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27327,"mutability":"mutable","name":"amount","nameLocation":"3430:6:100","nodeType":"VariableDeclaration","scope":27351,"src":"3422:14:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27326,"name":"uint256","nodeType":"ElementaryTypeName","src":"3422:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27329,"mutability":"mutable","name":"index","nameLocation":"3450:5:100","nodeType":"VariableDeclaration","scope":27351,"src":"3442:13:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27328,"name":"uint256","nodeType":"ElementaryTypeName","src":"3442:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3398:61:100"},"returnParameters":{"id":27336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27335,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27351,"src":"3504:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27334,"name":"uint256","nodeType":"ElementaryTypeName","src":"3504:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3503:9:100"},"scope":27490,"src":"3385:215:100","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[28005],"body":{"id":27368,"nodeType":"Block","src":"3699:101:100","statements":[{"expression":{"arguments":[{"arguments":[{"id":27364,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27524,"src":"3777:16:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":27362,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27929,"src":"3739:4:100","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":27363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveNormalizedVariableDebt","nodeType":"MemberAccess","referencedDeclaration":4701,"src":"3739:37:100","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":27365,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3739:55:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27358,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"3712:5:100","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_VariableDebtToken_$27490_$","typeString":"type(contract super VariableDebtToken)"}},"id":27359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":28005,"src":"3712:17:100","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":27360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3712:19:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"3712:26:100","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":27366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3712:83:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":27357,"id":27367,"nodeType":"Return","src":"3705:90:100"}]},"documentation":{"id":27352,"nodeType":"StructuredDocumentation","src":"3604:22:100","text":"@inheritdoc IERC20"},"functionSelector":"18160ddd","id":27369,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"3638:11:100","nodeType":"FunctionDefinition","overrides":{"id":27354,"nodeType":"OverrideSpecifier","overrides":[],"src":"3672:8:100"},"parameters":{"id":27353,"nodeType":"ParameterList","parameters":[],"src":"3649:2:100"},"returnParameters":{"id":27357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27356,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27369,"src":"3690:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27355,"name":"uint256","nodeType":"ElementaryTypeName","src":"3690:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3689:9:100"},"scope":27490,"src":"3629:171:100","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[27821],"body":{"id":27379,"nodeType":"Block","src":"3905:24:100","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":27376,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27975,"src":"3918:4:100","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view returns (string memory)"}},"id":27377,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3918:6:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":27375,"id":27378,"nodeType":"Return","src":"3911:13:100"}]},"documentation":{"id":27370,"nodeType":"StructuredDocumentation","src":"3804:26:100","text":"@inheritdoc EIP712Base"},"id":27380,"implemented":true,"kind":"function","modifiers":[],"name":"_EIP712BaseId","nameLocation":"3842:13:100","nodeType":"FunctionDefinition","overrides":{"id":27372,"nodeType":"OverrideSpecifier","overrides":[],"src":"3872:8:100"},"parameters":{"id":27371,"nodeType":"ParameterList","parameters":[],"src":"3855:2:100"},"returnParameters":{"id":27375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27374,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27380,"src":"3890:13:100","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":27373,"name":"string","nodeType":"ElementaryTypeName","src":"3890:6:100","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3889:15:100"},"scope":27490,"src":"3833:96:100","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[28071],"body":{"id":27396,"nodeType":"Block","src":"4160:49:100","statements":[{"expression":{"arguments":[{"expression":{"id":27392,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"4173:6:100","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":27393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPERATION_NOT_SUPPORTED","nodeType":"MemberAccess","referencedDeclaration":12608,"src":"4173:30:100","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27391,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"4166:6:100","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":27394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4166:38:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27395,"nodeType":"ExpressionStatement","src":"4166:38:100"}]},"documentation":{"id":27381,"nodeType":"StructuredDocumentation","src":"3933:147:100","text":" @dev Being non transferrable, the debt token does not implement any of the\n standard ERC20 functions for transfer and allowance."},"functionSelector":"a9059cbb","id":27397,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"4092:8:100","nodeType":"FunctionDefinition","overrides":{"id":27387,"nodeType":"OverrideSpecifier","overrides":[],"src":"4136:8:100"},"parameters":{"id":27386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27383,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27397,"src":"4101:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27382,"name":"address","nodeType":"ElementaryTypeName","src":"4101:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27385,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27397,"src":"4110:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27384,"name":"uint256","nodeType":"ElementaryTypeName","src":"4110:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4100:18:100"},"returnParameters":{"id":27390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27389,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27397,"src":"4154:4:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27388,"name":"bool","nodeType":"ElementaryTypeName","src":"4154:4:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4153:6:100"},"scope":27490,"src":"4083:126:100","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[28089],"body":{"id":27412,"nodeType":"Block","src":"4299:49:100","statements":[{"expression":{"arguments":[{"expression":{"id":27408,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"4312:6:100","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":27409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPERATION_NOT_SUPPORTED","nodeType":"MemberAccess","referencedDeclaration":12608,"src":"4312:30:100","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27407,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"4305:6:100","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":27410,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4305:38:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27411,"nodeType":"ExpressionStatement","src":"4305:38:100"}]},"functionSelector":"dd62ed3e","id":27413,"implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"4222:9:100","nodeType":"FunctionDefinition","overrides":{"id":27403,"nodeType":"OverrideSpecifier","overrides":[],"src":"4272:8:100"},"parameters":{"id":27402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27399,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27413,"src":"4232:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27398,"name":"address","nodeType":"ElementaryTypeName","src":"4232:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27401,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27413,"src":"4241:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27400,"name":"address","nodeType":"ElementaryTypeName","src":"4241:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4231:18:100"},"returnParameters":{"id":27406,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27405,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27413,"src":"4290:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27404,"name":"uint256","nodeType":"ElementaryTypeName","src":"4290:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4289:9:100"},"scope":27490,"src":"4213:135:100","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[28110],"body":{"id":27428,"nodeType":"Block","src":"4428:49:100","statements":[{"expression":{"arguments":[{"expression":{"id":27424,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"4441:6:100","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":27425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPERATION_NOT_SUPPORTED","nodeType":"MemberAccess","referencedDeclaration":12608,"src":"4441:30:100","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27423,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"4434:6:100","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":27426,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4434:38:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27427,"nodeType":"ExpressionStatement","src":"4434:38:100"}]},"functionSelector":"095ea7b3","id":27429,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"4361:7:100","nodeType":"FunctionDefinition","overrides":{"id":27419,"nodeType":"OverrideSpecifier","overrides":[],"src":"4404:8:100"},"parameters":{"id":27418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27415,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27429,"src":"4369:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27414,"name":"address","nodeType":"ElementaryTypeName","src":"4369:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27417,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27429,"src":"4378:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27416,"name":"uint256","nodeType":"ElementaryTypeName","src":"4378:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4368:18:100"},"returnParameters":{"id":27422,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27421,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27429,"src":"4422:4:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27420,"name":"bool","nodeType":"ElementaryTypeName","src":"4422:4:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4421:6:100"},"scope":27490,"src":"4352:125:100","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[28152],"body":{"id":27446,"nodeType":"Block","src":"4571:49:100","statements":[{"expression":{"arguments":[{"expression":{"id":27442,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"4584:6:100","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":27443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPERATION_NOT_SUPPORTED","nodeType":"MemberAccess","referencedDeclaration":12608,"src":"4584:30:100","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27441,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"4577:6:100","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":27444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4577:38:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27445,"nodeType":"ExpressionStatement","src":"4577:38:100"}]},"functionSelector":"23b872dd","id":27447,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"4490:12:100","nodeType":"FunctionDefinition","overrides":{"id":27437,"nodeType":"OverrideSpecifier","overrides":[],"src":"4547:8:100"},"parameters":{"id":27436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27431,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27447,"src":"4503:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27430,"name":"address","nodeType":"ElementaryTypeName","src":"4503:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27433,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27447,"src":"4512:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27432,"name":"address","nodeType":"ElementaryTypeName","src":"4512:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27435,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27447,"src":"4521:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27434,"name":"uint256","nodeType":"ElementaryTypeName","src":"4521:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4502:27:100"},"returnParameters":{"id":27440,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27439,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27447,"src":"4565:4:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27438,"name":"bool","nodeType":"ElementaryTypeName","src":"4565:4:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4564:6:100"},"scope":27490,"src":"4481:139:100","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[28179],"body":{"id":27462,"nodeType":"Block","src":"4710:49:100","statements":[{"expression":{"arguments":[{"expression":{"id":27458,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"4723:6:100","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":27459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPERATION_NOT_SUPPORTED","nodeType":"MemberAccess","referencedDeclaration":12608,"src":"4723:30:100","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27457,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"4716:6:100","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":27460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4716:38:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27461,"nodeType":"ExpressionStatement","src":"4716:38:100"}]},"functionSelector":"39509351","id":27463,"implemented":true,"kind":"function","modifiers":[],"name":"increaseAllowance","nameLocation":"4633:17:100","nodeType":"FunctionDefinition","overrides":{"id":27453,"nodeType":"OverrideSpecifier","overrides":[],"src":"4686:8:100"},"parameters":{"id":27452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27449,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27463,"src":"4651:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27448,"name":"address","nodeType":"ElementaryTypeName","src":"4651:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27451,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27463,"src":"4660:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27450,"name":"uint256","nodeType":"ElementaryTypeName","src":"4660:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4650:18:100"},"returnParameters":{"id":27456,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27455,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27463,"src":"4704:4:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27454,"name":"bool","nodeType":"ElementaryTypeName","src":"4704:4:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4703:6:100"},"scope":27490,"src":"4624:135:100","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[28206],"body":{"id":27478,"nodeType":"Block","src":"4849:49:100","statements":[{"expression":{"arguments":[{"expression":{"id":27474,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"4862:6:100","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":27475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPERATION_NOT_SUPPORTED","nodeType":"MemberAccess","referencedDeclaration":12608,"src":"4862:30:100","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27473,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"4855:6:100","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":27476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4855:38:100","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27477,"nodeType":"ExpressionStatement","src":"4855:38:100"}]},"functionSelector":"a457c2d7","id":27479,"implemented":true,"kind":"function","modifiers":[],"name":"decreaseAllowance","nameLocation":"4772:17:100","nodeType":"FunctionDefinition","overrides":{"id":27469,"nodeType":"OverrideSpecifier","overrides":[],"src":"4825:8:100"},"parameters":{"id":27468,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27465,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27479,"src":"4790:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27464,"name":"address","nodeType":"ElementaryTypeName","src":"4790:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27467,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27479,"src":"4799:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27466,"name":"uint256","nodeType":"ElementaryTypeName","src":"4799:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4789:18:100"},"returnParameters":{"id":27472,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27471,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27479,"src":"4843:4:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27470,"name":"bool","nodeType":"ElementaryTypeName","src":"4843:4:100","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4842:6:100"},"scope":27490,"src":"4763:135:100","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[6154],"body":{"id":27488,"nodeType":"Block","src":"5016:34:100","statements":[{"expression":{"id":27486,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27524,"src":"5029:16:100","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":27485,"id":27487,"nodeType":"Return","src":"5022:23:100"}]},"documentation":{"id":27480,"nodeType":"StructuredDocumentation","src":"4902:34:100","text":"@inheritdoc IVariableDebtToken"},"functionSelector":"b16a19de","id":27489,"implemented":true,"kind":"function","modifiers":[],"name":"UNDERLYING_ASSET_ADDRESS","nameLocation":"4948:24:100","nodeType":"FunctionDefinition","overrides":{"id":27482,"nodeType":"OverrideSpecifier","overrides":[],"src":"4989:8:100"},"parameters":{"id":27481,"nodeType":"ParameterList","parameters":[],"src":"4972:2:100"},"returnParameters":{"id":27485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27484,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27489,"src":"5007:7:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27483,"name":"address","nodeType":"ElementaryTypeName","src":"5007:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5006:9:100"},"scope":27490,"src":"4939:111:100","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":27491,"src":"1177:3875:100","usedErrors":[]}],"src":"37:5016:100"},"id":100},"@aave/core-v3/contracts/protocol/tokenization/base/DebtTokenBase.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/base/DebtTokenBase.sol","exportedSymbols":{"Context":[748],"DebtTokenBase":[27722],"EIP712Base":[27822],"Errors":[12642],"ICreditDelegationToken":[4002],"VersionedInitializable":[10573]},"id":27723,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":27492,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:101"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol","file":"../../../dependencies/openzeppelin/contracts/Context.sol","id":27494,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27723,"sourceUnit":749,"src":"63:81:101","symbolAliases":[{"foreign":{"id":27493,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:7:101","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol","file":"../../libraries/helpers/Errors.sol","id":27496,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27723,"sourceUnit":12643,"src":"145:58:101","symbolAliases":[{"foreign":{"id":27495,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"153:6:101","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol","file":"../../libraries/aave-upgradeability/VersionedInitializable.sol","id":27498,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27723,"sourceUnit":10574,"src":"204:102:101","symbolAliases":[{"foreign":{"id":27497,"name":"VersionedInitializable","nodeType":"Identifier","overloadedDeclarations":[],"src":"212:22:101","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/ICreditDelegationToken.sol","file":"../../../interfaces/ICreditDelegationToken.sol","id":27500,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27723,"sourceUnit":4003,"src":"307:86:101","symbolAliases":[{"foreign":{"id":27499,"name":"ICreditDelegationToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"315:22:101","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/base/EIP712Base.sol","file":"./EIP712Base.sol","id":27502,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":27723,"sourceUnit":27823,"src":"394:44:101","symbolAliases":[{"foreign":{"id":27501,"name":"EIP712Base","nodeType":"Identifier","overloadedDeclarations":[],"src":"402:10:101","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":27504,"name":"VersionedInitializable","nodeType":"IdentifierPath","referencedDeclaration":10573,"src":"628:22:101"},"id":27505,"nodeType":"InheritanceSpecifier","src":"628:22:101"},{"baseName":{"id":27506,"name":"EIP712Base","nodeType":"IdentifierPath","referencedDeclaration":27822,"src":"654:10:101"},"id":27507,"nodeType":"InheritanceSpecifier","src":"654:10:101"},{"baseName":{"id":27508,"name":"Context","nodeType":"IdentifierPath","referencedDeclaration":748,"src":"668:7:101"},"id":27509,"nodeType":"InheritanceSpecifier","src":"668:7:101"},{"baseName":{"id":27510,"name":"ICreditDelegationToken","nodeType":"IdentifierPath","referencedDeclaration":4002,"src":"679:22:101"},"id":27511,"nodeType":"InheritanceSpecifier","src":"679:22:101"}],"canonicalName":"DebtTokenBase","contractDependencies":[],"contractKind":"contract","documentation":{"id":27503,"nodeType":"StructuredDocumentation","src":"440:150:101","text":" @title DebtTokenBase\n @author Aave\n @notice Base contract for different types of debt tokens, like StableDebtToken or VariableDebtToken"},"fullyImplemented":false,"id":27722,"linearizedBaseContracts":[27722,4002,748,27822,10573],"name":"DebtTokenBase","nameLocation":"609:13:101","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":27517,"mutability":"mutable","name":"_borrowAllowances","nameLocation":"843:17:101","nodeType":"VariableDeclaration","scope":27722,"src":"786:74:101","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":27516,"keyType":{"id":27512,"name":"address","nodeType":"ElementaryTypeName","src":"794:7:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"786:47:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueType":{"id":27515,"keyType":{"id":27513,"name":"address","nodeType":"ElementaryTypeName","src":"813:7:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"805:27:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":27514,"name":"uint256","nodeType":"ElementaryTypeName","src":"824:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"},{"constant":true,"functionSelector":"f3bfc738","id":27522,"mutability":"constant","name":"DELEGATION_WITH_SIG_TYPEHASH","nameLocation":"921:28:101","nodeType":"VariableDeclaration","scope":27722,"src":"897:153:101","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":27518,"name":"bytes32","nodeType":"ElementaryTypeName","src":"897:7:101","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"44656c65676174696f6e5769746853696728616464726573732064656c6567617465652c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529","id":27520,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"966:83:101","typeDescriptions":{"typeIdentifier":"t_stringliteral_323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa0","typeString":"literal_string \"DelegationWithSig(address delegatee,uint256 value,uint256 nonce,uint256 deadline)\""},"value":"DelegationWithSig(address delegatee,uint256 value,uint256 nonce,uint256 deadline)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa0","typeString":"literal_string \"DelegationWithSig(address delegatee,uint256 value,uint256 nonce,uint256 deadline)\""}],"id":27519,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"956:9:101","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":27521,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"956:94:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"constant":false,"id":27524,"mutability":"mutable","name":"_underlyingAsset","nameLocation":"1072:16:101","nodeType":"VariableDeclaration","scope":27722,"src":"1055:33:101","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27523,"name":"address","nodeType":"ElementaryTypeName","src":"1055:7:101","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"body":{"id":27530,"nodeType":"Block","src":"1155:37:101","statements":[]},"documentation":{"id":27525,"nodeType":"StructuredDocumentation","src":"1093:32:101","text":" @dev Constructor."},"id":27531,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":27528,"kind":"baseConstructorSpecifier","modifierName":{"id":27527,"name":"EIP712Base","nodeType":"IdentifierPath","referencedDeclaration":27822,"src":"1142:10:101"},"nodeType":"ModifierInvocation","src":"1142:12:101"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":27526,"nodeType":"ParameterList","parameters":[],"src":"1139:2:101"},"returnParameters":{"id":27529,"nodeType":"ParameterList","parameters":[],"src":"1155:0:101"},"scope":27722,"src":"1128:64:101","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[3973],"body":{"id":27547,"nodeType":"Block","src":"1317:62:101","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":27541,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"1342:10:101","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":27542,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1342:12:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":27543,"name":"delegatee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27534,"src":"1356:9:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27544,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27536,"src":"1367:6:101","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":27540,"name":"_approveDelegation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27685,"src":"1323:18:101","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":27545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1323:51:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27546,"nodeType":"ExpressionStatement","src":"1323:51:101"}]},"documentation":{"id":27532,"nodeType":"StructuredDocumentation","src":"1196:38:101","text":"@inheritdoc ICreditDelegationToken"},"functionSelector":"c04a8a10","id":27548,"implemented":true,"kind":"function","modifiers":[],"name":"approveDelegation","nameLocation":"1246:17:101","nodeType":"FunctionDefinition","overrides":{"id":27538,"nodeType":"OverrideSpecifier","overrides":[],"src":"1308:8:101"},"parameters":{"id":27537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27534,"mutability":"mutable","name":"delegatee","nameLocation":"1272:9:101","nodeType":"VariableDeclaration","scope":27548,"src":"1264:17:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27533,"name":"address","nodeType":"ElementaryTypeName","src":"1264:7:101","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27536,"mutability":"mutable","name":"amount","nameLocation":"1291:6:101","nodeType":"VariableDeclaration","scope":27548,"src":"1283:14:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27535,"name":"uint256","nodeType":"ElementaryTypeName","src":"1283:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1263:35:101"},"returnParameters":{"id":27539,"nodeType":"ParameterList","parameters":[],"src":"1317:0:101"},"scope":27722,"src":"1237:142:101","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4001],"body":{"id":27640,"nodeType":"Block","src":"1594:653:101","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":27572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27567,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27551,"src":"1608:9:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":27570,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1629:1:101","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":27569,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1621:7:101","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":27568,"name":"address","nodeType":"ElementaryTypeName","src":"1621:7:101","typeDescriptions":{}}},"id":27571,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1621:10:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1608:23:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":27573,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"1633:6:101","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":27574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ZERO_ADDRESS_NOT_VALID","nodeType":"MemberAccess","referencedDeclaration":12599,"src":"1633:29:101","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27566,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1600:7:101","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1600:63:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27576,"nodeType":"ExpressionStatement","src":"1600:63:101"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":27578,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1708:5:101","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":27579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"1708:15:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":27580,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27557,"src":"1727:8:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1708:27:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":27582,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"1737:6:101","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":27583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_EXPIRATION","nodeType":"MemberAccess","referencedDeclaration":12602,"src":"1737:25:101","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27577,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1700:7:101","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27584,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1700:63:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27585,"nodeType":"ExpressionStatement","src":"1700:63:101"},{"assignments":[27587],"declarations":[{"constant":false,"id":27587,"mutability":"mutable","name":"currentValidNonce","nameLocation":"1777:17:101","nodeType":"VariableDeclaration","scope":27640,"src":"1769:25:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27586,"name":"uint256","nodeType":"ElementaryTypeName","src":"1769:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27591,"initialValue":{"baseExpression":{"id":27588,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27740,"src":"1797:7:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":27590,"indexExpression":{"id":27589,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27551,"src":"1805:9:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1797:18:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1769:46:101"},{"assignments":[27593],"declarations":[{"constant":false,"id":27593,"mutability":"mutable","name":"digest","nameLocation":"1829:6:101","nodeType":"VariableDeclaration","scope":27640,"src":"1821:14:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":27592,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1821:7:101","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":27612,"initialValue":{"arguments":[{"arguments":[{"hexValue":"1901","id":27597,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1881:10:101","typeDescriptions":{"typeIdentifier":"t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541","typeString":"literal_string hex\"1901\""},"value":"\u0019\u0001"},{"arguments":[],"expression":{"argumentTypes":[],"id":27598,"name":"DOMAIN_SEPARATOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27772,"src":"1901:16:101","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":27599,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1901:18:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"arguments":[{"id":27603,"name":"DELEGATION_WITH_SIG_TYPEHASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27522,"src":"1961:28:101","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":27604,"name":"delegatee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27553,"src":"1991:9:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27605,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27555,"src":"2002:5:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":27606,"name":"currentValidNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27587,"src":"2009:17:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":27607,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27557,"src":"2028:8:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":27601,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1950:3:101","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":27602,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"1950:10:101","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":27608,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1950:87:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":27600,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1929:9:101","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":27609,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1929:118:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541","typeString":"literal_string hex\"1901\""},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":27595,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1855:3:101","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":27596,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"1855:16:101","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":27610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1855:200:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":27594,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1838:9:101","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":27611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1838:223:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1821:240:101"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":27621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27614,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27551,"src":"2075:9:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":27616,"name":"digest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27593,"src":"2098:6:101","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":27617,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27559,"src":"2106:1:101","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":27618,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27561,"src":"2109:1:101","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":27619,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27563,"src":"2112:1:101","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":27615,"name":"ecrecover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-6,"src":"2088:9:101","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":27620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2088:26:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2075:39:101","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":27622,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"2116:6:101","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":27623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_SIGNATURE","nodeType":"MemberAccess","referencedDeclaration":12605,"src":"2116:24:101","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27613,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2067:7:101","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27624,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2067:74:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27625,"nodeType":"ExpressionStatement","src":"2067:74:101"},{"expression":{"id":27632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":27626,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27740,"src":"2147:7:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":27628,"indexExpression":{"id":27627,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27551,"src":"2155:9:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2147:18:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27629,"name":"currentValidNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27587,"src":"2168:17:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":27630,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2188:1:101","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2168:21:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2147:42:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27633,"nodeType":"ExpressionStatement","src":"2147:42:101"},{"expression":{"arguments":[{"id":27635,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27551,"src":"2214:9:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27636,"name":"delegatee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27553,"src":"2225:9:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27637,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27555,"src":"2236:5:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27634,"name":"_approveDelegation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27685,"src":"2195:18:101","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":27638,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2195:47:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27639,"nodeType":"ExpressionStatement","src":"2195:47:101"}]},"documentation":{"id":27549,"nodeType":"StructuredDocumentation","src":"1383:38:101","text":"@inheritdoc ICreditDelegationToken"},"functionSelector":"0b52d558","id":27641,"implemented":true,"kind":"function","modifiers":[],"name":"delegationWithSig","nameLocation":"1433:17:101","nodeType":"FunctionDefinition","parameters":{"id":27564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27551,"mutability":"mutable","name":"delegator","nameLocation":"1464:9:101","nodeType":"VariableDeclaration","scope":27641,"src":"1456:17:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27550,"name":"address","nodeType":"ElementaryTypeName","src":"1456:7:101","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27553,"mutability":"mutable","name":"delegatee","nameLocation":"1487:9:101","nodeType":"VariableDeclaration","scope":27641,"src":"1479:17:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27552,"name":"address","nodeType":"ElementaryTypeName","src":"1479:7:101","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27555,"mutability":"mutable","name":"value","nameLocation":"1510:5:101","nodeType":"VariableDeclaration","scope":27641,"src":"1502:13:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27554,"name":"uint256","nodeType":"ElementaryTypeName","src":"1502:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27557,"mutability":"mutable","name":"deadline","nameLocation":"1529:8:101","nodeType":"VariableDeclaration","scope":27641,"src":"1521:16:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27556,"name":"uint256","nodeType":"ElementaryTypeName","src":"1521:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27559,"mutability":"mutable","name":"v","nameLocation":"1549:1:101","nodeType":"VariableDeclaration","scope":27641,"src":"1543:7:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":27558,"name":"uint8","nodeType":"ElementaryTypeName","src":"1543:5:101","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":27561,"mutability":"mutable","name":"r","nameLocation":"1564:1:101","nodeType":"VariableDeclaration","scope":27641,"src":"1556:9:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":27560,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1556:7:101","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":27563,"mutability":"mutable","name":"s","nameLocation":"1579:1:101","nodeType":"VariableDeclaration","scope":27641,"src":"1571:9:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":27562,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1571:7:101","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1450:134:101"},"returnParameters":{"id":27565,"nodeType":"ParameterList","parameters":[],"src":"1594:0:101"},"scope":27722,"src":"1424:823:101","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3983],"body":{"id":27658,"nodeType":"Block","src":"2404:53:101","statements":[{"expression":{"baseExpression":{"baseExpression":{"id":27652,"name":"_borrowAllowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27517,"src":"2417:17:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":27654,"indexExpression":{"id":27653,"name":"fromUser","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27644,"src":"2435:8:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2417:27:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":27656,"indexExpression":{"id":27655,"name":"toUser","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27646,"src":"2445:6:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2417:35:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":27651,"id":27657,"nodeType":"Return","src":"2410:42:101"}]},"documentation":{"id":27642,"nodeType":"StructuredDocumentation","src":"2251:38:101","text":"@inheritdoc ICreditDelegationToken"},"functionSelector":"6bd76d24","id":27659,"implemented":true,"kind":"function","modifiers":[],"name":"borrowAllowance","nameLocation":"2301:15:101","nodeType":"FunctionDefinition","overrides":{"id":27648,"nodeType":"OverrideSpecifier","overrides":[],"src":"2377:8:101"},"parameters":{"id":27647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27644,"mutability":"mutable","name":"fromUser","nameLocation":"2330:8:101","nodeType":"VariableDeclaration","scope":27659,"src":"2322:16:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27643,"name":"address","nodeType":"ElementaryTypeName","src":"2322:7:101","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27646,"mutability":"mutable","name":"toUser","nameLocation":"2352:6:101","nodeType":"VariableDeclaration","scope":27659,"src":"2344:14:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27645,"name":"address","nodeType":"ElementaryTypeName","src":"2344:7:101","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2316:46:101"},"returnParameters":{"id":27651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27650,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27659,"src":"2395:7:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27649,"name":"uint256","nodeType":"ElementaryTypeName","src":"2395:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2394:9:101"},"scope":27722,"src":"2292:165:101","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":27684,"nodeType":"Block","src":"2840:142:101","statements":[{"expression":{"id":27675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":27669,"name":"_borrowAllowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27517,"src":"2846:17:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":27672,"indexExpression":{"id":27670,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27662,"src":"2864:9:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2846:28:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":27673,"indexExpression":{"id":27671,"name":"delegatee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27664,"src":"2875:9:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2846:39:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":27674,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27666,"src":"2888:6:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2846:48:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27676,"nodeType":"ExpressionStatement","src":"2846:48:101"},{"eventCall":{"arguments":[{"id":27678,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27662,"src":"2930:9:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27679,"name":"delegatee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27664,"src":"2941:9:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27680,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27524,"src":"2952:16:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27681,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27666,"src":"2970:6:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27677,"name":"BorrowAllowanceDelegated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3965,"src":"2905:24:101","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":27682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2905:72:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27683,"nodeType":"EmitStatement","src":"2900:77:101"}]},"documentation":{"id":27660,"nodeType":"StructuredDocumentation","src":"2461:285:101","text":" @notice Updates the borrow allowance of a user on the specific debt token.\n @param delegator The address delegating the borrowing power\n @param delegatee The address receiving the delegated borrowing power\n @param amount The allowance amount being delegated."},"id":27685,"implemented":true,"kind":"function","modifiers":[],"name":"_approveDelegation","nameLocation":"2758:18:101","nodeType":"FunctionDefinition","parameters":{"id":27667,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27662,"mutability":"mutable","name":"delegator","nameLocation":"2785:9:101","nodeType":"VariableDeclaration","scope":27685,"src":"2777:17:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27661,"name":"address","nodeType":"ElementaryTypeName","src":"2777:7:101","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27664,"mutability":"mutable","name":"delegatee","nameLocation":"2804:9:101","nodeType":"VariableDeclaration","scope":27685,"src":"2796:17:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27663,"name":"address","nodeType":"ElementaryTypeName","src":"2796:7:101","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27666,"mutability":"mutable","name":"amount","nameLocation":"2823:6:101","nodeType":"VariableDeclaration","scope":27685,"src":"2815:14:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27665,"name":"uint256","nodeType":"ElementaryTypeName","src":"2815:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2776:54:101"},"returnParameters":{"id":27668,"nodeType":"ParameterList","parameters":[],"src":"2840:0:101"},"scope":27722,"src":"2749:233:101","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":27720,"nodeType":"Block","src":"3385:233:101","statements":[{"assignments":[27696],"declarations":[{"constant":false,"id":27696,"mutability":"mutable","name":"newAllowance","nameLocation":"3399:12:101","nodeType":"VariableDeclaration","scope":27720,"src":"3391:20:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27695,"name":"uint256","nodeType":"ElementaryTypeName","src":"3391:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27704,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":27697,"name":"_borrowAllowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27517,"src":"3414:17:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":27699,"indexExpression":{"id":27698,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27688,"src":"3432:9:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3414:28:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":27701,"indexExpression":{"id":27700,"name":"delegatee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27690,"src":"3443:9:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3414:39:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":27702,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27692,"src":"3456:6:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3414:48:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3391:71:101"},{"expression":{"id":27711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":27705,"name":"_borrowAllowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27517,"src":"3469:17:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":27708,"indexExpression":{"id":27706,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27688,"src":"3487:9:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3469:28:101","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":27709,"indexExpression":{"id":27707,"name":"delegatee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27690,"src":"3498:9:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3469:39:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":27710,"name":"newAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27696,"src":"3511:12:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3469:54:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27712,"nodeType":"ExpressionStatement","src":"3469:54:101"},{"eventCall":{"arguments":[{"id":27714,"name":"delegator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27688,"src":"3560:9:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27715,"name":"delegatee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27690,"src":"3571:9:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27716,"name":"_underlyingAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27524,"src":"3582:16:101","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27717,"name":"newAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27696,"src":"3600:12:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27713,"name":"BorrowAllowanceDelegated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3965,"src":"3535:24:101","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":27718,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3535:78:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27719,"nodeType":"EmitStatement","src":"3530:83:101"}]},"documentation":{"id":27686,"nodeType":"StructuredDocumentation","src":"2986:299:101","text":" @notice Decreases the borrow allowance of a user on the specific debt token.\n @param delegator The address delegating the borrowing power\n @param delegatee The address receiving the delegated borrowing power\n @param amount The amount to subtract from the current allowance"},"id":27721,"implemented":true,"kind":"function","modifiers":[],"name":"_decreaseBorrowAllowance","nameLocation":"3297:24:101","nodeType":"FunctionDefinition","parameters":{"id":27693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27688,"mutability":"mutable","name":"delegator","nameLocation":"3330:9:101","nodeType":"VariableDeclaration","scope":27721,"src":"3322:17:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27687,"name":"address","nodeType":"ElementaryTypeName","src":"3322:7:101","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27690,"mutability":"mutable","name":"delegatee","nameLocation":"3349:9:101","nodeType":"VariableDeclaration","scope":27721,"src":"3341:17:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27689,"name":"address","nodeType":"ElementaryTypeName","src":"3341:7:101","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27692,"mutability":"mutable","name":"amount","nameLocation":"3368:6:101","nodeType":"VariableDeclaration","scope":27721,"src":"3360:14:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27691,"name":"uint256","nodeType":"ElementaryTypeName","src":"3360:7:101","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3321:54:101"},"returnParameters":{"id":27694,"nodeType":"ParameterList","parameters":[],"src":"3385:0:101"},"scope":27722,"src":"3288:330:101","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":27723,"src":"591:3029:101","usedErrors":[]}],"src":"37:3584:101"},"id":101},"@aave/core-v3/contracts/protocol/tokenization/base/EIP712Base.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/base/EIP712Base.sol","exportedSymbols":{"EIP712Base":[27822]},"id":27823,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":27724,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:102"},{"abstract":true,"baseContracts":[],"canonicalName":"EIP712Base","contractDependencies":[],"contractKind":"contract","documentation":{"id":27725,"nodeType":"StructuredDocumentation","src":"63:95:102","text":" @title EIP712Base\n @author Aave\n @notice Base contract implementation of EIP712."},"fullyImplemented":false,"id":27822,"linearizedBaseContracts":[27822],"name":"EIP712Base","nameLocation":"177:10:102","nodeType":"ContractDefinition","nodes":[{"constant":true,"functionSelector":"78160376","id":27731,"mutability":"constant","name":"EIP712_REVISION","nameLocation":"214:15:102","nodeType":"VariableDeclaration","scope":27822,"src":"192:50:102","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":27726,"name":"bytes","nodeType":"ElementaryTypeName","src":"192:5:102","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"value":{"arguments":[{"hexValue":"31","id":27729,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"238:3:102","typeDescriptions":{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""}],"id":27728,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"232:5:102","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":27727,"name":"bytes","nodeType":"ElementaryTypeName","src":"232:5:102","typeDescriptions":{}}},"id":27730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"232:10:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"visibility":"public"},{"constant":true,"id":27736,"mutability":"constant","name":"EIP712_DOMAIN","nameLocation":"272:13:102","nodeType":"VariableDeclaration","scope":27822,"src":"246:141:102","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":27732,"name":"bytes32","nodeType":"ElementaryTypeName","src":"246:7:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429","id":27734,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"302:84:102","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":27733,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"292:9:102","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":27735,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"292:95:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":27740,"mutability":"mutable","name":"_nonces","nameLocation":"475:7:102","nodeType":"VariableDeclaration","scope":27822,"src":"438:44:102","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":27739,"keyType":{"id":27737,"name":"address","nodeType":"ElementaryTypeName","src":"446:7:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"438:27:102","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":27738,"name":"uint256","nodeType":"ElementaryTypeName","src":"457:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":27742,"mutability":"mutable","name":"_domainSeparator","nameLocation":"504:16:102","nodeType":"VariableDeclaration","scope":27822,"src":"487:33:102","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":27741,"name":"bytes32","nodeType":"ElementaryTypeName","src":"487:7:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":27744,"mutability":"immutable","name":"_chainId","nameLocation":"551:8:102","nodeType":"VariableDeclaration","scope":27822,"src":"524:35:102","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27743,"name":"uint256","nodeType":"ElementaryTypeName","src":"524:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"body":{"id":27753,"nodeType":"Block","src":"613:35:102","statements":[{"expression":{"id":27751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":27748,"name":"_chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27744,"src":"619:8:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":27749,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"630:5:102","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":27750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"chainid","nodeType":"MemberAccess","src":"630:13:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"619:24:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27752,"nodeType":"ExpressionStatement","src":"619:24:102"}]},"documentation":{"id":27745,"nodeType":"StructuredDocumentation","src":"564:32:102","text":" @dev Constructor."},"id":27754,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":27746,"nodeType":"ParameterList","parameters":[],"src":"610:2:102"},"returnParameters":{"id":27747,"nodeType":"ParameterList","parameters":[],"src":"613:0:102"},"scope":27822,"src":"599:49:102","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":27771,"nodeType":"Block","src":"933:119:102","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":27760,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"943:5:102","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":27761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"chainid","nodeType":"MemberAccess","src":"943:13:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":27762,"name":"_chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27744,"src":"960:8:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"943:25:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27767,"nodeType":"IfStatement","src":"939:69:102","trueBody":{"id":27766,"nodeType":"Block","src":"970:38:102","statements":[{"expression":{"id":27764,"name":"_domainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27742,"src":"985:16:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":27759,"id":27765,"nodeType":"Return","src":"978:23:102"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":27768,"name":"_calculateDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27815,"src":"1020:25:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":27769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1020:27:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":27759,"id":27770,"nodeType":"Return","src":"1013:34:102"}]},"documentation":{"id":27755,"nodeType":"StructuredDocumentation","src":"652:212:102","text":" @notice Get the domain separator for the token\n @dev Return cached value if chainId matches cache, otherwise recomputes separator\n @return The domain separator of the token at current chain"},"functionSelector":"3644e515","id":27772,"implemented":true,"kind":"function","modifiers":[],"name":"DOMAIN_SEPARATOR","nameLocation":"876:16:102","nodeType":"FunctionDefinition","parameters":{"id":27756,"nodeType":"ParameterList","parameters":[],"src":"892:2:102"},"returnParameters":{"id":27759,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27758,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27772,"src":"924:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":27757,"name":"bytes32","nodeType":"ElementaryTypeName","src":"924:7:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"923:9:102"},"scope":27822,"src":"867:185:102","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":27784,"nodeType":"Block","src":"1329:32:102","statements":[{"expression":{"baseExpression":{"id":27780,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27740,"src":"1342:7:102","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":27782,"indexExpression":{"id":27781,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27775,"src":"1350:5:102","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1342:14:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":27779,"id":27783,"nodeType":"Return","src":"1335:21:102"}]},"documentation":{"id":27773,"nodeType":"StructuredDocumentation","src":"1056:201:102","text":" @notice Returns the nonce value for address specified as parameter\n @param owner The address for which the nonce is being returned\n @return The nonce value for the input address`"},"functionSelector":"7ecebe00","id":27785,"implemented":true,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"1269:6:102","nodeType":"FunctionDefinition","parameters":{"id":27776,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27775,"mutability":"mutable","name":"owner","nameLocation":"1284:5:102","nodeType":"VariableDeclaration","scope":27785,"src":"1276:13:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27774,"name":"address","nodeType":"ElementaryTypeName","src":"1276:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1275:15:102"},"returnParameters":{"id":27779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27778,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27785,"src":"1320:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27777,"name":"uint256","nodeType":"ElementaryTypeName","src":"1320:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1319:9:102"},"scope":27822,"src":"1260:101:102","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":27814,"nodeType":"Block","src":"1544:229:102","statements":[{"expression":{"arguments":[{"arguments":[{"id":27794,"name":"EIP712_DOMAIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27736,"src":"1604:13:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":27798,"name":"_EIP712BaseId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27821,"src":"1645:13:102","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view returns (string memory)"}},"id":27799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1645:15:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27797,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1639:5:102","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":27796,"name":"bytes","nodeType":"ElementaryTypeName","src":"1639:5:102","typeDescriptions":{}}},"id":27800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1639:22:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":27795,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1629:9:102","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":27801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1629:33:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":27803,"name":"EIP712_REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27731,"src":"1684:15:102","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":27802,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1674:9:102","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":27804,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1674:26:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":27805,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1712:5:102","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":27806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"chainid","nodeType":"MemberAccess","src":"1712:13:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":27809,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1745:4:102","typeDescriptions":{"typeIdentifier":"t_contract$_EIP712Base_$27822","typeString":"contract EIP712Base"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_EIP712Base_$27822","typeString":"contract EIP712Base"}],"id":27808,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1737:7:102","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":27807,"name":"address","nodeType":"ElementaryTypeName","src":"1737:7:102","typeDescriptions":{}}},"id":27810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1737:13:102","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":27792,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1582:3:102","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":27793,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"1582:10:102","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":27811,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1582:178:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":27791,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1563:9:102","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":27812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1563:205:102","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":27790,"id":27813,"nodeType":"Return","src":"1550:218:102"}]},"documentation":{"id":27786,"nodeType":"StructuredDocumentation","src":"1365:107:102","text":" @notice Compute the current domain separator\n @return The domain separator for the token"},"id":27815,"implemented":true,"kind":"function","modifiers":[],"name":"_calculateDomainSeparator","nameLocation":"1484:25:102","nodeType":"FunctionDefinition","parameters":{"id":27787,"nodeType":"ParameterList","parameters":[],"src":"1509:2:102"},"returnParameters":{"id":27790,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27789,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27815,"src":"1535:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":27788,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1535:7:102","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1534:9:102"},"scope":27822,"src":"1475:298:102","stateMutability":"view","virtual":false,"visibility":"internal"},{"documentation":{"id":27816,"nodeType":"StructuredDocumentation","src":"1777:133:102","text":" @notice Returns the user readable name of signing domain (e.g. token name)\n @return The name of the signing domain"},"id":27821,"implemented":false,"kind":"function","modifiers":[],"name":"_EIP712BaseId","nameLocation":"1922:13:102","nodeType":"FunctionDefinition","parameters":{"id":27817,"nodeType":"ParameterList","parameters":[],"src":"1935:2:102"},"returnParameters":{"id":27820,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27819,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27821,"src":"1969:13:102","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":27818,"name":"string","nodeType":"ElementaryTypeName","src":"1969:6:102","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1968:15:102"},"scope":27822,"src":"1913:71:102","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":27823,"src":"159:1827:102","usedErrors":[]}],"src":"37:1950:102"},"id":102},"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol","exportedSymbols":{"Context":[748],"Errors":[12642],"IACLManager":[3718],"IAaveIncentivesController":[3875],"IERC20":[1442],"IERC20Detailed":[1464],"IPool":[4860],"IPoolAddressesProvider":[5069],"IncentivizedERC20":[28349],"SafeCast":[1966],"WadRayMath":[21219]},"id":28350,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":27824,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:103"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol","file":"../../../dependencies/openzeppelin/contracts/Context.sol","id":27826,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28350,"sourceUnit":749,"src":"63:81:103","symbolAliases":[{"foreign":{"id":27825,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:7:103","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"../../../dependencies/openzeppelin/contracts/IERC20.sol","id":27828,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28350,"sourceUnit":1443,"src":"145:79:103","symbolAliases":[{"foreign":{"id":27827,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"153:6:103","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","file":"../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol","id":27830,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28350,"sourceUnit":1465,"src":"225:95:103","symbolAliases":[{"foreign":{"id":27829,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"src":"233:14:103","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"../../../dependencies/openzeppelin/contracts/SafeCast.sol","id":27832,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28350,"sourceUnit":1967,"src":"321:83:103","symbolAliases":[{"foreign":{"id":27831,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"329:8:103","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol","file":"../../libraries/math/WadRayMath.sol","id":27834,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28350,"sourceUnit":21220,"src":"405:63:103","symbolAliases":[{"foreign":{"id":27833,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"413:10:103","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol","file":"../../libraries/helpers/Errors.sol","id":27836,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28350,"sourceUnit":12643,"src":"469:58:103","symbolAliases":[{"foreign":{"id":27835,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"477:6:103","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol","file":"../../../interfaces/IAaveIncentivesController.sol","id":27838,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28350,"sourceUnit":3876,"src":"528:92:103","symbolAliases":[{"foreign":{"id":27837,"name":"IAaveIncentivesController","nodeType":"Identifier","overloadedDeclarations":[],"src":"536:25:103","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"../../../interfaces/IPoolAddressesProvider.sol","id":27840,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28350,"sourceUnit":5070,"src":"621:86:103","symbolAliases":[{"foreign":{"id":27839,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"629:22:103","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","file":"../../../interfaces/IPool.sol","id":27842,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28350,"sourceUnit":4861,"src":"708:52:103","symbolAliases":[{"foreign":{"id":27841,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"716:5:103","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IACLManager.sol","file":"../../../interfaces/IACLManager.sol","id":27844,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28350,"sourceUnit":3719,"src":"761:64:103","symbolAliases":[{"foreign":{"id":27843,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"src":"769:11:103","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":27846,"name":"Context","nodeType":"IdentifierPath","referencedDeclaration":748,"src":"1007:7:103"},"id":27847,"nodeType":"InheritanceSpecifier","src":"1007:7:103"},{"baseName":{"id":27848,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"1016:14:103"},"id":27849,"nodeType":"InheritanceSpecifier","src":"1016:14:103"}],"canonicalName":"IncentivizedERC20","contractDependencies":[],"contractKind":"contract","documentation":{"id":27845,"nodeType":"StructuredDocumentation","src":"827:140:103","text":" @title IncentivizedERC20\n @author Aave, inspired by the Openzeppelin ERC20 implementation\n @notice Basic ERC20 implementation"},"fullyImplemented":true,"id":28349,"linearizedBaseContracts":[28349,1464,1442,748],"name":"IncentivizedERC20","nameLocation":"986:17:103","nodeType":"ContractDefinition","nodes":[{"id":27852,"libraryName":{"id":27850,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":21219,"src":"1041:10:103"},"nodeType":"UsingForDirective","src":"1035:29:103","typeName":{"id":27851,"name":"uint256","nodeType":"ElementaryTypeName","src":"1056:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":27855,"libraryName":{"id":27853,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"1073:8:103"},"nodeType":"UsingForDirective","src":"1067:27:103","typeName":{"id":27854,"name":"uint256","nodeType":"ElementaryTypeName","src":"1086:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"body":{"id":27878,"nodeType":"Block","src":"1205:169:103","statements":[{"assignments":[27860],"declarations":[{"constant":false,"id":27860,"mutability":"mutable","name":"aclManager","nameLocation":"1223:10:103","nodeType":"VariableDeclaration","scope":27878,"src":"1211:22:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"},"typeName":{"id":27859,"nodeType":"UserDefinedTypeName","pathNode":{"id":27858,"name":"IACLManager","nodeType":"IdentifierPath","referencedDeclaration":3718,"src":"1211:11:103"},"referencedDeclaration":3718,"src":"1211:11:103","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"visibility":"internal"}],"id":27866,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27862,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27926,"src":"1248:18:103","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":27863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getACLManager","nodeType":"MemberAccess","referencedDeclaration":5026,"src":"1248:32:103","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":27864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1248:34:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":27861,"name":"IACLManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3718,"src":"1236:11:103","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IACLManager_$3718_$","typeString":"type(contract IACLManager)"}},"id":27865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1236:47:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"nodeType":"VariableDeclarationStatement","src":"1211:72:103"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":27870,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1320:3:103","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":27871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1320:10:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":27868,"name":"aclManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27860,"src":"1297:10:103","typeDescriptions":{"typeIdentifier":"t_contract$_IACLManager_$3718","typeString":"contract IACLManager"}},"id":27869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isPoolAdmin","nodeType":"MemberAccess","referencedDeclaration":3617,"src":"1297:22:103","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":27872,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1297:34:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":27873,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"1333:6:103","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":27874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_NOT_POOL_ADMIN","nodeType":"MemberAccess","referencedDeclaration":12374,"src":"1333:28:103","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27867,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1289:7:103","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27875,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1289:73:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27876,"nodeType":"ExpressionStatement","src":"1289:73:103"},{"id":27877,"nodeType":"PlaceholderStatement","src":"1368:1:103"}]},"documentation":{"id":27856,"nodeType":"StructuredDocumentation","src":"1098:79:103","text":" @dev Only pool admin can call functions marked by this modifier."},"id":27879,"name":"onlyPoolAdmin","nameLocation":"1189:13:103","nodeType":"ModifierDefinition","parameters":{"id":27857,"nodeType":"ParameterList","parameters":[],"src":"1202:2:103"},"src":"1180:194:103","virtual":false,"visibility":"internal"},{"body":{"id":27895,"nodeType":"Block","src":"1474:84:103","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":27889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":27883,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"1488:10:103","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":27884,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1488:12:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":27887,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27929,"src":"1512:4:103","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}],"id":27886,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1504:7:103","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":27885,"name":"address","nodeType":"ElementaryTypeName","src":"1504:7:103","typeDescriptions":{}}},"id":27888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1504:13:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1488:29:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":27890,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"1519:6:103","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":27891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"CALLER_MUST_BE_POOL","nodeType":"MemberAccess","referencedDeclaration":12440,"src":"1519:26:103","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":27882,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1480:7:103","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":27892,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1480:66:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27893,"nodeType":"ExpressionStatement","src":"1480:66:103"},{"id":27894,"nodeType":"PlaceholderStatement","src":"1552:1:103"}]},"documentation":{"id":27880,"nodeType":"StructuredDocumentation","src":"1378:73:103","text":" @dev Only pool can call functions marked by this modifier."},"id":27896,"name":"onlyPool","nameLocation":"1463:8:103","nodeType":"ModifierDefinition","parameters":{"id":27881,"nodeType":"ParameterList","parameters":[],"src":"1471:2:103"},"src":"1454:104:103","virtual":false,"visibility":"internal"},{"canonicalName":"IncentivizedERC20.UserState","id":27901,"members":[{"constant":false,"id":27898,"mutability":"mutable","name":"balance","nameLocation":"1860:7:103","nodeType":"VariableDeclaration","scope":27901,"src":"1852:15:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":27897,"name":"uint128","nodeType":"ElementaryTypeName","src":"1852:7:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":27900,"mutability":"mutable","name":"additionalData","nameLocation":"1881:14:103","nodeType":"VariableDeclaration","scope":27901,"src":"1873:22:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":27899,"name":"uint128","nodeType":"ElementaryTypeName","src":"1873:7:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"name":"UserState","nameLocation":"1836:9:103","nodeType":"StructDefinition","scope":28349,"src":"1829:71:103","visibility":"public"},{"constant":false,"id":27906,"mutability":"mutable","name":"_userState","nameLocation":"2020:10:103","nodeType":"VariableDeclaration","scope":28349,"src":"1981:49:103","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState)"},"typeName":{"id":27905,"keyType":{"id":27902,"name":"address","nodeType":"ElementaryTypeName","src":"1989:7:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1981:29:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState)"},"valueType":{"id":27904,"nodeType":"UserDefinedTypeName","pathNode":{"id":27903,"name":"UserState","nodeType":"IdentifierPath","referencedDeclaration":27901,"src":"2000:9:103"},"referencedDeclaration":27901,"src":"2000:9:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage_ptr","typeString":"struct IncentivizedERC20.UserState"}}},"visibility":"internal"},{"constant":false,"id":27912,"mutability":"mutable","name":"_allowances","nameLocation":"2158:11:103","nodeType":"VariableDeclaration","scope":28349,"src":"2102:67:103","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":27911,"keyType":{"id":27907,"name":"address","nodeType":"ElementaryTypeName","src":"2110:7:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2102:47:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueType":{"id":27910,"keyType":{"id":27908,"name":"address","nodeType":"ElementaryTypeName","src":"2129:7:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2121:27:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":27909,"name":"uint256","nodeType":"ElementaryTypeName","src":"2140:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"private"},{"constant":false,"id":27914,"mutability":"mutable","name":"_totalSupply","nameLocation":"2191:12:103","nodeType":"VariableDeclaration","scope":28349,"src":"2174:29:103","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27913,"name":"uint256","nodeType":"ElementaryTypeName","src":"2174:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27916,"mutability":"mutable","name":"_name","nameLocation":"2222:5:103","nodeType":"VariableDeclaration","scope":28349,"src":"2207:20:103","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":27915,"name":"string","nodeType":"ElementaryTypeName","src":"2207:6:103","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":27918,"mutability":"mutable","name":"_symbol","nameLocation":"2246:7:103","nodeType":"VariableDeclaration","scope":28349,"src":"2231:22:103","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":27917,"name":"string","nodeType":"ElementaryTypeName","src":"2231:6:103","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":27920,"mutability":"mutable","name":"_decimals","nameLocation":"2271:9:103","nodeType":"VariableDeclaration","scope":28349,"src":"2257:23:103","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":27919,"name":"uint8","nodeType":"ElementaryTypeName","src":"2257:5:103","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"private"},{"constant":false,"id":27923,"mutability":"mutable","name":"_incentivesController","nameLocation":"2319:21:103","nodeType":"VariableDeclaration","scope":28349,"src":"2284:56:103","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"},"typeName":{"id":27922,"nodeType":"UserDefinedTypeName","pathNode":{"id":27921,"name":"IAaveIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":3875,"src":"2284:25:103"},"referencedDeclaration":3875,"src":"2284:25:103","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"visibility":"internal"},{"constant":false,"id":27926,"mutability":"immutable","name":"_addressesProvider","nameLocation":"2386:18:103","nodeType":"VariableDeclaration","scope":28349,"src":"2344:60:103","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":27925,"nodeType":"UserDefinedTypeName","pathNode":{"id":27924,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"2344:22:103"},"referencedDeclaration":5069,"src":"2344:22:103","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"},{"constant":false,"functionSelector":"7535d246","id":27929,"mutability":"immutable","name":"POOL","nameLocation":"2431:4:103","nodeType":"VariableDeclaration","scope":28349,"src":"2408:27:103","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":27928,"nodeType":"UserDefinedTypeName","pathNode":{"id":27927,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"2408:5:103"},"referencedDeclaration":4860,"src":"2408:5:103","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"public"},{"body":{"id":27964,"nodeType":"Block","src":"2753:140:103","statements":[{"expression":{"id":27946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":27942,"name":"_addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27926,"src":"2759:18:103","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27943,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27933,"src":"2780:4:103","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":27944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"ADDRESSES_PROVIDER","nodeType":"MemberAccess","referencedDeclaration":4748,"src":"2780:23:103","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IPoolAddressesProvider_$5069_$","typeString":"function () view external returns (contract IPoolAddressesProvider)"}},"id":27945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2780:25:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"src":"2759:46:103","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":27947,"nodeType":"ExpressionStatement","src":"2759:46:103"},{"expression":{"id":27950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":27948,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27916,"src":"2811:5:103","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":27949,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27935,"src":"2819:4:103","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2811:12:103","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":27951,"nodeType":"ExpressionStatement","src":"2811:12:103"},{"expression":{"id":27954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":27952,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27918,"src":"2829:7:103","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":27953,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27937,"src":"2839:6:103","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2829:16:103","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":27955,"nodeType":"ExpressionStatement","src":"2829:16:103"},{"expression":{"id":27958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":27956,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27920,"src":"2851:9:103","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":27957,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27939,"src":"2863:8:103","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"2851:20:103","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":27959,"nodeType":"ExpressionStatement","src":"2851:20:103"},{"expression":{"id":27962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":27960,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27929,"src":"2877:4:103","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":27961,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27933,"src":"2884:4:103","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"src":"2877:11:103","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":27963,"nodeType":"ExpressionStatement","src":"2877:11:103"}]},"documentation":{"id":27930,"nodeType":"StructuredDocumentation","src":"2440:228:103","text":" @dev Constructor.\n @param pool The reference to the main Pool contract\n @param name The name of the token\n @param symbol The symbol of the token\n @param decimals The number of decimals of the token"},"id":27965,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":27940,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27933,"mutability":"mutable","name":"pool","nameLocation":"2689:4:103","nodeType":"VariableDeclaration","scope":27965,"src":"2683:10:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":27932,"nodeType":"UserDefinedTypeName","pathNode":{"id":27931,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"2683:5:103"},"referencedDeclaration":4860,"src":"2683:5:103","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"},{"constant":false,"id":27935,"mutability":"mutable","name":"name","nameLocation":"2709:4:103","nodeType":"VariableDeclaration","scope":27965,"src":"2695:18:103","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":27934,"name":"string","nodeType":"ElementaryTypeName","src":"2695:6:103","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":27937,"mutability":"mutable","name":"symbol","nameLocation":"2729:6:103","nodeType":"VariableDeclaration","scope":27965,"src":"2715:20:103","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":27936,"name":"string","nodeType":"ElementaryTypeName","src":"2715:6:103","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":27939,"mutability":"mutable","name":"decimals","nameLocation":"2743:8:103","nodeType":"VariableDeclaration","scope":27965,"src":"2737:14:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":27938,"name":"uint8","nodeType":"ElementaryTypeName","src":"2737:5:103","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"2682:70:103"},"returnParameters":{"id":27941,"nodeType":"ParameterList","parameters":[],"src":"2753:0:103"},"scope":28349,"src":"2671:222:103","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1453],"body":{"id":27974,"nodeType":"Block","src":"2991:23:103","statements":[{"expression":{"id":27972,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27916,"src":"3004:5:103","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":27971,"id":27973,"nodeType":"Return","src":"2997:12:103"}]},"documentation":{"id":27966,"nodeType":"StructuredDocumentation","src":"2897:30:103","text":"@inheritdoc IERC20Detailed"},"functionSelector":"06fdde03","id":27975,"implemented":true,"kind":"function","modifiers":[],"name":"name","nameLocation":"2939:4:103","nodeType":"FunctionDefinition","overrides":{"id":27968,"nodeType":"OverrideSpecifier","overrides":[],"src":"2958:8:103"},"parameters":{"id":27967,"nodeType":"ParameterList","parameters":[],"src":"2943:2:103"},"returnParameters":{"id":27971,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27970,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27975,"src":"2976:13:103","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":27969,"name":"string","nodeType":"ElementaryTypeName","src":"2976:6:103","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2975:15:103"},"scope":28349,"src":"2930:84:103","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[1458],"body":{"id":27984,"nodeType":"Block","src":"3116:25:103","statements":[{"expression":{"id":27982,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27918,"src":"3129:7:103","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":27981,"id":27983,"nodeType":"Return","src":"3122:14:103"}]},"documentation":{"id":27976,"nodeType":"StructuredDocumentation","src":"3018:30:103","text":"@inheritdoc IERC20Detailed"},"functionSelector":"95d89b41","id":27985,"implemented":true,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"3060:6:103","nodeType":"FunctionDefinition","overrides":{"id":27978,"nodeType":"OverrideSpecifier","overrides":[],"src":"3083:8:103"},"parameters":{"id":27977,"nodeType":"ParameterList","parameters":[],"src":"3066:2:103"},"returnParameters":{"id":27981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27980,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27985,"src":"3101:13:103","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":27979,"name":"string","nodeType":"ElementaryTypeName","src":"3101:6:103","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3100:15:103"},"scope":28349,"src":"3051:90:103","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1463],"body":{"id":27994,"nodeType":"Block","src":"3237:27:103","statements":[{"expression":{"id":27992,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27920,"src":"3250:9:103","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":27991,"id":27993,"nodeType":"Return","src":"3243:16:103"}]},"documentation":{"id":27986,"nodeType":"StructuredDocumentation","src":"3145:30:103","text":"@inheritdoc IERC20Detailed"},"functionSelector":"313ce567","id":27995,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"3187:8:103","nodeType":"FunctionDefinition","overrides":{"id":27988,"nodeType":"OverrideSpecifier","overrides":[],"src":"3212:8:103"},"parameters":{"id":27987,"nodeType":"ParameterList","parameters":[],"src":"3195:2:103"},"returnParameters":{"id":27991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27990,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27995,"src":"3230:5:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":27989,"name":"uint8","nodeType":"ElementaryTypeName","src":"3230:5:103","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"3229:7:103"},"scope":28349,"src":"3178:86:103","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1373],"body":{"id":28004,"nodeType":"Block","src":"3363:30:103","statements":[{"expression":{"id":28002,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27914,"src":"3376:12:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":28001,"id":28003,"nodeType":"Return","src":"3369:19:103"}]},"documentation":{"id":27996,"nodeType":"StructuredDocumentation","src":"3268:22:103","text":"@inheritdoc IERC20"},"functionSelector":"18160ddd","id":28005,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"3302:11:103","nodeType":"FunctionDefinition","overrides":{"id":27998,"nodeType":"OverrideSpecifier","overrides":[],"src":"3336:8:103"},"parameters":{"id":27997,"nodeType":"ParameterList","parameters":[],"src":"3313:2:103"},"returnParameters":{"id":28001,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28000,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28005,"src":"3354:7:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27999,"name":"uint256","nodeType":"ElementaryTypeName","src":"3354:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3353:9:103"},"scope":28349,"src":"3293:100:103","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1381],"body":{"id":28019,"nodeType":"Block","src":"3505:45:103","statements":[{"expression":{"expression":{"baseExpression":{"id":28014,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"3518:10:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":28016,"indexExpression":{"id":28015,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28008,"src":"3529:7:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3518:19:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":28017,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":27898,"src":"3518:27:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":28013,"id":28018,"nodeType":"Return","src":"3511:34:103"}]},"documentation":{"id":28006,"nodeType":"StructuredDocumentation","src":"3397:22:103","text":"@inheritdoc IERC20"},"functionSelector":"70a08231","id":28020,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"3431:9:103","nodeType":"FunctionDefinition","overrides":{"id":28010,"nodeType":"OverrideSpecifier","overrides":[],"src":"3478:8:103"},"parameters":{"id":28009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28008,"mutability":"mutable","name":"account","nameLocation":"3449:7:103","nodeType":"VariableDeclaration","scope":28020,"src":"3441:15:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28007,"name":"address","nodeType":"ElementaryTypeName","src":"3441:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3440:17:103"},"returnParameters":{"id":28013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28012,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28020,"src":"3496:7:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28011,"name":"uint256","nodeType":"ElementaryTypeName","src":"3496:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3495:9:103"},"scope":28349,"src":"3422:128:103","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":28029,"nodeType":"Block","src":"3784:39:103","statements":[{"expression":{"id":28027,"name":"_incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27923,"src":"3797:21:103","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"functionReturnParameters":28026,"id":28028,"nodeType":"Return","src":"3790:28:103"}]},"documentation":{"id":28021,"nodeType":"StructuredDocumentation","src":"3554:134:103","text":" @notice Returns the address of the Incentives Controller contract\n @return The address of the Incentives Controller"},"functionSelector":"75d26413","id":28030,"implemented":true,"kind":"function","modifiers":[],"name":"getIncentivesController","nameLocation":"3700:23:103","nodeType":"FunctionDefinition","parameters":{"id":28022,"nodeType":"ParameterList","parameters":[],"src":"3723:2:103"},"returnParameters":{"id":28026,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28025,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28030,"src":"3757:25:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"},"typeName":{"id":28024,"nodeType":"UserDefinedTypeName","pathNode":{"id":28023,"name":"IAaveIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":3875,"src":"3757:25:103"},"referencedDeclaration":3875,"src":"3757:25:103","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"visibility":"internal"}],"src":"3756:27:103"},"scope":28349,"src":"3691:132:103","stateMutability":"view","virtual":true,"visibility":"external"},{"body":{"id":28043,"nodeType":"Block","src":"4032:45:103","statements":[{"expression":{"id":28041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":28039,"name":"_incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27923,"src":"4038:21:103","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":28040,"name":"controller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28034,"src":"4062:10:103","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"src":"4038:34:103","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"id":28042,"nodeType":"ExpressionStatement","src":"4038:34:103"}]},"documentation":{"id":28031,"nodeType":"StructuredDocumentation","src":"3827:108:103","text":" @notice Sets a new Incentives Controller\n @param controller the new Incentives controller"},"functionSelector":"e655dbd8","id":28044,"implemented":true,"kind":"function","modifiers":[{"id":28037,"kind":"modifierInvocation","modifierName":{"id":28036,"name":"onlyPoolAdmin","nodeType":"IdentifierPath","referencedDeclaration":27879,"src":"4018:13:103"},"nodeType":"ModifierInvocation","src":"4018:13:103"}],"name":"setIncentivesController","nameLocation":"3947:23:103","nodeType":"FunctionDefinition","parameters":{"id":28035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28034,"mutability":"mutable","name":"controller","nameLocation":"3997:10:103","nodeType":"VariableDeclaration","scope":28044,"src":"3971:36:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"},"typeName":{"id":28033,"nodeType":"UserDefinedTypeName","pathNode":{"id":28032,"name":"IAaveIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":3875,"src":"3971:25:103"},"referencedDeclaration":3875,"src":"3971:25:103","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"visibility":"internal"}],"src":"3970:38:103"},"returnParameters":{"id":28038,"nodeType":"ParameterList","parameters":[],"src":"4032:0:103"},"scope":28349,"src":"3938:139:103","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1391],"body":{"id":28070,"nodeType":"Block","src":"4200:119:103","statements":[{"assignments":[28056],"declarations":[{"constant":false,"id":28056,"mutability":"mutable","name":"castAmount","nameLocation":"4214:10:103","nodeType":"VariableDeclaration","scope":28070,"src":"4206:18:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":28055,"name":"uint128","nodeType":"ElementaryTypeName","src":"4206:7:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":28060,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28057,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28049,"src":"4227:6:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"4227:16:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":28059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4227:18:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"4206:39:103"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":28062,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"4261:10:103","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":28063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4261:12:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":28064,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28047,"src":"4275:9:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28065,"name":"castAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28056,"src":"4286:10:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":28061,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28290,"src":"4251:9:103","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,address,uint128)"}},"id":28066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4251:46:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28067,"nodeType":"ExpressionStatement","src":"4251:46:103"},{"expression":{"hexValue":"74727565","id":28068,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4310:4:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":28054,"id":28069,"nodeType":"Return","src":"4303:11:103"}]},"documentation":{"id":28045,"nodeType":"StructuredDocumentation","src":"4081:22:103","text":"@inheritdoc IERC20"},"functionSelector":"a9059cbb","id":28071,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"4115:8:103","nodeType":"FunctionDefinition","overrides":{"id":28051,"nodeType":"OverrideSpecifier","overrides":[],"src":"4176:8:103"},"parameters":{"id":28050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28047,"mutability":"mutable","name":"recipient","nameLocation":"4132:9:103","nodeType":"VariableDeclaration","scope":28071,"src":"4124:17:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28046,"name":"address","nodeType":"ElementaryTypeName","src":"4124:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28049,"mutability":"mutable","name":"amount","nameLocation":"4151:6:103","nodeType":"VariableDeclaration","scope":28071,"src":"4143:14:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28048,"name":"uint256","nodeType":"ElementaryTypeName","src":"4143:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4123:35:103"},"returnParameters":{"id":28054,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28053,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28071,"src":"4194:4:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28052,"name":"bool","nodeType":"ElementaryTypeName","src":"4194:4:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4193:6:103"},"scope":28349,"src":"4106:213:103","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[1401],"body":{"id":28088,"nodeType":"Block","src":"4460:45:103","statements":[{"expression":{"baseExpression":{"baseExpression":{"id":28082,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27912,"src":"4473:11:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":28084,"indexExpression":{"id":28083,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28074,"src":"4485:5:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4473:18:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":28086,"indexExpression":{"id":28085,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28076,"src":"4492:7:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4473:27:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":28081,"id":28087,"nodeType":"Return","src":"4466:34:103"}]},"documentation":{"id":28072,"nodeType":"StructuredDocumentation","src":"4323:22:103","text":"@inheritdoc IERC20"},"functionSelector":"dd62ed3e","id":28089,"implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"4357:9:103","nodeType":"FunctionDefinition","overrides":{"id":28078,"nodeType":"OverrideSpecifier","overrides":[],"src":"4433:8:103"},"parameters":{"id":28077,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28074,"mutability":"mutable","name":"owner","nameLocation":"4380:5:103","nodeType":"VariableDeclaration","scope":28089,"src":"4372:13:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28073,"name":"address","nodeType":"ElementaryTypeName","src":"4372:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28076,"mutability":"mutable","name":"spender","nameLocation":"4399:7:103","nodeType":"VariableDeclaration","scope":28089,"src":"4391:15:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28075,"name":"address","nodeType":"ElementaryTypeName","src":"4391:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4366:44:103"},"returnParameters":{"id":28081,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28080,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28089,"src":"4451:7:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28079,"name":"uint256","nodeType":"ElementaryTypeName","src":"4451:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4450:9:103"},"scope":28349,"src":"4348:157:103","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[1411],"body":{"id":28109,"nodeType":"Block","src":"4625:67:103","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":28101,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"4640:10:103","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":28102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4640:12:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":28103,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28092,"src":"4654:7:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28104,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28094,"src":"4663:6:103","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":28100,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28315,"src":"4631:8:103","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":28105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4631:39:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28106,"nodeType":"ExpressionStatement","src":"4631:39:103"},{"expression":{"hexValue":"74727565","id":28107,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4683:4:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":28099,"id":28108,"nodeType":"Return","src":"4676:11:103"}]},"documentation":{"id":28090,"nodeType":"StructuredDocumentation","src":"4509:22:103","text":"@inheritdoc IERC20"},"functionSelector":"095ea7b3","id":28110,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"4543:7:103","nodeType":"FunctionDefinition","overrides":{"id":28096,"nodeType":"OverrideSpecifier","overrides":[],"src":"4601:8:103"},"parameters":{"id":28095,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28092,"mutability":"mutable","name":"spender","nameLocation":"4559:7:103","nodeType":"VariableDeclaration","scope":28110,"src":"4551:15:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28091,"name":"address","nodeType":"ElementaryTypeName","src":"4551:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28094,"mutability":"mutable","name":"amount","nameLocation":"4576:6:103","nodeType":"VariableDeclaration","scope":28110,"src":"4568:14:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28093,"name":"uint256","nodeType":"ElementaryTypeName","src":"4568:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4550:33:103"},"returnParameters":{"id":28099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28098,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28110,"src":"4619:4:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28097,"name":"bool","nodeType":"ElementaryTypeName","src":"4619:4:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4618:6:103"},"scope":28349,"src":"4534:158:103","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[1423],"body":{"id":28151,"nodeType":"Block","src":"4851:197:103","statements":[{"assignments":[28124],"declarations":[{"constant":false,"id":28124,"mutability":"mutable","name":"castAmount","nameLocation":"4865:10:103","nodeType":"VariableDeclaration","scope":28151,"src":"4857:18:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":28123,"name":"uint128","nodeType":"ElementaryTypeName","src":"4857:7:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":28128,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28125,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28117,"src":"4878:6:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"4878:16:103","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":28127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4878:18:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"4857:39:103"},{"expression":{"arguments":[{"id":28130,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28113,"src":"4911:6:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":28131,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"4919:10:103","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":28132,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4919:12:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":28133,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27912,"src":"4933:11:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":28135,"indexExpression":{"id":28134,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28113,"src":"4945:6:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4933:19:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":28138,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":28136,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"4953:10:103","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":28137,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4953:12:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4933:33:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":28139,"name":"castAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28124,"src":"4969:10:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"4933:46:103","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":28129,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28315,"src":"4902:8:103","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":28141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4902:78:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28142,"nodeType":"ExpressionStatement","src":"4902:78:103"},{"expression":{"arguments":[{"id":28144,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28113,"src":"4996:6:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28145,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28115,"src":"5004:9:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28146,"name":"castAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28124,"src":"5015:10:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":28143,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28290,"src":"4986:9:103","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,address,uint128)"}},"id":28147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4986:40:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28148,"nodeType":"ExpressionStatement","src":"4986:40:103"},{"expression":{"hexValue":"74727565","id":28149,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5039:4:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":28122,"id":28150,"nodeType":"Return","src":"5032:11:103"}]},"documentation":{"id":28111,"nodeType":"StructuredDocumentation","src":"4696:22:103","text":"@inheritdoc IERC20"},"functionSelector":"23b872dd","id":28152,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"4730:12:103","nodeType":"FunctionDefinition","overrides":{"id":28119,"nodeType":"OverrideSpecifier","overrides":[],"src":"4827:8:103"},"parameters":{"id":28118,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28113,"mutability":"mutable","name":"sender","nameLocation":"4756:6:103","nodeType":"VariableDeclaration","scope":28152,"src":"4748:14:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28112,"name":"address","nodeType":"ElementaryTypeName","src":"4748:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28115,"mutability":"mutable","name":"recipient","nameLocation":"4776:9:103","nodeType":"VariableDeclaration","scope":28152,"src":"4768:17:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28114,"name":"address","nodeType":"ElementaryTypeName","src":"4768:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28117,"mutability":"mutable","name":"amount","nameLocation":"4799:6:103","nodeType":"VariableDeclaration","scope":28152,"src":"4791:14:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28116,"name":"uint256","nodeType":"ElementaryTypeName","src":"4791:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4742:67:103"},"returnParameters":{"id":28122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28121,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28152,"src":"4845:4:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28120,"name":"bool","nodeType":"ElementaryTypeName","src":"4845:4:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4844:6:103"},"scope":28349,"src":"4721:327:103","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"body":{"id":28178,"nodeType":"Block","src":"5392:108:103","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":28163,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"5407:10:103","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":28164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5407:12:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":28165,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28155,"src":"5421:7:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":28166,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27912,"src":"5430:11:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":28169,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":28167,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"5442:10:103","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":28168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5442:12:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5430:25:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":28171,"indexExpression":{"id":28170,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28155,"src":"5456:7:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5430:34:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":28172,"name":"addedValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28157,"src":"5467:10:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5430:47:103","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":28162,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28315,"src":"5398:8:103","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":28174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5398:80:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28175,"nodeType":"ExpressionStatement","src":"5398:80:103"},{"expression":{"hexValue":"74727565","id":28176,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5491:4:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":28161,"id":28177,"nodeType":"Return","src":"5484:11:103"}]},"documentation":{"id":28153,"nodeType":"StructuredDocumentation","src":"5052:241:103","text":" @notice Increases the allowance of spender to spend _msgSender() tokens\n @param spender The user allowed to spend on behalf of _msgSender()\n @param addedValue The amount being added to the allowance\n @return `true`"},"functionSelector":"39509351","id":28179,"implemented":true,"kind":"function","modifiers":[],"name":"increaseAllowance","nameLocation":"5305:17:103","nodeType":"FunctionDefinition","parameters":{"id":28158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28155,"mutability":"mutable","name":"spender","nameLocation":"5331:7:103","nodeType":"VariableDeclaration","scope":28179,"src":"5323:15:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28154,"name":"address","nodeType":"ElementaryTypeName","src":"5323:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28157,"mutability":"mutable","name":"addedValue","nameLocation":"5348:10:103","nodeType":"VariableDeclaration","scope":28179,"src":"5340:18:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28156,"name":"uint256","nodeType":"ElementaryTypeName","src":"5340:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5322:37:103"},"returnParameters":{"id":28161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28160,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28179,"src":"5386:4:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28159,"name":"bool","nodeType":"ElementaryTypeName","src":"5386:4:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5385:6:103"},"scope":28349,"src":"5296:204:103","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"body":{"id":28205,"nodeType":"Block","src":"5871:113:103","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":28190,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"5886:10:103","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":28191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5886:12:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":28192,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28182,"src":"5900:7:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":28193,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27912,"src":"5909:11:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":28196,"indexExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":28194,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"5921:10:103","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":28195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5921:12:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5909:25:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":28198,"indexExpression":{"id":28197,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28182,"src":"5935:7:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5909:34:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":28199,"name":"subtractedValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28184,"src":"5946:15:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5909:52:103","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":28189,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28315,"src":"5877:8:103","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":28201,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5877:85:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28202,"nodeType":"ExpressionStatement","src":"5877:85:103"},{"expression":{"hexValue":"74727565","id":28203,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5975:4:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":28188,"id":28204,"nodeType":"Return","src":"5968:11:103"}]},"documentation":{"id":28180,"nodeType":"StructuredDocumentation","src":"5504:251:103","text":" @notice Decreases the allowance of spender to spend _msgSender() tokens\n @param spender The user allowed to spend on behalf of _msgSender()\n @param subtractedValue The amount being subtracted to the allowance\n @return `true`"},"functionSelector":"a457c2d7","id":28206,"implemented":true,"kind":"function","modifiers":[],"name":"decreaseAllowance","nameLocation":"5767:17:103","nodeType":"FunctionDefinition","parameters":{"id":28185,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28182,"mutability":"mutable","name":"spender","nameLocation":"5798:7:103","nodeType":"VariableDeclaration","scope":28206,"src":"5790:15:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28181,"name":"address","nodeType":"ElementaryTypeName","src":"5790:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28184,"mutability":"mutable","name":"subtractedValue","nameLocation":"5819:15:103","nodeType":"VariableDeclaration","scope":28206,"src":"5811:23:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28183,"name":"uint256","nodeType":"ElementaryTypeName","src":"5811:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5784:54:103"},"returnParameters":{"id":28188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28187,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28206,"src":"5865:4:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28186,"name":"bool","nodeType":"ElementaryTypeName","src":"5865:4:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5864:6:103"},"scope":28349,"src":"5758:226:103","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"body":{"id":28289,"nodeType":"Block","src":"6302:685:103","statements":[{"assignments":[28217],"declarations":[{"constant":false,"id":28217,"mutability":"mutable","name":"oldSenderBalance","nameLocation":"6316:16:103","nodeType":"VariableDeclaration","scope":28289,"src":"6308:24:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":28216,"name":"uint128","nodeType":"ElementaryTypeName","src":"6308:7:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":28222,"initialValue":{"expression":{"baseExpression":{"id":28218,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"6335:10:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":28220,"indexExpression":{"id":28219,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28209,"src":"6346:6:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6335:18:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":28221,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":27898,"src":"6335:26:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"6308:53:103"},{"expression":{"id":28230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":28223,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"6367:10:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":28225,"indexExpression":{"id":28224,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28209,"src":"6378:6:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6367:18:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":28226,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":27898,"src":"6367:26:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":28229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28227,"name":"oldSenderBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28217,"src":"6396:16:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":28228,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28213,"src":"6415:6:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"6396:25:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"6367:54:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":28231,"nodeType":"ExpressionStatement","src":"6367:54:103"},{"assignments":[28233],"declarations":[{"constant":false,"id":28233,"mutability":"mutable","name":"oldRecipientBalance","nameLocation":"6435:19:103","nodeType":"VariableDeclaration","scope":28289,"src":"6427:27:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":28232,"name":"uint128","nodeType":"ElementaryTypeName","src":"6427:7:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":28238,"initialValue":{"expression":{"baseExpression":{"id":28234,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"6457:10:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":28236,"indexExpression":{"id":28235,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28211,"src":"6468:9:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6457:21:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":28237,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":27898,"src":"6457:29:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"6427:59:103"},{"expression":{"id":28246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":28239,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"6492:10:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":28241,"indexExpression":{"id":28240,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28211,"src":"6503:9:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6492:21:103","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":28242,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":27898,"src":"6492:29:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":28245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28243,"name":"oldRecipientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28233,"src":"6524:19:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":28244,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28213,"src":"6546:6:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"6524:28:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"6492:60:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":28247,"nodeType":"ExpressionStatement","src":"6492:60:103"},{"assignments":[28250],"declarations":[{"constant":false,"id":28250,"mutability":"mutable","name":"incentivesControllerLocal","nameLocation":"6585:25:103","nodeType":"VariableDeclaration","scope":28289,"src":"6559:51:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"},"typeName":{"id":28249,"nodeType":"UserDefinedTypeName","pathNode":{"id":28248,"name":"IAaveIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":3875,"src":"6559:25:103"},"referencedDeclaration":3875,"src":"6559:25:103","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"visibility":"internal"}],"id":28252,"initialValue":{"id":28251,"name":"_incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27923,"src":"6613:21:103","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"nodeType":"VariableDeclarationStatement","src":"6559:75:103"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":28261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":28255,"name":"incentivesControllerLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28250,"src":"6652:25:103","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}],"id":28254,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6644:7:103","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":28253,"name":"address","nodeType":"ElementaryTypeName","src":"6644:7:103","typeDescriptions":{}}},"id":28256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6644:34:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":28259,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6690:1:103","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":28258,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6682:7:103","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":28257,"name":"address","nodeType":"ElementaryTypeName","src":"6682:7:103","typeDescriptions":{}}},"id":28260,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6682:10:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6644:48:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":28288,"nodeType":"IfStatement","src":"6640:343:103","trueBody":{"id":28287,"nodeType":"Block","src":"6694:289:103","statements":[{"assignments":[28263],"declarations":[{"constant":false,"id":28263,"mutability":"mutable","name":"currentTotalSupply","nameLocation":"6710:18:103","nodeType":"VariableDeclaration","scope":28287,"src":"6702:26:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28262,"name":"uint256","nodeType":"ElementaryTypeName","src":"6702:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28265,"initialValue":{"id":28264,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27914,"src":"6731:12:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6702:41:103"},{"expression":{"arguments":[{"id":28269,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28209,"src":"6790:6:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28270,"name":"currentTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28263,"src":"6798:18:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28271,"name":"oldSenderBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28217,"src":"6818:16:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":28266,"name":"incentivesControllerLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28250,"src":"6751:25:103","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"id":28268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"handleAction","nodeType":"MemberAccess","referencedDeclaration":3874,"src":"6751:38:103","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256) external"}},"id":28272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6751:84:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28273,"nodeType":"ExpressionStatement","src":"6751:84:103"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":28276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28274,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28209,"src":"6847:6:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":28275,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28211,"src":"6857:9:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6847:19:103","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":28286,"nodeType":"IfStatement","src":"6843:134:103","trueBody":{"id":28285,"nodeType":"Block","src":"6868:109:103","statements":[{"expression":{"arguments":[{"id":28280,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28211,"src":"6917:9:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28281,"name":"currentTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28263,"src":"6928:18:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28282,"name":"oldRecipientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28233,"src":"6948:19:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":28277,"name":"incentivesControllerLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28250,"src":"6878:25:103","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"id":28279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"handleAction","nodeType":"MemberAccess","referencedDeclaration":3874,"src":"6878:38:103","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256) external"}},"id":28283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6878:90:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28284,"nodeType":"ExpressionStatement","src":"6878:90:103"}]}}]}}]},"documentation":{"id":28207,"nodeType":"StructuredDocumentation","src":"5988:224:103","text":" @notice Transfers tokens between two users and apply incentives if defined.\n @param sender The source address\n @param recipient The destination address\n @param amount The amount getting transferred"},"id":28290,"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"6224:9:103","nodeType":"FunctionDefinition","parameters":{"id":28214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28209,"mutability":"mutable","name":"sender","nameLocation":"6242:6:103","nodeType":"VariableDeclaration","scope":28290,"src":"6234:14:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28208,"name":"address","nodeType":"ElementaryTypeName","src":"6234:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28211,"mutability":"mutable","name":"recipient","nameLocation":"6258:9:103","nodeType":"VariableDeclaration","scope":28290,"src":"6250:17:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28210,"name":"address","nodeType":"ElementaryTypeName","src":"6250:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28213,"mutability":"mutable","name":"amount","nameLocation":"6277:6:103","nodeType":"VariableDeclaration","scope":28290,"src":"6269:14:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":28212,"name":"uint128","nodeType":"ElementaryTypeName","src":"6269:7:103","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"6233:51:103"},"returnParameters":{"id":28215,"nodeType":"ParameterList","parameters":[],"src":"6302:0:103"},"scope":28349,"src":"6215:772:103","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":28314,"nodeType":"Block","src":"7318:90:103","statements":[{"expression":{"id":28306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":28300,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27912,"src":"7324:11:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":28303,"indexExpression":{"id":28301,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28293,"src":"7336:5:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7324:18:103","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":28304,"indexExpression":{"id":28302,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28295,"src":"7343:7:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7324:27:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":28305,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28297,"src":"7354:6:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7324:36:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28307,"nodeType":"ExpressionStatement","src":"7324:36:103"},{"eventCall":{"arguments":[{"id":28309,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28293,"src":"7380:5:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28310,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28295,"src":"7387:7:103","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28311,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28297,"src":"7396:6:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":28308,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1441,"src":"7371:8:103","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":28312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7371:32:103","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28313,"nodeType":"EmitStatement","src":"7366:37:103"}]},"documentation":{"id":28291,"nodeType":"StructuredDocumentation","src":"6991:241:103","text":" @notice Approve `spender` to use `amount` of `owner`s balance\n @param owner The address owning the tokens\n @param spender The address approved for spending\n @param amount The amount of tokens to approve spending of"},"id":28315,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"7244:8:103","nodeType":"FunctionDefinition","parameters":{"id":28298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28293,"mutability":"mutable","name":"owner","nameLocation":"7261:5:103","nodeType":"VariableDeclaration","scope":28315,"src":"7253:13:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28292,"name":"address","nodeType":"ElementaryTypeName","src":"7253:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28295,"mutability":"mutable","name":"spender","nameLocation":"7276:7:103","nodeType":"VariableDeclaration","scope":28315,"src":"7268:15:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28294,"name":"address","nodeType":"ElementaryTypeName","src":"7268:7:103","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28297,"mutability":"mutable","name":"amount","nameLocation":"7293:6:103","nodeType":"VariableDeclaration","scope":28315,"src":"7285:14:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28296,"name":"uint256","nodeType":"ElementaryTypeName","src":"7285:7:103","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7252:48:103"},"returnParameters":{"id":28299,"nodeType":"ParameterList","parameters":[],"src":"7318:0:103"},"scope":28349,"src":"7235:173:103","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":28325,"nodeType":"Block","src":"7563:26:103","statements":[{"expression":{"id":28323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":28321,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27916,"src":"7569:5:103","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":28322,"name":"newName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28318,"src":"7577:7:103","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"7569:15:103","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":28324,"nodeType":"ExpressionStatement","src":"7569:15:103"}]},"documentation":{"id":28316,"nodeType":"StructuredDocumentation","src":"7412:98:103","text":" @notice Update the name of the token\n @param newName The new name for the token"},"id":28326,"implemented":true,"kind":"function","modifiers":[],"name":"_setName","nameLocation":"7522:8:103","nodeType":"FunctionDefinition","parameters":{"id":28319,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28318,"mutability":"mutable","name":"newName","nameLocation":"7545:7:103","nodeType":"VariableDeclaration","scope":28326,"src":"7531:21:103","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":28317,"name":"string","nodeType":"ElementaryTypeName","src":"7531:6:103","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7530:23:103"},"returnParameters":{"id":28320,"nodeType":"ParameterList","parameters":[],"src":"7563:0:103"},"scope":28349,"src":"7513:76:103","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":28336,"nodeType":"Block","src":"7755:30:103","statements":[{"expression":{"id":28334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":28332,"name":"_symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27918,"src":"7761:7:103","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":28333,"name":"newSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28329,"src":"7771:9:103","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"7761:19:103","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":28335,"nodeType":"ExpressionStatement","src":"7761:19:103"}]},"documentation":{"id":28327,"nodeType":"StructuredDocumentation","src":"7593:105:103","text":" @notice Update the symbol for the token\n @param newSymbol The new symbol for the token"},"id":28337,"implemented":true,"kind":"function","modifiers":[],"name":"_setSymbol","nameLocation":"7710:10:103","nodeType":"FunctionDefinition","parameters":{"id":28330,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28329,"mutability":"mutable","name":"newSymbol","nameLocation":"7735:9:103","nodeType":"VariableDeclaration","scope":28337,"src":"7721:23:103","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":28328,"name":"string","nodeType":"ElementaryTypeName","src":"7721:6:103","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7720:25:103"},"returnParameters":{"id":28331,"nodeType":"ParameterList","parameters":[],"src":"7755:0:103"},"scope":28349,"src":"7701:84:103","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":28347,"nodeType":"Block","src":"7973:34:103","statements":[{"expression":{"id":28345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":28343,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27920,"src":"7979:9:103","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":28344,"name":"newDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28340,"src":"7991:11:103","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"7979:23:103","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":28346,"nodeType":"ExpressionStatement","src":"7979:23:103"}]},"documentation":{"id":28338,"nodeType":"StructuredDocumentation","src":"7789:131:103","text":" @notice Update the number of decimals for the token\n @param newDecimals The new number of decimals for the token"},"id":28348,"implemented":true,"kind":"function","modifiers":[],"name":"_setDecimals","nameLocation":"7932:12:103","nodeType":"FunctionDefinition","parameters":{"id":28341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28340,"mutability":"mutable","name":"newDecimals","nameLocation":"7951:11:103","nodeType":"VariableDeclaration","scope":28348,"src":"7945:17:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":28339,"name":"uint8","nodeType":"ElementaryTypeName","src":"7945:5:103","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"7944:19:103"},"returnParameters":{"id":28342,"nodeType":"ParameterList","parameters":[],"src":"7973:0:103"},"scope":28349,"src":"7923:84:103","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":28350,"src":"968:7041:103","usedErrors":[]}],"src":"37:7973:103"},"id":103},"@aave/core-v3/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol","exportedSymbols":{"IAaveIncentivesController":[3875],"IPool":[4860],"IncentivizedERC20":[28349],"MintableIncentivizedERC20":[28499]},"id":28500,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":28351,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:104"},{"absolutePath":"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol","file":"../../../interfaces/IAaveIncentivesController.sol","id":28353,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28500,"sourceUnit":3876,"src":"63:92:104","symbolAliases":[{"foreign":{"id":28352,"name":"IAaveIncentivesController","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:25:104","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","file":"../../../interfaces/IPool.sol","id":28355,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28500,"sourceUnit":4861,"src":"156:52:104","symbolAliases":[{"foreign":{"id":28354,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"164:5:104","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol","file":"./IncentivizedERC20.sol","id":28357,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28500,"sourceUnit":28350,"src":"209:58:104","symbolAliases":[{"foreign":{"id":28356,"name":"IncentivizedERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"217:17:104","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":28359,"name":"IncentivizedERC20","nodeType":"IdentifierPath","referencedDeclaration":28349,"src":"444:17:104"},"id":28360,"nodeType":"InheritanceSpecifier","src":"444:17:104"}],"canonicalName":"MintableIncentivizedERC20","contractDependencies":[],"contractKind":"contract","documentation":{"id":28358,"nodeType":"StructuredDocumentation","src":"269:127:104","text":" @title MintableIncentivizedERC20\n @author Aave\n @notice Implements mint and burn functions for IncentivizedERC20"},"fullyImplemented":true,"id":28499,"linearizedBaseContracts":[28499,28349,1464,1442,748],"name":"MintableIncentivizedERC20","nameLocation":"415:25:104","nodeType":"ContractDefinition","nodes":[{"body":{"id":28379,"nodeType":"Block","src":"847:37:104","statements":[]},"documentation":{"id":28361,"nodeType":"StructuredDocumentation","src":"466:228:104","text":" @dev Constructor.\n @param pool The reference to the main Pool contract\n @param name The name of the token\n @param symbol The symbol of the token\n @param decimals The number of decimals of the token"},"id":28380,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":28373,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28364,"src":"817:4:104","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},{"id":28374,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28366,"src":"823:4:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":28375,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28368,"src":"829:6:104","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":28376,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28370,"src":"837:8:104","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":28377,"kind":"baseConstructorSpecifier","modifierName":{"id":28372,"name":"IncentivizedERC20","nodeType":"IdentifierPath","referencedDeclaration":28349,"src":"799:17:104"},"nodeType":"ModifierInvocation","src":"799:47:104"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":28371,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28364,"mutability":"mutable","name":"pool","nameLocation":"720:4:104","nodeType":"VariableDeclaration","scope":28380,"src":"714:10:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":28363,"nodeType":"UserDefinedTypeName","pathNode":{"id":28362,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"714:5:104"},"referencedDeclaration":4860,"src":"714:5:104","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"},{"constant":false,"id":28366,"mutability":"mutable","name":"name","nameLocation":"744:4:104","nodeType":"VariableDeclaration","scope":28380,"src":"730:18:104","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":28365,"name":"string","nodeType":"ElementaryTypeName","src":"730:6:104","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":28368,"mutability":"mutable","name":"symbol","nameLocation":"768:6:104","nodeType":"VariableDeclaration","scope":28380,"src":"754:20:104","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":28367,"name":"string","nodeType":"ElementaryTypeName","src":"754:6:104","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":28370,"mutability":"mutable","name":"decimals","nameLocation":"786:8:104","nodeType":"VariableDeclaration","scope":28380,"src":"780:14:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":28369,"name":"uint8","nodeType":"ElementaryTypeName","src":"780:5:104","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"708:90:104"},"returnParameters":{"id":28378,"nodeType":"ParameterList","parameters":[],"src":"847:0:104"},"scope":28499,"src":"697:187:104","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":28438,"nodeType":"Block","src":"1134:454:104","statements":[{"assignments":[28389],"declarations":[{"constant":false,"id":28389,"mutability":"mutable","name":"oldTotalSupply","nameLocation":"1148:14:104","nodeType":"VariableDeclaration","scope":28438,"src":"1140:22:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28388,"name":"uint256","nodeType":"ElementaryTypeName","src":"1140:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28391,"initialValue":{"id":28390,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27914,"src":"1165:12:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1140:37:104"},{"expression":{"id":28396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":28392,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27914,"src":"1183:12:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28393,"name":"oldTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28389,"src":"1198:14:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":28394,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28385,"src":"1215:6:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"1198:23:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1183:38:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28397,"nodeType":"ExpressionStatement","src":"1183:38:104"},{"assignments":[28399],"declarations":[{"constant":false,"id":28399,"mutability":"mutable","name":"oldAccountBalance","nameLocation":"1236:17:104","nodeType":"VariableDeclaration","scope":28438,"src":"1228:25:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":28398,"name":"uint128","nodeType":"ElementaryTypeName","src":"1228:7:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":28404,"initialValue":{"expression":{"baseExpression":{"id":28400,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"1256:10:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":28402,"indexExpression":{"id":28401,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28383,"src":"1267:7:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1256:19:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":28403,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":27898,"src":"1256:27:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"1228:55:104"},{"expression":{"id":28412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":28405,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"1289:10:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":28407,"indexExpression":{"id":28406,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28383,"src":"1300:7:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1289:19:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":28408,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":27898,"src":"1289:27:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":28411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28409,"name":"oldAccountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28399,"src":"1319:17:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":28410,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28385,"src":"1339:6:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"1319:26:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"1289:56:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":28413,"nodeType":"ExpressionStatement","src":"1289:56:104"},{"assignments":[28416],"declarations":[{"constant":false,"id":28416,"mutability":"mutable","name":"incentivesControllerLocal","nameLocation":"1378:25:104","nodeType":"VariableDeclaration","scope":28438,"src":"1352:51:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"},"typeName":{"id":28415,"nodeType":"UserDefinedTypeName","pathNode":{"id":28414,"name":"IAaveIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":3875,"src":"1352:25:104"},"referencedDeclaration":3875,"src":"1352:25:104","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"visibility":"internal"}],"id":28418,"initialValue":{"id":28417,"name":"_incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27923,"src":"1406:21:104","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"nodeType":"VariableDeclarationStatement","src":"1352:75:104"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":28427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":28421,"name":"incentivesControllerLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28416,"src":"1445:25:104","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}],"id":28420,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1437:7:104","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":28419,"name":"address","nodeType":"ElementaryTypeName","src":"1437:7:104","typeDescriptions":{}}},"id":28422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1437:34:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":28425,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1483:1:104","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":28424,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1475:7:104","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":28423,"name":"address","nodeType":"ElementaryTypeName","src":"1475:7:104","typeDescriptions":{}}},"id":28426,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1475:10:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1437:48:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":28437,"nodeType":"IfStatement","src":"1433:151:104","trueBody":{"id":28436,"nodeType":"Block","src":"1487:97:104","statements":[{"expression":{"arguments":[{"id":28431,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28383,"src":"1534:7:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28432,"name":"oldTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28389,"src":"1543:14:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28433,"name":"oldAccountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28399,"src":"1559:17:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":28428,"name":"incentivesControllerLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28416,"src":"1495:25:104","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"id":28430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"handleAction","nodeType":"MemberAccess","referencedDeclaration":3874,"src":"1495:38:104","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256) external"}},"id":28434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1495:82:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28435,"nodeType":"ExpressionStatement","src":"1495:82:104"}]}}]},"documentation":{"id":28381,"nodeType":"StructuredDocumentation","src":"888:178:104","text":" @notice Mints tokens to an account and apply incentives if defined\n @param account The address receiving tokens\n @param amount The amount of tokens to mint"},"id":28439,"implemented":true,"kind":"function","modifiers":[],"name":"_mint","nameLocation":"1078:5:104","nodeType":"FunctionDefinition","parameters":{"id":28386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28383,"mutability":"mutable","name":"account","nameLocation":"1092:7:104","nodeType":"VariableDeclaration","scope":28439,"src":"1084:15:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28382,"name":"address","nodeType":"ElementaryTypeName","src":"1084:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28385,"mutability":"mutable","name":"amount","nameLocation":"1109:6:104","nodeType":"VariableDeclaration","scope":28439,"src":"1101:14:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":28384,"name":"uint128","nodeType":"ElementaryTypeName","src":"1101:7:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1083:33:104"},"returnParameters":{"id":28387,"nodeType":"ParameterList","parameters":[],"src":"1134:0:104"},"scope":28499,"src":"1069:519:104","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":28497,"nodeType":"Block","src":"1846:455:104","statements":[{"assignments":[28448],"declarations":[{"constant":false,"id":28448,"mutability":"mutable","name":"oldTotalSupply","nameLocation":"1860:14:104","nodeType":"VariableDeclaration","scope":28497,"src":"1852:22:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28447,"name":"uint256","nodeType":"ElementaryTypeName","src":"1852:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28450,"initialValue":{"id":28449,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27914,"src":"1877:12:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1852:37:104"},{"expression":{"id":28455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":28451,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27914,"src":"1895:12:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28452,"name":"oldTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28448,"src":"1910:14:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":28453,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28444,"src":"1927:6:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"1910:23:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1895:38:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28456,"nodeType":"ExpressionStatement","src":"1895:38:104"},{"assignments":[28458],"declarations":[{"constant":false,"id":28458,"mutability":"mutable","name":"oldAccountBalance","nameLocation":"1948:17:104","nodeType":"VariableDeclaration","scope":28497,"src":"1940:25:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":28457,"name":"uint128","nodeType":"ElementaryTypeName","src":"1940:7:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":28463,"initialValue":{"expression":{"baseExpression":{"id":28459,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"1968:10:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":28461,"indexExpression":{"id":28460,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28442,"src":"1979:7:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1968:19:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":28462,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":27898,"src":"1968:27:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"1940:55:104"},{"expression":{"id":28471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":28464,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"2001:10:104","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":28466,"indexExpression":{"id":28465,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28442,"src":"2012:7:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2001:19:104","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":28467,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"balance","nodeType":"MemberAccess","referencedDeclaration":27898,"src":"2001:27:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":28470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28468,"name":"oldAccountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28458,"src":"2031:17:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":28469,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28444,"src":"2051:6:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"2031:26:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"2001:56:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":28472,"nodeType":"ExpressionStatement","src":"2001:56:104"},{"assignments":[28475],"declarations":[{"constant":false,"id":28475,"mutability":"mutable","name":"incentivesControllerLocal","nameLocation":"2090:25:104","nodeType":"VariableDeclaration","scope":28497,"src":"2064:51:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"},"typeName":{"id":28474,"nodeType":"UserDefinedTypeName","pathNode":{"id":28473,"name":"IAaveIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":3875,"src":"2064:25:104"},"referencedDeclaration":3875,"src":"2064:25:104","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"visibility":"internal"}],"id":28477,"initialValue":{"id":28476,"name":"_incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27923,"src":"2118:21:104","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"nodeType":"VariableDeclarationStatement","src":"2064:75:104"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":28486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":28480,"name":"incentivesControllerLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28475,"src":"2158:25:104","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}],"id":28479,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2150:7:104","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":28478,"name":"address","nodeType":"ElementaryTypeName","src":"2150:7:104","typeDescriptions":{}}},"id":28481,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2150:34:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":28484,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2196:1:104","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":28483,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2188:7:104","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":28482,"name":"address","nodeType":"ElementaryTypeName","src":"2188:7:104","typeDescriptions":{}}},"id":28485,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2188:10:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2150:48:104","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":28496,"nodeType":"IfStatement","src":"2146:151:104","trueBody":{"id":28495,"nodeType":"Block","src":"2200:97:104","statements":[{"expression":{"arguments":[{"id":28490,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28442,"src":"2247:7:104","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28491,"name":"oldTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28448,"src":"2256:14:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28492,"name":"oldAccountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28458,"src":"2272:17:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":28487,"name":"incentivesControllerLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28475,"src":"2208:25:104","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}},"id":28489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"handleAction","nodeType":"MemberAccess","referencedDeclaration":3874,"src":"2208:38:104","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256) external"}},"id":28493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2208:82:104","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28494,"nodeType":"ExpressionStatement","src":"2208:82:104"}]}}]},"documentation":{"id":28440,"nodeType":"StructuredDocumentation","src":"1592:186:104","text":" @notice Burns tokens from an account and apply incentives if defined\n @param account The account whose tokens are burnt\n @param amount The amount of tokens to burn"},"id":28498,"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"1790:5:104","nodeType":"FunctionDefinition","parameters":{"id":28445,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28442,"mutability":"mutable","name":"account","nameLocation":"1804:7:104","nodeType":"VariableDeclaration","scope":28498,"src":"1796:15:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28441,"name":"address","nodeType":"ElementaryTypeName","src":"1796:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28444,"mutability":"mutable","name":"amount","nameLocation":"1821:6:104","nodeType":"VariableDeclaration","scope":28498,"src":"1813:14:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":28443,"name":"uint128","nodeType":"ElementaryTypeName","src":"1813:7:104","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1795:33:104"},"returnParameters":{"id":28446,"nodeType":"ParameterList","parameters":[],"src":"1846:0:104"},"scope":28499,"src":"1781:520:104","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":28500,"src":"397:1906:104","usedErrors":[]}],"src":"37:2267:104"},"id":104},"@aave/core-v3/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol":{"ast":{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol","exportedSymbols":{"Errors":[12642],"IPool":[4860],"IScaledBalanceToken":[5975],"MintableIncentivizedERC20":[28499],"SafeCast":[1966],"ScaledBalanceTokenBase":[28966],"WadRayMath":[21219]},"id":28967,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":28501,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:105"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"../../../dependencies/openzeppelin/contracts/SafeCast.sol","id":28503,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28967,"sourceUnit":1967,"src":"63:83:105","symbolAliases":[{"foreign":{"id":28502,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:8:105","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol","file":"../../libraries/helpers/Errors.sol","id":28505,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28967,"sourceUnit":12643,"src":"147:58:105","symbolAliases":[{"foreign":{"id":28504,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"src":"155:6:105","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol","file":"../../libraries/math/WadRayMath.sol","id":28507,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28967,"sourceUnit":21220,"src":"206:63:105","symbolAliases":[{"foreign":{"id":28506,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"214:10:105","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","file":"../../../interfaces/IPool.sol","id":28509,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28967,"sourceUnit":4861,"src":"270:52:105","symbolAliases":[{"foreign":{"id":28508,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"278:5:105","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol","file":"../../../interfaces/IScaledBalanceToken.sol","id":28511,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28967,"sourceUnit":5976,"src":"323:80:105","symbolAliases":[{"foreign":{"id":28510,"name":"IScaledBalanceToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"331:19:105","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol","file":"./MintableIncentivizedERC20.sol","id":28513,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28967,"sourceUnit":28500,"src":"404:74:105","symbolAliases":[{"foreign":{"id":28512,"name":"MintableIncentivizedERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"412:25:105","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":28515,"name":"MintableIncentivizedERC20","nodeType":"IdentifierPath","referencedDeclaration":28499,"src":"643:25:105"},"id":28516,"nodeType":"InheritanceSpecifier","src":"643:25:105"},{"baseName":{"id":28517,"name":"IScaledBalanceToken","nodeType":"IdentifierPath","referencedDeclaration":5975,"src":"670:19:105"},"id":28518,"nodeType":"InheritanceSpecifier","src":"670:19:105"}],"canonicalName":"ScaledBalanceTokenBase","contractDependencies":[],"contractKind":"contract","documentation":{"id":28514,"nodeType":"StructuredDocumentation","src":"480:118:105","text":" @title ScaledBalanceTokenBase\n @author Aave\n @notice Basic ERC20 implementation of scaled balance token"},"fullyImplemented":true,"id":28966,"linearizedBaseContracts":[28966,5975,28499,28349,1464,1442,748],"name":"ScaledBalanceTokenBase","nameLocation":"617:22:105","nodeType":"ContractDefinition","nodes":[{"id":28521,"libraryName":{"id":28519,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":21219,"src":"700:10:105"},"nodeType":"UsingForDirective","src":"694:29:105","typeName":{"id":28520,"name":"uint256","nodeType":"ElementaryTypeName","src":"715:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":28524,"libraryName":{"id":28522,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"732:8:105"},"nodeType":"UsingForDirective","src":"726:27:105","typeName":{"id":28523,"name":"uint256","nodeType":"ElementaryTypeName","src":"745:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"body":{"id":28543,"nodeType":"Block","src":"1146:37:105","statements":[]},"documentation":{"id":28525,"nodeType":"StructuredDocumentation","src":"757:228:105","text":" @dev Constructor.\n @param pool The reference to the main Pool contract\n @param name The name of the token\n @param symbol The symbol of the token\n @param decimals The number of decimals of the token"},"id":28544,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":28537,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28528,"src":"1116:4:105","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},{"id":28538,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28530,"src":"1122:4:105","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":28539,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28532,"src":"1128:6:105","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":28540,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28534,"src":"1136:8:105","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":28541,"kind":"baseConstructorSpecifier","modifierName":{"id":28536,"name":"MintableIncentivizedERC20","nodeType":"IdentifierPath","referencedDeclaration":28499,"src":"1090:25:105"},"nodeType":"ModifierInvocation","src":"1090:55:105"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":28535,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28528,"mutability":"mutable","name":"pool","nameLocation":"1011:4:105","nodeType":"VariableDeclaration","scope":28544,"src":"1005:10:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":28527,"nodeType":"UserDefinedTypeName","pathNode":{"id":28526,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"1005:5:105"},"referencedDeclaration":4860,"src":"1005:5:105","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"},{"constant":false,"id":28530,"mutability":"mutable","name":"name","nameLocation":"1035:4:105","nodeType":"VariableDeclaration","scope":28544,"src":"1021:18:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":28529,"name":"string","nodeType":"ElementaryTypeName","src":"1021:6:105","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":28532,"mutability":"mutable","name":"symbol","nameLocation":"1059:6:105","nodeType":"VariableDeclaration","scope":28544,"src":"1045:20:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":28531,"name":"string","nodeType":"ElementaryTypeName","src":"1045:6:105","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":28534,"mutability":"mutable","name":"decimals","nameLocation":"1077:8:105","nodeType":"VariableDeclaration","scope":28544,"src":"1071:14:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":28533,"name":"uint8","nodeType":"ElementaryTypeName","src":"1071:5:105","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"999:90:105"},"returnParameters":{"id":28542,"nodeType":"ParameterList","parameters":[],"src":"1146:0:105"},"scope":28966,"src":"988:195:105","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[5950],"body":{"id":28558,"nodeType":"Block","src":"1305:39:105","statements":[{"expression":{"arguments":[{"id":28555,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28547,"src":"1334:4:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":28553,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"1318:5:105","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ScaledBalanceTokenBase_$28966_$","typeString":"type(contract super ScaledBalanceTokenBase)"}},"id":28554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":28020,"src":"1318:15:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":28556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1318:21:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":28552,"id":28557,"nodeType":"Return","src":"1311:28:105"}]},"documentation":{"id":28545,"nodeType":"StructuredDocumentation","src":"1187:35:105","text":"@inheritdoc IScaledBalanceToken"},"functionSelector":"1da24f3e","id":28559,"implemented":true,"kind":"function","modifiers":[],"name":"scaledBalanceOf","nameLocation":"1234:15:105","nodeType":"FunctionDefinition","overrides":{"id":28549,"nodeType":"OverrideSpecifier","overrides":[],"src":"1278:8:105"},"parameters":{"id":28548,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28547,"mutability":"mutable","name":"user","nameLocation":"1258:4:105","nodeType":"VariableDeclaration","scope":28559,"src":"1250:12:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28546,"name":"address","nodeType":"ElementaryTypeName","src":"1250:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1249:14:105"},"returnParameters":{"id":28552,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28551,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28559,"src":"1296:7:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28550,"name":"uint256","nodeType":"ElementaryTypeName","src":"1296:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1295:9:105"},"scope":28966,"src":"1225:119:105","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5960],"body":{"id":28579,"nodeType":"Block","src":"1497:62:105","statements":[{"expression":{"components":[{"arguments":[{"id":28572,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28562,"src":"1527:4:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":28570,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"1511:5:105","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ScaledBalanceTokenBase_$28966_$","typeString":"type(contract super ScaledBalanceTokenBase)"}},"id":28571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":28020,"src":"1511:15:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":28573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1511:21:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28574,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"1534:5:105","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ScaledBalanceTokenBase_$28966_$","typeString":"type(contract super ScaledBalanceTokenBase)"}},"id":28575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":28005,"src":"1534:17:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":28576,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1534:19:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":28577,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1510:44:105","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":28569,"id":28578,"nodeType":"Return","src":"1503:51:105"}]},"documentation":{"id":28560,"nodeType":"StructuredDocumentation","src":"1348:35:105","text":"@inheritdoc IScaledBalanceToken"},"functionSelector":"0afbcdc9","id":28580,"implemented":true,"kind":"function","modifiers":[],"name":"getScaledUserBalanceAndSupply","nameLocation":"1395:29:105","nodeType":"FunctionDefinition","overrides":{"id":28564,"nodeType":"OverrideSpecifier","overrides":[],"src":"1461:8:105"},"parameters":{"id":28563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28562,"mutability":"mutable","name":"user","nameLocation":"1438:4:105","nodeType":"VariableDeclaration","scope":28580,"src":"1430:12:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28561,"name":"address","nodeType":"ElementaryTypeName","src":"1430:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1424:22:105"},"returnParameters":{"id":28569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28566,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28580,"src":"1479:7:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28565,"name":"uint256","nodeType":"ElementaryTypeName","src":"1479:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28568,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28580,"src":"1488:7:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28567,"name":"uint256","nodeType":"ElementaryTypeName","src":"1488:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1478:18:105"},"scope":28966,"src":"1386:173:105","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[5966],"body":{"id":28591,"nodeType":"Block","src":"1677:37:105","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28587,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"1690:5:105","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ScaledBalanceTokenBase_$28966_$","typeString":"type(contract super ScaledBalanceTokenBase)"}},"id":28588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":28005,"src":"1690:17:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":28589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1690:19:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":28586,"id":28590,"nodeType":"Return","src":"1683:26:105"}]},"documentation":{"id":28581,"nodeType":"StructuredDocumentation","src":"1563:35:105","text":"@inheritdoc IScaledBalanceToken"},"functionSelector":"b1bf962d","id":28592,"implemented":true,"kind":"function","modifiers":[],"name":"scaledTotalSupply","nameLocation":"1610:17:105","nodeType":"FunctionDefinition","overrides":{"id":28583,"nodeType":"OverrideSpecifier","overrides":[],"src":"1650:8:105"},"parameters":{"id":28582,"nodeType":"ParameterList","parameters":[],"src":"1627:2:105"},"returnParameters":{"id":28586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28585,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28592,"src":"1668:7:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28584,"name":"uint256","nodeType":"ElementaryTypeName","src":"1668:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1667:9:105"},"scope":28966,"src":"1601:113:105","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[5974],"body":{"id":28606,"nodeType":"Block","src":"1845:49:105","statements":[{"expression":{"expression":{"baseExpression":{"id":28601,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"1858:10:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":28603,"indexExpression":{"id":28602,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28595,"src":"1869:4:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1858:16:105","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":28604,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":27900,"src":"1858:31:105","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":28600,"id":28605,"nodeType":"Return","src":"1851:38:105"}]},"documentation":{"id":28593,"nodeType":"StructuredDocumentation","src":"1718:35:105","text":"@inheritdoc IScaledBalanceToken"},"functionSelector":"e0753986","id":28607,"implemented":true,"kind":"function","modifiers":[],"name":"getPreviousIndex","nameLocation":"1765:16:105","nodeType":"FunctionDefinition","overrides":{"id":28597,"nodeType":"OverrideSpecifier","overrides":[],"src":"1818:8:105"},"parameters":{"id":28596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28595,"mutability":"mutable","name":"user","nameLocation":"1790:4:105","nodeType":"VariableDeclaration","scope":28607,"src":"1782:12:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28594,"name":"address","nodeType":"ElementaryTypeName","src":"1782:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1781:14:105"},"returnParameters":{"id":28600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28599,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28607,"src":"1836:7:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28598,"name":"uint256","nodeType":"ElementaryTypeName","src":"1836:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1835:9:105"},"scope":28966,"src":"1756:138:105","stateMutability":"view","virtual":true,"visibility":"external"},{"body":{"id":28702,"nodeType":"Block","src":"2427:631:105","statements":[{"assignments":[28622],"declarations":[{"constant":false,"id":28622,"mutability":"mutable","name":"amountScaled","nameLocation":"2441:12:105","nodeType":"VariableDeclaration","scope":28702,"src":"2433:20:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28621,"name":"uint256","nodeType":"ElementaryTypeName","src":"2433:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28627,"initialValue":{"arguments":[{"id":28625,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28616,"src":"2470:5:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":28623,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28614,"src":"2456:6:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":21198,"src":"2456:13:105","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":28626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2456:20:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2433:43:105"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28629,"name":"amountScaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28622,"src":"2490:12:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":28630,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2506:1:105","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2490:17:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28632,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"2509:6:105","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":28633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_MINT_AMOUNT","nodeType":"MemberAccess","referencedDeclaration":12443,"src":"2509:26:105","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":28628,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2482:7:105","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":28634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2482:54:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28635,"nodeType":"ExpressionStatement","src":"2482:54:105"},{"assignments":[28637],"declarations":[{"constant":false,"id":28637,"mutability":"mutable","name":"scaledBalance","nameLocation":"2551:13:105","nodeType":"VariableDeclaration","scope":28702,"src":"2543:21:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28636,"name":"uint256","nodeType":"ElementaryTypeName","src":"2543:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28642,"initialValue":{"arguments":[{"id":28640,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28612,"src":"2583:10:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":28638,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"2567:5:105","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ScaledBalanceTokenBase_$28966_$","typeString":"type(contract super ScaledBalanceTokenBase)"}},"id":28639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":28020,"src":"2567:15:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":28641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2567:27:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2543:51:105"},{"assignments":[28644],"declarations":[{"constant":false,"id":28644,"mutability":"mutable","name":"balanceIncrease","nameLocation":"2608:15:105","nodeType":"VariableDeclaration","scope":28702,"src":"2600:23:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28643,"name":"uint256","nodeType":"ElementaryTypeName","src":"2600:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28657,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":28647,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28616,"src":"2647:5:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":28645,"name":"scaledBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28637,"src":"2626:13:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"2626:20:105","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":28648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2626:27:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"expression":{"baseExpression":{"id":28651,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"2683:10:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":28653,"indexExpression":{"id":28652,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28612,"src":"2694:10:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2683:22:105","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":28654,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":27900,"src":"2683:37:105","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":28649,"name":"scaledBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28637,"src":"2662:13:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"2662:20:105","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":28655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2662:59:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2626:95:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2600:121:105"},{"expression":{"id":28665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":28658,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"2728:10:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":28660,"indexExpression":{"id":28659,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28612,"src":"2739:10:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2728:22:105","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":28661,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":27900,"src":"2728:37:105","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28662,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28616,"src":"2768:5:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"2768:15:105","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":28664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2768:17:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"2728:57:105","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":28666,"nodeType":"ExpressionStatement","src":"2728:57:105"},{"expression":{"arguments":[{"id":28668,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28612,"src":"2798:10:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28669,"name":"amountScaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28622,"src":"2810:12:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"2810:22:105","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":28671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2810:24:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":28667,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28439,"src":"2792:5:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":28672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2792:43:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28673,"nodeType":"ExpressionStatement","src":"2792:43:105"},{"assignments":[28675],"declarations":[{"constant":false,"id":28675,"mutability":"mutable","name":"amountToMint","nameLocation":"2850:12:105","nodeType":"VariableDeclaration","scope":28702,"src":"2842:20:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28674,"name":"uint256","nodeType":"ElementaryTypeName","src":"2842:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28679,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28676,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28614,"src":"2865:6:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":28677,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28644,"src":"2874:15:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2865:24:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2842:47:105"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":28683,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2917:1:105","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":28682,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2909:7:105","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":28681,"name":"address","nodeType":"ElementaryTypeName","src":"2909:7:105","typeDescriptions":{}}},"id":28684,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2909:10:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28685,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28612,"src":"2921:10:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28686,"name":"amountToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28675,"src":"2933:12:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":28680,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"2900:8:105","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":28687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2900:46:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28688,"nodeType":"EmitStatement","src":"2895:51:105"},{"eventCall":{"arguments":[{"id":28690,"name":"caller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28610,"src":"2962:6:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28691,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28612,"src":"2970:10:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28692,"name":"amountToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28675,"src":"2982:12:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28693,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28644,"src":"2996:15:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28694,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28616,"src":"3013:5:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":28689,"name":"Mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5929,"src":"2957:4:105","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256,uint256)"}},"id":28695,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2957:62:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28696,"nodeType":"EmitStatement","src":"2952:67:105"},{"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28697,"name":"scaledBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28637,"src":"3034:13:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":28698,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3051:1:105","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3034:18:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":28700,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3033:20:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":28620,"id":28701,"nodeType":"Return","src":"3026:27:105"}]},"documentation":{"id":28608,"nodeType":"StructuredDocumentation","src":"1898:394:105","text":" @notice Implements the basic logic to mint a scaled balance token.\n @param caller The address performing the mint\n @param onBehalfOf The address of the user that will receive the scaled tokens\n @param amount The amount of tokens getting minted\n @param index The next liquidity index of the reserve\n @return `true` if the the previous balance of the user was 0"},"id":28703,"implemented":true,"kind":"function","modifiers":[],"name":"_mintScaled","nameLocation":"2304:11:105","nodeType":"FunctionDefinition","parameters":{"id":28617,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28610,"mutability":"mutable","name":"caller","nameLocation":"2329:6:105","nodeType":"VariableDeclaration","scope":28703,"src":"2321:14:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28609,"name":"address","nodeType":"ElementaryTypeName","src":"2321:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28612,"mutability":"mutable","name":"onBehalfOf","nameLocation":"2349:10:105","nodeType":"VariableDeclaration","scope":28703,"src":"2341:18:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28611,"name":"address","nodeType":"ElementaryTypeName","src":"2341:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28614,"mutability":"mutable","name":"amount","nameLocation":"2373:6:105","nodeType":"VariableDeclaration","scope":28703,"src":"2365:14:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28613,"name":"uint256","nodeType":"ElementaryTypeName","src":"2365:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28616,"mutability":"mutable","name":"index","nameLocation":"2393:5:105","nodeType":"VariableDeclaration","scope":28703,"src":"2385:13:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28615,"name":"uint256","nodeType":"ElementaryTypeName","src":"2385:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2315:87:105"},"returnParameters":{"id":28620,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28619,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28703,"src":"2421:4:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28618,"name":"bool","nodeType":"ElementaryTypeName","src":"2421:4:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2420:6:105"},"scope":28966,"src":"2295:763:105","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":28820,"nodeType":"Block","src":"3603:797:105","statements":[{"assignments":[28716],"declarations":[{"constant":false,"id":28716,"mutability":"mutable","name":"amountScaled","nameLocation":"3617:12:105","nodeType":"VariableDeclaration","scope":28820,"src":"3609:20:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28715,"name":"uint256","nodeType":"ElementaryTypeName","src":"3609:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28721,"initialValue":{"arguments":[{"id":28719,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28712,"src":"3646:5:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":28717,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28710,"src":"3632:6:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":21198,"src":"3632:13:105","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":28720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3632:20:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3609:43:105"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28723,"name":"amountScaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28716,"src":"3666:12:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":28724,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3682:1:105","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3666:17:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28726,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12642,"src":"3685:6:105","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$12642_$","typeString":"type(library Errors)"}},"id":28727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"INVALID_BURN_AMOUNT","nodeType":"MemberAccess","referencedDeclaration":12446,"src":"3685:26:105","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":28722,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3658:7:105","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":28728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3658:54:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28729,"nodeType":"ExpressionStatement","src":"3658:54:105"},{"assignments":[28731],"declarations":[{"constant":false,"id":28731,"mutability":"mutable","name":"scaledBalance","nameLocation":"3727:13:105","nodeType":"VariableDeclaration","scope":28820,"src":"3719:21:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28730,"name":"uint256","nodeType":"ElementaryTypeName","src":"3719:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28736,"initialValue":{"arguments":[{"id":28734,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28706,"src":"3759:4:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":28732,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"3743:5:105","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ScaledBalanceTokenBase_$28966_$","typeString":"type(contract super ScaledBalanceTokenBase)"}},"id":28733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":28020,"src":"3743:15:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":28735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3743:21:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3719:45:105"},{"assignments":[28738],"declarations":[{"constant":false,"id":28738,"mutability":"mutable","name":"balanceIncrease","nameLocation":"3778:15:105","nodeType":"VariableDeclaration","scope":28820,"src":"3770:23:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28737,"name":"uint256","nodeType":"ElementaryTypeName","src":"3770:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28751,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":28741,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28712,"src":"3817:5:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":28739,"name":"scaledBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28731,"src":"3796:13:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"3796:20:105","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":28742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3796:27:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"expression":{"baseExpression":{"id":28745,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"3853:10:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":28747,"indexExpression":{"id":28746,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28706,"src":"3864:4:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3853:16:105","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":28748,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":27900,"src":"3853:31:105","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":28743,"name":"scaledBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28731,"src":"3832:13:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"3832:20:105","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":28749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3832:53:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3796:89:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3770:115:105"},{"expression":{"id":28759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":28752,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"3892:10:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":28754,"indexExpression":{"id":28753,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28706,"src":"3903:4:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3892:16:105","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":28755,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":27900,"src":"3892:31:105","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28756,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28712,"src":"3926:5:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"3926:15:105","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":28758,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3926:17:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"3892:51:105","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":28760,"nodeType":"ExpressionStatement","src":"3892:51:105"},{"expression":{"arguments":[{"id":28762,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28706,"src":"3956:4:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28763,"name":"amountScaled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28716,"src":"3962:12:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"3962:22:105","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":28765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3962:24:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":28761,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28498,"src":"3950:5:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,uint128)"}},"id":28766,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3950:37:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28767,"nodeType":"ExpressionStatement","src":"3950:37:105"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28768,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28738,"src":"3998:15:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":28769,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28710,"src":"4016:6:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3998:24:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":28818,"nodeType":"Block","src":"4212:184:105","statements":[{"assignments":[28796],"declarations":[{"constant":false,"id":28796,"mutability":"mutable","name":"amountToBurn","nameLocation":"4228:12:105","nodeType":"VariableDeclaration","scope":28818,"src":"4220:20:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28795,"name":"uint256","nodeType":"ElementaryTypeName","src":"4220:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28800,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28797,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28710,"src":"4243:6:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":28798,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28738,"src":"4252:15:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4243:24:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4220:47:105"},{"eventCall":{"arguments":[{"id":28802,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28706,"src":"4289:4:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":28805,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4303:1:105","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":28804,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4295:7:105","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":28803,"name":"address","nodeType":"ElementaryTypeName","src":"4295:7:105","typeDescriptions":{}}},"id":28806,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4295:10:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28807,"name":"amountToBurn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28796,"src":"4307:12:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":28801,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"4280:8:105","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":28808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4280:40:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28809,"nodeType":"EmitStatement","src":"4275:45:105"},{"eventCall":{"arguments":[{"id":28811,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28706,"src":"4338:4:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28812,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28708,"src":"4344:6:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28813,"name":"amountToBurn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28796,"src":"4352:12:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28814,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28738,"src":"4366:15:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28815,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28712,"src":"4383:5:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":28810,"name":"Burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5942,"src":"4333:4:105","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256,uint256)"}},"id":28816,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4333:56:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28817,"nodeType":"EmitStatement","src":"4328:61:105"}]},"id":28819,"nodeType":"IfStatement","src":"3994:402:105","trueBody":{"id":28794,"nodeType":"Block","src":"4024:182:105","statements":[{"assignments":[28772],"declarations":[{"constant":false,"id":28772,"mutability":"mutable","name":"amountToMint","nameLocation":"4040:12:105","nodeType":"VariableDeclaration","scope":28794,"src":"4032:20:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28771,"name":"uint256","nodeType":"ElementaryTypeName","src":"4032:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28776,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28773,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28738,"src":"4055:15:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":28774,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28710,"src":"4073:6:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4055:24:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4032:47:105"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":28780,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4109:1:105","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":28779,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4101:7:105","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":28778,"name":"address","nodeType":"ElementaryTypeName","src":"4101:7:105","typeDescriptions":{}}},"id":28781,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4101:10:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28782,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28706,"src":"4113:4:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28783,"name":"amountToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28772,"src":"4119:12:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":28777,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"4092:8:105","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":28784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4092:40:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28785,"nodeType":"EmitStatement","src":"4087:45:105"},{"eventCall":{"arguments":[{"id":28787,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28706,"src":"4150:4:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28788,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28706,"src":"4156:4:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28789,"name":"amountToMint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28772,"src":"4162:12:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28790,"name":"balanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28738,"src":"4176:15:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28791,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28712,"src":"4193:5:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":28786,"name":"Mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5929,"src":"4145:4:105","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256,uint256)"}},"id":28792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4145:54:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28793,"nodeType":"EmitStatement","src":"4140:59:105"}]}}]},"documentation":{"id":28704,"nodeType":"StructuredDocumentation","src":"3062:447:105","text":" @notice Implements the basic logic to burn a scaled balance token.\n @dev In some instances, a burn transaction will emit a mint event\n if the amount to burn is less than the interest that the user accrued\n @param user The user which debt is burnt\n @param target The address that will receive the underlying, if any\n @param amount The amount getting burned\n @param index The variable debt index of the reserve"},"id":28821,"implemented":true,"kind":"function","modifiers":[],"name":"_burnScaled","nameLocation":"3521:11:105","nodeType":"FunctionDefinition","parameters":{"id":28713,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28706,"mutability":"mutable","name":"user","nameLocation":"3541:4:105","nodeType":"VariableDeclaration","scope":28821,"src":"3533:12:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28705,"name":"address","nodeType":"ElementaryTypeName","src":"3533:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28708,"mutability":"mutable","name":"target","nameLocation":"3555:6:105","nodeType":"VariableDeclaration","scope":28821,"src":"3547:14:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28707,"name":"address","nodeType":"ElementaryTypeName","src":"3547:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28710,"mutability":"mutable","name":"amount","nameLocation":"3571:6:105","nodeType":"VariableDeclaration","scope":28821,"src":"3563:14:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28709,"name":"uint256","nodeType":"ElementaryTypeName","src":"3563:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28712,"mutability":"mutable","name":"index","nameLocation":"3587:5:105","nodeType":"VariableDeclaration","scope":28821,"src":"3579:13:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28711,"name":"uint256","nodeType":"ElementaryTypeName","src":"3579:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3532:61:105"},"returnParameters":{"id":28714,"nodeType":"ParameterList","parameters":[],"src":"3603:0:105"},"scope":28966,"src":"3512:888:105","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":28964,"nodeType":"Block","src":"4861:1109:105","statements":[{"assignments":[28834],"declarations":[{"constant":false,"id":28834,"mutability":"mutable","name":"senderScaledBalance","nameLocation":"4875:19:105","nodeType":"VariableDeclaration","scope":28964,"src":"4867:27:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28833,"name":"uint256","nodeType":"ElementaryTypeName","src":"4867:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28839,"initialValue":{"arguments":[{"id":28837,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28824,"src":"4913:6:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":28835,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"4897:5:105","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ScaledBalanceTokenBase_$28966_$","typeString":"type(contract super ScaledBalanceTokenBase)"}},"id":28836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":28020,"src":"4897:15:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":28838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4897:23:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4867:53:105"},{"assignments":[28841],"declarations":[{"constant":false,"id":28841,"mutability":"mutable","name":"senderBalanceIncrease","nameLocation":"4934:21:105","nodeType":"VariableDeclaration","scope":28964,"src":"4926:29:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28840,"name":"uint256","nodeType":"ElementaryTypeName","src":"4926:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28854,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":28844,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28830,"src":"4985:5:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":28842,"name":"senderScaledBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28834,"src":"4958:19:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"4958:26:105","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":28845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4958:33:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"expression":{"baseExpression":{"id":28848,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"5027:10:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":28850,"indexExpression":{"id":28849,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28824,"src":"5038:6:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5027:18:105","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":28851,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":27900,"src":"5027:33:105","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":28846,"name":"senderScaledBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28834,"src":"5000:19:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"5000:26:105","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":28852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5000:61:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4958:103:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4926:135:105"},{"assignments":[28856],"declarations":[{"constant":false,"id":28856,"mutability":"mutable","name":"recipientScaledBalance","nameLocation":"5076:22:105","nodeType":"VariableDeclaration","scope":28964,"src":"5068:30:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28855,"name":"uint256","nodeType":"ElementaryTypeName","src":"5068:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28861,"initialValue":{"arguments":[{"id":28859,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28826,"src":"5117:9:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":28857,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"5101:5:105","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ScaledBalanceTokenBase_$28966_$","typeString":"type(contract super ScaledBalanceTokenBase)"}},"id":28858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":28020,"src":"5101:15:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":28860,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5101:26:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5068:59:105"},{"assignments":[28863],"declarations":[{"constant":false,"id":28863,"mutability":"mutable","name":"recipientBalanceIncrease","nameLocation":"5141:24:105","nodeType":"VariableDeclaration","scope":28964,"src":"5133:32:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28862,"name":"uint256","nodeType":"ElementaryTypeName","src":"5133:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28876,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":28866,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28830,"src":"5198:5:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":28864,"name":"recipientScaledBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28856,"src":"5168:22:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"5168:29:105","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":28867,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5168:36:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"expression":{"baseExpression":{"id":28870,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"5243:10:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":28872,"indexExpression":{"id":28871,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28826,"src":"5254:9:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5243:21:105","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":28873,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":27900,"src":"5243:36:105","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":28868,"name":"recipientScaledBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28856,"src":"5213:22:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayMul","nodeType":"MemberAccess","referencedDeclaration":21186,"src":"5213:29:105","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":28874,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5213:67:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5168:112:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5133:147:105"},{"expression":{"id":28884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":28877,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"5287:10:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":28879,"indexExpression":{"id":28878,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28824,"src":"5298:6:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5287:18:105","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":28880,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":27900,"src":"5287:33:105","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28881,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28830,"src":"5323:5:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"5323:15:105","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":28883,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5323:17:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"5287:53:105","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":28885,"nodeType":"ExpressionStatement","src":"5287:53:105"},{"expression":{"id":28893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":28886,"name":"_userState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27906,"src":"5346:10:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserState_$27901_storage_$","typeString":"mapping(address => struct IncentivizedERC20.UserState storage ref)"}},"id":28888,"indexExpression":{"id":28887,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28826,"src":"5357:9:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5346:21:105","typeDescriptions":{"typeIdentifier":"t_struct$_UserState_$27901_storage","typeString":"struct IncentivizedERC20.UserState storage ref"}},"id":28889,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"additionalData","nodeType":"MemberAccess","referencedDeclaration":27900,"src":"5346:36:105","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28890,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28830,"src":"5385:5:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"5385:15:105","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":28892,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5385:17:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"5346:56:105","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":28894,"nodeType":"ExpressionStatement","src":"5346:56:105"},{"expression":{"arguments":[{"id":28898,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28824,"src":"5425:6:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28899,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28826,"src":"5433:9:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":28902,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28830,"src":"5458:5:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":28900,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28828,"src":"5444:6:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rayDiv","nodeType":"MemberAccess","referencedDeclaration":21198,"src":"5444:13:105","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":28903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5444:20:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":28904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"5444:30:105","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":28905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5444:32:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":28895,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"5409:5:105","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_ScaledBalanceTokenBase_$28966_$","typeString":"type(contract super ScaledBalanceTokenBase)"}},"id":28897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_transfer","nodeType":"MemberAccess","referencedDeclaration":28290,"src":"5409:15:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint128_$returns$__$","typeString":"function (address,address,uint128)"}},"id":28906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5409:68:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28907,"nodeType":"ExpressionStatement","src":"5409:68:105"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28908,"name":"senderBalanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28841,"src":"5488:21:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":28909,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5512:1:105","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5488:25:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":28930,"nodeType":"IfStatement","src":"5484:194:105","trueBody":{"id":28929,"nodeType":"Block","src":"5515:163:105","statements":[{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":28914,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5545:1:105","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":28913,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5537:7:105","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":28912,"name":"address","nodeType":"ElementaryTypeName","src":"5537:7:105","typeDescriptions":{}}},"id":28915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5537:10:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28916,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28824,"src":"5549:6:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28917,"name":"senderBalanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28841,"src":"5557:21:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":28911,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"5528:8:105","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":28918,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5528:51:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28919,"nodeType":"EmitStatement","src":"5523:56:105"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":28921,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"5597:10:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":28922,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5597:12:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":28923,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28824,"src":"5611:6:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28924,"name":"senderBalanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28841,"src":"5619:21:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28925,"name":"senderBalanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28841,"src":"5642:21:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28926,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28830,"src":"5665:5:105","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"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":28920,"name":"Mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5929,"src":"5592:4:105","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256,uint256)"}},"id":28927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5592:79:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28928,"nodeType":"EmitStatement","src":"5587:84:105"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":28937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":28933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28931,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28824,"src":"5688:6:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":28932,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28826,"src":"5698:9:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5688:19:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28934,"name":"recipientBalanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28863,"src":"5711:24:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":28935,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5738:1:105","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5711:28:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5688:51:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":28957,"nodeType":"IfStatement","src":"5684:235:105","trueBody":{"id":28956,"nodeType":"Block","src":"5741:178:105","statements":[{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":28941,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5771:1:105","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":28940,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5763:7:105","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":28939,"name":"address","nodeType":"ElementaryTypeName","src":"5763:7:105","typeDescriptions":{}}},"id":28942,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5763:10:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28943,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28826,"src":"5775:9:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28944,"name":"recipientBalanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28863,"src":"5786:24:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":28938,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"5754:8:105","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":28945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5754:57:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28946,"nodeType":"EmitStatement","src":"5749:62:105"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":28948,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"5829:10:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":28949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5829:12:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":28950,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28826,"src":"5843:9:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28951,"name":"recipientBalanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28863,"src":"5854:24:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28952,"name":"recipientBalanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28863,"src":"5880:24:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28953,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28830,"src":"5906:5:105","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"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":28947,"name":"Mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5929,"src":"5824:4:105","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256,uint256)"}},"id":28954,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5824:88:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28955,"nodeType":"EmitStatement","src":"5819:93:105"}]}},{"eventCall":{"arguments":[{"id":28959,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28824,"src":"5939:6:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28960,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28826,"src":"5947:9:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28961,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28828,"src":"5958:6:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":28958,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1432,"src":"5930:8:105","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":28962,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5930:35:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28963,"nodeType":"EmitStatement","src":"5925:40:105"}]},"documentation":{"id":28822,"nodeType":"StructuredDocumentation","src":"4404:360:105","text":" @notice Implements the basic logic to transfer scaled balance tokens between two users\n @dev It emits a mint event with the interest accrued per user\n @param sender The source address\n @param recipient The destination address\n @param amount The amount getting transferred\n @param index The next liquidity index of the reserve"},"id":28965,"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"4776:9:105","nodeType":"FunctionDefinition","parameters":{"id":28831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28824,"mutability":"mutable","name":"sender","nameLocation":"4794:6:105","nodeType":"VariableDeclaration","scope":28965,"src":"4786:14:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28823,"name":"address","nodeType":"ElementaryTypeName","src":"4786:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28826,"mutability":"mutable","name":"recipient","nameLocation":"4810:9:105","nodeType":"VariableDeclaration","scope":28965,"src":"4802:17:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28825,"name":"address","nodeType":"ElementaryTypeName","src":"4802:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28828,"mutability":"mutable","name":"amount","nameLocation":"4829:6:105","nodeType":"VariableDeclaration","scope":28965,"src":"4821:14:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28827,"name":"uint256","nodeType":"ElementaryTypeName","src":"4821:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28830,"mutability":"mutable","name":"index","nameLocation":"4845:5:105","nodeType":"VariableDeclaration","scope":28965,"src":"4837:13:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28829,"name":"uint256","nodeType":"ElementaryTypeName","src":"4837:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4785:66:105"},"returnParameters":{"id":28832,"nodeType":"ParameterList","parameters":[],"src":"4861:0:105"},"scope":28966,"src":"4767:1203:105","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":28967,"src":"599:5373:105","usedErrors":[]}],"src":"37:5936:105"},"id":105},"contracts/adapters/paraswap/BaseParaSwapAdapter.sol":{"ast":{"absolutePath":"contracts/adapters/paraswap/BaseParaSwapAdapter.sol","exportedSymbols":{"BaseParaSwapAdapter":[29245],"DataTypes":[21633],"FlashLoanSimpleReceiverBase":[3466],"GPv2SafeERC20":[118],"IERC20":[1442],"IERC20Detailed":[1464],"IERC20WithPermit":[4127],"IPoolAddressesProvider":[5069],"IPriceOracleGetter":[5835],"Ownable":[1573],"SafeMath":[2310]},"id":29246,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":28968,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:106"},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","id":28970,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29246,"sourceUnit":21634,"src":"63:89:106","symbolAliases":[{"foreign":{"id":28969,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:9:106","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol","file":"@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol","id":28972,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29246,"sourceUnit":3467,"src":"153:115:106","symbolAliases":[{"foreign":{"id":28971,"name":"FlashLoanSimpleReceiverBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"161:27:106","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":28974,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29246,"sourceUnit":119,"src":"269:102:106","symbolAliases":[{"foreign":{"id":28973,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"277:13:106","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","id":28976,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29246,"sourceUnit":1443,"src":"372:94:106","symbolAliases":[{"foreign":{"id":28975,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"380:6:106","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","id":28978,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29246,"sourceUnit":1465,"src":"467:110:106","symbolAliases":[{"foreign":{"id":28977,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"src":"475:14:106","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol","file":"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol","id":28980,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29246,"sourceUnit":4128,"src":"578:89:106","symbolAliases":[{"foreign":{"id":28979,"name":"IERC20WithPermit","nodeType":"Identifier","overloadedDeclarations":[],"src":"586:16:106","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","id":28982,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29246,"sourceUnit":5070,"src":"668:101:106","symbolAliases":[{"foreign":{"id":28981,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"676:22:106","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol","file":"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol","id":28984,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29246,"sourceUnit":5836,"src":"770:93:106","symbolAliases":[{"foreign":{"id":28983,"name":"IPriceOracleGetter","nodeType":"Identifier","overloadedDeclarations":[],"src":"778:18:106","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol","id":28986,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29246,"sourceUnit":2311,"src":"864:98:106","symbolAliases":[{"foreign":{"id":28985,"name":"SafeMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"872:8:106","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol","id":28988,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29246,"sourceUnit":1574,"src":"963:96:106","symbolAliases":[{"foreign":{"id":28987,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"src":"971:7:106","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":28990,"name":"FlashLoanSimpleReceiverBase","nodeType":"IdentifierPath","referencedDeclaration":3466,"src":"1227:27:106"},"id":28991,"nodeType":"InheritanceSpecifier","src":"1227:27:106"},{"baseName":{"id":28992,"name":"Ownable","nodeType":"IdentifierPath","referencedDeclaration":1573,"src":"1256:7:106"},"id":28993,"nodeType":"InheritanceSpecifier","src":"1256:7:106"}],"canonicalName":"BaseParaSwapAdapter","contractDependencies":[],"contractKind":"contract","documentation":{"id":28989,"nodeType":"StructuredDocumentation","src":"1061:124:106","text":" @title BaseParaSwapAdapter\n @notice Utility functions for adapters using ParaSwap\n @author Jason Raymond Bell"},"fullyImplemented":false,"id":29245,"linearizedBaseContracts":[29245,1573,748,3466,3541],"name":"BaseParaSwapAdapter","nameLocation":"1204:19:106","nodeType":"ContractDefinition","nodes":[{"id":28996,"libraryName":{"id":28994,"name":"SafeMath","nodeType":"IdentifierPath","referencedDeclaration":2310,"src":"1274:8:106"},"nodeType":"UsingForDirective","src":"1268:27:106","typeName":{"id":28995,"name":"uint256","nodeType":"ElementaryTypeName","src":"1287:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":29000,"libraryName":{"id":28997,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"1304:13:106"},"nodeType":"UsingForDirective","src":"1298:31:106","typeName":{"id":28999,"nodeType":"UserDefinedTypeName","pathNode":{"id":28998,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1322:6:106"},"referencedDeclaration":1442,"src":"1322:6:106","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"id":29004,"libraryName":{"id":29001,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"1338:13:106"},"nodeType":"UsingForDirective","src":"1332:39:106","typeName":{"id":29003,"nodeType":"UserDefinedTypeName","pathNode":{"id":29002,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"1356:14:106"},"referencedDeclaration":1464,"src":"1356:14:106","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}},{"id":29008,"libraryName":{"id":29005,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"1380:13:106"},"nodeType":"UsingForDirective","src":"1374:41:106","typeName":{"id":29007,"nodeType":"UserDefinedTypeName","pathNode":{"id":29006,"name":"IERC20WithPermit","nodeType":"IdentifierPath","referencedDeclaration":4127,"src":"1398:16:106"},"referencedDeclaration":4127,"src":"1398:16:106","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"}}},{"canonicalName":"BaseParaSwapAdapter.PermitSignature","id":29019,"members":[{"constant":false,"id":29010,"mutability":"mutable","name":"amount","nameLocation":"1456:6:106","nodeType":"VariableDeclaration","scope":29019,"src":"1448:14:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29009,"name":"uint256","nodeType":"ElementaryTypeName","src":"1448:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29012,"mutability":"mutable","name":"deadline","nameLocation":"1476:8:106","nodeType":"VariableDeclaration","scope":29019,"src":"1468:16:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29011,"name":"uint256","nodeType":"ElementaryTypeName","src":"1468:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29014,"mutability":"mutable","name":"v","nameLocation":"1496:1:106","nodeType":"VariableDeclaration","scope":29019,"src":"1490:7:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29013,"name":"uint8","nodeType":"ElementaryTypeName","src":"1490:5:106","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":29016,"mutability":"mutable","name":"r","nameLocation":"1511:1:106","nodeType":"VariableDeclaration","scope":29019,"src":"1503:9:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":29015,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1503:7:106","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":29018,"mutability":"mutable","name":"s","nameLocation":"1526:1:106","nodeType":"VariableDeclaration","scope":29019,"src":"1518:9:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":29017,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1518:7:106","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"PermitSignature","nameLocation":"1426:15:106","nodeType":"StructDefinition","scope":29245,"src":"1419:113:106","visibility":"public"},{"constant":true,"functionSelector":"32e4b286","id":29022,"mutability":"constant","name":"MAX_SLIPPAGE_PERCENT","nameLocation":"1594:20:106","nodeType":"VariableDeclaration","scope":29245,"src":"1570:51:106","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29020,"name":"uint256","nodeType":"ElementaryTypeName","src":"1570:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"33303030","id":29021,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1617:4:106","typeDescriptions":{"typeIdentifier":"t_rational_3000_by_1","typeString":"int_const 3000"},"value":"3000"},"visibility":"public"},{"constant":false,"functionSelector":"38013f02","id":29025,"mutability":"immutable","name":"ORACLE","nameLocation":"1669:6:106","nodeType":"VariableDeclaration","scope":29245,"src":"1633:42:106","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"},"typeName":{"id":29024,"nodeType":"UserDefinedTypeName","pathNode":{"id":29023,"name":"IPriceOracleGetter","nodeType":"IdentifierPath","referencedDeclaration":5835,"src":"1633:18:106"},"referencedDeclaration":5835,"src":"1633:18:106","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"}},"visibility":"public"},{"anonymous":false,"id":29035,"name":"Swapped","nameLocation":"1686:7:106","nodeType":"EventDefinition","parameters":{"id":29034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29027,"indexed":true,"mutability":"mutable","name":"fromAsset","nameLocation":"1715:9:106","nodeType":"VariableDeclaration","scope":29035,"src":"1699:25:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29026,"name":"address","nodeType":"ElementaryTypeName","src":"1699:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29029,"indexed":true,"mutability":"mutable","name":"toAsset","nameLocation":"1746:7:106","nodeType":"VariableDeclaration","scope":29035,"src":"1730:23:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29028,"name":"address","nodeType":"ElementaryTypeName","src":"1730:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29031,"indexed":false,"mutability":"mutable","name":"fromAmount","nameLocation":"1767:10:106","nodeType":"VariableDeclaration","scope":29035,"src":"1759:18:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29030,"name":"uint256","nodeType":"ElementaryTypeName","src":"1759:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29033,"indexed":false,"mutability":"mutable","name":"receivedAmount","nameLocation":"1791:14:106","nodeType":"VariableDeclaration","scope":29035,"src":"1783:22:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29032,"name":"uint256","nodeType":"ElementaryTypeName","src":"1783:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1693:116:106"},"src":"1680:130:106"},{"anonymous":false,"id":29045,"name":"Bought","nameLocation":"1819:6:106","nodeType":"EventDefinition","parameters":{"id":29044,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29037,"indexed":true,"mutability":"mutable","name":"fromAsset","nameLocation":"1847:9:106","nodeType":"VariableDeclaration","scope":29045,"src":"1831:25:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29036,"name":"address","nodeType":"ElementaryTypeName","src":"1831:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29039,"indexed":true,"mutability":"mutable","name":"toAsset","nameLocation":"1878:7:106","nodeType":"VariableDeclaration","scope":29045,"src":"1862:23:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29038,"name":"address","nodeType":"ElementaryTypeName","src":"1862:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29041,"indexed":false,"mutability":"mutable","name":"amountSold","nameLocation":"1899:10:106","nodeType":"VariableDeclaration","scope":29045,"src":"1891:18:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29040,"name":"uint256","nodeType":"ElementaryTypeName","src":"1891:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29043,"indexed":false,"mutability":"mutable","name":"receivedAmount","nameLocation":"1923:14:106","nodeType":"VariableDeclaration","scope":29045,"src":"1915:22:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29042,"name":"uint256","nodeType":"ElementaryTypeName","src":"1915:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1825:116:106"},"src":"1813:129:106"},{"body":{"id":29062,"nodeType":"Block","src":"2055:74:106","statements":[{"expression":{"id":29060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":29054,"name":"ORACLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29025,"src":"2061:6:106","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29056,"name":"addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29048,"src":"2089:17:106","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":29057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriceOracle","nodeType":"MemberAccess","referencedDeclaration":5014,"src":"2089:32:106","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":29058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2089:34:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":29055,"name":"IPriceOracleGetter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5835,"src":"2070:18:106","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPriceOracleGetter_$5835_$","typeString":"type(contract IPriceOracleGetter)"}},"id":29059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2070:54:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"}},"src":"2061:63:106","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"}},"id":29061,"nodeType":"ExpressionStatement","src":"2061:63:106"}]},"id":29063,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":29051,"name":"addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29048,"src":"2036:17:106","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}}],"id":29052,"kind":"baseConstructorSpecifier","modifierName":{"id":29050,"name":"FlashLoanSimpleReceiverBase","nodeType":"IdentifierPath","referencedDeclaration":3466,"src":"2008:27:106"},"nodeType":"ModifierInvocation","src":"2008:46:106"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":29049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29048,"mutability":"mutable","name":"addressesProvider","nameLocation":"1986:17:106","nodeType":"VariableDeclaration","scope":29063,"src":"1963:40:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":29047,"nodeType":"UserDefinedTypeName","pathNode":{"id":29046,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"1963:22:106"},"referencedDeclaration":5069,"src":"1963:22:106","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"1957:50:106"},"returnParameters":{"id":29053,"nodeType":"ParameterList","parameters":[],"src":"2055:0:106"},"scope":29245,"src":"1946:183:106","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":29076,"nodeType":"Block","src":"2346:45:106","statements":[{"expression":{"arguments":[{"id":29073,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29066,"src":"2380:5:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":29071,"name":"ORACLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29025,"src":"2359:6:106","typeDescriptions":{"typeIdentifier":"t_contract$_IPriceOracleGetter_$5835","typeString":"contract IPriceOracleGetter"}},"id":29072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getAssetPrice","nodeType":"MemberAccess","referencedDeclaration":5834,"src":"2359:20:106","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":29074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2359:27:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":29070,"id":29075,"nodeType":"Return","src":"2352:34:106"}]},"documentation":{"id":29064,"nodeType":"StructuredDocumentation","src":"2133:144:106","text":" @dev Get the price of the asset from the oracle denominated in eth\n @param asset address\n @return eth price for the asset"},"id":29077,"implemented":true,"kind":"function","modifiers":[],"name":"_getPrice","nameLocation":"2289:9:106","nodeType":"FunctionDefinition","parameters":{"id":29067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29066,"mutability":"mutable","name":"asset","nameLocation":"2307:5:106","nodeType":"VariableDeclaration","scope":29077,"src":"2299:13:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29065,"name":"address","nodeType":"ElementaryTypeName","src":"2299:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2298:15:106"},"returnParameters":{"id":29070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29069,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29077,"src":"2337:7:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29068,"name":"uint256","nodeType":"ElementaryTypeName","src":"2337:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2336:9:106"},"scope":29245,"src":"2280:111:106","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":29101,"nodeType":"Block","src":"2565:176:106","statements":[{"assignments":[29087],"declarations":[{"constant":false,"id":29087,"mutability":"mutable","name":"decimals","nameLocation":"2577:8:106","nodeType":"VariableDeclaration","scope":29101,"src":"2571:14:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29086,"name":"uint8","nodeType":"ElementaryTypeName","src":"2571:5:106","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":29091,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29088,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29081,"src":"2588:5:106","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":29089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":1463,"src":"2588:14:106","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":29090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2588:16:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"2571:33:106"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":29095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29093,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29087,"src":"2670:8:106","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"3737","id":29094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2682:2:106","typeDescriptions":{"typeIdentifier":"t_rational_77_by_1","typeString":"int_const 77"},"value":"77"},"src":"2670:14:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"544f4f5f4d414e595f444543494d414c535f4f4e5f544f4b454e","id":29096,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2686:28:106","typeDescriptions":{"typeIdentifier":"t_stringliteral_fc5915f8715e0da4bd5e6487e67e57e89850a48fc18d4e921a811a8c928ad119","typeString":"literal_string \"TOO_MANY_DECIMALS_ON_TOKEN\""},"value":"TOO_MANY_DECIMALS_ON_TOKEN"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_fc5915f8715e0da4bd5e6487e67e57e89850a48fc18d4e921a811a8c928ad119","typeString":"literal_string \"TOO_MANY_DECIMALS_ON_TOKEN\""}],"id":29092,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2662:7:106","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":29097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2662:53:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29098,"nodeType":"ExpressionStatement","src":"2662:53:106"},{"expression":{"id":29099,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29087,"src":"2728:8:106","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":29085,"id":29100,"nodeType":"Return","src":"2721:15:106"}]},"documentation":{"id":29078,"nodeType":"StructuredDocumentation","src":"2395:93:106","text":" @dev Get the decimals of an asset\n @return number of decimals of the asset"},"id":29102,"implemented":true,"kind":"function","modifiers":[],"name":"_getDecimals","nameLocation":"2500:12:106","nodeType":"FunctionDefinition","parameters":{"id":29082,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29081,"mutability":"mutable","name":"asset","nameLocation":"2528:5:106","nodeType":"VariableDeclaration","scope":29102,"src":"2513:20:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},"typeName":{"id":29080,"nodeType":"UserDefinedTypeName","pathNode":{"id":29079,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"2513:14:106"},"referencedDeclaration":1464,"src":"2513:14:106","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"visibility":"internal"}],"src":"2512:22:106"},"returnParameters":{"id":29085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29084,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29102,"src":"2558:5:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29083,"name":"uint8","nodeType":"ElementaryTypeName","src":"2558:5:106","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"2557:7:106"},"scope":29245,"src":"2491:250:106","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":29116,"nodeType":"Block","src":"2934:44:106","statements":[{"expression":{"arguments":[{"id":29113,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29105,"src":"2967:5:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":29111,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"2947:4:106","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":29112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4710,"src":"2947:19:106","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$21315_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":29114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2947:26:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"functionReturnParameters":29110,"id":29115,"nodeType":"Return","src":"2940:33:106"}]},"documentation":{"id":29103,"nodeType":"StructuredDocumentation","src":"2745:93:106","text":" @dev Get the aToken associated to the asset\n @return address of the aToken"},"id":29117,"implemented":true,"kind":"function","modifiers":[],"name":"_getReserveData","nameLocation":"2850:15:106","nodeType":"FunctionDefinition","parameters":{"id":29106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29105,"mutability":"mutable","name":"asset","nameLocation":"2874:5:106","nodeType":"VariableDeclaration","scope":29117,"src":"2866:13:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29104,"name":"address","nodeType":"ElementaryTypeName","src":"2866:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2865:15:106"},"returnParameters":{"id":29110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29109,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29117,"src":"2904:28:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":29108,"nodeType":"UserDefinedTypeName","pathNode":{"id":29107,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"2904:21:106"},"referencedDeclaration":21315,"src":"2904:21:106","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"src":"2903:30:106"},"scope":29245,"src":"2841:137:106","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":29150,"nodeType":"Block","src":"3130:204:106","statements":[{"assignments":[29131],"declarations":[{"constant":false,"id":29131,"mutability":"mutable","name":"reserveAToken","nameLocation":"3153:13:106","nodeType":"VariableDeclaration","scope":29150,"src":"3136:30:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"},"typeName":{"id":29130,"nodeType":"UserDefinedTypeName","pathNode":{"id":29129,"name":"IERC20WithPermit","nodeType":"IdentifierPath","referencedDeclaration":4127,"src":"3136:16:106"},"referencedDeclaration":4127,"src":"3136:16:106","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"}},"visibility":"internal"}],"id":29141,"initialValue":{"arguments":[{"expression":{"arguments":[{"arguments":[{"id":29136,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29119,"src":"3217:7:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":29135,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3209:7:106","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29134,"name":"address","nodeType":"ElementaryTypeName","src":"3209:7:106","typeDescriptions":{}}},"id":29137,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3209:16:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":29133,"name":"_getReserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29117,"src":"3193:15:106","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_struct$_ReserveData_$21315_memory_ptr_$","typeString":"function (address) view returns (struct DataTypes.ReserveData memory)"}},"id":29138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3193:33:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":29139,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"3193:47:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":29132,"name":"IERC20WithPermit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4127,"src":"3169:16:106","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20WithPermit_$4127_$","typeString":"type(contract IERC20WithPermit)"}},"id":29140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3169:77:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"}},"nodeType":"VariableDeclarationStatement","src":"3136:110:106"},{"expression":{"arguments":[{"id":29143,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29119,"src":"3275:7:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29144,"name":"reserveAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29131,"src":"3284:13:106","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"}},{"id":29145,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29121,"src":"3299:4:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29146,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29123,"src":"3305:6:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29147,"name":"permitSignature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29126,"src":"3313:15:106","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_memory_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_PermitSignature_$29019_memory_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature memory"}],"id":29142,"name":"_pullATokenAndWithdraw","nodeType":"Identifier","overloadedDeclarations":[29151,29220],"referencedDeclaration":29220,"src":"3252:22:106","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20WithPermit_$4127_$_t_address_$_t_uint256_$_t_struct$_PermitSignature_$29019_memory_ptr_$returns$__$","typeString":"function (address,contract IERC20WithPermit,address,uint256,struct BaseParaSwapAdapter.PermitSignature memory)"}},"id":29148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3252:77:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29149,"nodeType":"ExpressionStatement","src":"3252:77:106"}]},"id":29151,"implemented":true,"kind":"function","modifiers":[],"name":"_pullATokenAndWithdraw","nameLocation":"2991:22:106","nodeType":"FunctionDefinition","parameters":{"id":29127,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29119,"mutability":"mutable","name":"reserve","nameLocation":"3027:7:106","nodeType":"VariableDeclaration","scope":29151,"src":"3019:15:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29118,"name":"address","nodeType":"ElementaryTypeName","src":"3019:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29121,"mutability":"mutable","name":"user","nameLocation":"3048:4:106","nodeType":"VariableDeclaration","scope":29151,"src":"3040:12:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29120,"name":"address","nodeType":"ElementaryTypeName","src":"3040:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29123,"mutability":"mutable","name":"amount","nameLocation":"3066:6:106","nodeType":"VariableDeclaration","scope":29151,"src":"3058:14:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29122,"name":"uint256","nodeType":"ElementaryTypeName","src":"3058:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29126,"mutability":"mutable","name":"permitSignature","nameLocation":"3101:15:106","nodeType":"VariableDeclaration","scope":29151,"src":"3078:38:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_memory_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature"},"typeName":{"id":29125,"nodeType":"UserDefinedTypeName","pathNode":{"id":29124,"name":"PermitSignature","nodeType":"IdentifierPath","referencedDeclaration":29019,"src":"3078:15:106"},"referencedDeclaration":29019,"src":"3078:15:106","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_storage_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature"}},"visibility":"internal"}],"src":"3013:107:106"},"returnParameters":{"id":29128,"nodeType":"ParameterList","parameters":[],"src":"3130:0:106"},"scope":29245,"src":"2982:352:106","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":29219,"nodeType":"Block","src":"3834:576:106","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":29167,"name":"permitSignature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29164,"src":"3919:15:106","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_memory_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature memory"}},"id":29168,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":29012,"src":"3919:24:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":29169,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3947:1:106","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3919:29:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29192,"nodeType":"IfStatement","src":"3915:262:106","trueBody":{"id":29191,"nodeType":"Block","src":"3950:227:106","statements":[{"expression":{"arguments":[{"id":29174,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29159,"src":"3988:4:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":29177,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4010:4:106","typeDescriptions":{"typeIdentifier":"t_contract$_BaseParaSwapAdapter_$29245","typeString":"contract BaseParaSwapAdapter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BaseParaSwapAdapter_$29245","typeString":"contract BaseParaSwapAdapter"}],"id":29176,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4002:7:106","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29175,"name":"address","nodeType":"ElementaryTypeName","src":"4002:7:106","typeDescriptions":{}}},"id":29178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4002:13:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":29179,"name":"permitSignature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29164,"src":"4025:15:106","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_memory_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature memory"}},"id":29180,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":29010,"src":"4025:22:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":29181,"name":"permitSignature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29164,"src":"4057:15:106","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_memory_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature memory"}},"id":29182,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":29012,"src":"4057:24:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":29183,"name":"permitSignature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29164,"src":"4091:15:106","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_memory_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature memory"}},"id":29184,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"v","nodeType":"MemberAccess","referencedDeclaration":29014,"src":"4091:17:106","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"expression":{"id":29185,"name":"permitSignature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29164,"src":"4118:15:106","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_memory_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature memory"}},"id":29186,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"r","nodeType":"MemberAccess","referencedDeclaration":29016,"src":"4118:17:106","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":29187,"name":"permitSignature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29164,"src":"4145:15:106","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_memory_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature memory"}},"id":29188,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"s","nodeType":"MemberAccess","referencedDeclaration":29018,"src":"4145:17:106","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":29171,"name":"reserveAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29157,"src":"3958:13:106","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"}},"id":29173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"permit","nodeType":"MemberAccess","referencedDeclaration":4126,"src":"3958:20:106","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (address,address,uint256,uint256,uint8,bytes32,bytes32) external"}},"id":29189,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3958:212:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29190,"nodeType":"ExpressionStatement","src":"3958:212:106"}]}},{"expression":{"arguments":[{"id":29196,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29159,"src":"4251:4:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":29199,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4265:4:106","typeDescriptions":{"typeIdentifier":"t_contract$_BaseParaSwapAdapter_$29245","typeString":"contract BaseParaSwapAdapter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BaseParaSwapAdapter_$29245","typeString":"contract BaseParaSwapAdapter"}],"id":29198,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4257:7:106","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29197,"name":"address","nodeType":"ElementaryTypeName","src":"4257:7:106","typeDescriptions":{}}},"id":29200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4257:13:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29201,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29161,"src":"4272:6:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":29193,"name":"reserveAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29157,"src":"4220:13:106","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"}},"id":29195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":106,"src":"4220:30:106","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":29202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4220:59:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29203,"nodeType":"ExpressionStatement","src":"4220:59:106"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":29207,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29154,"src":"4332:7:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29208,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29161,"src":"4341:6:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":29211,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4357:4:106","typeDescriptions":{"typeIdentifier":"t_contract$_BaseParaSwapAdapter_$29245","typeString":"contract BaseParaSwapAdapter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BaseParaSwapAdapter_$29245","typeString":"contract BaseParaSwapAdapter"}],"id":29210,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4349:7:106","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29209,"name":"address","nodeType":"ElementaryTypeName","src":"4349:7:106","typeDescriptions":{}}},"id":29212,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4349:13:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":29205,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"4318:4:106","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":29206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"withdraw","nodeType":"MemberAccess","referencedDeclaration":4477,"src":"4318:13:106","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) external returns (uint256)"}},"id":29213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4318:45:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":29214,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29161,"src":"4367:6:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4318:55:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"554e45585045435445445f414d4f554e545f57495448445241574e","id":29216,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4375:29:106","typeDescriptions":{"typeIdentifier":"t_stringliteral_85a045c7862eb0e81d59fe8dfd2ed8c824917ce215328caf39199676e5939f87","typeString":"literal_string \"UNEXPECTED_AMOUNT_WITHDRAWN\""},"value":"UNEXPECTED_AMOUNT_WITHDRAWN"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_85a045c7862eb0e81d59fe8dfd2ed8c824917ce215328caf39199676e5939f87","typeString":"literal_string \"UNEXPECTED_AMOUNT_WITHDRAWN\""}],"id":29204,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4310:7:106","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":29217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4310:95:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29218,"nodeType":"ExpressionStatement","src":"4310:95:106"}]},"documentation":{"id":29152,"nodeType":"StructuredDocumentation","src":"3338:309:106","text":" @dev Pull the ATokens from the user\n @param reserve address of the asset\n @param reserveAToken address of the aToken of the reserve\n @param user address\n @param amount of tokens to be transferred to the contract\n @param permitSignature struct containing the permit signature"},"id":29220,"implemented":true,"kind":"function","modifiers":[],"name":"_pullATokenAndWithdraw","nameLocation":"3659:22:106","nodeType":"FunctionDefinition","parameters":{"id":29165,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29154,"mutability":"mutable","name":"reserve","nameLocation":"3695:7:106","nodeType":"VariableDeclaration","scope":29220,"src":"3687:15:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29153,"name":"address","nodeType":"ElementaryTypeName","src":"3687:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29157,"mutability":"mutable","name":"reserveAToken","nameLocation":"3725:13:106","nodeType":"VariableDeclaration","scope":29220,"src":"3708:30:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"},"typeName":{"id":29156,"nodeType":"UserDefinedTypeName","pathNode":{"id":29155,"name":"IERC20WithPermit","nodeType":"IdentifierPath","referencedDeclaration":4127,"src":"3708:16:106"},"referencedDeclaration":4127,"src":"3708:16:106","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"}},"visibility":"internal"},{"constant":false,"id":29159,"mutability":"mutable","name":"user","nameLocation":"3752:4:106","nodeType":"VariableDeclaration","scope":29220,"src":"3744:12:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29158,"name":"address","nodeType":"ElementaryTypeName","src":"3744:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29161,"mutability":"mutable","name":"amount","nameLocation":"3770:6:106","nodeType":"VariableDeclaration","scope":29220,"src":"3762:14:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29160,"name":"uint256","nodeType":"ElementaryTypeName","src":"3762:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29164,"mutability":"mutable","name":"permitSignature","nameLocation":"3805:15:106","nodeType":"VariableDeclaration","scope":29220,"src":"3782:38:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_memory_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature"},"typeName":{"id":29163,"nodeType":"UserDefinedTypeName","pathNode":{"id":29162,"name":"PermitSignature","nodeType":"IdentifierPath","referencedDeclaration":29019,"src":"3782:15:106"},"referencedDeclaration":29019,"src":"3782:15:106","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_storage_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature"}},"visibility":"internal"}],"src":"3681:143:106"},"returnParameters":{"id":29166,"nodeType":"ParameterList","parameters":[],"src":"3834:0:106"},"scope":29245,"src":"3650:760:106","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":29243,"nodeType":"Block","src":"4685:70:106","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":29232,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1509,"src":"4710:5:106","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":29233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4710:7:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":29238,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4743:4:106","typeDescriptions":{"typeIdentifier":"t_contract$_BaseParaSwapAdapter_$29245","typeString":"contract BaseParaSwapAdapter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BaseParaSwapAdapter_$29245","typeString":"contract BaseParaSwapAdapter"}],"id":29237,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4735:7:106","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29236,"name":"address","nodeType":"ElementaryTypeName","src":"4735:7:106","typeDescriptions":{}}},"id":29239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4735:13:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":29234,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29224,"src":"4719:5:106","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":29235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"4719:15:106","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":29240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4719:30:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":29229,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29224,"src":"4691:5:106","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":29231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":78,"src":"4691:18:106","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":29241,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4691:59:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29242,"nodeType":"ExpressionStatement","src":"4691:59:106"}]},"documentation":{"id":29221,"nodeType":"StructuredDocumentation","src":"4414:213:106","text":" @dev Emergency rescue for token stucked on this contract, as failsafe mechanism\n - Funds should never remain in this contract more time than during transactions\n - Only callable by the owner"},"functionSelector":"00ae3bf8","id":29244,"implemented":true,"kind":"function","modifiers":[{"id":29227,"kind":"modifierInvocation","modifierName":{"id":29226,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"4675:9:106"},"nodeType":"ModifierInvocation","src":"4675:9:106"}],"name":"rescueTokens","nameLocation":"4639:12:106","nodeType":"FunctionDefinition","parameters":{"id":29225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29224,"mutability":"mutable","name":"token","nameLocation":"4659:5:106","nodeType":"VariableDeclaration","scope":29244,"src":"4652:12:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":29223,"nodeType":"UserDefinedTypeName","pathNode":{"id":29222,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"4652:6:106"},"referencedDeclaration":1442,"src":"4652:6:106","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"4651:14:106"},"returnParameters":{"id":29228,"nodeType":"ParameterList","parameters":[],"src":"4685:0:106"},"scope":29245,"src":"4630:125:106","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":29246,"src":"1186:3571:106","usedErrors":[]}],"src":"37:4721:106"},"id":106},"contracts/adapters/paraswap/BaseParaSwapBuyAdapter.sol":{"ast":{"absolutePath":"contracts/adapters/paraswap/BaseParaSwapBuyAdapter.sol","exportedSymbols":{"BaseParaSwapAdapter":[29245],"BaseParaSwapBuyAdapter":[29559],"IERC20Detailed":[1464],"IParaSwapAugustus":[30951],"IParaSwapAugustusRegistry":[30961],"IPoolAddressesProvider":[5069],"PercentageMath":[21132],"SafeERC20":[2190],"SafeMath":[2310]},"id":29560,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":29247,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:107"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol","id":29249,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29560,"sourceUnit":2191,"src":"63:100:107","symbolAliases":[{"foreign":{"id":29248,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:9:107","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol","id":29251,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29560,"sourceUnit":2311,"src":"164:98:107","symbolAliases":[{"foreign":{"id":29250,"name":"SafeMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"172:8:107","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol","file":"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol","id":29253,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29560,"sourceUnit":21133,"src":"263:98:107","symbolAliases":[{"foreign":{"id":29252,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"271:14:107","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","id":29255,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29560,"sourceUnit":5070,"src":"362:101:107","symbolAliases":[{"foreign":{"id":29254,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"370:22:107","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","id":29257,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29560,"sourceUnit":1465,"src":"464:110:107","symbolAliases":[{"foreign":{"id":29256,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"src":"472:14:107","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/adapters/paraswap/interfaces/IParaSwapAugustus.sol","file":"./interfaces/IParaSwapAugustus.sol","id":29259,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29560,"sourceUnit":30952,"src":"575:69:107","symbolAliases":[{"foreign":{"id":29258,"name":"IParaSwapAugustus","nodeType":"Identifier","overloadedDeclarations":[],"src":"583:17:107","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/adapters/paraswap/interfaces/IParaSwapAugustusRegistry.sol","file":"./interfaces/IParaSwapAugustusRegistry.sol","id":29261,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29560,"sourceUnit":30962,"src":"645:85:107","symbolAliases":[{"foreign":{"id":29260,"name":"IParaSwapAugustusRegistry","nodeType":"Identifier","overloadedDeclarations":[],"src":"653:25:107","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/adapters/paraswap/BaseParaSwapAdapter.sol","file":"./BaseParaSwapAdapter.sol","id":29263,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29560,"sourceUnit":29246,"src":"731:62:107","symbolAliases":[{"foreign":{"id":29262,"name":"BaseParaSwapAdapter","nodeType":"Identifier","overloadedDeclarations":[],"src":"739:19:107","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":29265,"name":"BaseParaSwapAdapter","nodeType":"IdentifierPath","referencedDeclaration":29245,"src":"942:19:107"},"id":29266,"nodeType":"InheritanceSpecifier","src":"942:19:107"}],"canonicalName":"BaseParaSwapBuyAdapter","contractDependencies":[],"contractKind":"contract","documentation":{"id":29264,"nodeType":"StructuredDocumentation","src":"795:102:107","text":" @title BaseParaSwapBuyAdapter\n @notice Implements the logic for buying tokens on ParaSwap"},"fullyImplemented":false,"id":29559,"linearizedBaseContracts":[29559,29245,1573,748,3466,3541],"name":"BaseParaSwapBuyAdapter","nameLocation":"916:22:107","nodeType":"ContractDefinition","nodes":[{"id":29269,"libraryName":{"id":29267,"name":"PercentageMath","nodeType":"IdentifierPath","referencedDeclaration":21132,"src":"972:14:107"},"nodeType":"UsingForDirective","src":"966:33:107","typeName":{"id":29268,"name":"uint256","nodeType":"ElementaryTypeName","src":"991:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":29272,"libraryName":{"id":29270,"name":"SafeMath","nodeType":"IdentifierPath","referencedDeclaration":2310,"src":"1008:8:107"},"nodeType":"UsingForDirective","src":"1002:27:107","typeName":{"id":29271,"name":"uint256","nodeType":"ElementaryTypeName","src":"1021:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":29276,"libraryName":{"id":29273,"name":"SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":2190,"src":"1038:9:107"},"nodeType":"UsingForDirective","src":"1032:35:107","typeName":{"id":29275,"nodeType":"UserDefinedTypeName","pathNode":{"id":29274,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"1052:14:107"},"referencedDeclaration":1464,"src":"1052:14:107","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}},{"constant":false,"functionSelector":"3a829867","id":29279,"mutability":"immutable","name":"AUGUSTUS_REGISTRY","nameLocation":"1114:17:107","nodeType":"VariableDeclaration","scope":29559,"src":"1071:60:107","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"},"typeName":{"id":29278,"nodeType":"UserDefinedTypeName","pathNode":{"id":29277,"name":"IParaSwapAugustusRegistry","nodeType":"IdentifierPath","referencedDeclaration":30961,"src":"1071:25:107"},"referencedDeclaration":30961,"src":"1071:25:107","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"}},"visibility":"public"},{"body":{"id":29307,"nodeType":"Block","src":"1285:219:107","statements":[{"expression":{"arguments":[{"id":29299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1379:45:107","subExpression":{"arguments":[{"arguments":[{"hexValue":"30","id":29296,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1421:1:107","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":29295,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1413:7:107","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29294,"name":"address","nodeType":"ElementaryTypeName","src":"1413:7:107","typeDescriptions":{}}},"id":29297,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1413:10:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":29292,"name":"augustusRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29285,"src":"1380:16:107","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"}},"id":29293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isValidAugustus","nodeType":"MemberAccess","referencedDeclaration":30960,"src":"1380:32:107","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":29298,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1380:44:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4e6f7420612076616c69642041756775737475732061646472657373","id":29300,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1426:30:107","typeDescriptions":{"typeIdentifier":"t_stringliteral_db2797630a1d495c886e1a8a331a3e137a14592fc5c41e7f3fe6d0ad0c24dc7e","typeString":"literal_string \"Not a valid Augustus address\""},"value":"Not a valid Augustus address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_db2797630a1d495c886e1a8a331a3e137a14592fc5c41e7f3fe6d0ad0c24dc7e","typeString":"literal_string \"Not a valid Augustus address\""}],"id":29291,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1371:7:107","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":29301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1371:86:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29302,"nodeType":"ExpressionStatement","src":"1371:86:107"},{"expression":{"id":29305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":29303,"name":"AUGUSTUS_REGISTRY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29279,"src":"1463:17:107","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":29304,"name":"augustusRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29285,"src":"1483:16:107","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"}},"src":"1463:36:107","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"}},"id":29306,"nodeType":"ExpressionStatement","src":"1463:36:107"}]},"id":29308,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":29288,"name":"addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29282,"src":"1266:17:107","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}}],"id":29289,"kind":"baseConstructorSpecifier","modifierName":{"id":29287,"name":"BaseParaSwapAdapter","nodeType":"IdentifierPath","referencedDeclaration":29245,"src":"1246:19:107"},"nodeType":"ModifierInvocation","src":"1246:38:107"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":29286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29282,"mutability":"mutable","name":"addressesProvider","nameLocation":"1176:17:107","nodeType":"VariableDeclaration","scope":29308,"src":"1153:40:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":29281,"nodeType":"UserDefinedTypeName","pathNode":{"id":29280,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"1153:22:107"},"referencedDeclaration":5069,"src":"1153:22:107","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"},{"constant":false,"id":29285,"mutability":"mutable","name":"augustusRegistry","nameLocation":"1225:16:107","nodeType":"VariableDeclaration","scope":29308,"src":"1199:42:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"},"typeName":{"id":29284,"nodeType":"UserDefinedTypeName","pathNode":{"id":29283,"name":"IParaSwapAugustusRegistry","nodeType":"IdentifierPath","referencedDeclaration":30961,"src":"1199:25:107"},"referencedDeclaration":30961,"src":"1199:25:107","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"}},"visibility":"internal"}],"src":"1147:98:107"},"returnParameters":{"id":29290,"nodeType":"ParameterList","parameters":[],"src":"1285:0:107"},"scope":29559,"src":"1136:368:107","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":29557,"nodeType":"Block","src":"2288:2670:107","statements":[{"assignments":[29329,29332],"declarations":[{"constant":false,"id":29329,"mutability":"mutable","name":"buyCalldata","nameLocation":"2308:11:107","nodeType":"VariableDeclaration","scope":29557,"src":"2295:24:107","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":29328,"name":"bytes","nodeType":"ElementaryTypeName","src":"2295:5:107","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":29332,"mutability":"mutable","name":"augustus","nameLocation":"2339:8:107","nodeType":"VariableDeclaration","scope":29557,"src":"2321:26:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"},"typeName":{"id":29331,"nodeType":"UserDefinedTypeName","pathNode":{"id":29330,"name":"IParaSwapAugustus","nodeType":"IdentifierPath","referencedDeclaration":30951,"src":"2321:17:107"},"referencedDeclaration":30951,"src":"2321:17:107","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"}},"visibility":"internal"}],"id":29341,"initialValue":{"arguments":[{"id":29335,"name":"paraswapData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29313,"src":"2369:12:107","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":29337,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2390:5:107","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":29336,"name":"bytes","nodeType":"ElementaryTypeName","src":"2390:5:107","typeDescriptions":{}}},{"id":29338,"name":"IParaSwapAugustus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30951,"src":"2397:17:107","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IParaSwapAugustus_$30951_$","typeString":"type(contract IParaSwapAugustus)"}}],"id":29339,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"2389:26:107","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_bytes_storage_ptr_$_$_t_type$_t_contract$_IParaSwapAugustus_$30951_$_$","typeString":"tuple(type(bytes storage pointer),type(contract IParaSwapAugustus))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_bytes_storage_ptr_$_$_t_type$_t_contract$_IParaSwapAugustus_$30951_$_$","typeString":"tuple(type(bytes storage pointer),type(contract IParaSwapAugustus))"}],"expression":{"id":29333,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2351:3:107","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":29334,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"decode","nodeType":"MemberAccess","src":"2351:10:107","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":29340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2351:70:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bytes_memory_ptr_$_t_contract$_IParaSwapAugustus_$30951_$","typeString":"tuple(bytes memory,contract IParaSwapAugustus)"}},"nodeType":"VariableDeclarationStatement","src":"2294:127:107"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":29347,"name":"augustus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29332,"src":"2478:8:107","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"}],"id":29346,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2470:7:107","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29345,"name":"address","nodeType":"ElementaryTypeName","src":"2470:7:107","typeDescriptions":{}}},"id":29348,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2470:17:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":29343,"name":"AUGUSTUS_REGISTRY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29279,"src":"2436:17:107","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"}},"id":29344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isValidAugustus","nodeType":"MemberAccess","referencedDeclaration":30960,"src":"2436:33:107","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":29349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2436:52:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e56414c49445f4155475553545553","id":29350,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2490:18:107","typeDescriptions":{"typeIdentifier":"t_stringliteral_3202e1fc4f78abbce03a97de69392b3f69ebba48c41588ffb32a1c8b97349f74","typeString":"literal_string \"INVALID_AUGUSTUS\""},"value":"INVALID_AUGUSTUS"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3202e1fc4f78abbce03a97de69392b3f69ebba48c41588ffb32a1c8b97349f74","typeString":"literal_string \"INVALID_AUGUSTUS\""}],"id":29342,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2428:7:107","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":29351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2428:81:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29352,"nodeType":"ExpressionStatement","src":"2428:81:107"},{"id":29417,"nodeType":"Block","src":"2516:615:107","statements":[{"assignments":[29354],"declarations":[{"constant":false,"id":29354,"mutability":"mutable","name":"fromAssetDecimals","nameLocation":"2532:17:107","nodeType":"VariableDeclaration","scope":29417,"src":"2524:25:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29353,"name":"uint256","nodeType":"ElementaryTypeName","src":"2524:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29358,"initialValue":{"arguments":[{"id":29356,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29316,"src":"2565:15:107","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":29355,"name":"_getDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29102,"src":"2552:12:107","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20Detailed_$1464_$returns$_t_uint8_$","typeString":"function (contract IERC20Detailed) view returns (uint8)"}},"id":29357,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2552:29:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"2524:57:107"},{"assignments":[29360],"declarations":[{"constant":false,"id":29360,"mutability":"mutable","name":"toAssetDecimals","nameLocation":"2597:15:107","nodeType":"VariableDeclaration","scope":29417,"src":"2589:23:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29359,"name":"uint256","nodeType":"ElementaryTypeName","src":"2589:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29364,"initialValue":{"arguments":[{"id":29362,"name":"assetToSwapTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29319,"src":"2628:13:107","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":29361,"name":"_getDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29102,"src":"2615:12:107","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20Detailed_$1464_$returns$_t_uint8_$","typeString":"function (contract IERC20Detailed) view returns (uint8)"}},"id":29363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2615:27:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"2589:53:107"},{"assignments":[29366],"declarations":[{"constant":false,"id":29366,"mutability":"mutable","name":"fromAssetPrice","nameLocation":"2659:14:107","nodeType":"VariableDeclaration","scope":29417,"src":"2651:22:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29365,"name":"uint256","nodeType":"ElementaryTypeName","src":"2651:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29373,"initialValue":{"arguments":[{"arguments":[{"id":29370,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29316,"src":"2694:15:107","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":29369,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2686:7:107","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29368,"name":"address","nodeType":"ElementaryTypeName","src":"2686:7:107","typeDescriptions":{}}},"id":29371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2686:24:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":29367,"name":"_getPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29077,"src":"2676:9:107","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":29372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2676:35:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2651:60:107"},{"assignments":[29375],"declarations":[{"constant":false,"id":29375,"mutability":"mutable","name":"toAssetPrice","nameLocation":"2727:12:107","nodeType":"VariableDeclaration","scope":29417,"src":"2719:20:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29374,"name":"uint256","nodeType":"ElementaryTypeName","src":"2719:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29382,"initialValue":{"arguments":[{"arguments":[{"id":29379,"name":"assetToSwapTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29319,"src":"2760:13:107","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":29378,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2752:7:107","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29377,"name":"address","nodeType":"ElementaryTypeName","src":"2752:7:107","typeDescriptions":{}}},"id":29380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2752:22:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":29376,"name":"_getPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29077,"src":"2742:9:107","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":29381,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2742:33:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2719:56:107"},{"assignments":[29384],"declarations":[{"constant":false,"id":29384,"mutability":"mutable","name":"expectedMaxAmountToSwap","nameLocation":"2792:23:107","nodeType":"VariableDeclaration","scope":29417,"src":"2784:31:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29383,"name":"uint256","nodeType":"ElementaryTypeName","src":"2784:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29409,"initialValue":{"arguments":[{"arguments":[{"id":29406,"name":"MAX_SLIPPAGE_PERCENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29022,"src":"3003:20:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":29403,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21132,"src":"2966:14:107","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PercentageMath_$21132_$","typeString":"type(library PercentageMath)"}},"id":29404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PERCENTAGE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":21104,"src":"2966:32:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":2216,"src":"2966:36:107","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":29407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2966:58:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":29397,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2922:2:107","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":29398,"name":"toAssetDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29360,"src":"2928:15:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2922:21:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":29395,"name":"fromAssetPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29366,"src":"2903:14:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mul","nodeType":"MemberAccess","referencedDeclaration":2294,"src":"2903:18:107","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":29400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2903:41:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":29389,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2864:2:107","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":29390,"name":"fromAssetDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29354,"src":"2870:17:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2864:23:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":29387,"name":"toAssetPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29375,"src":"2847:12:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mul","nodeType":"MemberAccess","referencedDeclaration":2294,"src":"2847:16:107","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":29392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2847:41:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":29385,"name":"amountToReceive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29323,"src":"2818:15:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mul","nodeType":"MemberAccess","referencedDeclaration":2294,"src":"2818:28:107","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":29393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2818:71:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"div","nodeType":"MemberAccess","referencedDeclaration":2309,"src":"2818:84:107","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":29401,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2818:127:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":21119,"src":"2818:147:107","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":29408,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2818:207:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2784:241:107"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29411,"name":"maxAmountToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29321,"src":"3042:15:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":29412,"name":"expectedMaxAmountToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29384,"src":"3061:23:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3042:42:107","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6d6178416d6f756e74546f5377617020657863656564206d617820736c697070616765","id":29414,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3086:37:107","typeDescriptions":{"typeIdentifier":"t_stringliteral_6e5d7e8ec1c44b1be662d5a482625181074d9516baace42f35250edc17de17e6","typeString":"literal_string \"maxAmountToSwap exceed max slippage\""},"value":"maxAmountToSwap exceed max slippage"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6e5d7e8ec1c44b1be662d5a482625181074d9516baace42f35250edc17de17e6","typeString":"literal_string \"maxAmountToSwap exceed max slippage\""}],"id":29410,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3034:7:107","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":29415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3034:90:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29416,"nodeType":"ExpressionStatement","src":"3034:90:107"}]},{"assignments":[29419],"declarations":[{"constant":false,"id":29419,"mutability":"mutable","name":"balanceBeforeAssetFrom","nameLocation":"3145:22:107","nodeType":"VariableDeclaration","scope":29557,"src":"3137:30:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29418,"name":"uint256","nodeType":"ElementaryTypeName","src":"3137:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29427,"initialValue":{"arguments":[{"arguments":[{"id":29424,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3204:4:107","typeDescriptions":{"typeIdentifier":"t_contract$_BaseParaSwapBuyAdapter_$29559","typeString":"contract BaseParaSwapBuyAdapter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BaseParaSwapBuyAdapter_$29559","typeString":"contract BaseParaSwapBuyAdapter"}],"id":29423,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3196:7:107","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29422,"name":"address","nodeType":"ElementaryTypeName","src":"3196:7:107","typeDescriptions":{}}},"id":29425,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3196:13:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":29420,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29316,"src":"3170:15:107","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":29421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"3170:25:107","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":29426,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3170:40:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3137:73:107"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29429,"name":"balanceBeforeAssetFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29419,"src":"3224:22:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":29430,"name":"maxAmountToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29321,"src":"3250:15:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3224:41:107","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e53554646494349454e545f42414c414e43455f4245464f52455f53574150","id":29432,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3267:34:107","typeDescriptions":{"typeIdentifier":"t_stringliteral_51fc4946c16284910827fc38bc7611d60d4dd1f7d8fefa0da6f8642035c3c48b","typeString":"literal_string \"INSUFFICIENT_BALANCE_BEFORE_SWAP\""},"value":"INSUFFICIENT_BALANCE_BEFORE_SWAP"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_51fc4946c16284910827fc38bc7611d60d4dd1f7d8fefa0da6f8642035c3c48b","typeString":"literal_string \"INSUFFICIENT_BALANCE_BEFORE_SWAP\""}],"id":29428,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3216:7:107","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":29433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3216:86:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29434,"nodeType":"ExpressionStatement","src":"3216:86:107"},{"assignments":[29436],"declarations":[{"constant":false,"id":29436,"mutability":"mutable","name":"balanceBeforeAssetTo","nameLocation":"3316:20:107","nodeType":"VariableDeclaration","scope":29557,"src":"3308:28:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29435,"name":"uint256","nodeType":"ElementaryTypeName","src":"3308:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29444,"initialValue":{"arguments":[{"arguments":[{"id":29441,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3371:4:107","typeDescriptions":{"typeIdentifier":"t_contract$_BaseParaSwapBuyAdapter_$29559","typeString":"contract BaseParaSwapBuyAdapter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BaseParaSwapBuyAdapter_$29559","typeString":"contract BaseParaSwapBuyAdapter"}],"id":29440,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3363:7:107","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29439,"name":"address","nodeType":"ElementaryTypeName","src":"3363:7:107","typeDescriptions":{}}},"id":29442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3363:13:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":29437,"name":"assetToSwapTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29319,"src":"3339:13:107","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":29438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"3339:23:107","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":29443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3339:38:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3308:69:107"},{"assignments":[29446],"declarations":[{"constant":false,"id":29446,"mutability":"mutable","name":"tokenTransferProxy","nameLocation":"3392:18:107","nodeType":"VariableDeclaration","scope":29557,"src":"3384:26:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29445,"name":"address","nodeType":"ElementaryTypeName","src":"3384:7:107","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":29450,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29447,"name":"augustus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29332,"src":"3413:8:107","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"}},"id":29448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getTokenTransferProxy","nodeType":"MemberAccess","referencedDeclaration":30950,"src":"3413:30:107","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":29449,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3413:32:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3384:61:107"},{"expression":{"arguments":[{"id":29454,"name":"tokenTransferProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29446,"src":"3479:18:107","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":29455,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3499:1:107","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":29451,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29316,"src":"3451:15:107","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":29453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeApprove","nodeType":"MemberAccess","referencedDeclaration":2067,"src":"3451:27:107","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":29456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3451:50:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29457,"nodeType":"ExpressionStatement","src":"3451:50:107"},{"expression":{"arguments":[{"id":29461,"name":"tokenTransferProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29446,"src":"3535:18:107","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29462,"name":"maxAmountToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29321,"src":"3555:15:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":29458,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29316,"src":"3507:15:107","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":29460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeApprove","nodeType":"MemberAccess","referencedDeclaration":2067,"src":"3507:27:107","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":29463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3507:64:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29464,"nodeType":"ExpressionStatement","src":"3507:64:107"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29465,"name":"toAmountOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29311,"src":"3582:14:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":29466,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3600:1:107","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3582:19:107","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29485,"nodeType":"IfStatement","src":"3578:657:107","trueBody":{"id":29484,"nodeType":"Block","src":"3603:632:107","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":29479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29469,"name":"toAmountOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29311,"src":"3787:14:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"34","id":29470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3805:1:107","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"3787:19:107","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29472,"name":"toAmountOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29311,"src":"3810:14:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"hexValue":"3332","id":29476,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3851:2:107","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"}],"expression":{"expression":{"id":29473,"name":"buyCalldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29329,"src":"3828:11:107","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":29474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3828:18:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2239,"src":"3828:22:107","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":29477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3828:26:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3810:44:107","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3787:67:107","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"544f5f414d4f554e545f4f46465345545f4f55545f4f465f52414e4745","id":29480,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3864:31:107","typeDescriptions":{"typeIdentifier":"t_stringliteral_4eedef4370592e3a8bf461b38c88567ca40f914461890c03d6ba3dcb2fd5ff46","typeString":"literal_string \"TO_AMOUNT_OFFSET_OUT_OF_RANGE\""},"value":"TO_AMOUNT_OFFSET_OUT_OF_RANGE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4eedef4370592e3a8bf461b38c88567ca40f914461890c03d6ba3dcb2fd5ff46","typeString":"literal_string \"TO_AMOUNT_OFFSET_OUT_OF_RANGE\""}],"id":29468,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3770:7:107","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":29481,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3770:133:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29482,"nodeType":"ExpressionStatement","src":"3770:133:107"},{"AST":{"nodeType":"YulBlock","src":"4145:84:107","statements":[{"expression":{"arguments":[{"arguments":[{"name":"buyCalldata","nodeType":"YulIdentifier","src":"4166:11:107"},{"arguments":[{"name":"toAmountOffset","nodeType":"YulIdentifier","src":"4183:14:107"},{"kind":"number","nodeType":"YulLiteral","src":"4199:2:107","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4179:3:107"},"nodeType":"YulFunctionCall","src":"4179:23:107"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4162:3:107"},"nodeType":"YulFunctionCall","src":"4162:41:107"},{"name":"amountToReceive","nodeType":"YulIdentifier","src":"4205:15:107"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4155:6:107"},"nodeType":"YulFunctionCall","src":"4155:66:107"},"nodeType":"YulExpressionStatement","src":"4155:66:107"}]},"evmVersion":"london","externalReferences":[{"declaration":29323,"isOffset":false,"isSlot":false,"src":"4205:15:107","valueSize":1},{"declaration":29329,"isOffset":false,"isSlot":false,"src":"4166:11:107","valueSize":1},{"declaration":29311,"isOffset":false,"isSlot":false,"src":"4183:14:107","valueSize":1}],"id":29483,"nodeType":"InlineAssembly","src":"4136:93:107"}]}},{"assignments":[29487,null],"declarations":[{"constant":false,"id":29487,"mutability":"mutable","name":"success","nameLocation":"4246:7:107","nodeType":"VariableDeclaration","scope":29557,"src":"4241:12:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29486,"name":"bool","nodeType":"ElementaryTypeName","src":"4241:4:107","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":29495,"initialValue":{"arguments":[{"id":29493,"name":"buyCalldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29329,"src":"4282:11:107","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":29490,"name":"augustus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29332,"src":"4267:8:107","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"}],"id":29489,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4259:7:107","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29488,"name":"address","nodeType":"ElementaryTypeName","src":"4259:7:107","typeDescriptions":{}}},"id":29491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4259:17:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":29492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"call","nodeType":"MemberAccess","src":"4259:22:107","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":29494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4259:35:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4240:54:107"},{"condition":{"id":29497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4304:8:107","subExpression":{"id":29496,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29487,"src":"4305:7:107","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29500,"nodeType":"IfStatement","src":"4300:167:107","trueBody":{"id":29499,"nodeType":"Block","src":"4314:153:107","statements":[{"AST":{"nodeType":"YulBlock","src":"4369:92:107","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4394:1:107","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4397:1:107","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"4400:14:107"},"nodeType":"YulFunctionCall","src":"4400:16:107"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"4379:14:107"},"nodeType":"YulFunctionCall","src":"4379:38:107"},"nodeType":"YulExpressionStatement","src":"4379:38:107"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4433:1:107","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"4436:14:107"},"nodeType":"YulFunctionCall","src":"4436:16:107"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4426:6:107"},"nodeType":"YulFunctionCall","src":"4426:27:107"},"nodeType":"YulExpressionStatement","src":"4426:27:107"}]},"evmVersion":"london","externalReferences":[],"id":29498,"nodeType":"InlineAssembly","src":"4360:101:107"}]}},{"assignments":[29502],"declarations":[{"constant":false,"id":29502,"mutability":"mutable","name":"balanceAfterAssetFrom","nameLocation":"4481:21:107","nodeType":"VariableDeclaration","scope":29557,"src":"4473:29:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29501,"name":"uint256","nodeType":"ElementaryTypeName","src":"4473:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29510,"initialValue":{"arguments":[{"arguments":[{"id":29507,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4539:4:107","typeDescriptions":{"typeIdentifier":"t_contract$_BaseParaSwapBuyAdapter_$29559","typeString":"contract BaseParaSwapBuyAdapter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BaseParaSwapBuyAdapter_$29559","typeString":"contract BaseParaSwapBuyAdapter"}],"id":29506,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4531:7:107","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29505,"name":"address","nodeType":"ElementaryTypeName","src":"4531:7:107","typeDescriptions":{}}},"id":29508,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4531:13:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":29503,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29316,"src":"4505:15:107","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":29504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"4505:25:107","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":29509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4505:40:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4473:72:107"},{"expression":{"id":29515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":29511,"name":"amountSold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29326,"src":"4551:10:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29512,"name":"balanceBeforeAssetFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29419,"src":"4564:22:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":29513,"name":"balanceAfterAssetFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29502,"src":"4589:21:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4564:46:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4551:59:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29516,"nodeType":"ExpressionStatement","src":"4551:59:107"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29518,"name":"amountSold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29326,"src":"4624:10:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":29519,"name":"maxAmountToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29321,"src":"4638:15:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4624:29:107","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"57524f4e475f42414c414e43455f41465445525f53574150","id":29521,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4655:26:107","typeDescriptions":{"typeIdentifier":"t_stringliteral_9bfa76b9c2e298d52f58639e051d7d21997f6c435f534dfd0c2e6c351c64a39a","typeString":"literal_string \"WRONG_BALANCE_AFTER_SWAP\""},"value":"WRONG_BALANCE_AFTER_SWAP"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9bfa76b9c2e298d52f58639e051d7d21997f6c435f534dfd0c2e6c351c64a39a","typeString":"literal_string \"WRONG_BALANCE_AFTER_SWAP\""}],"id":29517,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4616:7:107","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":29522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4616:66:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29523,"nodeType":"ExpressionStatement","src":"4616:66:107"},{"assignments":[29525],"declarations":[{"constant":false,"id":29525,"mutability":"mutable","name":"amountReceived","nameLocation":"4696:14:107","nodeType":"VariableDeclaration","scope":29557,"src":"4688:22:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29524,"name":"uint256","nodeType":"ElementaryTypeName","src":"4688:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29536,"initialValue":{"arguments":[{"id":29534,"name":"balanceBeforeAssetTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29436,"src":"4756:20:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"arguments":[{"id":29530,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4745:4:107","typeDescriptions":{"typeIdentifier":"t_contract$_BaseParaSwapBuyAdapter_$29559","typeString":"contract BaseParaSwapBuyAdapter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BaseParaSwapBuyAdapter_$29559","typeString":"contract BaseParaSwapBuyAdapter"}],"id":29529,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4737:7:107","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29528,"name":"address","nodeType":"ElementaryTypeName","src":"4737:7:107","typeDescriptions":{}}},"id":29531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4737:13:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":29526,"name":"assetToSwapTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29319,"src":"4713:13:107","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":29527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"4713:23:107","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":29532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4713:38:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2239,"src":"4713:42:107","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":29535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4713:64:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4688:89:107"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29538,"name":"amountReceived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29525,"src":"4791:14:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":29539,"name":"amountToReceive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29323,"src":"4809:15:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4791:33:107","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e53554646494349454e545f414d4f554e545f5245434549564544","id":29541,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4826:30:107","typeDescriptions":{"typeIdentifier":"t_stringliteral_74fc5696336325aeb54c5d19133ed01308c8174de21fc66f38ac28668f995bc7","typeString":"literal_string \"INSUFFICIENT_AMOUNT_RECEIVED\""},"value":"INSUFFICIENT_AMOUNT_RECEIVED"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_74fc5696336325aeb54c5d19133ed01308c8174de21fc66f38ac28668f995bc7","typeString":"literal_string \"INSUFFICIENT_AMOUNT_RECEIVED\""}],"id":29537,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4783:7:107","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":29542,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4783:74:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29543,"nodeType":"ExpressionStatement","src":"4783:74:107"},{"eventCall":{"arguments":[{"arguments":[{"id":29547,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29316,"src":"4884:15:107","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":29546,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4876:7:107","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29545,"name":"address","nodeType":"ElementaryTypeName","src":"4876:7:107","typeDescriptions":{}}},"id":29548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4876:24:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":29551,"name":"assetToSwapTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29319,"src":"4910:13:107","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":29550,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4902:7:107","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29549,"name":"address","nodeType":"ElementaryTypeName","src":"4902:7:107","typeDescriptions":{}}},"id":29552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4902:22:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29553,"name":"amountSold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29326,"src":"4926:10:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29554,"name":"amountReceived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29525,"src":"4938:14:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":29544,"name":"Bought","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29045,"src":"4869:6:107","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":29555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4869:84:107","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29556,"nodeType":"EmitStatement","src":"4864:89:107"}]},"documentation":{"id":29309,"nodeType":"StructuredDocumentation","src":"1508:524:107","text":" @dev Swaps a token for another using ParaSwap\n @param toAmountOffset Offset of toAmount in Augustus calldata if it should be overwritten, otherwise 0\n @param paraswapData Data for Paraswap Adapter\n @param assetToSwapFrom Address of the asset to be swapped from\n @param assetToSwapTo Address of the asset to be swapped to\n @param maxAmountToSwap Max amount to be swapped\n @param amountToReceive Amount to be received from the swap\n @return amountSold The amount sold during the swap"},"id":29558,"implemented":true,"kind":"function","modifiers":[],"name":"_buyOnParaSwap","nameLocation":"2044:14:107","nodeType":"FunctionDefinition","parameters":{"id":29324,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29311,"mutability":"mutable","name":"toAmountOffset","nameLocation":"2072:14:107","nodeType":"VariableDeclaration","scope":29558,"src":"2064:22:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29310,"name":"uint256","nodeType":"ElementaryTypeName","src":"2064:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29313,"mutability":"mutable","name":"paraswapData","nameLocation":"2105:12:107","nodeType":"VariableDeclaration","scope":29558,"src":"2092:25:107","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":29312,"name":"bytes","nodeType":"ElementaryTypeName","src":"2092:5:107","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":29316,"mutability":"mutable","name":"assetToSwapFrom","nameLocation":"2138:15:107","nodeType":"VariableDeclaration","scope":29558,"src":"2123:30:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},"typeName":{"id":29315,"nodeType":"UserDefinedTypeName","pathNode":{"id":29314,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"2123:14:107"},"referencedDeclaration":1464,"src":"2123:14:107","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"visibility":"internal"},{"constant":false,"id":29319,"mutability":"mutable","name":"assetToSwapTo","nameLocation":"2174:13:107","nodeType":"VariableDeclaration","scope":29558,"src":"2159:28:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},"typeName":{"id":29318,"nodeType":"UserDefinedTypeName","pathNode":{"id":29317,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"2159:14:107"},"referencedDeclaration":1464,"src":"2159:14:107","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"visibility":"internal"},{"constant":false,"id":29321,"mutability":"mutable","name":"maxAmountToSwap","nameLocation":"2201:15:107","nodeType":"VariableDeclaration","scope":29558,"src":"2193:23:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29320,"name":"uint256","nodeType":"ElementaryTypeName","src":"2193:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29323,"mutability":"mutable","name":"amountToReceive","nameLocation":"2230:15:107","nodeType":"VariableDeclaration","scope":29558,"src":"2222:23:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29322,"name":"uint256","nodeType":"ElementaryTypeName","src":"2222:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2058:191:107"},"returnParameters":{"id":29327,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29326,"mutability":"mutable","name":"amountSold","nameLocation":"2276:10:107","nodeType":"VariableDeclaration","scope":29558,"src":"2268:18:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29325,"name":"uint256","nodeType":"ElementaryTypeName","src":"2268:7:107","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2267:20:107"},"scope":29559,"src":"2035:2923:107","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":29560,"src":"898:4062:107","usedErrors":[]}],"src":"37:4924:107"},"id":107},"contracts/adapters/paraswap/BaseParaSwapSellAdapter.sol":{"ast":{"absolutePath":"contracts/adapters/paraswap/BaseParaSwapSellAdapter.sol","exportedSymbols":{"BaseParaSwapAdapter":[29245],"BaseParaSwapSellAdapter":[29852],"IERC20Detailed":[1464],"IParaSwapAugustus":[30951],"IParaSwapAugustusRegistry":[30961],"IPoolAddressesProvider":[5069],"PercentageMath":[21132],"SafeERC20":[2190],"SafeMath":[2310]},"id":29853,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":29561,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:108"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol","id":29563,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29853,"sourceUnit":2191,"src":"63:100:108","symbolAliases":[{"foreign":{"id":29562,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:9:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol","id":29565,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29853,"sourceUnit":2311,"src":"164:98:108","symbolAliases":[{"foreign":{"id":29564,"name":"SafeMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"172:8:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol","file":"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol","id":29567,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29853,"sourceUnit":21133,"src":"263:98:108","symbolAliases":[{"foreign":{"id":29566,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"271:14:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","id":29569,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29853,"sourceUnit":5070,"src":"362:101:108","symbolAliases":[{"foreign":{"id":29568,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"370:22:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","id":29571,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29853,"sourceUnit":1465,"src":"464:110:108","symbolAliases":[{"foreign":{"id":29570,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"src":"472:14:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/adapters/paraswap/interfaces/IParaSwapAugustus.sol","file":"./interfaces/IParaSwapAugustus.sol","id":29573,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29853,"sourceUnit":30952,"src":"575:69:108","symbolAliases":[{"foreign":{"id":29572,"name":"IParaSwapAugustus","nodeType":"Identifier","overloadedDeclarations":[],"src":"583:17:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/adapters/paraswap/interfaces/IParaSwapAugustusRegistry.sol","file":"./interfaces/IParaSwapAugustusRegistry.sol","id":29575,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29853,"sourceUnit":30962,"src":"645:85:108","symbolAliases":[{"foreign":{"id":29574,"name":"IParaSwapAugustusRegistry","nodeType":"Identifier","overloadedDeclarations":[],"src":"653:25:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/adapters/paraswap/BaseParaSwapAdapter.sol","file":"./BaseParaSwapAdapter.sol","id":29577,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29853,"sourceUnit":29246,"src":"731:62:108","symbolAliases":[{"foreign":{"id":29576,"name":"BaseParaSwapAdapter","nodeType":"Identifier","overloadedDeclarations":[],"src":"739:19:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":29579,"name":"BaseParaSwapAdapter","nodeType":"IdentifierPath","referencedDeclaration":29245,"src":"975:19:108"},"id":29580,"nodeType":"InheritanceSpecifier","src":"975:19:108"}],"canonicalName":"BaseParaSwapSellAdapter","contractDependencies":[],"contractKind":"contract","documentation":{"id":29578,"nodeType":"StructuredDocumentation","src":"795:134:108","text":" @title BaseParaSwapSellAdapter\n @notice Implements the logic for selling tokens on ParaSwap\n @author Jason Raymond Bell"},"fullyImplemented":false,"id":29852,"linearizedBaseContracts":[29852,29245,1573,748,3466,3541],"name":"BaseParaSwapSellAdapter","nameLocation":"948:23:108","nodeType":"ContractDefinition","nodes":[{"id":29583,"libraryName":{"id":29581,"name":"PercentageMath","nodeType":"IdentifierPath","referencedDeclaration":21132,"src":"1005:14:108"},"nodeType":"UsingForDirective","src":"999:33:108","typeName":{"id":29582,"name":"uint256","nodeType":"ElementaryTypeName","src":"1024:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":29586,"libraryName":{"id":29584,"name":"SafeMath","nodeType":"IdentifierPath","referencedDeclaration":2310,"src":"1041:8:108"},"nodeType":"UsingForDirective","src":"1035:27:108","typeName":{"id":29585,"name":"uint256","nodeType":"ElementaryTypeName","src":"1054:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":29590,"libraryName":{"id":29587,"name":"SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":2190,"src":"1071:9:108"},"nodeType":"UsingForDirective","src":"1065:35:108","typeName":{"id":29589,"nodeType":"UserDefinedTypeName","pathNode":{"id":29588,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"1085:14:108"},"referencedDeclaration":1464,"src":"1085:14:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}},{"constant":false,"functionSelector":"3a829867","id":29593,"mutability":"immutable","name":"AUGUSTUS_REGISTRY","nameLocation":"1147:17:108","nodeType":"VariableDeclaration","scope":29852,"src":"1104:60:108","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"},"typeName":{"id":29592,"nodeType":"UserDefinedTypeName","pathNode":{"id":29591,"name":"IParaSwapAugustusRegistry","nodeType":"IdentifierPath","referencedDeclaration":30961,"src":"1104:25:108"},"referencedDeclaration":30961,"src":"1104:25:108","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"}},"visibility":"public"},{"body":{"id":29620,"nodeType":"Block","src":"1318:187:108","statements":[{"expression":{"arguments":[{"id":29613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1412:45:108","subExpression":{"arguments":[{"arguments":[{"hexValue":"30","id":29610,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1454:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":29609,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1446:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29608,"name":"address","nodeType":"ElementaryTypeName","src":"1446:7:108","typeDescriptions":{}}},"id":29611,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1446:10:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":29606,"name":"augustusRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29599,"src":"1413:16:108","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"}},"id":29607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isValidAugustus","nodeType":"MemberAccess","referencedDeclaration":30960,"src":"1413:32:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":29612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1413:44:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":29605,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1404:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":29614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1404:54:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29615,"nodeType":"ExpressionStatement","src":"1404:54:108"},{"expression":{"id":29618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":29616,"name":"AUGUSTUS_REGISTRY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29593,"src":"1464:17:108","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":29617,"name":"augustusRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29599,"src":"1484:16:108","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"}},"src":"1464:36:108","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"}},"id":29619,"nodeType":"ExpressionStatement","src":"1464:36:108"}]},"id":29621,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":29602,"name":"addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29596,"src":"1299:17:108","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}}],"id":29603,"kind":"baseConstructorSpecifier","modifierName":{"id":29601,"name":"BaseParaSwapAdapter","nodeType":"IdentifierPath","referencedDeclaration":29245,"src":"1279:19:108"},"nodeType":"ModifierInvocation","src":"1279:38:108"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":29600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29596,"mutability":"mutable","name":"addressesProvider","nameLocation":"1209:17:108","nodeType":"VariableDeclaration","scope":29621,"src":"1186:40:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":29595,"nodeType":"UserDefinedTypeName","pathNode":{"id":29594,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"1186:22:108"},"referencedDeclaration":5069,"src":"1186:22:108","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"},{"constant":false,"id":29599,"mutability":"mutable","name":"augustusRegistry","nameLocation":"1258:16:108","nodeType":"VariableDeclaration","scope":29621,"src":"1232:42:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"},"typeName":{"id":29598,"nodeType":"UserDefinedTypeName","pathNode":{"id":29597,"name":"IParaSwapAugustusRegistry","nodeType":"IdentifierPath","referencedDeclaration":30961,"src":"1232:25:108"},"referencedDeclaration":30961,"src":"1232:25:108","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"}},"visibility":"internal"}],"src":"1180:98:108"},"returnParameters":{"id":29604,"nodeType":"ParameterList","parameters":[],"src":"1318:0:108"},"scope":29852,"src":"1169:336:108","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":29850,"nodeType":"Block","src":"2433:2451:108","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":29649,"name":"augustus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29629,"src":"2489:8:108","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"}],"id":29648,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2481:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29647,"name":"address","nodeType":"ElementaryTypeName","src":"2481:7:108","typeDescriptions":{}}},"id":29650,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2481:17:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":29645,"name":"AUGUSTUS_REGISTRY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29593,"src":"2447:17:108","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"}},"id":29646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isValidAugustus","nodeType":"MemberAccess","referencedDeclaration":30960,"src":"2447:33:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":29651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2447:52:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e56414c49445f4155475553545553","id":29652,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2501:18:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_3202e1fc4f78abbce03a97de69392b3f69ebba48c41588ffb32a1c8b97349f74","typeString":"literal_string \"INVALID_AUGUSTUS\""},"value":"INVALID_AUGUSTUS"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3202e1fc4f78abbce03a97de69392b3f69ebba48c41588ffb32a1c8b97349f74","typeString":"literal_string \"INVALID_AUGUSTUS\""}],"id":29644,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2439:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":29653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2439:81:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29654,"nodeType":"ExpressionStatement","src":"2439:81:108"},{"id":29718,"nodeType":"Block","src":"2527:602:108","statements":[{"assignments":[29656],"declarations":[{"constant":false,"id":29656,"mutability":"mutable","name":"fromAssetDecimals","nameLocation":"2543:17:108","nodeType":"VariableDeclaration","scope":29718,"src":"2535:25:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29655,"name":"uint256","nodeType":"ElementaryTypeName","src":"2535:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29660,"initialValue":{"arguments":[{"id":29658,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29632,"src":"2576:15:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":29657,"name":"_getDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29102,"src":"2563:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20Detailed_$1464_$returns$_t_uint8_$","typeString":"function (contract IERC20Detailed) view returns (uint8)"}},"id":29659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2563:29:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"2535:57:108"},{"assignments":[29662],"declarations":[{"constant":false,"id":29662,"mutability":"mutable","name":"toAssetDecimals","nameLocation":"2608:15:108","nodeType":"VariableDeclaration","scope":29718,"src":"2600:23:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29661,"name":"uint256","nodeType":"ElementaryTypeName","src":"2600:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29666,"initialValue":{"arguments":[{"id":29664,"name":"assetToSwapTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29635,"src":"2639:13:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":29663,"name":"_getDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29102,"src":"2626:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20Detailed_$1464_$returns$_t_uint8_$","typeString":"function (contract IERC20Detailed) view returns (uint8)"}},"id":29665,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2626:27:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"2600:53:108"},{"assignments":[29668],"declarations":[{"constant":false,"id":29668,"mutability":"mutable","name":"fromAssetPrice","nameLocation":"2670:14:108","nodeType":"VariableDeclaration","scope":29718,"src":"2662:22:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29667,"name":"uint256","nodeType":"ElementaryTypeName","src":"2662:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29675,"initialValue":{"arguments":[{"arguments":[{"id":29672,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29632,"src":"2705:15:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":29671,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2697:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29670,"name":"address","nodeType":"ElementaryTypeName","src":"2697:7:108","typeDescriptions":{}}},"id":29673,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2697:24:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":29669,"name":"_getPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29077,"src":"2687:9:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":29674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2687:35:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2662:60:108"},{"assignments":[29677],"declarations":[{"constant":false,"id":29677,"mutability":"mutable","name":"toAssetPrice","nameLocation":"2738:12:108","nodeType":"VariableDeclaration","scope":29718,"src":"2730:20:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29676,"name":"uint256","nodeType":"ElementaryTypeName","src":"2730:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29684,"initialValue":{"arguments":[{"arguments":[{"id":29681,"name":"assetToSwapTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29635,"src":"2771:13:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":29680,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2763:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29679,"name":"address","nodeType":"ElementaryTypeName","src":"2763:7:108","typeDescriptions":{}}},"id":29682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2763:22:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":29678,"name":"_getPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29077,"src":"2753:9:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":29683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2753:33:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2730:56:108"},{"assignments":[29686],"declarations":[{"constant":false,"id":29686,"mutability":"mutable","name":"expectedMinAmountOut","nameLocation":"2803:20:108","nodeType":"VariableDeclaration","scope":29718,"src":"2795:28:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29685,"name":"uint256","nodeType":"ElementaryTypeName","src":"2795:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29710,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":29705,"name":"PercentageMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21132,"src":"2971:14:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PercentageMath_$21132_$","typeString":"type(library PercentageMath)"}},"id":29706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"PERCENTAGE_FACTOR","nodeType":"MemberAccess","referencedDeclaration":21104,"src":"2971:32:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":29707,"name":"MAX_SLIPPAGE_PERCENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29022,"src":"3006:20:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2971:55:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":29699,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2925:2:108","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":29700,"name":"fromAssetDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29656,"src":"2931:17:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2925:23:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":29697,"name":"toAssetPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29677,"src":"2908:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mul","nodeType":"MemberAccess","referencedDeclaration":2294,"src":"2908:16:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":29702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2908:41:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":29691,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2871:2:108","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":29692,"name":"toAssetDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29662,"src":"2877:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2871:21:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":29689,"name":"fromAssetPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29668,"src":"2852:14:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mul","nodeType":"MemberAccess","referencedDeclaration":2294,"src":"2852:18:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":29694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2852:41:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":29687,"name":"amountToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29637,"src":"2826:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mul","nodeType":"MemberAccess","referencedDeclaration":2294,"src":"2826:25:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":29695,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2826:68:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"div","nodeType":"MemberAccess","referencedDeclaration":2309,"src":"2826:81:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":29703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2826:124:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"percentMul","nodeType":"MemberAccess","referencedDeclaration":21119,"src":"2826:144:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":29709,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2826:201:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2795:232:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29712,"name":"expectedMinAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29686,"src":"3044:20:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":29713,"name":"minAmountToReceive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29639,"src":"3068:18:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3044:42:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d494e5f414d4f554e545f455843454544535f4d41585f534c495050414745","id":29715,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3088:33:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_8333172953304c474b0cfe8eccb09fd2b08c1198c3d73a3ed0388645fb84d24e","typeString":"literal_string \"MIN_AMOUNT_EXCEEDS_MAX_SLIPPAGE\""},"value":"MIN_AMOUNT_EXCEEDS_MAX_SLIPPAGE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8333172953304c474b0cfe8eccb09fd2b08c1198c3d73a3ed0388645fb84d24e","typeString":"literal_string \"MIN_AMOUNT_EXCEEDS_MAX_SLIPPAGE\""}],"id":29711,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3036:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":29716,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3036:86:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29717,"nodeType":"ExpressionStatement","src":"3036:86:108"}]},{"assignments":[29720],"declarations":[{"constant":false,"id":29720,"mutability":"mutable","name":"balanceBeforeAssetFrom","nameLocation":"3143:22:108","nodeType":"VariableDeclaration","scope":29850,"src":"3135:30:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29719,"name":"uint256","nodeType":"ElementaryTypeName","src":"3135:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29728,"initialValue":{"arguments":[{"arguments":[{"id":29725,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3202:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_BaseParaSwapSellAdapter_$29852","typeString":"contract BaseParaSwapSellAdapter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BaseParaSwapSellAdapter_$29852","typeString":"contract BaseParaSwapSellAdapter"}],"id":29724,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3194:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29723,"name":"address","nodeType":"ElementaryTypeName","src":"3194:7:108","typeDescriptions":{}}},"id":29726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3194:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":29721,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29632,"src":"3168:15:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":29722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"3168:25:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":29727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3168:40:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3135:73:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29730,"name":"balanceBeforeAssetFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29720,"src":"3222:22:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":29731,"name":"amountToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29637,"src":"3248:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3222:38:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e53554646494349454e545f42414c414e43455f4245464f52455f53574150","id":29733,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3262:34:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_51fc4946c16284910827fc38bc7611d60d4dd1f7d8fefa0da6f8642035c3c48b","typeString":"literal_string \"INSUFFICIENT_BALANCE_BEFORE_SWAP\""},"value":"INSUFFICIENT_BALANCE_BEFORE_SWAP"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_51fc4946c16284910827fc38bc7611d60d4dd1f7d8fefa0da6f8642035c3c48b","typeString":"literal_string \"INSUFFICIENT_BALANCE_BEFORE_SWAP\""}],"id":29729,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3214:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":29734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3214:83:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29735,"nodeType":"ExpressionStatement","src":"3214:83:108"},{"assignments":[29737],"declarations":[{"constant":false,"id":29737,"mutability":"mutable","name":"balanceBeforeAssetTo","nameLocation":"3311:20:108","nodeType":"VariableDeclaration","scope":29850,"src":"3303:28:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29736,"name":"uint256","nodeType":"ElementaryTypeName","src":"3303:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29745,"initialValue":{"arguments":[{"arguments":[{"id":29742,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3366:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_BaseParaSwapSellAdapter_$29852","typeString":"contract BaseParaSwapSellAdapter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BaseParaSwapSellAdapter_$29852","typeString":"contract BaseParaSwapSellAdapter"}],"id":29741,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3358:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29740,"name":"address","nodeType":"ElementaryTypeName","src":"3358:7:108","typeDescriptions":{}}},"id":29743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3358:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":29738,"name":"assetToSwapTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29635,"src":"3334:13:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":29739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"3334:23:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":29744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3334:38:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3303:69:108"},{"assignments":[29747],"declarations":[{"constant":false,"id":29747,"mutability":"mutable","name":"tokenTransferProxy","nameLocation":"3387:18:108","nodeType":"VariableDeclaration","scope":29850,"src":"3379:26:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29746,"name":"address","nodeType":"ElementaryTypeName","src":"3379:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":29751,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29748,"name":"augustus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29629,"src":"3408:8:108","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"}},"id":29749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getTokenTransferProxy","nodeType":"MemberAccess","referencedDeclaration":30950,"src":"3408:30:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":29750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3408:32:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3379:61:108"},{"expression":{"arguments":[{"id":29755,"name":"tokenTransferProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29747,"src":"3474:18:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":29756,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3494:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":29752,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29632,"src":"3446:15:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":29754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeApprove","nodeType":"MemberAccess","referencedDeclaration":2067,"src":"3446:27:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":29757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3446:50:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29758,"nodeType":"ExpressionStatement","src":"3446:50:108"},{"expression":{"arguments":[{"id":29762,"name":"tokenTransferProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29747,"src":"3530:18:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29763,"name":"amountToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29637,"src":"3550:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":29759,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29632,"src":"3502:15:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":29761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeApprove","nodeType":"MemberAccess","referencedDeclaration":2067,"src":"3502:27:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":29764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3502:61:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29765,"nodeType":"ExpressionStatement","src":"3502:61:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29766,"name":"fromAmountOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29624,"src":"3574:16:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":29767,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3594:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3574:21:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29786,"nodeType":"IfStatement","src":"3570:666:108","trueBody":{"id":29785,"nodeType":"Block","src":"3597:639:108","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":29780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29770,"name":"fromAmountOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29624,"src":"3777:16:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"34","id":29771,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3797:1:108","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"3777:21:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29773,"name":"fromAmountOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29624,"src":"3802:16:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"hexValue":"3332","id":29777,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3846:2:108","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"}],"expression":{"expression":{"id":29774,"name":"swapCalldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29626,"src":"3822:12:108","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":29775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3822:19:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2239,"src":"3822:23:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":29778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3822:27:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3802:47:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3777:72:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"46524f4d5f414d4f554e545f4f46465345545f4f55545f4f465f52414e4745","id":29781,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3859:33:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_f920786e74a0af1b51a64ca021265d328aab062025c81f249165aca83960cff7","typeString":"literal_string \"FROM_AMOUNT_OFFSET_OUT_OF_RANGE\""},"value":"FROM_AMOUNT_OFFSET_OUT_OF_RANGE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f920786e74a0af1b51a64ca021265d328aab062025c81f249165aca83960cff7","typeString":"literal_string \"FROM_AMOUNT_OFFSET_OUT_OF_RANGE\""}],"id":29769,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3760:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":29782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3760:140:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29783,"nodeType":"ExpressionStatement","src":"3760:140:108"},{"AST":{"nodeType":"YulBlock","src":"4146:84:108","statements":[{"expression":{"arguments":[{"arguments":[{"name":"swapCalldata","nodeType":"YulIdentifier","src":"4167:12:108"},{"arguments":[{"name":"fromAmountOffset","nodeType":"YulIdentifier","src":"4185:16:108"},{"kind":"number","nodeType":"YulLiteral","src":"4203:2:108","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4181:3:108"},"nodeType":"YulFunctionCall","src":"4181:25:108"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4163:3:108"},"nodeType":"YulFunctionCall","src":"4163:44:108"},{"name":"amountToSwap","nodeType":"YulIdentifier","src":"4209:12:108"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4156:6:108"},"nodeType":"YulFunctionCall","src":"4156:66:108"},"nodeType":"YulExpressionStatement","src":"4156:66:108"}]},"evmVersion":"london","externalReferences":[{"declaration":29637,"isOffset":false,"isSlot":false,"src":"4209:12:108","valueSize":1},{"declaration":29624,"isOffset":false,"isSlot":false,"src":"4185:16:108","valueSize":1},{"declaration":29626,"isOffset":false,"isSlot":false,"src":"4167:12:108","valueSize":1}],"id":29784,"nodeType":"InlineAssembly","src":"4137:93:108"}]}},{"assignments":[29788,null],"declarations":[{"constant":false,"id":29788,"mutability":"mutable","name":"success","nameLocation":"4247:7:108","nodeType":"VariableDeclaration","scope":29850,"src":"4242:12:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29787,"name":"bool","nodeType":"ElementaryTypeName","src":"4242:4:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":29796,"initialValue":{"arguments":[{"id":29794,"name":"swapCalldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29626,"src":"4283:12:108","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":29791,"name":"augustus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29629,"src":"4268:8:108","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"}],"id":29790,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4260:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29789,"name":"address","nodeType":"ElementaryTypeName","src":"4260:7:108","typeDescriptions":{}}},"id":29792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4260:17:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":29793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"call","nodeType":"MemberAccess","src":"4260:22:108","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":29795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4260:36:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4241:55:108"},{"condition":{"id":29798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4306:8:108","subExpression":{"id":29797,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29788,"src":"4307:7:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29801,"nodeType":"IfStatement","src":"4302:167:108","trueBody":{"id":29800,"nodeType":"Block","src":"4316:153:108","statements":[{"AST":{"nodeType":"YulBlock","src":"4371:92:108","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4396:1:108","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4399:1:108","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"4402:14:108"},"nodeType":"YulFunctionCall","src":"4402:16:108"}],"functionName":{"name":"returndatacopy","nodeType":"YulIdentifier","src":"4381:14:108"},"nodeType":"YulFunctionCall","src":"4381:38:108"},"nodeType":"YulExpressionStatement","src":"4381:38:108"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4435:1:108","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nodeType":"YulIdentifier","src":"4438:14:108"},"nodeType":"YulFunctionCall","src":"4438:16:108"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4428:6:108"},"nodeType":"YulFunctionCall","src":"4428:27:108"},"nodeType":"YulExpressionStatement","src":"4428:27:108"}]},"evmVersion":"london","externalReferences":[],"id":29799,"nodeType":"InlineAssembly","src":"4362:101:108"}]}},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":29807,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4523:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_BaseParaSwapSellAdapter_$29852","typeString":"contract BaseParaSwapSellAdapter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BaseParaSwapSellAdapter_$29852","typeString":"contract BaseParaSwapSellAdapter"}],"id":29806,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4515:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29805,"name":"address","nodeType":"ElementaryTypeName","src":"4515:7:108","typeDescriptions":{}}},"id":29808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4515:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":29803,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29632,"src":"4489:15:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":29804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"4489:25:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":29809,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4489:40:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29810,"name":"balanceBeforeAssetFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29720,"src":"4533:22:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":29811,"name":"amountToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29637,"src":"4558:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4533:37:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4489:81:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"57524f4e475f42414c414e43455f41465445525f53574150","id":29814,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4578:26:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_9bfa76b9c2e298d52f58639e051d7d21997f6c435f534dfd0c2e6c351c64a39a","typeString":"literal_string \"WRONG_BALANCE_AFTER_SWAP\""},"value":"WRONG_BALANCE_AFTER_SWAP"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9bfa76b9c2e298d52f58639e051d7d21997f6c435f534dfd0c2e6c351c64a39a","typeString":"literal_string \"WRONG_BALANCE_AFTER_SWAP\""}],"id":29802,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4474:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":29815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4474:136:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29816,"nodeType":"ExpressionStatement","src":"4474:136:108"},{"expression":{"id":29828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":29817,"name":"amountReceived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29642,"src":"4616:14:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":29826,"name":"balanceBeforeAssetTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29737,"src":"4676:20:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"arguments":[{"id":29822,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4665:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_BaseParaSwapSellAdapter_$29852","typeString":"contract BaseParaSwapSellAdapter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BaseParaSwapSellAdapter_$29852","typeString":"contract BaseParaSwapSellAdapter"}],"id":29821,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4657:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29820,"name":"address","nodeType":"ElementaryTypeName","src":"4657:7:108","typeDescriptions":{}}},"id":29823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4657:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":29818,"name":"assetToSwapTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29635,"src":"4633:13:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":29819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"4633:23:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":29824,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4633:38:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2239,"src":"4633:42:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":29827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4633:64:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4616:81:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29829,"nodeType":"ExpressionStatement","src":"4616:81:108"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29831,"name":"amountReceived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29642,"src":"4711:14:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":29832,"name":"minAmountToReceive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29639,"src":"4729:18:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4711:36:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e53554646494349454e545f414d4f554e545f5245434549564544","id":29834,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4749:30:108","typeDescriptions":{"typeIdentifier":"t_stringliteral_74fc5696336325aeb54c5d19133ed01308c8174de21fc66f38ac28668f995bc7","typeString":"literal_string \"INSUFFICIENT_AMOUNT_RECEIVED\""},"value":"INSUFFICIENT_AMOUNT_RECEIVED"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_74fc5696336325aeb54c5d19133ed01308c8174de21fc66f38ac28668f995bc7","typeString":"literal_string \"INSUFFICIENT_AMOUNT_RECEIVED\""}],"id":29830,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4703:7:108","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":29835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4703:77:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29836,"nodeType":"ExpressionStatement","src":"4703:77:108"},{"eventCall":{"arguments":[{"arguments":[{"id":29840,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29632,"src":"4808:15:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":29839,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4800:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29838,"name":"address","nodeType":"ElementaryTypeName","src":"4800:7:108","typeDescriptions":{}}},"id":29841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4800:24:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":29844,"name":"assetToSwapTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29635,"src":"4834:13:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":29843,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4826:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29842,"name":"address","nodeType":"ElementaryTypeName","src":"4826:7:108","typeDescriptions":{}}},"id":29845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4826:22:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29846,"name":"amountToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29637,"src":"4850:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29847,"name":"amountReceived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29642,"src":"4864:14:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":29837,"name":"Swapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29035,"src":"4792:7:108","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":29848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4792:87:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29849,"nodeType":"EmitStatement","src":"4787:92:108"}]},"documentation":{"id":29622,"nodeType":"StructuredDocumentation","src":"1509:629:108","text":" @dev Swaps a token for another using ParaSwap\n @param fromAmountOffset Offset of fromAmount in Augustus calldata if it should be overwritten, otherwise 0\n @param swapCalldata Calldata for ParaSwap's AugustusSwapper contract\n @param augustus Address of ParaSwap's AugustusSwapper contract\n @param assetToSwapFrom Address of the asset to be swapped from\n @param assetToSwapTo Address of the asset to be swapped to\n @param amountToSwap Amount to be swapped\n @param minAmountToReceive Minimum amount to be received from the swap\n @return amountReceived The amount received from the swap"},"id":29851,"implemented":true,"kind":"function","modifiers":[],"name":"_sellOnParaSwap","nameLocation":"2150:15:108","nodeType":"FunctionDefinition","parameters":{"id":29640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29624,"mutability":"mutable","name":"fromAmountOffset","nameLocation":"2179:16:108","nodeType":"VariableDeclaration","scope":29851,"src":"2171:24:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29623,"name":"uint256","nodeType":"ElementaryTypeName","src":"2171:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29626,"mutability":"mutable","name":"swapCalldata","nameLocation":"2214:12:108","nodeType":"VariableDeclaration","scope":29851,"src":"2201:25:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":29625,"name":"bytes","nodeType":"ElementaryTypeName","src":"2201:5:108","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":29629,"mutability":"mutable","name":"augustus","nameLocation":"2250:8:108","nodeType":"VariableDeclaration","scope":29851,"src":"2232:26:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"},"typeName":{"id":29628,"nodeType":"UserDefinedTypeName","pathNode":{"id":29627,"name":"IParaSwapAugustus","nodeType":"IdentifierPath","referencedDeclaration":30951,"src":"2232:17:108"},"referencedDeclaration":30951,"src":"2232:17:108","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"}},"visibility":"internal"},{"constant":false,"id":29632,"mutability":"mutable","name":"assetToSwapFrom","nameLocation":"2279:15:108","nodeType":"VariableDeclaration","scope":29851,"src":"2264:30:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},"typeName":{"id":29631,"nodeType":"UserDefinedTypeName","pathNode":{"id":29630,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"2264:14:108"},"referencedDeclaration":1464,"src":"2264:14:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"visibility":"internal"},{"constant":false,"id":29635,"mutability":"mutable","name":"assetToSwapTo","nameLocation":"2315:13:108","nodeType":"VariableDeclaration","scope":29851,"src":"2300:28:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},"typeName":{"id":29634,"nodeType":"UserDefinedTypeName","pathNode":{"id":29633,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"2300:14:108"},"referencedDeclaration":1464,"src":"2300:14:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"visibility":"internal"},{"constant":false,"id":29637,"mutability":"mutable","name":"amountToSwap","nameLocation":"2342:12:108","nodeType":"VariableDeclaration","scope":29851,"src":"2334:20:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29636,"name":"uint256","nodeType":"ElementaryTypeName","src":"2334:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29639,"mutability":"mutable","name":"minAmountToReceive","nameLocation":"2368:18:108","nodeType":"VariableDeclaration","scope":29851,"src":"2360:26:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29638,"name":"uint256","nodeType":"ElementaryTypeName","src":"2360:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2165:225:108"},"returnParameters":{"id":29643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29642,"mutability":"mutable","name":"amountReceived","nameLocation":"2417:14:108","nodeType":"VariableDeclaration","scope":29851,"src":"2409:22:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29641,"name":"uint256","nodeType":"ElementaryTypeName","src":"2409:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2408:24:108"},"scope":29852,"src":"2141:2743:108","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":29853,"src":"930:3956:108","usedErrors":[]}],"src":"37:4850:108"},"id":108},"contracts/adapters/paraswap/ParaSwapLiquiditySwapAdapter.sol":{"ast":{"absolutePath":"contracts/adapters/paraswap/ParaSwapLiquiditySwapAdapter.sol","exportedSymbols":{"BaseParaSwapSellAdapter":[29852],"IERC20Detailed":[1464],"IERC20WithPermit":[4127],"IParaSwapAugustus":[30951],"IParaSwapAugustusRegistry":[30961],"IPoolAddressesProvider":[5069],"ParaSwapLiquiditySwapAdapter":[30289],"ReentrancyGuard":[31001],"SafeERC20":[2190],"SafeMath":[2310]},"id":30290,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":29854,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:109"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","id":29856,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30290,"sourceUnit":1465,"src":"63:110:109","symbolAliases":[{"foreign":{"id":29855,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:14:109","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol","file":"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol","id":29858,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30290,"sourceUnit":4128,"src":"174:89:109","symbolAliases":[{"foreign":{"id":29857,"name":"IERC20WithPermit","nodeType":"Identifier","overloadedDeclarations":[],"src":"182:16:109","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","id":29860,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30290,"sourceUnit":5070,"src":"264:101:109","symbolAliases":[{"foreign":{"id":29859,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"272:22:109","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol","id":29862,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30290,"sourceUnit":2191,"src":"366:100:109","symbolAliases":[{"foreign":{"id":29861,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"374:9:109","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol","id":29864,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30290,"sourceUnit":2311,"src":"467:98:109","symbolAliases":[{"foreign":{"id":29863,"name":"SafeMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"475:8:109","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/adapters/paraswap/BaseParaSwapSellAdapter.sol","file":"./BaseParaSwapSellAdapter.sol","id":29866,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30290,"sourceUnit":29853,"src":"566:70:109","symbolAliases":[{"foreign":{"id":29865,"name":"BaseParaSwapSellAdapter","nodeType":"Identifier","overloadedDeclarations":[],"src":"574:23:109","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/adapters/paraswap/interfaces/IParaSwapAugustusRegistry.sol","file":"./interfaces/IParaSwapAugustusRegistry.sol","id":29868,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30290,"sourceUnit":30962,"src":"637:85:109","symbolAliases":[{"foreign":{"id":29867,"name":"IParaSwapAugustusRegistry","nodeType":"Identifier","overloadedDeclarations":[],"src":"645:25:109","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/adapters/paraswap/interfaces/IParaSwapAugustus.sol","file":"./interfaces/IParaSwapAugustus.sol","id":29870,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30290,"sourceUnit":30952,"src":"723:69:109","symbolAliases":[{"foreign":{"id":29869,"name":"IParaSwapAugustus","nodeType":"Identifier","overloadedDeclarations":[],"src":"731:17:109","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/ReentrancyGuard.sol","file":"../../dependencies/openzeppelin/ReentrancyGuard.sol","id":29872,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30290,"sourceUnit":31002,"src":"793:84:109","symbolAliases":[{"foreign":{"id":29871,"name":"ReentrancyGuard","nodeType":"Identifier","overloadedDeclarations":[],"src":"801:15:109","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":29874,"name":"BaseParaSwapSellAdapter","nodeType":"IdentifierPath","referencedDeclaration":29852,"src":"1050:23:109"},"id":29875,"nodeType":"InheritanceSpecifier","src":"1050:23:109"},{"baseName":{"id":29876,"name":"ReentrancyGuard","nodeType":"IdentifierPath","referencedDeclaration":31001,"src":"1075:15:109"},"id":29877,"nodeType":"InheritanceSpecifier","src":"1075:15:109"}],"canonicalName":"ParaSwapLiquiditySwapAdapter","contractDependencies":[],"contractKind":"contract","documentation":{"id":29873,"nodeType":"StructuredDocumentation","src":"879:129:109","text":" @title ParaSwapLiquiditySwapAdapter\n @notice Adapter to swap liquidity using ParaSwap.\n @author Jason Raymond Bell"},"fullyImplemented":true,"id":30289,"linearizedBaseContracts":[30289,31001,29852,29245,1573,748,3466,3541],"name":"ParaSwapLiquiditySwapAdapter","nameLocation":"1018:28:109","nodeType":"ContractDefinition","nodes":[{"id":29880,"libraryName":{"id":29878,"name":"SafeMath","nodeType":"IdentifierPath","referencedDeclaration":2310,"src":"1101:8:109"},"nodeType":"UsingForDirective","src":"1095:27:109","typeName":{"id":29879,"name":"uint256","nodeType":"ElementaryTypeName","src":"1114:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":29884,"libraryName":{"id":29881,"name":"SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":2190,"src":"1131:9:109"},"nodeType":"UsingForDirective","src":"1125:35:109","typeName":{"id":29883,"nodeType":"UserDefinedTypeName","pathNode":{"id":29882,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"1145:14:109"},"referencedDeclaration":1464,"src":"1145:14:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}},{"body":{"id":29903,"nodeType":"Block","src":"1354:35:109","statements":[{"expression":{"arguments":[{"id":29900,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29892,"src":"1378:5:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":29899,"name":"transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1572,"src":"1360:17:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":29901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1360:24:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29902,"nodeType":"ExpressionStatement","src":"1360:24:109"}]},"id":29904,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":29895,"name":"addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29887,"src":"1317:17:109","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},{"id":29896,"name":"augustusRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29890,"src":"1336:16:109","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"}}],"id":29897,"kind":"baseConstructorSpecifier","modifierName":{"id":29894,"name":"BaseParaSwapSellAdapter","nodeType":"IdentifierPath","referencedDeclaration":29852,"src":"1293:23:109"},"nodeType":"ModifierInvocation","src":"1293:60:109"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":29893,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29887,"mutability":"mutable","name":"addressesProvider","nameLocation":"1204:17:109","nodeType":"VariableDeclaration","scope":29904,"src":"1181:40:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":29886,"nodeType":"UserDefinedTypeName","pathNode":{"id":29885,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"1181:22:109"},"referencedDeclaration":5069,"src":"1181:22:109","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"},{"constant":false,"id":29890,"mutability":"mutable","name":"augustusRegistry","nameLocation":"1253:16:109","nodeType":"VariableDeclaration","scope":29904,"src":"1227:42:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"},"typeName":{"id":29889,"nodeType":"UserDefinedTypeName","pathNode":{"id":29888,"name":"IParaSwapAugustusRegistry","nodeType":"IdentifierPath","referencedDeclaration":30961,"src":"1227:25:109"},"referencedDeclaration":30961,"src":"1227:25:109","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"}},"visibility":"internal"},{"constant":false,"id":29892,"mutability":"mutable","name":"owner","nameLocation":"1283:5:109","nodeType":"VariableDeclaration","scope":29904,"src":"1275:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29891,"name":"address","nodeType":"ElementaryTypeName","src":"1275:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1175:117:109"},"returnParameters":{"id":29898,"nodeType":"ParameterList","parameters":[],"src":"1354:0:109"},"scope":30289,"src":"1164:225:109","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[3528],"body":{"id":29998,"nodeType":"Block","src":"2870:861:109","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":29930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":29924,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2884:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":29925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2884:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":29928,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"2906:4:109","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}],"id":29927,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2898:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":29926,"name":"address","nodeType":"ElementaryTypeName","src":"2898:7:109","typeDescriptions":{}}},"id":29929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2898:13:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2884:27:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"43414c4c45525f4d5553545f42455f504f4f4c","id":29931,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2913:21:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_f253c60ca7289769121ceb7e8a55d2372f327bb2c0c90e8e3ba6b77e057d495e","typeString":"literal_string \"CALLER_MUST_BE_POOL\""},"value":"CALLER_MUST_BE_POOL"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f253c60ca7289769121ceb7e8a55d2372f327bb2c0c90e8e3ba6b77e057d495e","typeString":"literal_string \"CALLER_MUST_BE_POOL\""}],"id":29923,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2876:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":29932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2876:59:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29933,"nodeType":"ExpressionStatement","src":"2876:59:109"},{"assignments":[29935],"declarations":[{"constant":false,"id":29935,"mutability":"mutable","name":"flashLoanAmount","nameLocation":"2950:15:109","nodeType":"VariableDeclaration","scope":29998,"src":"2942:23:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29934,"name":"uint256","nodeType":"ElementaryTypeName","src":"2942:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29937,"initialValue":{"id":29936,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29909,"src":"2968:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2942:32:109"},{"assignments":[29939],"declarations":[{"constant":false,"id":29939,"mutability":"mutable","name":"premiumLocal","nameLocation":"2988:12:109","nodeType":"VariableDeclaration","scope":29998,"src":"2980:20:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29938,"name":"uint256","nodeType":"ElementaryTypeName","src":"2980:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29941,"initialValue":{"id":29940,"name":"premium","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29911,"src":"3003:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2980:30:109"},{"assignments":[29943],"declarations":[{"constant":false,"id":29943,"mutability":"mutable","name":"initiatorLocal","nameLocation":"3024:14:109","nodeType":"VariableDeclaration","scope":29998,"src":"3016:22:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29942,"name":"address","nodeType":"ElementaryTypeName","src":"3016:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":29945,"initialValue":{"id":29944,"name":"initiator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29913,"src":"3041:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3016:34:109"},{"assignments":[29948],"declarations":[{"constant":false,"id":29948,"mutability":"mutable","name":"assetToSwapFrom","nameLocation":"3071:15:109","nodeType":"VariableDeclaration","scope":29998,"src":"3056:30:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},"typeName":{"id":29947,"nodeType":"UserDefinedTypeName","pathNode":{"id":29946,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"3056:14:109"},"referencedDeclaration":1464,"src":"3056:14:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"visibility":"internal"}],"id":29952,"initialValue":{"arguments":[{"id":29950,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29907,"src":"3104:5:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":29949,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"3089:14:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":29951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3089:21:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"nodeType":"VariableDeclarationStatement","src":"3056:54:109"},{"assignments":[29955,29957,29959,29961,29964,29967],"declarations":[{"constant":false,"id":29955,"mutability":"mutable","name":"assetToSwapTo","nameLocation":"3139:13:109","nodeType":"VariableDeclaration","scope":29998,"src":"3124:28:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},"typeName":{"id":29954,"nodeType":"UserDefinedTypeName","pathNode":{"id":29953,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"3124:14:109"},"referencedDeclaration":1464,"src":"3124:14:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"visibility":"internal"},{"constant":false,"id":29957,"mutability":"mutable","name":"minAmountToReceive","nameLocation":"3168:18:109","nodeType":"VariableDeclaration","scope":29998,"src":"3160:26:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29956,"name":"uint256","nodeType":"ElementaryTypeName","src":"3160:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29959,"mutability":"mutable","name":"swapAllBalanceOffset","nameLocation":"3202:20:109","nodeType":"VariableDeclaration","scope":29998,"src":"3194:28:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29958,"name":"uint256","nodeType":"ElementaryTypeName","src":"3194:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29961,"mutability":"mutable","name":"swapCalldata","nameLocation":"3243:12:109","nodeType":"VariableDeclaration","scope":29998,"src":"3230:25:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":29960,"name":"bytes","nodeType":"ElementaryTypeName","src":"3230:5:109","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":29964,"mutability":"mutable","name":"augustus","nameLocation":"3281:8:109","nodeType":"VariableDeclaration","scope":29998,"src":"3263:26:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"},"typeName":{"id":29963,"nodeType":"UserDefinedTypeName","pathNode":{"id":29962,"name":"IParaSwapAugustus","nodeType":"IdentifierPath","referencedDeclaration":30951,"src":"3263:17:109"},"referencedDeclaration":30951,"src":"3263:17:109","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"}},"visibility":"internal"},{"constant":false,"id":29967,"mutability":"mutable","name":"permitParams","nameLocation":"3320:12:109","nodeType":"VariableDeclaration","scope":29998,"src":"3297:35:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_memory_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature"},"typeName":{"id":29966,"nodeType":"UserDefinedTypeName","pathNode":{"id":29965,"name":"PermitSignature","nodeType":"IdentifierPath","referencedDeclaration":29019,"src":"3297:15:109"},"referencedDeclaration":29019,"src":"3297:15:109","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_storage_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature"}},"visibility":"internal"}],"id":29982,"initialValue":{"arguments":[{"id":29970,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29915,"src":"3361:6:109","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"components":[{"id":29971,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"3378:14:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},{"id":29973,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3394:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":29972,"name":"uint256","nodeType":"ElementaryTypeName","src":"3394:7:109","typeDescriptions":{}}},{"id":29975,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3403:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":29974,"name":"uint256","nodeType":"ElementaryTypeName","src":"3403:7:109","typeDescriptions":{}}},{"id":29977,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3412:5:109","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":29976,"name":"bytes","nodeType":"ElementaryTypeName","src":"3412:5:109","typeDescriptions":{}}},{"id":29978,"name":"IParaSwapAugustus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30951,"src":"3419:17:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IParaSwapAugustus_$30951_$","typeString":"type(contract IParaSwapAugustus)"}},{"id":29979,"name":"PermitSignature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29019,"src":"3438:15:109","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PermitSignature_$29019_storage_ptr_$","typeString":"type(struct BaseParaSwapAdapter.PermitSignature storage pointer)"}}],"id":29980,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3377:77:109","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_contract$_IERC20Detailed_$1464_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$_t_type$_t_contract$_IParaSwapAugustus_$30951_$_$_t_type$_t_struct$_PermitSignature_$29019_storage_ptr_$_$","typeString":"tuple(type(contract IERC20Detailed),type(uint256),type(uint256),type(bytes storage pointer),type(contract IParaSwapAugustus),type(struct BaseParaSwapAdapter.PermitSignature storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_tuple$_t_type$_t_contract$_IERC20Detailed_$1464_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$_t_type$_t_contract$_IParaSwapAugustus_$30951_$_$_t_type$_t_struct$_PermitSignature_$29019_storage_ptr_$_$","typeString":"tuple(type(contract IERC20Detailed),type(uint256),type(uint256),type(bytes storage pointer),type(contract IParaSwapAugustus),type(struct BaseParaSwapAdapter.PermitSignature storage pointer))"}],"expression":{"id":29968,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3341:3:109","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":29969,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"decode","nodeType":"MemberAccess","src":"3341:10:109","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":29981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3341:121:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20Detailed_$1464_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_contract$_IParaSwapAugustus_$30951_$_t_struct$_PermitSignature_$29019_memory_ptr_$","typeString":"tuple(contract IERC20Detailed,uint256,uint256,bytes memory,contract IParaSwapAugustus,struct BaseParaSwapAdapter.PermitSignature memory)"}},"nodeType":"VariableDeclarationStatement","src":"3116:346:109"},{"expression":{"arguments":[{"id":29984,"name":"swapAllBalanceOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29959,"src":"3491:20:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29985,"name":"swapCalldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29961,"src":"3519:12:109","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":29986,"name":"augustus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29964,"src":"3539:8:109","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"}},{"id":29987,"name":"permitParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29967,"src":"3555:12:109","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_memory_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature memory"}},{"id":29988,"name":"flashLoanAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29935,"src":"3575:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29989,"name":"premiumLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29939,"src":"3598:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29990,"name":"initiatorLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29943,"src":"3618:14:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":29991,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29948,"src":"3640:15:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},{"id":29992,"name":"assetToSwapTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29955,"src":"3663:13:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},{"id":29993,"name":"minAmountToReceive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29957,"src":"3684:18:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"},{"typeIdentifier":"t_struct$_PermitSignature_$29019_memory_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":29983,"name":"_swapLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30288,"src":"3469:14:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_bytes_memory_ptr_$_t_contract$_IParaSwapAugustus_$30951_$_t_struct$_PermitSignature_$29019_memory_ptr_$_t_uint256_$_t_uint256_$_t_address_$_t_contract$_IERC20Detailed_$1464_$_t_contract$_IERC20Detailed_$1464_$_t_uint256_$returns$__$","typeString":"function (uint256,bytes memory,contract IParaSwapAugustus,struct BaseParaSwapAdapter.PermitSignature memory,uint256,uint256,address,contract IERC20Detailed,contract IERC20Detailed,uint256)"}},"id":29994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3469:239:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":29995,"nodeType":"ExpressionStatement","src":"3469:239:109"},{"expression":{"hexValue":"74727565","id":29996,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3722:4:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":29922,"id":29997,"nodeType":"Return","src":"3715:11:109"}]},"documentation":{"id":29905,"nodeType":"StructuredDocumentation","src":"1393:1288:109","text":" @dev Swaps the received reserve amount from the flash loan into the asset specified in the params.\n The received funds from the swap are then deposited into the protocol on behalf of the user.\n The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset and repay the flash loan.\n @param asset The address of the flash-borrowed asset\n @param amount The amount of the flash-borrowed asset\n @param premium The fee of the flash-borrowed asset\n @param initiator The address of the flashloan initiator\n @param params The byte-encoded params passed when initiating the flashloan\n @return True if the execution of the operation succeeds, false otherwise\n   address assetToSwapTo Address of the underlying asset to be swapped to and deposited\n   uint256 minAmountToReceive Min amount to be received from the swap\n   uint256 swapAllBalanceOffset Set to offset of fromAmount in Augustus calldata if wanting to swap all balance, otherwise 0\n   bytes swapCalldata Calldata for ParaSwap's AugustusSwapper contract\n   address augustus Address of ParaSwap's AugustusSwapper contract\n   PermitSignature permitParams Struct containing the permit signatures, set to all zeroes if not used"},"functionSelector":"1b11d0ff","id":29999,"implemented":true,"kind":"function","modifiers":[{"id":29919,"kind":"modifierInvocation","modifierName":{"id":29918,"name":"nonReentrant","nodeType":"IdentifierPath","referencedDeclaration":31000,"src":"2842:12:109"},"nodeType":"ModifierInvocation","src":"2842:12:109"}],"name":"executeOperation","nameLocation":"2693:16:109","nodeType":"FunctionDefinition","overrides":{"id":29917,"nodeType":"OverrideSpecifier","overrides":[],"src":"2833:8:109"},"parameters":{"id":29916,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29907,"mutability":"mutable","name":"asset","nameLocation":"2723:5:109","nodeType":"VariableDeclaration","scope":29999,"src":"2715:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29906,"name":"address","nodeType":"ElementaryTypeName","src":"2715:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29909,"mutability":"mutable","name":"amount","nameLocation":"2742:6:109","nodeType":"VariableDeclaration","scope":29999,"src":"2734:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29908,"name":"uint256","nodeType":"ElementaryTypeName","src":"2734:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29911,"mutability":"mutable","name":"premium","nameLocation":"2762:7:109","nodeType":"VariableDeclaration","scope":29999,"src":"2754:15:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29910,"name":"uint256","nodeType":"ElementaryTypeName","src":"2754:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29913,"mutability":"mutable","name":"initiator","nameLocation":"2783:9:109","nodeType":"VariableDeclaration","scope":29999,"src":"2775:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29912,"name":"address","nodeType":"ElementaryTypeName","src":"2775:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29915,"mutability":"mutable","name":"params","nameLocation":"2813:6:109","nodeType":"VariableDeclaration","scope":29999,"src":"2798:21:109","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":29914,"name":"bytes","nodeType":"ElementaryTypeName","src":"2798:5:109","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2709:114:109"},"returnParameters":{"id":29922,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29921,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29999,"src":"2864:4:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29920,"name":"bool","nodeType":"ElementaryTypeName","src":"2864:4:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2863:6:109"},"scope":30289,"src":"2684:1047:109","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":30119,"nodeType":"Block","src":"5165:852:109","statements":[{"assignments":[30027],"declarations":[{"constant":false,"id":30027,"mutability":"mutable","name":"aToken","nameLocation":"5188:6:109","nodeType":"VariableDeclaration","scope":30119,"src":"5171:23:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"},"typeName":{"id":30026,"nodeType":"UserDefinedTypeName","pathNode":{"id":30025,"name":"IERC20WithPermit","nodeType":"IdentifierPath","referencedDeclaration":4127,"src":"5171:16:109"},"referencedDeclaration":4127,"src":"5171:16:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"}},"visibility":"internal"}],"id":30037,"initialValue":{"arguments":[{"expression":{"arguments":[{"arguments":[{"id":30032,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30003,"src":"5245:15:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":30031,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5237:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30030,"name":"address","nodeType":"ElementaryTypeName","src":"5237:7:109","typeDescriptions":{}}},"id":30033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5237:24:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":30029,"name":"_getReserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29117,"src":"5221:15:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_struct$_ReserveData_$21315_memory_ptr_$","typeString":"function (address) view returns (struct DataTypes.ReserveData memory)"}},"id":30034,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5221:41:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":30035,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"5221:55:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":30028,"name":"IERC20WithPermit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4127,"src":"5197:16:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20WithPermit_$4127_$","typeString":"type(contract IERC20WithPermit)"}},"id":30036,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5197:85:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"}},"nodeType":"VariableDeclarationStatement","src":"5171:111:109"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30038,"name":"swapAllBalanceOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30012,"src":"5293:20:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":30039,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5317:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5293:25:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30061,"nodeType":"IfStatement","src":"5289:193:109","trueBody":{"id":30060,"nodeType":"Block","src":"5320:162:109","statements":[{"assignments":[30042],"declarations":[{"constant":false,"id":30042,"mutability":"mutable","name":"balance","nameLocation":"5336:7:109","nodeType":"VariableDeclaration","scope":30060,"src":"5328:15:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30041,"name":"uint256","nodeType":"ElementaryTypeName","src":"5328:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30048,"initialValue":{"arguments":[{"expression":{"id":30045,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5363:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":30046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5363:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":30043,"name":"aToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30027,"src":"5346:6:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"}},"id":30044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"5346:16:109","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":30047,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5346:28:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5328:46:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30050,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30042,"src":"5390:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":30051,"name":"amountToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30008,"src":"5401:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5390:23:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e53554646494349454e545f414d4f554e545f544f5f53574150","id":30053,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5415:29:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_f73db277b52b12832d4a33a7ef8ea973b58412dbb6a626efd61c48d6a6304661","typeString":"literal_string \"INSUFFICIENT_AMOUNT_TO_SWAP\""},"value":"INSUFFICIENT_AMOUNT_TO_SWAP"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f73db277b52b12832d4a33a7ef8ea973b58412dbb6a626efd61c48d6a6304661","typeString":"literal_string \"INSUFFICIENT_AMOUNT_TO_SWAP\""}],"id":30049,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5382:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30054,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5382:63:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30055,"nodeType":"ExpressionStatement","src":"5382:63:109"},{"expression":{"id":30058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30056,"name":"amountToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30008,"src":"5453:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30057,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30042,"src":"5468:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5453:22:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30059,"nodeType":"ExpressionStatement","src":"5453:22:109"}]}},{"expression":{"arguments":[{"arguments":[{"id":30065,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30003,"src":"5526:15:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":30064,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5518:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30063,"name":"address","nodeType":"ElementaryTypeName","src":"5518:7:109","typeDescriptions":{}}},"id":30066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5518:24:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30067,"name":"aToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30027,"src":"5550:6:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"}},{"expression":{"id":30068,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5564:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":30069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5564:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30070,"name":"amountToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30008,"src":"5582:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30071,"name":"permitParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30020,"src":"5602:12:109","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_calldata_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_PermitSignature_$29019_calldata_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature calldata"}],"id":30062,"name":"_pullATokenAndWithdraw","nodeType":"Identifier","overloadedDeclarations":[29151,29220],"referencedDeclaration":29220,"src":"5488:22:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20WithPermit_$4127_$_t_address_$_t_uint256_$_t_struct$_PermitSignature_$29019_memory_ptr_$returns$__$","typeString":"function (address,contract IERC20WithPermit,address,uint256,struct BaseParaSwapAdapter.PermitSignature memory)"}},"id":30072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5488:132:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30073,"nodeType":"ExpressionStatement","src":"5488:132:109"},{"assignments":[30075],"declarations":[{"constant":false,"id":30075,"mutability":"mutable","name":"amountReceived","nameLocation":"5635:14:109","nodeType":"VariableDeclaration","scope":30119,"src":"5627:22:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30074,"name":"uint256","nodeType":"ElementaryTypeName","src":"5627:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30085,"initialValue":{"arguments":[{"id":30077,"name":"swapAllBalanceOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30012,"src":"5675:20:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30078,"name":"swapCalldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30014,"src":"5703:12:109","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":30079,"name":"augustus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30017,"src":"5723:8:109","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"}},{"id":30080,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30003,"src":"5739:15:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},{"id":30081,"name":"assetToSwapTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30006,"src":"5762:13:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},{"id":30082,"name":"amountToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30008,"src":"5783:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30083,"name":"minAmountToReceive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30010,"src":"5803:18:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"},{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30076,"name":"_sellOnParaSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29851,"src":"5652:15:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_bytes_memory_ptr_$_t_contract$_IParaSwapAugustus_$30951_$_t_contract$_IERC20Detailed_$1464_$_t_contract$_IERC20Detailed_$1464_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,bytes memory,contract IParaSwapAugustus,contract IERC20Detailed,contract IERC20Detailed,uint256,uint256) returns (uint256)"}},"id":30084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5652:175:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5627:200:109"},{"expression":{"arguments":[{"arguments":[{"id":30091,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"5868:4:109","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}],"id":30090,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5860:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30089,"name":"address","nodeType":"ElementaryTypeName","src":"5860:7:109","typeDescriptions":{}}},"id":30092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5860:13:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":30093,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5875:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":30086,"name":"assetToSwapTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30006,"src":"5834:13:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":30088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeApprove","nodeType":"MemberAccess","referencedDeclaration":2067,"src":"5834:25:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":30094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5834:43:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30095,"nodeType":"ExpressionStatement","src":"5834:43:109"},{"expression":{"arguments":[{"arguments":[{"id":30101,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"5917:4:109","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}],"id":30100,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5909:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30099,"name":"address","nodeType":"ElementaryTypeName","src":"5909:7:109","typeDescriptions":{}}},"id":30102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5909:13:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30103,"name":"amountReceived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30075,"src":"5924:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":30096,"name":"assetToSwapTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30006,"src":"5883:13:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":30098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeApprove","nodeType":"MemberAccess","referencedDeclaration":2067,"src":"5883:25:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":30104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5883:56:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30105,"nodeType":"ExpressionStatement","src":"5883:56:109"},{"expression":{"arguments":[{"arguments":[{"id":30111,"name":"assetToSwapTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30006,"src":"5966:13:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":30110,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5958:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30109,"name":"address","nodeType":"ElementaryTypeName","src":"5958:7:109","typeDescriptions":{}}},"id":30112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5958:22:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30113,"name":"amountReceived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30075,"src":"5982:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":30114,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5998:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":30115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5998:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":30116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6010:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":30106,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"5945:4:109","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":30108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"deposit","nodeType":"MemberAccess","referencedDeclaration":4859,"src":"5945:12:109","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint16_$returns$__$","typeString":"function (address,uint256,address,uint16) external"}},"id":30117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5945:67:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30118,"nodeType":"ExpressionStatement","src":"5945:67:109"}]},"documentation":{"id":30000,"nodeType":"StructuredDocumentation","src":"3735:1107:109","text":" @dev Swaps an amount of an asset to another and deposits the new asset amount on behalf of the user without using a flash loan.\n This method can be used when the temporary transfer of the collateral asset to this contract does not affect the user position.\n The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset and perform the swap.\n @param assetToSwapFrom Address of the underlying asset to be swapped from\n @param assetToSwapTo Address of the underlying asset to be swapped to and deposited\n @param amountToSwap Amount to be swapped, or maximum amount when swapping all balance\n @param minAmountToReceive Minimum amount to be received from the swap\n @param swapAllBalanceOffset Set to offset of fromAmount in Augustus calldata if wanting to swap all balance, otherwise 0\n @param swapCalldata Calldata for ParaSwap's AugustusSwapper contract\n @param augustus Address of ParaSwap's AugustusSwapper contract\n @param permitParams Struct containing the permit signatures, set to all zeroes if not used"},"functionSelector":"d3454a35","id":30120,"implemented":true,"kind":"function","modifiers":[{"id":30023,"kind":"modifierInvocation","modifierName":{"id":30022,"name":"nonReentrant","nodeType":"IdentifierPath","referencedDeclaration":31000,"src":"5152:12:109"},"nodeType":"ModifierInvocation","src":"5152:12:109"}],"name":"swapAndDeposit","nameLocation":"4854:14:109","nodeType":"FunctionDefinition","parameters":{"id":30021,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30003,"mutability":"mutable","name":"assetToSwapFrom","nameLocation":"4889:15:109","nodeType":"VariableDeclaration","scope":30120,"src":"4874:30:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},"typeName":{"id":30002,"nodeType":"UserDefinedTypeName","pathNode":{"id":30001,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"4874:14:109"},"referencedDeclaration":1464,"src":"4874:14:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"visibility":"internal"},{"constant":false,"id":30006,"mutability":"mutable","name":"assetToSwapTo","nameLocation":"4925:13:109","nodeType":"VariableDeclaration","scope":30120,"src":"4910:28:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},"typeName":{"id":30005,"nodeType":"UserDefinedTypeName","pathNode":{"id":30004,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"4910:14:109"},"referencedDeclaration":1464,"src":"4910:14:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"visibility":"internal"},{"constant":false,"id":30008,"mutability":"mutable","name":"amountToSwap","nameLocation":"4952:12:109","nodeType":"VariableDeclaration","scope":30120,"src":"4944:20:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30007,"name":"uint256","nodeType":"ElementaryTypeName","src":"4944:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30010,"mutability":"mutable","name":"minAmountToReceive","nameLocation":"4978:18:109","nodeType":"VariableDeclaration","scope":30120,"src":"4970:26:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30009,"name":"uint256","nodeType":"ElementaryTypeName","src":"4970:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30012,"mutability":"mutable","name":"swapAllBalanceOffset","nameLocation":"5010:20:109","nodeType":"VariableDeclaration","scope":30120,"src":"5002:28:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30011,"name":"uint256","nodeType":"ElementaryTypeName","src":"5002:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30014,"mutability":"mutable","name":"swapCalldata","nameLocation":"5051:12:109","nodeType":"VariableDeclaration","scope":30120,"src":"5036:27:109","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":30013,"name":"bytes","nodeType":"ElementaryTypeName","src":"5036:5:109","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":30017,"mutability":"mutable","name":"augustus","nameLocation":"5087:8:109","nodeType":"VariableDeclaration","scope":30120,"src":"5069:26:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"},"typeName":{"id":30016,"nodeType":"UserDefinedTypeName","pathNode":{"id":30015,"name":"IParaSwapAugustus","nodeType":"IdentifierPath","referencedDeclaration":30951,"src":"5069:17:109"},"referencedDeclaration":30951,"src":"5069:17:109","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"}},"visibility":"internal"},{"constant":false,"id":30020,"mutability":"mutable","name":"permitParams","nameLocation":"5126:12:109","nodeType":"VariableDeclaration","scope":30120,"src":"5101:37:109","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_calldata_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature"},"typeName":{"id":30019,"nodeType":"UserDefinedTypeName","pathNode":{"id":30018,"name":"PermitSignature","nodeType":"IdentifierPath","referencedDeclaration":29019,"src":"5101:15:109"},"referencedDeclaration":29019,"src":"5101:15:109","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_storage_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature"}},"visibility":"internal"}],"src":"4868:274:109"},"returnParameters":{"id":30024,"nodeType":"ParameterList","parameters":[],"src":"5165:0:109"},"scope":30289,"src":"4845:1172:109","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":30287,"nodeType":"Block","src":"7269:1219:109","statements":[{"assignments":[30150],"declarations":[{"constant":false,"id":30150,"mutability":"mutable","name":"aToken","nameLocation":"7292:6:109","nodeType":"VariableDeclaration","scope":30287,"src":"7275:23:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"},"typeName":{"id":30149,"nodeType":"UserDefinedTypeName","pathNode":{"id":30148,"name":"IERC20WithPermit","nodeType":"IdentifierPath","referencedDeclaration":4127,"src":"7275:16:109"},"referencedDeclaration":4127,"src":"7275:16:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"}},"visibility":"internal"}],"id":30160,"initialValue":{"arguments":[{"expression":{"arguments":[{"arguments":[{"id":30155,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30140,"src":"7349:15:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":30154,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7341:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30153,"name":"address","nodeType":"ElementaryTypeName","src":"7341:7:109","typeDescriptions":{}}},"id":30156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7341:24:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":30152,"name":"_getReserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29117,"src":"7325:15:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_struct$_ReserveData_$21315_memory_ptr_$","typeString":"function (address) view returns (struct DataTypes.ReserveData memory)"}},"id":30157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7325:41:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":30158,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"7325:55:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":30151,"name":"IERC20WithPermit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4127,"src":"7301:16:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20WithPermit_$4127_$","typeString":"type(contract IERC20WithPermit)"}},"id":30159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7301:85:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"}},"nodeType":"VariableDeclarationStatement","src":"7275:111:109"},{"assignments":[30162],"declarations":[{"constant":false,"id":30162,"mutability":"mutable","name":"amountToSwap","nameLocation":"7400:12:109","nodeType":"VariableDeclaration","scope":30287,"src":"7392:20:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30161,"name":"uint256","nodeType":"ElementaryTypeName","src":"7392:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30164,"initialValue":{"id":30163,"name":"flashLoanAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30133,"src":"7415:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7392:38:109"},{"assignments":[30166],"declarations":[{"constant":false,"id":30166,"mutability":"mutable","name":"balance","nameLocation":"7445:7:109","nodeType":"VariableDeclaration","scope":30287,"src":"7437:15:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30165,"name":"uint256","nodeType":"ElementaryTypeName","src":"7437:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30171,"initialValue":{"arguments":[{"id":30169,"name":"initiator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30137,"src":"7472:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":30167,"name":"aToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30150,"src":"7455:6:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"}},"id":30168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"7455:16:109","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":30170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7455:27:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7437:45:109"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30172,"name":"swapAllBalanceOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30123,"src":"7492:20:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":30173,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7516:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7492:25:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":30204,"nodeType":"Block","src":"7697:91:109","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30195,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30166,"src":"7713:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"arguments":[{"id":30198,"name":"premium","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30135,"src":"7741:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":30196,"name":"amountToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30162,"src":"7724:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":2216,"src":"7724:16:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":30199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7724:25:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7713:36:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e53554646494349454e545f41544f4b454e5f42414c414e4345","id":30201,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7751:29:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_022eae30fcc9137c0a8a102622bef17a0e0924cb859bf7da56a882760f0b9317","typeString":"literal_string \"INSUFFICIENT_ATOKEN_BALANCE\""},"value":"INSUFFICIENT_ATOKEN_BALANCE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_022eae30fcc9137c0a8a102622bef17a0e0924cb859bf7da56a882760f0b9317","typeString":"literal_string \"INSUFFICIENT_ATOKEN_BALANCE\""}],"id":30194,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7705:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7705:76:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30203,"nodeType":"ExpressionStatement","src":"7705:76:109"}]},"id":30205,"nodeType":"IfStatement","src":"7488:300:109","trueBody":{"id":30193,"nodeType":"Block","src":"7519:172:109","statements":[{"assignments":[30176],"declarations":[{"constant":false,"id":30176,"mutability":"mutable","name":"balanceToSwap","nameLocation":"7535:13:109","nodeType":"VariableDeclaration","scope":30193,"src":"7527:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30175,"name":"uint256","nodeType":"ElementaryTypeName","src":"7527:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30181,"initialValue":{"arguments":[{"id":30179,"name":"premium","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30135,"src":"7563:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":30177,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30166,"src":"7551:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sub","nodeType":"MemberAccess","referencedDeclaration":2239,"src":"7551:11:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":30180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7551:20:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7527:44:109"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30183,"name":"balanceToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30176,"src":"7587:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":30184,"name":"amountToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30162,"src":"7604:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7587:29:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e53554646494349454e545f414d4f554e545f544f5f53574150","id":30186,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7618:29:109","typeDescriptions":{"typeIdentifier":"t_stringliteral_f73db277b52b12832d4a33a7ef8ea973b58412dbb6a626efd61c48d6a6304661","typeString":"literal_string \"INSUFFICIENT_AMOUNT_TO_SWAP\""},"value":"INSUFFICIENT_AMOUNT_TO_SWAP"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f73db277b52b12832d4a33a7ef8ea973b58412dbb6a626efd61c48d6a6304661","typeString":"literal_string \"INSUFFICIENT_AMOUNT_TO_SWAP\""}],"id":30182,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7579:7:109","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7579:69:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30188,"nodeType":"ExpressionStatement","src":"7579:69:109"},{"expression":{"id":30191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30189,"name":"amountToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30162,"src":"7656:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30190,"name":"balanceToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30176,"src":"7671:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7656:28:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30192,"nodeType":"ExpressionStatement","src":"7656:28:109"}]}},{"assignments":[30207],"declarations":[{"constant":false,"id":30207,"mutability":"mutable","name":"amountReceived","nameLocation":"7802:14:109","nodeType":"VariableDeclaration","scope":30287,"src":"7794:22:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30206,"name":"uint256","nodeType":"ElementaryTypeName","src":"7794:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30217,"initialValue":{"arguments":[{"id":30209,"name":"swapAllBalanceOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30123,"src":"7842:20:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30210,"name":"swapCalldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30125,"src":"7870:12:109","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":30211,"name":"augustus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30128,"src":"7890:8:109","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"}},{"id":30212,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30140,"src":"7906:15:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},{"id":30213,"name":"assetToSwapTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30143,"src":"7929:13:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},{"id":30214,"name":"amountToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30162,"src":"7950:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30215,"name":"minAmountToReceive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30145,"src":"7970:18:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"},{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30208,"name":"_sellOnParaSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29851,"src":"7819:15:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_bytes_memory_ptr_$_t_contract$_IParaSwapAugustus_$30951_$_t_contract$_IERC20Detailed_$1464_$_t_contract$_IERC20Detailed_$1464_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,bytes memory,contract IParaSwapAugustus,contract IERC20Detailed,contract IERC20Detailed,uint256,uint256) returns (uint256)"}},"id":30216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7819:175:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7794:200:109"},{"expression":{"arguments":[{"arguments":[{"id":30223,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"8035:4:109","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}],"id":30222,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8027:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30221,"name":"address","nodeType":"ElementaryTypeName","src":"8027:7:109","typeDescriptions":{}}},"id":30224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8027:13:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":30225,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8042:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":30218,"name":"assetToSwapTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30143,"src":"8001:13:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":30220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeApprove","nodeType":"MemberAccess","referencedDeclaration":2067,"src":"8001:25:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":30226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8001:43:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30227,"nodeType":"ExpressionStatement","src":"8001:43:109"},{"expression":{"arguments":[{"arguments":[{"id":30233,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"8084:4:109","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}],"id":30232,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8076:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30231,"name":"address","nodeType":"ElementaryTypeName","src":"8076:7:109","typeDescriptions":{}}},"id":30234,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8076:13:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30235,"name":"amountReceived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30207,"src":"8091:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":30228,"name":"assetToSwapTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30143,"src":"8050:13:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":30230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeApprove","nodeType":"MemberAccess","referencedDeclaration":2067,"src":"8050:25:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":30236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8050:56:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30237,"nodeType":"ExpressionStatement","src":"8050:56:109"},{"expression":{"arguments":[{"arguments":[{"id":30243,"name":"assetToSwapTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30143,"src":"8133:13:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":30242,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8125:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30241,"name":"address","nodeType":"ElementaryTypeName","src":"8125:7:109","typeDescriptions":{}}},"id":30244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8125:22:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30245,"name":"amountReceived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30207,"src":"8149:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30246,"name":"initiator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30137,"src":"8165:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":30247,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8176:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":30238,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"8112:4:109","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":30240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"deposit","nodeType":"MemberAccess","referencedDeclaration":4859,"src":"8112:12:109","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint16_$returns$__$","typeString":"function (address,uint256,address,uint16) external"}},"id":30248,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8112:66:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30249,"nodeType":"ExpressionStatement","src":"8112:66:109"},{"expression":{"arguments":[{"arguments":[{"id":30253,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30140,"src":"8223:15:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":30252,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8215:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30251,"name":"address","nodeType":"ElementaryTypeName","src":"8215:7:109","typeDescriptions":{}}},"id":30254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8215:24:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30255,"name":"aToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30150,"src":"8247:6:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"}},{"id":30256,"name":"initiator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30137,"src":"8261:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":30259,"name":"premium","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30135,"src":"8295:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":30257,"name":"amountToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30162,"src":"8278:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":2216,"src":"8278:16:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":30260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8278:25:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30261,"name":"permitParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30131,"src":"8311:12:109","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_memory_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_PermitSignature_$29019_memory_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature memory"}],"id":30250,"name":"_pullATokenAndWithdraw","nodeType":"Identifier","overloadedDeclarations":[29151,29220],"referencedDeclaration":29220,"src":"8185:22:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20WithPermit_$4127_$_t_address_$_t_uint256_$_t_struct$_PermitSignature_$29019_memory_ptr_$returns$__$","typeString":"function (address,contract IERC20WithPermit,address,uint256,struct BaseParaSwapAdapter.PermitSignature memory)"}},"id":30262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8185:144:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30263,"nodeType":"ExpressionStatement","src":"8185:144:109"},{"expression":{"arguments":[{"arguments":[{"id":30269,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"8396:4:109","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}],"id":30268,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8388:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30267,"name":"address","nodeType":"ElementaryTypeName","src":"8388:7:109","typeDescriptions":{}}},"id":30270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8388:13:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":30271,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8403:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":30264,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30140,"src":"8360:15:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":30266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeApprove","nodeType":"MemberAccess","referencedDeclaration":2067,"src":"8360:27:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":30272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8360:45:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30273,"nodeType":"ExpressionStatement","src":"8360:45:109"},{"expression":{"arguments":[{"arguments":[{"id":30279,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"8447:4:109","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}],"id":30278,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8439:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30277,"name":"address","nodeType":"ElementaryTypeName","src":"8439:7:109","typeDescriptions":{}}},"id":30280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8439:13:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":30283,"name":"premium","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30135,"src":"8474:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":30281,"name":"flashLoanAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30133,"src":"8454:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":2216,"src":"8454:19:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":30284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8454:28:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":30274,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30140,"src":"8411:15:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":30276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeApprove","nodeType":"MemberAccess","referencedDeclaration":2067,"src":"8411:27:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":30285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8411:72:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30286,"nodeType":"ExpressionStatement","src":"8411:72:109"}]},"documentation":{"id":30121,"nodeType":"StructuredDocumentation","src":"6021:895:109","text":" @dev Swaps an amount of an asset to another and deposits the funds on behalf of the initiator.\n @param swapAllBalanceOffset Set to offset of fromAmount in Augustus calldata if wanting to swap all balance, otherwise 0\n @param swapCalldata Calldata for ParaSwap's AugustusSwapper contract\n @param augustus Address of ParaSwap's AugustusSwapper contract\n @param permitParams Struct containing the permit signatures, set to all zeroes if not used\n @param flashLoanAmount Amount of the flash loan i.e. maximum amount to swap\n @param premium Fee of the flash loan\n @param initiator Account that initiated the flash loan\n @param assetToSwapFrom Address of the underyling asset to be swapped from\n @param assetToSwapTo Address of the underlying asset to be swapped to and deposited\n @param minAmountToReceive Min amount to be received from the swap"},"id":30288,"implemented":true,"kind":"function","modifiers":[],"name":"_swapLiquidity","nameLocation":"6928:14:109","nodeType":"FunctionDefinition","parameters":{"id":30146,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30123,"mutability":"mutable","name":"swapAllBalanceOffset","nameLocation":"6956:20:109","nodeType":"VariableDeclaration","scope":30288,"src":"6948:28:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30122,"name":"uint256","nodeType":"ElementaryTypeName","src":"6948:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30125,"mutability":"mutable","name":"swapCalldata","nameLocation":"6995:12:109","nodeType":"VariableDeclaration","scope":30288,"src":"6982:25:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":30124,"name":"bytes","nodeType":"ElementaryTypeName","src":"6982:5:109","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":30128,"mutability":"mutable","name":"augustus","nameLocation":"7031:8:109","nodeType":"VariableDeclaration","scope":30288,"src":"7013:26:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"},"typeName":{"id":30127,"nodeType":"UserDefinedTypeName","pathNode":{"id":30126,"name":"IParaSwapAugustus","nodeType":"IdentifierPath","referencedDeclaration":30951,"src":"7013:17:109"},"referencedDeclaration":30951,"src":"7013:17:109","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"}},"visibility":"internal"},{"constant":false,"id":30131,"mutability":"mutable","name":"permitParams","nameLocation":"7068:12:109","nodeType":"VariableDeclaration","scope":30288,"src":"7045:35:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_memory_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature"},"typeName":{"id":30130,"nodeType":"UserDefinedTypeName","pathNode":{"id":30129,"name":"PermitSignature","nodeType":"IdentifierPath","referencedDeclaration":29019,"src":"7045:15:109"},"referencedDeclaration":29019,"src":"7045:15:109","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_storage_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature"}},"visibility":"internal"},{"constant":false,"id":30133,"mutability":"mutable","name":"flashLoanAmount","nameLocation":"7094:15:109","nodeType":"VariableDeclaration","scope":30288,"src":"7086:23:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30132,"name":"uint256","nodeType":"ElementaryTypeName","src":"7086:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30135,"mutability":"mutable","name":"premium","nameLocation":"7123:7:109","nodeType":"VariableDeclaration","scope":30288,"src":"7115:15:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30134,"name":"uint256","nodeType":"ElementaryTypeName","src":"7115:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30137,"mutability":"mutable","name":"initiator","nameLocation":"7144:9:109","nodeType":"VariableDeclaration","scope":30288,"src":"7136:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30136,"name":"address","nodeType":"ElementaryTypeName","src":"7136:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30140,"mutability":"mutable","name":"assetToSwapFrom","nameLocation":"7174:15:109","nodeType":"VariableDeclaration","scope":30288,"src":"7159:30:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},"typeName":{"id":30139,"nodeType":"UserDefinedTypeName","pathNode":{"id":30138,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"7159:14:109"},"referencedDeclaration":1464,"src":"7159:14:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"visibility":"internal"},{"constant":false,"id":30143,"mutability":"mutable","name":"assetToSwapTo","nameLocation":"7210:13:109","nodeType":"VariableDeclaration","scope":30288,"src":"7195:28:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},"typeName":{"id":30142,"nodeType":"UserDefinedTypeName","pathNode":{"id":30141,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"7195:14:109"},"referencedDeclaration":1464,"src":"7195:14:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"visibility":"internal"},{"constant":false,"id":30145,"mutability":"mutable","name":"minAmountToReceive","nameLocation":"7237:18:109","nodeType":"VariableDeclaration","scope":30288,"src":"7229:26:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30144,"name":"uint256","nodeType":"ElementaryTypeName","src":"7229:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6942:317:109"},"returnParameters":{"id":30147,"nodeType":"ParameterList","parameters":[],"src":"7269:0:109"},"scope":30289,"src":"6919:1569:109","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":30290,"src":"1009:7481:109","usedErrors":[]}],"src":"37:8454:109"},"id":109},"contracts/adapters/paraswap/ParaSwapRepayAdapter.sol":{"ast":{"absolutePath":"contracts/adapters/paraswap/ParaSwapRepayAdapter.sol","exportedSymbols":{"BaseParaSwapBuyAdapter":[29559],"DataTypes":[21633],"IERC20":[1442],"IERC20Detailed":[1464],"IERC20WithPermit":[4127],"IParaSwapAugustus":[30951],"IParaSwapAugustusRegistry":[30961],"IPoolAddressesProvider":[5069],"ParaSwapRepayAdapter":[30777],"ReentrancyGuard":[31001],"SafeERC20":[2190],"SafeMath":[2310]},"id":30778,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":30291,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:110"},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","id":30293,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30778,"sourceUnit":21634,"src":"63:89:110","symbolAliases":[{"foreign":{"id":30292,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:9:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","id":30295,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30778,"sourceUnit":1465,"src":"153:110:110","symbolAliases":[{"foreign":{"id":30294,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"src":"161:14:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","id":30297,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30778,"sourceUnit":1443,"src":"264:94:110","symbolAliases":[{"foreign":{"id":30296,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"272:6:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol","file":"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol","id":30299,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30778,"sourceUnit":4128,"src":"359:89:110","symbolAliases":[{"foreign":{"id":30298,"name":"IERC20WithPermit","nodeType":"Identifier","overloadedDeclarations":[],"src":"367:16:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","id":30301,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30778,"sourceUnit":5070,"src":"449:101:110","symbolAliases":[{"foreign":{"id":30300,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"457:22:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol","id":30303,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30778,"sourceUnit":2191,"src":"551:100:110","symbolAliases":[{"foreign":{"id":30302,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"559:9:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol","id":30305,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30778,"sourceUnit":2311,"src":"652:98:110","symbolAliases":[{"foreign":{"id":30304,"name":"SafeMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"660:8:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/adapters/paraswap/BaseParaSwapBuyAdapter.sol","file":"./BaseParaSwapBuyAdapter.sol","id":30307,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30778,"sourceUnit":29560,"src":"751:68:110","symbolAliases":[{"foreign":{"id":30306,"name":"BaseParaSwapBuyAdapter","nodeType":"Identifier","overloadedDeclarations":[],"src":"759:22:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/adapters/paraswap/interfaces/IParaSwapAugustusRegistry.sol","file":"./interfaces/IParaSwapAugustusRegistry.sol","id":30309,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30778,"sourceUnit":30962,"src":"820:85:110","symbolAliases":[{"foreign":{"id":30308,"name":"IParaSwapAugustusRegistry","nodeType":"Identifier","overloadedDeclarations":[],"src":"828:25:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/adapters/paraswap/interfaces/IParaSwapAugustus.sol","file":"./interfaces/IParaSwapAugustus.sol","id":30311,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30778,"sourceUnit":30952,"src":"906:69:110","symbolAliases":[{"foreign":{"id":30310,"name":"IParaSwapAugustus","nodeType":"Identifier","overloadedDeclarations":[],"src":"914:17:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/ReentrancyGuard.sol","file":"../../dependencies/openzeppelin/ReentrancyGuard.sol","id":30313,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30778,"sourceUnit":31002,"src":"976:84:110","symbolAliases":[{"foreign":{"id":30312,"name":"ReentrancyGuard","nodeType":"Identifier","overloadedDeclarations":[],"src":"984:15:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":30315,"name":"BaseParaSwapBuyAdapter","nodeType":"IdentifierPath","referencedDeclaration":29559,"src":"1225:22:110"},"id":30316,"nodeType":"InheritanceSpecifier","src":"1225:22:110"},{"baseName":{"id":30317,"name":"ReentrancyGuard","nodeType":"IdentifierPath","referencedDeclaration":31001,"src":"1249:15:110"},"id":30318,"nodeType":"InheritanceSpecifier","src":"1249:15:110"}],"canonicalName":"ParaSwapRepayAdapter","contractDependencies":[],"contractKind":"contract","documentation":{"id":30314,"nodeType":"StructuredDocumentation","src":"1062:129:110","text":" @title ParaSwapRepayAdapter\n @notice ParaSwap Adapter to perform a repay of a debt with collateral.\n @author Aave*"},"fullyImplemented":true,"id":30777,"linearizedBaseContracts":[30777,31001,29559,29245,1573,748,3466,3541],"name":"ParaSwapRepayAdapter","nameLocation":"1201:20:110","nodeType":"ContractDefinition","nodes":[{"id":30321,"libraryName":{"id":30319,"name":"SafeMath","nodeType":"IdentifierPath","referencedDeclaration":2310,"src":"1275:8:110"},"nodeType":"UsingForDirective","src":"1269:27:110","typeName":{"id":30320,"name":"uint256","nodeType":"ElementaryTypeName","src":"1288:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":30325,"libraryName":{"id":30322,"name":"SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":2190,"src":"1305:9:110"},"nodeType":"UsingForDirective","src":"1299:27:110","typeName":{"id":30324,"nodeType":"UserDefinedTypeName","pathNode":{"id":30323,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1319:6:110"},"referencedDeclaration":1442,"src":"1319:6:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"canonicalName":"ParaSwapRepayAdapter.RepayParams","id":30337,"members":[{"constant":false,"id":30327,"mutability":"mutable","name":"collateralAsset","nameLocation":"1363:15:110","nodeType":"VariableDeclaration","scope":30337,"src":"1355:23:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30326,"name":"address","nodeType":"ElementaryTypeName","src":"1355:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30329,"mutability":"mutable","name":"collateralAmount","nameLocation":"1392:16:110","nodeType":"VariableDeclaration","scope":30337,"src":"1384:24:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30328,"name":"uint256","nodeType":"ElementaryTypeName","src":"1384:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30331,"mutability":"mutable","name":"rateMode","nameLocation":"1422:8:110","nodeType":"VariableDeclaration","scope":30337,"src":"1414:16:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30330,"name":"uint256","nodeType":"ElementaryTypeName","src":"1414:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30334,"mutability":"mutable","name":"permitSignature","nameLocation":"1452:15:110","nodeType":"VariableDeclaration","scope":30337,"src":"1436:31:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_storage_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature"},"typeName":{"id":30333,"nodeType":"UserDefinedTypeName","pathNode":{"id":30332,"name":"PermitSignature","nodeType":"IdentifierPath","referencedDeclaration":29019,"src":"1436:15:110"},"referencedDeclaration":29019,"src":"1436:15:110","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_storage_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature"}},"visibility":"internal"},{"constant":false,"id":30336,"mutability":"mutable","name":"useEthPath","nameLocation":"1478:10:110","nodeType":"VariableDeclaration","scope":30337,"src":"1473:15:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":30335,"name":"bool","nodeType":"ElementaryTypeName","src":"1473:4:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"RepayParams","nameLocation":"1337:11:110","nodeType":"StructDefinition","scope":30777,"src":"1330:163:110","visibility":"public"},{"body":{"id":30356,"nodeType":"Block","src":"1686:35:110","statements":[{"expression":{"arguments":[{"id":30353,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30345,"src":"1710:5:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":30352,"name":"transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1572,"src":"1692:17:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":30354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1692:24:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30355,"nodeType":"ExpressionStatement","src":"1692:24:110"}]},"id":30357,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":30348,"name":"addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30340,"src":"1649:17:110","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},{"id":30349,"name":"augustusRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30343,"src":"1668:16:110","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"}}],"id":30350,"kind":"baseConstructorSpecifier","modifierName":{"id":30347,"name":"BaseParaSwapBuyAdapter","nodeType":"IdentifierPath","referencedDeclaration":29559,"src":"1626:22:110"},"nodeType":"ModifierInvocation","src":"1626:59:110"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":30346,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30340,"mutability":"mutable","name":"addressesProvider","nameLocation":"1537:17:110","nodeType":"VariableDeclaration","scope":30357,"src":"1514:40:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":30339,"nodeType":"UserDefinedTypeName","pathNode":{"id":30338,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"1514:22:110"},"referencedDeclaration":5069,"src":"1514:22:110","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"},{"constant":false,"id":30343,"mutability":"mutable","name":"augustusRegistry","nameLocation":"1586:16:110","nodeType":"VariableDeclaration","scope":30357,"src":"1560:42:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"},"typeName":{"id":30342,"nodeType":"UserDefinedTypeName","pathNode":{"id":30341,"name":"IParaSwapAugustusRegistry","nodeType":"IdentifierPath","referencedDeclaration":30961,"src":"1560:25:110"},"referencedDeclaration":30961,"src":"1560:25:110","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"}},"visibility":"internal"},{"constant":false,"id":30345,"mutability":"mutable","name":"owner","nameLocation":"1616:5:110","nodeType":"VariableDeclaration","scope":30357,"src":"1608:13:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30344,"name":"address","nodeType":"ElementaryTypeName","src":"1608:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1508:117:110"},"returnParameters":{"id":30351,"nodeType":"ParameterList","parameters":[],"src":"1686:0:110"},"scope":30777,"src":"1497:224:110","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[3528],"body":{"id":30412,"nodeType":"Block","src":"3312:317:110","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":30383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":30377,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3326:3:110","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":30378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3326:10:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":30381,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"3348:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}],"id":30380,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3340:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30379,"name":"address","nodeType":"ElementaryTypeName","src":"3340:7:110","typeDescriptions":{}}},"id":30382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3340:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3326:27:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"43414c4c45525f4d5553545f42455f504f4f4c","id":30384,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3355:21:110","typeDescriptions":{"typeIdentifier":"t_stringliteral_f253c60ca7289769121ceb7e8a55d2372f327bb2c0c90e8e3ba6b77e057d495e","typeString":"literal_string \"CALLER_MUST_BE_POOL\""},"value":"CALLER_MUST_BE_POOL"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f253c60ca7289769121ceb7e8a55d2372f327bb2c0c90e8e3ba6b77e057d495e","typeString":"literal_string \"CALLER_MUST_BE_POOL\""}],"id":30376,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3318:7:110","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3318:59:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30386,"nodeType":"ExpressionStatement","src":"3318:59:110"},{"assignments":[30388],"declarations":[{"constant":false,"id":30388,"mutability":"mutable","name":"collateralAmount","nameLocation":"3392:16:110","nodeType":"VariableDeclaration","scope":30412,"src":"3384:24:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30387,"name":"uint256","nodeType":"ElementaryTypeName","src":"3384:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30390,"initialValue":{"id":30389,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30362,"src":"3411:6:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3384:33:110"},{"assignments":[30392],"declarations":[{"constant":false,"id":30392,"mutability":"mutable","name":"initiatorLocal","nameLocation":"3431:14:110","nodeType":"VariableDeclaration","scope":30412,"src":"3423:22:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30391,"name":"address","nodeType":"ElementaryTypeName","src":"3423:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":30394,"initialValue":{"id":30393,"name":"initiator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30366,"src":"3448:9:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3423:34:110"},{"assignments":[30397],"declarations":[{"constant":false,"id":30397,"mutability":"mutable","name":"collateralAsset","nameLocation":"3479:15:110","nodeType":"VariableDeclaration","scope":30412,"src":"3464:30:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},"typeName":{"id":30396,"nodeType":"UserDefinedTypeName","pathNode":{"id":30395,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"3464:14:110"},"referencedDeclaration":1464,"src":"3464:14:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"visibility":"internal"}],"id":30401,"initialValue":{"arguments":[{"id":30399,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30360,"src":"3512:5:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":30398,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"3497:14:110","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":30400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3497:21:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"nodeType":"VariableDeclarationStatement","src":"3464:54:110"},{"expression":{"arguments":[{"id":30403,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30368,"src":"3539:6:110","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":30404,"name":"premium","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30364,"src":"3547:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30405,"name":"initiatorLocal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30392,"src":"3556:14:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30406,"name":"collateralAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30397,"src":"3572:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},{"id":30407,"name":"collateralAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30388,"src":"3589:16:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30402,"name":"_swapAndRepay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30696,"src":"3525:13:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_calldata_ptr_$_t_uint256_$_t_address_$_t_contract$_IERC20Detailed_$1464_$_t_uint256_$returns$__$","typeString":"function (bytes calldata,uint256,address,contract IERC20Detailed,uint256)"}},"id":30408,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3525:81:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30409,"nodeType":"ExpressionStatement","src":"3525:81:110"},{"expression":{"hexValue":"74727565","id":30410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3620:4:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":30375,"id":30411,"nodeType":"Return","src":"3613:11:110"}]},"documentation":{"id":30358,"nodeType":"StructuredDocumentation","src":"1725:1398:110","text":" @dev Uses the received funds from the flash loan to repay a debt on the protocol on behalf of the user. Then pulls\n the collateral from the user and swaps it to the debt asset to repay the flash loan.\n The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset, swap it\n and repay the flash loan.\n Supports only one asset on the flash loan.\n @param asset The address of the flash-borrowed asset\n @param amount The amount of the flash-borrowed asset\n @param premium The fee of the flash-borrowed asset\n @param initiator The address of the flashloan initiator\n @param params The byte-encoded params passed when initiating the flashloan\n @return True if the execution of the operation succeeds, false otherwise\n   IERC20Detailed debtAsset Address of the debt asset\n   uint256 debtAmount Amount of debt to be repaid\n   uint256 rateMode Rate modes of the debt to be repaid\n   uint256 deadline Deadline for the permit signature\n   uint256 debtRateMode Rate mode of the debt to be repaid\n   bytes paraswapData Paraswap Data\n                    * bytes buyCallData Call data for augustus\n                    * IParaSwapAugustus augustus Address of Augustus Swapper\n   PermitSignature permitParams Struct containing the permit signatures, set to all zeroes if not used"},"functionSelector":"1b11d0ff","id":30413,"implemented":true,"kind":"function","modifiers":[{"id":30372,"kind":"modifierInvocation","modifierName":{"id":30371,"name":"nonReentrant","nodeType":"IdentifierPath","referencedDeclaration":31000,"src":"3284:12:110"},"nodeType":"ModifierInvocation","src":"3284:12:110"}],"name":"executeOperation","nameLocation":"3135:16:110","nodeType":"FunctionDefinition","overrides":{"id":30370,"nodeType":"OverrideSpecifier","overrides":[],"src":"3275:8:110"},"parameters":{"id":30369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30360,"mutability":"mutable","name":"asset","nameLocation":"3165:5:110","nodeType":"VariableDeclaration","scope":30413,"src":"3157:13:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30359,"name":"address","nodeType":"ElementaryTypeName","src":"3157:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30362,"mutability":"mutable","name":"amount","nameLocation":"3184:6:110","nodeType":"VariableDeclaration","scope":30413,"src":"3176:14:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30361,"name":"uint256","nodeType":"ElementaryTypeName","src":"3176:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30364,"mutability":"mutable","name":"premium","nameLocation":"3204:7:110","nodeType":"VariableDeclaration","scope":30413,"src":"3196:15:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30363,"name":"uint256","nodeType":"ElementaryTypeName","src":"3196:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30366,"mutability":"mutable","name":"initiator","nameLocation":"3225:9:110","nodeType":"VariableDeclaration","scope":30413,"src":"3217:17:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30365,"name":"address","nodeType":"ElementaryTypeName","src":"3217:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30368,"mutability":"mutable","name":"params","nameLocation":"3255:6:110","nodeType":"VariableDeclaration","scope":30413,"src":"3240:21:110","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":30367,"name":"bytes","nodeType":"ElementaryTypeName","src":"3240:5:110","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3151:114:110"},"returnParameters":{"id":30375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30374,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30413,"src":"3306:4:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":30373,"name":"bool","nodeType":"ElementaryTypeName","src":"3306:4:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3305:6:110"},"scope":30777,"src":"3126:503:110","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":30552,"nodeType":"Block","src":"4930:1232:110","statements":[{"expression":{"id":30447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30438,"name":"debtRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30424,"src":"4936:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":30440,"name":"debtAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30420,"src":"4980:9:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},{"id":30441,"name":"debtRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30426,"src":"4997:12:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30442,"name":"buyAllBalanceOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30428,"src":"5017:19:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30443,"name":"debtRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30424,"src":"5044:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":30444,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5067:3:110","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":30445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5067:10:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":30439,"name":"getDebtRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30776,"src":"4954:18:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20Detailed_$1464_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (contract IERC20Detailed,uint256,uint256,uint256,address) view returns (uint256)"}},"id":30446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4954:129:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4936:147:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30448,"nodeType":"ExpressionStatement","src":"4936:147:110"},{"expression":{"arguments":[{"arguments":[{"id":30452,"name":"collateralAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30417,"src":"5151:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":30451,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5143:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30450,"name":"address","nodeType":"ElementaryTypeName","src":"5143:7:110","typeDescriptions":{}}},"id":30453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5143:24:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":30454,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5169:3:110","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":30455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5169:10:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30456,"name":"collateralAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30422,"src":"5181:16:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30457,"name":"permitSignature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30433,"src":"5199:15:110","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_calldata_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_PermitSignature_$29019_calldata_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature calldata"}],"id":30449,"name":"_pullATokenAndWithdraw","nodeType":"Identifier","overloadedDeclarations":[29151,29220],"referencedDeclaration":29151,"src":"5120:22:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_struct$_PermitSignature_$29019_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,struct BaseParaSwapAdapter.PermitSignature memory)"}},"id":30458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5120:95:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30459,"nodeType":"ExpressionStatement","src":"5120:95:110"},{"assignments":[30461],"declarations":[{"constant":false,"id":30461,"mutability":"mutable","name":"amountSold","nameLocation":"5273:10:110","nodeType":"VariableDeclaration","scope":30552,"src":"5265:18:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30460,"name":"uint256","nodeType":"ElementaryTypeName","src":"5265:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30470,"initialValue":{"arguments":[{"id":30463,"name":"buyAllBalanceOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30428,"src":"5308:19:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30464,"name":"paraswapData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30430,"src":"5335:12:110","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":30465,"name":"collateralAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30417,"src":"5355:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},{"id":30466,"name":"debtAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30420,"src":"5378:9:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},{"id":30467,"name":"collateralAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30422,"src":"5395:16:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30468,"name":"debtRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30424,"src":"5419:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30462,"name":"_buyOnParaSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29558,"src":"5286:14:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_bytes_memory_ptr_$_t_contract$_IERC20Detailed_$1464_$_t_contract$_IERC20Detailed_$1464_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,bytes memory,contract IERC20Detailed,contract IERC20Detailed,uint256,uint256) returns (uint256)"}},"id":30469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5286:154:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5265:175:110"},{"assignments":[30472],"declarations":[{"constant":false,"id":30472,"mutability":"mutable","name":"collateralBalanceLeft","nameLocation":"5455:21:110","nodeType":"VariableDeclaration","scope":30552,"src":"5447:29:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30471,"name":"uint256","nodeType":"ElementaryTypeName","src":"5447:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30476,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30473,"name":"collateralAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30422,"src":"5479:16:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":30474,"name":"amountSold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30461,"src":"5498:10:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5479:29:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5447:61:110"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30477,"name":"collateralBalanceLeft","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30472,"src":"5590:21:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":30478,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5614:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5590:25:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30516,"nodeType":"IfStatement","src":"5586:264:110","trueBody":{"id":30515,"nodeType":"Block","src":"5617:233:110","statements":[{"expression":{"arguments":[{"arguments":[{"id":30486,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"5669:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}],"id":30485,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5661:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30484,"name":"address","nodeType":"ElementaryTypeName","src":"5661:7:110","typeDescriptions":{}}},"id":30487,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5661:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":30488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5676:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"arguments":[{"id":30481,"name":"collateralAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30417,"src":"5632:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":30480,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"5625:6:110","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":30482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5625:23:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":30483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeApprove","nodeType":"MemberAccess","referencedDeclaration":2067,"src":"5625:35:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":30489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5625:53:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30490,"nodeType":"ExpressionStatement","src":"5625:53:110"},{"expression":{"arguments":[{"arguments":[{"id":30497,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"5730:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}],"id":30496,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5722:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30495,"name":"address","nodeType":"ElementaryTypeName","src":"5722:7:110","typeDescriptions":{}}},"id":30498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5722:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30499,"name":"collateralBalanceLeft","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30472,"src":"5737:21:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":30492,"name":"collateralAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30417,"src":"5693:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":30491,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"5686:6:110","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":30493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5686:23:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":30494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeApprove","nodeType":"MemberAccess","referencedDeclaration":2067,"src":"5686:35:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":30500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5686:73:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30501,"nodeType":"ExpressionStatement","src":"5686:73:110"},{"expression":{"arguments":[{"arguments":[{"id":30507,"name":"collateralAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30417,"src":"5788:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":30506,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5780:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30505,"name":"address","nodeType":"ElementaryTypeName","src":"5780:7:110","typeDescriptions":{}}},"id":30508,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5780:24:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30509,"name":"collateralBalanceLeft","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30472,"src":"5806:21:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":30510,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5829:3:110","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":30511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5829:10:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":30512,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5841:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":30502,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"5767:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":30504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"deposit","nodeType":"MemberAccess","referencedDeclaration":4859,"src":"5767:12:110","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint16_$returns$__$","typeString":"function (address,uint256,address,uint16) external"}},"id":30513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5767:76:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30514,"nodeType":"ExpressionStatement","src":"5767:76:110"}]}},{"expression":{"arguments":[{"arguments":[{"id":30523,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"6002:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}],"id":30522,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5994:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30521,"name":"address","nodeType":"ElementaryTypeName","src":"5994:7:110","typeDescriptions":{}}},"id":30524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5994:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":30525,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6009:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"arguments":[{"id":30518,"name":"debtAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30420,"src":"5971:9:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":30517,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"5964:6:110","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":30519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5964:17:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":30520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeApprove","nodeType":"MemberAccess","referencedDeclaration":2067,"src":"5964:29:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":30526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5964:47:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30527,"nodeType":"ExpressionStatement","src":"5964:47:110"},{"expression":{"arguments":[{"arguments":[{"id":30534,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"6055:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}],"id":30533,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6047:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30532,"name":"address","nodeType":"ElementaryTypeName","src":"6047:7:110","typeDescriptions":{}}},"id":30535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6047:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30536,"name":"debtRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30424,"src":"6062:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":30529,"name":"debtAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30420,"src":"6024:9:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":30528,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"6017:6:110","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":30530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6017:17:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":30531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeApprove","nodeType":"MemberAccess","referencedDeclaration":2067,"src":"6017:29:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":30537,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6017:61:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30538,"nodeType":"ExpressionStatement","src":"6017:61:110"},{"expression":{"arguments":[{"arguments":[{"id":30544,"name":"debtAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30420,"src":"6103:9:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":30543,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6095:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30542,"name":"address","nodeType":"ElementaryTypeName","src":"6095:7:110","typeDescriptions":{}}},"id":30545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6095:18:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30546,"name":"debtRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30424,"src":"6115:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30547,"name":"debtRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30426,"src":"6132:12:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":30548,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6146:3:110","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":30549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"6146:10:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":30539,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"6084:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":30541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"repay","nodeType":"MemberAccess","referencedDeclaration":4505,"src":"6084:10:110","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,uint256,address) external returns (uint256)"}},"id":30550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6084:73:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30551,"nodeType":"ExpressionStatement","src":"6084:73:110"}]},"documentation":{"id":30414,"nodeType":"StructuredDocumentation","src":"3633:983:110","text":" @dev Swaps the user collateral for the debt asset and then repay the debt on the protocol on behalf of the user\n without using flash loans. This method can be used when the temporary transfer of the collateral asset to this\n contract does not affect the user position.\n The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset\n @param collateralAsset Address of asset to be swapped\n @param debtAsset Address of debt asset\n @param collateralAmount max Amount of the collateral to be swapped\n @param debtRepayAmount Amount of the debt to be repaid, or maximum amount when repaying entire debt\n @param debtRateMode Rate mode of the debt to be repaid\n @param buyAllBalanceOffset Set to offset of toAmount in Augustus calldata if wanting to pay entire debt, otherwise 0\n @param paraswapData Data for Paraswap Adapter\n @param permitSignature struct containing the permit signature"},"functionSelector":"4db9dc97","id":30553,"implemented":true,"kind":"function","modifiers":[{"id":30436,"kind":"modifierInvocation","modifierName":{"id":30435,"name":"nonReentrant","nodeType":"IdentifierPath","referencedDeclaration":31000,"src":"4917:12:110"},"nodeType":"ModifierInvocation","src":"4917:12:110"}],"name":"swapAndRepay","nameLocation":"4628:12:110","nodeType":"FunctionDefinition","parameters":{"id":30434,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30417,"mutability":"mutable","name":"collateralAsset","nameLocation":"4661:15:110","nodeType":"VariableDeclaration","scope":30553,"src":"4646:30:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},"typeName":{"id":30416,"nodeType":"UserDefinedTypeName","pathNode":{"id":30415,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"4646:14:110"},"referencedDeclaration":1464,"src":"4646:14:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"visibility":"internal"},{"constant":false,"id":30420,"mutability":"mutable","name":"debtAsset","nameLocation":"4697:9:110","nodeType":"VariableDeclaration","scope":30553,"src":"4682:24:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},"typeName":{"id":30419,"nodeType":"UserDefinedTypeName","pathNode":{"id":30418,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"4682:14:110"},"referencedDeclaration":1464,"src":"4682:14:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"visibility":"internal"},{"constant":false,"id":30422,"mutability":"mutable","name":"collateralAmount","nameLocation":"4720:16:110","nodeType":"VariableDeclaration","scope":30553,"src":"4712:24:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30421,"name":"uint256","nodeType":"ElementaryTypeName","src":"4712:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30424,"mutability":"mutable","name":"debtRepayAmount","nameLocation":"4750:15:110","nodeType":"VariableDeclaration","scope":30553,"src":"4742:23:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30423,"name":"uint256","nodeType":"ElementaryTypeName","src":"4742:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30426,"mutability":"mutable","name":"debtRateMode","nameLocation":"4779:12:110","nodeType":"VariableDeclaration","scope":30553,"src":"4771:20:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30425,"name":"uint256","nodeType":"ElementaryTypeName","src":"4771:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30428,"mutability":"mutable","name":"buyAllBalanceOffset","nameLocation":"4805:19:110","nodeType":"VariableDeclaration","scope":30553,"src":"4797:27:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30427,"name":"uint256","nodeType":"ElementaryTypeName","src":"4797:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30430,"mutability":"mutable","name":"paraswapData","nameLocation":"4845:12:110","nodeType":"VariableDeclaration","scope":30553,"src":"4830:27:110","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":30429,"name":"bytes","nodeType":"ElementaryTypeName","src":"4830:5:110","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":30433,"mutability":"mutable","name":"permitSignature","nameLocation":"4888:15:110","nodeType":"VariableDeclaration","scope":30553,"src":"4863:40:110","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_calldata_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature"},"typeName":{"id":30432,"nodeType":"UserDefinedTypeName","pathNode":{"id":30431,"name":"PermitSignature","nodeType":"IdentifierPath","referencedDeclaration":29019,"src":"4863:15:110"},"referencedDeclaration":29019,"src":"4863:15:110","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_storage_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature"}},"visibility":"internal"}],"src":"4640:267:110"},"returnParameters":{"id":30437,"nodeType":"ParameterList","parameters":[],"src":"4930:0:110"},"scope":30777,"src":"4619:1543:110","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":30695,"nodeType":"Block","src":"6684:1444:110","statements":[{"assignments":[30570,30572,30574,30576,30578,30581],"declarations":[{"constant":false,"id":30570,"mutability":"mutable","name":"debtAsset","nameLocation":"6713:9:110","nodeType":"VariableDeclaration","scope":30695,"src":"6698:24:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},"typeName":{"id":30569,"nodeType":"UserDefinedTypeName","pathNode":{"id":30568,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"6698:14:110"},"referencedDeclaration":1464,"src":"6698:14:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"visibility":"internal"},{"constant":false,"id":30572,"mutability":"mutable","name":"debtRepayAmount","nameLocation":"6738:15:110","nodeType":"VariableDeclaration","scope":30695,"src":"6730:23:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30571,"name":"uint256","nodeType":"ElementaryTypeName","src":"6730:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30574,"mutability":"mutable","name":"buyAllBalanceOffset","nameLocation":"6769:19:110","nodeType":"VariableDeclaration","scope":30695,"src":"6761:27:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30573,"name":"uint256","nodeType":"ElementaryTypeName","src":"6761:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30576,"mutability":"mutable","name":"rateMode","nameLocation":"6804:8:110","nodeType":"VariableDeclaration","scope":30695,"src":"6796:16:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30575,"name":"uint256","nodeType":"ElementaryTypeName","src":"6796:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30578,"mutability":"mutable","name":"paraswapData","nameLocation":"6833:12:110","nodeType":"VariableDeclaration","scope":30695,"src":"6820:25:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":30577,"name":"bytes","nodeType":"ElementaryTypeName","src":"6820:5:110","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":30581,"mutability":"mutable","name":"permitSignature","nameLocation":"6876:15:110","nodeType":"VariableDeclaration","scope":30695,"src":"6853:38:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_memory_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature"},"typeName":{"id":30580,"nodeType":"UserDefinedTypeName","pathNode":{"id":30579,"name":"PermitSignature","nodeType":"IdentifierPath","referencedDeclaration":29019,"src":"6853:15:110"},"referencedDeclaration":29019,"src":"6853:15:110","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_storage_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature"}},"visibility":"internal"}],"id":30597,"initialValue":{"arguments":[{"id":30584,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30556,"src":"6911:6:110","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"components":[{"id":30585,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"6920:14:110","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},{"id":30587,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6936:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":30586,"name":"uint256","nodeType":"ElementaryTypeName","src":"6936:7:110","typeDescriptions":{}}},{"id":30589,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6945:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":30588,"name":"uint256","nodeType":"ElementaryTypeName","src":"6945:7:110","typeDescriptions":{}}},{"id":30591,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6954:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":30590,"name":"uint256","nodeType":"ElementaryTypeName","src":"6954:7:110","typeDescriptions":{}}},{"id":30593,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6963:5:110","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":30592,"name":"bytes","nodeType":"ElementaryTypeName","src":"6963:5:110","typeDescriptions":{}}},{"id":30594,"name":"PermitSignature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29019,"src":"6970:15:110","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PermitSignature_$29019_storage_ptr_$","typeString":"type(struct BaseParaSwapAdapter.PermitSignature storage pointer)"}}],"id":30595,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6919:67:110","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_contract$_IERC20Detailed_$1464_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$_t_type$_t_struct$_PermitSignature_$29019_storage_ptr_$_$","typeString":"tuple(type(contract IERC20Detailed),type(uint256),type(uint256),type(uint256),type(bytes storage pointer),type(struct BaseParaSwapAdapter.PermitSignature storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_tuple$_t_type$_t_contract$_IERC20Detailed_$1464_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$_t_type$_t_struct$_PermitSignature_$29019_storage_ptr_$_$","typeString":"tuple(type(contract IERC20Detailed),type(uint256),type(uint256),type(uint256),type(bytes storage pointer),type(struct BaseParaSwapAdapter.PermitSignature storage pointer))"}],"expression":{"id":30582,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6900:3:110","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":30583,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"decode","nodeType":"MemberAccess","src":"6900:10:110","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":30596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6900:87:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20Detailed_$1464_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_struct$_PermitSignature_$29019_memory_ptr_$","typeString":"tuple(contract IERC20Detailed,uint256,uint256,uint256,bytes memory,struct BaseParaSwapAdapter.PermitSignature memory)"}},"nodeType":"VariableDeclarationStatement","src":"6690:297:110"},{"expression":{"id":30606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30598,"name":"debtRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30572,"src":"6994:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":30600,"name":"debtAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30570,"src":"7038:9:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},{"id":30601,"name":"rateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30576,"src":"7055:8:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30602,"name":"buyAllBalanceOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30574,"src":"7071:19:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30603,"name":"debtRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30572,"src":"7098:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30604,"name":"initiator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30560,"src":"7121:9:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":30599,"name":"getDebtRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30776,"src":"7012:18:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20Detailed_$1464_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (contract IERC20Detailed,uint256,uint256,uint256,address) view returns (uint256)"}},"id":30605,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7012:124:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6994:142:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30607,"nodeType":"ExpressionStatement","src":"6994:142:110"},{"assignments":[30609],"declarations":[{"constant":false,"id":30609,"mutability":"mutable","name":"amountSold","nameLocation":"7151:10:110","nodeType":"VariableDeclaration","scope":30695,"src":"7143:18:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30608,"name":"uint256","nodeType":"ElementaryTypeName","src":"7143:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30618,"initialValue":{"arguments":[{"id":30611,"name":"buyAllBalanceOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30574,"src":"7186:19:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30612,"name":"paraswapData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30578,"src":"7213:12:110","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":30613,"name":"collateralAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30563,"src":"7233:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},{"id":30614,"name":"debtAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30570,"src":"7256:9:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},{"id":30615,"name":"collateralAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30565,"src":"7273:16:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30616,"name":"debtRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30572,"src":"7297:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30610,"name":"_buyOnParaSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29558,"src":"7164:14:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_bytes_memory_ptr_$_t_contract$_IERC20Detailed_$1464_$_t_contract$_IERC20Detailed_$1464_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,bytes memory,contract IERC20Detailed,contract IERC20Detailed,uint256,uint256) returns (uint256)"}},"id":30617,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7164:154:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7143:175:110"},{"expression":{"arguments":[{"arguments":[{"id":30625,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"7476:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}],"id":30624,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7468:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30623,"name":"address","nodeType":"ElementaryTypeName","src":"7468:7:110","typeDescriptions":{}}},"id":30626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7468:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":30627,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7483:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"arguments":[{"id":30620,"name":"debtAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30570,"src":"7445:9:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":30619,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"7438:6:110","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":30621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7438:17:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":30622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeApprove","nodeType":"MemberAccess","referencedDeclaration":2067,"src":"7438:29:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":30628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7438:47:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30629,"nodeType":"ExpressionStatement","src":"7438:47:110"},{"expression":{"arguments":[{"arguments":[{"id":30636,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"7529:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}],"id":30635,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7521:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30634,"name":"address","nodeType":"ElementaryTypeName","src":"7521:7:110","typeDescriptions":{}}},"id":30637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7521:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30638,"name":"debtRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30572,"src":"7536:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":30631,"name":"debtAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30570,"src":"7498:9:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":30630,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"7491:6:110","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":30632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7491:17:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":30633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeApprove","nodeType":"MemberAccess","referencedDeclaration":2067,"src":"7491:29:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":30639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7491:61:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30640,"nodeType":"ExpressionStatement","src":"7491:61:110"},{"expression":{"arguments":[{"arguments":[{"id":30646,"name":"debtAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30570,"src":"7577:9:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":30645,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7569:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30644,"name":"address","nodeType":"ElementaryTypeName","src":"7569:7:110","typeDescriptions":{}}},"id":30647,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7569:18:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30648,"name":"debtRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30572,"src":"7589:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30649,"name":"rateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30576,"src":"7606:8:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30650,"name":"initiator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30560,"src":"7616:9:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":30641,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"7558:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":30643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"repay","nodeType":"MemberAccess","referencedDeclaration":4505,"src":"7558:10:110","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,uint256,address) external returns (uint256)"}},"id":30651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7558:68:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30652,"nodeType":"ExpressionStatement","src":"7558:68:110"},{"assignments":[30654],"declarations":[{"constant":false,"id":30654,"mutability":"mutable","name":"neededForFlashLoanRepay","nameLocation":"7641:23:110","nodeType":"VariableDeclaration","scope":30695,"src":"7633:31:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30653,"name":"uint256","nodeType":"ElementaryTypeName","src":"7633:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30659,"initialValue":{"arguments":[{"id":30657,"name":"premium","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30558,"src":"7682:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":30655,"name":"amountSold","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30609,"src":"7667:10:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":2216,"src":"7667:14:110","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":30658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7667:23:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7633:57:110"},{"expression":{"arguments":[{"arguments":[{"id":30663,"name":"collateralAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30563,"src":"7765:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":30662,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7757:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30661,"name":"address","nodeType":"ElementaryTypeName","src":"7757:7:110","typeDescriptions":{}}},"id":30664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7757:24:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30665,"name":"initiator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30560,"src":"7789:9:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30666,"name":"neededForFlashLoanRepay","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30654,"src":"7806:23:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30667,"name":"permitSignature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30581,"src":"7837:15:110","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_memory_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_PermitSignature_$29019_memory_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature memory"}],"id":30660,"name":"_pullATokenAndWithdraw","nodeType":"Identifier","overloadedDeclarations":[29151,29220],"referencedDeclaration":29151,"src":"7727:22:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_struct$_PermitSignature_$29019_memory_ptr_$returns$__$","typeString":"function (address,address,uint256,struct BaseParaSwapAdapter.PermitSignature memory)"}},"id":30668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7727:131:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30669,"nodeType":"ExpressionStatement","src":"7727:131:110"},{"expression":{"arguments":[{"arguments":[{"id":30676,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"8027:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}],"id":30675,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8019:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30674,"name":"address","nodeType":"ElementaryTypeName","src":"8019:7:110","typeDescriptions":{}}},"id":30677,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8019:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":30678,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8034:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"arguments":[{"id":30671,"name":"collateralAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30563,"src":"7990:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":30670,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"7983:6:110","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":30672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7983:23:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":30673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeApprove","nodeType":"MemberAccess","referencedDeclaration":2067,"src":"7983:35:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":30679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7983:53:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30680,"nodeType":"ExpressionStatement","src":"7983:53:110"},{"expression":{"arguments":[{"arguments":[{"id":30687,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"8086:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}],"id":30686,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8078:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30685,"name":"address","nodeType":"ElementaryTypeName","src":"8078:7:110","typeDescriptions":{}}},"id":30688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8078:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":30691,"name":"premium","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30558,"src":"8114:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":30689,"name":"collateralAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30565,"src":"8093:16:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"add","nodeType":"MemberAccess","referencedDeclaration":2216,"src":"8093:20:110","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":30692,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8093:29:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":30682,"name":"collateralAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30563,"src":"8049:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":30681,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"8042:6:110","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":30683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8042:23:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":30684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeApprove","nodeType":"MemberAccess","referencedDeclaration":2067,"src":"8042:35:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":30693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8042:81:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30694,"nodeType":"ExpressionStatement","src":"8042:81:110"}]},"documentation":{"id":30554,"nodeType":"StructuredDocumentation","src":"6166:342:110","text":" @dev Perform the repay of the debt, pulls the initiator collateral and swaps to repay the flash loan\n @param premium Fee of the flash loan\n @param initiator Address of the user\n @param collateralAsset Address of token to be swapped\n @param collateralAmount Amount of the reserve to be swapped(flash loan amount)"},"id":30696,"implemented":true,"kind":"function","modifiers":[],"name":"_swapAndRepay","nameLocation":"6521:13:110","nodeType":"FunctionDefinition","parameters":{"id":30566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30556,"mutability":"mutable","name":"params","nameLocation":"6555:6:110","nodeType":"VariableDeclaration","scope":30696,"src":"6540:21:110","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":30555,"name":"bytes","nodeType":"ElementaryTypeName","src":"6540:5:110","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":30558,"mutability":"mutable","name":"premium","nameLocation":"6575:7:110","nodeType":"VariableDeclaration","scope":30696,"src":"6567:15:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30557,"name":"uint256","nodeType":"ElementaryTypeName","src":"6567:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30560,"mutability":"mutable","name":"initiator","nameLocation":"6596:9:110","nodeType":"VariableDeclaration","scope":30696,"src":"6588:17:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30559,"name":"address","nodeType":"ElementaryTypeName","src":"6588:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30563,"mutability":"mutable","name":"collateralAsset","nameLocation":"6626:15:110","nodeType":"VariableDeclaration","scope":30696,"src":"6611:30:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},"typeName":{"id":30562,"nodeType":"UserDefinedTypeName","pathNode":{"id":30561,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"6611:14:110"},"referencedDeclaration":1464,"src":"6611:14:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"visibility":"internal"},{"constant":false,"id":30565,"mutability":"mutable","name":"collateralAmount","nameLocation":"6655:16:110","nodeType":"VariableDeclaration","scope":30696,"src":"6647:24:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30564,"name":"uint256","nodeType":"ElementaryTypeName","src":"6647:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6534:141:110"},"returnParameters":{"id":30567,"nodeType":"ParameterList","parameters":[],"src":"6684:0:110"},"scope":30777,"src":"6512:1616:110","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":30775,"nodeType":"Block","src":"8332:633:110","statements":[{"assignments":[30716],"declarations":[{"constant":false,"id":30716,"mutability":"mutable","name":"debtReserveData","nameLocation":"8367:15:110","nodeType":"VariableDeclaration","scope":30775,"src":"8338:44:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":30715,"nodeType":"UserDefinedTypeName","pathNode":{"id":30714,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"8338:21:110"},"referencedDeclaration":21315,"src":"8338:21:110","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":30723,"initialValue":{"arguments":[{"arguments":[{"id":30720,"name":"debtAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30699,"src":"8409:9:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":30719,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8401:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30718,"name":"address","nodeType":"ElementaryTypeName","src":"8401:7:110","typeDescriptions":{}}},"id":30721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8401:18:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":30717,"name":"_getReserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29117,"src":"8385:15:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_struct$_ReserveData_$21315_memory_ptr_$","typeString":"function (address) view returns (struct DataTypes.ReserveData memory)"}},"id":30722,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8385:35:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"8338:82:110"},{"assignments":[30725],"declarations":[{"constant":false,"id":30725,"mutability":"mutable","name":"debtToken","nameLocation":"8435:9:110","nodeType":"VariableDeclaration","scope":30775,"src":"8427:17:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30724,"name":"address","nodeType":"ElementaryTypeName","src":"8427:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":30739,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"id":30733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":30728,"name":"rateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30701,"src":"8474:8:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":30726,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"8447:9:110","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":30727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"8447:26:110","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":30729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8447:36:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":30730,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"8487:9:110","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":30731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"8487:26:110","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":30732,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"STABLE","nodeType":"MemberAccess","referencedDeclaration":21335,"src":"8487:33:110","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"src":"8447:73:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":30736,"name":"debtReserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30716,"src":"8576:15:110","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":30737,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21306,"src":"8576:40:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":30738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"8447:169:110","trueExpression":{"expression":{"id":30734,"name":"debtReserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30716,"src":"8529:15:110","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":30735,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"8529:38:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8427:189:110"},{"assignments":[30741],"declarations":[{"constant":false,"id":30741,"mutability":"mutable","name":"currentDebt","nameLocation":"8631:11:110","nodeType":"VariableDeclaration","scope":30775,"src":"8623:19:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30740,"name":"uint256","nodeType":"ElementaryTypeName","src":"8623:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30748,"initialValue":{"arguments":[{"id":30746,"name":"initiator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30707,"src":"8673:9:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":30743,"name":"debtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30725,"src":"8652:9:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":30742,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"8645:6:110","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":30744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8645:17:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":30745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"8645:27:110","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":30747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8645:38:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8623:60:110"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30749,"name":"buyAllBalanceOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30703,"src":"8694:19:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":30750,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8717:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8694:24:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":30771,"nodeType":"Block","src":"8849:83:110","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30765,"name":"debtRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30705,"src":"8865:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":30766,"name":"currentDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30741,"src":"8884:11:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8865:30:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e56414c49445f444542545f52455041595f414d4f554e54","id":30768,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8897:27:110","typeDescriptions":{"typeIdentifier":"t_stringliteral_aaf54d652206a8d20544924cfa9c9432dfe69bab095c3b86a90e384e78ddb36d","typeString":"literal_string \"INVALID_DEBT_REPAY_AMOUNT\""},"value":"INVALID_DEBT_REPAY_AMOUNT"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_aaf54d652206a8d20544924cfa9c9432dfe69bab095c3b86a90e384e78ddb36d","typeString":"literal_string \"INVALID_DEBT_REPAY_AMOUNT\""}],"id":30764,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8857:7:110","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8857:68:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30770,"nodeType":"ExpressionStatement","src":"8857:68:110"}]},"id":30772,"nodeType":"IfStatement","src":"8690:242:110","trueBody":{"id":30763,"nodeType":"Block","src":"8720:123:110","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30753,"name":"currentDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30741,"src":"8736:11:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":30754,"name":"debtRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30705,"src":"8751:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8736:30:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e53554646494349454e545f414d4f554e545f544f5f5245504159","id":30756,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8768:30:110","typeDescriptions":{"typeIdentifier":"t_stringliteral_170e863dc30648ef8ff66ea3f3e18e36ff4d45f0897cc6afd8a56e95f00a3d60","typeString":"literal_string \"INSUFFICIENT_AMOUNT_TO_REPAY\""},"value":"INSUFFICIENT_AMOUNT_TO_REPAY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_170e863dc30648ef8ff66ea3f3e18e36ff4d45f0897cc6afd8a56e95f00a3d60","typeString":"literal_string \"INSUFFICIENT_AMOUNT_TO_REPAY\""}],"id":30752,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8728:7:110","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8728:71:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30758,"nodeType":"ExpressionStatement","src":"8728:71:110"},{"expression":{"id":30761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30759,"name":"debtRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30705,"src":"8807:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30760,"name":"currentDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30741,"src":"8825:11:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8807:29:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30762,"nodeType":"ExpressionStatement","src":"8807:29:110"}]}},{"expression":{"id":30773,"name":"debtRepayAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30705,"src":"8945:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":30711,"id":30774,"nodeType":"Return","src":"8938:22:110"}]},"id":30776,"implemented":true,"kind":"function","modifiers":[],"name":"getDebtRepayAmount","nameLocation":"8141:18:110","nodeType":"FunctionDefinition","parameters":{"id":30708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30699,"mutability":"mutable","name":"debtAsset","nameLocation":"8180:9:110","nodeType":"VariableDeclaration","scope":30776,"src":"8165:24:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},"typeName":{"id":30698,"nodeType":"UserDefinedTypeName","pathNode":{"id":30697,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"8165:14:110"},"referencedDeclaration":1464,"src":"8165:14:110","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"visibility":"internal"},{"constant":false,"id":30701,"mutability":"mutable","name":"rateMode","nameLocation":"8203:8:110","nodeType":"VariableDeclaration","scope":30776,"src":"8195:16:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30700,"name":"uint256","nodeType":"ElementaryTypeName","src":"8195:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30703,"mutability":"mutable","name":"buyAllBalanceOffset","nameLocation":"8225:19:110","nodeType":"VariableDeclaration","scope":30776,"src":"8217:27:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30702,"name":"uint256","nodeType":"ElementaryTypeName","src":"8217:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30705,"mutability":"mutable","name":"debtRepayAmount","nameLocation":"8258:15:110","nodeType":"VariableDeclaration","scope":30776,"src":"8250:23:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30704,"name":"uint256","nodeType":"ElementaryTypeName","src":"8250:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30707,"mutability":"mutable","name":"initiator","nameLocation":"8287:9:110","nodeType":"VariableDeclaration","scope":30776,"src":"8279:17:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30706,"name":"address","nodeType":"ElementaryTypeName","src":"8279:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8159:141:110"},"returnParameters":{"id":30711,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30710,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30776,"src":"8323:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30709,"name":"uint256","nodeType":"ElementaryTypeName","src":"8323:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8322:9:110"},"scope":30777,"src":"8132:833:110","stateMutability":"view","virtual":false,"visibility":"private"}],"scope":30778,"src":"1192:7775:110","usedErrors":[]}],"src":"37:8931:110"},"id":110},"contracts/adapters/paraswap/ParaSwapWithdrawSwapAdapter.sol":{"ast":{"absolutePath":"contracts/adapters/paraswap/ParaSwapWithdrawSwapAdapter.sol","exportedSymbols":{"BaseParaSwapSellAdapter":[29852],"IERC20Detailed":[1464],"IERC20WithPermit":[4127],"IParaSwapAugustus":[30951],"IParaSwapAugustusRegistry":[30961],"IPoolAddressesProvider":[5069],"ParaSwapWithdrawSwapAdapter":[30943],"ReentrancyGuard":[31001],"SafeERC20":[2190]},"id":30944,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":30779,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:111"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","id":30781,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30944,"sourceUnit":1465,"src":"63:110:111","symbolAliases":[{"foreign":{"id":30780,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:14:111","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol","file":"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol","id":30783,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30944,"sourceUnit":4128,"src":"174:89:111","symbolAliases":[{"foreign":{"id":30782,"name":"IERC20WithPermit","nodeType":"Identifier","overloadedDeclarations":[],"src":"182:16:111","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","id":30785,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30944,"sourceUnit":5070,"src":"264:101:111","symbolAliases":[{"foreign":{"id":30784,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"272:22:111","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/adapters/paraswap/BaseParaSwapSellAdapter.sol","file":"./BaseParaSwapSellAdapter.sol","id":30787,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30944,"sourceUnit":29853,"src":"366:70:111","symbolAliases":[{"foreign":{"id":30786,"name":"BaseParaSwapSellAdapter","nodeType":"Identifier","overloadedDeclarations":[],"src":"374:23:111","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/adapters/paraswap/interfaces/IParaSwapAugustusRegistry.sol","file":"./interfaces/IParaSwapAugustusRegistry.sol","id":30789,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30944,"sourceUnit":30962,"src":"437:85:111","symbolAliases":[{"foreign":{"id":30788,"name":"IParaSwapAugustusRegistry","nodeType":"Identifier","overloadedDeclarations":[],"src":"445:25:111","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol","id":30791,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30944,"sourceUnit":2191,"src":"523:100:111","symbolAliases":[{"foreign":{"id":30790,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"531:9:111","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/adapters/paraswap/interfaces/IParaSwapAugustus.sol","file":"./interfaces/IParaSwapAugustus.sol","id":30793,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30944,"sourceUnit":30952,"src":"624:69:111","symbolAliases":[{"foreign":{"id":30792,"name":"IParaSwapAugustus","nodeType":"Identifier","overloadedDeclarations":[],"src":"632:17:111","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/dependencies/openzeppelin/ReentrancyGuard.sol","file":"../../dependencies/openzeppelin/ReentrancyGuard.sol","id":30795,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30944,"sourceUnit":31002,"src":"694:84:111","symbolAliases":[{"foreign":{"id":30794,"name":"ReentrancyGuard","nodeType":"Identifier","overloadedDeclarations":[],"src":"702:15:111","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":30796,"name":"BaseParaSwapSellAdapter","nodeType":"IdentifierPath","referencedDeclaration":29852,"src":"820:23:111"},"id":30797,"nodeType":"InheritanceSpecifier","src":"820:23:111"},{"baseName":{"id":30798,"name":"ReentrancyGuard","nodeType":"IdentifierPath","referencedDeclaration":31001,"src":"845:15:111"},"id":30799,"nodeType":"InheritanceSpecifier","src":"845:15:111"}],"canonicalName":"ParaSwapWithdrawSwapAdapter","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":30943,"linearizedBaseContracts":[30943,31001,29852,29245,1573,748,3466,3541],"name":"ParaSwapWithdrawSwapAdapter","nameLocation":"789:27:111","nodeType":"ContractDefinition","nodes":[{"id":30803,"libraryName":{"id":30800,"name":"SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":2190,"src":"871:9:111"},"nodeType":"UsingForDirective","src":"865:35:111","typeName":{"id":30802,"nodeType":"UserDefinedTypeName","pathNode":{"id":30801,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"885:14:111"},"referencedDeclaration":1464,"src":"885:14:111","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}},{"body":{"id":30822,"nodeType":"Block","src":"1094:35:111","statements":[{"expression":{"arguments":[{"id":30819,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30811,"src":"1118:5:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":30818,"name":"transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1572,"src":"1100:17:111","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":30820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1100:24:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30821,"nodeType":"ExpressionStatement","src":"1100:24:111"}]},"id":30823,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":30814,"name":"addressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30806,"src":"1057:17:111","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},{"id":30815,"name":"augustusRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30809,"src":"1076:16:111","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"}}],"id":30816,"kind":"baseConstructorSpecifier","modifierName":{"id":30813,"name":"BaseParaSwapSellAdapter","nodeType":"IdentifierPath","referencedDeclaration":29852,"src":"1033:23:111"},"nodeType":"ModifierInvocation","src":"1033:60:111"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":30812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30806,"mutability":"mutable","name":"addressesProvider","nameLocation":"944:17:111","nodeType":"VariableDeclaration","scope":30823,"src":"921:40:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":30805,"nodeType":"UserDefinedTypeName","pathNode":{"id":30804,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"921:22:111"},"referencedDeclaration":5069,"src":"921:22:111","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"},{"constant":false,"id":30809,"mutability":"mutable","name":"augustusRegistry","nameLocation":"993:16:111","nodeType":"VariableDeclaration","scope":30823,"src":"967:42:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"},"typeName":{"id":30808,"nodeType":"UserDefinedTypeName","pathNode":{"id":30807,"name":"IParaSwapAugustusRegistry","nodeType":"IdentifierPath","referencedDeclaration":30961,"src":"967:25:111"},"referencedDeclaration":30961,"src":"967:25:111","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustusRegistry_$30961","typeString":"contract IParaSwapAugustusRegistry"}},"visibility":"internal"},{"constant":false,"id":30811,"mutability":"mutable","name":"owner","nameLocation":"1023:5:111","nodeType":"VariableDeclaration","scope":30823,"src":"1015:13:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30810,"name":"address","nodeType":"ElementaryTypeName","src":"1015:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"915:117:111"},"returnParameters":{"id":30817,"nodeType":"ParameterList","parameters":[],"src":"1094:0:111"},"scope":30943,"src":"904:225:111","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[3528],"body":{"id":30845,"nodeType":"Block","src":"1281:34:111","statements":[{"expression":{"arguments":[{"hexValue":"4e4f545f535550504f52544544","id":30842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1294:15:111","typeDescriptions":{"typeIdentifier":"t_stringliteral_e2a8e7139f3bc1b76f03a9ab4d7a5e5329d0cc7d7a0c99dcd453eb8f41b24b0b","typeString":"literal_string \"NOT_SUPPORTED\""},"value":"NOT_SUPPORTED"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_e2a8e7139f3bc1b76f03a9ab4d7a5e5329d0cc7d7a0c99dcd453eb8f41b24b0b","typeString":"literal_string \"NOT_SUPPORTED\""}],"id":30841,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"1287:6:111","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":30843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1287:23:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30844,"nodeType":"ExpressionStatement","src":"1287:23:111"}]},"functionSelector":"1b11d0ff","id":30846,"implemented":true,"kind":"function","modifiers":[{"id":30837,"kind":"modifierInvocation","modifierName":{"id":30836,"name":"nonReentrant","nodeType":"IdentifierPath","referencedDeclaration":31000,"src":"1253:12:111"},"nodeType":"ModifierInvocation","src":"1253:12:111"}],"name":"executeOperation","nameLocation":"1142:16:111","nodeType":"FunctionDefinition","overrides":{"id":30835,"nodeType":"OverrideSpecifier","overrides":[],"src":"1244:8:111"},"parameters":{"id":30834,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30825,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30846,"src":"1164:7:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30824,"name":"address","nodeType":"ElementaryTypeName","src":"1164:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30827,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30846,"src":"1177:7:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30826,"name":"uint256","nodeType":"ElementaryTypeName","src":"1177:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30829,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30846,"src":"1190:7:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30828,"name":"uint256","nodeType":"ElementaryTypeName","src":"1190:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30831,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30846,"src":"1203:7:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30830,"name":"address","nodeType":"ElementaryTypeName","src":"1203:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":30833,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30846,"src":"1216:14:111","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":30832,"name":"bytes","nodeType":"ElementaryTypeName","src":"1216:5:111","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1158:76:111"},"returnParameters":{"id":30840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30839,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30846,"src":"1275:4:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":30838,"name":"bool","nodeType":"ElementaryTypeName","src":"1275:4:111","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1274:6:111"},"scope":30943,"src":"1133:182:111","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":30941,"nodeType":"Block","src":"2577:728:111","statements":[{"assignments":[30874],"declarations":[{"constant":false,"id":30874,"mutability":"mutable","name":"aToken","nameLocation":"2600:6:111","nodeType":"VariableDeclaration","scope":30941,"src":"2583:23:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"},"typeName":{"id":30873,"nodeType":"UserDefinedTypeName","pathNode":{"id":30872,"name":"IERC20WithPermit","nodeType":"IdentifierPath","referencedDeclaration":4127,"src":"2583:16:111"},"referencedDeclaration":4127,"src":"2583:16:111","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"}},"visibility":"internal"}],"id":30884,"initialValue":{"arguments":[{"expression":{"arguments":[{"arguments":[{"id":30879,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30850,"src":"2657:15:111","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":30878,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2649:7:111","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30877,"name":"address","nodeType":"ElementaryTypeName","src":"2649:7:111","typeDescriptions":{}}},"id":30880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2649:24:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":30876,"name":"_getReserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29117,"src":"2633:15:111","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_struct$_ReserveData_$21315_memory_ptr_$","typeString":"function (address) view returns (struct DataTypes.ReserveData memory)"}},"id":30881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2633:41:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":30882,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"2633:55:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":30875,"name":"IERC20WithPermit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4127,"src":"2609:16:111","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20WithPermit_$4127_$","typeString":"type(contract IERC20WithPermit)"}},"id":30883,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2609:85:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"}},"nodeType":"VariableDeclarationStatement","src":"2583:111:111"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30885,"name":"swapAllBalanceOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30859,"src":"2705:20:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":30886,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2729:1:111","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2705:25:111","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30908,"nodeType":"IfStatement","src":"2701:193:111","trueBody":{"id":30907,"nodeType":"Block","src":"2732:162:111","statements":[{"assignments":[30889],"declarations":[{"constant":false,"id":30889,"mutability":"mutable","name":"balance","nameLocation":"2748:7:111","nodeType":"VariableDeclaration","scope":30907,"src":"2740:15:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30888,"name":"uint256","nodeType":"ElementaryTypeName","src":"2740:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30895,"initialValue":{"arguments":[{"expression":{"id":30892,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2775:3:111","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":30893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2775:10:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":30890,"name":"aToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30874,"src":"2758:6:111","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"}},"id":30891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"2758:16:111","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":30894,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2758:28:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2740:46:111"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30897,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30889,"src":"2802:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":30898,"name":"amountToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30855,"src":"2813:12:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2802:23:111","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e53554646494349454e545f414d4f554e545f544f5f53574150","id":30900,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2827:29:111","typeDescriptions":{"typeIdentifier":"t_stringliteral_f73db277b52b12832d4a33a7ef8ea973b58412dbb6a626efd61c48d6a6304661","typeString":"literal_string \"INSUFFICIENT_AMOUNT_TO_SWAP\""},"value":"INSUFFICIENT_AMOUNT_TO_SWAP"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f73db277b52b12832d4a33a7ef8ea973b58412dbb6a626efd61c48d6a6304661","typeString":"literal_string \"INSUFFICIENT_AMOUNT_TO_SWAP\""}],"id":30896,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2794:7:111","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2794:63:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30902,"nodeType":"ExpressionStatement","src":"2794:63:111"},{"expression":{"id":30905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30903,"name":"amountToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30855,"src":"2865:12:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30904,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30889,"src":"2880:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2865:22:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30906,"nodeType":"ExpressionStatement","src":"2865:22:111"}]}},{"expression":{"arguments":[{"arguments":[{"id":30912,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30850,"src":"2938:15:111","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}],"id":30911,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2930:7:111","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":30910,"name":"address","nodeType":"ElementaryTypeName","src":"2930:7:111","typeDescriptions":{}}},"id":30913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2930:24:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30914,"name":"aToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30874,"src":"2962:6:111","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"}},{"expression":{"id":30915,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2976:3:111","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":30916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2976:10:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30917,"name":"amountToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30855,"src":"2994:12:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30918,"name":"permitParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30867,"src":"3014:12:111","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_calldata_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20WithPermit_$4127","typeString":"contract IERC20WithPermit"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_PermitSignature_$29019_calldata_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature calldata"}],"id":30909,"name":"_pullATokenAndWithdraw","nodeType":"Identifier","overloadedDeclarations":[29151,29220],"referencedDeclaration":29220,"src":"2900:22:111","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20WithPermit_$4127_$_t_address_$_t_uint256_$_t_struct$_PermitSignature_$29019_memory_ptr_$returns$__$","typeString":"function (address,contract IERC20WithPermit,address,uint256,struct BaseParaSwapAdapter.PermitSignature memory)"}},"id":30919,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2900:132:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30920,"nodeType":"ExpressionStatement","src":"2900:132:111"},{"assignments":[30922],"declarations":[{"constant":false,"id":30922,"mutability":"mutable","name":"amountReceived","nameLocation":"3047:14:111","nodeType":"VariableDeclaration","scope":30941,"src":"3039:22:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30921,"name":"uint256","nodeType":"ElementaryTypeName","src":"3039:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30932,"initialValue":{"arguments":[{"id":30924,"name":"swapAllBalanceOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30859,"src":"3087:20:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30925,"name":"swapCalldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30861,"src":"3115:12:111","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},{"id":30926,"name":"augustus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30864,"src":"3135:8:111","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"}},{"id":30927,"name":"assetToSwapFrom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30850,"src":"3151:15:111","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},{"id":30928,"name":"assetToSwapTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30853,"src":"3174:13:111","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},{"id":30929,"name":"amountToSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30855,"src":"3195:12:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30930,"name":"minAmountToReceive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30857,"src":"3215:18:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"},{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"},{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30923,"name":"_sellOnParaSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29851,"src":"3064:15:111","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_bytes_memory_ptr_$_t_contract$_IParaSwapAugustus_$30951_$_t_contract$_IERC20Detailed_$1464_$_t_contract$_IERC20Detailed_$1464_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,bytes memory,contract IParaSwapAugustus,contract IERC20Detailed,contract IERC20Detailed,uint256,uint256) returns (uint256)"}},"id":30931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3064:175:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3039:200:111"},{"expression":{"arguments":[{"expression":{"id":30936,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3273:3:111","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":30937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3273:10:111","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":30938,"name":"amountReceived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30922,"src":"3285:14:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":30933,"name":"assetToSwapTo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30853,"src":"3246:13:111","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":30935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":1997,"src":"3246:26:111","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":30939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3246:54:111","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30940,"nodeType":"ExpressionStatement","src":"3246:54:111"}]},"documentation":{"id":30847,"nodeType":"StructuredDocumentation","src":"1319:934:111","text":" @dev Swaps an amount of an asset to another after a withdraw and transfers the new asset to the user.\n The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset and perform the swap.\n @param assetToSwapFrom Address of the underlying asset to be swapped from\n @param assetToSwapTo Address of the underlying asset to be swapped to\n @param amountToSwap Amount to be swapped, or maximum amount when swapping all balance\n @param minAmountToReceive Minimum amount to be received from the swap\n @param swapAllBalanceOffset Set to offset of fromAmount in Augustus calldata if wanting to swap all balance, otherwise 0\n @param swapCalldata Calldata for ParaSwap's AugustusSwapper contract\n @param augustus Address of ParaSwap's AugustusSwapper contract\n @param permitParams Struct containing the permit signatures, set to all zeroes if not used"},"functionSelector":"5fd73e07","id":30942,"implemented":true,"kind":"function","modifiers":[{"id":30870,"kind":"modifierInvocation","modifierName":{"id":30869,"name":"nonReentrant","nodeType":"IdentifierPath","referencedDeclaration":31000,"src":"2564:12:111"},"nodeType":"ModifierInvocation","src":"2564:12:111"}],"name":"withdrawAndSwap","nameLocation":"2265:15:111","nodeType":"FunctionDefinition","parameters":{"id":30868,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30850,"mutability":"mutable","name":"assetToSwapFrom","nameLocation":"2301:15:111","nodeType":"VariableDeclaration","scope":30942,"src":"2286:30:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},"typeName":{"id":30849,"nodeType":"UserDefinedTypeName","pathNode":{"id":30848,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"2286:14:111"},"referencedDeclaration":1464,"src":"2286:14:111","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"visibility":"internal"},{"constant":false,"id":30853,"mutability":"mutable","name":"assetToSwapTo","nameLocation":"2337:13:111","nodeType":"VariableDeclaration","scope":30942,"src":"2322:28:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"},"typeName":{"id":30852,"nodeType":"UserDefinedTypeName","pathNode":{"id":30851,"name":"IERC20Detailed","nodeType":"IdentifierPath","referencedDeclaration":1464,"src":"2322:14:111"},"referencedDeclaration":1464,"src":"2322:14:111","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"visibility":"internal"},{"constant":false,"id":30855,"mutability":"mutable","name":"amountToSwap","nameLocation":"2364:12:111","nodeType":"VariableDeclaration","scope":30942,"src":"2356:20:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30854,"name":"uint256","nodeType":"ElementaryTypeName","src":"2356:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30857,"mutability":"mutable","name":"minAmountToReceive","nameLocation":"2390:18:111","nodeType":"VariableDeclaration","scope":30942,"src":"2382:26:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30856,"name":"uint256","nodeType":"ElementaryTypeName","src":"2382:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30859,"mutability":"mutable","name":"swapAllBalanceOffset","nameLocation":"2422:20:111","nodeType":"VariableDeclaration","scope":30942,"src":"2414:28:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30858,"name":"uint256","nodeType":"ElementaryTypeName","src":"2414:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30861,"mutability":"mutable","name":"swapCalldata","nameLocation":"2463:12:111","nodeType":"VariableDeclaration","scope":30942,"src":"2448:27:111","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":30860,"name":"bytes","nodeType":"ElementaryTypeName","src":"2448:5:111","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":30864,"mutability":"mutable","name":"augustus","nameLocation":"2499:8:111","nodeType":"VariableDeclaration","scope":30942,"src":"2481:26:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"},"typeName":{"id":30863,"nodeType":"UserDefinedTypeName","pathNode":{"id":30862,"name":"IParaSwapAugustus","nodeType":"IdentifierPath","referencedDeclaration":30951,"src":"2481:17:111"},"referencedDeclaration":30951,"src":"2481:17:111","typeDescriptions":{"typeIdentifier":"t_contract$_IParaSwapAugustus_$30951","typeString":"contract IParaSwapAugustus"}},"visibility":"internal"},{"constant":false,"id":30867,"mutability":"mutable","name":"permitParams","nameLocation":"2538:12:111","nodeType":"VariableDeclaration","scope":30942,"src":"2513:37:111","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_calldata_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature"},"typeName":{"id":30866,"nodeType":"UserDefinedTypeName","pathNode":{"id":30865,"name":"PermitSignature","nodeType":"IdentifierPath","referencedDeclaration":29019,"src":"2513:15:111"},"referencedDeclaration":29019,"src":"2513:15:111","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSignature_$29019_storage_ptr","typeString":"struct BaseParaSwapAdapter.PermitSignature"}},"visibility":"internal"}],"src":"2280:274:111"},"returnParameters":{"id":30871,"nodeType":"ParameterList","parameters":[],"src":"2577:0:111"},"scope":30943,"src":"2256:1049:111","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":30944,"src":"780:2527:111","usedErrors":[]}],"src":"37:3270:111"},"id":111},"contracts/adapters/paraswap/interfaces/IParaSwapAugustus.sol":{"ast":{"absolutePath":"contracts/adapters/paraswap/interfaces/IParaSwapAugustus.sol","exportedSymbols":{"IParaSwapAugustus":[30951]},"id":30952,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":30945,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:112"},{"abstract":false,"baseContracts":[],"canonicalName":"IParaSwapAugustus","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":30951,"linearizedBaseContracts":[30951],"name":"IParaSwapAugustus","nameLocation":"73:17:112","nodeType":"ContractDefinition","nodes":[{"functionSelector":"d2c4b598","id":30950,"implemented":false,"kind":"function","modifiers":[],"name":"getTokenTransferProxy","nameLocation":"104:21:112","nodeType":"FunctionDefinition","parameters":{"id":30946,"nodeType":"ParameterList","parameters":[],"src":"125:2:112"},"returnParameters":{"id":30949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30948,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30950,"src":"151:7:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30947,"name":"address","nodeType":"ElementaryTypeName","src":"151:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"150:9:112"},"scope":30951,"src":"95:65:112","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":30952,"src":"63:99:112","usedErrors":[]}],"src":"37:126:112"},"id":112},"contracts/adapters/paraswap/interfaces/IParaSwapAugustusRegistry.sol":{"ast":{"absolutePath":"contracts/adapters/paraswap/interfaces/IParaSwapAugustusRegistry.sol","exportedSymbols":{"IParaSwapAugustusRegistry":[30961]},"id":30962,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":30953,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:113"},{"abstract":false,"baseContracts":[],"canonicalName":"IParaSwapAugustusRegistry","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":30961,"linearizedBaseContracts":[30961],"name":"IParaSwapAugustusRegistry","nameLocation":"73:25:113","nodeType":"ContractDefinition","nodes":[{"functionSelector":"fb04e17b","id":30960,"implemented":false,"kind":"function","modifiers":[],"name":"isValidAugustus","nameLocation":"112:15:113","nodeType":"FunctionDefinition","parameters":{"id":30956,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30955,"mutability":"mutable","name":"augustus","nameLocation":"136:8:113","nodeType":"VariableDeclaration","scope":30960,"src":"128:16:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":30954,"name":"address","nodeType":"ElementaryTypeName","src":"128:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"127:18:113"},"returnParameters":{"id":30959,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30958,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30960,"src":"169:4:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":30957,"name":"bool","nodeType":"ElementaryTypeName","src":"169:4:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"168:6:113"},"scope":30961,"src":"103:72:113","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":30962,"src":"63:114:113","usedErrors":[]}],"src":"37:141:113"},"id":113},"contracts/dependencies/openzeppelin/ReentrancyGuard.sol":{"ast":{"absolutePath":"contracts/dependencies/openzeppelin/ReentrancyGuard.sol","exportedSymbols":{"ReentrancyGuard":[31001]},"id":31002,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":30963,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"33:24:114"},{"abstract":true,"baseContracts":[],"canonicalName":"ReentrancyGuard","contractDependencies":[],"contractKind":"contract","documentation":{"id":30964,"nodeType":"StructuredDocumentation","src":"59:750:114","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":31001,"linearizedBaseContracts":[31001],"name":"ReentrancyGuard","nameLocation":"828:15:114","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":30967,"mutability":"constant","name":"_NOT_ENTERED","nameLocation":"1601:12:114","nodeType":"VariableDeclaration","scope":31001,"src":"1576:41:114","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30965,"name":"uint256","nodeType":"ElementaryTypeName","src":"1576:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":30966,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1616:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"private"},{"constant":true,"id":30970,"mutability":"constant","name":"_ENTERED","nameLocation":"1646:8:114","nodeType":"VariableDeclaration","scope":31001,"src":"1621:37:114","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30968,"name":"uint256","nodeType":"ElementaryTypeName","src":"1621:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":30969,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1657:1:114","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"private"},{"constant":false,"id":30972,"mutability":"mutable","name":"_status","nameLocation":"1679:7:114","nodeType":"VariableDeclaration","scope":31001,"src":"1663:23:114","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30971,"name":"uint256","nodeType":"ElementaryTypeName","src":"1663:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"body":{"id":30979,"nodeType":"Block","src":"1705:33:114","statements":[{"expression":{"id":30977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30975,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30972,"src":"1711:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30976,"name":"_NOT_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30967,"src":"1721:12:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1711:22:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30978,"nodeType":"ExpressionStatement","src":"1711:22:114"}]},"id":30980,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":30973,"nodeType":"ParameterList","parameters":[],"src":"1702:2:114"},"returnParameters":{"id":30974,"nodeType":"ParameterList","parameters":[],"src":"1705:0:114"},"scope":31001,"src":"1691:47:114","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":30999,"nodeType":"Block","src":"2121:387:114","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30984,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30972,"src":"2202:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":30985,"name":"_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30970,"src":"2213:8:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2202:19:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5265656e7472616e637947756172643a207265656e7472616e742063616c6c","id":30987,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2223:33:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619","typeString":"literal_string \"ReentrancyGuard: reentrant call\""},"value":"ReentrancyGuard: reentrant call"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619","typeString":"literal_string \"ReentrancyGuard: reentrant call\""}],"id":30983,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2194:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":30988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2194:63:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30989,"nodeType":"ExpressionStatement","src":"2194:63:114"},{"expression":{"id":30992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30990,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30972,"src":"2324:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30991,"name":"_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30970,"src":"2334:8:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2324:18:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30993,"nodeType":"ExpressionStatement","src":"2324:18:114"},{"id":30994,"nodeType":"PlaceholderStatement","src":"2349:1:114"},{"expression":{"id":30997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30995,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30972,"src":"2481:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30996,"name":"_NOT_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30967,"src":"2491:12:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2481:22:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30998,"nodeType":"ExpressionStatement","src":"2481:22:114"}]},"documentation":{"id":30981,"nodeType":"StructuredDocumentation","src":"1742:352:114","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":31000,"name":"nonReentrant","nameLocation":"2106:12:114","nodeType":"ModifierDefinition","parameters":{"id":30982,"nodeType":"ParameterList","parameters":[],"src":"2118:2:114"},"src":"2097:411:114","virtual":false,"visibility":"internal"}],"scope":31002,"src":"810:1700:114","usedErrors":[]}],"src":"33:2478:114"},"id":114},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","exportedSymbols":{"IERC20":[1442],"IERC20Detailed":[1464]},"id":31005,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31003,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:115"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","id":31004,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31005,"sourceUnit":1465,"src":"63:88:115","symbolAliases":[],"unitAlias":""}],"src":"39:113:115"},"id":115},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol","exportedSymbols":{"Address":[722],"BaseAdminUpgradeabilityProxy":[2683],"BaseUpgradeabilityProxy":[2748],"InitializableAdminUpgradeabilityProxy":[2819],"InitializableUpgradeabilityProxy":[2882],"Proxy":[2926],"UpgradeabilityProxy":[2979]},"id":31008,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31006,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:116"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol","id":31007,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31008,"sourceUnit":2820,"src":"63:116:116","symbolAliases":[],"unitAlias":""}],"src":"39:141:116"},"id":116},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/dependencies/weth/WETH9.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/dependencies/weth/WETH9.sol","exportedSymbols":{"WETH9":[3228]},"id":31011,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31009,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:117"},{"absolutePath":"@aave/core-v3/contracts/dependencies/weth/WETH9.sol","file":"@aave/core-v3/contracts/dependencies/weth/WETH9.sol","id":31010,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31011,"sourceUnit":3229,"src":"63:61:117","symbolAliases":[],"unitAlias":""}],"src":"39:86:117"},"id":117},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/deployments/ReservesSetupHelper.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/deployments/ReservesSetupHelper.sol","exportedSymbols":{"Ownable":[1573],"PoolConfigurator":[25278],"ReservesSetupHelper":[3388]},"id":31014,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31012,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:118"},{"absolutePath":"@aave/core-v3/contracts/deployments/ReservesSetupHelper.sol","file":"@aave/core-v3/contracts/deployments/ReservesSetupHelper.sol","id":31013,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31014,"sourceUnit":3389,"src":"63:69:118","symbolAliases":[],"unitAlias":""}],"src":"39:94:118"},"id":118},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/misc/AaveOracle.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/misc/AaveOracle.sol","exportedSymbols":{"AaveOracle":[6519],"AggregatorInterface":[47],"Errors":[12642],"IACLManager":[3718],"IAaveOracle":[3951],"IPoolAddressesProvider":[5069],"IPriceOracleGetter":[5835]},"id":31017,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31015,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:119"},{"absolutePath":"@aave/core-v3/contracts/misc/AaveOracle.sol","file":"@aave/core-v3/contracts/misc/AaveOracle.sol","id":31016,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31017,"sourceUnit":6520,"src":"63:53:119","symbolAliases":[],"unitAlias":""}],"src":"39:78:119"},"id":119},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/misc/AaveProtocolDataProvider.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/misc/AaveProtocolDataProvider.sol","exportedSymbols":{"AaveProtocolDataProvider":[7403],"DataTypes":[21633],"IERC20Detailed":[1464],"IPool":[4860],"IPoolAddressesProvider":[5069],"IPoolDataProvider":[5791],"IStableDebtToken":[6109],"IVariableDebtToken":[6155],"ReserveConfiguration":[11857],"UserConfiguration":[12368],"WadRayMath":[21219]},"id":31020,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31018,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:120"},{"absolutePath":"@aave/core-v3/contracts/misc/AaveProtocolDataProvider.sol","file":"@aave/core-v3/contracts/misc/AaveProtocolDataProvider.sol","id":31019,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31020,"sourceUnit":7404,"src":"63:67:120","symbolAliases":[],"unitAlias":""}],"src":"39:92:120"},"id":120},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/flashloan/MockFlashLoanReceiver.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/flashloan/MockFlashLoanReceiver.sol","exportedSymbols":{"FlashLoanReceiverBase":[3427],"GPv2SafeERC20":[118],"IERC20":[1442],"IPoolAddressesProvider":[5069],"MintableERC20":[8768],"MockFlashLoanReceiver":[7659]},"id":31023,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31021,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:121"},{"absolutePath":"@aave/core-v3/contracts/mocks/flashloan/MockFlashLoanReceiver.sol","file":"@aave/core-v3/contracts/mocks/flashloan/MockFlashLoanReceiver.sol","id":31022,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31023,"sourceUnit":7660,"src":"63:75:121","symbolAliases":[],"unitAlias":""}],"src":"39:100:121"},"id":121},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/helpers/MockIncentivesController.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/helpers/MockIncentivesController.sol","exportedSymbols":{"IAaveIncentivesController":[3875],"MockIncentivesController":[7677]},"id":31026,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31024,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:122"},{"absolutePath":"@aave/core-v3/contracts/mocks/helpers/MockIncentivesController.sol","file":"@aave/core-v3/contracts/mocks/helpers/MockIncentivesController.sol","id":31025,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31026,"sourceUnit":7678,"src":"63:76:122","symbolAliases":[],"unitAlias":""}],"src":"39:101:122"},"id":122},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/helpers/MockPool.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/helpers/MockPool.sol","exportedSymbols":{"IPoolAddressesProvider":[5069],"MockPool":[7754],"MockPoolInherited":[7824],"Pool":[23636]},"id":31029,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31027,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:123"},{"absolutePath":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol","file":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol","id":31028,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31029,"sourceUnit":7825,"src":"63:60:123","symbolAliases":[],"unitAlias":""}],"src":"39:85:123"},"id":123},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/helpers/MockReserveConfiguration.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/helpers/MockReserveConfiguration.sol","exportedSymbols":{"DataTypes":[21633],"MockReserveConfiguration":[8350],"ReserveConfiguration":[11857]},"id":31032,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31030,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:124"},{"absolutePath":"@aave/core-v3/contracts/mocks/helpers/MockReserveConfiguration.sol","file":"@aave/core-v3/contracts/mocks/helpers/MockReserveConfiguration.sol","id":31031,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31032,"sourceUnit":8351,"src":"63:76:124","symbolAliases":[],"unitAlias":""}],"src":"39:101:124"},"id":124},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/oracle/CLAggregators/MockAggregator.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/oracle/CLAggregators/MockAggregator.sol","exportedSymbols":{"MockAggregator":[8404]},"id":31035,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31033,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:125"},{"absolutePath":"@aave/core-v3/contracts/mocks/oracle/CLAggregators/MockAggregator.sol","file":"@aave/core-v3/contracts/mocks/oracle/CLAggregators/MockAggregator.sol","id":31034,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31035,"sourceUnit":8405,"src":"63:79:125","symbolAliases":[],"unitAlias":""}],"src":"39:104:125"},"id":125},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/oracle/PriceOracle.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/oracle/PriceOracle.sol","exportedSymbols":{"IPriceOracle":[5811],"PriceOracle":[8490]},"id":31038,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31036,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:126"},{"absolutePath":"@aave/core-v3/contracts/mocks/oracle/PriceOracle.sol","file":"@aave/core-v3/contracts/mocks/oracle/PriceOracle.sol","id":31037,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31038,"sourceUnit":8491,"src":"63:62:126","symbolAliases":[],"unitAlias":""}],"src":"39:87:126"},"id":126},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/tokens/MintableDelegationERC20.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/tokens/MintableDelegationERC20.sol","exportedSymbols":{"ERC20":[1279],"IDelegationToken":[4101],"MintableDelegationERC20":[8550]},"id":31041,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31039,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:127"},{"absolutePath":"@aave/core-v3/contracts/mocks/tokens/MintableDelegationERC20.sol","file":"@aave/core-v3/contracts/mocks/tokens/MintableDelegationERC20.sol","id":31040,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31041,"sourceUnit":8551,"src":"63:74:127","symbolAliases":[],"unitAlias":""}],"src":"39:99:127"},"id":127},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol","exportedSymbols":{"ERC20":[1279],"IERC20WithPermit":[4127],"MintableERC20":[8768]},"id":31044,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31042,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:128"},{"absolutePath":"@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol","file":"@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol","id":31043,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31044,"sourceUnit":8769,"src":"63:64:128","symbolAliases":[],"unitAlias":""}],"src":"39:89:128"},"id":128},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/tokens/WETH9Mocked.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/tokens/WETH9Mocked.sol","exportedSymbols":{"WETH9":[3228],"WETH9Mocked":[8829]},"id":31047,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31045,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:129"},{"absolutePath":"@aave/core-v3/contracts/mocks/tokens/WETH9Mocked.sol","file":"@aave/core-v3/contracts/mocks/tokens/WETH9Mocked.sol","id":31046,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31047,"sourceUnit":8830,"src":"63:62:129","symbolAliases":[],"unitAlias":""}],"src":"39:87:129"},"id":129},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol","exportedSymbols":{"AToken":[25985],"IPool":[4860],"MockAToken":[8857]},"id":31050,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31048,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:130"},{"absolutePath":"@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol","file":"@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol","id":31049,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31050,"sourceUnit":8858,"src":"63:69:130","symbolAliases":[],"unitAlias":""}],"src":"39:94:130"},"id":130},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol","exportedSymbols":{"MockInitializableFromConstructorImple":[9037],"MockInitializableImple":[8929],"MockInitializableImpleV2":[8997],"MockReentrantInitializableImple":[9078],"VersionedInitializable":[10573]},"id":31053,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31051,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:131"},{"absolutePath":"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol","file":"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol","id":31052,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31053,"sourceUnit":9079,"src":"63:90:131","symbolAliases":[],"unitAlias":""}],"src":"39:115:131"},"id":131},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol","exportedSymbols":{"IPool":[4860],"MockStableDebtToken":[9106],"StableDebtToken":[27108]},"id":31056,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31054,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:132"},{"absolutePath":"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol","file":"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol","id":31055,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31056,"sourceUnit":9107,"src":"63:78:132","symbolAliases":[],"unitAlias":""}],"src":"39:103:132"},"id":132},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol","exportedSymbols":{"IPool":[4860],"MockVariableDebtToken":[9134],"VariableDebtToken":[27490]},"id":31059,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31057,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:133"},{"absolutePath":"@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol","file":"@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol","id":31058,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31059,"sourceUnit":9135,"src":"63:80:133","symbolAliases":[],"unitAlias":""}],"src":"39:105:133"},"id":133},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/configuration/ACLManager.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/configuration/ACLManager.sol","exportedSymbols":{"ACLManager":[9487],"AccessControl":[425],"Errors":[12642],"IACLManager":[3718],"IPoolAddressesProvider":[5069]},"id":31062,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31060,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:134"},{"absolutePath":"@aave/core-v3/contracts/protocol/configuration/ACLManager.sol","file":"@aave/core-v3/contracts/protocol/configuration/ACLManager.sol","id":31061,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31062,"sourceUnit":9488,"src":"63:71:134","symbolAliases":[],"unitAlias":""}],"src":"39:96:134"},"id":134},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/configuration/PoolAddressesProvider.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/configuration/PoolAddressesProvider.sol","exportedSymbols":{"IPoolAddressesProvider":[5069],"InitializableImmutableAdminUpgradeabilityProxy":[10492],"Ownable":[1573],"PoolAddressesProvider":[10072]},"id":31065,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31063,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:135"},{"absolutePath":"@aave/core-v3/contracts/protocol/configuration/PoolAddressesProvider.sol","file":"@aave/core-v3/contracts/protocol/configuration/PoolAddressesProvider.sol","id":31064,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31065,"sourceUnit":10073,"src":"63:82:135","symbolAliases":[],"unitAlias":""}],"src":"39:107:135"},"id":135},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/configuration/PoolAddressesProviderRegistry.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/configuration/PoolAddressesProviderRegistry.sol","exportedSymbols":{"Errors":[12642],"IPoolAddressesProviderRegistry":[5124],"Ownable":[1573],"PoolAddressesProviderRegistry":[10339]},"id":31068,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31066,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:136"},{"absolutePath":"@aave/core-v3/contracts/protocol/configuration/PoolAddressesProviderRegistry.sol","file":"@aave/core-v3/contracts/protocol/configuration/PoolAddressesProviderRegistry.sol","id":31067,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31068,"sourceUnit":10340,"src":"63:90:136","symbolAliases":[],"unitAlias":""}],"src":"39:115:136"},"id":136},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol","exportedSymbols":{"BaseImmutableAdminUpgradeabilityProxy":[10455],"InitializableImmutableAdminUpgradeabilityProxy":[10492],"InitializableUpgradeabilityProxy":[2882],"Proxy":[2926]},"id":31071,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31069,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:137"},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol","file":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol","id":31070,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31071,"sourceUnit":10493,"src":"63:123:137","symbolAliases":[],"unitAlias":""}],"src":"39:148:137"},"id":137},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol","exportedSymbols":{"BorrowLogic":[13543],"DataTypes":[21633],"GPv2SafeERC20":[118],"Helpers":[12680],"IAToken":[3861],"IERC20":[1442],"IStableDebtToken":[6109],"IVariableDebtToken":[6155],"IsolationModeLogic":[15978],"ReserveConfiguration":[11857],"ReserveLogic":[18377],"SafeCast":[1966],"UserConfiguration":[12368],"ValidationLogic":[20908]},"id":31074,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31072,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:138"},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol","file":"@aave/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol","id":31073,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31074,"sourceUnit":13544,"src":"63:74:138","symbolAliases":[],"unitAlias":""}],"src":"39:99:138"},"id":138},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/logic/BridgeLogic.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/logic/BridgeLogic.sol","exportedSymbols":{"BridgeLogic":[13920],"DataTypes":[21633],"Errors":[12642],"GPv2SafeERC20":[118],"IAToken":[3861],"IERC20":[1442],"PercentageMath":[21132],"ReserveConfiguration":[11857],"ReserveLogic":[18377],"SafeCast":[1966],"UserConfiguration":[12368],"ValidationLogic":[20908],"WadRayMath":[21219]},"id":31077,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31075,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:139"},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/BridgeLogic.sol","file":"@aave/core-v3/contracts/protocol/libraries/logic/BridgeLogic.sol","id":31076,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31077,"sourceUnit":13921,"src":"63:74:139","symbolAliases":[],"unitAlias":""}],"src":"39:99:139"},"id":139},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol","exportedSymbols":{"DataTypes":[21633],"EModeLogic":[14615],"Errors":[12642],"GPv2SafeERC20":[118],"IERC20":[1442],"IPriceOracleGetter":[5835],"PercentageMath":[21132],"ReserveLogic":[18377],"UserConfiguration":[12368],"ValidationLogic":[20908],"WadRayMath":[21219]},"id":31080,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31078,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:140"},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol","file":"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol","id":31079,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31080,"sourceUnit":14616,"src":"63:73:140","symbolAliases":[],"unitAlias":""}],"src":"39:98:140"},"id":140},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/logic/FlashLoanLogic.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/logic/FlashLoanLogic.sol","exportedSymbols":{"BorrowLogic":[13543],"DataTypes":[21633],"Errors":[12642],"FlashLoanLogic":[15250],"GPv2SafeERC20":[118],"IAToken":[3861],"IERC20":[1442],"IFlashLoanReceiver":[3505],"IFlashLoanSimpleReceiver":[3541],"IPoolAddressesProvider":[5069],"PercentageMath":[21132],"ReserveConfiguration":[11857],"ReserveLogic":[18377],"SafeCast":[1966],"UserConfiguration":[12368],"ValidationLogic":[20908],"WadRayMath":[21219]},"id":31083,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31081,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:141"},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/FlashLoanLogic.sol","file":"@aave/core-v3/contracts/protocol/libraries/logic/FlashLoanLogic.sol","id":31082,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31083,"sourceUnit":15251,"src":"63:77:141","symbolAliases":[],"unitAlias":""}],"src":"39:102:141"},"id":141},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol","exportedSymbols":{"DataTypes":[21633],"EModeLogic":[14615],"GenericLogic":[15855],"IERC20":[1442],"IPriceOracleGetter":[5835],"IScaledBalanceToken":[5975],"PercentageMath":[21132],"ReserveConfiguration":[11857],"ReserveLogic":[18377],"UserConfiguration":[12368],"WadRayMath":[21219]},"id":31086,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31084,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:142"},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol","file":"@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol","id":31085,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31086,"sourceUnit":15856,"src":"63:75:142","symbolAliases":[],"unitAlias":""}],"src":"39:100:142"},"id":142},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol","exportedSymbols":{"DataTypes":[21633],"Errors":[12642],"GPv2SafeERC20":[118],"IERC20":[1442],"IReserveInterestRateStrategy":[5913],"IStableDebtToken":[6109],"IVariableDebtToken":[6155],"MathUtils":[21098],"PercentageMath":[21132],"ReserveConfiguration":[11857],"ReserveLogic":[18377],"SafeCast":[1966],"WadRayMath":[21219]},"id":31089,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31087,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:143"},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol","file":"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol","id":31088,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31089,"sourceUnit":18378,"src":"63:75:143","symbolAliases":[],"unitAlias":""}],"src":"39:100:143"},"id":143},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/logic/SupplyLogic.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/logic/SupplyLogic.sol","exportedSymbols":{"DataTypes":[21633],"Errors":[12642],"GPv2SafeERC20":[118],"IAToken":[3861],"IERC20":[1442],"PercentageMath":[21132],"ReserveConfiguration":[11857],"ReserveLogic":[18377],"SupplyLogic":[19090],"UserConfiguration":[12368],"ValidationLogic":[20908],"WadRayMath":[21219]},"id":31092,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31090,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:144"},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/SupplyLogic.sol","file":"@aave/core-v3/contracts/protocol/libraries/logic/SupplyLogic.sol","id":31091,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31092,"sourceUnit":19091,"src":"63:74:144","symbolAliases":[],"unitAlias":""}],"src":"39:99:144"},"id":144},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol","exportedSymbols":{"Address":[722],"DataTypes":[21633],"Errors":[12642],"GPv2SafeERC20":[118],"GenericLogic":[15855],"IAToken":[3861],"IAccessControl":[1352],"IERC20":[1442],"IPoolAddressesProvider":[5069],"IPriceOracleGetter":[5835],"IPriceOracleSentinel":[5894],"IReserveInterestRateStrategy":[5913],"IScaledBalanceToken":[5975],"IStableDebtToken":[6109],"IncentivizedERC20":[28349],"PercentageMath":[21132],"ReserveConfiguration":[11857],"ReserveLogic":[18377],"SafeCast":[1966],"UserConfiguration":[12368],"ValidationLogic":[20908],"WadRayMath":[21219]},"id":31095,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31093,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:145"},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol","file":"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol","id":31094,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31095,"sourceUnit":20909,"src":"63:78:145","symbolAliases":[],"unitAlias":""}],"src":"39:103:145"},"id":145},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol","exportedSymbols":{"DataTypes":[21633],"DefaultReserveInterestRateStrategy":[22191],"Errors":[12642],"IDefaultInterestRateStrategy":[4091],"IERC20":[1442],"IPoolAddressesProvider":[5069],"IReserveInterestRateStrategy":[5913],"PercentageMath":[21132],"WadRayMath":[21219]},"id":31098,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31096,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:146"},{"absolutePath":"@aave/core-v3/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol","file":"@aave/core-v3/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol","id":31097,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31098,"sourceUnit":22192,"src":"63:86:146","symbolAliases":[],"unitAlias":""}],"src":"39:111:146"},"id":146},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/pool/Pool.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/pool/Pool.sol","exportedSymbols":{"BorrowLogic":[13543],"BridgeLogic":[13920],"DataTypes":[21633],"EModeLogic":[14615],"Errors":[12642],"FlashLoanLogic":[15250],"IACLManager":[3718],"IERC20WithPermit":[4127],"IPool":[4860],"IPoolAddressesProvider":[5069],"LiquidationLogic":[17171],"Pool":[23636],"PoolLogic":[17617],"PoolStorage":[25335],"ReserveConfiguration":[11857],"ReserveLogic":[18377],"SupplyLogic":[19090],"VersionedInitializable":[10573]},"id":31101,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31099,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:147"},{"absolutePath":"@aave/core-v3/contracts/protocol/pool/Pool.sol","file":"@aave/core-v3/contracts/protocol/pool/Pool.sol","id":31100,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31101,"sourceUnit":23637,"src":"63:56:147","symbolAliases":[],"unitAlias":""}],"src":"39:81:147"},"id":147},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/pool/PoolConfigurator.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/pool/PoolConfigurator.sol","exportedSymbols":{"ConfiguratorInputTypes":[21281],"ConfiguratorLogic":[14409],"DataTypes":[21633],"Errors":[12642],"IACLManager":[3718],"IPool":[4860],"IPoolAddressesProvider":[5069],"IPoolConfigurator":[5567],"IPoolDataProvider":[5791],"PercentageMath":[21132],"PoolConfigurator":[25278],"ReserveConfiguration":[11857],"VersionedInitializable":[10573]},"id":31104,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31102,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:148"},{"absolutePath":"@aave/core-v3/contracts/protocol/pool/PoolConfigurator.sol","file":"@aave/core-v3/contracts/protocol/pool/PoolConfigurator.sol","id":31103,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31104,"sourceUnit":25279,"src":"63:68:148","symbolAliases":[],"unitAlias":""}],"src":"39:93:148"},"id":148},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/tokenization/AToken.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/tokenization/AToken.sol","exportedSymbols":{"AToken":[25985],"EIP712Base":[27822],"Errors":[12642],"GPv2SafeERC20":[118],"IAToken":[3861],"IAaveIncentivesController":[3875],"IERC20":[1442],"IInitializableAToken":[4176],"IPool":[4860],"IncentivizedERC20":[28349],"SafeCast":[1966],"ScaledBalanceTokenBase":[28966],"VersionedInitializable":[10573],"WadRayMath":[21219]},"id":31107,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31105,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:149"},{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/AToken.sol","file":"@aave/core-v3/contracts/protocol/tokenization/AToken.sol","id":31106,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31107,"sourceUnit":25986,"src":"63:66:149","symbolAliases":[],"unitAlias":""}],"src":"39:91:149"},"id":149},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol","exportedSymbols":{"AToken":[25985],"DelegationAwareAToken":[26033],"IDelegationToken":[4101],"IPool":[4860]},"id":31110,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31108,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:150"},{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol","file":"@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol","id":31109,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31110,"sourceUnit":26034,"src":"63:81:150","symbolAliases":[],"unitAlias":""}],"src":"39:106:150"},"id":150},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol","exportedSymbols":{"DebtTokenBase":[27722],"EIP712Base":[27822],"Errors":[12642],"IAaveIncentivesController":[3875],"IERC20":[1442],"IInitializableDebtToken":[4221],"IPool":[4860],"IStableDebtToken":[6109],"IncentivizedERC20":[28349],"MathUtils":[21098],"SafeCast":[1966],"StableDebtToken":[27108],"VersionedInitializable":[10573],"WadRayMath":[21219]},"id":31113,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31111,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:151"},{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol","file":"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol","id":31112,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31113,"sourceUnit":27109,"src":"63:75:151","symbolAliases":[],"unitAlias":""}],"src":"39:100:151"},"id":151},"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol":{"ast":{"absolutePath":"contracts/hardhat-dependency-compiler/@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol","exportedSymbols":{"DebtTokenBase":[27722],"EIP712Base":[27822],"Errors":[12642],"IAaveIncentivesController":[3875],"IERC20":[1442],"IInitializableDebtToken":[4221],"IPool":[4860],"IVariableDebtToken":[6155],"SafeCast":[1966],"ScaledBalanceTokenBase":[28966],"VariableDebtToken":[27490],"VersionedInitializable":[10573],"WadRayMath":[21219]},"id":31116,"license":"UNLICENSED","nodeType":"SourceUnit","nodes":[{"id":31114,"literals":["solidity",">","0.0",".0"],"nodeType":"PragmaDirective","src":"39:23:152"},{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol","file":"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol","id":31115,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31116,"sourceUnit":27491,"src":"63:77:152","symbolAliases":[],"unitAlias":""}],"src":"39:102:152"},"id":152},"contracts/libraries/DataTypesHelper.sol":{"ast":{"absolutePath":"contracts/libraries/DataTypesHelper.sol","exportedSymbols":{"DataTypes":[21633],"DataTypesHelper":[31153],"IERC20":[1442]},"id":31154,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":31117,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:153"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","id":31119,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31154,"sourceUnit":1443,"src":"63:94:153","symbolAliases":[{"foreign":{"id":31118,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:6:153","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","id":31121,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31154,"sourceUnit":21634,"src":"158:89:153","symbolAliases":[{"foreign":{"id":31120,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"166:9:153","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"DataTypesHelper","contractDependencies":[],"contractKind":"library","documentation":{"id":31122,"nodeType":"StructuredDocumentation","src":"249:138:153","text":" @title DataTypesHelper\n @author Aave\n @dev Helper library to track user current debt balance, used by WrappedTokenGatewayV3"},"fullyImplemented":true,"id":31153,"linearizedBaseContracts":[31153],"name":"DataTypesHelper","nameLocation":"396:15:153","nodeType":"ContractDefinition","nodes":[{"body":{"id":31151,"nodeType":"Block","src":"788:150:153","statements":[{"expression":{"components":[{"arguments":[{"id":31140,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31125,"src":"858:4:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":31136,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31128,"src":"816:7:153","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":31137,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"816:30:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31135,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"809:6:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":31138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"809:38:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":31139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"809:48:153","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":31141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"809:54:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":31147,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31125,"src":"922:4:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":31143,"name":"reserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31128,"src":"878:7:153","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":31144,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21306,"src":"878:32:153","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31142,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"871:6:153","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":31145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"871:40:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":31146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"871:50:153","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":31148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"871:56:153","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31149,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"801:132:153","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":31134,"id":31150,"nodeType":"Return","src":"794:139:153"}]},"documentation":{"id":31123,"nodeType":"StructuredDocumentation","src":"416:236:153","text":" @notice Fetches the user current stable and variable debt balances\n @param user The user address\n @param reserve The reserve data object\n @return The stable debt balance\n @return The variable debt balance*"},"id":31152,"implemented":true,"kind":"function","modifiers":[],"name":"getUserCurrentDebt","nameLocation":"664:18:153","nodeType":"FunctionDefinition","parameters":{"id":31129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31125,"mutability":"mutable","name":"user","nameLocation":"696:4:153","nodeType":"VariableDeclaration","scope":31152,"src":"688:12:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31124,"name":"address","nodeType":"ElementaryTypeName","src":"688:7:153","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31128,"mutability":"mutable","name":"reserve","nameLocation":"735:7:153","nodeType":"VariableDeclaration","scope":31152,"src":"706:36:153","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":31127,"nodeType":"UserDefinedTypeName","pathNode":{"id":31126,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"706:21:153"},"referencedDeclaration":21315,"src":"706:21:153","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"src":"682:64:153"},"returnParameters":{"id":31134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31131,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31152,"src":"770:7:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31130,"name":"uint256","nodeType":"ElementaryTypeName","src":"770:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31133,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31152,"src":"779:7:153","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31132,"name":"uint256","nodeType":"ElementaryTypeName","src":"779:7:153","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"769:18:153"},"scope":31153,"src":"655:283:153","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":31154,"src":"388:552:153","usedErrors":[]}],"src":"37:904:153"},"id":153},"contracts/misc/UiIncentiveDataProviderV3.sol":{"ast":{"absolutePath":"contracts/misc/UiIncentiveDataProviderV3.sol","exportedSymbols":{"DataTypes":[21633],"IEACAggregatorProxy":[34482],"IERC20Detailed":[1464],"IPool":[4860],"IPoolAddressesProvider":[5069],"IRewardsController":[39352],"IUiIncentiveDataProviderV3":[34629],"IncentivizedERC20":[28349],"UiIncentiveDataProviderV3":[32481],"UserConfiguration":[12368]},"id":32482,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":31155,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:154"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","id":31157,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":32482,"sourceUnit":1465,"src":"63:110:154","symbolAliases":[{"foreign":{"id":31156,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:14:154","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","id":31159,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":32482,"sourceUnit":5070,"src":"174:101:154","symbolAliases":[{"foreign":{"id":31158,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"182:22:154","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","file":"@aave/core-v3/contracts/interfaces/IPool.sol","id":31161,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":32482,"sourceUnit":4861,"src":"276:67:154","symbolAliases":[{"foreign":{"id":31160,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"284:5:154","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol","file":"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol","id":31163,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":32482,"sourceUnit":28350,"src":"344:107:154","symbolAliases":[{"foreign":{"id":31162,"name":"IncentivizedERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"352:17:154","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol","id":31165,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":32482,"sourceUnit":12369,"src":"452:113:154","symbolAliases":[{"foreign":{"id":31164,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"460:17:154","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","id":31167,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":32482,"sourceUnit":21634,"src":"566:89:154","symbolAliases":[{"foreign":{"id":31166,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"574:9:154","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/rewards/interfaces/IRewardsController.sol","file":"../rewards/interfaces/IRewardsController.sol","id":31169,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":32482,"sourceUnit":39353,"src":"656:80:154","symbolAliases":[{"foreign":{"id":31168,"name":"IRewardsController","nodeType":"Identifier","overloadedDeclarations":[],"src":"664:18:154","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/misc/interfaces/IEACAggregatorProxy.sol","file":"./interfaces/IEACAggregatorProxy.sol","id":31171,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":32482,"sourceUnit":34483,"src":"737:73:154","symbolAliases":[{"foreign":{"id":31170,"name":"IEACAggregatorProxy","nodeType":"Identifier","overloadedDeclarations":[],"src":"745:19:154","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/misc/interfaces/IUiIncentiveDataProviderV3.sol","file":"./interfaces/IUiIncentiveDataProviderV3.sol","id":31173,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":32482,"sourceUnit":34630,"src":"811:87:154","symbolAliases":[{"foreign":{"id":31172,"name":"IUiIncentiveDataProviderV3","nodeType":"Identifier","overloadedDeclarations":[],"src":"819:26:154","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":31174,"name":"IUiIncentiveDataProviderV3","nodeType":"IdentifierPath","referencedDeclaration":34629,"src":"938:26:154"},"id":31175,"nodeType":"InheritanceSpecifier","src":"938:26:154"}],"canonicalName":"UiIncentiveDataProviderV3","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":32481,"linearizedBaseContracts":[32481,34629],"name":"UiIncentiveDataProviderV3","nameLocation":"909:25:154","nodeType":"ContractDefinition","nodes":[{"id":31179,"libraryName":{"id":31176,"name":"UserConfiguration","nodeType":"IdentifierPath","referencedDeclaration":12368,"src":"975:17:154"},"nodeType":"UsingForDirective","src":"969:59:154","typeName":{"id":31178,"nodeType":"UserDefinedTypeName","pathNode":{"id":31177,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"997:30:154"},"referencedDeclaration":21322,"src":"997:30:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},{"baseFunctions":[34628],"body":{"id":31205,"nodeType":"Block","src":"1255:104:154","statements":[{"expression":{"components":[{"arguments":[{"id":31197,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31182,"src":"1296:8:154","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}],"id":31196,"name":"_getReservesIncentivesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31850,"src":"1269:26:154","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IPoolAddressesProvider_$5069_$returns$_t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr_$","typeString":"function (contract IPoolAddressesProvider) view returns (struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData memory[] memory)"}},"id":31198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1269:36:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData memory[] memory"}},{"arguments":[{"id":31200,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31182,"src":"1338:8:154","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},{"id":31201,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31184,"src":"1348:4:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},{"typeIdentifier":"t_address","typeString":"address"}],"id":31199,"name":"_getUserReservesIncentivesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32480,"src":"1307:30:154","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IPoolAddressesProvider_$5069_$_t_address_$returns$_t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr_$","typeString":"function (contract IPoolAddressesProvider,address) view returns (struct IUiIncentiveDataProviderV3.UserReserveIncentiveData memory[] memory)"}},"id":31202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1307:46:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData memory[] memory"}}],"id":31203,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1268:86:154","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr_$_t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr_$","typeString":"tuple(struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData memory[] memory,struct IUiIncentiveDataProviderV3.UserReserveIncentiveData memory[] memory)"}},"functionReturnParameters":31195,"id":31204,"nodeType":"Return","src":"1261:93:154"}]},"functionSelector":"47637536","id":31206,"implemented":true,"kind":"function","modifiers":[],"name":"getFullReservesIncentiveData","nameLocation":"1041:28:154","nodeType":"FunctionDefinition","overrides":{"id":31186,"nodeType":"OverrideSpecifier","overrides":[],"src":"1155:8:154"},"parameters":{"id":31185,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31182,"mutability":"mutable","name":"provider","nameLocation":"1098:8:154","nodeType":"VariableDeclaration","scope":31206,"src":"1075:31:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":31181,"nodeType":"UserDefinedTypeName","pathNode":{"id":31180,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"1075:22:154"},"referencedDeclaration":5069,"src":"1075:22:154","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"},{"constant":false,"id":31184,"mutability":"mutable","name":"user","nameLocation":"1120:4:154","nodeType":"VariableDeclaration","scope":31206,"src":"1112:12:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31183,"name":"address","nodeType":"ElementaryTypeName","src":"1112:7:154","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1069:59:154"},"returnParameters":{"id":31195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31190,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31206,"src":"1177:39:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData[]"},"typeName":{"baseType":{"id":31188,"nodeType":"UserDefinedTypeName","pathNode":{"id":31187,"name":"AggregatedReserveIncentiveData","nodeType":"IdentifierPath","referencedDeclaration":34520,"src":"1177:30:154"},"referencedDeclaration":34520,"src":"1177:30:154","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveIncentiveData_$34520_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData"}},"id":31189,"nodeType":"ArrayTypeName","src":"1177:32:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData[]"}},"visibility":"internal"},{"constant":false,"id":31194,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31206,"src":"1218:33:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData[]"},"typeName":{"baseType":{"id":31192,"nodeType":"UserDefinedTypeName","pathNode":{"id":31191,"name":"UserReserveIncentiveData","nodeType":"IdentifierPath","referencedDeclaration":34564,"src":"1218:24:154"},"referencedDeclaration":34564,"src":"1218:24:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserReserveIncentiveData_$34564_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData"}},"id":31193,"nodeType":"ArrayTypeName","src":"1218:26:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveIncentiveData_$34564_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData[]"}},"visibility":"internal"}],"src":"1176:76:154"},"scope":32481,"src":"1032:327:154","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[34600],"body":{"id":31221,"nodeType":"Block","src":"1512:54:154","statements":[{"expression":{"arguments":[{"id":31218,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31209,"src":"1552:8:154","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}],"id":31217,"name":"_getReservesIncentivesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31850,"src":"1525:26:154","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IPoolAddressesProvider_$5069_$returns$_t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr_$","typeString":"function (contract IPoolAddressesProvider) view returns (struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData memory[] memory)"}},"id":31219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1525:36:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData memory[] memory"}},"functionReturnParameters":31216,"id":31220,"nodeType":"Return","src":"1518:43:154"}]},"functionSelector":"976fafc5","id":31222,"implemented":true,"kind":"function","modifiers":[],"name":"getReservesIncentivesData","nameLocation":"1372:25:154","nodeType":"FunctionDefinition","overrides":{"id":31211,"nodeType":"OverrideSpecifier","overrides":[],"src":"1453:8:154"},"parameters":{"id":31210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31209,"mutability":"mutable","name":"provider","nameLocation":"1426:8:154","nodeType":"VariableDeclaration","scope":31222,"src":"1403:31:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":31208,"nodeType":"UserDefinedTypeName","pathNode":{"id":31207,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"1403:22:154"},"referencedDeclaration":5069,"src":"1403:22:154","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"1397:41:154"},"returnParameters":{"id":31216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31215,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31222,"src":"1471:39:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData[]"},"typeName":{"baseType":{"id":31213,"nodeType":"UserDefinedTypeName","pathNode":{"id":31212,"name":"AggregatedReserveIncentiveData","nodeType":"IdentifierPath","referencedDeclaration":34520,"src":"1471:30:154"},"referencedDeclaration":34520,"src":"1471:30:154","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveIncentiveData_$34520_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData"}},"id":31214,"nodeType":"ArrayTypeName","src":"1471:32:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData[]"}},"visibility":"internal"}],"src":"1470:41:154"},"scope":32481,"src":"1363:203:154","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":31849,"nodeType":"Block","src":"1710:7607:154","statements":[{"assignments":[31234],"declarations":[{"constant":false,"id":31234,"mutability":"mutable","name":"pool","nameLocation":"1722:4:154","nodeType":"VariableDeclaration","scope":31849,"src":"1716:10:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":31233,"nodeType":"UserDefinedTypeName","pathNode":{"id":31232,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"1716:5:154"},"referencedDeclaration":4860,"src":"1716:5:154","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"}],"id":31240,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":31236,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31225,"src":"1735:8:154","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":31237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"1735:16:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":31238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1735:18:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31235,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"1729:5:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":31239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1729:25:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"nodeType":"VariableDeclarationStatement","src":"1716:38:154"},{"assignments":[31245],"declarations":[{"constant":false,"id":31245,"mutability":"mutable","name":"reserves","nameLocation":"1777:8:154","nodeType":"VariableDeclaration","scope":31849,"src":"1760:25:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":31243,"name":"address","nodeType":"ElementaryTypeName","src":"1760:7:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":31244,"nodeType":"ArrayTypeName","src":"1760:9:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":31249,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":31246,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31234,"src":"1788:4:154","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":31247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReservesList","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"1788:20:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view external returns (address[] memory)"}},"id":31248,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1788:22:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1760:50:154"},{"assignments":[31254],"declarations":[{"constant":false,"id":31254,"mutability":"mutable","name":"reservesIncentiveData","nameLocation":"1862:21:154","nodeType":"VariableDeclaration","scope":31849,"src":"1816:67:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData[]"},"typeName":{"baseType":{"id":31252,"nodeType":"UserDefinedTypeName","pathNode":{"id":31251,"name":"AggregatedReserveIncentiveData","nodeType":"IdentifierPath","referencedDeclaration":34520,"src":"1816:30:154"},"referencedDeclaration":34520,"src":"1816:30:154","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveIncentiveData_$34520_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData"}},"id":31253,"nodeType":"ArrayTypeName","src":"1816:32:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData[]"}},"visibility":"internal"}],"id":31262,"initialValue":{"arguments":[{"expression":{"id":31259,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31245,"src":"1923:8:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":31260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1923:15:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31258,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1886:36:154","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData memory[] memory)"},"typeName":{"baseType":{"id":31256,"nodeType":"UserDefinedTypeName","pathNode":{"id":31255,"name":"AggregatedReserveIncentiveData","nodeType":"IdentifierPath","referencedDeclaration":34520,"src":"1890:30:154"},"referencedDeclaration":34520,"src":"1890:30:154","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveIncentiveData_$34520_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData"}},"id":31257,"nodeType":"ArrayTypeName","src":"1890:32:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData[]"}}},"id":31261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1886:53:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1816:123:154"},{"body":{"id":31844,"nodeType":"Block","src":"2078:7198:154","statements":[{"assignments":[31276],"declarations":[{"constant":false,"id":31276,"mutability":"mutable","name":"reserveIncentiveData","nameLocation":"2124:20:154","nodeType":"VariableDeclaration","scope":31844,"src":"2086:58:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData"},"typeName":{"id":31275,"nodeType":"UserDefinedTypeName","pathNode":{"id":31274,"name":"AggregatedReserveIncentiveData","nodeType":"IdentifierPath","referencedDeclaration":34520,"src":"2086:30:154"},"referencedDeclaration":34520,"src":"2086:30:154","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveIncentiveData_$34520_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData"}},"visibility":"internal"}],"id":31280,"initialValue":{"baseExpression":{"id":31277,"name":"reservesIncentiveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31254,"src":"2147:21:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData memory[] memory"}},"id":31279,"indexExpression":{"id":31278,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31264,"src":"2169:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2147:24:154","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData memory"}},"nodeType":"VariableDeclarationStatement","src":"2086:85:154"},{"expression":{"id":31287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31281,"name":"reserveIncentiveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31276,"src":"2179:20:154","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData memory"}},"id":31283,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":34510,"src":"2179:36:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":31284,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31245,"src":"2218:8:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":31286,"indexExpression":{"id":31285,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31264,"src":"2227:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2218:11:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2179:50:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":31288,"nodeType":"ExpressionStatement","src":"2179:50:154"},{"assignments":[31293],"declarations":[{"constant":false,"id":31293,"mutability":"mutable","name":"baseData","nameLocation":"2267:8:154","nodeType":"VariableDeclaration","scope":31844,"src":"2238:37:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":31292,"nodeType":"UserDefinedTypeName","pathNode":{"id":31291,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"2238:21:154"},"referencedDeclaration":21315,"src":"2238:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":31300,"initialValue":{"arguments":[{"baseExpression":{"id":31296,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31245,"src":"2298:8:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":31298,"indexExpression":{"id":31297,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31264,"src":"2307:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2298:11:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":31294,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31234,"src":"2278:4:154","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":31295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4710,"src":"2278:19:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$21315_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":31299,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2278:32:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"2238:72:154"},{"assignments":[31303],"declarations":[{"constant":false,"id":31303,"mutability":"mutable","name":"aTokenIncentiveController","nameLocation":"2463:25:154","nodeType":"VariableDeclaration","scope":31844,"src":"2444:44:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"},"typeName":{"id":31302,"nodeType":"UserDefinedTypeName","pathNode":{"id":31301,"name":"IRewardsController","nodeType":"IdentifierPath","referencedDeclaration":39352,"src":"2444:18:154"},"referencedDeclaration":39352,"src":"2444:18:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"visibility":"internal"}],"id":31315,"initialValue":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":31308,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31293,"src":"2545:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":31309,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"2545:22:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31307,"name":"IncentivizedERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28349,"src":"2527:17:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IncentivizedERC20_$28349_$","typeString":"type(contract IncentivizedERC20)"}},"id":31310,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2527:41:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IncentivizedERC20_$28349","typeString":"contract IncentivizedERC20"}},"id":31311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getIncentivesController","nodeType":"MemberAccess","referencedDeclaration":28030,"src":"2527:65:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAaveIncentivesController_$3875_$","typeString":"function () view external returns (contract IAaveIncentivesController)"}},"id":31312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2527:67:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}],"id":31306,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2519:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31305,"name":"address","nodeType":"ElementaryTypeName","src":"2519:7:154","typeDescriptions":{}}},"id":31313,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2519:76:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31304,"name":"IRewardsController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39352,"src":"2491:18:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRewardsController_$39352_$","typeString":"type(contract IRewardsController)"}},"id":31314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2491:112:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"nodeType":"VariableDeclarationStatement","src":"2444:159:154"},{"assignments":[31320],"declarations":[{"constant":false,"id":31320,"mutability":"mutable","name":"aRewardsInformation","nameLocation":"2631:19:154","nodeType":"VariableDeclaration","scope":31844,"src":"2611:39:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo[]"},"typeName":{"baseType":{"id":31318,"nodeType":"UserDefinedTypeName","pathNode":{"id":31317,"name":"RewardInfo","nodeType":"IdentifierPath","referencedDeclaration":34552,"src":"2611:10:154"},"referencedDeclaration":34552,"src":"2611:10:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo"}},"id":31319,"nodeType":"ArrayTypeName","src":"2611:12:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo[]"}},"visibility":"internal"}],"id":31321,"nodeType":"VariableDeclarationStatement","src":"2611:39:154"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":31330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":31324,"name":"aTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31303,"src":"2670:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}],"id":31323,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2662:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31322,"name":"address","nodeType":"ElementaryTypeName","src":"2662:7:154","typeDescriptions":{}}},"id":31325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2662:34:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":31328,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2708:1:154","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":31327,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2700:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31326,"name":"address","nodeType":"ElementaryTypeName","src":"2700:7:154","typeDescriptions":{}}},"id":31329,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2700:10:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2662:48:154","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31467,"nodeType":"IfStatement","src":"2658:1823:154","trueBody":{"id":31466,"nodeType":"Block","src":"2712:1769:154","statements":[{"assignments":[31335],"declarations":[{"constant":false,"id":31335,"mutability":"mutable","name":"aTokenRewardAddresses","nameLocation":"2739:21:154","nodeType":"VariableDeclaration","scope":31466,"src":"2722:38:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":31333,"name":"address","nodeType":"ElementaryTypeName","src":"2722:7:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":31334,"nodeType":"ArrayTypeName","src":"2722:9:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":31341,"initialValue":{"arguments":[{"expression":{"id":31338,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31293,"src":"2818:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":31339,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"2818:22:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":31336,"name":"aTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31303,"src":"2763:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":31337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getRewardsByAsset","nodeType":"MemberAccess","referencedDeclaration":39468,"src":"2763:43:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":31340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2763:87:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"2722:128:154"},{"expression":{"id":31350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31342,"name":"aRewardsInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31320,"src":"2861:19:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":31347,"name":"aTokenRewardAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31335,"src":"2900:21:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":31348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"2900:28:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31346,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2883:16:154","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_RewardInfo_$34552_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct IUiIncentiveDataProviderV3.RewardInfo memory[] memory)"},"typeName":{"baseType":{"id":31344,"nodeType":"UserDefinedTypeName","pathNode":{"id":31343,"name":"RewardInfo","nodeType":"IdentifierPath","referencedDeclaration":34552,"src":"2887:10:154"},"referencedDeclaration":34552,"src":"2887:10:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo"}},"id":31345,"nodeType":"ArrayTypeName","src":"2887:12:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo[]"}}},"id":31349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2883:46:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory[] memory"}},"src":"2861:68:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory[] memory"}},"id":31351,"nodeType":"ExpressionStatement","src":"2861:68:154"},{"body":{"id":31464,"nodeType":"Block","src":"2998:1475:154","statements":[{"assignments":[31365],"declarations":[{"constant":false,"id":31365,"mutability":"mutable","name":"rewardInformation","nameLocation":"3028:17:154","nodeType":"VariableDeclaration","scope":31464,"src":"3010:35:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo"},"typeName":{"id":31364,"nodeType":"UserDefinedTypeName","pathNode":{"id":31363,"name":"RewardInfo","nodeType":"IdentifierPath","referencedDeclaration":34552,"src":"3010:10:154"},"referencedDeclaration":34552,"src":"3010:10:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo"}},"visibility":"internal"}],"id":31366,"nodeType":"VariableDeclarationStatement","src":"3010:35:154"},{"expression":{"id":31373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31367,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31365,"src":"3057:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31369,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34533,"src":"3057:36:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":31370,"name":"aTokenRewardAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31335,"src":"3096:21:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":31372,"indexExpression":{"id":31371,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31353,"src":"3118:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3096:24:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3057:63:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":31374,"nodeType":"ExpressionStatement","src":"3057:63:154"},{"expression":{"id":31392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":31375,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31365,"src":"3147:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31377,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"tokenIncentivesIndex","nodeType":"MemberAccess","referencedDeclaration":34541,"src":"3147:38:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":31378,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31365,"src":"3199:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31379,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"emissionPerSecond","nodeType":"MemberAccess","referencedDeclaration":34537,"src":"3199:35:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":31380,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31365,"src":"3248:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31381,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"incentivesLastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":34539,"src":"3248:47:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":31382,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31365,"src":"3309:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31383,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"emissionEndTimestamp","nodeType":"MemberAccess","referencedDeclaration":34543,"src":"3309:38:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31384,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3133:226:154","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":31387,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31293,"src":"3416:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":31388,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"3416:22:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":31389,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31365,"src":"3452:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31390,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34533,"src":"3452:36:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":31385,"name":"aTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31303,"src":"3362:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":31386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getRewardsData","nodeType":"MemberAccess","referencedDeclaration":39447,"src":"3362:40:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (address,address) view external returns (uint256,uint256,uint256,uint256)"}},"id":31391,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3362:138:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"src":"3133:367:154","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31393,"nodeType":"ExpressionStatement","src":"3133:367:154"},{"expression":{"id":31402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31394,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31365,"src":"3513:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31396,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"precision","nodeType":"MemberAccess","referencedDeclaration":34549,"src":"3513:27:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":31399,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31293,"src":"3599:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":31400,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"3599:22:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":31397,"name":"aTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31303,"src":"3543:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":31398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getAssetDecimals","nodeType":"MemberAccess","referencedDeclaration":39521,"src":"3543:42:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint8_$","typeString":"function (address) view external returns (uint8)"}},"id":31401,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3543:90:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"3513:120:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":31403,"nodeType":"ExpressionStatement","src":"3513:120:154"},{"expression":{"id":31413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31404,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31365,"src":"3645:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31406,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardTokenDecimals","nodeType":"MemberAccess","referencedDeclaration":34547,"src":"3645:37:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":31408,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31365,"src":"3713:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31409,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34533,"src":"3713:36:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31407,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"3685:14:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":31410,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3685:76:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":31411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":1463,"src":"3685:85:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":31412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3685:87:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"3645:127:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":31414,"nodeType":"ExpressionStatement","src":"3645:127:154"},{"expression":{"id":31424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31415,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31365,"src":"3784:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31417,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardTokenSymbol","nodeType":"MemberAccess","referencedDeclaration":34531,"src":"3784:35:154","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":31419,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31365,"src":"3837:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31420,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34533,"src":"3837:36:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31418,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"3822:14:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":31421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3822:52:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":31422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":1458,"src":"3822:72:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view external returns (string memory)"}},"id":31423,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3822:74:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"3784:112:154","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"id":31425,"nodeType":"ExpressionStatement","src":"3784:112:154"},{"expression":{"id":31434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31426,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31365,"src":"3976:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31428,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardOracleAddress","nodeType":"MemberAccess","referencedDeclaration":34535,"src":"3976:37:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":31431,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31365,"src":"4071:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31432,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34533,"src":"4071:36:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":31429,"name":"aTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31303,"src":"4016:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":31430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getRewardOracle","nodeType":"MemberAccess","referencedDeclaration":39227,"src":"4016:41:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_address_$","typeString":"function (address) view external returns (address)"}},"id":31433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4016:103:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3976:143:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":31435,"nodeType":"ExpressionStatement","src":"3976:143:154"},{"expression":{"id":31445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31436,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31365,"src":"4131:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31438,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"priceFeedDecimals","nodeType":"MemberAccess","referencedDeclaration":34551,"src":"4131:35:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":31440,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31365,"src":"4202:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31441,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardOracleAddress","nodeType":"MemberAccess","referencedDeclaration":34535,"src":"4202:37:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31439,"name":"IEACAggregatorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34482,"src":"4169:19:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IEACAggregatorProxy_$34482_$","typeString":"type(contract IEACAggregatorProxy)"}},"id":31442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4169:82:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"id":31443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":34438,"src":"4169:91:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":31444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4169:93:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"4131:131:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":31446,"nodeType":"ExpressionStatement","src":"4131:131:154"},{"expression":{"id":31456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31447,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31365,"src":"4274:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31449,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardPriceFeed","nodeType":"MemberAccess","referencedDeclaration":34545,"src":"4274:33:154","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":31451,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31365,"src":"4343:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31452,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardOracleAddress","nodeType":"MemberAccess","referencedDeclaration":34535,"src":"4343:37:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31450,"name":"IEACAggregatorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34482,"src":"4310:19:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IEACAggregatorProxy_$34482_$","typeString":"type(contract IEACAggregatorProxy)"}},"id":31453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4310:82:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"id":31454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"latestAnswer","nodeType":"MemberAccess","referencedDeclaration":34443,"src":"4310:95:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_int256_$","typeString":"function () view external returns (int256)"}},"id":31455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4310:97:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"4274:133:154","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":31457,"nodeType":"ExpressionStatement","src":"4274:133:154"},{"expression":{"id":31462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":31458,"name":"aRewardsInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31320,"src":"4420:19:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory[] memory"}},"id":31460,"indexExpression":{"id":31459,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31353,"src":"4440:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4420:22:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":31461,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31365,"src":"4445:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"src":"4420:42:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31463,"nodeType":"ExpressionStatement","src":"4420:42:154"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31356,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31353,"src":"2959:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":31357,"name":"aTokenRewardAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31335,"src":"2963:21:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":31358,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"2963:28:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2959:32:154","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31465,"initializationExpression":{"assignments":[31353],"declarations":[{"constant":false,"id":31353,"mutability":"mutable","name":"j","nameLocation":"2952:1:154","nodeType":"VariableDeclaration","scope":31465,"src":"2944:9:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31352,"name":"uint256","nodeType":"ElementaryTypeName","src":"2944:7:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31355,"initialValue":{"hexValue":"30","id":31354,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2956:1:154","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2944:13:154"},"loopExpression":{"expression":{"id":31361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"2993:3:154","subExpression":{"id":31360,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31353,"src":"2995:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31362,"nodeType":"ExpressionStatement","src":"2993:3:154"},"nodeType":"ForStatement","src":"2939:1534:154"}]}},{"expression":{"id":31480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31468,"name":"reserveIncentiveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31276,"src":"4489:20:154","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData memory"}},"id":31470,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"aIncentiveData","nodeType":"MemberAccess","referencedDeclaration":34513,"src":"4489:35:154","typeDescriptions":{"typeIdentifier":"t_struct$_IncentiveData_$34529_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.IncentiveData memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":31472,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31293,"src":"4550:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":31473,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"4550:22:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":31476,"name":"aTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31303,"src":"4590:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}],"id":31475,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4582:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31474,"name":"address","nodeType":"ElementaryTypeName","src":"4582:7:154","typeDescriptions":{}}},"id":31477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4582:34:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31478,"name":"aRewardsInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31320,"src":"4626:19:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory[] memory"}],"id":31471,"name":"IncentiveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34529,"src":"4527:13:154","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_IncentiveData_$34529_storage_ptr_$","typeString":"type(struct IUiIncentiveDataProviderV3.IncentiveData storage pointer)"}},"id":31479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4527:126:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_IncentiveData_$34529_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.IncentiveData memory"}},"src":"4489:164:154","typeDescriptions":{"typeIdentifier":"t_struct$_IncentiveData_$34529_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.IncentiveData memory"}},"id":31481,"nodeType":"ExpressionStatement","src":"4489:164:154"},{"assignments":[31484],"declarations":[{"constant":false,"id":31484,"mutability":"mutable","name":"vTokenIncentiveController","nameLocation":"4722:25:154","nodeType":"VariableDeclaration","scope":31844,"src":"4703:44:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"},"typeName":{"id":31483,"nodeType":"UserDefinedTypeName","pathNode":{"id":31482,"name":"IRewardsController","nodeType":"IdentifierPath","referencedDeclaration":39352,"src":"4703:18:154"},"referencedDeclaration":39352,"src":"4703:18:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"visibility":"internal"}],"id":31496,"initialValue":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":31489,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31293,"src":"4804:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":31490,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21306,"src":"4804:33:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31488,"name":"IncentivizedERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28349,"src":"4786:17:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IncentivizedERC20_$28349_$","typeString":"type(contract IncentivizedERC20)"}},"id":31491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4786:52:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IncentivizedERC20_$28349","typeString":"contract IncentivizedERC20"}},"id":31492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getIncentivesController","nodeType":"MemberAccess","referencedDeclaration":28030,"src":"4786:76:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAaveIncentivesController_$3875_$","typeString":"function () view external returns (contract IAaveIncentivesController)"}},"id":31493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4786:78:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}],"id":31487,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4778:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31486,"name":"address","nodeType":"ElementaryTypeName","src":"4778:7:154","typeDescriptions":{}}},"id":31494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4778:87:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31485,"name":"IRewardsController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39352,"src":"4750:18:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRewardsController_$39352_$","typeString":"type(contract IRewardsController)"}},"id":31495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4750:123:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"nodeType":"VariableDeclarationStatement","src":"4703:170:154"},{"assignments":[31501],"declarations":[{"constant":false,"id":31501,"mutability":"mutable","name":"vRewardsInformation","nameLocation":"4901:19:154","nodeType":"VariableDeclaration","scope":31844,"src":"4881:39:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo[]"},"typeName":{"baseType":{"id":31499,"nodeType":"UserDefinedTypeName","pathNode":{"id":31498,"name":"RewardInfo","nodeType":"IdentifierPath","referencedDeclaration":34552,"src":"4881:10:154"},"referencedDeclaration":34552,"src":"4881:10:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo"}},"id":31500,"nodeType":"ArrayTypeName","src":"4881:12:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo[]"}},"visibility":"internal"}],"id":31502,"nodeType":"VariableDeclarationStatement","src":"4881:39:154"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":31511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":31505,"name":"vTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31484,"src":"4940:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}],"id":31504,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4932:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31503,"name":"address","nodeType":"ElementaryTypeName","src":"4932:7:154","typeDescriptions":{}}},"id":31506,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4932:34:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":31509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4978:1:154","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":31508,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4970:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31507,"name":"address","nodeType":"ElementaryTypeName","src":"4970:7:154","typeDescriptions":{}}},"id":31510,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4970:10:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4932:48:154","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31648,"nodeType":"IfStatement","src":"4928:1855:154","trueBody":{"id":31647,"nodeType":"Block","src":"4982:1801:154","statements":[{"assignments":[31516],"declarations":[{"constant":false,"id":31516,"mutability":"mutable","name":"vTokenRewardAddresses","nameLocation":"5009:21:154","nodeType":"VariableDeclaration","scope":31647,"src":"4992:38:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":31514,"name":"address","nodeType":"ElementaryTypeName","src":"4992:7:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":31515,"nodeType":"ArrayTypeName","src":"4992:9:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":31522,"initialValue":{"arguments":[{"expression":{"id":31519,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31293,"src":"5088:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":31520,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21306,"src":"5088:33:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":31517,"name":"vTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31484,"src":"5033:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":31518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getRewardsByAsset","nodeType":"MemberAccess","referencedDeclaration":39468,"src":"5033:43:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":31521,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5033:98:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"4992:139:154"},{"expression":{"id":31531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31523,"name":"vRewardsInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31501,"src":"5141:19:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":31528,"name":"vTokenRewardAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31516,"src":"5180:21:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":31529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"5180:28:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31527,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"5163:16:154","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_RewardInfo_$34552_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct IUiIncentiveDataProviderV3.RewardInfo memory[] memory)"},"typeName":{"baseType":{"id":31525,"nodeType":"UserDefinedTypeName","pathNode":{"id":31524,"name":"RewardInfo","nodeType":"IdentifierPath","referencedDeclaration":34552,"src":"5167:10:154"},"referencedDeclaration":34552,"src":"5167:10:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo"}},"id":31526,"nodeType":"ArrayTypeName","src":"5167:12:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo[]"}}},"id":31530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5163:46:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory[] memory"}},"src":"5141:68:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory[] memory"}},"id":31532,"nodeType":"ExpressionStatement","src":"5141:68:154"},{"body":{"id":31645,"nodeType":"Block","src":"5278:1497:154","statements":[{"assignments":[31546],"declarations":[{"constant":false,"id":31546,"mutability":"mutable","name":"rewardInformation","nameLocation":"5308:17:154","nodeType":"VariableDeclaration","scope":31645,"src":"5290:35:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo"},"typeName":{"id":31545,"nodeType":"UserDefinedTypeName","pathNode":{"id":31544,"name":"RewardInfo","nodeType":"IdentifierPath","referencedDeclaration":34552,"src":"5290:10:154"},"referencedDeclaration":34552,"src":"5290:10:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo"}},"visibility":"internal"}],"id":31547,"nodeType":"VariableDeclarationStatement","src":"5290:35:154"},{"expression":{"id":31554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31548,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31546,"src":"5337:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31550,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34533,"src":"5337:36:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":31551,"name":"vTokenRewardAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31516,"src":"5376:21:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":31553,"indexExpression":{"id":31552,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31534,"src":"5398:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5376:24:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5337:63:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":31555,"nodeType":"ExpressionStatement","src":"5337:63:154"},{"expression":{"id":31573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":31556,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31546,"src":"5427:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31558,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"tokenIncentivesIndex","nodeType":"MemberAccess","referencedDeclaration":34541,"src":"5427:38:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":31559,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31546,"src":"5479:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31560,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"emissionPerSecond","nodeType":"MemberAccess","referencedDeclaration":34537,"src":"5479:35:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":31561,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31546,"src":"5528:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31562,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"incentivesLastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":34539,"src":"5528:47:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":31563,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31546,"src":"5589:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31564,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"emissionEndTimestamp","nodeType":"MemberAccess","referencedDeclaration":34543,"src":"5589:38:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31565,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"5413:226:154","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":31568,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31293,"src":"5696:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":31569,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21306,"src":"5696:33:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":31570,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31546,"src":"5743:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31571,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34533,"src":"5743:36:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":31566,"name":"vTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31484,"src":"5642:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":31567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getRewardsData","nodeType":"MemberAccess","referencedDeclaration":39447,"src":"5642:40:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (address,address) view external returns (uint256,uint256,uint256,uint256)"}},"id":31572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5642:149:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"src":"5413:378:154","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31574,"nodeType":"ExpressionStatement","src":"5413:378:154"},{"expression":{"id":31583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31575,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31546,"src":"5804:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31577,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"precision","nodeType":"MemberAccess","referencedDeclaration":34549,"src":"5804:27:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":31580,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31293,"src":"5890:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":31581,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21306,"src":"5890:33:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":31578,"name":"vTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31484,"src":"5834:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":31579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getAssetDecimals","nodeType":"MemberAccess","referencedDeclaration":39521,"src":"5834:42:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint8_$","typeString":"function (address) view external returns (uint8)"}},"id":31582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5834:101:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"5804:131:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":31584,"nodeType":"ExpressionStatement","src":"5804:131:154"},{"expression":{"id":31594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31585,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31546,"src":"5947:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31587,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardTokenDecimals","nodeType":"MemberAccess","referencedDeclaration":34547,"src":"5947:37:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":31589,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31546,"src":"6015:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31590,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34533,"src":"6015:36:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31588,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"5987:14:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":31591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5987:76:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":31592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":1463,"src":"5987:85:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":31593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5987:87:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"5947:127:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":31595,"nodeType":"ExpressionStatement","src":"5947:127:154"},{"expression":{"id":31605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31596,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31546,"src":"6086:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31598,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardTokenSymbol","nodeType":"MemberAccess","referencedDeclaration":34531,"src":"6086:35:154","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":31600,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31546,"src":"6139:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31601,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34533,"src":"6139:36:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31599,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"6124:14:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":31602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6124:52:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":31603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":1458,"src":"6124:72:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view external returns (string memory)"}},"id":31604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6124:74:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"6086:112:154","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"id":31606,"nodeType":"ExpressionStatement","src":"6086:112:154"},{"expression":{"id":31615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31607,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31546,"src":"6278:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31609,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardOracleAddress","nodeType":"MemberAccess","referencedDeclaration":34535,"src":"6278:37:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":31612,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31546,"src":"6373:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31613,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34533,"src":"6373:36:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":31610,"name":"vTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31484,"src":"6318:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":31611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getRewardOracle","nodeType":"MemberAccess","referencedDeclaration":39227,"src":"6318:41:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_address_$","typeString":"function (address) view external returns (address)"}},"id":31614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6318:103:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6278:143:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":31616,"nodeType":"ExpressionStatement","src":"6278:143:154"},{"expression":{"id":31626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31617,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31546,"src":"6433:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31619,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"priceFeedDecimals","nodeType":"MemberAccess","referencedDeclaration":34551,"src":"6433:35:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":31621,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31546,"src":"6504:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31622,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardOracleAddress","nodeType":"MemberAccess","referencedDeclaration":34535,"src":"6504:37:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31620,"name":"IEACAggregatorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34482,"src":"6471:19:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IEACAggregatorProxy_$34482_$","typeString":"type(contract IEACAggregatorProxy)"}},"id":31623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6471:82:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"id":31624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":34438,"src":"6471:91:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":31625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6471:93:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"6433:131:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":31627,"nodeType":"ExpressionStatement","src":"6433:131:154"},{"expression":{"id":31637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31628,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31546,"src":"6576:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31630,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardPriceFeed","nodeType":"MemberAccess","referencedDeclaration":34545,"src":"6576:33:154","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":31632,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31546,"src":"6645:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31633,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardOracleAddress","nodeType":"MemberAccess","referencedDeclaration":34535,"src":"6645:37:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31631,"name":"IEACAggregatorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34482,"src":"6612:19:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IEACAggregatorProxy_$34482_$","typeString":"type(contract IEACAggregatorProxy)"}},"id":31634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6612:82:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"id":31635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"latestAnswer","nodeType":"MemberAccess","referencedDeclaration":34443,"src":"6612:95:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_int256_$","typeString":"function () view external returns (int256)"}},"id":31636,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6612:97:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6576:133:154","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":31638,"nodeType":"ExpressionStatement","src":"6576:133:154"},{"expression":{"id":31643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":31639,"name":"vRewardsInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31501,"src":"6722:19:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory[] memory"}},"id":31641,"indexExpression":{"id":31640,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31534,"src":"6742:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6722:22:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":31642,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31546,"src":"6747:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"src":"6722:42:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31644,"nodeType":"ExpressionStatement","src":"6722:42:154"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31537,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31534,"src":"5239:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":31538,"name":"vTokenRewardAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31516,"src":"5243:21:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":31539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"5243:28:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5239:32:154","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31646,"initializationExpression":{"assignments":[31534],"declarations":[{"constant":false,"id":31534,"mutability":"mutable","name":"j","nameLocation":"5232:1:154","nodeType":"VariableDeclaration","scope":31646,"src":"5224:9:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31533,"name":"uint256","nodeType":"ElementaryTypeName","src":"5224:7:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31536,"initialValue":{"hexValue":"30","id":31535,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5236:1:154","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5224:13:154"},"loopExpression":{"expression":{"id":31542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5273:3:154","subExpression":{"id":31541,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31534,"src":"5275:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31543,"nodeType":"ExpressionStatement","src":"5273:3:154"},"nodeType":"ForStatement","src":"5219:1556:154"}]}},{"expression":{"id":31661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31649,"name":"reserveIncentiveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31276,"src":"6791:20:154","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData memory"}},"id":31651,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"vIncentiveData","nodeType":"MemberAccess","referencedDeclaration":34516,"src":"6791:35:154","typeDescriptions":{"typeIdentifier":"t_struct$_IncentiveData_$34529_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.IncentiveData memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":31653,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31293,"src":"6852:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":31654,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21306,"src":"6852:33:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":31657,"name":"vTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31484,"src":"6903:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}],"id":31656,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6895:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31655,"name":"address","nodeType":"ElementaryTypeName","src":"6895:7:154","typeDescriptions":{}}},"id":31658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6895:34:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31659,"name":"vRewardsInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31501,"src":"6939:19:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory[] memory"}],"id":31652,"name":"IncentiveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34529,"src":"6829:13:154","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_IncentiveData_$34529_storage_ptr_$","typeString":"type(struct IUiIncentiveDataProviderV3.IncentiveData storage pointer)"}},"id":31660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6829:137:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_IncentiveData_$34529_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.IncentiveData memory"}},"src":"6791:175:154","typeDescriptions":{"typeIdentifier":"t_struct$_IncentiveData_$34529_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.IncentiveData memory"}},"id":31662,"nodeType":"ExpressionStatement","src":"6791:175:154"},{"assignments":[31665],"declarations":[{"constant":false,"id":31665,"mutability":"mutable","name":"sTokenIncentiveController","nameLocation":"7035:25:154","nodeType":"VariableDeclaration","scope":31844,"src":"7016:44:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"},"typeName":{"id":31664,"nodeType":"UserDefinedTypeName","pathNode":{"id":31663,"name":"IRewardsController","nodeType":"IdentifierPath","referencedDeclaration":39352,"src":"7016:18:154"},"referencedDeclaration":39352,"src":"7016:18:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"visibility":"internal"}],"id":31677,"initialValue":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":31670,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31293,"src":"7117:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":31671,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"7117:31:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31669,"name":"IncentivizedERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28349,"src":"7099:17:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IncentivizedERC20_$28349_$","typeString":"type(contract IncentivizedERC20)"}},"id":31672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7099:50:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IncentivizedERC20_$28349","typeString":"contract IncentivizedERC20"}},"id":31673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getIncentivesController","nodeType":"MemberAccess","referencedDeclaration":28030,"src":"7099:74:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAaveIncentivesController_$3875_$","typeString":"function () view external returns (contract IAaveIncentivesController)"}},"id":31674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7099:76:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}],"id":31668,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7091:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31667,"name":"address","nodeType":"ElementaryTypeName","src":"7091:7:154","typeDescriptions":{}}},"id":31675,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7091:85:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31666,"name":"IRewardsController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39352,"src":"7063:18:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRewardsController_$39352_$","typeString":"type(contract IRewardsController)"}},"id":31676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7063:121:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"nodeType":"VariableDeclarationStatement","src":"7016:168:154"},{"assignments":[31682],"declarations":[{"constant":false,"id":31682,"mutability":"mutable","name":"sRewardsInformation","nameLocation":"7212:19:154","nodeType":"VariableDeclaration","scope":31844,"src":"7192:39:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo[]"},"typeName":{"baseType":{"id":31680,"nodeType":"UserDefinedTypeName","pathNode":{"id":31679,"name":"RewardInfo","nodeType":"IdentifierPath","referencedDeclaration":34552,"src":"7192:10:154"},"referencedDeclaration":34552,"src":"7192:10:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo"}},"id":31681,"nodeType":"ArrayTypeName","src":"7192:12:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo[]"}},"visibility":"internal"}],"id":31683,"nodeType":"VariableDeclarationStatement","src":"7192:39:154"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":31692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":31686,"name":"sTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31665,"src":"7251:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}],"id":31685,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7243:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31684,"name":"address","nodeType":"ElementaryTypeName","src":"7243:7:154","typeDescriptions":{}}},"id":31687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7243:34:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":31690,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7289:1:154","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":31689,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7281:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31688,"name":"address","nodeType":"ElementaryTypeName","src":"7281:7:154","typeDescriptions":{}}},"id":31691,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7281:10:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7243:48:154","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31829,"nodeType":"IfStatement","src":"7239:1849:154","trueBody":{"id":31828,"nodeType":"Block","src":"7293:1795:154","statements":[{"assignments":[31697],"declarations":[{"constant":false,"id":31697,"mutability":"mutable","name":"sTokenRewardAddresses","nameLocation":"7320:21:154","nodeType":"VariableDeclaration","scope":31828,"src":"7303:38:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":31695,"name":"address","nodeType":"ElementaryTypeName","src":"7303:7:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":31696,"nodeType":"ArrayTypeName","src":"7303:9:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":31703,"initialValue":{"arguments":[{"expression":{"id":31700,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31293,"src":"7399:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":31701,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"7399:31:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":31698,"name":"sTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31665,"src":"7344:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":31699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getRewardsByAsset","nodeType":"MemberAccess","referencedDeclaration":39468,"src":"7344:43:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":31702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7344:96:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"7303:137:154"},{"expression":{"id":31712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31704,"name":"sRewardsInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31682,"src":"7450:19:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":31709,"name":"sTokenRewardAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31697,"src":"7489:21:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":31710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"7489:28:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31708,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"7472:16:154","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_RewardInfo_$34552_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct IUiIncentiveDataProviderV3.RewardInfo memory[] memory)"},"typeName":{"baseType":{"id":31706,"nodeType":"UserDefinedTypeName","pathNode":{"id":31705,"name":"RewardInfo","nodeType":"IdentifierPath","referencedDeclaration":34552,"src":"7476:10:154"},"referencedDeclaration":34552,"src":"7476:10:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo"}},"id":31707,"nodeType":"ArrayTypeName","src":"7476:12:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo[]"}}},"id":31711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7472:46:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory[] memory"}},"src":"7450:68:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory[] memory"}},"id":31713,"nodeType":"ExpressionStatement","src":"7450:68:154"},{"body":{"id":31826,"nodeType":"Block","src":"7587:1493:154","statements":[{"assignments":[31727],"declarations":[{"constant":false,"id":31727,"mutability":"mutable","name":"rewardInformation","nameLocation":"7617:17:154","nodeType":"VariableDeclaration","scope":31826,"src":"7599:35:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo"},"typeName":{"id":31726,"nodeType":"UserDefinedTypeName","pathNode":{"id":31725,"name":"RewardInfo","nodeType":"IdentifierPath","referencedDeclaration":34552,"src":"7599:10:154"},"referencedDeclaration":34552,"src":"7599:10:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo"}},"visibility":"internal"}],"id":31728,"nodeType":"VariableDeclarationStatement","src":"7599:35:154"},{"expression":{"id":31735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31729,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31727,"src":"7646:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31731,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34533,"src":"7646:36:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":31732,"name":"sTokenRewardAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31697,"src":"7685:21:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":31734,"indexExpression":{"id":31733,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31715,"src":"7707:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7685:24:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7646:63:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":31736,"nodeType":"ExpressionStatement","src":"7646:63:154"},{"expression":{"id":31754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":31737,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31727,"src":"7736:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31739,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"tokenIncentivesIndex","nodeType":"MemberAccess","referencedDeclaration":34541,"src":"7736:38:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":31740,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31727,"src":"7788:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31741,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"emissionPerSecond","nodeType":"MemberAccess","referencedDeclaration":34537,"src":"7788:35:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":31742,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31727,"src":"7837:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31743,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"incentivesLastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":34539,"src":"7837:47:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":31744,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31727,"src":"7898:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31745,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"emissionEndTimestamp","nodeType":"MemberAccess","referencedDeclaration":34543,"src":"7898:38:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31746,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"7722:226:154","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":31749,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31293,"src":"8005:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":31750,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"8005:31:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":31751,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31727,"src":"8050:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31752,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34533,"src":"8050:36:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":31747,"name":"sTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31665,"src":"7951:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":31748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getRewardsData","nodeType":"MemberAccess","referencedDeclaration":39447,"src":"7951:40:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (address,address) view external returns (uint256,uint256,uint256,uint256)"}},"id":31753,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7951:147:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"src":"7722:376:154","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31755,"nodeType":"ExpressionStatement","src":"7722:376:154"},{"expression":{"id":31764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31756,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31727,"src":"8111:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31758,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"precision","nodeType":"MemberAccess","referencedDeclaration":34549,"src":"8111:27:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":31761,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31293,"src":"8197:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":31762,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"8197:31:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":31759,"name":"sTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31665,"src":"8141:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":31760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getAssetDecimals","nodeType":"MemberAccess","referencedDeclaration":39521,"src":"8141:42:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint8_$","typeString":"function (address) view external returns (uint8)"}},"id":31763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8141:99:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"8111:129:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":31765,"nodeType":"ExpressionStatement","src":"8111:129:154"},{"expression":{"id":31775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31766,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31727,"src":"8252:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31768,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardTokenDecimals","nodeType":"MemberAccess","referencedDeclaration":34547,"src":"8252:37:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":31770,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31727,"src":"8320:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31771,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34533,"src":"8320:36:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31769,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"8292:14:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":31772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8292:76:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":31773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":1463,"src":"8292:85:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":31774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8292:87:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"8252:127:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":31776,"nodeType":"ExpressionStatement","src":"8252:127:154"},{"expression":{"id":31786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31777,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31727,"src":"8391:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31779,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardTokenSymbol","nodeType":"MemberAccess","referencedDeclaration":34531,"src":"8391:35:154","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":31781,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31727,"src":"8444:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31782,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34533,"src":"8444:36:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31780,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"8429:14:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":31783,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8429:52:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":31784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":1458,"src":"8429:72:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view external returns (string memory)"}},"id":31785,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8429:74:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"8391:112:154","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"id":31787,"nodeType":"ExpressionStatement","src":"8391:112:154"},{"expression":{"id":31796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31788,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31727,"src":"8583:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31790,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardOracleAddress","nodeType":"MemberAccess","referencedDeclaration":34535,"src":"8583:37:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":31793,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31727,"src":"8678:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31794,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34533,"src":"8678:36:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":31791,"name":"sTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31665,"src":"8623:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":31792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getRewardOracle","nodeType":"MemberAccess","referencedDeclaration":39227,"src":"8623:41:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_address_$","typeString":"function (address) view external returns (address)"}},"id":31795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8623:103:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8583:143:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":31797,"nodeType":"ExpressionStatement","src":"8583:143:154"},{"expression":{"id":31807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31798,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31727,"src":"8738:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31800,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"priceFeedDecimals","nodeType":"MemberAccess","referencedDeclaration":34551,"src":"8738:35:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":31802,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31727,"src":"8809:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31803,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardOracleAddress","nodeType":"MemberAccess","referencedDeclaration":34535,"src":"8809:37:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31801,"name":"IEACAggregatorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34482,"src":"8776:19:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IEACAggregatorProxy_$34482_$","typeString":"type(contract IEACAggregatorProxy)"}},"id":31804,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8776:82:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"id":31805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":34438,"src":"8776:91:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":31806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8776:93:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"8738:131:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":31808,"nodeType":"ExpressionStatement","src":"8738:131:154"},{"expression":{"id":31818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31809,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31727,"src":"8881:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31811,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardPriceFeed","nodeType":"MemberAccess","referencedDeclaration":34545,"src":"8881:33:154","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":31813,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31727,"src":"8950:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31814,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardOracleAddress","nodeType":"MemberAccess","referencedDeclaration":34535,"src":"8950:37:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31812,"name":"IEACAggregatorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34482,"src":"8917:19:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IEACAggregatorProxy_$34482_$","typeString":"type(contract IEACAggregatorProxy)"}},"id":31815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8917:82:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"id":31816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"latestAnswer","nodeType":"MemberAccess","referencedDeclaration":34443,"src":"8917:95:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_int256_$","typeString":"function () view external returns (int256)"}},"id":31817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8917:97:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"8881:133:154","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":31819,"nodeType":"ExpressionStatement","src":"8881:133:154"},{"expression":{"id":31824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":31820,"name":"sRewardsInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31682,"src":"9027:19:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory[] memory"}},"id":31822,"indexExpression":{"id":31821,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31715,"src":"9047:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9027:22:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":31823,"name":"rewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31727,"src":"9052:17:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"src":"9027:42:154","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory"}},"id":31825,"nodeType":"ExpressionStatement","src":"9027:42:154"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31718,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31715,"src":"7548:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":31719,"name":"sTokenRewardAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31697,"src":"7552:21:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":31720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"7552:28:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7548:32:154","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31827,"initializationExpression":{"assignments":[31715],"declarations":[{"constant":false,"id":31715,"mutability":"mutable","name":"j","nameLocation":"7541:1:154","nodeType":"VariableDeclaration","scope":31827,"src":"7533:9:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31714,"name":"uint256","nodeType":"ElementaryTypeName","src":"7533:7:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31717,"initialValue":{"hexValue":"30","id":31716,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7545:1:154","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"7533:13:154"},"loopExpression":{"expression":{"id":31723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"7582:3:154","subExpression":{"id":31722,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31715,"src":"7584:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31724,"nodeType":"ExpressionStatement","src":"7582:3:154"},"nodeType":"ForStatement","src":"7528:1552:154"}]}},{"expression":{"id":31842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":31830,"name":"reserveIncentiveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31276,"src":"9096:20:154","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData memory"}},"id":31832,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"sIncentiveData","nodeType":"MemberAccess","referencedDeclaration":34519,"src":"9096:35:154","typeDescriptions":{"typeIdentifier":"t_struct$_IncentiveData_$34529_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.IncentiveData memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":31834,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31293,"src":"9157:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":31835,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"9157:31:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":31838,"name":"sTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31665,"src":"9206:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}],"id":31837,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9198:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31836,"name":"address","nodeType":"ElementaryTypeName","src":"9198:7:154","typeDescriptions":{}}},"id":31839,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9198:34:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31840,"name":"sRewardsInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31682,"src":"9242:19:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo memory[] memory"}],"id":31833,"name":"IncentiveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34529,"src":"9134:13:154","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_IncentiveData_$34529_storage_ptr_$","typeString":"type(struct IUiIncentiveDataProviderV3.IncentiveData storage pointer)"}},"id":31841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9134:135:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_IncentiveData_$34529_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.IncentiveData memory"}},"src":"9096:173:154","typeDescriptions":{"typeIdentifier":"t_struct$_IncentiveData_$34529_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.IncentiveData memory"}},"id":31843,"nodeType":"ExpressionStatement","src":"9096:173:154"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31267,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31264,"src":"2052:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":31268,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31245,"src":"2056:8:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":31269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"2056:15:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2052:19:154","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31845,"initializationExpression":{"assignments":[31264],"declarations":[{"constant":false,"id":31264,"mutability":"mutable","name":"i","nameLocation":"2045:1:154","nodeType":"VariableDeclaration","scope":31845,"src":"2037:9:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31263,"name":"uint256","nodeType":"ElementaryTypeName","src":"2037:7:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31266,"initialValue":{"hexValue":"30","id":31265,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2049:1:154","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2037:13:154"},"loopExpression":{"expression":{"id":31272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2073:3:154","subExpression":{"id":31271,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31264,"src":"2073:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31273,"nodeType":"ExpressionStatement","src":"2073:3:154"},"nodeType":"ForStatement","src":"2032:7244:154"},{"expression":{"components":[{"id":31846,"name":"reservesIncentiveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31254,"src":"9290:21:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData memory[] memory"}}],"id":31847,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9289:23:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData memory[] memory"}},"functionReturnParameters":31231,"id":31848,"nodeType":"Return","src":"9282:30:154"}]},"id":31850,"implemented":true,"kind":"function","modifiers":[],"name":"_getReservesIncentivesData","nameLocation":"1579:26:154","nodeType":"FunctionDefinition","parameters":{"id":31226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31225,"mutability":"mutable","name":"provider","nameLocation":"1634:8:154","nodeType":"VariableDeclaration","scope":31850,"src":"1611:31:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":31224,"nodeType":"UserDefinedTypeName","pathNode":{"id":31223,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"1611:22:154"},"referencedDeclaration":5069,"src":"1611:22:154","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"1605:41:154"},"returnParameters":{"id":31231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31230,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31850,"src":"1669:39:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData[]"},"typeName":{"baseType":{"id":31228,"nodeType":"UserDefinedTypeName","pathNode":{"id":31227,"name":"AggregatedReserveIncentiveData","nodeType":"IdentifierPath","referencedDeclaration":34520,"src":"1669:30:154"},"referencedDeclaration":34520,"src":"1669:30:154","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveIncentiveData_$34520_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData"}},"id":31229,"nodeType":"ArrayTypeName","src":"1669:32:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData[]"}},"visibility":"internal"}],"src":"1668:41:154"},"scope":32481,"src":"1570:7747:154","stateMutability":"view","virtual":false,"visibility":"private"},{"baseFunctions":[34612],"body":{"id":31868,"nodeType":"Block","src":"9486:64:154","statements":[{"expression":{"arguments":[{"id":31864,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31853,"src":"9530:8:154","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},{"id":31865,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31855,"src":"9540:4:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},{"typeIdentifier":"t_address","typeString":"address"}],"id":31863,"name":"_getUserReservesIncentivesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32480,"src":"9499:30:154","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IPoolAddressesProvider_$5069_$_t_address_$returns$_t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr_$","typeString":"function (contract IPoolAddressesProvider,address) view returns (struct IUiIncentiveDataProviderV3.UserReserveIncentiveData memory[] memory)"}},"id":31866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9499:46:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData memory[] memory"}},"functionReturnParameters":31862,"id":31867,"nodeType":"Return","src":"9492:53:154"}]},"functionSelector":"799bdcf5","id":31869,"implemented":true,"kind":"function","modifiers":[],"name":"getUserReservesIncentivesData","nameLocation":"9330:29:154","nodeType":"FunctionDefinition","overrides":{"id":31857,"nodeType":"OverrideSpecifier","overrides":[],"src":"9433:8:154"},"parameters":{"id":31856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31853,"mutability":"mutable","name":"provider","nameLocation":"9388:8:154","nodeType":"VariableDeclaration","scope":31869,"src":"9365:31:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":31852,"nodeType":"UserDefinedTypeName","pathNode":{"id":31851,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"9365:22:154"},"referencedDeclaration":5069,"src":"9365:22:154","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"},{"constant":false,"id":31855,"mutability":"mutable","name":"user","nameLocation":"9410:4:154","nodeType":"VariableDeclaration","scope":31869,"src":"9402:12:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31854,"name":"address","nodeType":"ElementaryTypeName","src":"9402:7:154","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9359:59:154"},"returnParameters":{"id":31862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31861,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31869,"src":"9451:33:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData[]"},"typeName":{"baseType":{"id":31859,"nodeType":"UserDefinedTypeName","pathNode":{"id":31858,"name":"UserReserveIncentiveData","nodeType":"IdentifierPath","referencedDeclaration":34564,"src":"9451:24:154"},"referencedDeclaration":34564,"src":"9451:24:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserReserveIncentiveData_$34564_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData"}},"id":31860,"nodeType":"ArrayTypeName","src":"9451:26:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveIncentiveData_$34564_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData[]"}},"visibility":"internal"}],"src":"9450:35:154"},"scope":32481,"src":"9321:229:154","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":32479,"nodeType":"Block","src":"9710:7520:154","statements":[{"assignments":[31883],"declarations":[{"constant":false,"id":31883,"mutability":"mutable","name":"pool","nameLocation":"9722:4:154","nodeType":"VariableDeclaration","scope":32479,"src":"9716:10:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":31882,"nodeType":"UserDefinedTypeName","pathNode":{"id":31881,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"9716:5:154"},"referencedDeclaration":4860,"src":"9716:5:154","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"}],"id":31889,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":31885,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31872,"src":"9735:8:154","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":31886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"9735:16:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":31887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9735:18:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31884,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"9729:5:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":31888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9729:25:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"nodeType":"VariableDeclarationStatement","src":"9716:38:154"},{"assignments":[31894],"declarations":[{"constant":false,"id":31894,"mutability":"mutable","name":"reserves","nameLocation":"9777:8:154","nodeType":"VariableDeclaration","scope":32479,"src":"9760:25:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":31892,"name":"address","nodeType":"ElementaryTypeName","src":"9760:7:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":31893,"nodeType":"ArrayTypeName","src":"9760:9:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":31898,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":31895,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31883,"src":"9788:4:154","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":31896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReservesList","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"9788:20:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view external returns (address[] memory)"}},"id":31897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9788:22:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"9760:50:154"},{"assignments":[31903],"declarations":[{"constant":false,"id":31903,"mutability":"mutable","name":"userReservesIncentivesData","nameLocation":"9851:26:154","nodeType":"VariableDeclaration","scope":32479,"src":"9817:60:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData[]"},"typeName":{"baseType":{"id":31901,"nodeType":"UserDefinedTypeName","pathNode":{"id":31900,"name":"UserReserveIncentiveData","nodeType":"IdentifierPath","referencedDeclaration":34564,"src":"9817:24:154"},"referencedDeclaration":34564,"src":"9817:24:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserReserveIncentiveData_$34564_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData"}},"id":31902,"nodeType":"ArrayTypeName","src":"9817:26:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveIncentiveData_$34564_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData[]"}},"visibility":"internal"}],"id":31919,"initialValue":{"arguments":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":31913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31908,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31874,"src":"9918:4:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":31911,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9934:1:154","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":31910,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9926:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31909,"name":"address","nodeType":"ElementaryTypeName","src":"9926:7:154","typeDescriptions":{}}},"id":31912,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9926:10:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9918:18:154","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":31916,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9957:1:154","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":31917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"9918:40:154","trueExpression":{"expression":{"id":31914,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31894,"src":"9939:8:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":31915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"9939:15:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31907,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"9880:30:154","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct IUiIncentiveDataProviderV3.UserReserveIncentiveData memory[] memory)"},"typeName":{"baseType":{"id":31905,"nodeType":"UserDefinedTypeName","pathNode":{"id":31904,"name":"UserReserveIncentiveData","nodeType":"IdentifierPath","referencedDeclaration":34564,"src":"9884:24:154"},"referencedDeclaration":34564,"src":"9884:24:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserReserveIncentiveData_$34564_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData"}},"id":31906,"nodeType":"ArrayTypeName","src":"9884:26:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveIncentiveData_$34564_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData[]"}}},"id":31918,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9880:84:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"9817:147:154"},{"body":{"id":32474,"nodeType":"Block","src":"10017:7167:154","statements":[{"assignments":[31935],"declarations":[{"constant":false,"id":31935,"mutability":"mutable","name":"baseData","nameLocation":"10054:8:154","nodeType":"VariableDeclaration","scope":32474,"src":"10025:37:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":31934,"nodeType":"UserDefinedTypeName","pathNode":{"id":31933,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"10025:21:154"},"referencedDeclaration":21315,"src":"10025:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":31942,"initialValue":{"arguments":[{"baseExpression":{"id":31938,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31894,"src":"10085:8:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":31940,"indexExpression":{"id":31939,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31921,"src":"10094:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10085:11:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":31936,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31883,"src":"10065:4:154","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":31937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4710,"src":"10065:19:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$21315_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":31941,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10065:32:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"10025:72:154"},{"expression":{"id":31950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":31943,"name":"userReservesIncentivesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31903,"src":"10133:26:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData memory[] memory"}},"id":31945,"indexExpression":{"id":31944,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31921,"src":"10160:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10133:29:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserReserveIncentiveData_$34564_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData memory"}},"id":31946,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":34554,"src":"10133:45:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":31947,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31894,"src":"10181:8:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":31949,"indexExpression":{"id":31948,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31921,"src":"10190:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10181:11:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10133:59:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":31951,"nodeType":"ExpressionStatement","src":"10133:59:154"},{"assignments":[31954],"declarations":[{"constant":false,"id":31954,"mutability":"mutable","name":"aTokenIncentiveController","nameLocation":"10220:25:154","nodeType":"VariableDeclaration","scope":32474,"src":"10201:44:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"},"typeName":{"id":31953,"nodeType":"UserDefinedTypeName","pathNode":{"id":31952,"name":"IRewardsController","nodeType":"IdentifierPath","referencedDeclaration":39352,"src":"10201:18:154"},"referencedDeclaration":39352,"src":"10201:18:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"visibility":"internal"}],"id":31966,"initialValue":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":31959,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31935,"src":"10302:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":31960,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"10302:22:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31958,"name":"IncentivizedERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28349,"src":"10284:17:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IncentivizedERC20_$28349_$","typeString":"type(contract IncentivizedERC20)"}},"id":31961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10284:41:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IncentivizedERC20_$28349","typeString":"contract IncentivizedERC20"}},"id":31962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getIncentivesController","nodeType":"MemberAccess","referencedDeclaration":28030,"src":"10284:65:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAaveIncentivesController_$3875_$","typeString":"function () view external returns (contract IAaveIncentivesController)"}},"id":31963,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10284:67:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}],"id":31957,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10276:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31956,"name":"address","nodeType":"ElementaryTypeName","src":"10276:7:154","typeDescriptions":{}}},"id":31964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10276:76:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31955,"name":"IRewardsController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39352,"src":"10248:18:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRewardsController_$39352_$","typeString":"type(contract IRewardsController)"}},"id":31965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10248:112:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"nodeType":"VariableDeclarationStatement","src":"10201:159:154"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":31975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":31969,"name":"aTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31954,"src":"10380:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}],"id":31968,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10372:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31967,"name":"address","nodeType":"ElementaryTypeName","src":"10372:7:154","typeDescriptions":{}}},"id":31970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10372:34:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":31973,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10418:1:154","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":31972,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10410:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31971,"name":"address","nodeType":"ElementaryTypeName","src":"10410:7:154","typeDescriptions":{}}},"id":31974,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10410:10:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10372:48:154","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32125,"nodeType":"IfStatement","src":"10368:2108:154","trueBody":{"id":32124,"nodeType":"Block","src":"10422:2054:154","statements":[{"assignments":[31980],"declarations":[{"constant":false,"id":31980,"mutability":"mutable","name":"aTokenRewardAddresses","nameLocation":"10503:21:154","nodeType":"VariableDeclaration","scope":32124,"src":"10486:38:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":31978,"name":"address","nodeType":"ElementaryTypeName","src":"10486:7:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":31979,"nodeType":"ArrayTypeName","src":"10486:9:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":31986,"initialValue":{"arguments":[{"expression":{"id":31983,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31935,"src":"10582:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":31984,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"10582:22:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":31981,"name":"aTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31954,"src":"10527:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":31982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getRewardsByAsset","nodeType":"MemberAccess","referencedDeclaration":39468,"src":"10527:43:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":31985,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10527:87:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"10486:128:154"},{"assignments":[31991],"declarations":[{"constant":false,"id":31991,"mutability":"mutable","name":"aUserRewardsInformation","nameLocation":"10648:23:154","nodeType":"VariableDeclaration","scope":32124,"src":"10624:47:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserRewardInfo_$34590_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo[]"},"typeName":{"baseType":{"id":31989,"nodeType":"UserDefinedTypeName","pathNode":{"id":31988,"name":"UserRewardInfo","nodeType":"IdentifierPath","referencedDeclaration":34590,"src":"10624:14:154"},"referencedDeclaration":34590,"src":"10624:14:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo"}},"id":31990,"nodeType":"ArrayTypeName","src":"10624:16:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserRewardInfo_$34590_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo[]"}},"visibility":"internal"}],"id":31999,"initialValue":{"arguments":[{"expression":{"id":31996,"name":"aTokenRewardAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31980,"src":"10706:21:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":31997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"10706:28:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":31995,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"10674:20:154","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_UserRewardInfo_$34590_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct IUiIncentiveDataProviderV3.UserRewardInfo memory[] memory)"},"typeName":{"baseType":{"id":31993,"nodeType":"UserDefinedTypeName","pathNode":{"id":31992,"name":"UserRewardInfo","nodeType":"IdentifierPath","referencedDeclaration":34590,"src":"10678:14:154"},"referencedDeclaration":34590,"src":"10678:14:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo"}},"id":31994,"nodeType":"ArrayTypeName","src":"10678:16:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserRewardInfo_$34590_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo[]"}}},"id":31998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10674:70:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserRewardInfo_$34590_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"10624:120:154"},{"body":{"id":32107,"nodeType":"Block","src":"10813:1445:154","statements":[{"assignments":[32013],"declarations":[{"constant":false,"id":32013,"mutability":"mutable","name":"userRewardInformation","nameLocation":"10847:21:154","nodeType":"VariableDeclaration","scope":32107,"src":"10825:43:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo"},"typeName":{"id":32012,"nodeType":"UserDefinedTypeName","pathNode":{"id":32011,"name":"UserRewardInfo","nodeType":"IdentifierPath","referencedDeclaration":34590,"src":"10825:14:154"},"referencedDeclaration":34590,"src":"10825:14:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo"}},"visibility":"internal"}],"id":32014,"nodeType":"VariableDeclarationStatement","src":"10825:43:154"},{"expression":{"id":32021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32015,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32013,"src":"10880:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32017,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34579,"src":"10880:40:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":32018,"name":"aTokenRewardAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31980,"src":"10923:21:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":32020,"indexExpression":{"id":32019,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32001,"src":"10945:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10923:24:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10880:67:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":32022,"nodeType":"ExpressionStatement","src":"10880:67:154"},{"expression":{"id":32034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32023,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32013,"src":"10960:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32025,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"tokenIncentivesUserIndex","nodeType":"MemberAccess","referencedDeclaration":34583,"src":"10960:46:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":32028,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31874,"src":"11081:4:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":32029,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31935,"src":"11101:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":32030,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"11101:22:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":32031,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32013,"src":"11139:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32032,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34579,"src":"11139:40:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":32026,"name":"aTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31954,"src":"11009:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":32027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getUserAssetIndex","nodeType":"MemberAccess","referencedDeclaration":39431,"src":"11009:56:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address,address) view external returns (uint256)"}},"id":32033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11009:184:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10960:233:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32035,"nodeType":"ExpressionStatement","src":"10960:233:154"},{"expression":{"id":32045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32036,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32013,"src":"11206:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32038,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userUnclaimedRewards","nodeType":"MemberAccess","referencedDeclaration":34581,"src":"11206:42:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":32041,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31874,"src":"11312:4:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":32042,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32013,"src":"11318:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32043,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34579,"src":"11318:40:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":32039,"name":"aTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31954,"src":"11251:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":32040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getUserAccruedRewards","nodeType":"MemberAccess","referencedDeclaration":39485,"src":"11251:60:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":32044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11251:108:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11206:153:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32046,"nodeType":"ExpressionStatement","src":"11206:153:154"},{"expression":{"id":32056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32047,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32013,"src":"11371:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32049,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardTokenDecimals","nodeType":"MemberAccess","referencedDeclaration":34589,"src":"11371:41:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32051,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32013,"src":"11443:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32052,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34579,"src":"11443:40:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32050,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"11415:14:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":32053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11415:80:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":32054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":1463,"src":"11415:89:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":32055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11415:91:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"11371:135:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":32057,"nodeType":"ExpressionStatement","src":"11371:135:154"},{"expression":{"id":32067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32058,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32013,"src":"11518:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32060,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardTokenSymbol","nodeType":"MemberAccess","referencedDeclaration":34575,"src":"11518:39:154","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32062,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32013,"src":"11588:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32063,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34579,"src":"11588:40:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32061,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"11560:14:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":32064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11560:80:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":32065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":1458,"src":"11560:87:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view external returns (string memory)"}},"id":32066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11560:89:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"11518:131:154","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"id":32068,"nodeType":"ExpressionStatement","src":"11518:131:154"},{"expression":{"id":32077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32069,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32013,"src":"11729:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32071,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardOracleAddress","nodeType":"MemberAccess","referencedDeclaration":34577,"src":"11729:41:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":32074,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32013,"src":"11828:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32075,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34579,"src":"11828:40:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":32072,"name":"aTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31954,"src":"11773:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":32073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getRewardOracle","nodeType":"MemberAccess","referencedDeclaration":39227,"src":"11773:41:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_address_$","typeString":"function (address) view external returns (address)"}},"id":32076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11773:107:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11729:151:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":32078,"nodeType":"ExpressionStatement","src":"11729:151:154"},{"expression":{"id":32088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32079,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32013,"src":"11892:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32081,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"priceFeedDecimals","nodeType":"MemberAccess","referencedDeclaration":34587,"src":"11892:39:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32083,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32013,"src":"11967:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32084,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardOracleAddress","nodeType":"MemberAccess","referencedDeclaration":34577,"src":"11967:41:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32082,"name":"IEACAggregatorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34482,"src":"11934:19:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IEACAggregatorProxy_$34482_$","typeString":"type(contract IEACAggregatorProxy)"}},"id":32085,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11934:86:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"id":32086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":34438,"src":"11934:95:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":32087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11934:97:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"11892:139:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":32089,"nodeType":"ExpressionStatement","src":"11892:139:154"},{"expression":{"id":32099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32090,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32013,"src":"12043:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32092,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardPriceFeed","nodeType":"MemberAccess","referencedDeclaration":34585,"src":"12043:37:154","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32094,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32013,"src":"12116:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32095,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardOracleAddress","nodeType":"MemberAccess","referencedDeclaration":34577,"src":"12116:41:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32093,"name":"IEACAggregatorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34482,"src":"12083:19:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IEACAggregatorProxy_$34482_$","typeString":"type(contract IEACAggregatorProxy)"}},"id":32096,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12083:86:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"id":32097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"latestAnswer","nodeType":"MemberAccess","referencedDeclaration":34443,"src":"12083:99:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_int256_$","typeString":"function () view external returns (int256)"}},"id":32098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12083:101:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12043:141:154","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":32100,"nodeType":"ExpressionStatement","src":"12043:141:154"},{"expression":{"id":32105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":32101,"name":"aUserRewardsInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31991,"src":"12197:23:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserRewardInfo_$34590_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory[] memory"}},"id":32103,"indexExpression":{"id":32102,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32001,"src":"12221:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12197:26:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":32104,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32013,"src":"12226:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"src":"12197:50:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32106,"nodeType":"ExpressionStatement","src":"12197:50:154"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32004,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32001,"src":"10774:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":32005,"name":"aTokenRewardAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31980,"src":"10778:21:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":32006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"10778:28:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10774:32:154","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32108,"initializationExpression":{"assignments":[32001],"declarations":[{"constant":false,"id":32001,"mutability":"mutable","name":"j","nameLocation":"10767:1:154","nodeType":"VariableDeclaration","scope":32108,"src":"10759:9:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32000,"name":"uint256","nodeType":"ElementaryTypeName","src":"10759:7:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32003,"initialValue":{"hexValue":"30","id":32002,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10771:1:154","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10759:13:154"},"loopExpression":{"expression":{"id":32009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"10808:3:154","subExpression":{"id":32008,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32001,"src":"10810:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32010,"nodeType":"ExpressionStatement","src":"10808:3:154"},"nodeType":"ForStatement","src":"10754:1504:154"},{"expression":{"id":32122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":32109,"name":"userReservesIncentivesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31903,"src":"12268:26:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData memory[] memory"}},"id":32111,"indexExpression":{"id":32110,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31921,"src":"12295:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12268:29:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserReserveIncentiveData_$34564_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData memory"}},"id":32112,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"aTokenIncentivesUserData","nodeType":"MemberAccess","referencedDeclaration":34557,"src":"12268:54:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserIncentiveData_$34573_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserIncentiveData memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":32114,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31935,"src":"12354:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":32115,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"12354:22:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":32118,"name":"aTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31954,"src":"12396:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}],"id":32117,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12388:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":32116,"name":"address","nodeType":"ElementaryTypeName","src":"12388:7:154","typeDescriptions":{}}},"id":32119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12388:34:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":32120,"name":"aUserRewardsInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31991,"src":"12434:23:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserRewardInfo_$34590_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_UserRewardInfo_$34590_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory[] memory"}],"id":32113,"name":"UserIncentiveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34573,"src":"12325:17:154","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_UserIncentiveData_$34573_storage_ptr_$","typeString":"type(struct IUiIncentiveDataProviderV3.UserIncentiveData storage pointer)"}},"id":32121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12325:142:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_UserIncentiveData_$34573_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserIncentiveData memory"}},"src":"12268:199:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserIncentiveData_$34573_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserIncentiveData memory"}},"id":32123,"nodeType":"ExpressionStatement","src":"12268:199:154"}]}},{"assignments":[32128],"declarations":[{"constant":false,"id":32128,"mutability":"mutable","name":"vTokenIncentiveController","nameLocation":"12532:25:154","nodeType":"VariableDeclaration","scope":32474,"src":"12513:44:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"},"typeName":{"id":32127,"nodeType":"UserDefinedTypeName","pathNode":{"id":32126,"name":"IRewardsController","nodeType":"IdentifierPath","referencedDeclaration":39352,"src":"12513:18:154"},"referencedDeclaration":39352,"src":"12513:18:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"visibility":"internal"}],"id":32140,"initialValue":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32133,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31935,"src":"12614:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":32134,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21306,"src":"12614:33:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32132,"name":"IncentivizedERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28349,"src":"12596:17:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IncentivizedERC20_$28349_$","typeString":"type(contract IncentivizedERC20)"}},"id":32135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12596:52:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IncentivizedERC20_$28349","typeString":"contract IncentivizedERC20"}},"id":32136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getIncentivesController","nodeType":"MemberAccess","referencedDeclaration":28030,"src":"12596:76:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAaveIncentivesController_$3875_$","typeString":"function () view external returns (contract IAaveIncentivesController)"}},"id":32137,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12596:78:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}],"id":32131,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12588:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":32130,"name":"address","nodeType":"ElementaryTypeName","src":"12588:7:154","typeDescriptions":{}}},"id":32138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12588:87:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32129,"name":"IRewardsController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39352,"src":"12560:18:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRewardsController_$39352_$","typeString":"type(contract IRewardsController)"}},"id":32139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12560:123:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"nodeType":"VariableDeclarationStatement","src":"12513:170:154"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":32149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":32143,"name":"vTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32128,"src":"12703:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}],"id":32142,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12695:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":32141,"name":"address","nodeType":"ElementaryTypeName","src":"12695:7:154","typeDescriptions":{}}},"id":32144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12695:34:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":32147,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12741:1:154","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":32146,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12733:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":32145,"name":"address","nodeType":"ElementaryTypeName","src":"12733:7:154","typeDescriptions":{}}},"id":32148,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12733:10:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12695:48:154","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32299,"nodeType":"IfStatement","src":"12691:2141:154","trueBody":{"id":32298,"nodeType":"Block","src":"12745:2087:154","statements":[{"assignments":[32154],"declarations":[{"constant":false,"id":32154,"mutability":"mutable","name":"vTokenRewardAddresses","nameLocation":"12826:21:154","nodeType":"VariableDeclaration","scope":32298,"src":"12809:38:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":32152,"name":"address","nodeType":"ElementaryTypeName","src":"12809:7:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":32153,"nodeType":"ArrayTypeName","src":"12809:9:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":32160,"initialValue":{"arguments":[{"expression":{"id":32157,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31935,"src":"12905:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":32158,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21306,"src":"12905:33:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":32155,"name":"vTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32128,"src":"12850:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":32156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getRewardsByAsset","nodeType":"MemberAccess","referencedDeclaration":39468,"src":"12850:43:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":32159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12850:98:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"12809:139:154"},{"assignments":[32165],"declarations":[{"constant":false,"id":32165,"mutability":"mutable","name":"vUserRewardsInformation","nameLocation":"12982:23:154","nodeType":"VariableDeclaration","scope":32298,"src":"12958:47:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserRewardInfo_$34590_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo[]"},"typeName":{"baseType":{"id":32163,"nodeType":"UserDefinedTypeName","pathNode":{"id":32162,"name":"UserRewardInfo","nodeType":"IdentifierPath","referencedDeclaration":34590,"src":"12958:14:154"},"referencedDeclaration":34590,"src":"12958:14:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo"}},"id":32164,"nodeType":"ArrayTypeName","src":"12958:16:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserRewardInfo_$34590_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo[]"}},"visibility":"internal"}],"id":32173,"initialValue":{"arguments":[{"expression":{"id":32170,"name":"vTokenRewardAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32154,"src":"13040:21:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":32171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"13040:28:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":32169,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"13008:20:154","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_UserRewardInfo_$34590_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct IUiIncentiveDataProviderV3.UserRewardInfo memory[] memory)"},"typeName":{"baseType":{"id":32167,"nodeType":"UserDefinedTypeName","pathNode":{"id":32166,"name":"UserRewardInfo","nodeType":"IdentifierPath","referencedDeclaration":34590,"src":"13012:14:154"},"referencedDeclaration":34590,"src":"13012:14:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo"}},"id":32168,"nodeType":"ArrayTypeName","src":"13012:16:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserRewardInfo_$34590_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo[]"}}},"id":32172,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13008:70:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserRewardInfo_$34590_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"12958:120:154"},{"body":{"id":32281,"nodeType":"Block","src":"13147:1456:154","statements":[{"assignments":[32187],"declarations":[{"constant":false,"id":32187,"mutability":"mutable","name":"userRewardInformation","nameLocation":"13181:21:154","nodeType":"VariableDeclaration","scope":32281,"src":"13159:43:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo"},"typeName":{"id":32186,"nodeType":"UserDefinedTypeName","pathNode":{"id":32185,"name":"UserRewardInfo","nodeType":"IdentifierPath","referencedDeclaration":34590,"src":"13159:14:154"},"referencedDeclaration":34590,"src":"13159:14:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo"}},"visibility":"internal"}],"id":32188,"nodeType":"VariableDeclarationStatement","src":"13159:43:154"},{"expression":{"id":32195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32189,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32187,"src":"13214:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32191,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34579,"src":"13214:40:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":32192,"name":"vTokenRewardAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32154,"src":"13257:21:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":32194,"indexExpression":{"id":32193,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32175,"src":"13279:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13257:24:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13214:67:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":32196,"nodeType":"ExpressionStatement","src":"13214:67:154"},{"expression":{"id":32208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32197,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32187,"src":"13294:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32199,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"tokenIncentivesUserIndex","nodeType":"MemberAccess","referencedDeclaration":34583,"src":"13294:46:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":32202,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31874,"src":"13415:4:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":32203,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31935,"src":"13435:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":32204,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21306,"src":"13435:33:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":32205,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32187,"src":"13484:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32206,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34579,"src":"13484:40:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":32200,"name":"vTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32128,"src":"13343:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":32201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getUserAssetIndex","nodeType":"MemberAccess","referencedDeclaration":39431,"src":"13343:56:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address,address) view external returns (uint256)"}},"id":32207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13343:195:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13294:244:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32209,"nodeType":"ExpressionStatement","src":"13294:244:154"},{"expression":{"id":32219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32210,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32187,"src":"13551:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32212,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userUnclaimedRewards","nodeType":"MemberAccess","referencedDeclaration":34581,"src":"13551:42:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":32215,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31874,"src":"13657:4:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":32216,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32187,"src":"13663:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32217,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34579,"src":"13663:40:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":32213,"name":"vTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32128,"src":"13596:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":32214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getUserAccruedRewards","nodeType":"MemberAccess","referencedDeclaration":39485,"src":"13596:60:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":32218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13596:108:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13551:153:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32220,"nodeType":"ExpressionStatement","src":"13551:153:154"},{"expression":{"id":32230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32221,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32187,"src":"13716:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32223,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardTokenDecimals","nodeType":"MemberAccess","referencedDeclaration":34589,"src":"13716:41:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32225,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32187,"src":"13788:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32226,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34579,"src":"13788:40:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32224,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"13760:14:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":32227,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13760:80:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":32228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":1463,"src":"13760:89:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":32229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13760:91:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"13716:135:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":32231,"nodeType":"ExpressionStatement","src":"13716:135:154"},{"expression":{"id":32241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32232,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32187,"src":"13863:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32234,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardTokenSymbol","nodeType":"MemberAccess","referencedDeclaration":34575,"src":"13863:39:154","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32236,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32187,"src":"13933:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32237,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34579,"src":"13933:40:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32235,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"13905:14:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":32238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13905:80:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":32239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":1458,"src":"13905:87:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view external returns (string memory)"}},"id":32240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13905:89:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"13863:131:154","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"id":32242,"nodeType":"ExpressionStatement","src":"13863:131:154"},{"expression":{"id":32251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32243,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32187,"src":"14074:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32245,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardOracleAddress","nodeType":"MemberAccess","referencedDeclaration":34577,"src":"14074:41:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":32248,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32187,"src":"14173:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32249,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34579,"src":"14173:40:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":32246,"name":"vTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32128,"src":"14118:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":32247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getRewardOracle","nodeType":"MemberAccess","referencedDeclaration":39227,"src":"14118:41:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_address_$","typeString":"function (address) view external returns (address)"}},"id":32250,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14118:107:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14074:151:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":32252,"nodeType":"ExpressionStatement","src":"14074:151:154"},{"expression":{"id":32262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32253,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32187,"src":"14237:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32255,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"priceFeedDecimals","nodeType":"MemberAccess","referencedDeclaration":34587,"src":"14237:39:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32257,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32187,"src":"14312:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32258,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardOracleAddress","nodeType":"MemberAccess","referencedDeclaration":34577,"src":"14312:41:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32256,"name":"IEACAggregatorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34482,"src":"14279:19:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IEACAggregatorProxy_$34482_$","typeString":"type(contract IEACAggregatorProxy)"}},"id":32259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14279:86:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"id":32260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":34438,"src":"14279:95:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":32261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14279:97:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"14237:139:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":32263,"nodeType":"ExpressionStatement","src":"14237:139:154"},{"expression":{"id":32273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32264,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32187,"src":"14388:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32266,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardPriceFeed","nodeType":"MemberAccess","referencedDeclaration":34585,"src":"14388:37:154","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32268,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32187,"src":"14461:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32269,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardOracleAddress","nodeType":"MemberAccess","referencedDeclaration":34577,"src":"14461:41:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32267,"name":"IEACAggregatorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34482,"src":"14428:19:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IEACAggregatorProxy_$34482_$","typeString":"type(contract IEACAggregatorProxy)"}},"id":32270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14428:86:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"id":32271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"latestAnswer","nodeType":"MemberAccess","referencedDeclaration":34443,"src":"14428:99:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_int256_$","typeString":"function () view external returns (int256)"}},"id":32272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14428:101:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14388:141:154","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":32274,"nodeType":"ExpressionStatement","src":"14388:141:154"},{"expression":{"id":32279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":32275,"name":"vUserRewardsInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32165,"src":"14542:23:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserRewardInfo_$34590_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory[] memory"}},"id":32277,"indexExpression":{"id":32276,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32175,"src":"14566:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14542:26:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":32278,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32187,"src":"14571:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"src":"14542:50:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32280,"nodeType":"ExpressionStatement","src":"14542:50:154"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32178,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32175,"src":"13108:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":32179,"name":"vTokenRewardAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32154,"src":"13112:21:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":32180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"13112:28:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13108:32:154","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32282,"initializationExpression":{"assignments":[32175],"declarations":[{"constant":false,"id":32175,"mutability":"mutable","name":"j","nameLocation":"13101:1:154","nodeType":"VariableDeclaration","scope":32282,"src":"13093:9:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32174,"name":"uint256","nodeType":"ElementaryTypeName","src":"13093:7:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32177,"initialValue":{"hexValue":"30","id":32176,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13105:1:154","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13093:13:154"},"loopExpression":{"expression":{"id":32183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"13142:3:154","subExpression":{"id":32182,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32175,"src":"13144:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32184,"nodeType":"ExpressionStatement","src":"13142:3:154"},"nodeType":"ForStatement","src":"13088:1515:154"},{"expression":{"id":32296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":32283,"name":"userReservesIncentivesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31903,"src":"14613:26:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData memory[] memory"}},"id":32285,"indexExpression":{"id":32284,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31921,"src":"14640:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14613:29:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserReserveIncentiveData_$34564_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData memory"}},"id":32286,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"vTokenIncentivesUserData","nodeType":"MemberAccess","referencedDeclaration":34560,"src":"14613:54:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserIncentiveData_$34573_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserIncentiveData memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":32288,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31935,"src":"14699:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":32289,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21306,"src":"14699:33:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":32292,"name":"aTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31954,"src":"14752:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}],"id":32291,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14744:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":32290,"name":"address","nodeType":"ElementaryTypeName","src":"14744:7:154","typeDescriptions":{}}},"id":32293,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14744:34:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":32294,"name":"vUserRewardsInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32165,"src":"14790:23:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserRewardInfo_$34590_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_UserRewardInfo_$34590_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory[] memory"}],"id":32287,"name":"UserIncentiveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34573,"src":"14670:17:154","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_UserIncentiveData_$34573_storage_ptr_$","typeString":"type(struct IUiIncentiveDataProviderV3.UserIncentiveData storage pointer)"}},"id":32295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14670:153:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_UserIncentiveData_$34573_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserIncentiveData memory"}},"src":"14613:210:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserIncentiveData_$34573_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserIncentiveData memory"}},"id":32297,"nodeType":"ExpressionStatement","src":"14613:210:154"}]}},{"assignments":[32302],"declarations":[{"constant":false,"id":32302,"mutability":"mutable","name":"sTokenIncentiveController","nameLocation":"14886:25:154","nodeType":"VariableDeclaration","scope":32474,"src":"14867:44:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"},"typeName":{"id":32301,"nodeType":"UserDefinedTypeName","pathNode":{"id":32300,"name":"IRewardsController","nodeType":"IdentifierPath","referencedDeclaration":39352,"src":"14867:18:154"},"referencedDeclaration":39352,"src":"14867:18:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"visibility":"internal"}],"id":32314,"initialValue":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32307,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31935,"src":"14968:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":32308,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"14968:31:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32306,"name":"IncentivizedERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28349,"src":"14950:17:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IncentivizedERC20_$28349_$","typeString":"type(contract IncentivizedERC20)"}},"id":32309,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14950:50:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IncentivizedERC20_$28349","typeString":"contract IncentivizedERC20"}},"id":32310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getIncentivesController","nodeType":"MemberAccess","referencedDeclaration":28030,"src":"14950:74:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAaveIncentivesController_$3875_$","typeString":"function () view external returns (contract IAaveIncentivesController)"}},"id":32311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14950:76:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAaveIncentivesController_$3875","typeString":"contract IAaveIncentivesController"}],"id":32305,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14942:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":32304,"name":"address","nodeType":"ElementaryTypeName","src":"14942:7:154","typeDescriptions":{}}},"id":32312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14942:85:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32303,"name":"IRewardsController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39352,"src":"14914:18:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRewardsController_$39352_$","typeString":"type(contract IRewardsController)"}},"id":32313,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14914:121:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"nodeType":"VariableDeclarationStatement","src":"14867:168:154"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":32323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":32317,"name":"sTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32302,"src":"15055:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}],"id":32316,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15047:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":32315,"name":"address","nodeType":"ElementaryTypeName","src":"15047:7:154","typeDescriptions":{}}},"id":32318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15047:34:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":32321,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15093:1:154","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":32320,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15085:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":32319,"name":"address","nodeType":"ElementaryTypeName","src":"15085:7:154","typeDescriptions":{}}},"id":32322,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15085:10:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"15047:48:154","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32473,"nodeType":"IfStatement","src":"15043:2135:154","trueBody":{"id":32472,"nodeType":"Block","src":"15097:2081:154","statements":[{"assignments":[32328],"declarations":[{"constant":false,"id":32328,"mutability":"mutable","name":"sTokenRewardAddresses","nameLocation":"15178:21:154","nodeType":"VariableDeclaration","scope":32472,"src":"15161:38:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":32326,"name":"address","nodeType":"ElementaryTypeName","src":"15161:7:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":32327,"nodeType":"ArrayTypeName","src":"15161:9:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":32334,"initialValue":{"arguments":[{"expression":{"id":32331,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31935,"src":"15257:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":32332,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"15257:31:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":32329,"name":"sTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32302,"src":"15202:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":32330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getRewardsByAsset","nodeType":"MemberAccess","referencedDeclaration":39468,"src":"15202:43:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":32333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15202:96:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"15161:137:154"},{"assignments":[32339],"declarations":[{"constant":false,"id":32339,"mutability":"mutable","name":"sUserRewardsInformation","nameLocation":"15332:23:154","nodeType":"VariableDeclaration","scope":32472,"src":"15308:47:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserRewardInfo_$34590_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo[]"},"typeName":{"baseType":{"id":32337,"nodeType":"UserDefinedTypeName","pathNode":{"id":32336,"name":"UserRewardInfo","nodeType":"IdentifierPath","referencedDeclaration":34590,"src":"15308:14:154"},"referencedDeclaration":34590,"src":"15308:14:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo"}},"id":32338,"nodeType":"ArrayTypeName","src":"15308:16:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserRewardInfo_$34590_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo[]"}},"visibility":"internal"}],"id":32347,"initialValue":{"arguments":[{"expression":{"id":32344,"name":"sTokenRewardAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32328,"src":"15390:21:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":32345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"15390:28:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":32343,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15358:20:154","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_UserRewardInfo_$34590_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct IUiIncentiveDataProviderV3.UserRewardInfo memory[] memory)"},"typeName":{"baseType":{"id":32341,"nodeType":"UserDefinedTypeName","pathNode":{"id":32340,"name":"UserRewardInfo","nodeType":"IdentifierPath","referencedDeclaration":34590,"src":"15362:14:154"},"referencedDeclaration":34590,"src":"15362:14:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo"}},"id":32342,"nodeType":"ArrayTypeName","src":"15362:16:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserRewardInfo_$34590_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo[]"}}},"id":32346,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15358:70:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserRewardInfo_$34590_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"15308:120:154"},{"body":{"id":32455,"nodeType":"Block","src":"15497:1454:154","statements":[{"assignments":[32361],"declarations":[{"constant":false,"id":32361,"mutability":"mutable","name":"userRewardInformation","nameLocation":"15531:21:154","nodeType":"VariableDeclaration","scope":32455,"src":"15509:43:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo"},"typeName":{"id":32360,"nodeType":"UserDefinedTypeName","pathNode":{"id":32359,"name":"UserRewardInfo","nodeType":"IdentifierPath","referencedDeclaration":34590,"src":"15509:14:154"},"referencedDeclaration":34590,"src":"15509:14:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo"}},"visibility":"internal"}],"id":32362,"nodeType":"VariableDeclarationStatement","src":"15509:43:154"},{"expression":{"id":32369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32363,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32361,"src":"15564:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32365,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34579,"src":"15564:40:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":32366,"name":"sTokenRewardAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32328,"src":"15607:21:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":32368,"indexExpression":{"id":32367,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32349,"src":"15629:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15607:24:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"15564:67:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":32370,"nodeType":"ExpressionStatement","src":"15564:67:154"},{"expression":{"id":32382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32371,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32361,"src":"15644:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32373,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"tokenIncentivesUserIndex","nodeType":"MemberAccess","referencedDeclaration":34583,"src":"15644:46:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":32376,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31874,"src":"15765:4:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":32377,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31935,"src":"15785:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":32378,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"15785:31:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":32379,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32361,"src":"15832:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32380,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34579,"src":"15832:40:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":32374,"name":"sTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32302,"src":"15693:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":32375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getUserAssetIndex","nodeType":"MemberAccess","referencedDeclaration":39431,"src":"15693:56:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address,address) view external returns (uint256)"}},"id":32381,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15693:193:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15644:242:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32383,"nodeType":"ExpressionStatement","src":"15644:242:154"},{"expression":{"id":32393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32384,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32361,"src":"15899:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32386,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userUnclaimedRewards","nodeType":"MemberAccess","referencedDeclaration":34581,"src":"15899:42:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":32389,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31874,"src":"16005:4:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":32390,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32361,"src":"16011:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32391,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34579,"src":"16011:40:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":32387,"name":"sTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32302,"src":"15944:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":32388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getUserAccruedRewards","nodeType":"MemberAccess","referencedDeclaration":39485,"src":"15944:60:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":32392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15944:108:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15899:153:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32394,"nodeType":"ExpressionStatement","src":"15899:153:154"},{"expression":{"id":32404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32395,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32361,"src":"16064:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32397,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardTokenDecimals","nodeType":"MemberAccess","referencedDeclaration":34589,"src":"16064:41:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32399,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32361,"src":"16136:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32400,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34579,"src":"16136:40:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32398,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"16108:14:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":32401,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16108:80:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":32402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":1463,"src":"16108:89:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":32403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16108:91:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"16064:135:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":32405,"nodeType":"ExpressionStatement","src":"16064:135:154"},{"expression":{"id":32415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32406,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32361,"src":"16211:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32408,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardTokenSymbol","nodeType":"MemberAccess","referencedDeclaration":34575,"src":"16211:39:154","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32410,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32361,"src":"16281:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32411,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34579,"src":"16281:40:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32409,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"16253:14:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":32412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16253:80:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":32413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":1458,"src":"16253:87:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view external returns (string memory)"}},"id":32414,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16253:89:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"16211:131:154","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"id":32416,"nodeType":"ExpressionStatement","src":"16211:131:154"},{"expression":{"id":32425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32417,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32361,"src":"16422:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32419,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardOracleAddress","nodeType":"MemberAccess","referencedDeclaration":34577,"src":"16422:41:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":32422,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32361,"src":"16521:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32423,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34579,"src":"16521:40:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":32420,"name":"sTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32302,"src":"16466:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":32421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getRewardOracle","nodeType":"MemberAccess","referencedDeclaration":39227,"src":"16466:41:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_address_$","typeString":"function (address) view external returns (address)"}},"id":32424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16466:107:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16422:151:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":32426,"nodeType":"ExpressionStatement","src":"16422:151:154"},{"expression":{"id":32436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32427,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32361,"src":"16585:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32429,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"priceFeedDecimals","nodeType":"MemberAccess","referencedDeclaration":34587,"src":"16585:39:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32431,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32361,"src":"16660:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32432,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardOracleAddress","nodeType":"MemberAccess","referencedDeclaration":34577,"src":"16660:41:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32430,"name":"IEACAggregatorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34482,"src":"16627:19:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IEACAggregatorProxy_$34482_$","typeString":"type(contract IEACAggregatorProxy)"}},"id":32433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16627:86:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"id":32434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":34438,"src":"16627:95:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":32435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16627:97:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"16585:139:154","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":32437,"nodeType":"ExpressionStatement","src":"16585:139:154"},{"expression":{"id":32447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32438,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32361,"src":"16736:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32440,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"rewardPriceFeed","nodeType":"MemberAccess","referencedDeclaration":34585,"src":"16736:37:154","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32442,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32361,"src":"16809:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32443,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardOracleAddress","nodeType":"MemberAccess","referencedDeclaration":34577,"src":"16809:41:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32441,"name":"IEACAggregatorProxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34482,"src":"16776:19:154","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IEACAggregatorProxy_$34482_$","typeString":"type(contract IEACAggregatorProxy)"}},"id":32444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16776:86:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"id":32445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"latestAnswer","nodeType":"MemberAccess","referencedDeclaration":34443,"src":"16776:99:154","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_int256_$","typeString":"function () view external returns (int256)"}},"id":32446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"16776:101:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16736:141:154","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":32448,"nodeType":"ExpressionStatement","src":"16736:141:154"},{"expression":{"id":32453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":32449,"name":"sUserRewardsInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32339,"src":"16890:23:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserRewardInfo_$34590_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory[] memory"}},"id":32451,"indexExpression":{"id":32450,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32349,"src":"16914:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16890:26:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":32452,"name":"userRewardInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32361,"src":"16919:21:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"src":"16890:50:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory"}},"id":32454,"nodeType":"ExpressionStatement","src":"16890:50:154"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32352,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32349,"src":"15458:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":32353,"name":"sTokenRewardAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32328,"src":"15462:21:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":32354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"15462:28:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15458:32:154","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32456,"initializationExpression":{"assignments":[32349],"declarations":[{"constant":false,"id":32349,"mutability":"mutable","name":"j","nameLocation":"15451:1:154","nodeType":"VariableDeclaration","scope":32456,"src":"15443:9:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32348,"name":"uint256","nodeType":"ElementaryTypeName","src":"15443:7:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32351,"initialValue":{"hexValue":"30","id":32350,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15455:1:154","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15443:13:154"},"loopExpression":{"expression":{"id":32357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"15492:3:154","subExpression":{"id":32356,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32349,"src":"15494:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32358,"nodeType":"ExpressionStatement","src":"15492:3:154"},"nodeType":"ForStatement","src":"15438:1513:154"},{"expression":{"id":32470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":32457,"name":"userReservesIncentivesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31903,"src":"16961:26:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData memory[] memory"}},"id":32459,"indexExpression":{"id":32458,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31921,"src":"16988:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16961:29:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserReserveIncentiveData_$34564_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData memory"}},"id":32460,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"sTokenIncentivesUserData","nodeType":"MemberAccess","referencedDeclaration":34563,"src":"16961:54:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserIncentiveData_$34573_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserIncentiveData memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":32462,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31935,"src":"17047:8:154","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":32463,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"17047:31:154","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":32466,"name":"aTokenIncentiveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31954,"src":"17098:25:154","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}],"id":32465,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17090:7:154","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":32464,"name":"address","nodeType":"ElementaryTypeName","src":"17090:7:154","typeDescriptions":{}}},"id":32467,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17090:34:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":32468,"name":"sUserRewardsInformation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32339,"src":"17136:23:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserRewardInfo_$34590_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_UserRewardInfo_$34590_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo memory[] memory"}],"id":32461,"name":"UserIncentiveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34573,"src":"17018:17:154","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_UserIncentiveData_$34573_storage_ptr_$","typeString":"type(struct IUiIncentiveDataProviderV3.UserIncentiveData storage pointer)"}},"id":32469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"17018:151:154","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_UserIncentiveData_$34573_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserIncentiveData memory"}},"src":"16961:208:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserIncentiveData_$34573_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserIncentiveData memory"}},"id":32471,"nodeType":"ExpressionStatement","src":"16961:208:154"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31924,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31921,"src":"9991:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":31925,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31894,"src":"9995:8:154","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":31926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"9995:15:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9991:19:154","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32475,"initializationExpression":{"assignments":[31921],"declarations":[{"constant":false,"id":31921,"mutability":"mutable","name":"i","nameLocation":"9984:1:154","nodeType":"VariableDeclaration","scope":32475,"src":"9976:9:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31920,"name":"uint256","nodeType":"ElementaryTypeName","src":"9976:7:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31923,"initialValue":{"hexValue":"30","id":31922,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9988:1:154","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9976:13:154"},"loopExpression":{"expression":{"id":31929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"10012:3:154","subExpression":{"id":31928,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31921,"src":"10012:1:154","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31930,"nodeType":"ExpressionStatement","src":"10012:3:154"},"nodeType":"ForStatement","src":"9971:7213:154"},{"expression":{"components":[{"id":32476,"name":"userReservesIncentivesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31903,"src":"17198:26:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData memory[] memory"}}],"id":32477,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17197:28:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData memory[] memory"}},"functionReturnParameters":31880,"id":32478,"nodeType":"Return","src":"17190:35:154"}]},"id":32480,"implemented":true,"kind":"function","modifiers":[],"name":"_getUserReservesIncentivesData","nameLocation":"9563:30:154","nodeType":"FunctionDefinition","parameters":{"id":31875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31872,"mutability":"mutable","name":"provider","nameLocation":"9622:8:154","nodeType":"VariableDeclaration","scope":32480,"src":"9599:31:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":31871,"nodeType":"UserDefinedTypeName","pathNode":{"id":31870,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"9599:22:154"},"referencedDeclaration":5069,"src":"9599:22:154","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"},{"constant":false,"id":31874,"mutability":"mutable","name":"user","nameLocation":"9644:4:154","nodeType":"VariableDeclaration","scope":32480,"src":"9636:12:154","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31873,"name":"address","nodeType":"ElementaryTypeName","src":"9636:7:154","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9593:59:154"},"returnParameters":{"id":31880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31879,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32480,"src":"9675:33:154","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData[]"},"typeName":{"baseType":{"id":31877,"nodeType":"UserDefinedTypeName","pathNode":{"id":31876,"name":"UserReserveIncentiveData","nodeType":"IdentifierPath","referencedDeclaration":34564,"src":"9675:24:154"},"referencedDeclaration":34564,"src":"9675:24:154","typeDescriptions":{"typeIdentifier":"t_struct$_UserReserveIncentiveData_$34564_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData"}},"id":31878,"nodeType":"ArrayTypeName","src":"9675:26:154","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveIncentiveData_$34564_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData[]"}},"visibility":"internal"}],"src":"9674:35:154"},"scope":32481,"src":"9554:7676:154","stateMutability":"view","virtual":false,"visibility":"private"}],"scope":32482,"src":"900:16332:154","usedErrors":[]}],"src":"37:17196:154"},"id":154},"contracts/misc/UiPoolDataProviderV3.sol":{"ast":{"absolutePath":"contracts/misc/UiPoolDataProviderV3.sol","exportedSymbols":{"AaveProtocolDataProvider":[7403],"DataTypes":[21633],"DefaultReserveInterestRateStrategy":[22191],"IAToken":[3861],"IAaveOracle":[3951],"IEACAggregatorProxy":[34482],"IERC20Detailed":[1464],"IERC20DetailedBytes":[34504],"IPool":[4860],"IPoolAddressesProvider":[5069],"IStableDebtToken":[6109],"IUiPoolDataProviderV3":[34818],"IVariableDebtToken":[6155],"ReserveConfiguration":[11857],"UiPoolDataProviderV3":[33560],"UserConfiguration":[12368],"WadRayMath":[21219]},"id":33561,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":32483,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:155"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","id":32485,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33561,"sourceUnit":1465,"src":"63:110:155","symbolAliases":[{"foreign":{"id":32484,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:14:155","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","id":32487,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33561,"sourceUnit":5070,"src":"174:101:155","symbolAliases":[{"foreign":{"id":32486,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"182:22:155","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","file":"@aave/core-v3/contracts/interfaces/IPool.sol","id":32489,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33561,"sourceUnit":4861,"src":"276:67:155","symbolAliases":[{"foreign":{"id":32488,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"284:5:155","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IAaveOracle.sol","file":"@aave/core-v3/contracts/interfaces/IAaveOracle.sol","id":32491,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33561,"sourceUnit":3952,"src":"344:79:155","symbolAliases":[{"foreign":{"id":32490,"name":"IAaveOracle","nodeType":"Identifier","overloadedDeclarations":[],"src":"352:11:155","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IAToken.sol","file":"@aave/core-v3/contracts/interfaces/IAToken.sol","id":32493,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33561,"sourceUnit":3862,"src":"424:71:155","symbolAliases":[{"foreign":{"id":32492,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"432:7:155","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol","file":"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol","id":32495,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33561,"sourceUnit":6156,"src":"496:93:155","symbolAliases":[{"foreign":{"id":32494,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"504:18:155","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol","file":"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol","id":32497,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33561,"sourceUnit":6110,"src":"590:89:155","symbolAliases":[{"foreign":{"id":32496,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"598:16:155","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol","file":"@aave/core-v3/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol","id":32499,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33561,"sourceUnit":22192,"src":"680:128:155","symbolAliases":[{"foreign":{"id":32498,"name":"DefaultReserveInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"src":"688:34:155","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/misc/AaveProtocolDataProvider.sol","file":"@aave/core-v3/contracts/misc/AaveProtocolDataProvider.sol","id":32501,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33561,"sourceUnit":7404,"src":"809:99:155","symbolAliases":[{"foreign":{"id":32500,"name":"AaveProtocolDataProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"817:24:155","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol","file":"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol","id":32503,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33561,"sourceUnit":21220,"src":"909:90:155","symbolAliases":[{"foreign":{"id":32502,"name":"WadRayMath","nodeType":"Identifier","overloadedDeclarations":[],"src":"917:10:155","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol","id":32505,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33561,"sourceUnit":11858,"src":"1000:119:155","symbolAliases":[{"foreign":{"id":32504,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"1008:20:155","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol","id":32507,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33561,"sourceUnit":12369,"src":"1120:113:155","symbolAliases":[{"foreign":{"id":32506,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"1128:17:155","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","id":32509,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33561,"sourceUnit":21634,"src":"1234:89:155","symbolAliases":[{"foreign":{"id":32508,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"1242:9:155","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/misc/interfaces/IEACAggregatorProxy.sol","file":"./interfaces/IEACAggregatorProxy.sol","id":32511,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33561,"sourceUnit":34483,"src":"1324:73:155","symbolAliases":[{"foreign":{"id":32510,"name":"IEACAggregatorProxy","nodeType":"Identifier","overloadedDeclarations":[],"src":"1332:19:155","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/misc/interfaces/IERC20DetailedBytes.sol","file":"./interfaces/IERC20DetailedBytes.sol","id":32513,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33561,"sourceUnit":34505,"src":"1398:73:155","symbolAliases":[{"foreign":{"id":32512,"name":"IERC20DetailedBytes","nodeType":"Identifier","overloadedDeclarations":[],"src":"1406:19:155","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/misc/interfaces/IUiPoolDataProviderV3.sol","file":"./interfaces/IUiPoolDataProviderV3.sol","id":32515,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33561,"sourceUnit":34819,"src":"1472:77:155","symbolAliases":[{"foreign":{"id":32514,"name":"IUiPoolDataProviderV3","nodeType":"Identifier","overloadedDeclarations":[],"src":"1480:21:155","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":32516,"name":"IUiPoolDataProviderV3","nodeType":"IdentifierPath","referencedDeclaration":34818,"src":"1584:21:155"},"id":32517,"nodeType":"InheritanceSpecifier","src":"1584:21:155"}],"canonicalName":"UiPoolDataProviderV3","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":33560,"linearizedBaseContracts":[33560,34818],"name":"UiPoolDataProviderV3","nameLocation":"1560:20:155","nodeType":"ContractDefinition","nodes":[{"id":32520,"libraryName":{"id":32518,"name":"WadRayMath","nodeType":"IdentifierPath","referencedDeclaration":21219,"src":"1616:10:155"},"nodeType":"UsingForDirective","src":"1610:29:155","typeName":{"id":32519,"name":"uint256","nodeType":"ElementaryTypeName","src":"1631:7:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":32524,"libraryName":{"id":32521,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":11857,"src":"1648:20:155"},"nodeType":"UsingForDirective","src":"1642:65:155","typeName":{"id":32523,"nodeType":"UserDefinedTypeName","pathNode":{"id":32522,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"1673:33:155"},"referencedDeclaration":21318,"src":"1673:33:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"id":32528,"libraryName":{"id":32525,"name":"UserConfiguration","nodeType":"IdentifierPath","referencedDeclaration":12368,"src":"1716:17:155"},"nodeType":"UsingForDirective","src":"1710:59:155","typeName":{"id":32527,"nodeType":"UserDefinedTypeName","pathNode":{"id":32526,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"1738:30:155"},"referencedDeclaration":21322,"src":"1738:30:155","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},{"constant":false,"functionSelector":"3c1740ed","id":32531,"mutability":"immutable","name":"networkBaseTokenPriceInUsdProxyAggregator","nameLocation":"1810:41:155","nodeType":"VariableDeclaration","scope":33560,"src":"1773:78:155","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"},"typeName":{"id":32530,"nodeType":"UserDefinedTypeName","pathNode":{"id":32529,"name":"IEACAggregatorProxy","nodeType":"IdentifierPath","referencedDeclaration":34482,"src":"1773:19:155"},"referencedDeclaration":34482,"src":"1773:19:155","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"visibility":"public"},{"constant":false,"functionSelector":"d22cf68a","id":32534,"mutability":"immutable","name":"marketReferenceCurrencyPriceInUsdProxyAggregator","nameLocation":"1892:48:155","nodeType":"VariableDeclaration","scope":33560,"src":"1855:85:155","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"},"typeName":{"id":32533,"nodeType":"UserDefinedTypeName","pathNode":{"id":32532,"name":"IEACAggregatorProxy","nodeType":"IdentifierPath","referencedDeclaration":34482,"src":"1855:19:155"},"referencedDeclaration":34482,"src":"1855:19:155","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"visibility":"public"},{"constant":true,"functionSelector":"0496f53a","id":32537,"mutability":"constant","name":"ETH_CURRENCY_UNIT","nameLocation":"1968:17:155","nodeType":"VariableDeclaration","scope":33560,"src":"1944:51:155","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32535,"name":"uint256","nodeType":"ElementaryTypeName","src":"1944:7:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":32536,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1988:7:155","subdenomination":"ether","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1"},"visibility":"public"},{"constant":true,"functionSelector":"825ffd92","id":32540,"mutability":"constant","name":"MKR_ADDRESS","nameLocation":"2023:11:155","nodeType":"VariableDeclaration","scope":33560,"src":"1999:80:155","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32538,"name":"address","nodeType":"ElementaryTypeName","src":"1999:7:155","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307839663846373261413933303463384235393364353535463132654636353839634333413537394132","id":32539,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2037:42:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2"},"visibility":"public"},{"body":{"id":32557,"nodeType":"Block","src":"2243:203:155","statements":[{"expression":{"id":32551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":32549,"name":"networkBaseTokenPriceInUsdProxyAggregator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32531,"src":"2249:41:155","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":32550,"name":"_networkBaseTokenPriceInUsdProxyAggregator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32543,"src":"2293:42:155","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"src":"2249:86:155","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"id":32552,"nodeType":"ExpressionStatement","src":"2249:86:155"},{"expression":{"id":32555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":32553,"name":"marketReferenceCurrencyPriceInUsdProxyAggregator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32534,"src":"2341:48:155","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":32554,"name":"_marketReferenceCurrencyPriceInUsdProxyAggregator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32546,"src":"2392:49:155","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"src":"2341:100:155","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"id":32556,"nodeType":"ExpressionStatement","src":"2341:100:155"}]},"id":32558,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":32547,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32543,"mutability":"mutable","name":"_networkBaseTokenPriceInUsdProxyAggregator","nameLocation":"2121:42:155","nodeType":"VariableDeclaration","scope":32558,"src":"2101:62:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"},"typeName":{"id":32542,"nodeType":"UserDefinedTypeName","pathNode":{"id":32541,"name":"IEACAggregatorProxy","nodeType":"IdentifierPath","referencedDeclaration":34482,"src":"2101:19:155"},"referencedDeclaration":34482,"src":"2101:19:155","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"visibility":"internal"},{"constant":false,"id":32546,"mutability":"mutable","name":"_marketReferenceCurrencyPriceInUsdProxyAggregator","nameLocation":"2189:49:155","nodeType":"VariableDeclaration","scope":32558,"src":"2169:69:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"},"typeName":{"id":32545,"nodeType":"UserDefinedTypeName","pathNode":{"id":32544,"name":"IEACAggregatorProxy","nodeType":"IdentifierPath","referencedDeclaration":34482,"src":"2169:19:155"},"referencedDeclaration":34482,"src":"2169:19:155","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"visibility":"internal"}],"src":"2095:147:155"},"returnParameters":{"id":32548,"nodeType":"ParameterList","parameters":[],"src":"2243:0:155"},"scope":33560,"src":"2084:362:155","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[34790],"body":{"id":32581,"nodeType":"Block","src":"2564:84:155","statements":[{"assignments":[32570],"declarations":[{"constant":false,"id":32570,"mutability":"mutable","name":"pool","nameLocation":"2576:4:155","nodeType":"VariableDeclaration","scope":32581,"src":"2570:10:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":32569,"nodeType":"UserDefinedTypeName","pathNode":{"id":32568,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"2570:5:155"},"referencedDeclaration":4860,"src":"2570:5:155","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"}],"id":32576,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":32572,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32561,"src":"2589:8:155","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":32573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"2589:16:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":32574,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2589:18:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32571,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"2583:5:155","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":32575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2583:25:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"nodeType":"VariableDeclarationStatement","src":"2570:38:155"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":32577,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32570,"src":"2621:4:155","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":32578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReservesList","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"2621:20:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view external returns (address[] memory)"}},"id":32579,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2621:22:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":32567,"id":32580,"nodeType":"Return","src":"2614:29:155"}]},"functionSelector":"586c1442","id":32582,"implemented":true,"kind":"function","modifiers":[],"name":"getReservesList","nameLocation":"2459:15:155","nodeType":"FunctionDefinition","overrides":{"id":32563,"nodeType":"OverrideSpecifier","overrides":[],"src":"2528:8:155"},"parameters":{"id":32562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32561,"mutability":"mutable","name":"provider","nameLocation":"2503:8:155","nodeType":"VariableDeclaration","scope":32582,"src":"2480:31:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":32560,"nodeType":"UserDefinedTypeName","pathNode":{"id":32559,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"2480:22:155"},"referencedDeclaration":5069,"src":"2480:22:155","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"2474:41:155"},"returnParameters":{"id":32567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32566,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32582,"src":"2546:16:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":32564,"name":"address","nodeType":"ElementaryTypeName","src":"2546:7:155","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":32565,"nodeType":"ArrayTypeName","src":"2546:9:155","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2545:18:155"},"scope":33560,"src":"2450:198:155","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[34803],"body":{"id":33292,"nodeType":"Block","src":"2805:7724:155","statements":[{"assignments":[32598],"declarations":[{"constant":false,"id":32598,"mutability":"mutable","name":"oracle","nameLocation":"2823:6:155","nodeType":"VariableDeclaration","scope":33292,"src":"2811:18:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveOracle_$3951","typeString":"contract IAaveOracle"},"typeName":{"id":32597,"nodeType":"UserDefinedTypeName","pathNode":{"id":32596,"name":"IAaveOracle","nodeType":"IdentifierPath","referencedDeclaration":3951,"src":"2811:11:155"},"referencedDeclaration":3951,"src":"2811:11:155","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveOracle_$3951","typeString":"contract IAaveOracle"}},"visibility":"internal"}],"id":32604,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":32600,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32585,"src":"2844:8:155","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":32601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPriceOracle","nodeType":"MemberAccess","referencedDeclaration":5014,"src":"2844:23:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":32602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2844:25:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32599,"name":"IAaveOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3951,"src":"2832:11:155","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAaveOracle_$3951_$","typeString":"type(contract IAaveOracle)"}},"id":32603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2832:38:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAaveOracle_$3951","typeString":"contract IAaveOracle"}},"nodeType":"VariableDeclarationStatement","src":"2811:59:155"},{"assignments":[32607],"declarations":[{"constant":false,"id":32607,"mutability":"mutable","name":"pool","nameLocation":"2882:4:155","nodeType":"VariableDeclaration","scope":33292,"src":"2876:10:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":32606,"nodeType":"UserDefinedTypeName","pathNode":{"id":32605,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"2876:5:155"},"referencedDeclaration":4860,"src":"2876:5:155","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"}],"id":32613,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":32609,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32585,"src":"2895:8:155","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":32610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"2895:16:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":32611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2895:18:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32608,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"2889:5:155","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":32612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2889:25:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"nodeType":"VariableDeclarationStatement","src":"2876:38:155"},{"assignments":[32616],"declarations":[{"constant":false,"id":32616,"mutability":"mutable","name":"poolDataProvider","nameLocation":"2945:16:155","nodeType":"VariableDeclaration","scope":33292,"src":"2920:41:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_AaveProtocolDataProvider_$7403","typeString":"contract AaveProtocolDataProvider"},"typeName":{"id":32615,"nodeType":"UserDefinedTypeName","pathNode":{"id":32614,"name":"AaveProtocolDataProvider","nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"2920:24:155"},"referencedDeclaration":7403,"src":"2920:24:155","typeDescriptions":{"typeIdentifier":"t_contract$_AaveProtocolDataProvider_$7403","typeString":"contract AaveProtocolDataProvider"}},"visibility":"internal"}],"id":32622,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":32618,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32585,"src":"2996:8:155","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":32619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPoolDataProvider","nodeType":"MemberAccess","referencedDeclaration":5062,"src":"2996:28:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":32620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2996:30:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32617,"name":"AaveProtocolDataProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7403,"src":"2964:24:155","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AaveProtocolDataProvider_$7403_$","typeString":"type(contract AaveProtocolDataProvider)"}},"id":32621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2964:68:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_AaveProtocolDataProvider_$7403","typeString":"contract AaveProtocolDataProvider"}},"nodeType":"VariableDeclarationStatement","src":"2920:112:155"},{"assignments":[32627],"declarations":[{"constant":false,"id":32627,"mutability":"mutable","name":"reserves","nameLocation":"3056:8:155","nodeType":"VariableDeclaration","scope":33292,"src":"3039:25:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":32625,"name":"address","nodeType":"ElementaryTypeName","src":"3039:7:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":32626,"nodeType":"ArrayTypeName","src":"3039:9:155","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":32631,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":32628,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32607,"src":"3067:4:155","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":32629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReservesList","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"3067:20:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view external returns (address[] memory)"}},"id":32630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3067:22:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"3039:50:155"},{"assignments":[32636],"declarations":[{"constant":false,"id":32636,"mutability":"mutable","name":"reservesData","nameLocation":"3126:12:155","nodeType":"VariableDeclaration","scope":33292,"src":"3095:43:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveData_$34757_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData[]"},"typeName":{"baseType":{"id":32634,"nodeType":"UserDefinedTypeName","pathNode":{"id":32633,"name":"AggregatedReserveData","nodeType":"IdentifierPath","referencedDeclaration":34757,"src":"3095:21:155"},"referencedDeclaration":34757,"src":"3095:21:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_storage_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData"}},"id":32635,"nodeType":"ArrayTypeName","src":"3095:23:155","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveData_$34757_storage_$dyn_storage_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData[]"}},"visibility":"internal"}],"id":32644,"initialValue":{"arguments":[{"expression":{"id":32641,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32627,"src":"3169:8:155","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":32642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3169:15:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":32640,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"3141:27:155","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_AggregatedReserveData_$34757_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct IUiPoolDataProviderV3.AggregatedReserveData memory[] memory)"},"typeName":{"baseType":{"id":32638,"nodeType":"UserDefinedTypeName","pathNode":{"id":32637,"name":"AggregatedReserveData","nodeType":"IdentifierPath","referencedDeclaration":34757,"src":"3145:21:155"},"referencedDeclaration":34757,"src":"3145:21:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_storage_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData"}},"id":32639,"nodeType":"ArrayTypeName","src":"3145:23:155","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveData_$34757_storage_$dyn_storage_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData[]"}}},"id":32643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3141:44:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveData_$34757_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"3095:90:155"},{"body":{"id":33223,"nodeType":"Block","src":"3238:6469:155","statements":[{"assignments":[32658],"declarations":[{"constant":false,"id":32658,"mutability":"mutable","name":"reserveData","nameLocation":"3275:11:155","nodeType":"VariableDeclaration","scope":33223,"src":"3246:40:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData"},"typeName":{"id":32657,"nodeType":"UserDefinedTypeName","pathNode":{"id":32656,"name":"AggregatedReserveData","nodeType":"IdentifierPath","referencedDeclaration":34757,"src":"3246:21:155"},"referencedDeclaration":34757,"src":"3246:21:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_storage_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData"}},"visibility":"internal"}],"id":32662,"initialValue":{"baseExpression":{"id":32659,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32636,"src":"3289:12:155","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveData_$34757_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory[] memory"}},"id":32661,"indexExpression":{"id":32660,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32646,"src":"3302:1:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3289:15:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"3246:58:155"},{"expression":{"id":32669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32663,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"3312:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32665,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":34650,"src":"3312:27:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":32666,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32627,"src":"3342:8:155","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":32668,"indexExpression":{"id":32667,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32646,"src":"3351:1:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3342:11:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3312:41:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":32670,"nodeType":"ExpressionStatement","src":"3312:41:155"},{"assignments":[32675],"declarations":[{"constant":false,"id":32675,"mutability":"mutable","name":"baseData","nameLocation":"3422:8:155","nodeType":"VariableDeclaration","scope":33223,"src":"3393:37:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":32674,"nodeType":"UserDefinedTypeName","pathNode":{"id":32673,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"3393:21:155"},"referencedDeclaration":21315,"src":"3393:21:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":32681,"initialValue":{"arguments":[{"expression":{"id":32678,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"3453:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32679,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":34650,"src":"3453:27:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":32676,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32607,"src":"3433:4:155","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":32677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4710,"src":"3433:19:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$21315_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":32680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3433:48:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"3393:88:155"},{"expression":{"id":32687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32682,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"3535:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32684,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"liquidityIndex","nodeType":"MemberAccess","referencedDeclaration":34676,"src":"3535:26:155","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":32685,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32675,"src":"3564:8:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":32686,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidityIndex","nodeType":"MemberAccess","referencedDeclaration":21288,"src":"3564:23:155","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"3535:52:155","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":32688,"nodeType":"ExpressionStatement","src":"3535:52:155"},{"expression":{"id":32694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32689,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"3643:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32691,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"variableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":34678,"src":"3643:31:155","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":32692,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32675,"src":"3677:8:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":32693,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableBorrowIndex","nodeType":"MemberAccess","referencedDeclaration":21292,"src":"3677:28:155","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"3643:62:155","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":32695,"nodeType":"ExpressionStatement","src":"3643:62:155"},{"expression":{"id":32701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32696,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"3763:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32698,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"liquidityRate","nodeType":"MemberAccess","referencedDeclaration":34680,"src":"3763:25:155","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":32699,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32675,"src":"3791:8:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":32700,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentLiquidityRate","nodeType":"MemberAccess","referencedDeclaration":21290,"src":"3791:29:155","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"3763:57:155","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":32702,"nodeType":"ExpressionStatement","src":"3763:57:155"},{"expression":{"id":32708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32703,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"3887:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32705,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"variableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":34682,"src":"3887:30:155","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":32706,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32675,"src":"3920:8:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":32707,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21294,"src":"3920:34:155","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"3887:67:155","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":32709,"nodeType":"ExpressionStatement","src":"3887:67:155"},{"expression":{"id":32715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32710,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"4019:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32712,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"stableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":34684,"src":"4019:28:155","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":32713,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32675,"src":"4050:8:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":32714,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"currentStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21296,"src":"4050:32:155","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"4019:63:155","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":32716,"nodeType":"ExpressionStatement","src":"4019:63:155"},{"expression":{"id":32722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32717,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"4090:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32719,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"lastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":34686,"src":"4090:31:155","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":32720,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32675,"src":"4124:8:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":32721,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"lastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":21298,"src":"4124:28:155","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"4090:62:155","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"id":32723,"nodeType":"ExpressionStatement","src":"4090:62:155"},{"expression":{"id":32729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32724,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"4160:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32726,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34688,"src":"4160:25:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":32727,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32675,"src":"4188:8:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":32728,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"4188:22:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4160:50:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":32730,"nodeType":"ExpressionStatement","src":"4160:50:155"},{"expression":{"id":32736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32731,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"4218:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32733,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34690,"src":"4218:34:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":32734,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32675,"src":"4255:8:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":32735,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"4255:31:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4218:68:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":32737,"nodeType":"ExpressionStatement","src":"4218:68:155"},{"expression":{"id":32743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32738,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"4294:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32740,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34692,"src":"4294:36:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":32741,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32675,"src":"4333:8:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":32742,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21306,"src":"4333:33:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4294:72:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":32744,"nodeType":"ExpressionStatement","src":"4294:72:155"},{"expression":{"id":32750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32745,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"4420:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32747,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":34694,"src":"4420:39:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":32748,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32675,"src":"4462:8:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":32749,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":21308,"src":"4462:36:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4420:78:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":32751,"nodeType":"ExpressionStatement","src":"4420:78:155"},{"expression":{"id":32760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32752,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"4506:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32754,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"priceInMarketReferenceCurrency","nodeType":"MemberAccess","referencedDeclaration":34706,"src":"4506:42:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":32757,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"4581:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32758,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":34650,"src":"4581:27:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":32755,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32598,"src":"4551:6:155","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveOracle_$3951","typeString":"contract IAaveOracle"}},"id":32756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getAssetPrice","nodeType":"MemberAccess","referencedDeclaration":5834,"src":"4551:20:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":32759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4551:65:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4506:110:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32761,"nodeType":"ExpressionStatement","src":"4506:110:155"},{"expression":{"id":32770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32762,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"4624:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32764,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"priceOracle","nodeType":"MemberAccess","referencedDeclaration":34708,"src":"4624:23:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":32767,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"4674:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32768,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":34650,"src":"4674:27:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":32765,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32598,"src":"4650:6:155","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveOracle_$3951","typeString":"contract IAaveOracle"}},"id":32766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getSourceOfAsset","nodeType":"MemberAccess","referencedDeclaration":3944,"src":"4650:23:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_address_$","typeString":"function (address) view external returns (address)"}},"id":32769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4650:52:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4624:78:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":32771,"nodeType":"ExpressionStatement","src":"4624:78:155"},{"expression":{"id":32783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32772,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"4710:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32774,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"availableLiquidity","nodeType":"MemberAccess","referencedDeclaration":34696,"src":"4710:30:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":32780,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"4806:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32781,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34688,"src":"4806:25:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":32776,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"4758:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32777,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":34650,"src":"4758:27:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32775,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"4743:14:155","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":32778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4743:43:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":32779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"4743:53:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":32782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4743:96:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4710:129:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32784,"nodeType":"ExpressionStatement","src":"4710:129:155"},{"expression":{"id":32799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":32785,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"4857:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32787,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalPrincipalStableDebt","nodeType":"MemberAccess","referencedDeclaration":34698,"src":"4857:36:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null,{"expression":{"id":32788,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"4913:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32789,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"averageStableRate","nodeType":"MemberAccess","referencedDeclaration":34700,"src":"4913:29:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":32790,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"4952:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32791,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"stableDebtLastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":34702,"src":"4952:41:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":32792,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"4847:154:155","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$__$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32794,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"5021:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32795,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34690,"src":"5021:34:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32793,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6109,"src":"5004:16:155","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6109_$","typeString":"type(contract IStableDebtToken)"}},"id":32796,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5004:52:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6109","typeString":"contract IStableDebtToken"}},"id":32797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getSupplyData","nodeType":"MemberAccess","referencedDeclaration":6080,"src":"5004:66:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint40_$","typeString":"function () view external returns (uint256,uint256,uint256,uint40)"}},"id":32798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5004:68:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint40_$","typeString":"tuple(uint256,uint256,uint256,uint40)"}},"src":"4847:225:155","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32800,"nodeType":"ExpressionStatement","src":"4847:225:155"},{"expression":{"id":32810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32801,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"5080:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32803,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalScaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":34704,"src":"5080:35:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32805,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"5137:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32806,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":34692,"src":"5137:36:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32804,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6155,"src":"5118:18:155","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVariableDebtToken_$6155_$","typeString":"type(contract IVariableDebtToken)"}},"id":32807,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5118:56:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVariableDebtToken_$6155","typeString":"contract IVariableDebtToken"}},"id":32808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"scaledTotalSupply","nodeType":"MemberAccess","referencedDeclaration":5966,"src":"5118:83:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":32809,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5118:85:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5080:123:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32811,"nodeType":"ExpressionStatement","src":"5080:123:155"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":32821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":32814,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"5338:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32815,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":34650,"src":"5338:27:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32813,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5330:7:155","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":32812,"name":"address","nodeType":"ElementaryTypeName","src":"5330:7:155","typeDescriptions":{}}},"id":32816,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5330:36:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":32819,"name":"MKR_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32540,"src":"5378:11:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32818,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5370:7:155","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":32817,"name":"address","nodeType":"ElementaryTypeName","src":"5370:7:155","typeDescriptions":{}}},"id":32820,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5370:20:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5330:60:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":32879,"nodeType":"Block","src":"5675:171:155","statements":[{"expression":{"id":32866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32857,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"5685:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32859,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":34654,"src":"5685:18:155","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32861,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"5721:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32862,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":34650,"src":"5721:27:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32860,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"5706:14:155","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":32863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5706:43:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":32864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":1458,"src":"5706:50:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view external returns (string memory)"}},"id":32865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5706:52:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"5685:73:155","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"id":32867,"nodeType":"ExpressionStatement","src":"5685:73:155"},{"expression":{"id":32877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32868,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"5768:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32870,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"name","nodeType":"MemberAccess","referencedDeclaration":34652,"src":"5768:16:155","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32872,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"5802:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32873,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":34650,"src":"5802:27:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32871,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"5787:14:155","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":32874,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5787:43:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":32875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"name","nodeType":"MemberAccess","referencedDeclaration":1453,"src":"5787:48:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view external returns (string memory)"}},"id":32876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5787:50:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"5768:69:155","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"id":32878,"nodeType":"ExpressionStatement","src":"5768:69:155"}]},"id":32880,"nodeType":"IfStatement","src":"5326:520:155","trueBody":{"id":32856,"nodeType":"Block","src":"5392:277:155","statements":[{"assignments":[32823],"declarations":[{"constant":false,"id":32823,"mutability":"mutable","name":"symbol","nameLocation":"5410:6:155","nodeType":"VariableDeclaration","scope":32856,"src":"5402:14:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":32822,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5402:7:155","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":32830,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32825,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"5439:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32826,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":34650,"src":"5439:27:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32824,"name":"IERC20DetailedBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34504,"src":"5419:19:155","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20DetailedBytes_$34504_$","typeString":"type(contract IERC20DetailedBytes)"}},"id":32827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5419:48:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20DetailedBytes_$34504","typeString":"contract IERC20DetailedBytes"}},"id":32828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":34498,"src":"5419:55:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":32829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5419:57:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5402:74:155"},{"assignments":[32832],"declarations":[{"constant":false,"id":32832,"mutability":"mutable","name":"name","nameLocation":"5494:4:155","nodeType":"VariableDeclaration","scope":32856,"src":"5486:12:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":32831,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5486:7:155","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":32839,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32834,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"5521:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32835,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":34650,"src":"5521:27:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32833,"name":"IERC20DetailedBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34504,"src":"5501:19:155","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20DetailedBytes_$34504_$","typeString":"type(contract IERC20DetailedBytes)"}},"id":32836,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5501:48:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20DetailedBytes_$34504","typeString":"contract IERC20DetailedBytes"}},"id":32837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"name","nodeType":"MemberAccess","referencedDeclaration":34493,"src":"5501:53:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":32838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5501:55:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5486:70:155"},{"expression":{"id":32846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32840,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"5566:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32842,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":34654,"src":"5566:18:155","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":32844,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32823,"src":"5603:6:155","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":32843,"name":"bytes32ToString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33559,"src":"5587:15:155","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_string_memory_ptr_$","typeString":"function (bytes32) pure returns (string memory)"}},"id":32845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5587:23:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"5566:44:155","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"id":32847,"nodeType":"ExpressionStatement","src":"5566:44:155"},{"expression":{"id":32854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32848,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"5620:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32850,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"name","nodeType":"MemberAccess","referencedDeclaration":34652,"src":"5620:16:155","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":32852,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32832,"src":"5655:4:155","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":32851,"name":"bytes32ToString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33559,"src":"5639:15:155","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_string_memory_ptr_$","typeString":"function (bytes32) pure returns (string memory)"}},"id":32853,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5639:21:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"5620:40:155","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"id":32855,"nodeType":"ExpressionStatement","src":"5620:40:155"}]}},{"assignments":[32885],"declarations":[{"constant":false,"id":32885,"mutability":"mutable","name":"reserveConfigurationMap","nameLocation":"5936:23:155","nodeType":"VariableDeclaration","scope":33223,"src":"5895:64:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":32884,"nodeType":"UserDefinedTypeName","pathNode":{"id":32883,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"5895:33:155"},"referencedDeclaration":21318,"src":"5895:33:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":32888,"initialValue":{"expression":{"id":32886,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32675,"src":"5962:8:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":32887,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"configuration","nodeType":"MemberAccess","referencedDeclaration":21286,"src":"5962:22:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"5895:89:155"},{"assignments":[32890],"declarations":[{"constant":false,"id":32890,"mutability":"mutable","name":"eModeCategoryId","nameLocation":"6000:15:155","nodeType":"VariableDeclaration","scope":33223,"src":"5992:23:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32889,"name":"uint256","nodeType":"ElementaryTypeName","src":"5992:7:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32891,"nodeType":"VariableDeclarationStatement","src":"5992:23:155"},{"expression":{"id":32908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":32892,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"6033:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32894,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"baseLTVasCollateral","nodeType":"MemberAccess","referencedDeclaration":34658,"src":"6033:31:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":32895,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"6074:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32896,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"reserveLiquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":34660,"src":"6074:39:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":32897,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"6123:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32898,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"reserveLiquidationBonus","nodeType":"MemberAccess","referencedDeclaration":34662,"src":"6123:35:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":32899,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"6168:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32900,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":34656,"src":"6168:20:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":32901,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"6198:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32902,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"reserveFactor","nodeType":"MemberAccess","referencedDeclaration":34664,"src":"6198:25:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":32903,"name":"eModeCategoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32890,"src":"6233:15:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":32904,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"6023:233:155","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":32905,"name":"reserveConfigurationMap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32885,"src":"6259:23:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":32906,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getParams","nodeType":"MemberAccess","referencedDeclaration":11823,"src":"6259:33:155","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256,uint256,uint256,uint256,uint256,uint256)"}},"id":32907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6259:35:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256,uint256,uint256)"}},"src":"6023:271:155","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32909,"nodeType":"ExpressionStatement","src":"6023:271:155"},{"expression":{"id":32917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32910,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"6302:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32912,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"usageAsCollateralEnabled","nodeType":"MemberAccess","referencedDeclaration":34666,"src":"6302:36:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":32913,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"6341:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32914,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"baseLTVasCollateral","nodeType":"MemberAccess","referencedDeclaration":34658,"src":"6341:31:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":32915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6376:1:155","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6341:36:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6302:75:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32918,"nodeType":"ExpressionStatement","src":"6302:75:155"},{"expression":{"id":32934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":32919,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"6396:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32921,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"isActive","nodeType":"MemberAccess","referencedDeclaration":34672,"src":"6396:20:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":32922,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"6426:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32923,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"isFrozen","nodeType":"MemberAccess","referencedDeclaration":34674,"src":"6426:20:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":32924,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"6456:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32925,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"borrowingEnabled","nodeType":"MemberAccess","referencedDeclaration":34668,"src":"6456:28:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":32926,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"6494:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32927,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"stableBorrowRateEnabled","nodeType":"MemberAccess","referencedDeclaration":34670,"src":"6494:35:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":32928,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"6539:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32929,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"isPaused","nodeType":"MemberAccess","referencedDeclaration":34724,"src":"6539:20:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":32930,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"6386:181:155","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":32931,"name":"reserveConfigurationMap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32885,"src":"6570:23:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":32932,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":11757,"src":"6570:32:155","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":32933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6570:34:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"src":"6386:218:155","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32935,"nodeType":"ExpressionStatement","src":"6386:218:155"},{"clauses":[{"block":{"id":32951,"nodeType":"Block","src":"6788:55:155","statements":[{"expression":{"id":32949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32945,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"6798:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32947,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"variableRateSlope1","nodeType":"MemberAccess","referencedDeclaration":34710,"src":"6798:30:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":32948,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32943,"src":"6831:3:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6798:36:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32950,"nodeType":"ExpressionStatement","src":"6798:36:155"}]},"errorName":"","id":32952,"nodeType":"TryCatchClause","parameters":{"id":32944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32943,"mutability":"mutable","name":"res","nameLocation":"6783:3:155","nodeType":"VariableDeclaration","scope":32952,"src":"6775:11:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32942,"name":"uint256","nodeType":"ElementaryTypeName","src":"6775:7:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6774:13:155"},"src":"6766:77:155"},{"block":{"id":32953,"nodeType":"Block","src":"6850:2:155","statements":[]},"errorName":"","id":32954,"nodeType":"TryCatchClause","src":"6844:8:155"}],"externalCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32937,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"6684:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32938,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":34694,"src":"6684:39:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32936,"name":"DefaultReserveInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22191,"src":"6649:34:155","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DefaultReserveInterestRateStrategy_$22191_$","typeString":"type(contract DefaultReserveInterestRateStrategy)"}},"id":32939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6649:75:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_DefaultReserveInterestRateStrategy_$22191","typeString":"contract DefaultReserveInterestRateStrategy"}},"id":32940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getVariableRateSlope1","nodeType":"MemberAccess","referencedDeclaration":21796,"src":"6649:108:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":32941,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6649:110:155","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32955,"nodeType":"TryStatement","src":"6637:215:155"},{"clauses":[{"block":{"id":32971,"nodeType":"Block","src":"7010:55:155","statements":[{"expression":{"id":32969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32965,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"7020:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32967,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"variableRateSlope2","nodeType":"MemberAccess","referencedDeclaration":34712,"src":"7020:30:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":32968,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32963,"src":"7053:3:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7020:36:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32970,"nodeType":"ExpressionStatement","src":"7020:36:155"}]},"errorName":"","id":32972,"nodeType":"TryCatchClause","parameters":{"id":32964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32963,"mutability":"mutable","name":"res","nameLocation":"7005:3:155","nodeType":"VariableDeclaration","scope":32972,"src":"6997:11:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32962,"name":"uint256","nodeType":"ElementaryTypeName","src":"6997:7:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6996:13:155"},"src":"6988:77:155"},{"block":{"id":32973,"nodeType":"Block","src":"7072:2:155","statements":[]},"errorName":"","id":32974,"nodeType":"TryCatchClause","src":"7066:8:155"}],"externalCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32957,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"6906:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32958,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":34694,"src":"6906:39:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32956,"name":"DefaultReserveInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22191,"src":"6871:34:155","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DefaultReserveInterestRateStrategy_$22191_$","typeString":"type(contract DefaultReserveInterestRateStrategy)"}},"id":32959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6871:75:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_DefaultReserveInterestRateStrategy_$22191","typeString":"contract DefaultReserveInterestRateStrategy"}},"id":32960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getVariableRateSlope2","nodeType":"MemberAccess","referencedDeclaration":21805,"src":"6871:108:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":32961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6871:110:155","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32975,"nodeType":"TryStatement","src":"6859:215:155"},{"clauses":[{"block":{"id":32991,"nodeType":"Block","src":"7230:53:155","statements":[{"expression":{"id":32989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32985,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"7240:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32987,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"stableRateSlope1","nodeType":"MemberAccess","referencedDeclaration":34714,"src":"7240:28:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":32988,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32983,"src":"7271:3:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7240:34:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32990,"nodeType":"ExpressionStatement","src":"7240:34:155"}]},"errorName":"","id":32992,"nodeType":"TryCatchClause","parameters":{"id":32984,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32983,"mutability":"mutable","name":"res","nameLocation":"7225:3:155","nodeType":"VariableDeclaration","scope":32992,"src":"7217:11:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32982,"name":"uint256","nodeType":"ElementaryTypeName","src":"7217:7:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7216:13:155"},"src":"7208:75:155"},{"block":{"id":32993,"nodeType":"Block","src":"7290:2:155","statements":[]},"errorName":"","id":32994,"nodeType":"TryCatchClause","src":"7284:8:155"}],"externalCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32977,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"7128:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32978,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":34694,"src":"7128:39:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32976,"name":"DefaultReserveInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22191,"src":"7093:34:155","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DefaultReserveInterestRateStrategy_$22191_$","typeString":"type(contract DefaultReserveInterestRateStrategy)"}},"id":32979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7093:75:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_DefaultReserveInterestRateStrategy_$22191","typeString":"contract DefaultReserveInterestRateStrategy"}},"id":32980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getStableRateSlope1","nodeType":"MemberAccess","referencedDeclaration":21814,"src":"7093:106:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":32981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7093:108:155","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32995,"nodeType":"TryStatement","src":"7081:211:155"},{"clauses":[{"block":{"id":33011,"nodeType":"Block","src":"7448:53:155","statements":[{"expression":{"id":33009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33005,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"7458:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33007,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"stableRateSlope2","nodeType":"MemberAccess","referencedDeclaration":34716,"src":"7458:28:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33008,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33003,"src":"7489:3:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7458:34:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33010,"nodeType":"ExpressionStatement","src":"7458:34:155"}]},"errorName":"","id":33012,"nodeType":"TryCatchClause","parameters":{"id":33004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33003,"mutability":"mutable","name":"res","nameLocation":"7443:3:155","nodeType":"VariableDeclaration","scope":33012,"src":"7435:11:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33002,"name":"uint256","nodeType":"ElementaryTypeName","src":"7435:7:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7434:13:155"},"src":"7426:75:155"},{"block":{"id":33013,"nodeType":"Block","src":"7508:2:155","statements":[]},"errorName":"","id":33014,"nodeType":"TryCatchClause","src":"7502:8:155"}],"externalCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32997,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"7346:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":32998,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":34694,"src":"7346:39:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32996,"name":"DefaultReserveInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22191,"src":"7311:34:155","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DefaultReserveInterestRateStrategy_$22191_$","typeString":"type(contract DefaultReserveInterestRateStrategy)"}},"id":32999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7311:75:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_DefaultReserveInterestRateStrategy_$22191","typeString":"contract DefaultReserveInterestRateStrategy"}},"id":33000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getStableRateSlope2","nodeType":"MemberAccess","referencedDeclaration":21823,"src":"7311:106:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":33001,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7311:108:155","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33015,"nodeType":"TryStatement","src":"7299:211:155"},{"clauses":[{"block":{"id":33031,"nodeType":"Block","src":"7670:57:155","statements":[{"expression":{"id":33029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33025,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"7680:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33027,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"baseStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":34718,"src":"7680:32:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33028,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33023,"src":"7715:3:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7680:38:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33030,"nodeType":"ExpressionStatement","src":"7680:38:155"}]},"errorName":"","id":33032,"nodeType":"TryCatchClause","parameters":{"id":33024,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33023,"mutability":"mutable","name":"res","nameLocation":"7665:3:155","nodeType":"VariableDeclaration","scope":33032,"src":"7657:11:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33022,"name":"uint256","nodeType":"ElementaryTypeName","src":"7657:7:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7656:13:155"},"src":"7648:79:155"},{"block":{"id":33033,"nodeType":"Block","src":"7734:2:155","statements":[]},"errorName":"","id":33034,"nodeType":"TryCatchClause","src":"7728:8:155"}],"externalCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":33017,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"7564:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33018,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":34694,"src":"7564:39:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":33016,"name":"DefaultReserveInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22191,"src":"7529:34:155","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DefaultReserveInterestRateStrategy_$22191_$","typeString":"type(contract DefaultReserveInterestRateStrategy)"}},"id":33019,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7529:75:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_DefaultReserveInterestRateStrategy_$22191","typeString":"contract DefaultReserveInterestRateStrategy"}},"id":33020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getBaseStableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21843,"src":"7529:110:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":33021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7529:112:155","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33035,"nodeType":"TryStatement","src":"7517:219:155"},{"clauses":[{"block":{"id":33051,"nodeType":"Block","src":"7898:59:155","statements":[{"expression":{"id":33049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33045,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"7908:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33047,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"baseVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":34720,"src":"7908:34:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33048,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33043,"src":"7945:3:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7908:40:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33050,"nodeType":"ExpressionStatement","src":"7908:40:155"}]},"errorName":"","id":33052,"nodeType":"TryCatchClause","parameters":{"id":33044,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33043,"mutability":"mutable","name":"res","nameLocation":"7893:3:155","nodeType":"VariableDeclaration","scope":33052,"src":"7885:11:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33042,"name":"uint256","nodeType":"ElementaryTypeName","src":"7885:7:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7884:13:155"},"src":"7876:81:155"},{"block":{"id":33053,"nodeType":"Block","src":"7964:2:155","statements":[]},"errorName":"","id":33054,"nodeType":"TryCatchClause","src":"7958:8:155"}],"externalCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":33037,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"7790:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33038,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":34694,"src":"7790:39:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":33036,"name":"DefaultReserveInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22191,"src":"7755:34:155","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DefaultReserveInterestRateStrategy_$22191_$","typeString":"type(contract DefaultReserveInterestRateStrategy)"}},"id":33039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7755:75:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_DefaultReserveInterestRateStrategy_$22191","typeString":"contract DefaultReserveInterestRateStrategy"}},"id":33040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getBaseVariableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":21853,"src":"7755:112:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":33041,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7755:114:155","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33055,"nodeType":"TryStatement","src":"7743:223:155"},{"clauses":[{"block":{"id":33071,"nodeType":"Block","src":"8122:54:155","statements":[{"expression":{"id":33069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33065,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"8132:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33067,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"optimalUsageRatio","nodeType":"MemberAccess","referencedDeclaration":34722,"src":"8132:29:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33068,"name":"res","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33063,"src":"8164:3:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8132:35:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33070,"nodeType":"ExpressionStatement","src":"8132:35:155"}]},"errorName":"","id":33072,"nodeType":"TryCatchClause","parameters":{"id":33064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33063,"mutability":"mutable","name":"res","nameLocation":"8117:3:155","nodeType":"VariableDeclaration","scope":33072,"src":"8109:11:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33062,"name":"uint256","nodeType":"ElementaryTypeName","src":"8109:7:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8108:13:155"},"src":"8100:76:155"},{"block":{"id":33073,"nodeType":"Block","src":"8183:2:155","statements":[]},"errorName":"","id":33074,"nodeType":"TryCatchClause","src":"8177:8:155"}],"externalCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":33057,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"8020:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33058,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"interestRateStrategyAddress","nodeType":"MemberAccess","referencedDeclaration":34694,"src":"8020:39:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":33056,"name":"DefaultReserveInterestRateStrategy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22191,"src":"7985:34:155","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DefaultReserveInterestRateStrategy_$22191_$","typeString":"type(contract DefaultReserveInterestRateStrategy)"}},"id":33059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7985:75:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_DefaultReserveInterestRateStrategy_$22191","typeString":"contract DefaultReserveInterestRateStrategy"}},"id":33060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"OPTIMAL_USAGE_RATIO","nodeType":"MemberAccess","referencedDeclaration":21663,"src":"7985:106:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":33061,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7985:108:155","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33075,"nodeType":"TryStatement","src":"7973:212:155"},{"expression":{"id":33083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33076,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"8210:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33078,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"eModeCategoryId","nodeType":"MemberAccess","referencedDeclaration":34740,"src":"8210:27:155","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":33081,"name":"eModeCategoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32890,"src":"8246:15:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":33080,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8240:5:155","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":33079,"name":"uint8","nodeType":"ElementaryTypeName","src":"8240:5:155","typeDescriptions":{}}},"id":33082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8240:22:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"8210:52:155","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":33084,"nodeType":"ExpressionStatement","src":"8210:52:155"},{"expression":{"id":33091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33085,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"8270:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33087,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"debtCeiling","nodeType":"MemberAccess","referencedDeclaration":34736,"src":"8270:23:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":33088,"name":"reserveConfigurationMap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32885,"src":"8296:23:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":33089,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getDebtCeiling","nodeType":"MemberAccess","referencedDeclaration":11491,"src":"8296:38:155","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256)"}},"id":33090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8296:40:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8270:66:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33092,"nodeType":"ExpressionStatement","src":"8270:66:155"},{"expression":{"id":33099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33093,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"8344:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33095,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"debtCeilingDecimals","nodeType":"MemberAccess","referencedDeclaration":34738,"src":"8344:31:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":33096,"name":"poolDataProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32616,"src":"8378:16:155","typeDescriptions":{"typeIdentifier":"t_contract$_AaveProtocolDataProvider_$7403","typeString":"contract AaveProtocolDataProvider"}},"id":33097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getDebtCeilingDecimals","nodeType":"MemberAccess","referencedDeclaration":7014,"src":"8378:39:155","typeDescriptions":{"typeIdentifier":"t_function_external_pure$__$returns$_t_uint256_$","typeString":"function () pure external returns (uint256)"}},"id":33098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8378:41:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8344:75:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33100,"nodeType":"ExpressionStatement","src":"8344:75:155"},{"expression":{"id":33110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":33101,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"8428:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33103,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"borrowCap","nodeType":"MemberAccess","referencedDeclaration":34742,"src":"8428:21:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":33104,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"8451:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33105,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"supplyCap","nodeType":"MemberAccess","referencedDeclaration":34744,"src":"8451:21:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":33106,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"8427:46:155","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":33107,"name":"reserveConfigurationMap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32885,"src":"8476:23:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":33108,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getCaps","nodeType":"MemberAccess","referencedDeclaration":11856,"src":"8476:31:155","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_uint256_$_t_uint256_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (uint256,uint256)"}},"id":33109,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8476:33:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"8427:82:155","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33111,"nodeType":"ExpressionStatement","src":"8427:82:155"},{"clauses":[{"block":{"id":33126,"nodeType":"Block","src":"8636:66:155","statements":[{"expression":{"id":33124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33120,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"8646:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33122,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"flashLoanEnabled","nodeType":"MemberAccess","referencedDeclaration":34734,"src":"8646:28:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33123,"name":"flashLoanEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33118,"src":"8677:16:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8646:47:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33125,"nodeType":"ExpressionStatement","src":"8646:47:155"}]},"errorName":"","id":33127,"nodeType":"TryCatchClause","parameters":{"id":33119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33118,"mutability":"mutable","name":"flashLoanEnabled","nameLocation":"8611:16:155","nodeType":"VariableDeclaration","scope":33127,"src":"8606:21:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33117,"name":"bool","nodeType":"ElementaryTypeName","src":"8606:4:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8596:39:155"},"src":"8588:114:155"},{"block":{"id":33137,"nodeType":"Block","src":"8724:54:155","statements":[{"expression":{"id":33135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33131,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"8734:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33133,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"flashLoanEnabled","nodeType":"MemberAccess","referencedDeclaration":34734,"src":"8734:28:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":33134,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8765:4:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"8734:35:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33136,"nodeType":"ExpressionStatement","src":"8734:35:155"}]},"errorName":"","id":33138,"nodeType":"TryCatchClause","parameters":{"id":33130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33129,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33138,"src":"8710:12:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":33128,"name":"bytes","nodeType":"ElementaryTypeName","src":"8710:5:155","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8709:14:155"},"src":"8703:75:155"}],"externalCall":{"arguments":[{"expression":{"id":33114,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"8559:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33115,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":34650,"src":"8559:27:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":33112,"name":"poolDataProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32616,"src":"8522:16:155","typeDescriptions":{"typeIdentifier":"t_contract$_AaveProtocolDataProvider_$7403","typeString":"contract AaveProtocolDataProvider"}},"id":33113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getFlashLoanEnabled","nodeType":"MemberAccess","referencedDeclaration":7402,"src":"8522:36:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":33116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8522:65:155","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33139,"nodeType":"TryStatement","src":"8518:260:155"},{"expression":{"id":33146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33140,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"8786:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33142,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"isSiloedBorrowing","nodeType":"MemberAccess","referencedDeclaration":34726,"src":"8786:29:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":33143,"name":"reserveConfigurationMap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32885,"src":"8818:23:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":33144,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getSiloedBorrowing","nodeType":"MemberAccess","referencedDeclaration":11183,"src":"8818:42:155","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":33145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8818:44:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8786:76:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33147,"nodeType":"ExpressionStatement","src":"8786:76:155"},{"expression":{"id":33153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33148,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"8870:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33150,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"unbacked","nodeType":"MemberAccess","referencedDeclaration":34730,"src":"8870:20:155","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":33151,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32675,"src":"8893:8:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":33152,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"unbacked","nodeType":"MemberAccess","referencedDeclaration":21312,"src":"8893:17:155","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"8870:40:155","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":33154,"nodeType":"ExpressionStatement","src":"8870:40:155"},{"expression":{"id":33160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33155,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"8918:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33157,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"isolationModeTotalDebt","nodeType":"MemberAccess","referencedDeclaration":34732,"src":"8918:34:155","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":33158,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32675,"src":"8955:8:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":33159,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isolationModeTotalDebt","nodeType":"MemberAccess","referencedDeclaration":21314,"src":"8955:31:155","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"8918:68:155","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":33161,"nodeType":"ExpressionStatement","src":"8918:68:155"},{"expression":{"id":33167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33162,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"8994:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33164,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"accruedToTreasury","nodeType":"MemberAccess","referencedDeclaration":34728,"src":"8994:29:155","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":33165,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32675,"src":"9026:8:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":33166,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"accruedToTreasury","nodeType":"MemberAccess","referencedDeclaration":21310,"src":"9026:26:155","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"8994:58:155","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":33168,"nodeType":"ExpressionStatement","src":"8994:58:155"},{"assignments":[33173],"declarations":[{"constant":false,"id":33173,"mutability":"mutable","name":"categoryData","nameLocation":"9092:12:155","nodeType":"VariableDeclaration","scope":33223,"src":"9061:43:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_memory_ptr","typeString":"struct DataTypes.EModeCategory"},"typeName":{"id":33172,"nodeType":"UserDefinedTypeName","pathNode":{"id":33171,"name":"DataTypes.EModeCategory","nodeType":"IdentifierPath","referencedDeclaration":21333,"src":"9061:23:155"},"referencedDeclaration":21333,"src":"9061:23:155","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_storage_ptr","typeString":"struct DataTypes.EModeCategory"}},"visibility":"internal"}],"id":33179,"initialValue":{"arguments":[{"expression":{"id":33176,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"9142:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33177,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"eModeCategoryId","nodeType":"MemberAccess","referencedDeclaration":34740,"src":"9142:27:155","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":33174,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32607,"src":"9107:4:155","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":33175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getEModeCategoryData","nodeType":"MemberAccess","referencedDeclaration":4780,"src":"9107:25:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint8_$returns$_t_struct$_EModeCategory_$21333_memory_ptr_$","typeString":"function (uint8) view external returns (struct DataTypes.EModeCategory memory)"}},"id":33178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9107:70:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_memory_ptr","typeString":"struct DataTypes.EModeCategory memory"}},"nodeType":"VariableDeclarationStatement","src":"9061:116:155"},{"expression":{"id":33185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33180,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"9185:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33182,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"eModeLtv","nodeType":"MemberAccess","referencedDeclaration":34746,"src":"9185:20:155","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":33183,"name":"categoryData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33173,"src":"9208:12:155","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_memory_ptr","typeString":"struct DataTypes.EModeCategory memory"}},"id":33184,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"ltv","nodeType":"MemberAccess","referencedDeclaration":21324,"src":"9208:16:155","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"9185:39:155","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":33186,"nodeType":"ExpressionStatement","src":"9185:39:155"},{"expression":{"id":33192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33187,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"9232:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33189,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"eModeLiquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":34748,"src":"9232:37:155","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":33190,"name":"categoryData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33173,"src":"9272:12:155","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_memory_ptr","typeString":"struct DataTypes.EModeCategory memory"}},"id":33191,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationThreshold","nodeType":"MemberAccess","referencedDeclaration":21326,"src":"9272:33:155","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"9232:73:155","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":33193,"nodeType":"ExpressionStatement","src":"9232:73:155"},{"expression":{"id":33199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33194,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"9313:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33196,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"eModeLiquidationBonus","nodeType":"MemberAccess","referencedDeclaration":34750,"src":"9313:33:155","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":33197,"name":"categoryData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33173,"src":"9349:12:155","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_memory_ptr","typeString":"struct DataTypes.EModeCategory memory"}},"id":33198,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"liquidationBonus","nodeType":"MemberAccess","referencedDeclaration":21328,"src":"9349:29:155","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"9313:65:155","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"id":33200,"nodeType":"ExpressionStatement","src":"9313:65:155"},{"expression":{"id":33206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33201,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"9499:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33203,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"eModePriceSource","nodeType":"MemberAccess","referencedDeclaration":34752,"src":"9499:28:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":33204,"name":"categoryData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33173,"src":"9530:12:155","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_memory_ptr","typeString":"struct DataTypes.EModeCategory memory"}},"id":33205,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"priceSource","nodeType":"MemberAccess","referencedDeclaration":21330,"src":"9530:24:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9499:55:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":33207,"nodeType":"ExpressionStatement","src":"9499:55:155"},{"expression":{"id":33213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33208,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"9562:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33210,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"eModeLabel","nodeType":"MemberAccess","referencedDeclaration":34754,"src":"9562:22:155","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":33211,"name":"categoryData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33173,"src":"9587:12:155","typeDescriptions":{"typeIdentifier":"t_struct$_EModeCategory_$21333_memory_ptr","typeString":"struct DataTypes.EModeCategory memory"}},"id":33212,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"label","nodeType":"MemberAccess","referencedDeclaration":21332,"src":"9587:18:155","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"9562:43:155","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"id":33214,"nodeType":"ExpressionStatement","src":"9562:43:155"},{"expression":{"id":33221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33215,"name":"reserveData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"9614:11:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory"}},"id":33217,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"borrowableInIsolation","nodeType":"MemberAccess","referencedDeclaration":34756,"src":"9614:33:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":33218,"name":"reserveConfigurationMap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32885,"src":"9650:23:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":33219,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getBorrowableInIsolation","nodeType":"MemberAccess","referencedDeclaration":11133,"src":"9650:48:155","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool)"}},"id":33220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9650:50:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9614:86:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33222,"nodeType":"ExpressionStatement","src":"9614:86:155"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32649,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32646,"src":"3212:1:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":32650,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32627,"src":"3216:8:155","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":32651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3216:15:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3212:19:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33224,"initializationExpression":{"assignments":[32646],"declarations":[{"constant":false,"id":32646,"mutability":"mutable","name":"i","nameLocation":"3205:1:155","nodeType":"VariableDeclaration","scope":33224,"src":"3197:9:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32645,"name":"uint256","nodeType":"ElementaryTypeName","src":"3197:7:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32648,"initialValue":{"hexValue":"30","id":32647,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3209:1:155","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3197:13:155"},"loopExpression":{"expression":{"id":32654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3233:3:155","subExpression":{"id":32653,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32646,"src":"3233:1:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32655,"nodeType":"ExpressionStatement","src":"3233:3:155"},"nodeType":"ForStatement","src":"3192:6515:155"},{"assignments":[33227],"declarations":[{"constant":false,"id":33227,"mutability":"mutable","name":"baseCurrencyInfo","nameLocation":"9737:16:155","nodeType":"VariableDeclaration","scope":33292,"src":"9713:40:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BaseCurrencyInfo_$34781_memory_ptr","typeString":"struct IUiPoolDataProviderV3.BaseCurrencyInfo"},"typeName":{"id":33226,"nodeType":"UserDefinedTypeName","pathNode":{"id":33225,"name":"BaseCurrencyInfo","nodeType":"IdentifierPath","referencedDeclaration":34781,"src":"9713:16:155"},"referencedDeclaration":34781,"src":"9713:16:155","typeDescriptions":{"typeIdentifier":"t_struct$_BaseCurrencyInfo_$34781_storage_ptr","typeString":"struct IUiPoolDataProviderV3.BaseCurrencyInfo"}},"visibility":"internal"}],"id":33228,"nodeType":"VariableDeclarationStatement","src":"9713:40:155"},{"expression":{"id":33235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33229,"name":"baseCurrencyInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33227,"src":"9759:16:155","typeDescriptions":{"typeIdentifier":"t_struct$_BaseCurrencyInfo_$34781_memory_ptr","typeString":"struct IUiPoolDataProviderV3.BaseCurrencyInfo memory"}},"id":33231,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"networkBaseTokenPriceInUsd","nodeType":"MemberAccess","referencedDeclaration":34778,"src":"9759:43:155","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":33232,"name":"networkBaseTokenPriceInUsdProxyAggregator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32531,"src":"9805:41:155","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"id":33233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"latestAnswer","nodeType":"MemberAccess","referencedDeclaration":34443,"src":"9805:61:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_int256_$","typeString":"function () view external returns (int256)"}},"id":33234,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9805:63:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9759:109:155","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":33236,"nodeType":"ExpressionStatement","src":"9759:109:155"},{"expression":{"id":33243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33237,"name":"baseCurrencyInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33227,"src":"9874:16:155","typeDescriptions":{"typeIdentifier":"t_struct$_BaseCurrencyInfo_$34781_memory_ptr","typeString":"struct IUiPoolDataProviderV3.BaseCurrencyInfo memory"}},"id":33239,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"networkBaseTokenPriceDecimals","nodeType":"MemberAccess","referencedDeclaration":34780,"src":"9874:46:155","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":33240,"name":"networkBaseTokenPriceInUsdProxyAggregator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32531,"src":"9923:41:155","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"id":33241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":34438,"src":"9923:57:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":33242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9923:59:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"9874:108:155","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":33244,"nodeType":"ExpressionStatement","src":"9874:108:155"},{"clauses":[{"block":{"id":33266,"nodeType":"Block","src":"10056:163:155","statements":[{"expression":{"id":33255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33251,"name":"baseCurrencyInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33227,"src":"10064:16:155","typeDescriptions":{"typeIdentifier":"t_struct$_BaseCurrencyInfo_$34781_memory_ptr","typeString":"struct IUiPoolDataProviderV3.BaseCurrencyInfo memory"}},"id":33253,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"marketReferenceCurrencyUnit","nodeType":"MemberAccess","referencedDeclaration":34774,"src":"10064:44:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33254,"name":"baseCurrencyUnit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33249,"src":"10111:16:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10064:63:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33256,"nodeType":"ExpressionStatement","src":"10064:63:155"},{"expression":{"id":33264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33257,"name":"baseCurrencyInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33227,"src":"10135:16:155","typeDescriptions":{"typeIdentifier":"t_struct$_BaseCurrencyInfo_$34781_memory_ptr","typeString":"struct IUiPoolDataProviderV3.BaseCurrencyInfo memory"}},"id":33259,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"marketReferenceCurrencyPriceInUsd","nodeType":"MemberAccess","referencedDeclaration":34776,"src":"10135:50:155","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":33262,"name":"baseCurrencyUnit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33249,"src":"10195:16:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":33261,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10188:6:155","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":33260,"name":"int256","nodeType":"ElementaryTypeName","src":"10188:6:155","typeDescriptions":{}}},"id":33263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10188:24:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10135:77:155","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":33265,"nodeType":"ExpressionStatement","src":"10135:77:155"}]},"errorName":"","id":33267,"nodeType":"TryCatchClause","parameters":{"id":33250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33249,"mutability":"mutable","name":"baseCurrencyUnit","nameLocation":"10038:16:155","nodeType":"VariableDeclaration","scope":33267,"src":"10030:24:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33248,"name":"uint256","nodeType":"ElementaryTypeName","src":"10030:7:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10029:26:155"},"src":"10021:198:155"},{"block":{"id":33285,"nodeType":"Block","src":"10258:221:155","statements":[{"expression":{"id":33275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33271,"name":"baseCurrencyInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33227,"src":"10266:16:155","typeDescriptions":{"typeIdentifier":"t_struct$_BaseCurrencyInfo_$34781_memory_ptr","typeString":"struct IUiPoolDataProviderV3.BaseCurrencyInfo memory"}},"id":33273,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"marketReferenceCurrencyUnit","nodeType":"MemberAccess","referencedDeclaration":34774,"src":"10266:44:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33274,"name":"ETH_CURRENCY_UNIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32537,"src":"10313:17:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10266:64:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33276,"nodeType":"ExpressionStatement","src":"10266:64:155"},{"expression":{"id":33283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":33277,"name":"baseCurrencyInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33227,"src":"10338:16:155","typeDescriptions":{"typeIdentifier":"t_struct$_BaseCurrencyInfo_$34781_memory_ptr","typeString":"struct IUiPoolDataProviderV3.BaseCurrencyInfo memory"}},"id":33279,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"marketReferenceCurrencyPriceInUsd","nodeType":"MemberAccess","referencedDeclaration":34776,"src":"10338:59:155","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":33280,"name":"marketReferenceCurrencyPriceInUsdProxyAggregator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32534,"src":"10400:48:155","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"id":33281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"latestAnswer","nodeType":"MemberAccess","referencedDeclaration":34443,"src":"10400:70:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_int256_$","typeString":"function () view external returns (int256)"}},"id":33282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10400:72:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10338:134:155","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":33284,"nodeType":"ExpressionStatement","src":"10338:134:155"}]},"errorName":"","id":33286,"nodeType":"TryCatchClause","parameters":{"id":33270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33269,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33286,"src":"10227:12:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":33268,"name":"bytes","nodeType":"ElementaryTypeName","src":"10227:5:155","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10226:31:155"},"src":"10220:259:155"}],"externalCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":33245,"name":"oracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32598,"src":"9993:6:155","typeDescriptions":{"typeIdentifier":"t_contract$_IAaveOracle_$3951","typeString":"contract IAaveOracle"}},"id":33246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"BASE_CURRENCY_UNIT","nodeType":"MemberAccess","referencedDeclaration":5826,"src":"9993:25:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":33247,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9993:27:155","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33287,"nodeType":"TryStatement","src":"9989:490:155"},{"expression":{"components":[{"id":33288,"name":"reservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32636,"src":"10493:12:155","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveData_$34757_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData memory[] memory"}},{"id":33289,"name":"baseCurrencyInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33227,"src":"10507:16:155","typeDescriptions":{"typeIdentifier":"t_struct$_BaseCurrencyInfo_$34781_memory_ptr","typeString":"struct IUiPoolDataProviderV3.BaseCurrencyInfo memory"}}],"id":33290,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10492:32:155","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_struct$_AggregatedReserveData_$34757_memory_ptr_$dyn_memory_ptr_$_t_struct$_BaseCurrencyInfo_$34781_memory_ptr_$","typeString":"tuple(struct IUiPoolDataProviderV3.AggregatedReserveData memory[] memory,struct IUiPoolDataProviderV3.BaseCurrencyInfo memory)"}},"functionReturnParameters":32595,"id":33291,"nodeType":"Return","src":"10485:39:155"}]},"functionSelector":"ec489c21","id":33293,"implemented":true,"kind":"function","modifiers":[],"name":"getReservesData","nameLocation":"2661:15:155","nodeType":"FunctionDefinition","overrides":{"id":32587,"nodeType":"OverrideSpecifier","overrides":[],"src":"2730:8:155"},"parameters":{"id":32586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32585,"mutability":"mutable","name":"provider","nameLocation":"2705:8:155","nodeType":"VariableDeclaration","scope":33293,"src":"2682:31:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":32584,"nodeType":"UserDefinedTypeName","pathNode":{"id":32583,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"2682:22:155"},"referencedDeclaration":5069,"src":"2682:22:155","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"2676:41:155"},"returnParameters":{"id":32595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32591,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33293,"src":"2748:30:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveData_$34757_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData[]"},"typeName":{"baseType":{"id":32589,"nodeType":"UserDefinedTypeName","pathNode":{"id":32588,"name":"AggregatedReserveData","nodeType":"IdentifierPath","referencedDeclaration":34757,"src":"2748:21:155"},"referencedDeclaration":34757,"src":"2748:21:155","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_storage_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData"}},"id":32590,"nodeType":"ArrayTypeName","src":"2748:23:155","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveData_$34757_storage_$dyn_storage_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData[]"}},"visibility":"internal"},{"constant":false,"id":32594,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33293,"src":"2780:23:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BaseCurrencyInfo_$34781_memory_ptr","typeString":"struct IUiPoolDataProviderV3.BaseCurrencyInfo"},"typeName":{"id":32593,"nodeType":"UserDefinedTypeName","pathNode":{"id":32592,"name":"BaseCurrencyInfo","nodeType":"IdentifierPath","referencedDeclaration":34781,"src":"2780:16:155"},"referencedDeclaration":34781,"src":"2780:16:155","typeDescriptions":{"typeIdentifier":"t_struct$_BaseCurrencyInfo_$34781_storage_ptr","typeString":"struct IUiPoolDataProviderV3.BaseCurrencyInfo"}},"visibility":"internal"}],"src":"2747:57:155"},"scope":33560,"src":"2652:7877:155","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[34817],"body":{"id":33494,"nodeType":"Block","src":"10686:1576:155","statements":[{"assignments":[33310],"declarations":[{"constant":false,"id":33310,"mutability":"mutable","name":"pool","nameLocation":"10698:4:155","nodeType":"VariableDeclaration","scope":33494,"src":"10692:10:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":33309,"nodeType":"UserDefinedTypeName","pathNode":{"id":33308,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"10692:5:155"},"referencedDeclaration":4860,"src":"10692:5:155","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"}],"id":33316,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":33312,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33296,"src":"10711:8:155","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":33313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"10711:16:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":33314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10711:18:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":33311,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"10705:5:155","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":33315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10705:25:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"nodeType":"VariableDeclarationStatement","src":"10692:38:155"},{"assignments":[33321],"declarations":[{"constant":false,"id":33321,"mutability":"mutable","name":"reserves","nameLocation":"10753:8:155","nodeType":"VariableDeclaration","scope":33494,"src":"10736:25:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":33319,"name":"address","nodeType":"ElementaryTypeName","src":"10736:7:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":33320,"nodeType":"ArrayTypeName","src":"10736:9:155","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":33325,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":33322,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33310,"src":"10764:4:155","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":33323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReservesList","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"10764:20:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view external returns (address[] memory)"}},"id":33324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10764:22:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"10736:50:155"},{"assignments":[33330],"declarations":[{"constant":false,"id":33330,"mutability":"mutable","name":"userConfig","nameLocation":"10830:10:155","nodeType":"VariableDeclaration","scope":33494,"src":"10792:48:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap"},"typeName":{"id":33329,"nodeType":"UserDefinedTypeName","pathNode":{"id":33328,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"10792:30:155"},"referencedDeclaration":21322,"src":"10792:30:155","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}},"visibility":"internal"}],"id":33335,"initialValue":{"arguments":[{"id":33333,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33298,"src":"10869:4:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":33331,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33310,"src":"10843:4:155","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":33332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getUserConfiguration","nodeType":"MemberAccess","referencedDeclaration":4685,"src":"10843:25:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.UserConfigurationMap memory)"}},"id":33334,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10843:31:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"10792:82:155"},{"assignments":[33337],"declarations":[{"constant":false,"id":33337,"mutability":"mutable","name":"userEmodeCategoryId","nameLocation":"10887:19:155","nodeType":"VariableDeclaration","scope":33494,"src":"10881:25:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":33336,"name":"uint8","nodeType":"ElementaryTypeName","src":"10881:5:155","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":33345,"initialValue":{"arguments":[{"arguments":[{"id":33342,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33298,"src":"10933:4:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":33340,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33310,"src":"10915:4:155","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":33341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getUserEMode","nodeType":"MemberAccess","referencedDeclaration":4794,"src":"10915:17:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":33343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10915:23:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":33339,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10909:5:155","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":33338,"name":"uint8","nodeType":"ElementaryTypeName","src":"10909:5:155","typeDescriptions":{}}},"id":33344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10909:30:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"10881:58:155"},{"assignments":[33350],"declarations":[{"constant":false,"id":33350,"mutability":"mutable","name":"userReservesData","nameLocation":"10971:16:155","nodeType":"VariableDeclaration","scope":33494,"src":"10946:41:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveData_$34772_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData[]"},"typeName":{"baseType":{"id":33348,"nodeType":"UserDefinedTypeName","pathNode":{"id":33347,"name":"UserReserveData","nodeType":"IdentifierPath","referencedDeclaration":34772,"src":"10946:15:155"},"referencedDeclaration":34772,"src":"10946:15:155","typeDescriptions":{"typeIdentifier":"t_struct$_UserReserveData_$34772_storage_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData"}},"id":33349,"nodeType":"ArrayTypeName","src":"10946:17:155","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveData_$34772_storage_$dyn_storage_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData[]"}},"visibility":"internal"}],"id":33366,"initialValue":{"arguments":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":33360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33355,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33298,"src":"11019:4:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":33358,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11035:1:155","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":33357,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11027:7:155","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":33356,"name":"address","nodeType":"ElementaryTypeName","src":"11027:7:155","typeDescriptions":{}}},"id":33359,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11027:10:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11019:18:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":33363,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11058:1:155","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":33364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11019:40:155","trueExpression":{"expression":{"id":33361,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33321,"src":"11040:8:155","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":33362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"11040:15:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":33354,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"10990:21:155","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_UserReserveData_$34772_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct IUiPoolDataProviderV3.UserReserveData memory[] memory)"},"typeName":{"baseType":{"id":33352,"nodeType":"UserDefinedTypeName","pathNode":{"id":33351,"name":"UserReserveData","nodeType":"IdentifierPath","referencedDeclaration":34772,"src":"10994:15:155"},"referencedDeclaration":34772,"src":"10994:15:155","typeDescriptions":{"typeIdentifier":"t_struct$_UserReserveData_$34772_storage_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData"}},"id":33353,"nodeType":"ArrayTypeName","src":"10994:17:155","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveData_$34772_storage_$dyn_storage_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData[]"}}},"id":33365,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10990:75:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveData_$34772_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"10946:119:155"},{"body":{"id":33488,"nodeType":"Block","src":"11118:1087:155","statements":[{"assignments":[33382],"declarations":[{"constant":false,"id":33382,"mutability":"mutable","name":"baseData","nameLocation":"11155:8:155","nodeType":"VariableDeclaration","scope":33488,"src":"11126:37:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData"},"typeName":{"id":33381,"nodeType":"UserDefinedTypeName","pathNode":{"id":33380,"name":"DataTypes.ReserveData","nodeType":"IdentifierPath","referencedDeclaration":21315,"src":"11126:21:155"},"referencedDeclaration":21315,"src":"11126:21:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_storage_ptr","typeString":"struct DataTypes.ReserveData"}},"visibility":"internal"}],"id":33389,"initialValue":{"arguments":[{"baseExpression":{"id":33385,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33321,"src":"11186:8:155","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":33387,"indexExpression":{"id":33386,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33368,"src":"11195:1:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11186:11:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":33383,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33310,"src":"11166:4:155","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":33384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4710,"src":"11166:19:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$21315_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":33388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11166:32:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"nodeType":"VariableDeclarationStatement","src":"11126:72:155"},{"expression":{"id":33397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":33390,"name":"userReservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33350,"src":"11234:16:155","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveData_$34772_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData memory[] memory"}},"id":33392,"indexExpression":{"id":33391,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33368,"src":"11251:1:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11234:19:155","typeDescriptions":{"typeIdentifier":"t_struct$_UserReserveData_$34772_memory_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData memory"}},"id":33393,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"underlyingAsset","nodeType":"MemberAccess","referencedDeclaration":34759,"src":"11234:35:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":33394,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33321,"src":"11272:8:155","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":33396,"indexExpression":{"id":33395,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33368,"src":"11281:1:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11272:11:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"11234:49:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":33398,"nodeType":"ExpressionStatement","src":"11234:49:155"},{"expression":{"id":33410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":33399,"name":"userReservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33350,"src":"11291:16:155","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveData_$34772_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData memory[] memory"}},"id":33401,"indexExpression":{"id":33400,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33368,"src":"11308:1:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11291:19:155","typeDescriptions":{"typeIdentifier":"t_struct$_UserReserveData_$34772_memory_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData memory"}},"id":33402,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"scaledATokenBalance","nodeType":"MemberAccess","referencedDeclaration":34761,"src":"11291:39:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":33408,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33298,"src":"11390:4:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":33404,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33382,"src":"11341:8:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":33405,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"11341:22:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":33403,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3861,"src":"11333:7:155","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3861_$","typeString":"type(contract IAToken)"}},"id":33406,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11333:31:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":33407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"scaledBalanceOf","nodeType":"MemberAccess","referencedDeclaration":5950,"src":"11333:47:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":33409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11333:69:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11291:111:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33411,"nodeType":"ExpressionStatement","src":"11291:111:155"},{"expression":{"id":33420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":33412,"name":"userReservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33350,"src":"11410:16:155","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveData_$34772_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData memory[] memory"}},"id":33414,"indexExpression":{"id":33413,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33368,"src":"11427:1:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11410:19:155","typeDescriptions":{"typeIdentifier":"t_struct$_UserReserveData_$34772_memory_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData memory"}},"id":33415,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"usageAsCollateralEnabledOnUser","nodeType":"MemberAccess","referencedDeclaration":34763,"src":"11410:50:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":33418,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33368,"src":"11494:1:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":33416,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33330,"src":"11463:10:155","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":33417,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isUsingAsCollateral","nodeType":"MemberAccess","referencedDeclaration":12083,"src":"11463:30:155","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (bool)"}},"id":33419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11463:33:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11410:86:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33421,"nodeType":"ExpressionStatement","src":"11410:86:155"},{"condition":{"arguments":[{"id":33424,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33368,"src":"11532:1:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":33422,"name":"userConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33330,"src":"11509:10:155","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_memory_ptr","typeString":"struct DataTypes.UserConfigurationMap memory"}},"id":33423,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isBorrowing","nodeType":"MemberAccess","referencedDeclaration":12045,"src":"11509:22:155","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UserConfigurationMap_$21322_memory_ptr_$","typeString":"function (struct DataTypes.UserConfigurationMap memory,uint256) pure returns (bool)"}},"id":33425,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11509:25:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33487,"nodeType":"IfStatement","src":"11505:694:155","trueBody":{"id":33486,"nodeType":"Block","src":"11536:663:155","statements":[{"expression":{"id":33437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":33426,"name":"userReservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33350,"src":"11546:16:155","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveData_$34772_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData memory[] memory"}},"id":33428,"indexExpression":{"id":33427,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33368,"src":"11563:1:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11546:19:155","typeDescriptions":{"typeIdentifier":"t_struct$_UserReserveData_$34772_memory_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData memory"}},"id":33429,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"scaledVariableDebt","nodeType":"MemberAccess","referencedDeclaration":34767,"src":"11546:38:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":33435,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33298,"src":"11677:4:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":33431,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33382,"src":"11617:8:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":33432,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"variableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21306,"src":"11617:33:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":33430,"name":"IVariableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6155,"src":"11587:18:155","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVariableDebtToken_$6155_$","typeString":"type(contract IVariableDebtToken)"}},"id":33433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11587:73:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVariableDebtToken_$6155","typeString":"contract IVariableDebtToken"}},"id":33434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"scaledBalanceOf","nodeType":"MemberAccess","referencedDeclaration":5950,"src":"11587:89:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":33436,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11587:95:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11546:136:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33438,"nodeType":"ExpressionStatement","src":"11546:136:155"},{"expression":{"id":33450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":33439,"name":"userReservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33350,"src":"11692:16:155","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveData_$34772_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData memory[] memory"}},"id":33441,"indexExpression":{"id":33440,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33368,"src":"11709:1:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11692:19:155","typeDescriptions":{"typeIdentifier":"t_struct$_UserReserveData_$34772_memory_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData memory"}},"id":33442,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"principalStableDebt","nodeType":"MemberAccess","referencedDeclaration":34769,"src":"11692:39:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":33448,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33298,"src":"11814:4:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":33444,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33382,"src":"11751:8:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":33445,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"11751:31:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":33443,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6109,"src":"11734:16:155","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6109_$","typeString":"type(contract IStableDebtToken)"}},"id":33446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11734:49:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6109","typeString":"contract IStableDebtToken"}},"id":33447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"principalBalanceOf","nodeType":"MemberAccess","referencedDeclaration":6102,"src":"11734:79:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":33449,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11734:85:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11692:127:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33451,"nodeType":"ExpressionStatement","src":"11692:127:155"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":33452,"name":"userReservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33350,"src":"11833:16:155","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveData_$34772_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData memory[] memory"}},"id":33454,"indexExpression":{"id":33453,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33368,"src":"11850:1:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11833:19:155","typeDescriptions":{"typeIdentifier":"t_struct$_UserReserveData_$34772_memory_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData memory"}},"id":33455,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"principalStableDebt","nodeType":"MemberAccess","referencedDeclaration":34769,"src":"11833:39:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":33456,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11876:1:155","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11833:44:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33485,"nodeType":"IfStatement","src":"11829:362:155","trueBody":{"id":33484,"nodeType":"Block","src":"11879:312:155","statements":[{"expression":{"id":33469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":33458,"name":"userReservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33350,"src":"11891:16:155","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveData_$34772_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData memory[] memory"}},"id":33460,"indexExpression":{"id":33459,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33368,"src":"11908:1:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11891:19:155","typeDescriptions":{"typeIdentifier":"t_struct$_UserReserveData_$34772_memory_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData memory"}},"id":33461,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"stableBorrowRate","nodeType":"MemberAccess","referencedDeclaration":34765,"src":"11891:36:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":33467,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33298,"src":"12011:4:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":33463,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33382,"src":"11947:8:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":33464,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"11947:31:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":33462,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6109,"src":"11930:16:155","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6109_$","typeString":"type(contract IStableDebtToken)"}},"id":33465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11930:49:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6109","typeString":"contract IStableDebtToken"}},"id":33466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getUserStableRate","nodeType":"MemberAccess","referencedDeclaration":6060,"src":"11930:80:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":33468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11930:86:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11891:125:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33470,"nodeType":"ExpressionStatement","src":"11891:125:155"},{"expression":{"id":33482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":33471,"name":"userReservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33350,"src":"12028:16:155","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveData_$34772_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData memory[] memory"}},"id":33473,"indexExpression":{"id":33472,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33368,"src":"12045:1:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12028:19:155","typeDescriptions":{"typeIdentifier":"t_struct$_UserReserveData_$34772_memory_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData memory"}},"id":33474,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"stableBorrowLastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":34771,"src":"12028:51:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":33480,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33298,"src":"12175:4:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":33476,"name":"baseData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33382,"src":"12112:8:155","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":33477,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stableDebtTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21304,"src":"12112:31:155","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":33475,"name":"IStableDebtToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6109,"src":"12082:16:155","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStableDebtToken_$6109_$","typeString":"type(contract IStableDebtToken)"}},"id":33478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12082:73:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStableDebtToken_$6109","typeString":"contract IStableDebtToken"}},"id":33479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getUserLastUpdated","nodeType":"MemberAccess","referencedDeclaration":6068,"src":"12082:92:155","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint40_$","typeString":"function (address) view external returns (uint40)"}},"id":33481,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12082:98:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"12028:152:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33483,"nodeType":"ExpressionStatement","src":"12028:152:155"}]}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33371,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33368,"src":"11092:1:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":33372,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33321,"src":"11096:8:155","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":33373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"11096:15:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11092:19:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33489,"initializationExpression":{"assignments":[33368],"declarations":[{"constant":false,"id":33368,"mutability":"mutable","name":"i","nameLocation":"11085:1:155","nodeType":"VariableDeclaration","scope":33489,"src":"11077:9:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33367,"name":"uint256","nodeType":"ElementaryTypeName","src":"11077:7:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33370,"initialValue":{"hexValue":"30","id":33369,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11089:1:155","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11077:13:155"},"loopExpression":{"expression":{"id":33376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"11113:3:155","subExpression":{"id":33375,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33368,"src":"11113:1:155","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33377,"nodeType":"ExpressionStatement","src":"11113:3:155"},"nodeType":"ForStatement","src":"11072:1133:155"},{"expression":{"components":[{"id":33490,"name":"userReservesData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33350,"src":"12219:16:155","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveData_$34772_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData memory[] memory"}},{"id":33491,"name":"userEmodeCategoryId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33337,"src":"12237:19:155","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":33492,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12218:39:155","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_struct$_UserReserveData_$34772_memory_ptr_$dyn_memory_ptr_$_t_uint8_$","typeString":"tuple(struct IUiPoolDataProviderV3.UserReserveData memory[] memory,uint8)"}},"functionReturnParameters":33307,"id":33493,"nodeType":"Return","src":"12211:46:155"}]},"functionSelector":"51974cc0","id":33495,"implemented":true,"kind":"function","modifiers":[],"name":"getUserReservesData","nameLocation":"10542:19:155","nodeType":"FunctionDefinition","overrides":{"id":33300,"nodeType":"OverrideSpecifier","overrides":[],"src":"10635:8:155"},"parameters":{"id":33299,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33296,"mutability":"mutable","name":"provider","nameLocation":"10590:8:155","nodeType":"VariableDeclaration","scope":33495,"src":"10567:31:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":33295,"nodeType":"UserDefinedTypeName","pathNode":{"id":33294,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"10567:22:155"},"referencedDeclaration":5069,"src":"10567:22:155","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"},{"constant":false,"id":33298,"mutability":"mutable","name":"user","nameLocation":"10612:4:155","nodeType":"VariableDeclaration","scope":33495,"src":"10604:12:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33297,"name":"address","nodeType":"ElementaryTypeName","src":"10604:7:155","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10561:59:155"},"returnParameters":{"id":33307,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33304,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33495,"src":"10653:24:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveData_$34772_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData[]"},"typeName":{"baseType":{"id":33302,"nodeType":"UserDefinedTypeName","pathNode":{"id":33301,"name":"UserReserveData","nodeType":"IdentifierPath","referencedDeclaration":34772,"src":"10653:15:155"},"referencedDeclaration":34772,"src":"10653:15:155","typeDescriptions":{"typeIdentifier":"t_struct$_UserReserveData_$34772_storage_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData"}},"id":33303,"nodeType":"ArrayTypeName","src":"10653:17:155","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveData_$34772_storage_$dyn_storage_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData[]"}},"visibility":"internal"},{"constant":false,"id":33306,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33495,"src":"10679:5:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":33305,"name":"uint8","nodeType":"ElementaryTypeName","src":"10679:5:155","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"10652:33:155"},"scope":33560,"src":"10533:1729:155","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":33558,"nodeType":"Block","src":"12345:247:155","statements":[{"assignments":[33503],"declarations":[{"constant":false,"id":33503,"mutability":"mutable","name":"i","nameLocation":"12357:1:155","nodeType":"VariableDeclaration","scope":33558,"src":"12351:7:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":33502,"name":"uint8","nodeType":"ElementaryTypeName","src":"12351:5:155","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":33505,"initialValue":{"hexValue":"30","id":33504,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12361:1:155","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12351:11:155"},{"body":{"id":33518,"nodeType":"Block","src":"12403:18:155","statements":[{"expression":{"id":33516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"12411:3:155","subExpression":{"id":33515,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33503,"src":"12411:1:155","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":33517,"nodeType":"ExpressionStatement","src":"12411:3:155"}]},"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":33514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":33508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33506,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33503,"src":"12375:1:155","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"3332","id":33507,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12379:2:155","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"12375:6:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"id":33513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":33509,"name":"_bytes32","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33497,"src":"12385:8:155","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":33511,"indexExpression":{"id":33510,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33503,"src":"12394:1:155","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12385:11:155","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":33512,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12400:1:155","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12385:16:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12375:26:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33519,"nodeType":"WhileStatement","src":"12368:53:155"},{"assignments":[33521],"declarations":[{"constant":false,"id":33521,"mutability":"mutable","name":"bytesArray","nameLocation":"12439:10:155","nodeType":"VariableDeclaration","scope":33558,"src":"12426:23:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":33520,"name":"bytes","nodeType":"ElementaryTypeName","src":"12426:5:155","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":33526,"initialValue":{"arguments":[{"id":33524,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33503,"src":"12462:1:155","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":33523,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"12452:9:155","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":33522,"name":"bytes","nodeType":"ElementaryTypeName","src":"12456:5:155","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":33525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12452:12:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"12426:38:155"},{"body":{"id":33551,"nodeType":"Block","src":"12515:42:155","statements":[{"expression":{"id":33549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":33543,"name":"bytesArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33521,"src":"12523:10:155","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":33545,"indexExpression":{"id":33544,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33503,"src":"12534:1:155","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12523:13:155","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":33546,"name":"_bytes32","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33497,"src":"12539:8:155","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":33548,"indexExpression":{"id":33547,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33503,"src":"12548:1:155","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12539:11:155","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"12523:27:155","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":33550,"nodeType":"ExpressionStatement","src":"12523:27:155"}]},"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":33539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":33533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33531,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33503,"src":"12482:1:155","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"3332","id":33532,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12486:2:155","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"12482:6:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"id":33538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":33534,"name":"_bytes32","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33497,"src":"12492:8:155","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":33536,"indexExpression":{"id":33535,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33503,"src":"12501:1:155","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12492:11:155","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":33537,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12507:1:155","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12492:16:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12482:26:155","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33552,"initializationExpression":{"expression":{"id":33529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33527,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33503,"src":"12475:1:155","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":33528,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12479:1:155","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12475:5:155","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":33530,"nodeType":"ExpressionStatement","src":"12475:5:155"},"loopExpression":{"expression":{"id":33541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"12510:3:155","subExpression":{"id":33540,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33503,"src":"12510:1:155","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":33542,"nodeType":"ExpressionStatement","src":"12510:3:155"},"nodeType":"ForStatement","src":"12470:87:155"},{"expression":{"arguments":[{"id":33555,"name":"bytesArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33521,"src":"12576:10:155","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":33554,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12569:6:155","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":33553,"name":"string","nodeType":"ElementaryTypeName","src":"12569:6:155","typeDescriptions":{}}},"id":33556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12569:18:155","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":33501,"id":33557,"nodeType":"Return","src":"12562:25:155"}]},"functionSelector":"9201de55","id":33559,"implemented":true,"kind":"function","modifiers":[],"name":"bytes32ToString","nameLocation":"12275:15:155","nodeType":"FunctionDefinition","parameters":{"id":33498,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33497,"mutability":"mutable","name":"_bytes32","nameLocation":"12299:8:155","nodeType":"VariableDeclaration","scope":33559,"src":"12291:16:155","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":33496,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12291:7:155","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"12290:18:155"},"returnParameters":{"id":33501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33500,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33559,"src":"12330:13:155","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":33499,"name":"string","nodeType":"ElementaryTypeName","src":"12330:6:155","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"12329:15:155"},"scope":33560,"src":"12266:326:155","stateMutability":"pure","virtual":false,"visibility":"public"}],"scope":33561,"src":"1551:11043:155","usedErrors":[]}],"src":"37:12558:155"},"id":155},"contracts/misc/WalletBalanceProvider.sol":{"ast":{"absolutePath":"contracts/misc/WalletBalanceProvider.sol","exportedSymbols":{"Address":[722],"DataTypes":[21633],"GPv2SafeERC20":[118],"IERC20":[1442],"IPool":[4860],"IPoolAddressesProvider":[5069],"ReserveConfiguration":[11857],"WalletBalanceProvider":[33874]},"id":33875,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":33562,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:156"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol","id":33564,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33875,"sourceUnit":723,"src":"63:96:156","symbolAliases":[{"foreign":{"id":33563,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:7:156","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","id":33566,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33875,"sourceUnit":1443,"src":"160:94:156","symbolAliases":[{"foreign":{"id":33565,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"168:6:156","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","id":33568,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33875,"sourceUnit":5070,"src":"256:101:156","symbolAliases":[{"foreign":{"id":33567,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"264:22:156","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","file":"@aave/core-v3/contracts/interfaces/IPool.sol","id":33570,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33875,"sourceUnit":4861,"src":"358:67:156","symbolAliases":[{"foreign":{"id":33569,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"366:5:156","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":33572,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33875,"sourceUnit":119,"src":"426:102:156","symbolAliases":[{"foreign":{"id":33571,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"434:13:156","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol","id":33574,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33875,"sourceUnit":11858,"src":"529:119:156","symbolAliases":[{"foreign":{"id":33573,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"537:20:156","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","id":33576,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33875,"sourceUnit":21634,"src":"649:89:156","symbolAliases":[{"foreign":{"id":33575,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"657:9:156","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"WalletBalanceProvider","contractDependencies":[],"contractKind":"contract","documentation":{"id":33577,"nodeType":"StructuredDocumentation","src":"740:433:156","text":" @title WalletBalanceProvider contract\n @author Aave, influenced by https://github.com/wbobeirne/eth-balance-checker/blob/master/contracts/BalanceChecker.sol\n @notice Implements a logic of getting multiple tokens balance for one user address\n @dev NOTE: THIS CONTRACT IS NOT USED WITHIN THE AAVE PROTOCOL. It's an accessory contract used to reduce the number of calls\n towards the blockchain from the Aave backend.*"},"fullyImplemented":true,"id":33874,"linearizedBaseContracts":[33874],"name":"WalletBalanceProvider","nameLocation":"1183:21:156","nodeType":"ContractDefinition","nodes":[{"id":33580,"libraryName":{"id":33578,"name":"Address","nodeType":"IdentifierPath","referencedDeclaration":722,"src":"1215:7:156"},"nodeType":"UsingForDirective","src":"1209:34:156","typeName":{"id":33579,"name":"address","nodeType":"ElementaryTypeName","src":"1227:15:156","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}},{"id":33583,"libraryName":{"id":33581,"name":"Address","nodeType":"IdentifierPath","referencedDeclaration":722,"src":"1252:7:156"},"nodeType":"UsingForDirective","src":"1246:26:156","typeName":{"id":33582,"name":"address","nodeType":"ElementaryTypeName","src":"1264:7:156","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"id":33587,"libraryName":{"id":33584,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"1281:13:156"},"nodeType":"UsingForDirective","src":"1275:31:156","typeName":{"id":33586,"nodeType":"UserDefinedTypeName","pathNode":{"id":33585,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1299:6:156"},"referencedDeclaration":1442,"src":"1299:6:156","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"id":33591,"libraryName":{"id":33588,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":11857,"src":"1315:20:156"},"nodeType":"UsingForDirective","src":"1309:65:156","typeName":{"id":33590,"nodeType":"UserDefinedTypeName","pathNode":{"id":33589,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"1340:33:156"},"referencedDeclaration":21318,"src":"1340:33:156","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"constant":true,"id":33594,"mutability":"constant","name":"MOCK_ETH_ADDRESS","nameLocation":"1395:16:156","nodeType":"VariableDeclaration","scope":33874,"src":"1378:78:156","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33592,"name":"address","nodeType":"ElementaryTypeName","src":"1378:7:156","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307845656565654565656545654565654565456545656545454565656565456565656565656545456545","id":33593,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1414:42:156","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"},"visibility":"internal"},{"body":{"id":33606,"nodeType":"Block","src":"1551:95:156","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":33599,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1611:3:156","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":33600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1611:10:156","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":33601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":445,"src":"1611:21:156","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$","typeString":"function (address) view returns (bool)"}},"id":33602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1611:23:156","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"3232","id":33603,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1636:4:156","typeDescriptions":{"typeIdentifier":"t_stringliteral_d4d1a59767271eefdc7830a772b9732a11d503531d972ab8c981a6b1c0e666e5","typeString":"literal_string \"22\""},"value":"22"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d4d1a59767271eefdc7830a772b9732a11d503531d972ab8c981a6b1c0e666e5","typeString":"literal_string \"22\""}],"id":33598,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1603:7:156","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":33604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1603:38:156","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33605,"nodeType":"ExpressionStatement","src":"1603:38:156"}]},"documentation":{"id":33595,"nodeType":"StructuredDocumentation","src":"1461:60:156","text":"@dev Fallback function, don't accept any ETH*"},"id":33607,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":33596,"nodeType":"ParameterList","parameters":[],"src":"1531:2:156"},"returnParameters":{"id":33597,"nodeType":"ParameterList","parameters":[],"src":"1551:0:156"},"scope":33874,"src":"1524:122:156","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":33641,"nodeType":"Block","src":"1920:247:156","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":33619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33617,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33612,"src":"1930:5:156","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":33618,"name":"MOCK_ETH_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33594,"src":"1939:16:156","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1930:25:156","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":33624,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33612,"src":"2063:5:156","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":33625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":445,"src":"2063:16:156","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$","typeString":"function (address) view returns (bool)"}},"id":33626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2063:18:156","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33635,"nodeType":"IfStatement","src":"2059:75:156","trueBody":{"id":33634,"nodeType":"Block","src":"2083:51:156","statements":[{"expression":{"arguments":[{"id":33631,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33610,"src":"2122:4:156","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":33628,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33612,"src":"2105:5:156","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":33627,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"2098:6:156","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":33629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2098:13:156","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":33630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"2098:23:156","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":33632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2098:29:156","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":33616,"id":33633,"nodeType":"Return","src":"2091:36:156"}]}},"id":33636,"nodeType":"IfStatement","src":"1926:208:156","trueBody":{"id":33623,"nodeType":"Block","src":"1957:96:156","statements":[{"expression":{"expression":{"id":33620,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33610,"src":"1972:4:156","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":33621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","src":"1972:12:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":33616,"id":33622,"nodeType":"Return","src":"1965:19:156"}]}},{"expression":{"arguments":[{"hexValue":"494e56414c49445f544f4b454e","id":33638,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2146:15:156","typeDescriptions":{"typeIdentifier":"t_stringliteral_436b5627177a9781148596ddddd93f72d53dd82575a018216d5aaf2a8219ec9e","typeString":"literal_string \"INVALID_TOKEN\""},"value":"INVALID_TOKEN"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_436b5627177a9781148596ddddd93f72d53dd82575a018216d5aaf2a8219ec9e","typeString":"literal_string \"INVALID_TOKEN\""}],"id":33637,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"2139:6:156","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":33639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2139:23:156","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33640,"nodeType":"ExpressionStatement","src":"2139:23:156"}]},"documentation":{"id":33608,"nodeType":"StructuredDocumentation","src":"1650:189:156","text":"@dev Check the token balance of a wallet in a token contract\nReturns the balance of the token for user. Avoids possible errors:\n- return 0 on non-contract address*"},"functionSelector":"f7888aec","id":33642,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"1851:9:156","nodeType":"FunctionDefinition","parameters":{"id":33613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33610,"mutability":"mutable","name":"user","nameLocation":"1869:4:156","nodeType":"VariableDeclaration","scope":33642,"src":"1861:12:156","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33609,"name":"address","nodeType":"ElementaryTypeName","src":"1861:7:156","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":33612,"mutability":"mutable","name":"token","nameLocation":"1883:5:156","nodeType":"VariableDeclaration","scope":33642,"src":"1875:13:156","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33611,"name":"address","nodeType":"ElementaryTypeName","src":"1875:7:156","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1860:29:156"},"returnParameters":{"id":33616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33615,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33642,"src":"1911:7:156","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33614,"name":"uint256","nodeType":"ElementaryTypeName","src":"1911:7:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1910:9:156"},"scope":33874,"src":"1842:325:156","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":33716,"nodeType":"Block","src":"2572:294:156","statements":[{"assignments":[33659],"declarations":[{"constant":false,"id":33659,"mutability":"mutable","name":"balances","nameLocation":"2595:8:156","nodeType":"VariableDeclaration","scope":33716,"src":"2578:25:156","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33657,"name":"uint256","nodeType":"ElementaryTypeName","src":"2578:7:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33658,"nodeType":"ArrayTypeName","src":"2578:9:156","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":33669,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":33663,"name":"users","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33646,"src":"2620:5:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":33664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"2620:12:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":33665,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33649,"src":"2635:6:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":33666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"2635:13:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2620:28:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":33662,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2606:13:156","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":33660,"name":"uint256","nodeType":"ElementaryTypeName","src":"2610:7:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33661,"nodeType":"ArrayTypeName","src":"2610:9:156","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":33668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2606:43:156","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"2578:71:156"},{"body":{"id":33712,"nodeType":"Block","src":"2699:141:156","statements":[{"body":{"id":33710,"nodeType":"Block","src":"2751:83:156","statements":[{"expression":{"id":33708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":33692,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33659,"src":"2761:8:156","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33699,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33693,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33671,"src":"2770:1:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":33694,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33649,"src":"2774:6:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":33695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"2774:13:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2770:17:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":33697,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33682,"src":"2790:1:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2770:21:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2761:31:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":33701,"name":"users","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33646,"src":"2805:5:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":33703,"indexExpression":{"id":33702,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33671,"src":"2811:1:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2805:8:156","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":33704,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33649,"src":"2815:6:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":33706,"indexExpression":{"id":33705,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33682,"src":"2822:1:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2815:9:156","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":33700,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33642,"src":"2795:9:156","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view returns (uint256)"}},"id":33707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2795:30:156","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2761:64:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33709,"nodeType":"ExpressionStatement","src":"2761:64:156"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33685,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33682,"src":"2727:1:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":33686,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33649,"src":"2731:6:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":33687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"2731:13:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2727:17:156","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33711,"initializationExpression":{"assignments":[33682],"declarations":[{"constant":false,"id":33682,"mutability":"mutable","name":"j","nameLocation":"2720:1:156","nodeType":"VariableDeclaration","scope":33711,"src":"2712:9:156","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33681,"name":"uint256","nodeType":"ElementaryTypeName","src":"2712:7:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33684,"initialValue":{"hexValue":"30","id":33683,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2724:1:156","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2712:13:156"},"loopExpression":{"expression":{"id":33690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2746:3:156","subExpression":{"id":33689,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33682,"src":"2746:1:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33691,"nodeType":"ExpressionStatement","src":"2746:3:156"},"nodeType":"ForStatement","src":"2707:127:156"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33674,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33671,"src":"2676:1:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":33675,"name":"users","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33646,"src":"2680:5:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":33676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"2680:12:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2676:16:156","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33713,"initializationExpression":{"assignments":[33671],"declarations":[{"constant":false,"id":33671,"mutability":"mutable","name":"i","nameLocation":"2669:1:156","nodeType":"VariableDeclaration","scope":33713,"src":"2661:9:156","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33670,"name":"uint256","nodeType":"ElementaryTypeName","src":"2661:7:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33673,"initialValue":{"hexValue":"30","id":33672,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2673:1:156","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2661:13:156"},"loopExpression":{"expression":{"id":33679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2694:3:156","subExpression":{"id":33678,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33671,"src":"2694:1:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33680,"nodeType":"ExpressionStatement","src":"2694:3:156"},"nodeType":"ForStatement","src":"2656:184:156"},{"expression":{"id":33714,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33659,"src":"2853:8:156","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":33654,"id":33715,"nodeType":"Return","src":"2846:15:156"}]},"documentation":{"id":33643,"nodeType":"StructuredDocumentation","src":"2171:268:156","text":" @notice Fetches, for a list of _users and _tokens (ETH included with mock address), the balances\n @param users The list of users\n @param tokens The list of tokens\n @return And array with the concatenation of, for each user, his/her balances*"},"functionSelector":"b59b28ef","id":33717,"implemented":true,"kind":"function","modifiers":[],"name":"batchBalanceOf","nameLocation":"2451:14:156","nodeType":"FunctionDefinition","parameters":{"id":33650,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33646,"mutability":"mutable","name":"users","nameLocation":"2490:5:156","nodeType":"VariableDeclaration","scope":33717,"src":"2471:24:156","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":33644,"name":"address","nodeType":"ElementaryTypeName","src":"2471:7:156","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":33645,"nodeType":"ArrayTypeName","src":"2471:9:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":33649,"mutability":"mutable","name":"tokens","nameLocation":"2520:6:156","nodeType":"VariableDeclaration","scope":33717,"src":"2501:25:156","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":33647,"name":"address","nodeType":"ElementaryTypeName","src":"2501:7:156","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":33648,"nodeType":"ArrayTypeName","src":"2501:9:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2465:65:156"},"returnParameters":{"id":33654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33653,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33717,"src":"2554:16:156","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33651,"name":"uint256","nodeType":"ElementaryTypeName","src":"2554:7:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33652,"nodeType":"ArrayTypeName","src":"2554:9:156","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2553:18:156"},"scope":33874,"src":"2442:424:156","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":33872,"nodeType":"Block","src":"3098:912:156","statements":[{"assignments":[33733],"declarations":[{"constant":false,"id":33733,"mutability":"mutable","name":"pool","nameLocation":"3110:4:156","nodeType":"VariableDeclaration","scope":33872,"src":"3104:10:156","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":33732,"nodeType":"UserDefinedTypeName","pathNode":{"id":33731,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"3104:5:156"},"referencedDeclaration":4860,"src":"3104:5:156","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"}],"id":33741,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":33736,"name":"provider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33720,"src":"3146:8:156","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":33735,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5069,"src":"3123:22:156","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPoolAddressesProvider_$5069_$","typeString":"type(contract IPoolAddressesProvider)"}},"id":33737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3123:32:156","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"id":33738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getPool","nodeType":"MemberAccess","referencedDeclaration":4990,"src":"3123:40:156","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":33739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3123:42:156","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":33734,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"3117:5:156","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPool_$4860_$","typeString":"type(contract IPool)"}},"id":33740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3117:49:156","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"nodeType":"VariableDeclarationStatement","src":"3104:62:156"},{"assignments":[33746],"declarations":[{"constant":false,"id":33746,"mutability":"mutable","name":"reserves","nameLocation":"3190:8:156","nodeType":"VariableDeclaration","scope":33872,"src":"3173:25:156","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":33744,"name":"address","nodeType":"ElementaryTypeName","src":"3173:7:156","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":33745,"nodeType":"ArrayTypeName","src":"3173:9:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":33750,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":33747,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33733,"src":"3201:4:156","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":33748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReservesList","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"3201:20:156","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view external returns (address[] memory)"}},"id":33749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3201:22:156","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"3173:50:156"},{"assignments":[33755],"declarations":[{"constant":false,"id":33755,"mutability":"mutable","name":"reservesWithEth","nameLocation":"3246:15:156","nodeType":"VariableDeclaration","scope":33872,"src":"3229:32:156","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":33753,"name":"address","nodeType":"ElementaryTypeName","src":"3229:7:156","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":33754,"nodeType":"ArrayTypeName","src":"3229:9:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":33764,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":33759,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33746,"src":"3278:8:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":33760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3278:15:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":33761,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3296:1:156","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3278:19:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":33758,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"3264:13:156","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":33756,"name":"address","nodeType":"ElementaryTypeName","src":"3268:7:156","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":33757,"nodeType":"ArrayTypeName","src":"3268:9:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":33763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3264:34:156","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"3229:69:156"},{"body":{"id":33784,"nodeType":"Block","src":"3350:47:156","statements":[{"expression":{"id":33782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":33776,"name":"reservesWithEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33755,"src":"3358:15:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":33778,"indexExpression":{"id":33777,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33766,"src":"3374:1:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3358:18:156","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":33779,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33746,"src":"3379:8:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":33781,"indexExpression":{"id":33780,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33766,"src":"3388:1:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3379:11:156","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3358:32:156","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":33783,"nodeType":"ExpressionStatement","src":"3358:32:156"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33769,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33766,"src":"3324:1:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":33770,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33746,"src":"3328:8:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":33771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3328:15:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3324:19:156","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33785,"initializationExpression":{"assignments":[33766],"declarations":[{"constant":false,"id":33766,"mutability":"mutable","name":"i","nameLocation":"3317:1:156","nodeType":"VariableDeclaration","scope":33785,"src":"3309:9:156","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33765,"name":"uint256","nodeType":"ElementaryTypeName","src":"3309:7:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33768,"initialValue":{"hexValue":"30","id":33767,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3321:1:156","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3309:13:156"},"loopExpression":{"expression":{"id":33774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3345:3:156","subExpression":{"id":33773,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33766,"src":"3345:1:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33775,"nodeType":"ExpressionStatement","src":"3345:3:156"},"nodeType":"ForStatement","src":"3304:93:156"},{"expression":{"id":33791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":33786,"name":"reservesWithEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33755,"src":"3402:15:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":33789,"indexExpression":{"expression":{"id":33787,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33746,"src":"3418:8:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":33788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3418:15:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3402:32:156","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33790,"name":"MOCK_ETH_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33594,"src":"3437:16:156","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3402:51:156","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":33792,"nodeType":"ExpressionStatement","src":"3402:51:156"},{"assignments":[33797],"declarations":[{"constant":false,"id":33797,"mutability":"mutable","name":"balances","nameLocation":"3477:8:156","nodeType":"VariableDeclaration","scope":33872,"src":"3460:25:156","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33795,"name":"uint256","nodeType":"ElementaryTypeName","src":"3460:7:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33796,"nodeType":"ArrayTypeName","src":"3460:9:156","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":33804,"initialValue":{"arguments":[{"expression":{"id":33801,"name":"reservesWithEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33755,"src":"3502:15:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":33802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3502:22:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":33800,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"3488:13:156","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":33798,"name":"uint256","nodeType":"ElementaryTypeName","src":"3492:7:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33799,"nodeType":"ArrayTypeName","src":"3492:9:156","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":33803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3488:37:156","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"3460:65:156"},{"body":{"id":33856,"nodeType":"Block","src":"3578:320:156","statements":[{"assignments":[33820],"declarations":[{"constant":false,"id":33820,"mutability":"mutable","name":"configuration","nameLocation":"3627:13:156","nodeType":"VariableDeclaration","scope":33856,"src":"3586:54:156","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"},"typeName":{"id":33819,"nodeType":"UserDefinedTypeName","pathNode":{"id":33818,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"3586:33:156"},"referencedDeclaration":21318,"src":"3586:33:156","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}},"visibility":"internal"}],"id":33827,"initialValue":{"arguments":[{"baseExpression":{"id":33823,"name":"reservesWithEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33755,"src":"3674:15:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":33825,"indexExpression":{"id":33824,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33806,"src":"3690:1:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3674:18:156","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":33821,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33733,"src":"3643:4:156","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":33822,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getConfiguration","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"3643:21:156","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveConfigurationMap memory)"}},"id":33826,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3643:57:156","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"nodeType":"VariableDeclarationStatement","src":"3586:114:156"},{"assignments":[33829,null,null,null,null],"declarations":[{"constant":false,"id":33829,"mutability":"mutable","name":"isActive","nameLocation":"3715:8:156","nodeType":"VariableDeclaration","scope":33856,"src":"3710:13:156","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33828,"name":"bool","nodeType":"ElementaryTypeName","src":"3710:4:156","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null,null,null,null],"id":33833,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":33830,"name":"configuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33820,"src":"3735:13:156","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_memory_ptr","typeString":"struct DataTypes.ReserveConfigurationMap memory"}},"id":33831,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"getFlags","nodeType":"MemberAccess","referencedDeclaration":11757,"src":"3735:22:156","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$returns$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$bound_to$_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_$","typeString":"function (struct DataTypes.ReserveConfigurationMap memory) pure returns (bool,bool,bool,bool,bool)"}},"id":33832,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3735:24:156","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bool_$_t_bool_$_t_bool_$_t_bool_$","typeString":"tuple(bool,bool,bool,bool,bool)"}},"nodeType":"VariableDeclarationStatement","src":"3709:50:156"},{"condition":{"id":33835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3772:9:156","subExpression":{"id":33834,"name":"isActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33829,"src":"3773:8:156","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33844,"nodeType":"IfStatement","src":"3768:67:156","trueBody":{"id":33843,"nodeType":"Block","src":"3783:52:156","statements":[{"expression":{"id":33840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":33836,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33797,"src":"3793:8:156","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33838,"indexExpression":{"id":33837,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33806,"src":"3802:1:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3793:11:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":33839,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3807:1:156","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3793:15:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33841,"nodeType":"ExpressionStatement","src":"3793:15:156"},{"id":33842,"nodeType":"Continue","src":"3818:8:156"}]}},{"expression":{"id":33854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":33845,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33797,"src":"3842:8:156","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33847,"indexExpression":{"id":33846,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33806,"src":"3851:1:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3842:11:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":33849,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33722,"src":"3866:4:156","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":33850,"name":"reservesWithEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33755,"src":"3872:15:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":33852,"indexExpression":{"id":33851,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33806,"src":"3888:1:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3872:18:156","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":33848,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33642,"src":"3856:9:156","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view returns (uint256)"}},"id":33853,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3856:35:156","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3842:49:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33855,"nodeType":"ExpressionStatement","src":"3842:49:156"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33809,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33806,"src":"3552:1:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":33810,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33746,"src":"3556:8:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":33811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3556:15:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3552:19:156","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33857,"initializationExpression":{"assignments":[33806],"declarations":[{"constant":false,"id":33806,"mutability":"mutable","name":"j","nameLocation":"3545:1:156","nodeType":"VariableDeclaration","scope":33857,"src":"3537:9:156","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33805,"name":"uint256","nodeType":"ElementaryTypeName","src":"3537:7:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33808,"initialValue":{"hexValue":"30","id":33807,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3549:1:156","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3537:13:156"},"loopExpression":{"expression":{"id":33814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3573:3:156","subExpression":{"id":33813,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33806,"src":"3573:1:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33815,"nodeType":"ExpressionStatement","src":"3573:3:156"},"nodeType":"ForStatement","src":"3532:366:156"},{"expression":{"id":33866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":33858,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33797,"src":"3903:8:156","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33861,"indexExpression":{"expression":{"id":33859,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33746,"src":"3912:8:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":33860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3912:15:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3903:25:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":33863,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33722,"src":"3941:4:156","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":33864,"name":"MOCK_ETH_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33594,"src":"3947:16:156","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":33862,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33642,"src":"3931:9:156","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view returns (uint256)"}},"id":33865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3931:33:156","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3903:61:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33867,"nodeType":"ExpressionStatement","src":"3903:61:156"},{"expression":{"components":[{"id":33868,"name":"reservesWithEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33755,"src":"3979:15:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"id":33869,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33797,"src":"3996:8:156","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":33870,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3978:27:156","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(address[] memory,uint256[] memory)"}},"functionReturnParameters":33730,"id":33871,"nodeType":"Return","src":"3971:34:156"}]},"documentation":{"id":33718,"nodeType":"StructuredDocumentation","src":"2870:91:156","text":"@dev provides balances of user wallet for all reserves available on the pool"},"functionSelector":"02405343","id":33873,"implemented":true,"kind":"function","modifiers":[],"name":"getUserWalletBalances","nameLocation":"2973:21:156","nodeType":"FunctionDefinition","parameters":{"id":33723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33720,"mutability":"mutable","name":"provider","nameLocation":"3008:8:156","nodeType":"VariableDeclaration","scope":33873,"src":"3000:16:156","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33719,"name":"address","nodeType":"ElementaryTypeName","src":"3000:7:156","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":33722,"mutability":"mutable","name":"user","nameLocation":"3030:4:156","nodeType":"VariableDeclaration","scope":33873,"src":"3022:12:156","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33721,"name":"address","nodeType":"ElementaryTypeName","src":"3022:7:156","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2994:44:156"},"returnParameters":{"id":33730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33726,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33873,"src":"3062:16:156","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":33724,"name":"address","nodeType":"ElementaryTypeName","src":"3062:7:156","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":33725,"nodeType":"ArrayTypeName","src":"3062:9:156","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":33729,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33873,"src":"3080:16:156","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33727,"name":"uint256","nodeType":"ElementaryTypeName","src":"3080:7:156","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33728,"nodeType":"ArrayTypeName","src":"3080:9:156","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3061:36:156"},"scope":33874,"src":"2964:1046:156","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":33875,"src":"1174:2838:156","usedErrors":[]}],"src":"37:3976:156"},"id":156},"contracts/misc/WrappedTokenGatewayV3.sol":{"ast":{"absolutePath":"contracts/misc/WrappedTokenGatewayV3.sol","exportedSymbols":{"DataTypes":[21633],"DataTypesHelper":[31153],"GPv2SafeERC20":[118],"IAToken":[3861],"IERC20":[1442],"IPool":[4860],"IWETH":[7434],"IWrappedTokenGatewayV3":[34909],"Ownable":[1573],"ReserveConfiguration":[11857],"UserConfiguration":[12368],"WrappedTokenGatewayV3":[34431]},"id":34432,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":33876,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:157"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol","id":33878,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34432,"sourceUnit":1574,"src":"63:96:157","symbolAliases":[{"foreign":{"id":33877,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:7:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","id":33880,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34432,"sourceUnit":1443,"src":"160:94:157","symbolAliases":[{"foreign":{"id":33879,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"168:6:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":33882,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34432,"sourceUnit":119,"src":"255:102:157","symbolAliases":[{"foreign":{"id":33881,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"263:13:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/misc/interfaces/IWETH.sol","file":"@aave/core-v3/contracts/misc/interfaces/IWETH.sol","id":33884,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34432,"sourceUnit":7435,"src":"358:72:157","symbolAliases":[{"foreign":{"id":33883,"name":"IWETH","nodeType":"Identifier","overloadedDeclarations":[],"src":"366:5:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPool.sol","file":"@aave/core-v3/contracts/interfaces/IPool.sol","id":33886,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34432,"sourceUnit":4861,"src":"431:67:157","symbolAliases":[{"foreign":{"id":33885,"name":"IPool","nodeType":"Identifier","overloadedDeclarations":[],"src":"439:5:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IAToken.sol","file":"@aave/core-v3/contracts/interfaces/IAToken.sol","id":33888,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34432,"sourceUnit":3862,"src":"499:71:157","symbolAliases":[{"foreign":{"id":33887,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"507:7:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol","file":"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol","id":33890,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34432,"sourceUnit":11858,"src":"571:119:157","symbolAliases":[{"foreign":{"id":33889,"name":"ReserveConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"579:20:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol","file":"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol","id":33892,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34432,"sourceUnit":12369,"src":"691:113:157","symbolAliases":[{"foreign":{"id":33891,"name":"UserConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"src":"699:17:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","file":"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol","id":33894,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34432,"sourceUnit":21634,"src":"805:89:157","symbolAliases":[{"foreign":{"id":33893,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"813:9:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/misc/interfaces/IWrappedTokenGatewayV3.sol","file":"./interfaces/IWrappedTokenGatewayV3.sol","id":33896,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34432,"sourceUnit":34910,"src":"895:79:157","symbolAliases":[{"foreign":{"id":33895,"name":"IWrappedTokenGatewayV3","nodeType":"Identifier","overloadedDeclarations":[],"src":"903:22:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/libraries/DataTypesHelper.sol","file":"../libraries/DataTypesHelper.sol","id":33898,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34432,"sourceUnit":31154,"src":"975:65:157","symbolAliases":[{"foreign":{"id":33897,"name":"DataTypesHelper","nodeType":"Identifier","overloadedDeclarations":[],"src":"983:15:157","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":33900,"name":"IWrappedTokenGatewayV3","nodeType":"IdentifierPath","referencedDeclaration":34909,"src":"1280:22:157"},"id":33901,"nodeType":"InheritanceSpecifier","src":"1280:22:157"},{"baseName":{"id":33902,"name":"Ownable","nodeType":"IdentifierPath","referencedDeclaration":1573,"src":"1304:7:157"},"id":33903,"nodeType":"InheritanceSpecifier","src":"1304:7:157"}],"canonicalName":"WrappedTokenGatewayV3","contractDependencies":[],"contractKind":"contract","documentation":{"id":33899,"nodeType":"StructuredDocumentation","src":"1042:203:157","text":" @dev This contract is an upgrade of the WrappedTokenGatewayV3 contract, with immutable pool address.\n This contract keeps the same interface of the deprecated WrappedTokenGatewayV3 contract."},"fullyImplemented":true,"id":34431,"linearizedBaseContracts":[34431,1573,748,34909],"name":"WrappedTokenGatewayV3","nameLocation":"1255:21:157","nodeType":"ContractDefinition","nodes":[{"id":33907,"libraryName":{"id":33904,"name":"ReserveConfiguration","nodeType":"IdentifierPath","referencedDeclaration":11857,"src":"1322:20:157"},"nodeType":"UsingForDirective","src":"1316:65:157","typeName":{"id":33906,"nodeType":"UserDefinedTypeName","pathNode":{"id":33905,"name":"DataTypes.ReserveConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21318,"src":"1347:33:157"},"referencedDeclaration":21318,"src":"1347:33:157","typeDescriptions":{"typeIdentifier":"t_struct$_ReserveConfigurationMap_$21318_storage_ptr","typeString":"struct DataTypes.ReserveConfigurationMap"}}},{"id":33911,"libraryName":{"id":33908,"name":"UserConfiguration","nodeType":"IdentifierPath","referencedDeclaration":12368,"src":"1390:17:157"},"nodeType":"UsingForDirective","src":"1384:59:157","typeName":{"id":33910,"nodeType":"UserDefinedTypeName","pathNode":{"id":33909,"name":"DataTypes.UserConfigurationMap","nodeType":"IdentifierPath","referencedDeclaration":21322,"src":"1412:30:157"},"referencedDeclaration":21322,"src":"1412:30:157","typeDescriptions":{"typeIdentifier":"t_struct$_UserConfigurationMap_$21322_storage_ptr","typeString":"struct DataTypes.UserConfigurationMap"}}},{"id":33915,"libraryName":{"id":33912,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"1452:13:157"},"nodeType":"UsingForDirective","src":"1446:31:157","typeName":{"id":33914,"nodeType":"UserDefinedTypeName","pathNode":{"id":33913,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1470:6:157"},"referencedDeclaration":1442,"src":"1470:6:157","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"constant":false,"id":33918,"mutability":"immutable","name":"WETH","nameLocation":"1506:4:157","nodeType":"VariableDeclaration","scope":34431,"src":"1481:29:157","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"},"typeName":{"id":33917,"nodeType":"UserDefinedTypeName","pathNode":{"id":33916,"name":"IWETH","nodeType":"IdentifierPath","referencedDeclaration":7434,"src":"1481:5:157"},"referencedDeclaration":7434,"src":"1481:5:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}},"visibility":"internal"},{"constant":false,"id":33921,"mutability":"immutable","name":"POOL","nameLocation":"1539:4:157","nodeType":"VariableDeclaration","scope":34431,"src":"1514:29:157","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":33920,"nodeType":"UserDefinedTypeName","pathNode":{"id":33919,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"1514:5:157"},"referencedDeclaration":4860,"src":"1514:5:157","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"},{"body":{"id":33961,"nodeType":"Block","src":"1820:135:157","statements":[{"expression":{"id":33936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33932,"name":"WETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33918,"src":"1826:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":33934,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33924,"src":"1839:4:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":33933,"name":"IWETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7434,"src":"1833:5:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWETH_$7434_$","typeString":"type(contract IWETH)"}},"id":33935,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1833:11:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}},"src":"1826:18:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}},"id":33937,"nodeType":"ExpressionStatement","src":"1826:18:157"},{"expression":{"id":33940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33938,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33921,"src":"1850:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33939,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33929,"src":"1857:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"src":"1850:11:157","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":33941,"nodeType":"ExpressionStatement","src":"1850:11:157"},{"expression":{"arguments":[{"id":33943,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33926,"src":"1885:5:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":33942,"name":"transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1572,"src":"1867:17:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":33944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1867:24:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33945,"nodeType":"ExpressionStatement","src":"1867:24:157"},{"expression":{"arguments":[{"arguments":[{"id":33952,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33929,"src":"1925:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}],"id":33951,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1917:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":33950,"name":"address","nodeType":"ElementaryTypeName","src":"1917:7:157","typeDescriptions":{}}},"id":33953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1917:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"arguments":[{"id":33956,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1937:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":33955,"name":"uint256","nodeType":"ElementaryTypeName","src":"1937:7:157","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":33954,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1932:4:157","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":33957,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1932:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":33958,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"1932:17:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":33947,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33924,"src":"1903:4:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":33946,"name":"IWETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7434,"src":"1897:5:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWETH_$7434_$","typeString":"type(contract IWETH)"}},"id":33948,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1897:11:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}},"id":33949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":7422,"src":"1897:19:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":33959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1897:53:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33960,"nodeType":"ExpressionStatement","src":"1897:53:157"}]},"documentation":{"id":33922,"nodeType":"StructuredDocumentation","src":"1548:216:157","text":" @dev Sets the WETH address and the PoolAddressesProvider address. Infinite approves pool.\n @param weth Address of the Wrapped Ether contract\n @param owner Address of the owner of this contract*"},"id":33962,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":33930,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33924,"mutability":"mutable","name":"weth","nameLocation":"1787:4:157","nodeType":"VariableDeclaration","scope":33962,"src":"1779:12:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33923,"name":"address","nodeType":"ElementaryTypeName","src":"1779:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":33926,"mutability":"mutable","name":"owner","nameLocation":"1801:5:157","nodeType":"VariableDeclaration","scope":33962,"src":"1793:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33925,"name":"address","nodeType":"ElementaryTypeName","src":"1793:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":33929,"mutability":"mutable","name":"pool","nameLocation":"1814:4:157","nodeType":"VariableDeclaration","scope":33962,"src":"1808:10:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"},"typeName":{"id":33928,"nodeType":"UserDefinedTypeName","pathNode":{"id":33927,"name":"IPool","nodeType":"IdentifierPath","referencedDeclaration":4860,"src":"1808:5:157"},"referencedDeclaration":4860,"src":"1808:5:157","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"visibility":"internal"}],"src":"1778:41:157"},"returnParameters":{"id":33931,"nodeType":"ParameterList","parameters":[],"src":"1820:0:157"},"scope":34431,"src":"1767:188:157","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[34860],"body":{"id":33994,"nodeType":"Block","src":"2400:113:157","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"argumentTypes":[],"expression":{"id":33973,"name":"WETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33918,"src":"2406:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}},"id":33975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"deposit","nodeType":"MemberAccess","referencedDeclaration":7408,"src":"2406:12:157","typeDescriptions":{"typeIdentifier":"t_function_external_payable$__$returns$__$","typeString":"function () payable external"}},"id":33978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":33976,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2426:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":33977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"2426:9:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"2406:30:157","typeDescriptions":{"typeIdentifier":"t_function_external_payable$__$returns$__$value","typeString":"function () payable external"}},"id":33979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2406:32:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33980,"nodeType":"ExpressionStatement","src":"2406:32:157"},{"expression":{"arguments":[{"arguments":[{"id":33986,"name":"WETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33918,"src":"2465:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}],"id":33985,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2457:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":33984,"name":"address","nodeType":"ElementaryTypeName","src":"2457:7:157","typeDescriptions":{}}},"id":33987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2457:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":33988,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2472:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":33989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"2472:9:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":33990,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33967,"src":"2483:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":33991,"name":"referralCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33969,"src":"2495:12:157","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint16","typeString":"uint16"}],"expression":{"id":33981,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33921,"src":"2444:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":33983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"deposit","nodeType":"MemberAccess","referencedDeclaration":4859,"src":"2444:12:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint16_$returns$__$","typeString":"function (address,uint256,address,uint16) external"}},"id":33992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2444:64:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33993,"nodeType":"ExpressionStatement","src":"2444:64:157"}]},"documentation":{"id":33963,"nodeType":"StructuredDocumentation","src":"1959:342:157","text":" @dev deposits WETH into the reserve, using native ETH. A corresponding amount of the overlying asset (aTokens)\n is minted.\n @param onBehalfOf address of the user who will receive the aTokens representing the deposit\n @param referralCode integrators are assigned a referral code and can potentially receive rewards.*"},"functionSelector":"474cf53d","id":33995,"implemented":true,"kind":"function","modifiers":[],"name":"depositETH","nameLocation":"2313:10:157","nodeType":"FunctionDefinition","overrides":{"id":33971,"nodeType":"OverrideSpecifier","overrides":[],"src":"2391:8:157"},"parameters":{"id":33970,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33965,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33995,"src":"2324:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33964,"name":"address","nodeType":"ElementaryTypeName","src":"2324:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":33967,"mutability":"mutable","name":"onBehalfOf","nameLocation":"2341:10:157","nodeType":"VariableDeclaration","scope":33995,"src":"2333:18:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33966,"name":"address","nodeType":"ElementaryTypeName","src":"2333:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":33969,"mutability":"mutable","name":"referralCode","nameLocation":"2360:12:157","nodeType":"VariableDeclaration","scope":33995,"src":"2353:19:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":33968,"name":"uint16","nodeType":"ElementaryTypeName","src":"2353:6:157","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"2323:50:157"},"returnParameters":{"id":33972,"nodeType":"ParameterList","parameters":[],"src":"2400:0:157"},"scope":34431,"src":"2304:209:157","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[34869],"body":{"id":34082,"nodeType":"Block","src":"2792:554:157","statements":[{"assignments":[34008],"declarations":[{"constant":false,"id":34008,"mutability":"mutable","name":"aWETH","nameLocation":"2806:5:157","nodeType":"VariableDeclaration","scope":34082,"src":"2798:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"},"typeName":{"id":34007,"nodeType":"UserDefinedTypeName","pathNode":{"id":34006,"name":"IAToken","nodeType":"IdentifierPath","referencedDeclaration":3861,"src":"2798:7:157"},"referencedDeclaration":3861,"src":"2798:7:157","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"visibility":"internal"}],"id":34019,"initialValue":{"arguments":[{"expression":{"arguments":[{"arguments":[{"id":34014,"name":"WETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33918,"src":"2850:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}],"id":34013,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2842:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":34012,"name":"address","nodeType":"ElementaryTypeName","src":"2842:7:157","typeDescriptions":{}}},"id":34015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2842:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":34010,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33921,"src":"2822:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":34011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4710,"src":"2822:19:157","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$21315_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":34016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2822:34:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":34017,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"2822:48:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":34009,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3861,"src":"2814:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3861_$","typeString":"type(contract IAToken)"}},"id":34018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2814:57:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"nodeType":"VariableDeclarationStatement","src":"2798:73:157"},{"assignments":[34021],"declarations":[{"constant":false,"id":34021,"mutability":"mutable","name":"userBalance","nameLocation":"2885:11:157","nodeType":"VariableDeclaration","scope":34082,"src":"2877:19:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34020,"name":"uint256","nodeType":"ElementaryTypeName","src":"2877:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34027,"initialValue":{"arguments":[{"expression":{"id":34024,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2915:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":34025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2915:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":34022,"name":"aWETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34008,"src":"2899:5:157","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":34023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"2899:15:157","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":34026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2899:27:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2877:49:157"},{"assignments":[34029],"declarations":[{"constant":false,"id":34029,"mutability":"mutable","name":"amountToWithdraw","nameLocation":"2940:16:157","nodeType":"VariableDeclaration","scope":34082,"src":"2932:24:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34028,"name":"uint256","nodeType":"ElementaryTypeName","src":"2932:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34031,"initialValue":{"id":34030,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34000,"src":"2959:6:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2932:33:157"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34032,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34000,"src":"3051:6:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":34035,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3066:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":34034,"name":"uint256","nodeType":"ElementaryTypeName","src":"3066:7:157","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":34033,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3061:4:157","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":34036,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3061:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":34037,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"3061:17:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3051:27:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":34044,"nodeType":"IfStatement","src":"3047:78:157","trueBody":{"id":34043,"nodeType":"Block","src":"3080:45:157","statements":[{"expression":{"id":34041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34039,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34029,"src":"3088:16:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":34040,"name":"userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34021,"src":"3107:11:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3088:30:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34042,"nodeType":"ExpressionStatement","src":"3088:30:157"}]}},{"expression":{"arguments":[{"expression":{"id":34048,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3149:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":34049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3149:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":34052,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3169:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_WrappedTokenGatewayV3_$34431","typeString":"contract WrappedTokenGatewayV3"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_WrappedTokenGatewayV3_$34431","typeString":"contract WrappedTokenGatewayV3"}],"id":34051,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3161:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":34050,"name":"address","nodeType":"ElementaryTypeName","src":"3161:7:157","typeDescriptions":{}}},"id":34053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3161:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":34054,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34029,"src":"3176:16:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":34045,"name":"aWETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34008,"src":"3130:5:157","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":34047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":1423,"src":"3130:18:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":34055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3130:63:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":34056,"nodeType":"ExpressionStatement","src":"3130:63:157"},{"expression":{"arguments":[{"arguments":[{"id":34062,"name":"WETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33918,"src":"3221:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}],"id":34061,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3213:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":34060,"name":"address","nodeType":"ElementaryTypeName","src":"3213:7:157","typeDescriptions":{}}},"id":34063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3213:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":34064,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34029,"src":"3228:16:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":34067,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3254:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_WrappedTokenGatewayV3_$34431","typeString":"contract WrappedTokenGatewayV3"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_WrappedTokenGatewayV3_$34431","typeString":"contract WrappedTokenGatewayV3"}],"id":34066,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3246:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":34065,"name":"address","nodeType":"ElementaryTypeName","src":"3246:7:157","typeDescriptions":{}}},"id":34068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3246:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":34057,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33921,"src":"3199:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":34059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"withdraw","nodeType":"MemberAccess","referencedDeclaration":4477,"src":"3199:13:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) external returns (uint256)"}},"id":34069,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3199:61:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34070,"nodeType":"ExpressionStatement","src":"3199:61:157"},{"expression":{"arguments":[{"id":34074,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34029,"src":"3280:16:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":34071,"name":"WETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33918,"src":"3266:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}},"id":34073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"withdraw","nodeType":"MemberAccess","referencedDeclaration":7413,"src":"3266:13:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":34075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3266:31:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34076,"nodeType":"ExpressionStatement","src":"3266:31:157"},{"expression":{"arguments":[{"id":34078,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34002,"src":"3320:2:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":34079,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34029,"src":"3324:16:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":34077,"name":"_safeTransferETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34356,"src":"3303:16:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":34080,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3303:38:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34081,"nodeType":"ExpressionStatement","src":"3303:38:157"}]},"documentation":{"id":33996,"nodeType":"StructuredDocumentation","src":"2517:196:157","text":" @dev withdraws the WETH _reserves of msg.sender.\n @param amount amount of aWETH to withdraw and receive native ETH\n @param to address of the user who will receive native ETH"},"functionSelector":"80500d20","id":34083,"implemented":true,"kind":"function","modifiers":[],"name":"withdrawETH","nameLocation":"2725:11:157","nodeType":"FunctionDefinition","overrides":{"id":34004,"nodeType":"OverrideSpecifier","overrides":[],"src":"2783:8:157"},"parameters":{"id":34003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33998,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34083,"src":"2737:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33997,"name":"address","nodeType":"ElementaryTypeName","src":"2737:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34000,"mutability":"mutable","name":"amount","nameLocation":"2754:6:157","nodeType":"VariableDeclaration","scope":34083,"src":"2746:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33999,"name":"uint256","nodeType":"ElementaryTypeName","src":"2746:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34002,"mutability":"mutable","name":"to","nameLocation":"2770:2:157","nodeType":"VariableDeclaration","scope":34083,"src":"2762:10:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34001,"name":"address","nodeType":"ElementaryTypeName","src":"2762:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2736:37:157"},"returnParameters":{"id":34005,"nodeType":"ParameterList","parameters":[],"src":"2792:0:157"},"scope":34431,"src":"2716:630:157","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[34880],"body":{"id":34177,"nodeType":"Block","src":"3822:693:157","statements":[{"assignments":[34097,34099],"declarations":[{"constant":false,"id":34097,"mutability":"mutable","name":"stableDebt","nameLocation":"3837:10:157","nodeType":"VariableDeclaration","scope":34177,"src":"3829:18:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34096,"name":"uint256","nodeType":"ElementaryTypeName","src":"3829:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34099,"mutability":"mutable","name":"variableDebt","nameLocation":"3857:12:157","nodeType":"VariableDeclaration","scope":34177,"src":"3849:20:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34098,"name":"uint256","nodeType":"ElementaryTypeName","src":"3849:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34111,"initialValue":{"arguments":[{"id":34102,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34092,"src":"3915:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":34107,"name":"WETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33918,"src":"3961:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}],"id":34106,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3953:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":34105,"name":"address","nodeType":"ElementaryTypeName","src":"3953:7:157","typeDescriptions":{}}},"id":34108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3953:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":34103,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33921,"src":"3933:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":34104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4710,"src":"3933:19:157","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$21315_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":34109,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3933:34:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}],"expression":{"id":34100,"name":"DataTypesHelper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31153,"src":"3873:15:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypesHelper_$31153_$","typeString":"type(library DataTypesHelper)"}},"id":34101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getUserCurrentDebt","nodeType":"MemberAccess","referencedDeclaration":31152,"src":"3873:34:157","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_struct$_ReserveData_$21315_memory_ptr_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,struct DataTypes.ReserveData memory) view returns (uint256,uint256)"}},"id":34110,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3873:100:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"3828:145:157"},{"assignments":[34113],"declarations":[{"constant":false,"id":34113,"mutability":"mutable","name":"paybackAmount","nameLocation":"3988:13:157","nodeType":"VariableDeclaration","scope":34177,"src":"3980:21:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34112,"name":"uint256","nodeType":"ElementaryTypeName","src":"3980:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34125,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"},"id":34121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":34116,"name":"rateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34090,"src":"4031:8:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":34114,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"4004:9:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":34115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"4004:26:157","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":34117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4004:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":34118,"name":"DataTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21633,"src":"4050:9:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_DataTypes_$21633_$","typeString":"type(library DataTypes)"}},"id":34119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"InterestRateMode","nodeType":"MemberAccess","referencedDeclaration":21337,"src":"4050:26:157","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_InterestRateMode_$21337_$","typeString":"type(enum DataTypes.InterestRateMode)"}},"id":34120,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"STABLE","nodeType":"MemberAccess","referencedDeclaration":21335,"src":"4050:33:157","typeDescriptions":{"typeIdentifier":"t_enum$_InterestRateMode_$21337","typeString":"enum DataTypes.InterestRateMode"}},"src":"4004:79:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":34123,"name":"variableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34099,"src":"4111:12:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"4004:119:157","trueExpression":{"id":34122,"name":"stableDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34097,"src":"4092:10:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3980:143:157"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34126,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34088,"src":"4134:6:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":34127,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34113,"src":"4143:13:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4134:22:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":34134,"nodeType":"IfStatement","src":"4130:65:157","trueBody":{"id":34133,"nodeType":"Block","src":"4158:37:157","statements":[{"expression":{"id":34131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34129,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34113,"src":"4166:13:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":34130,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34088,"src":"4182:6:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4166:22:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34132,"nodeType":"ExpressionStatement","src":"4166:22:157"}]}},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":34136,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4208:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":34137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"4208:9:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":34138,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34113,"src":"4221:13:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4208:26:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6d73672e76616c7565206973206c657373207468616e2072657061796d656e7420616d6f756e74","id":34140,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4236:41:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_f3cb6abf841e7654d9fcd9bcef0bf0797905f8c05be5c0ec9482725dfffa0909","typeString":"literal_string \"msg.value is less than repayment amount\""},"value":"msg.value is less than repayment amount"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f3cb6abf841e7654d9fcd9bcef0bf0797905f8c05be5c0ec9482725dfffa0909","typeString":"literal_string \"msg.value is less than repayment amount\""}],"id":34135,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4200:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":34141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4200:78:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34142,"nodeType":"ExpressionStatement","src":"4200:78:157"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"argumentTypes":[],"expression":{"id":34143,"name":"WETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33918,"src":"4284:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}},"id":34145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"deposit","nodeType":"MemberAccess","referencedDeclaration":7408,"src":"4284:12:157","typeDescriptions":{"typeIdentifier":"t_function_external_payable$__$returns$__$","typeString":"function () payable external"}},"id":34147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":34146,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34113,"src":"4304:13:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"4284:34:157","typeDescriptions":{"typeIdentifier":"t_function_external_payable$__$returns$__$value","typeString":"function () payable external"}},"id":34148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4284:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34149,"nodeType":"ExpressionStatement","src":"4284:36:157"},{"expression":{"arguments":[{"arguments":[{"id":34155,"name":"WETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33918,"src":"4345:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}],"id":34154,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4337:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":34153,"name":"address","nodeType":"ElementaryTypeName","src":"4337:7:157","typeDescriptions":{}}},"id":34156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4337:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":34157,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4352:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":34158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"4352:9:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":34159,"name":"rateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34090,"src":"4363:8:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":34160,"name":"onBehalfOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34092,"src":"4373:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":34150,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33921,"src":"4326:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":34152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"repay","nodeType":"MemberAccess","referencedDeclaration":4505,"src":"4326:10:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,uint256,address) external returns (uint256)"}},"id":34161,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4326:58:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34162,"nodeType":"ExpressionStatement","src":"4326:58:157"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":34163,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4428:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":34164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"4428:9:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":34165,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34113,"src":"4440:13:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4428:25:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":34176,"nodeType":"IfStatement","src":"4424:86:157","trueBody":{"expression":{"arguments":[{"expression":{"id":34168,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4472:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":34169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"4472:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":34170,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4484:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":34171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"value","nodeType":"MemberAccess","src":"4484:9:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":34172,"name":"paybackAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34113,"src":"4496:13:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4484:25:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":34167,"name":"_safeTransferETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34356,"src":"4455:16:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":34174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4455:55:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34175,"nodeType":"ExpressionStatement","src":"4455:55:157"}}]},"documentation":{"id":34084,"nodeType":"StructuredDocumentation","src":"3350:342:157","text":" @dev repays a borrow on the WETH reserve, for the specified amount (or for the whole amount, if uint256(-1) is specified).\n @param amount the amount to repay, or uint256(-1) if the user wants to repay everything\n @param rateMode the rate mode to repay\n @param onBehalfOf the address for which msg.sender is repaying"},"functionSelector":"02c5fcf8","id":34178,"implemented":true,"kind":"function","modifiers":[],"name":"repayETH","nameLocation":"3704:8:157","nodeType":"FunctionDefinition","overrides":{"id":34094,"nodeType":"OverrideSpecifier","overrides":[],"src":"3813:8:157"},"parameters":{"id":34093,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34086,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34178,"src":"3718:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34085,"name":"address","nodeType":"ElementaryTypeName","src":"3718:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34088,"mutability":"mutable","name":"amount","nameLocation":"3739:6:157","nodeType":"VariableDeclaration","scope":34178,"src":"3731:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34087,"name":"uint256","nodeType":"ElementaryTypeName","src":"3731:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34090,"mutability":"mutable","name":"rateMode","nameLocation":"3759:8:157","nodeType":"VariableDeclaration","scope":34178,"src":"3751:16:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34089,"name":"uint256","nodeType":"ElementaryTypeName","src":"3751:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34092,"mutability":"mutable","name":"onBehalfOf","nameLocation":"3781:10:157","nodeType":"VariableDeclaration","scope":34178,"src":"3773:18:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34091,"name":"address","nodeType":"ElementaryTypeName","src":"3773:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3712:83:157"},"returnParameters":{"id":34095,"nodeType":"ParameterList","parameters":[],"src":"3822:0:157"},"scope":34431,"src":"3695:820:157","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[34891],"body":{"id":34217,"nodeType":"Block","src":"5015:158:157","statements":[{"expression":{"arguments":[{"arguments":[{"id":34196,"name":"WETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33918,"src":"5041:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}],"id":34195,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5033:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":34194,"name":"address","nodeType":"ElementaryTypeName","src":"5033:7:157","typeDescriptions":{}}},"id":34197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5033:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":34198,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34183,"src":"5048:6:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":34199,"name":"interestRateMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34185,"src":"5056:16:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":34200,"name":"referralCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34187,"src":"5074:12:157","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},{"expression":{"id":34201,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5088:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":34202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5088:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint16","typeString":"uint16"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":34191,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33921,"src":"5021:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":34193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"borrow","nodeType":"MemberAccess","referencedDeclaration":4491,"src":"5021:11:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint16_$_t_address_$returns$__$","typeString":"function (address,uint256,uint256,uint16,address) external"}},"id":34203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5021:78:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34204,"nodeType":"ExpressionStatement","src":"5021:78:157"},{"expression":{"arguments":[{"id":34208,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34183,"src":"5119:6:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":34205,"name":"WETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33918,"src":"5105:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}},"id":34207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"withdraw","nodeType":"MemberAccess","referencedDeclaration":7413,"src":"5105:13:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":34209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5105:21:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34210,"nodeType":"ExpressionStatement","src":"5105:21:157"},{"expression":{"arguments":[{"expression":{"id":34212,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5149:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":34213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5149:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":34214,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34183,"src":"5161:6:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":34211,"name":"_safeTransferETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34356,"src":"5132:16:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":34215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5132:36:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34216,"nodeType":"ExpressionStatement","src":"5132:36:157"}]},"documentation":{"id":34179,"nodeType":"StructuredDocumentation","src":"4519:364:157","text":" @dev borrow WETH, unwraps to ETH and send both the ETH and DebtTokens to msg.sender, via `approveDelegation` and onBehalf argument in `Pool.borrow`.\n @param amount the amount of ETH to borrow\n @param interestRateMode the interest rate mode\n @param referralCode integrators are assigned a referral code and can potentially receive rewards"},"functionSelector":"66514c97","id":34218,"implemented":true,"kind":"function","modifiers":[],"name":"borrowETH","nameLocation":"4895:9:157","nodeType":"FunctionDefinition","overrides":{"id":34189,"nodeType":"OverrideSpecifier","overrides":[],"src":"5006:8:157"},"parameters":{"id":34188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34181,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34218,"src":"4910:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34180,"name":"address","nodeType":"ElementaryTypeName","src":"4910:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34183,"mutability":"mutable","name":"amount","nameLocation":"4931:6:157","nodeType":"VariableDeclaration","scope":34218,"src":"4923:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34182,"name":"uint256","nodeType":"ElementaryTypeName","src":"4923:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34185,"mutability":"mutable","name":"interestRateMode","nameLocation":"4951:16:157","nodeType":"VariableDeclaration","scope":34218,"src":"4943:24:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34184,"name":"uint256","nodeType":"ElementaryTypeName","src":"4943:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34187,"mutability":"mutable","name":"referralCode","nameLocation":"4980:12:157","nodeType":"VariableDeclaration","scope":34218,"src":"4973:19:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":34186,"name":"uint16","nodeType":"ElementaryTypeName","src":"4973:6:157","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"4904:92:157"},"returnParameters":{"id":34190,"nodeType":"ParameterList","parameters":[],"src":"5015:0:157"},"scope":34431,"src":"4886:287:157","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[34908],"body":{"id":34329,"nodeType":"Block","src":"5804:756:157","statements":[{"assignments":[34239],"declarations":[{"constant":false,"id":34239,"mutability":"mutable","name":"aWETH","nameLocation":"5818:5:157","nodeType":"VariableDeclaration","scope":34329,"src":"5810:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"},"typeName":{"id":34238,"nodeType":"UserDefinedTypeName","pathNode":{"id":34237,"name":"IAToken","nodeType":"IdentifierPath","referencedDeclaration":3861,"src":"5810:7:157"},"referencedDeclaration":3861,"src":"5810:7:157","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"visibility":"internal"}],"id":34250,"initialValue":{"arguments":[{"expression":{"arguments":[{"arguments":[{"id":34245,"name":"WETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33918,"src":"5862:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}],"id":34244,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5854:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":34243,"name":"address","nodeType":"ElementaryTypeName","src":"5854:7:157","typeDescriptions":{}}},"id":34246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5854:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":34241,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33921,"src":"5834:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":34242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getReserveData","nodeType":"MemberAccess","referencedDeclaration":4710,"src":"5834:19:157","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_ReserveData_$21315_memory_ptr_$","typeString":"function (address) view external returns (struct DataTypes.ReserveData memory)"}},"id":34247,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5834:34:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReserveData_$21315_memory_ptr","typeString":"struct DataTypes.ReserveData memory"}},"id":34248,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"aTokenAddress","nodeType":"MemberAccess","referencedDeclaration":21302,"src":"5834:48:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":34240,"name":"IAToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3861,"src":"5826:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAToken_$3861_$","typeString":"type(contract IAToken)"}},"id":34249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5826:57:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"nodeType":"VariableDeclarationStatement","src":"5810:73:157"},{"assignments":[34252],"declarations":[{"constant":false,"id":34252,"mutability":"mutable","name":"userBalance","nameLocation":"5897:11:157","nodeType":"VariableDeclaration","scope":34329,"src":"5889:19:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34251,"name":"uint256","nodeType":"ElementaryTypeName","src":"5889:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34258,"initialValue":{"arguments":[{"expression":{"id":34255,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5927:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":34256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5927:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":34253,"name":"aWETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34239,"src":"5911:5:157","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":34254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1381,"src":"5911:15:157","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":34257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5911:27:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5889:49:157"},{"assignments":[34260],"declarations":[{"constant":false,"id":34260,"mutability":"mutable","name":"amountToWithdraw","nameLocation":"5952:16:157","nodeType":"VariableDeclaration","scope":34329,"src":"5944:24:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34259,"name":"uint256","nodeType":"ElementaryTypeName","src":"5944:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34262,"initialValue":{"id":34261,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34223,"src":"5971:6:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5944:33:157"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34263,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34223,"src":"6072:6:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":34266,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6087:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":34265,"name":"uint256","nodeType":"ElementaryTypeName","src":"6087:7:157","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":34264,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6082:4:157","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":34267,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6082:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":34268,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"6082:17:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6072:27:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":34275,"nodeType":"IfStatement","src":"6068:78:157","trueBody":{"id":34274,"nodeType":"Block","src":"6101:45:157","statements":[{"expression":{"id":34272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34270,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34260,"src":"6109:16:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":34271,"name":"userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34252,"src":"6128:11:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6109:30:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34273,"nodeType":"ExpressionStatement","src":"6109:30:157"}]}},{"expression":{"arguments":[{"expression":{"id":34279,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6267:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":34280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"6267:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":34283,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6287:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_WrappedTokenGatewayV3_$34431","typeString":"contract WrappedTokenGatewayV3"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_WrappedTokenGatewayV3_$34431","typeString":"contract WrappedTokenGatewayV3"}],"id":34282,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6279:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":34281,"name":"address","nodeType":"ElementaryTypeName","src":"6279:7:157","typeDescriptions":{}}},"id":34284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6279:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":34285,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34223,"src":"6294:6:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":34286,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34227,"src":"6302:8:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":34287,"name":"permitV","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34229,"src":"6312:7:157","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":34288,"name":"permitR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34231,"src":"6321:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":34289,"name":"permitS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34233,"src":"6330:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":34276,"name":"aWETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34239,"src":"6254:5:157","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":34278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"permit","nodeType":"MemberAccess","referencedDeclaration":3824,"src":"6254:12:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (address,address,uint256,uint256,uint8,bytes32,bytes32) external"}},"id":34290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6254:84:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34291,"nodeType":"ExpressionStatement","src":"6254:84:157"},{"expression":{"arguments":[{"expression":{"id":34295,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6363:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":34296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"6363:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":34299,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6383:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_WrappedTokenGatewayV3_$34431","typeString":"contract WrappedTokenGatewayV3"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_WrappedTokenGatewayV3_$34431","typeString":"contract WrappedTokenGatewayV3"}],"id":34298,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6375:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":34297,"name":"address","nodeType":"ElementaryTypeName","src":"6375:7:157","typeDescriptions":{}}},"id":34300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6375:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":34301,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34260,"src":"6390:16:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":34292,"name":"aWETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34239,"src":"6344:5:157","typeDescriptions":{"typeIdentifier":"t_contract$_IAToken_$3861","typeString":"contract IAToken"}},"id":34294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":1423,"src":"6344:18:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":34302,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6344:63:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":34303,"nodeType":"ExpressionStatement","src":"6344:63:157"},{"expression":{"arguments":[{"arguments":[{"id":34309,"name":"WETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33918,"src":"6435:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}],"id":34308,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6427:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":34307,"name":"address","nodeType":"ElementaryTypeName","src":"6427:7:157","typeDescriptions":{}}},"id":34310,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6427:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":34311,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34260,"src":"6442:16:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":34314,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6468:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_WrappedTokenGatewayV3_$34431","typeString":"contract WrappedTokenGatewayV3"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_WrappedTokenGatewayV3_$34431","typeString":"contract WrappedTokenGatewayV3"}],"id":34313,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6460:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":34312,"name":"address","nodeType":"ElementaryTypeName","src":"6460:7:157","typeDescriptions":{}}},"id":34315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6460:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":34304,"name":"POOL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33921,"src":"6413:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IPool_$4860","typeString":"contract IPool"}},"id":34306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"withdraw","nodeType":"MemberAccess","referencedDeclaration":4477,"src":"6413:13:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) external returns (uint256)"}},"id":34316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6413:61:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34317,"nodeType":"ExpressionStatement","src":"6413:61:157"},{"expression":{"arguments":[{"id":34321,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34260,"src":"6494:16:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":34318,"name":"WETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33918,"src":"6480:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}},"id":34320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"withdraw","nodeType":"MemberAccess","referencedDeclaration":7413,"src":"6480:13:157","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":34322,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6480:31:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34323,"nodeType":"ExpressionStatement","src":"6480:31:157"},{"expression":{"arguments":[{"id":34325,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34225,"src":"6534:2:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":34326,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34260,"src":"6538:16:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":34324,"name":"_safeTransferETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34356,"src":"6517:16:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":34327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6517:38:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34328,"nodeType":"ExpressionStatement","src":"6517:38:157"}]},"documentation":{"id":34219,"nodeType":"StructuredDocumentation","src":"5177:439:157","text":" @dev withdraws the WETH _reserves of msg.sender.\n @param amount amount of aWETH to withdraw and receive native ETH\n @param to address of the user who will receive native ETH\n @param deadline validity deadline of permit and so depositWithPermit signature\n @param permitV V parameter of ERC712 permit sig\n @param permitR R parameter of ERC712 permit sig\n @param permitS S parameter of ERC712 permit sig"},"functionSelector":"d4c40b6c","id":34330,"implemented":true,"kind":"function","modifiers":[],"name":"withdrawETHWithPermit","nameLocation":"5628:21:157","nodeType":"FunctionDefinition","overrides":{"id":34235,"nodeType":"OverrideSpecifier","overrides":[],"src":"5795:8:157"},"parameters":{"id":34234,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34221,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34330,"src":"5655:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34220,"name":"address","nodeType":"ElementaryTypeName","src":"5655:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34223,"mutability":"mutable","name":"amount","nameLocation":"5676:6:157","nodeType":"VariableDeclaration","scope":34330,"src":"5668:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34222,"name":"uint256","nodeType":"ElementaryTypeName","src":"5668:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34225,"mutability":"mutable","name":"to","nameLocation":"5696:2:157","nodeType":"VariableDeclaration","scope":34330,"src":"5688:10:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34224,"name":"address","nodeType":"ElementaryTypeName","src":"5688:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34227,"mutability":"mutable","name":"deadline","nameLocation":"5712:8:157","nodeType":"VariableDeclaration","scope":34330,"src":"5704:16:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34226,"name":"uint256","nodeType":"ElementaryTypeName","src":"5704:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34229,"mutability":"mutable","name":"permitV","nameLocation":"5732:7:157","nodeType":"VariableDeclaration","scope":34330,"src":"5726:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":34228,"name":"uint8","nodeType":"ElementaryTypeName","src":"5726:5:157","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":34231,"mutability":"mutable","name":"permitR","nameLocation":"5753:7:157","nodeType":"VariableDeclaration","scope":34330,"src":"5745:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":34230,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5745:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":34233,"mutability":"mutable","name":"permitS","nameLocation":"5774:7:157","nodeType":"VariableDeclaration","scope":34330,"src":"5766:15:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":34232,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5766:7:157","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5649:136:157"},"returnParameters":{"id":34236,"nodeType":"ParameterList","parameters":[],"src":"5804:0:157"},"scope":34431,"src":"5619:941:157","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":34355,"nodeType":"Block","src":"6774:110:157","statements":[{"assignments":[34339,null],"declarations":[{"constant":false,"id":34339,"mutability":"mutable","name":"success","nameLocation":"6786:7:157","nodeType":"VariableDeclaration","scope":34355,"src":"6781:12:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":34338,"name":"bool","nodeType":"ElementaryTypeName","src":"6781:4:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":34349,"initialValue":{"arguments":[{"arguments":[{"hexValue":"30","id":34346,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6831:1:157","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":34345,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"6821:9:157","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":34344,"name":"bytes","nodeType":"ElementaryTypeName","src":"6825:5:157","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":34347,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6821:12:157","tryCall":false,"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":34340,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34333,"src":"6799:2:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":34341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"call","nodeType":"MemberAccess","src":"6799:7:157","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":34343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":34342,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34335,"src":"6814:5:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"6799:21:157","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":34348,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6799:35:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"6780:54:157"},{"expression":{"arguments":[{"id":34351,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34339,"src":"6848:7:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4554485f5452414e534645525f4641494c4544","id":34352,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6857:21:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_d383913ea1996930a2623a0d739b8fc033c734c1d71d4759d3ccba1d3a719c29","typeString":"literal_string \"ETH_TRANSFER_FAILED\""},"value":"ETH_TRANSFER_FAILED"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d383913ea1996930a2623a0d739b8fc033c734c1d71d4759d3ccba1d3a719c29","typeString":"literal_string \"ETH_TRANSFER_FAILED\""}],"id":34350,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6840:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":34353,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6840:39:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34354,"nodeType":"ExpressionStatement","src":"6840:39:157"}]},"documentation":{"id":34331,"nodeType":"StructuredDocumentation","src":"6564:145:157","text":" @dev transfer ETH to an address, revert if it fails.\n @param to recipient of the transfer\n @param value the amount to send"},"id":34356,"implemented":true,"kind":"function","modifiers":[],"name":"_safeTransferETH","nameLocation":"6721:16:157","nodeType":"FunctionDefinition","parameters":{"id":34336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34333,"mutability":"mutable","name":"to","nameLocation":"6746:2:157","nodeType":"VariableDeclaration","scope":34356,"src":"6738:10:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34332,"name":"address","nodeType":"ElementaryTypeName","src":"6738:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34335,"mutability":"mutable","name":"value","nameLocation":"6758:5:157","nodeType":"VariableDeclaration","scope":34356,"src":"6750:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34334,"name":"uint256","nodeType":"ElementaryTypeName","src":"6750:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6737:27:157"},"returnParameters":{"id":34337,"nodeType":"ParameterList","parameters":[],"src":"6774:0:157"},"scope":34431,"src":"6712:172:157","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":34376,"nodeType":"Block","src":"7251:49:157","statements":[{"expression":{"arguments":[{"id":34372,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34361,"src":"7284:2:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":34373,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34363,"src":"7288:6:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":34369,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34359,"src":"7264:5:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":34368,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"7257:6:157","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":34370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7257:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":34371,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":78,"src":"7257:26:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":34374,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7257:38:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34375,"nodeType":"ExpressionStatement","src":"7257:38:157"}]},"documentation":{"id":34357,"nodeType":"StructuredDocumentation","src":"6888:266:157","text":" @dev transfer ERC20 from the utility contract, for ERC20 recovery in case of stuck tokens due\n direct transfers to the contract address.\n @param token token to transfer\n @param to recipient of the transfer\n @param amount amount to send"},"functionSelector":"a3d5b255","id":34377,"implemented":true,"kind":"function","modifiers":[{"id":34366,"kind":"modifierInvocation","modifierName":{"id":34365,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"7241:9:157"},"nodeType":"ModifierInvocation","src":"7241:9:157"}],"name":"emergencyTokenTransfer","nameLocation":"7166:22:157","nodeType":"FunctionDefinition","parameters":{"id":34364,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34359,"mutability":"mutable","name":"token","nameLocation":"7197:5:157","nodeType":"VariableDeclaration","scope":34377,"src":"7189:13:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34358,"name":"address","nodeType":"ElementaryTypeName","src":"7189:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34361,"mutability":"mutable","name":"to","nameLocation":"7212:2:157","nodeType":"VariableDeclaration","scope":34377,"src":"7204:10:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34360,"name":"address","nodeType":"ElementaryTypeName","src":"7204:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34363,"mutability":"mutable","name":"amount","nameLocation":"7224:6:157","nodeType":"VariableDeclaration","scope":34377,"src":"7216:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34362,"name":"uint256","nodeType":"ElementaryTypeName","src":"7216:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7188:43:157"},"returnParameters":{"id":34367,"nodeType":"ParameterList","parameters":[],"src":"7251:0:157"},"scope":34431,"src":"7157:143:157","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":34392,"nodeType":"Block","src":"7679:39:157","statements":[{"expression":{"arguments":[{"id":34388,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34380,"src":"7702:2:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":34389,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34382,"src":"7706:6:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":34387,"name":"_safeTransferETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34356,"src":"7685:16:157","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":34390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7685:28:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34391,"nodeType":"ExpressionStatement","src":"7685:28:157"}]},"documentation":{"id":34378,"nodeType":"StructuredDocumentation","src":"7304:293:157","text":" @dev transfer native Ether from the utility contract, for native Ether recovery in case of stuck Ether\n due to selfdestructs or ether transfers to the pre-computed contract address before deployment.\n @param to recipient of the transfer\n @param amount amount to send"},"functionSelector":"eed88b8d","id":34393,"implemented":true,"kind":"function","modifiers":[{"id":34385,"kind":"modifierInvocation","modifierName":{"id":34384,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"7669:9:157"},"nodeType":"ModifierInvocation","src":"7669:9:157"}],"name":"emergencyEtherTransfer","nameLocation":"7609:22:157","nodeType":"FunctionDefinition","parameters":{"id":34383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34380,"mutability":"mutable","name":"to","nameLocation":"7640:2:157","nodeType":"VariableDeclaration","scope":34393,"src":"7632:10:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34379,"name":"address","nodeType":"ElementaryTypeName","src":"7632:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34382,"mutability":"mutable","name":"amount","nameLocation":"7652:6:157","nodeType":"VariableDeclaration","scope":34393,"src":"7644:14:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34381,"name":"uint256","nodeType":"ElementaryTypeName","src":"7644:7:157","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7631:28:157"},"returnParameters":{"id":34386,"nodeType":"ParameterList","parameters":[],"src":"7679:0:157"},"scope":34431,"src":"7600:118:157","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":34404,"nodeType":"Block","src":"7849:31:157","statements":[{"expression":{"arguments":[{"id":34401,"name":"WETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33918,"src":"7870:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}],"id":34400,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7862:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":34399,"name":"address","nodeType":"ElementaryTypeName","src":"7862:7:157","typeDescriptions":{}}},"id":34402,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7862:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":34398,"id":34403,"nodeType":"Return","src":"7855:20:157"}]},"documentation":{"id":34394,"nodeType":"StructuredDocumentation","src":"7722:66:157","text":" @dev Get WETH address used by WrappedTokenGatewayV3"},"functionSelector":"affa8817","id":34405,"implemented":true,"kind":"function","modifiers":[],"name":"getWETHAddress","nameLocation":"7800:14:157","nodeType":"FunctionDefinition","parameters":{"id":34395,"nodeType":"ParameterList","parameters":[],"src":"7814:2:157"},"returnParameters":{"id":34398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34397,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34405,"src":"7840:7:157","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34396,"name":"address","nodeType":"ElementaryTypeName","src":"7840:7:157","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7839:9:157"},"scope":34431,"src":"7791:89:157","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":34420,"nodeType":"Block","src":"8041:70:157","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":34416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":34410,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8055:3:157","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":34411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"8055:10:157","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":34414,"name":"WETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33918,"src":"8077:4:157","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWETH_$7434","typeString":"contract IWETH"}],"id":34413,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8069:7:157","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":34412,"name":"address","nodeType":"ElementaryTypeName","src":"8069:7:157","typeDescriptions":{}}},"id":34415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8069:13:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8055:27:157","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"52656365697665206e6f7420616c6c6f776564","id":34417,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8084:21:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_27ee2b783d4c8df49ab77e716dbb31d00957b706569e1f6344f0cb575662d45e","typeString":"literal_string \"Receive not allowed\""},"value":"Receive not allowed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_27ee2b783d4c8df49ab77e716dbb31d00957b706569e1f6344f0cb575662d45e","typeString":"literal_string \"Receive not allowed\""}],"id":34409,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"8047:7:157","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":34418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8047:59:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34419,"nodeType":"ExpressionStatement","src":"8047:59:157"}]},"documentation":{"id":34406,"nodeType":"StructuredDocumentation","src":"7884:127:157","text":" @dev Only WETH contract is allowed to transfer ETH here. Prevent other addresses to send Ether to this contract."},"id":34421,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":34407,"nodeType":"ParameterList","parameters":[],"src":"8021:2:157"},"returnParameters":{"id":34408,"nodeType":"ParameterList","parameters":[],"src":"8041:0:157"},"scope":34431,"src":"8014:97:157","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":34429,"nodeType":"Block","src":"8187:41:157","statements":[{"expression":{"arguments":[{"hexValue":"46616c6c6261636b206e6f7420616c6c6f776564","id":34426,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8200:22:157","typeDescriptions":{"typeIdentifier":"t_stringliteral_0fbc9324f34b5b3dd5cc07188bb4ac8875999da3789a00b0de2cd5733ed30268","typeString":"literal_string \"Fallback not allowed\""},"value":"Fallback not allowed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_0fbc9324f34b5b3dd5cc07188bb4ac8875999da3789a00b0de2cd5733ed30268","typeString":"literal_string \"Fallback not allowed\""}],"id":34425,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"8193:6:157","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":34427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8193:30:157","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34428,"nodeType":"ExpressionStatement","src":"8193:30:157"}]},"documentation":{"id":34422,"nodeType":"StructuredDocumentation","src":"8115:41:157","text":" @dev Revert fallback calls"},"id":34430,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":34423,"nodeType":"ParameterList","parameters":[],"src":"8167:2:157"},"returnParameters":{"id":34424,"nodeType":"ParameterList","parameters":[],"src":"8187:0:157"},"scope":34431,"src":"8159:69:157","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":34432,"src":"1246:6984:157","usedErrors":[]}],"src":"37:8194:157"},"id":157},"contracts/misc/interfaces/IEACAggregatorProxy.sol":{"ast":{"absolutePath":"contracts/misc/interfaces/IEACAggregatorProxy.sol","exportedSymbols":{"IEACAggregatorProxy":[34482]},"id":34483,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":34433,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:158"},{"abstract":false,"baseContracts":[],"canonicalName":"IEACAggregatorProxy","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":34482,"linearizedBaseContracts":[34482],"name":"IEACAggregatorProxy","nameLocation":"73:19:158","nodeType":"ContractDefinition","nodes":[{"functionSelector":"313ce567","id":34438,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"106:8:158","nodeType":"FunctionDefinition","parameters":{"id":34434,"nodeType":"ParameterList","parameters":[],"src":"114:2:158"},"returnParameters":{"id":34437,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34436,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34438,"src":"140:5:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":34435,"name":"uint8","nodeType":"ElementaryTypeName","src":"140:5:158","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"139:7:158"},"scope":34482,"src":"97:50:158","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"50d25bcd","id":34443,"implemented":false,"kind":"function","modifiers":[],"name":"latestAnswer","nameLocation":"160:12:158","nodeType":"FunctionDefinition","parameters":{"id":34439,"nodeType":"ParameterList","parameters":[],"src":"172:2:158"},"returnParameters":{"id":34442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34441,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34443,"src":"198:6:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":34440,"name":"int256","nodeType":"ElementaryTypeName","src":"198:6:158","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"197:8:158"},"scope":34482,"src":"151:55:158","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"8205bf6a","id":34448,"implemented":false,"kind":"function","modifiers":[],"name":"latestTimestamp","nameLocation":"219:15:158","nodeType":"FunctionDefinition","parameters":{"id":34444,"nodeType":"ParameterList","parameters":[],"src":"234:2:158"},"returnParameters":{"id":34447,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34446,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34448,"src":"260:7:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34445,"name":"uint256","nodeType":"ElementaryTypeName","src":"260:7:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"259:9:158"},"scope":34482,"src":"210:59:158","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"668a0f02","id":34453,"implemented":false,"kind":"function","modifiers":[],"name":"latestRound","nameLocation":"282:11:158","nodeType":"FunctionDefinition","parameters":{"id":34449,"nodeType":"ParameterList","parameters":[],"src":"293:2:158"},"returnParameters":{"id":34452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34451,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34453,"src":"319:7:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34450,"name":"uint256","nodeType":"ElementaryTypeName","src":"319:7:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"318:9:158"},"scope":34482,"src":"273:55:158","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"b5ab58dc","id":34460,"implemented":false,"kind":"function","modifiers":[],"name":"getAnswer","nameLocation":"341:9:158","nodeType":"FunctionDefinition","parameters":{"id":34456,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34455,"mutability":"mutable","name":"roundId","nameLocation":"359:7:158","nodeType":"VariableDeclaration","scope":34460,"src":"351:15:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34454,"name":"uint256","nodeType":"ElementaryTypeName","src":"351:7:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"350:17:158"},"returnParameters":{"id":34459,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34458,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34460,"src":"391:6:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":34457,"name":"int256","nodeType":"ElementaryTypeName","src":"391:6:158","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"390:8:158"},"scope":34482,"src":"332:67:158","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"b633620c","id":34467,"implemented":false,"kind":"function","modifiers":[],"name":"getTimestamp","nameLocation":"412:12:158","nodeType":"FunctionDefinition","parameters":{"id":34463,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34462,"mutability":"mutable","name":"roundId","nameLocation":"433:7:158","nodeType":"VariableDeclaration","scope":34467,"src":"425:15:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34461,"name":"uint256","nodeType":"ElementaryTypeName","src":"425:7:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"424:17:158"},"returnParameters":{"id":34466,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34465,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34467,"src":"465:7:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34464,"name":"uint256","nodeType":"ElementaryTypeName","src":"465:7:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"464:9:158"},"scope":34482,"src":"403:71:158","stateMutability":"view","virtual":false,"visibility":"external"},{"anonymous":false,"id":34475,"name":"AnswerUpdated","nameLocation":"484:13:158","nodeType":"EventDefinition","parameters":{"id":34474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34469,"indexed":true,"mutability":"mutable","name":"current","nameLocation":"513:7:158","nodeType":"VariableDeclaration","scope":34475,"src":"498:22:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":34468,"name":"int256","nodeType":"ElementaryTypeName","src":"498:6:158","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":34471,"indexed":true,"mutability":"mutable","name":"roundId","nameLocation":"538:7:158","nodeType":"VariableDeclaration","scope":34475,"src":"522:23:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34470,"name":"uint256","nodeType":"ElementaryTypeName","src":"522:7:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34473,"indexed":false,"mutability":"mutable","name":"timestamp","nameLocation":"555:9:158","nodeType":"VariableDeclaration","scope":34475,"src":"547:17:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34472,"name":"uint256","nodeType":"ElementaryTypeName","src":"547:7:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"497:68:158"},"src":"478:88:158"},{"anonymous":false,"id":34481,"name":"NewRound","nameLocation":"575:8:158","nodeType":"EventDefinition","parameters":{"id":34480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34477,"indexed":true,"mutability":"mutable","name":"roundId","nameLocation":"600:7:158","nodeType":"VariableDeclaration","scope":34481,"src":"584:23:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34476,"name":"uint256","nodeType":"ElementaryTypeName","src":"584:7:158","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34479,"indexed":true,"mutability":"mutable","name":"startedBy","nameLocation":"625:9:158","nodeType":"VariableDeclaration","scope":34481,"src":"609:25:158","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34478,"name":"address","nodeType":"ElementaryTypeName","src":"609:7:158","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"583:52:158"},"src":"569:67:158"}],"scope":34483,"src":"63:575:158","usedErrors":[]}],"src":"37:602:158"},"id":158},"contracts/misc/interfaces/IERC20DetailedBytes.sol":{"ast":{"absolutePath":"contracts/misc/interfaces/IERC20DetailedBytes.sol","exportedSymbols":{"IERC20":[1442],"IERC20DetailedBytes":[34504]},"id":34505,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":34484,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:159"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","id":34486,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34505,"sourceUnit":1443,"src":"63:94:159","symbolAliases":[{"foreign":{"id":34485,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:6:159","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":34487,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"192:6:159"},"id":34488,"nodeType":"InheritanceSpecifier","src":"192:6:159"}],"canonicalName":"IERC20DetailedBytes","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":34504,"linearizedBaseContracts":[34504,1442],"name":"IERC20DetailedBytes","nameLocation":"169:19:159","nodeType":"ContractDefinition","nodes":[{"functionSelector":"06fdde03","id":34493,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"212:4:159","nodeType":"FunctionDefinition","parameters":{"id":34489,"nodeType":"ParameterList","parameters":[],"src":"216:2:159"},"returnParameters":{"id":34492,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34491,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34493,"src":"242:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":34490,"name":"bytes32","nodeType":"ElementaryTypeName","src":"242:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"241:9:159"},"scope":34504,"src":"203:48:159","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"95d89b41","id":34498,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"264:6:159","nodeType":"FunctionDefinition","parameters":{"id":34494,"nodeType":"ParameterList","parameters":[],"src":"270:2:159"},"returnParameters":{"id":34497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34496,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34498,"src":"296:7:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":34495,"name":"bytes32","nodeType":"ElementaryTypeName","src":"296:7:159","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"295:9:159"},"scope":34504,"src":"255:50:159","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"313ce567","id":34503,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"318:8:159","nodeType":"FunctionDefinition","parameters":{"id":34499,"nodeType":"ParameterList","parameters":[],"src":"326:2:159"},"returnParameters":{"id":34502,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34501,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34503,"src":"352:5:159","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":34500,"name":"uint8","nodeType":"ElementaryTypeName","src":"352:5:159","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"351:7:159"},"scope":34504,"src":"309:50:159","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":34505,"src":"159:202:159","usedErrors":[]}],"src":"37:325:159"},"id":159},"contracts/misc/interfaces/IUiIncentiveDataProviderV3.sol":{"ast":{"absolutePath":"contracts/misc/interfaces/IUiIncentiveDataProviderV3.sol","exportedSymbols":{"IPoolAddressesProvider":[5069],"IUiIncentiveDataProviderV3":[34629]},"id":34630,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":34506,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:160"},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","id":34508,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34630,"sourceUnit":5070,"src":"63:101:160","symbolAliases":[{"foreign":{"id":34507,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:22:160","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IUiIncentiveDataProviderV3","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":34629,"linearizedBaseContracts":[34629],"name":"IUiIncentiveDataProviderV3","nameLocation":"176:26:160","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData","id":34520,"members":[{"constant":false,"id":34510,"mutability":"mutable","name":"underlyingAsset","nameLocation":"259:15:160","nodeType":"VariableDeclaration","scope":34520,"src":"251:23:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34509,"name":"address","nodeType":"ElementaryTypeName","src":"251:7:160","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34513,"mutability":"mutable","name":"aIncentiveData","nameLocation":"294:14:160","nodeType":"VariableDeclaration","scope":34520,"src":"280:28:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_IncentiveData_$34529_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.IncentiveData"},"typeName":{"id":34512,"nodeType":"UserDefinedTypeName","pathNode":{"id":34511,"name":"IncentiveData","nodeType":"IdentifierPath","referencedDeclaration":34529,"src":"280:13:160"},"referencedDeclaration":34529,"src":"280:13:160","typeDescriptions":{"typeIdentifier":"t_struct$_IncentiveData_$34529_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.IncentiveData"}},"visibility":"internal"},{"constant":false,"id":34516,"mutability":"mutable","name":"vIncentiveData","nameLocation":"328:14:160","nodeType":"VariableDeclaration","scope":34520,"src":"314:28:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_IncentiveData_$34529_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.IncentiveData"},"typeName":{"id":34515,"nodeType":"UserDefinedTypeName","pathNode":{"id":34514,"name":"IncentiveData","nodeType":"IdentifierPath","referencedDeclaration":34529,"src":"314:13:160"},"referencedDeclaration":34529,"src":"314:13:160","typeDescriptions":{"typeIdentifier":"t_struct$_IncentiveData_$34529_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.IncentiveData"}},"visibility":"internal"},{"constant":false,"id":34519,"mutability":"mutable","name":"sIncentiveData","nameLocation":"362:14:160","nodeType":"VariableDeclaration","scope":34520,"src":"348:28:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_IncentiveData_$34529_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.IncentiveData"},"typeName":{"id":34518,"nodeType":"UserDefinedTypeName","pathNode":{"id":34517,"name":"IncentiveData","nodeType":"IdentifierPath","referencedDeclaration":34529,"src":"348:13:160"},"referencedDeclaration":34529,"src":"348:13:160","typeDescriptions":{"typeIdentifier":"t_struct$_IncentiveData_$34529_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.IncentiveData"}},"visibility":"internal"}],"name":"AggregatedReserveIncentiveData","nameLocation":"214:30:160","nodeType":"StructDefinition","scope":34629,"src":"207:174:160","visibility":"public"},{"canonicalName":"IUiIncentiveDataProviderV3.IncentiveData","id":34529,"members":[{"constant":false,"id":34522,"mutability":"mutable","name":"tokenAddress","nameLocation":"420:12:160","nodeType":"VariableDeclaration","scope":34529,"src":"412:20:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34521,"name":"address","nodeType":"ElementaryTypeName","src":"412:7:160","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34524,"mutability":"mutable","name":"incentiveControllerAddress","nameLocation":"446:26:160","nodeType":"VariableDeclaration","scope":34529,"src":"438:34:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34523,"name":"address","nodeType":"ElementaryTypeName","src":"438:7:160","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34528,"mutability":"mutable","name":"rewardsTokenInformation","nameLocation":"491:23:160","nodeType":"VariableDeclaration","scope":34529,"src":"478:36:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo[]"},"typeName":{"baseType":{"id":34526,"nodeType":"UserDefinedTypeName","pathNode":{"id":34525,"name":"RewardInfo","nodeType":"IdentifierPath","referencedDeclaration":34552,"src":"478:10:160"},"referencedDeclaration":34552,"src":"478:10:160","typeDescriptions":{"typeIdentifier":"t_struct$_RewardInfo_$34552_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo"}},"id":34527,"nodeType":"ArrayTypeName","src":"478:12:160","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardInfo_$34552_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.RewardInfo[]"}},"visibility":"internal"}],"name":"IncentiveData","nameLocation":"392:13:160","nodeType":"StructDefinition","scope":34629,"src":"385:134:160","visibility":"public"},{"canonicalName":"IUiIncentiveDataProviderV3.RewardInfo","id":34552,"members":[{"constant":false,"id":34531,"mutability":"mutable","name":"rewardTokenSymbol","nameLocation":"554:17:160","nodeType":"VariableDeclaration","scope":34552,"src":"547:24:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":34530,"name":"string","nodeType":"ElementaryTypeName","src":"547:6:160","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":34533,"mutability":"mutable","name":"rewardTokenAddress","nameLocation":"585:18:160","nodeType":"VariableDeclaration","scope":34552,"src":"577:26:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34532,"name":"address","nodeType":"ElementaryTypeName","src":"577:7:160","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34535,"mutability":"mutable","name":"rewardOracleAddress","nameLocation":"617:19:160","nodeType":"VariableDeclaration","scope":34552,"src":"609:27:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34534,"name":"address","nodeType":"ElementaryTypeName","src":"609:7:160","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34537,"mutability":"mutable","name":"emissionPerSecond","nameLocation":"650:17:160","nodeType":"VariableDeclaration","scope":34552,"src":"642:25:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34536,"name":"uint256","nodeType":"ElementaryTypeName","src":"642:7:160","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34539,"mutability":"mutable","name":"incentivesLastUpdateTimestamp","nameLocation":"681:29:160","nodeType":"VariableDeclaration","scope":34552,"src":"673:37:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34538,"name":"uint256","nodeType":"ElementaryTypeName","src":"673:7:160","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34541,"mutability":"mutable","name":"tokenIncentivesIndex","nameLocation":"724:20:160","nodeType":"VariableDeclaration","scope":34552,"src":"716:28:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34540,"name":"uint256","nodeType":"ElementaryTypeName","src":"716:7:160","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34543,"mutability":"mutable","name":"emissionEndTimestamp","nameLocation":"758:20:160","nodeType":"VariableDeclaration","scope":34552,"src":"750:28:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34542,"name":"uint256","nodeType":"ElementaryTypeName","src":"750:7:160","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34545,"mutability":"mutable","name":"rewardPriceFeed","nameLocation":"791:15:160","nodeType":"VariableDeclaration","scope":34552,"src":"784:22:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":34544,"name":"int256","nodeType":"ElementaryTypeName","src":"784:6:160","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":34547,"mutability":"mutable","name":"rewardTokenDecimals","nameLocation":"818:19:160","nodeType":"VariableDeclaration","scope":34552,"src":"812:25:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":34546,"name":"uint8","nodeType":"ElementaryTypeName","src":"812:5:160","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":34549,"mutability":"mutable","name":"precision","nameLocation":"849:9:160","nodeType":"VariableDeclaration","scope":34552,"src":"843:15:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":34548,"name":"uint8","nodeType":"ElementaryTypeName","src":"843:5:160","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":34551,"mutability":"mutable","name":"priceFeedDecimals","nameLocation":"870:17:160","nodeType":"VariableDeclaration","scope":34552,"src":"864:23:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":34550,"name":"uint8","nodeType":"ElementaryTypeName","src":"864:5:160","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"name":"RewardInfo","nameLocation":"530:10:160","nodeType":"StructDefinition","scope":34629,"src":"523:369:160","visibility":"public"},{"canonicalName":"IUiIncentiveDataProviderV3.UserReserveIncentiveData","id":34564,"members":[{"constant":false,"id":34554,"mutability":"mutable","name":"underlyingAsset","nameLocation":"942:15:160","nodeType":"VariableDeclaration","scope":34564,"src":"934:23:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34553,"name":"address","nodeType":"ElementaryTypeName","src":"934:7:160","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34557,"mutability":"mutable","name":"aTokenIncentivesUserData","nameLocation":"981:24:160","nodeType":"VariableDeclaration","scope":34564,"src":"963:42:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_UserIncentiveData_$34573_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserIncentiveData"},"typeName":{"id":34556,"nodeType":"UserDefinedTypeName","pathNode":{"id":34555,"name":"UserIncentiveData","nodeType":"IdentifierPath","referencedDeclaration":34573,"src":"963:17:160"},"referencedDeclaration":34573,"src":"963:17:160","typeDescriptions":{"typeIdentifier":"t_struct$_UserIncentiveData_$34573_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserIncentiveData"}},"visibility":"internal"},{"constant":false,"id":34560,"mutability":"mutable","name":"vTokenIncentivesUserData","nameLocation":"1029:24:160","nodeType":"VariableDeclaration","scope":34564,"src":"1011:42:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_UserIncentiveData_$34573_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserIncentiveData"},"typeName":{"id":34559,"nodeType":"UserDefinedTypeName","pathNode":{"id":34558,"name":"UserIncentiveData","nodeType":"IdentifierPath","referencedDeclaration":34573,"src":"1011:17:160"},"referencedDeclaration":34573,"src":"1011:17:160","typeDescriptions":{"typeIdentifier":"t_struct$_UserIncentiveData_$34573_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserIncentiveData"}},"visibility":"internal"},{"constant":false,"id":34563,"mutability":"mutable","name":"sTokenIncentivesUserData","nameLocation":"1077:24:160","nodeType":"VariableDeclaration","scope":34564,"src":"1059:42:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_UserIncentiveData_$34573_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserIncentiveData"},"typeName":{"id":34562,"nodeType":"UserDefinedTypeName","pathNode":{"id":34561,"name":"UserIncentiveData","nodeType":"IdentifierPath","referencedDeclaration":34573,"src":"1059:17:160"},"referencedDeclaration":34573,"src":"1059:17:160","typeDescriptions":{"typeIdentifier":"t_struct$_UserIncentiveData_$34573_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserIncentiveData"}},"visibility":"internal"}],"name":"UserReserveIncentiveData","nameLocation":"903:24:160","nodeType":"StructDefinition","scope":34629,"src":"896:210:160","visibility":"public"},{"canonicalName":"IUiIncentiveDataProviderV3.UserIncentiveData","id":34573,"members":[{"constant":false,"id":34566,"mutability":"mutable","name":"tokenAddress","nameLocation":"1149:12:160","nodeType":"VariableDeclaration","scope":34573,"src":"1141:20:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34565,"name":"address","nodeType":"ElementaryTypeName","src":"1141:7:160","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34568,"mutability":"mutable","name":"incentiveControllerAddress","nameLocation":"1175:26:160","nodeType":"VariableDeclaration","scope":34573,"src":"1167:34:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34567,"name":"address","nodeType":"ElementaryTypeName","src":"1167:7:160","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34572,"mutability":"mutable","name":"userRewardsInformation","nameLocation":"1224:22:160","nodeType":"VariableDeclaration","scope":34573,"src":"1207:39:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserRewardInfo_$34590_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo[]"},"typeName":{"baseType":{"id":34570,"nodeType":"UserDefinedTypeName","pathNode":{"id":34569,"name":"UserRewardInfo","nodeType":"IdentifierPath","referencedDeclaration":34590,"src":"1207:14:160"},"referencedDeclaration":34590,"src":"1207:14:160","typeDescriptions":{"typeIdentifier":"t_struct$_UserRewardInfo_$34590_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo"}},"id":34571,"nodeType":"ArrayTypeName","src":"1207:16:160","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserRewardInfo_$34590_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserRewardInfo[]"}},"visibility":"internal"}],"name":"UserIncentiveData","nameLocation":"1117:17:160","nodeType":"StructDefinition","scope":34629,"src":"1110:141:160","visibility":"public"},{"canonicalName":"IUiIncentiveDataProviderV3.UserRewardInfo","id":34590,"members":[{"constant":false,"id":34575,"mutability":"mutable","name":"rewardTokenSymbol","nameLocation":"1290:17:160","nodeType":"VariableDeclaration","scope":34590,"src":"1283:24:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":34574,"name":"string","nodeType":"ElementaryTypeName","src":"1283:6:160","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":34577,"mutability":"mutable","name":"rewardOracleAddress","nameLocation":"1321:19:160","nodeType":"VariableDeclaration","scope":34590,"src":"1313:27:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34576,"name":"address","nodeType":"ElementaryTypeName","src":"1313:7:160","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34579,"mutability":"mutable","name":"rewardTokenAddress","nameLocation":"1354:18:160","nodeType":"VariableDeclaration","scope":34590,"src":"1346:26:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34578,"name":"address","nodeType":"ElementaryTypeName","src":"1346:7:160","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34581,"mutability":"mutable","name":"userUnclaimedRewards","nameLocation":"1386:20:160","nodeType":"VariableDeclaration","scope":34590,"src":"1378:28:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34580,"name":"uint256","nodeType":"ElementaryTypeName","src":"1378:7:160","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34583,"mutability":"mutable","name":"tokenIncentivesUserIndex","nameLocation":"1420:24:160","nodeType":"VariableDeclaration","scope":34590,"src":"1412:32:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34582,"name":"uint256","nodeType":"ElementaryTypeName","src":"1412:7:160","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34585,"mutability":"mutable","name":"rewardPriceFeed","nameLocation":"1457:15:160","nodeType":"VariableDeclaration","scope":34590,"src":"1450:22:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":34584,"name":"int256","nodeType":"ElementaryTypeName","src":"1450:6:160","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":34587,"mutability":"mutable","name":"priceFeedDecimals","nameLocation":"1484:17:160","nodeType":"VariableDeclaration","scope":34590,"src":"1478:23:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":34586,"name":"uint8","nodeType":"ElementaryTypeName","src":"1478:5:160","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":34589,"mutability":"mutable","name":"rewardTokenDecimals","nameLocation":"1513:19:160","nodeType":"VariableDeclaration","scope":34590,"src":"1507:25:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":34588,"name":"uint8","nodeType":"ElementaryTypeName","src":"1507:5:160","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"name":"UserRewardInfo","nameLocation":"1262:14:160","nodeType":"StructDefinition","scope":34629,"src":"1255:282:160","visibility":"public"},{"functionSelector":"976fafc5","id":34600,"implemented":false,"kind":"function","modifiers":[],"name":"getReservesIncentivesData","nameLocation":"1550:25:160","nodeType":"FunctionDefinition","parameters":{"id":34594,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34593,"mutability":"mutable","name":"provider","nameLocation":"1604:8:160","nodeType":"VariableDeclaration","scope":34600,"src":"1581:31:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":34592,"nodeType":"UserDefinedTypeName","pathNode":{"id":34591,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"1581:22:160"},"referencedDeclaration":5069,"src":"1581:22:160","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"1575:41:160"},"returnParameters":{"id":34599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34598,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34600,"src":"1640:39:160","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData[]"},"typeName":{"baseType":{"id":34596,"nodeType":"UserDefinedTypeName","pathNode":{"id":34595,"name":"AggregatedReserveIncentiveData","nodeType":"IdentifierPath","referencedDeclaration":34520,"src":"1640:30:160"},"referencedDeclaration":34520,"src":"1640:30:160","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveIncentiveData_$34520_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData"}},"id":34597,"nodeType":"ArrayTypeName","src":"1640:32:160","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData[]"}},"visibility":"internal"}],"src":"1639:41:160"},"scope":34629,"src":"1541:140:160","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"799bdcf5","id":34612,"implemented":false,"kind":"function","modifiers":[],"name":"getUserReservesIncentivesData","nameLocation":"1694:29:160","nodeType":"FunctionDefinition","parameters":{"id":34606,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34603,"mutability":"mutable","name":"provider","nameLocation":"1752:8:160","nodeType":"VariableDeclaration","scope":34612,"src":"1729:31:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":34602,"nodeType":"UserDefinedTypeName","pathNode":{"id":34601,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"1729:22:160"},"referencedDeclaration":5069,"src":"1729:22:160","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"},{"constant":false,"id":34605,"mutability":"mutable","name":"user","nameLocation":"1774:4:160","nodeType":"VariableDeclaration","scope":34612,"src":"1766:12:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34604,"name":"address","nodeType":"ElementaryTypeName","src":"1766:7:160","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1723:59:160"},"returnParameters":{"id":34611,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34610,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34612,"src":"1806:33:160","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData[]"},"typeName":{"baseType":{"id":34608,"nodeType":"UserDefinedTypeName","pathNode":{"id":34607,"name":"UserReserveIncentiveData","nodeType":"IdentifierPath","referencedDeclaration":34564,"src":"1806:24:160"},"referencedDeclaration":34564,"src":"1806:24:160","typeDescriptions":{"typeIdentifier":"t_struct$_UserReserveIncentiveData_$34564_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData"}},"id":34609,"nodeType":"ArrayTypeName","src":"1806:26:160","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveIncentiveData_$34564_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData[]"}},"visibility":"internal"}],"src":"1805:35:160"},"scope":34629,"src":"1685:156:160","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"47637536","id":34628,"implemented":false,"kind":"function","modifiers":[],"name":"getFullReservesIncentiveData","nameLocation":"1889:28:160","nodeType":"FunctionDefinition","parameters":{"id":34618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34615,"mutability":"mutable","name":"provider","nameLocation":"1946:8:160","nodeType":"VariableDeclaration","scope":34628,"src":"1923:31:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":34614,"nodeType":"UserDefinedTypeName","pathNode":{"id":34613,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"1923:22:160"},"referencedDeclaration":5069,"src":"1923:22:160","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"},{"constant":false,"id":34617,"mutability":"mutable","name":"user","nameLocation":"1968:4:160","nodeType":"VariableDeclaration","scope":34628,"src":"1960:12:160","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34616,"name":"address","nodeType":"ElementaryTypeName","src":"1960:7:160","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1917:59:160"},"returnParameters":{"id":34627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34622,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34628,"src":"2012:39:160","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData[]"},"typeName":{"baseType":{"id":34620,"nodeType":"UserDefinedTypeName","pathNode":{"id":34619,"name":"AggregatedReserveIncentiveData","nodeType":"IdentifierPath","referencedDeclaration":34520,"src":"2012:30:160"},"referencedDeclaration":34520,"src":"2012:30:160","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveIncentiveData_$34520_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData"}},"id":34621,"nodeType":"ArrayTypeName","src":"2012:32:160","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData[]"}},"visibility":"internal"},{"constant":false,"id":34626,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34628,"src":"2053:33:160","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData[]"},"typeName":{"baseType":{"id":34624,"nodeType":"UserDefinedTypeName","pathNode":{"id":34623,"name":"UserReserveIncentiveData","nodeType":"IdentifierPath","referencedDeclaration":34564,"src":"2053:24:160"},"referencedDeclaration":34564,"src":"2053:24:160","typeDescriptions":{"typeIdentifier":"t_struct$_UserReserveIncentiveData_$34564_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData"}},"id":34625,"nodeType":"ArrayTypeName","src":"2053:26:160","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveIncentiveData_$34564_storage_$dyn_storage_ptr","typeString":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData[]"}},"visibility":"internal"}],"src":"2011:76:160"},"scope":34629,"src":"1880:208:160","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":34630,"src":"166:1924:160","usedErrors":[]}],"src":"37:2054:160"},"id":160},"contracts/misc/interfaces/IUiPoolDataProviderV3.sol":{"ast":{"absolutePath":"contracts/misc/interfaces/IUiPoolDataProviderV3.sol","exportedSymbols":{"IPoolAddressesProvider":[5069],"IUiPoolDataProviderV3":[34818]},"id":34819,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":34631,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:161"},{"absolutePath":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","file":"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol","id":34633,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34819,"sourceUnit":5070,"src":"63:101:161","symbolAliases":[{"foreign":{"id":34632,"name":"IPoolAddressesProvider","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:22:161","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IUiPoolDataProviderV3","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":34818,"linearizedBaseContracts":[34818],"name":"IUiPoolDataProviderV3","nameLocation":"176:21:161","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IUiPoolDataProviderV3.InterestRates","id":34648,"members":[{"constant":false,"id":34635,"mutability":"mutable","name":"variableRateSlope1","nameLocation":"237:18:161","nodeType":"VariableDeclaration","scope":34648,"src":"229:26:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34634,"name":"uint256","nodeType":"ElementaryTypeName","src":"229:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34637,"mutability":"mutable","name":"variableRateSlope2","nameLocation":"269:18:161","nodeType":"VariableDeclaration","scope":34648,"src":"261:26:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34636,"name":"uint256","nodeType":"ElementaryTypeName","src":"261:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34639,"mutability":"mutable","name":"stableRateSlope1","nameLocation":"301:16:161","nodeType":"VariableDeclaration","scope":34648,"src":"293:24:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34638,"name":"uint256","nodeType":"ElementaryTypeName","src":"293:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34641,"mutability":"mutable","name":"stableRateSlope2","nameLocation":"331:16:161","nodeType":"VariableDeclaration","scope":34648,"src":"323:24:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34640,"name":"uint256","nodeType":"ElementaryTypeName","src":"323:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34643,"mutability":"mutable","name":"baseStableBorrowRate","nameLocation":"361:20:161","nodeType":"VariableDeclaration","scope":34648,"src":"353:28:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34642,"name":"uint256","nodeType":"ElementaryTypeName","src":"353:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34645,"mutability":"mutable","name":"baseVariableBorrowRate","nameLocation":"395:22:161","nodeType":"VariableDeclaration","scope":34648,"src":"387:30:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34644,"name":"uint256","nodeType":"ElementaryTypeName","src":"387:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34647,"mutability":"mutable","name":"optimalUsageRatio","nameLocation":"431:17:161","nodeType":"VariableDeclaration","scope":34648,"src":"423:25:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34646,"name":"uint256","nodeType":"ElementaryTypeName","src":"423:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"InterestRates","nameLocation":"209:13:161","nodeType":"StructDefinition","scope":34818,"src":"202:251:161","visibility":"public"},{"canonicalName":"IUiPoolDataProviderV3.AggregatedReserveData","id":34757,"members":[{"constant":false,"id":34650,"mutability":"mutable","name":"underlyingAsset","nameLocation":"500:15:161","nodeType":"VariableDeclaration","scope":34757,"src":"492:23:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34649,"name":"address","nodeType":"ElementaryTypeName","src":"492:7:161","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34652,"mutability":"mutable","name":"name","nameLocation":"528:4:161","nodeType":"VariableDeclaration","scope":34757,"src":"521:11:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":34651,"name":"string","nodeType":"ElementaryTypeName","src":"521:6:161","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":34654,"mutability":"mutable","name":"symbol","nameLocation":"545:6:161","nodeType":"VariableDeclaration","scope":34757,"src":"538:13:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":34653,"name":"string","nodeType":"ElementaryTypeName","src":"538:6:161","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":34656,"mutability":"mutable","name":"decimals","nameLocation":"565:8:161","nodeType":"VariableDeclaration","scope":34757,"src":"557:16:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34655,"name":"uint256","nodeType":"ElementaryTypeName","src":"557:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34658,"mutability":"mutable","name":"baseLTVasCollateral","nameLocation":"587:19:161","nodeType":"VariableDeclaration","scope":34757,"src":"579:27:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34657,"name":"uint256","nodeType":"ElementaryTypeName","src":"579:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34660,"mutability":"mutable","name":"reserveLiquidationThreshold","nameLocation":"620:27:161","nodeType":"VariableDeclaration","scope":34757,"src":"612:35:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34659,"name":"uint256","nodeType":"ElementaryTypeName","src":"612:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34662,"mutability":"mutable","name":"reserveLiquidationBonus","nameLocation":"661:23:161","nodeType":"VariableDeclaration","scope":34757,"src":"653:31:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34661,"name":"uint256","nodeType":"ElementaryTypeName","src":"653:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34664,"mutability":"mutable","name":"reserveFactor","nameLocation":"698:13:161","nodeType":"VariableDeclaration","scope":34757,"src":"690:21:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34663,"name":"uint256","nodeType":"ElementaryTypeName","src":"690:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34666,"mutability":"mutable","name":"usageAsCollateralEnabled","nameLocation":"722:24:161","nodeType":"VariableDeclaration","scope":34757,"src":"717:29:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":34665,"name":"bool","nodeType":"ElementaryTypeName","src":"717:4:161","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":34668,"mutability":"mutable","name":"borrowingEnabled","nameLocation":"757:16:161","nodeType":"VariableDeclaration","scope":34757,"src":"752:21:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":34667,"name":"bool","nodeType":"ElementaryTypeName","src":"752:4:161","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":34670,"mutability":"mutable","name":"stableBorrowRateEnabled","nameLocation":"784:23:161","nodeType":"VariableDeclaration","scope":34757,"src":"779:28:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":34669,"name":"bool","nodeType":"ElementaryTypeName","src":"779:4:161","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":34672,"mutability":"mutable","name":"isActive","nameLocation":"818:8:161","nodeType":"VariableDeclaration","scope":34757,"src":"813:13:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":34671,"name":"bool","nodeType":"ElementaryTypeName","src":"813:4:161","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":34674,"mutability":"mutable","name":"isFrozen","nameLocation":"837:8:161","nodeType":"VariableDeclaration","scope":34757,"src":"832:13:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":34673,"name":"bool","nodeType":"ElementaryTypeName","src":"832:4:161","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":34676,"mutability":"mutable","name":"liquidityIndex","nameLocation":"876:14:161","nodeType":"VariableDeclaration","scope":34757,"src":"868:22:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":34675,"name":"uint128","nodeType":"ElementaryTypeName","src":"868:7:161","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":34678,"mutability":"mutable","name":"variableBorrowIndex","nameLocation":"904:19:161","nodeType":"VariableDeclaration","scope":34757,"src":"896:27:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":34677,"name":"uint128","nodeType":"ElementaryTypeName","src":"896:7:161","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":34680,"mutability":"mutable","name":"liquidityRate","nameLocation":"937:13:161","nodeType":"VariableDeclaration","scope":34757,"src":"929:21:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":34679,"name":"uint128","nodeType":"ElementaryTypeName","src":"929:7:161","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":34682,"mutability":"mutable","name":"variableBorrowRate","nameLocation":"964:18:161","nodeType":"VariableDeclaration","scope":34757,"src":"956:26:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":34681,"name":"uint128","nodeType":"ElementaryTypeName","src":"956:7:161","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":34684,"mutability":"mutable","name":"stableBorrowRate","nameLocation":"996:16:161","nodeType":"VariableDeclaration","scope":34757,"src":"988:24:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":34683,"name":"uint128","nodeType":"ElementaryTypeName","src":"988:7:161","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":34686,"mutability":"mutable","name":"lastUpdateTimestamp","nameLocation":"1025:19:161","nodeType":"VariableDeclaration","scope":34757,"src":"1018:26:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":34685,"name":"uint40","nodeType":"ElementaryTypeName","src":"1018:6:161","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"constant":false,"id":34688,"mutability":"mutable","name":"aTokenAddress","nameLocation":"1058:13:161","nodeType":"VariableDeclaration","scope":34757,"src":"1050:21:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34687,"name":"address","nodeType":"ElementaryTypeName","src":"1050:7:161","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34690,"mutability":"mutable","name":"stableDebtTokenAddress","nameLocation":"1085:22:161","nodeType":"VariableDeclaration","scope":34757,"src":"1077:30:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34689,"name":"address","nodeType":"ElementaryTypeName","src":"1077:7:161","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34692,"mutability":"mutable","name":"variableDebtTokenAddress","nameLocation":"1121:24:161","nodeType":"VariableDeclaration","scope":34757,"src":"1113:32:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34691,"name":"address","nodeType":"ElementaryTypeName","src":"1113:7:161","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34694,"mutability":"mutable","name":"interestRateStrategyAddress","nameLocation":"1159:27:161","nodeType":"VariableDeclaration","scope":34757,"src":"1151:35:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34693,"name":"address","nodeType":"ElementaryTypeName","src":"1151:7:161","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34696,"mutability":"mutable","name":"availableLiquidity","nameLocation":"1207:18:161","nodeType":"VariableDeclaration","scope":34757,"src":"1199:26:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34695,"name":"uint256","nodeType":"ElementaryTypeName","src":"1199:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34698,"mutability":"mutable","name":"totalPrincipalStableDebt","nameLocation":"1239:24:161","nodeType":"VariableDeclaration","scope":34757,"src":"1231:32:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34697,"name":"uint256","nodeType":"ElementaryTypeName","src":"1231:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34700,"mutability":"mutable","name":"averageStableRate","nameLocation":"1277:17:161","nodeType":"VariableDeclaration","scope":34757,"src":"1269:25:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34699,"name":"uint256","nodeType":"ElementaryTypeName","src":"1269:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34702,"mutability":"mutable","name":"stableDebtLastUpdateTimestamp","nameLocation":"1308:29:161","nodeType":"VariableDeclaration","scope":34757,"src":"1300:37:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34701,"name":"uint256","nodeType":"ElementaryTypeName","src":"1300:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34704,"mutability":"mutable","name":"totalScaledVariableDebt","nameLocation":"1351:23:161","nodeType":"VariableDeclaration","scope":34757,"src":"1343:31:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34703,"name":"uint256","nodeType":"ElementaryTypeName","src":"1343:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34706,"mutability":"mutable","name":"priceInMarketReferenceCurrency","nameLocation":"1388:30:161","nodeType":"VariableDeclaration","scope":34757,"src":"1380:38:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34705,"name":"uint256","nodeType":"ElementaryTypeName","src":"1380:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34708,"mutability":"mutable","name":"priceOracle","nameLocation":"1432:11:161","nodeType":"VariableDeclaration","scope":34757,"src":"1424:19:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34707,"name":"address","nodeType":"ElementaryTypeName","src":"1424:7:161","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34710,"mutability":"mutable","name":"variableRateSlope1","nameLocation":"1457:18:161","nodeType":"VariableDeclaration","scope":34757,"src":"1449:26:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34709,"name":"uint256","nodeType":"ElementaryTypeName","src":"1449:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34712,"mutability":"mutable","name":"variableRateSlope2","nameLocation":"1489:18:161","nodeType":"VariableDeclaration","scope":34757,"src":"1481:26:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34711,"name":"uint256","nodeType":"ElementaryTypeName","src":"1481:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34714,"mutability":"mutable","name":"stableRateSlope1","nameLocation":"1521:16:161","nodeType":"VariableDeclaration","scope":34757,"src":"1513:24:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34713,"name":"uint256","nodeType":"ElementaryTypeName","src":"1513:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34716,"mutability":"mutable","name":"stableRateSlope2","nameLocation":"1551:16:161","nodeType":"VariableDeclaration","scope":34757,"src":"1543:24:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34715,"name":"uint256","nodeType":"ElementaryTypeName","src":"1543:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34718,"mutability":"mutable","name":"baseStableBorrowRate","nameLocation":"1581:20:161","nodeType":"VariableDeclaration","scope":34757,"src":"1573:28:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34717,"name":"uint256","nodeType":"ElementaryTypeName","src":"1573:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34720,"mutability":"mutable","name":"baseVariableBorrowRate","nameLocation":"1615:22:161","nodeType":"VariableDeclaration","scope":34757,"src":"1607:30:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34719,"name":"uint256","nodeType":"ElementaryTypeName","src":"1607:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34722,"mutability":"mutable","name":"optimalUsageRatio","nameLocation":"1651:17:161","nodeType":"VariableDeclaration","scope":34757,"src":"1643:25:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34721,"name":"uint256","nodeType":"ElementaryTypeName","src":"1643:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34724,"mutability":"mutable","name":"isPaused","nameLocation":"1694:8:161","nodeType":"VariableDeclaration","scope":34757,"src":"1689:13:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":34723,"name":"bool","nodeType":"ElementaryTypeName","src":"1689:4:161","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":34726,"mutability":"mutable","name":"isSiloedBorrowing","nameLocation":"1713:17:161","nodeType":"VariableDeclaration","scope":34757,"src":"1708:22:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":34725,"name":"bool","nodeType":"ElementaryTypeName","src":"1708:4:161","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":34728,"mutability":"mutable","name":"accruedToTreasury","nameLocation":"1744:17:161","nodeType":"VariableDeclaration","scope":34757,"src":"1736:25:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":34727,"name":"uint128","nodeType":"ElementaryTypeName","src":"1736:7:161","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":34730,"mutability":"mutable","name":"unbacked","nameLocation":"1775:8:161","nodeType":"VariableDeclaration","scope":34757,"src":"1767:16:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":34729,"name":"uint128","nodeType":"ElementaryTypeName","src":"1767:7:161","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":34732,"mutability":"mutable","name":"isolationModeTotalDebt","nameLocation":"1797:22:161","nodeType":"VariableDeclaration","scope":34757,"src":"1789:30:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":34731,"name":"uint128","nodeType":"ElementaryTypeName","src":"1789:7:161","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":34734,"mutability":"mutable","name":"flashLoanEnabled","nameLocation":"1830:16:161","nodeType":"VariableDeclaration","scope":34757,"src":"1825:21:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":34733,"name":"bool","nodeType":"ElementaryTypeName","src":"1825:4:161","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":34736,"mutability":"mutable","name":"debtCeiling","nameLocation":"1867:11:161","nodeType":"VariableDeclaration","scope":34757,"src":"1859:19:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34735,"name":"uint256","nodeType":"ElementaryTypeName","src":"1859:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34738,"mutability":"mutable","name":"debtCeilingDecimals","nameLocation":"1892:19:161","nodeType":"VariableDeclaration","scope":34757,"src":"1884:27:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34737,"name":"uint256","nodeType":"ElementaryTypeName","src":"1884:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34740,"mutability":"mutable","name":"eModeCategoryId","nameLocation":"1923:15:161","nodeType":"VariableDeclaration","scope":34757,"src":"1917:21:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":34739,"name":"uint8","nodeType":"ElementaryTypeName","src":"1917:5:161","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":34742,"mutability":"mutable","name":"borrowCap","nameLocation":"1952:9:161","nodeType":"VariableDeclaration","scope":34757,"src":"1944:17:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34741,"name":"uint256","nodeType":"ElementaryTypeName","src":"1944:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34744,"mutability":"mutable","name":"supplyCap","nameLocation":"1975:9:161","nodeType":"VariableDeclaration","scope":34757,"src":"1967:17:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34743,"name":"uint256","nodeType":"ElementaryTypeName","src":"1967:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34746,"mutability":"mutable","name":"eModeLtv","nameLocation":"2010:8:161","nodeType":"VariableDeclaration","scope":34757,"src":"2003:15:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":34745,"name":"uint16","nodeType":"ElementaryTypeName","src":"2003:6:161","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":34748,"mutability":"mutable","name":"eModeLiquidationThreshold","nameLocation":"2031:25:161","nodeType":"VariableDeclaration","scope":34757,"src":"2024:32:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":34747,"name":"uint16","nodeType":"ElementaryTypeName","src":"2024:6:161","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":34750,"mutability":"mutable","name":"eModeLiquidationBonus","nameLocation":"2069:21:161","nodeType":"VariableDeclaration","scope":34757,"src":"2062:28:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":34749,"name":"uint16","nodeType":"ElementaryTypeName","src":"2062:6:161","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"},{"constant":false,"id":34752,"mutability":"mutable","name":"eModePriceSource","nameLocation":"2104:16:161","nodeType":"VariableDeclaration","scope":34757,"src":"2096:24:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34751,"name":"address","nodeType":"ElementaryTypeName","src":"2096:7:161","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34754,"mutability":"mutable","name":"eModeLabel","nameLocation":"2133:10:161","nodeType":"VariableDeclaration","scope":34757,"src":"2126:17:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":34753,"name":"string","nodeType":"ElementaryTypeName","src":"2126:6:161","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":34756,"mutability":"mutable","name":"borrowableInIsolation","nameLocation":"2154:21:161","nodeType":"VariableDeclaration","scope":34757,"src":"2149:26:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":34755,"name":"bool","nodeType":"ElementaryTypeName","src":"2149:4:161","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"AggregatedReserveData","nameLocation":"464:21:161","nodeType":"StructDefinition","scope":34818,"src":"457:1723:161","visibility":"public"},{"canonicalName":"IUiPoolDataProviderV3.UserReserveData","id":34772,"members":[{"constant":false,"id":34759,"mutability":"mutable","name":"underlyingAsset","nameLocation":"2221:15:161","nodeType":"VariableDeclaration","scope":34772,"src":"2213:23:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34758,"name":"address","nodeType":"ElementaryTypeName","src":"2213:7:161","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34761,"mutability":"mutable","name":"scaledATokenBalance","nameLocation":"2250:19:161","nodeType":"VariableDeclaration","scope":34772,"src":"2242:27:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34760,"name":"uint256","nodeType":"ElementaryTypeName","src":"2242:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34763,"mutability":"mutable","name":"usageAsCollateralEnabledOnUser","nameLocation":"2280:30:161","nodeType":"VariableDeclaration","scope":34772,"src":"2275:35:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":34762,"name":"bool","nodeType":"ElementaryTypeName","src":"2275:4:161","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":34765,"mutability":"mutable","name":"stableBorrowRate","nameLocation":"2324:16:161","nodeType":"VariableDeclaration","scope":34772,"src":"2316:24:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34764,"name":"uint256","nodeType":"ElementaryTypeName","src":"2316:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34767,"mutability":"mutable","name":"scaledVariableDebt","nameLocation":"2354:18:161","nodeType":"VariableDeclaration","scope":34772,"src":"2346:26:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34766,"name":"uint256","nodeType":"ElementaryTypeName","src":"2346:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34769,"mutability":"mutable","name":"principalStableDebt","nameLocation":"2386:19:161","nodeType":"VariableDeclaration","scope":34772,"src":"2378:27:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34768,"name":"uint256","nodeType":"ElementaryTypeName","src":"2378:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34771,"mutability":"mutable","name":"stableBorrowLastUpdateTimestamp","nameLocation":"2419:31:161","nodeType":"VariableDeclaration","scope":34772,"src":"2411:39:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34770,"name":"uint256","nodeType":"ElementaryTypeName","src":"2411:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"UserReserveData","nameLocation":"2191:15:161","nodeType":"StructDefinition","scope":34818,"src":"2184:271:161","visibility":"public"},{"canonicalName":"IUiPoolDataProviderV3.BaseCurrencyInfo","id":34781,"members":[{"constant":false,"id":34774,"mutability":"mutable","name":"marketReferenceCurrencyUnit","nameLocation":"2497:27:161","nodeType":"VariableDeclaration","scope":34781,"src":"2489:35:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34773,"name":"uint256","nodeType":"ElementaryTypeName","src":"2489:7:161","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34776,"mutability":"mutable","name":"marketReferenceCurrencyPriceInUsd","nameLocation":"2537:33:161","nodeType":"VariableDeclaration","scope":34781,"src":"2530:40:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":34775,"name":"int256","nodeType":"ElementaryTypeName","src":"2530:6:161","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":34778,"mutability":"mutable","name":"networkBaseTokenPriceInUsd","nameLocation":"2583:26:161","nodeType":"VariableDeclaration","scope":34781,"src":"2576:33:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":34777,"name":"int256","nodeType":"ElementaryTypeName","src":"2576:6:161","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":34780,"mutability":"mutable","name":"networkBaseTokenPriceDecimals","nameLocation":"2621:29:161","nodeType":"VariableDeclaration","scope":34781,"src":"2615:35:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":34779,"name":"uint8","nodeType":"ElementaryTypeName","src":"2615:5:161","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"name":"BaseCurrencyInfo","nameLocation":"2466:16:161","nodeType":"StructDefinition","scope":34818,"src":"2459:196:161","visibility":"public"},{"functionSelector":"586c1442","id":34790,"implemented":false,"kind":"function","modifiers":[],"name":"getReservesList","nameLocation":"2668:15:161","nodeType":"FunctionDefinition","parameters":{"id":34785,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34784,"mutability":"mutable","name":"provider","nameLocation":"2712:8:161","nodeType":"VariableDeclaration","scope":34790,"src":"2689:31:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":34783,"nodeType":"UserDefinedTypeName","pathNode":{"id":34782,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"2689:22:161"},"referencedDeclaration":5069,"src":"2689:22:161","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"2683:41:161"},"returnParameters":{"id":34789,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34788,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34790,"src":"2748:16:161","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":34786,"name":"address","nodeType":"ElementaryTypeName","src":"2748:7:161","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":34787,"nodeType":"ArrayTypeName","src":"2748:9:161","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2747:18:161"},"scope":34818,"src":"2659:107:161","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"ec489c21","id":34803,"implemented":false,"kind":"function","modifiers":[],"name":"getReservesData","nameLocation":"2779:15:161","nodeType":"FunctionDefinition","parameters":{"id":34794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34793,"mutability":"mutable","name":"provider","nameLocation":"2823:8:161","nodeType":"VariableDeclaration","scope":34803,"src":"2800:31:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":34792,"nodeType":"UserDefinedTypeName","pathNode":{"id":34791,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"2800:22:161"},"referencedDeclaration":5069,"src":"2800:22:161","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"}],"src":"2794:41:161"},"returnParameters":{"id":34802,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34798,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34803,"src":"2859:30:161","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveData_$34757_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData[]"},"typeName":{"baseType":{"id":34796,"nodeType":"UserDefinedTypeName","pathNode":{"id":34795,"name":"AggregatedReserveData","nodeType":"IdentifierPath","referencedDeclaration":34757,"src":"2859:21:161"},"referencedDeclaration":34757,"src":"2859:21:161","typeDescriptions":{"typeIdentifier":"t_struct$_AggregatedReserveData_$34757_storage_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData"}},"id":34797,"nodeType":"ArrayTypeName","src":"2859:23:161","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AggregatedReserveData_$34757_storage_$dyn_storage_ptr","typeString":"struct IUiPoolDataProviderV3.AggregatedReserveData[]"}},"visibility":"internal"},{"constant":false,"id":34801,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34803,"src":"2891:23:161","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BaseCurrencyInfo_$34781_memory_ptr","typeString":"struct IUiPoolDataProviderV3.BaseCurrencyInfo"},"typeName":{"id":34800,"nodeType":"UserDefinedTypeName","pathNode":{"id":34799,"name":"BaseCurrencyInfo","nodeType":"IdentifierPath","referencedDeclaration":34781,"src":"2891:16:161"},"referencedDeclaration":34781,"src":"2891:16:161","typeDescriptions":{"typeIdentifier":"t_struct$_BaseCurrencyInfo_$34781_storage_ptr","typeString":"struct IUiPoolDataProviderV3.BaseCurrencyInfo"}},"visibility":"internal"}],"src":"2858:57:161"},"scope":34818,"src":"2770:146:161","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"51974cc0","id":34817,"implemented":false,"kind":"function","modifiers":[],"name":"getUserReservesData","nameLocation":"2929:19:161","nodeType":"FunctionDefinition","parameters":{"id":34809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34806,"mutability":"mutable","name":"provider","nameLocation":"2977:8:161","nodeType":"VariableDeclaration","scope":34817,"src":"2954:31:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"},"typeName":{"id":34805,"nodeType":"UserDefinedTypeName","pathNode":{"id":34804,"name":"IPoolAddressesProvider","nodeType":"IdentifierPath","referencedDeclaration":5069,"src":"2954:22:161"},"referencedDeclaration":5069,"src":"2954:22:161","typeDescriptions":{"typeIdentifier":"t_contract$_IPoolAddressesProvider_$5069","typeString":"contract IPoolAddressesProvider"}},"visibility":"internal"},{"constant":false,"id":34808,"mutability":"mutable","name":"user","nameLocation":"2999:4:161","nodeType":"VariableDeclaration","scope":34817,"src":"2991:12:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34807,"name":"address","nodeType":"ElementaryTypeName","src":"2991:7:161","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2948:59:161"},"returnParameters":{"id":34816,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34813,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34817,"src":"3031:24:161","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveData_$34772_memory_ptr_$dyn_memory_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData[]"},"typeName":{"baseType":{"id":34811,"nodeType":"UserDefinedTypeName","pathNode":{"id":34810,"name":"UserReserveData","nodeType":"IdentifierPath","referencedDeclaration":34772,"src":"3031:15:161"},"referencedDeclaration":34772,"src":"3031:15:161","typeDescriptions":{"typeIdentifier":"t_struct$_UserReserveData_$34772_storage_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData"}},"id":34812,"nodeType":"ArrayTypeName","src":"3031:17:161","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserReserveData_$34772_storage_$dyn_storage_ptr","typeString":"struct IUiPoolDataProviderV3.UserReserveData[]"}},"visibility":"internal"},{"constant":false,"id":34815,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34817,"src":"3057:5:161","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":34814,"name":"uint8","nodeType":"ElementaryTypeName","src":"3057:5:161","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"3030:33:161"},"scope":34818,"src":"2920:144:161","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":34819,"src":"166:2900:161","usedErrors":[]}],"src":"37:3030:161"},"id":161},"contracts/misc/interfaces/IWETH.sol":{"ast":{"absolutePath":"contracts/misc/interfaces/IWETH.sol","exportedSymbols":{"IWETH":[34849]},"id":34850,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":34820,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:162"},{"abstract":false,"baseContracts":[],"canonicalName":"IWETH","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":34849,"linearizedBaseContracts":[34849],"name":"IWETH","nameLocation":"73:5:162","nodeType":"ContractDefinition","nodes":[{"functionSelector":"d0e30db0","id":34823,"implemented":false,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"92:7:162","nodeType":"FunctionDefinition","parameters":{"id":34821,"nodeType":"ParameterList","parameters":[],"src":"99:2:162"},"returnParameters":{"id":34822,"nodeType":"ParameterList","parameters":[],"src":"118:0:162"},"scope":34849,"src":"83:36:162","stateMutability":"payable","virtual":false,"visibility":"external"},{"functionSelector":"2e1a7d4d","id":34828,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"132:8:162","nodeType":"FunctionDefinition","parameters":{"id":34826,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34825,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34828,"src":"141:7:162","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34824,"name":"uint256","nodeType":"ElementaryTypeName","src":"141:7:162","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"140:9:162"},"returnParameters":{"id":34827,"nodeType":"ParameterList","parameters":[],"src":"158:0:162"},"scope":34849,"src":"123:36:162","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"095ea7b3","id":34837,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"172:7:162","nodeType":"FunctionDefinition","parameters":{"id":34833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34830,"mutability":"mutable","name":"guy","nameLocation":"188:3:162","nodeType":"VariableDeclaration","scope":34837,"src":"180:11:162","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34829,"name":"address","nodeType":"ElementaryTypeName","src":"180:7:162","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34832,"mutability":"mutable","name":"wad","nameLocation":"201:3:162","nodeType":"VariableDeclaration","scope":34837,"src":"193:11:162","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34831,"name":"uint256","nodeType":"ElementaryTypeName","src":"193:7:162","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"179:26:162"},"returnParameters":{"id":34836,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34835,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34837,"src":"224:4:162","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":34834,"name":"bool","nodeType":"ElementaryTypeName","src":"224:4:162","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"223:6:162"},"scope":34849,"src":"163:67:162","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"23b872dd","id":34848,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"243:12:162","nodeType":"FunctionDefinition","parameters":{"id":34844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34839,"mutability":"mutable","name":"src","nameLocation":"264:3:162","nodeType":"VariableDeclaration","scope":34848,"src":"256:11:162","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34838,"name":"address","nodeType":"ElementaryTypeName","src":"256:7:162","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34841,"mutability":"mutable","name":"dst","nameLocation":"277:3:162","nodeType":"VariableDeclaration","scope":34848,"src":"269:11:162","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34840,"name":"address","nodeType":"ElementaryTypeName","src":"269:7:162","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34843,"mutability":"mutable","name":"wad","nameLocation":"290:3:162","nodeType":"VariableDeclaration","scope":34848,"src":"282:11:162","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34842,"name":"uint256","nodeType":"ElementaryTypeName","src":"282:7:162","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"255:39:162"},"returnParameters":{"id":34847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34846,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34848,"src":"313:4:162","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":34845,"name":"bool","nodeType":"ElementaryTypeName","src":"313:4:162","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"312:6:162"},"scope":34849,"src":"234:85:162","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":34850,"src":"63:258:162","usedErrors":[]}],"src":"37:285:162"},"id":162},"contracts/misc/interfaces/IWrappedTokenGatewayV3.sol":{"ast":{"absolutePath":"contracts/misc/interfaces/IWrappedTokenGatewayV3.sol","exportedSymbols":{"IWrappedTokenGatewayV3":[34909]},"id":34910,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":34851,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:163"},{"abstract":false,"baseContracts":[],"canonicalName":"IWrappedTokenGatewayV3","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":34909,"linearizedBaseContracts":[34909],"name":"IWrappedTokenGatewayV3","nameLocation":"73:22:163","nodeType":"ContractDefinition","nodes":[{"functionSelector":"474cf53d","id":34860,"implemented":false,"kind":"function","modifiers":[],"name":"depositETH","nameLocation":"109:10:163","nodeType":"FunctionDefinition","parameters":{"id":34858,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34853,"mutability":"mutable","name":"pool","nameLocation":"128:4:163","nodeType":"VariableDeclaration","scope":34860,"src":"120:12:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34852,"name":"address","nodeType":"ElementaryTypeName","src":"120:7:163","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34855,"mutability":"mutable","name":"onBehalfOf","nameLocation":"142:10:163","nodeType":"VariableDeclaration","scope":34860,"src":"134:18:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34854,"name":"address","nodeType":"ElementaryTypeName","src":"134:7:163","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34857,"mutability":"mutable","name":"referralCode","nameLocation":"161:12:163","nodeType":"VariableDeclaration","scope":34860,"src":"154:19:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":34856,"name":"uint16","nodeType":"ElementaryTypeName","src":"154:6:163","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"119:55:163"},"returnParameters":{"id":34859,"nodeType":"ParameterList","parameters":[],"src":"191:0:163"},"scope":34909,"src":"100:92:163","stateMutability":"payable","virtual":false,"visibility":"external"},{"functionSelector":"80500d20","id":34869,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawETH","nameLocation":"205:11:163","nodeType":"FunctionDefinition","parameters":{"id":34867,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34862,"mutability":"mutable","name":"pool","nameLocation":"225:4:163","nodeType":"VariableDeclaration","scope":34869,"src":"217:12:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34861,"name":"address","nodeType":"ElementaryTypeName","src":"217:7:163","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34864,"mutability":"mutable","name":"amount","nameLocation":"239:6:163","nodeType":"VariableDeclaration","scope":34869,"src":"231:14:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34863,"name":"uint256","nodeType":"ElementaryTypeName","src":"231:7:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34866,"mutability":"mutable","name":"onBehalfOf","nameLocation":"255:10:163","nodeType":"VariableDeclaration","scope":34869,"src":"247:18:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34865,"name":"address","nodeType":"ElementaryTypeName","src":"247:7:163","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"216:50:163"},"returnParameters":{"id":34868,"nodeType":"ParameterList","parameters":[],"src":"275:0:163"},"scope":34909,"src":"196:80:163","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"02c5fcf8","id":34880,"implemented":false,"kind":"function","modifiers":[],"name":"repayETH","nameLocation":"289:8:163","nodeType":"FunctionDefinition","parameters":{"id":34878,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34871,"mutability":"mutable","name":"pool","nameLocation":"311:4:163","nodeType":"VariableDeclaration","scope":34880,"src":"303:12:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34870,"name":"address","nodeType":"ElementaryTypeName","src":"303:7:163","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34873,"mutability":"mutable","name":"amount","nameLocation":"329:6:163","nodeType":"VariableDeclaration","scope":34880,"src":"321:14:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34872,"name":"uint256","nodeType":"ElementaryTypeName","src":"321:7:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34875,"mutability":"mutable","name":"rateMode","nameLocation":"349:8:163","nodeType":"VariableDeclaration","scope":34880,"src":"341:16:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34874,"name":"uint256","nodeType":"ElementaryTypeName","src":"341:7:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34877,"mutability":"mutable","name":"onBehalfOf","nameLocation":"371:10:163","nodeType":"VariableDeclaration","scope":34880,"src":"363:18:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34876,"name":"address","nodeType":"ElementaryTypeName","src":"363:7:163","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"297:88:163"},"returnParameters":{"id":34879,"nodeType":"ParameterList","parameters":[],"src":"402:0:163"},"scope":34909,"src":"280:123:163","stateMutability":"payable","virtual":false,"visibility":"external"},{"functionSelector":"66514c97","id":34891,"implemented":false,"kind":"function","modifiers":[],"name":"borrowETH","nameLocation":"416:9:163","nodeType":"FunctionDefinition","parameters":{"id":34889,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34882,"mutability":"mutable","name":"pool","nameLocation":"439:4:163","nodeType":"VariableDeclaration","scope":34891,"src":"431:12:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34881,"name":"address","nodeType":"ElementaryTypeName","src":"431:7:163","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34884,"mutability":"mutable","name":"amount","nameLocation":"457:6:163","nodeType":"VariableDeclaration","scope":34891,"src":"449:14:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34883,"name":"uint256","nodeType":"ElementaryTypeName","src":"449:7:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34886,"mutability":"mutable","name":"interestRateMode","nameLocation":"477:16:163","nodeType":"VariableDeclaration","scope":34891,"src":"469:24:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34885,"name":"uint256","nodeType":"ElementaryTypeName","src":"469:7:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34888,"mutability":"mutable","name":"referralCode","nameLocation":"506:12:163","nodeType":"VariableDeclaration","scope":34891,"src":"499:19:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":34887,"name":"uint16","nodeType":"ElementaryTypeName","src":"499:6:163","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"425:97:163"},"returnParameters":{"id":34890,"nodeType":"ParameterList","parameters":[],"src":"531:0:163"},"scope":34909,"src":"407:125:163","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"d4c40b6c","id":34908,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawETHWithPermit","nameLocation":"545:21:163","nodeType":"FunctionDefinition","parameters":{"id":34906,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34893,"mutability":"mutable","name":"pool","nameLocation":"580:4:163","nodeType":"VariableDeclaration","scope":34908,"src":"572:12:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34892,"name":"address","nodeType":"ElementaryTypeName","src":"572:7:163","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34895,"mutability":"mutable","name":"amount","nameLocation":"598:6:163","nodeType":"VariableDeclaration","scope":34908,"src":"590:14:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34894,"name":"uint256","nodeType":"ElementaryTypeName","src":"590:7:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34897,"mutability":"mutable","name":"to","nameLocation":"618:2:163","nodeType":"VariableDeclaration","scope":34908,"src":"610:10:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34896,"name":"address","nodeType":"ElementaryTypeName","src":"610:7:163","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34899,"mutability":"mutable","name":"deadline","nameLocation":"634:8:163","nodeType":"VariableDeclaration","scope":34908,"src":"626:16:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34898,"name":"uint256","nodeType":"ElementaryTypeName","src":"626:7:163","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34901,"mutability":"mutable","name":"permitV","nameLocation":"654:7:163","nodeType":"VariableDeclaration","scope":34908,"src":"648:13:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":34900,"name":"uint8","nodeType":"ElementaryTypeName","src":"648:5:163","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":34903,"mutability":"mutable","name":"permitR","nameLocation":"675:7:163","nodeType":"VariableDeclaration","scope":34908,"src":"667:15:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":34902,"name":"bytes32","nodeType":"ElementaryTypeName","src":"667:7:163","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":34905,"mutability":"mutable","name":"permitS","nameLocation":"696:7:163","nodeType":"VariableDeclaration","scope":34908,"src":"688:15:163","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":34904,"name":"bytes32","nodeType":"ElementaryTypeName","src":"688:7:163","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"566:141:163"},"returnParameters":{"id":34907,"nodeType":"ParameterList","parameters":[],"src":"716:0:163"},"scope":34909,"src":"536:181:163","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":34910,"src":"63:656:163","usedErrors":[]}],"src":"37:683:163"},"id":163},"contracts/mocks/ATokenMock.sol":{"ast":{"absolutePath":"contracts/mocks/ATokenMock.sol","exportedSymbols":{"ATokenMock":[35074],"IRewardsController":[39352]},"id":35075,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":34911,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:164"},{"absolutePath":"contracts/rewards/interfaces/IRewardsController.sol","file":"../rewards/interfaces/IRewardsController.sol","id":34913,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35075,"sourceUnit":39353,"src":"63:80:164","symbolAliases":[{"foreign":{"id":34912,"name":"IRewardsController","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:18:164","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"ATokenMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":35074,"linearizedBaseContracts":[35074],"name":"ATokenMock","nameLocation":"154:10:164","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"b41c6f98","id":34916,"mutability":"mutable","name":"_aic","nameLocation":"195:4:164","nodeType":"VariableDeclaration","scope":35074,"src":"169:30:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"},"typeName":{"id":34915,"nodeType":"UserDefinedTypeName","pathNode":{"id":34914,"name":"IRewardsController","nodeType":"IdentifierPath","referencedDeclaration":39352,"src":"169:18:164"},"referencedDeclaration":39352,"src":"169:18:164","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"visibility":"public"},{"constant":false,"id":34918,"mutability":"mutable","name":"_userBalance","nameLocation":"220:12:164","nodeType":"VariableDeclaration","scope":35074,"src":"203:29:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34917,"name":"uint256","nodeType":"ElementaryTypeName","src":"203:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34920,"mutability":"mutable","name":"_totalSupply","nameLocation":"253:12:164","nodeType":"VariableDeclaration","scope":35074,"src":"236:29:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34919,"name":"uint256","nodeType":"ElementaryTypeName","src":"236:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34922,"mutability":"immutable","name":"_decimals","nameLocation":"296:9:164","nodeType":"VariableDeclaration","scope":35074,"src":"269:36:164","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34921,"name":"uint256","nodeType":"ElementaryTypeName","src":"269:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"anonymous":false,"id":34934,"name":"AssetConfigUpdated","nameLocation":"386:18:164","nodeType":"EventDefinition","parameters":{"id":34933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34924,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"426:5:164","nodeType":"VariableDeclaration","scope":34934,"src":"410:21:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34923,"name":"address","nodeType":"ElementaryTypeName","src":"410:7:164","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34926,"indexed":true,"mutability":"mutable","name":"reward","nameLocation":"453:6:164","nodeType":"VariableDeclaration","scope":34934,"src":"437:22:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34925,"name":"address","nodeType":"ElementaryTypeName","src":"437:7:164","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34928,"indexed":false,"mutability":"mutable","name":"emission","nameLocation":"473:8:164","nodeType":"VariableDeclaration","scope":34934,"src":"465:16:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34927,"name":"uint256","nodeType":"ElementaryTypeName","src":"465:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34930,"indexed":false,"mutability":"mutable","name":"distributionEnd","nameLocation":"495:15:164","nodeType":"VariableDeclaration","scope":34934,"src":"487:23:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34929,"name":"uint256","nodeType":"ElementaryTypeName","src":"487:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34932,"indexed":false,"mutability":"mutable","name":"assetIndex","nameLocation":"524:10:164","nodeType":"VariableDeclaration","scope":34934,"src":"516:18:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34931,"name":"uint256","nodeType":"ElementaryTypeName","src":"516:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"404:134:164"},"src":"380:159:164"},{"anonymous":false,"id":34946,"name":"Accrued","nameLocation":"549:7:164","nodeType":"EventDefinition","parameters":{"id":34945,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34936,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"578:5:164","nodeType":"VariableDeclaration","scope":34946,"src":"562:21:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34935,"name":"address","nodeType":"ElementaryTypeName","src":"562:7:164","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34938,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"605:4:164","nodeType":"VariableDeclaration","scope":34946,"src":"589:20:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34937,"name":"address","nodeType":"ElementaryTypeName","src":"589:7:164","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34940,"indexed":false,"mutability":"mutable","name":"assetIndex","nameLocation":"623:10:164","nodeType":"VariableDeclaration","scope":34946,"src":"615:18:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34939,"name":"uint256","nodeType":"ElementaryTypeName","src":"615:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34942,"indexed":false,"mutability":"mutable","name":"userIndex","nameLocation":"647:9:164","nodeType":"VariableDeclaration","scope":34946,"src":"639:17:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34941,"name":"uint256","nodeType":"ElementaryTypeName","src":"639:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34944,"indexed":false,"mutability":"mutable","name":"rewardsAccrued","nameLocation":"670:14:164","nodeType":"VariableDeclaration","scope":34946,"src":"662:22:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34943,"name":"uint256","nodeType":"ElementaryTypeName","src":"662:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"556:132:164"},"src":"543:146:164"},{"body":{"id":34962,"nodeType":"Block","src":"747:47:164","statements":[{"expression":{"id":34956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34954,"name":"_aic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34916,"src":"753:4:164","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":34955,"name":"aic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34949,"src":"760:3:164","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"src":"753:10:164","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":34957,"nodeType":"ExpressionStatement","src":"753:10:164"},{"expression":{"id":34960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34958,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34922,"src":"769:9:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":34959,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34951,"src":"781:8:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"769:20:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34961,"nodeType":"ExpressionStatement","src":"769:20:164"}]},"id":34963,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":34952,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34949,"mutability":"mutable","name":"aic","nameLocation":"724:3:164","nodeType":"VariableDeclaration","scope":34963,"src":"705:22:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"},"typeName":{"id":34948,"nodeType":"UserDefinedTypeName","pathNode":{"id":34947,"name":"IRewardsController","nodeType":"IdentifierPath","referencedDeclaration":39352,"src":"705:18:164"},"referencedDeclaration":39352,"src":"705:18:164","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"visibility":"internal"},{"constant":false,"id":34951,"mutability":"mutable","name":"decimals","nameLocation":"737:8:164","nodeType":"VariableDeclaration","scope":34963,"src":"729:16:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34950,"name":"uint256","nodeType":"ElementaryTypeName","src":"729:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"704:42:164"},"returnParameters":{"id":34953,"nodeType":"ParameterList","parameters":[],"src":"747:0:164"},"scope":35074,"src":"693:101:164","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":34980,"nodeType":"Block","src":"890:60:164","statements":[{"expression":{"arguments":[{"id":34975,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34965,"src":"914:4:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":34976,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34967,"src":"920:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":34977,"name":"userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34969,"src":"933:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":34972,"name":"_aic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34916,"src":"896:4:164","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":34974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"handleAction","nodeType":"MemberAccess","referencedDeclaration":39261,"src":"896:17:164","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256) external"}},"id":34978,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"896:49:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34979,"nodeType":"ExpressionStatement","src":"896:49:164"}]},"functionSelector":"34743e7c","id":34981,"implemented":true,"kind":"function","modifiers":[],"name":"handleActionOnAic","nameLocation":"807:17:164","nodeType":"FunctionDefinition","parameters":{"id":34970,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34965,"mutability":"mutable","name":"user","nameLocation":"833:4:164","nodeType":"VariableDeclaration","scope":34981,"src":"825:12:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34964,"name":"address","nodeType":"ElementaryTypeName","src":"825:7:164","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34967,"mutability":"mutable","name":"totalSupply","nameLocation":"847:11:164","nodeType":"VariableDeclaration","scope":34981,"src":"839:19:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34966,"name":"uint256","nodeType":"ElementaryTypeName","src":"839:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34969,"mutability":"mutable","name":"userBalance","nameLocation":"868:11:164","nodeType":"VariableDeclaration","scope":34981,"src":"860:19:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34968,"name":"uint256","nodeType":"ElementaryTypeName","src":"860:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"824:56:164"},"returnParameters":{"id":34971,"nodeType":"ParameterList","parameters":[],"src":"890:0:164"},"scope":35074,"src":"798:152:164","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":35006,"nodeType":"Block","src":"1068:115:164","statements":[{"expression":{"arguments":[{"id":34993,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34983,"src":"1092:4:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":34994,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34985,"src":"1098:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":34995,"name":"userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34987,"src":"1111:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":34990,"name":"_aic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34916,"src":"1074:4:164","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":34992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"handleAction","nodeType":"MemberAccess","referencedDeclaration":39261,"src":"1074:17:164","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256) external"}},"id":34996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1074:49:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34997,"nodeType":"ExpressionStatement","src":"1074:49:164"},{"expression":{"arguments":[{"id":35001,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34983,"src":"1147:4:164","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":35002,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34985,"src":"1153:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":35003,"name":"userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34987,"src":"1166:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":34998,"name":"_aic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34916,"src":"1129:4:164","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":35000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"handleAction","nodeType":"MemberAccess","referencedDeclaration":39261,"src":"1129:17:164","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,uint256) external"}},"id":35004,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1129:49:164","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35005,"nodeType":"ExpressionStatement","src":"1129:49:164"}]},"functionSelector":"8d279294","id":35007,"implemented":true,"kind":"function","modifiers":[],"name":"doubleHandleActionOnAic","nameLocation":"963:23:164","nodeType":"FunctionDefinition","parameters":{"id":34988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34983,"mutability":"mutable","name":"user","nameLocation":"1000:4:164","nodeType":"VariableDeclaration","scope":35007,"src":"992:12:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34982,"name":"address","nodeType":"ElementaryTypeName","src":"992:7:164","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34985,"mutability":"mutable","name":"totalSupply","nameLocation":"1018:11:164","nodeType":"VariableDeclaration","scope":35007,"src":"1010:19:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34984,"name":"uint256","nodeType":"ElementaryTypeName","src":"1010:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34987,"mutability":"mutable","name":"userBalance","nameLocation":"1043:11:164","nodeType":"VariableDeclaration","scope":35007,"src":"1035:19:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34986,"name":"uint256","nodeType":"ElementaryTypeName","src":"1035:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"986:72:164"},"returnParameters":{"id":34989,"nodeType":"ParameterList","parameters":[],"src":"1068:0:164"},"scope":35074,"src":"954:229:164","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":35022,"nodeType":"Block","src":"1269:69:164","statements":[{"expression":{"id":35016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35014,"name":"_userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34918,"src":"1275:12:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35015,"name":"userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35009,"src":"1290:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1275:26:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35017,"nodeType":"ExpressionStatement","src":"1275:26:164"},{"expression":{"id":35020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35018,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34920,"src":"1307:12:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35019,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35011,"src":"1322:11:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1307:26:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35021,"nodeType":"ExpressionStatement","src":"1307:26:164"}]},"functionSelector":"f794ca51","id":35023,"implemented":true,"kind":"function","modifiers":[],"name":"setUserBalanceAndSupply","nameLocation":"1196:23:164","nodeType":"FunctionDefinition","parameters":{"id":35012,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35009,"mutability":"mutable","name":"userBalance","nameLocation":"1228:11:164","nodeType":"VariableDeclaration","scope":35023,"src":"1220:19:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35008,"name":"uint256","nodeType":"ElementaryTypeName","src":"1220:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35011,"mutability":"mutable","name":"totalSupply","nameLocation":"1249:11:164","nodeType":"VariableDeclaration","scope":35023,"src":"1241:19:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35010,"name":"uint256","nodeType":"ElementaryTypeName","src":"1241:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1219:42:164"},"returnParameters":{"id":35013,"nodeType":"ParameterList","parameters":[],"src":"1269:0:164"},"scope":35074,"src":"1187:151:164","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":35036,"nodeType":"Block","src":"1431:46:164","statements":[{"expression":{"components":[{"id":35032,"name":"_userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34918,"src":"1445:12:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":35033,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34920,"src":"1459:12:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35034,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1444:28:164","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":35031,"id":35035,"nodeType":"Return","src":"1437:35:164"}]},"functionSelector":"0afbcdc9","id":35037,"implemented":true,"kind":"function","modifiers":[],"name":"getScaledUserBalanceAndSupply","nameLocation":"1351:29:164","nodeType":"FunctionDefinition","parameters":{"id":35026,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35025,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35037,"src":"1381:7:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35024,"name":"address","nodeType":"ElementaryTypeName","src":"1381:7:164","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1380:9:164"},"returnParameters":{"id":35031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35028,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35037,"src":"1413:7:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35027,"name":"uint256","nodeType":"ElementaryTypeName","src":"1413:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35030,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35037,"src":"1422:7:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35029,"name":"uint256","nodeType":"ElementaryTypeName","src":"1422:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1412:18:164"},"scope":35074,"src":"1342:135:164","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":35044,"nodeType":"Block","src":"1542:30:164","statements":[{"expression":{"id":35042,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34920,"src":"1555:12:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":35041,"id":35043,"nodeType":"Return","src":"1548:19:164"}]},"functionSelector":"b1bf962d","id":35045,"implemented":true,"kind":"function","modifiers":[],"name":"scaledTotalSupply","nameLocation":"1490:17:164","nodeType":"FunctionDefinition","parameters":{"id":35038,"nodeType":"ParameterList","parameters":[],"src":"1507:2:164"},"returnParameters":{"id":35041,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35040,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35045,"src":"1533:7:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35039,"name":"uint256","nodeType":"ElementaryTypeName","src":"1533:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1532:9:164"},"scope":35074,"src":"1481:91:164","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":35052,"nodeType":"Block","src":"1631:30:164","statements":[{"expression":{"id":35050,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34920,"src":"1644:12:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":35049,"id":35051,"nodeType":"Return","src":"1637:19:164"}]},"functionSelector":"18160ddd","id":35053,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"1585:11:164","nodeType":"FunctionDefinition","parameters":{"id":35046,"nodeType":"ParameterList","parameters":[],"src":"1596:2:164"},"returnParameters":{"id":35049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35048,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35053,"src":"1622:7:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35047,"name":"uint256","nodeType":"ElementaryTypeName","src":"1622:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1621:9:164"},"scope":35074,"src":"1576:85:164","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":35064,"nodeType":"Block","src":"1700:49:164","statements":[{"expression":{"id":35058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35056,"name":"_userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34918,"src":"1706:12:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":35057,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1721:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1706:16:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35059,"nodeType":"ExpressionStatement","src":"1706:16:164"},{"expression":{"id":35062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35060,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34920,"src":"1728:12:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":35061,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1743:1:164","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1728:16:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35063,"nodeType":"ExpressionStatement","src":"1728:16:164"}]},"functionSelector":"b39944ba","id":35065,"implemented":true,"kind":"function","modifiers":[],"name":"cleanUserState","nameLocation":"1674:14:164","nodeType":"FunctionDefinition","parameters":{"id":35054,"nodeType":"ParameterList","parameters":[],"src":"1688:2:164"},"returnParameters":{"id":35055,"nodeType":"ParameterList","parameters":[],"src":"1700:0:164"},"scope":35074,"src":"1665:84:164","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":35072,"nodeType":"Block","src":"1805:27:164","statements":[{"expression":{"id":35070,"name":"_decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34922,"src":"1818:9:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":35069,"id":35071,"nodeType":"Return","src":"1811:16:164"}]},"functionSelector":"313ce567","id":35073,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"1762:8:164","nodeType":"FunctionDefinition","parameters":{"id":35066,"nodeType":"ParameterList","parameters":[],"src":"1770:2:164"},"returnParameters":{"id":35069,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35068,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35073,"src":"1796:7:164","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35067,"name":"uint256","nodeType":"ElementaryTypeName","src":"1796:7:164","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1795:9:164"},"scope":35074,"src":"1753:79:164","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":35075,"src":"145:1689:164","usedErrors":[]}],"src":"37:1798:164"},"id":164},"contracts/mocks/MockBadTransferStrategy.sol":{"ast":{"absolutePath":"contracts/mocks/MockBadTransferStrategy.sol","exportedSymbols":{"GPv2SafeERC20":[118],"IERC20":[1442],"ITransferStrategyBase":[39643],"MockBadTransferStrategy":[35128],"TransferStrategyBase":[40099]},"id":35129,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":35076,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:165"},{"absolutePath":"contracts/rewards/interfaces/ITransferStrategyBase.sol","file":"../rewards/interfaces/ITransferStrategyBase.sol","id":35078,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35129,"sourceUnit":39644,"src":"63:86:165","symbolAliases":[{"foreign":{"id":35077,"name":"ITransferStrategyBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:21:165","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/rewards/transfer-strategies/TransferStrategyBase.sol","file":"../rewards/transfer-strategies/TransferStrategyBase.sol","id":35080,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35129,"sourceUnit":40100,"src":"150:93:165","symbolAliases":[{"foreign":{"id":35079,"name":"TransferStrategyBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"158:20:165","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":35082,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35129,"sourceUnit":119,"src":"244:102:165","symbolAliases":[{"foreign":{"id":35081,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"252:13:165","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","id":35084,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35129,"sourceUnit":1443,"src":"347:94:165","symbolAliases":[{"foreign":{"id":35083,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"355:6:165","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":35086,"name":"TransferStrategyBase","nodeType":"IdentifierPath","referencedDeclaration":40099,"src":"626:20:165"},"id":35087,"nodeType":"InheritanceSpecifier","src":"626:20:165"}],"canonicalName":"MockBadTransferStrategy","contractDependencies":[],"contractKind":"contract","documentation":{"id":35085,"nodeType":"StructuredDocumentation","src":"443:146:165","text":" @title MockBadTransferStrategy\n @notice Transfer strategy that always return false at performTransfer and does noop.\n @author Aave*"},"fullyImplemented":true,"id":35128,"linearizedBaseContracts":[35128,40099,39643],"name":"MockBadTransferStrategy","nameLocation":"599:23:165","nodeType":"ContractDefinition","nodes":[{"id":35091,"libraryName":{"id":35088,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"657:13:165"},"nodeType":"UsingForDirective","src":"651:31:165","typeName":{"id":35090,"nodeType":"UserDefinedTypeName","pathNode":{"id":35089,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"675:6:165"},"referencedDeclaration":1442,"src":"675:6:165","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"constant":false,"id":35093,"mutability":"mutable","name":"ignoreWarning","nameLocation":"777:13:165","nodeType":"VariableDeclaration","scope":35128,"src":"769:21:165","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35092,"name":"uint256","nodeType":"ElementaryTypeName","src":"769:7:165","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"body":{"id":35104,"nodeType":"Block","src":"928:2:165","statements":[]},"id":35105,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":35100,"name":"incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35095,"src":"892:20:165","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":35101,"name":"rewardsAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35097,"src":"914:12:165","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":35102,"kind":"baseConstructorSpecifier","modifierName":{"id":35099,"name":"TransferStrategyBase","nodeType":"IdentifierPath","referencedDeclaration":40099,"src":"871:20:165"},"nodeType":"ModifierInvocation","src":"871:56:165"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":35098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35095,"mutability":"mutable","name":"incentivesController","nameLocation":"820:20:165","nodeType":"VariableDeclaration","scope":35105,"src":"812:28:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35094,"name":"address","nodeType":"ElementaryTypeName","src":"812:7:165","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35097,"mutability":"mutable","name":"rewardsAdmin","nameLocation":"854:12:165","nodeType":"VariableDeclaration","scope":35105,"src":"846:20:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35096,"name":"address","nodeType":"ElementaryTypeName","src":"846:7:165","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"806:64:165"},"returnParameters":{"id":35103,"nodeType":"ParameterList","parameters":[],"src":"928:0:165"},"scope":35128,"src":"795:135:165","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[40069],"body":{"id":35126,"nodeType":"Block","src":"1099:46:165","statements":[{"expression":{"id":35122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35120,"name":"ignoreWarning","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35093,"src":"1105:13:165","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":35121,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1121:1:165","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1105:17:165","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35123,"nodeType":"ExpressionStatement","src":"1105:17:165"},{"expression":{"hexValue":"66616c7365","id":35124,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1135:5:165","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":35119,"id":35125,"nodeType":"Return","src":"1128:12:165"}]},"documentation":{"id":35106,"nodeType":"StructuredDocumentation","src":"934:36:165","text":"@inheritdoc TransferStrategyBase"},"functionSelector":"16beb982","id":35127,"implemented":true,"kind":"function","modifiers":[{"id":35116,"kind":"modifierInvocation","modifierName":{"id":35115,"name":"onlyIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":40024,"src":"1059:24:165"},"nodeType":"ModifierInvocation","src":"1059:24:165"}],"name":"performTransfer","nameLocation":"982:15:165","nodeType":"FunctionDefinition","overrides":{"id":35114,"nodeType":"OverrideSpecifier","overrides":[],"src":"1050:8:165"},"parameters":{"id":35113,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35108,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35127,"src":"1003:7:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35107,"name":"address","nodeType":"ElementaryTypeName","src":"1003:7:165","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35110,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35127,"src":"1016:7:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35109,"name":"address","nodeType":"ElementaryTypeName","src":"1016:7:165","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35112,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35127,"src":"1029:7:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35111,"name":"uint256","nodeType":"ElementaryTypeName","src":"1029:7:165","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"997:43:165"},"returnParameters":{"id":35119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35118,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35127,"src":"1093:4:165","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":35117,"name":"bool","nodeType":"ElementaryTypeName","src":"1093:4:165","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1092:6:165"},"scope":35128,"src":"973:172:165","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":35129,"src":"590:557:165","usedErrors":[]}],"src":"37:1111:165"},"id":165},"contracts/mocks/WETH9Mock.sol":{"ast":{"absolutePath":"contracts/mocks/WETH9Mock.sol","exportedSymbols":{"Ownable":[1573],"WETH9":[3228],"WETH9Mock":[35235]},"id":35236,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":35130,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:166"},{"absolutePath":"@aave/core-v3/contracts/dependencies/weth/WETH9.sol","file":"@aave/core-v3/contracts/dependencies/weth/WETH9.sol","id":35132,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35236,"sourceUnit":3229,"src":"62:74:166","symbolAliases":[{"foreign":{"id":35131,"name":"WETH9","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:5:166","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol","id":35134,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35236,"sourceUnit":1574,"src":"137:96:166","symbolAliases":[{"foreign":{"id":35133,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"src":"145:7:166","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":35135,"name":"WETH9","nodeType":"IdentifierPath","referencedDeclaration":3228,"src":"257:5:166"},"id":35136,"nodeType":"InheritanceSpecifier","src":"257:5:166"},{"baseName":{"id":35137,"name":"Ownable","nodeType":"IdentifierPath","referencedDeclaration":1573,"src":"264:7:166"},"id":35138,"nodeType":"InheritanceSpecifier","src":"264:7:166"}],"canonicalName":"WETH9Mock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":35235,"linearizedBaseContracts":[35235,1573,748,3228],"name":"WETH9Mock","nameLocation":"244:9:166","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":35140,"mutability":"mutable","name":"_protected","nameLocation":"290:10:166","nodeType":"VariableDeclaration","scope":35235,"src":"276:24:166","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":35139,"name":"bool","nodeType":"ElementaryTypeName","src":"276:4:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"body":{"id":35158,"nodeType":"Block","src":"447:124:166","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":35145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35143,"name":"_protected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35140,"src":"457:10:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"74727565","id":35144,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"471:4:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"457:18:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35156,"nodeType":"IfStatement","src":"453:107:166","trueBody":{"id":35155,"nodeType":"Block","src":"477:83:166","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":35151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":35147,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1509,"src":"493:5:166","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":35148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"493:7:166","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":35149,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"504:10:166","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":35150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"504:12:166","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"493:23:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","id":35152,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"518:34:166","typeDescriptions":{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""},"value":"Ownable: caller is not the owner"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""}],"id":35146,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"485:7:166","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":35153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"485:68:166","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35154,"nodeType":"ExpressionStatement","src":"485:68:166"}]}},{"id":35157,"nodeType":"PlaceholderStatement","src":"565:1:166"}]},"documentation":{"id":35141,"nodeType":"StructuredDocumentation","src":"305:107:166","text":" @dev Function modifier, if _protected is enabled then msg.sender is required to be the owner"},"id":35159,"name":"onlyOwnerIfProtected","nameLocation":"424:20:166","nodeType":"ModifierDefinition","parameters":{"id":35142,"nodeType":"ParameterList","parameters":[],"src":"444:2:166"},"src":"415:156:166","virtual":false,"visibility":"internal"},{"body":{"id":35184,"nodeType":"Block","src":"652:105:166","statements":[{"expression":{"id":35170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35168,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2984,"src":"658:4:166","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35169,"name":"mockName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35161,"src":"665:8:166","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"658:15:166","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":35171,"nodeType":"ExpressionStatement","src":"658:15:166"},{"expression":{"id":35174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35172,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2987,"src":"679:6:166","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35173,"name":"mockSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35163,"src":"688:10:166","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"679:19:166","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":35175,"nodeType":"ExpressionStatement","src":"679:19:166"},{"expression":{"arguments":[{"id":35177,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35165,"src":"723:5:166","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":35176,"name":"transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1572,"src":"705:17:166","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":35178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"705:24:166","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35179,"nodeType":"ExpressionStatement","src":"705:24:166"},{"expression":{"id":35182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35180,"name":"_protected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35140,"src":"735:10:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":35181,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"748:4:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"735:17:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35183,"nodeType":"ExpressionStatement","src":"735:17:166"}]},"id":35185,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":35166,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35161,"mutability":"mutable","name":"mockName","nameLocation":"601:8:166","nodeType":"VariableDeclaration","scope":35185,"src":"587:22:166","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":35160,"name":"string","nodeType":"ElementaryTypeName","src":"587:6:166","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":35163,"mutability":"mutable","name":"mockSymbol","nameLocation":"625:10:166","nodeType":"VariableDeclaration","scope":35185,"src":"611:24:166","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":35162,"name":"string","nodeType":"ElementaryTypeName","src":"611:6:166","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":35165,"mutability":"mutable","name":"owner","nameLocation":"645:5:166","nodeType":"VariableDeclaration","scope":35185,"src":"637:13:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35164,"name":"address","nodeType":"ElementaryTypeName","src":"637:7:166","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"586:65:166"},"returnParameters":{"id":35167,"nodeType":"ParameterList","parameters":[],"src":"652:0:166"},"scope":35235,"src":"575:182:166","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":35213,"nodeType":"Block","src":"850:102:166","statements":[{"expression":{"id":35200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":35196,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3022,"src":"856:9:166","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":35198,"indexExpression":{"id":35197,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35187,"src":"866:7:166","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"856:18:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":35199,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35189,"src":"878:5:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"856:27:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35201,"nodeType":"ExpressionStatement","src":"856:27:166"},{"eventCall":{"arguments":[{"arguments":[{"hexValue":"30","id":35205,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"911:1:166","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":35204,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"903:7:166","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":35203,"name":"address","nodeType":"ElementaryTypeName","src":"903:7:166","typeDescriptions":{}}},"id":35206,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"903:10:166","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":35207,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35187,"src":"915:7:166","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":35208,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35189,"src":"924:5:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":35202,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3006,"src":"894:8:166","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":35209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"894:36:166","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35210,"nodeType":"EmitStatement","src":"889:41:166"},{"expression":{"hexValue":"74727565","id":35211,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"943:4:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":35195,"id":35212,"nodeType":"Return","src":"936:11:166"}]},"functionSelector":"40c10f19","id":35214,"implemented":true,"kind":"function","modifiers":[{"id":35192,"kind":"modifierInvocation","modifierName":{"id":35191,"name":"onlyOwnerIfProtected","nodeType":"IdentifierPath","referencedDeclaration":35159,"src":"814:20:166"},"nodeType":"ModifierInvocation","src":"814:20:166"}],"name":"mint","nameLocation":"770:4:166","nodeType":"FunctionDefinition","parameters":{"id":35190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35187,"mutability":"mutable","name":"account","nameLocation":"783:7:166","nodeType":"VariableDeclaration","scope":35214,"src":"775:15:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35186,"name":"address","nodeType":"ElementaryTypeName","src":"775:7:166","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35189,"mutability":"mutable","name":"value","nameLocation":"800:5:166","nodeType":"VariableDeclaration","scope":35214,"src":"792:13:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35188,"name":"uint256","nodeType":"ElementaryTypeName","src":"792:7:166","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"774:32:166"},"returnParameters":{"id":35195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35194,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35214,"src":"844:4:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":35193,"name":"bool","nodeType":"ElementaryTypeName","src":"844:4:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"843:6:166"},"scope":35235,"src":"761:191:166","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":35225,"nodeType":"Block","src":"1007:29:166","statements":[{"expression":{"id":35223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35221,"name":"_protected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35140,"src":"1013:10:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35222,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35216,"src":"1026:5:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1013:18:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35224,"nodeType":"ExpressionStatement","src":"1013:18:166"}]},"functionSelector":"1c02bc31","id":35226,"implemented":true,"kind":"function","modifiers":[{"id":35219,"kind":"modifierInvocation","modifierName":{"id":35218,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"997:9:166"},"nodeType":"ModifierInvocation","src":"997:9:166"}],"name":"setProtected","nameLocation":"965:12:166","nodeType":"FunctionDefinition","parameters":{"id":35217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35216,"mutability":"mutable","name":"state","nameLocation":"983:5:166","nodeType":"VariableDeclaration","scope":35226,"src":"978:10:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":35215,"name":"bool","nodeType":"ElementaryTypeName","src":"978:4:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"977:12:166"},"returnParameters":{"id":35220,"nodeType":"ParameterList","parameters":[],"src":"1007:0:166"},"scope":35235,"src":"956:80:166","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":35233,"nodeType":"Block","src":"1090:28:166","statements":[{"expression":{"id":35231,"name":"_protected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35140,"src":"1103:10:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":35230,"id":35232,"nodeType":"Return","src":"1096:17:166"}]},"functionSelector":"5300f82b","id":35234,"implemented":true,"kind":"function","modifiers":[],"name":"isProtected","nameLocation":"1049:11:166","nodeType":"FunctionDefinition","parameters":{"id":35227,"nodeType":"ParameterList","parameters":[],"src":"1060:2:166"},"returnParameters":{"id":35230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35229,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35234,"src":"1084:4:166","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":35228,"name":"bool","nodeType":"ElementaryTypeName","src":"1084:4:166","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1083:6:166"},"scope":35235,"src":"1040:78:166","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":35236,"src":"235:885:166","usedErrors":[]}],"src":"37:1084:166"},"id":166},"contracts/mocks/attacks/SelfdestructTransfer.sol":{"ast":{"absolutePath":"contracts/mocks/attacks/SelfdestructTransfer.sol","exportedSymbols":{"SelfdestructTransfer":[35248]},"id":35249,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":35237,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:167"},{"abstract":false,"baseContracts":[],"canonicalName":"SelfdestructTransfer","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":35248,"linearizedBaseContracts":[35248],"name":"SelfdestructTransfer","nameLocation":"72:20:167","nodeType":"ContractDefinition","nodes":[{"body":{"id":35246,"nodeType":"Block","src":"162:27:167","statements":[{"expression":{"arguments":[{"id":35243,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35239,"src":"181:2:167","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":35242,"name":"selfdestruct","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-21,"src":"168:12:167","typeDescriptions":{"typeIdentifier":"t_function_selfdestruct_nonpayable$_t_address_payable_$returns$__$","typeString":"function (address payable)"}},"id":35244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"168:16:167","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35245,"nodeType":"ExpressionStatement","src":"168:16:167"}]},"functionSelector":"785e07b3","id":35247,"implemented":true,"kind":"function","modifiers":[],"name":"destroyAndTransfer","nameLocation":"106:18:167","nodeType":"FunctionDefinition","parameters":{"id":35240,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35239,"mutability":"mutable","name":"to","nameLocation":"141:2:167","nodeType":"VariableDeclaration","scope":35247,"src":"125:18:167","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":35238,"name":"address","nodeType":"ElementaryTypeName","src":"125:15:167","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"}],"src":"124:20:167"},"returnParameters":{"id":35241,"nodeType":"ParameterList","parameters":[],"src":"162:0:167"},"scope":35248,"src":"97:92:167","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":35249,"src":"63:128:167","usedErrors":[]}],"src":"37:155:167"},"id":167},"contracts/mocks/swap/MockParaSwapAugustus.sol":{"ast":{"absolutePath":"contracts/mocks/swap/MockParaSwapAugustus.sol","exportedSymbols":{"IERC20":[1442],"IParaSwapAugustus":[30951],"MintableERC20":[8768],"MockParaSwapAugustus":[35553],"MockParaSwapTokenTransferProxy":[35617]},"id":35554,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":35250,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:168"},{"absolutePath":"contracts/adapters/paraswap/interfaces/IParaSwapAugustus.sol","file":"../../adapters/paraswap/interfaces/IParaSwapAugustus.sol","id":35252,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35554,"sourceUnit":30952,"src":"63:91:168","symbolAliases":[{"foreign":{"id":35251,"name":"IParaSwapAugustus","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:17:168","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/mocks/swap/MockParaSwapTokenTransferProxy.sol","file":"./MockParaSwapTokenTransferProxy.sol","id":35254,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35554,"sourceUnit":35618,"src":"155:84:168","symbolAliases":[{"foreign":{"id":35253,"name":"MockParaSwapTokenTransferProxy","nodeType":"Identifier","overloadedDeclarations":[],"src":"163:30:168","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","id":35256,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35554,"sourceUnit":1443,"src":"240:94:168","symbolAliases":[{"foreign":{"id":35255,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"248:6:168","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol","file":"@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol","id":35258,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35554,"sourceUnit":8769,"src":"335:85:168","symbolAliases":[{"foreign":{"id":35257,"name":"MintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"343:13:168","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":35259,"name":"IParaSwapAugustus","nodeType":"IdentifierPath","referencedDeclaration":30951,"src":"455:17:168"},"id":35260,"nodeType":"InheritanceSpecifier","src":"455:17:168"}],"canonicalName":"MockParaSwapAugustus","contractDependencies":[35617],"contractKind":"contract","fullyImplemented":true,"id":35553,"linearizedBaseContracts":[35553,30951],"name":"MockParaSwapAugustus","nameLocation":"431:20:168","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":35263,"mutability":"immutable","name":"TOKEN_TRANSFER_PROXY","nameLocation":"518:20:168","nodeType":"VariableDeclaration","scope":35553,"src":"477:61:168","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_MockParaSwapTokenTransferProxy_$35617","typeString":"contract MockParaSwapTokenTransferProxy"},"typeName":{"id":35262,"nodeType":"UserDefinedTypeName","pathNode":{"id":35261,"name":"MockParaSwapTokenTransferProxy","nodeType":"IdentifierPath","referencedDeclaration":35617,"src":"477:30:168"},"referencedDeclaration":35617,"src":"477:30:168","typeDescriptions":{"typeIdentifier":"t_contract$_MockParaSwapTokenTransferProxy_$35617","typeString":"contract MockParaSwapTokenTransferProxy"}},"visibility":"internal"},{"constant":false,"id":35265,"mutability":"mutable","name":"_expectingSwap","nameLocation":"547:14:168","nodeType":"VariableDeclaration","scope":35553,"src":"542:19:168","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":35264,"name":"bool","nodeType":"ElementaryTypeName","src":"542:4:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":35267,"mutability":"mutable","name":"_expectedFromToken","nameLocation":"573:18:168","nodeType":"VariableDeclaration","scope":35553,"src":"565:26:168","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35266,"name":"address","nodeType":"ElementaryTypeName","src":"565:7:168","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35269,"mutability":"mutable","name":"_expectedToToken","nameLocation":"603:16:168","nodeType":"VariableDeclaration","scope":35553,"src":"595:24:168","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35268,"name":"address","nodeType":"ElementaryTypeName","src":"595:7:168","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35271,"mutability":"mutable","name":"_expectedFromAmountMin","nameLocation":"632:22:168","nodeType":"VariableDeclaration","scope":35553,"src":"624:30:168","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35270,"name":"uint256","nodeType":"ElementaryTypeName","src":"624:7:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35273,"mutability":"mutable","name":"_expectedFromAmountMax","nameLocation":"666:22:168","nodeType":"VariableDeclaration","scope":35553,"src":"658:30:168","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35272,"name":"uint256","nodeType":"ElementaryTypeName","src":"658:7:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35275,"mutability":"mutable","name":"_receivedAmount","nameLocation":"700:15:168","nodeType":"VariableDeclaration","scope":35553,"src":"692:23:168","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35274,"name":"uint256","nodeType":"ElementaryTypeName","src":"692:7:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35277,"mutability":"mutable","name":"_fromAmount","nameLocation":"728:11:168","nodeType":"VariableDeclaration","scope":35553,"src":"720:19:168","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35276,"name":"uint256","nodeType":"ElementaryTypeName","src":"720:7:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35279,"mutability":"mutable","name":"_expectedToAmountMax","nameLocation":"751:20:168","nodeType":"VariableDeclaration","scope":35553,"src":"743:28:168","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35278,"name":"uint256","nodeType":"ElementaryTypeName","src":"743:7:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35281,"mutability":"mutable","name":"_expectedToAmountMin","nameLocation":"783:20:168","nodeType":"VariableDeclaration","scope":35553,"src":"775:28:168","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35280,"name":"uint256","nodeType":"ElementaryTypeName","src":"775:7:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"body":{"id":35291,"nodeType":"Block","src":"822:70:168","statements":[{"expression":{"id":35289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35284,"name":"TOKEN_TRANSFER_PROXY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35263,"src":"828:20:168","typeDescriptions":{"typeIdentifier":"t_contract$_MockParaSwapTokenTransferProxy_$35617","typeString":"contract MockParaSwapTokenTransferProxy"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":35287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"851:34:168","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$__$returns$_t_contract$_MockParaSwapTokenTransferProxy_$35617_$","typeString":"function () returns (contract MockParaSwapTokenTransferProxy)"},"typeName":{"id":35286,"nodeType":"UserDefinedTypeName","pathNode":{"id":35285,"name":"MockParaSwapTokenTransferProxy","nodeType":"IdentifierPath","referencedDeclaration":35617,"src":"855:30:168"},"referencedDeclaration":35617,"src":"855:30:168","typeDescriptions":{"typeIdentifier":"t_contract$_MockParaSwapTokenTransferProxy_$35617","typeString":"contract MockParaSwapTokenTransferProxy"}}},"id":35288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"851:36:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_MockParaSwapTokenTransferProxy_$35617","typeString":"contract MockParaSwapTokenTransferProxy"}},"src":"828:59:168","typeDescriptions":{"typeIdentifier":"t_contract$_MockParaSwapTokenTransferProxy_$35617","typeString":"contract MockParaSwapTokenTransferProxy"}},"id":35290,"nodeType":"ExpressionStatement","src":"828:59:168"}]},"id":35292,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":35282,"nodeType":"ParameterList","parameters":[],"src":"819:2:168"},"returnParameters":{"id":35283,"nodeType":"ParameterList","parameters":[],"src":"822:0:168"},"scope":35553,"src":"808:84:168","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[30950],"body":{"id":35303,"nodeType":"Block","src":"970:47:168","statements":[{"expression":{"arguments":[{"id":35300,"name":"TOKEN_TRANSFER_PROXY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35263,"src":"991:20:168","typeDescriptions":{"typeIdentifier":"t_contract$_MockParaSwapTokenTransferProxy_$35617","typeString":"contract MockParaSwapTokenTransferProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MockParaSwapTokenTransferProxy_$35617","typeString":"contract MockParaSwapTokenTransferProxy"}],"id":35299,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"983:7:168","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":35298,"name":"address","nodeType":"ElementaryTypeName","src":"983:7:168","typeDescriptions":{}}},"id":35301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"983:29:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":35297,"id":35302,"nodeType":"Return","src":"976:36:168"}]},"functionSelector":"d2c4b598","id":35304,"implemented":true,"kind":"function","modifiers":[],"name":"getTokenTransferProxy","nameLocation":"905:21:168","nodeType":"FunctionDefinition","overrides":{"id":35294,"nodeType":"OverrideSpecifier","overrides":[],"src":"943:8:168"},"parameters":{"id":35293,"nodeType":"ParameterList","parameters":[],"src":"926:2:168"},"returnParameters":{"id":35297,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35296,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35304,"src":"961:7:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35295,"name":"address","nodeType":"ElementaryTypeName","src":"961:7:168","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"960:9:168"},"scope":35553,"src":"896:121:168","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":35341,"nodeType":"Block","src":"1180:226:168","statements":[{"expression":{"id":35319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35317,"name":"_expectingSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35265,"src":"1186:14:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":35318,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1203:4:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"1186:21:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35320,"nodeType":"ExpressionStatement","src":"1186:21:168"},{"expression":{"id":35323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35321,"name":"_expectedFromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35267,"src":"1213:18:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35322,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35306,"src":"1234:9:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1213:30:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":35324,"nodeType":"ExpressionStatement","src":"1213:30:168"},{"expression":{"id":35327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35325,"name":"_expectedToToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35269,"src":"1249:16:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35326,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35308,"src":"1268:7:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1249:26:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":35328,"nodeType":"ExpressionStatement","src":"1249:26:168"},{"expression":{"id":35331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35329,"name":"_expectedFromAmountMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35271,"src":"1281:22:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35330,"name":"fromAmountMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35310,"src":"1306:13:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1281:38:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35332,"nodeType":"ExpressionStatement","src":"1281:38:168"},{"expression":{"id":35335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35333,"name":"_expectedFromAmountMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35273,"src":"1325:22:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35334,"name":"fromAmountMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35312,"src":"1350:13:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1325:38:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35336,"nodeType":"ExpressionStatement","src":"1325:38:168"},{"expression":{"id":35339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35337,"name":"_receivedAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35275,"src":"1369:15:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35338,"name":"receivedAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35314,"src":"1387:14:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1369:32:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35340,"nodeType":"ExpressionStatement","src":"1369:32:168"}]},"functionSelector":"b166d5f0","id":35342,"implemented":true,"kind":"function","modifiers":[],"name":"expectSwap","nameLocation":"1030:10:168","nodeType":"FunctionDefinition","parameters":{"id":35315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35306,"mutability":"mutable","name":"fromToken","nameLocation":"1054:9:168","nodeType":"VariableDeclaration","scope":35342,"src":"1046:17:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35305,"name":"address","nodeType":"ElementaryTypeName","src":"1046:7:168","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35308,"mutability":"mutable","name":"toToken","nameLocation":"1077:7:168","nodeType":"VariableDeclaration","scope":35342,"src":"1069:15:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35307,"name":"address","nodeType":"ElementaryTypeName","src":"1069:7:168","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35310,"mutability":"mutable","name":"fromAmountMin","nameLocation":"1098:13:168","nodeType":"VariableDeclaration","scope":35342,"src":"1090:21:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35309,"name":"uint256","nodeType":"ElementaryTypeName","src":"1090:7:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35312,"mutability":"mutable","name":"fromAmountMax","nameLocation":"1125:13:168","nodeType":"VariableDeclaration","scope":35342,"src":"1117:21:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35311,"name":"uint256","nodeType":"ElementaryTypeName","src":"1117:7:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35314,"mutability":"mutable","name":"receivedAmount","nameLocation":"1152:14:168","nodeType":"VariableDeclaration","scope":35342,"src":"1144:22:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35313,"name":"uint256","nodeType":"ElementaryTypeName","src":"1144:7:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1040:130:168"},"returnParameters":{"id":35316,"nodeType":"ParameterList","parameters":[],"src":"1180:0:168"},"scope":35553,"src":"1021:385:168","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":35379,"nodeType":"Block","src":"1560:210:168","statements":[{"expression":{"id":35357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35355,"name":"_expectingSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35265,"src":"1566:14:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":35356,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1583:4:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"1566:21:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35358,"nodeType":"ExpressionStatement","src":"1566:21:168"},{"expression":{"id":35361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35359,"name":"_expectedFromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35267,"src":"1593:18:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35360,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35344,"src":"1614:9:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1593:30:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":35362,"nodeType":"ExpressionStatement","src":"1593:30:168"},{"expression":{"id":35365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35363,"name":"_expectedToToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35269,"src":"1629:16:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35364,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35346,"src":"1648:7:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1629:26:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":35366,"nodeType":"ExpressionStatement","src":"1629:26:168"},{"expression":{"id":35369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35367,"name":"_fromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35277,"src":"1661:11:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35368,"name":"fromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35348,"src":"1675:10:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1661:24:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35370,"nodeType":"ExpressionStatement","src":"1661:24:168"},{"expression":{"id":35373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35371,"name":"_expectedToAmountMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35281,"src":"1691:20:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35372,"name":"toAmountMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35350,"src":"1714:11:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1691:34:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35374,"nodeType":"ExpressionStatement","src":"1691:34:168"},{"expression":{"id":35377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35375,"name":"_expectedToAmountMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35279,"src":"1731:20:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35376,"name":"toAmountMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35352,"src":"1754:11:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1731:34:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35378,"nodeType":"ExpressionStatement","src":"1731:34:168"}]},"functionSelector":"8507eae8","id":35380,"implemented":true,"kind":"function","modifiers":[],"name":"expectBuy","nameLocation":"1419:9:168","nodeType":"FunctionDefinition","parameters":{"id":35353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35344,"mutability":"mutable","name":"fromToken","nameLocation":"1442:9:168","nodeType":"VariableDeclaration","scope":35380,"src":"1434:17:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35343,"name":"address","nodeType":"ElementaryTypeName","src":"1434:7:168","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35346,"mutability":"mutable","name":"toToken","nameLocation":"1465:7:168","nodeType":"VariableDeclaration","scope":35380,"src":"1457:15:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35345,"name":"address","nodeType":"ElementaryTypeName","src":"1457:7:168","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35348,"mutability":"mutable","name":"fromAmount","nameLocation":"1486:10:168","nodeType":"VariableDeclaration","scope":35380,"src":"1478:18:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35347,"name":"uint256","nodeType":"ElementaryTypeName","src":"1478:7:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35350,"mutability":"mutable","name":"toAmountMin","nameLocation":"1510:11:168","nodeType":"VariableDeclaration","scope":35380,"src":"1502:19:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35349,"name":"uint256","nodeType":"ElementaryTypeName","src":"1502:7:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35352,"mutability":"mutable","name":"toAmountMax","nameLocation":"1535:11:168","nodeType":"VariableDeclaration","scope":35380,"src":"1527:19:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35351,"name":"uint256","nodeType":"ElementaryTypeName","src":"1527:7:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1428:122:168"},"returnParameters":{"id":35354,"nodeType":"ParameterList","parameters":[],"src":"1560:0:168"},"scope":35553,"src":"1410:360:168","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":35465,"nodeType":"Block","src":"1909:677:168","statements":[{"expression":{"arguments":[{"id":35394,"name":"_expectingSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35265,"src":"1923:14:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4e6f7420657870656374696e672073776170","id":35395,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1939:20:168","typeDescriptions":{"typeIdentifier":"t_stringliteral_8f4606ce862d2dcb4910a830bcc3fc385da6dd61bedb0a651ca01d292c3c04f7","typeString":"literal_string \"Not expecting swap\""},"value":"Not expecting swap"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8f4606ce862d2dcb4910a830bcc3fc385da6dd61bedb0a651ca01d292c3c04f7","typeString":"literal_string \"Not expecting swap\""}],"id":35393,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1915:7:168","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":35396,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1915:45:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35397,"nodeType":"ExpressionStatement","src":"1915:45:168"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":35401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35399,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35382,"src":"1974:9:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":35400,"name":"_expectedFromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35267,"src":"1987:18:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1974:31:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"556e65787065637465642066726f6d20746f6b656e","id":35402,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2007:23:168","typeDescriptions":{"typeIdentifier":"t_stringliteral_9dc7aee206f443a31ed38f02e91565382cb16275f55657283bdac51fd73707cf","typeString":"literal_string \"Unexpected from token\""},"value":"Unexpected from token"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9dc7aee206f443a31ed38f02e91565382cb16275f55657283bdac51fd73707cf","typeString":"literal_string \"Unexpected from token\""}],"id":35398,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1966:7:168","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":35403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1966:65:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35404,"nodeType":"ExpressionStatement","src":"1966:65:168"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":35408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35406,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35384,"src":"2045:7:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":35407,"name":"_expectedToToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35269,"src":"2056:16:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2045:27:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"556e657870656374656420746f20746f6b656e","id":35409,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2074:21:168","typeDescriptions":{"typeIdentifier":"t_stringliteral_98df0047abec68ccaf8b17ff7509a433c9ef30fa1ddc48703b31e1361b6a4757","typeString":"literal_string \"Unexpected to token\""},"value":"Unexpected to token"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_98df0047abec68ccaf8b17ff7509a433c9ef30fa1ddc48703b31e1361b6a4757","typeString":"literal_string \"Unexpected to token\""}],"id":35405,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2037:7:168","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":35410,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2037:59:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35411,"nodeType":"ExpressionStatement","src":"2037:59:168"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":35419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35413,"name":"fromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35386,"src":"2117:10:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":35414,"name":"_expectedFromAmountMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35271,"src":"2131:22:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2117:36:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35416,"name":"fromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35386,"src":"2157:10:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":35417,"name":"_expectedFromAmountMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35273,"src":"2171:22:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2157:36:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2117:76:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"46726f6d20616d6f756e74206f7574206f662072616e6765","id":35420,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2201:26:168","typeDescriptions":{"typeIdentifier":"t_stringliteral_474d605ea952845ff7761621776201dd6a93c1d6b37123ee8ab9628d0779ed3b","typeString":"literal_string \"From amount out of range\""},"value":"From amount out of range"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_474d605ea952845ff7761621776201dd6a93c1d6b37123ee8ab9628d0779ed3b","typeString":"literal_string \"From amount out of range\""}],"id":35412,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2102:7:168","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":35421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2102:131:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35422,"nodeType":"ExpressionStatement","src":"2102:131:168"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35424,"name":"_receivedAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35275,"src":"2247:15:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":35425,"name":"toAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35388,"src":"2266:8:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2247:27:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"526563656976656420616d6f756e74206f6620746f6b656e7320617265206c657373207468616e206578706563746564","id":35427,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2276:50:168","typeDescriptions":{"typeIdentifier":"t_stringliteral_119f221b31a88701617d2acf6229cf04b8ec08a37df9d613ef829ba659c0271b","typeString":"literal_string \"Received amount of tokens are less than expected\""},"value":"Received amount of tokens are less than expected"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_119f221b31a88701617d2acf6229cf04b8ec08a37df9d613ef829ba659c0271b","typeString":"literal_string \"Received amount of tokens are less than expected\""}],"id":35423,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2239:7:168","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":35428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2239:88:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35429,"nodeType":"ExpressionStatement","src":"2239:88:168"},{"expression":{"arguments":[{"id":35433,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35382,"src":"2367:9:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":35434,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2378:3:168","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":35435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2378:10:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":35438,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2398:4:168","typeDescriptions":{"typeIdentifier":"t_contract$_MockParaSwapAugustus_$35553","typeString":"contract MockParaSwapAugustus"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MockParaSwapAugustus_$35553","typeString":"contract MockParaSwapAugustus"}],"id":35437,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2390:7:168","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":35436,"name":"address","nodeType":"ElementaryTypeName","src":"2390:7:168","typeDescriptions":{}}},"id":35439,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2390:13:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":35440,"name":"fromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35386,"src":"2405:10:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":35430,"name":"TOKEN_TRANSFER_PROXY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35263,"src":"2333:20:168","typeDescriptions":{"typeIdentifier":"t_contract$_MockParaSwapTokenTransferProxy_$35617","typeString":"contract MockParaSwapTokenTransferProxy"}},"id":35432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":35616,"src":"2333:33:168","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256) external"}},"id":35441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2333:83:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35442,"nodeType":"ExpressionStatement","src":"2333:83:168"},{"expression":{"arguments":[{"id":35447,"name":"_receivedAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35275,"src":"2450:15:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":35444,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35384,"src":"2436:7:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":35443,"name":"MintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8768,"src":"2422:13:168","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MintableERC20_$8768_$","typeString":"type(contract MintableERC20)"}},"id":35445,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2422:22:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$8768","typeString":"contract MintableERC20"}},"id":35446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":8737,"src":"2422:27:168","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256) external returns (bool)"}},"id":35448,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2422:44:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35449,"nodeType":"ExpressionStatement","src":"2422:44:168"},{"expression":{"arguments":[{"expression":{"id":35454,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2497:3:168","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":35455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2497:10:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":35456,"name":"_receivedAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35275,"src":"2509:15:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":35451,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35384,"src":"2479:7:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":35450,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"2472:6:168","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":35452,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2472:15:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":35453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":1391,"src":"2472:24:168","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":35457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2472:53:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35458,"nodeType":"ExpressionStatement","src":"2472:53:168"},{"expression":{"id":35461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35459,"name":"_expectingSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35265,"src":"2531:14:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":35460,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2548:5:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"2531:22:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35462,"nodeType":"ExpressionStatement","src":"2531:22:168"},{"expression":{"id":35463,"name":"_receivedAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35275,"src":"2566:15:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":35392,"id":35464,"nodeType":"Return","src":"2559:22:168"}]},"functionSelector":"fe029156","id":35466,"implemented":true,"kind":"function","modifiers":[],"name":"swap","nameLocation":"1783:4:168","nodeType":"FunctionDefinition","parameters":{"id":35389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35382,"mutability":"mutable","name":"fromToken","nameLocation":"1801:9:168","nodeType":"VariableDeclaration","scope":35466,"src":"1793:17:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35381,"name":"address","nodeType":"ElementaryTypeName","src":"1793:7:168","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35384,"mutability":"mutable","name":"toToken","nameLocation":"1824:7:168","nodeType":"VariableDeclaration","scope":35466,"src":"1816:15:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35383,"name":"address","nodeType":"ElementaryTypeName","src":"1816:7:168","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35386,"mutability":"mutable","name":"fromAmount","nameLocation":"1845:10:168","nodeType":"VariableDeclaration","scope":35466,"src":"1837:18:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35385,"name":"uint256","nodeType":"ElementaryTypeName","src":"1837:7:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35388,"mutability":"mutable","name":"toAmount","nameLocation":"1869:8:168","nodeType":"VariableDeclaration","scope":35466,"src":"1861:16:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35387,"name":"uint256","nodeType":"ElementaryTypeName","src":"1861:7:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1787:94:168"},"returnParameters":{"id":35392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35391,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35466,"src":"1900:7:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35390,"name":"uint256","nodeType":"ElementaryTypeName","src":"1900:7:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1899:9:168"},"scope":35553,"src":"1774:812:168","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":35551,"nodeType":"Block","src":"2724:645:168","statements":[{"expression":{"arguments":[{"id":35480,"name":"_expectingSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35265,"src":"2738:14:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4e6f7420657870656374696e672073776170","id":35481,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2754:20:168","typeDescriptions":{"typeIdentifier":"t_stringliteral_8f4606ce862d2dcb4910a830bcc3fc385da6dd61bedb0a651ca01d292c3c04f7","typeString":"literal_string \"Not expecting swap\""},"value":"Not expecting swap"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8f4606ce862d2dcb4910a830bcc3fc385da6dd61bedb0a651ca01d292c3c04f7","typeString":"literal_string \"Not expecting swap\""}],"id":35479,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2730:7:168","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":35482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2730:45:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35483,"nodeType":"ExpressionStatement","src":"2730:45:168"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":35487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35485,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35468,"src":"2789:9:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":35486,"name":"_expectedFromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35267,"src":"2802:18:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2789:31:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"556e65787065637465642066726f6d20746f6b656e","id":35488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2822:23:168","typeDescriptions":{"typeIdentifier":"t_stringliteral_9dc7aee206f443a31ed38f02e91565382cb16275f55657283bdac51fd73707cf","typeString":"literal_string \"Unexpected from token\""},"value":"Unexpected from token"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9dc7aee206f443a31ed38f02e91565382cb16275f55657283bdac51fd73707cf","typeString":"literal_string \"Unexpected from token\""}],"id":35484,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2781:7:168","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":35489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2781:65:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35490,"nodeType":"ExpressionStatement","src":"2781:65:168"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":35494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35492,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35470,"src":"2860:7:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":35493,"name":"_expectedToToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35269,"src":"2871:16:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2860:27:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"556e657870656374656420746f20746f6b656e","id":35495,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2889:21:168","typeDescriptions":{"typeIdentifier":"t_stringliteral_98df0047abec68ccaf8b17ff7509a433c9ef30fa1ddc48703b31e1361b6a4757","typeString":"literal_string \"Unexpected to token\""},"value":"Unexpected to token"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_98df0047abec68ccaf8b17ff7509a433c9ef30fa1ddc48703b31e1361b6a4757","typeString":"literal_string \"Unexpected to token\""}],"id":35491,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2852:7:168","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":35496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2852:59:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35497,"nodeType":"ExpressionStatement","src":"2852:59:168"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":35505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35499,"name":"toAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35474,"src":"2932:8:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":35500,"name":"_expectedToAmountMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35281,"src":"2944:20:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2932:32:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35502,"name":"toAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35474,"src":"2968:8:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":35503,"name":"_expectedToAmountMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35279,"src":"2980:20:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2968:32:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2932:68:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"546f20616d6f756e74206f7574206f662072616e6765","id":35506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3008:24:168","typeDescriptions":{"typeIdentifier":"t_stringliteral_889ce486b1bf9dba7acf5ca586245cd8c9764a3b93a805286b25c8113f70572d","typeString":"literal_string \"To amount out of range\""},"value":"To amount out of range"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_889ce486b1bf9dba7acf5ca586245cd8c9764a3b93a805286b25c8113f70572d","typeString":"literal_string \"To amount out of range\""}],"id":35498,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2917:7:168","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":35507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2917:121:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35508,"nodeType":"ExpressionStatement","src":"2917:121:168"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35510,"name":"_fromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35277,"src":"3052:11:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":35511,"name":"fromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35472,"src":"3067:10:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3052:25:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"46726f6d20616d6f756e74206f6620746f6b656e732061726520686967686572207468616e206578706563746564","id":35513,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3079:48:168","typeDescriptions":{"typeIdentifier":"t_stringliteral_247c336ffaa8a00dbbcb1b6ba3447469c29ae9b01f5c7ef9aec016b8314c69a4","typeString":"literal_string \"From amount of tokens are higher than expected\""},"value":"From amount of tokens are higher than expected"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_247c336ffaa8a00dbbcb1b6ba3447469c29ae9b01f5c7ef9aec016b8314c69a4","typeString":"literal_string \"From amount of tokens are higher than expected\""}],"id":35509,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3044:7:168","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":35514,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3044:84:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35515,"nodeType":"ExpressionStatement","src":"3044:84:168"},{"expression":{"arguments":[{"id":35519,"name":"fromToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35468,"src":"3168:9:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":35520,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3179:3:168","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":35521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3179:10:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":35524,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3199:4:168","typeDescriptions":{"typeIdentifier":"t_contract$_MockParaSwapAugustus_$35553","typeString":"contract MockParaSwapAugustus"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MockParaSwapAugustus_$35553","typeString":"contract MockParaSwapAugustus"}],"id":35523,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3191:7:168","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":35522,"name":"address","nodeType":"ElementaryTypeName","src":"3191:7:168","typeDescriptions":{}}},"id":35525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3191:13:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":35526,"name":"_fromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35277,"src":"3206:11:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":35516,"name":"TOKEN_TRANSFER_PROXY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35263,"src":"3134:20:168","typeDescriptions":{"typeIdentifier":"t_contract$_MockParaSwapTokenTransferProxy_$35617","typeString":"contract MockParaSwapTokenTransferProxy"}},"id":35518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":35616,"src":"3134:33:168","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256) external"}},"id":35527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3134:84:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35528,"nodeType":"ExpressionStatement","src":"3134:84:168"},{"expression":{"arguments":[{"id":35533,"name":"toAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35474,"src":"3252:8:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":35530,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35470,"src":"3238:7:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":35529,"name":"MintableERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8768,"src":"3224:13:168","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MintableERC20_$8768_$","typeString":"type(contract MintableERC20)"}},"id":35531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3224:22:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_MintableERC20_$8768","typeString":"contract MintableERC20"}},"id":35532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":8737,"src":"3224:27:168","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256) external returns (bool)"}},"id":35534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3224:37:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35535,"nodeType":"ExpressionStatement","src":"3224:37:168"},{"expression":{"arguments":[{"expression":{"id":35540,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3292:3:168","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":35541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3292:10:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":35542,"name":"toAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35474,"src":"3304:8:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":35537,"name":"toToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35470,"src":"3274:7:168","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":35536,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"3267:6:168","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":35538,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3267:15:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":35539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":1391,"src":"3267:24:168","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":35543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3267:46:168","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35544,"nodeType":"ExpressionStatement","src":"3267:46:168"},{"expression":{"id":35547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35545,"name":"_expectingSwap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35265,"src":"3319:14:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":35546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3336:5:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"3319:22:168","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35548,"nodeType":"ExpressionStatement","src":"3319:22:168"},{"expression":{"id":35549,"name":"fromAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35472,"src":"3354:10:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":35478,"id":35550,"nodeType":"Return","src":"3347:17:168"}]},"functionSelector":"a9d424e2","id":35552,"implemented":true,"kind":"function","modifiers":[],"name":"buy","nameLocation":"2599:3:168","nodeType":"FunctionDefinition","parameters":{"id":35475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35468,"mutability":"mutable","name":"fromToken","nameLocation":"2616:9:168","nodeType":"VariableDeclaration","scope":35552,"src":"2608:17:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35467,"name":"address","nodeType":"ElementaryTypeName","src":"2608:7:168","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35470,"mutability":"mutable","name":"toToken","nameLocation":"2639:7:168","nodeType":"VariableDeclaration","scope":35552,"src":"2631:15:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35469,"name":"address","nodeType":"ElementaryTypeName","src":"2631:7:168","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35472,"mutability":"mutable","name":"fromAmount","nameLocation":"2660:10:168","nodeType":"VariableDeclaration","scope":35552,"src":"2652:18:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35471,"name":"uint256","nodeType":"ElementaryTypeName","src":"2652:7:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35474,"mutability":"mutable","name":"toAmount","nameLocation":"2684:8:168","nodeType":"VariableDeclaration","scope":35552,"src":"2676:16:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35473,"name":"uint256","nodeType":"ElementaryTypeName","src":"2676:7:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2602:94:168"},"returnParameters":{"id":35478,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35477,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35552,"src":"2715:7:168","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35476,"name":"uint256","nodeType":"ElementaryTypeName","src":"2715:7:168","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2714:9:168"},"scope":35553,"src":"2590:779:168","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":35554,"src":"422:2949:168","usedErrors":[]}],"src":"37:3335:168"},"id":168},"contracts/mocks/swap/MockParaSwapAugustusRegistry.sol":{"ast":{"absolutePath":"contracts/mocks/swap/MockParaSwapAugustusRegistry.sol","exportedSymbols":{"IParaSwapAugustusRegistry":[30961],"MockParaSwapAugustusRegistry":[35585]},"id":35586,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":35555,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:169"},{"absolutePath":"contracts/adapters/paraswap/interfaces/IParaSwapAugustusRegistry.sol","file":"../../adapters/paraswap/interfaces/IParaSwapAugustusRegistry.sol","id":35557,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35586,"sourceUnit":30962,"src":"63:107:169","symbolAliases":[{"foreign":{"id":35556,"name":"IParaSwapAugustusRegistry","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:25:169","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":35558,"name":"IParaSwapAugustusRegistry","nodeType":"IdentifierPath","referencedDeclaration":30961,"src":"213:25:169"},"id":35559,"nodeType":"InheritanceSpecifier","src":"213:25:169"}],"canonicalName":"MockParaSwapAugustusRegistry","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":35585,"linearizedBaseContracts":[35585,30961],"name":"MockParaSwapAugustusRegistry","nameLocation":"181:28:169","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":35561,"mutability":"immutable","name":"AUGUSTUS","nameLocation":"261:8:169","nodeType":"VariableDeclaration","scope":35585,"src":"243:26:169","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35560,"name":"address","nodeType":"ElementaryTypeName","src":"243:7:169","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"body":{"id":35570,"nodeType":"Block","src":"304:30:169","statements":[{"expression":{"id":35568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35566,"name":"AUGUSTUS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35561,"src":"310:8:169","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35567,"name":"augustus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35563,"src":"321:8:169","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"310:19:169","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":35569,"nodeType":"ExpressionStatement","src":"310:19:169"}]},"id":35571,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":35564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35563,"mutability":"mutable","name":"augustus","nameLocation":"294:8:169","nodeType":"VariableDeclaration","scope":35571,"src":"286:16:169","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35562,"name":"address","nodeType":"ElementaryTypeName","src":"286:7:169","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"285:18:169"},"returnParameters":{"id":35565,"nodeType":"ParameterList","parameters":[],"src":"304:0:169"},"scope":35585,"src":"274:60:169","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[30960],"body":{"id":35583,"nodeType":"Block","src":"419:38:169","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":35581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35579,"name":"augustus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35573,"src":"432:8:169","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":35580,"name":"AUGUSTUS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35561,"src":"444:8:169","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"432:20:169","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":35578,"id":35582,"nodeType":"Return","src":"425:27:169"}]},"functionSelector":"fb04e17b","id":35584,"implemented":true,"kind":"function","modifiers":[],"name":"isValidAugustus","nameLocation":"347:15:169","nodeType":"FunctionDefinition","overrides":{"id":35575,"nodeType":"OverrideSpecifier","overrides":[],"src":"395:8:169"},"parameters":{"id":35574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35573,"mutability":"mutable","name":"augustus","nameLocation":"371:8:169","nodeType":"VariableDeclaration","scope":35584,"src":"363:16:169","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35572,"name":"address","nodeType":"ElementaryTypeName","src":"363:7:169","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"362:18:169"},"returnParameters":{"id":35578,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35577,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35584,"src":"413:4:169","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":35576,"name":"bool","nodeType":"ElementaryTypeName","src":"413:4:169","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"412:6:169"},"scope":35585,"src":"338:119:169","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":35586,"src":"172:287:169","usedErrors":[]}],"src":"37:423:169"},"id":169},"contracts/mocks/swap/MockParaSwapTokenTransferProxy.sol":{"ast":{"absolutePath":"contracts/mocks/swap/MockParaSwapTokenTransferProxy.sol","exportedSymbols":{"IERC20":[1442],"MockParaSwapTokenTransferProxy":[35617],"Ownable":[1573]},"id":35618,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":35587,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:170"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol","id":35589,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35618,"sourceUnit":1574,"src":"63:96:170","symbolAliases":[{"foreign":{"id":35588,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:7:170","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","id":35591,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35618,"sourceUnit":1443,"src":"160:94:170","symbolAliases":[{"foreign":{"id":35590,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"168:6:170","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":35592,"name":"Ownable","nodeType":"IdentifierPath","referencedDeclaration":1573,"src":"299:7:170"},"id":35593,"nodeType":"InheritanceSpecifier","src":"299:7:170"}],"canonicalName":"MockParaSwapTokenTransferProxy","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":35617,"linearizedBaseContracts":[35617,1573,748],"name":"MockParaSwapTokenTransferProxy","nameLocation":"265:30:170","nodeType":"ContractDefinition","nodes":[{"body":{"id":35615,"nodeType":"Block","src":"429:55:170","statements":[{"expression":{"arguments":[{"id":35610,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35597,"src":"462:4:170","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":35611,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35599,"src":"468:2:170","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":35612,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35601,"src":"472:6:170","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":35607,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35595,"src":"442:5:170","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":35606,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"435:6:170","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":35608,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"435:13:170","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":35609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":1423,"src":"435:26:170","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":35613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"435:44:170","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35614,"nodeType":"ExpressionStatement","src":"435:44:170"}]},"functionSelector":"15dacbea","id":35616,"implemented":true,"kind":"function","modifiers":[{"id":35604,"kind":"modifierInvocation","modifierName":{"id":35603,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"419:9:170"},"nodeType":"ModifierInvocation","src":"419:9:170"}],"name":"transferFrom","nameLocation":"320:12:170","nodeType":"FunctionDefinition","parameters":{"id":35602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35595,"mutability":"mutable","name":"token","nameLocation":"346:5:170","nodeType":"VariableDeclaration","scope":35616,"src":"338:13:170","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35594,"name":"address","nodeType":"ElementaryTypeName","src":"338:7:170","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35597,"mutability":"mutable","name":"from","nameLocation":"365:4:170","nodeType":"VariableDeclaration","scope":35616,"src":"357:12:170","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35596,"name":"address","nodeType":"ElementaryTypeName","src":"357:7:170","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35599,"mutability":"mutable","name":"to","nameLocation":"383:2:170","nodeType":"VariableDeclaration","scope":35616,"src":"375:10:170","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35598,"name":"address","nodeType":"ElementaryTypeName","src":"375:7:170","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35601,"mutability":"mutable","name":"amount","nameLocation":"399:6:170","nodeType":"VariableDeclaration","scope":35616,"src":"391:14:170","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35600,"name":"uint256","nodeType":"ElementaryTypeName","src":"391:7:170","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"332:77:170"},"returnParameters":{"id":35605,"nodeType":"ParameterList","parameters":[],"src":"429:0:170"},"scope":35617,"src":"311:173:170","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":35618,"src":"256:230:170","usedErrors":[]}],"src":"37:450:170"},"id":170},"contracts/mocks/testnet-helpers/Faucet.sol":{"ast":{"absolutePath":"contracts/mocks/testnet-helpers/Faucet.sol","exportedSymbols":{"Faucet":[35891],"IFaucet":[35964],"Ownable":[1573],"TestnetERC20":[36250]},"id":35892,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":35619,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:171"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol","id":35621,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35892,"sourceUnit":1574,"src":"62:96:171","symbolAliases":[{"foreign":{"id":35620,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:7:171","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/mocks/testnet-helpers/TestnetERC20.sol","file":"./TestnetERC20.sol","id":35623,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35892,"sourceUnit":36251,"src":"159:48:171","symbolAliases":[{"foreign":{"id":35622,"name":"TestnetERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"167:12:171","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/mocks/testnet-helpers/IFaucet.sol","file":"./IFaucet.sol","id":35625,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35892,"sourceUnit":35965,"src":"208:38:171","symbolAliases":[{"foreign":{"id":35624,"name":"IFaucet","nodeType":"Identifier","overloadedDeclarations":[],"src":"216:7:171","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":35627,"name":"IFaucet","nodeType":"IdentifierPath","referencedDeclaration":35964,"src":"324:7:171"},"id":35628,"nodeType":"InheritanceSpecifier","src":"324:7:171"},{"baseName":{"id":35629,"name":"Ownable","nodeType":"IdentifierPath","referencedDeclaration":1573,"src":"333:7:171"},"id":35630,"nodeType":"InheritanceSpecifier","src":"333:7:171"}],"canonicalName":"Faucet","contractDependencies":[],"contractKind":"contract","documentation":{"id":35626,"nodeType":"StructuredDocumentation","src":"248:56:171","text":" @title Faucet\n @dev Ownable Faucet Contract"},"fullyImplemented":true,"id":35891,"linearizedBaseContracts":[35891,1573,748,35964],"name":"Faucet","nameLocation":"314:6:171","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":35632,"mutability":"mutable","name":"maximumMintAmount","nameLocation":"362:17:171","nodeType":"VariableDeclaration","scope":35891,"src":"345:34:171","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35631,"name":"uint256","nodeType":"ElementaryTypeName","src":"345:7:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35636,"mutability":"mutable","name":"_nonMintable","nameLocation":"478:12:171","nodeType":"VariableDeclaration","scope":35891,"src":"444:46:171","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":35635,"keyType":{"id":35633,"name":"address","nodeType":"ElementaryTypeName","src":"452:7:171","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"444:24:171","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueType":{"id":35634,"name":"bool","nodeType":"ElementaryTypeName","src":"463:4:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":35638,"mutability":"mutable","name":"_permissioned","nameLocation":"664:13:171","nodeType":"VariableDeclaration","scope":35891,"src":"650:27:171","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":35637,"name":"bool","nodeType":"ElementaryTypeName","src":"650:4:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"body":{"id":35668,"nodeType":"Block","src":"750:141:171","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":35653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35648,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35640,"src":"764:5:171","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":35651,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"781:1:171","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":35650,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"773:7:171","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":35649,"name":"address","nodeType":"ElementaryTypeName","src":"773:7:171","typeDescriptions":{}}},"id":35652,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"773:10:171","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"764:19:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":35647,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"756:7:171","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":35654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"756:28:171","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35655,"nodeType":"ExpressionStatement","src":"756:28:171"},{"expression":{"arguments":[{"id":35657,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35640,"src":"808:5:171","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":35656,"name":"transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1572,"src":"790:17:171","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":35658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"790:24:171","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35659,"nodeType":"ExpressionStatement","src":"790:24:171"},{"expression":{"id":35662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35660,"name":"_permissioned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35638,"src":"820:13:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35661,"name":"permissioned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35642,"src":"836:12:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"820:28:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35663,"nodeType":"ExpressionStatement","src":"820:28:171"},{"expression":{"id":35666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35664,"name":"maximumMintAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35632,"src":"854:17:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35665,"name":"maxMinAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35644,"src":"874:12:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"854:32:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35667,"nodeType":"ExpressionStatement","src":"854:32:171"}]},"id":35669,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":35645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35640,"mutability":"mutable","name":"owner","nameLocation":"702:5:171","nodeType":"VariableDeclaration","scope":35669,"src":"694:13:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35639,"name":"address","nodeType":"ElementaryTypeName","src":"694:7:171","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35642,"mutability":"mutable","name":"permissioned","nameLocation":"714:12:171","nodeType":"VariableDeclaration","scope":35669,"src":"709:17:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":35641,"name":"bool","nodeType":"ElementaryTypeName","src":"709:4:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":35644,"mutability":"mutable","name":"maxMinAmount","nameLocation":"736:12:171","nodeType":"VariableDeclaration","scope":35669,"src":"728:20:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35643,"name":"uint256","nodeType":"ElementaryTypeName","src":"728:7:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"693:56:171"},"returnParameters":{"id":35646,"nodeType":"ParameterList","parameters":[],"src":"750:0:171"},"scope":35891,"src":"682:209:171","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":35687,"nodeType":"Block","src":"1043:127:171","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":35674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35672,"name":"_permissioned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35638,"src":"1053:13:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"74727565","id":35673,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1070:4:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"1053:21:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35685,"nodeType":"IfStatement","src":"1049:110:171","trueBody":{"id":35684,"nodeType":"Block","src":"1076:83:171","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":35680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":35676,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1509,"src":"1092:5:171","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":35677,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1092:7:171","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":35678,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"1103:10:171","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":35679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1103:12:171","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1092:23:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","id":35681,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1117:34:171","typeDescriptions":{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""},"value":"Ownable: caller is not the owner"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""}],"id":35675,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1084:7:171","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":35682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1084:68:171","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35683,"nodeType":"ExpressionStatement","src":"1084:68:171"}]}},{"id":35686,"nodeType":"PlaceholderStatement","src":"1164:1:171"}]},"documentation":{"id":35670,"nodeType":"StructuredDocumentation","src":"895:110:171","text":" @dev Function modifier, if _permissioned is enabled then msg.sender is required to be the owner"},"id":35688,"name":"onlyOwnerIfPermissioned","nameLocation":"1017:23:171","nodeType":"ModifierDefinition","parameters":{"id":35671,"nodeType":"ParameterList","parameters":[],"src":"1040:2:171"},"src":"1008:162:171","virtual":false,"visibility":"internal"},{"baseFunctions":[35905],"body":{"id":35737,"nodeType":"Block","src":"1333:268:171","statements":[{"expression":{"arguments":[{"id":35707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1347:20:171","subExpression":{"baseExpression":{"id":35704,"name":"_nonMintable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35636,"src":"1348:12:171","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":35706,"indexExpression":{"id":35705,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35691,"src":"1361:5:171","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1348:19:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4572726f723a206e6f74206d696e7461626c65","id":35708,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1369:21:171","typeDescriptions":{"typeIdentifier":"t_stringliteral_0ede82dc9ae41bf2b2aee39aeb0f1780b14caf910cda71c7ce68835c5a4ee7f4","typeString":"literal_string \"Error: not mintable\""},"value":"Error: not mintable"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0ede82dc9ae41bf2b2aee39aeb0f1780b14caf910cda71c7ce68835c5a4ee7f4","typeString":"literal_string \"Error: not mintable\""}],"id":35703,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1339:7:171","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":35709,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1339:52:171","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35710,"nodeType":"ExpressionStatement","src":"1339:52:171"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35712,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35695,"src":"1412:6:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35713,"name":"maximumMintAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35632,"src":"1422:17:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":35714,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1443:2:171","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":35716,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35691,"src":"1462:5:171","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":35715,"name":"TestnetERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36250,"src":"1449:12:171","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TestnetERC20_$36250_$","typeString":"type(contract TestnetERC20)"}},"id":35717,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1449:19:171","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_TestnetERC20_$36250","typeString":"contract TestnetERC20"}},"id":35718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":855,"src":"1449:28:171","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":35719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1449:30:171","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"1443:36:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35721,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1442:38:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1422:58:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1412:68:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4572726f723a204d696e74206c696d6974207472616e73616374696f6e206578636565646564","id":35724,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1488:40:171","typeDescriptions":{"typeIdentifier":"t_stringliteral_4c70a5af4f9f1eecb7d3eacc63eb554c1747b9b8db0d040cf0e0675c3461312e","typeString":"literal_string \"Error: Mint limit transaction exceeded\""},"value":"Error: Mint limit transaction exceeded"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4c70a5af4f9f1eecb7d3eacc63eb554c1747b9b8db0d040cf0e0675c3461312e","typeString":"literal_string \"Error: Mint limit transaction exceeded\""}],"id":35711,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1397:7:171","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":35725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1397:137:171","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35726,"nodeType":"ExpressionStatement","src":"1397:137:171"},{"expression":{"arguments":[{"id":35731,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35693,"src":"1566:2:171","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":35732,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35695,"src":"1570:6:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":35728,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35691,"src":"1554:5:171","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":35727,"name":"TestnetERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36250,"src":"1541:12:171","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TestnetERC20_$36250_$","typeString":"type(contract TestnetERC20)"}},"id":35729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1541:19:171","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_TestnetERC20_$36250","typeString":"contract TestnetERC20"}},"id":35730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":36217,"src":"1541:24:171","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":35733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1541:36:171","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35734,"nodeType":"ExpressionStatement","src":"1541:36:171"},{"expression":{"id":35735,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35695,"src":"1590:6:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":35702,"id":35736,"nodeType":"Return","src":"1583:13:171"}]},"documentation":{"id":35689,"nodeType":"StructuredDocumentation","src":"1174:23:171","text":"@inheritdoc IFaucet"},"functionSelector":"c6c3bbe6","id":35738,"implemented":true,"kind":"function","modifiers":[{"id":35699,"kind":"modifierInvocation","modifierName":{"id":35698,"name":"onlyOwnerIfPermissioned","nodeType":"IdentifierPath","referencedDeclaration":35688,"src":"1291:23:171"},"nodeType":"ModifierInvocation","src":"1291:23:171"}],"name":"mint","nameLocation":"1209:4:171","nodeType":"FunctionDefinition","overrides":{"id":35697,"nodeType":"OverrideSpecifier","overrides":[],"src":"1282:8:171"},"parameters":{"id":35696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35691,"mutability":"mutable","name":"token","nameLocation":"1227:5:171","nodeType":"VariableDeclaration","scope":35738,"src":"1219:13:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35690,"name":"address","nodeType":"ElementaryTypeName","src":"1219:7:171","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35693,"mutability":"mutable","name":"to","nameLocation":"1246:2:171","nodeType":"VariableDeclaration","scope":35738,"src":"1238:10:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35692,"name":"address","nodeType":"ElementaryTypeName","src":"1238:7:171","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35695,"mutability":"mutable","name":"amount","nameLocation":"1262:6:171","nodeType":"VariableDeclaration","scope":35738,"src":"1254:14:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35694,"name":"uint256","nodeType":"ElementaryTypeName","src":"1254:7:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1213:59:171"},"returnParameters":{"id":35702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35701,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35738,"src":"1324:7:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35700,"name":"uint256","nodeType":"ElementaryTypeName","src":"1324:7:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1323:9:171"},"scope":35891,"src":"1200:401:171","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[35911],"body":{"id":35751,"nodeType":"Block","src":"1703:39:171","statements":[{"expression":{"id":35749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35747,"name":"_permissioned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35638,"src":"1709:13:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35748,"name":"permissioned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35741,"src":"1725:12:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1709:28:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35750,"nodeType":"ExpressionStatement","src":"1709:28:171"}]},"documentation":{"id":35739,"nodeType":"StructuredDocumentation","src":"1605:23:171","text":"@inheritdoc IFaucet"},"functionSelector":"1a678cd3","id":35752,"implemented":true,"kind":"function","modifiers":[{"id":35745,"kind":"modifierInvocation","modifierName":{"id":35744,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"1693:9:171"},"nodeType":"ModifierInvocation","src":"1693:9:171"}],"name":"setPermissioned","nameLocation":"1640:15:171","nodeType":"FunctionDefinition","overrides":{"id":35743,"nodeType":"OverrideSpecifier","overrides":[],"src":"1684:8:171"},"parameters":{"id":35742,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35741,"mutability":"mutable","name":"permissioned","nameLocation":"1661:12:171","nodeType":"VariableDeclaration","scope":35752,"src":"1656:17:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":35740,"name":"bool","nodeType":"ElementaryTypeName","src":"1656:4:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1655:19:171"},"returnParameters":{"id":35746,"nodeType":"ParameterList","parameters":[],"src":"1703:0:171"},"scope":35891,"src":"1631:111:171","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[35917],"body":{"id":35761,"nodeType":"Block","src":"1836:31:171","statements":[{"expression":{"id":35759,"name":"_permissioned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35638,"src":"1849:13:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":35758,"id":35760,"nodeType":"Return","src":"1842:20:171"}]},"documentation":{"id":35753,"nodeType":"StructuredDocumentation","src":"1746:23:171","text":"@inheritdoc IFaucet"},"functionSelector":"e2a4157c","id":35762,"implemented":true,"kind":"function","modifiers":[],"name":"isPermissioned","nameLocation":"1781:14:171","nodeType":"FunctionDefinition","overrides":{"id":35755,"nodeType":"OverrideSpecifier","overrides":[],"src":"1812:8:171"},"parameters":{"id":35754,"nodeType":"ParameterList","parameters":[],"src":"1795:2:171"},"returnParameters":{"id":35758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35757,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35762,"src":"1830:4:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":35756,"name":"bool","nodeType":"ElementaryTypeName","src":"1830:4:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1829:6:171"},"scope":35891,"src":"1772:95:171","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[35925],"body":{"id":35780,"nodeType":"Block","src":"1974:40:171","statements":[{"expression":{"id":35778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":35773,"name":"_nonMintable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35636,"src":"1980:12:171","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":35775,"indexExpression":{"id":35774,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35765,"src":"1993:5:171","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1980:19:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"2002:7:171","subExpression":{"id":35776,"name":"active","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35767,"src":"2003:6:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1980:29:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35779,"nodeType":"ExpressionStatement","src":"1980:29:171"}]},"documentation":{"id":35763,"nodeType":"StructuredDocumentation","src":"1871:23:171","text":"@inheritdoc IFaucet"},"functionSelector":"f7eb06c4","id":35781,"implemented":true,"kind":"function","modifiers":[{"id":35771,"kind":"modifierInvocation","modifierName":{"id":35770,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"1964:9:171"},"nodeType":"ModifierInvocation","src":"1964:9:171"}],"name":"setMintable","nameLocation":"1906:11:171","nodeType":"FunctionDefinition","overrides":{"id":35769,"nodeType":"OverrideSpecifier","overrides":[],"src":"1955:8:171"},"parameters":{"id":35768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35765,"mutability":"mutable","name":"asset","nameLocation":"1926:5:171","nodeType":"VariableDeclaration","scope":35781,"src":"1918:13:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35764,"name":"address","nodeType":"ElementaryTypeName","src":"1918:7:171","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35767,"mutability":"mutable","name":"active","nameLocation":"1938:6:171","nodeType":"VariableDeclaration","scope":35781,"src":"1933:11:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":35766,"name":"bool","nodeType":"ElementaryTypeName","src":"1933:4:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1917:28:171"},"returnParameters":{"id":35772,"nodeType":"ParameterList","parameters":[],"src":"1974:0:171"},"scope":35891,"src":"1897:117:171","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[35933],"body":{"id":35795,"nodeType":"Block","src":"2117:38:171","statements":[{"expression":{"id":35793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"2130:20:171","subExpression":{"baseExpression":{"id":35790,"name":"_nonMintable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35636,"src":"2131:12:171","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":35792,"indexExpression":{"id":35791,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35784,"src":"2144:5:171","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2131:19:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":35789,"id":35794,"nodeType":"Return","src":"2123:27:171"}]},"documentation":{"id":35782,"nodeType":"StructuredDocumentation","src":"2018:23:171","text":"@inheritdoc IFaucet"},"functionSelector":"222b15fb","id":35796,"implemented":true,"kind":"function","modifiers":[],"name":"isMintable","nameLocation":"2053:10:171","nodeType":"FunctionDefinition","overrides":{"id":35786,"nodeType":"OverrideSpecifier","overrides":[],"src":"2093:8:171"},"parameters":{"id":35785,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35784,"mutability":"mutable","name":"asset","nameLocation":"2072:5:171","nodeType":"VariableDeclaration","scope":35796,"src":"2064:13:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35783,"name":"address","nodeType":"ElementaryTypeName","src":"2064:7:171","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2063:15:171"},"returnParameters":{"id":35789,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35788,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35796,"src":"2111:4:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":35787,"name":"bool","nodeType":"ElementaryTypeName","src":"2111:4:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2110:6:171"},"scope":35891,"src":"2044:111:171","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[35942],"body":{"id":35830,"nodeType":"Block","src":"2312:131:171","statements":[{"body":{"id":35828,"nodeType":"Block","src":"2370:69:171","statements":[{"expression":{"arguments":[{"id":35825,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35802,"src":"2423:8:171","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"baseExpression":{"id":35820,"name":"childContracts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35800,"src":"2386:14:171","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":35822,"indexExpression":{"id":35821,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35809,"src":"2401:1:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2386:17:171","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":35819,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1573,"src":"2378:7:171","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Ownable_$1573_$","typeString":"type(contract Ownable)"}},"id":35823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2378:26:171","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Ownable_$1573","typeString":"contract Ownable"}},"id":35824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferOwnership","nodeType":"MemberAccess","referencedDeclaration":1572,"src":"2378:44:171","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":35826,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2378:54:171","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35827,"nodeType":"ExpressionStatement","src":"2378:54:171"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35812,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35809,"src":"2338:1:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":35813,"name":"childContracts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35800,"src":"2342:14:171","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":35814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"2342:21:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2338:25:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35829,"initializationExpression":{"assignments":[35809],"declarations":[{"constant":false,"id":35809,"mutability":"mutable","name":"i","nameLocation":"2331:1:171","nodeType":"VariableDeclaration","scope":35829,"src":"2323:9:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35808,"name":"uint256","nodeType":"ElementaryTypeName","src":"2323:7:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35811,"initialValue":{"hexValue":"30","id":35810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2335:1:171","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2323:13:171"},"loopExpression":{"expression":{"id":35817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2365:3:171","subExpression":{"id":35816,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35809,"src":"2365:1:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35818,"nodeType":"ExpressionStatement","src":"2365:3:171"},"nodeType":"ForStatement","src":"2318:121:171"}]},"documentation":{"id":35797,"nodeType":"StructuredDocumentation","src":"2159:23:171","text":"@inheritdoc IFaucet"},"functionSelector":"506f26cc","id":35831,"implemented":true,"kind":"function","modifiers":[{"id":35806,"kind":"modifierInvocation","modifierName":{"id":35805,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"2302:9:171"},"nodeType":"ModifierInvocation","src":"2302:9:171"}],"name":"transferOwnershipOfChild","nameLocation":"2194:24:171","nodeType":"FunctionDefinition","overrides":{"id":35804,"nodeType":"OverrideSpecifier","overrides":[],"src":"2293:8:171"},"parameters":{"id":35803,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35800,"mutability":"mutable","name":"childContracts","nameLocation":"2243:14:171","nodeType":"VariableDeclaration","scope":35831,"src":"2224:33:171","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":35798,"name":"address","nodeType":"ElementaryTypeName","src":"2224:7:171","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":35799,"nodeType":"ArrayTypeName","src":"2224:9:171","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":35802,"mutability":"mutable","name":"newOwner","nameLocation":"2271:8:171","nodeType":"VariableDeclaration","scope":35831,"src":"2263:16:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35801,"name":"address","nodeType":"ElementaryTypeName","src":"2263:7:171","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2218:65:171"},"returnParameters":{"id":35807,"nodeType":"ParameterList","parameters":[],"src":"2312:0:171"},"scope":35891,"src":"2185:258:171","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[35951],"body":{"id":35865,"nodeType":"Block","src":"2589:128:171","statements":[{"body":{"id":35863,"nodeType":"Block","src":"2647:66:171","statements":[{"expression":{"arguments":[{"id":35860,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35837,"src":"2700:5:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[{"baseExpression":{"id":35855,"name":"childContracts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35835,"src":"2668:14:171","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":35857,"indexExpression":{"id":35856,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35844,"src":"2683:1:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2668:17:171","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":35854,"name":"TestnetERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36250,"src":"2655:12:171","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TestnetERC20_$36250_$","typeString":"type(contract TestnetERC20)"}},"id":35858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2655:31:171","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_TestnetERC20_$36250","typeString":"contract TestnetERC20"}},"id":35859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setProtected","nodeType":"MemberAccess","referencedDeclaration":36241,"src":"2655:44:171","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bool_$returns$__$","typeString":"function (bool) external"}},"id":35861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2655:51:171","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35862,"nodeType":"ExpressionStatement","src":"2655:51:171"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35847,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35844,"src":"2615:1:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":35848,"name":"childContracts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35835,"src":"2619:14:171","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":35849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"2619:21:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2615:25:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35864,"initializationExpression":{"assignments":[35844],"declarations":[{"constant":false,"id":35844,"mutability":"mutable","name":"i","nameLocation":"2608:1:171","nodeType":"VariableDeclaration","scope":35864,"src":"2600:9:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35843,"name":"uint256","nodeType":"ElementaryTypeName","src":"2600:7:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35846,"initialValue":{"hexValue":"30","id":35845,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2612:1:171","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2600:13:171"},"loopExpression":{"expression":{"id":35852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2642:3:171","subExpression":{"id":35851,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35844,"src":"2642:1:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35853,"nodeType":"ExpressionStatement","src":"2642:3:171"},"nodeType":"ForStatement","src":"2595:118:171"}]},"documentation":{"id":35832,"nodeType":"StructuredDocumentation","src":"2447:23:171","text":"@inheritdoc IFaucet"},"functionSelector":"ca51a903","id":35866,"implemented":true,"kind":"function","modifiers":[{"id":35841,"kind":"modifierInvocation","modifierName":{"id":35840,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"2579:9:171"},"nodeType":"ModifierInvocation","src":"2579:9:171"}],"name":"setProtectedOfChild","nameLocation":"2482:19:171","nodeType":"FunctionDefinition","overrides":{"id":35839,"nodeType":"OverrideSpecifier","overrides":[],"src":"2570:8:171"},"parameters":{"id":35838,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35835,"mutability":"mutable","name":"childContracts","nameLocation":"2526:14:171","nodeType":"VariableDeclaration","scope":35866,"src":"2507:33:171","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":35833,"name":"address","nodeType":"ElementaryTypeName","src":"2507:7:171","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":35834,"nodeType":"ArrayTypeName","src":"2507:9:171","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":35837,"mutability":"mutable","name":"state","nameLocation":"2551:5:171","nodeType":"VariableDeclaration","scope":35866,"src":"2546:10:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":35836,"name":"bool","nodeType":"ElementaryTypeName","src":"2546:4:171","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2501:59:171"},"returnParameters":{"id":35842,"nodeType":"ParameterList","parameters":[],"src":"2589:0:171"},"scope":35891,"src":"2473:244:171","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[35957],"body":{"id":35879,"nodeType":"Block","src":"2832:47:171","statements":[{"expression":{"id":35877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35875,"name":"maximumMintAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35632,"src":"2838:17:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35876,"name":"newMaxMintAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35869,"src":"2858:16:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2838:36:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35878,"nodeType":"ExpressionStatement","src":"2838:36:171"}]},"documentation":{"id":35867,"nodeType":"StructuredDocumentation","src":"2722:23:171","text":"@inheritdoc IFaucet"},"functionSelector":"9420d476","id":35880,"implemented":true,"kind":"function","modifiers":[{"id":35873,"kind":"modifierInvocation","modifierName":{"id":35872,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"2822:9:171"},"nodeType":"ModifierInvocation","src":"2822:9:171"}],"name":"setMaximumMintAmount","nameLocation":"2757:20:171","nodeType":"FunctionDefinition","overrides":{"id":35871,"nodeType":"OverrideSpecifier","overrides":[],"src":"2813:8:171"},"parameters":{"id":35870,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35869,"mutability":"mutable","name":"newMaxMintAmount","nameLocation":"2786:16:171","nodeType":"VariableDeclaration","scope":35880,"src":"2778:24:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35868,"name":"uint256","nodeType":"ElementaryTypeName","src":"2778:7:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2777:26:171"},"returnParameters":{"id":35874,"nodeType":"ParameterList","parameters":[],"src":"2832:0:171"},"scope":35891,"src":"2748:131:171","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[35963],"body":{"id":35889,"nodeType":"Block","src":"2982:35:171","statements":[{"expression":{"id":35887,"name":"maximumMintAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35632,"src":"2995:17:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":35886,"id":35888,"nodeType":"Return","src":"2988:24:171"}]},"documentation":{"id":35881,"nodeType":"StructuredDocumentation","src":"2883:23:171","text":"@inheritdoc IFaucet"},"functionSelector":"dd26b1d3","id":35890,"implemented":true,"kind":"function","modifiers":[],"name":"getMaximumMintAmount","nameLocation":"2918:20:171","nodeType":"FunctionDefinition","overrides":{"id":35883,"nodeType":"OverrideSpecifier","overrides":[],"src":"2955:8:171"},"parameters":{"id":35882,"nodeType":"ParameterList","parameters":[],"src":"2938:2:171"},"returnParameters":{"id":35886,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35885,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35890,"src":"2973:7:171","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35884,"name":"uint256","nodeType":"ElementaryTypeName","src":"2973:7:171","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2972:9:171"},"scope":35891,"src":"2909:108:171","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":35892,"src":"305:2714:171","usedErrors":[]}],"src":"37:2983:171"},"id":171},"contracts/mocks/testnet-helpers/IFaucet.sol":{"ast":{"absolutePath":"contracts/mocks/testnet-helpers/IFaucet.sol","exportedSymbols":{"IFaucet":[35964]},"id":35965,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":35893,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:172"},{"abstract":false,"baseContracts":[],"canonicalName":"IFaucet","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":35964,"linearizedBaseContracts":[35964],"name":"IFaucet","nameLocation":"72:7:172","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":35894,"nodeType":"StructuredDocumentation","src":"84:277:172","text":" @notice Function to mint Testnet tokens to the destination address\n @param token The address of the token to perform the mint\n @param to The address to send the minted tokens\n @param amount The amount of tokens to mint\n @return The amount minted*"},"functionSelector":"c6c3bbe6","id":35905,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"373:4:172","nodeType":"FunctionDefinition","parameters":{"id":35901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35896,"mutability":"mutable","name":"token","nameLocation":"386:5:172","nodeType":"VariableDeclaration","scope":35905,"src":"378:13:172","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35895,"name":"address","nodeType":"ElementaryTypeName","src":"378:7:172","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35898,"mutability":"mutable","name":"to","nameLocation":"401:2:172","nodeType":"VariableDeclaration","scope":35905,"src":"393:10:172","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35897,"name":"address","nodeType":"ElementaryTypeName","src":"393:7:172","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35900,"mutability":"mutable","name":"amount","nameLocation":"413:6:172","nodeType":"VariableDeclaration","scope":35905,"src":"405:14:172","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35899,"name":"uint256","nodeType":"ElementaryTypeName","src":"405:7:172","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"377:43:172"},"returnParameters":{"id":35904,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35903,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35905,"src":"439:7:172","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35902,"name":"uint256","nodeType":"ElementaryTypeName","src":"439:7:172","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"438:9:172"},"scope":35964,"src":"364:84:172","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":35906,"nodeType":"StructuredDocumentation","src":"452:198:172","text":" @notice Enable or disable the need of authentication to call `mint` function\n @param value If true, ask for authentication at `mint` function, if false, disable the authentication"},"functionSelector":"1a678cd3","id":35911,"implemented":false,"kind":"function","modifiers":[],"name":"setPermissioned","nameLocation":"662:15:172","nodeType":"FunctionDefinition","parameters":{"id":35909,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35908,"mutability":"mutable","name":"value","nameLocation":"683:5:172","nodeType":"VariableDeclaration","scope":35911,"src":"678:10:172","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":35907,"name":"bool","nodeType":"ElementaryTypeName","src":"678:4:172","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"677:12:172"},"returnParameters":{"id":35910,"nodeType":"ParameterList","parameters":[],"src":"698:0:172"},"scope":35964,"src":"653:46:172","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":35912,"nodeType":"StructuredDocumentation","src":"703:168:172","text":" @notice Getter to determine if permissioned mode is enabled or disabled\n @return Returns a boolean, if true the mode is enabled, if false is disabled"},"functionSelector":"e2a4157c","id":35917,"implemented":false,"kind":"function","modifiers":[],"name":"isPermissioned","nameLocation":"883:14:172","nodeType":"FunctionDefinition","parameters":{"id":35913,"nodeType":"ParameterList","parameters":[],"src":"897:2:172"},"returnParameters":{"id":35916,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35915,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35917,"src":"923:4:172","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":35914,"name":"bool","nodeType":"ElementaryTypeName","src":"923:4:172","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"922:6:172"},"scope":35964,"src":"874:55:172","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":35918,"nodeType":"StructuredDocumentation","src":"933:167:172","text":" @notice Enable or disable the minting of the faucet asset\n @param asset The address of the asset\n @param active True to enable, false to disable"},"functionSelector":"f7eb06c4","id":35925,"implemented":false,"kind":"function","modifiers":[],"name":"setMintable","nameLocation":"1112:11:172","nodeType":"FunctionDefinition","parameters":{"id":35923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35920,"mutability":"mutable","name":"asset","nameLocation":"1132:5:172","nodeType":"VariableDeclaration","scope":35925,"src":"1124:13:172","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35919,"name":"address","nodeType":"ElementaryTypeName","src":"1124:7:172","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35922,"mutability":"mutable","name":"active","nameLocation":"1144:6:172","nodeType":"VariableDeclaration","scope":35925,"src":"1139:11:172","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":35921,"name":"bool","nodeType":"ElementaryTypeName","src":"1139:4:172","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1123:28:172"},"returnParameters":{"id":35924,"nodeType":"ParameterList","parameters":[],"src":"1160:0:172"},"scope":35964,"src":"1103:58:172","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":35926,"nodeType":"StructuredDocumentation","src":"1165:163:172","text":" @notice Returns whether the asset is mintable\n @param asset The address of the asset\n @return True if the asset is mintable, false otherwise"},"functionSelector":"222b15fb","id":35933,"implemented":false,"kind":"function","modifiers":[],"name":"isMintable","nameLocation":"1340:10:172","nodeType":"FunctionDefinition","parameters":{"id":35929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35928,"mutability":"mutable","name":"asset","nameLocation":"1359:5:172","nodeType":"VariableDeclaration","scope":35933,"src":"1351:13:172","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35927,"name":"address","nodeType":"ElementaryTypeName","src":"1351:7:172","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1350:15:172"},"returnParameters":{"id":35932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35931,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35933,"src":"1389:4:172","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":35930,"name":"bool","nodeType":"ElementaryTypeName","src":"1389:4:172","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1388:6:172"},"scope":35964,"src":"1331:64:172","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":35934,"nodeType":"StructuredDocumentation","src":"1399:176:172","text":" @notice Transfer the ownership of child contracts\n @param childContracts A list of child contract addresses\n @param newOwner The address of the new owner"},"functionSelector":"506f26cc","id":35942,"implemented":false,"kind":"function","modifiers":[],"name":"transferOwnershipOfChild","nameLocation":"1587:24:172","nodeType":"FunctionDefinition","parameters":{"id":35940,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35937,"mutability":"mutable","name":"childContracts","nameLocation":"1631:14:172","nodeType":"VariableDeclaration","scope":35942,"src":"1612:33:172","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":35935,"name":"address","nodeType":"ElementaryTypeName","src":"1612:7:172","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":35936,"nodeType":"ArrayTypeName","src":"1612:9:172","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":35939,"mutability":"mutable","name":"newOwner","nameLocation":"1655:8:172","nodeType":"VariableDeclaration","scope":35942,"src":"1647:16:172","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35938,"name":"address","nodeType":"ElementaryTypeName","src":"1647:7:172","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1611:53:172"},"returnParameters":{"id":35941,"nodeType":"ParameterList","parameters":[],"src":"1673:0:172"},"scope":35964,"src":"1578:96:172","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":35943,"nodeType":"StructuredDocumentation","src":"1678:236:172","text":" @notice Updates protection of minting feature of child token contracts\n @param childContracts A list of child token contract addresses\n @param state True if tokens are only mintable through Faucet, false otherwise"},"functionSelector":"ca51a903","id":35951,"implemented":false,"kind":"function","modifiers":[],"name":"setProtectedOfChild","nameLocation":"1926:19:172","nodeType":"FunctionDefinition","parameters":{"id":35949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35946,"mutability":"mutable","name":"childContracts","nameLocation":"1965:14:172","nodeType":"VariableDeclaration","scope":35951,"src":"1946:33:172","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":35944,"name":"address","nodeType":"ElementaryTypeName","src":"1946:7:172","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":35945,"nodeType":"ArrayTypeName","src":"1946:9:172","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":35948,"mutability":"mutable","name":"state","nameLocation":"1986:5:172","nodeType":"VariableDeclaration","scope":35951,"src":"1981:10:172","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":35947,"name":"bool","nodeType":"ElementaryTypeName","src":"1981:4:172","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1945:47:172"},"returnParameters":{"id":35950,"nodeType":"ParameterList","parameters":[],"src":"2001:0:172"},"scope":35964,"src":"1917:85:172","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":35952,"nodeType":"StructuredDocumentation","src":"2006:171:172","text":" @notice Updates the maximum amount of tokens per mint allowed\n @param newMaxMintAmount The new value of maximum amount of tokens per mint (whole tokens)"},"functionSelector":"9420d476","id":35957,"implemented":false,"kind":"function","modifiers":[],"name":"setMaximumMintAmount","nameLocation":"2189:20:172","nodeType":"FunctionDefinition","parameters":{"id":35955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35954,"mutability":"mutable","name":"newMaxMintAmount","nameLocation":"2218:16:172","nodeType":"VariableDeclaration","scope":35957,"src":"2210:24:172","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35953,"name":"uint256","nodeType":"ElementaryTypeName","src":"2210:7:172","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2209:26:172"},"returnParameters":{"id":35956,"nodeType":"ParameterList","parameters":[],"src":"2244:0:172"},"scope":35964,"src":"2180:65:172","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":35958,"nodeType":"StructuredDocumentation","src":"2249:150:172","text":" @notice Returns the maximum amount of tokens per mint allowed\n @return The maximum amount of tokens per mint allowed (whole tokens)"},"functionSelector":"dd26b1d3","id":35963,"implemented":false,"kind":"function","modifiers":[],"name":"getMaximumMintAmount","nameLocation":"2411:20:172","nodeType":"FunctionDefinition","parameters":{"id":35959,"nodeType":"ParameterList","parameters":[],"src":"2431:2:172"},"returnParameters":{"id":35962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35961,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35963,"src":"2457:7:172","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35960,"name":"uint256","nodeType":"ElementaryTypeName","src":"2457:7:172","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2456:9:172"},"scope":35964,"src":"2402:64:172","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":35965,"src":"62:2406:172","usedErrors":[]}],"src":"37:2432:172"},"id":172},"contracts/mocks/testnet-helpers/TestnetERC20.sol":{"ast":{"absolutePath":"contracts/mocks/testnet-helpers/TestnetERC20.sol","exportedSymbols":{"ERC20":[1279],"IERC20WithPermit":[4127],"Ownable":[1573],"TestnetERC20":[36250]},"id":36251,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":35966,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"37:23:173"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol","id":35968,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":36251,"sourceUnit":1574,"src":"62:96:173","symbolAliases":[{"foreign":{"id":35967,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:7:173","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol","id":35970,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":36251,"sourceUnit":1280,"src":"159:92:173","symbolAliases":[{"foreign":{"id":35969,"name":"ERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"167:5:173","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol","file":"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol","id":35972,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":36251,"sourceUnit":4128,"src":"252:89:173","symbolAliases":[{"foreign":{"id":35971,"name":"IERC20WithPermit","nodeType":"Identifier","overloadedDeclarations":[],"src":"260:16:173","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":35974,"name":"IERC20WithPermit","nodeType":"IdentifierPath","referencedDeclaration":4127,"src":"427:16:173"},"id":35975,"nodeType":"InheritanceSpecifier","src":"427:16:173"},{"baseName":{"id":35976,"name":"ERC20","nodeType":"IdentifierPath","referencedDeclaration":1279,"src":"445:5:173"},"id":35977,"nodeType":"InheritanceSpecifier","src":"445:5:173"},{"baseName":{"id":35978,"name":"Ownable","nodeType":"IdentifierPath","referencedDeclaration":1573,"src":"452:7:173"},"id":35979,"nodeType":"InheritanceSpecifier","src":"452:7:173"}],"canonicalName":"TestnetERC20","contractDependencies":[],"contractKind":"contract","documentation":{"id":35973,"nodeType":"StructuredDocumentation","src":"343:58:173","text":" @title TestnetERC20\n @dev ERC20 minting logic"},"fullyImplemented":true,"id":36250,"linearizedBaseContracts":[36250,1573,1279,4127,1442,748],"name":"TestnetERC20","nameLocation":"411:12:173","nodeType":"ContractDefinition","nodes":[{"constant":true,"functionSelector":"78160376","id":35985,"mutability":"constant","name":"EIP712_REVISION","nameLocation":"486:15:173","nodeType":"VariableDeclaration","scope":36250,"src":"464:50:173","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":35980,"name":"bytes","nodeType":"ElementaryTypeName","src":"464:5:173","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"value":{"arguments":[{"hexValue":"31","id":35983,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"510:3:173","typeDescriptions":{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""}],"id":35982,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"504:5:173","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":35981,"name":"bytes","nodeType":"ElementaryTypeName","src":"504:5:173","typeDescriptions":{}}},"id":35984,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"504:10:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"visibility":"public"},{"constant":true,"id":35990,"mutability":"constant","name":"EIP712_DOMAIN","nameLocation":"544:13:173","nodeType":"VariableDeclaration","scope":36250,"src":"518:141:173","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":35986,"name":"bytes32","nodeType":"ElementaryTypeName","src":"518:7:173","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429","id":35988,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"574:84:173","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":35987,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"564:9:173","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":35989,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"564:95:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":true,"functionSelector":"30adf81f","id":35995,"mutability":"constant","name":"PERMIT_TYPEHASH","nameLocation":"687:15:173","nodeType":"VariableDeclaration","scope":36250,"src":"663:141:173","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":35991,"name":"bytes32","nodeType":"ElementaryTypeName","src":"663:7:173","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"5065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529","id":35993,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"719:84:173","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":35992,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"709:9:173","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":35994,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"709:95:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"constant":false,"id":35999,"mutability":"mutable","name":"_nonces","nameLocation":"892:7:173","nodeType":"VariableDeclaration","scope":36250,"src":"855:44:173","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":35998,"keyType":{"id":35996,"name":"address","nodeType":"ElementaryTypeName","src":"863:7:173","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"855:27:173","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueType":{"id":35997,"name":"uint256","nodeType":"ElementaryTypeName","src":"874:7:173","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"functionSelector":"3644e515","id":36001,"mutability":"mutable","name":"DOMAIN_SEPARATOR","nameLocation":"919:16:173","nodeType":"VariableDeclaration","scope":36250,"src":"904:31:173","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":36000,"name":"bytes32","nodeType":"ElementaryTypeName","src":"904:7:173","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"constant":false,"id":36003,"mutability":"mutable","name":"_protected","nameLocation":"954:10:173","nodeType":"VariableDeclaration","scope":36250,"src":"940:24:173","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":36002,"name":"bool","nodeType":"ElementaryTypeName","src":"940:4:173","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"body":{"id":36021,"nodeType":"Block","src":"1111:124:173","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":36008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36006,"name":"_protected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36003,"src":"1121:10:173","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"74727565","id":36007,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1135:4:173","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"1121:18:173","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":36019,"nodeType":"IfStatement","src":"1117:107:173","trueBody":{"id":36018,"nodeType":"Block","src":"1141:83:173","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":36014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":36010,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1509,"src":"1157:5:173","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":36011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1157:7:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":36012,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"1168:10:173","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":36013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1168:12:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"src":"1157:23:173","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","id":36015,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1182:34:173","typeDescriptions":{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""},"value":"Ownable: caller is not the owner"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""}],"id":36009,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1149:7:173","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1149:68:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36017,"nodeType":"ExpressionStatement","src":"1149:68:173"}]}},{"id":36020,"nodeType":"PlaceholderStatement","src":"1229:1:173"}]},"documentation":{"id":36004,"nodeType":"StructuredDocumentation","src":"969:107:173","text":" @dev Function modifier, if _protected is enabled then msg.sender is required to be the owner"},"id":36022,"name":"onlyOwnerIfProtected","nameLocation":"1088:20:173","nodeType":"ModifierDefinition","parameters":{"id":36005,"nodeType":"ParameterList","parameters":[],"src":"1108:2:173"},"src":"1079:156:173","virtual":false,"visibility":"internal"},{"body":{"id":36086,"nodeType":"Block","src":"1364:357:173","statements":[{"assignments":[36038],"declarations":[{"constant":false,"id":36038,"mutability":"mutable","name":"chainId","nameLocation":"1378:7:173","nodeType":"VariableDeclaration","scope":36086,"src":"1370:15:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36037,"name":"uint256","nodeType":"ElementaryTypeName","src":"1370:7:173","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36041,"initialValue":{"expression":{"id":36039,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1388:5:173","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":36040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"chainid","nodeType":"MemberAccess","src":"1388:13:173","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1370:31:173"},{"expression":{"id":36063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36042,"name":"DOMAIN_SEPARATOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36001,"src":"1408:16:173","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":36046,"name":"EIP712_DOMAIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35990,"src":"1464:13:173","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"arguments":[{"id":36050,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36024,"src":"1503:4:173","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":36049,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1497:5:173","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":36048,"name":"bytes","nodeType":"ElementaryTypeName","src":"1497:5:173","typeDescriptions":{}}},"id":36051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1497:11:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":36047,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1487:9:173","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":36052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1487:22:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":36054,"name":"EIP712_REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35985,"src":"1529:15:173","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":36053,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1519:9:173","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":36055,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1519:26:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":36056,"name":"chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36038,"src":"1555:7:173","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":36059,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1580:4:173","typeDescriptions":{"typeIdentifier":"t_contract$_TestnetERC20_$36250","typeString":"contract TestnetERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_TestnetERC20_$36250","typeString":"contract TestnetERC20"}],"id":36058,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1572:7:173","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36057,"name":"address","nodeType":"ElementaryTypeName","src":"1572:7:173","typeDescriptions":{}}},"id":36060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1572:13:173","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":36044,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1444:3:173","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":36045,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"1444:10:173","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":36061,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1444:149:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":36043,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1427:9:173","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":36062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1427:172:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1408:191:173","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":36064,"nodeType":"ExpressionStatement","src":"1408:191:173"},{"expression":{"arguments":[{"id":36066,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36028,"src":"1620:8:173","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":36065,"name":"_setupDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1267,"src":"1605:14:173","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint8_$returns$__$","typeString":"function (uint8)"}},"id":36067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1605:24:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36068,"nodeType":"ExpressionStatement","src":"1605:24:173"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":36075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36070,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36030,"src":"1643:5:173","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":36073,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1660:1:173","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":36072,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1652:7:173","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36071,"name":"address","nodeType":"ElementaryTypeName","src":"1652:7:173","typeDescriptions":{}}},"id":36074,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1652:10:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1643:19:173","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":36069,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1635:7:173","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":36076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1635:28:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36077,"nodeType":"ExpressionStatement","src":"1635:28:173"},{"expression":{"arguments":[{"id":36079,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36030,"src":"1687:5:173","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":36078,"name":"transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1572,"src":"1669:17:173","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":36080,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1669:24:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36081,"nodeType":"ExpressionStatement","src":"1669:24:173"},{"expression":{"id":36084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36082,"name":"_protected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36003,"src":"1699:10:173","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":36083,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1712:4:173","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"1699:17:173","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":36085,"nodeType":"ExpressionStatement","src":"1699:17:173"}]},"id":36087,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":36033,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36024,"src":"1350:4:173","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":36034,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36026,"src":"1356:6:173","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":36035,"kind":"baseConstructorSpecifier","modifierName":{"id":36032,"name":"ERC20","nodeType":"IdentifierPath","referencedDeclaration":1279,"src":"1344:5:173"},"nodeType":"ModifierInvocation","src":"1344:19:173"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":36031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36024,"mutability":"mutable","name":"name","nameLocation":"1270:4:173","nodeType":"VariableDeclaration","scope":36087,"src":"1256:18:173","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":36023,"name":"string","nodeType":"ElementaryTypeName","src":"1256:6:173","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":36026,"mutability":"mutable","name":"symbol","nameLocation":"1294:6:173","nodeType":"VariableDeclaration","scope":36087,"src":"1280:20:173","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":36025,"name":"string","nodeType":"ElementaryTypeName","src":"1280:6:173","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":36028,"mutability":"mutable","name":"decimals","nameLocation":"1312:8:173","nodeType":"VariableDeclaration","scope":36087,"src":"1306:14:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":36027,"name":"uint8","nodeType":"ElementaryTypeName","src":"1306:5:173","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":36030,"mutability":"mutable","name":"owner","nameLocation":"1334:5:173","nodeType":"VariableDeclaration","scope":36087,"src":"1326:13:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36029,"name":"address","nodeType":"ElementaryTypeName","src":"1326:7:173","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1250:93:173"},"returnParameters":{"id":36036,"nodeType":"ParameterList","parameters":[],"src":"1364:0:173"},"scope":36250,"src":"1239:482:173","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[4126],"body":{"id":36177,"nodeType":"Block","src":"1922:567:173","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":36112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36107,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36090,"src":"1936:5:173","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":36110,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1953:1:173","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":36109,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1945:7:173","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36108,"name":"address","nodeType":"ElementaryTypeName","src":"1945:7:173","typeDescriptions":{}}},"id":36111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1945:10:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1936:19:173","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e56414c49445f4f574e4552","id":36113,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1957:15:173","typeDescriptions":{"typeIdentifier":"t_stringliteral_a30e2b4f22d955e30086ae3aef0adfd87eec9d0d3f055d6aa9af61f522dda886","typeString":"literal_string \"INVALID_OWNER\""},"value":"INVALID_OWNER"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a30e2b4f22d955e30086ae3aef0adfd87eec9d0d3f055d6aa9af61f522dda886","typeString":"literal_string \"INVALID_OWNER\""}],"id":36106,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1928:7:173","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1928:45:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36115,"nodeType":"ExpressionStatement","src":"1928:45:173"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":36117,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2018:5:173","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":36118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"2018:15:173","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":36119,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36096,"src":"2037:8:173","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2018:27:173","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e56414c49445f45585049524154494f4e","id":36121,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2047:20:173","typeDescriptions":{"typeIdentifier":"t_stringliteral_9fe3e5cf49f72bf8a6a8455c3e990f8479f5dfa09ac808886f330a39b0029c2d","typeString":"literal_string \"INVALID_EXPIRATION\""},"value":"INVALID_EXPIRATION"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9fe3e5cf49f72bf8a6a8455c3e990f8479f5dfa09ac808886f330a39b0029c2d","typeString":"literal_string \"INVALID_EXPIRATION\""}],"id":36116,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2010:7:173","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2010:58:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36123,"nodeType":"ExpressionStatement","src":"2010:58:173"},{"assignments":[36125],"declarations":[{"constant":false,"id":36125,"mutability":"mutable","name":"currentValidNonce","nameLocation":"2082:17:173","nodeType":"VariableDeclaration","scope":36177,"src":"2074:25:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36124,"name":"uint256","nodeType":"ElementaryTypeName","src":"2074:7:173","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36129,"initialValue":{"baseExpression":{"id":36126,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35999,"src":"2102:7:173","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":36128,"indexExpression":{"id":36127,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36090,"src":"2110:5:173","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2102:14:173","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2074:42:173"},{"assignments":[36131],"declarations":[{"constant":false,"id":36131,"mutability":"mutable","name":"digest","nameLocation":"2130:6:173","nodeType":"VariableDeclaration","scope":36177,"src":"2122:14:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":36130,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2122:7:173","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":36150,"initialValue":{"arguments":[{"arguments":[{"hexValue":"1901","id":36135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2182:10:173","typeDescriptions":{"typeIdentifier":"t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541","typeString":"literal_string hex\"1901\""},"value":"\u0019\u0001"},{"id":36136,"name":"DOMAIN_SEPARATOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36001,"src":"2202:16:173","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"arguments":[{"id":36140,"name":"PERMIT_TYPEHASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35995,"src":"2249:15:173","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":36141,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36090,"src":"2266:5:173","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36142,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36092,"src":"2273:7:173","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36143,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36094,"src":"2282:5:173","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":36144,"name":"currentValidNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36125,"src":"2289:17:173","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":36145,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36096,"src":"2308:8:173","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":36138,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2238:3:173","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":36139,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encode","nodeType":"MemberAccess","src":"2238:10:173","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":36146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2238:79:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":36137,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2228:9:173","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":36147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2228:90:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541","typeString":"literal_string hex\"1901\""},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":36133,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2156:3:173","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":36134,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"2156:16:173","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":36148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2156:170:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":36132,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2139:9:173","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":36149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2139:193:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2122:210:173"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":36159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36152,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36090,"src":"2346:5:173","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":36154,"name":"digest","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36131,"src":"2365:6:173","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":36155,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36098,"src":"2373:1:173","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":36156,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36100,"src":"2376:1:173","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":36157,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36102,"src":"2379:1:173","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":36153,"name":"ecrecover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-6,"src":"2355:9:173","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":36158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2355:26:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2346:35:173","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e56414c49445f5349474e4154555245","id":36160,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2383:19:173","typeDescriptions":{"typeIdentifier":"t_stringliteral_5e2e9eaa2d734966dea0900deacd15b20129fbce05255d633a3ce5ebca181b88","typeString":"literal_string \"INVALID_SIGNATURE\""},"value":"INVALID_SIGNATURE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5e2e9eaa2d734966dea0900deacd15b20129fbce05255d633a3ce5ebca181b88","typeString":"literal_string \"INVALID_SIGNATURE\""}],"id":36151,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2338:7:173","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36161,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2338:65:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36162,"nodeType":"ExpressionStatement","src":"2338:65:173"},{"expression":{"id":36169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":36163,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35999,"src":"2409:7:173","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":36165,"indexExpression":{"id":36164,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36090,"src":"2417:5:173","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2409:14:173","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36166,"name":"currentValidNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36125,"src":"2426:17:173","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":36167,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2446:1:173","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2426:21:173","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2409:38:173","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36170,"nodeType":"ExpressionStatement","src":"2409:38:173"},{"expression":{"arguments":[{"id":36172,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36090,"src":"2462:5:173","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36173,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36092,"src":"2469:7:173","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36174,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36094,"src":"2478:5:173","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":36171,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1256,"src":"2453:8:173","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":36175,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2453:31:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36176,"nodeType":"ExpressionStatement","src":"2453:31:173"}]},"documentation":{"id":36088,"nodeType":"StructuredDocumentation","src":"1725:32:173","text":"@inheritdoc IERC20WithPermit"},"functionSelector":"d505accf","id":36178,"implemented":true,"kind":"function","modifiers":[],"name":"permit","nameLocation":"1769:6:173","nodeType":"FunctionDefinition","overrides":{"id":36104,"nodeType":"OverrideSpecifier","overrides":[],"src":"1913:8:173"},"parameters":{"id":36103,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36090,"mutability":"mutable","name":"owner","nameLocation":"1789:5:173","nodeType":"VariableDeclaration","scope":36178,"src":"1781:13:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36089,"name":"address","nodeType":"ElementaryTypeName","src":"1781:7:173","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36092,"mutability":"mutable","name":"spender","nameLocation":"1808:7:173","nodeType":"VariableDeclaration","scope":36178,"src":"1800:15:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36091,"name":"address","nodeType":"ElementaryTypeName","src":"1800:7:173","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36094,"mutability":"mutable","name":"value","nameLocation":"1829:5:173","nodeType":"VariableDeclaration","scope":36178,"src":"1821:13:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36093,"name":"uint256","nodeType":"ElementaryTypeName","src":"1821:7:173","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":36096,"mutability":"mutable","name":"deadline","nameLocation":"1848:8:173","nodeType":"VariableDeclaration","scope":36178,"src":"1840:16:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36095,"name":"uint256","nodeType":"ElementaryTypeName","src":"1840:7:173","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":36098,"mutability":"mutable","name":"v","nameLocation":"1868:1:173","nodeType":"VariableDeclaration","scope":36178,"src":"1862:7:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":36097,"name":"uint8","nodeType":"ElementaryTypeName","src":"1862:5:173","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":36100,"mutability":"mutable","name":"r","nameLocation":"1883:1:173","nodeType":"VariableDeclaration","scope":36178,"src":"1875:9:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":36099,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1875:7:173","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":36102,"mutability":"mutable","name":"s","nameLocation":"1898:1:173","nodeType":"VariableDeclaration","scope":36178,"src":"1890:9:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":36101,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1890:7:173","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1775:128:173"},"returnParameters":{"id":36105,"nodeType":"ParameterList","parameters":[],"src":"1922:0:173"},"scope":36250,"src":"1760:729:173","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":36196,"nodeType":"Block","src":"2738:54:173","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":36189,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":736,"src":"2750:10:173","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_payable_$","typeString":"function () view returns (address payable)"}},"id":36190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2750:12:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},{"id":36191,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36181,"src":"2764:5:173","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":36188,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1155,"src":"2744:5:173","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":36192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2744:26:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36193,"nodeType":"ExpressionStatement","src":"2744:26:173"},{"expression":{"hexValue":"74727565","id":36194,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2783:4:173","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":36187,"id":36195,"nodeType":"Return","src":"2776:11:173"}]},"documentation":{"id":36179,"nodeType":"StructuredDocumentation","src":"2493:162:173","text":" @dev Function to mint tokens\n @param value The amount of tokens to mint.\n @return A boolean that indicates if the operation was successful."},"functionSelector":"a0712d68","id":36197,"implemented":true,"kind":"function","modifiers":[{"id":36184,"kind":"modifierInvocation","modifierName":{"id":36183,"name":"onlyOwnerIfProtected","nodeType":"IdentifierPath","referencedDeclaration":36022,"src":"2702:20:173"},"nodeType":"ModifierInvocation","src":"2702:20:173"}],"name":"mint","nameLocation":"2667:4:173","nodeType":"FunctionDefinition","parameters":{"id":36182,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36181,"mutability":"mutable","name":"value","nameLocation":"2680:5:173","nodeType":"VariableDeclaration","scope":36197,"src":"2672:13:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36180,"name":"uint256","nodeType":"ElementaryTypeName","src":"2672:7:173","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2671:15:173"},"returnParameters":{"id":36187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36186,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":36197,"src":"2732:4:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":36185,"name":"bool","nodeType":"ElementaryTypeName","src":"2732:4:173","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2731:6:173"},"scope":36250,"src":"2658:134:173","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":36216,"nodeType":"Block","src":"3117:49:173","statements":[{"expression":{"arguments":[{"id":36210,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36200,"src":"3129:7:173","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36211,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36202,"src":"3138:5:173","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":36209,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1155,"src":"3123:5:173","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":36212,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3123:21:173","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36213,"nodeType":"ExpressionStatement","src":"3123:21:173"},{"expression":{"hexValue":"74727565","id":36214,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3157:4:173","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":36208,"id":36215,"nodeType":"Return","src":"3150:11:173"}]},"documentation":{"id":36198,"nodeType":"StructuredDocumentation","src":"2796:221:173","text":" @dev Function to mint tokens to address\n @param account The account to mint tokens.\n @param value The amount of tokens to mint.\n @return A boolean that indicates if the operation was successful."},"functionSelector":"40c10f19","id":36217,"implemented":true,"kind":"function","modifiers":[{"id":36205,"kind":"modifierInvocation","modifierName":{"id":36204,"name":"onlyOwnerIfProtected","nodeType":"IdentifierPath","referencedDeclaration":36022,"src":"3081:20:173"},"nodeType":"ModifierInvocation","src":"3081:20:173"}],"name":"mint","nameLocation":"3029:4:173","nodeType":"FunctionDefinition","parameters":{"id":36203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36200,"mutability":"mutable","name":"account","nameLocation":"3042:7:173","nodeType":"VariableDeclaration","scope":36217,"src":"3034:15:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36199,"name":"address","nodeType":"ElementaryTypeName","src":"3034:7:173","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36202,"mutability":"mutable","name":"value","nameLocation":"3059:5:173","nodeType":"VariableDeclaration","scope":36217,"src":"3051:13:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36201,"name":"uint256","nodeType":"ElementaryTypeName","src":"3051:7:173","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3033:32:173"},"returnParameters":{"id":36208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36207,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":36217,"src":"3111:4:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":36206,"name":"bool","nodeType":"ElementaryTypeName","src":"3111:4:173","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3110:6:173"},"scope":36250,"src":"3020:146:173","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":36228,"nodeType":"Block","src":"3231:32:173","statements":[{"expression":{"baseExpression":{"id":36224,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35999,"src":"3244:7:173","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":36226,"indexExpression":{"id":36225,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36219,"src":"3252:5:173","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3244:14:173","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":36223,"id":36227,"nodeType":"Return","src":"3237:21:173"}]},"functionSelector":"7ecebe00","id":36229,"implemented":true,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"3179:6:173","nodeType":"FunctionDefinition","parameters":{"id":36220,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36219,"mutability":"mutable","name":"owner","nameLocation":"3194:5:173","nodeType":"VariableDeclaration","scope":36229,"src":"3186:13:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36218,"name":"address","nodeType":"ElementaryTypeName","src":"3186:7:173","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3185:15:173"},"returnParameters":{"id":36223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36222,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":36229,"src":"3222:7:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36221,"name":"uint256","nodeType":"ElementaryTypeName","src":"3222:7:173","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3221:9:173"},"scope":36250,"src":"3170:93:173","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":36240,"nodeType":"Block","src":"3318:29:173","statements":[{"expression":{"id":36238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36236,"name":"_protected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36003,"src":"3324:10:173","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":36237,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36231,"src":"3337:5:173","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3324:18:173","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":36239,"nodeType":"ExpressionStatement","src":"3324:18:173"}]},"functionSelector":"1c02bc31","id":36241,"implemented":true,"kind":"function","modifiers":[{"id":36234,"kind":"modifierInvocation","modifierName":{"id":36233,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"3308:9:173"},"nodeType":"ModifierInvocation","src":"3308:9:173"}],"name":"setProtected","nameLocation":"3276:12:173","nodeType":"FunctionDefinition","parameters":{"id":36232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36231,"mutability":"mutable","name":"state","nameLocation":"3294:5:173","nodeType":"VariableDeclaration","scope":36241,"src":"3289:10:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":36230,"name":"bool","nodeType":"ElementaryTypeName","src":"3289:4:173","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3288:12:173"},"returnParameters":{"id":36235,"nodeType":"ParameterList","parameters":[],"src":"3318:0:173"},"scope":36250,"src":"3267:80:173","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":36248,"nodeType":"Block","src":"3401:28:173","statements":[{"expression":{"id":36246,"name":"_protected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36003,"src":"3414:10:173","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":36245,"id":36247,"nodeType":"Return","src":"3407:17:173"}]},"functionSelector":"5300f82b","id":36249,"implemented":true,"kind":"function","modifiers":[],"name":"isProtected","nameLocation":"3360:11:173","nodeType":"FunctionDefinition","parameters":{"id":36242,"nodeType":"ParameterList","parameters":[],"src":"3371:2:173"},"returnParameters":{"id":36245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36244,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":36249,"src":"3395:4:173","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":36243,"name":"bool","nodeType":"ElementaryTypeName","src":"3395:4:173","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3394:6:173"},"scope":36250,"src":"3351:78:173","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":36251,"src":"402:3029:173","usedErrors":[]}],"src":"37:3395:173"},"id":173},"contracts/rewards/EmissionManager.sol":{"ast":{"absolutePath":"contracts/rewards/EmissionManager.sol","exportedSymbols":{"EmissionManager":[36549],"IEACAggregatorProxy":[34482],"IEmissionManager":[39132],"IRewardsController":[39352],"ITransferStrategyBase":[39643],"Ownable":[1573],"RewardsDataTypes":[39707]},"id":36550,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":36252,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:174"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol","id":36254,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":36550,"sourceUnit":1574,"src":"63:96:174","symbolAliases":[{"foreign":{"id":36253,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:7:174","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/misc/interfaces/IEACAggregatorProxy.sol","file":"../misc/interfaces/IEACAggregatorProxy.sol","id":36256,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":36550,"sourceUnit":34483,"src":"160:79:174","symbolAliases":[{"foreign":{"id":36255,"name":"IEACAggregatorProxy","nodeType":"Identifier","overloadedDeclarations":[],"src":"168:19:174","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/rewards/interfaces/IEmissionManager.sol","file":"./interfaces/IEmissionManager.sol","id":36258,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":36550,"sourceUnit":39133,"src":"240:67:174","symbolAliases":[{"foreign":{"id":36257,"name":"IEmissionManager","nodeType":"Identifier","overloadedDeclarations":[],"src":"248:16:174","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/rewards/interfaces/ITransferStrategyBase.sol","file":"./interfaces/ITransferStrategyBase.sol","id":36260,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":36550,"sourceUnit":39644,"src":"308:77:174","symbolAliases":[{"foreign":{"id":36259,"name":"ITransferStrategyBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"316:21:174","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/rewards/interfaces/IRewardsController.sol","file":"./interfaces/IRewardsController.sol","id":36262,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":36550,"sourceUnit":39353,"src":"386:71:174","symbolAliases":[{"foreign":{"id":36261,"name":"IRewardsController","nodeType":"Identifier","overloadedDeclarations":[],"src":"394:18:174","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/rewards/libraries/RewardsDataTypes.sol","file":"./libraries/RewardsDataTypes.sol","id":36264,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":36550,"sourceUnit":39708,"src":"458:66:174","symbolAliases":[{"foreign":{"id":36263,"name":"RewardsDataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"466:16:174","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":36266,"name":"Ownable","nodeType":"IdentifierPath","referencedDeclaration":1573,"src":"717:7:174"},"id":36267,"nodeType":"InheritanceSpecifier","src":"717:7:174"},{"baseName":{"id":36268,"name":"IEmissionManager","nodeType":"IdentifierPath","referencedDeclaration":39132,"src":"726:16:174"},"id":36269,"nodeType":"InheritanceSpecifier","src":"726:16:174"}],"canonicalName":"EmissionManager","contractDependencies":[],"contractKind":"contract","documentation":{"id":36265,"nodeType":"StructuredDocumentation","src":"526:162:174","text":" @title EmissionManager\n @author Aave\n @notice It manages the list of admins of reward emissions and provides functions to control reward emissions."},"fullyImplemented":true,"id":36549,"linearizedBaseContracts":[36549,39132,1573,748],"name":"EmissionManager","nameLocation":"698:15:174","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":36273,"mutability":"mutable","name":"_emissionAdmins","nameLocation":"813:15:174","nodeType":"VariableDeclaration","scope":36549,"src":"776:52:174","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"},"typeName":{"id":36272,"keyType":{"id":36270,"name":"address","nodeType":"ElementaryTypeName","src":"784:7:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"776:27:174","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"},"valueType":{"id":36271,"name":"address","nodeType":"ElementaryTypeName","src":"795:7:174","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":36276,"mutability":"mutable","name":"_rewardsController","nameLocation":"861:18:174","nodeType":"VariableDeclaration","scope":36549,"src":"833:46:174","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"},"typeName":{"id":36275,"nodeType":"UserDefinedTypeName","pathNode":{"id":36274,"name":"IRewardsController","nodeType":"IdentifierPath","referencedDeclaration":39352,"src":"833:18:174"},"referencedDeclaration":39352,"src":"833:18:174","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"visibility":"internal"},{"body":{"id":36292,"nodeType":"Block","src":"1034:87:174","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":36287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":36282,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1048:3:174","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1048:10:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"baseExpression":{"id":36284,"name":"_emissionAdmins","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36273,"src":"1062:15:174","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":36286,"indexExpression":{"id":36285,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36279,"src":"1078:6:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1062:23:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1048:37:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f4e4c595f454d495353494f4e5f41444d494e","id":36288,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1087:21:174","typeDescriptions":{"typeIdentifier":"t_stringliteral_edefeee258d69843a88425ffde63c214e5c5d0658734a7483784d9fda45195be","typeString":"literal_string \"ONLY_EMISSION_ADMIN\""},"value":"ONLY_EMISSION_ADMIN"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_edefeee258d69843a88425ffde63c214e5c5d0658734a7483784d9fda45195be","typeString":"literal_string \"ONLY_EMISSION_ADMIN\""}],"id":36281,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1040:7:174","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1040:69:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36290,"nodeType":"ExpressionStatement","src":"1040:69:174"},{"id":36291,"nodeType":"PlaceholderStatement","src":"1115:1:174"}]},"documentation":{"id":36277,"nodeType":"StructuredDocumentation","src":"884:104:174","text":" @dev Only emission admin of the given reward can call functions marked by this modifier.*"},"id":36293,"name":"onlyEmissionAdmin","nameLocation":"1000:17:174","nodeType":"ModifierDefinition","parameters":{"id":36280,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36279,"mutability":"mutable","name":"reward","nameLocation":"1026:6:174","nodeType":"VariableDeclaration","scope":36293,"src":"1018:14:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36278,"name":"address","nodeType":"ElementaryTypeName","src":"1018:7:174","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1017:16:174"},"src":"991:130:174","virtual":false,"visibility":"internal"},{"body":{"id":36303,"nodeType":"Block","src":"1225:35:174","statements":[{"expression":{"arguments":[{"id":36300,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36296,"src":"1249:5:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":36299,"name":"transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1572,"src":"1231:17:174","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":36301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1231:24:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36302,"nodeType":"ExpressionStatement","src":"1231:24:174"}]},"documentation":{"id":36294,"nodeType":"StructuredDocumentation","src":"1125:70:174","text":" Constructor.\n @param owner The address of the owner"},"id":36304,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":36297,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36296,"mutability":"mutable","name":"owner","nameLocation":"1218:5:174","nodeType":"VariableDeclaration","scope":36304,"src":"1210:13:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36295,"name":"address","nodeType":"ElementaryTypeName","src":"1210:7:174","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1209:15:174"},"returnParameters":{"id":36298,"nodeType":"ParameterList","parameters":[],"src":"1225:0:174"},"scope":36549,"src":"1198:62:174","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[39054],"body":{"id":36345,"nodeType":"Block","src":"1395:196:174","statements":[{"body":{"id":36337,"nodeType":"Block","src":"1445:94:174","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":36333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":36325,"name":"_emissionAdmins","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36273,"src":"1461:15:174","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":36330,"indexExpression":{"expression":{"baseExpression":{"id":36326,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36309,"src":"1477:6:174","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":36328,"indexExpression":{"id":36327,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36314,"src":"1484:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1477:9:174","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":36329,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reward","nodeType":"MemberAccess","referencedDeclaration":39659,"src":"1477:16:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1461:33:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":36331,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1498:3:174","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1498:10:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1461:47:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f4e4c595f454d495353494f4e5f41444d494e","id":36334,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1510:21:174","typeDescriptions":{"typeIdentifier":"t_stringliteral_edefeee258d69843a88425ffde63c214e5c5d0658734a7483784d9fda45195be","typeString":"literal_string \"ONLY_EMISSION_ADMIN\""},"value":"ONLY_EMISSION_ADMIN"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_edefeee258d69843a88425ffde63c214e5c5d0658734a7483784d9fda45195be","typeString":"literal_string \"ONLY_EMISSION_ADMIN\""}],"id":36324,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1453:7:174","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1453:79:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36336,"nodeType":"ExpressionStatement","src":"1453:79:174"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36317,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36314,"src":"1421:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":36318,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36309,"src":"1425:6:174","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":36319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1425:13:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1421:17:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":36338,"initializationExpression":{"assignments":[36314],"declarations":[{"constant":false,"id":36314,"mutability":"mutable","name":"i","nameLocation":"1414:1:174","nodeType":"VariableDeclaration","scope":36338,"src":"1406:9:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36313,"name":"uint256","nodeType":"ElementaryTypeName","src":"1406:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36316,"initialValue":{"hexValue":"30","id":36315,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1418:1:174","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1406:13:174"},"loopExpression":{"expression":{"id":36322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1440:3:174","subExpression":{"id":36321,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36314,"src":"1440:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36323,"nodeType":"ExpressionStatement","src":"1440:3:174"},"nodeType":"ForStatement","src":"1401:138:174"},{"expression":{"arguments":[{"id":36342,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36309,"src":"1579:6:174","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}],"expression":{"id":36339,"name":"_rewardsController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36276,"src":"1544:18:174","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":36341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"configureAssets","nodeType":"MemberAccess","referencedDeclaration":39251,"src":"1544:34:174","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr_$returns$__$","typeString":"function (struct RewardsDataTypes.RewardsConfigInput memory[] memory) external"}},"id":36343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1544:42:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36344,"nodeType":"ExpressionStatement","src":"1544:42:174"}]},"documentation":{"id":36305,"nodeType":"StructuredDocumentation","src":"1264:32:174","text":"@inheritdoc IEmissionManager"},"functionSelector":"955c2ad7","id":36346,"implemented":true,"kind":"function","modifiers":[],"name":"configureAssets","nameLocation":"1308:15:174","nodeType":"FunctionDefinition","overrides":{"id":36311,"nodeType":"OverrideSpecifier","overrides":[],"src":"1386:8:174"},"parameters":{"id":36310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36309,"mutability":"mutable","name":"config","nameLocation":"1369:6:174","nodeType":"VariableDeclaration","scope":36346,"src":"1324:51:174","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput[]"},"typeName":{"baseType":{"id":36307,"nodeType":"UserDefinedTypeName","pathNode":{"id":36306,"name":"RewardsDataTypes.RewardsConfigInput","nodeType":"IdentifierPath","referencedDeclaration":39666,"src":"1324:35:174"},"referencedDeclaration":39666,"src":"1324:35:174","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_storage_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput"}},"id":36308,"nodeType":"ArrayTypeName","src":"1324:37:174","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_storage_$dyn_storage_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput[]"}},"visibility":"internal"}],"src":"1323:53:174"},"returnParameters":{"id":36312,"nodeType":"ParameterList","parameters":[],"src":"1395:0:174"},"scope":36549,"src":"1299:292:174","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39063],"body":{"id":36366,"nodeType":"Block","src":"1771:75:174","statements":[{"expression":{"arguments":[{"id":36362,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36349,"src":"1816:6:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36363,"name":"transferStrategy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36352,"src":"1824:16:174","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}],"expression":{"id":36359,"name":"_rewardsController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36276,"src":"1777:18:174","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":36361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setTransferStrategy","nodeType":"MemberAccess","referencedDeclaration":39210,"src":"1777:38:174","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_contract$_ITransferStrategyBase_$39643_$returns$__$","typeString":"function (address,contract ITransferStrategyBase) external"}},"id":36364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1777:64:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36365,"nodeType":"ExpressionStatement","src":"1777:64:174"}]},"documentation":{"id":36347,"nodeType":"StructuredDocumentation","src":"1595:32:174","text":"@inheritdoc IEmissionManager"},"functionSelector":"e15ac623","id":36367,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":36356,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36349,"src":"1763:6:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":36357,"kind":"modifierInvocation","modifierName":{"id":36355,"name":"onlyEmissionAdmin","nodeType":"IdentifierPath","referencedDeclaration":36293,"src":"1745:17:174"},"nodeType":"ModifierInvocation","src":"1745:25:174"}],"name":"setTransferStrategy","nameLocation":"1639:19:174","nodeType":"FunctionDefinition","overrides":{"id":36354,"nodeType":"OverrideSpecifier","overrides":[],"src":"1736:8:174"},"parameters":{"id":36353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36349,"mutability":"mutable","name":"reward","nameLocation":"1672:6:174","nodeType":"VariableDeclaration","scope":36367,"src":"1664:14:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36348,"name":"address","nodeType":"ElementaryTypeName","src":"1664:7:174","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36352,"mutability":"mutable","name":"transferStrategy","nameLocation":"1706:16:174","nodeType":"VariableDeclaration","scope":36367,"src":"1684:38:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"},"typeName":{"id":36351,"nodeType":"UserDefinedTypeName","pathNode":{"id":36350,"name":"ITransferStrategyBase","nodeType":"IdentifierPath","referencedDeclaration":39643,"src":"1684:21:174"},"referencedDeclaration":39643,"src":"1684:21:174","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}},"visibility":"internal"}],"src":"1658:68:174"},"returnParameters":{"id":36358,"nodeType":"ParameterList","parameters":[],"src":"1771:0:174"},"scope":36549,"src":"1630:216:174","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39072],"body":{"id":36387,"nodeType":"Block","src":"2016:67:174","statements":[{"expression":{"arguments":[{"id":36383,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36370,"src":"2057:6:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36384,"name":"rewardOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36373,"src":"2065:12:174","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}],"expression":{"id":36380,"name":"_rewardsController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36276,"src":"2022:18:174","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":36382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setRewardOracle","nodeType":"MemberAccess","referencedDeclaration":39219,"src":"2022:34:174","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_contract$_IEACAggregatorProxy_$34482_$returns$__$","typeString":"function (address,contract IEACAggregatorProxy) external"}},"id":36385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2022:56:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36386,"nodeType":"ExpressionStatement","src":"2022:56:174"}]},"documentation":{"id":36368,"nodeType":"StructuredDocumentation","src":"1850:32:174","text":"@inheritdoc IEmissionManager"},"functionSelector":"5453ba10","id":36388,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":36377,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36370,"src":"2008:6:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":36378,"kind":"modifierInvocation","modifierName":{"id":36376,"name":"onlyEmissionAdmin","nodeType":"IdentifierPath","referencedDeclaration":36293,"src":"1990:17:174"},"nodeType":"ModifierInvocation","src":"1990:25:174"}],"name":"setRewardOracle","nameLocation":"1894:15:174","nodeType":"FunctionDefinition","overrides":{"id":36375,"nodeType":"OverrideSpecifier","overrides":[],"src":"1981:8:174"},"parameters":{"id":36374,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36370,"mutability":"mutable","name":"reward","nameLocation":"1923:6:174","nodeType":"VariableDeclaration","scope":36388,"src":"1915:14:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36369,"name":"address","nodeType":"ElementaryTypeName","src":"1915:7:174","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36373,"mutability":"mutable","name":"rewardOracle","nameLocation":"1955:12:174","nodeType":"VariableDeclaration","scope":36388,"src":"1935:32:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"},"typeName":{"id":36372,"nodeType":"UserDefinedTypeName","pathNode":{"id":36371,"name":"IEACAggregatorProxy","nodeType":"IdentifierPath","referencedDeclaration":34482,"src":"1935:19:174"},"referencedDeclaration":34482,"src":"1935:19:174","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"visibility":"internal"}],"src":"1909:62:174"},"returnParameters":{"id":36379,"nodeType":"ParameterList","parameters":[],"src":"2016:0:174"},"scope":36549,"src":"1885:198:174","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39082],"body":{"id":36410,"nodeType":"Block","src":"2268:83:174","statements":[{"expression":{"arguments":[{"id":36405,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36391,"src":"2312:5:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36406,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36393,"src":"2319:6:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36407,"name":"newDistributionEnd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36395,"src":"2327:18:174","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":36402,"name":"_rewardsController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36276,"src":"2274:18:174","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":36404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setDistributionEnd","nodeType":"MemberAccess","referencedDeclaration":39397,"src":"2274:37:174","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint32_$returns$__$","typeString":"function (address,address,uint32) external"}},"id":36408,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2274:72:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36409,"nodeType":"ExpressionStatement","src":"2274:72:174"}]},"documentation":{"id":36389,"nodeType":"StructuredDocumentation","src":"2087:32:174","text":"@inheritdoc IEmissionManager"},"functionSelector":"c5a7b538","id":36411,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":36399,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36393,"src":"2260:6:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":36400,"kind":"modifierInvocation","modifierName":{"id":36398,"name":"onlyEmissionAdmin","nodeType":"IdentifierPath","referencedDeclaration":36293,"src":"2242:17:174"},"nodeType":"ModifierInvocation","src":"2242:25:174"}],"name":"setDistributionEnd","nameLocation":"2131:18:174","nodeType":"FunctionDefinition","overrides":{"id":36397,"nodeType":"OverrideSpecifier","overrides":[],"src":"2233:8:174"},"parameters":{"id":36396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36391,"mutability":"mutable","name":"asset","nameLocation":"2163:5:174","nodeType":"VariableDeclaration","scope":36411,"src":"2155:13:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36390,"name":"address","nodeType":"ElementaryTypeName","src":"2155:7:174","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36393,"mutability":"mutable","name":"reward","nameLocation":"2182:6:174","nodeType":"VariableDeclaration","scope":36411,"src":"2174:14:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36392,"name":"address","nodeType":"ElementaryTypeName","src":"2174:7:174","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36395,"mutability":"mutable","name":"newDistributionEnd","nameLocation":"2201:18:174","nodeType":"VariableDeclaration","scope":36411,"src":"2194:25:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":36394,"name":"uint32","nodeType":"ElementaryTypeName","src":"2194:6:174","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2149:74:174"},"returnParameters":{"id":36401,"nodeType":"ParameterList","parameters":[],"src":"2268:0:174"},"scope":36549,"src":"2122:229:174","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39094],"body":{"id":36457,"nodeType":"Block","src":"2538:227:174","statements":[{"body":{"id":36447,"nodeType":"Block","src":"2589:88:174","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":36443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":36436,"name":"_emissionAdmins","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36273,"src":"2605:15:174","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":36440,"indexExpression":{"baseExpression":{"id":36437,"name":"rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36417,"src":"2621:7:174","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":36439,"indexExpression":{"id":36438,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36425,"src":"2629:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2621:10:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2605:27:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":36441,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2636:3:174","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"2636:10:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2605:41:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f4e4c595f454d495353494f4e5f41444d494e","id":36444,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2648:21:174","typeDescriptions":{"typeIdentifier":"t_stringliteral_edefeee258d69843a88425ffde63c214e5c5d0658734a7483784d9fda45195be","typeString":"literal_string \"ONLY_EMISSION_ADMIN\""},"value":"ONLY_EMISSION_ADMIN"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_edefeee258d69843a88425ffde63c214e5c5d0658734a7483784d9fda45195be","typeString":"literal_string \"ONLY_EMISSION_ADMIN\""}],"id":36435,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2597:7:174","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36445,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2597:73:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36446,"nodeType":"ExpressionStatement","src":"2597:73:174"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36428,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36425,"src":"2564:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":36429,"name":"rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36417,"src":"2568:7:174","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":36430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"2568:14:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2564:18:174","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":36448,"initializationExpression":{"assignments":[36425],"declarations":[{"constant":false,"id":36425,"mutability":"mutable","name":"i","nameLocation":"2557:1:174","nodeType":"VariableDeclaration","scope":36448,"src":"2549:9:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36424,"name":"uint256","nodeType":"ElementaryTypeName","src":"2549:7:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36427,"initialValue":{"hexValue":"30","id":36426,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2561:1:174","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2549:13:174"},"loopExpression":{"expression":{"id":36433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2584:3:174","subExpression":{"id":36432,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36425,"src":"2584:1:174","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36434,"nodeType":"ExpressionStatement","src":"2584:3:174"},"nodeType":"ForStatement","src":"2544:133:174"},{"expression":{"arguments":[{"id":36452,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36414,"src":"2722:5:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36453,"name":"rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36417,"src":"2729:7:174","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"id":36454,"name":"newEmissionsPerSecond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36420,"src":"2738:21:174","typeDescriptions":{"typeIdentifier":"t_array$_t_uint88_$dyn_calldata_ptr","typeString":"uint88[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"},{"typeIdentifier":"t_array$_t_uint88_$dyn_calldata_ptr","typeString":"uint88[] calldata"}],"expression":{"id":36449,"name":"_rewardsController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36276,"src":"2682:18:174","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":36451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setEmissionPerSecond","nodeType":"MemberAccess","referencedDeclaration":39409,"src":"2682:39:174","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint88_$dyn_memory_ptr_$returns$__$","typeString":"function (address,address[] memory,uint88[] memory) external"}},"id":36455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2682:78:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36456,"nodeType":"ExpressionStatement","src":"2682:78:174"}]},"documentation":{"id":36412,"nodeType":"StructuredDocumentation","src":"2355:32:174","text":"@inheritdoc IEmissionManager"},"functionSelector":"f996868b","id":36458,"implemented":true,"kind":"function","modifiers":[],"name":"setEmissionPerSecond","nameLocation":"2399:20:174","nodeType":"FunctionDefinition","overrides":{"id":36422,"nodeType":"OverrideSpecifier","overrides":[],"src":"2529:8:174"},"parameters":{"id":36421,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36414,"mutability":"mutable","name":"asset","nameLocation":"2433:5:174","nodeType":"VariableDeclaration","scope":36458,"src":"2425:13:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36413,"name":"address","nodeType":"ElementaryTypeName","src":"2425:7:174","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36417,"mutability":"mutable","name":"rewards","nameLocation":"2463:7:174","nodeType":"VariableDeclaration","scope":36458,"src":"2444:26:174","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":36415,"name":"address","nodeType":"ElementaryTypeName","src":"2444:7:174","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":36416,"nodeType":"ArrayTypeName","src":"2444:9:174","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":36420,"mutability":"mutable","name":"newEmissionsPerSecond","nameLocation":"2494:21:174","nodeType":"VariableDeclaration","scope":36458,"src":"2476:39:174","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint88_$dyn_calldata_ptr","typeString":"uint88[]"},"typeName":{"baseType":{"id":36418,"name":"uint88","nodeType":"ElementaryTypeName","src":"2476:6:174","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"id":36419,"nodeType":"ArrayTypeName","src":"2476:8:174","typeDescriptions":{"typeIdentifier":"t_array$_t_uint88_$dyn_storage_ptr","typeString":"uint88[]"}},"visibility":"internal"}],"src":"2419:100:174"},"returnParameters":{"id":36423,"nodeType":"ParameterList","parameters":[],"src":"2538:0:174"},"scope":36549,"src":"2390:375:174","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39102],"body":{"id":36476,"nodeType":"Block","src":"2883:55:174","statements":[{"expression":{"arguments":[{"id":36472,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36461,"src":"2919:4:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36473,"name":"claimer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36463,"src":"2925:7:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":36469,"name":"_rewardsController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36276,"src":"2889:18:174","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":36471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"setClaimer","nodeType":"MemberAccess","referencedDeclaration":39201,"src":"2889:29:174","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) external"}},"id":36474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2889:44:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36475,"nodeType":"ExpressionStatement","src":"2889:44:174"}]},"documentation":{"id":36459,"nodeType":"StructuredDocumentation","src":"2769:32:174","text":"@inheritdoc IEmissionManager"},"functionSelector":"f5cf673b","id":36477,"implemented":true,"kind":"function","modifiers":[{"id":36467,"kind":"modifierInvocation","modifierName":{"id":36466,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"2873:9:174"},"nodeType":"ModifierInvocation","src":"2873:9:174"}],"name":"setClaimer","nameLocation":"2813:10:174","nodeType":"FunctionDefinition","overrides":{"id":36465,"nodeType":"OverrideSpecifier","overrides":[],"src":"2864:8:174"},"parameters":{"id":36464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36461,"mutability":"mutable","name":"user","nameLocation":"2832:4:174","nodeType":"VariableDeclaration","scope":36477,"src":"2824:12:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36460,"name":"address","nodeType":"ElementaryTypeName","src":"2824:7:174","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36463,"mutability":"mutable","name":"claimer","nameLocation":"2846:7:174","nodeType":"VariableDeclaration","scope":36477,"src":"2838:15:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36462,"name":"address","nodeType":"ElementaryTypeName","src":"2838:7:174","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2823:31:174"},"returnParameters":{"id":36468,"nodeType":"ParameterList","parameters":[],"src":"2883:0:174"},"scope":36549,"src":"2804:134:174","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39110],"body":{"id":36506,"nodeType":"Block","src":"3062:146:174","statements":[{"assignments":[36489],"declarations":[{"constant":false,"id":36489,"mutability":"mutable","name":"oldAdmin","nameLocation":"3076:8:174","nodeType":"VariableDeclaration","scope":36506,"src":"3068:16:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36488,"name":"address","nodeType":"ElementaryTypeName","src":"3068:7:174","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":36493,"initialValue":{"baseExpression":{"id":36490,"name":"_emissionAdmins","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36273,"src":"3087:15:174","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":36492,"indexExpression":{"id":36491,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36480,"src":"3103:6:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3087:23:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3068:42:174"},{"expression":{"id":36498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":36494,"name":"_emissionAdmins","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36273,"src":"3116:15:174","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":36496,"indexExpression":{"id":36495,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36480,"src":"3132:6:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3116:23:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":36497,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36482,"src":"3142:5:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3116:31:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":36499,"nodeType":"ExpressionStatement","src":"3116:31:174"},{"eventCall":{"arguments":[{"id":36501,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36480,"src":"3179:6:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36502,"name":"oldAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36489,"src":"3187:8:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36503,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36482,"src":"3197:5:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":36500,"name":"EmissionAdminUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39046,"src":"3158:20:174","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$","typeString":"function (address,address,address)"}},"id":36504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3158:45:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36505,"nodeType":"EmitStatement","src":"3153:50:174"}]},"documentation":{"id":36478,"nodeType":"StructuredDocumentation","src":"2942:32:174","text":"@inheritdoc IEmissionManager"},"functionSelector":"a286c6b4","id":36507,"implemented":true,"kind":"function","modifiers":[{"id":36486,"kind":"modifierInvocation","modifierName":{"id":36485,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"3052:9:174"},"nodeType":"ModifierInvocation","src":"3052:9:174"}],"name":"setEmissionAdmin","nameLocation":"2986:16:174","nodeType":"FunctionDefinition","overrides":{"id":36484,"nodeType":"OverrideSpecifier","overrides":[],"src":"3043:8:174"},"parameters":{"id":36483,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36480,"mutability":"mutable","name":"reward","nameLocation":"3011:6:174","nodeType":"VariableDeclaration","scope":36507,"src":"3003:14:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36479,"name":"address","nodeType":"ElementaryTypeName","src":"3003:7:174","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36482,"mutability":"mutable","name":"admin","nameLocation":"3027:5:174","nodeType":"VariableDeclaration","scope":36507,"src":"3019:13:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36481,"name":"address","nodeType":"ElementaryTypeName","src":"3019:7:174","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3002:31:174"},"returnParameters":{"id":36487,"nodeType":"ParameterList","parameters":[],"src":"3062:0:174"},"scope":36549,"src":"2977:231:174","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39116],"body":{"id":36522,"nodeType":"Block","src":"3325:62:174","statements":[{"expression":{"id":36520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36516,"name":"_rewardsController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36276,"src":"3331:18:174","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":36518,"name":"controller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36510,"src":"3371:10:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":36517,"name":"IRewardsController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39352,"src":"3352:18:174","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRewardsController_$39352_$","typeString":"type(contract IRewardsController)"}},"id":36519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3352:30:174","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"src":"3331:51:174","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"id":36521,"nodeType":"ExpressionStatement","src":"3331:51:174"}]},"documentation":{"id":36508,"nodeType":"StructuredDocumentation","src":"3212:32:174","text":"@inheritdoc IEmissionManager"},"functionSelector":"bee36bb3","id":36523,"implemented":true,"kind":"function","modifiers":[{"id":36514,"kind":"modifierInvocation","modifierName":{"id":36513,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"3315:9:174"},"nodeType":"ModifierInvocation","src":"3315:9:174"}],"name":"setRewardsController","nameLocation":"3256:20:174","nodeType":"FunctionDefinition","overrides":{"id":36512,"nodeType":"OverrideSpecifier","overrides":[],"src":"3306:8:174"},"parameters":{"id":36511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36510,"mutability":"mutable","name":"controller","nameLocation":"3285:10:174","nodeType":"VariableDeclaration","scope":36523,"src":"3277:18:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36509,"name":"address","nodeType":"ElementaryTypeName","src":"3277:7:174","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3276:20:174"},"returnParameters":{"id":36515,"nodeType":"ParameterList","parameters":[],"src":"3325:0:174"},"scope":36549,"src":"3247:140:174","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39123],"body":{"id":36533,"nodeType":"Block","src":"3510:36:174","statements":[{"expression":{"id":36531,"name":"_rewardsController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36276,"src":"3523:18:174","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"functionReturnParameters":36530,"id":36532,"nodeType":"Return","src":"3516:25:174"}]},"documentation":{"id":36524,"nodeType":"StructuredDocumentation","src":"3391:32:174","text":"@inheritdoc IEmissionManager"},"functionSelector":"de262738","id":36534,"implemented":true,"kind":"function","modifiers":[],"name":"getRewardsController","nameLocation":"3435:20:174","nodeType":"FunctionDefinition","overrides":{"id":36526,"nodeType":"OverrideSpecifier","overrides":[],"src":"3472:8:174"},"parameters":{"id":36525,"nodeType":"ParameterList","parameters":[],"src":"3455:2:174"},"returnParameters":{"id":36530,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36529,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":36534,"src":"3490:18:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"},"typeName":{"id":36528,"nodeType":"UserDefinedTypeName","pathNode":{"id":36527,"name":"IRewardsController","nodeType":"IdentifierPath","referencedDeclaration":39352,"src":"3490:18:174"},"referencedDeclaration":39352,"src":"3490:18:174","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"visibility":"internal"}],"src":"3489:20:174"},"scope":36549,"src":"3426:120:174","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[39131],"body":{"id":36547,"nodeType":"Block","src":"3668:41:174","statements":[{"expression":{"baseExpression":{"id":36543,"name":"_emissionAdmins","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36273,"src":"3681:15:174","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":36545,"indexExpression":{"id":36544,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36537,"src":"3697:6:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3681:23:174","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":36542,"id":36546,"nodeType":"Return","src":"3674:30:174"}]},"documentation":{"id":36535,"nodeType":"StructuredDocumentation","src":"3550:32:174","text":"@inheritdoc IEmissionManager"},"functionSelector":"529b1e87","id":36548,"implemented":true,"kind":"function","modifiers":[],"name":"getEmissionAdmin","nameLocation":"3594:16:174","nodeType":"FunctionDefinition","overrides":{"id":36539,"nodeType":"OverrideSpecifier","overrides":[],"src":"3641:8:174"},"parameters":{"id":36538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36537,"mutability":"mutable","name":"reward","nameLocation":"3619:6:174","nodeType":"VariableDeclaration","scope":36548,"src":"3611:14:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36536,"name":"address","nodeType":"ElementaryTypeName","src":"3611:7:174","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3610:16:174"},"returnParameters":{"id":36542,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36541,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":36548,"src":"3659:7:174","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36540,"name":"address","nodeType":"ElementaryTypeName","src":"3659:7:174","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3658:9:174"},"scope":36549,"src":"3585:124:174","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":36550,"src":"689:3022:174","usedErrors":[]}],"src":"37:3675:174"},"id":174},"contracts/rewards/RewardsController.sol":{"ast":{"absolutePath":"contracts/rewards/RewardsController.sol","exportedSymbols":{"IEACAggregatorProxy":[34482],"IRewardsController":[39352],"IScaledBalanceToken":[5975],"ITransferStrategyBase":[39643],"RewardsController":[37578],"RewardsDataTypes":[39707],"RewardsDistributor":[39026],"SafeCast":[1966],"VersionedInitializable":[10573]},"id":37579,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":36551,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:175"},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol","file":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol","id":36553,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":37579,"sourceUnit":10574,"src":"63:129:175","symbolAliases":[{"foreign":{"id":36552,"name":"VersionedInitializable","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:22:175","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol","id":36555,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":37579,"sourceUnit":1967,"src":"193:98:175","symbolAliases":[{"foreign":{"id":36554,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"201:8:175","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol","file":"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol","id":36557,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":37579,"sourceUnit":5976,"src":"292:95:175","symbolAliases":[{"foreign":{"id":36556,"name":"IScaledBalanceToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"300:19:175","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/rewards/RewardsDistributor.sol","file":"./RewardsDistributor.sol","id":36559,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":37579,"sourceUnit":39027,"src":"388:60:175","symbolAliases":[{"foreign":{"id":36558,"name":"RewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"src":"396:18:175","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/rewards/interfaces/IRewardsController.sol","file":"./interfaces/IRewardsController.sol","id":36561,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":37579,"sourceUnit":39353,"src":"449:71:175","symbolAliases":[{"foreign":{"id":36560,"name":"IRewardsController","nodeType":"Identifier","overloadedDeclarations":[],"src":"457:18:175","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/rewards/interfaces/ITransferStrategyBase.sol","file":"./interfaces/ITransferStrategyBase.sol","id":36563,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":37579,"sourceUnit":39644,"src":"521:77:175","symbolAliases":[{"foreign":{"id":36562,"name":"ITransferStrategyBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"529:21:175","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/rewards/libraries/RewardsDataTypes.sol","file":"./libraries/RewardsDataTypes.sol","id":36565,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":37579,"sourceUnit":39708,"src":"599:66:175","symbolAliases":[{"foreign":{"id":36564,"name":"RewardsDataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"607:16:175","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/misc/interfaces/IEACAggregatorProxy.sol","file":"../misc/interfaces/IEACAggregatorProxy.sol","id":36567,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":37579,"sourceUnit":34483,"src":"666:79:175","symbolAliases":[{"foreign":{"id":36566,"name":"IEACAggregatorProxy","nodeType":"Identifier","overloadedDeclarations":[],"src":"674:19:175","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":36569,"name":"RewardsDistributor","nodeType":"IdentifierPath","referencedDeclaration":39026,"src":"943:18:175"},"id":36570,"nodeType":"InheritanceSpecifier","src":"943:18:175"},{"baseName":{"id":36571,"name":"VersionedInitializable","nodeType":"IdentifierPath","referencedDeclaration":10573,"src":"963:22:175"},"id":36572,"nodeType":"InheritanceSpecifier","src":"963:22:175"},{"baseName":{"id":36573,"name":"IRewardsController","nodeType":"IdentifierPath","referencedDeclaration":39352,"src":"987:18:175"},"id":36574,"nodeType":"InheritanceSpecifier","src":"987:18:175"}],"canonicalName":"RewardsController","contractDependencies":[],"contractKind":"contract","documentation":{"id":36568,"nodeType":"StructuredDocumentation","src":"747:165:175","text":" @title RewardsController\n @notice Abstract contract template to build Distributors contracts for ERC20 rewards to protocol participants\n @author Aave*"},"fullyImplemented":true,"id":37578,"linearizedBaseContracts":[37578,39352,10573,39026,39534],"name":"RewardsController","nameLocation":"922:17:175","nodeType":"ContractDefinition","nodes":[{"id":36577,"libraryName":{"id":36575,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"1016:8:175"},"nodeType":"UsingForDirective","src":"1010:27:175","typeName":{"id":36576,"name":"uint256","nodeType":"ElementaryTypeName","src":"1029:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"constant":true,"functionSelector":"dde43cba","id":36580,"mutability":"constant","name":"REVISION","nameLocation":"1065:8:175","nodeType":"VariableDeclaration","scope":37578,"src":"1041:36:175","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36578,"name":"uint256","nodeType":"ElementaryTypeName","src":"1041:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":36579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1076:1:175","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"public"},{"constant":false,"id":36584,"mutability":"mutable","name":"_authorizedClaimers","nameLocation":"1319:19:175","nodeType":"VariableDeclaration","scope":37578,"src":"1282:56:175","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"},"typeName":{"id":36583,"keyType":{"id":36581,"name":"address","nodeType":"ElementaryTypeName","src":"1290:7:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1282:27:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"},"valueType":{"id":36582,"name":"address","nodeType":"ElementaryTypeName","src":"1301:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":36589,"mutability":"mutable","name":"_transferStrategy","nameLocation":"1582:17:175","nodeType":"VariableDeclaration","scope":37578,"src":"1531:68:175","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_ITransferStrategyBase_$39643_$","typeString":"mapping(address => contract ITransferStrategyBase)"},"typeName":{"id":36588,"keyType":{"id":36585,"name":"address","nodeType":"ElementaryTypeName","src":"1539:7:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1531:41:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_ITransferStrategyBase_$39643_$","typeString":"mapping(address => contract ITransferStrategyBase)"},"valueType":{"id":36587,"nodeType":"UserDefinedTypeName","pathNode":{"id":36586,"name":"ITransferStrategyBase","nodeType":"IdentifierPath","referencedDeclaration":39643,"src":"1550:21:175"},"referencedDeclaration":39643,"src":"1550:21:175","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}}},"visibility":"internal"},{"constant":false,"id":36594,"mutability":"mutable","name":"_rewardOracle","nameLocation":"2022:13:175","nodeType":"VariableDeclaration","scope":37578,"src":"1973:62:175","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IEACAggregatorProxy_$34482_$","typeString":"mapping(address => contract IEACAggregatorProxy)"},"typeName":{"id":36593,"keyType":{"id":36590,"name":"address","nodeType":"ElementaryTypeName","src":"1981:7:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1973:39:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IEACAggregatorProxy_$34482_$","typeString":"mapping(address => contract IEACAggregatorProxy)"},"valueType":{"id":36592,"nodeType":"UserDefinedTypeName","pathNode":{"id":36591,"name":"IEACAggregatorProxy","nodeType":"IdentifierPath","referencedDeclaration":34482,"src":"1992:19:175"},"referencedDeclaration":34482,"src":"1992:19:175","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}}},"visibility":"internal"},{"body":{"id":36610,"nodeType":"Block","src":"2103:87:175","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":36605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":36601,"name":"_authorizedClaimers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36584,"src":"2117:19:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":36603,"indexExpression":{"id":36602,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36598,"src":"2137:4:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2117:25:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":36604,"name":"claimer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36596,"src":"2146:7:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2117:36:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"434c41494d45525f554e415554484f52495a4544","id":36606,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2155:22:175","typeDescriptions":{"typeIdentifier":"t_stringliteral_dc389f9f05ed02e337a2af628240d9d635867491305ed504870102f5e0924c61","typeString":"literal_string \"CLAIMER_UNAUTHORIZED\""},"value":"CLAIMER_UNAUTHORIZED"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_dc389f9f05ed02e337a2af628240d9d635867491305ed504870102f5e0924c61","typeString":"literal_string \"CLAIMER_UNAUTHORIZED\""}],"id":36600,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2109:7:175","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2109:69:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36608,"nodeType":"ExpressionStatement","src":"2109:69:175"},{"id":36609,"nodeType":"PlaceholderStatement","src":"2184:1:175"}]},"id":36611,"name":"onlyAuthorizedClaimers","nameLocation":"2049:22:175","nodeType":"ModifierDefinition","parameters":{"id":36599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36596,"mutability":"mutable","name":"claimer","nameLocation":"2080:7:175","nodeType":"VariableDeclaration","scope":36611,"src":"2072:15:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36595,"name":"address","nodeType":"ElementaryTypeName","src":"2072:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36598,"mutability":"mutable","name":"user","nameLocation":"2097:4:175","nodeType":"VariableDeclaration","scope":36611,"src":"2089:12:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36597,"name":"address","nodeType":"ElementaryTypeName","src":"2089:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2071:31:175"},"src":"2040:150:175","virtual":false,"visibility":"internal"},{"body":{"id":36619,"nodeType":"Block","src":"2267:2:175","statements":[]},"id":36620,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":36616,"name":"emissionManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36613,"src":"2250:15:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":36617,"kind":"baseConstructorSpecifier","modifierName":{"id":36615,"name":"RewardsDistributor","nodeType":"IdentifierPath","referencedDeclaration":39026,"src":"2231:18:175"},"nodeType":"ModifierInvocation","src":"2231:35:175"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":36614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36613,"mutability":"mutable","name":"emissionManager","nameLocation":"2214:15:175","nodeType":"VariableDeclaration","scope":36620,"src":"2206:23:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36612,"name":"address","nodeType":"ElementaryTypeName","src":"2206:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2205:25:175"},"returnParameters":{"id":36618,"nodeType":"ParameterList","parameters":[],"src":"2267:0:175"},"scope":37578,"src":"2194:75:175","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":36628,"nodeType":"Block","src":"2485:2:175","statements":[]},"documentation":{"id":36621,"nodeType":"StructuredDocumentation","src":"2273:159:175","text":" @dev Initialize for RewardsController\n @dev It expects an address as argument since its initialized via PoolAddressesProvider._updateImpl()*"},"functionSelector":"c4d66de8","id":36629,"implemented":true,"kind":"function","modifiers":[{"id":36626,"kind":"modifierInvocation","modifierName":{"id":36625,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":10547,"src":"2473:11:175"},"nodeType":"ModifierInvocation","src":"2473:11:175"}],"name":"initialize","nameLocation":"2444:10:175","nodeType":"FunctionDefinition","parameters":{"id":36624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36623,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":36629,"src":"2455:7:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36622,"name":"address","nodeType":"ElementaryTypeName","src":"2455:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2454:9:175"},"returnParameters":{"id":36627,"nodeType":"ParameterList","parameters":[],"src":"2485:0:175"},"scope":37578,"src":"2435:52:175","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39235],"body":{"id":36642,"nodeType":"Block","src":"2603:43:175","statements":[{"expression":{"baseExpression":{"id":36638,"name":"_authorizedClaimers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36584,"src":"2616:19:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":36640,"indexExpression":{"id":36639,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36632,"src":"2636:4:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2616:25:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":36637,"id":36641,"nodeType":"Return","src":"2609:32:175"}]},"documentation":{"id":36630,"nodeType":"StructuredDocumentation","src":"2491:34:175","text":"@inheritdoc IRewardsController"},"functionSelector":"74d945ec","id":36643,"implemented":true,"kind":"function","modifiers":[],"name":"getClaimer","nameLocation":"2537:10:175","nodeType":"FunctionDefinition","overrides":{"id":36634,"nodeType":"OverrideSpecifier","overrides":[],"src":"2576:8:175"},"parameters":{"id":36633,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36632,"mutability":"mutable","name":"user","nameLocation":"2556:4:175","nodeType":"VariableDeclaration","scope":36643,"src":"2548:12:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36631,"name":"address","nodeType":"ElementaryTypeName","src":"2548:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2547:14:175"},"returnParameters":{"id":36637,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36636,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":36643,"src":"2594:7:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36635,"name":"address","nodeType":"ElementaryTypeName","src":"2594:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2593:9:175"},"scope":37578,"src":"2528:118:175","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[10553],"body":{"id":36652,"nodeType":"Block","src":"2835:26:175","statements":[{"expression":{"id":36650,"name":"REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36580,"src":"2848:8:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":36649,"id":36651,"nodeType":"Return","src":"2841:15:175"}]},"documentation":{"id":36644,"nodeType":"StructuredDocumentation","src":"2650:118:175","text":" @dev Returns the revision of the implementation contract\n @return uint256, current revision version"},"id":36653,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"2780:11:175","nodeType":"FunctionDefinition","overrides":{"id":36646,"nodeType":"OverrideSpecifier","overrides":[],"src":"2808:8:175"},"parameters":{"id":36645,"nodeType":"ParameterList","parameters":[],"src":"2791:2:175"},"returnParameters":{"id":36649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36648,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":36653,"src":"2826:7:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36647,"name":"uint256","nodeType":"ElementaryTypeName","src":"2826:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2825:9:175"},"scope":37578,"src":"2771:90:175","stateMutability":"pure","virtual":false,"visibility":"internal"},{"baseFunctions":[39227],"body":{"id":36669,"nodeType":"Block","src":"2984:48:175","statements":[{"expression":{"arguments":[{"baseExpression":{"id":36664,"name":"_rewardOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36594,"src":"3005:13:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IEACAggregatorProxy_$34482_$","typeString":"mapping(address => contract IEACAggregatorProxy)"}},"id":36666,"indexExpression":{"id":36665,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36656,"src":"3019:6:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3005:21:175","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}],"id":36663,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2997:7:175","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36662,"name":"address","nodeType":"ElementaryTypeName","src":"2997:7:175","typeDescriptions":{}}},"id":36667,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2997:30:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":36661,"id":36668,"nodeType":"Return","src":"2990:37:175"}]},"documentation":{"id":36654,"nodeType":"StructuredDocumentation","src":"2865:34:175","text":"@inheritdoc IRewardsController"},"functionSelector":"2a17bf60","id":36670,"implemented":true,"kind":"function","modifiers":[],"name":"getRewardOracle","nameLocation":"2911:15:175","nodeType":"FunctionDefinition","overrides":{"id":36658,"nodeType":"OverrideSpecifier","overrides":[],"src":"2957:8:175"},"parameters":{"id":36657,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36656,"mutability":"mutable","name":"reward","nameLocation":"2935:6:175","nodeType":"VariableDeclaration","scope":36670,"src":"2927:14:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36655,"name":"address","nodeType":"ElementaryTypeName","src":"2927:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2926:16:175"},"returnParameters":{"id":36661,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36660,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":36670,"src":"2975:7:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36659,"name":"address","nodeType":"ElementaryTypeName","src":"2975:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2974:9:175"},"scope":37578,"src":"2902:130:175","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[39243],"body":{"id":36686,"nodeType":"Block","src":"3159:52:175","statements":[{"expression":{"arguments":[{"baseExpression":{"id":36681,"name":"_transferStrategy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36589,"src":"3180:17:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_ITransferStrategyBase_$39643_$","typeString":"mapping(address => contract ITransferStrategyBase)"}},"id":36683,"indexExpression":{"id":36682,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36673,"src":"3198:6:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3180:25:175","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}],"id":36680,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3172:7:175","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36679,"name":"address","nodeType":"ElementaryTypeName","src":"3172:7:175","typeDescriptions":{}}},"id":36684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3172:34:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":36678,"id":36685,"nodeType":"Return","src":"3165:41:175"}]},"documentation":{"id":36671,"nodeType":"StructuredDocumentation","src":"3036:34:175","text":"@inheritdoc IRewardsController"},"functionSelector":"5f130b24","id":36687,"implemented":true,"kind":"function","modifiers":[],"name":"getTransferStrategy","nameLocation":"3082:19:175","nodeType":"FunctionDefinition","overrides":{"id":36675,"nodeType":"OverrideSpecifier","overrides":[],"src":"3132:8:175"},"parameters":{"id":36674,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36673,"mutability":"mutable","name":"reward","nameLocation":"3110:6:175","nodeType":"VariableDeclaration","scope":36687,"src":"3102:14:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36672,"name":"address","nodeType":"ElementaryTypeName","src":"3102:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3101:16:175"},"returnParameters":{"id":36678,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36677,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":36687,"src":"3150:7:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36676,"name":"address","nodeType":"ElementaryTypeName","src":"3150:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3149:9:175"},"scope":37578,"src":"3073:138:175","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[39251],"body":{"id":36751,"nodeType":"Block","src":"3376:537:175","statements":[{"body":{"id":36745,"nodeType":"Block","src":"3426:453:175","statements":[{"expression":{"id":36721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":36709,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36692,"src":"3503:6:175","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":36711,"indexExpression":{"id":36710,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36699,"src":"3510:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3503:9:175","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":36712,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":39653,"src":"3503:21:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"baseExpression":{"id":36714,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36692,"src":"3547:6:175","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":36716,"indexExpression":{"id":36715,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36699,"src":"3554:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3547:9:175","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":36717,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39657,"src":"3547:15:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":36713,"name":"IScaledBalanceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5975,"src":"3527:19:175","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IScaledBalanceToken_$5975_$","typeString":"type(contract IScaledBalanceToken)"}},"id":36718,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3527:36:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IScaledBalanceToken_$5975","typeString":"contract IScaledBalanceToken"}},"id":36719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"scaledTotalSupply","nodeType":"MemberAccess","referencedDeclaration":5966,"src":"3527:54:175","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":36720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3527:56:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3503:80:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36722,"nodeType":"ExpressionStatement","src":"3503:80:175"},{"expression":{"arguments":[{"expression":{"baseExpression":{"id":36724,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36692,"src":"3681:6:175","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":36726,"indexExpression":{"id":36725,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36699,"src":"3688:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3681:9:175","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":36727,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reward","nodeType":"MemberAccess","referencedDeclaration":39659,"src":"3681:16:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":36728,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36692,"src":"3699:6:175","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":36730,"indexExpression":{"id":36729,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36699,"src":"3706:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3699:9:175","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":36731,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"transferStrategy","nodeType":"MemberAccess","referencedDeclaration":39662,"src":"3699:26:175","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}],"id":36723,"name":"_installTransferStrategy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37544,"src":"3656:24:175","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_ITransferStrategyBase_$39643_$returns$__$","typeString":"function (address,contract ITransferStrategyBase)"}},"id":36732,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3656:70:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36733,"nodeType":"ExpressionStatement","src":"3656:70:175"},{"expression":{"arguments":[{"expression":{"baseExpression":{"id":36735,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36692,"src":"3831:6:175","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":36737,"indexExpression":{"id":36736,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36699,"src":"3838:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3831:9:175","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":36738,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reward","nodeType":"MemberAccess","referencedDeclaration":39659,"src":"3831:16:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":36739,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36692,"src":"3849:6:175","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":36741,"indexExpression":{"id":36740,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36699,"src":"3856:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3849:9:175","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":36742,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewardOracle","nodeType":"MemberAccess","referencedDeclaration":39665,"src":"3849:22:175","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}],"id":36734,"name":"_setRewardOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37577,"src":"3814:16:175","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IEACAggregatorProxy_$34482_$returns$__$","typeString":"function (address,contract IEACAggregatorProxy)"}},"id":36743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3814:58:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36744,"nodeType":"ExpressionStatement","src":"3814:58:175"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36702,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36699,"src":"3402:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":36703,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36692,"src":"3406:6:175","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":36704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3406:13:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3402:17:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":36746,"initializationExpression":{"assignments":[36699],"declarations":[{"constant":false,"id":36699,"mutability":"mutable","name":"i","nameLocation":"3395:1:175","nodeType":"VariableDeclaration","scope":36746,"src":"3387:9:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36698,"name":"uint256","nodeType":"ElementaryTypeName","src":"3387:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36701,"initialValue":{"hexValue":"30","id":36700,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3399:1:175","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3387:13:175"},"loopExpression":{"expression":{"id":36707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3421:3:175","subExpression":{"id":36706,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36699,"src":"3421:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36708,"nodeType":"ExpressionStatement","src":"3421:3:175"},"nodeType":"ForStatement","src":"3382:497:175"},{"expression":{"arguments":[{"id":36748,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36692,"src":"3901:6:175","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}],"id":36747,"name":"_configureAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38421,"src":"3884:16:175","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr_$returns$__$","typeString":"function (struct RewardsDataTypes.RewardsConfigInput memory[] memory)"}},"id":36749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3884:24:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36750,"nodeType":"ExpressionStatement","src":"3884:24:175"}]},"documentation":{"id":36688,"nodeType":"StructuredDocumentation","src":"3215:34:175","text":"@inheritdoc IRewardsController"},"functionSelector":"955c2ad7","id":36752,"implemented":true,"kind":"function","modifiers":[{"id":36696,"kind":"modifierInvocation","modifierName":{"id":36695,"name":"onlyEmissionManager","nodeType":"IdentifierPath","referencedDeclaration":37627,"src":"3356:19:175"},"nodeType":"ModifierInvocation","src":"3356:19:175"}],"name":"configureAssets","nameLocation":"3261:15:175","nodeType":"FunctionDefinition","overrides":{"id":36694,"nodeType":"OverrideSpecifier","overrides":[],"src":"3347:8:175"},"parameters":{"id":36693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36692,"mutability":"mutable","name":"config","nameLocation":"3327:6:175","nodeType":"VariableDeclaration","scope":36752,"src":"3282:51:175","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput[]"},"typeName":{"baseType":{"id":36690,"nodeType":"UserDefinedTypeName","pathNode":{"id":36689,"name":"RewardsDataTypes.RewardsConfigInput","nodeType":"IdentifierPath","referencedDeclaration":39666,"src":"3282:35:175"},"referencedDeclaration":39666,"src":"3282:35:175","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_storage_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput"}},"id":36691,"nodeType":"ArrayTypeName","src":"3282:37:175","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_storage_$dyn_storage_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput[]"}},"visibility":"internal"}],"src":"3276:61:175"},"returnParameters":{"id":36697,"nodeType":"ParameterList","parameters":[],"src":"3376:0:175"},"scope":37578,"src":"3252:661:175","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39210],"body":{"id":36768,"nodeType":"Block","src":"4080:61:175","statements":[{"expression":{"arguments":[{"id":36764,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36755,"src":"4111:6:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36765,"name":"transferStrategy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36758,"src":"4119:16:175","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}],"id":36763,"name":"_installTransferStrategy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37544,"src":"4086:24:175","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_ITransferStrategyBase_$39643_$returns$__$","typeString":"function (address,contract ITransferStrategyBase)"}},"id":36766,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4086:50:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36767,"nodeType":"ExpressionStatement","src":"4086:50:175"}]},"documentation":{"id":36753,"nodeType":"StructuredDocumentation","src":"3917:34:175","text":"@inheritdoc IRewardsController"},"functionSelector":"e15ac623","id":36769,"implemented":true,"kind":"function","modifiers":[{"id":36761,"kind":"modifierInvocation","modifierName":{"id":36760,"name":"onlyEmissionManager","nodeType":"IdentifierPath","referencedDeclaration":37627,"src":"4060:19:175"},"nodeType":"ModifierInvocation","src":"4060:19:175"}],"name":"setTransferStrategy","nameLocation":"3963:19:175","nodeType":"FunctionDefinition","parameters":{"id":36759,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36755,"mutability":"mutable","name":"reward","nameLocation":"3996:6:175","nodeType":"VariableDeclaration","scope":36769,"src":"3988:14:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36754,"name":"address","nodeType":"ElementaryTypeName","src":"3988:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36758,"mutability":"mutable","name":"transferStrategy","nameLocation":"4030:16:175","nodeType":"VariableDeclaration","scope":36769,"src":"4008:38:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"},"typeName":{"id":36757,"nodeType":"UserDefinedTypeName","pathNode":{"id":36756,"name":"ITransferStrategyBase","nodeType":"IdentifierPath","referencedDeclaration":39643,"src":"4008:21:175"},"referencedDeclaration":39643,"src":"4008:21:175","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}},"visibility":"internal"}],"src":"3982:68:175"},"returnParameters":{"id":36762,"nodeType":"ParameterList","parameters":[],"src":"4080:0:175"},"scope":37578,"src":"3954:187:175","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39219],"body":{"id":36785,"nodeType":"Block","src":"4298:49:175","statements":[{"expression":{"arguments":[{"id":36781,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36772,"src":"4321:6:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36782,"name":"rewardOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36775,"src":"4329:12:175","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}],"id":36780,"name":"_setRewardOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37577,"src":"4304:16:175","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IEACAggregatorProxy_$34482_$returns$__$","typeString":"function (address,contract IEACAggregatorProxy)"}},"id":36783,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4304:38:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36784,"nodeType":"ExpressionStatement","src":"4304:38:175"}]},"documentation":{"id":36770,"nodeType":"StructuredDocumentation","src":"4145:34:175","text":"@inheritdoc IRewardsController"},"functionSelector":"5453ba10","id":36786,"implemented":true,"kind":"function","modifiers":[{"id":36778,"kind":"modifierInvocation","modifierName":{"id":36777,"name":"onlyEmissionManager","nodeType":"IdentifierPath","referencedDeclaration":37627,"src":"4278:19:175"},"nodeType":"ModifierInvocation","src":"4278:19:175"}],"name":"setRewardOracle","nameLocation":"4191:15:175","nodeType":"FunctionDefinition","parameters":{"id":36776,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36772,"mutability":"mutable","name":"reward","nameLocation":"4220:6:175","nodeType":"VariableDeclaration","scope":36786,"src":"4212:14:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36771,"name":"address","nodeType":"ElementaryTypeName","src":"4212:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36775,"mutability":"mutable","name":"rewardOracle","nameLocation":"4252:12:175","nodeType":"VariableDeclaration","scope":36786,"src":"4232:32:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"},"typeName":{"id":36774,"nodeType":"UserDefinedTypeName","pathNode":{"id":36773,"name":"IEACAggregatorProxy","nodeType":"IdentifierPath","referencedDeclaration":34482,"src":"4232:19:175"},"referencedDeclaration":34482,"src":"4232:19:175","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"visibility":"internal"}],"src":"4206:62:175"},"returnParameters":{"id":36779,"nodeType":"ParameterList","parameters":[],"src":"4298:0:175"},"scope":37578,"src":"4182:165:175","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39261],"body":{"id":36805,"nodeType":"Block","src":"4484:66:175","statements":[{"expression":{"arguments":[{"expression":{"id":36798,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4502:3:175","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"4502:10:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36800,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36789,"src":"4514:4:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36801,"name":"userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36793,"src":"4520:11:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":36802,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36791,"src":"4533:11:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":36797,"name":"_updateData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38694,"src":"4490:11:175","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":36803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4490:55:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36804,"nodeType":"ExpressionStatement","src":"4490:55:175"}]},"documentation":{"id":36787,"nodeType":"StructuredDocumentation","src":"4351:34:175","text":"@inheritdoc IRewardsController"},"functionSelector":"31873e2e","id":36806,"implemented":true,"kind":"function","modifiers":[],"name":"handleAction","nameLocation":"4397:12:175","nodeType":"FunctionDefinition","overrides":{"id":36795,"nodeType":"OverrideSpecifier","overrides":[],"src":"4475:8:175"},"parameters":{"id":36794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36789,"mutability":"mutable","name":"user","nameLocation":"4418:4:175","nodeType":"VariableDeclaration","scope":36806,"src":"4410:12:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36788,"name":"address","nodeType":"ElementaryTypeName","src":"4410:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36791,"mutability":"mutable","name":"totalSupply","nameLocation":"4432:11:175","nodeType":"VariableDeclaration","scope":36806,"src":"4424:19:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36790,"name":"uint256","nodeType":"ElementaryTypeName","src":"4424:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":36793,"mutability":"mutable","name":"userBalance","nameLocation":"4453:11:175","nodeType":"VariableDeclaration","scope":36806,"src":"4445:19:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36792,"name":"uint256","nodeType":"ElementaryTypeName","src":"4445:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4409:56:175"},"returnParameters":{"id":36796,"nodeType":"ParameterList","parameters":[],"src":"4484:0:175"},"scope":37578,"src":"4388:162:175","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39276],"body":{"id":36843,"nodeType":"Block","src":"4740:136:175","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":36828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36823,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36814,"src":"4754:2:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":36826,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4768:1:175","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":36825,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4760:7:175","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36824,"name":"address","nodeType":"ElementaryTypeName","src":"4760:7:175","typeDescriptions":{}}},"id":36827,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4760:10:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4754:16:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e56414c49445f544f5f41444452455353","id":36829,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4772:20:175","typeDescriptions":{"typeIdentifier":"t_stringliteral_60a6ecd9d15a2e4ae360b5943de5e7d94204c8fa7a9b93d3208a26418697ceb3","typeString":"literal_string \"INVALID_TO_ADDRESS\""},"value":"INVALID_TO_ADDRESS"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_60a6ecd9d15a2e4ae360b5943de5e7d94204c8fa7a9b93d3208a26418697ceb3","typeString":"literal_string \"INVALID_TO_ADDRESS\""}],"id":36822,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4746:7:175","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4746:47:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36831,"nodeType":"ExpressionStatement","src":"4746:47:175"},{"expression":{"arguments":[{"id":36833,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36810,"src":"4820:6:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"id":36834,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36812,"src":"4828:6:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":36835,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4836:3:175","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"4836:10:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":36837,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4848:3:175","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"4848:10:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36839,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36814,"src":"4860:2:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36840,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36816,"src":"4864:6:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":36832,"name":"_claimRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37267,"src":"4806:13:175","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_calldata_ptr_$_t_uint256_$_t_address_$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address[] calldata,uint256,address,address,address,address) returns (uint256)"}},"id":36841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4806:65:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":36821,"id":36842,"nodeType":"Return","src":"4799:72:175"}]},"documentation":{"id":36807,"nodeType":"StructuredDocumentation","src":"4554:34:175","text":"@inheritdoc IRewardsController"},"functionSelector":"236300dc","id":36844,"implemented":true,"kind":"function","modifiers":[],"name":"claimRewards","nameLocation":"4600:12:175","nodeType":"FunctionDefinition","overrides":{"id":36818,"nodeType":"OverrideSpecifier","overrides":[],"src":"4713:8:175"},"parameters":{"id":36817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36810,"mutability":"mutable","name":"assets","nameLocation":"4637:6:175","nodeType":"VariableDeclaration","scope":36844,"src":"4618:25:175","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":36808,"name":"address","nodeType":"ElementaryTypeName","src":"4618:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":36809,"nodeType":"ArrayTypeName","src":"4618:9:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":36812,"mutability":"mutable","name":"amount","nameLocation":"4657:6:175","nodeType":"VariableDeclaration","scope":36844,"src":"4649:14:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36811,"name":"uint256","nodeType":"ElementaryTypeName","src":"4649:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":36814,"mutability":"mutable","name":"to","nameLocation":"4677:2:175","nodeType":"VariableDeclaration","scope":36844,"src":"4669:10:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36813,"name":"address","nodeType":"ElementaryTypeName","src":"4669:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36816,"mutability":"mutable","name":"reward","nameLocation":"4693:6:175","nodeType":"VariableDeclaration","scope":36844,"src":"4685:14:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36815,"name":"address","nodeType":"ElementaryTypeName","src":"4685:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4612:91:175"},"returnParameters":{"id":36821,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36820,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":36844,"src":"4731:7:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36819,"name":"uint256","nodeType":"ElementaryTypeName","src":"4731:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4730:9:175"},"scope":37578,"src":"4591:285:175","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39293],"body":{"id":36897,"nodeType":"Block","src":"5133:187:175","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":36873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36868,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36852,"src":"5147:4:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":36871,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5163:1:175","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":36870,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5155:7:175","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36869,"name":"address","nodeType":"ElementaryTypeName","src":"5155:7:175","typeDescriptions":{}}},"id":36872,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5155:10:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5147:18:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e56414c49445f555345525f41444452455353","id":36874,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5167:22:175","typeDescriptions":{"typeIdentifier":"t_stringliteral_4058a4fa702d397682b400d1a2d7894f822738ac481455440aeb37a04a780eca","typeString":"literal_string \"INVALID_USER_ADDRESS\""},"value":"INVALID_USER_ADDRESS"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4058a4fa702d397682b400d1a2d7894f822738ac481455440aeb37a04a780eca","typeString":"literal_string \"INVALID_USER_ADDRESS\""}],"id":36867,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5139:7:175","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36875,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5139:51:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36876,"nodeType":"ExpressionStatement","src":"5139:51:175"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":36883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36878,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36854,"src":"5204:2:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":36881,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5218:1:175","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":36880,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5210:7:175","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36879,"name":"address","nodeType":"ElementaryTypeName","src":"5210:7:175","typeDescriptions":{}}},"id":36882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5210:10:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5204:16:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e56414c49445f544f5f41444452455353","id":36884,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5222:20:175","typeDescriptions":{"typeIdentifier":"t_stringliteral_60a6ecd9d15a2e4ae360b5943de5e7d94204c8fa7a9b93d3208a26418697ceb3","typeString":"literal_string \"INVALID_TO_ADDRESS\""},"value":"INVALID_TO_ADDRESS"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_60a6ecd9d15a2e4ae360b5943de5e7d94204c8fa7a9b93d3208a26418697ceb3","typeString":"literal_string \"INVALID_TO_ADDRESS\""}],"id":36877,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5196:7:175","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5196:47:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36886,"nodeType":"ExpressionStatement","src":"5196:47:175"},{"expression":{"arguments":[{"id":36888,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36848,"src":"5270:6:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"id":36889,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36850,"src":"5278:6:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":36890,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5286:3:175","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5286:10:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36892,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36852,"src":"5298:4:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36893,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36854,"src":"5304:2:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36894,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36856,"src":"5308:6:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":36887,"name":"_claimRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37267,"src":"5256:13:175","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_calldata_ptr_$_t_uint256_$_t_address_$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address[] calldata,uint256,address,address,address,address) returns (uint256)"}},"id":36895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5256:59:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":36866,"id":36896,"nodeType":"Return","src":"5249:66:175"}]},"documentation":{"id":36845,"nodeType":"StructuredDocumentation","src":"4880:34:175","text":"@inheritdoc IRewardsController"},"functionSelector":"33028b99","id":36898,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"expression":{"id":36860,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5097:3:175","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5097:10:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36862,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36852,"src":"5109:4:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":36863,"kind":"modifierInvocation","modifierName":{"id":36859,"name":"onlyAuthorizedClaimers","nodeType":"IdentifierPath","referencedDeclaration":36611,"src":"5074:22:175"},"nodeType":"ModifierInvocation","src":"5074:40:175"}],"name":"claimRewardsOnBehalf","nameLocation":"4926:20:175","nodeType":"FunctionDefinition","overrides":{"id":36858,"nodeType":"OverrideSpecifier","overrides":[],"src":"5065:8:175"},"parameters":{"id":36857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36848,"mutability":"mutable","name":"assets","nameLocation":"4971:6:175","nodeType":"VariableDeclaration","scope":36898,"src":"4952:25:175","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":36846,"name":"address","nodeType":"ElementaryTypeName","src":"4952:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":36847,"nodeType":"ArrayTypeName","src":"4952:9:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":36850,"mutability":"mutable","name":"amount","nameLocation":"4991:6:175","nodeType":"VariableDeclaration","scope":36898,"src":"4983:14:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36849,"name":"uint256","nodeType":"ElementaryTypeName","src":"4983:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":36852,"mutability":"mutable","name":"user","nameLocation":"5011:4:175","nodeType":"VariableDeclaration","scope":36898,"src":"5003:12:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36851,"name":"address","nodeType":"ElementaryTypeName","src":"5003:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36854,"mutability":"mutable","name":"to","nameLocation":"5029:2:175","nodeType":"VariableDeclaration","scope":36898,"src":"5021:10:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36853,"name":"address","nodeType":"ElementaryTypeName","src":"5021:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36856,"mutability":"mutable","name":"reward","nameLocation":"5045:6:175","nodeType":"VariableDeclaration","scope":36898,"src":"5037:14:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36855,"name":"address","nodeType":"ElementaryTypeName","src":"5037:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4946:109:175"},"returnParameters":{"id":36866,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36865,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":36898,"src":"5124:7:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36864,"name":"uint256","nodeType":"ElementaryTypeName","src":"5124:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5123:9:175"},"scope":37578,"src":"4917:403:175","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39306],"body":{"id":36924,"nodeType":"Block","src":"5500:91:175","statements":[{"expression":{"arguments":[{"id":36913,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36902,"src":"5527:6:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"id":36914,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36904,"src":"5535:6:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":36915,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5543:3:175","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5543:10:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":36917,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5555:3:175","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5555:10:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":36919,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5567:3:175","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36920,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5567:10:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36921,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36906,"src":"5579:6:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":36912,"name":"_claimRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37267,"src":"5513:13:175","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_calldata_ptr_$_t_uint256_$_t_address_$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address[] calldata,uint256,address,address,address,address) returns (uint256)"}},"id":36922,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5513:73:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":36911,"id":36923,"nodeType":"Return","src":"5506:80:175"}]},"documentation":{"id":36899,"nodeType":"StructuredDocumentation","src":"5324:34:175","text":"@inheritdoc IRewardsController"},"functionSelector":"57b89883","id":36925,"implemented":true,"kind":"function","modifiers":[],"name":"claimRewardsToSelf","nameLocation":"5370:18:175","nodeType":"FunctionDefinition","overrides":{"id":36908,"nodeType":"OverrideSpecifier","overrides":[],"src":"5473:8:175"},"parameters":{"id":36907,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36902,"mutability":"mutable","name":"assets","nameLocation":"5413:6:175","nodeType":"VariableDeclaration","scope":36925,"src":"5394:25:175","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":36900,"name":"address","nodeType":"ElementaryTypeName","src":"5394:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":36901,"nodeType":"ArrayTypeName","src":"5394:9:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":36904,"mutability":"mutable","name":"amount","nameLocation":"5433:6:175","nodeType":"VariableDeclaration","scope":36925,"src":"5425:14:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36903,"name":"uint256","nodeType":"ElementaryTypeName","src":"5425:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":36906,"mutability":"mutable","name":"reward","nameLocation":"5453:6:175","nodeType":"VariableDeclaration","scope":36925,"src":"5445:14:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36905,"name":"address","nodeType":"ElementaryTypeName","src":"5445:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5388:75:175"},"returnParameters":{"id":36911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36910,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":36925,"src":"5491:7:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36909,"name":"uint256","nodeType":"ElementaryTypeName","src":"5491:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5490:9:175"},"scope":37578,"src":"5361:230:175","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39321],"body":{"id":36960,"nodeType":"Block","src":"5798:123:175","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":36947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36942,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36931,"src":"5812:2:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":36945,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5826:1:175","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":36944,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5818:7:175","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36943,"name":"address","nodeType":"ElementaryTypeName","src":"5818:7:175","typeDescriptions":{}}},"id":36946,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5818:10:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5812:16:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e56414c49445f544f5f41444452455353","id":36948,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5830:20:175","typeDescriptions":{"typeIdentifier":"t_stringliteral_60a6ecd9d15a2e4ae360b5943de5e7d94204c8fa7a9b93d3208a26418697ceb3","typeString":"literal_string \"INVALID_TO_ADDRESS\""},"value":"INVALID_TO_ADDRESS"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_60a6ecd9d15a2e4ae360b5943de5e7d94204c8fa7a9b93d3208a26418697ceb3","typeString":"literal_string \"INVALID_TO_ADDRESS\""}],"id":36941,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5804:7:175","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5804:47:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36950,"nodeType":"ExpressionStatement","src":"5804:47:175"},{"expression":{"arguments":[{"id":36952,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36929,"src":"5881:6:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"expression":{"id":36953,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5889:3:175","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5889:10:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":36955,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5901:3:175","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"5901:10:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36957,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36931,"src":"5913:2:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":36951,"name":"_claimAllRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37444,"src":"5864:16:175","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_calldata_ptr_$_t_address_$_t_address_$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address[] calldata,address,address,address) returns (address[] memory,uint256[] memory)"}},"id":36958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5864:52:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(address[] memory,uint256[] memory)"}},"functionReturnParameters":36940,"id":36959,"nodeType":"Return","src":"5857:59:175"}]},"documentation":{"id":36926,"nodeType":"StructuredDocumentation","src":"5595:34:175","text":"@inheritdoc IRewardsController"},"functionSelector":"bb492bf5","id":36961,"implemented":true,"kind":"function","modifiers":[],"name":"claimAllRewards","nameLocation":"5641:15:175","nodeType":"FunctionDefinition","overrides":{"id":36933,"nodeType":"OverrideSpecifier","overrides":[],"src":"5717:8:175"},"parameters":{"id":36932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36929,"mutability":"mutable","name":"assets","nameLocation":"5681:6:175","nodeType":"VariableDeclaration","scope":36961,"src":"5662:25:175","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":36927,"name":"address","nodeType":"ElementaryTypeName","src":"5662:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":36928,"nodeType":"ArrayTypeName","src":"5662:9:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":36931,"mutability":"mutable","name":"to","nameLocation":"5701:2:175","nodeType":"VariableDeclaration","scope":36961,"src":"5693:10:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36930,"name":"address","nodeType":"ElementaryTypeName","src":"5693:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5656:51:175"},"returnParameters":{"id":36940,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36936,"mutability":"mutable","name":"rewardsList","nameLocation":"5752:11:175","nodeType":"VariableDeclaration","scope":36961,"src":"5735:28:175","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":36934,"name":"address","nodeType":"ElementaryTypeName","src":"5735:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":36935,"nodeType":"ArrayTypeName","src":"5735:9:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":36939,"mutability":"mutable","name":"claimedAmounts","nameLocation":"5782:14:175","nodeType":"VariableDeclaration","scope":36961,"src":"5765:31:175","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":36937,"name":"uint256","nodeType":"ElementaryTypeName","src":"5765:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36938,"nodeType":"ArrayTypeName","src":"5765:9:175","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"5734:63:175"},"scope":37578,"src":"5632:289:175","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39338],"body":{"id":37012,"nodeType":"Block","src":"6213:174:175","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":36990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36985,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36967,"src":"6227:4:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":36988,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6243:1:175","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":36987,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6235:7:175","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36986,"name":"address","nodeType":"ElementaryTypeName","src":"6235:7:175","typeDescriptions":{}}},"id":36989,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6235:10:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6227:18:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e56414c49445f555345525f41444452455353","id":36991,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6247:22:175","typeDescriptions":{"typeIdentifier":"t_stringliteral_4058a4fa702d397682b400d1a2d7894f822738ac481455440aeb37a04a780eca","typeString":"literal_string \"INVALID_USER_ADDRESS\""},"value":"INVALID_USER_ADDRESS"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4058a4fa702d397682b400d1a2d7894f822738ac481455440aeb37a04a780eca","typeString":"literal_string \"INVALID_USER_ADDRESS\""}],"id":36984,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6219:7:175","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6219:51:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36993,"nodeType":"ExpressionStatement","src":"6219:51:175"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":37000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36995,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36969,"src":"6284:2:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":36998,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6298:1:175","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":36997,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6290:7:175","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36996,"name":"address","nodeType":"ElementaryTypeName","src":"6290:7:175","typeDescriptions":{}}},"id":36999,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6290:10:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6284:16:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e56414c49445f544f5f41444452455353","id":37001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6302:20:175","typeDescriptions":{"typeIdentifier":"t_stringliteral_60a6ecd9d15a2e4ae360b5943de5e7d94204c8fa7a9b93d3208a26418697ceb3","typeString":"literal_string \"INVALID_TO_ADDRESS\""},"value":"INVALID_TO_ADDRESS"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_60a6ecd9d15a2e4ae360b5943de5e7d94204c8fa7a9b93d3208a26418697ceb3","typeString":"literal_string \"INVALID_TO_ADDRESS\""}],"id":36994,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6276:7:175","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":37002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6276:47:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37003,"nodeType":"ExpressionStatement","src":"6276:47:175"},{"expression":{"arguments":[{"id":37005,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36965,"src":"6353:6:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"expression":{"id":37006,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6361:3:175","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":37007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"6361:10:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37008,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36967,"src":"6373:4:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37009,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36969,"src":"6379:2:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":37004,"name":"_claimAllRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37444,"src":"6336:16:175","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_calldata_ptr_$_t_address_$_t_address_$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address[] calldata,address,address,address) returns (address[] memory,uint256[] memory)"}},"id":37010,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6336:46:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(address[] memory,uint256[] memory)"}},"functionReturnParameters":36983,"id":37011,"nodeType":"Return","src":"6329:53:175"}]},"documentation":{"id":36962,"nodeType":"StructuredDocumentation","src":"5925:34:175","text":"@inheritdoc IRewardsController"},"functionSelector":"9ff55db9","id":37013,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"expression":{"id":36973,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6117:3:175","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":36974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"6117:10:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36975,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36967,"src":"6129:4:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":36976,"kind":"modifierInvocation","modifierName":{"id":36972,"name":"onlyAuthorizedClaimers","nodeType":"IdentifierPath","referencedDeclaration":36611,"src":"6094:22:175"},"nodeType":"ModifierInvocation","src":"6094:40:175"}],"name":"claimAllRewardsOnBehalf","nameLocation":"5971:23:175","nodeType":"FunctionDefinition","overrides":{"id":36971,"nodeType":"OverrideSpecifier","overrides":[],"src":"6081:8:175"},"parameters":{"id":36970,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36965,"mutability":"mutable","name":"assets","nameLocation":"6019:6:175","nodeType":"VariableDeclaration","scope":37013,"src":"6000:25:175","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":36963,"name":"address","nodeType":"ElementaryTypeName","src":"6000:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":36964,"nodeType":"ArrayTypeName","src":"6000:9:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":36967,"mutability":"mutable","name":"user","nameLocation":"6039:4:175","nodeType":"VariableDeclaration","scope":37013,"src":"6031:12:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36966,"name":"address","nodeType":"ElementaryTypeName","src":"6031:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36969,"mutability":"mutable","name":"to","nameLocation":"6057:2:175","nodeType":"VariableDeclaration","scope":37013,"src":"6049:10:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36968,"name":"address","nodeType":"ElementaryTypeName","src":"6049:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5994:69:175"},"returnParameters":{"id":36983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36979,"mutability":"mutable","name":"rewardsList","nameLocation":"6165:11:175","nodeType":"VariableDeclaration","scope":37013,"src":"6148:28:175","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":36977,"name":"address","nodeType":"ElementaryTypeName","src":"6148:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":36978,"nodeType":"ArrayTypeName","src":"6148:9:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":36982,"mutability":"mutable","name":"claimedAmounts","nameLocation":"6195:14:175","nodeType":"VariableDeclaration","scope":37013,"src":"6178:31:175","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":36980,"name":"uint256","nodeType":"ElementaryTypeName","src":"6178:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36981,"nodeType":"ArrayTypeName","src":"6178:9:175","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"6147:63:175"},"scope":37578,"src":"5962:425:175","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39351],"body":{"id":37037,"nodeType":"Block","src":"6584:78:175","statements":[{"expression":{"arguments":[{"id":37028,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37017,"src":"6614:6:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"expression":{"id":37029,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6622:3:175","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":37030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"6622:10:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":37031,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6634:3:175","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":37032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"6634:10:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":37033,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6646:3:175","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":37034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"6646:10:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":37027,"name":"_claimAllRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37444,"src":"6597:16:175","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_address_$dyn_calldata_ptr_$_t_address_$_t_address_$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address[] calldata,address,address,address) returns (address[] memory,uint256[] memory)"}},"id":37035,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6597:60:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(address[] memory,uint256[] memory)"}},"functionReturnParameters":37026,"id":37036,"nodeType":"Return","src":"6590:67:175"}]},"documentation":{"id":37014,"nodeType":"StructuredDocumentation","src":"6391:34:175","text":"@inheritdoc IRewardsController"},"functionSelector":"bf90f63a","id":37038,"implemented":true,"kind":"function","modifiers":[],"name":"claimAllRewardsToSelf","nameLocation":"6437:21:175","nodeType":"FunctionDefinition","overrides":{"id":37019,"nodeType":"OverrideSpecifier","overrides":[],"src":"6503:8:175"},"parameters":{"id":37018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37017,"mutability":"mutable","name":"assets","nameLocation":"6483:6:175","nodeType":"VariableDeclaration","scope":37038,"src":"6464:25:175","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":37015,"name":"address","nodeType":"ElementaryTypeName","src":"6464:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37016,"nodeType":"ArrayTypeName","src":"6464:9:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"6458:35:175"},"returnParameters":{"id":37026,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37022,"mutability":"mutable","name":"rewardsList","nameLocation":"6538:11:175","nodeType":"VariableDeclaration","scope":37038,"src":"6521:28:175","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":37020,"name":"address","nodeType":"ElementaryTypeName","src":"6521:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37021,"nodeType":"ArrayTypeName","src":"6521:9:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":37025,"mutability":"mutable","name":"claimedAmounts","nameLocation":"6568:14:175","nodeType":"VariableDeclaration","scope":37038,"src":"6551:31:175","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":37023,"name":"uint256","nodeType":"ElementaryTypeName","src":"6551:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37024,"nodeType":"ArrayTypeName","src":"6551:9:175","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"6520:63:175"},"scope":37578,"src":"6428:234:175","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39201],"body":{"id":37060,"nodeType":"Block","src":"6791:80:175","statements":[{"expression":{"id":37053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":37049,"name":"_authorizedClaimers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36584,"src":"6797:19:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_address_$","typeString":"mapping(address => address)"}},"id":37051,"indexExpression":{"id":37050,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37041,"src":"6817:4:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6797:25:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":37052,"name":"caller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37043,"src":"6825:6:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6797:34:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37054,"nodeType":"ExpressionStatement","src":"6797:34:175"},{"eventCall":{"arguments":[{"id":37056,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37041,"src":"6853:4:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37057,"name":"caller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37043,"src":"6859:6:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":37055,"name":"ClaimerSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39166,"src":"6842:10:175","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":37058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6842:24:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37059,"nodeType":"EmitStatement","src":"6837:29:175"}]},"documentation":{"id":37039,"nodeType":"StructuredDocumentation","src":"6666:34:175","text":"@inheritdoc IRewardsController"},"functionSelector":"f5cf673b","id":37061,"implemented":true,"kind":"function","modifiers":[{"id":37047,"kind":"modifierInvocation","modifierName":{"id":37046,"name":"onlyEmissionManager","nodeType":"IdentifierPath","referencedDeclaration":37627,"src":"6771:19:175"},"nodeType":"ModifierInvocation","src":"6771:19:175"}],"name":"setClaimer","nameLocation":"6712:10:175","nodeType":"FunctionDefinition","overrides":{"id":37045,"nodeType":"OverrideSpecifier","overrides":[],"src":"6762:8:175"},"parameters":{"id":37044,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37041,"mutability":"mutable","name":"user","nameLocation":"6731:4:175","nodeType":"VariableDeclaration","scope":37061,"src":"6723:12:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37040,"name":"address","nodeType":"ElementaryTypeName","src":"6723:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37043,"mutability":"mutable","name":"caller","nameLocation":"6745:6:175","nodeType":"VariableDeclaration","scope":37061,"src":"6737:14:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37042,"name":"address","nodeType":"ElementaryTypeName","src":"6737:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6722:30:175"},"returnParameters":{"id":37048,"nodeType":"ParameterList","parameters":[],"src":"6791:0:175"},"scope":37578,"src":"6703:168:175","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39002],"body":{"id":37128,"nodeType":"Block","src":"7388:378:175","statements":[{"expression":{"id":37083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":37075,"name":"userAssetBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37073,"src":"7394:17:175","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":37080,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37065,"src":"7454:6:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":37081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"7454:13:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37079,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"7414:39:175","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct RewardsDataTypes.UserAssetBalance memory[] memory)"},"typeName":{"baseType":{"id":37077,"nodeType":"UserDefinedTypeName","pathNode":{"id":37076,"name":"RewardsDataTypes.UserAssetBalance","nodeType":"IdentifierPath","referencedDeclaration":39673,"src":"7418:33:175"},"referencedDeclaration":39673,"src":"7418:33:175","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_storage_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance"}},"id":37078,"nodeType":"ArrayTypeName","src":"7418:35:175","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_storage_$dyn_storage_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance[]"}}},"id":37082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7414:54:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}},"src":"7394:74:175","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}},"id":37084,"nodeType":"ExpressionStatement","src":"7394:74:175"},{"body":{"id":37124,"nodeType":"Block","src":"7518:214:175","statements":[{"expression":{"id":37103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":37096,"name":"userAssetBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37073,"src":"7526:17:175","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}},"id":37098,"indexExpression":{"id":37097,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37086,"src":"7544:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7526:20:175","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory"}},"id":37099,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39668,"src":"7526:26:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":37100,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37065,"src":"7555:6:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":37102,"indexExpression":{"id":37101,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37086,"src":"7562:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7555:9:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7526:38:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37104,"nodeType":"ExpressionStatement","src":"7526:38:175"},{"expression":{"id":37122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"baseExpression":{"id":37105,"name":"userAssetBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37073,"src":"7573:17:175","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}},"id":37107,"indexExpression":{"id":37106,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37086,"src":"7591:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7573:20:175","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory"}},"id":37108,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"userBalance","nodeType":"MemberAccess","referencedDeclaration":39670,"src":"7573:32:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"baseExpression":{"id":37109,"name":"userAssetBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37073,"src":"7607:17:175","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}},"id":37111,"indexExpression":{"id":37110,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37086,"src":"7625:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7607:20:175","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory"}},"id":37112,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":39672,"src":"7607:32:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":37113,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"7572:68:175","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":37120,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37067,"src":"7720:4:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"baseExpression":{"id":37115,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37065,"src":"7672:6:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":37117,"indexExpression":{"id":37116,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37086,"src":"7679:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7672:9:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":37114,"name":"IScaledBalanceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5975,"src":"7643:19:175","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IScaledBalanceToken_$5975_$","typeString":"type(contract IScaledBalanceToken)"}},"id":37118,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7643:46:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IScaledBalanceToken_$5975","typeString":"contract IScaledBalanceToken"}},"id":37119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"getScaledUserBalanceAndSupply","nodeType":"MemberAccess","referencedDeclaration":5960,"src":"7643:76:175","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address) view external returns (uint256,uint256)"}},"id":37121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7643:82:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"7572:153:175","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37123,"nodeType":"ExpressionStatement","src":"7572:153:175"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37089,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37086,"src":"7494:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":37090,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37065,"src":"7498:6:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":37091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"7498:13:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7494:17:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37125,"initializationExpression":{"assignments":[37086],"declarations":[{"constant":false,"id":37086,"mutability":"mutable","name":"i","nameLocation":"7487:1:175","nodeType":"VariableDeclaration","scope":37125,"src":"7479:9:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37085,"name":"uint256","nodeType":"ElementaryTypeName","src":"7479:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37088,"initialValue":{"hexValue":"30","id":37087,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7491:1:175","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"7479:13:175"},"loopExpression":{"expression":{"id":37094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"7513:3:175","subExpression":{"id":37093,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37086,"src":"7513:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37095,"nodeType":"ExpressionStatement","src":"7513:3:175"},"nodeType":"ForStatement","src":"7474:258:175"},{"expression":{"id":37126,"name":"userAssetBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37073,"src":"7744:17:175","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}},"functionReturnParameters":37074,"id":37127,"nodeType":"Return","src":"7737:24:175"}]},"documentation":{"id":37062,"nodeType":"StructuredDocumentation","src":"6875:332:175","text":" @dev Get user balances and total supply of all the assets specified by the assets parameter\n @param assets List of assets to retrieve user balance and total supply\n @param user Address of the user\n @return userAssetBalances contains a list of structs with user balance and total supply of the given assets"},"id":37129,"implemented":true,"kind":"function","modifiers":[],"name":"_getUserAssetBalances","nameLocation":"7219:21:175","nodeType":"FunctionDefinition","overrides":{"id":37069,"nodeType":"OverrideSpecifier","overrides":[],"src":"7308:8:175"},"parameters":{"id":37068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37065,"mutability":"mutable","name":"assets","nameLocation":"7265:6:175","nodeType":"VariableDeclaration","scope":37129,"src":"7246:25:175","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":37063,"name":"address","nodeType":"ElementaryTypeName","src":"7246:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37064,"nodeType":"ArrayTypeName","src":"7246:9:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":37067,"mutability":"mutable","name":"user","nameLocation":"7285:4:175","nodeType":"VariableDeclaration","scope":37129,"src":"7277:12:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37066,"name":"address","nodeType":"ElementaryTypeName","src":"7277:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7240:53:175"},"returnParameters":{"id":37074,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37073,"mutability":"mutable","name":"userAssetBalances","nameLocation":"7369:17:175","nodeType":"VariableDeclaration","scope":37129,"src":"7326:60:175","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance[]"},"typeName":{"baseType":{"id":37071,"nodeType":"UserDefinedTypeName","pathNode":{"id":37070,"name":"RewardsDataTypes.UserAssetBalance","nodeType":"IdentifierPath","referencedDeclaration":39673,"src":"7326:33:175"},"referencedDeclaration":39673,"src":"7326:33:175","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_storage_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance"}},"id":37072,"nodeType":"ArrayTypeName","src":"7326:35:175","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_storage_$dyn_storage_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance[]"}},"visibility":"internal"}],"src":"7325:62:175"},"scope":37578,"src":"7210:556:175","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":37266,"nodeType":"Block","src":"8488:825:175","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37148,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37135,"src":"8498:6:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":37149,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8508:1:175","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8498:11:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37154,"nodeType":"IfStatement","src":"8494:40:175","trueBody":{"id":37153,"nodeType":"Block","src":"8511:23:175","statements":[{"expression":{"hexValue":"30","id":37151,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8526:1:175","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":37147,"id":37152,"nodeType":"Return","src":"8519:8:175"}]}},{"assignments":[37156],"declarations":[{"constant":false,"id":37156,"mutability":"mutable","name":"totalRewards","nameLocation":"8547:12:175","nodeType":"VariableDeclaration","scope":37266,"src":"8539:20:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37155,"name":"uint256","nodeType":"ElementaryTypeName","src":"8539:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37157,"nodeType":"VariableDeclarationStatement","src":"8539:20:175"},{"expression":{"arguments":[{"id":37159,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37139,"src":"8586:4:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":37161,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37133,"src":"8614:6:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"id":37162,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37139,"src":"8622:4:175","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":37160,"name":"_getUserAssetBalances","nodeType":"Identifier","overloadedDeclarations":[37129],"referencedDeclaration":37129,"src":"8592:21:175","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_address_$dyn_calldata_ptr_$_t_address_$returns$_t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr_$","typeString":"function (address[] calldata,address) view returns (struct RewardsDataTypes.UserAssetBalance memory[] memory)"}},"id":37163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8592:35:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}],"id":37158,"name":"_updateDataMultiple","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38734,"src":"8566:19:175","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr_$returns$__$","typeString":"function (address,struct RewardsDataTypes.UserAssetBalance memory[] memory)"}},"id":37164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8566:62:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37165,"nodeType":"ExpressionStatement","src":"8566:62:175"},{"body":{"id":37241,"nodeType":"Block","src":"8678:438:175","statements":[{"assignments":[37178],"declarations":[{"constant":false,"id":37178,"mutability":"mutable","name":"asset","nameLocation":"8694:5:175","nodeType":"VariableDeclaration","scope":37241,"src":"8686:13:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37177,"name":"address","nodeType":"ElementaryTypeName","src":"8686:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":37182,"initialValue":{"baseExpression":{"id":37179,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37133,"src":"8702:6:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":37181,"indexExpression":{"id":37180,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37167,"src":"8709:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8702:9:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"8686:25:175"},{"expression":{"id":37194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":37183,"name":"totalRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37156,"src":"8719:12:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"expression":{"baseExpression":{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":37184,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"8735:7:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":37186,"indexExpression":{"id":37185,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37178,"src":"8743:5:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8735:14:175","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":37187,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"8735:22:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":37189,"indexExpression":{"id":37188,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37143,"src":"8758:6:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8735:30:175","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"id":37190,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"usersData","nodeType":"MemberAccess","referencedDeclaration":39691,"src":"8735:40:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserData_$39678_storage_$","typeString":"mapping(address => struct RewardsDataTypes.UserData storage ref)"}},"id":37192,"indexExpression":{"id":37191,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37139,"src":"8776:4:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8735:46:175","typeDescriptions":{"typeIdentifier":"t_struct$_UserData_$39678_storage","typeString":"struct RewardsDataTypes.UserData storage ref"}},"id":37193,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"accrued","nodeType":"MemberAccess","referencedDeclaration":39677,"src":"8735:54:175","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"8719:70:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37195,"nodeType":"ExpressionStatement","src":"8719:70:175"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37196,"name":"totalRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37156,"src":"8802:12:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":37197,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37135,"src":"8818:6:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8802:22:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":37239,"nodeType":"Block","src":"8909:201:175","statements":[{"assignments":[37214],"declarations":[{"constant":false,"id":37214,"mutability":"mutable","name":"difference","nameLocation":"8927:10:175","nodeType":"VariableDeclaration","scope":37239,"src":"8919:18:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37213,"name":"uint256","nodeType":"ElementaryTypeName","src":"8919:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37218,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37215,"name":"totalRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37156,"src":"8940:12:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":37216,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37135,"src":"8955:6:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8940:21:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8919:42:175"},{"expression":{"id":37221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":37219,"name":"totalRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37156,"src":"8971:12:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":37220,"name":"difference","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37214,"src":"8987:10:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8971:26:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37222,"nodeType":"ExpressionStatement","src":"8971:26:175"},{"expression":{"id":37236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":37223,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"9007:7:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":37225,"indexExpression":{"id":37224,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37178,"src":"9015:5:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9007:14:175","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":37226,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"9007:22:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":37228,"indexExpression":{"id":37227,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37143,"src":"9030:6:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9007:30:175","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"id":37229,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"usersData","nodeType":"MemberAccess","referencedDeclaration":39691,"src":"9007:40:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserData_$39678_storage_$","typeString":"mapping(address => struct RewardsDataTypes.UserData storage ref)"}},"id":37231,"indexExpression":{"id":37230,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37139,"src":"9048:4:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9007:46:175","typeDescriptions":{"typeIdentifier":"t_struct$_UserData_$39678_storage","typeString":"struct RewardsDataTypes.UserData storage ref"}},"id":37232,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"accrued","nodeType":"MemberAccess","referencedDeclaration":39677,"src":"9007:54:175","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":37233,"name":"difference","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37214,"src":"9064:10:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"9064:20:175","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":37235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9064:22:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"9007:79:175","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":37237,"nodeType":"ExpressionStatement","src":"9007:79:175"},{"id":37238,"nodeType":"Break","src":"9096:5:175"}]},"id":37240,"nodeType":"IfStatement","src":"8798:312:175","trueBody":{"id":37212,"nodeType":"Block","src":"8826:77:175","statements":[{"expression":{"id":37210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":37199,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"8836:7:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":37201,"indexExpression":{"id":37200,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37178,"src":"8844:5:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8836:14:175","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":37202,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"8836:22:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":37204,"indexExpression":{"id":37203,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37143,"src":"8859:6:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8836:30:175","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"id":37205,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"usersData","nodeType":"MemberAccess","referencedDeclaration":39691,"src":"8836:40:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserData_$39678_storage_$","typeString":"mapping(address => struct RewardsDataTypes.UserData storage ref)"}},"id":37207,"indexExpression":{"id":37206,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37139,"src":"8877:4:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8836:46:175","typeDescriptions":{"typeIdentifier":"t_struct$_UserData_$39678_storage","typeString":"struct RewardsDataTypes.UserData storage ref"}},"id":37208,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"accrued","nodeType":"MemberAccess","referencedDeclaration":39677,"src":"8836:54:175","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":37209,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8893:1:175","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8836:58:175","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":37211,"nodeType":"ExpressionStatement","src":"8836:58:175"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37170,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37167,"src":"8654:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":37171,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37133,"src":"8658:6:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":37172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"8658:13:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8654:17:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37242,"initializationExpression":{"assignments":[37167],"declarations":[{"constant":false,"id":37167,"mutability":"mutable","name":"i","nameLocation":"8647:1:175","nodeType":"VariableDeclaration","scope":37242,"src":"8639:9:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37166,"name":"uint256","nodeType":"ElementaryTypeName","src":"8639:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37169,"initialValue":{"hexValue":"30","id":37168,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8651:1:175","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8639:13:175"},"loopExpression":{"expression":{"id":37175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8673:3:175","subExpression":{"id":37174,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37167,"src":"8673:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37176,"nodeType":"ExpressionStatement","src":"8673:3:175"},"nodeType":"ForStatement","src":"8634:482:175"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37243,"name":"totalRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37156,"src":"9126:12:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":37244,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9142:1:175","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9126:17:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37249,"nodeType":"IfStatement","src":"9122:46:175","trueBody":{"id":37248,"nodeType":"Block","src":"9145:23:175","statements":[{"expression":{"hexValue":"30","id":37246,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9160:1:175","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":37147,"id":37247,"nodeType":"Return","src":"9153:8:175"}]}},{"expression":{"arguments":[{"id":37251,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37141,"src":"9191:2:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37252,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37143,"src":"9195:6:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37253,"name":"totalRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37156,"src":"9203:12:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37250,"name":"_transferRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37478,"src":"9174:16:175","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":37254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9174:42:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37255,"nodeType":"ExpressionStatement","src":"9174:42:175"},{"eventCall":{"arguments":[{"id":37257,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37139,"src":"9242:4:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37258,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37143,"src":"9248:6:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37259,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37141,"src":"9256:2:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37260,"name":"claimer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37137,"src":"9260:7:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37261,"name":"totalRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37156,"src":"9269:12:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37256,"name":"RewardsClaimed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39179,"src":"9227:14:175","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,address,uint256)"}},"id":37262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9227:55:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37263,"nodeType":"EmitStatement","src":"9222:60:175"},{"expression":{"id":37264,"name":"totalRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37156,"src":"9296:12:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":37147,"id":37265,"nodeType":"Return","src":"9289:19:175"}]},"documentation":{"id":37130,"nodeType":"StructuredDocumentation","src":"7770:535:175","text":" @dev Claims one type of reward for a user on behalf, on all the assets of the pool, accumulating the pending rewards.\n @param assets List of assets to check eligible distributions before claiming rewards\n @param amount Amount of rewards to claim\n @param claimer Address of the claimer who claims rewards on behalf of user\n @param user Address to check and claim rewards\n @param to Address that will be receiving the rewards\n @param reward Address of the reward token\n @return Rewards claimed*"},"id":37267,"implemented":true,"kind":"function","modifiers":[],"name":"_claimRewards","nameLocation":"8317:13:175","nodeType":"FunctionDefinition","parameters":{"id":37144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37133,"mutability":"mutable","name":"assets","nameLocation":"8355:6:175","nodeType":"VariableDeclaration","scope":37267,"src":"8336:25:175","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":37131,"name":"address","nodeType":"ElementaryTypeName","src":"8336:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37132,"nodeType":"ArrayTypeName","src":"8336:9:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":37135,"mutability":"mutable","name":"amount","nameLocation":"8375:6:175","nodeType":"VariableDeclaration","scope":37267,"src":"8367:14:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37134,"name":"uint256","nodeType":"ElementaryTypeName","src":"8367:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":37137,"mutability":"mutable","name":"claimer","nameLocation":"8395:7:175","nodeType":"VariableDeclaration","scope":37267,"src":"8387:15:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37136,"name":"address","nodeType":"ElementaryTypeName","src":"8387:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37139,"mutability":"mutable","name":"user","nameLocation":"8416:4:175","nodeType":"VariableDeclaration","scope":37267,"src":"8408:12:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37138,"name":"address","nodeType":"ElementaryTypeName","src":"8408:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37141,"mutability":"mutable","name":"to","nameLocation":"8434:2:175","nodeType":"VariableDeclaration","scope":37267,"src":"8426:10:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37140,"name":"address","nodeType":"ElementaryTypeName","src":"8426:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37143,"mutability":"mutable","name":"reward","nameLocation":"8450:6:175","nodeType":"VariableDeclaration","scope":37267,"src":"8442:14:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37142,"name":"address","nodeType":"ElementaryTypeName","src":"8442:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8330:130:175"},"returnParameters":{"id":37147,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37146,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37267,"src":"8479:7:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37145,"name":"uint256","nodeType":"ElementaryTypeName","src":"8479:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8478:9:175"},"scope":37578,"src":"8308:1005:175","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":37443,"nodeType":"Block","src":"10048:993:175","statements":[{"assignments":[37287],"declarations":[{"constant":false,"id":37287,"mutability":"mutable","name":"rewardsListLength","nameLocation":"10062:17:175","nodeType":"VariableDeclaration","scope":37443,"src":"10054:25:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37286,"name":"uint256","nodeType":"ElementaryTypeName","src":"10054:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37290,"initialValue":{"expression":{"id":37288,"name":"_rewardsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37612,"src":"10082:12:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":37289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"10082:19:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10054:47:175"},{"expression":{"id":37297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":37291,"name":"rewardsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37281,"src":"10107:11:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":37295,"name":"rewardsListLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37287,"src":"10135:17:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37294,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"10121:13:175","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":37292,"name":"address","nodeType":"ElementaryTypeName","src":"10125:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37293,"nodeType":"ArrayTypeName","src":"10125:9:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":37296,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10121:32:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"10107:46:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":37298,"nodeType":"ExpressionStatement","src":"10107:46:175"},{"expression":{"id":37305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":37299,"name":"claimedAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37284,"src":"10159:14:175","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":37303,"name":"rewardsListLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37287,"src":"10190:17:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37302,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"10176:13:175","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":37300,"name":"uint256","nodeType":"ElementaryTypeName","src":"10180:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37301,"nodeType":"ArrayTypeName","src":"10180:9:175","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":37304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10176:32:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"10159:49:175","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37306,"nodeType":"ExpressionStatement","src":"10159:49:175"},{"expression":{"arguments":[{"id":37308,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37275,"src":"10235:4:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":37310,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37271,"src":"10263:6:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"id":37311,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37275,"src":"10271:4:175","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":37309,"name":"_getUserAssetBalances","nodeType":"Identifier","overloadedDeclarations":[37129],"referencedDeclaration":37129,"src":"10241:21:175","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_address_$dyn_calldata_ptr_$_t_address_$returns$_t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr_$","typeString":"function (address[] calldata,address) view returns (struct RewardsDataTypes.UserAssetBalance memory[] memory)"}},"id":37312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10241:35:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}],"id":37307,"name":"_updateDataMultiple","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38734,"src":"10215:19:175","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr_$returns$__$","typeString":"function (address,struct RewardsDataTypes.UserAssetBalance memory[] memory)"}},"id":37313,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10215:62:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37314,"nodeType":"ExpressionStatement","src":"10215:62:175"},{"body":{"id":37403,"nodeType":"Block","src":"10328:463:175","statements":[{"assignments":[37327],"declarations":[{"constant":false,"id":37327,"mutability":"mutable","name":"asset","nameLocation":"10344:5:175","nodeType":"VariableDeclaration","scope":37403,"src":"10336:13:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37326,"name":"address","nodeType":"ElementaryTypeName","src":"10336:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":37331,"initialValue":{"baseExpression":{"id":37328,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37271,"src":"10352:6:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":37330,"indexExpression":{"id":37329,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37316,"src":"10359:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10352:9:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"10336:25:175"},{"body":{"id":37401,"nodeType":"Block","src":"10417:368:175","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":37349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":37342,"name":"rewardsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37281,"src":"10431:11:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":37344,"indexExpression":{"id":37343,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37333,"src":"10443:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10431:14:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":37347,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10457:1:175","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":37346,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10449:7:175","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":37345,"name":"address","nodeType":"ElementaryTypeName","src":"10449:7:175","typeDescriptions":{}}},"id":37348,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10449:10:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10431:28:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37359,"nodeType":"IfStatement","src":"10427:89:175","trueBody":{"id":37358,"nodeType":"Block","src":"10461:55:175","statements":[{"expression":{"id":37356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":37350,"name":"rewardsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37281,"src":"10473:11:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":37352,"indexExpression":{"id":37351,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37333,"src":"10485:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10473:14:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":37353,"name":"_rewardsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37612,"src":"10490:12:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":37355,"indexExpression":{"id":37354,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37333,"src":"10503:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10490:15:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10473:32:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37357,"nodeType":"ExpressionStatement","src":"10473:32:175"}]}},{"assignments":[37361],"declarations":[{"constant":false,"id":37361,"mutability":"mutable","name":"rewardAmount","nameLocation":"10533:12:175","nodeType":"VariableDeclaration","scope":37401,"src":"10525:20:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37360,"name":"uint256","nodeType":"ElementaryTypeName","src":"10525:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37374,"initialValue":{"expression":{"baseExpression":{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":37362,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"10548:7:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":37364,"indexExpression":{"id":37363,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37327,"src":"10556:5:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10548:14:175","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":37365,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"10548:22:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":37369,"indexExpression":{"baseExpression":{"id":37366,"name":"rewardsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37281,"src":"10571:11:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":37368,"indexExpression":{"id":37367,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37333,"src":"10583:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10571:14:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10548:38:175","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"id":37370,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"usersData","nodeType":"MemberAccess","referencedDeclaration":39691,"src":"10548:48:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserData_$39678_storage_$","typeString":"mapping(address => struct RewardsDataTypes.UserData storage ref)"}},"id":37372,"indexExpression":{"id":37371,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37275,"src":"10597:4:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10548:54:175","typeDescriptions":{"typeIdentifier":"t_struct$_UserData_$39678_storage","typeString":"struct RewardsDataTypes.UserData storage ref"}},"id":37373,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"accrued","nodeType":"MemberAccess","referencedDeclaration":39677,"src":"10548:62:175","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"10525:85:175"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37375,"name":"rewardAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37361,"src":"10624:12:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":37376,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10640:1:175","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10624:17:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37400,"nodeType":"IfStatement","src":"10620:157:175","trueBody":{"id":37399,"nodeType":"Block","src":"10643:134:175","statements":[{"expression":{"id":37382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":37378,"name":"claimedAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37284,"src":"10655:14:175","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37380,"indexExpression":{"id":37379,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37333,"src":"10670:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10655:17:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":37381,"name":"rewardAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37361,"src":"10676:12:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10655:33:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37383,"nodeType":"ExpressionStatement","src":"10655:33:175"},{"expression":{"id":37397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":37384,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"10700:7:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":37386,"indexExpression":{"id":37385,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37327,"src":"10708:5:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10700:14:175","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":37387,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"10700:22:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":37391,"indexExpression":{"baseExpression":{"id":37388,"name":"rewardsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37281,"src":"10723:11:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":37390,"indexExpression":{"id":37389,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37333,"src":"10735:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10723:14:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10700:38:175","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"id":37392,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"usersData","nodeType":"MemberAccess","referencedDeclaration":39691,"src":"10700:48:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserData_$39678_storage_$","typeString":"mapping(address => struct RewardsDataTypes.UserData storage ref)"}},"id":37394,"indexExpression":{"id":37393,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37275,"src":"10749:4:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10700:54:175","typeDescriptions":{"typeIdentifier":"t_struct$_UserData_$39678_storage","typeString":"struct RewardsDataTypes.UserData storage ref"}},"id":37395,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"accrued","nodeType":"MemberAccess","referencedDeclaration":39677,"src":"10700:62:175","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":37396,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10765:1:175","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10700:66:175","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":37398,"nodeType":"ExpressionStatement","src":"10700:66:175"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37336,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37333,"src":"10389:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":37337,"name":"rewardsListLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37287,"src":"10393:17:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10389:21:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37402,"initializationExpression":{"assignments":[37333],"declarations":[{"constant":false,"id":37333,"mutability":"mutable","name":"j","nameLocation":"10382:1:175","nodeType":"VariableDeclaration","scope":37402,"src":"10374:9:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37332,"name":"uint256","nodeType":"ElementaryTypeName","src":"10374:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37335,"initialValue":{"hexValue":"30","id":37334,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10386:1:175","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10374:13:175"},"loopExpression":{"expression":{"id":37340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"10412:3:175","subExpression":{"id":37339,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37333,"src":"10412:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37341,"nodeType":"ExpressionStatement","src":"10412:3:175"},"nodeType":"ForStatement","src":"10369:416:175"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37319,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37316,"src":"10304:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":37320,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37271,"src":"10308:6:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":37321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"10308:13:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10304:17:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37404,"initializationExpression":{"assignments":[37316],"declarations":[{"constant":false,"id":37316,"mutability":"mutable","name":"i","nameLocation":"10297:1:175","nodeType":"VariableDeclaration","scope":37404,"src":"10289:9:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37315,"name":"uint256","nodeType":"ElementaryTypeName","src":"10289:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37318,"initialValue":{"hexValue":"30","id":37317,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10301:1:175","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10289:13:175"},"loopExpression":{"expression":{"id":37324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"10323:3:175","subExpression":{"id":37323,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37316,"src":"10323:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37325,"nodeType":"ExpressionStatement","src":"10323:3:175"},"nodeType":"ForStatement","src":"10284:507:175"},{"body":{"id":37437,"nodeType":"Block","src":"10844:151:175","statements":[{"expression":{"arguments":[{"id":37416,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37277,"src":"10869:2:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":37417,"name":"rewardsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37281,"src":"10873:11:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":37419,"indexExpression":{"id":37418,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37406,"src":"10885:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10873:14:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":37420,"name":"claimedAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37284,"src":"10889:14:175","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37422,"indexExpression":{"id":37421,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37406,"src":"10904:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10889:17:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37415,"name":"_transferRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37478,"src":"10852:16:175","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":37423,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10852:55:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37424,"nodeType":"ExpressionStatement","src":"10852:55:175"},{"eventCall":{"arguments":[{"id":37426,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37275,"src":"10935:4:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":37427,"name":"rewardsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37281,"src":"10941:11:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":37429,"indexExpression":{"id":37428,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37406,"src":"10953:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10941:14:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37430,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37277,"src":"10957:2:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37431,"name":"claimer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37273,"src":"10961:7:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":37432,"name":"claimedAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37284,"src":"10970:14:175","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37434,"indexExpression":{"id":37433,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37406,"src":"10985:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10970:17:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37425,"name":"RewardsClaimed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39179,"src":"10920:14:175","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,address,uint256)"}},"id":37435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10920:68:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37436,"nodeType":"EmitStatement","src":"10915:73:175"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37409,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37406,"src":"10816:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":37410,"name":"rewardsListLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37287,"src":"10820:17:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10816:21:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37438,"initializationExpression":{"assignments":[37406],"declarations":[{"constant":false,"id":37406,"mutability":"mutable","name":"i","nameLocation":"10809:1:175","nodeType":"VariableDeclaration","scope":37438,"src":"10801:9:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37405,"name":"uint256","nodeType":"ElementaryTypeName","src":"10801:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37408,"initialValue":{"hexValue":"30","id":37407,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10813:1:175","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10801:13:175"},"loopExpression":{"expression":{"id":37413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"10839:3:175","subExpression":{"id":37412,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37406,"src":"10839:1:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37414,"nodeType":"ExpressionStatement","src":"10839:3:175"},"nodeType":"ForStatement","src":"10796:199:175"},{"expression":{"components":[{"id":37439,"name":"rewardsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37281,"src":"11008:11:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"id":37440,"name":"claimedAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37284,"src":"11021:14:175","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":37441,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11007:29:175","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(address[] memory,uint256[] memory)"}},"functionReturnParameters":37285,"id":37442,"nodeType":"Return","src":"11000:36:175"}]},"documentation":{"id":37268,"nodeType":"StructuredDocumentation","src":"9317:531:175","text":" @dev Claims one type of reward for a user on behalf, on all the assets of the pool, accumulating the pending rewards.\n @param assets List of assets to check eligible distributions before claiming rewards\n @param claimer Address of the claimer on behalf of user\n @param user Address to check and claim rewards\n @param to Address that will be receiving the rewards\n @return\n   rewardsList List of reward addresses\n   claimedAmount List of claimed amounts, follows \"rewardsList\" items order*"},"id":37444,"implemented":true,"kind":"function","modifiers":[],"name":"_claimAllRewards","nameLocation":"9860:16:175","nodeType":"FunctionDefinition","parameters":{"id":37278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37271,"mutability":"mutable","name":"assets","nameLocation":"9901:6:175","nodeType":"VariableDeclaration","scope":37444,"src":"9882:25:175","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":37269,"name":"address","nodeType":"ElementaryTypeName","src":"9882:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37270,"nodeType":"ArrayTypeName","src":"9882:9:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":37273,"mutability":"mutable","name":"claimer","nameLocation":"9921:7:175","nodeType":"VariableDeclaration","scope":37444,"src":"9913:15:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37272,"name":"address","nodeType":"ElementaryTypeName","src":"9913:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37275,"mutability":"mutable","name":"user","nameLocation":"9942:4:175","nodeType":"VariableDeclaration","scope":37444,"src":"9934:12:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37274,"name":"address","nodeType":"ElementaryTypeName","src":"9934:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37277,"mutability":"mutable","name":"to","nameLocation":"9960:2:175","nodeType":"VariableDeclaration","scope":37444,"src":"9952:10:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37276,"name":"address","nodeType":"ElementaryTypeName","src":"9952:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9876:90:175"},"returnParameters":{"id":37285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37281,"mutability":"mutable","name":"rewardsList","nameLocation":"10002:11:175","nodeType":"VariableDeclaration","scope":37444,"src":"9985:28:175","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":37279,"name":"address","nodeType":"ElementaryTypeName","src":"9985:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37280,"nodeType":"ArrayTypeName","src":"9985:9:175","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":37284,"mutability":"mutable","name":"claimedAmounts","nameLocation":"10032:14:175","nodeType":"VariableDeclaration","scope":37444,"src":"10015:31:175","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":37282,"name":"uint256","nodeType":"ElementaryTypeName","src":"10015:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37283,"nodeType":"ArrayTypeName","src":"10015:9:175","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9984:63:175"},"scope":37578,"src":"9851:1190:175","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":37477,"nodeType":"Block","src":"11368:200:175","statements":[{"assignments":[37456],"declarations":[{"constant":false,"id":37456,"mutability":"mutable","name":"transferStrategy","nameLocation":"11396:16:175","nodeType":"VariableDeclaration","scope":37477,"src":"11374:38:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"},"typeName":{"id":37455,"nodeType":"UserDefinedTypeName","pathNode":{"id":37454,"name":"ITransferStrategyBase","nodeType":"IdentifierPath","referencedDeclaration":39643,"src":"11374:21:175"},"referencedDeclaration":39643,"src":"11374:21:175","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}},"visibility":"internal"}],"id":37460,"initialValue":{"baseExpression":{"id":37457,"name":"_transferStrategy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36589,"src":"11415:17:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_ITransferStrategyBase_$39643_$","typeString":"mapping(address => contract ITransferStrategyBase)"}},"id":37459,"indexExpression":{"id":37458,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37449,"src":"11433:6:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11415:25:175","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}},"nodeType":"VariableDeclarationStatement","src":"11374:66:175"},{"assignments":[37462],"declarations":[{"constant":false,"id":37462,"mutability":"mutable","name":"success","nameLocation":"11452:7:175","nodeType":"VariableDeclaration","scope":37477,"src":"11447:12:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":37461,"name":"bool","nodeType":"ElementaryTypeName","src":"11447:4:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":37469,"initialValue":{"arguments":[{"id":37465,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37447,"src":"11495:2:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37466,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37449,"src":"11499:6:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37467,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37451,"src":"11507:6:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":37463,"name":"transferStrategy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37456,"src":"11462:16:175","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}},"id":37464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"performTransfer","nodeType":"MemberAccess","referencedDeclaration":39620,"src":"11462:32:175","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":37468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11462:52:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"11447:67:175"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":37473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37471,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37462,"src":"11529:7:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"74727565","id":37472,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11540:4:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"11529:15:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5452414e534645525f4552524f52","id":37474,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11546:16:175","typeDescriptions":{"typeIdentifier":"t_stringliteral_4a3338198267282d620156252d17efb5e3f8129e264028d436b0e918c4373099","typeString":"literal_string \"TRANSFER_ERROR\""},"value":"TRANSFER_ERROR"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4a3338198267282d620156252d17efb5e3f8129e264028d436b0e918c4373099","typeString":"literal_string \"TRANSFER_ERROR\""}],"id":37470,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"11521:7:175","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":37475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11521:42:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37476,"nodeType":"ExpressionStatement","src":"11521:42:175"}]},"documentation":{"id":37445,"nodeType":"StructuredDocumentation","src":"11045:241:175","text":" @dev Function to transfer rewards to the desired account using delegatecall and\n @param to Account address to send the rewards\n @param reward Address of the reward token\n @param amount Amount of rewards to transfer"},"id":37478,"implemented":true,"kind":"function","modifiers":[],"name":"_transferRewards","nameLocation":"11298:16:175","nodeType":"FunctionDefinition","parameters":{"id":37452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37447,"mutability":"mutable","name":"to","nameLocation":"11323:2:175","nodeType":"VariableDeclaration","scope":37478,"src":"11315:10:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37446,"name":"address","nodeType":"ElementaryTypeName","src":"11315:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37449,"mutability":"mutable","name":"reward","nameLocation":"11335:6:175","nodeType":"VariableDeclaration","scope":37478,"src":"11327:14:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37448,"name":"address","nodeType":"ElementaryTypeName","src":"11327:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37451,"mutability":"mutable","name":"amount","nameLocation":"11351:6:175","nodeType":"VariableDeclaration","scope":37478,"src":"11343:14:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37450,"name":"uint256","nodeType":"ElementaryTypeName","src":"11343:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11314:44:175"},"returnParameters":{"id":37453,"nodeType":"ParameterList","parameters":[],"src":"11368:0:175"},"scope":37578,"src":"11289:279:175","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":37494,"nodeType":"Block","src":"11802:327:175","statements":[{"assignments":[37487],"declarations":[{"constant":false,"id":37487,"mutability":"mutable","name":"size","nameLocation":"11991:4:175","nodeType":"VariableDeclaration","scope":37494,"src":"11983:12:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37486,"name":"uint256","nodeType":"ElementaryTypeName","src":"11983:7:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37488,"nodeType":"VariableDeclarationStatement","src":"11983:12:175"},{"AST":{"nodeType":"YulBlock","src":"12062:42:175","statements":[{"nodeType":"YulAssignment","src":"12070:28:175","value":{"arguments":[{"name":"account","nodeType":"YulIdentifier","src":"12090:7:175"}],"functionName":{"name":"extcodesize","nodeType":"YulIdentifier","src":"12078:11:175"},"nodeType":"YulFunctionCall","src":"12078:20:175"},"variableNames":[{"name":"size","nodeType":"YulIdentifier","src":"12070:4:175"}]}]},"evmVersion":"london","externalReferences":[{"declaration":37481,"isOffset":false,"isSlot":false,"src":"12090:7:175","valueSize":1},{"declaration":37487,"isOffset":false,"isSlot":false,"src":"12070:4:175","valueSize":1}],"id":37489,"nodeType":"InlineAssembly","src":"12053:51:175"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37490,"name":"size","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37487,"src":"12116:4:175","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":37491,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12123:1:175","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12116:8:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":37485,"id":37493,"nodeType":"Return","src":"12109:15:175"}]},"documentation":{"id":37479,"nodeType":"StructuredDocumentation","src":"11572:160:175","text":" @dev Returns true if `account` is a contract.\n @param account The address of the account\n @return bool, true if contract, false otherwise"},"id":37495,"implemented":true,"kind":"function","modifiers":[],"name":"_isContract","nameLocation":"11744:11:175","nodeType":"FunctionDefinition","parameters":{"id":37482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37481,"mutability":"mutable","name":"account","nameLocation":"11764:7:175","nodeType":"VariableDeclaration","scope":37495,"src":"11756:15:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37480,"name":"address","nodeType":"ElementaryTypeName","src":"11756:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11755:17:175"},"returnParameters":{"id":37485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37484,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37495,"src":"11796:4:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":37483,"name":"bool","nodeType":"ElementaryTypeName","src":"11796:4:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11795:6:175"},"scope":37578,"src":"11735:394:175","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":37543,"nodeType":"Block","src":"12465:300:175","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":37513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":37507,"name":"transferStrategy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37501,"src":"12487:16:175","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}],"id":37506,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12479:7:175","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":37505,"name":"address","nodeType":"ElementaryTypeName","src":"12479:7:175","typeDescriptions":{}}},"id":37508,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12479:25:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":37511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12516:1:175","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":37510,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12508:7:175","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":37509,"name":"address","nodeType":"ElementaryTypeName","src":"12508:7:175","typeDescriptions":{}}},"id":37512,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12508:10:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12479:39:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53545241544547595f43414e5f4e4f545f42455f5a45524f","id":37514,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12520:26:175","typeDescriptions":{"typeIdentifier":"t_stringliteral_f92fea320a30dd7cdbbe8c4bc6042352b9a6f792b0208b12430ae04cb435cf6f","typeString":"literal_string \"STRATEGY_CAN_NOT_BE_ZERO\""},"value":"STRATEGY_CAN_NOT_BE_ZERO"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f92fea320a30dd7cdbbe8c4bc6042352b9a6f792b0208b12430ae04cb435cf6f","typeString":"literal_string \"STRATEGY_CAN_NOT_BE_ZERO\""}],"id":37504,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12471:7:175","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":37515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12471:76:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37516,"nodeType":"ExpressionStatement","src":"12471:76:175"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":37525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":37521,"name":"transferStrategy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37501,"src":"12581:16:175","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}],"id":37520,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12573:7:175","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":37519,"name":"address","nodeType":"ElementaryTypeName","src":"12573:7:175","typeDescriptions":{}}},"id":37522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12573:25:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":37518,"name":"_isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37495,"src":"12561:11:175","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":37523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12561:38:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"74727565","id":37524,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12603:4:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"12561:46:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"53545241544547595f4d5553545f42455f434f4e5452414354","id":37526,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12609:27:175","typeDescriptions":{"typeIdentifier":"t_stringliteral_234a2e04caaf9701e850eca8cfe55b40e5c433eb9676d2ccf0bc0ef6daacac31","typeString":"literal_string \"STRATEGY_MUST_BE_CONTRACT\""},"value":"STRATEGY_MUST_BE_CONTRACT"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_234a2e04caaf9701e850eca8cfe55b40e5c433eb9676d2ccf0bc0ef6daacac31","typeString":"literal_string \"STRATEGY_MUST_BE_CONTRACT\""}],"id":37517,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"12553:7:175","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":37527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12553:84:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37528,"nodeType":"ExpressionStatement","src":"12553:84:175"},{"expression":{"id":37533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":37529,"name":"_transferStrategy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36589,"src":"12644:17:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_ITransferStrategyBase_$39643_$","typeString":"mapping(address => contract ITransferStrategyBase)"}},"id":37531,"indexExpression":{"id":37530,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37498,"src":"12662:6:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12644:25:175","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":37532,"name":"transferStrategy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37501,"src":"12672:16:175","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}},"src":"12644:44:175","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}},"id":37534,"nodeType":"ExpressionStatement","src":"12644:44:175"},{"eventCall":{"arguments":[{"id":37536,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37498,"src":"12726:6:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":37539,"name":"transferStrategy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37501,"src":"12742:16:175","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}],"id":37538,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12734:7:175","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":37537,"name":"address","nodeType":"ElementaryTypeName","src":"12734:7:175","typeDescriptions":{}}},"id":37540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12734:25:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":37535,"name":"TransferStrategyInstalled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39186,"src":"12700:25:175","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":37541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12700:60:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37542,"nodeType":"EmitStatement","src":"12695:65:175"}]},"documentation":{"id":37496,"nodeType":"StructuredDocumentation","src":"12133:218:175","text":" @dev Internal function to call the optional install hook at the TransferStrategy\n @param reward The address of the reward token\n @param transferStrategy The address of the reward TransferStrategy"},"id":37544,"implemented":true,"kind":"function","modifiers":[],"name":"_installTransferStrategy","nameLocation":"12363:24:175","nodeType":"FunctionDefinition","parameters":{"id":37502,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37498,"mutability":"mutable","name":"reward","nameLocation":"12401:6:175","nodeType":"VariableDeclaration","scope":37544,"src":"12393:14:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37497,"name":"address","nodeType":"ElementaryTypeName","src":"12393:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37501,"mutability":"mutable","name":"transferStrategy","nameLocation":"12435:16:175","nodeType":"VariableDeclaration","scope":37544,"src":"12413:38:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"},"typeName":{"id":37500,"nodeType":"UserDefinedTypeName","pathNode":{"id":37499,"name":"ITransferStrategyBase","nodeType":"IdentifierPath","referencedDeclaration":39643,"src":"12413:21:175"},"referencedDeclaration":39643,"src":"12413:21:175","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}},"visibility":"internal"}],"src":"12387:68:175"},"returnParameters":{"id":37503,"nodeType":"ParameterList","parameters":[],"src":"12465:0:175"},"scope":37578,"src":"12354:411:175","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":37576,"nodeType":"Block","src":"13217:182:175","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":37558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":37554,"name":"rewardOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37550,"src":"13231:12:175","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"id":37555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"latestAnswer","nodeType":"MemberAccess","referencedDeclaration":34443,"src":"13231:25:175","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_int256_$","typeString":"function () view external returns (int256)"}},"id":37556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13231:27:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":37557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13261:1:175","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13231:31:175","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f5241434c455f4d5553545f52455455524e5f5052494345","id":37559,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13264:26:175","typeDescriptions":{"typeIdentifier":"t_stringliteral_d5c01d42b1a1c3ff17ba02c4e7b4da122e8081e6a9a9e3c2b86113aac113b6c4","typeString":"literal_string \"ORACLE_MUST_RETURN_PRICE\""},"value":"ORACLE_MUST_RETURN_PRICE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d5c01d42b1a1c3ff17ba02c4e7b4da122e8081e6a9a9e3c2b86113aac113b6c4","typeString":"literal_string \"ORACLE_MUST_RETURN_PRICE\""}],"id":37553,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"13223:7:175","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":37560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13223:68:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37561,"nodeType":"ExpressionStatement","src":"13223:68:175"},{"expression":{"id":37566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":37562,"name":"_rewardOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36594,"src":"13297:13:175","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IEACAggregatorProxy_$34482_$","typeString":"mapping(address => contract IEACAggregatorProxy)"}},"id":37564,"indexExpression":{"id":37563,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37547,"src":"13311:6:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13297:21:175","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":37565,"name":"rewardOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37550,"src":"13321:12:175","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"src":"13297:36:175","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"id":37567,"nodeType":"ExpressionStatement","src":"13297:36:175"},{"eventCall":{"arguments":[{"id":37569,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37547,"src":"13364:6:175","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":37572,"name":"rewardOracle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37550,"src":"13380:12:175","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}],"id":37571,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13372:7:175","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":37570,"name":"address","nodeType":"ElementaryTypeName","src":"13372:7:175","typeDescriptions":{}}},"id":37573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13372:21:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":37568,"name":"RewardOracleUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39193,"src":"13344:19:175","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":37574,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13344:50:175","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37575,"nodeType":"EmitStatement","src":"13339:55:175"}]},"documentation":{"id":37545,"nodeType":"StructuredDocumentation","src":"12769:359:175","text":" @dev Update the Price Oracle of a reward token. The Price Oracle must follow Chainlink IEACAggregatorProxy interface.\n @notice The Price Oracle of a reward is used for displaying correct data about the incentives at the UI frontend.\n @param reward The address of the reward token\n @param rewardOracle The address of the price oracle"},"id":37577,"implemented":true,"kind":"function","modifiers":[],"name":"_setRewardOracle","nameLocation":"13141:16:175","nodeType":"FunctionDefinition","parameters":{"id":37551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37547,"mutability":"mutable","name":"reward","nameLocation":"13166:6:175","nodeType":"VariableDeclaration","scope":37577,"src":"13158:14:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37546,"name":"address","nodeType":"ElementaryTypeName","src":"13158:7:175","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37550,"mutability":"mutable","name":"rewardOracle","nameLocation":"13194:12:175","nodeType":"VariableDeclaration","scope":37577,"src":"13174:32:175","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"},"typeName":{"id":37549,"nodeType":"UserDefinedTypeName","pathNode":{"id":37548,"name":"IEACAggregatorProxy","nodeType":"IdentifierPath","referencedDeclaration":34482,"src":"13174:19:175"},"referencedDeclaration":34482,"src":"13174:19:175","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"visibility":"internal"}],"src":"13157:50:175"},"returnParameters":{"id":37552,"nodeType":"ParameterList","parameters":[],"src":"13217:0:175"},"scope":37578,"src":"13132:267:175","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":37579,"src":"913:12488:175","usedErrors":[]}],"src":"37:13365:175"},"id":175},"contracts/rewards/RewardsDistributor.sol":{"ast":{"absolutePath":"contracts/rewards/RewardsDistributor.sol","exportedSymbols":{"IERC20Detailed":[1464],"IRewardsDistributor":[39534],"IScaledBalanceToken":[5975],"RewardsDataTypes":[39707],"RewardsDistributor":[39026],"SafeCast":[1966]},"id":39027,"license":"BUSL-1.1","nodeType":"SourceUnit","nodes":[{"id":37580,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:176"},{"absolutePath":"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol","file":"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol","id":37582,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39027,"sourceUnit":5976,"src":"63:95:176","symbolAliases":[{"foreign":{"id":37581,"name":"IScaledBalanceToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:19:176","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol","id":37584,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39027,"sourceUnit":1465,"src":"159:110:176","symbolAliases":[{"foreign":{"id":37583,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"src":"167:14:176","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol","id":37586,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39027,"sourceUnit":1967,"src":"270:98:176","symbolAliases":[{"foreign":{"id":37585,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"src":"278:8:176","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/rewards/interfaces/IRewardsDistributor.sol","file":"./interfaces/IRewardsDistributor.sol","id":37588,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39027,"sourceUnit":39535,"src":"369:73:176","symbolAliases":[{"foreign":{"id":37587,"name":"IRewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"src":"377:19:176","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/rewards/libraries/RewardsDataTypes.sol","file":"./libraries/RewardsDataTypes.sol","id":37590,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39027,"sourceUnit":39708,"src":"443:66:176","symbolAliases":[{"foreign":{"id":37589,"name":"RewardsDataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"451:16:176","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":37592,"name":"IRewardsDistributor","nodeType":"IdentifierPath","referencedDeclaration":39534,"src":"699:19:176"},"id":37593,"nodeType":"InheritanceSpecifier","src":"699:19:176"}],"canonicalName":"RewardsDistributor","contractDependencies":[],"contractKind":"contract","documentation":{"id":37591,"nodeType":"StructuredDocumentation","src":"511:147:176","text":" @title RewardsDistributor\n @notice Accounting contract to manage multiple staking distributions with multiple rewards\n @author Aave*"},"fullyImplemented":false,"id":39026,"linearizedBaseContracts":[39026,39534],"name":"RewardsDistributor","nameLocation":"677:18:176","nodeType":"ContractDefinition","nodes":[{"id":37596,"libraryName":{"id":37594,"name":"SafeCast","nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"729:8:176"},"nodeType":"UsingForDirective","src":"723:27:176","typeName":{"id":37595,"name":"uint256","nodeType":"ElementaryTypeName","src":"742:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"baseFunctions":[39527],"constant":false,"functionSelector":"cbcbb507","id":37598,"mutability":"immutable","name":"EMISSION_MANAGER","nameLocation":"806:16:176","nodeType":"VariableDeclaration","scope":39026,"src":"781:41:176","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37597,"name":"address","nodeType":"ElementaryTypeName","src":"781:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"public"},{"constant":false,"id":37600,"mutability":"mutable","name":"_emissionManager","nameLocation":"924:16:176","nodeType":"VariableDeclaration","scope":39026,"src":"907:33:176","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37599,"name":"address","nodeType":"ElementaryTypeName","src":"907:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37605,"mutability":"mutable","name":"_assets","nameLocation":"1081:7:176","nodeType":"VariableDeclaration","scope":39026,"src":"1025:63:176","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData)"},"typeName":{"id":37604,"keyType":{"id":37601,"name":"address","nodeType":"ElementaryTypeName","src":"1033:7:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1025:46:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData)"},"valueType":{"id":37603,"nodeType":"UserDefinedTypeName","pathNode":{"id":37602,"name":"RewardsDataTypes.AssetData","nodeType":"IdentifierPath","referencedDeclaration":39706,"src":"1044:26:176"},"referencedDeclaration":39706,"src":"1044:26:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage_ptr","typeString":"struct RewardsDataTypes.AssetData"}}},"visibility":"internal"},{"constant":false,"id":37609,"mutability":"mutable","name":"_isRewardEnabled","nameLocation":"1180:16:176","nodeType":"VariableDeclaration","scope":39026,"src":"1146:50:176","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":37608,"keyType":{"id":37606,"name":"address","nodeType":"ElementaryTypeName","src":"1154:7:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1146:24:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueType":{"id":37607,"name":"bool","nodeType":"ElementaryTypeName","src":"1165:4:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":37612,"mutability":"mutable","name":"_rewardsList","nameLocation":"1238:12:176","nodeType":"VariableDeclaration","scope":39026,"src":"1219:31:176","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[]"},"typeName":{"baseType":{"id":37610,"name":"address","nodeType":"ElementaryTypeName","src":"1219:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37611,"nodeType":"ArrayTypeName","src":"1219:9:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":37615,"mutability":"mutable","name":"_assetsList","nameLocation":"1291:11:176","nodeType":"VariableDeclaration","scope":39026,"src":"1272:30:176","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[]"},"typeName":{"baseType":{"id":37613,"name":"address","nodeType":"ElementaryTypeName","src":"1272:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37614,"nodeType":"ArrayTypeName","src":"1272:9:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"body":{"id":37626,"nodeType":"Block","src":"1338:82:176","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":37621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":37618,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1352:3:176","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":37619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1352:10:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":37620,"name":"EMISSION_MANAGER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37598,"src":"1366:16:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1352:30:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f4e4c595f454d495353494f4e5f4d414e41474552","id":37622,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1384:23:176","typeDescriptions":{"typeIdentifier":"t_stringliteral_a28d34ff463a8cc689c6ec4b8c995983f85d0a40987242bc4cc3cec37303c18e","typeString":"literal_string \"ONLY_EMISSION_MANAGER\""},"value":"ONLY_EMISSION_MANAGER"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a28d34ff463a8cc689c6ec4b8c995983f85d0a40987242bc4cc3cec37303c18e","typeString":"literal_string \"ONLY_EMISSION_MANAGER\""}],"id":37617,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1344:7:176","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":37623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1344:64:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37624,"nodeType":"ExpressionStatement","src":"1344:64:176"},{"id":37625,"nodeType":"PlaceholderStatement","src":"1414:1:176"}]},"id":37627,"name":"onlyEmissionManager","nameLocation":"1316:19:176","nodeType":"ModifierDefinition","parameters":{"id":37616,"nodeType":"ParameterList","parameters":[],"src":"1335:2:176"},"src":"1307:113:176","virtual":false,"visibility":"internal"},{"body":{"id":37636,"nodeType":"Block","src":"1461:45:176","statements":[{"expression":{"id":37634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":37632,"name":"EMISSION_MANAGER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37598,"src":"1467:16:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":37633,"name":"emissionManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37629,"src":"1486:15:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1467:34:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37635,"nodeType":"ExpressionStatement","src":"1467:34:176"}]},"id":37637,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":37630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37629,"mutability":"mutable","name":"emissionManager","nameLocation":"1444:15:176","nodeType":"VariableDeclaration","scope":37637,"src":"1436:23:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37628,"name":"address","nodeType":"ElementaryTypeName","src":"1436:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1435:25:176"},"returnParameters":{"id":37631,"nodeType":"ParameterList","parameters":[],"src":"1461:0:176"},"scope":39026,"src":"1424:82:176","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[39447],"body":{"id":37684,"nodeType":"Block","src":"1681:236:176","statements":[{"expression":{"components":[{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":37654,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"1702:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":37656,"indexExpression":{"id":37655,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37640,"src":"1710:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1702:14:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":37657,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"1702:22:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":37659,"indexExpression":{"id":37658,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37642,"src":"1725:6:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1702:30:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"id":37660,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"index","nodeType":"MemberAccess","referencedDeclaration":39680,"src":"1702:36:176","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":37661,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"1746:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":37663,"indexExpression":{"id":37662,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37640,"src":"1754:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1746:14:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":37664,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"1746:22:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":37666,"indexExpression":{"id":37665,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37642,"src":"1769:6:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1746:30:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"id":37667,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"emissionPerSecond","nodeType":"MemberAccess","referencedDeclaration":39682,"src":"1746:48:176","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":37668,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"1802:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":37670,"indexExpression":{"id":37669,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37640,"src":"1810:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1802:14:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":37671,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"1802:22:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":37673,"indexExpression":{"id":37672,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37642,"src":"1825:6:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1802:30:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"id":37674,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"lastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":39684,"src":"1802:50:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":37675,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"1860:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":37677,"indexExpression":{"id":37676,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37640,"src":"1868:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1860:14:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":37678,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"1860:22:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":37680,"indexExpression":{"id":37679,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37642,"src":"1883:6:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1860:30:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"id":37681,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"distributionEnd","nodeType":"MemberAccess","referencedDeclaration":39686,"src":"1860:46:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"id":37682,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1694:218:176","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint104_$_t_uint88_$_t_uint32_$_t_uint32_$","typeString":"tuple(uint104,uint88,uint32,uint32)"}},"functionReturnParameters":37653,"id":37683,"nodeType":"Return","src":"1687:225:176"}]},"documentation":{"id":37638,"nodeType":"StructuredDocumentation","src":"1510:35:176","text":"@inheritdoc IRewardsDistributor"},"functionSelector":"7eff4ba8","id":37685,"implemented":true,"kind":"function","modifiers":[],"name":"getRewardsData","nameLocation":"1557:14:176","nodeType":"FunctionDefinition","overrides":{"id":37644,"nodeType":"OverrideSpecifier","overrides":[],"src":"1627:8:176"},"parameters":{"id":37643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37640,"mutability":"mutable","name":"asset","nameLocation":"1585:5:176","nodeType":"VariableDeclaration","scope":37685,"src":"1577:13:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37639,"name":"address","nodeType":"ElementaryTypeName","src":"1577:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37642,"mutability":"mutable","name":"reward","nameLocation":"1604:6:176","nodeType":"VariableDeclaration","scope":37685,"src":"1596:14:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37641,"name":"address","nodeType":"ElementaryTypeName","src":"1596:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1571:43:176"},"returnParameters":{"id":37653,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37646,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37685,"src":"1645:7:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37645,"name":"uint256","nodeType":"ElementaryTypeName","src":"1645:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":37648,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37685,"src":"1654:7:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37647,"name":"uint256","nodeType":"ElementaryTypeName","src":"1654:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":37650,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37685,"src":"1663:7:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37649,"name":"uint256","nodeType":"ElementaryTypeName","src":"1663:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":37652,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37685,"src":"1672:7:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37651,"name":"uint256","nodeType":"ElementaryTypeName","src":"1672:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1644:36:176"},"scope":39026,"src":"1548:369:176","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[39459],"body":{"id":37725,"nodeType":"Block","src":"2075:246:176","statements":[{"assignments":[37702],"declarations":[{"constant":false,"id":37702,"mutability":"mutable","name":"rewardData","nameLocation":"2117:10:176","nodeType":"VariableDeclaration","scope":37725,"src":"2081:46:176","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData"},"typeName":{"id":37701,"nodeType":"UserDefinedTypeName","pathNode":{"id":37700,"name":"RewardsDataTypes.RewardData","nodeType":"IdentifierPath","referencedDeclaration":39692,"src":"2081:27:176"},"referencedDeclaration":39692,"src":"2081:27:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData"}},"visibility":"internal"}],"id":37709,"initialValue":{"baseExpression":{"expression":{"baseExpression":{"id":37703,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"2130:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":37705,"indexExpression":{"id":37704,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37688,"src":"2138:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2130:14:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":37706,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"2130:22:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":37708,"indexExpression":{"id":37707,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37690,"src":"2153:6:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2130:30:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2081:79:176"},{"expression":{"arguments":[{"id":37711,"name":"rewardData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37702,"src":"2203:10:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":37713,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37688,"src":"2243:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":37712,"name":"IScaledBalanceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5975,"src":"2223:19:176","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IScaledBalanceToken_$5975_$","typeString":"type(contract IScaledBalanceToken)"}},"id":37714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2223:26:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IScaledBalanceToken_$5975","typeString":"contract IScaledBalanceToken"}},"id":37715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"scaledTotalSupply","nodeType":"MemberAccess","referencedDeclaration":5966,"src":"2223:44:176","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":37716,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2223:46:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":37717,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2279:2:176","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"expression":{"baseExpression":{"id":37718,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"2285:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":37720,"indexExpression":{"id":37719,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37688,"src":"2293:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2285:14:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":37721,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":39705,"src":"2285:23:176","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"2279:29:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37710,"name":"_getAssetIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38989,"src":"2179:14:176","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_RewardData_$39692_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct RewardsDataTypes.RewardData storage pointer,uint256,uint256) view returns (uint256,uint256)"}},"id":37723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2179:137:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":37697,"id":37724,"nodeType":"Return","src":"2166:150:176"}]},"documentation":{"id":37686,"nodeType":"StructuredDocumentation","src":"1921:35:176","text":"@inheritdoc IRewardsDistributor"},"functionSelector":"886fe70b","id":37726,"implemented":true,"kind":"function","modifiers":[],"name":"getAssetIndex","nameLocation":"1968:13:176","nodeType":"FunctionDefinition","overrides":{"id":37692,"nodeType":"OverrideSpecifier","overrides":[],"src":"2039:8:176"},"parameters":{"id":37691,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37688,"mutability":"mutable","name":"asset","nameLocation":"1995:5:176","nodeType":"VariableDeclaration","scope":37726,"src":"1987:13:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37687,"name":"address","nodeType":"ElementaryTypeName","src":"1987:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37690,"mutability":"mutable","name":"reward","nameLocation":"2014:6:176","nodeType":"VariableDeclaration","scope":37726,"src":"2006:14:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37689,"name":"address","nodeType":"ElementaryTypeName","src":"2006:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1981:43:176"},"returnParameters":{"id":37697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37694,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37726,"src":"2057:7:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37693,"name":"uint256","nodeType":"ElementaryTypeName","src":"2057:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":37696,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37726,"src":"2066:7:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37695,"name":"uint256","nodeType":"ElementaryTypeName","src":"2066:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2056:18:176"},"scope":39026,"src":"1959:362:176","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[39419],"body":{"id":37745,"nodeType":"Block","src":"2475:64:176","statements":[{"expression":{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":37737,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"2488:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":37739,"indexExpression":{"id":37738,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37729,"src":"2496:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2488:14:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":37740,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"2488:22:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":37742,"indexExpression":{"id":37741,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37731,"src":"2511:6:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2488:30:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"id":37743,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"distributionEnd","nodeType":"MemberAccess","referencedDeclaration":39686,"src":"2488:46:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":37736,"id":37744,"nodeType":"Return","src":"2481:53:176"}]},"documentation":{"id":37727,"nodeType":"StructuredDocumentation","src":"2325:35:176","text":"@inheritdoc IRewardsDistributor"},"functionSelector":"1b839c77","id":37746,"implemented":true,"kind":"function","modifiers":[],"name":"getDistributionEnd","nameLocation":"2372:18:176","nodeType":"FunctionDefinition","overrides":{"id":37733,"nodeType":"OverrideSpecifier","overrides":[],"src":"2448:8:176"},"parameters":{"id":37732,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37729,"mutability":"mutable","name":"asset","nameLocation":"2404:5:176","nodeType":"VariableDeclaration","scope":37746,"src":"2396:13:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37728,"name":"address","nodeType":"ElementaryTypeName","src":"2396:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37731,"mutability":"mutable","name":"reward","nameLocation":"2423:6:176","nodeType":"VariableDeclaration","scope":37746,"src":"2415:14:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37730,"name":"address","nodeType":"ElementaryTypeName","src":"2415:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2390:43:176"},"returnParameters":{"id":37736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37735,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37746,"src":"2466:7:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37734,"name":"uint256","nodeType":"ElementaryTypeName","src":"2466:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2465:9:176"},"scope":39026,"src":"2363:176:176","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[39468],"body":{"id":37799,"nodeType":"Block","src":"2673:288:176","statements":[{"assignments":[37757],"declarations":[{"constant":false,"id":37757,"mutability":"mutable","name":"rewardsCount","nameLocation":"2687:12:176","nodeType":"VariableDeclaration","scope":37799,"src":"2679:20:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":37756,"name":"uint128","nodeType":"ElementaryTypeName","src":"2679:7:176","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":37762,"initialValue":{"expression":{"baseExpression":{"id":37758,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"2702:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":37760,"indexExpression":{"id":37759,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37749,"src":"2710:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2702:14:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":37761,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"availableRewardsCount","nodeType":"MemberAccess","referencedDeclaration":39703,"src":"2702:36:176","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"2679:59:176"},{"assignments":[37767],"declarations":[{"constant":false,"id":37767,"mutability":"mutable","name":"availableRewards","nameLocation":"2761:16:176","nodeType":"VariableDeclaration","scope":37799,"src":"2744:33:176","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":37765,"name":"address","nodeType":"ElementaryTypeName","src":"2744:7:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37766,"nodeType":"ArrayTypeName","src":"2744:9:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":37773,"initialValue":{"arguments":[{"id":37771,"name":"rewardsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37757,"src":"2794:12:176","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint128","typeString":"uint128"}],"id":37770,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2780:13:176","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":37768,"name":"address","nodeType":"ElementaryTypeName","src":"2784:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37769,"nodeType":"ArrayTypeName","src":"2784:9:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":37772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2780:27:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"2744:63:176"},{"body":{"id":37795,"nodeType":"Block","src":"2857:71:176","statements":[{"expression":{"id":37793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":37784,"name":"availableRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37767,"src":"2865:16:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":37786,"indexExpression":{"id":37785,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37775,"src":"2882:1:176","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2865:19:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"baseExpression":{"id":37787,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"2887:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":37789,"indexExpression":{"id":37788,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37749,"src":"2895:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2887:14:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":37790,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"availableRewards","nodeType":"MemberAccess","referencedDeclaration":39701,"src":"2887:31:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint128_$_t_address_$","typeString":"mapping(uint128 => address)"}},"id":37792,"indexExpression":{"id":37791,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37775,"src":"2919:1:176","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2887:34:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2865:56:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37794,"nodeType":"ExpressionStatement","src":"2865:56:176"}]},"condition":{"commonType":{"typeIdentifier":"t_uint128","typeString":"uint128"},"id":37780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37778,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37775,"src":"2834:1:176","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":37779,"name":"rewardsCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37757,"src":"2838:12:176","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"2834:16:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37796,"initializationExpression":{"assignments":[37775],"declarations":[{"constant":false,"id":37775,"mutability":"mutable","name":"i","nameLocation":"2827:1:176","nodeType":"VariableDeclaration","scope":37796,"src":"2819:9:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":37774,"name":"uint128","nodeType":"ElementaryTypeName","src":"2819:7:176","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":37777,"initialValue":{"hexValue":"30","id":37776,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2831:1:176","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2819:13:176"},"loopExpression":{"expression":{"id":37782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2852:3:176","subExpression":{"id":37781,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37775,"src":"2852:1:176","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":37783,"nodeType":"ExpressionStatement","src":"2852:3:176"},"nodeType":"ForStatement","src":"2814:114:176"},{"expression":{"id":37797,"name":"availableRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37767,"src":"2940:16:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":37755,"id":37798,"nodeType":"Return","src":"2933:23:176"}]},"documentation":{"id":37747,"nodeType":"StructuredDocumentation","src":"2543:35:176","text":"@inheritdoc IRewardsDistributor"},"functionSelector":"6657732f","id":37800,"implemented":true,"kind":"function","modifiers":[],"name":"getRewardsByAsset","nameLocation":"2590:17:176","nodeType":"FunctionDefinition","overrides":{"id":37751,"nodeType":"OverrideSpecifier","overrides":[],"src":"2637:8:176"},"parameters":{"id":37750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37749,"mutability":"mutable","name":"asset","nameLocation":"2616:5:176","nodeType":"VariableDeclaration","scope":37800,"src":"2608:13:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37748,"name":"address","nodeType":"ElementaryTypeName","src":"2608:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2607:15:176"},"returnParameters":{"id":37755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37754,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37800,"src":"2655:16:176","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":37752,"name":"address","nodeType":"ElementaryTypeName","src":"2655:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37753,"nodeType":"ArrayTypeName","src":"2655:9:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2654:18:176"},"scope":39026,"src":"2581:380:176","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[39475],"body":{"id":37810,"nodeType":"Block","src":"3079:30:176","statements":[{"expression":{"id":37808,"name":"_rewardsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37612,"src":"3092:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"functionReturnParameters":37807,"id":37809,"nodeType":"Return","src":"3085:19:176"}]},"documentation":{"id":37801,"nodeType":"StructuredDocumentation","src":"2965:35:176","text":"@inheritdoc IRewardsDistributor"},"functionSelector":"b45ac1a9","id":37811,"implemented":true,"kind":"function","modifiers":[],"name":"getRewardsList","nameLocation":"3012:14:176","nodeType":"FunctionDefinition","overrides":{"id":37803,"nodeType":"OverrideSpecifier","overrides":[],"src":"3043:8:176"},"parameters":{"id":37802,"nodeType":"ParameterList","parameters":[],"src":"3026:2:176"},"returnParameters":{"id":37807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37806,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37811,"src":"3061:16:176","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":37804,"name":"address","nodeType":"ElementaryTypeName","src":"3061:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37805,"nodeType":"ArrayTypeName","src":"3061:9:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3060:18:176"},"scope":39026,"src":"3003:106:176","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[39431],"body":{"id":37835,"nodeType":"Block","src":"3278:70:176","statements":[{"expression":{"expression":{"baseExpression":{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":37824,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"3291:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":37826,"indexExpression":{"id":37825,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37816,"src":"3299:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3291:14:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":37827,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"3291:22:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":37829,"indexExpression":{"id":37828,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37818,"src":"3314:6:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3291:30:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"id":37830,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"usersData","nodeType":"MemberAccess","referencedDeclaration":39691,"src":"3291:40:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserData_$39678_storage_$","typeString":"mapping(address => struct RewardsDataTypes.UserData storage ref)"}},"id":37832,"indexExpression":{"id":37831,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37814,"src":"3332:4:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3291:46:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserData_$39678_storage","typeString":"struct RewardsDataTypes.UserData storage ref"}},"id":37833,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"index","nodeType":"MemberAccess","referencedDeclaration":39675,"src":"3291:52:176","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"functionReturnParameters":37823,"id":37834,"nodeType":"Return","src":"3284:59:176"}]},"documentation":{"id":37812,"nodeType":"StructuredDocumentation","src":"3113:35:176","text":"@inheritdoc IRewardsDistributor"},"functionSelector":"533f542a","id":37836,"implemented":true,"kind":"function","modifiers":[],"name":"getUserAssetIndex","nameLocation":"3160:17:176","nodeType":"FunctionDefinition","overrides":{"id":37820,"nodeType":"OverrideSpecifier","overrides":[],"src":"3251:8:176"},"parameters":{"id":37819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37814,"mutability":"mutable","name":"user","nameLocation":"3191:4:176","nodeType":"VariableDeclaration","scope":37836,"src":"3183:12:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37813,"name":"address","nodeType":"ElementaryTypeName","src":"3183:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37816,"mutability":"mutable","name":"asset","nameLocation":"3209:5:176","nodeType":"VariableDeclaration","scope":37836,"src":"3201:13:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37815,"name":"address","nodeType":"ElementaryTypeName","src":"3201:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37818,"mutability":"mutable","name":"reward","nameLocation":"3228:6:176","nodeType":"VariableDeclaration","scope":37836,"src":"3220:14:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37817,"name":"address","nodeType":"ElementaryTypeName","src":"3220:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3177:61:176"},"returnParameters":{"id":37823,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37822,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37836,"src":"3269:7:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37821,"name":"uint256","nodeType":"ElementaryTypeName","src":"3269:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3268:9:176"},"scope":39026,"src":"3151:197:176","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[39485],"body":{"id":37880,"nodeType":"Block","src":"3504:205:176","statements":[{"assignments":[37848],"declarations":[{"constant":false,"id":37848,"mutability":"mutable","name":"totalAccrued","nameLocation":"3518:12:176","nodeType":"VariableDeclaration","scope":37880,"src":"3510:20:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37847,"name":"uint256","nodeType":"ElementaryTypeName","src":"3510:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37849,"nodeType":"VariableDeclarationStatement","src":"3510:20:176"},{"body":{"id":37876,"nodeType":"Block","src":"3585:94:176","statements":[{"expression":{"id":37874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":37861,"name":"totalAccrued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37848,"src":"3593:12:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"expression":{"baseExpression":{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":37862,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"3609:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":37866,"indexExpression":{"baseExpression":{"id":37863,"name":"_assetsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37615,"src":"3617:11:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":37865,"indexExpression":{"id":37864,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37851,"src":"3629:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3617:14:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3609:23:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":37867,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"3609:31:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":37869,"indexExpression":{"id":37868,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37841,"src":"3641:6:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3609:39:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"id":37870,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"usersData","nodeType":"MemberAccess","referencedDeclaration":39691,"src":"3609:49:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserData_$39678_storage_$","typeString":"mapping(address => struct RewardsDataTypes.UserData storage ref)"}},"id":37872,"indexExpression":{"id":37871,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37839,"src":"3659:4:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3609:55:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserData_$39678_storage","typeString":"struct RewardsDataTypes.UserData storage ref"}},"id":37873,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"accrued","nodeType":"MemberAccess","referencedDeclaration":39677,"src":"3609:63:176","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"3593:79:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37875,"nodeType":"ExpressionStatement","src":"3593:79:176"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37854,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37851,"src":"3556:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":37855,"name":"_assetsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37615,"src":"3560:11:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":37856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3560:18:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3556:22:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37877,"initializationExpression":{"assignments":[37851],"declarations":[{"constant":false,"id":37851,"mutability":"mutable","name":"i","nameLocation":"3549:1:176","nodeType":"VariableDeclaration","scope":37877,"src":"3541:9:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37850,"name":"uint256","nodeType":"ElementaryTypeName","src":"3541:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37853,"initialValue":{"hexValue":"30","id":37852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3553:1:176","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3541:13:176"},"loopExpression":{"expression":{"id":37859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3580:3:176","subExpression":{"id":37858,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37851,"src":"3580:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37860,"nodeType":"ExpressionStatement","src":"3580:3:176"},"nodeType":"ForStatement","src":"3536:143:176"},{"expression":{"id":37878,"name":"totalAccrued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37848,"src":"3692:12:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":37846,"id":37879,"nodeType":"Return","src":"3685:19:176"}]},"documentation":{"id":37837,"nodeType":"StructuredDocumentation","src":"3352:35:176","text":"@inheritdoc IRewardsDistributor"},"functionSelector":"b022418c","id":37881,"implemented":true,"kind":"function","modifiers":[],"name":"getUserAccruedRewards","nameLocation":"3399:21:176","nodeType":"FunctionDefinition","overrides":{"id":37843,"nodeType":"OverrideSpecifier","overrides":[],"src":"3477:8:176"},"parameters":{"id":37842,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37839,"mutability":"mutable","name":"user","nameLocation":"3434:4:176","nodeType":"VariableDeclaration","scope":37881,"src":"3426:12:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37838,"name":"address","nodeType":"ElementaryTypeName","src":"3426:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37841,"mutability":"mutable","name":"reward","nameLocation":"3452:6:176","nodeType":"VariableDeclaration","scope":37881,"src":"3444:14:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37840,"name":"address","nodeType":"ElementaryTypeName","src":"3444:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3420:42:176"},"returnParameters":{"id":37846,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37845,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37881,"src":"3495:7:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37844,"name":"uint256","nodeType":"ElementaryTypeName","src":"3495:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3494:9:176"},"scope":39026,"src":"3390:319:176","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[39498],"body":{"id":37904,"nodeType":"Block","src":"3889:83:176","statements":[{"expression":{"arguments":[{"id":37896,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37887,"src":"3917:4:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37897,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37889,"src":"3923:6:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":37899,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37885,"src":"3953:6:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"id":37900,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37887,"src":"3961:4:176","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":37898,"name":"_getUserAssetBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39002,"src":"3931:21:176","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_address_$dyn_calldata_ptr_$_t_address_$returns$_t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr_$","typeString":"function (address[] calldata,address) view returns (struct RewardsDataTypes.UserAssetBalance memory[] memory)"}},"id":37901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3931:35:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}],"id":37895,"name":"_getUserReward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38813,"src":"3902:14:176","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (address,address,struct RewardsDataTypes.UserAssetBalance memory[] memory) view returns (uint256)"}},"id":37902,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3902:65:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":37894,"id":37903,"nodeType":"Return","src":"3895:72:176"}]},"documentation":{"id":37882,"nodeType":"StructuredDocumentation","src":"3713:35:176","text":"@inheritdoc IRewardsDistributor"},"functionSelector":"70674ab9","id":37905,"implemented":true,"kind":"function","modifiers":[],"name":"getUserRewards","nameLocation":"3760:14:176","nodeType":"FunctionDefinition","overrides":{"id":37891,"nodeType":"OverrideSpecifier","overrides":[],"src":"3862:8:176"},"parameters":{"id":37890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37885,"mutability":"mutable","name":"assets","nameLocation":"3799:6:176","nodeType":"VariableDeclaration","scope":37905,"src":"3780:25:176","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":37883,"name":"address","nodeType":"ElementaryTypeName","src":"3780:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37884,"nodeType":"ArrayTypeName","src":"3780:9:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":37887,"mutability":"mutable","name":"user","nameLocation":"3819:4:176","nodeType":"VariableDeclaration","scope":37905,"src":"3811:12:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37886,"name":"address","nodeType":"ElementaryTypeName","src":"3811:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37889,"mutability":"mutable","name":"reward","nameLocation":"3837:6:176","nodeType":"VariableDeclaration","scope":37905,"src":"3829:14:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37888,"name":"address","nodeType":"ElementaryTypeName","src":"3829:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3774:73:176"},"returnParameters":{"id":37894,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37893,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37905,"src":"3880:7:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37892,"name":"uint256","nodeType":"ElementaryTypeName","src":"3880:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3879:9:176"},"scope":39026,"src":"3751:221:176","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[39513],"body":{"id":38031,"nodeType":"Block","src":"4209:846:176","statements":[{"assignments":[37926],"declarations":[{"constant":false,"id":37926,"mutability":"mutable","name":"userAssetBalances","nameLocation":"4258:17:176","nodeType":"VariableDeclaration","scope":38031,"src":"4215:60:176","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance[]"},"typeName":{"baseType":{"id":37924,"nodeType":"UserDefinedTypeName","pathNode":{"id":37923,"name":"RewardsDataTypes.UserAssetBalance","nodeType":"IdentifierPath","referencedDeclaration":39673,"src":"4215:33:176"},"referencedDeclaration":39673,"src":"4215:33:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_storage_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance"}},"id":37925,"nodeType":"ArrayTypeName","src":"4215:35:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_storage_$dyn_storage_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance[]"}},"visibility":"internal"}],"id":37931,"initialValue":{"arguments":[{"id":37928,"name":"assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37909,"src":"4307:6:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},{"id":37929,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37911,"src":"4321:4:176","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":37927,"name":"_getUserAssetBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39002,"src":"4278:21:176","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_address_$dyn_calldata_ptr_$_t_address_$returns$_t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr_$","typeString":"function (address[] calldata,address) view returns (struct RewardsDataTypes.UserAssetBalance memory[] memory)"}},"id":37930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4278:53:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"4215:116:176"},{"expression":{"id":37939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":37932,"name":"rewardsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37916,"src":"4337:11:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":37936,"name":"_rewardsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37612,"src":"4365:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":37937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"4365:19:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37935,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"4351:13:176","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":37933,"name":"address","nodeType":"ElementaryTypeName","src":"4355:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37934,"nodeType":"ArrayTypeName","src":"4355:9:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":37938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4351:34:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"4337:48:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":37940,"nodeType":"ExpressionStatement","src":"4337:48:176"},{"expression":{"id":37948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":37941,"name":"unclaimedAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37919,"src":"4391:16:176","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":37945,"name":"rewardsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37916,"src":"4424:11:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":37946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"4424:18:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37944,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"4410:13:176","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":37942,"name":"uint256","nodeType":"ElementaryTypeName","src":"4414:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37943,"nodeType":"ArrayTypeName","src":"4414:9:176","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":37947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4410:33:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"4391:52:176","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37949,"nodeType":"ExpressionStatement","src":"4391:52:176"},{"body":{"id":38025,"nodeType":"Block","src":"4565:442:176","statements":[{"body":{"id":38023,"nodeType":"Block","src":"4622:379:176","statements":[{"expression":{"id":37978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":37972,"name":"rewardsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37916,"src":"4632:11:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":37974,"indexExpression":{"id":37973,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37962,"src":"4644:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4632:14:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":37975,"name":"_rewardsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37612,"src":"4649:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":37977,"indexExpression":{"id":37976,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37962,"src":"4662:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4649:15:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4632:32:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37979,"nodeType":"ExpressionStatement","src":"4632:32:176"},{"expression":{"id":37998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":37980,"name":"unclaimedAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37919,"src":"4674:16:176","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37982,"indexExpression":{"id":37981,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37962,"src":"4691:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4674:19:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"expression":{"baseExpression":{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":37983,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"4697:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":37988,"indexExpression":{"expression":{"baseExpression":{"id":37984,"name":"userAssetBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37926,"src":"4705:17:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}},"id":37986,"indexExpression":{"id":37985,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37951,"src":"4723:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4705:20:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory"}},"id":37987,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39668,"src":"4705:26:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4697:35:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":37989,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"4697:54:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":37993,"indexExpression":{"baseExpression":{"id":37990,"name":"rewardsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37916,"src":"4752:11:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":37992,"indexExpression":{"id":37991,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37962,"src":"4764:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4752:14:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4697:70:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"id":37994,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"usersData","nodeType":"MemberAccess","referencedDeclaration":39691,"src":"4697:91:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserData_$39678_storage_$","typeString":"mapping(address => struct RewardsDataTypes.UserData storage ref)"}},"id":37996,"indexExpression":{"id":37995,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37911,"src":"4789:4:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4697:97:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserData_$39678_storage","typeString":"struct RewardsDataTypes.UserData storage ref"}},"id":37997,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"accrued","nodeType":"MemberAccess","referencedDeclaration":39677,"src":"4697:116:176","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"4674:139:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37999,"nodeType":"ExpressionStatement","src":"4674:139:176"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":38000,"name":"userAssetBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37926,"src":"4828:17:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}},"id":38002,"indexExpression":{"id":38001,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37951,"src":"4846:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4828:20:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory"}},"id":38003,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userBalance","nodeType":"MemberAccess","referencedDeclaration":39670,"src":"4828:32:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":38004,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4864:1:176","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4828:37:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38008,"nodeType":"IfStatement","src":"4824:74:176","trueBody":{"id":38007,"nodeType":"Block","src":"4867:31:176","statements":[{"id":38006,"nodeType":"Continue","src":"4879:8:176"}]}},{"expression":{"id":38021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":38009,"name":"unclaimedAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37919,"src":"4907:16:176","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":38011,"indexExpression":{"id":38010,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37962,"src":"4924:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4907:19:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":38013,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37911,"src":"4949:4:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":38014,"name":"rewardsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37916,"src":"4955:11:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":38016,"indexExpression":{"id":38015,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37962,"src":"4967:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4955:14:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":38017,"name":"userAssetBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37926,"src":"4971:17:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}},"id":38019,"indexExpression":{"id":38018,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37951,"src":"4989:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4971:20:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory"}],"id":38012,"name":"_getPendingRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38871,"src":"4930:18:176","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_struct$_UserAssetBalance_$39673_memory_ptr_$returns$_t_uint256_$","typeString":"function (address,address,struct RewardsDataTypes.UserAssetBalance memory) view returns (uint256)"}},"id":38020,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4930:62:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4907:85:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38022,"nodeType":"ExpressionStatement","src":"4907:85:176"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37965,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37962,"src":"4593:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":37966,"name":"rewardsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37916,"src":"4597:11:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":37967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"4597:18:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4593:22:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38024,"initializationExpression":{"assignments":[37962],"declarations":[{"constant":false,"id":37962,"mutability":"mutable","name":"r","nameLocation":"4586:1:176","nodeType":"VariableDeclaration","scope":38024,"src":"4578:9:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37961,"name":"uint256","nodeType":"ElementaryTypeName","src":"4578:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37964,"initialValue":{"hexValue":"30","id":37963,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4590:1:176","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4578:13:176"},"loopExpression":{"expression":{"id":37970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"4617:3:176","subExpression":{"id":37969,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37962,"src":"4617:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37971,"nodeType":"ExpressionStatement","src":"4617:3:176"},"nodeType":"ForStatement","src":"4573:428:176"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37954,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37951,"src":"4530:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":37955,"name":"userAssetBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37926,"src":"4534:17:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}},"id":37956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"4534:24:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4530:28:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38026,"initializationExpression":{"assignments":[37951],"declarations":[{"constant":false,"id":37951,"mutability":"mutable","name":"i","nameLocation":"4523:1:176","nodeType":"VariableDeclaration","scope":38026,"src":"4515:9:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37950,"name":"uint256","nodeType":"ElementaryTypeName","src":"4515:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37953,"initialValue":{"hexValue":"30","id":37952,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4527:1:176","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4515:13:176"},"loopExpression":{"expression":{"id":37959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"4560:3:176","subExpression":{"id":37958,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37951,"src":"4560:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37960,"nodeType":"ExpressionStatement","src":"4560:3:176"},"nodeType":"ForStatement","src":"4510:497:176"},{"expression":{"components":[{"id":38027,"name":"rewardsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37916,"src":"5020:11:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"id":38028,"name":"unclaimedAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37919,"src":"5033:16:176","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":38029,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5019:31:176","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(address[] memory,uint256[] memory)"}},"functionReturnParameters":37920,"id":38030,"nodeType":"Return","src":"5012:38:176"}]},"documentation":{"id":37906,"nodeType":"StructuredDocumentation","src":"3976:35:176","text":"@inheritdoc IRewardsDistributor"},"functionSelector":"4c0369c3","id":38032,"implemented":true,"kind":"function","modifiers":[],"name":"getAllUserRewards","nameLocation":"4023:17:176","nodeType":"FunctionDefinition","overrides":{"id":37913,"nodeType":"OverrideSpecifier","overrides":[],"src":"4120:8:176"},"parameters":{"id":37912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37909,"mutability":"mutable","name":"assets","nameLocation":"4065:6:176","nodeType":"VariableDeclaration","scope":38032,"src":"4046:25:176","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":37907,"name":"address","nodeType":"ElementaryTypeName","src":"4046:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37908,"nodeType":"ArrayTypeName","src":"4046:9:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":37911,"mutability":"mutable","name":"user","nameLocation":"4085:4:176","nodeType":"VariableDeclaration","scope":38032,"src":"4077:12:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37910,"name":"address","nodeType":"ElementaryTypeName","src":"4077:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4040:53:176"},"returnParameters":{"id":37920,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37916,"mutability":"mutable","name":"rewardsList","nameLocation":"4159:11:176","nodeType":"VariableDeclaration","scope":38032,"src":"4142:28:176","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":37914,"name":"address","nodeType":"ElementaryTypeName","src":"4142:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37915,"nodeType":"ArrayTypeName","src":"4142:9:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":37919,"mutability":"mutable","name":"unclaimedAmounts","nameLocation":"4189:16:176","nodeType":"VariableDeclaration","scope":38032,"src":"4172:33:176","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":37917,"name":"uint256","nodeType":"ElementaryTypeName","src":"4172:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37918,"nodeType":"ArrayTypeName","src":"4172:9:176","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4141:65:176"},"scope":39026,"src":"4014:1041:176","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[39397],"body":{"id":38093,"nodeType":"Block","src":"5237:430:176","statements":[{"assignments":[38046],"declarations":[{"constant":false,"id":38046,"mutability":"mutable","name":"oldDistributionEnd","nameLocation":"5251:18:176","nodeType":"VariableDeclaration","scope":38093,"src":"5243:26:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38045,"name":"uint256","nodeType":"ElementaryTypeName","src":"5243:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38054,"initialValue":{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":38047,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"5272:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":38049,"indexExpression":{"id":38048,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38035,"src":"5280:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5272:14:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":38050,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"5272:22:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":38052,"indexExpression":{"id":38051,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38037,"src":"5295:6:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5272:30:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"id":38053,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"distributionEnd","nodeType":"MemberAccess","referencedDeclaration":39686,"src":"5272:46:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"VariableDeclarationStatement","src":"5243:75:176"},{"expression":{"id":38063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":38055,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"5324:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":38057,"indexExpression":{"id":38056,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38035,"src":"5332:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5324:14:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":38058,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"5324:22:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":38060,"indexExpression":{"id":38059,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38037,"src":"5347:6:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5324:30:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"id":38061,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"distributionEnd","nodeType":"MemberAccess","referencedDeclaration":39686,"src":"5324:46:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":38062,"name":"newDistributionEnd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38039,"src":"5373:18:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"5324:67:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":38064,"nodeType":"ExpressionStatement","src":"5324:67:176"},{"eventCall":{"arguments":[{"id":38066,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38035,"src":"5429:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":38067,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38037,"src":"5442:6:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":38068,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"5456:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":38070,"indexExpression":{"id":38069,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38035,"src":"5464:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5456:14:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":38071,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"5456:22:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":38073,"indexExpression":{"id":38072,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38037,"src":"5479:6:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5456:30:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"id":38074,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"emissionPerSecond","nodeType":"MemberAccess","referencedDeclaration":39682,"src":"5456:48:176","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":38075,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"5512:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":38077,"indexExpression":{"id":38076,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38035,"src":"5520:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5512:14:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":38078,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"5512:22:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":38080,"indexExpression":{"id":38079,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38037,"src":"5535:6:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5512:30:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"id":38081,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"emissionPerSecond","nodeType":"MemberAccess","referencedDeclaration":39682,"src":"5512:48:176","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},{"id":38082,"name":"oldDistributionEnd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38046,"src":"5568:18:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38083,"name":"newDistributionEnd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38039,"src":"5594:18:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":38084,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"5620:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":38086,"indexExpression":{"id":38085,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38035,"src":"5628:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5620:14:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":38087,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"5620:22:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":38089,"indexExpression":{"id":38088,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38037,"src":"5643:6:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5620:30:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"id":38090,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"index","nodeType":"MemberAccess","referencedDeclaration":39680,"src":"5620:36:176","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint88","typeString":"uint88"},{"typeIdentifier":"t_uint88","typeString":"uint88"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint104","typeString":"uint104"}],"id":38065,"name":"AssetConfigUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39372,"src":"5403:18:176","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256,uint256,uint256,uint256)"}},"id":38091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5403:259:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38092,"nodeType":"EmitStatement","src":"5398:264:176"}]},"documentation":{"id":38033,"nodeType":"StructuredDocumentation","src":"5059:35:176","text":"@inheritdoc IRewardsDistributor"},"functionSelector":"c5a7b538","id":38094,"implemented":true,"kind":"function","modifiers":[{"id":38043,"kind":"modifierInvocation","modifierName":{"id":38042,"name":"onlyEmissionManager","nodeType":"IdentifierPath","referencedDeclaration":37627,"src":"5217:19:176"},"nodeType":"ModifierInvocation","src":"5217:19:176"}],"name":"setDistributionEnd","nameLocation":"5106:18:176","nodeType":"FunctionDefinition","overrides":{"id":38041,"nodeType":"OverrideSpecifier","overrides":[],"src":"5208:8:176"},"parameters":{"id":38040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38035,"mutability":"mutable","name":"asset","nameLocation":"5138:5:176","nodeType":"VariableDeclaration","scope":38094,"src":"5130:13:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38034,"name":"address","nodeType":"ElementaryTypeName","src":"5130:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38037,"mutability":"mutable","name":"reward","nameLocation":"5157:6:176","nodeType":"VariableDeclaration","scope":38094,"src":"5149:14:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38036,"name":"address","nodeType":"ElementaryTypeName","src":"5149:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38039,"mutability":"mutable","name":"newDistributionEnd","nameLocation":"5176:18:176","nodeType":"VariableDeclaration","scope":38094,"src":"5169:25:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":38038,"name":"uint32","nodeType":"ElementaryTypeName","src":"5169:6:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"5124:74:176"},"returnParameters":{"id":38044,"nodeType":"ParameterList","parameters":[],"src":"5237:0:176"},"scope":39026,"src":"5097:570:176","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39409],"body":{"id":38214,"nodeType":"Block","src":"5877:1004:176","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":38110,"name":"rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38100,"src":"5891:7:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":38111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"5891:14:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":38112,"name":"newEmissionsPerSecond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38103,"src":"5909:21:176","typeDescriptions":{"typeIdentifier":"t_array$_t_uint88_$dyn_calldata_ptr","typeString":"uint88[] calldata"}},"id":38113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"5909:28:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5891:46:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e56414c49445f494e505554","id":38115,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5939:15:176","typeDescriptions":{"typeIdentifier":"t_stringliteral_711bd914f7cada6362ff0637d445621cad80f8b6c31f2f06bb305d960854e2b7","typeString":"literal_string \"INVALID_INPUT\""},"value":"INVALID_INPUT"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_711bd914f7cada6362ff0637d445621cad80f8b6c31f2f06bb305d960854e2b7","typeString":"literal_string \"INVALID_INPUT\""}],"id":38109,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5883:7:176","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":38116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5883:72:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38117,"nodeType":"ExpressionStatement","src":"5883:72:176"},{"body":{"id":38212,"nodeType":"Block","src":"6006:871:176","statements":[{"assignments":[38133],"declarations":[{"constant":false,"id":38133,"mutability":"mutable","name":"assetConfig","nameLocation":"6049:11:176","nodeType":"VariableDeclaration","scope":38212,"src":"6014:46:176","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage_ptr","typeString":"struct RewardsDataTypes.AssetData"},"typeName":{"id":38132,"nodeType":"UserDefinedTypeName","pathNode":{"id":38131,"name":"RewardsDataTypes.AssetData","nodeType":"IdentifierPath","referencedDeclaration":39706,"src":"6014:26:176"},"referencedDeclaration":39706,"src":"6014:26:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage_ptr","typeString":"struct RewardsDataTypes.AssetData"}},"visibility":"internal"}],"id":38137,"initialValue":{"baseExpression":{"id":38134,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"6063:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":38136,"indexExpression":{"id":38135,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38097,"src":"6071:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6063:14:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"6014:63:176"},{"assignments":[38142],"declarations":[{"constant":false,"id":38142,"mutability":"mutable","name":"rewardConfig","nameLocation":"6121:12:176","nodeType":"VariableDeclaration","scope":38212,"src":"6085:48:176","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData"},"typeName":{"id":38141,"nodeType":"UserDefinedTypeName","pathNode":{"id":38140,"name":"RewardsDataTypes.RewardData","nodeType":"IdentifierPath","referencedDeclaration":39692,"src":"6085:27:176"},"referencedDeclaration":39692,"src":"6085:27:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData"}},"visibility":"internal"}],"id":38151,"initialValue":{"baseExpression":{"expression":{"baseExpression":{"id":38143,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"6136:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":38145,"indexExpression":{"id":38144,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38097,"src":"6144:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6136:14:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":38146,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"6136:22:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":38150,"indexExpression":{"baseExpression":{"id":38147,"name":"rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38100,"src":"6159:7:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":38149,"indexExpression":{"id":38148,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38119,"src":"6167:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6159:10:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6136:34:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"6085:85:176"},{"assignments":[38153],"declarations":[{"constant":false,"id":38153,"mutability":"mutable","name":"decimals","nameLocation":"6186:8:176","nodeType":"VariableDeclaration","scope":38212,"src":"6178:16:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38152,"name":"uint256","nodeType":"ElementaryTypeName","src":"6178:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38156,"initialValue":{"expression":{"id":38154,"name":"assetConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38133,"src":"6197:11:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage_ptr","typeString":"struct RewardsDataTypes.AssetData storage pointer"}},"id":38155,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":39705,"src":"6197:20:176","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"6178:39:176"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":38165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38158,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38153,"src":"6242:8:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":38159,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6254:1:176","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6242:13:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":38164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":38161,"name":"rewardConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38142,"src":"6259:12:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},"id":38162,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"lastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":39684,"src":"6259:32:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":38163,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6295:1:176","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6259:37:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6242:54:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"444953545249425554494f4e5f444f45535f4e4f545f4558495354","id":38166,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6306:29:176","typeDescriptions":{"typeIdentifier":"t_stringliteral_10feaa42ab1cceccf694775bb33448aff8ff2c6abffd88c4558574e392cfbf89","typeString":"literal_string \"DISTRIBUTION_DOES_NOT_EXIST\""},"value":"DISTRIBUTION_DOES_NOT_EXIST"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_10feaa42ab1cceccf694775bb33448aff8ff2c6abffd88c4558574e392cfbf89","typeString":"literal_string \"DISTRIBUTION_DOES_NOT_EXIST\""}],"id":38157,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6225:7:176","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":38167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6225:118:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38168,"nodeType":"ExpressionStatement","src":"6225:118:176"},{"assignments":[38170,null],"declarations":[{"constant":false,"id":38170,"mutability":"mutable","name":"newIndex","nameLocation":"6361:8:176","nodeType":"VariableDeclaration","scope":38212,"src":"6353:16:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38169,"name":"uint256","nodeType":"ElementaryTypeName","src":"6353:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null],"id":38182,"initialValue":{"arguments":[{"id":38172,"name":"rewardConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38142,"src":"6402:12:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":38174,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38097,"src":"6444:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":38173,"name":"IScaledBalanceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5975,"src":"6424:19:176","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IScaledBalanceToken_$5975_$","typeString":"type(contract IScaledBalanceToken)"}},"id":38175,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6424:26:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IScaledBalanceToken_$5975","typeString":"contract IScaledBalanceToken"}},"id":38176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"scaledTotalSupply","nodeType":"MemberAccess","referencedDeclaration":5966,"src":"6424:44:176","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":38177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6424:46:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":38178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6480:2:176","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":38179,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38153,"src":"6486:8:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6480:14:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":38171,"name":"_updateRewardData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38502,"src":"6375:17:176","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_RewardData_$39692_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_bool_$","typeString":"function (struct RewardsDataTypes.RewardData storage pointer,uint256,uint256) returns (uint256,bool)"}},"id":38181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6375:127:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"6352:150:176"},{"assignments":[38184],"declarations":[{"constant":false,"id":38184,"mutability":"mutable","name":"oldEmissionPerSecond","nameLocation":"6519:20:176","nodeType":"VariableDeclaration","scope":38212,"src":"6511:28:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38183,"name":"uint256","nodeType":"ElementaryTypeName","src":"6511:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38187,"initialValue":{"expression":{"id":38185,"name":"rewardConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38142,"src":"6542:12:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},"id":38186,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"emissionPerSecond","nodeType":"MemberAccess","referencedDeclaration":39682,"src":"6542:30:176","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"nodeType":"VariableDeclarationStatement","src":"6511:61:176"},{"expression":{"id":38194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":38188,"name":"rewardConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38142,"src":"6580:12:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},"id":38190,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"emissionPerSecond","nodeType":"MemberAccess","referencedDeclaration":39682,"src":"6580:30:176","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":38191,"name":"newEmissionsPerSecond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38103,"src":"6613:21:176","typeDescriptions":{"typeIdentifier":"t_array$_t_uint88_$dyn_calldata_ptr","typeString":"uint88[] calldata"}},"id":38193,"indexExpression":{"id":38192,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38119,"src":"6635:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6613:24:176","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"src":"6580:57:176","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"id":38195,"nodeType":"ExpressionStatement","src":"6580:57:176"},{"eventCall":{"arguments":[{"id":38197,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38097,"src":"6679:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":38198,"name":"rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38100,"src":"6694:7:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":38200,"indexExpression":{"id":38199,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38119,"src":"6702:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6694:10:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":38201,"name":"oldEmissionPerSecond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38184,"src":"6714:20:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":38202,"name":"newEmissionsPerSecond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38103,"src":"6744:21:176","typeDescriptions":{"typeIdentifier":"t_array$_t_uint88_$dyn_calldata_ptr","typeString":"uint88[] calldata"}},"id":38204,"indexExpression":{"id":38203,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38119,"src":"6766:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6744:24:176","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},{"expression":{"id":38205,"name":"rewardConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38142,"src":"6778:12:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},"id":38206,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"distributionEnd","nodeType":"MemberAccess","referencedDeclaration":39686,"src":"6778:28:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"expression":{"id":38207,"name":"rewardConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38142,"src":"6816:12:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},"id":38208,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"distributionEnd","nodeType":"MemberAccess","referencedDeclaration":39686,"src":"6816:28:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":38209,"name":"newIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38170,"src":"6854:8:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint88","typeString":"uint88"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":38196,"name":"AssetConfigUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39372,"src":"6651:18:176","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256,uint256,uint256,uint256)"}},"id":38210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6651:219:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38211,"nodeType":"EmitStatement","src":"6646:224:176"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38122,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38119,"src":"5981:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":38123,"name":"rewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38100,"src":"5985:7:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":38124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"5985:14:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5981:18:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38213,"initializationExpression":{"assignments":[38119],"declarations":[{"constant":false,"id":38119,"mutability":"mutable","name":"i","nameLocation":"5974:1:176","nodeType":"VariableDeclaration","scope":38213,"src":"5966:9:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38118,"name":"uint256","nodeType":"ElementaryTypeName","src":"5966:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38121,"initialValue":{"hexValue":"30","id":38120,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5978:1:176","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5966:13:176"},"loopExpression":{"expression":{"id":38127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"6001:3:176","subExpression":{"id":38126,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38119,"src":"6001:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38128,"nodeType":"ExpressionStatement","src":"6001:3:176"},"nodeType":"ForStatement","src":"5961:916:176"}]},"documentation":{"id":38095,"nodeType":"StructuredDocumentation","src":"5671:35:176","text":"@inheritdoc IRewardsDistributor"},"functionSelector":"f996868b","id":38215,"implemented":true,"kind":"function","modifiers":[{"id":38107,"kind":"modifierInvocation","modifierName":{"id":38106,"name":"onlyEmissionManager","nodeType":"IdentifierPath","referencedDeclaration":37627,"src":"5857:19:176"},"nodeType":"ModifierInvocation","src":"5857:19:176"}],"name":"setEmissionPerSecond","nameLocation":"5718:20:176","nodeType":"FunctionDefinition","overrides":{"id":38105,"nodeType":"OverrideSpecifier","overrides":[],"src":"5848:8:176"},"parameters":{"id":38104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38097,"mutability":"mutable","name":"asset","nameLocation":"5752:5:176","nodeType":"VariableDeclaration","scope":38215,"src":"5744:13:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38096,"name":"address","nodeType":"ElementaryTypeName","src":"5744:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38100,"mutability":"mutable","name":"rewards","nameLocation":"5782:7:176","nodeType":"VariableDeclaration","scope":38215,"src":"5763:26:176","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":38098,"name":"address","nodeType":"ElementaryTypeName","src":"5763:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":38099,"nodeType":"ArrayTypeName","src":"5763:9:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":38103,"mutability":"mutable","name":"newEmissionsPerSecond","nameLocation":"5813:21:176","nodeType":"VariableDeclaration","scope":38215,"src":"5795:39:176","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint88_$dyn_calldata_ptr","typeString":"uint88[]"},"typeName":{"baseType":{"id":38101,"name":"uint88","nodeType":"ElementaryTypeName","src":"5795:6:176","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"id":38102,"nodeType":"ArrayTypeName","src":"5795:8:176","typeDescriptions":{"typeIdentifier":"t_array$_t_uint88_$dyn_storage_ptr","typeString":"uint88[]"}},"visibility":"internal"}],"src":"5738:100:176"},"returnParameters":{"id":38108,"nodeType":"ParameterList","parameters":[],"src":"5877:0:176"},"scope":39026,"src":"5709:1172:176","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":38420,"nodeType":"Block","src":"7111:1967:176","statements":[{"body":{"id":38418,"nodeType":"Block","src":"7167:1907:176","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":38242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":38234,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"7179:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":38239,"indexExpression":{"expression":{"baseExpression":{"id":38235,"name":"rewardsInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38220,"src":"7187:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":38237,"indexExpression":{"id":38236,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"7200:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7187:15:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":38238,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39657,"src":"7187:21:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7179:30:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":38240,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":39705,"src":"7179:39:176","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":38241,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7222:1:176","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7179:44:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38253,"nodeType":"IfStatement","src":"7175:173:176","trueBody":{"id":38252,"nodeType":"Block","src":"7225:123:176","statements":[{"expression":{"arguments":[{"expression":{"baseExpression":{"id":38246,"name":"rewardsInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38220,"src":"7317:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":38248,"indexExpression":{"id":38247,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"7330:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7317:15:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":38249,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39657,"src":"7317:21:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":38243,"name":"_assetsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37615,"src":"7300:11:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":38245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"push","nodeType":"MemberAccess","src":"7300:16:176","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$_t_address_$returns$__$bound_to$_t_array$_t_address_$dyn_storage_ptr_$","typeString":"function (address[] storage pointer,address)"}},"id":38250,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7300:39:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38251,"nodeType":"ExpressionStatement","src":"7300:39:176"}]}},{"assignments":[38255],"declarations":[{"constant":false,"id":38255,"mutability":"mutable","name":"decimals","nameLocation":"7364:8:176","nodeType":"VariableDeclaration","scope":38418,"src":"7356:16:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38254,"name":"uint256","nodeType":"ElementaryTypeName","src":"7356:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38272,"initialValue":{"id":38271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":38256,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"7375:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":38261,"indexExpression":{"expression":{"baseExpression":{"id":38257,"name":"rewardsInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38220,"src":"7383:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":38259,"indexExpression":{"id":38258,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"7396:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7383:15:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":38260,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39657,"src":"7383:21:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7375:30:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":38262,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":39705,"src":"7375:39:176","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"baseExpression":{"id":38264,"name":"rewardsInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38220,"src":"7441:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":38266,"indexExpression":{"id":38265,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"7454:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7441:15:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":38267,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39657,"src":"7441:21:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":38263,"name":"IERC20Detailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1464,"src":"7417:14:176","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Detailed_$1464_$","typeString":"type(contract IERC20Detailed)"}},"id":38268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7417:53:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Detailed_$1464","typeString":"contract IERC20Detailed"}},"id":38269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":1463,"src":"7417:62:176","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":38270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7417:64:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"7375:106:176","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"7356:125:176"},{"assignments":[38277],"declarations":[{"constant":false,"id":38277,"mutability":"mutable","name":"rewardConfig","nameLocation":"7526:12:176","nodeType":"VariableDeclaration","scope":38418,"src":"7490:48:176","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData"},"typeName":{"id":38276,"nodeType":"UserDefinedTypeName","pathNode":{"id":38275,"name":"RewardsDataTypes.RewardData","nodeType":"IdentifierPath","referencedDeclaration":39692,"src":"7490:27:176"},"referencedDeclaration":39692,"src":"7490:27:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData"}},"visibility":"internal"}],"id":38290,"initialValue":{"baseExpression":{"expression":{"baseExpression":{"id":38278,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"7541:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":38283,"indexExpression":{"expression":{"baseExpression":{"id":38279,"name":"rewardsInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38220,"src":"7549:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":38281,"indexExpression":{"id":38280,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"7562:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7549:15:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":38282,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39657,"src":"7549:21:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7541:30:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":38284,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"7541:38:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":38289,"indexExpression":{"expression":{"baseExpression":{"id":38285,"name":"rewardsInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38220,"src":"7589:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":38287,"indexExpression":{"id":38286,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"7602:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7589:15:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":38288,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reward","nodeType":"MemberAccess","referencedDeclaration":39659,"src":"7589:22:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7541:78:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"7490:129:176"},{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":38294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":38291,"name":"rewardConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38277,"src":"7720:12:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},"id":38292,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"lastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":39684,"src":"7720:32:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":38293,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7756:1:176","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7720:37:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38326,"nodeType":"IfStatement","src":"7716:272:176","trueBody":{"id":38325,"nodeType":"Block","src":"7759:229:176","statements":[{"expression":{"id":38314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"baseExpression":{"id":38295,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"7769:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":38300,"indexExpression":{"expression":{"baseExpression":{"id":38296,"name":"rewardsInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38220,"src":"7777:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":38298,"indexExpression":{"id":38297,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"7790:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7777:15:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":38299,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39657,"src":"7777:21:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7769:30:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":38301,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"availableRewards","nodeType":"MemberAccess","referencedDeclaration":39701,"src":"7769:47:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint128_$_t_address_$","typeString":"mapping(uint128 => address)"}},"id":38309,"indexExpression":{"expression":{"baseExpression":{"id":38302,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"7828:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":38307,"indexExpression":{"expression":{"baseExpression":{"id":38303,"name":"rewardsInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38220,"src":"7836:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":38305,"indexExpression":{"id":38304,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"7849:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7836:15:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":38306,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39657,"src":"7836:21:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7828:30:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":38308,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"availableRewardsCount","nodeType":"MemberAccess","referencedDeclaration":39703,"src":"7828:52:176","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7769:121:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":38310,"name":"rewardsInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38220,"src":"7893:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":38312,"indexExpression":{"id":38311,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"7906:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7893:15:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":38313,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reward","nodeType":"MemberAccess","referencedDeclaration":39659,"src":"7893:22:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7769:146:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":38315,"nodeType":"ExpressionStatement","src":"7769:146:176"},{"expression":{"id":38323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"7925:54:176","subExpression":{"expression":{"baseExpression":{"id":38316,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"7925:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":38321,"indexExpression":{"expression":{"baseExpression":{"id":38317,"name":"rewardsInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38220,"src":"7933:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":38319,"indexExpression":{"id":38318,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"7946:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7933:15:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":38320,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39657,"src":"7933:21:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7925:30:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":38322,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"availableRewardsCount","nodeType":"MemberAccess","referencedDeclaration":39703,"src":"7925:52:176","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":38324,"nodeType":"ExpressionStatement","src":"7925:54:176"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":38334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":38327,"name":"_isRewardEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37609,"src":"8072:16:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":38332,"indexExpression":{"expression":{"baseExpression":{"id":38328,"name":"rewardsInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38220,"src":"8089:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":38330,"indexExpression":{"id":38329,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"8102:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8089:15:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":38331,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reward","nodeType":"MemberAccess","referencedDeclaration":39659,"src":"8089:22:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8072:40:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":38333,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8116:5:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"8072:49:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38354,"nodeType":"IfStatement","src":"8068:172:176","trueBody":{"id":38353,"nodeType":"Block","src":"8123:117:176","statements":[{"expression":{"id":38342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":38335,"name":"_isRewardEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37609,"src":"8133:16:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":38340,"indexExpression":{"expression":{"baseExpression":{"id":38336,"name":"rewardsInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38220,"src":"8150:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":38338,"indexExpression":{"id":38337,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"8163:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8150:15:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":38339,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reward","nodeType":"MemberAccess","referencedDeclaration":39659,"src":"8150:22:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8133:40:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":38341,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8176:4:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"8133:47:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38343,"nodeType":"ExpressionStatement","src":"8133:47:176"},{"expression":{"arguments":[{"expression":{"baseExpression":{"id":38347,"name":"rewardsInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38220,"src":"8208:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":38349,"indexExpression":{"id":38348,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"8221:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8208:15:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":38350,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reward","nodeType":"MemberAccess","referencedDeclaration":39659,"src":"8208:22:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":38344,"name":"_rewardsList","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37612,"src":"8190:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":38346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"push","nodeType":"MemberAccess","src":"8190:17:176","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$_t_address_$returns$__$bound_to$_t_array$_t_address_$dyn_storage_ptr_$","typeString":"function (address[] storage pointer,address)"}},"id":38351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8190:41:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38352,"nodeType":"ExpressionStatement","src":"8190:41:176"}]}},{"assignments":[38356,null],"declarations":[{"constant":false,"id":38356,"mutability":"mutable","name":"newIndex","nameLocation":"8330:8:176","nodeType":"VariableDeclaration","scope":38418,"src":"8322:16:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38355,"name":"uint256","nodeType":"ElementaryTypeName","src":"8322:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null],"id":38367,"initialValue":{"arguments":[{"id":38358,"name":"rewardConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38277,"src":"8371:12:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},{"expression":{"baseExpression":{"id":38359,"name":"rewardsInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38220,"src":"8393:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":38361,"indexExpression":{"id":38360,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"8406:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8393:15:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":38362,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":39653,"src":"8393:27:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":38363,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8430:2:176","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":38364,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38255,"src":"8436:8:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8430:14:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":38357,"name":"_updateRewardData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38502,"src":"8344:17:176","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_RewardData_$39692_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_bool_$","typeString":"function (struct RewardsDataTypes.RewardData storage pointer,uint256,uint256) returns (uint256,bool)"}},"id":38366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8344:108:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"8321:131:176"},{"assignments":[38369],"declarations":[{"constant":false,"id":38369,"mutability":"mutable","name":"oldEmissionsPerSecond","nameLocation":"8541:21:176","nodeType":"VariableDeclaration","scope":38418,"src":"8534:28:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"},"typeName":{"id":38368,"name":"uint88","nodeType":"ElementaryTypeName","src":"8534:6:176","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"visibility":"internal"}],"id":38372,"initialValue":{"expression":{"id":38370,"name":"rewardConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38277,"src":"8565:12:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},"id":38371,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"emissionPerSecond","nodeType":"MemberAccess","referencedDeclaration":39682,"src":"8565:30:176","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"nodeType":"VariableDeclarationStatement","src":"8534:61:176"},{"assignments":[38374],"declarations":[{"constant":false,"id":38374,"mutability":"mutable","name":"oldDistributionEnd","nameLocation":"8610:18:176","nodeType":"VariableDeclaration","scope":38418,"src":"8603:25:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":38373,"name":"uint32","nodeType":"ElementaryTypeName","src":"8603:6:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"id":38377,"initialValue":{"expression":{"id":38375,"name":"rewardConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38277,"src":"8631:12:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},"id":38376,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"distributionEnd","nodeType":"MemberAccess","referencedDeclaration":39686,"src":"8631:28:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"VariableDeclarationStatement","src":"8603:56:176"},{"expression":{"id":38385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":38378,"name":"rewardConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38277,"src":"8667:12:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},"id":38380,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"emissionPerSecond","nodeType":"MemberAccess","referencedDeclaration":39682,"src":"8667:30:176","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":38381,"name":"rewardsInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38220,"src":"8700:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":38383,"indexExpression":{"id":38382,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"8713:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8700:15:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":38384,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"emissionPerSecond","nodeType":"MemberAccess","referencedDeclaration":39651,"src":"8700:33:176","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"src":"8667:66:176","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"id":38386,"nodeType":"ExpressionStatement","src":"8667:66:176"},{"expression":{"id":38394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":38387,"name":"rewardConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38277,"src":"8741:12:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},"id":38389,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"distributionEnd","nodeType":"MemberAccess","referencedDeclaration":39686,"src":"8741:28:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":38390,"name":"rewardsInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38220,"src":"8772:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":38392,"indexExpression":{"id":38391,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"8785:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8772:15:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":38393,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"distributionEnd","nodeType":"MemberAccess","referencedDeclaration":39655,"src":"8772:31:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"8741:62:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":38395,"nodeType":"ExpressionStatement","src":"8741:62:176"},{"eventCall":{"arguments":[{"expression":{"baseExpression":{"id":38397,"name":"rewardsInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38220,"src":"8845:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":38399,"indexExpression":{"id":38398,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"8858:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8845:15:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":38400,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39657,"src":"8845:21:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":38401,"name":"rewardsInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38220,"src":"8876:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":38403,"indexExpression":{"id":38402,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"8889:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8876:15:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":38404,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"reward","nodeType":"MemberAccess","referencedDeclaration":39659,"src":"8876:22:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":38405,"name":"oldEmissionsPerSecond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38369,"src":"8908:21:176","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},{"expression":{"baseExpression":{"id":38406,"name":"rewardsInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38220,"src":"8939:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":38408,"indexExpression":{"id":38407,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"8952:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8939:15:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":38409,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"emissionPerSecond","nodeType":"MemberAccess","referencedDeclaration":39651,"src":"8939:33:176","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},{"id":38410,"name":"oldDistributionEnd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38374,"src":"8982:18:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"expression":{"baseExpression":{"id":38411,"name":"rewardsInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38220,"src":"9010:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":38413,"indexExpression":{"id":38412,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"9023:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9010:15:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory"}},"id":38414,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"distributionEnd","nodeType":"MemberAccess","referencedDeclaration":39655,"src":"9010:31:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":38415,"name":"newIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38356,"src":"9051:8:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint88","typeString":"uint88"},{"typeIdentifier":"t_uint88","typeString":"uint88"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":38396,"name":"AssetConfigUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39372,"src":"8817:18:176","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256,uint256,uint256,uint256)"}},"id":38416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8817:250:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38417,"nodeType":"EmitStatement","src":"8812:255:176"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38227,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"7137:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":38228,"name":"rewardsInput","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38220,"src":"7141:12:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput memory[] memory"}},"id":38229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"7141:19:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7137:23:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38419,"initializationExpression":{"assignments":[38224],"declarations":[{"constant":false,"id":38224,"mutability":"mutable","name":"i","nameLocation":"7130:1:176","nodeType":"VariableDeclaration","scope":38419,"src":"7122:9:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38223,"name":"uint256","nodeType":"ElementaryTypeName","src":"7122:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38226,"initialValue":{"hexValue":"30","id":38225,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7134:1:176","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"7122:13:176"},"loopExpression":{"expression":{"id":38232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"7162:3:176","subExpression":{"id":38231,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38224,"src":"7162:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38233,"nodeType":"ExpressionStatement","src":"7162:3:176"},"nodeType":"ForStatement","src":"7117:1957:176"}]},"documentation":{"id":38216,"nodeType":"StructuredDocumentation","src":"6885:129:176","text":" @dev Configure the _assets for a specific emission\n @param rewardsInput The array of each asset configuration*"},"id":38421,"implemented":true,"kind":"function","modifiers":[],"name":"_configureAssets","nameLocation":"7026:16:176","nodeType":"FunctionDefinition","parameters":{"id":38221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38220,"mutability":"mutable","name":"rewardsInput","nameLocation":"7088:12:176","nodeType":"VariableDeclaration","scope":38421,"src":"7043:57:176","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput[]"},"typeName":{"baseType":{"id":38218,"nodeType":"UserDefinedTypeName","pathNode":{"id":38217,"name":"RewardsDataTypes.RewardsConfigInput","nodeType":"IdentifierPath","referencedDeclaration":39666,"src":"7043:35:176"},"referencedDeclaration":39666,"src":"7043:35:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_storage_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput"}},"id":38219,"nodeType":"ArrayTypeName","src":"7043:37:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_storage_$dyn_storage_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput[]"}},"visibility":"internal"}],"src":"7042:59:176"},"returnParameters":{"id":38222,"nodeType":"ParameterList","parameters":[],"src":"7111:0:176"},"scope":39026,"src":"7017:2061:176","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":38501,"nodeType":"Block","src":"9641:547:176","statements":[{"assignments":[38437,38439],"declarations":[{"constant":false,"id":38437,"mutability":"mutable","name":"oldIndex","nameLocation":"9656:8:176","nodeType":"VariableDeclaration","scope":38501,"src":"9648:16:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38436,"name":"uint256","nodeType":"ElementaryTypeName","src":"9648:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38439,"mutability":"mutable","name":"newIndex","nameLocation":"9674:8:176","nodeType":"VariableDeclaration","scope":38501,"src":"9666:16:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38438,"name":"uint256","nodeType":"ElementaryTypeName","src":"9666:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38445,"initialValue":{"arguments":[{"id":38441,"name":"rewardData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38425,"src":"9701:10:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},{"id":38442,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38427,"src":"9713:11:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38443,"name":"assetUnit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38429,"src":"9726:9:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":38440,"name":"_getAssetIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38989,"src":"9686:14:176","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_RewardData_$39692_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct RewardsDataTypes.RewardData storage pointer,uint256,uint256) view returns (uint256,uint256)"}},"id":38444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9686:50:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"9647:89:176"},{"assignments":[38447],"declarations":[{"constant":false,"id":38447,"mutability":"mutable","name":"indexUpdated","nameLocation":"9747:12:176","nodeType":"VariableDeclaration","scope":38501,"src":"9742:17:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":38446,"name":"bool","nodeType":"ElementaryTypeName","src":"9742:4:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":38448,"nodeType":"VariableDeclarationStatement","src":"9742:17:176"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38449,"name":"newIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38439,"src":"9769:8:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":38450,"name":"oldIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38437,"src":"9781:8:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9769:20:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":38495,"nodeType":"Block","src":"10072:74:176","statements":[{"expression":{"id":38493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":38486,"name":"rewardData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38425,"src":"10080:10:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},"id":38488,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"lastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":39684,"src":"10080:30:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":38489,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"10113:5:176","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":38490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"10113:15:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint32","nodeType":"MemberAccess","referencedDeclaration":1701,"src":"10113:24:176","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint32_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint32)"}},"id":38492,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10113:26:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"10080:59:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":38494,"nodeType":"ExpressionStatement","src":"10080:59:176"}]},"id":38496,"nodeType":"IfStatement","src":"9765:381:176","trueBody":{"id":38485,"nodeType":"Block","src":"9791:275:176","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38453,"name":"newIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38439,"src":"9807:8:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"arguments":[{"id":38456,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9824:7:176","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":38455,"name":"uint104","nodeType":"ElementaryTypeName","src":"9824:7:176","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"}],"id":38454,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9819:4:176","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":38457,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9819:13:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint104","typeString":"type(uint104)"}},"id":38458,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"9819:17:176","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"src":"9807:29:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e4445585f4f564552464c4f57","id":38460,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9838:16:176","typeDescriptions":{"typeIdentifier":"t_stringliteral_f6a7187dfb6061567b074df0155c071985ca15e6ac6b3024e5bd106b2c7018cf","typeString":"literal_string \"INDEX_OVERFLOW\""},"value":"INDEX_OVERFLOW"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f6a7187dfb6061567b074df0155c071985ca15e6ac6b3024e5bd106b2c7018cf","typeString":"literal_string \"INDEX_OVERFLOW\""}],"id":38452,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9799:7:176","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":38461,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9799:56:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38462,"nodeType":"ExpressionStatement","src":"9799:56:176"},{"expression":{"id":38465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38463,"name":"indexUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38447,"src":"9863:12:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":38464,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9878:4:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"9863:19:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38466,"nodeType":"ExpressionStatement","src":"9863:19:176"},{"expression":{"id":38474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":38467,"name":"rewardData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38425,"src":"9956:10:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},"id":38469,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"index","nodeType":"MemberAccess","referencedDeclaration":39680,"src":"9956:16:176","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":38472,"name":"newIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38439,"src":"9983:8:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":38471,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9975:7:176","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":38470,"name":"uint104","nodeType":"ElementaryTypeName","src":"9975:7:176","typeDescriptions":{}}},"id":38473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9975:17:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"src":"9956:36:176","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"id":38475,"nodeType":"ExpressionStatement","src":"9956:36:176"},{"expression":{"id":38483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":38476,"name":"rewardData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38425,"src":"10000:10:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},"id":38478,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"lastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":39684,"src":"10000:30:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":38479,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"10033:5:176","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":38480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"10033:15:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint32","nodeType":"MemberAccess","referencedDeclaration":1701,"src":"10033:24:176","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint32_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint32)"}},"id":38482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10033:26:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"10000:59:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":38484,"nodeType":"ExpressionStatement","src":"10000:59:176"}]}},{"expression":{"components":[{"id":38497,"name":"newIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38439,"src":"10160:8:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38498,"name":"indexUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38447,"src":"10170:12:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":38499,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10159:24:176","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"functionReturnParameters":38435,"id":38500,"nodeType":"Return","src":"10152:31:176"}]},"documentation":{"id":38422,"nodeType":"StructuredDocumentation","src":"9082:392:176","text":" @dev Updates the state of the distribution for the specified reward\n @param rewardData Storage pointer to the distribution reward config\n @param totalSupply Current total of underlying assets for this distribution\n @param assetUnit One unit of asset (10**decimals)\n @return The new distribution index\n @return True if the index was updated, false otherwise*"},"id":38502,"implemented":true,"kind":"function","modifiers":[],"name":"_updateRewardData","nameLocation":"9486:17:176","nodeType":"FunctionDefinition","parameters":{"id":38430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38425,"mutability":"mutable","name":"rewardData","nameLocation":"9545:10:176","nodeType":"VariableDeclaration","scope":38502,"src":"9509:46:176","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData"},"typeName":{"id":38424,"nodeType":"UserDefinedTypeName","pathNode":{"id":38423,"name":"RewardsDataTypes.RewardData","nodeType":"IdentifierPath","referencedDeclaration":39692,"src":"9509:27:176"},"referencedDeclaration":39692,"src":"9509:27:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData"}},"visibility":"internal"},{"constant":false,"id":38427,"mutability":"mutable","name":"totalSupply","nameLocation":"9569:11:176","nodeType":"VariableDeclaration","scope":38502,"src":"9561:19:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38426,"name":"uint256","nodeType":"ElementaryTypeName","src":"9561:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38429,"mutability":"mutable","name":"assetUnit","nameLocation":"9594:9:176","nodeType":"VariableDeclaration","scope":38502,"src":"9586:17:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38428,"name":"uint256","nodeType":"ElementaryTypeName","src":"9586:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9503:104:176"},"returnParameters":{"id":38435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38432,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38502,"src":"9626:7:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38431,"name":"uint256","nodeType":"ElementaryTypeName","src":"9626:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38434,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38502,"src":"9635:4:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":38433,"name":"bool","nodeType":"ElementaryTypeName","src":"9635:4:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9625:15:176"},"scope":39026,"src":"9477:711:176","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":38584,"nodeType":"Block","src":"10826:540:176","statements":[{"assignments":[38522],"declarations":[{"constant":false,"id":38522,"mutability":"mutable","name":"userIndex","nameLocation":"10840:9:176","nodeType":"VariableDeclaration","scope":38584,"src":"10832:17:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38521,"name":"uint256","nodeType":"ElementaryTypeName","src":"10832:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38528,"initialValue":{"expression":{"baseExpression":{"expression":{"id":38523,"name":"rewardData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38506,"src":"10852:10:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},"id":38524,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"usersData","nodeType":"MemberAccess","referencedDeclaration":39691,"src":"10852:20:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserData_$39678_storage_$","typeString":"mapping(address => struct RewardsDataTypes.UserData storage ref)"}},"id":38526,"indexExpression":{"id":38525,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38508,"src":"10873:4:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10852:26:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserData_$39678_storage","typeString":"struct RewardsDataTypes.UserData storage ref"}},"id":38527,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"index","nodeType":"MemberAccess","referencedDeclaration":39675,"src":"10852:32:176","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"nodeType":"VariableDeclarationStatement","src":"10832:52:176"},{"assignments":[38530],"declarations":[{"constant":false,"id":38530,"mutability":"mutable","name":"rewardsAccrued","nameLocation":"10898:14:176","nodeType":"VariableDeclaration","scope":38584,"src":"10890:22:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38529,"name":"uint256","nodeType":"ElementaryTypeName","src":"10890:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38531,"nodeType":"VariableDeclarationStatement","src":"10890:22:176"},{"assignments":[38533],"declarations":[{"constant":false,"id":38533,"mutability":"mutable","name":"dataUpdated","nameLocation":"10923:11:176","nodeType":"VariableDeclaration","scope":38584,"src":"10918:16:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":38532,"name":"bool","nodeType":"ElementaryTypeName","src":"10918:4:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":38534,"nodeType":"VariableDeclarationStatement","src":"10918:16:176"},{"condition":{"components":[{"id":38539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38535,"name":"dataUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38533,"src":"10945:11:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38536,"name":"userIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38522,"src":"10959:9:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":38537,"name":"newAssetIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38512,"src":"10972:13:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10959:26:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10945:40:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":38540,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10944:42:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38579,"nodeType":"IfStatement","src":"10940:380:176","trueBody":{"id":38578,"nodeType":"Block","src":"10988:332:176","statements":[{"expression":{"id":38551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":38541,"name":"rewardData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38506,"src":"11055:10:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},"id":38544,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"usersData","nodeType":"MemberAccess","referencedDeclaration":39691,"src":"11055:20:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserData_$39678_storage_$","typeString":"mapping(address => struct RewardsDataTypes.UserData storage ref)"}},"id":38545,"indexExpression":{"id":38543,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38508,"src":"11076:4:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11055:26:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserData_$39678_storage","typeString":"struct RewardsDataTypes.UserData storage ref"}},"id":38546,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"index","nodeType":"MemberAccess","referencedDeclaration":39675,"src":"11055:32:176","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":38549,"name":"newAssetIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38512,"src":"11098:13:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":38548,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11090:7:176","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":38547,"name":"uint104","nodeType":"ElementaryTypeName","src":"11090:7:176","typeDescriptions":{}}},"id":38550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11090:22:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"src":"11055:57:176","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"id":38552,"nodeType":"ExpressionStatement","src":"11055:57:176"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38553,"name":"userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38510,"src":"11124:11:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":38554,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11139:1:176","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11124:16:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38577,"nodeType":"IfStatement","src":"11120:194:176","trueBody":{"id":38576,"nodeType":"Block","src":"11142:172:176","statements":[{"expression":{"id":38563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38556,"name":"rewardsAccrued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38530,"src":"11152:14:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":38558,"name":"userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38510,"src":"11181:11:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38559,"name":"newAssetIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38512,"src":"11194:13:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38560,"name":"userIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38522,"src":"11209:9:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38561,"name":"assetUnit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38514,"src":"11220:9:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":38557,"name":"_getRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38898,"src":"11169:11:176","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) pure returns (uint256)"}},"id":38562,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11169:61:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11152:78:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38564,"nodeType":"ExpressionStatement","src":"11152:78:176"},{"expression":{"id":38574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"expression":{"id":38565,"name":"rewardData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38506,"src":"11241:10:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},"id":38568,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"usersData","nodeType":"MemberAccess","referencedDeclaration":39691,"src":"11241:20:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserData_$39678_storage_$","typeString":"mapping(address => struct RewardsDataTypes.UserData storage ref)"}},"id":38569,"indexExpression":{"id":38567,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38508,"src":"11262:4:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11241:26:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserData_$39678_storage","typeString":"struct RewardsDataTypes.UserData storage ref"}},"id":38570,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"accrued","nodeType":"MemberAccess","referencedDeclaration":39677,"src":"11241:34:176","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":38571,"name":"rewardsAccrued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38530,"src":"11279:14:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"11279:24:176","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":38573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11279:26:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"11241:64:176","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":38575,"nodeType":"ExpressionStatement","src":"11241:64:176"}]}}]}},{"expression":{"components":[{"id":38580,"name":"rewardsAccrued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38530,"src":"11333:14:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38581,"name":"dataUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38533,"src":"11349:11:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":38582,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11332:29:176","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"functionReturnParameters":38520,"id":38583,"nodeType":"Return","src":"11325:36:176"}]},"documentation":{"id":38503,"nodeType":"StructuredDocumentation","src":"10192:424:176","text":" @dev Updates the state of the distribution for the specific user\n @param rewardData Storage pointer to the distribution reward config\n @param user The address of the user\n @param userBalance The user balance of the asset\n @param newAssetIndex The new index of the asset distribution\n @param assetUnit One unit of asset (10**decimals)\n @return The rewards accrued since the last update*"},"id":38585,"implemented":true,"kind":"function","modifiers":[],"name":"_updateUserData","nameLocation":"10628:15:176","nodeType":"FunctionDefinition","parameters":{"id":38515,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38506,"mutability":"mutable","name":"rewardData","nameLocation":"10685:10:176","nodeType":"VariableDeclaration","scope":38585,"src":"10649:46:176","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData"},"typeName":{"id":38505,"nodeType":"UserDefinedTypeName","pathNode":{"id":38504,"name":"RewardsDataTypes.RewardData","nodeType":"IdentifierPath","referencedDeclaration":39692,"src":"10649:27:176"},"referencedDeclaration":39692,"src":"10649:27:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData"}},"visibility":"internal"},{"constant":false,"id":38508,"mutability":"mutable","name":"user","nameLocation":"10709:4:176","nodeType":"VariableDeclaration","scope":38585,"src":"10701:12:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38507,"name":"address","nodeType":"ElementaryTypeName","src":"10701:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38510,"mutability":"mutable","name":"userBalance","nameLocation":"10727:11:176","nodeType":"VariableDeclaration","scope":38585,"src":"10719:19:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38509,"name":"uint256","nodeType":"ElementaryTypeName","src":"10719:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38512,"mutability":"mutable","name":"newAssetIndex","nameLocation":"10752:13:176","nodeType":"VariableDeclaration","scope":38585,"src":"10744:21:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38511,"name":"uint256","nodeType":"ElementaryTypeName","src":"10744:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38514,"mutability":"mutable","name":"assetUnit","nameLocation":"10779:9:176","nodeType":"VariableDeclaration","scope":38585,"src":"10771:17:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38513,"name":"uint256","nodeType":"ElementaryTypeName","src":"10771:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10643:149:176"},"returnParameters":{"id":38520,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38517,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38585,"src":"10811:7:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38516,"name":"uint256","nodeType":"ElementaryTypeName","src":"10811:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38519,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38585,"src":"10820:4:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":38518,"name":"bool","nodeType":"ElementaryTypeName","src":"10820:4:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10810:15:176"},"scope":39026,"src":"10619:747:176","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":38693,"nodeType":"Block","src":"11794:966:176","statements":[{"assignments":[38598],"declarations":[{"constant":false,"id":38598,"mutability":"mutable","name":"assetUnit","nameLocation":"11808:9:176","nodeType":"VariableDeclaration","scope":38693,"src":"11800:17:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38597,"name":"uint256","nodeType":"ElementaryTypeName","src":"11800:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38599,"nodeType":"VariableDeclarationStatement","src":"11800:17:176"},{"assignments":[38601],"declarations":[{"constant":false,"id":38601,"mutability":"mutable","name":"numAvailableRewards","nameLocation":"11831:19:176","nodeType":"VariableDeclaration","scope":38693,"src":"11823:27:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38600,"name":"uint256","nodeType":"ElementaryTypeName","src":"11823:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38606,"initialValue":{"expression":{"baseExpression":{"id":38602,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"11853:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":38604,"indexExpression":{"id":38603,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38588,"src":"11861:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11853:14:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":38605,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"availableRewardsCount","nodeType":"MemberAccess","referencedDeclaration":39703,"src":"11853:36:176","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"VariableDeclarationStatement","src":"11823:66:176"},{"id":38616,"nodeType":"UncheckedBlock","src":"11895:66:176","statements":[{"expression":{"id":38614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38607,"name":"assetUnit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38598,"src":"11913:9:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":38608,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11925:2:176","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"expression":{"baseExpression":{"id":38609,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"11931:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":38611,"indexExpression":{"id":38610,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38588,"src":"11939:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11931:14:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":38612,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":39705,"src":"11931:23:176","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"11925:29:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11913:41:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38615,"nodeType":"ExpressionStatement","src":"11913:41:176"}]},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38617,"name":"numAvailableRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38601,"src":"11971:19:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":38618,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11994:1:176","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11971:24:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38622,"nodeType":"IfStatement","src":"11967:51:176","trueBody":{"id":38621,"nodeType":"Block","src":"11997:21:176","statements":[{"functionReturnParameters":38596,"id":38620,"nodeType":"Return","src":"12005:7:176"}]}},{"id":38692,"nodeType":"UncheckedBlock","src":"12023:733:176","statements":[{"body":{"id":38690,"nodeType":"Block","src":"12091:659:176","statements":[{"assignments":[38634],"declarations":[{"constant":false,"id":38634,"mutability":"mutable","name":"reward","nameLocation":"12109:6:176","nodeType":"VariableDeclaration","scope":38690,"src":"12101:14:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38633,"name":"address","nodeType":"ElementaryTypeName","src":"12101:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":38641,"initialValue":{"baseExpression":{"expression":{"baseExpression":{"id":38635,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"12118:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":38637,"indexExpression":{"id":38636,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38588,"src":"12126:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12118:14:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":38638,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"availableRewards","nodeType":"MemberAccess","referencedDeclaration":39701,"src":"12118:31:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint128_$_t_address_$","typeString":"mapping(uint128 => address)"}},"id":38640,"indexExpression":{"id":38639,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38624,"src":"12150:1:176","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12118:34:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"12101:51:176"},{"assignments":[38646],"declarations":[{"constant":false,"id":38646,"mutability":"mutable","name":"rewardData","nameLocation":"12198:10:176","nodeType":"VariableDeclaration","scope":38690,"src":"12162:46:176","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData"},"typeName":{"id":38645,"nodeType":"UserDefinedTypeName","pathNode":{"id":38644,"name":"RewardsDataTypes.RewardData","nodeType":"IdentifierPath","referencedDeclaration":39692,"src":"12162:27:176"},"referencedDeclaration":39692,"src":"12162:27:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData"}},"visibility":"internal"}],"id":38653,"initialValue":{"baseExpression":{"expression":{"baseExpression":{"id":38647,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"12211:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":38649,"indexExpression":{"id":38648,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38588,"src":"12219:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12211:14:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":38650,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"12211:22:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":38652,"indexExpression":{"id":38651,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38634,"src":"12234:6:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12211:30:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"12162:79:176"},{"assignments":[38655,38657],"declarations":[{"constant":false,"id":38655,"mutability":"mutable","name":"newAssetIndex","nameLocation":"12261:13:176","nodeType":"VariableDeclaration","scope":38690,"src":"12253:21:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38654,"name":"uint256","nodeType":"ElementaryTypeName","src":"12253:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38657,"mutability":"mutable","name":"rewardDataUpdated","nameLocation":"12281:17:176","nodeType":"VariableDeclaration","scope":38690,"src":"12276:22:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":38656,"name":"bool","nodeType":"ElementaryTypeName","src":"12276:4:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":38663,"initialValue":{"arguments":[{"id":38659,"name":"rewardData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38646,"src":"12331:10:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},{"id":38660,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38594,"src":"12353:11:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38661,"name":"assetUnit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38598,"src":"12376:9:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":38658,"name":"_updateRewardData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38502,"src":"12302:17:176","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_RewardData_$39692_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_bool_$","typeString":"function (struct RewardsDataTypes.RewardData storage pointer,uint256,uint256) returns (uint256,bool)"}},"id":38662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12302:93:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"12252:143:176"},{"assignments":[38665,38667],"declarations":[{"constant":false,"id":38665,"mutability":"mutable","name":"rewardsAccrued","nameLocation":"12415:14:176","nodeType":"VariableDeclaration","scope":38690,"src":"12407:22:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38664,"name":"uint256","nodeType":"ElementaryTypeName","src":"12407:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38667,"mutability":"mutable","name":"userDataUpdated","nameLocation":"12436:15:176","nodeType":"VariableDeclaration","scope":38690,"src":"12431:20:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":38666,"name":"bool","nodeType":"ElementaryTypeName","src":"12431:4:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":38675,"initialValue":{"arguments":[{"id":38669,"name":"rewardData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38646,"src":"12482:10:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},{"id":38670,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38590,"src":"12504:4:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":38671,"name":"userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38592,"src":"12520:11:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38672,"name":"newAssetIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38655,"src":"12543:13:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38673,"name":"assetUnit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38598,"src":"12568:9:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":38668,"name":"_updateUserData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38585,"src":"12455:15:176","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_RewardData_$39692_storage_ptr_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_bool_$","typeString":"function (struct RewardsDataTypes.RewardData storage pointer,address,uint256,uint256,uint256) returns (uint256,bool)"}},"id":38674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12455:132:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"12406:181:176"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":38678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38676,"name":"rewardDataUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38657,"src":"12602:17:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"id":38677,"name":"userDataUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38667,"src":"12623:15:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12602:36:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38689,"nodeType":"IfStatement","src":"12598:144:176","trueBody":{"id":38688,"nodeType":"Block","src":"12640:102:176","statements":[{"eventCall":{"arguments":[{"id":38680,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38588,"src":"12665:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":38681,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38634,"src":"12672:6:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":38682,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38590,"src":"12680:4:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":38683,"name":"newAssetIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38655,"src":"12686:13:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38684,"name":"newAssetIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38655,"src":"12701:13:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38685,"name":"rewardsAccrued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38665,"src":"12716:14:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"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"}],"id":38679,"name":"Accrued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39387,"src":"12657:7:176","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256,uint256,uint256)"}},"id":38686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12657:74:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38687,"nodeType":"EmitStatement","src":"12652:79:176"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38627,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38624,"src":"12061:1:176","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":38628,"name":"numAvailableRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38601,"src":"12065:19:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12061:23:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38691,"initializationExpression":{"assignments":[38624],"declarations":[{"constant":false,"id":38624,"mutability":"mutable","name":"r","nameLocation":"12054:1:176","nodeType":"VariableDeclaration","scope":38691,"src":"12046:9:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":38623,"name":"uint128","nodeType":"ElementaryTypeName","src":"12046:7:176","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"id":38626,"initialValue":{"hexValue":"30","id":38625,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12058:1:176","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12046:13:176"},"loopExpression":{"expression":{"id":38631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"12086:3:176","subExpression":{"id":38630,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38624,"src":"12086:1:176","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":38632,"nodeType":"ExpressionStatement","src":"12086:3:176"},"nodeType":"ForStatement","src":"12041:709:176"}]}]},"documentation":{"id":38586,"nodeType":"StructuredDocumentation","src":"11370:300:176","text":" @dev Iterates and accrues all the rewards for asset of the specific user\n @param asset The address of the reference asset of the distribution\n @param user The user address\n @param userBalance The current user asset balance\n @param totalSupply Total supply of the asset*"},"id":38694,"implemented":true,"kind":"function","modifiers":[],"name":"_updateData","nameLocation":"11682:11:176","nodeType":"FunctionDefinition","parameters":{"id":38595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38588,"mutability":"mutable","name":"asset","nameLocation":"11707:5:176","nodeType":"VariableDeclaration","scope":38694,"src":"11699:13:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38587,"name":"address","nodeType":"ElementaryTypeName","src":"11699:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38590,"mutability":"mutable","name":"user","nameLocation":"11726:4:176","nodeType":"VariableDeclaration","scope":38694,"src":"11718:12:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38589,"name":"address","nodeType":"ElementaryTypeName","src":"11718:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38592,"mutability":"mutable","name":"userBalance","nameLocation":"11744:11:176","nodeType":"VariableDeclaration","scope":38694,"src":"11736:19:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38591,"name":"uint256","nodeType":"ElementaryTypeName","src":"11736:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38594,"mutability":"mutable","name":"totalSupply","nameLocation":"11769:11:176","nodeType":"VariableDeclaration","scope":38694,"src":"11761:19:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38593,"name":"uint256","nodeType":"ElementaryTypeName","src":"11761:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11693:91:176"},"returnParameters":{"id":38596,"nodeType":"ParameterList","parameters":[],"src":"11794:0:176"},"scope":39026,"src":"11673:1087:176","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":38733,"nodeType":"Block","src":"13136:233:176","statements":[{"body":{"id":38731,"nodeType":"Block","src":"13197:168:176","statements":[{"expression":{"arguments":[{"expression":{"baseExpression":{"id":38716,"name":"userAssetBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38701,"src":"13226:17:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}},"id":38718,"indexExpression":{"id":38717,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38705,"src":"13244:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13226:20:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory"}},"id":38719,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39668,"src":"13226:26:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":38720,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38697,"src":"13262:4:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":38721,"name":"userAssetBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38701,"src":"13276:17:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}},"id":38723,"indexExpression":{"id":38722,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38705,"src":"13294:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13276:20:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory"}},"id":38724,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userBalance","nodeType":"MemberAccess","referencedDeclaration":39670,"src":"13276:32:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"baseExpression":{"id":38725,"name":"userAssetBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38701,"src":"13318:17:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}},"id":38727,"indexExpression":{"id":38726,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38705,"src":"13336:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13318:20:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory"}},"id":38728,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":39672,"src":"13318:32:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":38715,"name":"_updateData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38694,"src":"13205:11:176","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256,uint256)"}},"id":38729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"13205:153:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38730,"nodeType":"ExpressionStatement","src":"13205:153:176"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38708,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38705,"src":"13162:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":38709,"name":"userAssetBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38701,"src":"13166:17:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}},"id":38710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"13166:24:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13162:28:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38732,"initializationExpression":{"assignments":[38705],"declarations":[{"constant":false,"id":38705,"mutability":"mutable","name":"i","nameLocation":"13155:1:176","nodeType":"VariableDeclaration","scope":38732,"src":"13147:9:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38704,"name":"uint256","nodeType":"ElementaryTypeName","src":"13147:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38707,"initialValue":{"hexValue":"30","id":38706,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13159:1:176","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13147:13:176"},"loopExpression":{"expression":{"id":38713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"13192:3:176","subExpression":{"id":38712,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38705,"src":"13192:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38714,"nodeType":"ExpressionStatement","src":"13192:3:176"},"nodeType":"ForStatement","src":"13142:223:176"}]},"documentation":{"id":38695,"nodeType":"StructuredDocumentation","src":"12764:243:176","text":" @dev Accrues all the rewards of the assets specified in the userAssetBalances list\n @param user The address of the user\n @param userAssetBalances List of structs with the user balance and total supply of a set of assets*"},"id":38734,"implemented":true,"kind":"function","modifiers":[],"name":"_updateDataMultiple","nameLocation":"13019:19:176","nodeType":"FunctionDefinition","parameters":{"id":38702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38697,"mutability":"mutable","name":"user","nameLocation":"13052:4:176","nodeType":"VariableDeclaration","scope":38734,"src":"13044:12:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38696,"name":"address","nodeType":"ElementaryTypeName","src":"13044:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38701,"mutability":"mutable","name":"userAssetBalances","nameLocation":"13105:17:176","nodeType":"VariableDeclaration","scope":38734,"src":"13062:60:176","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance[]"},"typeName":{"baseType":{"id":38699,"nodeType":"UserDefinedTypeName","pathNode":{"id":38698,"name":"RewardsDataTypes.UserAssetBalance","nodeType":"IdentifierPath","referencedDeclaration":39673,"src":"13062:33:176"},"referencedDeclaration":39673,"src":"13062:33:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_storage_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance"}},"id":38700,"nodeType":"ArrayTypeName","src":"13062:35:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_storage_$dyn_storage_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance[]"}},"visibility":"internal"}],"src":"13038:88:176"},"returnParameters":{"id":38703,"nodeType":"ParameterList","parameters":[],"src":"13136:0:176"},"scope":39026,"src":"13010:359:176","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":38812,"nodeType":"Block","src":"13941:526:176","statements":[{"body":{"id":38808,"nodeType":"Block","src":"14032:401:176","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":38759,"name":"userAssetBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38743,"src":"14044:17:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}},"id":38761,"indexExpression":{"id":38760,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38749,"src":"14062:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14044:20:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory"}},"id":38762,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userBalance","nodeType":"MemberAccess","referencedDeclaration":39670,"src":"14044:32:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":38763,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14080:1:176","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14044:37:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":38806,"nodeType":"Block","src":"14236:191:176","statements":[{"expression":{"id":38804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38782,"name":"unclaimedRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38746,"src":"14246:16:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":38784,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38737,"src":"14295:4:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":38785,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38739,"src":"14301:6:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":38786,"name":"userAssetBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38743,"src":"14309:17:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}},"id":38788,"indexExpression":{"id":38787,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38749,"src":"14327:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14309:20:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory"}],"id":38783,"name":"_getPendingRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38871,"src":"14276:18:176","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_struct$_UserAssetBalance_$39673_memory_ptr_$returns$_t_uint256_$","typeString":"function (address,address,struct RewardsDataTypes.UserAssetBalance memory) view returns (uint256)"}},"id":38789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"14276:54:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"baseExpression":{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":38790,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"14343:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":38795,"indexExpression":{"expression":{"baseExpression":{"id":38791,"name":"userAssetBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38743,"src":"14351:17:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}},"id":38793,"indexExpression":{"id":38792,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38749,"src":"14369:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14351:20:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory"}},"id":38794,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39668,"src":"14351:26:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14343:35:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":38796,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"14343:43:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":38798,"indexExpression":{"id":38797,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38739,"src":"14387:6:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14343:51:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"id":38799,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"usersData","nodeType":"MemberAccess","referencedDeclaration":39691,"src":"14343:61:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserData_$39678_storage_$","typeString":"mapping(address => struct RewardsDataTypes.UserData storage ref)"}},"id":38801,"indexExpression":{"id":38800,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38737,"src":"14405:4:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14343:67:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserData_$39678_storage","typeString":"struct RewardsDataTypes.UserData storage ref"}},"id":38802,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"accrued","nodeType":"MemberAccess","referencedDeclaration":39677,"src":"14343:75:176","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"14276:142:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14246:172:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38805,"nodeType":"ExpressionStatement","src":"14246:172:176"}]},"id":38807,"nodeType":"IfStatement","src":"14040:387:176","trueBody":{"id":38781,"nodeType":"Block","src":"14083:147:176","statements":[{"expression":{"id":38779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38765,"name":"unclaimedRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38746,"src":"14093:16:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"expression":{"baseExpression":{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":38766,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"14113:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":38771,"indexExpression":{"expression":{"baseExpression":{"id":38767,"name":"userAssetBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38743,"src":"14121:17:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}},"id":38769,"indexExpression":{"id":38768,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38749,"src":"14139:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14121:20:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory"}},"id":38770,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39668,"src":"14121:26:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14113:35:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":38772,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"14113:54:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":38774,"indexExpression":{"id":38773,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38739,"src":"14168:6:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14113:62:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"id":38775,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"usersData","nodeType":"MemberAccess","referencedDeclaration":39691,"src":"14113:83:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserData_$39678_storage_$","typeString":"mapping(address => struct RewardsDataTypes.UserData storage ref)"}},"id":38777,"indexExpression":{"id":38776,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38737,"src":"14197:4:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14113:89:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserData_$39678_storage","typeString":"struct RewardsDataTypes.UserData storage ref"}},"id":38778,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"accrued","nodeType":"MemberAccess","referencedDeclaration":39677,"src":"14113:108:176","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"14093:128:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38780,"nodeType":"ExpressionStatement","src":"14093:128:176"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38752,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38749,"src":"13997:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":38753,"name":"userAssetBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38743,"src":"14001:17:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory[] memory"}},"id":38754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"14001:24:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13997:28:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38809,"initializationExpression":{"assignments":[38749],"declarations":[{"constant":false,"id":38749,"mutability":"mutable","name":"i","nameLocation":"13990:1:176","nodeType":"VariableDeclaration","scope":38809,"src":"13982:9:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38748,"name":"uint256","nodeType":"ElementaryTypeName","src":"13982:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38751,"initialValue":{"hexValue":"30","id":38750,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13994:1:176","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13982:13:176"},"loopExpression":{"expression":{"id":38757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"14027:3:176","subExpression":{"id":38756,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38749,"src":"14027:1:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38758,"nodeType":"ExpressionStatement","src":"14027:3:176"},"nodeType":"ForStatement","src":"13977:456:176"},{"expression":{"id":38810,"name":"unclaimedRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38746,"src":"14446:16:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":38747,"id":38811,"nodeType":"Return","src":"14439:23:176"}]},"documentation":{"id":38735,"nodeType":"StructuredDocumentation","src":"13373:384:176","text":" @dev Return the accrued unclaimed amount of a reward from a user over a list of distribution\n @param user The address of the user\n @param reward The address of the reward token\n @param userAssetBalances List of structs with the user balance and total supply of a set of assets\n @return unclaimedRewards The accrued rewards for the user until the moment*"},"id":38813,"implemented":true,"kind":"function","modifiers":[],"name":"_getUserReward","nameLocation":"13769:14:176","nodeType":"FunctionDefinition","parameters":{"id":38744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38737,"mutability":"mutable","name":"user","nameLocation":"13797:4:176","nodeType":"VariableDeclaration","scope":38813,"src":"13789:12:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38736,"name":"address","nodeType":"ElementaryTypeName","src":"13789:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38739,"mutability":"mutable","name":"reward","nameLocation":"13815:6:176","nodeType":"VariableDeclaration","scope":38813,"src":"13807:14:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38738,"name":"address","nodeType":"ElementaryTypeName","src":"13807:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38743,"mutability":"mutable","name":"userAssetBalances","nameLocation":"13870:17:176","nodeType":"VariableDeclaration","scope":38813,"src":"13827:60:176","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance[]"},"typeName":{"baseType":{"id":38741,"nodeType":"UserDefinedTypeName","pathNode":{"id":38740,"name":"RewardsDataTypes.UserAssetBalance","nodeType":"IdentifierPath","referencedDeclaration":39673,"src":"13827:33:176"},"referencedDeclaration":39673,"src":"13827:33:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_storage_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance"}},"id":38742,"nodeType":"ArrayTypeName","src":"13827:35:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_storage_$dyn_storage_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance[]"}},"visibility":"internal"}],"src":"13783:108:176"},"returnParameters":{"id":38747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38746,"mutability":"mutable","name":"unclaimedRewards","nameLocation":"13923:16:176","nodeType":"VariableDeclaration","scope":38813,"src":"13915:24:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38745,"name":"uint256","nodeType":"ElementaryTypeName","src":"13915:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13914:26:176"},"scope":39026,"src":"13760:707:176","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":38870,"nodeType":"Block","src":"15001:445:176","statements":[{"assignments":[38830],"declarations":[{"constant":false,"id":38830,"mutability":"mutable","name":"rewardData","nameLocation":"15043:10:176","nodeType":"VariableDeclaration","scope":38870,"src":"15007:46:176","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData"},"typeName":{"id":38829,"nodeType":"UserDefinedTypeName","pathNode":{"id":38828,"name":"RewardsDataTypes.RewardData","nodeType":"IdentifierPath","referencedDeclaration":39692,"src":"15007:27:176"},"referencedDeclaration":39692,"src":"15007:27:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData"}},"visibility":"internal"}],"id":38838,"initialValue":{"baseExpression":{"expression":{"baseExpression":{"id":38831,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"15056:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":38834,"indexExpression":{"expression":{"id":38832,"name":"userAssetBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38821,"src":"15064:16:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory"}},"id":38833,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39668,"src":"15064:22:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15056:31:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":38835,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"rewards","nodeType":"MemberAccess","referencedDeclaration":39697,"src":"15056:39:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData storage ref)"}},"id":38837,"indexExpression":{"id":38836,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38818,"src":"15103:6:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15056:59:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage","typeString":"struct RewardsDataTypes.RewardData storage ref"}},"nodeType":"VariableDeclarationStatement","src":"15007:108:176"},{"assignments":[38840],"declarations":[{"constant":false,"id":38840,"mutability":"mutable","name":"assetUnit","nameLocation":"15129:9:176","nodeType":"VariableDeclaration","scope":38870,"src":"15121:17:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38839,"name":"uint256","nodeType":"ElementaryTypeName","src":"15121:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38848,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":38841,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15141:2:176","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"expression":{"baseExpression":{"id":38842,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"15147:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":38845,"indexExpression":{"expression":{"id":38843,"name":"userAssetBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38821,"src":"15155:16:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory"}},"id":38844,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39668,"src":"15155:22:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15147:31:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":38846,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":39705,"src":"15147:40:176","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"15141:46:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15121:66:176"},{"assignments":[null,38850],"declarations":[null,{"constant":false,"id":38850,"mutability":"mutable","name":"nextIndex","nameLocation":"15204:9:176","nodeType":"VariableDeclaration","scope":38870,"src":"15196:17:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38849,"name":"uint256","nodeType":"ElementaryTypeName","src":"15196:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38857,"initialValue":{"arguments":[{"id":38852,"name":"rewardData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38830,"src":"15232:10:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},{"expression":{"id":38853,"name":"userAssetBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38821,"src":"15244:16:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory"}},"id":38854,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":39672,"src":"15244:28:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38855,"name":"assetUnit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38840,"src":"15274:9:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":38851,"name":"_getAssetIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38989,"src":"15217:14:176","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_RewardData_$39692_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct RewardsDataTypes.RewardData storage pointer,uint256,uint256) view returns (uint256,uint256)"}},"id":38856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15217:67:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"15193:91:176"},{"expression":{"arguments":[{"expression":{"id":38859,"name":"userAssetBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38821,"src":"15325:16:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance memory"}},"id":38860,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"userBalance","nodeType":"MemberAccess","referencedDeclaration":39670,"src":"15325:28:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38861,"name":"nextIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38850,"src":"15363:9:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"baseExpression":{"expression":{"id":38862,"name":"rewardData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38830,"src":"15382:10:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},"id":38863,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"usersData","nodeType":"MemberAccess","referencedDeclaration":39691,"src":"15382:20:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserData_$39678_storage_$","typeString":"mapping(address => struct RewardsDataTypes.UserData storage ref)"}},"id":38865,"indexExpression":{"id":38864,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38816,"src":"15403:4:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15382:26:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserData_$39678_storage","typeString":"struct RewardsDataTypes.UserData storage ref"}},"id":38866,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"index","nodeType":"MemberAccess","referencedDeclaration":39675,"src":"15382:32:176","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},{"id":38867,"name":"assetUnit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38840,"src":"15424:9:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint104","typeString":"uint104"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":38858,"name":"_getRewards","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38898,"src":"15304:11:176","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) pure returns (uint256)"}},"id":38868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"15304:137:176","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":38825,"id":38869,"nodeType":"Return","src":"15291:150:176"}]},"documentation":{"id":38814,"nodeType":"StructuredDocumentation","src":"14471:362:176","text":" @dev Calculates the pending (not yet accrued) rewards since the last user action\n @param user The address of the user\n @param reward The address of the reward token\n @param userAssetBalance struct with the user balance and total supply of the incentivized asset\n @return The pending rewards for the user since the last user action*"},"id":38871,"implemented":true,"kind":"function","modifiers":[],"name":"_getPendingRewards","nameLocation":"14845:18:176","nodeType":"FunctionDefinition","parameters":{"id":38822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38816,"mutability":"mutable","name":"user","nameLocation":"14877:4:176","nodeType":"VariableDeclaration","scope":38871,"src":"14869:12:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38815,"name":"address","nodeType":"ElementaryTypeName","src":"14869:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38818,"mutability":"mutable","name":"reward","nameLocation":"14895:6:176","nodeType":"VariableDeclaration","scope":38871,"src":"14887:14:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38817,"name":"address","nodeType":"ElementaryTypeName","src":"14887:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38821,"mutability":"mutable","name":"userAssetBalance","nameLocation":"14948:16:176","nodeType":"VariableDeclaration","scope":38871,"src":"14907:57:176","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance"},"typeName":{"id":38820,"nodeType":"UserDefinedTypeName","pathNode":{"id":38819,"name":"RewardsDataTypes.UserAssetBalance","nodeType":"IdentifierPath","referencedDeclaration":39673,"src":"14907:33:176"},"referencedDeclaration":39673,"src":"14907:33:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_storage_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance"}},"visibility":"internal"}],"src":"14863:105:176"},"returnParameters":{"id":38825,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38824,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38871,"src":"14992:7:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38823,"name":"uint256","nodeType":"ElementaryTypeName","src":"14992:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14991:9:176"},"scope":39026,"src":"14836:610:176","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":38897,"nodeType":"Block","src":"15991:147:176","statements":[{"assignments":[38886],"declarations":[{"constant":false,"id":38886,"mutability":"mutable","name":"result","nameLocation":"16005:6:176","nodeType":"VariableDeclaration","scope":38897,"src":"15997:14:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38885,"name":"uint256","nodeType":"ElementaryTypeName","src":"15997:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38893,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38887,"name":"userBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38874,"src":"16014:11:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38888,"name":"reserveIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38876,"src":"16029:12:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":38889,"name":"userIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38878,"src":"16044:9:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16029:24:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":38891,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"16028:26:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16014:40:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15997:57:176"},{"AST":{"nodeType":"YulBlock","src":"16069:46:176","statements":[{"nodeType":"YulAssignment","src":"16077:32:176","value":{"arguments":[{"name":"result","nodeType":"YulIdentifier","src":"16091:6:176"},{"name":"assetUnit","nodeType":"YulIdentifier","src":"16099:9:176"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"16087:3:176"},"nodeType":"YulFunctionCall","src":"16087:22:176"},"variableNames":[{"name":"result","nodeType":"YulIdentifier","src":"16077:6:176"}]}]},"evmVersion":"london","externalReferences":[{"declaration":38880,"isOffset":false,"isSlot":false,"src":"16099:9:176","valueSize":1},{"declaration":38886,"isOffset":false,"isSlot":false,"src":"16077:6:176","valueSize":1},{"declaration":38886,"isOffset":false,"isSlot":false,"src":"16091:6:176","valueSize":1}],"id":38894,"nodeType":"InlineAssembly","src":"16060:55:176"},{"expression":{"id":38895,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38886,"src":"16127:6:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":38884,"id":38896,"nodeType":"Return","src":"16120:13:176"}]},"documentation":{"id":38872,"nodeType":"StructuredDocumentation","src":"15450:384:176","text":" @dev Internal function for the calculation of user's rewards on a distribution\n @param userBalance Balance of the user asset on a distribution\n @param reserveIndex Current index of the distribution\n @param userIndex Index stored for the user, representation his staking moment\n @param assetUnit One unit of asset (10**decimals)\n @return The rewards*"},"id":38898,"implemented":true,"kind":"function","modifiers":[],"name":"_getRewards","nameLocation":"15846:11:176","nodeType":"FunctionDefinition","parameters":{"id":38881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38874,"mutability":"mutable","name":"userBalance","nameLocation":"15871:11:176","nodeType":"VariableDeclaration","scope":38898,"src":"15863:19:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38873,"name":"uint256","nodeType":"ElementaryTypeName","src":"15863:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38876,"mutability":"mutable","name":"reserveIndex","nameLocation":"15896:12:176","nodeType":"VariableDeclaration","scope":38898,"src":"15888:20:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38875,"name":"uint256","nodeType":"ElementaryTypeName","src":"15888:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38878,"mutability":"mutable","name":"userIndex","nameLocation":"15922:9:176","nodeType":"VariableDeclaration","scope":38898,"src":"15914:17:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38877,"name":"uint256","nodeType":"ElementaryTypeName","src":"15914:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38880,"mutability":"mutable","name":"assetUnit","nameLocation":"15945:9:176","nodeType":"VariableDeclaration","scope":38898,"src":"15937:17:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38879,"name":"uint256","nodeType":"ElementaryTypeName","src":"15937:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15857:101:176"},"returnParameters":{"id":38884,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38883,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38898,"src":"15982:7:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38882,"name":"uint256","nodeType":"ElementaryTypeName","src":"15982:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15981:9:176"},"scope":39026,"src":"15837:301:176","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":38988,"nodeType":"Block","src":"16620:803:176","statements":[{"assignments":[38914],"declarations":[{"constant":false,"id":38914,"mutability":"mutable","name":"oldIndex","nameLocation":"16634:8:176","nodeType":"VariableDeclaration","scope":38988,"src":"16626:16:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38913,"name":"uint256","nodeType":"ElementaryTypeName","src":"16626:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38917,"initialValue":{"expression":{"id":38915,"name":"rewardData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38902,"src":"16645:10:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},"id":38916,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"index","nodeType":"MemberAccess","referencedDeclaration":39680,"src":"16645:16:176","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"nodeType":"VariableDeclarationStatement","src":"16626:35:176"},{"assignments":[38919],"declarations":[{"constant":false,"id":38919,"mutability":"mutable","name":"distributionEnd","nameLocation":"16675:15:176","nodeType":"VariableDeclaration","scope":38988,"src":"16667:23:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38918,"name":"uint256","nodeType":"ElementaryTypeName","src":"16667:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38922,"initialValue":{"expression":{"id":38920,"name":"rewardData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38902,"src":"16693:10:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},"id":38921,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"distributionEnd","nodeType":"MemberAccess","referencedDeclaration":39686,"src":"16693:26:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"VariableDeclarationStatement","src":"16667:52:176"},{"assignments":[38924],"declarations":[{"constant":false,"id":38924,"mutability":"mutable","name":"emissionPerSecond","nameLocation":"16733:17:176","nodeType":"VariableDeclaration","scope":38988,"src":"16725:25:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38923,"name":"uint256","nodeType":"ElementaryTypeName","src":"16725:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38927,"initialValue":{"expression":{"id":38925,"name":"rewardData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38902,"src":"16753:10:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},"id":38926,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"emissionPerSecond","nodeType":"MemberAccess","referencedDeclaration":39682,"src":"16753:28:176","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"nodeType":"VariableDeclarationStatement","src":"16725:56:176"},{"assignments":[38929],"declarations":[{"constant":false,"id":38929,"mutability":"mutable","name":"lastUpdateTimestamp","nameLocation":"16795:19:176","nodeType":"VariableDeclaration","scope":38988,"src":"16787:27:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38928,"name":"uint256","nodeType":"ElementaryTypeName","src":"16787:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38932,"initialValue":{"expression":{"id":38930,"name":"rewardData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38902,"src":"16817:10:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData storage pointer"}},"id":38931,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"lastUpdateTimestamp","nodeType":"MemberAccess","referencedDeclaration":39684,"src":"16817:30:176","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"VariableDeclarationStatement","src":"16787:60:176"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":38948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":38944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":38939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38933,"name":"emissionPerSecond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38924,"src":"16865:17:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":38934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16886:1:176","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16865:22:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38936,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38904,"src":"16897:11:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":38937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16912:1:176","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16897:16:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16865:48:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38940,"name":"lastUpdateTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38929,"src":"16923:19:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":38941,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"16946:5:176","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":38942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"16946:15:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16923:38:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16865:96:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38945,"name":"lastUpdateTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38929,"src":"16971:19:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":38946,"name":"distributionEnd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38919,"src":"16994:15:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16971:38:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16865:144:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38954,"nodeType":"IfStatement","src":"16854:204:176","trueBody":{"id":38953,"nodeType":"Block","src":"17016:42:176","statements":[{"expression":{"components":[{"id":38949,"name":"oldIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38914,"src":"17032:8:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38950,"name":"oldIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38914,"src":"17042:8:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":38951,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17031:20:176","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":38912,"id":38952,"nodeType":"Return","src":"17024:27:176"}]}},{"assignments":[38956],"declarations":[{"constant":false,"id":38956,"mutability":"mutable","name":"currentTimestamp","nameLocation":"17072:16:176","nodeType":"VariableDeclaration","scope":38988,"src":"17064:24:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38955,"name":"uint256","nodeType":"ElementaryTypeName","src":"17064:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38965,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":38957,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"17091:5:176","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":38958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"17091:15:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":38959,"name":"distributionEnd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38919,"src":"17109:15:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17091:33:176","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":38962,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"17157:5:176","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":38963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"17157:15:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"17091:81:176","trueExpression":{"id":38961,"name":"distributionEnd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38919,"src":"17133:15:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17064:108:176"},{"assignments":[38967],"declarations":[{"constant":false,"id":38967,"mutability":"mutable","name":"timeDelta","nameLocation":"17186:9:176","nodeType":"VariableDeclaration","scope":38988,"src":"17178:17:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38966,"name":"uint256","nodeType":"ElementaryTypeName","src":"17178:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38971,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38968,"name":"currentTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38956,"src":"17198:16:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":38969,"name":"lastUpdateTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38929,"src":"17217:19:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17198:38:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17178:58:176"},{"assignments":[38973],"declarations":[{"constant":false,"id":38973,"mutability":"mutable","name":"firstTerm","nameLocation":"17250:9:176","nodeType":"VariableDeclaration","scope":38988,"src":"17242:17:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38972,"name":"uint256","nodeType":"ElementaryTypeName","src":"17242:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":38979,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38974,"name":"emissionPerSecond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38924,"src":"17262:17:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":38975,"name":"timeDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38967,"src":"17282:9:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17262:29:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":38977,"name":"assetUnit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38906,"src":"17294:9:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17262:41:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17242:61:176"},{"AST":{"nodeType":"YulBlock","src":"17318:54:176","statements":[{"nodeType":"YulAssignment","src":"17326:40:176","value":{"arguments":[{"name":"firstTerm","nodeType":"YulIdentifier","src":"17343:9:176"},{"name":"totalSupply","nodeType":"YulIdentifier","src":"17354:11:176"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"17339:3:176"},"nodeType":"YulFunctionCall","src":"17339:27:176"},"variableNames":[{"name":"firstTerm","nodeType":"YulIdentifier","src":"17326:9:176"}]}]},"evmVersion":"london","externalReferences":[{"declaration":38973,"isOffset":false,"isSlot":false,"src":"17326:9:176","valueSize":1},{"declaration":38973,"isOffset":false,"isSlot":false,"src":"17343:9:176","valueSize":1},{"declaration":38904,"isOffset":false,"isSlot":false,"src":"17354:11:176","valueSize":1}],"id":38980,"nodeType":"InlineAssembly","src":"17309:63:176"},{"expression":{"components":[{"id":38981,"name":"oldIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38914,"src":"17385:8:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38982,"name":"firstTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38973,"src":"17396:9:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":38983,"name":"oldIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38914,"src":"17408:8:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17396:20:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":38985,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17395:22:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":38986,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17384:34:176","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":38912,"id":38987,"nodeType":"Return","src":"17377:41:176"}]},"documentation":{"id":38899,"nodeType":"StructuredDocumentation","src":"16142:306:176","text":" @dev Calculates the next value of an specific distribution index, with validations\n @param rewardData Storage pointer to the distribution reward config\n @param totalSupply of the asset being rewarded\n @param assetUnit One unit of asset (10**decimals)\n @return The new index.*"},"id":38989,"implemented":true,"kind":"function","modifiers":[],"name":"_getAssetIndex","nameLocation":"16460:14:176","nodeType":"FunctionDefinition","parameters":{"id":38907,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38902,"mutability":"mutable","name":"rewardData","nameLocation":"16516:10:176","nodeType":"VariableDeclaration","scope":38989,"src":"16480:46:176","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData"},"typeName":{"id":38901,"nodeType":"UserDefinedTypeName","pathNode":{"id":38900,"name":"RewardsDataTypes.RewardData","nodeType":"IdentifierPath","referencedDeclaration":39692,"src":"16480:27:176"},"referencedDeclaration":39692,"src":"16480:27:176","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData"}},"visibility":"internal"},{"constant":false,"id":38904,"mutability":"mutable","name":"totalSupply","nameLocation":"16540:11:176","nodeType":"VariableDeclaration","scope":38989,"src":"16532:19:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38903,"name":"uint256","nodeType":"ElementaryTypeName","src":"16532:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38906,"mutability":"mutable","name":"assetUnit","nameLocation":"16565:9:176","nodeType":"VariableDeclaration","scope":38989,"src":"16557:17:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38905,"name":"uint256","nodeType":"ElementaryTypeName","src":"16557:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16474:104:176"},"returnParameters":{"id":38912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38909,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38989,"src":"16602:7:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38908,"name":"uint256","nodeType":"ElementaryTypeName","src":"16602:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38911,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38989,"src":"16611:7:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38910,"name":"uint256","nodeType":"ElementaryTypeName","src":"16611:7:176","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16601:18:176"},"scope":39026,"src":"16451:972:176","stateMutability":"view","virtual":false,"visibility":"internal"},{"documentation":{"id":38990,"nodeType":"StructuredDocumentation","src":"17427:332:176","text":" @dev Get user balances and total supply of all the assets specified by the assets parameter\n @param assets List of assets to retrieve user balance and total supply\n @param user Address of the user\n @return userAssetBalances contains a list of structs with user balance and total supply of the given assets"},"id":39002,"implemented":false,"kind":"function","modifiers":[],"name":"_getUserAssetBalances","nameLocation":"17771:21:176","nodeType":"FunctionDefinition","parameters":{"id":38996,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38993,"mutability":"mutable","name":"assets","nameLocation":"17817:6:176","nodeType":"VariableDeclaration","scope":39002,"src":"17798:25:176","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":38991,"name":"address","nodeType":"ElementaryTypeName","src":"17798:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":38992,"nodeType":"ArrayTypeName","src":"17798:9:176","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":38995,"mutability":"mutable","name":"user","nameLocation":"17837:4:176","nodeType":"VariableDeclaration","scope":39002,"src":"17829:12:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38994,"name":"address","nodeType":"ElementaryTypeName","src":"17829:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17792:53:176"},"returnParameters":{"id":39001,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39000,"mutability":"mutable","name":"userAssetBalances","nameLocation":"17920:17:176","nodeType":"VariableDeclaration","scope":39002,"src":"17877:60:176","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance[]"},"typeName":{"baseType":{"id":38998,"nodeType":"UserDefinedTypeName","pathNode":{"id":38997,"name":"RewardsDataTypes.UserAssetBalance","nodeType":"IdentifierPath","referencedDeclaration":39673,"src":"17877:33:176"},"referencedDeclaration":39673,"src":"17877:33:176","typeDescriptions":{"typeIdentifier":"t_struct$_UserAssetBalance_$39673_storage_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance"}},"id":38999,"nodeType":"ArrayTypeName","src":"17877:35:176","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_UserAssetBalance_$39673_storage_$dyn_storage_ptr","typeString":"struct RewardsDataTypes.UserAssetBalance[]"}},"visibility":"internal"}],"src":"17876:62:176"},"scope":39026,"src":"17762:177:176","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[39521],"body":{"id":39015,"nodeType":"Block","src":"18052:41:176","statements":[{"expression":{"expression":{"baseExpression":{"id":39010,"name":"_assets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37605,"src":"18065:7:176","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AssetData_$39706_storage_$","typeString":"mapping(address => struct RewardsDataTypes.AssetData storage ref)"}},"id":39012,"indexExpression":{"id":39011,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39005,"src":"18073:5:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18065:14:176","typeDescriptions":{"typeIdentifier":"t_struct$_AssetData_$39706_storage","typeString":"struct RewardsDataTypes.AssetData storage ref"}},"id":39013,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":39705,"src":"18065:23:176","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":39009,"id":39014,"nodeType":"Return","src":"18058:30:176"}]},"documentation":{"id":39003,"nodeType":"StructuredDocumentation","src":"17943:35:176","text":"@inheritdoc IRewardsDistributor"},"functionSelector":"9efd6f72","id":39016,"implemented":true,"kind":"function","modifiers":[],"name":"getAssetDecimals","nameLocation":"17990:16:176","nodeType":"FunctionDefinition","parameters":{"id":39006,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39005,"mutability":"mutable","name":"asset","nameLocation":"18015:5:176","nodeType":"VariableDeclaration","scope":39016,"src":"18007:13:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39004,"name":"address","nodeType":"ElementaryTypeName","src":"18007:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18006:15:176"},"returnParameters":{"id":39009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39008,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39016,"src":"18045:5:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":39007,"name":"uint8","nodeType":"ElementaryTypeName","src":"18045:5:176","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"18044:7:176"},"scope":39026,"src":"17981:112:176","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[39533],"body":{"id":39024,"nodeType":"Block","src":"18197:34:176","statements":[{"expression":{"id":39022,"name":"EMISSION_MANAGER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37598,"src":"18210:16:176","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":39021,"id":39023,"nodeType":"Return","src":"18203:23:176"}]},"documentation":{"id":39017,"nodeType":"StructuredDocumentation","src":"18097:35:176","text":"@inheritdoc IRewardsDistributor"},"functionSelector":"92074b08","id":39025,"implemented":true,"kind":"function","modifiers":[],"name":"getEmissionManager","nameLocation":"18144:18:176","nodeType":"FunctionDefinition","parameters":{"id":39018,"nodeType":"ParameterList","parameters":[],"src":"18162:2:176"},"returnParameters":{"id":39021,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39020,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39025,"src":"18188:7:176","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39019,"name":"address","nodeType":"ElementaryTypeName","src":"18188:7:176","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18187:9:176"},"scope":39026,"src":"18135:96:176","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":39027,"src":"659:17574:176","usedErrors":[]}],"src":"37:18197:176"},"id":176},"contracts/rewards/interfaces/IEmissionManager.sol":{"ast":{"absolutePath":"contracts/rewards/interfaces/IEmissionManager.sol","exportedSymbols":{"IEACAggregatorProxy":[34482],"IEmissionManager":[39132],"IRewardsController":[39352],"ITransferStrategyBase":[39643],"RewardsDataTypes":[39707]},"id":39133,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":39028,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:177"},{"absolutePath":"contracts/misc/interfaces/IEACAggregatorProxy.sol","file":"../../misc/interfaces/IEACAggregatorProxy.sol","id":39030,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39133,"sourceUnit":34483,"src":"63:82:177","symbolAliases":[{"foreign":{"id":39029,"name":"IEACAggregatorProxy","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:19:177","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/rewards/libraries/RewardsDataTypes.sol","file":"../libraries/RewardsDataTypes.sol","id":39032,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39133,"sourceUnit":39708,"src":"146:67:177","symbolAliases":[{"foreign":{"id":39031,"name":"RewardsDataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"154:16:177","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/rewards/interfaces/ITransferStrategyBase.sol","file":"./ITransferStrategyBase.sol","id":39034,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39133,"sourceUnit":39644,"src":"214:66:177","symbolAliases":[{"foreign":{"id":39033,"name":"ITransferStrategyBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"222:21:177","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/rewards/interfaces/IRewardsController.sol","file":"./IRewardsController.sol","id":39036,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39133,"sourceUnit":39353,"src":"281:60:177","symbolAliases":[{"foreign":{"id":39035,"name":"IRewardsController","nodeType":"Identifier","overloadedDeclarations":[],"src":"289:18:177","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IEmissionManager","contractDependencies":[],"contractKind":"interface","documentation":{"id":39037,"nodeType":"StructuredDocumentation","src":"343:114:177","text":" @title IEmissionManager\n @author Aave\n @notice Defines the basic interface for the Emission Manager"},"fullyImplemented":false,"id":39132,"linearizedBaseContracts":[39132],"name":"IEmissionManager","nameLocation":"468:16:177","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":39038,"nodeType":"StructuredDocumentation","src":"489:247:177","text":" @dev Emitted when the admin of a reward emission is updated.\n @param reward The address of the rewarding token\n @param oldAdmin The address of the old emission admin\n @param newAdmin The address of the new emission admin"},"id":39046,"name":"EmissionAdminUpdated","nameLocation":"745:20:177","nodeType":"EventDefinition","parameters":{"id":39045,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39040,"indexed":true,"mutability":"mutable","name":"reward","nameLocation":"787:6:177","nodeType":"VariableDeclaration","scope":39046,"src":"771:22:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39039,"name":"address","nodeType":"ElementaryTypeName","src":"771:7:177","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39042,"indexed":true,"mutability":"mutable","name":"oldAdmin","nameLocation":"815:8:177","nodeType":"VariableDeclaration","scope":39046,"src":"799:24:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39041,"name":"address","nodeType":"ElementaryTypeName","src":"799:7:177","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39044,"indexed":true,"mutability":"mutable","name":"newAdmin","nameLocation":"845:8:177","nodeType":"VariableDeclaration","scope":39046,"src":"829:24:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39043,"name":"address","nodeType":"ElementaryTypeName","src":"829:7:177","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"765:92:177"},"src":"739:119:177"},{"documentation":{"id":39047,"nodeType":"StructuredDocumentation","src":"862:998:177","text":" @dev Configure assets to incentivize with an emission of rewards per second until the end of distribution.\n @dev Only callable by the emission admin of the given rewards\n @param config The assets configuration input, the list of structs contains the following fields:\n   uint104 emissionPerSecond: The emission per second following rewards unit decimals.\n   uint256 totalSupply: The total supply of the asset to incentivize\n   uint40 distributionEnd: The end of the distribution of the incentives for an asset\n   address asset: The asset address to incentivize\n   address reward: The reward token address\n   ITransferStrategy transferStrategy: The TransferStrategy address with the install hook and claim logic.\n   IEACAggregatorProxy rewardOracle: The Price Oracle of a reward to visualize the incentives at the UI Frontend.\n                                     Must follow Chainlink Aggregator IEACAggregatorProxy interface to be compatible."},"functionSelector":"955c2ad7","id":39054,"implemented":false,"kind":"function","modifiers":[],"name":"configureAssets","nameLocation":"1872:15:177","nodeType":"FunctionDefinition","parameters":{"id":39052,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39051,"mutability":"mutable","name":"config","nameLocation":"1933:6:177","nodeType":"VariableDeclaration","scope":39054,"src":"1888:51:177","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput[]"},"typeName":{"baseType":{"id":39049,"nodeType":"UserDefinedTypeName","pathNode":{"id":39048,"name":"RewardsDataTypes.RewardsConfigInput","nodeType":"IdentifierPath","referencedDeclaration":39666,"src":"1888:35:177"},"referencedDeclaration":39666,"src":"1888:35:177","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_storage_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput"}},"id":39050,"nodeType":"ArrayTypeName","src":"1888:37:177","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_storage_$dyn_storage_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput[]"}},"visibility":"internal"}],"src":"1887:53:177"},"returnParameters":{"id":39053,"nodeType":"ParameterList","parameters":[],"src":"1949:0:177"},"scope":39132,"src":"1863:87:177","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39055,"nodeType":"StructuredDocumentation","src":"1954:305:177","text":" @dev Sets a TransferStrategy logic contract that determines the logic of the rewards transfer\n @dev Only callable by the emission admin of the given reward\n @param reward The address of the reward token\n @param transferStrategy The address of the TransferStrategy logic contract"},"functionSelector":"e15ac623","id":39063,"implemented":false,"kind":"function","modifiers":[],"name":"setTransferStrategy","nameLocation":"2271:19:177","nodeType":"FunctionDefinition","parameters":{"id":39061,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39057,"mutability":"mutable","name":"reward","nameLocation":"2299:6:177","nodeType":"VariableDeclaration","scope":39063,"src":"2291:14:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39056,"name":"address","nodeType":"ElementaryTypeName","src":"2291:7:177","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39060,"mutability":"mutable","name":"transferStrategy","nameLocation":"2329:16:177","nodeType":"VariableDeclaration","scope":39063,"src":"2307:38:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"},"typeName":{"id":39059,"nodeType":"UserDefinedTypeName","pathNode":{"id":39058,"name":"ITransferStrategyBase","nodeType":"IdentifierPath","referencedDeclaration":39643,"src":"2307:21:177"},"referencedDeclaration":39643,"src":"2307:21:177","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}},"visibility":"internal"}],"src":"2290:56:177"},"returnParameters":{"id":39062,"nodeType":"ParameterList","parameters":[],"src":"2355:0:177"},"scope":39132,"src":"2262:94:177","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39064,"nodeType":"StructuredDocumentation","src":"2360:660:177","text":" @dev Sets an Aave Oracle contract to enforce rewards with a source of value.\n @dev Only callable by the emission admin of the given reward\n @notice At the moment of reward configuration, the Incentives Controller performs\n a check to see if the reward asset oracle is compatible with IEACAggregator proxy.\n This check is enforced for integrators to be able to show incentives at\n the current Aave UI without the need to setup an external price registry\n @param reward The address of the reward to set the price aggregator\n @param rewardOracle The address of price aggregator that follows IEACAggregatorProxy interface"},"functionSelector":"5453ba10","id":39072,"implemented":false,"kind":"function","modifiers":[],"name":"setRewardOracle","nameLocation":"3032:15:177","nodeType":"FunctionDefinition","parameters":{"id":39070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39066,"mutability":"mutable","name":"reward","nameLocation":"3056:6:177","nodeType":"VariableDeclaration","scope":39072,"src":"3048:14:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39065,"name":"address","nodeType":"ElementaryTypeName","src":"3048:7:177","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39069,"mutability":"mutable","name":"rewardOracle","nameLocation":"3084:12:177","nodeType":"VariableDeclaration","scope":39072,"src":"3064:32:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"},"typeName":{"id":39068,"nodeType":"UserDefinedTypeName","pathNode":{"id":39067,"name":"IEACAggregatorProxy","nodeType":"IdentifierPath","referencedDeclaration":34482,"src":"3064:19:177"},"referencedDeclaration":34482,"src":"3064:19:177","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"visibility":"internal"}],"src":"3047:50:177"},"returnParameters":{"id":39071,"nodeType":"ParameterList","parameters":[],"src":"3106:0:177"},"scope":39132,"src":"3023:84:177","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39073,"nodeType":"StructuredDocumentation","src":"3111:318:177","text":" @dev Sets the end date for the distribution\n @dev Only callable by the emission admin of the given reward\n @param asset The asset to incentivize\n @param reward The reward token that incentives the asset\n @param newDistributionEnd The end date of the incentivization, in unix time format*"},"functionSelector":"c5a7b538","id":39082,"implemented":false,"kind":"function","modifiers":[],"name":"setDistributionEnd","nameLocation":"3441:18:177","nodeType":"FunctionDefinition","parameters":{"id":39080,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39075,"mutability":"mutable","name":"asset","nameLocation":"3468:5:177","nodeType":"VariableDeclaration","scope":39082,"src":"3460:13:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39074,"name":"address","nodeType":"ElementaryTypeName","src":"3460:7:177","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39077,"mutability":"mutable","name":"reward","nameLocation":"3483:6:177","nodeType":"VariableDeclaration","scope":39082,"src":"3475:14:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39076,"name":"address","nodeType":"ElementaryTypeName","src":"3475:7:177","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39079,"mutability":"mutable","name":"newDistributionEnd","nameLocation":"3498:18:177","nodeType":"VariableDeclaration","scope":39082,"src":"3491:25:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":39078,"name":"uint32","nodeType":"ElementaryTypeName","src":"3491:6:177","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"3459:58:177"},"returnParameters":{"id":39081,"nodeType":"ParameterList","parameters":[],"src":"3526:0:177"},"scope":39132,"src":"3432:95:177","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39083,"nodeType":"StructuredDocumentation","src":"3531:272:177","text":" @dev Sets the emission per second of a set of reward distributions\n @param asset The asset is being incentivized\n @param rewards List of reward addresses are being distributed\n @param newEmissionsPerSecond List of new reward emissions per second"},"functionSelector":"f996868b","id":39094,"implemented":false,"kind":"function","modifiers":[],"name":"setEmissionPerSecond","nameLocation":"3815:20:177","nodeType":"FunctionDefinition","parameters":{"id":39092,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39085,"mutability":"mutable","name":"asset","nameLocation":"3849:5:177","nodeType":"VariableDeclaration","scope":39094,"src":"3841:13:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39084,"name":"address","nodeType":"ElementaryTypeName","src":"3841:7:177","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39088,"mutability":"mutable","name":"rewards","nameLocation":"3879:7:177","nodeType":"VariableDeclaration","scope":39094,"src":"3860:26:177","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":39086,"name":"address","nodeType":"ElementaryTypeName","src":"3860:7:177","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":39087,"nodeType":"ArrayTypeName","src":"3860:9:177","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":39091,"mutability":"mutable","name":"newEmissionsPerSecond","nameLocation":"3910:21:177","nodeType":"VariableDeclaration","scope":39094,"src":"3892:39:177","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint88_$dyn_calldata_ptr","typeString":"uint88[]"},"typeName":{"baseType":{"id":39089,"name":"uint88","nodeType":"ElementaryTypeName","src":"3892:6:177","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"id":39090,"nodeType":"ArrayTypeName","src":"3892:8:177","typeDescriptions":{"typeIdentifier":"t_array$_t_uint88_$dyn_storage_ptr","typeString":"uint88[]"}},"visibility":"internal"}],"src":"3835:100:177"},"returnParameters":{"id":39093,"nodeType":"ParameterList","parameters":[],"src":"3944:0:177"},"scope":39132,"src":"3806:139:177","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39095,"nodeType":"StructuredDocumentation","src":"3949:239:177","text":" @dev Whitelists an address to claim the rewards on behalf of another address\n @dev Only callable by the owner of the EmissionManager\n @param user The address of the user\n @param claimer The address of the claimer"},"functionSelector":"f5cf673b","id":39102,"implemented":false,"kind":"function","modifiers":[],"name":"setClaimer","nameLocation":"4200:10:177","nodeType":"FunctionDefinition","parameters":{"id":39100,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39097,"mutability":"mutable","name":"user","nameLocation":"4219:4:177","nodeType":"VariableDeclaration","scope":39102,"src":"4211:12:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39096,"name":"address","nodeType":"ElementaryTypeName","src":"4211:7:177","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39099,"mutability":"mutable","name":"claimer","nameLocation":"4233:7:177","nodeType":"VariableDeclaration","scope":39102,"src":"4225:15:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39098,"name":"address","nodeType":"ElementaryTypeName","src":"4225:7:177","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4210:31:177"},"returnParameters":{"id":39101,"nodeType":"ParameterList","parameters":[],"src":"4250:0:177"},"scope":39132,"src":"4191:60:177","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39103,"nodeType":"StructuredDocumentation","src":"4255:234:177","text":" @dev Updates the admin of the reward emission\n @dev Only callable by the owner of the EmissionManager\n @param reward The address of the reward token\n @param admin The address of the new admin of the emission"},"functionSelector":"a286c6b4","id":39110,"implemented":false,"kind":"function","modifiers":[],"name":"setEmissionAdmin","nameLocation":"4501:16:177","nodeType":"FunctionDefinition","parameters":{"id":39108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39105,"mutability":"mutable","name":"reward","nameLocation":"4526:6:177","nodeType":"VariableDeclaration","scope":39110,"src":"4518:14:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39104,"name":"address","nodeType":"ElementaryTypeName","src":"4518:7:177","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39107,"mutability":"mutable","name":"admin","nameLocation":"4542:5:177","nodeType":"VariableDeclaration","scope":39110,"src":"4534:13:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39106,"name":"address","nodeType":"ElementaryTypeName","src":"4534:7:177","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4517:31:177"},"returnParameters":{"id":39109,"nodeType":"ParameterList","parameters":[],"src":"4557:0:177"},"scope":39132,"src":"4492:66:177","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39111,"nodeType":"StructuredDocumentation","src":"4562:194:177","text":" @dev Updates the address of the rewards controller\n @dev Only callable by the owner of the EmissionManager\n @param controller the address of the RewardsController contract"},"functionSelector":"bee36bb3","id":39116,"implemented":false,"kind":"function","modifiers":[],"name":"setRewardsController","nameLocation":"4768:20:177","nodeType":"FunctionDefinition","parameters":{"id":39114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39113,"mutability":"mutable","name":"controller","nameLocation":"4797:10:177","nodeType":"VariableDeclaration","scope":39116,"src":"4789:18:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39112,"name":"address","nodeType":"ElementaryTypeName","src":"4789:7:177","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4788:20:177"},"returnParameters":{"id":39115,"nodeType":"ParameterList","parameters":[],"src":"4817:0:177"},"scope":39132,"src":"4759:59:177","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39117,"nodeType":"StructuredDocumentation","src":"4822:117:177","text":" @dev Returns the rewards controller address\n @return The address of the RewardsController contract"},"functionSelector":"de262738","id":39123,"implemented":false,"kind":"function","modifiers":[],"name":"getRewardsController","nameLocation":"4951:20:177","nodeType":"FunctionDefinition","parameters":{"id":39118,"nodeType":"ParameterList","parameters":[],"src":"4971:2:177"},"returnParameters":{"id":39122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39121,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39123,"src":"4997:18:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"},"typeName":{"id":39120,"nodeType":"UserDefinedTypeName","pathNode":{"id":39119,"name":"IRewardsController","nodeType":"IdentifierPath","referencedDeclaration":39352,"src":"4997:18:177"},"referencedDeclaration":39352,"src":"4997:18:177","typeDescriptions":{"typeIdentifier":"t_contract$_IRewardsController_$39352","typeString":"contract IRewardsController"}},"visibility":"internal"}],"src":"4996:20:177"},"scope":39132,"src":"4942:75:177","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39124,"nodeType":"StructuredDocumentation","src":"5021:164:177","text":" @dev Returns the admin of the given reward emission\n @param reward The address of the reward token\n @return The address of the emission admin"},"functionSelector":"529b1e87","id":39131,"implemented":false,"kind":"function","modifiers":[],"name":"getEmissionAdmin","nameLocation":"5197:16:177","nodeType":"FunctionDefinition","parameters":{"id":39127,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39126,"mutability":"mutable","name":"reward","nameLocation":"5222:6:177","nodeType":"VariableDeclaration","scope":39131,"src":"5214:14:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39125,"name":"address","nodeType":"ElementaryTypeName","src":"5214:7:177","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5213:16:177"},"returnParameters":{"id":39130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39129,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39131,"src":"5253:7:177","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39128,"name":"address","nodeType":"ElementaryTypeName","src":"5253:7:177","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5252:9:177"},"scope":39132,"src":"5188:74:177","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":39133,"src":"458:4806:177","usedErrors":[]}],"src":"37:5228:177"},"id":177},"contracts/rewards/interfaces/IPullRewardsTransferStrategy.sol":{"ast":{"absolutePath":"contracts/rewards/interfaces/IPullRewardsTransferStrategy.sol","exportedSymbols":{"IPullRewardsTransferStrategy":[39146],"ITransferStrategyBase":[39643]},"id":39147,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":39134,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:178"},{"absolutePath":"contracts/rewards/interfaces/ITransferStrategyBase.sol","file":"./ITransferStrategyBase.sol","id":39136,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39147,"sourceUnit":39644,"src":"63:66:178","symbolAliases":[{"foreign":{"id":39135,"name":"ITransferStrategyBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:21:178","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":39138,"name":"ITransferStrategyBase","nodeType":"IdentifierPath","referencedDeclaration":39643,"src":"237:21:178"},"id":39139,"nodeType":"InheritanceSpecifier","src":"237:21:178"}],"canonicalName":"IPullRewardsTransferStrategy","contractDependencies":[],"contractKind":"interface","documentation":{"id":39137,"nodeType":"StructuredDocumentation","src":"131:63:178","text":" @title IPullRewardsTransferStrategy\n @author Aave*"},"fullyImplemented":false,"id":39146,"linearizedBaseContracts":[39146,39643],"name":"IPullRewardsTransferStrategy","nameLocation":"205:28:178","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":39140,"nodeType":"StructuredDocumentation","src":"263:51:178","text":" @return Address of the rewards vault"},"functionSelector":"e23ddec5","id":39145,"implemented":false,"kind":"function","modifiers":[],"name":"getRewardsVault","nameLocation":"326:15:178","nodeType":"FunctionDefinition","parameters":{"id":39141,"nodeType":"ParameterList","parameters":[],"src":"341:2:178"},"returnParameters":{"id":39144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39143,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39145,"src":"367:7:178","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39142,"name":"address","nodeType":"ElementaryTypeName","src":"367:7:178","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"366:9:178"},"scope":39146,"src":"317:59:178","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":39147,"src":"195:183:178","usedErrors":[]}],"src":"37:342:178"},"id":178},"contracts/rewards/interfaces/IRewardsController.sol":{"ast":{"absolutePath":"contracts/rewards/interfaces/IRewardsController.sol","exportedSymbols":{"IEACAggregatorProxy":[34482],"IRewardsController":[39352],"IRewardsDistributor":[39534],"ITransferStrategyBase":[39643],"RewardsDataTypes":[39707]},"id":39353,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":39148,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:179"},{"absolutePath":"contracts/rewards/interfaces/IRewardsDistributor.sol","file":"./IRewardsDistributor.sol","id":39150,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39353,"sourceUnit":39535,"src":"63:62:179","symbolAliases":[{"foreign":{"id":39149,"name":"IRewardsDistributor","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:19:179","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/rewards/interfaces/ITransferStrategyBase.sol","file":"./ITransferStrategyBase.sol","id":39152,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39353,"sourceUnit":39644,"src":"126:66:179","symbolAliases":[{"foreign":{"id":39151,"name":"ITransferStrategyBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"134:21:179","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/misc/interfaces/IEACAggregatorProxy.sol","file":"../../misc/interfaces/IEACAggregatorProxy.sol","id":39154,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39353,"sourceUnit":34483,"src":"193:82:179","symbolAliases":[{"foreign":{"id":39153,"name":"IEACAggregatorProxy","nodeType":"Identifier","overloadedDeclarations":[],"src":"201:19:179","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/rewards/libraries/RewardsDataTypes.sol","file":"../libraries/RewardsDataTypes.sol","id":39156,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39353,"sourceUnit":39708,"src":"276:67:179","symbolAliases":[{"foreign":{"id":39155,"name":"RewardsDataTypes","nodeType":"Identifier","overloadedDeclarations":[],"src":"284:16:179","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":39158,"name":"IRewardsDistributor","nodeType":"IdentifierPath","referencedDeclaration":39534,"src":"495:19:179"},"id":39159,"nodeType":"InheritanceSpecifier","src":"495:19:179"}],"canonicalName":"IRewardsController","contractDependencies":[],"contractKind":"interface","documentation":{"id":39157,"nodeType":"StructuredDocumentation","src":"345:117:179","text":" @title IRewardsController\n @author Aave\n @notice Defines the basic interface for a Rewards Controller."},"fullyImplemented":false,"id":39352,"linearizedBaseContracts":[39352,39534],"name":"IRewardsController","nameLocation":"473:18:179","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":39160,"nodeType":"StructuredDocumentation","src":"519:191:179","text":" @dev Emitted when a new address is whitelisted as claimer of rewards on behalf of a user\n @param user The address of the user\n @param claimer The address of the claimer"},"id":39166,"name":"ClaimerSet","nameLocation":"719:10:179","nodeType":"EventDefinition","parameters":{"id":39165,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39162,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"746:4:179","nodeType":"VariableDeclaration","scope":39166,"src":"730:20:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39161,"name":"address","nodeType":"ElementaryTypeName","src":"730:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39164,"indexed":true,"mutability":"mutable","name":"claimer","nameLocation":"768:7:179","nodeType":"VariableDeclaration","scope":39166,"src":"752:23:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39163,"name":"address","nodeType":"ElementaryTypeName","src":"752:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"729:47:179"},"src":"713:64:179"},{"anonymous":false,"documentation":{"id":39167,"nodeType":"StructuredDocumentation","src":"781:347:179","text":" @dev Emitted when rewards are claimed\n @param user The address of the user rewards has been claimed on behalf of\n @param reward The address of the token reward is claimed\n @param to The address of the receiver of the rewards\n @param claimer The address of the claimer\n @param amount The amount of rewards claimed"},"id":39179,"name":"RewardsClaimed","nameLocation":"1137:14:179","nodeType":"EventDefinition","parameters":{"id":39178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39169,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1173:4:179","nodeType":"VariableDeclaration","scope":39179,"src":"1157:20:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39168,"name":"address","nodeType":"ElementaryTypeName","src":"1157:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39171,"indexed":true,"mutability":"mutable","name":"reward","nameLocation":"1199:6:179","nodeType":"VariableDeclaration","scope":39179,"src":"1183:22:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39170,"name":"address","nodeType":"ElementaryTypeName","src":"1183:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39173,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"1227:2:179","nodeType":"VariableDeclaration","scope":39179,"src":"1211:18:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39172,"name":"address","nodeType":"ElementaryTypeName","src":"1211:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39175,"indexed":false,"mutability":"mutable","name":"claimer","nameLocation":"1243:7:179","nodeType":"VariableDeclaration","scope":39179,"src":"1235:15:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39174,"name":"address","nodeType":"ElementaryTypeName","src":"1235:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39177,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1264:6:179","nodeType":"VariableDeclaration","scope":39179,"src":"1256:14:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39176,"name":"uint256","nodeType":"ElementaryTypeName","src":"1256:7:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1151:123:179"},"src":"1131:144:179"},{"anonymous":false,"documentation":{"id":39180,"nodeType":"StructuredDocumentation","src":"1279:214:179","text":" @dev Emitted when a transfer strategy is installed for the reward distribution\n @param reward The address of the token reward\n @param transferStrategy The address of TransferStrategy contract"},"id":39186,"name":"TransferStrategyInstalled","nameLocation":"1502:25:179","nodeType":"EventDefinition","parameters":{"id":39185,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39182,"indexed":true,"mutability":"mutable","name":"reward","nameLocation":"1544:6:179","nodeType":"VariableDeclaration","scope":39186,"src":"1528:22:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39181,"name":"address","nodeType":"ElementaryTypeName","src":"1528:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39184,"indexed":true,"mutability":"mutable","name":"transferStrategy","nameLocation":"1568:16:179","nodeType":"VariableDeclaration","scope":39186,"src":"1552:32:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39183,"name":"address","nodeType":"ElementaryTypeName","src":"1552:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1527:58:179"},"src":"1496:90:179"},{"anonymous":false,"documentation":{"id":39187,"nodeType":"StructuredDocumentation","src":"1590:159:179","text":" @dev Emitted when the reward oracle is updated\n @param reward The address of the token reward\n @param rewardOracle The address of oracle"},"id":39193,"name":"RewardOracleUpdated","nameLocation":"1758:19:179","nodeType":"EventDefinition","parameters":{"id":39192,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39189,"indexed":true,"mutability":"mutable","name":"reward","nameLocation":"1794:6:179","nodeType":"VariableDeclaration","scope":39193,"src":"1778:22:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39188,"name":"address","nodeType":"ElementaryTypeName","src":"1778:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39191,"indexed":true,"mutability":"mutable","name":"rewardOracle","nameLocation":"1818:12:179","nodeType":"VariableDeclaration","scope":39193,"src":"1802:28:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39190,"name":"address","nodeType":"ElementaryTypeName","src":"1802:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1777:54:179"},"src":"1752:80:179"},{"documentation":{"id":39194,"nodeType":"StructuredDocumentation","src":"1836:179:179","text":" @dev Whitelists an address to claim the rewards on behalf of another address\n @param user The address of the user\n @param claimer The address of the claimer"},"functionSelector":"f5cf673b","id":39201,"implemented":false,"kind":"function","modifiers":[],"name":"setClaimer","nameLocation":"2027:10:179","nodeType":"FunctionDefinition","parameters":{"id":39199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39196,"mutability":"mutable","name":"user","nameLocation":"2046:4:179","nodeType":"VariableDeclaration","scope":39201,"src":"2038:12:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39195,"name":"address","nodeType":"ElementaryTypeName","src":"2038:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39198,"mutability":"mutable","name":"claimer","nameLocation":"2060:7:179","nodeType":"VariableDeclaration","scope":39201,"src":"2052:15:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39197,"name":"address","nodeType":"ElementaryTypeName","src":"2052:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2037:31:179"},"returnParameters":{"id":39200,"nodeType":"ParameterList","parameters":[],"src":"2077:0:179"},"scope":39352,"src":"2018:60:179","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39202,"nodeType":"StructuredDocumentation","src":"2082:239:179","text":" @dev Sets a TransferStrategy logic contract that determines the logic of the rewards transfer\n @param reward The address of the reward token\n @param transferStrategy The address of the TransferStrategy logic contract"},"functionSelector":"e15ac623","id":39210,"implemented":false,"kind":"function","modifiers":[],"name":"setTransferStrategy","nameLocation":"2333:19:179","nodeType":"FunctionDefinition","parameters":{"id":39208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39204,"mutability":"mutable","name":"reward","nameLocation":"2361:6:179","nodeType":"VariableDeclaration","scope":39210,"src":"2353:14:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39203,"name":"address","nodeType":"ElementaryTypeName","src":"2353:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39207,"mutability":"mutable","name":"transferStrategy","nameLocation":"2391:16:179","nodeType":"VariableDeclaration","scope":39210,"src":"2369:38:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"},"typeName":{"id":39206,"nodeType":"UserDefinedTypeName","pathNode":{"id":39205,"name":"ITransferStrategyBase","nodeType":"IdentifierPath","referencedDeclaration":39643,"src":"2369:21:179"},"referencedDeclaration":39643,"src":"2369:21:179","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}},"visibility":"internal"}],"src":"2352:56:179"},"returnParameters":{"id":39209,"nodeType":"ParameterList","parameters":[],"src":"2417:0:179"},"scope":39352,"src":"2324:94:179","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39211,"nodeType":"StructuredDocumentation","src":"2422:594:179","text":" @dev Sets an Aave Oracle contract to enforce rewards with a source of value.\n @notice At the moment of reward configuration, the Incentives Controller performs\n a check to see if the reward asset oracle is compatible with IEACAggregator proxy.\n This check is enforced for integrators to be able to show incentives at\n the current Aave UI without the need to setup an external price registry\n @param reward The address of the reward to set the price aggregator\n @param rewardOracle The address of price aggregator that follows IEACAggregatorProxy interface"},"functionSelector":"5453ba10","id":39219,"implemented":false,"kind":"function","modifiers":[],"name":"setRewardOracle","nameLocation":"3028:15:179","nodeType":"FunctionDefinition","parameters":{"id":39217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39213,"mutability":"mutable","name":"reward","nameLocation":"3052:6:179","nodeType":"VariableDeclaration","scope":39219,"src":"3044:14:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39212,"name":"address","nodeType":"ElementaryTypeName","src":"3044:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39216,"mutability":"mutable","name":"rewardOracle","nameLocation":"3080:12:179","nodeType":"VariableDeclaration","scope":39219,"src":"3060:32:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"},"typeName":{"id":39215,"nodeType":"UserDefinedTypeName","pathNode":{"id":39214,"name":"IEACAggregatorProxy","nodeType":"IdentifierPath","referencedDeclaration":34482,"src":"3060:19:179"},"referencedDeclaration":34482,"src":"3060:19:179","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"visibility":"internal"}],"src":"3043:50:179"},"returnParameters":{"id":39218,"nodeType":"ParameterList","parameters":[],"src":"3102:0:179"},"scope":39352,"src":"3019:84:179","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39220,"nodeType":"StructuredDocumentation","src":"3107:148:179","text":" @dev Get the price aggregator oracle address\n @param reward The address of the reward\n @return The price oracle of the reward"},"functionSelector":"2a17bf60","id":39227,"implemented":false,"kind":"function","modifiers":[],"name":"getRewardOracle","nameLocation":"3267:15:179","nodeType":"FunctionDefinition","parameters":{"id":39223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39222,"mutability":"mutable","name":"reward","nameLocation":"3291:6:179","nodeType":"VariableDeclaration","scope":39227,"src":"3283:14:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39221,"name":"address","nodeType":"ElementaryTypeName","src":"3283:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3282:16:179"},"returnParameters":{"id":39226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39225,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39227,"src":"3322:7:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39224,"name":"address","nodeType":"ElementaryTypeName","src":"3322:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3321:9:179"},"scope":39352,"src":"3258:73:179","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39228,"nodeType":"StructuredDocumentation","src":"3335:164:179","text":" @dev Returns the whitelisted claimer for a certain address (0x0 if not set)\n @param user The address of the user\n @return The claimer address"},"functionSelector":"74d945ec","id":39235,"implemented":false,"kind":"function","modifiers":[],"name":"getClaimer","nameLocation":"3511:10:179","nodeType":"FunctionDefinition","parameters":{"id":39231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39230,"mutability":"mutable","name":"user","nameLocation":"3530:4:179","nodeType":"VariableDeclaration","scope":39235,"src":"3522:12:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39229,"name":"address","nodeType":"ElementaryTypeName","src":"3522:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3521:14:179"},"returnParameters":{"id":39234,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39233,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39235,"src":"3559:7:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39232,"name":"address","nodeType":"ElementaryTypeName","src":"3559:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3558:9:179"},"scope":39352,"src":"3502:66:179","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39236,"nodeType":"StructuredDocumentation","src":"3572:216:179","text":" @dev Returns the Transfer Strategy implementation contract address being used for a reward address\n @param reward The address of the reward\n @return The address of the TransferStrategy contract"},"functionSelector":"5f130b24","id":39243,"implemented":false,"kind":"function","modifiers":[],"name":"getTransferStrategy","nameLocation":"3800:19:179","nodeType":"FunctionDefinition","parameters":{"id":39239,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39238,"mutability":"mutable","name":"reward","nameLocation":"3828:6:179","nodeType":"VariableDeclaration","scope":39243,"src":"3820:14:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39237,"name":"address","nodeType":"ElementaryTypeName","src":"3820:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3819:16:179"},"returnParameters":{"id":39242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39241,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39243,"src":"3859:7:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39240,"name":"address","nodeType":"ElementaryTypeName","src":"3859:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3858:9:179"},"scope":39352,"src":"3791:77:179","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39244,"nodeType":"StructuredDocumentation","src":"3872:931:179","text":" @dev Configure assets to incentivize with an emission of rewards per second until the end of distribution.\n @param config The assets configuration input, the list of structs contains the following fields:\n   uint104 emissionPerSecond: The emission per second following rewards unit decimals.\n   uint256 totalSupply: The total supply of the asset to incentivize\n   uint40 distributionEnd: The end of the distribution of the incentives for an asset\n   address asset: The asset address to incentivize\n   address reward: The reward token address\n   ITransferStrategy transferStrategy: The TransferStrategy address with the install hook and claim logic.\n   IEACAggregatorProxy rewardOracle: The Price Oracle of a reward to visualize the incentives at the UI Frontend.\n                                     Must follow Chainlink Aggregator IEACAggregatorProxy interface to be compatible."},"functionSelector":"955c2ad7","id":39251,"implemented":false,"kind":"function","modifiers":[],"name":"configureAssets","nameLocation":"4815:15:179","nodeType":"FunctionDefinition","parameters":{"id":39249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39248,"mutability":"mutable","name":"config","nameLocation":"4876:6:179","nodeType":"VariableDeclaration","scope":39251,"src":"4831:51:179","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput[]"},"typeName":{"baseType":{"id":39246,"nodeType":"UserDefinedTypeName","pathNode":{"id":39245,"name":"RewardsDataTypes.RewardsConfigInput","nodeType":"IdentifierPath","referencedDeclaration":39666,"src":"4831:35:179"},"referencedDeclaration":39666,"src":"4831:35:179","typeDescriptions":{"typeIdentifier":"t_struct$_RewardsConfigInput_$39666_storage_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput"}},"id":39247,"nodeType":"ArrayTypeName","src":"4831:37:179","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_RewardsConfigInput_$39666_storage_$dyn_storage_ptr","typeString":"struct RewardsDataTypes.RewardsConfigInput[]"}},"visibility":"internal"}],"src":"4830:53:179"},"returnParameters":{"id":39250,"nodeType":"ParameterList","parameters":[],"src":"4892:0:179"},"scope":39352,"src":"4806:87:179","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39252,"nodeType":"StructuredDocumentation","src":"4897:421:179","text":" @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\n @dev The units of `totalSupply` and `userBalance` should be the same.\n @param user The address of the user whose asset balance has changed\n @param totalSupply The total supply of the asset prior to user balance change\n @param userBalance The previous user balance prior to balance change*"},"functionSelector":"31873e2e","id":39261,"implemented":false,"kind":"function","modifiers":[],"name":"handleAction","nameLocation":"5330:12:179","nodeType":"FunctionDefinition","parameters":{"id":39259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39254,"mutability":"mutable","name":"user","nameLocation":"5351:4:179","nodeType":"VariableDeclaration","scope":39261,"src":"5343:12:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39253,"name":"address","nodeType":"ElementaryTypeName","src":"5343:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39256,"mutability":"mutable","name":"totalSupply","nameLocation":"5365:11:179","nodeType":"VariableDeclaration","scope":39261,"src":"5357:19:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39255,"name":"uint256","nodeType":"ElementaryTypeName","src":"5357:7:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39258,"mutability":"mutable","name":"userBalance","nameLocation":"5386:11:179","nodeType":"VariableDeclaration","scope":39261,"src":"5378:19:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39257,"name":"uint256","nodeType":"ElementaryTypeName","src":"5378:7:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5342:56:179"},"returnParameters":{"id":39260,"nodeType":"ParameterList","parameters":[],"src":"5407:0:179"},"scope":39352,"src":"5321:87:179","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39262,"nodeType":"StructuredDocumentation","src":"5412:429:179","text":" @dev Claims reward for a user to the desired address, on all the assets of the pool, accumulating the pending rewards\n @param assets List of assets to check eligible distributions before claiming rewards\n @param amount The amount of rewards to claim\n @param to The address that will be receiving the rewards\n @param reward The address of the reward token\n @return The amount of rewards claimed*"},"functionSelector":"236300dc","id":39276,"implemented":false,"kind":"function","modifiers":[],"name":"claimRewards","nameLocation":"5853:12:179","nodeType":"FunctionDefinition","parameters":{"id":39272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39265,"mutability":"mutable","name":"assets","nameLocation":"5890:6:179","nodeType":"VariableDeclaration","scope":39276,"src":"5871:25:179","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":39263,"name":"address","nodeType":"ElementaryTypeName","src":"5871:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":39264,"nodeType":"ArrayTypeName","src":"5871:9:179","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":39267,"mutability":"mutable","name":"amount","nameLocation":"5910:6:179","nodeType":"VariableDeclaration","scope":39276,"src":"5902:14:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39266,"name":"uint256","nodeType":"ElementaryTypeName","src":"5902:7:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39269,"mutability":"mutable","name":"to","nameLocation":"5930:2:179","nodeType":"VariableDeclaration","scope":39276,"src":"5922:10:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39268,"name":"address","nodeType":"ElementaryTypeName","src":"5922:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39271,"mutability":"mutable","name":"reward","nameLocation":"5946:6:179","nodeType":"VariableDeclaration","scope":39276,"src":"5938:14:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39270,"name":"address","nodeType":"ElementaryTypeName","src":"5938:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5865:91:179"},"returnParameters":{"id":39275,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39274,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39276,"src":"5975:7:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39273,"name":"uint256","nodeType":"ElementaryTypeName","src":"5975:7:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5974:9:179"},"scope":39352,"src":"5844:140:179","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39277,"nodeType":"StructuredDocumentation","src":"5988:580:179","text":" @dev Claims reward for a user on behalf, on all the assets of the pool, accumulating the pending rewards. The\n caller must be whitelisted via \"allowClaimOnBehalf\" function by the RewardsAdmin role manager\n @param assets The list of assets to check eligible distributions before claiming rewards\n @param amount The amount of rewards to claim\n @param user The address to check and claim rewards\n @param to The address that will be receiving the rewards\n @param reward The address of the reward token\n @return The amount of rewards claimed*"},"functionSelector":"33028b99","id":39293,"implemented":false,"kind":"function","modifiers":[],"name":"claimRewardsOnBehalf","nameLocation":"6580:20:179","nodeType":"FunctionDefinition","parameters":{"id":39289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39280,"mutability":"mutable","name":"assets","nameLocation":"6625:6:179","nodeType":"VariableDeclaration","scope":39293,"src":"6606:25:179","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":39278,"name":"address","nodeType":"ElementaryTypeName","src":"6606:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":39279,"nodeType":"ArrayTypeName","src":"6606:9:179","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":39282,"mutability":"mutable","name":"amount","nameLocation":"6645:6:179","nodeType":"VariableDeclaration","scope":39293,"src":"6637:14:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39281,"name":"uint256","nodeType":"ElementaryTypeName","src":"6637:7:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39284,"mutability":"mutable","name":"user","nameLocation":"6665:4:179","nodeType":"VariableDeclaration","scope":39293,"src":"6657:12:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39283,"name":"address","nodeType":"ElementaryTypeName","src":"6657:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39286,"mutability":"mutable","name":"to","nameLocation":"6683:2:179","nodeType":"VariableDeclaration","scope":39293,"src":"6675:10:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39285,"name":"address","nodeType":"ElementaryTypeName","src":"6675:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39288,"mutability":"mutable","name":"reward","nameLocation":"6699:6:179","nodeType":"VariableDeclaration","scope":39293,"src":"6691:14:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39287,"name":"address","nodeType":"ElementaryTypeName","src":"6691:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6600:109:179"},"returnParameters":{"id":39292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39291,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39293,"src":"6728:7:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39290,"name":"uint256","nodeType":"ElementaryTypeName","src":"6728:7:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6727:9:179"},"scope":39352,"src":"6571:166:179","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39294,"nodeType":"StructuredDocumentation","src":"6741:352:179","text":" @dev Claims reward for msg.sender, on all the assets of the pool, accumulating the pending rewards\n @param assets The list of assets to check eligible distributions before claiming rewards\n @param amount The amount of rewards to claim\n @param reward The address of the reward token\n @return The amount of rewards claimed*"},"functionSelector":"57b89883","id":39306,"implemented":false,"kind":"function","modifiers":[],"name":"claimRewardsToSelf","nameLocation":"7105:18:179","nodeType":"FunctionDefinition","parameters":{"id":39302,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39297,"mutability":"mutable","name":"assets","nameLocation":"7148:6:179","nodeType":"VariableDeclaration","scope":39306,"src":"7129:25:179","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":39295,"name":"address","nodeType":"ElementaryTypeName","src":"7129:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":39296,"nodeType":"ArrayTypeName","src":"7129:9:179","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":39299,"mutability":"mutable","name":"amount","nameLocation":"7168:6:179","nodeType":"VariableDeclaration","scope":39306,"src":"7160:14:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39298,"name":"uint256","nodeType":"ElementaryTypeName","src":"7160:7:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39301,"mutability":"mutable","name":"reward","nameLocation":"7188:6:179","nodeType":"VariableDeclaration","scope":39306,"src":"7180:14:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39300,"name":"address","nodeType":"ElementaryTypeName","src":"7180:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7123:75:179"},"returnParameters":{"id":39305,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39304,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39306,"src":"7217:7:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39303,"name":"uint256","nodeType":"ElementaryTypeName","src":"7217:7:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7216:9:179"},"scope":39352,"src":"7096:130:179","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39307,"nodeType":"StructuredDocumentation","src":"7230:473:179","text":" @dev Claims all rewards for a user to the desired address, on all the assets of the pool, accumulating the pending rewards\n @param assets The list of assets to check eligible distributions before claiming rewards\n @param to The address that will be receiving the rewards\n @return rewardsList List of addresses of the reward tokens\n @return claimedAmounts List that contains the claimed amount per reward, following same order as \"rewardList\"*"},"functionSelector":"bb492bf5","id":39321,"implemented":false,"kind":"function","modifiers":[],"name":"claimAllRewards","nameLocation":"7715:15:179","nodeType":"FunctionDefinition","parameters":{"id":39313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39310,"mutability":"mutable","name":"assets","nameLocation":"7755:6:179","nodeType":"VariableDeclaration","scope":39321,"src":"7736:25:179","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":39308,"name":"address","nodeType":"ElementaryTypeName","src":"7736:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":39309,"nodeType":"ArrayTypeName","src":"7736:9:179","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":39312,"mutability":"mutable","name":"to","nameLocation":"7775:2:179","nodeType":"VariableDeclaration","scope":39321,"src":"7767:10:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39311,"name":"address","nodeType":"ElementaryTypeName","src":"7767:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7730:51:179"},"returnParameters":{"id":39320,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39316,"mutability":"mutable","name":"rewardsList","nameLocation":"7817:11:179","nodeType":"VariableDeclaration","scope":39321,"src":"7800:28:179","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":39314,"name":"address","nodeType":"ElementaryTypeName","src":"7800:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":39315,"nodeType":"ArrayTypeName","src":"7800:9:179","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":39319,"mutability":"mutable","name":"claimedAmounts","nameLocation":"7847:14:179","nodeType":"VariableDeclaration","scope":39321,"src":"7830:31:179","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":39317,"name":"uint256","nodeType":"ElementaryTypeName","src":"7830:7:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":39318,"nodeType":"ArrayTypeName","src":"7830:9:179","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7799:63:179"},"scope":39352,"src":"7706:157:179","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39322,"nodeType":"StructuredDocumentation","src":"7867:621:179","text":" @dev Claims all rewards for a user on behalf, on all the assets of the pool, accumulating the pending rewards. The caller must\n be whitelisted via \"allowClaimOnBehalf\" function by the RewardsAdmin role manager\n @param assets The list of assets to check eligible distributions before claiming rewards\n @param user The address to check and claim rewards\n @param to The address that will be receiving the rewards\n @return rewardsList List of addresses of the reward tokens\n @return claimedAmounts List that contains the claimed amount per reward, following same order as \"rewardsList\"*"},"functionSelector":"9ff55db9","id":39338,"implemented":false,"kind":"function","modifiers":[],"name":"claimAllRewardsOnBehalf","nameLocation":"8500:23:179","nodeType":"FunctionDefinition","parameters":{"id":39330,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39325,"mutability":"mutable","name":"assets","nameLocation":"8548:6:179","nodeType":"VariableDeclaration","scope":39338,"src":"8529:25:179","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":39323,"name":"address","nodeType":"ElementaryTypeName","src":"8529:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":39324,"nodeType":"ArrayTypeName","src":"8529:9:179","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":39327,"mutability":"mutable","name":"user","nameLocation":"8568:4:179","nodeType":"VariableDeclaration","scope":39338,"src":"8560:12:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39326,"name":"address","nodeType":"ElementaryTypeName","src":"8560:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39329,"mutability":"mutable","name":"to","nameLocation":"8586:2:179","nodeType":"VariableDeclaration","scope":39338,"src":"8578:10:179","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39328,"name":"address","nodeType":"ElementaryTypeName","src":"8578:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8523:69:179"},"returnParameters":{"id":39337,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39333,"mutability":"mutable","name":"rewardsList","nameLocation":"8628:11:179","nodeType":"VariableDeclaration","scope":39338,"src":"8611:28:179","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":39331,"name":"address","nodeType":"ElementaryTypeName","src":"8611:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":39332,"nodeType":"ArrayTypeName","src":"8611:9:179","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":39336,"mutability":"mutable","name":"claimedAmounts","nameLocation":"8658:14:179","nodeType":"VariableDeclaration","scope":39338,"src":"8641:31:179","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":39334,"name":"uint256","nodeType":"ElementaryTypeName","src":"8641:7:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":39335,"nodeType":"ArrayTypeName","src":"8641:9:179","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8610:63:179"},"scope":39352,"src":"8491:183:179","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39339,"nodeType":"StructuredDocumentation","src":"8678:392:179","text":" @dev Claims all reward for msg.sender, on all the assets of the pool, accumulating the pending rewards\n @param assets The list of assets to check eligible distributions before claiming rewards\n @return rewardsList List of addresses of the reward tokens\n @return claimedAmounts List that contains the claimed amount per reward, following same order as \"rewardsList\"*"},"functionSelector":"bf90f63a","id":39351,"implemented":false,"kind":"function","modifiers":[],"name":"claimAllRewardsToSelf","nameLocation":"9082:21:179","nodeType":"FunctionDefinition","parameters":{"id":39343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39342,"mutability":"mutable","name":"assets","nameLocation":"9128:6:179","nodeType":"VariableDeclaration","scope":39351,"src":"9109:25:179","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":39340,"name":"address","nodeType":"ElementaryTypeName","src":"9109:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":39341,"nodeType":"ArrayTypeName","src":"9109:9:179","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"9103:35:179"},"returnParameters":{"id":39350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39346,"mutability":"mutable","name":"rewardsList","nameLocation":"9174:11:179","nodeType":"VariableDeclaration","scope":39351,"src":"9157:28:179","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":39344,"name":"address","nodeType":"ElementaryTypeName","src":"9157:7:179","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":39345,"nodeType":"ArrayTypeName","src":"9157:9:179","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":39349,"mutability":"mutable","name":"claimedAmounts","nameLocation":"9204:14:179","nodeType":"VariableDeclaration","scope":39351,"src":"9187:31:179","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":39347,"name":"uint256","nodeType":"ElementaryTypeName","src":"9187:7:179","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":39348,"nodeType":"ArrayTypeName","src":"9187:9:179","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9156:63:179"},"scope":39352,"src":"9073:147:179","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":39353,"src":"463:8759:179","usedErrors":[]}],"src":"37:9186:179"},"id":179},"contracts/rewards/interfaces/IRewardsDistributor.sol":{"ast":{"absolutePath":"contracts/rewards/interfaces/IRewardsDistributor.sol","exportedSymbols":{"IRewardsDistributor":[39534]},"id":39535,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":39354,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:180"},{"abstract":false,"baseContracts":[],"canonicalName":"IRewardsDistributor","contractDependencies":[],"contractKind":"interface","documentation":{"id":39355,"nodeType":"StructuredDocumentation","src":"63:119:180","text":" @title IRewardsDistributor\n @author Aave\n @notice Defines the basic interface for a Rewards Distributor."},"fullyImplemented":false,"id":39534,"linearizedBaseContracts":[39534],"name":"IRewardsDistributor","nameLocation":"193:19:180","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":39356,"nodeType":"StructuredDocumentation","src":"217:587:180","text":" @dev Emitted when the configuration of the rewards of an asset is updated.\n @param asset The address of the incentivized asset\n @param reward The address of the reward token\n @param oldEmission The old emissions per second value of the reward distribution\n @param newEmission The new emissions per second value of the reward distribution\n @param oldDistributionEnd The old end timestamp of the reward distribution\n @param newDistributionEnd The new end timestamp of the reward distribution\n @param assetIndex The index of the asset distribution"},"id":39372,"name":"AssetConfigUpdated","nameLocation":"813:18:180","nodeType":"EventDefinition","parameters":{"id":39371,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39358,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"853:5:180","nodeType":"VariableDeclaration","scope":39372,"src":"837:21:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39357,"name":"address","nodeType":"ElementaryTypeName","src":"837:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39360,"indexed":true,"mutability":"mutable","name":"reward","nameLocation":"880:6:180","nodeType":"VariableDeclaration","scope":39372,"src":"864:22:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39359,"name":"address","nodeType":"ElementaryTypeName","src":"864:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39362,"indexed":false,"mutability":"mutable","name":"oldEmission","nameLocation":"900:11:180","nodeType":"VariableDeclaration","scope":39372,"src":"892:19:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39361,"name":"uint256","nodeType":"ElementaryTypeName","src":"892:7:180","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39364,"indexed":false,"mutability":"mutable","name":"newEmission","nameLocation":"925:11:180","nodeType":"VariableDeclaration","scope":39372,"src":"917:19:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39363,"name":"uint256","nodeType":"ElementaryTypeName","src":"917:7:180","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39366,"indexed":false,"mutability":"mutable","name":"oldDistributionEnd","nameLocation":"950:18:180","nodeType":"VariableDeclaration","scope":39372,"src":"942:26:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39365,"name":"uint256","nodeType":"ElementaryTypeName","src":"942:7:180","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39368,"indexed":false,"mutability":"mutable","name":"newDistributionEnd","nameLocation":"982:18:180","nodeType":"VariableDeclaration","scope":39372,"src":"974:26:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39367,"name":"uint256","nodeType":"ElementaryTypeName","src":"974:7:180","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39370,"indexed":false,"mutability":"mutable","name":"assetIndex","nameLocation":"1014:10:180","nodeType":"VariableDeclaration","scope":39372,"src":"1006:18:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39369,"name":"uint256","nodeType":"ElementaryTypeName","src":"1006:7:180","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"831:197:180"},"src":"807:222:180"},{"anonymous":false,"documentation":{"id":39373,"nodeType":"StructuredDocumentation","src":"1033:467:180","text":" @dev Emitted when rewards of an asset are accrued on behalf of a user.\n @param asset The address of the incentivized asset\n @param reward The address of the reward token\n @param user The address of the user that rewards are accrued on behalf of\n @param assetIndex The index of the asset distribution\n @param userIndex The index of the asset distribution on behalf of the user\n @param rewardsAccrued The amount of rewards accrued"},"id":39387,"name":"Accrued","nameLocation":"1509:7:180","nodeType":"EventDefinition","parameters":{"id":39386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39375,"indexed":true,"mutability":"mutable","name":"asset","nameLocation":"1538:5:180","nodeType":"VariableDeclaration","scope":39387,"src":"1522:21:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39374,"name":"address","nodeType":"ElementaryTypeName","src":"1522:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39377,"indexed":true,"mutability":"mutable","name":"reward","nameLocation":"1565:6:180","nodeType":"VariableDeclaration","scope":39387,"src":"1549:22:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39376,"name":"address","nodeType":"ElementaryTypeName","src":"1549:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39379,"indexed":true,"mutability":"mutable","name":"user","nameLocation":"1593:4:180","nodeType":"VariableDeclaration","scope":39387,"src":"1577:20:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39378,"name":"address","nodeType":"ElementaryTypeName","src":"1577:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39381,"indexed":false,"mutability":"mutable","name":"assetIndex","nameLocation":"1611:10:180","nodeType":"VariableDeclaration","scope":39387,"src":"1603:18:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39380,"name":"uint256","nodeType":"ElementaryTypeName","src":"1603:7:180","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39383,"indexed":false,"mutability":"mutable","name":"userIndex","nameLocation":"1635:9:180","nodeType":"VariableDeclaration","scope":39387,"src":"1627:17:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39382,"name":"uint256","nodeType":"ElementaryTypeName","src":"1627:7:180","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39385,"indexed":false,"mutability":"mutable","name":"rewardsAccrued","nameLocation":"1658:14:180","nodeType":"VariableDeclaration","scope":39387,"src":"1650:22:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39384,"name":"uint256","nodeType":"ElementaryTypeName","src":"1650:7:180","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1516:160:180"},"src":"1503:174:180"},{"documentation":{"id":39388,"nodeType":"StructuredDocumentation","src":"1681:252:180","text":" @dev Sets the end date for the distribution\n @param asset The asset to incentivize\n @param reward The reward token that incentives the asset\n @param newDistributionEnd The end date of the incentivization, in unix time format*"},"functionSelector":"c5a7b538","id":39397,"implemented":false,"kind":"function","modifiers":[],"name":"setDistributionEnd","nameLocation":"1945:18:180","nodeType":"FunctionDefinition","parameters":{"id":39395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39390,"mutability":"mutable","name":"asset","nameLocation":"1972:5:180","nodeType":"VariableDeclaration","scope":39397,"src":"1964:13:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39389,"name":"address","nodeType":"ElementaryTypeName","src":"1964:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39392,"mutability":"mutable","name":"reward","nameLocation":"1987:6:180","nodeType":"VariableDeclaration","scope":39397,"src":"1979:14:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39391,"name":"address","nodeType":"ElementaryTypeName","src":"1979:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39394,"mutability":"mutable","name":"newDistributionEnd","nameLocation":"2002:18:180","nodeType":"VariableDeclaration","scope":39397,"src":"1995:25:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":39393,"name":"uint32","nodeType":"ElementaryTypeName","src":"1995:6:180","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1963:58:180"},"returnParameters":{"id":39396,"nodeType":"ParameterList","parameters":[],"src":"2030:0:180"},"scope":39534,"src":"1936:95:180","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39398,"nodeType":"StructuredDocumentation","src":"2035:272:180","text":" @dev Sets the emission per second of a set of reward distributions\n @param asset The asset is being incentivized\n @param rewards List of reward addresses are being distributed\n @param newEmissionsPerSecond List of new reward emissions per second"},"functionSelector":"f996868b","id":39409,"implemented":false,"kind":"function","modifiers":[],"name":"setEmissionPerSecond","nameLocation":"2319:20:180","nodeType":"FunctionDefinition","parameters":{"id":39407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39400,"mutability":"mutable","name":"asset","nameLocation":"2353:5:180","nodeType":"VariableDeclaration","scope":39409,"src":"2345:13:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39399,"name":"address","nodeType":"ElementaryTypeName","src":"2345:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39403,"mutability":"mutable","name":"rewards","nameLocation":"2383:7:180","nodeType":"VariableDeclaration","scope":39409,"src":"2364:26:180","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":39401,"name":"address","nodeType":"ElementaryTypeName","src":"2364:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":39402,"nodeType":"ArrayTypeName","src":"2364:9:180","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":39406,"mutability":"mutable","name":"newEmissionsPerSecond","nameLocation":"2414:21:180","nodeType":"VariableDeclaration","scope":39409,"src":"2396:39:180","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint88_$dyn_calldata_ptr","typeString":"uint88[]"},"typeName":{"baseType":{"id":39404,"name":"uint88","nodeType":"ElementaryTypeName","src":"2396:6:180","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"id":39405,"nodeType":"ArrayTypeName","src":"2396:8:180","typeDescriptions":{"typeIdentifier":"t_array$_t_uint88_$dyn_storage_ptr","typeString":"uint88[]"}},"visibility":"internal"}],"src":"2339:100:180"},"returnParameters":{"id":39408,"nodeType":"ParameterList","parameters":[],"src":"2448:0:180"},"scope":39534,"src":"2310:139:180","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39410,"nodeType":"StructuredDocumentation","src":"2453:243:180","text":" @dev Gets the end date for the distribution\n @param asset The incentivized asset\n @param reward The reward token of the incentivized asset\n @return The timestamp with the end of the distribution, in unix time format*"},"functionSelector":"1b839c77","id":39419,"implemented":false,"kind":"function","modifiers":[],"name":"getDistributionEnd","nameLocation":"2708:18:180","nodeType":"FunctionDefinition","parameters":{"id":39415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39412,"mutability":"mutable","name":"asset","nameLocation":"2735:5:180","nodeType":"VariableDeclaration","scope":39419,"src":"2727:13:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39411,"name":"address","nodeType":"ElementaryTypeName","src":"2727:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39414,"mutability":"mutable","name":"reward","nameLocation":"2750:6:180","nodeType":"VariableDeclaration","scope":39419,"src":"2742:14:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39413,"name":"address","nodeType":"ElementaryTypeName","src":"2742:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2726:31:180"},"returnParameters":{"id":39418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39417,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39419,"src":"2781:7:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39416,"name":"uint256","nodeType":"ElementaryTypeName","src":"2781:7:180","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2780:9:180"},"scope":39534,"src":"2699:91:180","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39420,"nodeType":"StructuredDocumentation","src":"2794:288:180","text":" @dev Returns the index of a user on a reward distribution\n @param user Address of the user\n @param asset The incentivized asset\n @param reward The reward token of the incentivized asset\n @return The current user asset index, not including new distributions*"},"functionSelector":"533f542a","id":39431,"implemented":false,"kind":"function","modifiers":[],"name":"getUserAssetIndex","nameLocation":"3094:17:180","nodeType":"FunctionDefinition","parameters":{"id":39427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39422,"mutability":"mutable","name":"user","nameLocation":"3125:4:180","nodeType":"VariableDeclaration","scope":39431,"src":"3117:12:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39421,"name":"address","nodeType":"ElementaryTypeName","src":"3117:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39424,"mutability":"mutable","name":"asset","nameLocation":"3143:5:180","nodeType":"VariableDeclaration","scope":39431,"src":"3135:13:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39423,"name":"address","nodeType":"ElementaryTypeName","src":"3135:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39426,"mutability":"mutable","name":"reward","nameLocation":"3162:6:180","nodeType":"VariableDeclaration","scope":39431,"src":"3154:14:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39425,"name":"address","nodeType":"ElementaryTypeName","src":"3154:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3111:61:180"},"returnParameters":{"id":39430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39429,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39431,"src":"3196:7:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39428,"name":"uint256","nodeType":"ElementaryTypeName","src":"3196:7:180","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3195:9:180"},"scope":39534,"src":"3085:120:180","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39432,"nodeType":"StructuredDocumentation","src":"3209:419:180","text":" @dev Returns the configuration of the distribution reward for a certain asset\n @param asset The incentivized asset\n @param reward The reward token of the incentivized asset\n @return The index of the asset distribution\n @return The emission per second of the reward distribution\n @return The timestamp of the last update of the index\n @return The timestamp of the distribution end*"},"functionSelector":"7eff4ba8","id":39447,"implemented":false,"kind":"function","modifiers":[],"name":"getRewardsData","nameLocation":"3640:14:180","nodeType":"FunctionDefinition","parameters":{"id":39437,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39434,"mutability":"mutable","name":"asset","nameLocation":"3668:5:180","nodeType":"VariableDeclaration","scope":39447,"src":"3660:13:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39433,"name":"address","nodeType":"ElementaryTypeName","src":"3660:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39436,"mutability":"mutable","name":"reward","nameLocation":"3687:6:180","nodeType":"VariableDeclaration","scope":39447,"src":"3679:14:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39435,"name":"address","nodeType":"ElementaryTypeName","src":"3679:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3654:43:180"},"returnParameters":{"id":39446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39439,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39447,"src":"3721:7:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39438,"name":"uint256","nodeType":"ElementaryTypeName","src":"3721:7:180","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39441,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39447,"src":"3730:7:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39440,"name":"uint256","nodeType":"ElementaryTypeName","src":"3730:7:180","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39443,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39447,"src":"3739:7:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39442,"name":"uint256","nodeType":"ElementaryTypeName","src":"3739:7:180","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39445,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39447,"src":"3748:7:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39444,"name":"uint256","nodeType":"ElementaryTypeName","src":"3748:7:180","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3720:36:180"},"scope":39534,"src":"3631:126:180","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39448,"nodeType":"StructuredDocumentation","src":"3761:308:180","text":" @dev Calculates the next value of an specific distribution index, with validations.\n @param asset The incentivized asset\n @param reward The reward token of the incentivized asset\n @return The old index of the asset distribution\n @return The new index of the asset distribution*"},"functionSelector":"886fe70b","id":39459,"implemented":false,"kind":"function","modifiers":[],"name":"getAssetIndex","nameLocation":"4081:13:180","nodeType":"FunctionDefinition","parameters":{"id":39453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39450,"mutability":"mutable","name":"asset","nameLocation":"4103:5:180","nodeType":"VariableDeclaration","scope":39459,"src":"4095:13:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39449,"name":"address","nodeType":"ElementaryTypeName","src":"4095:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39452,"mutability":"mutable","name":"reward","nameLocation":"4118:6:180","nodeType":"VariableDeclaration","scope":39459,"src":"4110:14:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39451,"name":"address","nodeType":"ElementaryTypeName","src":"4110:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4094:31:180"},"returnParameters":{"id":39458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39455,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39459,"src":"4149:7:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39454,"name":"uint256","nodeType":"ElementaryTypeName","src":"4149:7:180","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39457,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39459,"src":"4158:7:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39456,"name":"uint256","nodeType":"ElementaryTypeName","src":"4158:7:180","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4148:18:180"},"scope":39534,"src":"4072:95:180","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39460,"nodeType":"StructuredDocumentation","src":"4171:197:180","text":" @dev Returns the list of available reward token addresses of an incentivized asset\n @param asset The incentivized asset\n @return List of rewards addresses of the input asset*"},"functionSelector":"6657732f","id":39468,"implemented":false,"kind":"function","modifiers":[],"name":"getRewardsByAsset","nameLocation":"4380:17:180","nodeType":"FunctionDefinition","parameters":{"id":39463,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39462,"mutability":"mutable","name":"asset","nameLocation":"4406:5:180","nodeType":"VariableDeclaration","scope":39468,"src":"4398:13:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39461,"name":"address","nodeType":"ElementaryTypeName","src":"4398:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4397:15:180"},"returnParameters":{"id":39467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39466,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39468,"src":"4436:16:180","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":39464,"name":"address","nodeType":"ElementaryTypeName","src":"4436:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":39465,"nodeType":"ArrayTypeName","src":"4436:9:180","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"4435:18:180"},"scope":39534,"src":"4371:83:180","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39469,"nodeType":"StructuredDocumentation","src":"4458:123:180","text":" @dev Returns the list of available reward addresses\n @return List of rewards supported in this contract*"},"functionSelector":"b45ac1a9","id":39475,"implemented":false,"kind":"function","modifiers":[],"name":"getRewardsList","nameLocation":"4593:14:180","nodeType":"FunctionDefinition","parameters":{"id":39470,"nodeType":"ParameterList","parameters":[],"src":"4607:2:180"},"returnParameters":{"id":39474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39473,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39475,"src":"4633:16:180","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":39471,"name":"address","nodeType":"ElementaryTypeName","src":"4633:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":39472,"nodeType":"ArrayTypeName","src":"4633:9:180","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"4632:18:180"},"scope":39534,"src":"4584:67:180","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39476,"nodeType":"StructuredDocumentation","src":"4655:288:180","text":" @dev Returns the accrued rewards balance of a user, not including virtually accrued rewards since last distribution.\n @param user The address of the user\n @param reward The address of the reward token\n @return Unclaimed rewards, not including new distributions*"},"functionSelector":"b022418c","id":39485,"implemented":false,"kind":"function","modifiers":[],"name":"getUserAccruedRewards","nameLocation":"4955:21:180","nodeType":"FunctionDefinition","parameters":{"id":39481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39478,"mutability":"mutable","name":"user","nameLocation":"4985:4:180","nodeType":"VariableDeclaration","scope":39485,"src":"4977:12:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39477,"name":"address","nodeType":"ElementaryTypeName","src":"4977:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39480,"mutability":"mutable","name":"reward","nameLocation":"4999:6:180","nodeType":"VariableDeclaration","scope":39485,"src":"4991:14:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39479,"name":"address","nodeType":"ElementaryTypeName","src":"4991:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4976:30:180"},"returnParameters":{"id":39484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39483,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39485,"src":"5030:7:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39482,"name":"uint256","nodeType":"ElementaryTypeName","src":"5030:7:180","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5029:9:180"},"scope":39534,"src":"4946:93:180","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39486,"nodeType":"StructuredDocumentation","src":"5043:329:180","text":" @dev Returns a single rewards balance of a user, including virtually accrued and unrealized claimable rewards.\n @param assets List of incentivized assets to check eligible distributions\n @param user The address of the user\n @param reward The address of the reward token\n @return The rewards amount*"},"functionSelector":"70674ab9","id":39498,"implemented":false,"kind":"function","modifiers":[],"name":"getUserRewards","nameLocation":"5384:14:180","nodeType":"FunctionDefinition","parameters":{"id":39494,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39489,"mutability":"mutable","name":"assets","nameLocation":"5423:6:180","nodeType":"VariableDeclaration","scope":39498,"src":"5404:25:180","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":39487,"name":"address","nodeType":"ElementaryTypeName","src":"5404:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":39488,"nodeType":"ArrayTypeName","src":"5404:9:180","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":39491,"mutability":"mutable","name":"user","nameLocation":"5443:4:180","nodeType":"VariableDeclaration","scope":39498,"src":"5435:12:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39490,"name":"address","nodeType":"ElementaryTypeName","src":"5435:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39493,"mutability":"mutable","name":"reward","nameLocation":"5461:6:180","nodeType":"VariableDeclaration","scope":39498,"src":"5453:14:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39492,"name":"address","nodeType":"ElementaryTypeName","src":"5453:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5398:73:180"},"returnParameters":{"id":39497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39496,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39498,"src":"5495:7:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39495,"name":"uint256","nodeType":"ElementaryTypeName","src":"5495:7:180","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5494:9:180"},"scope":39534,"src":"5375:129:180","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39499,"nodeType":"StructuredDocumentation","src":"5508:332:180","text":" @dev Returns a list all rewards of a user, including already accrued and unrealized claimable rewards\n @param assets List of incentivized assets to check eligible distributions\n @param user The address of the user\n @return The list of reward addresses\n @return The list of unclaimed amount of rewards*"},"functionSelector":"4c0369c3","id":39513,"implemented":false,"kind":"function","modifiers":[],"name":"getAllUserRewards","nameLocation":"5852:17:180","nodeType":"FunctionDefinition","parameters":{"id":39505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39502,"mutability":"mutable","name":"assets","nameLocation":"5894:6:180","nodeType":"VariableDeclaration","scope":39513,"src":"5875:25:180","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":39500,"name":"address","nodeType":"ElementaryTypeName","src":"5875:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":39501,"nodeType":"ArrayTypeName","src":"5875:9:180","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":39504,"mutability":"mutable","name":"user","nameLocation":"5914:4:180","nodeType":"VariableDeclaration","scope":39513,"src":"5906:12:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39503,"name":"address","nodeType":"ElementaryTypeName","src":"5906:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5869:53:180"},"returnParameters":{"id":39512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39508,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39513,"src":"5946:16:180","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":39506,"name":"address","nodeType":"ElementaryTypeName","src":"5946:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":39507,"nodeType":"ArrayTypeName","src":"5946:9:180","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":39511,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39513,"src":"5964:16:180","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":39509,"name":"uint256","nodeType":"ElementaryTypeName","src":"5964:7:180","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":39510,"nodeType":"ArrayTypeName","src":"5964:9:180","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"5945:36:180"},"scope":39534,"src":"5843:139:180","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39514,"nodeType":"StructuredDocumentation","src":"5986:188:180","text":" @dev Returns the decimals of an asset to calculate the distribution delta\n @param asset The address to retrieve decimals\n @return The decimals of an underlying asset"},"functionSelector":"9efd6f72","id":39521,"implemented":false,"kind":"function","modifiers":[],"name":"getAssetDecimals","nameLocation":"6186:16:180","nodeType":"FunctionDefinition","parameters":{"id":39517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39516,"mutability":"mutable","name":"asset","nameLocation":"6211:5:180","nodeType":"VariableDeclaration","scope":39521,"src":"6203:13:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39515,"name":"address","nodeType":"ElementaryTypeName","src":"6203:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6202:15:180"},"returnParameters":{"id":39520,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39519,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39521,"src":"6241:5:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":39518,"name":"uint8","nodeType":"ElementaryTypeName","src":"6241:5:180","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"6240:7:180"},"scope":39534,"src":"6177:71:180","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39522,"nodeType":"StructuredDocumentation","src":"6252:111:180","text":" @dev Returns the address of the emission manager\n @return The address of the EmissionManager"},"functionSelector":"cbcbb507","id":39527,"implemented":false,"kind":"function","modifiers":[],"name":"EMISSION_MANAGER","nameLocation":"6375:16:180","nodeType":"FunctionDefinition","parameters":{"id":39523,"nodeType":"ParameterList","parameters":[],"src":"6391:2:180"},"returnParameters":{"id":39526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39525,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39527,"src":"6417:7:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39524,"name":"address","nodeType":"ElementaryTypeName","src":"6417:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6416:9:180"},"scope":39534,"src":"6366:60:180","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39528,"nodeType":"StructuredDocumentation","src":"6430:230:180","text":" @dev Returns the address of the emission manager.\n Deprecated: This getter is maintained for compatibility purposes. Use the `EMISSION_MANAGER()` function instead.\n @return The address of the EmissionManager"},"functionSelector":"92074b08","id":39533,"implemented":false,"kind":"function","modifiers":[],"name":"getEmissionManager","nameLocation":"6672:18:180","nodeType":"FunctionDefinition","parameters":{"id":39529,"nodeType":"ParameterList","parameters":[],"src":"6690:2:180"},"returnParameters":{"id":39532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39531,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39533,"src":"6716:7:180","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39530,"name":"address","nodeType":"ElementaryTypeName","src":"6716:7:180","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6715:9:180"},"scope":39534,"src":"6663:62:180","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":39535,"src":"183:6544:180","usedErrors":[]}],"src":"37:6691:180"},"id":180},"contracts/rewards/interfaces/IStakedToken.sol":{"ast":{"absolutePath":"contracts/rewards/interfaces/IStakedToken.sol","exportedSymbols":{"IStakedToken":[39566]},"id":39567,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":39536,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:181"},{"abstract":false,"baseContracts":[],"canonicalName":"IStakedToken","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":39566,"linearizedBaseContracts":[39566],"name":"IStakedToken","nameLocation":"73:12:181","nodeType":"ContractDefinition","nodes":[{"functionSelector":"312f6b83","id":39541,"implemented":false,"kind":"function","modifiers":[],"name":"STAKED_TOKEN","nameLocation":"99:12:181","nodeType":"FunctionDefinition","parameters":{"id":39537,"nodeType":"ParameterList","parameters":[],"src":"111:2:181"},"returnParameters":{"id":39540,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39539,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39541,"src":"137:7:181","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39538,"name":"address","nodeType":"ElementaryTypeName","src":"137:7:181","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"136:9:181"},"scope":39566,"src":"90:56:181","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"adc9772e","id":39548,"implemented":false,"kind":"function","modifiers":[],"name":"stake","nameLocation":"159:5:181","nodeType":"FunctionDefinition","parameters":{"id":39546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39543,"mutability":"mutable","name":"to","nameLocation":"173:2:181","nodeType":"VariableDeclaration","scope":39548,"src":"165:10:181","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39542,"name":"address","nodeType":"ElementaryTypeName","src":"165:7:181","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39545,"mutability":"mutable","name":"amount","nameLocation":"185:6:181","nodeType":"VariableDeclaration","scope":39548,"src":"177:14:181","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39544,"name":"uint256","nodeType":"ElementaryTypeName","src":"177:7:181","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"164:28:181"},"returnParameters":{"id":39547,"nodeType":"ParameterList","parameters":[],"src":"201:0:181"},"scope":39566,"src":"150:52:181","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"1e9a6950","id":39555,"implemented":false,"kind":"function","modifiers":[],"name":"redeem","nameLocation":"215:6:181","nodeType":"FunctionDefinition","parameters":{"id":39553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39550,"mutability":"mutable","name":"to","nameLocation":"230:2:181","nodeType":"VariableDeclaration","scope":39555,"src":"222:10:181","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39549,"name":"address","nodeType":"ElementaryTypeName","src":"222:7:181","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39552,"mutability":"mutable","name":"amount","nameLocation":"242:6:181","nodeType":"VariableDeclaration","scope":39555,"src":"234:14:181","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39551,"name":"uint256","nodeType":"ElementaryTypeName","src":"234:7:181","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"221:28:181"},"returnParameters":{"id":39554,"nodeType":"ParameterList","parameters":[],"src":"258:0:181"},"scope":39566,"src":"206:53:181","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"787a08a6","id":39558,"implemented":false,"kind":"function","modifiers":[],"name":"cooldown","nameLocation":"272:8:181","nodeType":"FunctionDefinition","parameters":{"id":39556,"nodeType":"ParameterList","parameters":[],"src":"280:2:181"},"returnParameters":{"id":39557,"nodeType":"ParameterList","parameters":[],"src":"291:0:181"},"scope":39566,"src":"263:29:181","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"9a99b4f0","id":39565,"implemented":false,"kind":"function","modifiers":[],"name":"claimRewards","nameLocation":"305:12:181","nodeType":"FunctionDefinition","parameters":{"id":39563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39560,"mutability":"mutable","name":"to","nameLocation":"326:2:181","nodeType":"VariableDeclaration","scope":39565,"src":"318:10:181","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39559,"name":"address","nodeType":"ElementaryTypeName","src":"318:7:181","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39562,"mutability":"mutable","name":"amount","nameLocation":"338:6:181","nodeType":"VariableDeclaration","scope":39565,"src":"330:14:181","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39561,"name":"uint256","nodeType":"ElementaryTypeName","src":"330:7:181","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"317:28:181"},"returnParameters":{"id":39564,"nodeType":"ParameterList","parameters":[],"src":"354:0:181"},"scope":39566,"src":"296:59:181","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":39567,"src":"63:294:181","usedErrors":[]}],"src":"37:321:181"},"id":181},"contracts/rewards/interfaces/IStakedTokenTransferStrategy.sol":{"ast":{"absolutePath":"contracts/rewards/interfaces/IStakedTokenTransferStrategy.sol","exportedSymbols":{"IStakedToken":[39566],"IStakedTokenTransferStrategy":[39596],"ITransferStrategyBase":[39643]},"id":39597,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":39568,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:182"},{"absolutePath":"contracts/rewards/interfaces/IStakedToken.sol","file":"../interfaces/IStakedToken.sol","id":39570,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39597,"sourceUnit":39567,"src":"63:60:182","symbolAliases":[{"foreign":{"id":39569,"name":"IStakedToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:12:182","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/rewards/interfaces/ITransferStrategyBase.sol","file":"./ITransferStrategyBase.sol","id":39572,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39597,"sourceUnit":39644,"src":"124:66:182","symbolAliases":[{"foreign":{"id":39571,"name":"ITransferStrategyBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"132:21:182","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":39574,"name":"ITransferStrategyBase","nodeType":"IdentifierPath","referencedDeclaration":39643,"src":"298:21:182"},"id":39575,"nodeType":"InheritanceSpecifier","src":"298:21:182"}],"canonicalName":"IStakedTokenTransferStrategy","contractDependencies":[],"contractKind":"interface","documentation":{"id":39573,"nodeType":"StructuredDocumentation","src":"192:63:182","text":" @title IStakedTokenTransferStrategy\n @author Aave*"},"fullyImplemented":false,"id":39596,"linearizedBaseContracts":[39596,39643],"name":"IStakedTokenTransferStrategy","nameLocation":"266:28:182","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":39576,"nodeType":"StructuredDocumentation","src":"324:84:182","text":" @dev Perform a MAX_UINT approval of AAVE to the Staked Aave contract."},"functionSelector":"a3406251","id":39579,"implemented":false,"kind":"function","modifiers":[],"name":"renewApproval","nameLocation":"420:13:182","nodeType":"FunctionDefinition","parameters":{"id":39577,"nodeType":"ParameterList","parameters":[],"src":"433:2:182"},"returnParameters":{"id":39578,"nodeType":"ParameterList","parameters":[],"src":"444:0:182"},"scope":39596,"src":"411:34:182","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39580,"nodeType":"StructuredDocumentation","src":"449:91:182","text":" @dev Drop approval of AAVE to the Staked Aave contract in case of emergency."},"functionSelector":"3a342acc","id":39583,"implemented":false,"kind":"function","modifiers":[],"name":"dropApproval","nameLocation":"552:12:182","nodeType":"FunctionDefinition","parameters":{"id":39581,"nodeType":"ParameterList","parameters":[],"src":"564:2:182"},"returnParameters":{"id":39582,"nodeType":"ParameterList","parameters":[],"src":"575:0:182"},"scope":39596,"src":"543:33:182","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39584,"nodeType":"StructuredDocumentation","src":"580:52:182","text":" @return Staked Token contract address"},"functionSelector":"dfd29d9e","id":39589,"implemented":false,"kind":"function","modifiers":[],"name":"getStakeContract","nameLocation":"644:16:182","nodeType":"FunctionDefinition","parameters":{"id":39585,"nodeType":"ParameterList","parameters":[],"src":"660:2:182"},"returnParameters":{"id":39588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39587,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39589,"src":"686:7:182","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39586,"name":"address","nodeType":"ElementaryTypeName","src":"686:7:182","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"685:9:182"},"scope":39596,"src":"635:60:182","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39590,"nodeType":"StructuredDocumentation","src":"699:71:182","text":" @return Underlying token address from the stake contract"},"functionSelector":"ee719bc8","id":39595,"implemented":false,"kind":"function","modifiers":[],"name":"getUnderlyingToken","nameLocation":"782:18:182","nodeType":"FunctionDefinition","parameters":{"id":39591,"nodeType":"ParameterList","parameters":[],"src":"800:2:182"},"returnParameters":{"id":39594,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39593,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39595,"src":"826:7:182","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39592,"name":"address","nodeType":"ElementaryTypeName","src":"826:7:182","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"825:9:182"},"scope":39596,"src":"773:62:182","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":39597,"src":"256:581:182","usedErrors":[]}],"src":"37:801:182"},"id":182},"contracts/rewards/interfaces/ITransferStrategyBase.sol":{"ast":{"absolutePath":"contracts/rewards/interfaces/ITransferStrategyBase.sol","exportedSymbols":{"ITransferStrategyBase":[39643]},"id":39644,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":39598,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:183"},{"abstract":false,"baseContracts":[],"canonicalName":"ITransferStrategyBase","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":39643,"linearizedBaseContracts":[39643],"name":"ITransferStrategyBase","nameLocation":"73:21:183","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"id":39608,"name":"EmergencyWithdrawal","nameLocation":"105:19:183","nodeType":"EventDefinition","parameters":{"id":39607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39600,"indexed":true,"mutability":"mutable","name":"caller","nameLocation":"146:6:183","nodeType":"VariableDeclaration","scope":39608,"src":"130:22:183","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39599,"name":"address","nodeType":"ElementaryTypeName","src":"130:7:183","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39602,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"174:5:183","nodeType":"VariableDeclaration","scope":39608,"src":"158:21:183","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39601,"name":"address","nodeType":"ElementaryTypeName","src":"158:7:183","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39604,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"201:2:183","nodeType":"VariableDeclaration","scope":39608,"src":"185:18:183","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39603,"name":"address","nodeType":"ElementaryTypeName","src":"185:7:183","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39606,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"217:6:183","nodeType":"VariableDeclaration","scope":39608,"src":"209:14:183","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39605,"name":"uint256","nodeType":"ElementaryTypeName","src":"209:7:183","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"124:103:183"},"src":"99:129:183"},{"documentation":{"id":39609,"nodeType":"StructuredDocumentation","src":"232:341:183","text":" @dev Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation\n @param to Account to transfer rewards\n @param reward Address of the reward token\n @param amount Amount to transfer to the \"to\" address parameter\n @return Returns true bool if transfer logic succeeds"},"functionSelector":"16beb982","id":39620,"implemented":false,"kind":"function","modifiers":[],"name":"performTransfer","nameLocation":"585:15:183","nodeType":"FunctionDefinition","parameters":{"id":39616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39611,"mutability":"mutable","name":"to","nameLocation":"609:2:183","nodeType":"VariableDeclaration","scope":39620,"src":"601:10:183","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39610,"name":"address","nodeType":"ElementaryTypeName","src":"601:7:183","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39613,"mutability":"mutable","name":"reward","nameLocation":"621:6:183","nodeType":"VariableDeclaration","scope":39620,"src":"613:14:183","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39612,"name":"address","nodeType":"ElementaryTypeName","src":"613:7:183","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39615,"mutability":"mutable","name":"amount","nameLocation":"637:6:183","nodeType":"VariableDeclaration","scope":39620,"src":"629:14:183","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39614,"name":"uint256","nodeType":"ElementaryTypeName","src":"629:7:183","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"600:44:183"},"returnParameters":{"id":39619,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39618,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39620,"src":"663:4:183","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":39617,"name":"bool","nodeType":"ElementaryTypeName","src":"663:4:183","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"662:6:183"},"scope":39643,"src":"576:93:183","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39621,"nodeType":"StructuredDocumentation","src":"673:71:183","text":" @return Returns the address of the Incentives Controller"},"functionSelector":"75d26413","id":39626,"implemented":false,"kind":"function","modifiers":[],"name":"getIncentivesController","nameLocation":"756:23:183","nodeType":"FunctionDefinition","parameters":{"id":39622,"nodeType":"ParameterList","parameters":[],"src":"779:2:183"},"returnParameters":{"id":39625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39624,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39626,"src":"805:7:183","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39623,"name":"address","nodeType":"ElementaryTypeName","src":"805:7:183","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"804:9:183"},"scope":39643,"src":"747:67:183","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39627,"nodeType":"StructuredDocumentation","src":"818:63:183","text":" @return Returns the address of the Rewards admin"},"functionSelector":"c6255443","id":39632,"implemented":false,"kind":"function","modifiers":[],"name":"getRewardsAdmin","nameLocation":"893:15:183","nodeType":"FunctionDefinition","parameters":{"id":39628,"nodeType":"ParameterList","parameters":[],"src":"908:2:183"},"returnParameters":{"id":39631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39630,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39632,"src":"934:7:183","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39629,"name":"address","nodeType":"ElementaryTypeName","src":"934:7:183","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"933:9:183"},"scope":39643,"src":"884:59:183","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39633,"nodeType":"StructuredDocumentation","src":"947:270:183","text":" @dev Perform an emergency token withdrawal only callable by the Rewards admin\n @param token Address of the token to withdraw funds from this contract\n @param to Address of the recipient of the withdrawal\n @param amount Amount of the withdrawal"},"functionSelector":"8d8e5da7","id":39642,"implemented":false,"kind":"function","modifiers":[],"name":"emergencyWithdrawal","nameLocation":"1229:19:183","nodeType":"FunctionDefinition","parameters":{"id":39640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39635,"mutability":"mutable","name":"token","nameLocation":"1257:5:183","nodeType":"VariableDeclaration","scope":39642,"src":"1249:13:183","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39634,"name":"address","nodeType":"ElementaryTypeName","src":"1249:7:183","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39637,"mutability":"mutable","name":"to","nameLocation":"1272:2:183","nodeType":"VariableDeclaration","scope":39642,"src":"1264:10:183","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39636,"name":"address","nodeType":"ElementaryTypeName","src":"1264:7:183","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39639,"mutability":"mutable","name":"amount","nameLocation":"1284:6:183","nodeType":"VariableDeclaration","scope":39642,"src":"1276:14:183","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39638,"name":"uint256","nodeType":"ElementaryTypeName","src":"1276:7:183","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1248:43:183"},"returnParameters":{"id":39641,"nodeType":"ParameterList","parameters":[],"src":"1300:0:183"},"scope":39643,"src":"1220:81:183","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":39644,"src":"63:1240:183","usedErrors":[]}],"src":"37:1267:183"},"id":183},"contracts/rewards/libraries/RewardsDataTypes.sol":{"ast":{"absolutePath":"contracts/rewards/libraries/RewardsDataTypes.sol","exportedSymbols":{"IEACAggregatorProxy":[34482],"ITransferStrategyBase":[39643],"RewardsDataTypes":[39707]},"id":39708,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":39645,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:184"},{"absolutePath":"contracts/rewards/interfaces/ITransferStrategyBase.sol","file":"../interfaces/ITransferStrategyBase.sol","id":39647,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39708,"sourceUnit":39644,"src":"63:78:184","symbolAliases":[{"foreign":{"id":39646,"name":"ITransferStrategyBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:21:184","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/misc/interfaces/IEACAggregatorProxy.sol","file":"../../misc/interfaces/IEACAggregatorProxy.sol","id":39649,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39708,"sourceUnit":34483,"src":"142:82:184","symbolAliases":[{"foreign":{"id":39648,"name":"IEACAggregatorProxy","nodeType":"Identifier","overloadedDeclarations":[],"src":"150:19:184","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"RewardsDataTypes","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":39707,"linearizedBaseContracts":[39707],"name":"RewardsDataTypes","nameLocation":"234:16:184","nodeType":"ContractDefinition","nodes":[{"canonicalName":"RewardsDataTypes.RewardsConfigInput","id":39666,"members":[{"constant":false,"id":39651,"mutability":"mutable","name":"emissionPerSecond","nameLocation":"294:17:184","nodeType":"VariableDeclaration","scope":39666,"src":"287:24:184","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"},"typeName":{"id":39650,"name":"uint88","nodeType":"ElementaryTypeName","src":"287:6:184","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"visibility":"internal"},{"constant":false,"id":39653,"mutability":"mutable","name":"totalSupply","nameLocation":"325:11:184","nodeType":"VariableDeclaration","scope":39666,"src":"317:19:184","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39652,"name":"uint256","nodeType":"ElementaryTypeName","src":"317:7:184","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39655,"mutability":"mutable","name":"distributionEnd","nameLocation":"349:15:184","nodeType":"VariableDeclaration","scope":39666,"src":"342:22:184","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":39654,"name":"uint32","nodeType":"ElementaryTypeName","src":"342:6:184","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":39657,"mutability":"mutable","name":"asset","nameLocation":"378:5:184","nodeType":"VariableDeclaration","scope":39666,"src":"370:13:184","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39656,"name":"address","nodeType":"ElementaryTypeName","src":"370:7:184","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39659,"mutability":"mutable","name":"reward","nameLocation":"397:6:184","nodeType":"VariableDeclaration","scope":39666,"src":"389:14:184","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39658,"name":"address","nodeType":"ElementaryTypeName","src":"389:7:184","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39662,"mutability":"mutable","name":"transferStrategy","nameLocation":"431:16:184","nodeType":"VariableDeclaration","scope":39666,"src":"409:38:184","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"},"typeName":{"id":39661,"nodeType":"UserDefinedTypeName","pathNode":{"id":39660,"name":"ITransferStrategyBase","nodeType":"IdentifierPath","referencedDeclaration":39643,"src":"409:21:184"},"referencedDeclaration":39643,"src":"409:21:184","typeDescriptions":{"typeIdentifier":"t_contract$_ITransferStrategyBase_$39643","typeString":"contract ITransferStrategyBase"}},"visibility":"internal"},{"constant":false,"id":39665,"mutability":"mutable","name":"rewardOracle","nameLocation":"473:12:184","nodeType":"VariableDeclaration","scope":39666,"src":"453:32:184","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"},"typeName":{"id":39664,"nodeType":"UserDefinedTypeName","pathNode":{"id":39663,"name":"IEACAggregatorProxy","nodeType":"IdentifierPath","referencedDeclaration":34482,"src":"453:19:184"},"referencedDeclaration":34482,"src":"453:19:184","typeDescriptions":{"typeIdentifier":"t_contract$_IEACAggregatorProxy_$34482","typeString":"contract IEACAggregatorProxy"}},"visibility":"internal"}],"name":"RewardsConfigInput","nameLocation":"262:18:184","nodeType":"StructDefinition","scope":39707,"src":"255:235:184","visibility":"public"},{"canonicalName":"RewardsDataTypes.UserAssetBalance","id":39673,"members":[{"constant":false,"id":39668,"mutability":"mutable","name":"asset","nameLocation":"532:5:184","nodeType":"VariableDeclaration","scope":39673,"src":"524:13:184","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39667,"name":"address","nodeType":"ElementaryTypeName","src":"524:7:184","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39670,"mutability":"mutable","name":"userBalance","nameLocation":"551:11:184","nodeType":"VariableDeclaration","scope":39673,"src":"543:19:184","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39669,"name":"uint256","nodeType":"ElementaryTypeName","src":"543:7:184","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39672,"mutability":"mutable","name":"totalSupply","nameLocation":"576:11:184","nodeType":"VariableDeclaration","scope":39673,"src":"568:19:184","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39671,"name":"uint256","nodeType":"ElementaryTypeName","src":"568:7:184","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"UserAssetBalance","nameLocation":"501:16:184","nodeType":"StructDefinition","scope":39707,"src":"494:98:184","visibility":"public"},{"canonicalName":"RewardsDataTypes.UserData","id":39678,"members":[{"constant":false,"id":39675,"mutability":"mutable","name":"index","nameLocation":"689:5:184","nodeType":"VariableDeclaration","scope":39678,"src":"681:13:184","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"},"typeName":{"id":39674,"name":"uint104","nodeType":"ElementaryTypeName","src":"681:7:184","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"visibility":"internal"},{"constant":false,"id":39677,"mutability":"mutable","name":"accrued","nameLocation":"783:7:184","nodeType":"VariableDeclaration","scope":39678,"src":"775:15:184","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":39676,"name":"uint128","nodeType":"ElementaryTypeName","src":"775:7:184","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"name":"UserData","nameLocation":"603:8:184","nodeType":"StructDefinition","scope":39707,"src":"596:199:184","visibility":"public"},{"canonicalName":"RewardsDataTypes.RewardData","id":39692,"members":[{"constant":false,"id":39680,"mutability":"mutable","name":"index","nameLocation":"881:5:184","nodeType":"VariableDeclaration","scope":39692,"src":"873:13:184","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"},"typeName":{"id":39679,"name":"uint104","nodeType":"ElementaryTypeName","src":"873:7:184","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"visibility":"internal"},{"constant":false,"id":39682,"mutability":"mutable","name":"emissionPerSecond","nameLocation":"953:17:184","nodeType":"VariableDeclaration","scope":39692,"src":"946:24:184","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"},"typeName":{"id":39681,"name":"uint88","nodeType":"ElementaryTypeName","src":"946:6:184","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"visibility":"internal"},{"constant":false,"id":39684,"mutability":"mutable","name":"lastUpdateTimestamp","nameLocation":"1032:19:184","nodeType":"VariableDeclaration","scope":39692,"src":"1025:26:184","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":39683,"name":"uint32","nodeType":"ElementaryTypeName","src":"1025:6:184","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":39686,"mutability":"mutable","name":"distributionEnd","nameLocation":"1123:15:184","nodeType":"VariableDeclaration","scope":39692,"src":"1116:22:184","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":39685,"name":"uint32","nodeType":"ElementaryTypeName","src":"1116:6:184","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":39691,"mutability":"mutable","name":"usersData","nameLocation":"1251:9:184","nodeType":"VariableDeclaration","scope":39692,"src":"1222:38:184","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserData_$39678_storage_$","typeString":"mapping(address => struct RewardsDataTypes.UserData)"},"typeName":{"id":39690,"keyType":{"id":39687,"name":"address","nodeType":"ElementaryTypeName","src":"1230:7:184","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1222:28:184","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_UserData_$39678_storage_$","typeString":"mapping(address => struct RewardsDataTypes.UserData)"},"valueType":{"id":39689,"nodeType":"UserDefinedTypeName","pathNode":{"id":39688,"name":"UserData","nodeType":"IdentifierPath","referencedDeclaration":39678,"src":"1241:8:184"},"referencedDeclaration":39678,"src":"1241:8:184","typeDescriptions":{"typeIdentifier":"t_struct$_UserData_$39678_storage_ptr","typeString":"struct RewardsDataTypes.UserData"}}},"visibility":"internal"}],"name":"RewardData","nameLocation":"806:10:184","nodeType":"StructDefinition","scope":39707,"src":"799:466:184","visibility":"public"},{"canonicalName":"RewardsDataTypes.AssetData","id":39706,"members":[{"constant":false,"id":39697,"mutability":"mutable","name":"rewards","nameLocation":"1410:7:184","nodeType":"VariableDeclaration","scope":39706,"src":"1379:38:184","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData)"},"typeName":{"id":39696,"keyType":{"id":39693,"name":"address","nodeType":"ElementaryTypeName","src":"1387:7:184","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1379:30:184","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_RewardData_$39692_storage_$","typeString":"mapping(address => struct RewardsDataTypes.RewardData)"},"valueType":{"id":39695,"nodeType":"UserDefinedTypeName","pathNode":{"id":39694,"name":"RewardData","nodeType":"IdentifierPath","referencedDeclaration":39692,"src":"1398:10:184"},"referencedDeclaration":39692,"src":"1398:10:184","typeDescriptions":{"typeIdentifier":"t_struct$_RewardData_$39692_storage_ptr","typeString":"struct RewardsDataTypes.RewardData"}}},"visibility":"internal"},{"constant":false,"id":39701,"mutability":"mutable","name":"availableRewards","nameLocation":"1503:16:184","nodeType":"VariableDeclaration","scope":39706,"src":"1475:44:184","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint128_$_t_address_$","typeString":"mapping(uint128 => address)"},"typeName":{"id":39700,"keyType":{"id":39698,"name":"uint128","nodeType":"ElementaryTypeName","src":"1483:7:184","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Mapping","src":"1475:27:184","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint128_$_t_address_$","typeString":"mapping(uint128 => address)"},"valueType":{"id":39699,"name":"address","nodeType":"ElementaryTypeName","src":"1494:7:184","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"constant":false,"id":39703,"mutability":"mutable","name":"availableRewardsCount","nameLocation":"1577:21:184","nodeType":"VariableDeclaration","scope":39706,"src":"1569:29:184","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":39702,"name":"uint128","nodeType":"ElementaryTypeName","src":"1569:7:184","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":39705,"mutability":"mutable","name":"decimals","nameLocation":"1649:8:184","nodeType":"VariableDeclaration","scope":39706,"src":"1643:14:184","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":39704,"name":"uint8","nodeType":"ElementaryTypeName","src":"1643:5:184","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"name":"AssetData","nameLocation":"1276:9:184","nodeType":"StructDefinition","scope":39707,"src":"1269:393:184","visibility":"public"}],"scope":39708,"src":"226:1438:184","usedErrors":[]}],"src":"37:1628:184"},"id":184},"contracts/rewards/transfer-strategies/PullRewardsTransferStrategy.sol":{"ast":{"absolutePath":"contracts/rewards/transfer-strategies/PullRewardsTransferStrategy.sol","exportedSymbols":{"GPv2SafeERC20":[118],"IERC20":[1442],"IPullRewardsTransferStrategy":[39146],"ITransferStrategyBase":[39643],"PullRewardsTransferStrategy":[39787],"TransferStrategyBase":[40099]},"id":39788,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":39709,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:185"},{"absolutePath":"contracts/rewards/interfaces/IPullRewardsTransferStrategy.sol","file":"../interfaces/IPullRewardsTransferStrategy.sol","id":39711,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39788,"sourceUnit":39147,"src":"63:92:185","symbolAliases":[{"foreign":{"id":39710,"name":"IPullRewardsTransferStrategy","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:28:185","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/rewards/interfaces/ITransferStrategyBase.sol","file":"../interfaces/ITransferStrategyBase.sol","id":39713,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39788,"sourceUnit":39644,"src":"156:78:185","symbolAliases":[{"foreign":{"id":39712,"name":"ITransferStrategyBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"164:21:185","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/rewards/transfer-strategies/TransferStrategyBase.sol","file":"./TransferStrategyBase.sol","id":39715,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39788,"sourceUnit":40100,"src":"235:64:185","symbolAliases":[{"foreign":{"id":39714,"name":"TransferStrategyBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"243:20:185","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":39717,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39788,"sourceUnit":119,"src":"300:102:185","symbolAliases":[{"foreign":{"id":39716,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"308:13:185","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","id":39719,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39788,"sourceUnit":1443,"src":"403:94:185","symbolAliases":[{"foreign":{"id":39718,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"411:6:185","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":39721,"name":"TransferStrategyBase","nodeType":"IdentifierPath","referencedDeclaration":40099,"src":"830:20:185"},"id":39722,"nodeType":"InheritanceSpecifier","src":"830:20:185"},{"baseName":{"id":39723,"name":"IPullRewardsTransferStrategy","nodeType":"IdentifierPath","referencedDeclaration":39146,"src":"852:28:185"},"id":39724,"nodeType":"InheritanceSpecifier","src":"852:28:185"}],"canonicalName":"PullRewardsTransferStrategy","contractDependencies":[],"contractKind":"contract","documentation":{"id":39720,"nodeType":"StructuredDocumentation","src":"499:290:185","text":" @title PullRewardsTransferStrategy\n @notice Transfer strategy that pulls ERC20 rewards from an external account to the user address.\n The external account could be a smart contract or EOA that must approve to the PullRewardsTransferStrategy contract address.\n @author Aave*"},"fullyImplemented":true,"id":39787,"linearizedBaseContracts":[39787,39146,40099,39643],"name":"PullRewardsTransferStrategy","nameLocation":"799:27:185","nodeType":"ContractDefinition","nodes":[{"id":39728,"libraryName":{"id":39725,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"891:13:185"},"nodeType":"UsingForDirective","src":"885:31:185","typeName":{"id":39727,"nodeType":"UserDefinedTypeName","pathNode":{"id":39726,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"909:6:185"},"referencedDeclaration":1442,"src":"909:6:185","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"constant":false,"id":39730,"mutability":"immutable","name":"REWARDS_VAULT","nameLocation":"947:13:185","nodeType":"VariableDeclaration","scope":39787,"src":"920:40:185","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39729,"name":"address","nodeType":"ElementaryTypeName","src":"920:7:185","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"body":{"id":39747,"nodeType":"Block","src":"1124:39:185","statements":[{"expression":{"id":39745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":39743,"name":"REWARDS_VAULT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39730,"src":"1130:13:185","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":39744,"name":"rewardsVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39736,"src":"1146:12:185","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1130:28:185","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":39746,"nodeType":"ExpressionStatement","src":"1130:28:185"}]},"id":39748,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":39739,"name":"incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39732,"src":"1088:20:185","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39740,"name":"rewardsAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39734,"src":"1110:12:185","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":39741,"kind":"baseConstructorSpecifier","modifierName":{"id":39738,"name":"TransferStrategyBase","nodeType":"IdentifierPath","referencedDeclaration":40099,"src":"1067:20:185"},"nodeType":"ModifierInvocation","src":"1067:56:185"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":39737,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39732,"mutability":"mutable","name":"incentivesController","nameLocation":"990:20:185","nodeType":"VariableDeclaration","scope":39748,"src":"982:28:185","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39731,"name":"address","nodeType":"ElementaryTypeName","src":"982:7:185","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39734,"mutability":"mutable","name":"rewardsAdmin","nameLocation":"1024:12:185","nodeType":"VariableDeclaration","scope":39748,"src":"1016:20:185","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39733,"name":"address","nodeType":"ElementaryTypeName","src":"1016:7:185","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39736,"mutability":"mutable","name":"rewardsVault","nameLocation":"1050:12:185","nodeType":"VariableDeclaration","scope":39748,"src":"1042:20:185","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39735,"name":"address","nodeType":"ElementaryTypeName","src":"1042:7:185","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"976:90:185"},"returnParameters":{"id":39742,"nodeType":"ParameterList","parameters":[],"src":"1124:0:185"},"scope":39787,"src":"965:198:185","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[39620,40069],"body":{"id":39776,"nodeType":"Block","src":"1412:87:185","statements":[{"expression":{"arguments":[{"id":39769,"name":"REWARDS_VAULT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39730,"src":"1450:13:185","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39770,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39751,"src":"1465:2:185","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39771,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39755,"src":"1469:6:185","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":39766,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39753,"src":"1425:6:185","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39765,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"1418:6:185","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":39767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1418:14:185","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":39768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransferFrom","nodeType":"MemberAccess","referencedDeclaration":106,"src":"1418:31:185","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,address,uint256)"}},"id":39772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1418:58:185","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39773,"nodeType":"ExpressionStatement","src":"1418:58:185"},{"expression":{"hexValue":"74727565","id":39774,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1490:4:185","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":39764,"id":39775,"nodeType":"Return","src":"1483:11:185"}]},"documentation":{"id":39749,"nodeType":"StructuredDocumentation","src":"1167:36:185","text":"@inheritdoc TransferStrategyBase"},"functionSelector":"16beb982","id":39777,"implemented":true,"kind":"function","modifiers":[{"id":39761,"kind":"modifierInvocation","modifierName":{"id":39760,"name":"onlyIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":40024,"src":"1366:24:185"},"nodeType":"ModifierInvocation","src":"1366:24:185"}],"name":"performTransfer","nameLocation":"1215:15:185","nodeType":"FunctionDefinition","overrides":{"id":39759,"nodeType":"OverrideSpecifier","overrides":[{"id":39757,"name":"TransferStrategyBase","nodeType":"IdentifierPath","referencedDeclaration":40099,"src":"1317:20:185"},{"id":39758,"name":"ITransferStrategyBase","nodeType":"IdentifierPath","referencedDeclaration":39643,"src":"1339:21:185"}],"src":"1308:53:185"},"parameters":{"id":39756,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39751,"mutability":"mutable","name":"to","nameLocation":"1244:2:185","nodeType":"VariableDeclaration","scope":39777,"src":"1236:10:185","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39750,"name":"address","nodeType":"ElementaryTypeName","src":"1236:7:185","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39753,"mutability":"mutable","name":"reward","nameLocation":"1260:6:185","nodeType":"VariableDeclaration","scope":39777,"src":"1252:14:185","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39752,"name":"address","nodeType":"ElementaryTypeName","src":"1252:7:185","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39755,"mutability":"mutable","name":"amount","nameLocation":"1280:6:185","nodeType":"VariableDeclaration","scope":39777,"src":"1272:14:185","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39754,"name":"uint256","nodeType":"ElementaryTypeName","src":"1272:7:185","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1230:60:185"},"returnParameters":{"id":39764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39763,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39777,"src":"1404:4:185","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":39762,"name":"bool","nodeType":"ElementaryTypeName","src":"1404:4:185","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1403:6:185"},"scope":39787,"src":"1206:293:185","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39145],"body":{"id":39785,"nodeType":"Block","src":"1609:31:185","statements":[{"expression":{"id":39783,"name":"REWARDS_VAULT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39730,"src":"1622:13:185","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":39782,"id":39784,"nodeType":"Return","src":"1615:20:185"}]},"documentation":{"id":39778,"nodeType":"StructuredDocumentation","src":"1503:44:185","text":"@inheritdoc IPullRewardsTransferStrategy"},"functionSelector":"e23ddec5","id":39786,"implemented":true,"kind":"function","modifiers":[],"name":"getRewardsVault","nameLocation":"1559:15:185","nodeType":"FunctionDefinition","parameters":{"id":39779,"nodeType":"ParameterList","parameters":[],"src":"1574:2:185"},"returnParameters":{"id":39782,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39781,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39786,"src":"1600:7:185","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39780,"name":"address","nodeType":"ElementaryTypeName","src":"1600:7:185","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1599:9:185"},"scope":39787,"src":"1550:90:185","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":39788,"src":"790:852:185","usedErrors":[]}],"src":"37:1606:185"},"id":185},"contracts/rewards/transfer-strategies/StakedTokenTransferStrategy.sol":{"ast":{"absolutePath":"contracts/rewards/transfer-strategies/StakedTokenTransferStrategy.sol","exportedSymbols":{"GPv2SafeERC20":[118],"IERC20":[1442],"IStakedToken":[39566],"IStakedTokenTransferStrategy":[39596],"ITransferStrategyBase":[39643],"StakedTokenTransferStrategy":[39976],"TransferStrategyBase":[40099]},"id":39977,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":39789,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:186"},{"absolutePath":"contracts/rewards/interfaces/IStakedToken.sol","file":"../interfaces/IStakedToken.sol","id":39791,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39977,"sourceUnit":39567,"src":"63:60:186","symbolAliases":[{"foreign":{"id":39790,"name":"IStakedToken","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:12:186","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/rewards/interfaces/IStakedTokenTransferStrategy.sol","file":"../interfaces/IStakedTokenTransferStrategy.sol","id":39793,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39977,"sourceUnit":39597,"src":"124:92:186","symbolAliases":[{"foreign":{"id":39792,"name":"IStakedTokenTransferStrategy","nodeType":"Identifier","overloadedDeclarations":[],"src":"132:28:186","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/rewards/interfaces/ITransferStrategyBase.sol","file":"../interfaces/ITransferStrategyBase.sol","id":39795,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39977,"sourceUnit":39644,"src":"217:78:186","symbolAliases":[{"foreign":{"id":39794,"name":"ITransferStrategyBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"225:21:186","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/rewards/transfer-strategies/TransferStrategyBase.sol","file":"./TransferStrategyBase.sol","id":39797,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39977,"sourceUnit":40100,"src":"296:64:186","symbolAliases":[{"foreign":{"id":39796,"name":"TransferStrategyBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"304:20:186","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":39799,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39977,"sourceUnit":119,"src":"361:102:186","symbolAliases":[{"foreign":{"id":39798,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"369:13:186","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","id":39801,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39977,"sourceUnit":1443,"src":"464:94:186","symbolAliases":[{"foreign":{"id":39800,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"472:6:186","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":39803,"name":"TransferStrategyBase","nodeType":"IdentifierPath","referencedDeclaration":40099,"src":"877:20:186"},"id":39804,"nodeType":"InheritanceSpecifier","src":"877:20:186"},{"baseName":{"id":39805,"name":"IStakedTokenTransferStrategy","nodeType":"IdentifierPath","referencedDeclaration":39596,"src":"899:28:186"},"id":39806,"nodeType":"InheritanceSpecifier","src":"899:28:186"}],"canonicalName":"StakedTokenTransferStrategy","contractDependencies":[],"contractKind":"contract","documentation":{"id":39802,"nodeType":"StructuredDocumentation","src":"560:276:186","text":" @title StakedTokenTransferStrategy\n @notice Transfer strategy that stakes the rewards into a staking contract and transfers the staking contract token.\n The underlying token must be transferred to this contract to be able to stake it on demand.\n @author Aave*"},"fullyImplemented":true,"id":39976,"linearizedBaseContracts":[39976,39596,40099,39643],"name":"StakedTokenTransferStrategy","nameLocation":"846:27:186","nodeType":"ContractDefinition","nodes":[{"id":39810,"libraryName":{"id":39807,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"938:13:186"},"nodeType":"UsingForDirective","src":"932:31:186","typeName":{"id":39809,"nodeType":"UserDefinedTypeName","pathNode":{"id":39808,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"956:6:186"},"referencedDeclaration":1442,"src":"956:6:186","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"constant":false,"id":39813,"mutability":"immutable","name":"STAKE_CONTRACT","nameLocation":"999:14:186","nodeType":"VariableDeclaration","scope":39976,"src":"967:46:186","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IStakedToken_$39566","typeString":"contract IStakedToken"},"typeName":{"id":39812,"nodeType":"UserDefinedTypeName","pathNode":{"id":39811,"name":"IStakedToken","nodeType":"IdentifierPath","referencedDeclaration":39566,"src":"967:12:186"},"referencedDeclaration":39566,"src":"967:12:186","typeDescriptions":{"typeIdentifier":"t_contract$_IStakedToken_$39566","typeString":"contract IStakedToken"}},"visibility":"internal"},{"constant":false,"id":39815,"mutability":"immutable","name":"UNDERLYING_TOKEN","nameLocation":"1044:16:186","nodeType":"VariableDeclaration","scope":39976,"src":"1017:43:186","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39814,"name":"address","nodeType":"ElementaryTypeName","src":"1017:7:186","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"body":{"id":39865,"nodeType":"Block","src":"1227:241:186","statements":[{"expression":{"id":39831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":39829,"name":"STAKE_CONTRACT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39813,"src":"1233:14:186","typeDescriptions":{"typeIdentifier":"t_contract$_IStakedToken_$39566","typeString":"contract IStakedToken"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":39830,"name":"stakeToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39822,"src":"1250:10:186","typeDescriptions":{"typeIdentifier":"t_contract$_IStakedToken_$39566","typeString":"contract IStakedToken"}},"src":"1233:27:186","typeDescriptions":{"typeIdentifier":"t_contract$_IStakedToken_$39566","typeString":"contract IStakedToken"}},"id":39832,"nodeType":"ExpressionStatement","src":"1233:27:186"},{"expression":{"id":39837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":39833,"name":"UNDERLYING_TOKEN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39815,"src":"1266:16:186","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":39834,"name":"STAKE_CONTRACT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39813,"src":"1285:14:186","typeDescriptions":{"typeIdentifier":"t_contract$_IStakedToken_$39566","typeString":"contract IStakedToken"}},"id":39835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"STAKED_TOKEN","nodeType":"MemberAccess","referencedDeclaration":39541,"src":"1285:27:186","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":39836,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1285:29:186","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1266:48:186","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":39838,"nodeType":"ExpressionStatement","src":"1266:48:186"},{"expression":{"arguments":[{"arguments":[{"id":39845,"name":"STAKE_CONTRACT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39813,"src":"1362:14:186","typeDescriptions":{"typeIdentifier":"t_contract$_IStakedToken_$39566","typeString":"contract IStakedToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IStakedToken_$39566","typeString":"contract IStakedToken"}],"id":39844,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1354:7:186","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39843,"name":"address","nodeType":"ElementaryTypeName","src":"1354:7:186","typeDescriptions":{}}},"id":39846,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1354:23:186","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":39847,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1379:1:186","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"arguments":[{"id":39840,"name":"UNDERLYING_TOKEN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39815,"src":"1328:16:186","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39839,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"1321:6:186","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":39841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1321:24:186","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":39842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1411,"src":"1321:32:186","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":39848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1321:60:186","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":39849,"nodeType":"ExpressionStatement","src":"1321:60:186"},{"expression":{"arguments":[{"arguments":[{"id":39856,"name":"STAKE_CONTRACT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39813,"src":"1428:14:186","typeDescriptions":{"typeIdentifier":"t_contract$_IStakedToken_$39566","typeString":"contract IStakedToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IStakedToken_$39566","typeString":"contract IStakedToken"}],"id":39855,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1420:7:186","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39854,"name":"address","nodeType":"ElementaryTypeName","src":"1420:7:186","typeDescriptions":{}}},"id":39857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1420:23:186","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"arguments":[{"id":39860,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1450:7:186","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":39859,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:186","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":39858,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1445:4:186","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":39861,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1445:13:186","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":39862,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"1445:17:186","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":39851,"name":"UNDERLYING_TOKEN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39815,"src":"1394:16:186","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39850,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"1387:6:186","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":39852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1387:24:186","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":39853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1411,"src":"1387:32:186","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":39863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1387:76:186","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":39864,"nodeType":"ExpressionStatement","src":"1387:76:186"}]},"id":39866,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":39825,"name":"incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39817,"src":"1191:20:186","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39826,"name":"rewardsAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39819,"src":"1213:12:186","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":39827,"kind":"baseConstructorSpecifier","modifierName":{"id":39824,"name":"TransferStrategyBase","nodeType":"IdentifierPath","referencedDeclaration":40099,"src":"1170:20:186"},"nodeType":"ModifierInvocation","src":"1170:56:186"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":39823,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39817,"mutability":"mutable","name":"incentivesController","nameLocation":"1090:20:186","nodeType":"VariableDeclaration","scope":39866,"src":"1082:28:186","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39816,"name":"address","nodeType":"ElementaryTypeName","src":"1082:7:186","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39819,"mutability":"mutable","name":"rewardsAdmin","nameLocation":"1124:12:186","nodeType":"VariableDeclaration","scope":39866,"src":"1116:20:186","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39818,"name":"address","nodeType":"ElementaryTypeName","src":"1116:7:186","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39822,"mutability":"mutable","name":"stakeToken","nameLocation":"1155:10:186","nodeType":"VariableDeclaration","scope":39866,"src":"1142:23:186","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IStakedToken_$39566","typeString":"contract IStakedToken"},"typeName":{"id":39821,"nodeType":"UserDefinedTypeName","pathNode":{"id":39820,"name":"IStakedToken","nodeType":"IdentifierPath","referencedDeclaration":39566,"src":"1142:12:186"},"referencedDeclaration":39566,"src":"1142:12:186","typeDescriptions":{"typeIdentifier":"t_contract$_IStakedToken_$39566","typeString":"contract IStakedToken"}},"visibility":"internal"}],"src":"1076:93:186"},"returnParameters":{"id":39828,"nodeType":"ParameterList","parameters":[],"src":"1227:0:186"},"scope":39976,"src":"1065:403:186","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[39620,40069],"body":{"id":39902,"nodeType":"Block","src":"1717:145:186","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":39889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39884,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39871,"src":"1731:6:186","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":39887,"name":"STAKE_CONTRACT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39813,"src":"1749:14:186","typeDescriptions":{"typeIdentifier":"t_contract$_IStakedToken_$39566","typeString":"contract IStakedToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IStakedToken_$39566","typeString":"contract IStakedToken"}],"id":39886,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1741:7:186","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39885,"name":"address","nodeType":"ElementaryTypeName","src":"1741:7:186","typeDescriptions":{}}},"id":39888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1741:23:186","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1731:33:186","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5245574152445f544f4b454e5f4e4f545f5354414b455f434f4e5452414354","id":39890,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1766:33:186","typeDescriptions":{"typeIdentifier":"t_stringliteral_08038cf80ac1598f9b74d7d07c922218c154c3b956e28086d10706edce20d1b3","typeString":"literal_string \"REWARD_TOKEN_NOT_STAKE_CONTRACT\""},"value":"REWARD_TOKEN_NOT_STAKE_CONTRACT"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_08038cf80ac1598f9b74d7d07c922218c154c3b956e28086d10706edce20d1b3","typeString":"literal_string \"REWARD_TOKEN_NOT_STAKE_CONTRACT\""}],"id":39883,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1723:7:186","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":39891,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1723:77:186","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39892,"nodeType":"ExpressionStatement","src":"1723:77:186"},{"expression":{"arguments":[{"id":39896,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39869,"src":"1828:2:186","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39897,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39873,"src":"1832:6:186","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":39893,"name":"STAKE_CONTRACT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39813,"src":"1807:14:186","typeDescriptions":{"typeIdentifier":"t_contract$_IStakedToken_$39566","typeString":"contract IStakedToken"}},"id":39895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"stake","nodeType":"MemberAccess","referencedDeclaration":39548,"src":"1807:20:186","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":39898,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1807:32:186","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39899,"nodeType":"ExpressionStatement","src":"1807:32:186"},{"expression":{"hexValue":"74727565","id":39900,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1853:4:186","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":39882,"id":39901,"nodeType":"Return","src":"1846:11:186"}]},"documentation":{"id":39867,"nodeType":"StructuredDocumentation","src":"1472:36:186","text":"@inheritdoc TransferStrategyBase"},"functionSelector":"16beb982","id":39903,"implemented":true,"kind":"function","modifiers":[{"id":39879,"kind":"modifierInvocation","modifierName":{"id":39878,"name":"onlyIncentivesController","nodeType":"IdentifierPath","referencedDeclaration":40024,"src":"1671:24:186"},"nodeType":"ModifierInvocation","src":"1671:24:186"}],"name":"performTransfer","nameLocation":"1520:15:186","nodeType":"FunctionDefinition","overrides":{"id":39877,"nodeType":"OverrideSpecifier","overrides":[{"id":39875,"name":"TransferStrategyBase","nodeType":"IdentifierPath","referencedDeclaration":40099,"src":"1622:20:186"},{"id":39876,"name":"ITransferStrategyBase","nodeType":"IdentifierPath","referencedDeclaration":39643,"src":"1644:21:186"}],"src":"1613:53:186"},"parameters":{"id":39874,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39869,"mutability":"mutable","name":"to","nameLocation":"1549:2:186","nodeType":"VariableDeclaration","scope":39903,"src":"1541:10:186","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39868,"name":"address","nodeType":"ElementaryTypeName","src":"1541:7:186","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39871,"mutability":"mutable","name":"reward","nameLocation":"1565:6:186","nodeType":"VariableDeclaration","scope":39903,"src":"1557:14:186","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39870,"name":"address","nodeType":"ElementaryTypeName","src":"1557:7:186","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39873,"mutability":"mutable","name":"amount","nameLocation":"1585:6:186","nodeType":"VariableDeclaration","scope":39903,"src":"1577:14:186","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39872,"name":"uint256","nodeType":"ElementaryTypeName","src":"1577:7:186","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1535:60:186"},"returnParameters":{"id":39882,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39881,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39903,"src":"1709:4:186","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":39880,"name":"bool","nodeType":"ElementaryTypeName","src":"1709:4:186","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1708:6:186"},"scope":39976,"src":"1511:351:186","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39579],"body":{"id":39935,"nodeType":"Block","src":"1964:153:186","statements":[{"expression":{"arguments":[{"arguments":[{"id":39915,"name":"STAKE_CONTRACT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39813,"src":"2011:14:186","typeDescriptions":{"typeIdentifier":"t_contract$_IStakedToken_$39566","typeString":"contract IStakedToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IStakedToken_$39566","typeString":"contract IStakedToken"}],"id":39914,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2003:7:186","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39913,"name":"address","nodeType":"ElementaryTypeName","src":"2003:7:186","typeDescriptions":{}}},"id":39916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2003:23:186","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":39917,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2028:1:186","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"arguments":[{"id":39910,"name":"UNDERLYING_TOKEN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39815,"src":"1977:16:186","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39909,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"1970:6:186","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":39911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1970:24:186","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":39912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1411,"src":"1970:32:186","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":39918,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1970:60:186","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":39919,"nodeType":"ExpressionStatement","src":"1970:60:186"},{"expression":{"arguments":[{"arguments":[{"id":39926,"name":"STAKE_CONTRACT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39813,"src":"2077:14:186","typeDescriptions":{"typeIdentifier":"t_contract$_IStakedToken_$39566","typeString":"contract IStakedToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IStakedToken_$39566","typeString":"contract IStakedToken"}],"id":39925,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2069:7:186","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39924,"name":"address","nodeType":"ElementaryTypeName","src":"2069:7:186","typeDescriptions":{}}},"id":39927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2069:23:186","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"arguments":[{"id":39930,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2099:7:186","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":39929,"name":"uint256","nodeType":"ElementaryTypeName","src":"2099:7:186","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":39928,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2094:4:186","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":39931,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2094:13:186","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":39932,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"2094:17:186","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":39921,"name":"UNDERLYING_TOKEN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39815,"src":"2043:16:186","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39920,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"2036:6:186","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":39922,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2036:24:186","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":39923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1411,"src":"2036:32:186","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":39933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2036:76:186","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":39934,"nodeType":"ExpressionStatement","src":"2036:76:186"}]},"documentation":{"id":39904,"nodeType":"StructuredDocumentation","src":"1866:44:186","text":"@inheritdoc IStakedTokenTransferStrategy"},"functionSelector":"a3406251","id":39936,"implemented":true,"kind":"function","modifiers":[{"id":39907,"kind":"modifierInvocation","modifierName":{"id":39906,"name":"onlyRewardsAdmin","nodeType":"IdentifierPath","referencedDeclaration":40037,"src":"1947:16:186"},"nodeType":"ModifierInvocation","src":"1947:16:186"}],"name":"renewApproval","nameLocation":"1922:13:186","nodeType":"FunctionDefinition","parameters":{"id":39905,"nodeType":"ParameterList","parameters":[],"src":"1935:2:186"},"returnParameters":{"id":39908,"nodeType":"ParameterList","parameters":[],"src":"1964:0:186"},"scope":39976,"src":"1913:204:186","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39583],"body":{"id":39953,"nodeType":"Block","src":"2218:71:186","statements":[{"expression":{"arguments":[{"arguments":[{"id":39948,"name":"STAKE_CONTRACT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39813,"src":"2265:14:186","typeDescriptions":{"typeIdentifier":"t_contract$_IStakedToken_$39566","typeString":"contract IStakedToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IStakedToken_$39566","typeString":"contract IStakedToken"}],"id":39947,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2257:7:186","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39946,"name":"address","nodeType":"ElementaryTypeName","src":"2257:7:186","typeDescriptions":{}}},"id":39949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2257:23:186","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":39950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2282:1:186","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"arguments":[{"id":39943,"name":"UNDERLYING_TOKEN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39815,"src":"2231:16:186","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39942,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"2224:6:186","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":39944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2224:24:186","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":39945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1411,"src":"2224:32:186","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":39951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2224:60:186","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":39952,"nodeType":"ExpressionStatement","src":"2224:60:186"}]},"documentation":{"id":39937,"nodeType":"StructuredDocumentation","src":"2121:44:186","text":"@inheritdoc IStakedTokenTransferStrategy"},"functionSelector":"3a342acc","id":39954,"implemented":true,"kind":"function","modifiers":[{"id":39940,"kind":"modifierInvocation","modifierName":{"id":39939,"name":"onlyRewardsAdmin","nodeType":"IdentifierPath","referencedDeclaration":40037,"src":"2201:16:186"},"nodeType":"ModifierInvocation","src":"2201:16:186"}],"name":"dropApproval","nameLocation":"2177:12:186","nodeType":"FunctionDefinition","parameters":{"id":39938,"nodeType":"ParameterList","parameters":[],"src":"2189:2:186"},"returnParameters":{"id":39941,"nodeType":"ParameterList","parameters":[],"src":"2218:0:186"},"scope":39976,"src":"2168:121:186","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[39589],"body":{"id":39965,"nodeType":"Block","src":"2400:41:186","statements":[{"expression":{"arguments":[{"id":39962,"name":"STAKE_CONTRACT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39813,"src":"2421:14:186","typeDescriptions":{"typeIdentifier":"t_contract$_IStakedToken_$39566","typeString":"contract IStakedToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IStakedToken_$39566","typeString":"contract IStakedToken"}],"id":39961,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2413:7:186","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39960,"name":"address","nodeType":"ElementaryTypeName","src":"2413:7:186","typeDescriptions":{}}},"id":39963,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2413:23:186","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":39959,"id":39964,"nodeType":"Return","src":"2406:30:186"}]},"documentation":{"id":39955,"nodeType":"StructuredDocumentation","src":"2293:44:186","text":"@inheritdoc IStakedTokenTransferStrategy"},"functionSelector":"dfd29d9e","id":39966,"implemented":true,"kind":"function","modifiers":[],"name":"getStakeContract","nameLocation":"2349:16:186","nodeType":"FunctionDefinition","parameters":{"id":39956,"nodeType":"ParameterList","parameters":[],"src":"2365:2:186"},"returnParameters":{"id":39959,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39958,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39966,"src":"2391:7:186","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39957,"name":"address","nodeType":"ElementaryTypeName","src":"2391:7:186","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2390:9:186"},"scope":39976,"src":"2340:101:186","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[39595],"body":{"id":39974,"nodeType":"Block","src":"2554:34:186","statements":[{"expression":{"id":39972,"name":"UNDERLYING_TOKEN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39815,"src":"2567:16:186","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":39971,"id":39973,"nodeType":"Return","src":"2560:23:186"}]},"documentation":{"id":39967,"nodeType":"StructuredDocumentation","src":"2445:44:186","text":"@inheritdoc IStakedTokenTransferStrategy"},"functionSelector":"ee719bc8","id":39975,"implemented":true,"kind":"function","modifiers":[],"name":"getUnderlyingToken","nameLocation":"2501:18:186","nodeType":"FunctionDefinition","parameters":{"id":39968,"nodeType":"ParameterList","parameters":[],"src":"2519:2:186"},"returnParameters":{"id":39971,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39970,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39975,"src":"2545:7:186","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39969,"name":"address","nodeType":"ElementaryTypeName","src":"2545:7:186","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2544:9:186"},"scope":39976,"src":"2492:96:186","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":39977,"src":"837:1753:186","usedErrors":[]}],"src":"37:2554:186"},"id":186},"contracts/rewards/transfer-strategies/TransferStrategyBase.sol":{"ast":{"absolutePath":"contracts/rewards/transfer-strategies/TransferStrategyBase.sol","exportedSymbols":{"GPv2SafeERC20":[118],"IERC20":[1442],"ITransferStrategyBase":[39643],"TransferStrategyBase":[40099]},"id":40100,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":39978,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:187"},{"absolutePath":"contracts/rewards/interfaces/ITransferStrategyBase.sol","file":"../interfaces/ITransferStrategyBase.sol","id":39980,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40100,"sourceUnit":39644,"src":"63:78:187","symbolAliases":[{"foreign":{"id":39979,"name":"ITransferStrategyBase","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:21:187","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","file":"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol","id":39982,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40100,"sourceUnit":119,"src":"142:102:187","symbolAliases":[{"foreign":{"id":39981,"name":"GPv2SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"150:13:187","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","id":39984,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40100,"sourceUnit":1443,"src":"245:94:187","symbolAliases":[{"foreign":{"id":39983,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"253:6:187","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":39986,"name":"ITransferStrategyBase","nodeType":"IdentifierPath","referencedDeclaration":39643,"src":"442:21:187"},"id":39987,"nodeType":"InheritanceSpecifier","src":"442:21:187"}],"canonicalName":"TransferStrategyBase","contractDependencies":[],"contractKind":"contract","documentation":{"id":39985,"nodeType":"StructuredDocumentation","src":"341:58:187","text":" @title TransferStrategyStorage\n @author Aave*"},"fullyImplemented":false,"id":40099,"linearizedBaseContracts":[40099,39643],"name":"TransferStrategyBase","nameLocation":"418:20:187","nodeType":"ContractDefinition","nodes":[{"id":39991,"libraryName":{"id":39988,"name":"GPv2SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":118,"src":"474:13:187"},"nodeType":"UsingForDirective","src":"468:31:187","typeName":{"id":39990,"nodeType":"UserDefinedTypeName","pathNode":{"id":39989,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"492:6:187"},"referencedDeclaration":1442,"src":"492:6:187","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"constant":false,"id":39993,"mutability":"immutable","name":"INCENTIVES_CONTROLLER","nameLocation":"530:21:187","nodeType":"VariableDeclaration","scope":40099,"src":"503:48:187","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39992,"name":"address","nodeType":"ElementaryTypeName","src":"503:7:187","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39995,"mutability":"immutable","name":"REWARDS_ADMIN","nameLocation":"582:13:187","nodeType":"VariableDeclaration","scope":40099,"src":"555:40:187","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39994,"name":"address","nodeType":"ElementaryTypeName","src":"555:7:187","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"body":{"id":40010,"nodeType":"Block","src":"664:89:187","statements":[{"expression":{"id":40004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":40002,"name":"INCENTIVES_CONTROLLER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39993,"src":"670:21:187","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":40003,"name":"incentivesController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39997,"src":"694:20:187","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"670:44:187","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":40005,"nodeType":"ExpressionStatement","src":"670:44:187"},{"expression":{"id":40008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":40006,"name":"REWARDS_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39995,"src":"720:13:187","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":40007,"name":"rewardsAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39999,"src":"736:12:187","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"720:28:187","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":40009,"nodeType":"ExpressionStatement","src":"720:28:187"}]},"id":40011,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":40000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39997,"mutability":"mutable","name":"incentivesController","nameLocation":"620:20:187","nodeType":"VariableDeclaration","scope":40011,"src":"612:28:187","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39996,"name":"address","nodeType":"ElementaryTypeName","src":"612:7:187","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39999,"mutability":"mutable","name":"rewardsAdmin","nameLocation":"650:12:187","nodeType":"VariableDeclaration","scope":40011,"src":"642:20:187","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39998,"name":"address","nodeType":"ElementaryTypeName","src":"642:7:187","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"611:52:187"},"returnParameters":{"id":40001,"nodeType":"ParameterList","parameters":[],"src":"664:0:187"},"scope":40099,"src":"600:153:187","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":40023,"nodeType":"Block","src":"865:98:187","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":40018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40015,"name":"INCENTIVES_CONTROLLER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39993,"src":"879:21:187","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":40016,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"904:3:187","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":40017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"904:10:187","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"879:35:187","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"43414c4c45525f4e4f545f494e43454e54495645535f434f4e54524f4c4c4552","id":40019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"916:34:187","typeDescriptions":{"typeIdentifier":"t_stringliteral_81338f1a577db8c7c83833eb7ec6bb164402c9f5cc1b20dac857316f1c65643a","typeString":"literal_string \"CALLER_NOT_INCENTIVES_CONTROLLER\""},"value":"CALLER_NOT_INCENTIVES_CONTROLLER"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_81338f1a577db8c7c83833eb7ec6bb164402c9f5cc1b20dac857316f1c65643a","typeString":"literal_string \"CALLER_NOT_INCENTIVES_CONTROLLER\""}],"id":40014,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"871:7:187","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40020,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"871:80:187","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40021,"nodeType":"ExpressionStatement","src":"871:80:187"},{"id":40022,"nodeType":"PlaceholderStatement","src":"957:1:187"}]},"documentation":{"id":40012,"nodeType":"StructuredDocumentation","src":"757:69:187","text":" @dev Modifier for incentives controller only functions"},"id":40024,"name":"onlyIncentivesController","nameLocation":"838:24:187","nodeType":"ModifierDefinition","parameters":{"id":40013,"nodeType":"ParameterList","parameters":[],"src":"862:2:187"},"src":"829:134:187","virtual":false,"visibility":"internal"},{"body":{"id":40036,"nodeType":"Block","src":"1058:76:187","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":40031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40028,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1072:3:187","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":40029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1072:10:187","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":40030,"name":"REWARDS_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39995,"src":"1086:13:187","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1072:27:187","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f4e4c595f524557415244535f41444d494e","id":40032,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1101:20:187","typeDescriptions":{"typeIdentifier":"t_stringliteral_3f731c6282513aad661017d660e9777df98697b25477c4a167f4ae2ad258b6ef","typeString":"literal_string \"ONLY_REWARDS_ADMIN\""},"value":"ONLY_REWARDS_ADMIN"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3f731c6282513aad661017d660e9777df98697b25477c4a167f4ae2ad258b6ef","typeString":"literal_string \"ONLY_REWARDS_ADMIN\""}],"id":40027,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1064:7:187","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1064:58:187","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40034,"nodeType":"ExpressionStatement","src":"1064:58:187"},{"id":40035,"nodeType":"PlaceholderStatement","src":"1128:1:187"}]},"documentation":{"id":40025,"nodeType":"StructuredDocumentation","src":"967:60:187","text":" @dev Modifier for reward admin only functions"},"id":40037,"name":"onlyRewardsAdmin","nameLocation":"1039:16:187","nodeType":"ModifierDefinition","parameters":{"id":40026,"nodeType":"ParameterList","parameters":[],"src":"1055:2:187"},"src":"1030:104:187","virtual":false,"visibility":"internal"},{"baseFunctions":[39626],"body":{"id":40046,"nodeType":"Block","src":"1254:39:187","statements":[{"expression":{"id":40044,"name":"INCENTIVES_CONTROLLER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39993,"src":"1267:21:187","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":40043,"id":40045,"nodeType":"Return","src":"1260:28:187"}]},"documentation":{"id":40038,"nodeType":"StructuredDocumentation","src":"1138:37:187","text":"@inheritdoc ITransferStrategyBase"},"functionSelector":"75d26413","id":40047,"implemented":true,"kind":"function","modifiers":[],"name":"getIncentivesController","nameLocation":"1187:23:187","nodeType":"FunctionDefinition","overrides":{"id":40040,"nodeType":"OverrideSpecifier","overrides":[],"src":"1227:8:187"},"parameters":{"id":40039,"nodeType":"ParameterList","parameters":[],"src":"1210:2:187"},"returnParameters":{"id":40043,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40042,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40047,"src":"1245:7:187","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40041,"name":"address","nodeType":"ElementaryTypeName","src":"1245:7:187","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1244:9:187"},"scope":40099,"src":"1178:115:187","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[39632],"body":{"id":40056,"nodeType":"Block","src":"1405:31:187","statements":[{"expression":{"id":40054,"name":"REWARDS_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39995,"src":"1418:13:187","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":40053,"id":40055,"nodeType":"Return","src":"1411:20:187"}]},"documentation":{"id":40048,"nodeType":"StructuredDocumentation","src":"1297:37:187","text":"@inheritdoc ITransferStrategyBase"},"functionSelector":"c6255443","id":40057,"implemented":true,"kind":"function","modifiers":[],"name":"getRewardsAdmin","nameLocation":"1346:15:187","nodeType":"FunctionDefinition","overrides":{"id":40050,"nodeType":"OverrideSpecifier","overrides":[],"src":"1378:8:187"},"parameters":{"id":40049,"nodeType":"ParameterList","parameters":[],"src":"1361:2:187"},"returnParameters":{"id":40053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40052,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40057,"src":"1396:7:187","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40051,"name":"address","nodeType":"ElementaryTypeName","src":"1396:7:187","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1395:9:187"},"scope":40099,"src":"1337:99:187","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[39620],"documentation":{"id":40058,"nodeType":"StructuredDocumentation","src":"1440:37:187","text":"@inheritdoc ITransferStrategyBase"},"functionSelector":"16beb982","id":40069,"implemented":false,"kind":"function","modifiers":[],"name":"performTransfer","nameLocation":"1489:15:187","nodeType":"FunctionDefinition","parameters":{"id":40065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40060,"mutability":"mutable","name":"to","nameLocation":"1518:2:187","nodeType":"VariableDeclaration","scope":40069,"src":"1510:10:187","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40059,"name":"address","nodeType":"ElementaryTypeName","src":"1510:7:187","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40062,"mutability":"mutable","name":"reward","nameLocation":"1534:6:187","nodeType":"VariableDeclaration","scope":40069,"src":"1526:14:187","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40061,"name":"address","nodeType":"ElementaryTypeName","src":"1526:7:187","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40064,"mutability":"mutable","name":"amount","nameLocation":"1554:6:187","nodeType":"VariableDeclaration","scope":40069,"src":"1546:14:187","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40063,"name":"uint256","nodeType":"ElementaryTypeName","src":"1546:7:187","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1504:60:187"},"returnParameters":{"id":40068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40067,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40069,"src":"1591:4:187","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":40066,"name":"bool","nodeType":"ElementaryTypeName","src":"1591:4:187","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1590:6:187"},"scope":40099,"src":"1480:117:187","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[39642],"body":{"id":40097,"nodeType":"Block","src":"1755:111:187","statements":[{"expression":{"arguments":[{"id":40085,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40074,"src":"1788:2:187","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40086,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40076,"src":"1792:6:187","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":40082,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40072,"src":"1768:5:187","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":40081,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"1761:6:187","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":40083,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1761:13:187","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":40084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":78,"src":"1761:26:187","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":40087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1761:38:187","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40088,"nodeType":"ExpressionStatement","src":"1761:38:187"},{"eventCall":{"arguments":[{"expression":{"id":40090,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1831:3:187","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":40091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1831:10:187","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40092,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40072,"src":"1843:5:187","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40093,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40074,"src":"1850:2:187","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40094,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40076,"src":"1854:6:187","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":40089,"name":"EmergencyWithdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39608,"src":"1811:19:187","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":40095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1811:50:187","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40096,"nodeType":"EmitStatement","src":"1806:55:187"}]},"documentation":{"id":40070,"nodeType":"StructuredDocumentation","src":"1601:37:187","text":"@inheritdoc ITransferStrategyBase"},"functionSelector":"8d8e5da7","id":40098,"implemented":true,"kind":"function","modifiers":[{"id":40079,"kind":"modifierInvocation","modifierName":{"id":40078,"name":"onlyRewardsAdmin","nodeType":"IdentifierPath","referencedDeclaration":40037,"src":"1738:16:187"},"nodeType":"ModifierInvocation","src":"1738:16:187"}],"name":"emergencyWithdrawal","nameLocation":"1650:19:187","nodeType":"FunctionDefinition","parameters":{"id":40077,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40072,"mutability":"mutable","name":"token","nameLocation":"1683:5:187","nodeType":"VariableDeclaration","scope":40098,"src":"1675:13:187","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40071,"name":"address","nodeType":"ElementaryTypeName","src":"1675:7:187","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40074,"mutability":"mutable","name":"to","nameLocation":"1702:2:187","nodeType":"VariableDeclaration","scope":40098,"src":"1694:10:187","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40073,"name":"address","nodeType":"ElementaryTypeName","src":"1694:7:187","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40076,"mutability":"mutable","name":"amount","nameLocation":"1718:6:187","nodeType":"VariableDeclaration","scope":40098,"src":"1710:14:187","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40075,"name":"uint256","nodeType":"ElementaryTypeName","src":"1710:7:187","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1669:59:187"},"returnParameters":{"id":40080,"nodeType":"ParameterList","parameters":[],"src":"1755:0:187"},"scope":40099,"src":"1641:225:187","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":40100,"src":"400:1468:187","usedErrors":[]}],"src":"37:1832:187"},"id":187},"contracts/treasury/AaveEcosystemReserveController.sol":{"ast":{"absolutePath":"contracts/treasury/AaveEcosystemReserveController.sol","exportedSymbols":{"AaveEcosystemReserveController":[40256],"IAaveEcosystemReserveController":[41336],"IAdminControlledEcosystemReserve":[41380],"IERC20":[1442],"IStreamable":[41555],"Ownable":[1573]},"id":40257,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":40101,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"32:24:188"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol","id":40103,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40257,"sourceUnit":1574,"src":"58:96:188","symbolAliases":[{"foreign":{"id":40102,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"src":"66:7:188","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/treasury/interfaces/IStreamable.sol","file":"./interfaces/IStreamable.sol","id":40105,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40257,"sourceUnit":41556,"src":"155:57:188","symbolAliases":[{"foreign":{"id":40104,"name":"IStreamable","nodeType":"Identifier","overloadedDeclarations":[],"src":"163:11:188","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/treasury/interfaces/IAdminControlledEcosystemReserve.sol","file":"./interfaces/IAdminControlledEcosystemReserve.sol","id":40107,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40257,"sourceUnit":41381,"src":"213:99:188","symbolAliases":[{"foreign":{"id":40106,"name":"IAdminControlledEcosystemReserve","nodeType":"Identifier","overloadedDeclarations":[],"src":"221:32:188","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/treasury/interfaces/IAaveEcosystemReserveController.sol","file":"./interfaces/IAaveEcosystemReserveController.sol","id":40109,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40257,"sourceUnit":41337,"src":"313:97:188","symbolAliases":[{"foreign":{"id":40108,"name":"IAaveEcosystemReserveController","nodeType":"Identifier","overloadedDeclarations":[],"src":"321:31:188","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","id":40111,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40257,"sourceUnit":1443,"src":"411:94:188","symbolAliases":[{"foreign":{"id":40110,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"419:6:188","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":40112,"name":"Ownable","nodeType":"IdentifierPath","referencedDeclaration":1573,"src":"550:7:188"},"id":40113,"nodeType":"InheritanceSpecifier","src":"550:7:188"},{"baseName":{"id":40114,"name":"IAaveEcosystemReserveController","nodeType":"IdentifierPath","referencedDeclaration":41336,"src":"559:31:188"},"id":40115,"nodeType":"InheritanceSpecifier","src":"559:31:188"}],"canonicalName":"AaveEcosystemReserveController","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":40256,"linearizedBaseContracts":[40256,41336,1573,748],"name":"AaveEcosystemReserveController","nameLocation":"516:30:188","nodeType":"ContractDefinition","nodes":[{"body":{"id":40125,"nodeType":"Block","src":"776:50:188","statements":[{"expression":{"arguments":[{"id":40122,"name":"aaveGovShortTimelock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40118,"src":"800:20:188","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":40121,"name":"transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1572,"src":"782:17:188","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":40123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"782:39:188","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40124,"nodeType":"ExpressionStatement","src":"782:39:188"}]},"documentation":{"id":40116,"nodeType":"StructuredDocumentation","src":"595:136:188","text":" @notice Constructor.\n @param aaveGovShortTimelock The address of the Aave's governance executor, owning this contract"},"id":40126,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":40119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40118,"mutability":"mutable","name":"aaveGovShortTimelock","nameLocation":"754:20:188","nodeType":"VariableDeclaration","scope":40126,"src":"746:28:188","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40117,"name":"address","nodeType":"ElementaryTypeName","src":"746:7:188","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"745:30:188"},"returnParameters":{"id":40120,"nodeType":"ParameterList","parameters":[],"src":"776:0:188"},"scope":40256,"src":"734:92:188","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[41281],"body":{"id":40150,"nodeType":"Block","src":"1004:88:188","statements":[{"expression":{"arguments":[{"id":40145,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40132,"src":"1062:5:188","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},{"id":40146,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40134,"src":"1069:9:188","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40147,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40136,"src":"1080:6:188","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":40142,"name":"collector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40129,"src":"1043:9:188","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":40141,"name":"IAdminControlledEcosystemReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41380,"src":"1010:32:188","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAdminControlledEcosystemReserve_$41380_$","typeString":"type(contract IAdminControlledEcosystemReserve)"}},"id":40143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1010:43:188","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAdminControlledEcosystemReserve_$41380","typeString":"contract IAdminControlledEcosystemReserve"}},"id":40144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":41368,"src":"1010:51:188","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":40148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1010:77:188","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40149,"nodeType":"ExpressionStatement","src":"1010:77:188"}]},"documentation":{"id":40127,"nodeType":"StructuredDocumentation","src":"830:47:188","text":"@inheritdoc IAaveEcosystemReserveController"},"functionSelector":"59eba454","id":40151,"implemented":true,"kind":"function","modifiers":[{"id":40139,"kind":"modifierInvocation","modifierName":{"id":40138,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"994:9:188"},"nodeType":"ModifierInvocation","src":"994:9:188"}],"name":"approve","nameLocation":"889:7:188","nodeType":"FunctionDefinition","parameters":{"id":40137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40129,"mutability":"mutable","name":"collector","nameLocation":"910:9:188","nodeType":"VariableDeclaration","scope":40151,"src":"902:17:188","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40128,"name":"address","nodeType":"ElementaryTypeName","src":"902:7:188","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40132,"mutability":"mutable","name":"token","nameLocation":"932:5:188","nodeType":"VariableDeclaration","scope":40151,"src":"925:12:188","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":40131,"nodeType":"UserDefinedTypeName","pathNode":{"id":40130,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"925:6:188"},"referencedDeclaration":1442,"src":"925:6:188","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":40134,"mutability":"mutable","name":"recipient","nameLocation":"951:9:188","nodeType":"VariableDeclaration","scope":40151,"src":"943:17:188","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40133,"name":"address","nodeType":"ElementaryTypeName","src":"943:7:188","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40136,"mutability":"mutable","name":"amount","nameLocation":"974:6:188","nodeType":"VariableDeclaration","scope":40151,"src":"966:14:188","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40135,"name":"uint256","nodeType":"ElementaryTypeName","src":"966:7:188","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"896:88:188"},"returnParameters":{"id":40140,"nodeType":"ParameterList","parameters":[],"src":"1004:0:188"},"scope":40256,"src":"880:212:188","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[41294],"body":{"id":40175,"nodeType":"Block","src":"1271:89:188","statements":[{"expression":{"arguments":[{"id":40170,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40157,"src":"1330:5:188","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},{"id":40171,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40159,"src":"1337:9:188","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40172,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40161,"src":"1348:6:188","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":40167,"name":"collector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40154,"src":"1310:9:188","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":40166,"name":"IAdminControlledEcosystemReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41380,"src":"1277:32:188","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAdminControlledEcosystemReserve_$41380_$","typeString":"type(contract IAdminControlledEcosystemReserve)"}},"id":40168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1277:43:188","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAdminControlledEcosystemReserve_$41380","typeString":"contract IAdminControlledEcosystemReserve"}},"id":40169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":41379,"src":"1277:52:188","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":40173,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1277:78:188","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40174,"nodeType":"ExpressionStatement","src":"1277:78:188"}]},"documentation":{"id":40152,"nodeType":"StructuredDocumentation","src":"1096:47:188","text":"@inheritdoc IAaveEcosystemReserveController"},"functionSelector":"f18d03cc","id":40176,"implemented":true,"kind":"function","modifiers":[{"id":40164,"kind":"modifierInvocation","modifierName":{"id":40163,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"1261:9:188"},"nodeType":"ModifierInvocation","src":"1261:9:188"}],"name":"transfer","nameLocation":"1155:8:188","nodeType":"FunctionDefinition","parameters":{"id":40162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40154,"mutability":"mutable","name":"collector","nameLocation":"1177:9:188","nodeType":"VariableDeclaration","scope":40176,"src":"1169:17:188","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40153,"name":"address","nodeType":"ElementaryTypeName","src":"1169:7:188","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40157,"mutability":"mutable","name":"token","nameLocation":"1199:5:188","nodeType":"VariableDeclaration","scope":40176,"src":"1192:12:188","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":40156,"nodeType":"UserDefinedTypeName","pathNode":{"id":40155,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1192:6:188"},"referencedDeclaration":1442,"src":"1192:6:188","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":40159,"mutability":"mutable","name":"recipient","nameLocation":"1218:9:188","nodeType":"VariableDeclaration","scope":40176,"src":"1210:17:188","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40158,"name":"address","nodeType":"ElementaryTypeName","src":"1210:7:188","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40161,"mutability":"mutable","name":"amount","nameLocation":"1241:6:188","nodeType":"VariableDeclaration","scope":40176,"src":"1233:14:188","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40160,"name":"uint256","nodeType":"ElementaryTypeName","src":"1233:7:188","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1163:88:188"},"returnParameters":{"id":40165,"nodeType":"ParameterList","parameters":[],"src":"1271:0:188"},"scope":40256,"src":"1146:214:188","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[41313],"body":{"id":40211,"nodeType":"Block","src":"1614:171:188","statements":[{"expression":{"arguments":[{"id":40201,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40181,"src":"1678:9:188","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40202,"name":"deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40183,"src":"1697:7:188","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":40205,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40186,"src":"1722:12:188","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}],"id":40204,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1714:7:188","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":40203,"name":"address","nodeType":"ElementaryTypeName","src":"1714:7:188","typeDescriptions":{}}},"id":40206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1714:21:188","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40207,"name":"startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40188,"src":"1745:9:188","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":40208,"name":"stopTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40190,"src":"1764:8:188","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":40198,"name":"collector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40179,"src":"1645:9:188","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":40197,"name":"IStreamable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41555,"src":"1633:11:188","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStreamable_$41555_$","typeString":"type(contract IStreamable)"}},"id":40199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1633:22:188","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStreamable_$41555","typeString":"contract IStreamable"}},"id":40200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"createStream","nodeType":"MemberAccess","referencedDeclaration":41533,"src":"1633:35:188","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,uint256,address,uint256,uint256) external returns (uint256)"}},"id":40209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1633:147:188","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":40196,"id":40210,"nodeType":"Return","src":"1620:160:188"}]},"documentation":{"id":40177,"nodeType":"StructuredDocumentation","src":"1364:47:188","text":"@inheritdoc IAaveEcosystemReserveController"},"functionSelector":"fd59e134","id":40212,"implemented":true,"kind":"function","modifiers":[{"id":40193,"kind":"modifierInvocation","modifierName":{"id":40192,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"1586:9:188"},"nodeType":"ModifierInvocation","src":"1586:9:188"}],"name":"createStream","nameLocation":"1423:12:188","nodeType":"FunctionDefinition","parameters":{"id":40191,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40179,"mutability":"mutable","name":"collector","nameLocation":"1449:9:188","nodeType":"VariableDeclaration","scope":40212,"src":"1441:17:188","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40178,"name":"address","nodeType":"ElementaryTypeName","src":"1441:7:188","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40181,"mutability":"mutable","name":"recipient","nameLocation":"1472:9:188","nodeType":"VariableDeclaration","scope":40212,"src":"1464:17:188","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40180,"name":"address","nodeType":"ElementaryTypeName","src":"1464:7:188","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40183,"mutability":"mutable","name":"deposit","nameLocation":"1495:7:188","nodeType":"VariableDeclaration","scope":40212,"src":"1487:15:188","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40182,"name":"uint256","nodeType":"ElementaryTypeName","src":"1487:7:188","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40186,"mutability":"mutable","name":"tokenAddress","nameLocation":"1515:12:188","nodeType":"VariableDeclaration","scope":40212,"src":"1508:19:188","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":40185,"nodeType":"UserDefinedTypeName","pathNode":{"id":40184,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1508:6:188"},"referencedDeclaration":1442,"src":"1508:6:188","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":40188,"mutability":"mutable","name":"startTime","nameLocation":"1541:9:188","nodeType":"VariableDeclaration","scope":40212,"src":"1533:17:188","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40187,"name":"uint256","nodeType":"ElementaryTypeName","src":"1533:7:188","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40190,"mutability":"mutable","name":"stopTime","nameLocation":"1564:8:188","nodeType":"VariableDeclaration","scope":40212,"src":"1556:16:188","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40189,"name":"uint256","nodeType":"ElementaryTypeName","src":"1556:7:188","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1435:141:188"},"returnParameters":{"id":40196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40195,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40212,"src":"1605:7:188","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40194,"name":"uint256","nodeType":"ElementaryTypeName","src":"1605:7:188","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1604:9:188"},"scope":40256,"src":"1414:371:188","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[41325],"body":{"id":40234,"nodeType":"Block","src":"1969:76:188","statements":[{"expression":{"arguments":[{"id":40230,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40217,"src":"2024:8:188","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":40231,"name":"funds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40219,"src":"2034:5:188","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":40227,"name":"collector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40215,"src":"1994:9:188","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":40226,"name":"IStreamable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41555,"src":"1982:11:188","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStreamable_$41555_$","typeString":"type(contract IStreamable)"}},"id":40228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1982:22:188","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStreamable_$41555","typeString":"contract IStreamable"}},"id":40229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"withdrawFromStream","nodeType":"MemberAccess","referencedDeclaration":41542,"src":"1982:41:188","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256,uint256) external returns (bool)"}},"id":40232,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1982:58:188","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":40225,"id":40233,"nodeType":"Return","src":"1975:65:188"}]},"documentation":{"id":40213,"nodeType":"StructuredDocumentation","src":"1789:47:188","text":"@inheritdoc IAaveEcosystemReserveController"},"functionSelector":"2f436bfa","id":40235,"implemented":true,"kind":"function","modifiers":[{"id":40222,"kind":"modifierInvocation","modifierName":{"id":40221,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"1944:9:188"},"nodeType":"ModifierInvocation","src":"1944:9:188"}],"name":"withdrawFromStream","nameLocation":"1848:18:188","nodeType":"FunctionDefinition","parameters":{"id":40220,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40215,"mutability":"mutable","name":"collector","nameLocation":"1880:9:188","nodeType":"VariableDeclaration","scope":40235,"src":"1872:17:188","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40214,"name":"address","nodeType":"ElementaryTypeName","src":"1872:7:188","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40217,"mutability":"mutable","name":"streamId","nameLocation":"1903:8:188","nodeType":"VariableDeclaration","scope":40235,"src":"1895:16:188","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40216,"name":"uint256","nodeType":"ElementaryTypeName","src":"1895:7:188","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40219,"mutability":"mutable","name":"funds","nameLocation":"1925:5:188","nodeType":"VariableDeclaration","scope":40235,"src":"1917:13:188","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40218,"name":"uint256","nodeType":"ElementaryTypeName","src":"1917:7:188","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1866:68:188"},"returnParameters":{"id":40225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40224,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40235,"src":"1963:4:188","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":40223,"name":"bool","nodeType":"ElementaryTypeName","src":"1963:4:188","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1962:6:188"},"scope":40256,"src":"1839:206:188","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[41335],"body":{"id":40254,"nodeType":"Block","src":"2192:63:188","statements":[{"expression":{"arguments":[{"id":40251,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40240,"src":"2241:8:188","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":40248,"name":"collector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40238,"src":"2217:9:188","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":40247,"name":"IStreamable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41555,"src":"2205:11:188","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IStreamable_$41555_$","typeString":"type(contract IStreamable)"}},"id":40249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2205:22:188","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IStreamable_$41555","typeString":"contract IStreamable"}},"id":40250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"cancelStream","nodeType":"MemberAccess","referencedDeclaration":41549,"src":"2205:35:188","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256) external returns (bool)"}},"id":40252,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2205:45:188","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":40246,"id":40253,"nodeType":"Return","src":"2198:52:188"}]},"documentation":{"id":40236,"nodeType":"StructuredDocumentation","src":"2049:47:188","text":"@inheritdoc IAaveEcosystemReserveController"},"functionSelector":"7dc14a8e","id":40255,"implemented":true,"kind":"function","modifiers":[{"id":40243,"kind":"modifierInvocation","modifierName":{"id":40242,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"2167:9:188"},"nodeType":"ModifierInvocation","src":"2167:9:188"}],"name":"cancelStream","nameLocation":"2108:12:188","nodeType":"FunctionDefinition","parameters":{"id":40241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40238,"mutability":"mutable","name":"collector","nameLocation":"2129:9:188","nodeType":"VariableDeclaration","scope":40255,"src":"2121:17:188","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40237,"name":"address","nodeType":"ElementaryTypeName","src":"2121:7:188","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40240,"mutability":"mutable","name":"streamId","nameLocation":"2148:8:188","nodeType":"VariableDeclaration","scope":40255,"src":"2140:16:188","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40239,"name":"uint256","nodeType":"ElementaryTypeName","src":"2140:7:188","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2120:37:188"},"returnParameters":{"id":40246,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40245,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40255,"src":"2186:4:188","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":40244,"name":"bool","nodeType":"ElementaryTypeName","src":"2186:4:188","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2185:6:188"},"scope":40256,"src":"2099:156:188","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":40257,"src":"507:1750:188","usedErrors":[]}],"src":"32:2226:188"},"id":188},"contracts/treasury/AaveEcosystemReserveV2.sol":{"ast":{"absolutePath":"contracts/treasury/AaveEcosystemReserveV2.sol","exportedSymbols":{"AaveEcosystemReserveV2":[40903],"AdminControlledEcosystemReserve":[41057],"IERC20":[1442],"IStreamable":[41555],"ReentrancyGuard":[41890],"SafeERC20":[42116]},"id":40904,"license":"GPL-3.0","nodeType":"SourceUnit","nodes":[{"id":40258,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"36:24:189"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","id":40260,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40904,"sourceUnit":1443,"src":"62:94:189","symbolAliases":[{"foreign":{"id":40259,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:6:189","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/treasury/interfaces/IStreamable.sol","file":"./interfaces/IStreamable.sol","id":40262,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40904,"sourceUnit":41556,"src":"157:57:189","symbolAliases":[{"foreign":{"id":40261,"name":"IStreamable","nodeType":"Identifier","overloadedDeclarations":[],"src":"165:11:189","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/treasury/AdminControlledEcosystemReserve.sol","file":"./AdminControlledEcosystemReserve.sol","id":40264,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40904,"sourceUnit":41058,"src":"215:86:189","symbolAliases":[{"foreign":{"id":40263,"name":"AdminControlledEcosystemReserve","nodeType":"Identifier","overloadedDeclarations":[],"src":"223:31:189","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/treasury/libs/ReentrancyGuard.sol","file":"./libs/ReentrancyGuard.sol","id":40266,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40904,"sourceUnit":41891,"src":"302:59:189","symbolAliases":[{"foreign":{"id":40265,"name":"ReentrancyGuard","nodeType":"Identifier","overloadedDeclarations":[],"src":"310:15:189","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/treasury/libs/SafeERC20.sol","file":"./libs/SafeERC20.sol","id":40268,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40904,"sourceUnit":42117,"src":"362:47:189","symbolAliases":[{"foreign":{"id":40267,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"370:9:189","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":40270,"name":"AdminControlledEcosystemReserve","nodeType":"IdentifierPath","referencedDeclaration":41057,"src":"1305:31:189"},"id":40271,"nodeType":"InheritanceSpecifier","src":"1305:31:189"},{"baseName":{"id":40272,"name":"ReentrancyGuard","nodeType":"IdentifierPath","referencedDeclaration":41890,"src":"1338:15:189"},"id":40273,"nodeType":"InheritanceSpecifier","src":"1338:15:189"},{"baseName":{"id":40274,"name":"IStreamable","nodeType":"IdentifierPath","referencedDeclaration":41555,"src":"1355:11:189"},"id":40275,"nodeType":"InheritanceSpecifier","src":"1355:11:189"}],"canonicalName":"AaveEcosystemReserveV2","contractDependencies":[],"contractKind":"contract","documentation":{"id":40269,"nodeType":"StructuredDocumentation","src":"411:858:189","text":" @title AaveEcosystemReserve v2\n @notice Stores ERC20 tokens of an ecosystem reserve, adding streaming capabilities.\n Modification of Sablier https://github.com/sablierhq/sablier/blob/develop/packages/protocol/contracts/Sablier.sol\n Original can be found also deployed on https://etherscan.io/address/0xCD18eAa163733Da39c232722cBC4E8940b1D8888\n Modifications:\n - Sablier \"pulls\" the funds from the creator of the stream at creation. In the Aave case, we already have the funds.\n - Anybody can create streams on Sablier. Here, only the funds admin (Aave governance via controller) can\n - Adapted codebase to Solidity 0.8.11, mainly removing SafeMath and CarefulMath to use native safe math\n - Same as with creation, on Sablier the `sender` and `recipient` can cancel a stream. Here, only fund admin and recipient\n @author BGD Labs*"},"fullyImplemented":true,"id":40903,"linearizedBaseContracts":[40903,41555,41890,41057,41380,42155],"name":"AaveEcosystemReserveV2","nameLocation":"1279:22:189","nodeType":"ContractDefinition","nodes":[{"id":40279,"libraryName":{"id":40276,"name":"SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":42116,"src":"1377:9:189"},"nodeType":"UsingForDirective","src":"1371:27:189","typeName":{"id":40278,"nodeType":"UserDefinedTypeName","pathNode":{"id":40277,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1391:6:189"},"referencedDeclaration":1442,"src":"1391:6:189","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"constant":false,"documentation":{"id":40280,"nodeType":"StructuredDocumentation","src":"1434:50:189","text":" @notice Counter for new stream ids."},"id":40282,"mutability":"mutable","name":"_nextStreamId","nameLocation":"1503:13:189","nodeType":"VariableDeclaration","scope":40903,"src":"1487:29:189","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40281,"name":"uint256","nodeType":"ElementaryTypeName","src":"1487:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"documentation":{"id":40283,"nodeType":"StructuredDocumentation","src":"1521:85:189","text":" @notice The stream objects identifiable by their unsigned integer ids."},"id":40288,"mutability":"mutable","name":"_streams","nameLocation":"1644:8:189","nodeType":"VariableDeclaration","scope":40903,"src":"1609:43:189","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Stream_$41452_storage_$","typeString":"mapping(uint256 => struct IStreamable.Stream)"},"typeName":{"id":40287,"keyType":{"id":40284,"name":"uint256","nodeType":"ElementaryTypeName","src":"1617:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"1609:26:189","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Stream_$41452_storage_$","typeString":"mapping(uint256 => struct IStreamable.Stream)"},"valueType":{"id":40286,"nodeType":"UserDefinedTypeName","pathNode":{"id":40285,"name":"Stream","nodeType":"IdentifierPath","referencedDeclaration":41452,"src":"1628:6:189"},"referencedDeclaration":41452,"src":"1628:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage_ptr","typeString":"struct IStreamable.Stream"}}},"visibility":"private"},{"body":{"id":40310,"nodeType":"Block","src":"1826:180:189","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":40305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":40297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40294,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1847:3:189","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":40295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1847:10:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":40296,"name":"_fundsAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40931,"src":"1861:11:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1847:25:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":40304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40298,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1876:3:189","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":40299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1876:10:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"baseExpression":{"id":40300,"name":"_streams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40288,"src":"1890:8:189","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Stream_$41452_storage_$","typeString":"mapping(uint256 => struct IStreamable.Stream storage ref)"}},"id":40302,"indexExpression":{"id":40301,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40291,"src":"1899:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1890:18:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage","typeString":"struct IStreamable.Stream storage ref"}},"id":40303,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":41445,"src":"1890:28:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1876:42:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1847:71:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"63616c6c6572206973206e6f74207468652066756e64732061646d696e206f722074686520726563697069656e74206f66207468652073747265616d","id":40306,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1926:62:189","typeDescriptions":{"typeIdentifier":"t_stringliteral_a84b7829184afce6601e9bfeac08867e7d610bbcc4b293e3683dc099352ae35f","typeString":"literal_string \"caller is not the funds admin or the recipient of the stream\""},"value":"caller is not the funds admin or the recipient of the stream"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a84b7829184afce6601e9bfeac08867e7d610bbcc4b293e3683dc099352ae35f","typeString":"literal_string \"caller is not the funds admin or the recipient of the stream\""}],"id":40293,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1832:7:189","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1832:162:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40308,"nodeType":"ExpressionStatement","src":"1832:162:189"},{"id":40309,"nodeType":"PlaceholderStatement","src":"2000:1:189"}]},"documentation":{"id":40289,"nodeType":"StructuredDocumentation","src":"1680:95:189","text":" @dev Throws if the caller is not the funds admin of the recipient of the stream."},"id":40311,"name":"onlyAdminOrRecipient","nameLocation":"1787:20:189","nodeType":"ModifierDefinition","parameters":{"id":40292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40291,"mutability":"mutable","name":"streamId","nameLocation":"1816:8:189","nodeType":"VariableDeclaration","scope":40311,"src":"1808:16:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40290,"name":"uint256","nodeType":"ElementaryTypeName","src":"1808:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1807:18:189"},"src":"1778:228:189","virtual":false,"visibility":"internal"},{"body":{"id":40325,"nodeType":"Block","src":"2132:79:189","statements":[{"expression":{"arguments":[{"expression":{"baseExpression":{"id":40317,"name":"_streams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40288,"src":"2146:8:189","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Stream_$41452_storage_$","typeString":"mapping(uint256 => struct IStreamable.Stream storage ref)"}},"id":40319,"indexExpression":{"id":40318,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40314,"src":"2155:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2146:18:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage","typeString":"struct IStreamable.Stream storage ref"}},"id":40320,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"isEntity","nodeType":"MemberAccess","referencedDeclaration":41451,"src":"2146:27:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"73747265616d20646f6573206e6f74206578697374","id":40321,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2175:23:189","typeDescriptions":{"typeIdentifier":"t_stringliteral_31f7f5dba990f1a21e7bbf0d3d9f6b023949f97a780e08292cc9299001c3732a","typeString":"literal_string \"stream does not exist\""},"value":"stream does not exist"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_31f7f5dba990f1a21e7bbf0d3d9f6b023949f97a780e08292cc9299001c3732a","typeString":"literal_string \"stream does not exist\""}],"id":40316,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2138:7:189","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40322,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2138:61:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40323,"nodeType":"ExpressionStatement","src":"2138:61:189"},{"id":40324,"nodeType":"PlaceholderStatement","src":"2205:1:189"}]},"documentation":{"id":40312,"nodeType":"StructuredDocumentation","src":"2010:79:189","text":" @dev Throws if the provided id does not point to a valid stream."},"id":40326,"name":"streamExists","nameLocation":"2101:12:189","nodeType":"ModifierDefinition","parameters":{"id":40315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40314,"mutability":"mutable","name":"streamId","nameLocation":"2122:8:189","nodeType":"VariableDeclaration","scope":40326,"src":"2114:16:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40313,"name":"uint256","nodeType":"ElementaryTypeName","src":"2114:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2113:18:189"},"src":"2092:119:189","virtual":false,"visibility":"internal"},{"baseFunctions":[41554],"body":{"id":40341,"nodeType":"Block","src":"2314:65:189","statements":[{"expression":{"id":40335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":40333,"name":"_nextStreamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40282,"src":"2320:13:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"313030303030","id":40334,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2336:6:189","typeDescriptions":{"typeIdentifier":"t_rational_100000_by_1","typeString":"int_const 100000"},"value":"100000"},"src":"2320:22:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":40336,"nodeType":"ExpressionStatement","src":"2320:22:189"},{"expression":{"arguments":[{"id":40338,"name":"fundsAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40328,"src":"2363:10:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":40337,"name":"_setFundsAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41056,"src":"2348:14:189","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":40339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2348:26:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40340,"nodeType":"ExpressionStatement","src":"2348:26:189"}]},"functionSelector":"c4d66de8","id":40342,"implemented":true,"kind":"function","modifiers":[{"id":40331,"kind":"modifierInvocation","modifierName":{"id":40330,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":42144,"src":"2302:11:189"},"nodeType":"ModifierInvocation","src":"2302:11:189"}],"name":"initialize","nameLocation":"2262:10:189","nodeType":"FunctionDefinition","parameters":{"id":40329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40328,"mutability":"mutable","name":"fundsAdmin","nameLocation":"2281:10:189","nodeType":"VariableDeclaration","scope":40342,"src":"2273:18:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40327,"name":"address","nodeType":"ElementaryTypeName","src":"2273:7:189","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2272:20:189"},"returnParameters":{"id":40332,"nodeType":"ParameterList","parameters":[],"src":"2314:0:189"},"scope":40903,"src":"2253:126:189","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":40350,"nodeType":"Block","src":"2568:31:189","statements":[{"expression":{"id":40348,"name":"_nextStreamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40282,"src":"2581:13:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":40347,"id":40349,"nodeType":"Return","src":"2574:20:189"}]},"documentation":{"id":40343,"nodeType":"StructuredDocumentation","src":"2411:95:189","text":" @notice Returns the next available stream id\n @notice Returns the stream id."},"functionSelector":"0932f92b","id":40351,"implemented":true,"kind":"function","modifiers":[],"name":"getNextStreamId","nameLocation":"2518:15:189","nodeType":"FunctionDefinition","parameters":{"id":40344,"nodeType":"ParameterList","parameters":[],"src":"2533:2:189"},"returnParameters":{"id":40347,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40346,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40351,"src":"2559:7:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40345,"name":"uint256","nodeType":"ElementaryTypeName","src":"2559:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2558:9:189"},"scope":40903,"src":"2509:90:189","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[41518],"body":{"id":40432,"nodeType":"Block","src":"3148:389:189","statements":[{"expression":{"id":40381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":40376,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40360,"src":"3154:6:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":40377,"name":"_streams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40288,"src":"3163:8:189","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Stream_$41452_storage_$","typeString":"mapping(uint256 => struct IStreamable.Stream storage ref)"}},"id":40379,"indexExpression":{"id":40378,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40354,"src":"3172:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3163:18:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage","typeString":"struct IStreamable.Stream storage ref"}},"id":40380,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":41447,"src":"3163:25:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3154:34:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":40382,"nodeType":"ExpressionStatement","src":"3154:34:189"},{"expression":{"id":40388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":40383,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40362,"src":"3194:9:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":40384,"name":"_streams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40288,"src":"3206:8:189","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Stream_$41452_storage_$","typeString":"mapping(uint256 => struct IStreamable.Stream storage ref)"}},"id":40386,"indexExpression":{"id":40385,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40354,"src":"3215:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3206:18:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage","typeString":"struct IStreamable.Stream storage ref"}},"id":40387,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":41445,"src":"3206:28:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3194:40:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":40389,"nodeType":"ExpressionStatement","src":"3194:40:189"},{"expression":{"id":40395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":40390,"name":"deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40364,"src":"3240:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":40391,"name":"_streams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40288,"src":"3250:8:189","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Stream_$41452_storage_$","typeString":"mapping(uint256 => struct IStreamable.Stream storage ref)"}},"id":40393,"indexExpression":{"id":40392,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40354,"src":"3259:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3250:18:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage","typeString":"struct IStreamable.Stream storage ref"}},"id":40394,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"deposit","nodeType":"MemberAccess","referencedDeclaration":41435,"src":"3250:26:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3240:36:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":40396,"nodeType":"ExpressionStatement","src":"3240:36:189"},{"expression":{"id":40402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":40397,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40366,"src":"3282:12:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":40398,"name":"_streams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40288,"src":"3297:8:189","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Stream_$41452_storage_$","typeString":"mapping(uint256 => struct IStreamable.Stream storage ref)"}},"id":40400,"indexExpression":{"id":40399,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40354,"src":"3306:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3297:18:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage","typeString":"struct IStreamable.Stream storage ref"}},"id":40401,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"tokenAddress","nodeType":"MemberAccess","referencedDeclaration":41449,"src":"3297:31:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3282:46:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":40403,"nodeType":"ExpressionStatement","src":"3282:46:189"},{"expression":{"id":40409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":40404,"name":"startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40368,"src":"3334:9:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":40405,"name":"_streams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40288,"src":"3346:8:189","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Stream_$41452_storage_$","typeString":"mapping(uint256 => struct IStreamable.Stream storage ref)"}},"id":40407,"indexExpression":{"id":40406,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40354,"src":"3355:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3346:18:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage","typeString":"struct IStreamable.Stream storage ref"}},"id":40408,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"startTime","nodeType":"MemberAccess","referencedDeclaration":41441,"src":"3346:28:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3334:40:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":40410,"nodeType":"ExpressionStatement","src":"3334:40:189"},{"expression":{"id":40416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":40411,"name":"stopTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40370,"src":"3380:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":40412,"name":"_streams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40288,"src":"3391:8:189","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Stream_$41452_storage_$","typeString":"mapping(uint256 => struct IStreamable.Stream storage ref)"}},"id":40414,"indexExpression":{"id":40413,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40354,"src":"3400:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3391:18:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage","typeString":"struct IStreamable.Stream storage ref"}},"id":40415,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stopTime","nodeType":"MemberAccess","referencedDeclaration":41443,"src":"3391:27:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3380:38:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":40417,"nodeType":"ExpressionStatement","src":"3380:38:189"},{"expression":{"id":40423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":40418,"name":"remainingBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40372,"src":"3424:16:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":40419,"name":"_streams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40288,"src":"3443:8:189","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Stream_$41452_storage_$","typeString":"mapping(uint256 => struct IStreamable.Stream storage ref)"}},"id":40421,"indexExpression":{"id":40420,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40354,"src":"3452:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3443:18:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage","typeString":"struct IStreamable.Stream storage ref"}},"id":40422,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"remainingBalance","nodeType":"MemberAccess","referencedDeclaration":41439,"src":"3443:35:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3424:54:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":40424,"nodeType":"ExpressionStatement","src":"3424:54:189"},{"expression":{"id":40430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":40425,"name":"ratePerSecond","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40374,"src":"3484:13:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":40426,"name":"_streams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40288,"src":"3500:8:189","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Stream_$41452_storage_$","typeString":"mapping(uint256 => struct IStreamable.Stream storage ref)"}},"id":40428,"indexExpression":{"id":40427,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40354,"src":"3509:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3500:18:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage","typeString":"struct IStreamable.Stream storage ref"}},"id":40429,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"ratePerSecond","nodeType":"MemberAccess","referencedDeclaration":41437,"src":"3500:32:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3484:48:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":40431,"nodeType":"ExpressionStatement","src":"3484:48:189"}]},"documentation":{"id":40352,"nodeType":"StructuredDocumentation","src":"2603:219:189","text":" @notice Returns the stream with all its properties.\n @dev Throws if the id does not point to a valid stream.\n @param streamId The id of the stream to query.\n @notice Returns the stream object."},"functionSelector":"894e9a0d","id":40433,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":40357,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40354,"src":"2909:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":40358,"kind":"modifierInvocation","modifierName":{"id":40356,"name":"streamExists","nodeType":"IdentifierPath","referencedDeclaration":40326,"src":"2896:12:189"},"nodeType":"ModifierInvocation","src":"2896:22:189"}],"name":"getStream","nameLocation":"2834:9:189","nodeType":"FunctionDefinition","parameters":{"id":40355,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40354,"mutability":"mutable","name":"streamId","nameLocation":"2857:8:189","nodeType":"VariableDeclaration","scope":40433,"src":"2849:16:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40353,"name":"uint256","nodeType":"ElementaryTypeName","src":"2849:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2843:26:189"},"returnParameters":{"id":40375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40360,"mutability":"mutable","name":"sender","nameLocation":"2947:6:189","nodeType":"VariableDeclaration","scope":40433,"src":"2939:14:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40359,"name":"address","nodeType":"ElementaryTypeName","src":"2939:7:189","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40362,"mutability":"mutable","name":"recipient","nameLocation":"2969:9:189","nodeType":"VariableDeclaration","scope":40433,"src":"2961:17:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40361,"name":"address","nodeType":"ElementaryTypeName","src":"2961:7:189","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40364,"mutability":"mutable","name":"deposit","nameLocation":"2994:7:189","nodeType":"VariableDeclaration","scope":40433,"src":"2986:15:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40363,"name":"uint256","nodeType":"ElementaryTypeName","src":"2986:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40366,"mutability":"mutable","name":"tokenAddress","nameLocation":"3017:12:189","nodeType":"VariableDeclaration","scope":40433,"src":"3009:20:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40365,"name":"address","nodeType":"ElementaryTypeName","src":"3009:7:189","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40368,"mutability":"mutable","name":"startTime","nameLocation":"3045:9:189","nodeType":"VariableDeclaration","scope":40433,"src":"3037:17:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40367,"name":"uint256","nodeType":"ElementaryTypeName","src":"3037:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40370,"mutability":"mutable","name":"stopTime","nameLocation":"3070:8:189","nodeType":"VariableDeclaration","scope":40433,"src":"3062:16:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40369,"name":"uint256","nodeType":"ElementaryTypeName","src":"3062:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40372,"mutability":"mutable","name":"remainingBalance","nameLocation":"3094:16:189","nodeType":"VariableDeclaration","scope":40433,"src":"3086:24:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40371,"name":"uint256","nodeType":"ElementaryTypeName","src":"3086:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40374,"mutability":"mutable","name":"ratePerSecond","nameLocation":"3126:13:189","nodeType":"VariableDeclaration","scope":40433,"src":"3118:21:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40373,"name":"uint256","nodeType":"ElementaryTypeName","src":"3118:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2931:214:189"},"scope":40903,"src":"2825:712:189","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":40477,"nodeType":"Block","src":"4049:240:189","statements":[{"assignments":[40446],"declarations":[{"constant":false,"id":40446,"mutability":"mutable","name":"stream","nameLocation":"4069:6:189","nodeType":"VariableDeclaration","scope":40477,"src":"4055:20:189","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream"},"typeName":{"id":40445,"nodeType":"UserDefinedTypeName","pathNode":{"id":40444,"name":"Stream","nodeType":"IdentifierPath","referencedDeclaration":41452,"src":"4055:6:189"},"referencedDeclaration":41452,"src":"4055:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage_ptr","typeString":"struct IStreamable.Stream"}},"visibility":"internal"}],"id":40450,"initialValue":{"baseExpression":{"id":40447,"name":"_streams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40288,"src":"4078:8:189","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Stream_$41452_storage_$","typeString":"mapping(uint256 => struct IStreamable.Stream storage ref)"}},"id":40449,"indexExpression":{"id":40448,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40436,"src":"4087:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4078:18:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage","typeString":"struct IStreamable.Stream storage ref"}},"nodeType":"VariableDeclarationStatement","src":"4055:41:189"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40451,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"4106:5:189","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":40452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"4106:15:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"expression":{"id":40453,"name":"stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40446,"src":"4125:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"id":40454,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"startTime","nodeType":"MemberAccess","referencedDeclaration":41441,"src":"4125:16:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4106:35:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40458,"nodeType":"IfStatement","src":"4102:49:189","trueBody":{"expression":{"hexValue":"30","id":40456,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4150:1:189","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":40443,"id":40457,"nodeType":"Return","src":"4143:8:189"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40459,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"4161:5:189","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":40460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"4161:15:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":40461,"name":"stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40446,"src":"4179:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"id":40462,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stopTime","nodeType":"MemberAccess","referencedDeclaration":41443,"src":"4179:15:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4161:33:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40470,"nodeType":"IfStatement","src":"4157:80:189","trueBody":{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40464,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"4203:5:189","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":40465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"4203:15:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":40466,"name":"stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40446,"src":"4221:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"id":40467,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"startTime","nodeType":"MemberAccess","referencedDeclaration":41441,"src":"4221:16:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4203:34:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":40443,"id":40469,"nodeType":"Return","src":"4196:41:189"}},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40471,"name":"stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40446,"src":"4250:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"id":40472,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"stopTime","nodeType":"MemberAccess","referencedDeclaration":41443,"src":"4250:15:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":40473,"name":"stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40446,"src":"4268:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"id":40474,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"startTime","nodeType":"MemberAccess","referencedDeclaration":41441,"src":"4268:16:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4250:34:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":40443,"id":40476,"nodeType":"Return","src":"4243:41:189"}]},"documentation":{"id":40434,"nodeType":"StructuredDocumentation","src":"3541:411:189","text":" @notice Returns either the delta in seconds between `block.timestamp` and `startTime` or\n  between `stopTime` and `startTime, whichever is smaller. If `block.timestamp` is before\n  `startTime`, it returns 0.\n @dev Throws if the id does not point to a valid stream.\n @param streamId The id of the stream for which to query the delta.\n @notice Returns the time delta in seconds."},"functionSelector":"a82ccd4d","id":40478,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":40439,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40436,"src":"4015:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":40440,"kind":"modifierInvocation","modifierName":{"id":40438,"name":"streamExists","nodeType":"IdentifierPath","referencedDeclaration":40326,"src":"4002:12:189"},"nodeType":"ModifierInvocation","src":"4002:22:189"}],"name":"deltaOf","nameLocation":"3964:7:189","nodeType":"FunctionDefinition","parameters":{"id":40437,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40436,"mutability":"mutable","name":"streamId","nameLocation":"3980:8:189","nodeType":"VariableDeclaration","scope":40478,"src":"3972:16:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40435,"name":"uint256","nodeType":"ElementaryTypeName","src":"3972:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3971:18:189"},"returnParameters":{"id":40443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40442,"mutability":"mutable","name":"delta","nameLocation":"4042:5:189","nodeType":"VariableDeclaration","scope":40478,"src":"4034:13:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40441,"name":"uint256","nodeType":"ElementaryTypeName","src":"4034:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4033:15:189"},"scope":40903,"src":"3955:334:189","stateMutability":"view","virtual":false,"visibility":"public"},{"canonicalName":"AaveEcosystemReserveV2.BalanceOfLocalVars","id":40485,"members":[{"constant":false,"id":40480,"mutability":"mutable","name":"recipientBalance","nameLocation":"4333:16:189","nodeType":"VariableDeclaration","scope":40485,"src":"4325:24:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40479,"name":"uint256","nodeType":"ElementaryTypeName","src":"4325:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40482,"mutability":"mutable","name":"withdrawalAmount","nameLocation":"4363:16:189","nodeType":"VariableDeclaration","scope":40485,"src":"4355:24:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40481,"name":"uint256","nodeType":"ElementaryTypeName","src":"4355:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40484,"mutability":"mutable","name":"senderBalance","nameLocation":"4393:13:189","nodeType":"VariableDeclaration","scope":40485,"src":"4385:21:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40483,"name":"uint256","nodeType":"ElementaryTypeName","src":"4385:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"BalanceOfLocalVars","nameLocation":"4300:18:189","nodeType":"StructDefinition","scope":40903,"src":"4293:118:189","visibility":"public"},{"baseFunctions":[41497],"body":{"id":40580,"nodeType":"Block","src":"4891:849:189","statements":[{"assignments":[40500],"declarations":[{"constant":false,"id":40500,"mutability":"mutable","name":"stream","nameLocation":"4911:6:189","nodeType":"VariableDeclaration","scope":40580,"src":"4897:20:189","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream"},"typeName":{"id":40499,"nodeType":"UserDefinedTypeName","pathNode":{"id":40498,"name":"Stream","nodeType":"IdentifierPath","referencedDeclaration":41452,"src":"4897:6:189"},"referencedDeclaration":41452,"src":"4897:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage_ptr","typeString":"struct IStreamable.Stream"}},"visibility":"internal"}],"id":40504,"initialValue":{"baseExpression":{"id":40501,"name":"_streams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40288,"src":"4920:8:189","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Stream_$41452_storage_$","typeString":"mapping(uint256 => struct IStreamable.Stream storage ref)"}},"id":40503,"indexExpression":{"id":40502,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40488,"src":"4929:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4920:18:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage","typeString":"struct IStreamable.Stream storage ref"}},"nodeType":"VariableDeclarationStatement","src":"4897:41:189"},{"assignments":[40507],"declarations":[{"constant":false,"id":40507,"mutability":"mutable","name":"vars","nameLocation":"4970:4:189","nodeType":"VariableDeclaration","scope":40580,"src":"4944:30:189","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BalanceOfLocalVars_$40485_memory_ptr","typeString":"struct AaveEcosystemReserveV2.BalanceOfLocalVars"},"typeName":{"id":40506,"nodeType":"UserDefinedTypeName","pathNode":{"id":40505,"name":"BalanceOfLocalVars","nodeType":"IdentifierPath","referencedDeclaration":40485,"src":"4944:18:189"},"referencedDeclaration":40485,"src":"4944:18:189","typeDescriptions":{"typeIdentifier":"t_struct$_BalanceOfLocalVars_$40485_storage_ptr","typeString":"struct AaveEcosystemReserveV2.BalanceOfLocalVars"}},"visibility":"internal"}],"id":40508,"nodeType":"VariableDeclarationStatement","src":"4944:30:189"},{"assignments":[40510],"declarations":[{"constant":false,"id":40510,"mutability":"mutable","name":"delta","nameLocation":"4989:5:189","nodeType":"VariableDeclaration","scope":40580,"src":"4981:13:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40509,"name":"uint256","nodeType":"ElementaryTypeName","src":"4981:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":40514,"initialValue":{"arguments":[{"id":40512,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40488,"src":"5005:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":40511,"name":"deltaOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40478,"src":"4997:7:189","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":40513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4997:17:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4981:33:189"},{"expression":{"id":40522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":40515,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40507,"src":"5020:4:189","typeDescriptions":{"typeIdentifier":"t_struct$_BalanceOfLocalVars_$40485_memory_ptr","typeString":"struct AaveEcosystemReserveV2.BalanceOfLocalVars memory"}},"id":40517,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"recipientBalance","nodeType":"MemberAccess","referencedDeclaration":40480,"src":"5020:21:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40518,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40510,"src":"5044:5:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":40519,"name":"stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40500,"src":"5052:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"id":40520,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"ratePerSecond","nodeType":"MemberAccess","referencedDeclaration":41437,"src":"5052:20:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5044:28:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5020:52:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":40523,"nodeType":"ExpressionStatement","src":"5020:52:189"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40524,"name":"stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40500,"src":"5313:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"id":40525,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"deposit","nodeType":"MemberAccess","referencedDeclaration":41435,"src":"5313:14:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":40526,"name":"stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40500,"src":"5330:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"id":40527,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"remainingBalance","nodeType":"MemberAccess","referencedDeclaration":41439,"src":"5330:23:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5313:40:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40550,"nodeType":"IfStatement","src":"5309:202:189","trueBody":{"id":40549,"nodeType":"Block","src":"5355:156:189","statements":[{"expression":{"id":40537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":40529,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40507,"src":"5363:4:189","typeDescriptions":{"typeIdentifier":"t_struct$_BalanceOfLocalVars_$40485_memory_ptr","typeString":"struct AaveEcosystemReserveV2.BalanceOfLocalVars memory"}},"id":40531,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"withdrawalAmount","nodeType":"MemberAccess","referencedDeclaration":40482,"src":"5363:21:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40532,"name":"stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40500,"src":"5387:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"id":40533,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"deposit","nodeType":"MemberAccess","referencedDeclaration":41435,"src":"5387:14:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":40534,"name":"stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40500,"src":"5404:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"id":40535,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"remainingBalance","nodeType":"MemberAccess","referencedDeclaration":41439,"src":"5404:23:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5387:40:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5363:64:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":40538,"nodeType":"ExpressionStatement","src":"5363:64:189"},{"expression":{"id":40547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":40539,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40507,"src":"5435:4:189","typeDescriptions":{"typeIdentifier":"t_struct$_BalanceOfLocalVars_$40485_memory_ptr","typeString":"struct AaveEcosystemReserveV2.BalanceOfLocalVars memory"}},"id":40541,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"recipientBalance","nodeType":"MemberAccess","referencedDeclaration":40480,"src":"5435:21:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40542,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40507,"src":"5459:4:189","typeDescriptions":{"typeIdentifier":"t_struct$_BalanceOfLocalVars_$40485_memory_ptr","typeString":"struct AaveEcosystemReserveV2.BalanceOfLocalVars memory"}},"id":40543,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"recipientBalance","nodeType":"MemberAccess","referencedDeclaration":40480,"src":"5459:21:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":40544,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40507,"src":"5483:4:189","typeDescriptions":{"typeIdentifier":"t_struct$_BalanceOfLocalVars_$40485_memory_ptr","typeString":"struct AaveEcosystemReserveV2.BalanceOfLocalVars memory"}},"id":40545,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"withdrawalAmount","nodeType":"MemberAccess","referencedDeclaration":40482,"src":"5483:21:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5459:45:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5435:69:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":40548,"nodeType":"ExpressionStatement","src":"5435:69:189"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":40554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40551,"name":"who","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40490,"src":"5521:3:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":40552,"name":"stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40500,"src":"5528:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"id":40553,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":41445,"src":"5528:16:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5521:23:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40558,"nodeType":"IfStatement","src":"5517:57:189","trueBody":{"expression":{"expression":{"id":40555,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40507,"src":"5553:4:189","typeDescriptions":{"typeIdentifier":"t_struct$_BalanceOfLocalVars_$40485_memory_ptr","typeString":"struct AaveEcosystemReserveV2.BalanceOfLocalVars memory"}},"id":40556,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"recipientBalance","nodeType":"MemberAccess","referencedDeclaration":40480,"src":"5553:21:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":40497,"id":40557,"nodeType":"Return","src":"5546:28:189"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":40562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40559,"name":"who","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40490,"src":"5584:3:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":40560,"name":"stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40500,"src":"5591:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"id":40561,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":41447,"src":"5591:13:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5584:20:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40577,"nodeType":"IfStatement","src":"5580:142:189","trueBody":{"id":40576,"nodeType":"Block","src":"5606:116:189","statements":[{"expression":{"id":40571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":40563,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40507,"src":"5614:4:189","typeDescriptions":{"typeIdentifier":"t_struct$_BalanceOfLocalVars_$40485_memory_ptr","typeString":"struct AaveEcosystemReserveV2.BalanceOfLocalVars memory"}},"id":40565,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"senderBalance","nodeType":"MemberAccess","referencedDeclaration":40484,"src":"5614:18:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40566,"name":"stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40500,"src":"5635:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"id":40567,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"remainingBalance","nodeType":"MemberAccess","referencedDeclaration":41439,"src":"5635:23:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":40568,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40507,"src":"5661:4:189","typeDescriptions":{"typeIdentifier":"t_struct$_BalanceOfLocalVars_$40485_memory_ptr","typeString":"struct AaveEcosystemReserveV2.BalanceOfLocalVars memory"}},"id":40569,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"recipientBalance","nodeType":"MemberAccess","referencedDeclaration":40480,"src":"5661:21:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5635:47:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5614:68:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":40572,"nodeType":"ExpressionStatement","src":"5614:68:189"},{"expression":{"expression":{"id":40573,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40507,"src":"5697:4:189","typeDescriptions":{"typeIdentifier":"t_struct$_BalanceOfLocalVars_$40485_memory_ptr","typeString":"struct AaveEcosystemReserveV2.BalanceOfLocalVars memory"}},"id":40574,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"senderBalance","nodeType":"MemberAccess","referencedDeclaration":40484,"src":"5697:18:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":40497,"id":40575,"nodeType":"Return","src":"5690:25:189"}]}},{"expression":{"hexValue":"30","id":40578,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5734:1:189","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":40497,"id":40579,"nodeType":"Return","src":"5727:8:189"}]},"documentation":{"id":40486,"nodeType":"StructuredDocumentation","src":"4415:350:189","text":" @notice Returns the available funds for the given stream id and address.\n @dev Throws if the id does not point to a valid stream.\n @param streamId The id of the stream for which to query the balance.\n @param who The address for which to query the balance.\n @notice Returns the total funds allocated to `who` as uint256."},"functionSelector":"3656eec2","id":40581,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":40493,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40488,"src":"4855:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":40494,"kind":"modifierInvocation","modifierName":{"id":40492,"name":"streamExists","nodeType":"IdentifierPath","referencedDeclaration":40326,"src":"4842:12:189"},"nodeType":"ModifierInvocation","src":"4842:22:189"}],"name":"balanceOf","nameLocation":"4777:9:189","nodeType":"FunctionDefinition","parameters":{"id":40491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40488,"mutability":"mutable","name":"streamId","nameLocation":"4800:8:189","nodeType":"VariableDeclaration","scope":40581,"src":"4792:16:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40487,"name":"uint256","nodeType":"ElementaryTypeName","src":"4792:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40490,"mutability":"mutable","name":"who","nameLocation":"4822:3:189","nodeType":"VariableDeclaration","scope":40581,"src":"4814:11:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40489,"name":"address","nodeType":"ElementaryTypeName","src":"4814:7:189","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4786:43:189"},"returnParameters":{"id":40497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40496,"mutability":"mutable","name":"balance","nameLocation":"4882:7:189","nodeType":"VariableDeclaration","scope":40581,"src":"4874:15:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40495,"name":"uint256","nodeType":"ElementaryTypeName","src":"4874:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4873:17:189"},"scope":40903,"src":"4768:972:189","stateMutability":"view","virtual":false,"visibility":"public"},{"canonicalName":"AaveEcosystemReserveV2.CreateStreamLocalVars","id":40586,"members":[{"constant":false,"id":40583,"mutability":"mutable","name":"duration","nameLocation":"5840:8:189","nodeType":"VariableDeclaration","scope":40586,"src":"5832:16:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40582,"name":"uint256","nodeType":"ElementaryTypeName","src":"5832:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40585,"mutability":"mutable","name":"ratePerSecond","nameLocation":"5862:13:189","nodeType":"VariableDeclaration","scope":40586,"src":"5854:21:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40584,"name":"uint256","nodeType":"ElementaryTypeName","src":"5854:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"CreateStreamLocalVars","nameLocation":"5804:21:189","nodeType":"StructDefinition","scope":40903,"src":"5797:83:189","visibility":"public"},{"baseFunctions":[41533],"body":{"id":40735,"nodeType":"Block","src":"7236:1435:189","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":40610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40605,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40589,"src":"7250:9:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":40608,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7271:1:189","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":40607,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7263:7:189","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":40606,"name":"address","nodeType":"ElementaryTypeName","src":"7263:7:189","typeDescriptions":{}}},"id":40609,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7263:10:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7250:23:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"73747265616d20746f20746865207a65726f2061646472657373","id":40611,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7275:28:189","typeDescriptions":{"typeIdentifier":"t_stringliteral_0fb610a31dbc054e34911ed7e1fb1973edf2c446267b8fea92e2f70ba544b0a4","typeString":"literal_string \"stream to the zero address\""},"value":"stream to the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0fb610a31dbc054e34911ed7e1fb1973edf2c446267b8fea92e2f70ba544b0a4","typeString":"literal_string \"stream to the zero address\""}],"id":40604,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7242:7:189","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7242:62:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40613,"nodeType":"ExpressionStatement","src":"7242:62:189"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":40620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40615,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40589,"src":"7318:9:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":40618,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7339:4:189","typeDescriptions":{"typeIdentifier":"t_contract$_AaveEcosystemReserveV2_$40903","typeString":"contract AaveEcosystemReserveV2"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AaveEcosystemReserveV2_$40903","typeString":"contract AaveEcosystemReserveV2"}],"id":40617,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7331:7:189","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":40616,"name":"address","nodeType":"ElementaryTypeName","src":"7331:7:189","typeDescriptions":{}}},"id":40619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7331:13:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7318:26:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"73747265616d20746f2074686520636f6e747261637420697473656c66","id":40621,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7346:31:189","typeDescriptions":{"typeIdentifier":"t_stringliteral_c98b35051b17903e45fcfa5883c5308ebc65b91e5bcfcb635cd99a5a432f7bb8","typeString":"literal_string \"stream to the contract itself\""},"value":"stream to the contract itself"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c98b35051b17903e45fcfa5883c5308ebc65b91e5bcfcb635cd99a5a432f7bb8","typeString":"literal_string \"stream to the contract itself\""}],"id":40614,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7310:7:189","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7310:68:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40623,"nodeType":"ExpressionStatement","src":"7310:68:189"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":40628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40625,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40589,"src":"7392:9:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":40626,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7405:3:189","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":40627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"7405:10:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7392:23:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"73747265616d20746f207468652063616c6c6572","id":40629,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7417:22:189","typeDescriptions":{"typeIdentifier":"t_stringliteral_8f020ae947256c783c3a910204e478c6ac656ac43b2d96e8ce8ba05e2917ff2d","typeString":"literal_string \"stream to the caller\""},"value":"stream to the caller"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8f020ae947256c783c3a910204e478c6ac656ac43b2d96e8ce8ba05e2917ff2d","typeString":"literal_string \"stream to the caller\""}],"id":40624,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7384:7:189","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7384:56:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40631,"nodeType":"ExpressionStatement","src":"7384:56:189"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40633,"name":"deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40591,"src":"7454:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":40634,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7464:1:189","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7454:11:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6465706f736974206973207a65726f","id":40636,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7467:17:189","typeDescriptions":{"typeIdentifier":"t_stringliteral_62ce868967b74bf3cf31dd63768a19be2ad8a1c0645de996b5bad31d832ad3a2","typeString":"literal_string \"deposit is zero\""},"value":"deposit is zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_62ce868967b74bf3cf31dd63768a19be2ad8a1c0645de996b5bad31d832ad3a2","typeString":"literal_string \"deposit is zero\""}],"id":40632,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7446:7:189","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7446:39:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40638,"nodeType":"ExpressionStatement","src":"7446:39:189"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40640,"name":"startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40595,"src":"7499:9:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":40641,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"7512:5:189","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":40642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"timestamp","nodeType":"MemberAccess","src":"7512:15:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7499:28:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"73746172742074696d65206265666f726520626c6f636b2e74696d657374616d70","id":40644,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7529:35:189","typeDescriptions":{"typeIdentifier":"t_stringliteral_5c0382dff0bb3d2935f4a09b0da643a0ace0069c949e7d2009a5cd8d0b10dc85","typeString":"literal_string \"start time before block.timestamp\""},"value":"start time before block.timestamp"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5c0382dff0bb3d2935f4a09b0da643a0ace0069c949e7d2009a5cd8d0b10dc85","typeString":"literal_string \"start time before block.timestamp\""}],"id":40639,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7491:7:189","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7491:74:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40646,"nodeType":"ExpressionStatement","src":"7491:74:189"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40648,"name":"stopTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40597,"src":"7579:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":40649,"name":"startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40595,"src":"7590:9:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7579:20:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"73746f702074696d65206265666f7265207468652073746172742074696d65","id":40651,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7601:33:189","typeDescriptions":{"typeIdentifier":"t_stringliteral_f306b7d60c58353d11a3c6bc313cd6ea279cee8ceff076ea8e1fe7fdde1c46cf","typeString":"literal_string \"stop time before the start time\""},"value":"stop time before the start time"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f306b7d60c58353d11a3c6bc313cd6ea279cee8ceff076ea8e1fe7fdde1c46cf","typeString":"literal_string \"stop time before the start time\""}],"id":40647,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7571:7:189","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40652,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7571:64:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40653,"nodeType":"ExpressionStatement","src":"7571:64:189"},{"assignments":[40656],"declarations":[{"constant":false,"id":40656,"mutability":"mutable","name":"vars","nameLocation":"7671:4:189","nodeType":"VariableDeclaration","scope":40735,"src":"7642:33:189","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_CreateStreamLocalVars_$40586_memory_ptr","typeString":"struct AaveEcosystemReserveV2.CreateStreamLocalVars"},"typeName":{"id":40655,"nodeType":"UserDefinedTypeName","pathNode":{"id":40654,"name":"CreateStreamLocalVars","nodeType":"IdentifierPath","referencedDeclaration":40586,"src":"7642:21:189"},"referencedDeclaration":40586,"src":"7642:21:189","typeDescriptions":{"typeIdentifier":"t_struct$_CreateStreamLocalVars_$40586_storage_ptr","typeString":"struct AaveEcosystemReserveV2.CreateStreamLocalVars"}},"visibility":"internal"}],"id":40657,"nodeType":"VariableDeclarationStatement","src":"7642:33:189"},{"expression":{"id":40664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":40658,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40656,"src":"7681:4:189","typeDescriptions":{"typeIdentifier":"t_struct$_CreateStreamLocalVars_$40586_memory_ptr","typeString":"struct AaveEcosystemReserveV2.CreateStreamLocalVars memory"}},"id":40660,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"duration","nodeType":"MemberAccess","referencedDeclaration":40583,"src":"7681:13:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40661,"name":"stopTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40597,"src":"7697:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":40662,"name":"startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40595,"src":"7708:9:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7697:20:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7681:36:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":40665,"nodeType":"ExpressionStatement","src":"7681:36:189"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40667,"name":"deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40591,"src":"7791:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":40668,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40656,"src":"7802:4:189","typeDescriptions":{"typeIdentifier":"t_struct$_CreateStreamLocalVars_$40586_memory_ptr","typeString":"struct AaveEcosystemReserveV2.CreateStreamLocalVars memory"}},"id":40669,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"duration","nodeType":"MemberAccess","referencedDeclaration":40583,"src":"7802:13:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7791:24:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6465706f73697420736d616c6c6572207468616e2074696d652064656c7461","id":40671,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7817:33:189","typeDescriptions":{"typeIdentifier":"t_stringliteral_e82df4c8a840b48313d4d5bcea8d602824e30c3719870db1a113cdd6eb39c3a7","typeString":"literal_string \"deposit smaller than time delta\""},"value":"deposit smaller than time delta"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e82df4c8a840b48313d4d5bcea8d602824e30c3719870db1a113cdd6eb39c3a7","typeString":"literal_string \"deposit smaller than time delta\""}],"id":40666,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7783:7:189","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7783:68:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40673,"nodeType":"ExpressionStatement","src":"7783:68:189"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40675,"name":"deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40591,"src":"7922:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"expression":{"id":40676,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40656,"src":"7932:4:189","typeDescriptions":{"typeIdentifier":"t_struct$_CreateStreamLocalVars_$40586_memory_ptr","typeString":"struct AaveEcosystemReserveV2.CreateStreamLocalVars memory"}},"id":40677,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"duration","nodeType":"MemberAccess","referencedDeclaration":40583,"src":"7932:13:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7922:23:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":40679,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7949:1:189","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7922:28:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"6465706f736974206e6f74206d756c7469706c65206f662074696d652064656c7461","id":40681,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7952:36:189","typeDescriptions":{"typeIdentifier":"t_stringliteral_6a58cacb108971beaf9e398c295cf14584c22aa9fdb712f8ad3179599adbe0a2","typeString":"literal_string \"deposit not multiple of time delta\""},"value":"deposit not multiple of time delta"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6a58cacb108971beaf9e398c295cf14584c22aa9fdb712f8ad3179599adbe0a2","typeString":"literal_string \"deposit not multiple of time delta\""}],"id":40674,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7914:7:189","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7914:75:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40683,"nodeType":"ExpressionStatement","src":"7914:75:189"},{"expression":{"id":40691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":40684,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40656,"src":"7996:4:189","typeDescriptions":{"typeIdentifier":"t_struct$_CreateStreamLocalVars_$40586_memory_ptr","typeString":"struct AaveEcosystemReserveV2.CreateStreamLocalVars memory"}},"id":40686,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"ratePerSecond","nodeType":"MemberAccess","referencedDeclaration":40585,"src":"7996:18:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40687,"name":"deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40591,"src":"8017:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":40688,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40656,"src":"8027:4:189","typeDescriptions":{"typeIdentifier":"t_struct$_CreateStreamLocalVars_$40586_memory_ptr","typeString":"struct AaveEcosystemReserveV2.CreateStreamLocalVars memory"}},"id":40689,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"duration","nodeType":"MemberAccess","referencedDeclaration":40583,"src":"8027:13:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8017:23:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7996:44:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":40692,"nodeType":"ExpressionStatement","src":"7996:44:189"},{"assignments":[40694],"declarations":[{"constant":false,"id":40694,"mutability":"mutable","name":"streamId","nameLocation":"8101:8:189","nodeType":"VariableDeclaration","scope":40735,"src":"8093:16:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40693,"name":"uint256","nodeType":"ElementaryTypeName","src":"8093:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":40696,"initialValue":{"id":40695,"name":"_nextStreamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40282,"src":"8112:13:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8093:32:189"},{"expression":{"id":40715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":40697,"name":"_streams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40288,"src":"8131:8:189","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Stream_$41452_storage_$","typeString":"mapping(uint256 => struct IStreamable.Stream storage ref)"}},"id":40699,"indexExpression":{"id":40698,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40694,"src":"8140:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8131:18:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage","typeString":"struct IStreamable.Stream storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":40701,"name":"deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40591,"src":"8185:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":40702,"name":"deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40591,"src":"8209:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":40703,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8234:4:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"expression":{"id":40704,"name":"vars","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40656,"src":"8261:4:189","typeDescriptions":{"typeIdentifier":"t_struct$_CreateStreamLocalVars_$40586_memory_ptr","typeString":"struct AaveEcosystemReserveV2.CreateStreamLocalVars memory"}},"id":40705,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"ratePerSecond","nodeType":"MemberAccess","referencedDeclaration":40585,"src":"8261:18:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":40706,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40589,"src":"8298:9:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":40709,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8331:4:189","typeDescriptions":{"typeIdentifier":"t_contract$_AaveEcosystemReserveV2_$40903","typeString":"contract AaveEcosystemReserveV2"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AaveEcosystemReserveV2_$40903","typeString":"contract AaveEcosystemReserveV2"}],"id":40708,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8323:7:189","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":40707,"name":"address","nodeType":"ElementaryTypeName","src":"8323:7:189","typeDescriptions":{}}},"id":40710,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8323:13:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40711,"name":"startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40595,"src":"8355:9:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":40712,"name":"stopTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40597,"src":"8382:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":40713,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40593,"src":"8412:12:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":40700,"name":"Stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41452,"src":"8152:6:189","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Stream_$41452_storage_ptr_$","typeString":"type(struct IStreamable.Stream storage pointer)"}},"id":40714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"names":["remainingBalance","deposit","isEntity","ratePerSecond","recipient","sender","startTime","stopTime","tokenAddress"],"nodeType":"FunctionCall","src":"8152:279:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"src":"8131:300:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage","typeString":"struct IStreamable.Stream storage ref"}},"id":40716,"nodeType":"ExpressionStatement","src":"8131:300:189"},{"expression":{"id":40718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"8478:15:189","subExpression":{"id":40717,"name":"_nextStreamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40282,"src":"8478:13:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":40719,"nodeType":"ExpressionStatement","src":"8478:15:189"},{"eventCall":{"arguments":[{"id":40721,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40694,"src":"8525:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":40724,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8549:4:189","typeDescriptions":{"typeIdentifier":"t_contract$_AaveEcosystemReserveV2_$40903","typeString":"contract AaveEcosystemReserveV2"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AaveEcosystemReserveV2_$40903","typeString":"contract AaveEcosystemReserveV2"}],"id":40723,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8541:7:189","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":40722,"name":"address","nodeType":"ElementaryTypeName","src":"8541:7:189","typeDescriptions":{}}},"id":40725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8541:13:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40726,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40589,"src":"8562:9:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40727,"name":"deposit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40591,"src":"8579:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":40728,"name":"tokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40593,"src":"8594:12:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40729,"name":"startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40595,"src":"8614:9:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":40730,"name":"stopTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40597,"src":"8631:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":40720,"name":"CreateStream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41468,"src":"8505:12:189","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,address,address,uint256,address,uint256,uint256)"}},"id":40731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8505:140:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40732,"nodeType":"EmitStatement","src":"8500:145:189"},{"expression":{"id":40733,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40694,"src":"8658:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":40603,"id":40734,"nodeType":"Return","src":"8651:15:189"}]},"documentation":{"id":40587,"nodeType":"StructuredDocumentation","src":"5884:1166:189","text":" @notice Creates a new stream funded by this contracts itself and paid towards `recipient`.\n @dev Throws if the recipient is the zero address, the contract itself or the caller.\n  Throws if the deposit is 0.\n  Throws if the start time is before `block.timestamp`.\n  Throws if the stop time is before the start time.\n  Throws if the duration calculation has a math error.\n  Throws if the deposit is smaller than the duration.\n  Throws if the deposit is not a multiple of the duration.\n  Throws if the rate calculation has a math error.\n  Throws if the next stream id calculation has a math error.\n  Throws if the contract is not allowed to transfer enough tokens.\n  Throws if there is a token transfer failure.\n @param recipient The address towards which the money is streamed.\n @param deposit The amount of money to be streamed.\n @param tokenAddress The ERC20 token to use as streaming currency.\n @param startTime The unix timestamp for when the stream starts.\n @param stopTime The unix timestamp for when the stream stops.\n @notice Returns the uint256 id of the newly created stream."},"functionSelector":"cc1b4bf6","id":40736,"implemented":true,"kind":"function","modifiers":[{"id":40600,"kind":"modifierInvocation","modifierName":{"id":40599,"name":"onlyFundsAdmin","nodeType":"IdentifierPath","referencedDeclaration":40950,"src":"7203:14:189"},"nodeType":"ModifierInvocation","src":"7203:14:189"}],"name":"createStream","nameLocation":"7062:12:189","nodeType":"FunctionDefinition","parameters":{"id":40598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40589,"mutability":"mutable","name":"recipient","nameLocation":"7088:9:189","nodeType":"VariableDeclaration","scope":40736,"src":"7080:17:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40588,"name":"address","nodeType":"ElementaryTypeName","src":"7080:7:189","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40591,"mutability":"mutable","name":"deposit","nameLocation":"7111:7:189","nodeType":"VariableDeclaration","scope":40736,"src":"7103:15:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40590,"name":"uint256","nodeType":"ElementaryTypeName","src":"7103:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40593,"mutability":"mutable","name":"tokenAddress","nameLocation":"7132:12:189","nodeType":"VariableDeclaration","scope":40736,"src":"7124:20:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40592,"name":"address","nodeType":"ElementaryTypeName","src":"7124:7:189","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40595,"mutability":"mutable","name":"startTime","nameLocation":"7158:9:189","nodeType":"VariableDeclaration","scope":40736,"src":"7150:17:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40594,"name":"uint256","nodeType":"ElementaryTypeName","src":"7150:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40597,"mutability":"mutable","name":"stopTime","nameLocation":"7181:8:189","nodeType":"VariableDeclaration","scope":40736,"src":"7173:16:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40596,"name":"uint256","nodeType":"ElementaryTypeName","src":"7173:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7074:119:189"},"returnParameters":{"id":40603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40602,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40736,"src":"7227:7:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40601,"name":"uint256","nodeType":"ElementaryTypeName","src":"7227:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7226:9:189"},"scope":40903,"src":"7053:1618:189","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[41542],"body":{"id":40824,"nodeType":"Block","src":"9293:539:189","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40755,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40741,"src":"9307:6:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":40756,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9316:1:189","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9307:10:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"616d6f756e74206973207a65726f","id":40758,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9319:16:189","typeDescriptions":{"typeIdentifier":"t_stringliteral_139c46236454ed3ad9fbab45025426a45950790ea361e18a59617576f8acab40","typeString":"literal_string \"amount is zero\""},"value":"amount is zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_139c46236454ed3ad9fbab45025426a45950790ea361e18a59617576f8acab40","typeString":"literal_string \"amount is zero\""}],"id":40754,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9299:7:189","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9299:37:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40760,"nodeType":"ExpressionStatement","src":"9299:37:189"},{"assignments":[40763],"declarations":[{"constant":false,"id":40763,"mutability":"mutable","name":"stream","nameLocation":"9356:6:189","nodeType":"VariableDeclaration","scope":40824,"src":"9342:20:189","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream"},"typeName":{"id":40762,"nodeType":"UserDefinedTypeName","pathNode":{"id":40761,"name":"Stream","nodeType":"IdentifierPath","referencedDeclaration":41452,"src":"9342:6:189"},"referencedDeclaration":41452,"src":"9342:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage_ptr","typeString":"struct IStreamable.Stream"}},"visibility":"internal"}],"id":40767,"initialValue":{"baseExpression":{"id":40764,"name":"_streams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40288,"src":"9365:8:189","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Stream_$41452_storage_$","typeString":"mapping(uint256 => struct IStreamable.Stream storage ref)"}},"id":40766,"indexExpression":{"id":40765,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40739,"src":"9374:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9365:18:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage","typeString":"struct IStreamable.Stream storage ref"}},"nodeType":"VariableDeclarationStatement","src":"9342:41:189"},{"assignments":[40769],"declarations":[{"constant":false,"id":40769,"mutability":"mutable","name":"balance","nameLocation":"9398:7:189","nodeType":"VariableDeclaration","scope":40824,"src":"9390:15:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40768,"name":"uint256","nodeType":"ElementaryTypeName","src":"9390:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":40775,"initialValue":{"arguments":[{"id":40771,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40739,"src":"9418:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":40772,"name":"stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40763,"src":"9428:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"id":40773,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":41445,"src":"9428:16:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":40770,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40581,"src":"9408:9:189","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":40774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9408:37:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9390:55:189"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40777,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40769,"src":"9459:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":40778,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40741,"src":"9470:6:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9459:17:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"616d6f756e7420657863656564732074686520617661696c61626c652062616c616e6365","id":40780,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9478:38:189","typeDescriptions":{"typeIdentifier":"t_stringliteral_29b9861e0d12d3fed793e4273df0f767cd993c707dcd18092cb3eb6a13caaf83","typeString":"literal_string \"amount exceeds the available balance\""},"value":"amount exceeds the available balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_29b9861e0d12d3fed793e4273df0f767cd993c707dcd18092cb3eb6a13caaf83","typeString":"literal_string \"amount exceeds the available balance\""}],"id":40776,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"9451:7:189","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9451:66:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40782,"nodeType":"ExpressionStatement","src":"9451:66:189"},{"expression":{"id":40791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":40783,"name":"_streams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40288,"src":"9524:8:189","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Stream_$41452_storage_$","typeString":"mapping(uint256 => struct IStreamable.Stream storage ref)"}},"id":40785,"indexExpression":{"id":40784,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40739,"src":"9533:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9524:18:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage","typeString":"struct IStreamable.Stream storage ref"}},"id":40786,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"remainingBalance","nodeType":"MemberAccess","referencedDeclaration":41439,"src":"9524:35:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40787,"name":"stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40763,"src":"9562:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"id":40788,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"remainingBalance","nodeType":"MemberAccess","referencedDeclaration":41439,"src":"9562:23:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":40789,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40741,"src":"9588:6:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9562:32:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9524:70:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":40792,"nodeType":"ExpressionStatement","src":"9524:70:189"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":40793,"name":"_streams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40288,"src":"9605:8:189","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Stream_$41452_storage_$","typeString":"mapping(uint256 => struct IStreamable.Stream storage ref)"}},"id":40795,"indexExpression":{"id":40794,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40739,"src":"9614:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9605:18:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage","typeString":"struct IStreamable.Stream storage ref"}},"id":40796,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"remainingBalance","nodeType":"MemberAccess","referencedDeclaration":41439,"src":"9605:35:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":40797,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9644:1:189","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9605:40:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40804,"nodeType":"IfStatement","src":"9601:71:189","trueBody":{"expression":{"id":40802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"9647:25:189","subExpression":{"baseExpression":{"id":40799,"name":"_streams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40288,"src":"9654:8:189","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Stream_$41452_storage_$","typeString":"mapping(uint256 => struct IStreamable.Stream storage ref)"}},"id":40801,"indexExpression":{"id":40800,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40739,"src":"9663:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9654:18:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage","typeString":"struct IStreamable.Stream storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40803,"nodeType":"ExpressionStatement","src":"9647:25:189"}},{"expression":{"arguments":[{"expression":{"id":40810,"name":"stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40763,"src":"9720:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"id":40811,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":41445,"src":"9720:16:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40812,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40741,"src":"9738:6:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"expression":{"id":40806,"name":"stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40763,"src":"9686:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"id":40807,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"tokenAddress","nodeType":"MemberAccess","referencedDeclaration":41449,"src":"9686:19:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":40805,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"9679:6:189","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":40808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9679:27:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":40809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":41923,"src":"9679:40:189","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":40813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9679:66:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40814,"nodeType":"ExpressionStatement","src":"9679:66:189"},{"eventCall":{"arguments":[{"id":40816,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40739,"src":"9775:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":40817,"name":"stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40763,"src":"9785:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"id":40818,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":41445,"src":"9785:16:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40819,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40741,"src":"9803:6:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":40815,"name":"WithdrawFromStream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41476,"src":"9756:18:189","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_address_$_t_uint256_$returns$__$","typeString":"function (uint256,address,uint256)"}},"id":40820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9756:54:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40821,"nodeType":"EmitStatement","src":"9751:59:189"},{"expression":{"hexValue":"74727565","id":40822,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9823:4:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":40753,"id":40823,"nodeType":"Return","src":"9816:11:189"}]},"documentation":{"id":40737,"nodeType":"StructuredDocumentation","src":"8675:450:189","text":" @notice Withdraws from the contract to the recipient's account.\n @dev Throws if the id does not point to a valid stream.\n  Throws if the caller is not the funds admin or the recipient of the stream.\n  Throws if the amount exceeds the available balance.\n  Throws if there is a token transfer failure.\n @param streamId The id of the stream to withdraw tokens from.\n @param amount The amount of tokens to withdraw."},"functionSelector":"7a9b2c6c","id":40825,"implemented":true,"kind":"function","modifiers":[{"id":40744,"kind":"modifierInvocation","modifierName":{"id":40743,"name":"nonReentrant","nodeType":"IdentifierPath","referencedDeclaration":41889,"src":"9211:12:189"},"nodeType":"ModifierInvocation","src":"9211:12:189"},{"arguments":[{"id":40746,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40739,"src":"9237:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":40747,"kind":"modifierInvocation","modifierName":{"id":40745,"name":"streamExists","nodeType":"IdentifierPath","referencedDeclaration":40326,"src":"9224:12:189"},"nodeType":"ModifierInvocation","src":"9224:22:189"},{"arguments":[{"id":40749,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40739,"src":"9268:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":40750,"kind":"modifierInvocation","modifierName":{"id":40748,"name":"onlyAdminOrRecipient","nodeType":"IdentifierPath","referencedDeclaration":40311,"src":"9247:20:189"},"nodeType":"ModifierInvocation","src":"9247:30:189"}],"name":"withdrawFromStream","nameLocation":"9137:18:189","nodeType":"FunctionDefinition","parameters":{"id":40742,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40739,"mutability":"mutable","name":"streamId","nameLocation":"9169:8:189","nodeType":"VariableDeclaration","scope":40825,"src":"9161:16:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40738,"name":"uint256","nodeType":"ElementaryTypeName","src":"9161:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40741,"mutability":"mutable","name":"amount","nameLocation":"9191:6:189","nodeType":"VariableDeclaration","scope":40825,"src":"9183:14:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40740,"name":"uint256","nodeType":"ElementaryTypeName","src":"9183:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9155:46:189"},"returnParameters":{"id":40753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40752,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40825,"src":"9287:4:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":40751,"name":"bool","nodeType":"ElementaryTypeName","src":"9287:4:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9286:6:189"},"scope":40903,"src":"9128:704:189","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[41549],"body":{"id":40901,"nodeType":"Block","src":"10374:470:189","statements":[{"assignments":[40843],"declarations":[{"constant":false,"id":40843,"mutability":"mutable","name":"stream","nameLocation":"10394:6:189","nodeType":"VariableDeclaration","scope":40901,"src":"10380:20:189","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream"},"typeName":{"id":40842,"nodeType":"UserDefinedTypeName","pathNode":{"id":40841,"name":"Stream","nodeType":"IdentifierPath","referencedDeclaration":41452,"src":"10380:6:189"},"referencedDeclaration":41452,"src":"10380:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage_ptr","typeString":"struct IStreamable.Stream"}},"visibility":"internal"}],"id":40847,"initialValue":{"baseExpression":{"id":40844,"name":"_streams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40288,"src":"10403:8:189","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Stream_$41452_storage_$","typeString":"mapping(uint256 => struct IStreamable.Stream storage ref)"}},"id":40846,"indexExpression":{"id":40845,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40828,"src":"10412:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10403:18:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage","typeString":"struct IStreamable.Stream storage ref"}},"nodeType":"VariableDeclarationStatement","src":"10380:41:189"},{"assignments":[40849],"declarations":[{"constant":false,"id":40849,"mutability":"mutable","name":"senderBalance","nameLocation":"10435:13:189","nodeType":"VariableDeclaration","scope":40901,"src":"10427:21:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40848,"name":"uint256","nodeType":"ElementaryTypeName","src":"10427:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":40855,"initialValue":{"arguments":[{"id":40851,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40828,"src":"10461:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":40852,"name":"stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40843,"src":"10471:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"id":40853,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":41447,"src":"10471:13:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":40850,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40581,"src":"10451:9:189","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":40854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10451:34:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10427:58:189"},{"assignments":[40857],"declarations":[{"constant":false,"id":40857,"mutability":"mutable","name":"recipientBalance","nameLocation":"10499:16:189","nodeType":"VariableDeclaration","scope":40901,"src":"10491:24:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40856,"name":"uint256","nodeType":"ElementaryTypeName","src":"10491:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":40863,"initialValue":{"arguments":[{"id":40859,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40828,"src":"10528:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":40860,"name":"stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40843,"src":"10538:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"id":40861,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":41445,"src":"10538:16:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":40858,"name":"balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40581,"src":"10518:9:189","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":40862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10518:37:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10491:64:189"},{"expression":{"id":40867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"10562:25:189","subExpression":{"baseExpression":{"id":40864,"name":"_streams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40288,"src":"10569:8:189","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_Stream_$41452_storage_$","typeString":"mapping(uint256 => struct IStreamable.Stream storage ref)"}},"id":40866,"indexExpression":{"id":40865,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40828,"src":"10578:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10569:18:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_storage","typeString":"struct IStreamable.Stream storage ref"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40868,"nodeType":"ExpressionStatement","src":"10562:25:189"},{"assignments":[40871],"declarations":[{"constant":false,"id":40871,"mutability":"mutable","name":"token","nameLocation":"10601:5:189","nodeType":"VariableDeclaration","scope":40901,"src":"10594:12:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":40870,"nodeType":"UserDefinedTypeName","pathNode":{"id":40869,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"10594:6:189"},"referencedDeclaration":1442,"src":"10594:6:189","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"}],"id":40876,"initialValue":{"arguments":[{"expression":{"id":40873,"name":"stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40843,"src":"10616:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"id":40874,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"tokenAddress","nodeType":"MemberAccess","referencedDeclaration":41449,"src":"10616:19:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":40872,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1442,"src":"10609:6:189","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$1442_$","typeString":"type(contract IERC20)"}},"id":40875,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10609:27:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"10594:42:189"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40877,"name":"recipientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40857,"src":"10646:16:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":40878,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10665:1:189","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10646:20:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40888,"nodeType":"IfStatement","src":"10642:80:189","trueBody":{"expression":{"arguments":[{"expression":{"id":40883,"name":"stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40843,"src":"10687:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"id":40884,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":41445,"src":"10687:16:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40885,"name":"recipientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40857,"src":"10705:16:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":40880,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40871,"src":"10668:5:189","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":40882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":41923,"src":"10668:18:189","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":40886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10668:54:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40887,"nodeType":"ExpressionStatement","src":"10668:54:189"}},{"eventCall":{"arguments":[{"id":40890,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40828,"src":"10747:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":40891,"name":"stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40843,"src":"10757:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"id":40892,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":41447,"src":"10757:13:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":40893,"name":"stream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40843,"src":"10772:6:189","typeDescriptions":{"typeIdentifier":"t_struct$_Stream_$41452_memory_ptr","typeString":"struct IStreamable.Stream memory"}},"id":40894,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"recipient","nodeType":"MemberAccess","referencedDeclaration":41445,"src":"10772:16:189","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40895,"name":"senderBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40849,"src":"10790:13:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":40896,"name":"recipientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40857,"src":"10805:16:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":40889,"name":"CancelStream","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41488,"src":"10734:12:189","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,address,address,uint256,uint256)"}},"id":40897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"10734:88:189","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40898,"nodeType":"EmitStatement","src":"10729:93:189"},{"expression":{"hexValue":"74727565","id":40899,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10835:4:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":40840,"id":40900,"nodeType":"Return","src":"10828:11:189"}]},"documentation":{"id":40826,"nodeType":"StructuredDocumentation","src":"9836:396:189","text":" @notice Cancels the stream and transfers the tokens back on a pro rata basis.\n @dev Throws if the id does not point to a valid stream.\n  Throws if the caller is not the funds admin or the recipient of the stream.\n  Throws if there is a token transfer failure.\n @param streamId The id of the stream to cancel.\n @notice Returns bool true=success, otherwise false."},"functionSelector":"6db9241b","id":40902,"implemented":true,"kind":"function","modifiers":[{"id":40831,"kind":"modifierInvocation","modifierName":{"id":40830,"name":"nonReentrant","nodeType":"IdentifierPath","referencedDeclaration":41889,"src":"10292:12:189"},"nodeType":"ModifierInvocation","src":"10292:12:189"},{"arguments":[{"id":40833,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40828,"src":"10318:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":40834,"kind":"modifierInvocation","modifierName":{"id":40832,"name":"streamExists","nodeType":"IdentifierPath","referencedDeclaration":40326,"src":"10305:12:189"},"nodeType":"ModifierInvocation","src":"10305:22:189"},{"arguments":[{"id":40836,"name":"streamId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40828,"src":"10349:8:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":40837,"kind":"modifierInvocation","modifierName":{"id":40835,"name":"onlyAdminOrRecipient","nodeType":"IdentifierPath","referencedDeclaration":40311,"src":"10328:20:189"},"nodeType":"ModifierInvocation","src":"10328:30:189"}],"name":"cancelStream","nameLocation":"10244:12:189","nodeType":"FunctionDefinition","parameters":{"id":40829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40828,"mutability":"mutable","name":"streamId","nameLocation":"10270:8:189","nodeType":"VariableDeclaration","scope":40902,"src":"10262:16:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40827,"name":"uint256","nodeType":"ElementaryTypeName","src":"10262:7:189","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10256:26:189"},"returnParameters":{"id":40840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40839,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40902,"src":"10368:4:189","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":40838,"name":"bool","nodeType":"ElementaryTypeName","src":"10368:4:189","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10367:6:189"},"scope":40903,"src":"10235:609:189","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":40904,"src":"1270:9576:189","usedErrors":[]}],"src":"36:10811:189"},"id":189},"contracts/treasury/AdminControlledEcosystemReserve.sol":{"ast":{"absolutePath":"contracts/treasury/AdminControlledEcosystemReserve.sol","exportedSymbols":{"Address":[41850],"AdminControlledEcosystemReserve":[41057],"IAdminControlledEcosystemReserve":[41380],"IERC20":[1442],"ReentrancyGuard":[41890],"SafeERC20":[42116],"VersionedInitializable":[42155]},"id":41058,"license":"GPL-3.0","nodeType":"SourceUnit","nodes":[{"id":40905,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"36:24:190"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","id":40907,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41058,"sourceUnit":1443,"src":"62:94:190","symbolAliases":[{"foreign":{"id":40906,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:6:190","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/treasury/interfaces/IAdminControlledEcosystemReserve.sol","file":"./interfaces/IAdminControlledEcosystemReserve.sol","id":40909,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41058,"sourceUnit":41381,"src":"157:99:190","symbolAliases":[{"foreign":{"id":40908,"name":"IAdminControlledEcosystemReserve","nodeType":"Identifier","overloadedDeclarations":[],"src":"165:32:190","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/treasury/libs/VersionedInitializable.sol","file":"./libs/VersionedInitializable.sol","id":40911,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41058,"sourceUnit":42156,"src":"257:73:190","symbolAliases":[{"foreign":{"id":40910,"name":"VersionedInitializable","nodeType":"Identifier","overloadedDeclarations":[],"src":"265:22:190","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/treasury/libs/SafeERC20.sol","file":"./libs/SafeERC20.sol","id":40913,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41058,"sourceUnit":42117,"src":"331:47:190","symbolAliases":[{"foreign":{"id":40912,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"339:9:190","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/treasury/libs/ReentrancyGuard.sol","file":"./libs/ReentrancyGuard.sol","id":40915,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41058,"sourceUnit":41891,"src":"379:59:190","symbolAliases":[{"foreign":{"id":40914,"name":"ReentrancyGuard","nodeType":"Identifier","overloadedDeclarations":[],"src":"387:15:190","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/treasury/libs/Address.sol","file":"./libs/Address.sol","id":40917,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41058,"sourceUnit":41851,"src":"439:43:190","symbolAliases":[{"foreign":{"id":40916,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"src":"447:7:190","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":40919,"name":"VersionedInitializable","nodeType":"IdentifierPath","referencedDeclaration":42155,"src":"862:22:190"},"id":40920,"nodeType":"InheritanceSpecifier","src":"862:22:190"},{"baseName":{"id":40921,"name":"IAdminControlledEcosystemReserve","nodeType":"IdentifierPath","referencedDeclaration":41380,"src":"888:32:190"},"id":40922,"nodeType":"InheritanceSpecifier","src":"888:32:190"}],"canonicalName":"AdminControlledEcosystemReserve","contractDependencies":[],"contractKind":"contract","documentation":{"id":40918,"nodeType":"StructuredDocumentation","src":"484:322:190","text":" @title AdminControlledEcosystemReserve\n @notice Stores ERC20 tokens, and allows to dispose of them via approval or transfer dynamics\n Adapted to be an implementation of a transparent proxy\n @dev Done abstract to add an `initialize()` function on the child, with `initializer` modifier\n @author BGD Labs*"},"fullyImplemented":true,"id":41057,"linearizedBaseContracts":[41057,41380,42155],"name":"AdminControlledEcosystemReserve","nameLocation":"825:31:190","nodeType":"ContractDefinition","nodes":[{"id":40926,"libraryName":{"id":40923,"name":"SafeERC20","nodeType":"IdentifierPath","referencedDeclaration":42116,"src":"931:9:190"},"nodeType":"UsingForDirective","src":"925:27:190","typeName":{"id":40925,"nodeType":"UserDefinedTypeName","pathNode":{"id":40924,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"945:6:190"},"referencedDeclaration":1442,"src":"945:6:190","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}},{"id":40929,"libraryName":{"id":40927,"name":"Address","nodeType":"IdentifierPath","referencedDeclaration":41850,"src":"961:7:190"},"nodeType":"UsingForDirective","src":"955:34:190","typeName":{"id":40928,"name":"address","nodeType":"ElementaryTypeName","src":"973:15:190","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}},{"constant":false,"id":40931,"mutability":"mutable","name":"_fundsAdmin","nameLocation":"1010:11:190","nodeType":"VariableDeclaration","scope":41057,"src":"993:28:190","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40930,"name":"address","nodeType":"ElementaryTypeName","src":"993:7:190","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":true,"functionSelector":"dde43cba","id":40934,"mutability":"constant","name":"REVISION","nameLocation":"1050:8:190","nodeType":"VariableDeclaration","scope":41057,"src":"1026:36:190","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40932,"name":"uint256","nodeType":"ElementaryTypeName","src":"1026:7:190","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":40933,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1061:1:190","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"public"},{"baseFunctions":[41351],"constant":true,"documentation":{"id":40935,"nodeType":"StructuredDocumentation","src":"1067:48:190","text":"@inheritdoc IAdminControlledEcosystemReserve"},"functionSelector":"51ee886b","id":40938,"mutability":"constant","name":"ETH_MOCK_ADDRESS","nameLocation":"1142:16:190","nodeType":"VariableDeclaration","scope":41057,"src":"1118:85:190","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40936,"name":"address","nodeType":"ElementaryTypeName","src":"1118:7:190","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"value":{"hexValue":"307845656565654565656545654565654565456545656545454565656565456565656565656545456545","id":40937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1161:42:190","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"value":"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"},"visibility":"public"},{"body":{"id":40949,"nodeType":"Block","src":"1234:75:190","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":40944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40941,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1248:3:190","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":40942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1248:10:190","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":40943,"name":"_fundsAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40931,"src":"1262:11:190","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1248:25:190","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f4e4c595f42595f46554e44535f41444d494e","id":40945,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1275:21:190","typeDescriptions":{"typeIdentifier":"t_stringliteral_3088d49d45e4841a4a1f6f3b3363c5e7594d9318a96bb26b85336195c6269f1c","typeString":"literal_string \"ONLY_BY_FUNDS_ADMIN\""},"value":"ONLY_BY_FUNDS_ADMIN"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3088d49d45e4841a4a1f6f3b3363c5e7594d9318a96bb26b85336195c6269f1c","typeString":"literal_string \"ONLY_BY_FUNDS_ADMIN\""}],"id":40940,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1240:7:190","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":40946,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1240:57:190","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40947,"nodeType":"ExpressionStatement","src":"1240:57:190"},{"id":40948,"nodeType":"PlaceholderStatement","src":"1303:1:190"}]},"id":40950,"name":"onlyFundsAdmin","nameLocation":"1217:14:190","nodeType":"ModifierDefinition","parameters":{"id":40939,"nodeType":"ParameterList","parameters":[],"src":"1231:2:190"},"src":"1208:101:190","virtual":false,"visibility":"internal"},{"baseFunctions":[42150],"body":{"id":40958,"nodeType":"Block","src":"1377:26:190","statements":[{"expression":{"id":40956,"name":"REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40934,"src":"1390:8:190","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":40955,"id":40957,"nodeType":"Return","src":"1383:15:190"}]},"id":40959,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"1322:11:190","nodeType":"FunctionDefinition","overrides":{"id":40952,"nodeType":"OverrideSpecifier","overrides":[],"src":"1350:8:190"},"parameters":{"id":40951,"nodeType":"ParameterList","parameters":[],"src":"1333:2:190"},"returnParameters":{"id":40955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40954,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40959,"src":"1368:7:190","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40953,"name":"uint256","nodeType":"ElementaryTypeName","src":"1368:7:190","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1367:9:190"},"scope":41057,"src":"1313:90:190","stateMutability":"pure","virtual":false,"visibility":"internal"},{"baseFunctions":[41357],"body":{"id":40967,"nodeType":"Block","src":"1515:29:190","statements":[{"expression":{"id":40965,"name":"_fundsAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40931,"src":"1528:11:190","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":40964,"id":40966,"nodeType":"Return","src":"1521:18:190"}]},"documentation":{"id":40960,"nodeType":"StructuredDocumentation","src":"1407:48:190","text":"@inheritdoc IAdminControlledEcosystemReserve"},"functionSelector":"06bc2ee0","id":40968,"implemented":true,"kind":"function","modifiers":[],"name":"getFundsAdmin","nameLocation":"1467:13:190","nodeType":"FunctionDefinition","parameters":{"id":40961,"nodeType":"ParameterList","parameters":[],"src":"1480:2:190"},"returnParameters":{"id":40964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40963,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40968,"src":"1506:7:190","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40962,"name":"address","nodeType":"ElementaryTypeName","src":"1506:7:190","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1505:9:190"},"scope":41057,"src":"1458:86:190","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[41368],"body":{"id":40988,"nodeType":"Block","src":"1689:47:190","statements":[{"expression":{"arguments":[{"id":40984,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40974,"src":"1713:9:190","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40985,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40976,"src":"1724:6:190","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":40981,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40972,"src":"1695:5:190","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":40983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeApprove","nodeType":"MemberAccess","referencedDeclaration":41993,"src":"1695:17:190","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":40986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1695:36:190","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40987,"nodeType":"ExpressionStatement","src":"1695:36:190"}]},"documentation":{"id":40969,"nodeType":"StructuredDocumentation","src":"1548:48:190","text":"@inheritdoc IAdminControlledEcosystemReserve"},"functionSelector":"e1f21c67","id":40989,"implemented":true,"kind":"function","modifiers":[{"id":40979,"kind":"modifierInvocation","modifierName":{"id":40978,"name":"onlyFundsAdmin","nodeType":"IdentifierPath","referencedDeclaration":40950,"src":"1674:14:190"},"nodeType":"ModifierInvocation","src":"1674:14:190"}],"name":"approve","nameLocation":"1608:7:190","nodeType":"FunctionDefinition","parameters":{"id":40977,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40972,"mutability":"mutable","name":"token","nameLocation":"1623:5:190","nodeType":"VariableDeclaration","scope":40989,"src":"1616:12:190","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":40971,"nodeType":"UserDefinedTypeName","pathNode":{"id":40970,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1616:6:190"},"referencedDeclaration":1442,"src":"1616:6:190","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":40974,"mutability":"mutable","name":"recipient","nameLocation":"1638:9:190","nodeType":"VariableDeclaration","scope":40989,"src":"1630:17:190","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40973,"name":"address","nodeType":"ElementaryTypeName","src":"1630:7:190","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40976,"mutability":"mutable","name":"amount","nameLocation":"1657:6:190","nodeType":"VariableDeclaration","scope":40989,"src":"1649:14:190","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40975,"name":"uint256","nodeType":"ElementaryTypeName","src":"1649:7:190","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1615:49:190"},"returnParameters":{"id":40980,"nodeType":"ParameterList","parameters":[],"src":"1689:0:190"},"scope":41057,"src":"1599:137:190","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[41379],"body":{"id":41036,"nodeType":"Block","src":"1882:222:190","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":41008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":41003,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40995,"src":"1896:9:190","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":41006,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1917:1:190","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":41005,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1909:7:190","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":41004,"name":"address","nodeType":"ElementaryTypeName","src":"1909:7:190","typeDescriptions":{}}},"id":41007,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1909:10:190","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1896:23:190","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"494e56414c49445f30585f524543495049454e54","id":41009,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1921:22:190","typeDescriptions":{"typeIdentifier":"t_stringliteral_ec010e99c751f7cfb062de644310ffc32aeb81087912935b9531c5118ccc5f3d","typeString":"literal_string \"INVALID_0X_RECIPIENT\""},"value":"INVALID_0X_RECIPIENT"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ec010e99c751f7cfb062de644310ffc32aeb81087912935b9531c5118ccc5f3d","typeString":"literal_string \"INVALID_0X_RECIPIENT\""}],"id":41002,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1888:7:190","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41010,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1888:56:190","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41011,"nodeType":"ExpressionStatement","src":"1888:56:190"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":41017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":41014,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40993,"src":"1963:5:190","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}],"id":41013,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1955:7:190","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":41012,"name":"address","nodeType":"ElementaryTypeName","src":"1955:7:190","typeDescriptions":{}}},"id":41015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1955:14:190","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":41016,"name":"ETH_MOCK_ADDRESS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40938,"src":"1973:16:190","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1955:34:190","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":41034,"nodeType":"Block","src":"2048:52:190","statements":[{"expression":{"arguments":[{"id":41030,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40995,"src":"2075:9:190","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41031,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40997,"src":"2086:6:190","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":41027,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40993,"src":"2056:5:190","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":41029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":41923,"src":"2056:18:190","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$1442_$","typeString":"function (contract IERC20,address,uint256)"}},"id":41032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2056:37:190","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41033,"nodeType":"ExpressionStatement","src":"2056:37:190"}]},"id":41035,"nodeType":"IfStatement","src":"1951:149:190","trueBody":{"id":41026,"nodeType":"Block","src":"1991:51:190","statements":[{"expression":{"arguments":[{"id":41023,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40997,"src":"2028:6:190","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":41020,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40995,"src":"2007:9:190","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41019,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1999:8:190","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":41018,"name":"address","nodeType":"ElementaryTypeName","src":"1999:8:190","stateMutability":"payable","typeDescriptions":{}}},"id":41021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1999:18:190","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":41022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sendValue","nodeType":"MemberAccess","referencedDeclaration":41607,"src":"1999:28:190","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$bound_to$_t_address_payable_$","typeString":"function (address payable,uint256)"}},"id":41024,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1999:36:190","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41025,"nodeType":"ExpressionStatement","src":"1999:36:190"}]}}]},"documentation":{"id":40990,"nodeType":"StructuredDocumentation","src":"1740:48:190","text":"@inheritdoc IAdminControlledEcosystemReserve"},"functionSelector":"beabacc8","id":41037,"implemented":true,"kind":"function","modifiers":[{"id":41000,"kind":"modifierInvocation","modifierName":{"id":40999,"name":"onlyFundsAdmin","nodeType":"IdentifierPath","referencedDeclaration":40950,"src":"1867:14:190"},"nodeType":"ModifierInvocation","src":"1867:14:190"}],"name":"transfer","nameLocation":"1800:8:190","nodeType":"FunctionDefinition","parameters":{"id":40998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40993,"mutability":"mutable","name":"token","nameLocation":"1816:5:190","nodeType":"VariableDeclaration","scope":41037,"src":"1809:12:190","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":40992,"nodeType":"UserDefinedTypeName","pathNode":{"id":40991,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1809:6:190"},"referencedDeclaration":1442,"src":"1809:6:190","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":40995,"mutability":"mutable","name":"recipient","nameLocation":"1831:9:190","nodeType":"VariableDeclaration","scope":41037,"src":"1823:17:190","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40994,"name":"address","nodeType":"ElementaryTypeName","src":"1823:7:190","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40997,"mutability":"mutable","name":"amount","nameLocation":"1850:6:190","nodeType":"VariableDeclaration","scope":41037,"src":"1842:14:190","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40996,"name":"uint256","nodeType":"ElementaryTypeName","src":"1842:7:190","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1808:49:190"},"returnParameters":{"id":41001,"nodeType":"ParameterList","parameters":[],"src":"1882:0:190"},"scope":41057,"src":"1791:313:190","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":41041,"nodeType":"Block","src":"2212:2:190","statements":[]},"documentation":{"id":41038,"nodeType":"StructuredDocumentation","src":"2108:74:190","text":"@dev needed in order to receive ETH from the Aave v1 ecosystem reserve"},"id":41042,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":41039,"nodeType":"ParameterList","parameters":[],"src":"2192:2:190"},"returnParameters":{"id":41040,"nodeType":"ParameterList","parameters":[],"src":"2212:0:190"},"scope":41057,"src":"2185:29:190","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":41055,"nodeType":"Block","src":"2266:61:190","statements":[{"expression":{"id":41049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":41047,"name":"_fundsAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40931,"src":"2272:11:190","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":41048,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41044,"src":"2286:5:190","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2272:19:190","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":41050,"nodeType":"ExpressionStatement","src":"2272:19:190"},{"eventCall":{"arguments":[{"id":41052,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41044,"src":"2316:5:190","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41051,"name":"NewFundsAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41345,"src":"2302:13:190","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":41053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2302:20:190","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41054,"nodeType":"EmitStatement","src":"2297:25:190"}]},"id":41056,"implemented":true,"kind":"function","modifiers":[],"name":"_setFundsAdmin","nameLocation":"2227:14:190","nodeType":"FunctionDefinition","parameters":{"id":41045,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41044,"mutability":"mutable","name":"admin","nameLocation":"2250:5:190","nodeType":"VariableDeclaration","scope":41056,"src":"2242:13:190","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41043,"name":"address","nodeType":"ElementaryTypeName","src":"2242:7:190","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2241:15:190"},"returnParameters":{"id":41046,"nodeType":"ParameterList","parameters":[],"src":"2266:0:190"},"scope":41057,"src":"2218:109:190","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":41058,"src":"807:1522:190","usedErrors":[]}],"src":"36:2294:190"},"id":190},"contracts/treasury/Collector.sol":{"ast":{"absolutePath":"contracts/treasury/Collector.sol","exportedSymbols":{"Collector":[41191],"ICollector":[41431],"IERC20":[1442],"VersionedInitializable":[10573]},"id":41192,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":41059,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:191"},{"absolutePath":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol","file":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol","id":41061,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41192,"sourceUnit":10574,"src":"63:129:191","symbolAliases":[{"foreign":{"id":41060,"name":"VersionedInitializable","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:22:191","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","id":41063,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41192,"sourceUnit":1443,"src":"193:94:191","symbolAliases":[{"foreign":{"id":41062,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"201:6:191","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/treasury/interfaces/ICollector.sol","file":"./interfaces/ICollector.sol","id":41065,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41192,"sourceUnit":41432,"src":"288:55:191","symbolAliases":[{"foreign":{"id":41064,"name":"ICollector","nodeType":"Identifier","overloadedDeclarations":[],"src":"296:10:191","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":41067,"name":"VersionedInitializable","nodeType":"IdentifierPath","referencedDeclaration":10573,"src":"651:22:191"},"id":41068,"nodeType":"InheritanceSpecifier","src":"651:22:191"},{"baseName":{"id":41069,"name":"ICollector","nodeType":"IdentifierPath","referencedDeclaration":41431,"src":"675:10:191"},"id":41070,"nodeType":"InheritanceSpecifier","src":"675:10:191"}],"canonicalName":"Collector","contractDependencies":[],"contractKind":"contract","documentation":{"id":41066,"nodeType":"StructuredDocumentation","src":"345:283:191","text":" @title Collector\n @notice Stores the fees collected by the protocol and allows the fund administrator\n         to approve or transfer the collected ERC20 tokens.\n @dev Implementation contract that must be initialized using transparent proxy pattern.\n @author Aave*"},"fullyImplemented":true,"id":41191,"linearizedBaseContracts":[41191,41431,10573],"name":"Collector","nameLocation":"638:9:191","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":41072,"mutability":"mutable","name":"_fundsAdmin","nameLocation":"758:11:191","nodeType":"VariableDeclaration","scope":41191,"src":"741:28:191","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41071,"name":"address","nodeType":"ElementaryTypeName","src":"741:7:191","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"baseFunctions":[41396],"constant":true,"functionSelector":"dde43cba","id":41075,"mutability":"constant","name":"REVISION","nameLocation":"852:8:191","nodeType":"VariableDeclaration","scope":41191,"src":"828:36:191","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41073,"name":"uint256","nodeType":"ElementaryTypeName","src":"828:7:191","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":41074,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"863:1:191","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"public"},{"body":{"id":41087,"nodeType":"Block","src":"1002:75:191","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":41082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41079,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1016:3:191","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":41080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"1016:10:191","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":41081,"name":"_fundsAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41072,"src":"1030:11:191","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1016:25:191","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f4e4c595f42595f46554e44535f41444d494e","id":41083,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1043:21:191","typeDescriptions":{"typeIdentifier":"t_stringliteral_3088d49d45e4841a4a1f6f3b3363c5e7594d9318a96bb26b85336195c6269f1c","typeString":"literal_string \"ONLY_BY_FUNDS_ADMIN\""},"value":"ONLY_BY_FUNDS_ADMIN"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_3088d49d45e4841a4a1f6f3b3363c5e7594d9318a96bb26b85336195c6269f1c","typeString":"literal_string \"ONLY_BY_FUNDS_ADMIN\""}],"id":41078,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1008:7:191","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1008:57:191","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41085,"nodeType":"ExpressionStatement","src":"1008:57:191"},{"id":41086,"nodeType":"PlaceholderStatement","src":"1071:1:191"}]},"documentation":{"id":41076,"nodeType":"StructuredDocumentation","src":"869:104:191","text":" @dev Allow only the funds administrator address to call functions marked by this modifier"},"id":41088,"name":"onlyFundsAdmin","nameLocation":"985:14:191","nodeType":"ModifierDefinition","parameters":{"id":41077,"nodeType":"ParameterList","parameters":[],"src":"999:2:191"},"src":"976:101:191","virtual":false,"visibility":"internal"},{"body":{"id":41100,"nodeType":"Block","src":"1315:44:191","statements":[{"expression":{"arguments":[{"id":41097,"name":"reserveController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41091,"src":"1336:17:191","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41096,"name":"_setFundsAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41190,"src":"1321:14:191","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":41098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1321:33:191","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41099,"nodeType":"ExpressionStatement","src":"1321:33:191"}]},"documentation":{"id":41089,"nodeType":"StructuredDocumentation","src":"1081:163:191","text":" @dev Initialize the transparent proxy with the admin of the Collector\n @param reserveController The address of the admin that controls Collector"},"functionSelector":"c4d66de8","id":41101,"implemented":true,"kind":"function","modifiers":[{"id":41094,"kind":"modifierInvocation","modifierName":{"id":41093,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":10547,"src":"1303:11:191"},"nodeType":"ModifierInvocation","src":"1303:11:191"}],"name":"initialize","nameLocation":"1256:10:191","nodeType":"FunctionDefinition","parameters":{"id":41092,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41091,"mutability":"mutable","name":"reserveController","nameLocation":"1275:17:191","nodeType":"VariableDeclaration","scope":41101,"src":"1267:25:191","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41090,"name":"address","nodeType":"ElementaryTypeName","src":"1267:7:191","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1266:27:191"},"returnParameters":{"id":41095,"nodeType":"ParameterList","parameters":[],"src":"1315:0:191"},"scope":41191,"src":"1247:112:191","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[10553],"body":{"id":41110,"nodeType":"Block","src":"1468:26:191","statements":[{"expression":{"id":41108,"name":"REVISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41075,"src":"1481:8:191","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":41107,"id":41109,"nodeType":"Return","src":"1474:15:191"}]},"documentation":{"id":41102,"nodeType":"StructuredDocumentation","src":"1363:38:191","text":"@inheritdoc VersionedInitializable"},"id":41111,"implemented":true,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"1413:11:191","nodeType":"FunctionDefinition","overrides":{"id":41104,"nodeType":"OverrideSpecifier","overrides":[],"src":"1441:8:191"},"parameters":{"id":41103,"nodeType":"ParameterList","parameters":[],"src":"1424:2:191"},"returnParameters":{"id":41107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41106,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41111,"src":"1459:7:191","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41105,"name":"uint256","nodeType":"ElementaryTypeName","src":"1459:7:191","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1458:9:191"},"scope":41191,"src":"1404:90:191","stateMutability":"pure","virtual":false,"visibility":"internal"},{"baseFunctions":[41402],"body":{"id":41119,"nodeType":"Block","src":"1584:29:191","statements":[{"expression":{"id":41117,"name":"_fundsAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41072,"src":"1597:11:191","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":41116,"id":41118,"nodeType":"Return","src":"1590:18:191"}]},"documentation":{"id":41112,"nodeType":"StructuredDocumentation","src":"1498:26:191","text":"@inheritdoc ICollector"},"functionSelector":"06bc2ee0","id":41120,"implemented":true,"kind":"function","modifiers":[],"name":"getFundsAdmin","nameLocation":"1536:13:191","nodeType":"FunctionDefinition","parameters":{"id":41113,"nodeType":"ParameterList","parameters":[],"src":"1549:2:191"},"returnParameters":{"id":41116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41115,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41120,"src":"1575:7:191","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41114,"name":"address","nodeType":"ElementaryTypeName","src":"1575:7:191","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1574:9:191"},"scope":41191,"src":"1527:86:191","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[41413],"body":{"id":41140,"nodeType":"Block","src":"1736:43:191","statements":[{"expression":{"arguments":[{"id":41136,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41126,"src":"1756:9:191","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41137,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41128,"src":"1767:6:191","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":41133,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41124,"src":"1742:5:191","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":41135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1411,"src":"1742:13:191","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":41138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1742:32:191","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":41139,"nodeType":"ExpressionStatement","src":"1742:32:191"}]},"documentation":{"id":41121,"nodeType":"StructuredDocumentation","src":"1617:26:191","text":"@inheritdoc ICollector"},"functionSelector":"e1f21c67","id":41141,"implemented":true,"kind":"function","modifiers":[{"id":41131,"kind":"modifierInvocation","modifierName":{"id":41130,"name":"onlyFundsAdmin","nodeType":"IdentifierPath","referencedDeclaration":41088,"src":"1721:14:191"},"nodeType":"ModifierInvocation","src":"1721:14:191"}],"name":"approve","nameLocation":"1655:7:191","nodeType":"FunctionDefinition","parameters":{"id":41129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41124,"mutability":"mutable","name":"token","nameLocation":"1670:5:191","nodeType":"VariableDeclaration","scope":41141,"src":"1663:12:191","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":41123,"nodeType":"UserDefinedTypeName","pathNode":{"id":41122,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1663:6:191"},"referencedDeclaration":1442,"src":"1663:6:191","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":41126,"mutability":"mutable","name":"recipient","nameLocation":"1685:9:191","nodeType":"VariableDeclaration","scope":41141,"src":"1677:17:191","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41125,"name":"address","nodeType":"ElementaryTypeName","src":"1677:7:191","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41128,"mutability":"mutable","name":"amount","nameLocation":"1704:6:191","nodeType":"VariableDeclaration","scope":41141,"src":"1696:14:191","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41127,"name":"uint256","nodeType":"ElementaryTypeName","src":"1696:7:191","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1662:49:191"},"returnParameters":{"id":41132,"nodeType":"ParameterList","parameters":[],"src":"1736:0:191"},"scope":41191,"src":"1646:133:191","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[41424],"body":{"id":41161,"nodeType":"Block","src":"1903:44:191","statements":[{"expression":{"arguments":[{"id":41157,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41147,"src":"1924:9:191","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41158,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41149,"src":"1935:6:191","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":41154,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41145,"src":"1909:5:191","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":41156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":1391,"src":"1909:14:191","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":41159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1909:33:191","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":41160,"nodeType":"ExpressionStatement","src":"1909:33:191"}]},"documentation":{"id":41142,"nodeType":"StructuredDocumentation","src":"1783:26:191","text":"@inheritdoc ICollector"},"functionSelector":"beabacc8","id":41162,"implemented":true,"kind":"function","modifiers":[{"id":41152,"kind":"modifierInvocation","modifierName":{"id":41151,"name":"onlyFundsAdmin","nodeType":"IdentifierPath","referencedDeclaration":41088,"src":"1888:14:191"},"nodeType":"ModifierInvocation","src":"1888:14:191"}],"name":"transfer","nameLocation":"1821:8:191","nodeType":"FunctionDefinition","parameters":{"id":41150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41145,"mutability":"mutable","name":"token","nameLocation":"1837:5:191","nodeType":"VariableDeclaration","scope":41162,"src":"1830:12:191","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":41144,"nodeType":"UserDefinedTypeName","pathNode":{"id":41143,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1830:6:191"},"referencedDeclaration":1442,"src":"1830:6:191","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":41147,"mutability":"mutable","name":"recipient","nameLocation":"1852:9:191","nodeType":"VariableDeclaration","scope":41162,"src":"1844:17:191","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41146,"name":"address","nodeType":"ElementaryTypeName","src":"1844:7:191","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41149,"mutability":"mutable","name":"amount","nameLocation":"1871:6:191","nodeType":"VariableDeclaration","scope":41162,"src":"1863:14:191","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41148,"name":"uint256","nodeType":"ElementaryTypeName","src":"1863:7:191","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1829:49:191"},"returnParameters":{"id":41153,"nodeType":"ParameterList","parameters":[],"src":"1903:0:191"},"scope":41191,"src":"1812:135:191","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[41430],"body":{"id":41174,"nodeType":"Block","src":"2042:32:191","statements":[{"expression":{"arguments":[{"id":41171,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41165,"src":"2063:5:191","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41170,"name":"_setFundsAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41190,"src":"2048:14:191","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":41172,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2048:21:191","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41173,"nodeType":"ExpressionStatement","src":"2048:21:191"}]},"documentation":{"id":41163,"nodeType":"StructuredDocumentation","src":"1951:26:191","text":"@inheritdoc ICollector"},"functionSelector":"ed0d2371","id":41175,"implemented":true,"kind":"function","modifiers":[{"id":41168,"kind":"modifierInvocation","modifierName":{"id":41167,"name":"onlyFundsAdmin","nodeType":"IdentifierPath","referencedDeclaration":41088,"src":"2027:14:191"},"nodeType":"ModifierInvocation","src":"2027:14:191"}],"name":"setFundsAdmin","nameLocation":"1989:13:191","nodeType":"FunctionDefinition","parameters":{"id":41166,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41165,"mutability":"mutable","name":"admin","nameLocation":"2011:5:191","nodeType":"VariableDeclaration","scope":41175,"src":"2003:13:191","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41164,"name":"address","nodeType":"ElementaryTypeName","src":"2003:7:191","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2002:15:191"},"returnParameters":{"id":41169,"nodeType":"ParameterList","parameters":[],"src":"2042:0:191"},"scope":41191,"src":"1980:94:191","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":41189,"nodeType":"Block","src":"2265:61:191","statements":[{"expression":{"id":41183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":41181,"name":"_fundsAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41072,"src":"2271:11:191","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":41182,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41178,"src":"2285:5:191","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2271:19:191","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":41184,"nodeType":"ExpressionStatement","src":"2271:19:191"},{"eventCall":{"arguments":[{"id":41186,"name":"admin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41178,"src":"2315:5:191","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41185,"name":"NewFundsAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41390,"src":"2301:13:191","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":41187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2301:20:191","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41188,"nodeType":"EmitStatement","src":"2296:25:191"}]},"documentation":{"id":41176,"nodeType":"StructuredDocumentation","src":"2078:136:191","text":" @dev Transfer the ownership of the funds administrator role.\n @param admin The address of the new funds administrator"},"id":41190,"implemented":true,"kind":"function","modifiers":[],"name":"_setFundsAdmin","nameLocation":"2226:14:191","nodeType":"FunctionDefinition","parameters":{"id":41179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41178,"mutability":"mutable","name":"admin","nameLocation":"2249:5:191","nodeType":"VariableDeclaration","scope":41190,"src":"2241:13:191","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41177,"name":"address","nodeType":"ElementaryTypeName","src":"2241:7:191","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2240:15:191"},"returnParameters":{"id":41180,"nodeType":"ParameterList","parameters":[],"src":"2265:0:191"},"scope":41191,"src":"2217:109:191","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":41192,"src":"629:1699:191","usedErrors":[]}],"src":"37:2292:191"},"id":191},"contracts/treasury/CollectorController.sol":{"ast":{"absolutePath":"contracts/treasury/CollectorController.sol","exportedSymbols":{"CollectorController":[41264],"ICollector":[41431],"IERC20":[1442],"Ownable":[1573]},"id":41265,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":41193,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:192"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol","id":41195,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41265,"sourceUnit":1574,"src":"63:96:192","symbolAliases":[{"foreign":{"id":41194,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:7:192","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","id":41197,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41265,"sourceUnit":1443,"src":"160:94:192","symbolAliases":[{"foreign":{"id":41196,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"168:6:192","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/treasury/interfaces/ICollector.sol","file":"./interfaces/ICollector.sol","id":41199,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41265,"sourceUnit":41432,"src":"255:55:192","symbolAliases":[{"foreign":{"id":41198,"name":"ICollector","nodeType":"Identifier","overloadedDeclarations":[],"src":"263:10:192","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":41201,"name":"Ownable","nodeType":"IdentifierPath","referencedDeclaration":1573,"src":"722:7:192"},"id":41202,"nodeType":"InheritanceSpecifier","src":"722:7:192"}],"canonicalName":"CollectorController","contractDependencies":[],"contractKind":"contract","documentation":{"id":41200,"nodeType":"StructuredDocumentation","src":"312:377:192","text":" @title CollectorController\n @notice The CollectorController contracts allows the owner of the contract\nto approve or transfer tokens from the specified collector proxy contract.\nThe admin of the Collector proxy can't be the same as the fundsAdmin address.\nThis is needed due the usage of transparent proxy pattern.\n @author Aave*"},"fullyImplemented":true,"id":41264,"linearizedBaseContracts":[41264,1573,748],"name":"CollectorController","nameLocation":"699:19:192","nodeType":"ContractDefinition","nodes":[{"body":{"id":41212,"nodeType":"Block","src":"902:35:192","statements":[{"expression":{"arguments":[{"id":41209,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41205,"src":"926:5:192","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41208,"name":"transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1572,"src":"908:17:192","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":41210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"908:24:192","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41211,"nodeType":"ExpressionStatement","src":"908:24:192"}]},"documentation":{"id":41203,"nodeType":"StructuredDocumentation","src":"734:138:192","text":" @dev Constructor setups the ownership of the contract\n @param owner The address of the owner of the CollectorController"},"id":41213,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":41206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41205,"mutability":"mutable","name":"owner","nameLocation":"895:5:192","nodeType":"VariableDeclaration","scope":41213,"src":"887:13:192","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41204,"name":"address","nodeType":"ElementaryTypeName","src":"887:7:192","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"886:15:192"},"returnParameters":{"id":41207,"nodeType":"ParameterList","parameters":[],"src":"902:0:192"},"scope":41264,"src":"875:62:192","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":41237,"nodeType":"Block","src":"1358:66:192","statements":[{"expression":{"arguments":[{"id":41232,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41219,"src":"1394:5:192","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},{"id":41233,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41221,"src":"1401:9:192","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41234,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41223,"src":"1412:6:192","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":41229,"name":"collector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41216,"src":"1375:9:192","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41228,"name":"ICollector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41431,"src":"1364:10:192","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICollector_$41431_$","typeString":"type(contract ICollector)"}},"id":41230,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1364:21:192","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ICollector_$41431","typeString":"contract ICollector"}},"id":41231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":41413,"src":"1364:29:192","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":41235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1364:55:192","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41236,"nodeType":"ExpressionStatement","src":"1364:55:192"}]},"documentation":{"id":41214,"nodeType":"StructuredDocumentation","src":"941:290:192","text":" @dev Transfer an amount of tokens to the recipient.\n @param collector The address of the collector contract\n @param token The address of the asset\n @param recipient The address of the entity to transfer the tokens.\n @param amount The amount to be transferred."},"functionSelector":"59eba454","id":41238,"implemented":true,"kind":"function","modifiers":[{"id":41226,"kind":"modifierInvocation","modifierName":{"id":41225,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"1348:9:192"},"nodeType":"ModifierInvocation","src":"1348:9:192"}],"name":"approve","nameLocation":"1243:7:192","nodeType":"FunctionDefinition","parameters":{"id":41224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41216,"mutability":"mutable","name":"collector","nameLocation":"1264:9:192","nodeType":"VariableDeclaration","scope":41238,"src":"1256:17:192","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41215,"name":"address","nodeType":"ElementaryTypeName","src":"1256:7:192","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41219,"mutability":"mutable","name":"token","nameLocation":"1286:5:192","nodeType":"VariableDeclaration","scope":41238,"src":"1279:12:192","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":41218,"nodeType":"UserDefinedTypeName","pathNode":{"id":41217,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1279:6:192"},"referencedDeclaration":1442,"src":"1279:6:192","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":41221,"mutability":"mutable","name":"recipient","nameLocation":"1305:9:192","nodeType":"VariableDeclaration","scope":41238,"src":"1297:17:192","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41220,"name":"address","nodeType":"ElementaryTypeName","src":"1297:7:192","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41223,"mutability":"mutable","name":"amount","nameLocation":"1328:6:192","nodeType":"VariableDeclaration","scope":41238,"src":"1320:14:192","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41222,"name":"uint256","nodeType":"ElementaryTypeName","src":"1320:7:192","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1250:88:192"},"returnParameters":{"id":41227,"nodeType":"ParameterList","parameters":[],"src":"1358:0:192"},"scope":41264,"src":"1234:190:192","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":41262,"nodeType":"Block","src":"1899:67:192","statements":[{"expression":{"arguments":[{"id":41257,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41244,"src":"1936:5:192","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},{"id":41258,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41246,"src":"1943:9:192","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41259,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41248,"src":"1954:6:192","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":41254,"name":"collector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41241,"src":"1916:9:192","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41253,"name":"ICollector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41431,"src":"1905:10:192","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICollector_$41431_$","typeString":"type(contract ICollector)"}},"id":41255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1905:21:192","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ICollector_$41431","typeString":"contract ICollector"}},"id":41256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":41424,"src":"1905:30:192","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$1442_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":41260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1905:56:192","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41261,"nodeType":"ExpressionStatement","src":"1905:56:192"}]},"documentation":{"id":41239,"nodeType":"StructuredDocumentation","src":"1428:343:192","text":" @dev Transfer an amount of tokens to the recipient.\n @param collector The address of the collector contract to retrieve funds from (e.g. Aave ecosystem reserve)\n @param token The address of the asset\n @param recipient The address of the entity to transfer the tokens.\n @param amount The amount to be transferred."},"functionSelector":"f18d03cc","id":41263,"implemented":true,"kind":"function","modifiers":[{"id":41251,"kind":"modifierInvocation","modifierName":{"id":41250,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":1522,"src":"1889:9:192"},"nodeType":"ModifierInvocation","src":"1889:9:192"}],"name":"transfer","nameLocation":"1783:8:192","nodeType":"FunctionDefinition","parameters":{"id":41249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41241,"mutability":"mutable","name":"collector","nameLocation":"1805:9:192","nodeType":"VariableDeclaration","scope":41263,"src":"1797:17:192","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41240,"name":"address","nodeType":"ElementaryTypeName","src":"1797:7:192","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41244,"mutability":"mutable","name":"token","nameLocation":"1827:5:192","nodeType":"VariableDeclaration","scope":41263,"src":"1820:12:192","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":41243,"nodeType":"UserDefinedTypeName","pathNode":{"id":41242,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1820:6:192"},"referencedDeclaration":1442,"src":"1820:6:192","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":41246,"mutability":"mutable","name":"recipient","nameLocation":"1846:9:192","nodeType":"VariableDeclaration","scope":41263,"src":"1838:17:192","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41245,"name":"address","nodeType":"ElementaryTypeName","src":"1838:7:192","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41248,"mutability":"mutable","name":"amount","nameLocation":"1869:6:192","nodeType":"VariableDeclaration","scope":41263,"src":"1861:14:192","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41247,"name":"uint256","nodeType":"ElementaryTypeName","src":"1861:7:192","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1791:88:192"},"returnParameters":{"id":41252,"nodeType":"ParameterList","parameters":[],"src":"1899:0:192"},"scope":41264,"src":"1774:192:192","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":41265,"src":"690:1278:192","usedErrors":[]}],"src":"37:1932:192"},"id":192},"contracts/treasury/interfaces/IAaveEcosystemReserveController.sol":{"ast":{"absolutePath":"contracts/treasury/interfaces/IAaveEcosystemReserveController.sol","exportedSymbols":{"IAaveEcosystemReserveController":[41336],"IERC20":[1442]},"id":41337,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":41266,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"32:24:193"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","id":41268,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41337,"sourceUnit":1443,"src":"58:94:193","symbolAliases":[{"foreign":{"id":41267,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"66:6:193","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IAaveEcosystemReserveController","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":41336,"linearizedBaseContracts":[41336],"name":"IAaveEcosystemReserveController","nameLocation":"164:31:193","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":41269,"nodeType":"StructuredDocumentation","src":"200:304:193","text":" @notice Proxy function for ERC20's approve(), pointing to a specific collector contract\n @param collector The collector contract with funds (Aave ecosystem reserve)\n @param token The asset address\n @param recipient Allowance's recipient\n @param amount Allowance to approve*"},"functionSelector":"59eba454","id":41281,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"516:7:193","nodeType":"FunctionDefinition","parameters":{"id":41279,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41271,"mutability":"mutable","name":"collector","nameLocation":"532:9:193","nodeType":"VariableDeclaration","scope":41281,"src":"524:17:193","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41270,"name":"address","nodeType":"ElementaryTypeName","src":"524:7:193","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41274,"mutability":"mutable","name":"token","nameLocation":"550:5:193","nodeType":"VariableDeclaration","scope":41281,"src":"543:12:193","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":41273,"nodeType":"UserDefinedTypeName","pathNode":{"id":41272,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"543:6:193"},"referencedDeclaration":1442,"src":"543:6:193","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":41276,"mutability":"mutable","name":"recipient","nameLocation":"565:9:193","nodeType":"VariableDeclaration","scope":41281,"src":"557:17:193","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41275,"name":"address","nodeType":"ElementaryTypeName","src":"557:7:193","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41278,"mutability":"mutable","name":"amount","nameLocation":"584:6:193","nodeType":"VariableDeclaration","scope":41281,"src":"576:14:193","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41277,"name":"uint256","nodeType":"ElementaryTypeName","src":"576:7:193","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"523:68:193"},"returnParameters":{"id":41280,"nodeType":"ParameterList","parameters":[],"src":"600:0:193"},"scope":41336,"src":"507:94:193","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":41282,"nodeType":"StructuredDocumentation","src":"605:302:193","text":" @notice Proxy function for ERC20's transfer(), pointing to a specific collector contract\n @param collector The collector contract with funds (Aave ecosystem reserve)\n @param token The asset address\n @param recipient Transfer's recipient\n @param amount Amount to transfer*"},"functionSelector":"f18d03cc","id":41294,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"919:8:193","nodeType":"FunctionDefinition","parameters":{"id":41292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41284,"mutability":"mutable","name":"collector","nameLocation":"936:9:193","nodeType":"VariableDeclaration","scope":41294,"src":"928:17:193","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41283,"name":"address","nodeType":"ElementaryTypeName","src":"928:7:193","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41287,"mutability":"mutable","name":"token","nameLocation":"954:5:193","nodeType":"VariableDeclaration","scope":41294,"src":"947:12:193","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":41286,"nodeType":"UserDefinedTypeName","pathNode":{"id":41285,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"947:6:193"},"referencedDeclaration":1442,"src":"947:6:193","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":41289,"mutability":"mutable","name":"recipient","nameLocation":"969:9:193","nodeType":"VariableDeclaration","scope":41294,"src":"961:17:193","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41288,"name":"address","nodeType":"ElementaryTypeName","src":"961:7:193","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41291,"mutability":"mutable","name":"amount","nameLocation":"988:6:193","nodeType":"VariableDeclaration","scope":41294,"src":"980:14:193","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41290,"name":"uint256","nodeType":"ElementaryTypeName","src":"980:7:193","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"927:68:193"},"returnParameters":{"id":41293,"nodeType":"ParameterList","parameters":[],"src":"1004:0:193"},"scope":41336,"src":"910:95:193","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":41295,"nodeType":"StructuredDocumentation","src":"1009:531:193","text":" @notice Proxy function to create a stream of token on a specific collector contract\n @param collector The collector contract with funds (Aave ecosystem reserve)\n @param recipient The recipient of the stream of token\n @param deposit Total amount to be streamed\n @param tokenAddress The ERC20 token to use as streaming asset\n @param startTime The unix timestamp for when the stream starts\n @param stopTime The unix timestamp for when the stream stops\n @return uint256 The stream id created*"},"functionSelector":"fd59e134","id":41313,"implemented":false,"kind":"function","modifiers":[],"name":"createStream","nameLocation":"1552:12:193","nodeType":"FunctionDefinition","parameters":{"id":41309,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41297,"mutability":"mutable","name":"collector","nameLocation":"1578:9:193","nodeType":"VariableDeclaration","scope":41313,"src":"1570:17:193","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41296,"name":"address","nodeType":"ElementaryTypeName","src":"1570:7:193","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41299,"mutability":"mutable","name":"recipient","nameLocation":"1601:9:193","nodeType":"VariableDeclaration","scope":41313,"src":"1593:17:193","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41298,"name":"address","nodeType":"ElementaryTypeName","src":"1593:7:193","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41301,"mutability":"mutable","name":"deposit","nameLocation":"1624:7:193","nodeType":"VariableDeclaration","scope":41313,"src":"1616:15:193","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41300,"name":"uint256","nodeType":"ElementaryTypeName","src":"1616:7:193","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41304,"mutability":"mutable","name":"tokenAddress","nameLocation":"1644:12:193","nodeType":"VariableDeclaration","scope":41313,"src":"1637:19:193","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":41303,"nodeType":"UserDefinedTypeName","pathNode":{"id":41302,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1637:6:193"},"referencedDeclaration":1442,"src":"1637:6:193","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":41306,"mutability":"mutable","name":"startTime","nameLocation":"1670:9:193","nodeType":"VariableDeclaration","scope":41313,"src":"1662:17:193","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41305,"name":"uint256","nodeType":"ElementaryTypeName","src":"1662:7:193","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41308,"mutability":"mutable","name":"stopTime","nameLocation":"1693:8:193","nodeType":"VariableDeclaration","scope":41313,"src":"1685:16:193","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41307,"name":"uint256","nodeType":"ElementaryTypeName","src":"1685:7:193","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1564:141:193"},"returnParameters":{"id":41312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41311,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41313,"src":"1724:7:193","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41310,"name":"uint256","nodeType":"ElementaryTypeName","src":"1724:7:193","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1723:9:193"},"scope":41336,"src":"1543:190:193","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":41314,"nodeType":"StructuredDocumentation","src":"1737:344:193","text":" @notice Proxy function to withdraw from a stream of token on a specific collector contract\n @param collector The collector contract with funds (Aave ecosystem reserve)\n @param streamId The id of the stream to withdraw tokens from\n @param funds Amount to withdraw\n @return bool If the withdrawal finished properly*"},"functionSelector":"2f436bfa","id":41325,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawFromStream","nameLocation":"2093:18:193","nodeType":"FunctionDefinition","parameters":{"id":41321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41316,"mutability":"mutable","name":"collector","nameLocation":"2125:9:193","nodeType":"VariableDeclaration","scope":41325,"src":"2117:17:193","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41315,"name":"address","nodeType":"ElementaryTypeName","src":"2117:7:193","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41318,"mutability":"mutable","name":"streamId","nameLocation":"2148:8:193","nodeType":"VariableDeclaration","scope":41325,"src":"2140:16:193","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41317,"name":"uint256","nodeType":"ElementaryTypeName","src":"2140:7:193","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41320,"mutability":"mutable","name":"funds","nameLocation":"2170:5:193","nodeType":"VariableDeclaration","scope":41325,"src":"2162:13:193","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41319,"name":"uint256","nodeType":"ElementaryTypeName","src":"2162:7:193","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2111:68:193"},"returnParameters":{"id":41324,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41323,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41325,"src":"2198:4:193","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":41322,"name":"bool","nodeType":"ElementaryTypeName","src":"2198:4:193","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2197:6:193"},"scope":41336,"src":"2084:120:193","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":41326,"nodeType":"StructuredDocumentation","src":"2208:289:193","text":" @notice Proxy function to cancel a stream of token on a specific collector contract\n @param collector The collector contract with funds (Aave ecosystem reserve)\n @param streamId The id of the stream to cancel\n @return bool If the cancellation happened correctly*"},"functionSelector":"7dc14a8e","id":41335,"implemented":false,"kind":"function","modifiers":[],"name":"cancelStream","nameLocation":"2509:12:193","nodeType":"FunctionDefinition","parameters":{"id":41331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41328,"mutability":"mutable","name":"collector","nameLocation":"2530:9:193","nodeType":"VariableDeclaration","scope":41335,"src":"2522:17:193","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41327,"name":"address","nodeType":"ElementaryTypeName","src":"2522:7:193","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41330,"mutability":"mutable","name":"streamId","nameLocation":"2549:8:193","nodeType":"VariableDeclaration","scope":41335,"src":"2541:16:193","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41329,"name":"uint256","nodeType":"ElementaryTypeName","src":"2541:7:193","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2521:37:193"},"returnParameters":{"id":41334,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41333,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41335,"src":"2577:4:193","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":41332,"name":"bool","nodeType":"ElementaryTypeName","src":"2577:4:193","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2576:6:193"},"scope":41336,"src":"2500:83:193","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":41337,"src":"154:2431:193","usedErrors":[]}],"src":"32:2554:193"},"id":193},"contracts/treasury/interfaces/IAdminControlledEcosystemReserve.sol":{"ast":{"absolutePath":"contracts/treasury/interfaces/IAdminControlledEcosystemReserve.sol","exportedSymbols":{"IAdminControlledEcosystemReserve":[41380],"IERC20":[1442]},"id":41381,"license":"GPL-3.0","nodeType":"SourceUnit","nodes":[{"id":41338,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"36:24:194"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","id":41340,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41381,"sourceUnit":1443,"src":"62:94:194","symbolAliases":[{"foreign":{"id":41339,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"70:6:194","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IAdminControlledEcosystemReserve","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":41380,"linearizedBaseContracts":[41380],"name":"IAdminControlledEcosystemReserve","nameLocation":"168:32:194","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":41341,"nodeType":"StructuredDocumentation","src":"205:98:194","text":"@notice Emitted when the funds admin changes\n @param fundsAdmin The new funds admin*"},"id":41345,"name":"NewFundsAdmin","nameLocation":"312:13:194","nodeType":"EventDefinition","parameters":{"id":41344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41343,"indexed":true,"mutability":"mutable","name":"fundsAdmin","nameLocation":"342:10:194","nodeType":"VariableDeclaration","scope":41345,"src":"326:26:194","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41342,"name":"address","nodeType":"ElementaryTypeName","src":"326:7:194","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"325:28:194"},"src":"306:48:194"},{"documentation":{"id":41346,"nodeType":"StructuredDocumentation","src":"358:90:194","text":"@notice Returns the mock ETH reference address\n @return address The address*"},"functionSelector":"51ee886b","id":41351,"implemented":false,"kind":"function","modifiers":[],"name":"ETH_MOCK_ADDRESS","nameLocation":"460:16:194","nodeType":"FunctionDefinition","parameters":{"id":41347,"nodeType":"ParameterList","parameters":[],"src":"476:2:194"},"returnParameters":{"id":41350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41349,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41351,"src":"502:7:194","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41348,"name":"address","nodeType":"ElementaryTypeName","src":"502:7:194","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"501:9:194"},"scope":41380,"src":"451:60:194","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":41352,"nodeType":"StructuredDocumentation","src":"515:177:194","text":" @notice Return the funds admin, only entity to be able to interact with this contract (controller of reserve)\n @return address The address of the funds admin*"},"functionSelector":"06bc2ee0","id":41357,"implemented":false,"kind":"function","modifiers":[],"name":"getFundsAdmin","nameLocation":"704:13:194","nodeType":"FunctionDefinition","parameters":{"id":41353,"nodeType":"ParameterList","parameters":[],"src":"717:2:194"},"returnParameters":{"id":41356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41355,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41357,"src":"743:7:194","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41354,"name":"address","nodeType":"ElementaryTypeName","src":"743:7:194","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"742:9:194"},"scope":41380,"src":"695:57:194","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":41358,"nodeType":"StructuredDocumentation","src":"756:240:194","text":" @dev Function for the funds admin to give ERC20 allowance to other parties\n @param token The address of the token to give allowance from\n @param recipient Allowance's recipient\n @param amount Allowance to approve*"},"functionSelector":"e1f21c67","id":41368,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"1008:7:194","nodeType":"FunctionDefinition","parameters":{"id":41366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41361,"mutability":"mutable","name":"token","nameLocation":"1023:5:194","nodeType":"VariableDeclaration","scope":41368,"src":"1016:12:194","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":41360,"nodeType":"UserDefinedTypeName","pathNode":{"id":41359,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1016:6:194"},"referencedDeclaration":1442,"src":"1016:6:194","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":41363,"mutability":"mutable","name":"recipient","nameLocation":"1038:9:194","nodeType":"VariableDeclaration","scope":41368,"src":"1030:17:194","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41362,"name":"address","nodeType":"ElementaryTypeName","src":"1030:7:194","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41365,"mutability":"mutable","name":"amount","nameLocation":"1057:6:194","nodeType":"VariableDeclaration","scope":41368,"src":"1049:14:194","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41364,"name":"uint256","nodeType":"ElementaryTypeName","src":"1049:7:194","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1015:49:194"},"returnParameters":{"id":41367,"nodeType":"ParameterList","parameters":[],"src":"1073:0:194"},"scope":41380,"src":"999:75:194","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":41369,"nodeType":"StructuredDocumentation","src":"1078:230:194","text":" @notice Function for the funds admin to transfer ERC20 tokens to other parties\n @param token The address of the token to transfer\n @param recipient Transfer's recipient\n @param amount Amount to transfer*"},"functionSelector":"beabacc8","id":41379,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1320:8:194","nodeType":"FunctionDefinition","parameters":{"id":41377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41372,"mutability":"mutable","name":"token","nameLocation":"1336:5:194","nodeType":"VariableDeclaration","scope":41379,"src":"1329:12:194","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":41371,"nodeType":"UserDefinedTypeName","pathNode":{"id":41370,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1329:6:194"},"referencedDeclaration":1442,"src":"1329:6:194","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":41374,"mutability":"mutable","name":"recipient","nameLocation":"1351:9:194","nodeType":"VariableDeclaration","scope":41379,"src":"1343:17:194","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41373,"name":"address","nodeType":"ElementaryTypeName","src":"1343:7:194","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41376,"mutability":"mutable","name":"amount","nameLocation":"1370:6:194","nodeType":"VariableDeclaration","scope":41379,"src":"1362:14:194","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41375,"name":"uint256","nodeType":"ElementaryTypeName","src":"1362:7:194","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1328:49:194"},"returnParameters":{"id":41378,"nodeType":"ParameterList","parameters":[],"src":"1386:0:194"},"scope":41380,"src":"1311:76:194","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":41381,"src":"158:1231:194","usedErrors":[]}],"src":"36:1354:194"},"id":194},"contracts/treasury/interfaces/ICollector.sol":{"ast":{"absolutePath":"contracts/treasury/interfaces/ICollector.sol","exportedSymbols":{"ICollector":[41431],"IERC20":[1442]},"id":41432,"license":"AGPL-3.0","nodeType":"SourceUnit","nodes":[{"id":41382,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"37:24:195"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","id":41384,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41432,"sourceUnit":1443,"src":"63:94:195","symbolAliases":[{"foreign":{"id":41383,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"71:6:195","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"ICollector","contractDependencies":[],"contractKind":"interface","documentation":{"id":41385,"nodeType":"StructuredDocumentation","src":"159:104:195","text":" @title ICollector\n @notice Defines the interface of the Collector contract\n @author Aave*"},"fullyImplemented":false,"id":41431,"linearizedBaseContracts":[41431],"name":"ICollector","nameLocation":"274:10:195","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":41386,"nodeType":"StructuredDocumentation","src":"289:155:195","text":" @dev Emitted during the transfer of ownership of the funds administrator address\n @param fundsAdmin The new funds administrator address*"},"id":41390,"name":"NewFundsAdmin","nameLocation":"453:13:195","nodeType":"EventDefinition","parameters":{"id":41389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41388,"indexed":true,"mutability":"mutable","name":"fundsAdmin","nameLocation":"483:10:195","nodeType":"VariableDeclaration","scope":41390,"src":"467:26:195","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41387,"name":"address","nodeType":"ElementaryTypeName","src":"467:7:195","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"466:28:195"},"src":"447:48:195"},{"documentation":{"id":41391,"nodeType":"StructuredDocumentation","src":"499:111:195","text":" @dev Retrieve the current implementation Revision of the proxy\n @return The revision version"},"functionSelector":"dde43cba","id":41396,"implemented":false,"kind":"function","modifiers":[],"name":"REVISION","nameLocation":"622:8:195","nodeType":"FunctionDefinition","parameters":{"id":41392,"nodeType":"ParameterList","parameters":[],"src":"630:2:195"},"returnParameters":{"id":41395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41394,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41396,"src":"656:7:195","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41393,"name":"uint256","nodeType":"ElementaryTypeName","src":"656:7:195","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"655:9:195"},"scope":41431,"src":"613:52:195","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":41397,"nodeType":"StructuredDocumentation","src":"669:112:195","text":" @dev Retrieve the current funds administrator\n @return The address of the funds administrator"},"functionSelector":"06bc2ee0","id":41402,"implemented":false,"kind":"function","modifiers":[],"name":"getFundsAdmin","nameLocation":"793:13:195","nodeType":"FunctionDefinition","parameters":{"id":41398,"nodeType":"ParameterList","parameters":[],"src":"806:2:195"},"returnParameters":{"id":41401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41400,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41402,"src":"832:7:195","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41399,"name":"address","nodeType":"ElementaryTypeName","src":"832:7:195","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"831:9:195"},"scope":41431,"src":"784:57:195","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":41403,"nodeType":"StructuredDocumentation","src":"845:281:195","text":" @dev Approve an amount of tokens to be pulled by the recipient.\n @param token The address of the asset\n @param recipient The address of the entity allowed to pull tokens\n @param amount The amount allowed to be pulled. If zero it will revoke the approval."},"functionSelector":"e1f21c67","id":41413,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"1138:7:195","nodeType":"FunctionDefinition","parameters":{"id":41411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41406,"mutability":"mutable","name":"token","nameLocation":"1153:5:195","nodeType":"VariableDeclaration","scope":41413,"src":"1146:12:195","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":41405,"nodeType":"UserDefinedTypeName","pathNode":{"id":41404,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1146:6:195"},"referencedDeclaration":1442,"src":"1146:6:195","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":41408,"mutability":"mutable","name":"recipient","nameLocation":"1168:9:195","nodeType":"VariableDeclaration","scope":41413,"src":"1160:17:195","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41407,"name":"address","nodeType":"ElementaryTypeName","src":"1160:7:195","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41410,"mutability":"mutable","name":"amount","nameLocation":"1187:6:195","nodeType":"VariableDeclaration","scope":41413,"src":"1179:14:195","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41409,"name":"uint256","nodeType":"ElementaryTypeName","src":"1179:7:195","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1145:49:195"},"returnParameters":{"id":41412,"nodeType":"ParameterList","parameters":[],"src":"1203:0:195"},"scope":41431,"src":"1129:75:195","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":41414,"nodeType":"StructuredDocumentation","src":"1208:230:195","text":" @dev Transfer an amount of tokens to the recipient.\n @param token The address of the asset\n @param recipient The address of the entity to transfer the tokens.\n @param amount The amount to be transferred."},"functionSelector":"beabacc8","id":41424,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1450:8:195","nodeType":"FunctionDefinition","parameters":{"id":41422,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41417,"mutability":"mutable","name":"token","nameLocation":"1466:5:195","nodeType":"VariableDeclaration","scope":41424,"src":"1459:12:195","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":41416,"nodeType":"UserDefinedTypeName","pathNode":{"id":41415,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1459:6:195"},"referencedDeclaration":1442,"src":"1459:6:195","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":41419,"mutability":"mutable","name":"recipient","nameLocation":"1481:9:195","nodeType":"VariableDeclaration","scope":41424,"src":"1473:17:195","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41418,"name":"address","nodeType":"ElementaryTypeName","src":"1473:7:195","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41421,"mutability":"mutable","name":"amount","nameLocation":"1500:6:195","nodeType":"VariableDeclaration","scope":41424,"src":"1492:14:195","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41420,"name":"uint256","nodeType":"ElementaryTypeName","src":"1492:7:195","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1458:49:195"},"returnParameters":{"id":41423,"nodeType":"ParameterList","parameters":[],"src":"1516:0:195"},"scope":41431,"src":"1441:76:195","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":41425,"nodeType":"StructuredDocumentation","src":"1521:220:195","text":" @dev Transfer the ownership of the funds administrator role.\nThis function should only be callable by the current funds administrator.\n @param admin The address of the new funds administrator"},"functionSelector":"ed0d2371","id":41430,"implemented":false,"kind":"function","modifiers":[],"name":"setFundsAdmin","nameLocation":"1753:13:195","nodeType":"FunctionDefinition","parameters":{"id":41428,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41427,"mutability":"mutable","name":"admin","nameLocation":"1775:5:195","nodeType":"VariableDeclaration","scope":41430,"src":"1767:13:195","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41426,"name":"address","nodeType":"ElementaryTypeName","src":"1767:7:195","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1766:15:195"},"returnParameters":{"id":41429,"nodeType":"ParameterList","parameters":[],"src":"1790:0:195"},"scope":41431,"src":"1744:47:195","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":41432,"src":"264:1529:195","usedErrors":[]}],"src":"37:1757:195"},"id":195},"contracts/treasury/interfaces/IStreamable.sol":{"ast":{"absolutePath":"contracts/treasury/interfaces/IStreamable.sol","exportedSymbols":{"IStreamable":[41555]},"id":41556,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":41433,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"32:24:196"},{"abstract":false,"baseContracts":[],"canonicalName":"IStreamable","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":41555,"linearizedBaseContracts":[41555],"name":"IStreamable","nameLocation":"68:11:196","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IStreamable.Stream","id":41452,"members":[{"constant":false,"id":41435,"mutability":"mutable","name":"deposit","nameLocation":"112:7:196","nodeType":"VariableDeclaration","scope":41452,"src":"104:15:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41434,"name":"uint256","nodeType":"ElementaryTypeName","src":"104:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41437,"mutability":"mutable","name":"ratePerSecond","nameLocation":"133:13:196","nodeType":"VariableDeclaration","scope":41452,"src":"125:21:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41436,"name":"uint256","nodeType":"ElementaryTypeName","src":"125:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41439,"mutability":"mutable","name":"remainingBalance","nameLocation":"160:16:196","nodeType":"VariableDeclaration","scope":41452,"src":"152:24:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41438,"name":"uint256","nodeType":"ElementaryTypeName","src":"152:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41441,"mutability":"mutable","name":"startTime","nameLocation":"190:9:196","nodeType":"VariableDeclaration","scope":41452,"src":"182:17:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41440,"name":"uint256","nodeType":"ElementaryTypeName","src":"182:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41443,"mutability":"mutable","name":"stopTime","nameLocation":"213:8:196","nodeType":"VariableDeclaration","scope":41452,"src":"205:16:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41442,"name":"uint256","nodeType":"ElementaryTypeName","src":"205:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41445,"mutability":"mutable","name":"recipient","nameLocation":"235:9:196","nodeType":"VariableDeclaration","scope":41452,"src":"227:17:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41444,"name":"address","nodeType":"ElementaryTypeName","src":"227:7:196","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41447,"mutability":"mutable","name":"sender","nameLocation":"258:6:196","nodeType":"VariableDeclaration","scope":41452,"src":"250:14:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41446,"name":"address","nodeType":"ElementaryTypeName","src":"250:7:196","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41449,"mutability":"mutable","name":"tokenAddress","nameLocation":"278:12:196","nodeType":"VariableDeclaration","scope":41452,"src":"270:20:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41448,"name":"address","nodeType":"ElementaryTypeName","src":"270:7:196","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41451,"mutability":"mutable","name":"isEntity","nameLocation":"301:8:196","nodeType":"VariableDeclaration","scope":41452,"src":"296:13:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":41450,"name":"bool","nodeType":"ElementaryTypeName","src":"296:4:196","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"Stream","nameLocation":"91:6:196","nodeType":"StructDefinition","scope":41555,"src":"84:230:196","visibility":"public"},{"anonymous":false,"id":41468,"name":"CreateStream","nameLocation":"324:12:196","nodeType":"EventDefinition","parameters":{"id":41467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41454,"indexed":true,"mutability":"mutable","name":"streamId","nameLocation":"358:8:196","nodeType":"VariableDeclaration","scope":41468,"src":"342:24:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41453,"name":"uint256","nodeType":"ElementaryTypeName","src":"342:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41456,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"388:6:196","nodeType":"VariableDeclaration","scope":41468,"src":"372:22:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41455,"name":"address","nodeType":"ElementaryTypeName","src":"372:7:196","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41458,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"416:9:196","nodeType":"VariableDeclaration","scope":41468,"src":"400:25:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41457,"name":"address","nodeType":"ElementaryTypeName","src":"400:7:196","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41460,"indexed":false,"mutability":"mutable","name":"deposit","nameLocation":"439:7:196","nodeType":"VariableDeclaration","scope":41468,"src":"431:15:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41459,"name":"uint256","nodeType":"ElementaryTypeName","src":"431:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41462,"indexed":false,"mutability":"mutable","name":"tokenAddress","nameLocation":"460:12:196","nodeType":"VariableDeclaration","scope":41468,"src":"452:20:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41461,"name":"address","nodeType":"ElementaryTypeName","src":"452:7:196","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41464,"indexed":false,"mutability":"mutable","name":"startTime","nameLocation":"486:9:196","nodeType":"VariableDeclaration","scope":41468,"src":"478:17:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41463,"name":"uint256","nodeType":"ElementaryTypeName","src":"478:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41466,"indexed":false,"mutability":"mutable","name":"stopTime","nameLocation":"509:8:196","nodeType":"VariableDeclaration","scope":41468,"src":"501:16:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41465,"name":"uint256","nodeType":"ElementaryTypeName","src":"501:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"336:185:196"},"src":"318:204:196"},{"anonymous":false,"id":41476,"name":"WithdrawFromStream","nameLocation":"532:18:196","nodeType":"EventDefinition","parameters":{"id":41475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41470,"indexed":true,"mutability":"mutable","name":"streamId","nameLocation":"567:8:196","nodeType":"VariableDeclaration","scope":41476,"src":"551:24:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41469,"name":"uint256","nodeType":"ElementaryTypeName","src":"551:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41472,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"593:9:196","nodeType":"VariableDeclaration","scope":41476,"src":"577:25:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41471,"name":"address","nodeType":"ElementaryTypeName","src":"577:7:196","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41474,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"612:6:196","nodeType":"VariableDeclaration","scope":41476,"src":"604:14:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41473,"name":"uint256","nodeType":"ElementaryTypeName","src":"604:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"550:69:196"},"src":"526:94:196"},{"anonymous":false,"id":41488,"name":"CancelStream","nameLocation":"630:12:196","nodeType":"EventDefinition","parameters":{"id":41487,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41478,"indexed":true,"mutability":"mutable","name":"streamId","nameLocation":"664:8:196","nodeType":"VariableDeclaration","scope":41488,"src":"648:24:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41477,"name":"uint256","nodeType":"ElementaryTypeName","src":"648:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41480,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"694:6:196","nodeType":"VariableDeclaration","scope":41488,"src":"678:22:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41479,"name":"address","nodeType":"ElementaryTypeName","src":"678:7:196","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41482,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"722:9:196","nodeType":"VariableDeclaration","scope":41488,"src":"706:25:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41481,"name":"address","nodeType":"ElementaryTypeName","src":"706:7:196","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41484,"indexed":false,"mutability":"mutable","name":"senderBalance","nameLocation":"745:13:196","nodeType":"VariableDeclaration","scope":41488,"src":"737:21:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41483,"name":"uint256","nodeType":"ElementaryTypeName","src":"737:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41486,"indexed":false,"mutability":"mutable","name":"recipientBalance","nameLocation":"772:16:196","nodeType":"VariableDeclaration","scope":41488,"src":"764:24:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41485,"name":"uint256","nodeType":"ElementaryTypeName","src":"764:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"642:150:196"},"src":"624:169:196"},{"functionSelector":"3656eec2","id":41497,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"806:9:196","nodeType":"FunctionDefinition","parameters":{"id":41493,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41490,"mutability":"mutable","name":"streamId","nameLocation":"824:8:196","nodeType":"VariableDeclaration","scope":41497,"src":"816:16:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41489,"name":"uint256","nodeType":"ElementaryTypeName","src":"816:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41492,"mutability":"mutable","name":"who","nameLocation":"842:3:196","nodeType":"VariableDeclaration","scope":41497,"src":"834:11:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41491,"name":"address","nodeType":"ElementaryTypeName","src":"834:7:196","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"815:31:196"},"returnParameters":{"id":41496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41495,"mutability":"mutable","name":"balance","nameLocation":"878:7:196","nodeType":"VariableDeclaration","scope":41497,"src":"870:15:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41494,"name":"uint256","nodeType":"ElementaryTypeName","src":"870:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"869:17:196"},"scope":41555,"src":"797:90:196","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"894e9a0d","id":41518,"implemented":false,"kind":"function","modifiers":[],"name":"getStream","nameLocation":"900:9:196","nodeType":"FunctionDefinition","parameters":{"id":41500,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41499,"mutability":"mutable","name":"streamId","nameLocation":"923:8:196","nodeType":"VariableDeclaration","scope":41518,"src":"915:16:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41498,"name":"uint256","nodeType":"ElementaryTypeName","src":"915:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"909:26:196"},"returnParameters":{"id":41517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41502,"mutability":"mutable","name":"sender","nameLocation":"986:6:196","nodeType":"VariableDeclaration","scope":41518,"src":"978:14:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41501,"name":"address","nodeType":"ElementaryTypeName","src":"978:7:196","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41504,"mutability":"mutable","name":"recipient","nameLocation":"1008:9:196","nodeType":"VariableDeclaration","scope":41518,"src":"1000:17:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41503,"name":"address","nodeType":"ElementaryTypeName","src":"1000:7:196","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41506,"mutability":"mutable","name":"deposit","nameLocation":"1033:7:196","nodeType":"VariableDeclaration","scope":41518,"src":"1025:15:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41505,"name":"uint256","nodeType":"ElementaryTypeName","src":"1025:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41508,"mutability":"mutable","name":"token","nameLocation":"1056:5:196","nodeType":"VariableDeclaration","scope":41518,"src":"1048:13:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41507,"name":"address","nodeType":"ElementaryTypeName","src":"1048:7:196","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41510,"mutability":"mutable","name":"startTime","nameLocation":"1077:9:196","nodeType":"VariableDeclaration","scope":41518,"src":"1069:17:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41509,"name":"uint256","nodeType":"ElementaryTypeName","src":"1069:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41512,"mutability":"mutable","name":"stopTime","nameLocation":"1102:8:196","nodeType":"VariableDeclaration","scope":41518,"src":"1094:16:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41511,"name":"uint256","nodeType":"ElementaryTypeName","src":"1094:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41514,"mutability":"mutable","name":"remainingBalance","nameLocation":"1126:16:196","nodeType":"VariableDeclaration","scope":41518,"src":"1118:24:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41513,"name":"uint256","nodeType":"ElementaryTypeName","src":"1118:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41516,"mutability":"mutable","name":"ratePerSecond","nameLocation":"1158:13:196","nodeType":"VariableDeclaration","scope":41518,"src":"1150:21:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41515,"name":"uint256","nodeType":"ElementaryTypeName","src":"1150:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"970:207:196"},"scope":41555,"src":"891:287:196","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"cc1b4bf6","id":41533,"implemented":false,"kind":"function","modifiers":[],"name":"createStream","nameLocation":"1191:12:196","nodeType":"FunctionDefinition","parameters":{"id":41529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41520,"mutability":"mutable","name":"recipient","nameLocation":"1217:9:196","nodeType":"VariableDeclaration","scope":41533,"src":"1209:17:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41519,"name":"address","nodeType":"ElementaryTypeName","src":"1209:7:196","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41522,"mutability":"mutable","name":"deposit","nameLocation":"1240:7:196","nodeType":"VariableDeclaration","scope":41533,"src":"1232:15:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41521,"name":"uint256","nodeType":"ElementaryTypeName","src":"1232:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41524,"mutability":"mutable","name":"tokenAddress","nameLocation":"1261:12:196","nodeType":"VariableDeclaration","scope":41533,"src":"1253:20:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41523,"name":"address","nodeType":"ElementaryTypeName","src":"1253:7:196","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41526,"mutability":"mutable","name":"startTime","nameLocation":"1287:9:196","nodeType":"VariableDeclaration","scope":41533,"src":"1279:17:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41525,"name":"uint256","nodeType":"ElementaryTypeName","src":"1279:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41528,"mutability":"mutable","name":"stopTime","nameLocation":"1310:8:196","nodeType":"VariableDeclaration","scope":41533,"src":"1302:16:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41527,"name":"uint256","nodeType":"ElementaryTypeName","src":"1302:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1203:119:196"},"returnParameters":{"id":41532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41531,"mutability":"mutable","name":"streamId","nameLocation":"1349:8:196","nodeType":"VariableDeclaration","scope":41533,"src":"1341:16:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41530,"name":"uint256","nodeType":"ElementaryTypeName","src":"1341:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1340:18:196"},"scope":41555,"src":"1182:177:196","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"7a9b2c6c","id":41542,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawFromStream","nameLocation":"1372:18:196","nodeType":"FunctionDefinition","parameters":{"id":41538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41535,"mutability":"mutable","name":"streamId","nameLocation":"1399:8:196","nodeType":"VariableDeclaration","scope":41542,"src":"1391:16:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41534,"name":"uint256","nodeType":"ElementaryTypeName","src":"1391:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41537,"mutability":"mutable","name":"funds","nameLocation":"1417:5:196","nodeType":"VariableDeclaration","scope":41542,"src":"1409:13:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41536,"name":"uint256","nodeType":"ElementaryTypeName","src":"1409:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1390:33:196"},"returnParameters":{"id":41541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41540,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41542,"src":"1442:4:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":41539,"name":"bool","nodeType":"ElementaryTypeName","src":"1442:4:196","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1441:6:196"},"scope":41555,"src":"1363:85:196","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"6db9241b","id":41549,"implemented":false,"kind":"function","modifiers":[],"name":"cancelStream","nameLocation":"1461:12:196","nodeType":"FunctionDefinition","parameters":{"id":41545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41544,"mutability":"mutable","name":"streamId","nameLocation":"1482:8:196","nodeType":"VariableDeclaration","scope":41549,"src":"1474:16:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41543,"name":"uint256","nodeType":"ElementaryTypeName","src":"1474:7:196","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1473:18:196"},"returnParameters":{"id":41548,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41547,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41549,"src":"1510:4:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":41546,"name":"bool","nodeType":"ElementaryTypeName","src":"1510:4:196","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1509:6:196"},"scope":41555,"src":"1452:64:196","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"c4d66de8","id":41554,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"1529:10:196","nodeType":"FunctionDefinition","parameters":{"id":41552,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41551,"mutability":"mutable","name":"fundsAdmin","nameLocation":"1548:10:196","nodeType":"VariableDeclaration","scope":41554,"src":"1540:18:196","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41550,"name":"address","nodeType":"ElementaryTypeName","src":"1540:7:196","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1539:20:196"},"returnParameters":{"id":41553,"nodeType":"ParameterList","parameters":[],"src":"1568:0:196"},"scope":41555,"src":"1520:49:196","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":41556,"src":"58:1513:196","usedErrors":[]}],"src":"32:1540:196"},"id":196},"contracts/treasury/libs/Address.sol":{"ast":{"absolutePath":"contracts/treasury/libs/Address.sol","exportedSymbols":{"Address":[41850]},"id":41851,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":41557,"literals":["solidity","^","0.8",".1"],"nodeType":"PragmaDirective","src":"101:23:197"},{"abstract":false,"baseContracts":[],"canonicalName":"Address","contractDependencies":[],"contractKind":"library","documentation":{"id":41558,"nodeType":"StructuredDocumentation","src":"126:67:197","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":41850,"linearizedBaseContracts":[41850],"name":"Address","nameLocation":"202:7:197","nodeType":"ContractDefinition","nodes":[{"body":{"id":41572,"nodeType":"Block","src":"1187:236:197","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":41566,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41561,"src":"1395:7:197","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":41567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"code","nodeType":"MemberAccess","src":"1395:12:197","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":41568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1395:19:197","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":41569,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1417:1:197","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1395:23:197","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":41565,"id":41571,"nodeType":"Return","src":"1388:30:197"}]},"documentation":{"id":41559,"nodeType":"StructuredDocumentation","src":"214:904:197","text":" @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n  - an externally-owned account\n  - a contract in construction\n  - an address where a contract will be created\n  - an address where a contract lived, but was destroyed\n ====\n [IMPORTANT]\n ====\n You shouldn't rely on `isContract` to protect against flash loan attacks!\n Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n constructor.\n ===="},"id":41573,"implemented":true,"kind":"function","modifiers":[],"name":"isContract","nameLocation":"1130:10:197","nodeType":"FunctionDefinition","parameters":{"id":41562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41561,"mutability":"mutable","name":"account","nameLocation":"1149:7:197","nodeType":"VariableDeclaration","scope":41573,"src":"1141:15:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41560,"name":"address","nodeType":"ElementaryTypeName","src":"1141:7:197","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1140:17:197"},"returnParameters":{"id":41565,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41564,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41573,"src":"1181:4:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":41563,"name":"bool","nodeType":"ElementaryTypeName","src":"1181:4:197","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1180:6:197"},"scope":41850,"src":"1121:302:197","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":41606,"nodeType":"Block","src":"2377:227:197","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":41584,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2399:4:197","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$41850","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$41850","typeString":"library Address"}],"id":41583,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2391:7:197","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":41582,"name":"address","nodeType":"ElementaryTypeName","src":"2391:7:197","typeDescriptions":{}}},"id":41585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2391:13:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":41586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","src":"2391:21:197","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":41587,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41578,"src":"2416:6:197","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2391:31:197","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","id":41589,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2424:31:197","typeDescriptions":{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""},"value":"Address: insufficient balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""}],"id":41581,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2383:7:197","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41590,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2383:73:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41591,"nodeType":"ExpressionStatement","src":"2383:73:197"},{"assignments":[41593,null],"declarations":[{"constant":false,"id":41593,"mutability":"mutable","name":"success","nameLocation":"2469:7:197","nodeType":"VariableDeclaration","scope":41606,"src":"2464:12:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":41592,"name":"bool","nodeType":"ElementaryTypeName","src":"2464:4:197","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":41600,"initialValue":{"arguments":[{"hexValue":"","id":41598,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2512:2:197","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":41594,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41576,"src":"2482:9:197","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":41595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"call","nodeType":"MemberAccess","src":"2482:14:197","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":41597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":41596,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41578,"src":"2504:6:197","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"2482:29:197","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":41599,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2482:33:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"2463:52:197"},{"expression":{"arguments":[{"id":41602,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41593,"src":"2529:7:197","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564","id":41603,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2538:60:197","typeDescriptions":{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""},"value":"Address: unable to send value, recipient may have reverted"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""}],"id":41601,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2521:7:197","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2521:78:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41605,"nodeType":"ExpressionStatement","src":"2521:78:197"}]},"documentation":{"id":41574,"nodeType":"StructuredDocumentation","src":"1427:876:197","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":41607,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"2315:9:197","nodeType":"FunctionDefinition","parameters":{"id":41579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41576,"mutability":"mutable","name":"recipient","nameLocation":"2341:9:197","nodeType":"VariableDeclaration","scope":41607,"src":"2325:25:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":41575,"name":"address","nodeType":"ElementaryTypeName","src":"2325:15:197","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":41578,"mutability":"mutable","name":"amount","nameLocation":"2360:6:197","nodeType":"VariableDeclaration","scope":41607,"src":"2352:14:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41577,"name":"uint256","nodeType":"ElementaryTypeName","src":"2352:7:197","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2324:43:197"},"returnParameters":{"id":41580,"nodeType":"ParameterList","parameters":[],"src":"2377:0:197"},"scope":41850,"src":"2306:298:197","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":41623,"nodeType":"Block","src":"3397:78:197","statements":[{"expression":{"arguments":[{"id":41618,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41610,"src":"3423:6:197","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41619,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41612,"src":"3431:4:197","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564","id":41620,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3437:32:197","typeDescriptions":{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""},"value":"Address: low-level call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""}],"id":41617,"name":"functionCall","nodeType":"Identifier","overloadedDeclarations":[41624,41644],"referencedDeclaration":41644,"src":"3410:12:197","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) returns (bytes memory)"}},"id":41621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3410:60:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":41616,"id":41622,"nodeType":"Return","src":"3403:67:197"}]},"documentation":{"id":41608,"nodeType":"StructuredDocumentation","src":"2608:697:197","text":" @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._"},"id":41624,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"3317:12:197","nodeType":"FunctionDefinition","parameters":{"id":41613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41610,"mutability":"mutable","name":"target","nameLocation":"3338:6:197","nodeType":"VariableDeclaration","scope":41624,"src":"3330:14:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41609,"name":"address","nodeType":"ElementaryTypeName","src":"3330:7:197","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41612,"mutability":"mutable","name":"data","nameLocation":"3359:4:197","nodeType":"VariableDeclaration","scope":41624,"src":"3346:17:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41611,"name":"bytes","nodeType":"ElementaryTypeName","src":"3346:5:197","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3329:35:197"},"returnParameters":{"id":41616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41615,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41624,"src":"3383:12:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41614,"name":"bytes","nodeType":"ElementaryTypeName","src":"3383:5:197","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3382:14:197"},"scope":41850,"src":"3308:167:197","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":41643,"nodeType":"Block","src":"3816:70:197","statements":[{"expression":{"arguments":[{"id":41637,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41627,"src":"3851:6:197","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41638,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41629,"src":"3859:4:197","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":41639,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3865:1:197","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":41640,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41631,"src":"3868:12:197","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":41636,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[41664,41714],"referencedDeclaration":41714,"src":"3829:21:197","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":41641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3829:52:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":41635,"id":41642,"nodeType":"Return","src":"3822:59:197"}]},"documentation":{"id":41625,"nodeType":"StructuredDocumentation","src":"3479:201:197","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":41644,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"3692:12:197","nodeType":"FunctionDefinition","parameters":{"id":41632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41627,"mutability":"mutable","name":"target","nameLocation":"3718:6:197","nodeType":"VariableDeclaration","scope":41644,"src":"3710:14:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41626,"name":"address","nodeType":"ElementaryTypeName","src":"3710:7:197","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41629,"mutability":"mutable","name":"data","nameLocation":"3743:4:197","nodeType":"VariableDeclaration","scope":41644,"src":"3730:17:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41628,"name":"bytes","nodeType":"ElementaryTypeName","src":"3730:5:197","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":41631,"mutability":"mutable","name":"errorMessage","nameLocation":"3767:12:197","nodeType":"VariableDeclaration","scope":41644,"src":"3753:26:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":41630,"name":"string","nodeType":"ElementaryTypeName","src":"3753:6:197","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3704:79:197"},"returnParameters":{"id":41635,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41634,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41644,"src":"3802:12:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41633,"name":"bytes","nodeType":"ElementaryTypeName","src":"3802:5:197","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3801:14:197"},"scope":41850,"src":"3683:203:197","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":41663,"nodeType":"Block","src":"4353:105:197","statements":[{"expression":{"arguments":[{"id":41657,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41647,"src":"4388:6:197","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41658,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41649,"src":"4396:4:197","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":41659,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41651,"src":"4402:5:197","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564","id":41660,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4409:43:197","typeDescriptions":{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""},"value":"Address: low-level call with value failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""}],"id":41656,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[41664,41714],"referencedDeclaration":41714,"src":"4366:21:197","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":41661,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4366:87:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":41655,"id":41662,"nodeType":"Return","src":"4359:94:197"}]},"documentation":{"id":41645,"nodeType":"StructuredDocumentation","src":"3890:331:197","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._"},"id":41664,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"4233:21:197","nodeType":"FunctionDefinition","parameters":{"id":41652,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41647,"mutability":"mutable","name":"target","nameLocation":"4268:6:197","nodeType":"VariableDeclaration","scope":41664,"src":"4260:14:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41646,"name":"address","nodeType":"ElementaryTypeName","src":"4260:7:197","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41649,"mutability":"mutable","name":"data","nameLocation":"4293:4:197","nodeType":"VariableDeclaration","scope":41664,"src":"4280:17:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41648,"name":"bytes","nodeType":"ElementaryTypeName","src":"4280:5:197","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":41651,"mutability":"mutable","name":"value","nameLocation":"4311:5:197","nodeType":"VariableDeclaration","scope":41664,"src":"4303:13:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41650,"name":"uint256","nodeType":"ElementaryTypeName","src":"4303:7:197","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4254:66:197"},"returnParameters":{"id":41655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41654,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41664,"src":"4339:12:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41653,"name":"bytes","nodeType":"ElementaryTypeName","src":"4339:5:197","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4338:14:197"},"scope":41850,"src":"4224:234:197","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":41713,"nodeType":"Block","src":"4853:302:197","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41685,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":41681,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4875:4:197","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$41850","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$41850","typeString":"library Address"}],"id":41680,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4867:7:197","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":41679,"name":"address","nodeType":"ElementaryTypeName","src":"4867:7:197","typeDescriptions":{}}},"id":41682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4867:13:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":41683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","src":"4867:21:197","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":41684,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41671,"src":"4892:5:197","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4867:30:197","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c","id":41686,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4899:40:197","typeDescriptions":{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""},"value":"Address: insufficient balance for call"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""}],"id":41678,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4859:7:197","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4859:81:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41688,"nodeType":"ExpressionStatement","src":"4859:81:197"},{"expression":{"arguments":[{"arguments":[{"id":41691,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41667,"src":"4965:6:197","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41690,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41573,"src":"4954:10:197","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":41692,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4954:18:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","id":41693,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4974:31:197","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""},"value":"Address: call to non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""}],"id":41689,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4946:7:197","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4946:60:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41695,"nodeType":"ExpressionStatement","src":"4946:60:197"},{"assignments":[41697,41699],"declarations":[{"constant":false,"id":41697,"mutability":"mutable","name":"success","nameLocation":"5019:7:197","nodeType":"VariableDeclaration","scope":41713,"src":"5014:12:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":41696,"name":"bool","nodeType":"ElementaryTypeName","src":"5014:4:197","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":41699,"mutability":"mutable","name":"returndata","nameLocation":"5041:10:197","nodeType":"VariableDeclaration","scope":41713,"src":"5028:23:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41698,"name":"bytes","nodeType":"ElementaryTypeName","src":"5028:5:197","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":41706,"initialValue":{"arguments":[{"id":41704,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41669,"src":"5081:4:197","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":41700,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41667,"src":"5055:6:197","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":41701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"call","nodeType":"MemberAccess","src":"5055:11:197","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":41703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":41702,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41671,"src":"5074:5:197","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"5055:25:197","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":41705,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5055:31:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"5013:73:197"},{"expression":{"arguments":[{"id":41708,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41697,"src":"5116:7:197","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":41709,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41699,"src":"5125:10:197","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":41710,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41673,"src":"5137:12:197","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":41707,"name":"verifyCallResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41849,"src":"5099:16:197","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bool,bytes memory,string memory) pure returns (bytes memory)"}},"id":41711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5099:51:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":41677,"id":41712,"nodeType":"Return","src":"5092:58:197"}]},"documentation":{"id":41665,"nodeType":"StructuredDocumentation","src":"4462:227:197","text":" @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":41714,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"4701:21:197","nodeType":"FunctionDefinition","parameters":{"id":41674,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41667,"mutability":"mutable","name":"target","nameLocation":"4736:6:197","nodeType":"VariableDeclaration","scope":41714,"src":"4728:14:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41666,"name":"address","nodeType":"ElementaryTypeName","src":"4728:7:197","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41669,"mutability":"mutable","name":"data","nameLocation":"4761:4:197","nodeType":"VariableDeclaration","scope":41714,"src":"4748:17:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41668,"name":"bytes","nodeType":"ElementaryTypeName","src":"4748:5:197","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":41671,"mutability":"mutable","name":"value","nameLocation":"4779:5:197","nodeType":"VariableDeclaration","scope":41714,"src":"4771:13:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41670,"name":"uint256","nodeType":"ElementaryTypeName","src":"4771:7:197","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41673,"mutability":"mutable","name":"errorMessage","nameLocation":"4804:12:197","nodeType":"VariableDeclaration","scope":41714,"src":"4790:26:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":41672,"name":"string","nodeType":"ElementaryTypeName","src":"4790:6:197","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4722:98:197"},"returnParameters":{"id":41677,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41676,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41714,"src":"4839:12:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41675,"name":"bytes","nodeType":"ElementaryTypeName","src":"4839:5:197","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4838:14:197"},"scope":41850,"src":"4692:463:197","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":41730,"nodeType":"Block","src":"5430:91:197","statements":[{"expression":{"arguments":[{"id":41725,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41717,"src":"5462:6:197","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41726,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41719,"src":"5470:4:197","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564","id":41727,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5476:39:197","typeDescriptions":{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""},"value":"Address: low-level static call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""}],"id":41724,"name":"functionStaticCall","nodeType":"Identifier","overloadedDeclarations":[41731,41766],"referencedDeclaration":41766,"src":"5443:18:197","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) view returns (bytes memory)"}},"id":41728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5443:73:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":41723,"id":41729,"nodeType":"Return","src":"5436:80:197"}]},"documentation":{"id":41715,"nodeType":"StructuredDocumentation","src":"5159:156:197","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":41731,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"5327:18:197","nodeType":"FunctionDefinition","parameters":{"id":41720,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41717,"mutability":"mutable","name":"target","nameLocation":"5359:6:197","nodeType":"VariableDeclaration","scope":41731,"src":"5351:14:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41716,"name":"address","nodeType":"ElementaryTypeName","src":"5351:7:197","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41719,"mutability":"mutable","name":"data","nameLocation":"5384:4:197","nodeType":"VariableDeclaration","scope":41731,"src":"5371:17:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41718,"name":"bytes","nodeType":"ElementaryTypeName","src":"5371:5:197","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5345:47:197"},"returnParameters":{"id":41723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41722,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41731,"src":"5416:12:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41721,"name":"bytes","nodeType":"ElementaryTypeName","src":"5416:5:197","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5415:14:197"},"scope":41850,"src":"5318:203:197","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":41765,"nodeType":"Block","src":"5835:214:197","statements":[{"expression":{"arguments":[{"arguments":[{"id":41745,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41734,"src":"5860:6:197","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41744,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41573,"src":"5849:10:197","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":41746,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5849:18:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a207374617469632063616c6c20746f206e6f6e2d636f6e7472616374","id":41747,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5869:38:197","typeDescriptions":{"typeIdentifier":"t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9","typeString":"literal_string \"Address: static call to non-contract\""},"value":"Address: static call to non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9","typeString":"literal_string \"Address: static call to non-contract\""}],"id":41743,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5841:7:197","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41748,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5841:67:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41749,"nodeType":"ExpressionStatement","src":"5841:67:197"},{"assignments":[41751,41753],"declarations":[{"constant":false,"id":41751,"mutability":"mutable","name":"success","nameLocation":"5921:7:197","nodeType":"VariableDeclaration","scope":41765,"src":"5916:12:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":41750,"name":"bool","nodeType":"ElementaryTypeName","src":"5916:4:197","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":41753,"mutability":"mutable","name":"returndata","nameLocation":"5943:10:197","nodeType":"VariableDeclaration","scope":41765,"src":"5930:23:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41752,"name":"bytes","nodeType":"ElementaryTypeName","src":"5930:5:197","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":41758,"initialValue":{"arguments":[{"id":41756,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41736,"src":"5975:4:197","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":41754,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41734,"src":"5957:6:197","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":41755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"staticcall","nodeType":"MemberAccess","src":"5957:17:197","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":41757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5957:23:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"5915:65:197"},{"expression":{"arguments":[{"id":41760,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41751,"src":"6010:7:197","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":41761,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41753,"src":"6019:10:197","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":41762,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41738,"src":"6031:12:197","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":41759,"name":"verifyCallResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41849,"src":"5993:16:197","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bool,bytes memory,string memory) pure returns (bytes memory)"}},"id":41763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5993:51:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":41742,"id":41764,"nodeType":"Return","src":"5986:58:197"}]},"documentation":{"id":41732,"nodeType":"StructuredDocumentation","src":"5525:163:197","text":" @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":41766,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"5700:18:197","nodeType":"FunctionDefinition","parameters":{"id":41739,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41734,"mutability":"mutable","name":"target","nameLocation":"5732:6:197","nodeType":"VariableDeclaration","scope":41766,"src":"5724:14:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41733,"name":"address","nodeType":"ElementaryTypeName","src":"5724:7:197","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41736,"mutability":"mutable","name":"data","nameLocation":"5757:4:197","nodeType":"VariableDeclaration","scope":41766,"src":"5744:17:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41735,"name":"bytes","nodeType":"ElementaryTypeName","src":"5744:5:197","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":41738,"mutability":"mutable","name":"errorMessage","nameLocation":"5781:12:197","nodeType":"VariableDeclaration","scope":41766,"src":"5767:26:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":41737,"name":"string","nodeType":"ElementaryTypeName","src":"5767:6:197","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5718:79:197"},"returnParameters":{"id":41742,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41741,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41766,"src":"5821:12:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41740,"name":"bytes","nodeType":"ElementaryTypeName","src":"5821:5:197","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5820:14:197"},"scope":41850,"src":"5691:358:197","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":41782,"nodeType":"Block","src":"6311:95:197","statements":[{"expression":{"arguments":[{"id":41777,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41769,"src":"6345:6:197","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41778,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41771,"src":"6353:4:197","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564","id":41779,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6359:41:197","typeDescriptions":{"typeIdentifier":"t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398","typeString":"literal_string \"Address: low-level delegate call failed\""},"value":"Address: low-level delegate call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398","typeString":"literal_string \"Address: low-level delegate call failed\""}],"id":41776,"name":"functionDelegateCall","nodeType":"Identifier","overloadedDeclarations":[41783,41818],"referencedDeclaration":41818,"src":"6324:20:197","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) returns (bytes memory)"}},"id":41780,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6324:77:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":41775,"id":41781,"nodeType":"Return","src":"6317:84:197"}]},"documentation":{"id":41767,"nodeType":"StructuredDocumentation","src":"6053:158:197","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"},"id":41783,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"6223:20:197","nodeType":"FunctionDefinition","parameters":{"id":41772,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41769,"mutability":"mutable","name":"target","nameLocation":"6252:6:197","nodeType":"VariableDeclaration","scope":41783,"src":"6244:14:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41768,"name":"address","nodeType":"ElementaryTypeName","src":"6244:7:197","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41771,"mutability":"mutable","name":"data","nameLocation":"6273:4:197","nodeType":"VariableDeclaration","scope":41783,"src":"6260:17:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41770,"name":"bytes","nodeType":"ElementaryTypeName","src":"6260:5:197","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6243:35:197"},"returnParameters":{"id":41775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41774,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41783,"src":"6297:12:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41773,"name":"bytes","nodeType":"ElementaryTypeName","src":"6297:5:197","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6296:14:197"},"scope":41850,"src":"6214:192:197","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":41817,"nodeType":"Block","src":"6719:218:197","statements":[{"expression":{"arguments":[{"arguments":[{"id":41797,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41786,"src":"6744:6:197","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41796,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41573,"src":"6733:10:197","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":41798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6733:18:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374","id":41799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6753:40:197","typeDescriptions":{"typeIdentifier":"t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520","typeString":"literal_string \"Address: delegate call to non-contract\""},"value":"Address: delegate call to non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520","typeString":"literal_string \"Address: delegate call to non-contract\""}],"id":41795,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"6725:7:197","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6725:69:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41801,"nodeType":"ExpressionStatement","src":"6725:69:197"},{"assignments":[41803,41805],"declarations":[{"constant":false,"id":41803,"mutability":"mutable","name":"success","nameLocation":"6807:7:197","nodeType":"VariableDeclaration","scope":41817,"src":"6802:12:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":41802,"name":"bool","nodeType":"ElementaryTypeName","src":"6802:4:197","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":41805,"mutability":"mutable","name":"returndata","nameLocation":"6829:10:197","nodeType":"VariableDeclaration","scope":41817,"src":"6816:23:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41804,"name":"bytes","nodeType":"ElementaryTypeName","src":"6816:5:197","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":41810,"initialValue":{"arguments":[{"id":41808,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41788,"src":"6863:4:197","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":41806,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41786,"src":"6843:6:197","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":41807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"delegatecall","nodeType":"MemberAccess","src":"6843:19:197","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":41809,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6843:25:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"6801:67:197"},{"expression":{"arguments":[{"id":41812,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41803,"src":"6898:7:197","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":41813,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41805,"src":"6907:10:197","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":41814,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41790,"src":"6919:12:197","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":41811,"name":"verifyCallResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41849,"src":"6881:16:197","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bool,bytes memory,string memory) pure returns (bytes memory)"}},"id":41815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6881:51:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":41794,"id":41816,"nodeType":"Return","src":"6874:58:197"}]},"documentation":{"id":41784,"nodeType":"StructuredDocumentation","src":"6410:165:197","text":" @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"},"id":41818,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"6587:20:197","nodeType":"FunctionDefinition","parameters":{"id":41791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41786,"mutability":"mutable","name":"target","nameLocation":"6621:6:197","nodeType":"VariableDeclaration","scope":41818,"src":"6613:14:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41785,"name":"address","nodeType":"ElementaryTypeName","src":"6613:7:197","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41788,"mutability":"mutable","name":"data","nameLocation":"6646:4:197","nodeType":"VariableDeclaration","scope":41818,"src":"6633:17:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41787,"name":"bytes","nodeType":"ElementaryTypeName","src":"6633:5:197","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":41790,"mutability":"mutable","name":"errorMessage","nameLocation":"6670:12:197","nodeType":"VariableDeclaration","scope":41818,"src":"6656:26:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":41789,"name":"string","nodeType":"ElementaryTypeName","src":"6656:6:197","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6607:79:197"},"returnParameters":{"id":41794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41793,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41818,"src":"6705:12:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41792,"name":"bytes","nodeType":"ElementaryTypeName","src":"6705:5:197","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6704:14:197"},"scope":41850,"src":"6578:359:197","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":41848,"nodeType":"Block","src":"7289:436:197","statements":[{"condition":{"id":41830,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41821,"src":"7299:7:197","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":41846,"nodeType":"Block","src":"7346:375:197","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41834,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41823,"src":"7418:10:197","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":41835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"7418:17:197","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":41836,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7438:1:197","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7418:21:197","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":41844,"nodeType":"Block","src":"7676:39:197","statements":[{"expression":{"arguments":[{"id":41841,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41825,"src":"7693:12:197","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":41840,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"7686:6:197","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":41842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7686:20:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41843,"nodeType":"ExpressionStatement","src":"7686:20:197"}]},"id":41845,"nodeType":"IfStatement","src":"7414:301:197","trueBody":{"id":41839,"nodeType":"Block","src":"7441:229:197","statements":[{"AST":{"nodeType":"YulBlock","src":"7545:117:197","statements":[{"nodeType":"YulVariableDeclaration","src":"7557:40:197","value":{"arguments":[{"name":"returndata","nodeType":"YulIdentifier","src":"7586:10:197"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7580:5:197"},"nodeType":"YulFunctionCall","src":"7580:17:197"},"variables":[{"name":"returndata_size","nodeType":"YulTypedName","src":"7561:15:197","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7619:2:197","type":"","value":"32"},{"name":"returndata","nodeType":"YulIdentifier","src":"7623:10:197"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7615:3:197"},"nodeType":"YulFunctionCall","src":"7615:19:197"},{"name":"returndata_size","nodeType":"YulIdentifier","src":"7636:15:197"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7608:6:197"},"nodeType":"YulFunctionCall","src":"7608:44:197"},"nodeType":"YulExpressionStatement","src":"7608:44:197"}]},"evmVersion":"london","externalReferences":[{"declaration":41823,"isOffset":false,"isSlot":false,"src":"7586:10:197","valueSize":1},{"declaration":41823,"isOffset":false,"isSlot":false,"src":"7623:10:197","valueSize":1}],"id":41838,"nodeType":"InlineAssembly","src":"7536:126:197"}]}}]},"id":41847,"nodeType":"IfStatement","src":"7295:426:197","trueBody":{"id":41833,"nodeType":"Block","src":"7308:32:197","statements":[{"expression":{"id":41831,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41823,"src":"7323:10:197","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":41829,"id":41832,"nodeType":"Return","src":"7316:17:197"}]}}]},"documentation":{"id":41819,"nodeType":"StructuredDocumentation","src":"6941:199:197","text":" @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n revert reason using the provided one.\n _Available since v4.3._"},"id":41849,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"7152:16:197","nodeType":"FunctionDefinition","parameters":{"id":41826,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41821,"mutability":"mutable","name":"success","nameLocation":"7179:7:197","nodeType":"VariableDeclaration","scope":41849,"src":"7174:12:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":41820,"name":"bool","nodeType":"ElementaryTypeName","src":"7174:4:197","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":41823,"mutability":"mutable","name":"returndata","nameLocation":"7205:10:197","nodeType":"VariableDeclaration","scope":41849,"src":"7192:23:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41822,"name":"bytes","nodeType":"ElementaryTypeName","src":"7192:5:197","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":41825,"mutability":"mutable","name":"errorMessage","nameLocation":"7235:12:197","nodeType":"VariableDeclaration","scope":41849,"src":"7221:26:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":41824,"name":"string","nodeType":"ElementaryTypeName","src":"7221:6:197","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7168:83:197"},"returnParameters":{"id":41829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41828,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41849,"src":"7275:12:197","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41827,"name":"bytes","nodeType":"ElementaryTypeName","src":"7275:5:197","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7274:14:197"},"scope":41850,"src":"7143:582:197","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":41851,"src":"194:7533:197","usedErrors":[]}],"src":"101:7627:197"},"id":197},"contracts/treasury/libs/ReentrancyGuard.sol":{"ast":{"absolutePath":"contracts/treasury/libs/ReentrancyGuard.sol","exportedSymbols":{"ReentrancyGuard":[41890]},"id":41891,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":41852,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"97:23:198"},{"abstract":true,"baseContracts":[],"canonicalName":"ReentrancyGuard","contractDependencies":[],"contractKind":"contract","documentation":{"id":41853,"nodeType":"StructuredDocumentation","src":"122:750:198","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":41890,"linearizedBaseContracts":[41890],"name":"ReentrancyGuard","nameLocation":"891:15:198","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":41856,"mutability":"constant","name":"_NOT_ENTERED","nameLocation":"1664:12:198","nodeType":"VariableDeclaration","scope":41890,"src":"1639:41:198","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41854,"name":"uint256","nodeType":"ElementaryTypeName","src":"1639:7:198","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":41855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1679:1:198","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"private"},{"constant":true,"id":41859,"mutability":"constant","name":"_ENTERED","nameLocation":"1709:8:198","nodeType":"VariableDeclaration","scope":41890,"src":"1684:37:198","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41857,"name":"uint256","nodeType":"ElementaryTypeName","src":"1684:7:198","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":41858,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1720:1:198","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"private"},{"constant":false,"id":41861,"mutability":"mutable","name":"_status","nameLocation":"1742:7:198","nodeType":"VariableDeclaration","scope":41890,"src":"1726:23:198","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41860,"name":"uint256","nodeType":"ElementaryTypeName","src":"1726:7:198","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"body":{"id":41868,"nodeType":"Block","src":"1768:33:198","statements":[{"expression":{"id":41866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":41864,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41861,"src":"1774:7:198","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":41865,"name":"_NOT_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41856,"src":"1784:12:198","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1774:22:198","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":41867,"nodeType":"ExpressionStatement","src":"1774:22:198"}]},"id":41869,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":41862,"nodeType":"ParameterList","parameters":[],"src":"1765:2:198"},"returnParameters":{"id":41863,"nodeType":"ParameterList","parameters":[],"src":"1768:0:198"},"scope":41890,"src":"1754:47:198","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":41888,"nodeType":"Block","src":"2186:387:198","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":41873,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41861,"src":"2267:7:198","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":41874,"name":"_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41859,"src":"2278:8:198","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2267:19:198","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5265656e7472616e637947756172643a207265656e7472616e742063616c6c","id":41876,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2288:33:198","typeDescriptions":{"typeIdentifier":"t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619","typeString":"literal_string \"ReentrancyGuard: reentrant call\""},"value":"ReentrancyGuard: reentrant call"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619","typeString":"literal_string \"ReentrancyGuard: reentrant call\""}],"id":41872,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2259:7:198","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2259:63:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41878,"nodeType":"ExpressionStatement","src":"2259:63:198"},{"expression":{"id":41881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":41879,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41861,"src":"2389:7:198","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":41880,"name":"_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41859,"src":"2399:8:198","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2389:18:198","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":41882,"nodeType":"ExpressionStatement","src":"2389:18:198"},{"id":41883,"nodeType":"PlaceholderStatement","src":"2414:1:198"},{"expression":{"id":41886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":41884,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41861,"src":"2546:7:198","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":41885,"name":"_NOT_ENTERED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41856,"src":"2556:12:198","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2546:22:198","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":41887,"nodeType":"ExpressionStatement","src":"2546:22:198"}]},"documentation":{"id":41870,"nodeType":"StructuredDocumentation","src":"1805:354:198","text":" @dev Prevents a contract from calling itself, directly or indirectly.\n Calling a `nonReentrant` function from another `nonReentrant`\n function is not supported. It is possible to prevent this from happening\n by making the `nonReentrant` function external, and making it call a\n `private` function that does the actual work."},"id":41889,"name":"nonReentrant","nameLocation":"2171:12:198","nodeType":"ModifierDefinition","parameters":{"id":41871,"nodeType":"ParameterList","parameters":[],"src":"2183:2:198"},"src":"2162:411:198","virtual":false,"visibility":"internal"}],"scope":41891,"src":"873:1702:198","usedErrors":[]}],"src":"97:2479:198"},"id":198},"contracts/treasury/libs/SafeERC20.sol":{"ast":{"absolutePath":"contracts/treasury/libs/SafeERC20.sol","exportedSymbols":{"Address":[41850],"IERC20":[1442],"SafeERC20":[42116]},"id":42117,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":41892,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"100:23:199"},{"absolutePath":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","file":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol","id":41894,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42117,"sourceUnit":1443,"src":"125:94:199","symbolAliases":[{"foreign":{"id":41893,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"src":"133:6:199","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/treasury/libs/Address.sol","file":"./Address.sol","id":41896,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42117,"sourceUnit":41851,"src":"220:38:199","symbolAliases":[{"foreign":{"id":41895,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"src":"228:7:199","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"SafeERC20","contractDependencies":[],"contractKind":"library","documentation":{"id":41897,"nodeType":"StructuredDocumentation","src":"260:457:199","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":42116,"linearizedBaseContracts":[42116],"name":"SafeERC20","nameLocation":"726:9:199","nodeType":"ContractDefinition","nodes":[{"id":41900,"libraryName":{"id":41898,"name":"Address","nodeType":"IdentifierPath","referencedDeclaration":41850,"src":"746:7:199"},"nodeType":"UsingForDirective","src":"740:26:199","typeName":{"id":41899,"name":"address","nodeType":"ElementaryTypeName","src":"758:7:199","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"body":{"id":41922,"nodeType":"Block","src":"842:97:199","statements":[{"expression":{"arguments":[{"id":41911,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41903,"src":"868:5:199","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},{"arguments":[{"expression":{"expression":{"id":41914,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41903,"src":"898:5:199","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":41915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":1391,"src":"898:14:199","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":41916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"898:23:199","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":41917,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41905,"src":"923:2:199","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41918,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41907,"src":"927:5:199","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":41912,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"875:3:199","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":41913,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"875:22:199","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":41919,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"875:58:199","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":41910,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42115,"src":"848:19:199","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":41920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"848:86:199","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41921,"nodeType":"ExpressionStatement","src":"848:86:199"}]},"id":41923,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransfer","nameLocation":"779:12:199","nodeType":"FunctionDefinition","parameters":{"id":41908,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41903,"mutability":"mutable","name":"token","nameLocation":"799:5:199","nodeType":"VariableDeclaration","scope":41923,"src":"792:12:199","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":41902,"nodeType":"UserDefinedTypeName","pathNode":{"id":41901,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"792:6:199"},"referencedDeclaration":1442,"src":"792:6:199","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":41905,"mutability":"mutable","name":"to","nameLocation":"814:2:199","nodeType":"VariableDeclaration","scope":41923,"src":"806:10:199","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41904,"name":"address","nodeType":"ElementaryTypeName","src":"806:7:199","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41907,"mutability":"mutable","name":"value","nameLocation":"826:5:199","nodeType":"VariableDeclaration","scope":41923,"src":"818:13:199","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41906,"name":"uint256","nodeType":"ElementaryTypeName","src":"818:7:199","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"791:41:199"},"returnParameters":{"id":41909,"nodeType":"ParameterList","parameters":[],"src":"842:0:199"},"scope":42116,"src":"770:169:199","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":41948,"nodeType":"Block","src":"1033:125:199","statements":[{"expression":{"arguments":[{"id":41936,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41926,"src":"1066:5:199","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},{"arguments":[{"expression":{"expression":{"id":41939,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41926,"src":"1102:5:199","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":41940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":1423,"src":"1102:18:199","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":41941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"1102:27:199","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":41942,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41928,"src":"1131:4:199","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41943,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41930,"src":"1137:2:199","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41944,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41932,"src":"1141:5:199","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":41937,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1079:3:199","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":41938,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"1079:22:199","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":41945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1079:68:199","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":41935,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42115,"src":"1039:19:199","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":41946,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1039:114:199","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41947,"nodeType":"ExpressionStatement","src":"1039:114:199"}]},"id":41949,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"952:16:199","nodeType":"FunctionDefinition","parameters":{"id":41933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41926,"mutability":"mutable","name":"token","nameLocation":"976:5:199","nodeType":"VariableDeclaration","scope":41949,"src":"969:12:199","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":41925,"nodeType":"UserDefinedTypeName","pathNode":{"id":41924,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"969:6:199"},"referencedDeclaration":1442,"src":"969:6:199","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":41928,"mutability":"mutable","name":"from","nameLocation":"991:4:199","nodeType":"VariableDeclaration","scope":41949,"src":"983:12:199","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41927,"name":"address","nodeType":"ElementaryTypeName","src":"983:7:199","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41930,"mutability":"mutable","name":"to","nameLocation":"1005:2:199","nodeType":"VariableDeclaration","scope":41949,"src":"997:10:199","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41929,"name":"address","nodeType":"ElementaryTypeName","src":"997:7:199","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41932,"mutability":"mutable","name":"value","nameLocation":"1017:5:199","nodeType":"VariableDeclaration","scope":41949,"src":"1009:13:199","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41931,"name":"uint256","nodeType":"ElementaryTypeName","src":"1009:7:199","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"968:55:199"},"returnParameters":{"id":41934,"nodeType":"ParameterList","parameters":[],"src":"1033:0:199"},"scope":42116,"src":"943:215:199","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":41992,"nodeType":"Block","src":"1478:459:199","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":41976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":41961,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41957,"src":"1705:5:199","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":41962,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1714:1:199","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1705:10:199","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":41964,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1704:12:199","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":41969,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1745:4:199","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$42116","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$42116","typeString":"library SafeERC20"}],"id":41968,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1737:7:199","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":41967,"name":"address","nodeType":"ElementaryTypeName","src":"1737:7:199","typeDescriptions":{}}},"id":41970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1737:13:199","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41971,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41955,"src":"1752:7:199","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":41965,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41953,"src":"1721:5:199","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":41966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":1401,"src":"1721:15:199","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":41972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1721:39:199","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":41973,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1764:1:199","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1721:44:199","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":41975,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1720:46:199","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1704:62:199","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365","id":41977,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1774:56:199","typeDescriptions":{"typeIdentifier":"t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25","typeString":"literal_string \"SafeERC20: approve from non-zero to non-zero allowance\""},"value":"SafeERC20: approve from non-zero to non-zero allowance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25","typeString":"literal_string \"SafeERC20: approve from non-zero to non-zero allowance\""}],"id":41960,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1689:7:199","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":41978,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1689:147:199","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41979,"nodeType":"ExpressionStatement","src":"1689:147:199"},{"expression":{"arguments":[{"id":41981,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41953,"src":"1862:5:199","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},{"arguments":[{"expression":{"expression":{"id":41984,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41953,"src":"1892:5:199","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":41985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1411,"src":"1892:13:199","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":41986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"1892:22:199","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":41987,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41955,"src":"1916:7:199","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":41988,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41957,"src":"1925:5:199","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":41982,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1869:3:199","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":41983,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"1869:22:199","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":41989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1869:62:199","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":41980,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42115,"src":"1842:19:199","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":41990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1842:90:199","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41991,"nodeType":"ExpressionStatement","src":"1842:90:199"}]},"documentation":{"id":41950,"nodeType":"StructuredDocumentation","src":"1162:237:199","text":" @dev Deprecated. This function has issues similar to the ones found in\n {IERC20-approve}, and its usage is discouraged.\n Whenever possible, use {safeIncreaseAllowance} and\n {safeDecreaseAllowance} instead."},"id":41993,"implemented":true,"kind":"function","modifiers":[],"name":"safeApprove","nameLocation":"1411:11:199","nodeType":"FunctionDefinition","parameters":{"id":41958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41953,"mutability":"mutable","name":"token","nameLocation":"1430:5:199","nodeType":"VariableDeclaration","scope":41993,"src":"1423:12:199","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":41952,"nodeType":"UserDefinedTypeName","pathNode":{"id":41951,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1423:6:199"},"referencedDeclaration":1442,"src":"1423:6:199","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":41955,"mutability":"mutable","name":"spender","nameLocation":"1445:7:199","nodeType":"VariableDeclaration","scope":41993,"src":"1437:15:199","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41954,"name":"address","nodeType":"ElementaryTypeName","src":"1437:7:199","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41957,"mutability":"mutable","name":"value","nameLocation":"1462:5:199","nodeType":"VariableDeclaration","scope":41993,"src":"1454:13:199","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41956,"name":"uint256","nodeType":"ElementaryTypeName","src":"1454:7:199","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1422:46:199"},"returnParameters":{"id":41959,"nodeType":"ParameterList","parameters":[],"src":"1478:0:199"},"scope":42116,"src":"1402:535:199","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":42028,"nodeType":"Block","src":"2027:202:199","statements":[{"assignments":[42004],"declarations":[{"constant":false,"id":42004,"mutability":"mutable","name":"newAllowance","nameLocation":"2041:12:199","nodeType":"VariableDeclaration","scope":42028,"src":"2033:20:199","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42003,"name":"uint256","nodeType":"ElementaryTypeName","src":"2033:7:199","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":42015,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":42009,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2080:4:199","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$42116","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$42116","typeString":"library SafeERC20"}],"id":42008,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2072:7:199","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":42007,"name":"address","nodeType":"ElementaryTypeName","src":"2072:7:199","typeDescriptions":{}}},"id":42010,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2072:13:199","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42011,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41998,"src":"2087:7:199","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":42005,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41996,"src":"2056:5:199","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":42006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":1401,"src":"2056:15:199","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":42012,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2056:39:199","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":42013,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42000,"src":"2098:5:199","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2056:47:199","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2033:70:199"},{"expression":{"arguments":[{"id":42017,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41996,"src":"2136:5:199","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},{"arguments":[{"expression":{"expression":{"id":42020,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41996,"src":"2172:5:199","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":42021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1411,"src":"2172:13:199","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":42022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"2172:22:199","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":42023,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41998,"src":"2196:7:199","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42024,"name":"newAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42004,"src":"2205:12:199","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":42018,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2149:3:199","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":42019,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"2149:22:199","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":42025,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2149:69:199","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":42016,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42115,"src":"2109:19:199","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":42026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2109:115:199","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42027,"nodeType":"ExpressionStatement","src":"2109:115:199"}]},"id":42029,"implemented":true,"kind":"function","modifiers":[],"name":"safeIncreaseAllowance","nameLocation":"1950:21:199","nodeType":"FunctionDefinition","parameters":{"id":42001,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41996,"mutability":"mutable","name":"token","nameLocation":"1979:5:199","nodeType":"VariableDeclaration","scope":42029,"src":"1972:12:199","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":41995,"nodeType":"UserDefinedTypeName","pathNode":{"id":41994,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"1972:6:199"},"referencedDeclaration":1442,"src":"1972:6:199","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":41998,"mutability":"mutable","name":"spender","nameLocation":"1994:7:199","nodeType":"VariableDeclaration","scope":42029,"src":"1986:15:199","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41997,"name":"address","nodeType":"ElementaryTypeName","src":"1986:7:199","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42000,"mutability":"mutable","name":"value","nameLocation":"2011:5:199","nodeType":"VariableDeclaration","scope":42029,"src":"2003:13:199","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41999,"name":"uint256","nodeType":"ElementaryTypeName","src":"2003:7:199","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1971:46:199"},"returnParameters":{"id":42002,"nodeType":"ParameterList","parameters":[],"src":"2027:0:199"},"scope":42116,"src":"1941:288:199","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":42076,"nodeType":"Block","src":"2319:360:199","statements":[{"id":42075,"nodeType":"UncheckedBlock","src":"2325:350:199","statements":[{"assignments":[42040],"declarations":[{"constant":false,"id":42040,"mutability":"mutable","name":"oldAllowance","nameLocation":"2351:12:199","nodeType":"VariableDeclaration","scope":42075,"src":"2343:20:199","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42039,"name":"uint256","nodeType":"ElementaryTypeName","src":"2343:7:199","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":42049,"initialValue":{"arguments":[{"arguments":[{"id":42045,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2390:4:199","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$42116","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$42116","typeString":"library SafeERC20"}],"id":42044,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2382:7:199","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":42043,"name":"address","nodeType":"ElementaryTypeName","src":"2382:7:199","typeDescriptions":{}}},"id":42046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2382:13:199","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42047,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42034,"src":"2397:7:199","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":42041,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42032,"src":"2366:5:199","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":42042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":1401,"src":"2366:15:199","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":42048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2366:39:199","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2343:62:199"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42051,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42040,"src":"2421:12:199","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":42052,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42036,"src":"2437:5:199","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2421:21:199","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5361666545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f","id":42054,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2444:43:199","typeDescriptions":{"typeIdentifier":"t_stringliteral_2c3af60974a758b7e72e108c9bf0943ecc9e4f2e8af4695da5f52fbf57a63d3a","typeString":"literal_string \"SafeERC20: decreased allowance below zero\""},"value":"SafeERC20: decreased allowance below zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2c3af60974a758b7e72e108c9bf0943ecc9e4f2e8af4695da5f52fbf57a63d3a","typeString":"literal_string \"SafeERC20: decreased allowance below zero\""}],"id":42050,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2413:7:199","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":42055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2413:75:199","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42056,"nodeType":"ExpressionStatement","src":"2413:75:199"},{"assignments":[42058],"declarations":[{"constant":false,"id":42058,"mutability":"mutable","name":"newAllowance","nameLocation":"2504:12:199","nodeType":"VariableDeclaration","scope":42075,"src":"2496:20:199","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42057,"name":"uint256","nodeType":"ElementaryTypeName","src":"2496:7:199","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":42062,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42059,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42040,"src":"2519:12:199","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":42060,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42036,"src":"2534:5:199","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2519:20:199","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2496:43:199"},{"expression":{"arguments":[{"id":42064,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42032,"src":"2576:5:199","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},{"arguments":[{"expression":{"expression":{"id":42067,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42032,"src":"2614:5:199","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"id":42068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":1411,"src":"2614:13:199","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":42069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"selector","nodeType":"MemberAccess","src":"2614:22:199","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},{"id":42070,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42034,"src":"2638:7:199","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42071,"name":"newAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42058,"src":"2647:12:199","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":42065,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2591:3:199","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":42066,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"2591:22:199","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":42072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2591:69:199","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":42063,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42115,"src":"2547:19:199","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$1442_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":42073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2547:121:199","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42074,"nodeType":"ExpressionStatement","src":"2547:121:199"}]}]},"id":42077,"implemented":true,"kind":"function","modifiers":[],"name":"safeDecreaseAllowance","nameLocation":"2242:21:199","nodeType":"FunctionDefinition","parameters":{"id":42037,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42032,"mutability":"mutable","name":"token","nameLocation":"2271:5:199","nodeType":"VariableDeclaration","scope":42077,"src":"2264:12:199","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":42031,"nodeType":"UserDefinedTypeName","pathNode":{"id":42030,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"2264:6:199"},"referencedDeclaration":1442,"src":"2264:6:199","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":42034,"mutability":"mutable","name":"spender","nameLocation":"2286:7:199","nodeType":"VariableDeclaration","scope":42077,"src":"2278:15:199","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42033,"name":"address","nodeType":"ElementaryTypeName","src":"2278:7:199","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42036,"mutability":"mutable","name":"value","nameLocation":"2303:5:199","nodeType":"VariableDeclaration","scope":42077,"src":"2295:13:199","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42035,"name":"uint256","nodeType":"ElementaryTypeName","src":"2295:7:199","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2263:46:199"},"returnParameters":{"id":42038,"nodeType":"ParameterList","parameters":[],"src":"2319:0:199"},"scope":42116,"src":"2233:446:199","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":42114,"nodeType":"Block","src":"3118:598:199","statements":[{"assignments":[42087],"declarations":[{"constant":false,"id":42087,"mutability":"mutable","name":"returndata","nameLocation":"3464:10:199","nodeType":"VariableDeclaration","scope":42114,"src":"3451:23:199","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42086,"name":"bytes","nodeType":"ElementaryTypeName","src":"3451:5:199","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":42096,"initialValue":{"arguments":[{"id":42093,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42083,"src":"3505:4:199","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564","id":42094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3511:34:199","typeDescriptions":{"typeIdentifier":"t_stringliteral_47fb62c2c272651d2f0f342bac006756b8ba07f21cc5cb87e0fbb9d50c0c585b","typeString":"literal_string \"SafeERC20: low-level call failed\""},"value":"SafeERC20: low-level call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_47fb62c2c272651d2f0f342bac006756b8ba07f21cc5cb87e0fbb9d50c0c585b","typeString":"literal_string \"SafeERC20: low-level call failed\""}],"expression":{"arguments":[{"id":42090,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42081,"src":"3485:5:199","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}],"id":42089,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3477:7:199","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":42088,"name":"address","nodeType":"ElementaryTypeName","src":"3477:7:199","typeDescriptions":{}}},"id":42091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3477:14:199","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":42092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"functionCall","nodeType":"MemberAccess","referencedDeclaration":41644,"src":"3477:27:199","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_address_$","typeString":"function (address,bytes memory,string memory) returns (bytes memory)"}},"id":42095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3477:69:199","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3451:95:199"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":42097,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42087,"src":"3556:10:199","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":42098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"3556:17:199","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":42099,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3576:1:199","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3556:21:199","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42113,"nodeType":"IfStatement","src":"3552:160:199","trueBody":{"id":42112,"nodeType":"Block","src":"3579:133:199","statements":[{"expression":{"arguments":[{"arguments":[{"id":42104,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42087,"src":"3639:10:199","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":42106,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3652:4:199","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":42105,"name":"bool","nodeType":"ElementaryTypeName","src":"3652:4:199","typeDescriptions":{}}}],"id":42107,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3651:6:199","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":42102,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3628:3:199","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":42103,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"decode","nodeType":"MemberAccess","src":"3628:10:199","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":42108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3628:30:199","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564","id":42109,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3660:44:199","typeDescriptions":{"typeIdentifier":"t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd","typeString":"literal_string \"SafeERC20: ERC20 operation did not succeed\""},"value":"SafeERC20: ERC20 operation did not succeed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd","typeString":"literal_string \"SafeERC20: ERC20 operation did not succeed\""}],"id":42101,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3620:7:199","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":42110,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3620:85:199","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42111,"nodeType":"ExpressionStatement","src":"3620:85:199"}]}}]},"documentation":{"id":42078,"nodeType":"StructuredDocumentation","src":"2683:362:199","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants)."},"id":42115,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturn","nameLocation":"3057:19:199","nodeType":"FunctionDefinition","parameters":{"id":42084,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42081,"mutability":"mutable","name":"token","nameLocation":"3084:5:199","nodeType":"VariableDeclaration","scope":42115,"src":"3077:12:199","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"},"typeName":{"id":42080,"nodeType":"UserDefinedTypeName","pathNode":{"id":42079,"name":"IERC20","nodeType":"IdentifierPath","referencedDeclaration":1442,"src":"3077:6:199"},"referencedDeclaration":1442,"src":"3077:6:199","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$1442","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":42083,"mutability":"mutable","name":"data","nameLocation":"3104:4:199","nodeType":"VariableDeclaration","scope":42115,"src":"3091:17:199","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42082,"name":"bytes","nodeType":"ElementaryTypeName","src":"3091:5:199","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3076:33:199"},"returnParameters":{"id":42085,"nodeType":"ParameterList","parameters":[],"src":"3118:0:199"},"scope":42116,"src":"3048:668:199","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":42117,"src":"718:3000:199","usedErrors":[]}],"src":"100:3619:199"},"id":199},"contracts/treasury/libs/VersionedInitializable.sol":{"ast":{"absolutePath":"contracts/treasury/libs/VersionedInitializable.sol","exportedSymbols":{"VersionedInitializable":[42155]},"id":42156,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":42118,"literals":["solidity","^","0.8",".10"],"nodeType":"PragmaDirective","src":"32:24:200"},{"abstract":true,"baseContracts":[],"canonicalName":"VersionedInitializable","contractDependencies":[],"contractKind":"contract","documentation":{"id":42119,"nodeType":"StructuredDocumentation","src":"58:702:200","text":" @title VersionedInitializable\n @dev Helper contract to support initializer functions. To use it, replace\n the constructor with a function that has the `initializer` modifier.\n WARNING: Unlike constructors, initializer functions must be manually\n invoked. This applies both to deploying an Initializable contract, as well\n as extending an Initializable contract via inheritance.\n WARNING: When used with inheritance, manual care must be taken to not invoke\n a parent initializer twice, or ensure that all initializers are idempotent,\n because this is not dealt with automatically as with constructors.\n @author Aave, inspired by the OpenZeppelin Initializable contract"},"fullyImplemented":false,"id":42155,"linearizedBaseContracts":[42155],"name":"VersionedInitializable","nameLocation":"779:22:200","nodeType":"ContractDefinition","nodes":[{"constant":false,"documentation":{"id":42120,"nodeType":"StructuredDocumentation","src":"806:69:200","text":" @dev Indicates that the contract has been initialized."},"id":42123,"mutability":"mutable","name":"lastInitializedRevision","nameLocation":"895:23:200","nodeType":"VariableDeclaration","scope":42155,"src":"878:44:200","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42121,"name":"uint256","nodeType":"ElementaryTypeName","src":"878:7:200","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":42122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"921:1:200","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"internal"},{"body":{"id":42143,"nodeType":"Block","src":"1031:191:200","statements":[{"assignments":[42127],"declarations":[{"constant":false,"id":42127,"mutability":"mutable","name":"revision","nameLocation":"1045:8:200","nodeType":"VariableDeclaration","scope":42143,"src":"1037:16:200","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42126,"name":"uint256","nodeType":"ElementaryTypeName","src":"1037:7:200","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":42130,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":42128,"name":"getRevision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42150,"src":"1056:11:200","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_uint256_$","typeString":"function () pure returns (uint256)"}},"id":42129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1056:13:200","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1037:32:200"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42132,"name":"revision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42127,"src":"1083:8:200","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":42133,"name":"lastInitializedRevision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42123,"src":"1094:23:200","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1083:34:200","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564","id":42135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1119:48:200","typeDescriptions":{"typeIdentifier":"t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4","typeString":"literal_string \"Contract instance has already been initialized\""},"value":"Contract instance has already been initialized"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4","typeString":"literal_string \"Contract instance has already been initialized\""}],"id":42131,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1075:7:200","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":42136,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1075:93:200","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":42137,"nodeType":"ExpressionStatement","src":"1075:93:200"},{"expression":{"id":42140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42138,"name":"lastInitializedRevision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42123,"src":"1175:23:200","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":42139,"name":"revision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42127,"src":"1201:8:200","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1175:34:200","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42141,"nodeType":"ExpressionStatement","src":"1175:34:200"},{"id":42142,"nodeType":"PlaceholderStatement","src":"1216:1:200"}]},"documentation":{"id":42124,"nodeType":"StructuredDocumentation","src":"927:78:200","text":" @dev Modifier to use in the initializer function of a contract."},"id":42144,"name":"initializer","nameLocation":"1017:11:200","nodeType":"ModifierDefinition","parameters":{"id":42125,"nodeType":"ParameterList","parameters":[],"src":"1028:2:200"},"src":"1008:214:200","virtual":false,"visibility":"internal"},{"documentation":{"id":42145,"nodeType":"StructuredDocumentation","src":"1226:117:200","text":"@dev returns the revision number of the contract.\n Needs to be defined in the inherited class as a constant."},"id":42150,"implemented":false,"kind":"function","modifiers":[],"name":"getRevision","nameLocation":"1355:11:200","nodeType":"FunctionDefinition","parameters":{"id":42146,"nodeType":"ParameterList","parameters":[],"src":"1366:2:200"},"returnParameters":{"id":42149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42148,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42150,"src":"1400:7:200","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42147,"name":"uint256","nodeType":"ElementaryTypeName","src":"1400:7:200","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1399:9:200"},"scope":42155,"src":"1346:63:200","stateMutability":"pure","virtual":true,"visibility":"internal"},{"constant":false,"id":42154,"mutability":"mutable","name":"______gap","nameLocation":"1504:9:200","nodeType":"VariableDeclaration","scope":42155,"src":"1484:29:200","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage","typeString":"uint256[50]"},"typeName":{"baseType":{"id":42151,"name":"uint256","nodeType":"ElementaryTypeName","src":"1484:7:200","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42153,"length":{"hexValue":"3530","id":42152,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1492:2:200","typeDescriptions":{"typeIdentifier":"t_rational_50_by_1","typeString":"int_const 50"},"value":"50"},"nodeType":"ArrayTypeName","src":"1484:11:200","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage_ptr","typeString":"uint256[50]"}},"visibility":"private"}],"scope":42156,"src":"761:755:200","usedErrors":[]}],"src":"32:1485:200"},"id":200}},"contracts":{"@aave/core-v3/contracts/dependencies/chainlink/AggregatorInterface.sol":{"AggregatorInterface":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"int256","name":"current","type":"int256"},{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"updatedAt","type":"uint256"}],"name":"AnswerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":true,"internalType":"address","name":"startedBy","type":"address"},{"indexed":false,"internalType":"uint256","name":"startedAt","type":"uint256"}],"name":"NewRound","type":"event"},{"inputs":[{"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"getAnswer","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"getTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestAnswer","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getAnswer(uint256)":"b5ab58dc","getTimestamp(uint256)":"b633620c","latestAnswer()":"50d25bcd","latestRound()":"668a0f02","latestTimestamp()":"8205bf6a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"int256\",\"name\":\"current\",\"type\":\"int256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"}],\"name\":\"AnswerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"startedBy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"}],\"name\":\"NewRound\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"}],\"name\":\"getAnswer\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"}],\"name\":\"getTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestAnswer\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/dependencies/chainlink/AggregatorInterface.sol\":\"AggregatorInterface\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/chainlink/AggregatorInterface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Chainlink Contracts v0.8\\npragma solidity ^0.8.0;\\n\\ninterface AggregatorInterface {\\n  function latestAnswer() external view returns (int256);\\n\\n  function latestTimestamp() external view returns (uint256);\\n\\n  function latestRound() external view returns (uint256);\\n\\n  function getAnswer(uint256 roundId) external view returns (int256);\\n\\n  function getTimestamp(uint256 roundId) external view returns (uint256);\\n\\n  event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 updatedAt);\\n\\n  event NewRound(uint256 indexed roundId, address indexed startedBy, uint256 startedAt);\\n}\\n\",\"keccak256\":\"0x07df0744d1a393c574d7ee11b75a1690a82f3136a79c76b933724872298bf718\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol":{"GPv2SafeERC20":{"abi":[],"devdoc":{"author":"Gnosis Developers","details":"Gas-efficient version of Openzeppelin's SafeERC20 contract.","kind":"dev","methods":{},"title":"Gnosis Protocol v2 Safe ERC20 Transfer Library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122069de5d51b092c9ba2482b82f6b73ed30a7c2cfbc3dc6ee513ea6d16b115dc0f164736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH10 0xDE5D51B092C9BA2482B8 0x2F PUSH12 0x73ED30A7C2CFBC3DC6EE513E 0xA6 0xD1 PUSH12 0x115DC0F164736F6C63430008 EXP STOP CALLER ","sourceMap":"293:4431:1:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;293:4431:1;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122069de5d51b092c9ba2482b82f6b73ed30a7c2cfbc3dc6ee513ea6d16b115dc0f164736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH10 0xDE5D51B092C9BA2482B8 0x2F PUSH12 0x73ED30A7C2CFBC3DC6EE513E 0xA6 0xD1 PUSH12 0x115DC0F164736F6C63430008 EXP STOP CALLER ","sourceMap":"293:4431:1:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"getLastTransferResult(contract IERC20)":"infinite","safeTransfer(contract IERC20,address,uint256)":"infinite","safeTransferFrom(contract IERC20,address,address,uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Gnosis Developers\",\"details\":\"Gas-efficient version of Openzeppelin's SafeERC20 contract.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Gnosis Protocol v2 Safe ERC20 Transfer Library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":\"GPv2SafeERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/AccessControl.sol":{"AccessControl":{"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":"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"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"Contract module that allows children to implement role-based access control mechanisms. This is a lightweight version that doesn't allow enumerating role members except through off-chain means by accessing the contract event logs. Some applications may benefit from on-chain enumerability, for those cases see {AccessControlEnumerable}. 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.","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}."},"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."},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"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\":\"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\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module that allows children to implement role-based access control mechanisms. This is a lightweight version that doesn't allow enumerating role members except through off-chain means by accessing the contract event logs. Some applications may benefit from on-chain enumerability, for those cases see {AccessControlEnumerable}. 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.\",\"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}.\"},\"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.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/AccessControl.sol\":\"AccessControl\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './IAccessControl.sol';\\nimport './Context.sol';\\nimport './Strings.sol';\\nimport './ERC165.sol';\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\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 AccessControl is Context, IAccessControl, ERC165 {\\n  struct RoleData {\\n    mapping(address => bool) 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 Modifier that checks that an account has a specific role. Reverts\\n   * with a standardized message including the required role.\\n   *\\n   * The format of the revert reason is given by the following regular expression:\\n   *\\n   *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n   *\\n   * _Available since v4.1._\\n   */\\n  modifier onlyRole(bytes32 role) {\\n    _checkRole(role, _msgSender());\\n    _;\\n  }\\n\\n  /**\\n   * @dev See {IERC165-supportsInterface}.\\n   */\\n  function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n    return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n  }\\n\\n  /**\\n   * @dev Returns `true` if `account` has been granted `role`.\\n   */\\n  function hasRole(bytes32 role, address account) public view override returns (bool) {\\n    return _roles[role].members[account];\\n  }\\n\\n  /**\\n   * @dev Revert with a standard message if `account` is missing `role`.\\n   *\\n   * The format of the revert reason is given by the following regular expression:\\n   *\\n   *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n   */\\n  function _checkRole(bytes32 role, address account) internal view {\\n    if (!hasRole(role, account)) {\\n      revert(\\n        string(\\n          abi.encodePacked(\\n            'AccessControl: account ',\\n            Strings.toHexString(uint160(account), 20),\\n            ' is missing role ',\\n            Strings.toHexString(uint256(role), 32)\\n          )\\n        )\\n      );\\n    }\\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 override 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(\\n    bytes32 role,\\n    address account\\n  ) public virtual override onlyRole(getRoleAdmin(role)) {\\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(\\n    bytes32 role,\\n    address account\\n  ) public virtual override onlyRole(getRoleAdmin(role)) {\\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 override {\\n    require(account == _msgSender(), '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    bytes32 previousAdminRole = getRoleAdmin(role);\\n    _roles[role].adminRole = adminRole;\\n    emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n  }\\n\\n  function _grantRole(bytes32 role, address account) private {\\n    if (!hasRole(role, account)) {\\n      _roles[role].members[account] = true;\\n      emit RoleGranted(role, account, _msgSender());\\n    }\\n  }\\n\\n  function _revokeRole(bytes32 role, address account) private {\\n    if (hasRole(role, account)) {\\n      _roles[role].members[account] = false;\\n      emit RoleRevoked(role, account, _msgSender());\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xee6ee05b311d9683fe6402b9c396d3767bb1c7517a8ac7fb270d6c09facefb36\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './IERC165.sol';\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n  /**\\n   * @dev See {IERC165-supportsInterface}.\\n   */\\n  function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n    return interfaceId == type(IERC165).interfaceId;\\n  }\\n}\\n\",\"keccak256\":\"0x583726b0d457b859eb327ac9838dd3ee345e1956a47cd0a5cd0c0c3c17277eef\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\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(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\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 {AccessControl-_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) external view returns (bool);\\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 {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\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) external;\\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) external;\\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) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n  /**\\n   * @dev Returns true if this contract implements the interface defined by\\n   * `interfaceId`. See the corresponding\\n   * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n   * to learn more about how these ids are created.\\n   *\\n   * This function call must use less than 30 000 gas.\\n   */\\n  function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xbca9de297214bb9c30daefda5ecaedd0af2c3e8e0440403ad543fb33528c5ef8\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n  bytes16 private constant _HEX_SYMBOLS = '0123456789abcdef';\\n\\n  /**\\n   * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n   */\\n  function toString(uint256 value) internal pure returns (string memory) {\\n    // Inspired by OraclizeAPI's implementation - MIT licence\\n    // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n    if (value == 0) {\\n      return '0';\\n    }\\n    uint256 temp = value;\\n    uint256 digits;\\n    while (temp != 0) {\\n      digits++;\\n      temp /= 10;\\n    }\\n    bytes memory buffer = new bytes(digits);\\n    while (value != 0) {\\n      digits -= 1;\\n      buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));\\n      value /= 10;\\n    }\\n    return string(buffer);\\n  }\\n\\n  /**\\n   * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n   */\\n  function toHexString(uint256 value) internal pure returns (string memory) {\\n    if (value == 0) {\\n      return '0x00';\\n    }\\n    uint256 temp = value;\\n    uint256 length = 0;\\n    while (temp != 0) {\\n      length++;\\n      temp >>= 8;\\n    }\\n    return toHexString(value, length);\\n  }\\n\\n  /**\\n   * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n   */\\n  function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n    bytes memory buffer = new bytes(2 * length + 2);\\n    buffer[0] = '0';\\n    buffer[1] = 'x';\\n    for (uint256 i = 2 * length + 1; i > 1; --i) {\\n      buffer[i] = _HEX_SYMBOLS[value & 0xf];\\n      value >>= 4;\\n    }\\n    require(value == 0, 'Strings: hex length insufficient');\\n    return string(buffer);\\n  }\\n}\\n\",\"keccak256\":\"0xb2754a420cad582ee384ce1075833bc78411b4e27198019fe762066f7a72946a\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":143,"contract":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/AccessControl.sol:AccessControl","label":"_roles","offset":0,"slot":"0","type":"t_mapping(t_bytes32,t_struct(RoleData)138_storage)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_struct(RoleData)138_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct AccessControl.RoleData)","numberOfBytes":"32","value":"t_struct(RoleData)138_storage"},"t_struct(RoleData)138_storage":{"encoding":"inplace","label":"struct AccessControl.RoleData","members":[{"astId":135,"contract":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/AccessControl.sol:AccessControl","label":"members","offset":0,"slot":"0","type":"t_mapping(t_address,t_bool)"},{"astId":137,"contract":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/AccessControl.sol:AccessControl","label":"adminRole","offset":0,"slot":"1","type":"t_bytes32"}],"numberOfBytes":"64"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol":{"Address":{"abi":[],"devdoc":{"details":"Collection of functions related to the address type","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220f9f20014eafb7e762a73dd65eaaca75251a013fcb03c5723aec42619eb2fe24364736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF9 CALLCODE STOP EQ 0xEA 0xFB PUSH31 0x762A73DD65EAACA75251A013FCB03C5723AEC42619EB2FE24364736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"179:7201:3:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;179:7201:3;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220f9f20014eafb7e762a73dd65eaaca75251a013fcb03c5723aec42619eb2fe24364736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF9 CALLCODE STOP EQ 0xEA 0xFB PUSH31 0x762A73DD65EAACA75251A013FCB03C5723AEC42619EB2FE24364736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"179:7201:3:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"functionCall(address,bytes memory)":"infinite","functionCall(address,bytes memory,string memory)":"infinite","functionCallWithValue(address,bytes memory,uint256)":"infinite","functionCallWithValue(address,bytes memory,uint256,string memory)":"infinite","functionDelegateCall(address,bytes memory)":"infinite","functionDelegateCall(address,bytes memory,string memory)":"infinite","functionStaticCall(address,bytes memory)":"infinite","functionStaticCall(address,bytes memory,string memory)":"infinite","isContract(address)":"infinite","sendValue(address payable,uint256)":"infinite","verifyCallResult(bool,bytes memory,string memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"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\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":\"Address\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol":{"Context":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":\"Context\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC165.sol":{"ERC165":{"abi":[{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"Implementation of the {IERC165} interface. Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check for the additional interface id that will be supported. For example: ```solidity function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); } ``` Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.","kind":"dev","methods":{"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC165} interface. Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check for the additional interface id that will be supported. For example: ```solidity function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); } ``` Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC165.sol\":\"ERC165\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './IERC165.sol';\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n  /**\\n   * @dev See {IERC165-supportsInterface}.\\n   */\\n  function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n    return interfaceId == type(IERC165).interfaceId;\\n  }\\n}\\n\",\"keccak256\":\"0x583726b0d457b859eb327ac9838dd3ee345e1956a47cd0a5cd0c0c3c17277eef\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n  /**\\n   * @dev Returns true if this contract implements the interface defined by\\n   * `interfaceId`. See the corresponding\\n   * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n   * to learn more about how these ids are created.\\n   *\\n   * This function call must use less than 30 000 gas.\\n   */\\n  function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xbca9de297214bb9c30daefda5ecaedd0af2c3e8e0440403ad543fb33528c5ef8\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/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"}],"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},"evm":{"bytecode":{"functionDebugData":{"@_828":{"entryPoint":null,"id":828,"parameterSlots":2,"returnSlots":0},"abi_decode_string_fromMemory":{"entryPoint":305,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr_fromMemory":{"entryPoint":488,"id":null,"parameterSlots":2,"returnSlots":2},"extract_byte_array_length":{"entryPoint":594,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x41":{"entryPoint":283,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1985:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"46:95:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"63:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"70:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"75:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"66:3:201"},"nodeType":"YulFunctionCall","src":"66:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"56:6:201"},"nodeType":"YulFunctionCall","src":"56:31:201"},"nodeType":"YulExpressionStatement","src":"56:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"103:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"106:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"96:6:201"},"nodeType":"YulFunctionCall","src":"96:15:201"},"nodeType":"YulExpressionStatement","src":"96:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"127:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"130:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"120:6:201"},"nodeType":"YulFunctionCall","src":"120:15:201"},"nodeType":"YulExpressionStatement","src":"120:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"14:127:201"},{"body":{"nodeType":"YulBlock","src":"210:821:201","statements":[{"body":{"nodeType":"YulBlock","src":"259:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"268:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"271:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"261:6:201"},"nodeType":"YulFunctionCall","src":"261:12:201"},"nodeType":"YulExpressionStatement","src":"261:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"238:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"246:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"234:3:201"},"nodeType":"YulFunctionCall","src":"234:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"253:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"230:3:201"},"nodeType":"YulFunctionCall","src":"230:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"223:6:201"},"nodeType":"YulFunctionCall","src":"223:35:201"},"nodeType":"YulIf","src":"220:55:201"},{"nodeType":"YulVariableDeclaration","src":"284:23:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"300:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"294:5:201"},"nodeType":"YulFunctionCall","src":"294:13:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"288:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"316:28:201","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"334:2:201","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"338:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"330:3:201"},"nodeType":"YulFunctionCall","src":"330:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"342:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"326:3:201"},"nodeType":"YulFunctionCall","src":"326:18:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"320:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"367:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"369:16:201"},"nodeType":"YulFunctionCall","src":"369:18:201"},"nodeType":"YulExpressionStatement","src":"369:18:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"359:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"363:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"356:2:201"},"nodeType":"YulFunctionCall","src":"356:10:201"},"nodeType":"YulIf","src":"353:36:201"},{"nodeType":"YulVariableDeclaration","src":"398:17:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"412:2:201","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"408:3:201"},"nodeType":"YulFunctionCall","src":"408:7:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"402:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"424:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"444:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"438:5:201"},"nodeType":"YulFunctionCall","src":"438:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"428:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"456:71:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"478:6:201"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"502:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"506:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"498:3:201"},"nodeType":"YulFunctionCall","src":"498:13:201"},{"name":"_3","nodeType":"YulIdentifier","src":"513:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"494:3:201"},"nodeType":"YulFunctionCall","src":"494:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"518:2:201","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"490:3:201"},"nodeType":"YulFunctionCall","src":"490:31:201"},{"name":"_3","nodeType":"YulIdentifier","src":"523:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"486:3:201"},"nodeType":"YulFunctionCall","src":"486:40:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"474:3:201"},"nodeType":"YulFunctionCall","src":"474:53:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"460:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"586:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"588:16:201"},"nodeType":"YulFunctionCall","src":"588:18:201"},"nodeType":"YulExpressionStatement","src":"588:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"545:10:201"},{"name":"_2","nodeType":"YulIdentifier","src":"557:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"542:2:201"},"nodeType":"YulFunctionCall","src":"542:18:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"565:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"577:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"562:2:201"},"nodeType":"YulFunctionCall","src":"562:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"539:2:201"},"nodeType":"YulFunctionCall","src":"539:46:201"},"nodeType":"YulIf","src":"536:72:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"624:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"628:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"617:6:201"},"nodeType":"YulFunctionCall","src":"617:22:201"},"nodeType":"YulExpressionStatement","src":"617:22:201"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"655:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"663:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"648:6:201"},"nodeType":"YulFunctionCall","src":"648:18:201"},"nodeType":"YulExpressionStatement","src":"648:18:201"},{"nodeType":"YulVariableDeclaration","src":"675:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"685:4:201","type":"","value":"0x20"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"679:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"735:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"744:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"747:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"737:6:201"},"nodeType":"YulFunctionCall","src":"737:12:201"},"nodeType":"YulExpressionStatement","src":"737:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"712:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"720:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"708:3:201"},"nodeType":"YulFunctionCall","src":"708:15:201"},{"name":"_4","nodeType":"YulIdentifier","src":"725:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"704:3:201"},"nodeType":"YulFunctionCall","src":"704:24:201"},{"name":"end","nodeType":"YulIdentifier","src":"730:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"701:2:201"},"nodeType":"YulFunctionCall","src":"701:33:201"},"nodeType":"YulIf","src":"698:53:201"},{"nodeType":"YulVariableDeclaration","src":"760:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"769:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"764:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"825:87:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"854:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"862:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"850:3:201"},"nodeType":"YulFunctionCall","src":"850:14:201"},{"name":"_4","nodeType":"YulIdentifier","src":"866:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"846:3:201"},"nodeType":"YulFunctionCall","src":"846:23:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"885:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"893:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"881:3:201"},"nodeType":"YulFunctionCall","src":"881:14:201"},{"name":"_4","nodeType":"YulIdentifier","src":"897:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"877:3:201"},"nodeType":"YulFunctionCall","src":"877:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"871:5:201"},"nodeType":"YulFunctionCall","src":"871:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"839:6:201"},"nodeType":"YulFunctionCall","src":"839:63:201"},"nodeType":"YulExpressionStatement","src":"839:63:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"790:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"793:2:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"787:2:201"},"nodeType":"YulFunctionCall","src":"787:9:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"797:19:201","statements":[{"nodeType":"YulAssignment","src":"799:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"808:1:201"},{"name":"_4","nodeType":"YulIdentifier","src":"811:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"804:3:201"},"nodeType":"YulFunctionCall","src":"804:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"799:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"783:3:201","statements":[]},"src":"779:133:201"},{"body":{"nodeType":"YulBlock","src":"942:59:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"971:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"979:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"967:3:201"},"nodeType":"YulFunctionCall","src":"967:15:201"},{"name":"_4","nodeType":"YulIdentifier","src":"984:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"963:3:201"},"nodeType":"YulFunctionCall","src":"963:24:201"},{"kind":"number","nodeType":"YulLiteral","src":"989:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"956:6:201"},"nodeType":"YulFunctionCall","src":"956:35:201"},"nodeType":"YulExpressionStatement","src":"956:35:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"927:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"930:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"924:2:201"},"nodeType":"YulFunctionCall","src":"924:9:201"},"nodeType":"YulIf","src":"921:80:201"},{"nodeType":"YulAssignment","src":"1010:15:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1019:6:201"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"1010:5:201"}]}]},"name":"abi_decode_string_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"184:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"192:3:201","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"200:5:201","type":""}],"src":"146:885:201"},{"body":{"nodeType":"YulBlock","src":"1154:444:201","statements":[{"body":{"nodeType":"YulBlock","src":"1200:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1209:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1212:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1202:6:201"},"nodeType":"YulFunctionCall","src":"1202:12:201"},"nodeType":"YulExpressionStatement","src":"1202:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1175:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1184:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1171:3:201"},"nodeType":"YulFunctionCall","src":"1171:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1196:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1167:3:201"},"nodeType":"YulFunctionCall","src":"1167:32:201"},"nodeType":"YulIf","src":"1164:52:201"},{"nodeType":"YulVariableDeclaration","src":"1225:30:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1245:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1239:5:201"},"nodeType":"YulFunctionCall","src":"1239:16:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1229:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1264:28:201","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1282:2:201","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"1286:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1278:3:201"},"nodeType":"YulFunctionCall","src":"1278:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"1290:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1274:3:201"},"nodeType":"YulFunctionCall","src":"1274:18:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1268:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1319:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1328:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1331:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1321:6:201"},"nodeType":"YulFunctionCall","src":"1321:12:201"},"nodeType":"YulExpressionStatement","src":"1321:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1307:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1315:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1304:2:201"},"nodeType":"YulFunctionCall","src":"1304:14:201"},"nodeType":"YulIf","src":"1301:34:201"},{"nodeType":"YulAssignment","src":"1344:71:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1387:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"1398:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1383:3:201"},"nodeType":"YulFunctionCall","src":"1383:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1407:7:201"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"1354:28:201"},"nodeType":"YulFunctionCall","src":"1354:61:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1344:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1424:41:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1450:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1461:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1446:3:201"},"nodeType":"YulFunctionCall","src":"1446:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1440:5:201"},"nodeType":"YulFunctionCall","src":"1440:25:201"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"1428:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1494:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1503:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1506:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1496:6:201"},"nodeType":"YulFunctionCall","src":"1496:12:201"},"nodeType":"YulExpressionStatement","src":"1496:12:201"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"1480:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1490:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1477:2:201"},"nodeType":"YulFunctionCall","src":"1477:16:201"},"nodeType":"YulIf","src":"1474:36:201"},{"nodeType":"YulAssignment","src":"1519:73:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1562:9:201"},{"name":"offset_1","nodeType":"YulIdentifier","src":"1573:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1558:3:201"},"nodeType":"YulFunctionCall","src":"1558:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1584:7:201"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"1529:28:201"},"nodeType":"YulFunctionCall","src":"1529:63:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1519:6:201"}]}]},"name":"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1112:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1123:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1135:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1143:6:201","type":""}],"src":"1036:562:201"},{"body":{"nodeType":"YulBlock","src":"1658:325:201","statements":[{"nodeType":"YulAssignment","src":"1668:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1682:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"1685:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1678:3:201"},"nodeType":"YulFunctionCall","src":"1678:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"1668:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1699:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"1729:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"1735:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1725:3:201"},"nodeType":"YulFunctionCall","src":"1725:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"1703:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1776:31:201","statements":[{"nodeType":"YulAssignment","src":"1778:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1792:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1800:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1788:3:201"},"nodeType":"YulFunctionCall","src":"1788:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"1778:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"1756:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1749:6:201"},"nodeType":"YulFunctionCall","src":"1749:26:201"},"nodeType":"YulIf","src":"1746:61:201"},{"body":{"nodeType":"YulBlock","src":"1866:111:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1887:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1894:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1899:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1890:3:201"},"nodeType":"YulFunctionCall","src":"1890:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1880:6:201"},"nodeType":"YulFunctionCall","src":"1880:31:201"},"nodeType":"YulExpressionStatement","src":"1880:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1931:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1934:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1924:6:201"},"nodeType":"YulFunctionCall","src":"1924:15:201"},"nodeType":"YulExpressionStatement","src":"1924:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1959:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1962:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1952:6:201"},"nodeType":"YulFunctionCall","src":"1952:15:201"},"nodeType":"YulExpressionStatement","src":"1952:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"1822:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1845:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1853:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1842:2:201"},"nodeType":"YulFunctionCall","src":"1842:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1819:2:201"},"nodeType":"YulFunctionCall","src":"1819:38:201"},"nodeType":"YulIf","src":"1816:161:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"1638:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"1647:6:201","type":""}],"src":"1603:380:201"}]},"contents":"{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_string_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := mload(offset)\n        let _2 := sub(shl(64, 1), 1)\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        let _4 := 0x20\n        if gt(add(add(offset, _1), _4), end) { revert(0, 0) }\n        let i := 0\n        for { } lt(i, _1) { i := add(i, _4) }\n        {\n            mstore(add(add(memPtr, i), _4), mload(add(add(offset, i), _4)))\n        }\n        if gt(i, _1)\n        {\n            mstore(add(add(memPtr, _1), _4), 0)\n        }\n        array := memPtr\n    }\n    function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        value0 := abi_decode_string_fromMemory(add(headStart, offset), dataEnd)\n        let offset_1 := mload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_string_fromMemory(add(headStart, offset_1), dataEnd)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60806040523480156200001157600080fd5b5060405162000d0d38038062000d0d8339810160408190526200003491620001e8565b81516200004990600390602085019062000075565b5080516200005f90600490602084019062000075565b50506005805460ff19166012179055506200028f565b828054620000839062000252565b90600052602060002090601f016020900481019282620000a75760008555620000f2565b82601f10620000c257805160ff1916838001178555620000f2565b82800160010185558215620000f2579182015b82811115620000f2578251825591602001919060010190620000d5565b506200010092915062000104565b5090565b5b8082111562000100576000815560010162000105565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200014357600080fd5b81516001600160401b03808211156200016057620001606200011b565b604051601f8301601f19908116603f011681019082821181831017156200018b576200018b6200011b565b81604052838152602092508683858801011115620001a857600080fd5b600091505b83821015620001cc5785820183015181830184015290820190620001ad565b83821115620001de5760008385830101525b9695505050505050565b60008060408385031215620001fc57600080fd5b82516001600160401b03808211156200021457600080fd5b620002228683870162000131565b935060208501519150808211156200023957600080fd5b50620002488582860162000131565b9150509250929050565b600181811c908216806200026757607f821691505b602082108114156200028957634e487b7160e01b600052602260045260246000fd5b50919050565b610a6e806200029f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80633950935111610081578063a457c2d71161005b578063a457c2d71461019a578063a9059cbb146101ad578063dd62ed3e146101c057600080fd5b8063395093511461014957806370a082311461015c57806395d89b411461019257600080fd5b806318160ddd116100b257806318160ddd1461010f57806323b872dd14610121578063313ce5671461013457600080fd5b806306fdde03146100ce578063095ea7b3146100ec575b600080fd5b6100d6610206565b6040516100e3919061081a565b60405180910390f35b6100ff6100fa3660046108b6565b610298565b60405190151581526020016100e3565b6002545b6040519081526020016100e3565b6100ff61012f3660046108e0565b6102af565b60055460405160ff90911681526020016100e3565b6100ff6101573660046108b6565b610325565b61011361016a36600461091c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100d6610368565b6100ff6101a83660046108b6565b610377565b6100ff6101bb3660046108b6565b6103d3565b6101136101ce36600461093e565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461021590610971565b80601f016020809104026020016040519081016040528092919081815260200182805461024190610971565b801561028e5780601f106102635761010080835404028352916020019161028e565b820191906000526020600020905b81548152906001019060200180831161027157829003601f168201915b5050505050905090565b60006102a53384846103e0565b5060015b92915050565b60006102bc848484610599565b61031b8433610316856040518060600160405280602881526020016109ec6028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260016020908152604080832033845290915290205491906107c3565b6103e0565b5060019392505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916102a5918590610316908661080a565b60606004805461021590610971565b60006102a5338461031685604051806060016040528060258152602001610a146025913933600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d16845290915290205491906107c3565b60006102a5338484610599565b73ffffffffffffffffffffffffffffffffffffffff8316610487576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661052a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161047e565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff831661063c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161047e565b73ffffffffffffffffffffffffffffffffffffffff82166106df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161047e565b610729816040518060600160405280602681526020016109c66026913973ffffffffffffffffffffffffffffffffffffffff861660009081526020819052604090205491906107c3565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610765908261080a565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161058c565b8183038184821115610802576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047e919061081a565b509392505050565b808201828110156102a957600080fd5b600060208083528351808285015260005b818110156108475785810183015185820160400152820161082b565b81811115610859576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146108b157600080fd5b919050565b600080604083850312156108c957600080fd5b6108d28361088d565b946020939093013593505050565b6000806000606084860312156108f557600080fd5b6108fe8461088d565b925061090c6020850161088d565b9150604084013590509250925092565b60006020828403121561092e57600080fd5b6109378261088d565b9392505050565b6000806040838503121561095157600080fd5b61095a8361088d565b91506109686020840161088d565b90509250929050565b600181811c9082168061098557607f821691505b602082108114156109bf577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fd2c11cfac536a0fe169bd478163dc416442b9c31de074a5cb90bed92510c21f64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0xD0D CODESIZE SUB DUP1 PUSH3 0xD0D DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x1E8 JUMP JUMPDEST DUP2 MLOAD PUSH3 0x49 SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x75 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x5F SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x75 JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE POP PUSH3 0x28F JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x83 SWAP1 PUSH3 0x252 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0xA7 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0xF2 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0xC2 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0xF2 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0xF2 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0xF2 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0xD5 JUMP JUMPDEST POP PUSH3 0x100 SWAP3 SWAP2 POP PUSH3 0x104 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x100 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x105 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x143 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x160 JUMPI PUSH3 0x160 PUSH3 0x11B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x18B JUMPI PUSH3 0x18B PUSH3 0x11B JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 SWAP3 POP DUP7 DUP4 DUP6 DUP9 ADD ADD GT ISZERO PUSH3 0x1A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP4 DUP3 LT ISZERO PUSH3 0x1CC JUMPI DUP6 DUP3 ADD DUP4 ADD MLOAD DUP2 DUP4 ADD DUP5 ADD MSTORE SWAP1 DUP3 ADD SWAP1 PUSH3 0x1AD JUMP JUMPDEST DUP4 DUP3 GT ISZERO PUSH3 0x1DE JUMPI PUSH1 0x0 DUP4 DUP6 DUP4 ADD ADD MSTORE JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x1FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x214 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x222 DUP7 DUP4 DUP8 ADD PUSH3 0x131 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x239 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x248 DUP6 DUP3 DUP7 ADD PUSH3 0x131 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x267 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x289 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xA6E DUP1 PUSH3 0x29F 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 0x19A JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1AD JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x1C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x39509351 EQ PUSH2 0x149 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x15C JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x192 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x10F JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x121 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x134 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xCE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xEC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD6 PUSH2 0x206 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE3 SWAP2 SWAP1 PUSH2 0x81A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xFF PUSH2 0xFA CALLDATASIZE PUSH1 0x4 PUSH2 0x8B6 JUMP JUMPDEST PUSH2 0x298 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xE3 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xE3 JUMP JUMPDEST PUSH2 0xFF PUSH2 0x12F CALLDATASIZE PUSH1 0x4 PUSH2 0x8E0 JUMP JUMPDEST PUSH2 0x2AF JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xE3 JUMP JUMPDEST PUSH2 0xFF PUSH2 0x157 CALLDATASIZE PUSH1 0x4 PUSH2 0x8B6 JUMP JUMPDEST PUSH2 0x325 JUMP JUMPDEST PUSH2 0x113 PUSH2 0x16A CALLDATASIZE PUSH1 0x4 PUSH2 0x91C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xD6 PUSH2 0x368 JUMP JUMPDEST PUSH2 0xFF PUSH2 0x1A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x8B6 JUMP JUMPDEST PUSH2 0x377 JUMP JUMPDEST PUSH2 0xFF PUSH2 0x1BB CALLDATASIZE PUSH1 0x4 PUSH2 0x8B6 JUMP JUMPDEST PUSH2 0x3D3 JUMP JUMPDEST PUSH2 0x113 PUSH2 0x1CE CALLDATASIZE PUSH1 0x4 PUSH2 0x93E 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 PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x215 SWAP1 PUSH2 0x971 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x241 SWAP1 PUSH2 0x971 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x28E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x263 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x28E 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 0x271 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2A5 CALLER DUP5 DUP5 PUSH2 0x3E0 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2BC DUP5 DUP5 DUP5 PUSH2 0x599 JUMP JUMPDEST PUSH2 0x31B DUP5 CALLER PUSH2 0x316 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x9EC PUSH1 0x28 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x7C3 JUMP JUMPDEST PUSH2 0x3E0 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP 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 0x2A5 SWAP2 DUP6 SWAP1 PUSH2 0x316 SWAP1 DUP7 PUSH2 0x80A JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x215 SWAP1 PUSH2 0x971 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2A5 CALLER DUP5 PUSH2 0x316 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xA14 PUSH1 0x25 SWAP2 CODECOPY CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x7C3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2A5 CALLER DUP5 DUP5 PUSH2 0x599 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x487 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7265737300000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x52A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7373000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x47E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x63C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6472657373000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x47E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x6DF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6573730000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x47E JUMP JUMPDEST PUSH2 0x729 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x9C6 PUSH1 0x26 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x7C3 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 0x765 SWAP1 DUP3 PUSH2 0x80A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE MLOAD DUP5 DUP2 MSTORE SWAP1 SWAP3 SWAP2 DUP7 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH2 0x58C JUMP JUMPDEST DUP2 DUP4 SUB DUP2 DUP5 DUP3 GT ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x47E SWAP2 SWAP1 PUSH2 0x81A JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x2A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x847 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x82B JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x859 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x8B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x8C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8D2 DUP4 PUSH2 0x88D JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x8F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8FE DUP5 PUSH2 0x88D JUMP JUMPDEST SWAP3 POP PUSH2 0x90C PUSH1 0x20 DUP6 ADD PUSH2 0x88D JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x92E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x937 DUP3 PUSH2 0x88D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x951 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95A DUP4 PUSH2 0x88D JUMP JUMPDEST SWAP2 POP PUSH2 0x968 PUSH1 0x20 DUP5 ADD PUSH2 0x88D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x985 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x9BF JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x2062616C616E636545524332303A207472616E73 PUSH7 0x657220616D6F75 PUSH15 0x74206578636565647320616C6C6F77 PUSH2 0x6E63 PUSH6 0x45524332303A KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220FD2C GT 0xCF 0xAC MSTORE8 PUSH11 0xFE169BD478163DC416442 0xB9 0xC3 SAR 0xE0 PUSH21 0xA5CB90BED92510C21F64736F6C634300080A003300 ","sourceMap":"1318:8978:6:-:0;;;1947:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2007:12;;;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;2025:16:6;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;;2047:9:6;:14;;-1:-1:-1;;2047:14:6;2059:2;2047:14;;;-1:-1:-1;1318:8978:6;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1318:8978:6;;;-1:-1:-1;1318:8978:6;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:127:201;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:885;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:201;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:201;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;730:3;725:2;720;712:6;708:15;704:24;701:33;698:53;;;747:1;744;737:12;698:53;769:1;760:10;;779:133;793:2;790:1;787:9;779:133;;;881:14;;;877:23;;871:30;850:14;;;846:23;;839:63;804:10;;;;779:133;;;930:2;927:1;924:9;921:80;;;989:1;984:2;979;971:6;967:15;963:24;956:35;921:80;1019:6;146:885;-1:-1:-1;;;;;;146:885:201:o;1036:562::-;1135:6;1143;1196:2;1184:9;1175:7;1171:23;1167:32;1164:52;;;1212:1;1209;1202:12;1164:52;1239:16;;-1:-1:-1;;;;;1304:14:201;;;1301:34;;;1331:1;1328;1321:12;1301:34;1354:61;1407:7;1398:6;1387:9;1383:22;1354:61;:::i;:::-;1344:71;;1461:2;1450:9;1446:18;1440:25;1424:41;;1490:2;1480:8;1477:16;1474:36;;;1506:1;1503;1496:12;1474:36;;1529:63;1584:7;1573:8;1562:9;1558:24;1529:63;:::i;:::-;1519:73;;;1036:562;;;;;:::o;1603:380::-;1682:1;1678:12;;;;1725;;;1746:61;;1800:4;1792:6;1788:17;1778:27;;1746:61;1853:2;1845:6;1842:14;1822:18;1819:38;1816:161;;;1899:10;1894:3;1890:20;1887:1;1880:31;1934:4;1931:1;1924:15;1962:4;1959:1;1952:15;1816:161;;1603:380;;;:::o;:::-;1318:8978:6;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_approve_1256":{"entryPoint":992,"id":1256,"parameterSlots":3,"returnSlots":0},"@_beforeTokenTransfer_1278":{"entryPoint":null,"id":1278,"parameterSlots":3,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_transfer_1100":{"entryPoint":1433,"id":1100,"parameterSlots":3,"returnSlots":0},"@add_2216":{"entryPoint":2058,"id":2216,"parameterSlots":2,"returnSlots":1},"@allowance_918":{"entryPoint":null,"id":918,"parameterSlots":2,"returnSlots":1},"@approve_939":{"entryPoint":664,"id":939,"parameterSlots":2,"returnSlots":1},"@balanceOf_879":{"entryPoint":null,"id":879,"parameterSlots":1,"returnSlots":1},"@decimals_855":{"entryPoint":null,"id":855,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_1034":{"entryPoint":887,"id":1034,"parameterSlots":2,"returnSlots":1},"@increaseAllowance_1005":{"entryPoint":805,"id":1005,"parameterSlots":2,"returnSlots":1},"@name_837":{"entryPoint":518,"id":837,"parameterSlots":0,"returnSlots":1},"@sub_2265":{"entryPoint":1987,"id":2265,"parameterSlots":3,"returnSlots":1},"@symbol_846":{"entryPoint":872,"id":846,"parameterSlots":0,"returnSlots":1},"@totalSupply_865":{"entryPoint":null,"id":865,"parameterSlots":0,"returnSlots":1},"@transferFrom_977":{"entryPoint":687,"id":977,"parameterSlots":3,"returnSlots":1},"@transfer_900":{"entryPoint":979,"id":900,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":2189,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":2332,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":2366,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":2272,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":2230,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":2074,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":2417,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:4544:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"135:535:201","statements":[{"nodeType":"YulVariableDeclaration","src":"145:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"155:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"149:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"173:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"184:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"166:6:201"},"nodeType":"YulFunctionCall","src":"166:21:201"},"nodeType":"YulExpressionStatement","src":"166:21:201"},{"nodeType":"YulVariableDeclaration","src":"196:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"216:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:201"},"nodeType":"YulFunctionCall","src":"210:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"200:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"243:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"254:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"239:3:201"},"nodeType":"YulFunctionCall","src":"239:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"259:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"232:6:201"},"nodeType":"YulFunctionCall","src":"232:34:201"},"nodeType":"YulExpressionStatement","src":"232:34:201"},{"nodeType":"YulVariableDeclaration","src":"275:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"284:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"279:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"344:90:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"373:9:201"},{"name":"i","nodeType":"YulIdentifier","src":"384:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"369:3:201"},"nodeType":"YulFunctionCall","src":"369:17:201"},{"kind":"number","nodeType":"YulLiteral","src":"388:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"365:3:201"},"nodeType":"YulFunctionCall","src":"365:26:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"407:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"415:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"403:3:201"},"nodeType":"YulFunctionCall","src":"403:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"419:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"399:3:201"},"nodeType":"YulFunctionCall","src":"399:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"393:5:201"},"nodeType":"YulFunctionCall","src":"393:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"358:6:201"},"nodeType":"YulFunctionCall","src":"358:66:201"},"nodeType":"YulExpressionStatement","src":"358:66:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"305:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"308:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"302:2:201"},"nodeType":"YulFunctionCall","src":"302:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"316:19:201","statements":[{"nodeType":"YulAssignment","src":"318:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"327:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"330:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"323:3:201"},"nodeType":"YulFunctionCall","src":"323:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"318:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"298:3:201","statements":[]},"src":"294:140:201"},{"body":{"nodeType":"YulBlock","src":"468:66:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"497:9:201"},{"name":"length","nodeType":"YulIdentifier","src":"508:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"493:3:201"},"nodeType":"YulFunctionCall","src":"493:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"517:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"489:3:201"},"nodeType":"YulFunctionCall","src":"489:31:201"},{"kind":"number","nodeType":"YulLiteral","src":"522:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"482:6:201"},"nodeType":"YulFunctionCall","src":"482:42:201"},"nodeType":"YulExpressionStatement","src":"482:42:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"449:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"452:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"446:2:201"},"nodeType":"YulFunctionCall","src":"446:13:201"},"nodeType":"YulIf","src":"443:91:201"},{"nodeType":"YulAssignment","src":"543:121:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"559:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"578:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"586:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"574:3:201"},"nodeType":"YulFunctionCall","src":"574:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"591:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"570:3:201"},"nodeType":"YulFunctionCall","src":"570:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"555:3:201"},"nodeType":"YulFunctionCall","src":"555:104:201"},{"kind":"number","nodeType":"YulLiteral","src":"661:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"551:3:201"},"nodeType":"YulFunctionCall","src":"551:113:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"543:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"104:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"115:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"126:4:201","type":""}],"src":"14:656:201"},{"body":{"nodeType":"YulBlock","src":"724:147:201","statements":[{"nodeType":"YulAssignment","src":"734:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"756:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"743:12:201"},"nodeType":"YulFunctionCall","src":"743:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"734:5:201"}]},{"body":{"nodeType":"YulBlock","src":"849:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"858:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"861:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"851:6:201"},"nodeType":"YulFunctionCall","src":"851:12:201"},"nodeType":"YulExpressionStatement","src":"851:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"785:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"796:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"803:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"792:3:201"},"nodeType":"YulFunctionCall","src":"792:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"782:2:201"},"nodeType":"YulFunctionCall","src":"782:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"775:6:201"},"nodeType":"YulFunctionCall","src":"775:73:201"},"nodeType":"YulIf","src":"772:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"703:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"714:5:201","type":""}],"src":"675:196:201"},{"body":{"nodeType":"YulBlock","src":"963:167:201","statements":[{"body":{"nodeType":"YulBlock","src":"1009:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1018:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1021:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1011:6:201"},"nodeType":"YulFunctionCall","src":"1011:12:201"},"nodeType":"YulExpressionStatement","src":"1011:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"984:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"993:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"980:3:201"},"nodeType":"YulFunctionCall","src":"980:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1005:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"976:3:201"},"nodeType":"YulFunctionCall","src":"976:32:201"},"nodeType":"YulIf","src":"973:52:201"},{"nodeType":"YulAssignment","src":"1034:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1063:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1044:18:201"},"nodeType":"YulFunctionCall","src":"1044:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1034:6:201"}]},{"nodeType":"YulAssignment","src":"1082:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1109:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1120:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1105:3:201"},"nodeType":"YulFunctionCall","src":"1105:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1092:12:201"},"nodeType":"YulFunctionCall","src":"1092:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1082:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"921:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"932:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"944:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"952:6:201","type":""}],"src":"876:254:201"},{"body":{"nodeType":"YulBlock","src":"1230:92:201","statements":[{"nodeType":"YulAssignment","src":"1240:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1252:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1263:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1248:3:201"},"nodeType":"YulFunctionCall","src":"1248:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1240:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1282:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1307:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1300:6:201"},"nodeType":"YulFunctionCall","src":"1300:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1293:6:201"},"nodeType":"YulFunctionCall","src":"1293:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1275:6:201"},"nodeType":"YulFunctionCall","src":"1275:41:201"},"nodeType":"YulExpressionStatement","src":"1275:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1199:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1210:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1221:4:201","type":""}],"src":"1135:187:201"},{"body":{"nodeType":"YulBlock","src":"1428:76:201","statements":[{"nodeType":"YulAssignment","src":"1438:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1450:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1461:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1446:3:201"},"nodeType":"YulFunctionCall","src":"1446:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1438:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1480:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"1491:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1473:6:201"},"nodeType":"YulFunctionCall","src":"1473:25:201"},"nodeType":"YulExpressionStatement","src":"1473:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1397:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1408:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1419:4:201","type":""}],"src":"1327:177:201"},{"body":{"nodeType":"YulBlock","src":"1613:224:201","statements":[{"body":{"nodeType":"YulBlock","src":"1659:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1668:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1671:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1661:6:201"},"nodeType":"YulFunctionCall","src":"1661:12:201"},"nodeType":"YulExpressionStatement","src":"1661:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1634:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1643:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1630:3:201"},"nodeType":"YulFunctionCall","src":"1630:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1655:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1626:3:201"},"nodeType":"YulFunctionCall","src":"1626:32:201"},"nodeType":"YulIf","src":"1623:52:201"},{"nodeType":"YulAssignment","src":"1684:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1713:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1694:18:201"},"nodeType":"YulFunctionCall","src":"1694:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1684:6:201"}]},{"nodeType":"YulAssignment","src":"1732:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1765:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1776:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1761:3:201"},"nodeType":"YulFunctionCall","src":"1761:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1742:18:201"},"nodeType":"YulFunctionCall","src":"1742:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1732:6:201"}]},{"nodeType":"YulAssignment","src":"1789:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1816:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1827:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1812:3:201"},"nodeType":"YulFunctionCall","src":"1812:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1799:12:201"},"nodeType":"YulFunctionCall","src":"1799:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1789:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1563:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1574:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1586:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1594:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1602:6:201","type":""}],"src":"1509:328:201"},{"body":{"nodeType":"YulBlock","src":"1939:87:201","statements":[{"nodeType":"YulAssignment","src":"1949:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1961:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1972:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1957:3:201"},"nodeType":"YulFunctionCall","src":"1957:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1949:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1991:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2006:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2014:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2002:3:201"},"nodeType":"YulFunctionCall","src":"2002:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1984:6:201"},"nodeType":"YulFunctionCall","src":"1984:36:201"},"nodeType":"YulExpressionStatement","src":"1984:36:201"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1908:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1919:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1930:4:201","type":""}],"src":"1842:184:201"},{"body":{"nodeType":"YulBlock","src":"2101:116:201","statements":[{"body":{"nodeType":"YulBlock","src":"2147:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2156:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2159:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2149:6:201"},"nodeType":"YulFunctionCall","src":"2149:12:201"},"nodeType":"YulExpressionStatement","src":"2149:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2122:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2131:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2118:3:201"},"nodeType":"YulFunctionCall","src":"2118:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2143:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2114:3:201"},"nodeType":"YulFunctionCall","src":"2114:32:201"},"nodeType":"YulIf","src":"2111:52:201"},{"nodeType":"YulAssignment","src":"2172:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2201:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2182:18:201"},"nodeType":"YulFunctionCall","src":"2182:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2172:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2067:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2078:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2090:6:201","type":""}],"src":"2031:186:201"},{"body":{"nodeType":"YulBlock","src":"2309:173:201","statements":[{"body":{"nodeType":"YulBlock","src":"2355:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2364:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2367:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2357:6:201"},"nodeType":"YulFunctionCall","src":"2357:12:201"},"nodeType":"YulExpressionStatement","src":"2357:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2330:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2339:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2326:3:201"},"nodeType":"YulFunctionCall","src":"2326:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2351:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2322:3:201"},"nodeType":"YulFunctionCall","src":"2322:32:201"},"nodeType":"YulIf","src":"2319:52:201"},{"nodeType":"YulAssignment","src":"2380:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2409:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2390:18:201"},"nodeType":"YulFunctionCall","src":"2390:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2380:6:201"}]},{"nodeType":"YulAssignment","src":"2428:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2461:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2472:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2457:3:201"},"nodeType":"YulFunctionCall","src":"2457:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2438:18:201"},"nodeType":"YulFunctionCall","src":"2438:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2428:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2267:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2278:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2290:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2298:6:201","type":""}],"src":"2222:260:201"},{"body":{"nodeType":"YulBlock","src":"2542:382:201","statements":[{"nodeType":"YulAssignment","src":"2552:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2566:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"2569:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2562:3:201"},"nodeType":"YulFunctionCall","src":"2562:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2552:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2583:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"2613:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"2619:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2609:3:201"},"nodeType":"YulFunctionCall","src":"2609:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"2587:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2660:31:201","statements":[{"nodeType":"YulAssignment","src":"2662:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2676:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2684:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2672:3:201"},"nodeType":"YulFunctionCall","src":"2672:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2662:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"2640:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2633:6:201"},"nodeType":"YulFunctionCall","src":"2633:26:201"},"nodeType":"YulIf","src":"2630:61:201"},{"body":{"nodeType":"YulBlock","src":"2750:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2771:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2774:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2764:6:201"},"nodeType":"YulFunctionCall","src":"2764:88:201"},"nodeType":"YulExpressionStatement","src":"2764:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2872:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2875:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2865:6:201"},"nodeType":"YulFunctionCall","src":"2865:15:201"},"nodeType":"YulExpressionStatement","src":"2865:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2900:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2903:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2893:6:201"},"nodeType":"YulFunctionCall","src":"2893:15:201"},"nodeType":"YulExpressionStatement","src":"2893:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"2706:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2729:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2737:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2726:2:201"},"nodeType":"YulFunctionCall","src":"2726:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2703:2:201"},"nodeType":"YulFunctionCall","src":"2703:38:201"},"nodeType":"YulIf","src":"2700:218:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"2522:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"2531:6:201","type":""}],"src":"2487:437:201"},{"body":{"nodeType":"YulBlock","src":"3103:226:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3120:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3131:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3113:6:201"},"nodeType":"YulFunctionCall","src":"3113:21:201"},"nodeType":"YulExpressionStatement","src":"3113:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3154:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3165:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3150:3:201"},"nodeType":"YulFunctionCall","src":"3150:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"3170:2:201","type":"","value":"36"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3143:6:201"},"nodeType":"YulFunctionCall","src":"3143:30:201"},"nodeType":"YulExpressionStatement","src":"3143:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3193:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3204:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3189:3:201"},"nodeType":"YulFunctionCall","src":"3189:18:201"},{"hexValue":"45524332303a20617070726f76652066726f6d20746865207a65726f20616464","kind":"string","nodeType":"YulLiteral","src":"3209:34:201","type":"","value":"ERC20: approve from the zero add"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3182:6:201"},"nodeType":"YulFunctionCall","src":"3182:62:201"},"nodeType":"YulExpressionStatement","src":"3182:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3264:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3275:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3260:3:201"},"nodeType":"YulFunctionCall","src":"3260:18:201"},{"hexValue":"72657373","kind":"string","nodeType":"YulLiteral","src":"3280:6:201","type":"","value":"ress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3253:6:201"},"nodeType":"YulFunctionCall","src":"3253:34:201"},"nodeType":"YulExpressionStatement","src":"3253:34:201"},{"nodeType":"YulAssignment","src":"3296:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3308:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3319:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3304:3:201"},"nodeType":"YulFunctionCall","src":"3304:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3296:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3080:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3094:4:201","type":""}],"src":"2929:400:201"},{"body":{"nodeType":"YulBlock","src":"3508:224:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3525:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3536:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3518:6:201"},"nodeType":"YulFunctionCall","src":"3518:21:201"},"nodeType":"YulExpressionStatement","src":"3518:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3559:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3570:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3555:3:201"},"nodeType":"YulFunctionCall","src":"3555:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"3575:2:201","type":"","value":"34"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3548:6:201"},"nodeType":"YulFunctionCall","src":"3548:30:201"},"nodeType":"YulExpressionStatement","src":"3548:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3598:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3609:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3594:3:201"},"nodeType":"YulFunctionCall","src":"3594:18:201"},{"hexValue":"45524332303a20617070726f766520746f20746865207a65726f206164647265","kind":"string","nodeType":"YulLiteral","src":"3614:34:201","type":"","value":"ERC20: approve to the zero addre"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3587:6:201"},"nodeType":"YulFunctionCall","src":"3587:62:201"},"nodeType":"YulExpressionStatement","src":"3587:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3669:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3680:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3665:3:201"},"nodeType":"YulFunctionCall","src":"3665:18:201"},{"hexValue":"7373","kind":"string","nodeType":"YulLiteral","src":"3685:4:201","type":"","value":"ss"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3658:6:201"},"nodeType":"YulFunctionCall","src":"3658:32:201"},"nodeType":"YulExpressionStatement","src":"3658:32:201"},{"nodeType":"YulAssignment","src":"3699:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3711:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3722:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3707:3:201"},"nodeType":"YulFunctionCall","src":"3707:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3699:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3485:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3499:4:201","type":""}],"src":"3334:398:201"},{"body":{"nodeType":"YulBlock","src":"3911:227:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3928:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3939:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3921:6:201"},"nodeType":"YulFunctionCall","src":"3921:21:201"},"nodeType":"YulExpressionStatement","src":"3921:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3962:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3973:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3958:3:201"},"nodeType":"YulFunctionCall","src":"3958:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"3978:2:201","type":"","value":"37"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3951:6:201"},"nodeType":"YulFunctionCall","src":"3951:30:201"},"nodeType":"YulExpressionStatement","src":"3951:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4001:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4012:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3997:3:201"},"nodeType":"YulFunctionCall","src":"3997:18:201"},{"hexValue":"45524332303a207472616e736665722066726f6d20746865207a65726f206164","kind":"string","nodeType":"YulLiteral","src":"4017:34:201","type":"","value":"ERC20: transfer from the zero ad"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3990:6:201"},"nodeType":"YulFunctionCall","src":"3990:62:201"},"nodeType":"YulExpressionStatement","src":"3990:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4072:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4083:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4068:3:201"},"nodeType":"YulFunctionCall","src":"4068:18:201"},{"hexValue":"6472657373","kind":"string","nodeType":"YulLiteral","src":"4088:7:201","type":"","value":"dress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4061:6:201"},"nodeType":"YulFunctionCall","src":"4061:35:201"},"nodeType":"YulExpressionStatement","src":"4061:35:201"},{"nodeType":"YulAssignment","src":"4105:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4117:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4128:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4113:3:201"},"nodeType":"YulFunctionCall","src":"4113:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4105:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3888:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3902:4:201","type":""}],"src":"3737:401:201"},{"body":{"nodeType":"YulBlock","src":"4317:225:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4334:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4345:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4327:6:201"},"nodeType":"YulFunctionCall","src":"4327:21:201"},"nodeType":"YulExpressionStatement","src":"4327:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4368:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4379:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4364:3:201"},"nodeType":"YulFunctionCall","src":"4364:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"4384:2:201","type":"","value":"35"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4357:6:201"},"nodeType":"YulFunctionCall","src":"4357:30:201"},"nodeType":"YulExpressionStatement","src":"4357:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4407:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4418:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4403:3:201"},"nodeType":"YulFunctionCall","src":"4403:18:201"},{"hexValue":"45524332303a207472616e7366657220746f20746865207a65726f2061646472","kind":"string","nodeType":"YulLiteral","src":"4423:34:201","type":"","value":"ERC20: transfer to the zero addr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4396:6:201"},"nodeType":"YulFunctionCall","src":"4396:62:201"},"nodeType":"YulExpressionStatement","src":"4396:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4478:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4489:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4474:3:201"},"nodeType":"YulFunctionCall","src":"4474:18:201"},{"hexValue":"657373","kind":"string","nodeType":"YulLiteral","src":"4494:5:201","type":"","value":"ess"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4467:6:201"},"nodeType":"YulFunctionCall","src":"4467:33:201"},"nodeType":"YulExpressionStatement","src":"4467:33:201"},{"nodeType":"YulAssignment","src":"4509:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4521:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4532:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4517:3:201"},"nodeType":"YulFunctionCall","src":"4517:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4509:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4294:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4308:4:201","type":""}],"src":"4143:399:201"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"ERC20: approve from the zero add\")\n        mstore(add(headStart, 96), \"ress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ERC20: approve to the zero addre\")\n        mstore(add(headStart, 96), \"ss\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC20: transfer from the zero ad\")\n        mstore(add(headStart, 96), \"dress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 35)\n        mstore(add(headStart, 64), \"ERC20: transfer to the zero addr\")\n        mstore(add(headStart, 96), \"ess\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100c95760003560e01c80633950935111610081578063a457c2d71161005b578063a457c2d71461019a578063a9059cbb146101ad578063dd62ed3e146101c057600080fd5b8063395093511461014957806370a082311461015c57806395d89b411461019257600080fd5b806318160ddd116100b257806318160ddd1461010f57806323b872dd14610121578063313ce5671461013457600080fd5b806306fdde03146100ce578063095ea7b3146100ec575b600080fd5b6100d6610206565b6040516100e3919061081a565b60405180910390f35b6100ff6100fa3660046108b6565b610298565b60405190151581526020016100e3565b6002545b6040519081526020016100e3565b6100ff61012f3660046108e0565b6102af565b60055460405160ff90911681526020016100e3565b6100ff6101573660046108b6565b610325565b61011361016a36600461091c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100d6610368565b6100ff6101a83660046108b6565b610377565b6100ff6101bb3660046108b6565b6103d3565b6101136101ce36600461093e565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461021590610971565b80601f016020809104026020016040519081016040528092919081815260200182805461024190610971565b801561028e5780601f106102635761010080835404028352916020019161028e565b820191906000526020600020905b81548152906001019060200180831161027157829003601f168201915b5050505050905090565b60006102a53384846103e0565b5060015b92915050565b60006102bc848484610599565b61031b8433610316856040518060600160405280602881526020016109ec6028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260016020908152604080832033845290915290205491906107c3565b6103e0565b5060019392505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916102a5918590610316908661080a565b60606004805461021590610971565b60006102a5338461031685604051806060016040528060258152602001610a146025913933600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d16845290915290205491906107c3565b60006102a5338484610599565b73ffffffffffffffffffffffffffffffffffffffff8316610487576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661052a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161047e565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff831661063c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161047e565b73ffffffffffffffffffffffffffffffffffffffff82166106df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161047e565b610729816040518060600160405280602681526020016109c66026913973ffffffffffffffffffffffffffffffffffffffff861660009081526020819052604090205491906107c3565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610765908261080a565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161058c565b8183038184821115610802576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047e919061081a565b509392505050565b808201828110156102a957600080fd5b600060208083528351808285015260005b818110156108475785810183015185820160400152820161082b565b81811115610859576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146108b157600080fd5b919050565b600080604083850312156108c957600080fd5b6108d28361088d565b946020939093013593505050565b6000806000606084860312156108f557600080fd5b6108fe8461088d565b925061090c6020850161088d565b9150604084013590509250925092565b60006020828403121561092e57600080fd5b6109378261088d565b9392505050565b6000806040838503121561095157600080fd5b61095a8361088d565b91506109686020840161088d565b90509250929050565b600181811c9082168061098557607f821691505b602082108114156109bf577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fd2c11cfac536a0fe169bd478163dc416442b9c31de074a5cb90bed92510c21f64736f6c634300080a0033","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 0x19A JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1AD JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x1C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x39509351 EQ PUSH2 0x149 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x15C JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x192 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x10F JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x121 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x134 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xCE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xEC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD6 PUSH2 0x206 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE3 SWAP2 SWAP1 PUSH2 0x81A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xFF PUSH2 0xFA CALLDATASIZE PUSH1 0x4 PUSH2 0x8B6 JUMP JUMPDEST PUSH2 0x298 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xE3 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xE3 JUMP JUMPDEST PUSH2 0xFF PUSH2 0x12F CALLDATASIZE PUSH1 0x4 PUSH2 0x8E0 JUMP JUMPDEST PUSH2 0x2AF JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xE3 JUMP JUMPDEST PUSH2 0xFF PUSH2 0x157 CALLDATASIZE PUSH1 0x4 PUSH2 0x8B6 JUMP JUMPDEST PUSH2 0x325 JUMP JUMPDEST PUSH2 0x113 PUSH2 0x16A CALLDATASIZE PUSH1 0x4 PUSH2 0x91C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xD6 PUSH2 0x368 JUMP JUMPDEST PUSH2 0xFF PUSH2 0x1A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x8B6 JUMP JUMPDEST PUSH2 0x377 JUMP JUMPDEST PUSH2 0xFF PUSH2 0x1BB CALLDATASIZE PUSH1 0x4 PUSH2 0x8B6 JUMP JUMPDEST PUSH2 0x3D3 JUMP JUMPDEST PUSH2 0x113 PUSH2 0x1CE CALLDATASIZE PUSH1 0x4 PUSH2 0x93E 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 PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x215 SWAP1 PUSH2 0x971 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x241 SWAP1 PUSH2 0x971 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x28E JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x263 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x28E 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 0x271 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2A5 CALLER DUP5 DUP5 PUSH2 0x3E0 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2BC DUP5 DUP5 DUP5 PUSH2 0x599 JUMP JUMPDEST PUSH2 0x31B DUP5 CALLER PUSH2 0x316 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x9EC PUSH1 0x28 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x7C3 JUMP JUMPDEST PUSH2 0x3E0 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP 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 0x2A5 SWAP2 DUP6 SWAP1 PUSH2 0x316 SWAP1 DUP7 PUSH2 0x80A JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x215 SWAP1 PUSH2 0x971 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2A5 CALLER DUP5 PUSH2 0x316 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xA14 PUSH1 0x25 SWAP2 CODECOPY CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x7C3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2A5 CALLER DUP5 DUP5 PUSH2 0x599 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x487 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7265737300000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x52A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7373000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x47E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x63C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6472657373000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x47E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x6DF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6573730000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x47E JUMP JUMPDEST PUSH2 0x729 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x9C6 PUSH1 0x26 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x7C3 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 0x765 SWAP1 DUP3 PUSH2 0x80A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE MLOAD DUP5 DUP2 MSTORE SWAP1 SWAP3 SWAP2 DUP7 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH2 0x58C JUMP JUMPDEST DUP2 DUP4 SUB DUP2 DUP5 DUP3 GT ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x47E SWAP2 SWAP1 PUSH2 0x81A JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x2A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x847 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x82B JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x859 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x8B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x8C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8D2 DUP4 PUSH2 0x88D JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x8F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8FE DUP5 PUSH2 0x88D JUMP JUMPDEST SWAP3 POP PUSH2 0x90C PUSH1 0x20 DUP6 ADD PUSH2 0x88D JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x92E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x937 DUP3 PUSH2 0x88D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x951 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95A DUP4 PUSH2 0x88D JUMP JUMPDEST SWAP2 POP PUSH2 0x968 PUSH1 0x20 DUP5 ADD PUSH2 0x88D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x985 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x9BF JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x2062616C616E636545524332303A207472616E73 PUSH7 0x657220616D6F75 PUSH15 0x74206578636565647320616C6C6F77 PUSH2 0x6E63 PUSH6 0x45524332303A KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220FD2C GT 0xCF 0xAC MSTORE8 PUSH11 0xFE169BD478163DC416442 0xB9 0xC3 SAR 0xE0 PUSH21 0xA5CB90BED92510C21F64736F6C634300080A003300 ","sourceMap":"1318:8978:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2123:75;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4029:156;;;;;;:::i;:::-;;:::i;:::-;;;1300:14:201;;1293:22;1275:41;;1263:2;1248:18;4029:156:6;1135:187:201;3102:92:6;3177:12;;3102:92;;;1473:25:201;;;1461:2;1446:18;3102:92:6;1327:177:201;4619:343:6;;;;;;:::i;:::-;;:::i;2975:75::-;3036:9;;2975:75;;3036:9;;;;1984:36:201;;1972:2;1957:18;2975:75:6;1842:184:201;5331:205:6;;;;;;:::i;:::-;;:::i;3244:111::-;;;;;;:::i;:::-;3332:18;;3310:7;3332:18;;;;;;;;;;;;3244:111;2301:79;;;:::i;5993:316::-;;;;;;:::i;:::-;;:::i;3540:162::-;;;;;;:::i;:::-;;:::i;3752:155::-;;;;;;:::i;:::-;3875:18;;;;3853:7;3875:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3752:155;2123:75;2160:13;2188:5;2181:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2123:75;:::o;4029:156::-;4112:4;4124:39;678:10:4;4147:7:6;4156:6;4124:8;:39::i;:::-;-1:-1:-1;4176:4:6;4029:156;;;;;:::o;4619:343::-;4741:4;4753:36;4763:6;4771:9;4782:6;4753:9;:36::i;:::-;4795:145;4811:6;678:10:4;4845:89:6;4883:6;4845:89;;;;;;;;;;;;;;;;;:19;;;;;;;:11;:19;;;;;;;;678:10:4;4845:33:6;;;;;;;;;;:37;:89::i;:::-;4795:8;:145::i;:::-;-1:-1:-1;4953:4:6;4619:343;;;;;:::o;5331:205::-;678:10:4;5419:4:6;5463:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;5419:4;;5431:83;;5454:7;;5463:50;;5502:10;5463:38;:50::i;2301:79::-;2340:13;2368:7;2361:14;;;;;:::i;5993:316::-;6098:4;6110:177;678:10:4;6146:7:6;6161:120;6209:15;6161:120;;;;;;;;;;;;;;;;;678:10:4;6161:25:6;;;;:11;:25;;;;;;;;;:34;;;;;;;;;;;;:38;:120::i;3540:162::-;3626:4;3638:42;678:10:4;3662:9:6;3673:6;3638:9;:42::i;8935:322::-;9032:19;;;9024:68;;;;;;;3131:2:201;9024:68:6;;;3113:21:201;3170:2;3150:18;;;3143:30;3209:34;3189:18;;;3182:62;3280:6;3260:18;;;3253:34;3304:19;;9024:68:6;;;;;;;;;9106:21;;;9098:68;;;;;;;3536:2:201;9098:68:6;;;3518:21:201;3575:2;3555:18;;;3548:30;3614:34;3594:18;;;3587:62;3685:4;3665:18;;;3658:32;3707:19;;9098:68:6;3334:398:201;9098:68:6;9173:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9220:32;;1473:25:201;;;9220:32:6;;1446:18:201;9220:32:6;;;;;;;;8935:322;;;:::o;6753:504::-;6854:20;;;6846:70;;;;;;;3939:2:201;6846:70:6;;;3921:21:201;3978:2;3958:18;;;3951:30;4017:34;3997:18;;;3990:62;4088:7;4068:18;;;4061:35;4113:19;;6846:70:6;3737:401:201;6846:70:6;6930:23;;;6922:71;;;;;;;4345:2:201;6922:71:6;;;4327:21:201;4384:2;4364:18;;;4357:30;4423:34;4403:18;;;4396:62;4494:5;4474:18;;;4467:33;4517:19;;6922:71:6;4143:399:201;6922:71:6;7074;7096:6;7074:71;;;;;;;;;;;;;;;;;:17;;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;7054:17;;;;:9;:17;;;;;;;;;;;:91;;;;7174:20;;;;;;;:32;;7199:6;7174:24;:32::i;:::-;7151:20;;;;:9;:20;;;;;;;;;;;;:55;;;;7217:35;1473:25:201;;;7151:20:6;;7217:35;;;;;;1446:18:201;7217:35:6;1327:177:201;1011:161:14;1140:5;;;1153:7;1135:16;;;;1127:34;;;;;;;;;;;;;:::i;:::-;;1011:161;;;;;:::o;410:129::-;516:5;;;511:16;;;;503:25;;;;;14:656:201;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;586:2:201;574:15;591:66;570:88;555:104;;;;661:2;551:113;;14:656;-1:-1:-1;;;14:656:201:o;675:196::-;743:20;;803:42;792:54;;782:65;;772:93;;861:1;858;851:12;772:93;675:196;;;:::o;876:254::-;944:6;952;1005:2;993:9;984:7;980:23;976:32;973:52;;;1021:1;1018;1011:12;973:52;1044:29;1063:9;1044:29;:::i;:::-;1034:39;1120:2;1105:18;;;;1092:32;;-1:-1:-1;;;876:254:201:o;1509:328::-;1586:6;1594;1602;1655:2;1643:9;1634:7;1630:23;1626:32;1623:52;;;1671:1;1668;1661:12;1623:52;1694:29;1713:9;1694:29;:::i;:::-;1684:39;;1742:38;1776:2;1765:9;1761:18;1742:38;:::i;:::-;1732:48;;1827:2;1816:9;1812:18;1799:32;1789:42;;1509:328;;;;;:::o;2031:186::-;2090:6;2143:2;2131:9;2122:7;2118:23;2114:32;2111:52;;;2159:1;2156;2149:12;2111:52;2182:29;2201:9;2182:29;:::i;:::-;2172:39;2031:186;-1:-1:-1;;;2031:186:201:o;2222:260::-;2290:6;2298;2351:2;2339:9;2330:7;2326:23;2322:32;2319:52;;;2367:1;2364;2357:12;2319:52;2390:29;2409:9;2390:29;:::i;:::-;2380:39;;2438:38;2472:2;2461:9;2457:18;2438:38;:::i;:::-;2428:48;;2222:260;;;;;:::o;2487:437::-;2566:1;2562:12;;;;2609;;;2630:61;;2684:4;2676:6;2672:17;2662:27;;2630:61;2737:2;2729:6;2726:14;2706:18;2703:38;2700:218;;;2774:77;2771:1;2764:88;2875:4;2872:1;2865:15;2903:4;2900:1;2893:15;2700:218;;2487:437;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"534000","executionCost":"infinite","totalCost":"infinite"},"external":{"allowance(address,address)":"infinite","approve(address,uint256)":"24596","balanceOf(address)":"2561","decimals()":"2356","decreaseAllowance(address,uint256)":"infinite","increaseAllowance(address,uint256)":"infinite","name()":"infinite","symbol()":"infinite","totalSupply()":"2304","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite"},"internal":{"_approve(address,address,uint256)":"infinite","_beforeTokenTransfer(address,address,uint256)":"infinite","_burn(address,uint256)":"infinite","_mint(address,uint256)":"infinite","_setupDecimals(uint8)":"infinite","_transfer(address,address,uint256)":"infinite"}},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","increaseAllowance(address,uint256)":"39509351","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"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\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\nimport './IERC20.sol';\\nimport './SafeMath.sol';\\nimport './Address.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 Context, IERC20 {\\n  using SafeMath for uint256;\\n  using Address for address;\\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(_msgSender(), recipient, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-allowance}.\\n   */\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) 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(_msgSender(), 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   * - `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      _msgSender(),\\n      _allowances[sender][_msgSender()].sub(amount, 'ERC20: transfer amount 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(_msgSender(), spender, _allowances[_msgSender()][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(\\n    address spender,\\n    uint256 subtractedValue\\n  ) public virtual returns (bool) {\\n    _approve(\\n      _msgSender(),\\n      spender,\\n      _allowances[_msgSender()][spender].sub(\\n        subtractedValue,\\n        'ERC20: decreased allowance below zero'\\n      )\\n    );\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Moves tokens `amount` from `sender` to `recipient`.\\n   *\\n   * This is internal function is equivalent to {transfer}, and can be used to\\n   * e.g. implement automatic token fees, slashing mechanisms, etc.\\n   *\\n   * Emits a {Transfer} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `sender` cannot be the zero address.\\n   * - `recipient` cannot be the zero address.\\n   * - `sender` must have a balance of at least `amount`.\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount) internal virtual {\\n    require(sender != address(0), 'ERC20: transfer from the zero address');\\n    require(recipient != address(0), 'ERC20: transfer to the zero address');\\n\\n    _beforeTokenTransfer(sender, recipient, amount);\\n\\n    _balances[sender] = _balances[sender].sub(amount, 'ERC20: transfer amount 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    require(account != address(0), 'ERC20: mint to the zero address');\\n\\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), 'ERC20: burn from the zero address');\\n\\n    _beforeTokenTransfer(account, address(0), amount);\\n\\n    _balances[account] = _balances[account].sub(amount, 'ERC20: burn amount 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 is 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(address owner, address spender, uint256 amount) internal virtual {\\n    require(owner != address(0), 'ERC20: approve from the zero address');\\n    require(spender != address(0), 'ERC20: approve to the zero address');\\n\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @dev 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(address from, address to, uint256 amount) internal virtual {}\\n}\\n\",\"keccak256\":\"0x84e6a151684cce31e66c850677f7e9455d694e050e409e5ded05fb5528c6c7e4\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/// @title Optimized overflow and underflow safe math operations\\n/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\\nlibrary SafeMath {\\n  /// @notice Returns x + y, reverts if sum overflows uint256\\n  /// @param x The augend\\n  /// @param y The addend\\n  /// @return z The sum of x and y\\n  function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x + y) >= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @param message The error msg\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y, string memory message) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x, message);\\n    }\\n  }\\n\\n  /// @notice Returns x * y, reverts if overflows\\n  /// @param x The multiplicand\\n  /// @param y The multiplier\\n  /// @return z The product of x and y\\n  function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require(x == 0 || (z = x * y) / x == y);\\n    }\\n  }\\n\\n  /// @notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\\n  /// @param x The numerator\\n  /// @param y The denominator\\n  /// @return z The product of x and y\\n  function div(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    return x / y;\\n  }\\n}\\n\",\"keccak256\":\"0xf1c5d8ba70a5fc3e20dbbc2aa2a2278d2535a57bc1e9abf1228ebc3068a045f0\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":793,"contract":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol:ERC20","label":"_balances","offset":0,"slot":"0","type":"t_mapping(t_address,t_uint256)"},{"astId":799,"contract":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol:ERC20","label":"_allowances","offset":0,"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":801,"contract":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol:ERC20","label":"_totalSupply","offset":0,"slot":"2","type":"t_uint256"},{"astId":803,"contract":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol:ERC20","label":"_name","offset":0,"slot":"3","type":"t_string_storage"},{"astId":805,"contract":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol:ERC20","label":"_symbol","offset":0,"slot":"4","type":"t_string_storage"},{"astId":807,"contract":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol:ERC20","label":"_decimals","offset":0,"slot":"5","type":"t_uint8"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol":{"IAccessControl":{"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":[{"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":"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":"External interface of AccessControl declared to support ERC165 detection.","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 {AccessControl-_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 {AccessControl-_setRoleAdmin}."},"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},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"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\":[{\"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\":\"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\":\"External interface of AccessControl declared to support ERC165 detection.\",\"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 {AccessControl-_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 {AccessControl-_setRoleAdmin}.\"},\"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\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":\"IAccessControl\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\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(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\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 {AccessControl-_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) external view returns (bool);\\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 {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\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) external;\\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) external;\\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) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC165.sol":{"IERC165":{"abi":[{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"details":"Interface of the ERC165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[EIP]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.","kind":"dev","methods":{"supportsInterface(bytes4)":{"details":"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[EIP]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n  /**\\n   * @dev Returns true if this contract implements the interface defined by\\n   * `interfaceId`. See the corresponding\\n   * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n   * to learn more about how these ids are created.\\n   *\\n   * This function call must use less than 30 000 gas.\\n   */\\n  function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xbca9de297214bb9c30daefda5ecaedd0af2c3e8e0440403ad543fb33528c5ef8\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/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"}],"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},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"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\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol":{"IERC20Detailed":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"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},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"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\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":\"IERC20Detailed\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol":{"Ownable":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.","kind":"dev","methods":{"constructor":{"details":"Initializes the contract setting the deployer as the initial owner."},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_1500":{"entryPoint":null,"id":1500,"parameterSlots":0,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506103a8806100616000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063715018a6146100465780638da5cb5b14610050578063f2fde38b1461007c575b600080fd5b61004e61008f565b005b6000546040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61004e61008a366004610335565b610184565b60005473ffffffffffffffffffffffffffffffffffffffff163314610115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610205576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161010c565b73ffffffffffffffffffffffffffffffffffffffff81166102a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161010c565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006020828403121561034757600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461036b57600080fd5b939250505056fea264697066735822122060d66b4a3ca2303d27305cff4c89e74478f62be4c3336779c48a50eedb33405364736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 DUP3 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH2 0x3A8 DUP1 PUSH2 0x61 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 0x715018A6 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x50 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x7C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x8F JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x4E PUSH2 0x8A CALLDATASIZE PUSH1 0x4 PUSH2 0x335 JUMP JUMPDEST PUSH2 0x184 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x115 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x205 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x10C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x2A8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x10C JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x347 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x36B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH1 0xD6 PUSH12 0x4A3CA2303D27305CFF4C89E7 DIFFICULTY PUSH25 0xF62BE4C3336779C48A50EEDB33405364736F6C634300080A00 CALLER ","sourceMap":"578:1525:11:-:0;;;815:135;;;;;;;;;-1:-1:-1;835:17:11;873:18;;-1:-1:-1;;;;;;873:18:11;678:10:4;873:18:11;;;;;902:43;;678:10:4;;;;902:43:11;;835:17;;902:43;829:121;578:1525;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@owner_1509":{"entryPoint":null,"id":1509,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_1544":{"entryPoint":143,"id":1544,"parameterSlots":0,"returnSlots":0},"@transferOwnership_1572":{"entryPoint":388,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address":{"entryPoint":821,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1324:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"115:125:201","statements":[{"nodeType":"YulAssignment","src":"125:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"137:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"148:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"133:3:201"},"nodeType":"YulFunctionCall","src":"133:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"125:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"167:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"182:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"190:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"178:3:201"},"nodeType":"YulFunctionCall","src":"178:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"160:6:201"},"nodeType":"YulFunctionCall","src":"160:74:201"},"nodeType":"YulExpressionStatement","src":"160:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"84:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"95:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"106:4:201","type":""}],"src":"14:226:201"},{"body":{"nodeType":"YulBlock","src":"315:239:201","statements":[{"body":{"nodeType":"YulBlock","src":"361:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"370:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"373:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"363:6:201"},"nodeType":"YulFunctionCall","src":"363:12:201"},"nodeType":"YulExpressionStatement","src":"363:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"336:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"345:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"332:3:201"},"nodeType":"YulFunctionCall","src":"332:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"357:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"328:3:201"},"nodeType":"YulFunctionCall","src":"328:32:201"},"nodeType":"YulIf","src":"325:52:201"},{"nodeType":"YulVariableDeclaration","src":"386:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"412:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"399:12:201"},"nodeType":"YulFunctionCall","src":"399:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"390:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"508:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"517:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"520:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"510:6:201"},"nodeType":"YulFunctionCall","src":"510:12:201"},"nodeType":"YulExpressionStatement","src":"510:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"444:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"455:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"462:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"451:3:201"},"nodeType":"YulFunctionCall","src":"451:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"441:2:201"},"nodeType":"YulFunctionCall","src":"441:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"434:6:201"},"nodeType":"YulFunctionCall","src":"434:73:201"},"nodeType":"YulIf","src":"431:93:201"},{"nodeType":"YulAssignment","src":"533:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"543:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"533:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"281:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"292:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"304:6:201","type":""}],"src":"245:309:201"},{"body":{"nodeType":"YulBlock","src":"733:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"750:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"761:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"743:6:201"},"nodeType":"YulFunctionCall","src":"743:21:201"},"nodeType":"YulExpressionStatement","src":"743:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"784:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"795:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"780:3:201"},"nodeType":"YulFunctionCall","src":"780:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"800:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"773:6:201"},"nodeType":"YulFunctionCall","src":"773:30:201"},"nodeType":"YulExpressionStatement","src":"773:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"823:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"834:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"819:3:201"},"nodeType":"YulFunctionCall","src":"819:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"839:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"812:6:201"},"nodeType":"YulFunctionCall","src":"812:62:201"},"nodeType":"YulExpressionStatement","src":"812:62:201"},{"nodeType":"YulAssignment","src":"883:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"895:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"906:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"891:3:201"},"nodeType":"YulFunctionCall","src":"891:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"883:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"710:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"724:4:201","type":""}],"src":"559:356:201"},{"body":{"nodeType":"YulBlock","src":"1094:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1111:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1122:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1104:6:201"},"nodeType":"YulFunctionCall","src":"1104:21:201"},"nodeType":"YulExpressionStatement","src":"1104:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1145:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1156:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1141:3:201"},"nodeType":"YulFunctionCall","src":"1141:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"1161:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1134:6:201"},"nodeType":"YulFunctionCall","src":"1134:30:201"},"nodeType":"YulExpressionStatement","src":"1134:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1184:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1195:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1180:3:201"},"nodeType":"YulFunctionCall","src":"1180:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"1200:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1173:6:201"},"nodeType":"YulFunctionCall","src":"1173:62:201"},"nodeType":"YulExpressionStatement","src":"1173:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1255:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1266:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1251:3:201"},"nodeType":"YulFunctionCall","src":"1251:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"1271:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1244:6:201"},"nodeType":"YulFunctionCall","src":"1244:36:201"},"nodeType":"YulExpressionStatement","src":"1244:36:201"},{"nodeType":"YulAssignment","src":"1289:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1301:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1312:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1297:3:201"},"nodeType":"YulFunctionCall","src":"1297:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1289:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1071:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1085:4:201","type":""}],"src":"920:402:201"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100415760003560e01c8063715018a6146100465780638da5cb5b14610050578063f2fde38b1461007c575b600080fd5b61004e61008f565b005b6000546040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61004e61008a366004610335565b610184565b60005473ffffffffffffffffffffffffffffffffffffffff163314610115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610205576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161010c565b73ffffffffffffffffffffffffffffffffffffffff81166102a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161010c565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006020828403121561034757600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461036b57600080fd5b939250505056fea264697066735822122060d66b4a3ca2303d27305cff4c89e74478f62be4c3336779c48a50eedb33405364736f6c634300080a0033","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 0x715018A6 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x50 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x7C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x8F JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x4E PUSH2 0x8A CALLDATASIZE PUSH1 0x4 PUSH2 0x335 JUMP JUMPDEST PUSH2 0x184 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x115 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x205 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x10C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x2A8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x10C JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x347 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x36B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH1 0xD6 PUSH12 0x4A3CA2303D27305CFF4C89E7 DIFFICULTY PUSH25 0xF62BE4C3336779C48A50EEDB33405364736F6C634300080A00 CALLER ","sourceMap":"578:1525:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1601:135;;;:::i;:::-;;1018:71;1056:7;1078:6;1018:71;;;1078:6;;;;160:74:201;;1018:71:11;;;;;148:2:201;1018:71:11;;;1875:226;;;;;;:::i;:::-;;:::i;1601:135::-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;761:2:201;1196:67:11;;;743:21:201;;;780:18;;;773:30;839:34;819:18;;;812:62;891:18;;1196:67:11;;;;;;;;;1703:1:::1;1687:6:::0;;1666:40:::1;::::0;::::1;1687:6:::0;;::::1;::::0;1666:40:::1;::::0;1703:1;;1666:40:::1;1729:1;1712:19:::0;;;::::1;::::0;;1601:135::o;1875:226::-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;761:2:201;1196:67:11;;;743:21:201;;;780:18;;;773:30;839:34;819:18;;;812:62;891:18;;1196:67:11;559:356:201;1196:67:11;1959:22:::1;::::0;::::1;1951:73;;;::::0;::::1;::::0;;1122:2:201;1951:73:11::1;::::0;::::1;1104:21:201::0;1161:2;1141:18;;;1134:30;1200:34;1180:18;;;1173:62;1271:8;1251:18;;;1244:36;1297:19;;1951:73:11::1;920:402:201::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;::::1;::::0;;::::1;::::0;2056:6;::::1;::::0;2035:38:::1;::::0;::::1;2079:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1875:226::o;245:309:201:-;304:6;357:2;345:9;336:7;332:23;328:32;325:52;;;373:1;370;363:12;325:52;412:9;399:23;462:42;455:5;451:54;444:5;441:65;431:93;;520:1;517;510:12;431:93;543:5;245:309;-1:-1:-1;;;245:309:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"187200","executionCost":"26005","totalCost":"213205"},"external":{"owner()":"2280","renounceOwnership()":"30104","transferOwnership(address)":"30312"}},"methodIdentifiers":{"owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable is Context {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial owner.\\n   */\\n  constructor() {\\n    address msgSender = _msgSender();\\n    _owner = msgSender;\\n    emit OwnershipTransferred(address(0), msgSender);\\n  }\\n\\n  /**\\n   * @dev Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Leaves the contract without owner. It will not be possible to call\\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\\n   *\\n   * NOTE: Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public virtual onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = address(0);\\n  }\\n\\n  /**\\n   * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function transferOwnership(address newOwner) public virtual onlyOwner {\\n    require(newOwner != address(0), 'Ownable: new owner is the zero address');\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\",\"keccak256\":\"0x3ce185c4f579e32006f8893dbfdc1b5d878c0e2cafd1508f7ceb081698bc81f9\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1472,"contract":"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol:Ownable","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol":{"SafeCast":{"abi":[],"devdoc":{"details":"Wrappers over Solidity's uintXX/intXX casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such 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. Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing all math on `uint256` and `int256` and then downcasting.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122078f682364477ca165fa18b2f16bd46d7a2c8df97cd35c7bdcf967f9e364b75ff64736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH25 0xF682364477CA165FA18B2F16BD46D7A2C8DF97CD35C7BDCF96 PUSH32 0x9E364B75FF64736F6C634300080A003300000000000000000000000000000000 ","sourceMap":"826:6610:12:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;826:6610:12;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122078f682364477ca165fa18b2f16bd46d7a2c8df97cd35c7bdcf967f9e364b75ff64736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH25 0xF682364477CA165FA18B2F16BD46D7A2C8DF97CD35C7BDCF96 PUSH32 0x9E364B75FF64736F6C634300080A003300000000000000000000000000000000 ","sourceMap":"826:6610:12:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"toInt128(int256)":"infinite","toInt16(int256)":"infinite","toInt256(uint256)":"infinite","toInt32(int256)":"infinite","toInt64(int256)":"infinite","toInt8(int256)":"infinite","toUint128(uint256)":"infinite","toUint16(uint256)":"infinite","toUint224(uint256)":"infinite","toUint256(int256)":"infinite","toUint32(uint256)":"infinite","toUint64(uint256)":"infinite","toUint8(uint256)":"infinite","toUint96(uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers over Solidity's uintXX/intXX casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such 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. Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing all math on `uint256` and `int256` and then downcasting.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":\"SafeCast\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol":{"SafeERC20":{"abi":[],"devdoc":{"details":"Wrappers around ERC20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.","kind":"dev","methods":{},"title":"SafeERC20","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220f28e8d5baad3c6e077ba54cbf72ff24cf78fe70f26b45bfc412fa925d5e9923f64736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLCODE DUP15 DUP14 JUMPDEST 0xAA 0xD3 0xC6 0xE0 PUSH24 0xBA54CBF72FF24CF78FE70F26B45BFC412FA925D5E9923F64 PUSH20 0x6F6C634300080A00330000000000000000000000 ","sourceMap":"631:3000:13:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;631:3000:13;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220f28e8d5baad3c6e077ba54cbf72ff24cf78fe70f26b45bfc412fa925d5e9923f64736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLCODE DUP15 DUP14 JUMPDEST 0xAA 0xD3 0xC6 0xE0 PUSH24 0xBA54CBF72FF24CF78FE70F26B45BFC412FA925D5E9923F64 PUSH20 0x6F6C634300080A00330000000000000000000000 ","sourceMap":"631:3000:13:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_callOptionalReturn(contract IERC20,bytes memory)":"infinite","safeApprove(contract IERC20,address,uint256)":"infinite","safeDecreaseAllowance(contract IERC20,address,uint256)":"infinite","safeIncreaseAllowance(contract IERC20,address,uint256)":"infinite","safeTransfer(contract IERC20,address,uint256)":"infinite","safeTransferFrom(contract IERC20,address,address,uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"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\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport './IERC20.sol';\\nimport './Address.sol';\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n  using Address for address;\\n\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n  }\\n\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    _callOptionalReturn(\\n      token,\\n      abi.encodeWithSelector(token.transferFrom.selector, from, to, value)\\n    );\\n  }\\n\\n  /**\\n   * @dev Deprecated. This function has issues similar to the ones found in\\n   * {IERC20-approve}, and its usage is discouraged.\\n   *\\n   * Whenever possible, use {safeIncreaseAllowance} and\\n   * {safeDecreaseAllowance} instead.\\n   */\\n  function safeApprove(IERC20 token, address spender, uint256 value) internal {\\n    // safeApprove should only be called when setting an initial allowance,\\n    // or when resetting it to zero. To increase and decrease it, use\\n    // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n    require(\\n      (value == 0) || (token.allowance(address(this), spender) == 0),\\n      'SafeERC20: approve from non-zero to non-zero allowance'\\n    );\\n    _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n  }\\n\\n  function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n    uint256 newAllowance = token.allowance(address(this), spender) + value;\\n    _callOptionalReturn(\\n      token,\\n      abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\\n    );\\n  }\\n\\n  function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n    unchecked {\\n      uint256 oldAllowance = token.allowance(address(this), spender);\\n      require(oldAllowance >= value, 'SafeERC20: decreased allowance below zero');\\n      uint256 newAllowance = oldAllowance - value;\\n      _callOptionalReturn(\\n        token,\\n        abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n   * on the return value: the return value is optional (but if data is returned, it must not be false).\\n   * @param token The token targeted by the call.\\n   * @param data The call data (encoded using abi.encode or one of its variants).\\n   */\\n  function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n    // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n    // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n    // the target address contains contract code and also asserts for success in the low-level call.\\n\\n    bytes memory returndata = address(token).functionCall(data, 'SafeERC20: low-level call failed');\\n    if (returndata.length > 0) {\\n      // Return data is optional\\n      require(abi.decode(returndata, (bool)), 'SafeERC20: ERC20 operation did not succeed');\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x9ada5448c24f34f934122c0e11d1a89bf9a31b7ade0dcb935bd7dcb339ef7f32\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol":{"SafeMath":{"abi":[],"devdoc":{"kind":"dev","methods":{},"title":"Optimized overflow and underflow safe math operations","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220950d88637a886ab00d0336ba6aa7340cc2aa4dd50b83b2cf3f82c4637f0d899364736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP6 0xD DUP9 PUSH4 0x7A886AB0 0xD SUB CALLDATASIZE 0xBA PUSH11 0xA7340CC2AA4DD50B83B2CF EXTCODEHASH DUP3 0xC4 PUSH4 0x7F0D8993 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"240:1532:14:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;240:1532:14;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220950d88637a886ab00d0336ba6aa7340cc2aa4dd50b83b2cf3f82c4637f0d899364736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP6 0xD DUP9 PUSH4 0x7A886AB0 0xD SUB CALLDATASIZE 0xBA PUSH11 0xA7340CC2AA4DD50B83B2CF EXTCODEHASH DUP3 0xC4 PUSH4 0x7F0D8993 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"240:1532:14:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"add(uint256,uint256)":"infinite","div(uint256,uint256)":"infinite","mul(uint256,uint256)":"infinite","sub(uint256,uint256)":"infinite","sub(uint256,uint256,string memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"Optimized overflow and underflow safe math operations\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol\":\"SafeMath\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/// @title Optimized overflow and underflow safe math operations\\n/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\\nlibrary SafeMath {\\n  /// @notice Returns x + y, reverts if sum overflows uint256\\n  /// @param x The augend\\n  /// @param y The addend\\n  /// @return z The sum of x and y\\n  function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x + y) >= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @param message The error msg\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y, string memory message) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x, message);\\n    }\\n  }\\n\\n  /// @notice Returns x * y, reverts if overflows\\n  /// @param x The multiplicand\\n  /// @param y The multiplier\\n  /// @return z The product of x and y\\n  function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require(x == 0 || (z = x * y) / x == y);\\n    }\\n  }\\n\\n  /// @notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\\n  /// @param x The numerator\\n  /// @param y The denominator\\n  /// @return z The product of x and y\\n  function div(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    return x / y;\\n  }\\n}\\n\",\"keccak256\":\"0xf1c5d8ba70a5fc3e20dbbc2aa2a2278d2535a57bc1e9abf1228ebc3068a045f0\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost","version":1}}},"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Strings.sol":{"Strings":{"abi":[],"devdoc":{"details":"String operations.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201a05c49d04876b7688edb42a011e2633b6aa4499992c0613d50003fed7005f8e64736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BYTE SDIV 0xC4 SWAP14 DIV DUP8 PUSH12 0x7688EDB42A011E2633B6AA44 SWAP10 SWAP10 0x2C MOD SGT 0xD5 STOP SUB INVALID 0xD7 STOP 0x5F DUP15 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"93:1683:15:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;93:1683:15;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201a05c49d04876b7688edb42a011e2633b6aa4499992c0613d50003fed7005f8e64736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BYTE SDIV 0xC4 SWAP14 DIV DUP8 PUSH12 0x7688EDB42A011E2633B6AA44 SWAP10 SWAP10 0x2C MOD SGT 0xD5 STOP SUB INVALID 0xD7 STOP 0x5F DUP15 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"93:1683:15:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"toHexString(uint256)":"infinite","toHexString(uint256,uint256)":"infinite","toString(uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"String operations.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Strings.sol\":\"Strings\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n  bytes16 private constant _HEX_SYMBOLS = '0123456789abcdef';\\n\\n  /**\\n   * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n   */\\n  function toString(uint256 value) internal pure returns (string memory) {\\n    // Inspired by OraclizeAPI's implementation - MIT licence\\n    // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n    if (value == 0) {\\n      return '0';\\n    }\\n    uint256 temp = value;\\n    uint256 digits;\\n    while (temp != 0) {\\n      digits++;\\n      temp /= 10;\\n    }\\n    bytes memory buffer = new bytes(digits);\\n    while (value != 0) {\\n      digits -= 1;\\n      buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));\\n      value /= 10;\\n    }\\n    return string(buffer);\\n  }\\n\\n  /**\\n   * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n   */\\n  function toHexString(uint256 value) internal pure returns (string memory) {\\n    if (value == 0) {\\n      return '0x00';\\n    }\\n    uint256 temp = value;\\n    uint256 length = 0;\\n    while (temp != 0) {\\n      length++;\\n      temp >>= 8;\\n    }\\n    return toHexString(value, length);\\n  }\\n\\n  /**\\n   * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n   */\\n  function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n    bytes memory buffer = new bytes(2 * length + 2);\\n    buffer[0] = '0';\\n    buffer[1] = 'x';\\n    for (uint256 i = 2 * length + 1; i > 1; --i) {\\n      buffer[i] = _HEX_SYMBOLS[value & 0xf];\\n      value >>= 4;\\n    }\\n    require(value == 0, 'Strings: hex length insufficient');\\n    return string(buffer);\\n  }\\n}\\n\",\"keccak256\":\"0xb2754a420cad582ee384ce1075833bc78411b4e27198019fe762066f7a72946a\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol":{"BaseAdminUpgradeabilityProxy":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"}],"devdoc":{"details":"This contract combines an upgradeability proxy with an authorization mechanism for administrative tasks. All external functions in this contract must be guarded by the `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity feature proposal that would enable this to be done automatically.","events":{"AdminChanged(address,address)":{"details":"Emitted when the administration has been transferred.","params":{"newAdmin":"Address of the new admin.","previousAdmin":"Address of the previous admin."}}},"kind":"dev","methods":{"admin()":{"returns":{"_0":"The address of the proxy admin."}},"changeAdmin(address)":{"details":"Changes the admin of the proxy. Only the current admin can call this function.","params":{"newAdmin":"Address to transfer proxy administration to."}},"implementation()":{"returns":{"_0":"The address of the implementation."}},"upgradeTo(address)":{"details":"Upgrade the backing implementation of the proxy. Only the admin can call this function.","params":{"newImplementation":"Address of the new implementation."}},"upgradeToAndCall(address,bytes)":{"details":"Upgrade the backing implementation of the proxy and call a function on the new implementation. This is useful to initialize the proxied contract.","params":{"data":"Data to send as msg.data in the low level call. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.","newImplementation":"Address of the new implementation."}}},"stateVariables":{"ADMIN_SLOT":{"details":"Storage slot with the admin of the contract. This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is validated in the constructor."}},"title":"BaseAdminUpgradeabilityProxy","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50610857806100206000396000f3fe60806040526004361061005a5760003560e01c80635c60da1b116100435780635c60da1b146100975780638f283970146100d5578063f851a440146100f55761005a565b80633659cfe6146100645780634f1ef28614610084575b61006261010a565b005b34801561007057600080fd5b5061006261007f36600461076c565b610144565b61006261009236600461078e565b6101ad565b3480156100a357600080fd5b506100ac610295565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100e157600080fd5b506100626100f036600461076c565b610323565b34801561010157600080fd5b506100ac6104c0565b610112610543565b61014261013d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b610620565b565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101a5576101a281610644565b50565b6101a261010a565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102885761020b83610644565b60008373ffffffffffffffffffffffffffffffffffffffff168383604051610234929190610811565b600060405180830381855af49150503d806000811461026f576040519150601f19603f3d011682016040523d82523d6000602084013e610274565b606091505b505090508061028257600080fd5b50505050565b61029061010a565b505050565b60006102bf7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561031857507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b61032061010a565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101a55773ffffffffffffffffffffffffffffffffffffffff8116610420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f60448201527f787920746f20746865207a65726f20616464726573730000000000000000000060648201526084015b60405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104697fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a16101a2817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60006104ea7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561031857507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e00000000000000000000000000006064820152608401610417565b3660008037600080366000845af43d6000803e80801561063f573d6000f35b3d6000fd5b61064d81610691565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b803b61071f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e7472616374206164647265737300000000006064820152608401610417565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b803573ffffffffffffffffffffffffffffffffffffffff8116811461076757600080fd5b919050565b60006020828403121561077e57600080fd5b61078782610743565b9392505050565b6000806000604084860312156107a357600080fd5b6107ac84610743565b9250602084013567ffffffffffffffff808211156107c957600080fd5b818601915086601f8301126107dd57600080fd5b8135818111156107ec57600080fd5b8760208285010111156107fe57600080fd5b6020830194508093505050509250925092565b818382376000910190815291905056fea26469706673582212209867391586e73a8e235b3415dbf8d758a8755d8c07ff2779b4fe2379a4088e8b64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x857 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x8F283970 EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xF5 JUMPI PUSH2 0x5A JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x84 JUMPI JUMPDEST PUSH2 0x62 PUSH2 0x10A JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x62 PUSH2 0x7F CALLDATASIZE PUSH1 0x4 PUSH2 0x76C JUMP JUMPDEST PUSH2 0x144 JUMP JUMPDEST PUSH2 0x62 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x78E JUMP JUMPDEST PUSH2 0x1AD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x295 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x62 PUSH2 0xF0 CALLDATASIZE PUSH1 0x4 PUSH2 0x76C JUMP JUMPDEST PUSH2 0x323 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x101 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x4C0 JUMP JUMPDEST PUSH2 0x112 PUSH2 0x543 JUMP JUMPDEST PUSH2 0x142 PUSH2 0x13D PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x620 JUMP JUMPDEST JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1A5 JUMPI PUSH2 0x1A2 DUP2 PUSH2 0x644 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x1A2 PUSH2 0x10A JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x288 JUMPI PUSH2 0x20B DUP4 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x234 SWAP3 SWAP2 SWAP1 PUSH2 0x811 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x26F 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 0x274 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x290 PUSH2 0x10A JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2BF PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x318 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x320 PUSH2 0x10A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1A5 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x420 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F74206368616E6765207468652061646D696E206F6620612070726F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x787920746F20746865207A65726F206164647265737300000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F PUSH2 0x469 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x1A2 DUP2 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4EA PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x318 JUMPI POP PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x142 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x417 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x63F JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x64D DUP2 PUSH2 0x691 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x71F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x417 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x767 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x77E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x787 DUP3 PUSH2 0x743 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x7A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7AC DUP5 PUSH2 0x743 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x7C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x7DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x7EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x7FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP9 PUSH8 0x391586E73A8E235B CALLVALUE ISZERO 0xDB 0xF8 0xD7 PC 0xA8 PUSH22 0x5D8C07FF2779B4FE2379A4088E8B64736F6C63430008 EXP STOP CALLER ","sourceMap":"462:3384:16:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_2893":{"entryPoint":null,"id":2893,"parameterSlots":0,"returnSlots":0},"@_admin_2650":{"entryPoint":null,"id":2650,"parameterSlots":0,"returnSlots":1},"@_delegate_2907":{"entryPoint":1568,"id":2907,"parameterSlots":1,"returnSlots":0},"@_fallback_2925":{"entryPoint":266,"id":2925,"parameterSlots":0,"returnSlots":0},"@_implementation_2712":{"entryPoint":null,"id":2712,"parameterSlots":0,"returnSlots":1},"@_setAdmin_2662":{"entryPoint":null,"id":2662,"parameterSlots":1,"returnSlots":0},"@_setImplementation_2747":{"entryPoint":1681,"id":2747,"parameterSlots":1,"returnSlots":0},"@_upgradeTo_2727":{"entryPoint":1604,"id":2727,"parameterSlots":1,"returnSlots":0},"@_willFallback_2682":{"entryPoint":1347,"id":2682,"parameterSlots":0,"returnSlots":0},"@_willFallback_2912":{"entryPoint":null,"id":2912,"parameterSlots":0,"returnSlots":0},"@admin_2558":{"entryPoint":1216,"id":2558,"parameterSlots":0,"returnSlots":1},"@changeAdmin_2599":{"entryPoint":803,"id":2599,"parameterSlots":1,"returnSlots":0},"@implementation_2570":{"entryPoint":661,"id":2570,"parameterSlots":0,"returnSlots":1},"@isContract_445":{"entryPoint":null,"id":445,"parameterSlots":1,"returnSlots":1},"@upgradeToAndCall_2638":{"entryPoint":429,"id":2638,"parameterSlots":3,"returnSlots":0},"@upgradeTo_2612":{"entryPoint":324,"id":2612,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":1859,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":1900,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_bytes_calldata_ptr":{"entryPoint":1934,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":2065,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_37112268ceb11e15373f32f9374a1f3287d0a3e6e5a9a435ac06367e6cd0cf00__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3182:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:147:201","statements":[{"nodeType":"YulAssignment","src":"73:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:201"},"nodeType":"YulFunctionCall","src":"82:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:201"}]},{"body":{"nodeType":"YulBlock","src":"188:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"197:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"200:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"190:6:201"},"nodeType":"YulFunctionCall","src":"190:12:201"},"nodeType":"YulExpressionStatement","src":"190:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"142:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:201"},"nodeType":"YulFunctionCall","src":"131:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:201"},"nodeType":"YulFunctionCall","src":"121:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:201"},"nodeType":"YulFunctionCall","src":"114:73:201"},"nodeType":"YulIf","src":"111:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:201","type":""}],"src":"14:196:201"},{"body":{"nodeType":"YulBlock","src":"285:116:201","statements":[{"body":{"nodeType":"YulBlock","src":"331:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"340:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"343:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"333:6:201"},"nodeType":"YulFunctionCall","src":"333:12:201"},"nodeType":"YulExpressionStatement","src":"333:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"306:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"315:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"302:3:201"},"nodeType":"YulFunctionCall","src":"302:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"327:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"298:3:201"},"nodeType":"YulFunctionCall","src":"298:32:201"},"nodeType":"YulIf","src":"295:52:201"},{"nodeType":"YulAssignment","src":"356:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"385:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"366:18:201"},"nodeType":"YulFunctionCall","src":"366:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"356:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"251:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"262:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"274:6:201","type":""}],"src":"215:186:201"},{"body":{"nodeType":"YulBlock","src":"512:559:201","statements":[{"body":{"nodeType":"YulBlock","src":"558:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"567:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"570:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"560:6:201"},"nodeType":"YulFunctionCall","src":"560:12:201"},"nodeType":"YulExpressionStatement","src":"560:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"533:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"542:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"529:3:201"},"nodeType":"YulFunctionCall","src":"529:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"554:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"525:3:201"},"nodeType":"YulFunctionCall","src":"525:32:201"},"nodeType":"YulIf","src":"522:52:201"},{"nodeType":"YulAssignment","src":"583:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"612:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"593:18:201"},"nodeType":"YulFunctionCall","src":"593:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"583:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"631:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"662:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"673:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"658:3:201"},"nodeType":"YulFunctionCall","src":"658:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"645:12:201"},"nodeType":"YulFunctionCall","src":"645:32:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"635:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"686:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"696:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"690:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"741:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"750:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"753:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"743:6:201"},"nodeType":"YulFunctionCall","src":"743:12:201"},"nodeType":"YulExpressionStatement","src":"743:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"729:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"737:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"726:2:201"},"nodeType":"YulFunctionCall","src":"726:14:201"},"nodeType":"YulIf","src":"723:34:201"},{"nodeType":"YulVariableDeclaration","src":"766:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"780:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"791:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"776:3:201"},"nodeType":"YulFunctionCall","src":"776:22:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"770:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"846:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"855:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"858:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"848:6:201"},"nodeType":"YulFunctionCall","src":"848:12:201"},"nodeType":"YulExpressionStatement","src":"848:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"825:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"829:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"821:3:201"},"nodeType":"YulFunctionCall","src":"821:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"836:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"817:3:201"},"nodeType":"YulFunctionCall","src":"817:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"810:6:201"},"nodeType":"YulFunctionCall","src":"810:35:201"},"nodeType":"YulIf","src":"807:55:201"},{"nodeType":"YulVariableDeclaration","src":"871:30:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"898:2:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"885:12:201"},"nodeType":"YulFunctionCall","src":"885:16:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"875:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"928:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"937:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"940:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"930:6:201"},"nodeType":"YulFunctionCall","src":"930:12:201"},"nodeType":"YulExpressionStatement","src":"930:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"916:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"924:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"913:2:201"},"nodeType":"YulFunctionCall","src":"913:14:201"},"nodeType":"YulIf","src":"910:34:201"},{"body":{"nodeType":"YulBlock","src":"994:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1003:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1006:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"996:6:201"},"nodeType":"YulFunctionCall","src":"996:12:201"},"nodeType":"YulExpressionStatement","src":"996:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"967:2:201"},{"name":"length","nodeType":"YulIdentifier","src":"971:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"963:3:201"},"nodeType":"YulFunctionCall","src":"963:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"980:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"959:3:201"},"nodeType":"YulFunctionCall","src":"959:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"985:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"956:2:201"},"nodeType":"YulFunctionCall","src":"956:37:201"},"nodeType":"YulIf","src":"953:57:201"},{"nodeType":"YulAssignment","src":"1019:21:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1033:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"1037:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1029:3:201"},"nodeType":"YulFunctionCall","src":"1029:11:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1019:6:201"}]},{"nodeType":"YulAssignment","src":"1049:16:201","value":{"name":"length","nodeType":"YulIdentifier","src":"1059:6:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1049:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"462:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"473:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"485:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"493:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"501:6:201","type":""}],"src":"406:665:201"},{"body":{"nodeType":"YulBlock","src":"1177:125:201","statements":[{"nodeType":"YulAssignment","src":"1187:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1199:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1210:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1195:3:201"},"nodeType":"YulFunctionCall","src":"1195:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1187:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1229:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1244:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1252:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1240:3:201"},"nodeType":"YulFunctionCall","src":"1240:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1222:6:201"},"nodeType":"YulFunctionCall","src":"1222:74:201"},"nodeType":"YulExpressionStatement","src":"1222:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1146:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1157:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1168:4:201","type":""}],"src":"1076:226:201"},{"body":{"nodeType":"YulBlock","src":"1454:124:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1477:3:201"},{"name":"value0","nodeType":"YulIdentifier","src":"1482:6:201"},{"name":"value1","nodeType":"YulIdentifier","src":"1490:6:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1464:12:201"},"nodeType":"YulFunctionCall","src":"1464:33:201"},"nodeType":"YulExpressionStatement","src":"1464:33:201"},{"nodeType":"YulVariableDeclaration","src":"1506:26:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1520:3:201"},{"name":"value1","nodeType":"YulIdentifier","src":"1525:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1516:3:201"},"nodeType":"YulFunctionCall","src":"1516:16:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1510:2:201","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1548:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"1552:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1541:6:201"},"nodeType":"YulFunctionCall","src":"1541:13:201"},"nodeType":"YulExpressionStatement","src":"1541:13:201"},{"nodeType":"YulAssignment","src":"1563:9:201","value":{"name":"_1","nodeType":"YulIdentifier","src":"1570:2:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"1563:3:201"}]}]},"name":"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"1422:3:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1427:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1435:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"1446:3:201","type":""}],"src":"1307:271:201"},{"body":{"nodeType":"YulBlock","src":"1757:244:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1774:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1785:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1767:6:201"},"nodeType":"YulFunctionCall","src":"1767:21:201"},"nodeType":"YulExpressionStatement","src":"1767:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1808:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1819:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1804:3:201"},"nodeType":"YulFunctionCall","src":"1804:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"1824:2:201","type":"","value":"54"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1797:6:201"},"nodeType":"YulFunctionCall","src":"1797:30:201"},"nodeType":"YulExpressionStatement","src":"1797:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1847:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1858:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1843:3:201"},"nodeType":"YulFunctionCall","src":"1843:18:201"},{"hexValue":"43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f","kind":"string","nodeType":"YulLiteral","src":"1863:34:201","type":"","value":"Cannot change the admin of a pro"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1836:6:201"},"nodeType":"YulFunctionCall","src":"1836:62:201"},"nodeType":"YulExpressionStatement","src":"1836:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1918:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1929:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1914:3:201"},"nodeType":"YulFunctionCall","src":"1914:18:201"},{"hexValue":"787920746f20746865207a65726f2061646472657373","kind":"string","nodeType":"YulLiteral","src":"1934:24:201","type":"","value":"xy to the zero address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1907:6:201"},"nodeType":"YulFunctionCall","src":"1907:52:201"},"nodeType":"YulExpressionStatement","src":"1907:52:201"},{"nodeType":"YulAssignment","src":"1968:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1980:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1991:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1976:3:201"},"nodeType":"YulFunctionCall","src":"1976:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1968:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_37112268ceb11e15373f32f9374a1f3287d0a3e6e5a9a435ac06367e6cd0cf00__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1734:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1748:4:201","type":""}],"src":"1583:418:201"},{"body":{"nodeType":"YulBlock","src":"2135:198:201","statements":[{"nodeType":"YulAssignment","src":"2145:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2157:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2168:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2153:3:201"},"nodeType":"YulFunctionCall","src":"2153:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2145:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"2180:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2190:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2184:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2248:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2263:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2271:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2259:3:201"},"nodeType":"YulFunctionCall","src":"2259:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2241:6:201"},"nodeType":"YulFunctionCall","src":"2241:34:201"},"nodeType":"YulExpressionStatement","src":"2241:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2295:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2306:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2291:3:201"},"nodeType":"YulFunctionCall","src":"2291:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2315:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2323:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2311:3:201"},"nodeType":"YulFunctionCall","src":"2311:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2284:6:201"},"nodeType":"YulFunctionCall","src":"2284:43:201"},"nodeType":"YulExpressionStatement","src":"2284:43:201"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2096:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2107:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2115:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2126:4:201","type":""}],"src":"2006:327:201"},{"body":{"nodeType":"YulBlock","src":"2512:240:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2529:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2540:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2522:6:201"},"nodeType":"YulFunctionCall","src":"2522:21:201"},"nodeType":"YulExpressionStatement","src":"2522:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2563:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2574:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2559:3:201"},"nodeType":"YulFunctionCall","src":"2559:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2579:2:201","type":"","value":"50"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2552:6:201"},"nodeType":"YulFunctionCall","src":"2552:30:201"},"nodeType":"YulExpressionStatement","src":"2552:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2602:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2613:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2598:3:201"},"nodeType":"YulFunctionCall","src":"2598:18:201"},{"hexValue":"43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e206672","kind":"string","nodeType":"YulLiteral","src":"2618:34:201","type":"","value":"Cannot call fallback function fr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2591:6:201"},"nodeType":"YulFunctionCall","src":"2591:62:201"},"nodeType":"YulExpressionStatement","src":"2591:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2673:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2684:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2669:3:201"},"nodeType":"YulFunctionCall","src":"2669:18:201"},{"hexValue":"6f6d207468652070726f78792061646d696e","kind":"string","nodeType":"YulLiteral","src":"2689:20:201","type":"","value":"om the proxy admin"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2662:6:201"},"nodeType":"YulFunctionCall","src":"2662:48:201"},"nodeType":"YulExpressionStatement","src":"2662:48:201"},{"nodeType":"YulAssignment","src":"2719:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2731:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2742:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2727:3:201"},"nodeType":"YulFunctionCall","src":"2727:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2719:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2489:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2503:4:201","type":""}],"src":"2338:414:201"},{"body":{"nodeType":"YulBlock","src":"2931:249:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2948:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2959:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2941:6:201"},"nodeType":"YulFunctionCall","src":"2941:21:201"},"nodeType":"YulExpressionStatement","src":"2941:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2982:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2993:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2978:3:201"},"nodeType":"YulFunctionCall","src":"2978:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2998:2:201","type":"","value":"59"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2971:6:201"},"nodeType":"YulFunctionCall","src":"2971:30:201"},"nodeType":"YulExpressionStatement","src":"2971:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3021:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3032:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3017:3:201"},"nodeType":"YulFunctionCall","src":"3017:18:201"},{"hexValue":"43616e6e6f742073657420612070726f787920696d706c656d656e746174696f","kind":"string","nodeType":"YulLiteral","src":"3037:34:201","type":"","value":"Cannot set a proxy implementatio"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3010:6:201"},"nodeType":"YulFunctionCall","src":"3010:62:201"},"nodeType":"YulExpressionStatement","src":"3010:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3092:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3103:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3088:3:201"},"nodeType":"YulFunctionCall","src":"3088:18:201"},{"hexValue":"6e20746f2061206e6f6e2d636f6e74726163742061646472657373","kind":"string","nodeType":"YulLiteral","src":"3108:29:201","type":"","value":"n to a non-contract address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3081:6:201"},"nodeType":"YulFunctionCall","src":"3081:57:201"},"nodeType":"YulExpressionStatement","src":"3081:57:201"},{"nodeType":"YulAssignment","src":"3147:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3159:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3170:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3155:3:201"},"nodeType":"YulFunctionCall","src":"3155:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3147:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2908:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2922:4:201","type":""}],"src":"2757:423:201"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n        value1 := add(_2, 32)\n        value2 := length\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, 0)\n        end := _1\n    }\n    function abi_encode_tuple_t_stringliteral_37112268ceb11e15373f32f9374a1f3287d0a3e6e5a9a435ac06367e6cd0cf00__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 54)\n        mstore(add(headStart, 64), \"Cannot change the admin of a pro\")\n        mstore(add(headStart, 96), \"xy to the zero address\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 50)\n        mstore(add(headStart, 64), \"Cannot call fallback function fr\")\n        mstore(add(headStart, 96), \"om the proxy admin\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 59)\n        mstore(add(headStart, 64), \"Cannot set a proxy implementatio\")\n        mstore(add(headStart, 96), \"n to a non-contract address\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"60806040526004361061005a5760003560e01c80635c60da1b116100435780635c60da1b146100975780638f283970146100d5578063f851a440146100f55761005a565b80633659cfe6146100645780634f1ef28614610084575b61006261010a565b005b34801561007057600080fd5b5061006261007f36600461076c565b610144565b61006261009236600461078e565b6101ad565b3480156100a357600080fd5b506100ac610295565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100e157600080fd5b506100626100f036600461076c565b610323565b34801561010157600080fd5b506100ac6104c0565b610112610543565b61014261013d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b610620565b565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101a5576101a281610644565b50565b6101a261010a565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102885761020b83610644565b60008373ffffffffffffffffffffffffffffffffffffffff168383604051610234929190610811565b600060405180830381855af49150503d806000811461026f576040519150601f19603f3d011682016040523d82523d6000602084013e610274565b606091505b505090508061028257600080fd5b50505050565b61029061010a565b505050565b60006102bf7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561031857507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b61032061010a565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101a55773ffffffffffffffffffffffffffffffffffffffff8116610420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f60448201527f787920746f20746865207a65726f20616464726573730000000000000000000060648201526084015b60405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104697fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a16101a2817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60006104ea7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561031857507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e00000000000000000000000000006064820152608401610417565b3660008037600080366000845af43d6000803e80801561063f573d6000f35b3d6000fd5b61064d81610691565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b803b61071f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e7472616374206164647265737300000000006064820152608401610417565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b803573ffffffffffffffffffffffffffffffffffffffff8116811461076757600080fd5b919050565b60006020828403121561077e57600080fd5b61078782610743565b9392505050565b6000806000604084860312156107a357600080fd5b6107ac84610743565b9250602084013567ffffffffffffffff808211156107c957600080fd5b818601915086601f8301126107dd57600080fd5b8135818111156107ec57600080fd5b8760208285010111156107fe57600080fd5b6020830194508093505050509250925092565b818382376000910190815291905056fea26469706673582212209867391586e73a8e235b3415dbf8d758a8755d8c07ff2779b4fe2379a4088e8b64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x8F283970 EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xF5 JUMPI PUSH2 0x5A JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x84 JUMPI JUMPDEST PUSH2 0x62 PUSH2 0x10A JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x62 PUSH2 0x7F CALLDATASIZE PUSH1 0x4 PUSH2 0x76C JUMP JUMPDEST PUSH2 0x144 JUMP JUMPDEST PUSH2 0x62 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x78E JUMP JUMPDEST PUSH2 0x1AD JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x295 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x62 PUSH2 0xF0 CALLDATASIZE PUSH1 0x4 PUSH2 0x76C JUMP JUMPDEST PUSH2 0x323 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x101 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x4C0 JUMP JUMPDEST PUSH2 0x112 PUSH2 0x543 JUMP JUMPDEST PUSH2 0x142 PUSH2 0x13D PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x620 JUMP JUMPDEST JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1A5 JUMPI PUSH2 0x1A2 DUP2 PUSH2 0x644 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x1A2 PUSH2 0x10A JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x288 JUMPI PUSH2 0x20B DUP4 PUSH2 0x644 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x234 SWAP3 SWAP2 SWAP1 PUSH2 0x811 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x26F 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 0x274 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x290 PUSH2 0x10A JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2BF PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x318 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x320 PUSH2 0x10A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1A5 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x420 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F74206368616E6765207468652061646D696E206F6620612070726F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x787920746F20746865207A65726F206164647265737300000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F PUSH2 0x469 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x1A2 DUP2 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4EA PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x318 JUMPI POP PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x142 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x417 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x63F JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x64D DUP2 PUSH2 0x691 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x71F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x417 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x767 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x77E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x787 DUP3 PUSH2 0x743 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x7A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7AC DUP5 PUSH2 0x743 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x7C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x7DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x7EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x7FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP9 PUSH8 0x391586E73A8E235B CALLVALUE ISZERO 0xDB 0xF8 0xD7 PC 0xA8 PUSH22 0x5D8C07FF2779B4FE2379A4088E8B64736F6C63430008 EXP STOP CALLER ","sourceMap":"462:3384:16:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;572:11:20;:9;:11::i;:::-;462:3384:16;2246:103;;;;;;;;;;-1:-1:-1;2246:103:16;;;;;:::i;:::-;;:::i;2866:234::-;;;;;;:::i;:::-;;:::i;1566:96::-;;;;;;;;;;;;;:::i;:::-;;;1252:42:201;1240:55;;;1222:74;;1210:2;1195:18;1566:96:16;;;;;;;1838:224;;;;;;;;;;-1:-1:-1;1838:224:16;;;;;:::i;:::-;;:::i;1424:78::-;;;;;;;;;;;;;:::i;2155:90:20:-;2191:15;:13;:15::i;:::-;2212:28;2222:17;823:66:17;1183:11;;1008:196;2222:17:20;2212:9;:28::i;:::-;2155:90::o;2246:103:16:-;1002:66;3295:11;1287:22;;:10;:22;;;1283:76;;;2315:29:::1;2326:17;2315:10;:29::i;:::-;2246:103:::0;:::o;1283:76::-;1341:11;:9;:11::i;2866:234::-;1002:66;3295:11;1287:22;;:10;:22;;;1283:76;;;2983:29:::1;2994:17;2983:10;:29::i;:::-;3019:12;3037:17;:30;;3068:4;;3037:36;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3018:55;;;3087:7;3079:16;;;::::0;::::1;;2977:123;2866:234:::0;;;:::o;1283:76::-;1341:11;:9;:11::i;:::-;2866:234;;;:::o;1566:96::-;1618:7;1301:8;1002:66;3295:11;;3149:167;1301:8;1287:22;;:10;:22;;;1283:76;;;-1:-1:-1;823:66:17;1183:11;;1566:96:16:o;1283:76::-;1341:11;:9;:11::i;:::-;1566:96;:::o;1838:224::-;1002:66;3295:11;1287:22;;:10;:22;;;1283:76;;;1908:22:::1;::::0;::::1;1900:89;;;::::0;::::1;::::0;;1785:2:201;1900:89:16::1;::::0;::::1;1767:21:201::0;1824:2;1804:18;;;1797:30;1863:34;1843:18;;;1836:62;1934:24;1914:18;;;1907:52;1976:19;;1900:89:16::1;;;;;;;;;2000:32;2013:8;1002:66:::0;3295:11;;3149:167;2013:8:::1;2000:32;::::0;;2190:42:201;2259:15;;;2241:34;;2311:15;;;2306:2;2291:18;;2284:43;2153:18;2000:32:16::1;;;;;;;2038:19;2048:8;1002:66:::0;3563:22;3432:163;1424:78;1467:7;1301:8;1002:66;3295:11;;3149:167;1301:8;1287:22;;:10;:22;;;1283:76;;;-1:-1:-1;1002:66:16;3295:11;;1566:96::o;3670:174::-;1002:66;3295:11;3735:22;;:10;:22;;;;3727:85;;;;;;;2540:2:201;3727:85:16;;;2522:21:201;2579:2;2559:18;;;2552:30;2618:34;2598:18;;;2591:62;2689:20;2669:18;;;2662:48;2727:19;;3727:85:16;2338:414:201;1005:802:20;1338:14;1335:1;1332;1319:34;1534:1;1531;1515:14;1512:1;1496:14;1489:5;1476:60;1598:16;1595:1;1592;1577:38;1630:6;1685:52;;;;1772:16;1769:1;1762:27;1685:52;1712:16;1709:1;1702:27;1339:142:17;1401:37;1420:17;1401:18;:37::i;:::-;1449:27;;;;;;;;;;;1339:142;:::o;1618:334::-;1025:20:3;;1688:127:17;;;;;;;2959:2:201;1688:127:17;;;2941:21:201;2998:2;2978:18;;;2971:30;3037:34;3017:18;;;3010:62;3108:29;3088:18;;;3081:57;3155:19;;1688:127:17;2757:423:201;1688:127:17;823:66;1911:31;1618:334::o;14:196:201:-;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:186::-;274:6;327:2;315:9;306:7;302:23;298:32;295:52;;;343:1;340;333:12;295:52;366:29;385:9;366:29;:::i;:::-;356:39;215:186;-1:-1:-1;;;215:186:201:o;406:665::-;485:6;493;501;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;593:29;612:9;593:29;:::i;:::-;583:39;;673:2;662:9;658:18;645:32;696:18;737:2;729:6;726:14;723:34;;;753:1;750;743:12;723:34;791:6;780:9;776:22;766:32;;836:7;829:4;825:2;821:13;817:27;807:55;;858:1;855;848:12;807:55;898:2;885:16;924:2;916:6;913:14;910:34;;;940:1;937;930:12;910:34;985:7;980:2;971:6;967:2;963:15;959:24;956:37;953:57;;;1006:1;1003;996:12;953:57;1037:2;1033;1029:11;1019:21;;1059:6;1049:16;;;;;406:665;;;;;:::o;1307:271::-;1490:6;1482;1477:3;1464:33;1446:3;1516:16;;1541:13;;;1516:16;1307:271;-1:-1:-1;1307:271:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"427000","executionCost":"461","totalCost":"427461"},"external":{"":"infinite","admin()":"infinite","changeAdmin(address)":"infinite","implementation()":"infinite","upgradeTo(address)":"infinite","upgradeToAndCall(address,bytes)":"infinite"},"internal":{"_admin()":"infinite","_setAdmin(address)":"infinite","_willFallback()":"infinite"}},"methodIdentifiers":{"admin()":"f851a440","changeAdmin(address)":"8f283970","implementation()":"5c60da1b","upgradeTo(address)":"3659cfe6","upgradeToAndCall(address,bytes)":"4f1ef286"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract combines an upgradeability proxy with an authorization mechanism for administrative tasks. All external functions in this contract must be guarded by the `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity feature proposal that would enable this to be done automatically.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the administration has been transferred.\",\"params\":{\"newAdmin\":\"Address of the new admin.\",\"previousAdmin\":\"Address of the previous admin.\"}}},\"kind\":\"dev\",\"methods\":{\"admin()\":{\"returns\":{\"_0\":\"The address of the proxy admin.\"}},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Only the current admin can call this function.\",\"params\":{\"newAdmin\":\"Address to transfer proxy administration to.\"}},\"implementation()\":{\"returns\":{\"_0\":\"The address of the implementation.\"}},\"upgradeTo(address)\":{\"details\":\"Upgrade the backing implementation of the proxy. Only the admin can call this function.\",\"params\":{\"newImplementation\":\"Address of the new implementation.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the backing implementation of the proxy and call a function on the new implementation. This is useful to initialize the proxied contract.\",\"params\":{\"data\":\"Data to send as msg.data in the low level call. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\",\"newImplementation\":\"Address of the new implementation.\"}}},\"stateVariables\":{\"ADMIN_SLOT\":{\"details\":\"Storage slot with the admin of the contract. This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is validated in the constructor.\"}},\"title\":\"BaseAdminUpgradeabilityProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol\":\"BaseAdminUpgradeabilityProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './UpgradeabilityProxy.sol';\\n\\n/**\\n * @title BaseAdminUpgradeabilityProxy\\n * @dev This contract combines an upgradeability proxy with an authorization\\n * mechanism for administrative tasks.\\n * All external functions in this contract must be guarded by the\\n * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\\n * feature proposal that would enable this to be done automatically.\\n */\\ncontract BaseAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Emitted when the administration has been transferred.\\n   * @param previousAdmin Address of the previous admin.\\n   * @param newAdmin Address of the new admin.\\n   */\\n  event AdminChanged(address previousAdmin, address newAdmin);\\n\\n  /**\\n   * @dev Storage slot with the admin of the contract.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant ADMIN_SLOT =\\n    0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n  /**\\n   * @dev Modifier to check whether the `msg.sender` is the admin.\\n   * If it is, it will run the function. Otherwise, it will delegate the call\\n   * to the implementation.\\n   */\\n  modifier ifAdmin() {\\n    if (msg.sender == _admin()) {\\n      _;\\n    } else {\\n      _fallback();\\n    }\\n  }\\n\\n  /**\\n   * @return The address of the proxy admin.\\n   */\\n  function admin() external ifAdmin returns (address) {\\n    return _admin();\\n  }\\n\\n  /**\\n   * @return The address of the implementation.\\n   */\\n  function implementation() external ifAdmin returns (address) {\\n    return _implementation();\\n  }\\n\\n  /**\\n   * @dev Changes the admin of the proxy.\\n   * Only the current admin can call this function.\\n   * @param newAdmin Address to transfer proxy administration to.\\n   */\\n  function changeAdmin(address newAdmin) external ifAdmin {\\n    require(newAdmin != address(0), 'Cannot change the admin of a proxy to the zero address');\\n    emit AdminChanged(_admin(), newAdmin);\\n    _setAdmin(newAdmin);\\n  }\\n\\n  /**\\n   * @dev Upgrade the backing implementation of the proxy.\\n   * Only the admin can call this function.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function upgradeTo(address newImplementation) external ifAdmin {\\n    _upgradeTo(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Upgrade the backing implementation of the proxy and call a function\\n   * on the new implementation.\\n   * This is useful to initialize the proxied contract.\\n   * @param newImplementation Address of the new implementation.\\n   * @param data Data to send as msg.data in the low level call.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   */\\n  function upgradeToAndCall(\\n    address newImplementation,\\n    bytes calldata data\\n  ) external payable ifAdmin {\\n    _upgradeTo(newImplementation);\\n    (bool success, ) = newImplementation.delegatecall(data);\\n    require(success);\\n  }\\n\\n  /**\\n   * @return adm The admin slot.\\n   */\\n  function _admin() internal view returns (address adm) {\\n    bytes32 slot = ADMIN_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      adm := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Sets the address of the proxy admin.\\n   * @param newAdmin Address of the new proxy admin.\\n   */\\n  function _setAdmin(address newAdmin) internal {\\n    bytes32 slot = ADMIN_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newAdmin)\\n    }\\n  }\\n\\n  /**\\n   * @dev Only fall back when the sender is not the admin.\\n   */\\n  function _willFallback() internal virtual override {\\n    require(msg.sender != _admin(), 'Cannot call fallback function from the proxy admin');\\n    super._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0xad78efab85afdf5c383699fca5fd3013451d27a77911c6c2317ae688d32de3bc\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './Proxy.sol';\\nimport '../contracts/Address.sol';\\n\\n/**\\n * @title BaseUpgradeabilityProxy\\n * @dev This contract implements a proxy that allows to change the\\n * implementation address to which it will delegate.\\n * Such a change is called an implementation upgrade.\\n */\\ncontract BaseUpgradeabilityProxy is Proxy {\\n  /**\\n   * @dev Emitted when the implementation is upgraded.\\n   * @param implementation Address of the new implementation.\\n   */\\n  event Upgraded(address indexed implementation);\\n\\n  /**\\n   * @dev Storage slot with the address of the current implementation.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant IMPLEMENTATION_SLOT =\\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n  /**\\n   * @dev Returns the current implementation.\\n   * @return impl Address of the current implementation\\n   */\\n  function _implementation() internal view override returns (address impl) {\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      impl := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Upgrades the proxy to a new implementation.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _upgradeTo(address newImplementation) internal {\\n    _setImplementation(newImplementation);\\n    emit Upgraded(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Sets the implementation address of the proxy.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _setImplementation(address newImplementation) internal {\\n    require(\\n      Address.isContract(newImplementation),\\n      'Cannot set a proxy implementation to a non-contract address'\\n    );\\n\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newImplementation)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe47eb278267d31f096fc643c2a322c72066abfa6ba07f6386c266fe7cbd15013\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\n    assembly {\\n      // Copy msg.data. We take full control of memory in this inline assembly\\n      // block because it will not return to Solidity code. We overwrite the\\n      // Solidity scratch pad at memory position 0.\\n      calldatacopy(0, 0, calldatasize())\\n\\n      // Call the implementation.\\n      // out and outsize are 0 because we don't know the size yet.\\n      let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n      // Copy the returned data.\\n      returndatacopy(0, 0, returndatasize())\\n\\n      switch result\\n      // delegatecall returns 0 on error.\\n      case 0 {\\n        revert(0, returndatasize())\\n      }\\n      default {\\n        return(0, returndatasize())\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title UpgradeabilityProxy\\n * @dev Extends BaseUpgradeabilityProxy with a constructor for initializing\\n * implementation and init data.\\n */\\ncontract UpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Contract constructor.\\n   * @param _logic Address of the initial implementation.\\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\\n   */\\n  constructor(address _logic, bytes memory _data) payable {\\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\\n    _setImplementation(_logic);\\n    if (_data.length > 0) {\\n      (bool success, ) = _logic.delegatecall(_data);\\n      require(success);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xa19d50b90ce153fb36d266c926e09db8dc8f110bdda1ae4b4cf2ecd02c26b81c\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol":{"BaseUpgradeabilityProxy":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"}],"devdoc":{"details":"This contract implements a proxy that allows to change the implementation address to which it will delegate. Such a change is called an implementation upgrade.","events":{"Upgraded(address)":{"details":"Emitted when the implementation is upgraded.","params":{"implementation":"Address of the new implementation."}}},"kind":"dev","methods":{},"stateVariables":{"IMPLEMENTATION_SLOT":{"details":"Storage slot with the address of the current implementation. This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is validated in the constructor."}},"title":"BaseUpgradeabilityProxy","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080604052348015600f57600080fd5b5060948061001e6000396000f3fe6080604052600a600c565b005b603960357f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b603b565b565b3660008037600080366000845af43d6000803e8080156059573d6000f35b3d6000fdfea26469706673582212202a84c73e3b616c030e68cbd474e5107b4a67de835e760765734850b909e8591364736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x94 DUP1 PUSH2 0x1E PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0xA PUSH1 0xC JUMP JUMPDEST STOP JUMPDEST PUSH1 0x39 PUSH1 0x35 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x3B JUMP JUMPDEST JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH1 0x59 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2A DUP5 0xC7 RETURNDATACOPY EXTCODESIZE PUSH2 0x6C03 0xE PUSH9 0xCBD474E5107B4A67DE DUP4 0x5E PUSH23 0x765734850B909E8591364736F6C634300080A00330000 ","sourceMap":"336:1618:17:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_2893":{"entryPoint":null,"id":2893,"parameterSlots":0,"returnSlots":0},"@_delegate_2907":{"entryPoint":59,"id":2907,"parameterSlots":1,"returnSlots":0},"@_fallback_2925":{"entryPoint":12,"id":2925,"parameterSlots":0,"returnSlots":0},"@_implementation_2712":{"entryPoint":null,"id":2712,"parameterSlots":0,"returnSlots":1},"@_willFallback_2912":{"entryPoint":null,"id":2912,"parameterSlots":0,"returnSlots":0}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600a600c565b005b603960357f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b603b565b565b3660008037600080366000845af43d6000803e8080156059573d6000f35b3d6000fdfea26469706673582212202a84c73e3b616c030e68cbd474e5107b4a67de835e760765734850b909e8591364736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0xA PUSH1 0xC JUMP JUMPDEST STOP JUMPDEST PUSH1 0x39 PUSH1 0x35 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x3B JUMP JUMPDEST JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH1 0x59 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2A DUP5 0xC7 RETURNDATACOPY EXTCODESIZE PUSH2 0x6C03 0xE PUSH9 0xCBD474E5107B4A67DE DUP4 0x5E PUSH23 0x765734850B909E8591364736F6C634300080A00330000 ","sourceMap":"336:1618:17:-:0;;;572:11:20;:9;:11::i;:::-;336:1618:17;2155:90:20;2212:28;2222:17;823:66:17;1183:11;;1008:196;2222:17:20;2212:9;:28::i;:::-;2155:90::o;1005:802::-;1338:14;1335:1;1332;1319:34;1534:1;1531;1515:14;1512:1;1496:14;1489:5;1476:60;1598:16;1595:1;1592;1577:38;1630:6;1685:52;;;;1772:16;1769:1;1762:27;1685:52;1712:16;1709:1;1702:27"},"gasEstimates":{"creation":{"codeDepositCost":"29600","executionCost":"81","totalCost":"29681"},"external":{"":"infinite"},"internal":{"_implementation()":"infinite","_setImplementation(address)":"infinite","_upgradeTo(address)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that allows to change the implementation address to which it will delegate. Such a change is called an implementation upgrade.\",\"events\":{\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\",\"params\":{\"implementation\":\"Address of the new implementation.\"}}},\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"IMPLEMENTATION_SLOT\":{\"details\":\"Storage slot with the address of the current implementation. This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is validated in the constructor.\"}},\"title\":\"BaseUpgradeabilityProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":\"BaseUpgradeabilityProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './Proxy.sol';\\nimport '../contracts/Address.sol';\\n\\n/**\\n * @title BaseUpgradeabilityProxy\\n * @dev This contract implements a proxy that allows to change the\\n * implementation address to which it will delegate.\\n * Such a change is called an implementation upgrade.\\n */\\ncontract BaseUpgradeabilityProxy is Proxy {\\n  /**\\n   * @dev Emitted when the implementation is upgraded.\\n   * @param implementation Address of the new implementation.\\n   */\\n  event Upgraded(address indexed implementation);\\n\\n  /**\\n   * @dev Storage slot with the address of the current implementation.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant IMPLEMENTATION_SLOT =\\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n  /**\\n   * @dev Returns the current implementation.\\n   * @return impl Address of the current implementation\\n   */\\n  function _implementation() internal view override returns (address impl) {\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      impl := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Upgrades the proxy to a new implementation.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _upgradeTo(address newImplementation) internal {\\n    _setImplementation(newImplementation);\\n    emit Upgraded(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Sets the implementation address of the proxy.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _setImplementation(address newImplementation) internal {\\n    require(\\n      Address.isContract(newImplementation),\\n      'Cannot set a proxy implementation to a non-contract address'\\n    );\\n\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newImplementation)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe47eb278267d31f096fc643c2a322c72066abfa6ba07f6386c266fe7cbd15013\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\n    assembly {\\n      // Copy msg.data. We take full control of memory in this inline assembly\\n      // block because it will not return to Solidity code. We overwrite the\\n      // Solidity scratch pad at memory position 0.\\n      calldatacopy(0, 0, calldatasize())\\n\\n      // Call the implementation.\\n      // out and outsize are 0 because we don't know the size yet.\\n      let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n      // Copy the returned data.\\n      returndatacopy(0, 0, returndatasize())\\n\\n      switch result\\n      // delegatecall returns 0 on error.\\n      case 0 {\\n        revert(0, returndatasize())\\n      }\\n      default {\\n        return(0, returndatasize())\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol":{"InitializableAdminUpgradeabilityProxy":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"logic","type":"address"},{"internalType":"address","name":"admin","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"}],"devdoc":{"details":"Extends from BaseAdminUpgradeabilityProxy with an initializer for initializing the implementation, admin, and init data.","kind":"dev","methods":{"admin()":{"returns":{"_0":"The address of the proxy admin."}},"changeAdmin(address)":{"details":"Changes the admin of the proxy. Only the current admin can call this function.","params":{"newAdmin":"Address to transfer proxy administration to."}},"implementation()":{"returns":{"_0":"The address of the implementation."}},"initialize(address,address,bytes)":{"params":{"admin":"Address of the proxy administrator.","data":"Data to send as msg.data to the implementation to initialize the proxied contract. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.","logic":"address of the initial implementation."}},"initialize(address,bytes)":{"details":"Contract initializer.","params":{"_data":"Data to send as msg.data to the implementation to initialize the proxied contract. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.","_logic":"Address of the initial implementation."}},"upgradeTo(address)":{"details":"Upgrade the backing implementation of the proxy. Only the admin can call this function.","params":{"newImplementation":"Address of the new implementation."}},"upgradeToAndCall(address,bytes)":{"details":"Upgrade the backing implementation of the proxy and call a function on the new implementation. This is useful to initialize the proxied contract.","params":{"data":"Data to send as msg.data in the low level call. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.","newImplementation":"Address of the new implementation."}}},"title":"InitializableAdminUpgradeabilityProxy","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50610cca806100206000396000f3fe6080604052600436106100705760003560e01c80638f2839701161004e5780638f283970146100eb578063cf7a1d771461010b578063d1f578941461011e578063f851a4401461013157610070565b80633659cfe61461007a5780634f1ef2861461009a5780635c60da1b146100ad575b610078610146565b005b34801561008657600080fd5b506100786100953660046109b1565b610180565b6100786100a83660046109d3565b6101e9565b3480156100b957600080fd5b506100c26102d1565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f757600080fd5b506100786101063660046109b1565b61035f565b610078610119366004610b30565b6104fc565b61007861012c366004610b8e565b6105d1565b34801561013d57600080fd5b506100c26106fd565b61014e610780565b61017e6101797f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b610788565b565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101e1576101de816107ac565b50565b6101de610146565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102c457610247836107ac565b60008373ffffffffffffffffffffffffffffffffffffffff168383604051610270929190610bdc565b600060405180830381855af49150503d80600081146102ab576040519150601f19603f3d011682016040523d82523d6000602084013e6102b0565b606091505b50509050806102be57600080fd5b50505050565b6102cc610146565b505050565b60006102fb7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561035457507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b61035c610146565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101e15773ffffffffffffffffffffffffffffffffffffffff811661045c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f60448201527f787920746f20746865207a65726f20616464726573730000000000000000000060648201526084015b60405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104a57fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a16101de817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60006105267f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff161461054657600080fd5b61055083826105d1565b61057b60017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104610bec565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103146105a9576105a9610c2a565b6102cc827fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60006105fb7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff161461061b57600080fd5b61064660017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd610bec565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc1461067457610674610c2a565b61067d826107f9565b8051156106f95760008273ffffffffffffffffffffffffffffffffffffffff16826040516106ab9190610c59565b600060405180830381855af49150503d80600081146106e6576040519150601f19603f3d011682016040523d82523d6000602084013e6106eb565b606091505b50509050806102cc57600080fd5b5050565b60006107277fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561035457507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61017e6108ab565b3660008037600080366000845af43d6000803e8080156107a7573d6000f35b3d6000fd5b6107b5816107f9565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b803b610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e7472616374206164647265737300000000006064820152608401610453565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561017e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e00000000000000000000000000006064820152608401610453565b803573ffffffffffffffffffffffffffffffffffffffff811681146109ac57600080fd5b919050565b6000602082840312156109c357600080fd5b6109cc82610988565b9392505050565b6000806000604084860312156109e857600080fd5b6109f184610988565b9250602084013567ffffffffffffffff80821115610a0e57600080fd5b818601915086601f830112610a2257600080fd5b813581811115610a3157600080fd5b876020828501011115610a4357600080fd5b6020830194508093505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112610a9657600080fd5b813567ffffffffffffffff80821115610ab157610ab1610a56565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610af757610af7610a56565b81604052838152866020858801011115610b1057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215610b4557600080fd5b610b4e84610988565b9250610b5c60208501610988565b9150604084013567ffffffffffffffff811115610b7857600080fd5b610b8486828701610a85565b9150509250925092565b60008060408385031215610ba157600080fd5b610baa83610988565b9150602083013567ffffffffffffffff811115610bc657600080fd5b610bd285828601610a85565b9150509250929050565b8183823760009101908152919050565b600082821015610c25577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b81811015610c7a5760208186018101518583015201610c60565b81811115610c89576000828501525b50919091019291505056fea26469706673582212201e2e51b85fde577a991380753306eb9b92407ae8c7695e8718bb6cd514dca34564736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCCA DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x70 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8F283970 GT PUSH2 0x4E JUMPI DUP1 PUSH4 0x8F283970 EQ PUSH2 0xEB JUMPI DUP1 PUSH4 0xCF7A1D77 EQ PUSH2 0x10B JUMPI DUP1 PUSH4 0xD1F57894 EQ PUSH2 0x11E JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0x131 JUMPI PUSH2 0x70 JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x7A JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x9A JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0xAD JUMPI JUMPDEST PUSH2 0x78 PUSH2 0x146 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x78 PUSH2 0x95 CALLDATASIZE PUSH1 0x4 PUSH2 0x9B1 JUMP JUMPDEST PUSH2 0x180 JUMP JUMPDEST PUSH2 0x78 PUSH2 0xA8 CALLDATASIZE PUSH1 0x4 PUSH2 0x9D3 JUMP JUMPDEST PUSH2 0x1E9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC2 PUSH2 0x2D1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x78 PUSH2 0x106 CALLDATASIZE PUSH1 0x4 PUSH2 0x9B1 JUMP JUMPDEST PUSH2 0x35F JUMP JUMPDEST PUSH2 0x78 PUSH2 0x119 CALLDATASIZE PUSH1 0x4 PUSH2 0xB30 JUMP JUMPDEST PUSH2 0x4FC JUMP JUMPDEST PUSH2 0x78 PUSH2 0x12C CALLDATASIZE PUSH1 0x4 PUSH2 0xB8E JUMP JUMPDEST PUSH2 0x5D1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC2 PUSH2 0x6FD JUMP JUMPDEST PUSH2 0x14E PUSH2 0x780 JUMP JUMPDEST PUSH2 0x17E PUSH2 0x179 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x788 JUMP JUMPDEST JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1E1 JUMPI PUSH2 0x1DE DUP2 PUSH2 0x7AC JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x1DE PUSH2 0x146 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x2C4 JUMPI PUSH2 0x247 DUP4 PUSH2 0x7AC JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x270 SWAP3 SWAP2 SWAP1 PUSH2 0xBDC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2AB 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 0x2B0 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x2BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x2CC PUSH2 0x146 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2FB PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x354 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x35C PUSH2 0x146 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1E1 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x45C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F74206368616E6765207468652061646D696E206F6620612070726F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x787920746F20746865207A65726F206164647265737300000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F PUSH2 0x4A5 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x1DE DUP2 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x526 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x550 DUP4 DUP3 PUSH2 0x5D1 JUMP JUMPDEST PUSH2 0x57B PUSH1 0x1 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6104 PUSH2 0xBEC JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 EQ PUSH2 0x5A9 JUMPI PUSH2 0x5A9 PUSH2 0xC2A JUMP JUMPDEST PUSH2 0x2CC DUP3 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5FB PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x61B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x646 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0xBEC JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC EQ PUSH2 0x674 JUMPI PUSH2 0x674 PUSH2 0xC2A JUMP JUMPDEST PUSH2 0x67D DUP3 PUSH2 0x7F9 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x6F9 JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x6AB SWAP2 SWAP1 PUSH2 0xC59 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x6E6 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 0x6EB JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x2CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x727 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x354 JUMPI POP PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x17E PUSH2 0x8AB JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x7A7 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x7B5 DUP2 PUSH2 0x7F9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x887 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x453 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x17E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x453 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x9AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9CC DUP3 PUSH2 0x988 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x9E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9F1 DUP5 PUSH2 0x988 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xA0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA22 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xA31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0xA43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA96 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xAB1 JUMPI PUSH2 0xAB1 PUSH2 0xA56 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0xAF7 JUMPI PUSH2 0xAF7 PUSH2 0xA56 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0xB10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xB45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB4E DUP5 PUSH2 0x988 JUMP JUMPDEST SWAP3 POP PUSH2 0xB5C PUSH1 0x20 DUP6 ADD PUSH2 0x988 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB78 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB84 DUP7 DUP3 DUP8 ADD PUSH2 0xA85 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xBA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBAA DUP4 PUSH2 0x988 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBD2 DUP6 DUP3 DUP7 ADD PUSH2 0xA85 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0xC25 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC7A JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0xC60 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xC89 JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x1E 0x2E MLOAD 0xB8 0x5F 0xDE JUMPI PUSH27 0x991380753306EB9B92407AE8C7695E8718BB6CD514DCA34564736F PUSH13 0x634300080A0033000000000000 ","sourceMap":"345:1203:18:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_2893":{"entryPoint":null,"id":2893,"parameterSlots":0,"returnSlots":0},"@_admin_2650":{"entryPoint":null,"id":2650,"parameterSlots":0,"returnSlots":1},"@_delegate_2907":{"entryPoint":1928,"id":2907,"parameterSlots":1,"returnSlots":0},"@_fallback_2925":{"entryPoint":326,"id":2925,"parameterSlots":0,"returnSlots":0},"@_implementation_2712":{"entryPoint":null,"id":2712,"parameterSlots":0,"returnSlots":1},"@_setAdmin_2662":{"entryPoint":null,"id":2662,"parameterSlots":1,"returnSlots":0},"@_setImplementation_2747":{"entryPoint":2041,"id":2747,"parameterSlots":1,"returnSlots":0},"@_upgradeTo_2727":{"entryPoint":1964,"id":2727,"parameterSlots":1,"returnSlots":0},"@_willFallback_2682":{"entryPoint":2219,"id":2682,"parameterSlots":0,"returnSlots":0},"@_willFallback_2818":{"entryPoint":1920,"id":2818,"parameterSlots":0,"returnSlots":0},"@_willFallback_2912":{"entryPoint":null,"id":2912,"parameterSlots":0,"returnSlots":0},"@admin_2558":{"entryPoint":1789,"id":2558,"parameterSlots":0,"returnSlots":1},"@changeAdmin_2599":{"entryPoint":863,"id":2599,"parameterSlots":1,"returnSlots":0},"@implementation_2570":{"entryPoint":721,"id":2570,"parameterSlots":0,"returnSlots":1},"@initialize_2805":{"entryPoint":1276,"id":2805,"parameterSlots":3,"returnSlots":0},"@initialize_2881":{"entryPoint":1489,"id":2881,"parameterSlots":2,"returnSlots":0},"@isContract_445":{"entryPoint":null,"id":445,"parameterSlots":1,"returnSlots":1},"@upgradeToAndCall_2638":{"entryPoint":489,"id":2638,"parameterSlots":3,"returnSlots":0},"@upgradeTo_2612":{"entryPoint":384,"id":2612,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":2440,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes":{"entryPoint":2693,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":2481,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr":{"entryPoint":2864,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_bytes_calldata_ptr":{"entryPoint":2515,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_bytes_memory_ptr":{"entryPoint":2958,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":3036,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":3161,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_37112268ceb11e15373f32f9374a1f3287d0a3e6e5a9a435ac06367e6cd0cf00__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":3052,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x01":{"entryPoint":3114,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":2646,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:5929:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:147:201","statements":[{"nodeType":"YulAssignment","src":"73:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:201"},"nodeType":"YulFunctionCall","src":"82:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:201"}]},{"body":{"nodeType":"YulBlock","src":"188:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"197:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"200:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"190:6:201"},"nodeType":"YulFunctionCall","src":"190:12:201"},"nodeType":"YulExpressionStatement","src":"190:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"142:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:201"},"nodeType":"YulFunctionCall","src":"131:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:201"},"nodeType":"YulFunctionCall","src":"121:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:201"},"nodeType":"YulFunctionCall","src":"114:73:201"},"nodeType":"YulIf","src":"111:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:201","type":""}],"src":"14:196:201"},{"body":{"nodeType":"YulBlock","src":"285:116:201","statements":[{"body":{"nodeType":"YulBlock","src":"331:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"340:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"343:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"333:6:201"},"nodeType":"YulFunctionCall","src":"333:12:201"},"nodeType":"YulExpressionStatement","src":"333:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"306:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"315:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"302:3:201"},"nodeType":"YulFunctionCall","src":"302:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"327:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"298:3:201"},"nodeType":"YulFunctionCall","src":"298:32:201"},"nodeType":"YulIf","src":"295:52:201"},{"nodeType":"YulAssignment","src":"356:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"385:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"366:18:201"},"nodeType":"YulFunctionCall","src":"366:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"356:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"251:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"262:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"274:6:201","type":""}],"src":"215:186:201"},{"body":{"nodeType":"YulBlock","src":"512:559:201","statements":[{"body":{"nodeType":"YulBlock","src":"558:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"567:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"570:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"560:6:201"},"nodeType":"YulFunctionCall","src":"560:12:201"},"nodeType":"YulExpressionStatement","src":"560:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"533:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"542:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"529:3:201"},"nodeType":"YulFunctionCall","src":"529:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"554:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"525:3:201"},"nodeType":"YulFunctionCall","src":"525:32:201"},"nodeType":"YulIf","src":"522:52:201"},{"nodeType":"YulAssignment","src":"583:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"612:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"593:18:201"},"nodeType":"YulFunctionCall","src":"593:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"583:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"631:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"662:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"673:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"658:3:201"},"nodeType":"YulFunctionCall","src":"658:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"645:12:201"},"nodeType":"YulFunctionCall","src":"645:32:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"635:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"686:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"696:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"690:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"741:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"750:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"753:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"743:6:201"},"nodeType":"YulFunctionCall","src":"743:12:201"},"nodeType":"YulExpressionStatement","src":"743:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"729:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"737:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"726:2:201"},"nodeType":"YulFunctionCall","src":"726:14:201"},"nodeType":"YulIf","src":"723:34:201"},{"nodeType":"YulVariableDeclaration","src":"766:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"780:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"791:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"776:3:201"},"nodeType":"YulFunctionCall","src":"776:22:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"770:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"846:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"855:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"858:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"848:6:201"},"nodeType":"YulFunctionCall","src":"848:12:201"},"nodeType":"YulExpressionStatement","src":"848:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"825:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"829:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"821:3:201"},"nodeType":"YulFunctionCall","src":"821:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"836:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"817:3:201"},"nodeType":"YulFunctionCall","src":"817:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"810:6:201"},"nodeType":"YulFunctionCall","src":"810:35:201"},"nodeType":"YulIf","src":"807:55:201"},{"nodeType":"YulVariableDeclaration","src":"871:30:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"898:2:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"885:12:201"},"nodeType":"YulFunctionCall","src":"885:16:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"875:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"928:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"937:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"940:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"930:6:201"},"nodeType":"YulFunctionCall","src":"930:12:201"},"nodeType":"YulExpressionStatement","src":"930:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"916:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"924:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"913:2:201"},"nodeType":"YulFunctionCall","src":"913:14:201"},"nodeType":"YulIf","src":"910:34:201"},{"body":{"nodeType":"YulBlock","src":"994:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1003:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1006:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"996:6:201"},"nodeType":"YulFunctionCall","src":"996:12:201"},"nodeType":"YulExpressionStatement","src":"996:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"967:2:201"},{"name":"length","nodeType":"YulIdentifier","src":"971:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"963:3:201"},"nodeType":"YulFunctionCall","src":"963:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"980:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"959:3:201"},"nodeType":"YulFunctionCall","src":"959:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"985:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"956:2:201"},"nodeType":"YulFunctionCall","src":"956:37:201"},"nodeType":"YulIf","src":"953:57:201"},{"nodeType":"YulAssignment","src":"1019:21:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1033:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"1037:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1029:3:201"},"nodeType":"YulFunctionCall","src":"1029:11:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1019:6:201"}]},{"nodeType":"YulAssignment","src":"1049:16:201","value":{"name":"length","nodeType":"YulIdentifier","src":"1059:6:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1049:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"462:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"473:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"485:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"493:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"501:6:201","type":""}],"src":"406:665:201"},{"body":{"nodeType":"YulBlock","src":"1177:125:201","statements":[{"nodeType":"YulAssignment","src":"1187:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1199:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1210:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1195:3:201"},"nodeType":"YulFunctionCall","src":"1195:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1187:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1229:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1244:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1252:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1240:3:201"},"nodeType":"YulFunctionCall","src":"1240:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1222:6:201"},"nodeType":"YulFunctionCall","src":"1222:74:201"},"nodeType":"YulExpressionStatement","src":"1222:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1146:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1157:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1168:4:201","type":""}],"src":"1076:226:201"},{"body":{"nodeType":"YulBlock","src":"1339:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1356:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1359:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1349:6:201"},"nodeType":"YulFunctionCall","src":"1349:88:201"},"nodeType":"YulExpressionStatement","src":"1349:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1453:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1456:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1446:6:201"},"nodeType":"YulFunctionCall","src":"1446:15:201"},"nodeType":"YulExpressionStatement","src":"1446:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1477:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1480:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1470:6:201"},"nodeType":"YulFunctionCall","src":"1470:15:201"},"nodeType":"YulExpressionStatement","src":"1470:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1307:184:201"},{"body":{"nodeType":"YulBlock","src":"1548:725:201","statements":[{"body":{"nodeType":"YulBlock","src":"1597:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1606:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1609:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1599:6:201"},"nodeType":"YulFunctionCall","src":"1599:12:201"},"nodeType":"YulExpressionStatement","src":"1599:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1576:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1584:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1572:3:201"},"nodeType":"YulFunctionCall","src":"1572:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"1591:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1568:3:201"},"nodeType":"YulFunctionCall","src":"1568:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1561:6:201"},"nodeType":"YulFunctionCall","src":"1561:35:201"},"nodeType":"YulIf","src":"1558:55:201"},{"nodeType":"YulVariableDeclaration","src":"1622:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1645:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1632:12:201"},"nodeType":"YulFunctionCall","src":"1632:20:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1626:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1661:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1671:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1665:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1712:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1714:16:201"},"nodeType":"YulFunctionCall","src":"1714:18:201"},"nodeType":"YulExpressionStatement","src":"1714:18:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1704:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"1708:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1701:2:201"},"nodeType":"YulFunctionCall","src":"1701:10:201"},"nodeType":"YulIf","src":"1698:36:201"},{"nodeType":"YulVariableDeclaration","src":"1743:76:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1753:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"1747:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1828:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1848:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1842:5:201"},"nodeType":"YulFunctionCall","src":"1842:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1832:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1860:71:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1882:6:201"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1906:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"1910:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1902:3:201"},"nodeType":"YulFunctionCall","src":"1902:13:201"},{"name":"_3","nodeType":"YulIdentifier","src":"1917:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1898:3:201"},"nodeType":"YulFunctionCall","src":"1898:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"1922:2:201","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1894:3:201"},"nodeType":"YulFunctionCall","src":"1894:31:201"},{"name":"_3","nodeType":"YulIdentifier","src":"1927:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1890:3:201"},"nodeType":"YulFunctionCall","src":"1890:40:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1878:3:201"},"nodeType":"YulFunctionCall","src":"1878:53:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1864:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1990:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1992:16:201"},"nodeType":"YulFunctionCall","src":"1992:18:201"},"nodeType":"YulExpressionStatement","src":"1992:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1949:10:201"},{"name":"_2","nodeType":"YulIdentifier","src":"1961:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1946:2:201"},"nodeType":"YulFunctionCall","src":"1946:18:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1969:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1981:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1966:2:201"},"nodeType":"YulFunctionCall","src":"1966:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1943:2:201"},"nodeType":"YulFunctionCall","src":"1943:46:201"},"nodeType":"YulIf","src":"1940:72:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2028:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2032:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2021:6:201"},"nodeType":"YulFunctionCall","src":"2021:22:201"},"nodeType":"YulExpressionStatement","src":"2021:22:201"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2059:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2067:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2052:6:201"},"nodeType":"YulFunctionCall","src":"2052:18:201"},"nodeType":"YulExpressionStatement","src":"2052:18:201"},{"body":{"nodeType":"YulBlock","src":"2118:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2127:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2130:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2120:6:201"},"nodeType":"YulFunctionCall","src":"2120:12:201"},"nodeType":"YulExpressionStatement","src":"2120:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2093:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2101:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2089:3:201"},"nodeType":"YulFunctionCall","src":"2089:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"2106:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2085:3:201"},"nodeType":"YulFunctionCall","src":"2085:26:201"},{"name":"end","nodeType":"YulIdentifier","src":"2113:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2082:2:201"},"nodeType":"YulFunctionCall","src":"2082:35:201"},"nodeType":"YulIf","src":"2079:55:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2160:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2168:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2156:3:201"},"nodeType":"YulFunctionCall","src":"2156:17:201"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2179:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2187:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2175:3:201"},"nodeType":"YulFunctionCall","src":"2175:17:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2194:2:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"2143:12:201"},"nodeType":"YulFunctionCall","src":"2143:54:201"},"nodeType":"YulExpressionStatement","src":"2143:54:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2221:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2229:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2217:3:201"},"nodeType":"YulFunctionCall","src":"2217:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"2234:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2213:3:201"},"nodeType":"YulFunctionCall","src":"2213:26:201"},{"kind":"number","nodeType":"YulLiteral","src":"2241:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2206:6:201"},"nodeType":"YulFunctionCall","src":"2206:37:201"},"nodeType":"YulExpressionStatement","src":"2206:37:201"},{"nodeType":"YulAssignment","src":"2252:15:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"2261:6:201"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"2252:5:201"}]}]},"name":"abi_decode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1522:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"1530:3:201","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"1538:5:201","type":""}],"src":"1496:777:201"},{"body":{"nodeType":"YulBlock","src":"2391:355:201","statements":[{"body":{"nodeType":"YulBlock","src":"2437:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2446:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2449:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2439:6:201"},"nodeType":"YulFunctionCall","src":"2439:12:201"},"nodeType":"YulExpressionStatement","src":"2439:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2412:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2421:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2408:3:201"},"nodeType":"YulFunctionCall","src":"2408:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2433:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2404:3:201"},"nodeType":"YulFunctionCall","src":"2404:32:201"},"nodeType":"YulIf","src":"2401:52:201"},{"nodeType":"YulAssignment","src":"2462:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2491:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2472:18:201"},"nodeType":"YulFunctionCall","src":"2472:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2462:6:201"}]},{"nodeType":"YulAssignment","src":"2510:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2543:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2554:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2539:3:201"},"nodeType":"YulFunctionCall","src":"2539:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2520:18:201"},"nodeType":"YulFunctionCall","src":"2520:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2510:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2567:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2598:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2609:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2594:3:201"},"nodeType":"YulFunctionCall","src":"2594:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2581:12:201"},"nodeType":"YulFunctionCall","src":"2581:32:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2571:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2656:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2665:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2668:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2658:6:201"},"nodeType":"YulFunctionCall","src":"2658:12:201"},"nodeType":"YulExpressionStatement","src":"2658:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2628:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2636:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2625:2:201"},"nodeType":"YulFunctionCall","src":"2625:30:201"},"nodeType":"YulIf","src":"2622:50:201"},{"nodeType":"YulAssignment","src":"2681:59:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2712:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"2723:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2708:3:201"},"nodeType":"YulFunctionCall","src":"2708:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2732:7:201"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"2691:16:201"},"nodeType":"YulFunctionCall","src":"2691:49:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2681:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2341:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2352:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2364:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2372:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2380:6:201","type":""}],"src":"2278:468:201"},{"body":{"nodeType":"YulBlock","src":"2847:298:201","statements":[{"body":{"nodeType":"YulBlock","src":"2893:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2902:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2905:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2895:6:201"},"nodeType":"YulFunctionCall","src":"2895:12:201"},"nodeType":"YulExpressionStatement","src":"2895:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2868:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2877:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2864:3:201"},"nodeType":"YulFunctionCall","src":"2864:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2889:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2860:3:201"},"nodeType":"YulFunctionCall","src":"2860:32:201"},"nodeType":"YulIf","src":"2857:52:201"},{"nodeType":"YulAssignment","src":"2918:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2947:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2928:18:201"},"nodeType":"YulFunctionCall","src":"2928:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2918:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2966:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2997:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3008:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2993:3:201"},"nodeType":"YulFunctionCall","src":"2993:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2980:12:201"},"nodeType":"YulFunctionCall","src":"2980:32:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2970:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3055:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3064:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3067:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3057:6:201"},"nodeType":"YulFunctionCall","src":"3057:12:201"},"nodeType":"YulExpressionStatement","src":"3057:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3027:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3035:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3024:2:201"},"nodeType":"YulFunctionCall","src":"3024:30:201"},"nodeType":"YulIf","src":"3021:50:201"},{"nodeType":"YulAssignment","src":"3080:59:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3111:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"3122:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3107:3:201"},"nodeType":"YulFunctionCall","src":"3107:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3131:7:201"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"3090:16:201"},"nodeType":"YulFunctionCall","src":"3090:49:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3080:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2805:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2816:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2828:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2836:6:201","type":""}],"src":"2751:394:201"},{"body":{"nodeType":"YulBlock","src":"3297:124:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3320:3:201"},{"name":"value0","nodeType":"YulIdentifier","src":"3325:6:201"},{"name":"value1","nodeType":"YulIdentifier","src":"3333:6:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"3307:12:201"},"nodeType":"YulFunctionCall","src":"3307:33:201"},"nodeType":"YulExpressionStatement","src":"3307:33:201"},{"nodeType":"YulVariableDeclaration","src":"3349:26:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3363:3:201"},{"name":"value1","nodeType":"YulIdentifier","src":"3368:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3359:3:201"},"nodeType":"YulFunctionCall","src":"3359:16:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3353:2:201","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3391:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"3395:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3384:6:201"},"nodeType":"YulFunctionCall","src":"3384:13:201"},"nodeType":"YulExpressionStatement","src":"3384:13:201"},{"nodeType":"YulAssignment","src":"3406:9:201","value":{"name":"_1","nodeType":"YulIdentifier","src":"3413:2:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"3406:3:201"}]}]},"name":"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"3265:3:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3270:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3278:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"3289:3:201","type":""}],"src":"3150:271:201"},{"body":{"nodeType":"YulBlock","src":"3600:244:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3617:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3628:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3610:6:201"},"nodeType":"YulFunctionCall","src":"3610:21:201"},"nodeType":"YulExpressionStatement","src":"3610:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3651:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3662:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3647:3:201"},"nodeType":"YulFunctionCall","src":"3647:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"3667:2:201","type":"","value":"54"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3640:6:201"},"nodeType":"YulFunctionCall","src":"3640:30:201"},"nodeType":"YulExpressionStatement","src":"3640:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3690:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3701:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3686:3:201"},"nodeType":"YulFunctionCall","src":"3686:18:201"},{"hexValue":"43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f","kind":"string","nodeType":"YulLiteral","src":"3706:34:201","type":"","value":"Cannot change the admin of a pro"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3679:6:201"},"nodeType":"YulFunctionCall","src":"3679:62:201"},"nodeType":"YulExpressionStatement","src":"3679:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3761:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3772:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3757:3:201"},"nodeType":"YulFunctionCall","src":"3757:18:201"},{"hexValue":"787920746f20746865207a65726f2061646472657373","kind":"string","nodeType":"YulLiteral","src":"3777:24:201","type":"","value":"xy to the zero address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3750:6:201"},"nodeType":"YulFunctionCall","src":"3750:52:201"},"nodeType":"YulExpressionStatement","src":"3750:52:201"},{"nodeType":"YulAssignment","src":"3811:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3823:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3834:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3819:3:201"},"nodeType":"YulFunctionCall","src":"3819:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3811:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_37112268ceb11e15373f32f9374a1f3287d0a3e6e5a9a435ac06367e6cd0cf00__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3577:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3591:4:201","type":""}],"src":"3426:418:201"},{"body":{"nodeType":"YulBlock","src":"3978:198:201","statements":[{"nodeType":"YulAssignment","src":"3988:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4000:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4011:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3996:3:201"},"nodeType":"YulFunctionCall","src":"3996:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3988:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"4023:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"4033:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4027:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4091:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4106:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4114:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4102:3:201"},"nodeType":"YulFunctionCall","src":"4102:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4084:6:201"},"nodeType":"YulFunctionCall","src":"4084:34:201"},"nodeType":"YulExpressionStatement","src":"4084:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4138:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4149:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4134:3:201"},"nodeType":"YulFunctionCall","src":"4134:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"4158:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4166:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4154:3:201"},"nodeType":"YulFunctionCall","src":"4154:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4127:6:201"},"nodeType":"YulFunctionCall","src":"4127:43:201"},"nodeType":"YulExpressionStatement","src":"4127:43:201"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3939:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3950:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3958:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3969:4:201","type":""}],"src":"3849:327:201"},{"body":{"nodeType":"YulBlock","src":"4230:230:201","statements":[{"body":{"nodeType":"YulBlock","src":"4260:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4281:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4284:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4274:6:201"},"nodeType":"YulFunctionCall","src":"4274:88:201"},"nodeType":"YulExpressionStatement","src":"4274:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4382:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4385:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4375:6:201"},"nodeType":"YulFunctionCall","src":"4375:15:201"},"nodeType":"YulExpressionStatement","src":"4375:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4410:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4413:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4403:6:201"},"nodeType":"YulFunctionCall","src":"4403:15:201"},"nodeType":"YulExpressionStatement","src":"4403:15:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4246:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"4249:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4243:2:201"},"nodeType":"YulFunctionCall","src":"4243:8:201"},"nodeType":"YulIf","src":"4240:188:201"},{"nodeType":"YulAssignment","src":"4437:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4449:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"4452:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4445:3:201"},"nodeType":"YulFunctionCall","src":"4445:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"4437:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"4212:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"4215:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"4221:4:201","type":""}],"src":"4181:279:201"},{"body":{"nodeType":"YulBlock","src":"4497:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4514:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4517:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4507:6:201"},"nodeType":"YulFunctionCall","src":"4507:88:201"},"nodeType":"YulExpressionStatement","src":"4507:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4611:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4614:4:201","type":"","value":"0x01"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4604:6:201"},"nodeType":"YulFunctionCall","src":"4604:15:201"},"nodeType":"YulExpressionStatement","src":"4604:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4635:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4638:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4628:6:201"},"nodeType":"YulFunctionCall","src":"4628:15:201"},"nodeType":"YulExpressionStatement","src":"4628:15:201"}]},"name":"panic_error_0x01","nodeType":"YulFunctionDefinition","src":"4465:184:201"},{"body":{"nodeType":"YulBlock","src":"4791:289:201","statements":[{"nodeType":"YulVariableDeclaration","src":"4801:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4821:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4815:5:201"},"nodeType":"YulFunctionCall","src":"4815:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"4805:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4837:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"4846:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"4841:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4908:77:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4933:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"4938:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4929:3:201"},"nodeType":"YulFunctionCall","src":"4929:11:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4956:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"4964:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4952:3:201"},"nodeType":"YulFunctionCall","src":"4952:14:201"},{"kind":"number","nodeType":"YulLiteral","src":"4968:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4948:3:201"},"nodeType":"YulFunctionCall","src":"4948:25:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4942:5:201"},"nodeType":"YulFunctionCall","src":"4942:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4922:6:201"},"nodeType":"YulFunctionCall","src":"4922:53:201"},"nodeType":"YulExpressionStatement","src":"4922:53:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4867:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"4870:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4864:2:201"},"nodeType":"YulFunctionCall","src":"4864:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"4878:21:201","statements":[{"nodeType":"YulAssignment","src":"4880:17:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4889:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"4892:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4885:3:201"},"nodeType":"YulFunctionCall","src":"4885:12:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"4880:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"4860:3:201","statements":[]},"src":"4856:129:201"},{"body":{"nodeType":"YulBlock","src":"5011:31:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5024:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"5029:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5020:3:201"},"nodeType":"YulFunctionCall","src":"5020:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"5038:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5013:6:201"},"nodeType":"YulFunctionCall","src":"5013:27:201"},"nodeType":"YulExpressionStatement","src":"5013:27:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5000:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"5003:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4997:2:201"},"nodeType":"YulFunctionCall","src":"4997:13:201"},"nodeType":"YulIf","src":"4994:48:201"},{"nodeType":"YulAssignment","src":"5051:23:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5062:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"5067:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5058:3:201"},"nodeType":"YulFunctionCall","src":"5058:16:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"5051:3:201"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"4767:3:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4772:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"4783:3:201","type":""}],"src":"4654:426:201"},{"body":{"nodeType":"YulBlock","src":"5259:249:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5276:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5287:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5269:6:201"},"nodeType":"YulFunctionCall","src":"5269:21:201"},"nodeType":"YulExpressionStatement","src":"5269:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5310:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5321:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5306:3:201"},"nodeType":"YulFunctionCall","src":"5306:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"5326:2:201","type":"","value":"59"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5299:6:201"},"nodeType":"YulFunctionCall","src":"5299:30:201"},"nodeType":"YulExpressionStatement","src":"5299:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5349:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5360:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5345:3:201"},"nodeType":"YulFunctionCall","src":"5345:18:201"},{"hexValue":"43616e6e6f742073657420612070726f787920696d706c656d656e746174696f","kind":"string","nodeType":"YulLiteral","src":"5365:34:201","type":"","value":"Cannot set a proxy implementatio"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5338:6:201"},"nodeType":"YulFunctionCall","src":"5338:62:201"},"nodeType":"YulExpressionStatement","src":"5338:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5420:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5431:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5416:3:201"},"nodeType":"YulFunctionCall","src":"5416:18:201"},{"hexValue":"6e20746f2061206e6f6e2d636f6e74726163742061646472657373","kind":"string","nodeType":"YulLiteral","src":"5436:29:201","type":"","value":"n to a non-contract address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5409:6:201"},"nodeType":"YulFunctionCall","src":"5409:57:201"},"nodeType":"YulExpressionStatement","src":"5409:57:201"},{"nodeType":"YulAssignment","src":"5475:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5487:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5498:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5483:3:201"},"nodeType":"YulFunctionCall","src":"5483:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5475:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5236:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5250:4:201","type":""}],"src":"5085:423:201"},{"body":{"nodeType":"YulBlock","src":"5687:240:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5704:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5715:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5697:6:201"},"nodeType":"YulFunctionCall","src":"5697:21:201"},"nodeType":"YulExpressionStatement","src":"5697:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5738:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5749:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5734:3:201"},"nodeType":"YulFunctionCall","src":"5734:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"5754:2:201","type":"","value":"50"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5727:6:201"},"nodeType":"YulFunctionCall","src":"5727:30:201"},"nodeType":"YulExpressionStatement","src":"5727:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5777:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5788:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5773:3:201"},"nodeType":"YulFunctionCall","src":"5773:18:201"},{"hexValue":"43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e206672","kind":"string","nodeType":"YulLiteral","src":"5793:34:201","type":"","value":"Cannot call fallback function fr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5766:6:201"},"nodeType":"YulFunctionCall","src":"5766:62:201"},"nodeType":"YulExpressionStatement","src":"5766:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5848:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5859:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5844:3:201"},"nodeType":"YulFunctionCall","src":"5844:18:201"},{"hexValue":"6f6d207468652070726f78792061646d696e","kind":"string","nodeType":"YulLiteral","src":"5864:20:201","type":"","value":"om the proxy admin"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5837:6:201"},"nodeType":"YulFunctionCall","src":"5837:48:201"},"nodeType":"YulExpressionStatement","src":"5837:48:201"},{"nodeType":"YulAssignment","src":"5894:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5906:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5917:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5902:3:201"},"nodeType":"YulFunctionCall","src":"5902:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5894:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5664:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5678:4:201","type":""}],"src":"5513:414:201"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n        value1 := add(_2, 32)\n        value2 := length\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value2 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function abi_decode_tuple_t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value1 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, 0)\n        end := _1\n    }\n    function abi_encode_tuple_t_stringliteral_37112268ceb11e15373f32f9374a1f3287d0a3e6e5a9a435ac06367e6cd0cf00__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 54)\n        mstore(add(headStart, 64), \"Cannot change the admin of a pro\")\n        mstore(add(headStart, 96), \"xy to the zero address\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        diff := sub(x, y)\n    }\n    function panic_error_0x01()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x01)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            mstore(add(pos, i), mload(add(add(value0, i), 0x20)))\n        }\n        if gt(i, length) { mstore(add(pos, length), 0) }\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 59)\n        mstore(add(headStart, 64), \"Cannot set a proxy implementatio\")\n        mstore(add(headStart, 96), \"n to a non-contract address\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 50)\n        mstore(add(headStart, 64), \"Cannot call fallback function fr\")\n        mstore(add(headStart, 96), \"om the proxy admin\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"6080604052600436106100705760003560e01c80638f2839701161004e5780638f283970146100eb578063cf7a1d771461010b578063d1f578941461011e578063f851a4401461013157610070565b80633659cfe61461007a5780634f1ef2861461009a5780635c60da1b146100ad575b610078610146565b005b34801561008657600080fd5b506100786100953660046109b1565b610180565b6100786100a83660046109d3565b6101e9565b3480156100b957600080fd5b506100c26102d1565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f757600080fd5b506100786101063660046109b1565b61035f565b610078610119366004610b30565b6104fc565b61007861012c366004610b8e565b6105d1565b34801561013d57600080fd5b506100c26106fd565b61014e610780565b61017e6101797f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b610788565b565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101e1576101de816107ac565b50565b6101de610146565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102c457610247836107ac565b60008373ffffffffffffffffffffffffffffffffffffffff168383604051610270929190610bdc565b600060405180830381855af49150503d80600081146102ab576040519150601f19603f3d011682016040523d82523d6000602084013e6102b0565b606091505b50509050806102be57600080fd5b50505050565b6102cc610146565b505050565b60006102fb7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561035457507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b61035c610146565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101e15773ffffffffffffffffffffffffffffffffffffffff811661045c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f60448201527f787920746f20746865207a65726f20616464726573730000000000000000000060648201526084015b60405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104a57fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a16101de817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60006105267f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff161461054657600080fd5b61055083826105d1565b61057b60017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104610bec565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103146105a9576105a9610c2a565b6102cc827fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60006105fb7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff161461061b57600080fd5b61064660017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd610bec565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc1461067457610674610c2a565b61067d826107f9565b8051156106f95760008273ffffffffffffffffffffffffffffffffffffffff16826040516106ab9190610c59565b600060405180830381855af49150503d80600081146106e6576040519150601f19603f3d011682016040523d82523d6000602084013e6106eb565b606091505b50509050806102cc57600080fd5b5050565b60006107277fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561035457507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61017e6108ab565b3660008037600080366000845af43d6000803e8080156107a7573d6000f35b3d6000fd5b6107b5816107f9565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b803b610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e7472616374206164647265737300000000006064820152608401610453565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561017e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e00000000000000000000000000006064820152608401610453565b803573ffffffffffffffffffffffffffffffffffffffff811681146109ac57600080fd5b919050565b6000602082840312156109c357600080fd5b6109cc82610988565b9392505050565b6000806000604084860312156109e857600080fd5b6109f184610988565b9250602084013567ffffffffffffffff80821115610a0e57600080fd5b818601915086601f830112610a2257600080fd5b813581811115610a3157600080fd5b876020828501011115610a4357600080fd5b6020830194508093505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112610a9657600080fd5b813567ffffffffffffffff80821115610ab157610ab1610a56565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715610af757610af7610a56565b81604052838152866020858801011115610b1057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215610b4557600080fd5b610b4e84610988565b9250610b5c60208501610988565b9150604084013567ffffffffffffffff811115610b7857600080fd5b610b8486828701610a85565b9150509250925092565b60008060408385031215610ba157600080fd5b610baa83610988565b9150602083013567ffffffffffffffff811115610bc657600080fd5b610bd285828601610a85565b9150509250929050565b8183823760009101908152919050565b600082821015610c25577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b81811015610c7a5760208186018101518583015201610c60565b81811115610c89576000828501525b50919091019291505056fea26469706673582212201e2e51b85fde577a991380753306eb9b92407ae8c7695e8718bb6cd514dca34564736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x70 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8F283970 GT PUSH2 0x4E JUMPI DUP1 PUSH4 0x8F283970 EQ PUSH2 0xEB JUMPI DUP1 PUSH4 0xCF7A1D77 EQ PUSH2 0x10B JUMPI DUP1 PUSH4 0xD1F57894 EQ PUSH2 0x11E JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0x131 JUMPI PUSH2 0x70 JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x7A JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x9A JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0xAD JUMPI JUMPDEST PUSH2 0x78 PUSH2 0x146 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x78 PUSH2 0x95 CALLDATASIZE PUSH1 0x4 PUSH2 0x9B1 JUMP JUMPDEST PUSH2 0x180 JUMP JUMPDEST PUSH2 0x78 PUSH2 0xA8 CALLDATASIZE PUSH1 0x4 PUSH2 0x9D3 JUMP JUMPDEST PUSH2 0x1E9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC2 PUSH2 0x2D1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x78 PUSH2 0x106 CALLDATASIZE PUSH1 0x4 PUSH2 0x9B1 JUMP JUMPDEST PUSH2 0x35F JUMP JUMPDEST PUSH2 0x78 PUSH2 0x119 CALLDATASIZE PUSH1 0x4 PUSH2 0xB30 JUMP JUMPDEST PUSH2 0x4FC JUMP JUMPDEST PUSH2 0x78 PUSH2 0x12C CALLDATASIZE PUSH1 0x4 PUSH2 0xB8E JUMP JUMPDEST PUSH2 0x5D1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC2 PUSH2 0x6FD JUMP JUMPDEST PUSH2 0x14E PUSH2 0x780 JUMP JUMPDEST PUSH2 0x17E PUSH2 0x179 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x788 JUMP JUMPDEST JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1E1 JUMPI PUSH2 0x1DE DUP2 PUSH2 0x7AC JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x1DE PUSH2 0x146 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x2C4 JUMPI PUSH2 0x247 DUP4 PUSH2 0x7AC JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x270 SWAP3 SWAP2 SWAP1 PUSH2 0xBDC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2AB 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 0x2B0 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x2BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x2CC PUSH2 0x146 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2FB PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x354 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x35C PUSH2 0x146 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1E1 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x45C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F74206368616E6765207468652061646D696E206F6620612070726F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x787920746F20746865207A65726F206164647265737300000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F PUSH2 0x4A5 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x1DE DUP2 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x526 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x550 DUP4 DUP3 PUSH2 0x5D1 JUMP JUMPDEST PUSH2 0x57B PUSH1 0x1 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6104 PUSH2 0xBEC JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 EQ PUSH2 0x5A9 JUMPI PUSH2 0x5A9 PUSH2 0xC2A JUMP JUMPDEST PUSH2 0x2CC DUP3 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5FB PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x61B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x646 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0xBEC JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC EQ PUSH2 0x674 JUMPI PUSH2 0x674 PUSH2 0xC2A JUMP JUMPDEST PUSH2 0x67D DUP3 PUSH2 0x7F9 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x6F9 JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x6AB SWAP2 SWAP1 PUSH2 0xC59 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x6E6 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 0x6EB JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x2CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x727 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x354 JUMPI POP PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x17E PUSH2 0x8AB JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x7A7 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x7B5 DUP2 PUSH2 0x7F9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x887 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x453 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x17E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x453 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x9AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9CC DUP3 PUSH2 0x988 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x9E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9F1 DUP5 PUSH2 0x988 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xA0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA22 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xA31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0xA43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA96 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xAB1 JUMPI PUSH2 0xAB1 PUSH2 0xA56 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0xAF7 JUMPI PUSH2 0xAF7 PUSH2 0xA56 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0xB10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xB45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB4E DUP5 PUSH2 0x988 JUMP JUMPDEST SWAP3 POP PUSH2 0xB5C PUSH1 0x20 DUP6 ADD PUSH2 0x988 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB78 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB84 DUP7 DUP3 DUP8 ADD PUSH2 0xA85 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xBA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBAA DUP4 PUSH2 0x988 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBD2 DUP6 DUP3 DUP7 ADD PUSH2 0xA85 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0xC25 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC7A JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0xC60 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xC89 JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x1E 0x2E MLOAD 0xB8 0x5F 0xDE JUMPI PUSH27 0x991380753306EB9B92407AE8C7695E8718BB6CD514DCA34564736F PUSH13 0x634300080A0033000000000000 ","sourceMap":"345:1203:18:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;572:11:20;:9;:11::i;:::-;345:1203:18;2246:103:16;;;;;;;;;;-1:-1:-1;2246:103:16;;;;;:::i;:::-;;:::i;2866:234::-;;;;;;:::i;:::-;;:::i;1566:96::-;;;;;;;;;;;;;:::i;:::-;;;1252:42:201;1240:55;;;1222:74;;1210:2;1195:18;1566:96:16;;;;;;;1838:224;;;;;;;;;;-1:-1:-1;1838:224:16;;;;;:::i;:::-;;:::i;1035:301:18:-;;;;;;:::i;:::-;;:::i;859:365:19:-;;;;;;:::i;:::-;;:::i;1424:78:16:-;;;;;;;;;;;;;:::i;2155:90:20:-;2191:15;:13;:15::i;:::-;2212:28;2222:17;823:66:17;1183:11;;1008:196;2222:17:20;2212:9;:28::i;:::-;2155:90::o;2246:103:16:-;1002:66;3295:11;1287:22;;:10;:22;;;1283:76;;;2315:29:::1;2326:17;2315:10;:29::i;:::-;2246:103:::0;:::o;1283:76::-;1341:11;:9;:11::i;2866:234::-;1002:66;3295:11;1287:22;;:10;:22;;;1283:76;;;2983:29:::1;2994:17;2983:10;:29::i;:::-;3019:12;3037:17;:30;;3068:4;;3037:36;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3018:55;;;3087:7;3079:16;;;::::0;::::1;;2977:123;2866:234:::0;;;:::o;1283:76::-;1341:11;:9;:11::i;:::-;2866:234;;;:::o;1566:96::-;1618:7;1301:8;1002:66;3295:11;;3149:167;1301:8;1287:22;;:10;:22;;;1283:76;;;-1:-1:-1;823:66:17;1183:11;;1566:96:16:o;1283:76::-;1341:11;:9;:11::i;:::-;1566:96;:::o;1838:224::-;1002:66;3295:11;1287:22;;:10;:22;;;1283:76;;;1908:22:::1;::::0;::::1;1900:89;;;::::0;::::1;::::0;;3628:2:201;1900:89:16::1;::::0;::::1;3610:21:201::0;3667:2;3647:18;;;3640:30;3706:34;3686:18;;;3679:62;3777:24;3757:18;;;3750:52;3819:19;;1900:89:16::1;;;;;;;;;2000:32;2013:8;1002:66:::0;3295:11;;3149:167;2013:8:::1;2000:32;::::0;;4033:42:201;4102:15;;;4084:34;;4154:15;;;4149:2;4134:18;;4127:43;3996:18;2000:32:16::1;;;;;;;2038:19;2048:8;1002:66:::0;3563:22;3432:163;1035:301:18;1162:1;1133:17;823:66:17;1183:11;;1008:196;1133:17:18;:31;;;1125:40;;;;;;1171:56;1215:5;1222:4;1171:43;:56::i;:::-;1262:45;1306:1;1270:32;1262:45;:::i;:::-;1002:66:16;1240:68:18;1233:76;;;;:::i;:::-;1315:16;1325:5;1002:66:16;3563:22;3432:163;859:365:19;973:1;944:17;823:66:17;1183:11;;1008:196;944:17:19;:31;;;936:40;;;;;;1020:54;1073:1;1028:41;1020:54;:::i;:::-;823:66:17;989:86:19;982:94;;;;:::i;:::-;1082:26;1101:6;1082:18;:26::i;:::-;1118:12;;:16;1114:106;;1145:12;1163:6;:19;;1183:5;1163:26;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1144:45;;;1205:7;1197:16;;;;;1114:106;859:365;;:::o;1424:78:16:-;1467:7;1301:8;1002:66;3295:11;;3149:167;1301:8;1287:22;;:10;:22;;;1283:76;;;-1:-1:-1;1002:66:16;3295:11;;1566:96::o;1411:135:18:-;1497:44;:42;:44::i;1005:802:20:-;1338:14;1335:1;1332;1319:34;1534:1;1531;1515:14;1512:1;1496:14;1489:5;1476:60;1598:16;1595:1;1592;1577:38;1630:6;1685:52;;;;1772:16;1769:1;1762:27;1685:52;1712:16;1709:1;1702:27;1339:142:17;1401:37;1420:17;1401:18;:37::i;:::-;1449:27;;;;;;;;;;;1339:142;:::o;1618:334::-;1025:20:3;;1688:127:17;;;;;;;5287:2:201;1688:127:17;;;5269:21:201;5326:2;5306:18;;;5299:30;5365:34;5345:18;;;5338:62;5436:29;5416:18;;;5409:57;5483:19;;1688:127:17;5085:423:201;1688:127:17;823:66;1911:31;1618:334::o;3670:174:16:-;1002:66;3295:11;3735:22;;:10;:22;;;;3727:85;;;;;;;5715:2:201;3727:85:16;;;5697:21:201;5754:2;5734:18;;;5727:30;5793:34;5773:18;;;5766:62;5864:20;5844:18;;;5837:48;5902:19;;3727:85:16;5513:414:201;14:196;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:186::-;274:6;327:2;315:9;306:7;302:23;298:32;295:52;;;343:1;340;333:12;295:52;366:29;385:9;366:29;:::i;:::-;356:39;215:186;-1:-1:-1;;;215:186:201:o;406:665::-;485:6;493;501;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;593:29;612:9;593:29;:::i;:::-;583:39;;673:2;662:9;658:18;645:32;696:18;737:2;729:6;726:14;723:34;;;753:1;750;743:12;723:34;791:6;780:9;776:22;766:32;;836:7;829:4;825:2;821:13;817:27;807:55;;858:1;855;848:12;807:55;898:2;885:16;924:2;916:6;913:14;910:34;;;940:1;937;930:12;910:34;985:7;980:2;971:6;967:2;963:15;959:24;956:37;953:57;;;1006:1;1003;996:12;953:57;1037:2;1033;1029:11;1019:21;;1059:6;1049:16;;;;;406:665;;;;;:::o;1307:184::-;1359:77;1356:1;1349:88;1456:4;1453:1;1446:15;1480:4;1477:1;1470:15;1496:777;1538:5;1591:3;1584:4;1576:6;1572:17;1568:27;1558:55;;1609:1;1606;1599:12;1558:55;1645:6;1632:20;1671:18;1708:2;1704;1701:10;1698:36;;;1714:18;;:::i;:::-;1848:2;1842:9;1910:4;1902:13;;1753:66;1898:22;;;1922:2;1894:31;1890:40;1878:53;;;1946:18;;;1966:22;;;1943:46;1940:72;;;1992:18;;:::i;:::-;2032:10;2028:2;2021:22;2067:2;2059:6;2052:18;2113:3;2106:4;2101:2;2093:6;2089:15;2085:26;2082:35;2079:55;;;2130:1;2127;2120:12;2079:55;2194:2;2187:4;2179:6;2175:17;2168:4;2160:6;2156:17;2143:54;2241:1;2234:4;2229:2;2221:6;2217:15;2213:26;2206:37;2261:6;2252:15;;;;;;1496:777;;;;:::o;2278:468::-;2364:6;2372;2380;2433:2;2421:9;2412:7;2408:23;2404:32;2401:52;;;2449:1;2446;2439:12;2401:52;2472:29;2491:9;2472:29;:::i;:::-;2462:39;;2520:38;2554:2;2543:9;2539:18;2520:38;:::i;:::-;2510:48;;2609:2;2598:9;2594:18;2581:32;2636:18;2628:6;2625:30;2622:50;;;2668:1;2665;2658:12;2622:50;2691:49;2732:7;2723:6;2712:9;2708:22;2691:49;:::i;:::-;2681:59;;;2278:468;;;;;:::o;2751:394::-;2828:6;2836;2889:2;2877:9;2868:7;2864:23;2860:32;2857:52;;;2905:1;2902;2895:12;2857:52;2928:29;2947:9;2928:29;:::i;:::-;2918:39;;3008:2;2997:9;2993:18;2980:32;3035:18;3027:6;3024:30;3021:50;;;3067:1;3064;3057:12;3021:50;3090:49;3131:7;3122:6;3111:9;3107:22;3090:49;:::i;:::-;3080:59;;;2751:394;;;;;:::o;3150:271::-;3333:6;3325;3320:3;3307:33;3289:3;3359:16;;3384:13;;;3359:16;3150:271;-1:-1:-1;3150:271:201:o;4181:279::-;4221:4;4249:1;4246;4243:8;4240:188;;;4284:77;4281:1;4274:88;4385:4;4382:1;4375:15;4413:4;4410:1;4403:15;4240:188;-1:-1:-1;4445:9:201;;4181:279::o;4465:184::-;4517:77;4514:1;4507:88;4614:4;4611:1;4604:15;4638:4;4635:1;4628:15;4654:426;4783:3;4821:6;4815:13;4846:1;4856:129;4870:6;4867:1;4864:13;4856:129;;;4968:4;4952:14;;;4948:25;;4942:32;4929:11;;;4922:53;4885:12;4856:129;;;5003:6;5000:1;4997:13;4994:48;;;5038:1;5029:6;5024:3;5020:16;5013:27;4994:48;-1:-1:-1;5058:16:201;;;;;4654:426;-1:-1:-1;;4654:426:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"654800","executionCost":"689","totalCost":"655489"},"external":{"":"infinite","admin()":"infinite","changeAdmin(address)":"infinite","implementation()":"infinite","initialize(address,address,bytes)":"infinite","initialize(address,bytes)":"infinite","upgradeTo(address)":"infinite","upgradeToAndCall(address,bytes)":"infinite"},"internal":{"_willFallback()":"infinite"}},"methodIdentifiers":{"admin()":"f851a440","changeAdmin(address)":"8f283970","implementation()":"5c60da1b","initialize(address,address,bytes)":"cf7a1d77","initialize(address,bytes)":"d1f57894","upgradeTo(address)":"3659cfe6","upgradeToAndCall(address,bytes)":"4f1ef286"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Extends from BaseAdminUpgradeabilityProxy with an initializer for initializing the implementation, admin, and init data.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"returns\":{\"_0\":\"The address of the proxy admin.\"}},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Only the current admin can call this function.\",\"params\":{\"newAdmin\":\"Address to transfer proxy administration to.\"}},\"implementation()\":{\"returns\":{\"_0\":\"The address of the implementation.\"}},\"initialize(address,address,bytes)\":{\"params\":{\"admin\":\"Address of the proxy administrator.\",\"data\":\"Data to send as msg.data to the implementation to initialize the proxied contract. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\",\"logic\":\"address of the initial implementation.\"}},\"initialize(address,bytes)\":{\"details\":\"Contract initializer.\",\"params\":{\"_data\":\"Data to send as msg.data to the implementation to initialize the proxied contract. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\",\"_logic\":\"Address of the initial implementation.\"}},\"upgradeTo(address)\":{\"details\":\"Upgrade the backing implementation of the proxy. Only the admin can call this function.\",\"params\":{\"newImplementation\":\"Address of the new implementation.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the backing implementation of the proxy and call a function on the new implementation. This is useful to initialize the proxied contract.\",\"params\":{\"data\":\"Data to send as msg.data in the low level call. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\",\"newImplementation\":\"Address of the new implementation.\"}}},\"title\":\"InitializableAdminUpgradeabilityProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"initialize(address,address,bytes)\":{\"notice\":\"Contract initializer.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol\":\"InitializableAdminUpgradeabilityProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './UpgradeabilityProxy.sol';\\n\\n/**\\n * @title BaseAdminUpgradeabilityProxy\\n * @dev This contract combines an upgradeability proxy with an authorization\\n * mechanism for administrative tasks.\\n * All external functions in this contract must be guarded by the\\n * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\\n * feature proposal that would enable this to be done automatically.\\n */\\ncontract BaseAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Emitted when the administration has been transferred.\\n   * @param previousAdmin Address of the previous admin.\\n   * @param newAdmin Address of the new admin.\\n   */\\n  event AdminChanged(address previousAdmin, address newAdmin);\\n\\n  /**\\n   * @dev Storage slot with the admin of the contract.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant ADMIN_SLOT =\\n    0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n  /**\\n   * @dev Modifier to check whether the `msg.sender` is the admin.\\n   * If it is, it will run the function. Otherwise, it will delegate the call\\n   * to the implementation.\\n   */\\n  modifier ifAdmin() {\\n    if (msg.sender == _admin()) {\\n      _;\\n    } else {\\n      _fallback();\\n    }\\n  }\\n\\n  /**\\n   * @return The address of the proxy admin.\\n   */\\n  function admin() external ifAdmin returns (address) {\\n    return _admin();\\n  }\\n\\n  /**\\n   * @return The address of the implementation.\\n   */\\n  function implementation() external ifAdmin returns (address) {\\n    return _implementation();\\n  }\\n\\n  /**\\n   * @dev Changes the admin of the proxy.\\n   * Only the current admin can call this function.\\n   * @param newAdmin Address to transfer proxy administration to.\\n   */\\n  function changeAdmin(address newAdmin) external ifAdmin {\\n    require(newAdmin != address(0), 'Cannot change the admin of a proxy to the zero address');\\n    emit AdminChanged(_admin(), newAdmin);\\n    _setAdmin(newAdmin);\\n  }\\n\\n  /**\\n   * @dev Upgrade the backing implementation of the proxy.\\n   * Only the admin can call this function.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function upgradeTo(address newImplementation) external ifAdmin {\\n    _upgradeTo(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Upgrade the backing implementation of the proxy and call a function\\n   * on the new implementation.\\n   * This is useful to initialize the proxied contract.\\n   * @param newImplementation Address of the new implementation.\\n   * @param data Data to send as msg.data in the low level call.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   */\\n  function upgradeToAndCall(\\n    address newImplementation,\\n    bytes calldata data\\n  ) external payable ifAdmin {\\n    _upgradeTo(newImplementation);\\n    (bool success, ) = newImplementation.delegatecall(data);\\n    require(success);\\n  }\\n\\n  /**\\n   * @return adm The admin slot.\\n   */\\n  function _admin() internal view returns (address adm) {\\n    bytes32 slot = ADMIN_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      adm := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Sets the address of the proxy admin.\\n   * @param newAdmin Address of the new proxy admin.\\n   */\\n  function _setAdmin(address newAdmin) internal {\\n    bytes32 slot = ADMIN_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newAdmin)\\n    }\\n  }\\n\\n  /**\\n   * @dev Only fall back when the sender is not the admin.\\n   */\\n  function _willFallback() internal virtual override {\\n    require(msg.sender != _admin(), 'Cannot call fallback function from the proxy admin');\\n    super._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0xad78efab85afdf5c383699fca5fd3013451d27a77911c6c2317ae688d32de3bc\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './Proxy.sol';\\nimport '../contracts/Address.sol';\\n\\n/**\\n * @title BaseUpgradeabilityProxy\\n * @dev This contract implements a proxy that allows to change the\\n * implementation address to which it will delegate.\\n * Such a change is called an implementation upgrade.\\n */\\ncontract BaseUpgradeabilityProxy is Proxy {\\n  /**\\n   * @dev Emitted when the implementation is upgraded.\\n   * @param implementation Address of the new implementation.\\n   */\\n  event Upgraded(address indexed implementation);\\n\\n  /**\\n   * @dev Storage slot with the address of the current implementation.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant IMPLEMENTATION_SLOT =\\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n  /**\\n   * @dev Returns the current implementation.\\n   * @return impl Address of the current implementation\\n   */\\n  function _implementation() internal view override returns (address impl) {\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      impl := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Upgrades the proxy to a new implementation.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _upgradeTo(address newImplementation) internal {\\n    _setImplementation(newImplementation);\\n    emit Upgraded(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Sets the implementation address of the proxy.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _setImplementation(address newImplementation) internal {\\n    require(\\n      Address.isContract(newImplementation),\\n      'Cannot set a proxy implementation to a non-contract address'\\n    );\\n\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newImplementation)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe47eb278267d31f096fc643c2a322c72066abfa6ba07f6386c266fe7cbd15013\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './BaseAdminUpgradeabilityProxy.sol';\\nimport './InitializableUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableAdminUpgradeabilityProxy\\n * @dev Extends from BaseAdminUpgradeabilityProxy with an initializer for\\n * initializing the implementation, admin, and init data.\\n */\\ncontract InitializableAdminUpgradeabilityProxy is\\n  BaseAdminUpgradeabilityProxy,\\n  InitializableUpgradeabilityProxy\\n{\\n  /**\\n   * Contract initializer.\\n   * @param logic address of the initial implementation.\\n   * @param admin Address of the proxy administrator.\\n   * @param data Data to send as msg.data to the implementation to initialize the proxied contract.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\\n   */\\n  function initialize(address logic, address admin, bytes memory data) public payable {\\n    require(_implementation() == address(0));\\n    InitializableUpgradeabilityProxy.initialize(logic, data);\\n    assert(ADMIN_SLOT == bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1));\\n    _setAdmin(admin);\\n  }\\n\\n  /**\\n   * @dev Only fall back when the sender is not the admin.\\n   */\\n  function _willFallback() internal override(BaseAdminUpgradeabilityProxy, Proxy) {\\n    BaseAdminUpgradeabilityProxy._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0x8ee2967a5cf8f802fd20b194a45c271597f02df4dab5d9ddaa1642dd4822ad1d\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableUpgradeabilityProxy\\n * @dev Extends BaseUpgradeabilityProxy with an initializer for initializing\\n * implementation and init data.\\n */\\ncontract InitializableUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Contract initializer.\\n   * @param _logic Address of the initial implementation.\\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\\n   */\\n  function initialize(address _logic, bytes memory _data) public payable {\\n    require(_implementation() == address(0));\\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\\n    _setImplementation(_logic);\\n    if (_data.length > 0) {\\n      (bool success, ) = _logic.delegatecall(_data);\\n      require(success);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x8a1e927b97f5da20f4640ba4d2588666910dfa89f5a2b0a37440d27e5a47ee08\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\n    assembly {\\n      // Copy msg.data. We take full control of memory in this inline assembly\\n      // block because it will not return to Solidity code. We overwrite the\\n      // Solidity scratch pad at memory position 0.\\n      calldatacopy(0, 0, calldatasize())\\n\\n      // Call the implementation.\\n      // out and outsize are 0 because we don't know the size yet.\\n      let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n      // Copy the returned data.\\n      returndatacopy(0, 0, returndatasize())\\n\\n      switch result\\n      // delegatecall returns 0 on error.\\n      case 0 {\\n        revert(0, returndatasize())\\n      }\\n      default {\\n        return(0, returndatasize())\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title UpgradeabilityProxy\\n * @dev Extends BaseUpgradeabilityProxy with a constructor for initializing\\n * implementation and init data.\\n */\\ncontract UpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Contract constructor.\\n   * @param _logic Address of the initial implementation.\\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\\n   */\\n  constructor(address _logic, bytes memory _data) payable {\\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\\n    _setImplementation(_logic);\\n    if (_data.length > 0) {\\n      (bool success, ) = _logic.delegatecall(_data);\\n      require(success);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xa19d50b90ce153fb36d266c926e09db8dc8f110bdda1ae4b4cf2ecd02c26b81c\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"initialize(address,address,bytes)":{"notice":"Contract initializer."}},"version":1}}},"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol":{"InitializableUpgradeabilityProxy":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"payable","type":"function"}],"devdoc":{"details":"Extends BaseUpgradeabilityProxy with an initializer for initializing implementation and init data.","kind":"dev","methods":{"initialize(address,bytes)":{"details":"Contract initializer.","params":{"_data":"Data to send as msg.data to the implementation to initialize the proxied contract. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.","_logic":"Address of the initial implementation."}}},"title":"InitializableUpgradeabilityProxy","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b5061047d806100206000396000f3fe60806040526004361061001e5760003560e01c8063d1f5789414610028575b61002661003b565b005b6100266100363660046102a4565b61006d565b61006b6100667f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b61019b565b565b60006100977f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff16146100b757600080fd5b6100e260017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61039f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc14610110576101106103dd565b610119826101bf565b8051156101975760008273ffffffffffffffffffffffffffffffffffffffff1682604051610147919061040c565b600060405180830381855af49150503d8060008114610182576040519150601f19603f3d011682016040523d82523d6000602084013e610187565b606091505b505090508061019557600080fd5b505b5050565b3660008037600080366000845af43d6000803e8080156101ba573d6000f35b3d6000fd5b803b610251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000606482015260840160405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156102b757600080fd5b823573ffffffffffffffffffffffffffffffffffffffff811681146102db57600080fd5b9150602083013567ffffffffffffffff808211156102f857600080fd5b818501915085601f83011261030c57600080fd5b81358181111561031e5761031e610275565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561036457610364610275565b8160405282815288602084870101111561037d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000828210156103d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b8181101561042d5760208186018101518583015201610413565b8181111561043c576000828501525b50919091019291505056fea264697066735822122024c8e301cbd8c7e015d81f5b3044c8760a0ff81ca76e012c93ff91b939278a8264736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47D DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xD1F57894 EQ PUSH2 0x28 JUMPI JUMPDEST PUSH2 0x26 PUSH2 0x3B JUMP JUMPDEST STOP JUMPDEST PUSH2 0x26 PUSH2 0x36 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A4 JUMP JUMPDEST PUSH2 0x6D JUMP JUMPDEST PUSH2 0x6B PUSH2 0x66 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x19B JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH2 0x97 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE2 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0x39F JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC EQ PUSH2 0x110 JUMPI PUSH2 0x110 PUSH2 0x3DD JUMP JUMPDEST PUSH2 0x119 DUP3 PUSH2 0x1BF JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x197 JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x147 SWAP2 SWAP1 PUSH2 0x40C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x182 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 0x187 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x195 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMPDEST POP POP JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x1BA JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST DUP1 EXTCODESIZE PUSH2 0x251 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x30C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x31E JUMPI PUSH2 0x31E PUSH2 0x275 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x364 JUMPI PUSH2 0x364 PUSH2 0x275 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x37D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x3D8 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x42D JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x413 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x43C JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 0xC8 0xE3 ADD 0xCB 0xD8 0xC7 0xE0 ISZERO 0xD8 0x1F JUMPDEST ADDRESS DIFFICULTY 0xC8 PUSH23 0xA0FF81CA76E012C93FF91B939278A8264736F6C634300 ADDMOD EXP STOP CALLER ","sourceMap":"264:962:19:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_2893":{"entryPoint":null,"id":2893,"parameterSlots":0,"returnSlots":0},"@_delegate_2907":{"entryPoint":411,"id":2907,"parameterSlots":1,"returnSlots":0},"@_fallback_2925":{"entryPoint":59,"id":2925,"parameterSlots":0,"returnSlots":0},"@_implementation_2712":{"entryPoint":null,"id":2712,"parameterSlots":0,"returnSlots":1},"@_setImplementation_2747":{"entryPoint":447,"id":2747,"parameterSlots":1,"returnSlots":0},"@_willFallback_2912":{"entryPoint":null,"id":2912,"parameterSlots":0,"returnSlots":0},"@initialize_2881":{"entryPoint":109,"id":2881,"parameterSlots":2,"returnSlots":0},"@isContract_445":{"entryPoint":null,"id":445,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_addresst_bytes_memory_ptr":{"entryPoint":676,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":1036,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":927,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x01":{"entryPoint":989,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":629,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2714:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"46:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"63:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"66:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"56:6:201"},"nodeType":"YulFunctionCall","src":"56:88:201"},"nodeType":"YulExpressionStatement","src":"56:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"160:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"163:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"153:6:201"},"nodeType":"YulFunctionCall","src":"153:15:201"},"nodeType":"YulExpressionStatement","src":"153:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"184:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"187:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"177:6:201"},"nodeType":"YulFunctionCall","src":"177:15:201"},"nodeType":"YulExpressionStatement","src":"177:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"14:184:201"},{"body":{"nodeType":"YulBlock","src":"299:1081:201","statements":[{"body":{"nodeType":"YulBlock","src":"345:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"354:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"357:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"347:6:201"},"nodeType":"YulFunctionCall","src":"347:12:201"},"nodeType":"YulExpressionStatement","src":"347:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"320:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"329:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"316:3:201"},"nodeType":"YulFunctionCall","src":"316:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"341:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"312:3:201"},"nodeType":"YulFunctionCall","src":"312:32:201"},"nodeType":"YulIf","src":"309:52:201"},{"nodeType":"YulVariableDeclaration","src":"370:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"396:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"383:12:201"},"nodeType":"YulFunctionCall","src":"383:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"374:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"492:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"501:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"504:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"494:6:201"},"nodeType":"YulFunctionCall","src":"494:12:201"},"nodeType":"YulExpressionStatement","src":"494:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"428:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"439:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"446:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"435:3:201"},"nodeType":"YulFunctionCall","src":"435:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"425:2:201"},"nodeType":"YulFunctionCall","src":"425:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"418:6:201"},"nodeType":"YulFunctionCall","src":"418:73:201"},"nodeType":"YulIf","src":"415:93:201"},{"nodeType":"YulAssignment","src":"517:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"527:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"517:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"541:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"572:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"583:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"568:3:201"},"nodeType":"YulFunctionCall","src":"568:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"555:12:201"},"nodeType":"YulFunctionCall","src":"555:32:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"545:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"596:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"606:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"600:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"651:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"660:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"663:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"653:6:201"},"nodeType":"YulFunctionCall","src":"653:12:201"},"nodeType":"YulExpressionStatement","src":"653:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"639:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"647:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"636:2:201"},"nodeType":"YulFunctionCall","src":"636:14:201"},"nodeType":"YulIf","src":"633:34:201"},{"nodeType":"YulVariableDeclaration","src":"676:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"690:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"701:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"686:3:201"},"nodeType":"YulFunctionCall","src":"686:22:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"680:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"756:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"765:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"768:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"758:6:201"},"nodeType":"YulFunctionCall","src":"758:12:201"},"nodeType":"YulExpressionStatement","src":"758:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"735:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"739:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"731:3:201"},"nodeType":"YulFunctionCall","src":"731:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"746:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"727:3:201"},"nodeType":"YulFunctionCall","src":"727:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"720:6:201"},"nodeType":"YulFunctionCall","src":"720:35:201"},"nodeType":"YulIf","src":"717:55:201"},{"nodeType":"YulVariableDeclaration","src":"781:26:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"804:2:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"791:12:201"},"nodeType":"YulFunctionCall","src":"791:16:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"785:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"830:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"832:16:201"},"nodeType":"YulFunctionCall","src":"832:18:201"},"nodeType":"YulExpressionStatement","src":"832:18:201"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"822:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"826:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"819:2:201"},"nodeType":"YulFunctionCall","src":"819:10:201"},"nodeType":"YulIf","src":"816:36:201"},{"nodeType":"YulVariableDeclaration","src":"861:76:201","value":{"kind":"number","nodeType":"YulLiteral","src":"871:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"865:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"946:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"966:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"960:5:201"},"nodeType":"YulFunctionCall","src":"960:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"950:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"978:71:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1000:6:201"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1024:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"1028:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1020:3:201"},"nodeType":"YulFunctionCall","src":"1020:13:201"},{"name":"_4","nodeType":"YulIdentifier","src":"1035:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1016:3:201"},"nodeType":"YulFunctionCall","src":"1016:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"1040:2:201","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1012:3:201"},"nodeType":"YulFunctionCall","src":"1012:31:201"},{"name":"_4","nodeType":"YulIdentifier","src":"1045:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1008:3:201"},"nodeType":"YulFunctionCall","src":"1008:40:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"996:3:201"},"nodeType":"YulFunctionCall","src":"996:53:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"982:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1108:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1110:16:201"},"nodeType":"YulFunctionCall","src":"1110:18:201"},"nodeType":"YulExpressionStatement","src":"1110:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1067:10:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1079:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1064:2:201"},"nodeType":"YulFunctionCall","src":"1064:18:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1087:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1099:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1084:2:201"},"nodeType":"YulFunctionCall","src":"1084:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1061:2:201"},"nodeType":"YulFunctionCall","src":"1061:46:201"},"nodeType":"YulIf","src":"1058:72:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1146:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1150:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1139:6:201"},"nodeType":"YulFunctionCall","src":"1139:22:201"},"nodeType":"YulExpressionStatement","src":"1139:22:201"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1177:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"1185:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1170:6:201"},"nodeType":"YulFunctionCall","src":"1170:18:201"},"nodeType":"YulExpressionStatement","src":"1170:18:201"},{"body":{"nodeType":"YulBlock","src":"1234:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1243:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1246:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1236:6:201"},"nodeType":"YulFunctionCall","src":"1236:12:201"},"nodeType":"YulExpressionStatement","src":"1236:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1211:2:201"},{"name":"_3","nodeType":"YulIdentifier","src":"1215:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1207:3:201"},"nodeType":"YulFunctionCall","src":"1207:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"1220:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1203:3:201"},"nodeType":"YulFunctionCall","src":"1203:20:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1225:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1200:2:201"},"nodeType":"YulFunctionCall","src":"1200:33:201"},"nodeType":"YulIf","src":"1197:53:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1276:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1284:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1272:3:201"},"nodeType":"YulFunctionCall","src":"1272:15:201"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1293:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"1297:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1289:3:201"},"nodeType":"YulFunctionCall","src":"1289:11:201"},{"name":"_3","nodeType":"YulIdentifier","src":"1302:2:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1259:12:201"},"nodeType":"YulFunctionCall","src":"1259:46:201"},"nodeType":"YulExpressionStatement","src":"1259:46:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1329:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"1337:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1325:3:201"},"nodeType":"YulFunctionCall","src":"1325:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"1342:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1321:3:201"},"nodeType":"YulFunctionCall","src":"1321:24:201"},{"kind":"number","nodeType":"YulLiteral","src":"1347:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1314:6:201"},"nodeType":"YulFunctionCall","src":"1314:35:201"},"nodeType":"YulExpressionStatement","src":"1314:35:201"},{"nodeType":"YulAssignment","src":"1358:16:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1368:6:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1358:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"257:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"268:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"280:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"288:6:201","type":""}],"src":"203:1177:201"},{"body":{"nodeType":"YulBlock","src":"1434:230:201","statements":[{"body":{"nodeType":"YulBlock","src":"1464:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1485:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1488:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1478:6:201"},"nodeType":"YulFunctionCall","src":"1478:88:201"},"nodeType":"YulExpressionStatement","src":"1478:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1586:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1589:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1579:6:201"},"nodeType":"YulFunctionCall","src":"1579:15:201"},"nodeType":"YulExpressionStatement","src":"1579:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1614:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1617:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1607:6:201"},"nodeType":"YulFunctionCall","src":"1607:15:201"},"nodeType":"YulExpressionStatement","src":"1607:15:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"1450:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"1453:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1447:2:201"},"nodeType":"YulFunctionCall","src":"1447:8:201"},"nodeType":"YulIf","src":"1444:188:201"},{"nodeType":"YulAssignment","src":"1641:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"1653:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"1656:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1649:3:201"},"nodeType":"YulFunctionCall","src":"1649:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"1641:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"1416:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"1419:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"1425:4:201","type":""}],"src":"1385:279:201"},{"body":{"nodeType":"YulBlock","src":"1701:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1718:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1721:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1711:6:201"},"nodeType":"YulFunctionCall","src":"1711:88:201"},"nodeType":"YulExpressionStatement","src":"1711:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1815:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1818:4:201","type":"","value":"0x01"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1808:6:201"},"nodeType":"YulFunctionCall","src":"1808:15:201"},"nodeType":"YulExpressionStatement","src":"1808:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1839:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1842:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1832:6:201"},"nodeType":"YulFunctionCall","src":"1832:15:201"},"nodeType":"YulExpressionStatement","src":"1832:15:201"}]},"name":"panic_error_0x01","nodeType":"YulFunctionDefinition","src":"1669:184:201"},{"body":{"nodeType":"YulBlock","src":"1995:289:201","statements":[{"nodeType":"YulVariableDeclaration","src":"2005:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2025:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2019:5:201"},"nodeType":"YulFunctionCall","src":"2019:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2009:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2041:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2050:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"2045:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2112:77:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2137:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"2142:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2133:3:201"},"nodeType":"YulFunctionCall","src":"2133:11:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2160:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"2168:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2156:3:201"},"nodeType":"YulFunctionCall","src":"2156:14:201"},{"kind":"number","nodeType":"YulLiteral","src":"2172:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2152:3:201"},"nodeType":"YulFunctionCall","src":"2152:25:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2146:5:201"},"nodeType":"YulFunctionCall","src":"2146:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2126:6:201"},"nodeType":"YulFunctionCall","src":"2126:53:201"},"nodeType":"YulExpressionStatement","src":"2126:53:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2071:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"2074:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2068:2:201"},"nodeType":"YulFunctionCall","src":"2068:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2082:21:201","statements":[{"nodeType":"YulAssignment","src":"2084:17:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2093:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"2096:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2089:3:201"},"nodeType":"YulFunctionCall","src":"2089:12:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"2084:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"2064:3:201","statements":[]},"src":"2060:129:201"},{"body":{"nodeType":"YulBlock","src":"2215:31:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2228:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"2233:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2224:3:201"},"nodeType":"YulFunctionCall","src":"2224:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"2242:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2217:6:201"},"nodeType":"YulFunctionCall","src":"2217:27:201"},"nodeType":"YulExpressionStatement","src":"2217:27:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2204:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"2207:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2201:2:201"},"nodeType":"YulFunctionCall","src":"2201:13:201"},"nodeType":"YulIf","src":"2198:48:201"},{"nodeType":"YulAssignment","src":"2255:23:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2266:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"2271:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2262:3:201"},"nodeType":"YulFunctionCall","src":"2262:16:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"2255:3:201"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"1971:3:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1976:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"1987:3:201","type":""}],"src":"1858:426:201"},{"body":{"nodeType":"YulBlock","src":"2463:249:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2480:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2491:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2473:6:201"},"nodeType":"YulFunctionCall","src":"2473:21:201"},"nodeType":"YulExpressionStatement","src":"2473:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2514:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2525:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2510:3:201"},"nodeType":"YulFunctionCall","src":"2510:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2530:2:201","type":"","value":"59"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2503:6:201"},"nodeType":"YulFunctionCall","src":"2503:30:201"},"nodeType":"YulExpressionStatement","src":"2503:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2553:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2564:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2549:3:201"},"nodeType":"YulFunctionCall","src":"2549:18:201"},{"hexValue":"43616e6e6f742073657420612070726f787920696d706c656d656e746174696f","kind":"string","nodeType":"YulLiteral","src":"2569:34:201","type":"","value":"Cannot set a proxy implementatio"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2542:6:201"},"nodeType":"YulFunctionCall","src":"2542:62:201"},"nodeType":"YulExpressionStatement","src":"2542:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2624:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2635:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2620:3:201"},"nodeType":"YulFunctionCall","src":"2620:18:201"},{"hexValue":"6e20746f2061206e6f6e2d636f6e74726163742061646472657373","kind":"string","nodeType":"YulLiteral","src":"2640:29:201","type":"","value":"n to a non-contract address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2613:6:201"},"nodeType":"YulFunctionCall","src":"2613:57:201"},"nodeType":"YulExpressionStatement","src":"2613:57:201"},{"nodeType":"YulAssignment","src":"2679:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2691:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2702:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2687:3:201"},"nodeType":"YulFunctionCall","src":"2687:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2679:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2440:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2454:4:201","type":""}],"src":"2289:423:201"}]},"contents":"{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n        value0 := value\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        calldatacopy(add(memPtr, 32), add(_2, 32), _3)\n        mstore(add(add(memPtr, _3), 32), 0)\n        value1 := memPtr\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        diff := sub(x, y)\n    }\n    function panic_error_0x01()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x01)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            mstore(add(pos, i), mload(add(add(value0, i), 0x20)))\n        }\n        if gt(i, length) { mstore(add(pos, length), 0) }\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 59)\n        mstore(add(headStart, 64), \"Cannot set a proxy implementatio\")\n        mstore(add(headStart, 96), \"n to a non-contract address\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"60806040526004361061001e5760003560e01c8063d1f5789414610028575b61002661003b565b005b6100266100363660046102a4565b61006d565b61006b6100667f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b61019b565b565b60006100977f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff16146100b757600080fd5b6100e260017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61039f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc14610110576101106103dd565b610119826101bf565b8051156101975760008273ffffffffffffffffffffffffffffffffffffffff1682604051610147919061040c565b600060405180830381855af49150503d8060008114610182576040519150601f19603f3d011682016040523d82523d6000602084013e610187565b606091505b505090508061019557600080fd5b505b5050565b3660008037600080366000845af43d6000803e8080156101ba573d6000f35b3d6000fd5b803b610251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000606482015260840160405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080604083850312156102b757600080fd5b823573ffffffffffffffffffffffffffffffffffffffff811681146102db57600080fd5b9150602083013567ffffffffffffffff808211156102f857600080fd5b818501915085601f83011261030c57600080fd5b81358181111561031e5761031e610275565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561036457610364610275565b8160405282815288602084870101111561037d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000828210156103d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b8181101561042d5760208186018101518583015201610413565b8181111561043c576000828501525b50919091019291505056fea264697066735822122024c8e301cbd8c7e015d81f5b3044c8760a0ff81ca76e012c93ff91b939278a8264736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xD1F57894 EQ PUSH2 0x28 JUMPI JUMPDEST PUSH2 0x26 PUSH2 0x3B JUMP JUMPDEST STOP JUMPDEST PUSH2 0x26 PUSH2 0x36 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A4 JUMP JUMPDEST PUSH2 0x6D JUMP JUMPDEST PUSH2 0x6B PUSH2 0x66 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x19B JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH2 0x97 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE2 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0x39F JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC EQ PUSH2 0x110 JUMPI PUSH2 0x110 PUSH2 0x3DD JUMP JUMPDEST PUSH2 0x119 DUP3 PUSH2 0x1BF JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x197 JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x147 SWAP2 SWAP1 PUSH2 0x40C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x182 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 0x187 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x195 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMPDEST POP POP JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x1BA JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST DUP1 EXTCODESIZE PUSH2 0x251 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x30C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x31E JUMPI PUSH2 0x31E PUSH2 0x275 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x364 JUMPI PUSH2 0x364 PUSH2 0x275 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x37D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x3D8 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x42D JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x413 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x43C JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 0xC8 0xE3 ADD 0xCB 0xD8 0xC7 0xE0 ISZERO 0xD8 0x1F JUMPDEST ADDRESS DIFFICULTY 0xC8 PUSH23 0xA0FF81CA76E012C93FF91B939278A8264736F6C634300 ADDMOD EXP STOP CALLER ","sourceMap":"264:962:19:-:0;;;;;;;;;;;;;;;;;;572:11:20;:9;:11::i;:::-;264:962:19;859:365;;;;;;:::i;:::-;;:::i;2155:90:20:-;2212:28;2222:17;823:66:17;1183:11;;1008:196;2222:17:20;2212:9;:28::i;:::-;2155:90::o;859:365:19:-;973:1;944:17;823:66:17;1183:11;;1008:196;944:17:19;:31;;;936:40;;;;;;1020:54;1073:1;1028:41;1020:54;:::i;:::-;823:66:17;989:86:19;982:94;;;;:::i;:::-;1082:26;1101:6;1082:18;:26::i;:::-;1118:12;;:16;1114:106;;1145:12;1163:6;:19;;1183:5;1163:26;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1144:45;;;1205:7;1197:16;;;;;;1136:84;1114:106;859:365;;:::o;1005:802:20:-;1338:14;1335:1;1332;1319:34;1534:1;1531;1515:14;1512:1;1496:14;1489:5;1476:60;1598:16;1595:1;1592;1577:38;1630:6;1685:52;;;;1772:16;1769:1;1762:27;1685:52;1712:16;1709:1;1702:27;1618:334:17;1025:20:3;;1688:127:17;;;;;;;2491:2:201;1688:127:17;;;2473:21:201;2530:2;2510:18;;;2503:30;2569:34;2549:18;;;2542:62;2640:29;2620:18;;;2613:57;2687:19;;1688:127:17;;;;;;;;823:66;1911:31;1618:334::o;14:184:201:-;66:77;63:1;56:88;163:4;160:1;153:15;187:4;184:1;177:15;203:1177;280:6;288;341:2;329:9;320:7;316:23;312:32;309:52;;;357:1;354;347:12;309:52;396:9;383:23;446:42;439:5;435:54;428:5;425:65;415:93;;504:1;501;494:12;415:93;527:5;-1:-1:-1;583:2:201;568:18;;555:32;606:18;636:14;;;633:34;;;663:1;660;653:12;633:34;701:6;690:9;686:22;676:32;;746:7;739:4;735:2;731:13;727:27;717:55;;768:1;765;758:12;717:55;804:2;791:16;826:2;822;819:10;816:36;;;832:18;;:::i;:::-;966:2;960:9;1028:4;1020:13;;871:66;1016:22;;;1040:2;1012:31;1008:40;996:53;;;1064:18;;;1084:22;;;1061:46;1058:72;;;1110:18;;:::i;:::-;1150:10;1146:2;1139:22;1185:2;1177:6;1170:18;1225:7;1220:2;1215;1211;1207:11;1203:20;1200:33;1197:53;;;1246:1;1243;1236:12;1197:53;1302:2;1297;1293;1289:11;1284:2;1276:6;1272:15;1259:46;1347:1;1342:2;1337;1329:6;1325:15;1321:24;1314:35;1368:6;1358:16;;;;;;;203:1177;;;;;:::o;1385:279::-;1425:4;1453:1;1450;1447:8;1444:188;;;1488:77;1485:1;1478:88;1589:4;1586:1;1579:15;1617:4;1614:1;1607:15;1444:188;-1:-1:-1;1649:9:201;;1385:279::o;1669:184::-;1721:77;1718:1;1711:88;1818:4;1815:1;1808:15;1842:4;1839:1;1832:15;1858:426;1987:3;2025:6;2019:13;2050:1;2060:129;2074:6;2071:1;2068:13;2060:129;;;2172:4;2156:14;;;2152:25;;2146:32;2133:11;;;2126:53;2089:12;2060:129;;;2207:6;2204:1;2201:13;2198:48;;;2242:1;2233:6;2228:3;2224:16;2217:27;2198:48;-1:-1:-1;2262:16:201;;;;;1858:426;-1:-1:-1;;1858:426:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"229800","executionCost":"269","totalCost":"230069"},"external":{"":"infinite","initialize(address,bytes)":"infinite"}},"methodIdentifiers":{"initialize(address,bytes)":"d1f57894"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Extends BaseUpgradeabilityProxy with an initializer for initializing implementation and init data.\",\"kind\":\"dev\",\"methods\":{\"initialize(address,bytes)\":{\"details\":\"Contract initializer.\",\"params\":{\"_data\":\"Data to send as msg.data to the implementation to initialize the proxied contract. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\",\"_logic\":\"Address of the initial implementation.\"}}},\"title\":\"InitializableUpgradeabilityProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol\":\"InitializableUpgradeabilityProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './Proxy.sol';\\nimport '../contracts/Address.sol';\\n\\n/**\\n * @title BaseUpgradeabilityProxy\\n * @dev This contract implements a proxy that allows to change the\\n * implementation address to which it will delegate.\\n * Such a change is called an implementation upgrade.\\n */\\ncontract BaseUpgradeabilityProxy is Proxy {\\n  /**\\n   * @dev Emitted when the implementation is upgraded.\\n   * @param implementation Address of the new implementation.\\n   */\\n  event Upgraded(address indexed implementation);\\n\\n  /**\\n   * @dev Storage slot with the address of the current implementation.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant IMPLEMENTATION_SLOT =\\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n  /**\\n   * @dev Returns the current implementation.\\n   * @return impl Address of the current implementation\\n   */\\n  function _implementation() internal view override returns (address impl) {\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      impl := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Upgrades the proxy to a new implementation.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _upgradeTo(address newImplementation) internal {\\n    _setImplementation(newImplementation);\\n    emit Upgraded(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Sets the implementation address of the proxy.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _setImplementation(address newImplementation) internal {\\n    require(\\n      Address.isContract(newImplementation),\\n      'Cannot set a proxy implementation to a non-contract address'\\n    );\\n\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newImplementation)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe47eb278267d31f096fc643c2a322c72066abfa6ba07f6386c266fe7cbd15013\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableUpgradeabilityProxy\\n * @dev Extends BaseUpgradeabilityProxy with an initializer for initializing\\n * implementation and init data.\\n */\\ncontract InitializableUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Contract initializer.\\n   * @param _logic Address of the initial implementation.\\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\\n   */\\n  function initialize(address _logic, bytes memory _data) public payable {\\n    require(_implementation() == address(0));\\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\\n    _setImplementation(_logic);\\n    if (_data.length > 0) {\\n      (bool success, ) = _logic.delegatecall(_data);\\n      require(success);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x8a1e927b97f5da20f4640ba4d2588666910dfa89f5a2b0a37440d27e5a47ee08\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\n    assembly {\\n      // Copy msg.data. We take full control of memory in this inline assembly\\n      // block because it will not return to Solidity code. We overwrite the\\n      // Solidity scratch pad at memory position 0.\\n      calldatacopy(0, 0, calldatasize())\\n\\n      // Call the implementation.\\n      // out and outsize are 0 because we don't know the size yet.\\n      let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n      // Copy the returned data.\\n      returndatacopy(0, 0, returndatasize())\\n\\n      switch result\\n      // delegatecall returns 0 on error.\\n      case 0 {\\n        revert(0, returndatasize())\\n      }\\n      default {\\n        return(0, returndatasize())\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol":{"Proxy":{"abi":[{"stateMutability":"payable","type":"fallback"}],"devdoc":{"details":"Implements delegation of calls to other contracts, with proper forwarding of return values and bubbling of failures. It defines a fallback function that delegates all calls to the address returned by the abstract _implementation() internal function.","kind":"dev","methods":{},"title":"Proxy","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"details\":\"Implements delegation of calls to other contracts, with proper forwarding of return values and bubbling of failures. It defines a fallback function that delegates all calls to the address returned by the abstract _implementation() internal function.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Proxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":\"Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\n    assembly {\\n      // Copy msg.data. We take full control of memory in this inline assembly\\n      // block because it will not return to Solidity code. We overwrite the\\n      // Solidity scratch pad at memory position 0.\\n      calldatacopy(0, 0, calldatasize())\\n\\n      // Call the implementation.\\n      // out and outsize are 0 because we don't know the size yet.\\n      let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n      // Copy the returned data.\\n      returndatacopy(0, 0, returndatasize())\\n\\n      switch result\\n      // delegatecall returns 0 on error.\\n      case 0 {\\n        revert(0, returndatasize())\\n      }\\n      default {\\n        return(0, returndatasize())\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol":{"UpgradeabilityProxy":{"abi":[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"}],"devdoc":{"details":"Extends BaseUpgradeabilityProxy with a constructor for initializing implementation and init data.","kind":"dev","methods":{"constructor":{"details":"Contract constructor.","params":{"_data":"Data to send as msg.data to the implementation to initialize the proxied contract. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.","_logic":"Address of the initial implementation."}}},"title":"UpgradeabilityProxy","version":1},"evm":{"bytecode":{"functionDebugData":{"@_2978":{"entryPoint":null,"id":2978,"parameterSlots":2,"returnSlots":0},"@_setImplementation_2747":{"entryPoint":234,"id":2747,"parameterSlots":1,"returnSlots":0},"@isContract_445":{"entryPoint":389,"id":445,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory":{"entryPoint":465,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":730,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":671,"id":null,"parameterSlots":2,"returnSlots":1},"copy_memory_to_memory":{"entryPoint":417,"id":null,"parameterSlots":3,"returnSlots":0},"panic_error_0x01":{"entryPoint":708,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":395,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2527:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"46:95:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"63:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"70:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"75:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"66:3:201"},"nodeType":"YulFunctionCall","src":"66:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"56:6:201"},"nodeType":"YulFunctionCall","src":"56:31:201"},"nodeType":"YulExpressionStatement","src":"56:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"103:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"106:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"96:6:201"},"nodeType":"YulFunctionCall","src":"96:15:201"},"nodeType":"YulExpressionStatement","src":"96:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"127:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"130:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"120:6:201"},"nodeType":"YulFunctionCall","src":"120:15:201"},"nodeType":"YulExpressionStatement","src":"120:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"14:127:201"},{"body":{"nodeType":"YulBlock","src":"199:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"209:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"218:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"213:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"278:63:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"303:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"308:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"299:3:201"},"nodeType":"YulFunctionCall","src":"299:11:201"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"322:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"327:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"318:3:201"},"nodeType":"YulFunctionCall","src":"318:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"312:5:201"},"nodeType":"YulFunctionCall","src":"312:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"292:6:201"},"nodeType":"YulFunctionCall","src":"292:39:201"},"nodeType":"YulExpressionStatement","src":"292:39:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"239:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"242:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"236:2:201"},"nodeType":"YulFunctionCall","src":"236:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"250:19:201","statements":[{"nodeType":"YulAssignment","src":"252:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"261:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"264:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"257:3:201"},"nodeType":"YulFunctionCall","src":"257:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"252:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"232:3:201","statements":[]},"src":"228:113:201"},{"body":{"nodeType":"YulBlock","src":"367:31:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"380:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"385:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"376:3:201"},"nodeType":"YulFunctionCall","src":"376:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"394:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"369:6:201"},"nodeType":"YulFunctionCall","src":"369:27:201"},"nodeType":"YulExpressionStatement","src":"369:27:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"356:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"359:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"353:2:201"},"nodeType":"YulFunctionCall","src":"353:13:201"},"nodeType":"YulIf","src":"350:48:201"}]},"name":"copy_memory_to_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"177:3:201","type":""},{"name":"dst","nodeType":"YulTypedName","src":"182:3:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"187:6:201","type":""}],"src":"146:258:201"},{"body":{"nodeType":"YulBlock","src":"516:943:201","statements":[{"body":{"nodeType":"YulBlock","src":"562:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"571:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"574:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"564:6:201"},"nodeType":"YulFunctionCall","src":"564:12:201"},"nodeType":"YulExpressionStatement","src":"564:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"537:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"546:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"533:3:201"},"nodeType":"YulFunctionCall","src":"533:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"558:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"529:3:201"},"nodeType":"YulFunctionCall","src":"529:32:201"},"nodeType":"YulIf","src":"526:52:201"},{"nodeType":"YulVariableDeclaration","src":"587:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"606:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"600:5:201"},"nodeType":"YulFunctionCall","src":"600:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"591:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"679:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"688:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"691:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"681:6:201"},"nodeType":"YulFunctionCall","src":"681:12:201"},"nodeType":"YulExpressionStatement","src":"681:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"638:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"649:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"664:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"669:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"660:3:201"},"nodeType":"YulFunctionCall","src":"660:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"673:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"656:3:201"},"nodeType":"YulFunctionCall","src":"656:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"645:3:201"},"nodeType":"YulFunctionCall","src":"645:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"635:2:201"},"nodeType":"YulFunctionCall","src":"635:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"628:6:201"},"nodeType":"YulFunctionCall","src":"628:50:201"},"nodeType":"YulIf","src":"625:70:201"},{"nodeType":"YulAssignment","src":"704:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"714:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"704:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"728:39:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"752:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"763:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"748:3:201"},"nodeType":"YulFunctionCall","src":"748:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"742:5:201"},"nodeType":"YulFunctionCall","src":"742:25:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"732:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"776:28:201","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"794:2:201","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"798:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"790:3:201"},"nodeType":"YulFunctionCall","src":"790:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"802:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"786:3:201"},"nodeType":"YulFunctionCall","src":"786:18:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"780:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"831:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"840:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"843:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"833:6:201"},"nodeType":"YulFunctionCall","src":"833:12:201"},"nodeType":"YulExpressionStatement","src":"833:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"819:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"827:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"816:2:201"},"nodeType":"YulFunctionCall","src":"816:14:201"},"nodeType":"YulIf","src":"813:34:201"},{"nodeType":"YulVariableDeclaration","src":"856:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"870:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"881:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"866:3:201"},"nodeType":"YulFunctionCall","src":"866:22:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"860:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"936:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"945:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"948:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"938:6:201"},"nodeType":"YulFunctionCall","src":"938:12:201"},"nodeType":"YulExpressionStatement","src":"938:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"915:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"919:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"911:3:201"},"nodeType":"YulFunctionCall","src":"911:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"926:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"907:3:201"},"nodeType":"YulFunctionCall","src":"907:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"900:6:201"},"nodeType":"YulFunctionCall","src":"900:35:201"},"nodeType":"YulIf","src":"897:55:201"},{"nodeType":"YulVariableDeclaration","src":"961:19:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"977:2:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"971:5:201"},"nodeType":"YulFunctionCall","src":"971:9:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"965:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1003:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1005:16:201"},"nodeType":"YulFunctionCall","src":"1005:18:201"},"nodeType":"YulExpressionStatement","src":"1005:18:201"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"995:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"999:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"992:2:201"},"nodeType":"YulFunctionCall","src":"992:10:201"},"nodeType":"YulIf","src":"989:36:201"},{"nodeType":"YulVariableDeclaration","src":"1034:17:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1048:2:201","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1044:3:201"},"nodeType":"YulFunctionCall","src":"1044:7:201"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"1038:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1060:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1080:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1074:5:201"},"nodeType":"YulFunctionCall","src":"1074:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1064:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1092:71:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1114:6:201"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1138:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"1142:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1134:3:201"},"nodeType":"YulFunctionCall","src":"1134:13:201"},{"name":"_4","nodeType":"YulIdentifier","src":"1149:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1130:3:201"},"nodeType":"YulFunctionCall","src":"1130:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"1154:2:201","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1126:3:201"},"nodeType":"YulFunctionCall","src":"1126:31:201"},{"name":"_4","nodeType":"YulIdentifier","src":"1159:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1122:3:201"},"nodeType":"YulFunctionCall","src":"1122:40:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1110:3:201"},"nodeType":"YulFunctionCall","src":"1110:53:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1096:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1222:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1224:16:201"},"nodeType":"YulFunctionCall","src":"1224:18:201"},"nodeType":"YulExpressionStatement","src":"1224:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1181:10:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1193:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1178:2:201"},"nodeType":"YulFunctionCall","src":"1178:18:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1201:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1213:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1198:2:201"},"nodeType":"YulFunctionCall","src":"1198:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1175:2:201"},"nodeType":"YulFunctionCall","src":"1175:46:201"},"nodeType":"YulIf","src":"1172:72:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1260:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1264:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1253:6:201"},"nodeType":"YulFunctionCall","src":"1253:22:201"},"nodeType":"YulExpressionStatement","src":"1253:22:201"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1291:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"1299:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1284:6:201"},"nodeType":"YulFunctionCall","src":"1284:18:201"},"nodeType":"YulExpressionStatement","src":"1284:18:201"},{"body":{"nodeType":"YulBlock","src":"1348:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1357:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1360:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1350:6:201"},"nodeType":"YulFunctionCall","src":"1350:12:201"},"nodeType":"YulExpressionStatement","src":"1350:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1325:2:201"},{"name":"_3","nodeType":"YulIdentifier","src":"1329:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1321:3:201"},"nodeType":"YulFunctionCall","src":"1321:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"1334:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1317:3:201"},"nodeType":"YulFunctionCall","src":"1317:20:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1339:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1314:2:201"},"nodeType":"YulFunctionCall","src":"1314:33:201"},"nodeType":"YulIf","src":"1311:53:201"},{"expression":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1399:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"1403:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1395:3:201"},"nodeType":"YulFunctionCall","src":"1395:11:201"},{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1412:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1420:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1408:3:201"},"nodeType":"YulFunctionCall","src":"1408:15:201"},{"name":"_3","nodeType":"YulIdentifier","src":"1425:2:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"1373:21:201"},"nodeType":"YulFunctionCall","src":"1373:55:201"},"nodeType":"YulExpressionStatement","src":"1373:55:201"},{"nodeType":"YulAssignment","src":"1437:16:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1447:6:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1437:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"474:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"485:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"497:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"505:6:201","type":""}],"src":"409:1050:201"},{"body":{"nodeType":"YulBlock","src":"1513:173:201","statements":[{"body":{"nodeType":"YulBlock","src":"1543:111:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1564:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1571:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1576:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1567:3:201"},"nodeType":"YulFunctionCall","src":"1567:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1557:6:201"},"nodeType":"YulFunctionCall","src":"1557:31:201"},"nodeType":"YulExpressionStatement","src":"1557:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1608:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1611:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1601:6:201"},"nodeType":"YulFunctionCall","src":"1601:15:201"},"nodeType":"YulExpressionStatement","src":"1601:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1636:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1639:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1629:6:201"},"nodeType":"YulFunctionCall","src":"1629:15:201"},"nodeType":"YulExpressionStatement","src":"1629:15:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"1529:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"1532:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1526:2:201"},"nodeType":"YulFunctionCall","src":"1526:8:201"},"nodeType":"YulIf","src":"1523:131:201"},{"nodeType":"YulAssignment","src":"1663:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"1675:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"1678:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1671:3:201"},"nodeType":"YulFunctionCall","src":"1671:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"1663:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"1495:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"1498:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"1504:4:201","type":""}],"src":"1464:222:201"},{"body":{"nodeType":"YulBlock","src":"1723:95:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1740:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1747:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1752:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1743:3:201"},"nodeType":"YulFunctionCall","src":"1743:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1733:6:201"},"nodeType":"YulFunctionCall","src":"1733:31:201"},"nodeType":"YulExpressionStatement","src":"1733:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1780:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1783:4:201","type":"","value":"0x01"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1773:6:201"},"nodeType":"YulFunctionCall","src":"1773:15:201"},"nodeType":"YulExpressionStatement","src":"1773:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1804:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1807:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1797:6:201"},"nodeType":"YulFunctionCall","src":"1797:15:201"},"nodeType":"YulExpressionStatement","src":"1797:15:201"}]},"name":"panic_error_0x01","nodeType":"YulFunctionDefinition","src":"1691:127:201"},{"body":{"nodeType":"YulBlock","src":"1960:137:201","statements":[{"nodeType":"YulVariableDeclaration","src":"1970:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1990:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1984:5:201"},"nodeType":"YulFunctionCall","src":"1984:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"1974:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2032:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2040:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2028:3:201"},"nodeType":"YulFunctionCall","src":"2028:17:201"},{"name":"pos","nodeType":"YulIdentifier","src":"2047:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"2052:6:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"2006:21:201"},"nodeType":"YulFunctionCall","src":"2006:53:201"},"nodeType":"YulExpressionStatement","src":"2006:53:201"},{"nodeType":"YulAssignment","src":"2068:23:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2079:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"2084:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2075:3:201"},"nodeType":"YulFunctionCall","src":"2075:16:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"2068:3:201"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"1936:3:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1941:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"1952:3:201","type":""}],"src":"1823:274:201"},{"body":{"nodeType":"YulBlock","src":"2276:249:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2293:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2304:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2286:6:201"},"nodeType":"YulFunctionCall","src":"2286:21:201"},"nodeType":"YulExpressionStatement","src":"2286:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2327:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2338:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2323:3:201"},"nodeType":"YulFunctionCall","src":"2323:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2343:2:201","type":"","value":"59"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2316:6:201"},"nodeType":"YulFunctionCall","src":"2316:30:201"},"nodeType":"YulExpressionStatement","src":"2316:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2366:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2377:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2362:3:201"},"nodeType":"YulFunctionCall","src":"2362:18:201"},{"hexValue":"43616e6e6f742073657420612070726f787920696d706c656d656e746174696f","kind":"string","nodeType":"YulLiteral","src":"2382:34:201","type":"","value":"Cannot set a proxy implementatio"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2355:6:201"},"nodeType":"YulFunctionCall","src":"2355:62:201"},"nodeType":"YulExpressionStatement","src":"2355:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2437:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2448:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2433:3:201"},"nodeType":"YulFunctionCall","src":"2433:18:201"},{"hexValue":"6e20746f2061206e6f6e2d636f6e74726163742061646472657373","kind":"string","nodeType":"YulLiteral","src":"2453:29:201","type":"","value":"n to a non-contract address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2426:6:201"},"nodeType":"YulFunctionCall","src":"2426:57:201"},"nodeType":"YulExpressionStatement","src":"2426:57:201"},{"nodeType":"YulAssignment","src":"2492:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2504:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2515:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2500:3:201"},"nodeType":"YulFunctionCall","src":"2500:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2492:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2253:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2267:4:201","type":""}],"src":"2102:423:201"}]},"contents":"{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n        let offset := mload(add(headStart, 32))\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := mload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory(add(_2, 32), add(memPtr, 32), _3)\n        value1 := memPtr\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        diff := sub(x, y)\n    }\n    function panic_error_0x01()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x01)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 59)\n        mstore(add(headStart, 64), \"Cannot set a proxy implementatio\")\n        mstore(add(headStart, 96), \"n to a non-contract address\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60806040526040516103be3803806103be833981016040819052610022916101d1565b61004d60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61029f565b60008051602061039e83398151915214610069576100696102c4565b610072826100ea565b8051156100e3576000826001600160a01b03168260405161009391906102da565b600060405180830381855af49150503d80600081146100ce576040519150601f19603f3d011682016040523d82523d6000602084013e6100d3565b606091505b50509050806100e157600080fd5b505b50506102f6565b6100fd8161018560201b61003b1760201c565b6101735760405162461bcd60e51b815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000606482015260840160405180910390fd5b60008051602061039e83398151915255565b3b151590565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101bc5781810151838201526020016101a4565b838111156101cb576000848401525b50505050565b600080604083850312156101e457600080fd5b82516001600160a01b03811681146101fb57600080fd5b60208401519092506001600160401b038082111561021857600080fd5b818501915085601f83011261022c57600080fd5b81518181111561023e5761023e61018b565b604051601f8201601f19908116603f011681019083821181831017156102665761026661018b565b8160405282815288602084870101111561027f57600080fd5b6102908360208301602088016101a1565b80955050505050509250929050565b6000828210156102bf57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b600082516102ec8184602087016101a1565b9190910192915050565b609a806103046000396000f3fe6080604052600a600c565b005b603960357f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6041565b565b3b151590565b3660008037600080366000845af43d6000803e808015605f573d6000f35b3d6000fdfea26469706673582212207a555d7607d2bd7e30f4f62607ef51fce3fc4f77a551f195c9ee4f848a9b879664736f6c634300080a0033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x3BE CODESIZE SUB DUP1 PUSH2 0x3BE DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x22 SWAP2 PUSH2 0x1D1 JUMP JUMPDEST PUSH2 0x4D PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0x29F JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x39E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE EQ PUSH2 0x69 JUMPI PUSH2 0x69 PUSH2 0x2C4 JUMP JUMPDEST PUSH2 0x72 DUP3 PUSH2 0xEA JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xE3 JUMPI PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x93 SWAP2 SWAP1 PUSH2 0x2DA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xCE 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 0xD3 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0xE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMPDEST POP POP PUSH2 0x2F6 JUMP JUMPDEST PUSH2 0xFD DUP2 PUSH2 0x185 PUSH1 0x20 SHL PUSH2 0x3B OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x173 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x39E DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1BC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1A4 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1CB JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x218 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x22C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x23E JUMPI PUSH2 0x23E PUSH2 0x18B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x266 JUMPI PUSH2 0x266 PUSH2 0x18B JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x27F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x290 DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH2 0x1A1 JUMP JUMPDEST DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x2BF JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x2EC DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1A1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x9A DUP1 PUSH2 0x304 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0xA PUSH1 0xC JUMP JUMPDEST STOP JUMPDEST PUSH1 0x39 PUSH1 0x35 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x41 JUMP JUMPDEST JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH1 0x5F JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH27 0x555D7607D2BD7E30F4F62607EF51FCE3FC4F77A551F195C9EE4F84 DUP11 SWAP12 DUP8 SWAP7 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER CALLDATASIZE ADDMOD SWAP5 LOG1 EXTCODESIZE LOG1 LOG3 0x21 MOD PUSH8 0xC828492DB98DCA3E KECCAK256 PUSH23 0xCC3735A920A3CA505D382BBC0000000000000000000000 ","sourceMap":"250:888:21:-:0;;;832:304;;;;;;;;;;;;;;;;;;:::i;:::-;932:54;985:1;940:41;932:54;:::i;:::-;-1:-1:-1;;;;;;;;;;;901:86:21;894:94;;;;:::i;:::-;994:26;1013:6;994:18;:26::i;:::-;1030:12;;:16;1026:106;;1057:12;1075:6;-1:-1:-1;;;;;1075:19:21;1095:5;1075:26;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1056:45;;;1117:7;1109:16;;;;;;1048:84;1026:106;832:304;;250:888;;1618:334:17;1703:37;1722:17;1703:18;;;;;:37;;:::i;:::-;1688:127;;;;-1:-1:-1;;;1688:127:17;;2304:2:201;1688:127:17;;;2286:21:201;2343:2;2323:18;;;2316:30;2382:34;2362:18;;;2355:62;2453:29;2433:18;;;2426:57;2500:19;;1688:127:17;;;;;;;;-1:-1:-1;;;;;;;;;;;1911:31:17;1618:334::o;735:341:3:-;1025:20;1063:8;;;735:341::o;14:127:201:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:258;218:1;228:113;242:6;239:1;236:13;228:113;;;318:11;;;312:18;299:11;;;292:39;264:2;257:10;228:113;;;359:6;356:1;353:13;350:48;;;394:1;385:6;380:3;376:16;369:27;350:48;;146:258;;;:::o;409:1050::-;497:6;505;558:2;546:9;537:7;533:23;529:32;526:52;;;574:1;571;564:12;526:52;600:16;;-1:-1:-1;;;;;645:31:201;;635:42;;625:70;;691:1;688;681:12;625:70;763:2;748:18;;742:25;714:5;;-1:-1:-1;;;;;;816:14:201;;;813:34;;;843:1;840;833:12;813:34;881:6;870:9;866:22;856:32;;926:7;919:4;915:2;911:13;907:27;897:55;;948:1;945;938:12;897:55;977:2;971:9;999:2;995;992:10;989:36;;;1005:18;;:::i;:::-;1080:2;1074:9;1048:2;1134:13;;-1:-1:-1;;1130:22:201;;;1154:2;1126:31;1122:40;1110:53;;;1178:18;;;1198:22;;;1175:46;1172:72;;;1224:18;;:::i;:::-;1264:10;1260:2;1253:22;1299:2;1291:6;1284:18;1339:7;1334:2;1329;1325;1321:11;1317:20;1314:33;1311:53;;;1360:1;1357;1350:12;1311:53;1373:55;1425:2;1420;1412:6;1408:15;1403:2;1399;1395:11;1373:55;:::i;:::-;1447:6;1437:16;;;;;;;409:1050;;;;;:::o;1464:222::-;1504:4;1532:1;1529;1526:8;1523:131;;;1576:10;1571:3;1567:20;1564:1;1557:31;1611:4;1608:1;1601:15;1639:4;1636:1;1629:15;1523:131;-1:-1:-1;1671:9:201;;1464:222::o;1691:127::-;1752:10;1747:3;1743:20;1740:1;1733:31;1783:4;1780:1;1773:15;1807:4;1804:1;1797:15;1823:274;1952:3;1990:6;1984:13;2006:53;2052:6;2047:3;2040:4;2032:6;2028:17;2006:53;:::i;:::-;2075:16;;;;;1823:274;-1:-1:-1;;1823:274:201:o;2102:423::-;250:888:21;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_2893":{"entryPoint":null,"id":2893,"parameterSlots":0,"returnSlots":0},"@_delegate_2907":{"entryPoint":65,"id":2907,"parameterSlots":1,"returnSlots":0},"@_fallback_2925":{"entryPoint":12,"id":2925,"parameterSlots":0,"returnSlots":0},"@_implementation_2712":{"entryPoint":null,"id":2712,"parameterSlots":0,"returnSlots":1},"@_willFallback_2912":{"entryPoint":null,"id":2912,"parameterSlots":0,"returnSlots":0},"@isContract_445":{"entryPoint":59,"id":445,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600a600c565b005b603960357f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6041565b565b3b151590565b3660008037600080366000845af43d6000803e808015605f573d6000f35b3d6000fdfea26469706673582212207a555d7607d2bd7e30f4f62607ef51fce3fc4f77a551f195c9ee4f848a9b879664736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0xA PUSH1 0xC JUMP JUMPDEST STOP JUMPDEST PUSH1 0x39 PUSH1 0x35 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x41 JUMP JUMPDEST JUMP JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH1 0x5F JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH27 0x555D7607D2BD7E30F4F62607EF51FCE3FC4F77A551F195C9EE4F84 DUP11 SWAP12 DUP8 SWAP7 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"250:888:21:-:0;;;572:11:20;:9;:11::i;:::-;250:888:21;2155:90:20;2212:28;2222:17;823:66:17;1183:11;;1008:196;2222:17:20;2212:9;:28::i;:::-;2155:90::o;735:341:3:-;1025:20;1063:8;;;735:341::o;1005:802:20:-;1338:14;1335:1;1332;1319:34;1534:1;1531;1515:14;1512:1;1496:14;1489:5;1476:60;1598:16;1595:1;1592;1577:38;1630:6;1685:52;;;;1772:16;1769:1;1762:27;1685:52;1712:16;1709:1;1702:27"},"gasEstimates":{"creation":{"codeDepositCost":"30800","executionCost":"infinite","totalCost":"infinite"},"external":{"":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"details\":\"Extends BaseUpgradeabilityProxy with a constructor for initializing implementation and init data.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Contract constructor.\",\"params\":{\"_data\":\"Data to send as msg.data to the implementation to initialize the proxied contract. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\",\"_logic\":\"Address of the initial implementation.\"}}},\"title\":\"UpgradeabilityProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol\":\"UpgradeabilityProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './Proxy.sol';\\nimport '../contracts/Address.sol';\\n\\n/**\\n * @title BaseUpgradeabilityProxy\\n * @dev This contract implements a proxy that allows to change the\\n * implementation address to which it will delegate.\\n * Such a change is called an implementation upgrade.\\n */\\ncontract BaseUpgradeabilityProxy is Proxy {\\n  /**\\n   * @dev Emitted when the implementation is upgraded.\\n   * @param implementation Address of the new implementation.\\n   */\\n  event Upgraded(address indexed implementation);\\n\\n  /**\\n   * @dev Storage slot with the address of the current implementation.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant IMPLEMENTATION_SLOT =\\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n  /**\\n   * @dev Returns the current implementation.\\n   * @return impl Address of the current implementation\\n   */\\n  function _implementation() internal view override returns (address impl) {\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      impl := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Upgrades the proxy to a new implementation.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _upgradeTo(address newImplementation) internal {\\n    _setImplementation(newImplementation);\\n    emit Upgraded(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Sets the implementation address of the proxy.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _setImplementation(address newImplementation) internal {\\n    require(\\n      Address.isContract(newImplementation),\\n      'Cannot set a proxy implementation to a non-contract address'\\n    );\\n\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newImplementation)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe47eb278267d31f096fc643c2a322c72066abfa6ba07f6386c266fe7cbd15013\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\n    assembly {\\n      // Copy msg.data. We take full control of memory in this inline assembly\\n      // block because it will not return to Solidity code. We overwrite the\\n      // Solidity scratch pad at memory position 0.\\n      calldatacopy(0, 0, calldatasize())\\n\\n      // Call the implementation.\\n      // out and outsize are 0 because we don't know the size yet.\\n      let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n      // Copy the returned data.\\n      returndatacopy(0, 0, returndatasize())\\n\\n      switch result\\n      // delegatecall returns 0 on error.\\n      case 0 {\\n        revert(0, returndatasize())\\n      }\\n      default {\\n        return(0, returndatasize())\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title UpgradeabilityProxy\\n * @dev Extends BaseUpgradeabilityProxy with a constructor for initializing\\n * implementation and init data.\\n */\\ncontract UpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Contract constructor.\\n   * @param _logic Address of the initial implementation.\\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\\n   */\\n  constructor(address _logic, bytes memory _data) payable {\\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\\n    _setImplementation(_logic);\\n    if (_data.length > 0) {\\n      (bool success, ) = _logic.delegatecall(_data);\\n      require(success);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xa19d50b90ce153fb36d266c926e09db8dc8f110bdda1ae4b4cf2ecd02c26b81c\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/dependencies/weth/WETH9.sol":{"WETH9":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"guy","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"guy","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","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":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{"extract_byte_array_length":{"entryPoint":275,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:396:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"69:325:201","statements":[{"nodeType":"YulAssignment","src":"79:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"93:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"96:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"89:3:201"},"nodeType":"YulFunctionCall","src":"89:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"79:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"110:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"140:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"146:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"136:3:201"},"nodeType":"YulFunctionCall","src":"136:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"114:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"187:31:201","statements":[{"nodeType":"YulAssignment","src":"189:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"203:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"211:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"199:3:201"},"nodeType":"YulFunctionCall","src":"199:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"189:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"167:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"160:6:201"},"nodeType":"YulFunctionCall","src":"160:26:201"},"nodeType":"YulIf","src":"157:61:201"},{"body":{"nodeType":"YulBlock","src":"277:111:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"298:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"305:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"310:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"301:3:201"},"nodeType":"YulFunctionCall","src":"301:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"291:6:201"},"nodeType":"YulFunctionCall","src":"291:31:201"},"nodeType":"YulExpressionStatement","src":"291:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"342:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"345:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"335:6:201"},"nodeType":"YulFunctionCall","src":"335:15:201"},"nodeType":"YulExpressionStatement","src":"335:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"370:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"373:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"363:6:201"},"nodeType":"YulFunctionCall","src":"363:15:201"},"nodeType":"YulExpressionStatement","src":"363:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"233:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"256:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"264:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"253:2:201"},"nodeType":"YulFunctionCall","src":"253:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"230:2:201"},"nodeType":"YulFunctionCall","src":"230:38:201"},"nodeType":"YulIf","src":"227:161:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"49:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"58:6:201","type":""}],"src":"14:380:201"}]},"contents":"{\n    { }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6108eb8061015d6000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f6919061069a565b60405180910390f35b34801561010b57600080fd5b5061011f61011a366004610736565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610760565b6103bc565b34801561017857600080fd5b506100cd61018736600461079c565b6105d3565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d33660046107b5565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610679565b34801561020657600080fd5b5061011f610215366004610736565b610686565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d3660046107d0565b600460209081526000928352604080842090915290825290205481565b3360009081526003602052604081208054349290610279908490610832565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c29061084a565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee9061084a565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548211156103ee57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84163314801590610464575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156104ec5773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104a657600080fd5b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152812080548492906104e690849061089e565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061052190849061089e565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061055b908490610832565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105c191815260200190565b60405180910390a35060019392505050565b336000908152600360205260409020548111156105ef57600080fd5b336000908152600360205260408120805483929061060e90849061089e565b9091555050604051339082156108fc029083906000818181858888f19350505050158015610640573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c29061084a565b60006106933384846103bc565b9392505050565b600060208083528351808285015260005b818110156106c7578581018301518582016040015282016106ab565b818111156106d9576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461073157600080fd5b919050565b6000806040838503121561074957600080fd5b6107528361070d565b946020939093013593505050565b60008060006060848603121561077557600080fd5b61077e8461070d565b925061078c6020850161070d565b9150604084013590509250925092565b6000602082840312156107ae57600080fd5b5035919050565b6000602082840312156107c757600080fd5b6106938261070d565b600080604083850312156107e357600080fd5b6107ec8361070d565b91506107fa6020840161070d565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561084557610845610803565b500190565b600181811c9082168061085e57607f821691505b60208210811415610898577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156108b0576108b0610803565b50039056fea2646970667358221220c6c11c013ecfd49d47224893848b87d54a305f542abc80315e03a44847ac5c5364736f6c634300080a0033","opcodes":"PUSH1 0xC0 PUSH1 0x40 MSTORE PUSH1 0xD PUSH1 0x80 DUP2 SWAP1 MSTORE PUSH13 0x2BB930B83832B21022BA3432B9 PUSH1 0x99 SHL PUSH1 0xA0 SWAP1 DUP2 MSTORE PUSH2 0x2E SWAP2 PUSH1 0x0 SWAP2 SWAP1 PUSH2 0x7A JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP1 DUP3 MSTORE PUSH4 0xAE8AA89 PUSH1 0xE3 SHL PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 DUP3 MSTORE PUSH2 0x5A SWAP2 PUSH1 0x1 SWAP2 PUSH2 0x7A JUMP JUMPDEST POP PUSH1 0x2 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14E JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x86 SWAP1 PUSH2 0x113 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0xA8 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0xEE JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0xC1 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0xEE JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0xEE JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0xEE JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0xD3 JUMP JUMPDEST POP PUSH2 0xFA SWAP3 SWAP2 POP PUSH2 0xFE JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xFA JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xFF JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x127 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x148 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x8EB DUP1 PUSH2 0x15D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC0 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x313CE567 GT PUSH2 0x74 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1FA JUMPI DUP1 PUSH4 0xD0E30DB0 EQ PUSH2 0x21A JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x222 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 EQ PUSH2 0x18C JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1B8 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0xA5 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x12F JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x14C JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x16C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0xCF JUMPI PUSH2 0xCD PUSH2 0x25A JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE9 PUSH2 0x2B5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF6 SWAP2 SWAP1 PUSH2 0x69A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11F PUSH2 0x11A CALLDATASIZE PUSH1 0x4 PUSH2 0x736 JUMP JUMPDEST PUSH2 0x343 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SELFBALANCE JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x158 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11F PUSH2 0x167 CALLDATASIZE PUSH1 0x4 PUSH2 0x760 JUMP JUMPDEST PUSH2 0x3BC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x178 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCD PUSH2 0x187 CALLDATASIZE PUSH1 0x4 PUSH2 0x79C JUMP JUMPDEST PUSH2 0x5D3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x1A6 SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13E PUSH2 0x1D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x7B5 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE9 PUSH2 0x679 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x206 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11F PUSH2 0x215 CALLDATASIZE PUSH1 0x4 PUSH2 0x736 JUMP JUMPDEST PUSH2 0x686 JUMP JUMPDEST PUSH2 0xCD PUSH2 0x25A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13E PUSH2 0x23D CALLDATASIZE PUSH1 0x4 PUSH2 0x7D0 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD CALLVALUE SWAP3 SWAP1 PUSH2 0x279 SWAP1 DUP5 SWAP1 PUSH2 0x832 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD CALLVALUE DUP2 MSTORE CALLER SWAP1 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x2C2 SWAP1 PUSH2 0x84A JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x2EE SWAP1 PUSH2 0x84A JUMP JUMPDEST DUP1 ISZERO PUSH2 0x33B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x310 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x33B 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 0x31E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE MLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x3AB SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x3EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND CALLER EQ DUP1 ISZERO SWAP1 PUSH2 0x464 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EQ ISZERO JUMPDEST ISZERO PUSH2 0x4EC JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x4A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x4E6 SWAP1 DUP5 SWAP1 PUSH2 0x89E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x521 SWAP1 DUP5 SWAP1 PUSH2 0x89E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x55B SWAP1 DUP5 SWAP1 PUSH2 0x832 JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD PUSH2 0x5C1 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x5EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x60E SWAP1 DUP5 SWAP1 PUSH2 0x89E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD CALLER SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x640 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE CALLER SWAP1 PUSH32 0x7FCF532C15F0A6DB0BD6D0E038BEA71D30D808C7D98CB3BF7268A95BF5081B65 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH2 0x2C2 SWAP1 PUSH2 0x84A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x693 CALLER DUP5 DUP5 PUSH2 0x3BC JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x6C7 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x6AB JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x6D9 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x731 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x749 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x752 DUP4 PUSH2 0x70D JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x775 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x77E DUP5 PUSH2 0x70D JUMP JUMPDEST SWAP3 POP PUSH2 0x78C PUSH1 0x20 DUP6 ADD PUSH2 0x70D JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x7AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x693 DUP3 PUSH2 0x70D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x7E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7EC DUP4 PUSH2 0x70D JUMP JUMPDEST SWAP2 POP PUSH2 0x7FA PUSH1 0x20 DUP5 ADD PUSH2 0x70D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x845 JUMPI PUSH2 0x845 PUSH2 0x803 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x85E JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x898 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x8B0 JUMPI PUSH2 0x8B0 PUSH2 0x803 JUMP JUMPDEST POP SUB SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC6 0xC1 SHR ADD RETURNDATACOPY 0xCF 0xD4 SWAP14 SELFBALANCE 0x22 BASEFEE SWAP4 DUP5 DUP12 DUP8 0xD5 0x4A ADDRESS 0x5F SLOAD 0x2A 0xBC DUP1 BALANCE 0x5E SUB LOG4 BASEFEE SELFBALANCE 0xAC 0x5C MSTORE8 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"731:36:22:-:0;712:1668;731:36;;712:1668;731:36;;;-1:-1:-1;;;731:36:22;;;;;;-1:-1:-1;;731:36:22;;:::i;:::-;-1:-1:-1;771:29:22;;;;;;;;;;;;;-1:-1:-1;;;771:29:22;;;;;;;;;;;;:::i;:::-;-1:-1:-1;804:26:22;;;-1:-1:-1;;804:26:22;828:2;804:26;;;712:1668;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;712:1668:22;;;-1:-1:-1;712:1668:22;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:380:201;93:1;89:12;;;;136;;;157:61;;211:4;203:6;199:17;189:27;;157:61;264:2;256:6;253:14;233:18;230:38;227:161;;;310:10;305:3;301:20;298:1;291:31;345:4;342:1;335:15;373:4;370:1;363:15;227:161;;14:380;;;:::o;:::-;712:1668:22;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_3035":{"entryPoint":null,"id":3035,"parameterSlots":0,"returnSlots":0},"@allowance_3028":{"entryPoint":null,"id":3028,"parameterSlots":0,"returnSlots":0},"@approve_3131":{"entryPoint":835,"id":3131,"parameterSlots":2,"returnSlots":1},"@balanceOf_3022":{"entryPoint":null,"id":3022,"parameterSlots":0,"returnSlots":0},"@decimals_2990":{"entryPoint":null,"id":2990,"parameterSlots":0,"returnSlots":0},"@deposit_3054":{"entryPoint":602,"id":3054,"parameterSlots":0,"returnSlots":0},"@name_2984":{"entryPoint":693,"id":2984,"parameterSlots":0,"returnSlots":0},"@symbol_2987":{"entryPoint":1657,"id":2987,"parameterSlots":0,"returnSlots":0},"@totalSupply_3103":{"entryPoint":null,"id":3103,"parameterSlots":0,"returnSlots":1},"@transferFrom_3227":{"entryPoint":956,"id":3227,"parameterSlots":3,"returnSlots":1},"@transfer_3148":{"entryPoint":1670,"id":3148,"parameterSlots":2,"returnSlots":1},"@withdraw_3091":{"entryPoint":1491,"id":3091,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":1805,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":1973,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":2000,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":1888,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":1846,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256":{"entryPoint":1948,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1690,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":2098,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":2206,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":2122,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":2051,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3563:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"135:535:201","statements":[{"nodeType":"YulVariableDeclaration","src":"145:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"155:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"149:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"173:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"184:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"166:6:201"},"nodeType":"YulFunctionCall","src":"166:21:201"},"nodeType":"YulExpressionStatement","src":"166:21:201"},{"nodeType":"YulVariableDeclaration","src":"196:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"216:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:201"},"nodeType":"YulFunctionCall","src":"210:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"200:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"243:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"254:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"239:3:201"},"nodeType":"YulFunctionCall","src":"239:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"259:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"232:6:201"},"nodeType":"YulFunctionCall","src":"232:34:201"},"nodeType":"YulExpressionStatement","src":"232:34:201"},{"nodeType":"YulVariableDeclaration","src":"275:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"284:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"279:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"344:90:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"373:9:201"},{"name":"i","nodeType":"YulIdentifier","src":"384:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"369:3:201"},"nodeType":"YulFunctionCall","src":"369:17:201"},{"kind":"number","nodeType":"YulLiteral","src":"388:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"365:3:201"},"nodeType":"YulFunctionCall","src":"365:26:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"407:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"415:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"403:3:201"},"nodeType":"YulFunctionCall","src":"403:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"419:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"399:3:201"},"nodeType":"YulFunctionCall","src":"399:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"393:5:201"},"nodeType":"YulFunctionCall","src":"393:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"358:6:201"},"nodeType":"YulFunctionCall","src":"358:66:201"},"nodeType":"YulExpressionStatement","src":"358:66:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"305:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"308:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"302:2:201"},"nodeType":"YulFunctionCall","src":"302:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"316:19:201","statements":[{"nodeType":"YulAssignment","src":"318:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"327:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"330:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"323:3:201"},"nodeType":"YulFunctionCall","src":"323:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"318:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"298:3:201","statements":[]},"src":"294:140:201"},{"body":{"nodeType":"YulBlock","src":"468:66:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"497:9:201"},{"name":"length","nodeType":"YulIdentifier","src":"508:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"493:3:201"},"nodeType":"YulFunctionCall","src":"493:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"517:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"489:3:201"},"nodeType":"YulFunctionCall","src":"489:31:201"},{"kind":"number","nodeType":"YulLiteral","src":"522:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"482:6:201"},"nodeType":"YulFunctionCall","src":"482:42:201"},"nodeType":"YulExpressionStatement","src":"482:42:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"449:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"452:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"446:2:201"},"nodeType":"YulFunctionCall","src":"446:13:201"},"nodeType":"YulIf","src":"443:91:201"},{"nodeType":"YulAssignment","src":"543:121:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"559:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"578:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"586:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"574:3:201"},"nodeType":"YulFunctionCall","src":"574:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"591:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"570:3:201"},"nodeType":"YulFunctionCall","src":"570:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"555:3:201"},"nodeType":"YulFunctionCall","src":"555:104:201"},{"kind":"number","nodeType":"YulLiteral","src":"661:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"551:3:201"},"nodeType":"YulFunctionCall","src":"551:113:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"543:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"104:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"115:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"126:4:201","type":""}],"src":"14:656:201"},{"body":{"nodeType":"YulBlock","src":"724:147:201","statements":[{"nodeType":"YulAssignment","src":"734:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"756:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"743:12:201"},"nodeType":"YulFunctionCall","src":"743:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"734:5:201"}]},{"body":{"nodeType":"YulBlock","src":"849:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"858:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"861:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"851:6:201"},"nodeType":"YulFunctionCall","src":"851:12:201"},"nodeType":"YulExpressionStatement","src":"851:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"785:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"796:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"803:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"792:3:201"},"nodeType":"YulFunctionCall","src":"792:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"782:2:201"},"nodeType":"YulFunctionCall","src":"782:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"775:6:201"},"nodeType":"YulFunctionCall","src":"775:73:201"},"nodeType":"YulIf","src":"772:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"703:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"714:5:201","type":""}],"src":"675:196:201"},{"body":{"nodeType":"YulBlock","src":"963:167:201","statements":[{"body":{"nodeType":"YulBlock","src":"1009:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1018:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1021:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1011:6:201"},"nodeType":"YulFunctionCall","src":"1011:12:201"},"nodeType":"YulExpressionStatement","src":"1011:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"984:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"993:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"980:3:201"},"nodeType":"YulFunctionCall","src":"980:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1005:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"976:3:201"},"nodeType":"YulFunctionCall","src":"976:32:201"},"nodeType":"YulIf","src":"973:52:201"},{"nodeType":"YulAssignment","src":"1034:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1063:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1044:18:201"},"nodeType":"YulFunctionCall","src":"1044:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1034:6:201"}]},{"nodeType":"YulAssignment","src":"1082:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1109:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1120:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1105:3:201"},"nodeType":"YulFunctionCall","src":"1105:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1092:12:201"},"nodeType":"YulFunctionCall","src":"1092:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1082:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"921:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"932:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"944:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"952:6:201","type":""}],"src":"876:254:201"},{"body":{"nodeType":"YulBlock","src":"1230:92:201","statements":[{"nodeType":"YulAssignment","src":"1240:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1252:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1263:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1248:3:201"},"nodeType":"YulFunctionCall","src":"1248:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1240:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1282:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1307:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1300:6:201"},"nodeType":"YulFunctionCall","src":"1300:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1293:6:201"},"nodeType":"YulFunctionCall","src":"1293:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1275:6:201"},"nodeType":"YulFunctionCall","src":"1275:41:201"},"nodeType":"YulExpressionStatement","src":"1275:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1199:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1210:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1221:4:201","type":""}],"src":"1135:187:201"},{"body":{"nodeType":"YulBlock","src":"1428:76:201","statements":[{"nodeType":"YulAssignment","src":"1438:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1450:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1461:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1446:3:201"},"nodeType":"YulFunctionCall","src":"1446:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1438:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1480:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"1491:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1473:6:201"},"nodeType":"YulFunctionCall","src":"1473:25:201"},"nodeType":"YulExpressionStatement","src":"1473:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1397:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1408:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1419:4:201","type":""}],"src":"1327:177:201"},{"body":{"nodeType":"YulBlock","src":"1613:224:201","statements":[{"body":{"nodeType":"YulBlock","src":"1659:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1668:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1671:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1661:6:201"},"nodeType":"YulFunctionCall","src":"1661:12:201"},"nodeType":"YulExpressionStatement","src":"1661:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1634:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1643:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1630:3:201"},"nodeType":"YulFunctionCall","src":"1630:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1655:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1626:3:201"},"nodeType":"YulFunctionCall","src":"1626:32:201"},"nodeType":"YulIf","src":"1623:52:201"},{"nodeType":"YulAssignment","src":"1684:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1713:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1694:18:201"},"nodeType":"YulFunctionCall","src":"1694:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1684:6:201"}]},{"nodeType":"YulAssignment","src":"1732:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1765:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1776:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1761:3:201"},"nodeType":"YulFunctionCall","src":"1761:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1742:18:201"},"nodeType":"YulFunctionCall","src":"1742:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1732:6:201"}]},{"nodeType":"YulAssignment","src":"1789:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1816:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1827:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1812:3:201"},"nodeType":"YulFunctionCall","src":"1812:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1799:12:201"},"nodeType":"YulFunctionCall","src":"1799:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1789:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1563:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1574:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1586:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1594:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1602:6:201","type":""}],"src":"1509:328:201"},{"body":{"nodeType":"YulBlock","src":"1912:110:201","statements":[{"body":{"nodeType":"YulBlock","src":"1958:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1967:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1970:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1960:6:201"},"nodeType":"YulFunctionCall","src":"1960:12:201"},"nodeType":"YulExpressionStatement","src":"1960:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1933:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1942:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1929:3:201"},"nodeType":"YulFunctionCall","src":"1929:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1954:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1925:3:201"},"nodeType":"YulFunctionCall","src":"1925:32:201"},"nodeType":"YulIf","src":"1922:52:201"},{"nodeType":"YulAssignment","src":"1983:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2006:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1993:12:201"},"nodeType":"YulFunctionCall","src":"1993:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1983:6:201"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1878:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1889:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1901:6:201","type":""}],"src":"1842:180:201"},{"body":{"nodeType":"YulBlock","src":"2124:87:201","statements":[{"nodeType":"YulAssignment","src":"2134:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2146:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2157:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2142:3:201"},"nodeType":"YulFunctionCall","src":"2142:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2134:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2176:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2191:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2199:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2187:3:201"},"nodeType":"YulFunctionCall","src":"2187:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2169:6:201"},"nodeType":"YulFunctionCall","src":"2169:36:201"},"nodeType":"YulExpressionStatement","src":"2169:36:201"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2093:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2104:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2115:4:201","type":""}],"src":"2027:184:201"},{"body":{"nodeType":"YulBlock","src":"2286:116:201","statements":[{"body":{"nodeType":"YulBlock","src":"2332:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2341:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2344:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2334:6:201"},"nodeType":"YulFunctionCall","src":"2334:12:201"},"nodeType":"YulExpressionStatement","src":"2334:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2307:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2316:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2303:3:201"},"nodeType":"YulFunctionCall","src":"2303:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2328:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2299:3:201"},"nodeType":"YulFunctionCall","src":"2299:32:201"},"nodeType":"YulIf","src":"2296:52:201"},{"nodeType":"YulAssignment","src":"2357:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2386:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2367:18:201"},"nodeType":"YulFunctionCall","src":"2367:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2357:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2252:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2263:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2275:6:201","type":""}],"src":"2216:186:201"},{"body":{"nodeType":"YulBlock","src":"2494:173:201","statements":[{"body":{"nodeType":"YulBlock","src":"2540:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2549:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2552:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2542:6:201"},"nodeType":"YulFunctionCall","src":"2542:12:201"},"nodeType":"YulExpressionStatement","src":"2542:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2515:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2524:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2511:3:201"},"nodeType":"YulFunctionCall","src":"2511:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2536:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2507:3:201"},"nodeType":"YulFunctionCall","src":"2507:32:201"},"nodeType":"YulIf","src":"2504:52:201"},{"nodeType":"YulAssignment","src":"2565:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2594:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2575:18:201"},"nodeType":"YulFunctionCall","src":"2575:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2565:6:201"}]},{"nodeType":"YulAssignment","src":"2613:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2646:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2657:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2642:3:201"},"nodeType":"YulFunctionCall","src":"2642:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2623:18:201"},"nodeType":"YulFunctionCall","src":"2623:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2613:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2452:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2463:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2475:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2483:6:201","type":""}],"src":"2407:260:201"},{"body":{"nodeType":"YulBlock","src":"2704:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2721:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2724:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2714:6:201"},"nodeType":"YulFunctionCall","src":"2714:88:201"},"nodeType":"YulExpressionStatement","src":"2714:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2818:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2821:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2811:6:201"},"nodeType":"YulFunctionCall","src":"2811:15:201"},"nodeType":"YulExpressionStatement","src":"2811:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2842:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2845:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2835:6:201"},"nodeType":"YulFunctionCall","src":"2835:15:201"},"nodeType":"YulExpressionStatement","src":"2835:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"2672:184:201"},{"body":{"nodeType":"YulBlock","src":"2909:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"2936:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"2938:16:201"},"nodeType":"YulFunctionCall","src":"2938:18:201"},"nodeType":"YulExpressionStatement","src":"2938:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2925:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"2932:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2928:3:201"},"nodeType":"YulFunctionCall","src":"2928:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2922:2:201"},"nodeType":"YulFunctionCall","src":"2922:13:201"},"nodeType":"YulIf","src":"2919:39:201"},{"nodeType":"YulAssignment","src":"2967:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2978:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"2981:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2974:3:201"},"nodeType":"YulFunctionCall","src":"2974:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"2967:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"2892:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"2895:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"2901:3:201","type":""}],"src":"2861:128:201"},{"body":{"nodeType":"YulBlock","src":"3049:382:201","statements":[{"nodeType":"YulAssignment","src":"3059:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3073:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"3076:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"3069:3:201"},"nodeType":"YulFunctionCall","src":"3069:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3059:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3090:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"3120:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"3126:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3116:3:201"},"nodeType":"YulFunctionCall","src":"3116:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"3094:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3167:31:201","statements":[{"nodeType":"YulAssignment","src":"3169:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3183:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3191:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3179:3:201"},"nodeType":"YulFunctionCall","src":"3179:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3169:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3147:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3140:6:201"},"nodeType":"YulFunctionCall","src":"3140:26:201"},"nodeType":"YulIf","src":"3137:61:201"},{"body":{"nodeType":"YulBlock","src":"3257:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3278:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3281:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3271:6:201"},"nodeType":"YulFunctionCall","src":"3271:88:201"},"nodeType":"YulExpressionStatement","src":"3271:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3379:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3382:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3372:6:201"},"nodeType":"YulFunctionCall","src":"3372:15:201"},"nodeType":"YulExpressionStatement","src":"3372:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3407:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3410:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3400:6:201"},"nodeType":"YulFunctionCall","src":"3400:15:201"},"nodeType":"YulExpressionStatement","src":"3400:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3213:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3236:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3244:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3233:2:201"},"nodeType":"YulFunctionCall","src":"3233:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3210:2:201"},"nodeType":"YulFunctionCall","src":"3210:38:201"},"nodeType":"YulIf","src":"3207:218:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"3029:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"3038:6:201","type":""}],"src":"2994:437:201"},{"body":{"nodeType":"YulBlock","src":"3485:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"3507:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3509:16:201"},"nodeType":"YulFunctionCall","src":"3509:18:201"},"nodeType":"YulExpressionStatement","src":"3509:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3501:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"3504:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3498:2:201"},"nodeType":"YulFunctionCall","src":"3498:8:201"},"nodeType":"YulIf","src":"3495:34:201"},{"nodeType":"YulAssignment","src":"3538:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3550:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"3553:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3546:3:201"},"nodeType":"YulFunctionCall","src":"3546:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"3538:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3467:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"3470:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"3476:4:201","type":""}],"src":"3436:125:201"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f6919061069a565b60405180910390f35b34801561010b57600080fd5b5061011f61011a366004610736565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610760565b6103bc565b34801561017857600080fd5b506100cd61018736600461079c565b6105d3565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d33660046107b5565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e9610679565b34801561020657600080fd5b5061011f610215366004610736565b610686565b6100cd61025a565b34801561022e57600080fd5b5061013e61023d3660046107d0565b600460209081526000928352604080842090915290825290205481565b3360009081526003602052604081208054349290610279908490610832565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c29061084a565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee9061084a565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548211156103ee57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84163314801590610464575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156104ec5773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104a657600080fd5b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152812080548492906104e690849061089e565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061052190849061089e565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061055b908490610832565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105c191815260200190565b60405180910390a35060019392505050565b336000908152600360205260409020548111156105ef57600080fd5b336000908152600360205260408120805483929061060e90849061089e565b9091555050604051339082156108fc029083906000818181858888f19350505050158015610640573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c29061084a565b60006106933384846103bc565b9392505050565b600060208083528351808285015260005b818110156106c7578581018301518582016040015282016106ab565b818111156106d9576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461073157600080fd5b919050565b6000806040838503121561074957600080fd5b6107528361070d565b946020939093013593505050565b60008060006060848603121561077557600080fd5b61077e8461070d565b925061078c6020850161070d565b9150604084013590509250925092565b6000602082840312156107ae57600080fd5b5035919050565b6000602082840312156107c757600080fd5b6106938261070d565b600080604083850312156107e357600080fd5b6107ec8361070d565b91506107fa6020840161070d565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561084557610845610803565b500190565b600181811c9082168061085e57607f821691505b60208210811415610898577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156108b0576108b0610803565b50039056fea2646970667358221220c6c11c013ecfd49d47224893848b87d54a305f542abc80315e03a44847ac5c5364736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC0 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x313CE567 GT PUSH2 0x74 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1FA JUMPI DUP1 PUSH4 0xD0E30DB0 EQ PUSH2 0x21A JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x222 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 EQ PUSH2 0x18C JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1B8 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0xA5 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x12F JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x14C JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x16C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0xCF JUMPI PUSH2 0xCD PUSH2 0x25A JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE9 PUSH2 0x2B5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF6 SWAP2 SWAP1 PUSH2 0x69A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11F PUSH2 0x11A CALLDATASIZE PUSH1 0x4 PUSH2 0x736 JUMP JUMPDEST PUSH2 0x343 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SELFBALANCE JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x158 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11F PUSH2 0x167 CALLDATASIZE PUSH1 0x4 PUSH2 0x760 JUMP JUMPDEST PUSH2 0x3BC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x178 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCD PUSH2 0x187 CALLDATASIZE PUSH1 0x4 PUSH2 0x79C JUMP JUMPDEST PUSH2 0x5D3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x1A6 SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13E PUSH2 0x1D3 CALLDATASIZE PUSH1 0x4 PUSH2 0x7B5 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE9 PUSH2 0x679 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x206 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11F PUSH2 0x215 CALLDATASIZE PUSH1 0x4 PUSH2 0x736 JUMP JUMPDEST PUSH2 0x686 JUMP JUMPDEST PUSH2 0xCD PUSH2 0x25A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13E PUSH2 0x23D CALLDATASIZE PUSH1 0x4 PUSH2 0x7D0 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD CALLVALUE SWAP3 SWAP1 PUSH2 0x279 SWAP1 DUP5 SWAP1 PUSH2 0x832 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD CALLVALUE DUP2 MSTORE CALLER SWAP1 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x2C2 SWAP1 PUSH2 0x84A JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x2EE SWAP1 PUSH2 0x84A JUMP JUMPDEST DUP1 ISZERO PUSH2 0x33B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x310 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x33B 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 0x31E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE MLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x3AB SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x3EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND CALLER EQ DUP1 ISZERO SWAP1 PUSH2 0x464 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EQ ISZERO JUMPDEST ISZERO PUSH2 0x4EC JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x4A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x4E6 SWAP1 DUP5 SWAP1 PUSH2 0x89E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x521 SWAP1 DUP5 SWAP1 PUSH2 0x89E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x55B SWAP1 DUP5 SWAP1 PUSH2 0x832 JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD PUSH2 0x5C1 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x5EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x60E SWAP1 DUP5 SWAP1 PUSH2 0x89E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD CALLER SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x640 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE CALLER SWAP1 PUSH32 0x7FCF532C15F0A6DB0BD6D0E038BEA71D30D808C7D98CB3BF7268A95BF5081B65 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH2 0x2C2 SWAP1 PUSH2 0x84A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x693 CALLER DUP5 DUP5 PUSH2 0x3BC JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x6C7 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x6AB JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x6D9 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x731 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x749 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x752 DUP4 PUSH2 0x70D JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x775 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x77E DUP5 PUSH2 0x70D JUMP JUMPDEST SWAP3 POP PUSH2 0x78C PUSH1 0x20 DUP6 ADD PUSH2 0x70D JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x7AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x7C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x693 DUP3 PUSH2 0x70D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x7E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7EC DUP4 PUSH2 0x70D JUMP JUMPDEST SWAP2 POP PUSH2 0x7FA PUSH1 0x20 DUP5 ADD PUSH2 0x70D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x845 JUMPI PUSH2 0x845 PUSH2 0x803 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x85E JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x898 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x8B0 JUMPI PUSH2 0x8B0 PUSH2 0x803 JUMP JUMPDEST POP SUB SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC6 0xC1 SHR ADD RETURNDATACOPY 0xCF 0xD4 SWAP14 SELFBALANCE 0x22 BASEFEE SWAP4 DUP5 DUP12 DUP8 0xD5 0x4A ADDRESS 0x5F SLOAD 0x2A 0xBC DUP1 BALANCE 0x5E SUB LOG4 BASEFEE SELFBALANCE 0xAC 0x5C MSTORE8 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"712:1668:22:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1237:9;:7;:9::i;:::-;712:1668;;;;;731:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1676:166;;;;;;;;;;-1:-1:-1;1676:166:22;;;;;:::i;:::-;;:::i;:::-;;;1300:14:201;;1293:22;1275:41;;1263:2;1248:18;1676:166:22;1135:187:201;1580:92:22;;;;;;;;;;-1:-1:-1;1646:21:22;1580:92;;;1473:25:201;;;1461:2;1446:18;1580:92:22;1327:177:201;1968:410:22;;;;;;;;;;-1:-1:-1;1968:410:22;;;;;:::i;:::-;;:::i;1379:197::-;;;;;;;;;;-1:-1:-1;1379:197:22;;;;;:::i;:::-;;:::i;804:26::-;;;;;;;;;;-1:-1:-1;804:26:22;;;;;;;;;;;2199:4:201;2187:17;;;2169:36;;2157:2;2142:18;804:26:22;2027:184:201;1087:44:22;;;;;;;;;;-1:-1:-1;1087:44:22;;;;;:::i;:::-;;;;;;;;;;;;;;771:29;;;;;;;;;;;;;:::i;1846:118::-;;;;;;;;;;-1:-1:-1;1846:118:22;;;;;:::i;:::-;;:::i;1255:120::-;;;:::i;1135:64::-;;;;;;;;;;-1:-1:-1;1135:64:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1255:120;1305:10;1295:21;;;;:9;:21;;;;;:34;;1320:9;;1295:21;:34;;1320:9;;1295:34;:::i;:::-;;;;-1:-1:-1;;1340:30:22;;1360:9;1473:25:201;;1348:10:22;;1340:30;;1461:2:201;1446:18;1340:30:22;;;;;;;1255:120::o;731:36::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1676:166::-;1757:10;1735:4;1747:21;;;:9;:21;;;;;;;;;:26;;;;;;;;;;:32;;;1790:30;1735:4;;1747:26;;1790:30;;;;1776:3;1473:25:201;;1461:2;1446:18;;1327:177;1790:30:22;;;;;;;;-1:-1:-1;1833:4:22;1676:166;;;;:::o;1968:410::-;2065:14;;;2045:4;2065:14;;;:9;:14;;;;;;:21;-1:-1:-1;2065:21:22;2057:30;;;;;;2098:17;;;2105:10;2098:17;;;;:68;;-1:-1:-1;2119:14:22;;;;;;;:9;:14;;;;;;;;2134:10;2119:26;;;;;;;;2149:17;2119:47;;2098:68;2094:172;;;2184:14;;;;;;;:9;:14;;;;;;;;2199:10;2184:26;;;;;;;;:33;-1:-1:-1;2184:33:22;2176:42;;;;;;2226:14;;;;;;;:9;:14;;;;;;;;2241:10;2226:26;;;;;;;:33;;2256:3;;2226:14;:33;;2256:3;;2226:33;:::i;:::-;;;;-1:-1:-1;;2094:172:22;2272:14;;;;;;;:9;:14;;;;;:21;;2290:3;;2272:14;:21;;2290:3;;2272:21;:::i;:::-;;;;-1:-1:-1;;2299:14:22;;;;;;;:9;:14;;;;;:21;;2317:3;;2299:14;:21;;2317:3;;2299:21;:::i;:::-;;;;;;;;2346:3;2332:23;;2341:3;2332:23;;;2351:3;2332:23;;;;1473:25:201;;1461:2;1446:18;;1327:177;2332:23:22;;;;;;;;-1:-1:-1;2369:4:22;1968:410;;;;;:::o;1379:197::-;1441:10;1431:21;;;;:9;:21;;;;;;:28;-1:-1:-1;1431:28:22;1423:37;;;;;;1476:10;1466:21;;;;:9;:21;;;;;:28;;1491:3;;1466:21;:28;;1491:3;;1466:28;:::i;:::-;;;;-1:-1:-1;;1500:33:22;;1508:10;;1500:33;;;;;1529:3;;1500:33;;;;1529:3;1508:10;1500:33;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1544:27:22;;1473:25:201;;;1555:10:22;;1544:27;;1461:2:201;1446:18;1544:27:22;;;;;;;1379:197;:::o;771:29::-;;;;;;;:::i;1846:118::-;1906:4;1925:34;1938:10;1950:3;1955;1925:12;:34::i;:::-;1918:41;1846:118;-1:-1:-1;;;1846:118:22:o;14:656:201:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;586:2:201;574:15;591:66;570:88;555:104;;;;661:2;551:113;;14:656;-1:-1:-1;;;14:656:201:o;675:196::-;743:20;;803:42;792:54;;782:65;;772:93;;861:1;858;851:12;772:93;675:196;;;:::o;876:254::-;944:6;952;1005:2;993:9;984:7;980:23;976:32;973:52;;;1021:1;1018;1011:12;973:52;1044:29;1063:9;1044:29;:::i;:::-;1034:39;1120:2;1105:18;;;;1092:32;;-1:-1:-1;;;876:254:201:o;1509:328::-;1586:6;1594;1602;1655:2;1643:9;1634:7;1630:23;1626:32;1623:52;;;1671:1;1668;1661:12;1623:52;1694:29;1713:9;1694:29;:::i;:::-;1684:39;;1742:38;1776:2;1765:9;1761:18;1742:38;:::i;:::-;1732:48;;1827:2;1816:9;1812:18;1799:32;1789:42;;1509:328;;;;;:::o;1842:180::-;1901:6;1954:2;1942:9;1933:7;1929:23;1925:32;1922:52;;;1970:1;1967;1960:12;1922:52;-1:-1:-1;1993:23:201;;1842:180;-1:-1:-1;1842:180:201:o;2216:186::-;2275:6;2328:2;2316:9;2307:7;2303:23;2299:32;2296:52;;;2344:1;2341;2334:12;2296:52;2367:29;2386:9;2367:29;:::i;2407:260::-;2475:6;2483;2536:2;2524:9;2515:7;2511:23;2507:32;2504:52;;;2552:1;2549;2542:12;2504:52;2575:29;2594:9;2575:29;:::i;:::-;2565:39;;2623:38;2657:2;2646:9;2642:18;2623:38;:::i;:::-;2613:48;;2407:260;;;;;:::o;2672:184::-;2724:77;2721:1;2714:88;2821:4;2818:1;2811:15;2845:4;2842:1;2835:15;2861:128;2901:3;2932:1;2928:6;2925:1;2922:13;2919:39;;;2938:18;;:::i;:::-;-1:-1:-1;2974:9:201;;2861:128::o;2994:437::-;3073:1;3069:12;;;;3116;;;3137:61;;3191:4;3183:6;3179:17;3169:27;;3137:61;3244:2;3236:6;3233:14;3213:18;3210:38;3207:218;;;3281:77;3278:1;3271:88;3382:4;3379:1;3372:15;3410:4;3407:1;3400:15;3207:218;;2994:437;;;:::o;3436:125::-;3476:4;3504:1;3501;3498:8;3495:34;;;3509:18;;:::i;:::-;-1:-1:-1;3546:9:201;;3436:125::o"},"gasEstimates":{"creation":{"codeDepositCost":"456600","executionCost":"infinite","totalCost":"infinite"},"external":{"allowance(address,address)":"infinite","approve(address,uint256)":"24521","balanceOf(address)":"2552","decimals()":"2336","deposit()":"25965","name()":"infinite","symbol()":"infinite","totalSupply()":"206","transfer(address,uint256)":"53297","transferFrom(address,address,uint256)":"infinite","withdraw(uint256)":"infinite"}},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","deposit()":"d0e30db0","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","withdraw(uint256)":"2e1a7d4d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"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\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/dependencies/weth/WETH9.sol\":\"WETH9\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/weth/WETH9.sol\":{\"content\":\"// Copyright (C) 2015, 2016, 2017 Dapphub\\n\\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 <http://www.gnu.org/licenses/>.\\n\\npragma solidity ^0.8.10;\\n\\ncontract WETH9 {\\n  string public name = 'Wrapped Ether';\\n  string public symbol = 'WETH';\\n  uint8 public decimals = 18;\\n\\n  event Approval(address indexed src, address indexed guy, uint256 wad);\\n  event Transfer(address indexed src, address indexed dst, uint256 wad);\\n  event Deposit(address indexed dst, uint256 wad);\\n  event Withdrawal(address indexed src, uint256 wad);\\n\\n  mapping(address => uint256) public balanceOf;\\n  mapping(address => mapping(address => uint256)) public allowance;\\n\\n  receive() external payable {\\n    deposit();\\n  }\\n\\n  function deposit() public payable {\\n    balanceOf[msg.sender] += msg.value;\\n    emit Deposit(msg.sender, msg.value);\\n  }\\n\\n  function withdraw(uint256 wad) public {\\n    require(balanceOf[msg.sender] >= wad);\\n    balanceOf[msg.sender] -= wad;\\n    payable(msg.sender).transfer(wad);\\n    emit Withdrawal(msg.sender, wad);\\n  }\\n\\n  function totalSupply() public view returns (uint256) {\\n    return address(this).balance;\\n  }\\n\\n  function approve(address guy, uint256 wad) public returns (bool) {\\n    allowance[msg.sender][guy] = wad;\\n    emit Approval(msg.sender, guy, wad);\\n    return true;\\n  }\\n\\n  function transfer(address dst, uint256 wad) public returns (bool) {\\n    return transferFrom(msg.sender, dst, wad);\\n  }\\n\\n  function transferFrom(address src, address dst, uint256 wad) public returns (bool) {\\n    require(balanceOf[src] >= wad);\\n\\n    if (src != msg.sender && allowance[src][msg.sender] != type(uint256).max) {\\n      require(allowance[src][msg.sender] >= wad);\\n      allowance[src][msg.sender] -= wad;\\n    }\\n\\n    balanceOf[src] -= wad;\\n    balanceOf[dst] += wad;\\n\\n    emit Transfer(src, dst, wad);\\n\\n    return true;\\n  }\\n}\\n\\n/*\\n                    GNU GENERAL PUBLIC LICENSE\\n                       Version 3, 29 June 2007\\n\\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\\n Everyone is permitted to copy and distribute verbatim copies\\n of this license document, but changing it is not allowed.\\n\\n                            Preamble\\n\\n  The GNU General Public License is a free, copyleft license for\\nsoftware and other kinds of works.\\n\\n  The licenses for most software and other practical works are designed\\nto take away your freedom to share and change the works.  By contrast,\\nthe GNU General Public License is intended to guarantee your freedom to\\nshare and change all versions of a program--to make sure it remains free\\nsoftware for all its users.  We, the Free Software Foundation, use the\\nGNU General Public License for most of our software; it applies also to\\nany other work released this way by its authors.  You can apply it to\\nyour programs, too.\\n\\n  When we speak of free software, we are referring to freedom, not\\nprice.  Our General Public Licenses are designed to make sure that you\\nhave the freedom to distribute copies of free software (and charge for\\nthem if you wish), that you receive source code or can get it if you\\nwant it, that you can change the software or use pieces of it in new\\nfree programs, and that you know you can do these things.\\n\\n  To protect your rights, we need to prevent others from denying you\\nthese rights or asking you to surrender the rights.  Therefore, you have\\ncertain responsibilities if you distribute copies of the software, or if\\nyou modify it: responsibilities to respect the freedom of others.\\n\\n  For example, if you distribute copies of such a program, whether\\ngratis or for a fee, you must pass on to the recipients the same\\nfreedoms that you received.  You must make sure that they, too, receive\\nor can get the source code.  And you must show them these terms so they\\nknow their rights.\\n\\n  Developers that use the GNU GPL protect your rights with two steps:\\n(1) assert copyright on the software, and (2) offer you this License\\ngiving you legal permission to copy, distribute and/or modify it.\\n\\n  For the developers' and authors' protection, the GPL clearly explains\\nthat there is no warranty for this free software.  For both users' and\\nauthors' sake, the GPL requires that modified versions be marked as\\nchanged, so that their problems will not be attributed erroneously to\\nauthors of previous versions.\\n\\n  Some devices are designed to deny users access to install or run\\nmodified versions of the software inside them, although the manufacturer\\ncan do so.  This is fundamentally incompatible with the aim of\\nprotecting users' freedom to change the software.  The systematic\\npattern of such abuse occurs in the area of products for individuals to\\nuse, which is precisely where it is most unacceptable.  Therefore, we\\nhave designed this version of the GPL to prohibit the practice for those\\nproducts.  If such problems arise substantially in other domains, we\\nstand ready to extend this provision to those domains in future versions\\nof the GPL, as needed to protect the freedom of users.\\n\\n  Finally, every program is threatened constantly by software patents.\\nStates should not allow patents to restrict development and use of\\nsoftware on general-purpose computers, but in those that do, we wish to\\navoid the special danger that patents applied to a free program could\\nmake it effectively proprietary.  To prevent this, the GPL assures that\\npatents cannot be used to render the program non-free.\\n\\n  The precise terms and conditions for copying, distribution and\\nmodification follow.\\n\\n                       TERMS AND CONDITIONS\\n\\n  0. Definitions.\\n\\n  \\\"This License\\\" refers to version 3 of the GNU General Public License.\\n\\n  \\\"Copyright\\\" also means copyright-like laws that apply to other kinds of\\nworks, such as semiconductor masks.\\n\\n  \\\"The Program\\\" refers to any copyrightable work licensed under this\\nLicense.  Each licensee is addressed as \\\"you\\\".  \\\"Licensees\\\" and\\n\\\"recipients\\\" may be individuals or organizations.\\n\\n  To \\\"modify\\\" a work means to copy from or adapt all or part of the work\\nin a fashion requiring copyright permission, other than the making of an\\nexact copy.  The resulting work is called a \\\"modified version\\\" of the\\nearlier work or a work \\\"based on\\\" the earlier work.\\n\\n  A \\\"covered work\\\" means either the unmodified Program or a work based\\non the Program.\\n\\n  To \\\"propagate\\\" a work means to do anything with it that, without\\npermission, would make you directly or secondarily liable for\\ninfringement under applicable copyright law, except executing it on a\\ncomputer or modifying a private copy.  Propagation includes copying,\\ndistribution (with or without modification), making available to the\\npublic, and in some countries other activities as well.\\n\\n  To \\\"convey\\\" a work means any kind of propagation that enables other\\nparties to make or receive copies.  Mere interaction with a user through\\na computer network, with no transfer of a copy, is not conveying.\\n\\n  An interactive user interface displays \\\"Appropriate Legal Notices\\\"\\nto the extent that it includes a convenient and prominently visible\\nfeature that (1) displays an appropriate copyright notice, and (2)\\ntells the user that there is no warranty for the work (except to the\\nextent that warranties are provided), that licensees may convey the\\nwork under this License, and how to view a copy of this License.  If\\nthe interface presents a list of user commands or options, such as a\\nmenu, a prominent item in the list meets this criterion.\\n\\n  1. Source Code.\\n\\n  The \\\"source code\\\" for a work means the preferred form of the work\\nfor making modifications to it.  \\\"Object code\\\" means any non-source\\nform of a work.\\n\\n  A \\\"Standard Interface\\\" means an interface that either is an official\\nstandard defined by a recognized standards body, or, in the case of\\ninterfaces specified for a particular programming language, one that\\nis widely used among developers working in that language.\\n\\n  The \\\"System Libraries\\\" of an executable work include anything, other\\nthan the work as a whole, that (a) is included in the normal form of\\npackaging a Major Component, but which is not part of that Major\\nComponent, and (b) serves only to enable use of the work with that\\nMajor Component, or to implement a Standard Interface for which an\\nimplementation is available to the public in source code form.  A\\n\\\"Major Component\\\", in this context, means a major essential component\\n(kernel, window system, and so on) of the specific operating system\\n(if any) on which the executable work runs, or a compiler used to\\nproduce the work, or an object code interpreter used to run it.\\n\\n  The \\\"Corresponding Source\\\" for a work in object code form means all\\nthe source code needed to generate, install, and (for an executable\\nwork) run the object code and to modify the work, including scripts to\\ncontrol those activities.  However, it does not include the work's\\nSystem Libraries, or general-purpose tools or generally available free\\nprograms which are used unmodified in performing those activities but\\nwhich are not part of the work.  For example, Corresponding Source\\nincludes interface definition files associated with source files for\\nthe work, and the source code for shared libraries and dynamically\\nlinked subprograms that the work is specifically designed to require,\\nsuch as by intimate data communication or control flow between those\\nsubprograms and other parts of the work.\\n\\n  The Corresponding Source need not include anything that users\\ncan regenerate automatically from other parts of the Corresponding\\nSource.\\n\\n  The Corresponding Source for a work in source code form is that\\nsame work.\\n\\n  2. Basic Permissions.\\n\\n  All rights granted under this License are granted for the term of\\ncopyright on the Program, and are irrevocable provided the stated\\nconditions are met.  This License explicitly affirms your unlimited\\npermission to run the unmodified Program.  The output from running a\\ncovered work is covered by this License only if the output, given its\\ncontent, constitutes a covered work.  This License acknowledges your\\nrights of fair use or other equivalent, as provided by copyright law.\\n\\n  You may make, run and propagate covered works that you do not\\nconvey, without conditions so long as your license otherwise remains\\nin force.  You may convey covered works to others for the sole purpose\\nof having them make modifications exclusively for you, or provide you\\nwith facilities for running those works, provided that you comply with\\nthe terms of this License in conveying all material for which you do\\nnot control copyright.  Those thus making or running the covered works\\nfor you must do so exclusively on your behalf, under your direction\\nand control, on terms that prohibit them from making any copies of\\nyour copyrighted material outside their relationship with you.\\n\\n  Conveying under any other circumstances is permitted solely under\\nthe conditions stated below.  Sublicensing is not allowed; section 10\\nmakes it unnecessary.\\n\\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\\n\\n  No covered work shall be deemed part of an effective technological\\nmeasure under any applicable law fulfilling obligations under article\\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\\nsimilar laws prohibiting or restricting circumvention of such\\nmeasures.\\n\\n  When you convey a covered work, you waive any legal power to forbid\\ncircumvention of technological measures to the extent such circumvention\\nis effected by exercising rights under this License with respect to\\nthe covered work, and you disclaim any intention to limit operation or\\nmodification of the work as a means of enforcing, against the work's\\nusers, your or third parties' legal rights to forbid circumvention of\\ntechnological measures.\\n\\n  4. Conveying Verbatim Copies.\\n\\n  You may convey verbatim copies of the Program's source code as you\\nreceive it, in any medium, provided that you conspicuously and\\nappropriately publish on each copy an appropriate copyright notice;\\nkeep intact all notices stating that this License and any\\nnon-permissive terms added in accord with section 7 apply to the code;\\nkeep intact all notices of the absence of any warranty; and give all\\nrecipients a copy of this License along with the Program.\\n\\n  You may charge any price or no price for each copy that you convey,\\nand you may offer support or warranty protection for a fee.\\n\\n  5. Conveying Modified Source Versions.\\n\\n  You may convey a work based on the Program, or the modifications to\\nproduce it from the Program, in the form of source code under the\\nterms of section 4, provided that you also meet all of these conditions:\\n\\n    a) The work must carry prominent notices stating that you modified\\n    it, and giving a relevant date.\\n\\n    b) The work must carry prominent notices stating that it is\\n    released under this License and any conditions added under section\\n    7.  This requirement modifies the requirement in section 4 to\\n    \\\"keep intact all notices\\\".\\n\\n    c) You must license the entire work, as a whole, under this\\n    License to anyone who comes into possession of a copy.  This\\n    License will therefore apply, along with any applicable section 7\\n    additional terms, to the whole of the work, and all its parts,\\n    regardless of how they are packaged.  This License gives no\\n    permission to license the work in any other way, but it does not\\n    invalidate such permission if you have separately received it.\\n\\n    d) If the work has interactive user interfaces, each must display\\n    Appropriate Legal Notices; however, if the Program has interactive\\n    interfaces that do not display Appropriate Legal Notices, your\\n    work need not make them do so.\\n\\n  A compilation of a covered work with other separate and independent\\nworks, which are not by their nature extensions of the covered work,\\nand which are not combined with it such as to form a larger program,\\nin or on a volume of a storage or distribution medium, is called an\\n\\\"aggregate\\\" if the compilation and its resulting copyright are not\\nused to limit the access or legal rights of the compilation's users\\nbeyond what the individual works permit.  Inclusion of a covered work\\nin an aggregate does not cause this License to apply to the other\\nparts of the aggregate.\\n\\n  6. Conveying Non-Source Forms.\\n\\n  You may convey a covered work in object code form under the terms\\nof sections 4 and 5, provided that you also convey the\\nmachine-readable Corresponding Source under the terms of this License,\\nin one of these ways:\\n\\n    a) Convey the object code in, or embodied in, a physical product\\n    (including a physical distribution medium), accompanied by the\\n    Corresponding Source fixed on a durable physical medium\\n    customarily used for software interchange.\\n\\n    b) Convey the object code in, or embodied in, a physical product\\n    (including a physical distribution medium), accompanied by a\\n    written offer, valid for at least three years and valid for as\\n    long as you offer spare parts or customer support for that product\\n    model, to give anyone who possesses the object code either (1) a\\n    copy of the Corresponding Source for all the software in the\\n    product that is covered by this License, on a durable physical\\n    medium customarily used for software interchange, for a price no\\n    more than your reasonable cost of physically performing this\\n    conveying of source, or (2) access to copy the\\n    Corresponding Source from a network server at no charge.\\n\\n    c) Convey individual copies of the object code with a copy of the\\n    written offer to provide the Corresponding Source.  This\\n    alternative is allowed only occasionally and noncommercially, and\\n    only if you received the object code with such an offer, in accord\\n    with subsection 6b.\\n\\n    d) Convey the object code by offering access from a designated\\n    place (gratis or for a charge), and offer equivalent access to the\\n    Corresponding Source in the same way through the same place at no\\n    further charge.  You need not require recipients to copy the\\n    Corresponding Source along with the object code.  If the place to\\n    copy the object code is a network server, the Corresponding Source\\n    may be on a different server (operated by you or a third party)\\n    that supports equivalent copying facilities, provided you maintain\\n    clear directions next to the object code saying where to find the\\n    Corresponding Source.  Regardless of what server hosts the\\n    Corresponding Source, you remain obligated to ensure that it is\\n    available for as long as needed to satisfy these requirements.\\n\\n    e) Convey the object code using peer-to-peer transmission, provided\\n    you inform other peers where the object code and Corresponding\\n    Source of the work are being offered to the general public at no\\n    charge under subsection 6d.\\n\\n  A separable portion of the object code, whose source code is excluded\\nfrom the Corresponding Source as a System Library, need not be\\nincluded in conveying the object code work.\\n\\n  A \\\"User Product\\\" is either (1) a \\\"consumer product\\\", which means any\\ntangible personal property which is normally used for personal, family,\\nor household purposes, or (2) anything designed or sold for incorporation\\ninto a dwelling.  In determining whether a product is a consumer product,\\ndoubtful cases shall be resolved in favor of coverage.  For a particular\\nproduct received by a particular user, \\\"normally used\\\" refers to a\\ntypical or common use of that class of product, regardless of the status\\nof the particular user or of the way in which the particular user\\nactually uses, or expects or is expected to use, the product.  A product\\nis a consumer product regardless of whether the product has substantial\\ncommercial, industrial or non-consumer uses, unless such uses represent\\nthe only significant mode of use of the product.\\n\\n  \\\"Installation Information\\\" for a User Product means any methods,\\nprocedures, authorization keys, or other information required to install\\nand execute modified versions of a covered work in that User Product from\\na modified version of its Corresponding Source.  The information must\\nsuffice to ensure that the continued functioning of the modified object\\ncode is in no case prevented or interfered with solely because\\nmodification has been made.\\n\\n  If you convey an object code work under this section in, or with, or\\nspecifically for use in, a User Product, and the conveying occurs as\\npart of a transaction in which the right of possession and use of the\\nUser Product is transferred to the recipient in perpetuity or for a\\nfixed term (regardless of how the transaction is characterized), the\\nCorresponding Source conveyed under this section must be accompanied\\nby the Installation Information.  But this requirement does not apply\\nif neither you nor any third party retains the ability to install\\nmodified object code on the User Product (for example, the work has\\nbeen installed in ROM).\\n\\n  The requirement to provide Installation Information does not include a\\nrequirement to continue to provide support service, warranty, or updates\\nfor a work that has been modified or installed by the recipient, or for\\nthe User Product in which it has been modified or installed.  Access to a\\nnetwork may be denied when the modification itself materially and\\nadversely affects the operation of the network or violates the rules and\\nprotocols for communication across the network.\\n\\n  Corresponding Source conveyed, and Installation Information provided,\\nin accord with this section must be in a format that is publicly\\ndocumented (and with an implementation available to the public in\\nsource code form), and must require no special password or key for\\nunpacking, reading or copying.\\n\\n  7. Additional Terms.\\n\\n  \\\"Additional permissions\\\" are terms that supplement the terms of this\\nLicense by making exceptions from one or more of its conditions.\\nAdditional permissions that are applicable to the entire Program shall\\nbe treated as though they were included in this License, to the extent\\nthat they are valid under applicable law.  If additional permissions\\napply only to part of the Program, that part may be used separately\\nunder those permissions, but the entire Program remains governed by\\nthis License without regard to the additional permissions.\\n\\n  When you convey a copy of a covered work, you may at your option\\nremove any additional permissions from that copy, or from any part of\\nit.  (Additional permissions may be written to require their own\\nremoval in certain cases when you modify the work.)  You may place\\nadditional permissions on material, added by you to a covered work,\\nfor which you have or can give appropriate copyright permission.\\n\\n  Notwithstanding any other provision of this License, for material you\\nadd to a covered work, you may (if authorized by the copyright holders of\\nthat material) supplement the terms of this License with terms:\\n\\n    a) Disclaiming warranty or limiting liability differently from the\\n    terms of sections 15 and 16 of this License; or\\n\\n    b) Requiring preservation of specified reasonable legal notices or\\n    author attributions in that material or in the Appropriate Legal\\n    Notices displayed by works containing it; or\\n\\n    c) Prohibiting misrepresentation of the origin of that material, or\\n    requiring that modified versions of such material be marked in\\n    reasonable ways as different from the original version; or\\n\\n    d) Limiting the use for publicity purposes of names of licensors or\\n    authors of the material; or\\n\\n    e) Declining to grant rights under trademark law for use of some\\n    trade names, trademarks, or service marks; or\\n\\n    f) Requiring indemnification of licensors and authors of that\\n    material by anyone who conveys the material (or modified versions of\\n    it) with contractual assumptions of liability to the recipient, for\\n    any liability that these contractual assumptions directly impose on\\n    those licensors and authors.\\n\\n  All other non-permissive additional terms are considered \\\"further\\nrestrictions\\\" within the meaning of section 10.  If the Program as you\\nreceived it, or any part of it, contains a notice stating that it is\\ngoverned by this License along with a term that is a further\\nrestriction, you may remove that term.  If a license document contains\\na further restriction but permits relicensing or conveying under this\\nLicense, you may add to a covered work material governed by the terms\\nof that license document, provided that the further restriction does\\nnot survive such relicensing or conveying.\\n\\n  If you add terms to a covered work in accord with this section, you\\nmust place, in the relevant source files, a statement of the\\nadditional terms that apply to those files, or a notice indicating\\nwhere to find the applicable terms.\\n\\n  Additional terms, permissive or non-permissive, may be stated in the\\nform of a separately written license, or stated as exceptions;\\nthe above requirements apply either way.\\n\\n  8. Termination.\\n\\n  You may not propagate or modify a covered work except as expressly\\nprovided under this License.  Any attempt otherwise to propagate or\\nmodify it is void, and will automatically terminate your rights under\\nthis License (including any patent licenses granted under the third\\nparagraph of section 11).\\n\\n  However, if you cease all violation of this License, then your\\nlicense from a particular copyright holder is reinstated (a)\\nprovisionally, unless and until the copyright holder explicitly and\\nfinally terminates your license, and (b) permanently, if the copyright\\nholder fails to notify you of the violation by some reasonable means\\nprior to 60 days after the cessation.\\n\\n  Moreover, your license from a particular copyright holder is\\nreinstated permanently if the copyright holder notifies you of the\\nviolation by some reasonable means, this is the first time you have\\nreceived notice of violation of this License (for any work) from that\\ncopyright holder, and you cure the violation prior to 30 days after\\nyour receipt of the notice.\\n\\n  Termination of your rights under this section does not terminate the\\nlicenses of parties who have received copies or rights from you under\\nthis License.  If your rights have been terminated and not permanently\\nreinstated, you do not qualify to receive new licenses for the same\\nmaterial under section 10.\\n\\n  9. Acceptance Not Required for Having Copies.\\n\\n  You are not required to accept this License in order to receive or\\nrun a copy of the Program.  Ancillary propagation of a covered work\\noccurring solely as a consequence of using peer-to-peer transmission\\nto receive a copy likewise does not require acceptance.  However,\\nnothing other than this License grants you permission to propagate or\\nmodify any covered work.  These actions infringe copyright if you do\\nnot accept this License.  Therefore, by modifying or propagating a\\ncovered work, you indicate your acceptance of this License to do so.\\n\\n  10. Automatic Licensing of Downstream Recipients.\\n\\n  Each time you convey a covered work, the recipient automatically\\nreceives a license from the original licensors, to run, modify and\\npropagate that work, subject to this License.  You are not responsible\\nfor enforcing compliance by third parties with this License.\\n\\n  An \\\"entity transaction\\\" is a transaction transferring control of an\\norganization, or substantially all assets of one, or subdividing an\\norganization, or merging organizations.  If propagation of a covered\\nwork results from an entity transaction, each party to that\\ntransaction who receives a copy of the work also receives whatever\\nlicenses to the work the party's predecessor in interest had or could\\ngive under the previous paragraph, plus a right to possession of the\\nCorresponding Source of the work from the predecessor in interest, if\\nthe predecessor has it or can get it with reasonable efforts.\\n\\n  You may not impose any further restrictions on the exercise of the\\nrights granted or affirmed under this License.  For example, you may\\nnot impose a license fee, royalty, or other charge for exercise of\\nrights granted under this License, and you may not initiate litigation\\n(including a cross-claim or counterclaim in a lawsuit) alleging that\\nany patent claim is infringed by making, using, selling, offering for\\nsale, or importing the Program or any portion of it.\\n\\n  11. Patents.\\n\\n  A \\\"contributor\\\" is a copyright holder who authorizes use under this\\nLicense of the Program or a work on which the Program is based.  The\\nwork thus licensed is called the contributor's \\\"contributor version\\\".\\n\\n  A contributor's \\\"essential patent claims\\\" are all patent claims\\nowned or controlled by the contributor, whether already acquired or\\nhereafter acquired, that would be infringed by some manner, permitted\\nby this License, of making, using, or selling its contributor version,\\nbut do not include claims that would be infringed only as a\\nconsequence of further modification of the contributor version.  For\\npurposes of this definition, \\\"control\\\" includes the right to grant\\npatent sublicenses in a manner consistent with the requirements of\\nthis License.\\n\\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\\npatent license under the contributor's essential patent claims, to\\nmake, use, sell, offer for sale, import and otherwise run, modify and\\npropagate the contents of its contributor version.\\n\\n  In the following three paragraphs, a \\\"patent license\\\" is any express\\nagreement or commitment, however denominated, not to enforce a patent\\n(such as an express permission to practice a patent or covenant not to\\nsue for patent infringement).  To \\\"grant\\\" such a patent license to a\\nparty means to make such an agreement or commitment not to enforce a\\npatent against the party.\\n\\n  If you convey a covered work, knowingly relying on a patent license,\\nand the Corresponding Source of the work is not available for anyone\\nto copy, free of charge and under the terms of this License, through a\\npublicly available network server or other readily accessible means,\\nthen you must either (1) cause the Corresponding Source to be so\\navailable, or (2) arrange to deprive yourself of the benefit of the\\npatent license for this particular work, or (3) arrange, in a manner\\nconsistent with the requirements of this License, to extend the patent\\nlicense to downstream recipients.  \\\"Knowingly relying\\\" means you have\\nactual knowledge that, but for the patent license, your conveying the\\ncovered work in a country, or your recipient's use of the covered work\\nin a country, would infringe one or more identifiable patents in that\\ncountry that you have reason to believe are valid.\\n\\n  If, pursuant to or in connection with a single transaction or\\narrangement, you convey, or propagate by procuring conveyance of, a\\ncovered work, and grant a patent license to some of the parties\\nreceiving the covered work authorizing them to use, propagate, modify\\nor convey a specific copy of the covered work, then the patent license\\nyou grant is automatically extended to all recipients of the covered\\nwork and works based on it.\\n\\n  A patent license is \\\"discriminatory\\\" if it does not include within\\nthe scope of its coverage, prohibits the exercise of, or is\\nconditioned on the non-exercise of one or more of the rights that are\\nspecifically granted under this License.  You may not convey a covered\\nwork if you are a party to an arrangement with a third party that is\\nin the business of distributing software, under which you make payment\\nto the third party based on the extent of your activity of conveying\\nthe work, and under which the third party grants, to any of the\\nparties who would receive the covered work from you, a discriminatory\\npatent license (a) in connection with copies of the covered work\\nconveyed by you (or copies made from those copies), or (b) primarily\\nfor and in connection with specific products or compilations that\\ncontain the covered work, unless you entered into that arrangement,\\nor that patent license was granted, prior to 28 March 2007.\\n\\n  Nothing in this License shall be construed as excluding or limiting\\nany implied license or other defenses to infringement that may\\notherwise be available to you under applicable patent law.\\n\\n  12. No Surrender of Others' Freedom.\\n\\n  If conditions are imposed on you (whether by court order, agreement or\\notherwise) that contradict the conditions of this License, they do not\\nexcuse you from the conditions of this License.  If you cannot convey a\\ncovered work so as to satisfy simultaneously your obligations under this\\nLicense and any other pertinent obligations, then as a consequence you may\\nnot convey it at all.  For example, if you agree to terms that obligate you\\nto collect a royalty for further conveying from those to whom you convey\\nthe Program, the only way you could satisfy both those terms and this\\nLicense would be to refrain entirely from conveying the Program.\\n\\n  13. Use with the GNU Affero General Public License.\\n\\n  Notwithstanding any other provision of this License, you have\\npermission to link or combine any covered work with a work licensed\\nunder version 3 of the GNU Affero General Public License into a single\\ncombined work, and to convey the resulting work.  The terms of this\\nLicense will continue to apply to the part which is the covered work,\\nbut the special requirements of the GNU Affero General Public License,\\nsection 13, concerning interaction through a network will apply to the\\ncombination as such.\\n\\n  14. Revised Versions of this License.\\n\\n  The Free Software Foundation may publish revised and/or new versions of\\nthe GNU General Public License from time to time.  Such new versions will\\nbe similar in spirit to the present version, but may differ in detail to\\naddress new problems or concerns.\\n\\n  Each version is given a distinguishing version number.  If the\\nProgram specifies that a certain numbered version of the GNU General\\nPublic License \\\"or any later version\\\" applies to it, you have the\\noption of following the terms and conditions either of that numbered\\nversion or of any later version published by the Free Software\\nFoundation.  If the Program does not specify a version number of the\\nGNU General Public License, you may choose any version ever published\\nby the Free Software Foundation.\\n\\n  If the Program specifies that a proxy can decide which future\\nversions of the GNU General Public License can be used, that proxy's\\npublic statement of acceptance of a version permanently authorizes you\\nto choose that version for the Program.\\n\\n  Later license versions may give you additional or different\\npermissions.  However, no additional obligations are imposed on any\\nauthor or copyright holder as a result of your choosing to follow a\\nlater version.\\n\\n  15. Disclaimer of Warranty.\\n\\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \\\"AS IS\\\" WITHOUT WARRANTY\\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\\n\\n  16. Limitation of Liability.\\n\\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\\nSUCH DAMAGES.\\n\\n  17. Interpretation of Sections 15 and 16.\\n\\n  If the disclaimer of warranty and limitation of liability provided\\nabove cannot be given local legal effect according to their terms,\\nreviewing courts shall apply local law that most closely approximates\\nan absolute waiver of all civil liability in connection with the\\nProgram, unless a warranty or assumption of liability accompanies a\\ncopy of the Program in return for a fee.\\n\\n                     END OF TERMS AND CONDITIONS\\n\\n            How to Apply These Terms to Your New Programs\\n\\n  If you develop a new program, and you want it to be of the greatest\\npossible use to the public, the best way to achieve this is to make it\\nfree software which everyone can redistribute and change under these terms.\\n\\n  To do so, attach the following notices to the program.  It is safest\\nto attach them to the start of each source file to most effectively\\nstate the exclusion of warranty; and each file should have at least\\nthe \\\"copyright\\\" line and a pointer to where the full notice is found.\\n\\n    <one line to give the program's name and a brief idea of what it does.>\\n    Copyright (C) <year>  <name of author>\\n\\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 <http://www.gnu.org/licenses/>.\\n\\nAlso add information on how to contact you by electronic and paper mail.\\n\\n  If the program does terminal interaction, make it output a short\\nnotice like this when it starts in an interactive mode:\\n\\n    <program>  Copyright (C) <year>  <name of author>\\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\\n    This is free software, and you are welcome to redistribute it\\n    under certain conditions; type `show c' for details.\\n\\nThe hypothetical commands `show w' and `show c' should show the appropriate\\nparts of the General Public License.  Of course, your program's commands\\nmight be different; for a GUI interface, you would use an \\\"about box\\\".\\n\\n  You should also get your employer (if you work as a programmer) or school,\\nif any, to sign a \\\"copyright disclaimer\\\" for the program, if necessary.\\nFor more information on this, and how to apply and follow the GNU GPL, see\\n<http://www.gnu.org/licenses/>.\\n\\n  The GNU General Public License does not permit incorporating your program\\ninto proprietary programs.  If your program is a subroutine library, you\\nmay consider it more useful to permit linking proprietary applications with\\nthe library.  If this is what you want to do, use the GNU Lesser General\\nPublic License instead of this License.  But first, please read\\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\\n\\n*/\\n\",\"keccak256\":\"0x08da88e3ef46dae3e7937fbc60210e7a02f1e7b7daddd3c33ab40bdd20ca30e6\"}},\"version\":1}","storageLayout":{"storage":[{"astId":2984,"contract":"@aave/core-v3/contracts/dependencies/weth/WETH9.sol:WETH9","label":"name","offset":0,"slot":"0","type":"t_string_storage"},{"astId":2987,"contract":"@aave/core-v3/contracts/dependencies/weth/WETH9.sol:WETH9","label":"symbol","offset":0,"slot":"1","type":"t_string_storage"},{"astId":2990,"contract":"@aave/core-v3/contracts/dependencies/weth/WETH9.sol:WETH9","label":"decimals","offset":0,"slot":"2","type":"t_uint8"},{"astId":3022,"contract":"@aave/core-v3/contracts/dependencies/weth/WETH9.sol:WETH9","label":"balanceOf","offset":0,"slot":"3","type":"t_mapping(t_address,t_uint256)"},{"astId":3028,"contract":"@aave/core-v3/contracts/dependencies/weth/WETH9.sol:WETH9","label":"allowance","offset":0,"slot":"4","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/deployments/ReservesSetupHelper.sol":{"ReservesSetupHelper":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"contract PoolConfigurator","name":"configurator","type":"address"},{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"baseLTV","type":"uint256"},{"internalType":"uint256","name":"liquidationThreshold","type":"uint256"},{"internalType":"uint256","name":"liquidationBonus","type":"uint256"},{"internalType":"uint256","name":"reserveFactor","type":"uint256"},{"internalType":"uint256","name":"borrowCap","type":"uint256"},{"internalType":"uint256","name":"supplyCap","type":"uint256"},{"internalType":"bool","name":"stableBorrowingEnabled","type":"bool"},{"internalType":"bool","name":"borrowingEnabled","type":"bool"},{"internalType":"bool","name":"flashLoanEnabled","type":"bool"}],"internalType":"struct ReservesSetupHelper.ConfigureReserveInput[]","name":"inputParams","type":"tuple[]"}],"name":"configureReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","details":"The ReservesSetupHelper is an Ownable contract, so only the deployer or future owners can call this contract.","kind":"dev","methods":{"configureReserves(address,(address,uint256,uint256,uint256,uint256,uint256,uint256,bool,bool,bool)[])":{"details":"The Pool or Risk admin must transfer the ownership to ReservesSetupHelper before calling this function","params":{"configurator":"The address of PoolConfigurator contract","inputParams":"An array of ConfigureReserveInput struct that contains the assets and their risk parameters"}},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"title":"ReservesSetupHelper","version":1},"evm":{"bytecode":{"functionDebugData":{"@_1500":{"entryPoint":null,"id":1500,"parameterSlots":0,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350610c3e806100616000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806323bb109314610051578063715018a6146100665780638da5cb5b1461006e578063f2fde38b1461009a575b600080fd5b61006461005f366004610aaa565b6100ad565b005b6100646107e4565b6000546040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100646100a8366004610b33565b6108d4565b60005473ffffffffffffffffffffffffffffffffffffffff163314610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60005b818110156107de578373ffffffffffffffffffffffffffffffffffffffff16637c4e560b84848481811061016c5761016c610b57565b610183926020610140909202019081019150610b33565b85858581811061019557610195610b57565b90506101400201602001358686868181106101b2576101b2610b57565b90506101400201604001358787878181106101cf576101cf610b57565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b16815273ffffffffffffffffffffffffffffffffffffffff9096166004870152602486019490945250604484019190915260606101409092020101356064820152608401600060405180830381600087803b15801561025657600080fd5b505af115801561026a573d6000803e3d6000fd5b5050505082828281811061028057610280610b57565b9050610140020161010001602081019061029a9190610b86565b15610531578373ffffffffffffffffffffffffffffffffffffffff1663682cf2648484848181106102cd576102cd610b57565b6102e4926020610140909202019081019150610b33565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff909116600482015260016024820152604401600060405180830381600087803b15801561035157600080fd5b505af1158015610365573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663d14a098384848481811061039757610397610b57565b6103ae926020610140909202019081019150610b33565b8585858181106103c0576103c0610b57565b9050610140020160a001356040518363ffffffff1660e01b815260040161040992919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600060405180830381600087803b15801561042357600080fd5b505af1158015610437573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16638a751a6084848481811061046957610469610b57565b610480926020610140909202019081019150610b33565b85858581811061049257610492610b57565b9050610140020160e00160208101906104ab9190610b86565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015215156024820152604401600060405180830381600087803b15801561051857600080fd5b505af115801561052c573d6000803e3d6000fd5b505050505b8373ffffffffffffffffffffffffffffffffffffffff1663f213ef0e84848481811061055f5761055f610b57565b610576926020610140909202019081019150610b33565b85858581811061058857610588610b57565b905061014002016101200160208101906105a29190610b86565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015215156024820152604401600060405180830381600087803b15801561060f57600080fd5b505af1158015610623573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663571f03e584848481811061065557610655610b57565b61066c926020610140909202019081019150610b33565b85858581811061067e5761067e610b57565b9050610140020160c001356040518363ffffffff1660e01b81526004016106c792919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600060405180830381600087803b1580156106e157600080fd5b505af11580156106f5573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16634b4e675384848481811061072757610727610b57565b61073e926020610140909202019081019150610b33565b85858581811061075057610750610b57565b90506101400201608001356040518363ffffffff1660e01b815260040161079992919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600060405180830381600087803b1580156107b357600080fd5b505af11580156107c7573d6000803e3d6000fd5b5050505080806107d690610ba8565b915050610136565b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161012a565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161012a565b73ffffffffffffffffffffffffffffffffffffffff81166109f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161012a565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff81168114610aa757600080fd5b50565b600080600060408486031215610abf57600080fd5b8335610aca81610a85565b9250602084013567ffffffffffffffff80821115610ae757600080fd5b818601915086601f830112610afb57600080fd5b813581811115610b0a57600080fd5b87602061014083028501011115610b2057600080fd5b6020830194508093505050509250925092565b600060208284031215610b4557600080fd5b8135610b5081610a85565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215610b9857600080fd5b81358015158114610b5057600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610c01577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea2646970667358221220af599569b5cef4234dd4ef8ea277d83cb57ceaff64bdcdb2d55d18785456f9a064736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 DUP3 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH2 0xC3E DUP1 PUSH2 0x61 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x23BB1093 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x66 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x6E JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x9A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0xAAA JUMP JUMPDEST PUSH2 0xAD JUMP JUMPDEST STOP JUMPDEST PUSH2 0x64 PUSH2 0x7E4 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x64 PUSH2 0xA8 CALLDATASIZE PUSH1 0x4 PUSH2 0xB33 JUMP JUMPDEST PUSH2 0x8D4 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x133 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x7DE JUMPI DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x7C4E560B DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x16C JUMPI PUSH2 0x16C PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x183 SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x195 JUMPI PUSH2 0x195 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH1 0x20 ADD CALLDATALOAD DUP7 DUP7 DUP7 DUP2 DUP2 LT PUSH2 0x1B2 JUMPI PUSH2 0x1B2 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH1 0x40 ADD CALLDATALOAD DUP8 DUP8 DUP8 DUP2 DUP2 LT PUSH2 0x1CF JUMPI PUSH2 0x1CF PUSH2 0xB57 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP10 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP7 AND PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x24 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE POP PUSH1 0x44 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 PUSH2 0x140 SWAP1 SWAP3 MUL ADD ADD CALLDATALOAD PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x26A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 DUP3 DUP3 DUP2 DUP2 LT PUSH2 0x280 JUMPI PUSH2 0x280 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH2 0x100 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x29A SWAP2 SWAP1 PUSH2 0xB86 JUMP JUMPDEST ISZERO PUSH2 0x531 JUMPI DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x682CF264 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x2CD JUMPI PUSH2 0x2CD PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x2E4 SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x365 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD14A0983 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x397 JUMPI PUSH2 0x397 PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x3AE SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x3C0 JUMPI PUSH2 0x3C0 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH1 0xA0 ADD CALLDATALOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x409 SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x423 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x437 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x8A751A60 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x469 JUMPI PUSH2 0x469 PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x480 SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x492 JUMPI PUSH2 0x492 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH1 0xE0 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x4AB SWAP2 SWAP1 PUSH2 0xB86 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE ISZERO ISZERO PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x518 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x52C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF213EF0E DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x55F JUMPI PUSH2 0x55F PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x576 SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x588 JUMPI PUSH2 0x588 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH2 0x120 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x5A2 SWAP2 SWAP1 PUSH2 0xB86 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE ISZERO ISZERO PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x60F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x623 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x571F03E5 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x655 JUMPI PUSH2 0x655 PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x66C SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x67E JUMPI PUSH2 0x67E PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH1 0xC0 ADD CALLDATALOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x6C7 SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6F5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x4B4E6753 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x727 JUMPI PUSH2 0x727 PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x73E SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x750 JUMPI PUSH2 0x750 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH1 0x80 ADD CALLDATALOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x799 SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 DUP1 PUSH2 0x7D6 SWAP1 PUSH2 0xBA8 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x136 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x865 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x12A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x955 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x12A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x9F8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x12A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xAA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xABF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0xACA DUP2 PUSH2 0xA85 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xAE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xAFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xB0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 PUSH2 0x140 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0xB20 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xB50 DUP2 PUSH2 0xA85 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xB50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0xC01 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAF MSIZE SWAP6 PUSH10 0xB5CEF4234DD4EF8EA277 0xD8 EXTCODECOPY 0xB5 PUSH29 0xEAFF64BDCDB2D55D18785456F9A064736F6C634300080A003300000000 ","sourceMap":"478:1785:23:-:0;;;;;;;;;;;;-1:-1:-1;835:17:11;873:18;;-1:-1:-1;;;;;;873:18:11;678:10:4;873:18:11;;;;;902:43;;678:10:4;;;;902:43:11;;835:17;;902:43;829:121;478:1785:23;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@configureReserves_3387":{"entryPoint":173,"id":3387,"parameterSlots":3,"returnSlots":0},"@owner_1509":{"entryPoint":null,"id":1509,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_1544":{"entryPoint":2020,"id":1544,"parameterSlots":0,"returnSlots":0},"@transferOwnership_1572":{"entryPoint":2260,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address":{"entryPoint":2867,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool":{"entryPoint":2950,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_PoolConfigurator_$25278t_array$_t_struct$_ConfigureReserveInput_$3258_calldata_ptr_$dyn_calldata_ptr":{"entryPoint":2730,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"increment_t_uint256":{"entryPoint":2984,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x32":{"entryPoint":2903,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_contract_PoolConfigurator":{"entryPoint":2693,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:4182:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"77:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"164:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"173:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"176:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"166:6:201"},"nodeType":"YulFunctionCall","src":"166:12:201"},"nodeType":"YulExpressionStatement","src":"166:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"100:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"111:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"118:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"107:3:201"},"nodeType":"YulFunctionCall","src":"107:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"97:2:201"},"nodeType":"YulFunctionCall","src":"97:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"90:6:201"},"nodeType":"YulFunctionCall","src":"90:73:201"},"nodeType":"YulIf","src":"87:93:201"}]},"name":"validator_revert_contract_PoolConfigurator","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"66:5:201","type":""}],"src":"14:172:201"},{"body":{"nodeType":"YulBlock","src":"380:651:201","statements":[{"body":{"nodeType":"YulBlock","src":"426:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"435:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"438:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"428:6:201"},"nodeType":"YulFunctionCall","src":"428:12:201"},"nodeType":"YulExpressionStatement","src":"428:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"401:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"410:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"397:3:201"},"nodeType":"YulFunctionCall","src":"397:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"422:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"393:3:201"},"nodeType":"YulFunctionCall","src":"393:32:201"},"nodeType":"YulIf","src":"390:52:201"},{"nodeType":"YulVariableDeclaration","src":"451:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"477:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"464:12:201"},"nodeType":"YulFunctionCall","src":"464:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"455:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"539:5:201"}],"functionName":{"name":"validator_revert_contract_PoolConfigurator","nodeType":"YulIdentifier","src":"496:42:201"},"nodeType":"YulFunctionCall","src":"496:49:201"},"nodeType":"YulExpressionStatement","src":"496:49:201"},{"nodeType":"YulAssignment","src":"554:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"564:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"554:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"578:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"609:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"620:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"605:3:201"},"nodeType":"YulFunctionCall","src":"605:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"592:12:201"},"nodeType":"YulFunctionCall","src":"592:32:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"582:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"633:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"643:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"637:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"688:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"697:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"700:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"690:6:201"},"nodeType":"YulFunctionCall","src":"690:12:201"},"nodeType":"YulExpressionStatement","src":"690:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"676:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"684:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"673:2:201"},"nodeType":"YulFunctionCall","src":"673:14:201"},"nodeType":"YulIf","src":"670:34:201"},{"nodeType":"YulVariableDeclaration","src":"713:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"727:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"738:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"723:3:201"},"nodeType":"YulFunctionCall","src":"723:22:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"717:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"793:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"802:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"805:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"795:6:201"},"nodeType":"YulFunctionCall","src":"795:12:201"},"nodeType":"YulExpressionStatement","src":"795:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"772:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"776:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"768:3:201"},"nodeType":"YulFunctionCall","src":"768:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"783:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"764:3:201"},"nodeType":"YulFunctionCall","src":"764:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"757:6:201"},"nodeType":"YulFunctionCall","src":"757:35:201"},"nodeType":"YulIf","src":"754:55:201"},{"nodeType":"YulVariableDeclaration","src":"818:30:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"845:2:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"832:12:201"},"nodeType":"YulFunctionCall","src":"832:16:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"822:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"875:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"884:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"887:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"877:6:201"},"nodeType":"YulFunctionCall","src":"877:12:201"},"nodeType":"YulExpressionStatement","src":"877:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"863:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"871:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"860:2:201"},"nodeType":"YulFunctionCall","src":"860:14:201"},"nodeType":"YulIf","src":"857:34:201"},{"body":{"nodeType":"YulBlock","src":"954:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"963:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"966:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"956:6:201"},"nodeType":"YulFunctionCall","src":"956:12:201"},"nodeType":"YulExpressionStatement","src":"956:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"914:2:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"922:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"930:6:201","type":"","value":"0x0140"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"918:3:201"},"nodeType":"YulFunctionCall","src":"918:19:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"910:3:201"},"nodeType":"YulFunctionCall","src":"910:28:201"},{"kind":"number","nodeType":"YulLiteral","src":"940:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"906:3:201"},"nodeType":"YulFunctionCall","src":"906:37:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"945:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"903:2:201"},"nodeType":"YulFunctionCall","src":"903:50:201"},"nodeType":"YulIf","src":"900:70:201"},{"nodeType":"YulAssignment","src":"979:21:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"993:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"997:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"989:3:201"},"nodeType":"YulFunctionCall","src":"989:11:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"979:6:201"}]},{"nodeType":"YulAssignment","src":"1009:16:201","value":{"name":"length","nodeType":"YulIdentifier","src":"1019:6:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1009:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_PoolConfigurator_$25278t_array$_t_struct$_ConfigureReserveInput_$3258_calldata_ptr_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"330:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"341:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"353:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"361:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"369:6:201","type":""}],"src":"191:840:201"},{"body":{"nodeType":"YulBlock","src":"1137:125:201","statements":[{"nodeType":"YulAssignment","src":"1147:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1159:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1170:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1155:3:201"},"nodeType":"YulFunctionCall","src":"1155:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1147:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1189:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1204:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1212:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1200:3:201"},"nodeType":"YulFunctionCall","src":"1200:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1182:6:201"},"nodeType":"YulFunctionCall","src":"1182:74:201"},"nodeType":"YulExpressionStatement","src":"1182:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1106:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1117:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1128:4:201","type":""}],"src":"1036:226:201"},{"body":{"nodeType":"YulBlock","src":"1337:195:201","statements":[{"body":{"nodeType":"YulBlock","src":"1383:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1392:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1395:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1385:6:201"},"nodeType":"YulFunctionCall","src":"1385:12:201"},"nodeType":"YulExpressionStatement","src":"1385:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1358:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1367:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1354:3:201"},"nodeType":"YulFunctionCall","src":"1354:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1379:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1350:3:201"},"nodeType":"YulFunctionCall","src":"1350:32:201"},"nodeType":"YulIf","src":"1347:52:201"},{"nodeType":"YulVariableDeclaration","src":"1408:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1434:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1421:12:201"},"nodeType":"YulFunctionCall","src":"1421:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1412:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1496:5:201"}],"functionName":{"name":"validator_revert_contract_PoolConfigurator","nodeType":"YulIdentifier","src":"1453:42:201"},"nodeType":"YulFunctionCall","src":"1453:49:201"},"nodeType":"YulExpressionStatement","src":"1453:49:201"},{"nodeType":"YulAssignment","src":"1511:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1521:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1511:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1303:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1314:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1326:6:201","type":""}],"src":"1267:265:201"},{"body":{"nodeType":"YulBlock","src":"1711:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1728:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1739:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1721:6:201"},"nodeType":"YulFunctionCall","src":"1721:21:201"},"nodeType":"YulExpressionStatement","src":"1721:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1762:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1773:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1758:3:201"},"nodeType":"YulFunctionCall","src":"1758:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"1778:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1751:6:201"},"nodeType":"YulFunctionCall","src":"1751:30:201"},"nodeType":"YulExpressionStatement","src":"1751:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1801:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1812:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1797:3:201"},"nodeType":"YulFunctionCall","src":"1797:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"1817:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1790:6:201"},"nodeType":"YulFunctionCall","src":"1790:62:201"},"nodeType":"YulExpressionStatement","src":"1790:62:201"},{"nodeType":"YulAssignment","src":"1861:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1873:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1884:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1869:3:201"},"nodeType":"YulFunctionCall","src":"1869:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1861:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1688:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1702:4:201","type":""}],"src":"1537:356:201"},{"body":{"nodeType":"YulBlock","src":"1930:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1947:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1950:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1940:6:201"},"nodeType":"YulFunctionCall","src":"1940:88:201"},"nodeType":"YulExpressionStatement","src":"1940:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2044:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2047:4:201","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2037:6:201"},"nodeType":"YulFunctionCall","src":"2037:15:201"},"nodeType":"YulExpressionStatement","src":"2037:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2068:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2071:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2061:6:201"},"nodeType":"YulFunctionCall","src":"2061:15:201"},"nodeType":"YulExpressionStatement","src":"2061:15:201"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"1898:184:201"},{"body":{"nodeType":"YulBlock","src":"2272:255:201","statements":[{"nodeType":"YulAssignment","src":"2282:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2294:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2305:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2290:3:201"},"nodeType":"YulFunctionCall","src":"2290:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2282:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2325:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2340:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2348:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2336:3:201"},"nodeType":"YulFunctionCall","src":"2336:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2318:6:201"},"nodeType":"YulFunctionCall","src":"2318:74:201"},"nodeType":"YulExpressionStatement","src":"2318:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2412:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2423:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2408:3:201"},"nodeType":"YulFunctionCall","src":"2408:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"2428:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2401:6:201"},"nodeType":"YulFunctionCall","src":"2401:34:201"},"nodeType":"YulExpressionStatement","src":"2401:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2455:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2466:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2451:3:201"},"nodeType":"YulFunctionCall","src":"2451:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"2471:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2444:6:201"},"nodeType":"YulFunctionCall","src":"2444:34:201"},"nodeType":"YulExpressionStatement","src":"2444:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2498:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2509:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2494:3:201"},"nodeType":"YulFunctionCall","src":"2494:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"2514:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2487:6:201"},"nodeType":"YulFunctionCall","src":"2487:34:201"},"nodeType":"YulExpressionStatement","src":"2487:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2217:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2228:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2236:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2244:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2252:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2263:4:201","type":""}],"src":"2087:440:201"},{"body":{"nodeType":"YulBlock","src":"2599:206:201","statements":[{"body":{"nodeType":"YulBlock","src":"2645:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2654:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2657:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2647:6:201"},"nodeType":"YulFunctionCall","src":"2647:12:201"},"nodeType":"YulExpressionStatement","src":"2647:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2620:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2629:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2616:3:201"},"nodeType":"YulFunctionCall","src":"2616:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2641:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2612:3:201"},"nodeType":"YulFunctionCall","src":"2612:32:201"},"nodeType":"YulIf","src":"2609:52:201"},{"nodeType":"YulVariableDeclaration","src":"2670:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2696:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2683:12:201"},"nodeType":"YulFunctionCall","src":"2683:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2674:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2759:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2768:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2771:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2761:6:201"},"nodeType":"YulFunctionCall","src":"2761:12:201"},"nodeType":"YulExpressionStatement","src":"2761:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2728:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2749:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2742:6:201"},"nodeType":"YulFunctionCall","src":"2742:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2735:6:201"},"nodeType":"YulFunctionCall","src":"2735:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2725:2:201"},"nodeType":"YulFunctionCall","src":"2725:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2718:6:201"},"nodeType":"YulFunctionCall","src":"2718:40:201"},"nodeType":"YulIf","src":"2715:60:201"},{"nodeType":"YulAssignment","src":"2784:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"2794:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2784:6:201"}]}]},"name":"abi_decode_tuple_t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2565:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2576:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2588:6:201","type":""}],"src":"2532:273:201"},{"body":{"nodeType":"YulBlock","src":"2933:184:201","statements":[{"nodeType":"YulAssignment","src":"2943:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2955:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2966:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2951:3:201"},"nodeType":"YulFunctionCall","src":"2951:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2943:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2985:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3000:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3008:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2996:3:201"},"nodeType":"YulFunctionCall","src":"2996:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2978:6:201"},"nodeType":"YulFunctionCall","src":"2978:74:201"},"nodeType":"YulExpressionStatement","src":"2978:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3072:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3083:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3068:3:201"},"nodeType":"YulFunctionCall","src":"3068:18:201"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"3102:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3095:6:201"},"nodeType":"YulFunctionCall","src":"3095:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3088:6:201"},"nodeType":"YulFunctionCall","src":"3088:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3061:6:201"},"nodeType":"YulFunctionCall","src":"3061:50:201"},"nodeType":"YulExpressionStatement","src":"3061:50:201"}]},"name":"abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2894:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2905:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2913:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2924:4:201","type":""}],"src":"2810:307:201"},{"body":{"nodeType":"YulBlock","src":"3251:168:201","statements":[{"nodeType":"YulAssignment","src":"3261:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3273:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3284:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3269:3:201"},"nodeType":"YulFunctionCall","src":"3269:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3261:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3303:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3318:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3326:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3314:3:201"},"nodeType":"YulFunctionCall","src":"3314:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3296:6:201"},"nodeType":"YulFunctionCall","src":"3296:74:201"},"nodeType":"YulExpressionStatement","src":"3296:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3390:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3401:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3386:3:201"},"nodeType":"YulFunctionCall","src":"3386:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"3406:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3379:6:201"},"nodeType":"YulFunctionCall","src":"3379:34:201"},"nodeType":"YulExpressionStatement","src":"3379:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3212:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3223:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3231:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3242:4:201","type":""}],"src":"3122:297:201"},{"body":{"nodeType":"YulBlock","src":"3471:302:201","statements":[{"body":{"nodeType":"YulBlock","src":"3570:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3591:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3594:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3584:6:201"},"nodeType":"YulFunctionCall","src":"3584:88:201"},"nodeType":"YulExpressionStatement","src":"3584:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3692:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3695:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3685:6:201"},"nodeType":"YulFunctionCall","src":"3685:15:201"},"nodeType":"YulExpressionStatement","src":"3685:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3720:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3723:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3713:6:201"},"nodeType":"YulFunctionCall","src":"3713:15:201"},"nodeType":"YulExpressionStatement","src":"3713:15:201"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3487:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"3494:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3484:2:201"},"nodeType":"YulFunctionCall","src":"3484:77:201"},"nodeType":"YulIf","src":"3481:257:201"},{"nodeType":"YulAssignment","src":"3747:20:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3758:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"3765:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3754:3:201"},"nodeType":"YulFunctionCall","src":"3754:13:201"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"3747:3:201"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"3453:5:201","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"3463:3:201","type":""}],"src":"3424:349:201"},{"body":{"nodeType":"YulBlock","src":"3952:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3969:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3980:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3962:6:201"},"nodeType":"YulFunctionCall","src":"3962:21:201"},"nodeType":"YulExpressionStatement","src":"3962:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4003:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4014:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3999:3:201"},"nodeType":"YulFunctionCall","src":"3999:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"4019:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3992:6:201"},"nodeType":"YulFunctionCall","src":"3992:30:201"},"nodeType":"YulExpressionStatement","src":"3992:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4042:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4053:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4038:3:201"},"nodeType":"YulFunctionCall","src":"4038:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"4058:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4031:6:201"},"nodeType":"YulFunctionCall","src":"4031:62:201"},"nodeType":"YulExpressionStatement","src":"4031:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4113:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4124:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4109:3:201"},"nodeType":"YulFunctionCall","src":"4109:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"4129:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4102:6:201"},"nodeType":"YulFunctionCall","src":"4102:36:201"},"nodeType":"YulExpressionStatement","src":"4102:36:201"},{"nodeType":"YulAssignment","src":"4147:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4159:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4170:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4155:3:201"},"nodeType":"YulFunctionCall","src":"4155:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4147:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3929:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3943:4:201","type":""}],"src":"3778:402:201"}]},"contents":"{\n    { }\n    function validator_revert_contract_PoolConfigurator(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_PoolConfigurator_$25278t_array$_t_struct$_ConfigureReserveInput_$3258_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_PoolConfigurator(value)\n        value0 := value\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, mul(length, 0x0140)), 32), dataEnd) { revert(0, 0) }\n        value1 := add(_2, 32)\n        value2 := length\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_PoolConfigurator(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_decode_tuple_t_bool(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061004c5760003560e01c806323bb109314610051578063715018a6146100665780638da5cb5b1461006e578063f2fde38b1461009a575b600080fd5b61006461005f366004610aaa565b6100ad565b005b6100646107e4565b6000546040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100646100a8366004610b33565b6108d4565b60005473ffffffffffffffffffffffffffffffffffffffff163314610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60005b818110156107de578373ffffffffffffffffffffffffffffffffffffffff16637c4e560b84848481811061016c5761016c610b57565b610183926020610140909202019081019150610b33565b85858581811061019557610195610b57565b90506101400201602001358686868181106101b2576101b2610b57565b90506101400201604001358787878181106101cf576101cf610b57565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b16815273ffffffffffffffffffffffffffffffffffffffff9096166004870152602486019490945250604484019190915260606101409092020101356064820152608401600060405180830381600087803b15801561025657600080fd5b505af115801561026a573d6000803e3d6000fd5b5050505082828281811061028057610280610b57565b9050610140020161010001602081019061029a9190610b86565b15610531578373ffffffffffffffffffffffffffffffffffffffff1663682cf2648484848181106102cd576102cd610b57565b6102e4926020610140909202019081019150610b33565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff909116600482015260016024820152604401600060405180830381600087803b15801561035157600080fd5b505af1158015610365573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663d14a098384848481811061039757610397610b57565b6103ae926020610140909202019081019150610b33565b8585858181106103c0576103c0610b57565b9050610140020160a001356040518363ffffffff1660e01b815260040161040992919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600060405180830381600087803b15801561042357600080fd5b505af1158015610437573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16638a751a6084848481811061046957610469610b57565b610480926020610140909202019081019150610b33565b85858581811061049257610492610b57565b9050610140020160e00160208101906104ab9190610b86565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015215156024820152604401600060405180830381600087803b15801561051857600080fd5b505af115801561052c573d6000803e3d6000fd5b505050505b8373ffffffffffffffffffffffffffffffffffffffff1663f213ef0e84848481811061055f5761055f610b57565b610576926020610140909202019081019150610b33565b85858581811061058857610588610b57565b905061014002016101200160208101906105a29190610b86565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015215156024820152604401600060405180830381600087803b15801561060f57600080fd5b505af1158015610623573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663571f03e584848481811061065557610655610b57565b61066c926020610140909202019081019150610b33565b85858581811061067e5761067e610b57565b9050610140020160c001356040518363ffffffff1660e01b81526004016106c792919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600060405180830381600087803b1580156106e157600080fd5b505af11580156106f5573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff16634b4e675384848481811061072757610727610b57565b61073e926020610140909202019081019150610b33565b85858581811061075057610750610b57565b90506101400201608001356040518363ffffffff1660e01b815260040161079992919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600060405180830381600087803b1580156107b357600080fd5b505af11580156107c7573d6000803e3d6000fd5b5050505080806107d690610ba8565b915050610136565b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161012a565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161012a565b73ffffffffffffffffffffffffffffffffffffffff81166109f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161012a565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff81168114610aa757600080fd5b50565b600080600060408486031215610abf57600080fd5b8335610aca81610a85565b9250602084013567ffffffffffffffff80821115610ae757600080fd5b818601915086601f830112610afb57600080fd5b813581811115610b0a57600080fd5b87602061014083028501011115610b2057600080fd5b6020830194508093505050509250925092565b600060208284031215610b4557600080fd5b8135610b5081610a85565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215610b9857600080fd5b81358015158114610b5057600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610c01577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea2646970667358221220af599569b5cef4234dd4ef8ea277d83cb57ceaff64bdcdb2d55d18785456f9a064736f6c634300080a0033","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 0x23BB1093 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x66 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x6E JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x9A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0xAAA JUMP JUMPDEST PUSH2 0xAD JUMP JUMPDEST STOP JUMPDEST PUSH2 0x64 PUSH2 0x7E4 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x64 PUSH2 0xA8 CALLDATASIZE PUSH1 0x4 PUSH2 0xB33 JUMP JUMPDEST PUSH2 0x8D4 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x133 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x7DE JUMPI DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x7C4E560B DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x16C JUMPI PUSH2 0x16C PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x183 SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x195 JUMPI PUSH2 0x195 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH1 0x20 ADD CALLDATALOAD DUP7 DUP7 DUP7 DUP2 DUP2 LT PUSH2 0x1B2 JUMPI PUSH2 0x1B2 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH1 0x40 ADD CALLDATALOAD DUP8 DUP8 DUP8 DUP2 DUP2 LT PUSH2 0x1CF JUMPI PUSH2 0x1CF PUSH2 0xB57 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP10 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP7 AND PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x24 DUP7 ADD SWAP5 SWAP1 SWAP5 MSTORE POP PUSH1 0x44 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 PUSH2 0x140 SWAP1 SWAP3 MUL ADD ADD CALLDATALOAD PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x26A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 DUP3 DUP3 DUP2 DUP2 LT PUSH2 0x280 JUMPI PUSH2 0x280 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH2 0x100 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x29A SWAP2 SWAP1 PUSH2 0xB86 JUMP JUMPDEST ISZERO PUSH2 0x531 JUMPI DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x682CF264 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x2CD JUMPI PUSH2 0x2CD PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x2E4 SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x365 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD14A0983 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x397 JUMPI PUSH2 0x397 PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x3AE SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x3C0 JUMPI PUSH2 0x3C0 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH1 0xA0 ADD CALLDATALOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x409 SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x423 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x437 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x8A751A60 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x469 JUMPI PUSH2 0x469 PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x480 SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x492 JUMPI PUSH2 0x492 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH1 0xE0 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x4AB SWAP2 SWAP1 PUSH2 0xB86 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE ISZERO ISZERO PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x518 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x52C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF213EF0E DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x55F JUMPI PUSH2 0x55F PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x576 SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x588 JUMPI PUSH2 0x588 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH2 0x120 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x5A2 SWAP2 SWAP1 PUSH2 0xB86 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE ISZERO ISZERO PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x60F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x623 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x571F03E5 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x655 JUMPI PUSH2 0x655 PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x66C SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x67E JUMPI PUSH2 0x67E PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH1 0xC0 ADD CALLDATALOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x6C7 SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6F5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x4B4E6753 DUP5 DUP5 DUP5 DUP2 DUP2 LT PUSH2 0x727 JUMPI PUSH2 0x727 PUSH2 0xB57 JUMP JUMPDEST PUSH2 0x73E SWAP3 PUSH1 0x20 PUSH2 0x140 SWAP1 SWAP3 MUL ADD SWAP1 DUP2 ADD SWAP2 POP PUSH2 0xB33 JUMP JUMPDEST DUP6 DUP6 DUP6 DUP2 DUP2 LT PUSH2 0x750 JUMPI PUSH2 0x750 PUSH2 0xB57 JUMP JUMPDEST SWAP1 POP PUSH2 0x140 MUL ADD PUSH1 0x80 ADD CALLDATALOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x799 SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 DUP1 PUSH2 0x7D6 SWAP1 PUSH2 0xBA8 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x136 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x865 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x12A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x955 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x12A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x9F8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x12A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xAA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xABF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0xACA DUP2 PUSH2 0xA85 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xAE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xAFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xB0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 PUSH2 0x140 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0xB20 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xB50 DUP2 PUSH2 0xA85 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xB50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0xC01 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAF MSIZE SWAP6 PUSH10 0xB5CEF4234DD4EF8EA277 0xD8 EXTCODECOPY 0xB5 PUSH29 0xEAFF64BDCDB2D55D18785456F9A064736F6C634300080A003300000000 ","sourceMap":"478:1785:23:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1236:1025;;;;;;:::i;:::-;;:::i;:::-;;1601:135:11;;;:::i;1018:71::-;1056:7;1078:6;1018:71;;;1078:6;;;;1182:74:201;;1018:71:11;;;;;1170:2:201;1018:71:11;;;1875:226;;;;;;:::i;:::-;;:::i;1236:1025:23:-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;1739:2:201;1196:67:11;;;1721:21:201;;;1758:18;;;1751:30;1817:34;1797:18;;;1790:62;1869:18;;1196:67:11;;;;;;;;;1382:9:23::1;1377:880;1397:22:::0;;::::1;1377:880;;;1434:12;:41;;;1485:11;;1497:1;1485:14;;;;;;;:::i;:::-;:20;::::0;::::1;:14;::::0;;::::1;;:20:::0;;::::1;::::0;-1:-1:-1;1485:20:23::1;:::i;:::-;1515:11;;1527:1;1515:14;;;;;;;:::i;:::-;;;;;;:22;;;1547:11;;1559:1;1547:14;;;;;;;:::i;:::-;;;;;;:35;;;1592:11;;1604:1;1592:14;;;;;;;:::i;:::-;1434:197;::::0;;::::1;::::0;;;;;;2348:42:201;2336:55;;;1434:197:23::1;::::0;::::1;2318:74:201::0;2408:18;;;2401:34;;;;-1:-1:-1;2451:18:201;;;2444:34;;;;1592:31:23::1;:14;::::0;;::::1;;:31;;2494:18:201::0;;;2487:34;2290:19;;1434:197:23::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1644:11;;1656:1;1644:14;;;;;;;:::i;:::-;;;;;;:31;;;;;;;;;;:::i;:::-;1640:343;;;1687:12;:32;;;1720:11;;1732:1;1720:14;;;;;;;:::i;:::-;:20;::::0;::::1;:14;::::0;;::::1;;:20:::0;;::::1;::::0;-1:-1:-1;1720:20:23::1;:::i;:::-;1687:60;::::0;;::::1;::::0;;;;;;3008:42:201;2996:55;;;1687:60:23::1;::::0;::::1;2978:74:201::0;1742:4:23::1;3068:18:201::0;;;3061:50;2951:18;;1687:60:23::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1758:12;:25;;;1784:11;;1796:1;1784:14;;;;;;;:::i;:::-;:20;::::0;::::1;:14;::::0;;::::1;;:20:::0;;::::1;::::0;-1:-1:-1;1784:20:23::1;:::i;:::-;1806:11;;1818:1;1806:14;;;;;;;:::i;:::-;;;;;;:24;;;1758:73;;;;;;;;;;;;;;;3326:42:201::0;3314:55;;;;3296:74;;3401:2;3386:18;;3379:34;3284:2;3269:18;;3122:297;1758:73:23::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1841:12;:42;;;1895:11;;1907:1;1895:14;;;;;;;:::i;:::-;:20;::::0;::::1;:14;::::0;;::::1;;:20:::0;;::::1;::::0;-1:-1:-1;1895:20:23::1;:::i;:::-;1927:11;;1939:1;1927:14;;;;;;;:::i;:::-;;;;;;:37;;;;;;;;;;:::i;:::-;1841:133;::::0;;::::1;::::0;;;;;;3008:42:201;2996:55;;;1841:133:23::1;::::0;::::1;2978:74:201::0;3095:14;3088:22;3068:18;;;3061:50;2951:18;;1841:133:23::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1640:343;1990:12;:35;;;2026:11;;2038:1;2026:14;;;;;;;:::i;:::-;:20;::::0;::::1;:14;::::0;;::::1;;:20:::0;;::::1;::::0;-1:-1:-1;2026:20:23::1;:::i;:::-;2048:11;;2060:1;2048:14;;;;;;;:::i;:::-;;;;;;:31;;;;;;;;;;:::i;:::-;1990:90;::::0;;::::1;::::0;;;;;;3008:42:201;2996:55;;;1990:90:23::1;::::0;::::1;2978:74:201::0;3095:14;3088:22;3068:18;;;3061:50;2951:18;;1990:90:23::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2088:12;:25;;;2114:11;;2126:1;2114:14;;;;;;;:::i;:::-;:20;::::0;::::1;:14;::::0;;::::1;;:20:::0;;::::1;::::0;-1:-1:-1;2114:20:23::1;:::i;:::-;2136:11;;2148:1;2136:14;;;;;;;:::i;:::-;;;;;;:24;;;2088:73;;;;;;;;;;;;;;;3326:42:201::0;3314:55;;;;3296:74;;3401:2;3386:18;;3379:34;3284:2;3269:18;;3122:297;2088:73:23::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2169:12;:29;;;2199:11;;2211:1;2199:14;;;;;;;:::i;:::-;:20;::::0;::::1;:14;::::0;;::::1;;:20:::0;;::::1;::::0;-1:-1:-1;2199:20:23::1;:::i;:::-;2221:11;;2233:1;2221:14;;;;;;;:::i;:::-;;;;;;:28;;;2169:81;;;;;;;;;;;;;;;3326:42:201::0;3314:55;;;;3296:74;;3401:2;3386:18;;3379:34;3284:2;3269:18;;3122:297;2169:81:23::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1421:3;;;;;:::i;:::-;;;;1377:880;;;;1236:1025:::0;;;:::o;1601:135:11:-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;1739:2:201;1196:67:11;;;1721:21:201;;;1758:18;;;1751:30;1817:34;1797:18;;;1790:62;1869:18;;1196:67:11;1537:356:201;1196:67:11;1703:1:::1;1687:6:::0;;1666:40:::1;::::0;::::1;1687:6:::0;;::::1;::::0;1666:40:::1;::::0;1703:1;;1666:40:::1;1729:1;1712:19:::0;;;::::1;::::0;;1601:135::o;1875:226::-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;1739:2:201;1196:67:11;;;1721:21:201;;;1758:18;;;1751:30;1817:34;1797:18;;;1790:62;1869:18;;1196:67:11;1537:356:201;1196:67:11;1959:22:::1;::::0;::::1;1951:73;;;::::0;::::1;::::0;;3980:2:201;1951:73:11::1;::::0;::::1;3962:21:201::0;4019:2;3999:18;;;3992:30;4058:34;4038:18;;;4031:62;4129:8;4109:18;;;4102:36;4155:19;;1951:73:11::1;3778:402:201::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;::::1;::::0;;::::1;::::0;2056:6;::::1;::::0;2035:38:::1;::::0;::::1;2079:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1875:226::o;14:172:201:-;118:42;111:5;107:54;100:5;97:65;87:93;;176:1;173;166:12;87:93;14:172;:::o;191:840::-;353:6;361;369;422:2;410:9;401:7;397:23;393:32;390:52;;;438:1;435;428:12;390:52;477:9;464:23;496:49;539:5;496:49;:::i;:::-;564:5;-1:-1:-1;620:2:201;605:18;;592:32;643:18;673:14;;;670:34;;;700:1;697;690:12;670:34;738:6;727:9;723:22;713:32;;783:7;776:4;772:2;768:13;764:27;754:55;;805:1;802;795:12;754:55;845:2;832:16;871:2;863:6;860:14;857:34;;;887:1;884;877:12;857:34;945:7;940:2;930:6;922;918:19;914:2;910:28;906:37;903:50;900:70;;;966:1;963;956:12;900:70;997:2;993;989:11;979:21;;1019:6;1009:16;;;;;191:840;;;;;:::o;1267:265::-;1326:6;1379:2;1367:9;1358:7;1354:23;1350:32;1347:52;;;1395:1;1392;1385:12;1347:52;1434:9;1421:23;1453:49;1496:5;1453:49;:::i;:::-;1521:5;1267:265;-1:-1:-1;;;1267:265:201:o;1898:184::-;1950:77;1947:1;1940:88;2047:4;2044:1;2037:15;2071:4;2068:1;2061:15;2532:273;2588:6;2641:2;2629:9;2620:7;2616:23;2612:32;2609:52;;;2657:1;2654;2647:12;2609:52;2696:9;2683:23;2749:5;2742:13;2735:21;2728:5;2725:32;2715:60;;2771:1;2768;2761:12;3424:349;3463:3;3494:66;3487:5;3484:77;3481:257;;;3594:77;3591:1;3584:88;3695:4;3692:1;3685:15;3723:4;3720:1;3713:15;3481:257;-1:-1:-1;3765:1:201;3754:13;;3424:349::o"},"gasEstimates":{"creation":{"codeDepositCost":"626800","executionCost":"26430","totalCost":"653230"},"external":{"configureReserves(address,(address,uint256,uint256,uint256,uint256,uint256,uint256,bool,bool,bool)[])":"infinite","owner()":"2302","renounceOwnership()":"30126","transferOwnership(address)":"30363"}},"methodIdentifiers":{"configureReserves(address,(address,uint256,uint256,uint256,uint256,uint256,uint256,bool,bool,bool)[])":"23bb1093","owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract PoolConfigurator\",\"name\":\"configurator\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseLTV\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationBonus\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowCap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyCap\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"stableBorrowingEnabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"borrowingEnabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"flashLoanEnabled\",\"type\":\"bool\"}],\"internalType\":\"struct ReservesSetupHelper.ConfigureReserveInput[]\",\"name\":\"inputParams\",\"type\":\"tuple[]\"}],\"name\":\"configureReserves\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"The ReservesSetupHelper is an Ownable contract, so only the deployer or future owners can call this contract.\",\"kind\":\"dev\",\"methods\":{\"configureReserves(address,(address,uint256,uint256,uint256,uint256,uint256,uint256,bool,bool,bool)[])\":{\"details\":\"The Pool or Risk admin must transfer the ownership to ReservesSetupHelper before calling this function\",\"params\":{\"configurator\":\"The address of PoolConfigurator contract\",\"inputParams\":\"An array of ConfigureReserveInput struct that contains the assets and their risk parameters\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"ReservesSetupHelper\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"configureReserves(address,(address,uint256,uint256,uint256,uint256,uint256,uint256,bool,bool,bool)[])\":{\"notice\":\"External function called by the owner account to setup the assets risk parameters in batch.\"}},\"notice\":\"Deployment helper to setup the assets risk parameters at PoolConfigurator in batch.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/deployments/ReservesSetupHelper.sol\":\"ReservesSetupHelper\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable is Context {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial owner.\\n   */\\n  constructor() {\\n    address msgSender = _msgSender();\\n    _owner = msgSender;\\n    emit OwnershipTransferred(address(0), msgSender);\\n  }\\n\\n  /**\\n   * @dev Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Leaves the contract without owner. It will not be possible to call\\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\\n   *\\n   * NOTE: Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public virtual onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = address(0);\\n  }\\n\\n  /**\\n   * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function transferOwnership(address newOwner) public virtual onlyOwner {\\n    require(newOwner != address(0), 'Ownable: new owner is the zero address');\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\",\"keccak256\":\"0x3ce185c4f579e32006f8893dbfdc1b5d878c0e2cafd1508f7ceb081698bc81f9\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './Proxy.sol';\\nimport '../contracts/Address.sol';\\n\\n/**\\n * @title BaseUpgradeabilityProxy\\n * @dev This contract implements a proxy that allows to change the\\n * implementation address to which it will delegate.\\n * Such a change is called an implementation upgrade.\\n */\\ncontract BaseUpgradeabilityProxy is Proxy {\\n  /**\\n   * @dev Emitted when the implementation is upgraded.\\n   * @param implementation Address of the new implementation.\\n   */\\n  event Upgraded(address indexed implementation);\\n\\n  /**\\n   * @dev Storage slot with the address of the current implementation.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant IMPLEMENTATION_SLOT =\\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n  /**\\n   * @dev Returns the current implementation.\\n   * @return impl Address of the current implementation\\n   */\\n  function _implementation() internal view override returns (address impl) {\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      impl := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Upgrades the proxy to a new implementation.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _upgradeTo(address newImplementation) internal {\\n    _setImplementation(newImplementation);\\n    emit Upgraded(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Sets the implementation address of the proxy.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _setImplementation(address newImplementation) internal {\\n    require(\\n      Address.isContract(newImplementation),\\n      'Cannot set a proxy implementation to a non-contract address'\\n    );\\n\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newImplementation)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe47eb278267d31f096fc643c2a322c72066abfa6ba07f6386c266fe7cbd15013\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableUpgradeabilityProxy\\n * @dev Extends BaseUpgradeabilityProxy with an initializer for initializing\\n * implementation and init data.\\n */\\ncontract InitializableUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Contract initializer.\\n   * @param _logic Address of the initial implementation.\\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\\n   */\\n  function initialize(address _logic, bytes memory _data) public payable {\\n    require(_implementation() == address(0));\\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\\n    _setImplementation(_logic);\\n    if (_data.length > 0) {\\n      (bool success, ) = _logic.delegatecall(_data);\\n      require(success);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x8a1e927b97f5da20f4640ba4d2588666910dfa89f5a2b0a37440d27e5a47ee08\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\n    assembly {\\n      // Copy msg.data. We take full control of memory in this inline assembly\\n      // block because it will not return to Solidity code. We overwrite the\\n      // Solidity scratch pad at memory position 0.\\n      calldatacopy(0, 0, calldatasize())\\n\\n      // Call the implementation.\\n      // out and outsize are 0 because we don't know the size yet.\\n      let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n      // Copy the returned data.\\n      returndatacopy(0, 0, returndatasize())\\n\\n      switch result\\n      // delegatecall returns 0 on error.\\n      case 0 {\\n        revert(0, returndatasize())\\n      }\\n      default {\\n        return(0, returndatasize())\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/deployments/ReservesSetupHelper.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {PoolConfigurator} from '../protocol/pool/PoolConfigurator.sol';\\nimport {Ownable} from '../dependencies/openzeppelin/contracts/Ownable.sol';\\n\\n/**\\n * @title ReservesSetupHelper\\n * @author Aave\\n * @notice Deployment helper to setup the assets risk parameters at PoolConfigurator in batch.\\n * @dev The ReservesSetupHelper is an Ownable contract, so only the deployer or future owners can call this contract.\\n */\\ncontract ReservesSetupHelper is Ownable {\\n  struct ConfigureReserveInput {\\n    address asset;\\n    uint256 baseLTV;\\n    uint256 liquidationThreshold;\\n    uint256 liquidationBonus;\\n    uint256 reserveFactor;\\n    uint256 borrowCap;\\n    uint256 supplyCap;\\n    bool stableBorrowingEnabled;\\n    bool borrowingEnabled;\\n    bool flashLoanEnabled;\\n  }\\n\\n  /**\\n   * @notice External function called by the owner account to setup the assets risk parameters in batch.\\n   * @dev The Pool or Risk admin must transfer the ownership to ReservesSetupHelper before calling this function\\n   * @param configurator The address of PoolConfigurator contract\\n   * @param inputParams An array of ConfigureReserveInput struct that contains the assets and their risk parameters\\n   */\\n  function configureReserves(\\n    PoolConfigurator configurator,\\n    ConfigureReserveInput[] calldata inputParams\\n  ) external onlyOwner {\\n    for (uint256 i = 0; i < inputParams.length; i++) {\\n      configurator.configureReserveAsCollateral(\\n        inputParams[i].asset,\\n        inputParams[i].baseLTV,\\n        inputParams[i].liquidationThreshold,\\n        inputParams[i].liquidationBonus\\n      );\\n\\n      if (inputParams[i].borrowingEnabled) {\\n        configurator.setReserveBorrowing(inputParams[i].asset, true);\\n\\n        configurator.setBorrowCap(inputParams[i].asset, inputParams[i].borrowCap);\\n        configurator.setReserveStableRateBorrowing(\\n          inputParams[i].asset,\\n          inputParams[i].stableBorrowingEnabled\\n        );\\n      }\\n      configurator.setReserveFlashLoaning(inputParams[i].asset, inputParams[i].flashLoanEnabled);\\n      configurator.setSupplyCap(inputParams[i].asset, inputParams[i].supplyCap);\\n      configurator.setReserveFactor(inputParams[i].asset, inputParams[i].reserveFactor);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x8390d348bdcd9558c6cef85a8413dfb011f350f386846a836aa9ba73fc40d0c3\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolConfigurator.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {ConfiguratorInputTypes} from '../protocol/libraries/types/ConfiguratorInputTypes.sol';\\n\\n/**\\n * @title IPoolConfigurator\\n * @author Aave\\n * @notice Defines the basic interface for a Pool configurator.\\n */\\ninterface IPoolConfigurator {\\n  /**\\n   * @dev Emitted when a reserve is initialized.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aToken The address of the associated aToken contract\\n   * @param stableDebtToken The address of the associated stable rate debt token\\n   * @param variableDebtToken The address of the associated variable rate debt token\\n   * @param interestRateStrategyAddress The address of the interest rate strategy for the reserve\\n   */\\n  event ReserveInitialized(\\n    address indexed asset,\\n    address indexed aToken,\\n    address stableDebtToken,\\n    address variableDebtToken,\\n    address interestRateStrategyAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when borrowing is enabled or disabled on a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if borrowing is enabled, false otherwise\\n   */\\n  event ReserveBorrowing(address indexed asset, bool enabled);\\n\\n  /**\\n   * @dev Emitted when flashloans are enabled or disabled on a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if flashloans are enabled, false otherwise\\n   */\\n  event ReserveFlashLoaning(address indexed asset, bool enabled);\\n\\n  /**\\n   * @dev Emitted when the collateralization risk parameters for the specified asset are updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param ltv The loan to value of the asset when used as collateral\\n   * @param liquidationThreshold The threshold at which loans using this asset as collateral will be considered undercollateralized\\n   * @param liquidationBonus The bonus liquidators receive to liquidate this asset\\n   */\\n  event CollateralConfigurationChanged(\\n    address indexed asset,\\n    uint256 ltv,\\n    uint256 liquidationThreshold,\\n    uint256 liquidationBonus\\n  );\\n\\n  /**\\n   * @dev Emitted when stable rate borrowing is enabled or disabled on a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if stable rate borrowing is enabled, false otherwise\\n   */\\n  event ReserveStableRateBorrowing(address indexed asset, bool enabled);\\n\\n  /**\\n   * @dev Emitted when a reserve is activated or deactivated\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param active True if reserve is active, false otherwise\\n   */\\n  event ReserveActive(address indexed asset, bool active);\\n\\n  /**\\n   * @dev Emitted when a reserve is frozen or unfrozen\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param frozen True if reserve is frozen, false otherwise\\n   */\\n  event ReserveFrozen(address indexed asset, bool frozen);\\n\\n  /**\\n   * @dev Emitted when a reserve is paused or unpaused\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param paused True if reserve is paused, false otherwise\\n   */\\n  event ReservePaused(address indexed asset, bool paused);\\n\\n  /**\\n   * @dev Emitted when a reserve is dropped.\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  event ReserveDropped(address indexed asset);\\n\\n  /**\\n   * @dev Emitted when a reserve factor is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldReserveFactor The old reserve factor, expressed in bps\\n   * @param newReserveFactor The new reserve factor, expressed in bps\\n   */\\n  event ReserveFactorChanged(\\n    address indexed asset,\\n    uint256 oldReserveFactor,\\n    uint256 newReserveFactor\\n  );\\n\\n  /**\\n   * @dev Emitted when the borrow cap of a reserve is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldBorrowCap The old borrow cap\\n   * @param newBorrowCap The new borrow cap\\n   */\\n  event BorrowCapChanged(address indexed asset, uint256 oldBorrowCap, uint256 newBorrowCap);\\n\\n  /**\\n   * @dev Emitted when the supply cap of a reserve is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldSupplyCap The old supply cap\\n   * @param newSupplyCap The new supply cap\\n   */\\n  event SupplyCapChanged(address indexed asset, uint256 oldSupplyCap, uint256 newSupplyCap);\\n\\n  /**\\n   * @dev Emitted when the liquidation protocol fee of a reserve is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldFee The old liquidation protocol fee, expressed in bps\\n   * @param newFee The new liquidation protocol fee, expressed in bps\\n   */\\n  event LiquidationProtocolFeeChanged(address indexed asset, uint256 oldFee, uint256 newFee);\\n\\n  /**\\n   * @dev Emitted when the unbacked mint cap of a reserve is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldUnbackedMintCap The old unbacked mint cap\\n   * @param newUnbackedMintCap The new unbacked mint cap\\n   */\\n  event UnbackedMintCapChanged(\\n    address indexed asset,\\n    uint256 oldUnbackedMintCap,\\n    uint256 newUnbackedMintCap\\n  );\\n\\n  /**\\n   * @dev Emitted when the category of an asset in eMode is changed.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldCategoryId The old eMode asset category\\n   * @param newCategoryId The new eMode asset category\\n   */\\n  event EModeAssetCategoryChanged(address indexed asset, uint8 oldCategoryId, uint8 newCategoryId);\\n\\n  /**\\n   * @dev Emitted when a new eMode category is added.\\n   * @param categoryId The new eMode category id\\n   * @param ltv The ltv for the asset category in eMode\\n   * @param liquidationThreshold The liquidationThreshold for the asset category in eMode\\n   * @param liquidationBonus The liquidationBonus for the asset category in eMode\\n   * @param oracle The optional address of the price oracle specific for this category\\n   * @param label A human readable identifier for the category\\n   */\\n  event EModeCategoryAdded(\\n    uint8 indexed categoryId,\\n    uint256 ltv,\\n    uint256 liquidationThreshold,\\n    uint256 liquidationBonus,\\n    address oracle,\\n    string label\\n  );\\n\\n  /**\\n   * @dev Emitted when a reserve interest strategy contract is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldStrategy The address of the old interest strategy contract\\n   * @param newStrategy The address of the new interest strategy contract\\n   */\\n  event ReserveInterestRateStrategyChanged(\\n    address indexed asset,\\n    address oldStrategy,\\n    address newStrategy\\n  );\\n\\n  /**\\n   * @dev Emitted when an aToken implementation is upgraded.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param proxy The aToken proxy address\\n   * @param implementation The new aToken implementation\\n   */\\n  event ATokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n\\n  /**\\n   * @dev Emitted when the implementation of a stable debt token is upgraded.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param proxy The stable debt token proxy address\\n   * @param implementation The new aToken implementation\\n   */\\n  event StableDebtTokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n\\n  /**\\n   * @dev Emitted when the implementation of a variable debt token is upgraded.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param proxy The variable debt token proxy address\\n   * @param implementation The new aToken implementation\\n   */\\n  event VariableDebtTokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n\\n  /**\\n   * @dev Emitted when the debt ceiling of an asset is set.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldDebtCeiling The old debt ceiling\\n   * @param newDebtCeiling The new debt ceiling\\n   */\\n  event DebtCeilingChanged(address indexed asset, uint256 oldDebtCeiling, uint256 newDebtCeiling);\\n\\n  /**\\n   * @dev Emitted when the the siloed borrowing state for an asset is changed.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldState The old siloed borrowing state\\n   * @param newState The new siloed borrowing state\\n   */\\n  event SiloedBorrowingChanged(address indexed asset, bool oldState, bool newState);\\n\\n  /**\\n   * @dev Emitted when the bridge protocol fee is updated.\\n   * @param oldBridgeProtocolFee The old protocol fee, expressed in bps\\n   * @param newBridgeProtocolFee The new protocol fee, expressed in bps\\n   */\\n  event BridgeProtocolFeeUpdated(uint256 oldBridgeProtocolFee, uint256 newBridgeProtocolFee);\\n\\n  /**\\n   * @dev Emitted when the total premium on flashloans is updated.\\n   * @param oldFlashloanPremiumTotal The old premium, expressed in bps\\n   * @param newFlashloanPremiumTotal The new premium, expressed in bps\\n   */\\n  event FlashloanPremiumTotalUpdated(\\n    uint128 oldFlashloanPremiumTotal,\\n    uint128 newFlashloanPremiumTotal\\n  );\\n\\n  /**\\n   * @dev Emitted when the part of the premium that goes to protocol is updated.\\n   * @param oldFlashloanPremiumToProtocol The old premium, expressed in bps\\n   * @param newFlashloanPremiumToProtocol The new premium, expressed in bps\\n   */\\n  event FlashloanPremiumToProtocolUpdated(\\n    uint128 oldFlashloanPremiumToProtocol,\\n    uint128 newFlashloanPremiumToProtocol\\n  );\\n\\n  /**\\n   * @dev Emitted when the reserve is set as borrowable/non borrowable in isolation mode.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param borrowable True if the reserve is borrowable in isolation, false otherwise\\n   */\\n  event BorrowableInIsolationChanged(address asset, bool borrowable);\\n\\n  /**\\n   * @notice Initializes multiple reserves.\\n   * @param input The array of initialization parameters\\n   */\\n  function initReserves(ConfiguratorInputTypes.InitReserveInput[] calldata input) external;\\n\\n  /**\\n   * @dev Updates the aToken implementation for the reserve.\\n   * @param input The aToken update parameters\\n   */\\n  function updateAToken(ConfiguratorInputTypes.UpdateATokenInput calldata input) external;\\n\\n  /**\\n   * @notice Updates the stable debt token implementation for the reserve.\\n   * @param input The stableDebtToken update parameters\\n   */\\n  function updateStableDebtToken(\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) external;\\n\\n  /**\\n   * @notice Updates the variable debt token implementation for the asset.\\n   * @param input The variableDebtToken update parameters\\n   */\\n  function updateVariableDebtToken(\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) external;\\n\\n  /**\\n   * @notice Configures borrowing on a reserve.\\n   * @dev Can only be disabled (set to false) if stable borrowing is disabled\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if borrowing needs to be enabled, false otherwise\\n   */\\n  function setReserveBorrowing(address asset, bool enabled) external;\\n\\n  /**\\n   * @notice Configures the reserve collateralization parameters.\\n   * @dev All the values are expressed in bps. A value of 10000, results in 100.00%\\n   * @dev The `liquidationBonus` is always above 100%. A value of 105% means the liquidator will receive a 5% bonus\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param ltv The loan to value of the asset when used as collateral\\n   * @param liquidationThreshold The threshold at which loans using this asset as collateral will be considered undercollateralized\\n   * @param liquidationBonus The bonus liquidators receive to liquidate this asset\\n   */\\n  function configureReserveAsCollateral(\\n    address asset,\\n    uint256 ltv,\\n    uint256 liquidationThreshold,\\n    uint256 liquidationBonus\\n  ) external;\\n\\n  /**\\n   * @notice Enable or disable stable rate borrowing on a reserve.\\n   * @dev Can only be enabled (set to true) if borrowing is enabled\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setReserveStableRateBorrowing(address asset, bool enabled) external;\\n\\n  /**\\n   * @notice Enable or disable flashloans on a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if flashloans need to be enabled, false otherwise\\n   */\\n  function setReserveFlashLoaning(address asset, bool enabled) external;\\n\\n  /**\\n   * @notice Activate or deactivate a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param active True if the reserve needs to be active, false otherwise\\n   */\\n  function setReserveActive(address asset, bool active) external;\\n\\n  /**\\n   * @notice Freeze or unfreeze a reserve. A frozen reserve doesn't allow any new supply, borrow\\n   * or rate swap but allows repayments, liquidations, rate rebalances and withdrawals.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param freeze True if the reserve needs to be frozen, false otherwise\\n   */\\n  function setReserveFreeze(address asset, bool freeze) external;\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the\\n   * borrowed amount will be accumulated in the isolated collateral's total debt exposure\\n   * @dev Only assets of the same family (e.g. USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param borrowable True if the asset should be borrowable in isolation, false otherwise\\n   */\\n  function setBorrowableInIsolation(address asset, bool borrowable) external;\\n\\n  /**\\n   * @notice Pauses a reserve. A paused reserve does not allow any interaction (supply, borrow, repay,\\n   * swap interest rate, liquidate, atoken transfers).\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param paused True if pausing the reserve, false if unpausing\\n   */\\n  function setReservePause(address asset, bool paused) external;\\n\\n  /**\\n   * @notice Updates the reserve factor of a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newReserveFactor The new reserve factor of the reserve\\n   */\\n  function setReserveFactor(address asset, uint256 newReserveFactor) external;\\n\\n  /**\\n   * @notice Sets the interest rate strategy of a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newRateStrategyAddress The address of the new interest strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address newRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Pauses or unpauses all the protocol reserves. In the paused state all the protocol interactions\\n   * are suspended.\\n   * @param paused True if protocol needs to be paused, false otherwise\\n   */\\n  function setPoolPause(bool paused) external;\\n\\n  /**\\n   * @notice Updates the borrow cap of a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newBorrowCap The new borrow cap of the reserve\\n   */\\n  function setBorrowCap(address asset, uint256 newBorrowCap) external;\\n\\n  /**\\n   * @notice Updates the supply cap of a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newSupplyCap The new supply cap of the reserve\\n   */\\n  function setSupplyCap(address asset, uint256 newSupplyCap) external;\\n\\n  /**\\n   * @notice Updates the liquidation protocol fee of reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newFee The new liquidation protocol fee of the reserve, expressed in bps\\n   */\\n  function setLiquidationProtocolFee(address asset, uint256 newFee) external;\\n\\n  /**\\n   * @notice Updates the unbacked mint cap of reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newUnbackedMintCap The new unbacked mint cap of the reserve\\n   */\\n  function setUnbackedMintCap(address asset, uint256 newUnbackedMintCap) external;\\n\\n  /**\\n   * @notice Assign an efficiency mode (eMode) category to asset.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newCategoryId The new category id of the asset\\n   */\\n  function setAssetEModeCategory(address asset, uint8 newCategoryId) external;\\n\\n  /**\\n   * @notice Adds a new efficiency mode (eMode) category.\\n   * @dev If zero is provided as oracle address, the default asset oracles will be used to compute the overall debt and\\n   * overcollateralization of the users using this category.\\n   * @dev The new ltv and liquidation threshold must be greater than the base\\n   * ltvs and liquidation thresholds of all assets within the eMode category\\n   * @param categoryId The id of the category to be configured\\n   * @param ltv The ltv associated with the category\\n   * @param liquidationThreshold The liquidation threshold associated with the category\\n   * @param liquidationBonus The liquidation bonus associated with the category\\n   * @param oracle The oracle associated with the category\\n   * @param label A label identifying the category\\n   */\\n  function setEModeCategory(\\n    uint8 categoryId,\\n    uint16 ltv,\\n    uint16 liquidationThreshold,\\n    uint16 liquidationBonus,\\n    address oracle,\\n    string calldata label\\n  ) external;\\n\\n  /**\\n   * @notice Drops a reserve entirely.\\n   * @param asset The address of the reserve to drop\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the bridge fee collected by the protocol reserves.\\n   * @param newBridgeProtocolFee The part of the fee sent to the protocol treasury, expressed in bps\\n   */\\n  function updateBridgeProtocolFee(uint256 newBridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates the total flash loan premium.\\n   * Total flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra balance\\n   * - A part is collected by the protocol reserves\\n   * @dev Expressed in bps\\n   * @dev The premium is calculated on the total amount borrowed\\n   * @param newFlashloanPremiumTotal The total flashloan premium\\n   */\\n  function updateFlashloanPremiumTotal(uint128 newFlashloanPremiumTotal) external;\\n\\n  /**\\n   * @notice Updates the flash loan premium collected by protocol reserves\\n   * @dev Expressed in bps\\n   * @dev The premium to protocol is calculated on the total flashloan premium\\n   * @param newFlashloanPremiumToProtocol The part of the flashloan premium sent to the protocol treasury\\n   */\\n  function updateFlashloanPremiumToProtocol(uint128 newFlashloanPremiumToProtocol) external;\\n\\n  /**\\n   * @notice Sets the debt ceiling for an asset.\\n   * @param newDebtCeiling The new debt ceiling\\n   */\\n  function setDebtCeiling(address asset, uint256 newDebtCeiling) external;\\n\\n  /**\\n   * @notice Sets siloed borrowing for an asset\\n   * @param siloed The new siloed borrowing state\\n   */\\n  function setSiloedBorrowing(address asset, bool siloed) external;\\n}\\n\",\"keccak256\":\"0xd9083035ef01cdab5f60a04f817f3449814f37d5ade136a3d4734447ede04d71\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolDataProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPoolDataProvider\\n * @author Aave\\n * @notice Defines the basic interface of a PoolDataProvider\\n */\\ninterface IPoolDataProvider {\\n  struct TokenData {\\n    string symbol;\\n    address tokenAddress;\\n  }\\n\\n  /**\\n   * @notice Returns the address for the PoolAddressesProvider contract.\\n   * @return The address for the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the list of the existing reserves in the pool.\\n   * @dev Handling MKR and ETH in a different way since they do not have standard `symbol` functions.\\n   * @return The list of reserves, pairs of symbols and addresses\\n   */\\n  function getAllReservesTokens() external view returns (TokenData[] memory);\\n\\n  /**\\n   * @notice Returns the list of the existing ATokens in the pool.\\n   * @return The list of ATokens, pairs of symbols and addresses\\n   */\\n  function getAllATokens() external view returns (TokenData[] memory);\\n\\n  /**\\n   * @notice Returns the configuration data of the reserve\\n   * @dev Not returning borrow and supply caps for compatibility, nor pause flag\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return decimals The number of decimals of the reserve\\n   * @return ltv The ltv of the reserve\\n   * @return liquidationThreshold The liquidationThreshold of the reserve\\n   * @return liquidationBonus The liquidationBonus of the reserve\\n   * @return reserveFactor The reserveFactor of the reserve\\n   * @return usageAsCollateralEnabled True if the usage as collateral is enabled, false otherwise\\n   * @return borrowingEnabled True if borrowing is enabled, false otherwise\\n   * @return stableBorrowRateEnabled True if stable rate borrowing is enabled, false otherwise\\n   * @return isActive True if it is active, false otherwise\\n   * @return isFrozen True if it is frozen, false otherwise\\n   */\\n  function getReserveConfigurationData(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 decimals,\\n      uint256 ltv,\\n      uint256 liquidationThreshold,\\n      uint256 liquidationBonus,\\n      uint256 reserveFactor,\\n      bool usageAsCollateralEnabled,\\n      bool borrowingEnabled,\\n      bool stableBorrowRateEnabled,\\n      bool isActive,\\n      bool isFrozen\\n    );\\n\\n  /**\\n   * @notice Returns the efficiency mode category of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The eMode id of the reserve\\n   */\\n  function getReserveEModeCategory(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the caps parameters of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return borrowCap The borrow cap of the reserve\\n   * @return supplyCap The supply cap of the reserve\\n   */\\n  function getReserveCaps(\\n    address asset\\n  ) external view returns (uint256 borrowCap, uint256 supplyCap);\\n\\n  /**\\n   * @notice Returns if the pool is paused\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return isPaused True if the pool is paused, false otherwise\\n   */\\n  function getPaused(address asset) external view returns (bool isPaused);\\n\\n  /**\\n   * @notice Returns the siloed borrowing flag\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return True if the asset is siloed for borrowing\\n   */\\n  function getSiloedBorrowing(address asset) external view returns (bool);\\n\\n  /**\\n   * @notice Returns the protocol fee on the liquidation bonus\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The protocol fee on liquidation\\n   */\\n  function getLiquidationProtocolFee(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the unbacked mint cap of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The unbacked mint cap of the reserve\\n   */\\n  function getUnbackedMintCap(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the debt ceiling of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getDebtCeiling(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the debt ceiling decimals\\n   * @return The debt ceiling decimals\\n   */\\n  function getDebtCeilingDecimals() external pure returns (uint256);\\n\\n  /**\\n   * @notice Returns the reserve data\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return unbacked The amount of unbacked tokens\\n   * @return accruedToTreasuryScaled The scaled amount of tokens accrued to treasury that is to be minted\\n   * @return totalAToken The total supply of the aToken\\n   * @return totalStableDebt The total stable debt of the reserve\\n   * @return totalVariableDebt The total variable debt of the reserve\\n   * @return liquidityRate The liquidity rate of the reserve\\n   * @return variableBorrowRate The variable borrow rate of the reserve\\n   * @return stableBorrowRate The stable borrow rate of the reserve\\n   * @return averageStableBorrowRate The average stable borrow rate of the reserve\\n   * @return liquidityIndex The liquidity index of the reserve\\n   * @return variableBorrowIndex The variable borrow index of the reserve\\n   * @return lastUpdateTimestamp The timestamp of the last update of the reserve\\n   */\\n  function getReserveData(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 unbacked,\\n      uint256 accruedToTreasuryScaled,\\n      uint256 totalAToken,\\n      uint256 totalStableDebt,\\n      uint256 totalVariableDebt,\\n      uint256 liquidityRate,\\n      uint256 variableBorrowRate,\\n      uint256 stableBorrowRate,\\n      uint256 averageStableBorrowRate,\\n      uint256 liquidityIndex,\\n      uint256 variableBorrowIndex,\\n      uint40 lastUpdateTimestamp\\n    );\\n\\n  /**\\n   * @notice Returns the total supply of aTokens for a given asset\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The total supply of the aToken\\n   */\\n  function getATokenTotalSupply(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total debt for a given asset\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The total debt for asset\\n   */\\n  function getTotalDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the user data in a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param user The address of the user\\n   * @return currentATokenBalance The current AToken balance of the user\\n   * @return currentStableDebt The current stable debt of the user\\n   * @return currentVariableDebt The current variable debt of the user\\n   * @return principalStableDebt The principal stable debt of the user\\n   * @return scaledVariableDebt The scaled variable debt of the user\\n   * @return stableBorrowRate The stable borrow rate of the user\\n   * @return liquidityRate The liquidity rate of the reserve\\n   * @return stableRateLastUpdated The timestamp of the last update of the user stable rate\\n   * @return usageAsCollateralEnabled True if the user is using the asset as collateral, false\\n   *         otherwise\\n   */\\n  function getUserReserveData(\\n    address asset,\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 currentATokenBalance,\\n      uint256 currentStableDebt,\\n      uint256 currentVariableDebt,\\n      uint256 principalStableDebt,\\n      uint256 scaledVariableDebt,\\n      uint256 stableBorrowRate,\\n      uint256 liquidityRate,\\n      uint40 stableRateLastUpdated,\\n      bool usageAsCollateralEnabled\\n    );\\n\\n  /**\\n   * @notice Returns the token addresses of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return aTokenAddress The AToken address of the reserve\\n   * @return stableDebtTokenAddress The StableDebtToken address of the reserve\\n   * @return variableDebtTokenAddress The VariableDebtToken address of the reserve\\n   */\\n  function getReserveTokensAddresses(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      address aTokenAddress,\\n      address stableDebtTokenAddress,\\n      address variableDebtTokenAddress\\n    );\\n\\n  /**\\n   * @notice Returns the address of the Interest Rate strategy\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return irStrategyAddress The address of the Interest Rate strategy\\n   */\\n  function getInterestRateStrategyAddress(\\n    address asset\\n  ) external view returns (address irStrategyAddress);\\n\\n  /**\\n   * @notice Returns whether the reserve has FlashLoans enabled or disabled\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return True if FlashLoans are enabled, false otherwise\\n   */\\n  function getFlashLoanEnabled(address asset) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xeb42959448d545d6ee49985e4212f54d01fe3c653f6f65cfc4061983df39bf1e\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {BaseUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title BaseImmutableAdminUpgradeabilityProxy\\n * @author Aave, inspired by the OpenZeppelin upgradeability proxy pattern\\n * @notice This contract combines an upgradeability proxy with an authorization\\n * mechanism for administrative tasks.\\n * @dev The admin role is stored in an immutable, which helps saving transactions costs\\n * All external functions in this contract must be guarded by the\\n * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\\n * feature proposal that would enable this to be done automatically.\\n */\\ncontract BaseImmutableAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  address internal immutable _admin;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param admin The address of the admin\\n   */\\n  constructor(address admin) {\\n    _admin = admin;\\n  }\\n\\n  modifier ifAdmin() {\\n    if (msg.sender == _admin) {\\n      _;\\n    } else {\\n      _fallback();\\n    }\\n  }\\n\\n  /**\\n   * @notice Return the admin address\\n   * @return The address of the proxy admin.\\n   */\\n  function admin() external ifAdmin returns (address) {\\n    return _admin;\\n  }\\n\\n  /**\\n   * @notice Return the implementation address\\n   * @return The address of the implementation.\\n   */\\n  function implementation() external ifAdmin returns (address) {\\n    return _implementation();\\n  }\\n\\n  /**\\n   * @notice Upgrade the backing implementation of the proxy.\\n   * @dev Only the admin can call this function.\\n   * @param newImplementation The address of the new implementation.\\n   */\\n  function upgradeTo(address newImplementation) external ifAdmin {\\n    _upgradeTo(newImplementation);\\n  }\\n\\n  /**\\n   * @notice Upgrade the backing implementation of the proxy and call a function\\n   * on the new implementation.\\n   * @dev This is useful to initialize the proxied contract.\\n   * @param newImplementation The address of the new implementation.\\n   * @param data Data to send as msg.data in the low level call.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   */\\n  function upgradeToAndCall(\\n    address newImplementation,\\n    bytes calldata data\\n  ) external payable ifAdmin {\\n    _upgradeTo(newImplementation);\\n    (bool success, ) = newImplementation.delegatecall(data);\\n    require(success);\\n  }\\n\\n  /**\\n   * @notice Only fall back when the sender is not the admin.\\n   */\\n  function _willFallback() internal virtual override {\\n    require(msg.sender != _admin, 'Cannot call fallback function from the proxy admin');\\n    super._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0x11d0bbbcb776fc3519b79af975016fa342115cff9e70d982acfe3b7f86683674\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {InitializableUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol';\\nimport {Proxy} from '../../../dependencies/openzeppelin/upgradeability/Proxy.sol';\\nimport {BaseImmutableAdminUpgradeabilityProxy} from './BaseImmutableAdminUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableAdminUpgradeabilityProxy\\n * @author Aave\\n * @dev Extends BaseAdminUpgradeabilityProxy with an initializer function\\n */\\ncontract InitializableImmutableAdminUpgradeabilityProxy is\\n  BaseImmutableAdminUpgradeabilityProxy,\\n  InitializableUpgradeabilityProxy\\n{\\n  /**\\n   * @dev Constructor.\\n   * @param admin The address of the admin\\n   */\\n  constructor(address admin) BaseImmutableAdminUpgradeabilityProxy(admin) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc BaseImmutableAdminUpgradeabilityProxy\\n  function _willFallback() internal override(BaseImmutableAdminUpgradeabilityProxy, Proxy) {\\n    BaseImmutableAdminUpgradeabilityProxy._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0xea2a329a627687f51e7f1240a05406efb208b036054dc6ed5aca217cdc0020f0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ConfiguratorLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IInitializableAToken} from '../../../interfaces/IInitializableAToken.sol';\\nimport {IInitializableDebtToken} from '../../../interfaces/IInitializableDebtToken.sol';\\nimport {InitializableImmutableAdminUpgradeabilityProxy} from '../aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ConfiguratorInputTypes} from '../types/ConfiguratorInputTypes.sol';\\n\\n/**\\n * @title ConfiguratorLogic library\\n * @author Aave\\n * @notice Implements the functions to initialize reserves and update aTokens and debtTokens\\n */\\nlibrary ConfiguratorLogic {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPoolConfigurator` for descriptions\\n  event ReserveInitialized(\\n    address indexed asset,\\n    address indexed aToken,\\n    address stableDebtToken,\\n    address variableDebtToken,\\n    address interestRateStrategyAddress\\n  );\\n  event ATokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n  event StableDebtTokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n  event VariableDebtTokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n\\n  /**\\n   * @notice Initialize a reserve by creating and initializing aToken, stable debt token and variable debt token\\n   * @dev Emits the `ReserveInitialized` event\\n   * @param pool The Pool in which the reserve will be initialized\\n   * @param input The needed parameters for the initialization\\n   */\\n  function executeInitReserve(\\n    IPool pool,\\n    ConfiguratorInputTypes.InitReserveInput calldata input\\n  ) public {\\n    address aTokenProxyAddress = _initTokenWithProxy(\\n      input.aTokenImpl,\\n      abi.encodeWithSelector(\\n        IInitializableAToken.initialize.selector,\\n        pool,\\n        input.treasury,\\n        input.underlyingAsset,\\n        input.incentivesController,\\n        input.underlyingAssetDecimals,\\n        input.aTokenName,\\n        input.aTokenSymbol,\\n        input.params\\n      )\\n    );\\n\\n    address stableDebtTokenProxyAddress = _initTokenWithProxy(\\n      input.stableDebtTokenImpl,\\n      abi.encodeWithSelector(\\n        IInitializableDebtToken.initialize.selector,\\n        pool,\\n        input.underlyingAsset,\\n        input.incentivesController,\\n        input.underlyingAssetDecimals,\\n        input.stableDebtTokenName,\\n        input.stableDebtTokenSymbol,\\n        input.params\\n      )\\n    );\\n\\n    address variableDebtTokenProxyAddress = _initTokenWithProxy(\\n      input.variableDebtTokenImpl,\\n      abi.encodeWithSelector(\\n        IInitializableDebtToken.initialize.selector,\\n        pool,\\n        input.underlyingAsset,\\n        input.incentivesController,\\n        input.underlyingAssetDecimals,\\n        input.variableDebtTokenName,\\n        input.variableDebtTokenSymbol,\\n        input.params\\n      )\\n    );\\n\\n    pool.initReserve(\\n      input.underlyingAsset,\\n      aTokenProxyAddress,\\n      stableDebtTokenProxyAddress,\\n      variableDebtTokenProxyAddress,\\n      input.interestRateStrategyAddress\\n    );\\n\\n    DataTypes.ReserveConfigurationMap memory currentConfig = DataTypes.ReserveConfigurationMap(0);\\n\\n    currentConfig.setDecimals(input.underlyingAssetDecimals);\\n\\n    currentConfig.setActive(true);\\n    currentConfig.setPaused(false);\\n    currentConfig.setFrozen(false);\\n\\n    pool.setConfiguration(input.underlyingAsset, currentConfig);\\n\\n    emit ReserveInitialized(\\n      input.underlyingAsset,\\n      aTokenProxyAddress,\\n      stableDebtTokenProxyAddress,\\n      variableDebtTokenProxyAddress,\\n      input.interestRateStrategyAddress\\n    );\\n  }\\n\\n  /**\\n   * @notice Updates the aToken implementation and initializes it\\n   * @dev Emits the `ATokenUpgraded` event\\n   * @param cachedPool The Pool containing the reserve with the aToken\\n   * @param input The parameters needed for the initialize call\\n   */\\n  function executeUpdateAToken(\\n    IPool cachedPool,\\n    ConfiguratorInputTypes.UpdateATokenInput calldata input\\n  ) public {\\n    DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);\\n\\n    (, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();\\n\\n    bytes memory encodedCall = abi.encodeWithSelector(\\n      IInitializableAToken.initialize.selector,\\n      cachedPool,\\n      input.treasury,\\n      input.asset,\\n      input.incentivesController,\\n      decimals,\\n      input.name,\\n      input.symbol,\\n      input.params\\n    );\\n\\n    _upgradeTokenImplementation(reserveData.aTokenAddress, input.implementation, encodedCall);\\n\\n    emit ATokenUpgraded(input.asset, reserveData.aTokenAddress, input.implementation);\\n  }\\n\\n  /**\\n   * @notice Updates the stable debt token implementation and initializes it\\n   * @dev Emits the `StableDebtTokenUpgraded` event\\n   * @param cachedPool The Pool containing the reserve with the stable debt token\\n   * @param input The parameters needed for the initialize call\\n   */\\n  function executeUpdateStableDebtToken(\\n    IPool cachedPool,\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) public {\\n    DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);\\n\\n    (, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();\\n\\n    bytes memory encodedCall = abi.encodeWithSelector(\\n      IInitializableDebtToken.initialize.selector,\\n      cachedPool,\\n      input.asset,\\n      input.incentivesController,\\n      decimals,\\n      input.name,\\n      input.symbol,\\n      input.params\\n    );\\n\\n    _upgradeTokenImplementation(\\n      reserveData.stableDebtTokenAddress,\\n      input.implementation,\\n      encodedCall\\n    );\\n\\n    emit StableDebtTokenUpgraded(\\n      input.asset,\\n      reserveData.stableDebtTokenAddress,\\n      input.implementation\\n    );\\n  }\\n\\n  /**\\n   * @notice Updates the variable debt token implementation and initializes it\\n   * @dev Emits the `VariableDebtTokenUpgraded` event\\n   * @param cachedPool The Pool containing the reserve with the variable debt token\\n   * @param input The parameters needed for the initialize call\\n   */\\n  function executeUpdateVariableDebtToken(\\n    IPool cachedPool,\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) public {\\n    DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);\\n\\n    (, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();\\n\\n    bytes memory encodedCall = abi.encodeWithSelector(\\n      IInitializableDebtToken.initialize.selector,\\n      cachedPool,\\n      input.asset,\\n      input.incentivesController,\\n      decimals,\\n      input.name,\\n      input.symbol,\\n      input.params\\n    );\\n\\n    _upgradeTokenImplementation(\\n      reserveData.variableDebtTokenAddress,\\n      input.implementation,\\n      encodedCall\\n    );\\n\\n    emit VariableDebtTokenUpgraded(\\n      input.asset,\\n      reserveData.variableDebtTokenAddress,\\n      input.implementation\\n    );\\n  }\\n\\n  /**\\n   * @notice Creates a new proxy and initializes the implementation\\n   * @param implementation The address of the implementation\\n   * @param initParams The parameters that is passed to the implementation to initialize\\n   * @return The address of initialized proxy\\n   */\\n  function _initTokenWithProxy(\\n    address implementation,\\n    bytes memory initParams\\n  ) internal returns (address) {\\n    InitializableImmutableAdminUpgradeabilityProxy proxy = new InitializableImmutableAdminUpgradeabilityProxy(\\n        address(this)\\n      );\\n\\n    proxy.initialize(implementation, initParams);\\n\\n    return address(proxy);\\n  }\\n\\n  /**\\n   * @notice Upgrades the implementation and makes call to the proxy\\n   * @dev The call is used to initialize the new implementation.\\n   * @param proxyAddress The address of the proxy\\n   * @param implementation The address of the new implementation\\n   * @param  initParams The parameters to the call after the upgrade\\n   */\\n  function _upgradeTokenImplementation(\\n    address proxyAddress,\\n    address implementation,\\n    bytes memory initParams\\n  ) internal {\\n    InitializableImmutableAdminUpgradeabilityProxy proxy = InitializableImmutableAdminUpgradeabilityProxy(\\n        payable(proxyAddress)\\n      );\\n\\n    proxy.upgradeToAndCall(implementation, initParams);\\n  }\\n}\\n\",\"keccak256\":\"0xfbf8cf6a8cbfb4c0624f76f1607ec76a58b7320e662309806ee79d6728b78fb7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/ConfiguratorInputTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary ConfiguratorInputTypes {\\n  struct InitReserveInput {\\n    address aTokenImpl;\\n    address stableDebtTokenImpl;\\n    address variableDebtTokenImpl;\\n    uint8 underlyingAssetDecimals;\\n    address interestRateStrategyAddress;\\n    address underlyingAsset;\\n    address treasury;\\n    address incentivesController;\\n    string aTokenName;\\n    string aTokenSymbol;\\n    string variableDebtTokenName;\\n    string variableDebtTokenSymbol;\\n    string stableDebtTokenName;\\n    string stableDebtTokenSymbol;\\n    bytes params;\\n  }\\n\\n  struct UpdateATokenInput {\\n    address asset;\\n    address treasury;\\n    address incentivesController;\\n    string name;\\n    string symbol;\\n    address implementation;\\n    bytes params;\\n  }\\n\\n  struct UpdateDebtTokenInput {\\n    address asset;\\n    address incentivesController;\\n    string name;\\n    string symbol;\\n    address implementation;\\n    bytes params;\\n  }\\n}\\n\",\"keccak256\":\"0x1fb622bd7b4f68289b727a824c92ab4c05b06f4aa8308c7d2b0ccb0f9ae63b0b\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/pool/PoolConfigurator.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {PercentageMath} from '../libraries/math/PercentageMath.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\nimport {ConfiguratorLogic} from '../libraries/logic/ConfiguratorLogic.sol';\\nimport {ConfiguratorInputTypes} from '../libraries/types/ConfiguratorInputTypes.sol';\\nimport {IPoolConfigurator} from '../../interfaces/IPoolConfigurator.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../interfaces/IACLManager.sol';\\nimport {IPoolDataProvider} from '../../interfaces/IPoolDataProvider.sol';\\n\\n/**\\n * @title PoolConfigurator\\n * @author Aave\\n * @dev Implements the configuration methods for the Aave protocol\\n */\\ncontract PoolConfigurator is VersionedInitializable, IPoolConfigurator {\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  IPoolAddressesProvider internal _addressesProvider;\\n  IPool internal _pool;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    _onlyPoolAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only emergency admin can call functions marked by this modifier.\\n   */\\n  modifier onlyEmergencyAdmin() {\\n    _onlyEmergencyAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only emergency or pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyEmergencyOrPoolAdmin() {\\n    _onlyPoolOrEmergencyAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only asset listing or pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyAssetListingOrPoolAdmins() {\\n    _onlyAssetListingOrPoolAdmins();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only risk or pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyRiskOrPoolAdmins() {\\n    _onlyRiskOrPoolAdmins();\\n    _;\\n  }\\n\\n  uint256 public constant CONFIGURATOR_REVISION = 0x1;\\n\\n  /// @inheritdoc VersionedInitializable\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return CONFIGURATOR_REVISION;\\n  }\\n\\n  function initialize(IPoolAddressesProvider provider) public initializer {\\n    _addressesProvider = provider;\\n    _pool = IPool(_addressesProvider.getPool());\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function initReserves(\\n    ConfiguratorInputTypes.InitReserveInput[] calldata input\\n  ) external override onlyAssetListingOrPoolAdmins {\\n    IPool cachedPool = _pool;\\n    for (uint256 i = 0; i < input.length; i++) {\\n      ConfiguratorLogic.executeInitReserve(cachedPool, input[i]);\\n    }\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function dropReserve(address asset) external override onlyPoolAdmin {\\n    _pool.dropReserve(asset);\\n    emit ReserveDropped(asset);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function updateAToken(\\n    ConfiguratorInputTypes.UpdateATokenInput calldata input\\n  ) external override onlyPoolAdmin {\\n    ConfiguratorLogic.executeUpdateAToken(_pool, input);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function updateStableDebtToken(\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) external override onlyPoolAdmin {\\n    ConfiguratorLogic.executeUpdateStableDebtToken(_pool, input);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function updateVariableDebtToken(\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) external override onlyPoolAdmin {\\n    ConfiguratorLogic.executeUpdateVariableDebtToken(_pool, input);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveBorrowing(address asset, bool enabled) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    if (!enabled) {\\n      require(!currentConfig.getStableRateBorrowingEnabled(), Errors.STABLE_BORROWING_ENABLED);\\n    }\\n    currentConfig.setBorrowingEnabled(enabled);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReserveBorrowing(asset, enabled);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function configureReserveAsCollateral(\\n    address asset,\\n    uint256 ltv,\\n    uint256 liquidationThreshold,\\n    uint256 liquidationBonus\\n  ) external override onlyRiskOrPoolAdmins {\\n    //validation of the parameters: the LTV can\\n    //only be lower or equal than the liquidation threshold\\n    //(otherwise a loan against the asset would cause instantaneous liquidation)\\n    require(ltv <= liquidationThreshold, Errors.INVALID_RESERVE_PARAMS);\\n\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n\\n    if (liquidationThreshold != 0) {\\n      //liquidation bonus must be bigger than 100.00%, otherwise the liquidator would receive less\\n      //collateral than needed to cover the debt\\n      require(liquidationBonus > PercentageMath.PERCENTAGE_FACTOR, Errors.INVALID_RESERVE_PARAMS);\\n\\n      //if threshold * bonus is less than PERCENTAGE_FACTOR, it's guaranteed that at the moment\\n      //a loan is taken there is enough collateral available to cover the liquidation bonus\\n      require(\\n        liquidationThreshold.percentMul(liquidationBonus) <= PercentageMath.PERCENTAGE_FACTOR,\\n        Errors.INVALID_RESERVE_PARAMS\\n      );\\n    } else {\\n      require(liquidationBonus == 0, Errors.INVALID_RESERVE_PARAMS);\\n      //if the liquidation threshold is being set to 0,\\n      // the reserve is being disabled as collateral. To do so,\\n      //we need to ensure no liquidity is supplied\\n      _checkNoSuppliers(asset);\\n    }\\n\\n    currentConfig.setLtv(ltv);\\n    currentConfig.setLiquidationThreshold(liquidationThreshold);\\n    currentConfig.setLiquidationBonus(liquidationBonus);\\n\\n    _pool.setConfiguration(asset, currentConfig);\\n\\n    emit CollateralConfigurationChanged(asset, ltv, liquidationThreshold, liquidationBonus);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveStableRateBorrowing(\\n    address asset,\\n    bool enabled\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    if (enabled) {\\n      require(currentConfig.getBorrowingEnabled(), Errors.BORROWING_NOT_ENABLED);\\n    }\\n    currentConfig.setStableRateBorrowingEnabled(enabled);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReserveStableRateBorrowing(asset, enabled);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveFlashLoaning(\\n    address asset,\\n    bool enabled\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n\\n    currentConfig.setFlashLoanEnabled(enabled);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReserveFlashLoaning(asset, enabled);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveActive(address asset, bool active) external override onlyPoolAdmin {\\n    if (!active) _checkNoSuppliers(asset);\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    currentConfig.setActive(active);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReserveActive(asset, active);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveFreeze(address asset, bool freeze) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    currentConfig.setFrozen(freeze);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReserveFrozen(asset, freeze);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setBorrowableInIsolation(\\n    address asset,\\n    bool borrowable\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    currentConfig.setBorrowableInIsolation(borrowable);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit BorrowableInIsolationChanged(asset, borrowable);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReservePause(address asset, bool paused) public override onlyEmergencyOrPoolAdmin {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    currentConfig.setPaused(paused);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReservePaused(asset, paused);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveFactor(\\n    address asset,\\n    uint256 newReserveFactor\\n  ) external override onlyRiskOrPoolAdmins {\\n    require(newReserveFactor <= PercentageMath.PERCENTAGE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    uint256 oldReserveFactor = currentConfig.getReserveFactor();\\n    currentConfig.setReserveFactor(newReserveFactor);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReserveFactorChanged(asset, oldReserveFactor, newReserveFactor);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setDebtCeiling(\\n    address asset,\\n    uint256 newDebtCeiling\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n\\n    uint256 oldDebtCeiling = currentConfig.getDebtCeiling();\\n    if (oldDebtCeiling == 0) {\\n      _checkNoSuppliers(asset);\\n    }\\n    currentConfig.setDebtCeiling(newDebtCeiling);\\n    _pool.setConfiguration(asset, currentConfig);\\n\\n    if (newDebtCeiling == 0) {\\n      _pool.resetIsolationModeTotalDebt(asset);\\n    }\\n\\n    emit DebtCeilingChanged(asset, oldDebtCeiling, newDebtCeiling);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setSiloedBorrowing(\\n    address asset,\\n    bool newSiloed\\n  ) external override onlyRiskOrPoolAdmins {\\n    if (newSiloed) {\\n      _checkNoBorrowers(asset);\\n    }\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n\\n    bool oldSiloed = currentConfig.getSiloedBorrowing();\\n\\n    currentConfig.setSiloedBorrowing(newSiloed);\\n\\n    _pool.setConfiguration(asset, currentConfig);\\n\\n    emit SiloedBorrowingChanged(asset, oldSiloed, newSiloed);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setBorrowCap(\\n    address asset,\\n    uint256 newBorrowCap\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    uint256 oldBorrowCap = currentConfig.getBorrowCap();\\n    currentConfig.setBorrowCap(newBorrowCap);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit BorrowCapChanged(asset, oldBorrowCap, newBorrowCap);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setSupplyCap(\\n    address asset,\\n    uint256 newSupplyCap\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    uint256 oldSupplyCap = currentConfig.getSupplyCap();\\n    currentConfig.setSupplyCap(newSupplyCap);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit SupplyCapChanged(asset, oldSupplyCap, newSupplyCap);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setLiquidationProtocolFee(\\n    address asset,\\n    uint256 newFee\\n  ) external override onlyRiskOrPoolAdmins {\\n    require(newFee <= PercentageMath.PERCENTAGE_FACTOR, Errors.INVALID_LIQUIDATION_PROTOCOL_FEE);\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    uint256 oldFee = currentConfig.getLiquidationProtocolFee();\\n    currentConfig.setLiquidationProtocolFee(newFee);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit LiquidationProtocolFeeChanged(asset, oldFee, newFee);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setEModeCategory(\\n    uint8 categoryId,\\n    uint16 ltv,\\n    uint16 liquidationThreshold,\\n    uint16 liquidationBonus,\\n    address oracle,\\n    string calldata label\\n  ) external override onlyRiskOrPoolAdmins {\\n    require(ltv != 0, Errors.INVALID_EMODE_CATEGORY_PARAMS);\\n    require(liquidationThreshold != 0, Errors.INVALID_EMODE_CATEGORY_PARAMS);\\n\\n    // validation of the parameters: the LTV can\\n    // only be lower or equal than the liquidation threshold\\n    // (otherwise a loan against the asset would cause instantaneous liquidation)\\n    require(ltv <= liquidationThreshold, Errors.INVALID_EMODE_CATEGORY_PARAMS);\\n    require(\\n      liquidationBonus > PercentageMath.PERCENTAGE_FACTOR,\\n      Errors.INVALID_EMODE_CATEGORY_PARAMS\\n    );\\n\\n    // if threshold * bonus is less than PERCENTAGE_FACTOR, it's guaranteed that at the moment\\n    // a loan is taken there is enough collateral available to cover the liquidation bonus\\n    require(\\n      uint256(liquidationThreshold).percentMul(liquidationBonus) <=\\n        PercentageMath.PERCENTAGE_FACTOR,\\n      Errors.INVALID_EMODE_CATEGORY_PARAMS\\n    );\\n\\n    address[] memory reserves = _pool.getReservesList();\\n    for (uint256 i = 0; i < reserves.length; i++) {\\n      DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(reserves[i]);\\n      if (categoryId == currentConfig.getEModeCategory()) {\\n        require(ltv > currentConfig.getLtv(), Errors.INVALID_EMODE_CATEGORY_PARAMS);\\n        require(\\n          liquidationThreshold > currentConfig.getLiquidationThreshold(),\\n          Errors.INVALID_EMODE_CATEGORY_PARAMS\\n        );\\n      }\\n    }\\n\\n    _pool.configureEModeCategory(\\n      categoryId,\\n      DataTypes.EModeCategory({\\n        ltv: ltv,\\n        liquidationThreshold: liquidationThreshold,\\n        liquidationBonus: liquidationBonus,\\n        priceSource: oracle,\\n        label: label\\n      })\\n    );\\n    emit EModeCategoryAdded(categoryId, ltv, liquidationThreshold, liquidationBonus, oracle, label);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setAssetEModeCategory(\\n    address asset,\\n    uint8 newCategoryId\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n\\n    if (newCategoryId != 0) {\\n      DataTypes.EModeCategory memory categoryData = _pool.getEModeCategoryData(newCategoryId);\\n      require(\\n        categoryData.liquidationThreshold > currentConfig.getLiquidationThreshold(),\\n        Errors.INVALID_EMODE_CATEGORY_ASSIGNMENT\\n      );\\n    }\\n    uint256 oldCategoryId = currentConfig.getEModeCategory();\\n    currentConfig.setEModeCategory(newCategoryId);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit EModeAssetCategoryChanged(asset, uint8(oldCategoryId), newCategoryId);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setUnbackedMintCap(\\n    address asset,\\n    uint256 newUnbackedMintCap\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    uint256 oldUnbackedMintCap = currentConfig.getUnbackedMintCap();\\n    currentConfig.setUnbackedMintCap(newUnbackedMintCap);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit UnbackedMintCapChanged(asset, oldUnbackedMintCap, newUnbackedMintCap);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address newRateStrategyAddress\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveData memory reserve = _pool.getReserveData(asset);\\n    address oldRateStrategyAddress = reserve.interestRateStrategyAddress;\\n    _pool.setReserveInterestRateStrategyAddress(asset, newRateStrategyAddress);\\n    emit ReserveInterestRateStrategyChanged(asset, oldRateStrategyAddress, newRateStrategyAddress);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setPoolPause(bool paused) external override onlyEmergencyAdmin {\\n    address[] memory reserves = _pool.getReservesList();\\n\\n    for (uint256 i = 0; i < reserves.length; i++) {\\n      if (reserves[i] != address(0)) {\\n        setReservePause(reserves[i], paused);\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function updateBridgeProtocolFee(uint256 newBridgeProtocolFee) external override onlyPoolAdmin {\\n    require(\\n      newBridgeProtocolFee <= PercentageMath.PERCENTAGE_FACTOR,\\n      Errors.BRIDGE_PROTOCOL_FEE_INVALID\\n    );\\n    uint256 oldBridgeProtocolFee = _pool.BRIDGE_PROTOCOL_FEE();\\n    _pool.updateBridgeProtocolFee(newBridgeProtocolFee);\\n    emit BridgeProtocolFeeUpdated(oldBridgeProtocolFee, newBridgeProtocolFee);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function updateFlashloanPremiumTotal(\\n    uint128 newFlashloanPremiumTotal\\n  ) external override onlyPoolAdmin {\\n    require(\\n      newFlashloanPremiumTotal <= PercentageMath.PERCENTAGE_FACTOR,\\n      Errors.FLASHLOAN_PREMIUM_INVALID\\n    );\\n    uint128 oldFlashloanPremiumTotal = _pool.FLASHLOAN_PREMIUM_TOTAL();\\n    _pool.updateFlashloanPremiums(newFlashloanPremiumTotal, _pool.FLASHLOAN_PREMIUM_TO_PROTOCOL());\\n    emit FlashloanPremiumTotalUpdated(oldFlashloanPremiumTotal, newFlashloanPremiumTotal);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function updateFlashloanPremiumToProtocol(\\n    uint128 newFlashloanPremiumToProtocol\\n  ) external override onlyPoolAdmin {\\n    require(\\n      newFlashloanPremiumToProtocol <= PercentageMath.PERCENTAGE_FACTOR,\\n      Errors.FLASHLOAN_PREMIUM_INVALID\\n    );\\n    uint128 oldFlashloanPremiumToProtocol = _pool.FLASHLOAN_PREMIUM_TO_PROTOCOL();\\n    _pool.updateFlashloanPremiums(_pool.FLASHLOAN_PREMIUM_TOTAL(), newFlashloanPremiumToProtocol);\\n    emit FlashloanPremiumToProtocolUpdated(\\n      oldFlashloanPremiumToProtocol,\\n      newFlashloanPremiumToProtocol\\n    );\\n  }\\n\\n  function _checkNoSuppliers(address asset) internal view {\\n    (, uint256 accruedToTreasury, uint256 totalATokens, , , , , , , , , ) = IPoolDataProvider(\\n      _addressesProvider.getPoolDataProvider()\\n    ).getReserveData(asset);\\n\\n    require(totalATokens == 0 && accruedToTreasury == 0, Errors.RESERVE_LIQUIDITY_NOT_ZERO);\\n  }\\n\\n  function _checkNoBorrowers(address asset) internal view {\\n    uint256 totalDebt = IPoolDataProvider(_addressesProvider.getPoolDataProvider()).getTotalDebt(\\n      asset\\n    );\\n    require(totalDebt == 0, Errors.RESERVE_DEBT_NOT_ZERO);\\n  }\\n\\n  function _onlyPoolAdmin() internal view {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n  }\\n\\n  function _onlyEmergencyAdmin() internal view {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isEmergencyAdmin(msg.sender), Errors.CALLER_NOT_EMERGENCY_ADMIN);\\n  }\\n\\n  function _onlyPoolOrEmergencyAdmin() internal view {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(\\n      aclManager.isPoolAdmin(msg.sender) || aclManager.isEmergencyAdmin(msg.sender),\\n      Errors.CALLER_NOT_POOL_OR_EMERGENCY_ADMIN\\n    );\\n  }\\n\\n  function _onlyAssetListingOrPoolAdmins() internal view {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(\\n      aclManager.isAssetListingAdmin(msg.sender) || aclManager.isPoolAdmin(msg.sender),\\n      Errors.CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN\\n    );\\n  }\\n\\n  function _onlyRiskOrPoolAdmins() internal view {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(\\n      aclManager.isRiskAdmin(msg.sender) || aclManager.isPoolAdmin(msg.sender),\\n      Errors.CALLER_NOT_RISK_OR_POOL_ADMIN\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x1842366a68e5295a64ff36326bf6055647749bedcd219ca9e385c90c09488edd\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1472,"contract":"@aave/core-v3/contracts/deployments/ReservesSetupHelper.sol:ReservesSetupHelper","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{"configureReserves(address,(address,uint256,uint256,uint256,uint256,uint256,uint256,bool,bool,bool)[])":{"notice":"External function called by the owner account to setup the assets risk parameters in batch."}},"notice":"Deployment helper to setup the assets risk parameters at PoolConfigurator in batch.","version":1}}},"@aave/core-v3/contracts/flashloan/base/FlashLoanReceiverBase.sol":{"FlashLoanReceiverBase":{"abi":[{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"premiums","type":"uint256[]"},{"internalType":"address","name":"initiator","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"executeOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"executeOperation(address[],uint256[],uint256[],address,bytes)":{"details":"Ensure that the contract can return the debt + premium, e.g., has      enough funds to repay and has approved the Pool to pull the total amount","params":{"amounts":"The amounts of the flash-borrowed assets","assets":"The addresses of the flash-borrowed assets","initiator":"The address of the flashloan initiator","params":"The byte-encoded params passed when initiating the flashloan","premiums":"The fee of each flash-borrowed asset"},"returns":{"_0":"True if the execution of the operation succeeds, false otherwise"}}},"title":"FlashLoanReceiverBase","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","POOL()":"7535d246","executeOperation(address[],uint256[],uint256[],address,bytes)":"920f5c84"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"premiums\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"executeOperation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"executeOperation(address[],uint256[],uint256[],address,bytes)\":{\"details\":\"Ensure that the contract can return the debt + premium, e.g., has      enough funds to repay and has approved the Pool to pull the total amount\",\"params\":{\"amounts\":\"The amounts of the flash-borrowed assets\",\"assets\":\"The addresses of the flash-borrowed assets\",\"initiator\":\"The address of the flashloan initiator\",\"params\":\"The byte-encoded params passed when initiating the flashloan\",\"premiums\":\"The fee of each flash-borrowed asset\"},\"returns\":{\"_0\":\"True if the execution of the operation succeeds, false otherwise\"}}},\"title\":\"FlashLoanReceiverBase\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeOperation(address[],uint256[],uint256[],address,bytes)\":{\"notice\":\"Executes an operation after receiving the flash-borrowed assets\"}},\"notice\":\"Base contract to develop a flashloan-receiver contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/flashloan/base/FlashLoanReceiverBase.sol\":\"FlashLoanReceiverBase\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/flashloan/base/FlashLoanReceiverBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IFlashLoanReceiver} from '../interfaces/IFlashLoanReceiver.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title FlashLoanReceiverBase\\n * @author Aave\\n * @notice Base contract to develop a flashloan-receiver contract.\\n */\\nabstract contract FlashLoanReceiverBase is IFlashLoanReceiver {\\n  IPoolAddressesProvider public immutable override ADDRESSES_PROVIDER;\\n  IPool public immutable override POOL;\\n\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n    POOL = IPool(provider.getPool());\\n  }\\n}\\n\",\"keccak256\":\"0xe32679c5957b705034b3b03a84103b9c6ca137d12de656e5eead2c404bc9a382\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed assets\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param assets The addresses of the flash-borrowed assets\\n   * @param amounts The amounts of the flash-borrowed assets\\n   * @param premiums The fee of each flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata premiums,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0x0c7446b978d8044330dea7a491768498ac4052e2b3ca02d1b86ce32ea63b3810\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeOperation(address[],uint256[],uint256[],address,bytes)":{"notice":"Executes an operation after receiving the flash-borrowed assets"}},"notice":"Base contract to develop a flashloan-receiver contract.","version":1}}},"@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol":{"FlashLoanSimpleReceiverBase":{"abi":[{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"premium","type":"uint256"},{"internalType":"address","name":"initiator","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"executeOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"executeOperation(address,uint256,uint256,address,bytes)":{"details":"Ensure that the contract can return the debt + premium, e.g., has      enough funds to repay and has approved the Pool to pull the total amount","params":{"amount":"The amount of the flash-borrowed asset","asset":"The address of the flash-borrowed asset","initiator":"The address of the flashloan initiator","params":"The byte-encoded params passed when initiating the flashloan","premium":"The fee of the flash-borrowed asset"},"returns":{"_0":"True if the execution of the operation succeeds, false otherwise"}}},"title":"FlashLoanSimpleReceiverBase","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","POOL()":"7535d246","executeOperation(address,uint256,uint256,address,bytes)":"1b11d0ff"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"premium\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"executeOperation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"executeOperation(address,uint256,uint256,address,bytes)\":{\"details\":\"Ensure that the contract can return the debt + premium, e.g., has      enough funds to repay and has approved the Pool to pull the total amount\",\"params\":{\"amount\":\"The amount of the flash-borrowed asset\",\"asset\":\"The address of the flash-borrowed asset\",\"initiator\":\"The address of the flashloan initiator\",\"params\":\"The byte-encoded params passed when initiating the flashloan\",\"premium\":\"The fee of the flash-borrowed asset\"},\"returns\":{\"_0\":\"True if the execution of the operation succeeds, false otherwise\"}}},\"title\":\"FlashLoanSimpleReceiverBase\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeOperation(address,uint256,uint256,address,bytes)\":{\"notice\":\"Executes an operation after receiving the flash-borrowed asset\"}},\"notice\":\"Base contract to develop a flashloan-receiver contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol\":\"FlashLoanSimpleReceiverBase\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IFlashLoanSimpleReceiver} from '../interfaces/IFlashLoanSimpleReceiver.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title FlashLoanSimpleReceiverBase\\n * @author Aave\\n * @notice Base contract to develop a flashloan-receiver contract.\\n */\\nabstract contract FlashLoanSimpleReceiverBase is IFlashLoanSimpleReceiver {\\n  IPoolAddressesProvider public immutable override ADDRESSES_PROVIDER;\\n  IPool public immutable override POOL;\\n\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n    POOL = IPool(provider.getPool());\\n  }\\n}\\n\",\"keccak256\":\"0x3a04fc046c4f04c71ff230eba56e56bb718be41e4317f0c938bd287d81e384b1\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanSimpleReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanSimpleReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed asset\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param asset The address of the flash-borrowed asset\\n   * @param amount The amount of the flash-borrowed asset\\n   * @param premium The fee of the flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0xba50a7834ddfdca3e3cfac09043f72699be42ff88925641ac30950a434b2b2ff\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeOperation(address,uint256,uint256,address,bytes)":{"notice":"Executes an operation after receiving the flash-borrowed asset"}},"notice":"Base contract to develop a flashloan-receiver contract.","version":1}}},"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanReceiver.sol":{"IFlashLoanReceiver":{"abi":[{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"premiums","type":"uint256[]"},{"internalType":"address","name":"initiator","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"executeOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","details":"Implement this interface to develop a flashloan-compatible flashLoanReceiver contract","kind":"dev","methods":{"executeOperation(address[],uint256[],uint256[],address,bytes)":{"details":"Ensure that the contract can return the debt + premium, e.g., has      enough funds to repay and has approved the Pool to pull the total amount","params":{"amounts":"The amounts of the flash-borrowed assets","assets":"The addresses of the flash-borrowed assets","initiator":"The address of the flashloan initiator","params":"The byte-encoded params passed when initiating the flashloan","premiums":"The fee of each flash-borrowed asset"},"returns":{"_0":"True if the execution of the operation succeeds, false otherwise"}}},"title":"IFlashLoanReceiver","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","POOL()":"7535d246","executeOperation(address[],uint256[],uint256[],address,bytes)":"920f5c84"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"premiums\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"executeOperation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\",\"kind\":\"dev\",\"methods\":{\"executeOperation(address[],uint256[],uint256[],address,bytes)\":{\"details\":\"Ensure that the contract can return the debt + premium, e.g., has      enough funds to repay and has approved the Pool to pull the total amount\",\"params\":{\"amounts\":\"The amounts of the flash-borrowed assets\",\"assets\":\"The addresses of the flash-borrowed assets\",\"initiator\":\"The address of the flashloan initiator\",\"params\":\"The byte-encoded params passed when initiating the flashloan\",\"premiums\":\"The fee of each flash-borrowed asset\"},\"returns\":{\"_0\":\"True if the execution of the operation succeeds, false otherwise\"}}},\"title\":\"IFlashLoanReceiver\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeOperation(address[],uint256[],uint256[],address,bytes)\":{\"notice\":\"Executes an operation after receiving the flash-borrowed assets\"}},\"notice\":\"Defines the basic interface of a flashloan-receiver contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanReceiver.sol\":\"IFlashLoanReceiver\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed assets\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param assets The addresses of the flash-borrowed assets\\n   * @param amounts The amounts of the flash-borrowed assets\\n   * @param premiums The fee of each flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata premiums,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0x0c7446b978d8044330dea7a491768498ac4052e2b3ca02d1b86ce32ea63b3810\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeOperation(address[],uint256[],uint256[],address,bytes)":{"notice":"Executes an operation after receiving the flash-borrowed assets"}},"notice":"Defines the basic interface of a flashloan-receiver contract.","version":1}}},"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol":{"IFlashLoanSimpleReceiver":{"abi":[{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"premium","type":"uint256"},{"internalType":"address","name":"initiator","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"executeOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","details":"Implement this interface to develop a flashloan-compatible flashLoanReceiver contract","kind":"dev","methods":{"executeOperation(address,uint256,uint256,address,bytes)":{"details":"Ensure that the contract can return the debt + premium, e.g., has      enough funds to repay and has approved the Pool to pull the total amount","params":{"amount":"The amount of the flash-borrowed asset","asset":"The address of the flash-borrowed asset","initiator":"The address of the flashloan initiator","params":"The byte-encoded params passed when initiating the flashloan","premium":"The fee of the flash-borrowed asset"},"returns":{"_0":"True if the execution of the operation succeeds, false otherwise"}}},"title":"IFlashLoanSimpleReceiver","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","POOL()":"7535d246","executeOperation(address,uint256,uint256,address,bytes)":"1b11d0ff"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"premium\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"executeOperation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\",\"kind\":\"dev\",\"methods\":{\"executeOperation(address,uint256,uint256,address,bytes)\":{\"details\":\"Ensure that the contract can return the debt + premium, e.g., has      enough funds to repay and has approved the Pool to pull the total amount\",\"params\":{\"amount\":\"The amount of the flash-borrowed asset\",\"asset\":\"The address of the flash-borrowed asset\",\"initiator\":\"The address of the flashloan initiator\",\"params\":\"The byte-encoded params passed when initiating the flashloan\",\"premium\":\"The fee of the flash-borrowed asset\"},\"returns\":{\"_0\":\"True if the execution of the operation succeeds, false otherwise\"}}},\"title\":\"IFlashLoanSimpleReceiver\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeOperation(address,uint256,uint256,address,bytes)\":{\"notice\":\"Executes an operation after receiving the flash-borrowed asset\"}},\"notice\":\"Defines the basic interface of a flashloan-receiver contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol\":\"IFlashLoanSimpleReceiver\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanSimpleReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanSimpleReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed asset\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param asset The address of the flash-borrowed asset\\n   * @param amount The amount of the flash-borrowed asset\\n   * @param premium The fee of the flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0xba50a7834ddfdca3e3cfac09043f72699be42ff88925641ac30950a434b2b2ff\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeOperation(address,uint256,uint256,address,bytes)":{"notice":"Executes an operation after receiving the flash-borrowed asset"}},"notice":"Defines the basic interface of a flashloan-receiver contract.","version":1}}},"@aave/core-v3/contracts/interfaces/IACLManager.sol":{"IACLManager":{"abi":[{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ASSET_LISTING_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BRIDGE_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EMERGENCY_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASH_BORROWER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RISK_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"addAssetListingAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bridge","type":"address"}],"name":"addBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"addEmergencyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"}],"name":"addFlashBorrower","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"addPoolAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"addRiskAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"isAssetListingAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"bridge","type":"address"}],"name":"isBridge","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"isEmergencyAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"}],"name":"isFlashBorrower","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"isPoolAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"isRiskAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"removeAssetListingAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bridge","type":"address"}],"name":"removeBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"removeEmergencyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"}],"name":"removeFlashBorrower","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"removePoolAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"removeRiskAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"bytes32","name":"adminRole","type":"bytes32"}],"name":"setRoleAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"ADDRESSES_PROVIDER()":{"returns":{"_0":"The address of the PoolAddressesProvider"}},"ASSET_LISTING_ADMIN_ROLE()":{"returns":{"_0":"The id of the AssetListingAdmin role"}},"BRIDGE_ROLE()":{"returns":{"_0":"The id of the Bridge role"}},"EMERGENCY_ADMIN_ROLE()":{"returns":{"_0":"The id of the EmergencyAdmin role"}},"FLASH_BORROWER_ROLE()":{"returns":{"_0":"The id of the FlashBorrower role"}},"POOL_ADMIN_ROLE()":{"returns":{"_0":"The id of the PoolAdmin role"}},"RISK_ADMIN_ROLE()":{"returns":{"_0":"The id of the RiskAdmin role"}},"addAssetListingAdmin(address)":{"params":{"admin":"The address of the new admin"}},"addBridge(address)":{"params":{"bridge":"The address of the new Bridge"}},"addEmergencyAdmin(address)":{"params":{"admin":"The address of the new admin"}},"addFlashBorrower(address)":{"params":{"borrower":"The address of the new FlashBorrower"}},"addPoolAdmin(address)":{"params":{"admin":"The address of the new admin"}},"addRiskAdmin(address)":{"params":{"admin":"The address of the new admin"}},"isAssetListingAdmin(address)":{"params":{"admin":"The address to check"},"returns":{"_0":"True if the given address is AssetListingAdmin, false otherwise"}},"isBridge(address)":{"params":{"bridge":"The address to check"},"returns":{"_0":"True if the given address is Bridge, false otherwise"}},"isEmergencyAdmin(address)":{"params":{"admin":"The address to check"},"returns":{"_0":"True if the given address is EmergencyAdmin, false otherwise"}},"isFlashBorrower(address)":{"params":{"borrower":"The address to check"},"returns":{"_0":"True if the given address is FlashBorrower, false otherwise"}},"isPoolAdmin(address)":{"params":{"admin":"The address to check"},"returns":{"_0":"True if the given address is PoolAdmin, false otherwise"}},"isRiskAdmin(address)":{"params":{"admin":"The address to check"},"returns":{"_0":"True if the given address is RiskAdmin, false otherwise"}},"removeAssetListingAdmin(address)":{"params":{"admin":"The address of the admin to remove"}},"removeBridge(address)":{"params":{"bridge":"The address of the bridge to remove"}},"removeEmergencyAdmin(address)":{"params":{"admin":"The address of the admin to remove"}},"removeFlashBorrower(address)":{"params":{"borrower":"The address of the FlashBorrower to remove"}},"removePoolAdmin(address)":{"params":{"admin":"The address of the admin to remove"}},"removeRiskAdmin(address)":{"params":{"admin":"The address of the admin to remove"}},"setRoleAdmin(bytes32,bytes32)":{"details":"By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.","params":{"adminRole":"The admin role","role":"The role to be managed by the admin role"}}},"title":"IACLManager","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","ASSET_LISTING_ADMIN_ROLE()":"78bb0a43","BRIDGE_ROLE()":"b5bfddea","EMERGENCY_ADMIN_ROLE()":"6e76fc8f","FLASH_BORROWER_ROLE()":"5577b7a9","POOL_ADMIN_ROLE()":"b8f6dba7","RISK_ADMIN_ROLE()":"4f16b425","addAssetListingAdmin(address)":"9a2b96f7","addBridge(address)":"9712fdf8","addEmergencyAdmin(address)":"179efb09","addFlashBorrower(address)":"9ac9d80b","addPoolAdmin(address)":"22650caf","addRiskAdmin(address)":"5b9a94e4","isAssetListingAdmin(address)":"13ee32e0","isBridge(address)":"726600ce","isEmergencyAdmin(address)":"2500f2b6","isFlashBorrower(address)":"fa50f297","isPoolAdmin(address)":"7be53ca1","isRiskAdmin(address)":"674b5e4d","removeAssetListingAdmin(address)":"a21bce15","removeBridge(address)":"04df017d","removeEmergencyAdmin(address)":"7a9a93f4","removeFlashBorrower(address)":"253cf980","removePoolAdmin(address)":"f83695cb","removeRiskAdmin(address)":"3c5a08e5","setRoleAdmin(bytes32,bytes32)":"1e4e0091"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ASSET_LISTING_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BRIDGE_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EMERGENCY_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FLASH_BORROWER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RISK_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"addAssetListingAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"addBridge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"addEmergencyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"addFlashBorrower\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"addPoolAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"addRiskAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"isAssetListingAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"isBridge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"isEmergencyAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"isFlashBorrower\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"isPoolAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"isRiskAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"removeAssetListingAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"removeBridge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"removeEmergencyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"removeFlashBorrower\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"removePoolAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"removeRiskAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"adminRole\",\"type\":\"bytes32\"}],\"name\":\"setRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"returns\":{\"_0\":\"The address of the PoolAddressesProvider\"}},\"ASSET_LISTING_ADMIN_ROLE()\":{\"returns\":{\"_0\":\"The id of the AssetListingAdmin role\"}},\"BRIDGE_ROLE()\":{\"returns\":{\"_0\":\"The id of the Bridge role\"}},\"EMERGENCY_ADMIN_ROLE()\":{\"returns\":{\"_0\":\"The id of the EmergencyAdmin role\"}},\"FLASH_BORROWER_ROLE()\":{\"returns\":{\"_0\":\"The id of the FlashBorrower role\"}},\"POOL_ADMIN_ROLE()\":{\"returns\":{\"_0\":\"The id of the PoolAdmin role\"}},\"RISK_ADMIN_ROLE()\":{\"returns\":{\"_0\":\"The id of the RiskAdmin role\"}},\"addAssetListingAdmin(address)\":{\"params\":{\"admin\":\"The address of the new admin\"}},\"addBridge(address)\":{\"params\":{\"bridge\":\"The address of the new Bridge\"}},\"addEmergencyAdmin(address)\":{\"params\":{\"admin\":\"The address of the new admin\"}},\"addFlashBorrower(address)\":{\"params\":{\"borrower\":\"The address of the new FlashBorrower\"}},\"addPoolAdmin(address)\":{\"params\":{\"admin\":\"The address of the new admin\"}},\"addRiskAdmin(address)\":{\"params\":{\"admin\":\"The address of the new admin\"}},\"isAssetListingAdmin(address)\":{\"params\":{\"admin\":\"The address to check\"},\"returns\":{\"_0\":\"True if the given address is AssetListingAdmin, false otherwise\"}},\"isBridge(address)\":{\"params\":{\"bridge\":\"The address to check\"},\"returns\":{\"_0\":\"True if the given address is Bridge, false otherwise\"}},\"isEmergencyAdmin(address)\":{\"params\":{\"admin\":\"The address to check\"},\"returns\":{\"_0\":\"True if the given address is EmergencyAdmin, false otherwise\"}},\"isFlashBorrower(address)\":{\"params\":{\"borrower\":\"The address to check\"},\"returns\":{\"_0\":\"True if the given address is FlashBorrower, false otherwise\"}},\"isPoolAdmin(address)\":{\"params\":{\"admin\":\"The address to check\"},\"returns\":{\"_0\":\"True if the given address is PoolAdmin, false otherwise\"}},\"isRiskAdmin(address)\":{\"params\":{\"admin\":\"The address to check\"},\"returns\":{\"_0\":\"True if the given address is RiskAdmin, false otherwise\"}},\"removeAssetListingAdmin(address)\":{\"params\":{\"admin\":\"The address of the admin to remove\"}},\"removeBridge(address)\":{\"params\":{\"bridge\":\"The address of the bridge to remove\"}},\"removeEmergencyAdmin(address)\":{\"params\":{\"admin\":\"The address of the admin to remove\"}},\"removeFlashBorrower(address)\":{\"params\":{\"borrower\":\"The address of the FlashBorrower to remove\"}},\"removePoolAdmin(address)\":{\"params\":{\"admin\":\"The address of the admin to remove\"}},\"removeRiskAdmin(address)\":{\"params\":{\"admin\":\"The address of the admin to remove\"}},\"setRoleAdmin(bytes32,bytes32)\":{\"details\":\"By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\",\"params\":{\"adminRole\":\"The admin role\",\"role\":\"The role to be managed by the admin role\"}}},\"title\":\"IACLManager\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the contract address of the PoolAddressesProvider\"},\"ASSET_LISTING_ADMIN_ROLE()\":{\"notice\":\"Returns the identifier of the AssetListingAdmin role\"},\"BRIDGE_ROLE()\":{\"notice\":\"Returns the identifier of the Bridge role\"},\"EMERGENCY_ADMIN_ROLE()\":{\"notice\":\"Returns the identifier of the EmergencyAdmin role\"},\"FLASH_BORROWER_ROLE()\":{\"notice\":\"Returns the identifier of the FlashBorrower role\"},\"POOL_ADMIN_ROLE()\":{\"notice\":\"Returns the identifier of the PoolAdmin role\"},\"RISK_ADMIN_ROLE()\":{\"notice\":\"Returns the identifier of the RiskAdmin role\"},\"addAssetListingAdmin(address)\":{\"notice\":\"Adds a new admin as AssetListingAdmin\"},\"addBridge(address)\":{\"notice\":\"Adds a new address as Bridge\"},\"addEmergencyAdmin(address)\":{\"notice\":\"Adds a new admin as EmergencyAdmin\"},\"addFlashBorrower(address)\":{\"notice\":\"Adds a new address as FlashBorrower\"},\"addPoolAdmin(address)\":{\"notice\":\"Adds a new admin as PoolAdmin\"},\"addRiskAdmin(address)\":{\"notice\":\"Adds a new admin as RiskAdmin\"},\"isAssetListingAdmin(address)\":{\"notice\":\"Returns true if the address is AssetListingAdmin, false otherwise\"},\"isBridge(address)\":{\"notice\":\"Returns true if the address is Bridge, false otherwise\"},\"isEmergencyAdmin(address)\":{\"notice\":\"Returns true if the address is EmergencyAdmin, false otherwise\"},\"isFlashBorrower(address)\":{\"notice\":\"Returns true if the address is FlashBorrower, false otherwise\"},\"isPoolAdmin(address)\":{\"notice\":\"Returns true if the address is PoolAdmin, false otherwise\"},\"isRiskAdmin(address)\":{\"notice\":\"Returns true if the address is RiskAdmin, false otherwise\"},\"removeAssetListingAdmin(address)\":{\"notice\":\"Removes an admin as AssetListingAdmin\"},\"removeBridge(address)\":{\"notice\":\"Removes an address as Bridge\"},\"removeEmergencyAdmin(address)\":{\"notice\":\"Removes an admin as EmergencyAdmin\"},\"removeFlashBorrower(address)\":{\"notice\":\"Removes an address as FlashBorrower\"},\"removePoolAdmin(address)\":{\"notice\":\"Removes an admin as PoolAdmin\"},\"removeRiskAdmin(address)\":{\"notice\":\"Removes an admin as RiskAdmin\"},\"setRoleAdmin(bytes32,bytes32)\":{\"notice\":\"Set the role as admin of a specific role.\"}},\"notice\":\"Defines the basic interface for the ACL Manager\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":\"IACLManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the contract address of the PoolAddressesProvider"},"ASSET_LISTING_ADMIN_ROLE()":{"notice":"Returns the identifier of the AssetListingAdmin role"},"BRIDGE_ROLE()":{"notice":"Returns the identifier of the Bridge role"},"EMERGENCY_ADMIN_ROLE()":{"notice":"Returns the identifier of the EmergencyAdmin role"},"FLASH_BORROWER_ROLE()":{"notice":"Returns the identifier of the FlashBorrower role"},"POOL_ADMIN_ROLE()":{"notice":"Returns the identifier of the PoolAdmin role"},"RISK_ADMIN_ROLE()":{"notice":"Returns the identifier of the RiskAdmin role"},"addAssetListingAdmin(address)":{"notice":"Adds a new admin as AssetListingAdmin"},"addBridge(address)":{"notice":"Adds a new address as Bridge"},"addEmergencyAdmin(address)":{"notice":"Adds a new admin as EmergencyAdmin"},"addFlashBorrower(address)":{"notice":"Adds a new address as FlashBorrower"},"addPoolAdmin(address)":{"notice":"Adds a new admin as PoolAdmin"},"addRiskAdmin(address)":{"notice":"Adds a new admin as RiskAdmin"},"isAssetListingAdmin(address)":{"notice":"Returns true if the address is AssetListingAdmin, false otherwise"},"isBridge(address)":{"notice":"Returns true if the address is Bridge, false otherwise"},"isEmergencyAdmin(address)":{"notice":"Returns true if the address is EmergencyAdmin, false otherwise"},"isFlashBorrower(address)":{"notice":"Returns true if the address is FlashBorrower, false otherwise"},"isPoolAdmin(address)":{"notice":"Returns true if the address is PoolAdmin, false otherwise"},"isRiskAdmin(address)":{"notice":"Returns true if the address is RiskAdmin, false otherwise"},"removeAssetListingAdmin(address)":{"notice":"Removes an admin as AssetListingAdmin"},"removeBridge(address)":{"notice":"Removes an address as Bridge"},"removeEmergencyAdmin(address)":{"notice":"Removes an admin as EmergencyAdmin"},"removeFlashBorrower(address)":{"notice":"Removes an address as FlashBorrower"},"removePoolAdmin(address)":{"notice":"Removes an admin as PoolAdmin"},"removeRiskAdmin(address)":{"notice":"Removes an admin as RiskAdmin"},"setRoleAdmin(bytes32,bytes32)":{"notice":"Set the role as admin of a specific role."}},"notice":"Defines the basic interface for the ACL Manager","version":1}}},"@aave/core-v3/contracts/interfaces/IAToken.sol":{"IAToken":{"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"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"BalanceTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"treasury","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"aTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"aTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"aTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Mint","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":[],"name":"RESERVE_TREASURY_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNDERLYING_ASSET_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"receiverOfUnderlying","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getPreviousIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getScaledUserBalanceAndSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"handleRepayment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"address","name":"treasury","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"aTokenDecimals","type":"uint8"},{"internalType":"string","name":"aTokenName","type":"string"},{"internalType":"string","name":"aTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"mintToTreasury","outputs":[],"stateMutability":"nonpayable","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":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"scaledBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scaledTotalSupply","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"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferOnLiquidation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferUnderlyingTo","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","events":{"BalanceTransfer(address,address,uint256,uint256)":{"details":"Emitted during the transfer action","params":{"from":"The user whose tokens are being transferred","index":"The next liquidity index of the reserve","to":"The recipient","value":"The scaled amount being transferred"}}},"kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Return cached value if chainId matches cache, otherwise recomputes separator","returns":{"_0":"The domain separator of the token at current chain"}},"RESERVE_TREASURY_ADDRESS()":{"returns":{"_0":"Address of the Aave treasury"}},"UNDERLYING_ASSET_ADDRESS()":{"returns":{"_0":"The address of the underlying asset"}},"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`."},"burn(address,address,uint256,uint256)":{"details":"In some instances, the mint event could be emitted from a burn transaction if the amount to burn is less than the interest that the user accrued","params":{"amount":"The amount being burned","from":"The address from which the aTokens will be burned","index":"The next liquidity index of the reserve","receiverOfUnderlying":"The address that will receive the underlying"}},"getPreviousIndex(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The last index interest was accrued to the user's balance, expressed in ray"}},"getScaledUserBalanceAndSupply(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The scaled balance of the user","_1":"The scaled total supply"}},"handleRepayment(address,address,uint256)":{"details":"The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.","params":{"amount":"The amount getting repaid","onBehalfOf":"The address of the user who will get his debt reduced/removed","user":"The user executing the repayment"}},"initialize(address,address,address,address,uint8,string,string,bytes)":{"params":{"aTokenDecimals":"The decimals of the aToken, same as the underlying asset's","aTokenName":"The name of the aToken","aTokenSymbol":"The symbol of the aToken","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","treasury":"The address of the Aave treasury, receiving the fees on this aToken","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}},"mint(address,address,uint256,uint256)":{"params":{"amount":"The amount of tokens getting minted","caller":"The address performing the mint","index":"The next liquidity index of the reserve","onBehalfOf":"The address of the user that will receive the minted aTokens"},"returns":{"_0":"`true` if the the previous balance of the user was 0"}},"mintToTreasury(uint256,uint256)":{"params":{"amount":"The amount of tokens getting minted","index":"The next liquidity index of the reserve"}},"nonces(address)":{"params":{"owner":"The address of the owner"},"returns":{"_0":"The nonce of the owner"}},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md","params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","owner":"The owner of the funds","r":"Signature param","s":"Signature param","spender":"The spender","v":"Signature param","value":"The amount"}},"rescueTokens(address,address,uint256)":{"params":{"amount":"The amount of token to transfer","to":"The address of the recipient","token":"The address of the token"}},"scaledBalanceOf(address)":{"details":"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update","params":{"user":"The user whose balance is calculated"},"returns":{"_0":"The scaled balance of the user"}},"scaledTotalSupply()":{"returns":{"_0":"The scaled total supply"}},"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."},"transferOnLiquidation(address,address,uint256)":{"params":{"from":"The address getting liquidated, current owner of the aTokens","to":"The recipient","value":"The amount of tokens getting transferred"}},"transferUnderlyingTo(address,uint256)":{"details":"Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()","params":{"amount":"The amount getting transferred","target":"The recipient of the underlying"}}},"title":"IAToken","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","RESERVE_TREASURY_ADDRESS()":"ae167335","UNDERLYING_ASSET_ADDRESS()":"b16a19de","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(address,address,uint256,uint256)":"d7020d0a","getPreviousIndex(address)":"e0753986","getScaledUserBalanceAndSupply(address)":"0afbcdc9","handleRepayment(address,address,uint256)":"6fd97676","initialize(address,address,address,address,uint8,string,string,bytes)":"183fb413","mint(address,address,uint256,uint256)":"b3f1c93d","mintToTreasury(uint256,uint256)":"7df5bd3b","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","rescueTokens(address,address,uint256)":"cea9d26f","scaledBalanceOf(address)":"1da24f3e","scaledTotalSupply()":"b1bf962d","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOnLiquidation(address,address,uint256)":"f866c319","transferUnderlyingTo(address,uint256)":"4efecaa5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"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\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"BalanceTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"aTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"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\":[],\"name\":\"RESERVE_TREASURY_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiverOfUnderlying\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getPreviousIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getScaledUserBalanceAndSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"handleRepayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"aTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mintToTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"rescueTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"scaledBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scaledTotalSupply\",\"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\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferOnLiquidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferUnderlyingTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"BalanceTransfer(address,address,uint256,uint256)\":{\"details\":\"Emitted during the transfer action\",\"params\":{\"from\":\"The user whose tokens are being transferred\",\"index\":\"The next liquidity index of the reserve\",\"to\":\"The recipient\",\"value\":\"The scaled amount being transferred\"}}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Return cached value if chainId matches cache, otherwise recomputes separator\",\"returns\":{\"_0\":\"The domain separator of the token at current chain\"}},\"RESERVE_TREASURY_ADDRESS()\":{\"returns\":{\"_0\":\"Address of the Aave treasury\"}},\"UNDERLYING_ASSET_ADDRESS()\":{\"returns\":{\"_0\":\"The address of the underlying asset\"}},\"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`.\"},\"burn(address,address,uint256,uint256)\":{\"details\":\"In some instances, the mint event could be emitted from a burn transaction if the amount to burn is less than the interest that the user accrued\",\"params\":{\"amount\":\"The amount being burned\",\"from\":\"The address from which the aTokens will be burned\",\"index\":\"The next liquidity index of the reserve\",\"receiverOfUnderlying\":\"The address that will receive the underlying\"}},\"getPreviousIndex(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The last index interest was accrued to the user's balance, expressed in ray\"}},\"getScaledUserBalanceAndSupply(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The scaled balance of the user\",\"_1\":\"The scaled total supply\"}},\"handleRepayment(address,address,uint256)\":{\"details\":\"The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\",\"params\":{\"amount\":\"The amount getting repaid\",\"onBehalfOf\":\"The address of the user who will get his debt reduced/removed\",\"user\":\"The user executing the repayment\"}},\"initialize(address,address,address,address,uint8,string,string,bytes)\":{\"params\":{\"aTokenDecimals\":\"The decimals of the aToken, same as the underlying asset's\",\"aTokenName\":\"The name of the aToken\",\"aTokenSymbol\":\"The symbol of the aToken\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"treasury\":\"The address of the Aave treasury, receiving the fees on this aToken\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}},\"mint(address,address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of tokens getting minted\",\"caller\":\"The address performing the mint\",\"index\":\"The next liquidity index of the reserve\",\"onBehalfOf\":\"The address of the user that will receive the minted aTokens\"},\"returns\":{\"_0\":\"`true` if the the previous balance of the user was 0\"}},\"mintToTreasury(uint256,uint256)\":{\"params\":{\"amount\":\"The amount of tokens getting minted\",\"index\":\"The next liquidity index of the reserve\"}},\"nonces(address)\":{\"params\":{\"owner\":\"The address of the owner\"},\"returns\":{\"_0\":\"The nonce of the owner\"}},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\",\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"owner\":\"The owner of the funds\",\"r\":\"Signature param\",\"s\":\"Signature param\",\"spender\":\"The spender\",\"v\":\"Signature param\",\"value\":\"The amount\"}},\"rescueTokens(address,address,uint256)\":{\"params\":{\"amount\":\"The amount of token to transfer\",\"to\":\"The address of the recipient\",\"token\":\"The address of the token\"}},\"scaledBalanceOf(address)\":{\"details\":\"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update\",\"params\":{\"user\":\"The user whose balance is calculated\"},\"returns\":{\"_0\":\"The scaled balance of the user\"}},\"scaledTotalSupply()\":{\"returns\":{\"_0\":\"The scaled total supply\"}},\"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.\"},\"transferOnLiquidation(address,address,uint256)\":{\"params\":{\"from\":\"The address getting liquidated, current owner of the aTokens\",\"to\":\"The recipient\",\"value\":\"The amount of tokens getting transferred\"}},\"transferUnderlyingTo(address,uint256)\":{\"details\":\"Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\",\"params\":{\"amount\":\"The amount getting transferred\",\"target\":\"The recipient of the underlying\"}}},\"title\":\"IAToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"notice\":\"Get the domain separator for the token\"},\"RESERVE_TREASURY_ADDRESS()\":{\"notice\":\"Returns the address of the Aave treasury, receiving the fees on this aToken.\"},\"UNDERLYING_ASSET_ADDRESS()\":{\"notice\":\"Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\"},\"burn(address,address,uint256,uint256)\":{\"notice\":\"Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\"},\"getPreviousIndex(address)\":{\"notice\":\"Returns last index interest was accrued to the user's balance\"},\"getScaledUserBalanceAndSupply(address)\":{\"notice\":\"Returns the scaled balance of the user and the scaled total supply.\"},\"handleRepayment(address,address,uint256)\":{\"notice\":\"Handles the underlying received by the aToken after the transfer has been completed.\"},\"initialize(address,address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the aToken\"},\"mint(address,address,uint256,uint256)\":{\"notice\":\"Mints `amount` aTokens to `user`\"},\"mintToTreasury(uint256,uint256)\":{\"notice\":\"Mints aTokens to the reserve treasury\"},\"nonces(address)\":{\"notice\":\"Returns the nonce for owner.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Allow passing a signed message to approve spending\"},\"rescueTokens(address,address,uint256)\":{\"notice\":\"Rescue and transfer tokens locked in this contract\"},\"scaledBalanceOf(address)\":{\"notice\":\"Returns the scaled balance of the user.\"},\"scaledTotalSupply()\":{\"notice\":\"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\"},\"transferOnLiquidation(address,address,uint256)\":{\"notice\":\"Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\"},\"transferUnderlyingTo(address,uint256)\":{\"notice\":\"Transfers the underlying asset to `target`.\"}},\"notice\":\"Defines the basic interface for an AToken.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/interfaces/IAToken.sol\":\"IAToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"DOMAIN_SEPARATOR()":{"notice":"Get the domain separator for the token"},"RESERVE_TREASURY_ADDRESS()":{"notice":"Returns the address of the Aave treasury, receiving the fees on this aToken."},"UNDERLYING_ASSET_ADDRESS()":{"notice":"Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)"},"burn(address,address,uint256,uint256)":{"notice":"Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`"},"getPreviousIndex(address)":{"notice":"Returns last index interest was accrued to the user's balance"},"getScaledUserBalanceAndSupply(address)":{"notice":"Returns the scaled balance of the user and the scaled total supply."},"handleRepayment(address,address,uint256)":{"notice":"Handles the underlying received by the aToken after the transfer has been completed."},"initialize(address,address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the aToken"},"mint(address,address,uint256,uint256)":{"notice":"Mints `amount` aTokens to `user`"},"mintToTreasury(uint256,uint256)":{"notice":"Mints aTokens to the reserve treasury"},"nonces(address)":{"notice":"Returns the nonce for owner."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Allow passing a signed message to approve spending"},"rescueTokens(address,address,uint256)":{"notice":"Rescue and transfer tokens locked in this contract"},"scaledBalanceOf(address)":{"notice":"Returns the scaled balance of the user."},"scaledTotalSupply()":{"notice":"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)"},"transferOnLiquidation(address,address,uint256)":{"notice":"Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken"},"transferUnderlyingTo(address,uint256)":{"notice":"Transfers the underlying asset to `target`."}},"notice":"Defines the basic interface for an AToken.","version":1}}},"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol":{"IAaveIncentivesController":{"abi":[{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"userBalance","type":"uint256"}],"name":"handleAction","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","details":"It only contains one single function, needed as a hook on aToken and debtToken transfers.","kind":"dev","methods":{"handleAction(address,uint256,uint256)":{"details":"Called by the corresponding asset on transfer hook in order to update the rewards distribution.The units of `totalSupply` and `userBalance` should be the same.","params":{"totalSupply":"The total supply of the asset prior to user balance change","user":"The address of the user whose asset balance has changed","userBalance":"The previous user balance prior to balance change"}}},"title":"IAaveIncentivesController","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"handleAction(address,uint256,uint256)":"31873e2e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userBalance\",\"type\":\"uint256\"}],\"name\":\"handleAction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"It only contains one single function, needed as a hook on aToken and debtToken transfers.\",\"kind\":\"dev\",\"methods\":{\"handleAction(address,uint256,uint256)\":{\"details\":\"Called by the corresponding asset on transfer hook in order to update the rewards distribution.The units of `totalSupply` and `userBalance` should be the same.\",\"params\":{\"totalSupply\":\"The total supply of the asset prior to user balance change\",\"user\":\"The address of the user whose asset balance has changed\",\"userBalance\":\"The previous user balance prior to balance change\"}}},\"title\":\"IAaveIncentivesController\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Defines the basic interface for an Aave Incentives Controller.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":\"IAaveIncentivesController\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Defines the basic interface for an Aave Incentives Controller.","version":1}}},"@aave/core-v3/contracts/interfaces/IAaveOracle.sol":{"IAaveOracle":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"source","type":"address"}],"name":"AssetSourceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"baseCurrency","type":"address"},{"indexed":false,"internalType":"uint256","name":"baseCurrencyUnit","type":"uint256"}],"name":"BaseCurrencySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fallbackOracle","type":"address"}],"name":"FallbackOracleUpdated","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BASE_CURRENCY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BASE_CURRENCY_UNIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getAssetPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"}],"name":"getAssetsPrices","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFallbackOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getSourceOfAsset","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"address[]","name":"sources","type":"address[]"}],"name":"setAssetSources","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fallbackOracle","type":"address"}],"name":"setFallbackOracle","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","events":{"AssetSourceUpdated(address,address)":{"details":"Emitted after the price source of an asset is updated","params":{"asset":"The address of the asset","source":"The price source of the asset"}},"BaseCurrencySet(address,uint256)":{"details":"Emitted after the base currency is set","params":{"baseCurrency":"The base currency of used for price quotes","baseCurrencyUnit":"The unit of the base currency"}},"FallbackOracleUpdated(address)":{"details":"Emitted after the address of fallback oracle is updated","params":{"fallbackOracle":"The address of the fallback oracle"}}},"kind":"dev","methods":{"ADDRESSES_PROVIDER()":{"returns":{"_0":"The address of the PoolAddressesProvider contract"}},"BASE_CURRENCY()":{"details":"Address 0x0 is reserved for USD as base currency.","returns":{"_0":"Returns the base currency address."}},"BASE_CURRENCY_UNIT()":{"details":"1 ether for ETH, 1e8 for USD.","returns":{"_0":"Returns the base currency unit."}},"getAssetPrice(address)":{"params":{"asset":"The address of the asset"},"returns":{"_0":"The price of the asset"}},"getAssetsPrices(address[])":{"params":{"assets":"The list of assets addresses"},"returns":{"_0":"The prices of the given assets"}},"getFallbackOracle()":{"returns":{"_0":"The address of the fallback oracle"}},"getSourceOfAsset(address)":{"params":{"asset":"The address of the asset"},"returns":{"_0":"The address of the source"}},"setAssetSources(address[],address[])":{"params":{"assets":"The addresses of the assets","sources":"The addresses of the price sources"}},"setFallbackOracle(address)":{"params":{"fallbackOracle":"The address of the fallback oracle"}}},"title":"IAaveOracle","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","BASE_CURRENCY()":"e19f4700","BASE_CURRENCY_UNIT()":"8c89b64f","getAssetPrice(address)":"b3596f07","getAssetsPrices(address[])":"9d23d9f2","getFallbackOracle()":"6210308c","getSourceOfAsset(address)":"92bf2be0","setAssetSources(address[],address[])":"abfd5310","setFallbackOracle(address)":"170aee73"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"}],\"name\":\"AssetSourceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"baseCurrency\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseCurrencyUnit\",\"type\":\"uint256\"}],\"name\":\"BaseCurrencySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fallbackOracle\",\"type\":\"address\"}],\"name\":\"FallbackOracleUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BASE_CURRENCY\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BASE_CURRENCY_UNIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getAssetPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"}],\"name\":\"getAssetsPrices\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFallbackOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getSourceOfAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"sources\",\"type\":\"address[]\"}],\"name\":\"setAssetSources\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fallbackOracle\",\"type\":\"address\"}],\"name\":\"setFallbackOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"AssetSourceUpdated(address,address)\":{\"details\":\"Emitted after the price source of an asset is updated\",\"params\":{\"asset\":\"The address of the asset\",\"source\":\"The price source of the asset\"}},\"BaseCurrencySet(address,uint256)\":{\"details\":\"Emitted after the base currency is set\",\"params\":{\"baseCurrency\":\"The base currency of used for price quotes\",\"baseCurrencyUnit\":\"The unit of the base currency\"}},\"FallbackOracleUpdated(address)\":{\"details\":\"Emitted after the address of fallback oracle is updated\",\"params\":{\"fallbackOracle\":\"The address of the fallback oracle\"}}},\"kind\":\"dev\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"returns\":{\"_0\":\"The address of the PoolAddressesProvider contract\"}},\"BASE_CURRENCY()\":{\"details\":\"Address 0x0 is reserved for USD as base currency.\",\"returns\":{\"_0\":\"Returns the base currency address.\"}},\"BASE_CURRENCY_UNIT()\":{\"details\":\"1 ether for ETH, 1e8 for USD.\",\"returns\":{\"_0\":\"Returns the base currency unit.\"}},\"getAssetPrice(address)\":{\"params\":{\"asset\":\"The address of the asset\"},\"returns\":{\"_0\":\"The price of the asset\"}},\"getAssetsPrices(address[])\":{\"params\":{\"assets\":\"The list of assets addresses\"},\"returns\":{\"_0\":\"The prices of the given assets\"}},\"getFallbackOracle()\":{\"returns\":{\"_0\":\"The address of the fallback oracle\"}},\"getSourceOfAsset(address)\":{\"params\":{\"asset\":\"The address of the asset\"},\"returns\":{\"_0\":\"The address of the source\"}},\"setAssetSources(address[],address[])\":{\"params\":{\"assets\":\"The addresses of the assets\",\"sources\":\"The addresses of the price sources\"}},\"setFallbackOracle(address)\":{\"params\":{\"fallbackOracle\":\"The address of the fallback oracle\"}}},\"title\":\"IAaveOracle\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the PoolAddressesProvider\"},\"BASE_CURRENCY()\":{\"notice\":\"Returns the base currency address\"},\"BASE_CURRENCY_UNIT()\":{\"notice\":\"Returns the base currency unit\"},\"getAssetPrice(address)\":{\"notice\":\"Returns the asset price in the base currency\"},\"getAssetsPrices(address[])\":{\"notice\":\"Returns a list of prices from a list of assets addresses\"},\"getFallbackOracle()\":{\"notice\":\"Returns the address of the fallback oracle\"},\"getSourceOfAsset(address)\":{\"notice\":\"Returns the address of the source for an asset address\"},\"setAssetSources(address[],address[])\":{\"notice\":\"Sets or replaces price sources of assets\"},\"setFallbackOracle(address)\":{\"notice\":\"Sets the fallback oracle\"}},\"notice\":\"Defines the basic interface for the Aave Oracle\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/interfaces/IAaveOracle.sol\":\"IAaveOracle\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/interfaces/IAaveOracle.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPriceOracleGetter} from './IPriceOracleGetter.sol';\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IAaveOracle\\n * @author Aave\\n * @notice Defines the basic interface for the Aave Oracle\\n */\\ninterface IAaveOracle is IPriceOracleGetter {\\n  /**\\n   * @dev Emitted after the base currency is set\\n   * @param baseCurrency The base currency of used for price quotes\\n   * @param baseCurrencyUnit The unit of the base currency\\n   */\\n  event BaseCurrencySet(address indexed baseCurrency, uint256 baseCurrencyUnit);\\n\\n  /**\\n   * @dev Emitted after the price source of an asset is updated\\n   * @param asset The address of the asset\\n   * @param source The price source of the asset\\n   */\\n  event AssetSourceUpdated(address indexed asset, address indexed source);\\n\\n  /**\\n   * @dev Emitted after the address of fallback oracle is updated\\n   * @param fallbackOracle The address of the fallback oracle\\n   */\\n  event FallbackOracleUpdated(address indexed fallbackOracle);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Sets or replaces price sources of assets\\n   * @param assets The addresses of the assets\\n   * @param sources The addresses of the price sources\\n   */\\n  function setAssetSources(address[] calldata assets, address[] calldata sources) external;\\n\\n  /**\\n   * @notice Sets the fallback oracle\\n   * @param fallbackOracle The address of the fallback oracle\\n   */\\n  function setFallbackOracle(address fallbackOracle) external;\\n\\n  /**\\n   * @notice Returns a list of prices from a list of assets addresses\\n   * @param assets The list of assets addresses\\n   * @return The prices of the given assets\\n   */\\n  function getAssetsPrices(address[] calldata assets) external view returns (uint256[] memory);\\n\\n  /**\\n   * @notice Returns the address of the source for an asset address\\n   * @param asset The address of the asset\\n   * @return The address of the source\\n   */\\n  function getSourceOfAsset(address asset) external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the fallback oracle\\n   * @return The address of the fallback oracle\\n   */\\n  function getFallbackOracle() external view returns (address);\\n}\\n\",\"keccak256\":\"0x15942c0df4ce9f50a9cf172c9ed0efa0abbf841cd8560fbd0da3d6a7dea69a96\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the PoolAddressesProvider"},"BASE_CURRENCY()":{"notice":"Returns the base currency address"},"BASE_CURRENCY_UNIT()":{"notice":"Returns the base currency unit"},"getAssetPrice(address)":{"notice":"Returns the asset price in the base currency"},"getAssetsPrices(address[])":{"notice":"Returns a list of prices from a list of assets addresses"},"getFallbackOracle()":{"notice":"Returns the address of the fallback oracle"},"getSourceOfAsset(address)":{"notice":"Returns the address of the source for an asset address"},"setAssetSources(address[],address[])":{"notice":"Sets or replaces price sources of assets"},"setFallbackOracle(address)":{"notice":"Sets the fallback oracle"}},"notice":"Defines the basic interface for the Aave Oracle","version":1}}},"@aave/core-v3/contracts/interfaces/ICreditDelegationToken.sol":{"ICreditDelegationToken":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fromUser","type":"address"},{"indexed":true,"internalType":"address","name":"toUser","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BorrowAllowanceDelegated","type":"event"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approveDelegation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromUser","type":"address"},{"internalType":"address","name":"toUser","type":"address"}],"name":"borrowAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"},{"internalType":"address","name":"delegatee","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":"delegationWithSig","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","events":{"BorrowAllowanceDelegated(address,address,address,uint256)":{"details":"Emitted on `approveDelegation` and `borrowAllowance","params":{"amount":"The amount being delegated","asset":"The address of the delegated asset","fromUser":"The address of the delegator","toUser":"The address of the delegatee"}}},"kind":"dev","methods":{"approveDelegation(address,uint256)":{"params":{"amount":"The maximum amount being delegated.","delegatee":"The address receiving the delegated borrowing power"}},"borrowAllowance(address,address)":{"params":{"fromUser":"The user to giving allowance","toUser":"The user to give allowance to"},"returns":{"_0":"The current allowance of `toUser`"}},"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","delegatee":"The delegatee that can use the credit","delegator":"The delegator of the credit","r":"The R signature param","s":"The S signature param","v":"The V signature param","value":"The amount to be delegated"}}},"title":"ICreditDelegationToken","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"approveDelegation(address,uint256)":"c04a8a10","borrowAllowance(address,address)":"6bd76d24","delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":"0b52d558"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BorrowAllowanceDelegated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approveDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromUser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"}],\"name\":\"borrowAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatee\",\"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\":\"delegationWithSig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"BorrowAllowanceDelegated(address,address,address,uint256)\":{\"details\":\"Emitted on `approveDelegation` and `borrowAllowance\",\"params\":{\"amount\":\"The amount being delegated\",\"asset\":\"The address of the delegated asset\",\"fromUser\":\"The address of the delegator\",\"toUser\":\"The address of the delegatee\"}}},\"kind\":\"dev\",\"methods\":{\"approveDelegation(address,uint256)\":{\"params\":{\"amount\":\"The maximum amount being delegated.\",\"delegatee\":\"The address receiving the delegated borrowing power\"}},\"borrowAllowance(address,address)\":{\"params\":{\"fromUser\":\"The user to giving allowance\",\"toUser\":\"The user to give allowance to\"},\"returns\":{\"_0\":\"The current allowance of `toUser`\"}},\"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"delegatee\":\"The delegatee that can use the credit\",\"delegator\":\"The delegator of the credit\",\"r\":\"The R signature param\",\"s\":\"The S signature param\",\"v\":\"The V signature param\",\"value\":\"The amount to be delegated\"}}},\"title\":\"ICreditDelegationToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approveDelegation(address,uint256)\":{\"notice\":\"Delegates borrowing power to a user on the specific debt token. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)\"},\"borrowAllowance(address,address)\":{\"notice\":\"Returns the borrow allowance of the user\"},\"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Delegates borrowing power to a user on the specific debt token via ERC712 signature\"}},\"notice\":\"Defines the basic interface for a token supporting credit delegation.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/interfaces/ICreditDelegationToken.sol\":\"ICreditDelegationToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/interfaces/ICreditDelegationToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ICreditDelegationToken\\n * @author Aave\\n * @notice Defines the basic interface for a token supporting credit delegation.\\n */\\ninterface ICreditDelegationToken {\\n  /**\\n   * @dev Emitted on `approveDelegation` and `borrowAllowance\\n   * @param fromUser The address of the delegator\\n   * @param toUser The address of the delegatee\\n   * @param asset The address of the delegated asset\\n   * @param amount The amount being delegated\\n   */\\n  event BorrowAllowanceDelegated(\\n    address indexed fromUser,\\n    address indexed toUser,\\n    address indexed asset,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @notice Delegates borrowing power to a user on the specific debt token.\\n   * Delegation will still respect the liquidation constraints (even if delegated, a\\n   * delegatee cannot force a delegator HF to go below 1)\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The maximum amount being delegated.\\n   */\\n  function approveDelegation(address delegatee, uint256 amount) external;\\n\\n  /**\\n   * @notice Returns the borrow allowance of the user\\n   * @param fromUser The user to giving allowance\\n   * @param toUser The user to give allowance to\\n   * @return The current allowance of `toUser`\\n   */\\n  function borrowAllowance(address fromUser, address toUser) external view returns (uint256);\\n\\n  /**\\n   * @notice Delegates borrowing power to a user on the specific debt token via ERC712 signature\\n   * @param delegator The delegator of the credit\\n   * @param delegatee The delegatee that can use the credit\\n   * @param value The amount to be delegated\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v The V signature param\\n   * @param s The S signature param\\n   * @param r The R signature param\\n   */\\n  function delegationWithSig(\\n    address delegator,\\n    address delegatee,\\n    uint256 value,\\n    uint256 deadline,\\n    uint8 v,\\n    bytes32 r,\\n    bytes32 s\\n  ) external;\\n}\\n\",\"keccak256\":\"0xab2789bbbf54af9609fbd7fa93595a514866728b3096ede6b69952f98290c997\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"approveDelegation(address,uint256)":{"notice":"Delegates borrowing power to a user on the specific debt token. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)"},"borrowAllowance(address,address)":{"notice":"Returns the borrow allowance of the user"},"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Delegates borrowing power to a user on the specific debt token via ERC712 signature"}},"notice":"Defines the basic interface for a token supporting credit delegation.","version":1}}},"@aave/core-v3/contracts/interfaces/IDefaultInterestRateStrategy.sol":{"IDefaultInterestRateStrategy":{"abi":[{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_EXCESS_USAGE_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPTIMAL_USAGE_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"unbacked","type":"uint256"},{"internalType":"uint256","name":"liquidityAdded","type":"uint256"},{"internalType":"uint256","name":"liquidityTaken","type":"uint256"},{"internalType":"uint256","name":"totalStableDebt","type":"uint256"},{"internalType":"uint256","name":"totalVariableDebt","type":"uint256"},{"internalType":"uint256","name":"averageStableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"reserveFactor","type":"uint256"},{"internalType":"address","name":"reserve","type":"address"},{"internalType":"address","name":"aToken","type":"address"}],"internalType":"struct DataTypes.CalculateInterestRatesParams","name":"params","type":"tuple"}],"name":"calculateInterestRates","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseStableBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseVariableBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxVariableBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStableRateExcessOffset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStableRateSlope1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStableRateSlope2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVariableRateSlope1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVariableRateSlope2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"ADDRESSES_PROVIDER()":{"returns":{"_0":"The address of the PoolAddressesProvider contract"}},"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()":{"details":"It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations)","returns":{"_0":"The max excess stable to total debt ratio, expressed in ray."}},"MAX_EXCESS_USAGE_RATIO()":{"details":"It's always equal to 1-optimal usage ratio (added as constant for gas optimizations)","returns":{"_0":"The max excess usage ratio, expressed in ray."}},"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()":{"returns":{"_0":"The optimal stable to total debt ratio, expressed in ray."}},"OPTIMAL_USAGE_RATIO()":{"returns":{"_0":"The optimal usage ratio, expressed in ray."}},"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":{"params":{"params":"The parameters needed to calculate interest rates"},"returns":{"_0":"liquidityRate The liquidity rate expressed in rays","_1":"stableBorrowRate The stable borrow rate expressed in rays","_2":"variableBorrowRate The variable borrow rate expressed in rays"}},"getBaseStableBorrowRate()":{"returns":{"_0":"The base stable borrow rate, expressed in ray"}},"getBaseVariableBorrowRate()":{"returns":{"_0":"The base variable borrow rate, expressed in ray"}},"getMaxVariableBorrowRate()":{"returns":{"_0":"The maximum variable borrow rate, expressed in ray"}},"getStableRateExcessOffset()":{"details":"It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","returns":{"_0":"The stable rate excess offset, expressed in ray"}},"getStableRateSlope1()":{"details":"It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO","returns":{"_0":"The stable rate slope, expressed in ray"}},"getStableRateSlope2()":{"details":"It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO","returns":{"_0":"The stable rate slope, expressed in ray"}},"getVariableRateSlope1()":{"details":"It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO","returns":{"_0":"The variable rate slope, expressed in ray"}},"getVariableRateSlope2()":{"details":"It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO","returns":{"_0":"The variable rate slope, expressed in ray"}}},"title":"IDefaultInterestRateStrategy","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()":"fe5fd698","MAX_EXCESS_USAGE_RATIO()":"a9c622f8","OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()":"6fb92589","OPTIMAL_USAGE_RATIO()":"54c365c6","calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":"a5898709","getBaseStableBorrowRate()":"acd78686","getBaseVariableBorrowRate()":"34762ca5","getMaxVariableBorrowRate()":"80031e37","getStableRateExcessOffset()":"bc626908","getStableRateSlope1()":"d5cd7391","getStableRateSlope2()":"14e32da4","getVariableRateSlope1()":"0b3429a2","getVariableRateSlope2()":"f4202409"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_EXCESS_USAGE_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMAL_USAGE_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"unbacked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityAdded\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityTaken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"averageStableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"aToken\",\"type\":\"address\"}],\"internalType\":\"struct DataTypes.CalculateInterestRatesParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"calculateInterestRates\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBaseStableBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBaseVariableBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxVariableBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStableRateExcessOffset\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStableRateSlope1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStableRateSlope2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVariableRateSlope1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVariableRateSlope2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"returns\":{\"_0\":\"The address of the PoolAddressesProvider contract\"}},\"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()\":{\"details\":\"It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations)\",\"returns\":{\"_0\":\"The max excess stable to total debt ratio, expressed in ray.\"}},\"MAX_EXCESS_USAGE_RATIO()\":{\"details\":\"It's always equal to 1-optimal usage ratio (added as constant for gas optimizations)\",\"returns\":{\"_0\":\"The max excess usage ratio, expressed in ray.\"}},\"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()\":{\"returns\":{\"_0\":\"The optimal stable to total debt ratio, expressed in ray.\"}},\"OPTIMAL_USAGE_RATIO()\":{\"returns\":{\"_0\":\"The optimal usage ratio, expressed in ray.\"}},\"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))\":{\"params\":{\"params\":\"The parameters needed to calculate interest rates\"},\"returns\":{\"_0\":\"liquidityRate The liquidity rate expressed in rays\",\"_1\":\"stableBorrowRate The stable borrow rate expressed in rays\",\"_2\":\"variableBorrowRate The variable borrow rate expressed in rays\"}},\"getBaseStableBorrowRate()\":{\"returns\":{\"_0\":\"The base stable borrow rate, expressed in ray\"}},\"getBaseVariableBorrowRate()\":{\"returns\":{\"_0\":\"The base variable borrow rate, expressed in ray\"}},\"getMaxVariableBorrowRate()\":{\"returns\":{\"_0\":\"The maximum variable borrow rate, expressed in ray\"}},\"getStableRateExcessOffset()\":{\"details\":\"It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\",\"returns\":{\"_0\":\"The stable rate excess offset, expressed in ray\"}},\"getStableRateSlope1()\":{\"details\":\"It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\",\"returns\":{\"_0\":\"The stable rate slope, expressed in ray\"}},\"getStableRateSlope2()\":{\"details\":\"It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\",\"returns\":{\"_0\":\"The stable rate slope, expressed in ray\"}},\"getVariableRateSlope1()\":{\"details\":\"It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\",\"returns\":{\"_0\":\"The variable rate slope, expressed in ray\"}},\"getVariableRateSlope2()\":{\"details\":\"It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\",\"returns\":{\"_0\":\"The variable rate slope, expressed in ray\"}}},\"title\":\"IDefaultInterestRateStrategy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the address of the PoolAddressesProvider\"},\"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()\":{\"notice\":\"Returns the excess stable debt ratio above the optimal.\"},\"MAX_EXCESS_USAGE_RATIO()\":{\"notice\":\"Returns the excess usage ratio above the optimal.\"},\"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()\":{\"notice\":\"Returns the optimal stable to total debt ratio of the reserve.\"},\"OPTIMAL_USAGE_RATIO()\":{\"notice\":\"Returns the usage ratio at which the pool aims to obtain most competitive borrow rates.\"},\"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))\":{\"notice\":\"Calculates the interest rates depending on the reserve's state and configurations\"},\"getBaseStableBorrowRate()\":{\"notice\":\"Returns the base stable borrow rate\"},\"getBaseVariableBorrowRate()\":{\"notice\":\"Returns the base variable borrow rate\"},\"getMaxVariableBorrowRate()\":{\"notice\":\"Returns the maximum variable borrow rate\"},\"getStableRateExcessOffset()\":{\"notice\":\"Returns the stable rate excess offset\"},\"getStableRateSlope1()\":{\"notice\":\"Returns the stable rate slope below optimal usage ratio\"},\"getStableRateSlope2()\":{\"notice\":\"Returns the stable rate slope above optimal usage ratio\"},\"getVariableRateSlope1()\":{\"notice\":\"Returns the variable rate slope below optimal usage ratio\"},\"getVariableRateSlope2()\":{\"notice\":\"Returns the variable rate slope above optimal usage ratio\"}},\"notice\":\"Defines the basic interface of the DefaultReserveInterestRateStrategy\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/interfaces/IDefaultInterestRateStrategy.sol\":\"IDefaultInterestRateStrategy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/interfaces/IDefaultInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IReserveInterestRateStrategy} from './IReserveInterestRateStrategy.sol';\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IDefaultInterestRateStrategy\\n * @author Aave\\n * @notice Defines the basic interface of the DefaultReserveInterestRateStrategy\\n */\\ninterface IDefaultInterestRateStrategy is IReserveInterestRateStrategy {\\n  /**\\n   * @notice Returns the usage ratio at which the pool aims to obtain most competitive borrow rates.\\n   * @return The optimal usage ratio, expressed in ray.\\n   */\\n  function OPTIMAL_USAGE_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the optimal stable to total debt ratio of the reserve.\\n   * @return The optimal stable to total debt ratio, expressed in ray.\\n   */\\n  function OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the excess usage ratio above the optimal.\\n   * @dev It's always equal to 1-optimal usage ratio (added as constant for gas optimizations)\\n   * @return The max excess usage ratio, expressed in ray.\\n   */\\n  function MAX_EXCESS_USAGE_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the excess stable debt ratio above the optimal.\\n   * @dev It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations)\\n   * @return The max excess stable to total debt ratio, expressed in ray.\\n   */\\n  function MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the variable rate slope below optimal usage ratio\\n   * @dev It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\\n   * @return The variable rate slope, expressed in ray\\n   */\\n  function getVariableRateSlope1() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the variable rate slope above optimal usage ratio\\n   * @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\\n   * @return The variable rate slope, expressed in ray\\n   */\\n  function getVariableRateSlope2() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate slope below optimal usage ratio\\n   * @dev It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\\n   * @return The stable rate slope, expressed in ray\\n   */\\n  function getStableRateSlope1() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate slope above optimal usage ratio\\n   * @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\\n   * @return The stable rate slope, expressed in ray\\n   */\\n  function getStableRateSlope2() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate excess offset\\n   * @dev It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\\n   * @return The stable rate excess offset, expressed in ray\\n   */\\n  function getStableRateExcessOffset() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the base stable borrow rate\\n   * @return The base stable borrow rate, expressed in ray\\n   */\\n  function getBaseStableBorrowRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the base variable borrow rate\\n   * @return The base variable borrow rate, expressed in ray\\n   */\\n  function getBaseVariableBorrowRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the maximum variable borrow rate\\n   * @return The maximum variable borrow rate, expressed in ray\\n   */\\n  function getMaxVariableBorrowRate() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xb7351f5dc779d86fc6d4aafb2fe48622b2dae3a00724923b8cd92b5c676ca893\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the address of the PoolAddressesProvider"},"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()":{"notice":"Returns the excess stable debt ratio above the optimal."},"MAX_EXCESS_USAGE_RATIO()":{"notice":"Returns the excess usage ratio above the optimal."},"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()":{"notice":"Returns the optimal stable to total debt ratio of the reserve."},"OPTIMAL_USAGE_RATIO()":{"notice":"Returns the usage ratio at which the pool aims to obtain most competitive borrow rates."},"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":{"notice":"Calculates the interest rates depending on the reserve's state and configurations"},"getBaseStableBorrowRate()":{"notice":"Returns the base stable borrow rate"},"getBaseVariableBorrowRate()":{"notice":"Returns the base variable borrow rate"},"getMaxVariableBorrowRate()":{"notice":"Returns the maximum variable borrow rate"},"getStableRateExcessOffset()":{"notice":"Returns the stable rate excess offset"},"getStableRateSlope1()":{"notice":"Returns the stable rate slope below optimal usage ratio"},"getStableRateSlope2()":{"notice":"Returns the stable rate slope above optimal usage ratio"},"getVariableRateSlope1()":{"notice":"Returns the variable rate slope below optimal usage ratio"},"getVariableRateSlope2()":{"notice":"Returns the variable rate slope above optimal usage ratio"}},"notice":"Defines the basic interface of the DefaultReserveInterestRateStrategy","version":1}}},"@aave/core-v3/contracts/interfaces/IDelegationToken.sol":{"IDelegationToken":{"abi":[{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"delegate(address)":{"params":{"delegatee":"The address of the delegatee"}}},"title":"IDelegationToken","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"delegate(address)":"5c19a95c"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"delegate(address)\":{\"params\":{\"delegatee\":\"The address of the delegatee\"}}},\"title\":\"IDelegationToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"delegate(address)\":{\"notice\":\"Delegate voting power to a delegatee\"}},\"notice\":\"Implements an interface for tokens with delegation COMP/UNI compatible\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/interfaces/IDelegationToken.sol\":\"IDelegationToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/interfaces/IDelegationToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IDelegationToken\\n * @author Aave\\n * @notice Implements an interface for tokens with delegation COMP/UNI compatible\\n */\\ninterface IDelegationToken {\\n  /**\\n   * @notice Delegate voting power to a delegatee\\n   * @param delegatee The address of the delegatee\\n   */\\n  function delegate(address delegatee) external;\\n}\\n\",\"keccak256\":\"0xefaf5afc40d517357085677322396a6864a28d9bdbd664643a7a4723a45e4427\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"delegate(address)":{"notice":"Delegate voting power to a delegatee"}},"notice":"Implements an interface for tokens with delegation COMP/UNI compatible","version":1}}},"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol":{"IERC20WithPermit":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"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":{"author":"Aave","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`."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md","params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","owner":"The owner of the funds","r":"Signature param","s":"Signature param","spender":"The spender","v":"Signature param","value":"The amount"}},"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."}},"title":"IERC20WithPermit","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"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\":\"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\":{\"author\":\"Aave\",\"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`.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\",\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"owner\":\"The owner of the funds\",\"r\":\"Signature param\",\"s\":\"Signature param\",\"spender\":\"The spender\",\"v\":\"Signature param\",\"value\":\"The amount\"}},\"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.\"}},\"title\":\"IERC20WithPermit\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Allow passing a signed message to approve spending\"}},\"notice\":\"Interface for the permit function (EIP-2612)\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol\":\"IERC20WithPermit\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Allow passing a signed message to approve spending"}},"notice":"Interface for the permit function (EIP-2612)","version":1}}},"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol":{"IInitializableAToken":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"treasury","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"aTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"aTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"aTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"address","name":"treasury","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"aTokenDecimals","type":"uint8"},{"internalType":"string","name":"aTokenName","type":"string"},{"internalType":"string","name":"aTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","events":{"Initialized(address,address,address,address,uint8,string,string,bytes)":{"details":"Emitted when an aToken is initialized","params":{"aTokenDecimals":"The decimals of the underlying","aTokenName":"The name of the aToken","aTokenSymbol":"The symbol of the aToken","incentivesController":"The address of the incentives controller for this aToken","params":"A set of encoded parameters for additional initialization","pool":"The address of the associated pool","treasury":"The address of the treasury","underlyingAsset":"The address of the underlying asset"}}},"kind":"dev","methods":{"initialize(address,address,address,address,uint8,string,string,bytes)":{"params":{"aTokenDecimals":"The decimals of the aToken, same as the underlying asset's","aTokenName":"The name of the aToken","aTokenSymbol":"The symbol of the aToken","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","treasury":"The address of the Aave treasury, receiving the fees on this aToken","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}}},"title":"IInitializableAToken","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"initialize(address,address,address,address,uint8,string,string,bytes)":"183fb413"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"aTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"aTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"Initialized(address,address,address,address,uint8,string,string,bytes)\":{\"details\":\"Emitted when an aToken is initialized\",\"params\":{\"aTokenDecimals\":\"The decimals of the underlying\",\"aTokenName\":\"The name of the aToken\",\"aTokenSymbol\":\"The symbol of the aToken\",\"incentivesController\":\"The address of the incentives controller for this aToken\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The address of the associated pool\",\"treasury\":\"The address of the treasury\",\"underlyingAsset\":\"The address of the underlying asset\"}}},\"kind\":\"dev\",\"methods\":{\"initialize(address,address,address,address,uint8,string,string,bytes)\":{\"params\":{\"aTokenDecimals\":\"The decimals of the aToken, same as the underlying asset's\",\"aTokenName\":\"The name of the aToken\",\"aTokenSymbol\":\"The symbol of the aToken\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"treasury\":\"The address of the Aave treasury, receiving the fees on this aToken\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}}},\"title\":\"IInitializableAToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"initialize(address,address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the aToken\"}},\"notice\":\"Interface for the initialize function on AToken\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol\":\"IInitializableAToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"initialize(address,address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the aToken"}},"notice":"Interface for the initialize function on AToken","version":1}}},"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol":{"IInitializableDebtToken":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"debtTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"debtTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"internalType":"string","name":"debtTokenName","type":"string"},{"internalType":"string","name":"debtTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","events":{"Initialized(address,address,address,uint8,string,string,bytes)":{"details":"Emitted when a debt token is initialized","params":{"debtTokenDecimals":"The decimals of the debt token","debtTokenName":"The name of the debt token","debtTokenSymbol":"The symbol of the debt token","incentivesController":"The address of the incentives controller for this aToken","params":"A set of encoded parameters for additional initialization","pool":"The address of the associated pool","underlyingAsset":"The address of the underlying asset"}}},"kind":"dev","methods":{"initialize(address,address,address,uint8,string,string,bytes)":{"params":{"debtTokenDecimals":"The decimals of the debtToken, same as the underlying asset's","debtTokenName":"The name of the token","debtTokenSymbol":"The symbol of the token","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}}},"title":"IInitializableDebtToken","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"initialize(address,address,address,uint8,string,string,bytes)":"c222ec8a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"Initialized(address,address,address,uint8,string,string,bytes)\":{\"details\":\"Emitted when a debt token is initialized\",\"params\":{\"debtTokenDecimals\":\"The decimals of the debt token\",\"debtTokenName\":\"The name of the debt token\",\"debtTokenSymbol\":\"The symbol of the debt token\",\"incentivesController\":\"The address of the incentives controller for this aToken\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The address of the associated pool\",\"underlyingAsset\":\"The address of the underlying asset\"}}},\"kind\":\"dev\",\"methods\":{\"initialize(address,address,address,uint8,string,string,bytes)\":{\"params\":{\"debtTokenDecimals\":\"The decimals of the debtToken, same as the underlying asset's\",\"debtTokenName\":\"The name of the token\",\"debtTokenSymbol\":\"The symbol of the token\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}}},\"title\":\"IInitializableDebtToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"initialize(address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the debt token.\"}},\"notice\":\"Interface for the initialize function common between debt tokens\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":\"IInitializableDebtToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"initialize(address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the debt token."}},"notice":"Interface for the initialize function common between debt tokens","version":1}}},"@aave/core-v3/contracts/interfaces/IPool.sol":{"IPool":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"backer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"BackUnbacked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"borrowRate","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"Borrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"address","name":"initiator","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"premium","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"FlashLoan","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalDebt","type":"uint256"}],"name":"IsolationModeTotalDebtUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"collateralAsset","type":"address"},{"indexed":true,"internalType":"address","name":"debtAsset","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"debtToCover","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidatedCollateralAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"liquidator","type":"address"},{"indexed":false,"internalType":"bool","name":"receiveAToken","type":"bool"}],"name":"LiquidationCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"MintUnbacked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountMinted","type":"uint256"}],"name":"MintedToTreasury","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"RebalanceStableBorrowRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"repayer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"useATokens","type":"bool"}],"name":"Repay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"uint256","name":"liquidityRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stableBorrowRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"variableBorrowRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"variableBorrowIndex","type":"uint256"}],"name":"ReserveDataUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"Supply","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"}],"name":"SwapBorrowRateMode","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint8","name":"categoryId","type":"uint8"}],"name":"UserEModeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BRIDGE_PROTOCOL_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASHLOAN_PREMIUM_TOTAL","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASHLOAN_PREMIUM_TO_PROTOCOL","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_NUMBER_RESERVES","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_STABLE_RATE_BORROW_SIZE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"backUnbacked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"uint16","name":"referralCode","type":"uint16"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"borrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"id","type":"uint8"},{"components":[{"internalType":"uint16","name":"ltv","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationBonus","type":"uint16"},{"internalType":"address","name":"priceSource","type":"address"},{"internalType":"string","name":"label","type":"string"}],"internalType":"struct DataTypes.EModeCategory","name":"config","type":"tuple"}],"name":"configureEModeCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"dropReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"balanceFromBefore","type":"uint256"},{"internalType":"uint256","name":"balanceToBefore","type":"uint256"}],"name":"finalizeTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiverAddress","type":"address"},{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"interestRateModes","type":"uint256[]"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"flashLoan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiverAddress","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"params","type":"bytes"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"flashLoanSimple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getConfiguration","outputs":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"id","type":"uint8"}],"name":"getEModeCategoryData","outputs":[{"components":[{"internalType":"uint16","name":"ltv","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationBonus","type":"uint16"},{"internalType":"address","name":"priceSource","type":"address"},{"internalType":"string","name":"label","type":"string"}],"internalType":"struct DataTypes.EModeCategory","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"id","type":"uint16"}],"name":"getReserveAddressById","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveData","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"configuration","type":"tuple"},{"internalType":"uint128","name":"liquidityIndex","type":"uint128"},{"internalType":"uint128","name":"currentLiquidityRate","type":"uint128"},{"internalType":"uint128","name":"variableBorrowIndex","type":"uint128"},{"internalType":"uint128","name":"currentVariableBorrowRate","type":"uint128"},{"internalType":"uint128","name":"currentStableBorrowRate","type":"uint128"},{"internalType":"uint40","name":"lastUpdateTimestamp","type":"uint40"},{"internalType":"uint16","name":"id","type":"uint16"},{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtTokenAddress","type":"address"},{"internalType":"address","name":"variableDebtTokenAddress","type":"address"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"},{"internalType":"uint128","name":"accruedToTreasury","type":"uint128"},{"internalType":"uint128","name":"unbacked","type":"uint128"},{"internalType":"uint128","name":"isolationModeTotalDebt","type":"uint128"}],"internalType":"struct DataTypes.ReserveData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveNormalizedIncome","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveNormalizedVariableDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReservesList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserAccountData","outputs":[{"internalType":"uint256","name":"totalCollateralBase","type":"uint256"},{"internalType":"uint256","name":"totalDebtBase","type":"uint256"},{"internalType":"uint256","name":"availableBorrowsBase","type":"uint256"},{"internalType":"uint256","name":"currentLiquidationThreshold","type":"uint256"},{"internalType":"uint256","name":"ltv","type":"uint256"},{"internalType":"uint256","name":"healthFactor","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserConfiguration","outputs":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.UserConfigurationMap","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserEMode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtAddress","type":"address"},{"internalType":"address","name":"variableDebtAddress","type":"address"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"}],"name":"initReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collateralAsset","type":"address"},{"internalType":"address","name":"debtAsset","type":"address"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"debtToCover","type":"uint256"},{"internalType":"bool","name":"receiveAToken","type":"bool"}],"name":"liquidationCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"}],"name":"mintToTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"mintUnbacked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"rebalanceStableBorrowRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"repay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"}],"name":"repayWithATokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"permitV","type":"uint8"},{"internalType":"bytes32","name":"permitR","type":"bytes32"},{"internalType":"bytes32","name":"permitS","type":"bytes32"}],"name":"repayWithPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"resetIsolationModeTotalDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"configuration","type":"tuple"}],"name":"setConfiguration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"rateStrategyAddress","type":"address"}],"name":"setReserveInterestRateStrategyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"categoryId","type":"uint8"}],"name":"setUserEMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"useAsCollateral","type":"bool"}],"name":"setUserUseReserveAsCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"supply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"permitV","type":"uint8"},{"internalType":"bytes32","name":"permitR","type":"bytes32"},{"internalType":"bytes32","name":"permitS","type":"bytes32"}],"name":"supplyWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"}],"name":"swapBorrowRateMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bridgeProtocolFee","type":"uint256"}],"name":"updateBridgeProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"flashLoanPremiumTotal","type":"uint128"},{"internalType":"uint128","name":"flashLoanPremiumToProtocol","type":"uint128"}],"name":"updateFlashloanPremiums","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","events":{"BackUnbacked(address,address,uint256,uint256)":{"details":"Emitted on backUnbacked()","params":{"amount":"The amount added as backing","backer":"The address paying for the backing","fee":"The amount paid in fees","reserve":"The address of the underlying asset of the reserve"}},"Borrow(address,address,address,uint256,uint8,uint256,uint16)":{"details":"Emitted on borrow() and flashLoan() when debt needs to be opened","params":{"amount":"The amount borrowed out","borrowRate":"The numeric rate at which the user has borrowed, expressed in ray","interestRateMode":"The rate mode: 1 for Stable, 2 for Variable","onBehalfOf":"The address that will be getting the debt","referralCode":"The referral code used","reserve":"The address of the underlying asset being borrowed","user":"The address of the user initiating the borrow(), receiving the funds on borrow() or just initiator of the transaction on flashLoan()"}},"FlashLoan(address,address,address,uint256,uint8,uint256,uint16)":{"details":"Emitted on flashLoan()","params":{"amount":"The amount flash borrowed","asset":"The address of the asset being flash borrowed","initiator":"The address initiating the flash loan","interestRateMode":"The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt","premium":"The fee flash borrowed","referralCode":"The referral code used","target":"The address of the flash loan receiver contract"}},"IsolationModeTotalDebtUpdated(address,uint256)":{"details":"Emitted on borrow(), repay() and liquidationCall() when using isolated assets","params":{"asset":"The address of the underlying asset of the reserve","totalDebt":"The total isolation mode debt for the reserve"}},"LiquidationCall(address,address,address,uint256,uint256,address,bool)":{"details":"Emitted when a borrower is liquidated.","params":{"collateralAsset":"The address of the underlying asset used as collateral, to receive as result of the liquidation","debtAsset":"The address of the underlying borrowed asset to be repaid with the liquidation","debtToCover":"The debt amount of borrowed `asset` the liquidator wants to cover","liquidatedCollateralAmount":"The amount of collateral received by the liquidator","liquidator":"The address of the liquidator","receiveAToken":"True if the liquidators wants to receive the collateral aTokens, `false` if he wants to receive the underlying collateral asset directly","user":"The address of the borrower getting liquidated"}},"MintUnbacked(address,address,address,uint256,uint16)":{"details":"Emitted on mintUnbacked()","params":{"amount":"The amount of supplied assets","onBehalfOf":"The beneficiary of the supplied assets, receiving the aTokens","referralCode":"The referral code used","reserve":"The address of the underlying asset of the reserve","user":"The address initiating the supply"}},"MintedToTreasury(address,uint256)":{"details":"Emitted when the protocol treasury receives minted aTokens from the accrued interest.","params":{"amountMinted":"The amount minted to the treasury","reserve":"The address of the reserve"}},"RebalanceStableBorrowRate(address,address)":{"details":"Emitted on rebalanceStableBorrowRate()","params":{"reserve":"The address of the underlying asset of the reserve","user":"The address of the user for which the rebalance has been executed"}},"Repay(address,address,address,uint256,bool)":{"details":"Emitted on repay()","params":{"amount":"The amount repaid","repayer":"The address of the user initiating the repay(), providing the funds","reserve":"The address of the underlying asset of the reserve","useATokens":"True if the repayment is done using aTokens, `false` if done with underlying asset directly","user":"The beneficiary of the repayment, getting his debt reduced"}},"ReserveDataUpdated(address,uint256,uint256,uint256,uint256,uint256)":{"details":"Emitted when the state of a reserve is updated.","params":{"liquidityIndex":"The next liquidity index","liquidityRate":"The next liquidity rate","reserve":"The address of the underlying asset of the reserve","stableBorrowRate":"The next stable borrow rate","variableBorrowIndex":"The next variable borrow index","variableBorrowRate":"The next variable borrow rate"}},"ReserveUsedAsCollateralDisabled(address,address)":{"details":"Emitted on setUserUseReserveAsCollateral()","params":{"reserve":"The address of the underlying asset of the reserve","user":"The address of the user enabling the usage as collateral"}},"ReserveUsedAsCollateralEnabled(address,address)":{"details":"Emitted on setUserUseReserveAsCollateral()","params":{"reserve":"The address of the underlying asset of the reserve","user":"The address of the user enabling the usage as collateral"}},"Supply(address,address,address,uint256,uint16)":{"details":"Emitted on supply()","params":{"amount":"The amount supplied","onBehalfOf":"The beneficiary of the supply, receiving the aTokens","referralCode":"The referral code used","reserve":"The address of the underlying asset of the reserve","user":"The address initiating the supply"}},"SwapBorrowRateMode(address,address,uint8)":{"details":"Emitted on swapBorrowRateMode()","params":{"interestRateMode":"The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable","reserve":"The address of the underlying asset of the reserve","user":"The address of the user swapping his rate mode"}},"UserEModeSet(address,uint8)":{"details":"Emitted when the user selects a certain asset category for eMode","params":{"categoryId":"The category id","user":"The address of the user"}},"Withdraw(address,address,address,uint256)":{"details":"Emitted on withdraw()","params":{"amount":"The amount to be withdrawn","reserve":"The address of the underlying asset being withdrawn","to":"The address that will receive the underlying","user":"The address initiating the withdrawal, owner of aTokens"}}},"kind":"dev","methods":{"ADDRESSES_PROVIDER()":{"returns":{"_0":"The address of the PoolAddressesProvider"}},"BRIDGE_PROTOCOL_FEE()":{"returns":{"_0":"The bridge fee sent to the protocol treasury"}},"FLASHLOAN_PREMIUM_TOTAL()":{"returns":{"_0":"The total fee on flashloans"}},"FLASHLOAN_PREMIUM_TO_PROTOCOL()":{"returns":{"_0":"The flashloan fee sent to the protocol treasury"}},"MAX_NUMBER_RESERVES()":{"returns":{"_0":"The maximum number of reserves supported"}},"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":{"returns":{"_0":"The percentage of available liquidity to borrow, expressed in bps"}},"backUnbacked(address,uint256,uint256)":{"params":{"amount":"The amount to back","asset":"The address of the underlying asset to back","fee":"The amount paid in fees"},"returns":{"_0":"The backed amount"}},"borrow(address,uint256,uint256,uint16,address)":{"params":{"amount":"The amount to be borrowed","asset":"The address of the underlying asset to borrow","interestRateMode":"The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable","onBehalfOf":"The address of the user who will receive the debt. Should be the address of the borrower itself calling the function if he wants to borrow against his own collateral, or the address of the credit delegator if he has been given credit delegation allowance","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":{"details":"In eMode, the protocol allows very high borrowing power to borrow assets of the same category. The category 0 is reserved as it's the default for volatile assets","params":{"config":"The configuration of the category","id":"The id of the category"}},"deposit(address,uint256,address,uint16)":{"details":"Deprecated: Use the `supply` function instead","params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","onBehalfOf":"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"dropReserve(address)":{"details":"Only callable by the PoolConfigurator contract","params":{"asset":"The address of the underlying asset of the reserve"}},"finalizeTransfer(address,address,address,uint256,uint256,uint256)":{"details":"Only callable by the overlying aToken of the `asset`","params":{"amount":"The amount being transferred/withdrawn","asset":"The address of the underlying asset of the aToken","balanceFromBefore":"The aToken balance of the `from` user before the transfer","balanceToBefore":"The aToken balance of the `to` user before the transfer","from":"The user from which the aTokens are transferred","to":"The user receiving the aTokens"}},"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":{"details":"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/","params":{"amounts":"The amounts of the assets being flash-borrowed","assets":"The addresses of the assets being flash-borrowed","interestRateModes":"Types of the debt to open if the flash loan is not returned:   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address","onBehalfOf":"The address  that will receive the debt in the case of using on `modes` 1 or 2","params":"Variadic packed params to pass to the receiver as extra information","receiverAddress":"The address of the contract receiving the funds, implementing IFlashLoanReceiver interface","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"flashLoanSimple(address,address,uint256,bytes,uint16)":{"details":"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/","params":{"amount":"The amount of the asset being flash-borrowed","asset":"The address of the asset being flash-borrowed","params":"Variadic packed params to pass to the receiver as extra information","receiverAddress":"The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"getConfiguration(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The configuration of the reserve"}},"getEModeCategoryData(uint8)":{"params":{"id":"The id of the category"},"returns":{"_0":"The configuration data of the category"}},"getReserveAddressById(uint16)":{"params":{"id":"The id of the reserve as stored in the DataTypes.ReserveData struct"},"returns":{"_0":"The address of the reserve associated with id"}},"getReserveData(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The state and configuration data of the reserve"}},"getReserveNormalizedIncome(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The reserve's normalized income"}},"getReserveNormalizedVariableDebt(address)":{"details":"WARNING: This function is intended to be used primarily by the protocol itself to get a \"dynamic\" variable index based on time, current stored index and virtual rate at the current moment (approx. a borrower would get if opening a position). This means that is always used in combination with variable debt supply/balances. If using this function externally, consider that is possible to have an increasing normalized variable debt that is not equivalent to how the variable debt index would be updated in storage (e.g. only updates with non-zero variable debt supply)","params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The reserve normalized variable debt"}},"getReservesList()":{"details":"It does not include dropped reserves","returns":{"_0":"The addresses of the underlying assets of the initialized reserves"}},"getUserAccountData(address)":{"params":{"user":"The address of the user"},"returns":{"availableBorrowsBase":"The borrowing power left of the user in the base currency used by the price feed","currentLiquidationThreshold":"The liquidation threshold of the user","healthFactor":"The current health factor of the user","ltv":"The loan to value of The user","totalCollateralBase":"The total collateral of the user in the base currency used by the price feed","totalDebtBase":"The total debt of the user in the base currency used by the price feed"}},"getUserConfiguration(address)":{"params":{"user":"The user address"},"returns":{"_0":"The configuration of the user"}},"getUserEMode(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The eMode id"}},"initReserve(address,address,address,address,address)":{"details":"Only callable by the PoolConfigurator contract","params":{"aTokenAddress":"The address of the aToken that will be assigned to the reserve","asset":"The address of the underlying asset of the reserve","interestRateStrategyAddress":"The address of the interest rate strategy contract","stableDebtAddress":"The address of the StableDebtToken that will be assigned to the reserve","variableDebtAddress":"The address of the VariableDebtToken that will be assigned to the reserve"}},"liquidationCall(address,address,address,uint256,bool)":{"params":{"collateralAsset":"The address of the underlying asset used as collateral, to receive as result of the liquidation","debtAsset":"The address of the underlying borrowed asset to be repaid with the liquidation","debtToCover":"The debt amount of borrowed `asset` the liquidator wants to cover","receiveAToken":"True if the liquidators wants to receive the collateral aTokens, `false` if he wants to receive the underlying collateral asset directly","user":"The address of the borrower getting liquidated"}},"mintToTreasury(address[])":{"params":{"assets":"The list of reserves for which the minting needs to be executed"}},"mintUnbacked(address,uint256,address,uint16)":{"params":{"amount":"The amount to mint","asset":"The address of the underlying asset to mint","onBehalfOf":"The address that will receive the aTokens","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"rebalanceStableBorrowRate(address,address)":{"params":{"asset":"The address of the underlying asset borrowed","user":"The address of the user to be rebalanced"}},"repay(address,uint256,uint256,address)":{"params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable","onBehalfOf":"The address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed"},"returns":{"_0":"The final amount repaid"}},"repayWithATokens(address,uint256,uint256)":{"details":"Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken balance is not enough to cover the whole debt","params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable"},"returns":{"_0":"The final amount repaid"}},"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":{"params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","deadline":"The deadline timestamp that the permit is valid","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable","onBehalfOf":"Address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed","permitR":"The R parameter of ERC712 permit sig","permitS":"The S parameter of ERC712 permit sig","permitV":"The V parameter of ERC712 permit sig"},"returns":{"_0":"The final amount repaid"}},"rescueTokens(address,address,uint256)":{"params":{"amount":"The amount of token to transfer","to":"The address of the recipient","token":"The address of the token"}},"resetIsolationModeTotalDebt(address)":{"details":"It requires the given asset has zero debt ceiling","params":{"asset":"The address of the underlying asset to reset the isolationModeTotalDebt"}},"setConfiguration(address,(uint256))":{"details":"Only callable by the PoolConfigurator contract","params":{"asset":"The address of the underlying asset of the reserve","configuration":"The new configuration bitmap"}},"setReserveInterestRateStrategyAddress(address,address)":{"details":"Only callable by the PoolConfigurator contract","params":{"asset":"The address of the underlying asset of the reserve","rateStrategyAddress":"The address of the interest rate strategy contract"}},"setUserEMode(uint8)":{"params":{"categoryId":"The id of the category"}},"setUserUseReserveAsCollateral(address,bool)":{"params":{"asset":"The address of the underlying asset supplied","useAsCollateral":"True if the user wants to use the supply as collateral, false otherwise"}},"supply(address,uint256,address,uint16)":{"params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","onBehalfOf":"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":{"params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","deadline":"The deadline timestamp that the permit is valid","onBehalfOf":"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet","permitR":"The R parameter of ERC712 permit sig","permitS":"The S parameter of ERC712 permit sig","permitV":"The V parameter of ERC712 permit sig","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"swapBorrowRateMode(address,uint256)":{"params":{"asset":"The address of the underlying asset borrowed","interestRateMode":"The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable"}},"updateBridgeProtocolFee(uint256)":{"params":{"bridgeProtocolFee":"The part of the premium sent to the protocol treasury"}},"updateFlashloanPremiums(uint128,uint128)":{"details":"The total premium is calculated on the total borrowed amountThe premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`Only callable by the PoolConfigurator contract","params":{"flashLoanPremiumToProtocol":"The part of the premium sent to the protocol treasury, expressed in bps","flashLoanPremiumTotal":"The total premium, expressed in bps"}},"withdraw(address,uint256,address)":{"params":{"amount":"The underlying amount to be withdrawn   - Send the value type(uint256).max in order to withdraw the whole aToken balance","asset":"The address of the underlying asset to withdraw","to":"The address that will receive the underlying, same as msg.sender if the user   wants to receive it on his own wallet, or a different address if the beneficiary is a   different wallet"},"returns":{"_0":"The final amount withdrawn"}}},"title":"IPool","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","BRIDGE_PROTOCOL_FEE()":"272d9072","FLASHLOAN_PREMIUM_TOTAL()":"074b2e43","FLASHLOAN_PREMIUM_TO_PROTOCOL()":"6a99c036","MAX_NUMBER_RESERVES()":"f8119d51","MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":"e82fec2f","backUnbacked(address,uint256,uint256)":"d65dc7a1","borrow(address,uint256,uint256,uint16,address)":"a415bcad","configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":"d579ea7d","deposit(address,uint256,address,uint16)":"e8eda9df","dropReserve(address)":"63c9b860","finalizeTransfer(address,address,address,uint256,uint256,uint256)":"d5ed3933","flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":"ab9c4b5d","flashLoanSimple(address,address,uint256,bytes,uint16)":"42b0b77c","getConfiguration(address)":"c44b11f7","getEModeCategoryData(uint8)":"6c6f6ae1","getReserveAddressById(uint16)":"52751797","getReserveData(address)":"35ea6a75","getReserveNormalizedIncome(address)":"d15e0053","getReserveNormalizedVariableDebt(address)":"386497fd","getReservesList()":"d1946dbc","getUserAccountData(address)":"bf92857c","getUserConfiguration(address)":"4417a583","getUserEMode(address)":"eddf1b79","initReserve(address,address,address,address,address)":"7a708e92","liquidationCall(address,address,address,uint256,bool)":"00a718a9","mintToTreasury(address[])":"9cd19996","mintUnbacked(address,uint256,address,uint16)":"69a933a5","rebalanceStableBorrowRate(address,address)":"cd112382","repay(address,uint256,uint256,address)":"573ade81","repayWithATokens(address,uint256,uint256)":"2dad97d4","repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":"ee3e210b","rescueTokens(address,address,uint256)":"cea9d26f","resetIsolationModeTotalDebt(address)":"e43e88a1","setConfiguration(address,(uint256))":"f51e435b","setReserveInterestRateStrategyAddress(address,address)":"1d2118f9","setUserEMode(uint8)":"28530a47","setUserUseReserveAsCollateral(address,bool)":"5a3b74b9","supply(address,uint256,address,uint16)":"617ba037","supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":"02c205f0","swapBorrowRateMode(address,uint256)":"94ba89a2","updateBridgeProtocolFee(uint256)":"3036b439","updateFlashloanPremiums(uint128,uint128)":"bcb6e522","withdraw(address,uint256,address)":"69328dec"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"backer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"BackUnbacked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowRate\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"Borrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"premium\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"FlashLoan\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalDebt\",\"type\":\"uint256\"}],\"name\":\"IsolationModeTotalDebtUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collateralAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"debtAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"debtToCover\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidatedCollateralAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"receiveAToken\",\"type\":\"bool\"}],\"name\":\"LiquidationCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"MintUnbacked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountMinted\",\"type\":\"uint256\"}],\"name\":\"MintedToTreasury\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"RebalanceStableBorrowRate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"repayer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"useATokens\",\"type\":\"bool\"}],\"name\":\"Repay\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidityRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stableBorrowRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"variableBorrowRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidityIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"variableBorrowIndex\",\"type\":\"uint256\"}],\"name\":\"ReserveDataUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"Supply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"}],\"name\":\"SwapBorrowRateMode\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"}],\"name\":\"UserEModeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BRIDGE_PROTOCOL_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FLASHLOAN_PREMIUM_TOTAL\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FLASHLOAN_PREMIUM_TO_PROTOCOL\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_NUMBER_RESERVES\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_STABLE_RATE_BORROW_SIZE_PERCENT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"backUnbacked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"borrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"id\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"ltv\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationBonus\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"priceSource\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"internalType\":\"struct DataTypes.EModeCategory\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"configureEModeCategory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"dropReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceFromBefore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceToBefore\",\"type\":\"uint256\"}],\"name\":\"finalizeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiverAddress\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"interestRateModes\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"flashLoan\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiverAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"flashLoanSimple\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getConfiguration\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"id\",\"type\":\"uint8\"}],\"name\":\"getEModeCategoryData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint16\",\"name\":\"ltv\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationBonus\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"priceSource\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"internalType\":\"struct DataTypes.EModeCategory\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"id\",\"type\":\"uint16\"}],\"name\":\"getReserveAddressById\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveData\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"configuration\",\"type\":\"tuple\"},{\"internalType\":\"uint128\",\"name\":\"liquidityIndex\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentLiquidityRate\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"variableBorrowIndex\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentVariableBorrowRate\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentStableBorrowRate\",\"type\":\"uint128\"},{\"internalType\":\"uint40\",\"name\":\"lastUpdateTimestamp\",\"type\":\"uint40\"},{\"internalType\":\"uint16\",\"name\":\"id\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"aTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"accruedToTreasury\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"unbacked\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"isolationModeTotalDebt\",\"type\":\"uint128\"}],\"internalType\":\"struct DataTypes.ReserveData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveNormalizedIncome\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveNormalizedVariableDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReservesList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserAccountData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalCollateralBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalDebtBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"availableBorrowsBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentLiquidationThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"healthFactor\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserConfiguration\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.UserConfigurationMap\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserEMode\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"aTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"}],\"name\":\"initReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collateralAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"debtAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"debtToCover\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"receiveAToken\",\"type\":\"bool\"}],\"name\":\"liquidationCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"}],\"name\":\"mintToTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"mintUnbacked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"rebalanceStableBorrowRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"repay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"}],\"name\":\"repayWithATokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"permitV\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"permitR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"permitS\",\"type\":\"bytes32\"}],\"name\":\"repayWithPermit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"rescueTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"resetIsolationModeTotalDebt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"configuration\",\"type\":\"tuple\"}],\"name\":\"setConfiguration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rateStrategyAddress\",\"type\":\"address\"}],\"name\":\"setReserveInterestRateStrategyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"}],\"name\":\"setUserEMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"useAsCollateral\",\"type\":\"bool\"}],\"name\":\"setUserUseReserveAsCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"supply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"permitV\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"permitR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"permitS\",\"type\":\"bytes32\"}],\"name\":\"supplyWithPermit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"}],\"name\":\"swapBorrowRateMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"bridgeProtocolFee\",\"type\":\"uint256\"}],\"name\":\"updateBridgeProtocolFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"flashLoanPremiumTotal\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"flashLoanPremiumToProtocol\",\"type\":\"uint128\"}],\"name\":\"updateFlashloanPremiums\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"BackUnbacked(address,address,uint256,uint256)\":{\"details\":\"Emitted on backUnbacked()\",\"params\":{\"amount\":\"The amount added as backing\",\"backer\":\"The address paying for the backing\",\"fee\":\"The amount paid in fees\",\"reserve\":\"The address of the underlying asset of the reserve\"}},\"Borrow(address,address,address,uint256,uint8,uint256,uint16)\":{\"details\":\"Emitted on borrow() and flashLoan() when debt needs to be opened\",\"params\":{\"amount\":\"The amount borrowed out\",\"borrowRate\":\"The numeric rate at which the user has borrowed, expressed in ray\",\"interestRateMode\":\"The rate mode: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"The address that will be getting the debt\",\"referralCode\":\"The referral code used\",\"reserve\":\"The address of the underlying asset being borrowed\",\"user\":\"The address of the user initiating the borrow(), receiving the funds on borrow() or just initiator of the transaction on flashLoan()\"}},\"FlashLoan(address,address,address,uint256,uint8,uint256,uint16)\":{\"details\":\"Emitted on flashLoan()\",\"params\":{\"amount\":\"The amount flash borrowed\",\"asset\":\"The address of the asset being flash borrowed\",\"initiator\":\"The address initiating the flash loan\",\"interestRateMode\":\"The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\",\"premium\":\"The fee flash borrowed\",\"referralCode\":\"The referral code used\",\"target\":\"The address of the flash loan receiver contract\"}},\"IsolationModeTotalDebtUpdated(address,uint256)\":{\"details\":\"Emitted on borrow(), repay() and liquidationCall() when using isolated assets\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"totalDebt\":\"The total isolation mode debt for the reserve\"}},\"LiquidationCall(address,address,address,uint256,uint256,address,bool)\":{\"details\":\"Emitted when a borrower is liquidated.\",\"params\":{\"collateralAsset\":\"The address of the underlying asset used as collateral, to receive as result of the liquidation\",\"debtAsset\":\"The address of the underlying borrowed asset to be repaid with the liquidation\",\"debtToCover\":\"The debt amount of borrowed `asset` the liquidator wants to cover\",\"liquidatedCollateralAmount\":\"The amount of collateral received by the liquidator\",\"liquidator\":\"The address of the liquidator\",\"receiveAToken\":\"True if the liquidators wants to receive the collateral aTokens, `false` if he wants to receive the underlying collateral asset directly\",\"user\":\"The address of the borrower getting liquidated\"}},\"MintUnbacked(address,address,address,uint256,uint16)\":{\"details\":\"Emitted on mintUnbacked()\",\"params\":{\"amount\":\"The amount of supplied assets\",\"onBehalfOf\":\"The beneficiary of the supplied assets, receiving the aTokens\",\"referralCode\":\"The referral code used\",\"reserve\":\"The address of the underlying asset of the reserve\",\"user\":\"The address initiating the supply\"}},\"MintedToTreasury(address,uint256)\":{\"details\":\"Emitted when the protocol treasury receives minted aTokens from the accrued interest.\",\"params\":{\"amountMinted\":\"The amount minted to the treasury\",\"reserve\":\"The address of the reserve\"}},\"RebalanceStableBorrowRate(address,address)\":{\"details\":\"Emitted on rebalanceStableBorrowRate()\",\"params\":{\"reserve\":\"The address of the underlying asset of the reserve\",\"user\":\"The address of the user for which the rebalance has been executed\"}},\"Repay(address,address,address,uint256,bool)\":{\"details\":\"Emitted on repay()\",\"params\":{\"amount\":\"The amount repaid\",\"repayer\":\"The address of the user initiating the repay(), providing the funds\",\"reserve\":\"The address of the underlying asset of the reserve\",\"useATokens\":\"True if the repayment is done using aTokens, `false` if done with underlying asset directly\",\"user\":\"The beneficiary of the repayment, getting his debt reduced\"}},\"ReserveDataUpdated(address,uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Emitted when the state of a reserve is updated.\",\"params\":{\"liquidityIndex\":\"The next liquidity index\",\"liquidityRate\":\"The next liquidity rate\",\"reserve\":\"The address of the underlying asset of the reserve\",\"stableBorrowRate\":\"The next stable borrow rate\",\"variableBorrowIndex\":\"The next variable borrow index\",\"variableBorrowRate\":\"The next variable borrow rate\"}},\"ReserveUsedAsCollateralDisabled(address,address)\":{\"details\":\"Emitted on setUserUseReserveAsCollateral()\",\"params\":{\"reserve\":\"The address of the underlying asset of the reserve\",\"user\":\"The address of the user enabling the usage as collateral\"}},\"ReserveUsedAsCollateralEnabled(address,address)\":{\"details\":\"Emitted on setUserUseReserveAsCollateral()\",\"params\":{\"reserve\":\"The address of the underlying asset of the reserve\",\"user\":\"The address of the user enabling the usage as collateral\"}},\"Supply(address,address,address,uint256,uint16)\":{\"details\":\"Emitted on supply()\",\"params\":{\"amount\":\"The amount supplied\",\"onBehalfOf\":\"The beneficiary of the supply, receiving the aTokens\",\"referralCode\":\"The referral code used\",\"reserve\":\"The address of the underlying asset of the reserve\",\"user\":\"The address initiating the supply\"}},\"SwapBorrowRateMode(address,address,uint8)\":{\"details\":\"Emitted on swapBorrowRateMode()\",\"params\":{\"interestRateMode\":\"The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\",\"reserve\":\"The address of the underlying asset of the reserve\",\"user\":\"The address of the user swapping his rate mode\"}},\"UserEModeSet(address,uint8)\":{\"details\":\"Emitted when the user selects a certain asset category for eMode\",\"params\":{\"categoryId\":\"The category id\",\"user\":\"The address of the user\"}},\"Withdraw(address,address,address,uint256)\":{\"details\":\"Emitted on withdraw()\",\"params\":{\"amount\":\"The amount to be withdrawn\",\"reserve\":\"The address of the underlying asset being withdrawn\",\"to\":\"The address that will receive the underlying\",\"user\":\"The address initiating the withdrawal, owner of aTokens\"}}},\"kind\":\"dev\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"returns\":{\"_0\":\"The address of the PoolAddressesProvider\"}},\"BRIDGE_PROTOCOL_FEE()\":{\"returns\":{\"_0\":\"The bridge fee sent to the protocol treasury\"}},\"FLASHLOAN_PREMIUM_TOTAL()\":{\"returns\":{\"_0\":\"The total fee on flashloans\"}},\"FLASHLOAN_PREMIUM_TO_PROTOCOL()\":{\"returns\":{\"_0\":\"The flashloan fee sent to the protocol treasury\"}},\"MAX_NUMBER_RESERVES()\":{\"returns\":{\"_0\":\"The maximum number of reserves supported\"}},\"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()\":{\"returns\":{\"_0\":\"The percentage of available liquidity to borrow, expressed in bps\"}},\"backUnbacked(address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount to back\",\"asset\":\"The address of the underlying asset to back\",\"fee\":\"The amount paid in fees\"},\"returns\":{\"_0\":\"The backed amount\"}},\"borrow(address,uint256,uint256,uint16,address)\":{\"params\":{\"amount\":\"The amount to be borrowed\",\"asset\":\"The address of the underlying asset to borrow\",\"interestRateMode\":\"The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"The address of the user who will receive the debt. Should be the address of the borrower itself calling the function if he wants to borrow against his own collateral, or the address of the credit delegator if he has been given credit delegation allowance\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))\":{\"details\":\"In eMode, the protocol allows very high borrowing power to borrow assets of the same category. The category 0 is reserved as it's the default for volatile assets\",\"params\":{\"config\":\"The configuration of the category\",\"id\":\"The id of the category\"}},\"deposit(address,uint256,address,uint16)\":{\"details\":\"Deprecated: Use the `supply` function instead\",\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"dropReserve(address)\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"}},\"finalizeTransfer(address,address,address,uint256,uint256,uint256)\":{\"details\":\"Only callable by the overlying aToken of the `asset`\",\"params\":{\"amount\":\"The amount being transferred/withdrawn\",\"asset\":\"The address of the underlying asset of the aToken\",\"balanceFromBefore\":\"The aToken balance of the `from` user before the transfer\",\"balanceToBefore\":\"The aToken balance of the `to` user before the transfer\",\"from\":\"The user from which the aTokens are transferred\",\"to\":\"The user receiving the aTokens\"}},\"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)\":{\"details\":\"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/\",\"params\":{\"amounts\":\"The amounts of the assets being flash-borrowed\",\"assets\":\"The addresses of the assets being flash-borrowed\",\"interestRateModes\":\"Types of the debt to open if the flash loan is not returned:   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\",\"onBehalfOf\":\"The address  that will receive the debt in the case of using on `modes` 1 or 2\",\"params\":\"Variadic packed params to pass to the receiver as extra information\",\"receiverAddress\":\"The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"flashLoanSimple(address,address,uint256,bytes,uint16)\":{\"details\":\"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/\",\"params\":{\"amount\":\"The amount of the asset being flash-borrowed\",\"asset\":\"The address of the asset being flash-borrowed\",\"params\":\"Variadic packed params to pass to the receiver as extra information\",\"receiverAddress\":\"The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"getConfiguration(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The configuration of the reserve\"}},\"getEModeCategoryData(uint8)\":{\"params\":{\"id\":\"The id of the category\"},\"returns\":{\"_0\":\"The configuration data of the category\"}},\"getReserveAddressById(uint16)\":{\"params\":{\"id\":\"The id of the reserve as stored in the DataTypes.ReserveData struct\"},\"returns\":{\"_0\":\"The address of the reserve associated with id\"}},\"getReserveData(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The state and configuration data of the reserve\"}},\"getReserveNormalizedIncome(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The reserve's normalized income\"}},\"getReserveNormalizedVariableDebt(address)\":{\"details\":\"WARNING: This function is intended to be used primarily by the protocol itself to get a \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current moment (approx. a borrower would get if opening a position). This means that is always used in combination with variable debt supply/balances. If using this function externally, consider that is possible to have an increasing normalized variable debt that is not equivalent to how the variable debt index would be updated in storage (e.g. only updates with non-zero variable debt supply)\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The reserve normalized variable debt\"}},\"getReservesList()\":{\"details\":\"It does not include dropped reserves\",\"returns\":{\"_0\":\"The addresses of the underlying assets of the initialized reserves\"}},\"getUserAccountData(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"availableBorrowsBase\":\"The borrowing power left of the user in the base currency used by the price feed\",\"currentLiquidationThreshold\":\"The liquidation threshold of the user\",\"healthFactor\":\"The current health factor of the user\",\"ltv\":\"The loan to value of The user\",\"totalCollateralBase\":\"The total collateral of the user in the base currency used by the price feed\",\"totalDebtBase\":\"The total debt of the user in the base currency used by the price feed\"}},\"getUserConfiguration(address)\":{\"params\":{\"user\":\"The user address\"},\"returns\":{\"_0\":\"The configuration of the user\"}},\"getUserEMode(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The eMode id\"}},\"initReserve(address,address,address,address,address)\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"aTokenAddress\":\"The address of the aToken that will be assigned to the reserve\",\"asset\":\"The address of the underlying asset of the reserve\",\"interestRateStrategyAddress\":\"The address of the interest rate strategy contract\",\"stableDebtAddress\":\"The address of the StableDebtToken that will be assigned to the reserve\",\"variableDebtAddress\":\"The address of the VariableDebtToken that will be assigned to the reserve\"}},\"liquidationCall(address,address,address,uint256,bool)\":{\"params\":{\"collateralAsset\":\"The address of the underlying asset used as collateral, to receive as result of the liquidation\",\"debtAsset\":\"The address of the underlying borrowed asset to be repaid with the liquidation\",\"debtToCover\":\"The debt amount of borrowed `asset` the liquidator wants to cover\",\"receiveAToken\":\"True if the liquidators wants to receive the collateral aTokens, `false` if he wants to receive the underlying collateral asset directly\",\"user\":\"The address of the borrower getting liquidated\"}},\"mintToTreasury(address[])\":{\"params\":{\"assets\":\"The list of reserves for which the minting needs to be executed\"}},\"mintUnbacked(address,uint256,address,uint16)\":{\"params\":{\"amount\":\"The amount to mint\",\"asset\":\"The address of the underlying asset to mint\",\"onBehalfOf\":\"The address that will receive the aTokens\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"rebalanceStableBorrowRate(address,address)\":{\"params\":{\"asset\":\"The address of the underlying asset borrowed\",\"user\":\"The address of the user to be rebalanced\"}},\"repay(address,uint256,uint256,address)\":{\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"The address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"repayWithATokens(address,uint256,uint256)\":{\"details\":\"Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken balance is not enough to cover the whole debt\",\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"deadline\":\"The deadline timestamp that the permit is valid\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"Address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed\",\"permitR\":\"The R parameter of ERC712 permit sig\",\"permitS\":\"The S parameter of ERC712 permit sig\",\"permitV\":\"The V parameter of ERC712 permit sig\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"rescueTokens(address,address,uint256)\":{\"params\":{\"amount\":\"The amount of token to transfer\",\"to\":\"The address of the recipient\",\"token\":\"The address of the token\"}},\"resetIsolationModeTotalDebt(address)\":{\"details\":\"It requires the given asset has zero debt ceiling\",\"params\":{\"asset\":\"The address of the underlying asset to reset the isolationModeTotalDebt\"}},\"setConfiguration(address,(uint256))\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"configuration\":\"The new configuration bitmap\"}},\"setReserveInterestRateStrategyAddress(address,address)\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"rateStrategyAddress\":\"The address of the interest rate strategy contract\"}},\"setUserEMode(uint8)\":{\"params\":{\"categoryId\":\"The id of the category\"}},\"setUserUseReserveAsCollateral(address,bool)\":{\"params\":{\"asset\":\"The address of the underlying asset supplied\",\"useAsCollateral\":\"True if the user wants to use the supply as collateral, false otherwise\"}},\"supply(address,uint256,address,uint16)\":{\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"deadline\":\"The deadline timestamp that the permit is valid\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet\",\"permitR\":\"The R parameter of ERC712 permit sig\",\"permitS\":\"The S parameter of ERC712 permit sig\",\"permitV\":\"The V parameter of ERC712 permit sig\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"swapBorrowRateMode(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset borrowed\",\"interestRateMode\":\"The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\"}},\"updateBridgeProtocolFee(uint256)\":{\"params\":{\"bridgeProtocolFee\":\"The part of the premium sent to the protocol treasury\"}},\"updateFlashloanPremiums(uint128,uint128)\":{\"details\":\"The total premium is calculated on the total borrowed amountThe premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`Only callable by the PoolConfigurator contract\",\"params\":{\"flashLoanPremiumToProtocol\":\"The part of the premium sent to the protocol treasury, expressed in bps\",\"flashLoanPremiumTotal\":\"The total premium, expressed in bps\"}},\"withdraw(address,uint256,address)\":{\"params\":{\"amount\":\"The underlying amount to be withdrawn   - Send the value type(uint256).max in order to withdraw the whole aToken balance\",\"asset\":\"The address of the underlying asset to withdraw\",\"to\":\"The address that will receive the underlying, same as msg.sender if the user   wants to receive it on his own wallet, or a different address if the beneficiary is a   different wallet\"},\"returns\":{\"_0\":\"The final amount withdrawn\"}}},\"title\":\"IPool\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the PoolAddressesProvider connected to this contract\"},\"BRIDGE_PROTOCOL_FEE()\":{\"notice\":\"Returns the part of the bridge fees sent to protocol\"},\"FLASHLOAN_PREMIUM_TOTAL()\":{\"notice\":\"Returns the total fee on flash loans\"},\"FLASHLOAN_PREMIUM_TO_PROTOCOL()\":{\"notice\":\"Returns the part of the flashloan fees sent to protocol\"},\"MAX_NUMBER_RESERVES()\":{\"notice\":\"Returns the maximum number of reserves supported to be listed in this Pool\"},\"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()\":{\"notice\":\"Returns the percentage of available liquidity that can be borrowed at once at stable rate\"},\"backUnbacked(address,uint256,uint256)\":{\"notice\":\"Back the current unbacked underlying with `amount` and pay `fee`.\"},\"borrow(address,uint256,uint256,uint16,address)\":{\"notice\":\"Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower already supplied enough collateral, or he was given enough allowance by a credit delegator on the corresponding debt token (StableDebtToken or VariableDebtToken) - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet   and 100 stable/variable debt tokens, depending on the `interestRateMode`\"},\"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))\":{\"notice\":\"Configures a new category for the eMode.\"},\"deposit(address,uint256,address,uint16)\":{\"notice\":\"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC\"},\"dropReserve(address)\":{\"notice\":\"Drop a reserve\"},\"finalizeTransfer(address,address,address,uint256,uint256,uint256)\":{\"notice\":\"Validates and finalizes an aToken transfer\"},\"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)\":{\"notice\":\"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned.\"},\"flashLoanSimple(address,address,uint256,bytes,uint16)\":{\"notice\":\"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned.\"},\"getConfiguration(address)\":{\"notice\":\"Returns the configuration of the reserve\"},\"getEModeCategoryData(uint8)\":{\"notice\":\"Returns the data of an eMode category\"},\"getReserveAddressById(uint16)\":{\"notice\":\"Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\"},\"getReserveData(address)\":{\"notice\":\"Returns the state and configuration of the reserve\"},\"getReserveNormalizedIncome(address)\":{\"notice\":\"Returns the normalized income of the reserve\"},\"getReserveNormalizedVariableDebt(address)\":{\"notice\":\"Returns the normalized variable debt per unit of asset\"},\"getReservesList()\":{\"notice\":\"Returns the list of the underlying assets of all the initialized reserves\"},\"getUserAccountData(address)\":{\"notice\":\"Returns the user account data across all the reserves\"},\"getUserConfiguration(address)\":{\"notice\":\"Returns the configuration of the user across all the reserves\"},\"getUserEMode(address)\":{\"notice\":\"Returns the eMode the user is using\"},\"initReserve(address,address,address,address,address)\":{\"notice\":\"Initializes a reserve, activating it, assigning an aToken and debt tokens and an interest rate strategy\"},\"liquidationCall(address,address,address,uint256,bool)\":{\"notice\":\"Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1 - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\"},\"mintToTreasury(address[])\":{\"notice\":\"Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\"},\"mintUnbacked(address,uint256,address,uint16)\":{\"notice\":\"Mints an `amount` of aTokens to the `onBehalfOf`\"},\"rebalanceStableBorrowRate(address,address)\":{\"notice\":\"Rebalances the stable interest rate of a user to the current stable rate defined on the reserve. - Users can be rebalanced if the following conditions are satisfied:     1. Usage ratio is above 95%     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too        much has been borrowed at a stable rate and suppliers are not earning enough\"},\"repay(address,uint256,uint256,address)\":{\"notice\":\"Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\"},\"repayWithATokens(address,uint256,uint256)\":{\"notice\":\"Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the equivalent debt tokens - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\"},\"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Repay with transfer approval of asset to be repaid done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\"},\"rescueTokens(address,address,uint256)\":{\"notice\":\"Rescue and transfer tokens locked in this contract\"},\"resetIsolationModeTotalDebt(address)\":{\"notice\":\"Resets the isolation mode total debt of the given asset to zero\"},\"setConfiguration(address,(uint256))\":{\"notice\":\"Sets the configuration bitmap of the reserve as a whole\"},\"setReserveInterestRateStrategyAddress(address,address)\":{\"notice\":\"Updates the address of the interest rate strategy contract\"},\"setUserEMode(uint8)\":{\"notice\":\"Allows a user to use the protocol in eMode\"},\"setUserUseReserveAsCollateral(address,bool)\":{\"notice\":\"Allows suppliers to enable/disable a specific supplied asset as collateral\"},\"supply(address,uint256,address,uint16)\":{\"notice\":\"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC\"},\"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Supply with transfer approval of asset to be supplied done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\"},\"swapBorrowRateMode(address,uint256)\":{\"notice\":\"Allows a borrower to swap his debt between stable and variable mode, or vice versa\"},\"updateBridgeProtocolFee(uint256)\":{\"notice\":\"Updates the protocol fee on the bridging\"},\"updateFlashloanPremiums(uint128,uint128)\":{\"notice\":\"Updates flash loan premiums. Flash loan premium consists of two parts: - A part is sent to aToken holders as extra, one time accumulated interest - A part is collected by the protocol treasury\"},\"withdraw(address,uint256,address)\":{\"notice\":\"Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\"}},\"notice\":\"Defines the basic interface for an Aave Pool.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/interfaces/IPool.sol\":\"IPool\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the PoolAddressesProvider connected to this contract"},"BRIDGE_PROTOCOL_FEE()":{"notice":"Returns the part of the bridge fees sent to protocol"},"FLASHLOAN_PREMIUM_TOTAL()":{"notice":"Returns the total fee on flash loans"},"FLASHLOAN_PREMIUM_TO_PROTOCOL()":{"notice":"Returns the part of the flashloan fees sent to protocol"},"MAX_NUMBER_RESERVES()":{"notice":"Returns the maximum number of reserves supported to be listed in this Pool"},"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":{"notice":"Returns the percentage of available liquidity that can be borrowed at once at stable rate"},"backUnbacked(address,uint256,uint256)":{"notice":"Back the current unbacked underlying with `amount` and pay `fee`."},"borrow(address,uint256,uint256,uint16,address)":{"notice":"Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower already supplied enough collateral, or he was given enough allowance by a credit delegator on the corresponding debt token (StableDebtToken or VariableDebtToken) - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet   and 100 stable/variable debt tokens, depending on the `interestRateMode`"},"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":{"notice":"Configures a new category for the eMode."},"deposit(address,uint256,address,uint16)":{"notice":"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC"},"dropReserve(address)":{"notice":"Drop a reserve"},"finalizeTransfer(address,address,address,uint256,uint256,uint256)":{"notice":"Validates and finalizes an aToken transfer"},"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":{"notice":"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned."},"flashLoanSimple(address,address,uint256,bytes,uint16)":{"notice":"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned."},"getConfiguration(address)":{"notice":"Returns the configuration of the reserve"},"getEModeCategoryData(uint8)":{"notice":"Returns the data of an eMode category"},"getReserveAddressById(uint16)":{"notice":"Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct"},"getReserveData(address)":{"notice":"Returns the state and configuration of the reserve"},"getReserveNormalizedIncome(address)":{"notice":"Returns the normalized income of the reserve"},"getReserveNormalizedVariableDebt(address)":{"notice":"Returns the normalized variable debt per unit of asset"},"getReservesList()":{"notice":"Returns the list of the underlying assets of all the initialized reserves"},"getUserAccountData(address)":{"notice":"Returns the user account data across all the reserves"},"getUserConfiguration(address)":{"notice":"Returns the configuration of the user across all the reserves"},"getUserEMode(address)":{"notice":"Returns the eMode the user is using"},"initReserve(address,address,address,address,address)":{"notice":"Initializes a reserve, activating it, assigning an aToken and debt tokens and an interest rate strategy"},"liquidationCall(address,address,address,uint256,bool)":{"notice":"Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1 - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk"},"mintToTreasury(address[])":{"notice":"Mints the assets accrued through the reserve factor to the treasury in the form of aTokens"},"mintUnbacked(address,uint256,address,uint16)":{"notice":"Mints an `amount` of aTokens to the `onBehalfOf`"},"rebalanceStableBorrowRate(address,address)":{"notice":"Rebalances the stable interest rate of a user to the current stable rate defined on the reserve. - Users can be rebalanced if the following conditions are satisfied:     1. Usage ratio is above 95%     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too        much has been borrowed at a stable rate and suppliers are not earning enough"},"repay(address,uint256,uint256,address)":{"notice":"Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address"},"repayWithATokens(address,uint256,uint256)":{"notice":"Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the equivalent debt tokens - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens"},"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":{"notice":"Repay with transfer approval of asset to be repaid done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713"},"rescueTokens(address,address,uint256)":{"notice":"Rescue and transfer tokens locked in this contract"},"resetIsolationModeTotalDebt(address)":{"notice":"Resets the isolation mode total debt of the given asset to zero"},"setConfiguration(address,(uint256))":{"notice":"Sets the configuration bitmap of the reserve as a whole"},"setReserveInterestRateStrategyAddress(address,address)":{"notice":"Updates the address of the interest rate strategy contract"},"setUserEMode(uint8)":{"notice":"Allows a user to use the protocol in eMode"},"setUserUseReserveAsCollateral(address,bool)":{"notice":"Allows suppliers to enable/disable a specific supplied asset as collateral"},"supply(address,uint256,address,uint16)":{"notice":"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC"},"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":{"notice":"Supply with transfer approval of asset to be supplied done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713"},"swapBorrowRateMode(address,uint256)":{"notice":"Allows a borrower to swap his debt between stable and variable mode, or vice versa"},"updateBridgeProtocolFee(uint256)":{"notice":"Updates the protocol fee on the bridging"},"updateFlashloanPremiums(uint128,uint128)":{"notice":"Updates flash loan premiums. Flash loan premium consists of two parts: - A part is sent to aToken holders as extra, one time accumulated interest - A part is collected by the protocol treasury"},"withdraw(address,uint256,address)":{"notice":"Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC"}},"notice":"Defines the basic interface for an Aave Pool.","version":1}}},"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol":{"IPoolAddressesProvider":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"ACLAdminUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"ACLManagerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"AddressSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"address","name":"proxyAddress","type":"address"},{"indexed":false,"internalType":"address","name":"oldImplementationAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newImplementationAddress","type":"address"}],"name":"AddressSetAsProxy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"oldMarketId","type":"string"},{"indexed":true,"internalType":"string","name":"newMarketId","type":"string"}],"name":"MarketIdSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"PoolConfiguratorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"PoolDataProviderUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"PoolUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"PriceOracleSentinelUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"PriceOracleUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"address","name":"proxyAddress","type":"address"},{"indexed":true,"internalType":"address","name":"implementationAddress","type":"address"}],"name":"ProxyCreated","type":"event"},{"inputs":[],"name":"getACLAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getACLManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"getAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketId","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolConfigurator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolDataProvider","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceOracleSentinel","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAclAdmin","type":"address"}],"name":"setACLAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAclManager","type":"address"}],"name":"setACLManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"newAddress","type":"address"}],"name":"setAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"newImplementationAddress","type":"address"}],"name":"setAddressAsProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newMarketId","type":"string"}],"name":"setMarketId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPoolConfiguratorImpl","type":"address"}],"name":"setPoolConfiguratorImpl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDataProvider","type":"address"}],"name":"setPoolDataProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPoolImpl","type":"address"}],"name":"setPoolImpl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPriceOracle","type":"address"}],"name":"setPriceOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPriceOracleSentinel","type":"address"}],"name":"setPriceOracleSentinel","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","events":{"ACLAdminUpdated(address,address)":{"details":"Emitted when the ACL admin is updated.","params":{"newAddress":"The new address of the ACLAdmin","oldAddress":"The old address of the ACLAdmin"}},"ACLManagerUpdated(address,address)":{"details":"Emitted when the ACL manager is updated.","params":{"newAddress":"The new address of the ACLManager","oldAddress":"The old address of the ACLManager"}},"AddressSet(bytes32,address,address)":{"details":"Emitted when a new non-proxied contract address is registered.","params":{"id":"The identifier of the contract","newAddress":"The address of the new contract","oldAddress":"The address of the old contract"}},"AddressSetAsProxy(bytes32,address,address,address)":{"details":"Emitted when the implementation of the proxy registered with id is updated","params":{"id":"The identifier of the contract","newImplementationAddress":"The address of the new implementation contract","oldImplementationAddress":"The address of the old implementation contract","proxyAddress":"The address of the proxy contract"}},"MarketIdSet(string,string)":{"details":"Emitted when the market identifier is updated.","params":{"newMarketId":"The new id of the market","oldMarketId":"The old id of the market"}},"PoolConfiguratorUpdated(address,address)":{"details":"Emitted when the pool configurator is updated.","params":{"newAddress":"The new address of the PoolConfigurator","oldAddress":"The old address of the PoolConfigurator"}},"PoolDataProviderUpdated(address,address)":{"details":"Emitted when the pool data provider is updated.","params":{"newAddress":"The new address of the PoolDataProvider","oldAddress":"The old address of the PoolDataProvider"}},"PoolUpdated(address,address)":{"details":"Emitted when the pool is updated.","params":{"newAddress":"The new address of the Pool","oldAddress":"The old address of the Pool"}},"PriceOracleSentinelUpdated(address,address)":{"details":"Emitted when the price oracle sentinel is updated.","params":{"newAddress":"The new address of the PriceOracleSentinel","oldAddress":"The old address of the PriceOracleSentinel"}},"PriceOracleUpdated(address,address)":{"details":"Emitted when the price oracle is updated.","params":{"newAddress":"The new address of the PriceOracle","oldAddress":"The old address of the PriceOracle"}},"ProxyCreated(bytes32,address,address)":{"details":"Emitted when a new proxy is created.","params":{"id":"The identifier of the proxy","implementationAddress":"The address of the implementation contract","proxyAddress":"The address of the created proxy contract"}}},"kind":"dev","methods":{"getACLAdmin()":{"returns":{"_0":"The address of the ACL admin"}},"getACLManager()":{"returns":{"_0":"The address of the ACLManager"}},"getAddress(bytes32)":{"details":"The returned address might be an EOA or a contract, potentially proxiedIt returns ZERO if there is no registered address with the given id","params":{"id":"The id"},"returns":{"_0":"The address of the registered for the specified id"}},"getMarketId()":{"returns":{"_0":"The market id"}},"getPool()":{"returns":{"_0":"The Pool proxy address"}},"getPoolConfigurator()":{"returns":{"_0":"The PoolConfigurator proxy address"}},"getPoolDataProvider()":{"returns":{"_0":"The address of the DataProvider"}},"getPriceOracle()":{"returns":{"_0":"The address of the PriceOracle"}},"getPriceOracleSentinel()":{"returns":{"_0":"The address of the PriceOracleSentinel"}},"setACLAdmin(address)":{"params":{"newAclAdmin":"The address of the new ACL admin"}},"setACLManager(address)":{"params":{"newAclManager":"The address of the new ACLManager"}},"setAddress(bytes32,address)":{"details":"IMPORTANT Use this function carefully, as it will do a hard replacement","params":{"id":"The id","newAddress":"The address to set"}},"setAddressAsProxy(bytes32,address)":{"details":"IMPORTANT Use this function carefully, only for ids that don't have an explicit setter function, in order to avoid unexpected consequences","params":{"id":"The id","newImplementationAddress":"The address of the new implementation"}},"setMarketId(string)":{"details":"This can be used to create an onchain registry of PoolAddressesProviders to identify and validate multiple Aave markets.","params":{"newMarketId":"The market id"}},"setPoolConfiguratorImpl(address)":{"params":{"newPoolConfiguratorImpl":"The new PoolConfigurator implementation"}},"setPoolDataProvider(address)":{"params":{"newDataProvider":"The address of the new DataProvider"}},"setPoolImpl(address)":{"params":{"newPoolImpl":"The new Pool implementation"}},"setPriceOracle(address)":{"params":{"newPriceOracle":"The address of the new PriceOracle"}},"setPriceOracleSentinel(address)":{"params":{"newPriceOracleSentinel":"The address of the new PriceOracleSentinel"}}},"title":"IPoolAddressesProvider","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getACLAdmin()":"0e67178c","getACLManager()":"707cd716","getAddress(bytes32)":"21f8a721","getMarketId()":"568ef470","getPool()":"026b1d5f","getPoolConfigurator()":"631adfca","getPoolDataProvider()":"e860accb","getPriceOracle()":"fca513a8","getPriceOracleSentinel()":"5eb88d3d","setACLAdmin(address)":"76d84ffc","setACLManager(address)":"ed301ca9","setAddress(bytes32,address)":"ca446dd9","setAddressAsProxy(bytes32,address)":"5dcc528c","setMarketId(string)":"f67b1847","setPoolConfiguratorImpl(address)":"e4ca28b7","setPoolDataProvider(address)":"e44e9ed1","setPoolImpl(address)":"a1564406","setPriceOracle(address)":"530e784f","setPriceOracleSentinel(address)":"74944cec"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ACLAdminUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ACLManagerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"AddressSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxyAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldImplementationAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementationAddress\",\"type\":\"address\"}],\"name\":\"AddressSetAsProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"oldMarketId\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"newMarketId\",\"type\":\"string\"}],\"name\":\"MarketIdSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PoolConfiguratorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PoolDataProviderUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PoolUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PriceOracleSentinelUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PriceOracleUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxyAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementationAddress\",\"type\":\"address\"}],\"name\":\"ProxyCreated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getACLAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getACLManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMarketId\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolConfigurator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolDataProvider\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPriceOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPriceOracleSentinel\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAclAdmin\",\"type\":\"address\"}],\"name\":\"setACLAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAclManager\",\"type\":\"address\"}],\"name\":\"setACLManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"setAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"newImplementationAddress\",\"type\":\"address\"}],\"name\":\"setAddressAsProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newMarketId\",\"type\":\"string\"}],\"name\":\"setMarketId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newPoolConfiguratorImpl\",\"type\":\"address\"}],\"name\":\"setPoolConfiguratorImpl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newDataProvider\",\"type\":\"address\"}],\"name\":\"setPoolDataProvider\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newPoolImpl\",\"type\":\"address\"}],\"name\":\"setPoolImpl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newPriceOracle\",\"type\":\"address\"}],\"name\":\"setPriceOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newPriceOracleSentinel\",\"type\":\"address\"}],\"name\":\"setPriceOracleSentinel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"ACLAdminUpdated(address,address)\":{\"details\":\"Emitted when the ACL admin is updated.\",\"params\":{\"newAddress\":\"The new address of the ACLAdmin\",\"oldAddress\":\"The old address of the ACLAdmin\"}},\"ACLManagerUpdated(address,address)\":{\"details\":\"Emitted when the ACL manager is updated.\",\"params\":{\"newAddress\":\"The new address of the ACLManager\",\"oldAddress\":\"The old address of the ACLManager\"}},\"AddressSet(bytes32,address,address)\":{\"details\":\"Emitted when a new non-proxied contract address is registered.\",\"params\":{\"id\":\"The identifier of the contract\",\"newAddress\":\"The address of the new contract\",\"oldAddress\":\"The address of the old contract\"}},\"AddressSetAsProxy(bytes32,address,address,address)\":{\"details\":\"Emitted when the implementation of the proxy registered with id is updated\",\"params\":{\"id\":\"The identifier of the contract\",\"newImplementationAddress\":\"The address of the new implementation contract\",\"oldImplementationAddress\":\"The address of the old implementation contract\",\"proxyAddress\":\"The address of the proxy contract\"}},\"MarketIdSet(string,string)\":{\"details\":\"Emitted when the market identifier is updated.\",\"params\":{\"newMarketId\":\"The new id of the market\",\"oldMarketId\":\"The old id of the market\"}},\"PoolConfiguratorUpdated(address,address)\":{\"details\":\"Emitted when the pool configurator is updated.\",\"params\":{\"newAddress\":\"The new address of the PoolConfigurator\",\"oldAddress\":\"The old address of the PoolConfigurator\"}},\"PoolDataProviderUpdated(address,address)\":{\"details\":\"Emitted when the pool data provider is updated.\",\"params\":{\"newAddress\":\"The new address of the PoolDataProvider\",\"oldAddress\":\"The old address of the PoolDataProvider\"}},\"PoolUpdated(address,address)\":{\"details\":\"Emitted when the pool is updated.\",\"params\":{\"newAddress\":\"The new address of the Pool\",\"oldAddress\":\"The old address of the Pool\"}},\"PriceOracleSentinelUpdated(address,address)\":{\"details\":\"Emitted when the price oracle sentinel is updated.\",\"params\":{\"newAddress\":\"The new address of the PriceOracleSentinel\",\"oldAddress\":\"The old address of the PriceOracleSentinel\"}},\"PriceOracleUpdated(address,address)\":{\"details\":\"Emitted when the price oracle is updated.\",\"params\":{\"newAddress\":\"The new address of the PriceOracle\",\"oldAddress\":\"The old address of the PriceOracle\"}},\"ProxyCreated(bytes32,address,address)\":{\"details\":\"Emitted when a new proxy is created.\",\"params\":{\"id\":\"The identifier of the proxy\",\"implementationAddress\":\"The address of the implementation contract\",\"proxyAddress\":\"The address of the created proxy contract\"}}},\"kind\":\"dev\",\"methods\":{\"getACLAdmin()\":{\"returns\":{\"_0\":\"The address of the ACL admin\"}},\"getACLManager()\":{\"returns\":{\"_0\":\"The address of the ACLManager\"}},\"getAddress(bytes32)\":{\"details\":\"The returned address might be an EOA or a contract, potentially proxiedIt returns ZERO if there is no registered address with the given id\",\"params\":{\"id\":\"The id\"},\"returns\":{\"_0\":\"The address of the registered for the specified id\"}},\"getMarketId()\":{\"returns\":{\"_0\":\"The market id\"}},\"getPool()\":{\"returns\":{\"_0\":\"The Pool proxy address\"}},\"getPoolConfigurator()\":{\"returns\":{\"_0\":\"The PoolConfigurator proxy address\"}},\"getPoolDataProvider()\":{\"returns\":{\"_0\":\"The address of the DataProvider\"}},\"getPriceOracle()\":{\"returns\":{\"_0\":\"The address of the PriceOracle\"}},\"getPriceOracleSentinel()\":{\"returns\":{\"_0\":\"The address of the PriceOracleSentinel\"}},\"setACLAdmin(address)\":{\"params\":{\"newAclAdmin\":\"The address of the new ACL admin\"}},\"setACLManager(address)\":{\"params\":{\"newAclManager\":\"The address of the new ACLManager\"}},\"setAddress(bytes32,address)\":{\"details\":\"IMPORTANT Use this function carefully, as it will do a hard replacement\",\"params\":{\"id\":\"The id\",\"newAddress\":\"The address to set\"}},\"setAddressAsProxy(bytes32,address)\":{\"details\":\"IMPORTANT Use this function carefully, only for ids that don't have an explicit setter function, in order to avoid unexpected consequences\",\"params\":{\"id\":\"The id\",\"newImplementationAddress\":\"The address of the new implementation\"}},\"setMarketId(string)\":{\"details\":\"This can be used to create an onchain registry of PoolAddressesProviders to identify and validate multiple Aave markets.\",\"params\":{\"newMarketId\":\"The market id\"}},\"setPoolConfiguratorImpl(address)\":{\"params\":{\"newPoolConfiguratorImpl\":\"The new PoolConfigurator implementation\"}},\"setPoolDataProvider(address)\":{\"params\":{\"newDataProvider\":\"The address of the new DataProvider\"}},\"setPoolImpl(address)\":{\"params\":{\"newPoolImpl\":\"The new Pool implementation\"}},\"setPriceOracle(address)\":{\"params\":{\"newPriceOracle\":\"The address of the new PriceOracle\"}},\"setPriceOracleSentinel(address)\":{\"params\":{\"newPriceOracleSentinel\":\"The address of the new PriceOracleSentinel\"}}},\"title\":\"IPoolAddressesProvider\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getACLAdmin()\":{\"notice\":\"Returns the address of the ACL admin.\"},\"getACLManager()\":{\"notice\":\"Returns the address of the ACL manager.\"},\"getAddress(bytes32)\":{\"notice\":\"Returns an address by its identifier.\"},\"getMarketId()\":{\"notice\":\"Returns the id of the Aave market to which this contract points to.\"},\"getPool()\":{\"notice\":\"Returns the address of the Pool proxy.\"},\"getPoolConfigurator()\":{\"notice\":\"Returns the address of the PoolConfigurator proxy.\"},\"getPoolDataProvider()\":{\"notice\":\"Returns the address of the data provider.\"},\"getPriceOracle()\":{\"notice\":\"Returns the address of the price oracle.\"},\"getPriceOracleSentinel()\":{\"notice\":\"Returns the address of the price oracle sentinel.\"},\"setACLAdmin(address)\":{\"notice\":\"Updates the address of the ACL admin.\"},\"setACLManager(address)\":{\"notice\":\"Updates the address of the ACL manager.\"},\"setAddress(bytes32,address)\":{\"notice\":\"Sets an address for an id replacing the address saved in the addresses map.\"},\"setAddressAsProxy(bytes32,address)\":{\"notice\":\"General function to update the implementation of a proxy registered with certain `id`. If there is no proxy registered, it will instantiate one and set as implementation the `newImplementationAddress`.\"},\"setMarketId(string)\":{\"notice\":\"Associates an id with a specific PoolAddressesProvider.\"},\"setPoolConfiguratorImpl(address)\":{\"notice\":\"Updates the implementation of the PoolConfigurator, or creates a proxy setting the new `PoolConfigurator` implementation when the function is called for the first time.\"},\"setPoolDataProvider(address)\":{\"notice\":\"Updates the address of the data provider.\"},\"setPoolImpl(address)\":{\"notice\":\"Updates the implementation of the Pool, or creates a proxy setting the new `pool` implementation when the function is called for the first time.\"},\"setPriceOracle(address)\":{\"notice\":\"Updates the address of the price oracle.\"},\"setPriceOracleSentinel(address)\":{\"notice\":\"Updates the address of the price oracle sentinel.\"}},\"notice\":\"Defines the basic interface for a Pool Addresses Provider.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":\"IPoolAddressesProvider\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"getACLAdmin()":{"notice":"Returns the address of the ACL admin."},"getACLManager()":{"notice":"Returns the address of the ACL manager."},"getAddress(bytes32)":{"notice":"Returns an address by its identifier."},"getMarketId()":{"notice":"Returns the id of the Aave market to which this contract points to."},"getPool()":{"notice":"Returns the address of the Pool proxy."},"getPoolConfigurator()":{"notice":"Returns the address of the PoolConfigurator proxy."},"getPoolDataProvider()":{"notice":"Returns the address of the data provider."},"getPriceOracle()":{"notice":"Returns the address of the price oracle."},"getPriceOracleSentinel()":{"notice":"Returns the address of the price oracle sentinel."},"setACLAdmin(address)":{"notice":"Updates the address of the ACL admin."},"setACLManager(address)":{"notice":"Updates the address of the ACL manager."},"setAddress(bytes32,address)":{"notice":"Sets an address for an id replacing the address saved in the addresses map."},"setAddressAsProxy(bytes32,address)":{"notice":"General function to update the implementation of a proxy registered with certain `id`. If there is no proxy registered, it will instantiate one and set as implementation the `newImplementationAddress`."},"setMarketId(string)":{"notice":"Associates an id with a specific PoolAddressesProvider."},"setPoolConfiguratorImpl(address)":{"notice":"Updates the implementation of the PoolConfigurator, or creates a proxy setting the new `PoolConfigurator` implementation when the function is called for the first time."},"setPoolDataProvider(address)":{"notice":"Updates the address of the data provider."},"setPoolImpl(address)":{"notice":"Updates the implementation of the Pool, or creates a proxy setting the new `pool` implementation when the function is called for the first time."},"setPriceOracle(address)":{"notice":"Updates the address of the price oracle."},"setPriceOracleSentinel(address)":{"notice":"Updates the address of the price oracle sentinel."}},"notice":"Defines the basic interface for a Pool Addresses Provider.","version":1}}},"@aave/core-v3/contracts/interfaces/IPoolAddressesProviderRegistry.sol":{"IPoolAddressesProviderRegistry":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addressesProvider","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"AddressesProviderRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addressesProvider","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"AddressesProviderUnregistered","type":"event"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getAddressesProviderAddressById","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addressesProvider","type":"address"}],"name":"getAddressesProviderIdByAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAddressesProvidersList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"provider","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"registerAddressesProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"provider","type":"address"}],"name":"unregisterAddressesProvider","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","events":{"AddressesProviderRegistered(address,uint256)":{"details":"Emitted when a new AddressesProvider is registered.","params":{"addressesProvider":"The address of the registered PoolAddressesProvider","id":"The id of the registered PoolAddressesProvider"}},"AddressesProviderUnregistered(address,uint256)":{"details":"Emitted when an AddressesProvider is unregistered.","params":{"addressesProvider":"The address of the unregistered PoolAddressesProvider","id":"The id of the unregistered PoolAddressesProvider"}}},"kind":"dev","methods":{"getAddressesProviderAddressById(uint256)":{"params":{"id":"The id of the market"},"returns":{"_0":"The address of the PoolAddressesProvider with the given id or zero address if it is not registered"}},"getAddressesProviderIdByAddress(address)":{"params":{"addressesProvider":"The address of the PoolAddressesProvider"},"returns":{"_0":"The id of the PoolAddressesProvider or 0 if is not registered"}},"getAddressesProvidersList()":{"returns":{"_0":"The list of addresses providers"}},"registerAddressesProvider(address,uint256)":{"details":"The PoolAddressesProvider must not already be registered in the registryThe id must not be used by an already registered PoolAddressesProvider","params":{"id":"The id for the new PoolAddressesProvider, referring to the market it belongs to","provider":"The address of the new PoolAddressesProvider"}},"unregisterAddressesProvider(address)":{"params":{"provider":"The PoolAddressesProvider address"}}},"title":"IPoolAddressesProviderRegistry","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getAddressesProviderAddressById(uint256)":"57dc0566","getAddressesProviderIdByAddress(address)":"d0267be7","getAddressesProvidersList()":"365ccbbf","registerAddressesProvider(address,uint256)":"d258191e","unregisterAddressesProvider(address)":"0de26707"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addressesProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"AddressesProviderRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addressesProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"AddressesProviderUnregistered\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getAddressesProviderAddressById\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressesProvider\",\"type\":\"address\"}],\"name\":\"getAddressesProviderIdByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAddressesProvidersList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"registerAddressesProvider\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"unregisterAddressesProvider\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"AddressesProviderRegistered(address,uint256)\":{\"details\":\"Emitted when a new AddressesProvider is registered.\",\"params\":{\"addressesProvider\":\"The address of the registered PoolAddressesProvider\",\"id\":\"The id of the registered PoolAddressesProvider\"}},\"AddressesProviderUnregistered(address,uint256)\":{\"details\":\"Emitted when an AddressesProvider is unregistered.\",\"params\":{\"addressesProvider\":\"The address of the unregistered PoolAddressesProvider\",\"id\":\"The id of the unregistered PoolAddressesProvider\"}}},\"kind\":\"dev\",\"methods\":{\"getAddressesProviderAddressById(uint256)\":{\"params\":{\"id\":\"The id of the market\"},\"returns\":{\"_0\":\"The address of the PoolAddressesProvider with the given id or zero address if it is not registered\"}},\"getAddressesProviderIdByAddress(address)\":{\"params\":{\"addressesProvider\":\"The address of the PoolAddressesProvider\"},\"returns\":{\"_0\":\"The id of the PoolAddressesProvider or 0 if is not registered\"}},\"getAddressesProvidersList()\":{\"returns\":{\"_0\":\"The list of addresses providers\"}},\"registerAddressesProvider(address,uint256)\":{\"details\":\"The PoolAddressesProvider must not already be registered in the registryThe id must not be used by an already registered PoolAddressesProvider\",\"params\":{\"id\":\"The id for the new PoolAddressesProvider, referring to the market it belongs to\",\"provider\":\"The address of the new PoolAddressesProvider\"}},\"unregisterAddressesProvider(address)\":{\"params\":{\"provider\":\"The PoolAddressesProvider address\"}}},\"title\":\"IPoolAddressesProviderRegistry\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAddressesProviderAddressById(uint256)\":{\"notice\":\"Returns the address of a registered PoolAddressesProvider\"},\"getAddressesProviderIdByAddress(address)\":{\"notice\":\"Returns the id of a registered PoolAddressesProvider\"},\"getAddressesProvidersList()\":{\"notice\":\"Returns the list of registered addresses providers\"},\"registerAddressesProvider(address,uint256)\":{\"notice\":\"Registers an addresses provider\"},\"unregisterAddressesProvider(address)\":{\"notice\":\"Removes an addresses provider from the list of registered addresses providers\"}},\"notice\":\"Defines the basic interface for an Aave Pool Addresses Provider Registry.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/interfaces/IPoolAddressesProviderRegistry.sol\":\"IPoolAddressesProviderRegistry\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/interfaces/IPoolAddressesProviderRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProviderRegistry\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool Addresses Provider Registry.\\n */\\ninterface IPoolAddressesProviderRegistry {\\n  /**\\n   * @dev Emitted when a new AddressesProvider is registered.\\n   * @param addressesProvider The address of the registered PoolAddressesProvider\\n   * @param id The id of the registered PoolAddressesProvider\\n   */\\n  event AddressesProviderRegistered(address indexed addressesProvider, uint256 indexed id);\\n\\n  /**\\n   * @dev Emitted when an AddressesProvider is unregistered.\\n   * @param addressesProvider The address of the unregistered PoolAddressesProvider\\n   * @param id The id of the unregistered PoolAddressesProvider\\n   */\\n  event AddressesProviderUnregistered(address indexed addressesProvider, uint256 indexed id);\\n\\n  /**\\n   * @notice Returns the list of registered addresses providers\\n   * @return The list of addresses providers\\n   */\\n  function getAddressesProvidersList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the id of a registered PoolAddressesProvider\\n   * @param addressesProvider The address of the PoolAddressesProvider\\n   * @return The id of the PoolAddressesProvider or 0 if is not registered\\n   */\\n  function getAddressesProviderIdByAddress(\\n    address addressesProvider\\n  ) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of a registered PoolAddressesProvider\\n   * @param id The id of the market\\n   * @return The address of the PoolAddressesProvider with the given id or zero address if it is not registered\\n   */\\n  function getAddressesProviderAddressById(uint256 id) external view returns (address);\\n\\n  /**\\n   * @notice Registers an addresses provider\\n   * @dev The PoolAddressesProvider must not already be registered in the registry\\n   * @dev The id must not be used by an already registered PoolAddressesProvider\\n   * @param provider The address of the new PoolAddressesProvider\\n   * @param id The id for the new PoolAddressesProvider, referring to the market it belongs to\\n   */\\n  function registerAddressesProvider(address provider, uint256 id) external;\\n\\n  /**\\n   * @notice Removes an addresses provider from the list of registered addresses providers\\n   * @param provider The PoolAddressesProvider address\\n   */\\n  function unregisterAddressesProvider(address provider) external;\\n}\\n\",\"keccak256\":\"0x71ae9fcb634382141cce4c138230280f50b98fc47ba1d90cbc2d15ef8224fab1\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"getAddressesProviderAddressById(uint256)":{"notice":"Returns the address of a registered PoolAddressesProvider"},"getAddressesProviderIdByAddress(address)":{"notice":"Returns the id of a registered PoolAddressesProvider"},"getAddressesProvidersList()":{"notice":"Returns the list of registered addresses providers"},"registerAddressesProvider(address,uint256)":{"notice":"Registers an addresses provider"},"unregisterAddressesProvider(address)":{"notice":"Removes an addresses provider from the list of registered addresses providers"}},"notice":"Defines the basic interface for an Aave Pool Addresses Provider Registry.","version":1}}},"@aave/core-v3/contracts/interfaces/IPoolConfigurator.sol":{"IPoolConfigurator":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"ATokenUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldBorrowCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBorrowCap","type":"uint256"}],"name":"BorrowCapChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"borrowable","type":"bool"}],"name":"BorrowableInIsolationChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldBridgeProtocolFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBridgeProtocolFee","type":"uint256"}],"name":"BridgeProtocolFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"ltv","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidationThreshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidationBonus","type":"uint256"}],"name":"CollateralConfigurationChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldDebtCeiling","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDebtCeiling","type":"uint256"}],"name":"DebtCeilingChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint8","name":"oldCategoryId","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"newCategoryId","type":"uint8"}],"name":"EModeAssetCategoryChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"categoryId","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"ltv","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidationThreshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidationBonus","type":"uint256"},{"indexed":false,"internalType":"address","name":"oracle","type":"address"},{"indexed":false,"internalType":"string","name":"label","type":"string"}],"name":"EModeCategoryAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint128","name":"oldFlashloanPremiumToProtocol","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"newFlashloanPremiumToProtocol","type":"uint128"}],"name":"FlashloanPremiumToProtocolUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint128","name":"oldFlashloanPremiumTotal","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"newFlashloanPremiumTotal","type":"uint128"}],"name":"FlashloanPremiumTotalUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"LiquidationProtocolFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"active","type":"bool"}],"name":"ReserveActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ReserveBorrowing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"}],"name":"ReserveDropped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldReserveFactor","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newReserveFactor","type":"uint256"}],"name":"ReserveFactorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ReserveFlashLoaning","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"frozen","type":"bool"}],"name":"ReserveFrozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"aToken","type":"address"},{"indexed":false,"internalType":"address","name":"stableDebtToken","type":"address"},{"indexed":false,"internalType":"address","name":"variableDebtToken","type":"address"},{"indexed":false,"internalType":"address","name":"interestRateStrategyAddress","type":"address"}],"name":"ReserveInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"address","name":"oldStrategy","type":"address"},{"indexed":false,"internalType":"address","name":"newStrategy","type":"address"}],"name":"ReserveInterestRateStrategyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"ReservePaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ReserveStableRateBorrowing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"oldState","type":"bool"},{"indexed":false,"internalType":"bool","name":"newState","type":"bool"}],"name":"SiloedBorrowingChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"StableDebtTokenUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldSupplyCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSupplyCap","type":"uint256"}],"name":"SupplyCapChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldUnbackedMintCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newUnbackedMintCap","type":"uint256"}],"name":"UnbackedMintCapChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"VariableDebtTokenUpgraded","type":"event"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"ltv","type":"uint256"},{"internalType":"uint256","name":"liquidationThreshold","type":"uint256"},{"internalType":"uint256","name":"liquidationBonus","type":"uint256"}],"name":"configureReserveAsCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"dropReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"aTokenImpl","type":"address"},{"internalType":"address","name":"stableDebtTokenImpl","type":"address"},{"internalType":"address","name":"variableDebtTokenImpl","type":"address"},{"internalType":"uint8","name":"underlyingAssetDecimals","type":"uint8"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"address","name":"treasury","type":"address"},{"internalType":"address","name":"incentivesController","type":"address"},{"internalType":"string","name":"aTokenName","type":"string"},{"internalType":"string","name":"aTokenSymbol","type":"string"},{"internalType":"string","name":"variableDebtTokenName","type":"string"},{"internalType":"string","name":"variableDebtTokenSymbol","type":"string"},{"internalType":"string","name":"stableDebtTokenName","type":"string"},{"internalType":"string","name":"stableDebtTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct ConfiguratorInputTypes.InitReserveInput[]","name":"input","type":"tuple[]"}],"name":"initReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint8","name":"newCategoryId","type":"uint8"}],"name":"setAssetEModeCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newBorrowCap","type":"uint256"}],"name":"setBorrowCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"borrowable","type":"bool"}],"name":"setBorrowableInIsolation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newDebtCeiling","type":"uint256"}],"name":"setDebtCeiling","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"categoryId","type":"uint8"},{"internalType":"uint16","name":"ltv","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationBonus","type":"uint16"},{"internalType":"address","name":"oracle","type":"address"},{"internalType":"string","name":"label","type":"string"}],"name":"setEModeCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"setLiquidationProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused","type":"bool"}],"name":"setPoolPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"active","type":"bool"}],"name":"setReserveActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setReserveBorrowing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newReserveFactor","type":"uint256"}],"name":"setReserveFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setReserveFlashLoaning","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"freeze","type":"bool"}],"name":"setReserveFreeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"newRateStrategyAddress","type":"address"}],"name":"setReserveInterestRateStrategyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"paused","type":"bool"}],"name":"setReservePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setReserveStableRateBorrowing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"siloed","type":"bool"}],"name":"setSiloedBorrowing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newSupplyCap","type":"uint256"}],"name":"setSupplyCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newUnbackedMintCap","type":"uint256"}],"name":"setUnbackedMintCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"treasury","type":"address"},{"internalType":"address","name":"incentivesController","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct ConfiguratorInputTypes.UpdateATokenInput","name":"input","type":"tuple"}],"name":"updateAToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBridgeProtocolFee","type":"uint256"}],"name":"updateBridgeProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newFlashloanPremiumToProtocol","type":"uint128"}],"name":"updateFlashloanPremiumToProtocol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newFlashloanPremiumTotal","type":"uint128"}],"name":"updateFlashloanPremiumTotal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"incentivesController","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct ConfiguratorInputTypes.UpdateDebtTokenInput","name":"input","type":"tuple"}],"name":"updateStableDebtToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"incentivesController","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct ConfiguratorInputTypes.UpdateDebtTokenInput","name":"input","type":"tuple"}],"name":"updateVariableDebtToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","events":{"ATokenUpgraded(address,address,address)":{"details":"Emitted when an aToken implementation is upgraded.","params":{"asset":"The address of the underlying asset of the reserve","implementation":"The new aToken implementation","proxy":"The aToken proxy address"}},"BorrowCapChanged(address,uint256,uint256)":{"details":"Emitted when the borrow cap of a reserve is updated.","params":{"asset":"The address of the underlying asset of the reserve","newBorrowCap":"The new borrow cap","oldBorrowCap":"The old borrow cap"}},"BorrowableInIsolationChanged(address,bool)":{"details":"Emitted when the reserve is set as borrowable/non borrowable in isolation mode.","params":{"asset":"The address of the underlying asset of the reserve","borrowable":"True if the reserve is borrowable in isolation, false otherwise"}},"BridgeProtocolFeeUpdated(uint256,uint256)":{"details":"Emitted when the bridge protocol fee is updated.","params":{"newBridgeProtocolFee":"The new protocol fee, expressed in bps","oldBridgeProtocolFee":"The old protocol fee, expressed in bps"}},"CollateralConfigurationChanged(address,uint256,uint256,uint256)":{"details":"Emitted when the collateralization risk parameters for the specified asset are updated.","params":{"asset":"The address of the underlying asset of the reserve","liquidationBonus":"The bonus liquidators receive to liquidate this asset","liquidationThreshold":"The threshold at which loans using this asset as collateral will be considered undercollateralized","ltv":"The loan to value of the asset when used as collateral"}},"DebtCeilingChanged(address,uint256,uint256)":{"details":"Emitted when the debt ceiling of an asset is set.","params":{"asset":"The address of the underlying asset of the reserve","newDebtCeiling":"The new debt ceiling","oldDebtCeiling":"The old debt ceiling"}},"EModeAssetCategoryChanged(address,uint8,uint8)":{"details":"Emitted when the category of an asset in eMode is changed.","params":{"asset":"The address of the underlying asset of the reserve","newCategoryId":"The new eMode asset category","oldCategoryId":"The old eMode asset category"}},"EModeCategoryAdded(uint8,uint256,uint256,uint256,address,string)":{"details":"Emitted when a new eMode category is added.","params":{"categoryId":"The new eMode category id","label":"A human readable identifier for the category","liquidationBonus":"The liquidationBonus for the asset category in eMode","liquidationThreshold":"The liquidationThreshold for the asset category in eMode","ltv":"The ltv for the asset category in eMode","oracle":"The optional address of the price oracle specific for this category"}},"FlashloanPremiumToProtocolUpdated(uint128,uint128)":{"details":"Emitted when the part of the premium that goes to protocol is updated.","params":{"newFlashloanPremiumToProtocol":"The new premium, expressed in bps","oldFlashloanPremiumToProtocol":"The old premium, expressed in bps"}},"FlashloanPremiumTotalUpdated(uint128,uint128)":{"details":"Emitted when the total premium on flashloans is updated.","params":{"newFlashloanPremiumTotal":"The new premium, expressed in bps","oldFlashloanPremiumTotal":"The old premium, expressed in bps"}},"LiquidationProtocolFeeChanged(address,uint256,uint256)":{"details":"Emitted when the liquidation protocol fee of a reserve is updated.","params":{"asset":"The address of the underlying asset of the reserve","newFee":"The new liquidation protocol fee, expressed in bps","oldFee":"The old liquidation protocol fee, expressed in bps"}},"ReserveActive(address,bool)":{"details":"Emitted when a reserve is activated or deactivated","params":{"active":"True if reserve is active, false otherwise","asset":"The address of the underlying asset of the reserve"}},"ReserveBorrowing(address,bool)":{"details":"Emitted when borrowing is enabled or disabled on a reserve.","params":{"asset":"The address of the underlying asset of the reserve","enabled":"True if borrowing is enabled, false otherwise"}},"ReserveDropped(address)":{"details":"Emitted when a reserve is dropped.","params":{"asset":"The address of the underlying asset of the reserve"}},"ReserveFactorChanged(address,uint256,uint256)":{"details":"Emitted when a reserve factor is updated.","params":{"asset":"The address of the underlying asset of the reserve","newReserveFactor":"The new reserve factor, expressed in bps","oldReserveFactor":"The old reserve factor, expressed in bps"}},"ReserveFlashLoaning(address,bool)":{"details":"Emitted when flashloans are enabled or disabled on a reserve.","params":{"asset":"The address of the underlying asset of the reserve","enabled":"True if flashloans are enabled, false otherwise"}},"ReserveFrozen(address,bool)":{"details":"Emitted when a reserve is frozen or unfrozen","params":{"asset":"The address of the underlying asset of the reserve","frozen":"True if reserve is frozen, false otherwise"}},"ReserveInitialized(address,address,address,address,address)":{"details":"Emitted when a reserve is initialized.","params":{"aToken":"The address of the associated aToken contract","asset":"The address of the underlying asset of the reserve","interestRateStrategyAddress":"The address of the interest rate strategy for the reserve","stableDebtToken":"The address of the associated stable rate debt token","variableDebtToken":"The address of the associated variable rate debt token"}},"ReserveInterestRateStrategyChanged(address,address,address)":{"details":"Emitted when a reserve interest strategy contract is updated.","params":{"asset":"The address of the underlying asset of the reserve","newStrategy":"The address of the new interest strategy contract","oldStrategy":"The address of the old interest strategy contract"}},"ReservePaused(address,bool)":{"details":"Emitted when a reserve is paused or unpaused","params":{"asset":"The address of the underlying asset of the reserve","paused":"True if reserve is paused, false otherwise"}},"ReserveStableRateBorrowing(address,bool)":{"details":"Emitted when stable rate borrowing is enabled or disabled on a reserve","params":{"asset":"The address of the underlying asset of the reserve","enabled":"True if stable rate borrowing is enabled, false otherwise"}},"SiloedBorrowingChanged(address,bool,bool)":{"details":"Emitted when the the siloed borrowing state for an asset is changed.","params":{"asset":"The address of the underlying asset of the reserve","newState":"The new siloed borrowing state","oldState":"The old siloed borrowing state"}},"StableDebtTokenUpgraded(address,address,address)":{"details":"Emitted when the implementation of a stable debt token is upgraded.","params":{"asset":"The address of the underlying asset of the reserve","implementation":"The new aToken implementation","proxy":"The stable debt token proxy address"}},"SupplyCapChanged(address,uint256,uint256)":{"details":"Emitted when the supply cap of a reserve is updated.","params":{"asset":"The address of the underlying asset of the reserve","newSupplyCap":"The new supply cap","oldSupplyCap":"The old supply cap"}},"UnbackedMintCapChanged(address,uint256,uint256)":{"details":"Emitted when the unbacked mint cap of a reserve is updated.","params":{"asset":"The address of the underlying asset of the reserve","newUnbackedMintCap":"The new unbacked mint cap","oldUnbackedMintCap":"The old unbacked mint cap"}},"VariableDebtTokenUpgraded(address,address,address)":{"details":"Emitted when the implementation of a variable debt token is upgraded.","params":{"asset":"The address of the underlying asset of the reserve","implementation":"The new aToken implementation","proxy":"The variable debt token proxy address"}}},"kind":"dev","methods":{"configureReserveAsCollateral(address,uint256,uint256,uint256)":{"details":"All the values are expressed in bps. A value of 10000, results in 100.00%The `liquidationBonus` is always above 100%. A value of 105% means the liquidator will receive a 5% bonus","params":{"asset":"The address of the underlying asset of the reserve","liquidationBonus":"The bonus liquidators receive to liquidate this asset","liquidationThreshold":"The threshold at which loans using this asset as collateral will be considered undercollateralized","ltv":"The loan to value of the asset when used as collateral"}},"dropReserve(address)":{"params":{"asset":"The address of the reserve to drop"}},"initReserves((address,address,address,uint8,address,address,address,address,string,string,string,string,string,string,bytes)[])":{"params":{"input":"The array of initialization parameters"}},"setAssetEModeCategory(address,uint8)":{"params":{"asset":"The address of the underlying asset of the reserve","newCategoryId":"The new category id of the asset"}},"setBorrowCap(address,uint256)":{"params":{"asset":"The address of the underlying asset of the reserve","newBorrowCap":"The new borrow cap of the reserve"}},"setBorrowableInIsolation(address,bool)":{"details":"When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed amount will be accumulated in the isolated collateral's total debt exposureOnly assets of the same family (e.g. USD stablecoins) should be borrowable in isolation mode to keep consistency in the debt ceiling calculations","params":{"asset":"The address of the underlying asset of the reserve","borrowable":"True if the asset should be borrowable in isolation, false otherwise"}},"setDebtCeiling(address,uint256)":{"params":{"newDebtCeiling":"The new debt ceiling"}},"setEModeCategory(uint8,uint16,uint16,uint16,address,string)":{"details":"If zero is provided as oracle address, the default asset oracles will be used to compute the overall debt and overcollateralization of the users using this category.The new ltv and liquidation threshold must be greater than the base ltvs and liquidation thresholds of all assets within the eMode category","params":{"categoryId":"The id of the category to be configured","label":"A label identifying the category","liquidationBonus":"The liquidation bonus associated with the category","liquidationThreshold":"The liquidation threshold associated with the category","ltv":"The ltv associated with the category","oracle":"The oracle associated with the category"}},"setLiquidationProtocolFee(address,uint256)":{"params":{"asset":"The address of the underlying asset of the reserve","newFee":"The new liquidation protocol fee of the reserve, expressed in bps"}},"setPoolPause(bool)":{"params":{"paused":"True if protocol needs to be paused, false otherwise"}},"setReserveActive(address,bool)":{"params":{"active":"True if the reserve needs to be active, false otherwise","asset":"The address of the underlying asset of the reserve"}},"setReserveBorrowing(address,bool)":{"details":"Can only be disabled (set to false) if stable borrowing is disabled","params":{"asset":"The address of the underlying asset of the reserve","enabled":"True if borrowing needs to be enabled, false otherwise"}},"setReserveFactor(address,uint256)":{"params":{"asset":"The address of the underlying asset of the reserve","newReserveFactor":"The new reserve factor of the reserve"}},"setReserveFlashLoaning(address,bool)":{"params":{"asset":"The address of the underlying asset of the reserve","enabled":"True if flashloans need to be enabled, false otherwise"}},"setReserveFreeze(address,bool)":{"params":{"asset":"The address of the underlying asset of the reserve","freeze":"True if the reserve needs to be frozen, false otherwise"}},"setReserveInterestRateStrategyAddress(address,address)":{"params":{"asset":"The address of the underlying asset of the reserve","newRateStrategyAddress":"The address of the new interest strategy contract"}},"setReservePause(address,bool)":{"params":{"asset":"The address of the underlying asset of the reserve","paused":"True if pausing the reserve, false if unpausing"}},"setReserveStableRateBorrowing(address,bool)":{"details":"Can only be enabled (set to true) if borrowing is enabled","params":{"asset":"The address of the underlying asset of the reserve","enabled":"True if stable rate borrowing needs to be enabled, false otherwise"}},"setSiloedBorrowing(address,bool)":{"params":{"siloed":"The new siloed borrowing state"}},"setSupplyCap(address,uint256)":{"params":{"asset":"The address of the underlying asset of the reserve","newSupplyCap":"The new supply cap of the reserve"}},"setUnbackedMintCap(address,uint256)":{"params":{"asset":"The address of the underlying asset of the reserve","newUnbackedMintCap":"The new unbacked mint cap of the reserve"}},"updateAToken((address,address,address,string,string,address,bytes))":{"details":"Updates the aToken implementation for the reserve.","params":{"input":"The aToken update parameters"}},"updateBridgeProtocolFee(uint256)":{"params":{"newBridgeProtocolFee":"The part of the fee sent to the protocol treasury, expressed in bps"}},"updateFlashloanPremiumToProtocol(uint128)":{"details":"Expressed in bpsThe premium to protocol is calculated on the total flashloan premium","params":{"newFlashloanPremiumToProtocol":"The part of the flashloan premium sent to the protocol treasury"}},"updateFlashloanPremiumTotal(uint128)":{"details":"Expressed in bpsThe premium is calculated on the total amount borrowed","params":{"newFlashloanPremiumTotal":"The total flashloan premium"}},"updateStableDebtToken((address,address,string,string,address,bytes))":{"params":{"input":"The stableDebtToken update parameters"}},"updateVariableDebtToken((address,address,string,string,address,bytes))":{"params":{"input":"The variableDebtToken update parameters"}}},"title":"IPoolConfigurator","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"configureReserveAsCollateral(address,uint256,uint256,uint256)":"7c4e560b","dropReserve(address)":"63c9b860","initReserves((address,address,address,uint8,address,address,address,address,string,string,string,string,string,string,bytes)[])":"02fb45e6","setAssetEModeCategory(address,uint8)":"d4fe3f99","setBorrowCap(address,uint256)":"d14a0983","setBorrowableInIsolation(address,bool)":"38ae0cc3","setDebtCeiling(address,uint256)":"aeb4fcc1","setEModeCategory(uint8,uint16,uint16,uint16,address,string)":"c19d61e4","setLiquidationProtocolFee(address,uint256)":"26d2cec2","setPoolPause(bool)":"7641f3d9","setReserveActive(address,bool)":"b736aaeb","setReserveBorrowing(address,bool)":"682cf264","setReserveFactor(address,uint256)":"4b4e6753","setReserveFlashLoaning(address,bool)":"f213ef0e","setReserveFreeze(address,bool)":"96e957c4","setReserveInterestRateStrategyAddress(address,address)":"1d2118f9","setReservePause(address,bool)":"48d9fba9","setReserveStableRateBorrowing(address,bool)":"8a751a60","setSiloedBorrowing(address,bool)":"a7fa83b7","setSupplyCap(address,uint256)":"571f03e5","setUnbackedMintCap(address,uint256)":"145f5892","updateAToken((address,address,address,string,string,address,bytes))":"bb01c37c","updateBridgeProtocolFee(uint256)":"3036b439","updateFlashloanPremiumToProtocol(uint128)":"1df970bd","updateFlashloanPremiumTotal(uint128)":"8a493676","updateStableDebtToken((address,address,string,string,address,bytes))":"7626cde3","updateVariableDebtToken((address,address,string,string,address,bytes))":"ad4e6432"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ATokenUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldBorrowCap\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBorrowCap\",\"type\":\"uint256\"}],\"name\":\"BorrowCapChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"borrowable\",\"type\":\"bool\"}],\"name\":\"BorrowableInIsolationChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldBridgeProtocolFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBridgeProtocolFee\",\"type\":\"uint256\"}],\"name\":\"BridgeProtocolFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidationThreshold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidationBonus\",\"type\":\"uint256\"}],\"name\":\"CollateralConfigurationChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldDebtCeiling\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newDebtCeiling\",\"type\":\"uint256\"}],\"name\":\"DebtCeilingChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"oldCategoryId\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"newCategoryId\",\"type\":\"uint8\"}],\"name\":\"EModeAssetCategoryChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidationThreshold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidationBonus\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"name\":\"EModeCategoryAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"oldFlashloanPremiumToProtocol\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"newFlashloanPremiumToProtocol\",\"type\":\"uint128\"}],\"name\":\"FlashloanPremiumToProtocolUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"oldFlashloanPremiumTotal\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"newFlashloanPremiumTotal\",\"type\":\"uint128\"}],\"name\":\"FlashloanPremiumTotalUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newFee\",\"type\":\"uint256\"}],\"name\":\"LiquidationProtocolFeeChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"}],\"name\":\"ReserveActive\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"ReserveBorrowing\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"ReserveDropped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldReserveFactor\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newReserveFactor\",\"type\":\"uint256\"}],\"name\":\"ReserveFactorChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"ReserveFlashLoaning\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"frozen\",\"type\":\"bool\"}],\"name\":\"ReserveFrozen\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"aToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"stableDebtToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"variableDebtToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"}],\"name\":\"ReserveInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldStrategy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newStrategy\",\"type\":\"address\"}],\"name\":\"ReserveInterestRateStrategyChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"ReservePaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"ReserveStableRateBorrowing\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"oldState\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"newState\",\"type\":\"bool\"}],\"name\":\"SiloedBorrowingChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"StableDebtTokenUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldSupplyCap\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newSupplyCap\",\"type\":\"uint256\"}],\"name\":\"SupplyCapChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldUnbackedMintCap\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newUnbackedMintCap\",\"type\":\"uint256\"}],\"name\":\"UnbackedMintCapChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"VariableDebtTokenUpgraded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationBonus\",\"type\":\"uint256\"}],\"name\":\"configureReserveAsCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"dropReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"aTokenImpl\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtTokenImpl\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtTokenImpl\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"underlyingAssetDecimals\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"variableDebtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"variableDebtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"stableDebtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"stableDebtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"internalType\":\"struct ConfiguratorInputTypes.InitReserveInput[]\",\"name\":\"input\",\"type\":\"tuple[]\"}],\"name\":\"initReserves\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"newCategoryId\",\"type\":\"uint8\"}],\"name\":\"setAssetEModeCategory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newBorrowCap\",\"type\":\"uint256\"}],\"name\":\"setBorrowCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"borrowable\",\"type\":\"bool\"}],\"name\":\"setBorrowableInIsolation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newDebtCeiling\",\"type\":\"uint256\"}],\"name\":\"setDebtCeiling\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"},{\"internalType\":\"uint16\",\"name\":\"ltv\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationBonus\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"name\":\"setEModeCategory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newFee\",\"type\":\"uint256\"}],\"name\":\"setLiquidationProtocolFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"setPoolPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"}],\"name\":\"setReserveActive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setReserveBorrowing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newReserveFactor\",\"type\":\"uint256\"}],\"name\":\"setReserveFactor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setReserveFlashLoaning\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"freeze\",\"type\":\"bool\"}],\"name\":\"setReserveFreeze\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newRateStrategyAddress\",\"type\":\"address\"}],\"name\":\"setReserveInterestRateStrategyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"setReservePause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setReserveStableRateBorrowing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"siloed\",\"type\":\"bool\"}],\"name\":\"setSiloedBorrowing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newSupplyCap\",\"type\":\"uint256\"}],\"name\":\"setSupplyCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newUnbackedMintCap\",\"type\":\"uint256\"}],\"name\":\"setUnbackedMintCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"internalType\":\"struct ConfiguratorInputTypes.UpdateATokenInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"updateAToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newBridgeProtocolFee\",\"type\":\"uint256\"}],\"name\":\"updateBridgeProtocolFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"newFlashloanPremiumToProtocol\",\"type\":\"uint128\"}],\"name\":\"updateFlashloanPremiumToProtocol\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"newFlashloanPremiumTotal\",\"type\":\"uint128\"}],\"name\":\"updateFlashloanPremiumTotal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"internalType\":\"struct ConfiguratorInputTypes.UpdateDebtTokenInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"updateStableDebtToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"internalType\":\"struct ConfiguratorInputTypes.UpdateDebtTokenInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"updateVariableDebtToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"ATokenUpgraded(address,address,address)\":{\"details\":\"Emitted when an aToken implementation is upgraded.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"implementation\":\"The new aToken implementation\",\"proxy\":\"The aToken proxy address\"}},\"BorrowCapChanged(address,uint256,uint256)\":{\"details\":\"Emitted when the borrow cap of a reserve is updated.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newBorrowCap\":\"The new borrow cap\",\"oldBorrowCap\":\"The old borrow cap\"}},\"BorrowableInIsolationChanged(address,bool)\":{\"details\":\"Emitted when the reserve is set as borrowable/non borrowable in isolation mode.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"borrowable\":\"True if the reserve is borrowable in isolation, false otherwise\"}},\"BridgeProtocolFeeUpdated(uint256,uint256)\":{\"details\":\"Emitted when the bridge protocol fee is updated.\",\"params\":{\"newBridgeProtocolFee\":\"The new protocol fee, expressed in bps\",\"oldBridgeProtocolFee\":\"The old protocol fee, expressed in bps\"}},\"CollateralConfigurationChanged(address,uint256,uint256,uint256)\":{\"details\":\"Emitted when the collateralization risk parameters for the specified asset are updated.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"liquidationBonus\":\"The bonus liquidators receive to liquidate this asset\",\"liquidationThreshold\":\"The threshold at which loans using this asset as collateral will be considered undercollateralized\",\"ltv\":\"The loan to value of the asset when used as collateral\"}},\"DebtCeilingChanged(address,uint256,uint256)\":{\"details\":\"Emitted when the debt ceiling of an asset is set.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newDebtCeiling\":\"The new debt ceiling\",\"oldDebtCeiling\":\"The old debt ceiling\"}},\"EModeAssetCategoryChanged(address,uint8,uint8)\":{\"details\":\"Emitted when the category of an asset in eMode is changed.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newCategoryId\":\"The new eMode asset category\",\"oldCategoryId\":\"The old eMode asset category\"}},\"EModeCategoryAdded(uint8,uint256,uint256,uint256,address,string)\":{\"details\":\"Emitted when a new eMode category is added.\",\"params\":{\"categoryId\":\"The new eMode category id\",\"label\":\"A human readable identifier for the category\",\"liquidationBonus\":\"The liquidationBonus for the asset category in eMode\",\"liquidationThreshold\":\"The liquidationThreshold for the asset category in eMode\",\"ltv\":\"The ltv for the asset category in eMode\",\"oracle\":\"The optional address of the price oracle specific for this category\"}},\"FlashloanPremiumToProtocolUpdated(uint128,uint128)\":{\"details\":\"Emitted when the part of the premium that goes to protocol is updated.\",\"params\":{\"newFlashloanPremiumToProtocol\":\"The new premium, expressed in bps\",\"oldFlashloanPremiumToProtocol\":\"The old premium, expressed in bps\"}},\"FlashloanPremiumTotalUpdated(uint128,uint128)\":{\"details\":\"Emitted when the total premium on flashloans is updated.\",\"params\":{\"newFlashloanPremiumTotal\":\"The new premium, expressed in bps\",\"oldFlashloanPremiumTotal\":\"The old premium, expressed in bps\"}},\"LiquidationProtocolFeeChanged(address,uint256,uint256)\":{\"details\":\"Emitted when the liquidation protocol fee of a reserve is updated.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newFee\":\"The new liquidation protocol fee, expressed in bps\",\"oldFee\":\"The old liquidation protocol fee, expressed in bps\"}},\"ReserveActive(address,bool)\":{\"details\":\"Emitted when a reserve is activated or deactivated\",\"params\":{\"active\":\"True if reserve is active, false otherwise\",\"asset\":\"The address of the underlying asset of the reserve\"}},\"ReserveBorrowing(address,bool)\":{\"details\":\"Emitted when borrowing is enabled or disabled on a reserve.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"enabled\":\"True if borrowing is enabled, false otherwise\"}},\"ReserveDropped(address)\":{\"details\":\"Emitted when a reserve is dropped.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"}},\"ReserveFactorChanged(address,uint256,uint256)\":{\"details\":\"Emitted when a reserve factor is updated.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newReserveFactor\":\"The new reserve factor, expressed in bps\",\"oldReserveFactor\":\"The old reserve factor, expressed in bps\"}},\"ReserveFlashLoaning(address,bool)\":{\"details\":\"Emitted when flashloans are enabled or disabled on a reserve.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"enabled\":\"True if flashloans are enabled, false otherwise\"}},\"ReserveFrozen(address,bool)\":{\"details\":\"Emitted when a reserve is frozen or unfrozen\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"frozen\":\"True if reserve is frozen, false otherwise\"}},\"ReserveInitialized(address,address,address,address,address)\":{\"details\":\"Emitted when a reserve is initialized.\",\"params\":{\"aToken\":\"The address of the associated aToken contract\",\"asset\":\"The address of the underlying asset of the reserve\",\"interestRateStrategyAddress\":\"The address of the interest rate strategy for the reserve\",\"stableDebtToken\":\"The address of the associated stable rate debt token\",\"variableDebtToken\":\"The address of the associated variable rate debt token\"}},\"ReserveInterestRateStrategyChanged(address,address,address)\":{\"details\":\"Emitted when a reserve interest strategy contract is updated.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newStrategy\":\"The address of the new interest strategy contract\",\"oldStrategy\":\"The address of the old interest strategy contract\"}},\"ReservePaused(address,bool)\":{\"details\":\"Emitted when a reserve is paused or unpaused\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"paused\":\"True if reserve is paused, false otherwise\"}},\"ReserveStableRateBorrowing(address,bool)\":{\"details\":\"Emitted when stable rate borrowing is enabled or disabled on a reserve\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"enabled\":\"True if stable rate borrowing is enabled, false otherwise\"}},\"SiloedBorrowingChanged(address,bool,bool)\":{\"details\":\"Emitted when the the siloed borrowing state for an asset is changed.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newState\":\"The new siloed borrowing state\",\"oldState\":\"The old siloed borrowing state\"}},\"StableDebtTokenUpgraded(address,address,address)\":{\"details\":\"Emitted when the implementation of a stable debt token is upgraded.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"implementation\":\"The new aToken implementation\",\"proxy\":\"The stable debt token proxy address\"}},\"SupplyCapChanged(address,uint256,uint256)\":{\"details\":\"Emitted when the supply cap of a reserve is updated.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newSupplyCap\":\"The new supply cap\",\"oldSupplyCap\":\"The old supply cap\"}},\"UnbackedMintCapChanged(address,uint256,uint256)\":{\"details\":\"Emitted when the unbacked mint cap of a reserve is updated.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newUnbackedMintCap\":\"The new unbacked mint cap\",\"oldUnbackedMintCap\":\"The old unbacked mint cap\"}},\"VariableDebtTokenUpgraded(address,address,address)\":{\"details\":\"Emitted when the implementation of a variable debt token is upgraded.\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"implementation\":\"The new aToken implementation\",\"proxy\":\"The variable debt token proxy address\"}}},\"kind\":\"dev\",\"methods\":{\"configureReserveAsCollateral(address,uint256,uint256,uint256)\":{\"details\":\"All the values are expressed in bps. A value of 10000, results in 100.00%The `liquidationBonus` is always above 100%. A value of 105% means the liquidator will receive a 5% bonus\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"liquidationBonus\":\"The bonus liquidators receive to liquidate this asset\",\"liquidationThreshold\":\"The threshold at which loans using this asset as collateral will be considered undercollateralized\",\"ltv\":\"The loan to value of the asset when used as collateral\"}},\"dropReserve(address)\":{\"params\":{\"asset\":\"The address of the reserve to drop\"}},\"initReserves((address,address,address,uint8,address,address,address,address,string,string,string,string,string,string,bytes)[])\":{\"params\":{\"input\":\"The array of initialization parameters\"}},\"setAssetEModeCategory(address,uint8)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newCategoryId\":\"The new category id of the asset\"}},\"setBorrowCap(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newBorrowCap\":\"The new borrow cap of the reserve\"}},\"setBorrowableInIsolation(address,bool)\":{\"details\":\"When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed amount will be accumulated in the isolated collateral's total debt exposureOnly assets of the same family (e.g. USD stablecoins) should be borrowable in isolation mode to keep consistency in the debt ceiling calculations\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"borrowable\":\"True if the asset should be borrowable in isolation, false otherwise\"}},\"setDebtCeiling(address,uint256)\":{\"params\":{\"newDebtCeiling\":\"The new debt ceiling\"}},\"setEModeCategory(uint8,uint16,uint16,uint16,address,string)\":{\"details\":\"If zero is provided as oracle address, the default asset oracles will be used to compute the overall debt and overcollateralization of the users using this category.The new ltv and liquidation threshold must be greater than the base ltvs and liquidation thresholds of all assets within the eMode category\",\"params\":{\"categoryId\":\"The id of the category to be configured\",\"label\":\"A label identifying the category\",\"liquidationBonus\":\"The liquidation bonus associated with the category\",\"liquidationThreshold\":\"The liquidation threshold associated with the category\",\"ltv\":\"The ltv associated with the category\",\"oracle\":\"The oracle associated with the category\"}},\"setLiquidationProtocolFee(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newFee\":\"The new liquidation protocol fee of the reserve, expressed in bps\"}},\"setPoolPause(bool)\":{\"params\":{\"paused\":\"True if protocol needs to be paused, false otherwise\"}},\"setReserveActive(address,bool)\":{\"params\":{\"active\":\"True if the reserve needs to be active, false otherwise\",\"asset\":\"The address of the underlying asset of the reserve\"}},\"setReserveBorrowing(address,bool)\":{\"details\":\"Can only be disabled (set to false) if stable borrowing is disabled\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"enabled\":\"True if borrowing needs to be enabled, false otherwise\"}},\"setReserveFactor(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newReserveFactor\":\"The new reserve factor of the reserve\"}},\"setReserveFlashLoaning(address,bool)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"enabled\":\"True if flashloans need to be enabled, false otherwise\"}},\"setReserveFreeze(address,bool)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"freeze\":\"True if the reserve needs to be frozen, false otherwise\"}},\"setReserveInterestRateStrategyAddress(address,address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newRateStrategyAddress\":\"The address of the new interest strategy contract\"}},\"setReservePause(address,bool)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"paused\":\"True if pausing the reserve, false if unpausing\"}},\"setReserveStableRateBorrowing(address,bool)\":{\"details\":\"Can only be enabled (set to true) if borrowing is enabled\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"enabled\":\"True if stable rate borrowing needs to be enabled, false otherwise\"}},\"setSiloedBorrowing(address,bool)\":{\"params\":{\"siloed\":\"The new siloed borrowing state\"}},\"setSupplyCap(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newSupplyCap\":\"The new supply cap of the reserve\"}},\"setUnbackedMintCap(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newUnbackedMintCap\":\"The new unbacked mint cap of the reserve\"}},\"updateAToken((address,address,address,string,string,address,bytes))\":{\"details\":\"Updates the aToken implementation for the reserve.\",\"params\":{\"input\":\"The aToken update parameters\"}},\"updateBridgeProtocolFee(uint256)\":{\"params\":{\"newBridgeProtocolFee\":\"The part of the fee sent to the protocol treasury, expressed in bps\"}},\"updateFlashloanPremiumToProtocol(uint128)\":{\"details\":\"Expressed in bpsThe premium to protocol is calculated on the total flashloan premium\",\"params\":{\"newFlashloanPremiumToProtocol\":\"The part of the flashloan premium sent to the protocol treasury\"}},\"updateFlashloanPremiumTotal(uint128)\":{\"details\":\"Expressed in bpsThe premium is calculated on the total amount borrowed\",\"params\":{\"newFlashloanPremiumTotal\":\"The total flashloan premium\"}},\"updateStableDebtToken((address,address,string,string,address,bytes))\":{\"params\":{\"input\":\"The stableDebtToken update parameters\"}},\"updateVariableDebtToken((address,address,string,string,address,bytes))\":{\"params\":{\"input\":\"The variableDebtToken update parameters\"}}},\"title\":\"IPoolConfigurator\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"configureReserveAsCollateral(address,uint256,uint256,uint256)\":{\"notice\":\"Configures the reserve collateralization parameters.\"},\"dropReserve(address)\":{\"notice\":\"Drops a reserve entirely.\"},\"initReserves((address,address,address,uint8,address,address,address,address,string,string,string,string,string,string,bytes)[])\":{\"notice\":\"Initializes multiple reserves.\"},\"setAssetEModeCategory(address,uint8)\":{\"notice\":\"Assign an efficiency mode (eMode) category to asset.\"},\"setBorrowCap(address,uint256)\":{\"notice\":\"Updates the borrow cap of a reserve.\"},\"setBorrowableInIsolation(address,bool)\":{\"notice\":\"Sets the borrowable in isolation flag for the reserve.\"},\"setDebtCeiling(address,uint256)\":{\"notice\":\"Sets the debt ceiling for an asset.\"},\"setEModeCategory(uint8,uint16,uint16,uint16,address,string)\":{\"notice\":\"Adds a new efficiency mode (eMode) category.\"},\"setLiquidationProtocolFee(address,uint256)\":{\"notice\":\"Updates the liquidation protocol fee of reserve.\"},\"setPoolPause(bool)\":{\"notice\":\"Pauses or unpauses all the protocol reserves. In the paused state all the protocol interactions are suspended.\"},\"setReserveActive(address,bool)\":{\"notice\":\"Activate or deactivate a reserve\"},\"setReserveBorrowing(address,bool)\":{\"notice\":\"Configures borrowing on a reserve.\"},\"setReserveFactor(address,uint256)\":{\"notice\":\"Updates the reserve factor of a reserve.\"},\"setReserveFlashLoaning(address,bool)\":{\"notice\":\"Enable or disable flashloans on a reserve\"},\"setReserveFreeze(address,bool)\":{\"notice\":\"Freeze or unfreeze a reserve. A frozen reserve doesn't allow any new supply, borrow or rate swap but allows repayments, liquidations, rate rebalances and withdrawals.\"},\"setReserveInterestRateStrategyAddress(address,address)\":{\"notice\":\"Sets the interest rate strategy of a reserve.\"},\"setReservePause(address,bool)\":{\"notice\":\"Pauses a reserve. A paused reserve does not allow any interaction (supply, borrow, repay, swap interest rate, liquidate, atoken transfers).\"},\"setReserveStableRateBorrowing(address,bool)\":{\"notice\":\"Enable or disable stable rate borrowing on a reserve.\"},\"setSiloedBorrowing(address,bool)\":{\"notice\":\"Sets siloed borrowing for an asset\"},\"setSupplyCap(address,uint256)\":{\"notice\":\"Updates the supply cap of a reserve.\"},\"setUnbackedMintCap(address,uint256)\":{\"notice\":\"Updates the unbacked mint cap of reserve.\"},\"updateBridgeProtocolFee(uint256)\":{\"notice\":\"Updates the bridge fee collected by the protocol reserves.\"},\"updateFlashloanPremiumToProtocol(uint128)\":{\"notice\":\"Updates the flash loan premium collected by protocol reserves\"},\"updateFlashloanPremiumTotal(uint128)\":{\"notice\":\"Updates the total flash loan premium. Total flash loan premium consists of two parts: - A part is sent to aToken holders as extra balance - A part is collected by the protocol reserves\"},\"updateStableDebtToken((address,address,string,string,address,bytes))\":{\"notice\":\"Updates the stable debt token implementation for the reserve.\"},\"updateVariableDebtToken((address,address,string,string,address,bytes))\":{\"notice\":\"Updates the variable debt token implementation for the asset.\"}},\"notice\":\"Defines the basic interface for a Pool configurator.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/interfaces/IPoolConfigurator.sol\":\"IPoolConfigurator\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/interfaces/IPoolConfigurator.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {ConfiguratorInputTypes} from '../protocol/libraries/types/ConfiguratorInputTypes.sol';\\n\\n/**\\n * @title IPoolConfigurator\\n * @author Aave\\n * @notice Defines the basic interface for a Pool configurator.\\n */\\ninterface IPoolConfigurator {\\n  /**\\n   * @dev Emitted when a reserve is initialized.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aToken The address of the associated aToken contract\\n   * @param stableDebtToken The address of the associated stable rate debt token\\n   * @param variableDebtToken The address of the associated variable rate debt token\\n   * @param interestRateStrategyAddress The address of the interest rate strategy for the reserve\\n   */\\n  event ReserveInitialized(\\n    address indexed asset,\\n    address indexed aToken,\\n    address stableDebtToken,\\n    address variableDebtToken,\\n    address interestRateStrategyAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when borrowing is enabled or disabled on a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if borrowing is enabled, false otherwise\\n   */\\n  event ReserveBorrowing(address indexed asset, bool enabled);\\n\\n  /**\\n   * @dev Emitted when flashloans are enabled or disabled on a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if flashloans are enabled, false otherwise\\n   */\\n  event ReserveFlashLoaning(address indexed asset, bool enabled);\\n\\n  /**\\n   * @dev Emitted when the collateralization risk parameters for the specified asset are updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param ltv The loan to value of the asset when used as collateral\\n   * @param liquidationThreshold The threshold at which loans using this asset as collateral will be considered undercollateralized\\n   * @param liquidationBonus The bonus liquidators receive to liquidate this asset\\n   */\\n  event CollateralConfigurationChanged(\\n    address indexed asset,\\n    uint256 ltv,\\n    uint256 liquidationThreshold,\\n    uint256 liquidationBonus\\n  );\\n\\n  /**\\n   * @dev Emitted when stable rate borrowing is enabled or disabled on a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if stable rate borrowing is enabled, false otherwise\\n   */\\n  event ReserveStableRateBorrowing(address indexed asset, bool enabled);\\n\\n  /**\\n   * @dev Emitted when a reserve is activated or deactivated\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param active True if reserve is active, false otherwise\\n   */\\n  event ReserveActive(address indexed asset, bool active);\\n\\n  /**\\n   * @dev Emitted when a reserve is frozen or unfrozen\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param frozen True if reserve is frozen, false otherwise\\n   */\\n  event ReserveFrozen(address indexed asset, bool frozen);\\n\\n  /**\\n   * @dev Emitted when a reserve is paused or unpaused\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param paused True if reserve is paused, false otherwise\\n   */\\n  event ReservePaused(address indexed asset, bool paused);\\n\\n  /**\\n   * @dev Emitted when a reserve is dropped.\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  event ReserveDropped(address indexed asset);\\n\\n  /**\\n   * @dev Emitted when a reserve factor is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldReserveFactor The old reserve factor, expressed in bps\\n   * @param newReserveFactor The new reserve factor, expressed in bps\\n   */\\n  event ReserveFactorChanged(\\n    address indexed asset,\\n    uint256 oldReserveFactor,\\n    uint256 newReserveFactor\\n  );\\n\\n  /**\\n   * @dev Emitted when the borrow cap of a reserve is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldBorrowCap The old borrow cap\\n   * @param newBorrowCap The new borrow cap\\n   */\\n  event BorrowCapChanged(address indexed asset, uint256 oldBorrowCap, uint256 newBorrowCap);\\n\\n  /**\\n   * @dev Emitted when the supply cap of a reserve is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldSupplyCap The old supply cap\\n   * @param newSupplyCap The new supply cap\\n   */\\n  event SupplyCapChanged(address indexed asset, uint256 oldSupplyCap, uint256 newSupplyCap);\\n\\n  /**\\n   * @dev Emitted when the liquidation protocol fee of a reserve is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldFee The old liquidation protocol fee, expressed in bps\\n   * @param newFee The new liquidation protocol fee, expressed in bps\\n   */\\n  event LiquidationProtocolFeeChanged(address indexed asset, uint256 oldFee, uint256 newFee);\\n\\n  /**\\n   * @dev Emitted when the unbacked mint cap of a reserve is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldUnbackedMintCap The old unbacked mint cap\\n   * @param newUnbackedMintCap The new unbacked mint cap\\n   */\\n  event UnbackedMintCapChanged(\\n    address indexed asset,\\n    uint256 oldUnbackedMintCap,\\n    uint256 newUnbackedMintCap\\n  );\\n\\n  /**\\n   * @dev Emitted when the category of an asset in eMode is changed.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldCategoryId The old eMode asset category\\n   * @param newCategoryId The new eMode asset category\\n   */\\n  event EModeAssetCategoryChanged(address indexed asset, uint8 oldCategoryId, uint8 newCategoryId);\\n\\n  /**\\n   * @dev Emitted when a new eMode category is added.\\n   * @param categoryId The new eMode category id\\n   * @param ltv The ltv for the asset category in eMode\\n   * @param liquidationThreshold The liquidationThreshold for the asset category in eMode\\n   * @param liquidationBonus The liquidationBonus for the asset category in eMode\\n   * @param oracle The optional address of the price oracle specific for this category\\n   * @param label A human readable identifier for the category\\n   */\\n  event EModeCategoryAdded(\\n    uint8 indexed categoryId,\\n    uint256 ltv,\\n    uint256 liquidationThreshold,\\n    uint256 liquidationBonus,\\n    address oracle,\\n    string label\\n  );\\n\\n  /**\\n   * @dev Emitted when a reserve interest strategy contract is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldStrategy The address of the old interest strategy contract\\n   * @param newStrategy The address of the new interest strategy contract\\n   */\\n  event ReserveInterestRateStrategyChanged(\\n    address indexed asset,\\n    address oldStrategy,\\n    address newStrategy\\n  );\\n\\n  /**\\n   * @dev Emitted when an aToken implementation is upgraded.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param proxy The aToken proxy address\\n   * @param implementation The new aToken implementation\\n   */\\n  event ATokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n\\n  /**\\n   * @dev Emitted when the implementation of a stable debt token is upgraded.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param proxy The stable debt token proxy address\\n   * @param implementation The new aToken implementation\\n   */\\n  event StableDebtTokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n\\n  /**\\n   * @dev Emitted when the implementation of a variable debt token is upgraded.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param proxy The variable debt token proxy address\\n   * @param implementation The new aToken implementation\\n   */\\n  event VariableDebtTokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n\\n  /**\\n   * @dev Emitted when the debt ceiling of an asset is set.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldDebtCeiling The old debt ceiling\\n   * @param newDebtCeiling The new debt ceiling\\n   */\\n  event DebtCeilingChanged(address indexed asset, uint256 oldDebtCeiling, uint256 newDebtCeiling);\\n\\n  /**\\n   * @dev Emitted when the the siloed borrowing state for an asset is changed.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldState The old siloed borrowing state\\n   * @param newState The new siloed borrowing state\\n   */\\n  event SiloedBorrowingChanged(address indexed asset, bool oldState, bool newState);\\n\\n  /**\\n   * @dev Emitted when the bridge protocol fee is updated.\\n   * @param oldBridgeProtocolFee The old protocol fee, expressed in bps\\n   * @param newBridgeProtocolFee The new protocol fee, expressed in bps\\n   */\\n  event BridgeProtocolFeeUpdated(uint256 oldBridgeProtocolFee, uint256 newBridgeProtocolFee);\\n\\n  /**\\n   * @dev Emitted when the total premium on flashloans is updated.\\n   * @param oldFlashloanPremiumTotal The old premium, expressed in bps\\n   * @param newFlashloanPremiumTotal The new premium, expressed in bps\\n   */\\n  event FlashloanPremiumTotalUpdated(\\n    uint128 oldFlashloanPremiumTotal,\\n    uint128 newFlashloanPremiumTotal\\n  );\\n\\n  /**\\n   * @dev Emitted when the part of the premium that goes to protocol is updated.\\n   * @param oldFlashloanPremiumToProtocol The old premium, expressed in bps\\n   * @param newFlashloanPremiumToProtocol The new premium, expressed in bps\\n   */\\n  event FlashloanPremiumToProtocolUpdated(\\n    uint128 oldFlashloanPremiumToProtocol,\\n    uint128 newFlashloanPremiumToProtocol\\n  );\\n\\n  /**\\n   * @dev Emitted when the reserve is set as borrowable/non borrowable in isolation mode.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param borrowable True if the reserve is borrowable in isolation, false otherwise\\n   */\\n  event BorrowableInIsolationChanged(address asset, bool borrowable);\\n\\n  /**\\n   * @notice Initializes multiple reserves.\\n   * @param input The array of initialization parameters\\n   */\\n  function initReserves(ConfiguratorInputTypes.InitReserveInput[] calldata input) external;\\n\\n  /**\\n   * @dev Updates the aToken implementation for the reserve.\\n   * @param input The aToken update parameters\\n   */\\n  function updateAToken(ConfiguratorInputTypes.UpdateATokenInput calldata input) external;\\n\\n  /**\\n   * @notice Updates the stable debt token implementation for the reserve.\\n   * @param input The stableDebtToken update parameters\\n   */\\n  function updateStableDebtToken(\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) external;\\n\\n  /**\\n   * @notice Updates the variable debt token implementation for the asset.\\n   * @param input The variableDebtToken update parameters\\n   */\\n  function updateVariableDebtToken(\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) external;\\n\\n  /**\\n   * @notice Configures borrowing on a reserve.\\n   * @dev Can only be disabled (set to false) if stable borrowing is disabled\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if borrowing needs to be enabled, false otherwise\\n   */\\n  function setReserveBorrowing(address asset, bool enabled) external;\\n\\n  /**\\n   * @notice Configures the reserve collateralization parameters.\\n   * @dev All the values are expressed in bps. A value of 10000, results in 100.00%\\n   * @dev The `liquidationBonus` is always above 100%. A value of 105% means the liquidator will receive a 5% bonus\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param ltv The loan to value of the asset when used as collateral\\n   * @param liquidationThreshold The threshold at which loans using this asset as collateral will be considered undercollateralized\\n   * @param liquidationBonus The bonus liquidators receive to liquidate this asset\\n   */\\n  function configureReserveAsCollateral(\\n    address asset,\\n    uint256 ltv,\\n    uint256 liquidationThreshold,\\n    uint256 liquidationBonus\\n  ) external;\\n\\n  /**\\n   * @notice Enable or disable stable rate borrowing on a reserve.\\n   * @dev Can only be enabled (set to true) if borrowing is enabled\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setReserveStableRateBorrowing(address asset, bool enabled) external;\\n\\n  /**\\n   * @notice Enable or disable flashloans on a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if flashloans need to be enabled, false otherwise\\n   */\\n  function setReserveFlashLoaning(address asset, bool enabled) external;\\n\\n  /**\\n   * @notice Activate or deactivate a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param active True if the reserve needs to be active, false otherwise\\n   */\\n  function setReserveActive(address asset, bool active) external;\\n\\n  /**\\n   * @notice Freeze or unfreeze a reserve. A frozen reserve doesn't allow any new supply, borrow\\n   * or rate swap but allows repayments, liquidations, rate rebalances and withdrawals.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param freeze True if the reserve needs to be frozen, false otherwise\\n   */\\n  function setReserveFreeze(address asset, bool freeze) external;\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the\\n   * borrowed amount will be accumulated in the isolated collateral's total debt exposure\\n   * @dev Only assets of the same family (e.g. USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param borrowable True if the asset should be borrowable in isolation, false otherwise\\n   */\\n  function setBorrowableInIsolation(address asset, bool borrowable) external;\\n\\n  /**\\n   * @notice Pauses a reserve. A paused reserve does not allow any interaction (supply, borrow, repay,\\n   * swap interest rate, liquidate, atoken transfers).\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param paused True if pausing the reserve, false if unpausing\\n   */\\n  function setReservePause(address asset, bool paused) external;\\n\\n  /**\\n   * @notice Updates the reserve factor of a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newReserveFactor The new reserve factor of the reserve\\n   */\\n  function setReserveFactor(address asset, uint256 newReserveFactor) external;\\n\\n  /**\\n   * @notice Sets the interest rate strategy of a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newRateStrategyAddress The address of the new interest strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address newRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Pauses or unpauses all the protocol reserves. In the paused state all the protocol interactions\\n   * are suspended.\\n   * @param paused True if protocol needs to be paused, false otherwise\\n   */\\n  function setPoolPause(bool paused) external;\\n\\n  /**\\n   * @notice Updates the borrow cap of a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newBorrowCap The new borrow cap of the reserve\\n   */\\n  function setBorrowCap(address asset, uint256 newBorrowCap) external;\\n\\n  /**\\n   * @notice Updates the supply cap of a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newSupplyCap The new supply cap of the reserve\\n   */\\n  function setSupplyCap(address asset, uint256 newSupplyCap) external;\\n\\n  /**\\n   * @notice Updates the liquidation protocol fee of reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newFee The new liquidation protocol fee of the reserve, expressed in bps\\n   */\\n  function setLiquidationProtocolFee(address asset, uint256 newFee) external;\\n\\n  /**\\n   * @notice Updates the unbacked mint cap of reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newUnbackedMintCap The new unbacked mint cap of the reserve\\n   */\\n  function setUnbackedMintCap(address asset, uint256 newUnbackedMintCap) external;\\n\\n  /**\\n   * @notice Assign an efficiency mode (eMode) category to asset.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newCategoryId The new category id of the asset\\n   */\\n  function setAssetEModeCategory(address asset, uint8 newCategoryId) external;\\n\\n  /**\\n   * @notice Adds a new efficiency mode (eMode) category.\\n   * @dev If zero is provided as oracle address, the default asset oracles will be used to compute the overall debt and\\n   * overcollateralization of the users using this category.\\n   * @dev The new ltv and liquidation threshold must be greater than the base\\n   * ltvs and liquidation thresholds of all assets within the eMode category\\n   * @param categoryId The id of the category to be configured\\n   * @param ltv The ltv associated with the category\\n   * @param liquidationThreshold The liquidation threshold associated with the category\\n   * @param liquidationBonus The liquidation bonus associated with the category\\n   * @param oracle The oracle associated with the category\\n   * @param label A label identifying the category\\n   */\\n  function setEModeCategory(\\n    uint8 categoryId,\\n    uint16 ltv,\\n    uint16 liquidationThreshold,\\n    uint16 liquidationBonus,\\n    address oracle,\\n    string calldata label\\n  ) external;\\n\\n  /**\\n   * @notice Drops a reserve entirely.\\n   * @param asset The address of the reserve to drop\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the bridge fee collected by the protocol reserves.\\n   * @param newBridgeProtocolFee The part of the fee sent to the protocol treasury, expressed in bps\\n   */\\n  function updateBridgeProtocolFee(uint256 newBridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates the total flash loan premium.\\n   * Total flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra balance\\n   * - A part is collected by the protocol reserves\\n   * @dev Expressed in bps\\n   * @dev The premium is calculated on the total amount borrowed\\n   * @param newFlashloanPremiumTotal The total flashloan premium\\n   */\\n  function updateFlashloanPremiumTotal(uint128 newFlashloanPremiumTotal) external;\\n\\n  /**\\n   * @notice Updates the flash loan premium collected by protocol reserves\\n   * @dev Expressed in bps\\n   * @dev The premium to protocol is calculated on the total flashloan premium\\n   * @param newFlashloanPremiumToProtocol The part of the flashloan premium sent to the protocol treasury\\n   */\\n  function updateFlashloanPremiumToProtocol(uint128 newFlashloanPremiumToProtocol) external;\\n\\n  /**\\n   * @notice Sets the debt ceiling for an asset.\\n   * @param newDebtCeiling The new debt ceiling\\n   */\\n  function setDebtCeiling(address asset, uint256 newDebtCeiling) external;\\n\\n  /**\\n   * @notice Sets siloed borrowing for an asset\\n   * @param siloed The new siloed borrowing state\\n   */\\n  function setSiloedBorrowing(address asset, bool siloed) external;\\n}\\n\",\"keccak256\":\"0xd9083035ef01cdab5f60a04f817f3449814f37d5ade136a3d4734447ede04d71\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/types/ConfiguratorInputTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary ConfiguratorInputTypes {\\n  struct InitReserveInput {\\n    address aTokenImpl;\\n    address stableDebtTokenImpl;\\n    address variableDebtTokenImpl;\\n    uint8 underlyingAssetDecimals;\\n    address interestRateStrategyAddress;\\n    address underlyingAsset;\\n    address treasury;\\n    address incentivesController;\\n    string aTokenName;\\n    string aTokenSymbol;\\n    string variableDebtTokenName;\\n    string variableDebtTokenSymbol;\\n    string stableDebtTokenName;\\n    string stableDebtTokenSymbol;\\n    bytes params;\\n  }\\n\\n  struct UpdateATokenInput {\\n    address asset;\\n    address treasury;\\n    address incentivesController;\\n    string name;\\n    string symbol;\\n    address implementation;\\n    bytes params;\\n  }\\n\\n  struct UpdateDebtTokenInput {\\n    address asset;\\n    address incentivesController;\\n    string name;\\n    string symbol;\\n    address implementation;\\n    bytes params;\\n  }\\n}\\n\",\"keccak256\":\"0x1fb622bd7b4f68289b727a824c92ab4c05b06f4aa8308c7d2b0ccb0f9ae63b0b\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"configureReserveAsCollateral(address,uint256,uint256,uint256)":{"notice":"Configures the reserve collateralization parameters."},"dropReserve(address)":{"notice":"Drops a reserve entirely."},"initReserves((address,address,address,uint8,address,address,address,address,string,string,string,string,string,string,bytes)[])":{"notice":"Initializes multiple reserves."},"setAssetEModeCategory(address,uint8)":{"notice":"Assign an efficiency mode (eMode) category to asset."},"setBorrowCap(address,uint256)":{"notice":"Updates the borrow cap of a reserve."},"setBorrowableInIsolation(address,bool)":{"notice":"Sets the borrowable in isolation flag for the reserve."},"setDebtCeiling(address,uint256)":{"notice":"Sets the debt ceiling for an asset."},"setEModeCategory(uint8,uint16,uint16,uint16,address,string)":{"notice":"Adds a new efficiency mode (eMode) category."},"setLiquidationProtocolFee(address,uint256)":{"notice":"Updates the liquidation protocol fee of reserve."},"setPoolPause(bool)":{"notice":"Pauses or unpauses all the protocol reserves. In the paused state all the protocol interactions are suspended."},"setReserveActive(address,bool)":{"notice":"Activate or deactivate a reserve"},"setReserveBorrowing(address,bool)":{"notice":"Configures borrowing on a reserve."},"setReserveFactor(address,uint256)":{"notice":"Updates the reserve factor of a reserve."},"setReserveFlashLoaning(address,bool)":{"notice":"Enable or disable flashloans on a reserve"},"setReserveFreeze(address,bool)":{"notice":"Freeze or unfreeze a reserve. A frozen reserve doesn't allow any new supply, borrow or rate swap but allows repayments, liquidations, rate rebalances and withdrawals."},"setReserveInterestRateStrategyAddress(address,address)":{"notice":"Sets the interest rate strategy of a reserve."},"setReservePause(address,bool)":{"notice":"Pauses a reserve. A paused reserve does not allow any interaction (supply, borrow, repay, swap interest rate, liquidate, atoken transfers)."},"setReserveStableRateBorrowing(address,bool)":{"notice":"Enable or disable stable rate borrowing on a reserve."},"setSiloedBorrowing(address,bool)":{"notice":"Sets siloed borrowing for an asset"},"setSupplyCap(address,uint256)":{"notice":"Updates the supply cap of a reserve."},"setUnbackedMintCap(address,uint256)":{"notice":"Updates the unbacked mint cap of reserve."},"updateBridgeProtocolFee(uint256)":{"notice":"Updates the bridge fee collected by the protocol reserves."},"updateFlashloanPremiumToProtocol(uint128)":{"notice":"Updates the flash loan premium collected by protocol reserves"},"updateFlashloanPremiumTotal(uint128)":{"notice":"Updates the total flash loan premium. Total flash loan premium consists of two parts: - A part is sent to aToken holders as extra balance - A part is collected by the protocol reserves"},"updateStableDebtToken((address,address,string,string,address,bytes))":{"notice":"Updates the stable debt token implementation for the reserve."},"updateVariableDebtToken((address,address,string,string,address,bytes))":{"notice":"Updates the variable debt token implementation for the asset."}},"notice":"Defines the basic interface for a Pool configurator.","version":1}}},"@aave/core-v3/contracts/interfaces/IPoolDataProvider.sol":{"IPoolDataProvider":{"abi":[{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getATokenTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllATokens","outputs":[{"components":[{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"tokenAddress","type":"address"}],"internalType":"struct IPoolDataProvider.TokenData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllReservesTokens","outputs":[{"components":[{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"tokenAddress","type":"address"}],"internalType":"struct IPoolDataProvider.TokenData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getDebtCeiling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDebtCeilingDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getFlashLoanEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getInterestRateStrategyAddress","outputs":[{"internalType":"address","name":"irStrategyAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getLiquidationProtocolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getPaused","outputs":[{"internalType":"bool","name":"isPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveCaps","outputs":[{"internalType":"uint256","name":"borrowCap","type":"uint256"},{"internalType":"uint256","name":"supplyCap","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveConfigurationData","outputs":[{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"uint256","name":"ltv","type":"uint256"},{"internalType":"uint256","name":"liquidationThreshold","type":"uint256"},{"internalType":"uint256","name":"liquidationBonus","type":"uint256"},{"internalType":"uint256","name":"reserveFactor","type":"uint256"},{"internalType":"bool","name":"usageAsCollateralEnabled","type":"bool"},{"internalType":"bool","name":"borrowingEnabled","type":"bool"},{"internalType":"bool","name":"stableBorrowRateEnabled","type":"bool"},{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"bool","name":"isFrozen","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveData","outputs":[{"internalType":"uint256","name":"unbacked","type":"uint256"},{"internalType":"uint256","name":"accruedToTreasuryScaled","type":"uint256"},{"internalType":"uint256","name":"totalAToken","type":"uint256"},{"internalType":"uint256","name":"totalStableDebt","type":"uint256"},{"internalType":"uint256","name":"totalVariableDebt","type":"uint256"},{"internalType":"uint256","name":"liquidityRate","type":"uint256"},{"internalType":"uint256","name":"variableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"stableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"averageStableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"liquidityIndex","type":"uint256"},{"internalType":"uint256","name":"variableBorrowIndex","type":"uint256"},{"internalType":"uint40","name":"lastUpdateTimestamp","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveEModeCategory","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveTokensAddresses","outputs":[{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtTokenAddress","type":"address"},{"internalType":"address","name":"variableDebtTokenAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getSiloedBorrowing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getTotalDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getUnbackedMintCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getUserReserveData","outputs":[{"internalType":"uint256","name":"currentATokenBalance","type":"uint256"},{"internalType":"uint256","name":"currentStableDebt","type":"uint256"},{"internalType":"uint256","name":"currentVariableDebt","type":"uint256"},{"internalType":"uint256","name":"principalStableDebt","type":"uint256"},{"internalType":"uint256","name":"scaledVariableDebt","type":"uint256"},{"internalType":"uint256","name":"stableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"liquidityRate","type":"uint256"},{"internalType":"uint40","name":"stableRateLastUpdated","type":"uint40"},{"internalType":"bool","name":"usageAsCollateralEnabled","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"ADDRESSES_PROVIDER()":{"returns":{"_0":"The address for the PoolAddressesProvider contract"}},"getATokenTotalSupply(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The total supply of the aToken"}},"getAllATokens()":{"returns":{"_0":"The list of ATokens, pairs of symbols and addresses"}},"getAllReservesTokens()":{"details":"Handling MKR and ETH in a different way since they do not have standard `symbol` functions.","returns":{"_0":"The list of reserves, pairs of symbols and addresses"}},"getDebtCeiling(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The debt ceiling of the reserve"}},"getDebtCeilingDecimals()":{"returns":{"_0":"The debt ceiling decimals"}},"getFlashLoanEnabled(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"True if FlashLoans are enabled, false otherwise"}},"getInterestRateStrategyAddress(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"irStrategyAddress":"The address of the Interest Rate strategy"}},"getLiquidationProtocolFee(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The protocol fee on liquidation"}},"getPaused(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"isPaused":"True if the pool is paused, false otherwise"}},"getReserveCaps(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"borrowCap":"The borrow cap of the reserve","supplyCap":"The supply cap of the reserve"}},"getReserveConfigurationData(address)":{"details":"Not returning borrow and supply caps for compatibility, nor pause flag","params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"borrowingEnabled":"True if borrowing is enabled, false otherwise","decimals":"The number of decimals of the reserve","isActive":"True if it is active, false otherwise","isFrozen":"True if it is frozen, false otherwise","liquidationBonus":"The liquidationBonus of the reserve","liquidationThreshold":"The liquidationThreshold of the reserve","ltv":"The ltv of the reserve","reserveFactor":"The reserveFactor of the reserve","stableBorrowRateEnabled":"True if stable rate borrowing is enabled, false otherwise","usageAsCollateralEnabled":"True if the usage as collateral is enabled, false otherwise"}},"getReserveData(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"accruedToTreasuryScaled":"The scaled amount of tokens accrued to treasury that is to be minted","averageStableBorrowRate":"The average stable borrow rate of the reserve","lastUpdateTimestamp":"The timestamp of the last update of the reserve","liquidityIndex":"The liquidity index of the reserve","liquidityRate":"The liquidity rate of the reserve","stableBorrowRate":"The stable borrow rate of the reserve","totalAToken":"The total supply of the aToken","totalStableDebt":"The total stable debt of the reserve","totalVariableDebt":"The total variable debt of the reserve","unbacked":"The amount of unbacked tokens","variableBorrowIndex":"The variable borrow index of the reserve","variableBorrowRate":"The variable borrow rate of the reserve"}},"getReserveEModeCategory(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The eMode id of the reserve"}},"getReserveTokensAddresses(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"aTokenAddress":"The AToken address of the reserve","stableDebtTokenAddress":"The StableDebtToken address of the reserve","variableDebtTokenAddress":"The VariableDebtToken address of the reserve"}},"getSiloedBorrowing(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"True if the asset is siloed for borrowing"}},"getTotalDebt(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The total debt for asset"}},"getUnbackedMintCap(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The unbacked mint cap of the reserve"}},"getUserReserveData(address,address)":{"params":{"asset":"The address of the underlying asset of the reserve","user":"The address of the user"},"returns":{"currentATokenBalance":"The current AToken balance of the user","currentStableDebt":"The current stable debt of the user","currentVariableDebt":"The current variable debt of the user","liquidityRate":"The liquidity rate of the reserve","principalStableDebt":"The principal stable debt of the user","scaledVariableDebt":"The scaled variable debt of the user","stableBorrowRate":"The stable borrow rate of the user","stableRateLastUpdated":"The timestamp of the last update of the user stable rate","usageAsCollateralEnabled":"True if the user is using the asset as collateral, false         otherwise"}}},"title":"IPoolDataProvider","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","getATokenTotalSupply(address)":"51460e25","getAllATokens()":"f561ae41","getAllReservesTokens()":"b316ff89","getDebtCeiling(address)":"3c798109","getDebtCeilingDecimals()":"69b169e1","getFlashLoanEnabled(address)":"d7ed3ef4","getInterestRateStrategyAddress(address)":"6744362a","getLiquidationProtocolFee(address)":"3cb8a622","getPaused(address)":"b55d9904","getReserveCaps(address)":"46fbe558","getReserveConfigurationData(address)":"3e150141","getReserveData(address)":"35ea6a75","getReserveEModeCategory(address)":"163a0f20","getReserveTokensAddresses(address)":"d2493b6c","getSiloedBorrowing(address)":"fcf40a62","getTotalDebt(address)":"4d44ac4f","getUnbackedMintCap(address)":"7ba1ae36","getUserReserveData(address,address)":"28dd2d01"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getATokenTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllATokens\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"internalType\":\"struct IPoolDataProvider.TokenData[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllReservesTokens\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"internalType\":\"struct IPoolDataProvider.TokenData[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getDebtCeiling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDebtCeilingDecimals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getFlashLoanEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getInterestRateStrategyAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"irStrategyAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getLiquidationProtocolFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveCaps\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowCap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyCap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveConfigurationData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationBonus\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"usageAsCollateralEnabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"borrowingEnabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"stableBorrowRateEnabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isFrozen\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"unbacked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accruedToTreasuryScaled\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalAToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"averageStableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableBorrowIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"lastUpdateTimestamp\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveEModeCategory\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveTokensAddresses\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"aTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getSiloedBorrowing\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getTotalDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getUnbackedMintCap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserReserveData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"currentATokenBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"principalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"scaledVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityRate\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"stableRateLastUpdated\",\"type\":\"uint40\"},{\"internalType\":\"bool\",\"name\":\"usageAsCollateralEnabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"returns\":{\"_0\":\"The address for the PoolAddressesProvider contract\"}},\"getATokenTotalSupply(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The total supply of the aToken\"}},\"getAllATokens()\":{\"returns\":{\"_0\":\"The list of ATokens, pairs of symbols and addresses\"}},\"getAllReservesTokens()\":{\"details\":\"Handling MKR and ETH in a different way since they do not have standard `symbol` functions.\",\"returns\":{\"_0\":\"The list of reserves, pairs of symbols and addresses\"}},\"getDebtCeiling(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The debt ceiling of the reserve\"}},\"getDebtCeilingDecimals()\":{\"returns\":{\"_0\":\"The debt ceiling decimals\"}},\"getFlashLoanEnabled(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"True if FlashLoans are enabled, false otherwise\"}},\"getInterestRateStrategyAddress(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"irStrategyAddress\":\"The address of the Interest Rate strategy\"}},\"getLiquidationProtocolFee(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The protocol fee on liquidation\"}},\"getPaused(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"isPaused\":\"True if the pool is paused, false otherwise\"}},\"getReserveCaps(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"borrowCap\":\"The borrow cap of the reserve\",\"supplyCap\":\"The supply cap of the reserve\"}},\"getReserveConfigurationData(address)\":{\"details\":\"Not returning borrow and supply caps for compatibility, nor pause flag\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"borrowingEnabled\":\"True if borrowing is enabled, false otherwise\",\"decimals\":\"The number of decimals of the reserve\",\"isActive\":\"True if it is active, false otherwise\",\"isFrozen\":\"True if it is frozen, false otherwise\",\"liquidationBonus\":\"The liquidationBonus of the reserve\",\"liquidationThreshold\":\"The liquidationThreshold of the reserve\",\"ltv\":\"The ltv of the reserve\",\"reserveFactor\":\"The reserveFactor of the reserve\",\"stableBorrowRateEnabled\":\"True if stable rate borrowing is enabled, false otherwise\",\"usageAsCollateralEnabled\":\"True if the usage as collateral is enabled, false otherwise\"}},\"getReserveData(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"accruedToTreasuryScaled\":\"The scaled amount of tokens accrued to treasury that is to be minted\",\"averageStableBorrowRate\":\"The average stable borrow rate of the reserve\",\"lastUpdateTimestamp\":\"The timestamp of the last update of the reserve\",\"liquidityIndex\":\"The liquidity index of the reserve\",\"liquidityRate\":\"The liquidity rate of the reserve\",\"stableBorrowRate\":\"The stable borrow rate of the reserve\",\"totalAToken\":\"The total supply of the aToken\",\"totalStableDebt\":\"The total stable debt of the reserve\",\"totalVariableDebt\":\"The total variable debt of the reserve\",\"unbacked\":\"The amount of unbacked tokens\",\"variableBorrowIndex\":\"The variable borrow index of the reserve\",\"variableBorrowRate\":\"The variable borrow rate of the reserve\"}},\"getReserveEModeCategory(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The eMode id of the reserve\"}},\"getReserveTokensAddresses(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"aTokenAddress\":\"The AToken address of the reserve\",\"stableDebtTokenAddress\":\"The StableDebtToken address of the reserve\",\"variableDebtTokenAddress\":\"The VariableDebtToken address of the reserve\"}},\"getSiloedBorrowing(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"True if the asset is siloed for borrowing\"}},\"getTotalDebt(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The total debt for asset\"}},\"getUnbackedMintCap(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The unbacked mint cap of the reserve\"}},\"getUserReserveData(address,address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"user\":\"The address of the user\"},\"returns\":{\"currentATokenBalance\":\"The current AToken balance of the user\",\"currentStableDebt\":\"The current stable debt of the user\",\"currentVariableDebt\":\"The current variable debt of the user\",\"liquidityRate\":\"The liquidity rate of the reserve\",\"principalStableDebt\":\"The principal stable debt of the user\",\"scaledVariableDebt\":\"The scaled variable debt of the user\",\"stableBorrowRate\":\"The stable borrow rate of the user\",\"stableRateLastUpdated\":\"The timestamp of the last update of the user stable rate\",\"usageAsCollateralEnabled\":\"True if the user is using the asset as collateral, false         otherwise\"}}},\"title\":\"IPoolDataProvider\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the address for the PoolAddressesProvider contract.\"},\"getATokenTotalSupply(address)\":{\"notice\":\"Returns the total supply of aTokens for a given asset\"},\"getAllATokens()\":{\"notice\":\"Returns the list of the existing ATokens in the pool.\"},\"getAllReservesTokens()\":{\"notice\":\"Returns the list of the existing reserves in the pool.\"},\"getDebtCeiling(address)\":{\"notice\":\"Returns the debt ceiling of the reserve\"},\"getDebtCeilingDecimals()\":{\"notice\":\"Returns the debt ceiling decimals\"},\"getFlashLoanEnabled(address)\":{\"notice\":\"Returns whether the reserve has FlashLoans enabled or disabled\"},\"getInterestRateStrategyAddress(address)\":{\"notice\":\"Returns the address of the Interest Rate strategy\"},\"getLiquidationProtocolFee(address)\":{\"notice\":\"Returns the protocol fee on the liquidation bonus\"},\"getPaused(address)\":{\"notice\":\"Returns if the pool is paused\"},\"getReserveCaps(address)\":{\"notice\":\"Returns the caps parameters of the reserve\"},\"getReserveConfigurationData(address)\":{\"notice\":\"Returns the configuration data of the reserve\"},\"getReserveData(address)\":{\"notice\":\"Returns the reserve data\"},\"getReserveEModeCategory(address)\":{\"notice\":\"Returns the efficiency mode category of the reserve\"},\"getReserveTokensAddresses(address)\":{\"notice\":\"Returns the token addresses of the reserve\"},\"getSiloedBorrowing(address)\":{\"notice\":\"Returns the siloed borrowing flag\"},\"getTotalDebt(address)\":{\"notice\":\"Returns the total debt for a given asset\"},\"getUnbackedMintCap(address)\":{\"notice\":\"Returns the unbacked mint cap of the reserve\"},\"getUserReserveData(address,address)\":{\"notice\":\"Returns the user data in a reserve\"}},\"notice\":\"Defines the basic interface of a PoolDataProvider\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/interfaces/IPoolDataProvider.sol\":\"IPoolDataProvider\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolDataProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPoolDataProvider\\n * @author Aave\\n * @notice Defines the basic interface of a PoolDataProvider\\n */\\ninterface IPoolDataProvider {\\n  struct TokenData {\\n    string symbol;\\n    address tokenAddress;\\n  }\\n\\n  /**\\n   * @notice Returns the address for the PoolAddressesProvider contract.\\n   * @return The address for the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the list of the existing reserves in the pool.\\n   * @dev Handling MKR and ETH in a different way since they do not have standard `symbol` functions.\\n   * @return The list of reserves, pairs of symbols and addresses\\n   */\\n  function getAllReservesTokens() external view returns (TokenData[] memory);\\n\\n  /**\\n   * @notice Returns the list of the existing ATokens in the pool.\\n   * @return The list of ATokens, pairs of symbols and addresses\\n   */\\n  function getAllATokens() external view returns (TokenData[] memory);\\n\\n  /**\\n   * @notice Returns the configuration data of the reserve\\n   * @dev Not returning borrow and supply caps for compatibility, nor pause flag\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return decimals The number of decimals of the reserve\\n   * @return ltv The ltv of the reserve\\n   * @return liquidationThreshold The liquidationThreshold of the reserve\\n   * @return liquidationBonus The liquidationBonus of the reserve\\n   * @return reserveFactor The reserveFactor of the reserve\\n   * @return usageAsCollateralEnabled True if the usage as collateral is enabled, false otherwise\\n   * @return borrowingEnabled True if borrowing is enabled, false otherwise\\n   * @return stableBorrowRateEnabled True if stable rate borrowing is enabled, false otherwise\\n   * @return isActive True if it is active, false otherwise\\n   * @return isFrozen True if it is frozen, false otherwise\\n   */\\n  function getReserveConfigurationData(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 decimals,\\n      uint256 ltv,\\n      uint256 liquidationThreshold,\\n      uint256 liquidationBonus,\\n      uint256 reserveFactor,\\n      bool usageAsCollateralEnabled,\\n      bool borrowingEnabled,\\n      bool stableBorrowRateEnabled,\\n      bool isActive,\\n      bool isFrozen\\n    );\\n\\n  /**\\n   * @notice Returns the efficiency mode category of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The eMode id of the reserve\\n   */\\n  function getReserveEModeCategory(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the caps parameters of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return borrowCap The borrow cap of the reserve\\n   * @return supplyCap The supply cap of the reserve\\n   */\\n  function getReserveCaps(\\n    address asset\\n  ) external view returns (uint256 borrowCap, uint256 supplyCap);\\n\\n  /**\\n   * @notice Returns if the pool is paused\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return isPaused True if the pool is paused, false otherwise\\n   */\\n  function getPaused(address asset) external view returns (bool isPaused);\\n\\n  /**\\n   * @notice Returns the siloed borrowing flag\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return True if the asset is siloed for borrowing\\n   */\\n  function getSiloedBorrowing(address asset) external view returns (bool);\\n\\n  /**\\n   * @notice Returns the protocol fee on the liquidation bonus\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The protocol fee on liquidation\\n   */\\n  function getLiquidationProtocolFee(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the unbacked mint cap of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The unbacked mint cap of the reserve\\n   */\\n  function getUnbackedMintCap(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the debt ceiling of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getDebtCeiling(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the debt ceiling decimals\\n   * @return The debt ceiling decimals\\n   */\\n  function getDebtCeilingDecimals() external pure returns (uint256);\\n\\n  /**\\n   * @notice Returns the reserve data\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return unbacked The amount of unbacked tokens\\n   * @return accruedToTreasuryScaled The scaled amount of tokens accrued to treasury that is to be minted\\n   * @return totalAToken The total supply of the aToken\\n   * @return totalStableDebt The total stable debt of the reserve\\n   * @return totalVariableDebt The total variable debt of the reserve\\n   * @return liquidityRate The liquidity rate of the reserve\\n   * @return variableBorrowRate The variable borrow rate of the reserve\\n   * @return stableBorrowRate The stable borrow rate of the reserve\\n   * @return averageStableBorrowRate The average stable borrow rate of the reserve\\n   * @return liquidityIndex The liquidity index of the reserve\\n   * @return variableBorrowIndex The variable borrow index of the reserve\\n   * @return lastUpdateTimestamp The timestamp of the last update of the reserve\\n   */\\n  function getReserveData(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 unbacked,\\n      uint256 accruedToTreasuryScaled,\\n      uint256 totalAToken,\\n      uint256 totalStableDebt,\\n      uint256 totalVariableDebt,\\n      uint256 liquidityRate,\\n      uint256 variableBorrowRate,\\n      uint256 stableBorrowRate,\\n      uint256 averageStableBorrowRate,\\n      uint256 liquidityIndex,\\n      uint256 variableBorrowIndex,\\n      uint40 lastUpdateTimestamp\\n    );\\n\\n  /**\\n   * @notice Returns the total supply of aTokens for a given asset\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The total supply of the aToken\\n   */\\n  function getATokenTotalSupply(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total debt for a given asset\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The total debt for asset\\n   */\\n  function getTotalDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the user data in a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param user The address of the user\\n   * @return currentATokenBalance The current AToken balance of the user\\n   * @return currentStableDebt The current stable debt of the user\\n   * @return currentVariableDebt The current variable debt of the user\\n   * @return principalStableDebt The principal stable debt of the user\\n   * @return scaledVariableDebt The scaled variable debt of the user\\n   * @return stableBorrowRate The stable borrow rate of the user\\n   * @return liquidityRate The liquidity rate of the reserve\\n   * @return stableRateLastUpdated The timestamp of the last update of the user stable rate\\n   * @return usageAsCollateralEnabled True if the user is using the asset as collateral, false\\n   *         otherwise\\n   */\\n  function getUserReserveData(\\n    address asset,\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 currentATokenBalance,\\n      uint256 currentStableDebt,\\n      uint256 currentVariableDebt,\\n      uint256 principalStableDebt,\\n      uint256 scaledVariableDebt,\\n      uint256 stableBorrowRate,\\n      uint256 liquidityRate,\\n      uint40 stableRateLastUpdated,\\n      bool usageAsCollateralEnabled\\n    );\\n\\n  /**\\n   * @notice Returns the token addresses of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return aTokenAddress The AToken address of the reserve\\n   * @return stableDebtTokenAddress The StableDebtToken address of the reserve\\n   * @return variableDebtTokenAddress The VariableDebtToken address of the reserve\\n   */\\n  function getReserveTokensAddresses(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      address aTokenAddress,\\n      address stableDebtTokenAddress,\\n      address variableDebtTokenAddress\\n    );\\n\\n  /**\\n   * @notice Returns the address of the Interest Rate strategy\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return irStrategyAddress The address of the Interest Rate strategy\\n   */\\n  function getInterestRateStrategyAddress(\\n    address asset\\n  ) external view returns (address irStrategyAddress);\\n\\n  /**\\n   * @notice Returns whether the reserve has FlashLoans enabled or disabled\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return True if FlashLoans are enabled, false otherwise\\n   */\\n  function getFlashLoanEnabled(address asset) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xeb42959448d545d6ee49985e4212f54d01fe3c653f6f65cfc4061983df39bf1e\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the address for the PoolAddressesProvider contract."},"getATokenTotalSupply(address)":{"notice":"Returns the total supply of aTokens for a given asset"},"getAllATokens()":{"notice":"Returns the list of the existing ATokens in the pool."},"getAllReservesTokens()":{"notice":"Returns the list of the existing reserves in the pool."},"getDebtCeiling(address)":{"notice":"Returns the debt ceiling of the reserve"},"getDebtCeilingDecimals()":{"notice":"Returns the debt ceiling decimals"},"getFlashLoanEnabled(address)":{"notice":"Returns whether the reserve has FlashLoans enabled or disabled"},"getInterestRateStrategyAddress(address)":{"notice":"Returns the address of the Interest Rate strategy"},"getLiquidationProtocolFee(address)":{"notice":"Returns the protocol fee on the liquidation bonus"},"getPaused(address)":{"notice":"Returns if the pool is paused"},"getReserveCaps(address)":{"notice":"Returns the caps parameters of the reserve"},"getReserveConfigurationData(address)":{"notice":"Returns the configuration data of the reserve"},"getReserveData(address)":{"notice":"Returns the reserve data"},"getReserveEModeCategory(address)":{"notice":"Returns the efficiency mode category of the reserve"},"getReserveTokensAddresses(address)":{"notice":"Returns the token addresses of the reserve"},"getSiloedBorrowing(address)":{"notice":"Returns the siloed borrowing flag"},"getTotalDebt(address)":{"notice":"Returns the total debt for a given asset"},"getUnbackedMintCap(address)":{"notice":"Returns the unbacked mint cap of the reserve"},"getUserReserveData(address,address)":{"notice":"Returns the user data in a reserve"}},"notice":"Defines the basic interface of a PoolDataProvider","version":1}}},"@aave/core-v3/contracts/interfaces/IPriceOracle.sol":{"IPriceOracle":{"abi":[{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getAssetPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setAssetPrice","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"getAssetPrice(address)":{"params":{"asset":"The address of the asset"},"returns":{"_0":"The price of the asset"}},"setAssetPrice(address,uint256)":{"params":{"asset":"The address of the asset","price":"The price of the asset"}}},"title":"IPriceOracle","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getAssetPrice(address)":"b3596f07","setAssetPrice(address,uint256)":"51323f72"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getAssetPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"setAssetPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"getAssetPrice(address)\":{\"params\":{\"asset\":\"The address of the asset\"},\"returns\":{\"_0\":\"The price of the asset\"}},\"setAssetPrice(address,uint256)\":{\"params\":{\"asset\":\"The address of the asset\",\"price\":\"The price of the asset\"}}},\"title\":\"IPriceOracle\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAssetPrice(address)\":{\"notice\":\"Returns the asset price in the base currency\"},\"setAssetPrice(address,uint256)\":{\"notice\":\"Set the price of the asset\"}},\"notice\":\"Defines the basic interface for a Price oracle.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/interfaces/IPriceOracle.sol\":\"IPriceOracle\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/interfaces/IPriceOracle.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracle\\n * @author Aave\\n * @notice Defines the basic interface for a Price oracle.\\n */\\ninterface IPriceOracle {\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Set the price of the asset\\n   * @param asset The address of the asset\\n   * @param price The price of the asset\\n   */\\n  function setAssetPrice(address asset, uint256 price) external;\\n}\\n\",\"keccak256\":\"0x672bcf328d4d811c1dea02b57580ea650f73121f98f39e7916ac70340bb234d2\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"getAssetPrice(address)":{"notice":"Returns the asset price in the base currency"},"setAssetPrice(address,uint256)":{"notice":"Set the price of the asset"}},"notice":"Defines the basic interface for a Price oracle.","version":1}}},"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol":{"IPriceOracleGetter":{"abi":[{"inputs":[],"name":"BASE_CURRENCY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BASE_CURRENCY_UNIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getAssetPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"BASE_CURRENCY()":{"details":"Address 0x0 is reserved for USD as base currency.","returns":{"_0":"Returns the base currency address."}},"BASE_CURRENCY_UNIT()":{"details":"1 ether for ETH, 1e8 for USD.","returns":{"_0":"Returns the base currency unit."}},"getAssetPrice(address)":{"params":{"asset":"The address of the asset"},"returns":{"_0":"The price of the asset"}}},"title":"IPriceOracleGetter","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"BASE_CURRENCY()":"e19f4700","BASE_CURRENCY_UNIT()":"8c89b64f","getAssetPrice(address)":"b3596f07"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BASE_CURRENCY\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BASE_CURRENCY_UNIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getAssetPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"BASE_CURRENCY()\":{\"details\":\"Address 0x0 is reserved for USD as base currency.\",\"returns\":{\"_0\":\"Returns the base currency address.\"}},\"BASE_CURRENCY_UNIT()\":{\"details\":\"1 ether for ETH, 1e8 for USD.\",\"returns\":{\"_0\":\"Returns the base currency unit.\"}},\"getAssetPrice(address)\":{\"params\":{\"asset\":\"The address of the asset\"},\"returns\":{\"_0\":\"The price of the asset\"}}},\"title\":\"IPriceOracleGetter\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"BASE_CURRENCY()\":{\"notice\":\"Returns the base currency address\"},\"BASE_CURRENCY_UNIT()\":{\"notice\":\"Returns the base currency unit\"},\"getAssetPrice(address)\":{\"notice\":\"Returns the asset price in the base currency\"}},\"notice\":\"Interface for the Aave price oracle.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol\":\"IPriceOracleGetter\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"BASE_CURRENCY()":{"notice":"Returns the base currency address"},"BASE_CURRENCY_UNIT()":{"notice":"Returns the base currency unit"},"getAssetPrice(address)":{"notice":"Returns the asset price in the base currency"}},"notice":"Interface for the Aave price oracle.","version":1}}},"@aave/core-v3/contracts/interfaces/IPriceOracleSentinel.sol":{"IPriceOracleSentinel":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newGracePeriod","type":"uint256"}],"name":"GracePeriodUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newSequencerOracle","type":"address"}],"name":"SequencerOracleUpdated","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGracePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSequencerOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBorrowAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLiquidationAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newGracePeriod","type":"uint256"}],"name":"setGracePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newSequencerOracle","type":"address"}],"name":"setSequencerOracle","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","events":{"GracePeriodUpdated(uint256)":{"details":"Emitted after the grace period is updated","params":{"newGracePeriod":"The new grace period value"}},"SequencerOracleUpdated(address)":{"details":"Emitted after the sequencer oracle is updated","params":{"newSequencerOracle":"The new sequencer oracle"}}},"kind":"dev","methods":{"ADDRESSES_PROVIDER()":{"returns":{"_0":"The address of the PoolAddressesProvider contract"}},"getGracePeriod()":{"returns":{"_0":"The duration of the grace period"}},"getSequencerOracle()":{"returns":{"_0":"The address of the sequencer oracle contract"}},"isBorrowAllowed()":{"details":"Operation not allowed when PriceOracle is down or grace period not passed.","returns":{"_0":"True if the `borrow` operation is allowed, false otherwise."}},"isLiquidationAllowed()":{"details":"Operation not allowed when PriceOracle is down or grace period not passed.","returns":{"_0":"True if the `liquidation` operation is allowed, false otherwise."}},"setGracePeriod(uint256)":{"params":{"newGracePeriod":"The value of the new grace period duration"}},"setSequencerOracle(address)":{"params":{"newSequencerOracle":"The address of the new Sequencer Oracle to use"}}},"title":"IPriceOracleSentinel","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","getGracePeriod()":"dbd18388","getSequencerOracle()":"12168dc2","isBorrowAllowed()":"49aa2e81","isLiquidationAllowed()":"7a5d20ea","setGracePeriod(uint256)":"f2f65960","setSequencerOracle(address)":"f0aef31c"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newGracePeriod\",\"type\":\"uint256\"}],\"name\":\"GracePeriodUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newSequencerOracle\",\"type\":\"address\"}],\"name\":\"SequencerOracleUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGracePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSequencerOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isBorrowAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isLiquidationAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newGracePeriod\",\"type\":\"uint256\"}],\"name\":\"setGracePeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newSequencerOracle\",\"type\":\"address\"}],\"name\":\"setSequencerOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"GracePeriodUpdated(uint256)\":{\"details\":\"Emitted after the grace period is updated\",\"params\":{\"newGracePeriod\":\"The new grace period value\"}},\"SequencerOracleUpdated(address)\":{\"details\":\"Emitted after the sequencer oracle is updated\",\"params\":{\"newSequencerOracle\":\"The new sequencer oracle\"}}},\"kind\":\"dev\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"returns\":{\"_0\":\"The address of the PoolAddressesProvider contract\"}},\"getGracePeriod()\":{\"returns\":{\"_0\":\"The duration of the grace period\"}},\"getSequencerOracle()\":{\"returns\":{\"_0\":\"The address of the sequencer oracle contract\"}},\"isBorrowAllowed()\":{\"details\":\"Operation not allowed when PriceOracle is down or grace period not passed.\",\"returns\":{\"_0\":\"True if the `borrow` operation is allowed, false otherwise.\"}},\"isLiquidationAllowed()\":{\"details\":\"Operation not allowed when PriceOracle is down or grace period not passed.\",\"returns\":{\"_0\":\"True if the `liquidation` operation is allowed, false otherwise.\"}},\"setGracePeriod(uint256)\":{\"params\":{\"newGracePeriod\":\"The value of the new grace period duration\"}},\"setSequencerOracle(address)\":{\"params\":{\"newSequencerOracle\":\"The address of the new Sequencer Oracle to use\"}}},\"title\":\"IPriceOracleSentinel\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the PoolAddressesProvider\"},\"getGracePeriod()\":{\"notice\":\"Returns the grace period\"},\"getSequencerOracle()\":{\"notice\":\"Returns the SequencerOracle\"},\"isBorrowAllowed()\":{\"notice\":\"Returns true if the `borrow` operation is allowed.\"},\"isLiquidationAllowed()\":{\"notice\":\"Returns true if the `liquidation` operation is allowed.\"},\"setGracePeriod(uint256)\":{\"notice\":\"Updates the duration of the grace period\"},\"setSequencerOracle(address)\":{\"notice\":\"Updates the address of the sequencer oracle\"}},\"notice\":\"Defines the basic interface for the PriceOracleSentinel\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/interfaces/IPriceOracleSentinel.sol\":\"IPriceOracleSentinel\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the PoolAddressesProvider"},"getGracePeriod()":{"notice":"Returns the grace period"},"getSequencerOracle()":{"notice":"Returns the SequencerOracle"},"isBorrowAllowed()":{"notice":"Returns true if the `borrow` operation is allowed."},"isLiquidationAllowed()":{"notice":"Returns true if the `liquidation` operation is allowed."},"setGracePeriod(uint256)":{"notice":"Updates the duration of the grace period"},"setSequencerOracle(address)":{"notice":"Updates the address of the sequencer oracle"}},"notice":"Defines the basic interface for the PriceOracleSentinel","version":1}}},"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol":{"IReserveInterestRateStrategy":{"abi":[{"inputs":[{"components":[{"internalType":"uint256","name":"unbacked","type":"uint256"},{"internalType":"uint256","name":"liquidityAdded","type":"uint256"},{"internalType":"uint256","name":"liquidityTaken","type":"uint256"},{"internalType":"uint256","name":"totalStableDebt","type":"uint256"},{"internalType":"uint256","name":"totalVariableDebt","type":"uint256"},{"internalType":"uint256","name":"averageStableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"reserveFactor","type":"uint256"},{"internalType":"address","name":"reserve","type":"address"},{"internalType":"address","name":"aToken","type":"address"}],"internalType":"struct DataTypes.CalculateInterestRatesParams","name":"params","type":"tuple"}],"name":"calculateInterestRates","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":{"params":{"params":"The parameters needed to calculate interest rates"},"returns":{"_0":"liquidityRate The liquidity rate expressed in rays","_1":"stableBorrowRate The stable borrow rate expressed in rays","_2":"variableBorrowRate The variable borrow rate expressed in rays"}}},"title":"IReserveInterestRateStrategy","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":"a5898709"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"unbacked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityAdded\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityTaken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"averageStableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"aToken\",\"type\":\"address\"}],\"internalType\":\"struct DataTypes.CalculateInterestRatesParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"calculateInterestRates\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))\":{\"params\":{\"params\":\"The parameters needed to calculate interest rates\"},\"returns\":{\"_0\":\"liquidityRate The liquidity rate expressed in rays\",\"_1\":\"stableBorrowRate The stable borrow rate expressed in rays\",\"_2\":\"variableBorrowRate The variable borrow rate expressed in rays\"}}},\"title\":\"IReserveInterestRateStrategy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))\":{\"notice\":\"Calculates the interest rates depending on the reserve's state and configurations\"}},\"notice\":\"Interface for the calculation of the interest rates\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol\":\"IReserveInterestRateStrategy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":{"notice":"Calculates the interest rates depending on the reserve's state and configurations"}},"notice":"Interface for the calculation of the interest rates","version":1}}},"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol":{"IScaledBalanceToken":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Mint","type":"event"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getPreviousIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getScaledUserBalanceAndSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"scaledBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scaledTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","events":{"Burn(address,address,uint256,uint256,uint256)":{"details":"Emitted after the burn actionIf the burn function does not involve a transfer of the underlying asset, the target defaults to zero address","params":{"balanceIncrease":"The increase in scaled-up balance since the last action of 'from'","from":"The address from which the tokens will be burned","index":"The next liquidity index of the reserve","target":"The address that will receive the underlying, if any","value":"The scaled-up amount being burned (user entered amount - balance increase from interest)"}},"Mint(address,address,uint256,uint256,uint256)":{"details":"Emitted after the mint action","params":{"balanceIncrease":"The increase in scaled-up balance since the last action of 'onBehalfOf'","caller":"The address performing the mint","index":"The next liquidity index of the reserve","onBehalfOf":"The address of the user that will receive the minted tokens","value":"The scaled-up amount being minted (based on user entered amount and balance increase from interest)"}}},"kind":"dev","methods":{"getPreviousIndex(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The last index interest was accrued to the user's balance, expressed in ray"}},"getScaledUserBalanceAndSupply(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The scaled balance of the user","_1":"The scaled total supply"}},"scaledBalanceOf(address)":{"details":"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update","params":{"user":"The user whose balance is calculated"},"returns":{"_0":"The scaled balance of the user"}},"scaledTotalSupply()":{"returns":{"_0":"The scaled total supply"}}},"title":"IScaledBalanceToken","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getPreviousIndex(address)":"e0753986","getScaledUserBalanceAndSupply(address)":"0afbcdc9","scaledBalanceOf(address)":"1da24f3e","scaledTotalSupply()":"b1bf962d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getPreviousIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getScaledUserBalanceAndSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"scaledBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scaledTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"Burn(address,address,uint256,uint256,uint256)\":{\"details\":\"Emitted after the burn actionIf the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\",\"params\":{\"balanceIncrease\":\"The increase in scaled-up balance since the last action of 'from'\",\"from\":\"The address from which the tokens will be burned\",\"index\":\"The next liquidity index of the reserve\",\"target\":\"The address that will receive the underlying, if any\",\"value\":\"The scaled-up amount being burned (user entered amount - balance increase from interest)\"}},\"Mint(address,address,uint256,uint256,uint256)\":{\"details\":\"Emitted after the mint action\",\"params\":{\"balanceIncrease\":\"The increase in scaled-up balance since the last action of 'onBehalfOf'\",\"caller\":\"The address performing the mint\",\"index\":\"The next liquidity index of the reserve\",\"onBehalfOf\":\"The address of the user that will receive the minted tokens\",\"value\":\"The scaled-up amount being minted (based on user entered amount and balance increase from interest)\"}}},\"kind\":\"dev\",\"methods\":{\"getPreviousIndex(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The last index interest was accrued to the user's balance, expressed in ray\"}},\"getScaledUserBalanceAndSupply(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The scaled balance of the user\",\"_1\":\"The scaled total supply\"}},\"scaledBalanceOf(address)\":{\"details\":\"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update\",\"params\":{\"user\":\"The user whose balance is calculated\"},\"returns\":{\"_0\":\"The scaled balance of the user\"}},\"scaledTotalSupply()\":{\"returns\":{\"_0\":\"The scaled total supply\"}}},\"title\":\"IScaledBalanceToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getPreviousIndex(address)\":{\"notice\":\"Returns last index interest was accrued to the user's balance\"},\"getScaledUserBalanceAndSupply(address)\":{\"notice\":\"Returns the scaled balance of the user and the scaled total supply.\"},\"scaledBalanceOf(address)\":{\"notice\":\"Returns the scaled balance of the user.\"},\"scaledTotalSupply()\":{\"notice\":\"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\"}},\"notice\":\"Defines the basic interface for a scaled-balance token.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":\"IScaledBalanceToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"getPreviousIndex(address)":{"notice":"Returns last index interest was accrued to the user's balance"},"getScaledUserBalanceAndSupply(address)":{"notice":"Returns the scaled balance of the user and the scaled total supply."},"scaledBalanceOf(address)":{"notice":"Returns the scaled balance of the user."},"scaledTotalSupply()":{"notice":"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)"}},"notice":"Defines the basic interface for a scaled-balance token.","version":1}}},"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol":{"IStableDebtToken":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currentBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"avgStableRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalSupply","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"debtTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"debtTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currentBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"avgStableRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalSupply","type":"uint256"}],"name":"Mint","type":"event"},{"inputs":[],"name":"UNDERLYING_ASSET_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAverageStableRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSupplyData","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSupplyAndAvgRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSupplyLastUpdated","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserLastUpdated","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserStableRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"internalType":"string","name":"debtTokenName","type":"string"},{"internalType":"string","name":"debtTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"principalBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","details":"It does not inherit from IERC20 to save in code size","events":{"Burn(address,uint256,uint256,uint256,uint256,uint256)":{"details":"Emitted when new stable debt is burned","params":{"amount":"The amount being burned (user entered amount - balance increase from interest)","avgStableRate":"The next average stable rate after the burning","balanceIncrease":"The increase in balance since the last action of 'from'","currentBalance":"The balance of the user based on the previous balance and balance increase from interest","from":"The address from which the debt will be burned","newTotalSupply":"The next total supply of the stable debt token after the action"}},"Mint(address,address,uint256,uint256,uint256,uint256,uint256,uint256)":{"details":"Emitted when new stable debt is minted","params":{"amount":"The amount minted (user entered amount + balance increase from interest)","avgStableRate":"The next average stable rate after the minting","balanceIncrease":"The increase in balance since the last action of the user 'onBehalfOf'","currentBalance":"The balance of the user based on the previous balance and balance increase from interest","newRate":"The rate of the debt after the minting","newTotalSupply":"The next total supply of the stable debt token after the action","onBehalfOf":"The recipient of stable debt tokens","user":"The address of the user who triggered the minting"}}},"kind":"dev","methods":{"UNDERLYING_ASSET_ADDRESS()":{"returns":{"_0":"The address of the underlying asset"}},"burn(address,uint256)":{"details":"The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debtIn some instances, a burn transaction will emit a mint event if the amount to burn is less than the interest the user earned","params":{"amount":"The amount of debt tokens getting burned","from":"The address from which the debt will be burned"},"returns":{"_0":"The total stable debt","_1":"The average stable borrow rate"}},"getAverageStableRate()":{"returns":{"_0":"The average stable rate"}},"getSupplyData()":{"returns":{"_0":"The principal","_1":"The total supply","_2":"The average stable rate","_3":"The timestamp of the last update"}},"getTotalSupplyAndAvgRate()":{"returns":{"_0":"The total supply","_1":"The average rate"}},"getTotalSupplyLastUpdated()":{"returns":{"_0":"The timestamp"}},"getUserLastUpdated(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The timestamp"}},"getUserStableRate(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The stable rate of the user"}},"initialize(address,address,address,uint8,string,string,bytes)":{"params":{"debtTokenDecimals":"The decimals of the debtToken, same as the underlying asset's","debtTokenName":"The name of the token","debtTokenSymbol":"The symbol of the token","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}},"mint(address,address,uint256,uint256)":{"details":"The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debt","params":{"amount":"The amount of debt tokens to mint","onBehalfOf":"The address receiving the debt tokens","rate":"The rate of the debt being minted","user":"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise"},"returns":{"_0":"True if it is the first borrow, false otherwise","_1":"The total stable debt","_2":"The average stable borrow rate"}},"principalBalanceOf(address)":{"returns":{"_0":"The debt balance of the user since the last burn/mint action"}}},"title":"IStableDebtToken","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"UNDERLYING_ASSET_ADDRESS()":"b16a19de","burn(address,uint256)":"9dc29fac","getAverageStableRate()":"90f6fcf2","getSupplyData()":"79774338","getTotalSupplyAndAvgRate()":"f731e9be","getTotalSupplyLastUpdated()":"e7484890","getUserLastUpdated(address)":"79ce6b8c","getUserStableRate(address)":"e78c9b3b","initialize(address,address,address,uint8,string,string,bytes)":"c222ec8a","mint(address,address,uint256,uint256)":"b3f1c93d","principalBalanceOf(address)":"c634dfaa"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"avgStableRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalSupply\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"avgStableRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalSupply\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAverageStableRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupplyData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalSupplyAndAvgRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalSupplyLastUpdated\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserLastUpdated\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserStableRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"principalBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"It does not inherit from IERC20 to save in code size\",\"events\":{\"Burn(address,uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Emitted when new stable debt is burned\",\"params\":{\"amount\":\"The amount being burned (user entered amount - balance increase from interest)\",\"avgStableRate\":\"The next average stable rate after the burning\",\"balanceIncrease\":\"The increase in balance since the last action of 'from'\",\"currentBalance\":\"The balance of the user based on the previous balance and balance increase from interest\",\"from\":\"The address from which the debt will be burned\",\"newTotalSupply\":\"The next total supply of the stable debt token after the action\"}},\"Mint(address,address,uint256,uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Emitted when new stable debt is minted\",\"params\":{\"amount\":\"The amount minted (user entered amount + balance increase from interest)\",\"avgStableRate\":\"The next average stable rate after the minting\",\"balanceIncrease\":\"The increase in balance since the last action of the user 'onBehalfOf'\",\"currentBalance\":\"The balance of the user based on the previous balance and balance increase from interest\",\"newRate\":\"The rate of the debt after the minting\",\"newTotalSupply\":\"The next total supply of the stable debt token after the action\",\"onBehalfOf\":\"The recipient of stable debt tokens\",\"user\":\"The address of the user who triggered the minting\"}}},\"kind\":\"dev\",\"methods\":{\"UNDERLYING_ASSET_ADDRESS()\":{\"returns\":{\"_0\":\"The address of the underlying asset\"}},\"burn(address,uint256)\":{\"details\":\"The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debtIn some instances, a burn transaction will emit a mint event if the amount to burn is less than the interest the user earned\",\"params\":{\"amount\":\"The amount of debt tokens getting burned\",\"from\":\"The address from which the debt will be burned\"},\"returns\":{\"_0\":\"The total stable debt\",\"_1\":\"The average stable borrow rate\"}},\"getAverageStableRate()\":{\"returns\":{\"_0\":\"The average stable rate\"}},\"getSupplyData()\":{\"returns\":{\"_0\":\"The principal\",\"_1\":\"The total supply\",\"_2\":\"The average stable rate\",\"_3\":\"The timestamp of the last update\"}},\"getTotalSupplyAndAvgRate()\":{\"returns\":{\"_0\":\"The total supply\",\"_1\":\"The average rate\"}},\"getTotalSupplyLastUpdated()\":{\"returns\":{\"_0\":\"The timestamp\"}},\"getUserLastUpdated(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The timestamp\"}},\"getUserStableRate(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The stable rate of the user\"}},\"initialize(address,address,address,uint8,string,string,bytes)\":{\"params\":{\"debtTokenDecimals\":\"The decimals of the debtToken, same as the underlying asset's\",\"debtTokenName\":\"The name of the token\",\"debtTokenSymbol\":\"The symbol of the token\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}},\"mint(address,address,uint256,uint256)\":{\"details\":\"The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debt\",\"params\":{\"amount\":\"The amount of debt tokens to mint\",\"onBehalfOf\":\"The address receiving the debt tokens\",\"rate\":\"The rate of the debt being minted\",\"user\":\"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise\"},\"returns\":{\"_0\":\"True if it is the first borrow, false otherwise\",\"_1\":\"The total stable debt\",\"_2\":\"The average stable borrow rate\"}},\"principalBalanceOf(address)\":{\"returns\":{\"_0\":\"The debt balance of the user since the last burn/mint action\"}}},\"title\":\"IStableDebtToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"UNDERLYING_ASSET_ADDRESS()\":{\"notice\":\"Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\"},\"burn(address,uint256)\":{\"notice\":\"Burns debt of `user`\"},\"getAverageStableRate()\":{\"notice\":\"Returns the average rate of all the stable rate loans.\"},\"getSupplyData()\":{\"notice\":\"Returns the principal, the total supply, the average stable rate and the timestamp for the last update\"},\"getTotalSupplyAndAvgRate()\":{\"notice\":\"Returns the total supply and the average stable rate\"},\"getTotalSupplyLastUpdated()\":{\"notice\":\"Returns the timestamp of the last update of the total supply\"},\"getUserLastUpdated(address)\":{\"notice\":\"Returns the timestamp of the last update of the user\"},\"getUserStableRate(address)\":{\"notice\":\"Returns the stable rate of the user debt\"},\"initialize(address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the debt token.\"},\"mint(address,address,uint256,uint256)\":{\"notice\":\"Mints debt token to the `onBehalfOf` address.\"},\"principalBalanceOf(address)\":{\"notice\":\"Returns the principal debt balance of the user\"}},\"notice\":\"Defines the interface for the stable debt token\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol\":\"IStableDebtToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"UNDERLYING_ASSET_ADDRESS()":{"notice":"Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)"},"burn(address,uint256)":{"notice":"Burns debt of `user`"},"getAverageStableRate()":{"notice":"Returns the average rate of all the stable rate loans."},"getSupplyData()":{"notice":"Returns the principal, the total supply, the average stable rate and the timestamp for the last update"},"getTotalSupplyAndAvgRate()":{"notice":"Returns the total supply and the average stable rate"},"getTotalSupplyLastUpdated()":{"notice":"Returns the timestamp of the last update of the total supply"},"getUserLastUpdated(address)":{"notice":"Returns the timestamp of the last update of the user"},"getUserStableRate(address)":{"notice":"Returns the stable rate of the user debt"},"initialize(address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the debt token."},"mint(address,address,uint256,uint256)":{"notice":"Mints debt token to the `onBehalfOf` address."},"principalBalanceOf(address)":{"notice":"Returns the principal debt balance of the user"}},"notice":"Defines the interface for the stable debt token","version":1}}},"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol":{"IVariableDebtToken":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"debtTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"debtTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Mint","type":"event"},{"inputs":[],"name":"UNDERLYING_ASSET_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"burn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getPreviousIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getScaledUserBalanceAndSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"internalType":"string","name":"debtTokenName","type":"string"},{"internalType":"string","name":"debtTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"scaledBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scaledTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"UNDERLYING_ASSET_ADDRESS()":{"returns":{"_0":"The address of the underlying asset"}},"burn(address,uint256,uint256)":{"details":"In some instances, a burn transaction will emit a mint event if the amount to burn is less than the interest that the user accrued","params":{"amount":"The amount getting burned","from":"The address from which the debt will be burned","index":"The variable debt index of the reserve"},"returns":{"_0":"The scaled total debt of the reserve"}},"getPreviousIndex(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The last index interest was accrued to the user's balance, expressed in ray"}},"getScaledUserBalanceAndSupply(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The scaled balance of the user","_1":"The scaled total supply"}},"initialize(address,address,address,uint8,string,string,bytes)":{"params":{"debtTokenDecimals":"The decimals of the debtToken, same as the underlying asset's","debtTokenName":"The name of the token","debtTokenSymbol":"The symbol of the token","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}},"mint(address,address,uint256,uint256)":{"params":{"amount":"The amount of debt being minted","index":"The variable debt index of the reserve","onBehalfOf":"The address receiving the debt tokens","user":"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise"},"returns":{"_0":"True if the previous balance of the user is 0, false otherwise","_1":"The scaled total debt of the reserve"}},"scaledBalanceOf(address)":{"details":"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update","params":{"user":"The user whose balance is calculated"},"returns":{"_0":"The scaled balance of the user"}},"scaledTotalSupply()":{"returns":{"_0":"The scaled total supply"}}},"title":"IVariableDebtToken","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"UNDERLYING_ASSET_ADDRESS()":"b16a19de","burn(address,uint256,uint256)":"f5298aca","getPreviousIndex(address)":"e0753986","getScaledUserBalanceAndSupply(address)":"0afbcdc9","initialize(address,address,address,uint8,string,string,bytes)":"c222ec8a","mint(address,address,uint256,uint256)":"b3f1c93d","scaledBalanceOf(address)":"1da24f3e","scaledTotalSupply()":"b1bf962d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getPreviousIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getScaledUserBalanceAndSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"scaledBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scaledTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"UNDERLYING_ASSET_ADDRESS()\":{\"returns\":{\"_0\":\"The address of the underlying asset\"}},\"burn(address,uint256,uint256)\":{\"details\":\"In some instances, a burn transaction will emit a mint event if the amount to burn is less than the interest that the user accrued\",\"params\":{\"amount\":\"The amount getting burned\",\"from\":\"The address from which the debt will be burned\",\"index\":\"The variable debt index of the reserve\"},\"returns\":{\"_0\":\"The scaled total debt of the reserve\"}},\"getPreviousIndex(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The last index interest was accrued to the user's balance, expressed in ray\"}},\"getScaledUserBalanceAndSupply(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The scaled balance of the user\",\"_1\":\"The scaled total supply\"}},\"initialize(address,address,address,uint8,string,string,bytes)\":{\"params\":{\"debtTokenDecimals\":\"The decimals of the debtToken, same as the underlying asset's\",\"debtTokenName\":\"The name of the token\",\"debtTokenSymbol\":\"The symbol of the token\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}},\"mint(address,address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of debt being minted\",\"index\":\"The variable debt index of the reserve\",\"onBehalfOf\":\"The address receiving the debt tokens\",\"user\":\"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise\"},\"returns\":{\"_0\":\"True if the previous balance of the user is 0, false otherwise\",\"_1\":\"The scaled total debt of the reserve\"}},\"scaledBalanceOf(address)\":{\"details\":\"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update\",\"params\":{\"user\":\"The user whose balance is calculated\"},\"returns\":{\"_0\":\"The scaled balance of the user\"}},\"scaledTotalSupply()\":{\"returns\":{\"_0\":\"The scaled total supply\"}}},\"title\":\"IVariableDebtToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"UNDERLYING_ASSET_ADDRESS()\":{\"notice\":\"Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\"},\"burn(address,uint256,uint256)\":{\"notice\":\"Burns user variable debt\"},\"getPreviousIndex(address)\":{\"notice\":\"Returns last index interest was accrued to the user's balance\"},\"getScaledUserBalanceAndSupply(address)\":{\"notice\":\"Returns the scaled balance of the user and the scaled total supply.\"},\"initialize(address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the debt token.\"},\"mint(address,address,uint256,uint256)\":{\"notice\":\"Mints debt token to the `onBehalfOf` address\"},\"scaledBalanceOf(address)\":{\"notice\":\"Returns the scaled balance of the user.\"},\"scaledTotalSupply()\":{\"notice\":\"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\"}},\"notice\":\"Defines the basic interface for a variable debt token.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol\":\"IVariableDebtToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"UNDERLYING_ASSET_ADDRESS()":{"notice":"Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)"},"burn(address,uint256,uint256)":{"notice":"Burns user variable debt"},"getPreviousIndex(address)":{"notice":"Returns last index interest was accrued to the user's balance"},"getScaledUserBalanceAndSupply(address)":{"notice":"Returns the scaled balance of the user and the scaled total supply."},"initialize(address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the debt token."},"mint(address,address,uint256,uint256)":{"notice":"Mints debt token to the `onBehalfOf` address"},"scaledBalanceOf(address)":{"notice":"Returns the scaled balance of the user."},"scaledTotalSupply()":{"notice":"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)"}},"notice":"Defines the basic interface for a variable debt token.","version":1}}},"@aave/core-v3/contracts/misc/AaveOracle.sol":{"AaveOracle":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"},{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"address[]","name":"sources","type":"address[]"},{"internalType":"address","name":"fallbackOracle","type":"address"},{"internalType":"address","name":"baseCurrency","type":"address"},{"internalType":"uint256","name":"baseCurrencyUnit","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"source","type":"address"}],"name":"AssetSourceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"baseCurrency","type":"address"},{"indexed":false,"internalType":"uint256","name":"baseCurrencyUnit","type":"uint256"}],"name":"BaseCurrencySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fallbackOracle","type":"address"}],"name":"FallbackOracleUpdated","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BASE_CURRENCY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BASE_CURRENCY_UNIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getAssetPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"}],"name":"getAssetsPrices","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFallbackOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getSourceOfAsset","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"address[]","name":"sources","type":"address[]"}],"name":"setAssetSources","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fallbackOracle","type":"address"}],"name":"setFallbackOracle","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"constructor":{"params":{"assets":"The addresses of the assets","baseCurrency":"The base currency used for the price quotes. If USD is used, base currency is 0x0","baseCurrencyUnit":"The unit of the base currency","fallbackOracle":"The address of the fallback oracle to use if the data of an        aggregator is not consistent","provider":"The address of the new PoolAddressesProvider","sources":"The address of the source of each asset"}},"getAssetPrice(address)":{"params":{"asset":"The address of the asset"},"returns":{"_0":"The price of the asset"}},"getAssetsPrices(address[])":{"params":{"assets":"The list of assets addresses"},"returns":{"_0":"The prices of the given assets"}},"getFallbackOracle()":{"returns":{"_0":"The address of the fallback oracle"}},"getSourceOfAsset(address)":{"params":{"asset":"The address of the asset"},"returns":{"_0":"The address of the source"}},"setAssetSources(address[],address[])":{"params":{"assets":"The addresses of the assets","sources":"The addresses of the price sources"}},"setFallbackOracle(address)":{"params":{"fallbackOracle":"The address of the fallback oracle"}}},"stateVariables":{"ADDRESSES_PROVIDER":{"return":"The address of the PoolAddressesProvider contract","returns":{"_0":"The address of the PoolAddressesProvider contract"}},"BASE_CURRENCY":{"details":"Address 0x0 is reserved for USD as base currency.","return":"Returns the base currency address.","returns":{"_0":"Returns the base currency address."}},"BASE_CURRENCY_UNIT":{"details":"1 ether for ETH, 1e8 for USD.","return":"Returns the base currency unit.","returns":{"_0":"Returns the base currency unit."}}},"title":"AaveOracle","version":1},"evm":{"bytecode":{"functionDebugData":{"@_6243":{"entryPoint":null,"id":6243,"parameterSlots":6,"returnSlots":0},"@_setAssetsSources_6331":{"entryPoint":245,"id":6331,"parameterSlots":2,"returnSlots":0},"@_setFallbackOracle_6348":{"entryPoint":171,"id":6348,"parameterSlots":1,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":655,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_address_dyn_fromMemory":{"entryPoint":673,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069t_array$_t_address_$dyn_memory_ptrt_array$_t_address_$dyn_memory_ptrt_addresst_addresst_uint256_fromMemory":{"entryPoint":846,"id":null,"parameterSlots":2,"returnSlots":6},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":1026,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"increment_t_uint256":{"entryPoint":1136,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x32":{"entryPoint":1114,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":633,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_contract_IPoolAddressesProvider":{"entryPoint":608,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3733:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"83:86:201","statements":[{"body":{"nodeType":"YulBlock","src":"147:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"156:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"149:6:201"},"nodeType":"YulFunctionCall","src":"149:12:201"},"nodeType":"YulExpressionStatement","src":"149:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"106:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"117:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"132:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"137:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"128:3:201"},"nodeType":"YulFunctionCall","src":"128:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"141:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"124:3:201"},"nodeType":"YulFunctionCall","src":"124:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"113:3:201"},"nodeType":"YulFunctionCall","src":"113:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"103:2:201"},"nodeType":"YulFunctionCall","src":"103:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"96:6:201"},"nodeType":"YulFunctionCall","src":"96:50:201"},"nodeType":"YulIf","src":"93:70:201"}]},"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"72:5:201","type":""}],"src":"14:155:201"},{"body":{"nodeType":"YulBlock","src":"206:95:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"223:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"230:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"235:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"226:3:201"},"nodeType":"YulFunctionCall","src":"226:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"216:6:201"},"nodeType":"YulFunctionCall","src":"216:31:201"},"nodeType":"YulExpressionStatement","src":"216:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"263:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"266:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"256:6:201"},"nodeType":"YulFunctionCall","src":"256:15:201"},"nodeType":"YulExpressionStatement","src":"256:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"287:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"290:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"280:6:201"},"nodeType":"YulFunctionCall","src":"280:15:201"},"nodeType":"YulExpressionStatement","src":"280:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"174:127:201"},{"body":{"nodeType":"YulBlock","src":"366:102:201","statements":[{"nodeType":"YulAssignment","src":"376:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"391:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"385:5:201"},"nodeType":"YulFunctionCall","src":"385:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"376:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"456:5:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"407:48:201"},"nodeType":"YulFunctionCall","src":"407:55:201"},"nodeType":"YulExpressionStatement","src":"407:55:201"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"345:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"356:5:201","type":""}],"src":"306:162:201"},{"body":{"nodeType":"YulBlock","src":"548:848:201","statements":[{"body":{"nodeType":"YulBlock","src":"597:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"606:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"609:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"599:6:201"},"nodeType":"YulFunctionCall","src":"599:12:201"},"nodeType":"YulExpressionStatement","src":"599:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"576:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"584:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"572:3:201"},"nodeType":"YulFunctionCall","src":"572:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"591:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"568:3:201"},"nodeType":"YulFunctionCall","src":"568:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"561:6:201"},"nodeType":"YulFunctionCall","src":"561:35:201"},"nodeType":"YulIf","src":"558:55:201"},{"nodeType":"YulVariableDeclaration","src":"622:23:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"638:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"632:5:201"},"nodeType":"YulFunctionCall","src":"632:13:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"626:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"654:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"664:4:201","type":"","value":"0x20"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"658:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"677:28:201","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"695:2:201","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"699:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"691:3:201"},"nodeType":"YulFunctionCall","src":"691:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"703:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"687:3:201"},"nodeType":"YulFunctionCall","src":"687:18:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"681:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"728:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"730:16:201"},"nodeType":"YulFunctionCall","src":"730:18:201"},"nodeType":"YulExpressionStatement","src":"730:18:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"720:2:201"},{"name":"_3","nodeType":"YulIdentifier","src":"724:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"717:2:201"},"nodeType":"YulFunctionCall","src":"717:10:201"},"nodeType":"YulIf","src":"714:36:201"},{"nodeType":"YulVariableDeclaration","src":"759:20:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"773:1:201","type":"","value":"5"},{"name":"_1","nodeType":"YulIdentifier","src":"776:2:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"769:3:201"},"nodeType":"YulFunctionCall","src":"769:10:201"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"763:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"788:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"808:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"802:5:201"},"nodeType":"YulFunctionCall","src":"802:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"792:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"820:56:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"842:6:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"858:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"862:2:201","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"854:3:201"},"nodeType":"YulFunctionCall","src":"854:11:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"871:2:201","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"867:3:201"},"nodeType":"YulFunctionCall","src":"867:7:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:201"},"nodeType":"YulFunctionCall","src":"850:25:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"838:3:201"},"nodeType":"YulFunctionCall","src":"838:38:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"824:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"935:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"937:16:201"},"nodeType":"YulFunctionCall","src":"937:18:201"},"nodeType":"YulExpressionStatement","src":"937:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"894:10:201"},{"name":"_3","nodeType":"YulIdentifier","src":"906:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"891:2:201"},"nodeType":"YulFunctionCall","src":"891:18:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"914:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"926:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"911:2:201"},"nodeType":"YulFunctionCall","src":"911:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"888:2:201"},"nodeType":"YulFunctionCall","src":"888:46:201"},"nodeType":"YulIf","src":"885:72:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"973:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"977:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"966:6:201"},"nodeType":"YulFunctionCall","src":"966:22:201"},"nodeType":"YulExpressionStatement","src":"966:22:201"},{"nodeType":"YulVariableDeclaration","src":"997:17:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1008:6:201"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"1001:3:201","type":""}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1030:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1038:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1023:6:201"},"nodeType":"YulFunctionCall","src":"1023:18:201"},"nodeType":"YulExpressionStatement","src":"1023:18:201"},{"nodeType":"YulAssignment","src":"1050:22:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1061:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"1069:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1057:3:201"},"nodeType":"YulFunctionCall","src":"1057:15:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"1050:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"1081:38:201","value":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1103:6:201"},{"name":"_4","nodeType":"YulIdentifier","src":"1111:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1099:3:201"},"nodeType":"YulFunctionCall","src":"1099:15:201"},{"name":"_2","nodeType":"YulIdentifier","src":"1116:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1095:3:201"},"nodeType":"YulFunctionCall","src":"1095:24:201"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"1085:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1147:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1156:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1159:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1149:6:201"},"nodeType":"YulFunctionCall","src":"1149:12:201"},"nodeType":"YulExpressionStatement","src":"1149:12:201"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"1134:6:201"},{"name":"end","nodeType":"YulIdentifier","src":"1142:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1131:2:201"},"nodeType":"YulFunctionCall","src":"1131:15:201"},"nodeType":"YulIf","src":"1128:35:201"},{"nodeType":"YulVariableDeclaration","src":"1172:26:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1187:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"1195:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1183:3:201"},"nodeType":"YulFunctionCall","src":"1183:15:201"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"1176:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1263:103:201","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1284:3:201"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"1319:3:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"1289:29:201"},"nodeType":"YulFunctionCall","src":"1289:34:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1277:6:201"},"nodeType":"YulFunctionCall","src":"1277:47:201"},"nodeType":"YulExpressionStatement","src":"1277:47:201"},{"nodeType":"YulAssignment","src":"1337:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1348:3:201"},{"name":"_2","nodeType":"YulIdentifier","src":"1353:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1344:3:201"},"nodeType":"YulFunctionCall","src":"1344:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"1337:3:201"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"1218:3:201"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"1223:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1215:2:201"},"nodeType":"YulFunctionCall","src":"1215:15:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"1231:23:201","statements":[{"nodeType":"YulAssignment","src":"1233:19:201","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"1244:3:201"},{"name":"_2","nodeType":"YulIdentifier","src":"1249:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1240:3:201"},"nodeType":"YulFunctionCall","src":"1240:12:201"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"1233:3:201"}]}]},"pre":{"nodeType":"YulBlock","src":"1211:3:201","statements":[]},"src":"1207:159:201"},{"nodeType":"YulAssignment","src":"1375:15:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1384:6:201"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"1375:5:201"}]}]},"name":"abi_decode_array_address_dyn_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"522:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"530:3:201","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"538:5:201","type":""}],"src":"473:923:201"},{"body":{"nodeType":"YulBlock","src":"1648:930:201","statements":[{"body":{"nodeType":"YulBlock","src":"1695:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1704:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1707:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1697:6:201"},"nodeType":"YulFunctionCall","src":"1697:12:201"},"nodeType":"YulExpressionStatement","src":"1697:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1669:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1678:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1665:3:201"},"nodeType":"YulFunctionCall","src":"1665:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1690:3:201","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1661:3:201"},"nodeType":"YulFunctionCall","src":"1661:33:201"},"nodeType":"YulIf","src":"1658:53:201"},{"nodeType":"YulVariableDeclaration","src":"1720:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1739:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1733:5:201"},"nodeType":"YulFunctionCall","src":"1733:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1724:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1807:5:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"1758:48:201"},"nodeType":"YulFunctionCall","src":"1758:55:201"},"nodeType":"YulExpressionStatement","src":"1758:55:201"},{"nodeType":"YulAssignment","src":"1822:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1832:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1822:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1846:39:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1870:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1881:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1866:3:201"},"nodeType":"YulFunctionCall","src":"1866:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1860:5:201"},"nodeType":"YulFunctionCall","src":"1860:25:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1850:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1894:28:201","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1912:2:201","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"1916:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1908:3:201"},"nodeType":"YulFunctionCall","src":"1908:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"1920:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1904:3:201"},"nodeType":"YulFunctionCall","src":"1904:18:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1898:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1949:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1958:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1961:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1951:6:201"},"nodeType":"YulFunctionCall","src":"1951:12:201"},"nodeType":"YulExpressionStatement","src":"1951:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1937:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1945:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1934:2:201"},"nodeType":"YulFunctionCall","src":"1934:14:201"},"nodeType":"YulIf","src":"1931:34:201"},{"nodeType":"YulAssignment","src":"1974:82:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2028:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"2039:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2024:3:201"},"nodeType":"YulFunctionCall","src":"2024:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2048:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_fromMemory","nodeType":"YulIdentifier","src":"1984:39:201"},"nodeType":"YulFunctionCall","src":"1984:72:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1974:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2065:41:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2091:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2102:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2087:3:201"},"nodeType":"YulFunctionCall","src":"2087:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2081:5:201"},"nodeType":"YulFunctionCall","src":"2081:25:201"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"2069:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2135:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2144:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2147:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2137:6:201"},"nodeType":"YulFunctionCall","src":"2137:12:201"},"nodeType":"YulExpressionStatement","src":"2137:12:201"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"2121:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2131:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2118:2:201"},"nodeType":"YulFunctionCall","src":"2118:16:201"},"nodeType":"YulIf","src":"2115:36:201"},{"nodeType":"YulAssignment","src":"2160:84:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2214:9:201"},{"name":"offset_1","nodeType":"YulIdentifier","src":"2225:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2210:3:201"},"nodeType":"YulFunctionCall","src":"2210:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2236:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_fromMemory","nodeType":"YulIdentifier","src":"2170:39:201"},"nodeType":"YulFunctionCall","src":"2170:74:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2160:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2253:40:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2278:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2289:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2274:3:201"},"nodeType":"YulFunctionCall","src":"2274:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2268:5:201"},"nodeType":"YulFunctionCall","src":"2268:25:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2257:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2351:7:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"2302:48:201"},"nodeType":"YulFunctionCall","src":"2302:57:201"},"nodeType":"YulExpressionStatement","src":"2302:57:201"},{"nodeType":"YulAssignment","src":"2368:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"2378:7:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2368:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2394:41:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2419:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2430:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2415:3:201"},"nodeType":"YulFunctionCall","src":"2415:19:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2409:5:201"},"nodeType":"YulFunctionCall","src":"2409:26:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"2398:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"2493:7:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"2444:48:201"},"nodeType":"YulFunctionCall","src":"2444:57:201"},"nodeType":"YulExpressionStatement","src":"2444:57:201"},{"nodeType":"YulAssignment","src":"2510:17:201","value":{"name":"value_2","nodeType":"YulIdentifier","src":"2520:7:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"2510:6:201"}]},{"nodeType":"YulAssignment","src":"2536:36:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2556:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2567:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2552:3:201"},"nodeType":"YulFunctionCall","src":"2552:19:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2546:5:201"},"nodeType":"YulFunctionCall","src":"2546:26:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"2536:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069t_array$_t_address_$dyn_memory_ptrt_array$_t_address_$dyn_memory_ptrt_addresst_addresst_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1574:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1585:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1597:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1605:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1613:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1621:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1629:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"1637:6:201","type":""}],"src":"1401:1177:201"},{"body":{"nodeType":"YulBlock","src":"2684:76:201","statements":[{"nodeType":"YulAssignment","src":"2694:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2706:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2717:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2702:3:201"},"nodeType":"YulFunctionCall","src":"2702:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2694:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2736:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"2747:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2729:6:201"},"nodeType":"YulFunctionCall","src":"2729:25:201"},"nodeType":"YulExpressionStatement","src":"2729:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2653:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2664:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2675:4:201","type":""}],"src":"2583:177:201"},{"body":{"nodeType":"YulBlock","src":"2886:476:201","statements":[{"nodeType":"YulVariableDeclaration","src":"2896:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2906:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2900:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2924:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2935:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2917:6:201"},"nodeType":"YulFunctionCall","src":"2917:21:201"},"nodeType":"YulExpressionStatement","src":"2917:21:201"},{"nodeType":"YulVariableDeclaration","src":"2947:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2967:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2961:5:201"},"nodeType":"YulFunctionCall","src":"2961:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2951:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2994:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3005:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2990:3:201"},"nodeType":"YulFunctionCall","src":"2990:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"3010:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2983:6:201"},"nodeType":"YulFunctionCall","src":"2983:34:201"},"nodeType":"YulExpressionStatement","src":"2983:34:201"},{"nodeType":"YulVariableDeclaration","src":"3026:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3035:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"3030:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3095:90:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3124:9:201"},{"name":"i","nodeType":"YulIdentifier","src":"3135:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3120:3:201"},"nodeType":"YulFunctionCall","src":"3120:17:201"},{"kind":"number","nodeType":"YulLiteral","src":"3139:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3116:3:201"},"nodeType":"YulFunctionCall","src":"3116:26:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3158:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"3166:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3154:3:201"},"nodeType":"YulFunctionCall","src":"3154:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3170:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3150:3:201"},"nodeType":"YulFunctionCall","src":"3150:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3144:5:201"},"nodeType":"YulFunctionCall","src":"3144:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3109:6:201"},"nodeType":"YulFunctionCall","src":"3109:66:201"},"nodeType":"YulExpressionStatement","src":"3109:66:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3056:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"3059:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3053:2:201"},"nodeType":"YulFunctionCall","src":"3053:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"3067:19:201","statements":[{"nodeType":"YulAssignment","src":"3069:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3078:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3081:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3074:3:201"},"nodeType":"YulFunctionCall","src":"3074:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"3069:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"3049:3:201","statements":[]},"src":"3045:140:201"},{"body":{"nodeType":"YulBlock","src":"3219:66:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3248:9:201"},{"name":"length","nodeType":"YulIdentifier","src":"3259:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3244:3:201"},"nodeType":"YulFunctionCall","src":"3244:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"3268:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3240:3:201"},"nodeType":"YulFunctionCall","src":"3240:31:201"},{"kind":"number","nodeType":"YulLiteral","src":"3273:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3233:6:201"},"nodeType":"YulFunctionCall","src":"3233:42:201"},"nodeType":"YulExpressionStatement","src":"3233:42:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3200:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"3203:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3197:2:201"},"nodeType":"YulFunctionCall","src":"3197:13:201"},"nodeType":"YulIf","src":"3194:91:201"},{"nodeType":"YulAssignment","src":"3294:62:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3310:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3329:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3337:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3325:3:201"},"nodeType":"YulFunctionCall","src":"3325:15:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3346:2:201","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3342:3:201"},"nodeType":"YulFunctionCall","src":"3342:7:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3321:3:201"},"nodeType":"YulFunctionCall","src":"3321:29:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3306:3:201"},"nodeType":"YulFunctionCall","src":"3306:45:201"},{"kind":"number","nodeType":"YulLiteral","src":"3353:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3302:3:201"},"nodeType":"YulFunctionCall","src":"3302:54:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3294:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2855:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2866:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2877:4:201","type":""}],"src":"2765:597:201"},{"body":{"nodeType":"YulBlock","src":"3399:95:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3416:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3423:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"3428:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3419:3:201"},"nodeType":"YulFunctionCall","src":"3419:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3409:6:201"},"nodeType":"YulFunctionCall","src":"3409:31:201"},"nodeType":"YulExpressionStatement","src":"3409:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3456:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3459:4:201","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3449:6:201"},"nodeType":"YulFunctionCall","src":"3449:15:201"},"nodeType":"YulExpressionStatement","src":"3449:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3480:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3483:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3473:6:201"},"nodeType":"YulFunctionCall","src":"3473:15:201"},"nodeType":"YulExpressionStatement","src":"3473:15:201"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"3367:127:201"},{"body":{"nodeType":"YulBlock","src":"3546:185:201","statements":[{"body":{"nodeType":"YulBlock","src":"3585:111:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3606:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3613:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"3618:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3609:3:201"},"nodeType":"YulFunctionCall","src":"3609:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3599:6:201"},"nodeType":"YulFunctionCall","src":"3599:31:201"},"nodeType":"YulExpressionStatement","src":"3599:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3650:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3653:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3643:6:201"},"nodeType":"YulFunctionCall","src":"3643:15:201"},"nodeType":"YulExpressionStatement","src":"3643:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3678:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3681:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3671:6:201"},"nodeType":"YulFunctionCall","src":"3671:15:201"},"nodeType":"YulExpressionStatement","src":"3671:15:201"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3562:5:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3573:1:201","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3569:3:201"},"nodeType":"YulFunctionCall","src":"3569:6:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3559:2:201"},"nodeType":"YulFunctionCall","src":"3559:17:201"},"nodeType":"YulIf","src":"3556:140:201"},{"nodeType":"YulAssignment","src":"3705:20:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3716:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"3723:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3712:3:201"},"nodeType":"YulFunctionCall","src":"3712:13:201"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"3705:3:201"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"3528:5:201","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"3538:3:201","type":""}],"src":"3499:232:201"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPoolAddressesProvider(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        validator_revert_contract_IPoolAddressesProvider(value)\n    }\n    function abi_decode_array_address_dyn_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := mload(offset)\n        let _2 := 0x20\n        let _3 := sub(shl(64, 1), 1)\n        if gt(_1, _3) { panic_error_0x41() }\n        let _4 := shl(5, _1)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(_4, 63), not(31)))\n        if or(gt(newFreePtr, _3), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        let dst := memPtr\n        mstore(memPtr, _1)\n        dst := add(memPtr, _2)\n        let srcEnd := add(add(offset, _4), _2)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, _2)\n        for { } lt(src, srcEnd) { src := add(src, _2) }\n        {\n            mstore(dst, abi_decode_address_fromMemory(src))\n            dst := add(dst, _2)\n        }\n        array := memPtr\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069t_array$_t_address_$dyn_memory_ptrt_array$_t_address_$dyn_memory_ptrt_addresst_addresst_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n        let offset := mload(add(headStart, 32))\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        value1 := abi_decode_array_address_dyn_fromMemory(add(headStart, offset), dataEnd)\n        let offset_1 := mload(add(headStart, 64))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value2 := abi_decode_array_address_dyn_fromMemory(add(headStart, offset_1), dataEnd)\n        let value_1 := mload(add(headStart, 96))\n        validator_revert_contract_IPoolAddressesProvider(value_1)\n        value3 := value_1\n        let value_2 := mload(add(headStart, 128))\n        validator_revert_contract_IPoolAddressesProvider(value_2)\n        value4 := value_2\n        value5 := mload(add(headStart, 160))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        ret := add(value, 1)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60e06040523480156200001157600080fd5b506040516200122b3803806200122b83398101604081905262000034916200034e565b6001600160a01b0386166080526200004c83620000ab565b620000588585620000f5565b6001600160a01b03821660a081905260c08290526040518281527fe27c4c1372396a3d15a9922f74f9dfc7c72b1ad6d63868470787249c356454c19060200160405180910390a25050505050506200049a565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fce7a780d33665b1ea097af5f155e3821b809ecbaa839d3b33aa83ba28168cefb90600090a250565b8051825114604051806040016040528060028152602001611b9b60f11b815250906200013f5760405162461bcd60e51b815260040162000136919062000402565b60405180910390fd5b5060005b82518110156200025b578181815181106200016257620001626200045a565b60200260200101516000808584815181106200018257620001826200045a565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550818181518110620001e357620001e36200045a565b60200260200101516001600160a01b03168382815181106200020957620002096200045a565b60200260200101516001600160a01b03167f22c5b7b2d8561d39f7f210b6b326a1aa69f15311163082308ac4877db6339dc160405160405180910390a380620002528162000470565b91505062000143565b505050565b6001600160a01b03811681146200027657600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b80516200029c8162000260565b919050565b600082601f830112620002b357600080fd5b815160206001600160401b0380831115620002d257620002d262000279565b8260051b604051601f19603f83011681018181108482111715620002fa57620002fa62000279565b6040529384528581018301938381019250878511156200031957600080fd5b83870191505b84821015620003435762000333826200028f565b835291830191908301906200031f565b979650505050505050565b60008060008060008060c087890312156200036857600080fd5b8651620003758162000260565b60208801519096506001600160401b03808211156200039357600080fd5b620003a18a838b01620002a1565b96506040890151915080821115620003b857600080fd5b50620003c789828a01620002a1565b9450506060870151620003da8162000260565b6080880151909350620003ed8162000260565b8092505060a087015190509295509295509295565b600060208083528351808285015260005b81811015620004315785810183015185820160400152820162000413565b8181111562000444576000604083870101525b50601f01601f1916929092016040019392505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156200049357634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c051610d4d620004de6000396000818161013101526103a50152600081816101e5015261037a01526000818160ad01526105a30152610d4d6000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c806392bf2be011610076578063abfd53101161005b578063abfd5310146101ba578063b3596f07146101cd578063e19f4700146101e057600080fd5b806392bf2be0146101615780639d23d9f21461019a57600080fd5b80630542975c146100a8578063170aee73146100f95780636210308c1461010e5780638c89b64f1461012c575b600080fd5b6100cf7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61010c610107366004610a33565b610207565b005b60015473ffffffffffffffffffffffffffffffffffffffff166100cf565b6101537f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016100f0565b6100cf61016f366004610a33565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152602081905260409020541690565b6101ad6101a8366004610a9c565b61021b565b6040516100f09190610ade565b61010c6101c8366004610b22565b6102d0565b6101536101db366004610a33565b61034b565b6100cf7f000000000000000000000000000000000000000000000000000000000000000081565b61020f61059f565b610218816107d0565b50565b606060008267ffffffffffffffff81111561023857610238610b8e565b604051908082528060200260200182016040528015610261578160200160208202803683370190505b50905060005b838110156102c85761029985858381811061028457610284610bbd565b90506020020160208101906101db9190610a33565b8282815181106102ab576102ab610bbd565b6020908102919091010152806102c081610bec565b915050610267565b509392505050565b6102d861059f565b6103458484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060408051602080880282810182019093528782529093508792508691829185019084908082843760009201919091525061083f92505050565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8082166000818152602081905260408120549092908116917f000000000000000000000000000000000000000000000000000000000000000090911614156103ca57507f000000000000000000000000000000000000000000000000000000000000000092915050565b73ffffffffffffffffffffffffffffffffffffffff8116610480576001546040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529091169063b3596f0790602401602060405180830381865afa158015610455573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104799190610c4c565b9392505050565b60008173ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f19190610c4c565b90506000811315610503579392505050565b6001546040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529091169063b3596f0790602401602060405180830381865afa158015610573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105979190610c4c565b949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa15801561060c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106309190610c65565b6040517f13ee32e000000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff8216906313ee32e090602401602060405180830381865afa15801561069d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c19190610c82565b8061075557506040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015610731573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107559190610c82565b6040518060400160405280600181526020017f3500000000000000000000000000000000000000000000000000000000000000815250906107cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c39190610ca4565b60405180910390fd5b5050565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fce7a780d33665b1ea097af5f155e3821b809ecbaa839d3b33aa83ba28168cefb90600090a250565b80518251146040518060400160405280600281526020017f3736000000000000000000000000000000000000000000000000000000000000815250906108b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c39190610ca4565b5060005b8251811015610a0c578181815181106108d1576108d1610bbd565b60200260200101516000808584815181106108ee576108ee610bbd565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081818151811061098057610980610bbd565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168382815181106109b0576109b0610bbd565b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f22c5b7b2d8561d39f7f210b6b326a1aa69f15311163082308ac4877db6339dc160405160405180910390a380610a0481610bec565b9150506108b6565b505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461021857600080fd5b600060208284031215610a4557600080fd5b813561047981610a11565b60008083601f840112610a6257600080fd5b50813567ffffffffffffffff811115610a7a57600080fd5b6020830191508360208260051b8501011115610a9557600080fd5b9250929050565b60008060208385031215610aaf57600080fd5b823567ffffffffffffffff811115610ac657600080fd5b610ad285828601610a50565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015610b1657835183529284019291840191600101610afa565b50909695505050505050565b60008060008060408587031215610b3857600080fd5b843567ffffffffffffffff80821115610b5057600080fd5b610b5c88838901610a50565b90965094506020870135915080821115610b7557600080fd5b50610b8287828801610a50565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610c45577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b600060208284031215610c5e57600080fd5b5051919050565b600060208284031215610c7757600080fd5b815161047981610a11565b600060208284031215610c9457600080fd5b8151801515811461047957600080fd5b600060208083528351808285015260005b81811015610cd157858101830151858201604001528201610cb5565b81811115610ce3576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122063243da1c7e17f8713d4ad4425063e23011bd8e960348002b97860adba5580e464736f6c634300080a0033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x122B CODESIZE SUB DUP1 PUSH3 0x122B DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x34E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x80 MSTORE PUSH3 0x4C DUP4 PUSH3 0xAB JUMP JUMPDEST PUSH3 0x58 DUP6 DUP6 PUSH3 0xF5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0xA0 DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP3 SWAP1 MSTORE PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH32 0xE27C4C1372396A3D15A9922F74F9DFC7C72B1AD6D63868470787249C356454C1 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP PUSH3 0x49A JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xCE7A780D33665B1EA097AF5F155E3821B809ECBAA839D3B33AA83BA28168CEFB SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 MLOAD DUP3 MLOAD EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1B9B PUSH1 0xF1 SHL DUP2 MSTORE POP SWAP1 PUSH3 0x13F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x136 SWAP2 SWAP1 PUSH3 0x402 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH3 0x25B JUMPI DUP2 DUP2 DUP2 MLOAD DUP2 LT PUSH3 0x162 JUMPI PUSH3 0x162 PUSH3 0x45A JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 DUP1 DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH3 0x182 JUMPI PUSH3 0x182 PUSH3 0x45A JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP DUP2 DUP2 DUP2 MLOAD DUP2 LT PUSH3 0x1E3 JUMPI PUSH3 0x1E3 PUSH3 0x45A JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x209 JUMPI PUSH3 0x209 PUSH3 0x45A JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x22C5B7B2D8561D39F7F210B6B326A1AA69F15311163082308AC4877DB6339DC1 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 PUSH3 0x252 DUP2 PUSH3 0x470 JUMP JUMPDEST SWAP2 POP POP PUSH3 0x143 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x276 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 MLOAD PUSH3 0x29C DUP2 PUSH3 0x260 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x2B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP4 GT ISZERO PUSH3 0x2D2 JUMPI PUSH3 0x2D2 PUSH3 0x279 JUMP JUMPDEST DUP3 PUSH1 0x5 SHL PUSH1 0x40 MLOAD PUSH1 0x1F NOT PUSH1 0x3F DUP4 ADD AND DUP2 ADD DUP2 DUP2 LT DUP5 DUP3 GT OR ISZERO PUSH3 0x2FA JUMPI PUSH3 0x2FA PUSH3 0x279 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP4 DUP5 MSTORE DUP6 DUP2 ADD DUP4 ADD SWAP4 DUP4 DUP2 ADD SWAP3 POP DUP8 DUP6 GT ISZERO PUSH3 0x319 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP8 ADD SWAP2 POP JUMPDEST DUP5 DUP3 LT ISZERO PUSH3 0x343 JUMPI PUSH3 0x333 DUP3 PUSH3 0x28F JUMP JUMPDEST DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH3 0x31F JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH3 0x368 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 MLOAD PUSH3 0x375 DUP2 PUSH3 0x260 JUMP JUMPDEST PUSH1 0x20 DUP9 ADD MLOAD SWAP1 SWAP7 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x393 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x3A1 DUP11 DUP4 DUP12 ADD PUSH3 0x2A1 JUMP JUMPDEST SWAP7 POP PUSH1 0x40 DUP10 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x3B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x3C7 DUP10 DUP3 DUP11 ADD PUSH3 0x2A1 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x60 DUP8 ADD MLOAD PUSH3 0x3DA DUP2 PUSH3 0x260 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD SWAP1 SWAP4 POP PUSH3 0x3ED DUP2 PUSH3 0x260 JUMP JUMPDEST DUP1 SWAP3 POP POP PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x431 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH3 0x413 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH3 0x444 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH3 0x493 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0xD4D PUSH3 0x4DE PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x131 ADD MSTORE PUSH2 0x3A5 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x1E5 ADD MSTORE PUSH2 0x37A ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH1 0xAD ADD MSTORE PUSH2 0x5A3 ADD MSTORE PUSH2 0xD4D 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 0x92BF2BE0 GT PUSH2 0x76 JUMPI DUP1 PUSH4 0xABFD5310 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xABFD5310 EQ PUSH2 0x1BA JUMPI DUP1 PUSH4 0xB3596F07 EQ PUSH2 0x1CD JUMPI DUP1 PUSH4 0xE19F4700 EQ PUSH2 0x1E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x92BF2BE0 EQ PUSH2 0x161 JUMPI DUP1 PUSH4 0x9D23D9F2 EQ PUSH2 0x19A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C EQ PUSH2 0xA8 JUMPI DUP1 PUSH4 0x170AEE73 EQ PUSH2 0xF9 JUMPI DUP1 PUSH4 0x6210308C EQ PUSH2 0x10E JUMPI DUP1 PUSH4 0x8C89B64F EQ PUSH2 0x12C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x10C PUSH2 0x107 CALLDATASIZE PUSH1 0x4 PUSH2 0xA33 JUMP JUMPDEST PUSH2 0x207 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xCF JUMP JUMPDEST PUSH2 0x153 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF0 JUMP JUMPDEST PUSH2 0xCF PUSH2 0x16F CALLDATASIZE PUSH1 0x4 PUSH2 0xA33 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH2 0x1AD PUSH2 0x1A8 CALLDATASIZE PUSH1 0x4 PUSH2 0xA9C JUMP JUMPDEST PUSH2 0x21B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF0 SWAP2 SWAP1 PUSH2 0xADE JUMP JUMPDEST PUSH2 0x10C PUSH2 0x1C8 CALLDATASIZE PUSH1 0x4 PUSH2 0xB22 JUMP JUMPDEST PUSH2 0x2D0 JUMP JUMPDEST PUSH2 0x153 PUSH2 0x1DB CALLDATASIZE PUSH1 0x4 PUSH2 0xA33 JUMP JUMPDEST PUSH2 0x34B JUMP JUMPDEST PUSH2 0xCF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x20F PUSH2 0x59F JUMP JUMPDEST PUSH2 0x218 DUP2 PUSH2 0x7D0 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x238 JUMPI PUSH2 0x238 PUSH2 0xB8E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x261 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2C8 JUMPI PUSH2 0x299 DUP6 DUP6 DUP4 DUP2 DUP2 LT PUSH2 0x284 JUMPI PUSH2 0x284 PUSH2 0xBBD JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1DB SWAP2 SWAP1 PUSH2 0xA33 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2AB JUMPI PUSH2 0x2AB PUSH2 0xBBD JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE DUP1 PUSH2 0x2C0 DUP2 PUSH2 0xBEC JUMP JUMPDEST SWAP2 POP POP PUSH2 0x267 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x2D8 PUSH2 0x59F JUMP JUMPDEST PUSH2 0x345 DUP5 DUP5 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP9 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP8 DUP3 MSTORE SWAP1 SWAP4 POP DUP8 SWAP3 POP DUP7 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x83F SWAP3 POP POP POP JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP3 SWAP1 DUP2 AND SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND EQ ISZERO PUSH2 0x3CA JUMPI POP PUSH32 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x480 JUMPI PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x455 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x479 SWAP2 SWAP1 PUSH2 0xC4C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x50D25BCD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4CD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4F1 SWAP2 SWAP1 PUSH2 0xC4C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 SGT ISZERO PUSH2 0x503 JUMPI SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x573 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x597 SWAP2 SWAP1 PUSH2 0xC4C JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x60C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x630 SWAP2 SWAP1 PUSH2 0xC65 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x13EE32E000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x13EE32E0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x69D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6C1 SWAP2 SWAP1 PUSH2 0xC82 JUMP JUMPDEST DUP1 PUSH2 0x755 JUMPI POP PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x731 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x755 SWAP2 SWAP1 PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3500000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x7CC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C3 SWAP2 SWAP1 PUSH2 0xCA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xCE7A780D33665B1EA097AF5F155E3821B809ECBAA839D3B33AA83BA28168CEFB SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 MLOAD DUP3 MLOAD EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3736000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x8B2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C3 SWAP2 SWAP1 PUSH2 0xCA4 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0xA0C JUMPI DUP2 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x8D1 JUMPI PUSH2 0x8D1 PUSH2 0xBBD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 DUP1 DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x8EE JUMPI PUSH2 0x8EE PUSH2 0xBBD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP2 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x980 JUMPI PUSH2 0x980 PUSH2 0xBBD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x9B0 JUMPI PUSH2 0x9B0 PUSH2 0xBBD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x22C5B7B2D8561D39F7F210B6B326A1AA69F15311163082308AC4877DB6339DC1 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 PUSH2 0xA04 DUP2 PUSH2 0xBEC JUMP JUMPDEST SWAP2 POP POP PUSH2 0x8B6 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x218 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x479 DUP2 PUSH2 0xA11 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0xA62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xA7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0xA95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xAAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xAC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAD2 DUP6 DUP3 DUP7 ADD PUSH2 0xA50 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB16 JUMPI DUP4 MLOAD DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xAFA JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xB38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xB50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB5C DUP9 DUP4 DUP10 ADD PUSH2 0xA50 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xB75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB82 DUP8 DUP3 DUP9 ADD PUSH2 0xA50 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0xC45 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC5E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x479 DUP2 PUSH2 0xA11 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x479 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xCD1 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xCB5 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xCE3 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH4 0x243DA1C7 0xE1 PUSH32 0x8713D4AD4425063E23011BD8E960348002B97860ADBA5580E464736F6C634300 ADDMOD EXP STOP CALLER ","sourceMap":"824:4242:50:-:0;;;1897:451;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2099:29:50;;;;2134:34;2153:14;2134:18;:34::i;:::-;2174;2192:6;2200:7;2174:17;:34::i;:::-;-1:-1:-1;;;;;2214:28:50;;;;;;2248:37;;;;2296:47;;2729:25:201;;;2296:47:50;;2717:2:201;2702:18;2296:47:50;;;;;;;1897:451;;;;;;824:4242;;3424:172;3491:15;:52;;-1:-1:-1;;;;;;3491:52:50;-1:-1:-1;;;;;3491:52:50;;;;;;;;3554:37;;;;-1:-1:-1;;3554:37:50;3424:172;:::o;2939:349::-;3057:7;:14;3040:6;:13;:31;3073:33;;;;;;;;;;;;;-1:-1:-1;;;3073:33:50;;;3032:75;;;;;-1:-1:-1;;;3032:75:50;;;;;;;;:::i;:::-;;;;;;;;;;3118:9;3113:171;3137:6;:13;3133:1;:17;3113:171;;;3212:7;3220:1;3212:10;;;;;;;;:::i;:::-;;;;;;;3165:13;:24;3179:6;3186:1;3179:9;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;3165:24:50;-1:-1:-1;;;;;3165:24:50;;;;;;;;;;;;;:58;;;;;-1:-1:-1;;;;;3165:58:50;;;;;-1:-1:-1;;;;;3165:58:50;;;;;;3266:7;3274:1;3266:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;3236:41:50;3255:6;3262:1;3255:9;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;3236:41:50;;;;;;;;;;;3152:3;;;;:::i;:::-;;;;3113:171;;;;2939:349;;:::o;14:155:201:-;-1:-1:-1;;;;;113:31:201;;103:42;;93:70;;159:1;156;149:12;93:70;14:155;:::o;174:127::-;235:10;230:3;226:20;223:1;216:31;266:4;263:1;256:15;290:4;287:1;280:15;306:162;385:13;;407:55;385:13;407:55;:::i;:::-;306:162;;;:::o;473:923::-;538:5;591:3;584:4;576:6;572:17;568:27;558:55;;609:1;606;599:12;558:55;632:13;;664:4;-1:-1:-1;;;;;717:10:201;;;714:36;;;730:18;;:::i;:::-;776:2;773:1;769:10;808:2;802:9;871:2;867:7;862:2;858;854:11;850:25;842:6;838:38;926:6;914:10;911:22;906:2;894:10;891:18;888:46;885:72;;;937:18;;:::i;:::-;973:2;966:22;1023:18;;;1099:15;;;1095:24;;;1057:15;;;;-1:-1:-1;1131:15:201;;;1128:35;;;1159:1;1156;1149:12;1128:35;1195:2;1187:6;1183:15;1172:26;;1207:159;1223:6;1218:3;1215:15;1207:159;;;1289:34;1319:3;1289:34;:::i;:::-;1277:47;;1344:12;;;;1240;;;;1207:159;;;1384:6;473:923;-1:-1:-1;;;;;;;473:923:201:o;1401:1177::-;1597:6;1605;1613;1621;1629;1637;1690:3;1678:9;1669:7;1665:23;1661:33;1658:53;;;1707:1;1704;1697:12;1658:53;1739:9;1733:16;1758:55;1807:5;1758:55;:::i;:::-;1881:2;1866:18;;1860:25;1832:5;;-1:-1:-1;;;;;;1934:14:201;;;1931:34;;;1961:1;1958;1951:12;1931:34;1984:72;2048:7;2039:6;2028:9;2024:22;1984:72;:::i;:::-;1974:82;;2102:2;2091:9;2087:18;2081:25;2065:41;;2131:2;2121:8;2118:16;2115:36;;;2147:1;2144;2137:12;2115:36;;2170:74;2236:7;2225:8;2214:9;2210:24;2170:74;:::i;:::-;2160:84;;;2289:2;2278:9;2274:18;2268:25;2302:57;2351:7;2302:57;:::i;:::-;2430:3;2415:19;;2409:26;2378:7;;-1:-1:-1;2444:57:201;2409:26;2444:57;:::i;:::-;2520:7;2510:17;;;2567:3;2556:9;2552:19;2546:26;2536:36;;1401:1177;;;;;;;;:::o;2765:597::-;2877:4;2906:2;2935;2924:9;2917:21;2967:6;2961:13;3010:6;3005:2;2994:9;2990:18;2983:34;3035:1;3045:140;3059:6;3056:1;3053:13;3045:140;;;3154:14;;;3150:23;;3144:30;3120:17;;;3139:2;3116:26;3109:66;3074:10;;3045:140;;;3203:6;3200:1;3197:13;3194:91;;;3273:1;3268:2;3259:6;3248:9;3244:22;3240:31;3233:42;3194:91;-1:-1:-1;3346:2:201;3325:15;-1:-1:-1;;3321:29:201;3306:45;;;;3353:2;3302:54;;2765:597;-1:-1:-1;;;2765:597:201:o;3367:127::-;3428:10;3423:3;3419:20;3416:1;3409:31;3459:4;3456:1;3449:15;3483:4;3480:1;3473:15;3499:232;3538:3;-1:-1:-1;;3559:17:201;;3556:140;;;3618:10;3613:3;3609:20;3606:1;3599:31;3653:4;3650:1;3643:15;3681:4;3678:1;3671:15;3556:140;-1:-1:-1;3723:1:201;3712:13;;3499:232::o;:::-;824:4242:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ADDRESSES_PROVIDER_6175":{"entryPoint":null,"id":6175,"parameterSlots":0,"returnSlots":0},"@BASE_CURRENCY_6186":{"entryPoint":null,"id":6186,"parameterSlots":0,"returnSlots":0},"@BASE_CURRENCY_UNIT_6189":{"entryPoint":null,"id":6189,"parameterSlots":0,"returnSlots":0},"@_onlyAssetListingOrPoolAdmins_6518":{"entryPoint":1439,"id":6518,"parameterSlots":0,"returnSlots":0},"@_setAssetsSources_6331":{"entryPoint":2111,"id":6331,"parameterSlots":2,"returnSlots":0},"@_setFallbackOracle_6348":{"entryPoint":2000,"id":6348,"parameterSlots":1,"returnSlots":0},"@getAssetPrice_6411":{"entryPoint":843,"id":6411,"parameterSlots":1,"returnSlots":1},"@getAssetsPrices_6460":{"entryPoint":539,"id":6460,"parameterSlots":2,"returnSlots":1},"@getFallbackOracle_6489":{"entryPoint":null,"id":6489,"parameterSlots":0,"returnSlots":1},"@getSourceOfAsset_6477":{"entryPoint":null,"id":6477,"parameterSlots":1,"returnSlots":1},"@setAssetSources_6262":{"entryPoint":720,"id":6262,"parameterSlots":4,"returnSlots":0},"@setFallbackOracle_6276":{"entryPoint":519,"id":6276,"parameterSlots":1,"returnSlots":0},"abi_decode_array_address_dyn_calldata":{"entryPoint":2640,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":2611,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":3173,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr":{"entryPoint":2716,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_address_$dyn_calldata_ptr":{"entryPoint":2850,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":3202,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_int256_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":3148,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":2782,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":3236,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"increment_t_uint256":{"entryPoint":3052,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x32":{"entryPoint":3005,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":2958,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":2577,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:5634:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"146:125:201","statements":[{"nodeType":"YulAssignment","src":"156:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"168:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"179:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"164:3:201"},"nodeType":"YulFunctionCall","src":"164:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"156:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"198:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"213:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"221:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"209:3:201"},"nodeType":"YulFunctionCall","src":"209:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"191:6:201"},"nodeType":"YulFunctionCall","src":"191:74:201"},"nodeType":"YulExpressionStatement","src":"191:74:201"}]},"name":"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"115:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"126:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"137:4:201","type":""}],"src":"14:257:201"},{"body":{"nodeType":"YulBlock","src":"321:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"408:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"417:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"420:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"410:6:201"},"nodeType":"YulFunctionCall","src":"410:12:201"},"nodeType":"YulExpressionStatement","src":"410:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"344:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"355:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"362:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"351:3:201"},"nodeType":"YulFunctionCall","src":"351:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"341:2:201"},"nodeType":"YulFunctionCall","src":"341:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"334:6:201"},"nodeType":"YulFunctionCall","src":"334:73:201"},"nodeType":"YulIf","src":"331:93:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"310:5:201","type":""}],"src":"276:154:201"},{"body":{"nodeType":"YulBlock","src":"505:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"551:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"560:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"563:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"553:6:201"},"nodeType":"YulFunctionCall","src":"553:12:201"},"nodeType":"YulExpressionStatement","src":"553:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"526:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"535:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"522:3:201"},"nodeType":"YulFunctionCall","src":"522:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"547:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"518:3:201"},"nodeType":"YulFunctionCall","src":"518:32:201"},"nodeType":"YulIf","src":"515:52:201"},{"nodeType":"YulVariableDeclaration","src":"576:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"602:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"589:12:201"},"nodeType":"YulFunctionCall","src":"589:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"580:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"646:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"621:24:201"},"nodeType":"YulFunctionCall","src":"621:31:201"},"nodeType":"YulExpressionStatement","src":"621:31:201"},{"nodeType":"YulAssignment","src":"661:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"671:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"661:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"471:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"482:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"494:6:201","type":""}],"src":"435:247:201"},{"body":{"nodeType":"YulBlock","src":"788:125:201","statements":[{"nodeType":"YulAssignment","src":"798:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"810:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"821:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"806:3:201"},"nodeType":"YulFunctionCall","src":"806:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"798:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"840:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"855:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"863:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"851:3:201"},"nodeType":"YulFunctionCall","src":"851:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"833:6:201"},"nodeType":"YulFunctionCall","src":"833:74:201"},"nodeType":"YulExpressionStatement","src":"833:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"757:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"768:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"779:4:201","type":""}],"src":"687:226:201"},{"body":{"nodeType":"YulBlock","src":"1019:76:201","statements":[{"nodeType":"YulAssignment","src":"1029:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1041:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1052:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1037:3:201"},"nodeType":"YulFunctionCall","src":"1037:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1029:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1071:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"1082:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1064:6:201"},"nodeType":"YulFunctionCall","src":"1064:25:201"},"nodeType":"YulExpressionStatement","src":"1064:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"988:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"999:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1010:4:201","type":""}],"src":"918:177:201"},{"body":{"nodeType":"YulBlock","src":"1184:283:201","statements":[{"body":{"nodeType":"YulBlock","src":"1233:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1242:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1245:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1235:6:201"},"nodeType":"YulFunctionCall","src":"1235:12:201"},"nodeType":"YulExpressionStatement","src":"1235:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1212:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1220:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1208:3:201"},"nodeType":"YulFunctionCall","src":"1208:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"1227:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1204:3:201"},"nodeType":"YulFunctionCall","src":"1204:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1197:6:201"},"nodeType":"YulFunctionCall","src":"1197:35:201"},"nodeType":"YulIf","src":"1194:55:201"},{"nodeType":"YulAssignment","src":"1258:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1281:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1268:12:201"},"nodeType":"YulFunctionCall","src":"1268:20:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"1258:6:201"}]},{"body":{"nodeType":"YulBlock","src":"1331:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1340:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1343:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1333:6:201"},"nodeType":"YulFunctionCall","src":"1333:12:201"},"nodeType":"YulExpressionStatement","src":"1333:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1303:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1311:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1300:2:201"},"nodeType":"YulFunctionCall","src":"1300:30:201"},"nodeType":"YulIf","src":"1297:50:201"},{"nodeType":"YulAssignment","src":"1356:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1372:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1380:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1368:3:201"},"nodeType":"YulFunctionCall","src":"1368:17:201"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"1356:8:201"}]},{"body":{"nodeType":"YulBlock","src":"1445:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1454:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1457:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1447:6:201"},"nodeType":"YulFunctionCall","src":"1447:12:201"},"nodeType":"YulExpressionStatement","src":"1447:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1408:6:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1420:1:201","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"1423:6:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1416:3:201"},"nodeType":"YulFunctionCall","src":"1416:14:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1404:3:201"},"nodeType":"YulFunctionCall","src":"1404:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"1433:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1400:3:201"},"nodeType":"YulFunctionCall","src":"1400:38:201"},{"name":"end","nodeType":"YulIdentifier","src":"1440:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1397:2:201"},"nodeType":"YulFunctionCall","src":"1397:47:201"},"nodeType":"YulIf","src":"1394:67:201"}]},"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1147:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"1155:3:201","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"1163:8:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"1173:6:201","type":""}],"src":"1100:367:201"},{"body":{"nodeType":"YulBlock","src":"1577:332:201","statements":[{"body":{"nodeType":"YulBlock","src":"1623:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1632:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1635:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1625:6:201"},"nodeType":"YulFunctionCall","src":"1625:12:201"},"nodeType":"YulExpressionStatement","src":"1625:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1598:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1607:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1594:3:201"},"nodeType":"YulFunctionCall","src":"1594:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1619:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1590:3:201"},"nodeType":"YulFunctionCall","src":"1590:32:201"},"nodeType":"YulIf","src":"1587:52:201"},{"nodeType":"YulVariableDeclaration","src":"1648:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1675:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1662:12:201"},"nodeType":"YulFunctionCall","src":"1662:23:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1652:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1728:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1737:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1740:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1730:6:201"},"nodeType":"YulFunctionCall","src":"1730:12:201"},"nodeType":"YulExpressionStatement","src":"1730:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1700:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1708:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1697:2:201"},"nodeType":"YulFunctionCall","src":"1697:30:201"},"nodeType":"YulIf","src":"1694:50:201"},{"nodeType":"YulVariableDeclaration","src":"1753:96:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1821:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"1832:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1817:3:201"},"nodeType":"YulFunctionCall","src":"1817:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1841:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"1779:37:201"},"nodeType":"YulFunctionCall","src":"1779:70:201"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"1757:8:201","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"1767:8:201","type":""}]},{"nodeType":"YulAssignment","src":"1858:18:201","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"1868:8:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1858:6:201"}]},{"nodeType":"YulAssignment","src":"1885:18:201","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"1895:8:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1885:6:201"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1535:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1546:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1558:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1566:6:201","type":""}],"src":"1472:437:201"},{"body":{"nodeType":"YulBlock","src":"2065:481:201","statements":[{"nodeType":"YulVariableDeclaration","src":"2075:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2085:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2079:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2096:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2114:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2125:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2110:3:201"},"nodeType":"YulFunctionCall","src":"2110:18:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"2100:6:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2144:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2155:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2137:6:201"},"nodeType":"YulFunctionCall","src":"2137:21:201"},"nodeType":"YulExpressionStatement","src":"2137:21:201"},{"nodeType":"YulVariableDeclaration","src":"2167:17:201","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"2178:6:201"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"2171:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2193:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2213:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2207:5:201"},"nodeType":"YulFunctionCall","src":"2207:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2197:6:201","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"2236:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"2244:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2229:6:201"},"nodeType":"YulFunctionCall","src":"2229:22:201"},"nodeType":"YulExpressionStatement","src":"2229:22:201"},{"nodeType":"YulAssignment","src":"2260:25:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2271:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2282:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2267:3:201"},"nodeType":"YulFunctionCall","src":"2267:18:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"2260:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"2294:29:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2312:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2320:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2308:3:201"},"nodeType":"YulFunctionCall","src":"2308:15:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"2298:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2332:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2341:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"2336:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2400:120:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2421:3:201"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2432:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2426:5:201"},"nodeType":"YulFunctionCall","src":"2426:13:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2414:6:201"},"nodeType":"YulFunctionCall","src":"2414:26:201"},"nodeType":"YulExpressionStatement","src":"2414:26:201"},{"nodeType":"YulAssignment","src":"2453:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2464:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2469:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2460:3:201"},"nodeType":"YulFunctionCall","src":"2460:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"2453:3:201"}]},{"nodeType":"YulAssignment","src":"2485:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2499:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2507:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2495:3:201"},"nodeType":"YulFunctionCall","src":"2495:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2485:6:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2362:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"2365:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2359:2:201"},"nodeType":"YulFunctionCall","src":"2359:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2373:18:201","statements":[{"nodeType":"YulAssignment","src":"2375:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2384:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"2387:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2380:3:201"},"nodeType":"YulFunctionCall","src":"2380:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"2375:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"2355:3:201","statements":[]},"src":"2351:169:201"},{"nodeType":"YulAssignment","src":"2529:11:201","value":{"name":"pos","nodeType":"YulIdentifier","src":"2537:3:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2529:4:201"}]}]},"name":"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2034:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2045:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2056:4:201","type":""}],"src":"1914:632:201"},{"body":{"nodeType":"YulBlock","src":"2708:616:201","statements":[{"body":{"nodeType":"YulBlock","src":"2754:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2763:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2766:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2756:6:201"},"nodeType":"YulFunctionCall","src":"2756:12:201"},"nodeType":"YulExpressionStatement","src":"2756:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2729:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2738:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2725:3:201"},"nodeType":"YulFunctionCall","src":"2725:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2750:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2721:3:201"},"nodeType":"YulFunctionCall","src":"2721:32:201"},"nodeType":"YulIf","src":"2718:52:201"},{"nodeType":"YulVariableDeclaration","src":"2779:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2806:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2793:12:201"},"nodeType":"YulFunctionCall","src":"2793:23:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2783:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2825:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2835:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2829:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2880:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2889:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2892:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2882:6:201"},"nodeType":"YulFunctionCall","src":"2882:12:201"},"nodeType":"YulExpressionStatement","src":"2882:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2868:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2876:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2865:2:201"},"nodeType":"YulFunctionCall","src":"2865:14:201"},"nodeType":"YulIf","src":"2862:34:201"},{"nodeType":"YulVariableDeclaration","src":"2905:96:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2973:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"2984:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2969:3:201"},"nodeType":"YulFunctionCall","src":"2969:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2993:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"2931:37:201"},"nodeType":"YulFunctionCall","src":"2931:70:201"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"2909:8:201","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"2919:8:201","type":""}]},{"nodeType":"YulAssignment","src":"3010:18:201","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"3020:8:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3010:6:201"}]},{"nodeType":"YulAssignment","src":"3037:18:201","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"3047:8:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3037:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3064:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3097:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3108:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3093:3:201"},"nodeType":"YulFunctionCall","src":"3093:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3080:12:201"},"nodeType":"YulFunctionCall","src":"3080:32:201"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"3068:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3141:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3150:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3153:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3143:6:201"},"nodeType":"YulFunctionCall","src":"3143:12:201"},"nodeType":"YulExpressionStatement","src":"3143:12:201"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"3127:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3137:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3124:2:201"},"nodeType":"YulFunctionCall","src":"3124:16:201"},"nodeType":"YulIf","src":"3121:36:201"},{"nodeType":"YulVariableDeclaration","src":"3166:98:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3234:9:201"},{"name":"offset_1","nodeType":"YulIdentifier","src":"3245:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3230:3:201"},"nodeType":"YulFunctionCall","src":"3230:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3256:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"3192:37:201"},"nodeType":"YulFunctionCall","src":"3192:72:201"},"variables":[{"name":"value2_1","nodeType":"YulTypedName","src":"3170:8:201","type":""},{"name":"value3_1","nodeType":"YulTypedName","src":"3180:8:201","type":""}]},{"nodeType":"YulAssignment","src":"3273:18:201","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"3283:8:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3273:6:201"}]},{"nodeType":"YulAssignment","src":"3300:18:201","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"3310:8:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3300:6:201"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_address_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2650:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2661:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2673:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2681:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2689:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2697:6:201","type":""}],"src":"2551:773:201"},{"body":{"nodeType":"YulBlock","src":"3361:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3378:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3381:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3371:6:201"},"nodeType":"YulFunctionCall","src":"3371:88:201"},"nodeType":"YulExpressionStatement","src":"3371:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3475:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3478:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3468:6:201"},"nodeType":"YulFunctionCall","src":"3468:15:201"},"nodeType":"YulExpressionStatement","src":"3468:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3499:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3502:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3492:6:201"},"nodeType":"YulFunctionCall","src":"3492:15:201"},"nodeType":"YulExpressionStatement","src":"3492:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"3329:184:201"},{"body":{"nodeType":"YulBlock","src":"3550:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3567:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3570:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3560:6:201"},"nodeType":"YulFunctionCall","src":"3560:88:201"},"nodeType":"YulExpressionStatement","src":"3560:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3664:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3667:4:201","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3657:6:201"},"nodeType":"YulFunctionCall","src":"3657:15:201"},"nodeType":"YulExpressionStatement","src":"3657:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3688:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3691:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3681:6:201"},"nodeType":"YulFunctionCall","src":"3681:15:201"},"nodeType":"YulExpressionStatement","src":"3681:15:201"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"3518:184:201"},{"body":{"nodeType":"YulBlock","src":"3754:302:201","statements":[{"body":{"nodeType":"YulBlock","src":"3853:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3874:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3877:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3867:6:201"},"nodeType":"YulFunctionCall","src":"3867:88:201"},"nodeType":"YulExpressionStatement","src":"3867:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3975:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3978:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3968:6:201"},"nodeType":"YulFunctionCall","src":"3968:15:201"},"nodeType":"YulExpressionStatement","src":"3968:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4003:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4006:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3996:6:201"},"nodeType":"YulFunctionCall","src":"3996:15:201"},"nodeType":"YulExpressionStatement","src":"3996:15:201"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3770:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"3777:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3767:2:201"},"nodeType":"YulFunctionCall","src":"3767:77:201"},"nodeType":"YulIf","src":"3764:257:201"},{"nodeType":"YulAssignment","src":"4030:20:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4041:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"4048:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4037:3:201"},"nodeType":"YulFunctionCall","src":"4037:13:201"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"4030:3:201"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"3736:5:201","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"3746:3:201","type":""}],"src":"3707:349:201"},{"body":{"nodeType":"YulBlock","src":"4142:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"4188:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4197:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4200:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4190:6:201"},"nodeType":"YulFunctionCall","src":"4190:12:201"},"nodeType":"YulExpressionStatement","src":"4190:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4163:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4172:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4159:3:201"},"nodeType":"YulFunctionCall","src":"4159:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4184:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4155:3:201"},"nodeType":"YulFunctionCall","src":"4155:32:201"},"nodeType":"YulIf","src":"4152:52:201"},{"nodeType":"YulAssignment","src":"4213:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4229:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4223:5:201"},"nodeType":"YulFunctionCall","src":"4223:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4213:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4108:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4119:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4131:6:201","type":""}],"src":"4061:184:201"},{"body":{"nodeType":"YulBlock","src":"4330:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"4376:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4385:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4388:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4378:6:201"},"nodeType":"YulFunctionCall","src":"4378:12:201"},"nodeType":"YulExpressionStatement","src":"4378:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4351:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4360:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4347:3:201"},"nodeType":"YulFunctionCall","src":"4347:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4372:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4343:3:201"},"nodeType":"YulFunctionCall","src":"4343:32:201"},"nodeType":"YulIf","src":"4340:52:201"},{"nodeType":"YulAssignment","src":"4401:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4417:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4411:5:201"},"nodeType":"YulFunctionCall","src":"4411:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4401:6:201"}]}]},"name":"abi_decode_tuple_t_int256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4296:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4307:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4319:6:201","type":""}],"src":"4250:183:201"},{"body":{"nodeType":"YulBlock","src":"4519:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"4565:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4574:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4577:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4567:6:201"},"nodeType":"YulFunctionCall","src":"4567:12:201"},"nodeType":"YulExpressionStatement","src":"4567:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4540:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4549:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4536:3:201"},"nodeType":"YulFunctionCall","src":"4536:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4561:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4532:3:201"},"nodeType":"YulFunctionCall","src":"4532:32:201"},"nodeType":"YulIf","src":"4529:52:201"},{"nodeType":"YulVariableDeclaration","src":"4590:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4609:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4603:5:201"},"nodeType":"YulFunctionCall","src":"4603:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4594:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4653:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4628:24:201"},"nodeType":"YulFunctionCall","src":"4628:31:201"},"nodeType":"YulExpressionStatement","src":"4628:31:201"},{"nodeType":"YulAssignment","src":"4668:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"4678:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4668:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4485:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4496:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4508:6:201","type":""}],"src":"4438:251:201"},{"body":{"nodeType":"YulBlock","src":"4772:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"4818:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4827:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4830:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4820:6:201"},"nodeType":"YulFunctionCall","src":"4820:12:201"},"nodeType":"YulExpressionStatement","src":"4820:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4793:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4802:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4789:3:201"},"nodeType":"YulFunctionCall","src":"4789:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4814:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4785:3:201"},"nodeType":"YulFunctionCall","src":"4785:32:201"},"nodeType":"YulIf","src":"4782:52:201"},{"nodeType":"YulVariableDeclaration","src":"4843:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4862:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4856:5:201"},"nodeType":"YulFunctionCall","src":"4856:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4847:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4925:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4934:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4937:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4927:6:201"},"nodeType":"YulFunctionCall","src":"4927:12:201"},"nodeType":"YulExpressionStatement","src":"4927:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4894:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4915:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4908:6:201"},"nodeType":"YulFunctionCall","src":"4908:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4901:6:201"},"nodeType":"YulFunctionCall","src":"4901:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4891:2:201"},"nodeType":"YulFunctionCall","src":"4891:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4884:6:201"},"nodeType":"YulFunctionCall","src":"4884:40:201"},"nodeType":"YulIf","src":"4881:60:201"},{"nodeType":"YulAssignment","src":"4950:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"4960:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4950:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4738:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4749:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4761:6:201","type":""}],"src":"4694:277:201"},{"body":{"nodeType":"YulBlock","src":"5097:535:201","statements":[{"nodeType":"YulVariableDeclaration","src":"5107:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5117:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5111:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5135:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5146:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5128:6:201"},"nodeType":"YulFunctionCall","src":"5128:21:201"},"nodeType":"YulExpressionStatement","src":"5128:21:201"},{"nodeType":"YulVariableDeclaration","src":"5158:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5178:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5172:5:201"},"nodeType":"YulFunctionCall","src":"5172:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"5162:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5205:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5216:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5201:3:201"},"nodeType":"YulFunctionCall","src":"5201:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"5221:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5194:6:201"},"nodeType":"YulFunctionCall","src":"5194:34:201"},"nodeType":"YulExpressionStatement","src":"5194:34:201"},{"nodeType":"YulVariableDeclaration","src":"5237:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5246:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"5241:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"5306:90:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5335:9:201"},{"name":"i","nodeType":"YulIdentifier","src":"5346:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5331:3:201"},"nodeType":"YulFunctionCall","src":"5331:17:201"},{"kind":"number","nodeType":"YulLiteral","src":"5350:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5327:3:201"},"nodeType":"YulFunctionCall","src":"5327:26:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5369:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"5377:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5365:3:201"},"nodeType":"YulFunctionCall","src":"5365:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5381:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5361:3:201"},"nodeType":"YulFunctionCall","src":"5361:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5355:5:201"},"nodeType":"YulFunctionCall","src":"5355:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5320:6:201"},"nodeType":"YulFunctionCall","src":"5320:66:201"},"nodeType":"YulExpressionStatement","src":"5320:66:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5267:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"5270:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5264:2:201"},"nodeType":"YulFunctionCall","src":"5264:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5278:19:201","statements":[{"nodeType":"YulAssignment","src":"5280:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5289:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5292:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5285:3:201"},"nodeType":"YulFunctionCall","src":"5285:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"5280:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"5260:3:201","statements":[]},"src":"5256:140:201"},{"body":{"nodeType":"YulBlock","src":"5430:66:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5459:9:201"},{"name":"length","nodeType":"YulIdentifier","src":"5470:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5455:3:201"},"nodeType":"YulFunctionCall","src":"5455:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"5479:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5451:3:201"},"nodeType":"YulFunctionCall","src":"5451:31:201"},{"kind":"number","nodeType":"YulLiteral","src":"5484:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5444:6:201"},"nodeType":"YulFunctionCall","src":"5444:42:201"},"nodeType":"YulExpressionStatement","src":"5444:42:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5411:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"5414:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5408:2:201"},"nodeType":"YulFunctionCall","src":"5408:13:201"},"nodeType":"YulIf","src":"5405:91:201"},{"nodeType":"YulAssignment","src":"5505:121:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5521:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"5540:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5548:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5536:3:201"},"nodeType":"YulFunctionCall","src":"5536:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"5553:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5532:3:201"},"nodeType":"YulFunctionCall","src":"5532:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5517:3:201"},"nodeType":"YulFunctionCall","src":"5517:104:201"},{"kind":"number","nodeType":"YulLiteral","src":"5623:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5513:3:201"},"nodeType":"YulFunctionCall","src":"5513:113:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5505:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5066:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5077:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5088:4:201","type":""}],"src":"4976:656:201"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_array_address_dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n    }\n    function abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_address_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset_1), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        ret := add(value, 1)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_decode_tuple_t_int256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"6175":[{"length":32,"start":173},{"length":32,"start":1443}],"6186":[{"length":32,"start":485},{"length":32,"start":890}],"6189":[{"length":32,"start":305},{"length":32,"start":933}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100a35760003560e01c806392bf2be011610076578063abfd53101161005b578063abfd5310146101ba578063b3596f07146101cd578063e19f4700146101e057600080fd5b806392bf2be0146101615780639d23d9f21461019a57600080fd5b80630542975c146100a8578063170aee73146100f95780636210308c1461010e5780638c89b64f1461012c575b600080fd5b6100cf7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61010c610107366004610a33565b610207565b005b60015473ffffffffffffffffffffffffffffffffffffffff166100cf565b6101537f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016100f0565b6100cf61016f366004610a33565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152602081905260409020541690565b6101ad6101a8366004610a9c565b61021b565b6040516100f09190610ade565b61010c6101c8366004610b22565b6102d0565b6101536101db366004610a33565b61034b565b6100cf7f000000000000000000000000000000000000000000000000000000000000000081565b61020f61059f565b610218816107d0565b50565b606060008267ffffffffffffffff81111561023857610238610b8e565b604051908082528060200260200182016040528015610261578160200160208202803683370190505b50905060005b838110156102c85761029985858381811061028457610284610bbd565b90506020020160208101906101db9190610a33565b8282815181106102ab576102ab610bbd565b6020908102919091010152806102c081610bec565b915050610267565b509392505050565b6102d861059f565b6103458484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060408051602080880282810182019093528782529093508792508691829185019084908082843760009201919091525061083f92505050565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8082166000818152602081905260408120549092908116917f000000000000000000000000000000000000000000000000000000000000000090911614156103ca57507f000000000000000000000000000000000000000000000000000000000000000092915050565b73ffffffffffffffffffffffffffffffffffffffff8116610480576001546040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529091169063b3596f0790602401602060405180830381865afa158015610455573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104799190610c4c565b9392505050565b60008173ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f19190610c4c565b90506000811315610503579392505050565b6001546040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529091169063b3596f0790602401602060405180830381865afa158015610573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105979190610c4c565b949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa15801561060c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106309190610c65565b6040517f13ee32e000000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff8216906313ee32e090602401602060405180830381865afa15801561069d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c19190610c82565b8061075557506040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015610731573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107559190610c82565b6040518060400160405280600181526020017f3500000000000000000000000000000000000000000000000000000000000000815250906107cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c39190610ca4565b60405180910390fd5b5050565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fce7a780d33665b1ea097af5f155e3821b809ecbaa839d3b33aa83ba28168cefb90600090a250565b80518251146040518060400160405280600281526020017f3736000000000000000000000000000000000000000000000000000000000000815250906108b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c39190610ca4565b5060005b8251811015610a0c578181815181106108d1576108d1610bbd565b60200260200101516000808584815181106108ee576108ee610bbd565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081818151811061098057610980610bbd565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168382815181106109b0576109b0610bbd565b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f22c5b7b2d8561d39f7f210b6b326a1aa69f15311163082308ac4877db6339dc160405160405180910390a380610a0481610bec565b9150506108b6565b505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461021857600080fd5b600060208284031215610a4557600080fd5b813561047981610a11565b60008083601f840112610a6257600080fd5b50813567ffffffffffffffff811115610a7a57600080fd5b6020830191508360208260051b8501011115610a9557600080fd5b9250929050565b60008060208385031215610aaf57600080fd5b823567ffffffffffffffff811115610ac657600080fd5b610ad285828601610a50565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015610b1657835183529284019291840191600101610afa565b50909695505050505050565b60008060008060408587031215610b3857600080fd5b843567ffffffffffffffff80821115610b5057600080fd5b610b5c88838901610a50565b90965094506020870135915080821115610b7557600080fd5b50610b8287828801610a50565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610c45577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b600060208284031215610c5e57600080fd5b5051919050565b600060208284031215610c7757600080fd5b815161047981610a11565b600060208284031215610c9457600080fd5b8151801515811461047957600080fd5b600060208083528351808285015260005b81811015610cd157858101830151858201604001528201610cb5565b81811115610ce3576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122063243da1c7e17f8713d4ad4425063e23011bd8e960348002b97860adba5580e464736f6c634300080a0033","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 0x92BF2BE0 GT PUSH2 0x76 JUMPI DUP1 PUSH4 0xABFD5310 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xABFD5310 EQ PUSH2 0x1BA JUMPI DUP1 PUSH4 0xB3596F07 EQ PUSH2 0x1CD JUMPI DUP1 PUSH4 0xE19F4700 EQ PUSH2 0x1E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x92BF2BE0 EQ PUSH2 0x161 JUMPI DUP1 PUSH4 0x9D23D9F2 EQ PUSH2 0x19A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C EQ PUSH2 0xA8 JUMPI DUP1 PUSH4 0x170AEE73 EQ PUSH2 0xF9 JUMPI DUP1 PUSH4 0x6210308C EQ PUSH2 0x10E JUMPI DUP1 PUSH4 0x8C89B64F EQ PUSH2 0x12C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xCF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x10C PUSH2 0x107 CALLDATASIZE PUSH1 0x4 PUSH2 0xA33 JUMP JUMPDEST PUSH2 0x207 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xCF JUMP JUMPDEST PUSH2 0x153 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF0 JUMP JUMPDEST PUSH2 0xCF PUSH2 0x16F CALLDATASIZE PUSH1 0x4 PUSH2 0xA33 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH2 0x1AD PUSH2 0x1A8 CALLDATASIZE PUSH1 0x4 PUSH2 0xA9C JUMP JUMPDEST PUSH2 0x21B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF0 SWAP2 SWAP1 PUSH2 0xADE JUMP JUMPDEST PUSH2 0x10C PUSH2 0x1C8 CALLDATASIZE PUSH1 0x4 PUSH2 0xB22 JUMP JUMPDEST PUSH2 0x2D0 JUMP JUMPDEST PUSH2 0x153 PUSH2 0x1DB CALLDATASIZE PUSH1 0x4 PUSH2 0xA33 JUMP JUMPDEST PUSH2 0x34B JUMP JUMPDEST PUSH2 0xCF PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x20F PUSH2 0x59F JUMP JUMPDEST PUSH2 0x218 DUP2 PUSH2 0x7D0 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x238 JUMPI PUSH2 0x238 PUSH2 0xB8E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x261 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2C8 JUMPI PUSH2 0x299 DUP6 DUP6 DUP4 DUP2 DUP2 LT PUSH2 0x284 JUMPI PUSH2 0x284 PUSH2 0xBBD JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1DB SWAP2 SWAP1 PUSH2 0xA33 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2AB JUMPI PUSH2 0x2AB PUSH2 0xBBD JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE DUP1 PUSH2 0x2C0 DUP2 PUSH2 0xBEC JUMP JUMPDEST SWAP2 POP POP PUSH2 0x267 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x2D8 PUSH2 0x59F JUMP JUMPDEST PUSH2 0x345 DUP5 DUP5 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP9 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP8 DUP3 MSTORE SWAP1 SWAP4 POP DUP8 SWAP3 POP DUP7 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x83F SWAP3 POP POP POP JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP3 SWAP1 DUP2 AND SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND EQ ISZERO PUSH2 0x3CA JUMPI POP PUSH32 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x480 JUMPI PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x455 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x479 SWAP2 SWAP1 PUSH2 0xC4C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x50D25BCD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4CD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4F1 SWAP2 SWAP1 PUSH2 0xC4C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 SGT ISZERO PUSH2 0x503 JUMPI SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x573 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x597 SWAP2 SWAP1 PUSH2 0xC4C JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x60C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x630 SWAP2 SWAP1 PUSH2 0xC65 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x13EE32E000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x13EE32E0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x69D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6C1 SWAP2 SWAP1 PUSH2 0xC82 JUMP JUMPDEST DUP1 PUSH2 0x755 JUMPI POP PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x731 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x755 SWAP2 SWAP1 PUSH2 0xC82 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3500000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x7CC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C3 SWAP2 SWAP1 PUSH2 0xCA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0xCE7A780D33665B1EA097AF5F155E3821B809ECBAA839D3B33AA83BA28168CEFB SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 MLOAD DUP3 MLOAD EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3736000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x8B2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7C3 SWAP2 SWAP1 PUSH2 0xCA4 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0xA0C JUMPI DUP2 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x8D1 JUMPI PUSH2 0x8D1 PUSH2 0xBBD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 DUP1 DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x8EE JUMPI PUSH2 0x8EE PUSH2 0xBBD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP2 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x980 JUMPI PUSH2 0x980 PUSH2 0xBBD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x9B0 JUMPI PUSH2 0x9B0 PUSH2 0xBBD JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x22C5B7B2D8561D39F7F210B6B326A1AA69F15311163082308AC4877DB6339DC1 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 PUSH2 0xA04 DUP2 PUSH2 0xBEC JUMP JUMPDEST SWAP2 POP POP PUSH2 0x8B6 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x218 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x479 DUP2 PUSH2 0xA11 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0xA62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xA7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0xA95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xAAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xAC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAD2 DUP6 DUP3 DUP7 ADD PUSH2 0xA50 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB16 JUMPI DUP4 MLOAD DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xAFA JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xB38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xB50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB5C DUP9 DUP4 DUP10 ADD PUSH2 0xA50 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xB75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB82 DUP8 DUP3 DUP9 ADD PUSH2 0xA50 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0xC45 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC5E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x479 DUP2 PUSH2 0xA11 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x479 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xCD1 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xCB5 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xCE3 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH4 0x243DA1C7 0xE1 PUSH32 0x8713D4AD4425063E23011BD8E960348002B97860ADBA5580E464736F6C634300 ADDMOD EXP STOP CALLER ","sourceMap":"824:4242:50:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;863:58;;;;;;;;221:42:201;209:55;;;191:74;;179:2;164:18;863:58:50;;;;;;;;2600:151;;;;;;:::i;:::-;;:::i;:::-;;4659:103;4741:15;;;;4659:103;;1144:52;;;;;;;;1064:25:201;;;1052:2;1037:18;1144:52:50;918:177:201;4496:129:50;;;;;;:::i;:::-;4599:20;;;;4569:7;4599:20;;;;;;;;;;;;;4496:129;4168:294;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2382:184::-;;;;;;:::i;:::-;;:::i;3637:497::-;;;;;;:::i;:::-;;:::i;1093:47::-;;;;;2600:151;1346:31;:29;:31::i;:::-;2712:34:::1;2731:14;2712:18;:34::i;:::-;2600:151:::0;:::o;4168:294::-;4260:16;4284:23;4324:6;4310:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4310:28:50;;4284:54;;4349:9;4344:95;4364:17;;;4344:95;;;4408:24;4422:6;;4429:1;4422:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;4408:24::-;4396:6;4403:1;4396:9;;;;;;;;:::i;:::-;;;;;;;;;;:36;4383:3;;;;:::i;:::-;;;;4344:95;;;-1:-1:-1;4451:6:50;4168:294;-1:-1:-1;;;4168:294:50:o;2382:184::-;1346:31;:29;:31::i;:::-;2527:34:::1;2545:6;;2527:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;2527:34:50::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;-1:-1:-1;2553:7:50;;-1:-1:-1;2553:7:50;;;;2527:34;::::1;::::0;2553:7;;2527:34;2553:7;2527:34;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;2527:17:50::1;::::0;-1:-1:-1;;;2527:34:50:i:1;:::-;2382:184:::0;;;;:::o;3637:497::-;3749:20;;;;3705:7;3749:20;;;;;;;;;;;3705:7;;3749:20;;;;3789:13;3780:22;;;;3776:354;;;-1:-1:-1;3819:18:50;;3637:497;-1:-1:-1;;3637:497:50:o;3776:354::-;3854:29;;;3850:280;;3900:15;;:36;;;;;:15;209:55:201;;;3900:36:50;;;191:74:201;3900:15:50;;;;:29;;164:18:201;;3900:36:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3893:43;3637:497;-1:-1:-1;;;3637:497:50:o;3850:280::-;3957:12;3972:6;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3957:36;;4013:1;4005:5;:9;4001:123;;;4041:5;3637:497;-1:-1:-1;;;3637:497:50:o;4001:123::-;4079:15;;:36;;;;;:15;209:55:201;;;4079:36:50;;;191:74:201;4079:15:50;;;;:29;;164:18:201;;4079:36:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4072:43;3637:497;-1:-1:-1;;;;3637:497:50:o;4766:298::-;4827:22;4864:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4920:42;;;;;4951:10;4920:42;;;191:74:201;4827:72:50;;-1:-1:-1;4920:30:50;;;;;;164:18:201;;4920:42:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:80;;;-1:-1:-1;4966:34:50;;;;;4989:10;4966:34;;;191:74:201;4966:22:50;;;;;;164:18:201;;4966:34:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5008:45;;;;;;;;;;;;;;;;;4905:154;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4821:243;4766:298::o;3424:172::-;3491:15;:52;;;;;;;;;;;;;3554:37;;;;-1:-1:-1;;3554:37:50;3424:172;:::o;2939:349::-;3057:7;:14;3040:6;:13;:31;3073:33;;;;;;;;;;;;;;;;;3032:75;;;;;;;;;;;;;;:::i;:::-;;3118:9;3113:171;3137:6;:13;3133:1;:17;3113:171;;;3212:7;3220:1;3212:10;;;;;;;;:::i;:::-;;;;;;;3165:13;:24;3179:6;3186:1;3179:9;;;;;;;;:::i;:::-;;;;;;;3165:24;;;;;;;;;;;;;;;;:58;;;;;;;;;;;;;;;;;;3266:7;3274:1;3266:10;;;;;;;;:::i;:::-;;;;;;;3236:41;;3255:6;3262:1;3255:9;;;;;;;;:::i;:::-;;;;;;;3236:41;;;;;;;;;;;;3152:3;;;;:::i;:::-;;;;3113:171;;;;2939:349;;:::o;276:154:201:-;362:42;355:5;351:54;344:5;341:65;331:93;;420:1;417;410:12;435:247;494:6;547:2;535:9;526:7;522:23;518:32;515:52;;;563:1;560;553:12;515:52;602:9;589:23;621:31;646:5;621:31;:::i;1100:367::-;1163:8;1173:6;1227:3;1220:4;1212:6;1208:17;1204:27;1194:55;;1245:1;1242;1235:12;1194:55;-1:-1:-1;1268:20:201;;1311:18;1300:30;;1297:50;;;1343:1;1340;1333:12;1297:50;1380:4;1372:6;1368:17;1356:29;;1440:3;1433:4;1423:6;1420:1;1416:14;1408:6;1404:27;1400:38;1397:47;1394:67;;;1457:1;1454;1447:12;1394:67;1100:367;;;;;:::o;1472:437::-;1558:6;1566;1619:2;1607:9;1598:7;1594:23;1590:32;1587:52;;;1635:1;1632;1625:12;1587:52;1675:9;1662:23;1708:18;1700:6;1697:30;1694:50;;;1740:1;1737;1730:12;1694:50;1779:70;1841:7;1832:6;1821:9;1817:22;1779:70;:::i;:::-;1868:8;;1753:96;;-1:-1:-1;1472:437:201;-1:-1:-1;;;;1472:437:201:o;1914:632::-;2085:2;2137:21;;;2207:13;;2110:18;;;2229:22;;;2056:4;;2085:2;2308:15;;;;2282:2;2267:18;;;2056:4;2351:169;2365:6;2362:1;2359:13;2351:169;;;2426:13;;2414:26;;2495:15;;;;2460:12;;;;2387:1;2380:9;2351:169;;;-1:-1:-1;2537:3:201;;1914:632;-1:-1:-1;;;;;;1914:632:201:o;2551:773::-;2673:6;2681;2689;2697;2750:2;2738:9;2729:7;2725:23;2721:32;2718:52;;;2766:1;2763;2756:12;2718:52;2806:9;2793:23;2835:18;2876:2;2868:6;2865:14;2862:34;;;2892:1;2889;2882:12;2862:34;2931:70;2993:7;2984:6;2973:9;2969:22;2931:70;:::i;:::-;3020:8;;-1:-1:-1;2905:96:201;-1:-1:-1;3108:2:201;3093:18;;3080:32;;-1:-1:-1;3124:16:201;;;3121:36;;;3153:1;3150;3143:12;3121:36;;3192:72;3256:7;3245:8;3234:9;3230:24;3192:72;:::i;:::-;2551:773;;;;-1:-1:-1;3283:8:201;-1:-1:-1;;;;2551:773:201:o;3329:184::-;3381:77;3378:1;3371:88;3478:4;3475:1;3468:15;3502:4;3499:1;3492:15;3518:184;3570:77;3567:1;3560:88;3667:4;3664:1;3657:15;3691:4;3688:1;3681:15;3707:349;3746:3;3777:66;3770:5;3767:77;3764:257;;;3877:77;3874:1;3867:88;3978:4;3975:1;3968:15;4006:4;4003:1;3996:15;3764:257;-1:-1:-1;4048:1:201;4037:13;;3707:349::o;4061:184::-;4131:6;4184:2;4172:9;4163:7;4159:23;4155:32;4152:52;;;4200:1;4197;4190:12;4152:52;-1:-1:-1;4223:16:201;;4061:184;-1:-1:-1;4061:184:201:o;4438:251::-;4508:6;4561:2;4549:9;4540:7;4536:23;4532:32;4529:52;;;4577:1;4574;4567:12;4529:52;4609:9;4603:16;4628:31;4653:5;4628:31;:::i;4694:277::-;4761:6;4814:2;4802:9;4793:7;4789:23;4785:32;4782:52;;;4830:1;4827;4820:12;4782:52;4862:9;4856:16;4915:5;4908:13;4901:21;4894:5;4891:32;4881:60;;4937:1;4934;4927:12;4976:656;5088:4;5117:2;5146;5135:9;5128:21;5178:6;5172:13;5221:6;5216:2;5205:9;5201:18;5194:34;5246:1;5256:140;5270:6;5267:1;5264:13;5256:140;;;5365:14;;;5361:23;;5355:30;5331:17;;;5350:2;5327:26;5320:66;5285:10;;5256:140;;;5414:6;5411:1;5408:13;5405:91;;;5484:1;5479:2;5470:6;5459:9;5455:22;5451:31;5444:42;5405:91;-1:-1:-1;5548:2:201;5536:15;5553:66;5532:88;5517:104;;;;5623:2;5513:113;;4976:656;-1:-1:-1;;;4976:656:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"681000","executionCost":"infinite","totalCost":"infinite"},"external":{"ADDRESSES_PROVIDER()":"infinite","BASE_CURRENCY()":"infinite","BASE_CURRENCY_UNIT()":"infinite","getAssetPrice(address)":"infinite","getAssetsPrices(address[])":"infinite","getFallbackOracle()":"2341","getSourceOfAsset(address)":"2540","setAssetSources(address[],address[])":"infinite","setFallbackOracle(address)":"infinite"},"internal":{"_onlyAssetListingOrPoolAdmins()":"infinite","_setAssetsSources(address[] memory,address[] memory)":"infinite","_setFallbackOracle(address)":"25399"}},"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","BASE_CURRENCY()":"e19f4700","BASE_CURRENCY_UNIT()":"8c89b64f","getAssetPrice(address)":"b3596f07","getAssetsPrices(address[])":"9d23d9f2","getFallbackOracle()":"6210308c","getSourceOfAsset(address)":"92bf2be0","setAssetSources(address[],address[])":"abfd5310","setFallbackOracle(address)":"170aee73"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"sources\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"fallbackOracle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"baseCurrency\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"baseCurrencyUnit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"}],\"name\":\"AssetSourceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"baseCurrency\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"baseCurrencyUnit\",\"type\":\"uint256\"}],\"name\":\"BaseCurrencySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fallbackOracle\",\"type\":\"address\"}],\"name\":\"FallbackOracleUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BASE_CURRENCY\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BASE_CURRENCY_UNIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getAssetPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"}],\"name\":\"getAssetsPrices\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFallbackOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getSourceOfAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"sources\",\"type\":\"address[]\"}],\"name\":\"setAssetSources\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fallbackOracle\",\"type\":\"address\"}],\"name\":\"setFallbackOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"assets\":\"The addresses of the assets\",\"baseCurrency\":\"The base currency used for the price quotes. If USD is used, base currency is 0x0\",\"baseCurrencyUnit\":\"The unit of the base currency\",\"fallbackOracle\":\"The address of the fallback oracle to use if the data of an        aggregator is not consistent\",\"provider\":\"The address of the new PoolAddressesProvider\",\"sources\":\"The address of the source of each asset\"}},\"getAssetPrice(address)\":{\"params\":{\"asset\":\"The address of the asset\"},\"returns\":{\"_0\":\"The price of the asset\"}},\"getAssetsPrices(address[])\":{\"params\":{\"assets\":\"The list of assets addresses\"},\"returns\":{\"_0\":\"The prices of the given assets\"}},\"getFallbackOracle()\":{\"returns\":{\"_0\":\"The address of the fallback oracle\"}},\"getSourceOfAsset(address)\":{\"params\":{\"asset\":\"The address of the asset\"},\"returns\":{\"_0\":\"The address of the source\"}},\"setAssetSources(address[],address[])\":{\"params\":{\"assets\":\"The addresses of the assets\",\"sources\":\"The addresses of the price sources\"}},\"setFallbackOracle(address)\":{\"params\":{\"fallbackOracle\":\"The address of the fallback oracle\"}}},\"stateVariables\":{\"ADDRESSES_PROVIDER\":{\"return\":\"The address of the PoolAddressesProvider contract\",\"returns\":{\"_0\":\"The address of the PoolAddressesProvider contract\"}},\"BASE_CURRENCY\":{\"details\":\"Address 0x0 is reserved for USD as base currency.\",\"return\":\"Returns the base currency address.\",\"returns\":{\"_0\":\"Returns the base currency address.\"}},\"BASE_CURRENCY_UNIT\":{\"details\":\"1 ether for ETH, 1e8 for USD.\",\"return\":\"Returns the base currency unit.\",\"returns\":{\"_0\":\"Returns the base currency unit.\"}}},\"title\":\"AaveOracle\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the PoolAddressesProvider\"},\"BASE_CURRENCY()\":{\"notice\":\"Returns the base currency address\"},\"BASE_CURRENCY_UNIT()\":{\"notice\":\"Returns the base currency unit\"},\"constructor\":{\"notice\":\"Constructor\"},\"getAssetPrice(address)\":{\"notice\":\"Returns the asset price in the base currency\"},\"getAssetsPrices(address[])\":{\"notice\":\"Returns a list of prices from a list of assets addresses\"},\"getFallbackOracle()\":{\"notice\":\"Returns the address of the fallback oracle\"},\"getSourceOfAsset(address)\":{\"notice\":\"Returns the address of the source for an asset address\"},\"setAssetSources(address[],address[])\":{\"notice\":\"Sets or replaces price sources of assets\"},\"setFallbackOracle(address)\":{\"notice\":\"Sets the fallback oracle\"}},\"notice\":\"Contract to get asset prices, manage price sources and update the fallback oracle - Use of Chainlink Aggregators as first source of price - If the returned price by a Chainlink aggregator is <= 0, the call is forwarded to a fallback oracle - Owned by the Aave governance\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/misc/AaveOracle.sol\":\"AaveOracle\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/chainlink/AggregatorInterface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// Chainlink Contracts v0.8\\npragma solidity ^0.8.0;\\n\\ninterface AggregatorInterface {\\n  function latestAnswer() external view returns (int256);\\n\\n  function latestTimestamp() external view returns (uint256);\\n\\n  function latestRound() external view returns (uint256);\\n\\n  function getAnswer(uint256 roundId) external view returns (int256);\\n\\n  function getTimestamp(uint256 roundId) external view returns (uint256);\\n\\n  event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 updatedAt);\\n\\n  event NewRound(uint256 indexed roundId, address indexed startedBy, uint256 startedAt);\\n}\\n\",\"keccak256\":\"0x07df0744d1a393c574d7ee11b75a1690a82f3136a79c76b933724872298bf718\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveOracle.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPriceOracleGetter} from './IPriceOracleGetter.sol';\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IAaveOracle\\n * @author Aave\\n * @notice Defines the basic interface for the Aave Oracle\\n */\\ninterface IAaveOracle is IPriceOracleGetter {\\n  /**\\n   * @dev Emitted after the base currency is set\\n   * @param baseCurrency The base currency of used for price quotes\\n   * @param baseCurrencyUnit The unit of the base currency\\n   */\\n  event BaseCurrencySet(address indexed baseCurrency, uint256 baseCurrencyUnit);\\n\\n  /**\\n   * @dev Emitted after the price source of an asset is updated\\n   * @param asset The address of the asset\\n   * @param source The price source of the asset\\n   */\\n  event AssetSourceUpdated(address indexed asset, address indexed source);\\n\\n  /**\\n   * @dev Emitted after the address of fallback oracle is updated\\n   * @param fallbackOracle The address of the fallback oracle\\n   */\\n  event FallbackOracleUpdated(address indexed fallbackOracle);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Sets or replaces price sources of assets\\n   * @param assets The addresses of the assets\\n   * @param sources The addresses of the price sources\\n   */\\n  function setAssetSources(address[] calldata assets, address[] calldata sources) external;\\n\\n  /**\\n   * @notice Sets the fallback oracle\\n   * @param fallbackOracle The address of the fallback oracle\\n   */\\n  function setFallbackOracle(address fallbackOracle) external;\\n\\n  /**\\n   * @notice Returns a list of prices from a list of assets addresses\\n   * @param assets The list of assets addresses\\n   * @return The prices of the given assets\\n   */\\n  function getAssetsPrices(address[] calldata assets) external view returns (uint256[] memory);\\n\\n  /**\\n   * @notice Returns the address of the source for an asset address\\n   * @param asset The address of the asset\\n   * @return The address of the source\\n   */\\n  function getSourceOfAsset(address asset) external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the fallback oracle\\n   * @return The address of the fallback oracle\\n   */\\n  function getFallbackOracle() external view returns (address);\\n}\\n\",\"keccak256\":\"0x15942c0df4ce9f50a9cf172c9ed0efa0abbf841cd8560fbd0da3d6a7dea69a96\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/misc/AaveOracle.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {AggregatorInterface} from '../dependencies/chainlink/AggregatorInterface.sol';\\nimport {Errors} from '../protocol/libraries/helpers/Errors.sol';\\nimport {IACLManager} from '../interfaces/IACLManager.sol';\\nimport {IPoolAddressesProvider} from '../interfaces/IPoolAddressesProvider.sol';\\nimport {IPriceOracleGetter} from '../interfaces/IPriceOracleGetter.sol';\\nimport {IAaveOracle} from '../interfaces/IAaveOracle.sol';\\n\\n/**\\n * @title AaveOracle\\n * @author Aave\\n * @notice Contract to get asset prices, manage price sources and update the fallback oracle\\n * - Use of Chainlink Aggregators as first source of price\\n * - If the returned price by a Chainlink aggregator is <= 0, the call is forwarded to a fallback oracle\\n * - Owned by the Aave governance\\n */\\ncontract AaveOracle is IAaveOracle {\\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\\n\\n  // Map of asset price sources (asset => priceSource)\\n  mapping(address => AggregatorInterface) private assetsSources;\\n\\n  IPriceOracleGetter private _fallbackOracle;\\n  address public immutable override BASE_CURRENCY;\\n  uint256 public immutable override BASE_CURRENCY_UNIT;\\n\\n  /**\\n   * @dev Only asset listing or pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyAssetListingOrPoolAdmins() {\\n    _onlyAssetListingOrPoolAdmins();\\n    _;\\n  }\\n\\n  /**\\n   * @notice Constructor\\n   * @param provider The address of the new PoolAddressesProvider\\n   * @param assets The addresses of the assets\\n   * @param sources The address of the source of each asset\\n   * @param fallbackOracle The address of the fallback oracle to use if the data of an\\n   *        aggregator is not consistent\\n   * @param baseCurrency The base currency used for the price quotes. If USD is used, base currency is 0x0\\n   * @param baseCurrencyUnit The unit of the base currency\\n   */\\n  constructor(\\n    IPoolAddressesProvider provider,\\n    address[] memory assets,\\n    address[] memory sources,\\n    address fallbackOracle,\\n    address baseCurrency,\\n    uint256 baseCurrencyUnit\\n  ) {\\n    ADDRESSES_PROVIDER = provider;\\n    _setFallbackOracle(fallbackOracle);\\n    _setAssetsSources(assets, sources);\\n    BASE_CURRENCY = baseCurrency;\\n    BASE_CURRENCY_UNIT = baseCurrencyUnit;\\n    emit BaseCurrencySet(baseCurrency, baseCurrencyUnit);\\n  }\\n\\n  /// @inheritdoc IAaveOracle\\n  function setAssetSources(\\n    address[] calldata assets,\\n    address[] calldata sources\\n  ) external override onlyAssetListingOrPoolAdmins {\\n    _setAssetsSources(assets, sources);\\n  }\\n\\n  /// @inheritdoc IAaveOracle\\n  function setFallbackOracle(\\n    address fallbackOracle\\n  ) external override onlyAssetListingOrPoolAdmins {\\n    _setFallbackOracle(fallbackOracle);\\n  }\\n\\n  /**\\n   * @notice Internal function to set the sources for each asset\\n   * @param assets The addresses of the assets\\n   * @param sources The address of the source of each asset\\n   */\\n  function _setAssetsSources(address[] memory assets, address[] memory sources) internal {\\n    require(assets.length == sources.length, Errors.INCONSISTENT_PARAMS_LENGTH);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      assetsSources[assets[i]] = AggregatorInterface(sources[i]);\\n      emit AssetSourceUpdated(assets[i], sources[i]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Internal function to set the fallback oracle\\n   * @param fallbackOracle The address of the fallback oracle\\n   */\\n  function _setFallbackOracle(address fallbackOracle) internal {\\n    _fallbackOracle = IPriceOracleGetter(fallbackOracle);\\n    emit FallbackOracleUpdated(fallbackOracle);\\n  }\\n\\n  /// @inheritdoc IPriceOracleGetter\\n  function getAssetPrice(address asset) public view override returns (uint256) {\\n    AggregatorInterface source = assetsSources[asset];\\n\\n    if (asset == BASE_CURRENCY) {\\n      return BASE_CURRENCY_UNIT;\\n    } else if (address(source) == address(0)) {\\n      return _fallbackOracle.getAssetPrice(asset);\\n    } else {\\n      int256 price = source.latestAnswer();\\n      if (price > 0) {\\n        return uint256(price);\\n      } else {\\n        return _fallbackOracle.getAssetPrice(asset);\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IAaveOracle\\n  function getAssetsPrices(\\n    address[] calldata assets\\n  ) external view override returns (uint256[] memory) {\\n    uint256[] memory prices = new uint256[](assets.length);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      prices[i] = getAssetPrice(assets[i]);\\n    }\\n    return prices;\\n  }\\n\\n  /// @inheritdoc IAaveOracle\\n  function getSourceOfAsset(address asset) external view override returns (address) {\\n    return address(assetsSources[asset]);\\n  }\\n\\n  /// @inheritdoc IAaveOracle\\n  function getFallbackOracle() external view returns (address) {\\n    return address(_fallbackOracle);\\n  }\\n\\n  function _onlyAssetListingOrPoolAdmins() internal view {\\n    IACLManager aclManager = IACLManager(ADDRESSES_PROVIDER.getACLManager());\\n    require(\\n      aclManager.isAssetListingAdmin(msg.sender) || aclManager.isPoolAdmin(msg.sender),\\n      Errors.CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0xf7c52e2169679c7da4016d15f5cf30c03c896f58f1ce7104c69b485cceac57af\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":6180,"contract":"@aave/core-v3/contracts/misc/AaveOracle.sol:AaveOracle","label":"assetsSources","offset":0,"slot":"0","type":"t_mapping(t_address,t_contract(AggregatorInterface)47)"},{"astId":6183,"contract":"@aave/core-v3/contracts/misc/AaveOracle.sol:AaveOracle","label":"_fallbackOracle","offset":0,"slot":"1","type":"t_contract(IPriceOracleGetter)5835"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_contract(AggregatorInterface)47":{"encoding":"inplace","label":"contract AggregatorInterface","numberOfBytes":"20"},"t_contract(IPriceOracleGetter)5835":{"encoding":"inplace","label":"contract IPriceOracleGetter","numberOfBytes":"20"},"t_mapping(t_address,t_contract(AggregatorInterface)47)":{"encoding":"mapping","key":"t_address","label":"mapping(address => contract AggregatorInterface)","numberOfBytes":"32","value":"t_contract(AggregatorInterface)47"}}},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the PoolAddressesProvider"},"BASE_CURRENCY()":{"notice":"Returns the base currency address"},"BASE_CURRENCY_UNIT()":{"notice":"Returns the base currency unit"},"constructor":{"notice":"Constructor"},"getAssetPrice(address)":{"notice":"Returns the asset price in the base currency"},"getAssetsPrices(address[])":{"notice":"Returns a list of prices from a list of assets addresses"},"getFallbackOracle()":{"notice":"Returns the address of the fallback oracle"},"getSourceOfAsset(address)":{"notice":"Returns the address of the source for an asset address"},"setAssetSources(address[],address[])":{"notice":"Sets or replaces price sources of assets"},"setFallbackOracle(address)":{"notice":"Sets the fallback oracle"}},"notice":"Contract to get asset prices, manage price sources and update the fallback oracle - Use of Chainlink Aggregators as first source of price - If the returned price by a Chainlink aggregator is <= 0, the call is forwarded to a fallback oracle - Owned by the Aave governance","version":1}}},"@aave/core-v3/contracts/misc/AaveProtocolDataProvider.sol":{"AaveProtocolDataProvider":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"addressesProvider","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getATokenTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllATokens","outputs":[{"components":[{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"tokenAddress","type":"address"}],"internalType":"struct IPoolDataProvider.TokenData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllReservesTokens","outputs":[{"components":[{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"tokenAddress","type":"address"}],"internalType":"struct IPoolDataProvider.TokenData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getDebtCeiling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDebtCeilingDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getFlashLoanEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getInterestRateStrategyAddress","outputs":[{"internalType":"address","name":"irStrategyAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getLiquidationProtocolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getPaused","outputs":[{"internalType":"bool","name":"isPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveCaps","outputs":[{"internalType":"uint256","name":"borrowCap","type":"uint256"},{"internalType":"uint256","name":"supplyCap","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveConfigurationData","outputs":[{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"uint256","name":"ltv","type":"uint256"},{"internalType":"uint256","name":"liquidationThreshold","type":"uint256"},{"internalType":"uint256","name":"liquidationBonus","type":"uint256"},{"internalType":"uint256","name":"reserveFactor","type":"uint256"},{"internalType":"bool","name":"usageAsCollateralEnabled","type":"bool"},{"internalType":"bool","name":"borrowingEnabled","type":"bool"},{"internalType":"bool","name":"stableBorrowRateEnabled","type":"bool"},{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"bool","name":"isFrozen","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveData","outputs":[{"internalType":"uint256","name":"unbacked","type":"uint256"},{"internalType":"uint256","name":"accruedToTreasuryScaled","type":"uint256"},{"internalType":"uint256","name":"totalAToken","type":"uint256"},{"internalType":"uint256","name":"totalStableDebt","type":"uint256"},{"internalType":"uint256","name":"totalVariableDebt","type":"uint256"},{"internalType":"uint256","name":"liquidityRate","type":"uint256"},{"internalType":"uint256","name":"variableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"stableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"averageStableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"liquidityIndex","type":"uint256"},{"internalType":"uint256","name":"variableBorrowIndex","type":"uint256"},{"internalType":"uint40","name":"lastUpdateTimestamp","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveEModeCategory","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveTokensAddresses","outputs":[{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtTokenAddress","type":"address"},{"internalType":"address","name":"variableDebtTokenAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getSiloedBorrowing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getTotalDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getUnbackedMintCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getUserReserveData","outputs":[{"internalType":"uint256","name":"currentATokenBalance","type":"uint256"},{"internalType":"uint256","name":"currentStableDebt","type":"uint256"},{"internalType":"uint256","name":"currentVariableDebt","type":"uint256"},{"internalType":"uint256","name":"principalStableDebt","type":"uint256"},{"internalType":"uint256","name":"scaledVariableDebt","type":"uint256"},{"internalType":"uint256","name":"stableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"liquidityRate","type":"uint256"},{"internalType":"uint40","name":"stableRateLastUpdated","type":"uint40"},{"internalType":"bool","name":"usageAsCollateralEnabled","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"constructor":{"params":{"addressesProvider":"The address of the PoolAddressesProvider contract"}},"getATokenTotalSupply(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The total supply of the aToken"}},"getAllATokens()":{"returns":{"_0":"The list of ATokens, pairs of symbols and addresses"}},"getAllReservesTokens()":{"details":"Handling MKR and ETH in a different way since they do not have standard `symbol` functions.","returns":{"_0":"The list of reserves, pairs of symbols and addresses"}},"getDebtCeiling(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The debt ceiling of the reserve"}},"getDebtCeilingDecimals()":{"returns":{"_0":"The debt ceiling decimals"}},"getFlashLoanEnabled(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"True if FlashLoans are enabled, false otherwise"}},"getInterestRateStrategyAddress(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"irStrategyAddress":"The address of the Interest Rate strategy"}},"getLiquidationProtocolFee(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The protocol fee on liquidation"}},"getPaused(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"isPaused":"True if the pool is paused, false otherwise"}},"getReserveCaps(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"borrowCap":"The borrow cap of the reserve","supplyCap":"The supply cap of the reserve"}},"getReserveConfigurationData(address)":{"details":"Not returning borrow and supply caps for compatibility, nor pause flag","params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"borrowingEnabled":"True if borrowing is enabled, false otherwise","decimals":"The number of decimals of the reserve","isActive":"True if it is active, false otherwise","isFrozen":"True if it is frozen, false otherwise","liquidationBonus":"The liquidationBonus of the reserve","liquidationThreshold":"The liquidationThreshold of the reserve","ltv":"The ltv of the reserve","reserveFactor":"The reserveFactor of the reserve","stableBorrowRateEnabled":"True if stable rate borrowing is enabled, false otherwise","usageAsCollateralEnabled":"True if the usage as collateral is enabled, false otherwise"}},"getReserveData(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"accruedToTreasuryScaled":"The scaled amount of tokens accrued to treasury that is to be minted","averageStableBorrowRate":"The average stable borrow rate of the reserve","lastUpdateTimestamp":"The timestamp of the last update of the reserve","liquidityIndex":"The liquidity index of the reserve","liquidityRate":"The liquidity rate of the reserve","stableBorrowRate":"The stable borrow rate of the reserve","totalAToken":"The total supply of the aToken","totalStableDebt":"The total stable debt of the reserve","totalVariableDebt":"The total variable debt of the reserve","unbacked":"The amount of unbacked tokens","variableBorrowIndex":"The variable borrow index of the reserve","variableBorrowRate":"The variable borrow rate of the reserve"}},"getReserveEModeCategory(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The eMode id of the reserve"}},"getReserveTokensAddresses(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"aTokenAddress":"The AToken address of the reserve","stableDebtTokenAddress":"The StableDebtToken address of the reserve","variableDebtTokenAddress":"The VariableDebtToken address of the reserve"}},"getSiloedBorrowing(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"True if the asset is siloed for borrowing"}},"getTotalDebt(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The total debt for asset"}},"getUnbackedMintCap(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The unbacked mint cap of the reserve"}},"getUserReserveData(address,address)":{"params":{"asset":"The address of the underlying asset of the reserve","user":"The address of the user"},"returns":{"currentATokenBalance":"The current AToken balance of the user","currentStableDebt":"The current stable debt of the user","currentVariableDebt":"The current variable debt of the user","liquidityRate":"The liquidity rate of the reserve","principalStableDebt":"The principal stable debt of the user","scaledVariableDebt":"The scaled variable debt of the user","stableBorrowRate":"The stable borrow rate of the user","stableRateLastUpdated":"The timestamp of the last update of the user stable rate","usageAsCollateralEnabled":"True if the user is using the asset as collateral, false         otherwise"}}},"stateVariables":{"ADDRESSES_PROVIDER":{"return":"The address for the PoolAddressesProvider contract","returns":{"_0":"The address for the PoolAddressesProvider contract"}}},"title":"AaveProtocolDataProvider","version":1},"evm":{"bytecode":{"functionDebugData":{"@_6577":{"entryPoint":null,"id":6577,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory":{"entryPoint":70,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:337:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"126:209:201","statements":[{"body":{"nodeType":"YulBlock","src":"172:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"181:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"184:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"174:6:201"},"nodeType":"YulFunctionCall","src":"174:12:201"},"nodeType":"YulExpressionStatement","src":"174:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"147:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"156:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"143:3:201"},"nodeType":"YulFunctionCall","src":"143:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"168:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"139:3:201"},"nodeType":"YulFunctionCall","src":"139:32:201"},"nodeType":"YulIf","src":"136:52:201"},{"nodeType":"YulVariableDeclaration","src":"197:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"216:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:201"},"nodeType":"YulFunctionCall","src":"210:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"201:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"289:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"298:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"301:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"291:6:201"},"nodeType":"YulFunctionCall","src":"291:12:201"},"nodeType":"YulExpressionStatement","src":"291:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"248:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"259:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"274:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"279:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"270:3:201"},"nodeType":"YulFunctionCall","src":"270:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"283:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"266:3:201"},"nodeType":"YulFunctionCall","src":"266:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"255:3:201"},"nodeType":"YulFunctionCall","src":"255:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"245:2:201"},"nodeType":"YulFunctionCall","src":"245:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"238:6:201"},"nodeType":"YulFunctionCall","src":"238:50:201"},"nodeType":"YulIf","src":"235:70:201"},{"nodeType":"YulAssignment","src":"314:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"324:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"314:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"92:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"103:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"115:6:201","type":""}],"src":"14:321:201"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60a06040523480156200001157600080fd5b506040516200311338038062003113833981016040819052620000349162000046565b6001600160a01b031660805262000078565b6000602082840312156200005957600080fd5b81516001600160a01b03811681146200007157600080fd5b9392505050565b608051613001620001126000396000818161015b015281816104580152818161059b015281816106c101528181610c70015281816110510152818161118b015281816112c801528181611463015281816115aa015281816117c30152818161195e01528181611a9101528181611bc40152818161203a015281816121b3015281816122f801528181612433015261277901526130016000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806351460e25116100cd578063b55d990411610081578063d7ed3ef411610066578063d7ed3ef414610425578063f561ae4114610438578063fcf40a621461044057600080fd5b8063b55d9904146103b8578063d2493b6c146103db57600080fd5b806369b169e1116100b257806369b169e1146103895780637ba1ae3614610390578063b316ff89146103a357600080fd5b806351460e25146103635780636744362a1461037657600080fd5b80633c798109116101245780633e150141116101095780633e150141146102c157806346fbe558146103285780634d44ac4f1461035057600080fd5b80633c7981091461029b5780633cb8a622146102ae57600080fd5b80630542975c14610156578063163a0f20146101a757806328dd2d01146101c857806335ea6a7514610228575b600080fd5b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101ba6101b536600461295a565b610453565b60405190815260200161019e565b6101db6101d6366004612977565b61058a565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015264ffffffffff1660e083015215156101008201526101200161019e565b61023b61023636600461295a565b610c5a565b604080519c8d5260208d019b909b52998b019890985260608a0196909652608089019490945260a088019290925260c087015260e086015261010085015261012084015261014083015264ffffffffff166101608201526101800161019e565b6101ba6102a936600461295a565b61104a565b6101ba6102bc36600461295a565b611184565b6102d46102cf36600461295a565b6112b5565b604080519a8b5260208b01999099529789019690965260608801949094526080870192909252151560a0860152151560c0850152151560e0840152151561010083015215156101208201526101400161019e565b61033b61033636600461295a565b61145b565b6040805192835260208301919091520161019e565b6101ba61035e36600461295a565b6115a5565b6101ba61037136600461295a565b6117be565b61017d61038436600461295a565b611959565b60026101ba565b6101ba61039e36600461295a565b611a8a565b6103ab611bbe565b60405161019e9190612a2a565b6103cb6103c636600461295a565b612033565b604051901515815260200161019e565b6103ee6103e936600461295a565b6121ab565b6040805173ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015292169181019190915260600161019e565b6103cb61043336600461295a565b6122f3565b6103ab61242d565b6103cb61044e36600461295a565b612772565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e59190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa158015610553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105779190612beb565b805190915060a81c60ff165b9392505050565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610604573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106289190612ae4565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e8116600483015291909116906335ea6a75906024016101e060405180830381865afa158015610697573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106bb9190612c4e565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561072a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074e9190612ae4565b6040517f4417a58300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529190911690634417a58390602401602060405180830381865afa1580156107bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e09190612beb565b6101008301516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f811660048301529293509116906370a0823190602401602060405180830381865afa158015610855573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108799190612d71565b6101408301516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f81166004830152929d509116906370a0823190602401602060405180830381865afa1580156108ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109129190612d71565b6101208301516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f81166004830152929b509116906370a0823190602401602060405180830381865afa158015610987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ab9190612d71565b6101208301516040517fc634dfaa00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f81166004830152929c5091169063c634dfaa90602401602060405180830381865afa158015610a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a449190612d71565b6101408301516040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f81166004830152929a50911690631da24f3e90602401602060405180830381865afa158015610ab9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610add9190612d71565b965081604001516fffffffffffffffffffffffffffffffff16945081610120015173ffffffffffffffffffffffffffffffffffffffff1663e78c9b3b8d6040518263ffffffff1660e01b8152600401610b52919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015610b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b939190612d71565b6101208301516040517f79ce6b8c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f811660048301529298509116906379ce6b8c90602401602060405180830381865afa158015610c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2c9190612d8a565b9350610c498260e0015161ffff16826128a890919063ffffffff16565b925050509295985092959850929598565b60008060008060008060008060008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfd9190612ae4565b73ffffffffffffffffffffffffffffffffffffffff166335ea6a758f6040518263ffffffff1660e01b8152600401610d51919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6101e060405180830381865afa158015610d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d939190612c4e565b9050806101a0015181610180015182610100015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e159190612d71565b83610120015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e899190612d71565b84610140015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efd9190612d71565b856040015186608001518760a0015188610120015173ffffffffffffffffffffffffffffffffffffffff166390f6fcf26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f809190612d71565b89602001518a606001518b60c001518b6fffffffffffffffffffffffffffffffff169b508a6fffffffffffffffffffffffffffffffff169a50866fffffffffffffffffffffffffffffffff169650856fffffffffffffffffffffffffffffffff169550846fffffffffffffffffffffffffffffffff169450826fffffffffffffffffffffffffffffffff169250816fffffffffffffffffffffffffffffffff1691509c509c509c509c509c509c509c509c509c509c509c509c505091939597999b5091939597999b565b600061117e7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa15801561114c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111709190612beb565b5160d41c64ffffffffff1690565b92915050565b600061117e7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112189190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa158015611286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112aa9190612beb565b5160981c61ffff1690565b60008060008060008060008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611331573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113559190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e81166004830152919091169063c44b11f790602401602060405180830381865afa1580156113c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e79190612beb565b5160ff603082901c169d61ffff8083169e50601083901c81169d50602083901c81169c50604083901c169a508c151599506704000000000000008216151598506708000000000000008216151597506701000000000000008216151596506702000000000000009091161515945092505050565b60008061159b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f09190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919091169063c44b11f790602401602060405180830381865afa15801561155e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115829190612beb565b51640fffffffff605082901c81169260749290921c1690565b9094909350915050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611613573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116379190612ae4565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291909116906335ea6a75906024016101e060405180830381865afa1580156116a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ca9190612c4e565b905080610140015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561171c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117409190612d71565b81610120015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611790573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b49190612d71565b6105839190612dd4565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561182c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118509190612ae4565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291909116906335ea6a75906024016101e060405180830381865afa1580156118bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e39190612c4e565b905080610100015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611935573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105839190612d71565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb9190612ae4565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291909116906335ea6a75906024016101e060405180830381865afa158015611a5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7e9190612c4e565b61016001519392505050565b600061117e7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611afa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1e9190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb09190612beb565b5160b01c640fffffffff1690565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c519190612ae4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611ca0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611ce69190810190612dec565b90506000815167ffffffffffffffff811115611d0457611d04612b01565b604051908082528060200260200182016040528015611d4a57816020015b604080518082019091526060815260006020820152815260200190600190039081611d225790505b50905060005b825181101561202b57739f8f72aa9304c8b593d555f12ef6589cc3a579a273ffffffffffffffffffffffffffffffffffffffff16838281518110611d9657611d96612e9e565b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611e555760405180604001604052806040518060400160405280600381526020017f4d4b5200000000000000000000000000000000000000000000000000000000008152508152602001848381518110611e1257611e12612e9e565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16815250828281518110611e4557611e45612e9e565b6020026020010181905250612019565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff16838281518110611e9257611e92612e9e565b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611f0e5760405180604001604052806040518060400160405280600381526020017f45544800000000000000000000000000000000000000000000000000000000008152508152602001848381518110611e1257611e12612e9e565b6040518060400160405280848381518110611f2b57611f2b612e9e565b602002602001015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611f7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fc39190810190612ecd565b8152602001848381518110611fda57611fda612e9e565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1681525082828151811061200d5761200d612e9e565b60200260200101819052505b8061202381612f7f565b915050611d50565b509392505050565b60006121a17f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c79190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa158015612135573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121599190612beb565b51670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b9695505050505050565b6000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122409190612ae4565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015291909116906335ea6a75906024016101e060405180830381865afa1580156122af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d39190612c4e565b610100810151610120820151610140909201519097919650945092505050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612361573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123859190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa1580156123f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124179190612beb565b9050610583815167800000000000000016151590565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561249c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c09190612ae4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561250f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526125559190810190612dec565b90506000815167ffffffffffffffff81111561257357612573612b01565b6040519080825280602002602001820160405280156125b957816020015b6040805180820190915260608152600060208201528152602001906001900390816125915790505b50905060005b825181101561202b5760008473ffffffffffffffffffffffffffffffffffffffff166335ea6a758584815181106125f8576125f8612e9e565b60200260200101516040518263ffffffff1660e01b8152600401612638919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6101e060405180830381865afa158015612656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267a9190612c4e565b9050604051806040016040528082610100015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156126d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261271d9190810190612ecd565b815260200182610100015173ffffffffffffffffffffffffffffffffffffffff1681525083838151811061275357612753612e9e565b602002602001018190525050808061276a90612f7f565b9150506125bf565b600061117e7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128069190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa158015612874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128989190612beb565b5167400000000000000016151590565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291a9190612fb8565b60405180910390fd5b50509051600191821b82011c16151590565b73ffffffffffffffffffffffffffffffffffffffff8116811461295757600080fd5b50565b60006020828403121561296c57600080fd5b813561058381612935565b6000806040838503121561298a57600080fd5b823561299581612935565b915060208301356129a581612935565b809150509250929050565b60005b838110156129cb5781810151838201526020016129b3565b838111156129da576000848401525b50505050565b600081518084526129f88160208601602086016129b0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015612ac6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc089840301855281518051878552612a93888601826129e0565b9189015173ffffffffffffffffffffffffffffffffffffffff169489019490945294870194925090860190600101612a51565b509098975050505050505050565b8051612adf81612935565b919050565b600060208284031215612af657600080fd5b815161058381612935565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff81118282101715612b5457612b54612b01565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612ba157612ba1612b01565b604052919050565b600060208284031215612bbb57600080fd5b6040516020810181811067ffffffffffffffff82111715612bde57612bde612b01565b6040529151825250919050565b600060208284031215612bfd57600080fd5b6105838383612ba9565b80516fffffffffffffffffffffffffffffffff81168114612adf57600080fd5b805164ffffffffff81168114612adf57600080fd5b805161ffff81168114612adf57600080fd5b60006101e08284031215612c6157600080fd5b612c69612b30565b612c738484612ba9565b8152612c8160208401612c07565b6020820152612c9260408401612c07565b6040820152612ca360608401612c07565b6060820152612cb460808401612c07565b6080820152612cc560a08401612c07565b60a0820152612cd660c08401612c27565b60c0820152612ce760e08401612c3c565b60e0820152610100612cfa818501612ad4565b90820152610120612d0c848201612ad4565b90820152610140612d1e848201612ad4565b90820152610160612d30848201612ad4565b90820152610180612d42848201612c07565b908201526101a0612d54848201612c07565b908201526101c0612d66848201612c07565b908201529392505050565b600060208284031215612d8357600080fd5b5051919050565b600060208284031215612d9c57600080fd5b61058382612c27565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612de757612de7612da5565b500190565b60006020808385031215612dff57600080fd5b825167ffffffffffffffff80821115612e1757600080fd5b818501915085601f830112612e2b57600080fd5b815181811115612e3d57612e3d612b01565b8060051b9150612e4e848301612b5a565b8181529183018401918481019088841115612e6857600080fd5b938501935b83851015612e925784519250612e8283612935565b8282529385019390850190612e6d565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215612edf57600080fd5b815167ffffffffffffffff80821115612ef757600080fd5b818401915084601f830112612f0b57600080fd5b815181811115612f1d57612f1d612b01565b612f4e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612b5a565b9150808252856020828501011115612f6557600080fd5b612f768160208401602086016129b0565b50949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612fb157612fb1612da5565b5060010190565b60208152600061058360208301846129e056fea2646970667358221220ea702229777ba1ac8c4c076bf412424b038d2c783073101cb6591fc8a5b42d9c64736f6c634300080a0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x3113 CODESIZE SUB DUP1 PUSH3 0x3113 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x46 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH3 0x78 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x71 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x3001 PUSH3 0x112 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x15B ADD MSTORE DUP2 DUP2 PUSH2 0x458 ADD MSTORE DUP2 DUP2 PUSH2 0x59B ADD MSTORE DUP2 DUP2 PUSH2 0x6C1 ADD MSTORE DUP2 DUP2 PUSH2 0xC70 ADD MSTORE DUP2 DUP2 PUSH2 0x1051 ADD MSTORE DUP2 DUP2 PUSH2 0x118B ADD MSTORE DUP2 DUP2 PUSH2 0x12C8 ADD MSTORE DUP2 DUP2 PUSH2 0x1463 ADD MSTORE DUP2 DUP2 PUSH2 0x15AA ADD MSTORE DUP2 DUP2 PUSH2 0x17C3 ADD MSTORE DUP2 DUP2 PUSH2 0x195E ADD MSTORE DUP2 DUP2 PUSH2 0x1A91 ADD MSTORE DUP2 DUP2 PUSH2 0x1BC4 ADD MSTORE DUP2 DUP2 PUSH2 0x203A ADD MSTORE DUP2 DUP2 PUSH2 0x21B3 ADD MSTORE DUP2 DUP2 PUSH2 0x22F8 ADD MSTORE DUP2 DUP2 PUSH2 0x2433 ADD MSTORE PUSH2 0x2779 ADD MSTORE PUSH2 0x3001 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 0x151 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x51460E25 GT PUSH2 0xCD JUMPI DUP1 PUSH4 0xB55D9904 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xD7ED3EF4 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xD7ED3EF4 EQ PUSH2 0x425 JUMPI DUP1 PUSH4 0xF561AE41 EQ PUSH2 0x438 JUMPI DUP1 PUSH4 0xFCF40A62 EQ PUSH2 0x440 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB55D9904 EQ PUSH2 0x3B8 JUMPI DUP1 PUSH4 0xD2493B6C EQ PUSH2 0x3DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x69B169E1 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x69B169E1 EQ PUSH2 0x389 JUMPI DUP1 PUSH4 0x7BA1AE36 EQ PUSH2 0x390 JUMPI DUP1 PUSH4 0xB316FF89 EQ PUSH2 0x3A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x51460E25 EQ PUSH2 0x363 JUMPI DUP1 PUSH4 0x6744362A EQ PUSH2 0x376 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3C798109 GT PUSH2 0x124 JUMPI DUP1 PUSH4 0x3E150141 GT PUSH2 0x109 JUMPI DUP1 PUSH4 0x3E150141 EQ PUSH2 0x2C1 JUMPI DUP1 PUSH4 0x46FBE558 EQ PUSH2 0x328 JUMPI DUP1 PUSH4 0x4D44AC4F EQ PUSH2 0x350 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3C798109 EQ PUSH2 0x29B JUMPI DUP1 PUSH4 0x3CB8A622 EQ PUSH2 0x2AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0x163A0F20 EQ PUSH2 0x1A7 JUMPI DUP1 PUSH4 0x28DD2D01 EQ PUSH2 0x1C8 JUMPI DUP1 PUSH4 0x35EA6A75 EQ PUSH2 0x228 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x17D PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1BA PUSH2 0x1B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x453 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x1DB PUSH2 0x1D6 CALLDATASIZE PUSH1 0x4 PUSH2 0x2977 JUMP JUMPDEST PUSH2 0x58A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP10 DUP11 MSTORE PUSH1 0x20 DUP11 ADD SWAP9 SWAP1 SWAP9 MSTORE SWAP7 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x60 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x80 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xC0 DUP5 ADD MSTORE PUSH5 0xFFFFFFFFFF AND PUSH1 0xE0 DUP4 ADD MSTORE ISZERO ISZERO PUSH2 0x100 DUP3 ADD MSTORE PUSH2 0x120 ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x23B PUSH2 0x236 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0xC5A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP13 DUP14 MSTORE PUSH1 0x20 DUP14 ADD SWAP12 SWAP1 SWAP12 MSTORE SWAP10 DUP12 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH1 0x60 DUP11 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x80 DUP10 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0xA0 DUP9 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC0 DUP8 ADD MSTORE PUSH1 0xE0 DUP7 ADD MSTORE PUSH2 0x100 DUP6 ADD MSTORE PUSH2 0x120 DUP5 ADD MSTORE PUSH2 0x140 DUP4 ADD MSTORE PUSH5 0xFFFFFFFFFF AND PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x180 ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x1BA PUSH2 0x2A9 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x104A JUMP JUMPDEST PUSH2 0x1BA PUSH2 0x2BC CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x1184 JUMP JUMPDEST PUSH2 0x2D4 PUSH2 0x2CF CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x12B5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP11 DUP12 MSTORE PUSH1 0x20 DUP12 ADD SWAP10 SWAP1 SWAP10 MSTORE SWAP8 DUP10 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x60 DUP9 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x80 DUP8 ADD SWAP3 SWAP1 SWAP3 MSTORE ISZERO ISZERO PUSH1 0xA0 DUP7 ADD MSTORE ISZERO ISZERO PUSH1 0xC0 DUP6 ADD MSTORE ISZERO ISZERO PUSH1 0xE0 DUP5 ADD MSTORE ISZERO ISZERO PUSH2 0x100 DUP4 ADD MSTORE ISZERO ISZERO PUSH2 0x120 DUP3 ADD MSTORE PUSH2 0x140 ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x33B PUSH2 0x336 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x145B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x1BA PUSH2 0x35E CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x15A5 JUMP JUMPDEST PUSH2 0x1BA PUSH2 0x371 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x17BE JUMP JUMPDEST PUSH2 0x17D PUSH2 0x384 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x1959 JUMP JUMPDEST PUSH1 0x2 PUSH2 0x1BA JUMP JUMPDEST PUSH2 0x1BA PUSH2 0x39E CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x1A8A JUMP JUMPDEST PUSH2 0x3AB PUSH2 0x1BBE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x19E SWAP2 SWAP1 PUSH2 0x2A2A JUMP JUMPDEST PUSH2 0x3CB PUSH2 0x3C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x2033 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x3EE PUSH2 0x3E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x21AB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 DUP5 AND PUSH1 0x20 DUP5 ADD MSTORE SWAP3 AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x3CB PUSH2 0x433 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x22F3 JUMP JUMPDEST PUSH2 0x3AB PUSH2 0x242D JUMP JUMPDEST PUSH2 0x3CB PUSH2 0x44E CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x2772 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4E5 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x553 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x577 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0xA8 SHR PUSH1 0xFF AND JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x604 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x628 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x697 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6BB SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x72A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x74E SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4417A58300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x4417A583 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7E0 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP4 POP SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x855 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x879 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP14 POP SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8EE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x912 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP12 POP SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x987 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9AB SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xC634DFAA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP13 POP SWAP2 AND SWAP1 PUSH4 0xC634DFAA SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA20 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA44 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP11 POP SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAB9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xADD SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST SWAP7 POP DUP2 PUSH1 0x40 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 POP DUP2 PUSH2 0x120 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xE78C9B3B DUP14 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xB52 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB6F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB93 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x79CE6B8C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP9 POP SWAP2 AND SWAP1 PUSH4 0x79CE6B8C SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC08 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC2C SWAP2 SWAP1 PUSH2 0x2D8A JUMP JUMPDEST SWAP4 POP PUSH2 0xC49 DUP3 PUSH1 0xE0 ADD MLOAD PUSH2 0xFFFF AND DUP3 PUSH2 0x28A8 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP3 POP POP POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCD9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCFD SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x35EA6A75 DUP16 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD51 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD6F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD93 SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1A0 ADD MLOAD DUP2 PUSH2 0x180 ADD MLOAD DUP3 PUSH2 0x100 ADD MLOAD 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 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDF1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE15 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST DUP4 PUSH2 0x120 ADD MLOAD 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 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE65 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE89 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST DUP5 PUSH2 0x140 ADD MLOAD 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 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xED9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEFD SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST DUP6 PUSH1 0x40 ADD MLOAD DUP7 PUSH1 0x80 ADD MLOAD DUP8 PUSH1 0xA0 ADD MLOAD DUP9 PUSH2 0x120 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x90F6FCF2 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF5C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF80 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST DUP10 PUSH1 0x20 ADD MLOAD DUP11 PUSH1 0x60 ADD MLOAD DUP12 PUSH1 0xC0 ADD MLOAD DUP12 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP12 POP DUP11 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP11 POP DUP7 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP7 POP DUP6 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 POP DUP5 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 POP DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 POP DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP POP SWAP2 SWAP4 SWAP6 SWAP8 SWAP10 SWAP12 POP SWAP2 SWAP4 SWAP6 SWAP8 SWAP10 SWAP12 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x117E PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10BA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10DE SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x114C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1170 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x117E PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11F4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1218 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1286 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12AA SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH1 0x98 SHR PUSH2 0xFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1331 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1355 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13C3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13E7 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH1 0xFF PUSH1 0x30 DUP3 SWAP1 SHR AND SWAP14 PUSH2 0xFFFF DUP1 DUP4 AND SWAP15 POP PUSH1 0x10 DUP4 SWAP1 SHR DUP2 AND SWAP14 POP PUSH1 0x20 DUP4 SWAP1 SHR DUP2 AND SWAP13 POP PUSH1 0x40 DUP4 SWAP1 SHR AND SWAP11 POP DUP13 ISZERO ISZERO SWAP10 POP PUSH8 0x400000000000000 DUP3 AND ISZERO ISZERO SWAP9 POP PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP8 POP PUSH8 0x100000000000000 DUP3 AND ISZERO ISZERO SWAP7 POP PUSH8 0x200000000000000 SWAP1 SWAP2 AND ISZERO ISZERO SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x159B PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14F0 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x155E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1582 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH5 0xFFFFFFFFF PUSH1 0x50 DUP3 SWAP1 SHR DUP2 AND SWAP3 PUSH1 0x74 SWAP3 SWAP1 SWAP3 SHR AND SWAP1 JUMP JUMPDEST SWAP1 SWAP5 SWAP1 SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1613 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1637 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16A6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16CA SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x140 ADD MLOAD 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 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x171C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1740 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST DUP2 PUSH2 0x120 ADD MLOAD 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 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1790 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x17B4 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH2 0x583 SWAP2 SWAP1 PUSH2 0x2DD4 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x182C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1850 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18E3 SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x100 ADD MLOAD 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 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1935 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x583 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19EB SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A5A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A7E SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST PUSH2 0x160 ADD MLOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x117E PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AFA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B1E SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B8C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1BB0 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH1 0xB0 SHR PUSH5 0xFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C2D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C51 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD1946DBC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CA0 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 0x1CE6 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2DEC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1D04 JUMPI PUSH2 0x1D04 PUSH2 0x2B01 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1D4A JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1D22 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x202B JUMPI PUSH20 0x9F8F72AA9304C8B593D555F12EF6589CC3A579A2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1D96 JUMPI PUSH2 0x1D96 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1E55 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4D4B520000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1E12 JUMPI PUSH2 0x1E12 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E45 JUMPI PUSH2 0x1E45 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP PUSH2 0x2019 JUMP JUMPDEST PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E92 JUMPI PUSH2 0x1E92 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1F0E JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4554480000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1E12 JUMPI PUSH2 0x1E12 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1F2B JUMPI PUSH2 0x1F2B PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F7D 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 0x1FC3 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2ECD JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1FDA JUMPI PUSH2 0x1FDA PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x200D JUMPI PUSH2 0x200D PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP JUMPDEST DUP1 PUSH2 0x2023 DUP2 PUSH2 0x2F7F JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1D50 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x21A1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20A3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x20C7 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2135 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2159 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x221C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2240 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22AF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x22D3 SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x120 DUP3 ADD MLOAD PUSH2 0x140 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP8 SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2361 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2385 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23F3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2417 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST SWAP1 POP PUSH2 0x583 DUP2 MLOAD PUSH8 0x8000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x249C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x24C0 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD1946DBC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x250F 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 0x2555 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2DEC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2573 JUMPI PUSH2 0x2573 PUSH2 0x2B01 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x25B9 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x2591 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x202B JUMPI PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x35EA6A75 DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x25F8 JUMPI PUSH2 0x25F8 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2638 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2656 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x267A SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP3 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26D7 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 0x271D SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2ECD JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2753 JUMPI PUSH2 0x2753 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP POP DUP1 DUP1 PUSH2 0x276A SWAP1 PUSH2 0x2F7F JUMP JUMPDEST SWAP2 POP POP PUSH2 0x25BF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x117E PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x27E2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2806 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2874 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2898 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH8 0x4000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x2923 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x291A SWAP2 SWAP1 PUSH2 0x2FB8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL DUP3 ADD SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2957 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x296C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x583 DUP2 PUSH2 0x2935 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x298A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2995 DUP2 PUSH2 0x2935 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x29A5 DUP2 PUSH2 0x2935 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x29CB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x29B3 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x29DA JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x29F8 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x29B0 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD DUP5 DUP9 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2AC6 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP10 DUP5 SUB ADD DUP6 MSTORE DUP2 MLOAD DUP1 MLOAD DUP8 DUP6 MSTORE PUSH2 0x2A93 DUP9 DUP7 ADD DUP3 PUSH2 0x29E0 JUMP JUMPDEST SWAP2 DUP10 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 DUP10 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP5 DUP8 ADD SWAP5 SWAP3 POP SWAP1 DUP7 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2A51 JUMP JUMPDEST POP SWAP1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2ADF DUP2 PUSH2 0x2935 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2AF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x583 DUP2 PUSH2 0x2935 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2B54 JUMPI PUSH2 0x2B54 PUSH2 0x2B01 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2BA1 JUMPI PUSH2 0x2BA1 PUSH2 0x2B01 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2BBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x2BDE JUMPI PUSH2 0x2BDE PUSH2 0x2B01 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2BFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x583 DUP4 DUP4 PUSH2 0x2BA9 JUMP JUMPDEST DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2ADF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2ADF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x2ADF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2C69 PUSH2 0x2B30 JUMP JUMPDEST PUSH2 0x2C73 DUP5 DUP5 PUSH2 0x2BA9 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x2C81 PUSH1 0x20 DUP5 ADD PUSH2 0x2C07 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2C92 PUSH1 0x40 DUP5 ADD PUSH2 0x2C07 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x2CA3 PUSH1 0x60 DUP5 ADD PUSH2 0x2C07 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x2CB4 PUSH1 0x80 DUP5 ADD PUSH2 0x2C07 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x2CC5 PUSH1 0xA0 DUP5 ADD PUSH2 0x2C07 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x2CD6 PUSH1 0xC0 DUP5 ADD PUSH2 0x2C27 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x2CE7 PUSH1 0xE0 DUP5 ADD PUSH2 0x2C3C JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x2CFA DUP2 DUP6 ADD PUSH2 0x2AD4 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x2D0C DUP5 DUP3 ADD PUSH2 0x2AD4 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x2D1E DUP5 DUP3 ADD PUSH2 0x2AD4 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x2D30 DUP5 DUP3 ADD PUSH2 0x2AD4 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x2D42 DUP5 DUP3 ADD PUSH2 0x2C07 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x2D54 DUP5 DUP3 ADD PUSH2 0x2C07 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x2D66 DUP5 DUP3 ADD PUSH2 0x2C07 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D9C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x583 DUP3 PUSH2 0x2C27 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x2DE7 JUMPI PUSH2 0x2DE7 PUSH2 0x2DA5 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2DFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2E17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2E2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x2E3D JUMPI PUSH2 0x2E3D PUSH2 0x2B01 JUMP JUMPDEST DUP1 PUSH1 0x5 SHL SWAP2 POP PUSH2 0x2E4E DUP5 DUP4 ADD PUSH2 0x2B5A JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 DUP4 ADD DUP5 ADD SWAP2 DUP5 DUP2 ADD SWAP1 DUP9 DUP5 GT ISZERO PUSH2 0x2E68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP4 DUP6 LT ISZERO PUSH2 0x2E92 JUMPI DUP5 MLOAD SWAP3 POP PUSH2 0x2E82 DUP4 PUSH2 0x2935 JUMP JUMPDEST DUP3 DUP3 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP1 DUP6 ADD SWAP1 PUSH2 0x2E6D JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2EDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2EF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2F0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x2F1D JUMPI PUSH2 0x2F1D PUSH2 0x2B01 JUMP JUMPDEST PUSH2 0x2F4E PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x2B5A JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP6 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x2F65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F76 DUP2 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x29B0 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x2FB1 JUMPI PUSH2 0x2FB1 PUSH2 0x2DA5 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x583 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x29E0 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEA PUSH17 0x2229777BA1AC8C4C076BF412424B038D2C PUSH25 0x3073101CB6591FC8A5B42D9C64736F6C634300080A00330000 ","sourceMap":"970:9398:51:-:0;;;1547:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1607:38:51;;;970:9398;;14:321:201;115:6;168:2;156:9;147:7;143:23;139:32;136:52;;;184:1;181;174:12;136:52;210:16;;-1:-1:-1;;;;;255:31:201;;245:42;;235:70;;301:1;298;291:12;235:70;324:5;14:321;-1:-1:-1;;;14:321:201:o;:::-;970:9398:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ADDRESSES_PROVIDER_6565":{"entryPoint":null,"id":6565,"parameterSlots":0,"returnSlots":0},"@getATokenTotalSupply_7133":{"entryPoint":6078,"id":7133,"parameterSlots":1,"returnSlots":1},"@getAllATokens_6771":{"entryPoint":9261,"id":6771,"parameterSlots":0,"returnSlots":1},"@getAllReservesTokens_6688":{"entryPoint":7102,"id":6688,"parameterSlots":0,"returnSlots":1},"@getCaps_11856":{"entryPoint":null,"id":11856,"parameterSlots":1,"returnSlots":2},"@getDebtCeilingDecimals_7014":{"entryPoint":null,"id":7014,"parameterSlots":0,"returnSlots":1},"@getDebtCeiling_11491":{"entryPoint":null,"id":11491,"parameterSlots":1,"returnSlots":1},"@getDebtCeiling_7003":{"entryPoint":4170,"id":7003,"parameterSlots":1,"returnSlots":1},"@getEModeCategory_11647":{"entryPoint":null,"id":11647,"parameterSlots":1,"returnSlots":1},"@getFlags_11757":{"entryPoint":null,"id":11757,"parameterSlots":1,"returnSlots":5},"@getFlashLoanEnabled_11697":{"entryPoint":null,"id":11697,"parameterSlots":1,"returnSlots":1},"@getFlashLoanEnabled_7402":{"entryPoint":8947,"id":7402,"parameterSlots":1,"returnSlots":1},"@getInterestRateStrategyAddress_7374":{"entryPoint":6489,"id":7374,"parameterSlots":1,"returnSlots":1},"@getLiquidationProtocolFee_11543":{"entryPoint":null,"id":11543,"parameterSlots":1,"returnSlots":1},"@getLiquidationProtocolFee_6961":{"entryPoint":4484,"id":6961,"parameterSlots":1,"returnSlots":1},"@getParams_11823":{"entryPoint":null,"id":11823,"parameterSlots":1,"returnSlots":6},"@getPaused_6919":{"entryPoint":8243,"id":6919,"parameterSlots":1,"returnSlots":1},"@getReserveCaps_6895":{"entryPoint":5211,"id":6895,"parameterSlots":1,"returnSlots":2},"@getReserveConfigurationData_6840":{"entryPoint":4789,"id":6840,"parameterSlots":1,"returnSlots":10},"@getReserveData_7102":{"entryPoint":3162,"id":7102,"parameterSlots":1,"returnSlots":12},"@getReserveEModeCategory_6868":{"entryPoint":1107,"id":6868,"parameterSlots":1,"returnSlots":1},"@getReserveTokensAddresses_7346":{"entryPoint":8619,"id":7346,"parameterSlots":1,"returnSlots":3},"@getSiloedBorrowing_11183":{"entryPoint":null,"id":11183,"parameterSlots":1,"returnSlots":1},"@getSiloedBorrowing_6940":{"entryPoint":10098,"id":6940,"parameterSlots":1,"returnSlots":1},"@getTotalDebt_7171":{"entryPoint":5541,"id":7171,"parameterSlots":1,"returnSlots":1},"@getUnbackedMintCap_11595":{"entryPoint":null,"id":11595,"parameterSlots":1,"returnSlots":1},"@getUnbackedMintCap_6982":{"entryPoint":6794,"id":6982,"parameterSlots":1,"returnSlots":1},"@getUserReserveData_7310":{"entryPoint":1418,"id":7310,"parameterSlots":2,"returnSlots":9},"@isUsingAsCollateral_12083":{"entryPoint":10408,"id":12083,"parameterSlots":2,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":10964,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_ReserveConfigurationMap_fromMemory":{"entryPoint":11177,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":10586,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":10980,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":10615,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr_fromMemory":{"entryPoint":11756,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_string_memory_ptr_fromMemory":{"entryPoint":11981,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_fromMemory":{"entryPoint":11243,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory":{"entryPoint":11342,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_UserConfigurationMap_$21322_memory_ptr_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":11633,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint40_fromMemory":{"entryPoint":11658,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint128_fromMemory":{"entryPoint":11271,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint16_fromMemory":{"entryPoint":11324,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint40_fromMemory":{"entryPoint":11303,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_string":{"entryPoint":10720,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_array$_t_struct$_TokenData_$5577_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_TokenData_$5577_memory_ptr_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":10794,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":12216,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_bool_t_bool_t_bool_t_bool_t_bool__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_bool_t_bool_t_bool_t_bool_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":11,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint40__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint40__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":13,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint40_t_bool__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint40_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":10,"returnSlots":1},"allocate_memory":{"entryPoint":11098,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_1859":{"entryPoint":11056,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":11732,"id":null,"parameterSlots":2,"returnSlots":1},"copy_memory_to_memory":{"entryPoint":10672,"id":null,"parameterSlots":3,"returnSlots":0},"increment_t_uint256":{"entryPoint":12159,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":11685,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":11934,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":11009,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":10549,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:14267:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"146:125:201","statements":[{"nodeType":"YulAssignment","src":"156:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"168:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"179:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"164:3:201"},"nodeType":"YulFunctionCall","src":"164:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"156:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"198:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"213:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"221:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"209:3:201"},"nodeType":"YulFunctionCall","src":"209:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"191:6:201"},"nodeType":"YulFunctionCall","src":"191:74:201"},"nodeType":"YulExpressionStatement","src":"191:74:201"}]},"name":"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"115:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"126:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"137:4:201","type":""}],"src":"14:257:201"},{"body":{"nodeType":"YulBlock","src":"321:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"408:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"417:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"420:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"410:6:201"},"nodeType":"YulFunctionCall","src":"410:12:201"},"nodeType":"YulExpressionStatement","src":"410:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"344:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"355:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"362:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"351:3:201"},"nodeType":"YulFunctionCall","src":"351:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"341:2:201"},"nodeType":"YulFunctionCall","src":"341:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"334:6:201"},"nodeType":"YulFunctionCall","src":"334:73:201"},"nodeType":"YulIf","src":"331:93:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"310:5:201","type":""}],"src":"276:154:201"},{"body":{"nodeType":"YulBlock","src":"505:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"551:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"560:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"563:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"553:6:201"},"nodeType":"YulFunctionCall","src":"553:12:201"},"nodeType":"YulExpressionStatement","src":"553:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"526:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"535:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"522:3:201"},"nodeType":"YulFunctionCall","src":"522:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"547:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"518:3:201"},"nodeType":"YulFunctionCall","src":"518:32:201"},"nodeType":"YulIf","src":"515:52:201"},{"nodeType":"YulVariableDeclaration","src":"576:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"602:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"589:12:201"},"nodeType":"YulFunctionCall","src":"589:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"580:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"646:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"621:24:201"},"nodeType":"YulFunctionCall","src":"621:31:201"},"nodeType":"YulExpressionStatement","src":"621:31:201"},{"nodeType":"YulAssignment","src":"661:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"671:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"661:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"471:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"482:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"494:6:201","type":""}],"src":"435:247:201"},{"body":{"nodeType":"YulBlock","src":"788:76:201","statements":[{"nodeType":"YulAssignment","src":"798:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"810:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"821:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"806:3:201"},"nodeType":"YulFunctionCall","src":"806:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"798:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"840:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"851:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"833:6:201"},"nodeType":"YulFunctionCall","src":"833:25:201"},"nodeType":"YulExpressionStatement","src":"833:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"757:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"768:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"779:4:201","type":""}],"src":"687:177:201"},{"body":{"nodeType":"YulBlock","src":"956:301:201","statements":[{"body":{"nodeType":"YulBlock","src":"1002:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1011:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1014:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1004:6:201"},"nodeType":"YulFunctionCall","src":"1004:12:201"},"nodeType":"YulExpressionStatement","src":"1004:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"977:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"986:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"973:3:201"},"nodeType":"YulFunctionCall","src":"973:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"998:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"969:3:201"},"nodeType":"YulFunctionCall","src":"969:32:201"},"nodeType":"YulIf","src":"966:52:201"},{"nodeType":"YulVariableDeclaration","src":"1027:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1053:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1040:12:201"},"nodeType":"YulFunctionCall","src":"1040:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1031:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1097:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1072:24:201"},"nodeType":"YulFunctionCall","src":"1072:31:201"},"nodeType":"YulExpressionStatement","src":"1072:31:201"},{"nodeType":"YulAssignment","src":"1112:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1122:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1112:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1136:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1168:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1179:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1164:3:201"},"nodeType":"YulFunctionCall","src":"1164:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1151:12:201"},"nodeType":"YulFunctionCall","src":"1151:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"1140:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1217:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1192:24:201"},"nodeType":"YulFunctionCall","src":"1192:33:201"},"nodeType":"YulExpressionStatement","src":"1192:33:201"},{"nodeType":"YulAssignment","src":"1234:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"1244:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1234:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"914:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"925:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"937:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"945:6:201","type":""}],"src":"869:388:201"},{"body":{"nodeType":"YulBlock","src":"1579:461:201","statements":[{"nodeType":"YulAssignment","src":"1589:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1601:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1612:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1597:3:201"},"nodeType":"YulFunctionCall","src":"1597:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1589:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1632:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"1643:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1625:6:201"},"nodeType":"YulFunctionCall","src":"1625:25:201"},"nodeType":"YulExpressionStatement","src":"1625:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1670:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1681:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1666:3:201"},"nodeType":"YulFunctionCall","src":"1666:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"1686:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1659:6:201"},"nodeType":"YulFunctionCall","src":"1659:34:201"},"nodeType":"YulExpressionStatement","src":"1659:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1713:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1724:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1709:3:201"},"nodeType":"YulFunctionCall","src":"1709:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"1729:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1702:6:201"},"nodeType":"YulFunctionCall","src":"1702:34:201"},"nodeType":"YulExpressionStatement","src":"1702:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1756:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1767:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1752:3:201"},"nodeType":"YulFunctionCall","src":"1752:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"1772:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1745:6:201"},"nodeType":"YulFunctionCall","src":"1745:34:201"},"nodeType":"YulExpressionStatement","src":"1745:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1799:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1810:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1795:3:201"},"nodeType":"YulFunctionCall","src":"1795:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"1816:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1788:6:201"},"nodeType":"YulFunctionCall","src":"1788:35:201"},"nodeType":"YulExpressionStatement","src":"1788:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1843:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1854:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1839:3:201"},"nodeType":"YulFunctionCall","src":"1839:19:201"},{"name":"value5","nodeType":"YulIdentifier","src":"1860:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1832:6:201"},"nodeType":"YulFunctionCall","src":"1832:35:201"},"nodeType":"YulExpressionStatement","src":"1832:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1887:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1898:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1883:3:201"},"nodeType":"YulFunctionCall","src":"1883:19:201"},{"name":"value6","nodeType":"YulIdentifier","src":"1904:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1876:6:201"},"nodeType":"YulFunctionCall","src":"1876:35:201"},"nodeType":"YulExpressionStatement","src":"1876:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1931:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1942:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1927:3:201"},"nodeType":"YulFunctionCall","src":"1927:19:201"},{"arguments":[{"name":"value7","nodeType":"YulIdentifier","src":"1952:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1960:12:201","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1948:3:201"},"nodeType":"YulFunctionCall","src":"1948:25:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1920:6:201"},"nodeType":"YulFunctionCall","src":"1920:54:201"},"nodeType":"YulExpressionStatement","src":"1920:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1994:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2005:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1990:3:201"},"nodeType":"YulFunctionCall","src":"1990:19:201"},{"arguments":[{"arguments":[{"name":"value8","nodeType":"YulIdentifier","src":"2025:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2018:6:201"},"nodeType":"YulFunctionCall","src":"2018:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2011:6:201"},"nodeType":"YulFunctionCall","src":"2011:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1983:6:201"},"nodeType":"YulFunctionCall","src":"1983:51:201"},"nodeType":"YulExpressionStatement","src":"1983:51:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint40_t_bool__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint40_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1484:9:201","type":""},{"name":"value8","nodeType":"YulTypedName","src":"1495:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"1503:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"1511:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"1519:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1527:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1535:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1543:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1551:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1559:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1570:4:201","type":""}],"src":"1262:778:201"},{"body":{"nodeType":"YulBlock","src":"2454:579:201","statements":[{"nodeType":"YulAssignment","src":"2464:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2476:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2487:3:201","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2472:3:201"},"nodeType":"YulFunctionCall","src":"2472:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2464:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2507:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"2518:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2500:6:201"},"nodeType":"YulFunctionCall","src":"2500:25:201"},"nodeType":"YulExpressionStatement","src":"2500:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2545:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2556:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2541:3:201"},"nodeType":"YulFunctionCall","src":"2541:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"2561:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2534:6:201"},"nodeType":"YulFunctionCall","src":"2534:34:201"},"nodeType":"YulExpressionStatement","src":"2534:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2588:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2599:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2584:3:201"},"nodeType":"YulFunctionCall","src":"2584:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"2604:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2577:6:201"},"nodeType":"YulFunctionCall","src":"2577:34:201"},"nodeType":"YulExpressionStatement","src":"2577:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2631:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2642:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2627:3:201"},"nodeType":"YulFunctionCall","src":"2627:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"2647:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2620:6:201"},"nodeType":"YulFunctionCall","src":"2620:34:201"},"nodeType":"YulExpressionStatement","src":"2620:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2674:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2685:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2670:3:201"},"nodeType":"YulFunctionCall","src":"2670:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"2691:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2663:6:201"},"nodeType":"YulFunctionCall","src":"2663:35:201"},"nodeType":"YulExpressionStatement","src":"2663:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2718:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2729:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2714:3:201"},"nodeType":"YulFunctionCall","src":"2714:19:201"},{"name":"value5","nodeType":"YulIdentifier","src":"2735:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2707:6:201"},"nodeType":"YulFunctionCall","src":"2707:35:201"},"nodeType":"YulExpressionStatement","src":"2707:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2762:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2773:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2758:3:201"},"nodeType":"YulFunctionCall","src":"2758:19:201"},{"name":"value6","nodeType":"YulIdentifier","src":"2779:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2751:6:201"},"nodeType":"YulFunctionCall","src":"2751:35:201"},"nodeType":"YulExpressionStatement","src":"2751:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2806:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2817:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2802:3:201"},"nodeType":"YulFunctionCall","src":"2802:19:201"},{"name":"value7","nodeType":"YulIdentifier","src":"2823:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2795:6:201"},"nodeType":"YulFunctionCall","src":"2795:35:201"},"nodeType":"YulExpressionStatement","src":"2795:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2850:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2861:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2846:3:201"},"nodeType":"YulFunctionCall","src":"2846:19:201"},{"name":"value8","nodeType":"YulIdentifier","src":"2867:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2839:6:201"},"nodeType":"YulFunctionCall","src":"2839:35:201"},"nodeType":"YulExpressionStatement","src":"2839:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2894:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2905:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2890:3:201"},"nodeType":"YulFunctionCall","src":"2890:19:201"},{"name":"value9","nodeType":"YulIdentifier","src":"2911:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2883:6:201"},"nodeType":"YulFunctionCall","src":"2883:35:201"},"nodeType":"YulExpressionStatement","src":"2883:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2938:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2949:3:201","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2934:3:201"},"nodeType":"YulFunctionCall","src":"2934:19:201"},{"name":"value10","nodeType":"YulIdentifier","src":"2955:7:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2927:6:201"},"nodeType":"YulFunctionCall","src":"2927:36:201"},"nodeType":"YulExpressionStatement","src":"2927:36:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2983:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2994:3:201","type":"","value":"352"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2979:3:201"},"nodeType":"YulFunctionCall","src":"2979:19:201"},{"arguments":[{"name":"value11","nodeType":"YulIdentifier","src":"3004:7:201"},{"kind":"number","nodeType":"YulLiteral","src":"3013:12:201","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3000:3:201"},"nodeType":"YulFunctionCall","src":"3000:26:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2972:6:201"},"nodeType":"YulFunctionCall","src":"2972:55:201"},"nodeType":"YulExpressionStatement","src":"2972:55:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint40__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint40__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2333:9:201","type":""},{"name":"value11","nodeType":"YulTypedName","src":"2344:7:201","type":""},{"name":"value10","nodeType":"YulTypedName","src":"2353:7:201","type":""},{"name":"value9","nodeType":"YulTypedName","src":"2362:6:201","type":""},{"name":"value8","nodeType":"YulTypedName","src":"2370:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"2378:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"2386:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"2394:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"2402:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2410:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2418:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2426:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2434:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2445:4:201","type":""}],"src":"2045:988:201"},{"body":{"nodeType":"YulBlock","src":"3361:550:201","statements":[{"nodeType":"YulAssignment","src":"3371:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3383:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3394:3:201","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3379:3:201"},"nodeType":"YulFunctionCall","src":"3379:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3371:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3414:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"3425:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3407:6:201"},"nodeType":"YulFunctionCall","src":"3407:25:201"},"nodeType":"YulExpressionStatement","src":"3407:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3452:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3463:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3448:3:201"},"nodeType":"YulFunctionCall","src":"3448:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"3468:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3441:6:201"},"nodeType":"YulFunctionCall","src":"3441:34:201"},"nodeType":"YulExpressionStatement","src":"3441:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3495:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3506:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3491:3:201"},"nodeType":"YulFunctionCall","src":"3491:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"3511:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3484:6:201"},"nodeType":"YulFunctionCall","src":"3484:34:201"},"nodeType":"YulExpressionStatement","src":"3484:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3538:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3549:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3534:3:201"},"nodeType":"YulFunctionCall","src":"3534:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"3554:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3527:6:201"},"nodeType":"YulFunctionCall","src":"3527:34:201"},"nodeType":"YulExpressionStatement","src":"3527:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3581:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3592:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3577:3:201"},"nodeType":"YulFunctionCall","src":"3577:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"3598:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3570:6:201"},"nodeType":"YulFunctionCall","src":"3570:35:201"},"nodeType":"YulExpressionStatement","src":"3570:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3625:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3636:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3621:3:201"},"nodeType":"YulFunctionCall","src":"3621:19:201"},{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"3656:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3649:6:201"},"nodeType":"YulFunctionCall","src":"3649:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3642:6:201"},"nodeType":"YulFunctionCall","src":"3642:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3614:6:201"},"nodeType":"YulFunctionCall","src":"3614:51:201"},"nodeType":"YulExpressionStatement","src":"3614:51:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3685:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3696:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3681:3:201"},"nodeType":"YulFunctionCall","src":"3681:19:201"},{"arguments":[{"arguments":[{"name":"value6","nodeType":"YulIdentifier","src":"3716:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3709:6:201"},"nodeType":"YulFunctionCall","src":"3709:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3702:6:201"},"nodeType":"YulFunctionCall","src":"3702:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3674:6:201"},"nodeType":"YulFunctionCall","src":"3674:51:201"},"nodeType":"YulExpressionStatement","src":"3674:51:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3745:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3756:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3741:3:201"},"nodeType":"YulFunctionCall","src":"3741:19:201"},{"arguments":[{"arguments":[{"name":"value7","nodeType":"YulIdentifier","src":"3776:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3769:6:201"},"nodeType":"YulFunctionCall","src":"3769:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3762:6:201"},"nodeType":"YulFunctionCall","src":"3762:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3734:6:201"},"nodeType":"YulFunctionCall","src":"3734:51:201"},"nodeType":"YulExpressionStatement","src":"3734:51:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3805:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3816:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3801:3:201"},"nodeType":"YulFunctionCall","src":"3801:19:201"},{"arguments":[{"arguments":[{"name":"value8","nodeType":"YulIdentifier","src":"3836:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3829:6:201"},"nodeType":"YulFunctionCall","src":"3829:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3822:6:201"},"nodeType":"YulFunctionCall","src":"3822:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3794:6:201"},"nodeType":"YulFunctionCall","src":"3794:51:201"},"nodeType":"YulExpressionStatement","src":"3794:51:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3865:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3876:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3861:3:201"},"nodeType":"YulFunctionCall","src":"3861:19:201"},{"arguments":[{"arguments":[{"name":"value9","nodeType":"YulIdentifier","src":"3896:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3889:6:201"},"nodeType":"YulFunctionCall","src":"3889:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3882:6:201"},"nodeType":"YulFunctionCall","src":"3882:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3854:6:201"},"nodeType":"YulFunctionCall","src":"3854:51:201"},"nodeType":"YulExpressionStatement","src":"3854:51:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_bool_t_bool_t_bool_t_bool_t_bool__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_bool_t_bool_t_bool_t_bool_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3258:9:201","type":""},{"name":"value9","nodeType":"YulTypedName","src":"3269:6:201","type":""},{"name":"value8","nodeType":"YulTypedName","src":"3277:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"3285:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"3293:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"3301:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3309:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3317:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3325:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3333:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3341:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3352:4:201","type":""}],"src":"3038:873:201"},{"body":{"nodeType":"YulBlock","src":"4045:119:201","statements":[{"nodeType":"YulAssignment","src":"4055:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4067:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4078:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4063:3:201"},"nodeType":"YulFunctionCall","src":"4063:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4055:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4097:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"4108:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4090:6:201"},"nodeType":"YulFunctionCall","src":"4090:25:201"},"nodeType":"YulExpressionStatement","src":"4090:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4135:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4146:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4131:3:201"},"nodeType":"YulFunctionCall","src":"4131:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"4151:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4124:6:201"},"nodeType":"YulFunctionCall","src":"4124:34:201"},"nodeType":"YulExpressionStatement","src":"4124:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4006:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4017:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4025:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4036:4:201","type":""}],"src":"3916:248:201"},{"body":{"nodeType":"YulBlock","src":"4270:125:201","statements":[{"nodeType":"YulAssignment","src":"4280:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4292:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4303:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4288:3:201"},"nodeType":"YulFunctionCall","src":"4288:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4280:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4322:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4337:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4345:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4333:3:201"},"nodeType":"YulFunctionCall","src":"4333:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4315:6:201"},"nodeType":"YulFunctionCall","src":"4315:74:201"},"nodeType":"YulExpressionStatement","src":"4315:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4239:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4250:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4261:4:201","type":""}],"src":"4169:226:201"},{"body":{"nodeType":"YulBlock","src":"4453:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"4463:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"4472:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"4467:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4532:63:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4557:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"4562:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4553:3:201"},"nodeType":"YulFunctionCall","src":"4553:11:201"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4576:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"4581:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4572:3:201"},"nodeType":"YulFunctionCall","src":"4572:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4566:5:201"},"nodeType":"YulFunctionCall","src":"4566:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4546:6:201"},"nodeType":"YulFunctionCall","src":"4546:39:201"},"nodeType":"YulExpressionStatement","src":"4546:39:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4493:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"4496:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4490:2:201"},"nodeType":"YulFunctionCall","src":"4490:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"4504:19:201","statements":[{"nodeType":"YulAssignment","src":"4506:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4515:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"4518:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4511:3:201"},"nodeType":"YulFunctionCall","src":"4511:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"4506:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"4486:3:201","statements":[]},"src":"4482:113:201"},{"body":{"nodeType":"YulBlock","src":"4621:31:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4634:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"4639:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4630:3:201"},"nodeType":"YulFunctionCall","src":"4630:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"4648:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4623:6:201"},"nodeType":"YulFunctionCall","src":"4623:27:201"},"nodeType":"YulExpressionStatement","src":"4623:27:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4610:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"4613:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4607:2:201"},"nodeType":"YulFunctionCall","src":"4607:13:201"},"nodeType":"YulIf","src":"4604:48:201"}]},"name":"copy_memory_to_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"4431:3:201","type":""},{"name":"dst","nodeType":"YulTypedName","src":"4436:3:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"4441:6:201","type":""}],"src":"4400:258:201"},{"body":{"nodeType":"YulBlock","src":"4713:267:201","statements":[{"nodeType":"YulVariableDeclaration","src":"4723:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4743:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4737:5:201"},"nodeType":"YulFunctionCall","src":"4737:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"4727:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4765:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"4770:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4758:6:201"},"nodeType":"YulFunctionCall","src":"4758:19:201"},"nodeType":"YulExpressionStatement","src":"4758:19:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4812:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"4819:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4808:3:201"},"nodeType":"YulFunctionCall","src":"4808:16:201"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4830:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"4835:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4826:3:201"},"nodeType":"YulFunctionCall","src":"4826:14:201"},{"name":"length","nodeType":"YulIdentifier","src":"4842:6:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"4786:21:201"},"nodeType":"YulFunctionCall","src":"4786:63:201"},"nodeType":"YulExpressionStatement","src":"4786:63:201"},{"nodeType":"YulAssignment","src":"4858:116:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4873:3:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4886:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4894:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4882:3:201"},"nodeType":"YulFunctionCall","src":"4882:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"4899:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4878:3:201"},"nodeType":"YulFunctionCall","src":"4878:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4869:3:201"},"nodeType":"YulFunctionCall","src":"4869:98:201"},{"kind":"number","nodeType":"YulLiteral","src":"4969:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4865:3:201"},"nodeType":"YulFunctionCall","src":"4865:109:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"4858:3:201"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4690:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4697:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"4705:3:201","type":""}],"src":"4663:317:201"},{"body":{"nodeType":"YulBlock","src":"5190:967:201","statements":[{"nodeType":"YulVariableDeclaration","src":"5200:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5210:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5204:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5221:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5239:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5250:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5235:3:201"},"nodeType":"YulFunctionCall","src":"5235:18:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"5225:6:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5269:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5280:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5262:6:201"},"nodeType":"YulFunctionCall","src":"5262:21:201"},"nodeType":"YulExpressionStatement","src":"5262:21:201"},{"nodeType":"YulVariableDeclaration","src":"5292:17:201","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"5303:6:201"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"5296:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5318:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5338:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5332:5:201"},"nodeType":"YulFunctionCall","src":"5332:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"5322:6:201","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"5361:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"5369:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5354:6:201"},"nodeType":"YulFunctionCall","src":"5354:22:201"},"nodeType":"YulExpressionStatement","src":"5354:22:201"},{"nodeType":"YulVariableDeclaration","src":"5385:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5395:2:201","type":"","value":"64"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"5389:2:201","type":""}]},{"nodeType":"YulAssignment","src":"5406:25:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5417:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"5428:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5413:3:201"},"nodeType":"YulFunctionCall","src":"5413:18:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"5406:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"5440:53:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5462:9:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5477:1:201","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"5480:6:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5473:3:201"},"nodeType":"YulFunctionCall","src":"5473:14:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5458:3:201"},"nodeType":"YulFunctionCall","src":"5458:30:201"},{"name":"_2","nodeType":"YulIdentifier","src":"5490:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5454:3:201"},"nodeType":"YulFunctionCall","src":"5454:39:201"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"5444:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5502:29:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5520:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5528:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5516:3:201"},"nodeType":"YulFunctionCall","src":"5516:15:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"5506:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5540:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5549:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"5544:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"5608:520:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5629:3:201"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"5642:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"5650:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5638:3:201"},"nodeType":"YulFunctionCall","src":"5638:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"5662:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5634:3:201"},"nodeType":"YulFunctionCall","src":"5634:95:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5622:6:201"},"nodeType":"YulFunctionCall","src":"5622:108:201"},"nodeType":"YulExpressionStatement","src":"5622:108:201"},{"nodeType":"YulVariableDeclaration","src":"5743:23:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"5759:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5753:5:201"},"nodeType":"YulFunctionCall","src":"5753:13:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"5747:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5779:29:201","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"5805:2:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5799:5:201"},"nodeType":"YulFunctionCall","src":"5799:9:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"5783:12:201","type":""}]},{"expression":{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"5828:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"5836:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5821:6:201"},"nodeType":"YulFunctionCall","src":"5821:18:201"},"nodeType":"YulExpressionStatement","src":"5821:18:201"},{"nodeType":"YulVariableDeclaration","src":"5852:62:201","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"5884:12:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"5902:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"5910:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5898:3:201"},"nodeType":"YulFunctionCall","src":"5898:15:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"5866:17:201"},"nodeType":"YulFunctionCall","src":"5866:48:201"},"variables":[{"name":"tail_3","nodeType":"YulTypedName","src":"5856:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"5938:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5946:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5934:3:201"},"nodeType":"YulFunctionCall","src":"5934:15:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"5965:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5969:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5961:3:201"},"nodeType":"YulFunctionCall","src":"5961:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5955:5:201"},"nodeType":"YulFunctionCall","src":"5955:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"5975:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5951:3:201"},"nodeType":"YulFunctionCall","src":"5951:67:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5927:6:201"},"nodeType":"YulFunctionCall","src":"5927:92:201"},"nodeType":"YulExpressionStatement","src":"5927:92:201"},{"nodeType":"YulAssignment","src":"6032:16:201","value":{"name":"tail_3","nodeType":"YulIdentifier","src":"6042:6:201"},"variableNames":[{"name":"tail_2","nodeType":"YulIdentifier","src":"6032:6:201"}]},{"nodeType":"YulAssignment","src":"6061:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"6075:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6083:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6071:3:201"},"nodeType":"YulFunctionCall","src":"6071:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"6061:6:201"}]},{"nodeType":"YulAssignment","src":"6099:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6110:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6115:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6106:3:201"},"nodeType":"YulFunctionCall","src":"6106:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"6099:3:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5570:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"5573:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5567:2:201"},"nodeType":"YulFunctionCall","src":"5567:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5581:18:201","statements":[{"nodeType":"YulAssignment","src":"5583:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5592:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"5595:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5588:3:201"},"nodeType":"YulFunctionCall","src":"5588:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"5583:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"5563:3:201","statements":[]},"src":"5559:569:201"},{"nodeType":"YulAssignment","src":"6137:14:201","value":{"name":"tail_2","nodeType":"YulIdentifier","src":"6145:6:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6137:4:201"}]}]},"name":"abi_encode_tuple_t_array$_t_struct$_TokenData_$5577_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_TokenData_$5577_memory_ptr_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5159:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5170:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5181:4:201","type":""}],"src":"4985:1172:201"},{"body":{"nodeType":"YulBlock","src":"6257:92:201","statements":[{"nodeType":"YulAssignment","src":"6267:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6279:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6290:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6275:3:201"},"nodeType":"YulFunctionCall","src":"6275:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6267:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6309:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6334:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6327:6:201"},"nodeType":"YulFunctionCall","src":"6327:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6320:6:201"},"nodeType":"YulFunctionCall","src":"6320:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6302:6:201"},"nodeType":"YulFunctionCall","src":"6302:41:201"},"nodeType":"YulExpressionStatement","src":"6302:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6226:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6237:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6248:4:201","type":""}],"src":"6162:187:201"},{"body":{"nodeType":"YulBlock","src":"6511:250:201","statements":[{"nodeType":"YulAssignment","src":"6521:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6533:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6544:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6529:3:201"},"nodeType":"YulFunctionCall","src":"6529:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6521:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"6556:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6566:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6560:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6624:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6639:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6647:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6635:3:201"},"nodeType":"YulFunctionCall","src":"6635:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6617:6:201"},"nodeType":"YulFunctionCall","src":"6617:34:201"},"nodeType":"YulExpressionStatement","src":"6617:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6671:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6682:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6667:3:201"},"nodeType":"YulFunctionCall","src":"6667:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"6691:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6699:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6687:3:201"},"nodeType":"YulFunctionCall","src":"6687:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6660:6:201"},"nodeType":"YulFunctionCall","src":"6660:43:201"},"nodeType":"YulExpressionStatement","src":"6660:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6723:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6734:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6719:3:201"},"nodeType":"YulFunctionCall","src":"6719:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"6743:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6751:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6739:3:201"},"nodeType":"YulFunctionCall","src":"6739:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6712:6:201"},"nodeType":"YulFunctionCall","src":"6712:43:201"},"nodeType":"YulExpressionStatement","src":"6712:43:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6464:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6475:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6483:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6491:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6502:4:201","type":""}],"src":"6354:407:201"},{"body":{"nodeType":"YulBlock","src":"6826:78:201","statements":[{"nodeType":"YulAssignment","src":"6836:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6851:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6845:5:201"},"nodeType":"YulFunctionCall","src":"6845:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"6836:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6892:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6867:24:201"},"nodeType":"YulFunctionCall","src":"6867:31:201"},"nodeType":"YulExpressionStatement","src":"6867:31:201"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"6805:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"6816:5:201","type":""}],"src":"6766:138:201"},{"body":{"nodeType":"YulBlock","src":"6990:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"7036:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7045:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7048:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7038:6:201"},"nodeType":"YulFunctionCall","src":"7038:12:201"},"nodeType":"YulExpressionStatement","src":"7038:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7011:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"7020:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7007:3:201"},"nodeType":"YulFunctionCall","src":"7007:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"7032:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7003:3:201"},"nodeType":"YulFunctionCall","src":"7003:32:201"},"nodeType":"YulIf","src":"7000:52:201"},{"nodeType":"YulVariableDeclaration","src":"7061:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7080:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7074:5:201"},"nodeType":"YulFunctionCall","src":"7074:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7065:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7124:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7099:24:201"},"nodeType":"YulFunctionCall","src":"7099:31:201"},"nodeType":"YulExpressionStatement","src":"7099:31:201"},{"nodeType":"YulAssignment","src":"7139:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"7149:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7139:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6956:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6967:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6979:6:201","type":""}],"src":"6909:251:201"},{"body":{"nodeType":"YulBlock","src":"7197:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7214:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7217:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7207:6:201"},"nodeType":"YulFunctionCall","src":"7207:88:201"},"nodeType":"YulExpressionStatement","src":"7207:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7311:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7314:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7304:6:201"},"nodeType":"YulFunctionCall","src":"7304:15:201"},"nodeType":"YulExpressionStatement","src":"7304:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7335:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7338:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7328:6:201"},"nodeType":"YulFunctionCall","src":"7328:15:201"},"nodeType":"YulExpressionStatement","src":"7328:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"7165:184:201"},{"body":{"nodeType":"YulBlock","src":"7400:206:201","statements":[{"nodeType":"YulAssignment","src":"7410:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7426:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7420:5:201"},"nodeType":"YulFunctionCall","src":"7420:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7410:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"7438:34:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7460:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7468:3:201","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7456:3:201"},"nodeType":"YulFunctionCall","src":"7456:16:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"7442:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"7547:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"7549:16:201"},"nodeType":"YulFunctionCall","src":"7549:18:201"},"nodeType":"YulExpressionStatement","src":"7549:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7490:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"7502:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7487:2:201"},"nodeType":"YulFunctionCall","src":"7487:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7526:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"7538:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7523:2:201"},"nodeType":"YulFunctionCall","src":"7523:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"7484:2:201"},"nodeType":"YulFunctionCall","src":"7484:62:201"},"nodeType":"YulIf","src":"7481:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7585:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7589:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7578:6:201"},"nodeType":"YulFunctionCall","src":"7578:22:201"},"nodeType":"YulExpressionStatement","src":"7578:22:201"}]},"name":"allocate_memory_1859","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"7389:6:201","type":""}],"src":"7354:252:201"},{"body":{"nodeType":"YulBlock","src":"7656:289:201","statements":[{"nodeType":"YulAssignment","src":"7666:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7682:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7676:5:201"},"nodeType":"YulFunctionCall","src":"7676:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7666:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"7694:117:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7716:6:201"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"7732:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"7738:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7728:3:201"},"nodeType":"YulFunctionCall","src":"7728:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"7743:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7724:3:201"},"nodeType":"YulFunctionCall","src":"7724:86:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7712:3:201"},"nodeType":"YulFunctionCall","src":"7712:99:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"7698:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"7886:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"7888:16:201"},"nodeType":"YulFunctionCall","src":"7888:18:201"},"nodeType":"YulExpressionStatement","src":"7888:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7829:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"7841:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7826:2:201"},"nodeType":"YulFunctionCall","src":"7826:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7865:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"7877:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7862:2:201"},"nodeType":"YulFunctionCall","src":"7862:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"7823:2:201"},"nodeType":"YulFunctionCall","src":"7823:62:201"},"nodeType":"YulIf","src":"7820:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7924:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7928:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7917:6:201"},"nodeType":"YulFunctionCall","src":"7917:22:201"},"nodeType":"YulExpressionStatement","src":"7917:22:201"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"7636:4:201","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"7645:6:201","type":""}],"src":"7611:334:201"},{"body":{"nodeType":"YulBlock","src":"8041:335:201","statements":[{"body":{"nodeType":"YulBlock","src":"8085:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8094:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8097:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8087:6:201"},"nodeType":"YulFunctionCall","src":"8087:12:201"},"nodeType":"YulExpressionStatement","src":"8087:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"8062:3:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"8067:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8058:3:201"},"nodeType":"YulFunctionCall","src":"8058:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"8079:4:201","type":"","value":"0x20"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8054:3:201"},"nodeType":"YulFunctionCall","src":"8054:30:201"},"nodeType":"YulIf","src":"8051:50:201"},{"nodeType":"YulVariableDeclaration","src":"8110:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8130:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8124:5:201"},"nodeType":"YulFunctionCall","src":"8124:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"8114:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8142:35:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"8164:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8172:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8160:3:201"},"nodeType":"YulFunctionCall","src":"8160:17:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"8146:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"8252:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"8254:16:201"},"nodeType":"YulFunctionCall","src":"8254:18:201"},"nodeType":"YulExpressionStatement","src":"8254:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"8195:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"8207:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8192:2:201"},"nodeType":"YulFunctionCall","src":"8192:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"8231:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"8243:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8228:2:201"},"nodeType":"YulFunctionCall","src":"8228:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"8189:2:201"},"nodeType":"YulFunctionCall","src":"8189:62:201"},"nodeType":"YulIf","src":"8186:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8290:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"8294:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8283:6:201"},"nodeType":"YulFunctionCall","src":"8283:22:201"},"nodeType":"YulExpressionStatement","src":"8283:22:201"},{"nodeType":"YulAssignment","src":"8314:15:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"8323:6:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"8314:5:201"}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"8345:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8359:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8353:5:201"},"nodeType":"YulFunctionCall","src":"8353:16:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8338:6:201"},"nodeType":"YulFunctionCall","src":"8338:32:201"},"nodeType":"YulExpressionStatement","src":"8338:32:201"}]},"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8012:9:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"8023:3:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"8031:5:201","type":""}],"src":"7950:426:201"},{"body":{"nodeType":"YulBlock","src":"8504:159:201","statements":[{"body":{"nodeType":"YulBlock","src":"8550:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8559:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8562:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8552:6:201"},"nodeType":"YulFunctionCall","src":"8552:12:201"},"nodeType":"YulExpressionStatement","src":"8552:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8525:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"8534:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8521:3:201"},"nodeType":"YulFunctionCall","src":"8521:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"8546:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8517:3:201"},"nodeType":"YulFunctionCall","src":"8517:32:201"},"nodeType":"YulIf","src":"8514:52:201"},{"nodeType":"YulAssignment","src":"8575:82:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8638:9:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"8649:7:201"}],"functionName":{"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulIdentifier","src":"8585:52:201"},"nodeType":"YulFunctionCall","src":"8585:72:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8575:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8470:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8481:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8493:6:201","type":""}],"src":"8381:282:201"},{"body":{"nodeType":"YulBlock","src":"8728:132:201","statements":[{"nodeType":"YulAssignment","src":"8738:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8753:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8747:5:201"},"nodeType":"YulFunctionCall","src":"8747:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"8738:5:201"}]},{"body":{"nodeType":"YulBlock","src":"8838:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8847:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8850:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8840:6:201"},"nodeType":"YulFunctionCall","src":"8840:12:201"},"nodeType":"YulExpressionStatement","src":"8840:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8782:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8793:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"8800:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8789:3:201"},"nodeType":"YulFunctionCall","src":"8789:46:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8779:2:201"},"nodeType":"YulFunctionCall","src":"8779:57:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8772:6:201"},"nodeType":"YulFunctionCall","src":"8772:65:201"},"nodeType":"YulIf","src":"8769:85:201"}]},"name":"abi_decode_uint128_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"8707:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"8718:5:201","type":""}],"src":"8668:192:201"},{"body":{"nodeType":"YulBlock","src":"8924:110:201","statements":[{"nodeType":"YulAssignment","src":"8934:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8949:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8943:5:201"},"nodeType":"YulFunctionCall","src":"8943:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"8934:5:201"}]},{"body":{"nodeType":"YulBlock","src":"9012:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9021:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9024:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9014:6:201"},"nodeType":"YulFunctionCall","src":"9014:12:201"},"nodeType":"YulExpressionStatement","src":"9014:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8978:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8989:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"8996:12:201","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8985:3:201"},"nodeType":"YulFunctionCall","src":"8985:24:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8975:2:201"},"nodeType":"YulFunctionCall","src":"8975:35:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8968:6:201"},"nodeType":"YulFunctionCall","src":"8968:43:201"},"nodeType":"YulIf","src":"8965:63:201"}]},"name":"abi_decode_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"8903:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"8914:5:201","type":""}],"src":"8865:169:201"},{"body":{"nodeType":"YulBlock","src":"9098:104:201","statements":[{"nodeType":"YulAssignment","src":"9108:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"9123:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9117:5:201"},"nodeType":"YulFunctionCall","src":"9117:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"9108:5:201"}]},{"body":{"nodeType":"YulBlock","src":"9180:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9189:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9192:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9182:6:201"},"nodeType":"YulFunctionCall","src":"9182:12:201"},"nodeType":"YulExpressionStatement","src":"9182:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9152:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9163:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"9170:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9159:3:201"},"nodeType":"YulFunctionCall","src":"9159:18:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"9149:2:201"},"nodeType":"YulFunctionCall","src":"9149:29:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9142:6:201"},"nodeType":"YulFunctionCall","src":"9142:37:201"},"nodeType":"YulIf","src":"9139:57:201"}]},"name":"abi_decode_uint16_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"9077:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"9088:5:201","type":""}],"src":"9039:163:201"},{"body":{"nodeType":"YulBlock","src":"9318:1541:201","statements":[{"body":{"nodeType":"YulBlock","src":"9365:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9374:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9377:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9367:6:201"},"nodeType":"YulFunctionCall","src":"9367:12:201"},"nodeType":"YulExpressionStatement","src":"9367:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9339:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"9348:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9335:3:201"},"nodeType":"YulFunctionCall","src":"9335:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"9360:3:201","type":"","value":"480"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9331:3:201"},"nodeType":"YulFunctionCall","src":"9331:33:201"},"nodeType":"YulIf","src":"9328:53:201"},{"nodeType":"YulVariableDeclaration","src":"9390:35:201","value":{"arguments":[],"functionName":{"name":"allocate_memory_1859","nodeType":"YulIdentifier","src":"9403:20:201"},"nodeType":"YulFunctionCall","src":"9403:22:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9394:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9441:5:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9501:9:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"9512:7:201"}],"functionName":{"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulIdentifier","src":"9448:52:201"},"nodeType":"YulFunctionCall","src":"9448:72:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9434:6:201"},"nodeType":"YulFunctionCall","src":"9434:87:201"},"nodeType":"YulExpressionStatement","src":"9434:87:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9541:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"9548:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9537:3:201"},"nodeType":"YulFunctionCall","src":"9537:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9587:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9598:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9583:3:201"},"nodeType":"YulFunctionCall","src":"9583:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"9553:29:201"},"nodeType":"YulFunctionCall","src":"9553:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9530:6:201"},"nodeType":"YulFunctionCall","src":"9530:73:201"},"nodeType":"YulExpressionStatement","src":"9530:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9623:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"9630:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9619:3:201"},"nodeType":"YulFunctionCall","src":"9619:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9669:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9680:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9665:3:201"},"nodeType":"YulFunctionCall","src":"9665:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"9635:29:201"},"nodeType":"YulFunctionCall","src":"9635:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9612:6:201"},"nodeType":"YulFunctionCall","src":"9612:73:201"},"nodeType":"YulExpressionStatement","src":"9612:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9705:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"9712:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9701:3:201"},"nodeType":"YulFunctionCall","src":"9701:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9751:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9762:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9747:3:201"},"nodeType":"YulFunctionCall","src":"9747:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"9717:29:201"},"nodeType":"YulFunctionCall","src":"9717:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9694:6:201"},"nodeType":"YulFunctionCall","src":"9694:73:201"},"nodeType":"YulExpressionStatement","src":"9694:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9787:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"9794:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9783:3:201"},"nodeType":"YulFunctionCall","src":"9783:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9834:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9845:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9830:3:201"},"nodeType":"YulFunctionCall","src":"9830:19:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"9800:29:201"},"nodeType":"YulFunctionCall","src":"9800:50:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9776:6:201"},"nodeType":"YulFunctionCall","src":"9776:75:201"},"nodeType":"YulExpressionStatement","src":"9776:75:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9871:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"9878:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9867:3:201"},"nodeType":"YulFunctionCall","src":"9867:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9918:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9929:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9914:3:201"},"nodeType":"YulFunctionCall","src":"9914:19:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"9884:29:201"},"nodeType":"YulFunctionCall","src":"9884:50:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9860:6:201"},"nodeType":"YulFunctionCall","src":"9860:75:201"},"nodeType":"YulExpressionStatement","src":"9860:75:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9955:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"9962:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9951:3:201"},"nodeType":"YulFunctionCall","src":"9951:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10001:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10012:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9997:3:201"},"nodeType":"YulFunctionCall","src":"9997:19:201"}],"functionName":{"name":"abi_decode_uint40_fromMemory","nodeType":"YulIdentifier","src":"9968:28:201"},"nodeType":"YulFunctionCall","src":"9968:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9944:6:201"},"nodeType":"YulFunctionCall","src":"9944:74:201"},"nodeType":"YulExpressionStatement","src":"9944:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10038:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"10045:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10034:3:201"},"nodeType":"YulFunctionCall","src":"10034:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10084:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10095:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10080:3:201"},"nodeType":"YulFunctionCall","src":"10080:19:201"}],"functionName":{"name":"abi_decode_uint16_fromMemory","nodeType":"YulIdentifier","src":"10051:28:201"},"nodeType":"YulFunctionCall","src":"10051:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10027:6:201"},"nodeType":"YulFunctionCall","src":"10027:74:201"},"nodeType":"YulExpressionStatement","src":"10027:74:201"},{"nodeType":"YulVariableDeclaration","src":"10110:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10120:3:201","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10114:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10143:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10150:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10139:3:201"},"nodeType":"YulFunctionCall","src":"10139:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10189:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10200:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10185:3:201"},"nodeType":"YulFunctionCall","src":"10185:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"10155:29:201"},"nodeType":"YulFunctionCall","src":"10155:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10132:6:201"},"nodeType":"YulFunctionCall","src":"10132:73:201"},"nodeType":"YulExpressionStatement","src":"10132:73:201"},{"nodeType":"YulVariableDeclaration","src":"10214:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10224:3:201","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"10218:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10247:5:201"},{"name":"_2","nodeType":"YulIdentifier","src":"10254:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10243:3:201"},"nodeType":"YulFunctionCall","src":"10243:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10293:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"10304:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10289:3:201"},"nodeType":"YulFunctionCall","src":"10289:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"10259:29:201"},"nodeType":"YulFunctionCall","src":"10259:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10236:6:201"},"nodeType":"YulFunctionCall","src":"10236:73:201"},"nodeType":"YulExpressionStatement","src":"10236:73:201"},{"nodeType":"YulVariableDeclaration","src":"10318:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10328:3:201","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"10322:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10351:5:201"},{"name":"_3","nodeType":"YulIdentifier","src":"10358:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10347:3:201"},"nodeType":"YulFunctionCall","src":"10347:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10397:9:201"},{"name":"_3","nodeType":"YulIdentifier","src":"10408:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10393:3:201"},"nodeType":"YulFunctionCall","src":"10393:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"10363:29:201"},"nodeType":"YulFunctionCall","src":"10363:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10340:6:201"},"nodeType":"YulFunctionCall","src":"10340:73:201"},"nodeType":"YulExpressionStatement","src":"10340:73:201"},{"nodeType":"YulVariableDeclaration","src":"10422:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10432:3:201","type":"","value":"352"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"10426:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10455:5:201"},{"name":"_4","nodeType":"YulIdentifier","src":"10462:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10451:3:201"},"nodeType":"YulFunctionCall","src":"10451:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10501:9:201"},{"name":"_4","nodeType":"YulIdentifier","src":"10512:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10497:3:201"},"nodeType":"YulFunctionCall","src":"10497:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"10467:29:201"},"nodeType":"YulFunctionCall","src":"10467:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10444:6:201"},"nodeType":"YulFunctionCall","src":"10444:73:201"},"nodeType":"YulExpressionStatement","src":"10444:73:201"},{"nodeType":"YulVariableDeclaration","src":"10526:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10536:3:201","type":"","value":"384"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"10530:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10559:5:201"},{"name":"_5","nodeType":"YulIdentifier","src":"10566:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10555:3:201"},"nodeType":"YulFunctionCall","src":"10555:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10605:9:201"},{"name":"_5","nodeType":"YulIdentifier","src":"10616:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10601:3:201"},"nodeType":"YulFunctionCall","src":"10601:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"10571:29:201"},"nodeType":"YulFunctionCall","src":"10571:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10548:6:201"},"nodeType":"YulFunctionCall","src":"10548:73:201"},"nodeType":"YulExpressionStatement","src":"10548:73:201"},{"nodeType":"YulVariableDeclaration","src":"10630:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10640:3:201","type":"","value":"416"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"10634:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10663:5:201"},{"name":"_6","nodeType":"YulIdentifier","src":"10670:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10659:3:201"},"nodeType":"YulFunctionCall","src":"10659:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10709:9:201"},{"name":"_6","nodeType":"YulIdentifier","src":"10720:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10705:3:201"},"nodeType":"YulFunctionCall","src":"10705:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"10675:29:201"},"nodeType":"YulFunctionCall","src":"10675:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10652:6:201"},"nodeType":"YulFunctionCall","src":"10652:73:201"},"nodeType":"YulExpressionStatement","src":"10652:73:201"},{"nodeType":"YulVariableDeclaration","src":"10734:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10744:3:201","type":"","value":"448"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"10738:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10767:5:201"},{"name":"_7","nodeType":"YulIdentifier","src":"10774:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10763:3:201"},"nodeType":"YulFunctionCall","src":"10763:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10813:9:201"},{"name":"_7","nodeType":"YulIdentifier","src":"10824:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10809:3:201"},"nodeType":"YulFunctionCall","src":"10809:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"10779:29:201"},"nodeType":"YulFunctionCall","src":"10779:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10756:6:201"},"nodeType":"YulFunctionCall","src":"10756:73:201"},"nodeType":"YulExpressionStatement","src":"10756:73:201"},{"nodeType":"YulAssignment","src":"10838:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"10848:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"10838:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9284:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9295:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9307:6:201","type":""}],"src":"9207:1652:201"},{"body":{"nodeType":"YulBlock","src":"10984:159:201","statements":[{"body":{"nodeType":"YulBlock","src":"11030:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11039:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11042:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11032:6:201"},"nodeType":"YulFunctionCall","src":"11032:12:201"},"nodeType":"YulExpressionStatement","src":"11032:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11005:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"11014:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11001:3:201"},"nodeType":"YulFunctionCall","src":"11001:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"11026:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10997:3:201"},"nodeType":"YulFunctionCall","src":"10997:32:201"},"nodeType":"YulIf","src":"10994:52:201"},{"nodeType":"YulAssignment","src":"11055:82:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11118:9:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"11129:7:201"}],"functionName":{"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulIdentifier","src":"11065:52:201"},"nodeType":"YulFunctionCall","src":"11065:72:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11055:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_UserConfigurationMap_$21322_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10950:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"10961:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"10973:6:201","type":""}],"src":"10864:279:201"},{"body":{"nodeType":"YulBlock","src":"11229:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"11275:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11284:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11287:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11277:6:201"},"nodeType":"YulFunctionCall","src":"11277:12:201"},"nodeType":"YulExpressionStatement","src":"11277:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11250:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"11259:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11246:3:201"},"nodeType":"YulFunctionCall","src":"11246:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"11271:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11242:3:201"},"nodeType":"YulFunctionCall","src":"11242:32:201"},"nodeType":"YulIf","src":"11239:52:201"},{"nodeType":"YulAssignment","src":"11300:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11316:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11310:5:201"},"nodeType":"YulFunctionCall","src":"11310:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11300:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11195:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11206:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11218:6:201","type":""}],"src":"11148:184:201"},{"body":{"nodeType":"YulBlock","src":"11417:126:201","statements":[{"body":{"nodeType":"YulBlock","src":"11463:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11472:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11475:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11465:6:201"},"nodeType":"YulFunctionCall","src":"11465:12:201"},"nodeType":"YulExpressionStatement","src":"11465:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11438:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"11447:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11434:3:201"},"nodeType":"YulFunctionCall","src":"11434:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"11459:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11430:3:201"},"nodeType":"YulFunctionCall","src":"11430:32:201"},"nodeType":"YulIf","src":"11427:52:201"},{"nodeType":"YulAssignment","src":"11488:49:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11527:9:201"}],"functionName":{"name":"abi_decode_uint40_fromMemory","nodeType":"YulIdentifier","src":"11498:28:201"},"nodeType":"YulFunctionCall","src":"11498:39:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11488:6:201"}]}]},"name":"abi_decode_tuple_t_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11383:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11394:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11406:6:201","type":""}],"src":"11337:206:201"},{"body":{"nodeType":"YulBlock","src":"11580:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11597:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11600:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11590:6:201"},"nodeType":"YulFunctionCall","src":"11590:88:201"},"nodeType":"YulExpressionStatement","src":"11590:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11694:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"11697:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11687:6:201"},"nodeType":"YulFunctionCall","src":"11687:15:201"},"nodeType":"YulExpressionStatement","src":"11687:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11718:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11721:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11711:6:201"},"nodeType":"YulFunctionCall","src":"11711:15:201"},"nodeType":"YulExpressionStatement","src":"11711:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"11548:184:201"},{"body":{"nodeType":"YulBlock","src":"11785:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"11812:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11814:16:201"},"nodeType":"YulFunctionCall","src":"11814:18:201"},"nodeType":"YulExpressionStatement","src":"11814:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11801:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"11808:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"11804:3:201"},"nodeType":"YulFunctionCall","src":"11804:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11798:2:201"},"nodeType":"YulFunctionCall","src":"11798:13:201"},"nodeType":"YulIf","src":"11795:39:201"},{"nodeType":"YulAssignment","src":"11843:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11854:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"11857:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11850:3:201"},"nodeType":"YulFunctionCall","src":"11850:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"11843:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11768:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"11771:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"11777:3:201","type":""}],"src":"11737:128:201"},{"body":{"nodeType":"YulBlock","src":"11976:905:201","statements":[{"nodeType":"YulVariableDeclaration","src":"11986:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11996:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11990:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"12043:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12052:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12055:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12045:6:201"},"nodeType":"YulFunctionCall","src":"12045:12:201"},"nodeType":"YulExpressionStatement","src":"12045:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"12018:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"12027:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12014:3:201"},"nodeType":"YulFunctionCall","src":"12014:23:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12039:2:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12010:3:201"},"nodeType":"YulFunctionCall","src":"12010:32:201"},"nodeType":"YulIf","src":"12007:52:201"},{"nodeType":"YulVariableDeclaration","src":"12068:30:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12088:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12082:5:201"},"nodeType":"YulFunctionCall","src":"12082:16:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"12072:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12107:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12117:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"12111:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"12162:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12171:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12174:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12164:6:201"},"nodeType":"YulFunctionCall","src":"12164:12:201"},"nodeType":"YulExpressionStatement","src":"12164:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"12150:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"12158:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12147:2:201"},"nodeType":"YulFunctionCall","src":"12147:14:201"},"nodeType":"YulIf","src":"12144:34:201"},{"nodeType":"YulVariableDeclaration","src":"12187:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12201:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"12212:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12197:3:201"},"nodeType":"YulFunctionCall","src":"12197:22:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"12191:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"12267:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12276:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12279:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12269:6:201"},"nodeType":"YulFunctionCall","src":"12269:12:201"},"nodeType":"YulExpressionStatement","src":"12269:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"12246:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"12250:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12242:3:201"},"nodeType":"YulFunctionCall","src":"12242:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"12257:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12238:3:201"},"nodeType":"YulFunctionCall","src":"12238:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12231:6:201"},"nodeType":"YulFunctionCall","src":"12231:35:201"},"nodeType":"YulIf","src":"12228:55:201"},{"nodeType":"YulVariableDeclaration","src":"12292:19:201","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"12308:2:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12302:5:201"},"nodeType":"YulFunctionCall","src":"12302:9:201"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"12296:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"12334:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"12336:16:201"},"nodeType":"YulFunctionCall","src":"12336:18:201"},"nodeType":"YulExpressionStatement","src":"12336:18:201"}]},"condition":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"12326:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"12330:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12323:2:201"},"nodeType":"YulFunctionCall","src":"12323:10:201"},"nodeType":"YulIf","src":"12320:36:201"},{"nodeType":"YulVariableDeclaration","src":"12365:20:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12379:1:201","type":"","value":"5"},{"name":"_4","nodeType":"YulIdentifier","src":"12382:2:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12375:3:201"},"nodeType":"YulFunctionCall","src":"12375:10:201"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"12369:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12394:39:201","value":{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"12425:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12429:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12421:3:201"},"nodeType":"YulFunctionCall","src":"12421:11:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"12405:15:201"},"nodeType":"YulFunctionCall","src":"12405:28:201"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"12398:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12442:16:201","value":{"name":"dst","nodeType":"YulIdentifier","src":"12455:3:201"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"12446:5:201","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"12474:3:201"},{"name":"_4","nodeType":"YulIdentifier","src":"12479:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12467:6:201"},"nodeType":"YulFunctionCall","src":"12467:15:201"},"nodeType":"YulExpressionStatement","src":"12467:15:201"},{"nodeType":"YulAssignment","src":"12491:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"12502:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12507:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12498:3:201"},"nodeType":"YulFunctionCall","src":"12498:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"12491:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"12519:34:201","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"12541:2:201"},{"name":"_5","nodeType":"YulIdentifier","src":"12545:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12537:3:201"},"nodeType":"YulFunctionCall","src":"12537:11:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12550:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12533:3:201"},"nodeType":"YulFunctionCall","src":"12533:20:201"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"12523:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"12585:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12594:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12597:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12587:6:201"},"nodeType":"YulFunctionCall","src":"12587:12:201"},"nodeType":"YulExpressionStatement","src":"12587:12:201"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"12568:6:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"12576:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12565:2:201"},"nodeType":"YulFunctionCall","src":"12565:19:201"},"nodeType":"YulIf","src":"12562:39:201"},{"nodeType":"YulVariableDeclaration","src":"12610:22:201","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"12625:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12629:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12621:3:201"},"nodeType":"YulFunctionCall","src":"12621:11:201"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"12614:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"12697:154:201","statements":[{"nodeType":"YulVariableDeclaration","src":"12711:23:201","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"12730:3:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12724:5:201"},"nodeType":"YulFunctionCall","src":"12724:10:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"12715:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12772:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12747:24:201"},"nodeType":"YulFunctionCall","src":"12747:31:201"},"nodeType":"YulExpressionStatement","src":"12747:31:201"},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"12798:3:201"},{"name":"value","nodeType":"YulIdentifier","src":"12803:5:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12791:6:201"},"nodeType":"YulFunctionCall","src":"12791:18:201"},"nodeType":"YulExpressionStatement","src":"12791:18:201"},{"nodeType":"YulAssignment","src":"12822:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"12833:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12838:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12829:3:201"},"nodeType":"YulFunctionCall","src":"12829:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"12822:3:201"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"12652:3:201"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"12657:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"12649:2:201"},"nodeType":"YulFunctionCall","src":"12649:15:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"12665:23:201","statements":[{"nodeType":"YulAssignment","src":"12667:19:201","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"12678:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12683:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12674:3:201"},"nodeType":"YulFunctionCall","src":"12674:12:201"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"12667:3:201"}]}]},"pre":{"nodeType":"YulBlock","src":"12645:3:201","statements":[]},"src":"12641:210:201"},{"nodeType":"YulAssignment","src":"12860:15:201","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"12870:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"12860:6:201"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11942:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11953:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11965:6:201","type":""}],"src":"11870:1011:201"},{"body":{"nodeType":"YulBlock","src":"12918:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12935:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12938:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12928:6:201"},"nodeType":"YulFunctionCall","src":"12928:88:201"},"nodeType":"YulExpressionStatement","src":"12928:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13032:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"13035:4:201","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13025:6:201"},"nodeType":"YulFunctionCall","src":"13025:15:201"},"nodeType":"YulExpressionStatement","src":"13025:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13056:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13059:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13049:6:201"},"nodeType":"YulFunctionCall","src":"13049:15:201"},"nodeType":"YulExpressionStatement","src":"13049:15:201"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"12886:184:201"},{"body":{"nodeType":"YulBlock","src":"13166:674:201","statements":[{"body":{"nodeType":"YulBlock","src":"13212:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13221:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13224:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13214:6:201"},"nodeType":"YulFunctionCall","src":"13214:12:201"},"nodeType":"YulExpressionStatement","src":"13214:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13187:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"13196:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13183:3:201"},"nodeType":"YulFunctionCall","src":"13183:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"13208:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13179:3:201"},"nodeType":"YulFunctionCall","src":"13179:32:201"},"nodeType":"YulIf","src":"13176:52:201"},{"nodeType":"YulVariableDeclaration","src":"13237:30:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13257:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13251:5:201"},"nodeType":"YulFunctionCall","src":"13251:16:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"13241:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13276:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"13286:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"13280:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"13331:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13340:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13343:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13333:6:201"},"nodeType":"YulFunctionCall","src":"13333:12:201"},"nodeType":"YulExpressionStatement","src":"13333:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13319:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"13327:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13316:2:201"},"nodeType":"YulFunctionCall","src":"13316:14:201"},"nodeType":"YulIf","src":"13313:34:201"},{"nodeType":"YulVariableDeclaration","src":"13356:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13370:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"13381:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13366:3:201"},"nodeType":"YulFunctionCall","src":"13366:22:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"13360:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"13436:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13445:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13448:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13438:6:201"},"nodeType":"YulFunctionCall","src":"13438:12:201"},"nodeType":"YulExpressionStatement","src":"13438:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"13415:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"13419:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13411:3:201"},"nodeType":"YulFunctionCall","src":"13411:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"13426:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13407:3:201"},"nodeType":"YulFunctionCall","src":"13407:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13400:6:201"},"nodeType":"YulFunctionCall","src":"13400:35:201"},"nodeType":"YulIf","src":"13397:55:201"},{"nodeType":"YulVariableDeclaration","src":"13461:19:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"13477:2:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13471:5:201"},"nodeType":"YulFunctionCall","src":"13471:9:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"13465:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"13503:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"13505:16:201"},"nodeType":"YulFunctionCall","src":"13505:18:201"},"nodeType":"YulExpressionStatement","src":"13505:18:201"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"13495:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"13499:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13492:2:201"},"nodeType":"YulFunctionCall","src":"13492:10:201"},"nodeType":"YulIf","src":"13489:36:201"},{"nodeType":"YulVariableDeclaration","src":"13534:125:201","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"13575:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"13579:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13571:3:201"},"nodeType":"YulFunctionCall","src":"13571:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"13586:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13567:3:201"},"nodeType":"YulFunctionCall","src":"13567:86:201"},{"kind":"number","nodeType":"YulLiteral","src":"13655:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13563:3:201"},"nodeType":"YulFunctionCall","src":"13563:95:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"13547:15:201"},"nodeType":"YulFunctionCall","src":"13547:112:201"},"variables":[{"name":"array","nodeType":"YulTypedName","src":"13538:5:201","type":""}]},{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"13675:5:201"},{"name":"_3","nodeType":"YulIdentifier","src":"13682:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13668:6:201"},"nodeType":"YulFunctionCall","src":"13668:17:201"},"nodeType":"YulExpressionStatement","src":"13668:17:201"},{"body":{"nodeType":"YulBlock","src":"13731:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13740:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13743:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13733:6:201"},"nodeType":"YulFunctionCall","src":"13733:12:201"},"nodeType":"YulExpressionStatement","src":"13733:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"13708:2:201"},{"name":"_3","nodeType":"YulIdentifier","src":"13712:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13704:3:201"},"nodeType":"YulFunctionCall","src":"13704:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"13717:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13700:3:201"},"nodeType":"YulFunctionCall","src":"13700:20:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"13722:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13697:2:201"},"nodeType":"YulFunctionCall","src":"13697:33:201"},"nodeType":"YulIf","src":"13694:53:201"},{"expression":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"13782:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"13786:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13778:3:201"},"nodeType":"YulFunctionCall","src":"13778:11:201"},{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"13795:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"13802:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13791:3:201"},"nodeType":"YulFunctionCall","src":"13791:14:201"},{"name":"_3","nodeType":"YulIdentifier","src":"13807:2:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"13756:21:201"},"nodeType":"YulFunctionCall","src":"13756:54:201"},"nodeType":"YulExpressionStatement","src":"13756:54:201"},{"nodeType":"YulAssignment","src":"13819:15:201","value":{"name":"array","nodeType":"YulIdentifier","src":"13829:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13819:6:201"}]}]},"name":"abi_decode_tuple_t_string_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13132:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13143:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13155:6:201","type":""}],"src":"13075:765:201"},{"body":{"nodeType":"YulBlock","src":"13892:148:201","statements":[{"body":{"nodeType":"YulBlock","src":"13983:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"13985:16:201"},"nodeType":"YulFunctionCall","src":"13985:18:201"},"nodeType":"YulExpressionStatement","src":"13985:18:201"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13908:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"13915:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"13905:2:201"},"nodeType":"YulFunctionCall","src":"13905:77:201"},"nodeType":"YulIf","src":"13902:103:201"},{"nodeType":"YulAssignment","src":"14014:20:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14025:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"14032:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14021:3:201"},"nodeType":"YulFunctionCall","src":"14021:13:201"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"14014:3:201"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"13874:5:201","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"13884:3:201","type":""}],"src":"13845:195:201"},{"body":{"nodeType":"YulBlock","src":"14166:99:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14183:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14194:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14176:6:201"},"nodeType":"YulFunctionCall","src":"14176:21:201"},"nodeType":"YulExpressionStatement","src":"14176:21:201"},{"nodeType":"YulAssignment","src":"14206:53:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14232:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14244:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14255:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14240:3:201"},"nodeType":"YulFunctionCall","src":"14240:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"14214:17:201"},"nodeType":"YulFunctionCall","src":"14214:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14206:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14135:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14146:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14157:4:201","type":""}],"src":"14045:220:201"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint40_t_bool__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint40_t_bool__fromStack_reversed(headStart, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 288)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n        mstore(add(headStart, 192), value6)\n        mstore(add(headStart, 224), and(value7, 0xffffffffff))\n        mstore(add(headStart, 256), iszero(iszero(value8)))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint40__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint40__fromStack_reversed(headStart, value11, value10, value9, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 384)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n        mstore(add(headStart, 192), value6)\n        mstore(add(headStart, 224), value7)\n        mstore(add(headStart, 256), value8)\n        mstore(add(headStart, 288), value9)\n        mstore(add(headStart, 320), value10)\n        mstore(add(headStart, 352), and(value11, 0xffffffffff))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_bool_t_bool_t_bool_t_bool_t_bool__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_bool_t_bool_t_bool_t_bool_t_bool__fromStack_reversed(headStart, value9, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 320)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), iszero(iszero(value5)))\n        mstore(add(headStart, 192), iszero(iszero(value6)))\n        mstore(add(headStart, 224), iszero(iszero(value7)))\n        mstore(add(headStart, 256), iszero(iszero(value8)))\n        mstore(add(headStart, 288), iszero(iszero(value9)))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_array$_t_struct$_TokenData_$5577_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_TokenData_$5577_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        let _2 := 64\n        pos := add(headStart, _2)\n        let tail_2 := add(add(headStart, shl(5, length)), _2)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, add(sub(tail_2, headStart), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0))\n            let _3 := mload(srcPtr)\n            let memberValue0 := mload(_3)\n            mstore(tail_2, _2)\n            let tail_3 := abi_encode_string(memberValue0, add(tail_2, _2))\n            mstore(add(tail_2, _1), and(mload(add(_3, _1)), 0xffffffffffffffffffffffffffffffffffffffff))\n            tail_2 := tail_3\n            srcPtr := add(srcPtr, _1)\n            pos := add(pos, _1)\n        }\n        tail := tail_2\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_1859() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 480)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x20) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x20)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        value := memPtr\n        mstore(memPtr, mload(headStart))\n    }\n    function abi_decode_tuple_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, dataEnd)\n    }\n    function abi_decode_uint128_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint40_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint16_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 480) { revert(0, 0) }\n        let value := allocate_memory_1859()\n        mstore(value, abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, dataEnd))\n        mstore(add(value, 32), abi_decode_uint128_fromMemory(add(headStart, 32)))\n        mstore(add(value, 64), abi_decode_uint128_fromMemory(add(headStart, 64)))\n        mstore(add(value, 96), abi_decode_uint128_fromMemory(add(headStart, 96)))\n        mstore(add(value, 128), abi_decode_uint128_fromMemory(add(headStart, 128)))\n        mstore(add(value, 160), abi_decode_uint128_fromMemory(add(headStart, 160)))\n        mstore(add(value, 192), abi_decode_uint40_fromMemory(add(headStart, 192)))\n        mstore(add(value, 224), abi_decode_uint16_fromMemory(add(headStart, 224)))\n        let _1 := 256\n        mstore(add(value, _1), abi_decode_address_fromMemory(add(headStart, _1)))\n        let _2 := 288\n        mstore(add(value, _2), abi_decode_address_fromMemory(add(headStart, _2)))\n        let _3 := 320\n        mstore(add(value, _3), abi_decode_address_fromMemory(add(headStart, _3)))\n        let _4 := 352\n        mstore(add(value, _4), abi_decode_address_fromMemory(add(headStart, _4)))\n        let _5 := 384\n        mstore(add(value, _5), abi_decode_uint128_fromMemory(add(headStart, _5)))\n        let _6 := 416\n        mstore(add(value, _6), abi_decode_uint128_fromMemory(add(headStart, _6)))\n        let _7 := 448\n        mstore(add(value, _7), abi_decode_uint128_fromMemory(add(headStart, _7)))\n        value0 := value\n    }\n    function abi_decode_tuple_t_struct$_UserConfigurationMap_$21322_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, dataEnd)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_decode_tuple_t_uint40_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint40_fromMemory(headStart)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        let _1 := 32\n        if slt(sub(dataEnd, headStart), _1) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n        let _4 := mload(_3)\n        if gt(_4, _2) { panic_error_0x41() }\n        let _5 := shl(5, _4)\n        let dst := allocate_memory(add(_5, _1))\n        let dst_1 := dst\n        mstore(dst, _4)\n        dst := add(dst, _1)\n        let srcEnd := add(add(_3, _5), _1)\n        if gt(srcEnd, dataEnd) { revert(0, 0) }\n        let src := add(_3, _1)\n        for { } lt(src, srcEnd) { src := add(src, _1) }\n        {\n            let value := mload(src)\n            validator_revert_address(value)\n            mstore(dst, value)\n            dst := add(dst, _1)\n        }\n        value0 := dst_1\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := mload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let array := allocate_memory(add(and(add(_3, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), 32))\n        mstore(array, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory(add(_2, 32), add(array, 32), _3)\n        value0 := array\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"6565":[{"length":32,"start":347},{"length":32,"start":1112},{"length":32,"start":1435},{"length":32,"start":1729},{"length":32,"start":3184},{"length":32,"start":4177},{"length":32,"start":4491},{"length":32,"start":4808},{"length":32,"start":5219},{"length":32,"start":5546},{"length":32,"start":6083},{"length":32,"start":6494},{"length":32,"start":6801},{"length":32,"start":7108},{"length":32,"start":8250},{"length":32,"start":8627},{"length":32,"start":8952},{"length":32,"start":9267},{"length":32,"start":10105}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106101515760003560e01c806351460e25116100cd578063b55d990411610081578063d7ed3ef411610066578063d7ed3ef414610425578063f561ae4114610438578063fcf40a621461044057600080fd5b8063b55d9904146103b8578063d2493b6c146103db57600080fd5b806369b169e1116100b257806369b169e1146103895780637ba1ae3614610390578063b316ff89146103a357600080fd5b806351460e25146103635780636744362a1461037657600080fd5b80633c798109116101245780633e150141116101095780633e150141146102c157806346fbe558146103285780634d44ac4f1461035057600080fd5b80633c7981091461029b5780633cb8a622146102ae57600080fd5b80630542975c14610156578063163a0f20146101a757806328dd2d01146101c857806335ea6a7514610228575b600080fd5b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101ba6101b536600461295a565b610453565b60405190815260200161019e565b6101db6101d6366004612977565b61058a565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015264ffffffffff1660e083015215156101008201526101200161019e565b61023b61023636600461295a565b610c5a565b604080519c8d5260208d019b909b52998b019890985260608a0196909652608089019490945260a088019290925260c087015260e086015261010085015261012084015261014083015264ffffffffff166101608201526101800161019e565b6101ba6102a936600461295a565b61104a565b6101ba6102bc36600461295a565b611184565b6102d46102cf36600461295a565b6112b5565b604080519a8b5260208b01999099529789019690965260608801949094526080870192909252151560a0860152151560c0850152151560e0840152151561010083015215156101208201526101400161019e565b61033b61033636600461295a565b61145b565b6040805192835260208301919091520161019e565b6101ba61035e36600461295a565b6115a5565b6101ba61037136600461295a565b6117be565b61017d61038436600461295a565b611959565b60026101ba565b6101ba61039e36600461295a565b611a8a565b6103ab611bbe565b60405161019e9190612a2a565b6103cb6103c636600461295a565b612033565b604051901515815260200161019e565b6103ee6103e936600461295a565b6121ab565b6040805173ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015292169181019190915260600161019e565b6103cb61043336600461295a565b6122f3565b6103ab61242d565b6103cb61044e36600461295a565b612772565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e59190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa158015610553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105779190612beb565b805190915060a81c60ff165b9392505050565b6000806000806000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610604573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106289190612ae4565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e8116600483015291909116906335ea6a75906024016101e060405180830381865afa158015610697573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106bb9190612c4e565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561072a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074e9190612ae4565b6040517f4417a58300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529190911690634417a58390602401602060405180830381865afa1580156107bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e09190612beb565b6101008301516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f811660048301529293509116906370a0823190602401602060405180830381865afa158015610855573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108799190612d71565b6101408301516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f81166004830152929d509116906370a0823190602401602060405180830381865afa1580156108ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109129190612d71565b6101208301516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f81166004830152929b509116906370a0823190602401602060405180830381865afa158015610987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ab9190612d71565b6101208301516040517fc634dfaa00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f81166004830152929c5091169063c634dfaa90602401602060405180830381865afa158015610a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a449190612d71565b6101408301516040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f81166004830152929a50911690631da24f3e90602401602060405180830381865afa158015610ab9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610add9190612d71565b965081604001516fffffffffffffffffffffffffffffffff16945081610120015173ffffffffffffffffffffffffffffffffffffffff1663e78c9b3b8d6040518263ffffffff1660e01b8152600401610b52919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015610b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b939190612d71565b6101208301516040517f79ce6b8c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f811660048301529298509116906379ce6b8c90602401602060405180830381865afa158015610c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2c9190612d8a565b9350610c498260e0015161ffff16826128a890919063ffffffff16565b925050509295985092959850929598565b60008060008060008060008060008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfd9190612ae4565b73ffffffffffffffffffffffffffffffffffffffff166335ea6a758f6040518263ffffffff1660e01b8152600401610d51919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6101e060405180830381865afa158015610d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d939190612c4e565b9050806101a0015181610180015182610100015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e159190612d71565b83610120015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e899190612d71565b84610140015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efd9190612d71565b856040015186608001518760a0015188610120015173ffffffffffffffffffffffffffffffffffffffff166390f6fcf26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f809190612d71565b89602001518a606001518b60c001518b6fffffffffffffffffffffffffffffffff169b508a6fffffffffffffffffffffffffffffffff169a50866fffffffffffffffffffffffffffffffff169650856fffffffffffffffffffffffffffffffff169550846fffffffffffffffffffffffffffffffff169450826fffffffffffffffffffffffffffffffff169250816fffffffffffffffffffffffffffffffff1691509c509c509c509c509c509c509c509c509c509c509c509c505091939597999b5091939597999b565b600061117e7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa15801561114c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111709190612beb565b5160d41c64ffffffffff1690565b92915050565b600061117e7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112189190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa158015611286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112aa9190612beb565b5160981c61ffff1690565b60008060008060008060008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611331573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113559190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e81166004830152919091169063c44b11f790602401602060405180830381865afa1580156113c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e79190612beb565b5160ff603082901c169d61ffff8083169e50601083901c81169d50602083901c81169c50604083901c169a508c151599506704000000000000008216151598506708000000000000008216151597506701000000000000008216151596506702000000000000009091161515945092505050565b60008061159b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f09190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919091169063c44b11f790602401602060405180830381865afa15801561155e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115829190612beb565b51640fffffffff605082901c81169260749290921c1690565b9094909350915050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611613573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116379190612ae4565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291909116906335ea6a75906024016101e060405180830381865afa1580156116a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ca9190612c4e565b905080610140015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561171c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117409190612d71565b81610120015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611790573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b49190612d71565b6105839190612dd4565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561182c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118509190612ae4565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291909116906335ea6a75906024016101e060405180830381865afa1580156118bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e39190612c4e565b905080610100015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611935573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105839190612d71565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb9190612ae4565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291909116906335ea6a75906024016101e060405180830381865afa158015611a5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7e9190612c4e565b61016001519392505050565b600061117e7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611afa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1e9190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb09190612beb565b5160b01c640fffffffff1690565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c519190612ae4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611ca0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611ce69190810190612dec565b90506000815167ffffffffffffffff811115611d0457611d04612b01565b604051908082528060200260200182016040528015611d4a57816020015b604080518082019091526060815260006020820152815260200190600190039081611d225790505b50905060005b825181101561202b57739f8f72aa9304c8b593d555f12ef6589cc3a579a273ffffffffffffffffffffffffffffffffffffffff16838281518110611d9657611d96612e9e565b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611e555760405180604001604052806040518060400160405280600381526020017f4d4b5200000000000000000000000000000000000000000000000000000000008152508152602001848381518110611e1257611e12612e9e565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16815250828281518110611e4557611e45612e9e565b6020026020010181905250612019565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff16838281518110611e9257611e92612e9e565b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611f0e5760405180604001604052806040518060400160405280600381526020017f45544800000000000000000000000000000000000000000000000000000000008152508152602001848381518110611e1257611e12612e9e565b6040518060400160405280848381518110611f2b57611f2b612e9e565b602002602001015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611f7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611fc39190810190612ecd565b8152602001848381518110611fda57611fda612e9e565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1681525082828151811061200d5761200d612e9e565b60200260200101819052505b8061202381612f7f565b915050611d50565b509392505050565b60006121a17f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c79190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa158015612135573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121599190612beb565b51670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b9695505050505050565b6000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122409190612ae4565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015291909116906335ea6a75906024016101e060405180830381865afa1580156122af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d39190612c4e565b610100810151610120820151610140909201519097919650945092505050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612361573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123859190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa1580156123f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124179190612beb565b9050610583815167800000000000000016151590565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561249c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c09190612ae4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561250f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526125559190810190612dec565b90506000815167ffffffffffffffff81111561257357612573612b01565b6040519080825280602002602001820160405280156125b957816020015b6040805180820190915260608152600060208201528152602001906001900390816125915790505b50905060005b825181101561202b5760008473ffffffffffffffffffffffffffffffffffffffff166335ea6a758584815181106125f8576125f8612e9e565b60200260200101516040518263ffffffff1660e01b8152600401612638919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6101e060405180830381865afa158015612656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267a9190612c4e565b9050604051806040016040528082610100015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156126d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261271d9190810190612ecd565b815260200182610100015173ffffffffffffffffffffffffffffffffffffffff1681525083838151811061275357612753612e9e565b602002602001018190525050808061276a90612f7f565b9150506125bf565b600061117e7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128069190612ae4565b6040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152919091169063c44b11f790602401602060405180830381865afa158015612874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128989190612beb565b5167400000000000000016151590565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291a9190612fb8565b60405180910390fd5b50509051600191821b82011c16151590565b73ffffffffffffffffffffffffffffffffffffffff8116811461295757600080fd5b50565b60006020828403121561296c57600080fd5b813561058381612935565b6000806040838503121561298a57600080fd5b823561299581612935565b915060208301356129a581612935565b809150509250929050565b60005b838110156129cb5781810151838201526020016129b3565b838111156129da576000848401525b50505050565b600081518084526129f88160208601602086016129b0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015612ac6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc089840301855281518051878552612a93888601826129e0565b9189015173ffffffffffffffffffffffffffffffffffffffff169489019490945294870194925090860190600101612a51565b509098975050505050505050565b8051612adf81612935565b919050565b600060208284031215612af657600080fd5b815161058381612935565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff81118282101715612b5457612b54612b01565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612ba157612ba1612b01565b604052919050565b600060208284031215612bbb57600080fd5b6040516020810181811067ffffffffffffffff82111715612bde57612bde612b01565b6040529151825250919050565b600060208284031215612bfd57600080fd5b6105838383612ba9565b80516fffffffffffffffffffffffffffffffff81168114612adf57600080fd5b805164ffffffffff81168114612adf57600080fd5b805161ffff81168114612adf57600080fd5b60006101e08284031215612c6157600080fd5b612c69612b30565b612c738484612ba9565b8152612c8160208401612c07565b6020820152612c9260408401612c07565b6040820152612ca360608401612c07565b6060820152612cb460808401612c07565b6080820152612cc560a08401612c07565b60a0820152612cd660c08401612c27565b60c0820152612ce760e08401612c3c565b60e0820152610100612cfa818501612ad4565b90820152610120612d0c848201612ad4565b90820152610140612d1e848201612ad4565b90820152610160612d30848201612ad4565b90820152610180612d42848201612c07565b908201526101a0612d54848201612c07565b908201526101c0612d66848201612c07565b908201529392505050565b600060208284031215612d8357600080fd5b5051919050565b600060208284031215612d9c57600080fd5b61058382612c27565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612de757612de7612da5565b500190565b60006020808385031215612dff57600080fd5b825167ffffffffffffffff80821115612e1757600080fd5b818501915085601f830112612e2b57600080fd5b815181811115612e3d57612e3d612b01565b8060051b9150612e4e848301612b5a565b8181529183018401918481019088841115612e6857600080fd5b938501935b83851015612e925784519250612e8283612935565b8282529385019390850190612e6d565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215612edf57600080fd5b815167ffffffffffffffff80821115612ef757600080fd5b818401915084601f830112612f0b57600080fd5b815181811115612f1d57612f1d612b01565b612f4e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612b5a565b9150808252856020828501011115612f6557600080fd5b612f768160208401602086016129b0565b50949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612fb157612fb1612da5565b5060010190565b60208152600061058360208301846129e056fea2646970667358221220ea702229777ba1ac8c4c076bf412424b038d2c783073101cb6591fc8a5b42d9c64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x151 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x51460E25 GT PUSH2 0xCD JUMPI DUP1 PUSH4 0xB55D9904 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xD7ED3EF4 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xD7ED3EF4 EQ PUSH2 0x425 JUMPI DUP1 PUSH4 0xF561AE41 EQ PUSH2 0x438 JUMPI DUP1 PUSH4 0xFCF40A62 EQ PUSH2 0x440 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB55D9904 EQ PUSH2 0x3B8 JUMPI DUP1 PUSH4 0xD2493B6C EQ PUSH2 0x3DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x69B169E1 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x69B169E1 EQ PUSH2 0x389 JUMPI DUP1 PUSH4 0x7BA1AE36 EQ PUSH2 0x390 JUMPI DUP1 PUSH4 0xB316FF89 EQ PUSH2 0x3A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x51460E25 EQ PUSH2 0x363 JUMPI DUP1 PUSH4 0x6744362A EQ PUSH2 0x376 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3C798109 GT PUSH2 0x124 JUMPI DUP1 PUSH4 0x3E150141 GT PUSH2 0x109 JUMPI DUP1 PUSH4 0x3E150141 EQ PUSH2 0x2C1 JUMPI DUP1 PUSH4 0x46FBE558 EQ PUSH2 0x328 JUMPI DUP1 PUSH4 0x4D44AC4F EQ PUSH2 0x350 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3C798109 EQ PUSH2 0x29B JUMPI DUP1 PUSH4 0x3CB8A622 EQ PUSH2 0x2AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0x163A0F20 EQ PUSH2 0x1A7 JUMPI DUP1 PUSH4 0x28DD2D01 EQ PUSH2 0x1C8 JUMPI DUP1 PUSH4 0x35EA6A75 EQ PUSH2 0x228 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x17D PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1BA PUSH2 0x1B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x453 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x1DB PUSH2 0x1D6 CALLDATASIZE PUSH1 0x4 PUSH2 0x2977 JUMP JUMPDEST PUSH2 0x58A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP10 DUP11 MSTORE PUSH1 0x20 DUP11 ADD SWAP9 SWAP1 SWAP9 MSTORE SWAP7 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x60 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x80 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xC0 DUP5 ADD MSTORE PUSH5 0xFFFFFFFFFF AND PUSH1 0xE0 DUP4 ADD MSTORE ISZERO ISZERO PUSH2 0x100 DUP3 ADD MSTORE PUSH2 0x120 ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x23B PUSH2 0x236 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0xC5A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP13 DUP14 MSTORE PUSH1 0x20 DUP14 ADD SWAP12 SWAP1 SWAP12 MSTORE SWAP10 DUP12 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH1 0x60 DUP11 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x80 DUP10 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0xA0 DUP9 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC0 DUP8 ADD MSTORE PUSH1 0xE0 DUP7 ADD MSTORE PUSH2 0x100 DUP6 ADD MSTORE PUSH2 0x120 DUP5 ADD MSTORE PUSH2 0x140 DUP4 ADD MSTORE PUSH5 0xFFFFFFFFFF AND PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x180 ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x1BA PUSH2 0x2A9 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x104A JUMP JUMPDEST PUSH2 0x1BA PUSH2 0x2BC CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x1184 JUMP JUMPDEST PUSH2 0x2D4 PUSH2 0x2CF CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x12B5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP11 DUP12 MSTORE PUSH1 0x20 DUP12 ADD SWAP10 SWAP1 SWAP10 MSTORE SWAP8 DUP10 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x60 DUP9 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x80 DUP8 ADD SWAP3 SWAP1 SWAP3 MSTORE ISZERO ISZERO PUSH1 0xA0 DUP7 ADD MSTORE ISZERO ISZERO PUSH1 0xC0 DUP6 ADD MSTORE ISZERO ISZERO PUSH1 0xE0 DUP5 ADD MSTORE ISZERO ISZERO PUSH2 0x100 DUP4 ADD MSTORE ISZERO ISZERO PUSH2 0x120 DUP3 ADD MSTORE PUSH2 0x140 ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x33B PUSH2 0x336 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x145B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x1BA PUSH2 0x35E CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x15A5 JUMP JUMPDEST PUSH2 0x1BA PUSH2 0x371 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x17BE JUMP JUMPDEST PUSH2 0x17D PUSH2 0x384 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x1959 JUMP JUMPDEST PUSH1 0x2 PUSH2 0x1BA JUMP JUMPDEST PUSH2 0x1BA PUSH2 0x39E CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x1A8A JUMP JUMPDEST PUSH2 0x3AB PUSH2 0x1BBE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x19E SWAP2 SWAP1 PUSH2 0x2A2A JUMP JUMPDEST PUSH2 0x3CB PUSH2 0x3C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x2033 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x3EE PUSH2 0x3E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x21AB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 DUP5 AND PUSH1 0x20 DUP5 ADD MSTORE SWAP3 AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD PUSH2 0x19E JUMP JUMPDEST PUSH2 0x3CB PUSH2 0x433 CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x22F3 JUMP JUMPDEST PUSH2 0x3AB PUSH2 0x242D JUMP JUMPDEST PUSH2 0x3CB PUSH2 0x44E CALLDATASIZE PUSH1 0x4 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x2772 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4E5 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x553 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x577 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0xA8 SHR PUSH1 0xFF AND JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x604 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x628 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x697 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6BB SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x72A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x74E SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4417A58300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x4417A583 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7E0 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP4 POP SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x855 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x879 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP14 POP SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8EE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x912 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP12 POP SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x987 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9AB SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xC634DFAA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP13 POP SWAP2 AND SWAP1 PUSH4 0xC634DFAA SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA20 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA44 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP11 POP SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAB9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xADD SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST SWAP7 POP DUP2 PUSH1 0x40 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 POP DUP2 PUSH2 0x120 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xE78C9B3B DUP14 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xB52 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB6F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB93 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x79CE6B8C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP9 POP SWAP2 AND SWAP1 PUSH4 0x79CE6B8C SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC08 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC2C SWAP2 SWAP1 PUSH2 0x2D8A JUMP JUMPDEST SWAP4 POP PUSH2 0xC49 DUP3 PUSH1 0xE0 ADD MLOAD PUSH2 0xFFFF AND DUP3 PUSH2 0x28A8 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP3 POP POP POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCD9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCFD SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x35EA6A75 DUP16 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD51 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD6F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD93 SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1A0 ADD MLOAD DUP2 PUSH2 0x180 ADD MLOAD DUP3 PUSH2 0x100 ADD MLOAD 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 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDF1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE15 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST DUP4 PUSH2 0x120 ADD MLOAD 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 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE65 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE89 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST DUP5 PUSH2 0x140 ADD MLOAD 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 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xED9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEFD SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST DUP6 PUSH1 0x40 ADD MLOAD DUP7 PUSH1 0x80 ADD MLOAD DUP8 PUSH1 0xA0 ADD MLOAD DUP9 PUSH2 0x120 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x90F6FCF2 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF5C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF80 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST DUP10 PUSH1 0x20 ADD MLOAD DUP11 PUSH1 0x60 ADD MLOAD DUP12 PUSH1 0xC0 ADD MLOAD DUP12 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP12 POP DUP11 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP11 POP DUP7 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP7 POP DUP6 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP6 POP DUP5 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 POP DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 POP DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP SWAP13 POP POP SWAP2 SWAP4 SWAP6 SWAP8 SWAP10 SWAP12 POP SWAP2 SWAP4 SWAP6 SWAP8 SWAP10 SWAP12 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x117E PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10BA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10DE SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x114C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1170 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x117E PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11F4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1218 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1286 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12AA SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH1 0x98 SHR PUSH2 0xFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1331 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1355 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13C3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13E7 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH1 0xFF PUSH1 0x30 DUP3 SWAP1 SHR AND SWAP14 PUSH2 0xFFFF DUP1 DUP4 AND SWAP15 POP PUSH1 0x10 DUP4 SWAP1 SHR DUP2 AND SWAP14 POP PUSH1 0x20 DUP4 SWAP1 SHR DUP2 AND SWAP13 POP PUSH1 0x40 DUP4 SWAP1 SHR AND SWAP11 POP DUP13 ISZERO ISZERO SWAP10 POP PUSH8 0x400000000000000 DUP3 AND ISZERO ISZERO SWAP9 POP PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP8 POP PUSH8 0x100000000000000 DUP3 AND ISZERO ISZERO SWAP7 POP PUSH8 0x200000000000000 SWAP1 SWAP2 AND ISZERO ISZERO SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x159B PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14F0 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x155E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1582 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH5 0xFFFFFFFFF PUSH1 0x50 DUP3 SWAP1 SHR DUP2 AND SWAP3 PUSH1 0x74 SWAP3 SWAP1 SWAP3 SHR AND SWAP1 JUMP JUMPDEST SWAP1 SWAP5 SWAP1 SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1613 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1637 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16A6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16CA SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x140 ADD MLOAD 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 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x171C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1740 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST DUP2 PUSH2 0x120 ADD MLOAD 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 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1790 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x17B4 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH2 0x583 SWAP2 SWAP1 PUSH2 0x2DD4 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x182C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1850 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18E3 SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x100 ADD MLOAD 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 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1935 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x583 SWAP2 SWAP1 PUSH2 0x2D71 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19EB SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A5A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A7E SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST PUSH2 0x160 ADD MLOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x117E PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AFA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B1E SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B8C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1BB0 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH1 0xB0 SHR PUSH5 0xFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C2D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C51 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD1946DBC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CA0 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 0x1CE6 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2DEC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1D04 JUMPI PUSH2 0x1D04 PUSH2 0x2B01 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1D4A JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1D22 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x202B JUMPI PUSH20 0x9F8F72AA9304C8B593D555F12EF6589CC3A579A2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1D96 JUMPI PUSH2 0x1D96 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1E55 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4D4B520000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1E12 JUMPI PUSH2 0x1E12 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E45 JUMPI PUSH2 0x1E45 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP PUSH2 0x2019 JUMP JUMPDEST PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E92 JUMPI PUSH2 0x1E92 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1F0E JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4554480000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1E12 JUMPI PUSH2 0x1E12 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1F2B JUMPI PUSH2 0x1F2B PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F7D 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 0x1FC3 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2ECD JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1FDA JUMPI PUSH2 0x1FDA PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x200D JUMPI PUSH2 0x200D PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP JUMPDEST DUP1 PUSH2 0x2023 DUP2 PUSH2 0x2F7F JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1D50 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x21A1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20A3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x20C7 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2135 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2159 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x221C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2240 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22AF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x22D3 SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x120 DUP3 ADD MLOAD PUSH2 0x140 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP8 SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2361 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2385 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23F3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2417 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST SWAP1 POP PUSH2 0x583 DUP2 MLOAD PUSH8 0x8000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x249C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x24C0 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD1946DBC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x250F 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 0x2555 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2DEC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2573 JUMPI PUSH2 0x2573 PUSH2 0x2B01 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x25B9 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x2591 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x202B JUMPI PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x35EA6A75 DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x25F8 JUMPI PUSH2 0x25F8 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2638 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2656 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x267A SWAP2 SWAP1 PUSH2 0x2C4E JUMP JUMPDEST SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 DUP3 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26D7 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 0x271D SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2ECD JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2753 JUMPI PUSH2 0x2753 PUSH2 0x2E9E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP POP DUP1 DUP1 PUSH2 0x276A SWAP1 PUSH2 0x2F7F JUMP JUMPDEST SWAP2 POP POP PUSH2 0x25BF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x117E PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x27E2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2806 SWAP2 SWAP1 PUSH2 0x2AE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2874 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2898 SWAP2 SWAP1 PUSH2 0x2BEB JUMP JUMPDEST MLOAD PUSH8 0x4000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x2923 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x291A SWAP2 SWAP1 PUSH2 0x2FB8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL DUP3 ADD SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2957 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x296C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x583 DUP2 PUSH2 0x2935 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x298A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2995 DUP2 PUSH2 0x2935 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x29A5 DUP2 PUSH2 0x2935 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x29CB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x29B3 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x29DA JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x29F8 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x29B0 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD DUP5 DUP9 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2AC6 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP10 DUP5 SUB ADD DUP6 MSTORE DUP2 MLOAD DUP1 MLOAD DUP8 DUP6 MSTORE PUSH2 0x2A93 DUP9 DUP7 ADD DUP3 PUSH2 0x29E0 JUMP JUMPDEST SWAP2 DUP10 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP5 DUP10 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP5 DUP8 ADD SWAP5 SWAP3 POP SWAP1 DUP7 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2A51 JUMP JUMPDEST POP SWAP1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2ADF DUP2 PUSH2 0x2935 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2AF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x583 DUP2 PUSH2 0x2935 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2B54 JUMPI PUSH2 0x2B54 PUSH2 0x2B01 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2BA1 JUMPI PUSH2 0x2BA1 PUSH2 0x2B01 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2BBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x2BDE JUMPI PUSH2 0x2BDE PUSH2 0x2B01 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2BFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x583 DUP4 DUP4 PUSH2 0x2BA9 JUMP JUMPDEST DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2ADF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2ADF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x2ADF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2C69 PUSH2 0x2B30 JUMP JUMPDEST PUSH2 0x2C73 DUP5 DUP5 PUSH2 0x2BA9 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x2C81 PUSH1 0x20 DUP5 ADD PUSH2 0x2C07 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2C92 PUSH1 0x40 DUP5 ADD PUSH2 0x2C07 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x2CA3 PUSH1 0x60 DUP5 ADD PUSH2 0x2C07 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x2CB4 PUSH1 0x80 DUP5 ADD PUSH2 0x2C07 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x2CC5 PUSH1 0xA0 DUP5 ADD PUSH2 0x2C07 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x2CD6 PUSH1 0xC0 DUP5 ADD PUSH2 0x2C27 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x2CE7 PUSH1 0xE0 DUP5 ADD PUSH2 0x2C3C JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x2CFA DUP2 DUP6 ADD PUSH2 0x2AD4 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x2D0C DUP5 DUP3 ADD PUSH2 0x2AD4 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x2D1E DUP5 DUP3 ADD PUSH2 0x2AD4 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x2D30 DUP5 DUP3 ADD PUSH2 0x2AD4 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x2D42 DUP5 DUP3 ADD PUSH2 0x2C07 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x2D54 DUP5 DUP3 ADD PUSH2 0x2C07 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x2D66 DUP5 DUP3 ADD PUSH2 0x2C07 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D9C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x583 DUP3 PUSH2 0x2C27 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x2DE7 JUMPI PUSH2 0x2DE7 PUSH2 0x2DA5 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2DFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2E17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2E2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x2E3D JUMPI PUSH2 0x2E3D PUSH2 0x2B01 JUMP JUMPDEST DUP1 PUSH1 0x5 SHL SWAP2 POP PUSH2 0x2E4E DUP5 DUP4 ADD PUSH2 0x2B5A JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 DUP4 ADD DUP5 ADD SWAP2 DUP5 DUP2 ADD SWAP1 DUP9 DUP5 GT ISZERO PUSH2 0x2E68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP4 DUP6 LT ISZERO PUSH2 0x2E92 JUMPI DUP5 MLOAD SWAP3 POP PUSH2 0x2E82 DUP4 PUSH2 0x2935 JUMP JUMPDEST DUP3 DUP3 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP1 DUP6 ADD SWAP1 PUSH2 0x2E6D JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2EDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2EF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2F0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x2F1D JUMPI PUSH2 0x2F1D PUSH2 0x2B01 JUMP JUMPDEST PUSH2 0x2F4E PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x2B5A JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP6 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x2F65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F76 DUP2 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x29B0 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x2FB1 JUMPI PUSH2 0x2FB1 PUSH2 0x2DA5 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x583 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x29E0 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEA PUSH17 0x2229777BA1AC8C4C076BF412424B038D2C PUSH25 0x3073101CB6591FC8A5B42D9C64736F6C634300080A00330000 ","sourceMap":"970:9398:51:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1367:58;;;;;;;;221:42:201;209:55;;;191:74;;179:2;164:18;1367:58:51;;;;;;;;3969:268;;;;;;:::i;:::-;;:::i;:::-;;;833:25:201;;;821:2;806:18;3969:268:51;687:177:201;7742:1480:51;;;;;;:::i;:::-;;:::i;:::-;;;;1625:25:201;;;1681:2;1666:18;;1659:34;;;;1709:18;;;1702:34;;;;1767:2;1752:18;;1745:34;;;;1810:3;1795:19;;1788:35;;;;1854:3;1839:19;;1832:35;1898:3;1883:19;;1876:35;1960:12;1948:25;1942:3;1927:19;;1920:54;2018:14;2011:22;2005:3;1990:19;;1983:51;1612:3;1597:19;7742:1480:51;1262:778:201;5828:1178:51;;;;;;:::i;:::-;;:::i;:::-;;;;2500:25:201;;;2556:2;2541:18;;2534:34;;;;2584:18;;;2577:34;;;;2642:2;2627:18;;2620:34;;;;2685:3;2670:19;;2663:35;;;;2729:3;2714:19;;2707:35;;;;2773:3;2758:19;;2751:35;2817:3;2802:19;;2795:35;2861:3;2846:19;;2839:35;2905:3;2890:19;;2883:35;2949:3;2934:19;;2927:36;3013:12;3000:26;2994:3;2979:19;;2972:55;2487:3;2472:19;5828:1178:51;2045:988:201;5439:174:51;;;;;;:::i;:::-;;:::i;4981:196::-;;;;;;:::i;:::-;;:::i;3123:806::-;;;;;;:::i;:::-;;:::i;:::-;;;;3407:25:201;;;3463:2;3448:18;;3441:34;;;;3491:18;;;3484:34;;;;3549:2;3534:18;;3527:34;;;;3592:3;3577:19;;3570:35;;;;3649:14;3642:22;3636:3;3621:19;;3614:51;3709:14;3702:22;3696:3;3681:19;;3674:51;3769:14;3762:22;3756:3;3741:19;;3734:51;3829:14;3822:22;3816:3;3801:19;;3794:51;3889:14;3882:22;3876:3;3861:19;;3854:51;3394:3;3379:19;3123:806:51;3038:873:201;4277:222:51;;;;;;:::i;:::-;;:::i;:::-;;;;4090:25:201;;;4146:2;4131:18;;4124:34;;;;4063:18;4277:222:51;3916:248:201;7355:347:51;;;;;;:::i;:::-;;:::i;7046:269::-;;;;;;:::i;:::-;;:::i;9769:292::-;;;;;;:::i;:::-;;:::i;5653:135::-;5235:1:72;5653:135:51;;5217:182;;;;;;:::i;:::-;;:::i;1690:776::-;;;:::i;:::-;;;;;;;:::i;4539:183::-;;;;;;:::i;:::-;;:::i;:::-;;;6327:14:201;;6320:22;6302:41;;6290:2;6275:18;4539:183:51;6162:187:201;9262:467:51;;;;;;:::i;:::-;;:::i;:::-;;;;6566:42:201;6635:15;;;6617:34;;6687:15;;;6682:2;6667:18;;6660:43;6739:15;;6719:18;;;6712:43;;;;6544:2;6529:18;9262:467:51;6354:407:201;10101:265:51;;;;;;:::i;:::-;;:::i;2506:577::-;;;:::i;4762:179::-;;;;;;:::i;:::-;;:::i;3969:268::-;4049:7;4064:54;4127:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4121:66;;;;;:59;209:55:201;;;4121:66:51;;;191:74:201;4121:59:51;;;;;;;164:18:201;;4121:66:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20324:9:72;;4064:123:51;;-1:-1:-1;4339:3:72;20323:71;;;4200:32:51;4193:39;3969:268;-1:-1:-1;;;3969:268:51:o;7742:1480::-;7866:28;7902:25;7935:27;7970;8005:26;8039:24;8071:21;8100:28;8136:29;8180:36;8225:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8219:69;;;;;:50;209:55:201;;;8219:69:51;;;191:74:201;8219:50:51;;;;;;;164:18:201;;8219:69:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8180:108;;8295:48;8352:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8346:69;;;;;:63;209:55:201;;;8346:69:51;;;191:74:201;8346:63:51;;;;;;;164:18:201;;8346:69:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8460:21;;;;8445:53;;;;;:47;209:55:201;;;8445:53:51;;;191:74:201;8295:120:51;;-1:-1:-1;8445:47:51;;;;;164:18:201;;8445:53:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8541:32;;;;8526:64;;;;;:58;209:55:201;;;8526:64:51;;;191:74:201;8422:76:51;;-1:-1:-1;8526:58:51;;;;;164:18:201;;8526:64:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8631:30;;;;8616:62;;;;;:56;209:55:201;;;8616:62:51;;;191:74:201;8504:86:51;;-1:-1:-1;8616:56:51;;;;;164:18:201;;8616:62:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8723:30;;;;8706:73;;;;;:67;209:55:201;;;8706:73:51;;;191:74:201;8596:82:51;;-1:-1:-1;8706:67:51;;;;;164:18:201;;8706:73:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8825:32;;;;8806:74;;;;;:68;209:55:201;;;8806:74:51;;;191::201;8684:95:51;;-1:-1:-1;8806:68:51;;;;;164:18:201;;8806:74:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8785:95;;8902:7;:28;;;8886:44;;;;8972:7;:30;;;8955:66;;;9022:4;8955:72;;;;;;;;;;;;;;221:42:201;209:55;;;;191:74;;179:2;164:18;;14:257;8955:72:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9074:30;;;;9057:85;;;;;:67;209:55:201;;;9057:85:51;;;191:74:201;8936:91:51;;-1:-1:-1;9057:67:51;;;;;164:18:201;;9057:85:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9033:109;;9175:42;9206:7;:10;;;9175:42;;:10;:30;;:42;;;;:::i;:::-;9148:69;;8174:1048;;7742:1480;;;;;;;;;;;:::o;5828:1178::-;5930:16;5954:31;5993:19;6020:23;6051:25;6084:21;6113:26;6147:24;6179:31;6218:22;6248:27;6283:26;6324:36;6369:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6363:50;;;6421:5;6363:69;;;;;;;;;;;;;;221:42:201;209:55;;;;191:74;;179:2;164:18;;14:257;6363:69:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6324:108;;6454:7;:16;;;6478:7;:25;;;6526:7;:21;;;6511:49;;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6585:7;:30;;;6570:58;;;:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6653:7;:32;;;6638:60;;;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6708:7;:28;;;6744:7;:33;;;6785:7;:31;;;6841:7;:30;;;6824:69;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6903:7;:22;;;6933:7;:27;;;6968:7;:27;;;6439:562;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5828:1178;;;;;;;;;;;;;:::o;5439:174::-;5510:7;5532:76;5538:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5532:59;;;;;:52;209:55:201;;;5532:59:51;;;191:74:201;5532:52:51;;;;;;;164:18:201;;5532:59:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17634:9:72;4478:3;17633:67;;;;17509:196;5532:76:51;5525:83;5439:174;-1:-1:-1;;5439:174:51:o;4981:196::-;5063:7;5085:87;5091:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5085:59;;;;;:52;209:55:201;;;5085:59:51;;;191:74:201;5085:52:51;;;;;;;164:18:201;;5085:59:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18604:9:72;4270:3;18603:91;;;;18462:237;3123:806:51;3238:16;3262:11;3281:28;3317:24;3349:21;3378:29;3415:21;3444:28;3480:13;3501;3529:54;3592:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3586:66;;;;;:59;209:55:201;;;3586:66:51;;;191:74:201;3586:59:51;;;;;;;164:18:201;;3586:66:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22631:9:72;22869:67;3439:2;22869:67;;;;;22674:9;22662:21;;;;-1:-1:-1;3298:2:72;22691:85;;;;;;-1:-1:-1;3369:2:72;22784:77;;;;;;-1:-1:-1;4063:2:72;22944:71;;;;;-1:-1:-1;3899:25:51;;;;-1:-1:-1;21857:15:72;21845:27;;21844:34;;;-1:-1:-1;21899:22:72;21887:34;;21886:41;;;-1:-1:-1;21779:12:72;21767:24;;21766:31;;;-1:-1:-1;21818:12:72;21806:24;;;21805:31;;;-1:-1:-1;3123:806:51;-1:-1:-1;;;3123:806:51:o;4277:222::-;4356:17;4375;4425:69;4431:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4425:59;;;;;:52;209:55:201;;;4425:59:51;;;191:74:201;4425:52:51;;;;;;;164:18:201;;4425:59:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23476:9:72;23507:63;4127:2;23507:63;;;;;;4191:3;23578:63;;;;;;23337:315;4425:69:51;4400:94;;;;-1:-1:-1;4277:222:51;-1:-1:-1;;4277:222:51:o;7355:347::-;7424:7;7439:36;7484:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7478:69;;;;;:50;209:55:201;;;7478:69:51;;;191:74:201;7478:50:51;;;;;;;164:18:201;;7478:69:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7439:108;;7650:7;:32;;;7635:60;;;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7581:7;:30;;;7566:58;;;:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:131;;;;:::i;7046:269::-;7123:7;7138:36;7183:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7177:69;;;;;:50;209:55:201;;;7177:69:51;;;191:74:201;7177:50:51;;;;;;;164:18:201;;7177:69:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7138:108;;7274:7;:21;;;7259:49;;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9769:292::-;9864:25;9897:36;9942:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9936:69;;;;;:50;209:55:201;;;9936:69:51;;;191:74:201;9936:50:51;;;;;;;164:18:201;;9936:69:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10020:35;;;;9769:292;-1:-1:-1;;;9769:292:51:o;5217:182::-;5292:7;5314:80;5320:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5314:59;;;;;:52;209:55:201;;;5314:59:51;;;191:74:201;5314:52:51;;;;;;;164:18:201;;5314:59:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19491:9:72;4411:3;19490:77;;;;19362:210;1690:776:51;1754:18;1780:10;1799:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1780:48;;1834:25;1862:4;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1834:50;;1890:33;1942:8;:15;1926:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;1926:32:51;;;;;;;;;;;;;;;;1890:68;;1969:9;1964:471;1988:8;:15;1984:1;:19;1964:471;;;1215:42;2022:18;;:8;2031:1;2022:11;;;;;;;;:::i;:::-;;;;;;;:18;;;2018:134;;;2072:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2112:8;2121:1;2112:11;;;;;;;;:::i;:::-;;;;;;;2072:53;;;;;2052:14;2067:1;2052:17;;;;;;;;:::i;:::-;;;;;;:73;;;;2135:8;;2018:134;1284:42;2163:18;;:8;2172:1;2163:11;;;;;;;;:::i;:::-;;;;;;;:18;;;2159:134;;;2213:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2253:8;2262:1;2253:11;;;;;;;;:::i;2159:134::-;2320:108;;;;;;;;2363:8;2372:1;2363:11;;;;;;;;:::i;:::-;;;;;;;2348:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2320:108;;;;2408:8;2417:1;2408:11;;;;;;;;:::i;:::-;;;;;;;2320:108;;;;;2300:14;2315:1;2300:17;;;;;;;;:::i;:::-;;;;;;:128;;;;1964:471;2005:3;;;;:::i;:::-;;;;1964:471;;;-1:-1:-1;2447:14:51;1690:776;-1:-1:-1;;;1690:776:51:o;4539:183::-;4605:13;4647:70;4653:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4647:59;;;;;:52;209:55:201;;;4647:59:51;;;191:74:201;4647:52:51;;;;;;;164:18:201;;4647:59:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21735:9:72;21779:12;21767:24;;21766:31;;;21818:12;21806:24;;21805:31;;;21857:15;21845:27;;21844:34;;;21899:22;21887:34;;21886:41;;;21948:12;21936:24;21935:31;;;21583:394;4647:70:51;4626:91;4539:183;-1:-1:-1;;;;;;4539:183:51:o;9262:467::-;9375:21;9404:30;9442:32;9489:36;9534:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9528:69;;;;;:50;209:55:201;;;9528:69:51;;;191:74:201;9528:50:51;;;;;;;164:18:201;;9528:69:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9619:21;;;;9648:30;;;;9686:32;;;;;9619:21;;9648:30;;-1:-1:-1;9686:32:51;-1:-1:-1;9262:467:51;-1:-1:-1;;;9262:467:51:o;10101:265::-;10177:4;10189:54;10252:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10246:66;;;;;:59;209:55:201;;;10246:66:51;;;191:74:201;10246:59:51;;;;;;;164:18:201;;10246:66:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10189:123;;10326:35;:13;21149:9:72;21161:23;21149:35;21148:42;;;21022:173;2506:577:51;2563:18;2589:10;2608:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2589:48;;2643:25;2671:4;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2643:50;;2699:26;2744:8;:15;2728:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;2728:32:51;;;;;;;;;;;;;;;;2699:61;;2771:9;2766:293;2790:8;:15;2786:1;:19;2766:293;;;2820:40;2863:4;:19;;;2883:8;2892:1;2883:11;;;;;;;;:::i;:::-;;;;;;;2863:32;;;;;;;;;;;;;;221:42:201;209:55;;;;191:74;;179:2;164:18;;14:257;2863:32:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2820:75;;2916:136;;;;;;;;2959:11;:25;;;2944:48;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2916:136;;;;3018:11;:25;;;2916:136;;;;;2903:7;2911:1;2903:10;;;;;;;;:::i;:::-;;;;;;:149;;;;2812:247;2807:3;;;;;:::i;:::-;;;;2766:293;;4762:179;4837:4;4856:80;4862:18;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4856:59;;;;;:52;209:55:201;;;4856:59:51;;;191:74:201;4856:52:51;;;;;;;164:18:201;;4856:59:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12837:9:72;12849:22;12837:34;12836:41;;;12711:171;3638:328:73;3862:28;;;;;;;;;;;;;;;;;3768:4;;5284:3:72;3806:54:73;;3798:93;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;3907:9:73;;3938:1;3922:17;;;3921:23;;3907:38;3906:44;:49;;;3638:328::o;276:154:201:-;362:42;355:5;351:54;344:5;341:65;331:93;;420:1;417;410:12;331:93;276:154;:::o;435:247::-;494:6;547:2;535:9;526:7;522:23;518:32;515:52;;;563:1;560;553:12;515:52;602:9;589:23;621:31;646:5;621:31;:::i;869:388::-;937:6;945;998:2;986:9;977:7;973:23;969:32;966:52;;;1014:1;1011;1004:12;966:52;1053:9;1040:23;1072:31;1097:5;1072:31;:::i;:::-;1122:5;-1:-1:-1;1179:2:201;1164:18;;1151:32;1192:33;1151:32;1192:33;:::i;:::-;1244:7;1234:17;;;869:388;;;;;:::o;4400:258::-;4472:1;4482:113;4496:6;4493:1;4490:13;4482:113;;;4572:11;;;4566:18;4553:11;;;4546:39;4518:2;4511:10;4482:113;;;4613:6;4610:1;4607:13;4604:48;;;4648:1;4639:6;4634:3;4630:16;4623:27;4604:48;;4400:258;;;:::o;4663:317::-;4705:3;4743:5;4737:12;4770:6;4765:3;4758:19;4786:63;4842:6;4835:4;4830:3;4826:14;4819:4;4812:5;4808:16;4786:63;:::i;:::-;4894:2;4882:15;4899:66;4878:88;4869:98;;;;4969:4;4865:109;;4663:317;-1:-1:-1;;4663:317:201:o;4985:1172::-;5181:4;5210:2;5250;5239:9;5235:18;5280:2;5269:9;5262:21;5303:6;5338;5332:13;5369:6;5361;5354:22;5395:2;5385:12;;5428:2;5417:9;5413:18;5406:25;;5490:2;5480:6;5477:1;5473:14;5462:9;5458:30;5454:39;5528:2;5520:6;5516:15;5549:1;5559:569;5573:6;5570:1;5567:13;5559:569;;;5662:66;5650:9;5642:6;5638:22;5634:95;5629:3;5622:108;5759:6;5753:13;5805:2;5799:9;5836:2;5828:6;5821:18;5866:48;5910:2;5902:6;5898:15;5884:12;5866:48;:::i;:::-;5961:11;;;5955:18;5975:42;5951:67;5934:15;;;5927:92;;;;6106:12;;;;5852:62;-1:-1:-1;6071:15:201;;;;5595:1;5588:9;5559:569;;;-1:-1:-1;6145:6:201;;4985:1172;-1:-1:-1;;;;;;;;4985:1172:201:o;6766:138::-;6845:13;;6867:31;6845:13;6867:31;:::i;:::-;6766:138;;;:::o;6909:251::-;6979:6;7032:2;7020:9;7011:7;7007:23;7003:32;7000:52;;;7048:1;7045;7038:12;7000:52;7080:9;7074:16;7099:31;7124:5;7099:31;:::i;7165:184::-;7217:77;7214:1;7207:88;7314:4;7311:1;7304:15;7338:4;7335:1;7328:15;7354:252;7426:2;7420:9;7468:3;7456:16;;7502:18;7487:34;;7523:22;;;7484:62;7481:88;;;7549:18;;:::i;:::-;7585:2;7578:22;7354:252;:::o;7611:334::-;7682:2;7676:9;7738:2;7728:13;;7743:66;7724:86;7712:99;;7841:18;7826:34;;7862:22;;;7823:62;7820:88;;;7888:18;;:::i;:::-;7924:2;7917:22;7611:334;;-1:-1:-1;7611:334:201:o;7950:426::-;8031:5;8079:4;8067:9;8062:3;8058:19;8054:30;8051:50;;;8097:1;8094;8087:12;8051:50;8130:2;8124:9;8172:4;8164:6;8160:17;8243:6;8231:10;8228:22;8207:18;8195:10;8192:34;8189:62;8186:88;;;8254:18;;:::i;:::-;8290:2;8283:22;8353:16;;8338:32;;-1:-1:-1;8323:6:201;7950:426;-1:-1:-1;7950:426:201:o;8381:282::-;8493:6;8546:2;8534:9;8525:7;8521:23;8517:32;8514:52;;;8562:1;8559;8552:12;8514:52;8585:72;8649:7;8638:9;8585:72;:::i;8668:192::-;8747:13;;8800:34;8789:46;;8779:57;;8769:85;;8850:1;8847;8840:12;8865:169;8943:13;;8996:12;8985:24;;8975:35;;8965:63;;9024:1;9021;9014:12;9039:163;9117:13;;9170:6;9159:18;;9149:29;;9139:57;;9192:1;9189;9182:12;9207:1652;9307:6;9360:3;9348:9;9339:7;9335:23;9331:33;9328:53;;;9377:1;9374;9367:12;9328:53;9403:22;;:::i;:::-;9448:72;9512:7;9501:9;9448:72;:::i;:::-;9441:5;9434:87;9553:49;9598:2;9587:9;9583:18;9553:49;:::i;:::-;9548:2;9541:5;9537:14;9530:73;9635:49;9680:2;9669:9;9665:18;9635:49;:::i;:::-;9630:2;9623:5;9619:14;9612:73;9717:49;9762:2;9751:9;9747:18;9717:49;:::i;:::-;9712:2;9705:5;9701:14;9694:73;9800:50;9845:3;9834:9;9830:19;9800:50;:::i;:::-;9794:3;9787:5;9783:15;9776:75;9884:50;9929:3;9918:9;9914:19;9884:50;:::i;:::-;9878:3;9871:5;9867:15;9860:75;9968:49;10012:3;10001:9;9997:19;9968:49;:::i;:::-;9962:3;9955:5;9951:15;9944:74;10051:49;10095:3;10084:9;10080:19;10051:49;:::i;:::-;10045:3;10038:5;10034:15;10027:74;10120:3;10155:49;10200:2;10189:9;10185:18;10155:49;:::i;:::-;10139:14;;;10132:73;10224:3;10259:49;10289:18;;;10259:49;:::i;:::-;10243:14;;;10236:73;10328:3;10363:49;10393:18;;;10363:49;:::i;:::-;10347:14;;;10340:73;10432:3;10467:49;10497:18;;;10467:49;:::i;:::-;10451:14;;;10444:73;10536:3;10571:49;10601:18;;;10571:49;:::i;:::-;10555:14;;;10548:73;10640:3;10675:49;10705:18;;;10675:49;:::i;:::-;10659:14;;;10652:73;10744:3;10779:49;10809:18;;;10779:49;:::i;:::-;10763:14;;;10756:73;10767:5;9207:1652;-1:-1:-1;;;9207:1652:201:o;11148:184::-;11218:6;11271:2;11259:9;11250:7;11246:23;11242:32;11239:52;;;11287:1;11284;11277:12;11239:52;-1:-1:-1;11310:16:201;;11148:184;-1:-1:-1;11148:184:201:o;11337:206::-;11406:6;11459:2;11447:9;11438:7;11434:23;11430:32;11427:52;;;11475:1;11472;11465:12;11427:52;11498:39;11527:9;11498:39;:::i;11548:184::-;11600:77;11597:1;11590:88;11697:4;11694:1;11687:15;11721:4;11718:1;11711:15;11737:128;11777:3;11808:1;11804:6;11801:1;11798:13;11795:39;;;11814:18;;:::i;:::-;-1:-1:-1;11850:9:201;;11737:128::o;11870:1011::-;11965:6;11996:2;12039;12027:9;12018:7;12014:23;12010:32;12007:52;;;12055:1;12052;12045:12;12007:52;12088:9;12082:16;12117:18;12158:2;12150:6;12147:14;12144:34;;;12174:1;12171;12164:12;12144:34;12212:6;12201:9;12197:22;12187:32;;12257:7;12250:4;12246:2;12242:13;12238:27;12228:55;;12279:1;12276;12269:12;12228:55;12308:2;12302:9;12330:2;12326;12323:10;12320:36;;;12336:18;;:::i;:::-;12382:2;12379:1;12375:10;12365:20;;12405:28;12429:2;12425;12421:11;12405:28;:::i;:::-;12467:15;;;12537:11;;;12533:20;;;12498:12;;;;12565:19;;;12562:39;;;12597:1;12594;12587:12;12562:39;12621:11;;;;12641:210;12657:6;12652:3;12649:15;12641:210;;;12730:3;12724:10;12711:23;;12747:31;12772:5;12747:31;:::i;:::-;12791:18;;;12674:12;;;;12829;;;;12641:210;;;12870:5;11870:1011;-1:-1:-1;;;;;;;;11870:1011:201:o;12886:184::-;12938:77;12935:1;12928:88;13035:4;13032:1;13025:15;13059:4;13056:1;13049:15;13075:765;13155:6;13208:2;13196:9;13187:7;13183:23;13179:32;13176:52;;;13224:1;13221;13214:12;13176:52;13257:9;13251:16;13286:18;13327:2;13319:6;13316:14;13313:34;;;13343:1;13340;13333:12;13313:34;13381:6;13370:9;13366:22;13356:32;;13426:7;13419:4;13415:2;13411:13;13407:27;13397:55;;13448:1;13445;13438:12;13397:55;13477:2;13471:9;13499:2;13495;13492:10;13489:36;;;13505:18;;:::i;:::-;13547:112;13655:2;13586:66;13579:4;13575:2;13571:13;13567:86;13563:95;13547:112;:::i;:::-;13534:125;;13682:2;13675:5;13668:17;13722:7;13717:2;13712;13708;13704:11;13700:20;13697:33;13694:53;;;13743:1;13740;13733:12;13694:53;13756:54;13807:2;13802;13795:5;13791:14;13786:2;13782;13778:11;13756:54;:::i;:::-;-1:-1:-1;13829:5:201;13075:765;-1:-1:-1;;;;13075:765:201:o;13845:195::-;13884:3;13915:66;13908:5;13905:77;13902:103;;;13985:18;;:::i;:::-;-1:-1:-1;14032:1:201;14021:13;;13845:195::o;14045:220::-;14194:2;14183:9;14176:21;14157:4;14214:45;14255:2;14244:9;14240:18;14232:6;14214:45;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"2457800","executionCost":"infinite","totalCost":"infinite"},"external":{"ADDRESSES_PROVIDER()":"infinite","getATokenTotalSupply(address)":"infinite","getAllATokens()":"infinite","getAllReservesTokens()":"infinite","getDebtCeiling(address)":"infinite","getDebtCeilingDecimals()":"237","getFlashLoanEnabled(address)":"infinite","getInterestRateStrategyAddress(address)":"infinite","getLiquidationProtocolFee(address)":"infinite","getPaused(address)":"infinite","getReserveCaps(address)":"infinite","getReserveConfigurationData(address)":"infinite","getReserveData(address)":"infinite","getReserveEModeCategory(address)":"infinite","getReserveTokensAddresses(address)":"infinite","getSiloedBorrowing(address)":"infinite","getTotalDebt(address)":"infinite","getUnbackedMintCap(address)":"infinite","getUserReserveData(address,address)":"infinite"}},"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","getATokenTotalSupply(address)":"51460e25","getAllATokens()":"f561ae41","getAllReservesTokens()":"b316ff89","getDebtCeiling(address)":"3c798109","getDebtCeilingDecimals()":"69b169e1","getFlashLoanEnabled(address)":"d7ed3ef4","getInterestRateStrategyAddress(address)":"6744362a","getLiquidationProtocolFee(address)":"3cb8a622","getPaused(address)":"b55d9904","getReserveCaps(address)":"46fbe558","getReserveConfigurationData(address)":"3e150141","getReserveData(address)":"35ea6a75","getReserveEModeCategory(address)":"163a0f20","getReserveTokensAddresses(address)":"d2493b6c","getSiloedBorrowing(address)":"fcf40a62","getTotalDebt(address)":"4d44ac4f","getUnbackedMintCap(address)":"7ba1ae36","getUserReserveData(address,address)":"28dd2d01"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"addressesProvider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getATokenTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllATokens\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"internalType\":\"struct IPoolDataProvider.TokenData[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllReservesTokens\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"internalType\":\"struct IPoolDataProvider.TokenData[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getDebtCeiling\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDebtCeilingDecimals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getFlashLoanEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getInterestRateStrategyAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"irStrategyAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getLiquidationProtocolFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveCaps\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowCap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyCap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveConfigurationData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationBonus\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"usageAsCollateralEnabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"borrowingEnabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"stableBorrowRateEnabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isFrozen\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"unbacked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accruedToTreasuryScaled\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalAToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"averageStableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableBorrowIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"lastUpdateTimestamp\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveEModeCategory\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveTokensAddresses\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"aTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getSiloedBorrowing\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getTotalDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getUnbackedMintCap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserReserveData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"currentATokenBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"principalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"scaledVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityRate\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"stableRateLastUpdated\",\"type\":\"uint40\"},{\"internalType\":\"bool\",\"name\":\"usageAsCollateralEnabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"addressesProvider\":\"The address of the PoolAddressesProvider contract\"}},\"getATokenTotalSupply(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The total supply of the aToken\"}},\"getAllATokens()\":{\"returns\":{\"_0\":\"The list of ATokens, pairs of symbols and addresses\"}},\"getAllReservesTokens()\":{\"details\":\"Handling MKR and ETH in a different way since they do not have standard `symbol` functions.\",\"returns\":{\"_0\":\"The list of reserves, pairs of symbols and addresses\"}},\"getDebtCeiling(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The debt ceiling of the reserve\"}},\"getDebtCeilingDecimals()\":{\"returns\":{\"_0\":\"The debt ceiling decimals\"}},\"getFlashLoanEnabled(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"True if FlashLoans are enabled, false otherwise\"}},\"getInterestRateStrategyAddress(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"irStrategyAddress\":\"The address of the Interest Rate strategy\"}},\"getLiquidationProtocolFee(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The protocol fee on liquidation\"}},\"getPaused(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"isPaused\":\"True if the pool is paused, false otherwise\"}},\"getReserveCaps(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"borrowCap\":\"The borrow cap of the reserve\",\"supplyCap\":\"The supply cap of the reserve\"}},\"getReserveConfigurationData(address)\":{\"details\":\"Not returning borrow and supply caps for compatibility, nor pause flag\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"borrowingEnabled\":\"True if borrowing is enabled, false otherwise\",\"decimals\":\"The number of decimals of the reserve\",\"isActive\":\"True if it is active, false otherwise\",\"isFrozen\":\"True if it is frozen, false otherwise\",\"liquidationBonus\":\"The liquidationBonus of the reserve\",\"liquidationThreshold\":\"The liquidationThreshold of the reserve\",\"ltv\":\"The ltv of the reserve\",\"reserveFactor\":\"The reserveFactor of the reserve\",\"stableBorrowRateEnabled\":\"True if stable rate borrowing is enabled, false otherwise\",\"usageAsCollateralEnabled\":\"True if the usage as collateral is enabled, false otherwise\"}},\"getReserveData(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"accruedToTreasuryScaled\":\"The scaled amount of tokens accrued to treasury that is to be minted\",\"averageStableBorrowRate\":\"The average stable borrow rate of the reserve\",\"lastUpdateTimestamp\":\"The timestamp of the last update of the reserve\",\"liquidityIndex\":\"The liquidity index of the reserve\",\"liquidityRate\":\"The liquidity rate of the reserve\",\"stableBorrowRate\":\"The stable borrow rate of the reserve\",\"totalAToken\":\"The total supply of the aToken\",\"totalStableDebt\":\"The total stable debt of the reserve\",\"totalVariableDebt\":\"The total variable debt of the reserve\",\"unbacked\":\"The amount of unbacked tokens\",\"variableBorrowIndex\":\"The variable borrow index of the reserve\",\"variableBorrowRate\":\"The variable borrow rate of the reserve\"}},\"getReserveEModeCategory(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The eMode id of the reserve\"}},\"getReserveTokensAddresses(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"aTokenAddress\":\"The AToken address of the reserve\",\"stableDebtTokenAddress\":\"The StableDebtToken address of the reserve\",\"variableDebtTokenAddress\":\"The VariableDebtToken address of the reserve\"}},\"getSiloedBorrowing(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"True if the asset is siloed for borrowing\"}},\"getTotalDebt(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The total debt for asset\"}},\"getUnbackedMintCap(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The unbacked mint cap of the reserve\"}},\"getUserReserveData(address,address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"user\":\"The address of the user\"},\"returns\":{\"currentATokenBalance\":\"The current AToken balance of the user\",\"currentStableDebt\":\"The current stable debt of the user\",\"currentVariableDebt\":\"The current variable debt of the user\",\"liquidityRate\":\"The liquidity rate of the reserve\",\"principalStableDebt\":\"The principal stable debt of the user\",\"scaledVariableDebt\":\"The scaled variable debt of the user\",\"stableBorrowRate\":\"The stable borrow rate of the user\",\"stableRateLastUpdated\":\"The timestamp of the last update of the user stable rate\",\"usageAsCollateralEnabled\":\"True if the user is using the asset as collateral, false         otherwise\"}}},\"stateVariables\":{\"ADDRESSES_PROVIDER\":{\"return\":\"The address for the PoolAddressesProvider contract\",\"returns\":{\"_0\":\"The address for the PoolAddressesProvider contract\"}}},\"title\":\"AaveProtocolDataProvider\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the address for the PoolAddressesProvider contract.\"},\"constructor\":{\"notice\":\"Constructor\"},\"getATokenTotalSupply(address)\":{\"notice\":\"Returns the total supply of aTokens for a given asset\"},\"getAllATokens()\":{\"notice\":\"Returns the list of the existing ATokens in the pool.\"},\"getAllReservesTokens()\":{\"notice\":\"Returns the list of the existing reserves in the pool.\"},\"getDebtCeiling(address)\":{\"notice\":\"Returns the debt ceiling of the reserve\"},\"getDebtCeilingDecimals()\":{\"notice\":\"Returns the debt ceiling decimals\"},\"getFlashLoanEnabled(address)\":{\"notice\":\"Returns whether the reserve has FlashLoans enabled or disabled\"},\"getInterestRateStrategyAddress(address)\":{\"notice\":\"Returns the address of the Interest Rate strategy\"},\"getLiquidationProtocolFee(address)\":{\"notice\":\"Returns the protocol fee on the liquidation bonus\"},\"getPaused(address)\":{\"notice\":\"Returns if the pool is paused\"},\"getReserveCaps(address)\":{\"notice\":\"Returns the caps parameters of the reserve\"},\"getReserveConfigurationData(address)\":{\"notice\":\"Returns the configuration data of the reserve\"},\"getReserveData(address)\":{\"notice\":\"Returns the reserve data\"},\"getReserveEModeCategory(address)\":{\"notice\":\"Returns the efficiency mode category of the reserve\"},\"getReserveTokensAddresses(address)\":{\"notice\":\"Returns the token addresses of the reserve\"},\"getSiloedBorrowing(address)\":{\"notice\":\"Returns the siloed borrowing flag\"},\"getTotalDebt(address)\":{\"notice\":\"Returns the total debt for a given asset\"},\"getUnbackedMintCap(address)\":{\"notice\":\"Returns the unbacked mint cap of the reserve\"},\"getUserReserveData(address,address)\":{\"notice\":\"Returns the user data in a reserve\"}},\"notice\":\"Peripheral contract to collect and pre-process information from the Pool.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/misc/AaveProtocolDataProvider.sol\":\"AaveProtocolDataProvider\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolDataProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPoolDataProvider\\n * @author Aave\\n * @notice Defines the basic interface of a PoolDataProvider\\n */\\ninterface IPoolDataProvider {\\n  struct TokenData {\\n    string symbol;\\n    address tokenAddress;\\n  }\\n\\n  /**\\n   * @notice Returns the address for the PoolAddressesProvider contract.\\n   * @return The address for the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the list of the existing reserves in the pool.\\n   * @dev Handling MKR and ETH in a different way since they do not have standard `symbol` functions.\\n   * @return The list of reserves, pairs of symbols and addresses\\n   */\\n  function getAllReservesTokens() external view returns (TokenData[] memory);\\n\\n  /**\\n   * @notice Returns the list of the existing ATokens in the pool.\\n   * @return The list of ATokens, pairs of symbols and addresses\\n   */\\n  function getAllATokens() external view returns (TokenData[] memory);\\n\\n  /**\\n   * @notice Returns the configuration data of the reserve\\n   * @dev Not returning borrow and supply caps for compatibility, nor pause flag\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return decimals The number of decimals of the reserve\\n   * @return ltv The ltv of the reserve\\n   * @return liquidationThreshold The liquidationThreshold of the reserve\\n   * @return liquidationBonus The liquidationBonus of the reserve\\n   * @return reserveFactor The reserveFactor of the reserve\\n   * @return usageAsCollateralEnabled True if the usage as collateral is enabled, false otherwise\\n   * @return borrowingEnabled True if borrowing is enabled, false otherwise\\n   * @return stableBorrowRateEnabled True if stable rate borrowing is enabled, false otherwise\\n   * @return isActive True if it is active, false otherwise\\n   * @return isFrozen True if it is frozen, false otherwise\\n   */\\n  function getReserveConfigurationData(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 decimals,\\n      uint256 ltv,\\n      uint256 liquidationThreshold,\\n      uint256 liquidationBonus,\\n      uint256 reserveFactor,\\n      bool usageAsCollateralEnabled,\\n      bool borrowingEnabled,\\n      bool stableBorrowRateEnabled,\\n      bool isActive,\\n      bool isFrozen\\n    );\\n\\n  /**\\n   * @notice Returns the efficiency mode category of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The eMode id of the reserve\\n   */\\n  function getReserveEModeCategory(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the caps parameters of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return borrowCap The borrow cap of the reserve\\n   * @return supplyCap The supply cap of the reserve\\n   */\\n  function getReserveCaps(\\n    address asset\\n  ) external view returns (uint256 borrowCap, uint256 supplyCap);\\n\\n  /**\\n   * @notice Returns if the pool is paused\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return isPaused True if the pool is paused, false otherwise\\n   */\\n  function getPaused(address asset) external view returns (bool isPaused);\\n\\n  /**\\n   * @notice Returns the siloed borrowing flag\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return True if the asset is siloed for borrowing\\n   */\\n  function getSiloedBorrowing(address asset) external view returns (bool);\\n\\n  /**\\n   * @notice Returns the protocol fee on the liquidation bonus\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The protocol fee on liquidation\\n   */\\n  function getLiquidationProtocolFee(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the unbacked mint cap of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The unbacked mint cap of the reserve\\n   */\\n  function getUnbackedMintCap(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the debt ceiling of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getDebtCeiling(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the debt ceiling decimals\\n   * @return The debt ceiling decimals\\n   */\\n  function getDebtCeilingDecimals() external pure returns (uint256);\\n\\n  /**\\n   * @notice Returns the reserve data\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return unbacked The amount of unbacked tokens\\n   * @return accruedToTreasuryScaled The scaled amount of tokens accrued to treasury that is to be minted\\n   * @return totalAToken The total supply of the aToken\\n   * @return totalStableDebt The total stable debt of the reserve\\n   * @return totalVariableDebt The total variable debt of the reserve\\n   * @return liquidityRate The liquidity rate of the reserve\\n   * @return variableBorrowRate The variable borrow rate of the reserve\\n   * @return stableBorrowRate The stable borrow rate of the reserve\\n   * @return averageStableBorrowRate The average stable borrow rate of the reserve\\n   * @return liquidityIndex The liquidity index of the reserve\\n   * @return variableBorrowIndex The variable borrow index of the reserve\\n   * @return lastUpdateTimestamp The timestamp of the last update of the reserve\\n   */\\n  function getReserveData(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 unbacked,\\n      uint256 accruedToTreasuryScaled,\\n      uint256 totalAToken,\\n      uint256 totalStableDebt,\\n      uint256 totalVariableDebt,\\n      uint256 liquidityRate,\\n      uint256 variableBorrowRate,\\n      uint256 stableBorrowRate,\\n      uint256 averageStableBorrowRate,\\n      uint256 liquidityIndex,\\n      uint256 variableBorrowIndex,\\n      uint40 lastUpdateTimestamp\\n    );\\n\\n  /**\\n   * @notice Returns the total supply of aTokens for a given asset\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The total supply of the aToken\\n   */\\n  function getATokenTotalSupply(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total debt for a given asset\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The total debt for asset\\n   */\\n  function getTotalDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the user data in a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param user The address of the user\\n   * @return currentATokenBalance The current AToken balance of the user\\n   * @return currentStableDebt The current stable debt of the user\\n   * @return currentVariableDebt The current variable debt of the user\\n   * @return principalStableDebt The principal stable debt of the user\\n   * @return scaledVariableDebt The scaled variable debt of the user\\n   * @return stableBorrowRate The stable borrow rate of the user\\n   * @return liquidityRate The liquidity rate of the reserve\\n   * @return stableRateLastUpdated The timestamp of the last update of the user stable rate\\n   * @return usageAsCollateralEnabled True if the user is using the asset as collateral, false\\n   *         otherwise\\n   */\\n  function getUserReserveData(\\n    address asset,\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 currentATokenBalance,\\n      uint256 currentStableDebt,\\n      uint256 currentVariableDebt,\\n      uint256 principalStableDebt,\\n      uint256 scaledVariableDebt,\\n      uint256 stableBorrowRate,\\n      uint256 liquidityRate,\\n      uint40 stableRateLastUpdated,\\n      bool usageAsCollateralEnabled\\n    );\\n\\n  /**\\n   * @notice Returns the token addresses of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return aTokenAddress The AToken address of the reserve\\n   * @return stableDebtTokenAddress The StableDebtToken address of the reserve\\n   * @return variableDebtTokenAddress The VariableDebtToken address of the reserve\\n   */\\n  function getReserveTokensAddresses(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      address aTokenAddress,\\n      address stableDebtTokenAddress,\\n      address variableDebtTokenAddress\\n    );\\n\\n  /**\\n   * @notice Returns the address of the Interest Rate strategy\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return irStrategyAddress The address of the Interest Rate strategy\\n   */\\n  function getInterestRateStrategyAddress(\\n    address asset\\n  ) external view returns (address irStrategyAddress);\\n\\n  /**\\n   * @notice Returns whether the reserve has FlashLoans enabled or disabled\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return True if FlashLoans are enabled, false otherwise\\n   */\\n  function getFlashLoanEnabled(address asset) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xeb42959448d545d6ee49985e4212f54d01fe3c653f6f65cfc4061983df39bf1e\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/misc/AaveProtocolDataProvider.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20Detailed} from '../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {ReserveConfiguration} from '../protocol/libraries/configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../protocol/libraries/configuration/UserConfiguration.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\nimport {WadRayMath} from '../protocol/libraries/math/WadRayMath.sol';\\nimport {IPoolAddressesProvider} from '../interfaces/IPoolAddressesProvider.sol';\\nimport {IStableDebtToken} from '../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../interfaces/IVariableDebtToken.sol';\\nimport {IPool} from '../interfaces/IPool.sol';\\nimport {IPoolDataProvider} from '../interfaces/IPoolDataProvider.sol';\\n\\n/**\\n * @title AaveProtocolDataProvider\\n * @author Aave\\n * @notice Peripheral contract to collect and pre-process information from the Pool.\\n */\\ncontract AaveProtocolDataProvider is IPoolDataProvider {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n\\n  address constant MKR = 0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2;\\n  address constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;\\n\\n  /// @inheritdoc IPoolDataProvider\\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\\n\\n  /**\\n   * @notice Constructor\\n   * @param addressesProvider The address of the PoolAddressesProvider contract\\n   */\\n  constructor(IPoolAddressesProvider addressesProvider) {\\n    ADDRESSES_PROVIDER = addressesProvider;\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getAllReservesTokens() external view override returns (TokenData[] memory) {\\n    IPool pool = IPool(ADDRESSES_PROVIDER.getPool());\\n    address[] memory reserves = pool.getReservesList();\\n    TokenData[] memory reservesTokens = new TokenData[](reserves.length);\\n    for (uint256 i = 0; i < reserves.length; i++) {\\n      if (reserves[i] == MKR) {\\n        reservesTokens[i] = TokenData({symbol: 'MKR', tokenAddress: reserves[i]});\\n        continue;\\n      }\\n      if (reserves[i] == ETH) {\\n        reservesTokens[i] = TokenData({symbol: 'ETH', tokenAddress: reserves[i]});\\n        continue;\\n      }\\n      reservesTokens[i] = TokenData({\\n        symbol: IERC20Detailed(reserves[i]).symbol(),\\n        tokenAddress: reserves[i]\\n      });\\n    }\\n    return reservesTokens;\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getAllATokens() external view override returns (TokenData[] memory) {\\n    IPool pool = IPool(ADDRESSES_PROVIDER.getPool());\\n    address[] memory reserves = pool.getReservesList();\\n    TokenData[] memory aTokens = new TokenData[](reserves.length);\\n    for (uint256 i = 0; i < reserves.length; i++) {\\n      DataTypes.ReserveData memory reserveData = pool.getReserveData(reserves[i]);\\n      aTokens[i] = TokenData({\\n        symbol: IERC20Detailed(reserveData.aTokenAddress).symbol(),\\n        tokenAddress: reserveData.aTokenAddress\\n      });\\n    }\\n    return aTokens;\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getReserveConfigurationData(\\n    address asset\\n  )\\n    external\\n    view\\n    override\\n    returns (\\n      uint256 decimals,\\n      uint256 ltv,\\n      uint256 liquidationThreshold,\\n      uint256 liquidationBonus,\\n      uint256 reserveFactor,\\n      bool usageAsCollateralEnabled,\\n      bool borrowingEnabled,\\n      bool stableBorrowRateEnabled,\\n      bool isActive,\\n      bool isFrozen\\n    )\\n  {\\n    DataTypes.ReserveConfigurationMap memory configuration = IPool(ADDRESSES_PROVIDER.getPool())\\n      .getConfiguration(asset);\\n\\n    (ltv, liquidationThreshold, liquidationBonus, decimals, reserveFactor, ) = configuration\\n      .getParams();\\n\\n    (isActive, isFrozen, borrowingEnabled, stableBorrowRateEnabled, ) = configuration.getFlags();\\n\\n    usageAsCollateralEnabled = liquidationThreshold != 0;\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getReserveEModeCategory(address asset) external view override returns (uint256) {\\n    DataTypes.ReserveConfigurationMap memory configuration = IPool(ADDRESSES_PROVIDER.getPool())\\n      .getConfiguration(asset);\\n    return configuration.getEModeCategory();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getReserveCaps(\\n    address asset\\n  ) external view override returns (uint256 borrowCap, uint256 supplyCap) {\\n    (borrowCap, supplyCap) = IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getCaps();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getPaused(address asset) external view override returns (bool isPaused) {\\n    (, , , , isPaused) = IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getFlags();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getSiloedBorrowing(address asset) external view override returns (bool) {\\n    return IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getSiloedBorrowing();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getLiquidationProtocolFee(address asset) external view override returns (uint256) {\\n    return IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getLiquidationProtocolFee();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getUnbackedMintCap(address asset) external view override returns (uint256) {\\n    return IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getUnbackedMintCap();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getDebtCeiling(address asset) external view override returns (uint256) {\\n    return IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getDebtCeiling();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getDebtCeilingDecimals() external pure override returns (uint256) {\\n    return ReserveConfiguration.DEBT_CEILING_DECIMALS;\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getReserveData(\\n    address asset\\n  )\\n    external\\n    view\\n    override\\n    returns (\\n      uint256 unbacked,\\n      uint256 accruedToTreasuryScaled,\\n      uint256 totalAToken,\\n      uint256 totalStableDebt,\\n      uint256 totalVariableDebt,\\n      uint256 liquidityRate,\\n      uint256 variableBorrowRate,\\n      uint256 stableBorrowRate,\\n      uint256 averageStableBorrowRate,\\n      uint256 liquidityIndex,\\n      uint256 variableBorrowIndex,\\n      uint40 lastUpdateTimestamp\\n    )\\n  {\\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\\n      asset\\n    );\\n\\n    return (\\n      reserve.unbacked,\\n      reserve.accruedToTreasury,\\n      IERC20Detailed(reserve.aTokenAddress).totalSupply(),\\n      IERC20Detailed(reserve.stableDebtTokenAddress).totalSupply(),\\n      IERC20Detailed(reserve.variableDebtTokenAddress).totalSupply(),\\n      reserve.currentLiquidityRate,\\n      reserve.currentVariableBorrowRate,\\n      reserve.currentStableBorrowRate,\\n      IStableDebtToken(reserve.stableDebtTokenAddress).getAverageStableRate(),\\n      reserve.liquidityIndex,\\n      reserve.variableBorrowIndex,\\n      reserve.lastUpdateTimestamp\\n    );\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getATokenTotalSupply(address asset) external view override returns (uint256) {\\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\\n      asset\\n    );\\n    return IERC20Detailed(reserve.aTokenAddress).totalSupply();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getTotalDebt(address asset) external view override returns (uint256) {\\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\\n      asset\\n    );\\n    return\\n      IERC20Detailed(reserve.stableDebtTokenAddress).totalSupply() +\\n      IERC20Detailed(reserve.variableDebtTokenAddress).totalSupply();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getUserReserveData(\\n    address asset,\\n    address user\\n  )\\n    external\\n    view\\n    override\\n    returns (\\n      uint256 currentATokenBalance,\\n      uint256 currentStableDebt,\\n      uint256 currentVariableDebt,\\n      uint256 principalStableDebt,\\n      uint256 scaledVariableDebt,\\n      uint256 stableBorrowRate,\\n      uint256 liquidityRate,\\n      uint40 stableRateLastUpdated,\\n      bool usageAsCollateralEnabled\\n    )\\n  {\\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\\n      asset\\n    );\\n\\n    DataTypes.UserConfigurationMap memory userConfig = IPool(ADDRESSES_PROVIDER.getPool())\\n      .getUserConfiguration(user);\\n\\n    currentATokenBalance = IERC20Detailed(reserve.aTokenAddress).balanceOf(user);\\n    currentVariableDebt = IERC20Detailed(reserve.variableDebtTokenAddress).balanceOf(user);\\n    currentStableDebt = IERC20Detailed(reserve.stableDebtTokenAddress).balanceOf(user);\\n    principalStableDebt = IStableDebtToken(reserve.stableDebtTokenAddress).principalBalanceOf(user);\\n    scaledVariableDebt = IVariableDebtToken(reserve.variableDebtTokenAddress).scaledBalanceOf(user);\\n    liquidityRate = reserve.currentLiquidityRate;\\n    stableBorrowRate = IStableDebtToken(reserve.stableDebtTokenAddress).getUserStableRate(user);\\n    stableRateLastUpdated = IStableDebtToken(reserve.stableDebtTokenAddress).getUserLastUpdated(\\n      user\\n    );\\n    usageAsCollateralEnabled = userConfig.isUsingAsCollateral(reserve.id);\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getReserveTokensAddresses(\\n    address asset\\n  )\\n    external\\n    view\\n    override\\n    returns (\\n      address aTokenAddress,\\n      address stableDebtTokenAddress,\\n      address variableDebtTokenAddress\\n    )\\n  {\\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\\n      asset\\n    );\\n\\n    return (\\n      reserve.aTokenAddress,\\n      reserve.stableDebtTokenAddress,\\n      reserve.variableDebtTokenAddress\\n    );\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getInterestRateStrategyAddress(\\n    address asset\\n  ) external view override returns (address irStrategyAddress) {\\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\\n      asset\\n    );\\n\\n    return (reserve.interestRateStrategyAddress);\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getFlashLoanEnabled(address asset) external view override returns (bool) {\\n    DataTypes.ReserveConfigurationMap memory configuration = IPool(ADDRESSES_PROVIDER.getPool())\\n      .getConfiguration(asset);\\n\\n    return configuration.getFlashLoanEnabled();\\n  }\\n}\\n\",\"keccak256\":\"0x477ecaa5fb7c2f2aa938b00c9302ba1c448243af2073a9b9922a32de01e7c5fe\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the address for the PoolAddressesProvider contract."},"constructor":{"notice":"Constructor"},"getATokenTotalSupply(address)":{"notice":"Returns the total supply of aTokens for a given asset"},"getAllATokens()":{"notice":"Returns the list of the existing ATokens in the pool."},"getAllReservesTokens()":{"notice":"Returns the list of the existing reserves in the pool."},"getDebtCeiling(address)":{"notice":"Returns the debt ceiling of the reserve"},"getDebtCeilingDecimals()":{"notice":"Returns the debt ceiling decimals"},"getFlashLoanEnabled(address)":{"notice":"Returns whether the reserve has FlashLoans enabled or disabled"},"getInterestRateStrategyAddress(address)":{"notice":"Returns the address of the Interest Rate strategy"},"getLiquidationProtocolFee(address)":{"notice":"Returns the protocol fee on the liquidation bonus"},"getPaused(address)":{"notice":"Returns if the pool is paused"},"getReserveCaps(address)":{"notice":"Returns the caps parameters of the reserve"},"getReserveConfigurationData(address)":{"notice":"Returns the configuration data of the reserve"},"getReserveData(address)":{"notice":"Returns the reserve data"},"getReserveEModeCategory(address)":{"notice":"Returns the efficiency mode category of the reserve"},"getReserveTokensAddresses(address)":{"notice":"Returns the token addresses of the reserve"},"getSiloedBorrowing(address)":{"notice":"Returns the siloed borrowing flag"},"getTotalDebt(address)":{"notice":"Returns the total debt for a given asset"},"getUnbackedMintCap(address)":{"notice":"Returns the unbacked mint cap of the reserve"},"getUserReserveData(address,address)":{"notice":"Returns the user data in a reserve"}},"notice":"Peripheral contract to collect and pre-process information from the Pool.","version":1}}},"@aave/core-v3/contracts/misc/interfaces/IWETH.sol":{"IWETH":{"abi":[{"inputs":[{"internalType":"address","name":"guy","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"approve(address,uint256)":"095ea7b3","deposit()":"d0e30db0","transferFrom(address,address,uint256)":"23b872dd","withdraw(uint256)":"2e1a7d4d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/misc/interfaces/IWETH.sol\":\"IWETH\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/misc/interfaces/IWETH.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\ninterface IWETH {\\n  function deposit() external payable;\\n\\n  function withdraw(uint256) external;\\n\\n  function approve(address guy, uint256 wad) external returns (bool);\\n\\n  function transferFrom(address src, address dst, uint256 wad) external returns (bool);\\n}\\n\",\"keccak256\":\"0x77edc81addcbe1acef487437e6a4d83369d6f09fd40e6fdbdd967cc16a9fb94c\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/mocks/flashloan/MockFlashLoanReceiver.sol":{"MockFlashLoanReceiver":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"_assets","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"_amounts","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"_premiums","type":"uint256[]"}],"name":"ExecutedWithFail","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"_assets","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"_amounts","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"_premiums","type":"uint256[]"}],"name":"ExecutedWithSuccess","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"premiums","type":"uint256[]"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"executeOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAmountToApprove","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToApprove","type":"uint256"}],"name":"setAmountToApprove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"fail","type":"bool"}],"name":"setFailExecutionTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"flag","type":"bool"}],"name":"setSimulateEOA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"simulateEOA","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_3426":{"entryPoint":null,"id":3426,"parameterSlots":1,"returnSlots":0},"@_7490":{"entryPoint":null,"id":7490,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory":{"entryPoint":216,"id":null,"parameterSlots":2,"returnSlots":1},"validator_revert_contract_IPoolAddressesProvider":{"entryPoint":192,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:762:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"83:86:201","statements":[{"body":{"nodeType":"YulBlock","src":"147:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"156:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"149:6:201"},"nodeType":"YulFunctionCall","src":"149:12:201"},"nodeType":"YulExpressionStatement","src":"149:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"106:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"117:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"132:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"137:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"128:3:201"},"nodeType":"YulFunctionCall","src":"128:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"141:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"124:3:201"},"nodeType":"YulFunctionCall","src":"124:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"113:3:201"},"nodeType":"YulFunctionCall","src":"113:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"103:2:201"},"nodeType":"YulFunctionCall","src":"103:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"96:6:201"},"nodeType":"YulFunctionCall","src":"96:50:201"},"nodeType":"YulIf","src":"93:70:201"}]},"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"72:5:201","type":""}],"src":"14:155:201"},{"body":{"nodeType":"YulBlock","src":"286:194:201","statements":[{"body":{"nodeType":"YulBlock","src":"332:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"341:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"344:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"334:6:201"},"nodeType":"YulFunctionCall","src":"334:12:201"},"nodeType":"YulExpressionStatement","src":"334:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"307:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"316:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"303:3:201"},"nodeType":"YulFunctionCall","src":"303:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"328:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"299:3:201"},"nodeType":"YulFunctionCall","src":"299:32:201"},"nodeType":"YulIf","src":"296:52:201"},{"nodeType":"YulVariableDeclaration","src":"357:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"376:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"370:5:201"},"nodeType":"YulFunctionCall","src":"370:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"361:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"444:5:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"395:48:201"},"nodeType":"YulFunctionCall","src":"395:55:201"},"nodeType":"YulExpressionStatement","src":"395:55:201"},{"nodeType":"YulAssignment","src":"459:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"469:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"459:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"252:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"263:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"275:6:201","type":""}],"src":"174:306:201"},{"body":{"nodeType":"YulBlock","src":"566:194:201","statements":[{"body":{"nodeType":"YulBlock","src":"612:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"621:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"624:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"614:6:201"},"nodeType":"YulFunctionCall","src":"614:12:201"},"nodeType":"YulExpressionStatement","src":"614:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"587:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"596:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"583:3:201"},"nodeType":"YulFunctionCall","src":"583:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"608:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"579:3:201"},"nodeType":"YulFunctionCall","src":"579:32:201"},"nodeType":"YulIf","src":"576:52:201"},{"nodeType":"YulVariableDeclaration","src":"637:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"656:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"650:5:201"},"nodeType":"YulFunctionCall","src":"650:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"641:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"724:5:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"675:48:201"},"nodeType":"YulFunctionCall","src":"675:55:201"},"nodeType":"YulExpressionStatement","src":"675:55:201"},{"nodeType":"YulAssignment","src":"739:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"749:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"739:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"532:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"543:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"555:6:201","type":""}],"src":"485:275:201"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPoolAddressesProvider(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60c060405234801561001057600080fd5b50604051610bf3380380610bf383398101604081905261002f916100d8565b80806001600160a01b03166080816001600160a01b031681525050806001600160a01b031663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610088573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100ac91906100d8565b6001600160a01b031660a052506100fc9050565b6001600160a01b03811681146100d557600080fd5b50565b6000602082840312156100ea57600080fd5b81516100f5816100c0565b9392505050565b60805160a051610acc6101276000396000818161014c01526104ec0152600060920152610acc6000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80637535d2461161005b5780637535d24614610147578063920f5c841461016e578063bf443f8514610181578063e9a6a25b1461019457600080fd5b80630542975c1461008d578063388f70f1146100de5780634444f3311461011f5780635e76bba314610136575b600080fd5b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61011d6100ec3660046105d9565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b005b60025460ff165b60405190151581526020016100d5565b6001546040519081526020016100d5565b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b61012661017c3660046107c1565b6101d3565b61011d61018f3660046108db565b600155565b61011d6101a23660046105d9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000805460ff1615610227577f9972b212e52913783072b960dd41527ae8b6e609d017b64039758dda0ce412788686866040516102129392919061092f565b60405180910390a15060025460ff16156105bf565b60005b865181101561057f576000878281518110610247576102476109b1565b60200260200101519050878281518110610263576102636109b1565b60209081029190910101516040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa1580156102d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102fd91906109e0565b87838151811061030f5761030f6109b1565b60200260200101511115610383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f496e76616c69642062616c616e636520666f722074686520636f6e7472616374604482015260640160405180910390fd5b6000600154600014156103d3578683815181106103a2576103a26109b1565b60200260200101518884815181106103bc576103bc6109b1565b60200260200101516103ce9190610a28565b6103d7565b6001545b90508173ffffffffffffffffffffffffffffffffffffffff166340c10f1930898681518110610408576104086109b1565b60200260200101516040518363ffffffff1660e01b815260040161044e92919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6020604051808303816000875af115801561046d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104919190610a40565b508883815181106104a4576104a46109b1565b60209081029190910101516040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610545573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105699190610a40565b505050808061057790610a5d565b91505061022a565b507fbd6b6bfac59612765a81cc4fdee74ab4859671fa14a562056f9eea438735a78a8686866040516105b39392919061092f565b60405180910390a15060015b95945050505050565b80151581146105d657600080fd5b50565b6000602082840312156105eb57600080fd5b81356105f6816105c8565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610673576106736105fd565b604052919050565b600067ffffffffffffffff821115610695576106956105fd565b5060051b60200190565b803573ffffffffffffffffffffffffffffffffffffffff811681146106c357600080fd5b919050565b600082601f8301126106d957600080fd5b813560206106ee6106e98361067b565b61062c565b82815260059290921b8401810191818101908684111561070d57600080fd5b8286015b848110156107285780358352918301918301610711565b509695505050505050565b600082601f83011261074457600080fd5b813567ffffffffffffffff81111561075e5761075e6105fd565b61078f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161062c565b8181528460208386010111156107a457600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a086880312156107d957600080fd5b853567ffffffffffffffff808211156107f157600080fd5b818801915088601f83011261080557600080fd5b813560206108156106e98361067b565b82815260059290921b8401810191818101908c84111561083457600080fd5b948201945b838610156108595761084a8661069f565b82529482019490820190610839565b9950508901359250508082111561086f57600080fd5b61087b89838a016106c8565b9550604088013591508082111561089157600080fd5b61089d89838a016106c8565b94506108ab6060890161069f565b935060808801359150808211156108c157600080fd5b506108ce88828901610733565b9150509295509295909350565b6000602082840312156108ed57600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561092457815187529582019590820190600101610908565b509495945050505050565b606080825284519082018190526000906020906080840190828801845b8281101561097e57815173ffffffffffffffffffffffffffffffffffffffff168452928401929084019060010161094c565b5050508381038285015261099281876108f4565b91505082810360408401526109a781856108f4565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156109f257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610a3b57610a3b6109f9565b500190565b600060208284031215610a5257600080fd5b81516105f6816105c8565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610a8f57610a8f6109f9565b506001019056fea2646970667358221220e6a09a719e9afadd7dcdc1161bd2ba776467ff6cb6179d9b4df9c65bef44ea7764736f6c634300080a0033","opcodes":"PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xBF3 CODESIZE SUB DUP1 PUSH2 0xBF3 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0xD8 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x88 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAC SWAP2 SWAP1 PUSH2 0xD8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE POP PUSH2 0xFC SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xF5 DUP2 PUSH2 0xC0 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH2 0xACC PUSH2 0x127 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x14C ADD MSTORE PUSH2 0x4EC ADD MSTORE PUSH1 0x0 PUSH1 0x92 ADD MSTORE PUSH2 0xACC 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 0x7535D246 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x147 JUMPI DUP1 PUSH4 0x920F5C84 EQ PUSH2 0x16E JUMPI DUP1 PUSH4 0xBF443F85 EQ PUSH2 0x181 JUMPI DUP1 PUSH4 0xE9A6A25B EQ PUSH2 0x194 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x388F70F1 EQ PUSH2 0xDE JUMPI DUP1 PUSH4 0x4444F331 EQ PUSH2 0x11F JUMPI DUP1 PUSH4 0x5E76BBA3 EQ PUSH2 0x136 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB4 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x11D PUSH2 0xEC CALLDATASIZE PUSH1 0x4 PUSH2 0x5D9 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD5 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD5 JUMP JUMPDEST PUSH2 0xB4 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x126 PUSH2 0x17C CALLDATASIZE PUSH1 0x4 PUSH2 0x7C1 JUMP JUMPDEST PUSH2 0x1D3 JUMP JUMPDEST PUSH2 0x11D PUSH2 0x18F CALLDATASIZE PUSH1 0x4 PUSH2 0x8DB JUMP JUMPDEST PUSH1 0x1 SSTORE JUMP JUMPDEST PUSH2 0x11D PUSH2 0x1A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x5D9 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x227 JUMPI PUSH32 0x9972B212E52913783072B960DD41527AE8B6E609D017B64039758DDA0CE41278 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x212 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x92F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH1 0x2 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x5BF JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x57F JUMPI PUSH1 0x0 DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x247 JUMPI PUSH2 0x247 PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x263 JUMPI PUSH2 0x263 PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2FD SWAP2 SWAP1 PUSH2 0x9E0 JUMP JUMPDEST DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x30F JUMPI PUSH2 0x30F PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT ISZERO PUSH2 0x383 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C69642062616C616E636520666F722074686520636F6E7472616374 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x3D3 JUMPI DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3A2 JUMPI PUSH2 0x3A2 PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3BC JUMPI PUSH2 0x3BC PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3CE SWAP2 SWAP1 PUSH2 0xA28 JUMP JUMPDEST PUSH2 0x3D7 JUMP JUMPDEST PUSH1 0x1 SLOAD JUMPDEST SWAP1 POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x40C10F19 ADDRESS DUP10 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x408 JUMPI PUSH2 0x408 PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x44E SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x46D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x491 SWAP2 SWAP1 PUSH2 0xA40 JUMP JUMPDEST POP DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4A4 JUMPI PUSH2 0x4A4 PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP5 SWAP1 MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x545 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x569 SWAP2 SWAP1 PUSH2 0xA40 JUMP JUMPDEST POP POP POP DUP1 DUP1 PUSH2 0x577 SWAP1 PUSH2 0xA5D JUMP JUMPDEST SWAP2 POP POP PUSH2 0x22A JUMP JUMPDEST POP PUSH32 0xBD6B6BFAC59612765A81CC4FDEE74AB4859671FA14A562056F9EEA438735A78A DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x5B3 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x92F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH1 0x1 JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x5D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5F6 DUP2 PUSH2 0x5C8 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x673 JUMPI PUSH2 0x673 PUSH2 0x5FD JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x695 JUMPI PUSH2 0x695 PUSH2 0x5FD JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x6C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x6D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x6EE PUSH2 0x6E9 DUP4 PUSH2 0x67B JUMP JUMPDEST PUSH2 0x62C JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP7 DUP5 GT ISZERO PUSH2 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP7 ADD JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x728 JUMPI DUP1 CALLDATALOAD DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x711 JUMP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x744 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x75E JUMPI PUSH2 0x75E PUSH2 0x5FD JUMP JUMPDEST PUSH2 0x78F PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x62C JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x7A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x7D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x7F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x805 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x815 PUSH2 0x6E9 DUP4 PUSH2 0x67B JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP13 DUP5 GT ISZERO PUSH2 0x834 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 DUP3 ADD SWAP5 JUMPDEST DUP4 DUP7 LT ISZERO PUSH2 0x859 JUMPI PUSH2 0x84A DUP7 PUSH2 0x69F JUMP JUMPDEST DUP3 MSTORE SWAP5 DUP3 ADD SWAP5 SWAP1 DUP3 ADD SWAP1 PUSH2 0x839 JUMP JUMPDEST SWAP10 POP POP DUP10 ADD CALLDATALOAD SWAP3 POP POP DUP1 DUP3 GT ISZERO PUSH2 0x86F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x87B DUP10 DUP4 DUP11 ADD PUSH2 0x6C8 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x891 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x89D DUP10 DUP4 DUP11 ADD PUSH2 0x6C8 JUMP JUMPDEST SWAP5 POP PUSH2 0x8AB PUSH1 0x60 DUP10 ADD PUSH2 0x69F JUMP JUMPDEST SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x8C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x8CE DUP9 DUP3 DUP10 ADD PUSH2 0x733 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x924 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x908 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP5 MLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x80 DUP5 ADD SWAP1 DUP3 DUP9 ADD DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x97E JUMPI DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x94C JUMP JUMPDEST POP POP POP DUP4 DUP2 SUB DUP3 DUP6 ADD MSTORE PUSH2 0x992 DUP2 DUP8 PUSH2 0x8F4 JUMP JUMPDEST SWAP2 POP POP DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x9A7 DUP2 DUP6 PUSH2 0x8F4 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0xA3B JUMPI PUSH2 0xA3B PUSH2 0x9F9 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x5F6 DUP2 PUSH2 0x5C8 JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0xA8F JUMPI PUSH2 0xA8F PUSH2 0x9F9 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE6 LOG0 SWAP11 PUSH18 0x9E9AFADD7DCDC1161BD2BA776467FF6CB617 SWAP14 SWAP12 0x4D 0xF9 0xC6 JUMPDEST 0xEF DIFFICULTY 0xEA PUSH24 0x64736F6C634300080A003300000000000000000000000000 ","sourceMap":"454:1974:53:-:0;;;825:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;892:8;643::24;-1:-1:-1;;;;;622:29:24;;;-1:-1:-1;;;;;622:29:24;;;;;670:8;-1:-1:-1;;;;;670:16:24;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;657:32:24;;;-1:-1:-1;454:1974:53;;-1:-1:-1;454:1974:53;14:155:201;-1:-1:-1;;;;;113:31:201;;103:42;;93:70;;159:1;156;149:12;93:70;14:155;:::o;174:306::-;275:6;328:2;316:9;307:7;303:23;299:32;296:52;;;344:1;341;334:12;296:52;376:9;370:16;395:55;444:5;395:55;:::i;:::-;469:5;174:306;-1:-1:-1;;;174:306:201:o;485:275::-;454:1974:53;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ADDRESSES_PROVIDER_3403":{"entryPoint":null,"id":3403,"parameterSlots":0,"returnSlots":0},"@POOL_3407":{"entryPoint":null,"id":3407,"parameterSlots":0,"returnSlots":0},"@executeOperation_7658":{"entryPoint":467,"id":7658,"parameterSlots":5,"returnSlots":1},"@getAmountToApprove_7528":{"entryPoint":null,"id":7528,"parameterSlots":0,"returnSlots":1},"@setAmountToApprove_7510":{"entryPoint":null,"id":7510,"parameterSlots":1,"returnSlots":0},"@setFailExecutionTransfer_7500":{"entryPoint":null,"id":7500,"parameterSlots":1,"returnSlots":0},"@setSimulateEOA_7520":{"entryPoint":null,"id":7520,"parameterSlots":1,"returnSlots":0},"@simulateEOA_7536":{"entryPoint":null,"id":7536,"parameterSlots":0,"returnSlots":1},"abi_decode_address":{"entryPoint":1695,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_uint256_dyn":{"entryPoint":1736,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bytes":{"entryPoint":1843,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_array$_t_address_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_addresst_bytes_memory_ptr":{"entryPoint":1985,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_bool":{"entryPoint":1497,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":2624,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":2267,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":2528,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":2292,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":2351,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b7eb1acc2a916521532d41db798e862e3bc634b536ffa4062c39b663132b6869__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":1580,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_address_dyn":{"entryPoint":1659,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":2600,"id":null,"parameterSlots":2,"returnSlots":1},"increment_t_uint256":{"entryPoint":2653,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":2553,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":2481,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":1533,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_bool":{"entryPoint":1480,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:8824:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"146:125:201","statements":[{"nodeType":"YulAssignment","src":"156:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"168:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"179:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"164:3:201"},"nodeType":"YulFunctionCall","src":"164:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"156:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"198:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"213:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"221:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"209:3:201"},"nodeType":"YulFunctionCall","src":"209:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"191:6:201"},"nodeType":"YulFunctionCall","src":"191:74:201"},"nodeType":"YulExpressionStatement","src":"191:74:201"}]},"name":"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"115:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"126:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"137:4:201","type":""}],"src":"14:257:201"},{"body":{"nodeType":"YulBlock","src":"318:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"372:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"381:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"384:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"374:6:201"},"nodeType":"YulFunctionCall","src":"374:12:201"},"nodeType":"YulExpressionStatement","src":"374:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"341:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"362:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"355:6:201"},"nodeType":"YulFunctionCall","src":"355:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"348:6:201"},"nodeType":"YulFunctionCall","src":"348:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"338:2:201"},"nodeType":"YulFunctionCall","src":"338:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"331:6:201"},"nodeType":"YulFunctionCall","src":"331:40:201"},"nodeType":"YulIf","src":"328:60:201"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"307:5:201","type":""}],"src":"276:118:201"},{"body":{"nodeType":"YulBlock","src":"466:174:201","statements":[{"body":{"nodeType":"YulBlock","src":"512:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"521:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"524:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"514:6:201"},"nodeType":"YulFunctionCall","src":"514:12:201"},"nodeType":"YulExpressionStatement","src":"514:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"487:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"496:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"483:3:201"},"nodeType":"YulFunctionCall","src":"483:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"508:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"479:3:201"},"nodeType":"YulFunctionCall","src":"479:32:201"},"nodeType":"YulIf","src":"476:52:201"},{"nodeType":"YulVariableDeclaration","src":"537:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"563:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"550:12:201"},"nodeType":"YulFunctionCall","src":"550:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"541:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"604:5:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"582:21:201"},"nodeType":"YulFunctionCall","src":"582:28:201"},"nodeType":"YulExpressionStatement","src":"582:28:201"},{"nodeType":"YulAssignment","src":"619:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"629:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"619:6:201"}]}]},"name":"abi_decode_tuple_t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"432:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"443:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"455:6:201","type":""}],"src":"399:241:201"},{"body":{"nodeType":"YulBlock","src":"740:92:201","statements":[{"nodeType":"YulAssignment","src":"750:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"762:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"773:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"758:3:201"},"nodeType":"YulFunctionCall","src":"758:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"750:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"792:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"817:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"810:6:201"},"nodeType":"YulFunctionCall","src":"810:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"803:6:201"},"nodeType":"YulFunctionCall","src":"803:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"785:6:201"},"nodeType":"YulFunctionCall","src":"785:41:201"},"nodeType":"YulExpressionStatement","src":"785:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"709:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"720:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"731:4:201","type":""}],"src":"645:187:201"},{"body":{"nodeType":"YulBlock","src":"938:76:201","statements":[{"nodeType":"YulAssignment","src":"948:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"960:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"971:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"956:3:201"},"nodeType":"YulFunctionCall","src":"956:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"948:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"990:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"1001:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"983:6:201"},"nodeType":"YulFunctionCall","src":"983:25:201"},"nodeType":"YulExpressionStatement","src":"983:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"907:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"918:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"929:4:201","type":""}],"src":"837:177:201"},{"body":{"nodeType":"YulBlock","src":"1134:125:201","statements":[{"nodeType":"YulAssignment","src":"1144:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1156:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1167:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1152:3:201"},"nodeType":"YulFunctionCall","src":"1152:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1144:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1186:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1201:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1209:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1197:3:201"},"nodeType":"YulFunctionCall","src":"1197:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1179:6:201"},"nodeType":"YulFunctionCall","src":"1179:74:201"},"nodeType":"YulExpressionStatement","src":"1179:74:201"}]},"name":"abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1103:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1114:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1125:4:201","type":""}],"src":"1019:240:201"},{"body":{"nodeType":"YulBlock","src":"1296:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1313:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1316:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1306:6:201"},"nodeType":"YulFunctionCall","src":"1306:88:201"},"nodeType":"YulExpressionStatement","src":"1306:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1410:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1413:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1403:6:201"},"nodeType":"YulFunctionCall","src":"1403:15:201"},"nodeType":"YulExpressionStatement","src":"1403:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1434:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1437:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1427:6:201"},"nodeType":"YulFunctionCall","src":"1427:15:201"},"nodeType":"YulExpressionStatement","src":"1427:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1264:184:201"},{"body":{"nodeType":"YulBlock","src":"1498:289:201","statements":[{"nodeType":"YulAssignment","src":"1508:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1524:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1518:5:201"},"nodeType":"YulFunctionCall","src":"1518:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1508:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1536:117:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1558:6:201"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"1574:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"1580:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1570:3:201"},"nodeType":"YulFunctionCall","src":"1570:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"1585:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1566:3:201"},"nodeType":"YulFunctionCall","src":"1566:86:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1554:3:201"},"nodeType":"YulFunctionCall","src":"1554:99:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1540:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1728:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1730:16:201"},"nodeType":"YulFunctionCall","src":"1730:18:201"},"nodeType":"YulExpressionStatement","src":"1730:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1671:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"1683:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1668:2:201"},"nodeType":"YulFunctionCall","src":"1668:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1707:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1719:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1704:2:201"},"nodeType":"YulFunctionCall","src":"1704:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1665:2:201"},"nodeType":"YulFunctionCall","src":"1665:62:201"},"nodeType":"YulIf","src":"1662:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1766:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1770:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1759:6:201"},"nodeType":"YulFunctionCall","src":"1759:22:201"},"nodeType":"YulExpressionStatement","src":"1759:22:201"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"1478:4:201","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1487:6:201","type":""}],"src":"1453:334:201"},{"body":{"nodeType":"YulBlock","src":"1861:114:201","statements":[{"body":{"nodeType":"YulBlock","src":"1905:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1907:16:201"},"nodeType":"YulFunctionCall","src":"1907:18:201"},"nodeType":"YulExpressionStatement","src":"1907:18:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1877:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1885:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1874:2:201"},"nodeType":"YulFunctionCall","src":"1874:30:201"},"nodeType":"YulIf","src":"1871:56:201"},{"nodeType":"YulAssignment","src":"1936:33:201","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1952:1:201","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"1955:6:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1948:3:201"},"nodeType":"YulFunctionCall","src":"1948:14:201"},{"kind":"number","nodeType":"YulLiteral","src":"1964:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1944:3:201"},"nodeType":"YulFunctionCall","src":"1944:25:201"},"variableNames":[{"name":"size","nodeType":"YulIdentifier","src":"1936:4:201"}]}]},"name":"array_allocation_size_array_address_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nodeType":"YulTypedName","src":"1841:6:201","type":""}],"returnVariables":[{"name":"size","nodeType":"YulTypedName","src":"1852:4:201","type":""}],"src":"1792:183:201"},{"body":{"nodeType":"YulBlock","src":"2029:147:201","statements":[{"nodeType":"YulAssignment","src":"2039:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2061:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2048:12:201"},"nodeType":"YulFunctionCall","src":"2048:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"2039:5:201"}]},{"body":{"nodeType":"YulBlock","src":"2154:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2163:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2166:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2156:6:201"},"nodeType":"YulFunctionCall","src":"2156:12:201"},"nodeType":"YulExpressionStatement","src":"2156:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2090:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2101:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2108:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2097:3:201"},"nodeType":"YulFunctionCall","src":"2097:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2087:2:201"},"nodeType":"YulFunctionCall","src":"2087:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2080:6:201"},"nodeType":"YulFunctionCall","src":"2080:73:201"},"nodeType":"YulIf","src":"2077:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2008:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"2019:5:201","type":""}],"src":"1980:196:201"},{"body":{"nodeType":"YulBlock","src":"2245:598:201","statements":[{"body":{"nodeType":"YulBlock","src":"2294:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2303:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2306:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2296:6:201"},"nodeType":"YulFunctionCall","src":"2296:12:201"},"nodeType":"YulExpressionStatement","src":"2296:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2273:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2281:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2269:3:201"},"nodeType":"YulFunctionCall","src":"2269:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"2288:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2265:3:201"},"nodeType":"YulFunctionCall","src":"2265:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2258:6:201"},"nodeType":"YulFunctionCall","src":"2258:35:201"},"nodeType":"YulIf","src":"2255:55:201"},{"nodeType":"YulVariableDeclaration","src":"2319:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2342:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2329:12:201"},"nodeType":"YulFunctionCall","src":"2329:20:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2323:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2358:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2368:4:201","type":"","value":"0x20"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"2362:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2381:71:201","value":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2448:2:201"}],"functionName":{"name":"array_allocation_size_array_address_dyn","nodeType":"YulIdentifier","src":"2408:39:201"},"nodeType":"YulFunctionCall","src":"2408:43:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"2392:15:201"},"nodeType":"YulFunctionCall","src":"2392:60:201"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"2385:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2461:16:201","value":{"name":"dst","nodeType":"YulIdentifier","src":"2474:3:201"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"2465:5:201","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2493:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2498:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2486:6:201"},"nodeType":"YulFunctionCall","src":"2486:15:201"},"nodeType":"YulExpressionStatement","src":"2486:15:201"},{"nodeType":"YulAssignment","src":"2510:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2521:3:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2526:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2517:3:201"},"nodeType":"YulFunctionCall","src":"2517:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"2510:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"2538:46:201","value":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2560:6:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2572:1:201","type":"","value":"5"},{"name":"_1","nodeType":"YulIdentifier","src":"2575:2:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2568:3:201"},"nodeType":"YulFunctionCall","src":"2568:10:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2556:3:201"},"nodeType":"YulFunctionCall","src":"2556:23:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2581:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2552:3:201"},"nodeType":"YulFunctionCall","src":"2552:32:201"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"2542:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2612:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2621:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2624:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2614:6:201"},"nodeType":"YulFunctionCall","src":"2614:12:201"},"nodeType":"YulExpressionStatement","src":"2614:12:201"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"2599:6:201"},{"name":"end","nodeType":"YulIdentifier","src":"2607:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2596:2:201"},"nodeType":"YulFunctionCall","src":"2596:15:201"},"nodeType":"YulIf","src":"2593:35:201"},{"nodeType":"YulVariableDeclaration","src":"2637:26:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2652:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2660:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2648:3:201"},"nodeType":"YulFunctionCall","src":"2648:15:201"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"2641:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2728:86:201","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2749:3:201"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2767:3:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2754:12:201"},"nodeType":"YulFunctionCall","src":"2754:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2742:6:201"},"nodeType":"YulFunctionCall","src":"2742:30:201"},"nodeType":"YulExpressionStatement","src":"2742:30:201"},{"nodeType":"YulAssignment","src":"2785:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2796:3:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2801:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2792:3:201"},"nodeType":"YulFunctionCall","src":"2792:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"2785:3:201"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2683:3:201"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"2688:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2680:2:201"},"nodeType":"YulFunctionCall","src":"2680:15:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2696:23:201","statements":[{"nodeType":"YulAssignment","src":"2698:19:201","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2709:3:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2714:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2705:3:201"},"nodeType":"YulFunctionCall","src":"2705:12:201"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"2698:3:201"}]}]},"pre":{"nodeType":"YulBlock","src":"2676:3:201","statements":[]},"src":"2672:142:201"},{"nodeType":"YulAssignment","src":"2823:14:201","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"2832:5:201"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"2823:5:201"}]}]},"name":"abi_decode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2219:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"2227:3:201","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"2235:5:201","type":""}],"src":"2181:662:201"},{"body":{"nodeType":"YulBlock","src":"2900:537:201","statements":[{"body":{"nodeType":"YulBlock","src":"2949:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2958:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2961:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2951:6:201"},"nodeType":"YulFunctionCall","src":"2951:12:201"},"nodeType":"YulExpressionStatement","src":"2951:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2928:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2936:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2924:3:201"},"nodeType":"YulFunctionCall","src":"2924:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"2943:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2920:3:201"},"nodeType":"YulFunctionCall","src":"2920:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2913:6:201"},"nodeType":"YulFunctionCall","src":"2913:35:201"},"nodeType":"YulIf","src":"2910:55:201"},{"nodeType":"YulVariableDeclaration","src":"2974:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2997:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2984:12:201"},"nodeType":"YulFunctionCall","src":"2984:20:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2978:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3043:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"3045:16:201"},"nodeType":"YulFunctionCall","src":"3045:18:201"},"nodeType":"YulExpressionStatement","src":"3045:18:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3019:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"3023:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3016:2:201"},"nodeType":"YulFunctionCall","src":"3016:26:201"},"nodeType":"YulIf","src":"3013:52:201"},{"nodeType":"YulVariableDeclaration","src":"3074:129:201","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3117:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"3121:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3113:3:201"},"nodeType":"YulFunctionCall","src":"3113:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"3128:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3109:3:201"},"nodeType":"YulFunctionCall","src":"3109:86:201"},{"kind":"number","nodeType":"YulLiteral","src":"3197:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3105:3:201"},"nodeType":"YulFunctionCall","src":"3105:97:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"3089:15:201"},"nodeType":"YulFunctionCall","src":"3089:114:201"},"variables":[{"name":"array_1","nodeType":"YulTypedName","src":"3078:7:201","type":""}]},{"expression":{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"3219:7:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3228:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3212:6:201"},"nodeType":"YulFunctionCall","src":"3212:19:201"},"nodeType":"YulExpressionStatement","src":"3212:19:201"},{"body":{"nodeType":"YulBlock","src":"3279:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3288:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3291:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3281:6:201"},"nodeType":"YulFunctionCall","src":"3281:12:201"},"nodeType":"YulExpressionStatement","src":"3281:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3254:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3262:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3250:3:201"},"nodeType":"YulFunctionCall","src":"3250:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"3267:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3246:3:201"},"nodeType":"YulFunctionCall","src":"3246:26:201"},{"name":"end","nodeType":"YulIdentifier","src":"3274:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3243:2:201"},"nodeType":"YulFunctionCall","src":"3243:35:201"},"nodeType":"YulIf","src":"3240:55:201"},{"expression":{"arguments":[{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"3321:7:201"},{"kind":"number","nodeType":"YulLiteral","src":"3330:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3317:3:201"},"nodeType":"YulFunctionCall","src":"3317:18:201"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3341:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3349:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3337:3:201"},"nodeType":"YulFunctionCall","src":"3337:17:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3356:2:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"3304:12:201"},"nodeType":"YulFunctionCall","src":"3304:55:201"},"nodeType":"YulExpressionStatement","src":"3304:55:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"3383:7:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3392:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3379:3:201"},"nodeType":"YulFunctionCall","src":"3379:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"3397:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3375:3:201"},"nodeType":"YulFunctionCall","src":"3375:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"3404:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3368:6:201"},"nodeType":"YulFunctionCall","src":"3368:38:201"},"nodeType":"YulExpressionStatement","src":"3368:38:201"},{"nodeType":"YulAssignment","src":"3415:16:201","value":{"name":"array_1","nodeType":"YulIdentifier","src":"3424:7:201"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"3415:5:201"}]}]},"name":"abi_decode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2874:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"2882:3:201","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"2890:5:201","type":""}],"src":"2848:589:201"},{"body":{"nodeType":"YulBlock","src":"3664:1424:201","statements":[{"body":{"nodeType":"YulBlock","src":"3711:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3720:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3723:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3713:6:201"},"nodeType":"YulFunctionCall","src":"3713:12:201"},"nodeType":"YulExpressionStatement","src":"3713:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3685:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3694:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3681:3:201"},"nodeType":"YulFunctionCall","src":"3681:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3706:3:201","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3677:3:201"},"nodeType":"YulFunctionCall","src":"3677:33:201"},"nodeType":"YulIf","src":"3674:53:201"},{"nodeType":"YulVariableDeclaration","src":"3736:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3763:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3750:12:201"},"nodeType":"YulFunctionCall","src":"3750:23:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"3740:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3782:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3792:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3786:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3837:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3846:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3849:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3839:6:201"},"nodeType":"YulFunctionCall","src":"3839:12:201"},"nodeType":"YulExpressionStatement","src":"3839:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3825:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3833:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3822:2:201"},"nodeType":"YulFunctionCall","src":"3822:14:201"},"nodeType":"YulIf","src":"3819:34:201"},{"nodeType":"YulVariableDeclaration","src":"3862:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3876:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"3887:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3872:3:201"},"nodeType":"YulFunctionCall","src":"3872:22:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"3866:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3942:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3951:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3954:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3944:6:201"},"nodeType":"YulFunctionCall","src":"3944:12:201"},"nodeType":"YulExpressionStatement","src":"3944:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3921:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"3925:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3917:3:201"},"nodeType":"YulFunctionCall","src":"3917:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3932:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3913:3:201"},"nodeType":"YulFunctionCall","src":"3913:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3906:6:201"},"nodeType":"YulFunctionCall","src":"3906:35:201"},"nodeType":"YulIf","src":"3903:55:201"},{"nodeType":"YulVariableDeclaration","src":"3967:26:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3990:2:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3977:12:201"},"nodeType":"YulFunctionCall","src":"3977:16:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"3971:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4002:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"4012:4:201","type":"","value":"0x20"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"4006:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4025:71:201","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"4092:2:201"}],"functionName":{"name":"array_allocation_size_array_address_dyn","nodeType":"YulIdentifier","src":"4052:39:201"},"nodeType":"YulFunctionCall","src":"4052:43:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"4036:15:201"},"nodeType":"YulFunctionCall","src":"4036:60:201"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"4029:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4105:16:201","value":{"name":"dst","nodeType":"YulIdentifier","src":"4118:3:201"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"4109:5:201","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4137:3:201"},{"name":"_3","nodeType":"YulIdentifier","src":"4142:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4130:6:201"},"nodeType":"YulFunctionCall","src":"4130:15:201"},"nodeType":"YulExpressionStatement","src":"4130:15:201"},{"nodeType":"YulAssignment","src":"4154:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4165:3:201"},{"name":"_4","nodeType":"YulIdentifier","src":"4170:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4161:3:201"},"nodeType":"YulFunctionCall","src":"4161:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"4154:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"4182:42:201","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4204:2:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4212:1:201","type":"","value":"5"},{"name":"_3","nodeType":"YulIdentifier","src":"4215:2:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4208:3:201"},"nodeType":"YulFunctionCall","src":"4208:10:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4200:3:201"},"nodeType":"YulFunctionCall","src":"4200:19:201"},{"name":"_4","nodeType":"YulIdentifier","src":"4221:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4196:3:201"},"nodeType":"YulFunctionCall","src":"4196:28:201"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"4186:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4256:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4265:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4268:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4258:6:201"},"nodeType":"YulFunctionCall","src":"4258:12:201"},"nodeType":"YulExpressionStatement","src":"4258:12:201"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"4239:6:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4247:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4236:2:201"},"nodeType":"YulFunctionCall","src":"4236:19:201"},"nodeType":"YulIf","src":"4233:39:201"},{"nodeType":"YulVariableDeclaration","src":"4281:22:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4296:2:201"},{"name":"_4","nodeType":"YulIdentifier","src":"4300:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4292:3:201"},"nodeType":"YulFunctionCall","src":"4292:11:201"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"4285:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4368:92:201","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4389:3:201"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4413:3:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"4394:18:201"},"nodeType":"YulFunctionCall","src":"4394:23:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4382:6:201"},"nodeType":"YulFunctionCall","src":"4382:36:201"},"nodeType":"YulExpressionStatement","src":"4382:36:201"},{"nodeType":"YulAssignment","src":"4431:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4442:3:201"},{"name":"_4","nodeType":"YulIdentifier","src":"4447:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4438:3:201"},"nodeType":"YulFunctionCall","src":"4438:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"4431:3:201"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4323:3:201"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"4328:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4320:2:201"},"nodeType":"YulFunctionCall","src":"4320:15:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"4336:23:201","statements":[{"nodeType":"YulAssignment","src":"4338:19:201","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4349:3:201"},{"name":"_4","nodeType":"YulIdentifier","src":"4354:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4345:3:201"},"nodeType":"YulFunctionCall","src":"4345:12:201"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"4338:3:201"}]}]},"pre":{"nodeType":"YulBlock","src":"4316:3:201","statements":[]},"src":"4312:148:201"},{"nodeType":"YulAssignment","src":"4469:15:201","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"4479:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4469:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"4493:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4526:9:201"},{"name":"_4","nodeType":"YulIdentifier","src":"4537:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4522:3:201"},"nodeType":"YulFunctionCall","src":"4522:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4509:12:201"},"nodeType":"YulFunctionCall","src":"4509:32:201"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"4497:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4570:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4579:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4582:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4572:6:201"},"nodeType":"YulFunctionCall","src":"4572:12:201"},"nodeType":"YulExpressionStatement","src":"4572:12:201"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"4556:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4566:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4553:2:201"},"nodeType":"YulFunctionCall","src":"4553:16:201"},"nodeType":"YulIf","src":"4550:36:201"},{"nodeType":"YulAssignment","src":"4595:73:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4638:9:201"},{"name":"offset_1","nodeType":"YulIdentifier","src":"4649:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4634:3:201"},"nodeType":"YulFunctionCall","src":"4634:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4660:7:201"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nodeType":"YulIdentifier","src":"4605:28:201"},"nodeType":"YulFunctionCall","src":"4605:63:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4595:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"4677:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4710:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4721:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4706:3:201"},"nodeType":"YulFunctionCall","src":"4706:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4693:12:201"},"nodeType":"YulFunctionCall","src":"4693:32:201"},"variables":[{"name":"offset_2","nodeType":"YulTypedName","src":"4681:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4754:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4763:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4766:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4756:6:201"},"nodeType":"YulFunctionCall","src":"4756:12:201"},"nodeType":"YulExpressionStatement","src":"4756:12:201"}]},"condition":{"arguments":[{"name":"offset_2","nodeType":"YulIdentifier","src":"4740:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4750:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4737:2:201"},"nodeType":"YulFunctionCall","src":"4737:16:201"},"nodeType":"YulIf","src":"4734:36:201"},{"nodeType":"YulAssignment","src":"4779:73:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4822:9:201"},{"name":"offset_2","nodeType":"YulIdentifier","src":"4833:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4818:3:201"},"nodeType":"YulFunctionCall","src":"4818:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4844:7:201"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nodeType":"YulIdentifier","src":"4789:28:201"},"nodeType":"YulFunctionCall","src":"4789:63:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4779:6:201"}]},{"nodeType":"YulAssignment","src":"4861:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4894:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4905:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4890:3:201"},"nodeType":"YulFunctionCall","src":"4890:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"4871:18:201"},"nodeType":"YulFunctionCall","src":"4871:38:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"4861:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"4918:49:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4951:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4962:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4947:3:201"},"nodeType":"YulFunctionCall","src":"4947:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4934:12:201"},"nodeType":"YulFunctionCall","src":"4934:33:201"},"variables":[{"name":"offset_3","nodeType":"YulTypedName","src":"4922:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4996:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5005:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5008:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4998:6:201"},"nodeType":"YulFunctionCall","src":"4998:12:201"},"nodeType":"YulExpressionStatement","src":"4998:12:201"}]},"condition":{"arguments":[{"name":"offset_3","nodeType":"YulIdentifier","src":"4982:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4992:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4979:2:201"},"nodeType":"YulFunctionCall","src":"4979:16:201"},"nodeType":"YulIf","src":"4976:36:201"},{"nodeType":"YulAssignment","src":"5021:61:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5052:9:201"},{"name":"offset_3","nodeType":"YulIdentifier","src":"5063:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5048:3:201"},"nodeType":"YulFunctionCall","src":"5048:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5074:7:201"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"5031:16:201"},"nodeType":"YulFunctionCall","src":"5031:51:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"5021:6:201"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_addresst_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3598:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3609:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3621:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3629:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3637:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3645:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3653:6:201","type":""}],"src":"3442:1646:201"},{"body":{"nodeType":"YulBlock","src":"5163:110:201","statements":[{"body":{"nodeType":"YulBlock","src":"5209:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5218:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5221:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5211:6:201"},"nodeType":"YulFunctionCall","src":"5211:12:201"},"nodeType":"YulExpressionStatement","src":"5211:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5184:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"5193:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5180:3:201"},"nodeType":"YulFunctionCall","src":"5180:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"5205:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5176:3:201"},"nodeType":"YulFunctionCall","src":"5176:32:201"},"nodeType":"YulIf","src":"5173:52:201"},{"nodeType":"YulAssignment","src":"5234:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5257:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5244:12:201"},"nodeType":"YulFunctionCall","src":"5244:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5234:6:201"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5129:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5140:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5152:6:201","type":""}],"src":"5093:180:201"},{"body":{"nodeType":"YulBlock","src":"5339:374:201","statements":[{"nodeType":"YulVariableDeclaration","src":"5349:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5369:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5363:5:201"},"nodeType":"YulFunctionCall","src":"5363:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"5353:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5391:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"5396:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5384:6:201"},"nodeType":"YulFunctionCall","src":"5384:19:201"},"nodeType":"YulExpressionStatement","src":"5384:19:201"},{"nodeType":"YulVariableDeclaration","src":"5412:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5422:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5416:2:201","type":""}]},{"nodeType":"YulAssignment","src":"5435:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5446:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5451:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5442:3:201"},"nodeType":"YulFunctionCall","src":"5442:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"5435:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"5463:28:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5481:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5488:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5477:3:201"},"nodeType":"YulFunctionCall","src":"5477:14:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"5467:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5500:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5509:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"5504:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"5568:120:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5589:3:201"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"5600:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5594:5:201"},"nodeType":"YulFunctionCall","src":"5594:13:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5582:6:201"},"nodeType":"YulFunctionCall","src":"5582:26:201"},"nodeType":"YulExpressionStatement","src":"5582:26:201"},{"nodeType":"YulAssignment","src":"5621:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5632:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5637:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5628:3:201"},"nodeType":"YulFunctionCall","src":"5628:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"5621:3:201"}]},{"nodeType":"YulAssignment","src":"5653:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"5667:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5675:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5663:3:201"},"nodeType":"YulFunctionCall","src":"5663:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"5653:6:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5530:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"5533:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5527:2:201"},"nodeType":"YulFunctionCall","src":"5527:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5541:18:201","statements":[{"nodeType":"YulAssignment","src":"5543:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5552:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"5555:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5548:3:201"},"nodeType":"YulFunctionCall","src":"5548:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"5543:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"5523:3:201","statements":[]},"src":"5519:169:201"},{"nodeType":"YulAssignment","src":"5697:10:201","value":{"name":"pos","nodeType":"YulIdentifier","src":"5704:3:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"5697:3:201"}]}]},"name":"abi_encode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"5316:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"5323:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"5331:3:201","type":""}],"src":"5278:435:201"},{"body":{"nodeType":"YulBlock","src":"6025:753:201","statements":[{"nodeType":"YulVariableDeclaration","src":"6035:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6053:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6064:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6049:3:201"},"nodeType":"YulFunctionCall","src":"6049:18:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"6039:6:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6083:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6094:2:201","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6076:6:201"},"nodeType":"YulFunctionCall","src":"6076:21:201"},"nodeType":"YulExpressionStatement","src":"6076:21:201"},{"nodeType":"YulVariableDeclaration","src":"6106:17:201","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"6117:6:201"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"6110:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6132:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6152:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6146:5:201"},"nodeType":"YulFunctionCall","src":"6146:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"6136:6:201","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"6175:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"6183:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6168:6:201"},"nodeType":"YulFunctionCall","src":"6168:22:201"},"nodeType":"YulExpressionStatement","src":"6168:22:201"},{"nodeType":"YulAssignment","src":"6199:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6210:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6221:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6206:3:201"},"nodeType":"YulFunctionCall","src":"6206:19:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"6199:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"6234:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6244:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6238:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6257:29:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6275:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6283:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6271:3:201"},"nodeType":"YulFunctionCall","src":"6271:15:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"6261:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6295:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6304:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"6299:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"6363:169:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6384:3:201"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"6399:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6393:5:201"},"nodeType":"YulFunctionCall","src":"6393:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"6408:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6389:3:201"},"nodeType":"YulFunctionCall","src":"6389:62:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6377:6:201"},"nodeType":"YulFunctionCall","src":"6377:75:201"},"nodeType":"YulExpressionStatement","src":"6377:75:201"},{"nodeType":"YulAssignment","src":"6465:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6476:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6481:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6472:3:201"},"nodeType":"YulFunctionCall","src":"6472:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"6465:3:201"}]},{"nodeType":"YulAssignment","src":"6497:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"6511:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6519:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6507:3:201"},"nodeType":"YulFunctionCall","src":"6507:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"6497:6:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6325:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"6328:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6322:2:201"},"nodeType":"YulFunctionCall","src":"6322:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"6336:18:201","statements":[{"nodeType":"YulAssignment","src":"6338:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6347:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"6350:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6343:3:201"},"nodeType":"YulFunctionCall","src":"6343:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"6338:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"6318:3:201","statements":[]},"src":"6314:218:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6552:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6563:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6548:3:201"},"nodeType":"YulFunctionCall","src":"6548:18:201"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6572:3:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6577:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6568:3:201"},"nodeType":"YulFunctionCall","src":"6568:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6541:6:201"},"nodeType":"YulFunctionCall","src":"6541:47:201"},"nodeType":"YulExpressionStatement","src":"6541:47:201"},{"nodeType":"YulVariableDeclaration","src":"6597:55:201","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"6640:6:201"},{"name":"pos","nodeType":"YulIdentifier","src":"6648:3:201"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"6611:28:201"},"nodeType":"YulFunctionCall","src":"6611:41:201"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"6601:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6672:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6683:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6668:3:201"},"nodeType":"YulFunctionCall","src":"6668:18:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"6692:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6700:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6688:3:201"},"nodeType":"YulFunctionCall","src":"6688:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6661:6:201"},"nodeType":"YulFunctionCall","src":"6661:50:201"},"nodeType":"YulExpressionStatement","src":"6661:50:201"},{"nodeType":"YulAssignment","src":"6720:52:201","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"6757:6:201"},{"name":"tail_2","nodeType":"YulIdentifier","src":"6765:6:201"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"6728:28:201"},"nodeType":"YulFunctionCall","src":"6728:44:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6720:4:201"}]}]},"name":"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5978:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5989:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5997:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6005:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6016:4:201","type":""}],"src":"5718:1060:201"},{"body":{"nodeType":"YulBlock","src":"6815:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6832:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6835:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6825:6:201"},"nodeType":"YulFunctionCall","src":"6825:88:201"},"nodeType":"YulExpressionStatement","src":"6825:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6929:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6932:4:201","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6922:6:201"},"nodeType":"YulFunctionCall","src":"6922:15:201"},"nodeType":"YulExpressionStatement","src":"6922:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6953:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6956:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6946:6:201"},"nodeType":"YulFunctionCall","src":"6946:15:201"},"nodeType":"YulExpressionStatement","src":"6946:15:201"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"6783:184:201"},{"body":{"nodeType":"YulBlock","src":"7073:125:201","statements":[{"nodeType":"YulAssignment","src":"7083:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7095:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7106:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7091:3:201"},"nodeType":"YulFunctionCall","src":"7091:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7083:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7125:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7140:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7148:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7136:3:201"},"nodeType":"YulFunctionCall","src":"7136:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7118:6:201"},"nodeType":"YulFunctionCall","src":"7118:74:201"},"nodeType":"YulExpressionStatement","src":"7118:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7042:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7053:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7064:4:201","type":""}],"src":"6972:226:201"},{"body":{"nodeType":"YulBlock","src":"7284:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"7330:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7339:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7342:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7332:6:201"},"nodeType":"YulFunctionCall","src":"7332:12:201"},"nodeType":"YulExpressionStatement","src":"7332:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7305:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"7314:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7301:3:201"},"nodeType":"YulFunctionCall","src":"7301:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"7326:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7297:3:201"},"nodeType":"YulFunctionCall","src":"7297:32:201"},"nodeType":"YulIf","src":"7294:52:201"},{"nodeType":"YulAssignment","src":"7355:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7371:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7365:5:201"},"nodeType":"YulFunctionCall","src":"7365:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7355:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7250:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7261:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7273:6:201","type":""}],"src":"7203:184:201"},{"body":{"nodeType":"YulBlock","src":"7566:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7583:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7594:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7576:6:201"},"nodeType":"YulFunctionCall","src":"7576:21:201"},"nodeType":"YulExpressionStatement","src":"7576:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7617:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7628:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7613:3:201"},"nodeType":"YulFunctionCall","src":"7613:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"7633:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7606:6:201"},"nodeType":"YulFunctionCall","src":"7606:30:201"},"nodeType":"YulExpressionStatement","src":"7606:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7656:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7667:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7652:3:201"},"nodeType":"YulFunctionCall","src":"7652:18:201"},{"hexValue":"496e76616c69642062616c616e636520666f722074686520636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"7672:34:201","type":"","value":"Invalid balance for the contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7645:6:201"},"nodeType":"YulFunctionCall","src":"7645:62:201"},"nodeType":"YulExpressionStatement","src":"7645:62:201"},{"nodeType":"YulAssignment","src":"7716:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7728:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7739:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7724:3:201"},"nodeType":"YulFunctionCall","src":"7724:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7716:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_b7eb1acc2a916521532d41db798e862e3bc634b536ffa4062c39b663132b6869__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7543:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7557:4:201","type":""}],"src":"7392:356:201"},{"body":{"nodeType":"YulBlock","src":"7785:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7802:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7805:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7795:6:201"},"nodeType":"YulFunctionCall","src":"7795:88:201"},"nodeType":"YulExpressionStatement","src":"7795:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7899:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7902:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7892:6:201"},"nodeType":"YulFunctionCall","src":"7892:15:201"},"nodeType":"YulExpressionStatement","src":"7892:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7923:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7926:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7916:6:201"},"nodeType":"YulFunctionCall","src":"7916:15:201"},"nodeType":"YulExpressionStatement","src":"7916:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"7753:184:201"},{"body":{"nodeType":"YulBlock","src":"7990:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"8017:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"8019:16:201"},"nodeType":"YulFunctionCall","src":"8019:18:201"},"nodeType":"YulExpressionStatement","src":"8019:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"8006:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"8013:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"8009:3:201"},"nodeType":"YulFunctionCall","src":"8009:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8003:2:201"},"nodeType":"YulFunctionCall","src":"8003:13:201"},"nodeType":"YulIf","src":"8000:39:201"},{"nodeType":"YulAssignment","src":"8048:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"8059:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"8062:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8055:3:201"},"nodeType":"YulFunctionCall","src":"8055:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"8048:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"7973:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"7976:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"7982:3:201","type":""}],"src":"7942:128:201"},{"body":{"nodeType":"YulBlock","src":"8204:168:201","statements":[{"nodeType":"YulAssignment","src":"8214:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8226:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8237:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8222:3:201"},"nodeType":"YulFunctionCall","src":"8222:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8214:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8256:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8271:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8279:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8267:3:201"},"nodeType":"YulFunctionCall","src":"8267:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8249:6:201"},"nodeType":"YulFunctionCall","src":"8249:74:201"},"nodeType":"YulExpressionStatement","src":"8249:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8343:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8354:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8339:3:201"},"nodeType":"YulFunctionCall","src":"8339:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"8359:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8332:6:201"},"nodeType":"YulFunctionCall","src":"8332:34:201"},"nodeType":"YulExpressionStatement","src":"8332:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8165:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8176:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8184:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8195:4:201","type":""}],"src":"8075:297:201"},{"body":{"nodeType":"YulBlock","src":"8455:167:201","statements":[{"body":{"nodeType":"YulBlock","src":"8501:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8510:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8513:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8503:6:201"},"nodeType":"YulFunctionCall","src":"8503:12:201"},"nodeType":"YulExpressionStatement","src":"8503:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8476:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"8485:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8472:3:201"},"nodeType":"YulFunctionCall","src":"8472:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"8497:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8468:3:201"},"nodeType":"YulFunctionCall","src":"8468:32:201"},"nodeType":"YulIf","src":"8465:52:201"},{"nodeType":"YulVariableDeclaration","src":"8526:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8545:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8539:5:201"},"nodeType":"YulFunctionCall","src":"8539:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"8530:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8586:5:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"8564:21:201"},"nodeType":"YulFunctionCall","src":"8564:28:201"},"nodeType":"YulExpressionStatement","src":"8564:28:201"},{"nodeType":"YulAssignment","src":"8601:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"8611:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8601:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8421:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8432:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8444:6:201","type":""}],"src":"8377:245:201"},{"body":{"nodeType":"YulBlock","src":"8674:148:201","statements":[{"body":{"nodeType":"YulBlock","src":"8765:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"8767:16:201"},"nodeType":"YulFunctionCall","src":"8767:18:201"},"nodeType":"YulExpressionStatement","src":"8767:18:201"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8690:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"8697:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8687:2:201"},"nodeType":"YulFunctionCall","src":"8687:77:201"},"nodeType":"YulIf","src":"8684:103:201"},{"nodeType":"YulAssignment","src":"8796:20:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8807:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"8814:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8803:3:201"},"nodeType":"YulFunctionCall","src":"8803:13:201"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"8796:3:201"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"8656:5:201","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"8666:3:201","type":""}],"src":"8627:195:201"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_bool(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function array_allocation_size_array_address_dyn(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n        size := add(shl(5, length), 0x20)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_array_uint256_dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0x20\n        let dst := allocate_memory(array_allocation_size_array_address_dyn(_1))\n        let dst_1 := dst\n        mstore(dst, _1)\n        dst := add(dst, _2)\n        let srcEnd := add(add(offset, shl(5, _1)), _2)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, _2)\n        for { } lt(src, srcEnd) { src := add(src, _2) }\n        {\n            mstore(dst, calldataload(src))\n            dst := add(dst, _2)\n        }\n        array := dst_1\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        if gt(_1, 0xffffffffffffffff) { panic_error_0x41() }\n        let array_1 := allocate_memory(add(and(add(_1, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), 0x20))\n        mstore(array_1, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(array_1, _1), 0x20), 0)\n        array := array_1\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        let _4 := 0x20\n        let dst := allocate_memory(array_allocation_size_array_address_dyn(_3))\n        let dst_1 := dst\n        mstore(dst, _3)\n        dst := add(dst, _4)\n        let srcEnd := add(add(_2, shl(5, _3)), _4)\n        if gt(srcEnd, dataEnd) { revert(0, 0) }\n        let src := add(_2, _4)\n        for { } lt(src, srcEnd) { src := add(src, _4) }\n        {\n            mstore(dst, abi_decode_address(src))\n            dst := add(dst, _4)\n        }\n        value0 := dst_1\n        let offset_1 := calldataload(add(headStart, _4))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_array_uint256_dyn(add(headStart, offset_1), dataEnd)\n        let offset_2 := calldataload(add(headStart, 64))\n        if gt(offset_2, _1) { revert(0, 0) }\n        value2 := abi_decode_array_uint256_dyn(add(headStart, offset_2), dataEnd)\n        value3 := abi_decode_address(add(headStart, 96))\n        let offset_3 := calldataload(add(headStart, 128))\n        if gt(offset_3, _1) { revert(0, 0) }\n        value4 := abi_decode_bytes(add(headStart, offset_3), dataEnd)\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_array_uint256_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 96)\n        mstore(headStart, 96)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 128)\n        let _1 := 0x20\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        mstore(add(headStart, _1), sub(pos, headStart))\n        let tail_2 := abi_encode_array_uint256_dyn(value1, pos)\n        mstore(add(headStart, 64), sub(tail_2, headStart))\n        tail := abi_encode_array_uint256_dyn(value2, tail_2)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_b7eb1acc2a916521532d41db798e862e3bc634b536ffa4062c39b663132b6869__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Invalid balance for the contract\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"3403":[{"length":32,"start":146}],"3407":[{"length":32,"start":332},{"length":32,"start":1260}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100885760003560e01c80637535d2461161005b5780637535d24614610147578063920f5c841461016e578063bf443f8514610181578063e9a6a25b1461019457600080fd5b80630542975c1461008d578063388f70f1146100de5780634444f3311461011f5780635e76bba314610136575b600080fd5b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61011d6100ec3660046105d9565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b005b60025460ff165b60405190151581526020016100d5565b6001546040519081526020016100d5565b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b61012661017c3660046107c1565b6101d3565b61011d61018f3660046108db565b600155565b61011d6101a23660046105d9565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000805460ff1615610227577f9972b212e52913783072b960dd41527ae8b6e609d017b64039758dda0ce412788686866040516102129392919061092f565b60405180910390a15060025460ff16156105bf565b60005b865181101561057f576000878281518110610247576102476109b1565b60200260200101519050878281518110610263576102636109b1565b60209081029190910101516040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa1580156102d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102fd91906109e0565b87838151811061030f5761030f6109b1565b60200260200101511115610383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f496e76616c69642062616c616e636520666f722074686520636f6e7472616374604482015260640160405180910390fd5b6000600154600014156103d3578683815181106103a2576103a26109b1565b60200260200101518884815181106103bc576103bc6109b1565b60200260200101516103ce9190610a28565b6103d7565b6001545b90508173ffffffffffffffffffffffffffffffffffffffff166340c10f1930898681518110610408576104086109b1565b60200260200101516040518363ffffffff1660e01b815260040161044e92919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6020604051808303816000875af115801561046d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104919190610a40565b508883815181106104a4576104a46109b1565b60209081029190910101516040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610545573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105699190610a40565b505050808061057790610a5d565b91505061022a565b507fbd6b6bfac59612765a81cc4fdee74ab4859671fa14a562056f9eea438735a78a8686866040516105b39392919061092f565b60405180910390a15060015b95945050505050565b80151581146105d657600080fd5b50565b6000602082840312156105eb57600080fd5b81356105f6816105c8565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610673576106736105fd565b604052919050565b600067ffffffffffffffff821115610695576106956105fd565b5060051b60200190565b803573ffffffffffffffffffffffffffffffffffffffff811681146106c357600080fd5b919050565b600082601f8301126106d957600080fd5b813560206106ee6106e98361067b565b61062c565b82815260059290921b8401810191818101908684111561070d57600080fd5b8286015b848110156107285780358352918301918301610711565b509695505050505050565b600082601f83011261074457600080fd5b813567ffffffffffffffff81111561075e5761075e6105fd565b61078f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161062c565b8181528460208386010111156107a457600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a086880312156107d957600080fd5b853567ffffffffffffffff808211156107f157600080fd5b818801915088601f83011261080557600080fd5b813560206108156106e98361067b565b82815260059290921b8401810191818101908c84111561083457600080fd5b948201945b838610156108595761084a8661069f565b82529482019490820190610839565b9950508901359250508082111561086f57600080fd5b61087b89838a016106c8565b9550604088013591508082111561089157600080fd5b61089d89838a016106c8565b94506108ab6060890161069f565b935060808801359150808211156108c157600080fd5b506108ce88828901610733565b9150509295509295909350565b6000602082840312156108ed57600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561092457815187529582019590820190600101610908565b509495945050505050565b606080825284519082018190526000906020906080840190828801845b8281101561097e57815173ffffffffffffffffffffffffffffffffffffffff168452928401929084019060010161094c565b5050508381038285015261099281876108f4565b91505082810360408401526109a781856108f4565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156109f257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610a3b57610a3b6109f9565b500190565b600060208284031215610a5257600080fd5b81516105f6816105c8565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610a8f57610a8f6109f9565b506001019056fea2646970667358221220e6a09a719e9afadd7dcdc1161bd2ba776467ff6cb6179d9b4df9c65bef44ea7764736f6c634300080a0033","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 0x7535D246 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x147 JUMPI DUP1 PUSH4 0x920F5C84 EQ PUSH2 0x16E JUMPI DUP1 PUSH4 0xBF443F85 EQ PUSH2 0x181 JUMPI DUP1 PUSH4 0xE9A6A25B EQ PUSH2 0x194 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x388F70F1 EQ PUSH2 0xDE JUMPI DUP1 PUSH4 0x4444F331 EQ PUSH2 0x11F JUMPI DUP1 PUSH4 0x5E76BBA3 EQ PUSH2 0x136 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB4 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x11D PUSH2 0xEC CALLDATASIZE PUSH1 0x4 PUSH2 0x5D9 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0xFF AND JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD5 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD5 JUMP JUMPDEST PUSH2 0xB4 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x126 PUSH2 0x17C CALLDATASIZE PUSH1 0x4 PUSH2 0x7C1 JUMP JUMPDEST PUSH2 0x1D3 JUMP JUMPDEST PUSH2 0x11D PUSH2 0x18F CALLDATASIZE PUSH1 0x4 PUSH2 0x8DB JUMP JUMPDEST PUSH1 0x1 SSTORE JUMP JUMPDEST PUSH2 0x11D PUSH2 0x1A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x5D9 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x227 JUMPI PUSH32 0x9972B212E52913783072B960DD41527AE8B6E609D017B64039758DDA0CE41278 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x212 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x92F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH1 0x2 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x5BF JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x57F JUMPI PUSH1 0x0 DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x247 JUMPI PUSH2 0x247 PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x263 JUMPI PUSH2 0x263 PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2FD SWAP2 SWAP1 PUSH2 0x9E0 JUMP JUMPDEST DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x30F JUMPI PUSH2 0x30F PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT ISZERO PUSH2 0x383 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C69642062616C616E636520666F722074686520636F6E7472616374 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 SLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x3D3 JUMPI DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3A2 JUMPI PUSH2 0x3A2 PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3BC JUMPI PUSH2 0x3BC PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3CE SWAP2 SWAP1 PUSH2 0xA28 JUMP JUMPDEST PUSH2 0x3D7 JUMP JUMPDEST PUSH1 0x1 SLOAD JUMPDEST SWAP1 POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x40C10F19 ADDRESS DUP10 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x408 JUMPI PUSH2 0x408 PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x44E SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x46D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x491 SWAP2 SWAP1 PUSH2 0xA40 JUMP JUMPDEST POP DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4A4 JUMPI PUSH2 0x4A4 PUSH2 0x9B1 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP5 SWAP1 MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x545 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x569 SWAP2 SWAP1 PUSH2 0xA40 JUMP JUMPDEST POP POP POP DUP1 DUP1 PUSH2 0x577 SWAP1 PUSH2 0xA5D JUMP JUMPDEST SWAP2 POP POP PUSH2 0x22A JUMP JUMPDEST POP PUSH32 0xBD6B6BFAC59612765A81CC4FDEE74AB4859671FA14A562056F9EEA438735A78A DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x5B3 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x92F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP PUSH1 0x1 JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x5D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5F6 DUP2 PUSH2 0x5C8 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x673 JUMPI PUSH2 0x673 PUSH2 0x5FD JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x695 JUMPI PUSH2 0x695 PUSH2 0x5FD JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x6C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x6D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x6EE PUSH2 0x6E9 DUP4 PUSH2 0x67B JUMP JUMPDEST PUSH2 0x62C JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP7 DUP5 GT ISZERO PUSH2 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP7 ADD JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x728 JUMPI DUP1 CALLDATALOAD DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x711 JUMP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x744 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x75E JUMPI PUSH2 0x75E PUSH2 0x5FD JUMP JUMPDEST PUSH2 0x78F PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x62C JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x7A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x7D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x7F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x805 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x815 PUSH2 0x6E9 DUP4 PUSH2 0x67B JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP13 DUP5 GT ISZERO PUSH2 0x834 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP5 DUP3 ADD SWAP5 JUMPDEST DUP4 DUP7 LT ISZERO PUSH2 0x859 JUMPI PUSH2 0x84A DUP7 PUSH2 0x69F JUMP JUMPDEST DUP3 MSTORE SWAP5 DUP3 ADD SWAP5 SWAP1 DUP3 ADD SWAP1 PUSH2 0x839 JUMP JUMPDEST SWAP10 POP POP DUP10 ADD CALLDATALOAD SWAP3 POP POP DUP1 DUP3 GT ISZERO PUSH2 0x86F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x87B DUP10 DUP4 DUP11 ADD PUSH2 0x6C8 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x891 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x89D DUP10 DUP4 DUP11 ADD PUSH2 0x6C8 JUMP JUMPDEST SWAP5 POP PUSH2 0x8AB PUSH1 0x60 DUP10 ADD PUSH2 0x69F JUMP JUMPDEST SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x8C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x8CE DUP9 DUP3 DUP10 ADD PUSH2 0x733 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x924 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x908 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 MSTORE DUP5 MLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x80 DUP5 ADD SWAP1 DUP3 DUP9 ADD DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x97E JUMPI DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x94C JUMP JUMPDEST POP POP POP DUP4 DUP2 SUB DUP3 DUP6 ADD MSTORE PUSH2 0x992 DUP2 DUP8 PUSH2 0x8F4 JUMP JUMPDEST SWAP2 POP POP DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x9A7 DUP2 DUP6 PUSH2 0x8F4 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0xA3B JUMPI PUSH2 0xA3B PUSH2 0x9F9 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x5F6 DUP2 PUSH2 0x5C8 JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0xA8F JUMPI PUSH2 0xA8F PUSH2 0x9F9 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE6 LOG0 SWAP11 PUSH18 0x9E9AFADD7DCDC1161BD2BA776467FF6CB617 SWAP14 SWAP12 0x4D 0xF9 0xC6 JUMPDEST 0xEF DIFFICULTY 0xEA PUSH24 0x64736F6C634300080A003300000000000000000000000000 ","sourceMap":"454:1974:53:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;459:67:24;;;;;;;;221:42:201;209:55;;;191:74;;179:2;164:18;459:67:24;;;;;;;;908:84:53;;;;;;:::i;:::-;966:14;:21;;;;;;;;;;;;;908:84;;;1279:80;1342:12;;;;1279:80;;;810:14:201;;803:22;785:41;;773:2;758:18;1279:80:53;645:187:201;1181:94:53;1254:16;;1181:94;;983:25:201;;;971:2;956:18;1181:94:53;837:177:201;530:36:24;;;;;1363:1063:53;;;;;;:::i;:::-;;:::i;996:105::-;;;;;;:::i;:::-;1062:16;:34;996:105;1105:72;;;;;;:::i;:::-;1153:12;:19;;;;;;;;;;;;;1105:72;1363:1063;1562:4;1578:14;;;;1574:111;;;1607:43;1624:6;1632:7;1641:8;1607:43;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;1666:12:53;;;;1665:13;1658:20;;1574:111;1696:9;1691:655;1715:6;:13;1711:1;:17;1691:655;;;1793:19;1829:6;1836:1;1829:9;;;;;;;;:::i;:::-;;;;;;;1793:46;;1939:6;1946:1;1939:9;;;;;;;;:::i;:::-;;;;;;;;;;;1932:42;;;;;1968:4;1932:42;;;191:74:201;1932:27:53;;;;;;;164:18:201;;1932:42:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1918:7;1926:1;1918:10;;;;;;;;:::i;:::-;;;;;;;:56;;1901:125;;;;;;;7594:2:201;1901:125:53;;;7576:21:201;;;7613:18;;;7606:30;7672:34;7652:18;;;7645:62;7724:18;;1901:125:53;;;;;;;;2035:22;2061:16;;2081:1;2061:21;;2060:85;;2134:8;2143:1;2134:11;;;;;;;;:::i;:::-;;;;;;;2121:7;2129:1;2121:10;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;2060:85;;;2094:16;;2060:85;2035:110;;2236:5;:10;;;2255:4;2262:8;2271:1;2262:11;;;;;;;;:::i;:::-;;;;;;;2236:38;;;;;;;;;;;;;;;8279:42:201;8267:55;;;;8249:74;;8354:2;8339:18;;8332:34;8237:2;8222:18;;8075:297;2236:38:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2290:6;2297:1;2290:9;;;;;;;;:::i;:::-;;;;;;;;;;;2283:56;;;;;:25;2317:4;8267:55:201;;2283:56:53;;;8249:74:201;8339:18;;;8332:34;;;2283:25:53;;;;;;8222:18:201;;2283:56:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1735:611;;1730:3;;;;;:::i;:::-;;;;1691:655;;;;2357:46;2377:6;2385:7;2394:8;2357:46;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;2417:4:53;1363:1063;;;;;;;;:::o;276:118:201:-;362:5;355:13;348:21;341:5;338:32;328:60;;384:1;381;374:12;328:60;276:118;:::o;399:241::-;455:6;508:2;496:9;487:7;483:23;479:32;476:52;;;524:1;521;514:12;476:52;563:9;550:23;582:28;604:5;582:28;:::i;:::-;629:5;399:241;-1:-1:-1;;;399:241:201:o;1264:184::-;1316:77;1313:1;1306:88;1413:4;1410:1;1403:15;1437:4;1434:1;1427:15;1453:334;1524:2;1518:9;1580:2;1570:13;;1585:66;1566:86;1554:99;;1683:18;1668:34;;1704:22;;;1665:62;1662:88;;;1730:18;;:::i;:::-;1766:2;1759:22;1453:334;;-1:-1:-1;1453:334:201:o;1792:183::-;1852:4;1885:18;1877:6;1874:30;1871:56;;;1907:18;;:::i;:::-;-1:-1:-1;1952:1:201;1948:14;1964:4;1944:25;;1792:183::o;1980:196::-;2048:20;;2108:42;2097:54;;2087:65;;2077:93;;2166:1;2163;2156:12;2077:93;1980:196;;;:::o;2181:662::-;2235:5;2288:3;2281:4;2273:6;2269:17;2265:27;2255:55;;2306:1;2303;2296:12;2255:55;2342:6;2329:20;2368:4;2392:60;2408:43;2448:2;2408:43;:::i;:::-;2392:60;:::i;:::-;2486:15;;;2572:1;2568:10;;;;2556:23;;2552:32;;;2517:12;;;;2596:15;;;2593:35;;;2624:1;2621;2614:12;2593:35;2660:2;2652:6;2648:15;2672:142;2688:6;2683:3;2680:15;2672:142;;;2754:17;;2742:30;;2792:12;;;;2705;;2672:142;;;-1:-1:-1;2832:5:201;2181:662;-1:-1:-1;;;;;;2181:662:201:o;2848:589::-;2890:5;2943:3;2936:4;2928:6;2924:17;2920:27;2910:55;;2961:1;2958;2951:12;2910:55;2997:6;2984:20;3023:18;3019:2;3016:26;3013:52;;;3045:18;;:::i;:::-;3089:114;3197:4;3128:66;3121:4;3117:2;3113:13;3109:86;3105:97;3089:114;:::i;:::-;3228:2;3219:7;3212:19;3274:3;3267:4;3262:2;3254:6;3250:15;3246:26;3243:35;3240:55;;;3291:1;3288;3281:12;3240:55;3356:2;3349:4;3341:6;3337:17;3330:4;3321:7;3317:18;3304:55;3404:1;3379:16;;;3397:4;3375:27;3368:38;;;;3383:7;2848:589;-1:-1:-1;;;2848:589:201:o;3442:1646::-;3621:6;3629;3637;3645;3653;3706:3;3694:9;3685:7;3681:23;3677:33;3674:53;;;3723:1;3720;3713:12;3674:53;3763:9;3750:23;3792:18;3833:2;3825:6;3822:14;3819:34;;;3849:1;3846;3839:12;3819:34;3887:6;3876:9;3872:22;3862:32;;3932:7;3925:4;3921:2;3917:13;3913:27;3903:55;;3954:1;3951;3944:12;3903:55;3990:2;3977:16;4012:4;4036:60;4052:43;4092:2;4052:43;:::i;4036:60::-;4130:15;;;4212:1;4208:10;;;;4200:19;;4196:28;;;4161:12;;;;4236:19;;;4233:39;;;4268:1;4265;4258:12;4233:39;4292:11;;;;4312:148;4328:6;4323:3;4320:15;4312:148;;;4394:23;4413:3;4394:23;:::i;:::-;4382:36;;4345:12;;;;4438;;;;4312:148;;;4479:5;-1:-1:-1;;4522:18:201;;4509:32;;-1:-1:-1;;4553:16:201;;;4550:36;;;4582:1;4579;4572:12;4550:36;4605:63;4660:7;4649:8;4638:9;4634:24;4605:63;:::i;:::-;4595:73;;4721:2;4710:9;4706:18;4693:32;4677:48;;4750:2;4740:8;4737:16;4734:36;;;4766:1;4763;4756:12;4734:36;4789:63;4844:7;4833:8;4822:9;4818:24;4789:63;:::i;:::-;4779:73;;4871:38;4905:2;4894:9;4890:18;4871:38;:::i;:::-;4861:48;;4962:3;4951:9;4947:19;4934:33;4918:49;;4992:2;4982:8;4979:16;4976:36;;;5008:1;5005;4998:12;4976:36;;5031:51;5074:7;5063:8;5052:9;5048:24;5031:51;:::i;:::-;5021:61;;;3442:1646;;;;;;;;:::o;5093:180::-;5152:6;5205:2;5193:9;5184:7;5180:23;5176:32;5173:52;;;5221:1;5218;5211:12;5173:52;-1:-1:-1;5244:23:201;;5093:180;-1:-1:-1;5093:180:201:o;5278:435::-;5331:3;5369:5;5363:12;5396:6;5391:3;5384:19;5422:4;5451:2;5446:3;5442:12;5435:19;;5488:2;5481:5;5477:14;5509:1;5519:169;5533:6;5530:1;5527:13;5519:169;;;5594:13;;5582:26;;5628:12;;;;5663:15;;;;5555:1;5548:9;5519:169;;;-1:-1:-1;5704:3:201;;5278:435;-1:-1:-1;;;;;5278:435:201:o;5718:1060::-;6064:2;6076:21;;;6146:13;;6049:18;;;6168:22;;;6016:4;;6244;;6221:3;6206:19;;;6271:15;;;6016:4;6314:218;6328:6;6325:1;6322:13;6314:218;;;6393:13;;6408:42;6389:62;6377:75;;6472:12;;;;6507:15;;;;6350:1;6343:9;6314:218;;;6318:3;;;6577:9;6572:3;6568:19;6563:2;6552:9;6548:18;6541:47;6611:41;6648:3;6640:6;6611:41;:::i;:::-;6597:55;;;6700:9;6692:6;6688:22;6683:2;6672:9;6668:18;6661:50;6728:44;6765:6;6757;6728:44;:::i;:::-;6720:52;5718:1060;-1:-1:-1;;;;;;5718:1060:201:o;6783:184::-;6835:77;6832:1;6825:88;6932:4;6929:1;6922:15;6956:4;6953:1;6946:15;7203:184;7273:6;7326:2;7314:9;7305:7;7301:23;7297:32;7294:52;;;7342:1;7339;7332:12;7294:52;-1:-1:-1;7365:16:201;;7203:184;-1:-1:-1;7203:184:201:o;7753:::-;7805:77;7802:1;7795:88;7902:4;7899:1;7892:15;7926:4;7923:1;7916:15;7942:128;7982:3;8013:1;8009:6;8006:1;8003:13;8000:39;;;8019:18;;:::i;:::-;-1:-1:-1;8055:9:201;;7942:128::o;8377:245::-;8444:6;8497:2;8485:9;8476:7;8472:23;8468:32;8465:52;;;8513:1;8510;8503:12;8465:52;8545:9;8539:16;8564:28;8586:5;8564:28;:::i;8627:195::-;8666:3;8697:66;8690:5;8687:77;8684:103;;;8767:18;;:::i;:::-;-1:-1:-1;8814:1:201;8803:13;;8627:195::o"},"gasEstimates":{"creation":{"codeDepositCost":"552800","executionCost":"infinite","totalCost":"infinite"},"external":{"ADDRESSES_PROVIDER()":"infinite","POOL()":"infinite","executeOperation(address[],uint256[],uint256[],address,bytes)":"infinite","getAmountToApprove()":"2347","setAmountToApprove(uint256)":"22356","setFailExecutionTransfer(bool)":"24531","setSimulateEOA(bool)":"24574","simulateEOA()":"2338"}},"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","POOL()":"7535d246","executeOperation(address[],uint256[],uint256[],address,bytes)":"920f5c84","getAmountToApprove()":"5e76bba3","setAmountToApprove(uint256)":"bf443f85","setFailExecutionTransfer(bool)":"388f70f1","setSimulateEOA(bool)":"e9a6a25b","simulateEOA()":"4444f331"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_assets\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_amounts\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_premiums\",\"type\":\"uint256[]\"}],\"name\":\"ExecutedWithFail\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_assets\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_amounts\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_premiums\",\"type\":\"uint256[]\"}],\"name\":\"ExecutedWithSuccess\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"premiums\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"executeOperation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAmountToApprove\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountToApprove\",\"type\":\"uint256\"}],\"name\":\"setAmountToApprove\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"fail\",\"type\":\"bool\"}],\"name\":\"setFailExecutionTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"setSimulateEOA\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"simulateEOA\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/mocks/flashloan/MockFlashLoanReceiver.sol\":\"MockFlashLoanReceiver\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\nimport './IERC20.sol';\\nimport './SafeMath.sol';\\nimport './Address.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 Context, IERC20 {\\n  using SafeMath for uint256;\\n  using Address for address;\\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(_msgSender(), recipient, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-allowance}.\\n   */\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) 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(_msgSender(), 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   * - `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      _msgSender(),\\n      _allowances[sender][_msgSender()].sub(amount, 'ERC20: transfer amount 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(_msgSender(), spender, _allowances[_msgSender()][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(\\n    address spender,\\n    uint256 subtractedValue\\n  ) public virtual returns (bool) {\\n    _approve(\\n      _msgSender(),\\n      spender,\\n      _allowances[_msgSender()][spender].sub(\\n        subtractedValue,\\n        'ERC20: decreased allowance below zero'\\n      )\\n    );\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Moves tokens `amount` from `sender` to `recipient`.\\n   *\\n   * This is internal function is equivalent to {transfer}, and can be used to\\n   * e.g. implement automatic token fees, slashing mechanisms, etc.\\n   *\\n   * Emits a {Transfer} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `sender` cannot be the zero address.\\n   * - `recipient` cannot be the zero address.\\n   * - `sender` must have a balance of at least `amount`.\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount) internal virtual {\\n    require(sender != address(0), 'ERC20: transfer from the zero address');\\n    require(recipient != address(0), 'ERC20: transfer to the zero address');\\n\\n    _beforeTokenTransfer(sender, recipient, amount);\\n\\n    _balances[sender] = _balances[sender].sub(amount, 'ERC20: transfer amount 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    require(account != address(0), 'ERC20: mint to the zero address');\\n\\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), 'ERC20: burn from the zero address');\\n\\n    _beforeTokenTransfer(account, address(0), amount);\\n\\n    _balances[account] = _balances[account].sub(amount, 'ERC20: burn amount 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 is 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(address owner, address spender, uint256 amount) internal virtual {\\n    require(owner != address(0), 'ERC20: approve from the zero address');\\n    require(spender != address(0), 'ERC20: approve to the zero address');\\n\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @dev 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(address from, address to, uint256 amount) internal virtual {}\\n}\\n\",\"keccak256\":\"0x84e6a151684cce31e66c850677f7e9455d694e050e409e5ded05fb5528c6c7e4\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/// @title Optimized overflow and underflow safe math operations\\n/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\\nlibrary SafeMath {\\n  /// @notice Returns x + y, reverts if sum overflows uint256\\n  /// @param x The augend\\n  /// @param y The addend\\n  /// @return z The sum of x and y\\n  function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x + y) >= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @param message The error msg\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y, string memory message) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x, message);\\n    }\\n  }\\n\\n  /// @notice Returns x * y, reverts if overflows\\n  /// @param x The multiplicand\\n  /// @param y The multiplier\\n  /// @return z The product of x and y\\n  function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require(x == 0 || (z = x * y) / x == y);\\n    }\\n  }\\n\\n  /// @notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\\n  /// @param x The numerator\\n  /// @param y The denominator\\n  /// @return z The product of x and y\\n  function div(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    return x / y;\\n  }\\n}\\n\",\"keccak256\":\"0xf1c5d8ba70a5fc3e20dbbc2aa2a2278d2535a57bc1e9abf1228ebc3068a045f0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/flashloan/base/FlashLoanReceiverBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IFlashLoanReceiver} from '../interfaces/IFlashLoanReceiver.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title FlashLoanReceiverBase\\n * @author Aave\\n * @notice Base contract to develop a flashloan-receiver contract.\\n */\\nabstract contract FlashLoanReceiverBase is IFlashLoanReceiver {\\n  IPoolAddressesProvider public immutable override ADDRESSES_PROVIDER;\\n  IPool public immutable override POOL;\\n\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n    POOL = IPool(provider.getPool());\\n  }\\n}\\n\",\"keccak256\":\"0xe32679c5957b705034b3b03a84103b9c6ca137d12de656e5eead2c404bc9a382\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed assets\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param assets The addresses of the flash-borrowed assets\\n   * @param amounts The amounts of the flash-borrowed assets\\n   * @param premiums The fee of each flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata premiums,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0x0c7446b978d8044330dea7a491768498ac4052e2b3ca02d1b86ce32ea63b3810\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/mocks/flashloan/MockFlashLoanReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {FlashLoanReceiverBase} from '../../flashloan/base/FlashLoanReceiverBase.sol';\\nimport {MintableERC20} from '../tokens/MintableERC20.sol';\\n\\ncontract MockFlashLoanReceiver is FlashLoanReceiverBase {\\n  using GPv2SafeERC20 for IERC20;\\n\\n  event ExecutedWithFail(address[] _assets, uint256[] _amounts, uint256[] _premiums);\\n  event ExecutedWithSuccess(address[] _assets, uint256[] _amounts, uint256[] _premiums);\\n\\n  bool internal _failExecution;\\n  uint256 internal _amountToApprove;\\n  bool internal _simulateEOA;\\n\\n  constructor(IPoolAddressesProvider provider) FlashLoanReceiverBase(provider) {}\\n\\n  function setFailExecutionTransfer(bool fail) public {\\n    _failExecution = fail;\\n  }\\n\\n  function setAmountToApprove(uint256 amountToApprove) public {\\n    _amountToApprove = amountToApprove;\\n  }\\n\\n  function setSimulateEOA(bool flag) public {\\n    _simulateEOA = flag;\\n  }\\n\\n  function getAmountToApprove() public view returns (uint256) {\\n    return _amountToApprove;\\n  }\\n\\n  function simulateEOA() public view returns (bool) {\\n    return _simulateEOA;\\n  }\\n\\n  function executeOperation(\\n    address[] memory assets,\\n    uint256[] memory amounts,\\n    uint256[] memory premiums,\\n    address, // initiator\\n    bytes memory // params\\n  ) public override returns (bool) {\\n    if (_failExecution) {\\n      emit ExecutedWithFail(assets, amounts, premiums);\\n      return !_simulateEOA;\\n    }\\n\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      //mint to this contract the specific amount\\n      MintableERC20 token = MintableERC20(assets[i]);\\n\\n      //check the contract has the specified balance\\n      require(\\n        amounts[i] <= IERC20(assets[i]).balanceOf(address(this)),\\n        'Invalid balance for the contract'\\n      );\\n\\n      uint256 amountToReturn = (_amountToApprove != 0)\\n        ? _amountToApprove\\n        : amounts[i] + premiums[i];\\n      //execution does not fail - mint tokens and return them to the _destination\\n\\n      token.mint(address(this), premiums[i]);\\n\\n      IERC20(assets[i]).approve(address(POOL), amountToReturn);\\n    }\\n\\n    emit ExecutedWithSuccess(assets, amounts, premiums);\\n\\n    return true;\\n  }\\n}\\n\",\"keccak256\":\"0x77a105a161df0198d49a35631780bc9dff01ec5ca8d9f4d2eb552ae5858db93b\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {ERC20} from '../../dependencies/openzeppelin/contracts/ERC20.sol';\\nimport {IERC20WithPermit} from '../../interfaces/IERC20WithPermit.sol';\\n\\n/**\\n * @title ERC20Mintable\\n * @dev ERC20 minting logic\\n */\\ncontract MintableERC20 is IERC20WithPermit, ERC20 {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n  bytes32 public constant PERMIT_TYPEHASH =\\n    keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 public DOMAIN_SEPARATOR;\\n\\n  constructor(string memory name, string memory symbol, uint8 decimals) ERC20(name, symbol) {\\n    uint256 chainId = block.chainid;\\n\\n    DOMAIN_SEPARATOR = keccak256(\\n      abi.encode(\\n        EIP712_DOMAIN,\\n        keccak256(bytes(name)),\\n        keccak256(EIP712_REVISION),\\n        chainId,\\n        address(this)\\n      )\\n    );\\n    _setupDecimals(decimals);\\n  }\\n\\n  /// @inheritdoc IERC20WithPermit\\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 override {\\n    require(owner != address(0), 'INVALID_OWNER');\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, 'INVALID_EXPIRATION');\\n    uint256 currentValidNonce = _nonces[owner];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR,\\n        keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, currentValidNonce, deadline))\\n      )\\n    );\\n    require(owner == ecrecover(digest, v, r, s), 'INVALID_SIGNATURE');\\n    _nonces[owner] = currentValidNonce + 1;\\n    _approve(owner, spender, value);\\n  }\\n\\n  /**\\n   * @dev Function to mint tokens\\n   * @param value The amount of tokens to mint.\\n   * @return A boolean that indicates if the operation was successful.\\n   */\\n  function mint(uint256 value) public returns (bool) {\\n    _mint(_msgSender(), value);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Function to mint tokens to address\\n   * @param account The account to mint tokens.\\n   * @param value The amount of tokens to mint.\\n   * @return A boolean that indicates if the operation was successful.\\n   */\\n  function mint(address account, uint256 value) public returns (bool) {\\n    _mint(account, value);\\n    return true;\\n  }\\n\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n}\\n\",\"keccak256\":\"0x8306245c732faf6038ba650428edda23197ee5977be4cd2a1e5e73263acca6b7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":7476,"contract":"@aave/core-v3/contracts/mocks/flashloan/MockFlashLoanReceiver.sol:MockFlashLoanReceiver","label":"_failExecution","offset":0,"slot":"0","type":"t_bool"},{"astId":7478,"contract":"@aave/core-v3/contracts/mocks/flashloan/MockFlashLoanReceiver.sol:MockFlashLoanReceiver","label":"_amountToApprove","offset":0,"slot":"1","type":"t_uint256"},{"astId":7480,"contract":"@aave/core-v3/contracts/mocks/flashloan/MockFlashLoanReceiver.sol:MockFlashLoanReceiver","label":"_simulateEOA","offset":0,"slot":"2","type":"t_bool"}],"types":{"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/mocks/helpers/MockIncentivesController.sol":{"MockIncentivesController":{"abi":[{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"handleAction","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060c18061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c806331873e2e14602d575b600080fd5b603d6038366004603f565b505050565b005b600080600060608486031215605357600080fd5b833573ffffffffffffffffffffffffffffffffffffffff81168114607657600080fd5b9560208501359550604090940135939250505056fea26469706673582212206c9caae8abde7fc5b20a5fb00ba5e476af7e8c529eaa3d9d0f0748c03409b62264736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xC1 DUP1 PUSH2 0x1F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x31873E2E EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3D PUSH1 0x38 CALLDATASIZE PUSH1 0x4 PUSH1 0x3F JUMP JUMPDEST POP POP POP JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH1 0x53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH1 0x76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH13 0x9CAAE8ABDE7FC5B20A5FB00BA5 0xE4 PUSH23 0xAF7E8C529EAA3D9D0F0748C03409B62264736F6C634300 ADDMOD EXP STOP CALLER ","sourceMap":"153:138:54:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@handleAction_7676":{"entryPoint":null,"id":7676,"parameterSlots":3,"returnSlots":0},"abi_decode_tuple_t_addresst_uint256t_uint256":{"entryPoint":63,"id":null,"parameterSlots":2,"returnSlots":3}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:461:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"118:341:201","statements":[{"body":{"nodeType":"YulBlock","src":"164:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"173:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"176:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"166:6:201"},"nodeType":"YulFunctionCall","src":"166:12:201"},"nodeType":"YulExpressionStatement","src":"166:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"139:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"148:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"135:3:201"},"nodeType":"YulFunctionCall","src":"135:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"160:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"131:3:201"},"nodeType":"YulFunctionCall","src":"131:32:201"},"nodeType":"YulIf","src":"128:52:201"},{"nodeType":"YulVariableDeclaration","src":"189:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"215:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"202:12:201"},"nodeType":"YulFunctionCall","src":"202:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"193:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"311:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"320:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"323:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"313:6:201"},"nodeType":"YulFunctionCall","src":"313:12:201"},"nodeType":"YulExpressionStatement","src":"313:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"247:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"258:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"265:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"254:3:201"},"nodeType":"YulFunctionCall","src":"254:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"244:2:201"},"nodeType":"YulFunctionCall","src":"244:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"237:6:201"},"nodeType":"YulFunctionCall","src":"237:73:201"},"nodeType":"YulIf","src":"234:93:201"},{"nodeType":"YulAssignment","src":"336:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"346:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"336:6:201"}]},{"nodeType":"YulAssignment","src":"360:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"387:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"398:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"383:3:201"},"nodeType":"YulFunctionCall","src":"383:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"370:12:201"},"nodeType":"YulFunctionCall","src":"370:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"360:6:201"}]},{"nodeType":"YulAssignment","src":"411:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"438:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"449:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"434:3:201"},"nodeType":"YulFunctionCall","src":"434:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"421:12:201"},"nodeType":"YulFunctionCall","src":"421:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"411:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"68:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"79:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"91:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"99:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"107:6:201","type":""}],"src":"14:445:201"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"6080604052348015600f57600080fd5b506004361060285760003560e01c806331873e2e14602d575b600080fd5b603d6038366004603f565b505050565b005b600080600060608486031215605357600080fd5b833573ffffffffffffffffffffffffffffffffffffffff81168114607657600080fd5b9560208501359550604090940135939250505056fea26469706673582212206c9caae8abde7fc5b20a5fb00ba5e476af7e8c529eaa3d9d0f0748c03409b62264736f6c634300080a0033","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 0x31873E2E EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3D PUSH1 0x38 CALLDATASIZE PUSH1 0x4 PUSH1 0x3F JUMP JUMPDEST POP POP POP JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH1 0x53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH1 0x76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH13 0x9CAAE8ABDE7FC5B20A5FB00BA5 0xE4 PUSH23 0xAF7E8C529EAA3D9D0F0748C03409B62264736F6C634300 ADDMOD EXP STOP CALLER ","sourceMap":"153:138:54:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;220:69;;;;;;:::i;:::-;;;;;;;14:445:201;91:6;99;107;160:2;148:9;139:7;135:23;131:32;128:52;;;176:1;173;166:12;128:52;215:9;202:23;265:42;258:5;254:54;247:5;244:65;234:93;;323:1;320;313:12;234:93;346:5;398:2;383:18;;370:32;;-1:-1:-1;449:2:201;434:18;;;421:32;;14:445;-1:-1:-1;;;14:445:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"38600","executionCost":"93","totalCost":"38693"},"external":{"handleAction(address,uint256,uint256)":"268"}},"methodIdentifiers":{"handleAction(address,uint256,uint256)":"31873e2e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"handleAction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/mocks/helpers/MockIncentivesController.sol\":\"MockIncentivesController\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/mocks/helpers/MockIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\\n\\ncontract MockIncentivesController is IAaveIncentivesController {\\n  function handleAction(address, uint256, uint256) external override {}\\n}\\n\",\"keccak256\":\"0x83ba24ca12e1e42eb1ad6ef9b0f914a9ce849ab7653241dced3454254e9c73ab\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/mocks/helpers/MockPool.sol":{"MockPool":{"abi":[{"inputs":[{"internalType":"address","name":"reserve","type":"address"}],"name":"addReserveToReservesList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getReservesList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"provider","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506103b2806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063c4d66de814610046578063d1946dbc1461009d578063e636a4f4146100bb575b600080fd5b61009b610054366004610227565b606480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6100a5610140565b6040516100b29190610264565b60405180910390f35b61009b6100c9366004610227565b606580546001810182556000919091527f8ff97419363ffd7000167f130ef7168fbea05faf9251824ca5043f113cc6a7c70180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460609060009067ffffffffffffffff811115610161576101616102be565b60405190808252806020026020018201604052801561018a578160200160208202803683370190505b50905060005b60655481101561022157606581815481106101ad576101ad6102ed565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168282815181106101ea576101ea6102ed565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152806102198161031c565b915050610190565b50919050565b60006020828403121561023957600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461025d57600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156102b257835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610280565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610375577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212206e5e16accc32722eb8eb063270fc030e57120b8e5812213f90619cd792ffb5a164736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3B2 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 0xC4D66DE8 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xD1946DBC EQ PUSH2 0x9D JUMPI DUP1 PUSH4 0xE636A4F4 EQ PUSH2 0xBB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9B PUSH2 0x54 CALLDATASIZE PUSH1 0x4 PUSH2 0x227 JUMP JUMPDEST PUSH1 0x64 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH2 0xA5 PUSH2 0x140 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB2 SWAP2 SWAP1 PUSH2 0x264 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x9B PUSH2 0xC9 CALLDATASIZE PUSH1 0x4 PUSH2 0x227 JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE PUSH1 0x0 SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x8FF97419363FFD7000167F130EF7168FBEA05FAF9251824CA5043F113CC6A7C7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x60 SWAP1 PUSH1 0x0 SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x161 JUMPI PUSH2 0x161 PUSH2 0x2BE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x18A JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST PUSH1 0x65 SLOAD DUP2 LT ISZERO PUSH2 0x221 JUMPI PUSH1 0x65 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x1AD JUMPI PUSH2 0x1AD PUSH2 0x2ED JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1EA JUMPI PUSH2 0x1EA PUSH2 0x2ED JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE DUP1 PUSH2 0x219 DUP2 PUSH2 0x31C JUMP JUMPDEST SWAP2 POP POP PUSH2 0x190 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x239 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x25D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2B2 JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x280 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x375 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH15 0x5E16ACCC32722EB8EB063270FC030E JUMPI SLT SIGNEXTEND DUP15 PC SLT 0x21 EXTCODEHASH SWAP1 PUSH2 0x9CD7 SWAP3 SELFDESTRUCT 0xB5 LOG1 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"147:651:55:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@addReserveToReservesList_7712":{"entryPoint":null,"id":7712,"parameterSlots":1,"returnSlots":0},"@getReservesList_7753":{"entryPoint":320,"id":7753,"parameterSlots":0,"returnSlots":1},"@initialize_7700":{"entryPoint":null,"id":7700,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address":{"entryPoint":551,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":612,"id":null,"parameterSlots":2,"returnSlots":1},"increment_t_uint256":{"entryPoint":796,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x32":{"entryPoint":749,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":702,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1743:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"84:239:201","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:201"},"nodeType":"YulFunctionCall","src":"132:12:201"},"nodeType":"YulExpressionStatement","src":"132:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"105:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"114:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"101:3:201"},"nodeType":"YulFunctionCall","src":"101:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"126:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"97:3:201"},"nodeType":"YulFunctionCall","src":"97:32:201"},"nodeType":"YulIf","src":"94:52:201"},{"nodeType":"YulVariableDeclaration","src":"155:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"181:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"168:12:201"},"nodeType":"YulFunctionCall","src":"168:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"159:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"277:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"286:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"289:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"279:6:201"},"nodeType":"YulFunctionCall","src":"279:12:201"},"nodeType":"YulExpressionStatement","src":"279:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"213:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"224:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"231:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"220:3:201"},"nodeType":"YulFunctionCall","src":"220:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"210:2:201"},"nodeType":"YulFunctionCall","src":"210:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"203:6:201"},"nodeType":"YulFunctionCall","src":"203:73:201"},"nodeType":"YulIf","src":"200:93:201"},{"nodeType":"YulAssignment","src":"302:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"312:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"302:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"50:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"61:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"73:6:201","type":""}],"src":"14:309:201"},{"body":{"nodeType":"YulBlock","src":"479:530:201","statements":[{"nodeType":"YulVariableDeclaration","src":"489:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"499:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"493:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"510:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"528:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"539:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"524:3:201"},"nodeType":"YulFunctionCall","src":"524:18:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"514:6:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"558:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"569:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"551:6:201"},"nodeType":"YulFunctionCall","src":"551:21:201"},"nodeType":"YulExpressionStatement","src":"551:21:201"},{"nodeType":"YulVariableDeclaration","src":"581:17:201","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"592:6:201"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"585:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"607:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"627:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"621:5:201"},"nodeType":"YulFunctionCall","src":"621:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"611:6:201","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"650:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"658:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"643:6:201"},"nodeType":"YulFunctionCall","src":"643:22:201"},"nodeType":"YulExpressionStatement","src":"643:22:201"},{"nodeType":"YulAssignment","src":"674:25:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"685:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"696:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"681:3:201"},"nodeType":"YulFunctionCall","src":"681:18:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"674:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"708:29:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"726:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"734:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"722:3:201"},"nodeType":"YulFunctionCall","src":"722:15:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"712:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"746:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"755:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"750:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"814:169:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"835:3:201"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"850:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"844:5:201"},"nodeType":"YulFunctionCall","src":"844:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"859:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"840:3:201"},"nodeType":"YulFunctionCall","src":"840:62:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"828:6:201"},"nodeType":"YulFunctionCall","src":"828:75:201"},"nodeType":"YulExpressionStatement","src":"828:75:201"},{"nodeType":"YulAssignment","src":"916:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"927:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"932:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"923:3:201"},"nodeType":"YulFunctionCall","src":"923:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"916:3:201"}]},{"nodeType":"YulAssignment","src":"948:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"962:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"970:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"958:3:201"},"nodeType":"YulFunctionCall","src":"958:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"948:6:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"776:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"779:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"773:2:201"},"nodeType":"YulFunctionCall","src":"773:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"787:18:201","statements":[{"nodeType":"YulAssignment","src":"789:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"798:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"801:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"794:3:201"},"nodeType":"YulFunctionCall","src":"794:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"789:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"769:3:201","statements":[]},"src":"765:218:201"},{"nodeType":"YulAssignment","src":"992:11:201","value":{"name":"pos","nodeType":"YulIdentifier","src":"1000:3:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"992:4:201"}]}]},"name":"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"448:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"459:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"470:4:201","type":""}],"src":"328:681:201"},{"body":{"nodeType":"YulBlock","src":"1046:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1063:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1066:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1056:6:201"},"nodeType":"YulFunctionCall","src":"1056:88:201"},"nodeType":"YulExpressionStatement","src":"1056:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1160:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1163:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1153:6:201"},"nodeType":"YulFunctionCall","src":"1153:15:201"},"nodeType":"YulExpressionStatement","src":"1153:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1184:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1187:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1177:6:201"},"nodeType":"YulFunctionCall","src":"1177:15:201"},"nodeType":"YulExpressionStatement","src":"1177:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1014:184:201"},{"body":{"nodeType":"YulBlock","src":"1235:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1252:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1255:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1245:6:201"},"nodeType":"YulFunctionCall","src":"1245:88:201"},"nodeType":"YulExpressionStatement","src":"1245:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1349:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1352:4:201","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1342:6:201"},"nodeType":"YulFunctionCall","src":"1342:15:201"},"nodeType":"YulExpressionStatement","src":"1342:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1373:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1376:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1366:6:201"},"nodeType":"YulFunctionCall","src":"1366:15:201"},"nodeType":"YulExpressionStatement","src":"1366:15:201"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"1203:184:201"},{"body":{"nodeType":"YulBlock","src":"1439:302:201","statements":[{"body":{"nodeType":"YulBlock","src":"1538:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1559:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1562:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1552:6:201"},"nodeType":"YulFunctionCall","src":"1552:88:201"},"nodeType":"YulExpressionStatement","src":"1552:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1660:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1663:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1653:6:201"},"nodeType":"YulFunctionCall","src":"1653:15:201"},"nodeType":"YulExpressionStatement","src":"1653:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1688:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1691:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1681:6:201"},"nodeType":"YulFunctionCall","src":"1681:15:201"},"nodeType":"YulExpressionStatement","src":"1681:15:201"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1455:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1462:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1452:2:201"},"nodeType":"YulFunctionCall","src":"1452:77:201"},"nodeType":"YulIf","src":"1449:257:201"},{"nodeType":"YulAssignment","src":"1715:20:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1726:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1733:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1722:3:201"},"nodeType":"YulFunctionCall","src":"1722:13:201"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"1715:3:201"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1421:5:201","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"1431:3:201","type":""}],"src":"1392:349:201"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        ret := add(value, 1)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100415760003560e01c8063c4d66de814610046578063d1946dbc1461009d578063e636a4f4146100bb575b600080fd5b61009b610054366004610227565b606480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6100a5610140565b6040516100b29190610264565b60405180910390f35b61009b6100c9366004610227565b606580546001810182556000919091527f8ff97419363ffd7000167f130ef7168fbea05faf9251824ca5043f113cc6a7c70180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655460609060009067ffffffffffffffff811115610161576101616102be565b60405190808252806020026020018201604052801561018a578160200160208202803683370190505b50905060005b60655481101561022157606581815481106101ad576101ad6102ed565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168282815181106101ea576101ea6102ed565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152806102198161031c565b915050610190565b50919050565b60006020828403121561023957600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461025d57600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156102b257835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610280565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610375577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212206e5e16accc32722eb8eb063270fc030e57120b8e5812213f90619cd792ffb5a164736f6c634300080a0033","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 0xC4D66DE8 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xD1946DBC EQ PUSH2 0x9D JUMPI DUP1 PUSH4 0xE636A4F4 EQ PUSH2 0xBB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9B PUSH2 0x54 CALLDATASIZE PUSH1 0x4 PUSH2 0x227 JUMP JUMPDEST PUSH1 0x64 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH2 0xA5 PUSH2 0x140 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB2 SWAP2 SWAP1 PUSH2 0x264 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x9B PUSH2 0xC9 CALLDATASIZE PUSH1 0x4 PUSH2 0x227 JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE PUSH1 0x0 SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x8FF97419363FFD7000167F130EF7168FBEA05FAF9251824CA5043F113CC6A7C7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH1 0x60 SWAP1 PUSH1 0x0 SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x161 JUMPI PUSH2 0x161 PUSH2 0x2BE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x18A JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST PUSH1 0x65 SLOAD DUP2 LT ISZERO PUSH2 0x221 JUMPI PUSH1 0x65 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x1AD JUMPI PUSH2 0x1AD PUSH2 0x2ED JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1EA JUMPI PUSH2 0x1EA PUSH2 0x2ED JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE DUP1 PUSH2 0x219 DUP2 PUSH2 0x31C JUMP JUMPDEST SWAP2 POP POP PUSH2 0x190 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x239 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x25D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2B2 JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x280 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x375 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH15 0x5E16ACCC32722EB8EB063270FC030E JUMPI SLT SIGNEXTEND DUP15 PC SLT 0x21 EXTCODEHASH SWAP1 PUSH2 0x9CD7 SWAP3 SELFDESTRUCT 0xB5 LOG1 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"147:651:55:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;335:87;;;;;;:::i;:::-;388:18;:29;;;;;;;;;;;;;;;335:87;;;527:269;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;426:97;;;;;;:::i;:::-;492:12;:26;;;;;;;-1:-1:-1;492:26:55;;;;;;;;;;;;;;;;;;;;;426:97;527:269;647:12;:19;577:16;;601:29;;633:34;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;633:34:55;;601:66;;678:9;673:94;693:12;:19;689:23;;673:94;;;745:12;758:1;745:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;727:12;740:1;727:15;;;;;;;;:::i;:::-;:33;;;;:15;;;;;;;;;;;:33;714:3;;;;:::i;:::-;;;;673:94;;;-1:-1:-1;779:12:55;527:269;-1:-1:-1;527:269:55:o;14:309:201:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;231:42;224:5;220:54;213:5;210:65;200:93;;289:1;286;279:12;200:93;312:5;14:309;-1:-1:-1;;;14:309:201:o;328:681::-;499:2;551:21;;;621:13;;524:18;;;643:22;;;470:4;;499:2;722:15;;;;696:2;681:18;;;470:4;765:218;779:6;776:1;773:13;765:218;;;844:13;;859:42;840:62;828:75;;958:15;;;;923:12;;;;801:1;794:9;765:218;;;-1:-1:-1;1000:3:201;;328:681;-1:-1:-1;;;;;;328:681:201:o;1014:184::-;1066:77;1063:1;1056:88;1163:4;1160:1;1153:15;1187:4;1184:1;1177:15;1203:184;1255:77;1252:1;1245:88;1352:4;1349:1;1342:15;1376:4;1373:1;1366:15;1392:349;1431:3;1462:66;1455:5;1452:77;1449:257;;;1562:77;1559:1;1552:88;1663:4;1660:1;1653:15;1691:4;1688:1;1681:15;1449:257;-1:-1:-1;1733:1:201;1722:13;;1392:349::o"},"gasEstimates":{"creation":{"codeDepositCost":"189200","executionCost":"232","totalCost":"189432"},"external":{"addReserveToReservesList(address)":"48743","getReservesList()":"infinite","initialize(address)":"24463"}},"methodIdentifiers":{"addReserveToReservesList(address)":"e636a4f4","getReservesList()":"d1946dbc","initialize(address)":"c4d66de8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"}],\"name\":\"addReserveToReservesList\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReservesList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/mocks/helpers/MockPool.sol\":\"MockPool\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\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(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\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 {AccessControl-_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) external view returns (bool);\\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 {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\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) external;\\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) external;\\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) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed assets\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param assets The addresses of the flash-borrowed assets\\n   * @param amounts The amounts of the flash-borrowed assets\\n   * @param premiums The fee of each flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata premiums,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0x0c7446b978d8044330dea7a491768498ac4052e2b3ca02d1b86ce32ea63b3810\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanSimpleReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanSimpleReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed asset\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param asset The address of the flash-borrowed asset\\n   * @param amount The amount of the flash-borrowed asset\\n   * @param premium The fee of the flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0xba50a7834ddfdca3e3cfac09043f72699be42ff88925641ac30950a434b2b2ff\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/mocks/helpers/MockPool.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\n\\ncontract MockPool {\\n  // Reserved storage space to avoid layout collisions.\\n  uint256[100] private ______gap;\\n\\n  address internal _addressesProvider;\\n  address[] internal _reserveList;\\n\\n  function initialize(address provider) external {\\n    _addressesProvider = provider;\\n  }\\n\\n  function addReserveToReservesList(address reserve) external {\\n    _reserveList.push(reserve);\\n  }\\n\\n  function getReservesList() external view returns (address[] memory) {\\n    address[] memory reservesList = new address[](_reserveList.length);\\n    for (uint256 i; i < _reserveList.length; i++) {\\n      reservesList[i] = _reserveList[i];\\n    }\\n    return reservesList;\\n  }\\n}\\n\\nimport {Pool} from '../../protocol/pool/Pool.sol';\\n\\ncontract MockPoolInherited is Pool {\\n  uint16 internal _maxNumberOfReserves = 128;\\n\\n  function getRevision() internal pure override returns (uint256) {\\n    return 0x3;\\n  }\\n\\n  constructor(IPoolAddressesProvider provider) Pool(provider) {}\\n\\n  function setMaxNumberOfReserves(uint16 newMaxNumberOfReserves) public {\\n    _maxNumberOfReserves = newMaxNumberOfReserves;\\n  }\\n\\n  function MAX_NUMBER_RESERVES() public view override returns (uint16) {\\n    return _maxNumberOfReserves;\\n  }\\n\\n  function dropReserve(address asset) external override {\\n    _reservesList[_reserves[asset].id] = address(0);\\n    delete _reserves[asset];\\n  }\\n}\\n\",\"keccak256\":\"0xf599e8aef73562f6b6c79ffb6ac5edcb898756a10baabfac3693f483fdf689e6\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title Helpers library\\n * @author Aave\\n */\\nlibrary Helpers {\\n  /**\\n   * @notice Fetches the user current stable and variable debt balances\\n   * @param user The user address\\n   * @param reserveCache The reserve cache data object\\n   * @return The stable debt balance\\n   * @return The variable debt balance\\n   */\\n  function getUserCurrentDebt(\\n    address user,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal view returns (uint256, uint256) {\\n    return (\\n      IERC20(reserveCache.stableDebtTokenAddress).balanceOf(user),\\n      IERC20(reserveCache.variableDebtTokenAddress).balanceOf(user)\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x7e0c79cab4c30d9fadd227dcdecb51046e01d74ed34e5e8597f928f7f3a97640\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Helpers} from '../helpers/Helpers.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\\n\\n/**\\n * @title BorrowLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to borrowing\\n */\\nlibrary BorrowLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice Implements the borrow feature. Borrowing allows users that provided collateral to draw liquidity from the\\n   * Aave protocol proportionally to their collateralization power. For isolated positions, it also increases the\\n   * isolated debt.\\n   * @dev  Emits the `Borrow()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the borrow function\\n   */\\n  function executeBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteBorrowParams memory params\\n  ) public {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    (\\n      bool isolationModeActive,\\n      address isolationModeCollateralAddress,\\n      uint256 isolationModeDebtCeiling\\n    ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    ValidationLogic.validateBorrow(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.ValidateBorrowParams({\\n        reserveCache: reserveCache,\\n        userConfig: userConfig,\\n        asset: params.asset,\\n        userAddress: params.onBehalfOf,\\n        amount: params.amount,\\n        interestRateMode: params.interestRateMode,\\n        maxStableLoanPercent: params.maxStableRateBorrowSizePercent,\\n        reservesCount: params.reservesCount,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory,\\n        priceOracleSentinel: params.priceOracleSentinel,\\n        isolationModeActive: isolationModeActive,\\n        isolationModeCollateralAddress: isolationModeCollateralAddress,\\n        isolationModeDebtCeiling: isolationModeDebtCeiling\\n      })\\n    );\\n\\n    uint256 currentStableRate = 0;\\n    bool isFirstBorrowing = false;\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      currentStableRate = reserve.currentStableBorrowRate;\\n\\n      (\\n        isFirstBorrowing,\\n        reserveCache.nextTotalStableDebt,\\n        reserveCache.nextAvgStableBorrowRate\\n      ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).mint(\\n        params.user,\\n        params.onBehalfOf,\\n        params.amount,\\n        currentStableRate\\n      );\\n    } else {\\n      (isFirstBorrowing, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).mint(params.user, params.onBehalfOf, params.amount, reserveCache.nextVariableBorrowIndex);\\n    }\\n\\n    if (isFirstBorrowing) {\\n      userConfig.setBorrowing(reserve.id, true);\\n    }\\n\\n    if (isolationModeActive) {\\n      uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt += (params.amount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n      emit IsolationModeTotalDebtUpdated(\\n        isolationModeCollateralAddress,\\n        nextIsolationModeTotalDebt\\n      );\\n    }\\n\\n    reserve.updateInterestRates(\\n      reserveCache,\\n      params.asset,\\n      0,\\n      params.releaseUnderlying ? params.amount : 0\\n    );\\n\\n    if (params.releaseUnderlying) {\\n      IAToken(reserveCache.aTokenAddress).transferUnderlyingTo(params.user, params.amount);\\n    }\\n\\n    emit Borrow(\\n      params.asset,\\n      params.user,\\n      params.onBehalfOf,\\n      params.amount,\\n      params.interestRateMode,\\n      params.interestRateMode == DataTypes.InterestRateMode.STABLE\\n        ? currentStableRate\\n        : reserve.currentVariableBorrowRate,\\n      params.referralCode\\n    );\\n  }\\n\\n  /**\\n   * @notice Implements the repay feature. Repaying transfers the underlying back to the aToken and clears the\\n   * equivalent amount of debt for the user by burning the corresponding debt token. For isolated positions, it also\\n   * reduces the isolated debt.\\n   * @dev  Emits the `Repay()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the repay function\\n   * @return The actual amount being repaid\\n   */\\n  function executeRepay(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteRepayParams memory params\\n  ) external returns (uint256) {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n\\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\\n      params.onBehalfOf,\\n      reserveCache\\n    );\\n\\n    ValidationLogic.validateRepay(\\n      reserveCache,\\n      params.amount,\\n      params.interestRateMode,\\n      params.onBehalfOf,\\n      stableDebt,\\n      variableDebt\\n    );\\n\\n    uint256 paybackAmount = params.interestRateMode == DataTypes.InterestRateMode.STABLE\\n      ? stableDebt\\n      : variableDebt;\\n\\n    // Allows a user to repay with aTokens without leaving dust from interest.\\n    if (params.useATokens && params.amount == type(uint256).max) {\\n      params.amount = IAToken(reserveCache.aTokenAddress).balanceOf(msg.sender);\\n    }\\n\\n    if (params.amount < paybackAmount) {\\n      paybackAmount = params.amount;\\n    }\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).burn(params.onBehalfOf, paybackAmount);\\n    } else {\\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).burn(params.onBehalfOf, paybackAmount, reserveCache.nextVariableBorrowIndex);\\n    }\\n\\n    reserve.updateInterestRates(\\n      reserveCache,\\n      params.asset,\\n      params.useATokens ? 0 : paybackAmount,\\n      0\\n    );\\n\\n    if (stableDebt + variableDebt - paybackAmount == 0) {\\n      userConfig.setBorrowing(reserve.id, false);\\n    }\\n\\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\\n      reservesData,\\n      reservesList,\\n      userConfig,\\n      reserveCache,\\n      paybackAmount\\n    );\\n\\n    if (params.useATokens) {\\n      IAToken(reserveCache.aTokenAddress).burn(\\n        msg.sender,\\n        reserveCache.aTokenAddress,\\n        paybackAmount,\\n        reserveCache.nextLiquidityIndex\\n      );\\n    } else {\\n      IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, paybackAmount);\\n      IAToken(reserveCache.aTokenAddress).handleRepayment(\\n        msg.sender,\\n        params.onBehalfOf,\\n        paybackAmount\\n      );\\n    }\\n\\n    emit Repay(params.asset, params.onBehalfOf, msg.sender, paybackAmount, params.useATokens);\\n\\n    return paybackAmount;\\n  }\\n\\n  /**\\n   * @notice Implements the rebalance stable borrow rate feature. In case of liquidity crunches on the protocol, stable\\n   * rate borrows might need to be rebalanced to bring back equilibrium between the borrow and supply APYs.\\n   * @dev The rules that define if a position can be rebalanced are implemented in `ValidationLogic.validateRebalanceStableBorrowRate()`\\n   * @dev Emits the `RebalanceStableBorrowRate()` event\\n   * @param reserve The state of the reserve of the asset being repaid\\n   * @param asset The asset of the position being rebalanced\\n   * @param user The user being rebalanced\\n   */\\n  function executeRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    address asset,\\n    address user\\n  ) external {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateRebalanceStableBorrowRate(reserve, reserveCache, asset);\\n\\n    IStableDebtToken stableDebtToken = IStableDebtToken(reserveCache.stableDebtTokenAddress);\\n    uint256 stableDebt = IERC20(address(stableDebtToken)).balanceOf(user);\\n\\n    stableDebtToken.burn(user, stableDebt);\\n\\n    (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = stableDebtToken\\n      .mint(user, user, stableDebt, reserve.currentStableBorrowRate);\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    emit RebalanceStableBorrowRate(asset, user);\\n  }\\n\\n  /**\\n   * @notice Implements the swap borrow rate feature. Borrowers can swap from variable to stable positions at any time.\\n   * @dev Emits the `Swap()` event\\n   * @param reserve The of the reserve of the asset being repaid\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param asset The asset of the position being swapped\\n   * @param interestRateMode The current interest rate mode of the position being swapped\\n   */\\n  function executeSwapBorrowRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    DataTypes.InterestRateMode interestRateMode\\n  ) external {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\\n      msg.sender,\\n      reserveCache\\n    );\\n\\n    ValidationLogic.validateSwapRateMode(\\n      reserve,\\n      reserveCache,\\n      userConfig,\\n      stableDebt,\\n      variableDebt,\\n      interestRateMode\\n    );\\n\\n    if (interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).burn(msg.sender, stableDebt);\\n\\n      (, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).mint(msg.sender, msg.sender, stableDebt, reserveCache.nextVariableBorrowIndex);\\n    } else {\\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).burn(msg.sender, variableDebt, reserveCache.nextVariableBorrowIndex);\\n\\n      (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).mint(msg.sender, msg.sender, variableDebt, reserve.currentStableBorrowRate);\\n    }\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    emit SwapBorrowRateMode(asset, msg.sender, interestRateMode);\\n  }\\n}\\n\",\"keccak256\":\"0xf3d4fcd846149f0414db46d23cee241831b3c04c375477e84bdb5a95bd3ccac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/BridgeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\nlibrary BridgeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @notice Mint unbacked aTokens to a user and updates the unbacked for the reserve.\\n   * @dev Essentially a supply without transferring the underlying.\\n   * @dev Emits the `MintUnbacked` event\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled` if asset is set as collateral\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param asset The address of the underlying asset to mint aTokens of\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function executeMintUnbacked(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateSupply(reserveCache, reserve, amount);\\n\\n    uint256 unbackedMintCap = reserveCache.reserveConfiguration.getUnbackedMintCap();\\n    uint256 reserveDecimals = reserveCache.reserveConfiguration.getDecimals();\\n\\n    uint256 unbacked = reserve.unbacked += amount.toUint128();\\n\\n    require(\\n      unbacked <= unbackedMintCap * (10 ** reserveDecimals),\\n      Errors.UNBACKED_MINT_CAP_EXCEEDED\\n    );\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    bool isFirstSupply = IAToken(reserveCache.aTokenAddress).mint(\\n      msg.sender,\\n      onBehalfOf,\\n      amount,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isFirstSupply) {\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration,\\n          reserveCache.aTokenAddress\\n        )\\n      ) {\\n        userConfig.setUsingAsCollateral(reserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(asset, onBehalfOf);\\n      }\\n    }\\n\\n    emit MintUnbacked(asset, msg.sender, onBehalfOf, amount, referralCode);\\n  }\\n\\n  /**\\n   * @notice Back the current unbacked with `amount` and pay `fee`.\\n   * @dev It is not possible to back more than the existing unbacked amount of the reserve\\n   * @dev Emits the `BackUnbacked` event\\n   * @param reserve The reserve to back unbacked for\\n   * @param asset The address of the underlying asset to repay\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @param protocolFeeBps The fraction of fees in basis points paid to the protocol\\n   * @return The backed amount\\n   */\\n  function executeBackUnbacked(\\n    DataTypes.ReserveData storage reserve,\\n    address asset,\\n    uint256 amount,\\n    uint256 fee,\\n    uint256 protocolFeeBps\\n  ) external returns (uint256) {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    uint256 backingAmount = (amount < reserve.unbacked) ? amount : reserve.unbacked;\\n\\n    uint256 feeToProtocol = fee.percentMul(protocolFeeBps);\\n    uint256 feeToLP = fee - feeToProtocol;\\n    uint256 added = backingAmount + fee;\\n\\n    reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex(\\n      IERC20(reserveCache.aTokenAddress).totalSupply() +\\n        uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex),\\n      feeToLP\\n    );\\n\\n    reserve.accruedToTreasury += feeToProtocol.rayDiv(reserveCache.nextLiquidityIndex).toUint128();\\n\\n    reserve.unbacked -= backingAmount.toUint128();\\n    reserve.updateInterestRates(reserveCache, asset, added, 0);\\n\\n    IERC20(asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, added);\\n\\n    emit BackUnbacked(asset, msg.sender, backingAmount, fee);\\n\\n    return backingAmount;\\n  }\\n}\\n\",\"keccak256\":\"0x71e1204a0ee1e4b9cdf787b1949c219845e5099671dd07639c4fa23995379edd\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/FlashLoanLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IFlashLoanReceiver} from '../../../flashloan/interfaces/IFlashLoanReceiver.sol';\\nimport {IFlashLoanSimpleReceiver} from '../../../flashloan/interfaces/IFlashLoanSimpleReceiver.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {BorrowLogic} from './BorrowLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title FlashLoanLogic library\\n * @author Aave\\n * @notice Implements the logic for the flash loans\\n */\\nlibrary FlashLoanLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  // Helper struct for internal variables used in the `executeFlashLoan` function\\n  struct FlashLoanLocalVars {\\n    IFlashLoanReceiver receiver;\\n    uint256 i;\\n    address currentAsset;\\n    uint256 currentAmount;\\n    uint256[] totalPremiums;\\n    uint256 flashloanPremiumTotal;\\n    uint256 flashloanPremiumToProtocol;\\n  }\\n\\n  /**\\n   * @notice Implements the flashloan feature that allow users to access liquidity of the pool for one transaction\\n   * as long as the amount taken plus fee is returned or debt is opened.\\n   * @dev For authorized flashborrowers the fee is waived\\n   * @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\\n   * if the receiver have not approved the pool the transaction will revert.\\n   * @dev Emits the `FlashLoan()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the flashloan function\\n   */\\n  function executeFlashLoan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.FlashloanParams memory params\\n  ) external {\\n    // The usual action flow (cache -> updateState -> validation -> changeState -> updateRates)\\n    // is altered to (validation -> user payload -> cache -> updateState -> changeState -> updateRates) for flashloans.\\n    // This is done to protect against reentrance and rate manipulation within the user specified payload.\\n\\n    ValidationLogic.validateFlashloan(reservesData, params.assets, params.amounts);\\n\\n    FlashLoanLocalVars memory vars;\\n\\n    vars.totalPremiums = new uint256[](params.assets.length);\\n\\n    vars.receiver = IFlashLoanReceiver(params.receiverAddress);\\n    (vars.flashloanPremiumTotal, vars.flashloanPremiumToProtocol) = params.isAuthorizedFlashBorrower\\n      ? (0, 0)\\n      : (params.flashLoanPremiumTotal, params.flashLoanPremiumToProtocol);\\n\\n    for (vars.i = 0; vars.i < params.assets.length; vars.i++) {\\n      vars.currentAmount = params.amounts[vars.i];\\n      vars.totalPremiums[vars.i] = DataTypes.InterestRateMode(params.interestRateModes[vars.i]) ==\\n        DataTypes.InterestRateMode.NONE\\n        ? vars.currentAmount.percentMul(vars.flashloanPremiumTotal)\\n        : 0;\\n      IAToken(reservesData[params.assets[vars.i]].aTokenAddress).transferUnderlyingTo(\\n        params.receiverAddress,\\n        vars.currentAmount\\n      );\\n    }\\n\\n    require(\\n      vars.receiver.executeOperation(\\n        params.assets,\\n        params.amounts,\\n        vars.totalPremiums,\\n        msg.sender,\\n        params.params\\n      ),\\n      Errors.INVALID_FLASHLOAN_EXECUTOR_RETURN\\n    );\\n\\n    for (vars.i = 0; vars.i < params.assets.length; vars.i++) {\\n      vars.currentAsset = params.assets[vars.i];\\n      vars.currentAmount = params.amounts[vars.i];\\n\\n      if (\\n        DataTypes.InterestRateMode(params.interestRateModes[vars.i]) ==\\n        DataTypes.InterestRateMode.NONE\\n      ) {\\n        _handleFlashLoanRepayment(\\n          reservesData[vars.currentAsset],\\n          DataTypes.FlashLoanRepaymentParams({\\n            asset: vars.currentAsset,\\n            receiverAddress: params.receiverAddress,\\n            amount: vars.currentAmount,\\n            totalPremium: vars.totalPremiums[vars.i],\\n            flashLoanPremiumToProtocol: vars.flashloanPremiumToProtocol,\\n            referralCode: params.referralCode\\n          })\\n        );\\n      } else {\\n        // If the user chose to not return the funds, the system checks if there is enough collateral and\\n        // eventually opens a debt position\\n        BorrowLogic.executeBorrow(\\n          reservesData,\\n          reservesList,\\n          eModeCategories,\\n          userConfig,\\n          DataTypes.ExecuteBorrowParams({\\n            asset: vars.currentAsset,\\n            user: msg.sender,\\n            onBehalfOf: params.onBehalfOf,\\n            amount: vars.currentAmount,\\n            interestRateMode: DataTypes.InterestRateMode(params.interestRateModes[vars.i]),\\n            referralCode: params.referralCode,\\n            releaseUnderlying: false,\\n            maxStableRateBorrowSizePercent: params.maxStableRateBorrowSizePercent,\\n            reservesCount: params.reservesCount,\\n            oracle: IPoolAddressesProvider(params.addressesProvider).getPriceOracle(),\\n            userEModeCategory: params.userEModeCategory,\\n            priceOracleSentinel: IPoolAddressesProvider(params.addressesProvider)\\n              .getPriceOracleSentinel()\\n          })\\n        );\\n        // no premium is paid when taking on the flashloan as debt\\n        emit FlashLoan(\\n          params.receiverAddress,\\n          msg.sender,\\n          vars.currentAsset,\\n          vars.currentAmount,\\n          DataTypes.InterestRateMode(params.interestRateModes[vars.i]),\\n          0,\\n          params.referralCode\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Implements the simple flashloan feature that allow users to access liquidity of ONE reserve for one\\n   * transaction as long as the amount taken plus fee is returned.\\n   * @dev Does not waive fee for approved flashborrowers nor allow taking on debt instead of repaying to save gas\\n   * @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\\n   * if the receiver have not approved the pool the transaction will revert.\\n   * @dev Emits the `FlashLoan()` event\\n   * @param reserve The state of the flashloaned reserve\\n   * @param params The additional parameters needed to execute the simple flashloan function\\n   */\\n  function executeFlashLoanSimple(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.FlashloanSimpleParams memory params\\n  ) external {\\n    // The usual action flow (cache -> updateState -> validation -> changeState -> updateRates)\\n    // is altered to (validation -> user payload -> cache -> updateState -> changeState -> updateRates) for flashloans.\\n    // This is done to protect against reentrance and rate manipulation within the user specified payload.\\n\\n    ValidationLogic.validateFlashloanSimple(reserve);\\n\\n    IFlashLoanSimpleReceiver receiver = IFlashLoanSimpleReceiver(params.receiverAddress);\\n    uint256 totalPremium = params.amount.percentMul(params.flashLoanPremiumTotal);\\n    IAToken(reserve.aTokenAddress).transferUnderlyingTo(params.receiverAddress, params.amount);\\n\\n    require(\\n      receiver.executeOperation(\\n        params.asset,\\n        params.amount,\\n        totalPremium,\\n        msg.sender,\\n        params.params\\n      ),\\n      Errors.INVALID_FLASHLOAN_EXECUTOR_RETURN\\n    );\\n\\n    _handleFlashLoanRepayment(\\n      reserve,\\n      DataTypes.FlashLoanRepaymentParams({\\n        asset: params.asset,\\n        receiverAddress: params.receiverAddress,\\n        amount: params.amount,\\n        totalPremium: totalPremium,\\n        flashLoanPremiumToProtocol: params.flashLoanPremiumToProtocol,\\n        referralCode: params.referralCode\\n      })\\n    );\\n  }\\n\\n  /**\\n   * @notice Handles repayment of flashloaned assets + premium\\n   * @dev Will pull the amount + premium from the receiver, so must have approved pool\\n   * @param reserve The state of the flashloaned reserve\\n   * @param params The additional parameters needed to execute the repayment function\\n   */\\n  function _handleFlashLoanRepayment(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.FlashLoanRepaymentParams memory params\\n  ) internal {\\n    uint256 premiumToProtocol = params.totalPremium.percentMul(params.flashLoanPremiumToProtocol);\\n    uint256 premiumToLP = params.totalPremium - premiumToProtocol;\\n    uint256 amountPlusPremium = params.amount + params.totalPremium;\\n\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n    reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex(\\n      IERC20(reserveCache.aTokenAddress).totalSupply() +\\n        uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex),\\n      premiumToLP\\n    );\\n\\n    reserve.accruedToTreasury += premiumToProtocol\\n      .rayDiv(reserveCache.nextLiquidityIndex)\\n      .toUint128();\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, amountPlusPremium, 0);\\n\\n    IERC20(params.asset).safeTransferFrom(\\n      params.receiverAddress,\\n      reserveCache.aTokenAddress,\\n      amountPlusPremium\\n    );\\n\\n    IAToken(reserveCache.aTokenAddress).handleRepayment(\\n      params.receiverAddress,\\n      params.receiverAddress,\\n      amountPlusPremium\\n    );\\n\\n    emit FlashLoan(\\n      params.receiverAddress,\\n      msg.sender,\\n      params.asset,\\n      params.amount,\\n      DataTypes.InterestRateMode(0),\\n      params.totalPremium,\\n      params.referralCode\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x086859964ddcf0b39d0ee5498f2c9baf211bcecd18d36864848ed33bd6396a3b\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/IsolationModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title IsolationModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for handling repayments for assets borrowed in isolation mode\\n */\\nlibrary IsolationModeLogic {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice updated the isolated debt whenever a position collateralized by an isolated asset is repaid or liquidated\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping\\n   * @param reserveCache The cached data of the reserve\\n   * @param repayAmount The amount being repaid\\n   */\\n  function updateIsolatedDebtIfIsolated(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 repayAmount\\n  ) internal {\\n    (bool isolationModeActive, address isolationModeCollateralAddress, ) = userConfig\\n      .getIsolationModeState(reservesData, reservesList);\\n\\n    if (isolationModeActive) {\\n      uint128 isolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt;\\n\\n      uint128 isolatedDebtRepaid = (repayAmount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n\\n      // since the debt ceiling does not take into account the interest accrued, it might happen that amount\\n      // repaid > debt in isolation mode\\n      if (isolationModeTotalDebt <= isolatedDebtRepaid) {\\n        reservesData[isolationModeCollateralAddress].isolationModeTotalDebt = 0;\\n        emit IsolationModeTotalDebtUpdated(isolationModeCollateralAddress, 0);\\n      } else {\\n        uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n          .isolationModeTotalDebt = isolationModeTotalDebt - isolatedDebtRepaid;\\n        emit IsolationModeTotalDebtUpdated(\\n          isolationModeCollateralAddress,\\n          nextIsolationModeTotalDebt\\n        );\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xf96e7a7bb1d0d62c233462fcb86954361ef2d7be03bf444017ce8a443d0b6cc1\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/LiquidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts//IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {PercentageMath} from '../../libraries/math/PercentageMath.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Helpers} from '../../libraries/helpers/Helpers.sol';\\nimport {DataTypes} from '../../libraries/types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\nimport {UserConfiguration} from '../../libraries/configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../../libraries/configuration/ReserveConfiguration.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\n\\n/**\\n * @title LiquidationLogic library\\n * @author Aave\\n * @notice Implements actions involving management of collateral in the protocol, the main one being the liquidations\\n */\\nlibrary LiquidationLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Default percentage of borrower's debt to be repaid in a liquidation.\\n   * @dev Percentage applied when the users health factor is above `CLOSE_FACTOR_HF_THRESHOLD`\\n   * Expressed in bps, a value of 0.5e4 results in 50.00%\\n   */\\n  uint256 internal constant DEFAULT_LIQUIDATION_CLOSE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @dev Maximum percentage of borrower's debt to be repaid in a liquidation\\n   * @dev Percentage applied when the users health factor is below `CLOSE_FACTOR_HF_THRESHOLD`\\n   * Expressed in bps, a value of 1e4 results in 100.00%\\n   */\\n  uint256 public constant MAX_LIQUIDATION_CLOSE_FACTOR = 1e4;\\n\\n  /**\\n   * @dev This constant represents below which health factor value it is possible to liquidate\\n   * an amount of debt corresponding to `MAX_LIQUIDATION_CLOSE_FACTOR`.\\n   * A value of 0.95e18 results in 0.95\\n   */\\n  uint256 public constant CLOSE_FACTOR_HF_THRESHOLD = 0.95e18;\\n\\n  struct LiquidationCallLocalVars {\\n    uint256 userCollateralBalance;\\n    uint256 userVariableDebt;\\n    uint256 userTotalDebt;\\n    uint256 actualDebtToLiquidate;\\n    uint256 actualCollateralToLiquidate;\\n    uint256 liquidationBonus;\\n    uint256 healthFactor;\\n    uint256 liquidationProtocolFeeAmount;\\n    address collateralPriceSource;\\n    address debtPriceSource;\\n    IAToken collateralAToken;\\n    DataTypes.ReserveCache debtReserveCache;\\n  }\\n\\n  /**\\n   * @notice Function to liquidate a position if its Health Factor drops below 1. The caller (liquidator)\\n   * covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   * a proportional amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @dev Emits the `LiquidationCall()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params The additional parameters needed to execute the liquidation function\\n   */\\n  function executeLiquidationCall(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ExecuteLiquidationCallParams memory params\\n  ) external {\\n    LiquidationCallLocalVars memory vars;\\n\\n    DataTypes.ReserveData storage collateralReserve = reservesData[params.collateralAsset];\\n    DataTypes.ReserveData storage debtReserve = reservesData[params.debtAsset];\\n    DataTypes.UserConfigurationMap storage userConfig = usersConfig[params.user];\\n    vars.debtReserveCache = debtReserve.cache();\\n    debtReserve.updateState(vars.debtReserveCache);\\n\\n    (, , , , vars.healthFactor, ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.user,\\n        oracle: params.priceOracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    (vars.userVariableDebt, vars.userTotalDebt, vars.actualDebtToLiquidate) = _calculateDebt(\\n      vars.debtReserveCache,\\n      params,\\n      vars.healthFactor\\n    );\\n\\n    ValidationLogic.validateLiquidationCall(\\n      userConfig,\\n      collateralReserve,\\n      DataTypes.ValidateLiquidationCallParams({\\n        debtReserveCache: vars.debtReserveCache,\\n        totalDebt: vars.userTotalDebt,\\n        healthFactor: vars.healthFactor,\\n        priceOracleSentinel: params.priceOracleSentinel\\n      })\\n    );\\n\\n    (\\n      vars.collateralAToken,\\n      vars.collateralPriceSource,\\n      vars.debtPriceSource,\\n      vars.liquidationBonus\\n    ) = _getConfigurationData(eModeCategories, collateralReserve, params);\\n\\n    vars.userCollateralBalance = vars.collateralAToken.balanceOf(params.user);\\n\\n    (\\n      vars.actualCollateralToLiquidate,\\n      vars.actualDebtToLiquidate,\\n      vars.liquidationProtocolFeeAmount\\n    ) = _calculateAvailableCollateralToLiquidate(\\n      collateralReserve,\\n      vars.debtReserveCache,\\n      vars.collateralPriceSource,\\n      vars.debtPriceSource,\\n      vars.actualDebtToLiquidate,\\n      vars.userCollateralBalance,\\n      vars.liquidationBonus,\\n      IPriceOracleGetter(params.priceOracle)\\n    );\\n\\n    if (vars.userTotalDebt == vars.actualDebtToLiquidate) {\\n      userConfig.setBorrowing(debtReserve.id, false);\\n    }\\n\\n    // If the collateral being liquidated is equal to the user balance,\\n    // we set the currency as not being used as collateral anymore\\n    if (\\n      vars.actualCollateralToLiquidate + vars.liquidationProtocolFeeAmount ==\\n      vars.userCollateralBalance\\n    ) {\\n      userConfig.setUsingAsCollateral(collateralReserve.id, false);\\n      emit ReserveUsedAsCollateralDisabled(params.collateralAsset, params.user);\\n    }\\n\\n    _burnDebtTokens(params, vars);\\n\\n    debtReserve.updateInterestRates(\\n      vars.debtReserveCache,\\n      params.debtAsset,\\n      vars.actualDebtToLiquidate,\\n      0\\n    );\\n\\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\\n      reservesData,\\n      reservesList,\\n      userConfig,\\n      vars.debtReserveCache,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    if (params.receiveAToken) {\\n      _liquidateATokens(reservesData, reservesList, usersConfig, collateralReserve, params, vars);\\n    } else {\\n      _burnCollateralATokens(collateralReserve, params, vars);\\n    }\\n\\n    // Transfer fee to treasury if it is non-zero\\n    if (vars.liquidationProtocolFeeAmount != 0) {\\n      uint256 liquidityIndex = collateralReserve.getNormalizedIncome();\\n      uint256 scaledDownLiquidationProtocolFee = vars.liquidationProtocolFeeAmount.rayDiv(\\n        liquidityIndex\\n      );\\n      uint256 scaledDownUserBalance = vars.collateralAToken.scaledBalanceOf(params.user);\\n      // To avoid trying to send more aTokens than available on balance, due to 1 wei imprecision\\n      if (scaledDownLiquidationProtocolFee > scaledDownUserBalance) {\\n        vars.liquidationProtocolFeeAmount = scaledDownUserBalance.rayMul(liquidityIndex);\\n      }\\n      vars.collateralAToken.transferOnLiquidation(\\n        params.user,\\n        vars.collateralAToken.RESERVE_TREASURY_ADDRESS(),\\n        vars.liquidationProtocolFeeAmount\\n      );\\n    }\\n\\n    // Transfers the debt asset being repaid to the aToken, where the liquidity is kept\\n    IERC20(params.debtAsset).safeTransferFrom(\\n      msg.sender,\\n      vars.debtReserveCache.aTokenAddress,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    IAToken(vars.debtReserveCache.aTokenAddress).handleRepayment(\\n      msg.sender,\\n      params.user,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    emit LiquidationCall(\\n      params.collateralAsset,\\n      params.debtAsset,\\n      params.user,\\n      vars.actualDebtToLiquidate,\\n      vars.actualCollateralToLiquidate,\\n      msg.sender,\\n      params.receiveAToken\\n    );\\n  }\\n\\n  /**\\n   * @notice Burns the collateral aTokens and transfers the underlying to the liquidator.\\n   * @dev   The function also updates the state and the interest rate of the collateral reserve.\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars The executeLiquidationCall() function local vars\\n   */\\n  function _burnCollateralATokens(\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    DataTypes.ReserveCache memory collateralReserveCache = collateralReserve.cache();\\n    collateralReserve.updateState(collateralReserveCache);\\n    collateralReserve.updateInterestRates(\\n      collateralReserveCache,\\n      params.collateralAsset,\\n      0,\\n      vars.actualCollateralToLiquidate\\n    );\\n\\n    // Burn the equivalent amount of aToken, sending the underlying to the liquidator\\n    vars.collateralAToken.burn(\\n      params.user,\\n      msg.sender,\\n      vars.actualCollateralToLiquidate,\\n      collateralReserveCache.nextLiquidityIndex\\n    );\\n  }\\n\\n  /**\\n   * @notice Liquidates the user aTokens by transferring them to the liquidator.\\n   * @dev   The function also checks the state of the liquidator and activates the aToken as collateral\\n   *        as in standard transfers if the isolation mode constraints are respected.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars The executeLiquidationCall() function local vars\\n   */\\n  function _liquidateATokens(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    uint256 liquidatorPreviousATokenBalance = IERC20(vars.collateralAToken).balanceOf(msg.sender);\\n    vars.collateralAToken.transferOnLiquidation(\\n      params.user,\\n      msg.sender,\\n      vars.actualCollateralToLiquidate\\n    );\\n\\n    if (liquidatorPreviousATokenBalance == 0) {\\n      DataTypes.UserConfigurationMap storage liquidatorConfig = usersConfig[msg.sender];\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          liquidatorConfig,\\n          collateralReserve.configuration,\\n          collateralReserve.aTokenAddress\\n        )\\n      ) {\\n        liquidatorConfig.setUsingAsCollateral(collateralReserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(params.collateralAsset, msg.sender);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns the debt tokens of the user up to the amount being repaid by the liquidator.\\n   * @dev The function alters the `debtReserveCache` state in `vars` to update the debt related data.\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars the executeLiquidationCall() function local vars\\n   */\\n  function _burnDebtTokens(\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    if (vars.userVariableDebt >= vars.actualDebtToLiquidate) {\\n      vars.debtReserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        vars.debtReserveCache.variableDebtTokenAddress\\n      ).burn(\\n          params.user,\\n          vars.actualDebtToLiquidate,\\n          vars.debtReserveCache.nextVariableBorrowIndex\\n        );\\n    } else {\\n      // If the user doesn't have variable debt, no need to try to burn variable debt tokens\\n      if (vars.userVariableDebt != 0) {\\n        vars.debtReserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n          vars.debtReserveCache.variableDebtTokenAddress\\n        ).burn(params.user, vars.userVariableDebt, vars.debtReserveCache.nextVariableBorrowIndex);\\n      }\\n      (\\n        vars.debtReserveCache.nextTotalStableDebt,\\n        vars.debtReserveCache.nextAvgStableBorrowRate\\n      ) = IStableDebtToken(vars.debtReserveCache.stableDebtTokenAddress).burn(\\n        params.user,\\n        vars.actualDebtToLiquidate - vars.userVariableDebt\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the total debt of the user and the actual amount to liquidate depending on the health factor\\n   * and corresponding close factor.\\n   * @dev If the Health Factor is below CLOSE_FACTOR_HF_THRESHOLD, the close factor is increased to MAX_LIQUIDATION_CLOSE_FACTOR\\n   * @param debtReserveCache The reserve cache data object of the debt reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param healthFactor The health factor of the position\\n   * @return The variable debt of the user\\n   * @return The total debt of the user\\n   * @return The actual debt to liquidate as a function of the closeFactor\\n   */\\n  function _calculateDebt(\\n    DataTypes.ReserveCache memory debtReserveCache,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    uint256 healthFactor\\n  ) internal view returns (uint256, uint256, uint256) {\\n    (uint256 userStableDebt, uint256 userVariableDebt) = Helpers.getUserCurrentDebt(\\n      params.user,\\n      debtReserveCache\\n    );\\n\\n    uint256 userTotalDebt = userStableDebt + userVariableDebt;\\n\\n    uint256 closeFactor = healthFactor > CLOSE_FACTOR_HF_THRESHOLD\\n      ? DEFAULT_LIQUIDATION_CLOSE_FACTOR\\n      : MAX_LIQUIDATION_CLOSE_FACTOR;\\n\\n    uint256 maxLiquidatableDebt = userTotalDebt.percentMul(closeFactor);\\n\\n    uint256 actualDebtToLiquidate = params.debtToCover > maxLiquidatableDebt\\n      ? maxLiquidatableDebt\\n      : params.debtToCover;\\n\\n    return (userVariableDebt, userTotalDebt, actualDebtToLiquidate);\\n  }\\n\\n  /**\\n   * @notice Returns the configuration data for the debt and the collateral reserves.\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @return The collateral aToken\\n   * @return The address to use as price source for the collateral\\n   * @return The address to use as price source for the debt\\n   * @return The liquidation bonus to apply to the collateral\\n   */\\n  function _getConfigurationData(\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params\\n  ) internal view returns (IAToken, address, address, uint256) {\\n    IAToken collateralAToken = IAToken(collateralReserve.aTokenAddress);\\n    uint256 liquidationBonus = collateralReserve.configuration.getLiquidationBonus();\\n\\n    address collateralPriceSource = params.collateralAsset;\\n    address debtPriceSource = params.debtAsset;\\n\\n    if (params.userEModeCategory != 0) {\\n      address eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n\\n      if (\\n        EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          collateralReserve.configuration.getEModeCategory()\\n        )\\n      ) {\\n        liquidationBonus = eModeCategories[params.userEModeCategory].liquidationBonus;\\n\\n        if (eModePriceSource != address(0)) {\\n          collateralPriceSource = eModePriceSource;\\n        }\\n      }\\n\\n      // when in eMode, debt will always be in the same eMode category, can skip matching category check\\n      if (eModePriceSource != address(0)) {\\n        debtPriceSource = eModePriceSource;\\n      }\\n    }\\n\\n    return (collateralAToken, collateralPriceSource, debtPriceSource, liquidationBonus);\\n  }\\n\\n  struct AvailableCollateralToLiquidateLocalVars {\\n    uint256 collateralPrice;\\n    uint256 debtAssetPrice;\\n    uint256 maxCollateralToLiquidate;\\n    uint256 baseCollateral;\\n    uint256 bonusCollateral;\\n    uint256 debtAssetDecimals;\\n    uint256 collateralDecimals;\\n    uint256 collateralAssetUnit;\\n    uint256 debtAssetUnit;\\n    uint256 collateralAmount;\\n    uint256 debtAmountNeeded;\\n    uint256 liquidationProtocolFeePercentage;\\n    uint256 liquidationProtocolFee;\\n  }\\n\\n  /**\\n   * @notice Calculates how much of a specific collateral can be liquidated, given\\n   * a certain amount of debt asset.\\n   * @dev This function needs to be called after all the checks to validate the liquidation have been performed,\\n   *   otherwise it might fail.\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param debtReserveCache The cached data of the debt reserve\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param userCollateralBalance The collateral balance for the specific `collateralAsset` of the user being liquidated\\n   * @param liquidationBonus The collateral bonus percentage to receive as result of the liquidation\\n   * @return The maximum amount that is possible to liquidate given all the liquidation constraints (user balance, close factor)\\n   * @return The amount to repay with the liquidation\\n   * @return The fee taken from the liquidation bonus amount to be paid to the protocol\\n   */\\n  function _calculateAvailableCollateralToLiquidate(\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ReserveCache memory debtReserveCache,\\n    address collateralAsset,\\n    address debtAsset,\\n    uint256 debtToCover,\\n    uint256 userCollateralBalance,\\n    uint256 liquidationBonus,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    AvailableCollateralToLiquidateLocalVars memory vars;\\n\\n    vars.collateralPrice = oracle.getAssetPrice(collateralAsset);\\n    vars.debtAssetPrice = oracle.getAssetPrice(debtAsset);\\n\\n    vars.collateralDecimals = collateralReserve.configuration.getDecimals();\\n    vars.debtAssetDecimals = debtReserveCache.reserveConfiguration.getDecimals();\\n\\n    unchecked {\\n      vars.collateralAssetUnit = 10 ** vars.collateralDecimals;\\n      vars.debtAssetUnit = 10 ** vars.debtAssetDecimals;\\n    }\\n\\n    vars.liquidationProtocolFeePercentage = collateralReserve\\n      .configuration\\n      .getLiquidationProtocolFee();\\n\\n    // This is the base collateral to liquidate based on the given debt to cover\\n    vars.baseCollateral =\\n      ((vars.debtAssetPrice * debtToCover * vars.collateralAssetUnit)) /\\n      (vars.collateralPrice * vars.debtAssetUnit);\\n\\n    vars.maxCollateralToLiquidate = vars.baseCollateral.percentMul(liquidationBonus);\\n\\n    if (vars.maxCollateralToLiquidate > userCollateralBalance) {\\n      vars.collateralAmount = userCollateralBalance;\\n      vars.debtAmountNeeded = ((vars.collateralPrice * vars.collateralAmount * vars.debtAssetUnit) /\\n        (vars.debtAssetPrice * vars.collateralAssetUnit)).percentDiv(liquidationBonus);\\n    } else {\\n      vars.collateralAmount = vars.maxCollateralToLiquidate;\\n      vars.debtAmountNeeded = debtToCover;\\n    }\\n\\n    if (vars.liquidationProtocolFeePercentage != 0) {\\n      vars.bonusCollateral =\\n        vars.collateralAmount -\\n        vars.collateralAmount.percentDiv(liquidationBonus);\\n\\n      vars.liquidationProtocolFee = vars.bonusCollateral.percentMul(\\n        vars.liquidationProtocolFeePercentage\\n      );\\n\\n      return (\\n        vars.collateralAmount - vars.liquidationProtocolFee,\\n        vars.debtAmountNeeded,\\n        vars.liquidationProtocolFee\\n      );\\n    } else {\\n      return (vars.collateralAmount, vars.debtAmountNeeded, 0);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xde6eb6f7c1e21dfee970b2f5abe014ed4c422164c505a5dbbe1191bd59cd85ec\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/PoolLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\n\\n/**\\n * @title PoolLogic library\\n * @author Aave\\n * @notice Implements the logic for Pool specific functions\\n */\\nlibrary PoolLogic {\\n  using GPv2SafeERC20 for IERC20;\\n  using WadRayMath for uint256;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice Initialize an asset reserve and add the reserve to the list of reserves\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param params Additional parameters needed for initiation\\n   * @return true if appended, false if inserted at existing empty spot\\n   */\\n  function executeInitReserve(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.InitReserveParams memory params\\n  ) external returns (bool) {\\n    require(Address.isContract(params.asset), Errors.NOT_CONTRACT);\\n    reservesData[params.asset].init(\\n      params.aTokenAddress,\\n      params.stableDebtAddress,\\n      params.variableDebtAddress,\\n      params.interestRateStrategyAddress\\n    );\\n\\n    bool reserveAlreadyAdded = reservesData[params.asset].id != 0 ||\\n      reservesList[0] == params.asset;\\n    require(!reserveAlreadyAdded, Errors.RESERVE_ALREADY_ADDED);\\n\\n    for (uint16 i = 0; i < params.reservesCount; i++) {\\n      if (reservesList[i] == address(0)) {\\n        reservesData[params.asset].id = i;\\n        reservesList[i] = params.asset;\\n        return false;\\n      }\\n    }\\n\\n    require(params.reservesCount < params.maxNumberReserves, Errors.NO_MORE_RESERVES_ALLOWED);\\n    reservesData[params.asset].id = params.reservesCount;\\n    reservesList[params.reservesCount] = params.asset;\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function executeRescueTokens(address token, address to, uint256 amount) external {\\n    IERC20(token).safeTransfer(to, amount);\\n  }\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param reservesData The state of all the reserves\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function executeMintToTreasury(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] calldata assets\\n  ) external {\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      address assetAddress = assets[i];\\n\\n      DataTypes.ReserveData storage reserve = reservesData[assetAddress];\\n\\n      // this cover both inactive reserves and invalid reserves since the flag will be 0 for both\\n      if (!reserve.configuration.getActive()) {\\n        continue;\\n      }\\n\\n      uint256 accruedToTreasury = reserve.accruedToTreasury;\\n\\n      if (accruedToTreasury != 0) {\\n        reserve.accruedToTreasury = 0;\\n        uint256 normalizedIncome = reserve.getNormalizedIncome();\\n        uint256 amountToMint = accruedToTreasury.rayMul(normalizedIncome);\\n        IAToken(reserve.aTokenAddress).mintToTreasury(amountToMint, normalizedIncome);\\n\\n        emit MintedToTreasury(assetAddress, amountToMint);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param reservesData The state of all the reserves\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function executeResetIsolationModeTotalDebt(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address asset\\n  ) external {\\n    require(reservesData[asset].configuration.getDebtCeiling() == 0, Errors.DEBT_CEILING_NOT_ZERO);\\n    reservesData[asset].isolationModeTotalDebt = 0;\\n    emit IsolationModeTotalDebtUpdated(asset, 0);\\n  }\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function executeDropReserve(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    address asset\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    ValidationLogic.validateDropReserve(reservesList, reserve, asset);\\n    reservesList[reservesData[asset].id] = address(0);\\n    delete reservesData[asset];\\n  }\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the calculation\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function executeGetUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    )\\n  {\\n    (\\n      totalCollateralBase,\\n      totalDebtBase,\\n      ltv,\\n      currentLiquidationThreshold,\\n      healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(reservesData, reservesList, eModeCategories, params);\\n\\n    availableBorrowsBase = GenericLogic.calculateAvailableBorrows(\\n      totalCollateralBase,\\n      totalDebtBase,\\n      ltv\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x87d386100fb287b49ef144b0ea2269d2842998b426ba5c018dce9f1bc09f1913\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/SupplyLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\n\\n/**\\n * @title SupplyLogic library\\n * @author Aave\\n * @notice Implements the base logic for supply/withdraw\\n */\\nlibrary SupplyLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @notice Implements the supply feature. Through `supply()`, users supply assets to the Aave protocol.\\n   * @dev Emits the `Supply()` event.\\n   * @dev In the first supply action, `ReserveUsedAsCollateralEnabled()` is emitted, if the asset can be enabled as\\n   * collateral.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the supply function\\n   */\\n  function executeSupply(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSupplyParams memory params\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateSupply(reserveCache, reserve, params.amount);\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, params.amount, 0);\\n\\n    IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, params.amount);\\n\\n    bool isFirstSupply = IAToken(reserveCache.aTokenAddress).mint(\\n      msg.sender,\\n      params.onBehalfOf,\\n      params.amount,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isFirstSupply) {\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration,\\n          reserveCache.aTokenAddress\\n        )\\n      ) {\\n        userConfig.setUsingAsCollateral(reserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(params.asset, params.onBehalfOf);\\n      }\\n    }\\n\\n    emit Supply(params.asset, msg.sender, params.onBehalfOf, params.amount, params.referralCode);\\n  }\\n\\n  /**\\n   * @notice Implements the withdraw feature. Through `withdraw()`, users redeem their aTokens for the underlying asset\\n   * previously supplied in the Aave protocol.\\n   * @dev Emits the `Withdraw()` event.\\n   * @dev If the user withdraws everything, `ReserveUsedAsCollateralDisabled()` is emitted.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the withdraw function\\n   * @return The actual amount withdrawn\\n   */\\n  function executeWithdraw(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteWithdrawParams memory params\\n  ) external returns (uint256) {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    uint256 userBalance = IAToken(reserveCache.aTokenAddress).scaledBalanceOf(msg.sender).rayMul(\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    uint256 amountToWithdraw = params.amount;\\n\\n    if (params.amount == type(uint256).max) {\\n      amountToWithdraw = userBalance;\\n    }\\n\\n    ValidationLogic.validateWithdraw(reserveCache, amountToWithdraw, userBalance);\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, 0, amountToWithdraw);\\n\\n    bool isCollateral = userConfig.isUsingAsCollateral(reserve.id);\\n\\n    if (isCollateral && amountToWithdraw == userBalance) {\\n      userConfig.setUsingAsCollateral(reserve.id, false);\\n      emit ReserveUsedAsCollateralDisabled(params.asset, msg.sender);\\n    }\\n\\n    IAToken(reserveCache.aTokenAddress).burn(\\n      msg.sender,\\n      params.to,\\n      amountToWithdraw,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isCollateral && userConfig.isBorrowingAny()) {\\n      ValidationLogic.validateHFAndLtv(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        params.asset,\\n        msg.sender,\\n        params.reservesCount,\\n        params.oracle,\\n        params.userEModeCategory\\n      );\\n    }\\n\\n    emit Withdraw(params.asset, msg.sender, params.to, amountToWithdraw);\\n\\n    return amountToWithdraw;\\n  }\\n\\n  /**\\n   * @notice Validates a transfer of aTokens. The sender is subjected to health factor validation to avoid\\n   * collateralization constraints violation.\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled()` event for the `to` account, if the asset is being activated as\\n   * collateral.\\n   * @dev In case the `from` user transfers everything, `ReserveUsedAsCollateralDisabled()` is emitted for `from`.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the finalizeTransfer function\\n   */\\n  function executeFinalizeTransfer(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    DataTypes.FinalizeTransferParams memory params\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n\\n    ValidationLogic.validateTransfer(reserve);\\n\\n    uint256 reserveId = reserve.id;\\n\\n    if (params.from != params.to && params.amount != 0) {\\n      DataTypes.UserConfigurationMap storage fromConfig = usersConfig[params.from];\\n\\n      if (fromConfig.isUsingAsCollateral(reserveId)) {\\n        if (fromConfig.isBorrowingAny()) {\\n          ValidationLogic.validateHFAndLtv(\\n            reservesData,\\n            reservesList,\\n            eModeCategories,\\n            usersConfig[params.from],\\n            params.asset,\\n            params.from,\\n            params.reservesCount,\\n            params.oracle,\\n            params.fromEModeCategory\\n          );\\n        }\\n        if (params.balanceFromBefore == params.amount) {\\n          fromConfig.setUsingAsCollateral(reserveId, false);\\n          emit ReserveUsedAsCollateralDisabled(params.asset, params.from);\\n        }\\n      }\\n\\n      if (params.balanceToBefore == 0) {\\n        DataTypes.UserConfigurationMap storage toConfig = usersConfig[params.to];\\n        if (\\n          ValidationLogic.validateAutomaticUseAsCollateral(\\n            reservesData,\\n            reservesList,\\n            toConfig,\\n            reserve.configuration,\\n            reserve.aTokenAddress\\n          )\\n        ) {\\n          toConfig.setUsingAsCollateral(reserveId, true);\\n          emit ReserveUsedAsCollateralEnabled(params.asset, params.to);\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes the 'set as collateral' feature. A user can choose to activate or deactivate an asset as\\n   * collateral at any point in time. Deactivating an asset as collateral is subjected to the usual health factor\\n   * checks to ensure collateralization.\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled()` event if the asset can be activated as collateral.\\n   * @dev In case the asset is being deactivated as collateral, `ReserveUsedAsCollateralDisabled()` is emitted.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param asset The address of the asset being configured as collateral\\n   * @param useAsCollateral True if the user wants to set the asset as collateral, false otherwise\\n   * @param reservesCount The number of initialized reserves\\n   * @param priceOracle The address of the price oracle\\n   * @param userEModeCategory The eMode category chosen by the user\\n   */\\n  function executeUseReserveAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    bool useAsCollateral,\\n    uint256 reservesCount,\\n    address priceOracle,\\n    uint8 userEModeCategory\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    uint256 userBalance = IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender);\\n\\n    ValidationLogic.validateSetUseReserveAsCollateral(reserveCache, userBalance);\\n\\n    if (useAsCollateral == userConfig.isUsingAsCollateral(reserve.id)) return;\\n\\n    if (useAsCollateral) {\\n      require(\\n        ValidationLogic.validateUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration\\n        ),\\n        Errors.USER_IN_ISOLATION_MODE_OR_LTV_ZERO\\n      );\\n\\n      userConfig.setUsingAsCollateral(reserve.id, true);\\n      emit ReserveUsedAsCollateralEnabled(asset, msg.sender);\\n    } else {\\n      userConfig.setUsingAsCollateral(reserve.id, false);\\n      ValidationLogic.validateHFAndLtv(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        asset,\\n        msg.sender,\\n        reservesCount,\\n        priceOracle,\\n        userEModeCategory\\n      );\\n\\n      emit ReserveUsedAsCollateralDisabled(asset, msg.sender);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xff4b3ad4e13b9b7df4158d33ee6b63370e4137be02e043827c4244432cf38588\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/pool/Pool.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\\nimport {PoolLogic} from '../libraries/logic/PoolLogic.sol';\\nimport {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';\\nimport {EModeLogic} from '../libraries/logic/EModeLogic.sol';\\nimport {SupplyLogic} from '../libraries/logic/SupplyLogic.sol';\\nimport {FlashLoanLogic} from '../libraries/logic/FlashLoanLogic.sol';\\nimport {BorrowLogic} from '../libraries/logic/BorrowLogic.sol';\\nimport {LiquidationLogic} from '../libraries/logic/LiquidationLogic.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\nimport {BridgeLogic} from '../libraries/logic/BridgeLogic.sol';\\nimport {IERC20WithPermit} from '../../interfaces/IERC20WithPermit.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../interfaces/IACLManager.sol';\\nimport {PoolStorage} from './PoolStorage.sol';\\n\\n/**\\n * @title Pool contract\\n * @author Aave\\n * @notice Main point of interaction with an Aave protocol's market\\n * - Users can:\\n *   # Supply\\n *   # Withdraw\\n *   # Borrow\\n *   # Repay\\n *   # Swap their loans between variable and stable rate\\n *   # Enable/disable their supplied assets as collateral rebalance stable rate borrow positions\\n *   # Liquidate positions\\n *   # Execute Flash Loans\\n * @dev To be covered by a proxy contract, owned by the PoolAddressesProvider of the specific market\\n * @dev All admin functions are callable by the PoolConfigurator contract defined also in the\\n *   PoolAddressesProvider\\n */\\ncontract Pool is VersionedInitializable, PoolStorage, IPool {\\n  using ReserveLogic for DataTypes.ReserveData;\\n\\n  uint256 public constant POOL_REVISION = 0x1;\\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\\n\\n  /**\\n   * @dev Only pool configurator can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolConfigurator() {\\n    _onlyPoolConfigurator();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    _onlyPoolAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only bridge can call functions marked by this modifier.\\n   */\\n  modifier onlyBridge() {\\n    _onlyBridge();\\n    _;\\n  }\\n\\n  function _onlyPoolConfigurator() internal view virtual {\\n    require(\\n      ADDRESSES_PROVIDER.getPoolConfigurator() == msg.sender,\\n      Errors.CALLER_NOT_POOL_CONFIGURATOR\\n    );\\n  }\\n\\n  function _onlyPoolAdmin() internal view virtual {\\n    require(\\n      IACLManager(ADDRESSES_PROVIDER.getACLManager()).isPoolAdmin(msg.sender),\\n      Errors.CALLER_NOT_POOL_ADMIN\\n    );\\n  }\\n\\n  function _onlyBridge() internal view virtual {\\n    require(\\n      IACLManager(ADDRESSES_PROVIDER.getACLManager()).isBridge(msg.sender),\\n      Errors.CALLER_NOT_BRIDGE\\n    );\\n  }\\n\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return POOL_REVISION;\\n  }\\n\\n  /**\\n   * @dev Constructor.\\n   * @param provider The address of the PoolAddressesProvider contract\\n   */\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n  }\\n\\n  /**\\n   * @notice Initializes the Pool.\\n   * @dev Function is invoked by the proxy contract when the Pool contract is added to the\\n   * PoolAddressesProvider of the market.\\n   * @dev Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations\\n   * @param provider The address of the PoolAddressesProvider\\n   */\\n  function initialize(IPoolAddressesProvider provider) external virtual initializer {\\n    require(provider == ADDRESSES_PROVIDER, Errors.INVALID_ADDRESSES_PROVIDER);\\n    _maxStableRateBorrowSizePercent = 0.25e4;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external virtual override onlyBridge {\\n    BridgeLogic.executeMintUnbacked(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      asset,\\n      amount,\\n      onBehalfOf,\\n      referralCode\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function backUnbacked(\\n    address asset,\\n    uint256 amount,\\n    uint256 fee\\n  ) external virtual override onlyBridge returns (uint256) {\\n    return\\n      BridgeLogic.executeBackUnbacked(_reserves[asset], asset, amount, fee, _bridgeProtocolFee);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function supply(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) public virtual override {\\n    SupplyLogic.executeSupply(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteSupplyParams({\\n        asset: asset,\\n        amount: amount,\\n        onBehalfOf: onBehalfOf,\\n        referralCode: referralCode\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) public virtual override {\\n    IERC20WithPermit(asset).permit(\\n      msg.sender,\\n      address(this),\\n      amount,\\n      deadline,\\n      permitV,\\n      permitR,\\n      permitS\\n    );\\n    SupplyLogic.executeSupply(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteSupplyParams({\\n        asset: asset,\\n        amount: amount,\\n        onBehalfOf: onBehalfOf,\\n        referralCode: referralCode\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function withdraw(\\n    address asset,\\n    uint256 amount,\\n    address to\\n  ) public virtual override returns (uint256) {\\n    return\\n      SupplyLogic.executeWithdraw(\\n        _reserves,\\n        _reservesList,\\n        _eModeCategories,\\n        _usersConfig[msg.sender],\\n        DataTypes.ExecuteWithdrawParams({\\n          asset: asset,\\n          amount: amount,\\n          to: to,\\n          reservesCount: _reservesCount,\\n          oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n          userEModeCategory: _usersEModeCategory[msg.sender]\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) public virtual override {\\n    BorrowLogic.executeBorrow(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteBorrowParams({\\n        asset: asset,\\n        user: msg.sender,\\n        onBehalfOf: onBehalfOf,\\n        amount: amount,\\n        interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n        referralCode: referralCode,\\n        releaseUnderlying: true,\\n        maxStableRateBorrowSizePercent: _maxStableRateBorrowSizePercent,\\n        reservesCount: _reservesCount,\\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        userEModeCategory: _usersEModeCategory[onBehalfOf],\\n        priceOracleSentinel: ADDRESSES_PROVIDER.getPriceOracleSentinel()\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) public virtual override returns (uint256) {\\n    return\\n      BorrowLogic.executeRepay(\\n        _reserves,\\n        _reservesList,\\n        _usersConfig[onBehalfOf],\\n        DataTypes.ExecuteRepayParams({\\n          asset: asset,\\n          amount: amount,\\n          interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n          onBehalfOf: onBehalfOf,\\n          useATokens: false\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) public virtual override returns (uint256) {\\n    {\\n      IERC20WithPermit(asset).permit(\\n        msg.sender,\\n        address(this),\\n        amount,\\n        deadline,\\n        permitV,\\n        permitR,\\n        permitS\\n      );\\n    }\\n    {\\n      DataTypes.ExecuteRepayParams memory params = DataTypes.ExecuteRepayParams({\\n        asset: asset,\\n        amount: amount,\\n        interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n        onBehalfOf: onBehalfOf,\\n        useATokens: false\\n      });\\n      return BorrowLogic.executeRepay(_reserves, _reservesList, _usersConfig[onBehalfOf], params);\\n    }\\n  }\\n\\n  /// @inheritdoc IPool\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) public virtual override returns (uint256) {\\n    return\\n      BorrowLogic.executeRepay(\\n        _reserves,\\n        _reservesList,\\n        _usersConfig[msg.sender],\\n        DataTypes.ExecuteRepayParams({\\n          asset: asset,\\n          amount: amount,\\n          interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n          onBehalfOf: msg.sender,\\n          useATokens: true\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) public virtual override {\\n    BorrowLogic.executeSwapBorrowRateMode(\\n      _reserves[asset],\\n      _usersConfig[msg.sender],\\n      asset,\\n      DataTypes.InterestRateMode(interestRateMode)\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function rebalanceStableBorrowRate(address asset, address user) public virtual override {\\n    BorrowLogic.executeRebalanceStableBorrowRate(_reserves[asset], asset, user);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setUserUseReserveAsCollateral(\\n    address asset,\\n    bool useAsCollateral\\n  ) public virtual override {\\n    SupplyLogic.executeUseReserveAsCollateral(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig[msg.sender],\\n      asset,\\n      useAsCollateral,\\n      _reservesCount,\\n      ADDRESSES_PROVIDER.getPriceOracle(),\\n      _usersEModeCategory[msg.sender]\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) public virtual override {\\n    LiquidationLogic.executeLiquidationCall(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig,\\n      _eModeCategories,\\n      DataTypes.ExecuteLiquidationCallParams({\\n        reservesCount: _reservesCount,\\n        debtToCover: debtToCover,\\n        collateralAsset: collateralAsset,\\n        debtAsset: debtAsset,\\n        user: user,\\n        receiveAToken: receiveAToken,\\n        priceOracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        userEModeCategory: _usersEModeCategory[user],\\n        priceOracleSentinel: ADDRESSES_PROVIDER.getPriceOracleSentinel()\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) public virtual override {\\n    DataTypes.FlashloanParams memory flashParams = DataTypes.FlashloanParams({\\n      receiverAddress: receiverAddress,\\n      assets: assets,\\n      amounts: amounts,\\n      interestRateModes: interestRateModes,\\n      onBehalfOf: onBehalfOf,\\n      params: params,\\n      referralCode: referralCode,\\n      flashLoanPremiumToProtocol: _flashLoanPremiumToProtocol,\\n      flashLoanPremiumTotal: _flashLoanPremiumTotal,\\n      maxStableRateBorrowSizePercent: _maxStableRateBorrowSizePercent,\\n      reservesCount: _reservesCount,\\n      addressesProvider: address(ADDRESSES_PROVIDER),\\n      userEModeCategory: _usersEModeCategory[onBehalfOf],\\n      isAuthorizedFlashBorrower: IACLManager(ADDRESSES_PROVIDER.getACLManager()).isFlashBorrower(\\n        msg.sender\\n      )\\n    });\\n\\n    FlashLoanLogic.executeFlashLoan(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig[onBehalfOf],\\n      flashParams\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) public virtual override {\\n    DataTypes.FlashloanSimpleParams memory flashParams = DataTypes.FlashloanSimpleParams({\\n      receiverAddress: receiverAddress,\\n      asset: asset,\\n      amount: amount,\\n      params: params,\\n      referralCode: referralCode,\\n      flashLoanPremiumToProtocol: _flashLoanPremiumToProtocol,\\n      flashLoanPremiumTotal: _flashLoanPremiumTotal\\n    });\\n    FlashLoanLogic.executeFlashLoanSimple(_reserves[asset], flashParams);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function mintToTreasury(address[] calldata assets) external virtual override {\\n    PoolLogic.executeMintToTreasury(_reserves, assets);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveData(\\n    address asset\\n  ) external view virtual override returns (DataTypes.ReserveData memory) {\\n    return _reserves[asset];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    virtual\\n    override\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    )\\n  {\\n    return\\n      PoolLogic.executeGetUserAccountData(\\n        _reserves,\\n        _reservesList,\\n        _eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: _usersConfig[user],\\n          reservesCount: _reservesCount,\\n          user: user,\\n          oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n          userEModeCategory: _usersEModeCategory[user]\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getConfiguration(\\n    address asset\\n  ) external view virtual override returns (DataTypes.ReserveConfigurationMap memory) {\\n    return _reserves[asset].configuration;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getUserConfiguration(\\n    address user\\n  ) external view virtual override returns (DataTypes.UserConfigurationMap memory) {\\n    return _usersConfig[user];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveNormalizedIncome(\\n    address asset\\n  ) external view virtual override returns (uint256) {\\n    return _reserves[asset].getNormalizedIncome();\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveNormalizedVariableDebt(\\n    address asset\\n  ) external view virtual override returns (uint256) {\\n    return _reserves[asset].getNormalizedDebt();\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReservesList() external view virtual override returns (address[] memory) {\\n    uint256 reservesListCount = _reservesCount;\\n    uint256 droppedReservesCount = 0;\\n    address[] memory reservesList = new address[](reservesListCount);\\n\\n    for (uint256 i = 0; i < reservesListCount; i++) {\\n      if (_reservesList[i] != address(0)) {\\n        reservesList[i - droppedReservesCount] = _reservesList[i];\\n      } else {\\n        droppedReservesCount++;\\n      }\\n    }\\n\\n    // Reduces the length of the reserves array by `droppedReservesCount`\\n    assembly {\\n      mstore(reservesList, sub(reservesListCount, droppedReservesCount))\\n    }\\n    return reservesList;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveAddressById(uint16 id) external view returns (address) {\\n    return _reservesList[id];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() public view virtual override returns (uint256) {\\n    return _maxStableRateBorrowSizePercent;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function BRIDGE_PROTOCOL_FEE() public view virtual override returns (uint256) {\\n    return _bridgeProtocolFee;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function FLASHLOAN_PREMIUM_TOTAL() public view virtual override returns (uint128) {\\n    return _flashLoanPremiumTotal;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() public view virtual override returns (uint128) {\\n    return _flashLoanPremiumToProtocol;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function MAX_NUMBER_RESERVES() public view virtual override returns (uint16) {\\n    return ReserveConfiguration.MAX_RESERVES_COUNT;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external virtual override {\\n    require(msg.sender == _reserves[asset].aTokenAddress, Errors.CALLER_NOT_ATOKEN);\\n    SupplyLogic.executeFinalizeTransfer(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig,\\n      DataTypes.FinalizeTransferParams({\\n        asset: asset,\\n        from: from,\\n        to: to,\\n        amount: amount,\\n        balanceFromBefore: balanceFromBefore,\\n        balanceToBefore: balanceToBefore,\\n        reservesCount: _reservesCount,\\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        fromEModeCategory: _usersEModeCategory[from]\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external virtual override onlyPoolConfigurator {\\n    if (\\n      PoolLogic.executeInitReserve(\\n        _reserves,\\n        _reservesList,\\n        DataTypes.InitReserveParams({\\n          asset: asset,\\n          aTokenAddress: aTokenAddress,\\n          stableDebtAddress: stableDebtAddress,\\n          variableDebtAddress: variableDebtAddress,\\n          interestRateStrategyAddress: interestRateStrategyAddress,\\n          reservesCount: _reservesCount,\\n          maxNumberReserves: MAX_NUMBER_RESERVES()\\n        })\\n      )\\n    ) {\\n      _reservesCount++;\\n    }\\n  }\\n\\n  /// @inheritdoc IPool\\n  function dropReserve(address asset) external virtual override onlyPoolConfigurator {\\n    PoolLogic.executeDropReserve(_reserves, _reservesList, asset);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external virtual override onlyPoolConfigurator {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(_reserves[asset].id != 0 || _reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    _reserves[asset].interestRateStrategyAddress = rateStrategyAddress;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external virtual override onlyPoolConfigurator {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(_reserves[asset].id != 0 || _reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    _reserves[asset].configuration = configuration;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function updateBridgeProtocolFee(\\n    uint256 protocolFee\\n  ) external virtual override onlyPoolConfigurator {\\n    _bridgeProtocolFee = protocolFee;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external virtual override onlyPoolConfigurator {\\n    _flashLoanPremiumTotal = flashLoanPremiumTotal;\\n    _flashLoanPremiumToProtocol = flashLoanPremiumToProtocol;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function configureEModeCategory(\\n    uint8 id,\\n    DataTypes.EModeCategory memory category\\n  ) external virtual override onlyPoolConfigurator {\\n    // category 0 is reserved for volatile heterogeneous assets and it's always disabled\\n    require(id != 0, Errors.EMODE_CATEGORY_RESERVED);\\n    _eModeCategories[id] = category;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getEModeCategoryData(\\n    uint8 id\\n  ) external view virtual override returns (DataTypes.EModeCategory memory) {\\n    return _eModeCategories[id];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setUserEMode(uint8 categoryId) external virtual override {\\n    EModeLogic.executeSetUserEMode(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersEModeCategory,\\n      _usersConfig[msg.sender],\\n      DataTypes.ExecuteSetUserEModeParams({\\n        reservesCount: _reservesCount,\\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        categoryId: categoryId\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getUserEMode(address user) external view virtual override returns (uint256) {\\n    return _usersEModeCategory[user];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function resetIsolationModeTotalDebt(\\n    address asset\\n  ) external virtual override onlyPoolConfigurator {\\n    PoolLogic.executeResetIsolationModeTotalDebt(_reserves, asset);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function rescueTokens(\\n    address token,\\n    address to,\\n    uint256 amount\\n  ) external virtual override onlyPoolAdmin {\\n    PoolLogic.executeRescueTokens(token, to, amount);\\n  }\\n\\n  /// @inheritdoc IPool\\n  /// @dev Deprecated: maintained for compatibility purposes\\n  function deposit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external virtual override {\\n    SupplyLogic.executeSupply(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteSupplyParams({\\n        asset: asset,\\n        amount: amount,\\n        onBehalfOf: onBehalfOf,\\n        referralCode: referralCode\\n      })\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x3eeaa96fc9df64e0f7e85e48849549957d528ed005ebce43de9c277d662b1d37\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\\nimport {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\n\\n/**\\n * @title PoolStorage\\n * @author Aave\\n * @notice Contract used as storage of the Pool contract.\\n * @dev It defines the storage layout of the Pool contract.\\n */\\ncontract PoolStorage {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  // Map of reserves and their data (underlyingAssetOfReserve => reserveData)\\n  mapping(address => DataTypes.ReserveData) internal _reserves;\\n\\n  // Map of users address and their configuration data (userAddress => userConfiguration)\\n  mapping(address => DataTypes.UserConfigurationMap) internal _usersConfig;\\n\\n  // List of reserves as a map (reserveId => reserve).\\n  // It is structured as a mapping for gas savings reasons, using the reserve id as index\\n  mapping(uint256 => address) internal _reservesList;\\n\\n  // List of eMode categories as a map (eModeCategoryId => eModeCategory).\\n  // It is structured as a mapping for gas savings reasons, using the eModeCategoryId as index\\n  mapping(uint8 => DataTypes.EModeCategory) internal _eModeCategories;\\n\\n  // Map of users address and their eMode category (userAddress => eModeCategoryId)\\n  mapping(address => uint8) internal _usersEModeCategory;\\n\\n  // Fee of the protocol bridge, expressed in bps\\n  uint256 internal _bridgeProtocolFee;\\n\\n  // Total FlashLoan Premium, expressed in bps\\n  uint128 internal _flashLoanPremiumTotal;\\n\\n  // FlashLoan premium paid to protocol treasury, expressed in bps\\n  uint128 internal _flashLoanPremiumToProtocol;\\n\\n  // Available liquidity that can be borrowed at once at stable rate, expressed in bps\\n  uint64 internal _maxStableRateBorrowSizePercent;\\n\\n  // Maximum number of active reserves there have been in the protocol. It is the upper bound of the reserves list\\n  uint16 internal _reservesCount;\\n}\\n\",\"keccak256\":\"0xb67317c6e6e5a5c776d404b5675555b8e2141187dcacca63d15eb77ba50e8d03\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":7685,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPool","label":"______gap","offset":0,"slot":"0","type":"t_array(t_uint256)100_storage"},{"astId":7687,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPool","label":"_addressesProvider","offset":0,"slot":"100","type":"t_address"},{"astId":7690,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPool","label":"_reserveList","offset":0,"slot":"101","type":"t_array(t_address)dyn_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"base":"t_address","encoding":"dynamic_array","label":"address[]","numberOfBytes":"32"},"t_array(t_uint256)100_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[100]","numberOfBytes":"3200"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}},"MockPoolInherited":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"backer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"BackUnbacked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"borrowRate","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"Borrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"address","name":"initiator","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"premium","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"FlashLoan","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalDebt","type":"uint256"}],"name":"IsolationModeTotalDebtUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"collateralAsset","type":"address"},{"indexed":true,"internalType":"address","name":"debtAsset","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"debtToCover","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidatedCollateralAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"liquidator","type":"address"},{"indexed":false,"internalType":"bool","name":"receiveAToken","type":"bool"}],"name":"LiquidationCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"MintUnbacked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountMinted","type":"uint256"}],"name":"MintedToTreasury","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"RebalanceStableBorrowRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"repayer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"useATokens","type":"bool"}],"name":"Repay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"uint256","name":"liquidityRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stableBorrowRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"variableBorrowRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"variableBorrowIndex","type":"uint256"}],"name":"ReserveDataUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"Supply","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"}],"name":"SwapBorrowRateMode","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint8","name":"categoryId","type":"uint8"}],"name":"UserEModeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BRIDGE_PROTOCOL_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASHLOAN_PREMIUM_TOTAL","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASHLOAN_PREMIUM_TO_PROTOCOL","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_NUMBER_RESERVES","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_STABLE_RATE_BORROW_SIZE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"backUnbacked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"uint16","name":"referralCode","type":"uint16"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"borrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"id","type":"uint8"},{"components":[{"internalType":"uint16","name":"ltv","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationBonus","type":"uint16"},{"internalType":"address","name":"priceSource","type":"address"},{"internalType":"string","name":"label","type":"string"}],"internalType":"struct DataTypes.EModeCategory","name":"category","type":"tuple"}],"name":"configureEModeCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"dropReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"balanceFromBefore","type":"uint256"},{"internalType":"uint256","name":"balanceToBefore","type":"uint256"}],"name":"finalizeTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiverAddress","type":"address"},{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"interestRateModes","type":"uint256[]"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"flashLoan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiverAddress","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"params","type":"bytes"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"flashLoanSimple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getConfiguration","outputs":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"id","type":"uint8"}],"name":"getEModeCategoryData","outputs":[{"components":[{"internalType":"uint16","name":"ltv","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationBonus","type":"uint16"},{"internalType":"address","name":"priceSource","type":"address"},{"internalType":"string","name":"label","type":"string"}],"internalType":"struct DataTypes.EModeCategory","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"id","type":"uint16"}],"name":"getReserveAddressById","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveData","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"configuration","type":"tuple"},{"internalType":"uint128","name":"liquidityIndex","type":"uint128"},{"internalType":"uint128","name":"currentLiquidityRate","type":"uint128"},{"internalType":"uint128","name":"variableBorrowIndex","type":"uint128"},{"internalType":"uint128","name":"currentVariableBorrowRate","type":"uint128"},{"internalType":"uint128","name":"currentStableBorrowRate","type":"uint128"},{"internalType":"uint40","name":"lastUpdateTimestamp","type":"uint40"},{"internalType":"uint16","name":"id","type":"uint16"},{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtTokenAddress","type":"address"},{"internalType":"address","name":"variableDebtTokenAddress","type":"address"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"},{"internalType":"uint128","name":"accruedToTreasury","type":"uint128"},{"internalType":"uint128","name":"unbacked","type":"uint128"},{"internalType":"uint128","name":"isolationModeTotalDebt","type":"uint128"}],"internalType":"struct DataTypes.ReserveData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveNormalizedIncome","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveNormalizedVariableDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReservesList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserAccountData","outputs":[{"internalType":"uint256","name":"totalCollateralBase","type":"uint256"},{"internalType":"uint256","name":"totalDebtBase","type":"uint256"},{"internalType":"uint256","name":"availableBorrowsBase","type":"uint256"},{"internalType":"uint256","name":"currentLiquidationThreshold","type":"uint256"},{"internalType":"uint256","name":"ltv","type":"uint256"},{"internalType":"uint256","name":"healthFactor","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserConfiguration","outputs":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.UserConfigurationMap","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserEMode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtAddress","type":"address"},{"internalType":"address","name":"variableDebtAddress","type":"address"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"}],"name":"initReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collateralAsset","type":"address"},{"internalType":"address","name":"debtAsset","type":"address"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"debtToCover","type":"uint256"},{"internalType":"bool","name":"receiveAToken","type":"bool"}],"name":"liquidationCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"}],"name":"mintToTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"mintUnbacked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"rebalanceStableBorrowRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"repay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"}],"name":"repayWithATokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"permitV","type":"uint8"},{"internalType":"bytes32","name":"permitR","type":"bytes32"},{"internalType":"bytes32","name":"permitS","type":"bytes32"}],"name":"repayWithPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"resetIsolationModeTotalDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"configuration","type":"tuple"}],"name":"setConfiguration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"newMaxNumberOfReserves","type":"uint16"}],"name":"setMaxNumberOfReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"rateStrategyAddress","type":"address"}],"name":"setReserveInterestRateStrategyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"categoryId","type":"uint8"}],"name":"setUserEMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"useAsCollateral","type":"bool"}],"name":"setUserUseReserveAsCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"supply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"permitV","type":"uint8"},{"internalType":"bytes32","name":"permitR","type":"bytes32"},{"internalType":"bytes32","name":"permitS","type":"bytes32"}],"name":"supplyWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"}],"name":"swapBorrowRateMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFee","type":"uint256"}],"name":"updateBridgeProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"flashLoanPremiumTotal","type":"uint128"},{"internalType":"uint128","name":"flashLoanPremiumToProtocol","type":"uint128"}],"name":"updateFlashloanPremiums","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"BRIDGE_PROTOCOL_FEE()":{"returns":{"_0":"The bridge fee sent to the protocol treasury"}},"FLASHLOAN_PREMIUM_TOTAL()":{"returns":{"_0":"The total fee on flashloans"}},"FLASHLOAN_PREMIUM_TO_PROTOCOL()":{"returns":{"_0":"The flashloan fee sent to the protocol treasury"}},"MAX_NUMBER_RESERVES()":{"returns":{"_0":"The maximum number of reserves supported"}},"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":{"returns":{"_0":"The percentage of available liquidity to borrow, expressed in bps"}},"backUnbacked(address,uint256,uint256)":{"params":{"amount":"The amount to back","asset":"The address of the underlying asset to back","fee":"The amount paid in fees"},"returns":{"_0":"The backed amount"}},"borrow(address,uint256,uint256,uint16,address)":{"params":{"amount":"The amount to be borrowed","asset":"The address of the underlying asset to borrow","interestRateMode":"The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable","onBehalfOf":"The address of the user who will receive the debt. Should be the address of the borrower itself calling the function if he wants to borrow against his own collateral, or the address of the credit delegator if he has been given credit delegation allowance","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":{"details":"In eMode, the protocol allows very high borrowing power to borrow assets of the same category. The category 0 is reserved as it's the default for volatile assets","params":{"config":"The configuration of the category","id":"The id of the category"}},"deposit(address,uint256,address,uint16)":{"details":"Deprecated: maintained for compatibility purposes","params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","onBehalfOf":"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"dropReserve(address)":{"details":"Only callable by the PoolConfigurator contract","params":{"asset":"The address of the underlying asset of the reserve"}},"finalizeTransfer(address,address,address,uint256,uint256,uint256)":{"details":"Only callable by the overlying aToken of the `asset`","params":{"amount":"The amount being transferred/withdrawn","asset":"The address of the underlying asset of the aToken","balanceFromBefore":"The aToken balance of the `from` user before the transfer","balanceToBefore":"The aToken balance of the `to` user before the transfer","from":"The user from which the aTokens are transferred","to":"The user receiving the aTokens"}},"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":{"details":"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/","params":{"amounts":"The amounts of the assets being flash-borrowed","assets":"The addresses of the assets being flash-borrowed","interestRateModes":"Types of the debt to open if the flash loan is not returned:   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address","onBehalfOf":"The address  that will receive the debt in the case of using on `modes` 1 or 2","params":"Variadic packed params to pass to the receiver as extra information","receiverAddress":"The address of the contract receiving the funds, implementing IFlashLoanReceiver interface","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"flashLoanSimple(address,address,uint256,bytes,uint16)":{"details":"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/","params":{"amount":"The amount of the asset being flash-borrowed","asset":"The address of the asset being flash-borrowed","params":"Variadic packed params to pass to the receiver as extra information","receiverAddress":"The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"getConfiguration(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The configuration of the reserve"}},"getEModeCategoryData(uint8)":{"params":{"id":"The id of the category"},"returns":{"_0":"The configuration data of the category"}},"getReserveAddressById(uint16)":{"params":{"id":"The id of the reserve as stored in the DataTypes.ReserveData struct"},"returns":{"_0":"The address of the reserve associated with id"}},"getReserveData(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The state and configuration data of the reserve"}},"getReserveNormalizedIncome(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The reserve's normalized income"}},"getReserveNormalizedVariableDebt(address)":{"details":"WARNING: This function is intended to be used primarily by the protocol itself to get a \"dynamic\" variable index based on time, current stored index and virtual rate at the current moment (approx. a borrower would get if opening a position). This means that is always used in combination with variable debt supply/balances. If using this function externally, consider that is possible to have an increasing normalized variable debt that is not equivalent to how the variable debt index would be updated in storage (e.g. only updates with non-zero variable debt supply)","params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The reserve normalized variable debt"}},"getReservesList()":{"details":"It does not include dropped reserves","returns":{"_0":"The addresses of the underlying assets of the initialized reserves"}},"getUserAccountData(address)":{"params":{"user":"The address of the user"},"returns":{"availableBorrowsBase":"The borrowing power left of the user in the base currency used by the price feed","currentLiquidationThreshold":"The liquidation threshold of the user","healthFactor":"The current health factor of the user","ltv":"The loan to value of The user","totalCollateralBase":"The total collateral of the user in the base currency used by the price feed","totalDebtBase":"The total debt of the user in the base currency used by the price feed"}},"getUserConfiguration(address)":{"params":{"user":"The user address"},"returns":{"_0":"The configuration of the user"}},"getUserEMode(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The eMode id"}},"initReserve(address,address,address,address,address)":{"details":"Only callable by the PoolConfigurator contract","params":{"aTokenAddress":"The address of the aToken that will be assigned to the reserve","asset":"The address of the underlying asset of the reserve","interestRateStrategyAddress":"The address of the interest rate strategy contract","stableDebtAddress":"The address of the StableDebtToken that will be assigned to the reserve","variableDebtAddress":"The address of the VariableDebtToken that will be assigned to the reserve"}},"initialize(address)":{"details":"Function is invoked by the proxy contract when the Pool contract is added to the PoolAddressesProvider of the market.Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations","params":{"provider":"The address of the PoolAddressesProvider"}},"liquidationCall(address,address,address,uint256,bool)":{"params":{"collateralAsset":"The address of the underlying asset used as collateral, to receive as result of the liquidation","debtAsset":"The address of the underlying borrowed asset to be repaid with the liquidation","debtToCover":"The debt amount of borrowed `asset` the liquidator wants to cover","receiveAToken":"True if the liquidators wants to receive the collateral aTokens, `false` if he wants to receive the underlying collateral asset directly","user":"The address of the borrower getting liquidated"}},"mintToTreasury(address[])":{"params":{"assets":"The list of reserves for which the minting needs to be executed"}},"mintUnbacked(address,uint256,address,uint16)":{"params":{"amount":"The amount to mint","asset":"The address of the underlying asset to mint","onBehalfOf":"The address that will receive the aTokens","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"rebalanceStableBorrowRate(address,address)":{"params":{"asset":"The address of the underlying asset borrowed","user":"The address of the user to be rebalanced"}},"repay(address,uint256,uint256,address)":{"params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable","onBehalfOf":"The address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed"},"returns":{"_0":"The final amount repaid"}},"repayWithATokens(address,uint256,uint256)":{"details":"Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken balance is not enough to cover the whole debt","params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable"},"returns":{"_0":"The final amount repaid"}},"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":{"params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","deadline":"The deadline timestamp that the permit is valid","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable","onBehalfOf":"Address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed","permitR":"The R parameter of ERC712 permit sig","permitS":"The S parameter of ERC712 permit sig","permitV":"The V parameter of ERC712 permit sig"},"returns":{"_0":"The final amount repaid"}},"rescueTokens(address,address,uint256)":{"params":{"amount":"The amount of token to transfer","to":"The address of the recipient","token":"The address of the token"}},"resetIsolationModeTotalDebt(address)":{"details":"It requires the given asset has zero debt ceiling","params":{"asset":"The address of the underlying asset to reset the isolationModeTotalDebt"}},"setConfiguration(address,(uint256))":{"details":"Only callable by the PoolConfigurator contract","params":{"asset":"The address of the underlying asset of the reserve","configuration":"The new configuration bitmap"}},"setReserveInterestRateStrategyAddress(address,address)":{"details":"Only callable by the PoolConfigurator contract","params":{"asset":"The address of the underlying asset of the reserve","rateStrategyAddress":"The address of the interest rate strategy contract"}},"setUserEMode(uint8)":{"params":{"categoryId":"The id of the category"}},"setUserUseReserveAsCollateral(address,bool)":{"params":{"asset":"The address of the underlying asset supplied","useAsCollateral":"True if the user wants to use the supply as collateral, false otherwise"}},"supply(address,uint256,address,uint16)":{"params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","onBehalfOf":"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":{"params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","deadline":"The deadline timestamp that the permit is valid","onBehalfOf":"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet","permitR":"The R parameter of ERC712 permit sig","permitS":"The S parameter of ERC712 permit sig","permitV":"The V parameter of ERC712 permit sig","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"swapBorrowRateMode(address,uint256)":{"params":{"asset":"The address of the underlying asset borrowed","interestRateMode":"The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable"}},"updateBridgeProtocolFee(uint256)":{"params":{"bridgeProtocolFee":"The part of the premium sent to the protocol treasury"}},"updateFlashloanPremiums(uint128,uint128)":{"details":"The total premium is calculated on the total borrowed amountThe premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`Only callable by the PoolConfigurator contract","params":{"flashLoanPremiumToProtocol":"The part of the premium sent to the protocol treasury, expressed in bps","flashLoanPremiumTotal":"The total premium, expressed in bps"}},"withdraw(address,uint256,address)":{"params":{"amount":"The underlying amount to be withdrawn   - Send the value type(uint256).max in order to withdraw the whole aToken balance","asset":"The address of the underlying asset to withdraw","to":"The address that will receive the underlying, same as msg.sender if the user   wants to receive it on his own wallet, or a different address if the beneficiary is a   different wallet"},"returns":{"_0":"The final amount withdrawn"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_22340":{"entryPoint":null,"id":22340,"parameterSlots":1,"returnSlots":0},"@_7780":{"entryPoint":null,"id":7780,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory":{"entryPoint":101,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:337:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"126:209:201","statements":[{"body":{"nodeType":"YulBlock","src":"172:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"181:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"184:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"174:6:201"},"nodeType":"YulFunctionCall","src":"174:12:201"},"nodeType":"YulExpressionStatement","src":"174:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"147:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"156:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"143:3:201"},"nodeType":"YulFunctionCall","src":"143:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"168:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"139:3:201"},"nodeType":"YulFunctionCall","src":"139:32:201"},"nodeType":"YulIf","src":"136:52:201"},{"nodeType":"YulVariableDeclaration","src":"197:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"216:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:201"},"nodeType":"YulFunctionCall","src":"210:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"201:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"289:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"298:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"301:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"291:6:201"},"nodeType":"YulFunctionCall","src":"291:12:201"},"nodeType":"YulExpressionStatement","src":"291:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"248:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"259:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"274:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"279:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"270:3:201"},"nodeType":"YulFunctionCall","src":"270:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"283:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"266:3:201"},"nodeType":"YulFunctionCall","src":"266:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"255:3:201"},"nodeType":"YulFunctionCall","src":"255:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"245:2:201"},"nodeType":"YulFunctionCall","src":"245:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"238:6:201"},"nodeType":"YulFunctionCall","src":"238:50:201"},"nodeType":"YulIf","src":"235:70:201"},{"nodeType":"YulAssignment","src":"314:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"324:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"314:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"92:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"103:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"115:6:201","type":""}],"src":"14:321:201"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{"@aave/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol":{"BorrowLogic":[{"length":20,"start":4863},{"length":20,"start":5539},{"length":20,"start":7808},{"length":20,"start":7971},{"length":20,"start":10665},{"length":20,"start":12638}]},"@aave/core-v3/contracts/protocol/libraries/logic/BridgeLogic.sol":{"BridgeLogic":[{"length":20,"start":7082},{"length":20,"start":12189}]},"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol":{"EModeLogic":[{"length":20,"start":4447}]},"@aave/core-v3/contracts/protocol/libraries/logic/FlashLoanLogic.sol":{"FlashLoanLogic":[{"length":20,"start":5438},{"length":20,"start":9383}]},"@aave/core-v3/contracts/protocol/libraries/logic/LiquidationLogic.sol":{"LiquidationLogic":[{"length":20,"start":3042}]},"@aave/core-v3/contracts/protocol/libraries/logic/PoolLogic.sol":{"PoolLogic":[{"length":20,"start":7427},{"length":20,"start":7924},{"length":20,"start":9679},{"length":20,"start":10777},{"length":20,"start":12293}]},"@aave/core-v3/contracts/protocol/libraries/logic/SupplyLogic.sol":{"SupplyLogic":[{"length":20,"start":3916},{"length":20,"start":5830},{"length":20,"start":6407},{"length":20,"start":6495},{"length":20,"start":11655}]}},"object":"60a060405260008055603b805461ffff60501b19166a80000000000000000000001790553480156200003057600080fd5b506040516200509038038062005090833981016040819052620000539162000065565b6001600160a01b031660805262000097565b6000602082840312156200007857600080fd5b81516001600160a01b03811681146200009057600080fd5b9392505050565b608051614f7b620001156000396000818161036101528181610b5001528181610c28015281816110b601528181611609015281816118d801528181611f2d01528181611ff101528181612210015281816124e40152818161273801528181612cf90152818161325a015281816133e7015261355a0152614f7b6000f3fe608060405234801561001057600080fd5b50600436106103145760003560e01c80636c6f6ae1116101a7578063d15e0053116100ee578063e82fec2f11610097578063ee3e210b11610071578063ee3e210b14610a7d578063f51e435b14610a90578063f8119d5114610aa357600080fd5b8063e82fec2f14610a3f578063e8eda9df14610702578063eddf1b7914610a5157600080fd5b8063d5ed3933116100c8578063d5ed393314610a06578063d65dc7a114610a19578063e43e88a114610a2c57600080fd5b8063d15e0053146109cb578063d1946dbc146109de578063d579ea7d146109f357600080fd5b8063bcb6e52211610150578063c4d66de81161012a578063c4d66de814610992578063cd112382146109a5578063cea9d26f146109b857600080fd5b8063bcb6e522146108fd578063bf92857c14610910578063c44b11f71461095057600080fd5b80639cd19996116101815780639cd19996146108c4578063a415bcad146108d7578063ab9c4b5d146108ea57600080fd5b80636c6f6ae11461087e5780637a708e921461089e57806394ba89a2146108b157600080fd5b8063386497fd1161026b5780635a3b74b91161021457806369328dec116101ee57806369328dec1461082a57806369a933a51461083d5780636a99c0361461085057600080fd5b80635a3b74b9146106ef578063617ba0371461070257806363c9b8601461071557600080fd5b80635275179711610245578063527517971461065e578063573ade811461068b57806357c68dc41461069e57600080fd5b8063386497fd146105e757806342b0b77c146105fa5780634417a5831461060d57600080fd5b80631d2118f9116102cd5780632dad97d4116102a75780632dad97d4146104005780633036b4391461041357806335ea6a751461042657600080fd5b80631d2118f9146103d2578063272d9072146103e557806328530a47146103ed57600080fd5b806302c205f0116102fe57806302c205f0146103495780630542975c1461035c578063074b2e431461039b57600080fd5b8062a718a9146103195780630148170e1461032e575b600080fd5b61032c610327366004613a0b565b610acb565b005b610336600181565b6040519081526020015b60405180910390f35b61032c610357366004613a96565b610cf8565b6103837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610340565b603a546fffffffffffffffffffffffffffffffff165b6040516fffffffffffffffffffffffffffffffff9091168152602001610340565b61032c6103e0366004613b15565b610e8e565b603954610336565b61032c6103fb366004613b4e565b611048565b61033661040e366004613b69565b6111e6565b61032c610421366004613b9e565b611303565b6105da610434366004613bb7565b604080516102008101825260006101e08201818152825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c0810191909152506001600160a01b0390811660009081526034602090815260409182902082516102008101845281546101e08201908152815260018201546fffffffffffffffffffffffffffffffff80821694830194909452700100000000000000000000000000000000908190048416948201949094526002820154808416606083015284900483166080820152600382015480841660a083015284810464ffffffffff1660c08301527501000000000000000000000000000000000000000000900461ffff1660e0820152600482015485166101008201526005820154851661012082015260068201548516610140820152600782015490941661016085015260088101548083166101808601529290920481166101a0840152600990910154166101c082015290565b6040516103409190613bd4565b6103366105f5366004613bb7565b611310565b61032c610608366004613d8d565b611337565b61064f61061b366004613bb7565b60408051602080820183526000918290526001600160a01b0393909316815260358352819020815192830190915254815290565b60405190518152602001610340565b61038361066c366004613e0f565b61ffff166000908152603660205260409020546001600160a01b031690565b610336610699366004613e2a565b61148a565b61032c6106ac366004613e0f565b603b805461ffff9092166a0100000000000000000000027fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff909216919091179055565b61032c6106fd366004613e74565b6115af565b61032c610710366004613ea2565b611750565b61032c610723366004613bb7565b6001600160a01b031660008181526034602081815260408084206003810180547501000000000000000000000000000000000000000000900461ffff1686526036845291852080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915595855292909152828255600182018390556002820183905580547fffffffffffffffffff0000000000000000000000000000000000000000000000169055600481018054841690556005810180548416905560068101805484169055600781018054909316909255600882015560090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055565b610336610838366004613ef3565b611846565b61032c61084b366004613ea2565b611a17565b603a5470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff166103b1565b61089161088c366004613b4e565b611ab7565b6040516103409190613fa0565b61032c6108ac366004613ff6565b611be4565b61032c6108bf366004614059565b611d43565b61032c6108d23660046140ca565b611db7565b61032c6108e536600461410c565b611e0c565b61032c6108f836600461414b565b61208a565b61032c61090b366004614265565b612402565b61092361091e366004613bb7565b612439565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610340565b61064f61095e366004613bb7565b60408051602080820183526000918290526001600160a01b0393909316815260348352819020815192830190915254815290565b61032c6109a0366004613bb7565b61264e565b61032c6109b3366004613b15565b61283a565b61032c6109c6366004614298565b6128b6565b6103366109d9366004613bb7565b612956565b6109e6612977565b60405161034091906142d9565b61032c610a013660046143cd565b612a7f565b61032c610a14366004614505565b612bde565b610336610a27366004613b69565b612e17565b61032c610a3a366004613bb7565b612eaa565b603b5467ffffffffffffffff16610336565b610336610a5f366004613bb7565b6001600160a01b031660009081526038602052604090205460ff1690565b610336610a8b36600461456a565b612f12565b61032c610a9e3660046145b0565b6130c6565b603b546a0100000000000000000000900461ffff1660405161ffff9091168152602001610340565b73__$4ae75c1292a38b6fb7c763c6480b4a24e8$__6383c1087d6034603660356037604051806101200160405280603b60089054906101000a900461ffff1661ffff1681526020018981526020018c6001600160a01b031681526020018b6001600160a01b031681526020018a6001600160a01b0316815260200188151581526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd0919061460f565b6001600160a01b0390811682528b81166000908152603860209081526040918290205460ff168185015281517f5eb88d3d000000000000000000000000000000000000000000000000000000008152825192909401937f000000000000000000000000000000000000000000000000000000000000000090931692635eb88d3d92600480830193928290030181865afa158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c95919061460f565b6001600160a01b03168152506040518663ffffffff1660e01b8152600401610cc195949392919061462c565b60006040518083038186803b158015610cd957600080fd5b505af4158015610ced573d6000803e3d6000fd5b505050505050505050565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c481018290526001600160a01b0389169063d505accf9060e401600060405180830381600087803b158015610d7d57600080fd5b505af1158015610d91573d6000803e3d6000fd5b505050506001600160a01b0386811660008181526035602090815260409182902082516080810184528d861681529182018c815282840194855261ffff8b81166060850190815294517f1913f16100000000000000000000000000000000000000000000000000000000815260346004820152603660248201526044810193909352925186166064830152516084820152925190931660a48301525190911660c482015273__$e9229d51100a3938db7663133e6dc5ffcb$__90631913f1619060e40160006040518083038186803b158015610e6c57600080fd5b505af4158015610e80573d6000803e3d6000fd5b505050505050505050505050565b610e9661324e565b60408051808201909152600281527f373700000000000000000000000000000000000000000000000000000000000060208201526001600160a01b038316610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b91906146e6565b60405180910390fd5b506001600160a01b0382166000908152603460205260409020600301547501000000000000000000000000000000000000000000900461ffff16151580610f9057506000805260366020527f4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e00546001600160a01b038381169116145b6040518060400160405280600281526020017f383200000000000000000000000000000000000000000000000000000000000081525090610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b91906146e6565b506001600160a01b03918216600090815260346020526040902060070180547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73__$5a3f4c3d06a1537986751467788655cb94$__635d5dc313603460366037603860356000336001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405280603b60089054906101000a900461ffff1661ffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611112573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611136919061460f565b6001600160a01b031681526020018960ff168152506040518763ffffffff1660e01b81526004016111b39695949392919095865260208087019590955260408087019490945260608601929092526080850152805160a0850152918201516001600160a01b031660c0840152015160ff1660e08201526101000190565b60006040518083038186803b1580156111cb57600080fd5b505af41580156111df573d6000803e3d6000fd5b5050505050565b600073__$f250b95a8491f1e84f401ed6d1693cd837$__6340e95de66034603660356000336001600160a01b03166001600160a01b031681526020019081526020016000206040518060a001604052808a6001600160a01b0316815260200189815260200188600281111561125d5761125d6146f9565b600281111561126e5761126e6146f9565b81523360208201526001604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526112b89493929190600401614763565b602060405180830381865af41580156112d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f991906147c9565b90505b9392505050565b61130b61324e565b603955565b6001600160a01b038116600090815260346020526040812061133190613355565b92915050565b60006040518060e00160405280886001600160a01b03168152602001876001600160a01b0316815260200186815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505061ffff8516602080840191909152603a546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008204811660408087019190915291166060909401939093526001600160a01b038a1682526034905281902090517fa1fe0e8d00000000000000000000000000000000000000000000000000000000815291925073__$3cafd0a079d9bba6279cd462d6f4920444$__9163a1fe0e8d916114519185906004016147e2565b60006040518083038186803b15801561146957600080fd5b505af415801561147d573d6000803e3d6000fd5b5050505050505050505050565b600073__$f250b95a8491f1e84f401ed6d1693cd837$__6340e95de66034603660356000876001600160a01b03166001600160a01b031681526020019081526020016000206040518060a001604052808b6001600160a01b031681526020018a8152602001896002811115611501576115016146f9565b6002811115611512576115126146f9565b81526001600160a01b03891660208201526000604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526115659493929190600401614763565b602060405180830381865af4158015611582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a691906147c9565b95945050505050565b73__$e9229d51100a3938db7663133e6dc5ffcb$__63bf697a2660346036603760356000336001600160a01b03166001600160a01b031681526020019081526020016000208787603b60089054906101000a900461ffff167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611665573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611689919061460f565b336000908152603860205260409081902054905160e08b901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260048101999099526024890197909752604488019590955260648701939093526001600160a01b039182166084870152151560a486015261ffff90911660c48501521660e483015260ff16610104820152610124015b60006040518083038186803b15801561173457600080fd5b505af4158015611748573d6000803e3d6000fd5b505050505050565b6001600160a01b038281166000818152603560209081526040918290208251608081018452898616815291820188815282840194855261ffff8781166060850190815294517f1913f16100000000000000000000000000000000000000000000000000000000815260346004820152603660248201526044810193909352925186166064830152516084820152925190931660a48301525190911660c482015273__$e9229d51100a3938db7663133e6dc5ffcb$__90631913f1619060e4015b60006040518083038186803b15801561182857600080fd5b505af415801561183c573d6000803e3d6000fd5b5050505050505050565b600073__$e9229d51100a3938db7663133e6dc5ffcb$__63186dea4460346036603760356000336001600160a01b03166001600160a01b031681526020019081526020016000206040518060c001604052808b6001600160a01b031681526020018a8152602001896001600160a01b03168152602001603b60089054906101000a900461ffff1661ffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611934573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611958919061460f565b6001600160a01b039081168252336000908152603860209081526040918290205460ff90811694820194909452815160e08b901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260048101999099526024890197909752604488019590955260648701939093528151831660848701529381015160a486015291820151811660c4850152606082015160e485015260808201511661010484015260a0015116610124820152610144016112b8565b611a1f6133e5565b6001600160a01b038281166000818152603560205260409081902090517f0413c86f0000000000000000000000000000000000000000000000000000000081526034600482015260366024820152604481019190915291861660648301526084820185905260a482015261ffff821660c482015273__$d21c6b38ea0f6668c62b5e103f4ea47254$__90630413c86f9060e401611810565b6040805160a081018252600080825260208201819052918101829052606080820192909252608081019190915260ff8216600090815260376020908152604091829020825160a081018452815461ffff808216835262010000820481169483019490945264010000000081049093169381019390935266010000000000009091046001600160a01b03166060830152600181018054608084019190611b5b90614860565b80601f0160208091040260200160405190810160405280929190818152602001828054611b8790614860565b8015611bd45780601f10611ba957610100808354040283529160200191611bd4565b820191906000526020600020905b815481529060010190602001808311611bb757829003601f168201915b5050505050815250509050919050565b611bec61324e565b73__$370dc613f77da7345d5cfe489611ba2a28$__6369fc1bdf603460366040518060e001604052808a6001600160a01b03168152602001896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b03168152602001603b60089054906101000a900461ffff1661ffff168152602001611c96603b5461ffff6a01000000000000000000009091041690565b61ffff168152506040518463ffffffff1660e01b8152600401611cbb939291906148ae565b602060405180830381865af4158015611cd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfc9190614931565b156111df57603b805468010000000000000000900461ffff16906008611d218361497d565b91906101000a81548161ffff021916908361ffff160217905550505050505050565b6001600160a01b0382166000908152603460209081526040808320338452603590925290912073__$f250b95a8491f1e84f401ed6d1693cd837$__9163eac4d7039185856002811115611d9857611d986146f9565b6040518563ffffffff1660e01b815260040161171c949392919061499f565b6040517f48c2ca8c00000000000000000000000000000000000000000000000000000000815273__$370dc613f77da7345d5cfe489611ba2a28$__906348c2ca8c9061171c90603490869086906004016149c9565b73__$f250b95a8491f1e84f401ed6d1693cd837$__631e6473f960346036603760356000876001600160a01b03166001600160a01b031681526020019081526020016000206040518061018001604052808c6001600160a01b03168152602001336001600160a01b03168152602001886001600160a01b031681526020018b81526020018a6002811115611ea257611ea26146f9565b6002811115611eb357611eb36146f9565b815261ffff808b166020808401919091526001604080850191909152603b5467ffffffffffffffff81166060860152680100000000000000009004909216608084015281517ffca513a8000000000000000000000000000000000000000000000000000000008152915160a0909301926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263fca513a89260048083019391928290030181865afa158015611f75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f99919061460f565b6001600160a01b0390811682528981166000908152603860209081526040918290205460ff168185015281517f5eb88d3d000000000000000000000000000000000000000000000000000000008152825192909401937f000000000000000000000000000000000000000000000000000000000000000090931692635eb88d3d92600480830193928290030181865afa15801561203a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205e919061460f565b6001600160a01b03168152506040518663ffffffff1660e01b8152600401610cc1959493929190614a21565b6000604051806101c001604052808d6001600160a01b031681526020018c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d9182918501908490808284376000920191909152505050908252506040805160208a810282810182019093528a82529283019290918b918b9182918501908490808284376000920191909152505050908252506001600160a01b03871660208083019190915260408051601f88018390048302810183018252878152920191908790879081908401838280828437600092018290525093855250505061ffff808616602080850191909152603a546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008204811660408088019190915291166060860152603b5467ffffffffffffffff8116608087015268010000000000000000900490921660a08501526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660c08601819052908b16845260388252928290205460ff1660e085015281517f707cd71600000000000000000000000000000000000000000000000000000000815291516101009094019363707cd7169260048082019392918290030181865afa1580156122a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c7919061460f565b6040517ffa50f2970000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03919091169063fa50f29790602401602060405180830381865afa158015612326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234a9190614931565b151590526001600160a01b0386166000908152603560205260409081902090517f2e7263ea00000000000000000000000000000000000000000000000000000000815291925073__$3cafd0a079d9bba6279cd462d6f4920444$__91632e7263ea916123c491603491603691603791908890600401614b89565b60006040518083038186803b1580156123dc57600080fd5b505af41580156123f0573d6000803e3d6000fd5b50505050505050505050505050505050565b61240a61324e565b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617603a55565b604080516001600160a01b0383811660008181526035602090815285822060c0860187525460a086019081528552603b5468010000000000000000900461ffff16818601528486019290925284517ffca513a8000000000000000000000000000000000000000000000000000000008152945190948594859485948594859473__$370dc613f77da7345d5cfe489611ba2a28$__946326ec273f9460349460369460379460608501937f0000000000000000000000000000000000000000000000000000000000000000169263fca513a8926004808401938290030181865afa15801561252a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254e919061460f565b6001600160a01b0390811682528e81166000908152603860209081526040918290205460ff90811694820194909452815160e08a901b7fffffffff00000000000000000000000000000000000000000000000000000000168152600481019890985260248801969096526044870194909452825151606487015293820151608486015291810151831660a4850152606081015190921660c48401526080909101511660e48201526101040160c060405180830381865af4158015612616573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263a9190614d08565b949c939b5091995097509550909350915050565b60015460039060ff16806126615750303b155b8061266d575060005481115b6126f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610f0b565b60015460ff1615801561273657600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146040518060400160405280600281526020017f3132000000000000000000000000000000000000000000000000000000000000815250906127d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b91906146e6565b50603b80547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166109c4179055801561283557600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050565b6001600160a01b038281166000818152603460205260409081902090517f6973f74400000000000000000000000000000000000000000000000000000000815260048101919091526024810191909152908216604482015273__$f250b95a8491f1e84f401ed6d1693cd837$__90636973f7449060640161171c565b6128be613558565b6040517f87b322b20000000000000000000000000000000000000000000000000000000081526001600160a01b038085166004830152831660248201526044810182905273__$370dc613f77da7345d5cfe489611ba2a28$__906387b322b29060640160006040518083038186803b15801561293957600080fd5b505af415801561294d573d6000803e3d6000fd5b50505050505050565b6001600160a01b0381166000908152603460205260408120611331906136cb565b603b5460609068010000000000000000900461ffff166000808267ffffffffffffffff8111156129a9576129a9614326565b6040519080825280602002602001820160405280156129d2578160200160208202803683370190505b50905060005b83811015612a75576000818152603660205260409020546001600160a01b031615612a55576000818152603660205260409020546001600160a01b031682612a208584614d52565b81518110612a3057612a30614d69565b60200260200101906001600160a01b031690816001600160a01b031681525050612a63565b82612a5f81614d98565b9350505b80612a6d81614d98565b9150506129d8565b5091038152919050565b612a8761324e565b60408051808201909152600281527f3136000000000000000000000000000000000000000000000000000000000000602082015260ff8316612af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b91906146e6565b5060ff821660009081526037602090815260409182902083518154838601519486015160608701516001600160a01b03166601000000000000027fffffffffffff0000000000000000000000000000000000000000ffffffffffff61ffff92831664010000000002167fffffffffffff00000000000000000000000000000000000000000000ffffffff97831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009094169290941691909117919091179490941617929092178255608083015180518493926111df92600185019291019061393f565b6001600160a01b03868116600090815260346020908152604091829020600401548251808401909352600283527f3131000000000000000000000000000000000000000000000000000000000000918301919091529091163314612c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b91906146e6565b5073__$e9229d51100a3938db7663133e6dc5ffcb$__638a5dadd160346036603760356040518061012001604052808d6001600160a01b031681526020018c6001600160a01b031681526020018b6001600160a01b031681526020018a8152602001898152602001888152602001603b60089054906101000a900461ffff1661ffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d79919061460f565b6001600160a01b0390811682528d166000908152603860209081526040918290205460ff16920191909152517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b168152612ddf959493929190600401614dd1565b60006040518083038186803b158015612df757600080fd5b505af4158015612e0b573d6000803e3d6000fd5b50505050505050505050565b6000612e216133e5565b6001600160a01b0384166000818152603460205260409081902060395491517f8e743248000000000000000000000000000000000000000000000000000000008152600481019190915260248101929092526044820185905260648201849052608482015273__$d21c6b38ea0f6668c62b5e103f4ea47254$__90638e7432489060a4016112b8565b612eb261324e565b6040517f1e3b4145000000000000000000000000000000000000000000000000000000008152603460048201526001600160a01b038216602482015273__$370dc613f77da7345d5cfe489611ba2a28$__90631e3b4145906044016111b3565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c481018290526000906001600160a01b038a169063d505accf9060e401600060405180830381600087803b158015612f9a57600080fd5b505af1158015612fae573d6000803e3d6000fd5b5050505060006040518060a001604052808b6001600160a01b031681526020018a8152602001896002811115612fe657612fe66146f9565b6002811115612ff757612ff76146f9565b81526001600160a01b0389166020808301829052600060409384018190529182526035905281902090517f40e95de600000000000000000000000000000000000000000000000000000000815291925073__$f250b95a8491f1e84f401ed6d1693cd837$__916340e95de691613077916034916036918790600401614763565b602060405180830381865af4158015613094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b891906147c9565b9a9950505050505050505050565b6130ce61324e565b60408051808201909152600281527f373700000000000000000000000000000000000000000000000000000000000060208201526001600160a01b038316613143576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b91906146e6565b506001600160a01b0382166000908152603460205260409020600301547501000000000000000000000000000000000000000000900461ffff161515806131bf57506000805260366020527f4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e00546001600160a01b038381169116145b6040518060400160405280600281526020017f38320000000000000000000000000000000000000000000000000000000000008152509061322d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b91906146e6565b506001600160a01b0391909116600090815260346020526040902090359055565b336001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663631adfca6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132da919061460f565b6001600160a01b0316146040518060400160405280600281526020017f313000000000000000000000000000000000000000000000000000000000000081525090613352576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b91906146e6565b50565b6003810154600090700100000000000000000000000000000000900464ffffffffff164281141561339b575050600201546fffffffffffffffffffffffffffffffff1690565b60028301546112fc906fffffffffffffffffffffffffffffffff808216916133d991700100000000000000000000000000000000909104168461374f565b9061375c565b50919050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015613443573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613467919061460f565b6040517f726600ce0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03919091169063726600ce90602401602060405180830381865afa1580156134c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ea9190614931565b6040518060400160405280600181526020017f360000000000000000000000000000000000000000000000000000000000000081525090613352576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b91906146e6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135da919061460f565b6040517f7be53ca10000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039190911690637be53ca190602401602060405180830381865afa158015613639573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061365d9190614931565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090613352576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b91906146e6565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415613711575050600101546fffffffffffffffffffffffffffffffff1690565b60018301546112fc906fffffffffffffffffffffffffffffffff808216916133d99170010000000000000000000000000000000090910416846137b3565b60006112fc8383426137f8565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761379157600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b6000806137c764ffffffffff841642614d52565b6137d19085614e86565b6301e13380900490506137f0816b033b2e3c9fd0803ce8000000614ef2565b949350505050565b60008061380c64ffffffffff851684614d52565b905080613828576b033b2e3c9fd0803ce80000009150506112fc565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101600080806002851161385e576000613863565b600285035b925066038882915c40006138778a8061375c565b8161388457613884614ec3565b0491506301e13380613896838b61375c565b816138a3576138a3614ec3565b0490506000826138b38688614e86565b6138bd9190614e86565b600290049050600082856138d1888a614e86565b6138db9190614e86565b6138e59190614e86565b60069004905080826301e133806138fc8a8f614e86565b6139069190614f0a565b61391c906b033b2e3c9fd0803ce8000000614ef2565b6139269190614ef2565b6139309190614ef2565b9b9a5050505050505050505050565b82805461394b90614860565b90600052602060002090601f01602090048101928261396d57600085556139b3565b82601f1061398657805160ff19168380011785556139b3565b828001600101855582156139b3579182015b828111156139b3578251825591602001919060010190613998565b506139bf9291506139c3565b5090565b5b808211156139bf57600081556001016139c4565b6001600160a01b038116811461335257600080fd5b80356139f8816139d8565b919050565b801515811461335257600080fd5b600080600080600060a08688031215613a2357600080fd5b8535613a2e816139d8565b94506020860135613a3e816139d8565b93506040860135613a4e816139d8565b9250606086013591506080860135613a65816139fd565b809150509295509295909350565b803561ffff811681146139f857600080fd5b803560ff811681146139f857600080fd5b600080600080600080600080610100898b031215613ab357600080fd5b8835613abe816139d8565b9750602089013596506040890135613ad5816139d8565b9550613ae360608a01613a73565b945060808901359350613af860a08a01613a85565b925060c0890135915060e089013590509295985092959890939650565b60008060408385031215613b2857600080fd5b8235613b33816139d8565b91506020830135613b43816139d8565b809150509250929050565b600060208284031215613b6057600080fd5b6112fc82613a85565b600080600060608486031215613b7e57600080fd5b8335613b89816139d8565b95602085013595506040909401359392505050565b600060208284031215613bb057600080fd5b5035919050565b600060208284031215613bc957600080fd5b81356112fc816139d8565b81515181526101e081016020830151613c0160208401826fffffffffffffffffffffffffffffffff169052565b506040830151613c2560408401826fffffffffffffffffffffffffffffffff169052565b506060830151613c4960608401826fffffffffffffffffffffffffffffffff169052565b506080830151613c6d60808401826fffffffffffffffffffffffffffffffff169052565b5060a0830151613c9160a08401826fffffffffffffffffffffffffffffffff169052565b5060c0830151613caa60c084018264ffffffffff169052565b5060e0830151613cc060e084018261ffff169052565b50610100838101516001600160a01b039081169184019190915261012080850151821690840152610140808501518216908401526101608085015190911690830152610180808401516fffffffffffffffffffffffffffffffff908116918401919091526101a0808501518216908401526101c09384015116929091019190915290565b60008083601f840112613d5657600080fd5b50813567ffffffffffffffff811115613d6e57600080fd5b602083019150836020828501011115613d8657600080fd5b9250929050565b60008060008060008060a08789031215613da657600080fd5b8635613db1816139d8565b95506020870135613dc1816139d8565b945060408701359350606087013567ffffffffffffffff811115613de457600080fd5b613df089828a01613d44565b9094509250613e03905060808801613a73565b90509295509295509295565b600060208284031215613e2157600080fd5b6112fc82613a73565b60008060008060808587031215613e4057600080fd5b8435613e4b816139d8565b935060208501359250604085013591506060850135613e69816139d8565b939692955090935050565b60008060408385031215613e8757600080fd5b8235613e92816139d8565b91506020830135613b43816139fd565b60008060008060808587031215613eb857600080fd5b8435613ec3816139d8565b9350602085013592506040850135613eda816139d8565b9150613ee860608601613a73565b905092959194509250565b600080600060608486031215613f0857600080fd5b8335613f13816139d8565b9250602084013591506040840135613f2a816139d8565b809150509250925092565b6000815180845260005b81811015613f5b57602081850181015186830182015201613f3f565b81811115613f6d576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061ffff808451166020840152806020850151166040840152806040850151166060840152506001600160a01b036060840151166080830152608083015160a0808401526137f060c0840182613f35565b600080600080600060a0868803121561400e57600080fd5b8535614019816139d8565b94506020860135614029816139d8565b93506040860135614039816139d8565b92506060860135614049816139d8565b91506080860135613a65816139d8565b6000806040838503121561406c57600080fd5b8235614077816139d8565b946020939093013593505050565b60008083601f84011261409757600080fd5b50813567ffffffffffffffff8111156140af57600080fd5b6020830191508360208260051b8501011115613d8657600080fd5b600080602083850312156140dd57600080fd5b823567ffffffffffffffff8111156140f457600080fd5b61410085828601614085565b90969095509350505050565b600080600080600060a0868803121561412457600080fd5b853561412f816139d8565b9450602086013593506040860135925061404960608701613a73565b600080600080600080600080600080600060e08c8e03121561416c57600080fd5b6141758c6139ed565b9a5067ffffffffffffffff8060208e0135111561419157600080fd5b6141a18e60208f01358f01614085565b909b50995060408d01358110156141b757600080fd5b6141c78e60408f01358f01614085565b909950975060608d01358110156141dd57600080fd5b6141ed8e60608f01358f01614085565b90975095506141fe60808e016139ed565b94508060a08e0135111561421157600080fd5b506142228d60a08e01358e01613d44565b909350915061423360c08d01613a73565b90509295989b509295989b9093969950565b80356fffffffffffffffffffffffffffffffff811681146139f857600080fd5b6000806040838503121561427857600080fd5b61428183614245565b915061428f60208401614245565b90509250929050565b6000806000606084860312156142ad57600080fd5b83356142b8816139d8565b925060208401356142c8816139d8565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b8181101561431a5783516001600160a01b0316835292840192918401916001016142f5565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561437857614378614326565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156143c5576143c5614326565b604052919050565b600080604083850312156143e057600080fd5b6143e983613a85565b915060208084013567ffffffffffffffff8082111561440757600080fd5b9085019060a0828803121561441b57600080fd5b614423614355565b61442c83613a73565b8152614439848401613a73565b8482015261444960408401613a73565b6040820152606083013561445c816139d8565b606082015260808301358281111561447357600080fd5b80840193505087601f84011261448857600080fd5b82358281111561449a5761449a614326565b6144ca857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161437e565b925080835288858286010111156144e057600080fd5b8085850186850137600085828501015250816080820152809450505050509250929050565b60008060008060008060c0878903121561451e57600080fd5b8635614529816139d8565b95506020870135614539816139d8565b94506040870135614549816139d8565b959894975094956060810135955060808101359460a0909101359350915050565b600080600080600080600080610100898b03121561458757600080fd5b8835614592816139d8565b975060208901359650604089013595506060890135613ae3816139d8565b60008082840360408112156145c457600080fd5b83356145cf816139d8565b925060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08201121561460157600080fd5b506020830190509250929050565b60006020828403121561462157600080fd5b81516112fc816139d8565b60006101a08201905086825285602083015284604083015283606083015282516080830152602083015160a083015260408301516001600160a01b0380821660c08501528060608601511660e08501525050608083015161010061469a818501836001600160a01b03169052565b60a0850151151561012085015260c08501516001600160a01b0390811661014086015260e086015160ff166101608601529085015190811661018085015290505b509695505050505050565b6020815260006112fc6020830184613f35565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061475f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b6000610100820190508582528460208301528360408301526001600160a01b038084511660608401526020840151608084015260408401516147a860a0850182614728565b5060608401511660c0830152608090920151151560e0909101529392505050565b6000602082840312156147db57600080fd5b5051919050565b8281526040602082015260006001600160a01b038084511660408401528060208501511660608401525060408301516080830152606083015160e060a0840152614830610120840182613f35565b905061ffff60808501511660c084015260a084015160e084015260c0840151610100840152809150509392505050565b600181811c9082168061487457607f821691505b602082108114156133df577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000610120820190508482528360208301526001600160a01b038084511660408401528060208501511660608401528060408501511660808401528060608501511660a08401528060808501511660c08401525060a083015161491760e084018261ffff169052565b5060c083015161ffff811661010084015250949350505050565b60006020828403121561494357600080fd5b81516112fc816139fd565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff808316818114156149955761499561494e565b6001019392505050565b848152602081018490526001600160a01b0383166040820152608081016115a66060830184614728565b83815260406020808301829052908201839052600090849060608401835b86811015614a155783356149fa816139d8565b6001600160a01b0316825292820192908201906001016149e7565b50979650505050505050565b85815260208101859052604081018490526060810183905281516001600160a01b03166080820152610200810160208301516001600160a01b03811660a08401525060408301516001600160a01b03811660c084015250606083015160e08301526080830151610100614a9681850183614728565b60a08501519150610120614aaf8186018461ffff169052565b60c08601519250610140614ac68187018515159052565b60e08701516101608781019190915292870151610180870152908601516001600160a01b039081166101a08701529086015160ff166101c0860152908501519081166101e085015290506146db565b600081518084526020808501945080840160005b83811015614b4e5781516001600160a01b031687529582019590820190600101614b29565b509495945050505050565b600081518084526020808501945080840160005b83811015614b4e57815187529582019590820190600101614b6d565b85815284602082015283604082015282606082015260a06080820152614bbb60a0820183516001600160a01b03169052565b600060208301516101c08060c0850152614bd9610260850183614b15565b915060408501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60808685030160e0870152614c158483614b59565b935060608701519150610100818786030181880152614c348584614b59565b945060808801519250610120614c54818901856001600160a01b03169052565b60a089015193506101408389880301818a0152614c718786613f35565b965060c08a015194506101609350614c8e848a018661ffff169052565b60e08a0151945061018085818b0152838b015195506101a0935085848b0152828b0151878b0152818b01516101e08b0152848b01519650614cdb6102008b01886001600160a01b03169052565b8a015160ff81166102208b01529550614cf2915050565b8701518015156102408801529250614a15915050565b60008060008060008060c08789031215614d2157600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b600082821015614d6457614d6461494e565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614dca57614dca61494e565b5060010190565b60006101a0820190508682528560208301528460408301528360608301526001600160a01b038084511660808401528060208501511660a0840152506040830151614e2760c08401826001600160a01b03169052565b50606083015160e08301526080830151610100818185015260a085015161012085015260c085015161014085015260e08501519150614e726101608501836001600160a01b03169052565b84015160ff811661018085015290506146db565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ebe57614ebe61494e565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008219821115614f0557614f0561494e565b500190565b600082614f40577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212203dace2086ac467024fce8515bf399ed22a9f18383ebf61cb7c46e3ede374d70364736f6c634300080a0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE PUSH1 0x3B DUP1 SLOAD PUSH2 0xFFFF PUSH1 0x50 SHL NOT AND PUSH11 0x8000000000000000000000 OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x30 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x5090 CODESIZE SUB DUP1 PUSH3 0x5090 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x53 SWAP2 PUSH3 0x65 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH3 0x97 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x78 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x4F7B PUSH3 0x115 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x361 ADD MSTORE DUP2 DUP2 PUSH2 0xB50 ADD MSTORE DUP2 DUP2 PUSH2 0xC28 ADD MSTORE DUP2 DUP2 PUSH2 0x10B6 ADD MSTORE DUP2 DUP2 PUSH2 0x1609 ADD MSTORE DUP2 DUP2 PUSH2 0x18D8 ADD MSTORE DUP2 DUP2 PUSH2 0x1F2D ADD MSTORE DUP2 DUP2 PUSH2 0x1FF1 ADD MSTORE DUP2 DUP2 PUSH2 0x2210 ADD MSTORE DUP2 DUP2 PUSH2 0x24E4 ADD MSTORE DUP2 DUP2 PUSH2 0x2738 ADD MSTORE DUP2 DUP2 PUSH2 0x2CF9 ADD MSTORE DUP2 DUP2 PUSH2 0x325A ADD MSTORE DUP2 DUP2 PUSH2 0x33E7 ADD MSTORE PUSH2 0x355A ADD MSTORE PUSH2 0x4F7B 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 0x314 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6C6F6AE1 GT PUSH2 0x1A7 JUMPI DUP1 PUSH4 0xD15E0053 GT PUSH2 0xEE JUMPI DUP1 PUSH4 0xE82FEC2F GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xEE3E210B GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xEE3E210B EQ PUSH2 0xA7D JUMPI DUP1 PUSH4 0xF51E435B EQ PUSH2 0xA90 JUMPI DUP1 PUSH4 0xF8119D51 EQ PUSH2 0xAA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE82FEC2F EQ PUSH2 0xA3F JUMPI DUP1 PUSH4 0xE8EDA9DF EQ PUSH2 0x702 JUMPI DUP1 PUSH4 0xEDDF1B79 EQ PUSH2 0xA51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD5ED3933 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0xD5ED3933 EQ PUSH2 0xA06 JUMPI DUP1 PUSH4 0xD65DC7A1 EQ PUSH2 0xA19 JUMPI DUP1 PUSH4 0xE43E88A1 EQ PUSH2 0xA2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD15E0053 EQ PUSH2 0x9CB JUMPI DUP1 PUSH4 0xD1946DBC EQ PUSH2 0x9DE JUMPI DUP1 PUSH4 0xD579EA7D EQ PUSH2 0x9F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCB6E522 GT PUSH2 0x150 JUMPI DUP1 PUSH4 0xC4D66DE8 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x992 JUMPI DUP1 PUSH4 0xCD112382 EQ PUSH2 0x9A5 JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0x9B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCB6E522 EQ PUSH2 0x8FD JUMPI DUP1 PUSH4 0xBF92857C EQ PUSH2 0x910 JUMPI DUP1 PUSH4 0xC44B11F7 EQ PUSH2 0x950 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9CD19996 GT PUSH2 0x181 JUMPI DUP1 PUSH4 0x9CD19996 EQ PUSH2 0x8C4 JUMPI DUP1 PUSH4 0xA415BCAD EQ PUSH2 0x8D7 JUMPI DUP1 PUSH4 0xAB9C4B5D EQ PUSH2 0x8EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6C6F6AE1 EQ PUSH2 0x87E JUMPI DUP1 PUSH4 0x7A708E92 EQ PUSH2 0x89E JUMPI DUP1 PUSH4 0x94BA89A2 EQ PUSH2 0x8B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x386497FD GT PUSH2 0x26B JUMPI DUP1 PUSH4 0x5A3B74B9 GT PUSH2 0x214 JUMPI DUP1 PUSH4 0x69328DEC GT PUSH2 0x1EE JUMPI DUP1 PUSH4 0x69328DEC EQ PUSH2 0x82A JUMPI DUP1 PUSH4 0x69A933A5 EQ PUSH2 0x83D JUMPI DUP1 PUSH4 0x6A99C036 EQ PUSH2 0x850 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5A3B74B9 EQ PUSH2 0x6EF JUMPI DUP1 PUSH4 0x617BA037 EQ PUSH2 0x702 JUMPI DUP1 PUSH4 0x63C9B860 EQ PUSH2 0x715 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52751797 GT PUSH2 0x245 JUMPI DUP1 PUSH4 0x52751797 EQ PUSH2 0x65E JUMPI DUP1 PUSH4 0x573ADE81 EQ PUSH2 0x68B JUMPI DUP1 PUSH4 0x57C68DC4 EQ PUSH2 0x69E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x386497FD EQ PUSH2 0x5E7 JUMPI DUP1 PUSH4 0x42B0B77C EQ PUSH2 0x5FA JUMPI DUP1 PUSH4 0x4417A583 EQ PUSH2 0x60D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1D2118F9 GT PUSH2 0x2CD JUMPI DUP1 PUSH4 0x2DAD97D4 GT PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x2DAD97D4 EQ PUSH2 0x400 JUMPI DUP1 PUSH4 0x3036B439 EQ PUSH2 0x413 JUMPI DUP1 PUSH4 0x35EA6A75 EQ PUSH2 0x426 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1D2118F9 EQ PUSH2 0x3D2 JUMPI DUP1 PUSH4 0x272D9072 EQ PUSH2 0x3E5 JUMPI DUP1 PUSH4 0x28530A47 EQ PUSH2 0x3ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2C205F0 GT PUSH2 0x2FE JUMPI DUP1 PUSH4 0x2C205F0 EQ PUSH2 0x349 JUMPI DUP1 PUSH4 0x542975C EQ PUSH2 0x35C JUMPI DUP1 PUSH4 0x74B2E43 EQ PUSH2 0x39B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH3 0xA718A9 EQ PUSH2 0x319 JUMPI DUP1 PUSH4 0x148170E EQ PUSH2 0x32E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x32C PUSH2 0x327 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A0B JUMP JUMPDEST PUSH2 0xACB JUMP JUMPDEST STOP JUMPDEST PUSH2 0x336 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x32C PUSH2 0x357 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A96 JUMP JUMPDEST PUSH2 0xCF8 JUMP JUMPDEST PUSH2 0x383 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x340 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x340 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x3E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B15 JUMP JUMPDEST PUSH2 0xE8E JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x336 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x3FB CALLDATASIZE PUSH1 0x4 PUSH2 0x3B4E JUMP JUMPDEST PUSH2 0x1048 JUMP JUMPDEST PUSH2 0x336 PUSH2 0x40E CALLDATASIZE PUSH1 0x4 PUSH2 0x3B69 JUMP JUMPDEST PUSH2 0x11E6 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x421 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B9E JUMP JUMPDEST PUSH2 0x1303 JUMP JUMPDEST PUSH2 0x5DA PUSH2 0x434 CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x200 DUP2 ADD DUP3 MSTORE PUSH1 0x0 PUSH2 0x1E0 DUP3 ADD DUP2 DUP2 MSTORE DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1A0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x200 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH2 0x1E0 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH17 0x100000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP5 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x2 DUP3 ADD SLOAD DUP1 DUP5 AND PUSH1 0x60 DUP4 ADD MSTORE DUP5 SWAP1 DIV DUP4 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x3 DUP3 ADD SLOAD DUP1 DUP5 AND PUSH1 0xA0 DUP4 ADD MSTORE DUP5 DUP2 DIV PUSH5 0xFFFFFFFFFF AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD DUP6 AND PUSH2 0x100 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD DUP6 AND PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD DUP6 AND PUSH2 0x140 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD SWAP1 SWAP5 AND PUSH2 0x160 DUP6 ADD MSTORE PUSH1 0x8 DUP2 ADD SLOAD DUP1 DUP4 AND PUSH2 0x180 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP3 DIV DUP2 AND PUSH2 0x1A0 DUP5 ADD MSTORE PUSH1 0x9 SWAP1 SWAP2 ADD SLOAD AND PUSH2 0x1C0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x340 SWAP2 SWAP1 PUSH2 0x3BD4 JUMP JUMPDEST PUSH2 0x336 PUSH2 0x5F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB7 JUMP JUMPDEST PUSH2 0x1310 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x608 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D8D JUMP JUMPDEST PUSH2 0x1337 JUMP JUMPDEST PUSH2 0x64F PUSH2 0x61B CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND DUP2 MSTORE PUSH1 0x35 DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 MLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x340 JUMP JUMPDEST PUSH2 0x383 PUSH2 0x66C CALLDATASIZE PUSH1 0x4 PUSH2 0x3E0F JUMP JUMPDEST PUSH2 0xFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x336 PUSH2 0x699 CALLDATASIZE PUSH1 0x4 PUSH2 0x3E2A JUMP JUMPDEST PUSH2 0x148A JUMP JUMPDEST PUSH2 0x32C PUSH2 0x6AC CALLDATASIZE PUSH1 0x4 PUSH2 0x3E0F JUMP JUMPDEST PUSH1 0x3B DUP1 SLOAD PUSH2 0xFFFF SWAP1 SWAP3 AND PUSH11 0x100000000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x32C PUSH2 0x6FD CALLDATASIZE PUSH1 0x4 PUSH2 0x3E74 JUMP JUMPDEST PUSH2 0x15AF JUMP JUMPDEST PUSH2 0x32C PUSH2 0x710 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EA2 JUMP JUMPDEST PUSH2 0x1750 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x723 CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND DUP7 MSTORE PUSH1 0x36 DUP5 MSTORE SWAP2 DUP6 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP6 DUP6 MSTORE SWAP3 SWAP1 SWAP2 MSTORE DUP3 DUP3 SSTORE PUSH1 0x1 DUP3 ADD DUP4 SWAP1 SSTORE PUSH1 0x2 DUP3 ADD DUP4 SWAP1 SSTORE DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x4 DUP2 ADD DUP1 SLOAD DUP5 AND SWAP1 SSTORE PUSH1 0x5 DUP2 ADD DUP1 SLOAD DUP5 AND SWAP1 SSTORE PUSH1 0x6 DUP2 ADD DUP1 SLOAD DUP5 AND SWAP1 SSTORE PUSH1 0x7 DUP2 ADD DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP3 SSTORE PUSH1 0x8 DUP3 ADD SSTORE PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x336 PUSH2 0x838 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EF3 JUMP JUMPDEST PUSH2 0x1846 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x84B CALLDATASIZE PUSH1 0x4 PUSH2 0x3EA2 JUMP JUMPDEST PUSH2 0x1A17 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3B1 JUMP JUMPDEST PUSH2 0x891 PUSH2 0x88C CALLDATASIZE PUSH1 0x4 PUSH2 0x3B4E JUMP JUMPDEST PUSH2 0x1AB7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x340 SWAP2 SWAP1 PUSH2 0x3FA0 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x8AC CALLDATASIZE PUSH1 0x4 PUSH2 0x3FF6 JUMP JUMPDEST PUSH2 0x1BE4 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x8BF CALLDATASIZE PUSH1 0x4 PUSH2 0x4059 JUMP JUMPDEST PUSH2 0x1D43 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x8D2 CALLDATASIZE PUSH1 0x4 PUSH2 0x40CA JUMP JUMPDEST PUSH2 0x1DB7 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x8E5 CALLDATASIZE PUSH1 0x4 PUSH2 0x410C JUMP JUMPDEST PUSH2 0x1E0C JUMP JUMPDEST PUSH2 0x32C PUSH2 0x8F8 CALLDATASIZE PUSH1 0x4 PUSH2 0x414B JUMP JUMPDEST PUSH2 0x208A JUMP JUMPDEST PUSH2 0x32C PUSH2 0x90B CALLDATASIZE PUSH1 0x4 PUSH2 0x4265 JUMP JUMPDEST PUSH2 0x2402 JUMP JUMPDEST PUSH2 0x923 PUSH2 0x91E CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB7 JUMP JUMPDEST PUSH2 0x2439 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH2 0x340 JUMP JUMPDEST PUSH2 0x64F PUSH2 0x95E CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND DUP2 MSTORE PUSH1 0x34 DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x9A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB7 JUMP JUMPDEST PUSH2 0x264E JUMP JUMPDEST PUSH2 0x32C PUSH2 0x9B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B15 JUMP JUMPDEST PUSH2 0x283A JUMP JUMPDEST PUSH2 0x32C PUSH2 0x9C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4298 JUMP JUMPDEST PUSH2 0x28B6 JUMP JUMPDEST PUSH2 0x336 PUSH2 0x9D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB7 JUMP JUMPDEST PUSH2 0x2956 JUMP JUMPDEST PUSH2 0x9E6 PUSH2 0x2977 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x340 SWAP2 SWAP1 PUSH2 0x42D9 JUMP JUMPDEST PUSH2 0x32C PUSH2 0xA01 CALLDATASIZE PUSH1 0x4 PUSH2 0x43CD JUMP JUMPDEST PUSH2 0x2A7F JUMP JUMPDEST PUSH2 0x32C PUSH2 0xA14 CALLDATASIZE PUSH1 0x4 PUSH2 0x4505 JUMP JUMPDEST PUSH2 0x2BDE JUMP JUMPDEST PUSH2 0x336 PUSH2 0xA27 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B69 JUMP JUMPDEST PUSH2 0x2E17 JUMP JUMPDEST PUSH2 0x32C PUSH2 0xA3A CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB7 JUMP JUMPDEST PUSH2 0x2EAA JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0x336 JUMP JUMPDEST PUSH2 0x336 PUSH2 0xA5F CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x336 PUSH2 0xA8B CALLDATASIZE PUSH1 0x4 PUSH2 0x456A JUMP JUMPDEST PUSH2 0x2F12 JUMP JUMPDEST PUSH2 0x32C PUSH2 0xA9E CALLDATASIZE PUSH1 0x4 PUSH2 0x45B0 JUMP JUMPDEST PUSH2 0x30C6 JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH11 0x100000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x40 MLOAD PUSH2 0xFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x340 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x83C1087D PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x37 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBAC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBD0 SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP12 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x5EB88D3D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP5 ADD SWAP4 PUSH32 0x0 SWAP1 SWAP4 AND SWAP3 PUSH4 0x5EB88D3D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC71 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC95 SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xCC1 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x462C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xCD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xCED JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD7D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD91 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP14 DUP7 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP13 DUP2 MSTORE DUP3 DUP5 ADD SWAP5 DUP6 MSTORE PUSH2 0xFFFF DUP12 DUP2 AND PUSH1 0x60 DUP6 ADD SWAP1 DUP2 MSTORE SWAP5 MLOAD PUSH32 0x1913F16100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 MLOAD DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE MLOAD PUSH1 0x84 DUP3 ADD MSTORE SWAP3 MLOAD SWAP1 SWAP4 AND PUSH1 0xA4 DUP4 ADD MSTORE MLOAD SWAP1 SWAP2 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1913F161 SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xE80 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xE96 PUSH2 0x324E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xF14 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF0B SWAP2 SWAP1 PUSH2 0x46E6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0xF90 JUMPI POP PUSH1 0x0 DUP1 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH32 0x4CB2B152C1B54CE671907A93C300FD5AA72383A9D4EC19A81E3333632AE92E00 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xFFE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF0B SWAP2 SWAP1 PUSH2 0x46E6 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0x0 PUSH4 0x5D5DC313 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x38 PUSH1 0x35 PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1112 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1136 SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0xFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP8 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11B3 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 SWAP6 DUP7 MSTORE PUSH1 0x20 DUP1 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x40 DUP1 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP6 ADD MSTORE DUP1 MLOAD PUSH1 0xA0 DUP6 ADD MSTORE SWAP2 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xC0 DUP5 ADD MSTORE ADD MLOAD PUSH1 0xFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x11DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x40E95DE6 PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x125D JUMPI PUSH2 0x125D PUSH2 0x46F9 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x126E JUMPI PUSH2 0x126E PUSH2 0x46F9 JUMP JUMPDEST DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x40 SWAP2 DUP3 ADD MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x12B8 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x4763 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x12D5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12F9 SWAP2 SWAP1 PUSH2 0x47C9 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x130B PUSH2 0x324E JUMP JUMPDEST PUSH1 0x39 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x1331 SWAP1 PUSH2 0x3355 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP6 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 DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH2 0xFFFF DUP6 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV DUP2 AND PUSH1 0x40 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x60 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND DUP3 MSTORE PUSH1 0x34 SWAP1 MSTORE DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0xA1FE0E8D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0xA1FE0E8D SWAP2 PUSH2 0x1451 SWAP2 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x47E2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1469 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x147D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x40E95DE6 PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x0 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1501 JUMPI PUSH2 0x1501 PUSH2 0x46F9 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1512 JUMPI PUSH2 0x1512 PUSH2 0x46F9 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x40 SWAP2 DUP3 ADD MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x1565 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x4763 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1582 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15A6 SWAP2 SWAP1 PUSH2 0x47C9 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH20 0x0 PUSH4 0xBF697A26 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP8 DUP8 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1665 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1689 SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0xE0 DUP12 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP10 SWAP1 SWAP10 MSTORE PUSH1 0x24 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x44 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x64 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x84 DUP8 ADD MSTORE ISZERO ISZERO PUSH1 0xA4 DUP7 ADD MSTORE PUSH2 0xFFFF SWAP1 SWAP2 AND PUSH1 0xC4 DUP6 ADD MSTORE AND PUSH1 0xE4 DUP4 ADD MSTORE PUSH1 0xFF AND PUSH2 0x104 DUP3 ADD MSTORE PUSH2 0x124 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1734 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1748 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP10 DUP7 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP9 DUP2 MSTORE DUP3 DUP5 ADD SWAP5 DUP6 MSTORE PUSH2 0xFFFF DUP8 DUP2 AND PUSH1 0x60 DUP6 ADD SWAP1 DUP2 MSTORE SWAP5 MLOAD PUSH32 0x1913F16100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 MLOAD DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE MLOAD PUSH1 0x84 DUP3 ADD MSTORE SWAP3 MLOAD SWAP1 SWAP4 AND PUSH1 0xA4 DUP4 ADD MSTORE MLOAD SWAP1 SWAP2 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1913F161 SWAP1 PUSH1 0xE4 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1828 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x183C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x186DEA44 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1934 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1958 SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP12 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP10 SWAP1 SWAP10 MSTORE PUSH1 0x24 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x44 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x64 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP2 MLOAD DUP4 AND PUSH1 0x84 DUP8 ADD MSTORE SWAP4 DUP2 ADD MLOAD PUSH1 0xA4 DUP7 ADD MSTORE SWAP2 DUP3 ADD MLOAD DUP2 AND PUSH1 0xC4 DUP6 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0xE4 DUP6 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD AND PUSH2 0x104 DUP5 ADD MSTORE PUSH1 0xA0 ADD MLOAD AND PUSH2 0x124 DUP3 ADD MSTORE PUSH2 0x144 ADD PUSH2 0x12B8 JUMP JUMPDEST PUSH2 0x1A1F PUSH2 0x33E5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x413C86F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x413C86F SWAP1 PUSH1 0xE4 ADD PUSH2 0x1810 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xA0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND DUP4 MSTORE PUSH3 0x10000 DUP3 DIV DUP2 AND SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH5 0x100000000 DUP2 DIV SWAP1 SWAP4 AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH7 0x1000000000000 SWAP1 SWAP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0x80 DUP5 ADD SWAP2 SWAP1 PUSH2 0x1B5B SWAP1 PUSH2 0x4860 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1B87 SWAP1 PUSH2 0x4860 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1BD4 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1BA9 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1BD4 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 0x1BB7 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1BEC PUSH2 0x324E JUMP JUMPDEST PUSH20 0x0 PUSH4 0x69FC1BDF PUSH1 0x34 PUSH1 0x36 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1C96 PUSH1 0x3B SLOAD PUSH2 0xFFFF PUSH11 0x100000000000000000000 SWAP1 SWAP2 DIV AND SWAP1 JUMP JUMPDEST PUSH2 0xFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1CBB SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x48AE JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1CD8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1CFC SWAP2 SWAP1 PUSH2 0x4931 JUMP JUMPDEST ISZERO PUSH2 0x11DF JUMPI PUSH1 0x3B DUP1 SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND SWAP1 PUSH1 0x8 PUSH2 0x1D21 DUP4 PUSH2 0x497D JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH2 0xFFFF MUL NOT AND SWAP1 DUP4 PUSH2 0xFFFF AND MUL OR SWAP1 SSTORE POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE PUSH1 0x35 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 PUSH20 0x0 SWAP2 PUSH4 0xEAC4D703 SWAP2 DUP6 DUP6 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1D98 JUMPI PUSH2 0x1D98 PUSH2 0x46F9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x171C SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x499F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x48C2CA8C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x48C2CA8C SWAP1 PUSH2 0x171C SWAP1 PUSH1 0x34 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x49C9 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x1E6473F9 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1EA2 JUMPI PUSH2 0x1EA2 PUSH2 0x46F9 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1EB3 JUMPI PUSH2 0x1EB3 PUSH2 0x46F9 JUMP JUMPDEST DUP2 MSTORE PUSH2 0xFFFF DUP1 DUP12 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x40 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH9 0x10000000000000000 SWAP1 DIV SWAP1 SWAP3 AND PUSH1 0x80 DUP5 ADD MSTORE DUP2 MLOAD PUSH32 0xFCA513A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 MLOAD PUSH1 0xA0 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP3 PUSH4 0xFCA513A8 SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP2 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F75 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F99 SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x5EB88D3D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP5 ADD SWAP4 PUSH32 0x0 SWAP1 SWAP4 AND SWAP3 PUSH4 0x5EB88D3D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x203A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x205E SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xCC1 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4A21 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1C0 ADD PUSH1 0x40 MSTORE DUP1 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 DUP13 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP13 DUP2 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP13 DUP3 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 DUP14 SWAP2 DUP14 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP11 DUP2 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP11 DUP3 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 DUP12 SWAP2 DUP12 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F DUP9 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD DUP3 MSTORE DUP8 DUP2 MSTORE SWAP3 ADD SWAP2 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH2 0xFFFF DUP1 DUP7 AND PUSH1 0x20 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV DUP2 AND PUSH1 0x40 DUP1 DUP9 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x80 DUP8 ADD MSTORE PUSH9 0x10000000000000000 SWAP1 DIV SWAP1 SWAP3 AND PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0xC0 DUP7 ADD DUP2 SWAP1 MSTORE SWAP1 DUP12 AND DUP5 MSTORE PUSH1 0x38 DUP3 MSTORE SWAP3 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0xE0 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 MLOAD PUSH2 0x100 SWAP1 SWAP5 ADD SWAP4 PUSH4 0x707CD716 SWAP3 PUSH1 0x4 DUP1 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22A3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x22C7 SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFA50F29700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xFA50F297 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2326 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x234A SWAP2 SWAP1 PUSH2 0x4931 JUMP JUMPDEST ISZERO ISZERO SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x2E7263EA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x2E7263EA SWAP2 PUSH2 0x23C4 SWAP2 PUSH1 0x34 SWAP2 PUSH1 0x36 SWAP2 PUSH1 0x37 SWAP2 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x4B89 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x23DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x23F0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x240A PUSH2 0x324E JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP2 AND OR PUSH1 0x3A SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE DUP6 DUP3 KECCAK256 PUSH1 0xC0 DUP7 ADD DUP8 MSTORE SLOAD PUSH1 0xA0 DUP7 ADD SWAP1 DUP2 MSTORE DUP6 MSTORE PUSH1 0x3B SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND DUP2 DUP7 ADD MSTORE DUP5 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP5 MLOAD PUSH32 0xFCA513A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP5 MLOAD SWAP1 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 PUSH20 0x0 SWAP5 PUSH4 0x26EC273F SWAP5 PUSH1 0x34 SWAP5 PUSH1 0x36 SWAP5 PUSH1 0x37 SWAP5 PUSH1 0x60 DUP6 ADD SWAP4 PUSH32 0x0 AND SWAP3 PUSH4 0xFCA513A8 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x252A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x254E SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP15 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP11 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH1 0x24 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x44 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP3 MLOAD MLOAD PUSH1 0x64 DUP8 ADD MSTORE SWAP4 DUP3 ADD MLOAD PUSH1 0x84 DUP7 ADD MSTORE SWAP2 DUP2 ADD MLOAD DUP4 AND PUSH1 0xA4 DUP6 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP1 SWAP3 AND PUSH1 0xC4 DUP5 ADD MSTORE PUSH1 0x80 SWAP1 SWAP2 ADD MLOAD AND PUSH1 0xE4 DUP3 ADD MSTORE PUSH2 0x104 ADD PUSH1 0xC0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2616 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x263A SWAP2 SWAP1 PUSH2 0x4D08 JUMP JUMPDEST SWAP5 SWAP13 SWAP4 SWAP12 POP SWAP2 SWAP10 POP SWAP8 POP SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x3 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x2661 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x266D JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x26F9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xF0B JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x2736 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3132000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x27D9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF0B SWAP2 SWAP1 PUSH2 0x46E6 JUMP JUMPDEST POP PUSH1 0x3B DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH2 0x9C4 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x2835 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x6973F74400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x6973F744 SWAP1 PUSH1 0x64 ADD PUSH2 0x171C JUMP JUMPDEST PUSH2 0x28BE PUSH2 0x3558 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x87B322B200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x87B322B2 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2939 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x294D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x1331 SWAP1 PUSH2 0x36CB JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH1 0x60 SWAP1 PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 DUP1 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x29A9 JUMPI PUSH2 0x29A9 PUSH2 0x4326 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x29D2 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A75 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x2A55 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH2 0x2A20 DUP6 DUP5 PUSH2 0x4D52 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x2A30 JUMPI PUSH2 0x2A30 PUSH2 0x4D69 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH2 0x2A63 JUMP JUMPDEST DUP3 PUSH2 0x2A5F DUP2 PUSH2 0x4D98 JUMP JUMPDEST SWAP4 POP POP JUMPDEST DUP1 PUSH2 0x2A6D DUP2 PUSH2 0x4D98 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x29D8 JUMP JUMPDEST POP SWAP2 SUB DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2A87 PUSH2 0x324E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3136000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP4 AND PUSH2 0x2AF6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF0B SWAP2 SWAP1 PUSH2 0x46E6 JUMP JUMPDEST POP PUSH1 0xFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD DUP4 DUP7 ADD MLOAD SWAP5 DUP7 ADD MLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH7 0x1000000000000 MUL PUSH32 0xFFFFFFFFFFFF0000000000000000000000000000000000000000FFFFFFFFFFFF PUSH2 0xFFFF SWAP3 DUP4 AND PUSH5 0x100000000 MUL AND PUSH32 0xFFFFFFFFFFFF00000000000000000000000000000000000000000000FFFFFFFF SWAP8 DUP4 AND PUSH3 0x10000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 SWAP1 SWAP5 AND SWAP3 SWAP1 SWAP5 AND SWAP2 SWAP1 SWAP2 OR SWAP2 SWAP1 SWAP2 OR SWAP5 SWAP1 SWAP5 AND OR SWAP3 SWAP1 SWAP3 OR DUP3 SSTORE PUSH1 0x80 DUP4 ADD MLOAD DUP1 MLOAD DUP5 SWAP4 SWAP3 PUSH2 0x11DF SWAP3 PUSH1 0x1 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x393F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP4 MSTORE PUSH32 0x3131000000000000000000000000000000000000000000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 AND CALLER EQ PUSH2 0x2C6F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF0B SWAP2 SWAP1 PUSH2 0x46E6 JUMP JUMPDEST POP PUSH20 0x0 PUSH4 0x8A5DADD1 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D55 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2D79 SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP14 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP9 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x2DDF SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x4DD1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2DF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2E0B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E21 PUSH2 0x33E5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x39 SLOAD SWAP2 MLOAD PUSH32 0x8E74324800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x44 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0x64 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x8E743248 SWAP1 PUSH1 0xA4 ADD PUSH2 0x12B8 JUMP JUMPDEST PUSH2 0x2EB2 PUSH2 0x324E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x1E3B414500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1E3B4145 SWAP1 PUSH1 0x44 ADD PUSH2 0x11B3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2FAE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2FE6 JUMPI PUSH2 0x2FE6 PUSH2 0x46F9 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2FF7 JUMPI PUSH2 0x2FF7 PUSH2 0x46F9 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x40 SWAP4 DUP5 ADD DUP2 SWAP1 MSTORE SWAP2 DUP3 MSTORE PUSH1 0x35 SWAP1 MSTORE DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x40E95DE600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x40E95DE6 SWAP2 PUSH2 0x3077 SWAP2 PUSH1 0x34 SWAP2 PUSH1 0x36 SWAP2 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x4763 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x3094 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x30B8 SWAP2 SWAP1 PUSH2 0x47C9 JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x30CE PUSH2 0x324E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x3143 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF0B SWAP2 SWAP1 PUSH2 0x46E6 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x31BF JUMPI POP PUSH1 0x0 DUP1 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH32 0x4CB2B152C1B54CE671907A93C300FD5AA72383A9D4EC19A81E3333632AE92E00 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x322D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF0B SWAP2 SWAP1 PUSH2 0x46E6 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 CALLDATALOAD SWAP1 SSTORE JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x631ADFCA PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x32B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x32DA SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3130000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3352 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF0B SWAP2 SWAP1 PUSH2 0x46E6 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x339B JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x12FC SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x33D9 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x374F JUMP JUMPDEST SWAP1 PUSH2 0x375C JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3443 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3467 SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x726600CE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x726600CE SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x34C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x34EA SWAP2 SWAP1 PUSH2 0x4931 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3600000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3352 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF0B SWAP2 SWAP1 PUSH2 0x46E6 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x35B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x35DA SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3639 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x365D SWAP2 SWAP1 PUSH2 0x4931 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3352 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF0B SWAP2 SWAP1 PUSH2 0x46E6 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x3711 JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x12FC SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x33D9 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x37B3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12FC DUP4 DUP4 TIMESTAMP PUSH2 0x37F8 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x3791 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x37C7 PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x4D52 JUMP JUMPDEST PUSH2 0x37D1 SWAP1 DUP6 PUSH2 0x4E86 JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x37F0 DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x4EF2 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x380C PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x4D52 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x3828 JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x12FC JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x385E JUMPI PUSH1 0x0 PUSH2 0x3863 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x3877 DUP11 DUP1 PUSH2 0x375C JUMP JUMPDEST DUP2 PUSH2 0x3884 JUMPI PUSH2 0x3884 PUSH2 0x4EC3 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x3896 DUP4 DUP12 PUSH2 0x375C JUMP JUMPDEST DUP2 PUSH2 0x38A3 JUMPI PUSH2 0x38A3 PUSH2 0x4EC3 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x38B3 DUP7 DUP9 PUSH2 0x4E86 JUMP JUMPDEST PUSH2 0x38BD SWAP2 SWAP1 PUSH2 0x4E86 JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x38D1 DUP9 DUP11 PUSH2 0x4E86 JUMP JUMPDEST PUSH2 0x38DB SWAP2 SWAP1 PUSH2 0x4E86 JUMP JUMPDEST PUSH2 0x38E5 SWAP2 SWAP1 PUSH2 0x4E86 JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x38FC DUP11 DUP16 PUSH2 0x4E86 JUMP JUMPDEST PUSH2 0x3906 SWAP2 SWAP1 PUSH2 0x4F0A JUMP JUMPDEST PUSH2 0x391C SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x4EF2 JUMP JUMPDEST PUSH2 0x3926 SWAP2 SWAP1 PUSH2 0x4EF2 JUMP JUMPDEST PUSH2 0x3930 SWAP2 SWAP1 PUSH2 0x4EF2 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x394B SWAP1 PUSH2 0x4860 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x396D JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x39B3 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x3986 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x39B3 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x39B3 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x39B3 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x3998 JUMP JUMPDEST POP PUSH2 0x39BF SWAP3 SWAP2 POP PUSH2 0x39C3 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x39BF JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x39C4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3352 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x39F8 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3352 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3A23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x3A2E DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x3A3E DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x3A4E DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x3A65 DUP2 PUSH2 0x39FD JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x39F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x39F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x3AB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x3ABE DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH2 0x3AD5 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP6 POP PUSH2 0x3AE3 PUSH1 0x60 DUP11 ADD PUSH2 0x3A73 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD SWAP4 POP PUSH2 0x3AF8 PUSH1 0xA0 DUP11 ADD PUSH2 0x3A85 JUMP JUMPDEST SWAP3 POP PUSH1 0xC0 DUP10 ADD CALLDATALOAD SWAP2 POP PUSH1 0xE0 DUP10 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 SWAP1 SWAP4 SWAP7 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3B28 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3B33 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3B43 DUP2 PUSH2 0x39D8 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3B60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12FC DUP3 PUSH2 0x3A85 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3B7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3B89 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3BB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3BC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x12FC DUP2 PUSH2 0x39D8 JUMP JUMPDEST DUP2 MLOAD MLOAD DUP2 MSTORE PUSH2 0x1E0 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x3C01 PUSH1 0x20 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x3C25 PUSH1 0x40 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x3C49 PUSH1 0x60 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x3C6D PUSH1 0x80 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x3C91 PUSH1 0xA0 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0x3CAA PUSH1 0xC0 DUP5 ADD DUP3 PUSH5 0xFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0x3CC0 PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH2 0x100 DUP4 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x120 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x140 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x160 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP1 DUP5 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x1C0 SWAP4 DUP5 ADD MLOAD AND SWAP3 SWAP1 SWAP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x3D56 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3D6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x3D86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x3DA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x3DB1 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x3DC1 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3DE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3DF0 DUP10 DUP3 DUP11 ADD PUSH2 0x3D44 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0x3E03 SWAP1 POP PUSH1 0x80 DUP9 ADD PUSH2 0x3A73 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3E21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12FC DUP3 PUSH2 0x3A73 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3E40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x3E4B DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x3E69 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3E87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3E92 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3B43 DUP2 PUSH2 0x39FD JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3EB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x3EC3 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x3EDA DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP2 POP PUSH2 0x3EE8 PUSH1 0x60 DUP7 ADD PUSH2 0x3A73 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3F08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3F13 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x3F2A DUP2 PUSH2 0x39D8 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3F5B JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x3F3F JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x3F6D JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP5 MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0xA0 DUP1 DUP5 ADD MSTORE PUSH2 0x37F0 PUSH1 0xC0 DUP5 ADD DUP3 PUSH2 0x3F35 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x400E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4019 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x4029 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x4039 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x4049 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x3A65 DUP2 PUSH2 0x39D8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x406C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4077 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x4097 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x40AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x3D86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x40DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x40F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4100 DUP6 DUP3 DUP7 ADD PUSH2 0x4085 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4124 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x412F DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x4049 PUSH1 0x60 DUP8 ADD PUSH2 0x3A73 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x416C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4175 DUP13 PUSH2 0x39ED JUMP JUMPDEST SWAP11 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0x20 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x4191 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x41A1 DUP15 PUSH1 0x20 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x4085 JUMP JUMPDEST SWAP1 SWAP12 POP SWAP10 POP PUSH1 0x40 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x41B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x41C7 DUP15 PUSH1 0x40 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x4085 JUMP JUMPDEST SWAP1 SWAP10 POP SWAP8 POP PUSH1 0x60 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x41DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x41ED DUP15 PUSH1 0x60 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x4085 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH2 0x41FE PUSH1 0x80 DUP15 ADD PUSH2 0x39ED JUMP JUMPDEST SWAP5 POP DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x4211 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4222 DUP14 PUSH1 0xA0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x3D44 JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x4233 PUSH1 0xC0 DUP14 ADD PUSH2 0x3A73 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x39F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4281 DUP4 PUSH2 0x4245 JUMP JUMPDEST SWAP2 POP PUSH2 0x428F PUSH1 0x20 DUP5 ADD PUSH2 0x4245 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x42AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x42B8 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x42C8 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD 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 0x431A JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x42F5 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4378 JUMPI PUSH2 0x4378 PUSH2 0x4326 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x43C5 JUMPI PUSH2 0x43C5 PUSH2 0x4326 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x43E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43E9 DUP4 PUSH2 0x3A85 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP1 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x4407 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP6 ADD SWAP1 PUSH1 0xA0 DUP3 DUP9 SUB SLT ISZERO PUSH2 0x441B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4423 PUSH2 0x4355 JUMP JUMPDEST PUSH2 0x442C DUP4 PUSH2 0x3A73 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x4439 DUP5 DUP5 ADD PUSH2 0x3A73 JUMP JUMPDEST DUP5 DUP3 ADD MSTORE PUSH2 0x4449 PUSH1 0x40 DUP5 ADD PUSH2 0x3A73 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH2 0x445C DUP2 PUSH2 0x39D8 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x4473 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP5 ADD SWAP4 POP POP DUP8 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x4488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x449A JUMPI PUSH2 0x449A PUSH2 0x4326 JUMP JUMPDEST PUSH2 0x44CA DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x437E JUMP JUMPDEST SWAP3 POP DUP1 DUP4 MSTORE DUP9 DUP6 DUP3 DUP7 ADD ADD GT ISZERO PUSH2 0x44E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP6 DUP6 ADD DUP7 DUP6 ADD CALLDATACOPY PUSH1 0x0 DUP6 DUP3 DUP6 ADD ADD MSTORE POP DUP2 PUSH1 0x80 DUP3 ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x451E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x4529 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x4539 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0x4549 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP5 SWAP6 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP6 POP PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP5 PUSH1 0xA0 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x4587 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x4592 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD SWAP6 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD PUSH2 0x3AE3 DUP2 PUSH2 0x39D8 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 SUB PUSH1 0x40 DUP2 SLT ISZERO PUSH2 0x45C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x45CF DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP3 ADD SLT ISZERO PUSH2 0x4601 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 DUP4 ADD SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4621 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x12FC DUP2 PUSH2 0x39D8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 ADD SWAP1 POP DUP7 DUP3 MSTORE DUP6 PUSH1 0x20 DUP4 ADD MSTORE DUP5 PUSH1 0x40 DUP4 ADD MSTORE DUP4 PUSH1 0x60 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0xC0 DUP6 ADD MSTORE DUP1 PUSH1 0x60 DUP7 ADD MLOAD AND PUSH1 0xE0 DUP6 ADD MSTORE POP POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x469A DUP2 DUP6 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD ISZERO ISZERO PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0xC0 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH2 0x140 DUP7 ADD MSTORE PUSH1 0xE0 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x160 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x180 DUP6 ADD MSTORE SWAP1 POP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x12FC PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3F35 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x475F JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 DUP3 ADD SWAP1 POP DUP6 DUP3 MSTORE DUP5 PUSH1 0x20 DUP4 ADD MSTORE DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x47A8 PUSH1 0xA0 DUP6 ADD DUP3 PUSH2 0x4728 JUMP JUMPDEST POP PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x80 SWAP1 SWAP3 ADD MLOAD ISZERO ISZERO PUSH1 0xE0 SWAP1 SWAP2 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x47DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x4830 PUSH2 0x120 DUP5 ADD DUP3 PUSH2 0x3F35 JUMP JUMPDEST SWAP1 POP PUSH2 0xFFFF PUSH1 0x80 DUP6 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xA0 DUP5 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0xC0 DUP5 ADD MLOAD PUSH2 0x100 DUP5 ADD MSTORE DUP1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x4874 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x33DF JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP5 DUP3 MSTORE DUP4 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0x60 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE DUP1 PUSH1 0x80 DUP6 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x4917 PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0xFFFF DUP2 AND PUSH2 0x100 DUP5 ADD MSTORE POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4943 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x12FC DUP2 PUSH2 0x39FD JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x4995 JUMPI PUSH2 0x4995 PUSH2 0x494E JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD PUSH2 0x15A6 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x4728 JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE SWAP1 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP5 SWAP1 PUSH1 0x60 DUP5 ADD DUP4 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x4A15 JUMPI DUP4 CALLDATALOAD PUSH2 0x49FA DUP2 PUSH2 0x39D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x49E7 JUMP JUMPDEST POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x200 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x4A96 DUP2 DUP6 ADD DUP4 PUSH2 0x4728 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x120 PUSH2 0x4AAF DUP2 DUP7 ADD DUP5 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xC0 DUP7 ADD MLOAD SWAP3 POP PUSH2 0x140 PUSH2 0x4AC6 DUP2 DUP8 ADD DUP6 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MLOAD PUSH2 0x160 DUP8 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP8 ADD MLOAD PUSH2 0x180 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH2 0x1A0 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x1C0 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x46DB JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4B4E JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x4B29 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4B4E JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x4B6D JUMP JUMPDEST DUP6 DUP2 MSTORE DUP5 PUSH1 0x20 DUP3 ADD MSTORE DUP4 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x4BBB PUSH1 0xA0 DUP3 ADD DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x1C0 DUP1 PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x4BD9 PUSH2 0x260 DUP6 ADD DUP4 PUSH2 0x4B15 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP6 ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 DUP1 DUP7 DUP6 SUB ADD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x4C15 DUP5 DUP4 PUSH2 0x4B59 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP2 POP PUSH2 0x100 DUP2 DUP8 DUP7 SUB ADD DUP2 DUP9 ADD MSTORE PUSH2 0x4C34 DUP6 DUP5 PUSH2 0x4B59 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP9 ADD MLOAD SWAP3 POP PUSH2 0x120 PUSH2 0x4C54 DUP2 DUP10 ADD DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP10 ADD MLOAD SWAP4 POP PUSH2 0x140 DUP4 DUP10 DUP9 SUB ADD DUP2 DUP11 ADD MSTORE PUSH2 0x4C71 DUP8 DUP7 PUSH2 0x3F35 JUMP JUMPDEST SWAP7 POP PUSH1 0xC0 DUP11 ADD MLOAD SWAP5 POP PUSH2 0x160 SWAP4 POP PUSH2 0x4C8E DUP5 DUP11 ADD DUP7 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP11 ADD MLOAD SWAP5 POP PUSH2 0x180 DUP6 DUP2 DUP12 ADD MSTORE DUP4 DUP12 ADD MLOAD SWAP6 POP PUSH2 0x1A0 SWAP4 POP DUP6 DUP5 DUP12 ADD MSTORE DUP3 DUP12 ADD MLOAD DUP8 DUP12 ADD MSTORE DUP2 DUP12 ADD MLOAD PUSH2 0x1E0 DUP12 ADD MSTORE DUP5 DUP12 ADD MLOAD SWAP7 POP PUSH2 0x4CDB PUSH2 0x200 DUP12 ADD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP11 ADD MLOAD PUSH1 0xFF DUP2 AND PUSH2 0x220 DUP12 ADD MSTORE SWAP6 POP PUSH2 0x4CF2 SWAP2 POP POP JUMP JUMPDEST DUP8 ADD MLOAD DUP1 ISZERO ISZERO PUSH2 0x240 DUP9 ADD MSTORE SWAP3 POP PUSH2 0x4A15 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x4D21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 MLOAD SWAP6 POP PUSH1 0x20 DUP8 ADD MLOAD SWAP5 POP PUSH1 0x40 DUP8 ADD MLOAD SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP3 POP PUSH1 0x80 DUP8 ADD MLOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x4D64 JUMPI PUSH2 0x4D64 PUSH2 0x494E JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x4DCA JUMPI PUSH2 0x4DCA PUSH2 0x494E JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 ADD SWAP1 POP DUP7 DUP3 MSTORE DUP6 PUSH1 0x20 DUP4 ADD MSTORE DUP5 PUSH1 0x40 DUP4 ADD MSTORE DUP4 PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x4E27 PUSH1 0xC0 DUP5 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 DUP2 DUP2 DUP6 ADD MSTORE PUSH1 0xA0 DUP6 ADD MLOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0xC0 DUP6 ADD MLOAD PUSH2 0x140 DUP6 ADD MSTORE PUSH1 0xE0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x4E72 PUSH2 0x160 DUP6 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP5 ADD MLOAD PUSH1 0xFF DUP2 AND PUSH2 0x180 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x46DB JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x4EBE JUMPI PUSH2 0x4EBE PUSH2 0x494E JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x4F05 JUMPI PUSH2 0x4F05 PUSH2 0x494E JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x4F40 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURNDATASIZE 0xAC 0xE2 ADDMOD PUSH11 0xC467024FCE8515BF399ED2 0x2A SWAP16 XOR CODESIZE RETURNDATACOPY 0xBF PUSH2 0xCB7C CHAINID 0xE3 0xED 0xE3 PUSH21 0xD70364736F6C634300080A00330000000000000000 ","sourceMap":"852:625:55:-:0;;;928:1:71;886:43;;891:42:55;;;-1:-1:-1;;;;891:42:55;;;;;1027:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3321:29:94;;;852:625:55;;14:321:201;115:6;168:2;156:9;147:7;143:23;139:32;136:52;;;184:1;181;174:12;136:52;210:16;;-1:-1:-1;;;;;255:31:201;;245:42;;235:70;;301:1;298;291:12;235:70;324:5;14:321;-1:-1:-1;;;14:321:201:o;:::-;852:625:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ADDRESSES_PROVIDER_22244":{"entryPoint":null,"id":22244,"parameterSlots":0,"returnSlots":0},"@BRIDGE_PROTOCOL_FEE_23208":{"entryPoint":null,"id":23208,"parameterSlots":0,"returnSlots":1},"@FLASHLOAN_PREMIUM_TOTAL_23218":{"entryPoint":null,"id":23218,"parameterSlots":0,"returnSlots":1},"@FLASHLOAN_PREMIUM_TO_PROTOCOL_23228":{"entryPoint":null,"id":23228,"parameterSlots":0,"returnSlots":1},"@MAX_NUMBER_RESERVES_7799":{"entryPoint":null,"id":7799,"parameterSlots":0,"returnSlots":1},"@MAX_STABLE_RATE_BORROW_SIZE_PERCENT_23198":{"entryPoint":null,"id":23198,"parameterSlots":0,"returnSlots":1},"@POOL_REVISION_22241":{"entryPoint":null,"id":22241,"parameterSlots":0,"returnSlots":0},"@_onlyBridge_22319":{"entryPoint":13285,"id":22319,"parameterSlots":0,"returnSlots":0},"@_onlyPoolAdmin_22301":{"entryPoint":13656,"id":22301,"parameterSlots":0,"returnSlots":0},"@_onlyPoolConfigurator_22283":{"entryPoint":12878,"id":22283,"parameterSlots":0,"returnSlots":0},"@backUnbacked_22419":{"entryPoint":11799,"id":22419,"parameterSlots":3,"returnSlots":1},"@borrow_22597":{"entryPoint":7692,"id":22597,"parameterSlots":5,"returnSlots":0},"@calculateCompoundedInterest_21079":{"entryPoint":14328,"id":21079,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_21097":{"entryPoint":14159,"id":21097,"parameterSlots":2,"returnSlots":1},"@calculateLinearInterest_20956":{"entryPoint":14259,"id":20956,"parameterSlots":2,"returnSlots":1},"@configureEModeCategory_23507":{"entryPoint":10879,"id":23507,"parameterSlots":2,"returnSlots":0},"@deposit_23635":{"entryPoint":null,"id":23635,"parameterSlots":4,"returnSlots":0},"@dropReserve_7823":{"entryPoint":null,"id":7823,"parameterSlots":1,"returnSlots":0},"@finalizeTransfer_23294":{"entryPoint":11230,"id":23294,"parameterSlots":6,"returnSlots":0},"@flashLoanSimple_22973":{"entryPoint":4919,"id":22973,"parameterSlots":6,"returnSlots":0},"@flashLoan_22932":{"entryPoint":8330,"id":22932,"parameterSlots":11,"returnSlots":0},"@getConfiguration_23061":{"entryPoint":null,"id":23061,"parameterSlots":1,"returnSlots":1},"@getEModeCategoryData_23522":{"entryPoint":6839,"id":23522,"parameterSlots":1,"returnSlots":1},"@getNormalizedDebt_17751":{"entryPoint":13141,"id":17751,"parameterSlots":1,"returnSlots":1},"@getNormalizedIncome_17715":{"entryPoint":14027,"id":17715,"parameterSlots":1,"returnSlots":1},"@getReserveAddressById_23188":{"entryPoint":null,"id":23188,"parameterSlots":1,"returnSlots":1},"@getReserveData_23004":{"entryPoint":null,"id":23004,"parameterSlots":1,"returnSlots":1},"@getReserveNormalizedIncome_23092":{"entryPoint":10582,"id":23092,"parameterSlots":1,"returnSlots":1},"@getReserveNormalizedVariableDebt_23108":{"entryPoint":4880,"id":23108,"parameterSlots":1,"returnSlots":1},"@getReservesList_23175":{"entryPoint":10615,"id":23175,"parameterSlots":0,"returnSlots":1},"@getRevision_7770":{"entryPoint":null,"id":7770,"parameterSlots":0,"returnSlots":1},"@getUserAccountData_23045":{"entryPoint":9273,"id":23045,"parameterSlots":1,"returnSlots":6},"@getUserConfiguration_23076":{"entryPoint":null,"id":23076,"parameterSlots":1,"returnSlots":1},"@getUserEMode_23565":{"entryPoint":null,"id":23565,"parameterSlots":1,"returnSlots":1},"@initReserve_23333":{"entryPoint":7140,"id":23333,"parameterSlots":5,"returnSlots":0},"@initialize_22362":{"entryPoint":9806,"id":22362,"parameterSlots":1,"returnSlots":0},"@isConstructor_10568":{"entryPoint":null,"id":10568,"parameterSlots":0,"returnSlots":1},"@liquidationCall_22861":{"entryPoint":2763,"id":22861,"parameterSlots":5,"returnSlots":0},"@mintToTreasury_22989":{"entryPoint":7607,"id":22989,"parameterSlots":2,"returnSlots":0},"@mintUnbacked_22392":{"entryPoint":6679,"id":22392,"parameterSlots":4,"returnSlots":0},"@rayMul_21186":{"entryPoint":14172,"id":21186,"parameterSlots":2,"returnSlots":1},"@rebalanceStableBorrowRate_22786":{"entryPoint":10298,"id":22786,"parameterSlots":2,"returnSlots":0},"@repayWithATokens_22739":{"entryPoint":4582,"id":22739,"parameterSlots":3,"returnSlots":1},"@repayWithPermit_22703":{"entryPoint":12050,"id":22703,"parameterSlots":8,"returnSlots":1},"@repay_22633":{"entryPoint":5258,"id":22633,"parameterSlots":4,"returnSlots":1},"@rescueTokens_23604":{"entryPoint":10422,"id":23604,"parameterSlots":3,"returnSlots":0},"@resetIsolationModeTotalDebt_23582":{"entryPoint":11946,"id":23582,"parameterSlots":1,"returnSlots":0},"@setConfiguration_23446":{"entryPoint":12486,"id":23446,"parameterSlots":2,"returnSlots":0},"@setMaxNumberOfReserves_7790":{"entryPoint":null,"id":7790,"parameterSlots":1,"returnSlots":0},"@setReserveInterestRateStrategyAddress_23398":{"entryPoint":3726,"id":23398,"parameterSlots":2,"returnSlots":0},"@setUserEMode_23551":{"entryPoint":4168,"id":23551,"parameterSlots":1,"returnSlots":0},"@setUserUseReserveAsCollateral_22818":{"entryPoint":5551,"id":22818,"parameterSlots":2,"returnSlots":0},"@supplyWithPermit_22506":{"entryPoint":3320,"id":22506,"parameterSlots":8,"returnSlots":0},"@supply_22450":{"entryPoint":5968,"id":22450,"parameterSlots":4,"returnSlots":0},"@swapBorrowRateMode_22766":{"entryPoint":7491,"id":22766,"parameterSlots":2,"returnSlots":0},"@updateBridgeProtocolFee_23460":{"entryPoint":4867,"id":23460,"parameterSlots":1,"returnSlots":0},"@updateFlashloanPremiums_23480":{"entryPoint":9218,"id":23480,"parameterSlots":2,"returnSlots":0},"@withdraw_22545":{"entryPoint":6214,"id":22545,"parameterSlots":3,"returnSlots":1},"abi_decode_address":{"entryPoint":14829,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_address_dyn_calldata":{"entryPoint":16517,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes_calldata":{"entryPoint":15684,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":15287,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":17935,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":15125,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_addresst_addresst_address":{"entryPoint":16374,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_bool":{"entryPoint":14859,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_uint256t_uint256":{"entryPoint":17669,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":17048,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_bytes_calldata_ptrt_uint16":{"entryPoint":15757,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_addresst_bytes_calldata_ptrt_uint16":{"entryPoint":16715,"id":null,"parameterSlots":2,"returnSlots":11},"abi_decode_tuple_t_addresst_bool":{"entryPoint":15988,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_struct$_ReserveConfigurationMap_$21318_calldata_ptr":{"entryPoint":17840,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":16473,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256t_address":{"entryPoint":16115,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256t_addresst_uint16":{"entryPoint":16034,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_uint256t_addresst_uint16t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":14998,"id":null,"parameterSlots":2,"returnSlots":8},"abi_decode_tuple_t_addresst_uint256t_uint256":{"entryPoint":15209,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256t_uint256t_address":{"entryPoint":15914,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":17770,"id":null,"parameterSlots":2,"returnSlots":8},"abi_decode_tuple_t_addresst_uint256t_uint256t_uint16t_address":{"entryPoint":16652,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr":{"entryPoint":16586,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":18737,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint128t_uint128":{"entryPoint":16997,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint16":{"entryPoint":15887,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":15262,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":18377,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory":{"entryPoint":19720,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_uint8":{"entryPoint":15182,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint8t_struct$_EModeCategory_$21333_memory_ptr":{"entryPoint":17357,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_uint128":{"entryPoint":16965,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint16":{"entryPoint":14963,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint8":{"entryPoint":14981,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_array_address_dyn":{"entryPoint":19221,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":19289,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_enum_InterestRateMode":{"entryPoint":18216,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_string":{"entryPoint":16181,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_ReserveConfigurationMap":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":17113,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_address__to_t_uint256_t_address__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_array$_t_address_$dyn_calldata_ptr__to_t_uint256_t_array$_t_address_$dyn_memory_ptr__fromStack_library_reversed":{"entryPoint":18889,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr__fromStack_library_reversed":{"entryPoint":17964,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$_t_struct$_FinalizeTransferParams_$21484_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FinalizeTransferParams_$21484_memory_ptr__fromStack_library_reversed":{"entryPoint":19921,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_mapping$_t_address_$_t_uint8_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_t_address_t_bool_t_uint16_t_address_t_uint8__to_t_uint256_t_uint256_t_uint256_t_uint256_t_address_t_bool_t_uint256_t_address_t_uint8__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":10,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteBorrowParams_$21433_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteBorrowParams_$21433_memory_ptr__fromStack_library_reversed":{"entryPoint":18977,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteWithdrawParams_$21458_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteWithdrawParams_$21458_memory_ptr__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_FlashloanParams_$21516_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FlashloanParams_$21516_memory_ptr__fromStack_library_reversed":{"entryPoint":19337,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_InitReserveParams_$21632_memory_ptr__to_t_uint256_t_uint256_t_struct$_InitReserveParams_$21632_memory_ptr__fromStack_library_reversed":{"entryPoint":18606,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_t_address_t_uint256_t_address_t_uint16__to_t_uint256_t_uint256_t_uint256_t_address_t_uint256_t_address_t_uint16__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteRepayParams_$21445_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteRepayParams_$21445_memory_ptr__fromStack_library_reversed":{"entryPoint":18275,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteSupplyParams_$21407_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSupplyParams_$21407_memory_ptr__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":18150,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_EModeCategory_$21333_memory_ptr__to_t_struct$_EModeCategory_$21333_memory_ptr__fromStack_reversed":{"entryPoint":16288,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveConfigurationMap_$21318_memory_ptr__to_t_struct$_ReserveConfigurationMap_$21318_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$21315_memory_ptr__to_t_struct$_ReserveData_$21315_memory_ptr__fromStack_reversed":{"entryPoint":15316,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$21315_storage_t_address_t_address__to_t_uint256_t_address_t_address__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$21315_storage_t_address_t_uint256_t_uint256_t_uint256__to_t_uint256_t_address_t_uint256_t_uint256_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$21315_storage_t_struct$_FlashloanSimpleParams_$21531_memory_ptr__to_t_uint256_t_struct$_FlashloanSimpleParams_$21531_memory_ptr__fromStack_library_reversed":{"entryPoint":18402,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$21315_storage_t_struct$_UserConfigurationMap_$21322_storage_t_address_t_enum$_InterestRateMode_$21337__to_t_uint256_t_uint256_t_address_t_uint8__fromStack_library_reversed":{"entryPoint":18847,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_struct$_UserConfigurationMap_$21322_memory_ptr__to_t_struct$_UserConfigurationMap_$21322_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_uint128":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint16":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint40":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint8":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"allocate_memory":{"entryPoint":17278,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_5567":{"entryPoint":17237,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":20210,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":20234,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":20102,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":19794,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":18528,"id":null,"parameterSlots":1,"returnSlots":1},"increment_t_uint16":{"entryPoint":18813,"id":null,"parameterSlots":1,"returnSlots":1},"increment_t_uint256":{"entryPoint":19864,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":18766,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":20163,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":18169,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":19817,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":17190,"id":null,"parameterSlots":0,"returnSlots":0},"update_storage_value_offset_0t_struct$_ReserveConfigurationMap_$21318_calldata_ptr_to_t_struct$_ReserveConfigurationMap_$21318_storage":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"validator_revert_address":{"entryPoint":14808,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_bool":{"entryPoint":14845,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:49822:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"59:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"146:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"155:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"158:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"148:6:201"},"nodeType":"YulFunctionCall","src":"148:12:201"},"nodeType":"YulExpressionStatement","src":"148:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"82:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"93:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"100:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"89:3:201"},"nodeType":"YulFunctionCall","src":"89:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"79:2:201"},"nodeType":"YulFunctionCall","src":"79:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"72:6:201"},"nodeType":"YulFunctionCall","src":"72:73:201"},"nodeType":"YulIf","src":"69:93:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"48:5:201","type":""}],"src":"14:154:201"},{"body":{"nodeType":"YulBlock","src":"222:85:201","statements":[{"nodeType":"YulAssignment","src":"232:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"254:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"241:12:201"},"nodeType":"YulFunctionCall","src":"241:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"232:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"295:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"270:24:201"},"nodeType":"YulFunctionCall","src":"270:31:201"},"nodeType":"YulExpressionStatement","src":"270:31:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"201:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"212:5:201","type":""}],"src":"173:134:201"},{"body":{"nodeType":"YulBlock","src":"354:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"408:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"417:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"420:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"410:6:201"},"nodeType":"YulFunctionCall","src":"410:12:201"},"nodeType":"YulExpressionStatement","src":"410:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"377:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"398:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"391:6:201"},"nodeType":"YulFunctionCall","src":"391:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"384:6:201"},"nodeType":"YulFunctionCall","src":"384:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"374:2:201"},"nodeType":"YulFunctionCall","src":"374:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"367:6:201"},"nodeType":"YulFunctionCall","src":"367:40:201"},"nodeType":"YulIf","src":"364:60:201"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"343:5:201","type":""}],"src":"312:118:201"},{"body":{"nodeType":"YulBlock","src":"570:599:201","statements":[{"body":{"nodeType":"YulBlock","src":"617:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"626:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"629:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"619:6:201"},"nodeType":"YulFunctionCall","src":"619:12:201"},"nodeType":"YulExpressionStatement","src":"619:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"591:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"600:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"587:3:201"},"nodeType":"YulFunctionCall","src":"587:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"612:3:201","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"583:3:201"},"nodeType":"YulFunctionCall","src":"583:33:201"},"nodeType":"YulIf","src":"580:53:201"},{"nodeType":"YulVariableDeclaration","src":"642:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"668:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"655:12:201"},"nodeType":"YulFunctionCall","src":"655:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"646:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"712:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"687:24:201"},"nodeType":"YulFunctionCall","src":"687:31:201"},"nodeType":"YulExpressionStatement","src":"687:31:201"},{"nodeType":"YulAssignment","src":"727:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"737:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"727:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"751:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"783:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"794:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"779:3:201"},"nodeType":"YulFunctionCall","src":"779:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"766:12:201"},"nodeType":"YulFunctionCall","src":"766:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"755:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"832:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"807:24:201"},"nodeType":"YulFunctionCall","src":"807:33:201"},"nodeType":"YulExpressionStatement","src":"807:33:201"},{"nodeType":"YulAssignment","src":"849:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"859:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"849:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"875:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"907:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"918:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"903:3:201"},"nodeType":"YulFunctionCall","src":"903:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"890:12:201"},"nodeType":"YulFunctionCall","src":"890:32:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"879:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"956:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"931:24:201"},"nodeType":"YulFunctionCall","src":"931:33:201"},"nodeType":"YulExpressionStatement","src":"931:33:201"},{"nodeType":"YulAssignment","src":"973:17:201","value":{"name":"value_2","nodeType":"YulIdentifier","src":"983:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"973:6:201"}]},{"nodeType":"YulAssignment","src":"999:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1026:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1037:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1022:3:201"},"nodeType":"YulFunctionCall","src":"1022:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1009:12:201"},"nodeType":"YulFunctionCall","src":"1009:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"999:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1050:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1082:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1093:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1078:3:201"},"nodeType":"YulFunctionCall","src":"1078:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1065:12:201"},"nodeType":"YulFunctionCall","src":"1065:33:201"},"variables":[{"name":"value_3","nodeType":"YulTypedName","src":"1054:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_3","nodeType":"YulIdentifier","src":"1129:7:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"1107:21:201"},"nodeType":"YulFunctionCall","src":"1107:30:201"},"nodeType":"YulExpressionStatement","src":"1107:30:201"},{"nodeType":"YulAssignment","src":"1146:17:201","value":{"name":"value_3","nodeType":"YulIdentifier","src":"1156:7:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"1146:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"504:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"515:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"527:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"535:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"543:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"551:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"559:6:201","type":""}],"src":"435:734:201"},{"body":{"nodeType":"YulBlock","src":"1275:76:201","statements":[{"nodeType":"YulAssignment","src":"1285:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1297:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1308:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1293:3:201"},"nodeType":"YulFunctionCall","src":"1293:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1285:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1327:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"1338:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1320:6:201"},"nodeType":"YulFunctionCall","src":"1320:25:201"},"nodeType":"YulExpressionStatement","src":"1320:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1244:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1255:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1266:4:201","type":""}],"src":"1174:177:201"},{"body":{"nodeType":"YulBlock","src":"1404:111:201","statements":[{"nodeType":"YulAssignment","src":"1414:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1436:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1423:12:201"},"nodeType":"YulFunctionCall","src":"1423:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1414:5:201"}]},{"body":{"nodeType":"YulBlock","src":"1493:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1502:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1505:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1495:6:201"},"nodeType":"YulFunctionCall","src":"1495:12:201"},"nodeType":"YulExpressionStatement","src":"1495:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1465:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1476:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1483:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1472:3:201"},"nodeType":"YulFunctionCall","src":"1472:18:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1462:2:201"},"nodeType":"YulFunctionCall","src":"1462:29:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1455:6:201"},"nodeType":"YulFunctionCall","src":"1455:37:201"},"nodeType":"YulIf","src":"1452:57:201"}]},"name":"abi_decode_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1383:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1394:5:201","type":""}],"src":"1356:159:201"},{"body":{"nodeType":"YulBlock","src":"1567:109:201","statements":[{"nodeType":"YulAssignment","src":"1577:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1599:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1586:12:201"},"nodeType":"YulFunctionCall","src":"1586:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1577:5:201"}]},{"body":{"nodeType":"YulBlock","src":"1654:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1663:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1666:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1656:6:201"},"nodeType":"YulFunctionCall","src":"1656:12:201"},"nodeType":"YulExpressionStatement","src":"1656:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1628:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1639:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1646:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1635:3:201"},"nodeType":"YulFunctionCall","src":"1635:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1625:2:201"},"nodeType":"YulFunctionCall","src":"1625:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1618:6:201"},"nodeType":"YulFunctionCall","src":"1618:35:201"},"nodeType":"YulIf","src":"1615:55:201"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1546:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1557:5:201","type":""}],"src":"1520:156:201"},{"body":{"nodeType":"YulBlock","src":"1867:621:201","statements":[{"body":{"nodeType":"YulBlock","src":"1914:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1923:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1926:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1916:6:201"},"nodeType":"YulFunctionCall","src":"1916:12:201"},"nodeType":"YulExpressionStatement","src":"1916:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1888:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1897:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1884:3:201"},"nodeType":"YulFunctionCall","src":"1884:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1909:3:201","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1880:3:201"},"nodeType":"YulFunctionCall","src":"1880:33:201"},"nodeType":"YulIf","src":"1877:53:201"},{"nodeType":"YulVariableDeclaration","src":"1939:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1965:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1952:12:201"},"nodeType":"YulFunctionCall","src":"1952:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1943:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2009:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1984:24:201"},"nodeType":"YulFunctionCall","src":"1984:31:201"},"nodeType":"YulExpressionStatement","src":"1984:31:201"},{"nodeType":"YulAssignment","src":"2024:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"2034:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2024:6:201"}]},{"nodeType":"YulAssignment","src":"2048:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2075:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2086:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2071:3:201"},"nodeType":"YulFunctionCall","src":"2071:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2058:12:201"},"nodeType":"YulFunctionCall","src":"2058:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2048:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2099:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2131:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2142:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2127:3:201"},"nodeType":"YulFunctionCall","src":"2127:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2114:12:201"},"nodeType":"YulFunctionCall","src":"2114:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2103:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2180:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2155:24:201"},"nodeType":"YulFunctionCall","src":"2155:33:201"},"nodeType":"YulExpressionStatement","src":"2155:33:201"},{"nodeType":"YulAssignment","src":"2197:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"2207:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2197:6:201"}]},{"nodeType":"YulAssignment","src":"2223:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2255:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2266:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2251:3:201"},"nodeType":"YulFunctionCall","src":"2251:18:201"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"2233:17:201"},"nodeType":"YulFunctionCall","src":"2233:37:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2223:6:201"}]},{"nodeType":"YulAssignment","src":"2279:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2306:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2317:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2302:3:201"},"nodeType":"YulFunctionCall","src":"2302:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2289:12:201"},"nodeType":"YulFunctionCall","src":"2289:33:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"2279:6:201"}]},{"nodeType":"YulAssignment","src":"2331:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2362:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2373:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2358:3:201"},"nodeType":"YulFunctionCall","src":"2358:19:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"2341:16:201"},"nodeType":"YulFunctionCall","src":"2341:37:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"2331:6:201"}]},{"nodeType":"YulAssignment","src":"2387:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2414:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2425:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2410:3:201"},"nodeType":"YulFunctionCall","src":"2410:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2397:12:201"},"nodeType":"YulFunctionCall","src":"2397:33:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"2387:6:201"}]},{"nodeType":"YulAssignment","src":"2439:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2466:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2477:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2462:3:201"},"nodeType":"YulFunctionCall","src":"2462:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2449:12:201"},"nodeType":"YulFunctionCall","src":"2449:33:201"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"2439:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_addresst_uint16t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1777:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1788:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1800:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1808:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1816:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1824:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1832:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"1840:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"1848:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"1856:6:201","type":""}],"src":"1681:807:201"},{"body":{"nodeType":"YulBlock","src":"2625:125:201","statements":[{"nodeType":"YulAssignment","src":"2635:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2647:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2658:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2643:3:201"},"nodeType":"YulFunctionCall","src":"2643:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2635:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2677:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2692:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2700:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2688:3:201"},"nodeType":"YulFunctionCall","src":"2688:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2670:6:201"},"nodeType":"YulFunctionCall","src":"2670:74:201"},"nodeType":"YulExpressionStatement","src":"2670:74:201"}]},"name":"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2594:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2605:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2616:4:201","type":""}],"src":"2493:257:201"},{"body":{"nodeType":"YulBlock","src":"2799:75:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2816:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2825:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2832:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2821:3:201"},"nodeType":"YulFunctionCall","src":"2821:46:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2809:6:201"},"nodeType":"YulFunctionCall","src":"2809:59:201"},"nodeType":"YulExpressionStatement","src":"2809:59:201"}]},"name":"abi_encode_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"2783:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"2790:3:201","type":""}],"src":"2755:119:201"},{"body":{"nodeType":"YulBlock","src":"2980:117:201","statements":[{"nodeType":"YulAssignment","src":"2990:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3002:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3013:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2998:3:201"},"nodeType":"YulFunctionCall","src":"2998:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2990:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3032:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3047:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3055:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3043:3:201"},"nodeType":"YulFunctionCall","src":"3043:47:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3025:6:201"},"nodeType":"YulFunctionCall","src":"3025:66:201"},"nodeType":"YulExpressionStatement","src":"3025:66:201"}]},"name":"abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2949:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2960:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2971:4:201","type":""}],"src":"2879:218:201"},{"body":{"nodeType":"YulBlock","src":"3189:301:201","statements":[{"body":{"nodeType":"YulBlock","src":"3235:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3244:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3247:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3237:6:201"},"nodeType":"YulFunctionCall","src":"3237:12:201"},"nodeType":"YulExpressionStatement","src":"3237:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3210:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3219:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3206:3:201"},"nodeType":"YulFunctionCall","src":"3206:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3231:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3202:3:201"},"nodeType":"YulFunctionCall","src":"3202:32:201"},"nodeType":"YulIf","src":"3199:52:201"},{"nodeType":"YulVariableDeclaration","src":"3260:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3286:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3273:12:201"},"nodeType":"YulFunctionCall","src":"3273:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3264:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3330:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3305:24:201"},"nodeType":"YulFunctionCall","src":"3305:31:201"},"nodeType":"YulExpressionStatement","src":"3305:31:201"},{"nodeType":"YulAssignment","src":"3345:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3355:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3345:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3369:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3401:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3412:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3397:3:201"},"nodeType":"YulFunctionCall","src":"3397:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3384:12:201"},"nodeType":"YulFunctionCall","src":"3384:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"3373:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3450:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3425:24:201"},"nodeType":"YulFunctionCall","src":"3425:33:201"},"nodeType":"YulExpressionStatement","src":"3425:33:201"},{"nodeType":"YulAssignment","src":"3467:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3477:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3467:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3147:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3158:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3170:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3178:6:201","type":""}],"src":"3102:388:201"},{"body":{"nodeType":"YulBlock","src":"3563:114:201","statements":[{"body":{"nodeType":"YulBlock","src":"3609:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3618:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3621:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3611:6:201"},"nodeType":"YulFunctionCall","src":"3611:12:201"},"nodeType":"YulExpressionStatement","src":"3611:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3584:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3593:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3580:3:201"},"nodeType":"YulFunctionCall","src":"3580:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3605:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3576:3:201"},"nodeType":"YulFunctionCall","src":"3576:32:201"},"nodeType":"YulIf","src":"3573:52:201"},{"nodeType":"YulAssignment","src":"3634:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3661:9:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"3644:16:201"},"nodeType":"YulFunctionCall","src":"3644:27:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3634:6:201"}]}]},"name":"abi_decode_tuple_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3529:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3540:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3552:6:201","type":""}],"src":"3495:182:201"},{"body":{"nodeType":"YulBlock","src":"3786:279:201","statements":[{"body":{"nodeType":"YulBlock","src":"3832:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3841:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3844:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3834:6:201"},"nodeType":"YulFunctionCall","src":"3834:12:201"},"nodeType":"YulExpressionStatement","src":"3834:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3807:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3816:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3803:3:201"},"nodeType":"YulFunctionCall","src":"3803:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3828:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3799:3:201"},"nodeType":"YulFunctionCall","src":"3799:32:201"},"nodeType":"YulIf","src":"3796:52:201"},{"nodeType":"YulVariableDeclaration","src":"3857:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3883:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3870:12:201"},"nodeType":"YulFunctionCall","src":"3870:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3861:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3927:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3902:24:201"},"nodeType":"YulFunctionCall","src":"3902:31:201"},"nodeType":"YulExpressionStatement","src":"3902:31:201"},{"nodeType":"YulAssignment","src":"3942:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3952:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3942:6:201"}]},{"nodeType":"YulAssignment","src":"3966:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3993:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4004:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3989:3:201"},"nodeType":"YulFunctionCall","src":"3989:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3976:12:201"},"nodeType":"YulFunctionCall","src":"3976:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3966:6:201"}]},{"nodeType":"YulAssignment","src":"4017:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4044:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4055:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4040:3:201"},"nodeType":"YulFunctionCall","src":"4040:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4027:12:201"},"nodeType":"YulFunctionCall","src":"4027:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4017:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3736:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3747:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3759:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3767:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3775:6:201","type":""}],"src":"3682:383:201"},{"body":{"nodeType":"YulBlock","src":"4140:110:201","statements":[{"body":{"nodeType":"YulBlock","src":"4186:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4195:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4198:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4188:6:201"},"nodeType":"YulFunctionCall","src":"4188:12:201"},"nodeType":"YulExpressionStatement","src":"4188:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4161:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4170:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4157:3:201"},"nodeType":"YulFunctionCall","src":"4157:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4182:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4153:3:201"},"nodeType":"YulFunctionCall","src":"4153:32:201"},"nodeType":"YulIf","src":"4150:52:201"},{"nodeType":"YulAssignment","src":"4211:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4234:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4221:12:201"},"nodeType":"YulFunctionCall","src":"4221:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4211:6:201"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4106:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4117:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4129:6:201","type":""}],"src":"4070:180:201"},{"body":{"nodeType":"YulBlock","src":"4325:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"4371:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4380:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4383:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4373:6:201"},"nodeType":"YulFunctionCall","src":"4373:12:201"},"nodeType":"YulExpressionStatement","src":"4373:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4346:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4355:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4342:3:201"},"nodeType":"YulFunctionCall","src":"4342:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4367:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4338:3:201"},"nodeType":"YulFunctionCall","src":"4338:32:201"},"nodeType":"YulIf","src":"4335:52:201"},{"nodeType":"YulVariableDeclaration","src":"4396:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4422:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4409:12:201"},"nodeType":"YulFunctionCall","src":"4409:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4400:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4466:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4441:24:201"},"nodeType":"YulFunctionCall","src":"4441:31:201"},"nodeType":"YulExpressionStatement","src":"4441:31:201"},{"nodeType":"YulAssignment","src":"4481:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"4491:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4481:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4291:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4302:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4314:6:201","type":""}],"src":"4255:247:201"},{"body":{"nodeType":"YulBlock","src":"4574:29:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4583:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4594:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4588:5:201"},"nodeType":"YulFunctionCall","src":"4588:12:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4576:6:201"},"nodeType":"YulFunctionCall","src":"4576:25:201"},"nodeType":"YulExpressionStatement","src":"4576:25:201"}]},"name":"abi_encode_struct_ReserveConfigurationMap","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4558:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4565:3:201","type":""}],"src":"4507:96:201"},{"body":{"nodeType":"YulBlock","src":"4651:53:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4668:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4677:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"4684:12:201","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4673:3:201"},"nodeType":"YulFunctionCall","src":"4673:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4661:6:201"},"nodeType":"YulFunctionCall","src":"4661:37:201"},"nodeType":"YulExpressionStatement","src":"4661:37:201"}]},"name":"abi_encode_uint40","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4635:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4642:3:201","type":""}],"src":"4608:96:201"},{"body":{"nodeType":"YulBlock","src":"4752:47:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4769:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4778:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"4785:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4774:3:201"},"nodeType":"YulFunctionCall","src":"4774:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4762:6:201"},"nodeType":"YulFunctionCall","src":"4762:31:201"},"nodeType":"YulExpressionStatement","src":"4762:31:201"}]},"name":"abi_encode_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4736:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4743:3:201","type":""}],"src":"4709:90:201"},{"body":{"nodeType":"YulBlock","src":"4848:83:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4865:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4874:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"4881:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4870:3:201"},"nodeType":"YulFunctionCall","src":"4870:54:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4858:6:201"},"nodeType":"YulFunctionCall","src":"4858:67:201"},"nodeType":"YulExpressionStatement","src":"4858:67:201"}]},"name":"abi_encode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4832:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4839:3:201","type":""}],"src":"4804:127:201"},{"body":{"nodeType":"YulBlock","src":"5097:1948:201","statements":[{"nodeType":"YulAssignment","src":"5107:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5119:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5130:3:201","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5115:3:201"},"nodeType":"YulFunctionCall","src":"5115:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5107:4:201"}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5191:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5185:5:201"},"nodeType":"YulFunctionCall","src":"5185:13:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"5200:9:201"}],"functionName":{"name":"abi_encode_struct_ReserveConfigurationMap","nodeType":"YulIdentifier","src":"5143:41:201"},"nodeType":"YulFunctionCall","src":"5143:67:201"},"nodeType":"YulExpressionStatement","src":"5143:67:201"},{"nodeType":"YulVariableDeclaration","src":"5219:44:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5249:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5257:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5245:3:201"},"nodeType":"YulFunctionCall","src":"5245:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5239:5:201"},"nodeType":"YulFunctionCall","src":"5239:24:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"5223:12:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"5291:12:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5309:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5320:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5305:3:201"},"nodeType":"YulFunctionCall","src":"5305:20:201"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5272:18:201"},"nodeType":"YulFunctionCall","src":"5272:54:201"},"nodeType":"YulExpressionStatement","src":"5272:54:201"},{"nodeType":"YulVariableDeclaration","src":"5335:46:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5367:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5375:4:201","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5363:3:201"},"nodeType":"YulFunctionCall","src":"5363:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5357:5:201"},"nodeType":"YulFunctionCall","src":"5357:24:201"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"5339:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"5409:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5429:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5440:4:201","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5425:3:201"},"nodeType":"YulFunctionCall","src":"5425:20:201"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5390:18:201"},"nodeType":"YulFunctionCall","src":"5390:56:201"},"nodeType":"YulExpressionStatement","src":"5390:56:201"},{"nodeType":"YulVariableDeclaration","src":"5455:46:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5487:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5495:4:201","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5483:3:201"},"nodeType":"YulFunctionCall","src":"5483:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5477:5:201"},"nodeType":"YulFunctionCall","src":"5477:24:201"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"5459:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"5529:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5549:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5560:4:201","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5545:3:201"},"nodeType":"YulFunctionCall","src":"5545:20:201"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5510:18:201"},"nodeType":"YulFunctionCall","src":"5510:56:201"},"nodeType":"YulExpressionStatement","src":"5510:56:201"},{"nodeType":"YulVariableDeclaration","src":"5575:46:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5607:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5615:4:201","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5603:3:201"},"nodeType":"YulFunctionCall","src":"5603:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5597:5:201"},"nodeType":"YulFunctionCall","src":"5597:24:201"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"5579:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"5649:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5669:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5680:4:201","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5665:3:201"},"nodeType":"YulFunctionCall","src":"5665:20:201"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5630:18:201"},"nodeType":"YulFunctionCall","src":"5630:56:201"},"nodeType":"YulExpressionStatement","src":"5630:56:201"},{"nodeType":"YulVariableDeclaration","src":"5695:46:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5727:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5735:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5723:3:201"},"nodeType":"YulFunctionCall","src":"5723:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5717:5:201"},"nodeType":"YulFunctionCall","src":"5717:24:201"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"5699:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"5769:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5789:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5800:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5785:3:201"},"nodeType":"YulFunctionCall","src":"5785:20:201"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5750:18:201"},"nodeType":"YulFunctionCall","src":"5750:56:201"},"nodeType":"YulExpressionStatement","src":"5750:56:201"},{"nodeType":"YulVariableDeclaration","src":"5815:46:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5847:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5855:4:201","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5843:3:201"},"nodeType":"YulFunctionCall","src":"5843:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5837:5:201"},"nodeType":"YulFunctionCall","src":"5837:24:201"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"5819:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"5888:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5908:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5919:4:201","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5904:3:201"},"nodeType":"YulFunctionCall","src":"5904:20:201"}],"functionName":{"name":"abi_encode_uint40","nodeType":"YulIdentifier","src":"5870:17:201"},"nodeType":"YulFunctionCall","src":"5870:55:201"},"nodeType":"YulExpressionStatement","src":"5870:55:201"},{"nodeType":"YulVariableDeclaration","src":"5934:46:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5966:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5974:4:201","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5962:3:201"},"nodeType":"YulFunctionCall","src":"5962:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5956:5:201"},"nodeType":"YulFunctionCall","src":"5956:24:201"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"5938:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"6007:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6027:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6038:4:201","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6023:3:201"},"nodeType":"YulFunctionCall","src":"6023:20:201"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"5989:17:201"},"nodeType":"YulFunctionCall","src":"5989:55:201"},"nodeType":"YulExpressionStatement","src":"5989:55:201"},{"nodeType":"YulVariableDeclaration","src":"6053:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6063:6:201","type":"","value":"0x0100"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6057:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6078:44:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6110:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6118:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6106:3:201"},"nodeType":"YulFunctionCall","src":"6106:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6100:5:201"},"nodeType":"YulFunctionCall","src":"6100:22:201"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"6082:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"6150:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6170:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6181:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6166:3:201"},"nodeType":"YulFunctionCall","src":"6166:18:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6131:18:201"},"nodeType":"YulFunctionCall","src":"6131:54:201"},"nodeType":"YulExpressionStatement","src":"6131:54:201"},{"nodeType":"YulVariableDeclaration","src":"6194:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6204:6:201","type":"","value":"0x0120"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"6198:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6219:44:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6251:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"6259:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6247:3:201"},"nodeType":"YulFunctionCall","src":"6247:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6241:5:201"},"nodeType":"YulFunctionCall","src":"6241:22:201"},"variables":[{"name":"memberValue0_8","nodeType":"YulTypedName","src":"6223:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_8","nodeType":"YulIdentifier","src":"6291:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6311:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"6322:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6307:3:201"},"nodeType":"YulFunctionCall","src":"6307:18:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6272:18:201"},"nodeType":"YulFunctionCall","src":"6272:54:201"},"nodeType":"YulExpressionStatement","src":"6272:54:201"},{"nodeType":"YulVariableDeclaration","src":"6335:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6345:6:201","type":"","value":"0x0140"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"6339:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6360:44:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6392:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"6400:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6388:3:201"},"nodeType":"YulFunctionCall","src":"6388:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6382:5:201"},"nodeType":"YulFunctionCall","src":"6382:22:201"},"variables":[{"name":"memberValue0_9","nodeType":"YulTypedName","src":"6364:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_9","nodeType":"YulIdentifier","src":"6432:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6452:9:201"},{"name":"_3","nodeType":"YulIdentifier","src":"6463:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6448:3:201"},"nodeType":"YulFunctionCall","src":"6448:18:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6413:18:201"},"nodeType":"YulFunctionCall","src":"6413:54:201"},"nodeType":"YulExpressionStatement","src":"6413:54:201"},{"nodeType":"YulVariableDeclaration","src":"6476:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6486:6:201","type":"","value":"0x0160"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"6480:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6501:45:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6534:6:201"},{"name":"_4","nodeType":"YulIdentifier","src":"6542:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6530:3:201"},"nodeType":"YulFunctionCall","src":"6530:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6524:5:201"},"nodeType":"YulFunctionCall","src":"6524:22:201"},"variables":[{"name":"memberValue0_10","nodeType":"YulTypedName","src":"6505:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_10","nodeType":"YulIdentifier","src":"6574:15:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6595:9:201"},{"name":"_4","nodeType":"YulIdentifier","src":"6606:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6591:3:201"},"nodeType":"YulFunctionCall","src":"6591:18:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6555:18:201"},"nodeType":"YulFunctionCall","src":"6555:55:201"},"nodeType":"YulExpressionStatement","src":"6555:55:201"},{"nodeType":"YulVariableDeclaration","src":"6619:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6629:6:201","type":"","value":"0x0180"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"6623:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6644:45:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6677:6:201"},{"name":"_5","nodeType":"YulIdentifier","src":"6685:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6673:3:201"},"nodeType":"YulFunctionCall","src":"6673:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6667:5:201"},"nodeType":"YulFunctionCall","src":"6667:22:201"},"variables":[{"name":"memberValue0_11","nodeType":"YulTypedName","src":"6648:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_11","nodeType":"YulIdentifier","src":"6717:15:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6738:9:201"},{"name":"_5","nodeType":"YulIdentifier","src":"6749:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6734:3:201"},"nodeType":"YulFunctionCall","src":"6734:18:201"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"6698:18:201"},"nodeType":"YulFunctionCall","src":"6698:55:201"},"nodeType":"YulExpressionStatement","src":"6698:55:201"},{"nodeType":"YulVariableDeclaration","src":"6762:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6772:6:201","type":"","value":"0x01a0"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"6766:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6787:45:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6820:6:201"},{"name":"_6","nodeType":"YulIdentifier","src":"6828:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6816:3:201"},"nodeType":"YulFunctionCall","src":"6816:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6810:5:201"},"nodeType":"YulFunctionCall","src":"6810:22:201"},"variables":[{"name":"memberValue0_12","nodeType":"YulTypedName","src":"6791:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_12","nodeType":"YulIdentifier","src":"6860:15:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6881:9:201"},{"name":"_6","nodeType":"YulIdentifier","src":"6892:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6877:3:201"},"nodeType":"YulFunctionCall","src":"6877:18:201"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"6841:18:201"},"nodeType":"YulFunctionCall","src":"6841:55:201"},"nodeType":"YulExpressionStatement","src":"6841:55:201"},{"nodeType":"YulVariableDeclaration","src":"6905:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6915:6:201","type":"","value":"0x01c0"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"6909:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6930:45:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6963:6:201"},{"name":"_7","nodeType":"YulIdentifier","src":"6971:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6959:3:201"},"nodeType":"YulFunctionCall","src":"6959:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6953:5:201"},"nodeType":"YulFunctionCall","src":"6953:22:201"},"variables":[{"name":"memberValue0_13","nodeType":"YulTypedName","src":"6934:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_13","nodeType":"YulIdentifier","src":"7003:15:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7024:9:201"},{"name":"_7","nodeType":"YulIdentifier","src":"7035:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7020:3:201"},"nodeType":"YulFunctionCall","src":"7020:18:201"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"6984:18:201"},"nodeType":"YulFunctionCall","src":"6984:55:201"},"nodeType":"YulExpressionStatement","src":"6984:55:201"}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$21315_memory_ptr__to_t_struct$_ReserveData_$21315_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5066:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5077:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5088:4:201","type":""}],"src":"4936:2109:201"},{"body":{"nodeType":"YulBlock","src":"7122:275:201","statements":[{"body":{"nodeType":"YulBlock","src":"7171:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7180:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7183:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7173:6:201"},"nodeType":"YulFunctionCall","src":"7173:12:201"},"nodeType":"YulExpressionStatement","src":"7173:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7150:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7158:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7146:3:201"},"nodeType":"YulFunctionCall","src":"7146:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"7165:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7142:3:201"},"nodeType":"YulFunctionCall","src":"7142:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7135:6:201"},"nodeType":"YulFunctionCall","src":"7135:35:201"},"nodeType":"YulIf","src":"7132:55:201"},{"nodeType":"YulAssignment","src":"7196:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7219:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7206:12:201"},"nodeType":"YulFunctionCall","src":"7206:20:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"7196:6:201"}]},{"body":{"nodeType":"YulBlock","src":"7269:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7278:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7281:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7271:6:201"},"nodeType":"YulFunctionCall","src":"7271:12:201"},"nodeType":"YulExpressionStatement","src":"7271:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"7241:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7249:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7238:2:201"},"nodeType":"YulFunctionCall","src":"7238:30:201"},"nodeType":"YulIf","src":"7235:50:201"},{"nodeType":"YulAssignment","src":"7294:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7310:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7318:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7306:3:201"},"nodeType":"YulFunctionCall","src":"7306:17:201"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"7294:8:201"}]},{"body":{"nodeType":"YulBlock","src":"7375:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7384:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7387:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7377:6:201"},"nodeType":"YulFunctionCall","src":"7377:12:201"},"nodeType":"YulExpressionStatement","src":"7377:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7346:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"7354:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7342:3:201"},"nodeType":"YulFunctionCall","src":"7342:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"7363:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7338:3:201"},"nodeType":"YulFunctionCall","src":"7338:30:201"},{"name":"end","nodeType":"YulIdentifier","src":"7370:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7335:2:201"},"nodeType":"YulFunctionCall","src":"7335:39:201"},"nodeType":"YulIf","src":"7332:59:201"}]},"name":"abi_decode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7085:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"7093:3:201","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"7101:8:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"7111:6:201","type":""}],"src":"7050:347:201"},{"body":{"nodeType":"YulBlock","src":"7558:671:201","statements":[{"body":{"nodeType":"YulBlock","src":"7605:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7614:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7617:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7607:6:201"},"nodeType":"YulFunctionCall","src":"7607:12:201"},"nodeType":"YulExpressionStatement","src":"7607:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7579:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"7588:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7575:3:201"},"nodeType":"YulFunctionCall","src":"7575:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"7600:3:201","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7571:3:201"},"nodeType":"YulFunctionCall","src":"7571:33:201"},"nodeType":"YulIf","src":"7568:53:201"},{"nodeType":"YulVariableDeclaration","src":"7630:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7656:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7643:12:201"},"nodeType":"YulFunctionCall","src":"7643:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7634:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7700:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7675:24:201"},"nodeType":"YulFunctionCall","src":"7675:31:201"},"nodeType":"YulExpressionStatement","src":"7675:31:201"},{"nodeType":"YulAssignment","src":"7715:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"7725:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7715:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"7739:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7771:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7782:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7767:3:201"},"nodeType":"YulFunctionCall","src":"7767:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7754:12:201"},"nodeType":"YulFunctionCall","src":"7754:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7743:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7820:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7795:24:201"},"nodeType":"YulFunctionCall","src":"7795:33:201"},"nodeType":"YulExpressionStatement","src":"7795:33:201"},{"nodeType":"YulAssignment","src":"7837:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"7847:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7837:6:201"}]},{"nodeType":"YulAssignment","src":"7863:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7890:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7901:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7886:3:201"},"nodeType":"YulFunctionCall","src":"7886:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7873:12:201"},"nodeType":"YulFunctionCall","src":"7873:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"7863:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"7914:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7945:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7956:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7941:3:201"},"nodeType":"YulFunctionCall","src":"7941:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7928:12:201"},"nodeType":"YulFunctionCall","src":"7928:32:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"7918:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"8003:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8012:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8015:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8005:6:201"},"nodeType":"YulFunctionCall","src":"8005:12:201"},"nodeType":"YulExpressionStatement","src":"8005:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7975:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7983:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7972:2:201"},"nodeType":"YulFunctionCall","src":"7972:30:201"},"nodeType":"YulIf","src":"7969:50:201"},{"nodeType":"YulVariableDeclaration","src":"8028:84:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8084:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"8095:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8080:3:201"},"nodeType":"YulFunctionCall","src":"8080:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"8104:7:201"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"8054:25:201"},"nodeType":"YulFunctionCall","src":"8054:58:201"},"variables":[{"name":"value3_1","nodeType":"YulTypedName","src":"8032:8:201","type":""},{"name":"value4_1","nodeType":"YulTypedName","src":"8042:8:201","type":""}]},{"nodeType":"YulAssignment","src":"8121:18:201","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"8131:8:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"8121:6:201"}]},{"nodeType":"YulAssignment","src":"8148:18:201","value":{"name":"value4_1","nodeType":"YulIdentifier","src":"8158:8:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"8148:6:201"}]},{"nodeType":"YulAssignment","src":"8175:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8207:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8218:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8203:3:201"},"nodeType":"YulFunctionCall","src":"8203:19:201"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"8185:17:201"},"nodeType":"YulFunctionCall","src":"8185:38:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"8175:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_bytes_calldata_ptrt_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7484:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7495:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7507:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7515:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7523:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"7531:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"7539:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"7547:6:201","type":""}],"src":"7402:827:201"},{"body":{"nodeType":"YulBlock","src":"8413:83:201","statements":[{"nodeType":"YulAssignment","src":"8423:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8435:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8446:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8431:3:201"},"nodeType":"YulFunctionCall","src":"8431:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8423:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8465:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8482:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8476:5:201"},"nodeType":"YulFunctionCall","src":"8476:13:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8458:6:201"},"nodeType":"YulFunctionCall","src":"8458:32:201"},"nodeType":"YulExpressionStatement","src":"8458:32:201"}]},"name":"abi_encode_tuple_t_struct$_UserConfigurationMap_$21322_memory_ptr__to_t_struct$_UserConfigurationMap_$21322_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8382:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8393:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8404:4:201","type":""}],"src":"8234:262:201"},{"body":{"nodeType":"YulBlock","src":"8570:115:201","statements":[{"body":{"nodeType":"YulBlock","src":"8616:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8625:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8628:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8618:6:201"},"nodeType":"YulFunctionCall","src":"8618:12:201"},"nodeType":"YulExpressionStatement","src":"8618:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8591:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"8600:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8587:3:201"},"nodeType":"YulFunctionCall","src":"8587:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"8612:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8583:3:201"},"nodeType":"YulFunctionCall","src":"8583:32:201"},"nodeType":"YulIf","src":"8580:52:201"},{"nodeType":"YulAssignment","src":"8641:38:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8669:9:201"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"8651:17:201"},"nodeType":"YulFunctionCall","src":"8651:28:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8641:6:201"}]}]},"name":"abi_decode_tuple_t_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8536:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8547:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8559:6:201","type":""}],"src":"8501:184:201"},{"body":{"nodeType":"YulBlock","src":"8791:125:201","statements":[{"nodeType":"YulAssignment","src":"8801:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8813:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8824:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8809:3:201"},"nodeType":"YulFunctionCall","src":"8809:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8801:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8843:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8858:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8866:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8854:3:201"},"nodeType":"YulFunctionCall","src":"8854:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8836:6:201"},"nodeType":"YulFunctionCall","src":"8836:74:201"},"nodeType":"YulExpressionStatement","src":"8836:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8760:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8771:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8782:4:201","type":""}],"src":"8690:226:201"},{"body":{"nodeType":"YulBlock","src":"9042:404:201","statements":[{"body":{"nodeType":"YulBlock","src":"9089:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9098:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9101:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9091:6:201"},"nodeType":"YulFunctionCall","src":"9091:12:201"},"nodeType":"YulExpressionStatement","src":"9091:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9063:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"9072:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9059:3:201"},"nodeType":"YulFunctionCall","src":"9059:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"9084:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9055:3:201"},"nodeType":"YulFunctionCall","src":"9055:33:201"},"nodeType":"YulIf","src":"9052:53:201"},{"nodeType":"YulVariableDeclaration","src":"9114:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9140:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9127:12:201"},"nodeType":"YulFunctionCall","src":"9127:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9118:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9184:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9159:24:201"},"nodeType":"YulFunctionCall","src":"9159:31:201"},"nodeType":"YulExpressionStatement","src":"9159:31:201"},{"nodeType":"YulAssignment","src":"9199:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"9209:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9199:6:201"}]},{"nodeType":"YulAssignment","src":"9223:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9250:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9261:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9246:3:201"},"nodeType":"YulFunctionCall","src":"9246:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9233:12:201"},"nodeType":"YulFunctionCall","src":"9233:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"9223:6:201"}]},{"nodeType":"YulAssignment","src":"9274:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9301:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9312:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9297:3:201"},"nodeType":"YulFunctionCall","src":"9297:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9284:12:201"},"nodeType":"YulFunctionCall","src":"9284:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"9274:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"9325:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9357:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9368:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9353:3:201"},"nodeType":"YulFunctionCall","src":"9353:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9340:12:201"},"nodeType":"YulFunctionCall","src":"9340:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"9329:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"9406:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9381:24:201"},"nodeType":"YulFunctionCall","src":"9381:33:201"},"nodeType":"YulExpressionStatement","src":"9381:33:201"},{"nodeType":"YulAssignment","src":"9423:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"9433:7:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"9423:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8984:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8995:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9007:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9015:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9023:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9031:6:201","type":""}],"src":"8921:525:201"},{"body":{"nodeType":"YulBlock","src":"9535:298:201","statements":[{"body":{"nodeType":"YulBlock","src":"9581:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9590:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9593:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9583:6:201"},"nodeType":"YulFunctionCall","src":"9583:12:201"},"nodeType":"YulExpressionStatement","src":"9583:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9556:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"9565:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9552:3:201"},"nodeType":"YulFunctionCall","src":"9552:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"9577:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9548:3:201"},"nodeType":"YulFunctionCall","src":"9548:32:201"},"nodeType":"YulIf","src":"9545:52:201"},{"nodeType":"YulVariableDeclaration","src":"9606:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9632:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9619:12:201"},"nodeType":"YulFunctionCall","src":"9619:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9610:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9676:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9651:24:201"},"nodeType":"YulFunctionCall","src":"9651:31:201"},"nodeType":"YulExpressionStatement","src":"9651:31:201"},{"nodeType":"YulAssignment","src":"9691:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"9701:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9691:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"9715:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9747:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9758:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9743:3:201"},"nodeType":"YulFunctionCall","src":"9743:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9730:12:201"},"nodeType":"YulFunctionCall","src":"9730:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"9719:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"9793:7:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"9771:21:201"},"nodeType":"YulFunctionCall","src":"9771:30:201"},"nodeType":"YulExpressionStatement","src":"9771:30:201"},{"nodeType":"YulAssignment","src":"9810:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"9820:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"9810:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9493:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9504:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9516:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9524:6:201","type":""}],"src":"9451:382:201"},{"body":{"nodeType":"YulBlock","src":"9958:409:201","statements":[{"body":{"nodeType":"YulBlock","src":"10005:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10014:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10017:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10007:6:201"},"nodeType":"YulFunctionCall","src":"10007:12:201"},"nodeType":"YulExpressionStatement","src":"10007:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9979:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"9988:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9975:3:201"},"nodeType":"YulFunctionCall","src":"9975:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"10000:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9971:3:201"},"nodeType":"YulFunctionCall","src":"9971:33:201"},"nodeType":"YulIf","src":"9968:53:201"},{"nodeType":"YulVariableDeclaration","src":"10030:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10056:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10043:12:201"},"nodeType":"YulFunctionCall","src":"10043:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"10034:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10100:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"10075:24:201"},"nodeType":"YulFunctionCall","src":"10075:31:201"},"nodeType":"YulExpressionStatement","src":"10075:31:201"},{"nodeType":"YulAssignment","src":"10115:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"10125:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"10115:6:201"}]},{"nodeType":"YulAssignment","src":"10139:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10166:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10177:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10162:3:201"},"nodeType":"YulFunctionCall","src":"10162:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10149:12:201"},"nodeType":"YulFunctionCall","src":"10149:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"10139:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"10190:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10222:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10233:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10218:3:201"},"nodeType":"YulFunctionCall","src":"10218:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10205:12:201"},"nodeType":"YulFunctionCall","src":"10205:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"10194:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"10271:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"10246:24:201"},"nodeType":"YulFunctionCall","src":"10246:33:201"},"nodeType":"YulExpressionStatement","src":"10246:33:201"},{"nodeType":"YulAssignment","src":"10288:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"10298:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"10288:6:201"}]},{"nodeType":"YulAssignment","src":"10314:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10346:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10357:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10342:3:201"},"nodeType":"YulFunctionCall","src":"10342:18:201"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"10324:17:201"},"nodeType":"YulFunctionCall","src":"10324:37:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"10314:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_addresst_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9900:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9911:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9923:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9931:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9939:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9947:6:201","type":""}],"src":"9838:529:201"},{"body":{"nodeType":"YulBlock","src":"10476:352:201","statements":[{"body":{"nodeType":"YulBlock","src":"10522:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10531:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10534:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10524:6:201"},"nodeType":"YulFunctionCall","src":"10524:12:201"},"nodeType":"YulExpressionStatement","src":"10524:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"10497:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"10506:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10493:3:201"},"nodeType":"YulFunctionCall","src":"10493:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"10518:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10489:3:201"},"nodeType":"YulFunctionCall","src":"10489:32:201"},"nodeType":"YulIf","src":"10486:52:201"},{"nodeType":"YulVariableDeclaration","src":"10547:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10573:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10560:12:201"},"nodeType":"YulFunctionCall","src":"10560:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"10551:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10617:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"10592:24:201"},"nodeType":"YulFunctionCall","src":"10592:31:201"},"nodeType":"YulExpressionStatement","src":"10592:31:201"},{"nodeType":"YulAssignment","src":"10632:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"10642:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"10632:6:201"}]},{"nodeType":"YulAssignment","src":"10656:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10683:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10694:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10679:3:201"},"nodeType":"YulFunctionCall","src":"10679:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10666:12:201"},"nodeType":"YulFunctionCall","src":"10666:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"10656:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"10707:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10739:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10750:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10735:3:201"},"nodeType":"YulFunctionCall","src":"10735:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10722:12:201"},"nodeType":"YulFunctionCall","src":"10722:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"10711:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"10788:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"10763:24:201"},"nodeType":"YulFunctionCall","src":"10763:33:201"},"nodeType":"YulExpressionStatement","src":"10763:33:201"},{"nodeType":"YulAssignment","src":"10805:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"10815:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"10805:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10426:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"10437:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"10449:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10457:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10465:6:201","type":""}],"src":"10372:456:201"},{"body":{"nodeType":"YulBlock","src":"10883:481:201","statements":[{"nodeType":"YulVariableDeclaration","src":"10893:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10913:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10907:5:201"},"nodeType":"YulFunctionCall","src":"10907:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"10897:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10935:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"10940:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10928:6:201"},"nodeType":"YulFunctionCall","src":"10928:19:201"},"nodeType":"YulExpressionStatement","src":"10928:19:201"},{"nodeType":"YulVariableDeclaration","src":"10956:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10965:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"10960:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"11027:110:201","statements":[{"nodeType":"YulVariableDeclaration","src":"11041:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11051:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11045:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11083:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"11088:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11079:3:201"},"nodeType":"YulFunctionCall","src":"11079:11:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11092:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11075:3:201"},"nodeType":"YulFunctionCall","src":"11075:20:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11111:5:201"},{"name":"i","nodeType":"YulIdentifier","src":"11118:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11107:3:201"},"nodeType":"YulFunctionCall","src":"11107:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11122:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11103:3:201"},"nodeType":"YulFunctionCall","src":"11103:22:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11097:5:201"},"nodeType":"YulFunctionCall","src":"11097:29:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11068:6:201"},"nodeType":"YulFunctionCall","src":"11068:59:201"},"nodeType":"YulExpressionStatement","src":"11068:59:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"10986:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"10989:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10983:2:201"},"nodeType":"YulFunctionCall","src":"10983:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"10997:21:201","statements":[{"nodeType":"YulAssignment","src":"10999:17:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"11008:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"11011:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11004:3:201"},"nodeType":"YulFunctionCall","src":"11004:12:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"10999:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"10979:3:201","statements":[]},"src":"10975:162:201"},{"body":{"nodeType":"YulBlock","src":"11171:62:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11200:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"11205:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11196:3:201"},"nodeType":"YulFunctionCall","src":"11196:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"11214:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11192:3:201"},"nodeType":"YulFunctionCall","src":"11192:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"11221:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11185:6:201"},"nodeType":"YulFunctionCall","src":"11185:38:201"},"nodeType":"YulExpressionStatement","src":"11185:38:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"11152:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"11155:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11149:2:201"},"nodeType":"YulFunctionCall","src":"11149:13:201"},"nodeType":"YulIf","src":"11146:87:201"},{"nodeType":"YulAssignment","src":"11242:116:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11257:3:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"11270:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"11278:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11266:3:201"},"nodeType":"YulFunctionCall","src":"11266:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"11283:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11262:3:201"},"nodeType":"YulFunctionCall","src":"11262:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11253:3:201"},"nodeType":"YulFunctionCall","src":"11253:98:201"},{"kind":"number","nodeType":"YulLiteral","src":"11353:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11249:3:201"},"nodeType":"YulFunctionCall","src":"11249:109:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"11242:3:201"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"10860:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"10867:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"10875:3:201","type":""}],"src":"10833:531:201"},{"body":{"nodeType":"YulBlock","src":"11534:530:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11551:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11562:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11544:6:201"},"nodeType":"YulFunctionCall","src":"11544:21:201"},"nodeType":"YulExpressionStatement","src":"11544:21:201"},{"nodeType":"YulVariableDeclaration","src":"11574:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11584:6:201","type":"","value":"0xffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11578:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11610:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11621:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11606:3:201"},"nodeType":"YulFunctionCall","src":"11606:18:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11636:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11630:5:201"},"nodeType":"YulFunctionCall","src":"11630:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11645:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11626:3:201"},"nodeType":"YulFunctionCall","src":"11626:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11599:6:201"},"nodeType":"YulFunctionCall","src":"11599:50:201"},"nodeType":"YulExpressionStatement","src":"11599:50:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11669:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11680:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11665:3:201"},"nodeType":"YulFunctionCall","src":"11665:18:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11699:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"11707:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11695:3:201"},"nodeType":"YulFunctionCall","src":"11695:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11689:5:201"},"nodeType":"YulFunctionCall","src":"11689:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11713:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11685:3:201"},"nodeType":"YulFunctionCall","src":"11685:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11658:6:201"},"nodeType":"YulFunctionCall","src":"11658:59:201"},"nodeType":"YulExpressionStatement","src":"11658:59:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11737:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11748:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11733:3:201"},"nodeType":"YulFunctionCall","src":"11733:18:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11767:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"11775:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11763:3:201"},"nodeType":"YulFunctionCall","src":"11763:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11757:5:201"},"nodeType":"YulFunctionCall","src":"11757:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11781:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11753:3:201"},"nodeType":"YulFunctionCall","src":"11753:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11726:6:201"},"nodeType":"YulFunctionCall","src":"11726:59:201"},"nodeType":"YulExpressionStatement","src":"11726:59:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11805:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11816:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11801:3:201"},"nodeType":"YulFunctionCall","src":"11801:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11836:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"11844:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11832:3:201"},"nodeType":"YulFunctionCall","src":"11832:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11826:5:201"},"nodeType":"YulFunctionCall","src":"11826:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"11850:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11822:3:201"},"nodeType":"YulFunctionCall","src":"11822:71:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11794:6:201"},"nodeType":"YulFunctionCall","src":"11794:100:201"},"nodeType":"YulExpressionStatement","src":"11794:100:201"},{"nodeType":"YulVariableDeclaration","src":"11903:43:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11933:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"11941:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11929:3:201"},"nodeType":"YulFunctionCall","src":"11929:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11923:5:201"},"nodeType":"YulFunctionCall","src":"11923:23:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"11907:12:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11966:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11977:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11962:3:201"},"nodeType":"YulFunctionCall","src":"11962:20:201"},{"kind":"number","nodeType":"YulLiteral","src":"11984:4:201","type":"","value":"0xa0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11955:6:201"},"nodeType":"YulFunctionCall","src":"11955:34:201"},"nodeType":"YulExpressionStatement","src":"11955:34:201"},{"nodeType":"YulAssignment","src":"11998:60:201","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"12024:12:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12042:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12053:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12038:3:201"},"nodeType":"YulFunctionCall","src":"12038:19:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"12006:17:201"},"nodeType":"YulFunctionCall","src":"12006:52:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11998:4:201"}]}]},"name":"abi_encode_tuple_t_struct$_EModeCategory_$21333_memory_ptr__to_t_struct$_EModeCategory_$21333_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11503:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11514:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11525:4:201","type":""}],"src":"11369:695:201"},{"body":{"nodeType":"YulBlock","src":"12207:675:201","statements":[{"body":{"nodeType":"YulBlock","src":"12254:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12263:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12266:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12256:6:201"},"nodeType":"YulFunctionCall","src":"12256:12:201"},"nodeType":"YulExpressionStatement","src":"12256:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"12228:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"12237:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12224:3:201"},"nodeType":"YulFunctionCall","src":"12224:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"12249:3:201","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12220:3:201"},"nodeType":"YulFunctionCall","src":"12220:33:201"},"nodeType":"YulIf","src":"12217:53:201"},{"nodeType":"YulVariableDeclaration","src":"12279:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12305:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12292:12:201"},"nodeType":"YulFunctionCall","src":"12292:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"12283:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12349:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12324:24:201"},"nodeType":"YulFunctionCall","src":"12324:31:201"},"nodeType":"YulExpressionStatement","src":"12324:31:201"},{"nodeType":"YulAssignment","src":"12364:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"12374:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"12364:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"12388:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12420:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12431:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12416:3:201"},"nodeType":"YulFunctionCall","src":"12416:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12403:12:201"},"nodeType":"YulFunctionCall","src":"12403:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"12392:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"12469:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12444:24:201"},"nodeType":"YulFunctionCall","src":"12444:33:201"},"nodeType":"YulExpressionStatement","src":"12444:33:201"},{"nodeType":"YulAssignment","src":"12486:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"12496:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"12486:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"12512:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12544:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12555:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12540:3:201"},"nodeType":"YulFunctionCall","src":"12540:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12527:12:201"},"nodeType":"YulFunctionCall","src":"12527:32:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"12516:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"12593:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12568:24:201"},"nodeType":"YulFunctionCall","src":"12568:33:201"},"nodeType":"YulExpressionStatement","src":"12568:33:201"},{"nodeType":"YulAssignment","src":"12610:17:201","value":{"name":"value_2","nodeType":"YulIdentifier","src":"12620:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"12610:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"12636:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12668:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12679:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12664:3:201"},"nodeType":"YulFunctionCall","src":"12664:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12651:12:201"},"nodeType":"YulFunctionCall","src":"12651:32:201"},"variables":[{"name":"value_3","nodeType":"YulTypedName","src":"12640:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_3","nodeType":"YulIdentifier","src":"12717:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12692:24:201"},"nodeType":"YulFunctionCall","src":"12692:33:201"},"nodeType":"YulExpressionStatement","src":"12692:33:201"},{"nodeType":"YulAssignment","src":"12734:17:201","value":{"name":"value_3","nodeType":"YulIdentifier","src":"12744:7:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"12734:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"12760:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12792:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12803:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12788:3:201"},"nodeType":"YulFunctionCall","src":"12788:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12775:12:201"},"nodeType":"YulFunctionCall","src":"12775:33:201"},"variables":[{"name":"value_4","nodeType":"YulTypedName","src":"12764:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_4","nodeType":"YulIdentifier","src":"12842:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12817:24:201"},"nodeType":"YulFunctionCall","src":"12817:33:201"},"nodeType":"YulExpressionStatement","src":"12817:33:201"},{"nodeType":"YulAssignment","src":"12859:17:201","value":{"name":"value_4","nodeType":"YulIdentifier","src":"12869:7:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"12859:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12141:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"12152:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"12164:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12172:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12180:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12188:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12196:6:201","type":""}],"src":"12069:813:201"},{"body":{"nodeType":"YulBlock","src":"12974:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"13020:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13029:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13032:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13022:6:201"},"nodeType":"YulFunctionCall","src":"13022:12:201"},"nodeType":"YulExpressionStatement","src":"13022:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"12995:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"13004:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12991:3:201"},"nodeType":"YulFunctionCall","src":"12991:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"13016:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12987:3:201"},"nodeType":"YulFunctionCall","src":"12987:32:201"},"nodeType":"YulIf","src":"12984:52:201"},{"nodeType":"YulVariableDeclaration","src":"13045:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13071:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13058:12:201"},"nodeType":"YulFunctionCall","src":"13058:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13049:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13115:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"13090:24:201"},"nodeType":"YulFunctionCall","src":"13090:31:201"},"nodeType":"YulExpressionStatement","src":"13090:31:201"},{"nodeType":"YulAssignment","src":"13130:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"13140:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13130:6:201"}]},{"nodeType":"YulAssignment","src":"13154:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13181:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13192:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13177:3:201"},"nodeType":"YulFunctionCall","src":"13177:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13164:12:201"},"nodeType":"YulFunctionCall","src":"13164:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"13154:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12932:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"12943:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"12955:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12963:6:201","type":""}],"src":"12887:315:201"},{"body":{"nodeType":"YulBlock","src":"13291:283:201","statements":[{"body":{"nodeType":"YulBlock","src":"13340:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13349:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13352:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13342:6:201"},"nodeType":"YulFunctionCall","src":"13342:12:201"},"nodeType":"YulExpressionStatement","src":"13342:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13319:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13327:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13315:3:201"},"nodeType":"YulFunctionCall","src":"13315:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"13334:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13311:3:201"},"nodeType":"YulFunctionCall","src":"13311:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13304:6:201"},"nodeType":"YulFunctionCall","src":"13304:35:201"},"nodeType":"YulIf","src":"13301:55:201"},{"nodeType":"YulAssignment","src":"13365:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13388:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13375:12:201"},"nodeType":"YulFunctionCall","src":"13375:20:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"13365:6:201"}]},{"body":{"nodeType":"YulBlock","src":"13438:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13447:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13450:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13440:6:201"},"nodeType":"YulFunctionCall","src":"13440:12:201"},"nodeType":"YulExpressionStatement","src":"13440:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"13410:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13418:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13407:2:201"},"nodeType":"YulFunctionCall","src":"13407:30:201"},"nodeType":"YulIf","src":"13404:50:201"},{"nodeType":"YulAssignment","src":"13463:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13479:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13487:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13475:3:201"},"nodeType":"YulFunctionCall","src":"13475:17:201"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"13463:8:201"}]},{"body":{"nodeType":"YulBlock","src":"13552:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13561:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13564:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13554:6:201"},"nodeType":"YulFunctionCall","src":"13554:12:201"},"nodeType":"YulExpressionStatement","src":"13554:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13515:6:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13527:1:201","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"13530:6:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"13523:3:201"},"nodeType":"YulFunctionCall","src":"13523:14:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13511:3:201"},"nodeType":"YulFunctionCall","src":"13511:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"13540:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13507:3:201"},"nodeType":"YulFunctionCall","src":"13507:38:201"},{"name":"end","nodeType":"YulIdentifier","src":"13547:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13504:2:201"},"nodeType":"YulFunctionCall","src":"13504:47:201"},"nodeType":"YulIf","src":"13501:67:201"}]},"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"13254:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"13262:3:201","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"13270:8:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"13280:6:201","type":""}],"src":"13207:367:201"},{"body":{"nodeType":"YulBlock","src":"13684:332:201","statements":[{"body":{"nodeType":"YulBlock","src":"13730:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13739:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13742:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13732:6:201"},"nodeType":"YulFunctionCall","src":"13732:12:201"},"nodeType":"YulExpressionStatement","src":"13732:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13705:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"13714:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13701:3:201"},"nodeType":"YulFunctionCall","src":"13701:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"13726:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13697:3:201"},"nodeType":"YulFunctionCall","src":"13697:32:201"},"nodeType":"YulIf","src":"13694:52:201"},{"nodeType":"YulVariableDeclaration","src":"13755:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13782:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13769:12:201"},"nodeType":"YulFunctionCall","src":"13769:23:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"13759:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"13835:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13844:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13847:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13837:6:201"},"nodeType":"YulFunctionCall","src":"13837:12:201"},"nodeType":"YulExpressionStatement","src":"13837:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13807:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13815:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13804:2:201"},"nodeType":"YulFunctionCall","src":"13804:30:201"},"nodeType":"YulIf","src":"13801:50:201"},{"nodeType":"YulVariableDeclaration","src":"13860:96:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13928:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"13939:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13924:3:201"},"nodeType":"YulFunctionCall","src":"13924:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"13948:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"13886:37:201"},"nodeType":"YulFunctionCall","src":"13886:70:201"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"13864:8:201","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"13874:8:201","type":""}]},{"nodeType":"YulAssignment","src":"13965:18:201","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"13975:8:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13965:6:201"}]},{"nodeType":"YulAssignment","src":"13992:18:201","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"14002:8:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"13992:6:201"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13642:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13653:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13665:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13673:6:201","type":""}],"src":"13579:437:201"},{"body":{"nodeType":"YulBlock","src":"14158:461:201","statements":[{"body":{"nodeType":"YulBlock","src":"14205:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14214:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14217:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14207:6:201"},"nodeType":"YulFunctionCall","src":"14207:12:201"},"nodeType":"YulExpressionStatement","src":"14207:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14179:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"14188:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14175:3:201"},"nodeType":"YulFunctionCall","src":"14175:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"14200:3:201","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14171:3:201"},"nodeType":"YulFunctionCall","src":"14171:33:201"},"nodeType":"YulIf","src":"14168:53:201"},{"nodeType":"YulVariableDeclaration","src":"14230:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14256:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14243:12:201"},"nodeType":"YulFunctionCall","src":"14243:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"14234:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14300:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"14275:24:201"},"nodeType":"YulFunctionCall","src":"14275:31:201"},"nodeType":"YulExpressionStatement","src":"14275:31:201"},{"nodeType":"YulAssignment","src":"14315:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"14325:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14315:6:201"}]},{"nodeType":"YulAssignment","src":"14339:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14366:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14377:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14362:3:201"},"nodeType":"YulFunctionCall","src":"14362:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14349:12:201"},"nodeType":"YulFunctionCall","src":"14349:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"14339:6:201"}]},{"nodeType":"YulAssignment","src":"14390:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14417:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14428:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14413:3:201"},"nodeType":"YulFunctionCall","src":"14413:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14400:12:201"},"nodeType":"YulFunctionCall","src":"14400:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"14390:6:201"}]},{"nodeType":"YulAssignment","src":"14441:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14473:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14484:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14469:3:201"},"nodeType":"YulFunctionCall","src":"14469:18:201"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"14451:17:201"},"nodeType":"YulFunctionCall","src":"14451:37:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"14441:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"14497:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14529:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14540:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14525:3:201"},"nodeType":"YulFunctionCall","src":"14525:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14512:12:201"},"nodeType":"YulFunctionCall","src":"14512:33:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"14501:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"14579:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"14554:24:201"},"nodeType":"YulFunctionCall","src":"14554:33:201"},"nodeType":"YulExpressionStatement","src":"14554:33:201"},{"nodeType":"YulAssignment","src":"14596:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"14606:7:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"14596:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_uint16t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14092:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14103:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14115:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14123:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14131:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14139:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"14147:6:201","type":""}],"src":"14021:598:201"},{"body":{"nodeType":"YulBlock","src":"14920:1276:201","statements":[{"body":{"nodeType":"YulBlock","src":"14967:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14976:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14979:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14969:6:201"},"nodeType":"YulFunctionCall","src":"14969:12:201"},"nodeType":"YulExpressionStatement","src":"14969:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14941:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"14950:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14937:3:201"},"nodeType":"YulFunctionCall","src":"14937:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"14962:3:201","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14933:3:201"},"nodeType":"YulFunctionCall","src":"14933:33:201"},"nodeType":"YulIf","src":"14930:53:201"},{"nodeType":"YulAssignment","src":"14992:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15021:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"15002:18:201"},"nodeType":"YulFunctionCall","src":"15002:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14992:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"15040:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"15050:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15044:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"15121:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15130:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15133:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15123:6:201"},"nodeType":"YulFunctionCall","src":"15123:12:201"},"nodeType":"YulExpressionStatement","src":"15123:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15100:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15111:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15096:3:201"},"nodeType":"YulFunctionCall","src":"15096:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15083:12:201"},"nodeType":"YulFunctionCall","src":"15083:32:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15117:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15080:2:201"},"nodeType":"YulFunctionCall","src":"15080:40:201"},"nodeType":"YulIf","src":"15077:60:201"},{"nodeType":"YulVariableDeclaration","src":"15146:122:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15214:9:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15242:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15253:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15238:3:201"},"nodeType":"YulFunctionCall","src":"15238:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15225:12:201"},"nodeType":"YulFunctionCall","src":"15225:32:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15210:3:201"},"nodeType":"YulFunctionCall","src":"15210:48:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15260:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"15172:37:201"},"nodeType":"YulFunctionCall","src":"15172:96:201"},"variables":[{"name":"value1_1","nodeType":"YulTypedName","src":"15150:8:201","type":""},{"name":"value2_1","nodeType":"YulTypedName","src":"15160:8:201","type":""}]},{"nodeType":"YulAssignment","src":"15277:18:201","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"15287:8:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"15277:6:201"}]},{"nodeType":"YulAssignment","src":"15304:18:201","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"15314:8:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"15304:6:201"}]},{"body":{"nodeType":"YulBlock","src":"15375:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15384:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15387:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15377:6:201"},"nodeType":"YulFunctionCall","src":"15377:12:201"},"nodeType":"YulExpressionStatement","src":"15377:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15354:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15365:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15350:3:201"},"nodeType":"YulFunctionCall","src":"15350:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15337:12:201"},"nodeType":"YulFunctionCall","src":"15337:32:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15371:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15334:2:201"},"nodeType":"YulFunctionCall","src":"15334:40:201"},"nodeType":"YulIf","src":"15331:60:201"},{"nodeType":"YulVariableDeclaration","src":"15400:122:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15468:9:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15496:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15507:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15492:3:201"},"nodeType":"YulFunctionCall","src":"15492:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15479:12:201"},"nodeType":"YulFunctionCall","src":"15479:32:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15464:3:201"},"nodeType":"YulFunctionCall","src":"15464:48:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15514:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"15426:37:201"},"nodeType":"YulFunctionCall","src":"15426:96:201"},"variables":[{"name":"value3_1","nodeType":"YulTypedName","src":"15404:8:201","type":""},{"name":"value4_1","nodeType":"YulTypedName","src":"15414:8:201","type":""}]},{"nodeType":"YulAssignment","src":"15531:18:201","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"15541:8:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"15531:6:201"}]},{"nodeType":"YulAssignment","src":"15558:18:201","value":{"name":"value4_1","nodeType":"YulIdentifier","src":"15568:8:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"15558:6:201"}]},{"body":{"nodeType":"YulBlock","src":"15629:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15638:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15641:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15631:6:201"},"nodeType":"YulFunctionCall","src":"15631:12:201"},"nodeType":"YulExpressionStatement","src":"15631:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15608:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15619:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15604:3:201"},"nodeType":"YulFunctionCall","src":"15604:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15591:12:201"},"nodeType":"YulFunctionCall","src":"15591:32:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15625:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15588:2:201"},"nodeType":"YulFunctionCall","src":"15588:40:201"},"nodeType":"YulIf","src":"15585:60:201"},{"nodeType":"YulVariableDeclaration","src":"15654:122:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15722:9:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15750:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15761:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15746:3:201"},"nodeType":"YulFunctionCall","src":"15746:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15733:12:201"},"nodeType":"YulFunctionCall","src":"15733:32:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15718:3:201"},"nodeType":"YulFunctionCall","src":"15718:48:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15768:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"15680:37:201"},"nodeType":"YulFunctionCall","src":"15680:96:201"},"variables":[{"name":"value5_1","nodeType":"YulTypedName","src":"15658:8:201","type":""},{"name":"value6_1","nodeType":"YulTypedName","src":"15668:8:201","type":""}]},{"nodeType":"YulAssignment","src":"15785:18:201","value":{"name":"value5_1","nodeType":"YulIdentifier","src":"15795:8:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"15785:6:201"}]},{"nodeType":"YulAssignment","src":"15812:18:201","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"15822:8:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"15812:6:201"}]},{"nodeType":"YulAssignment","src":"15839:49:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15872:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15883:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15868:3:201"},"nodeType":"YulFunctionCall","src":"15868:19:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"15849:18:201"},"nodeType":"YulFunctionCall","src":"15849:39:201"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"15839:6:201"}]},{"body":{"nodeType":"YulBlock","src":"15942:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15951:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15954:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15944:6:201"},"nodeType":"YulFunctionCall","src":"15944:12:201"},"nodeType":"YulExpressionStatement","src":"15944:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15920:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15931:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15916:3:201"},"nodeType":"YulFunctionCall","src":"15916:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15903:12:201"},"nodeType":"YulFunctionCall","src":"15903:33:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15938:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15900:2:201"},"nodeType":"YulFunctionCall","src":"15900:41:201"},"nodeType":"YulIf","src":"15897:61:201"},{"nodeType":"YulVariableDeclaration","src":"15967:111:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16023:9:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16051:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16062:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16047:3:201"},"nodeType":"YulFunctionCall","src":"16047:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"16034:12:201"},"nodeType":"YulFunctionCall","src":"16034:33:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16019:3:201"},"nodeType":"YulFunctionCall","src":"16019:49:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"16070:7:201"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"15993:25:201"},"nodeType":"YulFunctionCall","src":"15993:85:201"},"variables":[{"name":"value8_1","nodeType":"YulTypedName","src":"15971:8:201","type":""},{"name":"value9_1","nodeType":"YulTypedName","src":"15981:8:201","type":""}]},{"nodeType":"YulAssignment","src":"16087:18:201","value":{"name":"value8_1","nodeType":"YulIdentifier","src":"16097:8:201"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"16087:6:201"}]},{"nodeType":"YulAssignment","src":"16114:18:201","value":{"name":"value9_1","nodeType":"YulIdentifier","src":"16124:8:201"},"variableNames":[{"name":"value9","nodeType":"YulIdentifier","src":"16114:6:201"}]},{"nodeType":"YulAssignment","src":"16141:49:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16174:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16185:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16170:3:201"},"nodeType":"YulFunctionCall","src":"16170:19:201"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"16152:17:201"},"nodeType":"YulFunctionCall","src":"16152:38:201"},"variableNames":[{"name":"value10","nodeType":"YulIdentifier","src":"16141:7:201"}]}]},"name":"abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_addresst_bytes_calldata_ptrt_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14805:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14816:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14828:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14836:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14844:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14852:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"14860:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"14868:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"14876:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"14884:6:201","type":""},{"name":"value8","nodeType":"YulTypedName","src":"14892:6:201","type":""},{"name":"value9","nodeType":"YulTypedName","src":"14900:6:201","type":""},{"name":"value10","nodeType":"YulTypedName","src":"14908:7:201","type":""}],"src":"14624:1572:201"},{"body":{"nodeType":"YulBlock","src":"16250:139:201","statements":[{"nodeType":"YulAssignment","src":"16260:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"16282:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"16269:12:201"},"nodeType":"YulFunctionCall","src":"16269:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"16260:5:201"}]},{"body":{"nodeType":"YulBlock","src":"16367:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16376:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16379:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16369:6:201"},"nodeType":"YulFunctionCall","src":"16369:12:201"},"nodeType":"YulExpressionStatement","src":"16369:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16311:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16322:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"16329:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16318:3:201"},"nodeType":"YulFunctionCall","src":"16318:46:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"16308:2:201"},"nodeType":"YulFunctionCall","src":"16308:57:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"16301:6:201"},"nodeType":"YulFunctionCall","src":"16301:65:201"},"nodeType":"YulIf","src":"16298:85:201"}]},"name":"abi_decode_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"16229:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"16240:5:201","type":""}],"src":"16201:188:201"},{"body":{"nodeType":"YulBlock","src":"16481:173:201","statements":[{"body":{"nodeType":"YulBlock","src":"16527:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16536:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16539:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16529:6:201"},"nodeType":"YulFunctionCall","src":"16529:12:201"},"nodeType":"YulExpressionStatement","src":"16529:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"16502:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"16511:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16498:3:201"},"nodeType":"YulFunctionCall","src":"16498:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"16523:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"16494:3:201"},"nodeType":"YulFunctionCall","src":"16494:32:201"},"nodeType":"YulIf","src":"16491:52:201"},{"nodeType":"YulAssignment","src":"16552:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16581:9:201"}],"functionName":{"name":"abi_decode_uint128","nodeType":"YulIdentifier","src":"16562:18:201"},"nodeType":"YulFunctionCall","src":"16562:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"16552:6:201"}]},{"nodeType":"YulAssignment","src":"16600:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16633:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16644:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16629:3:201"},"nodeType":"YulFunctionCall","src":"16629:18:201"}],"functionName":{"name":"abi_decode_uint128","nodeType":"YulIdentifier","src":"16610:18:201"},"nodeType":"YulFunctionCall","src":"16610:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"16600:6:201"}]}]},"name":"abi_decode_tuple_t_uint128t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16439:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"16450:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"16462:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16470:6:201","type":""}],"src":"16394:260:201"},{"body":{"nodeType":"YulBlock","src":"16900:294:201","statements":[{"nodeType":"YulAssignment","src":"16910:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16922:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16933:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16918:3:201"},"nodeType":"YulFunctionCall","src":"16918:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16910:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16953:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"16964:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16946:6:201"},"nodeType":"YulFunctionCall","src":"16946:25:201"},"nodeType":"YulExpressionStatement","src":"16946:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16991:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17002:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16987:3:201"},"nodeType":"YulFunctionCall","src":"16987:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"17007:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16980:6:201"},"nodeType":"YulFunctionCall","src":"16980:34:201"},"nodeType":"YulExpressionStatement","src":"16980:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17034:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17045:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17030:3:201"},"nodeType":"YulFunctionCall","src":"17030:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"17050:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17023:6:201"},"nodeType":"YulFunctionCall","src":"17023:34:201"},"nodeType":"YulExpressionStatement","src":"17023:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17077:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17088:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17073:3:201"},"nodeType":"YulFunctionCall","src":"17073:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"17093:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17066:6:201"},"nodeType":"YulFunctionCall","src":"17066:34:201"},"nodeType":"YulExpressionStatement","src":"17066:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17120:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17131:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17116:3:201"},"nodeType":"YulFunctionCall","src":"17116:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"17137:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17109:6:201"},"nodeType":"YulFunctionCall","src":"17109:35:201"},"nodeType":"YulExpressionStatement","src":"17109:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17164:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17175:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17160:3:201"},"nodeType":"YulFunctionCall","src":"17160:19:201"},{"name":"value5","nodeType":"YulIdentifier","src":"17181:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17153:6:201"},"nodeType":"YulFunctionCall","src":"17153:35:201"},"nodeType":"YulExpressionStatement","src":"17153:35:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16829:9:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"16840:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"16848:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"16856:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"16864:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16872:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16880:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16891:4:201","type":""}],"src":"16659:535:201"},{"body":{"nodeType":"YulBlock","src":"17384:83:201","statements":[{"nodeType":"YulAssignment","src":"17394:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17406:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17417:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17402:3:201"},"nodeType":"YulFunctionCall","src":"17402:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17394:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17436:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"17453:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17447:5:201"},"nodeType":"YulFunctionCall","src":"17447:13:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17429:6:201"},"nodeType":"YulFunctionCall","src":"17429:32:201"},"nodeType":"YulExpressionStatement","src":"17429:32:201"}]},"name":"abi_encode_tuple_t_struct$_ReserveConfigurationMap_$21318_memory_ptr__to_t_struct$_ReserveConfigurationMap_$21318_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17353:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17364:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17375:4:201","type":""}],"src":"17199:268:201"},{"body":{"nodeType":"YulBlock","src":"17573:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"17619:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17628:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17631:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17621:6:201"},"nodeType":"YulFunctionCall","src":"17621:12:201"},"nodeType":"YulExpressionStatement","src":"17621:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"17594:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"17603:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17590:3:201"},"nodeType":"YulFunctionCall","src":"17590:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"17615:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"17586:3:201"},"nodeType":"YulFunctionCall","src":"17586:32:201"},"nodeType":"YulIf","src":"17583:52:201"},{"nodeType":"YulVariableDeclaration","src":"17644:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17670:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"17657:12:201"},"nodeType":"YulFunctionCall","src":"17657:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"17648:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17714:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"17689:24:201"},"nodeType":"YulFunctionCall","src":"17689:31:201"},"nodeType":"YulExpressionStatement","src":"17689:31:201"},{"nodeType":"YulAssignment","src":"17729:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"17739:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"17729:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17539:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"17550:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"17562:6:201","type":""}],"src":"17472:278:201"},{"body":{"nodeType":"YulBlock","src":"17859:352:201","statements":[{"body":{"nodeType":"YulBlock","src":"17905:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17914:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17917:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17907:6:201"},"nodeType":"YulFunctionCall","src":"17907:12:201"},"nodeType":"YulExpressionStatement","src":"17907:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"17880:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"17889:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17876:3:201"},"nodeType":"YulFunctionCall","src":"17876:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"17901:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"17872:3:201"},"nodeType":"YulFunctionCall","src":"17872:32:201"},"nodeType":"YulIf","src":"17869:52:201"},{"nodeType":"YulVariableDeclaration","src":"17930:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17956:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"17943:12:201"},"nodeType":"YulFunctionCall","src":"17943:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"17934:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18000:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"17975:24:201"},"nodeType":"YulFunctionCall","src":"17975:31:201"},"nodeType":"YulExpressionStatement","src":"17975:31:201"},{"nodeType":"YulAssignment","src":"18015:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"18025:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"18015:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"18039:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18071:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18082:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18067:3:201"},"nodeType":"YulFunctionCall","src":"18067:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"18054:12:201"},"nodeType":"YulFunctionCall","src":"18054:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"18043:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"18120:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"18095:24:201"},"nodeType":"YulFunctionCall","src":"18095:33:201"},"nodeType":"YulExpressionStatement","src":"18095:33:201"},{"nodeType":"YulAssignment","src":"18137:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"18147:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"18137:6:201"}]},{"nodeType":"YulAssignment","src":"18163:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18190:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18201:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18186:3:201"},"nodeType":"YulFunctionCall","src":"18186:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"18173:12:201"},"nodeType":"YulFunctionCall","src":"18173:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"18163:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17809:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"17820:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"17832:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"17840:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"17848:6:201","type":""}],"src":"17755:456:201"},{"body":{"nodeType":"YulBlock","src":"18367:530:201","statements":[{"nodeType":"YulVariableDeclaration","src":"18377:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"18387:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"18381:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"18398:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18416:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"18427:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18412:3:201"},"nodeType":"YulFunctionCall","src":"18412:18:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"18402:6:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18446:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"18457:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18439:6:201"},"nodeType":"YulFunctionCall","src":"18439:21:201"},"nodeType":"YulExpressionStatement","src":"18439:21:201"},{"nodeType":"YulVariableDeclaration","src":"18469:17:201","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"18480:6:201"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"18473:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"18495:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18515:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18509:5:201"},"nodeType":"YulFunctionCall","src":"18509:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"18499:6:201","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"18538:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"18546:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18531:6:201"},"nodeType":"YulFunctionCall","src":"18531:22:201"},"nodeType":"YulExpressionStatement","src":"18531:22:201"},{"nodeType":"YulAssignment","src":"18562:25:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18573:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18584:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18569:3:201"},"nodeType":"YulFunctionCall","src":"18569:18:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"18562:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"18596:29:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18614:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"18622:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18610:3:201"},"nodeType":"YulFunctionCall","src":"18610:15:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"18600:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"18634:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"18643:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"18638:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"18702:169:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18723:3:201"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"18738:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18732:5:201"},"nodeType":"YulFunctionCall","src":"18732:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"18747:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18728:3:201"},"nodeType":"YulFunctionCall","src":"18728:62:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18716:6:201"},"nodeType":"YulFunctionCall","src":"18716:75:201"},"nodeType":"YulExpressionStatement","src":"18716:75:201"},{"nodeType":"YulAssignment","src":"18804:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18815:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"18820:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18811:3:201"},"nodeType":"YulFunctionCall","src":"18811:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"18804:3:201"}]},{"nodeType":"YulAssignment","src":"18836:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"18850:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"18858:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18846:3:201"},"nodeType":"YulFunctionCall","src":"18846:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"18836:6:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"18664:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"18667:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"18661:2:201"},"nodeType":"YulFunctionCall","src":"18661:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"18675:18:201","statements":[{"nodeType":"YulAssignment","src":"18677:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"18686:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"18689:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18682:3:201"},"nodeType":"YulFunctionCall","src":"18682:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"18677:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"18657:3:201","statements":[]},"src":"18653:218:201"},{"nodeType":"YulAssignment","src":"18880:11:201","value":{"name":"pos","nodeType":"YulIdentifier","src":"18888:3:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18880:4:201"}]}]},"name":"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18336:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18347:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18358:4:201","type":""}],"src":"18216:681:201"},{"body":{"nodeType":"YulBlock","src":"18934:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18951:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"18954:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18944:6:201"},"nodeType":"YulFunctionCall","src":"18944:88:201"},"nodeType":"YulExpressionStatement","src":"18944:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19048:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"19051:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19041:6:201"},"nodeType":"YulFunctionCall","src":"19041:15:201"},"nodeType":"YulExpressionStatement","src":"19041:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19072:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19075:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19065:6:201"},"nodeType":"YulFunctionCall","src":"19065:15:201"},"nodeType":"YulExpressionStatement","src":"19065:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"18902:184:201"},{"body":{"nodeType":"YulBlock","src":"19137:207:201","statements":[{"nodeType":"YulAssignment","src":"19147:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19163:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19157:5:201"},"nodeType":"YulFunctionCall","src":"19157:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19147:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"19175:35:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19197:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"19205:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19193:3:201"},"nodeType":"YulFunctionCall","src":"19193:17:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"19179:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"19285:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"19287:16:201"},"nodeType":"YulFunctionCall","src":"19287:18:201"},"nodeType":"YulExpressionStatement","src":"19287:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19228:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"19240:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"19225:2:201"},"nodeType":"YulFunctionCall","src":"19225:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19264:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"19276:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"19261:2:201"},"nodeType":"YulFunctionCall","src":"19261:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"19222:2:201"},"nodeType":"YulFunctionCall","src":"19222:62:201"},"nodeType":"YulIf","src":"19219:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19323:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19327:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19316:6:201"},"nodeType":"YulFunctionCall","src":"19316:22:201"},"nodeType":"YulExpressionStatement","src":"19316:22:201"}]},"name":"allocate_memory_5567","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"19126:6:201","type":""}],"src":"19091:253:201"},{"body":{"nodeType":"YulBlock","src":"19394:289:201","statements":[{"nodeType":"YulAssignment","src":"19404:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19420:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19414:5:201"},"nodeType":"YulFunctionCall","src":"19414:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19404:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"19432:117:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19454:6:201"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"19470:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"19476:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19466:3:201"},"nodeType":"YulFunctionCall","src":"19466:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"19481:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19462:3:201"},"nodeType":"YulFunctionCall","src":"19462:86:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19450:3:201"},"nodeType":"YulFunctionCall","src":"19450:99:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"19436:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"19624:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"19626:16:201"},"nodeType":"YulFunctionCall","src":"19626:18:201"},"nodeType":"YulExpressionStatement","src":"19626:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19567:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"19579:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"19564:2:201"},"nodeType":"YulFunctionCall","src":"19564:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19603:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"19615:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"19600:2:201"},"nodeType":"YulFunctionCall","src":"19600:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"19561:2:201"},"nodeType":"YulFunctionCall","src":"19561:62:201"},"nodeType":"YulIf","src":"19558:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19662:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19666:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19655:6:201"},"nodeType":"YulFunctionCall","src":"19655:22:201"},"nodeType":"YulExpressionStatement","src":"19655:22:201"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"19374:4:201","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"19383:6:201","type":""}],"src":"19349:334:201"},{"body":{"nodeType":"YulBlock","src":"19805:1371:201","statements":[{"body":{"nodeType":"YulBlock","src":"19851:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19860:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19863:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19853:6:201"},"nodeType":"YulFunctionCall","src":"19853:12:201"},"nodeType":"YulExpressionStatement","src":"19853:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"19826:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"19835:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19822:3:201"},"nodeType":"YulFunctionCall","src":"19822:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"19847:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"19818:3:201"},"nodeType":"YulFunctionCall","src":"19818:32:201"},"nodeType":"YulIf","src":"19815:52:201"},{"nodeType":"YulAssignment","src":"19876:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19903:9:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"19886:16:201"},"nodeType":"YulFunctionCall","src":"19886:27:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"19876:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"19922:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"19932:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"19926:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19943:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19974:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"19985:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19970:3:201"},"nodeType":"YulFunctionCall","src":"19970:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"19957:12:201"},"nodeType":"YulFunctionCall","src":"19957:32:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"19947:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19998:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"20008:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"20002:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"20053:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20062:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20065:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20055:6:201"},"nodeType":"YulFunctionCall","src":"20055:12:201"},"nodeType":"YulExpressionStatement","src":"20055:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"20041:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"20049:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20038:2:201"},"nodeType":"YulFunctionCall","src":"20038:14:201"},"nodeType":"YulIf","src":"20035:34:201"},{"nodeType":"YulVariableDeclaration","src":"20078:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20092:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"20103:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20088:3:201"},"nodeType":"YulFunctionCall","src":"20088:22:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"20082:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"20150:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20159:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20162:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20152:6:201"},"nodeType":"YulFunctionCall","src":"20152:12:201"},"nodeType":"YulExpressionStatement","src":"20152:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"20130:7:201"},{"name":"_3","nodeType":"YulIdentifier","src":"20139:2:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"20126:3:201"},"nodeType":"YulFunctionCall","src":"20126:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"20144:4:201","type":"","value":"0xa0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"20122:3:201"},"nodeType":"YulFunctionCall","src":"20122:27:201"},"nodeType":"YulIf","src":"20119:47:201"},{"nodeType":"YulVariableDeclaration","src":"20175:35:201","value":{"arguments":[],"functionName":{"name":"allocate_memory_5567","nodeType":"YulIdentifier","src":"20188:20:201"},"nodeType":"YulFunctionCall","src":"20188:22:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"20179:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20226:5:201"},{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20251:2:201"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"20233:17:201"},"nodeType":"YulFunctionCall","src":"20233:21:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20219:6:201"},"nodeType":"YulFunctionCall","src":"20219:36:201"},"nodeType":"YulExpressionStatement","src":"20219:36:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20275:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"20282:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20271:3:201"},"nodeType":"YulFunctionCall","src":"20271:14:201"},{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20309:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"20313:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20305:3:201"},"nodeType":"YulFunctionCall","src":"20305:11:201"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"20287:17:201"},"nodeType":"YulFunctionCall","src":"20287:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20264:6:201"},"nodeType":"YulFunctionCall","src":"20264:54:201"},"nodeType":"YulExpressionStatement","src":"20264:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20338:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"20345:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20334:3:201"},"nodeType":"YulFunctionCall","src":"20334:14:201"},{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20372:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"20376:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20368:3:201"},"nodeType":"YulFunctionCall","src":"20368:11:201"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"20350:17:201"},"nodeType":"YulFunctionCall","src":"20350:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20327:6:201"},"nodeType":"YulFunctionCall","src":"20327:54:201"},"nodeType":"YulExpressionStatement","src":"20327:54:201"},{"nodeType":"YulVariableDeclaration","src":"20390:40:201","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20422:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"20426:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20418:3:201"},"nodeType":"YulFunctionCall","src":"20418:11:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"20405:12:201"},"nodeType":"YulFunctionCall","src":"20405:25:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"20394:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"20464:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"20439:24:201"},"nodeType":"YulFunctionCall","src":"20439:33:201"},"nodeType":"YulExpressionStatement","src":"20439:33:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20492:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"20499:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20488:3:201"},"nodeType":"YulFunctionCall","src":"20488:14:201"},{"name":"value_1","nodeType":"YulIdentifier","src":"20504:7:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20481:6:201"},"nodeType":"YulFunctionCall","src":"20481:31:201"},"nodeType":"YulExpressionStatement","src":"20481:31:201"},{"nodeType":"YulVariableDeclaration","src":"20521:42:201","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20554:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"20558:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20550:3:201"},"nodeType":"YulFunctionCall","src":"20550:12:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"20537:12:201"},"nodeType":"YulFunctionCall","src":"20537:26:201"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"20525:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"20592:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20601:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20604:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20594:6:201"},"nodeType":"YulFunctionCall","src":"20594:12:201"},"nodeType":"YulExpressionStatement","src":"20594:12:201"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"20578:8:201"},{"name":"_2","nodeType":"YulIdentifier","src":"20588:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20575:2:201"},"nodeType":"YulFunctionCall","src":"20575:16:201"},"nodeType":"YulIf","src":"20572:36:201"},{"nodeType":"YulVariableDeclaration","src":"20617:27:201","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20631:2:201"},{"name":"offset_1","nodeType":"YulIdentifier","src":"20635:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20627:3:201"},"nodeType":"YulFunctionCall","src":"20627:17:201"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"20621:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"20692:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20701:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20704:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20694:6:201"},"nodeType":"YulFunctionCall","src":"20694:12:201"},"nodeType":"YulExpressionStatement","src":"20694:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"20671:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"20675:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20667:3:201"},"nodeType":"YulFunctionCall","src":"20667:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"20682:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"20663:3:201"},"nodeType":"YulFunctionCall","src":"20663:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"20656:6:201"},"nodeType":"YulFunctionCall","src":"20656:35:201"},"nodeType":"YulIf","src":"20653:55:201"},{"nodeType":"YulVariableDeclaration","src":"20717:26:201","value":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"20740:2:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"20727:12:201"},"nodeType":"YulFunctionCall","src":"20727:16:201"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"20721:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"20766:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"20768:16:201"},"nodeType":"YulFunctionCall","src":"20768:18:201"},"nodeType":"YulExpressionStatement","src":"20768:18:201"}]},"condition":{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"20758:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"20762:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20755:2:201"},"nodeType":"YulFunctionCall","src":"20755:10:201"},"nodeType":"YulIf","src":"20752:36:201"},{"nodeType":"YulVariableDeclaration","src":"20797:125:201","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"20838:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"20842:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20834:3:201"},"nodeType":"YulFunctionCall","src":"20834:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"20849:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20830:3:201"},"nodeType":"YulFunctionCall","src":"20830:86:201"},{"name":"_1","nodeType":"YulIdentifier","src":"20918:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20826:3:201"},"nodeType":"YulFunctionCall","src":"20826:95:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"20810:15:201"},"nodeType":"YulFunctionCall","src":"20810:112:201"},"variables":[{"name":"array","nodeType":"YulTypedName","src":"20801:5:201","type":""}]},{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"20938:5:201"},{"name":"_5","nodeType":"YulIdentifier","src":"20945:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20931:6:201"},"nodeType":"YulFunctionCall","src":"20931:17:201"},"nodeType":"YulExpressionStatement","src":"20931:17:201"},{"body":{"nodeType":"YulBlock","src":"20994:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21003:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21006:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20996:6:201"},"nodeType":"YulFunctionCall","src":"20996:12:201"},"nodeType":"YulExpressionStatement","src":"20996:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"20971:2:201"},{"name":"_5","nodeType":"YulIdentifier","src":"20975:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20967:3:201"},"nodeType":"YulFunctionCall","src":"20967:11:201"},{"name":"_1","nodeType":"YulIdentifier","src":"20980:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20963:3:201"},"nodeType":"YulFunctionCall","src":"20963:20:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"20985:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20960:2:201"},"nodeType":"YulFunctionCall","src":"20960:33:201"},"nodeType":"YulIf","src":"20957:53:201"},{"expression":{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"21036:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"21043:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21032:3:201"},"nodeType":"YulFunctionCall","src":"21032:14:201"},{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"21052:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"21056:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21048:3:201"},"nodeType":"YulFunctionCall","src":"21048:11:201"},{"name":"_5","nodeType":"YulIdentifier","src":"21061:2:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"21019:12:201"},"nodeType":"YulFunctionCall","src":"21019:45:201"},"nodeType":"YulExpressionStatement","src":"21019:45:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"21088:5:201"},{"name":"_5","nodeType":"YulIdentifier","src":"21095:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21084:3:201"},"nodeType":"YulFunctionCall","src":"21084:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"21100:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21080:3:201"},"nodeType":"YulFunctionCall","src":"21080:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"21105:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21073:6:201"},"nodeType":"YulFunctionCall","src":"21073:34:201"},"nodeType":"YulExpressionStatement","src":"21073:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21127:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"21134:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21123:3:201"},"nodeType":"YulFunctionCall","src":"21123:15:201"},{"name":"array","nodeType":"YulIdentifier","src":"21140:5:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21116:6:201"},"nodeType":"YulFunctionCall","src":"21116:30:201"},"nodeType":"YulExpressionStatement","src":"21116:30:201"},{"nodeType":"YulAssignment","src":"21155:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"21165:5:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"21155:6:201"}]}]},"name":"abi_decode_tuple_t_uint8t_struct$_EModeCategory_$21333_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19763:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"19774:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"19786:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"19794:6:201","type":""}],"src":"19688:1488:201"},{"body":{"nodeType":"YulBlock","src":"21336:581:201","statements":[{"body":{"nodeType":"YulBlock","src":"21383:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21392:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21395:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21385:6:201"},"nodeType":"YulFunctionCall","src":"21385:12:201"},"nodeType":"YulExpressionStatement","src":"21385:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"21357:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"21366:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21353:3:201"},"nodeType":"YulFunctionCall","src":"21353:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"21378:3:201","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"21349:3:201"},"nodeType":"YulFunctionCall","src":"21349:33:201"},"nodeType":"YulIf","src":"21346:53:201"},{"nodeType":"YulVariableDeclaration","src":"21408:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21434:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21421:12:201"},"nodeType":"YulFunctionCall","src":"21421:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"21412:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21478:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"21453:24:201"},"nodeType":"YulFunctionCall","src":"21453:31:201"},"nodeType":"YulExpressionStatement","src":"21453:31:201"},{"nodeType":"YulAssignment","src":"21493:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"21503:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"21493:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"21517:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21549:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21560:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21545:3:201"},"nodeType":"YulFunctionCall","src":"21545:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21532:12:201"},"nodeType":"YulFunctionCall","src":"21532:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"21521:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"21598:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"21573:24:201"},"nodeType":"YulFunctionCall","src":"21573:33:201"},"nodeType":"YulExpressionStatement","src":"21573:33:201"},{"nodeType":"YulAssignment","src":"21615:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"21625:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"21615:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"21641:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21673:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21684:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21669:3:201"},"nodeType":"YulFunctionCall","src":"21669:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21656:12:201"},"nodeType":"YulFunctionCall","src":"21656:32:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"21645:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"21722:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"21697:24:201"},"nodeType":"YulFunctionCall","src":"21697:33:201"},"nodeType":"YulExpressionStatement","src":"21697:33:201"},{"nodeType":"YulAssignment","src":"21739:17:201","value":{"name":"value_2","nodeType":"YulIdentifier","src":"21749:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"21739:6:201"}]},{"nodeType":"YulAssignment","src":"21765:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21792:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21803:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21788:3:201"},"nodeType":"YulFunctionCall","src":"21788:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21775:12:201"},"nodeType":"YulFunctionCall","src":"21775:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"21765:6:201"}]},{"nodeType":"YulAssignment","src":"21816:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21843:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21854:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21839:3:201"},"nodeType":"YulFunctionCall","src":"21839:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21826:12:201"},"nodeType":"YulFunctionCall","src":"21826:33:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"21816:6:201"}]},{"nodeType":"YulAssignment","src":"21868:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21895:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21906:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21891:3:201"},"nodeType":"YulFunctionCall","src":"21891:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21878:12:201"},"nodeType":"YulFunctionCall","src":"21878:33:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"21868:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21262:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"21273:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"21285:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"21293:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"21301:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"21309:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"21317:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"21325:6:201","type":""}],"src":"21181:736:201"},{"body":{"nodeType":"YulBlock","src":"22109:616:201","statements":[{"body":{"nodeType":"YulBlock","src":"22156:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22165:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"22168:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"22158:6:201"},"nodeType":"YulFunctionCall","src":"22158:12:201"},"nodeType":"YulExpressionStatement","src":"22158:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"22130:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"22139:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22126:3:201"},"nodeType":"YulFunctionCall","src":"22126:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"22151:3:201","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"22122:3:201"},"nodeType":"YulFunctionCall","src":"22122:33:201"},"nodeType":"YulIf","src":"22119:53:201"},{"nodeType":"YulVariableDeclaration","src":"22181:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22207:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22194:12:201"},"nodeType":"YulFunctionCall","src":"22194:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"22185:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"22251:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"22226:24:201"},"nodeType":"YulFunctionCall","src":"22226:31:201"},"nodeType":"YulExpressionStatement","src":"22226:31:201"},{"nodeType":"YulAssignment","src":"22266:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"22276:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"22266:6:201"}]},{"nodeType":"YulAssignment","src":"22290:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22317:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22328:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22313:3:201"},"nodeType":"YulFunctionCall","src":"22313:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22300:12:201"},"nodeType":"YulFunctionCall","src":"22300:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"22290:6:201"}]},{"nodeType":"YulAssignment","src":"22341:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22368:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22379:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22364:3:201"},"nodeType":"YulFunctionCall","src":"22364:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22351:12:201"},"nodeType":"YulFunctionCall","src":"22351:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"22341:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"22392:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22424:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22435:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22420:3:201"},"nodeType":"YulFunctionCall","src":"22420:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22407:12:201"},"nodeType":"YulFunctionCall","src":"22407:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"22396:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"22473:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"22448:24:201"},"nodeType":"YulFunctionCall","src":"22448:33:201"},"nodeType":"YulExpressionStatement","src":"22448:33:201"},{"nodeType":"YulAssignment","src":"22490:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"22500:7:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"22490:6:201"}]},{"nodeType":"YulAssignment","src":"22516:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22543:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22554:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22539:3:201"},"nodeType":"YulFunctionCall","src":"22539:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22526:12:201"},"nodeType":"YulFunctionCall","src":"22526:33:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"22516:6:201"}]},{"nodeType":"YulAssignment","src":"22568:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22599:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22610:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22595:3:201"},"nodeType":"YulFunctionCall","src":"22595:19:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"22578:16:201"},"nodeType":"YulFunctionCall","src":"22578:37:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"22568:6:201"}]},{"nodeType":"YulAssignment","src":"22624:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22651:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22662:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22647:3:201"},"nodeType":"YulFunctionCall","src":"22647:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22634:12:201"},"nodeType":"YulFunctionCall","src":"22634:33:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"22624:6:201"}]},{"nodeType":"YulAssignment","src":"22676:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22703:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22714:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22699:3:201"},"nodeType":"YulFunctionCall","src":"22699:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22686:12:201"},"nodeType":"YulFunctionCall","src":"22686:33:201"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"22676:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22019:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"22030:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"22042:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"22050:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"22058:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"22066:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"22074:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"22082:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"22090:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"22098:6:201","type":""}],"src":"21922:803:201"},{"body":{"nodeType":"YulBlock","src":"22861:348:201","statements":[{"nodeType":"YulVariableDeclaration","src":"22871:33:201","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"22885:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"22894:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22881:3:201"},"nodeType":"YulFunctionCall","src":"22881:23:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"22875:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"22928:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22937:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"22940:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"22930:6:201"},"nodeType":"YulFunctionCall","src":"22930:12:201"},"nodeType":"YulExpressionStatement","src":"22930:12:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"22920:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"22924:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"22916:3:201"},"nodeType":"YulFunctionCall","src":"22916:11:201"},"nodeType":"YulIf","src":"22913:31:201"},{"nodeType":"YulVariableDeclaration","src":"22953:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22979:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22966:12:201"},"nodeType":"YulFunctionCall","src":"22966:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"22957:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23023:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"22998:24:201"},"nodeType":"YulFunctionCall","src":"22998:31:201"},"nodeType":"YulExpressionStatement","src":"22998:31:201"},{"nodeType":"YulAssignment","src":"23038:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"23048:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"23038:6:201"}]},{"body":{"nodeType":"YulBlock","src":"23150:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23159:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"23162:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"23152:6:201"},"nodeType":"YulFunctionCall","src":"23152:12:201"},"nodeType":"YulExpressionStatement","src":"23152:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"23073:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"23077:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23069:3:201"},"nodeType":"YulFunctionCall","src":"23069:75:201"},{"kind":"number","nodeType":"YulLiteral","src":"23146:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"23065:3:201"},"nodeType":"YulFunctionCall","src":"23065:84:201"},"nodeType":"YulIf","src":"23062:104:201"},{"nodeType":"YulAssignment","src":"23175:28:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23189:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23200:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23185:3:201"},"nodeType":"YulFunctionCall","src":"23185:18:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"23175:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_struct$_ReserveConfigurationMap_$21318_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22819:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"22830:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"22842:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"22850:6:201","type":""}],"src":"22730:479:201"},{"body":{"nodeType":"YulBlock","src":"23313:89:201","statements":[{"nodeType":"YulAssignment","src":"23323:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23335:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23346:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23331:3:201"},"nodeType":"YulFunctionCall","src":"23331:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23323:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23365:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"23380:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"23388:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23376:3:201"},"nodeType":"YulFunctionCall","src":"23376:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23358:6:201"},"nodeType":"YulFunctionCall","src":"23358:38:201"},"nodeType":"YulExpressionStatement","src":"23358:38:201"}]},"name":"abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23282:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"23293:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23304:4:201","type":""}],"src":"23214:188:201"},{"body":{"nodeType":"YulBlock","src":"23488:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"23534:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23543:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"23546:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"23536:6:201"},"nodeType":"YulFunctionCall","src":"23536:12:201"},"nodeType":"YulExpressionStatement","src":"23536:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"23509:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"23518:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"23505:3:201"},"nodeType":"YulFunctionCall","src":"23505:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"23530:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"23501:3:201"},"nodeType":"YulFunctionCall","src":"23501:32:201"},"nodeType":"YulIf","src":"23498:52:201"},{"nodeType":"YulVariableDeclaration","src":"23559:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23578:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"23572:5:201"},"nodeType":"YulFunctionCall","src":"23572:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"23563:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23622:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"23597:24:201"},"nodeType":"YulFunctionCall","src":"23597:31:201"},"nodeType":"YulExpressionStatement","src":"23597:31:201"},{"nodeType":"YulAssignment","src":"23637:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"23647:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"23637:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23454:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"23465:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"23477:6:201","type":""}],"src":"23407:251:201"},{"body":{"nodeType":"YulBlock","src":"23704:50:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"23721:3:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23740:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"23733:6:201"},"nodeType":"YulFunctionCall","src":"23733:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"23726:6:201"},"nodeType":"YulFunctionCall","src":"23726:21:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23714:6:201"},"nodeType":"YulFunctionCall","src":"23714:34:201"},"nodeType":"YulExpressionStatement","src":"23714:34:201"}]},"name":"abi_encode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"23688:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"23695:3:201","type":""}],"src":"23663:91:201"},{"body":{"nodeType":"YulBlock","src":"23801:33:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"23810:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23819:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"23826:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23815:3:201"},"nodeType":"YulFunctionCall","src":"23815:16:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23803:6:201"},"nodeType":"YulFunctionCall","src":"23803:29:201"},"nodeType":"YulExpressionStatement","src":"23803:29:201"}]},"name":"abi_encode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"23785:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"23792:3:201","type":""}],"src":"23759:75:201"},{"body":{"nodeType":"YulBlock","src":"24344:1162:201","statements":[{"nodeType":"YulAssignment","src":"24354:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24366:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24377:3:201","type":"","value":"416"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24362:3:201"},"nodeType":"YulFunctionCall","src":"24362:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24354:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24397:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"24408:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24390:6:201"},"nodeType":"YulFunctionCall","src":"24390:25:201"},"nodeType":"YulExpressionStatement","src":"24390:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24435:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24446:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24431:3:201"},"nodeType":"YulFunctionCall","src":"24431:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"24451:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24424:6:201"},"nodeType":"YulFunctionCall","src":"24424:34:201"},"nodeType":"YulExpressionStatement","src":"24424:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24478:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24489:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24474:3:201"},"nodeType":"YulFunctionCall","src":"24474:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"24494:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24467:6:201"},"nodeType":"YulFunctionCall","src":"24467:34:201"},"nodeType":"YulExpressionStatement","src":"24467:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24521:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24532:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24517:3:201"},"nodeType":"YulFunctionCall","src":"24517:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"24537:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24510:6:201"},"nodeType":"YulFunctionCall","src":"24510:34:201"},"nodeType":"YulExpressionStatement","src":"24510:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24564:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24575:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24560:3:201"},"nodeType":"YulFunctionCall","src":"24560:19:201"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"24587:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24581:5:201"},"nodeType":"YulFunctionCall","src":"24581:13:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24553:6:201"},"nodeType":"YulFunctionCall","src":"24553:42:201"},"nodeType":"YulExpressionStatement","src":"24553:42:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24615:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24626:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24611:3:201"},"nodeType":"YulFunctionCall","src":"24611:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"24642:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"24650:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24638:3:201"},"nodeType":"YulFunctionCall","src":"24638:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24632:5:201"},"nodeType":"YulFunctionCall","src":"24632:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24604:6:201"},"nodeType":"YulFunctionCall","src":"24604:51:201"},"nodeType":"YulExpressionStatement","src":"24604:51:201"},{"nodeType":"YulVariableDeclaration","src":"24664:42:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"24694:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"24702:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24690:3:201"},"nodeType":"YulFunctionCall","src":"24690:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24684:5:201"},"nodeType":"YulFunctionCall","src":"24684:22:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"24668:12:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"24715:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"24725:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"24719:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24787:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24798:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24783:3:201"},"nodeType":"YulFunctionCall","src":"24783:19:201"},{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"24808:12:201"},{"name":"_1","nodeType":"YulIdentifier","src":"24822:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24804:3:201"},"nodeType":"YulFunctionCall","src":"24804:21:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24776:6:201"},"nodeType":"YulFunctionCall","src":"24776:50:201"},"nodeType":"YulExpressionStatement","src":"24776:50:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24846:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24857:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24842:3:201"},"nodeType":"YulFunctionCall","src":"24842:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"24877:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"24885:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24873:3:201"},"nodeType":"YulFunctionCall","src":"24873:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24867:5:201"},"nodeType":"YulFunctionCall","src":"24867:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"24891:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24863:3:201"},"nodeType":"YulFunctionCall","src":"24863:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24835:6:201"},"nodeType":"YulFunctionCall","src":"24835:60:201"},"nodeType":"YulExpressionStatement","src":"24835:60:201"},{"nodeType":"YulVariableDeclaration","src":"24904:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"24936:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"24944:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24932:3:201"},"nodeType":"YulFunctionCall","src":"24932:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24926:5:201"},"nodeType":"YulFunctionCall","src":"24926:23:201"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"24908:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"24958:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"24968:3:201","type":"","value":"256"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"24962:2:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"24999:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25019:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"25030:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25015:3:201"},"nodeType":"YulFunctionCall","src":"25015:18:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"24980:18:201"},"nodeType":"YulFunctionCall","src":"24980:54:201"},"nodeType":"YulExpressionStatement","src":"24980:54:201"},{"nodeType":"YulVariableDeclaration","src":"25043:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25075:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"25083:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25071:3:201"},"nodeType":"YulFunctionCall","src":"25071:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25065:5:201"},"nodeType":"YulFunctionCall","src":"25065:23:201"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"25047:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"25113:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25133:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25144:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25129:3:201"},"nodeType":"YulFunctionCall","src":"25129:19:201"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"25097:15:201"},"nodeType":"YulFunctionCall","src":"25097:52:201"},"nodeType":"YulExpressionStatement","src":"25097:52:201"},{"nodeType":"YulVariableDeclaration","src":"25158:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25190:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"25198:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25186:3:201"},"nodeType":"YulFunctionCall","src":"25186:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25180:5:201"},"nodeType":"YulFunctionCall","src":"25180:23:201"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"25162:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"25231:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25251:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25262:3:201","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25247:3:201"},"nodeType":"YulFunctionCall","src":"25247:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"25212:18:201"},"nodeType":"YulFunctionCall","src":"25212:55:201"},"nodeType":"YulExpressionStatement","src":"25212:55:201"},{"nodeType":"YulVariableDeclaration","src":"25276:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25308:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"25316:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25304:3:201"},"nodeType":"YulFunctionCall","src":"25304:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25298:5:201"},"nodeType":"YulFunctionCall","src":"25298:23:201"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"25280:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"25347:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25367:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25378:3:201","type":"","value":"352"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25363:3:201"},"nodeType":"YulFunctionCall","src":"25363:19:201"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"25330:16:201"},"nodeType":"YulFunctionCall","src":"25330:53:201"},"nodeType":"YulExpressionStatement","src":"25330:53:201"},{"nodeType":"YulVariableDeclaration","src":"25392:44:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25424:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"25432:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25420:3:201"},"nodeType":"YulFunctionCall","src":"25420:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25414:5:201"},"nodeType":"YulFunctionCall","src":"25414:22:201"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"25396:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"25464:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25484:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25495:3:201","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25480:3:201"},"nodeType":"YulFunctionCall","src":"25480:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"25445:18:201"},"nodeType":"YulFunctionCall","src":"25445:55:201"},"nodeType":"YulExpressionStatement","src":"25445:55:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24281:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"24292:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"24300:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"24308:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"24316:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"24324:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24335:4:201","type":""}],"src":"23839:1667:201"},{"body":{"nodeType":"YulBlock","src":"25776:428:201","statements":[{"nodeType":"YulAssignment","src":"25786:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25798:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25809:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25794:3:201"},"nodeType":"YulFunctionCall","src":"25794:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25786:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"25822:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"25832:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"25826:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25890:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"25905:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"25913:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25901:3:201"},"nodeType":"YulFunctionCall","src":"25901:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25883:6:201"},"nodeType":"YulFunctionCall","src":"25883:34:201"},"nodeType":"YulExpressionStatement","src":"25883:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25937:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25948:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25933:3:201"},"nodeType":"YulFunctionCall","src":"25933:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"25957:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"25965:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25953:3:201"},"nodeType":"YulFunctionCall","src":"25953:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25926:6:201"},"nodeType":"YulFunctionCall","src":"25926:43:201"},"nodeType":"YulExpressionStatement","src":"25926:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25989:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26000:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25985:3:201"},"nodeType":"YulFunctionCall","src":"25985:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"26005:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25978:6:201"},"nodeType":"YulFunctionCall","src":"25978:34:201"},"nodeType":"YulExpressionStatement","src":"25978:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26032:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26043:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26028:3:201"},"nodeType":"YulFunctionCall","src":"26028:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"26048:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26021:6:201"},"nodeType":"YulFunctionCall","src":"26021:34:201"},"nodeType":"YulExpressionStatement","src":"26021:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26075:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26086:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26071:3:201"},"nodeType":"YulFunctionCall","src":"26071:19:201"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"26096:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"26104:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26092:3:201"},"nodeType":"YulFunctionCall","src":"26092:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26064:6:201"},"nodeType":"YulFunctionCall","src":"26064:46:201"},"nodeType":"YulExpressionStatement","src":"26064:46:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26130:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26141:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26126:3:201"},"nodeType":"YulFunctionCall","src":"26126:19:201"},{"name":"value5","nodeType":"YulIdentifier","src":"26147:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26119:6:201"},"nodeType":"YulFunctionCall","src":"26119:35:201"},"nodeType":"YulExpressionStatement","src":"26119:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26174:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26185:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26170:3:201"},"nodeType":"YulFunctionCall","src":"26170:19:201"},{"name":"value6","nodeType":"YulIdentifier","src":"26191:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26163:6:201"},"nodeType":"YulFunctionCall","src":"26163:35:201"},"nodeType":"YulExpressionStatement","src":"26163:35:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25697:9:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"25708:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"25716:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"25724:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"25732:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"25740:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"25748:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"25756:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25767:4:201","type":""}],"src":"25511:693:201"},{"body":{"nodeType":"YulBlock","src":"26591:485:201","statements":[{"nodeType":"YulAssignment","src":"26601:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26613:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26624:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26609:3:201"},"nodeType":"YulFunctionCall","src":"26609:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26601:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26644:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"26655:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26637:6:201"},"nodeType":"YulFunctionCall","src":"26637:25:201"},"nodeType":"YulExpressionStatement","src":"26637:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26682:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26693:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26678:3:201"},"nodeType":"YulFunctionCall","src":"26678:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"26698:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26671:6:201"},"nodeType":"YulFunctionCall","src":"26671:34:201"},"nodeType":"YulExpressionStatement","src":"26671:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26725:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26736:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26721:3:201"},"nodeType":"YulFunctionCall","src":"26721:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"26741:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26714:6:201"},"nodeType":"YulFunctionCall","src":"26714:34:201"},"nodeType":"YulExpressionStatement","src":"26714:34:201"},{"nodeType":"YulVariableDeclaration","src":"26757:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"26767:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"26761:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26829:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26840:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26825:3:201"},"nodeType":"YulFunctionCall","src":"26825:18:201"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"26855:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26849:5:201"},"nodeType":"YulFunctionCall","src":"26849:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"26864:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26845:3:201"},"nodeType":"YulFunctionCall","src":"26845:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26818:6:201"},"nodeType":"YulFunctionCall","src":"26818:50:201"},"nodeType":"YulExpressionStatement","src":"26818:50:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26888:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26899:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26884:3:201"},"nodeType":"YulFunctionCall","src":"26884:19:201"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"26915:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"26923:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26911:3:201"},"nodeType":"YulFunctionCall","src":"26911:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26905:5:201"},"nodeType":"YulFunctionCall","src":"26905:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26877:6:201"},"nodeType":"YulFunctionCall","src":"26877:51:201"},"nodeType":"YulExpressionStatement","src":"26877:51:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26948:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26959:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26944:3:201"},"nodeType":"YulFunctionCall","src":"26944:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"26979:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"26987:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26975:3:201"},"nodeType":"YulFunctionCall","src":"26975:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26969:5:201"},"nodeType":"YulFunctionCall","src":"26969:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"26993:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26965:3:201"},"nodeType":"YulFunctionCall","src":"26965:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26937:6:201"},"nodeType":"YulFunctionCall","src":"26937:60:201"},"nodeType":"YulExpressionStatement","src":"26937:60:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27017:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"27028:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27013:3:201"},"nodeType":"YulFunctionCall","src":"27013:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"27048:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"27056:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27044:3:201"},"nodeType":"YulFunctionCall","src":"27044:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27038:5:201"},"nodeType":"YulFunctionCall","src":"27038:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"27062:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"27034:3:201"},"nodeType":"YulFunctionCall","src":"27034:35:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27006:6:201"},"nodeType":"YulFunctionCall","src":"27006:64:201"},"nodeType":"YulExpressionStatement","src":"27006:64:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteSupplyParams_$21407_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSupplyParams_$21407_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26536:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"26547:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"26555:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"26563:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"26571:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26582:4:201","type":""}],"src":"26209:867:201"},{"body":{"nodeType":"YulBlock","src":"27202:99:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27219:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"27230:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27212:6:201"},"nodeType":"YulFunctionCall","src":"27212:21:201"},"nodeType":"YulExpressionStatement","src":"27212:21:201"},{"nodeType":"YulAssignment","src":"27242:53:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"27268:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27280:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"27291:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27276:3:201"},"nodeType":"YulFunctionCall","src":"27276:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"27250:17:201"},"nodeType":"YulFunctionCall","src":"27250:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"27242:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"27171:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"27182:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"27193:4:201","type":""}],"src":"27081:220:201"},{"body":{"nodeType":"YulBlock","src":"27831:481:201","statements":[{"nodeType":"YulAssignment","src":"27841:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27853:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"27864:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27849:3:201"},"nodeType":"YulFunctionCall","src":"27849:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"27841:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27884:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"27895:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27877:6:201"},"nodeType":"YulFunctionCall","src":"27877:25:201"},"nodeType":"YulExpressionStatement","src":"27877:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27922:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"27933:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27918:3:201"},"nodeType":"YulFunctionCall","src":"27918:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"27938:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27911:6:201"},"nodeType":"YulFunctionCall","src":"27911:34:201"},"nodeType":"YulExpressionStatement","src":"27911:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27965:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"27976:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27961:3:201"},"nodeType":"YulFunctionCall","src":"27961:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"27981:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27954:6:201"},"nodeType":"YulFunctionCall","src":"27954:34:201"},"nodeType":"YulExpressionStatement","src":"27954:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28008:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"28019:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28004:3:201"},"nodeType":"YulFunctionCall","src":"28004:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"28024:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27997:6:201"},"nodeType":"YulFunctionCall","src":"27997:34:201"},"nodeType":"YulExpressionStatement","src":"27997:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28051:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"28062:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28047:3:201"},"nodeType":"YulFunctionCall","src":"28047:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"28068:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28040:6:201"},"nodeType":"YulFunctionCall","src":"28040:35:201"},"nodeType":"YulExpressionStatement","src":"28040:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28095:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"28106:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28091:3:201"},"nodeType":"YulFunctionCall","src":"28091:19:201"},{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"28118:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28112:5:201"},"nodeType":"YulFunctionCall","src":"28112:13:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28084:6:201"},"nodeType":"YulFunctionCall","src":"28084:42:201"},"nodeType":"YulExpressionStatement","src":"28084:42:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28146:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"28157:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28142:3:201"},"nodeType":"YulFunctionCall","src":"28142:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"28177:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"28185:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28173:3:201"},"nodeType":"YulFunctionCall","src":"28173:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28167:5:201"},"nodeType":"YulFunctionCall","src":"28167:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"28191:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"28163:3:201"},"nodeType":"YulFunctionCall","src":"28163:71:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28135:6:201"},"nodeType":"YulFunctionCall","src":"28135:100:201"},"nodeType":"YulExpressionStatement","src":"28135:100:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28255:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"28266:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28251:3:201"},"nodeType":"YulFunctionCall","src":"28251:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"28286:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"28294:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28282:3:201"},"nodeType":"YulFunctionCall","src":"28282:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28276:5:201"},"nodeType":"YulFunctionCall","src":"28276:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"28300:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"28272:3:201"},"nodeType":"YulFunctionCall","src":"28272:33:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28244:6:201"},"nodeType":"YulFunctionCall","src":"28244:62:201"},"nodeType":"YulExpressionStatement","src":"28244:62:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_mapping$_t_address_$_t_uint8_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"27760:9:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"27771:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"27779:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"27787:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"27795:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"27803:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"27811:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"27822:4:201","type":""}],"src":"27306:1006:201"},{"body":{"nodeType":"YulBlock","src":"28349:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28366:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28369:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28359:6:201"},"nodeType":"YulFunctionCall","src":"28359:88:201"},"nodeType":"YulExpressionStatement","src":"28359:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28463:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"28466:4:201","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28456:6:201"},"nodeType":"YulFunctionCall","src":"28456:15:201"},"nodeType":"YulExpressionStatement","src":"28456:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28487:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28490:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"28480:6:201"},"nodeType":"YulFunctionCall","src":"28480:15:201"},"nodeType":"YulExpressionStatement","src":"28480:15:201"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"28317:184:201"},{"body":{"nodeType":"YulBlock","src":"28564:243:201","statements":[{"body":{"nodeType":"YulBlock","src":"28606:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28627:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28630:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28620:6:201"},"nodeType":"YulFunctionCall","src":"28620:88:201"},"nodeType":"YulExpressionStatement","src":"28620:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28728:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"28731:4:201","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28721:6:201"},"nodeType":"YulFunctionCall","src":"28721:15:201"},"nodeType":"YulExpressionStatement","src":"28721:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28756:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28759:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"28749:6:201"},"nodeType":"YulFunctionCall","src":"28749:15:201"},"nodeType":"YulExpressionStatement","src":"28749:15:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"28587:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"28594:1:201","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"28584:2:201"},"nodeType":"YulFunctionCall","src":"28584:12:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"28577:6:201"},"nodeType":"YulFunctionCall","src":"28577:20:201"},"nodeType":"YulIf","src":"28574:200:201"},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"28790:3:201"},{"name":"value","nodeType":"YulIdentifier","src":"28795:5:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28783:6:201"},"nodeType":"YulFunctionCall","src":"28783:18:201"},"nodeType":"YulExpressionStatement","src":"28783:18:201"}]},"name":"abi_encode_enum_InterestRateMode","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"28548:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"28555:3:201","type":""}],"src":"28506:301:201"},{"body":{"nodeType":"YulBlock","src":"29192:616:201","statements":[{"nodeType":"YulAssignment","src":"29202:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29214:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29225:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29210:3:201"},"nodeType":"YulFunctionCall","src":"29210:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"29202:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29245:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"29256:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29238:6:201"},"nodeType":"YulFunctionCall","src":"29238:25:201"},"nodeType":"YulExpressionStatement","src":"29238:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29283:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29294:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29279:3:201"},"nodeType":"YulFunctionCall","src":"29279:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"29299:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29272:6:201"},"nodeType":"YulFunctionCall","src":"29272:34:201"},"nodeType":"YulExpressionStatement","src":"29272:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29326:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29337:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29322:3:201"},"nodeType":"YulFunctionCall","src":"29322:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"29342:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29315:6:201"},"nodeType":"YulFunctionCall","src":"29315:34:201"},"nodeType":"YulExpressionStatement","src":"29315:34:201"},{"nodeType":"YulVariableDeclaration","src":"29358:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"29368:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"29362:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29430:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29441:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29426:3:201"},"nodeType":"YulFunctionCall","src":"29426:18:201"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"29456:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29450:5:201"},"nodeType":"YulFunctionCall","src":"29450:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"29465:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"29446:3:201"},"nodeType":"YulFunctionCall","src":"29446:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29419:6:201"},"nodeType":"YulFunctionCall","src":"29419:50:201"},"nodeType":"YulExpressionStatement","src":"29419:50:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29489:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29500:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29485:3:201"},"nodeType":"YulFunctionCall","src":"29485:19:201"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"29516:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"29524:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29512:3:201"},"nodeType":"YulFunctionCall","src":"29512:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29506:5:201"},"nodeType":"YulFunctionCall","src":"29506:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29478:6:201"},"nodeType":"YulFunctionCall","src":"29478:51:201"},"nodeType":"YulExpressionStatement","src":"29478:51:201"},{"nodeType":"YulVariableDeclaration","src":"29538:42:201","value":{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"29568:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"29576:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29564:3:201"},"nodeType":"YulFunctionCall","src":"29564:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29558:5:201"},"nodeType":"YulFunctionCall","src":"29558:22:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"29542:12:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"29622:12:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29640:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29651:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29636:3:201"},"nodeType":"YulFunctionCall","src":"29636:19:201"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"29589:32:201"},"nodeType":"YulFunctionCall","src":"29589:67:201"},"nodeType":"YulExpressionStatement","src":"29589:67:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29676:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29687:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29672:3:201"},"nodeType":"YulFunctionCall","src":"29672:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"29707:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"29715:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29703:3:201"},"nodeType":"YulFunctionCall","src":"29703:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29697:5:201"},"nodeType":"YulFunctionCall","src":"29697:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"29721:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"29693:3:201"},"nodeType":"YulFunctionCall","src":"29693:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29665:6:201"},"nodeType":"YulFunctionCall","src":"29665:60:201"},"nodeType":"YulExpressionStatement","src":"29665:60:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29745:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29756:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29741:3:201"},"nodeType":"YulFunctionCall","src":"29741:19:201"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"29786:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"29794:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29782:3:201"},"nodeType":"YulFunctionCall","src":"29782:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29776:5:201"},"nodeType":"YulFunctionCall","src":"29776:23:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"29769:6:201"},"nodeType":"YulFunctionCall","src":"29769:31:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"29762:6:201"},"nodeType":"YulFunctionCall","src":"29762:39:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29734:6:201"},"nodeType":"YulFunctionCall","src":"29734:68:201"},"nodeType":"YulExpressionStatement","src":"29734:68:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteRepayParams_$21445_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteRepayParams_$21445_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"29137:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"29148:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"29156:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"29164:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"29172:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"29183:4:201","type":""}],"src":"28812:996:201"},{"body":{"nodeType":"YulBlock","src":"29894:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"29940:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29949:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"29952:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"29942:6:201"},"nodeType":"YulFunctionCall","src":"29942:12:201"},"nodeType":"YulExpressionStatement","src":"29942:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"29915:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"29924:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"29911:3:201"},"nodeType":"YulFunctionCall","src":"29911:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"29936:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"29907:3:201"},"nodeType":"YulFunctionCall","src":"29907:32:201"},"nodeType":"YulIf","src":"29904:52:201"},{"nodeType":"YulAssignment","src":"29965:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29981:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29975:5:201"},"nodeType":"YulFunctionCall","src":"29975:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"29965:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"29860:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"29871:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"29883:6:201","type":""}],"src":"29813:184:201"},{"body":{"nodeType":"YulBlock","src":"30246:716:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30263:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"30274:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30256:6:201"},"nodeType":"YulFunctionCall","src":"30256:25:201"},"nodeType":"YulExpressionStatement","src":"30256:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30301:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"30312:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30297:3:201"},"nodeType":"YulFunctionCall","src":"30297:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"30317:2:201","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30290:6:201"},"nodeType":"YulFunctionCall","src":"30290:30:201"},"nodeType":"YulExpressionStatement","src":"30290:30:201"},{"nodeType":"YulVariableDeclaration","src":"30329:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"30339:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"30333:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30401:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"30412:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30397:3:201"},"nodeType":"YulFunctionCall","src":"30397:18:201"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30427:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30421:5:201"},"nodeType":"YulFunctionCall","src":"30421:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"30436:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30417:3:201"},"nodeType":"YulFunctionCall","src":"30417:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30390:6:201"},"nodeType":"YulFunctionCall","src":"30390:50:201"},"nodeType":"YulExpressionStatement","src":"30390:50:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30460:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"30471:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30456:3:201"},"nodeType":"YulFunctionCall","src":"30456:18:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30490:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"30498:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30486:3:201"},"nodeType":"YulFunctionCall","src":"30486:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30480:5:201"},"nodeType":"YulFunctionCall","src":"30480:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"30504:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30476:3:201"},"nodeType":"YulFunctionCall","src":"30476:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30449:6:201"},"nodeType":"YulFunctionCall","src":"30449:59:201"},"nodeType":"YulExpressionStatement","src":"30449:59:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30528:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"30539:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30524:3:201"},"nodeType":"YulFunctionCall","src":"30524:19:201"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30555:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"30563:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30551:3:201"},"nodeType":"YulFunctionCall","src":"30551:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30545:5:201"},"nodeType":"YulFunctionCall","src":"30545:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30517:6:201"},"nodeType":"YulFunctionCall","src":"30517:51:201"},"nodeType":"YulExpressionStatement","src":"30517:51:201"},{"nodeType":"YulVariableDeclaration","src":"30577:42:201","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30607:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"30615:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30603:3:201"},"nodeType":"YulFunctionCall","src":"30603:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30597:5:201"},"nodeType":"YulFunctionCall","src":"30597:22:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"30581:12:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30639:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"30650:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30635:3:201"},"nodeType":"YulFunctionCall","src":"30635:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"30656:4:201","type":"","value":"0xe0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30628:6:201"},"nodeType":"YulFunctionCall","src":"30628:33:201"},"nodeType":"YulExpressionStatement","src":"30628:33:201"},{"nodeType":"YulVariableDeclaration","src":"30670:66:201","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"30702:12:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30720:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"30731:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30716:3:201"},"nodeType":"YulFunctionCall","src":"30716:19:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"30684:17:201"},"nodeType":"YulFunctionCall","src":"30684:52:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"30674:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30756:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"30767:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30752:3:201"},"nodeType":"YulFunctionCall","src":"30752:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30787:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"30795:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30783:3:201"},"nodeType":"YulFunctionCall","src":"30783:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30777:5:201"},"nodeType":"YulFunctionCall","src":"30777:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"30802:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30773:3:201"},"nodeType":"YulFunctionCall","src":"30773:36:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30745:6:201"},"nodeType":"YulFunctionCall","src":"30745:65:201"},"nodeType":"YulExpressionStatement","src":"30745:65:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30830:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"30841:4:201","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30826:3:201"},"nodeType":"YulFunctionCall","src":"30826:20:201"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30858:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"30866:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30854:3:201"},"nodeType":"YulFunctionCall","src":"30854:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30848:5:201"},"nodeType":"YulFunctionCall","src":"30848:23:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30819:6:201"},"nodeType":"YulFunctionCall","src":"30819:53:201"},"nodeType":"YulExpressionStatement","src":"30819:53:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30892:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"30903:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30888:3:201"},"nodeType":"YulFunctionCall","src":"30888:19:201"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30919:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"30927:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30915:3:201"},"nodeType":"YulFunctionCall","src":"30915:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30909:5:201"},"nodeType":"YulFunctionCall","src":"30909:23:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30881:6:201"},"nodeType":"YulFunctionCall","src":"30881:52:201"},"nodeType":"YulExpressionStatement","src":"30881:52:201"},{"nodeType":"YulAssignment","src":"30942:14:201","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"30950:6:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"30942:4:201"}]}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$21315_storage_t_struct$_FlashloanSimpleParams_$21531_memory_ptr__to_t_uint256_t_struct$_FlashloanSimpleParams_$21531_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"30207:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"30218:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"30226:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"30237:4:201","type":""}],"src":"30002:960:201"},{"body":{"nodeType":"YulBlock","src":"31454:545:201","statements":[{"nodeType":"YulAssignment","src":"31464:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31476:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"31487:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31472:3:201"},"nodeType":"YulFunctionCall","src":"31472:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"31464:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31507:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"31518:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31500:6:201"},"nodeType":"YulFunctionCall","src":"31500:25:201"},"nodeType":"YulExpressionStatement","src":"31500:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31545:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"31556:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31541:3:201"},"nodeType":"YulFunctionCall","src":"31541:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"31561:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31534:6:201"},"nodeType":"YulFunctionCall","src":"31534:34:201"},"nodeType":"YulExpressionStatement","src":"31534:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31588:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"31599:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31584:3:201"},"nodeType":"YulFunctionCall","src":"31584:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"31604:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31577:6:201"},"nodeType":"YulFunctionCall","src":"31577:34:201"},"nodeType":"YulExpressionStatement","src":"31577:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31631:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"31642:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31627:3:201"},"nodeType":"YulFunctionCall","src":"31627:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"31647:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31620:6:201"},"nodeType":"YulFunctionCall","src":"31620:34:201"},"nodeType":"YulExpressionStatement","src":"31620:34:201"},{"nodeType":"YulVariableDeclaration","src":"31663:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"31673:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"31667:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31735:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"31746:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31731:3:201"},"nodeType":"YulFunctionCall","src":"31731:19:201"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"31756:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"31764:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"31752:3:201"},"nodeType":"YulFunctionCall","src":"31752:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31724:6:201"},"nodeType":"YulFunctionCall","src":"31724:44:201"},"nodeType":"YulExpressionStatement","src":"31724:44:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31788:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"31799:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31784:3:201"},"nodeType":"YulFunctionCall","src":"31784:19:201"},{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"31819:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"31812:6:201"},"nodeType":"YulFunctionCall","src":"31812:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"31805:6:201"},"nodeType":"YulFunctionCall","src":"31805:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31777:6:201"},"nodeType":"YulFunctionCall","src":"31777:51:201"},"nodeType":"YulExpressionStatement","src":"31777:51:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31848:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"31859:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31844:3:201"},"nodeType":"YulFunctionCall","src":"31844:19:201"},{"arguments":[{"name":"value6","nodeType":"YulIdentifier","src":"31869:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"31877:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"31865:3:201"},"nodeType":"YulFunctionCall","src":"31865:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31837:6:201"},"nodeType":"YulFunctionCall","src":"31837:48:201"},"nodeType":"YulExpressionStatement","src":"31837:48:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31905:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"31916:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31901:3:201"},"nodeType":"YulFunctionCall","src":"31901:19:201"},{"arguments":[{"name":"value7","nodeType":"YulIdentifier","src":"31926:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"31934:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"31922:3:201"},"nodeType":"YulFunctionCall","src":"31922:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31894:6:201"},"nodeType":"YulFunctionCall","src":"31894:44:201"},"nodeType":"YulExpressionStatement","src":"31894:44:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31958:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"31969:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31954:3:201"},"nodeType":"YulFunctionCall","src":"31954:19:201"},{"arguments":[{"name":"value8","nodeType":"YulIdentifier","src":"31979:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"31987:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"31975:3:201"},"nodeType":"YulFunctionCall","src":"31975:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31947:6:201"},"nodeType":"YulFunctionCall","src":"31947:46:201"},"nodeType":"YulExpressionStatement","src":"31947:46:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_t_address_t_bool_t_uint16_t_address_t_uint8__to_t_uint256_t_uint256_t_uint256_t_uint256_t_address_t_bool_t_uint256_t_address_t_uint8__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"31359:9:201","type":""},{"name":"value8","nodeType":"YulTypedName","src":"31370:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"31378:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"31386:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"31394:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"31402:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"31410:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"31418:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"31426:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"31434:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"31445:4:201","type":""}],"src":"30967:1032:201"},{"body":{"nodeType":"YulBlock","src":"32470:658:201","statements":[{"nodeType":"YulAssignment","src":"32480:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32492:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"32503:3:201","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32488:3:201"},"nodeType":"YulFunctionCall","src":"32488:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"32480:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32523:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"32534:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32516:6:201"},"nodeType":"YulFunctionCall","src":"32516:25:201"},"nodeType":"YulExpressionStatement","src":"32516:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32561:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"32572:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32557:3:201"},"nodeType":"YulFunctionCall","src":"32557:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"32577:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32550:6:201"},"nodeType":"YulFunctionCall","src":"32550:34:201"},"nodeType":"YulExpressionStatement","src":"32550:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32604:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"32615:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32600:3:201"},"nodeType":"YulFunctionCall","src":"32600:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"32620:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32593:6:201"},"nodeType":"YulFunctionCall","src":"32593:34:201"},"nodeType":"YulExpressionStatement","src":"32593:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32647:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"32658:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32643:3:201"},"nodeType":"YulFunctionCall","src":"32643:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"32663:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32636:6:201"},"nodeType":"YulFunctionCall","src":"32636:34:201"},"nodeType":"YulExpressionStatement","src":"32636:34:201"},{"nodeType":"YulVariableDeclaration","src":"32679:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"32689:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"32683:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32751:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"32762:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32747:3:201"},"nodeType":"YulFunctionCall","src":"32747:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"32778:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"32772:5:201"},"nodeType":"YulFunctionCall","src":"32772:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"32787:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"32768:3:201"},"nodeType":"YulFunctionCall","src":"32768:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32740:6:201"},"nodeType":"YulFunctionCall","src":"32740:51:201"},"nodeType":"YulExpressionStatement","src":"32740:51:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32811:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"32822:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32807:3:201"},"nodeType":"YulFunctionCall","src":"32807:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"32838:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"32846:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32834:3:201"},"nodeType":"YulFunctionCall","src":"32834:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"32828:5:201"},"nodeType":"YulFunctionCall","src":"32828:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32800:6:201"},"nodeType":"YulFunctionCall","src":"32800:51:201"},"nodeType":"YulExpressionStatement","src":"32800:51:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32871:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"32882:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32867:3:201"},"nodeType":"YulFunctionCall","src":"32867:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"32902:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"32910:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32898:3:201"},"nodeType":"YulFunctionCall","src":"32898:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"32892:5:201"},"nodeType":"YulFunctionCall","src":"32892:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"32916:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"32888:3:201"},"nodeType":"YulFunctionCall","src":"32888:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32860:6:201"},"nodeType":"YulFunctionCall","src":"32860:60:201"},"nodeType":"YulExpressionStatement","src":"32860:60:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32940:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"32951:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32936:3:201"},"nodeType":"YulFunctionCall","src":"32936:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"32967:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"32975:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32963:3:201"},"nodeType":"YulFunctionCall","src":"32963:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"32957:5:201"},"nodeType":"YulFunctionCall","src":"32957:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32929:6:201"},"nodeType":"YulFunctionCall","src":"32929:51:201"},"nodeType":"YulExpressionStatement","src":"32929:51:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33000:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"33011:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32996:3:201"},"nodeType":"YulFunctionCall","src":"32996:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"33031:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"33039:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33027:3:201"},"nodeType":"YulFunctionCall","src":"33027:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33021:5:201"},"nodeType":"YulFunctionCall","src":"33021:23:201"},{"name":"_1","nodeType":"YulIdentifier","src":"33046:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"33017:3:201"},"nodeType":"YulFunctionCall","src":"33017:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32989:6:201"},"nodeType":"YulFunctionCall","src":"32989:61:201"},"nodeType":"YulExpressionStatement","src":"32989:61:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33070:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"33081:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33066:3:201"},"nodeType":"YulFunctionCall","src":"33066:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"33101:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"33109:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33097:3:201"},"nodeType":"YulFunctionCall","src":"33097:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33091:5:201"},"nodeType":"YulFunctionCall","src":"33091:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"33116:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"33087:3:201"},"nodeType":"YulFunctionCall","src":"33087:34:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33059:6:201"},"nodeType":"YulFunctionCall","src":"33059:63:201"},"nodeType":"YulExpressionStatement","src":"33059:63:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteWithdrawParams_$21458_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteWithdrawParams_$21458_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"32407:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"32418:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"32426:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"32434:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"32442:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"32450:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"32461:4:201","type":""}],"src":"32004:1124:201"},{"body":{"nodeType":"YulBlock","src":"33521:430:201","statements":[{"nodeType":"YulAssignment","src":"33531:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33543:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"33554:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33539:3:201"},"nodeType":"YulFunctionCall","src":"33539:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"33531:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33574:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"33585:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33567:6:201"},"nodeType":"YulFunctionCall","src":"33567:25:201"},"nodeType":"YulExpressionStatement","src":"33567:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33612:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"33623:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33608:3:201"},"nodeType":"YulFunctionCall","src":"33608:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"33628:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33601:6:201"},"nodeType":"YulFunctionCall","src":"33601:34:201"},"nodeType":"YulExpressionStatement","src":"33601:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33655:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"33666:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33651:3:201"},"nodeType":"YulFunctionCall","src":"33651:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"33671:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33644:6:201"},"nodeType":"YulFunctionCall","src":"33644:34:201"},"nodeType":"YulExpressionStatement","src":"33644:34:201"},{"nodeType":"YulVariableDeclaration","src":"33687:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"33697:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"33691:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33759:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"33770:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33755:3:201"},"nodeType":"YulFunctionCall","src":"33755:18:201"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"33779:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"33787:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"33775:3:201"},"nodeType":"YulFunctionCall","src":"33775:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33748:6:201"},"nodeType":"YulFunctionCall","src":"33748:43:201"},"nodeType":"YulExpressionStatement","src":"33748:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33811:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"33822:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33807:3:201"},"nodeType":"YulFunctionCall","src":"33807:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"33828:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33800:6:201"},"nodeType":"YulFunctionCall","src":"33800:35:201"},"nodeType":"YulExpressionStatement","src":"33800:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33855:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"33866:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33851:3:201"},"nodeType":"YulFunctionCall","src":"33851:19:201"},{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"33876:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"33884:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"33872:3:201"},"nodeType":"YulFunctionCall","src":"33872:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33844:6:201"},"nodeType":"YulFunctionCall","src":"33844:44:201"},"nodeType":"YulExpressionStatement","src":"33844:44:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33908:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"33919:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33904:3:201"},"nodeType":"YulFunctionCall","src":"33904:19:201"},{"arguments":[{"name":"value6","nodeType":"YulIdentifier","src":"33929:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"33937:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"33925:3:201"},"nodeType":"YulFunctionCall","src":"33925:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33897:6:201"},"nodeType":"YulFunctionCall","src":"33897:48:201"},"nodeType":"YulExpressionStatement","src":"33897:48:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_t_address_t_uint256_t_address_t_uint16__to_t_uint256_t_uint256_t_uint256_t_address_t_uint256_t_address_t_uint16__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"33442:9:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"33453:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"33461:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"33469:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"33477:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"33485:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"33493:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"33501:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"33512:4:201","type":""}],"src":"33133:818:201"},{"body":{"nodeType":"YulBlock","src":"34011:382:201","statements":[{"nodeType":"YulAssignment","src":"34021:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"34035:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"34038:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"34031:3:201"},"nodeType":"YulFunctionCall","src":"34031:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"34021:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"34052:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"34082:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"34088:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34078:3:201"},"nodeType":"YulFunctionCall","src":"34078:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"34056:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"34129:31:201","statements":[{"nodeType":"YulAssignment","src":"34131:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"34145:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"34153:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34141:3:201"},"nodeType":"YulFunctionCall","src":"34141:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"34131:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"34109:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"34102:6:201"},"nodeType":"YulFunctionCall","src":"34102:26:201"},"nodeType":"YulIf","src":"34099:61:201"},{"body":{"nodeType":"YulBlock","src":"34219:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"34240:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"34243:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34233:6:201"},"nodeType":"YulFunctionCall","src":"34233:88:201"},"nodeType":"YulExpressionStatement","src":"34233:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"34341:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"34344:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34334:6:201"},"nodeType":"YulFunctionCall","src":"34334:15:201"},"nodeType":"YulExpressionStatement","src":"34334:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"34369:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"34372:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"34362:6:201"},"nodeType":"YulFunctionCall","src":"34362:15:201"},"nodeType":"YulExpressionStatement","src":"34362:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"34175:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"34198:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"34206:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"34195:2:201"},"nodeType":"YulFunctionCall","src":"34195:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"34172:2:201"},"nodeType":"YulFunctionCall","src":"34172:38:201"},"nodeType":"YulIf","src":"34169:218:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"33991:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"34000:6:201","type":""}],"src":"33956:437:201"},{"body":{"nodeType":"YulBlock","src":"34712:746:201","statements":[{"nodeType":"YulAssignment","src":"34722:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34734:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"34745:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34730:3:201"},"nodeType":"YulFunctionCall","src":"34730:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"34722:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34765:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"34776:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34758:6:201"},"nodeType":"YulFunctionCall","src":"34758:25:201"},"nodeType":"YulExpressionStatement","src":"34758:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34803:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"34814:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34799:3:201"},"nodeType":"YulFunctionCall","src":"34799:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"34819:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34792:6:201"},"nodeType":"YulFunctionCall","src":"34792:34:201"},"nodeType":"YulExpressionStatement","src":"34792:34:201"},{"nodeType":"YulVariableDeclaration","src":"34835:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"34845:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"34839:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34907:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"34918:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34903:3:201"},"nodeType":"YulFunctionCall","src":"34903:18:201"},{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"34933:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"34927:5:201"},"nodeType":"YulFunctionCall","src":"34927:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"34942:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34923:3:201"},"nodeType":"YulFunctionCall","src":"34923:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34896:6:201"},"nodeType":"YulFunctionCall","src":"34896:50:201"},"nodeType":"YulExpressionStatement","src":"34896:50:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34966:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"34977:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34962:3:201"},"nodeType":"YulFunctionCall","src":"34962:18:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"34996:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"35004:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34992:3:201"},"nodeType":"YulFunctionCall","src":"34992:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"34986:5:201"},"nodeType":"YulFunctionCall","src":"34986:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"35010:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34982:3:201"},"nodeType":"YulFunctionCall","src":"34982:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34955:6:201"},"nodeType":"YulFunctionCall","src":"34955:59:201"},"nodeType":"YulExpressionStatement","src":"34955:59:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35034:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"35045:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35030:3:201"},"nodeType":"YulFunctionCall","src":"35030:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"35065:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"35073:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35061:3:201"},"nodeType":"YulFunctionCall","src":"35061:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35055:5:201"},"nodeType":"YulFunctionCall","src":"35055:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"35079:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35051:3:201"},"nodeType":"YulFunctionCall","src":"35051:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35023:6:201"},"nodeType":"YulFunctionCall","src":"35023:60:201"},"nodeType":"YulExpressionStatement","src":"35023:60:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35103:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"35114:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35099:3:201"},"nodeType":"YulFunctionCall","src":"35099:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"35134:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"35142:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35130:3:201"},"nodeType":"YulFunctionCall","src":"35130:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35124:5:201"},"nodeType":"YulFunctionCall","src":"35124:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"35148:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35120:3:201"},"nodeType":"YulFunctionCall","src":"35120:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35092:6:201"},"nodeType":"YulFunctionCall","src":"35092:60:201"},"nodeType":"YulExpressionStatement","src":"35092:60:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35172:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"35183:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35168:3:201"},"nodeType":"YulFunctionCall","src":"35168:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"35203:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"35211:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35199:3:201"},"nodeType":"YulFunctionCall","src":"35199:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35193:5:201"},"nodeType":"YulFunctionCall","src":"35193:23:201"},{"name":"_1","nodeType":"YulIdentifier","src":"35218:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35189:3:201"},"nodeType":"YulFunctionCall","src":"35189:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35161:6:201"},"nodeType":"YulFunctionCall","src":"35161:61:201"},"nodeType":"YulExpressionStatement","src":"35161:61:201"},{"nodeType":"YulVariableDeclaration","src":"35231:43:201","value":{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"35261:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"35269:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35257:3:201"},"nodeType":"YulFunctionCall","src":"35257:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35251:5:201"},"nodeType":"YulFunctionCall","src":"35251:23:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"35235:12:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"35301:12:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35319:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"35330:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35315:3:201"},"nodeType":"YulFunctionCall","src":"35315:19:201"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"35283:17:201"},"nodeType":"YulFunctionCall","src":"35283:52:201"},"nodeType":"YulExpressionStatement","src":"35283:52:201"},{"nodeType":"YulVariableDeclaration","src":"35344:45:201","value":{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"35376:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"35384:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35372:3:201"},"nodeType":"YulFunctionCall","src":"35372:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35366:5:201"},"nodeType":"YulFunctionCall","src":"35366:23:201"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"35348:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"35416:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35436:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"35447:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35432:3:201"},"nodeType":"YulFunctionCall","src":"35432:19:201"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"35398:17:201"},"nodeType":"YulFunctionCall","src":"35398:54:201"},"nodeType":"YulExpressionStatement","src":"35398:54:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_InitReserveParams_$21632_memory_ptr__to_t_uint256_t_uint256_t_struct$_InitReserveParams_$21632_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"34665:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"34676:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"34684:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"34692:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"34703:4:201","type":""}],"src":"34398:1060:201"},{"body":{"nodeType":"YulBlock","src":"35541:167:201","statements":[{"body":{"nodeType":"YulBlock","src":"35587:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"35596:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"35599:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"35589:6:201"},"nodeType":"YulFunctionCall","src":"35589:12:201"},"nodeType":"YulExpressionStatement","src":"35589:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"35562:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"35571:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"35558:3:201"},"nodeType":"YulFunctionCall","src":"35558:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"35583:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"35554:3:201"},"nodeType":"YulFunctionCall","src":"35554:32:201"},"nodeType":"YulIf","src":"35551:52:201"},{"nodeType":"YulVariableDeclaration","src":"35612:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35631:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35625:5:201"},"nodeType":"YulFunctionCall","src":"35625:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"35616:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"35672:5:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"35650:21:201"},"nodeType":"YulFunctionCall","src":"35650:28:201"},"nodeType":"YulExpressionStatement","src":"35650:28:201"},{"nodeType":"YulAssignment","src":"35687:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"35697:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"35687:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"35507:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"35518:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"35530:6:201","type":""}],"src":"35463:245:201"},{"body":{"nodeType":"YulBlock","src":"35745:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"35762:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"35765:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35755:6:201"},"nodeType":"YulFunctionCall","src":"35755:88:201"},"nodeType":"YulExpressionStatement","src":"35755:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"35859:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"35862:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35852:6:201"},"nodeType":"YulFunctionCall","src":"35852:15:201"},"nodeType":"YulExpressionStatement","src":"35852:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"35883:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"35886:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"35876:6:201"},"nodeType":"YulFunctionCall","src":"35876:15:201"},"nodeType":"YulExpressionStatement","src":"35876:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"35713:184:201"},{"body":{"nodeType":"YulBlock","src":"35948:151:201","statements":[{"nodeType":"YulVariableDeclaration","src":"35958:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"35968:6:201","type":"","value":"0xffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"35962:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"35983:29:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"36002:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"36009:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35998:3:201"},"nodeType":"YulFunctionCall","src":"35998:14:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"35987:7:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"36040:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"36042:16:201"},"nodeType":"YulFunctionCall","src":"36042:18:201"},"nodeType":"YulExpressionStatement","src":"36042:18:201"}]},"condition":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"36027:7:201"},{"name":"_1","nodeType":"YulIdentifier","src":"36036:2:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"36024:2:201"},"nodeType":"YulFunctionCall","src":"36024:15:201"},"nodeType":"YulIf","src":"36021:41:201"},{"nodeType":"YulAssignment","src":"36071:22:201","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"36082:7:201"},{"kind":"number","nodeType":"YulLiteral","src":"36091:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36078:3:201"},"nodeType":"YulFunctionCall","src":"36078:15:201"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"36071:3:201"}]}]},"name":"increment_t_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"35930:5:201","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"35940:3:201","type":""}],"src":"35902:197:201"},{"body":{"nodeType":"YulBlock","src":"36380:281:201","statements":[{"nodeType":"YulAssignment","src":"36390:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36402:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"36413:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36398:3:201"},"nodeType":"YulFunctionCall","src":"36398:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"36390:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36433:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"36444:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36426:6:201"},"nodeType":"YulFunctionCall","src":"36426:25:201"},"nodeType":"YulExpressionStatement","src":"36426:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36471:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"36482:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36467:3:201"},"nodeType":"YulFunctionCall","src":"36467:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"36487:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36460:6:201"},"nodeType":"YulFunctionCall","src":"36460:34:201"},"nodeType":"YulExpressionStatement","src":"36460:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36514:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"36525:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36510:3:201"},"nodeType":"YulFunctionCall","src":"36510:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"36534:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"36542:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36530:3:201"},"nodeType":"YulFunctionCall","src":"36530:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36503:6:201"},"nodeType":"YulFunctionCall","src":"36503:83:201"},"nodeType":"YulExpressionStatement","src":"36503:83:201"},{"expression":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"36628:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36640:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"36651:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36636:3:201"},"nodeType":"YulFunctionCall","src":"36636:18:201"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"36595:32:201"},"nodeType":"YulFunctionCall","src":"36595:60:201"},"nodeType":"YulExpressionStatement","src":"36595:60:201"}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$21315_storage_t_struct$_UserConfigurationMap_$21322_storage_t_address_t_enum$_InterestRateMode_$21337__to_t_uint256_t_uint256_t_address_t_uint8__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"36325:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"36336:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"36344:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"36352:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"36360:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"36371:4:201","type":""}],"src":"36104:557:201"},{"body":{"nodeType":"YulBlock","src":"36915:610:201","statements":[{"nodeType":"YulVariableDeclaration","src":"36925:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36943:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"36954:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36939:3:201"},"nodeType":"YulFunctionCall","src":"36939:18:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"36929:6:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36973:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"36984:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36966:6:201"},"nodeType":"YulFunctionCall","src":"36966:25:201"},"nodeType":"YulExpressionStatement","src":"36966:25:201"},{"nodeType":"YulVariableDeclaration","src":"37000:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"37010:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"37004:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37032:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"37043:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37028:3:201"},"nodeType":"YulFunctionCall","src":"37028:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"37048:2:201","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37021:6:201"},"nodeType":"YulFunctionCall","src":"37021:30:201"},"nodeType":"YulExpressionStatement","src":"37021:30:201"},{"nodeType":"YulVariableDeclaration","src":"37060:17:201","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"37071:6:201"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"37064:3:201","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"37093:6:201"},{"name":"value2","nodeType":"YulIdentifier","src":"37101:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37086:6:201"},"nodeType":"YulFunctionCall","src":"37086:22:201"},"nodeType":"YulExpressionStatement","src":"37086:22:201"},{"nodeType":"YulAssignment","src":"37117:25:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37128:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"37139:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37124:3:201"},"nodeType":"YulFunctionCall","src":"37124:18:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"37117:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"37151:20:201","value":{"name":"value1","nodeType":"YulIdentifier","src":"37165:6:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"37155:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"37180:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"37189:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"37184:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"37248:251:201","statements":[{"nodeType":"YulVariableDeclaration","src":"37262:33:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"37288:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"37275:12:201"},"nodeType":"YulFunctionCall","src":"37275:20:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"37266:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"37333:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"37308:24:201"},"nodeType":"YulFunctionCall","src":"37308:31:201"},"nodeType":"YulExpressionStatement","src":"37308:31:201"},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"37359:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"37368:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"37375:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"37364:3:201"},"nodeType":"YulFunctionCall","src":"37364:54:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37352:6:201"},"nodeType":"YulFunctionCall","src":"37352:67:201"},"nodeType":"YulExpressionStatement","src":"37352:67:201"},{"nodeType":"YulAssignment","src":"37432:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"37443:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"37448:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37439:3:201"},"nodeType":"YulFunctionCall","src":"37439:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"37432:3:201"}]},{"nodeType":"YulAssignment","src":"37464:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"37478:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"37486:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37474:3:201"},"nodeType":"YulFunctionCall","src":"37474:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"37464:6:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"37210:1:201"},{"name":"value2","nodeType":"YulIdentifier","src":"37213:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"37207:2:201"},"nodeType":"YulFunctionCall","src":"37207:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"37221:18:201","statements":[{"nodeType":"YulAssignment","src":"37223:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"37232:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"37235:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37228:3:201"},"nodeType":"YulFunctionCall","src":"37228:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"37223:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"37203:3:201","statements":[]},"src":"37199:300:201"},{"nodeType":"YulAssignment","src":"37508:11:201","value":{"name":"pos","nodeType":"YulIdentifier","src":"37516:3:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"37508:4:201"}]}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_array$_t_address_$dyn_calldata_ptr__to_t_uint256_t_array$_t_address_$dyn_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"36868:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"36879:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"36887:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"36895:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"36906:4:201","type":""}],"src":"36666:859:201"},{"body":{"nodeType":"YulBlock","src":"37992:1498:201","statements":[{"nodeType":"YulAssignment","src":"38002:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38014:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"38025:3:201","type":"","value":"512"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38010:3:201"},"nodeType":"YulFunctionCall","src":"38010:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"38002:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38045:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"38056:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38038:6:201"},"nodeType":"YulFunctionCall","src":"38038:25:201"},"nodeType":"YulExpressionStatement","src":"38038:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38083:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"38094:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38079:3:201"},"nodeType":"YulFunctionCall","src":"38079:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"38099:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38072:6:201"},"nodeType":"YulFunctionCall","src":"38072:34:201"},"nodeType":"YulExpressionStatement","src":"38072:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38126:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"38137:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38122:3:201"},"nodeType":"YulFunctionCall","src":"38122:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"38142:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38115:6:201"},"nodeType":"YulFunctionCall","src":"38115:34:201"},"nodeType":"YulExpressionStatement","src":"38115:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38169:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"38180:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38165:3:201"},"nodeType":"YulFunctionCall","src":"38165:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"38185:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38158:6:201"},"nodeType":"YulFunctionCall","src":"38158:34:201"},"nodeType":"YulExpressionStatement","src":"38158:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"38226:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38220:5:201"},"nodeType":"YulFunctionCall","src":"38220:13:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38239:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"38250:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38235:3:201"},"nodeType":"YulFunctionCall","src":"38235:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"38201:18:201"},"nodeType":"YulFunctionCall","src":"38201:54:201"},"nodeType":"YulExpressionStatement","src":"38201:54:201"},{"nodeType":"YulVariableDeclaration","src":"38264:42:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"38294:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"38302:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38290:3:201"},"nodeType":"YulFunctionCall","src":"38290:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38284:5:201"},"nodeType":"YulFunctionCall","src":"38284:22:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"38268:12:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"38334:12:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38352:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"38363:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38348:3:201"},"nodeType":"YulFunctionCall","src":"38348:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"38315:18:201"},"nodeType":"YulFunctionCall","src":"38315:53:201"},"nodeType":"YulExpressionStatement","src":"38315:53:201"},{"nodeType":"YulVariableDeclaration","src":"38377:44:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"38409:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"38417:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38405:3:201"},"nodeType":"YulFunctionCall","src":"38405:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38399:5:201"},"nodeType":"YulFunctionCall","src":"38399:22:201"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"38381:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"38449:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38469:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"38480:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38465:3:201"},"nodeType":"YulFunctionCall","src":"38465:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"38430:18:201"},"nodeType":"YulFunctionCall","src":"38430:55:201"},"nodeType":"YulExpressionStatement","src":"38430:55:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38505:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"38516:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38501:3:201"},"nodeType":"YulFunctionCall","src":"38501:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"38532:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"38540:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38528:3:201"},"nodeType":"YulFunctionCall","src":"38528:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38522:5:201"},"nodeType":"YulFunctionCall","src":"38522:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38494:6:201"},"nodeType":"YulFunctionCall","src":"38494:51:201"},"nodeType":"YulExpressionStatement","src":"38494:51:201"},{"nodeType":"YulVariableDeclaration","src":"38554:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"38586:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"38594:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38582:3:201"},"nodeType":"YulFunctionCall","src":"38582:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38576:5:201"},"nodeType":"YulFunctionCall","src":"38576:23:201"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"38558:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"38608:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"38618:3:201","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"38612:2:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"38663:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38683:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"38694:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38679:3:201"},"nodeType":"YulFunctionCall","src":"38679:18:201"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"38630:32:201"},"nodeType":"YulFunctionCall","src":"38630:68:201"},"nodeType":"YulExpressionStatement","src":"38630:68:201"},{"nodeType":"YulVariableDeclaration","src":"38707:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"38739:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"38747:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38735:3:201"},"nodeType":"YulFunctionCall","src":"38735:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38729:5:201"},"nodeType":"YulFunctionCall","src":"38729:23:201"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"38711:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"38761:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"38771:3:201","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"38765:2:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"38801:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38821:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"38832:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38817:3:201"},"nodeType":"YulFunctionCall","src":"38817:18:201"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"38783:17:201"},"nodeType":"YulFunctionCall","src":"38783:53:201"},"nodeType":"YulExpressionStatement","src":"38783:53:201"},{"nodeType":"YulVariableDeclaration","src":"38845:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"38877:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"38885:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38873:3:201"},"nodeType":"YulFunctionCall","src":"38873:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38867:5:201"},"nodeType":"YulFunctionCall","src":"38867:23:201"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"38849:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"38899:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"38909:3:201","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"38903:2:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"38937:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38957:9:201"},{"name":"_3","nodeType":"YulIdentifier","src":"38968:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38953:3:201"},"nodeType":"YulFunctionCall","src":"38953:18:201"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"38921:15:201"},"nodeType":"YulFunctionCall","src":"38921:51:201"},"nodeType":"YulExpressionStatement","src":"38921:51:201"},{"nodeType":"YulVariableDeclaration","src":"38981:33:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39001:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"39009:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38997:3:201"},"nodeType":"YulFunctionCall","src":"38997:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38991:5:201"},"nodeType":"YulFunctionCall","src":"38991:23:201"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"38985:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"39023:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"39033:3:201","type":"","value":"352"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"39027:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39056:9:201"},{"name":"_5","nodeType":"YulIdentifier","src":"39067:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39052:3:201"},"nodeType":"YulFunctionCall","src":"39052:18:201"},{"name":"_4","nodeType":"YulIdentifier","src":"39072:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39045:6:201"},"nodeType":"YulFunctionCall","src":"39045:30:201"},"nodeType":"YulExpressionStatement","src":"39045:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39095:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"39106:3:201","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39091:3:201"},"nodeType":"YulFunctionCall","src":"39091:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39122:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"39130:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39118:3:201"},"nodeType":"YulFunctionCall","src":"39118:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39112:5:201"},"nodeType":"YulFunctionCall","src":"39112:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39084:6:201"},"nodeType":"YulFunctionCall","src":"39084:51:201"},"nodeType":"YulExpressionStatement","src":"39084:51:201"},{"nodeType":"YulVariableDeclaration","src":"39144:44:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39176:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"39184:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39172:3:201"},"nodeType":"YulFunctionCall","src":"39172:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39166:5:201"},"nodeType":"YulFunctionCall","src":"39166:22:201"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"39148:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"39216:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39236:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"39247:3:201","type":"","value":"416"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39232:3:201"},"nodeType":"YulFunctionCall","src":"39232:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"39197:18:201"},"nodeType":"YulFunctionCall","src":"39197:55:201"},"nodeType":"YulExpressionStatement","src":"39197:55:201"},{"nodeType":"YulVariableDeclaration","src":"39261:44:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39293:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"39301:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39289:3:201"},"nodeType":"YulFunctionCall","src":"39289:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39283:5:201"},"nodeType":"YulFunctionCall","src":"39283:22:201"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"39265:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"39331:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39351:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"39362:3:201","type":"","value":"448"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39347:3:201"},"nodeType":"YulFunctionCall","src":"39347:19:201"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"39314:16:201"},"nodeType":"YulFunctionCall","src":"39314:53:201"},"nodeType":"YulExpressionStatement","src":"39314:53:201"},{"nodeType":"YulVariableDeclaration","src":"39376:44:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39408:6:201"},{"name":"_5","nodeType":"YulIdentifier","src":"39416:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39404:3:201"},"nodeType":"YulFunctionCall","src":"39404:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39398:5:201"},"nodeType":"YulFunctionCall","src":"39398:22:201"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"39380:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"39448:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39468:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"39479:3:201","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39464:3:201"},"nodeType":"YulFunctionCall","src":"39464:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"39429:18:201"},"nodeType":"YulFunctionCall","src":"39429:55:201"},"nodeType":"YulExpressionStatement","src":"39429:55:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteBorrowParams_$21433_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteBorrowParams_$21433_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"37929:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"37940:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"37948:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"37956:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"37964:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"37972:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"37983:4:201","type":""}],"src":"37530:1960:201"},{"body":{"nodeType":"YulBlock","src":"39556:423:201","statements":[{"nodeType":"YulVariableDeclaration","src":"39566:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"39586:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39580:5:201"},"nodeType":"YulFunctionCall","src":"39580:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"39570:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"39608:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"39613:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39601:6:201"},"nodeType":"YulFunctionCall","src":"39601:19:201"},"nodeType":"YulExpressionStatement","src":"39601:19:201"},{"nodeType":"YulVariableDeclaration","src":"39629:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"39639:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"39633:2:201","type":""}]},{"nodeType":"YulAssignment","src":"39652:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"39663:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"39668:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39659:3:201"},"nodeType":"YulFunctionCall","src":"39659:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"39652:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"39680:28:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"39698:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"39705:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39694:3:201"},"nodeType":"YulFunctionCall","src":"39694:14:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"39684:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"39717:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"39726:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"39721:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"39785:169:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"39806:3:201"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"39821:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39815:5:201"},"nodeType":"YulFunctionCall","src":"39815:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"39830:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"39811:3:201"},"nodeType":"YulFunctionCall","src":"39811:62:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39799:6:201"},"nodeType":"YulFunctionCall","src":"39799:75:201"},"nodeType":"YulExpressionStatement","src":"39799:75:201"},{"nodeType":"YulAssignment","src":"39887:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"39898:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"39903:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39894:3:201"},"nodeType":"YulFunctionCall","src":"39894:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"39887:3:201"}]},{"nodeType":"YulAssignment","src":"39919:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"39933:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"39941:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39929:3:201"},"nodeType":"YulFunctionCall","src":"39929:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"39919:6:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"39747:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"39750:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"39744:2:201"},"nodeType":"YulFunctionCall","src":"39744:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"39758:18:201","statements":[{"nodeType":"YulAssignment","src":"39760:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"39769:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"39772:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39765:3:201"},"nodeType":"YulFunctionCall","src":"39765:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"39760:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"39740:3:201","statements":[]},"src":"39736:218:201"},{"nodeType":"YulAssignment","src":"39963:10:201","value":{"name":"pos","nodeType":"YulIdentifier","src":"39970:3:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"39963:3:201"}]}]},"name":"abi_encode_array_address_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"39533:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"39540:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"39548:3:201","type":""}],"src":"39495:484:201"},{"body":{"nodeType":"YulBlock","src":"40045:374:201","statements":[{"nodeType":"YulVariableDeclaration","src":"40055:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"40075:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40069:5:201"},"nodeType":"YulFunctionCall","src":"40069:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"40059:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40097:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"40102:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"40090:6:201"},"nodeType":"YulFunctionCall","src":"40090:19:201"},"nodeType":"YulExpressionStatement","src":"40090:19:201"},{"nodeType":"YulVariableDeclaration","src":"40118:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"40128:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"40122:2:201","type":""}]},{"nodeType":"YulAssignment","src":"40141:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40152:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"40157:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40148:3:201"},"nodeType":"YulFunctionCall","src":"40148:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"40141:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"40169:28:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"40187:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"40194:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40183:3:201"},"nodeType":"YulFunctionCall","src":"40183:14:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"40173:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"40206:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"40215:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"40210:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"40274:120:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40295:3:201"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"40306:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40300:5:201"},"nodeType":"YulFunctionCall","src":"40300:13:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"40288:6:201"},"nodeType":"YulFunctionCall","src":"40288:26:201"},"nodeType":"YulExpressionStatement","src":"40288:26:201"},{"nodeType":"YulAssignment","src":"40327:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40338:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"40343:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40334:3:201"},"nodeType":"YulFunctionCall","src":"40334:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"40327:3:201"}]},{"nodeType":"YulAssignment","src":"40359:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"40373:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"40381:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40369:3:201"},"nodeType":"YulFunctionCall","src":"40369:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"40359:6:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"40236:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"40239:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"40233:2:201"},"nodeType":"YulFunctionCall","src":"40233:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"40247:18:201","statements":[{"nodeType":"YulAssignment","src":"40249:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"40258:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"40261:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40254:3:201"},"nodeType":"YulFunctionCall","src":"40254:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"40249:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"40229:3:201","statements":[]},"src":"40225:169:201"},{"nodeType":"YulAssignment","src":"40403:10:201","value":{"name":"pos","nodeType":"YulIdentifier","src":"40410:3:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"40403:3:201"}]}]},"name":"abi_encode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"40022:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"40029:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"40037:3:201","type":""}],"src":"39984:435:201"},{"body":{"nodeType":"YulBlock","src":"40878:2157:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"40895:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"40906:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"40888:6:201"},"nodeType":"YulFunctionCall","src":"40888:25:201"},"nodeType":"YulExpressionStatement","src":"40888:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"40933:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"40944:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40929:3:201"},"nodeType":"YulFunctionCall","src":"40929:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"40949:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"40922:6:201"},"nodeType":"YulFunctionCall","src":"40922:34:201"},"nodeType":"YulExpressionStatement","src":"40922:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"40976:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"40987:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40972:3:201"},"nodeType":"YulFunctionCall","src":"40972:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"40992:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"40965:6:201"},"nodeType":"YulFunctionCall","src":"40965:34:201"},"nodeType":"YulExpressionStatement","src":"40965:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41019:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"41030:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41015:3:201"},"nodeType":"YulFunctionCall","src":"41015:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"41035:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41008:6:201"},"nodeType":"YulFunctionCall","src":"41008:34:201"},"nodeType":"YulExpressionStatement","src":"41008:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41062:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"41073:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41058:3:201"},"nodeType":"YulFunctionCall","src":"41058:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"41079:3:201","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41051:6:201"},"nodeType":"YulFunctionCall","src":"41051:32:201"},"nodeType":"YulExpressionStatement","src":"41051:32:201"},{"expression":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"41117:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"41111:5:201"},"nodeType":"YulFunctionCall","src":"41111:13:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41130:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"41141:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41126:3:201"},"nodeType":"YulFunctionCall","src":"41126:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"41092:18:201"},"nodeType":"YulFunctionCall","src":"41092:54:201"},"nodeType":"YulExpressionStatement","src":"41092:54:201"},{"nodeType":"YulVariableDeclaration","src":"41155:42:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"41185:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"41193:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41181:3:201"},"nodeType":"YulFunctionCall","src":"41181:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"41175:5:201"},"nodeType":"YulFunctionCall","src":"41175:22:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"41159:12:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"41206:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"41216:6:201","type":"","value":"0x01c0"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"41210:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41242:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"41253:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41238:3:201"},"nodeType":"YulFunctionCall","src":"41238:19:201"},{"name":"_1","nodeType":"YulIdentifier","src":"41259:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41231:6:201"},"nodeType":"YulFunctionCall","src":"41231:31:201"},"nodeType":"YulExpressionStatement","src":"41231:31:201"},{"nodeType":"YulVariableDeclaration","src":"41271:77:201","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"41314:12:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41332:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"41343:3:201","type":"","value":"608"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41328:3:201"},"nodeType":"YulFunctionCall","src":"41328:19:201"}],"functionName":{"name":"abi_encode_array_address_dyn","nodeType":"YulIdentifier","src":"41285:28:201"},"nodeType":"YulFunctionCall","src":"41285:63:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"41275:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"41357:44:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"41389:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"41397:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41385:3:201"},"nodeType":"YulFunctionCall","src":"41385:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"41379:5:201"},"nodeType":"YulFunctionCall","src":"41379:22:201"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"41361:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"41410:76:201","value":{"kind":"number","nodeType":"YulLiteral","src":"41420:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"41414:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41506:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"41517:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41502:3:201"},"nodeType":"YulFunctionCall","src":"41502:19:201"},{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"41531:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"41539:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"41527:3:201"},"nodeType":"YulFunctionCall","src":"41527:22:201"},{"name":"_2","nodeType":"YulIdentifier","src":"41551:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41523:3:201"},"nodeType":"YulFunctionCall","src":"41523:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41495:6:201"},"nodeType":"YulFunctionCall","src":"41495:60:201"},"nodeType":"YulExpressionStatement","src":"41495:60:201"},{"nodeType":"YulVariableDeclaration","src":"41564:66:201","value":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"41607:14:201"},{"name":"tail_1","nodeType":"YulIdentifier","src":"41623:6:201"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"41578:28:201"},"nodeType":"YulFunctionCall","src":"41578:52:201"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"41568:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"41639:44:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"41671:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"41679:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41667:3:201"},"nodeType":"YulFunctionCall","src":"41667:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"41661:5:201"},"nodeType":"YulFunctionCall","src":"41661:22:201"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"41643:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"41692:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"41702:3:201","type":"","value":"256"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"41696:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41725:9:201"},{"name":"_3","nodeType":"YulIdentifier","src":"41736:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41721:3:201"},"nodeType":"YulFunctionCall","src":"41721:18:201"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"41749:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"41757:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"41745:3:201"},"nodeType":"YulFunctionCall","src":"41745:22:201"},{"name":"_2","nodeType":"YulIdentifier","src":"41769:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41741:3:201"},"nodeType":"YulFunctionCall","src":"41741:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41714:6:201"},"nodeType":"YulFunctionCall","src":"41714:59:201"},"nodeType":"YulExpressionStatement","src":"41714:59:201"},{"nodeType":"YulVariableDeclaration","src":"41782:66:201","value":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"41825:14:201"},{"name":"tail_2","nodeType":"YulIdentifier","src":"41841:6:201"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"41796:28:201"},"nodeType":"YulFunctionCall","src":"41796:52:201"},"variables":[{"name":"tail_3","nodeType":"YulTypedName","src":"41786:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"41857:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"41889:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"41897:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41885:3:201"},"nodeType":"YulFunctionCall","src":"41885:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"41879:5:201"},"nodeType":"YulFunctionCall","src":"41879:23:201"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"41861:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"41911:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"41921:3:201","type":"","value":"288"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"41915:2:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"41952:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41972:9:201"},{"name":"_4","nodeType":"YulIdentifier","src":"41983:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41968:3:201"},"nodeType":"YulFunctionCall","src":"41968:18:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"41933:18:201"},"nodeType":"YulFunctionCall","src":"41933:54:201"},"nodeType":"YulExpressionStatement","src":"41933:54:201"},{"nodeType":"YulVariableDeclaration","src":"41996:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42028:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"42036:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42024:3:201"},"nodeType":"YulFunctionCall","src":"42024:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42018:5:201"},"nodeType":"YulFunctionCall","src":"42018:23:201"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"42000:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42050:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"42060:3:201","type":"","value":"320"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"42054:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42083:9:201"},{"name":"_5","nodeType":"YulIdentifier","src":"42094:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42079:3:201"},"nodeType":"YulFunctionCall","src":"42079:18:201"},{"arguments":[{"arguments":[{"name":"tail_3","nodeType":"YulIdentifier","src":"42107:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"42115:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"42103:3:201"},"nodeType":"YulFunctionCall","src":"42103:22:201"},{"name":"_2","nodeType":"YulIdentifier","src":"42127:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42099:3:201"},"nodeType":"YulFunctionCall","src":"42099:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42072:6:201"},"nodeType":"YulFunctionCall","src":"42072:59:201"},"nodeType":"YulExpressionStatement","src":"42072:59:201"},{"nodeType":"YulVariableDeclaration","src":"42140:55:201","value":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"42172:14:201"},{"name":"tail_3","nodeType":"YulIdentifier","src":"42188:6:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"42154:17:201"},"nodeType":"YulFunctionCall","src":"42154:41:201"},"variables":[{"name":"tail_4","nodeType":"YulTypedName","src":"42144:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42204:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42236:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"42244:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42232:3:201"},"nodeType":"YulFunctionCall","src":"42232:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42226:5:201"},"nodeType":"YulFunctionCall","src":"42226:23:201"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"42208:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42258:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"42268:3:201","type":"","value":"352"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"42262:2:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"42298:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42318:9:201"},{"name":"_6","nodeType":"YulIdentifier","src":"42329:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42314:3:201"},"nodeType":"YulFunctionCall","src":"42314:18:201"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"42280:17:201"},"nodeType":"YulFunctionCall","src":"42280:53:201"},"nodeType":"YulExpressionStatement","src":"42280:53:201"},{"nodeType":"YulVariableDeclaration","src":"42342:33:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42362:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"42370:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42358:3:201"},"nodeType":"YulFunctionCall","src":"42358:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42352:5:201"},"nodeType":"YulFunctionCall","src":"42352:23:201"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"42346:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42384:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"42394:3:201","type":"","value":"384"},"variables":[{"name":"_8","nodeType":"YulTypedName","src":"42388:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42417:9:201"},{"name":"_8","nodeType":"YulIdentifier","src":"42428:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42413:3:201"},"nodeType":"YulFunctionCall","src":"42413:18:201"},{"name":"_7","nodeType":"YulIdentifier","src":"42433:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42406:6:201"},"nodeType":"YulFunctionCall","src":"42406:30:201"},"nodeType":"YulExpressionStatement","src":"42406:30:201"},{"nodeType":"YulVariableDeclaration","src":"42445:32:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42465:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"42473:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42461:3:201"},"nodeType":"YulFunctionCall","src":"42461:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42455:5:201"},"nodeType":"YulFunctionCall","src":"42455:22:201"},"variables":[{"name":"_9","nodeType":"YulTypedName","src":"42449:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42486:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"42497:3:201","type":"","value":"416"},"variables":[{"name":"_10","nodeType":"YulTypedName","src":"42490:3:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42520:9:201"},{"name":"_10","nodeType":"YulIdentifier","src":"42531:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42516:3:201"},"nodeType":"YulFunctionCall","src":"42516:19:201"},{"name":"_9","nodeType":"YulIdentifier","src":"42537:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42509:6:201"},"nodeType":"YulFunctionCall","src":"42509:31:201"},"nodeType":"YulExpressionStatement","src":"42509:31:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42560:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"42571:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42556:3:201"},"nodeType":"YulFunctionCall","src":"42556:18:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42586:6:201"},{"name":"_4","nodeType":"YulIdentifier","src":"42594:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42582:3:201"},"nodeType":"YulFunctionCall","src":"42582:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42576:5:201"},"nodeType":"YulFunctionCall","src":"42576:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42549:6:201"},"nodeType":"YulFunctionCall","src":"42549:50:201"},"nodeType":"YulExpressionStatement","src":"42549:50:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42619:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"42630:3:201","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42615:3:201"},"nodeType":"YulFunctionCall","src":"42615:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42646:6:201"},{"name":"_5","nodeType":"YulIdentifier","src":"42654:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42642:3:201"},"nodeType":"YulFunctionCall","src":"42642:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42636:5:201"},"nodeType":"YulFunctionCall","src":"42636:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42608:6:201"},"nodeType":"YulFunctionCall","src":"42608:51:201"},"nodeType":"YulExpressionStatement","src":"42608:51:201"},{"nodeType":"YulVariableDeclaration","src":"42668:44:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42700:6:201"},{"name":"_6","nodeType":"YulIdentifier","src":"42708:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42696:3:201"},"nodeType":"YulFunctionCall","src":"42696:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42690:5:201"},"nodeType":"YulFunctionCall","src":"42690:22:201"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"42672:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"42740:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42760:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"42771:3:201","type":"","value":"512"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42756:3:201"},"nodeType":"YulFunctionCall","src":"42756:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"42721:18:201"},"nodeType":"YulFunctionCall","src":"42721:55:201"},"nodeType":"YulExpressionStatement","src":"42721:55:201"},{"nodeType":"YulVariableDeclaration","src":"42785:44:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42817:6:201"},{"name":"_8","nodeType":"YulIdentifier","src":"42825:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42813:3:201"},"nodeType":"YulFunctionCall","src":"42813:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42807:5:201"},"nodeType":"YulFunctionCall","src":"42807:22:201"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"42789:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"42855:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42875:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"42886:3:201","type":"","value":"544"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42871:3:201"},"nodeType":"YulFunctionCall","src":"42871:19:201"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"42838:16:201"},"nodeType":"YulFunctionCall","src":"42838:53:201"},"nodeType":"YulExpressionStatement","src":"42838:53:201"},{"nodeType":"YulVariableDeclaration","src":"42900:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42932:6:201"},{"name":"_10","nodeType":"YulIdentifier","src":"42940:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42928:3:201"},"nodeType":"YulFunctionCall","src":"42928:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42922:5:201"},"nodeType":"YulFunctionCall","src":"42922:23:201"},"variables":[{"name":"memberValue0_8","nodeType":"YulTypedName","src":"42904:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_8","nodeType":"YulIdentifier","src":"42970:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42990:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"43001:3:201","type":"","value":"576"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42986:3:201"},"nodeType":"YulFunctionCall","src":"42986:19:201"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"42954:15:201"},"nodeType":"YulFunctionCall","src":"42954:52:201"},"nodeType":"YulExpressionStatement","src":"42954:52:201"},{"nodeType":"YulAssignment","src":"43015:14:201","value":{"name":"tail_4","nodeType":"YulIdentifier","src":"43023:6:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"43015:4:201"}]}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_FlashloanParams_$21516_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FlashloanParams_$21516_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"40815:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"40826:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"40834:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"40842:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"40850:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"40858:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"40869:4:201","type":""}],"src":"40424:2611:201"},{"body":{"nodeType":"YulBlock","src":"43460:592:201","statements":[{"nodeType":"YulAssignment","src":"43470:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43482:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"43493:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43478:3:201"},"nodeType":"YulFunctionCall","src":"43478:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"43470:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43513:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"43524:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43506:6:201"},"nodeType":"YulFunctionCall","src":"43506:25:201"},"nodeType":"YulExpressionStatement","src":"43506:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43551:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"43562:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43547:3:201"},"nodeType":"YulFunctionCall","src":"43547:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"43567:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43540:6:201"},"nodeType":"YulFunctionCall","src":"43540:34:201"},"nodeType":"YulExpressionStatement","src":"43540:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43594:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"43605:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43590:3:201"},"nodeType":"YulFunctionCall","src":"43590:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"43610:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43583:6:201"},"nodeType":"YulFunctionCall","src":"43583:34:201"},"nodeType":"YulExpressionStatement","src":"43583:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43637:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"43648:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43633:3:201"},"nodeType":"YulFunctionCall","src":"43633:18:201"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"43665:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43659:5:201"},"nodeType":"YulFunctionCall","src":"43659:13:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43653:5:201"},"nodeType":"YulFunctionCall","src":"43653:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43626:6:201"},"nodeType":"YulFunctionCall","src":"43626:48:201"},"nodeType":"YulExpressionStatement","src":"43626:48:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43694:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"43705:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43690:3:201"},"nodeType":"YulFunctionCall","src":"43690:19:201"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"43721:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"43729:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43717:3:201"},"nodeType":"YulFunctionCall","src":"43717:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43711:5:201"},"nodeType":"YulFunctionCall","src":"43711:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43683:6:201"},"nodeType":"YulFunctionCall","src":"43683:51:201"},"nodeType":"YulExpressionStatement","src":"43683:51:201"},{"nodeType":"YulVariableDeclaration","src":"43743:42:201","value":{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"43773:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"43781:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43769:3:201"},"nodeType":"YulFunctionCall","src":"43769:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43763:5:201"},"nodeType":"YulFunctionCall","src":"43763:22:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"43747:12:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"43794:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"43804:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"43798:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43866:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"43877:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43862:3:201"},"nodeType":"YulFunctionCall","src":"43862:19:201"},{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"43887:12:201"},{"name":"_1","nodeType":"YulIdentifier","src":"43901:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"43883:3:201"},"nodeType":"YulFunctionCall","src":"43883:21:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43855:6:201"},"nodeType":"YulFunctionCall","src":"43855:50:201"},"nodeType":"YulExpressionStatement","src":"43855:50:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43925:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"43936:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43921:3:201"},"nodeType":"YulFunctionCall","src":"43921:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"43956:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"43964:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43952:3:201"},"nodeType":"YulFunctionCall","src":"43952:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43946:5:201"},"nodeType":"YulFunctionCall","src":"43946:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"43970:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"43942:3:201"},"nodeType":"YulFunctionCall","src":"43942:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43914:6:201"},"nodeType":"YulFunctionCall","src":"43914:60:201"},"nodeType":"YulExpressionStatement","src":"43914:60:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43994:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"44005:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43990:3:201"},"nodeType":"YulFunctionCall","src":"43990:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"44025:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"44033:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44021:3:201"},"nodeType":"YulFunctionCall","src":"44021:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44015:5:201"},"nodeType":"YulFunctionCall","src":"44015:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"44040:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"44011:3:201"},"nodeType":"YulFunctionCall","src":"44011:34:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43983:6:201"},"nodeType":"YulFunctionCall","src":"43983:63:201"},"nodeType":"YulExpressionStatement","src":"43983:63:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"43405:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"43416:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"43424:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"43432:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"43440:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"43451:4:201","type":""}],"src":"43040:1012:201"},{"body":{"nodeType":"YulBlock","src":"44223:326:201","statements":[{"body":{"nodeType":"YulBlock","src":"44270:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"44279:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"44282:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"44272:6:201"},"nodeType":"YulFunctionCall","src":"44272:12:201"},"nodeType":"YulExpressionStatement","src":"44272:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"44244:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"44253:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"44240:3:201"},"nodeType":"YulFunctionCall","src":"44240:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"44265:3:201","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"44236:3:201"},"nodeType":"YulFunctionCall","src":"44236:33:201"},"nodeType":"YulIf","src":"44233:53:201"},{"nodeType":"YulAssignment","src":"44295:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44311:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44305:5:201"},"nodeType":"YulFunctionCall","src":"44305:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"44295:6:201"}]},{"nodeType":"YulAssignment","src":"44330:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44350:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"44361:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44346:3:201"},"nodeType":"YulFunctionCall","src":"44346:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44340:5:201"},"nodeType":"YulFunctionCall","src":"44340:25:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"44330:6:201"}]},{"nodeType":"YulAssignment","src":"44374:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44394:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"44405:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44390:3:201"},"nodeType":"YulFunctionCall","src":"44390:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44384:5:201"},"nodeType":"YulFunctionCall","src":"44384:25:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"44374:6:201"}]},{"nodeType":"YulAssignment","src":"44418:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44438:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"44449:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44434:3:201"},"nodeType":"YulFunctionCall","src":"44434:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44428:5:201"},"nodeType":"YulFunctionCall","src":"44428:25:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"44418:6:201"}]},{"nodeType":"YulAssignment","src":"44462:36:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44482:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"44493:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44478:3:201"},"nodeType":"YulFunctionCall","src":"44478:19:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44472:5:201"},"nodeType":"YulFunctionCall","src":"44472:26:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"44462:6:201"}]},{"nodeType":"YulAssignment","src":"44507:36:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44527:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"44538:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44523:3:201"},"nodeType":"YulFunctionCall","src":"44523:19:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44517:5:201"},"nodeType":"YulFunctionCall","src":"44517:26:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"44507:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"44149:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"44160:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"44172:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"44180:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"44188:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"44196:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"44204:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"44212:6:201","type":""}],"src":"44057:492:201"},{"body":{"nodeType":"YulBlock","src":"44728:236:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44745:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"44756:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44738:6:201"},"nodeType":"YulFunctionCall","src":"44738:21:201"},"nodeType":"YulExpressionStatement","src":"44738:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44779:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"44790:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44775:3:201"},"nodeType":"YulFunctionCall","src":"44775:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"44795:2:201","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44768:6:201"},"nodeType":"YulFunctionCall","src":"44768:30:201"},"nodeType":"YulExpressionStatement","src":"44768:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44818:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"44829:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44814:3:201"},"nodeType":"YulFunctionCall","src":"44814:18:201"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"44834:34:201","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44807:6:201"},"nodeType":"YulFunctionCall","src":"44807:62:201"},"nodeType":"YulExpressionStatement","src":"44807:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44889:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"44900:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44885:3:201"},"nodeType":"YulFunctionCall","src":"44885:18:201"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"44905:16:201","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44878:6:201"},"nodeType":"YulFunctionCall","src":"44878:44:201"},"nodeType":"YulExpressionStatement","src":"44878:44:201"},{"nodeType":"YulAssignment","src":"44931:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44943:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"44954:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44939:3:201"},"nodeType":"YulFunctionCall","src":"44939:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"44931:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"44705:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"44719:4:201","type":""}],"src":"44554:410:201"},{"body":{"nodeType":"YulBlock","src":"45161:241:201","statements":[{"nodeType":"YulAssignment","src":"45171:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45183:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"45194:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45179:3:201"},"nodeType":"YulFunctionCall","src":"45179:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"45171:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45213:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"45224:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45206:6:201"},"nodeType":"YulFunctionCall","src":"45206:25:201"},"nodeType":"YulExpressionStatement","src":"45206:25:201"},{"nodeType":"YulVariableDeclaration","src":"45240:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"45250:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"45244:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45312:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"45323:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45308:3:201"},"nodeType":"YulFunctionCall","src":"45308:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"45332:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"45340:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"45328:3:201"},"nodeType":"YulFunctionCall","src":"45328:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45301:6:201"},"nodeType":"YulFunctionCall","src":"45301:43:201"},"nodeType":"YulExpressionStatement","src":"45301:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45364:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"45375:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45360:3:201"},"nodeType":"YulFunctionCall","src":"45360:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"45384:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"45392:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"45380:3:201"},"nodeType":"YulFunctionCall","src":"45380:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45353:6:201"},"nodeType":"YulFunctionCall","src":"45353:43:201"},"nodeType":"YulExpressionStatement","src":"45353:43:201"}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$21315_storage_t_address_t_address__to_t_uint256_t_address_t_address__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"45114:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"45125:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"45133:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"45141:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"45152:4:201","type":""}],"src":"44969:433:201"},{"body":{"nodeType":"YulBlock","src":"45572:241:201","statements":[{"nodeType":"YulAssignment","src":"45582:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45594:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"45605:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45590:3:201"},"nodeType":"YulFunctionCall","src":"45590:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"45582:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"45617:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"45627:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"45621:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45685:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"45700:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"45708:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"45696:3:201"},"nodeType":"YulFunctionCall","src":"45696:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45678:6:201"},"nodeType":"YulFunctionCall","src":"45678:34:201"},"nodeType":"YulExpressionStatement","src":"45678:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45732:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"45743:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45728:3:201"},"nodeType":"YulFunctionCall","src":"45728:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"45752:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"45760:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"45748:3:201"},"nodeType":"YulFunctionCall","src":"45748:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45721:6:201"},"nodeType":"YulFunctionCall","src":"45721:43:201"},"nodeType":"YulExpressionStatement","src":"45721:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45784:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"45795:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45780:3:201"},"nodeType":"YulFunctionCall","src":"45780:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"45800:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45773:6:201"},"nodeType":"YulFunctionCall","src":"45773:34:201"},"nodeType":"YulExpressionStatement","src":"45773:34:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"45525:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"45536:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"45544:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"45552:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"45563:4:201","type":""}],"src":"45407:406:201"},{"body":{"nodeType":"YulBlock","src":"45867:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"45889:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"45891:16:201"},"nodeType":"YulFunctionCall","src":"45891:18:201"},"nodeType":"YulExpressionStatement","src":"45891:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"45883:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"45886:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"45880:2:201"},"nodeType":"YulFunctionCall","src":"45880:8:201"},"nodeType":"YulIf","src":"45877:34:201"},{"nodeType":"YulAssignment","src":"45920:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"45932:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"45935:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"45928:3:201"},"nodeType":"YulFunctionCall","src":"45928:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"45920:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"45849:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"45852:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"45858:4:201","type":""}],"src":"45818:125:201"},{"body":{"nodeType":"YulBlock","src":"45980:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"45997:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"46000:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45990:6:201"},"nodeType":"YulFunctionCall","src":"45990:88:201"},"nodeType":"YulExpressionStatement","src":"45990:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"46094:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"46097:4:201","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46087:6:201"},"nodeType":"YulFunctionCall","src":"46087:15:201"},"nodeType":"YulExpressionStatement","src":"46087:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"46118:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"46121:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"46111:6:201"},"nodeType":"YulFunctionCall","src":"46111:15:201"},"nodeType":"YulExpressionStatement","src":"46111:15:201"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"45948:184:201"},{"body":{"nodeType":"YulBlock","src":"46184:148:201","statements":[{"body":{"nodeType":"YulBlock","src":"46275:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"46277:16:201"},"nodeType":"YulFunctionCall","src":"46277:18:201"},"nodeType":"YulExpressionStatement","src":"46277:18:201"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"46200:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"46207:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"46197:2:201"},"nodeType":"YulFunctionCall","src":"46197:77:201"},"nodeType":"YulIf","src":"46194:103:201"},{"nodeType":"YulAssignment","src":"46306:20:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"46317:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"46324:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46313:3:201"},"nodeType":"YulFunctionCall","src":"46313:13:201"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"46306:3:201"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"46166:5:201","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"46176:3:201","type":""}],"src":"46137:195:201"},{"body":{"nodeType":"YulBlock","src":"46830:1027:201","statements":[{"nodeType":"YulAssignment","src":"46840:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46852:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"46863:3:201","type":"","value":"416"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46848:3:201"},"nodeType":"YulFunctionCall","src":"46848:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"46840:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46883:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"46894:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46876:6:201"},"nodeType":"YulFunctionCall","src":"46876:25:201"},"nodeType":"YulExpressionStatement","src":"46876:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46921:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"46932:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46917:3:201"},"nodeType":"YulFunctionCall","src":"46917:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"46937:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46910:6:201"},"nodeType":"YulFunctionCall","src":"46910:34:201"},"nodeType":"YulExpressionStatement","src":"46910:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46964:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"46975:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46960:3:201"},"nodeType":"YulFunctionCall","src":"46960:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"46980:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46953:6:201"},"nodeType":"YulFunctionCall","src":"46953:34:201"},"nodeType":"YulExpressionStatement","src":"46953:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47007:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"47018:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47003:3:201"},"nodeType":"YulFunctionCall","src":"47003:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"47023:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46996:6:201"},"nodeType":"YulFunctionCall","src":"46996:34:201"},"nodeType":"YulExpressionStatement","src":"46996:34:201"},{"nodeType":"YulVariableDeclaration","src":"47039:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"47049:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"47043:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47111:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"47122:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47107:3:201"},"nodeType":"YulFunctionCall","src":"47107:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47138:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47132:5:201"},"nodeType":"YulFunctionCall","src":"47132:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"47147:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"47128:3:201"},"nodeType":"YulFunctionCall","src":"47128:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47100:6:201"},"nodeType":"YulFunctionCall","src":"47100:51:201"},"nodeType":"YulExpressionStatement","src":"47100:51:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47171:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"47182:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47167:3:201"},"nodeType":"YulFunctionCall","src":"47167:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47202:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"47210:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47198:3:201"},"nodeType":"YulFunctionCall","src":"47198:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47192:5:201"},"nodeType":"YulFunctionCall","src":"47192:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"47216:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"47188:3:201"},"nodeType":"YulFunctionCall","src":"47188:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47160:6:201"},"nodeType":"YulFunctionCall","src":"47160:60:201"},"nodeType":"YulExpressionStatement","src":"47160:60:201"},{"nodeType":"YulVariableDeclaration","src":"47229:42:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47259:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"47267:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47255:3:201"},"nodeType":"YulFunctionCall","src":"47255:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47249:5:201"},"nodeType":"YulFunctionCall","src":"47249:22:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"47233:12:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"47299:12:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47317:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"47328:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47313:3:201"},"nodeType":"YulFunctionCall","src":"47313:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"47280:18:201"},"nodeType":"YulFunctionCall","src":"47280:53:201"},"nodeType":"YulExpressionStatement","src":"47280:53:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47353:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"47364:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47349:3:201"},"nodeType":"YulFunctionCall","src":"47349:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47380:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"47388:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47376:3:201"},"nodeType":"YulFunctionCall","src":"47376:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47370:5:201"},"nodeType":"YulFunctionCall","src":"47370:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47342:6:201"},"nodeType":"YulFunctionCall","src":"47342:51:201"},"nodeType":"YulExpressionStatement","src":"47342:51:201"},{"nodeType":"YulVariableDeclaration","src":"47402:33:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47422:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"47430:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47418:3:201"},"nodeType":"YulFunctionCall","src":"47418:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47412:5:201"},"nodeType":"YulFunctionCall","src":"47412:23:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"47406:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"47444:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"47454:3:201","type":"","value":"256"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"47448:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47477:9:201"},{"name":"_3","nodeType":"YulIdentifier","src":"47488:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47473:3:201"},"nodeType":"YulFunctionCall","src":"47473:18:201"},{"name":"_2","nodeType":"YulIdentifier","src":"47493:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47466:6:201"},"nodeType":"YulFunctionCall","src":"47466:30:201"},"nodeType":"YulExpressionStatement","src":"47466:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47516:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"47527:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47512:3:201"},"nodeType":"YulFunctionCall","src":"47512:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47543:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"47551:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47539:3:201"},"nodeType":"YulFunctionCall","src":"47539:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47533:5:201"},"nodeType":"YulFunctionCall","src":"47533:23:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47505:6:201"},"nodeType":"YulFunctionCall","src":"47505:52:201"},"nodeType":"YulExpressionStatement","src":"47505:52:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47577:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"47588:3:201","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47573:3:201"},"nodeType":"YulFunctionCall","src":"47573:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47604:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"47612:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47600:3:201"},"nodeType":"YulFunctionCall","src":"47600:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47594:5:201"},"nodeType":"YulFunctionCall","src":"47594:23:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47566:6:201"},"nodeType":"YulFunctionCall","src":"47566:52:201"},"nodeType":"YulExpressionStatement","src":"47566:52:201"},{"nodeType":"YulVariableDeclaration","src":"47627:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47659:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"47667:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47655:3:201"},"nodeType":"YulFunctionCall","src":"47655:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47649:5:201"},"nodeType":"YulFunctionCall","src":"47649:23:201"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"47631:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"47700:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47720:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"47731:3:201","type":"","value":"352"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47716:3:201"},"nodeType":"YulFunctionCall","src":"47716:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"47681:18:201"},"nodeType":"YulFunctionCall","src":"47681:55:201"},"nodeType":"YulExpressionStatement","src":"47681:55:201"},{"nodeType":"YulVariableDeclaration","src":"47745:44:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47777:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"47785:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47773:3:201"},"nodeType":"YulFunctionCall","src":"47773:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47767:5:201"},"nodeType":"YulFunctionCall","src":"47767:22:201"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"47749:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"47815:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47835:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"47846:3:201","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47831:3:201"},"nodeType":"YulFunctionCall","src":"47831:19:201"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"47798:16:201"},"nodeType":"YulFunctionCall","src":"47798:53:201"},"nodeType":"YulExpressionStatement","src":"47798:53:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$_t_struct$_FinalizeTransferParams_$21484_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FinalizeTransferParams_$21484_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"46767:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"46778:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"46786:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"46794:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"46802:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"46810:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"46821:4:201","type":""}],"src":"46337:1520:201"},{"body":{"nodeType":"YulBlock","src":"48110:299:201","statements":[{"nodeType":"YulAssignment","src":"48120:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48132:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"48143:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48128:3:201"},"nodeType":"YulFunctionCall","src":"48128:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"48120:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48163:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"48174:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48156:6:201"},"nodeType":"YulFunctionCall","src":"48156:25:201"},"nodeType":"YulExpressionStatement","src":"48156:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48201:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"48212:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48197:3:201"},"nodeType":"YulFunctionCall","src":"48197:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"48221:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"48229:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"48217:3:201"},"nodeType":"YulFunctionCall","src":"48217:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48190:6:201"},"nodeType":"YulFunctionCall","src":"48190:83:201"},"nodeType":"YulExpressionStatement","src":"48190:83:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48293:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"48304:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48289:3:201"},"nodeType":"YulFunctionCall","src":"48289:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"48309:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48282:6:201"},"nodeType":"YulFunctionCall","src":"48282:34:201"},"nodeType":"YulExpressionStatement","src":"48282:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48336:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"48347:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48332:3:201"},"nodeType":"YulFunctionCall","src":"48332:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"48352:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48325:6:201"},"nodeType":"YulFunctionCall","src":"48325:34:201"},"nodeType":"YulExpressionStatement","src":"48325:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48379:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"48390:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48375:3:201"},"nodeType":"YulFunctionCall","src":"48375:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"48396:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48368:6:201"},"nodeType":"YulFunctionCall","src":"48368:35:201"},"nodeType":"YulExpressionStatement","src":"48368:35:201"}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$21315_storage_t_address_t_uint256_t_uint256_t_uint256__to_t_uint256_t_address_t_uint256_t_uint256_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"48047:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"48058:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"48066:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"48074:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"48082:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"48090:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"48101:4:201","type":""}],"src":"47862:547:201"},{"body":{"nodeType":"YulBlock","src":"48603:168:201","statements":[{"nodeType":"YulAssignment","src":"48613:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48625:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"48636:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48621:3:201"},"nodeType":"YulFunctionCall","src":"48621:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"48613:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48655:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"48666:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48648:6:201"},"nodeType":"YulFunctionCall","src":"48648:25:201"},"nodeType":"YulExpressionStatement","src":"48648:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48693:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"48704:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48689:3:201"},"nodeType":"YulFunctionCall","src":"48689:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"48713:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"48721:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"48709:3:201"},"nodeType":"YulFunctionCall","src":"48709:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48682:6:201"},"nodeType":"YulFunctionCall","src":"48682:83:201"},"nodeType":"YulExpressionStatement","src":"48682:83:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_address__to_t_uint256_t_address__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"48564:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"48575:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"48583:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"48594:4:201","type":""}],"src":"48414:357:201"},{"body":{"nodeType":"YulBlock","src":"48937:49:201","statements":[{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"48954:4:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"48973:5:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"48960:12:201"},"nodeType":"YulFunctionCall","src":"48960:19:201"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"48947:6:201"},"nodeType":"YulFunctionCall","src":"48947:33:201"},"nodeType":"YulExpressionStatement","src":"48947:33:201"}]},"name":"update_storage_value_offset_0t_struct$_ReserveConfigurationMap_$21318_calldata_ptr_to_t_struct$_ReserveConfigurationMap_$21318_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nodeType":"YulTypedName","src":"48920:4:201","type":""},{"name":"value","nodeType":"YulTypedName","src":"48926:5:201","type":""}],"src":"48776:210:201"},{"body":{"nodeType":"YulBlock","src":"49043:176:201","statements":[{"body":{"nodeType":"YulBlock","src":"49162:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"49164:16:201"},"nodeType":"YulFunctionCall","src":"49164:18:201"},"nodeType":"YulExpressionStatement","src":"49164:18:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"49074:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"49067:6:201"},"nodeType":"YulFunctionCall","src":"49067:9:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"49060:6:201"},"nodeType":"YulFunctionCall","src":"49060:17:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"49082:1:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"49089:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"49157:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"49085:3:201"},"nodeType":"YulFunctionCall","src":"49085:74:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"49079:2:201"},"nodeType":"YulFunctionCall","src":"49079:81:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"49056:3:201"},"nodeType":"YulFunctionCall","src":"49056:105:201"},"nodeType":"YulIf","src":"49053:131:201"},{"nodeType":"YulAssignment","src":"49193:20:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"49208:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"49211:1:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"49204:3:201"},"nodeType":"YulFunctionCall","src":"49204:9:201"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"49193:7:201"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"49022:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"49025:1:201","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"49031:7:201","type":""}],"src":"48991:228:201"},{"body":{"nodeType":"YulBlock","src":"49256:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"49273:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"49276:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49266:6:201"},"nodeType":"YulFunctionCall","src":"49266:88:201"},"nodeType":"YulExpressionStatement","src":"49266:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"49370:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"49373:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49363:6:201"},"nodeType":"YulFunctionCall","src":"49363:15:201"},"nodeType":"YulExpressionStatement","src":"49363:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"49394:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"49397:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"49387:6:201"},"nodeType":"YulFunctionCall","src":"49387:15:201"},"nodeType":"YulExpressionStatement","src":"49387:15:201"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"49224:184:201"},{"body":{"nodeType":"YulBlock","src":"49461:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"49488:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"49490:16:201"},"nodeType":"YulFunctionCall","src":"49490:18:201"},"nodeType":"YulExpressionStatement","src":"49490:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"49477:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"49484:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"49480:3:201"},"nodeType":"YulFunctionCall","src":"49480:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"49474:2:201"},"nodeType":"YulFunctionCall","src":"49474:13:201"},"nodeType":"YulIf","src":"49471:39:201"},{"nodeType":"YulAssignment","src":"49519:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"49530:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"49533:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"49526:3:201"},"nodeType":"YulFunctionCall","src":"49526:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"49519:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"49444:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"49447:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"49453:3:201","type":""}],"src":"49413:128:201"},{"body":{"nodeType":"YulBlock","src":"49592:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"49623:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"49644:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"49647:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49637:6:201"},"nodeType":"YulFunctionCall","src":"49637:88:201"},"nodeType":"YulExpressionStatement","src":"49637:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"49745:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"49748:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49738:6:201"},"nodeType":"YulFunctionCall","src":"49738:15:201"},"nodeType":"YulExpressionStatement","src":"49738:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"49773:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"49776:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"49766:6:201"},"nodeType":"YulFunctionCall","src":"49766:15:201"},"nodeType":"YulExpressionStatement","src":"49766:15:201"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"49612:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"49605:6:201"},"nodeType":"YulFunctionCall","src":"49605:9:201"},"nodeType":"YulIf","src":"49602:189:201"},{"nodeType":"YulAssignment","src":"49800:14:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"49809:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"49812:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"49805:3:201"},"nodeType":"YulFunctionCall","src":"49805:9:201"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"49800:1:201"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"49577:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"49580:1:201","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"49586:1:201","type":""}],"src":"49546:274:201"}]},"contents":"{\n    { }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_uint256t_bool(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n        value3 := calldataload(add(headStart, 96))\n        let value_3 := calldataload(add(headStart, 128))\n        validator_revert_bool(value_3)\n        value4 := value_3\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_uint16(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256t_addresst_uint16t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n        value3 := abi_decode_uint16(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n        value5 := abi_decode_uint8(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n        value7 := calldataload(add(headStart, 224))\n    }\n    function abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_uint128(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_uint8(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint8(headStart)\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_struct_ReserveConfigurationMap(value, pos)\n    { mstore(pos, mload(value)) }\n    function abi_encode_uint40(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffff))\n    }\n    function abi_encode_uint16(value, pos)\n    {\n        mstore(pos, and(value, 0xffff))\n    }\n    function abi_encode_address(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$21315_memory_ptr__to_t_struct$_ReserveData_$21315_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 480)\n        abi_encode_struct_ReserveConfigurationMap(mload(value0), headStart)\n        let memberValue0 := mload(add(value0, 0x20))\n        abi_encode_uint128(memberValue0, add(headStart, 0x20))\n        let memberValue0_1 := mload(add(value0, 0x40))\n        abi_encode_uint128(memberValue0_1, add(headStart, 0x40))\n        let memberValue0_2 := mload(add(value0, 0x60))\n        abi_encode_uint128(memberValue0_2, add(headStart, 0x60))\n        let memberValue0_3 := mload(add(value0, 0x80))\n        abi_encode_uint128(memberValue0_3, add(headStart, 0x80))\n        let memberValue0_4 := mload(add(value0, 0xa0))\n        abi_encode_uint128(memberValue0_4, add(headStart, 0xa0))\n        let memberValue0_5 := mload(add(value0, 0xc0))\n        abi_encode_uint40(memberValue0_5, add(headStart, 0xc0))\n        let memberValue0_6 := mload(add(value0, 0xe0))\n        abi_encode_uint16(memberValue0_6, add(headStart, 0xe0))\n        let _1 := 0x0100\n        let memberValue0_7 := mload(add(value0, _1))\n        abi_encode_address(memberValue0_7, add(headStart, _1))\n        let _2 := 0x0120\n        let memberValue0_8 := mload(add(value0, _2))\n        abi_encode_address(memberValue0_8, add(headStart, _2))\n        let _3 := 0x0140\n        let memberValue0_9 := mload(add(value0, _3))\n        abi_encode_address(memberValue0_9, add(headStart, _3))\n        let _4 := 0x0160\n        let memberValue0_10 := mload(add(value0, _4))\n        abi_encode_address(memberValue0_10, add(headStart, _4))\n        let _5 := 0x0180\n        let memberValue0_11 := mload(add(value0, _5))\n        abi_encode_uint128(memberValue0_11, add(headStart, _5))\n        let _6 := 0x01a0\n        let memberValue0_12 := mload(add(value0, _6))\n        abi_encode_uint128(memberValue0_12, add(headStart, _6))\n        let _7 := 0x01c0\n        let memberValue0_13 := mload(add(value0, _7))\n        abi_encode_uint128(memberValue0_13, add(headStart, _7))\n    }\n    function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_calldata_ptrt_uint16(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        let offset := calldataload(add(headStart, 96))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value3_1, value4_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n        value3 := value3_1\n        value4 := value4_1\n        value5 := abi_decode_uint16(add(headStart, 128))\n    }\n    function abi_encode_tuple_t_struct$_UserConfigurationMap_$21322_memory_ptr__to_t_struct$_UserConfigurationMap_$21322_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, mload(value0))\n    }\n    function abi_decode_tuple_t_uint16(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint16(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_address(value_1)\n        value3 := value_1\n    }\n    function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_bool(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_addresst_uint256t_addresst_uint16(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n        value3 := abi_decode_uint16(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n    }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_struct$_EModeCategory_$21333_memory_ptr__to_t_struct$_EModeCategory_$21333_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let _1 := 0xffff\n        mstore(add(headStart, 32), and(mload(value0), _1))\n        mstore(add(headStart, 64), and(mload(add(value0, 32)), _1))\n        mstore(add(headStart, 96), and(mload(add(value0, 64)), _1))\n        mstore(add(headStart, 128), and(mload(add(value0, 96)), 0xffffffffffffffffffffffffffffffffffffffff))\n        let memberValue0 := mload(add(value0, 128))\n        mstore(add(headStart, 0xa0), 0xa0)\n        tail := abi_encode_string(memberValue0, add(headStart, 192))\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_addresst_address(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n        let value_3 := calldataload(add(headStart, 96))\n        validator_revert_address(value_3)\n        value3 := value_3\n        let value_4 := calldataload(add(headStart, 128))\n        validator_revert_address(value_4)\n        value4 := value_4\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_array_address_dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_uint16t_address(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := abi_decode_uint16(add(headStart, 96))\n        let value_1 := calldataload(add(headStart, 128))\n        validator_revert_address(value_1)\n        value4 := value_1\n    }\n    function abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_addresst_bytes_calldata_ptrt_uint16(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(calldataload(add(headStart, 32)), _1) { revert(0, 0) }\n        let value1_1, value2_1 := abi_decode_array_address_dyn_calldata(add(headStart, calldataload(add(headStart, 32))), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n        if gt(calldataload(add(headStart, 64)), _1) { revert(0, 0) }\n        let value3_1, value4_1 := abi_decode_array_address_dyn_calldata(add(headStart, calldataload(add(headStart, 64))), dataEnd)\n        value3 := value3_1\n        value4 := value4_1\n        if gt(calldataload(add(headStart, 96)), _1) { revert(0, 0) }\n        let value5_1, value6_1 := abi_decode_array_address_dyn_calldata(add(headStart, calldataload(add(headStart, 96))), dataEnd)\n        value5 := value5_1\n        value6 := value6_1\n        value7 := abi_decode_address(add(headStart, 128))\n        if gt(calldataload(add(headStart, 160)), _1) { revert(0, 0) }\n        let value8_1, value9_1 := abi_decode_bytes_calldata(add(headStart, calldataload(add(headStart, 160))), dataEnd)\n        value8 := value8_1\n        value9 := value9_1\n        value10 := abi_decode_uint16(add(headStart, 192))\n    }\n    function abi_decode_uint128(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint128t_uint128(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_uint128(headStart)\n        value1 := abi_decode_uint128(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_t_struct$_ReserveConfigurationMap_$21318_memory_ptr__to_t_struct$_ReserveConfigurationMap_$21318_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, mload(value0))\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_5567() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xa0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_tuple_t_uint8t_struct$_EModeCategory_$21333_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_uint8(headStart)\n        let _1 := 32\n        let offset := calldataload(add(headStart, _1))\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if slt(sub(dataEnd, _3), 0xa0) { revert(0, 0) }\n        let value := allocate_memory_5567()\n        mstore(value, abi_decode_uint16(_3))\n        mstore(add(value, _1), abi_decode_uint16(add(_3, _1)))\n        mstore(add(value, 64), abi_decode_uint16(add(_3, 64)))\n        let value_1 := calldataload(add(_3, 96))\n        validator_revert_address(value_1)\n        mstore(add(value, 96), value_1)\n        let offset_1 := calldataload(add(_3, 128))\n        if gt(offset_1, _2) { revert(0, 0) }\n        let _4 := add(_3, offset_1)\n        if iszero(slt(add(_4, 0x1f), dataEnd)) { revert(0, 0) }\n        let _5 := calldataload(_4)\n        if gt(_5, _2) { panic_error_0x41() }\n        let array := allocate_memory(add(and(add(_5, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), _1))\n        mstore(array, _5)\n        if gt(add(add(_4, _5), _1), dataEnd) { revert(0, 0) }\n        calldatacopy(add(array, _1), add(_4, _1), _5)\n        mstore(add(add(array, _5), _1), 0)\n        mstore(add(value, 128), array)\n        value1 := value\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_address(value_1)\n        value3 := value_1\n        value4 := calldataload(add(headStart, 128))\n        value5 := abi_decode_uint8(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n        value7 := calldataload(add(headStart, 224))\n    }\n    function abi_decode_tuple_t_addresst_struct$_ReserveConfigurationMap_$21318_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), 32) { revert(0, 0) }\n        value1 := add(headStart, 32)\n    }\n    function abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffff))\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_bool(value, pos)\n    {\n        mstore(pos, iszero(iszero(value)))\n    }\n    function abi_encode_uint8(value, pos)\n    { mstore(pos, and(value, 0xff)) }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 416)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), mload(value4))\n        mstore(add(headStart, 160), mload(add(value4, 32)))\n        let memberValue0 := mload(add(value4, 64))\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 192), and(memberValue0, _1))\n        mstore(add(headStart, 224), and(mload(add(value4, 96)), _1))\n        let memberValue0_1 := mload(add(value4, 128))\n        let _2 := 256\n        abi_encode_address(memberValue0_1, add(headStart, _2))\n        let memberValue0_2 := mload(add(value4, 160))\n        abi_encode_bool(memberValue0_2, add(headStart, 288))\n        let memberValue0_3 := mload(add(value4, 192))\n        abi_encode_address(memberValue0_3, add(headStart, 320))\n        let memberValue0_4 := mload(add(value4, 224))\n        abi_encode_uint8(memberValue0_4, add(headStart, 352))\n        let memberValue0_5 := mload(add(value4, _2))\n        abi_encode_address(memberValue0_5, add(headStart, 384))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xff))\n        mstore(add(headStart, 160), value5)\n        mstore(add(headStart, 192), value6)\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteSupplyParams_$21407_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSupplyParams_$21407_memory_ptr__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 96), and(mload(value3), _1))\n        mstore(add(headStart, 128), mload(add(value3, 32)))\n        mstore(add(headStart, 160), and(mload(add(value3, 64)), _1))\n        mstore(add(headStart, 192), and(mload(add(value3, 96)), 0xffff))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_mapping$_t_address_$_t_uint8_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr__fromStack_library_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 256)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), mload(value5))\n        mstore(add(headStart, 192), and(mload(add(value5, 32)), 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 224), and(mload(add(value5, 64)), 0xff))\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_enum_InterestRateMode(value, pos)\n    {\n        if iszero(lt(value, 3))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x21)\n            revert(0, 0x24)\n        }\n        mstore(pos, value)\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteRepayParams_$21445_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteRepayParams_$21445_memory_ptr__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 256)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 96), and(mload(value3), _1))\n        mstore(add(headStart, 128), mload(add(value3, 32)))\n        let memberValue0 := mload(add(value3, 64))\n        abi_encode_enum_InterestRateMode(memberValue0, add(headStart, 160))\n        mstore(add(headStart, 192), and(mload(add(value3, 96)), _1))\n        mstore(add(headStart, 224), iszero(iszero(mload(add(value3, 128)))))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$21315_storage_t_struct$_FlashloanSimpleParams_$21531_memory_ptr__to_t_uint256_t_struct$_FlashloanSimpleParams_$21531_memory_ptr__fromStack_library_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), 64)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 64), and(mload(value1), _1))\n        mstore(add(headStart, 96), and(mload(add(value1, 32)), _1))\n        mstore(add(headStart, 128), mload(add(value1, 64)))\n        let memberValue0 := mload(add(value1, 96))\n        mstore(add(headStart, 160), 0xe0)\n        let tail_1 := abi_encode_string(memberValue0, add(headStart, 288))\n        mstore(add(headStart, 192), and(mload(add(value1, 128)), 0xffff))\n        mstore(add(headStart, 0xe0), mload(add(value1, 160)))\n        mstore(add(headStart, 256), mload(add(value1, 192)))\n        tail := tail_1\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_t_address_t_bool_t_uint16_t_address_t_uint8__to_t_uint256_t_uint256_t_uint256_t_uint256_t_address_t_bool_t_uint256_t_address_t_uint8__fromStack_library_reversed(headStart, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 288)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 128), and(value4, _1))\n        mstore(add(headStart, 160), iszero(iszero(value5)))\n        mstore(add(headStart, 192), and(value6, 0xffff))\n        mstore(add(headStart, 224), and(value7, _1))\n        mstore(add(headStart, 256), and(value8, 0xff))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteWithdrawParams_$21458_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteWithdrawParams_$21458_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 320)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 128), and(mload(value4), _1))\n        mstore(add(headStart, 160), mload(add(value4, 32)))\n        mstore(add(headStart, 192), and(mload(add(value4, 64)), _1))\n        mstore(add(headStart, 224), mload(add(value4, 96)))\n        mstore(add(headStart, 256), and(mload(add(value4, 128)), _1))\n        mstore(add(headStart, 288), and(mload(add(value4, 160)), 0xff))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_t_address_t_uint256_t_address_t_uint16__to_t_uint256_t_uint256_t_uint256_t_address_t_uint256_t_address_t_uint16__fromStack_library_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 96), and(value3, _1))\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), and(value5, _1))\n        mstore(add(headStart, 192), and(value6, 0xffff))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_InitReserveParams_$21632_memory_ptr__to_t_uint256_t_uint256_t_struct$_InitReserveParams_$21632_memory_ptr__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 288)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 64), and(mload(value2), _1))\n        mstore(add(headStart, 96), and(mload(add(value2, 32)), _1))\n        mstore(add(headStart, 128), and(mload(add(value2, 64)), _1))\n        mstore(add(headStart, 160), and(mload(add(value2, 96)), _1))\n        mstore(add(headStart, 192), and(mload(add(value2, 128)), _1))\n        let memberValue0 := mload(add(value2, 160))\n        abi_encode_uint16(memberValue0, add(headStart, 224))\n        let memberValue0_1 := mload(add(value2, 192))\n        abi_encode_uint16(memberValue0_1, add(headStart, 256))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function increment_t_uint16(value) -> ret\n    {\n        let _1 := 0xffff\n        let value_1 := and(value, _1)\n        if eq(value_1, _1) { panic_error_0x11() }\n        ret := add(value_1, 1)\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$21315_storage_t_struct$_UserConfigurationMap_$21322_storage_t_address_t_enum$_InterestRateMode_$21337__to_t_uint256_t_uint256_t_address_t_uint8__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffffffffffff))\n        abi_encode_enum_InterestRateMode(value3, add(headStart, 96))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_array$_t_address_$dyn_calldata_ptr__to_t_uint256_t_array$_t_address_$dyn_memory_ptr__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 64)\n        mstore(headStart, value0)\n        let _1 := 32\n        mstore(add(headStart, _1), 64)\n        let pos := tail_1\n        mstore(tail_1, value2)\n        pos := add(headStart, 96)\n        let srcPtr := value1\n        let i := 0\n        for { } lt(i, value2) { i := add(i, 1) }\n        {\n            let value := calldataload(srcPtr)\n            validator_revert_address(value)\n            mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteBorrowParams_$21433_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteBorrowParams_$21433_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 512)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        abi_encode_address(mload(value4), add(headStart, 128))\n        let memberValue0 := mload(add(value4, 32))\n        abi_encode_address(memberValue0, add(headStart, 160))\n        let memberValue0_1 := mload(add(value4, 64))\n        abi_encode_address(memberValue0_1, add(headStart, 192))\n        mstore(add(headStart, 224), mload(add(value4, 96)))\n        let memberValue0_2 := mload(add(value4, 128))\n        let _1 := 256\n        abi_encode_enum_InterestRateMode(memberValue0_2, add(headStart, _1))\n        let memberValue0_3 := mload(add(value4, 160))\n        let _2 := 288\n        abi_encode_uint16(memberValue0_3, add(headStart, _2))\n        let memberValue0_4 := mload(add(value4, 192))\n        let _3 := 320\n        abi_encode_bool(memberValue0_4, add(headStart, _3))\n        let _4 := mload(add(value4, 224))\n        let _5 := 352\n        mstore(add(headStart, _5), _4)\n        mstore(add(headStart, 384), mload(add(value4, _1)))\n        let memberValue0_5 := mload(add(value4, _2))\n        abi_encode_address(memberValue0_5, add(headStart, 416))\n        let memberValue0_6 := mload(add(value4, _3))\n        abi_encode_uint8(memberValue0_6, add(headStart, 448))\n        let memberValue0_7 := mload(add(value4, _5))\n        abi_encode_address(memberValue0_7, add(headStart, 480))\n    }\n    function abi_encode_array_address_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_array_uint256_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_FlashloanParams_$21516_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FlashloanParams_$21516_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), 160)\n        abi_encode_address(mload(value4), add(headStart, 160))\n        let memberValue0 := mload(add(value4, 32))\n        let _1 := 0x01c0\n        mstore(add(headStart, 192), _1)\n        let tail_1 := abi_encode_array_address_dyn(memberValue0, add(headStart, 608))\n        let memberValue0_1 := mload(add(value4, 64))\n        let _2 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60\n        mstore(add(headStart, 224), add(sub(tail_1, headStart), _2))\n        let tail_2 := abi_encode_array_uint256_dyn(memberValue0_1, tail_1)\n        let memberValue0_2 := mload(add(value4, 96))\n        let _3 := 256\n        mstore(add(headStart, _3), add(sub(tail_2, headStart), _2))\n        let tail_3 := abi_encode_array_uint256_dyn(memberValue0_2, tail_2)\n        let memberValue0_3 := mload(add(value4, 128))\n        let _4 := 288\n        abi_encode_address(memberValue0_3, add(headStart, _4))\n        let memberValue0_4 := mload(add(value4, 160))\n        let _5 := 320\n        mstore(add(headStart, _5), add(sub(tail_3, headStart), _2))\n        let tail_4 := abi_encode_string(memberValue0_4, tail_3)\n        let memberValue0_5 := mload(add(value4, 192))\n        let _6 := 352\n        abi_encode_uint16(memberValue0_5, add(headStart, _6))\n        let _7 := mload(add(value4, 224))\n        let _8 := 384\n        mstore(add(headStart, _8), _7)\n        let _9 := mload(add(value4, _3))\n        let _10 := 416\n        mstore(add(headStart, _10), _9)\n        mstore(add(headStart, _1), mload(add(value4, _4)))\n        mstore(add(headStart, 480), mload(add(value4, _5)))\n        let memberValue0_6 := mload(add(value4, _6))\n        abi_encode_address(memberValue0_6, add(headStart, 512))\n        let memberValue0_7 := mload(add(value4, _8))\n        abi_encode_uint8(memberValue0_7, add(headStart, 544))\n        let memberValue0_8 := mload(add(value4, _10))\n        abi_encode_bool(memberValue0_8, add(headStart, 576))\n        tail := tail_4\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 256)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), mload(mload(value3)))\n        mstore(add(headStart, 128), mload(add(value3, 32)))\n        let memberValue0 := mload(add(value3, 64))\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 160), and(memberValue0, _1))\n        mstore(add(headStart, 192), and(mload(add(value3, 96)), _1))\n        mstore(add(headStart, 224), and(mload(add(value3, 128)), 0xff))\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        value3 := mload(add(headStart, 96))\n        value4 := mload(add(headStart, 128))\n        value5 := mload(add(headStart, 160))\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$21315_storage_t_address_t_address__to_t_uint256_t_address_t_address__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$_t_struct$_FinalizeTransferParams_$21484_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FinalizeTransferParams_$21484_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 416)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 128), and(mload(value4), _1))\n        mstore(add(headStart, 160), and(mload(add(value4, 32)), _1))\n        let memberValue0 := mload(add(value4, 64))\n        abi_encode_address(memberValue0, add(headStart, 192))\n        mstore(add(headStart, 224), mload(add(value4, 96)))\n        let _2 := mload(add(value4, 128))\n        let _3 := 256\n        mstore(add(headStart, _3), _2)\n        mstore(add(headStart, 288), mload(add(value4, 160)))\n        mstore(add(headStart, 320), mload(add(value4, 192)))\n        let memberValue0_1 := mload(add(value4, 224))\n        abi_encode_address(memberValue0_1, add(headStart, 352))\n        let memberValue0_2 := mload(add(value4, _3))\n        abi_encode_uint8(memberValue0_2, add(headStart, 384))\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$21315_storage_t_address_t_uint256_t_uint256_t_uint256__to_t_uint256_t_address_t_uint256_t_uint256_t_uint256__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_address__to_t_uint256_t_address__fromStack_library_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function update_storage_value_offset_0t_struct$_ReserveConfigurationMap_$21318_calldata_ptr_to_t_struct$_ReserveConfigurationMap_$21318_storage(slot, value)\n    {\n        sstore(slot, calldataload(value))\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"22244":[{"length":32,"start":865},{"length":32,"start":2896},{"length":32,"start":3112},{"length":32,"start":4278},{"length":32,"start":5641},{"length":32,"start":6360},{"length":32,"start":7981},{"length":32,"start":8177},{"length":32,"start":8720},{"length":32,"start":9444},{"length":32,"start":10040},{"length":32,"start":11513},{"length":32,"start":12890},{"length":32,"start":13287},{"length":32,"start":13658}]},"linkReferences":{"@aave/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol":{"BorrowLogic":[{"length":20,"start":4586},{"length":20,"start":5262},{"length":20,"start":7531},{"length":20,"start":7694},{"length":20,"start":10388},{"length":20,"start":12361}]},"@aave/core-v3/contracts/protocol/libraries/logic/BridgeLogic.sol":{"BridgeLogic":[{"length":20,"start":6805},{"length":20,"start":11912}]},"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol":{"EModeLogic":[{"length":20,"start":4170}]},"@aave/core-v3/contracts/protocol/libraries/logic/FlashLoanLogic.sol":{"FlashLoanLogic":[{"length":20,"start":5161},{"length":20,"start":9106}]},"@aave/core-v3/contracts/protocol/libraries/logic/LiquidationLogic.sol":{"LiquidationLogic":[{"length":20,"start":2765}]},"@aave/core-v3/contracts/protocol/libraries/logic/PoolLogic.sol":{"PoolLogic":[{"length":20,"start":7150},{"length":20,"start":7647},{"length":20,"start":9402},{"length":20,"start":10500},{"length":20,"start":12016}]},"@aave/core-v3/contracts/protocol/libraries/logic/SupplyLogic.sol":{"SupplyLogic":[{"length":20,"start":3639},{"length":20,"start":5553},{"length":20,"start":6130},{"length":20,"start":6218},{"length":20,"start":11378}]}},"object":"608060405234801561001057600080fd5b50600436106103145760003560e01c80636c6f6ae1116101a7578063d15e0053116100ee578063e82fec2f11610097578063ee3e210b11610071578063ee3e210b14610a7d578063f51e435b14610a90578063f8119d5114610aa357600080fd5b8063e82fec2f14610a3f578063e8eda9df14610702578063eddf1b7914610a5157600080fd5b8063d5ed3933116100c8578063d5ed393314610a06578063d65dc7a114610a19578063e43e88a114610a2c57600080fd5b8063d15e0053146109cb578063d1946dbc146109de578063d579ea7d146109f357600080fd5b8063bcb6e52211610150578063c4d66de81161012a578063c4d66de814610992578063cd112382146109a5578063cea9d26f146109b857600080fd5b8063bcb6e522146108fd578063bf92857c14610910578063c44b11f71461095057600080fd5b80639cd19996116101815780639cd19996146108c4578063a415bcad146108d7578063ab9c4b5d146108ea57600080fd5b80636c6f6ae11461087e5780637a708e921461089e57806394ba89a2146108b157600080fd5b8063386497fd1161026b5780635a3b74b91161021457806369328dec116101ee57806369328dec1461082a57806369a933a51461083d5780636a99c0361461085057600080fd5b80635a3b74b9146106ef578063617ba0371461070257806363c9b8601461071557600080fd5b80635275179711610245578063527517971461065e578063573ade811461068b57806357c68dc41461069e57600080fd5b8063386497fd146105e757806342b0b77c146105fa5780634417a5831461060d57600080fd5b80631d2118f9116102cd5780632dad97d4116102a75780632dad97d4146104005780633036b4391461041357806335ea6a751461042657600080fd5b80631d2118f9146103d2578063272d9072146103e557806328530a47146103ed57600080fd5b806302c205f0116102fe57806302c205f0146103495780630542975c1461035c578063074b2e431461039b57600080fd5b8062a718a9146103195780630148170e1461032e575b600080fd5b61032c610327366004613a0b565b610acb565b005b610336600181565b6040519081526020015b60405180910390f35b61032c610357366004613a96565b610cf8565b6103837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610340565b603a546fffffffffffffffffffffffffffffffff165b6040516fffffffffffffffffffffffffffffffff9091168152602001610340565b61032c6103e0366004613b15565b610e8e565b603954610336565b61032c6103fb366004613b4e565b611048565b61033661040e366004613b69565b6111e6565b61032c610421366004613b9e565b611303565b6105da610434366004613bb7565b604080516102008101825260006101e08201818152825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c0810191909152506001600160a01b0390811660009081526034602090815260409182902082516102008101845281546101e08201908152815260018201546fffffffffffffffffffffffffffffffff80821694830194909452700100000000000000000000000000000000908190048416948201949094526002820154808416606083015284900483166080820152600382015480841660a083015284810464ffffffffff1660c08301527501000000000000000000000000000000000000000000900461ffff1660e0820152600482015485166101008201526005820154851661012082015260068201548516610140820152600782015490941661016085015260088101548083166101808601529290920481166101a0840152600990910154166101c082015290565b6040516103409190613bd4565b6103366105f5366004613bb7565b611310565b61032c610608366004613d8d565b611337565b61064f61061b366004613bb7565b60408051602080820183526000918290526001600160a01b0393909316815260358352819020815192830190915254815290565b60405190518152602001610340565b61038361066c366004613e0f565b61ffff166000908152603660205260409020546001600160a01b031690565b610336610699366004613e2a565b61148a565b61032c6106ac366004613e0f565b603b805461ffff9092166a0100000000000000000000027fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff909216919091179055565b61032c6106fd366004613e74565b6115af565b61032c610710366004613ea2565b611750565b61032c610723366004613bb7565b6001600160a01b031660008181526034602081815260408084206003810180547501000000000000000000000000000000000000000000900461ffff1686526036845291852080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915595855292909152828255600182018390556002820183905580547fffffffffffffffffff0000000000000000000000000000000000000000000000169055600481018054841690556005810180548416905560068101805484169055600781018054909316909255600882015560090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055565b610336610838366004613ef3565b611846565b61032c61084b366004613ea2565b611a17565b603a5470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff166103b1565b61089161088c366004613b4e565b611ab7565b6040516103409190613fa0565b61032c6108ac366004613ff6565b611be4565b61032c6108bf366004614059565b611d43565b61032c6108d23660046140ca565b611db7565b61032c6108e536600461410c565b611e0c565b61032c6108f836600461414b565b61208a565b61032c61090b366004614265565b612402565b61092361091e366004613bb7565b612439565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610340565b61064f61095e366004613bb7565b60408051602080820183526000918290526001600160a01b0393909316815260348352819020815192830190915254815290565b61032c6109a0366004613bb7565b61264e565b61032c6109b3366004613b15565b61283a565b61032c6109c6366004614298565b6128b6565b6103366109d9366004613bb7565b612956565b6109e6612977565b60405161034091906142d9565b61032c610a013660046143cd565b612a7f565b61032c610a14366004614505565b612bde565b610336610a27366004613b69565b612e17565b61032c610a3a366004613bb7565b612eaa565b603b5467ffffffffffffffff16610336565b610336610a5f366004613bb7565b6001600160a01b031660009081526038602052604090205460ff1690565b610336610a8b36600461456a565b612f12565b61032c610a9e3660046145b0565b6130c6565b603b546a0100000000000000000000900461ffff1660405161ffff9091168152602001610340565b73__$4ae75c1292a38b6fb7c763c6480b4a24e8$__6383c1087d6034603660356037604051806101200160405280603b60089054906101000a900461ffff1661ffff1681526020018981526020018c6001600160a01b031681526020018b6001600160a01b031681526020018a6001600160a01b0316815260200188151581526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd0919061460f565b6001600160a01b0390811682528b81166000908152603860209081526040918290205460ff168185015281517f5eb88d3d000000000000000000000000000000000000000000000000000000008152825192909401937f000000000000000000000000000000000000000000000000000000000000000090931692635eb88d3d92600480830193928290030181865afa158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c95919061460f565b6001600160a01b03168152506040518663ffffffff1660e01b8152600401610cc195949392919061462c565b60006040518083038186803b158015610cd957600080fd5b505af4158015610ced573d6000803e3d6000fd5b505050505050505050565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c481018290526001600160a01b0389169063d505accf9060e401600060405180830381600087803b158015610d7d57600080fd5b505af1158015610d91573d6000803e3d6000fd5b505050506001600160a01b0386811660008181526035602090815260409182902082516080810184528d861681529182018c815282840194855261ffff8b81166060850190815294517f1913f16100000000000000000000000000000000000000000000000000000000815260346004820152603660248201526044810193909352925186166064830152516084820152925190931660a48301525190911660c482015273__$e9229d51100a3938db7663133e6dc5ffcb$__90631913f1619060e40160006040518083038186803b158015610e6c57600080fd5b505af4158015610e80573d6000803e3d6000fd5b505050505050505050505050565b610e9661324e565b60408051808201909152600281527f373700000000000000000000000000000000000000000000000000000000000060208201526001600160a01b038316610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b91906146e6565b60405180910390fd5b506001600160a01b0382166000908152603460205260409020600301547501000000000000000000000000000000000000000000900461ffff16151580610f9057506000805260366020527f4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e00546001600160a01b038381169116145b6040518060400160405280600281526020017f383200000000000000000000000000000000000000000000000000000000000081525090610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b91906146e6565b506001600160a01b03918216600090815260346020526040902060070180547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73__$5a3f4c3d06a1537986751467788655cb94$__635d5dc313603460366037603860356000336001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405280603b60089054906101000a900461ffff1661ffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611112573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611136919061460f565b6001600160a01b031681526020018960ff168152506040518763ffffffff1660e01b81526004016111b39695949392919095865260208087019590955260408087019490945260608601929092526080850152805160a0850152918201516001600160a01b031660c0840152015160ff1660e08201526101000190565b60006040518083038186803b1580156111cb57600080fd5b505af41580156111df573d6000803e3d6000fd5b5050505050565b600073__$f250b95a8491f1e84f401ed6d1693cd837$__6340e95de66034603660356000336001600160a01b03166001600160a01b031681526020019081526020016000206040518060a001604052808a6001600160a01b0316815260200189815260200188600281111561125d5761125d6146f9565b600281111561126e5761126e6146f9565b81523360208201526001604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526112b89493929190600401614763565b602060405180830381865af41580156112d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f991906147c9565b90505b9392505050565b61130b61324e565b603955565b6001600160a01b038116600090815260346020526040812061133190613355565b92915050565b60006040518060e00160405280886001600160a01b03168152602001876001600160a01b0316815260200186815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505061ffff8516602080840191909152603a546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008204811660408087019190915291166060909401939093526001600160a01b038a1682526034905281902090517fa1fe0e8d00000000000000000000000000000000000000000000000000000000815291925073__$3cafd0a079d9bba6279cd462d6f4920444$__9163a1fe0e8d916114519185906004016147e2565b60006040518083038186803b15801561146957600080fd5b505af415801561147d573d6000803e3d6000fd5b5050505050505050505050565b600073__$f250b95a8491f1e84f401ed6d1693cd837$__6340e95de66034603660356000876001600160a01b03166001600160a01b031681526020019081526020016000206040518060a001604052808b6001600160a01b031681526020018a8152602001896002811115611501576115016146f9565b6002811115611512576115126146f9565b81526001600160a01b03891660208201526000604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526115659493929190600401614763565b602060405180830381865af4158015611582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a691906147c9565b95945050505050565b73__$e9229d51100a3938db7663133e6dc5ffcb$__63bf697a2660346036603760356000336001600160a01b03166001600160a01b031681526020019081526020016000208787603b60089054906101000a900461ffff167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611665573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611689919061460f565b336000908152603860205260409081902054905160e08b901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260048101999099526024890197909752604488019590955260648701939093526001600160a01b039182166084870152151560a486015261ffff90911660c48501521660e483015260ff16610104820152610124015b60006040518083038186803b15801561173457600080fd5b505af4158015611748573d6000803e3d6000fd5b505050505050565b6001600160a01b038281166000818152603560209081526040918290208251608081018452898616815291820188815282840194855261ffff8781166060850190815294517f1913f16100000000000000000000000000000000000000000000000000000000815260346004820152603660248201526044810193909352925186166064830152516084820152925190931660a48301525190911660c482015273__$e9229d51100a3938db7663133e6dc5ffcb$__90631913f1619060e4015b60006040518083038186803b15801561182857600080fd5b505af415801561183c573d6000803e3d6000fd5b5050505050505050565b600073__$e9229d51100a3938db7663133e6dc5ffcb$__63186dea4460346036603760356000336001600160a01b03166001600160a01b031681526020019081526020016000206040518060c001604052808b6001600160a01b031681526020018a8152602001896001600160a01b03168152602001603b60089054906101000a900461ffff1661ffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611934573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611958919061460f565b6001600160a01b039081168252336000908152603860209081526040918290205460ff90811694820194909452815160e08b901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260048101999099526024890197909752604488019590955260648701939093528151831660848701529381015160a486015291820151811660c4850152606082015160e485015260808201511661010484015260a0015116610124820152610144016112b8565b611a1f6133e5565b6001600160a01b038281166000818152603560205260409081902090517f0413c86f0000000000000000000000000000000000000000000000000000000081526034600482015260366024820152604481019190915291861660648301526084820185905260a482015261ffff821660c482015273__$d21c6b38ea0f6668c62b5e103f4ea47254$__90630413c86f9060e401611810565b6040805160a081018252600080825260208201819052918101829052606080820192909252608081019190915260ff8216600090815260376020908152604091829020825160a081018452815461ffff808216835262010000820481169483019490945264010000000081049093169381019390935266010000000000009091046001600160a01b03166060830152600181018054608084019190611b5b90614860565b80601f0160208091040260200160405190810160405280929190818152602001828054611b8790614860565b8015611bd45780601f10611ba957610100808354040283529160200191611bd4565b820191906000526020600020905b815481529060010190602001808311611bb757829003601f168201915b5050505050815250509050919050565b611bec61324e565b73__$370dc613f77da7345d5cfe489611ba2a28$__6369fc1bdf603460366040518060e001604052808a6001600160a01b03168152602001896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b03168152602001603b60089054906101000a900461ffff1661ffff168152602001611c96603b5461ffff6a01000000000000000000009091041690565b61ffff168152506040518463ffffffff1660e01b8152600401611cbb939291906148ae565b602060405180830381865af4158015611cd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfc9190614931565b156111df57603b805468010000000000000000900461ffff16906008611d218361497d565b91906101000a81548161ffff021916908361ffff160217905550505050505050565b6001600160a01b0382166000908152603460209081526040808320338452603590925290912073__$f250b95a8491f1e84f401ed6d1693cd837$__9163eac4d7039185856002811115611d9857611d986146f9565b6040518563ffffffff1660e01b815260040161171c949392919061499f565b6040517f48c2ca8c00000000000000000000000000000000000000000000000000000000815273__$370dc613f77da7345d5cfe489611ba2a28$__906348c2ca8c9061171c90603490869086906004016149c9565b73__$f250b95a8491f1e84f401ed6d1693cd837$__631e6473f960346036603760356000876001600160a01b03166001600160a01b031681526020019081526020016000206040518061018001604052808c6001600160a01b03168152602001336001600160a01b03168152602001886001600160a01b031681526020018b81526020018a6002811115611ea257611ea26146f9565b6002811115611eb357611eb36146f9565b815261ffff808b166020808401919091526001604080850191909152603b5467ffffffffffffffff81166060860152680100000000000000009004909216608084015281517ffca513a8000000000000000000000000000000000000000000000000000000008152915160a0909301926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263fca513a89260048083019391928290030181865afa158015611f75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f99919061460f565b6001600160a01b0390811682528981166000908152603860209081526040918290205460ff168185015281517f5eb88d3d000000000000000000000000000000000000000000000000000000008152825192909401937f000000000000000000000000000000000000000000000000000000000000000090931692635eb88d3d92600480830193928290030181865afa15801561203a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205e919061460f565b6001600160a01b03168152506040518663ffffffff1660e01b8152600401610cc1959493929190614a21565b6000604051806101c001604052808d6001600160a01b031681526020018c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d9182918501908490808284376000920191909152505050908252506040805160208a810282810182019093528a82529283019290918b918b9182918501908490808284376000920191909152505050908252506001600160a01b03871660208083019190915260408051601f88018390048302810183018252878152920191908790879081908401838280828437600092018290525093855250505061ffff808616602080850191909152603a546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008204811660408088019190915291166060860152603b5467ffffffffffffffff8116608087015268010000000000000000900490921660a08501526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660c08601819052908b16845260388252928290205460ff1660e085015281517f707cd71600000000000000000000000000000000000000000000000000000000815291516101009094019363707cd7169260048082019392918290030181865afa1580156122a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c7919061460f565b6040517ffa50f2970000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03919091169063fa50f29790602401602060405180830381865afa158015612326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234a9190614931565b151590526001600160a01b0386166000908152603560205260409081902090517f2e7263ea00000000000000000000000000000000000000000000000000000000815291925073__$3cafd0a079d9bba6279cd462d6f4920444$__91632e7263ea916123c491603491603691603791908890600401614b89565b60006040518083038186803b1580156123dc57600080fd5b505af41580156123f0573d6000803e3d6000fd5b50505050505050505050505050505050565b61240a61324e565b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617603a55565b604080516001600160a01b0383811660008181526035602090815285822060c0860187525460a086019081528552603b5468010000000000000000900461ffff16818601528486019290925284517ffca513a8000000000000000000000000000000000000000000000000000000008152945190948594859485948594859473__$370dc613f77da7345d5cfe489611ba2a28$__946326ec273f9460349460369460379460608501937f0000000000000000000000000000000000000000000000000000000000000000169263fca513a8926004808401938290030181865afa15801561252a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254e919061460f565b6001600160a01b0390811682528e81166000908152603860209081526040918290205460ff90811694820194909452815160e08a901b7fffffffff00000000000000000000000000000000000000000000000000000000168152600481019890985260248801969096526044870194909452825151606487015293820151608486015291810151831660a4850152606081015190921660c48401526080909101511660e48201526101040160c060405180830381865af4158015612616573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263a9190614d08565b949c939b5091995097509550909350915050565b60015460039060ff16806126615750303b155b8061266d575060005481115b6126f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610f0b565b60015460ff1615801561273657600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146040518060400160405280600281526020017f3132000000000000000000000000000000000000000000000000000000000000815250906127d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b91906146e6565b50603b80547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166109c4179055801561283557600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050565b6001600160a01b038281166000818152603460205260409081902090517f6973f74400000000000000000000000000000000000000000000000000000000815260048101919091526024810191909152908216604482015273__$f250b95a8491f1e84f401ed6d1693cd837$__90636973f7449060640161171c565b6128be613558565b6040517f87b322b20000000000000000000000000000000000000000000000000000000081526001600160a01b038085166004830152831660248201526044810182905273__$370dc613f77da7345d5cfe489611ba2a28$__906387b322b29060640160006040518083038186803b15801561293957600080fd5b505af415801561294d573d6000803e3d6000fd5b50505050505050565b6001600160a01b0381166000908152603460205260408120611331906136cb565b603b5460609068010000000000000000900461ffff166000808267ffffffffffffffff8111156129a9576129a9614326565b6040519080825280602002602001820160405280156129d2578160200160208202803683370190505b50905060005b83811015612a75576000818152603660205260409020546001600160a01b031615612a55576000818152603660205260409020546001600160a01b031682612a208584614d52565b81518110612a3057612a30614d69565b60200260200101906001600160a01b031690816001600160a01b031681525050612a63565b82612a5f81614d98565b9350505b80612a6d81614d98565b9150506129d8565b5091038152919050565b612a8761324e565b60408051808201909152600281527f3136000000000000000000000000000000000000000000000000000000000000602082015260ff8316612af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b91906146e6565b5060ff821660009081526037602090815260409182902083518154838601519486015160608701516001600160a01b03166601000000000000027fffffffffffff0000000000000000000000000000000000000000ffffffffffff61ffff92831664010000000002167fffffffffffff00000000000000000000000000000000000000000000ffffffff97831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009094169290941691909117919091179490941617929092178255608083015180518493926111df92600185019291019061393f565b6001600160a01b03868116600090815260346020908152604091829020600401548251808401909352600283527f3131000000000000000000000000000000000000000000000000000000000000918301919091529091163314612c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b91906146e6565b5073__$e9229d51100a3938db7663133e6dc5ffcb$__638a5dadd160346036603760356040518061012001604052808d6001600160a01b031681526020018c6001600160a01b031681526020018b6001600160a01b031681526020018a8152602001898152602001888152602001603b60089054906101000a900461ffff1661ffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d79919061460f565b6001600160a01b0390811682528d166000908152603860209081526040918290205460ff16920191909152517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b168152612ddf959493929190600401614dd1565b60006040518083038186803b158015612df757600080fd5b505af4158015612e0b573d6000803e3d6000fd5b50505050505050505050565b6000612e216133e5565b6001600160a01b0384166000818152603460205260409081902060395491517f8e743248000000000000000000000000000000000000000000000000000000008152600481019190915260248101929092526044820185905260648201849052608482015273__$d21c6b38ea0f6668c62b5e103f4ea47254$__90638e7432489060a4016112b8565b612eb261324e565b6040517f1e3b4145000000000000000000000000000000000000000000000000000000008152603460048201526001600160a01b038216602482015273__$370dc613f77da7345d5cfe489611ba2a28$__90631e3b4145906044016111b3565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c481018290526000906001600160a01b038a169063d505accf9060e401600060405180830381600087803b158015612f9a57600080fd5b505af1158015612fae573d6000803e3d6000fd5b5050505060006040518060a001604052808b6001600160a01b031681526020018a8152602001896002811115612fe657612fe66146f9565b6002811115612ff757612ff76146f9565b81526001600160a01b0389166020808301829052600060409384018190529182526035905281902090517f40e95de600000000000000000000000000000000000000000000000000000000815291925073__$f250b95a8491f1e84f401ed6d1693cd837$__916340e95de691613077916034916036918790600401614763565b602060405180830381865af4158015613094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b891906147c9565b9a9950505050505050505050565b6130ce61324e565b60408051808201909152600281527f373700000000000000000000000000000000000000000000000000000000000060208201526001600160a01b038316613143576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b91906146e6565b506001600160a01b0382166000908152603460205260409020600301547501000000000000000000000000000000000000000000900461ffff161515806131bf57506000805260366020527f4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e00546001600160a01b038381169116145b6040518060400160405280600281526020017f38320000000000000000000000000000000000000000000000000000000000008152509061322d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b91906146e6565b506001600160a01b0391909116600090815260346020526040902090359055565b336001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663631adfca6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132da919061460f565b6001600160a01b0316146040518060400160405280600281526020017f313000000000000000000000000000000000000000000000000000000000000081525090613352576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b91906146e6565b50565b6003810154600090700100000000000000000000000000000000900464ffffffffff164281141561339b575050600201546fffffffffffffffffffffffffffffffff1690565b60028301546112fc906fffffffffffffffffffffffffffffffff808216916133d991700100000000000000000000000000000000909104168461374f565b9061375c565b50919050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015613443573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613467919061460f565b6040517f726600ce0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03919091169063726600ce90602401602060405180830381865afa1580156134c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ea9190614931565b6040518060400160405280600181526020017f360000000000000000000000000000000000000000000000000000000000000081525090613352576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b91906146e6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135da919061460f565b6040517f7be53ca10000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039190911690637be53ca190602401602060405180830381865afa158015613639573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061365d9190614931565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090613352576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b91906146e6565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415613711575050600101546fffffffffffffffffffffffffffffffff1690565b60018301546112fc906fffffffffffffffffffffffffffffffff808216916133d99170010000000000000000000000000000000090910416846137b3565b60006112fc8383426137f8565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761379157600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b6000806137c764ffffffffff841642614d52565b6137d19085614e86565b6301e13380900490506137f0816b033b2e3c9fd0803ce8000000614ef2565b949350505050565b60008061380c64ffffffffff851684614d52565b905080613828576b033b2e3c9fd0803ce80000009150506112fc565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101600080806002851161385e576000613863565b600285035b925066038882915c40006138778a8061375c565b8161388457613884614ec3565b0491506301e13380613896838b61375c565b816138a3576138a3614ec3565b0490506000826138b38688614e86565b6138bd9190614e86565b600290049050600082856138d1888a614e86565b6138db9190614e86565b6138e59190614e86565b60069004905080826301e133806138fc8a8f614e86565b6139069190614f0a565b61391c906b033b2e3c9fd0803ce8000000614ef2565b6139269190614ef2565b6139309190614ef2565b9b9a5050505050505050505050565b82805461394b90614860565b90600052602060002090601f01602090048101928261396d57600085556139b3565b82601f1061398657805160ff19168380011785556139b3565b828001600101855582156139b3579182015b828111156139b3578251825591602001919060010190613998565b506139bf9291506139c3565b5090565b5b808211156139bf57600081556001016139c4565b6001600160a01b038116811461335257600080fd5b80356139f8816139d8565b919050565b801515811461335257600080fd5b600080600080600060a08688031215613a2357600080fd5b8535613a2e816139d8565b94506020860135613a3e816139d8565b93506040860135613a4e816139d8565b9250606086013591506080860135613a65816139fd565b809150509295509295909350565b803561ffff811681146139f857600080fd5b803560ff811681146139f857600080fd5b600080600080600080600080610100898b031215613ab357600080fd5b8835613abe816139d8565b9750602089013596506040890135613ad5816139d8565b9550613ae360608a01613a73565b945060808901359350613af860a08a01613a85565b925060c0890135915060e089013590509295985092959890939650565b60008060408385031215613b2857600080fd5b8235613b33816139d8565b91506020830135613b43816139d8565b809150509250929050565b600060208284031215613b6057600080fd5b6112fc82613a85565b600080600060608486031215613b7e57600080fd5b8335613b89816139d8565b95602085013595506040909401359392505050565b600060208284031215613bb057600080fd5b5035919050565b600060208284031215613bc957600080fd5b81356112fc816139d8565b81515181526101e081016020830151613c0160208401826fffffffffffffffffffffffffffffffff169052565b506040830151613c2560408401826fffffffffffffffffffffffffffffffff169052565b506060830151613c4960608401826fffffffffffffffffffffffffffffffff169052565b506080830151613c6d60808401826fffffffffffffffffffffffffffffffff169052565b5060a0830151613c9160a08401826fffffffffffffffffffffffffffffffff169052565b5060c0830151613caa60c084018264ffffffffff169052565b5060e0830151613cc060e084018261ffff169052565b50610100838101516001600160a01b039081169184019190915261012080850151821690840152610140808501518216908401526101608085015190911690830152610180808401516fffffffffffffffffffffffffffffffff908116918401919091526101a0808501518216908401526101c09384015116929091019190915290565b60008083601f840112613d5657600080fd5b50813567ffffffffffffffff811115613d6e57600080fd5b602083019150836020828501011115613d8657600080fd5b9250929050565b60008060008060008060a08789031215613da657600080fd5b8635613db1816139d8565b95506020870135613dc1816139d8565b945060408701359350606087013567ffffffffffffffff811115613de457600080fd5b613df089828a01613d44565b9094509250613e03905060808801613a73565b90509295509295509295565b600060208284031215613e2157600080fd5b6112fc82613a73565b60008060008060808587031215613e4057600080fd5b8435613e4b816139d8565b935060208501359250604085013591506060850135613e69816139d8565b939692955090935050565b60008060408385031215613e8757600080fd5b8235613e92816139d8565b91506020830135613b43816139fd565b60008060008060808587031215613eb857600080fd5b8435613ec3816139d8565b9350602085013592506040850135613eda816139d8565b9150613ee860608601613a73565b905092959194509250565b600080600060608486031215613f0857600080fd5b8335613f13816139d8565b9250602084013591506040840135613f2a816139d8565b809150509250925092565b6000815180845260005b81811015613f5b57602081850181015186830182015201613f3f565b81811115613f6d576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061ffff808451166020840152806020850151166040840152806040850151166060840152506001600160a01b036060840151166080830152608083015160a0808401526137f060c0840182613f35565b600080600080600060a0868803121561400e57600080fd5b8535614019816139d8565b94506020860135614029816139d8565b93506040860135614039816139d8565b92506060860135614049816139d8565b91506080860135613a65816139d8565b6000806040838503121561406c57600080fd5b8235614077816139d8565b946020939093013593505050565b60008083601f84011261409757600080fd5b50813567ffffffffffffffff8111156140af57600080fd5b6020830191508360208260051b8501011115613d8657600080fd5b600080602083850312156140dd57600080fd5b823567ffffffffffffffff8111156140f457600080fd5b61410085828601614085565b90969095509350505050565b600080600080600060a0868803121561412457600080fd5b853561412f816139d8565b9450602086013593506040860135925061404960608701613a73565b600080600080600080600080600080600060e08c8e03121561416c57600080fd5b6141758c6139ed565b9a5067ffffffffffffffff8060208e0135111561419157600080fd5b6141a18e60208f01358f01614085565b909b50995060408d01358110156141b757600080fd5b6141c78e60408f01358f01614085565b909950975060608d01358110156141dd57600080fd5b6141ed8e60608f01358f01614085565b90975095506141fe60808e016139ed565b94508060a08e0135111561421157600080fd5b506142228d60a08e01358e01613d44565b909350915061423360c08d01613a73565b90509295989b509295989b9093969950565b80356fffffffffffffffffffffffffffffffff811681146139f857600080fd5b6000806040838503121561427857600080fd5b61428183614245565b915061428f60208401614245565b90509250929050565b6000806000606084860312156142ad57600080fd5b83356142b8816139d8565b925060208401356142c8816139d8565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b8181101561431a5783516001600160a01b0316835292840192918401916001016142f5565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561437857614378614326565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156143c5576143c5614326565b604052919050565b600080604083850312156143e057600080fd5b6143e983613a85565b915060208084013567ffffffffffffffff8082111561440757600080fd5b9085019060a0828803121561441b57600080fd5b614423614355565b61442c83613a73565b8152614439848401613a73565b8482015261444960408401613a73565b6040820152606083013561445c816139d8565b606082015260808301358281111561447357600080fd5b80840193505087601f84011261448857600080fd5b82358281111561449a5761449a614326565b6144ca857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161437e565b925080835288858286010111156144e057600080fd5b8085850186850137600085828501015250816080820152809450505050509250929050565b60008060008060008060c0878903121561451e57600080fd5b8635614529816139d8565b95506020870135614539816139d8565b94506040870135614549816139d8565b959894975094956060810135955060808101359460a0909101359350915050565b600080600080600080600080610100898b03121561458757600080fd5b8835614592816139d8565b975060208901359650604089013595506060890135613ae3816139d8565b60008082840360408112156145c457600080fd5b83356145cf816139d8565b925060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08201121561460157600080fd5b506020830190509250929050565b60006020828403121561462157600080fd5b81516112fc816139d8565b60006101a08201905086825285602083015284604083015283606083015282516080830152602083015160a083015260408301516001600160a01b0380821660c08501528060608601511660e08501525050608083015161010061469a818501836001600160a01b03169052565b60a0850151151561012085015260c08501516001600160a01b0390811661014086015260e086015160ff166101608601529085015190811661018085015290505b509695505050505050565b6020815260006112fc6020830184613f35565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061475f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b6000610100820190508582528460208301528360408301526001600160a01b038084511660608401526020840151608084015260408401516147a860a0850182614728565b5060608401511660c0830152608090920151151560e0909101529392505050565b6000602082840312156147db57600080fd5b5051919050565b8281526040602082015260006001600160a01b038084511660408401528060208501511660608401525060408301516080830152606083015160e060a0840152614830610120840182613f35565b905061ffff60808501511660c084015260a084015160e084015260c0840151610100840152809150509392505050565b600181811c9082168061487457607f821691505b602082108114156133df577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000610120820190508482528360208301526001600160a01b038084511660408401528060208501511660608401528060408501511660808401528060608501511660a08401528060808501511660c08401525060a083015161491760e084018261ffff169052565b5060c083015161ffff811661010084015250949350505050565b60006020828403121561494357600080fd5b81516112fc816139fd565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff808316818114156149955761499561494e565b6001019392505050565b848152602081018490526001600160a01b0383166040820152608081016115a66060830184614728565b83815260406020808301829052908201839052600090849060608401835b86811015614a155783356149fa816139d8565b6001600160a01b0316825292820192908201906001016149e7565b50979650505050505050565b85815260208101859052604081018490526060810183905281516001600160a01b03166080820152610200810160208301516001600160a01b03811660a08401525060408301516001600160a01b03811660c084015250606083015160e08301526080830151610100614a9681850183614728565b60a08501519150610120614aaf8186018461ffff169052565b60c08601519250610140614ac68187018515159052565b60e08701516101608781019190915292870151610180870152908601516001600160a01b039081166101a08701529086015160ff166101c0860152908501519081166101e085015290506146db565b600081518084526020808501945080840160005b83811015614b4e5781516001600160a01b031687529582019590820190600101614b29565b509495945050505050565b600081518084526020808501945080840160005b83811015614b4e57815187529582019590820190600101614b6d565b85815284602082015283604082015282606082015260a06080820152614bbb60a0820183516001600160a01b03169052565b600060208301516101c08060c0850152614bd9610260850183614b15565b915060408501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60808685030160e0870152614c158483614b59565b935060608701519150610100818786030181880152614c348584614b59565b945060808801519250610120614c54818901856001600160a01b03169052565b60a089015193506101408389880301818a0152614c718786613f35565b965060c08a015194506101609350614c8e848a018661ffff169052565b60e08a0151945061018085818b0152838b015195506101a0935085848b0152828b0151878b0152818b01516101e08b0152848b01519650614cdb6102008b01886001600160a01b03169052565b8a015160ff81166102208b01529550614cf2915050565b8701518015156102408801529250614a15915050565b60008060008060008060c08789031215614d2157600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b600082821015614d6457614d6461494e565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614dca57614dca61494e565b5060010190565b60006101a0820190508682528560208301528460408301528360608301526001600160a01b038084511660808401528060208501511660a0840152506040830151614e2760c08401826001600160a01b03169052565b50606083015160e08301526080830151610100818185015260a085015161012085015260c085015161014085015260e08501519150614e726101608501836001600160a01b03169052565b84015160ff811661018085015290506146db565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ebe57614ebe61494e565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008219821115614f0557614f0561494e565b500190565b600082614f40577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212203dace2086ac467024fce8515bf399ed22a9f18383ebf61cb7c46e3ede374d70364736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x314 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6C6F6AE1 GT PUSH2 0x1A7 JUMPI DUP1 PUSH4 0xD15E0053 GT PUSH2 0xEE JUMPI DUP1 PUSH4 0xE82FEC2F GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xEE3E210B GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xEE3E210B EQ PUSH2 0xA7D JUMPI DUP1 PUSH4 0xF51E435B EQ PUSH2 0xA90 JUMPI DUP1 PUSH4 0xF8119D51 EQ PUSH2 0xAA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE82FEC2F EQ PUSH2 0xA3F JUMPI DUP1 PUSH4 0xE8EDA9DF EQ PUSH2 0x702 JUMPI DUP1 PUSH4 0xEDDF1B79 EQ PUSH2 0xA51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD5ED3933 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0xD5ED3933 EQ PUSH2 0xA06 JUMPI DUP1 PUSH4 0xD65DC7A1 EQ PUSH2 0xA19 JUMPI DUP1 PUSH4 0xE43E88A1 EQ PUSH2 0xA2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD15E0053 EQ PUSH2 0x9CB JUMPI DUP1 PUSH4 0xD1946DBC EQ PUSH2 0x9DE JUMPI DUP1 PUSH4 0xD579EA7D EQ PUSH2 0x9F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCB6E522 GT PUSH2 0x150 JUMPI DUP1 PUSH4 0xC4D66DE8 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x992 JUMPI DUP1 PUSH4 0xCD112382 EQ PUSH2 0x9A5 JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0x9B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCB6E522 EQ PUSH2 0x8FD JUMPI DUP1 PUSH4 0xBF92857C EQ PUSH2 0x910 JUMPI DUP1 PUSH4 0xC44B11F7 EQ PUSH2 0x950 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9CD19996 GT PUSH2 0x181 JUMPI DUP1 PUSH4 0x9CD19996 EQ PUSH2 0x8C4 JUMPI DUP1 PUSH4 0xA415BCAD EQ PUSH2 0x8D7 JUMPI DUP1 PUSH4 0xAB9C4B5D EQ PUSH2 0x8EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6C6F6AE1 EQ PUSH2 0x87E JUMPI DUP1 PUSH4 0x7A708E92 EQ PUSH2 0x89E JUMPI DUP1 PUSH4 0x94BA89A2 EQ PUSH2 0x8B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x386497FD GT PUSH2 0x26B JUMPI DUP1 PUSH4 0x5A3B74B9 GT PUSH2 0x214 JUMPI DUP1 PUSH4 0x69328DEC GT PUSH2 0x1EE JUMPI DUP1 PUSH4 0x69328DEC EQ PUSH2 0x82A JUMPI DUP1 PUSH4 0x69A933A5 EQ PUSH2 0x83D JUMPI DUP1 PUSH4 0x6A99C036 EQ PUSH2 0x850 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5A3B74B9 EQ PUSH2 0x6EF JUMPI DUP1 PUSH4 0x617BA037 EQ PUSH2 0x702 JUMPI DUP1 PUSH4 0x63C9B860 EQ PUSH2 0x715 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52751797 GT PUSH2 0x245 JUMPI DUP1 PUSH4 0x52751797 EQ PUSH2 0x65E JUMPI DUP1 PUSH4 0x573ADE81 EQ PUSH2 0x68B JUMPI DUP1 PUSH4 0x57C68DC4 EQ PUSH2 0x69E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x386497FD EQ PUSH2 0x5E7 JUMPI DUP1 PUSH4 0x42B0B77C EQ PUSH2 0x5FA JUMPI DUP1 PUSH4 0x4417A583 EQ PUSH2 0x60D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1D2118F9 GT PUSH2 0x2CD JUMPI DUP1 PUSH4 0x2DAD97D4 GT PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x2DAD97D4 EQ PUSH2 0x400 JUMPI DUP1 PUSH4 0x3036B439 EQ PUSH2 0x413 JUMPI DUP1 PUSH4 0x35EA6A75 EQ PUSH2 0x426 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1D2118F9 EQ PUSH2 0x3D2 JUMPI DUP1 PUSH4 0x272D9072 EQ PUSH2 0x3E5 JUMPI DUP1 PUSH4 0x28530A47 EQ PUSH2 0x3ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2C205F0 GT PUSH2 0x2FE JUMPI DUP1 PUSH4 0x2C205F0 EQ PUSH2 0x349 JUMPI DUP1 PUSH4 0x542975C EQ PUSH2 0x35C JUMPI DUP1 PUSH4 0x74B2E43 EQ PUSH2 0x39B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH3 0xA718A9 EQ PUSH2 0x319 JUMPI DUP1 PUSH4 0x148170E EQ PUSH2 0x32E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x32C PUSH2 0x327 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A0B JUMP JUMPDEST PUSH2 0xACB JUMP JUMPDEST STOP JUMPDEST PUSH2 0x336 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x32C PUSH2 0x357 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A96 JUMP JUMPDEST PUSH2 0xCF8 JUMP JUMPDEST PUSH2 0x383 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x340 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x340 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x3E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B15 JUMP JUMPDEST PUSH2 0xE8E JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x336 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x3FB CALLDATASIZE PUSH1 0x4 PUSH2 0x3B4E JUMP JUMPDEST PUSH2 0x1048 JUMP JUMPDEST PUSH2 0x336 PUSH2 0x40E CALLDATASIZE PUSH1 0x4 PUSH2 0x3B69 JUMP JUMPDEST PUSH2 0x11E6 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x421 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B9E JUMP JUMPDEST PUSH2 0x1303 JUMP JUMPDEST PUSH2 0x5DA PUSH2 0x434 CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x200 DUP2 ADD DUP3 MSTORE PUSH1 0x0 PUSH2 0x1E0 DUP3 ADD DUP2 DUP2 MSTORE DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1A0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x200 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH2 0x1E0 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH17 0x100000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP5 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x2 DUP3 ADD SLOAD DUP1 DUP5 AND PUSH1 0x60 DUP4 ADD MSTORE DUP5 SWAP1 DIV DUP4 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x3 DUP3 ADD SLOAD DUP1 DUP5 AND PUSH1 0xA0 DUP4 ADD MSTORE DUP5 DUP2 DIV PUSH5 0xFFFFFFFFFF AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD DUP6 AND PUSH2 0x100 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD DUP6 AND PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD DUP6 AND PUSH2 0x140 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD SWAP1 SWAP5 AND PUSH2 0x160 DUP6 ADD MSTORE PUSH1 0x8 DUP2 ADD SLOAD DUP1 DUP4 AND PUSH2 0x180 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP3 DIV DUP2 AND PUSH2 0x1A0 DUP5 ADD MSTORE PUSH1 0x9 SWAP1 SWAP2 ADD SLOAD AND PUSH2 0x1C0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x340 SWAP2 SWAP1 PUSH2 0x3BD4 JUMP JUMPDEST PUSH2 0x336 PUSH2 0x5F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB7 JUMP JUMPDEST PUSH2 0x1310 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x608 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D8D JUMP JUMPDEST PUSH2 0x1337 JUMP JUMPDEST PUSH2 0x64F PUSH2 0x61B CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND DUP2 MSTORE PUSH1 0x35 DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 MLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x340 JUMP JUMPDEST PUSH2 0x383 PUSH2 0x66C CALLDATASIZE PUSH1 0x4 PUSH2 0x3E0F JUMP JUMPDEST PUSH2 0xFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x336 PUSH2 0x699 CALLDATASIZE PUSH1 0x4 PUSH2 0x3E2A JUMP JUMPDEST PUSH2 0x148A JUMP JUMPDEST PUSH2 0x32C PUSH2 0x6AC CALLDATASIZE PUSH1 0x4 PUSH2 0x3E0F JUMP JUMPDEST PUSH1 0x3B DUP1 SLOAD PUSH2 0xFFFF SWAP1 SWAP3 AND PUSH11 0x100000000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x32C PUSH2 0x6FD CALLDATASIZE PUSH1 0x4 PUSH2 0x3E74 JUMP JUMPDEST PUSH2 0x15AF JUMP JUMPDEST PUSH2 0x32C PUSH2 0x710 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EA2 JUMP JUMPDEST PUSH2 0x1750 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x723 CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND DUP7 MSTORE PUSH1 0x36 DUP5 MSTORE SWAP2 DUP6 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP6 DUP6 MSTORE SWAP3 SWAP1 SWAP2 MSTORE DUP3 DUP3 SSTORE PUSH1 0x1 DUP3 ADD DUP4 SWAP1 SSTORE PUSH1 0x2 DUP3 ADD DUP4 SWAP1 SSTORE DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x4 DUP2 ADD DUP1 SLOAD DUP5 AND SWAP1 SSTORE PUSH1 0x5 DUP2 ADD DUP1 SLOAD DUP5 AND SWAP1 SSTORE PUSH1 0x6 DUP2 ADD DUP1 SLOAD DUP5 AND SWAP1 SSTORE PUSH1 0x7 DUP2 ADD DUP1 SLOAD SWAP1 SWAP4 AND SWAP1 SWAP3 SSTORE PUSH1 0x8 DUP3 ADD SSTORE PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x336 PUSH2 0x838 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EF3 JUMP JUMPDEST PUSH2 0x1846 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x84B CALLDATASIZE PUSH1 0x4 PUSH2 0x3EA2 JUMP JUMPDEST PUSH2 0x1A17 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3B1 JUMP JUMPDEST PUSH2 0x891 PUSH2 0x88C CALLDATASIZE PUSH1 0x4 PUSH2 0x3B4E JUMP JUMPDEST PUSH2 0x1AB7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x340 SWAP2 SWAP1 PUSH2 0x3FA0 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x8AC CALLDATASIZE PUSH1 0x4 PUSH2 0x3FF6 JUMP JUMPDEST PUSH2 0x1BE4 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x8BF CALLDATASIZE PUSH1 0x4 PUSH2 0x4059 JUMP JUMPDEST PUSH2 0x1D43 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x8D2 CALLDATASIZE PUSH1 0x4 PUSH2 0x40CA JUMP JUMPDEST PUSH2 0x1DB7 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x8E5 CALLDATASIZE PUSH1 0x4 PUSH2 0x410C JUMP JUMPDEST PUSH2 0x1E0C JUMP JUMPDEST PUSH2 0x32C PUSH2 0x8F8 CALLDATASIZE PUSH1 0x4 PUSH2 0x414B JUMP JUMPDEST PUSH2 0x208A JUMP JUMPDEST PUSH2 0x32C PUSH2 0x90B CALLDATASIZE PUSH1 0x4 PUSH2 0x4265 JUMP JUMPDEST PUSH2 0x2402 JUMP JUMPDEST PUSH2 0x923 PUSH2 0x91E CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB7 JUMP JUMPDEST PUSH2 0x2439 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH2 0x340 JUMP JUMPDEST PUSH2 0x64F PUSH2 0x95E CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND DUP2 MSTORE PUSH1 0x34 DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x32C PUSH2 0x9A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB7 JUMP JUMPDEST PUSH2 0x264E JUMP JUMPDEST PUSH2 0x32C PUSH2 0x9B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B15 JUMP JUMPDEST PUSH2 0x283A JUMP JUMPDEST PUSH2 0x32C PUSH2 0x9C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4298 JUMP JUMPDEST PUSH2 0x28B6 JUMP JUMPDEST PUSH2 0x336 PUSH2 0x9D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB7 JUMP JUMPDEST PUSH2 0x2956 JUMP JUMPDEST PUSH2 0x9E6 PUSH2 0x2977 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x340 SWAP2 SWAP1 PUSH2 0x42D9 JUMP JUMPDEST PUSH2 0x32C PUSH2 0xA01 CALLDATASIZE PUSH1 0x4 PUSH2 0x43CD JUMP JUMPDEST PUSH2 0x2A7F JUMP JUMPDEST PUSH2 0x32C PUSH2 0xA14 CALLDATASIZE PUSH1 0x4 PUSH2 0x4505 JUMP JUMPDEST PUSH2 0x2BDE JUMP JUMPDEST PUSH2 0x336 PUSH2 0xA27 CALLDATASIZE PUSH1 0x4 PUSH2 0x3B69 JUMP JUMPDEST PUSH2 0x2E17 JUMP JUMPDEST PUSH2 0x32C PUSH2 0xA3A CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB7 JUMP JUMPDEST PUSH2 0x2EAA JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0x336 JUMP JUMPDEST PUSH2 0x336 PUSH2 0xA5F CALLDATASIZE PUSH1 0x4 PUSH2 0x3BB7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x336 PUSH2 0xA8B CALLDATASIZE PUSH1 0x4 PUSH2 0x456A JUMP JUMPDEST PUSH2 0x2F12 JUMP JUMPDEST PUSH2 0x32C PUSH2 0xA9E CALLDATASIZE PUSH1 0x4 PUSH2 0x45B0 JUMP JUMPDEST PUSH2 0x30C6 JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH11 0x100000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x40 MLOAD PUSH2 0xFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x340 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x83C1087D PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x37 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBAC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBD0 SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP12 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x5EB88D3D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP5 ADD SWAP4 PUSH32 0x0 SWAP1 SWAP4 AND SWAP3 PUSH4 0x5EB88D3D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC71 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC95 SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xCC1 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x462C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xCD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xCED JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD7D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD91 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP14 DUP7 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP13 DUP2 MSTORE DUP3 DUP5 ADD SWAP5 DUP6 MSTORE PUSH2 0xFFFF DUP12 DUP2 AND PUSH1 0x60 DUP6 ADD SWAP1 DUP2 MSTORE SWAP5 MLOAD PUSH32 0x1913F16100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 MLOAD DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE MLOAD PUSH1 0x84 DUP3 ADD MSTORE SWAP3 MLOAD SWAP1 SWAP4 AND PUSH1 0xA4 DUP4 ADD MSTORE MLOAD SWAP1 SWAP2 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1913F161 SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xE80 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xE96 PUSH2 0x324E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xF14 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF0B SWAP2 SWAP1 PUSH2 0x46E6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0xF90 JUMPI POP PUSH1 0x0 DUP1 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH32 0x4CB2B152C1B54CE671907A93C300FD5AA72383A9D4EC19A81E3333632AE92E00 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xFFE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF0B SWAP2 SWAP1 PUSH2 0x46E6 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0x0 PUSH4 0x5D5DC313 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x38 PUSH1 0x35 PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1112 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1136 SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0xFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP8 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x11B3 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 SWAP6 DUP7 MSTORE PUSH1 0x20 DUP1 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x40 DUP1 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP6 ADD MSTORE DUP1 MLOAD PUSH1 0xA0 DUP6 ADD MSTORE SWAP2 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xC0 DUP5 ADD MSTORE ADD MLOAD PUSH1 0xFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x11CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x11DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x40E95DE6 PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x125D JUMPI PUSH2 0x125D PUSH2 0x46F9 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x126E JUMPI PUSH2 0x126E PUSH2 0x46F9 JUMP JUMPDEST DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x40 SWAP2 DUP3 ADD MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x12B8 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x4763 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x12D5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12F9 SWAP2 SWAP1 PUSH2 0x47C9 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x130B PUSH2 0x324E JUMP JUMPDEST PUSH1 0x39 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x1331 SWAP1 PUSH2 0x3355 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP6 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 DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH2 0xFFFF DUP6 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV DUP2 AND PUSH1 0x40 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x60 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND DUP3 MSTORE PUSH1 0x34 SWAP1 MSTORE DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0xA1FE0E8D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0xA1FE0E8D SWAP2 PUSH2 0x1451 SWAP2 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x47E2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1469 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x147D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x40E95DE6 PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x0 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1501 JUMPI PUSH2 0x1501 PUSH2 0x46F9 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1512 JUMPI PUSH2 0x1512 PUSH2 0x46F9 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x40 SWAP2 DUP3 ADD MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x1565 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x4763 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1582 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15A6 SWAP2 SWAP1 PUSH2 0x47C9 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH20 0x0 PUSH4 0xBF697A26 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP8 DUP8 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1665 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1689 SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0xE0 DUP12 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP10 SWAP1 SWAP10 MSTORE PUSH1 0x24 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x44 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x64 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x84 DUP8 ADD MSTORE ISZERO ISZERO PUSH1 0xA4 DUP7 ADD MSTORE PUSH2 0xFFFF SWAP1 SWAP2 AND PUSH1 0xC4 DUP6 ADD MSTORE AND PUSH1 0xE4 DUP4 ADD MSTORE PUSH1 0xFF AND PUSH2 0x104 DUP3 ADD MSTORE PUSH2 0x124 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1734 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1748 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP10 DUP7 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP9 DUP2 MSTORE DUP3 DUP5 ADD SWAP5 DUP6 MSTORE PUSH2 0xFFFF DUP8 DUP2 AND PUSH1 0x60 DUP6 ADD SWAP1 DUP2 MSTORE SWAP5 MLOAD PUSH32 0x1913F16100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 MLOAD DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE MLOAD PUSH1 0x84 DUP3 ADD MSTORE SWAP3 MLOAD SWAP1 SWAP4 AND PUSH1 0xA4 DUP4 ADD MSTORE MLOAD SWAP1 SWAP2 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1913F161 SWAP1 PUSH1 0xE4 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1828 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x183C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x186DEA44 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1934 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1958 SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP12 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP10 SWAP1 SWAP10 MSTORE PUSH1 0x24 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x44 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x64 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP2 MLOAD DUP4 AND PUSH1 0x84 DUP8 ADD MSTORE SWAP4 DUP2 ADD MLOAD PUSH1 0xA4 DUP7 ADD MSTORE SWAP2 DUP3 ADD MLOAD DUP2 AND PUSH1 0xC4 DUP6 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0xE4 DUP6 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD AND PUSH2 0x104 DUP5 ADD MSTORE PUSH1 0xA0 ADD MLOAD AND PUSH2 0x124 DUP3 ADD MSTORE PUSH2 0x144 ADD PUSH2 0x12B8 JUMP JUMPDEST PUSH2 0x1A1F PUSH2 0x33E5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x413C86F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x413C86F SWAP1 PUSH1 0xE4 ADD PUSH2 0x1810 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xA0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND DUP4 MSTORE PUSH3 0x10000 DUP3 DIV DUP2 AND SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH5 0x100000000 DUP2 DIV SWAP1 SWAP4 AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH7 0x1000000000000 SWAP1 SWAP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0x80 DUP5 ADD SWAP2 SWAP1 PUSH2 0x1B5B SWAP1 PUSH2 0x4860 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1B87 SWAP1 PUSH2 0x4860 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1BD4 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1BA9 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1BD4 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 0x1BB7 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1BEC PUSH2 0x324E JUMP JUMPDEST PUSH20 0x0 PUSH4 0x69FC1BDF PUSH1 0x34 PUSH1 0x36 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1C96 PUSH1 0x3B SLOAD PUSH2 0xFFFF PUSH11 0x100000000000000000000 SWAP1 SWAP2 DIV AND SWAP1 JUMP JUMPDEST PUSH2 0xFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1CBB SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x48AE JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1CD8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1CFC SWAP2 SWAP1 PUSH2 0x4931 JUMP JUMPDEST ISZERO PUSH2 0x11DF JUMPI PUSH1 0x3B DUP1 SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND SWAP1 PUSH1 0x8 PUSH2 0x1D21 DUP4 PUSH2 0x497D JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH2 0xFFFF MUL NOT AND SWAP1 DUP4 PUSH2 0xFFFF AND MUL OR SWAP1 SSTORE POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE PUSH1 0x35 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 PUSH20 0x0 SWAP2 PUSH4 0xEAC4D703 SWAP2 DUP6 DUP6 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1D98 JUMPI PUSH2 0x1D98 PUSH2 0x46F9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x171C SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x499F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x48C2CA8C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x48C2CA8C SWAP1 PUSH2 0x171C SWAP1 PUSH1 0x34 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x49C9 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x1E6473F9 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1EA2 JUMPI PUSH2 0x1EA2 PUSH2 0x46F9 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1EB3 JUMPI PUSH2 0x1EB3 PUSH2 0x46F9 JUMP JUMPDEST DUP2 MSTORE PUSH2 0xFFFF DUP1 DUP12 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x40 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH9 0x10000000000000000 SWAP1 DIV SWAP1 SWAP3 AND PUSH1 0x80 DUP5 ADD MSTORE DUP2 MLOAD PUSH32 0xFCA513A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 MLOAD PUSH1 0xA0 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP3 PUSH4 0xFCA513A8 SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP2 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F75 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F99 SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x5EB88D3D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP5 ADD SWAP4 PUSH32 0x0 SWAP1 SWAP4 AND SWAP3 PUSH4 0x5EB88D3D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x203A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x205E SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xCC1 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4A21 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1C0 ADD PUSH1 0x40 MSTORE DUP1 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 DUP13 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP13 DUP2 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP13 DUP3 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 DUP14 SWAP2 DUP14 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP11 DUP2 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP11 DUP3 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 DUP12 SWAP2 DUP12 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F DUP9 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD DUP3 MSTORE DUP8 DUP2 MSTORE SWAP3 ADD SWAP2 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH2 0xFFFF DUP1 DUP7 AND PUSH1 0x20 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV DUP2 AND PUSH1 0x40 DUP1 DUP9 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x80 DUP8 ADD MSTORE PUSH9 0x10000000000000000 SWAP1 DIV SWAP1 SWAP3 AND PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0xC0 DUP7 ADD DUP2 SWAP1 MSTORE SWAP1 DUP12 AND DUP5 MSTORE PUSH1 0x38 DUP3 MSTORE SWAP3 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0xE0 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 MLOAD PUSH2 0x100 SWAP1 SWAP5 ADD SWAP4 PUSH4 0x707CD716 SWAP3 PUSH1 0x4 DUP1 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22A3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x22C7 SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFA50F29700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xFA50F297 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2326 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x234A SWAP2 SWAP1 PUSH2 0x4931 JUMP JUMPDEST ISZERO ISZERO SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x2E7263EA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x2E7263EA SWAP2 PUSH2 0x23C4 SWAP2 PUSH1 0x34 SWAP2 PUSH1 0x36 SWAP2 PUSH1 0x37 SWAP2 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x4B89 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x23DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x23F0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x240A PUSH2 0x324E JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP2 AND OR PUSH1 0x3A SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE DUP6 DUP3 KECCAK256 PUSH1 0xC0 DUP7 ADD DUP8 MSTORE SLOAD PUSH1 0xA0 DUP7 ADD SWAP1 DUP2 MSTORE DUP6 MSTORE PUSH1 0x3B SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND DUP2 DUP7 ADD MSTORE DUP5 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP5 MLOAD PUSH32 0xFCA513A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP5 MLOAD SWAP1 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 PUSH20 0x0 SWAP5 PUSH4 0x26EC273F SWAP5 PUSH1 0x34 SWAP5 PUSH1 0x36 SWAP5 PUSH1 0x37 SWAP5 PUSH1 0x60 DUP6 ADD SWAP4 PUSH32 0x0 AND SWAP3 PUSH4 0xFCA513A8 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x252A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x254E SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP15 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP11 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH1 0x24 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x44 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP3 MLOAD MLOAD PUSH1 0x64 DUP8 ADD MSTORE SWAP4 DUP3 ADD MLOAD PUSH1 0x84 DUP7 ADD MSTORE SWAP2 DUP2 ADD MLOAD DUP4 AND PUSH1 0xA4 DUP6 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP1 SWAP3 AND PUSH1 0xC4 DUP5 ADD MSTORE PUSH1 0x80 SWAP1 SWAP2 ADD MLOAD AND PUSH1 0xE4 DUP3 ADD MSTORE PUSH2 0x104 ADD PUSH1 0xC0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2616 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x263A SWAP2 SWAP1 PUSH2 0x4D08 JUMP JUMPDEST SWAP5 SWAP13 SWAP4 SWAP12 POP SWAP2 SWAP10 POP SWAP8 POP SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x3 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x2661 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x266D JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x26F9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xF0B JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x2736 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3132000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x27D9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF0B SWAP2 SWAP1 PUSH2 0x46E6 JUMP JUMPDEST POP PUSH1 0x3B DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH2 0x9C4 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x2835 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x6973F74400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x6973F744 SWAP1 PUSH1 0x64 ADD PUSH2 0x171C JUMP JUMPDEST PUSH2 0x28BE PUSH2 0x3558 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x87B322B200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x87B322B2 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2939 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x294D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x1331 SWAP1 PUSH2 0x36CB JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH1 0x60 SWAP1 PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 DUP1 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x29A9 JUMPI PUSH2 0x29A9 PUSH2 0x4326 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x29D2 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A75 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x2A55 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH2 0x2A20 DUP6 DUP5 PUSH2 0x4D52 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x2A30 JUMPI PUSH2 0x2A30 PUSH2 0x4D69 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH2 0x2A63 JUMP JUMPDEST DUP3 PUSH2 0x2A5F DUP2 PUSH2 0x4D98 JUMP JUMPDEST SWAP4 POP POP JUMPDEST DUP1 PUSH2 0x2A6D DUP2 PUSH2 0x4D98 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x29D8 JUMP JUMPDEST POP SWAP2 SUB DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2A87 PUSH2 0x324E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3136000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP4 AND PUSH2 0x2AF6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF0B SWAP2 SWAP1 PUSH2 0x46E6 JUMP JUMPDEST POP PUSH1 0xFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD DUP4 DUP7 ADD MLOAD SWAP5 DUP7 ADD MLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH7 0x1000000000000 MUL PUSH32 0xFFFFFFFFFFFF0000000000000000000000000000000000000000FFFFFFFFFFFF PUSH2 0xFFFF SWAP3 DUP4 AND PUSH5 0x100000000 MUL AND PUSH32 0xFFFFFFFFFFFF00000000000000000000000000000000000000000000FFFFFFFF SWAP8 DUP4 AND PUSH3 0x10000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 SWAP1 SWAP5 AND SWAP3 SWAP1 SWAP5 AND SWAP2 SWAP1 SWAP2 OR SWAP2 SWAP1 SWAP2 OR SWAP5 SWAP1 SWAP5 AND OR SWAP3 SWAP1 SWAP3 OR DUP3 SSTORE PUSH1 0x80 DUP4 ADD MLOAD DUP1 MLOAD DUP5 SWAP4 SWAP3 PUSH2 0x11DF SWAP3 PUSH1 0x1 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x393F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP4 MSTORE PUSH32 0x3131000000000000000000000000000000000000000000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 AND CALLER EQ PUSH2 0x2C6F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF0B SWAP2 SWAP1 PUSH2 0x46E6 JUMP JUMPDEST POP PUSH20 0x0 PUSH4 0x8A5DADD1 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D55 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2D79 SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP14 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP9 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x2DDF SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x4DD1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2DF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2E0B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E21 PUSH2 0x33E5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x39 SLOAD SWAP2 MLOAD PUSH32 0x8E74324800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x44 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0x64 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x8E743248 SWAP1 PUSH1 0xA4 ADD PUSH2 0x12B8 JUMP JUMPDEST PUSH2 0x2EB2 PUSH2 0x324E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x1E3B414500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1E3B4145 SWAP1 PUSH1 0x44 ADD PUSH2 0x11B3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2FAE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2FE6 JUMPI PUSH2 0x2FE6 PUSH2 0x46F9 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2FF7 JUMPI PUSH2 0x2FF7 PUSH2 0x46F9 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x40 SWAP4 DUP5 ADD DUP2 SWAP1 MSTORE SWAP2 DUP3 MSTORE PUSH1 0x35 SWAP1 MSTORE DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x40E95DE600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x40E95DE6 SWAP2 PUSH2 0x3077 SWAP2 PUSH1 0x34 SWAP2 PUSH1 0x36 SWAP2 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x4763 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x3094 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x30B8 SWAP2 SWAP1 PUSH2 0x47C9 JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x30CE PUSH2 0x324E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x3143 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF0B SWAP2 SWAP1 PUSH2 0x46E6 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x31BF JUMPI POP PUSH1 0x0 DUP1 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH32 0x4CB2B152C1B54CE671907A93C300FD5AA72383A9D4EC19A81E3333632AE92E00 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x322D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF0B SWAP2 SWAP1 PUSH2 0x46E6 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 CALLDATALOAD SWAP1 SSTORE JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x631ADFCA PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x32B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x32DA SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3130000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3352 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF0B SWAP2 SWAP1 PUSH2 0x46E6 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x339B JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x12FC SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x33D9 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x374F JUMP JUMPDEST SWAP1 PUSH2 0x375C JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3443 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3467 SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x726600CE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x726600CE SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x34C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x34EA SWAP2 SWAP1 PUSH2 0x4931 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3600000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3352 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF0B SWAP2 SWAP1 PUSH2 0x46E6 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x35B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x35DA SWAP2 SWAP1 PUSH2 0x460F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3639 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x365D SWAP2 SWAP1 PUSH2 0x4931 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3352 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF0B SWAP2 SWAP1 PUSH2 0x46E6 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x3711 JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x12FC SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x33D9 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x37B3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12FC DUP4 DUP4 TIMESTAMP PUSH2 0x37F8 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x3791 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x37C7 PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x4D52 JUMP JUMPDEST PUSH2 0x37D1 SWAP1 DUP6 PUSH2 0x4E86 JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x37F0 DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x4EF2 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x380C PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x4D52 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x3828 JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x12FC JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x385E JUMPI PUSH1 0x0 PUSH2 0x3863 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x3877 DUP11 DUP1 PUSH2 0x375C JUMP JUMPDEST DUP2 PUSH2 0x3884 JUMPI PUSH2 0x3884 PUSH2 0x4EC3 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x3896 DUP4 DUP12 PUSH2 0x375C JUMP JUMPDEST DUP2 PUSH2 0x38A3 JUMPI PUSH2 0x38A3 PUSH2 0x4EC3 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x38B3 DUP7 DUP9 PUSH2 0x4E86 JUMP JUMPDEST PUSH2 0x38BD SWAP2 SWAP1 PUSH2 0x4E86 JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x38D1 DUP9 DUP11 PUSH2 0x4E86 JUMP JUMPDEST PUSH2 0x38DB SWAP2 SWAP1 PUSH2 0x4E86 JUMP JUMPDEST PUSH2 0x38E5 SWAP2 SWAP1 PUSH2 0x4E86 JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x38FC DUP11 DUP16 PUSH2 0x4E86 JUMP JUMPDEST PUSH2 0x3906 SWAP2 SWAP1 PUSH2 0x4F0A JUMP JUMPDEST PUSH2 0x391C SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x4EF2 JUMP JUMPDEST PUSH2 0x3926 SWAP2 SWAP1 PUSH2 0x4EF2 JUMP JUMPDEST PUSH2 0x3930 SWAP2 SWAP1 PUSH2 0x4EF2 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x394B SWAP1 PUSH2 0x4860 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x396D JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x39B3 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x3986 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x39B3 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x39B3 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x39B3 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x3998 JUMP JUMPDEST POP PUSH2 0x39BF SWAP3 SWAP2 POP PUSH2 0x39C3 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x39BF JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x39C4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3352 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x39F8 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3352 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3A23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x3A2E DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x3A3E DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x3A4E DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x3A65 DUP2 PUSH2 0x39FD JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x39F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x39F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x3AB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x3ABE DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH2 0x3AD5 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP6 POP PUSH2 0x3AE3 PUSH1 0x60 DUP11 ADD PUSH2 0x3A73 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD SWAP4 POP PUSH2 0x3AF8 PUSH1 0xA0 DUP11 ADD PUSH2 0x3A85 JUMP JUMPDEST SWAP3 POP PUSH1 0xC0 DUP10 ADD CALLDATALOAD SWAP2 POP PUSH1 0xE0 DUP10 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 SWAP1 SWAP4 SWAP7 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3B28 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3B33 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3B43 DUP2 PUSH2 0x39D8 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3B60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12FC DUP3 PUSH2 0x3A85 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3B7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3B89 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3BB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3BC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x12FC DUP2 PUSH2 0x39D8 JUMP JUMPDEST DUP2 MLOAD MLOAD DUP2 MSTORE PUSH2 0x1E0 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x3C01 PUSH1 0x20 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x3C25 PUSH1 0x40 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x3C49 PUSH1 0x60 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x3C6D PUSH1 0x80 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x3C91 PUSH1 0xA0 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0x3CAA PUSH1 0xC0 DUP5 ADD DUP3 PUSH5 0xFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0x3CC0 PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH2 0x100 DUP4 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x120 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x140 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x160 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP1 DUP5 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x1C0 SWAP4 DUP5 ADD MLOAD AND SWAP3 SWAP1 SWAP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x3D56 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3D6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x3D86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x3DA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x3DB1 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x3DC1 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3DE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3DF0 DUP10 DUP3 DUP11 ADD PUSH2 0x3D44 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0x3E03 SWAP1 POP PUSH1 0x80 DUP9 ADD PUSH2 0x3A73 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3E21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12FC DUP3 PUSH2 0x3A73 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3E40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x3E4B DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x3E69 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3E87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3E92 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3B43 DUP2 PUSH2 0x39FD JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3EB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x3EC3 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x3EDA DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP2 POP PUSH2 0x3EE8 PUSH1 0x60 DUP7 ADD PUSH2 0x3A73 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3F08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3F13 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x3F2A DUP2 PUSH2 0x39D8 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3F5B JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x3F3F JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x3F6D JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP5 MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0xA0 DUP1 DUP5 ADD MSTORE PUSH2 0x37F0 PUSH1 0xC0 DUP5 ADD DUP3 PUSH2 0x3F35 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x400E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4019 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x4029 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x4039 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x4049 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x3A65 DUP2 PUSH2 0x39D8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x406C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4077 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x4097 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x40AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x3D86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x40DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x40F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4100 DUP6 DUP3 DUP7 ADD PUSH2 0x4085 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4124 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x412F DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x4049 PUSH1 0x60 DUP8 ADD PUSH2 0x3A73 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x416C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4175 DUP13 PUSH2 0x39ED JUMP JUMPDEST SWAP11 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0x20 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x4191 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x41A1 DUP15 PUSH1 0x20 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x4085 JUMP JUMPDEST SWAP1 SWAP12 POP SWAP10 POP PUSH1 0x40 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x41B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x41C7 DUP15 PUSH1 0x40 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x4085 JUMP JUMPDEST SWAP1 SWAP10 POP SWAP8 POP PUSH1 0x60 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x41DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x41ED DUP15 PUSH1 0x60 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x4085 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH2 0x41FE PUSH1 0x80 DUP15 ADD PUSH2 0x39ED JUMP JUMPDEST SWAP5 POP DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x4211 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4222 DUP14 PUSH1 0xA0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x3D44 JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x4233 PUSH1 0xC0 DUP14 ADD PUSH2 0x3A73 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x39F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4281 DUP4 PUSH2 0x4245 JUMP JUMPDEST SWAP2 POP PUSH2 0x428F PUSH1 0x20 DUP5 ADD PUSH2 0x4245 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x42AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x42B8 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x42C8 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD 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 0x431A JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x42F5 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4378 JUMPI PUSH2 0x4378 PUSH2 0x4326 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x43C5 JUMPI PUSH2 0x43C5 PUSH2 0x4326 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x43E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43E9 DUP4 PUSH2 0x3A85 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP1 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x4407 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP6 ADD SWAP1 PUSH1 0xA0 DUP3 DUP9 SUB SLT ISZERO PUSH2 0x441B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4423 PUSH2 0x4355 JUMP JUMPDEST PUSH2 0x442C DUP4 PUSH2 0x3A73 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x4439 DUP5 DUP5 ADD PUSH2 0x3A73 JUMP JUMPDEST DUP5 DUP3 ADD MSTORE PUSH2 0x4449 PUSH1 0x40 DUP5 ADD PUSH2 0x3A73 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH2 0x445C DUP2 PUSH2 0x39D8 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x4473 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP5 ADD SWAP4 POP POP DUP8 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x4488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x449A JUMPI PUSH2 0x449A PUSH2 0x4326 JUMP JUMPDEST PUSH2 0x44CA DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x437E JUMP JUMPDEST SWAP3 POP DUP1 DUP4 MSTORE DUP9 DUP6 DUP3 DUP7 ADD ADD GT ISZERO PUSH2 0x44E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP6 DUP6 ADD DUP7 DUP6 ADD CALLDATACOPY PUSH1 0x0 DUP6 DUP3 DUP6 ADD ADD MSTORE POP DUP2 PUSH1 0x80 DUP3 ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x451E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x4529 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x4539 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0x4549 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP5 SWAP6 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP6 POP PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP5 PUSH1 0xA0 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x4587 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x4592 DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD SWAP6 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD PUSH2 0x3AE3 DUP2 PUSH2 0x39D8 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 SUB PUSH1 0x40 DUP2 SLT ISZERO PUSH2 0x45C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x45CF DUP2 PUSH2 0x39D8 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP3 ADD SLT ISZERO PUSH2 0x4601 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 DUP4 ADD SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4621 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x12FC DUP2 PUSH2 0x39D8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 ADD SWAP1 POP DUP7 DUP3 MSTORE DUP6 PUSH1 0x20 DUP4 ADD MSTORE DUP5 PUSH1 0x40 DUP4 ADD MSTORE DUP4 PUSH1 0x60 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0xC0 DUP6 ADD MSTORE DUP1 PUSH1 0x60 DUP7 ADD MLOAD AND PUSH1 0xE0 DUP6 ADD MSTORE POP POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x469A DUP2 DUP6 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD ISZERO ISZERO PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0xC0 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH2 0x140 DUP7 ADD MSTORE PUSH1 0xE0 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x160 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x180 DUP6 ADD MSTORE SWAP1 POP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x12FC PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3F35 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x475F JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 DUP3 ADD SWAP1 POP DUP6 DUP3 MSTORE DUP5 PUSH1 0x20 DUP4 ADD MSTORE DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x47A8 PUSH1 0xA0 DUP6 ADD DUP3 PUSH2 0x4728 JUMP JUMPDEST POP PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x80 SWAP1 SWAP3 ADD MLOAD ISZERO ISZERO PUSH1 0xE0 SWAP1 SWAP2 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x47DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x4830 PUSH2 0x120 DUP5 ADD DUP3 PUSH2 0x3F35 JUMP JUMPDEST SWAP1 POP PUSH2 0xFFFF PUSH1 0x80 DUP6 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xA0 DUP5 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0xC0 DUP5 ADD MLOAD PUSH2 0x100 DUP5 ADD MSTORE DUP1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x4874 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x33DF JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP5 DUP3 MSTORE DUP4 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0x60 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE DUP1 PUSH1 0x80 DUP6 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x4917 PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0xFFFF DUP2 AND PUSH2 0x100 DUP5 ADD MSTORE POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4943 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x12FC DUP2 PUSH2 0x39FD JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x4995 JUMPI PUSH2 0x4995 PUSH2 0x494E JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD PUSH2 0x15A6 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x4728 JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE SWAP1 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP5 SWAP1 PUSH1 0x60 DUP5 ADD DUP4 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x4A15 JUMPI DUP4 CALLDATALOAD PUSH2 0x49FA DUP2 PUSH2 0x39D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x49E7 JUMP JUMPDEST POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x200 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x4A96 DUP2 DUP6 ADD DUP4 PUSH2 0x4728 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x120 PUSH2 0x4AAF DUP2 DUP7 ADD DUP5 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xC0 DUP7 ADD MLOAD SWAP3 POP PUSH2 0x140 PUSH2 0x4AC6 DUP2 DUP8 ADD DUP6 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MLOAD PUSH2 0x160 DUP8 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP8 ADD MLOAD PUSH2 0x180 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH2 0x1A0 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x1C0 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x46DB JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4B4E JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x4B29 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4B4E JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x4B6D JUMP JUMPDEST DUP6 DUP2 MSTORE DUP5 PUSH1 0x20 DUP3 ADD MSTORE DUP4 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x4BBB PUSH1 0xA0 DUP3 ADD DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x1C0 DUP1 PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x4BD9 PUSH2 0x260 DUP6 ADD DUP4 PUSH2 0x4B15 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP6 ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 DUP1 DUP7 DUP6 SUB ADD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x4C15 DUP5 DUP4 PUSH2 0x4B59 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP2 POP PUSH2 0x100 DUP2 DUP8 DUP7 SUB ADD DUP2 DUP9 ADD MSTORE PUSH2 0x4C34 DUP6 DUP5 PUSH2 0x4B59 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP9 ADD MLOAD SWAP3 POP PUSH2 0x120 PUSH2 0x4C54 DUP2 DUP10 ADD DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP10 ADD MLOAD SWAP4 POP PUSH2 0x140 DUP4 DUP10 DUP9 SUB ADD DUP2 DUP11 ADD MSTORE PUSH2 0x4C71 DUP8 DUP7 PUSH2 0x3F35 JUMP JUMPDEST SWAP7 POP PUSH1 0xC0 DUP11 ADD MLOAD SWAP5 POP PUSH2 0x160 SWAP4 POP PUSH2 0x4C8E DUP5 DUP11 ADD DUP7 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP11 ADD MLOAD SWAP5 POP PUSH2 0x180 DUP6 DUP2 DUP12 ADD MSTORE DUP4 DUP12 ADD MLOAD SWAP6 POP PUSH2 0x1A0 SWAP4 POP DUP6 DUP5 DUP12 ADD MSTORE DUP3 DUP12 ADD MLOAD DUP8 DUP12 ADD MSTORE DUP2 DUP12 ADD MLOAD PUSH2 0x1E0 DUP12 ADD MSTORE DUP5 DUP12 ADD MLOAD SWAP7 POP PUSH2 0x4CDB PUSH2 0x200 DUP12 ADD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP11 ADD MLOAD PUSH1 0xFF DUP2 AND PUSH2 0x220 DUP12 ADD MSTORE SWAP6 POP PUSH2 0x4CF2 SWAP2 POP POP JUMP JUMPDEST DUP8 ADD MLOAD DUP1 ISZERO ISZERO PUSH2 0x240 DUP9 ADD MSTORE SWAP3 POP PUSH2 0x4A15 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x4D21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 MLOAD SWAP6 POP PUSH1 0x20 DUP8 ADD MLOAD SWAP5 POP PUSH1 0x40 DUP8 ADD MLOAD SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP3 POP PUSH1 0x80 DUP8 ADD MLOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x4D64 JUMPI PUSH2 0x4D64 PUSH2 0x494E JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x4DCA JUMPI PUSH2 0x4DCA PUSH2 0x494E JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 ADD SWAP1 POP DUP7 DUP3 MSTORE DUP6 PUSH1 0x20 DUP4 ADD MSTORE DUP5 PUSH1 0x40 DUP4 ADD MSTORE DUP4 PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x4E27 PUSH1 0xC0 DUP5 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 DUP2 DUP2 DUP6 ADD MSTORE PUSH1 0xA0 DUP6 ADD MLOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0xC0 DUP6 ADD MLOAD PUSH2 0x140 DUP6 ADD MSTORE PUSH1 0xE0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x4E72 PUSH2 0x160 DUP6 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP5 ADD MLOAD PUSH1 0xFF DUP2 AND PUSH2 0x180 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x46DB JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x4EBE JUMPI PUSH2 0x4EBE PUSH2 0x494E JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x4F05 JUMPI PUSH2 0x4F05 PUSH2 0x494E JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x4F40 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURNDATASIZE 0xAC 0xE2 ADDMOD PUSH11 0xC467024FCE8515BF399ED2 0x2A SWAP16 XOR CODESIZE RETURNDATACOPY 0xBF PUSH2 0xCB7C CHAINID 0xE3 0xED 0xE3 PUSH21 0xD70364736F6C634300080A00330000000000000000 ","sourceMap":"852:625:55:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10083:755:94;;;;;;:::i;:::-;;:::i;:::-;;1941:43;;1981:3;1941:43;;;;;1320:25:201;;;1308:2;1293:18;1941:43:94;;;;;;;;5034:654;;;;;;:::i;:::-;;:::i;1988:58::-;;;;;;;;-1:-1:-1;;;;;2688:55:201;;;2670:74;;2658:2;2643:18;1988:58:94;2493:257:201;15738:122:94;15833:22;;;;15738:122;;;3055:34:201;3043:47;;;3025:66;;3013:2;2998:18;15738:122:94;2879:218:201;17958:385:94;;;;;;:::i;:::-;;:::i;15596:114::-;15687:18;;15596:114;;19799:411;;;;;;:::i;:::-;;:::i;8616:509::-;;;;;;:::i;:::-;;:::i;18772:152::-;;;;;;:::i;:::-;;:::i;12875:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13005:16:94;;;;;;;:9;:16;;;;;;;;;12998:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12998:23:94;;;;;;;;;-1:-1:-1;12998:23:94;;;;;;;;;-1:-1:-1;12998:23:94;;;;;;;;;;-1:-1:-1;12998:23:94;;;;;;;;;;-1:-1:-1;12998:23:94;;;;;;;;;-1:-1:-1;12998:23:94;;;;;;;;;-1:-1:-1;12998:23:94;;;;12875:151;;;;;;;;:::i;14397:168::-;;;;;;:::i;:::-;;:::i;12077:604::-;;;;;;:::i;:::-;;:::i;14010:167::-;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;14154:18:94;;;;;;:12;:18;;;;;14147:25;;;;;;;;;;;;14010:167;;;;8476:13:201;;8458:32;;8446:2;8431:18;14010:167:94;8234:262:201;15288:109:94;;;;;;:::i;:::-;15375:17;;15353:7;15375:17;;;:13;:17;;;;;;-1:-1:-1;;;;;15375:17:94;;15288:109;7220:523;;;;;;:::i;:::-;;:::i;1093:126:55:-;;;;;;:::i;:::-;1169:20;:45;;;;;;;;;;;;;;;;;;1093:126;9651:404:94;;;;;;:::i;:::-;;:::i;4601:405::-;;;;;;:::i;:::-;;:::i;1334:141:55:-;;;;;;:::i;:::-;-1:-1:-1;;;;;1408:16:55;1439:1;1408:16;;;:9;:16;;;;;;;;:19;;;;;;;;;;1394:34;;:13;:34;;;;;:47;;;;;;;;;1454:16;;;;;;;1447:23;;;-1:-1:-1;1447:23:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1334:141;5716:559:94;;;;;;:::i;:::-;;:::i;3961:334::-;;;;;;:::i;:::-;;:::i;15888:133::-;15989:27;;;;;;;15888:133;;19613:158;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;17013:734::-;;;;;;:::i;:::-;;:::i;9153:268::-;;;;;;:::i;:::-;;:::i;12709:138::-;;;;;;:::i;:::-;;:::i;6303:889::-;;;;;;:::i;:::-;;:::i;10866:1183::-;;;;;;:::i;:::-;;:::i;18952:278::-;;;;;;:::i;:::-;;:::i;13054:721::-;;;;;;:::i;:::-;;:::i;:::-;;;;16946:25:201;;;17002:2;16987:18;;16980:34;;;;17030:18;;;17023:34;;;;17088:2;17073:18;;17066:34;17131:3;17116:19;;17109:35;17175:3;17160:19;;17153:35;16933:3;16918:19;13054:721:94;16659:535:201;13803:179:94;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;13947:16:94;;;;;;:9;:16;;;;;13940:37;;;;;;;;;;;;13803:179;3720:213;;;;;;:::i;:::-;;:::i;9449:174::-;;;;;;:::i;:::-;;:::i;20602:180::-;;;;;;:::i;:::-;;:::i;14205:164::-;;;;;;:::i;:::-;;:::i;14593:667::-;;;:::i;:::-;;;;;;;:::i;19258:327::-;;;;;;:::i;:::-;;:::i;16211:774::-;;;;;;:::i;:::-;;:::i;4323:250::-;;;;;;:::i;:::-;;:::i;20394:180::-;;;;;;:::i;:::-;;:::i;15425:143::-;15532:31;;;;15425:143;;20238:128;;;;;;:::i;:::-;-1:-1:-1;;;;;20336:25:94;20314:7;20336:25;;;:19;:25;;;;;;;;;20238:128;7771:817;;;;;;:::i;:::-;;:::i;18371:373::-;;;;;;:::i;:::-;;:::i;1223:107:55:-;1305:20;;;;;;;1223:107;;23388:6:201;23376:19;;;23358:38;;23346:2;23331:18;1223:107:55;23214:188:201;10083:755:94;10261:16;:39;10308:9;10325:13;10346:12;10366:16;10390:437;;;;;;;;10454:14;;;;;;;;;;;10390:437;;;;;;10491:11;10390:437;;;;10529:15;-1:-1:-1;;;;;10390:437:94;;;;;10565:9;-1:-1:-1;;;;;10390:437:94;;;;;10590:4;-1:-1:-1;;;;;10390:437:94;;;;;10619:13;10390:437;;;;;;10655:18;-1:-1:-1;;;;;10655:33:94;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10390:437:94;;;;;10719:25;;;;;;;:19;10390:437;10719:25;;;;;;;;;;;10390:437;;;;10775:43;;;;;;;10390:437;;;;;10775:18;:41;;;;;;:43;;;;;10390:437;10775:43;;;;;:41;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10390:437:94;;;;10261:572;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10083:755;;;;;:::o;5034:654::-;5265:150;;;;;5303:10;5265:150;;;25883:34:201;5329:4:94;25933:18:201;;;25926:43;25985:18;;;25978:34;;;26028:18;;;26021:34;;;26104:4;26092:17;;26071:19;;;26064:46;26126:19;;;26119:35;;;26170:19;;;26163:35;;;-1:-1:-1;;;;;5265:30:94;;;;;25794:19:201;;5265:150:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;5492:24:94;;;;;;;:12;:24;;;;;;;;;5524:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5421:262;;;;;5454:9;5421:262;;;26637:25:201;5471:13:94;26678:18:201;;;26671:34;26721:18;;;26714:34;;;;26849:13;;26845:22;;26825:18;;;26818:50;26905:22;26884:19;;;26877:51;26969:22;;26965:31;;;26944:19;;;26937:60;27038:22;27034:35;;;27013:19;;;27006:64;5421:11:94;;:25;;26609:19:201;;5421:262:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5034:654;;;;;;;;:::o;17958:385::-;2178:23;:21;:23::i;:::-;18143:29:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;-1:-1:-1;;;;;18122:19:94;::::1;18114:59;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1::0;;;;;;18187:16:94;::::1;;::::0;;;:9:::1;:16;::::0;;;;:19:::1;;::::0;;;::::1;;;:24:::0;::::1;::::0;:53:::1;;-1:-1:-1::0;18215:16:94::1;::::0;;:13:::1;:16;::::0;;;-1:-1:-1;;;;;18215:25:94;;::::1;:16:::0;::::1;:25;18187:53;18242:23;;;;;;;;;;;;;;;;::::0;18179:87:::1;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;18272:16:94;;::::1;;::::0;;;:9:::1;:16;::::0;;;;:44:::1;;:66:::0;;;::::1;::::0;;;::::1;;::::0;;17958:385::o;19799:411::-;19871:10;:30;19909:9;19926:13;19947:16;19971:19;19998:12;:24;20011:10;-1:-1:-1;;;;;19998:24:94;-1:-1:-1;;;;;19998:24:94;;;;;;;;;;;;20030:169;;;;;;;;20091:14;;;;;;;;;;;20030:169;;;;;;20123:18;-1:-1:-1;;;;;20123:33:94;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20030:169:94;;;;;20180:10;20030:169;;;;;19871:334;;;;;;;;;;;;;;;;;;;27877:25:201;;;27933:2;27918:18;;;27911:34;;;;27976:2;27961:18;;;27954:34;;;;28019:2;28004:18;;27997:34;;;;28062:3;28047:19;;28040:35;28112:13;;28106:3;28091:19;;28084:42;28173:15;;;28167:22;-1:-1:-1;;;;;28163:71:201;28157:3;28142:19;;28135:100;28282:15;28276:22;28300:4;28272:33;28266:3;28251:19;;28244:62;27864:3;27849:19;;27306:1006;19871:334:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19799:411;:::o;8616:509::-;8748:7;8776:11;:24;8810:9;8829:13;8852:12;:24;8865:10;-1:-1:-1;;;;;8852:24:94;-1:-1:-1;;;;;8852:24:94;;;;;;;;;;;;8886:226;;;;;;;;8934:5;-1:-1:-1;;;;;8886:226:94;;;;;8959:6;8886:226;;;;9022:16;8995:44;;;;;;;;:::i;:::-;8886:226;;;;;;;;:::i;:::-;;;9063:10;8886:226;;;;9097:4;8886:226;;;;;8776:344;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8763:357;;8616:509;;;;;;:::o;18772:152::-;2178:23;:21;:23::i;:::-;18887:18:::1;:32:::0;18772:152::o;14397:168::-;-1:-1:-1;;;;;14524:16:94;;14502:7;14524:16;;;:9;:16;;;;;:36;;:34;:36::i;:::-;14517:43;14397:168;-1:-1:-1;;14397:168:94:o;12077:604::-;12256:50;12309:293;;;;;;;;12366:15;-1:-1:-1;;;;;12309:293:94;;;;;12396:5;-1:-1:-1;;;;;12309:293:94;;;;;12417:6;12309:293;;;;12439:6;;12309:293;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12309:293:94;;;-1:-1:-1;;;12309:293:94;;;;;;;;;;;12515:27;;;;;;;;12309:293;;;;;;;;12573:22;;12309:293;;;;;;;;-1:-1:-1;;;;;12646:16:94;;;;:9;:16;;;;;12608:68;;;;;12256:346;;-1:-1:-1;12608:14:94;;:37;;:68;;12256:346;;12608:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12250:431;12077:604;;;;;;:::o;7220:523::-;7365:7;7393:11;:24;7427:9;7446:13;7469:12;:24;7482:10;-1:-1:-1;;;;;7469:24:94;-1:-1:-1;;;;;7469:24:94;;;;;;;;;;;;7503:227;;;;;;;;7551:5;-1:-1:-1;;;;;7503:227:94;;;;;7576:6;7503:227;;;;7639:16;7612:44;;;;;;;;:::i;:::-;7503:227;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;7503:227:94;;;;;;-1:-1:-1;7503:227:94;;;;;7393:345;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7380:358;7220:523;-1:-1:-1;;;;;7220:523:94:o;9651:404::-;9769:11;:41;9818:9;9835:13;9856:16;9880:12;:24;9893:10;-1:-1:-1;;;;;9880:24:94;-1:-1:-1;;;;;9880:24:94;;;;;;;;;;;;9912:5;9925:15;9948:14;;;;;;;;;;;9970:18;-1:-1:-1;;;;;9970:33:94;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10033:10;10013:31;;;;:19;:31;;;;;;;;9769:281;;;;;;;;;;;;;31500:25:201;;;;31541:18;;;31534:34;;;;31584:18;;;31577:34;;;;31627:18;;;31620:34;;;;-1:-1:-1;;;;;31752:15:201;;;31731:19;;;31724:44;31812:14;31805:22;31784:19;;;31777:51;31877:6;31865:19;;;31844;;;31837:48;31922:15;31901:19;;;31894:44;10013:31:94;;31954:19:201;;;31947:46;31472:19;;9769:281:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9651:404;;:::o;4601:405::-;-1:-1:-1;;;;;4810:24:94;;;;;;;:12;:24;;;;;;;;;4842:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4739:262;;;;;4772:9;4739:262;;;26637:25:201;4789:13:94;26678:18:201;;;26671:34;26721:18;;;26714:34;;;;26849:13;;26845:22;;26825:18;;;26818:50;26905:22;26884:19;;;26877:51;26969:22;;26965:31;;;26944:19;;;26937:60;27038:22;27034:35;;;27013:19;;;27006:64;4739:11:94;;:25;;26609:19:201;;4739:262:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4601:405;;;;:::o;5716:559::-;5826:7;5854:11;:27;5891:9;5910:13;5933:16;5959:12;:24;5972:10;-1:-1:-1;;;;;5959:24:94;-1:-1:-1;;;;;5959:24:94;;;;;;;;;;;;5993:269;;;;;;;;6044:5;-1:-1:-1;;;;;5993:269:94;;;;;6069:6;5993:269;;;;6091:2;-1:-1:-1;;;;;5993:269:94;;;;;6120:14;;;;;;;;;;;5993:269;;;;;;6154:18;-1:-1:-1;;;;;6154:33:94;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5993:269:94;;;;;6240:10;6220:31;;;;:19;5993:269;6220:31;;;;;;;;;;;;;5993:269;;;;;;;5854:416;;;;;;;;;;;;;32516:25:201;;;;32557:18;;;32550:34;;;;32600:18;;;32593:34;;;;32643:18;;;32636:34;;;;32772:13;;32768:22;;32747:19;;;32740:51;32834:15;;;32828:22;32807:19;;;32800:51;32898:15;;;32892:22;32888:31;;32867:19;;;32860:60;32658:2;32963:15;;32957:22;32936:19;;;32929:51;32762:3;33027:16;;33021:23;33017:32;32996:19;;;32989:61;32822:3;33097:16;33091:23;33087:34;33066:19;;;33059:63;32488:19;;5854:416:94;32004:1124:201;3961:334:94;2468:13;:11;:13::i;:::-;-1:-1:-1;;;;;4195:24:94;;::::1;;::::0;;;:12:::1;:24;::::0;;;;;;4118:172;;;;;4157:9:::1;4118:172;::::0;::::1;33567:25:201::0;4174:13:94::1;33608:18:201::0;;;33601:34;33651:18;;;33644:34;;;;33775:15;;;33755:18;;;33748:43;33807:19;;;33800:35;;;33851:19;;;33844:44;33937:6;33925:19;;33904;;;33897:48;4118:11:94::1;::::0;:31:::1;::::0;33539:19:201;;4118:172:94::1;33133:818:201::0;19613:158:94;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19746:20:94;;;;;;;:16;:20;;;;;;;;;19739:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19739:27:94;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19613:158;;;:::o;17013:734::-;2178:23;:21;:23::i;:::-;17253:9:::1;:28;17291:9;17310:13;17333:364;;;;;;;;17380:5;-1:-1:-1::0;;;;;17333:364:94::1;;;;;17412:13;-1:-1:-1::0;;;;;17333:364:94::1;;;;;17456:17;-1:-1:-1::0;;;;;17333:364:94::1;;;;;17506:19;-1:-1:-1::0;;;;;17333:364:94::1;;;;;17566:27;-1:-1:-1::0;;;;;17333:364:94::1;;;;;17620:14;;;;;;;;;;;17333:364;;;;;;17665:21;1305:20:55::0;;;;;;;;;1223:107;17665:21:94::1;17333:364;;;;::::0;17253:452:::1;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17242:501;;;17720:14;:16:::0;;;;::::1;;;::::0;:14:::1;:16;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;17013:734:::0;;;;;:::o;9153:268::-;-1:-1:-1;;;;;9297:16:94;;;;;;:9;:16;;;;;;;;9334:10;9321:24;;:12;:24;;;;;;9252:11;;:37;;9307:5;9393:16;9366:44;;;;;;;;:::i;:::-;9252:164;;;;;;;;;;;;;;;;;;:::i;12709:138::-;12792:50;;;;;:9;;:31;;:50;;12824:9;;12835:6;;;;12792:50;;;:::i;6303:889::-;6471:11;:25;6504:9;6521:13;6542:16;6566:12;:24;6579:10;-1:-1:-1;;;;;6566:24:94;-1:-1:-1;;;;;6566:24:94;;;;;;;;;;;;6598:583;;;;;;;;6645:5;-1:-1:-1;;;;;6598:583:94;;;;;6666:10;-1:-1:-1;;;;;6598:583:94;;;;;6698:10;-1:-1:-1;;;;;6598:583:94;;;;;6726:6;6598:583;;;;6787:16;6760:44;;;;;;;;:::i;:::-;6598:583;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;6869:4;6598:583;;;;;;;;6915:31;;;;;6598:583;;;;6971:14;;;;;;6598:583;;;;7003:35;;;;;;;6598:583;;;;;-1:-1:-1;;;;;7003:18:94;:33;;;;:35;;;;;6598:583;;7003:35;;;;;:33;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6598:583:94;;;;;7067:31;;;;;;;:19;6598:583;7067:31;;;;;;;;;;;6598:583;;;;7129:43;;;;;;;6598:583;;;;;7129:18;:41;;;;;;:43;;;;;6598:583;7129:43;;;;;:41;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6598:583:94;;;;6471:716;;;;;;;;;;;;;;;;;;;:::i;10866:1183::-;11129:44;11176:711;;;;;;;;11227:15;-1:-1:-1;;;;;11176:711:94;;;;;11258:6;;11176:711;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11176:711:94;;;-1:-1:-1;11176:711:94;;;;;;;;;;;;;;;;;;;;;;;;11281:7;;;;;;11176:711;;;11281:7;;11176:711;11281:7;11176:711;;;;;;;;;-1:-1:-1;;;11176:711:94;;;-1:-1:-1;11176:711:94;;;;;;;;;;;;;;;;;;;;;;;;11315:17;;;;;;11176:711;;;11315:17;;11176:711;11315:17;11176:711;;;;;;;;;-1:-1:-1;;;11176:711:94;;;-1:-1:-1;;;;;;11176:711:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11378:6;;;;;;11176:711;;11378:6;;;;11176:711;;;;;;;;-1:-1:-1;11176:711:94;;;-1:-1:-1;;;11176:711:94;;;;;;;;;;;;11454:27;;;;;;;;11176:711;;;;;;;;11512:22;;11176:711;;;;11574:31;;;;;11176:711;;;;11628:14;;;;;;11176:711;;;;-1:-1:-1;;;;;11677:18:94;11176:711;;;;;;;;11723:31;;;;;:19;:31;;;;;;;;;11176:711;;;;11801:34;;;;;;;11454:27;11176:711;;;;11801:32;;:34;;;;;11176:711;11801:34;;;;;;11176:711;11801:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11789:91;;;;;11862:10;11789:91;;;2670:74:201;-1:-1:-1;;;;;11789:63:94;;;;;;;2643:18:201;;11789:91:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11176:711;;;;-1:-1:-1;;;;;11995:24:94;;;;;;:12;:24;;;;;;;11894:150;;;;;11129:758;;-1:-1:-1;11894:14:94;;:31;;:150;;11933:9;;11950:13;;11971:16;;11995:24;11129:758;;11894:150;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11123:926;10866:1183;;;;;;;;;;;:::o;18952:278::-;2178:23;:21;:23::i;:::-;19117:46:::1;19169:56:::0;;::::1;::::0;::::1;19117:46:::0;::::1;19169:56;19117:22;19169:56:::0;18952:278::o;13054:721::-;13494:268;;;-1:-1:-1;;;;;13559:18:94;;;13171:27;13559:18;;;:12;:18;;;;;;;13494:268;;;;;;;;;;;;;;13604:14;;;;;;;13494:268;;;;;;;;;;;13660:35;;;;;;;13171:27;;;;;;;;;;;;13381:9;;:35;;13426:9;;13445:13;;13468:16;;-1:-1:-1;13494:268:94;;;13660:18;:33;;;;:35;;;;;;;;;;:33;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13494:268:94;;;;;13726:25;;;;;;;:19;13494:268;13726:25;;;;;;;;;;;;;13494:268;;;;;;;13381:389;;;;;;;;;;;;;43506:25:201;;;;43547:18;;;43540:34;;;;43590:18;;;43583:34;;;;43659:13;;43653:20;43633:18;;;43626:48;43717:15;;;43711:22;43690:19;;;43683:51;43769:15;;;43763:22;43883:21;;43862:19;;;43855:50;43648:2;43952:15;;43946:22;43942:31;;;43921:19;;;43914:60;43705:3;44021:16;;;44015:23;44011:34;43990:19;;;43983:63;43478:19;;13381:389:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13368:402;;;;-1:-1:-1;13368:402:94;;-1:-1:-1;13368:402:94;-1:-1:-1;13368:402:94;-1:-1:-1;13368:402:94;;-1:-1:-1;13054:721:94;-1:-1:-1;;13054:721:94:o;3720:213::-;1217:12:71;;1015:3:55;;1217:12:71;;;:31;;-1:-1:-1;2436:9:71;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;44756:2:201;1202:146:71;;;44738:21:201;44795:2;44775:18;;;44768:30;44834:34;44814:18;;;44807:62;44905:16;44885:18;;;44878:44;44939:19;;1202:146:71;44554:410:201;1202:146:71;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;3828:18:94::1;-1:-1:-1::0;;;;;3816:30:94::1;:8;-1:-1:-1::0;;;;;3816:30:94::1;;3848:33;;;;;;;;;;;;;;;;::::0;3808:74:::1;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;3888:31:94::1;:40:::0;;;::::1;3922:6;3888:40;::::0;;1506:55:71;;;;1534:12;:20;;;;;;1506:55;1158:407;;3720:213:94;:::o;9449:174::-;-1:-1:-1;;;;;9588:16:94;;;;;;;:9;:16;;;;;;;9543:75;;;;;;;;45206:25:201;;;;45308:18;;;45301:43;;;;45380:15;;;45360:18;;;45353:43;9543:11:94;;:44;;45179:18:201;;9543:75:94;44969:433:201;20602:180:94;2330:16;:14;:16::i;:::-;20729:48:::1;::::0;;;;-1:-1:-1;;;;;45696:15:201;;;20729:48:94::1;::::0;::::1;45678:34:201::0;45748:15;;45728:18;;;45721:43;45780:18;;;45773:34;;;20729:9:94::1;::::0;:29:::1;::::0;45590:18:201;;20729:48:94::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20602:180:::0;;;:::o;14205:164::-;-1:-1:-1;;;;;14326:16:94;;14304:7;14326:16;;;:9;:16;;;;;:38;;:36;:38::i;14593:667::-;14712:14;;14660:16;;14712:14;;;;;14684:25;;14712:14;14802:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14802:32:94;;14770:64;;14846:9;14841:221;14865:17;14861:1;:21;14841:221;;;14929:1;14901:16;;;:13;:16;;;;;;-1:-1:-1;;;;;14901:16:94;:30;14897:159;;14984:16;;;;:13;:16;;;;;;-1:-1:-1;;;;;14984:16:94;14943:12;14956:24;14960:20;14998:1;14956:24;:::i;:::-;14943:38;;;;;;;;:::i;:::-;;;;;;:57;-1:-1:-1;;;;;14943:57:94;;;-1:-1:-1;;;;;14943:57:94;;;;;14897:159;;;15025:22;;;;:::i;:::-;;;;14897:159;14884:3;;;;:::i;:::-;;;;14841:221;;;-1:-1:-1;15180:44:94;;15159:66;;15166:12;14593:667;-1:-1:-1;14593:667:94:o;19258:327::-;2178:23;:21;:23::i;:::-;19512:30:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;19503:7:::1;::::0;::::1;19495:48;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;19549:20:94::1;::::0;::::1;;::::0;;;:16:::1;:20;::::0;;;;;;;;:31;;;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;19549:31:94::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;19572:8;;19549:20;:31:::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;16211:774::-:0;-1:-1:-1;;;;;16428:16:94;;;;;;;:9;:16;;;;;;;;;:30;;;16460:24;;;;;;;;;;;;;;;;;;;;;16428:30;16414:10;:44;16406:79;;;;;;;;;;;;;:::i;:::-;;16491:11;:35;16534:9;16551:13;16572:16;16596:12;16616:358;;;;;;;;16666:5;-1:-1:-1;;;;;16616:358:94;;;;;16687:4;-1:-1:-1;;;;;16616:358:94;;;;;16705:2;-1:-1:-1;;;;;16616:358:94;;;;;16725:6;16616:358;;;;16760:17;16616:358;;;;16804:15;16616:358;;;;16844:14;;;;;;;;;;;16616:358;;;;;;16876:18;-1:-1:-1;;;;;16876:33:94;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16616:358:94;;;;;16940:25;;;;;;:19;16616:358;16940:25;;;;;;;;;;;16616:358;;;;;;16491:489;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16211:774;;;;;;:::o;4323:250::-;4451:7;2468:13;:11;:13::i;:::-;-1:-1:-1;;;;;4511:16:94;::::1;;::::0;;;:9:::1;:16;::::0;;;;;;4549:18:::1;::::0;4479:89;;;;;::::1;::::0;::::1;48156:25:201::0;;;;48197:18;;;48190:83;;;;48289:18;;;48282:34;;;48332:18;;;48325:34;;;48375:19;;;48368:35;4479:11:94::1;::::0;:31:::1;::::0;48128:19:201;;4479:89:94::1;47862:547:201::0;20394:180:94;2178:23;:21;:23::i;:::-;20507:62:::1;::::0;;;;20552:9:::1;20507:62;::::0;::::1;48648:25:201::0;-1:-1:-1;;;;;48709:55:201;;48689:18;;;48682:83;20507:9:94::1;::::0;:44:::1;::::0;48621:18:201;;20507:62:94::1;48414:357:201::0;7771:817:94;8032:166;;;;;8072:10;8032:166;;;25883:34:201;8100:4:94;25933:18:201;;;25926:43;25985:18;;;25978:34;;;26028:18;;;26021:34;;;26104:4;26092:17;;26071:19;;;26064:46;26126:19;;;26119:35;;;26170:19;;;26163:35;;;8009:7:94;;-1:-1:-1;;;;;8032:30:94;;;;;25794:19:201;;8032:166:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8218:42;8263:215;;;;;;;;8309:5;-1:-1:-1;;;;;8263:215:94;;;;;8332:6;8263:215;;;;8393:16;8366:44;;;;;;;;:::i;:::-;8263:215;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;8263:215:94;;;;;;;;;-1:-1:-1;8263:215:94;;;;;;;8544:24;;;:12;:24;;;;;8493:84;;;;;8218:260;;-1:-1:-1;8493:11:94;;:24;;:84;;8518:9;;8529:13;;8218:260;;8493:84;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8486:91;7771:817;-1:-1:-1;;;;;;;;;;7771:817:94:o;18371:373::-;2178:23;:21;:23::i;:::-;18564:29:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;-1:-1:-1;;;;;18543:19:94;::::1;18535:59;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;18608:16:94;::::1;;::::0;;;:9:::1;:16;::::0;;;;:19:::1;;::::0;;;::::1;;;:24:::0;::::1;::::0;:53:::1;;-1:-1:-1::0;18636:16:94::1;::::0;;:13:::1;:16;::::0;;;-1:-1:-1;;;;;18636:25:94;;::::1;:16:::0;::::1;:25;18608:53;18663:23;;;;;;;;;;;;;;;;::::0;18600:87:::1;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;18693:16:94;;;::::1;;::::0;;;:9:::1;:16;::::0;;;;48960:19:201;;48947:33;;18371:373:94:o;2497:184::-;2617:10;-1:-1:-1;;;;;2573:54:94;:18;-1:-1:-1;;;;;2573:38:94;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2573:54:94;;2635:35;;;;;;;;;;;;;;;;;2558:118;;;;;;;;;;;;;;:::i;:::-;;2497:184::o;2809:545:85:-;2940:27;;;;2906:7;;2940:27;;;;;3022:15;3009:28;;3005:345;;;-1:-1:-1;;3141:27:85;;;;;;2809:545::o;3005:345::-;3306:27;;;;3204:139;;3306:27;;;;;3204:83;;3242:33;;;;;3277:9;3204:37;:83::i;:::-;:90;;:139::i;3005:345::-;2915:439;2809:545;;;:::o;2876:177:94:-;2954:18;-1:-1:-1;;;;;2954:32:94;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2942:68;;;;;2999:10;2942:68;;;2670:74:201;-1:-1:-1;;;;;2942:56:94;;;;;;;2643:18:201;;2942:68:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3018:24;;;;;;;;;;;;;;;;;2927:121;;;;;;;;;;;;;;:::i;2685:187::-;2766:18;-1:-1:-1;;;;;2766:32:94;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2754:71;;;;;2814:10;2754:71;;;2670:74:201;-1:-1:-1;;;;;2754:59:94;;;;;;;2643:18:201;;2754:71:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2833:28;;;;;;;;;;;;;;;;;2739:128;;;;;;;;;;;;;;:::i;1895:528:85:-;2028:27;;;;1994:7;;2028:27;;;;;2110:15;2097:28;;2093:326;;;-1:-1:-1;;2229:22:85;;;;;;1895:528::o;2093:326::-;2380:22;;;;2287:125;;2380:22;;;;;2287:74;;2321:28;;;;;2351:9;2287:33;:74::i;3142:212:88:-;3256:7;3278:71;3306:4;3312:19;3333:15;3278:27;:71::i;2253:319:90:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:90;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;700:334:88:-;810:7;;881:46;899:28;;;881:15;:46;:::i;:::-;873:55;;:4;:55;:::i;:::-;376:8;961:25;;;-1:-1:-1;1006:23:88;961:25;704:4:90;1006:23:88;:::i;:::-;999:30;700:334;-1:-1:-1;;;;700:334:88:o;1780:972::-;1924:7;;1984:47;2003:28;;;1984:16;:47;:::i;:::-;1970:61;-1:-1:-1;2042:8:88;2038:50;;704:4:90;2060:21:88;;;;;2038:50;2230:7;;;2094:19;;;2266:1;2260:7;;:21;;2280:1;2260:21;;;2276:1;2270:3;:7;2260:21;2246:35;-1:-1:-1;2326:35:88;2305:17;2317:4;;2305:11;:17::i;:::-;:57;;;;;:::i;:::-;;;-1:-1:-1;376:8:88;2387:25;2305:57;2407:4;2387:19;:25::i;:::-;:44;;;;;:::i;:::-;;;-1:-1:-1;2444:18:88;2485:12;2465:17;2471:11;2465:3;:17;:::i;:::-;:32;;;;:::i;:::-;2535:1;2521:15;;;-1:-1:-1;2548:17:88;2602:14;2588:11;2568:17;2574:11;2568:3;:17;:::i;:::-;:31;;;;:::i;:::-;:48;;;;:::i;:::-;2653:1;2640:14;;;-1:-1:-1;2640:14:88;2725:10;376:8;2692:10;2699:3;2692:4;:10;:::i;:::-;2691:31;;;;:::i;:::-;2674:48;;704:4:90;2674:48:88;:::i;:::-;:61;;;;:::i;:::-;:73;;;;:::i;:::-;2667:80;1780:972;-1:-1:-1;;;;;;;;;;;1780:972:88:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:154:201;-1:-1:-1;;;;;93:5:201;89:54;82:5;79:65;69:93;;158:1;155;148:12;173:134;241:20;;270:31;241:20;270:31;:::i;:::-;173:134;;;:::o;312:118::-;398:5;391:13;384:21;377:5;374:32;364:60;;420:1;417;410:12;435:734;527:6;535;543;551;559;612:3;600:9;591:7;587:23;583:33;580:53;;;629:1;626;619:12;580:53;668:9;655:23;687:31;712:5;687:31;:::i;:::-;737:5;-1:-1:-1;794:2:201;779:18;;766:32;807:33;766:32;807:33;:::i;:::-;859:7;-1:-1:-1;918:2:201;903:18;;890:32;931:33;890:32;931:33;:::i;:::-;983:7;-1:-1:-1;1037:2:201;1022:18;;1009:32;;-1:-1:-1;1093:3:201;1078:19;;1065:33;1107:30;1065:33;1107:30;:::i;:::-;1156:7;1146:17;;;435:734;;;;;;;;:::o;1356:159::-;1423:20;;1483:6;1472:18;;1462:29;;1452:57;;1505:1;1502;1495:12;1520:156;1586:20;;1646:4;1635:16;;1625:27;;1615:55;;1666:1;1663;1656:12;1681:807;1800:6;1808;1816;1824;1832;1840;1848;1856;1909:3;1897:9;1888:7;1884:23;1880:33;1877:53;;;1926:1;1923;1916:12;1877:53;1965:9;1952:23;1984:31;2009:5;1984:31;:::i;:::-;2034:5;-1:-1:-1;2086:2:201;2071:18;;2058:32;;-1:-1:-1;2142:2:201;2127:18;;2114:32;2155:33;2114:32;2155:33;:::i;:::-;2207:7;-1:-1:-1;2233:37:201;2266:2;2251:18;;2233:37;:::i;:::-;2223:47;;2317:3;2306:9;2302:19;2289:33;2279:43;;2341:37;2373:3;2362:9;2358:19;2341:37;:::i;:::-;2331:47;;2425:3;2414:9;2410:19;2397:33;2387:43;;2477:3;2466:9;2462:19;2449:33;2439:43;;1681:807;;;;;;;;;;;:::o;3102:388::-;3170:6;3178;3231:2;3219:9;3210:7;3206:23;3202:32;3199:52;;;3247:1;3244;3237:12;3199:52;3286:9;3273:23;3305:31;3330:5;3305:31;:::i;:::-;3355:5;-1:-1:-1;3412:2:201;3397:18;;3384:32;3425:33;3384:32;3425:33;:::i;:::-;3477:7;3467:17;;;3102:388;;;;;:::o;3495:182::-;3552:6;3605:2;3593:9;3584:7;3580:23;3576:32;3573:52;;;3621:1;3618;3611:12;3573:52;3644:27;3661:9;3644:27;:::i;3682:383::-;3759:6;3767;3775;3828:2;3816:9;3807:7;3803:23;3799:32;3796:52;;;3844:1;3841;3834:12;3796:52;3883:9;3870:23;3902:31;3927:5;3902:31;:::i;:::-;3952:5;4004:2;3989:18;;3976:32;;-1:-1:-1;4055:2:201;4040:18;;;4027:32;;3682:383;-1:-1:-1;;;3682:383:201:o;4070:180::-;4129:6;4182:2;4170:9;4161:7;4157:23;4153:32;4150:52;;;4198:1;4195;4188:12;4150:52;-1:-1:-1;4221:23:201;;4070:180;-1:-1:-1;4070:180:201:o;4255:247::-;4314:6;4367:2;4355:9;4346:7;4342:23;4338:32;4335:52;;;4383:1;4380;4373:12;4335:52;4422:9;4409:23;4441:31;4466:5;4441:31;:::i;4936:2109::-;5185:13;;4588:12;4576:25;;5130:3;5115:19;;5257:4;5249:6;5245:17;5239:24;5272:54;5320:4;5309:9;5305:20;5291:12;2832:34;2821:46;2809:59;;2755:119;5272:54;;5375:4;5367:6;5363:17;5357:24;5390:56;5440:4;5429:9;5425:20;5409:14;2832:34;2821:46;2809:59;;2755:119;5390:56;;5495:4;5487:6;5483:17;5477:24;5510:56;5560:4;5549:9;5545:20;5529:14;2832:34;2821:46;2809:59;;2755:119;5510:56;;5615:4;5607:6;5603:17;5597:24;5630:56;5680:4;5669:9;5665:20;5649:14;2832:34;2821:46;2809:59;;2755:119;5630:56;;5735:4;5727:6;5723:17;5717:24;5750:56;5800:4;5789:9;5785:20;5769:14;2832:34;2821:46;2809:59;;2755:119;5750:56;;5855:4;5847:6;5843:17;5837:24;5870:55;5919:4;5908:9;5904:20;5888:14;4684:12;4673:24;4661:37;;4608:96;5870:55;;5974:4;5966:6;5962:17;5956:24;5989:55;6038:4;6027:9;6023:20;6007:14;4785:6;4774:18;4762:31;;4709:90;5989:55;-1:-1:-1;6063:6:201;6106:15;;;6100:22;-1:-1:-1;;;;;4870:54:201;;;6166:18;;;4858:67;;;;6204:6;6247:15;;;6241:22;4870:54;;6307:18;;;4858:67;6345:6;6388:15;;;6382:22;4870:54;;6448:18;;;4858:67;6486:6;6530:15;;;6524:22;4870:54;;;6591:18;;;4858:67;6629:6;6673:15;;;6667:22;2832:34;2821:46;;;6734:18;;;2809:59;;;;6772:6;6816:15;;;6810:22;2821:46;;6877:18;;;2809:59;6915:6;6959:15;;;6953:22;2821:46;7020:18;;;;2809:59;;;;4936:2109;:::o;7050:347::-;7101:8;7111:6;7165:3;7158:4;7150:6;7146:17;7142:27;7132:55;;7183:1;7180;7173:12;7132:55;-1:-1:-1;7206:20:201;;7249:18;7238:30;;7235:50;;;7281:1;7278;7271:12;7235:50;7318:4;7310:6;7306:17;7294:29;;7370:3;7363:4;7354:6;7346;7342:19;7338:30;7335:39;7332:59;;;7387:1;7384;7377:12;7332:59;7050:347;;;;;:::o;7402:827::-;7507:6;7515;7523;7531;7539;7547;7600:3;7588:9;7579:7;7575:23;7571:33;7568:53;;;7617:1;7614;7607:12;7568:53;7656:9;7643:23;7675:31;7700:5;7675:31;:::i;:::-;7725:5;-1:-1:-1;7782:2:201;7767:18;;7754:32;7795:33;7754:32;7795:33;:::i;:::-;7847:7;-1:-1:-1;7901:2:201;7886:18;;7873:32;;-1:-1:-1;7956:2:201;7941:18;;7928:32;7983:18;7972:30;;7969:50;;;8015:1;8012;8005:12;7969:50;8054:58;8104:7;8095:6;8084:9;8080:22;8054:58;:::i;:::-;8131:8;;-1:-1:-1;8028:84:201;-1:-1:-1;8185:38:201;;-1:-1:-1;8218:3:201;8203:19;;8185:38;:::i;:::-;8175:48;;7402:827;;;;;;;;:::o;8501:184::-;8559:6;8612:2;8600:9;8591:7;8587:23;8583:32;8580:52;;;8628:1;8625;8618:12;8580:52;8651:28;8669:9;8651:28;:::i;8921:525::-;9007:6;9015;9023;9031;9084:3;9072:9;9063:7;9059:23;9055:33;9052:53;;;9101:1;9098;9091:12;9052:53;9140:9;9127:23;9159:31;9184:5;9159:31;:::i;:::-;9209:5;-1:-1:-1;9261:2:201;9246:18;;9233:32;;-1:-1:-1;9312:2:201;9297:18;;9284:32;;-1:-1:-1;9368:2:201;9353:18;;9340:32;9381:33;9340:32;9381:33;:::i;:::-;8921:525;;;;-1:-1:-1;8921:525:201;;-1:-1:-1;;8921:525:201:o;9451:382::-;9516:6;9524;9577:2;9565:9;9556:7;9552:23;9548:32;9545:52;;;9593:1;9590;9583:12;9545:52;9632:9;9619:23;9651:31;9676:5;9651:31;:::i;:::-;9701:5;-1:-1:-1;9758:2:201;9743:18;;9730:32;9771:30;9730:32;9771:30;:::i;9838:529::-;9923:6;9931;9939;9947;10000:3;9988:9;9979:7;9975:23;9971:33;9968:53;;;10017:1;10014;10007:12;9968:53;10056:9;10043:23;10075:31;10100:5;10075:31;:::i;:::-;10125:5;-1:-1:-1;10177:2:201;10162:18;;10149:32;;-1:-1:-1;10233:2:201;10218:18;;10205:32;10246:33;10205:32;10246:33;:::i;:::-;10298:7;-1:-1:-1;10324:37:201;10357:2;10342:18;;10324:37;:::i;:::-;10314:47;;9838:529;;;;;;;:::o;10372:456::-;10449:6;10457;10465;10518:2;10506:9;10497:7;10493:23;10489:32;10486:52;;;10534:1;10531;10524:12;10486:52;10573:9;10560:23;10592:31;10617:5;10592:31;:::i;:::-;10642:5;-1:-1:-1;10694:2:201;10679:18;;10666:32;;-1:-1:-1;10750:2:201;10735:18;;10722:32;10763:33;10722:32;10763:33;:::i;:::-;10815:7;10805:17;;;10372:456;;;;;:::o;10833:531::-;10875:3;10913:5;10907:12;10940:6;10935:3;10928:19;10965:1;10975:162;10989:6;10986:1;10983:13;10975:162;;;11051:4;11107:13;;;11103:22;;11097:29;11079:11;;;11075:20;;11068:59;11004:12;10975:162;;;11155:6;11152:1;11149:13;11146:87;;;11221:1;11214:4;11205:6;11200:3;11196:16;11192:27;11185:38;11146:87;-1:-1:-1;11278:2:201;11266:15;11283:66;11262:88;11253:98;;;;11353:4;11249:109;;10833:531;-1:-1:-1;;10833:531:201:o;11369:695::-;11562:2;11551:9;11544:21;11525:4;11584:6;11645:2;11636:6;11630:13;11626:22;11621:2;11610:9;11606:18;11599:50;11713:2;11707;11699:6;11695:15;11689:22;11685:31;11680:2;11669:9;11665:18;11658:59;11781:2;11775;11767:6;11763:15;11757:22;11753:31;11748:2;11737:9;11733:18;11726:59;;-1:-1:-1;;;;;11844:2:201;11836:6;11832:15;11826:22;11822:71;11816:3;11805:9;11801:19;11794:100;11941:3;11933:6;11929:16;11923:23;11984:4;11977;11966:9;11962:20;11955:34;12006:52;12053:3;12042:9;12038:19;12024:12;12006:52;:::i;12069:813::-;12164:6;12172;12180;12188;12196;12249:3;12237:9;12228:7;12224:23;12220:33;12217:53;;;12266:1;12263;12256:12;12217:53;12305:9;12292:23;12324:31;12349:5;12324:31;:::i;:::-;12374:5;-1:-1:-1;12431:2:201;12416:18;;12403:32;12444:33;12403:32;12444:33;:::i;:::-;12496:7;-1:-1:-1;12555:2:201;12540:18;;12527:32;12568:33;12527:32;12568:33;:::i;:::-;12620:7;-1:-1:-1;12679:2:201;12664:18;;12651:32;12692:33;12651:32;12692:33;:::i;:::-;12744:7;-1:-1:-1;12803:3:201;12788:19;;12775:33;12817;12775;12817;:::i;12887:315::-;12955:6;12963;13016:2;13004:9;12995:7;12991:23;12987:32;12984:52;;;13032:1;13029;13022:12;12984:52;13071:9;13058:23;13090:31;13115:5;13090:31;:::i;:::-;13140:5;13192:2;13177:18;;;;13164:32;;-1:-1:-1;;;12887:315:201:o;13207:367::-;13270:8;13280:6;13334:3;13327:4;13319:6;13315:17;13311:27;13301:55;;13352:1;13349;13342:12;13301:55;-1:-1:-1;13375:20:201;;13418:18;13407:30;;13404:50;;;13450:1;13447;13440:12;13404:50;13487:4;13479:6;13475:17;13463:29;;13547:3;13540:4;13530:6;13527:1;13523:14;13515:6;13511:27;13507:38;13504:47;13501:67;;;13564:1;13561;13554:12;13579:437;13665:6;13673;13726:2;13714:9;13705:7;13701:23;13697:32;13694:52;;;13742:1;13739;13732:12;13694:52;13782:9;13769:23;13815:18;13807:6;13804:30;13801:50;;;13847:1;13844;13837:12;13801:50;13886:70;13948:7;13939:6;13928:9;13924:22;13886:70;:::i;:::-;13975:8;;13860:96;;-1:-1:-1;13579:437:201;-1:-1:-1;;;;13579:437:201:o;14021:598::-;14115:6;14123;14131;14139;14147;14200:3;14188:9;14179:7;14175:23;14171:33;14168:53;;;14217:1;14214;14207:12;14168:53;14256:9;14243:23;14275:31;14300:5;14275:31;:::i;:::-;14325:5;-1:-1:-1;14377:2:201;14362:18;;14349:32;;-1:-1:-1;14428:2:201;14413:18;;14400:32;;-1:-1:-1;14451:37:201;14484:2;14469:18;;14451:37;:::i;14624:1572::-;14828:6;14836;14844;14852;14860;14868;14876;14884;14892;14900;14908:7;14962:3;14950:9;14941:7;14937:23;14933:33;14930:53;;;14979:1;14976;14969:12;14930:53;15002:29;15021:9;15002:29;:::i;:::-;14992:39;;15050:18;15117:2;15111;15100:9;15096:18;15083:32;15080:40;15077:60;;;15133:1;15130;15123:12;15077:60;15172:96;15260:7;15253:2;15242:9;15238:18;15225:32;15214:9;15210:48;15172:96;:::i;:::-;15287:8;;-1:-1:-1;15314:8:201;-1:-1:-1;15365:2:201;15350:18;;15337:32;15334:40;-1:-1:-1;15331:60:201;;;15387:1;15384;15377:12;15331:60;15426:96;15514:7;15507:2;15496:9;15492:18;15479:32;15468:9;15464:48;15426:96;:::i;:::-;15541:8;;-1:-1:-1;15568:8:201;-1:-1:-1;15619:2:201;15604:18;;15591:32;15588:40;-1:-1:-1;15585:60:201;;;15641:1;15638;15631:12;15585:60;15680:96;15768:7;15761:2;15750:9;15746:18;15733:32;15722:9;15718:48;15680:96;:::i;:::-;15795:8;;-1:-1:-1;15822:8:201;-1:-1:-1;15849:39:201;15883:3;15868:19;;15849:39;:::i;:::-;15839:49;;15938:2;15931:3;15920:9;15916:19;15903:33;15900:41;15897:61;;;15954:1;15951;15944:12;15897:61;;15993:85;16070:7;16062:3;16051:9;16047:19;16034:33;16023:9;16019:49;15993:85;:::i;:::-;16097:8;;-1:-1:-1;16124:8:201;-1:-1:-1;16152:38:201;16185:3;16170:19;;16152:38;:::i;:::-;16141:49;;14624:1572;;;;;;;;;;;;;;:::o;16201:188::-;16269:20;;16329:34;16318:46;;16308:57;;16298:85;;16379:1;16376;16369:12;16394:260;16462:6;16470;16523:2;16511:9;16502:7;16498:23;16494:32;16491:52;;;16539:1;16536;16529:12;16491:52;16562:29;16581:9;16562:29;:::i;:::-;16552:39;;16610:38;16644:2;16633:9;16629:18;16610:38;:::i;:::-;16600:48;;16394:260;;;;;:::o;17755:456::-;17832:6;17840;17848;17901:2;17889:9;17880:7;17876:23;17872:32;17869:52;;;17917:1;17914;17907:12;17869:52;17956:9;17943:23;17975:31;18000:5;17975:31;:::i;:::-;18025:5;-1:-1:-1;18082:2:201;18067:18;;18054:32;18095:33;18054:32;18095:33;:::i;:::-;17755:456;;18147:7;;-1:-1:-1;;;18201:2:201;18186:18;;;;18173:32;;17755:456::o;18216:681::-;18387:2;18439:21;;;18509:13;;18412:18;;;18531:22;;;18358:4;;18387:2;18610:15;;;;18584:2;18569:18;;;18358:4;18653:218;18667:6;18664:1;18661:13;18653:218;;;18732:13;;-1:-1:-1;;;;;18728:62:201;18716:75;;18846:15;;;;18811:12;;;;18689:1;18682:9;18653:218;;;-1:-1:-1;18888:3:201;;18216:681;-1:-1:-1;;;;;;18216:681:201:o;18902:184::-;18954:77;18951:1;18944:88;19051:4;19048:1;19041:15;19075:4;19072:1;19065:15;19091:253;19163:2;19157:9;19205:4;19193:17;;19240:18;19225:34;;19261:22;;;19222:62;19219:88;;;19287:18;;:::i;:::-;19323:2;19316:22;19091:253;:::o;19349:334::-;19420:2;19414:9;19476:2;19466:13;;19481:66;19462:86;19450:99;;19579:18;19564:34;;19600:22;;;19561:62;19558:88;;;19626:18;;:::i;:::-;19662:2;19655:22;19349:334;;-1:-1:-1;19349:334:201:o;19688:1488::-;19786:6;19794;19847:2;19835:9;19826:7;19822:23;19818:32;19815:52;;;19863:1;19860;19853:12;19815:52;19886:27;19903:9;19886:27;:::i;:::-;19876:37;;19932:2;19985;19974:9;19970:18;19957:32;20008:18;20049:2;20041:6;20038:14;20035:34;;;20065:1;20062;20055:12;20035:34;20088:22;;;;20144:4;20126:16;;;20122:27;20119:47;;;20162:1;20159;20152:12;20119:47;20188:22;;:::i;:::-;20233:21;20251:2;20233:21;:::i;:::-;20226:5;20219:36;20287:30;20313:2;20309;20305:11;20287:30;:::i;:::-;20282:2;20275:5;20271:14;20264:54;20350:30;20376:2;20372;20368:11;20350:30;:::i;:::-;20345:2;20338:5;20334:14;20327:54;20426:2;20422;20418:11;20405:25;20439:33;20464:7;20439:33;:::i;:::-;20499:2;20488:14;;20481:31;20558:3;20550:12;;20537:26;20575:16;;;20572:36;;;20604:1;20601;20594:12;20572:36;20635:8;20631:2;20627:17;20617:27;;;20682:7;20675:4;20671:2;20667:13;20663:27;20653:55;;20704:1;20701;20694:12;20653:55;20740:2;20727:16;20762:2;20758;20755:10;20752:36;;;20768:18;;:::i;:::-;20810:112;20918:2;20849:66;20842:4;20838:2;20834:13;20830:86;20826:95;20810:112;:::i;:::-;20797:125;;20945:2;20938:5;20931:17;20985:7;20980:2;20975;20971;20967:11;20963:20;20960:33;20957:53;;;21006:1;21003;20996:12;20957:53;21061:2;21056;21052;21048:11;21043:2;21036:5;21032:14;21019:45;21105:1;21100:2;21095;21088:5;21084:14;21080:23;21073:34;;21140:5;21134:3;21127:5;21123:15;21116:30;21165:5;21155:15;;;;;;19688:1488;;;;;:::o;21181:736::-;21285:6;21293;21301;21309;21317;21325;21378:3;21366:9;21357:7;21353:23;21349:33;21346:53;;;21395:1;21392;21385:12;21346:53;21434:9;21421:23;21453:31;21478:5;21453:31;:::i;:::-;21503:5;-1:-1:-1;21560:2:201;21545:18;;21532:32;21573:33;21532:32;21573:33;:::i;:::-;21625:7;-1:-1:-1;21684:2:201;21669:18;;21656:32;21697:33;21656:32;21697:33;:::i;:::-;21181:736;;;;-1:-1:-1;21749:7:201;;21803:2;21788:18;;21775:32;;-1:-1:-1;21854:3:201;21839:19;;21826:33;;21906:3;21891:19;;;21878:33;;-1:-1:-1;21181:736:201;-1:-1:-1;;21181:736:201:o;21922:803::-;22042:6;22050;22058;22066;22074;22082;22090;22098;22151:3;22139:9;22130:7;22126:23;22122:33;22119:53;;;22168:1;22165;22158:12;22119:53;22207:9;22194:23;22226:31;22251:5;22226:31;:::i;:::-;22276:5;-1:-1:-1;22328:2:201;22313:18;;22300:32;;-1:-1:-1;22379:2:201;22364:18;;22351:32;;-1:-1:-1;22435:2:201;22420:18;;22407:32;22448:33;22407:32;22448:33;:::i;22730:479::-;22842:6;22850;22894:9;22885:7;22881:23;22924:2;22920;22916:11;22913:31;;;22940:1;22937;22930:12;22913:31;22979:9;22966:23;22998:31;23023:5;22998:31;:::i;:::-;23048:5;-1:-1:-1;23146:2:201;23077:66;23069:75;;23065:84;23062:104;;;23162:1;23159;23152:12;23062:104;;23200:2;23189:9;23185:18;23175:28;;22730:479;;;;;:::o;23407:251::-;23477:6;23530:2;23518:9;23509:7;23505:23;23501:32;23498:52;;;23546:1;23543;23536:12;23498:52;23578:9;23572:16;23597:31;23622:5;23597:31;:::i;23839:1667::-;24335:4;24377:3;24366:9;24362:19;24354:27;;24408:6;24397:9;24390:25;24451:6;24446:2;24435:9;24431:18;24424:34;24494:6;24489:2;24478:9;24474:18;24467:34;24537:6;24532:2;24521:9;24517:18;24510:34;24587:6;24581:13;24575:3;24564:9;24560:19;24553:42;24650:2;24642:6;24638:15;24632:22;24626:3;24615:9;24611:19;24604:51;24702:2;24694:6;24690:15;24684:22;-1:-1:-1;;;;;24822:2:201;24808:12;24804:21;24798:3;24787:9;24783:19;24776:50;24891:2;24885;24877:6;24873:15;24867:22;24863:31;24857:3;24846:9;24842:19;24835:60;;;24944:3;24936:6;24932:16;24926:23;24968:3;24980:54;25030:2;25019:9;25015:18;24999:14;-1:-1:-1;;;;;4870:54:201;4858:67;;4804:127;24980:54;25083:3;25071:16;;25065:23;23733:13;23726:21;25144:3;25129:19;;23714:34;25198:3;25186:16;;25180:23;-1:-1:-1;;;;;4870:54:201;;;25262:3;25247:19;;4858:67;25316:3;25304:16;;25298:23;23826:4;23815:16;25378:3;25363:19;;23803:29;25420:15;;;25414:22;4870:54;;;25495:3;25480:19;;4858:67;25414:22;-1:-1:-1;25445:55:201;;23839:1667;;;;;;;;:::o;27081:220::-;27230:2;27219:9;27212:21;27193:4;27250:45;27291:2;27280:9;27276:18;27268:6;27250:45;:::i;28317:184::-;28369:77;28366:1;28359:88;28466:4;28463:1;28456:15;28490:4;28487:1;28480:15;28506:301;28594:1;28587:5;28584:12;28574:200;;28630:77;28627:1;28620:88;28731:4;28728:1;28721:15;28759:4;28756:1;28749:15;28574:200;28783:18;;28506:301::o;28812:996::-;29183:4;29225:3;29214:9;29210:19;29202:27;;29256:6;29245:9;29238:25;29299:6;29294:2;29283:9;29279:18;29272:34;29342:6;29337:2;29326:9;29322:18;29315:34;-1:-1:-1;;;;;29465:2:201;29456:6;29450:13;29446:22;29441:2;29430:9;29426:18;29419:50;29524:2;29516:6;29512:15;29506:22;29500:3;29489:9;29485:19;29478:51;29576:2;29568:6;29564:15;29558:22;29589:67;29651:3;29640:9;29636:19;29622:12;29589:67;:::i;:::-;-1:-1:-1;29715:2:201;29703:15;;29697:22;29693:31;29687:3;29672:19;;29665:60;29794:3;29782:16;;;29776:23;29769:31;29762:39;29756:3;29741:19;;;29734:68;28812:996;;-1:-1:-1;;;28812:996:201:o;29813:184::-;29883:6;29936:2;29924:9;29915:7;29911:23;29907:32;29904:52;;;29952:1;29949;29942:12;29904:52;-1:-1:-1;29975:16:201;;29813:184;-1:-1:-1;29813:184:201:o;30002:960::-;30274:6;30263:9;30256:25;30317:2;30312;30301:9;30297:18;30290:30;30237:4;-1:-1:-1;;;;;30436:2:201;30427:6;30421:13;30417:22;30412:2;30401:9;30397:18;30390:50;30504:2;30498;30490:6;30486:15;30480:22;30476:31;30471:2;30460:9;30456:18;30449:59;;30563:2;30555:6;30551:15;30545:22;30539:3;30528:9;30524:19;30517:51;30615:2;30607:6;30603:15;30597:22;30656:4;30650:3;30639:9;30635:19;30628:33;30684:52;30731:3;30720:9;30716:19;30702:12;30684:52;:::i;:::-;30670:66;;30802:6;30795:3;30787:6;30783:16;30777:23;30773:36;30767:3;30756:9;30752:19;30745:65;30866:3;30858:6;30854:16;30848:23;30841:4;30830:9;30826:20;30819:53;30927:3;30919:6;30915:16;30909:23;30903:3;30892:9;30888:19;30881:52;30950:6;30942:14;;;30002:960;;;;;:::o;33956:437::-;34035:1;34031:12;;;;34078;;;34099:61;;34153:4;34145:6;34141:17;34131:27;;34099:61;34206:2;34198:6;34195:14;34175:18;34172:38;34169:218;;;34243:77;34240:1;34233:88;34344:4;34341:1;34334:15;34372:4;34369:1;34362:15;34398:1060;34703:4;34745:3;34734:9;34730:19;34722:27;;34776:6;34765:9;34758:25;34819:6;34814:2;34803:9;34799:18;34792:34;-1:-1:-1;;;;;34942:2:201;34933:6;34927:13;34923:22;34918:2;34907:9;34903:18;34896:50;35010:2;35004;34996:6;34992:15;34986:22;34982:31;34977:2;34966:9;34962:18;34955:59;35079:2;35073;35065:6;35061:15;35055:22;35051:31;35045:3;35034:9;35030:19;35023:60;35148:2;35142;35134:6;35130:15;35124:22;35120:31;35114:3;35103:9;35099:19;35092:60;35218:2;35211:3;35203:6;35199:16;35193:23;35189:32;35183:3;35172:9;35168:19;35161:61;;35269:3;35261:6;35257:16;35251:23;35283:52;35330:3;35319:9;35315:19;35301:12;4785:6;4774:18;4762:31;;4709:90;35283:52;-1:-1:-1;35384:3:201;35372:16;;35366:23;4785:6;4774:18;;35447:3;35432:19;;4762:31;35398:54;34398:1060;;;;;;:::o;35463:245::-;35530:6;35583:2;35571:9;35562:7;35558:23;35554:32;35551:52;;;35599:1;35596;35589:12;35551:52;35631:9;35625:16;35650:28;35672:5;35650:28;:::i;35713:184::-;35765:77;35762:1;35755:88;35862:4;35859:1;35852:15;35886:4;35883:1;35876:15;35902:197;35940:3;35968:6;36009:2;36002:5;35998:14;36036:2;36027:7;36024:15;36021:41;;;36042:18;;:::i;:::-;36091:1;36078:15;;35902:197;-1:-1:-1;;;35902:197:201:o;36104:557::-;36426:25;;;36482:2;36467:18;;36460:34;;;-1:-1:-1;;;;;36530:55:201;;36525:2;36510:18;;36503:83;36413:3;36398:19;;36595:60;36651:2;36636:18;;36628:6;36595:60;:::i;36666:859::-;36966:25;;;36954:2;37010;37028:18;;;37021:30;;;36939:18;;;37086:22;;;36906:4;;37165:6;;37139:2;37124:18;;36906:4;37199:300;37213:6;37210:1;37207:13;37199:300;;;37288:6;37275:20;37308:31;37333:5;37308:31;:::i;:::-;-1:-1:-1;;;;;37364:54:201;37352:67;;37474:15;;;;37439:12;;;;37235:1;37228:9;37199:300;;;-1:-1:-1;37516:3:201;36666:859;-1:-1:-1;;;;;;;36666:859:201:o;37530:1960::-;38038:25;;;38094:2;38079:18;;38072:34;;;38137:2;38122:18;;38115:34;;;38180:2;38165:18;;38158:34;;;38220:13;;-1:-1:-1;;;;;4870:54:201;38250:3;38235:19;;4858:67;38025:3;38010:19;;38302:2;38290:15;;38284:22;-1:-1:-1;;;;;4870:54:201;;38363:3;38348:19;;4858:67;-1:-1:-1;38417:2:201;38405:15;;38399:22;-1:-1:-1;;;;;4870:54:201;;38480:3;38465:19;;4858:67;38430:55;38540:2;38532:6;38528:15;38522:22;38516:3;38505:9;38501:19;38494:51;38594:3;38586:6;38582:16;38576:23;38618:3;38630:68;38694:2;38683:9;38679:18;38663:14;38630:68;:::i;:::-;38747:3;38739:6;38735:16;38729:23;38707:45;;38771:3;38783:53;38832:2;38821:9;38817:18;38801:14;4785:6;4774:18;4762:31;;4709:90;38783:53;38885:3;38877:6;38873:16;38867:23;38845:45;;38909:3;38921:51;38968:2;38957:9;38953:18;38937:14;23733:13;23726:21;23714:34;;23663:91;38921:51;39009:3;38997:16;;38991:23;39033:3;39052:18;;;39045:30;;;;39118:15;;;39112:22;39106:3;39091:19;;39084:51;39172:15;;;39166:22;-1:-1:-1;;;;;4870:54:201;;;39247:3;39232:19;;4858:67;39289:15;;;39283:22;23826:4;23815:16;39362:3;39347:19;;23803:29;39404:15;;;39398:22;4870:54;;;39479:3;39464:19;;4858:67;39398:22;-1:-1:-1;39429:55:201;4804:127;39495:484;39548:3;39586:5;39580:12;39613:6;39608:3;39601:19;39639:4;39668:2;39663:3;39659:12;39652:19;;39705:2;39698:5;39694:14;39726:1;39736:218;39750:6;39747:1;39744:13;39736:218;;;39815:13;;-1:-1:-1;;;;;39811:62:201;39799:75;;39894:12;;;;39929:15;;;;39772:1;39765:9;39736:218;;;-1:-1:-1;39970:3:201;;39495:484;-1:-1:-1;;;;;39495:484:201:o;39984:435::-;40037:3;40075:5;40069:12;40102:6;40097:3;40090:19;40128:4;40157:2;40152:3;40148:12;40141:19;;40194:2;40187:5;40183:14;40215:1;40225:169;40239:6;40236:1;40233:13;40225:169;;;40300:13;;40288:26;;40334:12;;;;40369:15;;;;40261:1;40254:9;40225:169;;40424:2611;40906:6;40895:9;40888:25;40949:6;40944:2;40933:9;40929:18;40922:34;40992:6;40987:2;40976:9;40972:18;40965:34;41035:6;41030:2;41019:9;41015:18;41008:34;41079:3;41073;41062:9;41058:19;41051:32;41092:54;41141:3;41130:9;41126:19;41117:6;41111:13;-1:-1:-1;;;;;4870:54:201;4858:67;;4804:127;41092:54;40869:4;41193:2;41185:6;41181:15;41175:22;41216:6;41259:2;41253:3;41242:9;41238:19;41231:31;41285:63;41343:3;41332:9;41328:19;41314:12;41285:63;:::i;:::-;41271:77;;41397:2;41389:6;41385:15;41379:22;41420:66;41551:2;41539:9;41531:6;41527:22;41523:31;41517:3;41506:9;41502:19;41495:60;41578:52;41623:6;41607:14;41578:52;:::i;:::-;41564:66;;41679:2;41671:6;41667:15;41661:22;41639:44;;41702:3;41769:2;41757:9;41749:6;41745:22;41741:31;41736:2;41725:9;41721:18;41714:59;41796:52;41841:6;41825:14;41796:52;:::i;:::-;41782:66;;41897:3;41889:6;41885:16;41879:23;41857:45;;41921:3;41933:54;41983:2;41972:9;41968:18;41952:14;-1:-1:-1;;;;;4870:54:201;4858:67;;4804:127;41933:54;42036:3;42028:6;42024:16;42018:23;41996:45;;42060:3;42127:2;42115:9;42107:6;42103:22;42099:31;42094:2;42083:9;42079:18;42072:59;42154:41;42188:6;42172:14;42154:41;:::i;:::-;42140:55;;42244:3;42236:6;42232:16;42226:23;42204:45;;42268:3;42258:13;;42280:53;42329:2;42318:9;42314:18;42298:14;4785:6;4774:18;4762:31;;4709:90;42280:53;42370:3;42362:6;42358:16;42352:23;42342:33;;42394:3;42433:2;42428;42417:9;42413:18;42406:30;42473:2;42465:6;42461:15;42455:22;42445:32;;42497:3;42486:14;;42537:2;42531:3;42520:9;42516:19;42509:31;42594:2;42586:6;42582:15;42576:22;42571:2;42560:9;42556:18;42549:50;42654:2;42646:6;42642:15;42636:22;42630:3;42619:9;42615:19;42608:51;42708:2;42700:6;42696:15;42690:22;42668:44;;42721:55;42771:3;42760:9;42756:19;42740:14;-1:-1:-1;;;;;4870:54:201;4858:67;;4804:127;42721:55;42813:15;;42807:22;23826:4;23815:16;;42886:3;42871:19;;23803:29;42807:22;-1:-1:-1;42838:53:201;;-1:-1:-1;;23759:75:201;42838:53;42928:16;;42922:23;23733:13;;23726:21;43001:3;42986:19;;23714:34;42922:23;-1:-1:-1;42954:52:201;;-1:-1:-1;;23663:91:201;44057:492;44172:6;44180;44188;44196;44204;44212;44265:3;44253:9;44244:7;44240:23;44236:33;44233:53;;;44282:1;44279;44272:12;44233:53;44311:9;44305:16;44295:26;;44361:2;44350:9;44346:18;44340:25;44330:35;;44405:2;44394:9;44390:18;44384:25;44374:35;;44449:2;44438:9;44434:18;44428:25;44418:35;;44493:3;44482:9;44478:19;44472:26;44462:36;;44538:3;44527:9;44523:19;44517:26;44507:36;;44057:492;;;;;;;;:::o;45818:125::-;45858:4;45886:1;45883;45880:8;45877:34;;;45891:18;;:::i;:::-;-1:-1:-1;45928:9:201;;45818:125::o;45948:184::-;46000:77;45997:1;45990:88;46097:4;46094:1;46087:15;46121:4;46118:1;46111:15;46137:195;46176:3;46207:66;46200:5;46197:77;46194:103;;;46277:18;;:::i;:::-;-1:-1:-1;46324:1:201;46313:13;;46137:195::o;46337:1520::-;46821:4;46863:3;46852:9;46848:19;46840:27;;46894:6;46883:9;46876:25;46937:6;46932:2;46921:9;46917:18;46910:34;46980:6;46975:2;46964:9;46960:18;46953:34;47023:6;47018:2;47007:9;47003:18;46996:34;-1:-1:-1;;;;;47147:2:201;47138:6;47132:13;47128:22;47122:3;47111:9;47107:19;47100:51;47216:2;47210;47202:6;47198:15;47192:22;47188:31;47182:3;47171:9;47167:19;47160:60;;47267:2;47259:6;47255:15;47249:22;47280:53;47328:3;47317:9;47313:19;47299:12;-1:-1:-1;;;;;4870:54:201;4858:67;;4804:127;47280:53;;47388:2;47380:6;47376:15;47370:22;47364:3;47353:9;47349:19;47342:51;47430:3;47422:6;47418:16;47412:23;47454:3;47493:2;47488;47477:9;47473:18;47466:30;47551:3;47543:6;47539:16;47533:23;47527:3;47516:9;47512:19;47505:52;47612:3;47604:6;47600:16;47594:23;47588:3;47577:9;47573:19;47566:52;47667:3;47659:6;47655:16;47649:23;47627:45;;47681:55;47731:3;47720:9;47716:19;47700:14;-1:-1:-1;;;;;4870:54:201;4858:67;;4804:127;47681:55;47773:15;;47767:22;23826:4;23815:16;;47846:3;47831:19;;23803:29;47767:22;-1:-1:-1;47798:53:201;23759:75;48991:228;49031:7;49157:1;49089:66;49085:74;49082:1;49079:81;49074:1;49067:9;49060:17;49056:105;49053:131;;;49164:18;;:::i;:::-;-1:-1:-1;49204:9:201;;48991:228::o;49224:184::-;49276:77;49273:1;49266:88;49373:4;49370:1;49363:15;49397:4;49394:1;49387:15;49413:128;49453:3;49484:1;49480:6;49477:1;49474:13;49471:39;;;49490:18;;:::i;:::-;-1:-1:-1;49526:9:201;;49413:128::o;49546:274::-;49586:1;49612;49602:189;;49647:77;49644:1;49637:88;49748:4;49745:1;49738:15;49776:4;49773:1;49766:15;49602:189;-1:-1:-1;49805:9:201;;49546:274::o"},"gasEstimates":{"creation":{"codeDepositCost":"4069400","executionCost":"infinite","totalCost":"infinite"},"external":{"ADDRESSES_PROVIDER()":"infinite","BRIDGE_PROTOCOL_FEE()":"2372","FLASHLOAN_PREMIUM_TOTAL()":"2409","FLASHLOAN_PREMIUM_TO_PROTOCOL()":"2429","MAX_NUMBER_RESERVES()":"2416","MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":"2354","POOL_REVISION()":"276","backUnbacked(address,uint256,uint256)":"infinite","borrow(address,uint256,uint256,uint16,address)":"infinite","configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":"infinite","deposit(address,uint256,address,uint16)":"infinite","dropReserve(address)":"192291","finalizeTransfer(address,address,address,uint256,uint256,uint256)":"infinite","flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":"infinite","flashLoanSimple(address,address,uint256,bytes,uint16)":"infinite","getConfiguration(address)":"2727","getEModeCategoryData(uint8)":"infinite","getReserveAddressById(uint16)":"2620","getReserveData(address)":"23158","getReserveNormalizedIncome(address)":"infinite","getReserveNormalizedVariableDebt(address)":"infinite","getReservesList()":"infinite","getUserAccountData(address)":"infinite","getUserConfiguration(address)":"2728","getUserEMode(address)":"2637","initReserve(address,address,address,address,address)":"infinite","initialize(address)":"infinite","liquidationCall(address,address,address,uint256,bool)":"infinite","mintToTreasury(address[])":"infinite","mintUnbacked(address,uint256,address,uint16)":"infinite","rebalanceStableBorrowRate(address,address)":"infinite","repay(address,uint256,uint256,address)":"infinite","repayWithATokens(address,uint256,uint256)":"infinite","repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":"infinite","rescueTokens(address,address,uint256)":"infinite","resetIsolationModeTotalDebt(address)":"infinite","setConfiguration(address,(uint256))":"infinite","setMaxNumberOfReserves(uint16)":"24643","setReserveInterestRateStrategyAddress(address,address)":"infinite","setUserEMode(uint8)":"infinite","setUserUseReserveAsCollateral(address,bool)":"infinite","supply(address,uint256,address,uint16)":"infinite","supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":"infinite","swapBorrowRateMode(address,uint256)":"infinite","updateBridgeProtocolFee(uint256)":"infinite","updateFlashloanPremiums(uint128,uint128)":"infinite","withdraw(address,uint256,address)":"infinite"},"internal":{"getRevision()":"infinite"}},"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","BRIDGE_PROTOCOL_FEE()":"272d9072","FLASHLOAN_PREMIUM_TOTAL()":"074b2e43","FLASHLOAN_PREMIUM_TO_PROTOCOL()":"6a99c036","MAX_NUMBER_RESERVES()":"f8119d51","MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":"e82fec2f","POOL_REVISION()":"0148170e","backUnbacked(address,uint256,uint256)":"d65dc7a1","borrow(address,uint256,uint256,uint16,address)":"a415bcad","configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":"d579ea7d","deposit(address,uint256,address,uint16)":"e8eda9df","dropReserve(address)":"63c9b860","finalizeTransfer(address,address,address,uint256,uint256,uint256)":"d5ed3933","flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":"ab9c4b5d","flashLoanSimple(address,address,uint256,bytes,uint16)":"42b0b77c","getConfiguration(address)":"c44b11f7","getEModeCategoryData(uint8)":"6c6f6ae1","getReserveAddressById(uint16)":"52751797","getReserveData(address)":"35ea6a75","getReserveNormalizedIncome(address)":"d15e0053","getReserveNormalizedVariableDebt(address)":"386497fd","getReservesList()":"d1946dbc","getUserAccountData(address)":"bf92857c","getUserConfiguration(address)":"4417a583","getUserEMode(address)":"eddf1b79","initReserve(address,address,address,address,address)":"7a708e92","initialize(address)":"c4d66de8","liquidationCall(address,address,address,uint256,bool)":"00a718a9","mintToTreasury(address[])":"9cd19996","mintUnbacked(address,uint256,address,uint16)":"69a933a5","rebalanceStableBorrowRate(address,address)":"cd112382","repay(address,uint256,uint256,address)":"573ade81","repayWithATokens(address,uint256,uint256)":"2dad97d4","repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":"ee3e210b","rescueTokens(address,address,uint256)":"cea9d26f","resetIsolationModeTotalDebt(address)":"e43e88a1","setConfiguration(address,(uint256))":"f51e435b","setMaxNumberOfReserves(uint16)":"57c68dc4","setReserveInterestRateStrategyAddress(address,address)":"1d2118f9","setUserEMode(uint8)":"28530a47","setUserUseReserveAsCollateral(address,bool)":"5a3b74b9","supply(address,uint256,address,uint16)":"617ba037","supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":"02c205f0","swapBorrowRateMode(address,uint256)":"94ba89a2","updateBridgeProtocolFee(uint256)":"3036b439","updateFlashloanPremiums(uint128,uint128)":"bcb6e522","withdraw(address,uint256,address)":"69328dec"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"backer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"BackUnbacked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowRate\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"Borrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"premium\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"FlashLoan\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalDebt\",\"type\":\"uint256\"}],\"name\":\"IsolationModeTotalDebtUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collateralAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"debtAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"debtToCover\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidatedCollateralAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"receiveAToken\",\"type\":\"bool\"}],\"name\":\"LiquidationCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"MintUnbacked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountMinted\",\"type\":\"uint256\"}],\"name\":\"MintedToTreasury\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"RebalanceStableBorrowRate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"repayer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"useATokens\",\"type\":\"bool\"}],\"name\":\"Repay\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidityRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stableBorrowRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"variableBorrowRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidityIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"variableBorrowIndex\",\"type\":\"uint256\"}],\"name\":\"ReserveDataUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"Supply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"}],\"name\":\"SwapBorrowRateMode\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"}],\"name\":\"UserEModeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BRIDGE_PROTOCOL_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FLASHLOAN_PREMIUM_TOTAL\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FLASHLOAN_PREMIUM_TO_PROTOCOL\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_NUMBER_RESERVES\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_STABLE_RATE_BORROW_SIZE_PERCENT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"backUnbacked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"borrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"id\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"ltv\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationBonus\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"priceSource\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"internalType\":\"struct DataTypes.EModeCategory\",\"name\":\"category\",\"type\":\"tuple\"}],\"name\":\"configureEModeCategory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"dropReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceFromBefore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceToBefore\",\"type\":\"uint256\"}],\"name\":\"finalizeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiverAddress\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"interestRateModes\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"flashLoan\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiverAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"flashLoanSimple\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getConfiguration\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"id\",\"type\":\"uint8\"}],\"name\":\"getEModeCategoryData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint16\",\"name\":\"ltv\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationBonus\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"priceSource\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"internalType\":\"struct DataTypes.EModeCategory\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"id\",\"type\":\"uint16\"}],\"name\":\"getReserveAddressById\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveData\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"configuration\",\"type\":\"tuple\"},{\"internalType\":\"uint128\",\"name\":\"liquidityIndex\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentLiquidityRate\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"variableBorrowIndex\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentVariableBorrowRate\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentStableBorrowRate\",\"type\":\"uint128\"},{\"internalType\":\"uint40\",\"name\":\"lastUpdateTimestamp\",\"type\":\"uint40\"},{\"internalType\":\"uint16\",\"name\":\"id\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"aTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"accruedToTreasury\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"unbacked\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"isolationModeTotalDebt\",\"type\":\"uint128\"}],\"internalType\":\"struct DataTypes.ReserveData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveNormalizedIncome\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveNormalizedVariableDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReservesList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserAccountData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalCollateralBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalDebtBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"availableBorrowsBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentLiquidationThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"healthFactor\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserConfiguration\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.UserConfigurationMap\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserEMode\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"aTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"}],\"name\":\"initReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collateralAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"debtAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"debtToCover\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"receiveAToken\",\"type\":\"bool\"}],\"name\":\"liquidationCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"}],\"name\":\"mintToTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"mintUnbacked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"rebalanceStableBorrowRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"repay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"}],\"name\":\"repayWithATokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"permitV\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"permitR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"permitS\",\"type\":\"bytes32\"}],\"name\":\"repayWithPermit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"rescueTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"resetIsolationModeTotalDebt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"configuration\",\"type\":\"tuple\"}],\"name\":\"setConfiguration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"newMaxNumberOfReserves\",\"type\":\"uint16\"}],\"name\":\"setMaxNumberOfReserves\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rateStrategyAddress\",\"type\":\"address\"}],\"name\":\"setReserveInterestRateStrategyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"}],\"name\":\"setUserEMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"useAsCollateral\",\"type\":\"bool\"}],\"name\":\"setUserUseReserveAsCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"supply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"permitV\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"permitR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"permitS\",\"type\":\"bytes32\"}],\"name\":\"supplyWithPermit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"}],\"name\":\"swapBorrowRateMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFee\",\"type\":\"uint256\"}],\"name\":\"updateBridgeProtocolFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"flashLoanPremiumTotal\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"flashLoanPremiumToProtocol\",\"type\":\"uint128\"}],\"name\":\"updateFlashloanPremiums\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"BRIDGE_PROTOCOL_FEE()\":{\"returns\":{\"_0\":\"The bridge fee sent to the protocol treasury\"}},\"FLASHLOAN_PREMIUM_TOTAL()\":{\"returns\":{\"_0\":\"The total fee on flashloans\"}},\"FLASHLOAN_PREMIUM_TO_PROTOCOL()\":{\"returns\":{\"_0\":\"The flashloan fee sent to the protocol treasury\"}},\"MAX_NUMBER_RESERVES()\":{\"returns\":{\"_0\":\"The maximum number of reserves supported\"}},\"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()\":{\"returns\":{\"_0\":\"The percentage of available liquidity to borrow, expressed in bps\"}},\"backUnbacked(address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount to back\",\"asset\":\"The address of the underlying asset to back\",\"fee\":\"The amount paid in fees\"},\"returns\":{\"_0\":\"The backed amount\"}},\"borrow(address,uint256,uint256,uint16,address)\":{\"params\":{\"amount\":\"The amount to be borrowed\",\"asset\":\"The address of the underlying asset to borrow\",\"interestRateMode\":\"The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"The address of the user who will receive the debt. Should be the address of the borrower itself calling the function if he wants to borrow against his own collateral, or the address of the credit delegator if he has been given credit delegation allowance\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))\":{\"details\":\"In eMode, the protocol allows very high borrowing power to borrow assets of the same category. The category 0 is reserved as it's the default for volatile assets\",\"params\":{\"config\":\"The configuration of the category\",\"id\":\"The id of the category\"}},\"deposit(address,uint256,address,uint16)\":{\"details\":\"Deprecated: maintained for compatibility purposes\",\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"dropReserve(address)\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"}},\"finalizeTransfer(address,address,address,uint256,uint256,uint256)\":{\"details\":\"Only callable by the overlying aToken of the `asset`\",\"params\":{\"amount\":\"The amount being transferred/withdrawn\",\"asset\":\"The address of the underlying asset of the aToken\",\"balanceFromBefore\":\"The aToken balance of the `from` user before the transfer\",\"balanceToBefore\":\"The aToken balance of the `to` user before the transfer\",\"from\":\"The user from which the aTokens are transferred\",\"to\":\"The user receiving the aTokens\"}},\"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)\":{\"details\":\"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/\",\"params\":{\"amounts\":\"The amounts of the assets being flash-borrowed\",\"assets\":\"The addresses of the assets being flash-borrowed\",\"interestRateModes\":\"Types of the debt to open if the flash loan is not returned:   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\",\"onBehalfOf\":\"The address  that will receive the debt in the case of using on `modes` 1 or 2\",\"params\":\"Variadic packed params to pass to the receiver as extra information\",\"receiverAddress\":\"The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"flashLoanSimple(address,address,uint256,bytes,uint16)\":{\"details\":\"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/\",\"params\":{\"amount\":\"The amount of the asset being flash-borrowed\",\"asset\":\"The address of the asset being flash-borrowed\",\"params\":\"Variadic packed params to pass to the receiver as extra information\",\"receiverAddress\":\"The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"getConfiguration(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The configuration of the reserve\"}},\"getEModeCategoryData(uint8)\":{\"params\":{\"id\":\"The id of the category\"},\"returns\":{\"_0\":\"The configuration data of the category\"}},\"getReserveAddressById(uint16)\":{\"params\":{\"id\":\"The id of the reserve as stored in the DataTypes.ReserveData struct\"},\"returns\":{\"_0\":\"The address of the reserve associated with id\"}},\"getReserveData(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The state and configuration data of the reserve\"}},\"getReserveNormalizedIncome(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The reserve's normalized income\"}},\"getReserveNormalizedVariableDebt(address)\":{\"details\":\"WARNING: This function is intended to be used primarily by the protocol itself to get a \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current moment (approx. a borrower would get if opening a position). This means that is always used in combination with variable debt supply/balances. If using this function externally, consider that is possible to have an increasing normalized variable debt that is not equivalent to how the variable debt index would be updated in storage (e.g. only updates with non-zero variable debt supply)\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The reserve normalized variable debt\"}},\"getReservesList()\":{\"details\":\"It does not include dropped reserves\",\"returns\":{\"_0\":\"The addresses of the underlying assets of the initialized reserves\"}},\"getUserAccountData(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"availableBorrowsBase\":\"The borrowing power left of the user in the base currency used by the price feed\",\"currentLiquidationThreshold\":\"The liquidation threshold of the user\",\"healthFactor\":\"The current health factor of the user\",\"ltv\":\"The loan to value of The user\",\"totalCollateralBase\":\"The total collateral of the user in the base currency used by the price feed\",\"totalDebtBase\":\"The total debt of the user in the base currency used by the price feed\"}},\"getUserConfiguration(address)\":{\"params\":{\"user\":\"The user address\"},\"returns\":{\"_0\":\"The configuration of the user\"}},\"getUserEMode(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The eMode id\"}},\"initReserve(address,address,address,address,address)\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"aTokenAddress\":\"The address of the aToken that will be assigned to the reserve\",\"asset\":\"The address of the underlying asset of the reserve\",\"interestRateStrategyAddress\":\"The address of the interest rate strategy contract\",\"stableDebtAddress\":\"The address of the StableDebtToken that will be assigned to the reserve\",\"variableDebtAddress\":\"The address of the VariableDebtToken that will be assigned to the reserve\"}},\"initialize(address)\":{\"details\":\"Function is invoked by the proxy contract when the Pool contract is added to the PoolAddressesProvider of the market.Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations\",\"params\":{\"provider\":\"The address of the PoolAddressesProvider\"}},\"liquidationCall(address,address,address,uint256,bool)\":{\"params\":{\"collateralAsset\":\"The address of the underlying asset used as collateral, to receive as result of the liquidation\",\"debtAsset\":\"The address of the underlying borrowed asset to be repaid with the liquidation\",\"debtToCover\":\"The debt amount of borrowed `asset` the liquidator wants to cover\",\"receiveAToken\":\"True if the liquidators wants to receive the collateral aTokens, `false` if he wants to receive the underlying collateral asset directly\",\"user\":\"The address of the borrower getting liquidated\"}},\"mintToTreasury(address[])\":{\"params\":{\"assets\":\"The list of reserves for which the minting needs to be executed\"}},\"mintUnbacked(address,uint256,address,uint16)\":{\"params\":{\"amount\":\"The amount to mint\",\"asset\":\"The address of the underlying asset to mint\",\"onBehalfOf\":\"The address that will receive the aTokens\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"rebalanceStableBorrowRate(address,address)\":{\"params\":{\"asset\":\"The address of the underlying asset borrowed\",\"user\":\"The address of the user to be rebalanced\"}},\"repay(address,uint256,uint256,address)\":{\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"The address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"repayWithATokens(address,uint256,uint256)\":{\"details\":\"Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken balance is not enough to cover the whole debt\",\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"deadline\":\"The deadline timestamp that the permit is valid\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"Address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed\",\"permitR\":\"The R parameter of ERC712 permit sig\",\"permitS\":\"The S parameter of ERC712 permit sig\",\"permitV\":\"The V parameter of ERC712 permit sig\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"rescueTokens(address,address,uint256)\":{\"params\":{\"amount\":\"The amount of token to transfer\",\"to\":\"The address of the recipient\",\"token\":\"The address of the token\"}},\"resetIsolationModeTotalDebt(address)\":{\"details\":\"It requires the given asset has zero debt ceiling\",\"params\":{\"asset\":\"The address of the underlying asset to reset the isolationModeTotalDebt\"}},\"setConfiguration(address,(uint256))\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"configuration\":\"The new configuration bitmap\"}},\"setReserveInterestRateStrategyAddress(address,address)\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"rateStrategyAddress\":\"The address of the interest rate strategy contract\"}},\"setUserEMode(uint8)\":{\"params\":{\"categoryId\":\"The id of the category\"}},\"setUserUseReserveAsCollateral(address,bool)\":{\"params\":{\"asset\":\"The address of the underlying asset supplied\",\"useAsCollateral\":\"True if the user wants to use the supply as collateral, false otherwise\"}},\"supply(address,uint256,address,uint16)\":{\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"deadline\":\"The deadline timestamp that the permit is valid\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet\",\"permitR\":\"The R parameter of ERC712 permit sig\",\"permitS\":\"The S parameter of ERC712 permit sig\",\"permitV\":\"The V parameter of ERC712 permit sig\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"swapBorrowRateMode(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset borrowed\",\"interestRateMode\":\"The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\"}},\"updateBridgeProtocolFee(uint256)\":{\"params\":{\"bridgeProtocolFee\":\"The part of the premium sent to the protocol treasury\"}},\"updateFlashloanPremiums(uint128,uint128)\":{\"details\":\"The total premium is calculated on the total borrowed amountThe premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`Only callable by the PoolConfigurator contract\",\"params\":{\"flashLoanPremiumToProtocol\":\"The part of the premium sent to the protocol treasury, expressed in bps\",\"flashLoanPremiumTotal\":\"The total premium, expressed in bps\"}},\"withdraw(address,uint256,address)\":{\"params\":{\"amount\":\"The underlying amount to be withdrawn   - Send the value type(uint256).max in order to withdraw the whole aToken balance\",\"asset\":\"The address of the underlying asset to withdraw\",\"to\":\"The address that will receive the underlying, same as msg.sender if the user   wants to receive it on his own wallet, or a different address if the beneficiary is a   different wallet\"},\"returns\":{\"_0\":\"The final amount withdrawn\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the PoolAddressesProvider connected to this contract\"},\"BRIDGE_PROTOCOL_FEE()\":{\"notice\":\"Returns the part of the bridge fees sent to protocol\"},\"FLASHLOAN_PREMIUM_TOTAL()\":{\"notice\":\"Returns the total fee on flash loans\"},\"FLASHLOAN_PREMIUM_TO_PROTOCOL()\":{\"notice\":\"Returns the part of the flashloan fees sent to protocol\"},\"MAX_NUMBER_RESERVES()\":{\"notice\":\"Returns the maximum number of reserves supported to be listed in this Pool\"},\"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()\":{\"notice\":\"Returns the percentage of available liquidity that can be borrowed at once at stable rate\"},\"backUnbacked(address,uint256,uint256)\":{\"notice\":\"Back the current unbacked underlying with `amount` and pay `fee`.\"},\"borrow(address,uint256,uint256,uint16,address)\":{\"notice\":\"Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower already supplied enough collateral, or he was given enough allowance by a credit delegator on the corresponding debt token (StableDebtToken or VariableDebtToken) - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet   and 100 stable/variable debt tokens, depending on the `interestRateMode`\"},\"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))\":{\"notice\":\"Configures a new category for the eMode.\"},\"deposit(address,uint256,address,uint16)\":{\"notice\":\"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC\"},\"dropReserve(address)\":{\"notice\":\"Drop a reserve\"},\"finalizeTransfer(address,address,address,uint256,uint256,uint256)\":{\"notice\":\"Validates and finalizes an aToken transfer\"},\"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)\":{\"notice\":\"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned.\"},\"flashLoanSimple(address,address,uint256,bytes,uint16)\":{\"notice\":\"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned.\"},\"getConfiguration(address)\":{\"notice\":\"Returns the configuration of the reserve\"},\"getEModeCategoryData(uint8)\":{\"notice\":\"Returns the data of an eMode category\"},\"getReserveAddressById(uint16)\":{\"notice\":\"Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\"},\"getReserveData(address)\":{\"notice\":\"Returns the state and configuration of the reserve\"},\"getReserveNormalizedIncome(address)\":{\"notice\":\"Returns the normalized income of the reserve\"},\"getReserveNormalizedVariableDebt(address)\":{\"notice\":\"Returns the normalized variable debt per unit of asset\"},\"getReservesList()\":{\"notice\":\"Returns the list of the underlying assets of all the initialized reserves\"},\"getUserAccountData(address)\":{\"notice\":\"Returns the user account data across all the reserves\"},\"getUserConfiguration(address)\":{\"notice\":\"Returns the configuration of the user across all the reserves\"},\"getUserEMode(address)\":{\"notice\":\"Returns the eMode the user is using\"},\"initReserve(address,address,address,address,address)\":{\"notice\":\"Initializes a reserve, activating it, assigning an aToken and debt tokens and an interest rate strategy\"},\"initialize(address)\":{\"notice\":\"Initializes the Pool.\"},\"liquidationCall(address,address,address,uint256,bool)\":{\"notice\":\"Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1 - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\"},\"mintToTreasury(address[])\":{\"notice\":\"Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\"},\"mintUnbacked(address,uint256,address,uint16)\":{\"notice\":\"Mints an `amount` of aTokens to the `onBehalfOf`\"},\"rebalanceStableBorrowRate(address,address)\":{\"notice\":\"Rebalances the stable interest rate of a user to the current stable rate defined on the reserve. - Users can be rebalanced if the following conditions are satisfied:     1. Usage ratio is above 95%     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too        much has been borrowed at a stable rate and suppliers are not earning enough\"},\"repay(address,uint256,uint256,address)\":{\"notice\":\"Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\"},\"repayWithATokens(address,uint256,uint256)\":{\"notice\":\"Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the equivalent debt tokens - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\"},\"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Repay with transfer approval of asset to be repaid done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\"},\"rescueTokens(address,address,uint256)\":{\"notice\":\"Rescue and transfer tokens locked in this contract\"},\"resetIsolationModeTotalDebt(address)\":{\"notice\":\"Resets the isolation mode total debt of the given asset to zero\"},\"setConfiguration(address,(uint256))\":{\"notice\":\"Sets the configuration bitmap of the reserve as a whole\"},\"setReserveInterestRateStrategyAddress(address,address)\":{\"notice\":\"Updates the address of the interest rate strategy contract\"},\"setUserEMode(uint8)\":{\"notice\":\"Allows a user to use the protocol in eMode\"},\"setUserUseReserveAsCollateral(address,bool)\":{\"notice\":\"Allows suppliers to enable/disable a specific supplied asset as collateral\"},\"supply(address,uint256,address,uint16)\":{\"notice\":\"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC\"},\"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Supply with transfer approval of asset to be supplied done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\"},\"swapBorrowRateMode(address,uint256)\":{\"notice\":\"Allows a borrower to swap his debt between stable and variable mode, or vice versa\"},\"updateBridgeProtocolFee(uint256)\":{\"notice\":\"Updates the protocol fee on the bridging\"},\"updateFlashloanPremiums(uint128,uint128)\":{\"notice\":\"Updates flash loan premiums. Flash loan premium consists of two parts: - A part is sent to aToken holders as extra, one time accumulated interest - A part is collected by the protocol treasury\"},\"withdraw(address,uint256,address)\":{\"notice\":\"Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/mocks/helpers/MockPool.sol\":\"MockPoolInherited\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\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(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\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 {AccessControl-_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) external view returns (bool);\\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 {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\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) external;\\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) external;\\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) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed assets\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param assets The addresses of the flash-borrowed assets\\n   * @param amounts The amounts of the flash-borrowed assets\\n   * @param premiums The fee of each flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata premiums,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0x0c7446b978d8044330dea7a491768498ac4052e2b3ca02d1b86ce32ea63b3810\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanSimpleReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanSimpleReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed asset\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param asset The address of the flash-borrowed asset\\n   * @param amount The amount of the flash-borrowed asset\\n   * @param premium The fee of the flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0xba50a7834ddfdca3e3cfac09043f72699be42ff88925641ac30950a434b2b2ff\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/mocks/helpers/MockPool.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\n\\ncontract MockPool {\\n  // Reserved storage space to avoid layout collisions.\\n  uint256[100] private ______gap;\\n\\n  address internal _addressesProvider;\\n  address[] internal _reserveList;\\n\\n  function initialize(address provider) external {\\n    _addressesProvider = provider;\\n  }\\n\\n  function addReserveToReservesList(address reserve) external {\\n    _reserveList.push(reserve);\\n  }\\n\\n  function getReservesList() external view returns (address[] memory) {\\n    address[] memory reservesList = new address[](_reserveList.length);\\n    for (uint256 i; i < _reserveList.length; i++) {\\n      reservesList[i] = _reserveList[i];\\n    }\\n    return reservesList;\\n  }\\n}\\n\\nimport {Pool} from '../../protocol/pool/Pool.sol';\\n\\ncontract MockPoolInherited is Pool {\\n  uint16 internal _maxNumberOfReserves = 128;\\n\\n  function getRevision() internal pure override returns (uint256) {\\n    return 0x3;\\n  }\\n\\n  constructor(IPoolAddressesProvider provider) Pool(provider) {}\\n\\n  function setMaxNumberOfReserves(uint16 newMaxNumberOfReserves) public {\\n    _maxNumberOfReserves = newMaxNumberOfReserves;\\n  }\\n\\n  function MAX_NUMBER_RESERVES() public view override returns (uint16) {\\n    return _maxNumberOfReserves;\\n  }\\n\\n  function dropReserve(address asset) external override {\\n    _reservesList[_reserves[asset].id] = address(0);\\n    delete _reserves[asset];\\n  }\\n}\\n\",\"keccak256\":\"0xf599e8aef73562f6b6c79ffb6ac5edcb898756a10baabfac3693f483fdf689e6\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title Helpers library\\n * @author Aave\\n */\\nlibrary Helpers {\\n  /**\\n   * @notice Fetches the user current stable and variable debt balances\\n   * @param user The user address\\n   * @param reserveCache The reserve cache data object\\n   * @return The stable debt balance\\n   * @return The variable debt balance\\n   */\\n  function getUserCurrentDebt(\\n    address user,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal view returns (uint256, uint256) {\\n    return (\\n      IERC20(reserveCache.stableDebtTokenAddress).balanceOf(user),\\n      IERC20(reserveCache.variableDebtTokenAddress).balanceOf(user)\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x7e0c79cab4c30d9fadd227dcdecb51046e01d74ed34e5e8597f928f7f3a97640\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Helpers} from '../helpers/Helpers.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\\n\\n/**\\n * @title BorrowLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to borrowing\\n */\\nlibrary BorrowLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice Implements the borrow feature. Borrowing allows users that provided collateral to draw liquidity from the\\n   * Aave protocol proportionally to their collateralization power. For isolated positions, it also increases the\\n   * isolated debt.\\n   * @dev  Emits the `Borrow()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the borrow function\\n   */\\n  function executeBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteBorrowParams memory params\\n  ) public {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    (\\n      bool isolationModeActive,\\n      address isolationModeCollateralAddress,\\n      uint256 isolationModeDebtCeiling\\n    ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    ValidationLogic.validateBorrow(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.ValidateBorrowParams({\\n        reserveCache: reserveCache,\\n        userConfig: userConfig,\\n        asset: params.asset,\\n        userAddress: params.onBehalfOf,\\n        amount: params.amount,\\n        interestRateMode: params.interestRateMode,\\n        maxStableLoanPercent: params.maxStableRateBorrowSizePercent,\\n        reservesCount: params.reservesCount,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory,\\n        priceOracleSentinel: params.priceOracleSentinel,\\n        isolationModeActive: isolationModeActive,\\n        isolationModeCollateralAddress: isolationModeCollateralAddress,\\n        isolationModeDebtCeiling: isolationModeDebtCeiling\\n      })\\n    );\\n\\n    uint256 currentStableRate = 0;\\n    bool isFirstBorrowing = false;\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      currentStableRate = reserve.currentStableBorrowRate;\\n\\n      (\\n        isFirstBorrowing,\\n        reserveCache.nextTotalStableDebt,\\n        reserveCache.nextAvgStableBorrowRate\\n      ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).mint(\\n        params.user,\\n        params.onBehalfOf,\\n        params.amount,\\n        currentStableRate\\n      );\\n    } else {\\n      (isFirstBorrowing, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).mint(params.user, params.onBehalfOf, params.amount, reserveCache.nextVariableBorrowIndex);\\n    }\\n\\n    if (isFirstBorrowing) {\\n      userConfig.setBorrowing(reserve.id, true);\\n    }\\n\\n    if (isolationModeActive) {\\n      uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt += (params.amount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n      emit IsolationModeTotalDebtUpdated(\\n        isolationModeCollateralAddress,\\n        nextIsolationModeTotalDebt\\n      );\\n    }\\n\\n    reserve.updateInterestRates(\\n      reserveCache,\\n      params.asset,\\n      0,\\n      params.releaseUnderlying ? params.amount : 0\\n    );\\n\\n    if (params.releaseUnderlying) {\\n      IAToken(reserveCache.aTokenAddress).transferUnderlyingTo(params.user, params.amount);\\n    }\\n\\n    emit Borrow(\\n      params.asset,\\n      params.user,\\n      params.onBehalfOf,\\n      params.amount,\\n      params.interestRateMode,\\n      params.interestRateMode == DataTypes.InterestRateMode.STABLE\\n        ? currentStableRate\\n        : reserve.currentVariableBorrowRate,\\n      params.referralCode\\n    );\\n  }\\n\\n  /**\\n   * @notice Implements the repay feature. Repaying transfers the underlying back to the aToken and clears the\\n   * equivalent amount of debt for the user by burning the corresponding debt token. For isolated positions, it also\\n   * reduces the isolated debt.\\n   * @dev  Emits the `Repay()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the repay function\\n   * @return The actual amount being repaid\\n   */\\n  function executeRepay(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteRepayParams memory params\\n  ) external returns (uint256) {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n\\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\\n      params.onBehalfOf,\\n      reserveCache\\n    );\\n\\n    ValidationLogic.validateRepay(\\n      reserveCache,\\n      params.amount,\\n      params.interestRateMode,\\n      params.onBehalfOf,\\n      stableDebt,\\n      variableDebt\\n    );\\n\\n    uint256 paybackAmount = params.interestRateMode == DataTypes.InterestRateMode.STABLE\\n      ? stableDebt\\n      : variableDebt;\\n\\n    // Allows a user to repay with aTokens without leaving dust from interest.\\n    if (params.useATokens && params.amount == type(uint256).max) {\\n      params.amount = IAToken(reserveCache.aTokenAddress).balanceOf(msg.sender);\\n    }\\n\\n    if (params.amount < paybackAmount) {\\n      paybackAmount = params.amount;\\n    }\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).burn(params.onBehalfOf, paybackAmount);\\n    } else {\\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).burn(params.onBehalfOf, paybackAmount, reserveCache.nextVariableBorrowIndex);\\n    }\\n\\n    reserve.updateInterestRates(\\n      reserveCache,\\n      params.asset,\\n      params.useATokens ? 0 : paybackAmount,\\n      0\\n    );\\n\\n    if (stableDebt + variableDebt - paybackAmount == 0) {\\n      userConfig.setBorrowing(reserve.id, false);\\n    }\\n\\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\\n      reservesData,\\n      reservesList,\\n      userConfig,\\n      reserveCache,\\n      paybackAmount\\n    );\\n\\n    if (params.useATokens) {\\n      IAToken(reserveCache.aTokenAddress).burn(\\n        msg.sender,\\n        reserveCache.aTokenAddress,\\n        paybackAmount,\\n        reserveCache.nextLiquidityIndex\\n      );\\n    } else {\\n      IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, paybackAmount);\\n      IAToken(reserveCache.aTokenAddress).handleRepayment(\\n        msg.sender,\\n        params.onBehalfOf,\\n        paybackAmount\\n      );\\n    }\\n\\n    emit Repay(params.asset, params.onBehalfOf, msg.sender, paybackAmount, params.useATokens);\\n\\n    return paybackAmount;\\n  }\\n\\n  /**\\n   * @notice Implements the rebalance stable borrow rate feature. In case of liquidity crunches on the protocol, stable\\n   * rate borrows might need to be rebalanced to bring back equilibrium between the borrow and supply APYs.\\n   * @dev The rules that define if a position can be rebalanced are implemented in `ValidationLogic.validateRebalanceStableBorrowRate()`\\n   * @dev Emits the `RebalanceStableBorrowRate()` event\\n   * @param reserve The state of the reserve of the asset being repaid\\n   * @param asset The asset of the position being rebalanced\\n   * @param user The user being rebalanced\\n   */\\n  function executeRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    address asset,\\n    address user\\n  ) external {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateRebalanceStableBorrowRate(reserve, reserveCache, asset);\\n\\n    IStableDebtToken stableDebtToken = IStableDebtToken(reserveCache.stableDebtTokenAddress);\\n    uint256 stableDebt = IERC20(address(stableDebtToken)).balanceOf(user);\\n\\n    stableDebtToken.burn(user, stableDebt);\\n\\n    (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = stableDebtToken\\n      .mint(user, user, stableDebt, reserve.currentStableBorrowRate);\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    emit RebalanceStableBorrowRate(asset, user);\\n  }\\n\\n  /**\\n   * @notice Implements the swap borrow rate feature. Borrowers can swap from variable to stable positions at any time.\\n   * @dev Emits the `Swap()` event\\n   * @param reserve The of the reserve of the asset being repaid\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param asset The asset of the position being swapped\\n   * @param interestRateMode The current interest rate mode of the position being swapped\\n   */\\n  function executeSwapBorrowRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    DataTypes.InterestRateMode interestRateMode\\n  ) external {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\\n      msg.sender,\\n      reserveCache\\n    );\\n\\n    ValidationLogic.validateSwapRateMode(\\n      reserve,\\n      reserveCache,\\n      userConfig,\\n      stableDebt,\\n      variableDebt,\\n      interestRateMode\\n    );\\n\\n    if (interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).burn(msg.sender, stableDebt);\\n\\n      (, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).mint(msg.sender, msg.sender, stableDebt, reserveCache.nextVariableBorrowIndex);\\n    } else {\\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).burn(msg.sender, variableDebt, reserveCache.nextVariableBorrowIndex);\\n\\n      (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).mint(msg.sender, msg.sender, variableDebt, reserve.currentStableBorrowRate);\\n    }\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    emit SwapBorrowRateMode(asset, msg.sender, interestRateMode);\\n  }\\n}\\n\",\"keccak256\":\"0xf3d4fcd846149f0414db46d23cee241831b3c04c375477e84bdb5a95bd3ccac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/BridgeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\nlibrary BridgeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @notice Mint unbacked aTokens to a user and updates the unbacked for the reserve.\\n   * @dev Essentially a supply without transferring the underlying.\\n   * @dev Emits the `MintUnbacked` event\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled` if asset is set as collateral\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param asset The address of the underlying asset to mint aTokens of\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function executeMintUnbacked(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateSupply(reserveCache, reserve, amount);\\n\\n    uint256 unbackedMintCap = reserveCache.reserveConfiguration.getUnbackedMintCap();\\n    uint256 reserveDecimals = reserveCache.reserveConfiguration.getDecimals();\\n\\n    uint256 unbacked = reserve.unbacked += amount.toUint128();\\n\\n    require(\\n      unbacked <= unbackedMintCap * (10 ** reserveDecimals),\\n      Errors.UNBACKED_MINT_CAP_EXCEEDED\\n    );\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    bool isFirstSupply = IAToken(reserveCache.aTokenAddress).mint(\\n      msg.sender,\\n      onBehalfOf,\\n      amount,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isFirstSupply) {\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration,\\n          reserveCache.aTokenAddress\\n        )\\n      ) {\\n        userConfig.setUsingAsCollateral(reserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(asset, onBehalfOf);\\n      }\\n    }\\n\\n    emit MintUnbacked(asset, msg.sender, onBehalfOf, amount, referralCode);\\n  }\\n\\n  /**\\n   * @notice Back the current unbacked with `amount` and pay `fee`.\\n   * @dev It is not possible to back more than the existing unbacked amount of the reserve\\n   * @dev Emits the `BackUnbacked` event\\n   * @param reserve The reserve to back unbacked for\\n   * @param asset The address of the underlying asset to repay\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @param protocolFeeBps The fraction of fees in basis points paid to the protocol\\n   * @return The backed amount\\n   */\\n  function executeBackUnbacked(\\n    DataTypes.ReserveData storage reserve,\\n    address asset,\\n    uint256 amount,\\n    uint256 fee,\\n    uint256 protocolFeeBps\\n  ) external returns (uint256) {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    uint256 backingAmount = (amount < reserve.unbacked) ? amount : reserve.unbacked;\\n\\n    uint256 feeToProtocol = fee.percentMul(protocolFeeBps);\\n    uint256 feeToLP = fee - feeToProtocol;\\n    uint256 added = backingAmount + fee;\\n\\n    reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex(\\n      IERC20(reserveCache.aTokenAddress).totalSupply() +\\n        uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex),\\n      feeToLP\\n    );\\n\\n    reserve.accruedToTreasury += feeToProtocol.rayDiv(reserveCache.nextLiquidityIndex).toUint128();\\n\\n    reserve.unbacked -= backingAmount.toUint128();\\n    reserve.updateInterestRates(reserveCache, asset, added, 0);\\n\\n    IERC20(asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, added);\\n\\n    emit BackUnbacked(asset, msg.sender, backingAmount, fee);\\n\\n    return backingAmount;\\n  }\\n}\\n\",\"keccak256\":\"0x71e1204a0ee1e4b9cdf787b1949c219845e5099671dd07639c4fa23995379edd\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/FlashLoanLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IFlashLoanReceiver} from '../../../flashloan/interfaces/IFlashLoanReceiver.sol';\\nimport {IFlashLoanSimpleReceiver} from '../../../flashloan/interfaces/IFlashLoanSimpleReceiver.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {BorrowLogic} from './BorrowLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title FlashLoanLogic library\\n * @author Aave\\n * @notice Implements the logic for the flash loans\\n */\\nlibrary FlashLoanLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  // Helper struct for internal variables used in the `executeFlashLoan` function\\n  struct FlashLoanLocalVars {\\n    IFlashLoanReceiver receiver;\\n    uint256 i;\\n    address currentAsset;\\n    uint256 currentAmount;\\n    uint256[] totalPremiums;\\n    uint256 flashloanPremiumTotal;\\n    uint256 flashloanPremiumToProtocol;\\n  }\\n\\n  /**\\n   * @notice Implements the flashloan feature that allow users to access liquidity of the pool for one transaction\\n   * as long as the amount taken plus fee is returned or debt is opened.\\n   * @dev For authorized flashborrowers the fee is waived\\n   * @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\\n   * if the receiver have not approved the pool the transaction will revert.\\n   * @dev Emits the `FlashLoan()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the flashloan function\\n   */\\n  function executeFlashLoan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.FlashloanParams memory params\\n  ) external {\\n    // The usual action flow (cache -> updateState -> validation -> changeState -> updateRates)\\n    // is altered to (validation -> user payload -> cache -> updateState -> changeState -> updateRates) for flashloans.\\n    // This is done to protect against reentrance and rate manipulation within the user specified payload.\\n\\n    ValidationLogic.validateFlashloan(reservesData, params.assets, params.amounts);\\n\\n    FlashLoanLocalVars memory vars;\\n\\n    vars.totalPremiums = new uint256[](params.assets.length);\\n\\n    vars.receiver = IFlashLoanReceiver(params.receiverAddress);\\n    (vars.flashloanPremiumTotal, vars.flashloanPremiumToProtocol) = params.isAuthorizedFlashBorrower\\n      ? (0, 0)\\n      : (params.flashLoanPremiumTotal, params.flashLoanPremiumToProtocol);\\n\\n    for (vars.i = 0; vars.i < params.assets.length; vars.i++) {\\n      vars.currentAmount = params.amounts[vars.i];\\n      vars.totalPremiums[vars.i] = DataTypes.InterestRateMode(params.interestRateModes[vars.i]) ==\\n        DataTypes.InterestRateMode.NONE\\n        ? vars.currentAmount.percentMul(vars.flashloanPremiumTotal)\\n        : 0;\\n      IAToken(reservesData[params.assets[vars.i]].aTokenAddress).transferUnderlyingTo(\\n        params.receiverAddress,\\n        vars.currentAmount\\n      );\\n    }\\n\\n    require(\\n      vars.receiver.executeOperation(\\n        params.assets,\\n        params.amounts,\\n        vars.totalPremiums,\\n        msg.sender,\\n        params.params\\n      ),\\n      Errors.INVALID_FLASHLOAN_EXECUTOR_RETURN\\n    );\\n\\n    for (vars.i = 0; vars.i < params.assets.length; vars.i++) {\\n      vars.currentAsset = params.assets[vars.i];\\n      vars.currentAmount = params.amounts[vars.i];\\n\\n      if (\\n        DataTypes.InterestRateMode(params.interestRateModes[vars.i]) ==\\n        DataTypes.InterestRateMode.NONE\\n      ) {\\n        _handleFlashLoanRepayment(\\n          reservesData[vars.currentAsset],\\n          DataTypes.FlashLoanRepaymentParams({\\n            asset: vars.currentAsset,\\n            receiverAddress: params.receiverAddress,\\n            amount: vars.currentAmount,\\n            totalPremium: vars.totalPremiums[vars.i],\\n            flashLoanPremiumToProtocol: vars.flashloanPremiumToProtocol,\\n            referralCode: params.referralCode\\n          })\\n        );\\n      } else {\\n        // If the user chose to not return the funds, the system checks if there is enough collateral and\\n        // eventually opens a debt position\\n        BorrowLogic.executeBorrow(\\n          reservesData,\\n          reservesList,\\n          eModeCategories,\\n          userConfig,\\n          DataTypes.ExecuteBorrowParams({\\n            asset: vars.currentAsset,\\n            user: msg.sender,\\n            onBehalfOf: params.onBehalfOf,\\n            amount: vars.currentAmount,\\n            interestRateMode: DataTypes.InterestRateMode(params.interestRateModes[vars.i]),\\n            referralCode: params.referralCode,\\n            releaseUnderlying: false,\\n            maxStableRateBorrowSizePercent: params.maxStableRateBorrowSizePercent,\\n            reservesCount: params.reservesCount,\\n            oracle: IPoolAddressesProvider(params.addressesProvider).getPriceOracle(),\\n            userEModeCategory: params.userEModeCategory,\\n            priceOracleSentinel: IPoolAddressesProvider(params.addressesProvider)\\n              .getPriceOracleSentinel()\\n          })\\n        );\\n        // no premium is paid when taking on the flashloan as debt\\n        emit FlashLoan(\\n          params.receiverAddress,\\n          msg.sender,\\n          vars.currentAsset,\\n          vars.currentAmount,\\n          DataTypes.InterestRateMode(params.interestRateModes[vars.i]),\\n          0,\\n          params.referralCode\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Implements the simple flashloan feature that allow users to access liquidity of ONE reserve for one\\n   * transaction as long as the amount taken plus fee is returned.\\n   * @dev Does not waive fee for approved flashborrowers nor allow taking on debt instead of repaying to save gas\\n   * @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\\n   * if the receiver have not approved the pool the transaction will revert.\\n   * @dev Emits the `FlashLoan()` event\\n   * @param reserve The state of the flashloaned reserve\\n   * @param params The additional parameters needed to execute the simple flashloan function\\n   */\\n  function executeFlashLoanSimple(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.FlashloanSimpleParams memory params\\n  ) external {\\n    // The usual action flow (cache -> updateState -> validation -> changeState -> updateRates)\\n    // is altered to (validation -> user payload -> cache -> updateState -> changeState -> updateRates) for flashloans.\\n    // This is done to protect against reentrance and rate manipulation within the user specified payload.\\n\\n    ValidationLogic.validateFlashloanSimple(reserve);\\n\\n    IFlashLoanSimpleReceiver receiver = IFlashLoanSimpleReceiver(params.receiverAddress);\\n    uint256 totalPremium = params.amount.percentMul(params.flashLoanPremiumTotal);\\n    IAToken(reserve.aTokenAddress).transferUnderlyingTo(params.receiverAddress, params.amount);\\n\\n    require(\\n      receiver.executeOperation(\\n        params.asset,\\n        params.amount,\\n        totalPremium,\\n        msg.sender,\\n        params.params\\n      ),\\n      Errors.INVALID_FLASHLOAN_EXECUTOR_RETURN\\n    );\\n\\n    _handleFlashLoanRepayment(\\n      reserve,\\n      DataTypes.FlashLoanRepaymentParams({\\n        asset: params.asset,\\n        receiverAddress: params.receiverAddress,\\n        amount: params.amount,\\n        totalPremium: totalPremium,\\n        flashLoanPremiumToProtocol: params.flashLoanPremiumToProtocol,\\n        referralCode: params.referralCode\\n      })\\n    );\\n  }\\n\\n  /**\\n   * @notice Handles repayment of flashloaned assets + premium\\n   * @dev Will pull the amount + premium from the receiver, so must have approved pool\\n   * @param reserve The state of the flashloaned reserve\\n   * @param params The additional parameters needed to execute the repayment function\\n   */\\n  function _handleFlashLoanRepayment(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.FlashLoanRepaymentParams memory params\\n  ) internal {\\n    uint256 premiumToProtocol = params.totalPremium.percentMul(params.flashLoanPremiumToProtocol);\\n    uint256 premiumToLP = params.totalPremium - premiumToProtocol;\\n    uint256 amountPlusPremium = params.amount + params.totalPremium;\\n\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n    reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex(\\n      IERC20(reserveCache.aTokenAddress).totalSupply() +\\n        uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex),\\n      premiumToLP\\n    );\\n\\n    reserve.accruedToTreasury += premiumToProtocol\\n      .rayDiv(reserveCache.nextLiquidityIndex)\\n      .toUint128();\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, amountPlusPremium, 0);\\n\\n    IERC20(params.asset).safeTransferFrom(\\n      params.receiverAddress,\\n      reserveCache.aTokenAddress,\\n      amountPlusPremium\\n    );\\n\\n    IAToken(reserveCache.aTokenAddress).handleRepayment(\\n      params.receiverAddress,\\n      params.receiverAddress,\\n      amountPlusPremium\\n    );\\n\\n    emit FlashLoan(\\n      params.receiverAddress,\\n      msg.sender,\\n      params.asset,\\n      params.amount,\\n      DataTypes.InterestRateMode(0),\\n      params.totalPremium,\\n      params.referralCode\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x086859964ddcf0b39d0ee5498f2c9baf211bcecd18d36864848ed33bd6396a3b\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/IsolationModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title IsolationModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for handling repayments for assets borrowed in isolation mode\\n */\\nlibrary IsolationModeLogic {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice updated the isolated debt whenever a position collateralized by an isolated asset is repaid or liquidated\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping\\n   * @param reserveCache The cached data of the reserve\\n   * @param repayAmount The amount being repaid\\n   */\\n  function updateIsolatedDebtIfIsolated(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 repayAmount\\n  ) internal {\\n    (bool isolationModeActive, address isolationModeCollateralAddress, ) = userConfig\\n      .getIsolationModeState(reservesData, reservesList);\\n\\n    if (isolationModeActive) {\\n      uint128 isolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt;\\n\\n      uint128 isolatedDebtRepaid = (repayAmount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n\\n      // since the debt ceiling does not take into account the interest accrued, it might happen that amount\\n      // repaid > debt in isolation mode\\n      if (isolationModeTotalDebt <= isolatedDebtRepaid) {\\n        reservesData[isolationModeCollateralAddress].isolationModeTotalDebt = 0;\\n        emit IsolationModeTotalDebtUpdated(isolationModeCollateralAddress, 0);\\n      } else {\\n        uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n          .isolationModeTotalDebt = isolationModeTotalDebt - isolatedDebtRepaid;\\n        emit IsolationModeTotalDebtUpdated(\\n          isolationModeCollateralAddress,\\n          nextIsolationModeTotalDebt\\n        );\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xf96e7a7bb1d0d62c233462fcb86954361ef2d7be03bf444017ce8a443d0b6cc1\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/LiquidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts//IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {PercentageMath} from '../../libraries/math/PercentageMath.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Helpers} from '../../libraries/helpers/Helpers.sol';\\nimport {DataTypes} from '../../libraries/types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\nimport {UserConfiguration} from '../../libraries/configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../../libraries/configuration/ReserveConfiguration.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\n\\n/**\\n * @title LiquidationLogic library\\n * @author Aave\\n * @notice Implements actions involving management of collateral in the protocol, the main one being the liquidations\\n */\\nlibrary LiquidationLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Default percentage of borrower's debt to be repaid in a liquidation.\\n   * @dev Percentage applied when the users health factor is above `CLOSE_FACTOR_HF_THRESHOLD`\\n   * Expressed in bps, a value of 0.5e4 results in 50.00%\\n   */\\n  uint256 internal constant DEFAULT_LIQUIDATION_CLOSE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @dev Maximum percentage of borrower's debt to be repaid in a liquidation\\n   * @dev Percentage applied when the users health factor is below `CLOSE_FACTOR_HF_THRESHOLD`\\n   * Expressed in bps, a value of 1e4 results in 100.00%\\n   */\\n  uint256 public constant MAX_LIQUIDATION_CLOSE_FACTOR = 1e4;\\n\\n  /**\\n   * @dev This constant represents below which health factor value it is possible to liquidate\\n   * an amount of debt corresponding to `MAX_LIQUIDATION_CLOSE_FACTOR`.\\n   * A value of 0.95e18 results in 0.95\\n   */\\n  uint256 public constant CLOSE_FACTOR_HF_THRESHOLD = 0.95e18;\\n\\n  struct LiquidationCallLocalVars {\\n    uint256 userCollateralBalance;\\n    uint256 userVariableDebt;\\n    uint256 userTotalDebt;\\n    uint256 actualDebtToLiquidate;\\n    uint256 actualCollateralToLiquidate;\\n    uint256 liquidationBonus;\\n    uint256 healthFactor;\\n    uint256 liquidationProtocolFeeAmount;\\n    address collateralPriceSource;\\n    address debtPriceSource;\\n    IAToken collateralAToken;\\n    DataTypes.ReserveCache debtReserveCache;\\n  }\\n\\n  /**\\n   * @notice Function to liquidate a position if its Health Factor drops below 1. The caller (liquidator)\\n   * covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   * a proportional amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @dev Emits the `LiquidationCall()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params The additional parameters needed to execute the liquidation function\\n   */\\n  function executeLiquidationCall(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ExecuteLiquidationCallParams memory params\\n  ) external {\\n    LiquidationCallLocalVars memory vars;\\n\\n    DataTypes.ReserveData storage collateralReserve = reservesData[params.collateralAsset];\\n    DataTypes.ReserveData storage debtReserve = reservesData[params.debtAsset];\\n    DataTypes.UserConfigurationMap storage userConfig = usersConfig[params.user];\\n    vars.debtReserveCache = debtReserve.cache();\\n    debtReserve.updateState(vars.debtReserveCache);\\n\\n    (, , , , vars.healthFactor, ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.user,\\n        oracle: params.priceOracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    (vars.userVariableDebt, vars.userTotalDebt, vars.actualDebtToLiquidate) = _calculateDebt(\\n      vars.debtReserveCache,\\n      params,\\n      vars.healthFactor\\n    );\\n\\n    ValidationLogic.validateLiquidationCall(\\n      userConfig,\\n      collateralReserve,\\n      DataTypes.ValidateLiquidationCallParams({\\n        debtReserveCache: vars.debtReserveCache,\\n        totalDebt: vars.userTotalDebt,\\n        healthFactor: vars.healthFactor,\\n        priceOracleSentinel: params.priceOracleSentinel\\n      })\\n    );\\n\\n    (\\n      vars.collateralAToken,\\n      vars.collateralPriceSource,\\n      vars.debtPriceSource,\\n      vars.liquidationBonus\\n    ) = _getConfigurationData(eModeCategories, collateralReserve, params);\\n\\n    vars.userCollateralBalance = vars.collateralAToken.balanceOf(params.user);\\n\\n    (\\n      vars.actualCollateralToLiquidate,\\n      vars.actualDebtToLiquidate,\\n      vars.liquidationProtocolFeeAmount\\n    ) = _calculateAvailableCollateralToLiquidate(\\n      collateralReserve,\\n      vars.debtReserveCache,\\n      vars.collateralPriceSource,\\n      vars.debtPriceSource,\\n      vars.actualDebtToLiquidate,\\n      vars.userCollateralBalance,\\n      vars.liquidationBonus,\\n      IPriceOracleGetter(params.priceOracle)\\n    );\\n\\n    if (vars.userTotalDebt == vars.actualDebtToLiquidate) {\\n      userConfig.setBorrowing(debtReserve.id, false);\\n    }\\n\\n    // If the collateral being liquidated is equal to the user balance,\\n    // we set the currency as not being used as collateral anymore\\n    if (\\n      vars.actualCollateralToLiquidate + vars.liquidationProtocolFeeAmount ==\\n      vars.userCollateralBalance\\n    ) {\\n      userConfig.setUsingAsCollateral(collateralReserve.id, false);\\n      emit ReserveUsedAsCollateralDisabled(params.collateralAsset, params.user);\\n    }\\n\\n    _burnDebtTokens(params, vars);\\n\\n    debtReserve.updateInterestRates(\\n      vars.debtReserveCache,\\n      params.debtAsset,\\n      vars.actualDebtToLiquidate,\\n      0\\n    );\\n\\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\\n      reservesData,\\n      reservesList,\\n      userConfig,\\n      vars.debtReserveCache,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    if (params.receiveAToken) {\\n      _liquidateATokens(reservesData, reservesList, usersConfig, collateralReserve, params, vars);\\n    } else {\\n      _burnCollateralATokens(collateralReserve, params, vars);\\n    }\\n\\n    // Transfer fee to treasury if it is non-zero\\n    if (vars.liquidationProtocolFeeAmount != 0) {\\n      uint256 liquidityIndex = collateralReserve.getNormalizedIncome();\\n      uint256 scaledDownLiquidationProtocolFee = vars.liquidationProtocolFeeAmount.rayDiv(\\n        liquidityIndex\\n      );\\n      uint256 scaledDownUserBalance = vars.collateralAToken.scaledBalanceOf(params.user);\\n      // To avoid trying to send more aTokens than available on balance, due to 1 wei imprecision\\n      if (scaledDownLiquidationProtocolFee > scaledDownUserBalance) {\\n        vars.liquidationProtocolFeeAmount = scaledDownUserBalance.rayMul(liquidityIndex);\\n      }\\n      vars.collateralAToken.transferOnLiquidation(\\n        params.user,\\n        vars.collateralAToken.RESERVE_TREASURY_ADDRESS(),\\n        vars.liquidationProtocolFeeAmount\\n      );\\n    }\\n\\n    // Transfers the debt asset being repaid to the aToken, where the liquidity is kept\\n    IERC20(params.debtAsset).safeTransferFrom(\\n      msg.sender,\\n      vars.debtReserveCache.aTokenAddress,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    IAToken(vars.debtReserveCache.aTokenAddress).handleRepayment(\\n      msg.sender,\\n      params.user,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    emit LiquidationCall(\\n      params.collateralAsset,\\n      params.debtAsset,\\n      params.user,\\n      vars.actualDebtToLiquidate,\\n      vars.actualCollateralToLiquidate,\\n      msg.sender,\\n      params.receiveAToken\\n    );\\n  }\\n\\n  /**\\n   * @notice Burns the collateral aTokens and transfers the underlying to the liquidator.\\n   * @dev   The function also updates the state and the interest rate of the collateral reserve.\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars The executeLiquidationCall() function local vars\\n   */\\n  function _burnCollateralATokens(\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    DataTypes.ReserveCache memory collateralReserveCache = collateralReserve.cache();\\n    collateralReserve.updateState(collateralReserveCache);\\n    collateralReserve.updateInterestRates(\\n      collateralReserveCache,\\n      params.collateralAsset,\\n      0,\\n      vars.actualCollateralToLiquidate\\n    );\\n\\n    // Burn the equivalent amount of aToken, sending the underlying to the liquidator\\n    vars.collateralAToken.burn(\\n      params.user,\\n      msg.sender,\\n      vars.actualCollateralToLiquidate,\\n      collateralReserveCache.nextLiquidityIndex\\n    );\\n  }\\n\\n  /**\\n   * @notice Liquidates the user aTokens by transferring them to the liquidator.\\n   * @dev   The function also checks the state of the liquidator and activates the aToken as collateral\\n   *        as in standard transfers if the isolation mode constraints are respected.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars The executeLiquidationCall() function local vars\\n   */\\n  function _liquidateATokens(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    uint256 liquidatorPreviousATokenBalance = IERC20(vars.collateralAToken).balanceOf(msg.sender);\\n    vars.collateralAToken.transferOnLiquidation(\\n      params.user,\\n      msg.sender,\\n      vars.actualCollateralToLiquidate\\n    );\\n\\n    if (liquidatorPreviousATokenBalance == 0) {\\n      DataTypes.UserConfigurationMap storage liquidatorConfig = usersConfig[msg.sender];\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          liquidatorConfig,\\n          collateralReserve.configuration,\\n          collateralReserve.aTokenAddress\\n        )\\n      ) {\\n        liquidatorConfig.setUsingAsCollateral(collateralReserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(params.collateralAsset, msg.sender);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns the debt tokens of the user up to the amount being repaid by the liquidator.\\n   * @dev The function alters the `debtReserveCache` state in `vars` to update the debt related data.\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars the executeLiquidationCall() function local vars\\n   */\\n  function _burnDebtTokens(\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    if (vars.userVariableDebt >= vars.actualDebtToLiquidate) {\\n      vars.debtReserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        vars.debtReserveCache.variableDebtTokenAddress\\n      ).burn(\\n          params.user,\\n          vars.actualDebtToLiquidate,\\n          vars.debtReserveCache.nextVariableBorrowIndex\\n        );\\n    } else {\\n      // If the user doesn't have variable debt, no need to try to burn variable debt tokens\\n      if (vars.userVariableDebt != 0) {\\n        vars.debtReserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n          vars.debtReserveCache.variableDebtTokenAddress\\n        ).burn(params.user, vars.userVariableDebt, vars.debtReserveCache.nextVariableBorrowIndex);\\n      }\\n      (\\n        vars.debtReserveCache.nextTotalStableDebt,\\n        vars.debtReserveCache.nextAvgStableBorrowRate\\n      ) = IStableDebtToken(vars.debtReserveCache.stableDebtTokenAddress).burn(\\n        params.user,\\n        vars.actualDebtToLiquidate - vars.userVariableDebt\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the total debt of the user and the actual amount to liquidate depending on the health factor\\n   * and corresponding close factor.\\n   * @dev If the Health Factor is below CLOSE_FACTOR_HF_THRESHOLD, the close factor is increased to MAX_LIQUIDATION_CLOSE_FACTOR\\n   * @param debtReserveCache The reserve cache data object of the debt reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param healthFactor The health factor of the position\\n   * @return The variable debt of the user\\n   * @return The total debt of the user\\n   * @return The actual debt to liquidate as a function of the closeFactor\\n   */\\n  function _calculateDebt(\\n    DataTypes.ReserveCache memory debtReserveCache,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    uint256 healthFactor\\n  ) internal view returns (uint256, uint256, uint256) {\\n    (uint256 userStableDebt, uint256 userVariableDebt) = Helpers.getUserCurrentDebt(\\n      params.user,\\n      debtReserveCache\\n    );\\n\\n    uint256 userTotalDebt = userStableDebt + userVariableDebt;\\n\\n    uint256 closeFactor = healthFactor > CLOSE_FACTOR_HF_THRESHOLD\\n      ? DEFAULT_LIQUIDATION_CLOSE_FACTOR\\n      : MAX_LIQUIDATION_CLOSE_FACTOR;\\n\\n    uint256 maxLiquidatableDebt = userTotalDebt.percentMul(closeFactor);\\n\\n    uint256 actualDebtToLiquidate = params.debtToCover > maxLiquidatableDebt\\n      ? maxLiquidatableDebt\\n      : params.debtToCover;\\n\\n    return (userVariableDebt, userTotalDebt, actualDebtToLiquidate);\\n  }\\n\\n  /**\\n   * @notice Returns the configuration data for the debt and the collateral reserves.\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @return The collateral aToken\\n   * @return The address to use as price source for the collateral\\n   * @return The address to use as price source for the debt\\n   * @return The liquidation bonus to apply to the collateral\\n   */\\n  function _getConfigurationData(\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params\\n  ) internal view returns (IAToken, address, address, uint256) {\\n    IAToken collateralAToken = IAToken(collateralReserve.aTokenAddress);\\n    uint256 liquidationBonus = collateralReserve.configuration.getLiquidationBonus();\\n\\n    address collateralPriceSource = params.collateralAsset;\\n    address debtPriceSource = params.debtAsset;\\n\\n    if (params.userEModeCategory != 0) {\\n      address eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n\\n      if (\\n        EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          collateralReserve.configuration.getEModeCategory()\\n        )\\n      ) {\\n        liquidationBonus = eModeCategories[params.userEModeCategory].liquidationBonus;\\n\\n        if (eModePriceSource != address(0)) {\\n          collateralPriceSource = eModePriceSource;\\n        }\\n      }\\n\\n      // when in eMode, debt will always be in the same eMode category, can skip matching category check\\n      if (eModePriceSource != address(0)) {\\n        debtPriceSource = eModePriceSource;\\n      }\\n    }\\n\\n    return (collateralAToken, collateralPriceSource, debtPriceSource, liquidationBonus);\\n  }\\n\\n  struct AvailableCollateralToLiquidateLocalVars {\\n    uint256 collateralPrice;\\n    uint256 debtAssetPrice;\\n    uint256 maxCollateralToLiquidate;\\n    uint256 baseCollateral;\\n    uint256 bonusCollateral;\\n    uint256 debtAssetDecimals;\\n    uint256 collateralDecimals;\\n    uint256 collateralAssetUnit;\\n    uint256 debtAssetUnit;\\n    uint256 collateralAmount;\\n    uint256 debtAmountNeeded;\\n    uint256 liquidationProtocolFeePercentage;\\n    uint256 liquidationProtocolFee;\\n  }\\n\\n  /**\\n   * @notice Calculates how much of a specific collateral can be liquidated, given\\n   * a certain amount of debt asset.\\n   * @dev This function needs to be called after all the checks to validate the liquidation have been performed,\\n   *   otherwise it might fail.\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param debtReserveCache The cached data of the debt reserve\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param userCollateralBalance The collateral balance for the specific `collateralAsset` of the user being liquidated\\n   * @param liquidationBonus The collateral bonus percentage to receive as result of the liquidation\\n   * @return The maximum amount that is possible to liquidate given all the liquidation constraints (user balance, close factor)\\n   * @return The amount to repay with the liquidation\\n   * @return The fee taken from the liquidation bonus amount to be paid to the protocol\\n   */\\n  function _calculateAvailableCollateralToLiquidate(\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ReserveCache memory debtReserveCache,\\n    address collateralAsset,\\n    address debtAsset,\\n    uint256 debtToCover,\\n    uint256 userCollateralBalance,\\n    uint256 liquidationBonus,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    AvailableCollateralToLiquidateLocalVars memory vars;\\n\\n    vars.collateralPrice = oracle.getAssetPrice(collateralAsset);\\n    vars.debtAssetPrice = oracle.getAssetPrice(debtAsset);\\n\\n    vars.collateralDecimals = collateralReserve.configuration.getDecimals();\\n    vars.debtAssetDecimals = debtReserveCache.reserveConfiguration.getDecimals();\\n\\n    unchecked {\\n      vars.collateralAssetUnit = 10 ** vars.collateralDecimals;\\n      vars.debtAssetUnit = 10 ** vars.debtAssetDecimals;\\n    }\\n\\n    vars.liquidationProtocolFeePercentage = collateralReserve\\n      .configuration\\n      .getLiquidationProtocolFee();\\n\\n    // This is the base collateral to liquidate based on the given debt to cover\\n    vars.baseCollateral =\\n      ((vars.debtAssetPrice * debtToCover * vars.collateralAssetUnit)) /\\n      (vars.collateralPrice * vars.debtAssetUnit);\\n\\n    vars.maxCollateralToLiquidate = vars.baseCollateral.percentMul(liquidationBonus);\\n\\n    if (vars.maxCollateralToLiquidate > userCollateralBalance) {\\n      vars.collateralAmount = userCollateralBalance;\\n      vars.debtAmountNeeded = ((vars.collateralPrice * vars.collateralAmount * vars.debtAssetUnit) /\\n        (vars.debtAssetPrice * vars.collateralAssetUnit)).percentDiv(liquidationBonus);\\n    } else {\\n      vars.collateralAmount = vars.maxCollateralToLiquidate;\\n      vars.debtAmountNeeded = debtToCover;\\n    }\\n\\n    if (vars.liquidationProtocolFeePercentage != 0) {\\n      vars.bonusCollateral =\\n        vars.collateralAmount -\\n        vars.collateralAmount.percentDiv(liquidationBonus);\\n\\n      vars.liquidationProtocolFee = vars.bonusCollateral.percentMul(\\n        vars.liquidationProtocolFeePercentage\\n      );\\n\\n      return (\\n        vars.collateralAmount - vars.liquidationProtocolFee,\\n        vars.debtAmountNeeded,\\n        vars.liquidationProtocolFee\\n      );\\n    } else {\\n      return (vars.collateralAmount, vars.debtAmountNeeded, 0);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xde6eb6f7c1e21dfee970b2f5abe014ed4c422164c505a5dbbe1191bd59cd85ec\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/PoolLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\n\\n/**\\n * @title PoolLogic library\\n * @author Aave\\n * @notice Implements the logic for Pool specific functions\\n */\\nlibrary PoolLogic {\\n  using GPv2SafeERC20 for IERC20;\\n  using WadRayMath for uint256;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice Initialize an asset reserve and add the reserve to the list of reserves\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param params Additional parameters needed for initiation\\n   * @return true if appended, false if inserted at existing empty spot\\n   */\\n  function executeInitReserve(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.InitReserveParams memory params\\n  ) external returns (bool) {\\n    require(Address.isContract(params.asset), Errors.NOT_CONTRACT);\\n    reservesData[params.asset].init(\\n      params.aTokenAddress,\\n      params.stableDebtAddress,\\n      params.variableDebtAddress,\\n      params.interestRateStrategyAddress\\n    );\\n\\n    bool reserveAlreadyAdded = reservesData[params.asset].id != 0 ||\\n      reservesList[0] == params.asset;\\n    require(!reserveAlreadyAdded, Errors.RESERVE_ALREADY_ADDED);\\n\\n    for (uint16 i = 0; i < params.reservesCount; i++) {\\n      if (reservesList[i] == address(0)) {\\n        reservesData[params.asset].id = i;\\n        reservesList[i] = params.asset;\\n        return false;\\n      }\\n    }\\n\\n    require(params.reservesCount < params.maxNumberReserves, Errors.NO_MORE_RESERVES_ALLOWED);\\n    reservesData[params.asset].id = params.reservesCount;\\n    reservesList[params.reservesCount] = params.asset;\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function executeRescueTokens(address token, address to, uint256 amount) external {\\n    IERC20(token).safeTransfer(to, amount);\\n  }\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param reservesData The state of all the reserves\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function executeMintToTreasury(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] calldata assets\\n  ) external {\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      address assetAddress = assets[i];\\n\\n      DataTypes.ReserveData storage reserve = reservesData[assetAddress];\\n\\n      // this cover both inactive reserves and invalid reserves since the flag will be 0 for both\\n      if (!reserve.configuration.getActive()) {\\n        continue;\\n      }\\n\\n      uint256 accruedToTreasury = reserve.accruedToTreasury;\\n\\n      if (accruedToTreasury != 0) {\\n        reserve.accruedToTreasury = 0;\\n        uint256 normalizedIncome = reserve.getNormalizedIncome();\\n        uint256 amountToMint = accruedToTreasury.rayMul(normalizedIncome);\\n        IAToken(reserve.aTokenAddress).mintToTreasury(amountToMint, normalizedIncome);\\n\\n        emit MintedToTreasury(assetAddress, amountToMint);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param reservesData The state of all the reserves\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function executeResetIsolationModeTotalDebt(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address asset\\n  ) external {\\n    require(reservesData[asset].configuration.getDebtCeiling() == 0, Errors.DEBT_CEILING_NOT_ZERO);\\n    reservesData[asset].isolationModeTotalDebt = 0;\\n    emit IsolationModeTotalDebtUpdated(asset, 0);\\n  }\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function executeDropReserve(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    address asset\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    ValidationLogic.validateDropReserve(reservesList, reserve, asset);\\n    reservesList[reservesData[asset].id] = address(0);\\n    delete reservesData[asset];\\n  }\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the calculation\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function executeGetUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    )\\n  {\\n    (\\n      totalCollateralBase,\\n      totalDebtBase,\\n      ltv,\\n      currentLiquidationThreshold,\\n      healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(reservesData, reservesList, eModeCategories, params);\\n\\n    availableBorrowsBase = GenericLogic.calculateAvailableBorrows(\\n      totalCollateralBase,\\n      totalDebtBase,\\n      ltv\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x87d386100fb287b49ef144b0ea2269d2842998b426ba5c018dce9f1bc09f1913\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/SupplyLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\n\\n/**\\n * @title SupplyLogic library\\n * @author Aave\\n * @notice Implements the base logic for supply/withdraw\\n */\\nlibrary SupplyLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @notice Implements the supply feature. Through `supply()`, users supply assets to the Aave protocol.\\n   * @dev Emits the `Supply()` event.\\n   * @dev In the first supply action, `ReserveUsedAsCollateralEnabled()` is emitted, if the asset can be enabled as\\n   * collateral.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the supply function\\n   */\\n  function executeSupply(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSupplyParams memory params\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateSupply(reserveCache, reserve, params.amount);\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, params.amount, 0);\\n\\n    IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, params.amount);\\n\\n    bool isFirstSupply = IAToken(reserveCache.aTokenAddress).mint(\\n      msg.sender,\\n      params.onBehalfOf,\\n      params.amount,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isFirstSupply) {\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration,\\n          reserveCache.aTokenAddress\\n        )\\n      ) {\\n        userConfig.setUsingAsCollateral(reserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(params.asset, params.onBehalfOf);\\n      }\\n    }\\n\\n    emit Supply(params.asset, msg.sender, params.onBehalfOf, params.amount, params.referralCode);\\n  }\\n\\n  /**\\n   * @notice Implements the withdraw feature. Through `withdraw()`, users redeem their aTokens for the underlying asset\\n   * previously supplied in the Aave protocol.\\n   * @dev Emits the `Withdraw()` event.\\n   * @dev If the user withdraws everything, `ReserveUsedAsCollateralDisabled()` is emitted.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the withdraw function\\n   * @return The actual amount withdrawn\\n   */\\n  function executeWithdraw(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteWithdrawParams memory params\\n  ) external returns (uint256) {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    uint256 userBalance = IAToken(reserveCache.aTokenAddress).scaledBalanceOf(msg.sender).rayMul(\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    uint256 amountToWithdraw = params.amount;\\n\\n    if (params.amount == type(uint256).max) {\\n      amountToWithdraw = userBalance;\\n    }\\n\\n    ValidationLogic.validateWithdraw(reserveCache, amountToWithdraw, userBalance);\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, 0, amountToWithdraw);\\n\\n    bool isCollateral = userConfig.isUsingAsCollateral(reserve.id);\\n\\n    if (isCollateral && amountToWithdraw == userBalance) {\\n      userConfig.setUsingAsCollateral(reserve.id, false);\\n      emit ReserveUsedAsCollateralDisabled(params.asset, msg.sender);\\n    }\\n\\n    IAToken(reserveCache.aTokenAddress).burn(\\n      msg.sender,\\n      params.to,\\n      amountToWithdraw,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isCollateral && userConfig.isBorrowingAny()) {\\n      ValidationLogic.validateHFAndLtv(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        params.asset,\\n        msg.sender,\\n        params.reservesCount,\\n        params.oracle,\\n        params.userEModeCategory\\n      );\\n    }\\n\\n    emit Withdraw(params.asset, msg.sender, params.to, amountToWithdraw);\\n\\n    return amountToWithdraw;\\n  }\\n\\n  /**\\n   * @notice Validates a transfer of aTokens. The sender is subjected to health factor validation to avoid\\n   * collateralization constraints violation.\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled()` event for the `to` account, if the asset is being activated as\\n   * collateral.\\n   * @dev In case the `from` user transfers everything, `ReserveUsedAsCollateralDisabled()` is emitted for `from`.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the finalizeTransfer function\\n   */\\n  function executeFinalizeTransfer(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    DataTypes.FinalizeTransferParams memory params\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n\\n    ValidationLogic.validateTransfer(reserve);\\n\\n    uint256 reserveId = reserve.id;\\n\\n    if (params.from != params.to && params.amount != 0) {\\n      DataTypes.UserConfigurationMap storage fromConfig = usersConfig[params.from];\\n\\n      if (fromConfig.isUsingAsCollateral(reserveId)) {\\n        if (fromConfig.isBorrowingAny()) {\\n          ValidationLogic.validateHFAndLtv(\\n            reservesData,\\n            reservesList,\\n            eModeCategories,\\n            usersConfig[params.from],\\n            params.asset,\\n            params.from,\\n            params.reservesCount,\\n            params.oracle,\\n            params.fromEModeCategory\\n          );\\n        }\\n        if (params.balanceFromBefore == params.amount) {\\n          fromConfig.setUsingAsCollateral(reserveId, false);\\n          emit ReserveUsedAsCollateralDisabled(params.asset, params.from);\\n        }\\n      }\\n\\n      if (params.balanceToBefore == 0) {\\n        DataTypes.UserConfigurationMap storage toConfig = usersConfig[params.to];\\n        if (\\n          ValidationLogic.validateAutomaticUseAsCollateral(\\n            reservesData,\\n            reservesList,\\n            toConfig,\\n            reserve.configuration,\\n            reserve.aTokenAddress\\n          )\\n        ) {\\n          toConfig.setUsingAsCollateral(reserveId, true);\\n          emit ReserveUsedAsCollateralEnabled(params.asset, params.to);\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes the 'set as collateral' feature. A user can choose to activate or deactivate an asset as\\n   * collateral at any point in time. Deactivating an asset as collateral is subjected to the usual health factor\\n   * checks to ensure collateralization.\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled()` event if the asset can be activated as collateral.\\n   * @dev In case the asset is being deactivated as collateral, `ReserveUsedAsCollateralDisabled()` is emitted.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param asset The address of the asset being configured as collateral\\n   * @param useAsCollateral True if the user wants to set the asset as collateral, false otherwise\\n   * @param reservesCount The number of initialized reserves\\n   * @param priceOracle The address of the price oracle\\n   * @param userEModeCategory The eMode category chosen by the user\\n   */\\n  function executeUseReserveAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    bool useAsCollateral,\\n    uint256 reservesCount,\\n    address priceOracle,\\n    uint8 userEModeCategory\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    uint256 userBalance = IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender);\\n\\n    ValidationLogic.validateSetUseReserveAsCollateral(reserveCache, userBalance);\\n\\n    if (useAsCollateral == userConfig.isUsingAsCollateral(reserve.id)) return;\\n\\n    if (useAsCollateral) {\\n      require(\\n        ValidationLogic.validateUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration\\n        ),\\n        Errors.USER_IN_ISOLATION_MODE_OR_LTV_ZERO\\n      );\\n\\n      userConfig.setUsingAsCollateral(reserve.id, true);\\n      emit ReserveUsedAsCollateralEnabled(asset, msg.sender);\\n    } else {\\n      userConfig.setUsingAsCollateral(reserve.id, false);\\n      ValidationLogic.validateHFAndLtv(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        asset,\\n        msg.sender,\\n        reservesCount,\\n        priceOracle,\\n        userEModeCategory\\n      );\\n\\n      emit ReserveUsedAsCollateralDisabled(asset, msg.sender);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xff4b3ad4e13b9b7df4158d33ee6b63370e4137be02e043827c4244432cf38588\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/pool/Pool.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\\nimport {PoolLogic} from '../libraries/logic/PoolLogic.sol';\\nimport {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';\\nimport {EModeLogic} from '../libraries/logic/EModeLogic.sol';\\nimport {SupplyLogic} from '../libraries/logic/SupplyLogic.sol';\\nimport {FlashLoanLogic} from '../libraries/logic/FlashLoanLogic.sol';\\nimport {BorrowLogic} from '../libraries/logic/BorrowLogic.sol';\\nimport {LiquidationLogic} from '../libraries/logic/LiquidationLogic.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\nimport {BridgeLogic} from '../libraries/logic/BridgeLogic.sol';\\nimport {IERC20WithPermit} from '../../interfaces/IERC20WithPermit.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../interfaces/IACLManager.sol';\\nimport {PoolStorage} from './PoolStorage.sol';\\n\\n/**\\n * @title Pool contract\\n * @author Aave\\n * @notice Main point of interaction with an Aave protocol's market\\n * - Users can:\\n *   # Supply\\n *   # Withdraw\\n *   # Borrow\\n *   # Repay\\n *   # Swap their loans between variable and stable rate\\n *   # Enable/disable their supplied assets as collateral rebalance stable rate borrow positions\\n *   # Liquidate positions\\n *   # Execute Flash Loans\\n * @dev To be covered by a proxy contract, owned by the PoolAddressesProvider of the specific market\\n * @dev All admin functions are callable by the PoolConfigurator contract defined also in the\\n *   PoolAddressesProvider\\n */\\ncontract Pool is VersionedInitializable, PoolStorage, IPool {\\n  using ReserveLogic for DataTypes.ReserveData;\\n\\n  uint256 public constant POOL_REVISION = 0x1;\\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\\n\\n  /**\\n   * @dev Only pool configurator can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolConfigurator() {\\n    _onlyPoolConfigurator();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    _onlyPoolAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only bridge can call functions marked by this modifier.\\n   */\\n  modifier onlyBridge() {\\n    _onlyBridge();\\n    _;\\n  }\\n\\n  function _onlyPoolConfigurator() internal view virtual {\\n    require(\\n      ADDRESSES_PROVIDER.getPoolConfigurator() == msg.sender,\\n      Errors.CALLER_NOT_POOL_CONFIGURATOR\\n    );\\n  }\\n\\n  function _onlyPoolAdmin() internal view virtual {\\n    require(\\n      IACLManager(ADDRESSES_PROVIDER.getACLManager()).isPoolAdmin(msg.sender),\\n      Errors.CALLER_NOT_POOL_ADMIN\\n    );\\n  }\\n\\n  function _onlyBridge() internal view virtual {\\n    require(\\n      IACLManager(ADDRESSES_PROVIDER.getACLManager()).isBridge(msg.sender),\\n      Errors.CALLER_NOT_BRIDGE\\n    );\\n  }\\n\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return POOL_REVISION;\\n  }\\n\\n  /**\\n   * @dev Constructor.\\n   * @param provider The address of the PoolAddressesProvider contract\\n   */\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n  }\\n\\n  /**\\n   * @notice Initializes the Pool.\\n   * @dev Function is invoked by the proxy contract when the Pool contract is added to the\\n   * PoolAddressesProvider of the market.\\n   * @dev Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations\\n   * @param provider The address of the PoolAddressesProvider\\n   */\\n  function initialize(IPoolAddressesProvider provider) external virtual initializer {\\n    require(provider == ADDRESSES_PROVIDER, Errors.INVALID_ADDRESSES_PROVIDER);\\n    _maxStableRateBorrowSizePercent = 0.25e4;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external virtual override onlyBridge {\\n    BridgeLogic.executeMintUnbacked(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      asset,\\n      amount,\\n      onBehalfOf,\\n      referralCode\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function backUnbacked(\\n    address asset,\\n    uint256 amount,\\n    uint256 fee\\n  ) external virtual override onlyBridge returns (uint256) {\\n    return\\n      BridgeLogic.executeBackUnbacked(_reserves[asset], asset, amount, fee, _bridgeProtocolFee);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function supply(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) public virtual override {\\n    SupplyLogic.executeSupply(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteSupplyParams({\\n        asset: asset,\\n        amount: amount,\\n        onBehalfOf: onBehalfOf,\\n        referralCode: referralCode\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) public virtual override {\\n    IERC20WithPermit(asset).permit(\\n      msg.sender,\\n      address(this),\\n      amount,\\n      deadline,\\n      permitV,\\n      permitR,\\n      permitS\\n    );\\n    SupplyLogic.executeSupply(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteSupplyParams({\\n        asset: asset,\\n        amount: amount,\\n        onBehalfOf: onBehalfOf,\\n        referralCode: referralCode\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function withdraw(\\n    address asset,\\n    uint256 amount,\\n    address to\\n  ) public virtual override returns (uint256) {\\n    return\\n      SupplyLogic.executeWithdraw(\\n        _reserves,\\n        _reservesList,\\n        _eModeCategories,\\n        _usersConfig[msg.sender],\\n        DataTypes.ExecuteWithdrawParams({\\n          asset: asset,\\n          amount: amount,\\n          to: to,\\n          reservesCount: _reservesCount,\\n          oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n          userEModeCategory: _usersEModeCategory[msg.sender]\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) public virtual override {\\n    BorrowLogic.executeBorrow(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteBorrowParams({\\n        asset: asset,\\n        user: msg.sender,\\n        onBehalfOf: onBehalfOf,\\n        amount: amount,\\n        interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n        referralCode: referralCode,\\n        releaseUnderlying: true,\\n        maxStableRateBorrowSizePercent: _maxStableRateBorrowSizePercent,\\n        reservesCount: _reservesCount,\\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        userEModeCategory: _usersEModeCategory[onBehalfOf],\\n        priceOracleSentinel: ADDRESSES_PROVIDER.getPriceOracleSentinel()\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) public virtual override returns (uint256) {\\n    return\\n      BorrowLogic.executeRepay(\\n        _reserves,\\n        _reservesList,\\n        _usersConfig[onBehalfOf],\\n        DataTypes.ExecuteRepayParams({\\n          asset: asset,\\n          amount: amount,\\n          interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n          onBehalfOf: onBehalfOf,\\n          useATokens: false\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) public virtual override returns (uint256) {\\n    {\\n      IERC20WithPermit(asset).permit(\\n        msg.sender,\\n        address(this),\\n        amount,\\n        deadline,\\n        permitV,\\n        permitR,\\n        permitS\\n      );\\n    }\\n    {\\n      DataTypes.ExecuteRepayParams memory params = DataTypes.ExecuteRepayParams({\\n        asset: asset,\\n        amount: amount,\\n        interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n        onBehalfOf: onBehalfOf,\\n        useATokens: false\\n      });\\n      return BorrowLogic.executeRepay(_reserves, _reservesList, _usersConfig[onBehalfOf], params);\\n    }\\n  }\\n\\n  /// @inheritdoc IPool\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) public virtual override returns (uint256) {\\n    return\\n      BorrowLogic.executeRepay(\\n        _reserves,\\n        _reservesList,\\n        _usersConfig[msg.sender],\\n        DataTypes.ExecuteRepayParams({\\n          asset: asset,\\n          amount: amount,\\n          interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n          onBehalfOf: msg.sender,\\n          useATokens: true\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) public virtual override {\\n    BorrowLogic.executeSwapBorrowRateMode(\\n      _reserves[asset],\\n      _usersConfig[msg.sender],\\n      asset,\\n      DataTypes.InterestRateMode(interestRateMode)\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function rebalanceStableBorrowRate(address asset, address user) public virtual override {\\n    BorrowLogic.executeRebalanceStableBorrowRate(_reserves[asset], asset, user);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setUserUseReserveAsCollateral(\\n    address asset,\\n    bool useAsCollateral\\n  ) public virtual override {\\n    SupplyLogic.executeUseReserveAsCollateral(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig[msg.sender],\\n      asset,\\n      useAsCollateral,\\n      _reservesCount,\\n      ADDRESSES_PROVIDER.getPriceOracle(),\\n      _usersEModeCategory[msg.sender]\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) public virtual override {\\n    LiquidationLogic.executeLiquidationCall(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig,\\n      _eModeCategories,\\n      DataTypes.ExecuteLiquidationCallParams({\\n        reservesCount: _reservesCount,\\n        debtToCover: debtToCover,\\n        collateralAsset: collateralAsset,\\n        debtAsset: debtAsset,\\n        user: user,\\n        receiveAToken: receiveAToken,\\n        priceOracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        userEModeCategory: _usersEModeCategory[user],\\n        priceOracleSentinel: ADDRESSES_PROVIDER.getPriceOracleSentinel()\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) public virtual override {\\n    DataTypes.FlashloanParams memory flashParams = DataTypes.FlashloanParams({\\n      receiverAddress: receiverAddress,\\n      assets: assets,\\n      amounts: amounts,\\n      interestRateModes: interestRateModes,\\n      onBehalfOf: onBehalfOf,\\n      params: params,\\n      referralCode: referralCode,\\n      flashLoanPremiumToProtocol: _flashLoanPremiumToProtocol,\\n      flashLoanPremiumTotal: _flashLoanPremiumTotal,\\n      maxStableRateBorrowSizePercent: _maxStableRateBorrowSizePercent,\\n      reservesCount: _reservesCount,\\n      addressesProvider: address(ADDRESSES_PROVIDER),\\n      userEModeCategory: _usersEModeCategory[onBehalfOf],\\n      isAuthorizedFlashBorrower: IACLManager(ADDRESSES_PROVIDER.getACLManager()).isFlashBorrower(\\n        msg.sender\\n      )\\n    });\\n\\n    FlashLoanLogic.executeFlashLoan(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig[onBehalfOf],\\n      flashParams\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) public virtual override {\\n    DataTypes.FlashloanSimpleParams memory flashParams = DataTypes.FlashloanSimpleParams({\\n      receiverAddress: receiverAddress,\\n      asset: asset,\\n      amount: amount,\\n      params: params,\\n      referralCode: referralCode,\\n      flashLoanPremiumToProtocol: _flashLoanPremiumToProtocol,\\n      flashLoanPremiumTotal: _flashLoanPremiumTotal\\n    });\\n    FlashLoanLogic.executeFlashLoanSimple(_reserves[asset], flashParams);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function mintToTreasury(address[] calldata assets) external virtual override {\\n    PoolLogic.executeMintToTreasury(_reserves, assets);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveData(\\n    address asset\\n  ) external view virtual override returns (DataTypes.ReserveData memory) {\\n    return _reserves[asset];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    virtual\\n    override\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    )\\n  {\\n    return\\n      PoolLogic.executeGetUserAccountData(\\n        _reserves,\\n        _reservesList,\\n        _eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: _usersConfig[user],\\n          reservesCount: _reservesCount,\\n          user: user,\\n          oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n          userEModeCategory: _usersEModeCategory[user]\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getConfiguration(\\n    address asset\\n  ) external view virtual override returns (DataTypes.ReserveConfigurationMap memory) {\\n    return _reserves[asset].configuration;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getUserConfiguration(\\n    address user\\n  ) external view virtual override returns (DataTypes.UserConfigurationMap memory) {\\n    return _usersConfig[user];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveNormalizedIncome(\\n    address asset\\n  ) external view virtual override returns (uint256) {\\n    return _reserves[asset].getNormalizedIncome();\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveNormalizedVariableDebt(\\n    address asset\\n  ) external view virtual override returns (uint256) {\\n    return _reserves[asset].getNormalizedDebt();\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReservesList() external view virtual override returns (address[] memory) {\\n    uint256 reservesListCount = _reservesCount;\\n    uint256 droppedReservesCount = 0;\\n    address[] memory reservesList = new address[](reservesListCount);\\n\\n    for (uint256 i = 0; i < reservesListCount; i++) {\\n      if (_reservesList[i] != address(0)) {\\n        reservesList[i - droppedReservesCount] = _reservesList[i];\\n      } else {\\n        droppedReservesCount++;\\n      }\\n    }\\n\\n    // Reduces the length of the reserves array by `droppedReservesCount`\\n    assembly {\\n      mstore(reservesList, sub(reservesListCount, droppedReservesCount))\\n    }\\n    return reservesList;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveAddressById(uint16 id) external view returns (address) {\\n    return _reservesList[id];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() public view virtual override returns (uint256) {\\n    return _maxStableRateBorrowSizePercent;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function BRIDGE_PROTOCOL_FEE() public view virtual override returns (uint256) {\\n    return _bridgeProtocolFee;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function FLASHLOAN_PREMIUM_TOTAL() public view virtual override returns (uint128) {\\n    return _flashLoanPremiumTotal;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() public view virtual override returns (uint128) {\\n    return _flashLoanPremiumToProtocol;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function MAX_NUMBER_RESERVES() public view virtual override returns (uint16) {\\n    return ReserveConfiguration.MAX_RESERVES_COUNT;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external virtual override {\\n    require(msg.sender == _reserves[asset].aTokenAddress, Errors.CALLER_NOT_ATOKEN);\\n    SupplyLogic.executeFinalizeTransfer(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig,\\n      DataTypes.FinalizeTransferParams({\\n        asset: asset,\\n        from: from,\\n        to: to,\\n        amount: amount,\\n        balanceFromBefore: balanceFromBefore,\\n        balanceToBefore: balanceToBefore,\\n        reservesCount: _reservesCount,\\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        fromEModeCategory: _usersEModeCategory[from]\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external virtual override onlyPoolConfigurator {\\n    if (\\n      PoolLogic.executeInitReserve(\\n        _reserves,\\n        _reservesList,\\n        DataTypes.InitReserveParams({\\n          asset: asset,\\n          aTokenAddress: aTokenAddress,\\n          stableDebtAddress: stableDebtAddress,\\n          variableDebtAddress: variableDebtAddress,\\n          interestRateStrategyAddress: interestRateStrategyAddress,\\n          reservesCount: _reservesCount,\\n          maxNumberReserves: MAX_NUMBER_RESERVES()\\n        })\\n      )\\n    ) {\\n      _reservesCount++;\\n    }\\n  }\\n\\n  /// @inheritdoc IPool\\n  function dropReserve(address asset) external virtual override onlyPoolConfigurator {\\n    PoolLogic.executeDropReserve(_reserves, _reservesList, asset);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external virtual override onlyPoolConfigurator {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(_reserves[asset].id != 0 || _reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    _reserves[asset].interestRateStrategyAddress = rateStrategyAddress;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external virtual override onlyPoolConfigurator {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(_reserves[asset].id != 0 || _reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    _reserves[asset].configuration = configuration;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function updateBridgeProtocolFee(\\n    uint256 protocolFee\\n  ) external virtual override onlyPoolConfigurator {\\n    _bridgeProtocolFee = protocolFee;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external virtual override onlyPoolConfigurator {\\n    _flashLoanPremiumTotal = flashLoanPremiumTotal;\\n    _flashLoanPremiumToProtocol = flashLoanPremiumToProtocol;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function configureEModeCategory(\\n    uint8 id,\\n    DataTypes.EModeCategory memory category\\n  ) external virtual override onlyPoolConfigurator {\\n    // category 0 is reserved for volatile heterogeneous assets and it's always disabled\\n    require(id != 0, Errors.EMODE_CATEGORY_RESERVED);\\n    _eModeCategories[id] = category;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getEModeCategoryData(\\n    uint8 id\\n  ) external view virtual override returns (DataTypes.EModeCategory memory) {\\n    return _eModeCategories[id];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setUserEMode(uint8 categoryId) external virtual override {\\n    EModeLogic.executeSetUserEMode(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersEModeCategory,\\n      _usersConfig[msg.sender],\\n      DataTypes.ExecuteSetUserEModeParams({\\n        reservesCount: _reservesCount,\\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        categoryId: categoryId\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getUserEMode(address user) external view virtual override returns (uint256) {\\n    return _usersEModeCategory[user];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function resetIsolationModeTotalDebt(\\n    address asset\\n  ) external virtual override onlyPoolConfigurator {\\n    PoolLogic.executeResetIsolationModeTotalDebt(_reserves, asset);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function rescueTokens(\\n    address token,\\n    address to,\\n    uint256 amount\\n  ) external virtual override onlyPoolAdmin {\\n    PoolLogic.executeRescueTokens(token, to, amount);\\n  }\\n\\n  /// @inheritdoc IPool\\n  /// @dev Deprecated: maintained for compatibility purposes\\n  function deposit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external virtual override {\\n    SupplyLogic.executeSupply(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteSupplyParams({\\n        asset: asset,\\n        amount: amount,\\n        onBehalfOf: onBehalfOf,\\n        referralCode: referralCode\\n      })\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x3eeaa96fc9df64e0f7e85e48849549957d528ed005ebce43de9c277d662b1d37\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\\nimport {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\n\\n/**\\n * @title PoolStorage\\n * @author Aave\\n * @notice Contract used as storage of the Pool contract.\\n * @dev It defines the storage layout of the Pool contract.\\n */\\ncontract PoolStorage {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  // Map of reserves and their data (underlyingAssetOfReserve => reserveData)\\n  mapping(address => DataTypes.ReserveData) internal _reserves;\\n\\n  // Map of users address and their configuration data (userAddress => userConfiguration)\\n  mapping(address => DataTypes.UserConfigurationMap) internal _usersConfig;\\n\\n  // List of reserves as a map (reserveId => reserve).\\n  // It is structured as a mapping for gas savings reasons, using the reserve id as index\\n  mapping(uint256 => address) internal _reservesList;\\n\\n  // List of eMode categories as a map (eModeCategoryId => eModeCategory).\\n  // It is structured as a mapping for gas savings reasons, using the eModeCategoryId as index\\n  mapping(uint8 => DataTypes.EModeCategory) internal _eModeCategories;\\n\\n  // Map of users address and their eMode category (userAddress => eModeCategoryId)\\n  mapping(address => uint8) internal _usersEModeCategory;\\n\\n  // Fee of the protocol bridge, expressed in bps\\n  uint256 internal _bridgeProtocolFee;\\n\\n  // Total FlashLoan Premium, expressed in bps\\n  uint128 internal _flashLoanPremiumTotal;\\n\\n  // FlashLoan premium paid to protocol treasury, expressed in bps\\n  uint128 internal _flashLoanPremiumToProtocol;\\n\\n  // Available liquidity that can be borrowed at once at stable rate, expressed in bps\\n  uint64 internal _maxStableRateBorrowSizePercent;\\n\\n  // Maximum number of active reserves there have been in the protocol. It is the upper bound of the reserves list\\n  uint16 internal _reservesCount;\\n}\\n\",\"keccak256\":\"0xb67317c6e6e5a5c776d404b5675555b8e2141187dcacca63d15eb77ba50e8d03\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":10499,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":10502,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":10572,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":25306,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"_reserves","offset":0,"slot":"52","type":"t_mapping(t_address,t_struct(ReserveData)21315_storage)"},{"astId":25311,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"_usersConfig","offset":0,"slot":"53","type":"t_mapping(t_address,t_struct(UserConfigurationMap)21322_storage)"},{"astId":25315,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"_reservesList","offset":0,"slot":"54","type":"t_mapping(t_uint256,t_address)"},{"astId":25320,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"_eModeCategories","offset":0,"slot":"55","type":"t_mapping(t_uint8,t_struct(EModeCategory)21333_storage)"},{"astId":25324,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"_usersEModeCategory","offset":0,"slot":"56","type":"t_mapping(t_address,t_uint8)"},{"astId":25326,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"_bridgeProtocolFee","offset":0,"slot":"57","type":"t_uint256"},{"astId":25328,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"_flashLoanPremiumTotal","offset":0,"slot":"58","type":"t_uint128"},{"astId":25330,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"_flashLoanPremiumToProtocol","offset":16,"slot":"58","type":"t_uint128"},{"astId":25332,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"_maxStableRateBorrowSizePercent","offset":0,"slot":"59","type":"t_uint64"},{"astId":25334,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"_reservesCount","offset":8,"slot":"59","type":"t_uint16"},{"astId":7761,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"_maxNumberOfReserves","offset":10,"slot":"59","type":"t_uint16"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_mapping(t_address,t_struct(ReserveData)21315_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct DataTypes.ReserveData)","numberOfBytes":"32","value":"t_struct(ReserveData)21315_storage"},"t_mapping(t_address,t_struct(UserConfigurationMap)21322_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct DataTypes.UserConfigurationMap)","numberOfBytes":"32","value":"t_struct(UserConfigurationMap)21322_storage"},"t_mapping(t_address,t_uint8)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint8)","numberOfBytes":"32","value":"t_uint8"},"t_mapping(t_uint256,t_address)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_uint8,t_struct(EModeCategory)21333_storage)":{"encoding":"mapping","key":"t_uint8","label":"mapping(uint8 => struct DataTypes.EModeCategory)","numberOfBytes":"32","value":"t_struct(EModeCategory)21333_storage"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(EModeCategory)21333_storage":{"encoding":"inplace","label":"struct DataTypes.EModeCategory","members":[{"astId":21324,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"ltv","offset":0,"slot":"0","type":"t_uint16"},{"astId":21326,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"liquidationThreshold","offset":2,"slot":"0","type":"t_uint16"},{"astId":21328,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"liquidationBonus","offset":4,"slot":"0","type":"t_uint16"},{"astId":21330,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"priceSource","offset":6,"slot":"0","type":"t_address"},{"astId":21332,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"label","offset":0,"slot":"1","type":"t_string_storage"}],"numberOfBytes":"64"},"t_struct(ReserveConfigurationMap)21318_storage":{"encoding":"inplace","label":"struct DataTypes.ReserveConfigurationMap","members":[{"astId":21317,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"data","offset":0,"slot":"0","type":"t_uint256"}],"numberOfBytes":"32"},"t_struct(ReserveData)21315_storage":{"encoding":"inplace","label":"struct DataTypes.ReserveData","members":[{"astId":21286,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"configuration","offset":0,"slot":"0","type":"t_struct(ReserveConfigurationMap)21318_storage"},{"astId":21288,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"liquidityIndex","offset":0,"slot":"1","type":"t_uint128"},{"astId":21290,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"currentLiquidityRate","offset":16,"slot":"1","type":"t_uint128"},{"astId":21292,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"variableBorrowIndex","offset":0,"slot":"2","type":"t_uint128"},{"astId":21294,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"currentVariableBorrowRate","offset":16,"slot":"2","type":"t_uint128"},{"astId":21296,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"currentStableBorrowRate","offset":0,"slot":"3","type":"t_uint128"},{"astId":21298,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"lastUpdateTimestamp","offset":16,"slot":"3","type":"t_uint40"},{"astId":21300,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"id","offset":21,"slot":"3","type":"t_uint16"},{"astId":21302,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"aTokenAddress","offset":0,"slot":"4","type":"t_address"},{"astId":21304,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"stableDebtTokenAddress","offset":0,"slot":"5","type":"t_address"},{"astId":21306,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"variableDebtTokenAddress","offset":0,"slot":"6","type":"t_address"},{"astId":21308,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"interestRateStrategyAddress","offset":0,"slot":"7","type":"t_address"},{"astId":21310,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"accruedToTreasury","offset":0,"slot":"8","type":"t_uint128"},{"astId":21312,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"unbacked","offset":16,"slot":"8","type":"t_uint128"},{"astId":21314,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"isolationModeTotalDebt","offset":0,"slot":"9","type":"t_uint128"}],"numberOfBytes":"320"},"t_struct(UserConfigurationMap)21322_storage":{"encoding":"inplace","label":"struct DataTypes.UserConfigurationMap","members":[{"astId":21321,"contract":"@aave/core-v3/contracts/mocks/helpers/MockPool.sol:MockPoolInherited","label":"data","offset":0,"slot":"0","type":"t_uint256"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint16":{"encoding":"inplace","label":"uint16","numberOfBytes":"2"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint40":{"encoding":"inplace","label":"uint40","numberOfBytes":"5"},"t_uint64":{"encoding":"inplace","label":"uint64","numberOfBytes":"8"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the PoolAddressesProvider connected to this contract"},"BRIDGE_PROTOCOL_FEE()":{"notice":"Returns the part of the bridge fees sent to protocol"},"FLASHLOAN_PREMIUM_TOTAL()":{"notice":"Returns the total fee on flash loans"},"FLASHLOAN_PREMIUM_TO_PROTOCOL()":{"notice":"Returns the part of the flashloan fees sent to protocol"},"MAX_NUMBER_RESERVES()":{"notice":"Returns the maximum number of reserves supported to be listed in this Pool"},"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":{"notice":"Returns the percentage of available liquidity that can be borrowed at once at stable rate"},"backUnbacked(address,uint256,uint256)":{"notice":"Back the current unbacked underlying with `amount` and pay `fee`."},"borrow(address,uint256,uint256,uint16,address)":{"notice":"Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower already supplied enough collateral, or he was given enough allowance by a credit delegator on the corresponding debt token (StableDebtToken or VariableDebtToken) - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet   and 100 stable/variable debt tokens, depending on the `interestRateMode`"},"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":{"notice":"Configures a new category for the eMode."},"deposit(address,uint256,address,uint16)":{"notice":"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC"},"dropReserve(address)":{"notice":"Drop a reserve"},"finalizeTransfer(address,address,address,uint256,uint256,uint256)":{"notice":"Validates and finalizes an aToken transfer"},"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":{"notice":"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned."},"flashLoanSimple(address,address,uint256,bytes,uint16)":{"notice":"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned."},"getConfiguration(address)":{"notice":"Returns the configuration of the reserve"},"getEModeCategoryData(uint8)":{"notice":"Returns the data of an eMode category"},"getReserveAddressById(uint16)":{"notice":"Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct"},"getReserveData(address)":{"notice":"Returns the state and configuration of the reserve"},"getReserveNormalizedIncome(address)":{"notice":"Returns the normalized income of the reserve"},"getReserveNormalizedVariableDebt(address)":{"notice":"Returns the normalized variable debt per unit of asset"},"getReservesList()":{"notice":"Returns the list of the underlying assets of all the initialized reserves"},"getUserAccountData(address)":{"notice":"Returns the user account data across all the reserves"},"getUserConfiguration(address)":{"notice":"Returns the configuration of the user across all the reserves"},"getUserEMode(address)":{"notice":"Returns the eMode the user is using"},"initReserve(address,address,address,address,address)":{"notice":"Initializes a reserve, activating it, assigning an aToken and debt tokens and an interest rate strategy"},"initialize(address)":{"notice":"Initializes the Pool."},"liquidationCall(address,address,address,uint256,bool)":{"notice":"Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1 - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk"},"mintToTreasury(address[])":{"notice":"Mints the assets accrued through the reserve factor to the treasury in the form of aTokens"},"mintUnbacked(address,uint256,address,uint16)":{"notice":"Mints an `amount` of aTokens to the `onBehalfOf`"},"rebalanceStableBorrowRate(address,address)":{"notice":"Rebalances the stable interest rate of a user to the current stable rate defined on the reserve. - Users can be rebalanced if the following conditions are satisfied:     1. Usage ratio is above 95%     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too        much has been borrowed at a stable rate and suppliers are not earning enough"},"repay(address,uint256,uint256,address)":{"notice":"Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address"},"repayWithATokens(address,uint256,uint256)":{"notice":"Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the equivalent debt tokens - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens"},"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":{"notice":"Repay with transfer approval of asset to be repaid done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713"},"rescueTokens(address,address,uint256)":{"notice":"Rescue and transfer tokens locked in this contract"},"resetIsolationModeTotalDebt(address)":{"notice":"Resets the isolation mode total debt of the given asset to zero"},"setConfiguration(address,(uint256))":{"notice":"Sets the configuration bitmap of the reserve as a whole"},"setReserveInterestRateStrategyAddress(address,address)":{"notice":"Updates the address of the interest rate strategy contract"},"setUserEMode(uint8)":{"notice":"Allows a user to use the protocol in eMode"},"setUserUseReserveAsCollateral(address,bool)":{"notice":"Allows suppliers to enable/disable a specific supplied asset as collateral"},"supply(address,uint256,address,uint16)":{"notice":"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC"},"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":{"notice":"Supply with transfer approval of asset to be supplied done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713"},"swapBorrowRateMode(address,uint256)":{"notice":"Allows a borrower to swap his debt between stable and variable mode, or vice versa"},"updateBridgeProtocolFee(uint256)":{"notice":"Updates the protocol fee on the bridging"},"updateFlashloanPremiums(uint128,uint128)":{"notice":"Updates flash loan premiums. Flash loan premium consists of two parts: - A part is sent to aToken holders as extra, one time accumulated interest - A part is collected by the protocol treasury"},"withdraw(address,uint256,address)":{"notice":"Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC"}},"version":1}}},"@aave/core-v3/contracts/mocks/helpers/MockReserveConfiguration.sol":{"MockReserveConfiguration":{"abi":[{"inputs":[],"name":"configuration","outputs":[{"internalType":"uint256","name":"data","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBorrowCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBorrowingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCaps","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEModeCategory","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFlags","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFlashLoanEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidationBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidationProtocolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidationThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLtv","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getParams","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserveFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStableRateBorrowingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSupplyCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnbackedMintCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"borrowCap","type":"uint256"}],"name":"setBorrowCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBorrowingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"decimals","type":"uint256"}],"name":"setDecimals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"categoryId","type":"uint256"}],"name":"setEModeCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setFlashLoanEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"frozen","type":"bool"}],"name":"setFrozen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bonus","type":"uint256"}],"name":"setLiquidationBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidationProtocolFee","type":"uint256"}],"name":"setLiquidationProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"setLiquidationThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ltv","type":"uint256"}],"name":"setLtv","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reserveFactor","type":"uint256"}],"name":"setReserveFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setStableRateBorrowingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"supplyCap","type":"uint256"}],"name":"setSupplyCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"unbackedMintCap","type":"uint256"}],"name":"setUnbackedMintCap","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50611032806100206000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80638c8885c81161010f578063c37bdcec116100a2578063ead8aa0211610071578063ead8aa0214610524578063f0141d8414610545578063f1514a1a14610562578063fa573d071461057557600080fd5b8063c37bdcec146104ad578063d0b0c816146104cb578063d1c11f18146104de578063e08a28a31461050157600080fd5b8063a55102f7116100de578063a55102f714610453578063a620063514610466578063aede7b7614610479578063b6a3f59a1461049a57600080fd5b80638c8885c8146103e157806392dfb2fb146103f45780639d706d3114610407578063a37e52e31461044057600080fd5b80636c70bee9116101875780637495b353116101565780637495b3531461036157806379750bc4146103905780637e932d32146103b35780638145bd2e146103c657600080fd5b80636c70bee9146102f75780636cc7149d14610301578063717186d11461033b57806371cb13321461034e57600080fd5b80634ae9b8bc116101c35780634ae9b8bc1461026a57806359aa9e72146102885780635e615a6b146102a65780635f558e53146102db57600080fd5b80631c446983146101f5578063203618141461020a57806328842d4f1461023a578063356f235c1461024d575b600080fd5b610208610203366004610f47565b610588565b005b60408051602081019091526000549081905260741c640fffffffff165b6040519081526020015b60405180910390f35b610208610248366004610f47565b6105a9565b60408051602081019091526000549081905260a81c60ff16610227565b60408051602081019091526000549081905260101c61ffff16610227565b60408051602080820190925260005490819052901c61ffff16610227565b6102ae6105c3565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610231565b6040805160208101825260005490819052901c61ffff16610227565b6000546102279081565b61030961062c565b60408051951515865293151560208601529115159284019290925290151560608301521515608082015260a001610231565b610208610349366004610f47565b6106a7565b61020861035c366004610f60565b6106c1565b6040805160208101909152600054908190526702000000000000001615155b6040519015158152602001610231565b604080516020810190915260005490819052670400000000000000161515610380565b6102086103c1366004610f60565b6106db565b60408051602081019091526000549081905261ffff16610227565b6102086103ef366004610f47565b6106f5565b610208610402366004610f47565b61070f565b604080516020810190915260005490819052640fffffffff605082901c81169160741c1660408051928352602083019190915201610231565b61020861044e366004610f47565b610729565b610208610461366004610f60565b610743565b610208610474366004610f47565b61075d565b60408051602081019091526000549081905260501c640fffffffff16610227565b6102086104a8366004610f47565b610777565b60408051602081019091526000549081905260981c61ffff16610227565b6102086104d9366004610f47565b610791565b604080516020810190915260005490819052678000000000000000161515610380565b604080516020810190915260005490819052670800000000000000161515610380565b60408051602081019091526000549081905260b01c640fffffffff16610227565b60408051602081019091526000549081905260301c60ff16610227565b610208610570366004610f60565b6107ab565b610208610583366004610f47565b6107c5565b604080516020810190915260005481526105a281836107df565b5160005550565b604080516020810190915260005481526105a28183610889565b60008060008060008061061960006040518060200160405290816000820154815250505161ffff80821692601083901c821692602081901c831692603082901c60ff90811693604084901c9092169260a81c1690565b949b939a50919850965094509092509050565b6000806000806000610696600060405180602001604052908160008201548152505051670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b945094509450945094509091929394565b604080516020810190915260005481526105a2818361092a565b604080516020810190915260005481526105a281836109ce565b604080516020810190915260005481526105a28183610a13565b604080516020810190915260005481526105a28183610a58565b604080516020810190915260005481526105a28183610af8565b604080516020810190915260005481526105a28183610b9c565b604080516020810190915260005481526105a28183610c37565b604080516020810190915260005481526105a28183610c7c565b604080516020810190915260005481526105a28183610d1d565b604080516020810190915260005481526105a28183610dc1565b604080516020810190915260005481526105a28183610e62565b604080516020810190915260005481526105a28183610ea7565b60408051808201909152600281527f3637000000000000000000000000000000000000000000000000000000000000602082015261ffff821115610859576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b60405180910390fd5b5081517fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff1660409190911b179052565b60408051808201909152600281527f3635000000000000000000000000000000000000000000000000000000000000602082015261ffff8211156108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff1660209190911b179052565b60408051808201909152600281527f36380000000000000000000000000000000000000000000000000000000000006020820152640fffffffff82111561099e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517ffffffffffffffffffffffffffffffffffff000000000ffffffffffffffffffff1660509190911b179052565b603b816109dc5760006109df565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffff1660ff9190911690911b1790915250565b603981610a21576000610a24565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff1660ff9190911690911b1790915250565b60408051808201909152600281527f3636000000000000000000000000000000000000000000000000000000000000602082015260ff821115610ac8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff1660309190911b179052565b60408051808201909152600281527f37320000000000000000000000000000000000000000000000000000000000006020820152640fffffffff821115610b6c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517ffffffffffff000000000ffffffffffffffffffffffffffffffffffffffffffff1660b09190911b179052565b60408051808201909152600281527f3633000000000000000000000000000000000000000000000000000000000000602082015261ffff821115610c0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016179052565b603f81610c45576000610c48565b60015b83517fffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffff1660ff9190911690911b1790915250565b60408051808201909152600281527f3730000000000000000000000000000000000000000000000000000000000000602082015261ffff821115610ced576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff1660989190911b179052565b60408051808201909152600281527f36390000000000000000000000000000000000000000000000000000000000006020820152640fffffffff821115610d91576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffffffffff000000000fffffffffffffffffffffffffffff1660749190911b179052565b60408051808201909152600281527f3634000000000000000000000000000000000000000000000000000000000000602082015261ffff821115610e32576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff1660109190911b179052565b603a81610e70576000610e73565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffffffff1660ff9190911690911b1790915250565b60408051808201909152600281527f3731000000000000000000000000000000000000000000000000000000000000602082015260ff821115610f17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1660a89190911b179052565b600060208284031215610f5957600080fd5b5035919050565b600060208284031215610f7257600080fd5b81358015158114610f8257600080fd5b9392505050565b600060208083528351808285015260005b81811015610fb657858101830151858201604001528201610f9a565b81811115610fc8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212207cca2be24fead5b8b96447de27edf0668cb868675656309b424da4813995bd1764736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1032 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 0x1F0 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8C8885C8 GT PUSH2 0x10F JUMPI DUP1 PUSH4 0xC37BDCEC GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xEAD8AA02 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xEAD8AA02 EQ PUSH2 0x524 JUMPI DUP1 PUSH4 0xF0141D84 EQ PUSH2 0x545 JUMPI DUP1 PUSH4 0xF1514A1A EQ PUSH2 0x562 JUMPI DUP1 PUSH4 0xFA573D07 EQ PUSH2 0x575 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC37BDCEC EQ PUSH2 0x4AD JUMPI DUP1 PUSH4 0xD0B0C816 EQ PUSH2 0x4CB JUMPI DUP1 PUSH4 0xD1C11F18 EQ PUSH2 0x4DE JUMPI DUP1 PUSH4 0xE08A28A3 EQ PUSH2 0x501 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA55102F7 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0xA55102F7 EQ PUSH2 0x453 JUMPI DUP1 PUSH4 0xA6200635 EQ PUSH2 0x466 JUMPI DUP1 PUSH4 0xAEDE7B76 EQ PUSH2 0x479 JUMPI DUP1 PUSH4 0xB6A3F59A EQ PUSH2 0x49A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8C8885C8 EQ PUSH2 0x3E1 JUMPI DUP1 PUSH4 0x92DFB2FB EQ PUSH2 0x3F4 JUMPI DUP1 PUSH4 0x9D706D31 EQ PUSH2 0x407 JUMPI DUP1 PUSH4 0xA37E52E3 EQ PUSH2 0x440 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6C70BEE9 GT PUSH2 0x187 JUMPI DUP1 PUSH4 0x7495B353 GT PUSH2 0x156 JUMPI DUP1 PUSH4 0x7495B353 EQ PUSH2 0x361 JUMPI DUP1 PUSH4 0x79750BC4 EQ PUSH2 0x390 JUMPI DUP1 PUSH4 0x7E932D32 EQ PUSH2 0x3B3 JUMPI DUP1 PUSH4 0x8145BD2E EQ PUSH2 0x3C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6C70BEE9 EQ PUSH2 0x2F7 JUMPI DUP1 PUSH4 0x6CC7149D EQ PUSH2 0x301 JUMPI DUP1 PUSH4 0x717186D1 EQ PUSH2 0x33B JUMPI DUP1 PUSH4 0x71CB1332 EQ PUSH2 0x34E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4AE9B8BC GT PUSH2 0x1C3 JUMPI DUP1 PUSH4 0x4AE9B8BC EQ PUSH2 0x26A JUMPI DUP1 PUSH4 0x59AA9E72 EQ PUSH2 0x288 JUMPI DUP1 PUSH4 0x5E615A6B EQ PUSH2 0x2A6 JUMPI DUP1 PUSH4 0x5F558E53 EQ PUSH2 0x2DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1C446983 EQ PUSH2 0x1F5 JUMPI DUP1 PUSH4 0x20361814 EQ PUSH2 0x20A JUMPI DUP1 PUSH4 0x28842D4F EQ PUSH2 0x23A JUMPI DUP1 PUSH4 0x356F235C EQ PUSH2 0x24D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x208 PUSH2 0x203 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x588 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x74 SHR PUSH5 0xFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x208 PUSH2 0x248 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x5A9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0xA8 SHR PUSH1 0xFF AND PUSH2 0x227 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x10 SHR PUSH2 0xFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH2 0x2AE PUSH2 0x5C3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH2 0x231 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x227 SWAP1 DUP2 JUMP JUMPDEST PUSH2 0x309 PUSH2 0x62C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP6 ISZERO ISZERO DUP7 MSTORE SWAP4 ISZERO ISZERO PUSH1 0x20 DUP7 ADD MSTORE SWAP2 ISZERO ISZERO SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x60 DUP4 ADD MSTORE ISZERO ISZERO PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH2 0x231 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x349 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x6A7 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x35C CALLDATASIZE PUSH1 0x4 PUSH2 0xF60 JUMP JUMPDEST PUSH2 0x6C1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH8 0x200000000000000 AND ISZERO ISZERO JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x231 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH8 0x400000000000000 AND ISZERO ISZERO PUSH2 0x380 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x3C1 CALLDATASIZE PUSH1 0x4 PUSH2 0xF60 JUMP JUMPDEST PUSH2 0x6DB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH2 0xFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x3EF CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x6F5 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x402 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x70F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH5 0xFFFFFFFFF PUSH1 0x50 DUP3 SWAP1 SHR DUP2 AND SWAP2 PUSH1 0x74 SHR AND PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x231 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x44E CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x729 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x461 CALLDATASIZE PUSH1 0x4 PUSH2 0xF60 JUMP JUMPDEST PUSH2 0x743 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x474 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x75D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x50 SHR PUSH5 0xFFFFFFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x4A8 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x777 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x98 SHR PUSH2 0xFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x4D9 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x791 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH8 0x8000000000000000 AND ISZERO ISZERO PUSH2 0x380 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH8 0x800000000000000 AND ISZERO ISZERO PUSH2 0x380 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0xB0 SHR PUSH5 0xFFFFFFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0x227 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x570 CALLDATASIZE PUSH1 0x4 PUSH2 0xF60 JUMP JUMPDEST PUSH2 0x7AB JUMP JUMPDEST PUSH2 0x208 PUSH2 0x583 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x7C5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0x7DF JUMP JUMPDEST MLOAD PUSH1 0x0 SSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0x889 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x619 PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP MLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP3 PUSH1 0x10 DUP4 SWAP1 SHR DUP3 AND SWAP3 PUSH1 0x20 DUP2 SWAP1 SHR DUP4 AND SWAP3 PUSH1 0x30 DUP3 SWAP1 SHR PUSH1 0xFF SWAP1 DUP2 AND SWAP4 PUSH1 0x40 DUP5 SWAP1 SHR SWAP1 SWAP3 AND SWAP3 PUSH1 0xA8 SHR AND SWAP1 JUMP JUMPDEST SWAP5 SWAP12 SWAP4 SWAP11 POP SWAP2 SWAP9 POP SWAP7 POP SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x696 PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0x92A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0x9CE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xA13 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xA58 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xAF8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xB9C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xC37 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xC7C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xD1D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xDC1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xE62 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xEA7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3637000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x859 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF AND PUSH1 0x40 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3635000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x8FA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF AND PUSH1 0x20 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3638000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFF DUP3 GT ISZERO PUSH2 0x99E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF AND PUSH1 0x50 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3B DUP2 PUSH2 0x9DC JUMPI PUSH1 0x0 PUSH2 0x9DF JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x39 DUP2 PUSH2 0xA21 JUMPI PUSH1 0x0 PUSH2 0xA24 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3636000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP3 GT ISZERO PUSH2 0xAC8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF AND PUSH1 0x30 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3732000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFF DUP3 GT ISZERO PUSH2 0xB6C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xB0 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3633000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0xC0D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 AND OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3F DUP2 PUSH2 0xC45 JUMPI PUSH1 0x0 PUSH2 0xC48 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3730000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0xCED JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x98 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3639000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFF DUP3 GT ISZERO PUSH2 0xD91 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x74 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3634000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0xE32 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF AND PUSH1 0x10 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3A DUP2 PUSH2 0xE70 JUMPI PUSH1 0x0 PUSH2 0xE73 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3731000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP3 GT ISZERO PUSH2 0xF17 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xA8 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF72 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xF82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xFB6 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xF9A JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xFC8 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH29 0xCA2BE24FEAD5B8B96447DE27EDF0668CB868675656309B424DA4813995 0xBD OR PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"237:4967:56:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@configuration_7837":{"entryPoint":null,"id":7837,"parameterSlots":0,"returnSlots":0},"@getBorrowCap_11387":{"entryPoint":null,"id":11387,"parameterSlots":1,"returnSlots":1},"@getBorrowCap_8134":{"entryPoint":null,"id":8134,"parameterSlots":0,"returnSlots":1},"@getBorrowingEnabled_11233":{"entryPoint":null,"id":11233,"parameterSlots":1,"returnSlots":1},"@getBorrowingEnabled_8035":{"entryPoint":null,"id":8035,"parameterSlots":0,"returnSlots":1},"@getCaps_11856":{"entryPoint":null,"id":11856,"parameterSlots":1,"returnSlots":2},"@getCaps_8349":{"entryPoint":null,"id":8349,"parameterSlots":0,"returnSlots":2},"@getDecimals_10933":{"entryPoint":null,"id":10933,"parameterSlots":1,"returnSlots":1},"@getDecimals_7969":{"entryPoint":null,"id":7969,"parameterSlots":0,"returnSlots":1},"@getEModeCategory_11647":{"entryPoint":null,"id":11647,"parameterSlots":1,"returnSlots":1},"@getEModeCategory_8144":{"entryPoint":null,"id":8144,"parameterSlots":0,"returnSlots":1},"@getFlags_11757":{"entryPoint":null,"id":11757,"parameterSlots":1,"returnSlots":5},"@getFlags_8317":{"entryPoint":1580,"id":8317,"parameterSlots":0,"returnSlots":5},"@getFlashLoanEnabled_11697":{"entryPoint":null,"id":11697,"parameterSlots":1,"returnSlots":1},"@getFlashLoanEnabled_8200":{"entryPoint":null,"id":8200,"parameterSlots":0,"returnSlots":1},"@getFrozen_11033":{"entryPoint":null,"id":11033,"parameterSlots":1,"returnSlots":1},"@getFrozen_8002":{"entryPoint":null,"id":8002,"parameterSlots":0,"returnSlots":1},"@getLiquidationBonus_10881":{"entryPoint":null,"id":10881,"parameterSlots":1,"returnSlots":1},"@getLiquidationBonus_7903":{"entryPoint":null,"id":7903,"parameterSlots":0,"returnSlots":1},"@getLiquidationProtocolFee_11543":{"entryPoint":null,"id":11543,"parameterSlots":1,"returnSlots":1},"@getLiquidationProtocolFee_8266":{"entryPoint":null,"id":8266,"parameterSlots":0,"returnSlots":1},"@getLiquidationThreshold_10829":{"entryPoint":null,"id":10829,"parameterSlots":1,"returnSlots":1},"@getLiquidationThreshold_7936":{"entryPoint":null,"id":7936,"parameterSlots":0,"returnSlots":1},"@getLtv_10777":{"entryPoint":null,"id":10777,"parameterSlots":1,"returnSlots":1},"@getLtv_7870":{"entryPoint":null,"id":7870,"parameterSlots":0,"returnSlots":1},"@getParams_11823":{"entryPoint":null,"id":11823,"parameterSlots":1,"returnSlots":6},"@getParams_8337":{"entryPoint":1475,"id":8337,"parameterSlots":0,"returnSlots":6},"@getReserveFactor_11335":{"entryPoint":null,"id":11335,"parameterSlots":1,"returnSlots":1},"@getReserveFactor_8101":{"entryPoint":null,"id":8101,"parameterSlots":0,"returnSlots":1},"@getStableRateBorrowingEnabled_11283":{"entryPoint":null,"id":11283,"parameterSlots":1,"returnSlots":1},"@getStableRateBorrowingEnabled_8068":{"entryPoint":null,"id":8068,"parameterSlots":0,"returnSlots":1},"@getSupplyCap_11439":{"entryPoint":null,"id":11439,"parameterSlots":1,"returnSlots":1},"@getSupplyCap_8233":{"entryPoint":null,"id":8233,"parameterSlots":0,"returnSlots":1},"@getUnbackedMintCap_11595":{"entryPoint":null,"id":11595,"parameterSlots":1,"returnSlots":1},"@getUnbackedMintCap_8299":{"entryPoint":null,"id":8299,"parameterSlots":0,"returnSlots":1},"@setBorrowCap_11368":{"entryPoint":2346,"id":11368,"parameterSlots":2,"returnSlots":0},"@setBorrowCap_8124":{"entryPoint":1703,"id":8124,"parameterSlots":1,"returnSlots":0},"@setBorrowingEnabled_11214":{"entryPoint":3682,"id":11214,"parameterSlots":2,"returnSlots":0},"@setBorrowingEnabled_8025":{"entryPoint":1963,"id":8025,"parameterSlots":1,"returnSlots":0},"@setDecimals_10914":{"entryPoint":2648,"id":10914,"parameterSlots":2,"returnSlots":0},"@setDecimals_7959":{"entryPoint":1781,"id":7959,"parameterSlots":1,"returnSlots":0},"@setEModeCategory_11628":{"entryPoint":3751,"id":11628,"parameterSlots":2,"returnSlots":0},"@setEModeCategory_8167":{"entryPoint":1989,"id":8167,"parameterSlots":1,"returnSlots":0},"@setFlashLoanEnabled_11678":{"entryPoint":3127,"id":11678,"parameterSlots":2,"returnSlots":0},"@setFlashLoanEnabled_8190":{"entryPoint":1859,"id":8190,"parameterSlots":1,"returnSlots":0},"@setFrozen_11014":{"entryPoint":2579,"id":11014,"parameterSlots":2,"returnSlots":0},"@setFrozen_7992":{"entryPoint":1755,"id":7992,"parameterSlots":1,"returnSlots":0},"@setLiquidationBonus_10862":{"entryPoint":2185,"id":10862,"parameterSlots":2,"returnSlots":0},"@setLiquidationBonus_7893":{"entryPoint":1449,"id":7893,"parameterSlots":1,"returnSlots":0},"@setLiquidationProtocolFee_11524":{"entryPoint":3196,"id":11524,"parameterSlots":2,"returnSlots":0},"@setLiquidationProtocolFee_8256":{"entryPoint":1885,"id":8256,"parameterSlots":1,"returnSlots":0},"@setLiquidationThreshold_10810":{"entryPoint":3521,"id":10810,"parameterSlots":2,"returnSlots":0},"@setLiquidationThreshold_7926":{"entryPoint":1937,"id":7926,"parameterSlots":1,"returnSlots":0},"@setLtv_10761":{"entryPoint":2972,"id":10761,"parameterSlots":2,"returnSlots":0},"@setLtv_7860":{"entryPoint":1833,"id":7860,"parameterSlots":1,"returnSlots":0},"@setReserveFactor_11316":{"entryPoint":2015,"id":11316,"parameterSlots":2,"returnSlots":0},"@setReserveFactor_8091":{"entryPoint":1416,"id":8091,"parameterSlots":1,"returnSlots":0},"@setStableRateBorrowingEnabled_11264":{"entryPoint":2510,"id":11264,"parameterSlots":2,"returnSlots":0},"@setStableRateBorrowingEnabled_8058":{"entryPoint":1729,"id":8058,"parameterSlots":1,"returnSlots":0},"@setSupplyCap_11420":{"entryPoint":3357,"id":11420,"parameterSlots":2,"returnSlots":0},"@setSupplyCap_8223":{"entryPoint":1911,"id":8223,"parameterSlots":1,"returnSlots":0},"@setUnbackedMintCap_11576":{"entryPoint":2808,"id":11576,"parameterSlots":2,"returnSlots":0},"@setUnbackedMintCap_8289":{"entryPoint":1807,"id":8289,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_bool":{"entryPoint":3936,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":3911,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool_t_bool_t_bool_t_bool_t_bool__to_t_bool_t_bool_t_bool_t_bool_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":3977,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2820:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"84:110:201","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:201"},"nodeType":"YulFunctionCall","src":"132:12:201"},"nodeType":"YulExpressionStatement","src":"132:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"105:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"114:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"101:3:201"},"nodeType":"YulFunctionCall","src":"101:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"126:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"97:3:201"},"nodeType":"YulFunctionCall","src":"97:32:201"},"nodeType":"YulIf","src":"94:52:201"},{"nodeType":"YulAssignment","src":"155:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"178:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"165:12:201"},"nodeType":"YulFunctionCall","src":"165:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"155:6:201"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"50:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"61:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"73:6:201","type":""}],"src":"14:180:201"},{"body":{"nodeType":"YulBlock","src":"300:76:201","statements":[{"nodeType":"YulAssignment","src":"310:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"322:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"333:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"318:3:201"},"nodeType":"YulFunctionCall","src":"318:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"310:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"352:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"363:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"345:6:201"},"nodeType":"YulFunctionCall","src":"345:25:201"},"nodeType":"YulExpressionStatement","src":"345:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"269:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"280:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"291:4:201","type":""}],"src":"199:177:201"},{"body":{"nodeType":"YulBlock","src":"622:294:201","statements":[{"nodeType":"YulAssignment","src":"632:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"644:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"655:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"640:3:201"},"nodeType":"YulFunctionCall","src":"640:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"632:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"675:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"686:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"668:6:201"},"nodeType":"YulFunctionCall","src":"668:25:201"},"nodeType":"YulExpressionStatement","src":"668:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"713:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"724:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"709:3:201"},"nodeType":"YulFunctionCall","src":"709:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"729:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"702:6:201"},"nodeType":"YulFunctionCall","src":"702:34:201"},"nodeType":"YulExpressionStatement","src":"702:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"756:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"767:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"752:3:201"},"nodeType":"YulFunctionCall","src":"752:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"772:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"745:6:201"},"nodeType":"YulFunctionCall","src":"745:34:201"},"nodeType":"YulExpressionStatement","src":"745:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"799:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"810:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"795:3:201"},"nodeType":"YulFunctionCall","src":"795:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"815:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"788:6:201"},"nodeType":"YulFunctionCall","src":"788:34:201"},"nodeType":"YulExpressionStatement","src":"788:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"842:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"853:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"838:3:201"},"nodeType":"YulFunctionCall","src":"838:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"859:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"831:6:201"},"nodeType":"YulFunctionCall","src":"831:35:201"},"nodeType":"YulExpressionStatement","src":"831:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"886:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"897:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"882:3:201"},"nodeType":"YulFunctionCall","src":"882:19:201"},{"name":"value5","nodeType":"YulIdentifier","src":"903:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"875:6:201"},"nodeType":"YulFunctionCall","src":"875:35:201"},"nodeType":"YulExpressionStatement","src":"875:35:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"551:9:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"562:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"570:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"578:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"586:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"594:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"602:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"613:4:201","type":""}],"src":"381:535:201"},{"body":{"nodeType":"YulBlock","src":"1104:330:201","statements":[{"nodeType":"YulAssignment","src":"1114:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1126:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1137:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1122:3:201"},"nodeType":"YulFunctionCall","src":"1122:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1114:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1157:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1182:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1175:6:201"},"nodeType":"YulFunctionCall","src":"1175:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1168:6:201"},"nodeType":"YulFunctionCall","src":"1168:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1150:6:201"},"nodeType":"YulFunctionCall","src":"1150:41:201"},"nodeType":"YulExpressionStatement","src":"1150:41:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1211:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1222:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1207:3:201"},"nodeType":"YulFunctionCall","src":"1207:18:201"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"1241:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1234:6:201"},"nodeType":"YulFunctionCall","src":"1234:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1227:6:201"},"nodeType":"YulFunctionCall","src":"1227:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1200:6:201"},"nodeType":"YulFunctionCall","src":"1200:50:201"},"nodeType":"YulExpressionStatement","src":"1200:50:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1270:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1281:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1266:3:201"},"nodeType":"YulFunctionCall","src":"1266:18:201"},{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"1300:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1293:6:201"},"nodeType":"YulFunctionCall","src":"1293:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1286:6:201"},"nodeType":"YulFunctionCall","src":"1286:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1259:6:201"},"nodeType":"YulFunctionCall","src":"1259:50:201"},"nodeType":"YulExpressionStatement","src":"1259:50:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1329:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1340:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1325:3:201"},"nodeType":"YulFunctionCall","src":"1325:18:201"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"1359:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1352:6:201"},"nodeType":"YulFunctionCall","src":"1352:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1345:6:201"},"nodeType":"YulFunctionCall","src":"1345:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1318:6:201"},"nodeType":"YulFunctionCall","src":"1318:50:201"},"nodeType":"YulExpressionStatement","src":"1318:50:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1388:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1399:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1384:3:201"},"nodeType":"YulFunctionCall","src":"1384:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"1419:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1412:6:201"},"nodeType":"YulFunctionCall","src":"1412:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1405:6:201"},"nodeType":"YulFunctionCall","src":"1405:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1377:6:201"},"nodeType":"YulFunctionCall","src":"1377:51:201"},"nodeType":"YulExpressionStatement","src":"1377:51:201"}]},"name":"abi_encode_tuple_t_bool_t_bool_t_bool_t_bool_t_bool__to_t_bool_t_bool_t_bool_t_bool_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1041:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1052:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1060:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1068:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1076:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1084:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1095:4:201","type":""}],"src":"921:513:201"},{"body":{"nodeType":"YulBlock","src":"1506:206:201","statements":[{"body":{"nodeType":"YulBlock","src":"1552:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1561:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1564:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1554:6:201"},"nodeType":"YulFunctionCall","src":"1554:12:201"},"nodeType":"YulExpressionStatement","src":"1554:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1527:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1536:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1523:3:201"},"nodeType":"YulFunctionCall","src":"1523:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1548:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1519:3:201"},"nodeType":"YulFunctionCall","src":"1519:32:201"},"nodeType":"YulIf","src":"1516:52:201"},{"nodeType":"YulVariableDeclaration","src":"1577:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1603:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1590:12:201"},"nodeType":"YulFunctionCall","src":"1590:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1581:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1666:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1675:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1678:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1668:6:201"},"nodeType":"YulFunctionCall","src":"1668:12:201"},"nodeType":"YulExpressionStatement","src":"1668:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1635:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1656:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1649:6:201"},"nodeType":"YulFunctionCall","src":"1649:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1642:6:201"},"nodeType":"YulFunctionCall","src":"1642:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1632:2:201"},"nodeType":"YulFunctionCall","src":"1632:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1625:6:201"},"nodeType":"YulFunctionCall","src":"1625:40:201"},"nodeType":"YulIf","src":"1622:60:201"},{"nodeType":"YulAssignment","src":"1691:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1701:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1691:6:201"}]}]},"name":"abi_decode_tuple_t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1472:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1483:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1495:6:201","type":""}],"src":"1439:273:201"},{"body":{"nodeType":"YulBlock","src":"1812:92:201","statements":[{"nodeType":"YulAssignment","src":"1822:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1834:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1845:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1830:3:201"},"nodeType":"YulFunctionCall","src":"1830:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1822:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1864:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1889:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1882:6:201"},"nodeType":"YulFunctionCall","src":"1882:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1875:6:201"},"nodeType":"YulFunctionCall","src":"1875:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1857:6:201"},"nodeType":"YulFunctionCall","src":"1857:41:201"},"nodeType":"YulExpressionStatement","src":"1857:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1781:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1792:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1803:4:201","type":""}],"src":"1717:187:201"},{"body":{"nodeType":"YulBlock","src":"2038:119:201","statements":[{"nodeType":"YulAssignment","src":"2048:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2060:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2071:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2056:3:201"},"nodeType":"YulFunctionCall","src":"2056:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2048:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2090:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"2101:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2083:6:201"},"nodeType":"YulFunctionCall","src":"2083:25:201"},"nodeType":"YulExpressionStatement","src":"2083:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2128:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2139:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2124:3:201"},"nodeType":"YulFunctionCall","src":"2124:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"2144:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2117:6:201"},"nodeType":"YulFunctionCall","src":"2117:34:201"},"nodeType":"YulExpressionStatement","src":"2117:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1999:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2010:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2018:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2029:4:201","type":""}],"src":"1909:248:201"},{"body":{"nodeType":"YulBlock","src":"2283:535:201","statements":[{"nodeType":"YulVariableDeclaration","src":"2293:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2303:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2297:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2321:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2332:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2314:6:201"},"nodeType":"YulFunctionCall","src":"2314:21:201"},"nodeType":"YulExpressionStatement","src":"2314:21:201"},{"nodeType":"YulVariableDeclaration","src":"2344:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2364:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2358:5:201"},"nodeType":"YulFunctionCall","src":"2358:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2348:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2391:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2402:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2387:3:201"},"nodeType":"YulFunctionCall","src":"2387:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"2407:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2380:6:201"},"nodeType":"YulFunctionCall","src":"2380:34:201"},"nodeType":"YulExpressionStatement","src":"2380:34:201"},{"nodeType":"YulVariableDeclaration","src":"2423:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2432:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"2427:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2492:90:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2521:9:201"},{"name":"i","nodeType":"YulIdentifier","src":"2532:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2517:3:201"},"nodeType":"YulFunctionCall","src":"2517:17:201"},{"kind":"number","nodeType":"YulLiteral","src":"2536:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2513:3:201"},"nodeType":"YulFunctionCall","src":"2513:26:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2555:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"2563:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2551:3:201"},"nodeType":"YulFunctionCall","src":"2551:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2567:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2547:3:201"},"nodeType":"YulFunctionCall","src":"2547:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2541:5:201"},"nodeType":"YulFunctionCall","src":"2541:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2506:6:201"},"nodeType":"YulFunctionCall","src":"2506:66:201"},"nodeType":"YulExpressionStatement","src":"2506:66:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2453:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"2456:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2450:2:201"},"nodeType":"YulFunctionCall","src":"2450:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2464:19:201","statements":[{"nodeType":"YulAssignment","src":"2466:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2475:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2478:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2471:3:201"},"nodeType":"YulFunctionCall","src":"2471:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"2466:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"2446:3:201","statements":[]},"src":"2442:140:201"},{"body":{"nodeType":"YulBlock","src":"2616:66:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2645:9:201"},{"name":"length","nodeType":"YulIdentifier","src":"2656:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2641:3:201"},"nodeType":"YulFunctionCall","src":"2641:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"2665:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2637:3:201"},"nodeType":"YulFunctionCall","src":"2637:31:201"},{"kind":"number","nodeType":"YulLiteral","src":"2670:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2630:6:201"},"nodeType":"YulFunctionCall","src":"2630:42:201"},"nodeType":"YulExpressionStatement","src":"2630:42:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2597:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"2600:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2594:2:201"},"nodeType":"YulFunctionCall","src":"2594:13:201"},"nodeType":"YulIf","src":"2591:91:201"},{"nodeType":"YulAssignment","src":"2691:121:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2707:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2726:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2734:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2722:3:201"},"nodeType":"YulFunctionCall","src":"2722:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"2739:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2718:3:201"},"nodeType":"YulFunctionCall","src":"2718:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2703:3:201"},"nodeType":"YulFunctionCall","src":"2703:104:201"},{"kind":"number","nodeType":"YulLiteral","src":"2809:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2699:3:201"},"nodeType":"YulFunctionCall","src":"2699:113:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2691:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2252:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2263:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2274:4:201","type":""}],"src":"2162:656:201"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_t_bool_t_bool_t_bool_t_bool_t_bool__to_t_bool_t_bool_t_bool_t_bool_t_bool__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, iszero(iszero(value0)))\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n        mstore(add(headStart, 64), iszero(iszero(value2)))\n        mstore(add(headStart, 96), iszero(iszero(value3)))\n        mstore(add(headStart, 128), iszero(iszero(value4)))\n    }\n    function abi_decode_tuple_t_bool(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106101f05760003560e01c80638c8885c81161010f578063c37bdcec116100a2578063ead8aa0211610071578063ead8aa0214610524578063f0141d8414610545578063f1514a1a14610562578063fa573d071461057557600080fd5b8063c37bdcec146104ad578063d0b0c816146104cb578063d1c11f18146104de578063e08a28a31461050157600080fd5b8063a55102f7116100de578063a55102f714610453578063a620063514610466578063aede7b7614610479578063b6a3f59a1461049a57600080fd5b80638c8885c8146103e157806392dfb2fb146103f45780639d706d3114610407578063a37e52e31461044057600080fd5b80636c70bee9116101875780637495b353116101565780637495b3531461036157806379750bc4146103905780637e932d32146103b35780638145bd2e146103c657600080fd5b80636c70bee9146102f75780636cc7149d14610301578063717186d11461033b57806371cb13321461034e57600080fd5b80634ae9b8bc116101c35780634ae9b8bc1461026a57806359aa9e72146102885780635e615a6b146102a65780635f558e53146102db57600080fd5b80631c446983146101f5578063203618141461020a57806328842d4f1461023a578063356f235c1461024d575b600080fd5b610208610203366004610f47565b610588565b005b60408051602081019091526000549081905260741c640fffffffff165b6040519081526020015b60405180910390f35b610208610248366004610f47565b6105a9565b60408051602081019091526000549081905260a81c60ff16610227565b60408051602081019091526000549081905260101c61ffff16610227565b60408051602080820190925260005490819052901c61ffff16610227565b6102ae6105c3565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610231565b6040805160208101825260005490819052901c61ffff16610227565b6000546102279081565b61030961062c565b60408051951515865293151560208601529115159284019290925290151560608301521515608082015260a001610231565b610208610349366004610f47565b6106a7565b61020861035c366004610f60565b6106c1565b6040805160208101909152600054908190526702000000000000001615155b6040519015158152602001610231565b604080516020810190915260005490819052670400000000000000161515610380565b6102086103c1366004610f60565b6106db565b60408051602081019091526000549081905261ffff16610227565b6102086103ef366004610f47565b6106f5565b610208610402366004610f47565b61070f565b604080516020810190915260005490819052640fffffffff605082901c81169160741c1660408051928352602083019190915201610231565b61020861044e366004610f47565b610729565b610208610461366004610f60565b610743565b610208610474366004610f47565b61075d565b60408051602081019091526000549081905260501c640fffffffff16610227565b6102086104a8366004610f47565b610777565b60408051602081019091526000549081905260981c61ffff16610227565b6102086104d9366004610f47565b610791565b604080516020810190915260005490819052678000000000000000161515610380565b604080516020810190915260005490819052670800000000000000161515610380565b60408051602081019091526000549081905260b01c640fffffffff16610227565b60408051602081019091526000549081905260301c60ff16610227565b610208610570366004610f60565b6107ab565b610208610583366004610f47565b6107c5565b604080516020810190915260005481526105a281836107df565b5160005550565b604080516020810190915260005481526105a28183610889565b60008060008060008061061960006040518060200160405290816000820154815250505161ffff80821692601083901c821692602081901c831692603082901c60ff90811693604084901c9092169260a81c1690565b949b939a50919850965094509092509050565b6000806000806000610696600060405180602001604052908160008201548152505051670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b945094509450945094509091929394565b604080516020810190915260005481526105a2818361092a565b604080516020810190915260005481526105a281836109ce565b604080516020810190915260005481526105a28183610a13565b604080516020810190915260005481526105a28183610a58565b604080516020810190915260005481526105a28183610af8565b604080516020810190915260005481526105a28183610b9c565b604080516020810190915260005481526105a28183610c37565b604080516020810190915260005481526105a28183610c7c565b604080516020810190915260005481526105a28183610d1d565b604080516020810190915260005481526105a28183610dc1565b604080516020810190915260005481526105a28183610e62565b604080516020810190915260005481526105a28183610ea7565b60408051808201909152600281527f3637000000000000000000000000000000000000000000000000000000000000602082015261ffff821115610859576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b60405180910390fd5b5081517fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff1660409190911b179052565b60408051808201909152600281527f3635000000000000000000000000000000000000000000000000000000000000602082015261ffff8211156108fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff1660209190911b179052565b60408051808201909152600281527f36380000000000000000000000000000000000000000000000000000000000006020820152640fffffffff82111561099e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517ffffffffffffffffffffffffffffffffffff000000000ffffffffffffffffffff1660509190911b179052565b603b816109dc5760006109df565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffff1660ff9190911690911b1790915250565b603981610a21576000610a24565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff1660ff9190911690911b1790915250565b60408051808201909152600281527f3636000000000000000000000000000000000000000000000000000000000000602082015260ff821115610ac8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff1660309190911b179052565b60408051808201909152600281527f37320000000000000000000000000000000000000000000000000000000000006020820152640fffffffff821115610b6c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517ffffffffffff000000000ffffffffffffffffffffffffffffffffffffffffffff1660b09190911b179052565b60408051808201909152600281527f3633000000000000000000000000000000000000000000000000000000000000602082015261ffff821115610c0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016179052565b603f81610c45576000610c48565b60015b83517fffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffff1660ff9190911690911b1790915250565b60408051808201909152600281527f3730000000000000000000000000000000000000000000000000000000000000602082015261ffff821115610ced576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff1660989190911b179052565b60408051808201909152600281527f36390000000000000000000000000000000000000000000000000000000000006020820152640fffffffff821115610d91576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffffffffff000000000fffffffffffffffffffffffffffff1660749190911b179052565b60408051808201909152600281527f3634000000000000000000000000000000000000000000000000000000000000602082015261ffff821115610e32576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff1660109190911b179052565b603a81610e70576000610e73565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffffffff1660ff9190911690911b1790915250565b60408051808201909152600281527f3731000000000000000000000000000000000000000000000000000000000000602082015260ff821115610f17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108509190610f89565b5081517fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1660a89190911b179052565b600060208284031215610f5957600080fd5b5035919050565b600060208284031215610f7257600080fd5b81358015158114610f8257600080fd5b9392505050565b600060208083528351808285015260005b81811015610fb657858101830151858201604001528201610f9a565b81811115610fc8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212207cca2be24fead5b8b96447de27edf0668cb868675656309b424da4813995bd1764736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1F0 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8C8885C8 GT PUSH2 0x10F JUMPI DUP1 PUSH4 0xC37BDCEC GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xEAD8AA02 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xEAD8AA02 EQ PUSH2 0x524 JUMPI DUP1 PUSH4 0xF0141D84 EQ PUSH2 0x545 JUMPI DUP1 PUSH4 0xF1514A1A EQ PUSH2 0x562 JUMPI DUP1 PUSH4 0xFA573D07 EQ PUSH2 0x575 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC37BDCEC EQ PUSH2 0x4AD JUMPI DUP1 PUSH4 0xD0B0C816 EQ PUSH2 0x4CB JUMPI DUP1 PUSH4 0xD1C11F18 EQ PUSH2 0x4DE JUMPI DUP1 PUSH4 0xE08A28A3 EQ PUSH2 0x501 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA55102F7 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0xA55102F7 EQ PUSH2 0x453 JUMPI DUP1 PUSH4 0xA6200635 EQ PUSH2 0x466 JUMPI DUP1 PUSH4 0xAEDE7B76 EQ PUSH2 0x479 JUMPI DUP1 PUSH4 0xB6A3F59A EQ PUSH2 0x49A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8C8885C8 EQ PUSH2 0x3E1 JUMPI DUP1 PUSH4 0x92DFB2FB EQ PUSH2 0x3F4 JUMPI DUP1 PUSH4 0x9D706D31 EQ PUSH2 0x407 JUMPI DUP1 PUSH4 0xA37E52E3 EQ PUSH2 0x440 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6C70BEE9 GT PUSH2 0x187 JUMPI DUP1 PUSH4 0x7495B353 GT PUSH2 0x156 JUMPI DUP1 PUSH4 0x7495B353 EQ PUSH2 0x361 JUMPI DUP1 PUSH4 0x79750BC4 EQ PUSH2 0x390 JUMPI DUP1 PUSH4 0x7E932D32 EQ PUSH2 0x3B3 JUMPI DUP1 PUSH4 0x8145BD2E EQ PUSH2 0x3C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6C70BEE9 EQ PUSH2 0x2F7 JUMPI DUP1 PUSH4 0x6CC7149D EQ PUSH2 0x301 JUMPI DUP1 PUSH4 0x717186D1 EQ PUSH2 0x33B JUMPI DUP1 PUSH4 0x71CB1332 EQ PUSH2 0x34E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4AE9B8BC GT PUSH2 0x1C3 JUMPI DUP1 PUSH4 0x4AE9B8BC EQ PUSH2 0x26A JUMPI DUP1 PUSH4 0x59AA9E72 EQ PUSH2 0x288 JUMPI DUP1 PUSH4 0x5E615A6B EQ PUSH2 0x2A6 JUMPI DUP1 PUSH4 0x5F558E53 EQ PUSH2 0x2DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1C446983 EQ PUSH2 0x1F5 JUMPI DUP1 PUSH4 0x20361814 EQ PUSH2 0x20A JUMPI DUP1 PUSH4 0x28842D4F EQ PUSH2 0x23A JUMPI DUP1 PUSH4 0x356F235C EQ PUSH2 0x24D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x208 PUSH2 0x203 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x588 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x74 SHR PUSH5 0xFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x208 PUSH2 0x248 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x5A9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0xA8 SHR PUSH1 0xFF AND PUSH2 0x227 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x10 SHR PUSH2 0xFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH2 0x2AE PUSH2 0x5C3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH2 0x231 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x227 SWAP1 DUP2 JUMP JUMPDEST PUSH2 0x309 PUSH2 0x62C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP6 ISZERO ISZERO DUP7 MSTORE SWAP4 ISZERO ISZERO PUSH1 0x20 DUP7 ADD MSTORE SWAP2 ISZERO ISZERO SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x60 DUP4 ADD MSTORE ISZERO ISZERO PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD PUSH2 0x231 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x349 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x6A7 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x35C CALLDATASIZE PUSH1 0x4 PUSH2 0xF60 JUMP JUMPDEST PUSH2 0x6C1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH8 0x200000000000000 AND ISZERO ISZERO JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x231 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH8 0x400000000000000 AND ISZERO ISZERO PUSH2 0x380 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x3C1 CALLDATASIZE PUSH1 0x4 PUSH2 0xF60 JUMP JUMPDEST PUSH2 0x6DB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH2 0xFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x3EF CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x6F5 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x402 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x70F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH5 0xFFFFFFFFF PUSH1 0x50 DUP3 SWAP1 SHR DUP2 AND SWAP2 PUSH1 0x74 SHR AND PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x231 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x44E CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x729 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x461 CALLDATASIZE PUSH1 0x4 PUSH2 0xF60 JUMP JUMPDEST PUSH2 0x743 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x474 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x75D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x50 SHR PUSH5 0xFFFFFFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x4A8 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x777 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x98 SHR PUSH2 0xFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x4D9 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x791 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH8 0x8000000000000000 AND ISZERO ISZERO PUSH2 0x380 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH8 0x800000000000000 AND ISZERO ISZERO PUSH2 0x380 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0xB0 SHR PUSH5 0xFFFFFFFFF AND PUSH2 0x227 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0x227 JUMP JUMPDEST PUSH2 0x208 PUSH2 0x570 CALLDATASIZE PUSH1 0x4 PUSH2 0xF60 JUMP JUMPDEST PUSH2 0x7AB JUMP JUMPDEST PUSH2 0x208 PUSH2 0x583 CALLDATASIZE PUSH1 0x4 PUSH2 0xF47 JUMP JUMPDEST PUSH2 0x7C5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0x7DF JUMP JUMPDEST MLOAD PUSH1 0x0 SSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0x889 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x619 PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP MLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP3 PUSH1 0x10 DUP4 SWAP1 SHR DUP3 AND SWAP3 PUSH1 0x20 DUP2 SWAP1 SHR DUP4 AND SWAP3 PUSH1 0x30 DUP3 SWAP1 SHR PUSH1 0xFF SWAP1 DUP2 AND SWAP4 PUSH1 0x40 DUP5 SWAP1 SHR SWAP1 SWAP3 AND SWAP3 PUSH1 0xA8 SHR AND SWAP1 JUMP JUMPDEST SWAP5 SWAP12 SWAP4 SWAP11 POP SWAP2 SWAP9 POP SWAP7 POP SWAP5 POP SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x696 PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0x92A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0x9CE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xA13 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xA58 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xAF8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xB9C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xC37 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xC7C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xD1D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xDC1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xE62 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 SLOAD DUP2 MSTORE PUSH2 0x5A2 DUP2 DUP4 PUSH2 0xEA7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3637000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x859 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF AND PUSH1 0x40 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3635000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x8FA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF AND PUSH1 0x20 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3638000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFF DUP3 GT ISZERO PUSH2 0x99E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF AND PUSH1 0x50 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3B DUP2 PUSH2 0x9DC JUMPI PUSH1 0x0 PUSH2 0x9DF JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x39 DUP2 PUSH2 0xA21 JUMPI PUSH1 0x0 PUSH2 0xA24 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3636000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP3 GT ISZERO PUSH2 0xAC8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF AND PUSH1 0x30 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3732000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFF DUP3 GT ISZERO PUSH2 0xB6C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xB0 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3633000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0xC0D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 AND OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3F DUP2 PUSH2 0xC45 JUMPI PUSH1 0x0 PUSH2 0xC48 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3730000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0xCED JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x98 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3639000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFF DUP3 GT ISZERO PUSH2 0xD91 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x74 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3634000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0xE32 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF AND PUSH1 0x10 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3A DUP2 PUSH2 0xE70 JUMPI PUSH1 0x0 PUSH2 0xE73 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3731000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP3 GT ISZERO PUSH2 0xF17 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x850 SWAP2 SWAP1 PUSH2 0xF89 JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xA8 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF72 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xF82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xFB6 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xF9A JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xFC8 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH29 0xCA2BE24FEAD5B8B96447DE27EDF0668CB868675656309B424DA4813995 0xBD OR PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"237:4967:56:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2563:204;;;;;;:::i;:::-;;:::i;:::-;;4007:102;4076:26;;;;;;;;;-1:-1:-1;4076:26:56;;;;;4191:3:72;16761:63;;;4007:102:56;;;345:25:201;;;333:2;318:18;4007:102:56;;;;;;;;665:194;;;;;;:::i;:::-;;:::i;3183:110::-;3256:30;;;;;;;;;-1:-1:-1;3256:30:56;;;;;4339:3:72;20323:71;;;3183:110:56;4007:102;1197:124;1277:37;;;;;;;;;-1:-1:-1;1277:37:56;;;;;3298:2:72;6706:85;;;1197:124:56;4007:102;863:116;939:33;;;;;;;;;;-1:-1:-1;939:33:56;;;;;7548:77:72;;;;863:116:56;4007:102;4942:155;;;:::i;:::-;;;;668:25:201;;;724:2;709:18;;702:34;;;;752:18;;;745:34;;;;810:2;795:18;;788:34;853:3;838:19;;831:35;897:3;882:19;;875:35;655:3;640:19;4942:155:56;381:535:201;2771:110:56;2844:30;;;;;;;;-1:-1:-1;2844:30:56;;;;;15237:71:72;;;;2771:110:56;4007:102;344:54;;;;;;;4823:115;;;:::i;:::-;;;;1175:14:201;;1168:22;1150:41;;1234:14;;1227:22;1222:2;1207:18;;1200:50;1293:14;;1286:22;1266:18;;;1259:50;;;;1352:14;;1345:22;1340:2;1325:18;;1318:50;1412:14;1405:22;1399:3;1384:19;;1377:51;1137:3;1122:19;4823:115:56;921:513:201;2885:188:56;;;;;;:::i;:::-;;:::i;2207:215::-;;;;;;:::i;:::-;;:::i;1794:93::-;1857:23;;;;;;;;;-1:-1:-1;1857:23:56;;;;;9698:12:72;9686:24;9685:31;;1794:93:56;;;1882:14:201;;1875:22;1857:41;;1845:2;1830:18;1794:93:56;1717:187:201;2090:113:56;2163:33;;;;;;;;;-1:-1:-1;2163:33:56;;;;;13610:15:72;13598:27;13597:34;;2090:113:56;4007:102;1617:173;;;;;;:::i;:::-;;:::i;571:90::-;634:20;;;;;;;;;-1:-1:-1;634:20:56;;;;;5884:9:72;5872:21;571:90:56;4007:102;1325:184;;;;;;:::i;:::-;;:::i;4489:212::-;;;;;;:::i;:::-;;:::i;5101:101::-;5174:21;;;;;;;;;-1:-1:-1;5174:21:56;;;;;23507:63:72;4127:2;23507:63;;;;;;4191:3;23578:63;;5101:101:56;;;2083:25:201;;;2139:2;2124:18;;2117:34;;;;2056:18;5101:101:56;1909:248:201;403:164:56;;;;;;:::i;:::-;;:::i;3499:195::-;;;;;;:::i;:::-;;:::i;4113:240::-;;;;;;:::i;:::-;;:::i;3077:102::-;3146:26;;;;;;;;;-1:-1:-1;3146:26:56;;;;;4127:2:72;16003:63;;;3077:102:56;4007;3815:188;;;;;;:::i;:::-;;:::i;4357:128::-;4439:39;;;;;;;;;-1:-1:-1;4439:39:56;;;;;4270:3:72;18603:91;;;4357:128:56;4007:102;983:210;;;;;;:::i;:::-;;:::i;3698:113::-;3771:33;;;;;;;;;-1:-1:-1;3771:33:56;;;;;21161:23:72;21149:35;21148:42;;3698:113:56;4007:102;2426:133;2509:43;;;;;;;;;-1:-1:-1;2509:43:56;;;;;14446:22:72;14434:34;14433:41;;2426:133:56;4007:102;4705:114;4780:32;;;;;;;;;-1:-1:-1;4780:32:56;;;;;4411:3:72;19490:77;;;4705:114:56;4007:102;1513:100;1581:25;;;;;;;;;-1:-1:-1;1581:25:56;;;;;3439:2:72;8367:67;;;1513:100:56;4007:102;1891:195;;;;;;:::i;:::-;;:::i;3297:198::-;;;;;;:::i;:::-;;:::i;2563:204::-;2627:63;;;;;;;;;:47;:63;;;2696:38;2627:63;2720:13;2696:23;:38::i;:::-;2740:22;:13;:22;-1:-1:-1;2563:204:56:o;665:194::-;724:63;;;;;;;;;:47;:63;;;793:33;724:63;820:5;793:26;:33::i;4942:155::-;4998:7;5007;5016;5025;5034;5043;5067:25;:13;:23;;;;;;;;;;;;;;;;;22631:9:72;22674;22662:21;;;;3298:2;22691:85;;;;;;3369:2;22784:77;;;;;;3439:2;22869:67;;;;;;;;4063:2;22944:71;;;;;;;4339:3;23023:71;;;22454:651;5067:25:56;5060:32;;;;-1:-1:-1;5060:32:56;;-1:-1:-1;5060:32:56;-1:-1:-1;5060:32:56;-1:-1:-1;5060:32:56;;-1:-1:-1;4942:155:56;-1:-1:-1;4942:155:56:o;4823:115::-;4866:4;4872;4878;4884;4890;4909:24;:13;:22;;;;;;;;;;;;;;;;;21735:9:72;21779:12;21767:24;;21766:31;;;21818:12;21806:24;;21805:31;;;21857:15;21845:27;;21844:34;;;21899:22;21887:34;;21886:41;;;21948:12;21936:24;21935:31;;;21583:394;4909:24:56;4902:31;;;;;;;;;;4823:115;;;;;:::o;2885:188::-;2941:63;;;;;;;;;:47;:63;;;3010:30;2941:63;3030:9;3010:19;:30::i;2207:215::-;2275:63;;;;;;;;;:47;:63;;;2344:45;2275:63;2381:7;2344:36;:45::i;1617:173::-;1664:63;;;;;;;;;:47;:63;;;1733:24;1664:63;1750:6;1733:16;:24::i;1325:184::-;1379:63;;;;;;;;;:47;:63;;;1448:28;1379:63;1467:8;1448:18;:28::i;4489:212::-;4557:63;;;;;;;;;:47;:63;;;4626:42;4557:63;4652:15;4626:25;:42::i;403:164::-;447:63;;;;;;;;;:47;:63;;;516:18;447:63;530:3;516:13;:18::i;3499:195::-;3557:63;;;;;;;;;:47;:63;;;3626:35;3557:63;3653:7;3626:26;:35::i;4113:240::-;4195:63;;;;;;;;;:47;:63;;;4264:56;4195:63;4297:22;4264:32;:56::i;3815:188::-;3871:63;;;;;;;;;:47;:63;;;3940:30;3871:63;3960:9;3940:19;:30::i;983:210::-;1050:63;;;;;;;;;:47;:63;;;1119:41;1050:63;1150:9;1119:30;:41::i;1891:195::-;1949:63;;;;;;;;;:47;:63;;;2018:35;1949:63;2045:7;2018:26;:35::i;3297:198::-;3358:63;;;;;;;;;:47;:63;;;3427:35;3358:63;3451:10;3427:23;:35::i;14635:333:72:-;14814:29;;;;;;;;;;;;;;;;;4778:5;14771:41;;;14763:81;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;14870:9:72;;2165:66;14870:31;4063:2;14912:50;;;;14869:94;14851:112;;14635:333::o;6954:316::-;7123:24;;;;;;;;;;;;;;;;;4662:5;7085:36;;;7077:71;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;7174:9:72;;685:66;7174:34;3369:2;7219:45;;;;7173:92;7155:110;;6954:316::o;15457:289::-;15620:25;;;;;;;;;;;;;;;;;4836:11;15585:33;;;15577:69;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;15666:9:72;;2313:66;15666:27;4127:2;15698:42;;;;15665:76;15653:88;;15457:289::o;13856:272::-;3714:2;14059:7;:15;;14073:1;14059:15;;;14069:1;14059:15;14007:9;;1425:66;14007:33;14051:24;;;;;:71;;;14006:117;13988:135;;;-1:-1:-1;13856:272:72:o;9225:213::-;3565:2;9385:6;:14;;9398:1;9385:14;;;9394:1;9385:14;9343:9;;1129:66;9343:23;9377;;;;;:55;;;9342:91;9324:109;;;-1:-1:-1;9225:213:72:o;7793:285::-;7951:23;;;;;;;;;;;;;;;;;4718:3;7919:30;;;7911:64;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;7995:9:72;;833:66;7995:25;3439:2;8025:47;;;;7994:79;7982:91;;7793:285::o;18863:353::-;19051:32;;;;;;;;;;;;;;;;;5103:11;19003:46;;;18995:89;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;19110:9:72;;2905:66;19110:34;4411:3;19155:55;;;;19109:102;19091:120;;18863:353::o;5426:197::-;5552:18;;;;;;;;;;;;;;;;;4528:5;5530:20;;;5522:49;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5591:9:72;;389:66;5591:20;5590:28;5578:40;;5426:197::o;20596:274::-;3995:2;20799:16;:24;;20822:1;20799:24;;;20818:1;20799:24;20746:9;;2017:66;20746:34;20791:33;;;;;:73;;;20745:120;20727:138;;;-1:-1:-1;20596:274:72:o;17890:427::-;18119:39;;;;;;;;;;;;;;;;;4978:5;18051:60;;;18036:128;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;18190:9:72;;2609:66;18190:41;4270:3;18242:69;;;;18189:123;18171:141;;17890:427::o;16215:289::-;16378:25;;;;;;;;;;;;;;;;;4900:11;16343:33;;;16335:69;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16424:9:72;;2461:66;16424:27;4191:3;16456:42;;;;16423:76;16411:88;;16215:289::o;6068:348::-;6253:28;;;;;;;;;;;;;;;;;4597:5;6207:44;;;6199:83;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;6308:9:72;;537:66;6308:38;3298:2;6357:53;;;;6307:104;6289:122;;6068:348::o;13078:248::-;3636:2;13264:7;:15;;13278:1;13264:15;;;13274:1;13264:15;13219:9;;1277:66;13219:26;13256:24;;;;;:64;;;13218:103;13200:121;;;-1:-1:-1;13078:248:72:o;19746:306::-;19915:29;;;;;;;;;;;;;;;;;5040:3;19877:36;;;19869:76;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;19965:9:72;;2757:66;19965:31;4339:3;20001:45;;;;19964:83;19952:95;;19746:306::o;14:180:201:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:201;;14:180;-1:-1:-1;14:180:201:o;1439:273::-;1495:6;1548:2;1536:9;1527:7;1523:23;1519:32;1516:52;;;1564:1;1561;1554:12;1516:52;1603:9;1590:23;1656:5;1649:13;1642:21;1635:5;1632:32;1622:60;;1678:1;1675;1668:12;1622:60;1701:5;1439:273;-1:-1:-1;;;1439:273:201:o;2162:656::-;2274:4;2303:2;2332;2321:9;2314:21;2364:6;2358:13;2407:6;2402:2;2391:9;2387:18;2380:34;2432:1;2442:140;2456:6;2453:1;2450:13;2442:140;;;2551:14;;;2547:23;;2541:30;2517:17;;;2536:2;2513:26;2506:66;2471:10;;2442:140;;;2600:6;2597:1;2594:13;2591:91;;;2670:1;2665:2;2656:6;2645:9;2641:22;2637:31;2630:42;2591:91;-1:-1:-1;2734:2:201;2722:15;2739:66;2718:88;2703:104;;;;2809:2;2699:113;;2162:656;-1:-1:-1;;;2162:656:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"829200","executionCost":"864","totalCost":"830064"},"external":{"configuration()":"2333","getBorrowCap()":"2424","getBorrowingEnabled()":"2419","getCaps()":"2469","getDecimals()":"2401","getEModeCategory()":"2448","getFlags()":"2689","getFlashLoanEnabled()":"2441","getFrozen()":"2386","getLiquidationBonus()":"2406","getLiquidationProtocolFee()":"2380","getLiquidationThreshold()":"2381","getLtv()":"2440","getParams()":"2737","getReserveFactor()":"2444","getStableRateBorrowingEnabled()":"2463","getSupplyCap()":"2393","getUnbackedMintCap()":"2379","setBorrowCap(uint256)":"infinite","setBorrowingEnabled(bool)":"24707","setDecimals(uint256)":"infinite","setEModeCategory(uint256)":"infinite","setFlashLoanEnabled(bool)":"24664","setFrozen(bool)":"24708","setLiquidationBonus(uint256)":"infinite","setLiquidationProtocolFee(uint256)":"infinite","setLiquidationThreshold(uint256)":"infinite","setLtv(uint256)":"infinite","setReserveFactor(uint256)":"infinite","setStableRateBorrowingEnabled(bool)":"24731","setSupplyCap(uint256)":"infinite","setUnbackedMintCap(uint256)":"infinite"}},"methodIdentifiers":{"configuration()":"6c70bee9","getBorrowCap()":"aede7b76","getBorrowingEnabled()":"79750bc4","getCaps()":"9d706d31","getDecimals()":"f0141d84","getEModeCategory()":"356f235c","getFlags()":"6cc7149d","getFlashLoanEnabled()":"d1c11f18","getFrozen()":"7495b353","getLiquidationBonus()":"59aa9e72","getLiquidationProtocolFee()":"c37bdcec","getLiquidationThreshold()":"4ae9b8bc","getLtv()":"8145bd2e","getParams()":"5e615a6b","getReserveFactor()":"5f558e53","getStableRateBorrowingEnabled()":"e08a28a3","getSupplyCap()":"20361814","getUnbackedMintCap()":"ead8aa02","setBorrowCap(uint256)":"717186d1","setBorrowingEnabled(bool)":"f1514a1a","setDecimals(uint256)":"8c8885c8","setEModeCategory(uint256)":"fa573d07","setFlashLoanEnabled(bool)":"a55102f7","setFrozen(bool)":"7e932d32","setLiquidationBonus(uint256)":"28842d4f","setLiquidationProtocolFee(uint256)":"a6200635","setLiquidationThreshold(uint256)":"d0b0c816","setLtv(uint256)":"a37e52e3","setReserveFactor(uint256)":"1c446983","setStableRateBorrowingEnabled(bool)":"71cb1332","setSupplyCap(uint256)":"b6a3f59a","setUnbackedMintCap(uint256)":"92dfb2fb"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"configuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBorrowCap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBorrowingEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCaps\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDecimals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEModeCategory\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFlags\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFlashLoanEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFrozen\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLiquidationBonus\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLiquidationProtocolFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLiquidationThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLtv\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getParams\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReserveFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStableRateBorrowingEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupplyCap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUnbackedMintCap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"borrowCap\",\"type\":\"uint256\"}],\"name\":\"setBorrowCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setBorrowingEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"setDecimals\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"categoryId\",\"type\":\"uint256\"}],\"name\":\"setEModeCategory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setFlashLoanEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"frozen\",\"type\":\"bool\"}],\"name\":\"setFrozen\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"bonus\",\"type\":\"uint256\"}],\"name\":\"setLiquidationBonus\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"liquidationProtocolFee\",\"type\":\"uint256\"}],\"name\":\"setLiquidationProtocolFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"name\":\"setLiquidationThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"}],\"name\":\"setLtv\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"}],\"name\":\"setReserveFactor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setStableRateBorrowingEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"supplyCap\",\"type\":\"uint256\"}],\"name\":\"setSupplyCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"unbackedMintCap\",\"type\":\"uint256\"}],\"name\":\"setUnbackedMintCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/mocks/helpers/MockReserveConfiguration.sol\":\"MockReserveConfiguration\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/mocks/helpers/MockReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {ReserveConfiguration} from '../../protocol/libraries/configuration/ReserveConfiguration.sol';\\nimport {DataTypes} from '../../protocol/libraries/types/DataTypes.sol';\\n\\ncontract MockReserveConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  DataTypes.ReserveConfigurationMap public configuration;\\n\\n  function setLtv(uint256 ltv) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setLtv(ltv);\\n    configuration = config;\\n  }\\n\\n  function getLtv() external view returns (uint256) {\\n    return configuration.getLtv();\\n  }\\n\\n  function setLiquidationBonus(uint256 bonus) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setLiquidationBonus(bonus);\\n    configuration = config;\\n  }\\n\\n  function getLiquidationBonus() external view returns (uint256) {\\n    return configuration.getLiquidationBonus();\\n  }\\n\\n  function setLiquidationThreshold(uint256 threshold) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setLiquidationThreshold(threshold);\\n    configuration = config;\\n  }\\n\\n  function getLiquidationThreshold() external view returns (uint256) {\\n    return configuration.getLiquidationThreshold();\\n  }\\n\\n  function setDecimals(uint256 decimals) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setDecimals(decimals);\\n    configuration = config;\\n  }\\n\\n  function getDecimals() external view returns (uint256) {\\n    return configuration.getDecimals();\\n  }\\n\\n  function setFrozen(bool frozen) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setFrozen(frozen);\\n    configuration = config;\\n  }\\n\\n  function getFrozen() external view returns (bool) {\\n    return configuration.getFrozen();\\n  }\\n\\n  function setBorrowingEnabled(bool enabled) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setBorrowingEnabled(enabled);\\n    configuration = config;\\n  }\\n\\n  function getBorrowingEnabled() external view returns (bool) {\\n    return configuration.getBorrowingEnabled();\\n  }\\n\\n  function setStableRateBorrowingEnabled(bool enabled) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setStableRateBorrowingEnabled(enabled);\\n    configuration = config;\\n  }\\n\\n  function getStableRateBorrowingEnabled() external view returns (bool) {\\n    return configuration.getStableRateBorrowingEnabled();\\n  }\\n\\n  function setReserveFactor(uint256 reserveFactor) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setReserveFactor(reserveFactor);\\n    configuration = config;\\n  }\\n\\n  function getReserveFactor() external view returns (uint256) {\\n    return configuration.getReserveFactor();\\n  }\\n\\n  function setBorrowCap(uint256 borrowCap) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setBorrowCap(borrowCap);\\n    configuration = config;\\n  }\\n\\n  function getBorrowCap() external view returns (uint256) {\\n    return configuration.getBorrowCap();\\n  }\\n\\n  function getEModeCategory() external view returns (uint256) {\\n    return configuration.getEModeCategory();\\n  }\\n\\n  function setEModeCategory(uint256 categoryId) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setEModeCategory(categoryId);\\n    configuration = config;\\n  }\\n\\n  function setFlashLoanEnabled(bool enabled) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setFlashLoanEnabled(enabled);\\n    configuration = config;\\n  }\\n\\n  function getFlashLoanEnabled() external view returns (bool) {\\n    return configuration.getFlashLoanEnabled();\\n  }\\n\\n  function setSupplyCap(uint256 supplyCap) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setSupplyCap(supplyCap);\\n    configuration = config;\\n  }\\n\\n  function getSupplyCap() external view returns (uint256) {\\n    return configuration.getSupplyCap();\\n  }\\n\\n  function setLiquidationProtocolFee(uint256 liquidationProtocolFee) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setLiquidationProtocolFee(liquidationProtocolFee);\\n    configuration = config;\\n  }\\n\\n  function getLiquidationProtocolFee() external view returns (uint256) {\\n    return configuration.getLiquidationProtocolFee();\\n  }\\n\\n  function setUnbackedMintCap(uint256 unbackedMintCap) external {\\n    DataTypes.ReserveConfigurationMap memory config = configuration;\\n    config.setUnbackedMintCap(unbackedMintCap);\\n    configuration = config;\\n  }\\n\\n  function getUnbackedMintCap() external view returns (uint256) {\\n    return configuration.getUnbackedMintCap();\\n  }\\n\\n  function getFlags() external view returns (bool, bool, bool, bool, bool) {\\n    return configuration.getFlags();\\n  }\\n\\n  function getParams()\\n    external\\n    view\\n    returns (uint256, uint256, uint256, uint256, uint256, uint256)\\n  {\\n    return configuration.getParams();\\n  }\\n\\n  function getCaps() external view returns (uint256, uint256) {\\n    return configuration.getCaps();\\n  }\\n}\\n\",\"keccak256\":\"0xc99c804088eb8ed9b661e41a77cf7e631339b37cf9500f69cfa11d619b139d63\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":7837,"contract":"@aave/core-v3/contracts/mocks/helpers/MockReserveConfiguration.sol:MockReserveConfiguration","label":"configuration","offset":0,"slot":"0","type":"t_struct(ReserveConfigurationMap)21318_storage"}],"types":{"t_struct(ReserveConfigurationMap)21318_storage":{"encoding":"inplace","label":"struct DataTypes.ReserveConfigurationMap","members":[{"astId":21317,"contract":"@aave/core-v3/contracts/mocks/helpers/MockReserveConfiguration.sol:MockReserveConfiguration","label":"data","offset":0,"slot":"0","type":"t_uint256"}],"numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/mocks/oracle/CLAggregators/MockAggregator.sol":{"MockAggregator":{"abi":[{"inputs":[{"internalType":"int256","name":"initialAnswer","type":"int256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"int256","name":"current","type":"int256"},{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"updatedAt","type":"uint256"}],"name":"AnswerUpdated","type":"event"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getTokenType","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"latestAnswer","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_8379":{"entryPoint":null,"id":8379,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_int256_fromMemory":{"entryPoint":111,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:381:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"94:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"140:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"149:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"152:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"142:6:201"},"nodeType":"YulFunctionCall","src":"142:12:201"},"nodeType":"YulExpressionStatement","src":"142:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"115:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"124:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"111:3:201"},"nodeType":"YulFunctionCall","src":"111:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"136:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"107:3:201"},"nodeType":"YulFunctionCall","src":"107:32:201"},"nodeType":"YulIf","src":"104:52:201"},{"nodeType":"YulAssignment","src":"165:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"181:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"175:5:201"},"nodeType":"YulFunctionCall","src":"175:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"165:6:201"}]}]},"name":"abi_decode_tuple_t_int256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"60:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"71:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"83:6:201","type":""}],"src":"14:183:201"},{"body":{"nodeType":"YulBlock","src":"303:76:201","statements":[{"nodeType":"YulAssignment","src":"313:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"325:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"336:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"321:3:201"},"nodeType":"YulFunctionCall","src":"321:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"313:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"355:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"366:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"348:6:201"},"nodeType":"YulFunctionCall","src":"348:25:201"},"nodeType":"YulExpressionStatement","src":"348:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"272:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"283:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"294:4:201","type":""}],"src":"202:177:201"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_int256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060405161013838038061013883398101604081905261002f9161006f565b600081815560405142815282907f0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f9060200160405180910390a350610088565b60006020828403121561008157600080fd5b5051919050565b60a2806100966000396000f3fe6080604052348015600f57600080fd5b5060043610603c5760003560e01c8063313ce56714604157806350d25bcd146055578063fcab1819146066575b600080fd5b604051600881526020015b60405180910390f35b6000545b604051908152602001604c565b6001605956fea264697066735822122081e278fb9a6b3b6e0180193f46b79f70d75adb9887405988350ca5223b43139064736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x138 CODESIZE SUB DUP1 PUSH2 0x138 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x6F JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 SSTORE PUSH1 0x40 MLOAD TIMESTAMP DUP2 MSTORE DUP3 SWAP1 PUSH32 0x559884FD3A460DB3073B7FC896CC77986F16E378210DED43186175BF646FC5F SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x88 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xA2 DUP1 PUSH2 0x96 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 0x3C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x313CE567 EQ PUSH1 0x41 JUMPI DUP1 PUSH4 0x50D25BCD EQ PUSH1 0x55 JUMPI DUP1 PUSH4 0xFCAB1819 EQ PUSH1 0x66 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x8 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x59 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 0xE2 PUSH25 0xFB9A6B3B6E0180193F46B79F70D75ADB9887405988350CA522 EXTCODESIZE NUMBER SGT SWAP1 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"62:530:57:-:0;;;215:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;255:13;:29;;;295:48;;327:15;348:25:201;;255:29:57;;295:48;;336:2:201;321:18;295:48:57;;;;;;;215:133;62:530;;14:183:201;83:6;136:2;124:9;115:7;111:23;107:32;104:52;;;152:1;149;142:12;104:52;-1:-1:-1;175:16:201;;14:183;-1:-1:-1;14:183:201:o;202:177::-;62:530:57;;;;;;"},"deployedBytecode":{"functionDebugData":{"@decimals_8403":{"entryPoint":null,"id":8403,"parameterSlots":0,"returnSlots":1},"@getTokenType_8395":{"entryPoint":null,"id":8395,"parameterSlots":0,"returnSlots":1},"@latestAnswer_8387":{"entryPoint":null,"id":8387,"parameterSlots":0,"returnSlots":1},"abi_encode_tuple_t_int256__to_t_int256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:562:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"111:87:201","statements":[{"nodeType":"YulAssignment","src":"121:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"133:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"144:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"129:3:201"},"nodeType":"YulFunctionCall","src":"129:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"121:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"163:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"178:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"186:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"174:3:201"},"nodeType":"YulFunctionCall","src":"174:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"156:6:201"},"nodeType":"YulFunctionCall","src":"156:36:201"},"nodeType":"YulExpressionStatement","src":"156:36:201"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"80:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"91:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"102:4:201","type":""}],"src":"14:184:201"},{"body":{"nodeType":"YulBlock","src":"302:76:201","statements":[{"nodeType":"YulAssignment","src":"312:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"324:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"335:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"320:3:201"},"nodeType":"YulFunctionCall","src":"320:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"312:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"354:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"365:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"347:6:201"},"nodeType":"YulFunctionCall","src":"347:25:201"},"nodeType":"YulExpressionStatement","src":"347:25:201"}]},"name":"abi_encode_tuple_t_int256__to_t_int256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"271:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"282:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"293:4:201","type":""}],"src":"203:175:201"},{"body":{"nodeType":"YulBlock","src":"484:76:201","statements":[{"nodeType":"YulAssignment","src":"494:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"506:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"517:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"502:3:201"},"nodeType":"YulFunctionCall","src":"502:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"494:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"536:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"547:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"529:6:201"},"nodeType":"YulFunctionCall","src":"529:25:201"},"nodeType":"YulExpressionStatement","src":"529:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"453:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"464:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"475:4:201","type":""}],"src":"383:177:201"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_int256__to_t_int256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"6080604052348015600f57600080fd5b5060043610603c5760003560e01c8063313ce56714604157806350d25bcd146055578063fcab1819146066575b600080fd5b604051600881526020015b60405180910390f35b6000545b604051908152602001604c565b6001605956fea264697066735822122081e278fb9a6b3b6e0180193f46b79f70d75adb9887405988350ca5223b43139064736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x3C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x313CE567 EQ PUSH1 0x41 JUMPI DUP1 PUSH4 0x50D25BCD EQ PUSH1 0x55 JUMPI DUP1 PUSH4 0xFCAB1819 EQ PUSH1 0x66 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x8 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x4C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x59 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 0xE2 PUSH25 0xFB9A6B3B6E0180193F46B79F70D75ADB9887405988350CA522 EXTCODESIZE NUMBER SGT SWAP1 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"62:530:57:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;521:69;;;584:1;156:36:201;;144:2;129:18;521:69:57;;;;;;;;352:86;399:6;420:13;352:86;;;347:25:201;;;335:2;320:18;352:86:57;203:175:201;442:75:57;511:1;442:75;"},"gasEstimates":{"creation":{"codeDepositCost":"32400","executionCost":"infinite","totalCost":"infinite"},"external":{"decimals()":"144","getTokenType()":"214","latestAnswer()":"2281"}},"methodIdentifiers":{"decimals()":"313ce567","getTokenType()":"fcab1819","latestAnswer()":"50d25bcd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"initialAnswer\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"int256\",\"name\":\"current\",\"type\":\"int256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"}],\"name\":\"AnswerUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenType\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestAnswer\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/mocks/oracle/CLAggregators/MockAggregator.sol\":\"MockAggregator\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/mocks/oracle/CLAggregators/MockAggregator.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\ncontract MockAggregator {\\n  int256 private _latestAnswer;\\n\\n  event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 updatedAt);\\n\\n  constructor(int256 initialAnswer) {\\n    _latestAnswer = initialAnswer;\\n    emit AnswerUpdated(initialAnswer, 0, block.timestamp);\\n  }\\n\\n  function latestAnswer() external view returns (int256) {\\n    return _latestAnswer;\\n  }\\n\\n  function getTokenType() external pure returns (uint256) {\\n    return 1;\\n  }\\n\\n  function decimals() external pure returns (uint8) {\\n    return 8;\\n  }\\n}\\n\",\"keccak256\":\"0xb9dc6ba54dcd7adf2dcd938c5cfa7540aa72bd09f644008efe411710ccf1dcdc\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":8354,"contract":"@aave/core-v3/contracts/mocks/oracle/CLAggregators/MockAggregator.sol:MockAggregator","label":"_latestAnswer","offset":0,"slot":"0","type":"t_int256"}],"types":{"t_int256":{"encoding":"inplace","label":"int256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/mocks/oracle/PriceOracle.sol":{"PriceOracle":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"AssetPriceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"EthPriceUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getAssetPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEthUsdPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setAssetPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setEthUsdPrice","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"getAssetPrice(address)":{"params":{"asset":"The address of the asset"},"returns":{"_0":"The price of the asset"}},"setAssetPrice(address,uint256)":{"params":{"asset":"The address of the asset","price":"The price of the asset"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50610231806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806351323f7214610051578063a0a8045e14610066578063b3596f071461007c578063b951883a146100b2575b600080fd5b61006461005f366004610196565b6100c5565b005b6001545b60405190815260200160405180910390f35b61006a61008a3660046101c0565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100646100c03660046101e2565b61012d565b73ffffffffffffffffffffffffffffffffffffffff821660008181526020818152604091829020849055815192835282018390524282820152517fce6e0b57367bae95ca7198e1172f653ea64a645c16ab586b4cefa9237bfc2d929181900360600190a15050565b6001819055604080518281524260208201527fb4f35977939fa8b5ffe552d517a8ff5223046b1fdd3ee0068ae38d1e2b8d0016910160405180910390a150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461019157600080fd5b919050565b600080604083850312156101a957600080fd5b6101b28361016d565b946020939093013593505050565b6000602082840312156101d257600080fd5b6101db8261016d565b9392505050565b6000602082840312156101f457600080fd5b503591905056fea264697066735822122085303f52219443b68175f4f91319cff85f170fd39db9e61c1ec4c94b3cf872a164736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x231 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x51323F72 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0xA0A8045E EQ PUSH2 0x66 JUMPI DUP1 PUSH4 0xB3596F07 EQ PUSH2 0x7C JUMPI DUP1 PUSH4 0xB951883A EQ PUSH2 0xB2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0x196 JUMP JUMPDEST PUSH2 0xC5 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6A PUSH2 0x8A CALLDATASIZE PUSH1 0x4 PUSH2 0x1C0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x64 PUSH2 0xC0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E2 JUMP JUMPDEST PUSH2 0x12D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD DUP4 SWAP1 MSTORE TIMESTAMP DUP3 DUP3 ADD MSTORE MLOAD PUSH32 0xCE6E0B57367BAE95CA7198E1172F653EA64A645C16AB586B4CEFA9237BFC2D92 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE TIMESTAMP PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0xB4F35977939FA8B5FFE552D517A8FF5223046B1FDD3EE0068AE38D1E2B8D0016 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x191 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1B2 DUP4 PUSH2 0x16D 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 0x1D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1DB DUP3 PUSH2 0x16D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP6 ADDRESS EXTCODEHASH MSTORE 0x21 SWAP5 NUMBER 0xB6 DUP2 PUSH22 0xF4F91319CFF85F170FD39DB9E61C1EC4C94B3CF872A1 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"127:801:58:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@getAssetPrice_8443":{"entryPoint":null,"id":8443,"parameterSlots":1,"returnSlots":1},"@getEthUsdPrice_8473":{"entryPoint":null,"id":8473,"parameterSlots":0,"returnSlots":1},"@setAssetPrice_8465":{"entryPoint":197,"id":8465,"parameterSlots":2,"returnSlots":0},"@setEthUsdPrice_8489":{"entryPoint":301,"id":8489,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":365,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":448,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":406,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256":{"entryPoint":482,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1655:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:147:201","statements":[{"nodeType":"YulAssignment","src":"73:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:201"},"nodeType":"YulFunctionCall","src":"82:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:201"}]},{"body":{"nodeType":"YulBlock","src":"188:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"197:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"200:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"190:6:201"},"nodeType":"YulFunctionCall","src":"190:12:201"},"nodeType":"YulExpressionStatement","src":"190:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"142:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:201"},"nodeType":"YulFunctionCall","src":"131:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:201"},"nodeType":"YulFunctionCall","src":"121:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:201"},"nodeType":"YulFunctionCall","src":"114:73:201"},"nodeType":"YulIf","src":"111:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:201","type":""}],"src":"14:196:201"},{"body":{"nodeType":"YulBlock","src":"302:167:201","statements":[{"body":{"nodeType":"YulBlock","src":"348:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"357:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"360:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"350:6:201"},"nodeType":"YulFunctionCall","src":"350:12:201"},"nodeType":"YulExpressionStatement","src":"350:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"323:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"332:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"319:3:201"},"nodeType":"YulFunctionCall","src":"319:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"344:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"315:3:201"},"nodeType":"YulFunctionCall","src":"315:32:201"},"nodeType":"YulIf","src":"312:52:201"},{"nodeType":"YulAssignment","src":"373:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"402:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"383:18:201"},"nodeType":"YulFunctionCall","src":"383:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"373:6:201"}]},{"nodeType":"YulAssignment","src":"421:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"448:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"459:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"444:3:201"},"nodeType":"YulFunctionCall","src":"444:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"431:12:201"},"nodeType":"YulFunctionCall","src":"431:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"421:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"260:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"271:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"283:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"291:6:201","type":""}],"src":"215:254:201"},{"body":{"nodeType":"YulBlock","src":"575:76:201","statements":[{"nodeType":"YulAssignment","src":"585:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"597:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"608:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"593:3:201"},"nodeType":"YulFunctionCall","src":"593:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"585:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"627:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"638:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"620:6:201"},"nodeType":"YulFunctionCall","src":"620:25:201"},"nodeType":"YulExpressionStatement","src":"620:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"544:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"555:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"566:4:201","type":""}],"src":"474:177:201"},{"body":{"nodeType":"YulBlock","src":"726:116:201","statements":[{"body":{"nodeType":"YulBlock","src":"772:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"781:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"784:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"774:6:201"},"nodeType":"YulFunctionCall","src":"774:12:201"},"nodeType":"YulExpressionStatement","src":"774:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"747:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"756:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"743:3:201"},"nodeType":"YulFunctionCall","src":"743:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"768:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"739:3:201"},"nodeType":"YulFunctionCall","src":"739:32:201"},"nodeType":"YulIf","src":"736:52:201"},{"nodeType":"YulAssignment","src":"797:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"826:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"807:18:201"},"nodeType":"YulFunctionCall","src":"807:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"797:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"692:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"703:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"715:6:201","type":""}],"src":"656:186:201"},{"body":{"nodeType":"YulBlock","src":"917:110:201","statements":[{"body":{"nodeType":"YulBlock","src":"963:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"972:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"975:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"965:6:201"},"nodeType":"YulFunctionCall","src":"965:12:201"},"nodeType":"YulExpressionStatement","src":"965:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"938:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"947:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"934:3:201"},"nodeType":"YulFunctionCall","src":"934:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"959:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"930:3:201"},"nodeType":"YulFunctionCall","src":"930:32:201"},"nodeType":"YulIf","src":"927:52:201"},{"nodeType":"YulAssignment","src":"988:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1011:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"998:12:201"},"nodeType":"YulFunctionCall","src":"998:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"988:6:201"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"883:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"894:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"906:6:201","type":""}],"src":"847:180:201"},{"body":{"nodeType":"YulBlock","src":"1189:211:201","statements":[{"nodeType":"YulAssignment","src":"1199:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1211:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1222:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1207:3:201"},"nodeType":"YulFunctionCall","src":"1207:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1199:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1241:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1256:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1264:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1252:3:201"},"nodeType":"YulFunctionCall","src":"1252:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1234:6:201"},"nodeType":"YulFunctionCall","src":"1234:74:201"},"nodeType":"YulExpressionStatement","src":"1234:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1328:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1339:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1324:3:201"},"nodeType":"YulFunctionCall","src":"1324:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"1344:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1317:6:201"},"nodeType":"YulFunctionCall","src":"1317:34:201"},"nodeType":"YulExpressionStatement","src":"1317:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1371:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1382:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1367:3:201"},"nodeType":"YulFunctionCall","src":"1367:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"1387:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1360:6:201"},"nodeType":"YulFunctionCall","src":"1360:34:201"},"nodeType":"YulExpressionStatement","src":"1360:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1142:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1153:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1161:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1169:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1180:4:201","type":""}],"src":"1032:368:201"},{"body":{"nodeType":"YulBlock","src":"1534:119:201","statements":[{"nodeType":"YulAssignment","src":"1544:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1556:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1567:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1552:3:201"},"nodeType":"YulFunctionCall","src":"1552:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1544:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1586:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"1597:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1579:6:201"},"nodeType":"YulFunctionCall","src":"1579:25:201"},"nodeType":"YulExpressionStatement","src":"1579:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1624:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1635:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1620:3:201"},"nodeType":"YulFunctionCall","src":"1620:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"1640:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1613:6:201"},"nodeType":"YulFunctionCall","src":"1613:34:201"},"nodeType":"YulExpressionStatement","src":"1613:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1495:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1506:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1514:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1525:4:201","type":""}],"src":"1405:248:201"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061004c5760003560e01c806351323f7214610051578063a0a8045e14610066578063b3596f071461007c578063b951883a146100b2575b600080fd5b61006461005f366004610196565b6100c5565b005b6001545b60405190815260200160405180910390f35b61006a61008a3660046101c0565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100646100c03660046101e2565b61012d565b73ffffffffffffffffffffffffffffffffffffffff821660008181526020818152604091829020849055815192835282018390524282820152517fce6e0b57367bae95ca7198e1172f653ea64a645c16ab586b4cefa9237bfc2d929181900360600190a15050565b6001819055604080518281524260208201527fb4f35977939fa8b5ffe552d517a8ff5223046b1fdd3ee0068ae38d1e2b8d0016910160405180910390a150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461019157600080fd5b919050565b600080604083850312156101a957600080fd5b6101b28361016d565b946020939093013593505050565b6000602082840312156101d257600080fd5b6101db8261016d565b9392505050565b6000602082840312156101f457600080fd5b503591905056fea264697066735822122085303f52219443b68175f4f91319cff85f170fd39db9e61c1ec4c94b3cf872a164736f6c634300080a0033","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 0x51323F72 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0xA0A8045E EQ PUSH2 0x66 JUMPI DUP1 PUSH4 0xB3596F07 EQ PUSH2 0x7C JUMPI DUP1 PUSH4 0xB951883A EQ PUSH2 0xB2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0x196 JUMP JUMPDEST PUSH2 0xC5 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6A PUSH2 0x8A CALLDATASIZE PUSH1 0x4 PUSH2 0x1C0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x64 PUSH2 0xC0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E2 JUMP JUMPDEST PUSH2 0x12D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD DUP4 SWAP1 MSTORE TIMESTAMP DUP3 DUP3 ADD MSTORE MLOAD PUSH32 0xCE6E0B57367BAE95CA7198E1172F653EA64A645C16AB586B4CEFA9237BFC2D92 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE TIMESTAMP PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0xB4F35977939FA8B5FFE552D517A8FF5223046B1FDD3EE0068AE38D1E2B8D0016 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x191 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1B2 DUP4 PUSH2 0x16D 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 0x1D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1DB DUP3 PUSH2 0x16D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP6 ADDRESS EXTCODEHASH MSTORE 0x21 SWAP5 NUMBER 0xB6 DUP2 PUSH22 0xF4F91319CFF85F170FD39DB9E61C1EC4C94B3CF872A1 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"127:801:58:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;541:162;;;;;;:::i;:::-;;:::i;:::-;;707:87;778:11;;707:87;;;620:25:201;;;608:2;593:18;707:87:58;;;;;;;427:110;;;;;;:::i;:::-;519:13;;497:7;519:13;;;;;;;;;;;;427:110;798:128;;;;;;:::i;:::-;;:::i;541:162::-;618:13;;;:6;:13;;;;;;;;;;;;:21;;;650:48;;1234:74:201;;;1324:18;;1317:34;;;682:15:58;1367:18:201;;;1360:34;650:48:58;;;;;;1222:2:201;650:48:58;;;541:162;;:::o;798:128::-;852:11;:19;;;882:39;;;1579:25:201;;;905:15:58;1635:2:201;1620:18;;1613:34;882:39:58;;1552:18:201;882:39:58;;;;;;;798:128;:::o;14:196:201:-;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:254::-;283:6;291;344:2;332:9;323:7;319:23;315:32;312:52;;;360:1;357;350:12;312:52;383:29;402:9;383:29;:::i;:::-;373:39;459:2;444:18;;;;431:32;;-1:-1:-1;;;215:254:201:o;656:186::-;715:6;768:2;756:9;747:7;743:23;739:32;736:52;;;784:1;781;774:12;736:52;807:29;826:9;807:29;:::i;:::-;797:39;656:186;-1:-1:-1;;;656:186:201:o;847:180::-;906:6;959:2;947:9;938:7;934:23;930:32;927:52;;;975:1;972;965:12;927:52;-1:-1:-1;998:23:201;;847:180;-1:-1:-1;847:180:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"112200","executionCost":"159","totalCost":"112359"},"external":{"getAssetPrice(address)":"2526","getEthUsdPrice()":"2269","setAssetPrice(address,uint256)":"24087","setEthUsdPrice(uint256)":"23706"}},"methodIdentifiers":{"getAssetPrice(address)":"b3596f07","getEthUsdPrice()":"a0a8045e","setAssetPrice(address,uint256)":"51323f72","setEthUsdPrice(uint256)":"b951883a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"AssetPriceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"EthPriceUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getAssetPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEthUsdPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"setAssetPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"setEthUsdPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getAssetPrice(address)\":{\"params\":{\"asset\":\"The address of the asset\"},\"returns\":{\"_0\":\"The price of the asset\"}},\"setAssetPrice(address,uint256)\":{\"params\":{\"asset\":\"The address of the asset\",\"price\":\"The price of the asset\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAssetPrice(address)\":{\"notice\":\"Returns the asset price in the base currency\"},\"setAssetPrice(address,uint256)\":{\"notice\":\"Set the price of the asset\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/mocks/oracle/PriceOracle.sol\":\"PriceOracle\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/interfaces/IPriceOracle.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracle\\n * @author Aave\\n * @notice Defines the basic interface for a Price oracle.\\n */\\ninterface IPriceOracle {\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Set the price of the asset\\n   * @param asset The address of the asset\\n   * @param price The price of the asset\\n   */\\n  function setAssetPrice(address asset, uint256 price) external;\\n}\\n\",\"keccak256\":\"0x672bcf328d4d811c1dea02b57580ea650f73121f98f39e7916ac70340bb234d2\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/mocks/oracle/PriceOracle.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IPriceOracle} from '../../interfaces/IPriceOracle.sol';\\n\\ncontract PriceOracle is IPriceOracle {\\n  // Map of asset prices (asset => price)\\n  mapping(address => uint256) internal prices;\\n\\n  uint256 internal ethPriceUsd;\\n\\n  event AssetPriceUpdated(address asset, uint256 price, uint256 timestamp);\\n  event EthPriceUpdated(uint256 price, uint256 timestamp);\\n\\n  function getAssetPrice(address asset) external view override returns (uint256) {\\n    return prices[asset];\\n  }\\n\\n  function setAssetPrice(address asset, uint256 price) external override {\\n    prices[asset] = price;\\n    emit AssetPriceUpdated(asset, price, block.timestamp);\\n  }\\n\\n  function getEthUsdPrice() external view returns (uint256) {\\n    return ethPriceUsd;\\n  }\\n\\n  function setEthUsdPrice(uint256 price) external {\\n    ethPriceUsd = price;\\n    emit EthPriceUpdated(price, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0x66d7b780168ce672614d6ee8e469ee28f90efc1d16bef53dcf7ebbfed9db545c\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":8414,"contract":"@aave/core-v3/contracts/mocks/oracle/PriceOracle.sol:PriceOracle","label":"prices","offset":0,"slot":"0","type":"t_mapping(t_address,t_uint256)"},{"astId":8416,"contract":"@aave/core-v3/contracts/mocks/oracle/PriceOracle.sol:PriceOracle","label":"ethPriceUsd","offset":0,"slot":"1","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"getAssetPrice(address)":{"notice":"Returns the asset price in the base currency"},"setAssetPrice(address,uint256)":{"notice":"Set the price of the asset"}},"version":1}}},"@aave/core-v3/contracts/mocks/tokens/MintableDelegationERC20.sol":{"MintableDelegationERC20":{"abi":[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"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":"delegateeAddress","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"delegatee","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"uint256","name":"value","type":"uint256"}],"name":"mint","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":"ERC20 minting logic with delegation","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}."},"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."},"mint(uint256)":{"details":"Function to mint tokens","params":{"value":"The amount of tokens to mint."},"returns":{"_0":"A boolean that indicates if the operation was successful."}},"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`."}},"title":"MintableDelegationERC20","version":1},"evm":{"bytecode":{"functionDebugData":{"@_828":{"entryPoint":null,"id":828,"parameterSlots":2,"returnSlots":0},"@_8521":{"entryPoint":null,"id":8521,"parameterSlots":3,"returnSlots":0},"@_setupDecimals_1267":{"entryPoint":null,"id":1267,"parameterSlots":1,"returnSlots":0},"abi_decode_string_fromMemory":{"entryPoint":314,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_uint8_fromMemory":{"entryPoint":497,"id":null,"parameterSlots":2,"returnSlots":3},"extract_byte_array_length":{"entryPoint":630,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x41":{"entryPoint":292,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2135:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"46:95:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"63:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"70:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"75:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"66:3:201"},"nodeType":"YulFunctionCall","src":"66:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"56:6:201"},"nodeType":"YulFunctionCall","src":"56:31:201"},"nodeType":"YulExpressionStatement","src":"56:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"103:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"106:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"96:6:201"},"nodeType":"YulFunctionCall","src":"96:15:201"},"nodeType":"YulExpressionStatement","src":"96:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"127:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"130:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"120:6:201"},"nodeType":"YulFunctionCall","src":"120:15:201"},"nodeType":"YulExpressionStatement","src":"120:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"14:127:201"},{"body":{"nodeType":"YulBlock","src":"210:821:201","statements":[{"body":{"nodeType":"YulBlock","src":"259:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"268:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"271:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"261:6:201"},"nodeType":"YulFunctionCall","src":"261:12:201"},"nodeType":"YulExpressionStatement","src":"261:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"238:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"246:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"234:3:201"},"nodeType":"YulFunctionCall","src":"234:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"253:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"230:3:201"},"nodeType":"YulFunctionCall","src":"230:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"223:6:201"},"nodeType":"YulFunctionCall","src":"223:35:201"},"nodeType":"YulIf","src":"220:55:201"},{"nodeType":"YulVariableDeclaration","src":"284:23:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"300:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"294:5:201"},"nodeType":"YulFunctionCall","src":"294:13:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"288:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"316:28:201","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"334:2:201","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"338:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"330:3:201"},"nodeType":"YulFunctionCall","src":"330:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"342:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"326:3:201"},"nodeType":"YulFunctionCall","src":"326:18:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"320:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"367:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"369:16:201"},"nodeType":"YulFunctionCall","src":"369:18:201"},"nodeType":"YulExpressionStatement","src":"369:18:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"359:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"363:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"356:2:201"},"nodeType":"YulFunctionCall","src":"356:10:201"},"nodeType":"YulIf","src":"353:36:201"},{"nodeType":"YulVariableDeclaration","src":"398:17:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"412:2:201","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"408:3:201"},"nodeType":"YulFunctionCall","src":"408:7:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"402:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"424:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"444:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"438:5:201"},"nodeType":"YulFunctionCall","src":"438:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"428:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"456:71:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"478:6:201"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"502:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"506:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"498:3:201"},"nodeType":"YulFunctionCall","src":"498:13:201"},{"name":"_3","nodeType":"YulIdentifier","src":"513:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"494:3:201"},"nodeType":"YulFunctionCall","src":"494:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"518:2:201","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"490:3:201"},"nodeType":"YulFunctionCall","src":"490:31:201"},{"name":"_3","nodeType":"YulIdentifier","src":"523:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"486:3:201"},"nodeType":"YulFunctionCall","src":"486:40:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"474:3:201"},"nodeType":"YulFunctionCall","src":"474:53:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"460:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"586:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"588:16:201"},"nodeType":"YulFunctionCall","src":"588:18:201"},"nodeType":"YulExpressionStatement","src":"588:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"545:10:201"},{"name":"_2","nodeType":"YulIdentifier","src":"557:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"542:2:201"},"nodeType":"YulFunctionCall","src":"542:18:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"565:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"577:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"562:2:201"},"nodeType":"YulFunctionCall","src":"562:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"539:2:201"},"nodeType":"YulFunctionCall","src":"539:46:201"},"nodeType":"YulIf","src":"536:72:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"624:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"628:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"617:6:201"},"nodeType":"YulFunctionCall","src":"617:22:201"},"nodeType":"YulExpressionStatement","src":"617:22:201"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"655:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"663:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"648:6:201"},"nodeType":"YulFunctionCall","src":"648:18:201"},"nodeType":"YulExpressionStatement","src":"648:18:201"},{"nodeType":"YulVariableDeclaration","src":"675:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"685:4:201","type":"","value":"0x20"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"679:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"735:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"744:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"747:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"737:6:201"},"nodeType":"YulFunctionCall","src":"737:12:201"},"nodeType":"YulExpressionStatement","src":"737:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"712:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"720:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"708:3:201"},"nodeType":"YulFunctionCall","src":"708:15:201"},{"name":"_4","nodeType":"YulIdentifier","src":"725:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"704:3:201"},"nodeType":"YulFunctionCall","src":"704:24:201"},{"name":"end","nodeType":"YulIdentifier","src":"730:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"701:2:201"},"nodeType":"YulFunctionCall","src":"701:33:201"},"nodeType":"YulIf","src":"698:53:201"},{"nodeType":"YulVariableDeclaration","src":"760:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"769:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"764:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"825:87:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"854:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"862:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"850:3:201"},"nodeType":"YulFunctionCall","src":"850:14:201"},{"name":"_4","nodeType":"YulIdentifier","src":"866:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"846:3:201"},"nodeType":"YulFunctionCall","src":"846:23:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"885:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"893:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"881:3:201"},"nodeType":"YulFunctionCall","src":"881:14:201"},{"name":"_4","nodeType":"YulIdentifier","src":"897:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"877:3:201"},"nodeType":"YulFunctionCall","src":"877:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"871:5:201"},"nodeType":"YulFunctionCall","src":"871:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"839:6:201"},"nodeType":"YulFunctionCall","src":"839:63:201"},"nodeType":"YulExpressionStatement","src":"839:63:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"790:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"793:2:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"787:2:201"},"nodeType":"YulFunctionCall","src":"787:9:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"797:19:201","statements":[{"nodeType":"YulAssignment","src":"799:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"808:1:201"},{"name":"_4","nodeType":"YulIdentifier","src":"811:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"804:3:201"},"nodeType":"YulFunctionCall","src":"804:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"799:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"783:3:201","statements":[]},"src":"779:133:201"},{"body":{"nodeType":"YulBlock","src":"942:59:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"971:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"979:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"967:3:201"},"nodeType":"YulFunctionCall","src":"967:15:201"},{"name":"_4","nodeType":"YulIdentifier","src":"984:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"963:3:201"},"nodeType":"YulFunctionCall","src":"963:24:201"},{"kind":"number","nodeType":"YulLiteral","src":"989:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"956:6:201"},"nodeType":"YulFunctionCall","src":"956:35:201"},"nodeType":"YulExpressionStatement","src":"956:35:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"927:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"930:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"924:2:201"},"nodeType":"YulFunctionCall","src":"924:9:201"},"nodeType":"YulIf","src":"921:80:201"},{"nodeType":"YulAssignment","src":"1010:15:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1019:6:201"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"1010:5:201"}]}]},"name":"abi_decode_string_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"184:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"192:3:201","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"200:5:201","type":""}],"src":"146:885:201"},{"body":{"nodeType":"YulBlock","src":"1169:579:201","statements":[{"body":{"nodeType":"YulBlock","src":"1215:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1224:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1227:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1217:6:201"},"nodeType":"YulFunctionCall","src":"1217:12:201"},"nodeType":"YulExpressionStatement","src":"1217:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1190:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1199:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1186:3:201"},"nodeType":"YulFunctionCall","src":"1186:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1211:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1182:3:201"},"nodeType":"YulFunctionCall","src":"1182:32:201"},"nodeType":"YulIf","src":"1179:52:201"},{"nodeType":"YulVariableDeclaration","src":"1240:30:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1260:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1254:5:201"},"nodeType":"YulFunctionCall","src":"1254:16:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1244:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1279:28:201","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1297:2:201","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"1301:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1293:3:201"},"nodeType":"YulFunctionCall","src":"1293:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"1305:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1289:3:201"},"nodeType":"YulFunctionCall","src":"1289:18:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1283:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1334:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1343:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1346:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1336:6:201"},"nodeType":"YulFunctionCall","src":"1336:12:201"},"nodeType":"YulExpressionStatement","src":"1336:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1322:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1330:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1319:2:201"},"nodeType":"YulFunctionCall","src":"1319:14:201"},"nodeType":"YulIf","src":"1316:34:201"},{"nodeType":"YulAssignment","src":"1359:71:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1402:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"1413:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1398:3:201"},"nodeType":"YulFunctionCall","src":"1398:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1422:7:201"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"1369:28:201"},"nodeType":"YulFunctionCall","src":"1369:61:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1359:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1439:41:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1465:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1476:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1461:3:201"},"nodeType":"YulFunctionCall","src":"1461:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1455:5:201"},"nodeType":"YulFunctionCall","src":"1455:25:201"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"1443:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1509:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1518:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1521:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1511:6:201"},"nodeType":"YulFunctionCall","src":"1511:12:201"},"nodeType":"YulExpressionStatement","src":"1511:12:201"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"1495:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1505:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1492:2:201"},"nodeType":"YulFunctionCall","src":"1492:16:201"},"nodeType":"YulIf","src":"1489:36:201"},{"nodeType":"YulAssignment","src":"1534:73:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1577:9:201"},{"name":"offset_1","nodeType":"YulIdentifier","src":"1588:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1573:3:201"},"nodeType":"YulFunctionCall","src":"1573:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1599:7:201"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"1544:28:201"},"nodeType":"YulFunctionCall","src":"1544:63:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1534:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1616:38:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1639:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1650:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1635:3:201"},"nodeType":"YulFunctionCall","src":"1635:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1629:5:201"},"nodeType":"YulFunctionCall","src":"1629:25:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1620:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1702:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1711:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1714:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1704:6:201"},"nodeType":"YulFunctionCall","src":"1704:12:201"},"nodeType":"YulExpressionStatement","src":"1704:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1676:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1687:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1694:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1683:3:201"},"nodeType":"YulFunctionCall","src":"1683:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1673:2:201"},"nodeType":"YulFunctionCall","src":"1673:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1666:6:201"},"nodeType":"YulFunctionCall","src":"1666:35:201"},"nodeType":"YulIf","src":"1663:55:201"},{"nodeType":"YulAssignment","src":"1727:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1737:5:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1727:6:201"}]}]},"name":"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_uint8_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1119:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1130:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1142:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1150:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1158:6:201","type":""}],"src":"1036:712:201"},{"body":{"nodeType":"YulBlock","src":"1808:325:201","statements":[{"nodeType":"YulAssignment","src":"1818:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1832:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"1835:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1828:3:201"},"nodeType":"YulFunctionCall","src":"1828:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"1818:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1849:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"1879:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"1885:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1875:3:201"},"nodeType":"YulFunctionCall","src":"1875:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"1853:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1926:31:201","statements":[{"nodeType":"YulAssignment","src":"1928:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1942:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1950:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1938:3:201"},"nodeType":"YulFunctionCall","src":"1938:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"1928:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"1906:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1899:6:201"},"nodeType":"YulFunctionCall","src":"1899:26:201"},"nodeType":"YulIf","src":"1896:61:201"},{"body":{"nodeType":"YulBlock","src":"2016:111:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2037:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2044:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2049:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2040:3:201"},"nodeType":"YulFunctionCall","src":"2040:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2030:6:201"},"nodeType":"YulFunctionCall","src":"2030:31:201"},"nodeType":"YulExpressionStatement","src":"2030:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2081:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2084:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2074:6:201"},"nodeType":"YulFunctionCall","src":"2074:15:201"},"nodeType":"YulExpressionStatement","src":"2074:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2109:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2112:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2102:6:201"},"nodeType":"YulFunctionCall","src":"2102:15:201"},"nodeType":"YulExpressionStatement","src":"2102:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"1972:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1995:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2003:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1992:2:201"},"nodeType":"YulFunctionCall","src":"1992:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1969:2:201"},"nodeType":"YulFunctionCall","src":"1969:38:201"},"nodeType":"YulIf","src":"1966:161:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"1788:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"1797:6:201","type":""}],"src":"1753:380:201"}]},"contents":"{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_string_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := mload(offset)\n        let _2 := sub(shl(64, 1), 1)\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        let _4 := 0x20\n        if gt(add(add(offset, _1), _4), end) { revert(0, 0) }\n        let i := 0\n        for { } lt(i, _1) { i := add(i, _4) }\n        {\n            mstore(add(add(memPtr, i), _4), mload(add(add(offset, i), _4)))\n        }\n        if gt(i, _1)\n        {\n            mstore(add(add(memPtr, _1), _4), 0)\n        }\n        array := memPtr\n    }\n    function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_uint8_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        value0 := abi_decode_string_fromMemory(add(headStart, offset), dataEnd)\n        let offset_1 := mload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_string_fromMemory(add(headStart, offset_1), dataEnd)\n        let value := mload(add(headStart, 64))\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value2 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60806040523480156200001157600080fd5b5060405162000f5738038062000f578339810160408190526200003491620001f1565b8251839083906200004d9060039060208501906200007e565b508051620000639060049060208401906200007e565b50506005805460ff191660ff841617905550505050620002b3565b8280546200008c9062000276565b90600052602060002090601f016020900481019282620000b05760008555620000fb565b82601f10620000cb57805160ff1916838001178555620000fb565b82800160010185558215620000fb579182015b82811115620000fb578251825591602001919060010190620000de565b50620001099291506200010d565b5090565b5b808211156200010957600081556001016200010e565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200014c57600080fd5b81516001600160401b038082111562000169576200016962000124565b604051601f8301601f19908116603f0116810190828211818310171562000194576200019462000124565b81604052838152602092508683858801011115620001b157600080fd5b600091505b83821015620001d55785820183015181830184015290820190620001b6565b83821115620001e75760008385830101525b9695505050505050565b6000806000606084860312156200020757600080fd5b83516001600160401b03808211156200021f57600080fd5b6200022d878388016200013a565b945060208601519150808211156200024457600080fd5b5062000253868287016200013a565b925050604084015160ff811681146200026b57600080fd5b809150509250925092565b600181811c908216806200028b57607f821691505b60208210811415620002ad57634e487b7160e01b600052602260045260246000fd5b50919050565b610c9480620002c36000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80635c19a95c1161008c578063a0712d6811610066578063a0712d6814610261578063a457c2d714610274578063a9059cbb14610287578063dd62ed3e1461029a57600080fd5b80635c19a95c146101c757806370a082311461022357806395d89b411461025957600080fd5b80631e31d053116100c85780631e31d0531461014257806323b872dd1461018c578063313ce5671461019f57806339509351146101b457600080fd5b806306fdde03146100ef578063095ea7b31461010d57806318160ddd14610130575b600080fd5b6100f76102e0565b6040516101049190610a27565b60405180910390f35b61012061011b366004610ac3565b610372565b6040519015158152602001610104565b6002545b604051908152602001610104565b60055461016790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610104565b61012061019a366004610aed565b610389565b60055460405160ff9091168152602001610104565b6101206101c2366004610ac3565b6103ff565b6102216101d5366004610b29565b6005805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b005b610134610231366004610b29565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100f7610442565b61012061026f366004610b4b565b610451565b610120610282366004610ac3565b610465565b610120610295366004610ac3565b6104c1565b6101346102a8366004610b64565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546102ef90610b97565b80601f016020809104026020016040519081016040528092919081815260200182805461031b90610b97565b80156103685780601f1061033d57610100808354040283529160200191610368565b820191906000526020600020905b81548152906001019060200180831161034b57829003601f168201915b5050505050905090565b600061037f3384846104ce565b5060015b92915050565b6000610396848484610687565b6103f584336103f085604051806060016040528060288152602001610c126028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260016020908152604080832033845290915290205491906108b1565b6104ce565b5060019392505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161037f9185906103f090866108f8565b6060600480546102ef90610b97565b600061045d3383610908565b506001919050565b600061037f33846103f085604051806060016040528060258152602001610c3a6025913933600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d16845290915290205491906108b1565b600061037f338484610687565b73ffffffffffffffffffffffffffffffffffffffff8316610575576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161056c565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff831661072a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161056c565b73ffffffffffffffffffffffffffffffffffffffff82166107cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161056c565b61081781604051806060016040528060268152602001610bec6026913973ffffffffffffffffffffffffffffffffffffffff861660009081526020819052604090205491906108b1565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220939093559084168152205461085390826108f8565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161067a565b81830381848211156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056c9190610a27565b509392505050565b8082018281101561038357600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216610985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161056c565b60025461099290826108f8565b60025573ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020546109c590826108f8565b73ffffffffffffffffffffffffffffffffffffffff8316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600060208083528351808285015260005b81811015610a5457858101830151858201604001528201610a38565b81811115610a66576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610abe57600080fd5b919050565b60008060408385031215610ad657600080fd5b610adf83610a9a565b946020939093013593505050565b600080600060608486031215610b0257600080fd5b610b0b84610a9a565b9250610b1960208501610a9a565b9150604084013590509250925092565b600060208284031215610b3b57600080fd5b610b4482610a9a565b9392505050565b600060208284031215610b5d57600080fd5b5035919050565b60008060408385031215610b7757600080fd5b610b8083610a9a565b9150610b8e60208401610a9a565b90509250929050565b600181811c90821680610bab57607f821691505b60208210811415610be5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b6e3b50f39cea5b62d110d729df0ae403e65f7b1966c93deb3ddd896326d4fe964736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0xF57 CODESIZE SUB DUP1 PUSH3 0xF57 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x1F1 JUMP JUMPDEST DUP3 MLOAD DUP4 SWAP1 DUP4 SWAP1 PUSH3 0x4D SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x7E JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x63 SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x7E JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF DUP5 AND OR SWAP1 SSTORE POP POP POP POP PUSH3 0x2B3 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x8C SWAP1 PUSH3 0x276 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0xB0 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0xFB JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0xCB JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0xFB JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0xFB JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0xFB JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0xDE JUMP JUMPDEST POP PUSH3 0x109 SWAP3 SWAP2 POP PUSH3 0x10D JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x109 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x10E JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x14C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x169 JUMPI PUSH3 0x169 PUSH3 0x124 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x194 JUMPI PUSH3 0x194 PUSH3 0x124 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 SWAP3 POP DUP7 DUP4 DUP6 DUP9 ADD ADD GT ISZERO PUSH3 0x1B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP4 DUP3 LT ISZERO PUSH3 0x1D5 JUMPI DUP6 DUP3 ADD DUP4 ADD MLOAD DUP2 DUP4 ADD DUP5 ADD MSTORE SWAP1 DUP3 ADD SWAP1 PUSH3 0x1B6 JUMP JUMPDEST DUP4 DUP3 GT ISZERO PUSH3 0x1E7 JUMPI PUSH1 0x0 DUP4 DUP6 DUP4 ADD ADD MSTORE JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x207 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x21F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x22D DUP8 DUP4 DUP9 ADD PUSH3 0x13A JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x244 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x253 DUP7 DUP3 DUP8 ADD PUSH3 0x13A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH3 0x26B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x28B JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x2AD JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xC94 DUP1 PUSH3 0x2C3 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 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C19A95C GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xA0712D68 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA0712D68 EQ PUSH2 0x261 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x274 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x29A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5C19A95C EQ PUSH2 0x1C7 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x223 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x259 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1E31D053 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x1E31D053 EQ PUSH2 0x142 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x18C JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x19F JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x10D JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x130 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF7 PUSH2 0x2E0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x104 SWAP2 SWAP1 PUSH2 0xA27 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x120 PUSH2 0x11B CALLDATASIZE PUSH1 0x4 PUSH2 0xAC3 JUMP JUMPDEST PUSH2 0x372 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x104 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x104 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH2 0x167 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x104 JUMP JUMPDEST PUSH2 0x120 PUSH2 0x19A CALLDATASIZE PUSH1 0x4 PUSH2 0xAED JUMP JUMPDEST PUSH2 0x389 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x104 JUMP JUMPDEST PUSH2 0x120 PUSH2 0x1C2 CALLDATASIZE PUSH1 0x4 PUSH2 0xAC3 JUMP JUMPDEST PUSH2 0x3FF JUMP JUMPDEST PUSH2 0x221 PUSH2 0x1D5 CALLDATASIZE PUSH1 0x4 PUSH2 0xB29 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 STOP JUMPDEST PUSH2 0x134 PUSH2 0x231 CALLDATASIZE PUSH1 0x4 PUSH2 0xB29 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xF7 PUSH2 0x442 JUMP JUMPDEST PUSH2 0x120 PUSH2 0x26F CALLDATASIZE PUSH1 0x4 PUSH2 0xB4B JUMP JUMPDEST PUSH2 0x451 JUMP JUMPDEST PUSH2 0x120 PUSH2 0x282 CALLDATASIZE PUSH1 0x4 PUSH2 0xAC3 JUMP JUMPDEST PUSH2 0x465 JUMP JUMPDEST PUSH2 0x120 PUSH2 0x295 CALLDATASIZE PUSH1 0x4 PUSH2 0xAC3 JUMP JUMPDEST PUSH2 0x4C1 JUMP JUMPDEST PUSH2 0x134 PUSH2 0x2A8 CALLDATASIZE PUSH1 0x4 PUSH2 0xB64 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 PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x2EF SWAP1 PUSH2 0xB97 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x31B SWAP1 PUSH2 0xB97 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x368 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x33D JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x368 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 0x34B JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37F CALLER DUP5 DUP5 PUSH2 0x4CE JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x396 DUP5 DUP5 DUP5 PUSH2 0x687 JUMP JUMPDEST PUSH2 0x3F5 DUP5 CALLER PUSH2 0x3F0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC12 PUSH1 0x28 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x8B1 JUMP JUMPDEST PUSH2 0x4CE JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP 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 0x37F SWAP2 DUP6 SWAP1 PUSH2 0x3F0 SWAP1 DUP7 PUSH2 0x8F8 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x2EF SWAP1 PUSH2 0xB97 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x45D CALLER DUP4 PUSH2 0x908 JUMP JUMPDEST POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37F CALLER DUP5 PUSH2 0x3F0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC3A PUSH1 0x25 SWAP2 CODECOPY CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x8B1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37F CALLER DUP5 DUP5 PUSH2 0x687 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x575 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7265737300000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x618 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7373000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x56C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x72A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6472657373000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x56C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x7CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6573730000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x56C JUMP JUMPDEST PUSH2 0x817 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xBEC PUSH1 0x26 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x8B1 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 0x853 SWAP1 DUP3 PUSH2 0x8F8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE MLOAD DUP5 DUP2 MSTORE SWAP1 SWAP3 SWAP2 DUP7 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH2 0x67A JUMP JUMPDEST DUP2 DUP4 SUB DUP2 DUP5 DUP3 GT ISZERO PUSH2 0x8F0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x56C SWAP2 SWAP1 PUSH2 0xA27 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x383 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x985 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x56C JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x992 SWAP1 DUP3 PUSH2 0x8F8 JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x9C5 SWAP1 DUP3 PUSH2 0x8F8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP3 MLOAD DUP5 DUP2 MSTORE SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA54 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xA38 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xA66 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xABE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xAD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xADF DUP4 PUSH2 0xA9A JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xB02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB0B DUP5 PUSH2 0xA9A JUMP JUMPDEST SWAP3 POP PUSH2 0xB19 PUSH1 0x20 DUP6 ADD PUSH2 0xA9A JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB44 DUP3 PUSH2 0xA9A JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xB77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB80 DUP4 PUSH2 0xA9A JUMP JUMPDEST SWAP2 POP PUSH2 0xB8E PUSH1 0x20 DUP5 ADD PUSH2 0xA9A JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0xBAB JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0xBE5 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x2062616C616E636545524332303A207472616E73 PUSH7 0x657220616D6F75 PUSH15 0x74206578636565647320616C6C6F77 PUSH2 0x6E63 PUSH6 0x45524332303A KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220B6E3 0xB5 0xF CODECOPY 0xCE 0xA5 0xB6 0x2D GT 0xD PUSH19 0x9DF0AE403E65F7B1966C93DEB3DDD896326D4F 0xE9 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"296:597:59:-:0;;;389:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2007:12:6;;465:4:59;;471:6;;2007:12:6;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;2025:16:6;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;;2047:9:6;:14;;-1:-1:-1;;2047:14:6;9620:21;;;;;;-1:-1:-1;389:125:59;;;296:597;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;296:597:59;;;-1:-1:-1;296:597:59;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:127:201;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:885;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:201;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:201;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;730:3;725:2;720;712:6;708:15;704:24;701:33;698:53;;;747:1;744;737:12;698:53;769:1;760:10;;779:133;793:2;790:1;787:9;779:133;;;881:14;;;877:23;;871:30;850:14;;;846:23;;839:63;804:10;;;;779:133;;;930:2;927:1;924:9;921:80;;;989:1;984:2;979;971:6;967:15;963:24;956:35;921:80;1019:6;146:885;-1:-1:-1;;;;;;146:885:201:o;1036:712::-;1142:6;1150;1158;1211:2;1199:9;1190:7;1186:23;1182:32;1179:52;;;1227:1;1224;1217:12;1179:52;1254:16;;-1:-1:-1;;;;;1319:14:201;;;1316:34;;;1346:1;1343;1336:12;1316:34;1369:61;1422:7;1413:6;1402:9;1398:22;1369:61;:::i;:::-;1359:71;;1476:2;1465:9;1461:18;1455:25;1439:41;;1505:2;1495:8;1492:16;1489:36;;;1521:1;1518;1511:12;1489:36;;1544:63;1599:7;1588:8;1577:9;1573:24;1544:63;:::i;:::-;1534:73;;;1650:2;1639:9;1635:18;1629:25;1694:4;1687:5;1683:16;1676:5;1673:27;1663:55;;1714:1;1711;1704:12;1663:55;1737:5;1727:15;;;1036:712;;;;;:::o;1753:380::-;1832:1;1828:12;;;;1875;;;1896:61;;1950:4;1942:6;1938:17;1928:27;;1896:61;2003:2;1995:6;1992:14;1972:18;1969:38;1966:161;;;2049:10;2044:3;2040:20;2037:1;2030:31;2084:4;2081:1;2074:15;2112:4;2109:1;2102:15;1966:161;;1753:380;;;:::o;:::-;296:597:59;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_approve_1256":{"entryPoint":1230,"id":1256,"parameterSlots":3,"returnSlots":0},"@_beforeTokenTransfer_1278":{"entryPoint":null,"id":1278,"parameterSlots":3,"returnSlots":0},"@_mint_1155":{"entryPoint":2312,"id":1155,"parameterSlots":2,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_transfer_1100":{"entryPoint":1671,"id":1100,"parameterSlots":3,"returnSlots":0},"@add_2216":{"entryPoint":2296,"id":2216,"parameterSlots":2,"returnSlots":1},"@allowance_918":{"entryPoint":null,"id":918,"parameterSlots":2,"returnSlots":1},"@approve_939":{"entryPoint":882,"id":939,"parameterSlots":2,"returnSlots":1},"@balanceOf_879":{"entryPoint":null,"id":879,"parameterSlots":1,"returnSlots":1},"@decimals_855":{"entryPoint":null,"id":855,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_1034":{"entryPoint":1125,"id":1034,"parameterSlots":2,"returnSlots":1},"@delegate_8549":{"entryPoint":null,"id":8549,"parameterSlots":1,"returnSlots":0},"@delegatee_8503":{"entryPoint":null,"id":8503,"parameterSlots":0,"returnSlots":0},"@increaseAllowance_1005":{"entryPoint":1023,"id":1005,"parameterSlots":2,"returnSlots":1},"@mint_8538":{"entryPoint":1105,"id":8538,"parameterSlots":1,"returnSlots":1},"@name_837":{"entryPoint":736,"id":837,"parameterSlots":0,"returnSlots":1},"@sub_2265":{"entryPoint":2225,"id":2265,"parameterSlots":3,"returnSlots":1},"@symbol_846":{"entryPoint":1090,"id":846,"parameterSlots":0,"returnSlots":1},"@totalSupply_865":{"entryPoint":null,"id":865,"parameterSlots":0,"returnSlots":1},"@transferFrom_977":{"entryPoint":905,"id":977,"parameterSlots":3,"returnSlots":1},"@transfer_900":{"entryPoint":1217,"id":900,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":2714,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":2857,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":2916,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":2797,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":2755,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256":{"entryPoint":2891,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":2599,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":2967,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:5320:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"135:535:201","statements":[{"nodeType":"YulVariableDeclaration","src":"145:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"155:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"149:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"173:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"184:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"166:6:201"},"nodeType":"YulFunctionCall","src":"166:21:201"},"nodeType":"YulExpressionStatement","src":"166:21:201"},{"nodeType":"YulVariableDeclaration","src":"196:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"216:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:201"},"nodeType":"YulFunctionCall","src":"210:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"200:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"243:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"254:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"239:3:201"},"nodeType":"YulFunctionCall","src":"239:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"259:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"232:6:201"},"nodeType":"YulFunctionCall","src":"232:34:201"},"nodeType":"YulExpressionStatement","src":"232:34:201"},{"nodeType":"YulVariableDeclaration","src":"275:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"284:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"279:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"344:90:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"373:9:201"},{"name":"i","nodeType":"YulIdentifier","src":"384:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"369:3:201"},"nodeType":"YulFunctionCall","src":"369:17:201"},{"kind":"number","nodeType":"YulLiteral","src":"388:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"365:3:201"},"nodeType":"YulFunctionCall","src":"365:26:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"407:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"415:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"403:3:201"},"nodeType":"YulFunctionCall","src":"403:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"419:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"399:3:201"},"nodeType":"YulFunctionCall","src":"399:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"393:5:201"},"nodeType":"YulFunctionCall","src":"393:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"358:6:201"},"nodeType":"YulFunctionCall","src":"358:66:201"},"nodeType":"YulExpressionStatement","src":"358:66:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"305:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"308:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"302:2:201"},"nodeType":"YulFunctionCall","src":"302:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"316:19:201","statements":[{"nodeType":"YulAssignment","src":"318:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"327:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"330:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"323:3:201"},"nodeType":"YulFunctionCall","src":"323:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"318:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"298:3:201","statements":[]},"src":"294:140:201"},{"body":{"nodeType":"YulBlock","src":"468:66:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"497:9:201"},{"name":"length","nodeType":"YulIdentifier","src":"508:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"493:3:201"},"nodeType":"YulFunctionCall","src":"493:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"517:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"489:3:201"},"nodeType":"YulFunctionCall","src":"489:31:201"},{"kind":"number","nodeType":"YulLiteral","src":"522:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"482:6:201"},"nodeType":"YulFunctionCall","src":"482:42:201"},"nodeType":"YulExpressionStatement","src":"482:42:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"449:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"452:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"446:2:201"},"nodeType":"YulFunctionCall","src":"446:13:201"},"nodeType":"YulIf","src":"443:91:201"},{"nodeType":"YulAssignment","src":"543:121:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"559:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"578:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"586:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"574:3:201"},"nodeType":"YulFunctionCall","src":"574:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"591:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"570:3:201"},"nodeType":"YulFunctionCall","src":"570:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"555:3:201"},"nodeType":"YulFunctionCall","src":"555:104:201"},{"kind":"number","nodeType":"YulLiteral","src":"661:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"551:3:201"},"nodeType":"YulFunctionCall","src":"551:113:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"543:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"104:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"115:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"126:4:201","type":""}],"src":"14:656:201"},{"body":{"nodeType":"YulBlock","src":"724:147:201","statements":[{"nodeType":"YulAssignment","src":"734:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"756:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"743:12:201"},"nodeType":"YulFunctionCall","src":"743:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"734:5:201"}]},{"body":{"nodeType":"YulBlock","src":"849:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"858:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"861:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"851:6:201"},"nodeType":"YulFunctionCall","src":"851:12:201"},"nodeType":"YulExpressionStatement","src":"851:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"785:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"796:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"803:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"792:3:201"},"nodeType":"YulFunctionCall","src":"792:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"782:2:201"},"nodeType":"YulFunctionCall","src":"782:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"775:6:201"},"nodeType":"YulFunctionCall","src":"775:73:201"},"nodeType":"YulIf","src":"772:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"703:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"714:5:201","type":""}],"src":"675:196:201"},{"body":{"nodeType":"YulBlock","src":"963:167:201","statements":[{"body":{"nodeType":"YulBlock","src":"1009:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1018:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1021:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1011:6:201"},"nodeType":"YulFunctionCall","src":"1011:12:201"},"nodeType":"YulExpressionStatement","src":"1011:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"984:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"993:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"980:3:201"},"nodeType":"YulFunctionCall","src":"980:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1005:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"976:3:201"},"nodeType":"YulFunctionCall","src":"976:32:201"},"nodeType":"YulIf","src":"973:52:201"},{"nodeType":"YulAssignment","src":"1034:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1063:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1044:18:201"},"nodeType":"YulFunctionCall","src":"1044:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1034:6:201"}]},{"nodeType":"YulAssignment","src":"1082:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1109:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1120:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1105:3:201"},"nodeType":"YulFunctionCall","src":"1105:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1092:12:201"},"nodeType":"YulFunctionCall","src":"1092:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1082:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"921:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"932:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"944:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"952:6:201","type":""}],"src":"876:254:201"},{"body":{"nodeType":"YulBlock","src":"1230:92:201","statements":[{"nodeType":"YulAssignment","src":"1240:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1252:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1263:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1248:3:201"},"nodeType":"YulFunctionCall","src":"1248:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1240:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1282:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1307:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1300:6:201"},"nodeType":"YulFunctionCall","src":"1300:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1293:6:201"},"nodeType":"YulFunctionCall","src":"1293:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1275:6:201"},"nodeType":"YulFunctionCall","src":"1275:41:201"},"nodeType":"YulExpressionStatement","src":"1275:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1199:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1210:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1221:4:201","type":""}],"src":"1135:187:201"},{"body":{"nodeType":"YulBlock","src":"1428:76:201","statements":[{"nodeType":"YulAssignment","src":"1438:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1450:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1461:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1446:3:201"},"nodeType":"YulFunctionCall","src":"1446:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1438:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1480:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"1491:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1473:6:201"},"nodeType":"YulFunctionCall","src":"1473:25:201"},"nodeType":"YulExpressionStatement","src":"1473:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1397:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1408:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1419:4:201","type":""}],"src":"1327:177:201"},{"body":{"nodeType":"YulBlock","src":"1610:125:201","statements":[{"nodeType":"YulAssignment","src":"1620:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1632:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1643:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1628:3:201"},"nodeType":"YulFunctionCall","src":"1628:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1620:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1662:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1677:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1685:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1673:3:201"},"nodeType":"YulFunctionCall","src":"1673:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1655:6:201"},"nodeType":"YulFunctionCall","src":"1655:74:201"},"nodeType":"YulExpressionStatement","src":"1655:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1579:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1590:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1601:4:201","type":""}],"src":"1509:226:201"},{"body":{"nodeType":"YulBlock","src":"1844:224:201","statements":[{"body":{"nodeType":"YulBlock","src":"1890:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1899:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1902:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1892:6:201"},"nodeType":"YulFunctionCall","src":"1892:12:201"},"nodeType":"YulExpressionStatement","src":"1892:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1865:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1874:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1861:3:201"},"nodeType":"YulFunctionCall","src":"1861:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1886:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1857:3:201"},"nodeType":"YulFunctionCall","src":"1857:32:201"},"nodeType":"YulIf","src":"1854:52:201"},{"nodeType":"YulAssignment","src":"1915:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1944:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1925:18:201"},"nodeType":"YulFunctionCall","src":"1925:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1915:6:201"}]},{"nodeType":"YulAssignment","src":"1963:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1996:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2007:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1992:3:201"},"nodeType":"YulFunctionCall","src":"1992:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1973:18:201"},"nodeType":"YulFunctionCall","src":"1973:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1963:6:201"}]},{"nodeType":"YulAssignment","src":"2020:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2047:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2058:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2043:3:201"},"nodeType":"YulFunctionCall","src":"2043:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2030:12:201"},"nodeType":"YulFunctionCall","src":"2030:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2020:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1794:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1805:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1817:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1825:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1833:6:201","type":""}],"src":"1740:328:201"},{"body":{"nodeType":"YulBlock","src":"2170:87:201","statements":[{"nodeType":"YulAssignment","src":"2180:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2192:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2203:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2188:3:201"},"nodeType":"YulFunctionCall","src":"2188:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2180:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2222:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2237:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2245:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2233:3:201"},"nodeType":"YulFunctionCall","src":"2233:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2215:6:201"},"nodeType":"YulFunctionCall","src":"2215:36:201"},"nodeType":"YulExpressionStatement","src":"2215:36:201"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2139:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2150:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2161:4:201","type":""}],"src":"2073:184:201"},{"body":{"nodeType":"YulBlock","src":"2332:116:201","statements":[{"body":{"nodeType":"YulBlock","src":"2378:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2387:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2390:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2380:6:201"},"nodeType":"YulFunctionCall","src":"2380:12:201"},"nodeType":"YulExpressionStatement","src":"2380:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2353:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2362:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2349:3:201"},"nodeType":"YulFunctionCall","src":"2349:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2374:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2345:3:201"},"nodeType":"YulFunctionCall","src":"2345:32:201"},"nodeType":"YulIf","src":"2342:52:201"},{"nodeType":"YulAssignment","src":"2403:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2432:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2413:18:201"},"nodeType":"YulFunctionCall","src":"2413:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2403:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2298:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2309:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2321:6:201","type":""}],"src":"2262:186:201"},{"body":{"nodeType":"YulBlock","src":"2523:110:201","statements":[{"body":{"nodeType":"YulBlock","src":"2569:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2578:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2581:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2571:6:201"},"nodeType":"YulFunctionCall","src":"2571:12:201"},"nodeType":"YulExpressionStatement","src":"2571:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2544:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2553:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2540:3:201"},"nodeType":"YulFunctionCall","src":"2540:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2565:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2536:3:201"},"nodeType":"YulFunctionCall","src":"2536:32:201"},"nodeType":"YulIf","src":"2533:52:201"},{"nodeType":"YulAssignment","src":"2594:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2617:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2604:12:201"},"nodeType":"YulFunctionCall","src":"2604:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2594:6:201"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2489:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2500:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2512:6:201","type":""}],"src":"2453:180:201"},{"body":{"nodeType":"YulBlock","src":"2725:173:201","statements":[{"body":{"nodeType":"YulBlock","src":"2771:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2780:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2783:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2773:6:201"},"nodeType":"YulFunctionCall","src":"2773:12:201"},"nodeType":"YulExpressionStatement","src":"2773:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2746:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2755:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2742:3:201"},"nodeType":"YulFunctionCall","src":"2742:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2767:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2738:3:201"},"nodeType":"YulFunctionCall","src":"2738:32:201"},"nodeType":"YulIf","src":"2735:52:201"},{"nodeType":"YulAssignment","src":"2796:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2825:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2806:18:201"},"nodeType":"YulFunctionCall","src":"2806:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2796:6:201"}]},{"nodeType":"YulAssignment","src":"2844:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2877:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2888:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2873:3:201"},"nodeType":"YulFunctionCall","src":"2873:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2854:18:201"},"nodeType":"YulFunctionCall","src":"2854:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2844:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2683:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2694:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2706:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2714:6:201","type":""}],"src":"2638:260:201"},{"body":{"nodeType":"YulBlock","src":"2958:382:201","statements":[{"nodeType":"YulAssignment","src":"2968:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2982:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"2985:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2978:3:201"},"nodeType":"YulFunctionCall","src":"2978:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2968:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2999:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"3029:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"3035:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3025:3:201"},"nodeType":"YulFunctionCall","src":"3025:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"3003:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3076:31:201","statements":[{"nodeType":"YulAssignment","src":"3078:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3092:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3100:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3088:3:201"},"nodeType":"YulFunctionCall","src":"3088:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3078:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3056:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3049:6:201"},"nodeType":"YulFunctionCall","src":"3049:26:201"},"nodeType":"YulIf","src":"3046:61:201"},{"body":{"nodeType":"YulBlock","src":"3166:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3187:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3190:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3180:6:201"},"nodeType":"YulFunctionCall","src":"3180:88:201"},"nodeType":"YulExpressionStatement","src":"3180:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3288:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3291:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3281:6:201"},"nodeType":"YulFunctionCall","src":"3281:15:201"},"nodeType":"YulExpressionStatement","src":"3281:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3316:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3319:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3309:6:201"},"nodeType":"YulFunctionCall","src":"3309:15:201"},"nodeType":"YulExpressionStatement","src":"3309:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3122:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3145:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3153:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3142:2:201"},"nodeType":"YulFunctionCall","src":"3142:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3119:2:201"},"nodeType":"YulFunctionCall","src":"3119:38:201"},"nodeType":"YulIf","src":"3116:218:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"2938:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"2947:6:201","type":""}],"src":"2903:437:201"},{"body":{"nodeType":"YulBlock","src":"3519:226:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3536:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3547:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3529:6:201"},"nodeType":"YulFunctionCall","src":"3529:21:201"},"nodeType":"YulExpressionStatement","src":"3529:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3570:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3581:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3566:3:201"},"nodeType":"YulFunctionCall","src":"3566:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"3586:2:201","type":"","value":"36"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3559:6:201"},"nodeType":"YulFunctionCall","src":"3559:30:201"},"nodeType":"YulExpressionStatement","src":"3559:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3609:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3620:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3605:3:201"},"nodeType":"YulFunctionCall","src":"3605:18:201"},{"hexValue":"45524332303a20617070726f76652066726f6d20746865207a65726f20616464","kind":"string","nodeType":"YulLiteral","src":"3625:34:201","type":"","value":"ERC20: approve from the zero add"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3598:6:201"},"nodeType":"YulFunctionCall","src":"3598:62:201"},"nodeType":"YulExpressionStatement","src":"3598:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3680:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3691:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3676:3:201"},"nodeType":"YulFunctionCall","src":"3676:18:201"},{"hexValue":"72657373","kind":"string","nodeType":"YulLiteral","src":"3696:6:201","type":"","value":"ress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3669:6:201"},"nodeType":"YulFunctionCall","src":"3669:34:201"},"nodeType":"YulExpressionStatement","src":"3669:34:201"},{"nodeType":"YulAssignment","src":"3712:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3724:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3735:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3720:3:201"},"nodeType":"YulFunctionCall","src":"3720:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3712:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3496:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3510:4:201","type":""}],"src":"3345:400:201"},{"body":{"nodeType":"YulBlock","src":"3924:224:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3941:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3952:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3934:6:201"},"nodeType":"YulFunctionCall","src":"3934:21:201"},"nodeType":"YulExpressionStatement","src":"3934:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3975:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3986:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3971:3:201"},"nodeType":"YulFunctionCall","src":"3971:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"3991:2:201","type":"","value":"34"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3964:6:201"},"nodeType":"YulFunctionCall","src":"3964:30:201"},"nodeType":"YulExpressionStatement","src":"3964:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4014:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4025:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4010:3:201"},"nodeType":"YulFunctionCall","src":"4010:18:201"},{"hexValue":"45524332303a20617070726f766520746f20746865207a65726f206164647265","kind":"string","nodeType":"YulLiteral","src":"4030:34:201","type":"","value":"ERC20: approve to the zero addre"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4003:6:201"},"nodeType":"YulFunctionCall","src":"4003:62:201"},"nodeType":"YulExpressionStatement","src":"4003:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4085:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4096:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4081:3:201"},"nodeType":"YulFunctionCall","src":"4081:18:201"},{"hexValue":"7373","kind":"string","nodeType":"YulLiteral","src":"4101:4:201","type":"","value":"ss"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4074:6:201"},"nodeType":"YulFunctionCall","src":"4074:32:201"},"nodeType":"YulExpressionStatement","src":"4074:32:201"},{"nodeType":"YulAssignment","src":"4115:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4127:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4138:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4123:3:201"},"nodeType":"YulFunctionCall","src":"4123:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4115:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3901:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3915:4:201","type":""}],"src":"3750:398:201"},{"body":{"nodeType":"YulBlock","src":"4327:227:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4344:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4355:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4337:6:201"},"nodeType":"YulFunctionCall","src":"4337:21:201"},"nodeType":"YulExpressionStatement","src":"4337:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4378:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4389:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4374:3:201"},"nodeType":"YulFunctionCall","src":"4374:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"4394:2:201","type":"","value":"37"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4367:6:201"},"nodeType":"YulFunctionCall","src":"4367:30:201"},"nodeType":"YulExpressionStatement","src":"4367:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4417:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4428:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4413:3:201"},"nodeType":"YulFunctionCall","src":"4413:18:201"},{"hexValue":"45524332303a207472616e736665722066726f6d20746865207a65726f206164","kind":"string","nodeType":"YulLiteral","src":"4433:34:201","type":"","value":"ERC20: transfer from the zero ad"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4406:6:201"},"nodeType":"YulFunctionCall","src":"4406:62:201"},"nodeType":"YulExpressionStatement","src":"4406:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4488:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4499:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4484:3:201"},"nodeType":"YulFunctionCall","src":"4484:18:201"},{"hexValue":"6472657373","kind":"string","nodeType":"YulLiteral","src":"4504:7:201","type":"","value":"dress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4477:6:201"},"nodeType":"YulFunctionCall","src":"4477:35:201"},"nodeType":"YulExpressionStatement","src":"4477:35:201"},{"nodeType":"YulAssignment","src":"4521:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4533:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4544:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4529:3:201"},"nodeType":"YulFunctionCall","src":"4529:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4521:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4304:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4318:4:201","type":""}],"src":"4153:401:201"},{"body":{"nodeType":"YulBlock","src":"4733:225:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4750:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4761:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4743:6:201"},"nodeType":"YulFunctionCall","src":"4743:21:201"},"nodeType":"YulExpressionStatement","src":"4743:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4784:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4795:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4780:3:201"},"nodeType":"YulFunctionCall","src":"4780:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"4800:2:201","type":"","value":"35"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4773:6:201"},"nodeType":"YulFunctionCall","src":"4773:30:201"},"nodeType":"YulExpressionStatement","src":"4773:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4823:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4834:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4819:3:201"},"nodeType":"YulFunctionCall","src":"4819:18:201"},{"hexValue":"45524332303a207472616e7366657220746f20746865207a65726f2061646472","kind":"string","nodeType":"YulLiteral","src":"4839:34:201","type":"","value":"ERC20: transfer to the zero addr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4812:6:201"},"nodeType":"YulFunctionCall","src":"4812:62:201"},"nodeType":"YulExpressionStatement","src":"4812:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4894:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4905:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4890:3:201"},"nodeType":"YulFunctionCall","src":"4890:18:201"},{"hexValue":"657373","kind":"string","nodeType":"YulLiteral","src":"4910:5:201","type":"","value":"ess"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4883:6:201"},"nodeType":"YulFunctionCall","src":"4883:33:201"},"nodeType":"YulExpressionStatement","src":"4883:33:201"},{"nodeType":"YulAssignment","src":"4925:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4937:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4948:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4933:3:201"},"nodeType":"YulFunctionCall","src":"4933:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4925:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4710:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4724:4:201","type":""}],"src":"4559:399:201"},{"body":{"nodeType":"YulBlock","src":"5137:181:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5154:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5165:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5147:6:201"},"nodeType":"YulFunctionCall","src":"5147:21:201"},"nodeType":"YulExpressionStatement","src":"5147:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5188:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5199:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5184:3:201"},"nodeType":"YulFunctionCall","src":"5184:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"5204:2:201","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5177:6:201"},"nodeType":"YulFunctionCall","src":"5177:30:201"},"nodeType":"YulExpressionStatement","src":"5177:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5227:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5238:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5223:3:201"},"nodeType":"YulFunctionCall","src":"5223:18:201"},{"hexValue":"45524332303a206d696e7420746f20746865207a65726f2061646472657373","kind":"string","nodeType":"YulLiteral","src":"5243:33:201","type":"","value":"ERC20: mint to the zero address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5216:6:201"},"nodeType":"YulFunctionCall","src":"5216:61:201"},"nodeType":"YulExpressionStatement","src":"5216:61:201"},{"nodeType":"YulAssignment","src":"5286:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5298:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5309:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5294:3:201"},"nodeType":"YulFunctionCall","src":"5294:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5286:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5114:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5128:4:201","type":""}],"src":"4963:355:201"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"ERC20: approve from the zero add\")\n        mstore(add(headStart, 96), \"ress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ERC20: approve to the zero addre\")\n        mstore(add(headStart, 96), \"ss\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC20: transfer from the zero ad\")\n        mstore(add(headStart, 96), \"dress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 35)\n        mstore(add(headStart, 64), \"ERC20: transfer to the zero addr\")\n        mstore(add(headStart, 96), \"ess\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ERC20: mint to the zero address\")\n        tail := add(headStart, 96)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100ea5760003560e01c80635c19a95c1161008c578063a0712d6811610066578063a0712d6814610261578063a457c2d714610274578063a9059cbb14610287578063dd62ed3e1461029a57600080fd5b80635c19a95c146101c757806370a082311461022357806395d89b411461025957600080fd5b80631e31d053116100c85780631e31d0531461014257806323b872dd1461018c578063313ce5671461019f57806339509351146101b457600080fd5b806306fdde03146100ef578063095ea7b31461010d57806318160ddd14610130575b600080fd5b6100f76102e0565b6040516101049190610a27565b60405180910390f35b61012061011b366004610ac3565b610372565b6040519015158152602001610104565b6002545b604051908152602001610104565b60055461016790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610104565b61012061019a366004610aed565b610389565b60055460405160ff9091168152602001610104565b6101206101c2366004610ac3565b6103ff565b6102216101d5366004610b29565b6005805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b005b610134610231366004610b29565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100f7610442565b61012061026f366004610b4b565b610451565b610120610282366004610ac3565b610465565b610120610295366004610ac3565b6104c1565b6101346102a8366004610b64565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546102ef90610b97565b80601f016020809104026020016040519081016040528092919081815260200182805461031b90610b97565b80156103685780601f1061033d57610100808354040283529160200191610368565b820191906000526020600020905b81548152906001019060200180831161034b57829003601f168201915b5050505050905090565b600061037f3384846104ce565b5060015b92915050565b6000610396848484610687565b6103f584336103f085604051806060016040528060288152602001610c126028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260016020908152604080832033845290915290205491906108b1565b6104ce565b5060019392505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161037f9185906103f090866108f8565b6060600480546102ef90610b97565b600061045d3383610908565b506001919050565b600061037f33846103f085604051806060016040528060258152602001610c3a6025913933600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d16845290915290205491906108b1565b600061037f338484610687565b73ffffffffffffffffffffffffffffffffffffffff8316610575576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161056c565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff831661072a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161056c565b73ffffffffffffffffffffffffffffffffffffffff82166107cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161056c565b61081781604051806060016040528060268152602001610bec6026913973ffffffffffffffffffffffffffffffffffffffff861660009081526020819052604090205491906108b1565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220939093559084168152205461085390826108f8565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161067a565b81830381848211156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056c9190610a27565b509392505050565b8082018281101561038357600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216610985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161056c565b60025461099290826108f8565b60025573ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020546109c590826108f8565b73ffffffffffffffffffffffffffffffffffffffff8316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600060208083528351808285015260005b81811015610a5457858101830151858201604001528201610a38565b81811115610a66576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610abe57600080fd5b919050565b60008060408385031215610ad657600080fd5b610adf83610a9a565b946020939093013593505050565b600080600060608486031215610b0257600080fd5b610b0b84610a9a565b9250610b1960208501610a9a565b9150604084013590509250925092565b600060208284031215610b3b57600080fd5b610b4482610a9a565b9392505050565b600060208284031215610b5d57600080fd5b5035919050565b60008060408385031215610b7757600080fd5b610b8083610a9a565b9150610b8e60208401610a9a565b90509250929050565b600181811c90821680610bab57607f821691505b60208210811415610be5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b6e3b50f39cea5b62d110d729df0ae403e65f7b1966c93deb3ddd896326d4fe964736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C19A95C GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xA0712D68 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA0712D68 EQ PUSH2 0x261 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x274 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x29A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5C19A95C EQ PUSH2 0x1C7 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x223 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x259 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1E31D053 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x1E31D053 EQ PUSH2 0x142 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x18C JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x19F JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x10D JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x130 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF7 PUSH2 0x2E0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x104 SWAP2 SWAP1 PUSH2 0xA27 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x120 PUSH2 0x11B CALLDATASIZE PUSH1 0x4 PUSH2 0xAC3 JUMP JUMPDEST PUSH2 0x372 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x104 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x104 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH2 0x167 SWAP1 PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x104 JUMP JUMPDEST PUSH2 0x120 PUSH2 0x19A CALLDATASIZE PUSH1 0x4 PUSH2 0xAED JUMP JUMPDEST PUSH2 0x389 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x104 JUMP JUMPDEST PUSH2 0x120 PUSH2 0x1C2 CALLDATASIZE PUSH1 0x4 PUSH2 0xAC3 JUMP JUMPDEST PUSH2 0x3FF JUMP JUMPDEST PUSH2 0x221 PUSH2 0x1D5 CALLDATASIZE PUSH1 0x4 PUSH2 0xB29 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 STOP JUMPDEST PUSH2 0x134 PUSH2 0x231 CALLDATASIZE PUSH1 0x4 PUSH2 0xB29 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xF7 PUSH2 0x442 JUMP JUMPDEST PUSH2 0x120 PUSH2 0x26F CALLDATASIZE PUSH1 0x4 PUSH2 0xB4B JUMP JUMPDEST PUSH2 0x451 JUMP JUMPDEST PUSH2 0x120 PUSH2 0x282 CALLDATASIZE PUSH1 0x4 PUSH2 0xAC3 JUMP JUMPDEST PUSH2 0x465 JUMP JUMPDEST PUSH2 0x120 PUSH2 0x295 CALLDATASIZE PUSH1 0x4 PUSH2 0xAC3 JUMP JUMPDEST PUSH2 0x4C1 JUMP JUMPDEST PUSH2 0x134 PUSH2 0x2A8 CALLDATASIZE PUSH1 0x4 PUSH2 0xB64 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 PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x2EF SWAP1 PUSH2 0xB97 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x31B SWAP1 PUSH2 0xB97 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x368 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x33D JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x368 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 0x34B JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37F CALLER DUP5 DUP5 PUSH2 0x4CE JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x396 DUP5 DUP5 DUP5 PUSH2 0x687 JUMP JUMPDEST PUSH2 0x3F5 DUP5 CALLER PUSH2 0x3F0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC12 PUSH1 0x28 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x8B1 JUMP JUMPDEST PUSH2 0x4CE JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP 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 0x37F SWAP2 DUP6 SWAP1 PUSH2 0x3F0 SWAP1 DUP7 PUSH2 0x8F8 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x2EF SWAP1 PUSH2 0xB97 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x45D CALLER DUP4 PUSH2 0x908 JUMP JUMPDEST POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37F CALLER DUP5 PUSH2 0x3F0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC3A PUSH1 0x25 SWAP2 CODECOPY CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x8B1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37F CALLER DUP5 DUP5 PUSH2 0x687 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x575 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7265737300000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x618 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7373000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x56C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x72A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6472657373000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x56C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x7CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6573730000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x56C JUMP JUMPDEST PUSH2 0x817 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xBEC PUSH1 0x26 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x8B1 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 0x853 SWAP1 DUP3 PUSH2 0x8F8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE MLOAD DUP5 DUP2 MSTORE SWAP1 SWAP3 SWAP2 DUP7 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH2 0x67A JUMP JUMPDEST DUP2 DUP4 SUB DUP2 DUP5 DUP3 GT ISZERO PUSH2 0x8F0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x56C SWAP2 SWAP1 PUSH2 0xA27 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x383 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x985 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x56C JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x992 SWAP1 DUP3 PUSH2 0x8F8 JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x9C5 SWAP1 DUP3 PUSH2 0x8F8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP3 MLOAD DUP5 DUP2 MSTORE SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA54 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xA38 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xA66 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xABE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xAD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xADF DUP4 PUSH2 0xA9A JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xB02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB0B DUP5 PUSH2 0xA9A JUMP JUMPDEST SWAP3 POP PUSH2 0xB19 PUSH1 0x20 DUP6 ADD PUSH2 0xA9A JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB44 DUP3 PUSH2 0xA9A JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xB77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB80 DUP4 PUSH2 0xA9A JUMP JUMPDEST SWAP2 POP PUSH2 0xB8E PUSH1 0x20 DUP5 ADD PUSH2 0xA9A JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0xBAB JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0xBE5 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x2062616C616E636545524332303A207472616E73 PUSH7 0x657220616D6F75 PUSH15 0x74206578636565647320616C6C6F77 PUSH2 0x6E63 PUSH6 0x45524332303A KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220B6E3 0xB5 0xF CODECOPY 0xCE 0xA5 0xB6 0x2D GT 0xD PUSH19 0x9DF0AE403E65F7B1966C93DEB3DDD896326D4F 0xE9 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"296:597:59:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2123:75:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4029:156;;;;;;:::i;:::-;;:::i;:::-;;;1300:14:201;;1293:22;1275:41;;1263:2;1248:18;4029:156:6;1135:187:201;3102:92:6;3177:12;;3102:92;;;1473:25:201;;;1461:2;1446:18;3102:92:6;1327:177:201;360:24:59;;;;;;;;;;;;;;;1685:42:201;1673:55;;;1655:74;;1643:2;1628:18;360:24:59;1509:226:201;4619:343:6;;;;;;:::i;:::-;;:::i;2975:75::-;3036:9;;2975:75;;3036:9;;;;2215:36:201;;2203:2;2188:18;2975:75:6;2073:184:201;5331:205:6;;;;;;:::i;:::-;;:::i;790:101:59:-;;;;;;:::i;:::-;858:9;:28;;;;;;;;;;;;;;;;;;790:101;;;3244:111:6;;;;;;:::i;:::-;3332:18;;3310:7;3332:18;;;;;;;;;;;;3244:111;2301:79;;;:::i;683:103:59:-;;;;;;:::i;:::-;;:::i;5993:316:6:-;;;;;;:::i;:::-;;:::i;3540:162::-;;;;;;:::i;:::-;;:::i;3752:155::-;;;;;;:::i;:::-;3875:18;;;;3853:7;3875:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3752:155;2123:75;2160:13;2188:5;2181:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2123:75;:::o;4029:156::-;4112:4;4124:39;678:10:4;4147:7:6;4156:6;4124:8;:39::i;:::-;-1:-1:-1;4176:4:6;4029:156;;;;;:::o;4619:343::-;4741:4;4753:36;4763:6;4771:9;4782:6;4753:9;:36::i;:::-;4795:145;4811:6;678:10:4;4845:89:6;4883:6;4845:89;;;;;;;;;;;;;;;;;:19;;;;;;;:11;:19;;;;;;;;678:10:4;4845:33:6;;;;;;;;;;:37;:89::i;:::-;4795:8;:145::i;:::-;-1:-1:-1;4953:4:6;4619:343;;;;;:::o;5331:205::-;678:10:4;5419:4:6;5463:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;5419:4;;5431:83;;5454:7;;5463:50;;5502:10;5463:38;:50::i;2301:79::-;2340:13;2368:7;2361:14;;;;;:::i;683:103:59:-;728:4;740:24;746:10;758:5;740;:24::i;:::-;-1:-1:-1;777:4:59;;683:103;-1:-1:-1;683:103:59:o;5993:316:6:-;6098:4;6110:177;678:10:4;6146:7:6;6161:120;6209:15;6161:120;;;;;;;;;;;;;;;;;678:10:4;6161:25:6;;;;:11;:25;;;;;;;;;:34;;;;;;;;;;;;:38;:120::i;3540:162::-;3626:4;3638:42;678:10:4;3662:9:6;3673:6;3638:9;:42::i;8935:322::-;9032:19;;;9024:68;;;;;;;3547:2:201;9024:68:6;;;3529:21:201;3586:2;3566:18;;;3559:30;3625:34;3605:18;;;3598:62;3696:6;3676:18;;;3669:34;3720:19;;9024:68:6;;;;;;;;;9106:21;;;9098:68;;;;;;;3952:2:201;9098:68:6;;;3934:21:201;3991:2;3971:18;;;3964:30;4030:34;4010:18;;;4003:62;4101:4;4081:18;;;4074:32;4123:19;;9098:68:6;3750:398:201;9098:68:6;9173:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9220:32;;1473:25:201;;;9220:32:6;;1446:18:201;9220:32:6;;;;;;;;8935:322;;;:::o;6753:504::-;6854:20;;;6846:70;;;;;;;4355:2:201;6846:70:6;;;4337:21:201;4394:2;4374:18;;;4367:30;4433:34;4413:18;;;4406:62;4504:7;4484:18;;;4477:35;4529:19;;6846:70:6;4153:401:201;6846:70:6;6930:23;;;6922:71;;;;;;;4761:2:201;6922:71:6;;;4743:21:201;4800:2;4780:18;;;4773:30;4839:34;4819:18;;;4812:62;4910:5;4890:18;;;4883:33;4933:19;;6922:71:6;4559:399:201;6922:71:6;7074;7096:6;7074:71;;;;;;;;;;;;;;;;;:17;;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;7054:17;;;;:9;:17;;;;;;;;;;;:91;;;;7174:20;;;;;;;:32;;7199:6;7174:24;:32::i;:::-;7151:20;;;;:9;:20;;;;;;;;;;;;:55;;;;7217:35;1473:25:201;;;7151:20:6;;7217:35;;;;;;1446:18:201;7217:35:6;1327:177:201;1011:161:14;1140:5;;;1153:7;1135:16;;;;1127:34;;;;;;;;;;;;;:::i;:::-;;1011:161;;;;;:::o;410:129::-;516:5;;;511:16;;;;503:25;;;;;7507:348:6;7586:21;;;7578:65;;;;;;;5165:2:201;7578:65:6;;;5147:21:201;5204:2;5184:18;;;5177:30;5243:33;5223:18;;;5216:61;5294:18;;7578:65:6;4963:355:201;7578:65:6;7721:12;;:24;;7738:6;7721:16;:24::i;:::-;7706:12;:39;7772:18;;;:9;:18;;;;;;;;;;;:30;;7795:6;7772:22;:30::i;:::-;7751:18;;;:9;:18;;;;;;;;;;;:51;;;;7813:37;;1473:25:201;;;7751:18:6;;:9;;7813:37;;1446:18:201;7813:37:6;;;;;;;7507:348;;:::o;14:656:201:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;586:2:201;574:15;591:66;570:88;555:104;;;;661:2;551:113;;14:656;-1:-1:-1;;;14:656:201:o;675:196::-;743:20;;803:42;792:54;;782:65;;772:93;;861:1;858;851:12;772:93;675:196;;;:::o;876:254::-;944:6;952;1005:2;993:9;984:7;980:23;976:32;973:52;;;1021:1;1018;1011:12;973:52;1044:29;1063:9;1044:29;:::i;:::-;1034:39;1120:2;1105:18;;;;1092:32;;-1:-1:-1;;;876:254:201:o;1740:328::-;1817:6;1825;1833;1886:2;1874:9;1865:7;1861:23;1857:32;1854:52;;;1902:1;1899;1892:12;1854:52;1925:29;1944:9;1925:29;:::i;:::-;1915:39;;1973:38;2007:2;1996:9;1992:18;1973:38;:::i;:::-;1963:48;;2058:2;2047:9;2043:18;2030:32;2020:42;;1740:328;;;;;:::o;2262:186::-;2321:6;2374:2;2362:9;2353:7;2349:23;2345:32;2342:52;;;2390:1;2387;2380:12;2342:52;2413:29;2432:9;2413:29;:::i;:::-;2403:39;2262:186;-1:-1:-1;;;2262:186:201:o;2453:180::-;2512:6;2565:2;2553:9;2544:7;2540:23;2536:32;2533:52;;;2581:1;2578;2571:12;2533:52;-1:-1:-1;2604:23:201;;2453:180;-1:-1:-1;2453:180:201:o;2638:260::-;2706:6;2714;2767:2;2755:9;2746:7;2742:23;2738:32;2735:52;;;2783:1;2780;2773:12;2735:52;2806:29;2825:9;2806:29;:::i;:::-;2796:39;;2854:38;2888:2;2877:9;2873:18;2854:38;:::i;:::-;2844:48;;2638:260;;;;;:::o;2903:437::-;2982:1;2978:12;;;;3025;;;3046:61;;3100:4;3092:6;3088:17;3078:27;;3046:61;3153:2;3145:6;3142:14;3122:18;3119:38;3116:218;;;3190:77;3187:1;3180:88;3291:4;3288:1;3281:15;3319:4;3316:1;3309:15;3116:218;;2903:437;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"644000","executionCost":"infinite","totalCost":"infinite"},"external":{"allowance(address,address)":"infinite","approve(address,uint256)":"24596","balanceOf(address)":"2561","decimals()":"2356","decreaseAllowance(address,uint256)":"infinite","delegate(address)":"24554","delegatee()":"2347","increaseAllowance(address,uint256)":"infinite","mint(uint256)":"infinite","name()":"infinite","symbol()":"infinite","totalSupply()":"2349","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite"}},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","delegate(address)":"5c19a95c","delegatee()":"1e31d053","increaseAllowance(address,uint256)":"39509351","mint(uint256)":"a0712d68","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"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\":\"delegateeAddress\",\"type\":\"address\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delegatee\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"mint\",\"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\":\"ERC20 minting logic with delegation\",\"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}.\"},\"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.\"},\"mint(uint256)\":{\"details\":\"Function to mint tokens\",\"params\":{\"value\":\"The amount of tokens to mint.\"},\"returns\":{\"_0\":\"A boolean that indicates if the operation was successful.\"}},\"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`.\"}},\"title\":\"MintableDelegationERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/mocks/tokens/MintableDelegationERC20.sol\":\"MintableDelegationERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\nimport './IERC20.sol';\\nimport './SafeMath.sol';\\nimport './Address.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 Context, IERC20 {\\n  using SafeMath for uint256;\\n  using Address for address;\\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(_msgSender(), recipient, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-allowance}.\\n   */\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) 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(_msgSender(), 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   * - `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      _msgSender(),\\n      _allowances[sender][_msgSender()].sub(amount, 'ERC20: transfer amount 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(_msgSender(), spender, _allowances[_msgSender()][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(\\n    address spender,\\n    uint256 subtractedValue\\n  ) public virtual returns (bool) {\\n    _approve(\\n      _msgSender(),\\n      spender,\\n      _allowances[_msgSender()][spender].sub(\\n        subtractedValue,\\n        'ERC20: decreased allowance below zero'\\n      )\\n    );\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Moves tokens `amount` from `sender` to `recipient`.\\n   *\\n   * This is internal function is equivalent to {transfer}, and can be used to\\n   * e.g. implement automatic token fees, slashing mechanisms, etc.\\n   *\\n   * Emits a {Transfer} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `sender` cannot be the zero address.\\n   * - `recipient` cannot be the zero address.\\n   * - `sender` must have a balance of at least `amount`.\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount) internal virtual {\\n    require(sender != address(0), 'ERC20: transfer from the zero address');\\n    require(recipient != address(0), 'ERC20: transfer to the zero address');\\n\\n    _beforeTokenTransfer(sender, recipient, amount);\\n\\n    _balances[sender] = _balances[sender].sub(amount, 'ERC20: transfer amount 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    require(account != address(0), 'ERC20: mint to the zero address');\\n\\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), 'ERC20: burn from the zero address');\\n\\n    _beforeTokenTransfer(account, address(0), amount);\\n\\n    _balances[account] = _balances[account].sub(amount, 'ERC20: burn amount 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 is 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(address owner, address spender, uint256 amount) internal virtual {\\n    require(owner != address(0), 'ERC20: approve from the zero address');\\n    require(spender != address(0), 'ERC20: approve to the zero address');\\n\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @dev 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(address from, address to, uint256 amount) internal virtual {}\\n}\\n\",\"keccak256\":\"0x84e6a151684cce31e66c850677f7e9455d694e050e409e5ded05fb5528c6c7e4\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/// @title Optimized overflow and underflow safe math operations\\n/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\\nlibrary SafeMath {\\n  /// @notice Returns x + y, reverts if sum overflows uint256\\n  /// @param x The augend\\n  /// @param y The addend\\n  /// @return z The sum of x and y\\n  function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x + y) >= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @param message The error msg\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y, string memory message) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x, message);\\n    }\\n  }\\n\\n  /// @notice Returns x * y, reverts if overflows\\n  /// @param x The multiplicand\\n  /// @param y The multiplier\\n  /// @return z The product of x and y\\n  function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require(x == 0 || (z = x * y) / x == y);\\n    }\\n  }\\n\\n  /// @notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\\n  /// @param x The numerator\\n  /// @param y The denominator\\n  /// @return z The product of x and y\\n  function div(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    return x / y;\\n  }\\n}\\n\",\"keccak256\":\"0xf1c5d8ba70a5fc3e20dbbc2aa2a2278d2535a57bc1e9abf1228ebc3068a045f0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IDelegationToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IDelegationToken\\n * @author Aave\\n * @notice Implements an interface for tokens with delegation COMP/UNI compatible\\n */\\ninterface IDelegationToken {\\n  /**\\n   * @notice Delegate voting power to a delegatee\\n   * @param delegatee The address of the delegatee\\n   */\\n  function delegate(address delegatee) external;\\n}\\n\",\"keccak256\":\"0xefaf5afc40d517357085677322396a6864a28d9bdbd664643a7a4723a45e4427\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/mocks/tokens/MintableDelegationERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {ERC20} from '../../dependencies/openzeppelin/contracts/ERC20.sol';\\nimport {IDelegationToken} from '../../interfaces/IDelegationToken.sol';\\n\\n/**\\n * @title MintableDelegationERC20\\n * @dev ERC20 minting logic with delegation\\n */\\ncontract MintableDelegationERC20 is IDelegationToken, ERC20 {\\n  address public delegatee;\\n\\n  constructor(string memory name, string memory symbol, uint8 decimals) ERC20(name, symbol) {\\n    _setupDecimals(decimals);\\n  }\\n\\n  /**\\n   * @dev Function to mint tokens\\n   * @param value The amount of tokens to mint.\\n   * @return A boolean that indicates if the operation was successful.\\n   */\\n  function mint(uint256 value) public returns (bool) {\\n    _mint(msg.sender, value);\\n    return true;\\n  }\\n\\n  function delegate(address delegateeAddress) external override {\\n    delegatee = delegateeAddress;\\n  }\\n}\\n\",\"keccak256\":\"0x94b7a72e2a5fe905cf154a76fa63c7ec3dcdb6ecb3ed5984ac555a99bd0ac825\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":793,"contract":"@aave/core-v3/contracts/mocks/tokens/MintableDelegationERC20.sol:MintableDelegationERC20","label":"_balances","offset":0,"slot":"0","type":"t_mapping(t_address,t_uint256)"},{"astId":799,"contract":"@aave/core-v3/contracts/mocks/tokens/MintableDelegationERC20.sol:MintableDelegationERC20","label":"_allowances","offset":0,"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":801,"contract":"@aave/core-v3/contracts/mocks/tokens/MintableDelegationERC20.sol:MintableDelegationERC20","label":"_totalSupply","offset":0,"slot":"2","type":"t_uint256"},{"astId":803,"contract":"@aave/core-v3/contracts/mocks/tokens/MintableDelegationERC20.sol:MintableDelegationERC20","label":"_name","offset":0,"slot":"3","type":"t_string_storage"},{"astId":805,"contract":"@aave/core-v3/contracts/mocks/tokens/MintableDelegationERC20.sol:MintableDelegationERC20","label":"_symbol","offset":0,"slot":"4","type":"t_string_storage"},{"astId":807,"contract":"@aave/core-v3/contracts/mocks/tokens/MintableDelegationERC20.sol:MintableDelegationERC20","label":"_decimals","offset":0,"slot":"5","type":"t_uint8"},{"astId":8503,"contract":"@aave/core-v3/contracts/mocks/tokens/MintableDelegationERC20.sol:MintableDelegationERC20","label":"delegatee","offset":1,"slot":"5","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol":{"MintableERC20":{"abi":[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EIP712_REVISION","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mint","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":"ERC20 minting logic","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}."},"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."},"mint(address,uint256)":{"details":"Function to mint tokens to address","params":{"account":"The account to mint tokens.","value":"The amount of tokens to mint."},"returns":{"_0":"A boolean that indicates if the operation was successful."}},"mint(uint256)":{"details":"Function to mint tokens","params":{"value":"The amount of tokens to mint."},"returns":{"_0":"A boolean that indicates if the operation was successful."}},"name()":{"details":"Returns the name of the token."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md","params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","owner":"The owner of the funds","r":"Signature param","s":"Signature param","spender":"The spender","v":"Signature param","value":"The amount"}},"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`."}},"title":"ERC20Mintable","version":1},"evm":{"bytecode":{"functionDebugData":{"@_828":{"entryPoint":null,"id":828,"parameterSlots":2,"returnSlots":0},"@_8629":{"entryPoint":null,"id":8629,"parameterSlots":3,"returnSlots":0},"@_setupDecimals_1267":{"entryPoint":null,"id":1267,"parameterSlots":1,"returnSlots":0},"abi_decode_string_fromMemory":{"entryPoint":478,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_uint8_fromMemory":{"entryPoint":661,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"extract_byte_array_length":{"entryPoint":794,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x41":{"entryPoint":456,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2629:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"46:95:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"63:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"70:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"75:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"66:3:201"},"nodeType":"YulFunctionCall","src":"66:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"56:6:201"},"nodeType":"YulFunctionCall","src":"56:31:201"},"nodeType":"YulExpressionStatement","src":"56:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"103:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"106:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"96:6:201"},"nodeType":"YulFunctionCall","src":"96:15:201"},"nodeType":"YulExpressionStatement","src":"96:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"127:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"130:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"120:6:201"},"nodeType":"YulFunctionCall","src":"120:15:201"},"nodeType":"YulExpressionStatement","src":"120:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"14:127:201"},{"body":{"nodeType":"YulBlock","src":"210:821:201","statements":[{"body":{"nodeType":"YulBlock","src":"259:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"268:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"271:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"261:6:201"},"nodeType":"YulFunctionCall","src":"261:12:201"},"nodeType":"YulExpressionStatement","src":"261:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"238:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"246:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"234:3:201"},"nodeType":"YulFunctionCall","src":"234:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"253:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"230:3:201"},"nodeType":"YulFunctionCall","src":"230:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"223:6:201"},"nodeType":"YulFunctionCall","src":"223:35:201"},"nodeType":"YulIf","src":"220:55:201"},{"nodeType":"YulVariableDeclaration","src":"284:23:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"300:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"294:5:201"},"nodeType":"YulFunctionCall","src":"294:13:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"288:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"316:28:201","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"334:2:201","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"338:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"330:3:201"},"nodeType":"YulFunctionCall","src":"330:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"342:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"326:3:201"},"nodeType":"YulFunctionCall","src":"326:18:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"320:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"367:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"369:16:201"},"nodeType":"YulFunctionCall","src":"369:18:201"},"nodeType":"YulExpressionStatement","src":"369:18:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"359:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"363:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"356:2:201"},"nodeType":"YulFunctionCall","src":"356:10:201"},"nodeType":"YulIf","src":"353:36:201"},{"nodeType":"YulVariableDeclaration","src":"398:17:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"412:2:201","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"408:3:201"},"nodeType":"YulFunctionCall","src":"408:7:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"402:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"424:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"444:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"438:5:201"},"nodeType":"YulFunctionCall","src":"438:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"428:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"456:71:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"478:6:201"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"502:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"506:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"498:3:201"},"nodeType":"YulFunctionCall","src":"498:13:201"},{"name":"_3","nodeType":"YulIdentifier","src":"513:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"494:3:201"},"nodeType":"YulFunctionCall","src":"494:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"518:2:201","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"490:3:201"},"nodeType":"YulFunctionCall","src":"490:31:201"},{"name":"_3","nodeType":"YulIdentifier","src":"523:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"486:3:201"},"nodeType":"YulFunctionCall","src":"486:40:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"474:3:201"},"nodeType":"YulFunctionCall","src":"474:53:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"460:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"586:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"588:16:201"},"nodeType":"YulFunctionCall","src":"588:18:201"},"nodeType":"YulExpressionStatement","src":"588:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"545:10:201"},{"name":"_2","nodeType":"YulIdentifier","src":"557:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"542:2:201"},"nodeType":"YulFunctionCall","src":"542:18:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"565:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"577:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"562:2:201"},"nodeType":"YulFunctionCall","src":"562:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"539:2:201"},"nodeType":"YulFunctionCall","src":"539:46:201"},"nodeType":"YulIf","src":"536:72:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"624:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"628:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"617:6:201"},"nodeType":"YulFunctionCall","src":"617:22:201"},"nodeType":"YulExpressionStatement","src":"617:22:201"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"655:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"663:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"648:6:201"},"nodeType":"YulFunctionCall","src":"648:18:201"},"nodeType":"YulExpressionStatement","src":"648:18:201"},{"nodeType":"YulVariableDeclaration","src":"675:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"685:4:201","type":"","value":"0x20"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"679:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"735:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"744:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"747:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"737:6:201"},"nodeType":"YulFunctionCall","src":"737:12:201"},"nodeType":"YulExpressionStatement","src":"737:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"712:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"720:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"708:3:201"},"nodeType":"YulFunctionCall","src":"708:15:201"},{"name":"_4","nodeType":"YulIdentifier","src":"725:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"704:3:201"},"nodeType":"YulFunctionCall","src":"704:24:201"},{"name":"end","nodeType":"YulIdentifier","src":"730:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"701:2:201"},"nodeType":"YulFunctionCall","src":"701:33:201"},"nodeType":"YulIf","src":"698:53:201"},{"nodeType":"YulVariableDeclaration","src":"760:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"769:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"764:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"825:87:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"854:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"862:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"850:3:201"},"nodeType":"YulFunctionCall","src":"850:14:201"},{"name":"_4","nodeType":"YulIdentifier","src":"866:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"846:3:201"},"nodeType":"YulFunctionCall","src":"846:23:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"885:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"893:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"881:3:201"},"nodeType":"YulFunctionCall","src":"881:14:201"},{"name":"_4","nodeType":"YulIdentifier","src":"897:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"877:3:201"},"nodeType":"YulFunctionCall","src":"877:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"871:5:201"},"nodeType":"YulFunctionCall","src":"871:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"839:6:201"},"nodeType":"YulFunctionCall","src":"839:63:201"},"nodeType":"YulExpressionStatement","src":"839:63:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"790:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"793:2:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"787:2:201"},"nodeType":"YulFunctionCall","src":"787:9:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"797:19:201","statements":[{"nodeType":"YulAssignment","src":"799:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"808:1:201"},{"name":"_4","nodeType":"YulIdentifier","src":"811:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"804:3:201"},"nodeType":"YulFunctionCall","src":"804:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"799:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"783:3:201","statements":[]},"src":"779:133:201"},{"body":{"nodeType":"YulBlock","src":"942:59:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"971:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"979:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"967:3:201"},"nodeType":"YulFunctionCall","src":"967:15:201"},{"name":"_4","nodeType":"YulIdentifier","src":"984:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"963:3:201"},"nodeType":"YulFunctionCall","src":"963:24:201"},{"kind":"number","nodeType":"YulLiteral","src":"989:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"956:6:201"},"nodeType":"YulFunctionCall","src":"956:35:201"},"nodeType":"YulExpressionStatement","src":"956:35:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"927:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"930:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"924:2:201"},"nodeType":"YulFunctionCall","src":"924:9:201"},"nodeType":"YulIf","src":"921:80:201"},{"nodeType":"YulAssignment","src":"1010:15:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1019:6:201"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"1010:5:201"}]}]},"name":"abi_decode_string_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"184:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"192:3:201","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"200:5:201","type":""}],"src":"146:885:201"},{"body":{"nodeType":"YulBlock","src":"1169:579:201","statements":[{"body":{"nodeType":"YulBlock","src":"1215:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1224:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1227:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1217:6:201"},"nodeType":"YulFunctionCall","src":"1217:12:201"},"nodeType":"YulExpressionStatement","src":"1217:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1190:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1199:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1186:3:201"},"nodeType":"YulFunctionCall","src":"1186:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1211:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1182:3:201"},"nodeType":"YulFunctionCall","src":"1182:32:201"},"nodeType":"YulIf","src":"1179:52:201"},{"nodeType":"YulVariableDeclaration","src":"1240:30:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1260:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1254:5:201"},"nodeType":"YulFunctionCall","src":"1254:16:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1244:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1279:28:201","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1297:2:201","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"1301:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1293:3:201"},"nodeType":"YulFunctionCall","src":"1293:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"1305:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1289:3:201"},"nodeType":"YulFunctionCall","src":"1289:18:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1283:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1334:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1343:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1346:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1336:6:201"},"nodeType":"YulFunctionCall","src":"1336:12:201"},"nodeType":"YulExpressionStatement","src":"1336:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1322:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1330:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1319:2:201"},"nodeType":"YulFunctionCall","src":"1319:14:201"},"nodeType":"YulIf","src":"1316:34:201"},{"nodeType":"YulAssignment","src":"1359:71:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1402:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"1413:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1398:3:201"},"nodeType":"YulFunctionCall","src":"1398:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1422:7:201"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"1369:28:201"},"nodeType":"YulFunctionCall","src":"1369:61:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1359:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1439:41:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1465:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1476:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1461:3:201"},"nodeType":"YulFunctionCall","src":"1461:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1455:5:201"},"nodeType":"YulFunctionCall","src":"1455:25:201"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"1443:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1509:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1518:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1521:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1511:6:201"},"nodeType":"YulFunctionCall","src":"1511:12:201"},"nodeType":"YulExpressionStatement","src":"1511:12:201"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"1495:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1505:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1492:2:201"},"nodeType":"YulFunctionCall","src":"1492:16:201"},"nodeType":"YulIf","src":"1489:36:201"},{"nodeType":"YulAssignment","src":"1534:73:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1577:9:201"},{"name":"offset_1","nodeType":"YulIdentifier","src":"1588:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1573:3:201"},"nodeType":"YulFunctionCall","src":"1573:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1599:7:201"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"1544:28:201"},"nodeType":"YulFunctionCall","src":"1544:63:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1534:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1616:38:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1639:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1650:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1635:3:201"},"nodeType":"YulFunctionCall","src":"1635:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1629:5:201"},"nodeType":"YulFunctionCall","src":"1629:25:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1620:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1702:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1711:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1714:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1704:6:201"},"nodeType":"YulFunctionCall","src":"1704:12:201"},"nodeType":"YulExpressionStatement","src":"1704:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1676:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1687:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1694:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1683:3:201"},"nodeType":"YulFunctionCall","src":"1683:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1673:2:201"},"nodeType":"YulFunctionCall","src":"1673:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1666:6:201"},"nodeType":"YulFunctionCall","src":"1666:35:201"},"nodeType":"YulIf","src":"1663:55:201"},{"nodeType":"YulAssignment","src":"1727:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1737:5:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1727:6:201"}]}]},"name":"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_uint8_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1119:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1130:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1142:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1150:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1158:6:201","type":""}],"src":"1036:712:201"},{"body":{"nodeType":"YulBlock","src":"1966:276:201","statements":[{"nodeType":"YulAssignment","src":"1976:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1988:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1999:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1984:3:201"},"nodeType":"YulFunctionCall","src":"1984:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1976:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2019:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"2030:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2012:6:201"},"nodeType":"YulFunctionCall","src":"2012:25:201"},"nodeType":"YulExpressionStatement","src":"2012:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2057:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2068:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2053:3:201"},"nodeType":"YulFunctionCall","src":"2053:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"2073:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2046:6:201"},"nodeType":"YulFunctionCall","src":"2046:34:201"},"nodeType":"YulExpressionStatement","src":"2046:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2100:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2111:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2096:3:201"},"nodeType":"YulFunctionCall","src":"2096:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"2116:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2089:6:201"},"nodeType":"YulFunctionCall","src":"2089:34:201"},"nodeType":"YulExpressionStatement","src":"2089:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2143:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2154:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2139:3:201"},"nodeType":"YulFunctionCall","src":"2139:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"2159:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2132:6:201"},"nodeType":"YulFunctionCall","src":"2132:34:201"},"nodeType":"YulExpressionStatement","src":"2132:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2186:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2197:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2182:3:201"},"nodeType":"YulFunctionCall","src":"2182:19:201"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"2207:6:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2223:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2228:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2219:3:201"},"nodeType":"YulFunctionCall","src":"2219:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"2232:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2215:3:201"},"nodeType":"YulFunctionCall","src":"2215:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2203:3:201"},"nodeType":"YulFunctionCall","src":"2203:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2175:6:201"},"nodeType":"YulFunctionCall","src":"2175:61:201"},"nodeType":"YulExpressionStatement","src":"2175:61:201"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1903:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1914:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1922:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1930:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1938:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1946:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1957:4:201","type":""}],"src":"1753:489:201"},{"body":{"nodeType":"YulBlock","src":"2302:325:201","statements":[{"nodeType":"YulAssignment","src":"2312:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2326:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"2329:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2322:3:201"},"nodeType":"YulFunctionCall","src":"2322:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2312:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2343:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"2373:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"2379:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2369:3:201"},"nodeType":"YulFunctionCall","src":"2369:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"2347:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2420:31:201","statements":[{"nodeType":"YulAssignment","src":"2422:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2436:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2444:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2432:3:201"},"nodeType":"YulFunctionCall","src":"2432:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2422:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"2400:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2393:6:201"},"nodeType":"YulFunctionCall","src":"2393:26:201"},"nodeType":"YulIf","src":"2390:61:201"},{"body":{"nodeType":"YulBlock","src":"2510:111:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2531:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2538:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2543:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2534:3:201"},"nodeType":"YulFunctionCall","src":"2534:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2524:6:201"},"nodeType":"YulFunctionCall","src":"2524:31:201"},"nodeType":"YulExpressionStatement","src":"2524:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2575:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2578:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2568:6:201"},"nodeType":"YulFunctionCall","src":"2568:15:201"},"nodeType":"YulExpressionStatement","src":"2568:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2603:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2606:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2596:6:201"},"nodeType":"YulFunctionCall","src":"2596:15:201"},"nodeType":"YulExpressionStatement","src":"2596:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"2466:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2489:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2497:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2486:2:201"},"nodeType":"YulFunctionCall","src":"2486:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2463:2:201"},"nodeType":"YulFunctionCall","src":"2463:38:201"},"nodeType":"YulIf","src":"2460:161:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"2282:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"2291:6:201","type":""}],"src":"2247:380:201"}]},"contents":"{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_string_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := mload(offset)\n        let _2 := sub(shl(64, 1), 1)\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        let _4 := 0x20\n        if gt(add(add(offset, _1), _4), end) { revert(0, 0) }\n        let i := 0\n        for { } lt(i, _1) { i := add(i, _4) }\n        {\n            mstore(add(add(memPtr, i), _4), mload(add(add(offset, i), _4)))\n        }\n        if gt(i, _1)\n        {\n            mstore(add(add(memPtr, _1), _4), 0)\n        }\n        array := memPtr\n    }\n    function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_uint8_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        value0 := abi_decode_string_fromMemory(add(headStart, offset), dataEnd)\n        let offset_1 := mload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_string_fromMemory(add(headStart, offset_1), dataEnd)\n        let value := mload(add(headStart, 64))\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value2 := value\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60806040523480156200001157600080fd5b506040516200145538038062001455833981016040819052620000349162000295565b8251839083906200004d90600390602085019062000122565b5080516200006390600490602084019062000122565b505060058054855160209687012060408051808201825260018152603160f81b9089015280517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818a0152808201929092527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608301524660808301523060a0808401919091528151808403909101815260c09092019052805196019590952060075560ff9290921660ff1990941693909317905550620003579050565b82805462000130906200031a565b90600052602060002090601f0160209004810192826200015457600085556200019f565b82601f106200016f57805160ff19168380011785556200019f565b828001600101855582156200019f579182015b828111156200019f57825182559160200191906001019062000182565b50620001ad929150620001b1565b5090565b5b80821115620001ad5760008155600101620001b2565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001f057600080fd5b81516001600160401b03808211156200020d576200020d620001c8565b604051601f8301601f19908116603f01168101908282118183101715620002385762000238620001c8565b816040528381526020925086838588010111156200025557600080fd5b600091505b838210156200027957858201830151818301840152908201906200025a565b838211156200028b5760008385830101525b9695505050505050565b600080600060608486031215620002ab57600080fd5b83516001600160401b0380821115620002c357600080fd5b620002d187838801620001de565b94506020860151915080821115620002e857600080fd5b50620002f786828701620001de565b925050604084015160ff811681146200030f57600080fd5b809150509250925092565b600181811c908216806200032f57607f821691505b602082108114156200035157634e487b7160e01b600052602260045260246000fd5b50919050565b6110ee80620003676000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c806370a08231116100b2578063a0712d6811610081578063a9059cbb11610066578063a9059cbb146102e2578063d505accf146102f5578063dd62ed3e1461030a57600080fd5b8063a0712d68146102bc578063a457c2d7146102cf57600080fd5b806370a082311461020c57806378160376146102425780637ecebe001461027e57806395d89b41146102b457600080fd5b806330adf81f116101095780633644e515116100ee5780633644e515146101dd57806339509351146101e657806340c10f19146101f957600080fd5b806330adf81f146101a1578063313ce567146101c857600080fd5b806306fdde031461013b578063095ea7b31461015957806318160ddd1461017c57806323b872dd1461018e575b600080fd5b610143610350565b6040516101509190610e2f565b60405180910390f35b61016c610167366004610e72565b6103e2565b6040519015158152602001610150565b6002545b604051908152602001610150565b61016c61019c366004610e9c565b6103f9565b6101807f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055460405160ff9091168152602001610150565b61018060075481565b61016c6101f4366004610e72565b61046f565b61016c610207366004610e72565b6104b2565b61018061021a366004610ed8565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101436040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b61018061028c366004610ed8565b73ffffffffffffffffffffffffffffffffffffffff1660009081526006602052604090205490565b6101436104be565b61016c6102ca366004610ef3565b6104cd565b61016c6102dd366004610e72565b6104e1565b61016c6102f0366004610e72565b61053d565b610308610303366004610f0c565b61054a565b005b610180610318366004610f7f565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461035f90610fb2565b80601f016020809104026020016040519081016040528092919081815260200182805461038b90610fb2565b80156103d85780601f106103ad576101008083540402835291602001916103d8565b820191906000526020600020905b8154815290600101906020018083116103bb57829003601f168201915b5050505050905090565b60006103ef338484610870565b5060015b92915050565b6000610406848484610a24565b61046584336104608560405180606001604052806028815260200161106c6028913973ffffffffffffffffffffffffffffffffffffffff8a1660009081526001602090815260408083203384529091529020549190610c4e565b610870565b5060019392505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103ef9185906104609086610c95565b60006103ef8383610ca5565b60606004805461035f90610fb2565b60006104d93383610ca5565b506001919050565b60006103ef3384610460856040518060600160405280602581526020016110946025913933600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d1684529091529020549190610c4e565b60006103ef338484610a24565b73ffffffffffffffffffffffffffffffffffffffff87166105cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f494e56414c49445f4f574e45520000000000000000000000000000000000000060448201526064015b60405180910390fd5b83421115610636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f494e56414c49445f45585049524154494f4e000000000000000000000000000060448201526064016105c3565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526006602090815260408083205460075482517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958c166060860152608085018b905260a0850181905260c08086018b90528251808703909101815260e08601909252815191909201207f19010000000000000000000000000000000000000000000000000000000000006101008501526101028401949094526101228301939093529061014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa15801561078b573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614610829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f494e56414c49445f5349474e415455524500000000000000000000000000000060448201526064016105c3565b610834826001611006565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260066020526040902055610865898989610870565b505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610912576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016105c3565b73ffffffffffffffffffffffffffffffffffffffff82166109b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016105c3565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610ac7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016105c3565b73ffffffffffffffffffffffffffffffffffffffff8216610b6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016105c3565b610bb4816040518060600160405280602681526020016110466026913973ffffffffffffffffffffffffffffffffffffffff86166000908152602081905260409020549190610c4e565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610bf09082610c95565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a17565b8183038184821115610c8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c39190610e2f565b509392505050565b808201828110156103f357600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216610d22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105c3565b600254610d2f9082610c95565b60025573ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054610d629082610c95565b73ffffffffffffffffffffffffffffffffffffffff8316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000815180845260005b81811015610dea57602081850181015186830182015201610dce565b81811115610dfc576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610e426020830184610dc4565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e6d57600080fd5b919050565b60008060408385031215610e8557600080fd5b610e8e83610e49565b946020939093013593505050565b600080600060608486031215610eb157600080fd5b610eba84610e49565b9250610ec860208501610e49565b9150604084013590509250925092565b600060208284031215610eea57600080fd5b610e4282610e49565b600060208284031215610f0557600080fd5b5035919050565b600080600080600080600060e0888a031215610f2757600080fd5b610f3088610e49565b9650610f3e60208901610e49565b95506040880135945060608801359350608088013560ff81168114610f6257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f9257600080fd5b610f9b83610e49565b9150610fa960208401610e49565b90509250929050565b600181811c90821680610fc657607f821691505b60208210811415611000577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008219821115611040577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dfffe4fa965322f007d41540331ebedc2c324ff72e0ae9c6908e3f7d8d36a6ed64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1455 CODESIZE SUB DUP1 PUSH3 0x1455 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x295 JUMP JUMPDEST DUP3 MLOAD DUP4 SWAP1 DUP4 SWAP1 PUSH3 0x4D SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x122 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x63 SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x122 JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD DUP6 MLOAD PUSH1 0x20 SWAP7 DUP8 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x31 PUSH1 0xF8 SHL SWAP1 DUP10 ADD MSTORE DUP1 MLOAD PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP2 DUP11 ADD MSTORE DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP4 ADD MSTORE CHAINID PUSH1 0x80 DUP4 ADD MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP3 ADD SWAP1 MSTORE DUP1 MLOAD SWAP7 ADD SWAP6 SWAP1 SWAP6 KECCAK256 PUSH1 0x7 SSTORE PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND PUSH1 0xFF NOT SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SSTORE POP PUSH3 0x357 SWAP1 POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x130 SWAP1 PUSH3 0x31A JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x154 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x19F JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x16F JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x19F JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x19F JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x19F JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x182 JUMP JUMPDEST POP PUSH3 0x1AD SWAP3 SWAP2 POP PUSH3 0x1B1 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x1AD JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x1B2 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x1F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x20D JUMPI PUSH3 0x20D PUSH3 0x1C8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x238 JUMPI PUSH3 0x238 PUSH3 0x1C8 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 SWAP3 POP DUP7 DUP4 DUP6 DUP9 ADD ADD GT ISZERO PUSH3 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP4 DUP3 LT ISZERO PUSH3 0x279 JUMPI DUP6 DUP3 ADD DUP4 ADD MLOAD DUP2 DUP4 ADD DUP5 ADD MSTORE SWAP1 DUP3 ADD SWAP1 PUSH3 0x25A JUMP JUMPDEST DUP4 DUP3 GT ISZERO PUSH3 0x28B JUMPI PUSH1 0x0 DUP4 DUP6 DUP4 ADD ADD MSTORE JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x2AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x2C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x2D1 DUP8 DUP4 DUP9 ADD PUSH3 0x1DE JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x2E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x2F7 DUP7 DUP3 DUP8 ADD PUSH3 0x1DE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH3 0x30F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x32F JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x351 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x10EE DUP1 PUSH3 0x367 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 0x136 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0xA0712D68 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2E2 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x2F5 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x30A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA0712D68 EQ PUSH2 0x2BC JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x2CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x20C JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x242 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x27E JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x2B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x109 JUMPI DUP1 PUSH4 0x3644E515 GT PUSH2 0xEE JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x1DD JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1E6 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x1F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x1A1 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x13B JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x159 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x17C JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x18E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x143 PUSH2 0x350 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x150 SWAP2 SWAP1 PUSH2 0xE2F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x16C PUSH2 0x167 CALLDATASIZE PUSH1 0x4 PUSH2 0xE72 JUMP JUMPDEST PUSH2 0x3E2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x150 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x150 JUMP JUMPDEST PUSH2 0x16C PUSH2 0x19C CALLDATASIZE PUSH1 0x4 PUSH2 0xE9C JUMP JUMPDEST PUSH2 0x3F9 JUMP JUMPDEST PUSH2 0x180 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x150 JUMP JUMPDEST PUSH2 0x180 PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x16C PUSH2 0x1F4 CALLDATASIZE PUSH1 0x4 PUSH2 0xE72 JUMP JUMPDEST PUSH2 0x46F JUMP JUMPDEST PUSH2 0x16C PUSH2 0x207 CALLDATASIZE PUSH1 0x4 PUSH2 0xE72 JUMP JUMPDEST PUSH2 0x4B2 JUMP JUMPDEST PUSH2 0x180 PUSH2 0x21A CALLDATASIZE PUSH1 0x4 PUSH2 0xED8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x143 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x180 PUSH2 0x28C CALLDATASIZE PUSH1 0x4 PUSH2 0xED8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x143 PUSH2 0x4BE JUMP JUMPDEST PUSH2 0x16C PUSH2 0x2CA CALLDATASIZE PUSH1 0x4 PUSH2 0xEF3 JUMP JUMPDEST PUSH2 0x4CD JUMP JUMPDEST PUSH2 0x16C PUSH2 0x2DD CALLDATASIZE PUSH1 0x4 PUSH2 0xE72 JUMP JUMPDEST PUSH2 0x4E1 JUMP JUMPDEST PUSH2 0x16C PUSH2 0x2F0 CALLDATASIZE PUSH1 0x4 PUSH2 0xE72 JUMP JUMPDEST PUSH2 0x53D JUMP JUMPDEST PUSH2 0x308 PUSH2 0x303 CALLDATASIZE PUSH1 0x4 PUSH2 0xF0C JUMP JUMPDEST PUSH2 0x54A JUMP JUMPDEST STOP JUMPDEST PUSH2 0x180 PUSH2 0x318 CALLDATASIZE PUSH1 0x4 PUSH2 0xF7F 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 PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x35F SWAP1 PUSH2 0xFB2 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x38B SWAP1 PUSH2 0xFB2 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x3D8 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3AD JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3D8 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 0x3BB JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3EF CALLER DUP5 DUP5 PUSH2 0x870 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x406 DUP5 DUP5 DUP5 PUSH2 0xA24 JUMP JUMPDEST PUSH2 0x465 DUP5 CALLER PUSH2 0x460 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x106C PUSH1 0x28 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xC4E JUMP JUMPDEST PUSH2 0x870 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP 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 0x3EF SWAP2 DUP6 SWAP1 PUSH2 0x460 SWAP1 DUP7 PUSH2 0xC95 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3EF DUP4 DUP4 PUSH2 0xCA5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x35F SWAP1 PUSH2 0xFB2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4D9 CALLER DUP4 PUSH2 0xCA5 JUMP JUMPDEST POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3EF CALLER DUP5 PUSH2 0x460 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1094 PUSH1 0x25 SWAP2 CODECOPY CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xC4E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3EF CALLER DUP5 DUP5 PUSH2 0xA24 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH2 0x5CC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F4F574E455200000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x636 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F45585049524154494F4E0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x7 SLOAD DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP13 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP12 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP7 ADD DUP12 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP8 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP7 ADD SWAP1 SWAP3 MSTORE DUP2 MLOAD SWAP2 SWAP1 SWAP3 ADD KECCAK256 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 PUSH2 0x100 DUP6 ADD MSTORE PUSH2 0x102 DUP5 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH2 0x122 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 PUSH2 0x142 ADD PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x78B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x829 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F5349474E4154555245000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH2 0x834 DUP3 PUSH1 0x1 PUSH2 0x1006 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x865 DUP10 DUP10 DUP10 PUSH2 0x870 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x912 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7265737300000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x9B5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7373000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0xAC7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6472657373000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0xB6A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6573730000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH2 0xBB4 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1046 PUSH1 0x26 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xC4E 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 0xBF0 SWAP1 DUP3 PUSH2 0xC95 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE MLOAD DUP5 DUP2 MSTORE SWAP1 SWAP3 SWAP2 DUP7 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH2 0xA17 JUMP JUMPDEST DUP2 DUP4 SUB DUP2 DUP5 DUP3 GT ISZERO PUSH2 0xC8D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5C3 SWAP2 SWAP1 PUSH2 0xE2F JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x3F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0xD22 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xD2F SWAP1 DUP3 PUSH2 0xC95 JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xD62 SWAP1 DUP3 PUSH2 0xC95 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP3 MLOAD DUP5 DUP2 MSTORE SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xDEA JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0xDCE JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xDFC JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xE42 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xDC4 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xE6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xE85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE8E DUP4 PUSH2 0xE49 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xEB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xEBA DUP5 PUSH2 0xE49 JUMP JUMPDEST SWAP3 POP PUSH2 0xEC8 PUSH1 0x20 DUP6 ADD PUSH2 0xE49 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xEEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE42 DUP3 PUSH2 0xE49 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0xF27 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF30 DUP9 PUSH2 0xE49 JUMP JUMPDEST SWAP7 POP PUSH2 0xF3E PUSH1 0x20 DUP10 ADD PUSH2 0xE49 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xF62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xF92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF9B DUP4 PUSH2 0xE49 JUMP JUMPDEST SWAP2 POP PUSH2 0xFA9 PUSH1 0x20 DUP5 ADD PUSH2 0xE49 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0xFC6 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x1000 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1040 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP ADD SWAP1 JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x2062616C616E636545524332303A207472616E73 PUSH7 0x657220616D6F75 PUSH15 0x74206578636565647320616C6C6F77 PUSH2 0x6E63 PUSH6 0x45524332303A KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220DFFF 0xE4 STATICCALL SWAP7 MSTORE8 0x22 CREATE SMOD 0xD4 ISZERO BLOCKHASH CALLER 0x1E 0xBE 0xDC 0x2C ORIGIN 0x4F 0xF7 0x2E EXP 0xE9 0xC6 SWAP1 DUP15 EXTCODEHASH PUSH30 0x8D36A6ED64736F6C634300080A0033000000000000000000000000000000 ","sourceMap":"270:2384:60:-:0;;;800:360;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2007:12:6;;876:4:60;;882:6;;2007:12:6;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;2025:16:6;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;;2047:9:6;:14;;1013:22:60;;::::1;::::0;;::::1;::::0;364:10:::1;::::0;;;;::::1;::::0;;-1:-1:-1;364:10:60;;-1:-1:-1;;;364:10:60;;::::1;::::0;970:149;;424:95:::1;970:149:::0;;::::1;2012:25:201::0;2053:18;;;2046:34;;;;1045:26:60;2096:18:201;;;2089:34;914:13:60::1;2139:18:201::0;;;2132:34;1106:4:60::1;2182:19:201::0;;;;2175:61;;;;970:149:60;;;;;;;;;;1984:19:201;;;;970:149:60;;953:172;;;::::1;::::0;;;;934:16:::1;:191:::0;9620:21:6;;;;;-1:-1:-1;;2047:14:6;;;9620:21;;;;;;-1:-1:-1;270:2384:60;;-1:-1:-1;270:2384:60;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;270:2384:60;;;-1:-1:-1;270:2384:60;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:127:201;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:885;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:201;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:201;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;730:3;725:2;720;712:6;708:15;704:24;701:33;698:53;;;747:1;744;737:12;698:53;769:1;760:10;;779:133;793:2;790:1;787:9;779:133;;;881:14;;;877:23;;871:30;850:14;;;846:23;;839:63;804:10;;;;779:133;;;930:2;927:1;924:9;921:80;;;989:1;984:2;979;971:6;967:15;963:24;956:35;921:80;1019:6;146:885;-1:-1:-1;;;;;;146:885:201:o;1036:712::-;1142:6;1150;1158;1211:2;1199:9;1190:7;1186:23;1182:32;1179:52;;;1227:1;1224;1217:12;1179:52;1254:16;;-1:-1:-1;;;;;1319:14:201;;;1316:34;;;1346:1;1343;1336:12;1316:34;1369:61;1422:7;1413:6;1402:9;1398:22;1369:61;:::i;:::-;1359:71;;1476:2;1465:9;1461:18;1455:25;1439:41;;1505:2;1495:8;1492:16;1489:36;;;1521:1;1518;1511:12;1489:36;;1544:63;1599:7;1588:8;1577:9;1573:24;1544:63;:::i;:::-;1534:73;;;1650:2;1639:9;1635:18;1629:25;1694:4;1687:5;1683:16;1676:5;1673:27;1663:55;;1714:1;1711;1704:12;1663:55;1737:5;1727:15;;;1036:712;;;;;:::o;2247:380::-;2326:1;2322:12;;;;2369;;;2390:61;;2444:4;2436:6;2432:17;2422:27;;2390:61;2497:2;2489:6;2486:14;2466:18;2463:38;2460:161;;;2543:10;2538:3;2534:20;2531:1;2524:31;2578:4;2575:1;2568:15;2606:4;2603:1;2596:15;2460:161;;2247:380;;;:::o;:::-;270:2384:60;;;;;;"},"deployedBytecode":{"functionDebugData":{"@DOMAIN_SEPARATOR_8583":{"entryPoint":null,"id":8583,"parameterSlots":0,"returnSlots":0},"@EIP712_REVISION_8567":{"entryPoint":null,"id":8567,"parameterSlots":0,"returnSlots":0},"@PERMIT_TYPEHASH_8577":{"entryPoint":null,"id":8577,"parameterSlots":0,"returnSlots":0},"@_approve_1256":{"entryPoint":2160,"id":1256,"parameterSlots":3,"returnSlots":0},"@_beforeTokenTransfer_1278":{"entryPoint":null,"id":1278,"parameterSlots":3,"returnSlots":0},"@_mint_1155":{"entryPoint":3237,"id":1155,"parameterSlots":2,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_transfer_1100":{"entryPoint":2596,"id":1100,"parameterSlots":3,"returnSlots":0},"@add_2216":{"entryPoint":3221,"id":2216,"parameterSlots":2,"returnSlots":1},"@allowance_918":{"entryPoint":null,"id":918,"parameterSlots":2,"returnSlots":1},"@approve_939":{"entryPoint":994,"id":939,"parameterSlots":2,"returnSlots":1},"@balanceOf_879":{"entryPoint":null,"id":879,"parameterSlots":1,"returnSlots":1},"@decimals_855":{"entryPoint":null,"id":855,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_1034":{"entryPoint":1249,"id":1034,"parameterSlots":2,"returnSlots":1},"@increaseAllowance_1005":{"entryPoint":1135,"id":1005,"parameterSlots":2,"returnSlots":1},"@mint_8737":{"entryPoint":1229,"id":8737,"parameterSlots":1,"returnSlots":1},"@mint_8755":{"entryPoint":1202,"id":8755,"parameterSlots":2,"returnSlots":1},"@name_837":{"entryPoint":848,"id":837,"parameterSlots":0,"returnSlots":1},"@nonces_8767":{"entryPoint":null,"id":8767,"parameterSlots":1,"returnSlots":1},"@permit_8720":{"entryPoint":1354,"id":8720,"parameterSlots":7,"returnSlots":0},"@sub_2265":{"entryPoint":3150,"id":2265,"parameterSlots":3,"returnSlots":1},"@symbol_846":{"entryPoint":1214,"id":846,"parameterSlots":0,"returnSlots":1},"@totalSupply_865":{"entryPoint":null,"id":865,"parameterSlots":0,"returnSlots":1},"@transferFrom_977":{"entryPoint":1017,"id":977,"parameterSlots":3,"returnSlots":1},"@transfer_900":{"entryPoint":1341,"id":900,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":3657,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":3800,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":3967,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":3740,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":3852,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":3698,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256":{"entryPoint":3827,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string":{"entryPoint":3524,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":3631,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5e2e9eaa2d734966dea0900deacd15b20129fbce05255d633a3ce5ebca181b88__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fe3e5cf49f72bf8a6a8455c3e990f8479f5dfa09ac808886f330a39b0029c2d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a30e2b4f22d955e30086ae3aef0adfd87eec9d0d3f055d6aa9af61f522dda886__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":4102,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":4018,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:9085:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"64:481:201","statements":[{"nodeType":"YulVariableDeclaration","src":"74:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"94:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"88:5:201"},"nodeType":"YulFunctionCall","src":"88:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"78:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"116:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"121:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"109:6:201"},"nodeType":"YulFunctionCall","src":"109:19:201"},"nodeType":"YulExpressionStatement","src":"109:19:201"},{"nodeType":"YulVariableDeclaration","src":"137:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"146:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"141:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"208:110:201","statements":[{"nodeType":"YulVariableDeclaration","src":"222:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"232:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"226:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"264:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"269:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"260:3:201"},"nodeType":"YulFunctionCall","src":"260:11:201"},{"name":"_1","nodeType":"YulIdentifier","src":"273:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"256:3:201"},"nodeType":"YulFunctionCall","src":"256:20:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"292:5:201"},{"name":"i","nodeType":"YulIdentifier","src":"299:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"288:3:201"},"nodeType":"YulFunctionCall","src":"288:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"303:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"284:3:201"},"nodeType":"YulFunctionCall","src":"284:22:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"278:5:201"},"nodeType":"YulFunctionCall","src":"278:29:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"249:6:201"},"nodeType":"YulFunctionCall","src":"249:59:201"},"nodeType":"YulExpressionStatement","src":"249:59:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"167:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"170:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"164:2:201"},"nodeType":"YulFunctionCall","src":"164:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"178:21:201","statements":[{"nodeType":"YulAssignment","src":"180:17:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"189:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"192:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"185:3:201"},"nodeType":"YulFunctionCall","src":"185:12:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"180:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"160:3:201","statements":[]},"src":"156:162:201"},{"body":{"nodeType":"YulBlock","src":"352:62:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"381:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"386:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"377:3:201"},"nodeType":"YulFunctionCall","src":"377:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"395:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"373:3:201"},"nodeType":"YulFunctionCall","src":"373:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"402:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"366:6:201"},"nodeType":"YulFunctionCall","src":"366:38:201"},"nodeType":"YulExpressionStatement","src":"366:38:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"333:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"336:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"330:2:201"},"nodeType":"YulFunctionCall","src":"330:13:201"},"nodeType":"YulIf","src":"327:87:201"},{"nodeType":"YulAssignment","src":"423:116:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"438:3:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"451:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"459:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"447:3:201"},"nodeType":"YulFunctionCall","src":"447:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"464:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"443:3:201"},"nodeType":"YulFunctionCall","src":"443:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"434:3:201"},"nodeType":"YulFunctionCall","src":"434:98:201"},{"kind":"number","nodeType":"YulLiteral","src":"534:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"430:3:201"},"nodeType":"YulFunctionCall","src":"430:109:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"423:3:201"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"41:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"48:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"56:3:201","type":""}],"src":"14:531:201"},{"body":{"nodeType":"YulBlock","src":"671:99:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"688:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"699:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"681:6:201"},"nodeType":"YulFunctionCall","src":"681:21:201"},"nodeType":"YulExpressionStatement","src":"681:21:201"},{"nodeType":"YulAssignment","src":"711:53:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"737:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"749:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"760:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"745:3:201"},"nodeType":"YulFunctionCall","src":"745:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"719:17:201"},"nodeType":"YulFunctionCall","src":"719:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"711:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"640:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"651:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"662:4:201","type":""}],"src":"550:220:201"},{"body":{"nodeType":"YulBlock","src":"824:147:201","statements":[{"nodeType":"YulAssignment","src":"834:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"856:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"843:12:201"},"nodeType":"YulFunctionCall","src":"843:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"834:5:201"}]},{"body":{"nodeType":"YulBlock","src":"949:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"958:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"961:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"951:6:201"},"nodeType":"YulFunctionCall","src":"951:12:201"},"nodeType":"YulExpressionStatement","src":"951:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"885:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"896:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"903:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"892:3:201"},"nodeType":"YulFunctionCall","src":"892:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"882:2:201"},"nodeType":"YulFunctionCall","src":"882:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"875:6:201"},"nodeType":"YulFunctionCall","src":"875:73:201"},"nodeType":"YulIf","src":"872:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"803:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"814:5:201","type":""}],"src":"775:196:201"},{"body":{"nodeType":"YulBlock","src":"1063:167:201","statements":[{"body":{"nodeType":"YulBlock","src":"1109:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1118:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1121:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1111:6:201"},"nodeType":"YulFunctionCall","src":"1111:12:201"},"nodeType":"YulExpressionStatement","src":"1111:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1084:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1093:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1080:3:201"},"nodeType":"YulFunctionCall","src":"1080:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1105:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1076:3:201"},"nodeType":"YulFunctionCall","src":"1076:32:201"},"nodeType":"YulIf","src":"1073:52:201"},{"nodeType":"YulAssignment","src":"1134:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1163:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1144:18:201"},"nodeType":"YulFunctionCall","src":"1144:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1134:6:201"}]},{"nodeType":"YulAssignment","src":"1182:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1209:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1220:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1205:3:201"},"nodeType":"YulFunctionCall","src":"1205:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1192:12:201"},"nodeType":"YulFunctionCall","src":"1192:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1182:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1021:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1032:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1044:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1052:6:201","type":""}],"src":"976:254:201"},{"body":{"nodeType":"YulBlock","src":"1330:92:201","statements":[{"nodeType":"YulAssignment","src":"1340:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1352:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1363:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1348:3:201"},"nodeType":"YulFunctionCall","src":"1348:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1340:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1382:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1407:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1400:6:201"},"nodeType":"YulFunctionCall","src":"1400:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1393:6:201"},"nodeType":"YulFunctionCall","src":"1393:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1375:6:201"},"nodeType":"YulFunctionCall","src":"1375:41:201"},"nodeType":"YulExpressionStatement","src":"1375:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1299:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1310:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1321:4:201","type":""}],"src":"1235:187:201"},{"body":{"nodeType":"YulBlock","src":"1528:76:201","statements":[{"nodeType":"YulAssignment","src":"1538:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1550:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1561:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1546:3:201"},"nodeType":"YulFunctionCall","src":"1546:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1538:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1580:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"1591:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1573:6:201"},"nodeType":"YulFunctionCall","src":"1573:25:201"},"nodeType":"YulExpressionStatement","src":"1573:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1497:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1508:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1519:4:201","type":""}],"src":"1427:177:201"},{"body":{"nodeType":"YulBlock","src":"1713:224:201","statements":[{"body":{"nodeType":"YulBlock","src":"1759:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1768:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1771:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1761:6:201"},"nodeType":"YulFunctionCall","src":"1761:12:201"},"nodeType":"YulExpressionStatement","src":"1761:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1734:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1743:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1730:3:201"},"nodeType":"YulFunctionCall","src":"1730:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1755:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1726:3:201"},"nodeType":"YulFunctionCall","src":"1726:32:201"},"nodeType":"YulIf","src":"1723:52:201"},{"nodeType":"YulAssignment","src":"1784:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1813:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1794:18:201"},"nodeType":"YulFunctionCall","src":"1794:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1784:6:201"}]},{"nodeType":"YulAssignment","src":"1832:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1865:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1876:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1861:3:201"},"nodeType":"YulFunctionCall","src":"1861:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1842:18:201"},"nodeType":"YulFunctionCall","src":"1842:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1832:6:201"}]},{"nodeType":"YulAssignment","src":"1889:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1916:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1927:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1912:3:201"},"nodeType":"YulFunctionCall","src":"1912:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1899:12:201"},"nodeType":"YulFunctionCall","src":"1899:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1889:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1663:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1674:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1686:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1694:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1702:6:201","type":""}],"src":"1609:328:201"},{"body":{"nodeType":"YulBlock","src":"2043:76:201","statements":[{"nodeType":"YulAssignment","src":"2053:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2065:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2076:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2061:3:201"},"nodeType":"YulFunctionCall","src":"2061:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2053:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2095:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"2106:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2088:6:201"},"nodeType":"YulFunctionCall","src":"2088:25:201"},"nodeType":"YulExpressionStatement","src":"2088:25:201"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2012:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2023:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2034:4:201","type":""}],"src":"1942:177:201"},{"body":{"nodeType":"YulBlock","src":"2221:87:201","statements":[{"nodeType":"YulAssignment","src":"2231:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2243:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2254:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2239:3:201"},"nodeType":"YulFunctionCall","src":"2239:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2231:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2273:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2288:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2296:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2284:3:201"},"nodeType":"YulFunctionCall","src":"2284:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2266:6:201"},"nodeType":"YulFunctionCall","src":"2266:36:201"},"nodeType":"YulExpressionStatement","src":"2266:36:201"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2190:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2201:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2212:4:201","type":""}],"src":"2124:184:201"},{"body":{"nodeType":"YulBlock","src":"2383:116:201","statements":[{"body":{"nodeType":"YulBlock","src":"2429:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2438:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2441:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2431:6:201"},"nodeType":"YulFunctionCall","src":"2431:12:201"},"nodeType":"YulExpressionStatement","src":"2431:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2404:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2413:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2400:3:201"},"nodeType":"YulFunctionCall","src":"2400:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2425:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2396:3:201"},"nodeType":"YulFunctionCall","src":"2396:32:201"},"nodeType":"YulIf","src":"2393:52:201"},{"nodeType":"YulAssignment","src":"2454:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2483:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2464:18:201"},"nodeType":"YulFunctionCall","src":"2464:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2454:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2349:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2360:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2372:6:201","type":""}],"src":"2313:186:201"},{"body":{"nodeType":"YulBlock","src":"2623:99:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2640:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2651:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2633:6:201"},"nodeType":"YulFunctionCall","src":"2633:21:201"},"nodeType":"YulExpressionStatement","src":"2633:21:201"},{"nodeType":"YulAssignment","src":"2663:53:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2689:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2701:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2712:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2697:3:201"},"nodeType":"YulFunctionCall","src":"2697:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"2671:17:201"},"nodeType":"YulFunctionCall","src":"2671:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2663:4:201"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2592:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2603:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2614:4:201","type":""}],"src":"2504:218:201"},{"body":{"nodeType":"YulBlock","src":"2797:110:201","statements":[{"body":{"nodeType":"YulBlock","src":"2843:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2852:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2855:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2845:6:201"},"nodeType":"YulFunctionCall","src":"2845:12:201"},"nodeType":"YulExpressionStatement","src":"2845:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2818:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2827:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2814:3:201"},"nodeType":"YulFunctionCall","src":"2814:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2839:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2810:3:201"},"nodeType":"YulFunctionCall","src":"2810:32:201"},"nodeType":"YulIf","src":"2807:52:201"},{"nodeType":"YulAssignment","src":"2868:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2891:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2878:12:201"},"nodeType":"YulFunctionCall","src":"2878:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2868:6:201"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2763:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2774:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2786:6:201","type":""}],"src":"2727:180:201"},{"body":{"nodeType":"YulBlock","src":"3082:523:201","statements":[{"body":{"nodeType":"YulBlock","src":"3129:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3138:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3141:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3131:6:201"},"nodeType":"YulFunctionCall","src":"3131:12:201"},"nodeType":"YulExpressionStatement","src":"3131:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3103:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3112:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3099:3:201"},"nodeType":"YulFunctionCall","src":"3099:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3124:3:201","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3095:3:201"},"nodeType":"YulFunctionCall","src":"3095:33:201"},"nodeType":"YulIf","src":"3092:53:201"},{"nodeType":"YulAssignment","src":"3154:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3183:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3164:18:201"},"nodeType":"YulFunctionCall","src":"3164:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3154:6:201"}]},{"nodeType":"YulAssignment","src":"3202:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3235:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3246:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3231:3:201"},"nodeType":"YulFunctionCall","src":"3231:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3212:18:201"},"nodeType":"YulFunctionCall","src":"3212:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3202:6:201"}]},{"nodeType":"YulAssignment","src":"3259:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3286:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3297:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3282:3:201"},"nodeType":"YulFunctionCall","src":"3282:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3269:12:201"},"nodeType":"YulFunctionCall","src":"3269:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3259:6:201"}]},{"nodeType":"YulAssignment","src":"3310:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3337:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3348:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3333:3:201"},"nodeType":"YulFunctionCall","src":"3333:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3320:12:201"},"nodeType":"YulFunctionCall","src":"3320:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3310:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3361:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3391:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3402:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3387:3:201"},"nodeType":"YulFunctionCall","src":"3387:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3374:12:201"},"nodeType":"YulFunctionCall","src":"3374:33:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3365:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3455:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3464:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3467:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3457:6:201"},"nodeType":"YulFunctionCall","src":"3457:12:201"},"nodeType":"YulExpressionStatement","src":"3457:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3429:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3440:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"3447:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3436:3:201"},"nodeType":"YulFunctionCall","src":"3436:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3426:2:201"},"nodeType":"YulFunctionCall","src":"3426:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3419:6:201"},"nodeType":"YulFunctionCall","src":"3419:35:201"},"nodeType":"YulIf","src":"3416:55:201"},{"nodeType":"YulAssignment","src":"3480:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3490:5:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3480:6:201"}]},{"nodeType":"YulAssignment","src":"3504:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3531:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3542:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3527:3:201"},"nodeType":"YulFunctionCall","src":"3527:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3514:12:201"},"nodeType":"YulFunctionCall","src":"3514:33:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"3504:6:201"}]},{"nodeType":"YulAssignment","src":"3556:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3583:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3594:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3579:3:201"},"nodeType":"YulFunctionCall","src":"3579:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3566:12:201"},"nodeType":"YulFunctionCall","src":"3566:33:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"3556:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3000:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3011:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3023:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3031:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3039:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3047:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3055:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"3063:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"3071:6:201","type":""}],"src":"2912:693:201"},{"body":{"nodeType":"YulBlock","src":"3697:173:201","statements":[{"body":{"nodeType":"YulBlock","src":"3743:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3752:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3755:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3745:6:201"},"nodeType":"YulFunctionCall","src":"3745:12:201"},"nodeType":"YulExpressionStatement","src":"3745:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3718:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3727:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3714:3:201"},"nodeType":"YulFunctionCall","src":"3714:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3739:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3710:3:201"},"nodeType":"YulFunctionCall","src":"3710:32:201"},"nodeType":"YulIf","src":"3707:52:201"},{"nodeType":"YulAssignment","src":"3768:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3797:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3778:18:201"},"nodeType":"YulFunctionCall","src":"3778:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3768:6:201"}]},{"nodeType":"YulAssignment","src":"3816:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3849:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3860:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3845:3:201"},"nodeType":"YulFunctionCall","src":"3845:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3826:18:201"},"nodeType":"YulFunctionCall","src":"3826:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3816:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3655:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3666:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3678:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3686:6:201","type":""}],"src":"3610:260:201"},{"body":{"nodeType":"YulBlock","src":"3930:382:201","statements":[{"nodeType":"YulAssignment","src":"3940:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3954:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"3957:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"3950:3:201"},"nodeType":"YulFunctionCall","src":"3950:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3940:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3971:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"4001:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"4007:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3997:3:201"},"nodeType":"YulFunctionCall","src":"3997:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"3975:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4048:31:201","statements":[{"nodeType":"YulAssignment","src":"4050:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4064:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4072:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4060:3:201"},"nodeType":"YulFunctionCall","src":"4060:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"4050:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"4028:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4021:6:201"},"nodeType":"YulFunctionCall","src":"4021:26:201"},"nodeType":"YulIf","src":"4018:61:201"},{"body":{"nodeType":"YulBlock","src":"4138:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4159:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4162:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4152:6:201"},"nodeType":"YulFunctionCall","src":"4152:88:201"},"nodeType":"YulExpressionStatement","src":"4152:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4260:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4263:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4253:6:201"},"nodeType":"YulFunctionCall","src":"4253:15:201"},"nodeType":"YulExpressionStatement","src":"4253:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4288:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4291:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4281:6:201"},"nodeType":"YulFunctionCall","src":"4281:15:201"},"nodeType":"YulExpressionStatement","src":"4281:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"4094:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4117:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4125:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4114:2:201"},"nodeType":"YulFunctionCall","src":"4114:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4091:2:201"},"nodeType":"YulFunctionCall","src":"4091:38:201"},"nodeType":"YulIf","src":"4088:218:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"3910:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"3919:6:201","type":""}],"src":"3875:437:201"},{"body":{"nodeType":"YulBlock","src":"4491:163:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4508:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4519:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4501:6:201"},"nodeType":"YulFunctionCall","src":"4501:21:201"},"nodeType":"YulExpressionStatement","src":"4501:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4542:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4553:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4538:3:201"},"nodeType":"YulFunctionCall","src":"4538:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"4558:2:201","type":"","value":"13"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4531:6:201"},"nodeType":"YulFunctionCall","src":"4531:30:201"},"nodeType":"YulExpressionStatement","src":"4531:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4581:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4592:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4577:3:201"},"nodeType":"YulFunctionCall","src":"4577:18:201"},{"hexValue":"494e56414c49445f4f574e4552","kind":"string","nodeType":"YulLiteral","src":"4597:15:201","type":"","value":"INVALID_OWNER"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4570:6:201"},"nodeType":"YulFunctionCall","src":"4570:43:201"},"nodeType":"YulExpressionStatement","src":"4570:43:201"},{"nodeType":"YulAssignment","src":"4622:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4634:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4645:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4630:3:201"},"nodeType":"YulFunctionCall","src":"4630:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4622:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_a30e2b4f22d955e30086ae3aef0adfd87eec9d0d3f055d6aa9af61f522dda886__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4468:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4482:4:201","type":""}],"src":"4317:337:201"},{"body":{"nodeType":"YulBlock","src":"4833:168:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4850:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4861:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4843:6:201"},"nodeType":"YulFunctionCall","src":"4843:21:201"},"nodeType":"YulExpressionStatement","src":"4843:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4884:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4895:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4880:3:201"},"nodeType":"YulFunctionCall","src":"4880:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"4900:2:201","type":"","value":"18"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4873:6:201"},"nodeType":"YulFunctionCall","src":"4873:30:201"},"nodeType":"YulExpressionStatement","src":"4873:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4923:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4934:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4919:3:201"},"nodeType":"YulFunctionCall","src":"4919:18:201"},{"hexValue":"494e56414c49445f45585049524154494f4e","kind":"string","nodeType":"YulLiteral","src":"4939:20:201","type":"","value":"INVALID_EXPIRATION"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4912:6:201"},"nodeType":"YulFunctionCall","src":"4912:48:201"},"nodeType":"YulExpressionStatement","src":"4912:48:201"},{"nodeType":"YulAssignment","src":"4969:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4981:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4992:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4977:3:201"},"nodeType":"YulFunctionCall","src":"4977:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4969:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fe3e5cf49f72bf8a6a8455c3e990f8479f5dfa09ac808886f330a39b0029c2d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4810:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4824:4:201","type":""}],"src":"4659:342:201"},{"body":{"nodeType":"YulBlock","src":"5247:373:201","statements":[{"nodeType":"YulAssignment","src":"5257:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5269:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5280:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5265:3:201"},"nodeType":"YulFunctionCall","src":"5265:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5257:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5300:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"5311:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5293:6:201"},"nodeType":"YulFunctionCall","src":"5293:25:201"},"nodeType":"YulExpressionStatement","src":"5293:25:201"},{"nodeType":"YulVariableDeclaration","src":"5327:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5337:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5331:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5399:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5410:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5395:3:201"},"nodeType":"YulFunctionCall","src":"5395:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"5419:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5427:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5415:3:201"},"nodeType":"YulFunctionCall","src":"5415:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5388:6:201"},"nodeType":"YulFunctionCall","src":"5388:43:201"},"nodeType":"YulExpressionStatement","src":"5388:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5451:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5462:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5447:3:201"},"nodeType":"YulFunctionCall","src":"5447:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"5471:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5479:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5467:3:201"},"nodeType":"YulFunctionCall","src":"5467:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5440:6:201"},"nodeType":"YulFunctionCall","src":"5440:43:201"},"nodeType":"YulExpressionStatement","src":"5440:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5503:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5514:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5499:3:201"},"nodeType":"YulFunctionCall","src":"5499:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"5519:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5492:6:201"},"nodeType":"YulFunctionCall","src":"5492:34:201"},"nodeType":"YulExpressionStatement","src":"5492:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5546:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5557:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5542:3:201"},"nodeType":"YulFunctionCall","src":"5542:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"5563:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5535:6:201"},"nodeType":"YulFunctionCall","src":"5535:35:201"},"nodeType":"YulExpressionStatement","src":"5535:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5590:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5601:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5586:3:201"},"nodeType":"YulFunctionCall","src":"5586:19:201"},{"name":"value5","nodeType":"YulIdentifier","src":"5607:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5579:6:201"},"nodeType":"YulFunctionCall","src":"5579:35:201"},"nodeType":"YulExpressionStatement","src":"5579:35:201"}]},"name":"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5176:9:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"5187:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"5195:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5203:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5211:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5219:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5227:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5238:4:201","type":""}],"src":"5006:614:201"},{"body":{"nodeType":"YulBlock","src":"5873:196:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5890:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"5895:66:201","type":"","value":"0x1901000000000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5883:6:201"},"nodeType":"YulFunctionCall","src":"5883:79:201"},"nodeType":"YulExpressionStatement","src":"5883:79:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5982:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"5987:1:201","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5978:3:201"},"nodeType":"YulFunctionCall","src":"5978:11:201"},{"name":"value0","nodeType":"YulIdentifier","src":"5991:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5971:6:201"},"nodeType":"YulFunctionCall","src":"5971:27:201"},"nodeType":"YulExpressionStatement","src":"5971:27:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6018:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"6023:2:201","type":"","value":"34"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6014:3:201"},"nodeType":"YulFunctionCall","src":"6014:12:201"},{"name":"value1","nodeType":"YulIdentifier","src":"6028:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6007:6:201"},"nodeType":"YulFunctionCall","src":"6007:28:201"},"nodeType":"YulExpressionStatement","src":"6007:28:201"},{"nodeType":"YulAssignment","src":"6044:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6055:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"6060:2:201","type":"","value":"66"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6051:3:201"},"nodeType":"YulFunctionCall","src":"6051:12:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"6044:3:201"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"5841:3:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5846:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5854:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"5865:3:201","type":""}],"src":"5625:444:201"},{"body":{"nodeType":"YulBlock","src":"6255:217:201","statements":[{"nodeType":"YulAssignment","src":"6265:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6277:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6288:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6273:3:201"},"nodeType":"YulFunctionCall","src":"6273:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6265:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6308:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"6319:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6301:6:201"},"nodeType":"YulFunctionCall","src":"6301:25:201"},"nodeType":"YulExpressionStatement","src":"6301:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6346:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6357:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6342:3:201"},"nodeType":"YulFunctionCall","src":"6342:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"6366:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"6374:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6362:3:201"},"nodeType":"YulFunctionCall","src":"6362:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6335:6:201"},"nodeType":"YulFunctionCall","src":"6335:45:201"},"nodeType":"YulExpressionStatement","src":"6335:45:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6400:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6411:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6396:3:201"},"nodeType":"YulFunctionCall","src":"6396:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"6416:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6389:6:201"},"nodeType":"YulFunctionCall","src":"6389:34:201"},"nodeType":"YulExpressionStatement","src":"6389:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6443:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6454:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6439:3:201"},"nodeType":"YulFunctionCall","src":"6439:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"6459:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6432:6:201"},"nodeType":"YulFunctionCall","src":"6432:34:201"},"nodeType":"YulExpressionStatement","src":"6432:34:201"}]},"name":"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6200:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6211:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6219:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6227:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6235:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6246:4:201","type":""}],"src":"6074:398:201"},{"body":{"nodeType":"YulBlock","src":"6651:167:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6668:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6679:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6661:6:201"},"nodeType":"YulFunctionCall","src":"6661:21:201"},"nodeType":"YulExpressionStatement","src":"6661:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6702:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6713:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6698:3:201"},"nodeType":"YulFunctionCall","src":"6698:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"6718:2:201","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6691:6:201"},"nodeType":"YulFunctionCall","src":"6691:30:201"},"nodeType":"YulExpressionStatement","src":"6691:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6741:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6752:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6737:3:201"},"nodeType":"YulFunctionCall","src":"6737:18:201"},{"hexValue":"494e56414c49445f5349474e4154555245","kind":"string","nodeType":"YulLiteral","src":"6757:19:201","type":"","value":"INVALID_SIGNATURE"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6730:6:201"},"nodeType":"YulFunctionCall","src":"6730:47:201"},"nodeType":"YulExpressionStatement","src":"6730:47:201"},{"nodeType":"YulAssignment","src":"6786:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6798:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6809:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6794:3:201"},"nodeType":"YulFunctionCall","src":"6794:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6786:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_5e2e9eaa2d734966dea0900deacd15b20129fbce05255d633a3ce5ebca181b88__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6628:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6642:4:201","type":""}],"src":"6477:341:201"},{"body":{"nodeType":"YulBlock","src":"6871:234:201","statements":[{"body":{"nodeType":"YulBlock","src":"6906:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6927:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6930:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6920:6:201"},"nodeType":"YulFunctionCall","src":"6920:88:201"},"nodeType":"YulExpressionStatement","src":"6920:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7028:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7031:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7021:6:201"},"nodeType":"YulFunctionCall","src":"7021:15:201"},"nodeType":"YulExpressionStatement","src":"7021:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7056:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7059:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7049:6:201"},"nodeType":"YulFunctionCall","src":"7049:15:201"},"nodeType":"YulExpressionStatement","src":"7049:15:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6887:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"6894:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6890:3:201"},"nodeType":"YulFunctionCall","src":"6890:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6884:2:201"},"nodeType":"YulFunctionCall","src":"6884:13:201"},"nodeType":"YulIf","src":"6881:193:201"},{"nodeType":"YulAssignment","src":"7083:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7094:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"7097:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7090:3:201"},"nodeType":"YulFunctionCall","src":"7090:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"7083:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"6854:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"6857:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"6863:3:201","type":""}],"src":"6823:282:201"},{"body":{"nodeType":"YulBlock","src":"7284:226:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7301:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7312:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7294:6:201"},"nodeType":"YulFunctionCall","src":"7294:21:201"},"nodeType":"YulExpressionStatement","src":"7294:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7335:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7346:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7331:3:201"},"nodeType":"YulFunctionCall","src":"7331:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"7351:2:201","type":"","value":"36"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7324:6:201"},"nodeType":"YulFunctionCall","src":"7324:30:201"},"nodeType":"YulExpressionStatement","src":"7324:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7374:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7385:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7370:3:201"},"nodeType":"YulFunctionCall","src":"7370:18:201"},{"hexValue":"45524332303a20617070726f76652066726f6d20746865207a65726f20616464","kind":"string","nodeType":"YulLiteral","src":"7390:34:201","type":"","value":"ERC20: approve from the zero add"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7363:6:201"},"nodeType":"YulFunctionCall","src":"7363:62:201"},"nodeType":"YulExpressionStatement","src":"7363:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7445:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7456:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7441:3:201"},"nodeType":"YulFunctionCall","src":"7441:18:201"},{"hexValue":"72657373","kind":"string","nodeType":"YulLiteral","src":"7461:6:201","type":"","value":"ress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7434:6:201"},"nodeType":"YulFunctionCall","src":"7434:34:201"},"nodeType":"YulExpressionStatement","src":"7434:34:201"},{"nodeType":"YulAssignment","src":"7477:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7489:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7500:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7485:3:201"},"nodeType":"YulFunctionCall","src":"7485:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7477:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7261:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7275:4:201","type":""}],"src":"7110:400:201"},{"body":{"nodeType":"YulBlock","src":"7689:224:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7706:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7717:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7699:6:201"},"nodeType":"YulFunctionCall","src":"7699:21:201"},"nodeType":"YulExpressionStatement","src":"7699:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7740:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7751:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7736:3:201"},"nodeType":"YulFunctionCall","src":"7736:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"7756:2:201","type":"","value":"34"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7729:6:201"},"nodeType":"YulFunctionCall","src":"7729:30:201"},"nodeType":"YulExpressionStatement","src":"7729:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7779:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7790:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7775:3:201"},"nodeType":"YulFunctionCall","src":"7775:18:201"},{"hexValue":"45524332303a20617070726f766520746f20746865207a65726f206164647265","kind":"string","nodeType":"YulLiteral","src":"7795:34:201","type":"","value":"ERC20: approve to the zero addre"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7768:6:201"},"nodeType":"YulFunctionCall","src":"7768:62:201"},"nodeType":"YulExpressionStatement","src":"7768:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7850:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7861:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7846:3:201"},"nodeType":"YulFunctionCall","src":"7846:18:201"},{"hexValue":"7373","kind":"string","nodeType":"YulLiteral","src":"7866:4:201","type":"","value":"ss"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7839:6:201"},"nodeType":"YulFunctionCall","src":"7839:32:201"},"nodeType":"YulExpressionStatement","src":"7839:32:201"},{"nodeType":"YulAssignment","src":"7880:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7892:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7903:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7888:3:201"},"nodeType":"YulFunctionCall","src":"7888:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7880:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7666:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7680:4:201","type":""}],"src":"7515:398:201"},{"body":{"nodeType":"YulBlock","src":"8092:227:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8109:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8120:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8102:6:201"},"nodeType":"YulFunctionCall","src":"8102:21:201"},"nodeType":"YulExpressionStatement","src":"8102:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8143:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8154:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8139:3:201"},"nodeType":"YulFunctionCall","src":"8139:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"8159:2:201","type":"","value":"37"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8132:6:201"},"nodeType":"YulFunctionCall","src":"8132:30:201"},"nodeType":"YulExpressionStatement","src":"8132:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8182:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8193:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8178:3:201"},"nodeType":"YulFunctionCall","src":"8178:18:201"},{"hexValue":"45524332303a207472616e736665722066726f6d20746865207a65726f206164","kind":"string","nodeType":"YulLiteral","src":"8198:34:201","type":"","value":"ERC20: transfer from the zero ad"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8171:6:201"},"nodeType":"YulFunctionCall","src":"8171:62:201"},"nodeType":"YulExpressionStatement","src":"8171:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8253:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8264:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8249:3:201"},"nodeType":"YulFunctionCall","src":"8249:18:201"},{"hexValue":"6472657373","kind":"string","nodeType":"YulLiteral","src":"8269:7:201","type":"","value":"dress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8242:6:201"},"nodeType":"YulFunctionCall","src":"8242:35:201"},"nodeType":"YulExpressionStatement","src":"8242:35:201"},{"nodeType":"YulAssignment","src":"8286:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8298:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8309:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8294:3:201"},"nodeType":"YulFunctionCall","src":"8294:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8286:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8069:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8083:4:201","type":""}],"src":"7918:401:201"},{"body":{"nodeType":"YulBlock","src":"8498:225:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8515:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8526:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8508:6:201"},"nodeType":"YulFunctionCall","src":"8508:21:201"},"nodeType":"YulExpressionStatement","src":"8508:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8549:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8560:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8545:3:201"},"nodeType":"YulFunctionCall","src":"8545:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"8565:2:201","type":"","value":"35"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8538:6:201"},"nodeType":"YulFunctionCall","src":"8538:30:201"},"nodeType":"YulExpressionStatement","src":"8538:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8588:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8599:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8584:3:201"},"nodeType":"YulFunctionCall","src":"8584:18:201"},{"hexValue":"45524332303a207472616e7366657220746f20746865207a65726f2061646472","kind":"string","nodeType":"YulLiteral","src":"8604:34:201","type":"","value":"ERC20: transfer to the zero addr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8577:6:201"},"nodeType":"YulFunctionCall","src":"8577:62:201"},"nodeType":"YulExpressionStatement","src":"8577:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8659:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8670:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8655:3:201"},"nodeType":"YulFunctionCall","src":"8655:18:201"},{"hexValue":"657373","kind":"string","nodeType":"YulLiteral","src":"8675:5:201","type":"","value":"ess"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8648:6:201"},"nodeType":"YulFunctionCall","src":"8648:33:201"},"nodeType":"YulExpressionStatement","src":"8648:33:201"},{"nodeType":"YulAssignment","src":"8690:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8702:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8713:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8698:3:201"},"nodeType":"YulFunctionCall","src":"8698:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8690:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8475:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8489:4:201","type":""}],"src":"8324:399:201"},{"body":{"nodeType":"YulBlock","src":"8902:181:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8919:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8930:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8912:6:201"},"nodeType":"YulFunctionCall","src":"8912:21:201"},"nodeType":"YulExpressionStatement","src":"8912:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8953:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8964:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8949:3:201"},"nodeType":"YulFunctionCall","src":"8949:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"8969:2:201","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8942:6:201"},"nodeType":"YulFunctionCall","src":"8942:30:201"},"nodeType":"YulExpressionStatement","src":"8942:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8992:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9003:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8988:3:201"},"nodeType":"YulFunctionCall","src":"8988:18:201"},{"hexValue":"45524332303a206d696e7420746f20746865207a65726f2061646472657373","kind":"string","nodeType":"YulLiteral","src":"9008:33:201","type":"","value":"ERC20: mint to the zero address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8981:6:201"},"nodeType":"YulFunctionCall","src":"8981:61:201"},"nodeType":"YulExpressionStatement","src":"8981:61:201"},{"nodeType":"YulAssignment","src":"9051:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9063:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9074:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9059:3:201"},"nodeType":"YulFunctionCall","src":"9059:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9051:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8879:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8893:4:201","type":""}],"src":"8728:355:201"}]},"contents":"{\n    { }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        let value := calldataload(add(headStart, 128))\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value4 := value\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_a30e2b4f22d955e30086ae3aef0adfd87eec9d0d3f055d6aa9af61f522dda886__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 13)\n        mstore(add(headStart, 64), \"INVALID_OWNER\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_9fe3e5cf49f72bf8a6a8455c3e990f8479f5dfa09ac808886f330a39b0029c2d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 18)\n        mstore(add(headStart, 64), \"INVALID_EXPIRATION\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, 0x1901000000000000000000000000000000000000000000000000000000000000)\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_stringliteral_5e2e9eaa2d734966dea0900deacd15b20129fbce05255d633a3ce5ebca181b88__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"INVALID_SIGNATURE\")\n        tail := add(headStart, 96)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        sum := add(x, y)\n    }\n    function abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"ERC20: approve from the zero add\")\n        mstore(add(headStart, 96), \"ress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ERC20: approve to the zero addre\")\n        mstore(add(headStart, 96), \"ss\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC20: transfer from the zero ad\")\n        mstore(add(headStart, 96), \"dress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 35)\n        mstore(add(headStart, 64), \"ERC20: transfer to the zero addr\")\n        mstore(add(headStart, 96), \"ess\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ERC20: mint to the zero address\")\n        tail := add(headStart, 96)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106101365760003560e01c806370a08231116100b2578063a0712d6811610081578063a9059cbb11610066578063a9059cbb146102e2578063d505accf146102f5578063dd62ed3e1461030a57600080fd5b8063a0712d68146102bc578063a457c2d7146102cf57600080fd5b806370a082311461020c57806378160376146102425780637ecebe001461027e57806395d89b41146102b457600080fd5b806330adf81f116101095780633644e515116100ee5780633644e515146101dd57806339509351146101e657806340c10f19146101f957600080fd5b806330adf81f146101a1578063313ce567146101c857600080fd5b806306fdde031461013b578063095ea7b31461015957806318160ddd1461017c57806323b872dd1461018e575b600080fd5b610143610350565b6040516101509190610e2f565b60405180910390f35b61016c610167366004610e72565b6103e2565b6040519015158152602001610150565b6002545b604051908152602001610150565b61016c61019c366004610e9c565b6103f9565b6101807f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055460405160ff9091168152602001610150565b61018060075481565b61016c6101f4366004610e72565b61046f565b61016c610207366004610e72565b6104b2565b61018061021a366004610ed8565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101436040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b61018061028c366004610ed8565b73ffffffffffffffffffffffffffffffffffffffff1660009081526006602052604090205490565b6101436104be565b61016c6102ca366004610ef3565b6104cd565b61016c6102dd366004610e72565b6104e1565b61016c6102f0366004610e72565b61053d565b610308610303366004610f0c565b61054a565b005b610180610318366004610f7f565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461035f90610fb2565b80601f016020809104026020016040519081016040528092919081815260200182805461038b90610fb2565b80156103d85780601f106103ad576101008083540402835291602001916103d8565b820191906000526020600020905b8154815290600101906020018083116103bb57829003601f168201915b5050505050905090565b60006103ef338484610870565b5060015b92915050565b6000610406848484610a24565b61046584336104608560405180606001604052806028815260200161106c6028913973ffffffffffffffffffffffffffffffffffffffff8a1660009081526001602090815260408083203384529091529020549190610c4e565b610870565b5060019392505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103ef9185906104609086610c95565b60006103ef8383610ca5565b60606004805461035f90610fb2565b60006104d93383610ca5565b506001919050565b60006103ef3384610460856040518060600160405280602581526020016110946025913933600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d1684529091529020549190610c4e565b60006103ef338484610a24565b73ffffffffffffffffffffffffffffffffffffffff87166105cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f494e56414c49445f4f574e45520000000000000000000000000000000000000060448201526064015b60405180910390fd5b83421115610636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f494e56414c49445f45585049524154494f4e000000000000000000000000000060448201526064016105c3565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526006602090815260408083205460075482517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958c166060860152608085018b905260a0850181905260c08086018b90528251808703909101815260e08601909252815191909201207f19010000000000000000000000000000000000000000000000000000000000006101008501526101028401949094526101228301939093529061014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa15801561078b573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614610829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f494e56414c49445f5349474e415455524500000000000000000000000000000060448201526064016105c3565b610834826001611006565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260066020526040902055610865898989610870565b505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316610912576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016105c3565b73ffffffffffffffffffffffffffffffffffffffff82166109b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016105c3565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610ac7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016105c3565b73ffffffffffffffffffffffffffffffffffffffff8216610b6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016105c3565b610bb4816040518060600160405280602681526020016110466026913973ffffffffffffffffffffffffffffffffffffffff86166000908152602081905260409020549190610c4e565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610bf09082610c95565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a17565b8183038184821115610c8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c39190610e2f565b509392505050565b808201828110156103f357600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216610d22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105c3565b600254610d2f9082610c95565b60025573ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054610d629082610c95565b73ffffffffffffffffffffffffffffffffffffffff8316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000815180845260005b81811015610dea57602081850181015186830182015201610dce565b81811115610dfc576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610e426020830184610dc4565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e6d57600080fd5b919050565b60008060408385031215610e8557600080fd5b610e8e83610e49565b946020939093013593505050565b600080600060608486031215610eb157600080fd5b610eba84610e49565b9250610ec860208501610e49565b9150604084013590509250925092565b600060208284031215610eea57600080fd5b610e4282610e49565b600060208284031215610f0557600080fd5b5035919050565b600080600080600080600060e0888a031215610f2757600080fd5b610f3088610e49565b9650610f3e60208901610e49565b95506040880135945060608801359350608088013560ff81168114610f6257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610f9257600080fd5b610f9b83610e49565b9150610fa960208401610e49565b90509250929050565b600181811c90821680610fc657607f821691505b60208210811415611000577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008219821115611040577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dfffe4fa965322f007d41540331ebedc2c324ff72e0ae9c6908e3f7d8d36a6ed64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x136 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0xA0712D68 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2E2 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x2F5 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x30A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA0712D68 EQ PUSH2 0x2BC JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x2CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x20C JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x242 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x27E JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x2B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x109 JUMPI DUP1 PUSH4 0x3644E515 GT PUSH2 0xEE JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x1DD JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1E6 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x1F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x1A1 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x13B JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x159 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x17C JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x18E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x143 PUSH2 0x350 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x150 SWAP2 SWAP1 PUSH2 0xE2F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x16C PUSH2 0x167 CALLDATASIZE PUSH1 0x4 PUSH2 0xE72 JUMP JUMPDEST PUSH2 0x3E2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x150 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x150 JUMP JUMPDEST PUSH2 0x16C PUSH2 0x19C CALLDATASIZE PUSH1 0x4 PUSH2 0xE9C JUMP JUMPDEST PUSH2 0x3F9 JUMP JUMPDEST PUSH2 0x180 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x150 JUMP JUMPDEST PUSH2 0x180 PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x16C PUSH2 0x1F4 CALLDATASIZE PUSH1 0x4 PUSH2 0xE72 JUMP JUMPDEST PUSH2 0x46F JUMP JUMPDEST PUSH2 0x16C PUSH2 0x207 CALLDATASIZE PUSH1 0x4 PUSH2 0xE72 JUMP JUMPDEST PUSH2 0x4B2 JUMP JUMPDEST PUSH2 0x180 PUSH2 0x21A CALLDATASIZE PUSH1 0x4 PUSH2 0xED8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x143 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x180 PUSH2 0x28C CALLDATASIZE PUSH1 0x4 PUSH2 0xED8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x143 PUSH2 0x4BE JUMP JUMPDEST PUSH2 0x16C PUSH2 0x2CA CALLDATASIZE PUSH1 0x4 PUSH2 0xEF3 JUMP JUMPDEST PUSH2 0x4CD JUMP JUMPDEST PUSH2 0x16C PUSH2 0x2DD CALLDATASIZE PUSH1 0x4 PUSH2 0xE72 JUMP JUMPDEST PUSH2 0x4E1 JUMP JUMPDEST PUSH2 0x16C PUSH2 0x2F0 CALLDATASIZE PUSH1 0x4 PUSH2 0xE72 JUMP JUMPDEST PUSH2 0x53D JUMP JUMPDEST PUSH2 0x308 PUSH2 0x303 CALLDATASIZE PUSH1 0x4 PUSH2 0xF0C JUMP JUMPDEST PUSH2 0x54A JUMP JUMPDEST STOP JUMPDEST PUSH2 0x180 PUSH2 0x318 CALLDATASIZE PUSH1 0x4 PUSH2 0xF7F 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 PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x35F SWAP1 PUSH2 0xFB2 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x38B SWAP1 PUSH2 0xFB2 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x3D8 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3AD JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3D8 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 0x3BB JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3EF CALLER DUP5 DUP5 PUSH2 0x870 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x406 DUP5 DUP5 DUP5 PUSH2 0xA24 JUMP JUMPDEST PUSH2 0x465 DUP5 CALLER PUSH2 0x460 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x106C PUSH1 0x28 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xC4E JUMP JUMPDEST PUSH2 0x870 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP 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 0x3EF SWAP2 DUP6 SWAP1 PUSH2 0x460 SWAP1 DUP7 PUSH2 0xC95 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3EF DUP4 DUP4 PUSH2 0xCA5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x35F SWAP1 PUSH2 0xFB2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4D9 CALLER DUP4 PUSH2 0xCA5 JUMP JUMPDEST POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3EF CALLER DUP5 PUSH2 0x460 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1094 PUSH1 0x25 SWAP2 CODECOPY CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xC4E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3EF CALLER DUP5 DUP5 PUSH2 0xA24 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH2 0x5CC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F4F574E455200000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x636 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F45585049524154494F4E0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x7 SLOAD DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP13 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP12 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP7 ADD DUP12 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP8 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP7 ADD SWAP1 SWAP3 MSTORE DUP2 MLOAD SWAP2 SWAP1 SWAP3 ADD KECCAK256 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 PUSH2 0x100 DUP6 ADD MSTORE PUSH2 0x102 DUP5 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH2 0x122 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 PUSH2 0x142 ADD PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x78B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x829 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F5349474E4154555245000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH2 0x834 DUP3 PUSH1 0x1 PUSH2 0x1006 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x865 DUP10 DUP10 DUP10 PUSH2 0x870 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x912 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7265737300000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x9B5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7373000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0xAC7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6472657373000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0xB6A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6573730000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH2 0xBB4 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1046 PUSH1 0x26 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0xC4E 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 0xBF0 SWAP1 DUP3 PUSH2 0xC95 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE MLOAD DUP5 DUP2 MSTORE SWAP1 SWAP3 SWAP2 DUP7 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH2 0xA17 JUMP JUMPDEST DUP2 DUP4 SUB DUP2 DUP5 DUP3 GT ISZERO PUSH2 0xC8D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5C3 SWAP2 SWAP1 PUSH2 0xE2F JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x3F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0xD22 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0xD2F SWAP1 DUP3 PUSH2 0xC95 JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xD62 SWAP1 DUP3 PUSH2 0xC95 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP3 MLOAD DUP5 DUP2 MSTORE SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xDEA JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0xDCE JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xDFC JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xE42 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xDC4 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xE6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xE85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE8E DUP4 PUSH2 0xE49 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xEB1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xEBA DUP5 PUSH2 0xE49 JUMP JUMPDEST SWAP3 POP PUSH2 0xEC8 PUSH1 0x20 DUP6 ADD PUSH2 0xE49 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xEEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE42 DUP3 PUSH2 0xE49 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0xF27 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF30 DUP9 PUSH2 0xE49 JUMP JUMPDEST SWAP7 POP PUSH2 0xF3E PUSH1 0x20 DUP10 ADD PUSH2 0xE49 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xF62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xF92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF9B DUP4 PUSH2 0xE49 JUMP JUMPDEST SWAP2 POP PUSH2 0xFA9 PUSH1 0x20 DUP5 ADD PUSH2 0xE49 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0xFC6 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x1000 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1040 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP ADD SWAP1 JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x2062616C616E636545524332303A207472616E73 PUSH7 0x657220616D6F75 PUSH15 0x74206578636565647320616C6C6F77 PUSH2 0x6E63 PUSH6 0x45524332303A KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220DFFF 0xE4 STATICCALL SWAP7 MSTORE8 0x22 CREATE SMOD 0xD4 ISZERO BLOCKHASH CALLER 0x1E 0xBE 0xDC 0x2C ORIGIN 0x4F 0xF7 0x2E EXP 0xE9 0xC6 SWAP1 DUP15 EXTCODEHASH PUSH30 0x8D36A6ED64736F6C634300080A0033000000000000000000000000000000 ","sourceMap":"270:2384:60:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2123:75:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4029:156;;;;;;:::i;:::-;;:::i;:::-;;;1400:14:201;;1393:22;1375:41;;1363:2;1348:18;4029:156:6;1235:187:201;3102:92:6;3177:12;;3102:92;;;1573:25:201;;;1561:2;1546:18;3102:92:6;1427:177:201;4619:343:6;;;;;;:::i;:::-;;:::i;523:141:60:-;;569:95;523:141;;2975:75:6;3036:9;;2975:75;;3036:9;;;;2266:36:201;;2254:2;2239:18;2975:75:6;2124:184:201;764:31:60;;;;;;5331:205:6;;;;;;:::i;:::-;;:::i;2430:117:60:-;;;;;;:::i;:::-;;:::i;3244:111:6:-;;;;;;:::i;:::-;3332:18;;3310:7;3332:18;;;;;;;;;;;;3244:111;324:50:60;;364:10;;;;;;;;;;;;;;;;;324:50;;2551:101;;;;;;:::i;:::-;2633:14;;2611:7;2633:14;;;:7;:14;;;;;;;2551:101;2301:79:6;;;:::i;2097:105:60:-;;;;;;:::i;:::-;;:::i;5993:316:6:-;;;;;;:::i;:::-;;:::i;3540:162::-;;;;;;:::i;:::-;;:::i;1199:729:60:-;;;;;;:::i;:::-;;:::i;:::-;;3752:155:6;;;;;;:::i;:::-;3875:18;;;;3853:7;3875:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3752:155;2123:75;2160:13;2188:5;2181:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2123:75;:::o;4029:156::-;4112:4;4124:39;678:10:4;4147:7:6;4156:6;4124:8;:39::i;:::-;-1:-1:-1;4176:4:6;4029:156;;;;;:::o;4619:343::-;4741:4;4753:36;4763:6;4771:9;4782:6;4753:9;:36::i;:::-;4795:145;4811:6;678:10:4;4845:89:6;4883:6;4845:89;;;;;;;;;;;;;;;;;:19;;;;;;;:11;:19;;;;;;;;678:10:4;4845:33:6;;;;;;;;;;:37;:89::i;:::-;4795:8;:145::i;:::-;-1:-1:-1;4953:4:6;4619:343;;;;;:::o;5331:205::-;678:10:4;5419:4:6;5463:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;5419:4;;5431:83;;5454:7;;5463:50;;5502:10;5463:38;:50::i;2430:117:60:-;2492:4;2504:21;2510:7;2519:5;2504;:21::i;2301:79:6:-;2340:13;2368:7;2361:14;;;;;:::i;2097:105:60:-;2142:4;2154:26;678:10:4;2174:5:60;2154;:26::i;:::-;-1:-1:-1;2193:4:60;;2097:105;-1:-1:-1;2097:105:60:o;5993:316:6:-;6098:4;6110:177;678:10:4;6146:7:6;6161:120;6209:15;6161:120;;;;;;;;;;;;;;;;;678:10:4;6161:25:6;;;;:11;:25;;;;;;;;;:34;;;;;;;;;;;;:38;:120::i;3540:162::-;3626:4;3638:42;678:10:4;3662:9:6;3673:6;3638:9;:42::i;1199:729:60:-;1375:19;;;1367:45;;;;;;;4519:2:201;1367:45:60;;;4501:21:201;4558:2;4538:18;;;4531:30;4597:15;4577:18;;;4570:43;4630:18;;1367:45:60;;;;;;;;;1476:8;1457:15;:27;;1449:58;;;;;;;4861:2:201;1449:58:60;;;4843:21:201;4900:2;4880:18;;;4873:30;4939:20;4919:18;;;4912:48;4977:18;;1449:58:60;4659:342:201;1449:58:60;1541:14;;;;1513:25;1541:14;;;:7;:14;;;;;;;;;1641:16;;1677:79;;569:95;1677:79;;;5293:25:201;5395:18;;;5388:43;;;;5467:15;;;5447:18;;;5440:43;5499:18;;;5492:34;;;5542:19;;;5535:35;;;5586:19;;;;5579:35;;;1677:79:60;;;;;;;;;;5265:19:201;;;1677:79:60;;;1667:90;;;;;;;5895:66:201;1595:170:60;;;5883:79:201;5978:11;;;5971:27;;;;6014:12;;;6007:28;;;;1513:25:60;6051:12:201;;1595:170:60;;;;;;;;;;;;;1578:193;;1595:170;1578:193;;;;1794:26;;;;;;;;;6301:25:201;;;6374:4;6362:17;;6342:18;;;6335:45;;;;6396:18;;;6389:34;;;6439:18;;;6432:34;;;1578:193:60;-1:-1:-1;1794:26:60;;6273:19:201;;1794:26:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1785:35;;:5;:35;;;1777:65;;;;;;;6679:2:201;1777:65:60;;;6661:21:201;6718:2;6698:18;;;6691:30;6757:19;6737:18;;;6730:47;6794:18;;1777:65:60;6477:341:201;1777:65:60;1865:21;:17;1885:1;1865:21;:::i;:::-;1848:14;;;;;;;:7;:14;;;;;:38;1892:31;1856:5;1908:7;1917:5;1892:8;:31::i;:::-;1361:567;;1199:729;;;;;;;:::o;8935:322:6:-;9032:19;;;9024:68;;;;;;;7312:2:201;9024:68:6;;;7294:21:201;7351:2;7331:18;;;7324:30;7390:34;7370:18;;;7363:62;7461:6;7441:18;;;7434:34;7485:19;;9024:68:6;7110:400:201;9024:68:6;9106:21;;;9098:68;;;;;;;7717:2:201;9098:68:6;;;7699:21:201;7756:2;7736:18;;;7729:30;7795:34;7775:18;;;7768:62;7866:4;7846:18;;;7839:32;7888:19;;9098:68:6;7515:398:201;9098:68:6;9173:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9220:32;;1573:25:201;;;9220:32:6;;1546:18:201;9220:32:6;;;;;;;;8935:322;;;:::o;6753:504::-;6854:20;;;6846:70;;;;;;;8120:2:201;6846:70:6;;;8102:21:201;8159:2;8139:18;;;8132:30;8198:34;8178:18;;;8171:62;8269:7;8249:18;;;8242:35;8294:19;;6846:70:6;7918:401:201;6846:70:6;6930:23;;;6922:71;;;;;;;8526:2:201;6922:71:6;;;8508:21:201;8565:2;8545:18;;;8538:30;8604:34;8584:18;;;8577:62;8675:5;8655:18;;;8648:33;8698:19;;6922:71:6;8324:399:201;6922:71:6;7074;7096:6;7074:71;;;;;;;;;;;;;;;;;:17;;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;7054:17;;;;:9;:17;;;;;;;;;;;:91;;;;7174:20;;;;;;;:32;;7199:6;7174:24;:32::i;:::-;7151:20;;;;:9;:20;;;;;;;;;;;;:55;;;;7217:35;1573:25:201;;;7151:20:6;;7217:35;;;;;;1546:18:201;7217:35:6;1427:177:201;1011:161:14;1140:5;;;1153:7;1135:16;;;;1127:34;;;;;;;;;;;;;:::i;:::-;;1011:161;;;;;:::o;410:129::-;516:5;;;511:16;;;;503:25;;;;;7507:348:6;7586:21;;;7578:65;;;;;;;8930:2:201;7578:65:6;;;8912:21:201;8969:2;8949:18;;;8942:30;9008:33;8988:18;;;8981:61;9059:18;;7578:65:6;8728:355:201;7578:65:6;7721:12;;:24;;7738:6;7721:16;:24::i;:::-;7706:12;:39;7772:18;;;:9;:18;;;;;;;;;;;:30;;7795:6;7772:22;:30::i;:::-;7751:18;;;:9;:18;;;;;;;;;;;:51;;;;7813:37;;1573:25:201;;;7751:18:6;;:9;;7813:37;;1546:18:201;7813:37:6;;;;;;;7507:348;;:::o;14:531:201:-;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;336:6;333:1;330:13;327:87;;;402:1;395:4;386:6;381:3;377:16;373:27;366:38;327:87;-1:-1:-1;459:2:201;447:15;464:66;443:88;434:98;;;;534:4;430:109;;14:531;-1:-1:-1;;14:531:201:o;550:220::-;699:2;688:9;681:21;662:4;719:45;760:2;749:9;745:18;737:6;719:45;:::i;:::-;711:53;550:220;-1:-1:-1;;;550:220:201:o;775:196::-;843:20;;903:42;892:54;;882:65;;872:93;;961:1;958;951:12;872:93;775:196;;;:::o;976:254::-;1044:6;1052;1105:2;1093:9;1084:7;1080:23;1076:32;1073:52;;;1121:1;1118;1111:12;1073:52;1144:29;1163:9;1144:29;:::i;:::-;1134:39;1220:2;1205:18;;;;1192:32;;-1:-1:-1;;;976:254:201:o;1609:328::-;1686:6;1694;1702;1755:2;1743:9;1734:7;1730:23;1726:32;1723:52;;;1771:1;1768;1761:12;1723:52;1794:29;1813:9;1794:29;:::i;:::-;1784:39;;1842:38;1876:2;1865:9;1861:18;1842:38;:::i;:::-;1832:48;;1927:2;1916:9;1912:18;1899:32;1889:42;;1609:328;;;;;:::o;2313:186::-;2372:6;2425:2;2413:9;2404:7;2400:23;2396:32;2393:52;;;2441:1;2438;2431:12;2393:52;2464:29;2483:9;2464:29;:::i;2727:180::-;2786:6;2839:2;2827:9;2818:7;2814:23;2810:32;2807:52;;;2855:1;2852;2845:12;2807:52;-1:-1:-1;2878:23:201;;2727:180;-1:-1:-1;2727:180:201:o;2912:693::-;3023:6;3031;3039;3047;3055;3063;3071;3124:3;3112:9;3103:7;3099:23;3095:33;3092:53;;;3141:1;3138;3131:12;3092:53;3164:29;3183:9;3164:29;:::i;:::-;3154:39;;3212:38;3246:2;3235:9;3231:18;3212:38;:::i;:::-;3202:48;;3297:2;3286:9;3282:18;3269:32;3259:42;;3348:2;3337:9;3333:18;3320:32;3310:42;;3402:3;3391:9;3387:19;3374:33;3447:4;3440:5;3436:16;3429:5;3426:27;3416:55;;3467:1;3464;3457:12;3416:55;2912:693;;;;-1:-1:-1;2912:693:201;;;;3490:5;3542:3;3527:19;;3514:33;;-1:-1:-1;3594:3:201;3579:19;;;3566:33;;2912:693;-1:-1:-1;;2912:693:201:o;3610:260::-;3678:6;3686;3739:2;3727:9;3718:7;3714:23;3710:32;3707:52;;;3755:1;3752;3745:12;3707:52;3778:29;3797:9;3778:29;:::i;:::-;3768:39;;3826:38;3860:2;3849:9;3845:18;3826:38;:::i;:::-;3816:48;;3610:260;;;;;:::o;3875:437::-;3954:1;3950:12;;;;3997;;;4018:61;;4072:4;4064:6;4060:17;4050:27;;4018:61;4125:2;4117:6;4114:14;4094:18;4091:38;4088:218;;;4162:77;4159:1;4152:88;4263:4;4260:1;4253:15;4291:4;4288:1;4281:15;4088:218;;3875:437;;;:::o;6823:282::-;6863:3;6894:1;6890:6;6887:1;6884:13;6881:193;;;6930:77;6927:1;6920:88;7031:4;7028:1;7021:15;7059:4;7056:1;7049:15;6881:193;-1:-1:-1;7090:9:201;;6823:282::o"},"gasEstimates":{"creation":{"codeDepositCost":"866800","executionCost":"infinite","totalCost":"infinite"},"external":{"DOMAIN_SEPARATOR()":"2340","EIP712_REVISION()":"infinite","PERMIT_TYPEHASH()":"241","allowance(address,address)":"infinite","approve(address,uint256)":"24596","balanceOf(address)":"2539","decimals()":"2357","decreaseAllowance(address,uint256)":"infinite","increaseAllowance(address,uint256)":"infinite","mint(address,uint256)":"infinite","mint(uint256)":"infinite","name()":"infinite","nonces(address)":"2580","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"infinite","symbol()":"infinite","totalSupply()":"2349","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite"}},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","EIP712_REVISION()":"78160376","PERMIT_TYPEHASH()":"30adf81f","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","increaseAllowance(address,uint256)":"39509351","mint(address,uint256)":"40c10f19","mint(uint256)":"a0712d68","name()":"06fdde03","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EIP712_REVISION\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"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\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"mint\",\"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\":\"ERC20 minting logic\",\"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}.\"},\"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.\"},\"mint(address,uint256)\":{\"details\":\"Function to mint tokens to address\",\"params\":{\"account\":\"The account to mint tokens.\",\"value\":\"The amount of tokens to mint.\"},\"returns\":{\"_0\":\"A boolean that indicates if the operation was successful.\"}},\"mint(uint256)\":{\"details\":\"Function to mint tokens\",\"params\":{\"value\":\"The amount of tokens to mint.\"},\"returns\":{\"_0\":\"A boolean that indicates if the operation was successful.\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\",\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"owner\":\"The owner of the funds\",\"r\":\"Signature param\",\"s\":\"Signature param\",\"spender\":\"The spender\",\"v\":\"Signature param\",\"value\":\"The amount\"}},\"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`.\"}},\"title\":\"ERC20Mintable\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Allow passing a signed message to approve spending\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol\":\"MintableERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\nimport './IERC20.sol';\\nimport './SafeMath.sol';\\nimport './Address.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 Context, IERC20 {\\n  using SafeMath for uint256;\\n  using Address for address;\\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(_msgSender(), recipient, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-allowance}.\\n   */\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) 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(_msgSender(), 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   * - `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      _msgSender(),\\n      _allowances[sender][_msgSender()].sub(amount, 'ERC20: transfer amount 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(_msgSender(), spender, _allowances[_msgSender()][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(\\n    address spender,\\n    uint256 subtractedValue\\n  ) public virtual returns (bool) {\\n    _approve(\\n      _msgSender(),\\n      spender,\\n      _allowances[_msgSender()][spender].sub(\\n        subtractedValue,\\n        'ERC20: decreased allowance below zero'\\n      )\\n    );\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Moves tokens `amount` from `sender` to `recipient`.\\n   *\\n   * This is internal function is equivalent to {transfer}, and can be used to\\n   * e.g. implement automatic token fees, slashing mechanisms, etc.\\n   *\\n   * Emits a {Transfer} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `sender` cannot be the zero address.\\n   * - `recipient` cannot be the zero address.\\n   * - `sender` must have a balance of at least `amount`.\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount) internal virtual {\\n    require(sender != address(0), 'ERC20: transfer from the zero address');\\n    require(recipient != address(0), 'ERC20: transfer to the zero address');\\n\\n    _beforeTokenTransfer(sender, recipient, amount);\\n\\n    _balances[sender] = _balances[sender].sub(amount, 'ERC20: transfer amount 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    require(account != address(0), 'ERC20: mint to the zero address');\\n\\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), 'ERC20: burn from the zero address');\\n\\n    _beforeTokenTransfer(account, address(0), amount);\\n\\n    _balances[account] = _balances[account].sub(amount, 'ERC20: burn amount 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 is 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(address owner, address spender, uint256 amount) internal virtual {\\n    require(owner != address(0), 'ERC20: approve from the zero address');\\n    require(spender != address(0), 'ERC20: approve to the zero address');\\n\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @dev 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(address from, address to, uint256 amount) internal virtual {}\\n}\\n\",\"keccak256\":\"0x84e6a151684cce31e66c850677f7e9455d694e050e409e5ded05fb5528c6c7e4\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/// @title Optimized overflow and underflow safe math operations\\n/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\\nlibrary SafeMath {\\n  /// @notice Returns x + y, reverts if sum overflows uint256\\n  /// @param x The augend\\n  /// @param y The addend\\n  /// @return z The sum of x and y\\n  function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x + y) >= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @param message The error msg\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y, string memory message) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x, message);\\n    }\\n  }\\n\\n  /// @notice Returns x * y, reverts if overflows\\n  /// @param x The multiplicand\\n  /// @param y The multiplier\\n  /// @return z The product of x and y\\n  function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require(x == 0 || (z = x * y) / x == y);\\n    }\\n  }\\n\\n  /// @notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\\n  /// @param x The numerator\\n  /// @param y The denominator\\n  /// @return z The product of x and y\\n  function div(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    return x / y;\\n  }\\n}\\n\",\"keccak256\":\"0xf1c5d8ba70a5fc3e20dbbc2aa2a2278d2535a57bc1e9abf1228ebc3068a045f0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {ERC20} from '../../dependencies/openzeppelin/contracts/ERC20.sol';\\nimport {IERC20WithPermit} from '../../interfaces/IERC20WithPermit.sol';\\n\\n/**\\n * @title ERC20Mintable\\n * @dev ERC20 minting logic\\n */\\ncontract MintableERC20 is IERC20WithPermit, ERC20 {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n  bytes32 public constant PERMIT_TYPEHASH =\\n    keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 public DOMAIN_SEPARATOR;\\n\\n  constructor(string memory name, string memory symbol, uint8 decimals) ERC20(name, symbol) {\\n    uint256 chainId = block.chainid;\\n\\n    DOMAIN_SEPARATOR = keccak256(\\n      abi.encode(\\n        EIP712_DOMAIN,\\n        keccak256(bytes(name)),\\n        keccak256(EIP712_REVISION),\\n        chainId,\\n        address(this)\\n      )\\n    );\\n    _setupDecimals(decimals);\\n  }\\n\\n  /// @inheritdoc IERC20WithPermit\\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 override {\\n    require(owner != address(0), 'INVALID_OWNER');\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, 'INVALID_EXPIRATION');\\n    uint256 currentValidNonce = _nonces[owner];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR,\\n        keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, currentValidNonce, deadline))\\n      )\\n    );\\n    require(owner == ecrecover(digest, v, r, s), 'INVALID_SIGNATURE');\\n    _nonces[owner] = currentValidNonce + 1;\\n    _approve(owner, spender, value);\\n  }\\n\\n  /**\\n   * @dev Function to mint tokens\\n   * @param value The amount of tokens to mint.\\n   * @return A boolean that indicates if the operation was successful.\\n   */\\n  function mint(uint256 value) public returns (bool) {\\n    _mint(_msgSender(), value);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Function to mint tokens to address\\n   * @param account The account to mint tokens.\\n   * @param value The amount of tokens to mint.\\n   * @return A boolean that indicates if the operation was successful.\\n   */\\n  function mint(address account, uint256 value) public returns (bool) {\\n    _mint(account, value);\\n    return true;\\n  }\\n\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n}\\n\",\"keccak256\":\"0x8306245c732faf6038ba650428edda23197ee5977be4cd2a1e5e73263acca6b7\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":793,"contract":"@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol:MintableERC20","label":"_balances","offset":0,"slot":"0","type":"t_mapping(t_address,t_uint256)"},{"astId":799,"contract":"@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol:MintableERC20","label":"_allowances","offset":0,"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":801,"contract":"@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol:MintableERC20","label":"_totalSupply","offset":0,"slot":"2","type":"t_uint256"},{"astId":803,"contract":"@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol:MintableERC20","label":"_name","offset":0,"slot":"3","type":"t_string_storage"},{"astId":805,"contract":"@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol:MintableERC20","label":"_symbol","offset":0,"slot":"4","type":"t_string_storage"},{"astId":807,"contract":"@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol:MintableERC20","label":"_decimals","offset":0,"slot":"5","type":"t_uint8"},{"astId":8581,"contract":"@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol:MintableERC20","label":"_nonces","offset":0,"slot":"6","type":"t_mapping(t_address,t_uint256)"},{"astId":8583,"contract":"@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol:MintableERC20","label":"DOMAIN_SEPARATOR","offset":0,"slot":"7","type":"t_bytes32"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Allow passing a signed message to approve spending"}},"version":1}}},"@aave/core-v3/contracts/mocks/tokens/WETH9Mocked.sol":{"WETH9Mocked":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"guy","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"guy","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mint","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":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{"extract_byte_array_length":{"entryPoint":275,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:396:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"69:325:201","statements":[{"nodeType":"YulAssignment","src":"79:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"93:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"96:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"89:3:201"},"nodeType":"YulFunctionCall","src":"89:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"79:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"110:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"140:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"146:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"136:3:201"},"nodeType":"YulFunctionCall","src":"136:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"114:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"187:31:201","statements":[{"nodeType":"YulAssignment","src":"189:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"203:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"211:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"199:3:201"},"nodeType":"YulFunctionCall","src":"199:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"189:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"167:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"160:6:201"},"nodeType":"YulFunctionCall","src":"160:26:201"},"nodeType":"YulIf","src":"157:61:201"},{"body":{"nodeType":"YulBlock","src":"277:111:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"298:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"305:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"310:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"301:3:201"},"nodeType":"YulFunctionCall","src":"301:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"291:6:201"},"nodeType":"YulFunctionCall","src":"291:31:201"},"nodeType":"YulExpressionStatement","src":"291:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"342:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"345:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"335:6:201"},"nodeType":"YulFunctionCall","src":"335:15:201"},"nodeType":"YulExpressionStatement","src":"335:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"370:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"373:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"363:6:201"},"nodeType":"YulFunctionCall","src":"363:15:201"},"nodeType":"YulExpressionStatement","src":"363:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"233:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"256:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"264:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"253:2:201"},"nodeType":"YulFunctionCall","src":"253:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"230:2:201"},"nodeType":"YulFunctionCall","src":"230:38:201"},"nodeType":"YulIf","src":"227:161:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"49:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"58:6:201","type":""}],"src":"14:380:201"}]},"contents":"{\n    { }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b610a2e8061015d6000396000f3fe6080604052600436106100d65760003560e01c806340c10f191161007f578063a0712d6811610059578063a0712d6814610230578063a9059cbb14610250578063d0e30db014610270578063dd62ed3e1461027857600080fd5b806340c10f19146101ce57806370a08231146101ee57806395d89b411461021b57600080fd5b806323b872dd116100b057806323b872dd146101625780632e1a7d4d14610182578063313ce567146101a257600080fd5b806306fdde03146100ea578063095ea7b31461011557806318160ddd1461014557600080fd5b366100e5576100e36102b0565b005b600080fd5b3480156100f657600080fd5b506100ff61030b565b60405161010c91906107dd565b60405180910390f35b34801561012157600080fd5b50610135610130366004610879565b610399565b604051901515815260200161010c565b34801561015157600080fd5b50475b60405190815260200161010c565b34801561016e57600080fd5b5061013561017d3660046108a3565b610412565b34801561018e57600080fd5b506100e361019d3660046108df565b610629565b3480156101ae57600080fd5b506002546101bc9060ff1681565b60405160ff909116815260200161010c565b3480156101da57600080fd5b506101356101e9366004610879565b6106cf565b3480156101fa57600080fd5b506101546102093660046108f8565b60036020526000908152604090205481565b34801561022757600080fd5b506100ff610756565b34801561023c57600080fd5b5061013561024b3660046108df565b610763565b34801561025c57600080fd5b5061013561026b366004610879565b6107c9565b6100e36102b0565b34801561028457600080fd5b50610154610293366004610913565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102cf908490610975565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546103189061098d565b80601f01602080910402602001604051908101604052809291908181526020018280546103449061098d565b80156103915780601f1061036657610100808354040283529160200191610391565b820191906000526020600020905b81548152906001019060200180831161037457829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104019086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561044457600080fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104ba575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105425773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104fc57600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061053c9084906109e1565b90915550505b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812080548492906105779084906109e1565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105b1908490610975565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161061791815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561064557600080fd5b33600090815260036020526040812080548392906106649084906109e1565b9091555050604051339082156108fc029083906000818181858888f19350505050158015610696573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548391908390610706908490610975565b909155505060405182815273ffffffffffffffffffffffffffffffffffffffff8416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610401565b600180546103189061098d565b33600090815260036020526040812080548391908390610784908490610975565b909155505060405182815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3506001919050565b60006107d6338484610412565b9392505050565b600060208083528351808285015260005b8181101561080a578581018301518582016040015282016107ee565b8181111561081c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461087457600080fd5b919050565b6000806040838503121561088c57600080fd5b61089583610850565b946020939093013593505050565b6000806000606084860312156108b857600080fd5b6108c184610850565b92506108cf60208501610850565b9150604084013590509250925092565b6000602082840312156108f157600080fd5b5035919050565b60006020828403121561090a57600080fd5b6107d682610850565b6000806040838503121561092657600080fd5b61092f83610850565b915061093d60208401610850565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561098857610988610946565b500190565b600181811c908216806109a157607f821691505b602082108114156109db577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109f3576109f3610946565b50039056fea2646970667358221220d677164bcb1d6ee0cb9cb7cd26ed62050d273ffb35895bc913d7af399f112a3464736f6c634300080a0033","opcodes":"PUSH1 0xC0 PUSH1 0x40 MSTORE PUSH1 0xD PUSH1 0x80 DUP2 SWAP1 MSTORE PUSH13 0x2BB930B83832B21022BA3432B9 PUSH1 0x99 SHL PUSH1 0xA0 SWAP1 DUP2 MSTORE PUSH2 0x2E SWAP2 PUSH1 0x0 SWAP2 SWAP1 PUSH2 0x7A JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP1 DUP3 MSTORE PUSH4 0xAE8AA89 PUSH1 0xE3 SHL PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 DUP3 MSTORE PUSH2 0x5A SWAP2 PUSH1 0x1 SWAP2 PUSH2 0x7A JUMP JUMPDEST POP PUSH1 0x2 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14E JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x86 SWAP1 PUSH2 0x113 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0xA8 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0xEE JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0xC1 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0xEE JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0xEE JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0xEE JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0xD3 JUMP JUMPDEST POP PUSH2 0xFA SWAP3 SWAP2 POP PUSH2 0xFE JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0xFA JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xFF JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x127 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x148 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xA2E DUP1 PUSH2 0x15D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xD6 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x40C10F19 GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xA0712D68 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xA0712D68 EQ PUSH2 0x230 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x250 JUMPI DUP1 PUSH4 0xD0E30DB0 EQ PUSH2 0x270 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x1CE JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1EE JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0xB0 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x162 JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x182 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x115 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x145 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0xE5 JUMPI PUSH2 0xE3 PUSH2 0x2B0 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x30B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10C SWAP2 SWAP1 PUSH2 0x7DD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x121 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x130 CALLDATASIZE PUSH1 0x4 PUSH2 0x879 JUMP JUMPDEST PUSH2 0x399 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x151 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SELFBALANCE JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x17D CALLDATASIZE PUSH1 0x4 PUSH2 0x8A3 JUMP JUMPDEST PUSH2 0x412 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE3 PUSH2 0x19D CALLDATASIZE PUSH1 0x4 PUSH2 0x8DF JUMP JUMPDEST PUSH2 0x629 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x1BC SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x1E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x879 JUMP JUMPDEST PUSH2 0x6CF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x154 PUSH2 0x209 CALLDATASIZE PUSH1 0x4 PUSH2 0x8F8 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x227 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x756 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x23C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x24B CALLDATASIZE PUSH1 0x4 PUSH2 0x8DF JUMP JUMPDEST PUSH2 0x763 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x25C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x26B CALLDATASIZE PUSH1 0x4 PUSH2 0x879 JUMP JUMPDEST PUSH2 0x7C9 JUMP JUMPDEST PUSH2 0xE3 PUSH2 0x2B0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x284 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x154 PUSH2 0x293 CALLDATASIZE PUSH1 0x4 PUSH2 0x913 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD CALLVALUE SWAP3 SWAP1 PUSH2 0x2CF SWAP1 DUP5 SWAP1 PUSH2 0x975 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD CALLVALUE DUP2 MSTORE CALLER SWAP1 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x318 SWAP1 PUSH2 0x98D JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x344 SWAP1 PUSH2 0x98D JUMP JUMPDEST DUP1 ISZERO PUSH2 0x391 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x366 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x391 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 0x374 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE MLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x401 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x444 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND CALLER EQ DUP1 ISZERO SWAP1 PUSH2 0x4BA JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EQ ISZERO JUMPDEST ISZERO PUSH2 0x542 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x4FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x53C SWAP1 DUP5 SWAP1 PUSH2 0x9E1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x577 SWAP1 DUP5 SWAP1 PUSH2 0x9E1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x5B1 SWAP1 DUP5 SWAP1 PUSH2 0x975 JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD PUSH2 0x617 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x645 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x664 SWAP1 DUP5 SWAP1 PUSH2 0x9E1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD CALLER SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x696 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE CALLER SWAP1 PUSH32 0x7FCF532C15F0A6DB0BD6D0E038BEA71D30D808C7D98CB3BF7268A95BF5081B65 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP2 SWAP1 DUP4 SWAP1 PUSH2 0x706 SWAP1 DUP5 SWAP1 PUSH2 0x975 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH2 0x401 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH2 0x318 SWAP1 PUSH2 0x98D JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP2 SWAP1 DUP4 SWAP1 PUSH2 0x784 SWAP1 DUP5 SWAP1 PUSH2 0x975 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE CALLER SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7D6 CALLER DUP5 DUP5 PUSH2 0x412 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x80A JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x7EE JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x81C JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x874 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x88C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x895 DUP4 PUSH2 0x850 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x8B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8C1 DUP5 PUSH2 0x850 JUMP JUMPDEST SWAP3 POP PUSH2 0x8CF PUSH1 0x20 DUP6 ADD PUSH2 0x850 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x90A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7D6 DUP3 PUSH2 0x850 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x926 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x92F DUP4 PUSH2 0x850 JUMP JUMPDEST SWAP2 POP PUSH2 0x93D PUSH1 0x20 DUP5 ADD PUSH2 0x850 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x988 JUMPI PUSH2 0x988 PUSH2 0x946 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x9A1 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x9DB JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x9F3 JUMPI PUSH2 0x9F3 PUSH2 0x946 JUMP JUMPDEST POP SUB SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD6 PUSH24 0x164BCB1D6EE0CB9CB7CD26ED62050D273FFB35895BC913D7 0xAF CODECOPY SWAP16 GT 0x2A CALLVALUE PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"731:36:22:-:0;120:426:61;731:36:22;;120:426:61;731:36:22;;;-1:-1:-1;;;731:36:22;;;;;;-1:-1:-1;;731:36:22;;:::i;:::-;-1:-1:-1;771:29:22;;;;;;;;;;;;;-1:-1:-1;;;771:29:22;;;;;;;;;;;;:::i;:::-;-1:-1:-1;804:26:22;;;-1:-1:-1;;804:26:22;828:2;804:26;;;120:426:61;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;120:426:61;;;-1:-1:-1;120:426:61;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:380:201;93:1;89:12;;;;136;;;157:61;;211:4;203:6;199:17;189:27;;157:61;264:2;256:6;253:14;233:18;230:38;227:161;;;310:10;305:3;301:20;298:1;291:31;345:4;342:1;335:15;373:4;370:1;363:15;227:161;;14:380;;;:::o;:::-;120:426:61;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_3035":{"entryPoint":null,"id":3035,"parameterSlots":0,"returnSlots":0},"@allowance_3028":{"entryPoint":null,"id":3028,"parameterSlots":0,"returnSlots":0},"@approve_3131":{"entryPoint":921,"id":3131,"parameterSlots":2,"returnSlots":1},"@balanceOf_3022":{"entryPoint":null,"id":3022,"parameterSlots":0,"returnSlots":0},"@decimals_2990":{"entryPoint":null,"id":2990,"parameterSlots":0,"returnSlots":0},"@deposit_3054":{"entryPoint":688,"id":3054,"parameterSlots":0,"returnSlots":0},"@mint_8801":{"entryPoint":1891,"id":8801,"parameterSlots":1,"returnSlots":1},"@mint_8828":{"entryPoint":1743,"id":8828,"parameterSlots":2,"returnSlots":1},"@name_2984":{"entryPoint":779,"id":2984,"parameterSlots":0,"returnSlots":0},"@symbol_2987":{"entryPoint":1878,"id":2987,"parameterSlots":0,"returnSlots":0},"@totalSupply_3103":{"entryPoint":null,"id":3103,"parameterSlots":0,"returnSlots":1},"@transferFrom_3227":{"entryPoint":1042,"id":3227,"parameterSlots":3,"returnSlots":1},"@transfer_3148":{"entryPoint":1993,"id":3148,"parameterSlots":2,"returnSlots":1},"@withdraw_3091":{"entryPoint":1577,"id":3091,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":2128,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":2296,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":2323,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":2211,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":2169,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256":{"entryPoint":2271,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":2013,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":2421,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":2529,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":2445,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":2374,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3563:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"135:535:201","statements":[{"nodeType":"YulVariableDeclaration","src":"145:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"155:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"149:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"173:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"184:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"166:6:201"},"nodeType":"YulFunctionCall","src":"166:21:201"},"nodeType":"YulExpressionStatement","src":"166:21:201"},{"nodeType":"YulVariableDeclaration","src":"196:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"216:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:201"},"nodeType":"YulFunctionCall","src":"210:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"200:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"243:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"254:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"239:3:201"},"nodeType":"YulFunctionCall","src":"239:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"259:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"232:6:201"},"nodeType":"YulFunctionCall","src":"232:34:201"},"nodeType":"YulExpressionStatement","src":"232:34:201"},{"nodeType":"YulVariableDeclaration","src":"275:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"284:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"279:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"344:90:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"373:9:201"},{"name":"i","nodeType":"YulIdentifier","src":"384:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"369:3:201"},"nodeType":"YulFunctionCall","src":"369:17:201"},{"kind":"number","nodeType":"YulLiteral","src":"388:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"365:3:201"},"nodeType":"YulFunctionCall","src":"365:26:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"407:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"415:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"403:3:201"},"nodeType":"YulFunctionCall","src":"403:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"419:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"399:3:201"},"nodeType":"YulFunctionCall","src":"399:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"393:5:201"},"nodeType":"YulFunctionCall","src":"393:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"358:6:201"},"nodeType":"YulFunctionCall","src":"358:66:201"},"nodeType":"YulExpressionStatement","src":"358:66:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"305:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"308:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"302:2:201"},"nodeType":"YulFunctionCall","src":"302:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"316:19:201","statements":[{"nodeType":"YulAssignment","src":"318:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"327:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"330:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"323:3:201"},"nodeType":"YulFunctionCall","src":"323:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"318:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"298:3:201","statements":[]},"src":"294:140:201"},{"body":{"nodeType":"YulBlock","src":"468:66:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"497:9:201"},{"name":"length","nodeType":"YulIdentifier","src":"508:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"493:3:201"},"nodeType":"YulFunctionCall","src":"493:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"517:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"489:3:201"},"nodeType":"YulFunctionCall","src":"489:31:201"},{"kind":"number","nodeType":"YulLiteral","src":"522:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"482:6:201"},"nodeType":"YulFunctionCall","src":"482:42:201"},"nodeType":"YulExpressionStatement","src":"482:42:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"449:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"452:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"446:2:201"},"nodeType":"YulFunctionCall","src":"446:13:201"},"nodeType":"YulIf","src":"443:91:201"},{"nodeType":"YulAssignment","src":"543:121:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"559:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"578:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"586:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"574:3:201"},"nodeType":"YulFunctionCall","src":"574:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"591:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"570:3:201"},"nodeType":"YulFunctionCall","src":"570:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"555:3:201"},"nodeType":"YulFunctionCall","src":"555:104:201"},{"kind":"number","nodeType":"YulLiteral","src":"661:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"551:3:201"},"nodeType":"YulFunctionCall","src":"551:113:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"543:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"104:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"115:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"126:4:201","type":""}],"src":"14:656:201"},{"body":{"nodeType":"YulBlock","src":"724:147:201","statements":[{"nodeType":"YulAssignment","src":"734:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"756:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"743:12:201"},"nodeType":"YulFunctionCall","src":"743:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"734:5:201"}]},{"body":{"nodeType":"YulBlock","src":"849:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"858:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"861:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"851:6:201"},"nodeType":"YulFunctionCall","src":"851:12:201"},"nodeType":"YulExpressionStatement","src":"851:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"785:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"796:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"803:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"792:3:201"},"nodeType":"YulFunctionCall","src":"792:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"782:2:201"},"nodeType":"YulFunctionCall","src":"782:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"775:6:201"},"nodeType":"YulFunctionCall","src":"775:73:201"},"nodeType":"YulIf","src":"772:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"703:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"714:5:201","type":""}],"src":"675:196:201"},{"body":{"nodeType":"YulBlock","src":"963:167:201","statements":[{"body":{"nodeType":"YulBlock","src":"1009:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1018:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1021:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1011:6:201"},"nodeType":"YulFunctionCall","src":"1011:12:201"},"nodeType":"YulExpressionStatement","src":"1011:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"984:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"993:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"980:3:201"},"nodeType":"YulFunctionCall","src":"980:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1005:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"976:3:201"},"nodeType":"YulFunctionCall","src":"976:32:201"},"nodeType":"YulIf","src":"973:52:201"},{"nodeType":"YulAssignment","src":"1034:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1063:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1044:18:201"},"nodeType":"YulFunctionCall","src":"1044:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1034:6:201"}]},{"nodeType":"YulAssignment","src":"1082:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1109:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1120:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1105:3:201"},"nodeType":"YulFunctionCall","src":"1105:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1092:12:201"},"nodeType":"YulFunctionCall","src":"1092:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1082:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"921:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"932:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"944:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"952:6:201","type":""}],"src":"876:254:201"},{"body":{"nodeType":"YulBlock","src":"1230:92:201","statements":[{"nodeType":"YulAssignment","src":"1240:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1252:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1263:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1248:3:201"},"nodeType":"YulFunctionCall","src":"1248:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1240:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1282:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1307:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1300:6:201"},"nodeType":"YulFunctionCall","src":"1300:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1293:6:201"},"nodeType":"YulFunctionCall","src":"1293:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1275:6:201"},"nodeType":"YulFunctionCall","src":"1275:41:201"},"nodeType":"YulExpressionStatement","src":"1275:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1199:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1210:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1221:4:201","type":""}],"src":"1135:187:201"},{"body":{"nodeType":"YulBlock","src":"1428:76:201","statements":[{"nodeType":"YulAssignment","src":"1438:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1450:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1461:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1446:3:201"},"nodeType":"YulFunctionCall","src":"1446:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1438:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1480:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"1491:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1473:6:201"},"nodeType":"YulFunctionCall","src":"1473:25:201"},"nodeType":"YulExpressionStatement","src":"1473:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1397:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1408:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1419:4:201","type":""}],"src":"1327:177:201"},{"body":{"nodeType":"YulBlock","src":"1613:224:201","statements":[{"body":{"nodeType":"YulBlock","src":"1659:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1668:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1671:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1661:6:201"},"nodeType":"YulFunctionCall","src":"1661:12:201"},"nodeType":"YulExpressionStatement","src":"1661:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1634:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1643:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1630:3:201"},"nodeType":"YulFunctionCall","src":"1630:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1655:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1626:3:201"},"nodeType":"YulFunctionCall","src":"1626:32:201"},"nodeType":"YulIf","src":"1623:52:201"},{"nodeType":"YulAssignment","src":"1684:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1713:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1694:18:201"},"nodeType":"YulFunctionCall","src":"1694:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1684:6:201"}]},{"nodeType":"YulAssignment","src":"1732:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1765:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1776:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1761:3:201"},"nodeType":"YulFunctionCall","src":"1761:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1742:18:201"},"nodeType":"YulFunctionCall","src":"1742:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1732:6:201"}]},{"nodeType":"YulAssignment","src":"1789:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1816:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1827:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1812:3:201"},"nodeType":"YulFunctionCall","src":"1812:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1799:12:201"},"nodeType":"YulFunctionCall","src":"1799:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1789:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1563:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1574:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1586:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1594:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1602:6:201","type":""}],"src":"1509:328:201"},{"body":{"nodeType":"YulBlock","src":"1912:110:201","statements":[{"body":{"nodeType":"YulBlock","src":"1958:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1967:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1970:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1960:6:201"},"nodeType":"YulFunctionCall","src":"1960:12:201"},"nodeType":"YulExpressionStatement","src":"1960:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1933:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1942:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1929:3:201"},"nodeType":"YulFunctionCall","src":"1929:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1954:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1925:3:201"},"nodeType":"YulFunctionCall","src":"1925:32:201"},"nodeType":"YulIf","src":"1922:52:201"},{"nodeType":"YulAssignment","src":"1983:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2006:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1993:12:201"},"nodeType":"YulFunctionCall","src":"1993:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1983:6:201"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1878:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1889:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1901:6:201","type":""}],"src":"1842:180:201"},{"body":{"nodeType":"YulBlock","src":"2124:87:201","statements":[{"nodeType":"YulAssignment","src":"2134:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2146:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2157:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2142:3:201"},"nodeType":"YulFunctionCall","src":"2142:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2134:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2176:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2191:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2199:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2187:3:201"},"nodeType":"YulFunctionCall","src":"2187:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2169:6:201"},"nodeType":"YulFunctionCall","src":"2169:36:201"},"nodeType":"YulExpressionStatement","src":"2169:36:201"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2093:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2104:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2115:4:201","type":""}],"src":"2027:184:201"},{"body":{"nodeType":"YulBlock","src":"2286:116:201","statements":[{"body":{"nodeType":"YulBlock","src":"2332:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2341:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2344:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2334:6:201"},"nodeType":"YulFunctionCall","src":"2334:12:201"},"nodeType":"YulExpressionStatement","src":"2334:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2307:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2316:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2303:3:201"},"nodeType":"YulFunctionCall","src":"2303:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2328:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2299:3:201"},"nodeType":"YulFunctionCall","src":"2299:32:201"},"nodeType":"YulIf","src":"2296:52:201"},{"nodeType":"YulAssignment","src":"2357:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2386:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2367:18:201"},"nodeType":"YulFunctionCall","src":"2367:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2357:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2252:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2263:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2275:6:201","type":""}],"src":"2216:186:201"},{"body":{"nodeType":"YulBlock","src":"2494:173:201","statements":[{"body":{"nodeType":"YulBlock","src":"2540:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2549:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2552:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2542:6:201"},"nodeType":"YulFunctionCall","src":"2542:12:201"},"nodeType":"YulExpressionStatement","src":"2542:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2515:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2524:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2511:3:201"},"nodeType":"YulFunctionCall","src":"2511:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2536:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2507:3:201"},"nodeType":"YulFunctionCall","src":"2507:32:201"},"nodeType":"YulIf","src":"2504:52:201"},{"nodeType":"YulAssignment","src":"2565:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2594:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2575:18:201"},"nodeType":"YulFunctionCall","src":"2575:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2565:6:201"}]},{"nodeType":"YulAssignment","src":"2613:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2646:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2657:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2642:3:201"},"nodeType":"YulFunctionCall","src":"2642:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2623:18:201"},"nodeType":"YulFunctionCall","src":"2623:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2613:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2452:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2463:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2475:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2483:6:201","type":""}],"src":"2407:260:201"},{"body":{"nodeType":"YulBlock","src":"2704:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2721:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2724:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2714:6:201"},"nodeType":"YulFunctionCall","src":"2714:88:201"},"nodeType":"YulExpressionStatement","src":"2714:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2818:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2821:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2811:6:201"},"nodeType":"YulFunctionCall","src":"2811:15:201"},"nodeType":"YulExpressionStatement","src":"2811:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2842:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2845:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2835:6:201"},"nodeType":"YulFunctionCall","src":"2835:15:201"},"nodeType":"YulExpressionStatement","src":"2835:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"2672:184:201"},{"body":{"nodeType":"YulBlock","src":"2909:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"2936:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"2938:16:201"},"nodeType":"YulFunctionCall","src":"2938:18:201"},"nodeType":"YulExpressionStatement","src":"2938:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2925:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"2932:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2928:3:201"},"nodeType":"YulFunctionCall","src":"2928:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2922:2:201"},"nodeType":"YulFunctionCall","src":"2922:13:201"},"nodeType":"YulIf","src":"2919:39:201"},{"nodeType":"YulAssignment","src":"2967:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2978:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"2981:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2974:3:201"},"nodeType":"YulFunctionCall","src":"2974:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"2967:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"2892:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"2895:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"2901:3:201","type":""}],"src":"2861:128:201"},{"body":{"nodeType":"YulBlock","src":"3049:382:201","statements":[{"nodeType":"YulAssignment","src":"3059:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3073:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"3076:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"3069:3:201"},"nodeType":"YulFunctionCall","src":"3069:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3059:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3090:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"3120:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"3126:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3116:3:201"},"nodeType":"YulFunctionCall","src":"3116:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"3094:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3167:31:201","statements":[{"nodeType":"YulAssignment","src":"3169:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3183:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3191:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3179:3:201"},"nodeType":"YulFunctionCall","src":"3179:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3169:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3147:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3140:6:201"},"nodeType":"YulFunctionCall","src":"3140:26:201"},"nodeType":"YulIf","src":"3137:61:201"},{"body":{"nodeType":"YulBlock","src":"3257:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3278:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3281:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3271:6:201"},"nodeType":"YulFunctionCall","src":"3271:88:201"},"nodeType":"YulExpressionStatement","src":"3271:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3379:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3382:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3372:6:201"},"nodeType":"YulFunctionCall","src":"3372:15:201"},"nodeType":"YulExpressionStatement","src":"3372:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3407:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3410:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3400:6:201"},"nodeType":"YulFunctionCall","src":"3400:15:201"},"nodeType":"YulExpressionStatement","src":"3400:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3213:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3236:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3244:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3233:2:201"},"nodeType":"YulFunctionCall","src":"3233:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3210:2:201"},"nodeType":"YulFunctionCall","src":"3210:38:201"},"nodeType":"YulIf","src":"3207:218:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"3029:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"3038:6:201","type":""}],"src":"2994:437:201"},{"body":{"nodeType":"YulBlock","src":"3485:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"3507:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3509:16:201"},"nodeType":"YulFunctionCall","src":"3509:18:201"},"nodeType":"YulExpressionStatement","src":"3509:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3501:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"3504:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3498:2:201"},"nodeType":"YulFunctionCall","src":"3498:8:201"},"nodeType":"YulIf","src":"3495:34:201"},{"nodeType":"YulAssignment","src":"3538:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3550:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"3553:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3546:3:201"},"nodeType":"YulFunctionCall","src":"3546:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"3538:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3467:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"3470:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"3476:4:201","type":""}],"src":"3436:125:201"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"6080604052600436106100d65760003560e01c806340c10f191161007f578063a0712d6811610059578063a0712d6814610230578063a9059cbb14610250578063d0e30db014610270578063dd62ed3e1461027857600080fd5b806340c10f19146101ce57806370a08231146101ee57806395d89b411461021b57600080fd5b806323b872dd116100b057806323b872dd146101625780632e1a7d4d14610182578063313ce567146101a257600080fd5b806306fdde03146100ea578063095ea7b31461011557806318160ddd1461014557600080fd5b366100e5576100e36102b0565b005b600080fd5b3480156100f657600080fd5b506100ff61030b565b60405161010c91906107dd565b60405180910390f35b34801561012157600080fd5b50610135610130366004610879565b610399565b604051901515815260200161010c565b34801561015157600080fd5b50475b60405190815260200161010c565b34801561016e57600080fd5b5061013561017d3660046108a3565b610412565b34801561018e57600080fd5b506100e361019d3660046108df565b610629565b3480156101ae57600080fd5b506002546101bc9060ff1681565b60405160ff909116815260200161010c565b3480156101da57600080fd5b506101356101e9366004610879565b6106cf565b3480156101fa57600080fd5b506101546102093660046108f8565b60036020526000908152604090205481565b34801561022757600080fd5b506100ff610756565b34801561023c57600080fd5b5061013561024b3660046108df565b610763565b34801561025c57600080fd5b5061013561026b366004610879565b6107c9565b6100e36102b0565b34801561028457600080fd5b50610154610293366004610913565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102cf908490610975565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546103189061098d565b80601f01602080910402602001604051908101604052809291908181526020018280546103449061098d565b80156103915780601f1061036657610100808354040283529160200191610391565b820191906000526020600020905b81548152906001019060200180831161037457829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104019086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561044457600080fd5b73ffffffffffffffffffffffffffffffffffffffff841633148015906104ba575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105425773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104fc57600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091528120805484929061053c9084906109e1565b90915550505b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812080548492906105779084906109e1565b909155505073ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080548492906105b1908490610975565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161061791815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561064557600080fd5b33600090815260036020526040812080548392906106649084906109e1565b9091555050604051339082156108fc029083906000818181858888f19350505050158015610696573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548391908390610706908490610975565b909155505060405182815273ffffffffffffffffffffffffffffffffffffffff8416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610401565b600180546103189061098d565b33600090815260036020526040812080548391908390610784908490610975565b909155505060405182815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3506001919050565b60006107d6338484610412565b9392505050565b600060208083528351808285015260005b8181101561080a578581018301518582016040015282016107ee565b8181111561081c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461087457600080fd5b919050565b6000806040838503121561088c57600080fd5b61089583610850565b946020939093013593505050565b6000806000606084860312156108b857600080fd5b6108c184610850565b92506108cf60208501610850565b9150604084013590509250925092565b6000602082840312156108f157600080fd5b5035919050565b60006020828403121561090a57600080fd5b6107d682610850565b6000806040838503121561092657600080fd5b61092f83610850565b915061093d60208401610850565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561098857610988610946565b500190565b600181811c908216806109a157607f821691505b602082108114156109db577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109f3576109f3610946565b50039056fea2646970667358221220d677164bcb1d6ee0cb9cb7cd26ed62050d273ffb35895bc913d7af399f112a3464736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xD6 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x40C10F19 GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xA0712D68 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xA0712D68 EQ PUSH2 0x230 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x250 JUMPI DUP1 PUSH4 0xD0E30DB0 EQ PUSH2 0x270 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x1CE JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1EE JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0xB0 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x162 JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x182 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x115 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x145 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0xE5 JUMPI PUSH2 0xE3 PUSH2 0x2B0 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x30B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10C SWAP2 SWAP1 PUSH2 0x7DD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x121 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x130 CALLDATASIZE PUSH1 0x4 PUSH2 0x879 JUMP JUMPDEST PUSH2 0x399 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x151 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SELFBALANCE JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x17D CALLDATASIZE PUSH1 0x4 PUSH2 0x8A3 JUMP JUMPDEST PUSH2 0x412 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE3 PUSH2 0x19D CALLDATASIZE PUSH1 0x4 PUSH2 0x8DF JUMP JUMPDEST PUSH2 0x629 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x1BC SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x1E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x879 JUMP JUMPDEST PUSH2 0x6CF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x154 PUSH2 0x209 CALLDATASIZE PUSH1 0x4 PUSH2 0x8F8 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x227 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xFF PUSH2 0x756 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x23C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x24B CALLDATASIZE PUSH1 0x4 PUSH2 0x8DF JUMP JUMPDEST PUSH2 0x763 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x25C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x26B CALLDATASIZE PUSH1 0x4 PUSH2 0x879 JUMP JUMPDEST PUSH2 0x7C9 JUMP JUMPDEST PUSH2 0xE3 PUSH2 0x2B0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x284 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x154 PUSH2 0x293 CALLDATASIZE PUSH1 0x4 PUSH2 0x913 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD CALLVALUE SWAP3 SWAP1 PUSH2 0x2CF SWAP1 DUP5 SWAP1 PUSH2 0x975 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD CALLVALUE DUP2 MSTORE CALLER SWAP1 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x318 SWAP1 PUSH2 0x98D JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x344 SWAP1 PUSH2 0x98D JUMP JUMPDEST DUP1 ISZERO PUSH2 0x391 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x366 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x391 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 0x374 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE MLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x401 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x444 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND CALLER EQ DUP1 ISZERO SWAP1 PUSH2 0x4BA JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EQ ISZERO JUMPDEST ISZERO PUSH2 0x542 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x4FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x53C SWAP1 DUP5 SWAP1 PUSH2 0x9E1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x577 SWAP1 DUP5 SWAP1 PUSH2 0x9E1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x5B1 SWAP1 DUP5 SWAP1 PUSH2 0x975 JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD PUSH2 0x617 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x645 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x664 SWAP1 DUP5 SWAP1 PUSH2 0x9E1 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD CALLER SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x696 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE CALLER SWAP1 PUSH32 0x7FCF532C15F0A6DB0BD6D0E038BEA71D30D808C7D98CB3BF7268A95BF5081B65 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP2 SWAP1 DUP4 SWAP1 PUSH2 0x706 SWAP1 DUP5 SWAP1 PUSH2 0x975 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH2 0x401 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH2 0x318 SWAP1 PUSH2 0x98D JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP2 SWAP1 DUP4 SWAP1 PUSH2 0x784 SWAP1 DUP5 SWAP1 PUSH2 0x975 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE CALLER SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7D6 CALLER DUP5 DUP5 PUSH2 0x412 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x80A JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x7EE JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x81C JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x874 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x88C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x895 DUP4 PUSH2 0x850 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x8B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8C1 DUP5 PUSH2 0x850 JUMP JUMPDEST SWAP3 POP PUSH2 0x8CF PUSH1 0x20 DUP6 ADD PUSH2 0x850 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x90A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7D6 DUP3 PUSH2 0x850 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x926 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x92F DUP4 PUSH2 0x850 JUMP JUMPDEST SWAP2 POP PUSH2 0x93D PUSH1 0x20 DUP5 ADD PUSH2 0x850 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x988 JUMPI PUSH2 0x988 PUSH2 0x946 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x9A1 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x9DB JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x9F3 JUMPI PUSH2 0x9F3 PUSH2 0x946 JUMP JUMPDEST POP SUB SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD6 PUSH24 0x164BCB1D6EE0CB9CB7CD26ED62050D273FFB35895BC913D7 0xAF CODECOPY SWAP16 GT 0x2A CALLVALUE PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"120:426:61:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1237:9:22;:7;:9::i;:::-;120:426:61;;;;;731:36:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1676:166;;;;;;;;;;-1:-1:-1;1676:166:22;;;;;:::i;:::-;;:::i;:::-;;;1300:14:201;;1293:22;1275:41;;1263:2;1248:18;1676:166:22;1135:187:201;1580:92:22;;;;;;;;;;-1:-1:-1;1646:21:22;1580:92;;;1473:25:201;;;1461:2;1446:18;1580:92:22;1327:177:201;1968:410:22;;;;;;;;;;-1:-1:-1;1968:410:22;;;;;:::i;:::-;;:::i;1379:197::-;;;;;;;;;;-1:-1:-1;1379:197:22;;;;;:::i;:::-;;:::i;804:26::-;;;;;;;;;;-1:-1:-1;804:26:22;;;;;;;;;;;2199:4:201;2187:17;;;2169:36;;2157:2;2142:18;804:26:22;2027:184:201;374:170:61;;;;;;;;;;-1:-1:-1;374:170:61;;;;;:::i;:::-;;:::i;1087:44:22:-;;;;;;;;;;-1:-1:-1;1087:44:22;;;;;:::i;:::-;;;;;;;;;;;;;;771:29;;;;;;;;;;;;;:::i;211:159:61:-;;;;;;;;;;-1:-1:-1;211:159:61;;;;;:::i;:::-;;:::i;1846:118:22:-;;;;;;;;;;-1:-1:-1;1846:118:22;;;;;:::i;:::-;;:::i;1255:120::-;;;:::i;1135:64::-;;;;;;;;;;-1:-1:-1;1135:64:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1255:120;1305:10;1295:21;;;;:9;:21;;;;;:34;;1320:9;;1295:21;:34;;1320:9;;1295:34;:::i;:::-;;;;-1:-1:-1;;1340:30:22;;1360:9;1473:25:201;;1348:10:22;;1340:30;;1461:2:201;1446:18;1340:30:22;;;;;;;1255:120::o;731:36::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1676:166::-;1757:10;1735:4;1747:21;;;:9;:21;;;;;;;;;:26;;;;;;;;;;:32;;;1790:30;1735:4;;1747:26;;1790:30;;;;1776:3;1473:25:201;;1461:2;1446:18;;1327:177;1790:30:22;;;;;;;;-1:-1:-1;1833:4:22;1676:166;;;;:::o;1968:410::-;2065:14;;;2045:4;2065:14;;;:9;:14;;;;;;:21;-1:-1:-1;2065:21:22;2057:30;;;;;;2098:17;;;2105:10;2098:17;;;;:68;;-1:-1:-1;2119:14:22;;;;;;;:9;:14;;;;;;;;2134:10;2119:26;;;;;;;;2149:17;2119:47;;2098:68;2094:172;;;2184:14;;;;;;;:9;:14;;;;;;;;2199:10;2184:26;;;;;;;;:33;-1:-1:-1;2184:33:22;2176:42;;;;;;2226:14;;;;;;;:9;:14;;;;;;;;2241:10;2226:26;;;;;;;:33;;2256:3;;2226:14;:33;;2256:3;;2226:33;:::i;:::-;;;;-1:-1:-1;;2094:172:22;2272:14;;;;;;;:9;:14;;;;;:21;;2290:3;;2272:14;:21;;2290:3;;2272:21;:::i;:::-;;;;-1:-1:-1;;2299:14:22;;;;;;;:9;:14;;;;;:21;;2317:3;;2299:14;:21;;2317:3;;2299:21;:::i;:::-;;;;;;;;2346:3;2332:23;;2341:3;2332:23;;;2351:3;2332:23;;;;1473:25:201;;1461:2;1446:18;;1327:177;2332:23:22;;;;;;;;-1:-1:-1;2369:4:22;1968:410;;;;;:::o;1379:197::-;1441:10;1431:21;;;;:9;:21;;;;;;:28;-1:-1:-1;1431:28:22;1423:37;;;;;;1476:10;1466:21;;;;:9;:21;;;;;:28;;1491:3;;1466:21;:28;;1491:3;;1466:28;:::i;:::-;;;;-1:-1:-1;;1500:33:22;;1508:10;;1500:33;;;;;1529:3;;1500:33;;;;1529:3;1508:10;1500:33;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1544:27:22;;1473:25:201;;;1555:10:22;;1544:27;;1461:2:201;1446:18;1544:27:22;;;;;;;1379:197;:::o;374:170:61:-;448:18;;;436:4;448:18;;;:9;:18;;;;;:27;;470:5;;448:18;436:4;;448:27;;470:5;;448:27;:::i;:::-;;;;-1:-1:-1;;486:36:61;;1473:25:201;;;486:36:61;;;;503:1;;486:36;;1461:2:201;1446:18;486:36:61;1327:177:201;771:29:22;;;;;;;:::i;211:159:61:-;278:10;256:4;268:21;;;:9;:21;;;;;:30;;293:5;;268:21;256:4;;268:30;;293:5;;268:30;:::i;:::-;;;;-1:-1:-1;;309:39:61;;1473:25:201;;;330:10:61;;326:1;;309:39;;1461:2:201;1446:18;309:39:61;;;;;;;-1:-1:-1;361:4:61;;211:159;-1:-1:-1;211:159:61:o;1846:118:22:-;1906:4;1925:34;1938:10;1950:3;1955;1925:12;:34::i;:::-;1918:41;1846:118;-1:-1:-1;;;1846:118:22:o;14:656:201:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;586:2:201;574:15;591:66;570:88;555:104;;;;661:2;551:113;;14:656;-1:-1:-1;;;14:656:201:o;675:196::-;743:20;;803:42;792:54;;782:65;;772:93;;861:1;858;851:12;772:93;675:196;;;:::o;876:254::-;944:6;952;1005:2;993:9;984:7;980:23;976:32;973:52;;;1021:1;1018;1011:12;973:52;1044:29;1063:9;1044:29;:::i;:::-;1034:39;1120:2;1105:18;;;;1092:32;;-1:-1:-1;;;876:254:201:o;1509:328::-;1586:6;1594;1602;1655:2;1643:9;1634:7;1630:23;1626:32;1623:52;;;1671:1;1668;1661:12;1623:52;1694:29;1713:9;1694:29;:::i;:::-;1684:39;;1742:38;1776:2;1765:9;1761:18;1742:38;:::i;:::-;1732:48;;1827:2;1816:9;1812:18;1799:32;1789:42;;1509:328;;;;;:::o;1842:180::-;1901:6;1954:2;1942:9;1933:7;1929:23;1925:32;1922:52;;;1970:1;1967;1960:12;1922:52;-1:-1:-1;1993:23:201;;1842:180;-1:-1:-1;1842:180:201:o;2216:186::-;2275:6;2328:2;2316:9;2307:7;2303:23;2299:32;2296:52;;;2344:1;2341;2334:12;2296:52;2367:29;2386:9;2367:29;:::i;2407:260::-;2475:6;2483;2536:2;2524:9;2515:7;2511:23;2507:32;2504:52;;;2552:1;2549;2542:12;2504:52;2575:29;2594:9;2575:29;:::i;:::-;2565:39;;2623:38;2657:2;2646:9;2642:18;2623:38;:::i;:::-;2613:48;;2407:260;;;;;:::o;2672:184::-;2724:77;2721:1;2714:88;2821:4;2818:1;2811:15;2845:4;2842:1;2835:15;2861:128;2901:3;2932:1;2928:6;2925:1;2922:13;2919:39;;;2938:18;;:::i;:::-;-1:-1:-1;2974:9:201;;2861:128::o;2994:437::-;3073:1;3069:12;;;;3116;;;3137:61;;3191:4;3183:6;3179:17;3169:27;;3137:61;3244:2;3236:6;3233:14;3213:18;3210:38;3207:218;;;3281:77;3278:1;3271:88;3382:4;3379:1;3372:15;3410:4;3407:1;3400:15;3207:218;;2994:437;;;:::o;3436:125::-;3476:4;3504:1;3501;3498:8;3495:34;;;3509:18;;:::i;:::-;-1:-1:-1;3546:9:201;;3436:125::o"},"gasEstimates":{"creation":{"codeDepositCost":"521200","executionCost":"infinite","totalCost":"infinite"},"external":{"allowance(address,address)":"infinite","approve(address,uint256)":"24521","balanceOf(address)":"2552","decimals()":"2380","deposit()":"25987","mint(address,uint256)":"26622","mint(uint256)":"26503","name()":"infinite","symbol()":"infinite","totalSupply()":"251","transfer(address,uint256)":"53319","transferFrom(address,address,uint256)":"infinite","withdraw(uint256)":"infinite"}},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","deposit()":"d0e30db0","mint(address,uint256)":"40c10f19","mint(uint256)":"a0712d68","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","withdraw(uint256)":"2e1a7d4d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"mint\",\"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\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/mocks/tokens/WETH9Mocked.sol\":\"WETH9Mocked\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/weth/WETH9.sol\":{\"content\":\"// Copyright (C) 2015, 2016, 2017 Dapphub\\n\\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 <http://www.gnu.org/licenses/>.\\n\\npragma solidity ^0.8.10;\\n\\ncontract WETH9 {\\n  string public name = 'Wrapped Ether';\\n  string public symbol = 'WETH';\\n  uint8 public decimals = 18;\\n\\n  event Approval(address indexed src, address indexed guy, uint256 wad);\\n  event Transfer(address indexed src, address indexed dst, uint256 wad);\\n  event Deposit(address indexed dst, uint256 wad);\\n  event Withdrawal(address indexed src, uint256 wad);\\n\\n  mapping(address => uint256) public balanceOf;\\n  mapping(address => mapping(address => uint256)) public allowance;\\n\\n  receive() external payable {\\n    deposit();\\n  }\\n\\n  function deposit() public payable {\\n    balanceOf[msg.sender] += msg.value;\\n    emit Deposit(msg.sender, msg.value);\\n  }\\n\\n  function withdraw(uint256 wad) public {\\n    require(balanceOf[msg.sender] >= wad);\\n    balanceOf[msg.sender] -= wad;\\n    payable(msg.sender).transfer(wad);\\n    emit Withdrawal(msg.sender, wad);\\n  }\\n\\n  function totalSupply() public view returns (uint256) {\\n    return address(this).balance;\\n  }\\n\\n  function approve(address guy, uint256 wad) public returns (bool) {\\n    allowance[msg.sender][guy] = wad;\\n    emit Approval(msg.sender, guy, wad);\\n    return true;\\n  }\\n\\n  function transfer(address dst, uint256 wad) public returns (bool) {\\n    return transferFrom(msg.sender, dst, wad);\\n  }\\n\\n  function transferFrom(address src, address dst, uint256 wad) public returns (bool) {\\n    require(balanceOf[src] >= wad);\\n\\n    if (src != msg.sender && allowance[src][msg.sender] != type(uint256).max) {\\n      require(allowance[src][msg.sender] >= wad);\\n      allowance[src][msg.sender] -= wad;\\n    }\\n\\n    balanceOf[src] -= wad;\\n    balanceOf[dst] += wad;\\n\\n    emit Transfer(src, dst, wad);\\n\\n    return true;\\n  }\\n}\\n\\n/*\\n                    GNU GENERAL PUBLIC LICENSE\\n                       Version 3, 29 June 2007\\n\\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\\n Everyone is permitted to copy and distribute verbatim copies\\n of this license document, but changing it is not allowed.\\n\\n                            Preamble\\n\\n  The GNU General Public License is a free, copyleft license for\\nsoftware and other kinds of works.\\n\\n  The licenses for most software and other practical works are designed\\nto take away your freedom to share and change the works.  By contrast,\\nthe GNU General Public License is intended to guarantee your freedom to\\nshare and change all versions of a program--to make sure it remains free\\nsoftware for all its users.  We, the Free Software Foundation, use the\\nGNU General Public License for most of our software; it applies also to\\nany other work released this way by its authors.  You can apply it to\\nyour programs, too.\\n\\n  When we speak of free software, we are referring to freedom, not\\nprice.  Our General Public Licenses are designed to make sure that you\\nhave the freedom to distribute copies of free software (and charge for\\nthem if you wish), that you receive source code or can get it if you\\nwant it, that you can change the software or use pieces of it in new\\nfree programs, and that you know you can do these things.\\n\\n  To protect your rights, we need to prevent others from denying you\\nthese rights or asking you to surrender the rights.  Therefore, you have\\ncertain responsibilities if you distribute copies of the software, or if\\nyou modify it: responsibilities to respect the freedom of others.\\n\\n  For example, if you distribute copies of such a program, whether\\ngratis or for a fee, you must pass on to the recipients the same\\nfreedoms that you received.  You must make sure that they, too, receive\\nor can get the source code.  And you must show them these terms so they\\nknow their rights.\\n\\n  Developers that use the GNU GPL protect your rights with two steps:\\n(1) assert copyright on the software, and (2) offer you this License\\ngiving you legal permission to copy, distribute and/or modify it.\\n\\n  For the developers' and authors' protection, the GPL clearly explains\\nthat there is no warranty for this free software.  For both users' and\\nauthors' sake, the GPL requires that modified versions be marked as\\nchanged, so that their problems will not be attributed erroneously to\\nauthors of previous versions.\\n\\n  Some devices are designed to deny users access to install or run\\nmodified versions of the software inside them, although the manufacturer\\ncan do so.  This is fundamentally incompatible with the aim of\\nprotecting users' freedom to change the software.  The systematic\\npattern of such abuse occurs in the area of products for individuals to\\nuse, which is precisely where it is most unacceptable.  Therefore, we\\nhave designed this version of the GPL to prohibit the practice for those\\nproducts.  If such problems arise substantially in other domains, we\\nstand ready to extend this provision to those domains in future versions\\nof the GPL, as needed to protect the freedom of users.\\n\\n  Finally, every program is threatened constantly by software patents.\\nStates should not allow patents to restrict development and use of\\nsoftware on general-purpose computers, but in those that do, we wish to\\navoid the special danger that patents applied to a free program could\\nmake it effectively proprietary.  To prevent this, the GPL assures that\\npatents cannot be used to render the program non-free.\\n\\n  The precise terms and conditions for copying, distribution and\\nmodification follow.\\n\\n                       TERMS AND CONDITIONS\\n\\n  0. Definitions.\\n\\n  \\\"This License\\\" refers to version 3 of the GNU General Public License.\\n\\n  \\\"Copyright\\\" also means copyright-like laws that apply to other kinds of\\nworks, such as semiconductor masks.\\n\\n  \\\"The Program\\\" refers to any copyrightable work licensed under this\\nLicense.  Each licensee is addressed as \\\"you\\\".  \\\"Licensees\\\" and\\n\\\"recipients\\\" may be individuals or organizations.\\n\\n  To \\\"modify\\\" a work means to copy from or adapt all or part of the work\\nin a fashion requiring copyright permission, other than the making of an\\nexact copy.  The resulting work is called a \\\"modified version\\\" of the\\nearlier work or a work \\\"based on\\\" the earlier work.\\n\\n  A \\\"covered work\\\" means either the unmodified Program or a work based\\non the Program.\\n\\n  To \\\"propagate\\\" a work means to do anything with it that, without\\npermission, would make you directly or secondarily liable for\\ninfringement under applicable copyright law, except executing it on a\\ncomputer or modifying a private copy.  Propagation includes copying,\\ndistribution (with or without modification), making available to the\\npublic, and in some countries other activities as well.\\n\\n  To \\\"convey\\\" a work means any kind of propagation that enables other\\nparties to make or receive copies.  Mere interaction with a user through\\na computer network, with no transfer of a copy, is not conveying.\\n\\n  An interactive user interface displays \\\"Appropriate Legal Notices\\\"\\nto the extent that it includes a convenient and prominently visible\\nfeature that (1) displays an appropriate copyright notice, and (2)\\ntells the user that there is no warranty for the work (except to the\\nextent that warranties are provided), that licensees may convey the\\nwork under this License, and how to view a copy of this License.  If\\nthe interface presents a list of user commands or options, such as a\\nmenu, a prominent item in the list meets this criterion.\\n\\n  1. Source Code.\\n\\n  The \\\"source code\\\" for a work means the preferred form of the work\\nfor making modifications to it.  \\\"Object code\\\" means any non-source\\nform of a work.\\n\\n  A \\\"Standard Interface\\\" means an interface that either is an official\\nstandard defined by a recognized standards body, or, in the case of\\ninterfaces specified for a particular programming language, one that\\nis widely used among developers working in that language.\\n\\n  The \\\"System Libraries\\\" of an executable work include anything, other\\nthan the work as a whole, that (a) is included in the normal form of\\npackaging a Major Component, but which is not part of that Major\\nComponent, and (b) serves only to enable use of the work with that\\nMajor Component, or to implement a Standard Interface for which an\\nimplementation is available to the public in source code form.  A\\n\\\"Major Component\\\", in this context, means a major essential component\\n(kernel, window system, and so on) of the specific operating system\\n(if any) on which the executable work runs, or a compiler used to\\nproduce the work, or an object code interpreter used to run it.\\n\\n  The \\\"Corresponding Source\\\" for a work in object code form means all\\nthe source code needed to generate, install, and (for an executable\\nwork) run the object code and to modify the work, including scripts to\\ncontrol those activities.  However, it does not include the work's\\nSystem Libraries, or general-purpose tools or generally available free\\nprograms which are used unmodified in performing those activities but\\nwhich are not part of the work.  For example, Corresponding Source\\nincludes interface definition files associated with source files for\\nthe work, and the source code for shared libraries and dynamically\\nlinked subprograms that the work is specifically designed to require,\\nsuch as by intimate data communication or control flow between those\\nsubprograms and other parts of the work.\\n\\n  The Corresponding Source need not include anything that users\\ncan regenerate automatically from other parts of the Corresponding\\nSource.\\n\\n  The Corresponding Source for a work in source code form is that\\nsame work.\\n\\n  2. Basic Permissions.\\n\\n  All rights granted under this License are granted for the term of\\ncopyright on the Program, and are irrevocable provided the stated\\nconditions are met.  This License explicitly affirms your unlimited\\npermission to run the unmodified Program.  The output from running a\\ncovered work is covered by this License only if the output, given its\\ncontent, constitutes a covered work.  This License acknowledges your\\nrights of fair use or other equivalent, as provided by copyright law.\\n\\n  You may make, run and propagate covered works that you do not\\nconvey, without conditions so long as your license otherwise remains\\nin force.  You may convey covered works to others for the sole purpose\\nof having them make modifications exclusively for you, or provide you\\nwith facilities for running those works, provided that you comply with\\nthe terms of this License in conveying all material for which you do\\nnot control copyright.  Those thus making or running the covered works\\nfor you must do so exclusively on your behalf, under your direction\\nand control, on terms that prohibit them from making any copies of\\nyour copyrighted material outside their relationship with you.\\n\\n  Conveying under any other circumstances is permitted solely under\\nthe conditions stated below.  Sublicensing is not allowed; section 10\\nmakes it unnecessary.\\n\\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\\n\\n  No covered work shall be deemed part of an effective technological\\nmeasure under any applicable law fulfilling obligations under article\\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\\nsimilar laws prohibiting or restricting circumvention of such\\nmeasures.\\n\\n  When you convey a covered work, you waive any legal power to forbid\\ncircumvention of technological measures to the extent such circumvention\\nis effected by exercising rights under this License with respect to\\nthe covered work, and you disclaim any intention to limit operation or\\nmodification of the work as a means of enforcing, against the work's\\nusers, your or third parties' legal rights to forbid circumvention of\\ntechnological measures.\\n\\n  4. Conveying Verbatim Copies.\\n\\n  You may convey verbatim copies of the Program's source code as you\\nreceive it, in any medium, provided that you conspicuously and\\nappropriately publish on each copy an appropriate copyright notice;\\nkeep intact all notices stating that this License and any\\nnon-permissive terms added in accord with section 7 apply to the code;\\nkeep intact all notices of the absence of any warranty; and give all\\nrecipients a copy of this License along with the Program.\\n\\n  You may charge any price or no price for each copy that you convey,\\nand you may offer support or warranty protection for a fee.\\n\\n  5. Conveying Modified Source Versions.\\n\\n  You may convey a work based on the Program, or the modifications to\\nproduce it from the Program, in the form of source code under the\\nterms of section 4, provided that you also meet all of these conditions:\\n\\n    a) The work must carry prominent notices stating that you modified\\n    it, and giving a relevant date.\\n\\n    b) The work must carry prominent notices stating that it is\\n    released under this License and any conditions added under section\\n    7.  This requirement modifies the requirement in section 4 to\\n    \\\"keep intact all notices\\\".\\n\\n    c) You must license the entire work, as a whole, under this\\n    License to anyone who comes into possession of a copy.  This\\n    License will therefore apply, along with any applicable section 7\\n    additional terms, to the whole of the work, and all its parts,\\n    regardless of how they are packaged.  This License gives no\\n    permission to license the work in any other way, but it does not\\n    invalidate such permission if you have separately received it.\\n\\n    d) If the work has interactive user interfaces, each must display\\n    Appropriate Legal Notices; however, if the Program has interactive\\n    interfaces that do not display Appropriate Legal Notices, your\\n    work need not make them do so.\\n\\n  A compilation of a covered work with other separate and independent\\nworks, which are not by their nature extensions of the covered work,\\nand which are not combined with it such as to form a larger program,\\nin or on a volume of a storage or distribution medium, is called an\\n\\\"aggregate\\\" if the compilation and its resulting copyright are not\\nused to limit the access or legal rights of the compilation's users\\nbeyond what the individual works permit.  Inclusion of a covered work\\nin an aggregate does not cause this License to apply to the other\\nparts of the aggregate.\\n\\n  6. Conveying Non-Source Forms.\\n\\n  You may convey a covered work in object code form under the terms\\nof sections 4 and 5, provided that you also convey the\\nmachine-readable Corresponding Source under the terms of this License,\\nin one of these ways:\\n\\n    a) Convey the object code in, or embodied in, a physical product\\n    (including a physical distribution medium), accompanied by the\\n    Corresponding Source fixed on a durable physical medium\\n    customarily used for software interchange.\\n\\n    b) Convey the object code in, or embodied in, a physical product\\n    (including a physical distribution medium), accompanied by a\\n    written offer, valid for at least three years and valid for as\\n    long as you offer spare parts or customer support for that product\\n    model, to give anyone who possesses the object code either (1) a\\n    copy of the Corresponding Source for all the software in the\\n    product that is covered by this License, on a durable physical\\n    medium customarily used for software interchange, for a price no\\n    more than your reasonable cost of physically performing this\\n    conveying of source, or (2) access to copy the\\n    Corresponding Source from a network server at no charge.\\n\\n    c) Convey individual copies of the object code with a copy of the\\n    written offer to provide the Corresponding Source.  This\\n    alternative is allowed only occasionally and noncommercially, and\\n    only if you received the object code with such an offer, in accord\\n    with subsection 6b.\\n\\n    d) Convey the object code by offering access from a designated\\n    place (gratis or for a charge), and offer equivalent access to the\\n    Corresponding Source in the same way through the same place at no\\n    further charge.  You need not require recipients to copy the\\n    Corresponding Source along with the object code.  If the place to\\n    copy the object code is a network server, the Corresponding Source\\n    may be on a different server (operated by you or a third party)\\n    that supports equivalent copying facilities, provided you maintain\\n    clear directions next to the object code saying where to find the\\n    Corresponding Source.  Regardless of what server hosts the\\n    Corresponding Source, you remain obligated to ensure that it is\\n    available for as long as needed to satisfy these requirements.\\n\\n    e) Convey the object code using peer-to-peer transmission, provided\\n    you inform other peers where the object code and Corresponding\\n    Source of the work are being offered to the general public at no\\n    charge under subsection 6d.\\n\\n  A separable portion of the object code, whose source code is excluded\\nfrom the Corresponding Source as a System Library, need not be\\nincluded in conveying the object code work.\\n\\n  A \\\"User Product\\\" is either (1) a \\\"consumer product\\\", which means any\\ntangible personal property which is normally used for personal, family,\\nor household purposes, or (2) anything designed or sold for incorporation\\ninto a dwelling.  In determining whether a product is a consumer product,\\ndoubtful cases shall be resolved in favor of coverage.  For a particular\\nproduct received by a particular user, \\\"normally used\\\" refers to a\\ntypical or common use of that class of product, regardless of the status\\nof the particular user or of the way in which the particular user\\nactually uses, or expects or is expected to use, the product.  A product\\nis a consumer product regardless of whether the product has substantial\\ncommercial, industrial or non-consumer uses, unless such uses represent\\nthe only significant mode of use of the product.\\n\\n  \\\"Installation Information\\\" for a User Product means any methods,\\nprocedures, authorization keys, or other information required to install\\nand execute modified versions of a covered work in that User Product from\\na modified version of its Corresponding Source.  The information must\\nsuffice to ensure that the continued functioning of the modified object\\ncode is in no case prevented or interfered with solely because\\nmodification has been made.\\n\\n  If you convey an object code work under this section in, or with, or\\nspecifically for use in, a User Product, and the conveying occurs as\\npart of a transaction in which the right of possession and use of the\\nUser Product is transferred to the recipient in perpetuity or for a\\nfixed term (regardless of how the transaction is characterized), the\\nCorresponding Source conveyed under this section must be accompanied\\nby the Installation Information.  But this requirement does not apply\\nif neither you nor any third party retains the ability to install\\nmodified object code on the User Product (for example, the work has\\nbeen installed in ROM).\\n\\n  The requirement to provide Installation Information does not include a\\nrequirement to continue to provide support service, warranty, or updates\\nfor a work that has been modified or installed by the recipient, or for\\nthe User Product in which it has been modified or installed.  Access to a\\nnetwork may be denied when the modification itself materially and\\nadversely affects the operation of the network or violates the rules and\\nprotocols for communication across the network.\\n\\n  Corresponding Source conveyed, and Installation Information provided,\\nin accord with this section must be in a format that is publicly\\ndocumented (and with an implementation available to the public in\\nsource code form), and must require no special password or key for\\nunpacking, reading or copying.\\n\\n  7. Additional Terms.\\n\\n  \\\"Additional permissions\\\" are terms that supplement the terms of this\\nLicense by making exceptions from one or more of its conditions.\\nAdditional permissions that are applicable to the entire Program shall\\nbe treated as though they were included in this License, to the extent\\nthat they are valid under applicable law.  If additional permissions\\napply only to part of the Program, that part may be used separately\\nunder those permissions, but the entire Program remains governed by\\nthis License without regard to the additional permissions.\\n\\n  When you convey a copy of a covered work, you may at your option\\nremove any additional permissions from that copy, or from any part of\\nit.  (Additional permissions may be written to require their own\\nremoval in certain cases when you modify the work.)  You may place\\nadditional permissions on material, added by you to a covered work,\\nfor which you have or can give appropriate copyright permission.\\n\\n  Notwithstanding any other provision of this License, for material you\\nadd to a covered work, you may (if authorized by the copyright holders of\\nthat material) supplement the terms of this License with terms:\\n\\n    a) Disclaiming warranty or limiting liability differently from the\\n    terms of sections 15 and 16 of this License; or\\n\\n    b) Requiring preservation of specified reasonable legal notices or\\n    author attributions in that material or in the Appropriate Legal\\n    Notices displayed by works containing it; or\\n\\n    c) Prohibiting misrepresentation of the origin of that material, or\\n    requiring that modified versions of such material be marked in\\n    reasonable ways as different from the original version; or\\n\\n    d) Limiting the use for publicity purposes of names of licensors or\\n    authors of the material; or\\n\\n    e) Declining to grant rights under trademark law for use of some\\n    trade names, trademarks, or service marks; or\\n\\n    f) Requiring indemnification of licensors and authors of that\\n    material by anyone who conveys the material (or modified versions of\\n    it) with contractual assumptions of liability to the recipient, for\\n    any liability that these contractual assumptions directly impose on\\n    those licensors and authors.\\n\\n  All other non-permissive additional terms are considered \\\"further\\nrestrictions\\\" within the meaning of section 10.  If the Program as you\\nreceived it, or any part of it, contains a notice stating that it is\\ngoverned by this License along with a term that is a further\\nrestriction, you may remove that term.  If a license document contains\\na further restriction but permits relicensing or conveying under this\\nLicense, you may add to a covered work material governed by the terms\\nof that license document, provided that the further restriction does\\nnot survive such relicensing or conveying.\\n\\n  If you add terms to a covered work in accord with this section, you\\nmust place, in the relevant source files, a statement of the\\nadditional terms that apply to those files, or a notice indicating\\nwhere to find the applicable terms.\\n\\n  Additional terms, permissive or non-permissive, may be stated in the\\nform of a separately written license, or stated as exceptions;\\nthe above requirements apply either way.\\n\\n  8. Termination.\\n\\n  You may not propagate or modify a covered work except as expressly\\nprovided under this License.  Any attempt otherwise to propagate or\\nmodify it is void, and will automatically terminate your rights under\\nthis License (including any patent licenses granted under the third\\nparagraph of section 11).\\n\\n  However, if you cease all violation of this License, then your\\nlicense from a particular copyright holder is reinstated (a)\\nprovisionally, unless and until the copyright holder explicitly and\\nfinally terminates your license, and (b) permanently, if the copyright\\nholder fails to notify you of the violation by some reasonable means\\nprior to 60 days after the cessation.\\n\\n  Moreover, your license from a particular copyright holder is\\nreinstated permanently if the copyright holder notifies you of the\\nviolation by some reasonable means, this is the first time you have\\nreceived notice of violation of this License (for any work) from that\\ncopyright holder, and you cure the violation prior to 30 days after\\nyour receipt of the notice.\\n\\n  Termination of your rights under this section does not terminate the\\nlicenses of parties who have received copies or rights from you under\\nthis License.  If your rights have been terminated and not permanently\\nreinstated, you do not qualify to receive new licenses for the same\\nmaterial under section 10.\\n\\n  9. Acceptance Not Required for Having Copies.\\n\\n  You are not required to accept this License in order to receive or\\nrun a copy of the Program.  Ancillary propagation of a covered work\\noccurring solely as a consequence of using peer-to-peer transmission\\nto receive a copy likewise does not require acceptance.  However,\\nnothing other than this License grants you permission to propagate or\\nmodify any covered work.  These actions infringe copyright if you do\\nnot accept this License.  Therefore, by modifying or propagating a\\ncovered work, you indicate your acceptance of this License to do so.\\n\\n  10. Automatic Licensing of Downstream Recipients.\\n\\n  Each time you convey a covered work, the recipient automatically\\nreceives a license from the original licensors, to run, modify and\\npropagate that work, subject to this License.  You are not responsible\\nfor enforcing compliance by third parties with this License.\\n\\n  An \\\"entity transaction\\\" is a transaction transferring control of an\\norganization, or substantially all assets of one, or subdividing an\\norganization, or merging organizations.  If propagation of a covered\\nwork results from an entity transaction, each party to that\\ntransaction who receives a copy of the work also receives whatever\\nlicenses to the work the party's predecessor in interest had or could\\ngive under the previous paragraph, plus a right to possession of the\\nCorresponding Source of the work from the predecessor in interest, if\\nthe predecessor has it or can get it with reasonable efforts.\\n\\n  You may not impose any further restrictions on the exercise of the\\nrights granted or affirmed under this License.  For example, you may\\nnot impose a license fee, royalty, or other charge for exercise of\\nrights granted under this License, and you may not initiate litigation\\n(including a cross-claim or counterclaim in a lawsuit) alleging that\\nany patent claim is infringed by making, using, selling, offering for\\nsale, or importing the Program or any portion of it.\\n\\n  11. Patents.\\n\\n  A \\\"contributor\\\" is a copyright holder who authorizes use under this\\nLicense of the Program or a work on which the Program is based.  The\\nwork thus licensed is called the contributor's \\\"contributor version\\\".\\n\\n  A contributor's \\\"essential patent claims\\\" are all patent claims\\nowned or controlled by the contributor, whether already acquired or\\nhereafter acquired, that would be infringed by some manner, permitted\\nby this License, of making, using, or selling its contributor version,\\nbut do not include claims that would be infringed only as a\\nconsequence of further modification of the contributor version.  For\\npurposes of this definition, \\\"control\\\" includes the right to grant\\npatent sublicenses in a manner consistent with the requirements of\\nthis License.\\n\\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\\npatent license under the contributor's essential patent claims, to\\nmake, use, sell, offer for sale, import and otherwise run, modify and\\npropagate the contents of its contributor version.\\n\\n  In the following three paragraphs, a \\\"patent license\\\" is any express\\nagreement or commitment, however denominated, not to enforce a patent\\n(such as an express permission to practice a patent or covenant not to\\nsue for patent infringement).  To \\\"grant\\\" such a patent license to a\\nparty means to make such an agreement or commitment not to enforce a\\npatent against the party.\\n\\n  If you convey a covered work, knowingly relying on a patent license,\\nand the Corresponding Source of the work is not available for anyone\\nto copy, free of charge and under the terms of this License, through a\\npublicly available network server or other readily accessible means,\\nthen you must either (1) cause the Corresponding Source to be so\\navailable, or (2) arrange to deprive yourself of the benefit of the\\npatent license for this particular work, or (3) arrange, in a manner\\nconsistent with the requirements of this License, to extend the patent\\nlicense to downstream recipients.  \\\"Knowingly relying\\\" means you have\\nactual knowledge that, but for the patent license, your conveying the\\ncovered work in a country, or your recipient's use of the covered work\\nin a country, would infringe one or more identifiable patents in that\\ncountry that you have reason to believe are valid.\\n\\n  If, pursuant to or in connection with a single transaction or\\narrangement, you convey, or propagate by procuring conveyance of, a\\ncovered work, and grant a patent license to some of the parties\\nreceiving the covered work authorizing them to use, propagate, modify\\nor convey a specific copy of the covered work, then the patent license\\nyou grant is automatically extended to all recipients of the covered\\nwork and works based on it.\\n\\n  A patent license is \\\"discriminatory\\\" if it does not include within\\nthe scope of its coverage, prohibits the exercise of, or is\\nconditioned on the non-exercise of one or more of the rights that are\\nspecifically granted under this License.  You may not convey a covered\\nwork if you are a party to an arrangement with a third party that is\\nin the business of distributing software, under which you make payment\\nto the third party based on the extent of your activity of conveying\\nthe work, and under which the third party grants, to any of the\\nparties who would receive the covered work from you, a discriminatory\\npatent license (a) in connection with copies of the covered work\\nconveyed by you (or copies made from those copies), or (b) primarily\\nfor and in connection with specific products or compilations that\\ncontain the covered work, unless you entered into that arrangement,\\nor that patent license was granted, prior to 28 March 2007.\\n\\n  Nothing in this License shall be construed as excluding or limiting\\nany implied license or other defenses to infringement that may\\notherwise be available to you under applicable patent law.\\n\\n  12. No Surrender of Others' Freedom.\\n\\n  If conditions are imposed on you (whether by court order, agreement or\\notherwise) that contradict the conditions of this License, they do not\\nexcuse you from the conditions of this License.  If you cannot convey a\\ncovered work so as to satisfy simultaneously your obligations under this\\nLicense and any other pertinent obligations, then as a consequence you may\\nnot convey it at all.  For example, if you agree to terms that obligate you\\nto collect a royalty for further conveying from those to whom you convey\\nthe Program, the only way you could satisfy both those terms and this\\nLicense would be to refrain entirely from conveying the Program.\\n\\n  13. Use with the GNU Affero General Public License.\\n\\n  Notwithstanding any other provision of this License, you have\\npermission to link or combine any covered work with a work licensed\\nunder version 3 of the GNU Affero General Public License into a single\\ncombined work, and to convey the resulting work.  The terms of this\\nLicense will continue to apply to the part which is the covered work,\\nbut the special requirements of the GNU Affero General Public License,\\nsection 13, concerning interaction through a network will apply to the\\ncombination as such.\\n\\n  14. Revised Versions of this License.\\n\\n  The Free Software Foundation may publish revised and/or new versions of\\nthe GNU General Public License from time to time.  Such new versions will\\nbe similar in spirit to the present version, but may differ in detail to\\naddress new problems or concerns.\\n\\n  Each version is given a distinguishing version number.  If the\\nProgram specifies that a certain numbered version of the GNU General\\nPublic License \\\"or any later version\\\" applies to it, you have the\\noption of following the terms and conditions either of that numbered\\nversion or of any later version published by the Free Software\\nFoundation.  If the Program does not specify a version number of the\\nGNU General Public License, you may choose any version ever published\\nby the Free Software Foundation.\\n\\n  If the Program specifies that a proxy can decide which future\\nversions of the GNU General Public License can be used, that proxy's\\npublic statement of acceptance of a version permanently authorizes you\\nto choose that version for the Program.\\n\\n  Later license versions may give you additional or different\\npermissions.  However, no additional obligations are imposed on any\\nauthor or copyright holder as a result of your choosing to follow a\\nlater version.\\n\\n  15. Disclaimer of Warranty.\\n\\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \\\"AS IS\\\" WITHOUT WARRANTY\\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\\n\\n  16. Limitation of Liability.\\n\\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\\nSUCH DAMAGES.\\n\\n  17. Interpretation of Sections 15 and 16.\\n\\n  If the disclaimer of warranty and limitation of liability provided\\nabove cannot be given local legal effect according to their terms,\\nreviewing courts shall apply local law that most closely approximates\\nan absolute waiver of all civil liability in connection with the\\nProgram, unless a warranty or assumption of liability accompanies a\\ncopy of the Program in return for a fee.\\n\\n                     END OF TERMS AND CONDITIONS\\n\\n            How to Apply These Terms to Your New Programs\\n\\n  If you develop a new program, and you want it to be of the greatest\\npossible use to the public, the best way to achieve this is to make it\\nfree software which everyone can redistribute and change under these terms.\\n\\n  To do so, attach the following notices to the program.  It is safest\\nto attach them to the start of each source file to most effectively\\nstate the exclusion of warranty; and each file should have at least\\nthe \\\"copyright\\\" line and a pointer to where the full notice is found.\\n\\n    <one line to give the program's name and a brief idea of what it does.>\\n    Copyright (C) <year>  <name of author>\\n\\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 <http://www.gnu.org/licenses/>.\\n\\nAlso add information on how to contact you by electronic and paper mail.\\n\\n  If the program does terminal interaction, make it output a short\\nnotice like this when it starts in an interactive mode:\\n\\n    <program>  Copyright (C) <year>  <name of author>\\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\\n    This is free software, and you are welcome to redistribute it\\n    under certain conditions; type `show c' for details.\\n\\nThe hypothetical commands `show w' and `show c' should show the appropriate\\nparts of the General Public License.  Of course, your program's commands\\nmight be different; for a GUI interface, you would use an \\\"about box\\\".\\n\\n  You should also get your employer (if you work as a programmer) or school,\\nif any, to sign a \\\"copyright disclaimer\\\" for the program, if necessary.\\nFor more information on this, and how to apply and follow the GNU GPL, see\\n<http://www.gnu.org/licenses/>.\\n\\n  The GNU General Public License does not permit incorporating your program\\ninto proprietary programs.  If your program is a subroutine library, you\\nmay consider it more useful to permit linking proprietary applications with\\nthe library.  If this is what you want to do, use the GNU Lesser General\\nPublic License instead of this License.  But first, please read\\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\\n\\n*/\\n\",\"keccak256\":\"0x08da88e3ef46dae3e7937fbc60210e7a02f1e7b7daddd3c33ab40bdd20ca30e6\"},\"@aave/core-v3/contracts/mocks/tokens/WETH9Mocked.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WETH9} from '../../dependencies/weth/WETH9.sol';\\n\\ncontract WETH9Mocked is WETH9 {\\n  // Mint not backed by Ether: only for testing purposes\\n  function mint(uint256 value) public returns (bool) {\\n    balanceOf[msg.sender] += value;\\n    emit Transfer(address(0), msg.sender, value);\\n    return true;\\n  }\\n\\n  function mint(address account, uint256 value) public returns (bool) {\\n    balanceOf[account] += value;\\n    emit Transfer(address(0), account, value);\\n    return true;\\n  }\\n}\\n\",\"keccak256\":\"0x83cd7ab548a31266dcdde4c0a07c9b2d4cc63ab18ffdd37f08b685e81243fd49\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":2984,"contract":"@aave/core-v3/contracts/mocks/tokens/WETH9Mocked.sol:WETH9Mocked","label":"name","offset":0,"slot":"0","type":"t_string_storage"},{"astId":2987,"contract":"@aave/core-v3/contracts/mocks/tokens/WETH9Mocked.sol:WETH9Mocked","label":"symbol","offset":0,"slot":"1","type":"t_string_storage"},{"astId":2990,"contract":"@aave/core-v3/contracts/mocks/tokens/WETH9Mocked.sol:WETH9Mocked","label":"decimals","offset":0,"slot":"2","type":"t_uint8"},{"astId":3022,"contract":"@aave/core-v3/contracts/mocks/tokens/WETH9Mocked.sol:WETH9Mocked","label":"balanceOf","offset":0,"slot":"3","type":"t_mapping(t_address,t_uint256)"},{"astId":3028,"contract":"@aave/core-v3/contracts/mocks/tokens/WETH9Mocked.sol:WETH9Mocked","label":"allowance","offset":0,"slot":"4","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol":{"MockAToken":{"abi":[{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"}],"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"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"BalanceTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"treasury","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"aTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"aTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"aTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Mint","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":"ATOKEN_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EIP712_REVISION","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_TREASURY_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNDERLYING_ASSET_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"receiverOfUnderlying","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"contract IAaveIncentivesController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getPreviousIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getScaledUserBalanceAndSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"handleRepayment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"initializingPool","type":"address"},{"internalType":"address","name":"treasury","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"aTokenDecimals","type":"uint8"},{"internalType":"string","name":"aTokenName","type":"string"},{"internalType":"string","name":"aTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"mintToTreasury","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":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"scaledBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scaledTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IAaveIncentivesController","name":"controller","type":"address"}],"name":"setIncentivesController","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"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferOnLiquidation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferUnderlyingTo","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Overrides the base function to fully implement IATokensee `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation"},"RESERVE_TREASURY_ADDRESS()":{"returns":{"_0":"Address of the Aave treasury"}},"UNDERLYING_ASSET_ADDRESS()":{"returns":{"_0":"The address of the underlying asset"}},"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`."},"burn(address,address,uint256,uint256)":{"details":"In some instances, the mint event could be emitted from a burn transaction if the amount to burn is less than the interest that the user accrued","params":{"amount":"The amount being burned","from":"The address from which the aTokens will be burned","index":"The next liquidity index of the reserve","receiverOfUnderlying":"The address that will receive the underlying"}},"decreaseAllowance(address,uint256)":{"params":{"spender":"The user allowed to spend on behalf of _msgSender()","subtractedValue":"The amount being subtracted to the allowance"},"returns":{"_0":"`true`"}},"getIncentivesController()":{"returns":{"_0":"The address of the Incentives Controller"}},"getPreviousIndex(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The last index interest was accrued to the user's balance, expressed in ray"}},"getScaledUserBalanceAndSupply(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The scaled balance of the user","_1":"The scaled total supply"}},"handleRepayment(address,address,uint256)":{"details":"The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.","params":{"amount":"The amount getting repaid","onBehalfOf":"The address of the user who will get his debt reduced/removed","user":"The user executing the repayment"}},"increaseAllowance(address,uint256)":{"params":{"addedValue":"The amount being added to the allowance","spender":"The user allowed to spend on behalf of _msgSender()"},"returns":{"_0":"`true`"}},"initialize(address,address,address,address,uint8,string,string,bytes)":{"params":{"aTokenDecimals":"The decimals of the aToken, same as the underlying asset's","aTokenName":"The name of the aToken","aTokenSymbol":"The symbol of the aToken","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","treasury":"The address of the Aave treasury, receiving the fees on this aToken","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}},"mint(address,address,uint256,uint256)":{"params":{"amount":"The amount of tokens getting minted","caller":"The address performing the mint","index":"The next liquidity index of the reserve","onBehalfOf":"The address of the user that will receive the minted aTokens"},"returns":{"_0":"`true` if the the previous balance of the user was 0"}},"mintToTreasury(uint256,uint256)":{"params":{"amount":"The amount of tokens getting minted","index":"The next liquidity index of the reserve"}},"nonces(address)":{"details":"Overrides the base function to fully implement IATokensee `EIP712Base.nonces()` for more detailed documentation"},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md","params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","owner":"The owner of the funds","r":"Signature param","s":"Signature param","spender":"The spender","v":"Signature param","value":"The amount"}},"rescueTokens(address,address,uint256)":{"params":{"amount":"The amount of token to transfer","to":"The address of the recipient","token":"The address of the token"}},"scaledBalanceOf(address)":{"details":"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update","params":{"user":"The user whose balance is calculated"},"returns":{"_0":"The scaled balance of the user"}},"scaledTotalSupply()":{"returns":{"_0":"The scaled total supply"}},"setIncentivesController(address)":{"params":{"controller":"the new Incentives controller"}},"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."},"transferOnLiquidation(address,address,uint256)":{"params":{"from":"The address getting liquidated, current owner of the aTokens","to":"The recipient","value":"The amount of tokens getting transferred"}},"transferUnderlyingTo(address,uint256)":{"details":"Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()","params":{"amount":"The amount getting transferred","target":"The recipient of the underlying"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_25420":{"entryPoint":null,"id":25420,"parameterSlots":1,"returnSlots":0},"@_27754":{"entryPoint":null,"id":27754,"parameterSlots":0,"returnSlots":0},"@_27965":{"entryPoint":null,"id":27965,"parameterSlots":4,"returnSlots":0},"@_28380":{"entryPoint":null,"id":28380,"parameterSlots":4,"returnSlots":0},"@_28544":{"entryPoint":null,"id":28544,"parameterSlots":4,"returnSlots":0},"@_8847":{"entryPoint":null,"id":8847,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$4860_fromMemory":{"entryPoint":543,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":582,"id":null,"parameterSlots":1,"returnSlots":1},"validator_revert_contract_IPool":{"entryPoint":518,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1110:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"66:86:201","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:201"},"nodeType":"YulFunctionCall","src":"132:12:201"},"nodeType":"YulExpressionStatement","src":"132:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"89:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"100:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"115:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"120:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"111:3:201"},"nodeType":"YulFunctionCall","src":"111:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"124:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"107:3:201"},"nodeType":"YulFunctionCall","src":"107:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"96:3:201"},"nodeType":"YulFunctionCall","src":"96:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"86:2:201"},"nodeType":"YulFunctionCall","src":"86:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"79:6:201"},"nodeType":"YulFunctionCall","src":"79:50:201"},"nodeType":"YulIf","src":"76:70:201"}]},"name":"validator_revert_contract_IPool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"55:5:201","type":""}],"src":"14:138:201"},{"body":{"nodeType":"YulBlock","src":"252:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"298:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"307:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"310:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"300:6:201"},"nodeType":"YulFunctionCall","src":"300:12:201"},"nodeType":"YulExpressionStatement","src":"300:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"273:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"282:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"269:3:201"},"nodeType":"YulFunctionCall","src":"269:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"294:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"265:3:201"},"nodeType":"YulFunctionCall","src":"265:32:201"},"nodeType":"YulIf","src":"262:52:201"},{"nodeType":"YulVariableDeclaration","src":"323:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"342:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"336:5:201"},"nodeType":"YulFunctionCall","src":"336:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"327:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"393:5:201"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"361:31:201"},"nodeType":"YulFunctionCall","src":"361:38:201"},"nodeType":"YulExpressionStatement","src":"361:38:201"},{"nodeType":"YulAssignment","src":"408:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"418:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"408:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$4860_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"218:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"229:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"241:6:201","type":""}],"src":"157:272:201"},{"body":{"nodeType":"YulBlock","src":"546:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"592:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"601:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"604:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"594:6:201"},"nodeType":"YulFunctionCall","src":"594:12:201"},"nodeType":"YulExpressionStatement","src":"594:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"567:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"576:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"563:3:201"},"nodeType":"YulFunctionCall","src":"563:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"588:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"559:3:201"},"nodeType":"YulFunctionCall","src":"559:32:201"},"nodeType":"YulIf","src":"556:52:201"},{"nodeType":"YulVariableDeclaration","src":"617:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"636:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"630:5:201"},"nodeType":"YulFunctionCall","src":"630:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"621:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"687:5:201"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"655:31:201"},"nodeType":"YulFunctionCall","src":"655:38:201"},"nodeType":"YulExpressionStatement","src":"655:38:201"},{"nodeType":"YulAssignment","src":"702:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"712:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"702:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"512:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"523:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"535:6:201","type":""}],"src":"434:289:201"},{"body":{"nodeType":"YulBlock","src":"783:325:201","statements":[{"nodeType":"YulAssignment","src":"793:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"807:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"810:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"803:3:201"},"nodeType":"YulFunctionCall","src":"803:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"793:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"824:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"854:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"860:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:201"},"nodeType":"YulFunctionCall","src":"850:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"828:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"901:31:201","statements":[{"nodeType":"YulAssignment","src":"903:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"917:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"925:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"913:3:201"},"nodeType":"YulFunctionCall","src":"913:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"903:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"881:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"874:6:201"},"nodeType":"YulFunctionCall","src":"874:26:201"},"nodeType":"YulIf","src":"871:61:201"},{"body":{"nodeType":"YulBlock","src":"991:111:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1012:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1019:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1024:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1015:3:201"},"nodeType":"YulFunctionCall","src":"1015:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1005:6:201"},"nodeType":"YulFunctionCall","src":"1005:31:201"},"nodeType":"YulExpressionStatement","src":"1005:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1056:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1059:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1049:6:201"},"nodeType":"YulFunctionCall","src":"1049:15:201"},"nodeType":"YulExpressionStatement","src":"1049:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1084:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1087:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1077:6:201"},"nodeType":"YulFunctionCall","src":"1077:15:201"},"nodeType":"YulExpressionStatement","src":"1077:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"947:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"970:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"978:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"967:2:201"},"nodeType":"YulFunctionCall","src":"967:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"944:2:201"},"nodeType":"YulFunctionCall","src":"944:38:201"},"nodeType":"YulIf","src":"941:161:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"763:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"772:6:201","type":""}],"src":"728:380:201"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPool(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$4860_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60e0604052600080553480156200001557600080fd5b50604051620038ee380380620038ee83398101604081905262000038916200021f565b80806040518060400160405280600b81526020016a105513d2d15397d253541360aa1b8152506040518060400160405280600b81526020016a105513d2d15397d253541360aa1b81525060008383838383838383836001600160a01b0316630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f191906200021f565b6001600160a01b031660805282516200011290603790602086019062000160565b5081516200012890603890602085019062000160565b506039805460ff191660ff9290921691909117905550506001600160a01b031660a05250504660c05250620002839650505050505050565b8280546200016e9062000246565b90600052602060002090601f016020900481019282620001925760008555620001dd565b82601f10620001ad57805160ff1916838001178555620001dd565b82800160010185558215620001dd579182015b82811115620001dd578251825591602001919060010190620001c0565b50620001eb929150620001ef565b5090565b5b80821115620001eb5760008155600101620001f0565b6001600160a01b03811681146200021c57600080fd5b50565b6000602082840312156200023257600080fd5b81516200023f8162000206565b9392505050565b600181811c908216806200025b57607f821691505b602082108114156200027d57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c0516135d9620003156000396000611ccd0152600081816103bc0152818161071d0152818161088401528181610a8301528181610c9d01528181610d6a01528181610e2c01528181610f0f01528181610f8f015281816110b701528181611709015281816119d90152818161238201526124f901526000818161113e01526117c801526135d96000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c8063781603761161012a578063b1bf962d116100bd578063d7020d0a1161008c578063e075398611610071578063e07539861461058c578063e655dbd8146105e8578063f866c319146105fb57600080fd5b8063d7020d0a14610533578063dd62ed3e1461054657600080fd5b8063b1bf962d146104f2578063b3f1c93d146104fa578063cea9d26f1461050d578063d505accf1461052057600080fd5b8063a457c2d7116100f9578063a457c2d714610490578063a9059cbb146104a3578063ae167335146104b6578063b16a19de146104d457600080fd5b806378160376146104265780637df5bd3b146104625780637ecebe001461047557806395d89b411461048857600080fd5b806330adf81f116101bd5780634efecaa51161018c57806370a082311161017157806370a08231146103a45780637535d246146103b757806375d264131461040357600080fd5b80634efecaa51461037e5780636fd976761461039157600080fd5b806330adf81f14610327578063313ce5671461034e5780633644e51514610363578063395093511461036b57600080fd5b806318160ddd116101f957806318160ddd146102e4578063183fb413146102ec5780631da24f3e1461030157806323b872dd1461031457600080fd5b806306fdde031461022b578063095ea7b3146102495780630afbcdc91461026c5780630bd7ad3b146102ce575b600080fd5b61023361060e565b6040516102409190613040565b60405180910390f35b61025c61025736600461308f565b6106a0565b6040519015158152602001610240565b6102b961027a3660046130bb565b73ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546036546fffffffffffffffffffffffffffffffff90911691565b60408051928352602083019190915201610240565b6102d6600181565b604051908152602001610240565b6102d66106b6565b6102ff6102fa366004613132565b610795565b005b6102d661030f3660046130bb565b610b54565b61025c610322366004613226565b610b93565b6102d67f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60395460405160ff9091168152602001610240565b6102d6610c13565b61025c61037936600461308f565b610c22565b6102ff61038c36600461308f565b610c66565b6102ff61039f366004613226565b610d33565b6102d66103b23660046130bb565b610ddd565b6103de7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610240565b603954610100900473ffffffffffffffffffffffffffffffffffffffff166103de565b6102336040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6102ff610470366004613267565b610ed8565b6102d66104833660046130bb565b610fd1565b610233610ffc565b61025c61049e36600461308f565b61100b565b61025c6104b136600461308f565b61104f565b603c5473ffffffffffffffffffffffffffffffffffffffff166103de565b603d5473ffffffffffffffffffffffffffffffffffffffff166103de565b6102d6611072565b61025c610508366004613289565b61107d565b6102ff61051b366004613226565b61113a565b6102ff61052e3660046132cf565b611378565b6102ff610541366004613289565b6116d2565b6102d661055436600461333d565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260356020908152604080832093909416825291909152205490565b6102d661059a3660046130bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b6102ff6105f63660046130bb565b6117c4565b6102ff610609366004613226565b6119a2565b60606037805461061d90613376565b80601f016020809104026020016040519081016040528092919081815260200182805461064990613376565b80156106965780601f1061066b57610100808354040283529160200191610696565b820191906000526020600020905b81548152906001019060200180831161067957829003601f168201915b5050505050905090565b60006106ad338484611a54565b50600192915050565b6000806106c260365490565b9050806106d157600091505090565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261078f917f0000000000000000000000000000000000000000000000000000000000000000169063d15e005390602401602060405180830381865afa158015610764573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078891906133c4565b8290611ac2565b91505090565b60015460029060ff16806107a85750303b155b806107b4575060005481115b610845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b60015460ff1615801561088257600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f38370000000000000000000000000000000000000000000000000000000000008152509061093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5061097f88888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b1992505050565b6109be86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b2c92505050565b603980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8b16179055603c805473ffffffffffffffffffffffffffffffffffffffff808f167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603d80548e8416921691909117905560398054918c16610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055610a7b611b3f565b603b819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb19e051f8af41150ccccb3fc2c2d8d15f4a4cf434f32a559ba75fe73d6eea20b8e8d8d8d8d8d8d8d8d604051610b0e99989796959493929190613426565b60405180910390a38015610b4557600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603460205260408120546fffffffffffffffffffffffffffffffff165b92915050565b600080610b9f83611c04565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260356020908152604080832033808552925290912054919250610bfd91879190610bf8906fffffffffffffffffffffffffffffffff8616906134d0565b611a54565b610c08858583611caa565b506001949350505050565b6000610c1d611cc9565b905090565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106ad918590610bf89086906134e7565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610d0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50603d54610d2f9073ffffffffffffffffffffffffffffffffffffffff168383611d02565b5050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091610b8d917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa158015610e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9991906133c4565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260409020546fffffffffffffffffffffffffffffffff165b90611ac2565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610f7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5081610f86575050565b603c54610fcc907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff168484611dd5565b505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603a6020526040812054610b8d565b60606038805461061d90613376565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106ad918590610bf89086906134d0565b60008061105b83611c04565b9050611068338583611caa565b5060019392505050565b6000610c1d60365490565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152600090337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5061113185858585611dd5565b95945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cb91906134ff565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015611238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125c919061351c565b6040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250906112ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50603d5460408051808201909152600281527f383500000000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff86811691161415611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50610dd773ffffffffffffffffffffffffffffffffffffffff85168484611d02565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff88166113fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50834211156040518060400160405280600281526020017f37380000000000000000000000000000000000000000000000000000000000008152509061146d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5073ffffffffffffffffffffffffffffffffffffffff87166000908152603a60205260408120549061149d610c13565b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9602082015273ffffffffffffffffffffffffffffffffffffffff808d1692820192909252908a1660608201526080810189905260a0810184905260c0810188905260e0016040516020818303038152906040528051906020012060405160200161155e9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa1580156115e4573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f37390000000000000000000000000000000000000000000000000000000000008152509061168a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b506116968260016134e7565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603a60205260409020556116c7898989611a54565b505050505050505050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5061178384848484612016565b73ffffffffffffffffffffffffffffffffffffffff83163014610dd757603d54610dd79073ffffffffffffffffffffffffffffffffffffffff168484611d02565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611831573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185591906134ff565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156118c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e6919061351c565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50506039805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611a46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50610fcc8383836000612334565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526035602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517611af757600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b8051610d2f906037906020840190612f45565b8051610d2f906038906020840190612f45565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611b6a6125b0565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60006fffffffffffffffffffffffffffffffff821115611ca6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f3238206269747300000000000000000000000000000000000000000000000000606482015260840161083c565b5090565b610fcc8383836fffffffffffffffffffffffffffffffff166001612334565b60007f0000000000000000000000000000000000000000000000000000000000000000461415611cfa5750603b5490565b610c1d611b3f565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1611d65573d6000803e3d6000fd5b50611d6f846125ba565b610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e736665720000000000000000000000604482015260640161083c565b600080611de28484612686565b60408051808201909152600281527f3234000000000000000000000000000000000000000000000000000000000000602082015290915081611e51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291611eae918491700100000000000000000000000000000000900416611ac2565b611eb88387611ac2565b611ec291906134d0565b9050611ecd85611c04565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055611f3587611f3085611c04565b6126c5565b6000611f4182886134e7565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611fa391815260200190565b60405180910390a3604080518281526020810184905290810187905273ffffffffffffffffffffffffffffffffffffffff808a1691908b16907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35050159695505050505050565b60006120228383612686565b60408051808201909152600281527f3235000000000000000000000000000000000000000000000000000000000000602082015290915081612091576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff80821692916120ee918491700100000000000000000000000000000000900416611ac2565b6120f88386611ac2565b61210291906134d0565b905061210d84611c04565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556121758761217085611c04565b612841565b8481111561225457600061218986836134d0565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121eb91815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff89169081907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35061232b565b600061226082876134d0565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122c291815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff80891691908a16907f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f90906060015b60405180910390a3505b50505050505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201819052916000917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa1580156123cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ef91906133c4565b9050600061243582610ed28973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b9050600061247b83610ed28973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b9050612489888888866128a5565b8415612556576040517fd5ed393300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015289811660248301528881166044830152606482018890526084820184905260a482018390527f0000000000000000000000000000000000000000000000000000000000000000169063d5ed39339060c401600060405180830381600087803b15801561253d57600080fd5b505af1158015612551573d6000803e3d6000fd5b505050505b73ffffffffffffffffffffffffffffffffffffffff8088169089167f4beccb90f994c31aced7a23b5611020728a23d8ec5cddd1a3e9d97b96fda866661259c8987612686565b604080519182526020820188905201612321565b6060610c1d61060e565b60006125fa565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156126395760208114612673576126347f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f6125c1565b612680565b823b61266a5761266a7f475076323a206e6f74206120636f6e747261637400000000000000000000000060146125c1565b60019150612680565b3d6000803e600051151591505b50919050565b600081156b033b2e3c9fd0803ce8000000600284041904841117156126aa57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b6036546126e46fffffffffffffffffffffffffffffffff8316826134e7565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff16612729838261353e565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9390931692909217909155603954610100900416801561283a576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590526fffffffffffffffffffffffffffffffff841660448301528216906331873e2e90606401600060405180830381600087803b15801561282657600080fd5b505af11580156116c7573d6000803e3d6000fd5b5050505050565b6036546128606fffffffffffffffffffffffffffffffff8316826134d0565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff166127298382613572565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291612901918491700100000000000000000000000000000000900416611ac2565b61290b8385611ac2565b61291591906134d0565b905060006129578673ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260346020526040812054919250906129b290839070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16611ac2565b6129bc8387611ac2565b6129c691906134d0565b90506129d185611c04565b73ffffffffffffffffffffffffffffffffffffffff8916600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612a3085611c04565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612aa28888612a9d612a988a8a612686565b611c04565b612c9a565b8215612b515760405183815273ffffffffffffffffffffffffffffffffffffffff8916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805184815260208101859052808201879052905173ffffffffffffffffffffffffffffffffffffffff8a169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015612b8d5750600081115b15612c3b5760405181815273ffffffffffffffffffffffffffffffffffffffff8816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101839052808201879052905173ffffffffffffffffffffffffffffffffffffffff89169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8860405161232191815260200190565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff16612cdc8282613572565b73ffffffffffffffffffffffffffffffffffffffff85811660009081526034602052604080822080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9586161790559186168152205416612d50838261353e565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff93909316929092179091556039546101009004168015612f3d576036546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018390526fffffffffffffffffffffffffffffffff861660448301528316906331873e2e90606401600060405180830381600087803b158015612e5057600080fd5b505af1158015612e64573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161461232b576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018390526fffffffffffffffffffffffffffffffff851660448301528316906331873e2e90606401600060405180830381600087803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b50505050505b505050505050565b828054612f5190613376565b90600052602060002090601f016020900481019282612f735760008555612fb9565b82601f10612f8c57805160ff1916838001178555612fb9565b82800160010185558215612fb9579182015b82811115612fb9578251825591602001919060010190612f9e565b50611ca69291505b80821115611ca65760008155600101612fc1565b6000815180845260005b81811015612ffb57602081850181015186830182015201612fdf565b8181111561300d576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006130536020830184612fd5565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461307c57600080fd5b50565b803561308a8161305a565b919050565b600080604083850312156130a257600080fd5b82356130ad8161305a565b946020939093013593505050565b6000602082840312156130cd57600080fd5b81356130538161305a565b803560ff8116811461308a57600080fd5b60008083601f8401126130fb57600080fd5b50813567ffffffffffffffff81111561311357600080fd5b60208301915083602082850101111561312b57600080fd5b9250929050565b60008060008060008060008060008060006101008c8e03121561315457600080fd5b61315d8c61307f565b9a5061316b60208d0161307f565b995061317960408d0161307f565b985061318760608d0161307f565b975061319560808d016130d8565b965067ffffffffffffffff8060a08e013511156131b157600080fd5b6131c18e60a08f01358f016130e9565b909750955060c08d01358110156131d757600080fd5b6131e78e60c08f01358f016130e9565b909550935060e08d01358110156131fd57600080fd5b5061320e8d60e08e01358e016130e9565b81935080925050509295989b509295989b9093969950565b60008060006060848603121561323b57600080fd5b83356132468161305a565b925060208401356132568161305a565b929592945050506040919091013590565b6000806040838503121561327a57600080fd5b50508035926020909101359150565b6000806000806080858703121561329f57600080fd5b84356132aa8161305a565b935060208501356132ba8161305a565b93969395505050506040820135916060013590565b600080600080600080600060e0888a0312156132ea57600080fd5b87356132f58161305a565b965060208801356133058161305a565b95506040880135945060608801359350613321608089016130d8565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561335057600080fd5b823561335b8161305a565b9150602083013561336b8161305a565b809150509250929050565b600181811c9082168061338a57607f821691505b60208210811415612680577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000602082840312156133d657600080fd5b5051919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808c168352808b1660208401525060ff8916604083015260c0606083015261346960c08301888a6133dd565b828103608084015261347c8187896133dd565b905082810360a08401526134918185876133dd565b9c9b505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156134e2576134e26134a1565b500390565b600082198211156134fa576134fa6134a1565b500190565b60006020828403121561351157600080fd5b81516130538161305a565b60006020828403121561352e57600080fd5b8151801515811461305357600080fd5b60006fffffffffffffffffffffffffffffffff808316818516808303821115613569576135696134a1565b01949350505050565b60006fffffffffffffffffffffffffffffffff8381169083168181101561359b5761359b6134a1565b03939250505056fea2646970667358221220cb990b5cb5941c351cd908bfe6b9dd94d8482ea9981807223bc188ade4d22de264736f6c634300080a0033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x38EE CODESIZE SUB DUP1 PUSH3 0x38EE DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x38 SWAP2 PUSH3 0x21F JUMP JUMPDEST DUP1 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xB DUP2 MSTORE PUSH1 0x20 ADD PUSH11 0x105513D2D15397D2535413 PUSH1 0xAA SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xB DUP2 MSTORE PUSH1 0x20 ADD PUSH11 0x105513D2D15397D2535413 PUSH1 0xAA SHL DUP2 MSTORE POP PUSH1 0x0 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xCB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0xF1 SWAP2 SWAP1 PUSH3 0x21F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE DUP3 MLOAD PUSH3 0x112 SWAP1 PUSH1 0x37 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH3 0x160 JUMP JUMPDEST POP DUP2 MLOAD PUSH3 0x128 SWAP1 PUSH1 0x38 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x160 JUMP JUMPDEST POP PUSH1 0x39 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE POP POP CHAINID PUSH1 0xC0 MSTORE POP PUSH3 0x283 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x16E SWAP1 PUSH3 0x246 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x192 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x1DD JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x1AD JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x1DD JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x1DD JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x1DD JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x1C0 JUMP JUMPDEST POP PUSH3 0x1EB SWAP3 SWAP2 POP PUSH3 0x1EF JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x1EB JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x1F0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x21C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x232 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x23F DUP2 PUSH3 0x206 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x25B JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x27D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x35D9 PUSH3 0x315 PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH2 0x1CCD ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x3BC ADD MSTORE DUP2 DUP2 PUSH2 0x71D ADD MSTORE DUP2 DUP2 PUSH2 0x884 ADD MSTORE DUP2 DUP2 PUSH2 0xA83 ADD MSTORE DUP2 DUP2 PUSH2 0xC9D ADD MSTORE DUP2 DUP2 PUSH2 0xD6A ADD MSTORE DUP2 DUP2 PUSH2 0xE2C ADD MSTORE DUP2 DUP2 PUSH2 0xF0F ADD MSTORE DUP2 DUP2 PUSH2 0xF8F ADD MSTORE DUP2 DUP2 PUSH2 0x10B7 ADD MSTORE DUP2 DUP2 PUSH2 0x1709 ADD MSTORE DUP2 DUP2 PUSH2 0x19D9 ADD MSTORE DUP2 DUP2 PUSH2 0x2382 ADD MSTORE PUSH2 0x24F9 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x113E ADD MSTORE PUSH2 0x17C8 ADD MSTORE PUSH2 0x35D9 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 0x226 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x78160376 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xB1BF962D GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xD7020D0A GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xE0753986 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE0753986 EQ PUSH2 0x58C JUMPI DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x5E8 JUMPI DUP1 PUSH4 0xF866C319 EQ PUSH2 0x5FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD7020D0A EQ PUSH2 0x533 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB1BF962D EQ PUSH2 0x4F2 JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x4FA JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0x50D JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x520 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA457C2D7 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x490 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0xAE167335 EQ PUSH2 0x4B6 JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x4D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x78160376 EQ PUSH2 0x426 JUMPI DUP1 PUSH4 0x7DF5BD3B EQ PUSH2 0x462 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x475 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x1BD JUMPI DUP1 PUSH4 0x4EFECAA5 GT PUSH2 0x18C JUMPI DUP1 PUSH4 0x70A08231 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3A4 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x3B7 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x403 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4EFECAA5 EQ PUSH2 0x37E JUMPI DUP1 PUSH4 0x6FD97676 EQ PUSH2 0x391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x327 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x34E JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x363 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x36B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0x1F9 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2E4 JUMPI DUP1 PUSH4 0x183FB413 EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0x1DA24F3E EQ PUSH2 0x301 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x314 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x249 JUMPI DUP1 PUSH4 0xAFBCDC9 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0xBD7AD3B EQ PUSH2 0x2CE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x233 PUSH2 0x60E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x240 SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x25C PUSH2 0x257 CALLDATASIZE PUSH1 0x4 PUSH2 0x308F JUMP JUMPDEST PUSH2 0x6A0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2B9 PUSH2 0x27A CALLDATASIZE PUSH1 0x4 PUSH2 0x30BB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x36 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x6B6 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x2FA CALLDATASIZE PUSH1 0x4 PUSH2 0x3132 JUMP JUMPDEST PUSH2 0x795 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2D6 PUSH2 0x30F CALLDATASIZE PUSH1 0x4 PUSH2 0x30BB JUMP JUMPDEST PUSH2 0xB54 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x322 CALLDATASIZE PUSH1 0x4 PUSH2 0x3226 JUMP JUMPDEST PUSH2 0xB93 JUMP JUMPDEST PUSH2 0x2D6 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0xC13 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x379 CALLDATASIZE PUSH1 0x4 PUSH2 0x308F JUMP JUMPDEST PUSH2 0xC22 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x38C CALLDATASIZE PUSH1 0x4 PUSH2 0x308F JUMP JUMPDEST PUSH2 0xC66 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x39F CALLDATASIZE PUSH1 0x4 PUSH2 0x3226 JUMP JUMPDEST PUSH2 0xD33 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x3B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x30BB JUMP JUMPDEST PUSH2 0xDDD JUMP JUMPDEST PUSH2 0x3DE PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x233 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x470 CALLDATASIZE PUSH1 0x4 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0xED8 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x483 CALLDATASIZE PUSH1 0x4 PUSH2 0x30BB JUMP JUMPDEST PUSH2 0xFD1 JUMP JUMPDEST PUSH2 0x233 PUSH2 0xFFC JUMP JUMPDEST PUSH2 0x25C PUSH2 0x49E CALLDATASIZE PUSH1 0x4 PUSH2 0x308F JUMP JUMPDEST PUSH2 0x100B JUMP JUMPDEST PUSH2 0x25C PUSH2 0x4B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x308F JUMP JUMPDEST PUSH2 0x104F JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x1072 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x508 CALLDATASIZE PUSH1 0x4 PUSH2 0x3289 JUMP JUMPDEST PUSH2 0x107D JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x51B CALLDATASIZE PUSH1 0x4 PUSH2 0x3226 JUMP JUMPDEST PUSH2 0x113A JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x52E CALLDATASIZE PUSH1 0x4 PUSH2 0x32CF JUMP JUMPDEST PUSH2 0x1378 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x541 CALLDATASIZE PUSH1 0x4 PUSH2 0x3289 JUMP JUMPDEST PUSH2 0x16D2 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x554 CALLDATASIZE PUSH1 0x4 PUSH2 0x333D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x59A CALLDATASIZE PUSH1 0x4 PUSH2 0x30BB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x5F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x30BB JUMP JUMPDEST PUSH2 0x17C4 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x609 CALLDATASIZE PUSH1 0x4 PUSH2 0x3226 JUMP JUMPDEST PUSH2 0x19A2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0x61D SWAP1 PUSH2 0x3376 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x649 SWAP1 PUSH2 0x3376 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x696 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x66B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x696 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 0x679 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6AD CALLER DUP5 DUP5 PUSH2 0x1A54 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6C2 PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x6D1 JUMPI PUSH1 0x0 SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x78F SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x764 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x788 SWAP2 SWAP1 PUSH2 0x33C4 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1AC2 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x2 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x7A8 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x7B4 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x845 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x882 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x93F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH2 0x97F DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1B19 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x9BE DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1B2C SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x39 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0xFF DUP12 AND OR SWAP1 SSTORE PUSH1 0x3C DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP16 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x3D DUP1 SLOAD DUP15 DUP5 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x39 DUP1 SLOAD SWAP2 DUP13 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0xA7B PUSH2 0x1B3F JUMP JUMPDEST PUSH1 0x3B DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xB19E051F8AF41150CCCCB3FC2C2D8D15F4A4CF434F32A559BA75FE73D6EEA20B DUP15 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 PUSH1 0x40 MLOAD PUSH2 0xB0E SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3426 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0xB45 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB9F DUP4 PUSH2 0x1C04 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0xBFD SWAP2 DUP8 SWAP2 SWAP1 PUSH2 0xBF8 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 PUSH2 0x34D0 JUMP JUMPDEST PUSH2 0x1A54 JUMP JUMPDEST PUSH2 0xC08 DUP6 DUP6 DUP4 PUSH2 0x1CAA JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1D PUSH2 0x1CC9 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 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 0x6AD SWAP2 DUP6 SWAP1 PUSH2 0xBF8 SWAP1 DUP7 SWAP1 PUSH2 0x34E7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xD0A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH2 0xD2F SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH2 0x1D02 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xDD7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH2 0xB8D SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE75 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE99 SWAP2 SWAP1 PUSH2 0x33C4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 PUSH2 0x1AC2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xF7C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP DUP2 PUSH2 0xF86 JUMPI POP POP JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH2 0xFCC SWAP1 PUSH32 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1DD5 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xB8D JUMP JUMPDEST PUSH1 0x60 PUSH1 0x38 DUP1 SLOAD PUSH2 0x61D SWAP1 PUSH2 0x3376 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 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 0x6AD SWAP2 DUP6 SWAP1 PUSH2 0xBF8 SWAP1 DUP7 SWAP1 PUSH2 0x34D0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x105B DUP4 PUSH2 0x1C04 JUMP JUMPDEST SWAP1 POP PUSH2 0x1068 CALLER DUP6 DUP4 PUSH2 0x1CAA JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1D PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1124 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH2 0x1131 DUP6 DUP6 DUP6 DUP6 PUSH2 0x1DD5 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11A7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11CB SWAP2 SWAP1 PUSH2 0x34FF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1238 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x125C SWAP2 SWAP1 PUSH2 0x351C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x12CA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3835000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1356 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH2 0xDD7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 DUP5 PUSH2 0x1D02 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x13FA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x146D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x149D PUSH2 0xC13 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP11 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x155E SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15E4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x168A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH2 0x1696 DUP3 PUSH1 0x1 PUSH2 0x34E7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x16C7 DUP10 DUP10 DUP10 PUSH2 0x1A54 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1776 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH2 0x1783 DUP5 DUP5 DUP5 DUP5 PUSH2 0x2016 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ADDRESS EQ PUSH2 0xDD7 JUMPI PUSH1 0x3D SLOAD PUSH2 0xDD7 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1D02 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1831 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1855 SWAP2 SWAP1 PUSH2 0x34FF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18C2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18E6 SWAP2 SWAP1 PUSH2 0x351C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1954 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP POP PUSH1 0x39 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1A46 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH2 0xFCC DUP4 DUP4 DUP4 PUSH1 0x0 PUSH2 0x2334 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1AF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD2F SWAP1 PUSH1 0x37 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2F45 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD2F SWAP1 PUSH1 0x38 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2F45 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x1B6A PUSH2 0x25B0 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1CA6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x83C JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0xFCC DUP4 DUP4 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH2 0x2334 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0x1CFA JUMPI POP PUSH1 0x3B SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xC1D PUSH2 0x1B3F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x1D65 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1D6F DUP5 PUSH2 0x25BA JUMP JUMPDEST PUSH2 0xDD7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x83C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1DE2 DUP5 DUP5 PUSH2 0x2686 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x1E51 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x1EAE SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x1EB8 DUP4 DUP8 PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x1EC2 SWAP2 SWAP1 PUSH2 0x34D0 JUMP JUMPDEST SWAP1 POP PUSH2 0x1ECD DUP6 PUSH2 0x1C04 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1F35 DUP8 PUSH2 0x1F30 DUP6 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x26C5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F41 DUP3 DUP9 PUSH2 0x34E7 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1FA3 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 AND SWAP2 SWAP1 DUP12 AND SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP ISZERO SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2022 DUP4 DUP4 PUSH2 0x2686 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x2091 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x20EE SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x20F8 DUP4 DUP7 PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x2102 SWAP2 SWAP1 PUSH2 0x34D0 JUMP JUMPDEST SWAP1 POP PUSH2 0x210D DUP5 PUSH2 0x1C04 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2175 DUP8 PUSH2 0x2170 DUP6 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x2841 JUMP JUMPDEST DUP5 DUP2 GT ISZERO PUSH2 0x2254 JUMPI PUSH1 0x0 PUSH2 0x2189 DUP7 DUP4 PUSH2 0x34D0 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x21EB SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 DUP2 SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x232B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2260 DUP3 DUP8 PUSH2 0x34D0 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x22C2 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP2 SWAP1 DUP11 AND SWAP1 PUSH32 0x4CF25BC1D991C17529C25213D3CC0CDA295EEAAD5F13F361969B12EA48015F90 SWAP1 PUSH1 0x60 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x23EF SWAP2 SWAP1 PUSH2 0x33C4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2435 DUP3 PUSH2 0xED2 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x247B DUP4 PUSH2 0xED2 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x2489 DUP9 DUP9 DUP9 DUP7 PUSH2 0x28A5 JUMP JUMPDEST DUP5 ISZERO PUSH2 0x2556 JUMPI PUSH1 0x40 MLOAD PUSH32 0xD5ED393300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP10 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP9 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xD5ED3933 SWAP1 PUSH1 0xC4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x253D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2551 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND SWAP1 DUP10 AND PUSH32 0x4BECCB90F994C31ACED7A23B5611020728A23D8EC5CDDD1A3E9D97B96FDA8666 PUSH2 0x259C DUP10 DUP8 PUSH2 0x2686 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP9 SWAP1 MSTORE ADD PUSH2 0x2321 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC1D PUSH2 0x60E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25FA JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x2639 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x2673 JUMPI PUSH2 0x2634 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x25C1 JUMP JUMPDEST PUSH2 0x2680 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x266A JUMPI PUSH2 0x266A PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x25C1 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x2680 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x26AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x26E4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x34E7 JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2729 DUP4 DUP3 PUSH2 0x353E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x283A JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2826 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x2860 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x34D0 JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2729 DUP4 DUP3 PUSH2 0x3572 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x2901 SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x290B DUP4 DUP6 PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x2915 SWAP2 SWAP1 PUSH2 0x34D0 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2957 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x29B2 SWAP1 DUP4 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x29BC DUP4 DUP8 PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x29C6 SWAP2 SWAP1 PUSH2 0x34D0 JUMP JUMPDEST SWAP1 POP PUSH2 0x29D1 DUP6 PUSH2 0x1C04 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2A30 DUP6 PUSH2 0x1C04 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2AA2 DUP9 DUP9 PUSH2 0x2A9D PUSH2 0x2A98 DUP11 DUP11 PUSH2 0x2686 JUMP JUMPDEST PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x2C9A JUMP JUMPDEST DUP3 ISZERO PUSH2 0x2B51 JUMPI PUSH1 0x40 MLOAD DUP4 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x2B8D JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST ISZERO PUSH2 0x2C3B JUMPI PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP9 PUSH1 0x40 MLOAD PUSH2 0x2321 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2CDC DUP3 DUP3 PUSH2 0x3572 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 AND OR SWAP1 SSTORE SWAP2 DUP7 AND DUP2 MSTORE KECCAK256 SLOAD AND PUSH2 0x2D50 DUP4 DUP3 PUSH2 0x353E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x2F3D JUMPI PUSH1 0x36 SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2E64 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x232B JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2F37 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x2F51 SWAP1 PUSH2 0x3376 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x2F73 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x2FB9 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x2F8C JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x2FB9 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x2FB9 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x2FB9 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2F9E JUMP JUMPDEST POP PUSH2 0x1CA6 SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1CA6 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2FC1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2FFB JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x2FDF JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x300D JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3053 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2FD5 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x307C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x308A DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x30A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x30AD DUP2 PUSH2 0x305A 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 0x30CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3053 DUP2 PUSH2 0x305A JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x308A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x30FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3113 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x312B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x100 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x3154 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x315D DUP13 PUSH2 0x307F JUMP JUMPDEST SWAP11 POP PUSH2 0x316B PUSH1 0x20 DUP14 ADD PUSH2 0x307F JUMP JUMPDEST SWAP10 POP PUSH2 0x3179 PUSH1 0x40 DUP14 ADD PUSH2 0x307F JUMP JUMPDEST SWAP9 POP PUSH2 0x3187 PUSH1 0x60 DUP14 ADD PUSH2 0x307F JUMP JUMPDEST SWAP8 POP PUSH2 0x3195 PUSH1 0x80 DUP14 ADD PUSH2 0x30D8 JUMP JUMPDEST SWAP7 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x31B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31C1 DUP15 PUSH1 0xA0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x30E9 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0xC0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x31D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31E7 DUP15 PUSH1 0xC0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x30E9 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP PUSH1 0xE0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x31FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x320E DUP14 PUSH1 0xE0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x30E9 JUMP JUMPDEST DUP2 SWAP4 POP DUP1 SWAP3 POP POP POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x323B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3246 DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x3256 DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x327A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x329F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x32AA DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x32BA DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x32EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x32F5 DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x3305 DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x3321 PUSH1 0x80 DUP10 ADD PUSH2 0x30D8 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3350 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x335B DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x336B DUP2 PUSH2 0x305A JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x338A JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x2680 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x33D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 ADD ADD MSTORE PUSH1 0x0 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP5 ADD ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND DUP4 MSTORE DUP1 DUP12 AND PUSH1 0x20 DUP5 ADD MSTORE POP PUSH1 0xFF DUP10 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xC0 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x3469 PUSH1 0xC0 DUP4 ADD DUP9 DUP11 PUSH2 0x33DD JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x347C DUP2 DUP8 DUP10 PUSH2 0x33DD JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x3491 DUP2 DUP6 DUP8 PUSH2 0x33DD JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x34E2 JUMPI PUSH2 0x34E2 PUSH2 0x34A1 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x34FA JUMPI PUSH2 0x34FA PUSH2 0x34A1 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3511 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x3053 DUP2 PUSH2 0x305A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x352E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3053 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x3569 JUMPI PUSH2 0x3569 PUSH2 0x34A1 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x359B JUMPI PUSH2 0x359B PUSH2 0x34A1 JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCB SWAP10 SIGNEXTEND 0x5C 0xB5 SWAP5 SHR CALLDATALOAD SHR 0xD9 ADDMOD 0xBF 0xE6 0xB9 0xDD SWAP5 0xD8 BASEFEE 0x2E 0xA9 SWAP9 XOR SMOD 0x22 EXTCODESIZE 0xC1 DUP9 0xAD 0xE4 0xD2 0x2D 0xE2 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"176:164:62:-:0;;;928:1:71;886:43;;210:39:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;241:4;1858::97;988:195:105;;;;;;;;;;;;;-1:-1:-1;;;988:195:105;;;;;;;;;;;;;;;;-1:-1:-1;;;988:195:105;;;1894:1:97;1116:4:105;1122;1128:6;1136:8;817:4:104;823;829:6;837:8;2780:4:103;-1:-1:-1;;;;;2780:23:103;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2759:46:103;;;2811:12;;;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;2829:16:103;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;2851:9:103;:20;;-1:-1:-1;;2851:20:103;;;;;;;;;;;;-1:-1:-1;;;;;;;2877:11:103;;;-1:-1:-1;;630:13:102;619:24;;-1:-1:-1;176:164:62;;-1:-1:-1;;;;;;;176:164:62;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;176:164:62;;;-1:-1:-1;176:164:62;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:138:201;-1:-1:-1;;;;;96:31:201;;86:42;;76:70;;142:1;139;132:12;76:70;14:138;:::o;157:272::-;241:6;294:2;282:9;273:7;269:23;265:32;262:52;;;310:1;307;300:12;262:52;342:9;336:16;361:38;393:5;361:38;:::i;:::-;418:5;157:272;-1:-1:-1;;;157:272:201:o;728:380::-;807:1;803:12;;;;850;;;871:61;;925:4;917:6;913:17;903:27;;871:61;978:2;970:6;967:14;947:18;944:38;941:161;;;1024:10;1019:3;1015:20;1012:1;1005:31;1059:4;1056:1;1049:15;1087:4;1084:1;1077:15;941:161;;728:380;;;:::o;:::-;176:164:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ATOKEN_REVISION_25390":{"entryPoint":null,"id":25390,"parameterSlots":0,"returnSlots":0},"@DOMAIN_SEPARATOR_25926":{"entryPoint":3091,"id":25926,"parameterSlots":0,"returnSlots":1},"@DOMAIN_SEPARATOR_27772":{"entryPoint":7369,"id":27772,"parameterSlots":0,"returnSlots":1},"@EIP712_REVISION_27731":{"entryPoint":null,"id":27731,"parameterSlots":0,"returnSlots":0},"@PERMIT_TYPEHASH_25387":{"entryPoint":null,"id":25387,"parameterSlots":0,"returnSlots":0},"@POOL_27929":{"entryPoint":null,"id":27929,"parameterSlots":0,"returnSlots":0},"@RESERVE_TREASURY_ADDRESS_25677":{"entryPoint":null,"id":25677,"parameterSlots":0,"returnSlots":1},"@UNDERLYING_ASSET_ADDRESS_25687":{"entryPoint":null,"id":25687,"parameterSlots":0,"returnSlots":1},"@_EIP712BaseId_25954":{"entryPoint":9648,"id":25954,"parameterSlots":0,"returnSlots":1},"@_approve_28315":{"entryPoint":6740,"id":28315,"parameterSlots":3,"returnSlots":0},"@_burnScaled_28821":{"entryPoint":8214,"id":28821,"parameterSlots":4,"returnSlots":0},"@_burn_28498":{"entryPoint":10305,"id":28498,"parameterSlots":2,"returnSlots":0},"@_calculateDomainSeparator_27815":{"entryPoint":6975,"id":27815,"parameterSlots":0,"returnSlots":1},"@_mintScaled_28703":{"entryPoint":7637,"id":28703,"parameterSlots":4,"returnSlots":1},"@_mint_28439":{"entryPoint":9925,"id":28439,"parameterSlots":2,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_setDecimals_28348":{"entryPoint":null,"id":28348,"parameterSlots":1,"returnSlots":0},"@_setName_28326":{"entryPoint":6937,"id":28326,"parameterSlots":1,"returnSlots":0},"@_setSymbol_28337":{"entryPoint":6956,"id":28337,"parameterSlots":1,"returnSlots":0},"@_transfer_25893":{"entryPoint":9012,"id":25893,"parameterSlots":4,"returnSlots":0},"@_transfer_25912":{"entryPoint":7338,"id":25912,"parameterSlots":3,"returnSlots":0},"@_transfer_28290":{"entryPoint":11418,"id":28290,"parameterSlots":3,"returnSlots":0},"@_transfer_28965":{"entryPoint":10405,"id":28965,"parameterSlots":4,"returnSlots":0},"@allowance_28089":{"entryPoint":null,"id":28089,"parameterSlots":2,"returnSlots":1},"@approve_28110":{"entryPoint":1696,"id":28110,"parameterSlots":2,"returnSlots":1},"@balanceOf_25636":{"entryPoint":3549,"id":25636,"parameterSlots":1,"returnSlots":1},"@balanceOf_28020":{"entryPoint":null,"id":28020,"parameterSlots":1,"returnSlots":1},"@burn_25564":{"entryPoint":5842,"id":25564,"parameterSlots":4,"returnSlots":0},"@decimals_27995":{"entryPoint":null,"id":27995,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_28206":{"entryPoint":4107,"id":28206,"parameterSlots":2,"returnSlots":1},"@getIncentivesController_28030":{"entryPoint":null,"id":28030,"parameterSlots":0,"returnSlots":1},"@getLastTransferResult_117":{"entryPoint":9658,"id":117,"parameterSlots":1,"returnSlots":1},"@getPreviousIndex_28607":{"entryPoint":null,"id":28607,"parameterSlots":1,"returnSlots":1},"@getRevision_8856":{"entryPoint":null,"id":8856,"parameterSlots":0,"returnSlots":1},"@getScaledUserBalanceAndSupply_28580":{"entryPoint":null,"id":28580,"parameterSlots":1,"returnSlots":2},"@handleRepayment_25721":{"entryPoint":3379,"id":25721,"parameterSlots":3,"returnSlots":0},"@increaseAllowance_28179":{"entryPoint":3106,"id":28179,"parameterSlots":2,"returnSlots":1},"@initialize_25500":{"entryPoint":1941,"id":25500,"parameterSlots":11,"returnSlots":0},"@isConstructor_10568":{"entryPoint":null,"id":10568,"parameterSlots":0,"returnSlots":1},"@mintToTreasury_25592":{"entryPoint":3800,"id":25592,"parameterSlots":2,"returnSlots":0},"@mint_25525":{"entryPoint":4221,"id":25525,"parameterSlots":4,"returnSlots":1},"@name_27975":{"entryPoint":1550,"id":27975,"parameterSlots":0,"returnSlots":1},"@nonces_25943":{"entryPoint":4049,"id":25943,"parameterSlots":1,"returnSlots":1},"@nonces_27785":{"entryPoint":null,"id":27785,"parameterSlots":1,"returnSlots":1},"@permit_25816":{"entryPoint":4984,"id":25816,"parameterSlots":7,"returnSlots":0},"@rayDiv_21198":{"entryPoint":9862,"id":21198,"parameterSlots":2,"returnSlots":1},"@rayMul_21186":{"entryPoint":6850,"id":21186,"parameterSlots":2,"returnSlots":1},"@rescueTokens_25984":{"entryPoint":4410,"id":25984,"parameterSlots":3,"returnSlots":0},"@safeTransfer_78":{"entryPoint":7426,"id":78,"parameterSlots":3,"returnSlots":0},"@scaledBalanceOf_28559":{"entryPoint":2900,"id":28559,"parameterSlots":1,"returnSlots":1},"@scaledTotalSupply_28592":{"entryPoint":4210,"id":28592,"parameterSlots":0,"returnSlots":1},"@setIncentivesController_28044":{"entryPoint":6084,"id":28044,"parameterSlots":1,"returnSlots":0},"@symbol_27985":{"entryPoint":4092,"id":27985,"parameterSlots":0,"returnSlots":1},"@toUint128_1626":{"entryPoint":7172,"id":1626,"parameterSlots":1,"returnSlots":1},"@totalSupply_25667":{"entryPoint":1718,"id":25667,"parameterSlots":0,"returnSlots":1},"@totalSupply_28005":{"entryPoint":null,"id":28005,"parameterSlots":0,"returnSlots":1},"@transferFrom_28152":{"entryPoint":2963,"id":28152,"parameterSlots":3,"returnSlots":1},"@transferOnLiquidation_25613":{"entryPoint":6562,"id":25613,"parameterSlots":3,"returnSlots":0},"@transferUnderlyingTo_25707":{"entryPoint":3174,"id":25707,"parameterSlots":2,"returnSlots":0},"@transfer_28071":{"entryPoint":4175,"id":28071,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":12415,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_string_calldata":{"entryPoint":12521,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":12475,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":13567,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":13117,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":12838,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256":{"entryPoint":12937,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":13007,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":12431,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":13596,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IAaveIncentivesController_$3875":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$4860t_addresst_addresst_contract$_IAaveIncentivesController_$3875t_uint8t_string_calldata_ptrt_string_calldata_ptrt_bytes_calldata_ptr":{"entryPoint":12594,"id":null,"parameterSlots":2,"returnSlots":11},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":13252,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256":{"entryPoint":12903,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_uint8":{"entryPoint":12504,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_string":{"entryPoint":12245,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string_calldata":{"entryPoint":13277,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13350,"id":null,"parameterSlots":10,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IAaveIncentivesController_$3875__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":12352,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":13630,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":13543,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint128":{"entryPoint":13682,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":13520,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":13174,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":13473,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":12378,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:16120:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"64:481:201","statements":[{"nodeType":"YulVariableDeclaration","src":"74:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"94:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"88:5:201"},"nodeType":"YulFunctionCall","src":"88:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"78:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"116:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"121:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"109:6:201"},"nodeType":"YulFunctionCall","src":"109:19:201"},"nodeType":"YulExpressionStatement","src":"109:19:201"},{"nodeType":"YulVariableDeclaration","src":"137:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"146:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"141:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"208:110:201","statements":[{"nodeType":"YulVariableDeclaration","src":"222:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"232:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"226:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"264:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"269:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"260:3:201"},"nodeType":"YulFunctionCall","src":"260:11:201"},{"name":"_1","nodeType":"YulIdentifier","src":"273:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"256:3:201"},"nodeType":"YulFunctionCall","src":"256:20:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"292:5:201"},{"name":"i","nodeType":"YulIdentifier","src":"299:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"288:3:201"},"nodeType":"YulFunctionCall","src":"288:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"303:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"284:3:201"},"nodeType":"YulFunctionCall","src":"284:22:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"278:5:201"},"nodeType":"YulFunctionCall","src":"278:29:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"249:6:201"},"nodeType":"YulFunctionCall","src":"249:59:201"},"nodeType":"YulExpressionStatement","src":"249:59:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"167:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"170:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"164:2:201"},"nodeType":"YulFunctionCall","src":"164:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"178:21:201","statements":[{"nodeType":"YulAssignment","src":"180:17:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"189:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"192:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"185:3:201"},"nodeType":"YulFunctionCall","src":"185:12:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"180:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"160:3:201","statements":[]},"src":"156:162:201"},{"body":{"nodeType":"YulBlock","src":"352:62:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"381:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"386:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"377:3:201"},"nodeType":"YulFunctionCall","src":"377:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"395:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"373:3:201"},"nodeType":"YulFunctionCall","src":"373:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"402:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"366:6:201"},"nodeType":"YulFunctionCall","src":"366:38:201"},"nodeType":"YulExpressionStatement","src":"366:38:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"333:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"336:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"330:2:201"},"nodeType":"YulFunctionCall","src":"330:13:201"},"nodeType":"YulIf","src":"327:87:201"},{"nodeType":"YulAssignment","src":"423:116:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"438:3:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"451:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"459:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"447:3:201"},"nodeType":"YulFunctionCall","src":"447:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"464:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"443:3:201"},"nodeType":"YulFunctionCall","src":"443:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"434:3:201"},"nodeType":"YulFunctionCall","src":"434:98:201"},{"kind":"number","nodeType":"YulLiteral","src":"534:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"430:3:201"},"nodeType":"YulFunctionCall","src":"430:109:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"423:3:201"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"41:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"48:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"56:3:201","type":""}],"src":"14:531:201"},{"body":{"nodeType":"YulBlock","src":"671:99:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"688:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"699:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"681:6:201"},"nodeType":"YulFunctionCall","src":"681:21:201"},"nodeType":"YulExpressionStatement","src":"681:21:201"},{"nodeType":"YulAssignment","src":"711:53:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"737:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"749:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"760:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"745:3:201"},"nodeType":"YulFunctionCall","src":"745:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"719:17:201"},"nodeType":"YulFunctionCall","src":"719:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"711:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"640:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"651:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"662:4:201","type":""}],"src":"550:220:201"},{"body":{"nodeType":"YulBlock","src":"820:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"907:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"916:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"919:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"909:6:201"},"nodeType":"YulFunctionCall","src":"909:12:201"},"nodeType":"YulExpressionStatement","src":"909:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"843:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"854:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"861:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:201"},"nodeType":"YulFunctionCall","src":"850:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"840:2:201"},"nodeType":"YulFunctionCall","src":"840:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"833:6:201"},"nodeType":"YulFunctionCall","src":"833:73:201"},"nodeType":"YulIf","src":"830:93:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"809:5:201","type":""}],"src":"775:154:201"},{"body":{"nodeType":"YulBlock","src":"983:85:201","statements":[{"nodeType":"YulAssignment","src":"993:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1015:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1002:12:201"},"nodeType":"YulFunctionCall","src":"1002:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"993:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1056:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1031:24:201"},"nodeType":"YulFunctionCall","src":"1031:31:201"},"nodeType":"YulExpressionStatement","src":"1031:31:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"962:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"973:5:201","type":""}],"src":"934:134:201"},{"body":{"nodeType":"YulBlock","src":"1160:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"1206:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1215:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1218:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1208:6:201"},"nodeType":"YulFunctionCall","src":"1208:12:201"},"nodeType":"YulExpressionStatement","src":"1208:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1181:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1190:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1177:3:201"},"nodeType":"YulFunctionCall","src":"1177:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1202:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1173:3:201"},"nodeType":"YulFunctionCall","src":"1173:32:201"},"nodeType":"YulIf","src":"1170:52:201"},{"nodeType":"YulVariableDeclaration","src":"1231:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1257:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1244:12:201"},"nodeType":"YulFunctionCall","src":"1244:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1235:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1301:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1276:24:201"},"nodeType":"YulFunctionCall","src":"1276:31:201"},"nodeType":"YulExpressionStatement","src":"1276:31:201"},{"nodeType":"YulAssignment","src":"1316:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1326:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1316:6:201"}]},{"nodeType":"YulAssignment","src":"1340:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1367:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1378:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1363:3:201"},"nodeType":"YulFunctionCall","src":"1363:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1350:12:201"},"nodeType":"YulFunctionCall","src":"1350:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1340:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1118:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1129:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1141:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1149:6:201","type":""}],"src":"1073:315:201"},{"body":{"nodeType":"YulBlock","src":"1488:92:201","statements":[{"nodeType":"YulAssignment","src":"1498:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1510:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1521:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1506:3:201"},"nodeType":"YulFunctionCall","src":"1506:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1498:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1540:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1565:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1558:6:201"},"nodeType":"YulFunctionCall","src":"1558:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1551:6:201"},"nodeType":"YulFunctionCall","src":"1551:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1533:6:201"},"nodeType":"YulFunctionCall","src":"1533:41:201"},"nodeType":"YulExpressionStatement","src":"1533:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1457:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1468:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1479:4:201","type":""}],"src":"1393:187:201"},{"body":{"nodeType":"YulBlock","src":"1655:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"1701:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1710:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1713:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1703:6:201"},"nodeType":"YulFunctionCall","src":"1703:12:201"},"nodeType":"YulExpressionStatement","src":"1703:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1676:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1685:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1672:3:201"},"nodeType":"YulFunctionCall","src":"1672:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1697:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1668:3:201"},"nodeType":"YulFunctionCall","src":"1668:32:201"},"nodeType":"YulIf","src":"1665:52:201"},{"nodeType":"YulVariableDeclaration","src":"1726:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1752:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1739:12:201"},"nodeType":"YulFunctionCall","src":"1739:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1730:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1796:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1771:24:201"},"nodeType":"YulFunctionCall","src":"1771:31:201"},"nodeType":"YulExpressionStatement","src":"1771:31:201"},{"nodeType":"YulAssignment","src":"1811:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1821:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1811:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1621:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1632:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1644:6:201","type":""}],"src":"1585:247:201"},{"body":{"nodeType":"YulBlock","src":"1966:119:201","statements":[{"nodeType":"YulAssignment","src":"1976:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1988:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1999:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1984:3:201"},"nodeType":"YulFunctionCall","src":"1984:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1976:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2018:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"2029:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2011:6:201"},"nodeType":"YulFunctionCall","src":"2011:25:201"},"nodeType":"YulExpressionStatement","src":"2011:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2056:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2067:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2052:3:201"},"nodeType":"YulFunctionCall","src":"2052:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"2072:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2045:6:201"},"nodeType":"YulFunctionCall","src":"2045:34:201"},"nodeType":"YulExpressionStatement","src":"2045:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1927:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1938:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1946:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1957:4:201","type":""}],"src":"1837:248:201"},{"body":{"nodeType":"YulBlock","src":"2191:76:201","statements":[{"nodeType":"YulAssignment","src":"2201:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2213:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2224:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2209:3:201"},"nodeType":"YulFunctionCall","src":"2209:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2201:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2243:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"2254:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2236:6:201"},"nodeType":"YulFunctionCall","src":"2236:25:201"},"nodeType":"YulExpressionStatement","src":"2236:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2160:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2171:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2182:4:201","type":""}],"src":"2090:177:201"},{"body":{"nodeType":"YulBlock","src":"2319:109:201","statements":[{"nodeType":"YulAssignment","src":"2329:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2351:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2338:12:201"},"nodeType":"YulFunctionCall","src":"2338:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"2329:5:201"}]},{"body":{"nodeType":"YulBlock","src":"2406:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2415:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2418:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2408:6:201"},"nodeType":"YulFunctionCall","src":"2408:12:201"},"nodeType":"YulExpressionStatement","src":"2408:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2380:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2391:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2398:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2387:3:201"},"nodeType":"YulFunctionCall","src":"2387:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2377:2:201"},"nodeType":"YulFunctionCall","src":"2377:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2370:6:201"},"nodeType":"YulFunctionCall","src":"2370:35:201"},"nodeType":"YulIf","src":"2367:55:201"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2298:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"2309:5:201","type":""}],"src":"2272:156:201"},{"body":{"nodeType":"YulBlock","src":"2506:275:201","statements":[{"body":{"nodeType":"YulBlock","src":"2555:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2564:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2567:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2557:6:201"},"nodeType":"YulFunctionCall","src":"2557:12:201"},"nodeType":"YulExpressionStatement","src":"2557:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2534:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2542:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2530:3:201"},"nodeType":"YulFunctionCall","src":"2530:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"2549:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2526:3:201"},"nodeType":"YulFunctionCall","src":"2526:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2519:6:201"},"nodeType":"YulFunctionCall","src":"2519:35:201"},"nodeType":"YulIf","src":"2516:55:201"},{"nodeType":"YulAssignment","src":"2580:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2603:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2590:12:201"},"nodeType":"YulFunctionCall","src":"2590:20:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2580:6:201"}]},{"body":{"nodeType":"YulBlock","src":"2653:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2662:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2665:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2655:6:201"},"nodeType":"YulFunctionCall","src":"2655:12:201"},"nodeType":"YulExpressionStatement","src":"2655:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2625:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2633:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2622:2:201"},"nodeType":"YulFunctionCall","src":"2622:30:201"},"nodeType":"YulIf","src":"2619:50:201"},{"nodeType":"YulAssignment","src":"2678:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2694:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2702:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2690:3:201"},"nodeType":"YulFunctionCall","src":"2690:17:201"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"2678:8:201"}]},{"body":{"nodeType":"YulBlock","src":"2759:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2768:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2771:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2761:6:201"},"nodeType":"YulFunctionCall","src":"2761:12:201"},"nodeType":"YulExpressionStatement","src":"2761:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2730:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"2738:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2726:3:201"},"nodeType":"YulFunctionCall","src":"2726:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"2747:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2722:3:201"},"nodeType":"YulFunctionCall","src":"2722:30:201"},{"name":"end","nodeType":"YulIdentifier","src":"2754:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2719:2:201"},"nodeType":"YulFunctionCall","src":"2719:39:201"},"nodeType":"YulIf","src":"2716:59:201"}]},"name":"abi_decode_string_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2469:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"2477:3:201","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"2485:8:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"2495:6:201","type":""}],"src":"2433:348:201"},{"body":{"nodeType":"YulBlock","src":"3081:1119:201","statements":[{"body":{"nodeType":"YulBlock","src":"3128:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3137:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3140:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3130:6:201"},"nodeType":"YulFunctionCall","src":"3130:12:201"},"nodeType":"YulExpressionStatement","src":"3130:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3102:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3111:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3098:3:201"},"nodeType":"YulFunctionCall","src":"3098:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3123:3:201","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3094:3:201"},"nodeType":"YulFunctionCall","src":"3094:33:201"},"nodeType":"YulIf","src":"3091:53:201"},{"nodeType":"YulAssignment","src":"3153:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3182:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3163:18:201"},"nodeType":"YulFunctionCall","src":"3163:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3153:6:201"}]},{"nodeType":"YulAssignment","src":"3201:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3234:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3245:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3230:3:201"},"nodeType":"YulFunctionCall","src":"3230:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3211:18:201"},"nodeType":"YulFunctionCall","src":"3211:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3201:6:201"}]},{"nodeType":"YulAssignment","src":"3258:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3291:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3302:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3287:3:201"},"nodeType":"YulFunctionCall","src":"3287:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3268:18:201"},"nodeType":"YulFunctionCall","src":"3268:38:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3258:6:201"}]},{"nodeType":"YulAssignment","src":"3315:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3348:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3359:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3344:3:201"},"nodeType":"YulFunctionCall","src":"3344:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3325:18:201"},"nodeType":"YulFunctionCall","src":"3325:38:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3315:6:201"}]},{"nodeType":"YulAssignment","src":"3372:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3403:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3414:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3399:3:201"},"nodeType":"YulFunctionCall","src":"3399:19:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"3382:16:201"},"nodeType":"YulFunctionCall","src":"3382:37:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3372:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3428:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3438:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3432:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3510:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3519:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3522:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3512:6:201"},"nodeType":"YulFunctionCall","src":"3512:12:201"},"nodeType":"YulExpressionStatement","src":"3512:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3488:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3499:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3484:3:201"},"nodeType":"YulFunctionCall","src":"3484:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3471:12:201"},"nodeType":"YulFunctionCall","src":"3471:33:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3506:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3468:2:201"},"nodeType":"YulFunctionCall","src":"3468:41:201"},"nodeType":"YulIf","src":"3465:61:201"},{"nodeType":"YulVariableDeclaration","src":"3535:112:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3592:9:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3620:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3631:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3616:3:201"},"nodeType":"YulFunctionCall","src":"3616:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3603:12:201"},"nodeType":"YulFunctionCall","src":"3603:33:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3588:3:201"},"nodeType":"YulFunctionCall","src":"3588:49:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3639:7:201"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"3561:26:201"},"nodeType":"YulFunctionCall","src":"3561:86:201"},"variables":[{"name":"value5_1","nodeType":"YulTypedName","src":"3539:8:201","type":""},{"name":"value6_1","nodeType":"YulTypedName","src":"3549:8:201","type":""}]},{"nodeType":"YulAssignment","src":"3656:18:201","value":{"name":"value5_1","nodeType":"YulIdentifier","src":"3666:8:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"3656:6:201"}]},{"nodeType":"YulAssignment","src":"3683:18:201","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"3693:8:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"3683:6:201"}]},{"body":{"nodeType":"YulBlock","src":"3755:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3764:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3767:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3757:6:201"},"nodeType":"YulFunctionCall","src":"3757:12:201"},"nodeType":"YulExpressionStatement","src":"3757:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3733:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3744:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3729:3:201"},"nodeType":"YulFunctionCall","src":"3729:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3716:12:201"},"nodeType":"YulFunctionCall","src":"3716:33:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3751:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3713:2:201"},"nodeType":"YulFunctionCall","src":"3713:41:201"},"nodeType":"YulIf","src":"3710:61:201"},{"nodeType":"YulVariableDeclaration","src":"3780:112:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3837:9:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3865:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3876:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3861:3:201"},"nodeType":"YulFunctionCall","src":"3861:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3848:12:201"},"nodeType":"YulFunctionCall","src":"3848:33:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3833:3:201"},"nodeType":"YulFunctionCall","src":"3833:49:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3884:7:201"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"3806:26:201"},"nodeType":"YulFunctionCall","src":"3806:86:201"},"variables":[{"name":"value7_1","nodeType":"YulTypedName","src":"3784:8:201","type":""},{"name":"value8_1","nodeType":"YulTypedName","src":"3794:8:201","type":""}]},{"nodeType":"YulAssignment","src":"3901:18:201","value":{"name":"value7_1","nodeType":"YulIdentifier","src":"3911:8:201"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"3901:6:201"}]},{"nodeType":"YulAssignment","src":"3928:18:201","value":{"name":"value8_1","nodeType":"YulIdentifier","src":"3938:8:201"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"3928:6:201"}]},{"body":{"nodeType":"YulBlock","src":"4000:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4009:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4012:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4002:6:201"},"nodeType":"YulFunctionCall","src":"4002:12:201"},"nodeType":"YulExpressionStatement","src":"4002:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3978:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3989:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3974:3:201"},"nodeType":"YulFunctionCall","src":"3974:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3961:12:201"},"nodeType":"YulFunctionCall","src":"3961:33:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3996:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3958:2:201"},"nodeType":"YulFunctionCall","src":"3958:41:201"},"nodeType":"YulIf","src":"3955:61:201"},{"nodeType":"YulVariableDeclaration","src":"4025:113:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4083:9:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4111:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4122:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4107:3:201"},"nodeType":"YulFunctionCall","src":"4107:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4094:12:201"},"nodeType":"YulFunctionCall","src":"4094:33:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4079:3:201"},"nodeType":"YulFunctionCall","src":"4079:49:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4130:7:201"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"4052:26:201"},"nodeType":"YulFunctionCall","src":"4052:86:201"},"variables":[{"name":"value9_1","nodeType":"YulTypedName","src":"4029:8:201","type":""},{"name":"value10_1","nodeType":"YulTypedName","src":"4039:9:201","type":""}]},{"nodeType":"YulAssignment","src":"4147:18:201","value":{"name":"value9_1","nodeType":"YulIdentifier","src":"4157:8:201"},"variableNames":[{"name":"value9","nodeType":"YulIdentifier","src":"4147:6:201"}]},{"nodeType":"YulAssignment","src":"4174:20:201","value":{"name":"value10_1","nodeType":"YulIdentifier","src":"4185:9:201"},"variableNames":[{"name":"value10","nodeType":"YulIdentifier","src":"4174:7:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$4860t_addresst_addresst_contract$_IAaveIncentivesController_$3875t_uint8t_string_calldata_ptrt_string_calldata_ptrt_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2966:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2977:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2989:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2997:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3005:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3013:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3021:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"3029:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"3037:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"3045:6:201","type":""},{"name":"value8","nodeType":"YulTypedName","src":"3053:6:201","type":""},{"name":"value9","nodeType":"YulTypedName","src":"3061:6:201","type":""},{"name":"value10","nodeType":"YulTypedName","src":"3069:7:201","type":""}],"src":"2786:1414:201"},{"body":{"nodeType":"YulBlock","src":"4309:352:201","statements":[{"body":{"nodeType":"YulBlock","src":"4355:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4364:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4367:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4357:6:201"},"nodeType":"YulFunctionCall","src":"4357:12:201"},"nodeType":"YulExpressionStatement","src":"4357:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4330:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4339:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4326:3:201"},"nodeType":"YulFunctionCall","src":"4326:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4351:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4322:3:201"},"nodeType":"YulFunctionCall","src":"4322:32:201"},"nodeType":"YulIf","src":"4319:52:201"},{"nodeType":"YulVariableDeclaration","src":"4380:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4406:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4393:12:201"},"nodeType":"YulFunctionCall","src":"4393:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4384:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4450:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4425:24:201"},"nodeType":"YulFunctionCall","src":"4425:31:201"},"nodeType":"YulExpressionStatement","src":"4425:31:201"},{"nodeType":"YulAssignment","src":"4465:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"4475:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4465:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"4489:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4521:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4532:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4517:3:201"},"nodeType":"YulFunctionCall","src":"4517:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4504:12:201"},"nodeType":"YulFunctionCall","src":"4504:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"4493:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"4570:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4545:24:201"},"nodeType":"YulFunctionCall","src":"4545:33:201"},"nodeType":"YulExpressionStatement","src":"4545:33:201"},{"nodeType":"YulAssignment","src":"4587:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"4597:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4587:6:201"}]},{"nodeType":"YulAssignment","src":"4613:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4640:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4651:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4636:3:201"},"nodeType":"YulFunctionCall","src":"4636:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4623:12:201"},"nodeType":"YulFunctionCall","src":"4623:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4613:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4259:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4270:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4282:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4290:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4298:6:201","type":""}],"src":"4205:456:201"},{"body":{"nodeType":"YulBlock","src":"4767:76:201","statements":[{"nodeType":"YulAssignment","src":"4777:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4789:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4800:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4785:3:201"},"nodeType":"YulFunctionCall","src":"4785:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4777:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4819:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"4830:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4812:6:201"},"nodeType":"YulFunctionCall","src":"4812:25:201"},"nodeType":"YulExpressionStatement","src":"4812:25:201"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4736:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4747:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4758:4:201","type":""}],"src":"4666:177:201"},{"body":{"nodeType":"YulBlock","src":"4945:87:201","statements":[{"nodeType":"YulAssignment","src":"4955:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4967:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4978:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4963:3:201"},"nodeType":"YulFunctionCall","src":"4963:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4955:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4997:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5012:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5020:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5008:3:201"},"nodeType":"YulFunctionCall","src":"5008:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4990:6:201"},"nodeType":"YulFunctionCall","src":"4990:36:201"},"nodeType":"YulExpressionStatement","src":"4990:36:201"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4914:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4925:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4936:4:201","type":""}],"src":"4848:184:201"},{"body":{"nodeType":"YulBlock","src":"5152:125:201","statements":[{"nodeType":"YulAssignment","src":"5162:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5174:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5185:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5170:3:201"},"nodeType":"YulFunctionCall","src":"5170:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5162:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5204:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5219:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5227:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5215:3:201"},"nodeType":"YulFunctionCall","src":"5215:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5197:6:201"},"nodeType":"YulFunctionCall","src":"5197:74:201"},"nodeType":"YulExpressionStatement","src":"5197:74:201"}]},"name":"abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5121:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5132:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5143:4:201","type":""}],"src":"5037:240:201"},{"body":{"nodeType":"YulBlock","src":"5417:125:201","statements":[{"nodeType":"YulAssignment","src":"5427:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5439:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5450:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5435:3:201"},"nodeType":"YulFunctionCall","src":"5435:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5427:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5469:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5484:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5492:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5480:3:201"},"nodeType":"YulFunctionCall","src":"5480:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5462:6:201"},"nodeType":"YulFunctionCall","src":"5462:74:201"},"nodeType":"YulExpressionStatement","src":"5462:74:201"}]},"name":"abi_encode_tuple_t_contract$_IAaveIncentivesController_$3875__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5386:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5397:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5408:4:201","type":""}],"src":"5282:260:201"},{"body":{"nodeType":"YulBlock","src":"5666:99:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5683:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5694:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5676:6:201"},"nodeType":"YulFunctionCall","src":"5676:21:201"},"nodeType":"YulExpressionStatement","src":"5676:21:201"},{"nodeType":"YulAssignment","src":"5706:53:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5732:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5744:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5755:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5740:3:201"},"nodeType":"YulFunctionCall","src":"5740:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"5714:17:201"},"nodeType":"YulFunctionCall","src":"5714:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5706:4:201"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5635:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5646:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5657:4:201","type":""}],"src":"5547:218:201"},{"body":{"nodeType":"YulBlock","src":"5857:161:201","statements":[{"body":{"nodeType":"YulBlock","src":"5903:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5912:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5915:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5905:6:201"},"nodeType":"YulFunctionCall","src":"5905:12:201"},"nodeType":"YulExpressionStatement","src":"5905:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5878:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"5887:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5874:3:201"},"nodeType":"YulFunctionCall","src":"5874:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"5899:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5870:3:201"},"nodeType":"YulFunctionCall","src":"5870:32:201"},"nodeType":"YulIf","src":"5867:52:201"},{"nodeType":"YulAssignment","src":"5928:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5951:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5938:12:201"},"nodeType":"YulFunctionCall","src":"5938:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5928:6:201"}]},{"nodeType":"YulAssignment","src":"5970:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5997:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6008:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5993:3:201"},"nodeType":"YulFunctionCall","src":"5993:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5980:12:201"},"nodeType":"YulFunctionCall","src":"5980:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5970:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5815:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5826:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5838:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5846:6:201","type":""}],"src":"5770:248:201"},{"body":{"nodeType":"YulBlock","src":"6124:125:201","statements":[{"nodeType":"YulAssignment","src":"6134:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6146:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6157:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6142:3:201"},"nodeType":"YulFunctionCall","src":"6142:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6134:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6176:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6191:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"6199:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6187:3:201"},"nodeType":"YulFunctionCall","src":"6187:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6169:6:201"},"nodeType":"YulFunctionCall","src":"6169:74:201"},"nodeType":"YulExpressionStatement","src":"6169:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6093:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6104:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6115:4:201","type":""}],"src":"6023:226:201"},{"body":{"nodeType":"YulBlock","src":"6375:404:201","statements":[{"body":{"nodeType":"YulBlock","src":"6422:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6431:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6434:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6424:6:201"},"nodeType":"YulFunctionCall","src":"6424:12:201"},"nodeType":"YulExpressionStatement","src":"6424:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6396:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6405:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6392:3:201"},"nodeType":"YulFunctionCall","src":"6392:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"6417:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6388:3:201"},"nodeType":"YulFunctionCall","src":"6388:33:201"},"nodeType":"YulIf","src":"6385:53:201"},{"nodeType":"YulVariableDeclaration","src":"6447:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6473:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6460:12:201"},"nodeType":"YulFunctionCall","src":"6460:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6451:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6517:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6492:24:201"},"nodeType":"YulFunctionCall","src":"6492:31:201"},"nodeType":"YulExpressionStatement","src":"6492:31:201"},{"nodeType":"YulAssignment","src":"6532:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"6542:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6532:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"6556:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6588:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6599:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6584:3:201"},"nodeType":"YulFunctionCall","src":"6584:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6571:12:201"},"nodeType":"YulFunctionCall","src":"6571:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"6560:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"6637:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6612:24:201"},"nodeType":"YulFunctionCall","src":"6612:33:201"},"nodeType":"YulExpressionStatement","src":"6612:33:201"},{"nodeType":"YulAssignment","src":"6654:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"6664:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6654:6:201"}]},{"nodeType":"YulAssignment","src":"6680:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6707:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6718:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6703:3:201"},"nodeType":"YulFunctionCall","src":"6703:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6690:12:201"},"nodeType":"YulFunctionCall","src":"6690:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6680:6:201"}]},{"nodeType":"YulAssignment","src":"6731:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6758:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6769:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6754:3:201"},"nodeType":"YulFunctionCall","src":"6754:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6741:12:201"},"nodeType":"YulFunctionCall","src":"6741:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"6731:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6317:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6328:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6340:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6348:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6356:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6364:6:201","type":""}],"src":"6254:525:201"},{"body":{"nodeType":"YulBlock","src":"6954:564:201","statements":[{"body":{"nodeType":"YulBlock","src":"7001:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7010:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7013:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7003:6:201"},"nodeType":"YulFunctionCall","src":"7003:12:201"},"nodeType":"YulExpressionStatement","src":"7003:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6975:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6984:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6971:3:201"},"nodeType":"YulFunctionCall","src":"6971:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"6996:3:201","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6967:3:201"},"nodeType":"YulFunctionCall","src":"6967:33:201"},"nodeType":"YulIf","src":"6964:53:201"},{"nodeType":"YulVariableDeclaration","src":"7026:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7052:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7039:12:201"},"nodeType":"YulFunctionCall","src":"7039:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7030:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7096:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7071:24:201"},"nodeType":"YulFunctionCall","src":"7071:31:201"},"nodeType":"YulExpressionStatement","src":"7071:31:201"},{"nodeType":"YulAssignment","src":"7111:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"7121:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7111:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"7135:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7167:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7178:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7163:3:201"},"nodeType":"YulFunctionCall","src":"7163:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7150:12:201"},"nodeType":"YulFunctionCall","src":"7150:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7139:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7216:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7191:24:201"},"nodeType":"YulFunctionCall","src":"7191:33:201"},"nodeType":"YulExpressionStatement","src":"7191:33:201"},{"nodeType":"YulAssignment","src":"7233:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"7243:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7233:6:201"}]},{"nodeType":"YulAssignment","src":"7259:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7286:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7297:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7282:3:201"},"nodeType":"YulFunctionCall","src":"7282:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7269:12:201"},"nodeType":"YulFunctionCall","src":"7269:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"7259:6:201"}]},{"nodeType":"YulAssignment","src":"7310:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7337:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7348:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7333:3:201"},"nodeType":"YulFunctionCall","src":"7333:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7320:12:201"},"nodeType":"YulFunctionCall","src":"7320:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"7310:6:201"}]},{"nodeType":"YulAssignment","src":"7361:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7392:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7403:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7388:3:201"},"nodeType":"YulFunctionCall","src":"7388:19:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"7371:16:201"},"nodeType":"YulFunctionCall","src":"7371:37:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"7361:6:201"}]},{"nodeType":"YulAssignment","src":"7417:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7444:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7455:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7440:3:201"},"nodeType":"YulFunctionCall","src":"7440:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7427:12:201"},"nodeType":"YulFunctionCall","src":"7427:33:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"7417:6:201"}]},{"nodeType":"YulAssignment","src":"7469:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7496:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7507:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7492:3:201"},"nodeType":"YulFunctionCall","src":"7492:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7479:12:201"},"nodeType":"YulFunctionCall","src":"7479:33:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"7469:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6872:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6883:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6895:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6903:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6911:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6919:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"6927:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"6935:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"6943:6:201","type":""}],"src":"6784:734:201"},{"body":{"nodeType":"YulBlock","src":"7610:301:201","statements":[{"body":{"nodeType":"YulBlock","src":"7656:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7665:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7668:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7658:6:201"},"nodeType":"YulFunctionCall","src":"7658:12:201"},"nodeType":"YulExpressionStatement","src":"7658:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7631:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"7640:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7627:3:201"},"nodeType":"YulFunctionCall","src":"7627:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"7652:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7623:3:201"},"nodeType":"YulFunctionCall","src":"7623:32:201"},"nodeType":"YulIf","src":"7620:52:201"},{"nodeType":"YulVariableDeclaration","src":"7681:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7707:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7694:12:201"},"nodeType":"YulFunctionCall","src":"7694:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7685:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7751:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7726:24:201"},"nodeType":"YulFunctionCall","src":"7726:31:201"},"nodeType":"YulExpressionStatement","src":"7726:31:201"},{"nodeType":"YulAssignment","src":"7766:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"7776:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7766:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"7790:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7822:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7833:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7818:3:201"},"nodeType":"YulFunctionCall","src":"7818:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7805:12:201"},"nodeType":"YulFunctionCall","src":"7805:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7794:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7871:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7846:24:201"},"nodeType":"YulFunctionCall","src":"7846:33:201"},"nodeType":"YulExpressionStatement","src":"7846:33:201"},{"nodeType":"YulAssignment","src":"7888:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"7898:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7888:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7568:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7579:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7591:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7599:6:201","type":""}],"src":"7523:388:201"},{"body":{"nodeType":"YulBlock","src":"8020:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"8066:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8075:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8078:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8068:6:201"},"nodeType":"YulFunctionCall","src":"8068:12:201"},"nodeType":"YulExpressionStatement","src":"8068:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8041:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"8050:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8037:3:201"},"nodeType":"YulFunctionCall","src":"8037:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"8062:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8033:3:201"},"nodeType":"YulFunctionCall","src":"8033:32:201"},"nodeType":"YulIf","src":"8030:52:201"},{"nodeType":"YulVariableDeclaration","src":"8091:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8117:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8104:12:201"},"nodeType":"YulFunctionCall","src":"8104:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"8095:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8161:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"8136:24:201"},"nodeType":"YulFunctionCall","src":"8136:31:201"},"nodeType":"YulExpressionStatement","src":"8136:31:201"},{"nodeType":"YulAssignment","src":"8176:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"8186:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8176:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IAaveIncentivesController_$3875","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7986:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7997:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8009:6:201","type":""}],"src":"7916:281:201"},{"body":{"nodeType":"YulBlock","src":"8257:382:201","statements":[{"nodeType":"YulAssignment","src":"8267:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8281:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"8284:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"8277:3:201"},"nodeType":"YulFunctionCall","src":"8277:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"8267:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"8298:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"8328:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"8334:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8324:3:201"},"nodeType":"YulFunctionCall","src":"8324:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"8302:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"8375:31:201","statements":[{"nodeType":"YulAssignment","src":"8377:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8391:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8399:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8387:3:201"},"nodeType":"YulFunctionCall","src":"8387:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"8377:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"8355:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8348:6:201"},"nodeType":"YulFunctionCall","src":"8348:26:201"},"nodeType":"YulIf","src":"8345:61:201"},{"body":{"nodeType":"YulBlock","src":"8465:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8486:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8489:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8479:6:201"},"nodeType":"YulFunctionCall","src":"8479:88:201"},"nodeType":"YulExpressionStatement","src":"8479:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8587:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"8590:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8580:6:201"},"nodeType":"YulFunctionCall","src":"8580:15:201"},"nodeType":"YulExpressionStatement","src":"8580:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8615:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8618:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8608:6:201"},"nodeType":"YulFunctionCall","src":"8608:15:201"},"nodeType":"YulExpressionStatement","src":"8608:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"8421:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8444:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8452:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8441:2:201"},"nodeType":"YulFunctionCall","src":"8441:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8418:2:201"},"nodeType":"YulFunctionCall","src":"8418:38:201"},"nodeType":"YulIf","src":"8415:218:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"8237:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"8246:6:201","type":""}],"src":"8202:437:201"},{"body":{"nodeType":"YulBlock","src":"8725:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"8771:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8780:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8783:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8773:6:201"},"nodeType":"YulFunctionCall","src":"8773:12:201"},"nodeType":"YulExpressionStatement","src":"8773:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8746:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"8755:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8742:3:201"},"nodeType":"YulFunctionCall","src":"8742:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"8767:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8738:3:201"},"nodeType":"YulFunctionCall","src":"8738:32:201"},"nodeType":"YulIf","src":"8735:52:201"},{"nodeType":"YulAssignment","src":"8796:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8812:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8806:5:201"},"nodeType":"YulFunctionCall","src":"8806:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8796:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8691:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8702:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8714:6:201","type":""}],"src":"8644:184:201"},{"body":{"nodeType":"YulBlock","src":"9007:236:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9024:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9035:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9017:6:201"},"nodeType":"YulFunctionCall","src":"9017:21:201"},"nodeType":"YulExpressionStatement","src":"9017:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9058:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9069:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9054:3:201"},"nodeType":"YulFunctionCall","src":"9054:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"9074:2:201","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9047:6:201"},"nodeType":"YulFunctionCall","src":"9047:30:201"},"nodeType":"YulExpressionStatement","src":"9047:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9097:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9108:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9093:3:201"},"nodeType":"YulFunctionCall","src":"9093:18:201"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"9113:34:201","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9086:6:201"},"nodeType":"YulFunctionCall","src":"9086:62:201"},"nodeType":"YulExpressionStatement","src":"9086:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9168:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9179:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9164:3:201"},"nodeType":"YulFunctionCall","src":"9164:18:201"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"9184:16:201","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9157:6:201"},"nodeType":"YulFunctionCall","src":"9157:44:201"},"nodeType":"YulExpressionStatement","src":"9157:44:201"},{"nodeType":"YulAssignment","src":"9210:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9222:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9233:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9218:3:201"},"nodeType":"YulFunctionCall","src":"9218:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9210:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8984:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8998:4:201","type":""}],"src":"8833:410:201"},{"body":{"nodeType":"YulBlock","src":"9315:259:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9332:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"9337:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9325:6:201"},"nodeType":"YulFunctionCall","src":"9325:19:201"},"nodeType":"YulExpressionStatement","src":"9325:19:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9370:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"9375:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9366:3:201"},"nodeType":"YulFunctionCall","src":"9366:14:201"},{"name":"start","nodeType":"YulIdentifier","src":"9382:5:201"},{"name":"length","nodeType":"YulIdentifier","src":"9389:6:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"9353:12:201"},"nodeType":"YulFunctionCall","src":"9353:43:201"},"nodeType":"YulExpressionStatement","src":"9353:43:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9420:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"9425:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9416:3:201"},"nodeType":"YulFunctionCall","src":"9416:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"9434:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9412:3:201"},"nodeType":"YulFunctionCall","src":"9412:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"9441:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9405:6:201"},"nodeType":"YulFunctionCall","src":"9405:38:201"},"nodeType":"YulExpressionStatement","src":"9405:38:201"},{"nodeType":"YulAssignment","src":"9452:116:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9467:3:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9480:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"9488:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9476:3:201"},"nodeType":"YulFunctionCall","src":"9476:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"9493:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9472:3:201"},"nodeType":"YulFunctionCall","src":"9472:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9463:3:201"},"nodeType":"YulFunctionCall","src":"9463:98:201"},{"kind":"number","nodeType":"YulLiteral","src":"9563:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9459:3:201"},"nodeType":"YulFunctionCall","src":"9459:109:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"9452:3:201"}]}]},"name":"abi_encode_string_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"start","nodeType":"YulTypedName","src":"9284:5:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"9291:6:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"9299:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"9307:3:201","type":""}],"src":"9248:326:201"},{"body":{"nodeType":"YulBlock","src":"9904:603:201","statements":[{"nodeType":"YulVariableDeclaration","src":"9914:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9924:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9918:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9982:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9997:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10005:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9993:3:201"},"nodeType":"YulFunctionCall","src":"9993:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9975:6:201"},"nodeType":"YulFunctionCall","src":"9975:34:201"},"nodeType":"YulExpressionStatement","src":"9975:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10029:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10040:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10025:3:201"},"nodeType":"YulFunctionCall","src":"10025:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10049:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10057:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10045:3:201"},"nodeType":"YulFunctionCall","src":"10045:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10018:6:201"},"nodeType":"YulFunctionCall","src":"10018:43:201"},"nodeType":"YulExpressionStatement","src":"10018:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10081:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10092:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10077:3:201"},"nodeType":"YulFunctionCall","src":"10077:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"10101:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10109:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10097:3:201"},"nodeType":"YulFunctionCall","src":"10097:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10070:6:201"},"nodeType":"YulFunctionCall","src":"10070:45:201"},"nodeType":"YulExpressionStatement","src":"10070:45:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10135:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10146:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10131:3:201"},"nodeType":"YulFunctionCall","src":"10131:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"10151:3:201","type":"","value":"192"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10124:6:201"},"nodeType":"YulFunctionCall","src":"10124:31:201"},"nodeType":"YulExpressionStatement","src":"10124:31:201"},{"nodeType":"YulVariableDeclaration","src":"10164:77:201","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"10205:6:201"},{"name":"value4","nodeType":"YulIdentifier","src":"10213:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10225:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10236:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10221:3:201"},"nodeType":"YulFunctionCall","src":"10221:19:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10178:26:201"},"nodeType":"YulFunctionCall","src":"10178:63:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"10168:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10261:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10272:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10257:3:201"},"nodeType":"YulFunctionCall","src":"10257:19:201"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"10282:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"10290:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10278:3:201"},"nodeType":"YulFunctionCall","src":"10278:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10250:6:201"},"nodeType":"YulFunctionCall","src":"10250:51:201"},"nodeType":"YulExpressionStatement","src":"10250:51:201"},{"nodeType":"YulVariableDeclaration","src":"10310:64:201","value":{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"10351:6:201"},{"name":"value6","nodeType":"YulIdentifier","src":"10359:6:201"},{"name":"tail_1","nodeType":"YulIdentifier","src":"10367:6:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10324:26:201"},"nodeType":"YulFunctionCall","src":"10324:50:201"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"10314:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10394:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10405:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10390:3:201"},"nodeType":"YulFunctionCall","src":"10390:19:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"10415:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"10423:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10411:3:201"},"nodeType":"YulFunctionCall","src":"10411:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10383:6:201"},"nodeType":"YulFunctionCall","src":"10383:51:201"},"nodeType":"YulExpressionStatement","src":"10383:51:201"},{"nodeType":"YulAssignment","src":"10443:58:201","value":{"arguments":[{"name":"value7","nodeType":"YulIdentifier","src":"10478:6:201"},{"name":"value8","nodeType":"YulIdentifier","src":"10486:6:201"},{"name":"tail_2","nodeType":"YulIdentifier","src":"10494:6:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10451:26:201"},"nodeType":"YulFunctionCall","src":"10451:50:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10443:4:201"}]}]},"name":"abi_encode_tuple_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9809:9:201","type":""},{"name":"value8","nodeType":"YulTypedName","src":"9820:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"9828:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"9836:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"9844:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"9852:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9860:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9868:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9876:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9884:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9895:4:201","type":""}],"src":"9579:928:201"},{"body":{"nodeType":"YulBlock","src":"10544:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10561:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10564:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10554:6:201"},"nodeType":"YulFunctionCall","src":"10554:88:201"},"nodeType":"YulExpressionStatement","src":"10554:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10658:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10661:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10651:6:201"},"nodeType":"YulFunctionCall","src":"10651:15:201"},"nodeType":"YulExpressionStatement","src":"10651:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10682:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10685:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10675:6:201"},"nodeType":"YulFunctionCall","src":"10675:15:201"},"nodeType":"YulExpressionStatement","src":"10675:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"10512:184:201"},{"body":{"nodeType":"YulBlock","src":"10750:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"10772:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"10774:16:201"},"nodeType":"YulFunctionCall","src":"10774:18:201"},"nodeType":"YulExpressionStatement","src":"10774:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10766:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"10769:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10763:2:201"},"nodeType":"YulFunctionCall","src":"10763:8:201"},"nodeType":"YulIf","src":"10760:34:201"},{"nodeType":"YulAssignment","src":"10803:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10815:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"10818:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10811:3:201"},"nodeType":"YulFunctionCall","src":"10811:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"10803:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"10732:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"10735:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"10741:4:201","type":""}],"src":"10701:125:201"},{"body":{"nodeType":"YulBlock","src":"10879:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"10906:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"10908:16:201"},"nodeType":"YulFunctionCall","src":"10908:18:201"},"nodeType":"YulExpressionStatement","src":"10908:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10895:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"10902:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"10898:3:201"},"nodeType":"YulFunctionCall","src":"10898:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10892:2:201"},"nodeType":"YulFunctionCall","src":"10892:13:201"},"nodeType":"YulIf","src":"10889:39:201"},{"nodeType":"YulAssignment","src":"10937:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10948:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"10951:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10944:3:201"},"nodeType":"YulFunctionCall","src":"10944:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"10937:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"10862:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"10865:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"10871:3:201","type":""}],"src":"10831:128:201"},{"body":{"nodeType":"YulBlock","src":"11045:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"11091:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11100:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11103:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11093:6:201"},"nodeType":"YulFunctionCall","src":"11093:12:201"},"nodeType":"YulExpressionStatement","src":"11093:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11066:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"11075:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11062:3:201"},"nodeType":"YulFunctionCall","src":"11062:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"11087:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11058:3:201"},"nodeType":"YulFunctionCall","src":"11058:32:201"},"nodeType":"YulIf","src":"11055:52:201"},{"nodeType":"YulVariableDeclaration","src":"11116:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11135:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11129:5:201"},"nodeType":"YulFunctionCall","src":"11129:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11120:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11179:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"11154:24:201"},"nodeType":"YulFunctionCall","src":"11154:31:201"},"nodeType":"YulExpressionStatement","src":"11154:31:201"},{"nodeType":"YulAssignment","src":"11194:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"11204:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11194:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11011:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11022:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11034:6:201","type":""}],"src":"10964:251:201"},{"body":{"nodeType":"YulBlock","src":"11298:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"11344:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11353:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11356:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11346:6:201"},"nodeType":"YulFunctionCall","src":"11346:12:201"},"nodeType":"YulExpressionStatement","src":"11346:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11319:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"11328:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11315:3:201"},"nodeType":"YulFunctionCall","src":"11315:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"11340:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11311:3:201"},"nodeType":"YulFunctionCall","src":"11311:32:201"},"nodeType":"YulIf","src":"11308:52:201"},{"nodeType":"YulVariableDeclaration","src":"11369:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11388:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11382:5:201"},"nodeType":"YulFunctionCall","src":"11382:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11373:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"11451:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11460:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11463:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11453:6:201"},"nodeType":"YulFunctionCall","src":"11453:12:201"},"nodeType":"YulExpressionStatement","src":"11453:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11420:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11441:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11434:6:201"},"nodeType":"YulFunctionCall","src":"11434:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11427:6:201"},"nodeType":"YulFunctionCall","src":"11427:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"11417:2:201"},"nodeType":"YulFunctionCall","src":"11417:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11410:6:201"},"nodeType":"YulFunctionCall","src":"11410:40:201"},"nodeType":"YulIf","src":"11407:60:201"},{"nodeType":"YulAssignment","src":"11476:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"11486:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11476:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11264:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11275:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11287:6:201","type":""}],"src":"11220:277:201"},{"body":{"nodeType":"YulBlock","src":"11743:373:201","statements":[{"nodeType":"YulAssignment","src":"11753:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11765:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11776:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11761:3:201"},"nodeType":"YulFunctionCall","src":"11761:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11753:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11796:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"11807:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11789:6:201"},"nodeType":"YulFunctionCall","src":"11789:25:201"},"nodeType":"YulExpressionStatement","src":"11789:25:201"},{"nodeType":"YulVariableDeclaration","src":"11823:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11833:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11827:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11895:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11906:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11891:3:201"},"nodeType":"YulFunctionCall","src":"11891:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11915:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11923:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11911:3:201"},"nodeType":"YulFunctionCall","src":"11911:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11884:6:201"},"nodeType":"YulFunctionCall","src":"11884:43:201"},"nodeType":"YulExpressionStatement","src":"11884:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11947:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11958:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11943:3:201"},"nodeType":"YulFunctionCall","src":"11943:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"11967:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11975:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11963:3:201"},"nodeType":"YulFunctionCall","src":"11963:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11936:6:201"},"nodeType":"YulFunctionCall","src":"11936:43:201"},"nodeType":"YulExpressionStatement","src":"11936:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11999:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12010:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11995:3:201"},"nodeType":"YulFunctionCall","src":"11995:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"12015:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11988:6:201"},"nodeType":"YulFunctionCall","src":"11988:34:201"},"nodeType":"YulExpressionStatement","src":"11988:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12042:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12053:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12038:3:201"},"nodeType":"YulFunctionCall","src":"12038:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"12059:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12031:6:201"},"nodeType":"YulFunctionCall","src":"12031:35:201"},"nodeType":"YulExpressionStatement","src":"12031:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12086:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12097:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12082:3:201"},"nodeType":"YulFunctionCall","src":"12082:19:201"},{"name":"value5","nodeType":"YulIdentifier","src":"12103:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12075:6:201"},"nodeType":"YulFunctionCall","src":"12075:35:201"},"nodeType":"YulExpressionStatement","src":"12075:35:201"}]},"name":"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11672:9:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"11683:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"11691:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11699:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11707:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11715:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11723:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11734:4:201","type":""}],"src":"11502:614:201"},{"body":{"nodeType":"YulBlock","src":"12369:196:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12386:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"12391:66:201","type":"","value":"0x1901000000000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12379:6:201"},"nodeType":"YulFunctionCall","src":"12379:79:201"},"nodeType":"YulExpressionStatement","src":"12379:79:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12478:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"12483:1:201","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12474:3:201"},"nodeType":"YulFunctionCall","src":"12474:11:201"},{"name":"value0","nodeType":"YulIdentifier","src":"12487:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12467:6:201"},"nodeType":"YulFunctionCall","src":"12467:27:201"},"nodeType":"YulExpressionStatement","src":"12467:27:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12514:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"12519:2:201","type":"","value":"34"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12510:3:201"},"nodeType":"YulFunctionCall","src":"12510:12:201"},{"name":"value1","nodeType":"YulIdentifier","src":"12524:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12503:6:201"},"nodeType":"YulFunctionCall","src":"12503:28:201"},"nodeType":"YulExpressionStatement","src":"12503:28:201"},{"nodeType":"YulAssignment","src":"12540:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12551:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"12556:2:201","type":"","value":"66"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12547:3:201"},"nodeType":"YulFunctionCall","src":"12547:12:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"12540:3:201"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"12337:3:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12342:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12350:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"12361:3:201","type":""}],"src":"12121:444:201"},{"body":{"nodeType":"YulBlock","src":"12751:217:201","statements":[{"nodeType":"YulAssignment","src":"12761:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12773:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12784:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12769:3:201"},"nodeType":"YulFunctionCall","src":"12769:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12761:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12804:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"12815:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12797:6:201"},"nodeType":"YulFunctionCall","src":"12797:25:201"},"nodeType":"YulExpressionStatement","src":"12797:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12842:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12853:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12838:3:201"},"nodeType":"YulFunctionCall","src":"12838:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12862:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"12870:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12858:3:201"},"nodeType":"YulFunctionCall","src":"12858:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12831:6:201"},"nodeType":"YulFunctionCall","src":"12831:45:201"},"nodeType":"YulExpressionStatement","src":"12831:45:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12896:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12907:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12892:3:201"},"nodeType":"YulFunctionCall","src":"12892:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"12912:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12885:6:201"},"nodeType":"YulFunctionCall","src":"12885:34:201"},"nodeType":"YulExpressionStatement","src":"12885:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12939:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12950:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12935:3:201"},"nodeType":"YulFunctionCall","src":"12935:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"12955:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12928:6:201"},"nodeType":"YulFunctionCall","src":"12928:34:201"},"nodeType":"YulExpressionStatement","src":"12928:34:201"}]},"name":"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12696:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12707:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12715:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12723:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12731:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12742:4:201","type":""}],"src":"12570:398:201"},{"body":{"nodeType":"YulBlock","src":"13186:299:201","statements":[{"nodeType":"YulAssignment","src":"13196:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13208:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13219:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13204:3:201"},"nodeType":"YulFunctionCall","src":"13204:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13196:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13239:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"13250:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13232:6:201"},"nodeType":"YulFunctionCall","src":"13232:25:201"},"nodeType":"YulExpressionStatement","src":"13232:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13277:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13288:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13273:3:201"},"nodeType":"YulFunctionCall","src":"13273:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"13293:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13266:6:201"},"nodeType":"YulFunctionCall","src":"13266:34:201"},"nodeType":"YulExpressionStatement","src":"13266:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13320:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13331:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13316:3:201"},"nodeType":"YulFunctionCall","src":"13316:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"13336:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13309:6:201"},"nodeType":"YulFunctionCall","src":"13309:34:201"},"nodeType":"YulExpressionStatement","src":"13309:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13363:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13374:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13359:3:201"},"nodeType":"YulFunctionCall","src":"13359:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"13379:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13352:6:201"},"nodeType":"YulFunctionCall","src":"13352:34:201"},"nodeType":"YulExpressionStatement","src":"13352:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13406:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13417:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13402:3:201"},"nodeType":"YulFunctionCall","src":"13402:19:201"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"13427:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13435:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13423:3:201"},"nodeType":"YulFunctionCall","src":"13423:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13395:6:201"},"nodeType":"YulFunctionCall","src":"13395:84:201"},"nodeType":"YulExpressionStatement","src":"13395:84:201"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13123:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"13134:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13142:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13150:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13158:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13166:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13177:4:201","type":""}],"src":"12973:512:201"},{"body":{"nodeType":"YulBlock","src":"13664:229:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13681:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13692:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13674:6:201"},"nodeType":"YulFunctionCall","src":"13674:21:201"},"nodeType":"YulExpressionStatement","src":"13674:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13715:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13726:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13711:3:201"},"nodeType":"YulFunctionCall","src":"13711:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"13731:2:201","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13704:6:201"},"nodeType":"YulFunctionCall","src":"13704:30:201"},"nodeType":"YulExpressionStatement","src":"13704:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13754:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13765:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13750:3:201"},"nodeType":"YulFunctionCall","src":"13750:18:201"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"13770:34:201","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13743:6:201"},"nodeType":"YulFunctionCall","src":"13743:62:201"},"nodeType":"YulExpressionStatement","src":"13743:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13825:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13836:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13821:3:201"},"nodeType":"YulFunctionCall","src":"13821:18:201"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"13841:9:201","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13814:6:201"},"nodeType":"YulFunctionCall","src":"13814:37:201"},"nodeType":"YulExpressionStatement","src":"13814:37:201"},{"nodeType":"YulAssignment","src":"13860:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13872:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13883:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13868:3:201"},"nodeType":"YulFunctionCall","src":"13868:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13860:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13641:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13655:4:201","type":""}],"src":"13490:403:201"},{"body":{"nodeType":"YulBlock","src":"14072:171:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14089:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14100:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14082:6:201"},"nodeType":"YulFunctionCall","src":"14082:21:201"},"nodeType":"YulExpressionStatement","src":"14082:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14123:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14134:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14119:3:201"},"nodeType":"YulFunctionCall","src":"14119:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"14139:2:201","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14112:6:201"},"nodeType":"YulFunctionCall","src":"14112:30:201"},"nodeType":"YulExpressionStatement","src":"14112:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14162:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14173:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14158:3:201"},"nodeType":"YulFunctionCall","src":"14158:18:201"},{"hexValue":"475076323a206661696c6564207472616e73666572","kind":"string","nodeType":"YulLiteral","src":"14178:23:201","type":"","value":"GPv2: failed transfer"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14151:6:201"},"nodeType":"YulFunctionCall","src":"14151:51:201"},"nodeType":"YulExpressionStatement","src":"14151:51:201"},{"nodeType":"YulAssignment","src":"14211:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14223:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14234:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14219:3:201"},"nodeType":"YulFunctionCall","src":"14219:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14211:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14049:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14063:4:201","type":""}],"src":"13898:345:201"},{"body":{"nodeType":"YulBlock","src":"14405:162:201","statements":[{"nodeType":"YulAssignment","src":"14415:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14427:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14438:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14423:3:201"},"nodeType":"YulFunctionCall","src":"14423:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14415:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14457:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"14468:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14450:6:201"},"nodeType":"YulFunctionCall","src":"14450:25:201"},"nodeType":"YulExpressionStatement","src":"14450:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14495:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14506:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14491:3:201"},"nodeType":"YulFunctionCall","src":"14491:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"14511:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14484:6:201"},"nodeType":"YulFunctionCall","src":"14484:34:201"},"nodeType":"YulExpressionStatement","src":"14484:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14538:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14549:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14534:3:201"},"nodeType":"YulFunctionCall","src":"14534:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"14554:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14527:6:201"},"nodeType":"YulFunctionCall","src":"14527:34:201"},"nodeType":"YulExpressionStatement","src":"14527:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14358:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14369:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14377:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14385:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14396:4:201","type":""}],"src":"14248:319:201"},{"body":{"nodeType":"YulBlock","src":"14813:382:201","statements":[{"nodeType":"YulAssignment","src":"14823:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14835:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14846:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14831:3:201"},"nodeType":"YulFunctionCall","src":"14831:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14823:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"14859:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14869:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"14863:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14927:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14942:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"14950:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14938:3:201"},"nodeType":"YulFunctionCall","src":"14938:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14920:6:201"},"nodeType":"YulFunctionCall","src":"14920:34:201"},"nodeType":"YulExpressionStatement","src":"14920:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14974:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14985:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14970:3:201"},"nodeType":"YulFunctionCall","src":"14970:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"14994:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15002:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14990:3:201"},"nodeType":"YulFunctionCall","src":"14990:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14963:6:201"},"nodeType":"YulFunctionCall","src":"14963:43:201"},"nodeType":"YulExpressionStatement","src":"14963:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15026:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15037:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15022:3:201"},"nodeType":"YulFunctionCall","src":"15022:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"15046:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15054:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15042:3:201"},"nodeType":"YulFunctionCall","src":"15042:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15015:6:201"},"nodeType":"YulFunctionCall","src":"15015:43:201"},"nodeType":"YulExpressionStatement","src":"15015:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15078:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15089:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15074:3:201"},"nodeType":"YulFunctionCall","src":"15074:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"15094:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15067:6:201"},"nodeType":"YulFunctionCall","src":"15067:34:201"},"nodeType":"YulExpressionStatement","src":"15067:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15121:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15132:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15117:3:201"},"nodeType":"YulFunctionCall","src":"15117:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"15138:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15110:6:201"},"nodeType":"YulFunctionCall","src":"15110:35:201"},"nodeType":"YulExpressionStatement","src":"15110:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15165:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15176:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15161:3:201"},"nodeType":"YulFunctionCall","src":"15161:19:201"},{"name":"value5","nodeType":"YulIdentifier","src":"15182:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15154:6:201"},"nodeType":"YulFunctionCall","src":"15154:35:201"},"nodeType":"YulExpressionStatement","src":"15154:35:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14742:9:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"14753:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"14761:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14769:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14777:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14785:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14793:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14804:4:201","type":""}],"src":"14572:623:201"},{"body":{"nodeType":"YulBlock","src":"15248:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"15258:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"15268:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15262:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15311:21:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15326:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15329:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15322:3:201"},"nodeType":"YulFunctionCall","src":"15322:10:201"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15315:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15341:21:201","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"15356:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15359:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15352:3:201"},"nodeType":"YulFunctionCall","src":"15352:10:201"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"15345:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"15396:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15398:16:201"},"nodeType":"YulFunctionCall","src":"15398:18:201"},"nodeType":"YulExpressionStatement","src":"15398:18:201"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15377:3:201"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"15386:2:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"15390:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15382:3:201"},"nodeType":"YulFunctionCall","src":"15382:12:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15374:2:201"},"nodeType":"YulFunctionCall","src":"15374:21:201"},"nodeType":"YulIf","src":"15371:47:201"},{"nodeType":"YulAssignment","src":"15427:20:201","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15438:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"15443:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15434:3:201"},"nodeType":"YulFunctionCall","src":"15434:13:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"15427:3:201"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15231:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"15234:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"15240:3:201","type":""}],"src":"15200:253:201"},{"body":{"nodeType":"YulBlock","src":"15615:252:201","statements":[{"nodeType":"YulAssignment","src":"15625:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15637:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15648:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15633:3:201"},"nodeType":"YulFunctionCall","src":"15633:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15625:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15667:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15682:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"15690:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15678:3:201"},"nodeType":"YulFunctionCall","src":"15678:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15660:6:201"},"nodeType":"YulFunctionCall","src":"15660:74:201"},"nodeType":"YulExpressionStatement","src":"15660:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15754:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15765:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15750:3:201"},"nodeType":"YulFunctionCall","src":"15750:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"15770:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15743:6:201"},"nodeType":"YulFunctionCall","src":"15743:34:201"},"nodeType":"YulExpressionStatement","src":"15743:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15797:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15808:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15793:3:201"},"nodeType":"YulFunctionCall","src":"15793:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"15817:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"15825:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15813:3:201"},"nodeType":"YulFunctionCall","src":"15813:47:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15786:6:201"},"nodeType":"YulFunctionCall","src":"15786:75:201"},"nodeType":"YulExpressionStatement","src":"15786:75:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15568:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15579:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15587:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15595:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15606:4:201","type":""}],"src":"15458:409:201"},{"body":{"nodeType":"YulBlock","src":"15921:197:201","statements":[{"nodeType":"YulVariableDeclaration","src":"15931:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"15941:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15935:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15984:21:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15999:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16002:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15995:3:201"},"nodeType":"YulFunctionCall","src":"15995:10:201"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15988:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16014:21:201","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"16029:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16032:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16025:3:201"},"nodeType":"YulFunctionCall","src":"16025:10:201"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"16018:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"16060:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"16062:16:201"},"nodeType":"YulFunctionCall","src":"16062:18:201"},"nodeType":"YulExpressionStatement","src":"16062:18:201"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16050:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"16055:3:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16047:2:201"},"nodeType":"YulFunctionCall","src":"16047:12:201"},"nodeType":"YulIf","src":"16044:38:201"},{"nodeType":"YulAssignment","src":"16091:21:201","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16103:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"16108:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16099:3:201"},"nodeType":"YulFunctionCall","src":"16099:13:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"16091:4:201"}]}]},"name":"checked_sub_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15903:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"15906:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"15912:4:201","type":""}],"src":"15872:246:201"}]},"contents":"{\n    { }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_string_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$4860t_addresst_addresst_contract$_IAaveIncentivesController_$3875t_uint8t_string_calldata_ptrt_string_calldata_ptrt_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := abi_decode_address(add(headStart, 64))\n        value3 := abi_decode_address(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        let _1 := 0xffffffffffffffff\n        if gt(calldataload(add(headStart, 160)), _1) { revert(0, 0) }\n        let value5_1, value6_1 := abi_decode_string_calldata(add(headStart, calldataload(add(headStart, 160))), dataEnd)\n        value5 := value5_1\n        value6 := value6_1\n        if gt(calldataload(add(headStart, 192)), _1) { revert(0, 0) }\n        let value7_1, value8_1 := abi_decode_string_calldata(add(headStart, calldataload(add(headStart, 192))), dataEnd)\n        value7 := value7_1\n        value8 := value8_1\n        if gt(calldataload(add(headStart, 224)), _1) { revert(0, 0) }\n        let value9_1, value10_1 := abi_decode_string_calldata(add(headStart, calldataload(add(headStart, 224))), dataEnd)\n        value9 := value9_1\n        value10 := value10_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_contract$_IAaveIncentivesController_$3875__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_contract$_IAaveIncentivesController_$3875(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_string_calldata(start, length, pos) -> end\n    {\n        mstore(pos, length)\n        calldatacopy(add(pos, 0x20), start, length)\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, 0xff))\n        mstore(add(headStart, 96), 192)\n        let tail_1 := abi_encode_string_calldata(value3, value4, add(headStart, 192))\n        mstore(add(headStart, 128), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string_calldata(value5, value6, tail_1)\n        mstore(add(headStart, 160), sub(tail_2, headStart))\n        tail := abi_encode_string_calldata(value7, value8, tail_2)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, 0x1901000000000000000000000000000000000000000000000000000000000000)\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"GPv2: failed transfer\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffff))\n    }\n    function checked_sub_t_uint128(x, y) -> diff\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"27744":[{"length":32,"start":7373}],"27926":[{"length":32,"start":4414},{"length":32,"start":6088}],"27929":[{"length":32,"start":956},{"length":32,"start":1821},{"length":32,"start":2180},{"length":32,"start":2691},{"length":32,"start":3229},{"length":32,"start":3434},{"length":32,"start":3628},{"length":32,"start":3855},{"length":32,"start":3983},{"length":32,"start":4279},{"length":32,"start":5897},{"length":32,"start":6617},{"length":32,"start":9090},{"length":32,"start":9465}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106102265760003560e01c8063781603761161012a578063b1bf962d116100bd578063d7020d0a1161008c578063e075398611610071578063e07539861461058c578063e655dbd8146105e8578063f866c319146105fb57600080fd5b8063d7020d0a14610533578063dd62ed3e1461054657600080fd5b8063b1bf962d146104f2578063b3f1c93d146104fa578063cea9d26f1461050d578063d505accf1461052057600080fd5b8063a457c2d7116100f9578063a457c2d714610490578063a9059cbb146104a3578063ae167335146104b6578063b16a19de146104d457600080fd5b806378160376146104265780637df5bd3b146104625780637ecebe001461047557806395d89b411461048857600080fd5b806330adf81f116101bd5780634efecaa51161018c57806370a082311161017157806370a08231146103a45780637535d246146103b757806375d264131461040357600080fd5b80634efecaa51461037e5780636fd976761461039157600080fd5b806330adf81f14610327578063313ce5671461034e5780633644e51514610363578063395093511461036b57600080fd5b806318160ddd116101f957806318160ddd146102e4578063183fb413146102ec5780631da24f3e1461030157806323b872dd1461031457600080fd5b806306fdde031461022b578063095ea7b3146102495780630afbcdc91461026c5780630bd7ad3b146102ce575b600080fd5b61023361060e565b6040516102409190613040565b60405180910390f35b61025c61025736600461308f565b6106a0565b6040519015158152602001610240565b6102b961027a3660046130bb565b73ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546036546fffffffffffffffffffffffffffffffff90911691565b60408051928352602083019190915201610240565b6102d6600181565b604051908152602001610240565b6102d66106b6565b6102ff6102fa366004613132565b610795565b005b6102d661030f3660046130bb565b610b54565b61025c610322366004613226565b610b93565b6102d67f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60395460405160ff9091168152602001610240565b6102d6610c13565b61025c61037936600461308f565b610c22565b6102ff61038c36600461308f565b610c66565b6102ff61039f366004613226565b610d33565b6102d66103b23660046130bb565b610ddd565b6103de7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610240565b603954610100900473ffffffffffffffffffffffffffffffffffffffff166103de565b6102336040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6102ff610470366004613267565b610ed8565b6102d66104833660046130bb565b610fd1565b610233610ffc565b61025c61049e36600461308f565b61100b565b61025c6104b136600461308f565b61104f565b603c5473ffffffffffffffffffffffffffffffffffffffff166103de565b603d5473ffffffffffffffffffffffffffffffffffffffff166103de565b6102d6611072565b61025c610508366004613289565b61107d565b6102ff61051b366004613226565b61113a565b6102ff61052e3660046132cf565b611378565b6102ff610541366004613289565b6116d2565b6102d661055436600461333d565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260356020908152604080832093909416825291909152205490565b6102d661059a3660046130bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b6102ff6105f63660046130bb565b6117c4565b6102ff610609366004613226565b6119a2565b60606037805461061d90613376565b80601f016020809104026020016040519081016040528092919081815260200182805461064990613376565b80156106965780601f1061066b57610100808354040283529160200191610696565b820191906000526020600020905b81548152906001019060200180831161067957829003601f168201915b5050505050905090565b60006106ad338484611a54565b50600192915050565b6000806106c260365490565b9050806106d157600091505090565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261078f917f0000000000000000000000000000000000000000000000000000000000000000169063d15e005390602401602060405180830381865afa158015610764573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078891906133c4565b8290611ac2565b91505090565b60015460029060ff16806107a85750303b155b806107b4575060005481115b610845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b60015460ff1615801561088257600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f38370000000000000000000000000000000000000000000000000000000000008152509061093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5061097f88888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b1992505050565b6109be86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b2c92505050565b603980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8b16179055603c805473ffffffffffffffffffffffffffffffffffffffff808f167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603d80548e8416921691909117905560398054918c16610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055610a7b611b3f565b603b819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb19e051f8af41150ccccb3fc2c2d8d15f4a4cf434f32a559ba75fe73d6eea20b8e8d8d8d8d8d8d8d8d604051610b0e99989796959493929190613426565b60405180910390a38015610b4557600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603460205260408120546fffffffffffffffffffffffffffffffff165b92915050565b600080610b9f83611c04565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260356020908152604080832033808552925290912054919250610bfd91879190610bf8906fffffffffffffffffffffffffffffffff8616906134d0565b611a54565b610c08858583611caa565b506001949350505050565b6000610c1d611cc9565b905090565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106ad918590610bf89086906134e7565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610d0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50603d54610d2f9073ffffffffffffffffffffffffffffffffffffffff168383611d02565b5050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091610b8d917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa158015610e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9991906133c4565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260409020546fffffffffffffffffffffffffffffffff165b90611ac2565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610f7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5081610f86575050565b603c54610fcc907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff168484611dd5565b505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603a6020526040812054610b8d565b60606038805461061d90613376565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106ad918590610bf89086906134d0565b60008061105b83611c04565b9050611068338583611caa565b5060019392505050565b6000610c1d60365490565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152600090337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5061113185858585611dd5565b95945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cb91906134ff565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015611238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125c919061351c565b6040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250906112ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50603d5460408051808201909152600281527f383500000000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff86811691161415611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50610dd773ffffffffffffffffffffffffffffffffffffffff85168484611d02565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff88166113fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50834211156040518060400160405280600281526020017f37380000000000000000000000000000000000000000000000000000000000008152509061146d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5073ffffffffffffffffffffffffffffffffffffffff87166000908152603a60205260408120549061149d610c13565b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9602082015273ffffffffffffffffffffffffffffffffffffffff808d1692820192909252908a1660608201526080810189905260a0810184905260c0810188905260e0016040516020818303038152906040528051906020012060405160200161155e9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa1580156115e4573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f37390000000000000000000000000000000000000000000000000000000000008152509061168a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b506116968260016134e7565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603a60205260409020556116c7898989611a54565b505050505050505050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5061178384848484612016565b73ffffffffffffffffffffffffffffffffffffffff83163014610dd757603d54610dd79073ffffffffffffffffffffffffffffffffffffffff168484611d02565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611831573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185591906134ff565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156118c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e6919061351c565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50506039805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611a46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b50610fcc8383836000612334565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526035602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517611af757600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b8051610d2f906037906020840190612f45565b8051610d2f906038906020840190612f45565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611b6a6125b0565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60006fffffffffffffffffffffffffffffffff821115611ca6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f3238206269747300000000000000000000000000000000000000000000000000606482015260840161083c565b5090565b610fcc8383836fffffffffffffffffffffffffffffffff166001612334565b60007f0000000000000000000000000000000000000000000000000000000000000000461415611cfa5750603b5490565b610c1d611b3f565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1611d65573d6000803e3d6000fd5b50611d6f846125ba565b610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e736665720000000000000000000000604482015260640161083c565b600080611de28484612686565b60408051808201909152600281527f3234000000000000000000000000000000000000000000000000000000000000602082015290915081611e51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291611eae918491700100000000000000000000000000000000900416611ac2565b611eb88387611ac2565b611ec291906134d0565b9050611ecd85611c04565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055611f3587611f3085611c04565b6126c5565b6000611f4182886134e7565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611fa391815260200190565b60405180910390a3604080518281526020810184905290810187905273ffffffffffffffffffffffffffffffffffffffff808a1691908b16907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35050159695505050505050565b60006120228383612686565b60408051808201909152600281527f3235000000000000000000000000000000000000000000000000000000000000602082015290915081612091576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9190613040565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff80821692916120ee918491700100000000000000000000000000000000900416611ac2565b6120f88386611ac2565b61210291906134d0565b905061210d84611c04565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556121758761217085611c04565b612841565b8481111561225457600061218986836134d0565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121eb91815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff89169081907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35061232b565b600061226082876134d0565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122c291815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff80891691908a16907f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f90906060015b60405180910390a3505b50505050505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201819052916000917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa1580156123cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ef91906133c4565b9050600061243582610ed28973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b9050600061247b83610ed28973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b9050612489888888866128a5565b8415612556576040517fd5ed393300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015289811660248301528881166044830152606482018890526084820184905260a482018390527f0000000000000000000000000000000000000000000000000000000000000000169063d5ed39339060c401600060405180830381600087803b15801561253d57600080fd5b505af1158015612551573d6000803e3d6000fd5b505050505b73ffffffffffffffffffffffffffffffffffffffff8088169089167f4beccb90f994c31aced7a23b5611020728a23d8ec5cddd1a3e9d97b96fda866661259c8987612686565b604080519182526020820188905201612321565b6060610c1d61060e565b60006125fa565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156126395760208114612673576126347f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f6125c1565b612680565b823b61266a5761266a7f475076323a206e6f74206120636f6e747261637400000000000000000000000060146125c1565b60019150612680565b3d6000803e600051151591505b50919050565b600081156b033b2e3c9fd0803ce8000000600284041904841117156126aa57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b6036546126e46fffffffffffffffffffffffffffffffff8316826134e7565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff16612729838261353e565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9390931692909217909155603954610100900416801561283a576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590526fffffffffffffffffffffffffffffffff841660448301528216906331873e2e90606401600060405180830381600087803b15801561282657600080fd5b505af11580156116c7573d6000803e3d6000fd5b5050505050565b6036546128606fffffffffffffffffffffffffffffffff8316826134d0565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff166127298382613572565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291612901918491700100000000000000000000000000000000900416611ac2565b61290b8385611ac2565b61291591906134d0565b905060006129578673ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260346020526040812054919250906129b290839070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16611ac2565b6129bc8387611ac2565b6129c691906134d0565b90506129d185611c04565b73ffffffffffffffffffffffffffffffffffffffff8916600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612a3085611c04565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612aa28888612a9d612a988a8a612686565b611c04565b612c9a565b8215612b515760405183815273ffffffffffffffffffffffffffffffffffffffff8916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805184815260208101859052808201879052905173ffffffffffffffffffffffffffffffffffffffff8a169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015612b8d5750600081115b15612c3b5760405181815273ffffffffffffffffffffffffffffffffffffffff8816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101839052808201879052905173ffffffffffffffffffffffffffffffffffffffff89169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8860405161232191815260200190565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff16612cdc8282613572565b73ffffffffffffffffffffffffffffffffffffffff85811660009081526034602052604080822080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9586161790559186168152205416612d50838261353e565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff93909316929092179091556039546101009004168015612f3d576036546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018390526fffffffffffffffffffffffffffffffff861660448301528316906331873e2e90606401600060405180830381600087803b158015612e5057600080fd5b505af1158015612e64573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161461232b576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018390526fffffffffffffffffffffffffffffffff851660448301528316906331873e2e90606401600060405180830381600087803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b50505050505b505050505050565b828054612f5190613376565b90600052602060002090601f016020900481019282612f735760008555612fb9565b82601f10612f8c57805160ff1916838001178555612fb9565b82800160010185558215612fb9579182015b82811115612fb9578251825591602001919060010190612f9e565b50611ca69291505b80821115611ca65760008155600101612fc1565b6000815180845260005b81811015612ffb57602081850181015186830182015201612fdf565b8181111561300d576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006130536020830184612fd5565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461307c57600080fd5b50565b803561308a8161305a565b919050565b600080604083850312156130a257600080fd5b82356130ad8161305a565b946020939093013593505050565b6000602082840312156130cd57600080fd5b81356130538161305a565b803560ff8116811461308a57600080fd5b60008083601f8401126130fb57600080fd5b50813567ffffffffffffffff81111561311357600080fd5b60208301915083602082850101111561312b57600080fd5b9250929050565b60008060008060008060008060008060006101008c8e03121561315457600080fd5b61315d8c61307f565b9a5061316b60208d0161307f565b995061317960408d0161307f565b985061318760608d0161307f565b975061319560808d016130d8565b965067ffffffffffffffff8060a08e013511156131b157600080fd5b6131c18e60a08f01358f016130e9565b909750955060c08d01358110156131d757600080fd5b6131e78e60c08f01358f016130e9565b909550935060e08d01358110156131fd57600080fd5b5061320e8d60e08e01358e016130e9565b81935080925050509295989b509295989b9093969950565b60008060006060848603121561323b57600080fd5b83356132468161305a565b925060208401356132568161305a565b929592945050506040919091013590565b6000806040838503121561327a57600080fd5b50508035926020909101359150565b6000806000806080858703121561329f57600080fd5b84356132aa8161305a565b935060208501356132ba8161305a565b93969395505050506040820135916060013590565b600080600080600080600060e0888a0312156132ea57600080fd5b87356132f58161305a565b965060208801356133058161305a565b95506040880135945060608801359350613321608089016130d8565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561335057600080fd5b823561335b8161305a565b9150602083013561336b8161305a565b809150509250929050565b600181811c9082168061338a57607f821691505b60208210811415612680577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000602082840312156133d657600080fd5b5051919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808c168352808b1660208401525060ff8916604083015260c0606083015261346960c08301888a6133dd565b828103608084015261347c8187896133dd565b905082810360a08401526134918185876133dd565b9c9b505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156134e2576134e26134a1565b500390565b600082198211156134fa576134fa6134a1565b500190565b60006020828403121561351157600080fd5b81516130538161305a565b60006020828403121561352e57600080fd5b8151801515811461305357600080fd5b60006fffffffffffffffffffffffffffffffff808316818516808303821115613569576135696134a1565b01949350505050565b60006fffffffffffffffffffffffffffffffff8381169083168181101561359b5761359b6134a1565b03939250505056fea2646970667358221220cb990b5cb5941c351cd908bfe6b9dd94d8482ea9981807223bc188ade4d22de264736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x226 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x78160376 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xB1BF962D GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xD7020D0A GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xE0753986 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE0753986 EQ PUSH2 0x58C JUMPI DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x5E8 JUMPI DUP1 PUSH4 0xF866C319 EQ PUSH2 0x5FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD7020D0A EQ PUSH2 0x533 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB1BF962D EQ PUSH2 0x4F2 JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x4FA JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0x50D JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x520 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA457C2D7 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x490 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0xAE167335 EQ PUSH2 0x4B6 JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x4D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x78160376 EQ PUSH2 0x426 JUMPI DUP1 PUSH4 0x7DF5BD3B EQ PUSH2 0x462 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x475 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x1BD JUMPI DUP1 PUSH4 0x4EFECAA5 GT PUSH2 0x18C JUMPI DUP1 PUSH4 0x70A08231 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3A4 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x3B7 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x403 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4EFECAA5 EQ PUSH2 0x37E JUMPI DUP1 PUSH4 0x6FD97676 EQ PUSH2 0x391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x327 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x34E JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x363 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x36B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0x1F9 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2E4 JUMPI DUP1 PUSH4 0x183FB413 EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0x1DA24F3E EQ PUSH2 0x301 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x314 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x249 JUMPI DUP1 PUSH4 0xAFBCDC9 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0xBD7AD3B EQ PUSH2 0x2CE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x233 PUSH2 0x60E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x240 SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x25C PUSH2 0x257 CALLDATASIZE PUSH1 0x4 PUSH2 0x308F JUMP JUMPDEST PUSH2 0x6A0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2B9 PUSH2 0x27A CALLDATASIZE PUSH1 0x4 PUSH2 0x30BB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x36 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x6B6 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x2FA CALLDATASIZE PUSH1 0x4 PUSH2 0x3132 JUMP JUMPDEST PUSH2 0x795 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2D6 PUSH2 0x30F CALLDATASIZE PUSH1 0x4 PUSH2 0x30BB JUMP JUMPDEST PUSH2 0xB54 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x322 CALLDATASIZE PUSH1 0x4 PUSH2 0x3226 JUMP JUMPDEST PUSH2 0xB93 JUMP JUMPDEST PUSH2 0x2D6 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0xC13 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x379 CALLDATASIZE PUSH1 0x4 PUSH2 0x308F JUMP JUMPDEST PUSH2 0xC22 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x38C CALLDATASIZE PUSH1 0x4 PUSH2 0x308F JUMP JUMPDEST PUSH2 0xC66 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x39F CALLDATASIZE PUSH1 0x4 PUSH2 0x3226 JUMP JUMPDEST PUSH2 0xD33 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x3B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x30BB JUMP JUMPDEST PUSH2 0xDDD JUMP JUMPDEST PUSH2 0x3DE PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x233 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x470 CALLDATASIZE PUSH1 0x4 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0xED8 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x483 CALLDATASIZE PUSH1 0x4 PUSH2 0x30BB JUMP JUMPDEST PUSH2 0xFD1 JUMP JUMPDEST PUSH2 0x233 PUSH2 0xFFC JUMP JUMPDEST PUSH2 0x25C PUSH2 0x49E CALLDATASIZE PUSH1 0x4 PUSH2 0x308F JUMP JUMPDEST PUSH2 0x100B JUMP JUMPDEST PUSH2 0x25C PUSH2 0x4B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x308F JUMP JUMPDEST PUSH2 0x104F JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x1072 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x508 CALLDATASIZE PUSH1 0x4 PUSH2 0x3289 JUMP JUMPDEST PUSH2 0x107D JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x51B CALLDATASIZE PUSH1 0x4 PUSH2 0x3226 JUMP JUMPDEST PUSH2 0x113A JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x52E CALLDATASIZE PUSH1 0x4 PUSH2 0x32CF JUMP JUMPDEST PUSH2 0x1378 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x541 CALLDATASIZE PUSH1 0x4 PUSH2 0x3289 JUMP JUMPDEST PUSH2 0x16D2 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x554 CALLDATASIZE PUSH1 0x4 PUSH2 0x333D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x59A CALLDATASIZE PUSH1 0x4 PUSH2 0x30BB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x5F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x30BB JUMP JUMPDEST PUSH2 0x17C4 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x609 CALLDATASIZE PUSH1 0x4 PUSH2 0x3226 JUMP JUMPDEST PUSH2 0x19A2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0x61D SWAP1 PUSH2 0x3376 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x649 SWAP1 PUSH2 0x3376 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x696 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x66B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x696 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 0x679 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6AD CALLER DUP5 DUP5 PUSH2 0x1A54 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6C2 PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x6D1 JUMPI PUSH1 0x0 SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x78F SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x764 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x788 SWAP2 SWAP1 PUSH2 0x33C4 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1AC2 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x2 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x7A8 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x7B4 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x845 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x882 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x93F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH2 0x97F DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1B19 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x9BE DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1B2C SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x39 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0xFF DUP12 AND OR SWAP1 SSTORE PUSH1 0x3C DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP16 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x3D DUP1 SLOAD DUP15 DUP5 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x39 DUP1 SLOAD SWAP2 DUP13 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0xA7B PUSH2 0x1B3F JUMP JUMPDEST PUSH1 0x3B DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xB19E051F8AF41150CCCCB3FC2C2D8D15F4A4CF434F32A559BA75FE73D6EEA20B DUP15 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 PUSH1 0x40 MLOAD PUSH2 0xB0E SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3426 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0xB45 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB9F DUP4 PUSH2 0x1C04 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0xBFD SWAP2 DUP8 SWAP2 SWAP1 PUSH2 0xBF8 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 PUSH2 0x34D0 JUMP JUMPDEST PUSH2 0x1A54 JUMP JUMPDEST PUSH2 0xC08 DUP6 DUP6 DUP4 PUSH2 0x1CAA JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1D PUSH2 0x1CC9 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 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 0x6AD SWAP2 DUP6 SWAP1 PUSH2 0xBF8 SWAP1 DUP7 SWAP1 PUSH2 0x34E7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xD0A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH2 0xD2F SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH2 0x1D02 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xDD7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH2 0xB8D SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE75 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE99 SWAP2 SWAP1 PUSH2 0x33C4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 PUSH2 0x1AC2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xF7C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP DUP2 PUSH2 0xF86 JUMPI POP POP JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH2 0xFCC SWAP1 PUSH32 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1DD5 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xB8D JUMP JUMPDEST PUSH1 0x60 PUSH1 0x38 DUP1 SLOAD PUSH2 0x61D SWAP1 PUSH2 0x3376 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 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 0x6AD SWAP2 DUP6 SWAP1 PUSH2 0xBF8 SWAP1 DUP7 SWAP1 PUSH2 0x34D0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x105B DUP4 PUSH2 0x1C04 JUMP JUMPDEST SWAP1 POP PUSH2 0x1068 CALLER DUP6 DUP4 PUSH2 0x1CAA JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1D PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1124 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH2 0x1131 DUP6 DUP6 DUP6 DUP6 PUSH2 0x1DD5 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11A7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11CB SWAP2 SWAP1 PUSH2 0x34FF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1238 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x125C SWAP2 SWAP1 PUSH2 0x351C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x12CA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3835000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1356 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH2 0xDD7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 DUP5 PUSH2 0x1D02 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x13FA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x146D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x149D PUSH2 0xC13 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP11 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x155E SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15E4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x168A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH2 0x1696 DUP3 PUSH1 0x1 PUSH2 0x34E7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x16C7 DUP10 DUP10 DUP10 PUSH2 0x1A54 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1776 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH2 0x1783 DUP5 DUP5 DUP5 DUP5 PUSH2 0x2016 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ADDRESS EQ PUSH2 0xDD7 JUMPI PUSH1 0x3D SLOAD PUSH2 0xDD7 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1D02 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1831 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1855 SWAP2 SWAP1 PUSH2 0x34FF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18C2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18E6 SWAP2 SWAP1 PUSH2 0x351C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1954 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP POP PUSH1 0x39 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1A46 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH2 0xFCC DUP4 DUP4 DUP4 PUSH1 0x0 PUSH2 0x2334 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1AF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD2F SWAP1 PUSH1 0x37 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2F45 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD2F SWAP1 PUSH1 0x38 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2F45 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x1B6A PUSH2 0x25B0 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1CA6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x83C JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0xFCC DUP4 DUP4 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH2 0x2334 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0x1CFA JUMPI POP PUSH1 0x3B SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xC1D PUSH2 0x1B3F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x1D65 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1D6F DUP5 PUSH2 0x25BA JUMP JUMPDEST PUSH2 0xDD7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x83C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1DE2 DUP5 DUP5 PUSH2 0x2686 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x1E51 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x1EAE SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x1EB8 DUP4 DUP8 PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x1EC2 SWAP2 SWAP1 PUSH2 0x34D0 JUMP JUMPDEST SWAP1 POP PUSH2 0x1ECD DUP6 PUSH2 0x1C04 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1F35 DUP8 PUSH2 0x1F30 DUP6 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x26C5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F41 DUP3 DUP9 PUSH2 0x34E7 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1FA3 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 AND SWAP2 SWAP1 DUP12 AND SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP ISZERO SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2022 DUP4 DUP4 PUSH2 0x2686 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x2091 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83C SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x20EE SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x20F8 DUP4 DUP7 PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x2102 SWAP2 SWAP1 PUSH2 0x34D0 JUMP JUMPDEST SWAP1 POP PUSH2 0x210D DUP5 PUSH2 0x1C04 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2175 DUP8 PUSH2 0x2170 DUP6 PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x2841 JUMP JUMPDEST DUP5 DUP2 GT ISZERO PUSH2 0x2254 JUMPI PUSH1 0x0 PUSH2 0x2189 DUP7 DUP4 PUSH2 0x34D0 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x21EB SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 DUP2 SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x232B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2260 DUP3 DUP8 PUSH2 0x34D0 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x22C2 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP2 SWAP1 DUP11 AND SWAP1 PUSH32 0x4CF25BC1D991C17529C25213D3CC0CDA295EEAAD5F13F361969B12EA48015F90 SWAP1 PUSH1 0x60 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x23EF SWAP2 SWAP1 PUSH2 0x33C4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2435 DUP3 PUSH2 0xED2 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x247B DUP4 PUSH2 0xED2 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x2489 DUP9 DUP9 DUP9 DUP7 PUSH2 0x28A5 JUMP JUMPDEST DUP5 ISZERO PUSH2 0x2556 JUMPI PUSH1 0x40 MLOAD PUSH32 0xD5ED393300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP10 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP9 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xD5ED3933 SWAP1 PUSH1 0xC4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x253D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2551 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND SWAP1 DUP10 AND PUSH32 0x4BECCB90F994C31ACED7A23B5611020728A23D8EC5CDDD1A3E9D97B96FDA8666 PUSH2 0x259C DUP10 DUP8 PUSH2 0x2686 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP9 SWAP1 MSTORE ADD PUSH2 0x2321 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC1D PUSH2 0x60E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25FA JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x2639 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x2673 JUMPI PUSH2 0x2634 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x25C1 JUMP JUMPDEST PUSH2 0x2680 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x266A JUMPI PUSH2 0x266A PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x25C1 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x2680 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x26AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x26E4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x34E7 JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2729 DUP4 DUP3 PUSH2 0x353E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x283A JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2826 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x2860 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x34D0 JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2729 DUP4 DUP3 PUSH2 0x3572 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x2901 SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x290B DUP4 DUP6 PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x2915 SWAP2 SWAP1 PUSH2 0x34D0 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2957 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x29B2 SWAP1 DUP4 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x29BC DUP4 DUP8 PUSH2 0x1AC2 JUMP JUMPDEST PUSH2 0x29C6 SWAP2 SWAP1 PUSH2 0x34D0 JUMP JUMPDEST SWAP1 POP PUSH2 0x29D1 DUP6 PUSH2 0x1C04 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2A30 DUP6 PUSH2 0x1C04 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2AA2 DUP9 DUP9 PUSH2 0x2A9D PUSH2 0x2A98 DUP11 DUP11 PUSH2 0x2686 JUMP JUMPDEST PUSH2 0x1C04 JUMP JUMPDEST PUSH2 0x2C9A JUMP JUMPDEST DUP3 ISZERO PUSH2 0x2B51 JUMPI PUSH1 0x40 MLOAD DUP4 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x2B8D JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST ISZERO PUSH2 0x2C3B JUMPI PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP9 PUSH1 0x40 MLOAD PUSH2 0x2321 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2CDC DUP3 DUP3 PUSH2 0x3572 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 AND OR SWAP1 SSTORE SWAP2 DUP7 AND DUP2 MSTORE KECCAK256 SLOAD AND PUSH2 0x2D50 DUP4 DUP3 PUSH2 0x353E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x2F3D JUMPI PUSH1 0x36 SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2E64 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x232B JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2F37 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x2F51 SWAP1 PUSH2 0x3376 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x2F73 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x2FB9 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x2F8C JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x2FB9 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x2FB9 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x2FB9 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2F9E JUMP JUMPDEST POP PUSH2 0x1CA6 SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1CA6 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2FC1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2FFB JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x2FDF JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x300D JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3053 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2FD5 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x307C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x308A DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x30A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x30AD DUP2 PUSH2 0x305A 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 0x30CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3053 DUP2 PUSH2 0x305A JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x308A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x30FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3113 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x312B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x100 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x3154 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x315D DUP13 PUSH2 0x307F JUMP JUMPDEST SWAP11 POP PUSH2 0x316B PUSH1 0x20 DUP14 ADD PUSH2 0x307F JUMP JUMPDEST SWAP10 POP PUSH2 0x3179 PUSH1 0x40 DUP14 ADD PUSH2 0x307F JUMP JUMPDEST SWAP9 POP PUSH2 0x3187 PUSH1 0x60 DUP14 ADD PUSH2 0x307F JUMP JUMPDEST SWAP8 POP PUSH2 0x3195 PUSH1 0x80 DUP14 ADD PUSH2 0x30D8 JUMP JUMPDEST SWAP7 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x31B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31C1 DUP15 PUSH1 0xA0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x30E9 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0xC0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x31D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31E7 DUP15 PUSH1 0xC0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x30E9 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP PUSH1 0xE0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x31FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x320E DUP14 PUSH1 0xE0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x30E9 JUMP JUMPDEST DUP2 SWAP4 POP DUP1 SWAP3 POP POP POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x323B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3246 DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x3256 DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x327A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x329F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x32AA DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x32BA DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x32EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x32F5 DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x3305 DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x3321 PUSH1 0x80 DUP10 ADD PUSH2 0x30D8 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3350 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x335B DUP2 PUSH2 0x305A JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x336B DUP2 PUSH2 0x305A JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x338A JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x2680 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x33D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 ADD ADD MSTORE PUSH1 0x0 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP5 ADD ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND DUP4 MSTORE DUP1 DUP12 AND PUSH1 0x20 DUP5 ADD MSTORE POP PUSH1 0xFF DUP10 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xC0 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x3469 PUSH1 0xC0 DUP4 ADD DUP9 DUP11 PUSH2 0x33DD JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x347C DUP2 DUP8 DUP10 PUSH2 0x33DD JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x3491 DUP2 DUP6 DUP8 PUSH2 0x33DD JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x34E2 JUMPI PUSH2 0x34E2 PUSH2 0x34A1 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x34FA JUMPI PUSH2 0x34FA PUSH2 0x34A1 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3511 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x3053 DUP2 PUSH2 0x305A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x352E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3053 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x3569 JUMPI PUSH2 0x3569 PUSH2 0x34A1 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x359B JUMPI PUSH2 0x359B PUSH2 0x34A1 JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCB SWAP10 SIGNEXTEND 0x5C 0xB5 SWAP5 SHR CALLDATALOAD SHR 0xD9 ADDMOD 0xBF 0xE6 0xB9 0xDD SWAP5 0xD8 BASEFEE 0x2E 0xA9 SWAP9 XOR SMOD 0x22 EXTCODESIZE 0xC1 DUP9 0xAD 0xE4 0xD2 0x2D 0xE2 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"176:164:62:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84:103;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4534:158;;;;;;:::i;:::-;;:::i;:::-;;;1558:14:201;;1551:22;1533:41;;1521:2;1506:18;4534:158:103;1393:187:201;1386:173:105;;;;;;:::i;:::-;3518:19:103;;1479:7:105;3518:19:103;;;:10;:19;;;;;:27;3376:12;;3518:27;;;;;1386:173:105;;;;;2011:25:201;;;2067:2;2052:18;;2045:34;;;;1984:18;1386:173:105;1837:248:201;1450:45:97;;1492:3;1450:45;;;;;2236:25:201;;;2224:2;2209:18;1450:45:97;2090:177:201;4276:307:97;;;:::i;1990:850::-;;;;;;:::i;:::-;;:::i;:::-;;1225:119:105;;;;;;:::i;:::-;;:::i;4721:327:103:-;;;;;;:::i;:::-;;:::i;1304:141:97:-;;1350:95;1304:141;;3178:86:103;3250:9;;3178:86;;3250:9;;;;4990:36:201;;4978:2;4963:18;3178:86:103;4848:184:201;7503:130:97;;;:::i;5296:204:103:-;;;;;;:::i;:::-;;:::i;4888:161:97:-;;;;;;:::i;:::-;;:::i;5079:163::-;;;;;;:::i;:::-;;:::i;4035:212::-;;;;;;:::i;:::-;;:::i;2408:27:103:-;;;;;;;;5227:42:201;5215:55;;;5197:74;;5185:2;5170:18;2408:27:103;5037:240:201;3691:132:103;3797:21;;;;;;;3691:132;;192:50:102;;232:10;;;;;;;;;;;;;;;;;192:50;;3484:196:97;;;;;;:::i;:::-;;:::i;7782:128::-;;;;;;:::i;:::-;;:::i;3051:90:103:-;;;:::i;5758:226::-;;;;;;:::i;:::-;;:::i;4106:213::-;;;;;;:::i;:::-;;:::i;4613:104:97:-;4703:9;;;;4613:104;;4747:111;4837:16;;;;4747:111;;1601:113:105;;;:::i;2870:215:97:-;;;;;;:::i;:::-;;:::i;8069:223::-;;;;;;:::i;:::-;;:::i;5272:755::-;;;;;;:::i;:::-;;:::i;3115:339::-;;;;;;:::i;:::-;;:::i;4348:157:103:-;;;;;;:::i;:::-;4473:18;;;;4451:7;4473:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4348:157;1756:138:105;;;;;;:::i;:::-;1858:16;;1836:7;1858:16;;;:10;:16;;;;;:31;;;;;;;1756:138;3938:139:103;;;;;;:::i;:::-;;:::i;3710:296:97:-;;;;;;:::i;:::-;;:::i;2930:84:103:-;2976:13;3004:5;2997:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84;:::o;4534:158::-;4619:4;4631:39;678:10:4;4654:7:103;4663:6;4631:8;:39::i;:::-;-1:-1:-1;4683:4:103;4534:158;;;;:::o;4276:307:97:-;4364:7;4379:27;4409:19;3376:12:103;;;3293:100;4409:19:97;4379:49;-1:-1:-1;4439:24:97;4435:53;;4480:1;4473:8;;;4276:307;:::o;4435:53::-;4560:16;;4528:49;;;;;:31;4560:16;;;4528:49;;;5197:74:201;4501:77:97;;4528:4;:31;;;;5170:18:201;;4528:49:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4501:19;;:26;:77::i;:::-;4494:84;;;4276:307;:::o;1990:850::-;1217:12:71;;330:3:62;;1217:12:71;;;:31;;-1:-1:-1;2436:9:71;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;9035:2:201;1202:146:71;;;9017:21:201;9074:2;9054:18;;;9047:30;9113:34;9093:18;;;9086:62;9184:16;9164:18;;;9157:44;9218:19;;1202:146:71;;;;;;;;;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;2334:4:97::1;2314:24;;:16;:24;;;2340:34;;;;;;;;;;;;;;;;::::0;2306:69:::1;;;;;;;;;;;;;;:::i;:::-;;2381:20;2390:10;;2381:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;2381:8:97::1;::::0;-1:-1:-1;;;2381:20:97:i:1;:::-;2407:24;2418:12;;2407:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;2407:10:97::1;::::0;-1:-1:-1;;;2407:24:97:i:1;:::-;7979:9:103::0;:23;;;;;;;;;;2472:9:97::1;:20:::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;;;2498:16:::1;:34:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;2538:21:::1;:44:::0;;;;::::1;2472:20;2538:44;::::0;;;::::1;::::0;;;::::1;::::0;;2608:27:::1;:25;:27::i;:::-;2589:16;:46;;;;2697:4;2647:188;;2666:15;2647:188;;;2710:8;2734:20;2763:14;2785:10;;2803:12;;2823:6;;2647:188;;;;;;;;;;;;;;:::i;:::-;;;;;;;;1510:14:71::0;1506:55;;;1534:12;:20;;;;;;1506:55;1158:407;;1990:850:97;;;;;;;;;;;:::o;1225:119:105:-;3518:19:103;;;1296:7:105;3518:19:103;;;:10;:19;;;;;:27;;;1318:21:105;1311:28;1225:119;-1:-1:-1;;1225:119:105:o;4721:327:103:-;4845:4;4857:18;4878;:6;:16;:18::i;:::-;4933:19;;;;;;;:11;:19;;;;;;;;678:10:4;4933:33:103;;;;;;;;;4857:39;;-1:-1:-1;4902:78:103;;4911:6;;678:10:4;4933:46:103;;;;;;;:::i;:::-;4902:8;:78::i;:::-;4986:40;4996:6;5004:9;5015:10;4986:9;:40::i;:::-;-1:-1:-1;5039:4:103;;4721:327;-1:-1:-1;;;;4721:327:103:o;7503:130:97:-;7582:7;7604:24;:22;:24::i;:::-;7597:31;;7503:130;:::o;5296:204:103:-;678:10:4;5386:4:103;5430:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;5386:4;;5398:80;;5421:7;;5430:47;;5467:10;;5430:47;:::i;4888:161:97:-;1519:26:103;;;;;;;;;;;;;;;;;678:10:4;1512:4:103;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4998:16:97::1;::::0;4991:53:::1;::::0;4998:16:::1;;5029:6:::0;5037;4991:37:::1;:53::i;:::-;4888:161:::0;;:::o;5079:163::-;1519:26:103;;;;;;;;;;;;;;;;;678:10:4;1512:4:103;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;5079:163:97;;;:::o;4035:212::-;4224:16;;4192:49;;;;;:31;4224:16;;;4192:49;;;5197:74:201;4141:7:97;;4163:79;;4192:4;:31;;;;;;5170:18:201;;4192:49:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3518:19:103;;;3496:7;3518:19;;;:10;:19;;;;;:27;;;4163:21:97;:28;;:79::i;3484:196::-;1519:26:103;;;;;;;;;;;;;;;;;678:10:4;1512:4:103;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3584:11:97;3580:38:::1;;4888:161:::0;;:::o;3580:38::-:1;3650:9;::::0;3623:52:::1;::::0;3643:4:::1;::::0;3650:9:::1;;3661:6:::0;3669:5;3623:11:::1;:52::i;:::-;;3484:196:::0;;:::o;7782:128::-;1342:14:102;;;7864:7:97;1342:14:102;;;:7;:14;;;;;;7886:19:97;1260:101:102;3051:90:103;3101:13;3129:7;3122:14;;;;;:::i;5758:226::-;678:10:4;5865:4:103;5909:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;5865:4;;5877:85;;5900:7;;5909:52;;5946:15;;5909:52;:::i;4106:213::-;4194:4;4206:18;4227;:6;:16;:18::i;:::-;4206:39;-1:-1:-1;4251:46:103;678:10:4;4275:9:103;4286:10;4251:9;:46::i;:::-;-1:-1:-1;4310:4:103;;4106:213;-1:-1:-1;;;4106:213:103:o;1601:113:105:-;1668:7;1690:19;3376:12:103;;;3293:100;2870:215:97;1519:26:103;;;;;;;;;;;;;;;;;3015:4:97;;678:10:4;1512:4:103;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3034:46:97::1;3046:6;3054:10;3066:6;3074:5;3034:11;:46::i;:::-;3027:53:::0;2870:215;-1:-1:-1;;;;;2870:215:97:o;8069:223::-;1211:22:103;1248:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1297;;;;;1320:10;1297:34;;;5197:74:201;1211:72:103;;-1:-1:-1;1297:22:103;;;;;;5170:18:201;;1297:34:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1333:28;;;;;;;;;;;;;;;;;1289:73;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;8189:16:97::1;::::0;8207:35:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;;8189:16:::1;8180:25:::0;;::::1;8189:16:::0;::::1;8180:25;;8172:71;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;8249:38:97::1;:26;::::0;::::1;8276:2:::0;8280:6;8249:26:::1;:38::i;5272:755::-:0;5469:29;;;;;;;;;;;;;;;;;5448:19;;;5440:59;;;;;;;;;;;;;:::i;:::-;;5563:8;5544:15;:27;;5573:25;;;;;;;;;;;;;;;;;5536:63;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5633:14:97;;;5605:25;5633:14;;;:7;:14;;;;;;;5733:18;:16;:18::i;:::-;5771:79;;;1350:95;5771:79;;;11789:25:201;11833:42;11911:15;;;11891:18;;;11884:43;;;;11963:15;;;11943:18;;;11936:43;11995:18;;;11988:34;;;12038:19;;;12031:35;;;12082:19;;;12075:35;;;11761:19;;5771:79:97;;;;;;;;;;;;5761:90;;;;;;5687:172;;;;;;;;12391:66:201;12379:79;;12483:1;12474:11;;12467:27;;;;12519:2;12510:12;;12503:28;12556:2;12547:12;;12121:444;5687:172:97;;;;;;;;;;;;;;5670:195;;5687:172;5670:195;;;;5888:26;;;;;;;;;12797:25:201;;;12870:4;12858:17;;12838:18;;;12831:45;;;;12892:18;;;12885:34;;;12935:18;;;12928:34;;;5670:195:97;-1:-1:-1;5888:26:97;;12769:19:201;;5888:26:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5879:35;;:5;:35;;;5916:24;;;;;;;;;;;;;;;;;5871:70;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5964:21:97;:17;5984:1;5964:21;:::i;:::-;5947:14;;;;;;;:7;:14;;;;;:38;5991:31;5955:5;6007:7;6016:5;5991:8;:31::i;:::-;5434:593;;5272:755;;;;;;;:::o;3115:339::-;1519:26:103;;;;;;;;;;;;;;;;;678:10:4;1512:4:103;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3265:54:97::1;3277:4;3283:20;3305:6;3313:5;3265:11;:54::i;:::-;3329:37;::::0;::::1;3361:4;3329:37;3325:125;;3383:16;::::0;3376:67:::1;::::0;3383:16:::1;;3414:20:::0;3436:6;3376:37:::1;:67::i;3938:139:103:-:0;1211:22;1248:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1297;;;;;1320:10;1297:34;;;5197:74:201;1211:72:103;;-1:-1:-1;1297:22:103;;;;;;5170:18:201;;1297:34:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1333:28;;;;;;;;;;;;;;;;;1289:73;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;4038:21:103::1;:34:::0;;::::1;::::0;;::::1;;;::::0;;;::::1;::::0;;;::::1;::::0;;3938:139::o;3710:296:97:-;1519:26:103;;;;;;;;;;;;;;;;;678:10:4;1512:4:103;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3968:33:97::1;3978:4;3984:2;3988:5;3995;3968:9;:33::i;7235:173:103:-:0;7324:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7371:32;;2236:25:201;;;7371:32:103;;2209:18:201;7371:32:103;;;;;;;7235:173;;;:::o;2253:319:90:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:90;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;7513:76:103:-;7569:15;;;;:5;;:15;;;;;:::i;7701:84::-;7761:19;;;;:7;;:19;;;;;:::i;1475:298:102:-;1535:7;292:95;1645:15;:13;:15::i;:::-;1629:33;;;;;;;232:10;;;;;;;;;;;;;;;;1582:178;;;;;13232:25:201;;;;13273:18;;;13266:34;;;;1674:26:102;13316:18:201;;;13309:34;1712:13:102;13359:18:201;;;13352:34;1745:4:102;13402:19:201;;;13395:84;13204:19;;1582:178:102;;;;;;;;;;;;1563:205;;;;;;1550:218;;1475:298;:::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;13692:2:201;1635:78:12;;;13674:21:201;13731:2;13711:18;;;13704:30;13770:34;13750:18;;;13743:62;13841:9;13821:18;;;13814:37;13868:19;;1635:78:12;13490:403:201;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;7213:131:97:-;7306:33;7316:4;7322:2;7326:6;7306:33;;7334:4;7306:9;:33::i;867:185:102:-;924:7;960:8;943:13;:25;939:69;;;-1:-1:-1;985:16:102;;;867:185::o;939:69::-;1020:27;:25;:27::i;441:657:1:-;668:4;662:11;538:23;680:36;;;765:42;757:51;;753:1;730:25;;723:86;846:2;823:26;;816:41;;;538:23;519:16;;916:2;662:11;519:16;887:5;880;875:50;865:154;;958:16;955:1;952;937:38;994:16;991:1;984:27;865:154;;1039:28;1061:5;1039:21;:28::i;:::-;1031:62;;;;;;;14100:2:201;1031:62:1;;;14082:21:201;14139:2;14119:18;;;14112:30;14178:23;14158:18;;;14151:51;14219:18;;1031:62:1;13898:345:201;2295:763:105;2421:4;;2456:20;:6;2470:5;2456:13;:20::i;:::-;2509:26;;;;;;;;;;;;;;;;;2433:43;;-1:-1:-1;2490:17:105;2482:54;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3518:19:103;;;2543:21:105;3518:19:103;;;:10;:19;;;;;:27;;;;;;2543:21:105;2662:59;;3518:27:103;;2683:37:105;;;;2662:20;:59::i;:::-;2626:27;:13;2647:5;2626:20;:27::i;:::-;:95;;;;:::i;:::-;2600:121;;2768:17;:5;:15;:17::i;:::-;2728:22;;;;;;;:10;:22;;;;;:57;;;;;;;;;;;;;;;;2792:43;2739:10;2810:24;:12;:22;:24::i;:::-;2792:5;:43::i;:::-;2842:20;2865:24;2874:15;2865:6;:24;:::i;:::-;2842:47;;2921:10;2900:46;;2917:1;2900:46;;;2933:12;2900:46;;;;2236:25:201;;2224:2;2209:18;;2090:177;2900:46:105;;;;;;;;2957:62;;;14450:25:201;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;2957:62:105;;;;;;;;;;;14438:2:201;14423:18;2957:62:105;;;;;;;-1:-1:-1;;3034:18:105;;2295:763;-1:-1:-1;;;;;;2295:763:105:o;3512:888::-;3609:20;3632;:6;3646:5;3632:13;:20::i;:::-;3685:26;;;;;;;;;;;;;;;;;3609:43;;-1:-1:-1;3666:17:105;3658:54;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3518:19:103;;;3719:21:105;3518:19:103;;;:10;:19;;;;;:27;;;;;;3719:21:105;3832:53;;3518:27:103;;3853:31:105;;;;3832:20;:53::i;:::-;3796:27;:13;3817:5;3796:20;:27::i;:::-;:89;;;;:::i;:::-;3770:115;;3926:17;:5;:15;:17::i;:::-;3892:16;;;;;;;:10;:16;;;;;:51;;;;;;;;;;;;;;;;3950:37;3903:4;3962:24;:12;:22;:24::i;:::-;3950:5;:37::i;:::-;4016:6;3998:15;:24;3994:402;;;4032:20;4055:24;4073:6;4055:15;:24;:::i;:::-;4032:47;;4113:4;4092:40;;4109:1;4092:40;;;4119:12;4092:40;;;;2236:25:201;;2224:2;2209:18;;2090:177;4092:40:105;;;;;;;;4145:54;;;14450:25:201;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;4145:54:105;;;;;;;;14438:2:201;14423:18;4145:54:105;;;;;;;4024:182;3994:402;;;4220:20;4243:24;4252:15;4243:6;:24;:::i;:::-;4220:47;;4303:1;4280:40;;4289:4;4280:40;;;4307:12;4280:40;;;;2236:25:201;;2224:2;2209:18;;2090:177;4280:40:105;;;;;;;;4333:56;;;14450:25:201;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;4333:56:105;;;;;;;;;;;14438:2:201;14423:18;4333:56:105;;;;;;;;4212:184;3994:402;3603:797;;;3512:888;;;;:::o;6387:592:97:-;6512:16;;6551:48;;;;;6512:16;;;;6551:48;;;5197:74:201;;;6512:16:97;6486:23;;6551:4;:31;;;;;;5170:18:201;;6551:48:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6535:64;;6606:25;6634:35;6663:5;6634:21;6650:4;3518:19:103;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;6634:35:97;6606:63;;6675:23;6701:33;6728:5;6701:19;6717:2;3518:19:103;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;6701:33:97;6675:59;;6741:40;6757:4;6763:2;6767:6;6775:5;6741:15;:40::i;:::-;6792:8;6788:121;;;6810:92;;;;;:21;14938:15:201;;;6810:92:97;;;14920:34:201;14990:15;;;14970:18;;;14963:43;15042:15;;;15022:18;;;15015:43;15074:18;;;15067:34;;;15117:19;;;15110:35;;;15161:19;;;15154:35;;;6810:4:97;:21;;;;14831:19:201;;6810:92:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6788:121;6920:54;;;;;;;;6946:20;:6;6960:5;6946:13;:20::i;:::-;6920:54;;;2011:25:201;;;2067:2;2052:18;;2045:34;;;1984:18;6920:54:97;1837:248:201;7943:96:97;8000:13;8028:6;:4;:6::i;2198:2524:1:-;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;4611:1;4605:8;4598:16;4591:24;4580:35;;3538:1174;;2198:2524;;;:::o;2840:322:90:-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:90;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;1069:519:104:-;1165:12;;1198:23;;;;1165:12;1198:23;:::i;:::-;1183:12;:38;1256:19;;;1228:25;1256:19;;;:10;:19;;;;;:27;;;1319:26;1339:6;1256:27;1319:26;:::i;:::-;1289:19;;;;;;;;:10;:19;;;;;:56;;;;;;;;;;;;;;;;1406:21;;1289:56;1406:21;;;1437:48;;1433:151;;1495:82;;;;;:38;15678:55:201;;;1495:82:104;;;15660:74:201;15750:18;;;15743:34;;;15825;15813:47;;15793:18;;;15786:75;1495:38:104;;;;;15633:18:201;;1495:82:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1433:151;1134:454;;;1069:519;;:::o;1781:520::-;1877:12;;1910:23;;;;1877:12;1910:23;:::i;:::-;1895:12;:38;1968:19;;;1940:25;1968:19;;;:10;:19;;;;;:27;;;2031:26;2051:6;1968:27;2031:26;:::i;4767:1203:105:-;3518:19:103;;;4867:27:105;3518:19:103;;;:10;:19;;;;;:27;;;;;;4867::105;5000:61;;3518:27:103;;5027:33:105;;;;5000:26;:61::i;:::-;4958:33;:19;4985:5;4958:26;:33::i;:::-;:103;;;;:::i;:::-;4926:135;;5068:30;5101:26;5117:9;3518:19:103;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;5101:26:105;5243:21;;;5133:32;5243:21;;;:10;:21;;;;;:36;5068:59;;-1:-1:-1;5133:32:105;5213:67;;5068:59;;5243:36;;;;;5213:29;:67::i;:::-;5168:36;:22;5198:5;5168:29;:36::i;:::-;:112;;;;:::i;:::-;5133:147;;5323:17;:5;:15;:17::i;:::-;5287:18;;;;;;;:10;:18;;;;;:53;;;;;;;;;;;;;;;;5385:17;:5;:15;:17::i;:::-;5346:21;;;;;;;:10;:21;;;;;:56;;;;;;;;;;;;;;;;5409:68;5425:6;5357:9;5444:32;:20;:6;5458:5;5444:13;:20::i;:::-;:30;:32::i;:::-;5409:15;:68::i;:::-;5488:25;;5484:194;;5528:51;;2236:25:201;;;5528:51:105;;;;5545:1;;5528:51;;2224:2:201;2209:18;5528:51:105;;;;;;;5592:79;;;14450:25:201;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;5592:79:105;;;;;;678:10:4;;5592:79:105;;;;;14438:2:201;5592:79:105;;;5484:194;5698:9;5688:19;;:6;:19;;;;:51;;;;;5738:1;5711:24;:28;5688:51;5684:235;;;5754:57;;2236:25:201;;;5754:57:105;;;;5771:1;;5754:57;;2224:2:201;2209:18;5754:57:105;;;;;;;5824:88;;;14450:25:201;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;5824:88:105;;;;;;678:10:4;;5824:88:105;;;;;14438:2:201;5824:88:105;;;5684:235;5947:9;5930:35;;5939:6;5930:35;;;5958:6;5930:35;;;;2236:25:201;;2224:2;2209:18;;2090:177;6215:772:103;6335:18;;;6308:24;6335:18;;;:10;:18;;;;;:26;;;6396:25;6415:6;6335:26;6396:25;:::i;:::-;6367:18;;;;;;;;:10;:18;;;;;;:54;;;;;;;;;;;6457:21;;;;;;:29;;6524:28;6546:6;6457:29;6524:28;:::i;:::-;6492:21;;;;;;;;:10;:21;;;;;:60;;;;;;;;;;;;;;;;6613:21;;6492:60;6613:21;;;6644:48;;6640:343;;6731:12;;6751:84;;;;;:38;15678:55:201;;;6751:84:103;;;15660:74:201;15750:18;;;15743:34;;;15825;15813:47;;15793:18;;;15786:75;6751:38:103;;;;;15633:18:201;;6751:84:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6857:9;6847:19;;:6;:19;;;6843:134;;6878:90;;;;;:38;15678:55:201;;;6878:90:103;;;15660:74:201;15750:18;;;15743:34;;;15825;15813:47;;15793:18;;;15786:75;6878:38:103;;;;;15633:18:201;;6878:90:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6694:289;6640:343;6302:685;;;6215:772;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:531:201;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;336:6;333:1;330:13;327:87;;;402:1;395:4;386:6;381:3;377:16;373:27;366:38;327:87;-1:-1:-1;459:2:201;447:15;464:66;443:88;434:98;;;;534:4;430:109;;14:531;-1:-1:-1;;14:531:201:o;550:220::-;699:2;688:9;681:21;662:4;719:45;760:2;749:9;745:18;737:6;719:45;:::i;:::-;711:53;550:220;-1:-1:-1;;;550:220:201:o;775:154::-;861:42;854:5;850:54;843:5;840:65;830:93;;919:1;916;909:12;830:93;775:154;:::o;934:134::-;1002:20;;1031:31;1002:20;1031:31;:::i;:::-;934:134;;;:::o;1073:315::-;1141:6;1149;1202:2;1190:9;1181:7;1177:23;1173:32;1170:52;;;1218:1;1215;1208:12;1170:52;1257:9;1244:23;1276:31;1301:5;1276:31;:::i;:::-;1326:5;1378:2;1363:18;;;;1350:32;;-1:-1:-1;;;1073:315:201:o;1585:247::-;1644:6;1697:2;1685:9;1676:7;1672:23;1668:32;1665:52;;;1713:1;1710;1703:12;1665:52;1752:9;1739:23;1771:31;1796:5;1771:31;:::i;2272:156::-;2338:20;;2398:4;2387:16;;2377:27;;2367:55;;2418:1;2415;2408:12;2433:348;2485:8;2495:6;2549:3;2542:4;2534:6;2530:17;2526:27;2516:55;;2567:1;2564;2557:12;2516:55;-1:-1:-1;2590:20:201;;2633:18;2622:30;;2619:50;;;2665:1;2662;2655:12;2619:50;2702:4;2694:6;2690:17;2678:29;;2754:3;2747:4;2738:6;2730;2726:19;2722:30;2719:39;2716:59;;;2771:1;2768;2761:12;2716:59;2433:348;;;;;:::o;2786:1414::-;2989:6;2997;3005;3013;3021;3029;3037;3045;3053;3061;3069:7;3123:3;3111:9;3102:7;3098:23;3094:33;3091:53;;;3140:1;3137;3130:12;3091:53;3163:29;3182:9;3163:29;:::i;:::-;3153:39;;3211:38;3245:2;3234:9;3230:18;3211:38;:::i;:::-;3201:48;;3268:38;3302:2;3291:9;3287:18;3268:38;:::i;:::-;3258:48;;3325:38;3359:2;3348:9;3344:18;3325:38;:::i;:::-;3315:48;;3382:37;3414:3;3403:9;3399:19;3382:37;:::i;:::-;3372:47;;3438:18;3506:2;3499:3;3488:9;3484:19;3471:33;3468:41;3465:61;;;3522:1;3519;3512:12;3465:61;3561:86;3639:7;3631:3;3620:9;3616:19;3603:33;3592:9;3588:49;3561:86;:::i;:::-;3666:8;;-1:-1:-1;3693:8:201;-1:-1:-1;3744:3:201;3729:19;;3716:33;3713:41;-1:-1:-1;3710:61:201;;;3767:1;3764;3757:12;3710:61;3806:86;3884:7;3876:3;3865:9;3861:19;3848:33;3837:9;3833:49;3806:86;:::i;:::-;3911:8;;-1:-1:-1;3938:8:201;-1:-1:-1;3989:3:201;3974:19;;3961:33;3958:41;-1:-1:-1;3955:61:201;;;4012:1;4009;4002:12;3955:61;;4052:86;4130:7;4122:3;4111:9;4107:19;4094:33;4083:9;4079:49;4052:86;:::i;:::-;4157:8;4147:18;;4185:9;4174:20;;;;2786:1414;;;;;;;;;;;;;;:::o;4205:456::-;4282:6;4290;4298;4351:2;4339:9;4330:7;4326:23;4322:32;4319:52;;;4367:1;4364;4357:12;4319:52;4406:9;4393:23;4425:31;4450:5;4425:31;:::i;:::-;4475:5;-1:-1:-1;4532:2:201;4517:18;;4504:32;4545:33;4504:32;4545:33;:::i;:::-;4205:456;;4597:7;;-1:-1:-1;;;4651:2:201;4636:18;;;;4623:32;;4205:456::o;5770:248::-;5838:6;5846;5899:2;5887:9;5878:7;5874:23;5870:32;5867:52;;;5915:1;5912;5905:12;5867:52;-1:-1:-1;;5938:23:201;;;6008:2;5993:18;;;5980:32;;-1:-1:-1;5770:248:201:o;6254:525::-;6340:6;6348;6356;6364;6417:3;6405:9;6396:7;6392:23;6388:33;6385:53;;;6434:1;6431;6424:12;6385:53;6473:9;6460:23;6492:31;6517:5;6492:31;:::i;:::-;6542:5;-1:-1:-1;6599:2:201;6584:18;;6571:32;6612:33;6571:32;6612:33;:::i;:::-;6254:525;;6664:7;;-1:-1:-1;;;;6718:2:201;6703:18;;6690:32;;6769:2;6754:18;6741:32;;6254:525::o;6784:734::-;6895:6;6903;6911;6919;6927;6935;6943;6996:3;6984:9;6975:7;6971:23;6967:33;6964:53;;;7013:1;7010;7003:12;6964:53;7052:9;7039:23;7071:31;7096:5;7071:31;:::i;:::-;7121:5;-1:-1:-1;7178:2:201;7163:18;;7150:32;7191:33;7150:32;7191:33;:::i;:::-;7243:7;-1:-1:-1;7297:2:201;7282:18;;7269:32;;-1:-1:-1;7348:2:201;7333:18;;7320:32;;-1:-1:-1;7371:37:201;7403:3;7388:19;;7371:37;:::i;:::-;7361:47;;7455:3;7444:9;7440:19;7427:33;7417:43;;7507:3;7496:9;7492:19;7479:33;7469:43;;6784:734;;;;;;;;;;:::o;7523:388::-;7591:6;7599;7652:2;7640:9;7631:7;7627:23;7623:32;7620:52;;;7668:1;7665;7658:12;7620:52;7707:9;7694:23;7726:31;7751:5;7726:31;:::i;:::-;7776:5;-1:-1:-1;7833:2:201;7818:18;;7805:32;7846:33;7805:32;7846:33;:::i;:::-;7898:7;7888:17;;;7523:388;;;;;:::o;8202:437::-;8281:1;8277:12;;;;8324;;;8345:61;;8399:4;8391:6;8387:17;8377:27;;8345:61;8452:2;8444:6;8441:14;8421:18;8418:38;8415:218;;;8489:77;8486:1;8479:88;8590:4;8587:1;8580:15;8618:4;8615:1;8608:15;8644:184;8714:6;8767:2;8755:9;8746:7;8742:23;8738:32;8735:52;;;8783:1;8780;8773:12;8735:52;-1:-1:-1;8806:16:201;;8644:184;-1:-1:-1;8644:184:201:o;9248:326::-;9337:6;9332:3;9325:19;9389:6;9382:5;9375:4;9370:3;9366:14;9353:43;;9441:1;9434:4;9425:6;9420:3;9416:16;9412:27;9405:38;9307:3;9563:4;9493:66;9488:2;9480:6;9476:15;9472:88;9467:3;9463:98;9459:109;9452:116;;9248:326;;;;:::o;9579:928::-;9895:4;9924:42;10005:2;9997:6;9993:15;9982:9;9975:34;10057:2;10049:6;10045:15;10040:2;10029:9;10025:18;10018:43;;10109:4;10101:6;10097:17;10092:2;10081:9;10077:18;10070:45;10151:3;10146:2;10135:9;10131:18;10124:31;10178:63;10236:3;10225:9;10221:19;10213:6;10205;10178:63;:::i;:::-;10290:9;10282:6;10278:22;10272:3;10261:9;10257:19;10250:51;10324:50;10367:6;10359;10351;10324:50;:::i;:::-;10310:64;;10423:9;10415:6;10411:22;10405:3;10394:9;10390:19;10383:51;10451:50;10494:6;10486;10478;10451:50;:::i;:::-;10443:58;9579:928;-1:-1:-1;;;;;;;;;;;;9579:928:201:o;10512:184::-;10564:77;10561:1;10554:88;10661:4;10658:1;10651:15;10685:4;10682:1;10675:15;10701:125;10741:4;10769:1;10766;10763:8;10760:34;;;10774:18;;:::i;:::-;-1:-1:-1;10811:9:201;;10701:125::o;10831:128::-;10871:3;10902:1;10898:6;10895:1;10892:13;10889:39;;;10908:18;;:::i;:::-;-1:-1:-1;10944:9:201;;10831:128::o;10964:251::-;11034:6;11087:2;11075:9;11066:7;11062:23;11058:32;11055:52;;;11103:1;11100;11093:12;11055:52;11135:9;11129:16;11154:31;11179:5;11154:31;:::i;11220:277::-;11287:6;11340:2;11328:9;11319:7;11315:23;11311:32;11308:52;;;11356:1;11353;11346:12;11308:52;11388:9;11382:16;11441:5;11434:13;11427:21;11420:5;11417:32;11407:60;;11463:1;11460;11453:12;15200:253;15240:3;15268:34;15329:2;15326:1;15322:10;15359:2;15356:1;15352:10;15390:3;15386:2;15382:12;15377:3;15374:21;15371:47;;;15398:18;;:::i;:::-;15434:13;;15200:253;-1:-1:-1;;;;15200:253:201:o;15872:246::-;15912:4;15941:34;16025:10;;;;15995;;16047:12;;;16044:38;;;16062:18;;:::i;:::-;16099:13;;15872:246;-1:-1:-1;;;15872:246:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"2757000","executionCost":"infinite","totalCost":"infinite"},"external":{"ATOKEN_REVISION()":"308","DOMAIN_SEPARATOR()":"infinite","EIP712_REVISION()":"infinite","PERMIT_TYPEHASH()":"241","POOL()":"infinite","RESERVE_TREASURY_ADDRESS()":"2396","UNDERLYING_ASSET_ADDRESS()":"2418","allowance(address,address)":"infinite","approve(address,uint256)":"24565","balanceOf(address)":"infinite","burn(address,address,uint256,uint256)":"infinite","decimals()":"2357","decreaseAllowance(address,uint256)":"26864","getIncentivesController()":"2429","getPreviousIndex(address)":"2590","getScaledUserBalanceAndSupply(address)":"4737","handleRepayment(address,address,uint256)":"infinite","increaseAllowance(address,uint256)":"26934","initialize(address,address,address,address,uint8,string,string,bytes)":"infinite","mint(address,address,uint256,uint256)":"infinite","mintToTreasury(uint256,uint256)":"infinite","name()":"infinite","nonces(address)":"2631","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"infinite","rescueTokens(address,address,uint256)":"infinite","scaledBalanceOf(address)":"2626","scaledTotalSupply()":"2375","setIncentivesController(address)":"infinite","symbol()":"infinite","totalSupply()":"infinite","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite","transferOnLiquidation(address,address,uint256)":"infinite","transferUnderlyingTo(address,uint256)":"infinite"},"internal":{"getRevision()":"infinite"}},"methodIdentifiers":{"ATOKEN_REVISION()":"0bd7ad3b","DOMAIN_SEPARATOR()":"3644e515","EIP712_REVISION()":"78160376","PERMIT_TYPEHASH()":"30adf81f","POOL()":"7535d246","RESERVE_TREASURY_ADDRESS()":"ae167335","UNDERLYING_ASSET_ADDRESS()":"b16a19de","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(address,address,uint256,uint256)":"d7020d0a","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","getIncentivesController()":"75d26413","getPreviousIndex(address)":"e0753986","getScaledUserBalanceAndSupply(address)":"0afbcdc9","handleRepayment(address,address,uint256)":"6fd97676","increaseAllowance(address,uint256)":"39509351","initialize(address,address,address,address,uint8,string,string,bytes)":"183fb413","mint(address,address,uint256,uint256)":"b3f1c93d","mintToTreasury(uint256,uint256)":"7df5bd3b","name()":"06fdde03","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","rescueTokens(address,address,uint256)":"cea9d26f","scaledBalanceOf(address)":"1da24f3e","scaledTotalSupply()":"b1bf962d","setIncentivesController(address)":"e655dbd8","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOnLiquidation(address,address,uint256)":"f866c319","transferUnderlyingTo(address,uint256)":"4efecaa5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"}],\"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\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"BalanceTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"aTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"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\":\"ATOKEN_REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EIP712_REVISION\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_TREASURY_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"user\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiverOfUnderlying\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getPreviousIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getScaledUserBalanceAndSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"handleRepayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"initializingPool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"aTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mintToTreasury\",\"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\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"rescueTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"scaledBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scaledTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setIncentivesController\",\"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\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferOnLiquidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferUnderlyingTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Overrides the base function to fully implement IATokensee `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation\"},\"RESERVE_TREASURY_ADDRESS()\":{\"returns\":{\"_0\":\"Address of the Aave treasury\"}},\"UNDERLYING_ASSET_ADDRESS()\":{\"returns\":{\"_0\":\"The address of the underlying asset\"}},\"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`.\"},\"burn(address,address,uint256,uint256)\":{\"details\":\"In some instances, the mint event could be emitted from a burn transaction if the amount to burn is less than the interest that the user accrued\",\"params\":{\"amount\":\"The amount being burned\",\"from\":\"The address from which the aTokens will be burned\",\"index\":\"The next liquidity index of the reserve\",\"receiverOfUnderlying\":\"The address that will receive the underlying\"}},\"decreaseAllowance(address,uint256)\":{\"params\":{\"spender\":\"The user allowed to spend on behalf of _msgSender()\",\"subtractedValue\":\"The amount being subtracted to the allowance\"},\"returns\":{\"_0\":\"`true`\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"The address of the Incentives Controller\"}},\"getPreviousIndex(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The last index interest was accrued to the user's balance, expressed in ray\"}},\"getScaledUserBalanceAndSupply(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The scaled balance of the user\",\"_1\":\"The scaled total supply\"}},\"handleRepayment(address,address,uint256)\":{\"details\":\"The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\",\"params\":{\"amount\":\"The amount getting repaid\",\"onBehalfOf\":\"The address of the user who will get his debt reduced/removed\",\"user\":\"The user executing the repayment\"}},\"increaseAllowance(address,uint256)\":{\"params\":{\"addedValue\":\"The amount being added to the allowance\",\"spender\":\"The user allowed to spend on behalf of _msgSender()\"},\"returns\":{\"_0\":\"`true`\"}},\"initialize(address,address,address,address,uint8,string,string,bytes)\":{\"params\":{\"aTokenDecimals\":\"The decimals of the aToken, same as the underlying asset's\",\"aTokenName\":\"The name of the aToken\",\"aTokenSymbol\":\"The symbol of the aToken\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"treasury\":\"The address of the Aave treasury, receiving the fees on this aToken\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}},\"mint(address,address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of tokens getting minted\",\"caller\":\"The address performing the mint\",\"index\":\"The next liquidity index of the reserve\",\"onBehalfOf\":\"The address of the user that will receive the minted aTokens\"},\"returns\":{\"_0\":\"`true` if the the previous balance of the user was 0\"}},\"mintToTreasury(uint256,uint256)\":{\"params\":{\"amount\":\"The amount of tokens getting minted\",\"index\":\"The next liquidity index of the reserve\"}},\"nonces(address)\":{\"details\":\"Overrides the base function to fully implement IATokensee `EIP712Base.nonces()` for more detailed documentation\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\",\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"owner\":\"The owner of the funds\",\"r\":\"Signature param\",\"s\":\"Signature param\",\"spender\":\"The spender\",\"v\":\"Signature param\",\"value\":\"The amount\"}},\"rescueTokens(address,address,uint256)\":{\"params\":{\"amount\":\"The amount of token to transfer\",\"to\":\"The address of the recipient\",\"token\":\"The address of the token\"}},\"scaledBalanceOf(address)\":{\"details\":\"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update\",\"params\":{\"user\":\"The user whose balance is calculated\"},\"returns\":{\"_0\":\"The scaled balance of the user\"}},\"scaledTotalSupply()\":{\"returns\":{\"_0\":\"The scaled total supply\"}},\"setIncentivesController(address)\":{\"params\":{\"controller\":\"the new Incentives controller\"}},\"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.\"},\"transferOnLiquidation(address,address,uint256)\":{\"params\":{\"from\":\"The address getting liquidated, current owner of the aTokens\",\"to\":\"The recipient\",\"value\":\"The amount of tokens getting transferred\"}},\"transferUnderlyingTo(address,uint256)\":{\"details\":\"Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\",\"params\":{\"amount\":\"The amount getting transferred\",\"target\":\"The recipient of the underlying\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"RESERVE_TREASURY_ADDRESS()\":{\"notice\":\"Returns the address of the Aave treasury, receiving the fees on this aToken.\"},\"UNDERLYING_ASSET_ADDRESS()\":{\"notice\":\"Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\"},\"burn(address,address,uint256,uint256)\":{\"notice\":\"Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\"},\"decreaseAllowance(address,uint256)\":{\"notice\":\"Decreases the allowance of spender to spend _msgSender() tokens\"},\"getIncentivesController()\":{\"notice\":\"Returns the address of the Incentives Controller contract\"},\"getPreviousIndex(address)\":{\"notice\":\"Returns last index interest was accrued to the user's balance\"},\"getScaledUserBalanceAndSupply(address)\":{\"notice\":\"Returns the scaled balance of the user and the scaled total supply.\"},\"handleRepayment(address,address,uint256)\":{\"notice\":\"Handles the underlying received by the aToken after the transfer has been completed.\"},\"increaseAllowance(address,uint256)\":{\"notice\":\"Increases the allowance of spender to spend _msgSender() tokens\"},\"initialize(address,address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the aToken\"},\"mint(address,address,uint256,uint256)\":{\"notice\":\"Mints `amount` aTokens to `user`\"},\"mintToTreasury(uint256,uint256)\":{\"notice\":\"Mints aTokens to the reserve treasury\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Allow passing a signed message to approve spending\"},\"rescueTokens(address,address,uint256)\":{\"notice\":\"Rescue and transfer tokens locked in this contract\"},\"scaledBalanceOf(address)\":{\"notice\":\"Returns the scaled balance of the user.\"},\"scaledTotalSupply()\":{\"notice\":\"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\"},\"setIncentivesController(address)\":{\"notice\":\"Sets a new Incentives Controller\"},\"transferOnLiquidation(address,address,uint256)\":{\"notice\":\"Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\"},\"transferUnderlyingTo(address,uint256)\":{\"notice\":\"Transfers the underlying asset to `target`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol\":\"MockAToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {AToken} from '../../protocol/tokenization/AToken.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\ncontract MockAToken is AToken {\\n  constructor(IPool pool) AToken(pool) {}\\n\\n  function getRevision() internal pure override returns (uint256) {\\n    return 0x2;\\n  }\\n}\\n\",\"keccak256\":\"0x9746a6316fac4c667ff176c50fa727917864a9feef52cf99663f78301d1aa12d\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/AToken.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IAToken} from '../../interfaces/IAToken.sol';\\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\\nimport {IInitializableAToken} from '../../interfaces/IInitializableAToken.sol';\\nimport {ScaledBalanceTokenBase} from './base/ScaledBalanceTokenBase.sol';\\nimport {IncentivizedERC20} from './base/IncentivizedERC20.sol';\\nimport {EIP712Base} from './base/EIP712Base.sol';\\n\\n/**\\n * @title Aave ERC20 AToken\\n * @author Aave\\n * @notice Implementation of the interest bearing token for the Aave protocol\\n */\\ncontract AToken is VersionedInitializable, ScaledBalanceTokenBase, EIP712Base, IAToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  bytes32 public constant PERMIT_TYPEHASH =\\n    keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  uint256 public constant ATOKEN_REVISION = 0x1;\\n\\n  address internal _treasury;\\n  address internal _underlyingAsset;\\n\\n  /// @inheritdoc VersionedInitializable\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return ATOKEN_REVISION;\\n  }\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The address of the Pool contract\\n   */\\n  constructor(\\n    IPool pool\\n  ) ScaledBalanceTokenBase(pool, 'ATOKEN_IMPL', 'ATOKEN_IMPL', 0) EIP712Base() {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IInitializableAToken\\n  function initialize(\\n    IPool initializingPool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) public virtual override initializer {\\n    require(initializingPool == POOL, Errors.POOL_ADDRESSES_DO_NOT_MATCH);\\n    _setName(aTokenName);\\n    _setSymbol(aTokenSymbol);\\n    _setDecimals(aTokenDecimals);\\n\\n    _treasury = treasury;\\n    _underlyingAsset = underlyingAsset;\\n    _incentivesController = incentivesController;\\n\\n    _domainSeparator = _calculateDomainSeparator();\\n\\n    emit Initialized(\\n      underlyingAsset,\\n      address(POOL),\\n      treasury,\\n      address(incentivesController),\\n      aTokenDecimals,\\n      aTokenName,\\n      aTokenSymbol,\\n      params\\n    );\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external virtual override onlyPool returns (bool) {\\n    return _mintScaled(caller, onBehalfOf, amount, index);\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function burn(\\n    address from,\\n    address receiverOfUnderlying,\\n    uint256 amount,\\n    uint256 index\\n  ) external virtual override onlyPool {\\n    _burnScaled(from, receiverOfUnderlying, amount, index);\\n    if (receiverOfUnderlying != address(this)) {\\n      IERC20(_underlyingAsset).safeTransfer(receiverOfUnderlying, amount);\\n    }\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function mintToTreasury(uint256 amount, uint256 index) external virtual override onlyPool {\\n    if (amount == 0) {\\n      return;\\n    }\\n    _mintScaled(address(POOL), _treasury, amount, index);\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function transferOnLiquidation(\\n    address from,\\n    address to,\\n    uint256 value\\n  ) external virtual override onlyPool {\\n    // Being a normal transfer, the Transfer() and BalanceTransfer() are emitted\\n    // so no need to emit a specific event here\\n    _transfer(from, to, value, false);\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(\\n    address user\\n  ) public view virtual override(IncentivizedERC20, IERC20) returns (uint256) {\\n    return super.balanceOf(user).rayMul(POOL.getReserveNormalizedIncome(_underlyingAsset));\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override(IncentivizedERC20, IERC20) returns (uint256) {\\n    uint256 currentSupplyScaled = super.totalSupply();\\n\\n    if (currentSupplyScaled == 0) {\\n      return 0;\\n    }\\n\\n    return currentSupplyScaled.rayMul(POOL.getReserveNormalizedIncome(_underlyingAsset));\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function RESERVE_TREASURY_ADDRESS() external view override returns (address) {\\n    return _treasury;\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function UNDERLYING_ASSET_ADDRESS() external view override returns (address) {\\n    return _underlyingAsset;\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function transferUnderlyingTo(address target, uint256 amount) external virtual override onlyPool {\\n    IERC20(_underlyingAsset).safeTransfer(target, amount);\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function handleRepayment(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount\\n  ) external virtual override onlyPool {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IAToken\\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 override {\\n    require(owner != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, Errors.INVALID_EXPIRATION);\\n    uint256 currentValidNonce = _nonces[owner];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR(),\\n        keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, currentValidNonce, deadline))\\n      )\\n    );\\n    require(owner == ecrecover(digest, v, r, s), Errors.INVALID_SIGNATURE);\\n    _nonces[owner] = currentValidNonce + 1;\\n    _approve(owner, spender, value);\\n  }\\n\\n  /**\\n   * @notice Transfers the aTokens between two users. Validates the transfer\\n   * (ie checks for valid HF after the transfer) if required\\n   * @param from The source address\\n   * @param to The destination address\\n   * @param amount The amount getting transferred\\n   * @param validate True if the transfer needs to be validated, false otherwise\\n   */\\n  function _transfer(address from, address to, uint256 amount, bool validate) internal virtual {\\n    address underlyingAsset = _underlyingAsset;\\n\\n    uint256 index = POOL.getReserveNormalizedIncome(underlyingAsset);\\n\\n    uint256 fromBalanceBefore = super.balanceOf(from).rayMul(index);\\n    uint256 toBalanceBefore = super.balanceOf(to).rayMul(index);\\n\\n    super._transfer(from, to, amount, index);\\n\\n    if (validate) {\\n      POOL.finalizeTransfer(underlyingAsset, from, to, amount, fromBalanceBefore, toBalanceBefore);\\n    }\\n\\n    emit BalanceTransfer(from, to, amount.rayDiv(index), index);\\n  }\\n\\n  /**\\n   * @notice Overrides the parent _transfer to force validated transfer() and transferFrom()\\n   * @param from The source address\\n   * @param to The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address from, address to, uint128 amount) internal virtual override {\\n    _transfer(from, to, amount, true);\\n  }\\n\\n  /**\\n   * @dev Overrides the base function to fully implement IAToken\\n   * @dev see `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation\\n   */\\n  function DOMAIN_SEPARATOR() public view override(IAToken, EIP712Base) returns (bytes32) {\\n    return super.DOMAIN_SEPARATOR();\\n  }\\n\\n  /**\\n   * @dev Overrides the base function to fully implement IAToken\\n   * @dev see `EIP712Base.nonces()` for more detailed documentation\\n   */\\n  function nonces(address owner) public view override(IAToken, EIP712Base) returns (uint256) {\\n    return super.nonces(owner);\\n  }\\n\\n  /// @inheritdoc EIP712Base\\n  function _EIP712BaseId() internal view override returns (string memory) {\\n    return name();\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function rescueTokens(address token, address to, uint256 amount) external override onlyPoolAdmin {\\n    require(token != _underlyingAsset, Errors.UNDERLYING_CANNOT_BE_RESCUED);\\n    IERC20(token).safeTransfer(to, amount);\\n  }\\n}\\n\",\"keccak256\":\"0x2bebbe5c8078e3d300b67d27ed2ac6695f9d17d7c52f0f22879a04353a5c7db1\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/EIP712Base.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title EIP712Base\\n * @author Aave\\n * @notice Base contract implementation of EIP712.\\n */\\nabstract contract EIP712Base {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 internal _domainSeparator;\\n  uint256 internal immutable _chainId;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() {\\n    _chainId = block.chainid;\\n  }\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\\n    if (block.chainid == _chainId) {\\n      return _domainSeparator;\\n    }\\n    return _calculateDomainSeparator();\\n  }\\n\\n  /**\\n   * @notice Returns the nonce value for address specified as parameter\\n   * @param owner The address for which the nonce is being returned\\n   * @return The nonce value for the input address`\\n   */\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n\\n  /**\\n   * @notice Compute the current domain separator\\n   * @return The domain separator for the token\\n   */\\n  function _calculateDomainSeparator() internal view returns (bytes32) {\\n    return\\n      keccak256(\\n        abi.encode(\\n          EIP712_DOMAIN,\\n          keccak256(bytes(_EIP712BaseId())),\\n          keccak256(EIP712_REVISION),\\n          block.chainid,\\n          address(this)\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Returns the user readable name of signing domain (e.g. token name)\\n   * @return The name of the signing domain\\n   */\\n  function _EIP712BaseId() internal view virtual returns (string memory);\\n}\\n\",\"keccak256\":\"0xd4ed5763068be0ffb08219fc2f9f3c87487578cd0617dae06db26018054b89cd\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IncentivizedERC20} from './IncentivizedERC20.sol';\\n\\n/**\\n * @title MintableIncentivizedERC20\\n * @author Aave\\n * @notice Implements mint and burn functions for IncentivizedERC20\\n */\\nabstract contract MintableIncentivizedERC20 is IncentivizedERC20 {\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) IncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /**\\n   * @notice Mints tokens to an account and apply incentives if defined\\n   * @param account The address receiving tokens\\n   * @param amount The amount of tokens to mint\\n   */\\n  function _mint(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply + amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns tokens from an account and apply incentives if defined\\n   * @param account The account whose tokens are burnt\\n   * @param amount The amount of tokens to burn\\n   */\\n  function _burn(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply - amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance - amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xc24b3d20923fd55a160698a594e47247c2fb0b1e0c795e47f89ddd2da2918824\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {MintableIncentivizedERC20} from './MintableIncentivizedERC20.sol';\\n\\n/**\\n * @title ScaledBalanceTokenBase\\n * @author Aave\\n * @notice Basic ERC20 implementation of scaled balance token\\n */\\nabstract contract ScaledBalanceTokenBase is MintableIncentivizedERC20, IScaledBalanceToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) MintableIncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledBalanceOf(address user) external view override returns (uint256) {\\n    return super.balanceOf(user);\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getScaledUserBalanceAndSupply(\\n    address user\\n  ) external view override returns (uint256, uint256) {\\n    return (super.balanceOf(user), super.totalSupply());\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledTotalSupply() public view virtual override returns (uint256) {\\n    return super.totalSupply();\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getPreviousIndex(address user) external view virtual override returns (uint256) {\\n    return _userState[user].additionalData;\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to mint a scaled balance token.\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the scaled tokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function _mintScaled(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) internal returns (bool) {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_MINT_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(onBehalfOf);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[onBehalfOf].additionalData);\\n\\n    _userState[onBehalfOf].additionalData = index.toUint128();\\n\\n    _mint(onBehalfOf, amountScaled.toUint128());\\n\\n    uint256 amountToMint = amount + balanceIncrease;\\n    emit Transfer(address(0), onBehalfOf, amountToMint);\\n    emit Mint(caller, onBehalfOf, amountToMint, balanceIncrease, index);\\n\\n    return (scaledBalance == 0);\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to burn a scaled balance token.\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param user The user which debt is burnt\\n   * @param target The address that will receive the underlying, if any\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   */\\n  function _burnScaled(address user, address target, uint256 amount, uint256 index) internal {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_BURN_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(user);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[user].additionalData);\\n\\n    _userState[user].additionalData = index.toUint128();\\n\\n    _burn(user, amountScaled.toUint128());\\n\\n    if (balanceIncrease > amount) {\\n      uint256 amountToMint = balanceIncrease - amount;\\n      emit Transfer(address(0), user, amountToMint);\\n      emit Mint(user, user, amountToMint, balanceIncrease, index);\\n    } else {\\n      uint256 amountToBurn = amount - balanceIncrease;\\n      emit Transfer(user, address(0), amountToBurn);\\n      emit Burn(user, target, amountToBurn, balanceIncrease, index);\\n    }\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to transfer scaled balance tokens between two users\\n   * @dev It emits a mint event with the interest accrued per user\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount, uint256 index) internal {\\n    uint256 senderScaledBalance = super.balanceOf(sender);\\n    uint256 senderBalanceIncrease = senderScaledBalance.rayMul(index) -\\n      senderScaledBalance.rayMul(_userState[sender].additionalData);\\n\\n    uint256 recipientScaledBalance = super.balanceOf(recipient);\\n    uint256 recipientBalanceIncrease = recipientScaledBalance.rayMul(index) -\\n      recipientScaledBalance.rayMul(_userState[recipient].additionalData);\\n\\n    _userState[sender].additionalData = index.toUint128();\\n    _userState[recipient].additionalData = index.toUint128();\\n\\n    super._transfer(sender, recipient, amount.rayDiv(index).toUint128());\\n\\n    if (senderBalanceIncrease > 0) {\\n      emit Transfer(address(0), sender, senderBalanceIncrease);\\n      emit Mint(_msgSender(), sender, senderBalanceIncrease, senderBalanceIncrease, index);\\n    }\\n\\n    if (sender != recipient && recipientBalanceIncrease > 0) {\\n      emit Transfer(address(0), recipient, recipientBalanceIncrease);\\n      emit Mint(_msgSender(), recipient, recipientBalanceIncrease, recipientBalanceIncrease, index);\\n    }\\n\\n    emit Transfer(sender, recipient, amount);\\n  }\\n}\\n\",\"keccak256\":\"0xbd3f86bbb655838646ea5f7c306bc8c572a9d272f54632f369908bb5420021dd\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":10499,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":10502,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":10572,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":27906,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"_userState","offset":0,"slot":"52","type":"t_mapping(t_address,t_struct(UserState)27901_storage)"},{"astId":27912,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"_allowances","offset":0,"slot":"53","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":27914,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"_totalSupply","offset":0,"slot":"54","type":"t_uint256"},{"astId":27916,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"_name","offset":0,"slot":"55","type":"t_string_storage"},{"astId":27918,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"_symbol","offset":0,"slot":"56","type":"t_string_storage"},{"astId":27920,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"_decimals","offset":0,"slot":"57","type":"t_uint8"},{"astId":27923,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"_incentivesController","offset":1,"slot":"57","type":"t_contract(IAaveIncentivesController)3875"},{"astId":27740,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"_nonces","offset":0,"slot":"58","type":"t_mapping(t_address,t_uint256)"},{"astId":27742,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"_domainSeparator","offset":0,"slot":"59","type":"t_bytes32"},{"astId":25392,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"_treasury","offset":0,"slot":"60","type":"t_address"},{"astId":25394,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"_underlyingAsset","offset":0,"slot":"61","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IAaveIncentivesController)3875":{"encoding":"inplace","label":"contract IAaveIncentivesController","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(UserState)27901_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct IncentivizedERC20.UserState)","numberOfBytes":"32","value":"t_struct(UserState)27901_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(UserState)27901_storage":{"encoding":"inplace","label":"struct IncentivizedERC20.UserState","members":[{"astId":27898,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"balance","offset":0,"slot":"0","type":"t_uint128"},{"astId":27900,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockAToken.sol:MockAToken","label":"additionalData","offset":16,"slot":"0","type":"t_uint128"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"RESERVE_TREASURY_ADDRESS()":{"notice":"Returns the address of the Aave treasury, receiving the fees on this aToken."},"UNDERLYING_ASSET_ADDRESS()":{"notice":"Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)"},"burn(address,address,uint256,uint256)":{"notice":"Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`"},"decreaseAllowance(address,uint256)":{"notice":"Decreases the allowance of spender to spend _msgSender() tokens"},"getIncentivesController()":{"notice":"Returns the address of the Incentives Controller contract"},"getPreviousIndex(address)":{"notice":"Returns last index interest was accrued to the user's balance"},"getScaledUserBalanceAndSupply(address)":{"notice":"Returns the scaled balance of the user and the scaled total supply."},"handleRepayment(address,address,uint256)":{"notice":"Handles the underlying received by the aToken after the transfer has been completed."},"increaseAllowance(address,uint256)":{"notice":"Increases the allowance of spender to spend _msgSender() tokens"},"initialize(address,address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the aToken"},"mint(address,address,uint256,uint256)":{"notice":"Mints `amount` aTokens to `user`"},"mintToTreasury(uint256,uint256)":{"notice":"Mints aTokens to the reserve treasury"},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Allow passing a signed message to approve spending"},"rescueTokens(address,address,uint256)":{"notice":"Rescue and transfer tokens locked in this contract"},"scaledBalanceOf(address)":{"notice":"Returns the scaled balance of the user."},"scaledTotalSupply()":{"notice":"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)"},"setIncentivesController(address)":{"notice":"Sets a new Incentives Controller"},"transferOnLiquidation(address,address,uint256)":{"notice":"Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken"},"transferUnderlyingTo(address,uint256)":{"notice":"Transfers the underlying asset to `target`."}},"version":1}}},"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol":{"MockInitializableFromConstructorImple":{"abi":[{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"value","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_9024":{"entryPoint":null,"id":9024,"parameterSlots":1,"returnSlots":0},"@getRevision_9014":{"entryPoint":null,"id":9014,"parameterSlots":0,"returnSlots":1},"@initialize_9036":{"entryPoint":66,"id":9036,"parameterSlots":1,"returnSlots":0},"@isConstructor_10568":{"entryPoint":null,"id":10568,"parameterSlots":0,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":258,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:615:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"95:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"141:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"150:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"153:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"143:6:201"},"nodeType":"YulFunctionCall","src":"143:12:201"},"nodeType":"YulExpressionStatement","src":"143:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"116:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"125:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"112:3:201"},"nodeType":"YulFunctionCall","src":"112:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"137:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"108:3:201"},"nodeType":"YulFunctionCall","src":"108:32:201"},"nodeType":"YulIf","src":"105:52:201"},{"nodeType":"YulAssignment","src":"166:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"182:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"176:5:201"},"nodeType":"YulFunctionCall","src":"176:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"166:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"61:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"72:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"84:6:201","type":""}],"src":"14:184:201"},{"body":{"nodeType":"YulBlock","src":"377:236:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"394:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"405:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"387:6:201"},"nodeType":"YulFunctionCall","src":"387:21:201"},"nodeType":"YulExpressionStatement","src":"387:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"428:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"439:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"424:3:201"},"nodeType":"YulFunctionCall","src":"424:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"444:2:201","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"417:6:201"},"nodeType":"YulFunctionCall","src":"417:30:201"},"nodeType":"YulExpressionStatement","src":"417:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"467:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"478:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"463:3:201"},"nodeType":"YulFunctionCall","src":"463:18:201"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"483:34:201","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"456:6:201"},"nodeType":"YulFunctionCall","src":"456:62:201"},"nodeType":"YulExpressionStatement","src":"456:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"538:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"549:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"534:3:201"},"nodeType":"YulFunctionCall","src":"534:18:201"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"554:16:201","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"527:6:201"},"nodeType":"YulFunctionCall","src":"527:44:201"},"nodeType":"YulExpressionStatement","src":"527:44:201"},{"nodeType":"YulAssignment","src":"580:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"592:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"603:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"588:3:201"},"nodeType":"YulFunctionCall","src":"588:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"580:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"354:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"368:4:201","type":""}],"src":"203:410:201"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60806040526000805534801561001457600080fd5b5060405161031c38038061031c83398101604081905261003391610102565b61003c81610042565b5061011b565b60015460029060ff16806100555750303b155b80610061575060005481115b6100c85760405162461bcd60e51b815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201526d195b881a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b60015460ff161580156100e7576001805460ff19168117905560008290555b603483905580156100fd576001805460ff191690555b505050565b60006020828403121561011457600080fd5b5051919050565b6101f28061012a6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80633fa4f24514610046578063dde43cba14610061578063fe4b84df14610069575b600080fd5b61004f60345481565b60405190815260200160405180910390f35b61004f600281565b61007c6100773660046101a3565b61007e565b005b60015460029060ff16806100915750303b155b8061009d575060005481115b61012d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a6564000000000000000000000000000000000000606482015260840160405180910390fd5b60015460ff1615801561016a57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b6034839055801561019e57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050565b6000602082840312156101b557600080fd5b503591905056fea264697066735822122087864e427288992a5d5e6da78c5cb509ec96105a0c0cc668f3f414463448c74564736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x31C CODESIZE SUB DUP1 PUSH2 0x31C DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x33 SWAP2 PUSH2 0x102 JUMP JUMPDEST PUSH2 0x3C DUP2 PUSH2 0x42 JUMP JUMPDEST POP PUSH2 0x11B JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x2 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x55 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x61 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0xC8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x195B881A5B9A5D1A585B1A5E9959 PUSH1 0x92 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xE7 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF NOT AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x34 DUP4 SWAP1 SSTORE DUP1 ISZERO PUSH2 0xFD JUMPI PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x114 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1F2 DUP1 PUSH2 0x12A 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 0x3FA4F245 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xDDE43CBA EQ PUSH2 0x61 JUMPI DUP1 PUSH4 0xFE4B84DF EQ PUSH2 0x69 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F PUSH1 0x34 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x4F PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH2 0x7C PUSH2 0x77 CALLDATASIZE PUSH1 0x4 PUSH2 0x1A3 JUMP JUMPDEST PUSH2 0x7E JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x2 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x91 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x9D JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x12D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x16A JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x34 DUP4 SWAP1 SSTORE DUP1 ISZERO PUSH2 0x19E JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP8 DUP7 0x4E TIMESTAMP PUSH19 0x88992A5D5E6DA78C5CB509EC96105A0C0CC668 RETURN DELEGATECALL EQ CHAINID CALLVALUE BASEFEE 0xC7 GASLIMIT PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"1601:497:63:-:0;;;928:1:71;886:43;;1967:51:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1998:15;2009:3;1998:10;:15::i;:::-;1967:51;1601:497;;2022:74;1217:12:71;;1738:1:63;;1217:12:71;;;:31;;-1:-1:-1;2436:9:71;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;-1:-1:-1;;;1202:146:71;;405:2:201;1202:146:71;;;387:21:201;444:2;424:18;;;417:30;483:34;463:18;;;456:62;-1:-1:-1;;;534:18:201;;;527:44;588:19;;1202:146:71;;;;;;;;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;-1:-1:-1;;1424:19:71;;;;;:12;1451:34;;;1396:96;2080:5:63::1;:11:::0;;;1506:55:71;;;;1534:12;:20;;-1:-1:-1;;1534:20:71;;;1506:55;1158:407;;2022:74:63;:::o;14:184:201:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;-1:-1:-1;176:16:201;;14:184;-1:-1:-1;14:184:201:o;203:410::-;1601:497:63;;;;;;"},"deployedBytecode":{"functionDebugData":{"@REVISION_9004":{"entryPoint":null,"id":9004,"parameterSlots":0,"returnSlots":0},"@getRevision_9014":{"entryPoint":null,"id":9014,"parameterSlots":0,"returnSlots":1},"@initialize_9036":{"entryPoint":126,"id":9036,"parameterSlots":1,"returnSlots":0},"@isConstructor_10568":{"entryPoint":null,"id":10568,"parameterSlots":0,"returnSlots":1},"@value_9001":{"entryPoint":null,"id":9001,"parameterSlots":0,"returnSlots":0},"abi_decode_tuple_t_uint256":{"entryPoint":419,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:793:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"115:76:201","statements":[{"nodeType":"YulAssignment","src":"125:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"137:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"148:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"133:3:201"},"nodeType":"YulFunctionCall","src":"133:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"125:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"167:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"178:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"160:6:201"},"nodeType":"YulFunctionCall","src":"160:25:201"},"nodeType":"YulExpressionStatement","src":"160:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"84:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"95:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"106:4:201","type":""}],"src":"14:177:201"},{"body":{"nodeType":"YulBlock","src":"266:110:201","statements":[{"body":{"nodeType":"YulBlock","src":"312:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"321:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"324:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"314:6:201"},"nodeType":"YulFunctionCall","src":"314:12:201"},"nodeType":"YulExpressionStatement","src":"314:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"287:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"296:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"283:3:201"},"nodeType":"YulFunctionCall","src":"283:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"308:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"279:3:201"},"nodeType":"YulFunctionCall","src":"279:32:201"},"nodeType":"YulIf","src":"276:52:201"},{"nodeType":"YulAssignment","src":"337:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"360:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"347:12:201"},"nodeType":"YulFunctionCall","src":"347:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"337:6:201"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"232:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"243:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"255:6:201","type":""}],"src":"196:180:201"},{"body":{"nodeType":"YulBlock","src":"555:236:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"572:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"583:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"565:6:201"},"nodeType":"YulFunctionCall","src":"565:21:201"},"nodeType":"YulExpressionStatement","src":"565:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"606:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"617:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"602:3:201"},"nodeType":"YulFunctionCall","src":"602:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"622:2:201","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"595:6:201"},"nodeType":"YulFunctionCall","src":"595:30:201"},"nodeType":"YulExpressionStatement","src":"595:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"645:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"656:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"641:3:201"},"nodeType":"YulFunctionCall","src":"641:18:201"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"661:34:201","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"634:6:201"},"nodeType":"YulFunctionCall","src":"634:62:201"},"nodeType":"YulExpressionStatement","src":"634:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"716:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"727:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"712:3:201"},"nodeType":"YulFunctionCall","src":"712:18:201"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"732:16:201","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"705:6:201"},"nodeType":"YulFunctionCall","src":"705:44:201"},"nodeType":"YulExpressionStatement","src":"705:44:201"},{"nodeType":"YulAssignment","src":"758:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"770:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"781:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"766:3:201"},"nodeType":"YulFunctionCall","src":"766:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"758:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"532:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"546:4:201","type":""}],"src":"381:410:201"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100415760003560e01c80633fa4f24514610046578063dde43cba14610061578063fe4b84df14610069575b600080fd5b61004f60345481565b60405190815260200160405180910390f35b61004f600281565b61007c6100773660046101a3565b61007e565b005b60015460029060ff16806100915750303b155b8061009d575060005481115b61012d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a6564000000000000000000000000000000000000606482015260840160405180910390fd5b60015460ff1615801561016a57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b6034839055801561019e57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050565b6000602082840312156101b557600080fd5b503591905056fea264697066735822122087864e427288992a5d5e6da78c5cb509ec96105a0c0cc668f3f414463448c74564736f6c634300080a0033","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 0x3FA4F245 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xDDE43CBA EQ PUSH2 0x61 JUMPI DUP1 PUSH4 0xFE4B84DF EQ PUSH2 0x69 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F PUSH1 0x34 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x4F PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH2 0x7C PUSH2 0x77 CALLDATASIZE PUSH1 0x4 PUSH2 0x1A3 JUMP JUMPDEST PUSH2 0x7E JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x2 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x91 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x9D JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x12D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x16A JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x34 DUP4 SWAP1 SSTORE DUP1 ISZERO PUSH2 0x19E JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP8 DUP7 0x4E TIMESTAMP PUSH19 0x88992A5D5E6DA78C5CB509EC96105A0C0CC668 RETURN DELEGATECALL EQ CHAINID CALLVALUE BASEFEE 0xC7 GASLIMIT PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"1601:497:63:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1678:20;;;;;;;;;160:25:201;;;148:2;133:18;1678:20:63;;;;;;;1703:36;;1738:1;1703:36;;2022:74;;;;;;:::i;:::-;;:::i;:::-;;;1217:12:71;;1738:1:63;;1217:12:71;;;:31;;-1:-1:-1;2436:9:71;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;583:2:201;1202:146:71;;;565:21:201;622:2;602:18;;;595:30;661:34;641:18;;;634:62;732:16;712:18;;;705:44;766:19;;1202:146:71;;;;;;;;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;2080:5:63::1;:11:::0;;;1506:55:71;;;;1534:12;:20;;;;;;1506:55;1158:407;;2022:74:63;:::o;196:180:201:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:201;;196:180;-1:-1:-1;196:180:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"99600","executionCost":"infinite","totalCost":"infinite"},"external":{"REVISION()":"183","initialize(uint256)":"101936","value()":"2261"},"internal":{"getRevision()":"infinite"}},"methodIdentifiers":{"REVISION()":"dde43cba","initialize(uint256)":"fe4b84df","value()":"3fa4f245"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"value\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol\":\"MockInitializableFromConstructorImple\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {VersionedInitializable} from '../../protocol/libraries/aave-upgradeability/VersionedInitializable.sol';\\n\\ncontract MockInitializableImple is VersionedInitializable {\\n  uint256 public value;\\n  string public text;\\n  uint256[] public values;\\n\\n  uint256 public constant REVISION = 1;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  function initialize(uint256 val, string memory txt, uint256[] memory vals) external initializer {\\n    value = val;\\n    text = txt;\\n    values = vals;\\n  }\\n\\n  function setValue(uint256 newValue) public {\\n    value = newValue;\\n  }\\n\\n  function setValueViaProxy(uint256 newValue) public {\\n    value = newValue;\\n  }\\n}\\n\\ncontract MockInitializableImpleV2 is VersionedInitializable {\\n  uint256 public value;\\n  string public text;\\n  uint256[] public values;\\n\\n  uint256 public constant REVISION = 2;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  function initialize(uint256 val, string memory txt, uint256[] memory vals) public initializer {\\n    value = val;\\n    text = txt;\\n    values = vals;\\n  }\\n\\n  function setValue(uint256 newValue) public {\\n    value = newValue;\\n  }\\n\\n  function setValueViaProxy(uint256 newValue) public {\\n    value = newValue;\\n  }\\n}\\n\\ncontract MockInitializableFromConstructorImple is VersionedInitializable {\\n  uint256 public value;\\n\\n  uint256 public constant REVISION = 2;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  constructor(uint256 val) {\\n    initialize(val);\\n  }\\n\\n  function initialize(uint256 val) public initializer {\\n    value = val;\\n  }\\n}\\n\\ncontract MockReentrantInitializableImple is VersionedInitializable {\\n  uint256 public value;\\n\\n  uint256 public constant REVISION = 2;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  function initialize(uint256 val) public initializer {\\n    value = val;\\n    if (value < 2) {\\n      initialize(value + 1);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x08dcaae7248f12ffcec322ea174c12d6a9310a59c85e3c11112594ab58f1a2a6\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":10499,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableFromConstructorImple","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":10502,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableFromConstructorImple","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":10572,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableFromConstructorImple","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":9001,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableFromConstructorImple","label":"value","offset":0,"slot":"52","type":"t_uint256"}],"types":{"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}},"MockInitializableImple":{"abi":[{"inputs":[],"name":"REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"},{"internalType":"string","name":"txt","type":"string"},{"internalType":"uint256[]","name":"vals","type":"uint256[]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setValueViaProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"text","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"value","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"values","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60806040526000805534801561001457600080fd5b506106bb806100246000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80635dd216101161005b5780635dd21610146100b75780635e383d21146100cc578063d31f8b6b146100df578063dde43cba146100f257600080fd5b80631f1bd692146100825780633fa4f245146100a057806355241077146100b7575b600080fd5b61008a6100fa565b60405161009791906103c9565b60405180910390f35b6100a960345481565b604051908152602001610097565b6100ca6100c536600461043c565b603455565b005b6100a96100da36600461043c565b610188565b6100ca6100ed366004610553565b6101a9565b6100a9600181565b6035805461010790610631565b80601f016020809104026020016040519081016040528092919081815260200182805461013390610631565b80156101805780601f1061015557610100808354040283529160200191610180565b820191906000526020600020905b81548152906001019060200180831161016357829003601f168201915b505050505081565b6036818154811061019857600080fd5b600091825260209091200154905081565b6001805460ff16806101ba5750303b155b806101c6575060005481115b610256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a6564000000000000000000000000000000000000606482015260840160405180910390fd5b60015460ff1615801561029357600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b603485905583516102ab9060359060208701906102f6565b5082516102bf90603690602086019061037a565b5080156102ef57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5050505050565b82805461030290610631565b90600052602060002090601f016020900481019282610324576000855561036a565b82601f1061033d57805160ff191683800117855561036a565b8280016001018555821561036a579182015b8281111561036a57825182559160200191906001019061034f565b506103769291506103b4565b5090565b82805482825590600052602060002090810192821561036a579160200282018281111561036a57825182559160200191906001019061034f565b5b8082111561037657600081556001016103b5565b600060208083528351808285015260005b818110156103f6578581018301518582016040015282016103da565b81811115610408576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561044e57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156104cb576104cb610455565b604052919050565b600082601f8301126104e457600080fd5b8135602067ffffffffffffffff82111561050057610500610455565b8160051b61050f828201610484565b928352848101820192828101908785111561052957600080fd5b83870192505b848310156105485782358252918301919083019061052f565b979650505050505050565b60008060006060848603121561056857600080fd5b8335925060208085013567ffffffffffffffff8082111561058857600080fd5b818701915087601f83011261059c57600080fd5b8135818111156105ae576105ae610455565b6105de847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610484565b81815289858386010111156105f257600080fd5b81858501868301376000918101909401529193506040860135918083111561061957600080fd5b5050610627868287016104d3565b9150509250925092565b600181811c9082168061064557607f821691505b6020821081141561067f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea2646970667358221220c677346cd6259aa81fb5955fba91e6cbaa201f82d78e6c52a3e560bb73f489bd64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6BB DUP1 PUSH2 0x24 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 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5DD21610 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x5DD21610 EQ PUSH2 0xB7 JUMPI DUP1 PUSH4 0x5E383D21 EQ PUSH2 0xCC JUMPI DUP1 PUSH4 0xD31F8B6B EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0xDDE43CBA EQ PUSH2 0xF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1F1BD692 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x3FA4F245 EQ PUSH2 0xA0 JUMPI DUP1 PUSH4 0x55241077 EQ PUSH2 0xB7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8A PUSH2 0xFA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0x3C9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xA9 PUSH1 0x34 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x97 JUMP JUMPDEST PUSH2 0xCA PUSH2 0xC5 CALLDATASIZE PUSH1 0x4 PUSH2 0x43C JUMP JUMPDEST PUSH1 0x34 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH2 0xA9 PUSH2 0xDA CALLDATASIZE PUSH1 0x4 PUSH2 0x43C JUMP JUMPDEST PUSH2 0x188 JUMP JUMPDEST PUSH2 0xCA PUSH2 0xED CALLDATASIZE PUSH1 0x4 PUSH2 0x553 JUMP JUMPDEST PUSH2 0x1A9 JUMP JUMPDEST PUSH2 0xA9 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH2 0x107 SWAP1 PUSH2 0x631 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x133 SWAP1 PUSH2 0x631 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x180 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x155 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x180 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 0x163 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x36 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x1BA JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x1C6 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x256 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x293 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x34 DUP6 SWAP1 SSTORE DUP4 MLOAD PUSH2 0x2AB SWAP1 PUSH1 0x35 SWAP1 PUSH1 0x20 DUP8 ADD SWAP1 PUSH2 0x2F6 JUMP JUMPDEST POP DUP3 MLOAD PUSH2 0x2BF SWAP1 PUSH1 0x36 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x37A JUMP JUMPDEST POP DUP1 ISZERO PUSH2 0x2EF JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x302 SWAP1 PUSH2 0x631 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x324 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x36A JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x33D JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x36A JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x36A JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x36A JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x34F JUMP JUMPDEST POP PUSH2 0x376 SWAP3 SWAP2 POP PUSH2 0x3B4 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x36A JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD DUP3 DUP2 GT ISZERO PUSH2 0x36A JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x34F JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x376 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x3B5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3F6 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x3DA JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x408 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x44E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4CB JUMPI PUSH2 0x4CB PUSH2 0x455 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x500 JUMPI PUSH2 0x500 PUSH2 0x455 JUMP JUMPDEST DUP2 PUSH1 0x5 SHL PUSH2 0x50F DUP3 DUP3 ADD PUSH2 0x484 JUMP JUMPDEST SWAP3 DUP4 MSTORE DUP5 DUP2 ADD DUP3 ADD SWAP3 DUP3 DUP2 ADD SWAP1 DUP8 DUP6 GT ISZERO PUSH2 0x529 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP8 ADD SWAP3 POP JUMPDEST DUP5 DUP4 LT ISZERO PUSH2 0x548 JUMPI DUP3 CALLDATALOAD DUP3 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH2 0x52F JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x568 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP1 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x588 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x59C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x5AE JUMPI PUSH2 0x5AE PUSH2 0x455 JUMP JUMPDEST PUSH2 0x5DE DUP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x484 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP10 DUP6 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x5F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 DUP6 ADD DUP7 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD SWAP1 SWAP5 ADD MSTORE SWAP2 SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP2 DUP1 DUP4 GT ISZERO PUSH2 0x619 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH2 0x627 DUP7 DUP3 DUP8 ADD PUSH2 0x4D3 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x645 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x67F JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC6 PUSH24 0x346CD6259AA81FB5955FBA91E6CBAA201F82D78E6C52A3E5 PUSH1 0xBB PUSH20 0xF489BD64736F6C634300080A0033000000000000 ","sourceMap":"175:711:63:-:0;;;928:1:71;886:43;;175:711:63;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@REVISION_8873":{"entryPoint":null,"id":8873,"parameterSlots":0,"returnSlots":0},"@getRevision_8883":{"entryPoint":null,"id":8883,"parameterSlots":0,"returnSlots":1},"@initialize_8908":{"entryPoint":425,"id":8908,"parameterSlots":3,"returnSlots":0},"@isConstructor_10568":{"entryPoint":null,"id":10568,"parameterSlots":0,"returnSlots":1},"@setValueViaProxy_8928":{"entryPoint":null,"id":8928,"parameterSlots":1,"returnSlots":0},"@setValue_8918":{"entryPoint":null,"id":8918,"parameterSlots":1,"returnSlots":0},"@text_8867":{"entryPoint":250,"id":8867,"parameterSlots":0,"returnSlots":0},"@value_8865":{"entryPoint":null,"id":8865,"parameterSlots":0,"returnSlots":0},"@values_8870":{"entryPoint":392,"id":8870,"parameterSlots":0,"returnSlots":0},"abi_decode_array_uint256_dyn":{"entryPoint":1235,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":1084,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_string_memory_ptrt_array$_t_uint256_$dyn_memory_ptr":{"entryPoint":1363,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":969,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":1156,"id":null,"parameterSlots":1,"returnSlots":1},"extract_byte_array_length":{"entryPoint":1585,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x41":{"entryPoint":1109,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:4263:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"135:535:201","statements":[{"nodeType":"YulVariableDeclaration","src":"145:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"155:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"149:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"173:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"184:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"166:6:201"},"nodeType":"YulFunctionCall","src":"166:21:201"},"nodeType":"YulExpressionStatement","src":"166:21:201"},{"nodeType":"YulVariableDeclaration","src":"196:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"216:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:201"},"nodeType":"YulFunctionCall","src":"210:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"200:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"243:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"254:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"239:3:201"},"nodeType":"YulFunctionCall","src":"239:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"259:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"232:6:201"},"nodeType":"YulFunctionCall","src":"232:34:201"},"nodeType":"YulExpressionStatement","src":"232:34:201"},{"nodeType":"YulVariableDeclaration","src":"275:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"284:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"279:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"344:90:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"373:9:201"},{"name":"i","nodeType":"YulIdentifier","src":"384:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"369:3:201"},"nodeType":"YulFunctionCall","src":"369:17:201"},{"kind":"number","nodeType":"YulLiteral","src":"388:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"365:3:201"},"nodeType":"YulFunctionCall","src":"365:26:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"407:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"415:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"403:3:201"},"nodeType":"YulFunctionCall","src":"403:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"419:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"399:3:201"},"nodeType":"YulFunctionCall","src":"399:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"393:5:201"},"nodeType":"YulFunctionCall","src":"393:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"358:6:201"},"nodeType":"YulFunctionCall","src":"358:66:201"},"nodeType":"YulExpressionStatement","src":"358:66:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"305:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"308:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"302:2:201"},"nodeType":"YulFunctionCall","src":"302:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"316:19:201","statements":[{"nodeType":"YulAssignment","src":"318:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"327:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"330:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"323:3:201"},"nodeType":"YulFunctionCall","src":"323:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"318:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"298:3:201","statements":[]},"src":"294:140:201"},{"body":{"nodeType":"YulBlock","src":"468:66:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"497:9:201"},{"name":"length","nodeType":"YulIdentifier","src":"508:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"493:3:201"},"nodeType":"YulFunctionCall","src":"493:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"517:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"489:3:201"},"nodeType":"YulFunctionCall","src":"489:31:201"},{"kind":"number","nodeType":"YulLiteral","src":"522:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"482:6:201"},"nodeType":"YulFunctionCall","src":"482:42:201"},"nodeType":"YulExpressionStatement","src":"482:42:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"449:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"452:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"446:2:201"},"nodeType":"YulFunctionCall","src":"446:13:201"},"nodeType":"YulIf","src":"443:91:201"},{"nodeType":"YulAssignment","src":"543:121:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"559:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"578:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"586:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"574:3:201"},"nodeType":"YulFunctionCall","src":"574:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"591:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"570:3:201"},"nodeType":"YulFunctionCall","src":"570:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"555:3:201"},"nodeType":"YulFunctionCall","src":"555:104:201"},{"kind":"number","nodeType":"YulLiteral","src":"661:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"551:3:201"},"nodeType":"YulFunctionCall","src":"551:113:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"543:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"104:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"115:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"126:4:201","type":""}],"src":"14:656:201"},{"body":{"nodeType":"YulBlock","src":"776:76:201","statements":[{"nodeType":"YulAssignment","src":"786:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"798:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"809:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"794:3:201"},"nodeType":"YulFunctionCall","src":"794:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"786:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"828:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"839:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"821:6:201"},"nodeType":"YulFunctionCall","src":"821:25:201"},"nodeType":"YulExpressionStatement","src":"821:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"745:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"756:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"767:4:201","type":""}],"src":"675:177:201"},{"body":{"nodeType":"YulBlock","src":"927:110:201","statements":[{"body":{"nodeType":"YulBlock","src":"973:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"982:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"985:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"975:6:201"},"nodeType":"YulFunctionCall","src":"975:12:201"},"nodeType":"YulExpressionStatement","src":"975:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"948:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"957:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"944:3:201"},"nodeType":"YulFunctionCall","src":"944:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"969:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"940:3:201"},"nodeType":"YulFunctionCall","src":"940:32:201"},"nodeType":"YulIf","src":"937:52:201"},{"nodeType":"YulAssignment","src":"998:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1021:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1008:12:201"},"nodeType":"YulFunctionCall","src":"1008:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"998:6:201"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"893:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"904:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"916:6:201","type":""}],"src":"857:180:201"},{"body":{"nodeType":"YulBlock","src":"1074:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1091:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1094:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1084:6:201"},"nodeType":"YulFunctionCall","src":"1084:88:201"},"nodeType":"YulExpressionStatement","src":"1084:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1188:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1191:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1181:6:201"},"nodeType":"YulFunctionCall","src":"1181:15:201"},"nodeType":"YulExpressionStatement","src":"1181:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1212:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1215:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1205:6:201"},"nodeType":"YulFunctionCall","src":"1205:15:201"},"nodeType":"YulExpressionStatement","src":"1205:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1042:184:201"},{"body":{"nodeType":"YulBlock","src":"1276:289:201","statements":[{"nodeType":"YulAssignment","src":"1286:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1302:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1296:5:201"},"nodeType":"YulFunctionCall","src":"1296:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1286:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1314:117:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1336:6:201"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"1352:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"1358:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1348:3:201"},"nodeType":"YulFunctionCall","src":"1348:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"1363:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1344:3:201"},"nodeType":"YulFunctionCall","src":"1344:86:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1332:3:201"},"nodeType":"YulFunctionCall","src":"1332:99:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1318:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1506:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1508:16:201"},"nodeType":"YulFunctionCall","src":"1508:18:201"},"nodeType":"YulExpressionStatement","src":"1508:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1449:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"1461:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1446:2:201"},"nodeType":"YulFunctionCall","src":"1446:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1485:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1497:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1482:2:201"},"nodeType":"YulFunctionCall","src":"1482:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1443:2:201"},"nodeType":"YulFunctionCall","src":"1443:62:201"},"nodeType":"YulIf","src":"1440:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1544:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1548:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1537:6:201"},"nodeType":"YulFunctionCall","src":"1537:22:201"},"nodeType":"YulExpressionStatement","src":"1537:22:201"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"1256:4:201","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1265:6:201","type":""}],"src":"1231:334:201"},{"body":{"nodeType":"YulBlock","src":"1634:648:201","statements":[{"body":{"nodeType":"YulBlock","src":"1683:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1692:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1695:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1685:6:201"},"nodeType":"YulFunctionCall","src":"1685:12:201"},"nodeType":"YulExpressionStatement","src":"1685:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1662:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1670:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1658:3:201"},"nodeType":"YulFunctionCall","src":"1658:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"1677:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1654:3:201"},"nodeType":"YulFunctionCall","src":"1654:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1647:6:201"},"nodeType":"YulFunctionCall","src":"1647:35:201"},"nodeType":"YulIf","src":"1644:55:201"},{"nodeType":"YulVariableDeclaration","src":"1708:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1731:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1718:12:201"},"nodeType":"YulFunctionCall","src":"1718:20:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1712:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1747:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1757:4:201","type":"","value":"0x20"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1751:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1800:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1802:16:201"},"nodeType":"YulFunctionCall","src":"1802:18:201"},"nodeType":"YulExpressionStatement","src":"1802:18:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1776:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"1780:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1773:2:201"},"nodeType":"YulFunctionCall","src":"1773:26:201"},"nodeType":"YulIf","src":"1770:52:201"},{"nodeType":"YulVariableDeclaration","src":"1831:20:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1845:1:201","type":"","value":"5"},{"name":"_1","nodeType":"YulIdentifier","src":"1848:2:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1841:3:201"},"nodeType":"YulFunctionCall","src":"1841:10:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"1835:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1860:39:201","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1891:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"1895:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1887:3:201"},"nodeType":"YulFunctionCall","src":"1887:11:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"1871:15:201"},"nodeType":"YulFunctionCall","src":"1871:28:201"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"1864:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1908:16:201","value":{"name":"dst","nodeType":"YulIdentifier","src":"1921:3:201"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"1912:5:201","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1940:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1945:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1933:6:201"},"nodeType":"YulFunctionCall","src":"1933:15:201"},"nodeType":"YulExpressionStatement","src":"1933:15:201"},{"nodeType":"YulAssignment","src":"1957:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1968:3:201"},{"name":"_2","nodeType":"YulIdentifier","src":"1973:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1964:3:201"},"nodeType":"YulFunctionCall","src":"1964:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"1957:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"1985:38:201","value":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2007:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"2015:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2003:3:201"},"nodeType":"YulFunctionCall","src":"2003:15:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2020:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1999:3:201"},"nodeType":"YulFunctionCall","src":"1999:24:201"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"1989:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2051:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2060:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2063:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2053:6:201"},"nodeType":"YulFunctionCall","src":"2053:12:201"},"nodeType":"YulExpressionStatement","src":"2053:12:201"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"2038:6:201"},{"name":"end","nodeType":"YulIdentifier","src":"2046:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2035:2:201"},"nodeType":"YulFunctionCall","src":"2035:15:201"},"nodeType":"YulIf","src":"2032:35:201"},{"nodeType":"YulVariableDeclaration","src":"2076:26:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2091:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2099:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2087:3:201"},"nodeType":"YulFunctionCall","src":"2087:15:201"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"2080:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2167:86:201","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2188:3:201"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2206:3:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2193:12:201"},"nodeType":"YulFunctionCall","src":"2193:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2181:6:201"},"nodeType":"YulFunctionCall","src":"2181:30:201"},"nodeType":"YulExpressionStatement","src":"2181:30:201"},{"nodeType":"YulAssignment","src":"2224:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2235:3:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2240:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2231:3:201"},"nodeType":"YulFunctionCall","src":"2231:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"2224:3:201"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2122:3:201"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"2127:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2119:2:201"},"nodeType":"YulFunctionCall","src":"2119:15:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2135:23:201","statements":[{"nodeType":"YulAssignment","src":"2137:19:201","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2148:3:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2153:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2144:3:201"},"nodeType":"YulFunctionCall","src":"2144:12:201"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"2137:3:201"}]}]},"pre":{"nodeType":"YulBlock","src":"2115:3:201","statements":[]},"src":"2111:142:201"},{"nodeType":"YulAssignment","src":"2262:14:201","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"2271:5:201"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"2262:5:201"}]}]},"name":"abi_decode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1608:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"1616:3:201","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"1624:5:201","type":""}],"src":"1570:712:201"},{"body":{"nodeType":"YulBlock","src":"2426:978:201","statements":[{"body":{"nodeType":"YulBlock","src":"2472:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2481:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2484:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2474:6:201"},"nodeType":"YulFunctionCall","src":"2474:12:201"},"nodeType":"YulExpressionStatement","src":"2474:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2447:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2456:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2443:3:201"},"nodeType":"YulFunctionCall","src":"2443:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2468:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2439:3:201"},"nodeType":"YulFunctionCall","src":"2439:32:201"},"nodeType":"YulIf","src":"2436:52:201"},{"nodeType":"YulAssignment","src":"2497:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2520:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2507:12:201"},"nodeType":"YulFunctionCall","src":"2507:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2497:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2539:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2549:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2543:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2560:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2591:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2602:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2587:3:201"},"nodeType":"YulFunctionCall","src":"2587:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2574:12:201"},"nodeType":"YulFunctionCall","src":"2574:32:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2564:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2615:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2625:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"2619:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2670:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2679:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2682:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2672:6:201"},"nodeType":"YulFunctionCall","src":"2672:12:201"},"nodeType":"YulExpressionStatement","src":"2672:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2658:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2666:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2655:2:201"},"nodeType":"YulFunctionCall","src":"2655:14:201"},"nodeType":"YulIf","src":"2652:34:201"},{"nodeType":"YulVariableDeclaration","src":"2695:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2709:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"2720:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2705:3:201"},"nodeType":"YulFunctionCall","src":"2705:22:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"2699:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2775:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2784:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2787:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2777:6:201"},"nodeType":"YulFunctionCall","src":"2777:12:201"},"nodeType":"YulExpressionStatement","src":"2777:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2754:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"2758:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2750:3:201"},"nodeType":"YulFunctionCall","src":"2750:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2765:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2746:3:201"},"nodeType":"YulFunctionCall","src":"2746:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2739:6:201"},"nodeType":"YulFunctionCall","src":"2739:35:201"},"nodeType":"YulIf","src":"2736:55:201"},{"nodeType":"YulVariableDeclaration","src":"2800:26:201","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2823:2:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2810:12:201"},"nodeType":"YulFunctionCall","src":"2810:16:201"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"2804:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2849:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2851:16:201"},"nodeType":"YulFunctionCall","src":"2851:18:201"},"nodeType":"YulExpressionStatement","src":"2851:18:201"}]},"condition":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"2841:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2845:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2838:2:201"},"nodeType":"YulFunctionCall","src":"2838:10:201"},"nodeType":"YulIf","src":"2835:36:201"},{"nodeType":"YulVariableDeclaration","src":"2880:125:201","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"2921:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"2925:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2917:3:201"},"nodeType":"YulFunctionCall","src":"2917:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"2932:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2913:3:201"},"nodeType":"YulFunctionCall","src":"2913:86:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3001:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2909:3:201"},"nodeType":"YulFunctionCall","src":"2909:95:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"2893:15:201"},"nodeType":"YulFunctionCall","src":"2893:112:201"},"variables":[{"name":"array","nodeType":"YulTypedName","src":"2884:5:201","type":""}]},{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"3021:5:201"},{"name":"_4","nodeType":"YulIdentifier","src":"3028:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3014:6:201"},"nodeType":"YulFunctionCall","src":"3014:17:201"},"nodeType":"YulExpressionStatement","src":"3014:17:201"},{"body":{"nodeType":"YulBlock","src":"3077:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3086:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3089:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3079:6:201"},"nodeType":"YulFunctionCall","src":"3079:12:201"},"nodeType":"YulExpressionStatement","src":"3079:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3054:2:201"},{"name":"_4","nodeType":"YulIdentifier","src":"3058:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3050:3:201"},"nodeType":"YulFunctionCall","src":"3050:11:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3063:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3046:3:201"},"nodeType":"YulFunctionCall","src":"3046:20:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3068:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3043:2:201"},"nodeType":"YulFunctionCall","src":"3043:33:201"},"nodeType":"YulIf","src":"3040:53:201"},{"expression":{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"3119:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3126:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3115:3:201"},"nodeType":"YulFunctionCall","src":"3115:14:201"},{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3135:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3139:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3131:3:201"},"nodeType":"YulFunctionCall","src":"3131:11:201"},{"name":"_4","nodeType":"YulIdentifier","src":"3144:2:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"3102:12:201"},"nodeType":"YulFunctionCall","src":"3102:45:201"},"nodeType":"YulExpressionStatement","src":"3102:45:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"3171:5:201"},{"name":"_4","nodeType":"YulIdentifier","src":"3178:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3167:3:201"},"nodeType":"YulFunctionCall","src":"3167:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3183:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3163:3:201"},"nodeType":"YulFunctionCall","src":"3163:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3188:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3156:6:201"},"nodeType":"YulFunctionCall","src":"3156:34:201"},"nodeType":"YulExpressionStatement","src":"3156:34:201"},{"nodeType":"YulAssignment","src":"3199:15:201","value":{"name":"array","nodeType":"YulIdentifier","src":"3209:5:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3199:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3223:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3256:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3267:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3252:3:201"},"nodeType":"YulFunctionCall","src":"3252:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3239:12:201"},"nodeType":"YulFunctionCall","src":"3239:32:201"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"3227:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3300:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3309:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3312:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3302:6:201"},"nodeType":"YulFunctionCall","src":"3302:12:201"},"nodeType":"YulExpressionStatement","src":"3302:12:201"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"3286:8:201"},{"name":"_2","nodeType":"YulIdentifier","src":"3296:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3283:2:201"},"nodeType":"YulFunctionCall","src":"3283:16:201"},"nodeType":"YulIf","src":"3280:36:201"},{"nodeType":"YulAssignment","src":"3325:73:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3368:9:201"},{"name":"offset_1","nodeType":"YulIdentifier","src":"3379:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3364:3:201"},"nodeType":"YulFunctionCall","src":"3364:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3390:7:201"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nodeType":"YulIdentifier","src":"3335:28:201"},"nodeType":"YulFunctionCall","src":"3335:63:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3325:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_string_memory_ptrt_array$_t_uint256_$dyn_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2376:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2387:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2399:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2407:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2415:6:201","type":""}],"src":"2287:1117:201"},{"body":{"nodeType":"YulBlock","src":"3464:382:201","statements":[{"nodeType":"YulAssignment","src":"3474:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3488:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"3491:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"3484:3:201"},"nodeType":"YulFunctionCall","src":"3484:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3474:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3505:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"3535:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"3541:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3531:3:201"},"nodeType":"YulFunctionCall","src":"3531:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"3509:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3582:31:201","statements":[{"nodeType":"YulAssignment","src":"3584:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3598:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3606:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3594:3:201"},"nodeType":"YulFunctionCall","src":"3594:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3584:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3562:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3555:6:201"},"nodeType":"YulFunctionCall","src":"3555:26:201"},"nodeType":"YulIf","src":"3552:61:201"},{"body":{"nodeType":"YulBlock","src":"3672:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3693:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3696:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3686:6:201"},"nodeType":"YulFunctionCall","src":"3686:88:201"},"nodeType":"YulExpressionStatement","src":"3686:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3794:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3797:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3787:6:201"},"nodeType":"YulFunctionCall","src":"3787:15:201"},"nodeType":"YulExpressionStatement","src":"3787:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3822:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3825:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3815:6:201"},"nodeType":"YulFunctionCall","src":"3815:15:201"},"nodeType":"YulExpressionStatement","src":"3815:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3628:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3651:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3659:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3648:2:201"},"nodeType":"YulFunctionCall","src":"3648:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3625:2:201"},"nodeType":"YulFunctionCall","src":"3625:38:201"},"nodeType":"YulIf","src":"3622:218:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"3444:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"3453:6:201","type":""}],"src":"3409:437:201"},{"body":{"nodeType":"YulBlock","src":"4025:236:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4042:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4053:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4035:6:201"},"nodeType":"YulFunctionCall","src":"4035:21:201"},"nodeType":"YulExpressionStatement","src":"4035:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4076:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4087:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4072:3:201"},"nodeType":"YulFunctionCall","src":"4072:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"4092:2:201","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4065:6:201"},"nodeType":"YulFunctionCall","src":"4065:30:201"},"nodeType":"YulExpressionStatement","src":"4065:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4115:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4126:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4111:3:201"},"nodeType":"YulFunctionCall","src":"4111:18:201"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"4131:34:201","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4104:6:201"},"nodeType":"YulFunctionCall","src":"4104:62:201"},"nodeType":"YulExpressionStatement","src":"4104:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4186:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4197:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4182:3:201"},"nodeType":"YulFunctionCall","src":"4182:18:201"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"4202:16:201","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4175:6:201"},"nodeType":"YulFunctionCall","src":"4175:44:201"},"nodeType":"YulExpressionStatement","src":"4175:44:201"},{"nodeType":"YulAssignment","src":"4228:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4240:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4251:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4236:3:201"},"nodeType":"YulFunctionCall","src":"4236:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4228:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4002:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4016:4:201","type":""}],"src":"3851:410:201"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_array_uint256_dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0x20\n        if gt(_1, 0xffffffffffffffff) { panic_error_0x41() }\n        let _3 := shl(5, _1)\n        let dst := allocate_memory(add(_3, _2))\n        let dst_1 := dst\n        mstore(dst, _1)\n        dst := add(dst, _2)\n        let srcEnd := add(add(offset, _3), _2)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, _2)\n        for { } lt(src, srcEnd) { src := add(src, _2) }\n        {\n            mstore(dst, calldataload(src))\n            dst := add(dst, _2)\n        }\n        array := dst_1\n    }\n    function abi_decode_tuple_t_uint256t_string_memory_ptrt_array$_t_uint256_$dyn_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let _1 := 32\n        let offset := calldataload(add(headStart, _1))\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n        let _4 := calldataload(_3)\n        if gt(_4, _2) { panic_error_0x41() }\n        let array := allocate_memory(add(and(add(_4, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), _1))\n        mstore(array, _4)\n        if gt(add(add(_3, _4), _1), dataEnd) { revert(0, 0) }\n        calldatacopy(add(array, _1), add(_3, _1), _4)\n        mstore(add(add(array, _4), _1), 0)\n        value1 := array\n        let offset_1 := calldataload(add(headStart, 64))\n        if gt(offset_1, _2) { revert(0, 0) }\n        value2 := abi_decode_array_uint256_dyn(add(headStart, offset_1), dataEnd)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061007d5760003560e01c80635dd216101161005b5780635dd21610146100b75780635e383d21146100cc578063d31f8b6b146100df578063dde43cba146100f257600080fd5b80631f1bd692146100825780633fa4f245146100a057806355241077146100b7575b600080fd5b61008a6100fa565b60405161009791906103c9565b60405180910390f35b6100a960345481565b604051908152602001610097565b6100ca6100c536600461043c565b603455565b005b6100a96100da36600461043c565b610188565b6100ca6100ed366004610553565b6101a9565b6100a9600181565b6035805461010790610631565b80601f016020809104026020016040519081016040528092919081815260200182805461013390610631565b80156101805780601f1061015557610100808354040283529160200191610180565b820191906000526020600020905b81548152906001019060200180831161016357829003601f168201915b505050505081565b6036818154811061019857600080fd5b600091825260209091200154905081565b6001805460ff16806101ba5750303b155b806101c6575060005481115b610256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a6564000000000000000000000000000000000000606482015260840160405180910390fd5b60015460ff1615801561029357600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b603485905583516102ab9060359060208701906102f6565b5082516102bf90603690602086019061037a565b5080156102ef57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5050505050565b82805461030290610631565b90600052602060002090601f016020900481019282610324576000855561036a565b82601f1061033d57805160ff191683800117855561036a565b8280016001018555821561036a579182015b8281111561036a57825182559160200191906001019061034f565b506103769291506103b4565b5090565b82805482825590600052602060002090810192821561036a579160200282018281111561036a57825182559160200191906001019061034f565b5b8082111561037657600081556001016103b5565b600060208083528351808285015260005b818110156103f6578581018301518582016040015282016103da565b81811115610408576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561044e57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156104cb576104cb610455565b604052919050565b600082601f8301126104e457600080fd5b8135602067ffffffffffffffff82111561050057610500610455565b8160051b61050f828201610484565b928352848101820192828101908785111561052957600080fd5b83870192505b848310156105485782358252918301919083019061052f565b979650505050505050565b60008060006060848603121561056857600080fd5b8335925060208085013567ffffffffffffffff8082111561058857600080fd5b818701915087601f83011261059c57600080fd5b8135818111156105ae576105ae610455565b6105de847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610484565b81815289858386010111156105f257600080fd5b81858501868301376000918101909401529193506040860135918083111561061957600080fd5b5050610627868287016104d3565b9150509250925092565b600181811c9082168061064557607f821691505b6020821081141561067f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea2646970667358221220c677346cd6259aa81fb5955fba91e6cbaa201f82d78e6c52a3e560bb73f489bd64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5DD21610 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x5DD21610 EQ PUSH2 0xB7 JUMPI DUP1 PUSH4 0x5E383D21 EQ PUSH2 0xCC JUMPI DUP1 PUSH4 0xD31F8B6B EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0xDDE43CBA EQ PUSH2 0xF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1F1BD692 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x3FA4F245 EQ PUSH2 0xA0 JUMPI DUP1 PUSH4 0x55241077 EQ PUSH2 0xB7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8A PUSH2 0xFA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0x3C9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xA9 PUSH1 0x34 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x97 JUMP JUMPDEST PUSH2 0xCA PUSH2 0xC5 CALLDATASIZE PUSH1 0x4 PUSH2 0x43C JUMP JUMPDEST PUSH1 0x34 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH2 0xA9 PUSH2 0xDA CALLDATASIZE PUSH1 0x4 PUSH2 0x43C JUMP JUMPDEST PUSH2 0x188 JUMP JUMPDEST PUSH2 0xCA PUSH2 0xED CALLDATASIZE PUSH1 0x4 PUSH2 0x553 JUMP JUMPDEST PUSH2 0x1A9 JUMP JUMPDEST PUSH2 0xA9 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH2 0x107 SWAP1 PUSH2 0x631 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x133 SWAP1 PUSH2 0x631 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x180 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x155 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x180 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 0x163 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x36 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x1BA JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x1C6 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x256 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x293 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x34 DUP6 SWAP1 SSTORE DUP4 MLOAD PUSH2 0x2AB SWAP1 PUSH1 0x35 SWAP1 PUSH1 0x20 DUP8 ADD SWAP1 PUSH2 0x2F6 JUMP JUMPDEST POP DUP3 MLOAD PUSH2 0x2BF SWAP1 PUSH1 0x36 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x37A JUMP JUMPDEST POP DUP1 ISZERO PUSH2 0x2EF JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x302 SWAP1 PUSH2 0x631 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x324 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x36A JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x33D JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x36A JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x36A JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x36A JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x34F JUMP JUMPDEST POP PUSH2 0x376 SWAP3 SWAP2 POP PUSH2 0x3B4 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x36A JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD DUP3 DUP2 GT ISZERO PUSH2 0x36A JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x34F JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x376 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x3B5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3F6 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x3DA JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x408 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x44E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4CB JUMPI PUSH2 0x4CB PUSH2 0x455 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x500 JUMPI PUSH2 0x500 PUSH2 0x455 JUMP JUMPDEST DUP2 PUSH1 0x5 SHL PUSH2 0x50F DUP3 DUP3 ADD PUSH2 0x484 JUMP JUMPDEST SWAP3 DUP4 MSTORE DUP5 DUP2 ADD DUP3 ADD SWAP3 DUP3 DUP2 ADD SWAP1 DUP8 DUP6 GT ISZERO PUSH2 0x529 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP8 ADD SWAP3 POP JUMPDEST DUP5 DUP4 LT ISZERO PUSH2 0x548 JUMPI DUP3 CALLDATALOAD DUP3 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH2 0x52F JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x568 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP1 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x588 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x59C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x5AE JUMPI PUSH2 0x5AE PUSH2 0x455 JUMP JUMPDEST PUSH2 0x5DE DUP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x484 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP10 DUP6 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x5F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 DUP6 ADD DUP7 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD SWAP1 SWAP5 ADD MSTORE SWAP2 SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP2 DUP1 DUP4 GT ISZERO PUSH2 0x619 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH2 0x627 DUP7 DUP3 DUP8 ADD PUSH2 0x4D3 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x645 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x67F JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC6 PUSH24 0x346CD6259AA81FB5955FBA91E6CBAA201F82D78E6C52A3E5 PUSH1 0xBB PUSH20 0xF489BD64736F6C634300080A0033000000000000 ","sourceMap":"175:711:63:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;261:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;237:20;;;;;;;;;821:25:201;;;809:2;794:18;237:20:63;675:177:201;732:70:63;;;;;;:::i;:::-;781:5;:16;732:70;;;283:23;;;;;;:::i;:::-;;:::i;575:153::-;;;;;;:::i;:::-;;:::i;311:36::-;;346:1;311:36;;261:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;283:23::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;283:23:63;:::o;575:153::-;346:1;1217:12:71;;;;;:31;;-1:-1:-1;2436:9:71;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;4053:2:201;1202:146:71;;;4035:21:201;4092:2;4072:18;;;4065:30;4131:34;4111:18;;;4104:62;4202:16;4182:18;;;4175:44;4236:19;;1202:146:71;;;;;;;;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;677:5:63::1;:11:::0;;;694:10;;::::1;::::0;:4:::1;::::0;:10:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;710:13:63;;::::1;::::0;:6:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;:::-;;1510:14:71::0;1506:55;;;1534:12;:20;;;;;;1506:55;1158:407;;575:153:63;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:656:201;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;586:2:201;574:15;591:66;570:88;555:104;;;;661:2;551:113;;14:656;-1:-1:-1;;;14:656:201:o;857:180::-;916:6;969:2;957:9;948:7;944:23;940:32;937:52;;;985:1;982;975:12;937:52;-1:-1:-1;1008:23:201;;857:180;-1:-1:-1;857:180:201:o;1042:184::-;1094:77;1091:1;1084:88;1191:4;1188:1;1181:15;1215:4;1212:1;1205:15;1231:334;1302:2;1296:9;1358:2;1348:13;;1363:66;1344:86;1332:99;;1461:18;1446:34;;1482:22;;;1443:62;1440:88;;;1508:18;;:::i;:::-;1544:2;1537:22;1231:334;;-1:-1:-1;1231:334:201:o;1570:712::-;1624:5;1677:3;1670:4;1662:6;1658:17;1654:27;1644:55;;1695:1;1692;1685:12;1644:55;1731:6;1718:20;1757:4;1780:18;1776:2;1773:26;1770:52;;;1802:18;;:::i;:::-;1848:2;1845:1;1841:10;1871:28;1895:2;1891;1887:11;1871:28;:::i;:::-;1933:15;;;2003;;;1999:24;;;1964:12;;;;2035:15;;;2032:35;;;2063:1;2060;2053:12;2032:35;2099:2;2091:6;2087:15;2076:26;;2111:142;2127:6;2122:3;2119:15;2111:142;;;2193:17;;2181:30;;2144:12;;;;2231;;;;2111:142;;;2271:5;1570:712;-1:-1:-1;;;;;;;1570:712:201:o;2287:1117::-;2399:6;2407;2415;2468:2;2456:9;2447:7;2443:23;2439:32;2436:52;;;2484:1;2481;2474:12;2436:52;2520:9;2507:23;2497:33;;2549:2;2602;2591:9;2587:18;2574:32;2625:18;2666:2;2658:6;2655:14;2652:34;;;2682:1;2679;2672:12;2652:34;2720:6;2709:9;2705:22;2695:32;;2765:7;2758:4;2754:2;2750:13;2746:27;2736:55;;2787:1;2784;2777:12;2736:55;2823:2;2810:16;2845:2;2841;2838:10;2835:36;;;2851:18;;:::i;:::-;2893:112;3001:2;2932:66;2925:4;2921:2;2917:13;2913:86;2909:95;2893:112;:::i;:::-;3028:2;3021:5;3014:17;3068:7;3063:2;3058;3054;3050:11;3046:20;3043:33;3040:53;;;3089:1;3086;3079:12;3040:53;3144:2;3139;3135;3131:11;3126:2;3119:5;3115:14;3102:45;3188:1;3167:14;;;3163:23;;;3156:34;3171:5;;-1:-1:-1;3267:2:201;3252:18;;3239:32;;3283:16;;;3280:36;;;3312:1;3309;3302:12;3280:36;;;3335:63;3390:7;3379:8;3368:9;3364:24;3335:63;:::i;:::-;3325:73;;;2287:1117;;;;;:::o;3409:437::-;3488:1;3484:12;;;;3531;;;3552:61;;3606:4;3598:6;3594:17;3584:27;;3552:61;3659:2;3651:6;3648:14;3628:18;3625:38;3622:218;;;3696:77;3693:1;3686:88;3797:4;3794:1;3787:15;3825:4;3822:1;3815:15;3622:218;;3409:437;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"344600","executionCost":"5386","totalCost":"349986"},"external":{"REVISION()":"261","initialize(uint256,string,uint256[])":"infinite","setValue(uint256)":"22357","setValueViaProxy(uint256)":"22312","text()":"infinite","value()":"2318","values(uint256)":"4597"},"internal":{"getRevision()":"infinite"}},"methodIdentifiers":{"REVISION()":"dde43cba","initialize(uint256,string,uint256[])":"d31f8b6b","setValue(uint256)":"55241077","setValueViaProxy(uint256)":"5dd21610","text()":"1f1bd692","value()":"3fa4f245","values(uint256)":"5e383d21"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"txt\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"vals\",\"type\":\"uint256[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"setValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"setValueViaProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"text\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"value\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"values\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol\":\"MockInitializableImple\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {VersionedInitializable} from '../../protocol/libraries/aave-upgradeability/VersionedInitializable.sol';\\n\\ncontract MockInitializableImple is VersionedInitializable {\\n  uint256 public value;\\n  string public text;\\n  uint256[] public values;\\n\\n  uint256 public constant REVISION = 1;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  function initialize(uint256 val, string memory txt, uint256[] memory vals) external initializer {\\n    value = val;\\n    text = txt;\\n    values = vals;\\n  }\\n\\n  function setValue(uint256 newValue) public {\\n    value = newValue;\\n  }\\n\\n  function setValueViaProxy(uint256 newValue) public {\\n    value = newValue;\\n  }\\n}\\n\\ncontract MockInitializableImpleV2 is VersionedInitializable {\\n  uint256 public value;\\n  string public text;\\n  uint256[] public values;\\n\\n  uint256 public constant REVISION = 2;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  function initialize(uint256 val, string memory txt, uint256[] memory vals) public initializer {\\n    value = val;\\n    text = txt;\\n    values = vals;\\n  }\\n\\n  function setValue(uint256 newValue) public {\\n    value = newValue;\\n  }\\n\\n  function setValueViaProxy(uint256 newValue) public {\\n    value = newValue;\\n  }\\n}\\n\\ncontract MockInitializableFromConstructorImple is VersionedInitializable {\\n  uint256 public value;\\n\\n  uint256 public constant REVISION = 2;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  constructor(uint256 val) {\\n    initialize(val);\\n  }\\n\\n  function initialize(uint256 val) public initializer {\\n    value = val;\\n  }\\n}\\n\\ncontract MockReentrantInitializableImple is VersionedInitializable {\\n  uint256 public value;\\n\\n  uint256 public constant REVISION = 2;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  function initialize(uint256 val) public initializer {\\n    value = val;\\n    if (value < 2) {\\n      initialize(value + 1);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x08dcaae7248f12ffcec322ea174c12d6a9310a59c85e3c11112594ab58f1a2a6\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":10499,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableImple","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":10502,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableImple","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":10572,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableImple","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":8865,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableImple","label":"value","offset":0,"slot":"52","type":"t_uint256"},{"astId":8867,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableImple","label":"text","offset":0,"slot":"53","type":"t_string_storage"},{"astId":8870,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableImple","label":"values","offset":0,"slot":"54","type":"t_array(t_uint256)dyn_storage"}],"types":{"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_array(t_uint256)dyn_storage":{"base":"t_uint256","encoding":"dynamic_array","label":"uint256[]","numberOfBytes":"32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}},"MockInitializableImpleV2":{"abi":[{"inputs":[],"name":"REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"},{"internalType":"string","name":"txt","type":"string"},{"internalType":"uint256[]","name":"vals","type":"uint256[]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setValueViaProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"text","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"value","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"values","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60806040526000805534801561001457600080fd5b506106bd806100246000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80635dd216101161005b5780635dd21610146100b75780635e383d21146100cc578063d31f8b6b146100df578063dde43cba146100f257600080fd5b80631f1bd692146100825780633fa4f245146100a057806355241077146100b7575b600080fd5b61008a6100fa565b60405161009791906103cb565b60405180910390f35b6100a960345481565b604051908152602001610097565b6100ca6100c536600461043e565b603455565b005b6100a96100da36600461043e565b610188565b6100ca6100ed366004610555565b6101a9565b6100a9600281565b6035805461010790610633565b80601f016020809104026020016040519081016040528092919081815260200182805461013390610633565b80156101805780601f1061015557610100808354040283529160200191610180565b820191906000526020600020905b81548152906001019060200180831161016357829003601f168201915b505050505081565b6036818154811061019857600080fd5b600091825260209091200154905081565b60015460029060ff16806101bc5750303b155b806101c8575060005481115b610258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a6564000000000000000000000000000000000000606482015260840160405180910390fd5b60015460ff1615801561029557600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b603485905583516102ad9060359060208701906102f8565b5082516102c190603690602086019061037c565b5080156102f157600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5050505050565b82805461030490610633565b90600052602060002090601f016020900481019282610326576000855561036c565b82601f1061033f57805160ff191683800117855561036c565b8280016001018555821561036c579182015b8281111561036c578251825591602001919060010190610351565b506103789291506103b6565b5090565b82805482825590600052602060002090810192821561036c579160200282018281111561036c578251825591602001919060010190610351565b5b8082111561037857600081556001016103b7565b600060208083528351808285015260005b818110156103f8578581018301518582016040015282016103dc565b8181111561040a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561045057600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156104cd576104cd610457565b604052919050565b600082601f8301126104e657600080fd5b8135602067ffffffffffffffff82111561050257610502610457565b8160051b610511828201610486565b928352848101820192828101908785111561052b57600080fd5b83870192505b8483101561054a57823582529183019190830190610531565b979650505050505050565b60008060006060848603121561056a57600080fd5b8335925060208085013567ffffffffffffffff8082111561058a57600080fd5b818701915087601f83011261059e57600080fd5b8135818111156105b0576105b0610457565b6105e0847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610486565b81815289858386010111156105f457600080fd5b81858501868301376000918101909401529193506040860135918083111561061b57600080fd5b5050610629868287016104d5565b9150509250925092565b600181811c9082168061064757607f821691505b60208210811415610681577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea2646970667358221220049a391881addaa74e336cd0d720d090eda3b7301b91e4ad853b7447fbc1419c64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6BD DUP1 PUSH2 0x24 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 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5DD21610 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x5DD21610 EQ PUSH2 0xB7 JUMPI DUP1 PUSH4 0x5E383D21 EQ PUSH2 0xCC JUMPI DUP1 PUSH4 0xD31F8B6B EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0xDDE43CBA EQ PUSH2 0xF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1F1BD692 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x3FA4F245 EQ PUSH2 0xA0 JUMPI DUP1 PUSH4 0x55241077 EQ PUSH2 0xB7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8A PUSH2 0xFA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0x3CB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xA9 PUSH1 0x34 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x97 JUMP JUMPDEST PUSH2 0xCA PUSH2 0xC5 CALLDATASIZE PUSH1 0x4 PUSH2 0x43E JUMP JUMPDEST PUSH1 0x34 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH2 0xA9 PUSH2 0xDA CALLDATASIZE PUSH1 0x4 PUSH2 0x43E JUMP JUMPDEST PUSH2 0x188 JUMP JUMPDEST PUSH2 0xCA PUSH2 0xED CALLDATASIZE PUSH1 0x4 PUSH2 0x555 JUMP JUMPDEST PUSH2 0x1A9 JUMP JUMPDEST PUSH2 0xA9 PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH2 0x107 SWAP1 PUSH2 0x633 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x133 SWAP1 PUSH2 0x633 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x180 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x155 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x180 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 0x163 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x36 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x2 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x1BC JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x1C8 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x258 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x34 DUP6 SWAP1 SSTORE DUP4 MLOAD PUSH2 0x2AD SWAP1 PUSH1 0x35 SWAP1 PUSH1 0x20 DUP8 ADD SWAP1 PUSH2 0x2F8 JUMP JUMPDEST POP DUP3 MLOAD PUSH2 0x2C1 SWAP1 PUSH1 0x36 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x37C JUMP JUMPDEST POP DUP1 ISZERO PUSH2 0x2F1 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x304 SWAP1 PUSH2 0x633 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x326 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x36C JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x33F JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x36C JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x36C JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x36C JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x351 JUMP JUMPDEST POP PUSH2 0x378 SWAP3 SWAP2 POP PUSH2 0x3B6 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x36C JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD DUP3 DUP2 GT ISZERO PUSH2 0x36C JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x351 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x378 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x3B7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3F8 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x3DC JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x40A JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x450 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4CD JUMPI PUSH2 0x4CD PUSH2 0x457 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x502 JUMPI PUSH2 0x502 PUSH2 0x457 JUMP JUMPDEST DUP2 PUSH1 0x5 SHL PUSH2 0x511 DUP3 DUP3 ADD PUSH2 0x486 JUMP JUMPDEST SWAP3 DUP4 MSTORE DUP5 DUP2 ADD DUP3 ADD SWAP3 DUP3 DUP2 ADD SWAP1 DUP8 DUP6 GT ISZERO PUSH2 0x52B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP8 ADD SWAP3 POP JUMPDEST DUP5 DUP4 LT ISZERO PUSH2 0x54A JUMPI DUP3 CALLDATALOAD DUP3 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH2 0x531 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x56A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP1 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x58A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x59E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x5B0 JUMPI PUSH2 0x5B0 PUSH2 0x457 JUMP JUMPDEST PUSH2 0x5E0 DUP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x486 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP10 DUP6 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x5F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 DUP6 ADD DUP7 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD SWAP1 SWAP5 ADD MSTORE SWAP2 SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP2 DUP1 DUP4 GT ISZERO PUSH2 0x61B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH2 0x629 DUP7 DUP3 DUP8 ADD PUSH2 0x4D5 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x647 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x681 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DIV SWAP11 CODECOPY XOR DUP2 0xAD 0xDA 0xA7 0x4E CALLER PUSH13 0xD0D720D090EDA3B7301B91E4AD DUP6 EXTCODESIZE PUSH21 0x47FBC1419C64736F6C634300080A00330000000000 ","sourceMap":"888:711:63:-:0;;;928:1:71;886:43;;888:711:63;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@REVISION_8941":{"entryPoint":null,"id":8941,"parameterSlots":0,"returnSlots":0},"@getRevision_8951":{"entryPoint":null,"id":8951,"parameterSlots":0,"returnSlots":1},"@initialize_8976":{"entryPoint":425,"id":8976,"parameterSlots":3,"returnSlots":0},"@isConstructor_10568":{"entryPoint":null,"id":10568,"parameterSlots":0,"returnSlots":1},"@setValueViaProxy_8996":{"entryPoint":null,"id":8996,"parameterSlots":1,"returnSlots":0},"@setValue_8986":{"entryPoint":null,"id":8986,"parameterSlots":1,"returnSlots":0},"@text_8935":{"entryPoint":250,"id":8935,"parameterSlots":0,"returnSlots":0},"@value_8933":{"entryPoint":null,"id":8933,"parameterSlots":0,"returnSlots":0},"@values_8938":{"entryPoint":392,"id":8938,"parameterSlots":0,"returnSlots":0},"abi_decode_array_uint256_dyn":{"entryPoint":1237,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":1086,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_string_memory_ptrt_array$_t_uint256_$dyn_memory_ptr":{"entryPoint":1365,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":971,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":1158,"id":null,"parameterSlots":1,"returnSlots":1},"extract_byte_array_length":{"entryPoint":1587,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x41":{"entryPoint":1111,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:4263:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"135:535:201","statements":[{"nodeType":"YulVariableDeclaration","src":"145:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"155:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"149:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"173:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"184:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"166:6:201"},"nodeType":"YulFunctionCall","src":"166:21:201"},"nodeType":"YulExpressionStatement","src":"166:21:201"},{"nodeType":"YulVariableDeclaration","src":"196:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"216:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:201"},"nodeType":"YulFunctionCall","src":"210:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"200:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"243:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"254:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"239:3:201"},"nodeType":"YulFunctionCall","src":"239:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"259:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"232:6:201"},"nodeType":"YulFunctionCall","src":"232:34:201"},"nodeType":"YulExpressionStatement","src":"232:34:201"},{"nodeType":"YulVariableDeclaration","src":"275:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"284:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"279:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"344:90:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"373:9:201"},{"name":"i","nodeType":"YulIdentifier","src":"384:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"369:3:201"},"nodeType":"YulFunctionCall","src":"369:17:201"},{"kind":"number","nodeType":"YulLiteral","src":"388:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"365:3:201"},"nodeType":"YulFunctionCall","src":"365:26:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"407:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"415:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"403:3:201"},"nodeType":"YulFunctionCall","src":"403:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"419:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"399:3:201"},"nodeType":"YulFunctionCall","src":"399:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"393:5:201"},"nodeType":"YulFunctionCall","src":"393:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"358:6:201"},"nodeType":"YulFunctionCall","src":"358:66:201"},"nodeType":"YulExpressionStatement","src":"358:66:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"305:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"308:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"302:2:201"},"nodeType":"YulFunctionCall","src":"302:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"316:19:201","statements":[{"nodeType":"YulAssignment","src":"318:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"327:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"330:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"323:3:201"},"nodeType":"YulFunctionCall","src":"323:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"318:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"298:3:201","statements":[]},"src":"294:140:201"},{"body":{"nodeType":"YulBlock","src":"468:66:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"497:9:201"},{"name":"length","nodeType":"YulIdentifier","src":"508:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"493:3:201"},"nodeType":"YulFunctionCall","src":"493:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"517:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"489:3:201"},"nodeType":"YulFunctionCall","src":"489:31:201"},{"kind":"number","nodeType":"YulLiteral","src":"522:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"482:6:201"},"nodeType":"YulFunctionCall","src":"482:42:201"},"nodeType":"YulExpressionStatement","src":"482:42:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"449:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"452:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"446:2:201"},"nodeType":"YulFunctionCall","src":"446:13:201"},"nodeType":"YulIf","src":"443:91:201"},{"nodeType":"YulAssignment","src":"543:121:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"559:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"578:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"586:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"574:3:201"},"nodeType":"YulFunctionCall","src":"574:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"591:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"570:3:201"},"nodeType":"YulFunctionCall","src":"570:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"555:3:201"},"nodeType":"YulFunctionCall","src":"555:104:201"},{"kind":"number","nodeType":"YulLiteral","src":"661:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"551:3:201"},"nodeType":"YulFunctionCall","src":"551:113:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"543:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"104:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"115:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"126:4:201","type":""}],"src":"14:656:201"},{"body":{"nodeType":"YulBlock","src":"776:76:201","statements":[{"nodeType":"YulAssignment","src":"786:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"798:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"809:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"794:3:201"},"nodeType":"YulFunctionCall","src":"794:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"786:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"828:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"839:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"821:6:201"},"nodeType":"YulFunctionCall","src":"821:25:201"},"nodeType":"YulExpressionStatement","src":"821:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"745:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"756:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"767:4:201","type":""}],"src":"675:177:201"},{"body":{"nodeType":"YulBlock","src":"927:110:201","statements":[{"body":{"nodeType":"YulBlock","src":"973:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"982:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"985:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"975:6:201"},"nodeType":"YulFunctionCall","src":"975:12:201"},"nodeType":"YulExpressionStatement","src":"975:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"948:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"957:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"944:3:201"},"nodeType":"YulFunctionCall","src":"944:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"969:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"940:3:201"},"nodeType":"YulFunctionCall","src":"940:32:201"},"nodeType":"YulIf","src":"937:52:201"},{"nodeType":"YulAssignment","src":"998:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1021:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1008:12:201"},"nodeType":"YulFunctionCall","src":"1008:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"998:6:201"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"893:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"904:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"916:6:201","type":""}],"src":"857:180:201"},{"body":{"nodeType":"YulBlock","src":"1074:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1091:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1094:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1084:6:201"},"nodeType":"YulFunctionCall","src":"1084:88:201"},"nodeType":"YulExpressionStatement","src":"1084:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1188:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1191:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1181:6:201"},"nodeType":"YulFunctionCall","src":"1181:15:201"},"nodeType":"YulExpressionStatement","src":"1181:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1212:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1215:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1205:6:201"},"nodeType":"YulFunctionCall","src":"1205:15:201"},"nodeType":"YulExpressionStatement","src":"1205:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1042:184:201"},{"body":{"nodeType":"YulBlock","src":"1276:289:201","statements":[{"nodeType":"YulAssignment","src":"1286:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1302:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1296:5:201"},"nodeType":"YulFunctionCall","src":"1296:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1286:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1314:117:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1336:6:201"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"1352:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"1358:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1348:3:201"},"nodeType":"YulFunctionCall","src":"1348:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"1363:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1344:3:201"},"nodeType":"YulFunctionCall","src":"1344:86:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1332:3:201"},"nodeType":"YulFunctionCall","src":"1332:99:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1318:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1506:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1508:16:201"},"nodeType":"YulFunctionCall","src":"1508:18:201"},"nodeType":"YulExpressionStatement","src":"1508:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1449:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"1461:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1446:2:201"},"nodeType":"YulFunctionCall","src":"1446:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1485:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1497:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1482:2:201"},"nodeType":"YulFunctionCall","src":"1482:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1443:2:201"},"nodeType":"YulFunctionCall","src":"1443:62:201"},"nodeType":"YulIf","src":"1440:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1544:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1548:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1537:6:201"},"nodeType":"YulFunctionCall","src":"1537:22:201"},"nodeType":"YulExpressionStatement","src":"1537:22:201"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"1256:4:201","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1265:6:201","type":""}],"src":"1231:334:201"},{"body":{"nodeType":"YulBlock","src":"1634:648:201","statements":[{"body":{"nodeType":"YulBlock","src":"1683:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1692:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1695:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1685:6:201"},"nodeType":"YulFunctionCall","src":"1685:12:201"},"nodeType":"YulExpressionStatement","src":"1685:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1662:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1670:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1658:3:201"},"nodeType":"YulFunctionCall","src":"1658:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"1677:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1654:3:201"},"nodeType":"YulFunctionCall","src":"1654:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1647:6:201"},"nodeType":"YulFunctionCall","src":"1647:35:201"},"nodeType":"YulIf","src":"1644:55:201"},{"nodeType":"YulVariableDeclaration","src":"1708:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1731:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1718:12:201"},"nodeType":"YulFunctionCall","src":"1718:20:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1712:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1747:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1757:4:201","type":"","value":"0x20"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1751:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1800:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1802:16:201"},"nodeType":"YulFunctionCall","src":"1802:18:201"},"nodeType":"YulExpressionStatement","src":"1802:18:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1776:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"1780:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1773:2:201"},"nodeType":"YulFunctionCall","src":"1773:26:201"},"nodeType":"YulIf","src":"1770:52:201"},{"nodeType":"YulVariableDeclaration","src":"1831:20:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1845:1:201","type":"","value":"5"},{"name":"_1","nodeType":"YulIdentifier","src":"1848:2:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1841:3:201"},"nodeType":"YulFunctionCall","src":"1841:10:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"1835:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1860:39:201","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1891:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"1895:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1887:3:201"},"nodeType":"YulFunctionCall","src":"1887:11:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"1871:15:201"},"nodeType":"YulFunctionCall","src":"1871:28:201"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"1864:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1908:16:201","value":{"name":"dst","nodeType":"YulIdentifier","src":"1921:3:201"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"1912:5:201","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1940:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1945:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1933:6:201"},"nodeType":"YulFunctionCall","src":"1933:15:201"},"nodeType":"YulExpressionStatement","src":"1933:15:201"},{"nodeType":"YulAssignment","src":"1957:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1968:3:201"},{"name":"_2","nodeType":"YulIdentifier","src":"1973:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1964:3:201"},"nodeType":"YulFunctionCall","src":"1964:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"1957:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"1985:38:201","value":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2007:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"2015:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2003:3:201"},"nodeType":"YulFunctionCall","src":"2003:15:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2020:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1999:3:201"},"nodeType":"YulFunctionCall","src":"1999:24:201"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"1989:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2051:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2060:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2063:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2053:6:201"},"nodeType":"YulFunctionCall","src":"2053:12:201"},"nodeType":"YulExpressionStatement","src":"2053:12:201"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"2038:6:201"},{"name":"end","nodeType":"YulIdentifier","src":"2046:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2035:2:201"},"nodeType":"YulFunctionCall","src":"2035:15:201"},"nodeType":"YulIf","src":"2032:35:201"},{"nodeType":"YulVariableDeclaration","src":"2076:26:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2091:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2099:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2087:3:201"},"nodeType":"YulFunctionCall","src":"2087:15:201"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"2080:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2167:86:201","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2188:3:201"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2206:3:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2193:12:201"},"nodeType":"YulFunctionCall","src":"2193:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2181:6:201"},"nodeType":"YulFunctionCall","src":"2181:30:201"},"nodeType":"YulExpressionStatement","src":"2181:30:201"},{"nodeType":"YulAssignment","src":"2224:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2235:3:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2240:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2231:3:201"},"nodeType":"YulFunctionCall","src":"2231:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"2224:3:201"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2122:3:201"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"2127:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2119:2:201"},"nodeType":"YulFunctionCall","src":"2119:15:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2135:23:201","statements":[{"nodeType":"YulAssignment","src":"2137:19:201","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2148:3:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2153:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2144:3:201"},"nodeType":"YulFunctionCall","src":"2144:12:201"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"2137:3:201"}]}]},"pre":{"nodeType":"YulBlock","src":"2115:3:201","statements":[]},"src":"2111:142:201"},{"nodeType":"YulAssignment","src":"2262:14:201","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"2271:5:201"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"2262:5:201"}]}]},"name":"abi_decode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1608:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"1616:3:201","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"1624:5:201","type":""}],"src":"1570:712:201"},{"body":{"nodeType":"YulBlock","src":"2426:978:201","statements":[{"body":{"nodeType":"YulBlock","src":"2472:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2481:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2484:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2474:6:201"},"nodeType":"YulFunctionCall","src":"2474:12:201"},"nodeType":"YulExpressionStatement","src":"2474:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2447:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2456:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2443:3:201"},"nodeType":"YulFunctionCall","src":"2443:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2468:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2439:3:201"},"nodeType":"YulFunctionCall","src":"2439:32:201"},"nodeType":"YulIf","src":"2436:52:201"},{"nodeType":"YulAssignment","src":"2497:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2520:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2507:12:201"},"nodeType":"YulFunctionCall","src":"2507:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2497:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2539:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2549:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2543:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2560:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2591:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2602:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2587:3:201"},"nodeType":"YulFunctionCall","src":"2587:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2574:12:201"},"nodeType":"YulFunctionCall","src":"2574:32:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2564:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2615:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2625:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"2619:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2670:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2679:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2682:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2672:6:201"},"nodeType":"YulFunctionCall","src":"2672:12:201"},"nodeType":"YulExpressionStatement","src":"2672:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2658:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2666:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2655:2:201"},"nodeType":"YulFunctionCall","src":"2655:14:201"},"nodeType":"YulIf","src":"2652:34:201"},{"nodeType":"YulVariableDeclaration","src":"2695:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2709:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"2720:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2705:3:201"},"nodeType":"YulFunctionCall","src":"2705:22:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"2699:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2775:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2784:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2787:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2777:6:201"},"nodeType":"YulFunctionCall","src":"2777:12:201"},"nodeType":"YulExpressionStatement","src":"2777:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2754:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"2758:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2750:3:201"},"nodeType":"YulFunctionCall","src":"2750:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2765:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2746:3:201"},"nodeType":"YulFunctionCall","src":"2746:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2739:6:201"},"nodeType":"YulFunctionCall","src":"2739:35:201"},"nodeType":"YulIf","src":"2736:55:201"},{"nodeType":"YulVariableDeclaration","src":"2800:26:201","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2823:2:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2810:12:201"},"nodeType":"YulFunctionCall","src":"2810:16:201"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"2804:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2849:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2851:16:201"},"nodeType":"YulFunctionCall","src":"2851:18:201"},"nodeType":"YulExpressionStatement","src":"2851:18:201"}]},"condition":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"2841:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2845:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2838:2:201"},"nodeType":"YulFunctionCall","src":"2838:10:201"},"nodeType":"YulIf","src":"2835:36:201"},{"nodeType":"YulVariableDeclaration","src":"2880:125:201","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"2921:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"2925:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2917:3:201"},"nodeType":"YulFunctionCall","src":"2917:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"2932:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2913:3:201"},"nodeType":"YulFunctionCall","src":"2913:86:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3001:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2909:3:201"},"nodeType":"YulFunctionCall","src":"2909:95:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"2893:15:201"},"nodeType":"YulFunctionCall","src":"2893:112:201"},"variables":[{"name":"array","nodeType":"YulTypedName","src":"2884:5:201","type":""}]},{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"3021:5:201"},{"name":"_4","nodeType":"YulIdentifier","src":"3028:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3014:6:201"},"nodeType":"YulFunctionCall","src":"3014:17:201"},"nodeType":"YulExpressionStatement","src":"3014:17:201"},{"body":{"nodeType":"YulBlock","src":"3077:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3086:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3089:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3079:6:201"},"nodeType":"YulFunctionCall","src":"3079:12:201"},"nodeType":"YulExpressionStatement","src":"3079:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3054:2:201"},{"name":"_4","nodeType":"YulIdentifier","src":"3058:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3050:3:201"},"nodeType":"YulFunctionCall","src":"3050:11:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3063:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3046:3:201"},"nodeType":"YulFunctionCall","src":"3046:20:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3068:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3043:2:201"},"nodeType":"YulFunctionCall","src":"3043:33:201"},"nodeType":"YulIf","src":"3040:53:201"},{"expression":{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"3119:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3126:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3115:3:201"},"nodeType":"YulFunctionCall","src":"3115:14:201"},{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3135:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3139:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3131:3:201"},"nodeType":"YulFunctionCall","src":"3131:11:201"},{"name":"_4","nodeType":"YulIdentifier","src":"3144:2:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"3102:12:201"},"nodeType":"YulFunctionCall","src":"3102:45:201"},"nodeType":"YulExpressionStatement","src":"3102:45:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"3171:5:201"},{"name":"_4","nodeType":"YulIdentifier","src":"3178:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3167:3:201"},"nodeType":"YulFunctionCall","src":"3167:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3183:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3163:3:201"},"nodeType":"YulFunctionCall","src":"3163:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3188:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3156:6:201"},"nodeType":"YulFunctionCall","src":"3156:34:201"},"nodeType":"YulExpressionStatement","src":"3156:34:201"},{"nodeType":"YulAssignment","src":"3199:15:201","value":{"name":"array","nodeType":"YulIdentifier","src":"3209:5:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3199:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3223:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3256:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3267:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3252:3:201"},"nodeType":"YulFunctionCall","src":"3252:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3239:12:201"},"nodeType":"YulFunctionCall","src":"3239:32:201"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"3227:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3300:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3309:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3312:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3302:6:201"},"nodeType":"YulFunctionCall","src":"3302:12:201"},"nodeType":"YulExpressionStatement","src":"3302:12:201"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"3286:8:201"},{"name":"_2","nodeType":"YulIdentifier","src":"3296:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3283:2:201"},"nodeType":"YulFunctionCall","src":"3283:16:201"},"nodeType":"YulIf","src":"3280:36:201"},{"nodeType":"YulAssignment","src":"3325:73:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3368:9:201"},{"name":"offset_1","nodeType":"YulIdentifier","src":"3379:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3364:3:201"},"nodeType":"YulFunctionCall","src":"3364:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3390:7:201"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nodeType":"YulIdentifier","src":"3335:28:201"},"nodeType":"YulFunctionCall","src":"3335:63:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3325:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_string_memory_ptrt_array$_t_uint256_$dyn_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2376:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2387:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2399:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2407:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2415:6:201","type":""}],"src":"2287:1117:201"},{"body":{"nodeType":"YulBlock","src":"3464:382:201","statements":[{"nodeType":"YulAssignment","src":"3474:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3488:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"3491:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"3484:3:201"},"nodeType":"YulFunctionCall","src":"3484:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3474:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3505:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"3535:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"3541:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3531:3:201"},"nodeType":"YulFunctionCall","src":"3531:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"3509:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3582:31:201","statements":[{"nodeType":"YulAssignment","src":"3584:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3598:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3606:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3594:3:201"},"nodeType":"YulFunctionCall","src":"3594:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3584:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3562:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3555:6:201"},"nodeType":"YulFunctionCall","src":"3555:26:201"},"nodeType":"YulIf","src":"3552:61:201"},{"body":{"nodeType":"YulBlock","src":"3672:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3693:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3696:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3686:6:201"},"nodeType":"YulFunctionCall","src":"3686:88:201"},"nodeType":"YulExpressionStatement","src":"3686:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3794:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3797:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3787:6:201"},"nodeType":"YulFunctionCall","src":"3787:15:201"},"nodeType":"YulExpressionStatement","src":"3787:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3822:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3825:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3815:6:201"},"nodeType":"YulFunctionCall","src":"3815:15:201"},"nodeType":"YulExpressionStatement","src":"3815:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3628:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3651:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3659:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3648:2:201"},"nodeType":"YulFunctionCall","src":"3648:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3625:2:201"},"nodeType":"YulFunctionCall","src":"3625:38:201"},"nodeType":"YulIf","src":"3622:218:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"3444:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"3453:6:201","type":""}],"src":"3409:437:201"},{"body":{"nodeType":"YulBlock","src":"4025:236:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4042:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4053:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4035:6:201"},"nodeType":"YulFunctionCall","src":"4035:21:201"},"nodeType":"YulExpressionStatement","src":"4035:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4076:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4087:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4072:3:201"},"nodeType":"YulFunctionCall","src":"4072:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"4092:2:201","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4065:6:201"},"nodeType":"YulFunctionCall","src":"4065:30:201"},"nodeType":"YulExpressionStatement","src":"4065:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4115:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4126:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4111:3:201"},"nodeType":"YulFunctionCall","src":"4111:18:201"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"4131:34:201","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4104:6:201"},"nodeType":"YulFunctionCall","src":"4104:62:201"},"nodeType":"YulExpressionStatement","src":"4104:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4186:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4197:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4182:3:201"},"nodeType":"YulFunctionCall","src":"4182:18:201"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"4202:16:201","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4175:6:201"},"nodeType":"YulFunctionCall","src":"4175:44:201"},"nodeType":"YulExpressionStatement","src":"4175:44:201"},{"nodeType":"YulAssignment","src":"4228:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4240:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4251:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4236:3:201"},"nodeType":"YulFunctionCall","src":"4236:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4228:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4002:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4016:4:201","type":""}],"src":"3851:410:201"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_array_uint256_dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0x20\n        if gt(_1, 0xffffffffffffffff) { panic_error_0x41() }\n        let _3 := shl(5, _1)\n        let dst := allocate_memory(add(_3, _2))\n        let dst_1 := dst\n        mstore(dst, _1)\n        dst := add(dst, _2)\n        let srcEnd := add(add(offset, _3), _2)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, _2)\n        for { } lt(src, srcEnd) { src := add(src, _2) }\n        {\n            mstore(dst, calldataload(src))\n            dst := add(dst, _2)\n        }\n        array := dst_1\n    }\n    function abi_decode_tuple_t_uint256t_string_memory_ptrt_array$_t_uint256_$dyn_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let _1 := 32\n        let offset := calldataload(add(headStart, _1))\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n        let _4 := calldataload(_3)\n        if gt(_4, _2) { panic_error_0x41() }\n        let array := allocate_memory(add(and(add(_4, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), _1))\n        mstore(array, _4)\n        if gt(add(add(_3, _4), _1), dataEnd) { revert(0, 0) }\n        calldatacopy(add(array, _1), add(_3, _1), _4)\n        mstore(add(add(array, _4), _1), 0)\n        value1 := array\n        let offset_1 := calldataload(add(headStart, 64))\n        if gt(offset_1, _2) { revert(0, 0) }\n        value2 := abi_decode_array_uint256_dyn(add(headStart, offset_1), dataEnd)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061007d5760003560e01c80635dd216101161005b5780635dd21610146100b75780635e383d21146100cc578063d31f8b6b146100df578063dde43cba146100f257600080fd5b80631f1bd692146100825780633fa4f245146100a057806355241077146100b7575b600080fd5b61008a6100fa565b60405161009791906103cb565b60405180910390f35b6100a960345481565b604051908152602001610097565b6100ca6100c536600461043e565b603455565b005b6100a96100da36600461043e565b610188565b6100ca6100ed366004610555565b6101a9565b6100a9600281565b6035805461010790610633565b80601f016020809104026020016040519081016040528092919081815260200182805461013390610633565b80156101805780601f1061015557610100808354040283529160200191610180565b820191906000526020600020905b81548152906001019060200180831161016357829003601f168201915b505050505081565b6036818154811061019857600080fd5b600091825260209091200154905081565b60015460029060ff16806101bc5750303b155b806101c8575060005481115b610258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a6564000000000000000000000000000000000000606482015260840160405180910390fd5b60015460ff1615801561029557600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b603485905583516102ad9060359060208701906102f8565b5082516102c190603690602086019061037c565b5080156102f157600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5050505050565b82805461030490610633565b90600052602060002090601f016020900481019282610326576000855561036c565b82601f1061033f57805160ff191683800117855561036c565b8280016001018555821561036c579182015b8281111561036c578251825591602001919060010190610351565b506103789291506103b6565b5090565b82805482825590600052602060002090810192821561036c579160200282018281111561036c578251825591602001919060010190610351565b5b8082111561037857600081556001016103b7565b600060208083528351808285015260005b818110156103f8578581018301518582016040015282016103dc565b8181111561040a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561045057600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156104cd576104cd610457565b604052919050565b600082601f8301126104e657600080fd5b8135602067ffffffffffffffff82111561050257610502610457565b8160051b610511828201610486565b928352848101820192828101908785111561052b57600080fd5b83870192505b8483101561054a57823582529183019190830190610531565b979650505050505050565b60008060006060848603121561056a57600080fd5b8335925060208085013567ffffffffffffffff8082111561058a57600080fd5b818701915087601f83011261059e57600080fd5b8135818111156105b0576105b0610457565b6105e0847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610486565b81815289858386010111156105f457600080fd5b81858501868301376000918101909401529193506040860135918083111561061b57600080fd5b5050610629868287016104d5565b9150509250925092565b600181811c9082168061064757607f821691505b60208210811415610681577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea2646970667358221220049a391881addaa74e336cd0d720d090eda3b7301b91e4ad853b7447fbc1419c64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5DD21610 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x5DD21610 EQ PUSH2 0xB7 JUMPI DUP1 PUSH4 0x5E383D21 EQ PUSH2 0xCC JUMPI DUP1 PUSH4 0xD31F8B6B EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0xDDE43CBA EQ PUSH2 0xF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1F1BD692 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x3FA4F245 EQ PUSH2 0xA0 JUMPI DUP1 PUSH4 0x55241077 EQ PUSH2 0xB7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8A PUSH2 0xFA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0x3CB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xA9 PUSH1 0x34 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x97 JUMP JUMPDEST PUSH2 0xCA PUSH2 0xC5 CALLDATASIZE PUSH1 0x4 PUSH2 0x43E JUMP JUMPDEST PUSH1 0x34 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH2 0xA9 PUSH2 0xDA CALLDATASIZE PUSH1 0x4 PUSH2 0x43E JUMP JUMPDEST PUSH2 0x188 JUMP JUMPDEST PUSH2 0xCA PUSH2 0xED CALLDATASIZE PUSH1 0x4 PUSH2 0x555 JUMP JUMPDEST PUSH2 0x1A9 JUMP JUMPDEST PUSH2 0xA9 PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH2 0x107 SWAP1 PUSH2 0x633 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x133 SWAP1 PUSH2 0x633 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x180 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x155 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x180 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 0x163 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x36 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x2 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x1BC JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x1C8 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x258 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x34 DUP6 SWAP1 SSTORE DUP4 MLOAD PUSH2 0x2AD SWAP1 PUSH1 0x35 SWAP1 PUSH1 0x20 DUP8 ADD SWAP1 PUSH2 0x2F8 JUMP JUMPDEST POP DUP3 MLOAD PUSH2 0x2C1 SWAP1 PUSH1 0x36 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x37C JUMP JUMPDEST POP DUP1 ISZERO PUSH2 0x2F1 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x304 SWAP1 PUSH2 0x633 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x326 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x36C JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x33F JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x36C JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x36C JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x36C JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x351 JUMP JUMPDEST POP PUSH2 0x378 SWAP3 SWAP2 POP PUSH2 0x3B6 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH2 0x36C JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD DUP3 DUP2 GT ISZERO PUSH2 0x36C JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x351 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x378 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x3B7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3F8 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x3DC JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x40A JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x450 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4CD JUMPI PUSH2 0x4CD PUSH2 0x457 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x502 JUMPI PUSH2 0x502 PUSH2 0x457 JUMP JUMPDEST DUP2 PUSH1 0x5 SHL PUSH2 0x511 DUP3 DUP3 ADD PUSH2 0x486 JUMP JUMPDEST SWAP3 DUP4 MSTORE DUP5 DUP2 ADD DUP3 ADD SWAP3 DUP3 DUP2 ADD SWAP1 DUP8 DUP6 GT ISZERO PUSH2 0x52B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP8 ADD SWAP3 POP JUMPDEST DUP5 DUP4 LT ISZERO PUSH2 0x54A JUMPI DUP3 CALLDATALOAD DUP3 MSTORE SWAP2 DUP4 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 PUSH2 0x531 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x56A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP1 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x58A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP DUP8 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x59E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x5B0 JUMPI PUSH2 0x5B0 PUSH2 0x457 JUMP JUMPDEST PUSH2 0x5E0 DUP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x486 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP10 DUP6 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x5F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 DUP6 ADD DUP7 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD SWAP1 SWAP5 ADD MSTORE SWAP2 SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP2 DUP1 DUP4 GT ISZERO PUSH2 0x61B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP PUSH2 0x629 DUP7 DUP3 DUP8 ADD PUSH2 0x4D5 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x647 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x681 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DIV SWAP11 CODECOPY XOR DUP2 0xAD 0xDA 0xA7 0x4E CALLER PUSH13 0xD0D720D090EDA3B7301B91E4AD DUP6 EXTCODESIZE PUSH21 0x47FBC1419C64736F6C634300080A00330000000000 ","sourceMap":"888:711:63:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;976:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;952:20;;;;;;;;;821:25:201;;;809:2;794:18;952:20:63;675:177:201;1445:70:63;;;;;;:::i;:::-;1494:5;:16;1445:70;;;998:23;;;;;;:::i;:::-;;:::i;1290:151::-;;;;;;:::i;:::-;;:::i;1026:36::-;;1061:1;1026:36;;976:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;998:23::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;998:23:63;:::o;1290:151::-;1217:12:71;;1061:1:63;;1217:12:71;;;:31;;-1:-1:-1;2436:9:71;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;4053:2:201;1202:146:71;;;4035:21:201;4092:2;4072:18;;;4065:30;4131:34;4111:18;;;4104:62;4202:16;4182:18;;;4175:44;4236:19;;1202:146:71;;;;;;;;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;1390:5:63::1;:11:::0;;;1407:10;;::::1;::::0;:4:::1;::::0;:10:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;1423:13:63;;::::1;::::0;:6:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;:::-;;1510:14:71::0;1506:55;;;1534:12;:20;;;;;;1506:55;1158:407;;1290:151:63;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:656:201;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;586:2:201;574:15;591:66;570:88;555:104;;;;661:2;551:113;;14:656;-1:-1:-1;;;14:656:201:o;857:180::-;916:6;969:2;957:9;948:7;944:23;940:32;937:52;;;985:1;982;975:12;937:52;-1:-1:-1;1008:23:201;;857:180;-1:-1:-1;857:180:201:o;1042:184::-;1094:77;1091:1;1084:88;1191:4;1188:1;1181:15;1215:4;1212:1;1205:15;1231:334;1302:2;1296:9;1358:2;1348:13;;1363:66;1344:86;1332:99;;1461:18;1446:34;;1482:22;;;1443:62;1440:88;;;1508:18;;:::i;:::-;1544:2;1537:22;1231:334;;-1:-1:-1;1231:334:201:o;1570:712::-;1624:5;1677:3;1670:4;1662:6;1658:17;1654:27;1644:55;;1695:1;1692;1685:12;1644:55;1731:6;1718:20;1757:4;1780:18;1776:2;1773:26;1770:52;;;1802:18;;:::i;:::-;1848:2;1845:1;1841:10;1871:28;1895:2;1891;1887:11;1871:28;:::i;:::-;1933:15;;;2003;;;1999:24;;;1964:12;;;;2035:15;;;2032:35;;;2063:1;2060;2053:12;2032:35;2099:2;2091:6;2087:15;2076:26;;2111:142;2127:6;2122:3;2119:15;2111:142;;;2193:17;;2181:30;;2144:12;;;;2231;;;;2111:142;;;2271:5;1570:712;-1:-1:-1;;;;;;;1570:712:201:o;2287:1117::-;2399:6;2407;2415;2468:2;2456:9;2447:7;2443:23;2439:32;2436:52;;;2484:1;2481;2474:12;2436:52;2520:9;2507:23;2497:33;;2549:2;2602;2591:9;2587:18;2574:32;2625:18;2666:2;2658:6;2655:14;2652:34;;;2682:1;2679;2672:12;2652:34;2720:6;2709:9;2705:22;2695:32;;2765:7;2758:4;2754:2;2750:13;2746:27;2736:55;;2787:1;2784;2777:12;2736:55;2823:2;2810:16;2845:2;2841;2838:10;2835:36;;;2851:18;;:::i;:::-;2893:112;3001:2;2932:66;2925:4;2921:2;2917:13;2913:86;2909:95;2893:112;:::i;:::-;3028:2;3021:5;3014:17;3068:7;3063:2;3058;3054;3050:11;3046:20;3043:33;3040:53;;;3089:1;3086;3079:12;3040:53;3144:2;3139;3135;3131:11;3126:2;3119:5;3115:14;3102:45;3188:1;3167:14;;;3163:23;;;3156:34;3171:5;;-1:-1:-1;3267:2:201;3252:18;;3239:32;;3283:16;;;3280:36;;;3312:1;3309;3302:12;3280:36;;;3335:63;3390:7;3379:8;3368:9;3364:24;3335:63;:::i;:::-;3325:73;;;2287:1117;;;;;:::o;3409:437::-;3488:1;3484:12;;;;3531;;;3552:61;;3606:4;3598:6;3594:17;3584:27;;3552:61;3659:2;3651:6;3648:14;3628:18;3625:38;3622:218;;;3696:77;3693:1;3686:88;3797:4;3794:1;3787:15;3825:4;3822:1;3815:15;3622:218;;3409:437;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"345000","executionCost":"5386","totalCost":"350386"},"external":{"REVISION()":"261","initialize(uint256,string,uint256[])":"infinite","setValue(uint256)":"22357","setValueViaProxy(uint256)":"22312","text()":"infinite","value()":"2318","values(uint256)":"4597"},"internal":{"getRevision()":"infinite"}},"methodIdentifiers":{"REVISION()":"dde43cba","initialize(uint256,string,uint256[])":"d31f8b6b","setValue(uint256)":"55241077","setValueViaProxy(uint256)":"5dd21610","text()":"1f1bd692","value()":"3fa4f245","values(uint256)":"5e383d21"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"txt\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"vals\",\"type\":\"uint256[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"setValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"setValueViaProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"text\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"value\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"values\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol\":\"MockInitializableImpleV2\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {VersionedInitializable} from '../../protocol/libraries/aave-upgradeability/VersionedInitializable.sol';\\n\\ncontract MockInitializableImple is VersionedInitializable {\\n  uint256 public value;\\n  string public text;\\n  uint256[] public values;\\n\\n  uint256 public constant REVISION = 1;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  function initialize(uint256 val, string memory txt, uint256[] memory vals) external initializer {\\n    value = val;\\n    text = txt;\\n    values = vals;\\n  }\\n\\n  function setValue(uint256 newValue) public {\\n    value = newValue;\\n  }\\n\\n  function setValueViaProxy(uint256 newValue) public {\\n    value = newValue;\\n  }\\n}\\n\\ncontract MockInitializableImpleV2 is VersionedInitializable {\\n  uint256 public value;\\n  string public text;\\n  uint256[] public values;\\n\\n  uint256 public constant REVISION = 2;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  function initialize(uint256 val, string memory txt, uint256[] memory vals) public initializer {\\n    value = val;\\n    text = txt;\\n    values = vals;\\n  }\\n\\n  function setValue(uint256 newValue) public {\\n    value = newValue;\\n  }\\n\\n  function setValueViaProxy(uint256 newValue) public {\\n    value = newValue;\\n  }\\n}\\n\\ncontract MockInitializableFromConstructorImple is VersionedInitializable {\\n  uint256 public value;\\n\\n  uint256 public constant REVISION = 2;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  constructor(uint256 val) {\\n    initialize(val);\\n  }\\n\\n  function initialize(uint256 val) public initializer {\\n    value = val;\\n  }\\n}\\n\\ncontract MockReentrantInitializableImple is VersionedInitializable {\\n  uint256 public value;\\n\\n  uint256 public constant REVISION = 2;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  function initialize(uint256 val) public initializer {\\n    value = val;\\n    if (value < 2) {\\n      initialize(value + 1);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x08dcaae7248f12ffcec322ea174c12d6a9310a59c85e3c11112594ab58f1a2a6\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":10499,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableImpleV2","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":10502,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableImpleV2","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":10572,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableImpleV2","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":8933,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableImpleV2","label":"value","offset":0,"slot":"52","type":"t_uint256"},{"astId":8935,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableImpleV2","label":"text","offset":0,"slot":"53","type":"t_string_storage"},{"astId":8938,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockInitializableImpleV2","label":"values","offset":0,"slot":"54","type":"t_array(t_uint256)dyn_storage"}],"types":{"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_array(t_uint256)dyn_storage":{"base":"t_uint256","encoding":"dynamic_array","label":"uint256[]","numberOfBytes":"32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}},"MockReentrantInitializableImple":{"abi":[{"inputs":[],"name":"REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"value","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60806040526000805534801561001457600080fd5b5061024c806100246000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80633fa4f24514610046578063dde43cba14610061578063fe4b84df14610069575b600080fd5b61004f60345481565b60405190815260200160405180910390f35b61004f600281565b61007c6100773660046101be565b61007e565b005b60015460029060ff16806100915750303b155b8061009d575060005481115b61012d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a6564000000000000000000000000000000000000606482015260840160405180910390fd5b60015460ff1615801561016a57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b6034839055600283101561018a5761018a603454600161007791906101d7565b80156101b957600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050565b6000602082840312156101d057600080fd5b5035919050565b60008219821115610211577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea26469706673582212200002456aa7bbb4d737d649a1a1886a7bd05ec6204d439e17c6d7f54e54841cbc64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x24C DUP1 PUSH2 0x24 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 0x3FA4F245 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xDDE43CBA EQ PUSH2 0x61 JUMPI DUP1 PUSH4 0xFE4B84DF EQ PUSH2 0x69 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F PUSH1 0x34 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x4F PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH2 0x7C PUSH2 0x77 CALLDATASIZE PUSH1 0x4 PUSH2 0x1BE JUMP JUMPDEST PUSH2 0x7E JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x2 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x91 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x9D JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x12D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x16A JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x34 DUP4 SWAP1 SSTORE PUSH1 0x2 DUP4 LT ISZERO PUSH2 0x18A JUMPI PUSH2 0x18A PUSH1 0x34 SLOAD PUSH1 0x1 PUSH2 0x77 SWAP2 SWAP1 PUSH2 0x1D7 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1B9 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x211 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 STOP MUL GASLIMIT PUSH11 0xA7BBB4D737D649A1A1886A PUSH28 0xD05EC6204D439E17C6D7F54E54841CBC64736F6C634300080A003300 ","sourceMap":"2100:492:63:-:0;;;928:1:71;886:43;;2100:492:63;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@REVISION_9044":{"entryPoint":null,"id":9044,"parameterSlots":0,"returnSlots":0},"@getRevision_9054":{"entryPoint":null,"id":9054,"parameterSlots":0,"returnSlots":1},"@initialize_9077":{"entryPoint":126,"id":9077,"parameterSlots":1,"returnSlots":0},"@isConstructor_10568":{"entryPoint":null,"id":10568,"parameterSlots":0,"returnSlots":1},"@value_9041":{"entryPoint":null,"id":9041,"parameterSlots":0,"returnSlots":0},"abi_decode_tuple_t_uint256":{"entryPoint":446,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":471,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1080:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"115:76:201","statements":[{"nodeType":"YulAssignment","src":"125:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"137:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"148:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"133:3:201"},"nodeType":"YulFunctionCall","src":"133:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"125:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"167:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"178:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"160:6:201"},"nodeType":"YulFunctionCall","src":"160:25:201"},"nodeType":"YulExpressionStatement","src":"160:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"84:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"95:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"106:4:201","type":""}],"src":"14:177:201"},{"body":{"nodeType":"YulBlock","src":"266:110:201","statements":[{"body":{"nodeType":"YulBlock","src":"312:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"321:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"324:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"314:6:201"},"nodeType":"YulFunctionCall","src":"314:12:201"},"nodeType":"YulExpressionStatement","src":"314:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"287:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"296:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"283:3:201"},"nodeType":"YulFunctionCall","src":"283:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"308:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"279:3:201"},"nodeType":"YulFunctionCall","src":"279:32:201"},"nodeType":"YulIf","src":"276:52:201"},{"nodeType":"YulAssignment","src":"337:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"360:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"347:12:201"},"nodeType":"YulFunctionCall","src":"347:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"337:6:201"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"232:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"243:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"255:6:201","type":""}],"src":"196:180:201"},{"body":{"nodeType":"YulBlock","src":"555:236:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"572:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"583:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"565:6:201"},"nodeType":"YulFunctionCall","src":"565:21:201"},"nodeType":"YulExpressionStatement","src":"565:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"606:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"617:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"602:3:201"},"nodeType":"YulFunctionCall","src":"602:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"622:2:201","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"595:6:201"},"nodeType":"YulFunctionCall","src":"595:30:201"},"nodeType":"YulExpressionStatement","src":"595:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"645:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"656:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"641:3:201"},"nodeType":"YulFunctionCall","src":"641:18:201"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"661:34:201","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"634:6:201"},"nodeType":"YulFunctionCall","src":"634:62:201"},"nodeType":"YulExpressionStatement","src":"634:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"716:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"727:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"712:3:201"},"nodeType":"YulFunctionCall","src":"712:18:201"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"732:16:201","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"705:6:201"},"nodeType":"YulFunctionCall","src":"705:44:201"},"nodeType":"YulExpressionStatement","src":"705:44:201"},{"nodeType":"YulAssignment","src":"758:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"770:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"781:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"766:3:201"},"nodeType":"YulFunctionCall","src":"766:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"758:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"532:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"546:4:201","type":""}],"src":"381:410:201"},{"body":{"nodeType":"YulBlock","src":"844:234:201","statements":[{"body":{"nodeType":"YulBlock","src":"879:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"900:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"903:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"893:6:201"},"nodeType":"YulFunctionCall","src":"893:88:201"},"nodeType":"YulExpressionStatement","src":"893:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1001:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1004:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"994:6:201"},"nodeType":"YulFunctionCall","src":"994:15:201"},"nodeType":"YulExpressionStatement","src":"994:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1029:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1032:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1022:6:201"},"nodeType":"YulFunctionCall","src":"1022:15:201"},"nodeType":"YulExpressionStatement","src":"1022:15:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"860:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"867:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"863:3:201"},"nodeType":"YulFunctionCall","src":"863:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"857:2:201"},"nodeType":"YulFunctionCall","src":"857:13:201"},"nodeType":"YulIf","src":"854:193:201"},{"nodeType":"YulAssignment","src":"1056:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"1067:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"1070:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1063:3:201"},"nodeType":"YulFunctionCall","src":"1063:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"1056:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"827:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"830:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"836:3:201","type":""}],"src":"796:282:201"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        sum := add(x, y)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100415760003560e01c80633fa4f24514610046578063dde43cba14610061578063fe4b84df14610069575b600080fd5b61004f60345481565b60405190815260200160405180910390f35b61004f600281565b61007c6100773660046101be565b61007e565b005b60015460029060ff16806100915750303b155b8061009d575060005481115b61012d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a6564000000000000000000000000000000000000606482015260840160405180910390fd5b60015460ff1615801561016a57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b6034839055600283101561018a5761018a603454600161007791906101d7565b80156101b957600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050565b6000602082840312156101d057600080fd5b5035919050565b60008219821115610211577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea26469706673582212200002456aa7bbb4d737d649a1a1886a7bd05ec6204d439e17c6d7f54e54841cbc64736f6c634300080a0033","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 0x3FA4F245 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xDDE43CBA EQ PUSH2 0x61 JUMPI DUP1 PUSH4 0xFE4B84DF EQ PUSH2 0x69 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4F PUSH1 0x34 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x4F PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH2 0x7C PUSH2 0x77 CALLDATASIZE PUSH1 0x4 PUSH2 0x1BE JUMP JUMPDEST PUSH2 0x7E JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x2 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x91 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x9D JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x12D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x16A JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x34 DUP4 SWAP1 SSTORE PUSH1 0x2 DUP4 LT ISZERO PUSH2 0x18A JUMPI PUSH2 0x18A PUSH1 0x34 SLOAD PUSH1 0x1 PUSH2 0x77 SWAP2 SWAP1 PUSH2 0x1D7 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1B9 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x211 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 STOP MUL GASLIMIT PUSH11 0xA7BBB4D737D649A1A1886A PUSH28 0xD05EC6204D439E17C6D7F54E54841CBC64736F6C634300080A003300 ","sourceMap":"2100:492:63:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2171:20;;;;;;;;;160:25:201;;;148:2;133:18;2171:20:63;;;;;;;2196:36;;2231:1;2196:36;;2460:130;;;;;;:::i;:::-;;:::i;:::-;;;1217:12:71;;2231:1:63;;1217:12:71;;;:31;;-1:-1:-1;2436:9:71;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;583:2:201;1202:146:71;;;565:21:201;622:2;602:18;;;595:30;661:34;641:18;;;634:62;732:16;712:18;;;705:44;766:19;;1202:146:71;;;;;;;;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;2518:5:63::1;:11:::0;;;2547:1:::1;2539:9:::0;::::1;2535:51;;;2558:21;2569:5;;2577:1;2569:9;;;;:::i;2558:21::-;1510:14:71::0;1506:55;;;1534:12;:20;;;;;;1506:55;1158:407;;2460:130:63;:::o;196:180:201:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:201;;196:180;-1:-1:-1;196:180:201:o;796:282::-;836:3;867:1;863:6;860:1;857:13;854:193;;;903:77;900:1;893:88;1004:4;1001:1;994:15;1032:4;1029:1;1022:15;854:193;-1:-1:-1;1063:9:201;;796:282::o"},"gasEstimates":{"creation":{"codeDepositCost":"117600","executionCost":"5171","totalCost":"122771"},"external":{"REVISION()":"183","initialize(uint256)":"infinite","value()":"2261"},"internal":{"getRevision()":"infinite"}},"methodIdentifiers":{"REVISION()":"dde43cba","initialize(uint256)":"fe4b84df","value()":"3fa4f245"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"value\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol\":\"MockReentrantInitializableImple\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {VersionedInitializable} from '../../protocol/libraries/aave-upgradeability/VersionedInitializable.sol';\\n\\ncontract MockInitializableImple is VersionedInitializable {\\n  uint256 public value;\\n  string public text;\\n  uint256[] public values;\\n\\n  uint256 public constant REVISION = 1;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  function initialize(uint256 val, string memory txt, uint256[] memory vals) external initializer {\\n    value = val;\\n    text = txt;\\n    values = vals;\\n  }\\n\\n  function setValue(uint256 newValue) public {\\n    value = newValue;\\n  }\\n\\n  function setValueViaProxy(uint256 newValue) public {\\n    value = newValue;\\n  }\\n}\\n\\ncontract MockInitializableImpleV2 is VersionedInitializable {\\n  uint256 public value;\\n  string public text;\\n  uint256[] public values;\\n\\n  uint256 public constant REVISION = 2;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  function initialize(uint256 val, string memory txt, uint256[] memory vals) public initializer {\\n    value = val;\\n    text = txt;\\n    values = vals;\\n  }\\n\\n  function setValue(uint256 newValue) public {\\n    value = newValue;\\n  }\\n\\n  function setValueViaProxy(uint256 newValue) public {\\n    value = newValue;\\n  }\\n}\\n\\ncontract MockInitializableFromConstructorImple is VersionedInitializable {\\n  uint256 public value;\\n\\n  uint256 public constant REVISION = 2;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  constructor(uint256 val) {\\n    initialize(val);\\n  }\\n\\n  function initialize(uint256 val) public initializer {\\n    value = val;\\n  }\\n}\\n\\ncontract MockReentrantInitializableImple is VersionedInitializable {\\n  uint256 public value;\\n\\n  uint256 public constant REVISION = 2;\\n\\n  /**\\n   * @dev returns the revision number of the contract\\n   * Needs to be defined in the inherited class as a constant.\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  function initialize(uint256 val) public initializer {\\n    value = val;\\n    if (value < 2) {\\n      initialize(value + 1);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x08dcaae7248f12ffcec322ea174c12d6a9310a59c85e3c11112594ab58f1a2a6\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":10499,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockReentrantInitializableImple","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":10502,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockReentrantInitializableImple","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":10572,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockReentrantInitializableImple","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":9041,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockInitializableImplementation.sol:MockReentrantInitializableImple","label":"value","offset":0,"slot":"52","type":"t_uint256"}],"types":{"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol":{"MockStableDebtToken":{"abi":[{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"}],"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":"fromUser","type":"address"},{"indexed":true,"internalType":"address","name":"toUser","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BorrowAllowanceDelegated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currentBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"avgStableRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalSupply","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"debtTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"debtTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currentBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"avgStableRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalSupply","type":"uint256"}],"name":"Mint","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":"DEBT_TOKEN_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DELEGATION_WITH_SIG_TYPEHASH","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":"EIP712_REVISION","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNDERLYING_ASSET_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approveDelegation","outputs":[],"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":"fromUser","type":"address"},{"internalType":"address","name":"toUser","type":"address"}],"name":"borrowAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"},{"internalType":"address","name":"delegatee","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":"delegationWithSig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAverageStableRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"contract IAaveIncentivesController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSupplyData","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSupplyAndAvgRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSupplyLastUpdated","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserLastUpdated","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserStableRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"initializingPool","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"internalType":"string","name":"debtTokenName","type":"string"},{"internalType":"string","name":"debtTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"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":"user","type":"address"}],"name":"principalBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IAaveIncentivesController","name":"controller","type":"address"}],"name":"setIncentivesController","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":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Return cached value if chainId matches cache, otherwise recomputes separator","returns":{"_0":"The domain separator of the token at current chain"}},"UNDERLYING_ASSET_ADDRESS()":{"returns":{"_0":"The address of the underlying asset"}},"approveDelegation(address,uint256)":{"params":{"amount":"The maximum amount being delegated.","delegatee":"The address receiving the delegated borrowing power"}},"balanceOf(address)":{"details":"Returns the amount of tokens owned by `account`."},"borrowAllowance(address,address)":{"params":{"fromUser":"The user to giving allowance","toUser":"The user to give allowance to"},"returns":{"_0":"The current allowance of `toUser`"}},"burn(address,uint256)":{"details":"The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debtIn some instances, a burn transaction will emit a mint event if the amount to burn is less than the interest the user earned","params":{"amount":"The amount of debt tokens getting burned","from":"The address from which the debt will be burned"},"returns":{"_0":"The total stable debt","_1":"The average stable borrow rate"}},"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","delegatee":"The delegatee that can use the credit","delegator":"The delegator of the credit","r":"The R signature param","s":"The S signature param","v":"The V signature param","value":"The amount to be delegated"}},"getAverageStableRate()":{"returns":{"_0":"The average stable rate"}},"getIncentivesController()":{"returns":{"_0":"The address of the Incentives Controller"}},"getSupplyData()":{"returns":{"_0":"The principal","_1":"The total supply","_2":"The average stable rate","_3":"The timestamp of the last update"}},"getTotalSupplyAndAvgRate()":{"returns":{"_0":"The total supply","_1":"The average rate"}},"getTotalSupplyLastUpdated()":{"returns":{"_0":"The timestamp"}},"getUserLastUpdated(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The timestamp"}},"getUserStableRate(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The stable rate of the user"}},"initialize(address,address,address,uint8,string,string,bytes)":{"params":{"debtTokenDecimals":"The decimals of the debtToken, same as the underlying asset's","debtTokenName":"The name of the token","debtTokenSymbol":"The symbol of the token","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}},"mint(address,address,uint256,uint256)":{"details":"The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debt","params":{"amount":"The amount of debt tokens to mint","onBehalfOf":"The address receiving the debt tokens","rate":"The rate of the debt being minted","user":"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise"},"returns":{"_0":"True if it is the first borrow, false otherwise","_1":"The total stable debt","_2":"The average stable borrow rate"}},"nonces(address)":{"params":{"owner":"The address for which the nonce is being returned"},"returns":{"_0":"The nonce value for the input address`"}},"principalBalanceOf(address)":{"returns":{"_0":"The debt balance of the user since the last burn/mint action"}},"setIncentivesController(address)":{"params":{"controller":"the new Incentives controller"}},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Being non transferrable, the debt token does not implement any of the standard ERC20 functions for transfer and allowance."}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_26101":{"entryPoint":null,"id":26101,"parameterSlots":1,"returnSlots":0},"@_27531":{"entryPoint":null,"id":27531,"parameterSlots":0,"returnSlots":0},"@_27754":{"entryPoint":null,"id":27754,"parameterSlots":0,"returnSlots":0},"@_27965":{"entryPoint":null,"id":27965,"parameterSlots":4,"returnSlots":0},"@_9096":{"entryPoint":null,"id":9096,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$4860_fromMemory":{"entryPoint":567,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":606,"id":null,"parameterSlots":1,"returnSlots":1},"validator_revert_contract_IPool":{"entryPoint":542,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1110:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"66:86:201","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:201"},"nodeType":"YulFunctionCall","src":"132:12:201"},"nodeType":"YulExpressionStatement","src":"132:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"89:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"100:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"115:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"120:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"111:3:201"},"nodeType":"YulFunctionCall","src":"111:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"124:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"107:3:201"},"nodeType":"YulFunctionCall","src":"107:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"96:3:201"},"nodeType":"YulFunctionCall","src":"96:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"86:2:201"},"nodeType":"YulFunctionCall","src":"86:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"79:6:201"},"nodeType":"YulFunctionCall","src":"79:50:201"},"nodeType":"YulIf","src":"76:70:201"}]},"name":"validator_revert_contract_IPool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"55:5:201","type":""}],"src":"14:138:201"},{"body":{"nodeType":"YulBlock","src":"252:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"298:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"307:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"310:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"300:6:201"},"nodeType":"YulFunctionCall","src":"300:12:201"},"nodeType":"YulExpressionStatement","src":"300:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"273:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"282:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"269:3:201"},"nodeType":"YulFunctionCall","src":"269:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"294:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"265:3:201"},"nodeType":"YulFunctionCall","src":"265:32:201"},"nodeType":"YulIf","src":"262:52:201"},{"nodeType":"YulVariableDeclaration","src":"323:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"342:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"336:5:201"},"nodeType":"YulFunctionCall","src":"336:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"327:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"393:5:201"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"361:31:201"},"nodeType":"YulFunctionCall","src":"361:38:201"},"nodeType":"YulExpressionStatement","src":"361:38:201"},{"nodeType":"YulAssignment","src":"408:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"418:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"408:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$4860_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"218:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"229:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"241:6:201","type":""}],"src":"157:272:201"},{"body":{"nodeType":"YulBlock","src":"546:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"592:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"601:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"604:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"594:6:201"},"nodeType":"YulFunctionCall","src":"594:12:201"},"nodeType":"YulExpressionStatement","src":"594:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"567:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"576:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"563:3:201"},"nodeType":"YulFunctionCall","src":"563:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"588:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"559:3:201"},"nodeType":"YulFunctionCall","src":"559:32:201"},"nodeType":"YulIf","src":"556:52:201"},{"nodeType":"YulVariableDeclaration","src":"617:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"636:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"630:5:201"},"nodeType":"YulFunctionCall","src":"630:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"621:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"687:5:201"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"655:31:201"},"nodeType":"YulFunctionCall","src":"655:38:201"},"nodeType":"YulExpressionStatement","src":"655:38:201"},{"nodeType":"YulAssignment","src":"702:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"712:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"702:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"512:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"523:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"535:6:201","type":""}],"src":"434:289:201"},{"body":{"nodeType":"YulBlock","src":"783:325:201","statements":[{"nodeType":"YulAssignment","src":"793:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"807:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"810:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"803:3:201"},"nodeType":"YulFunctionCall","src":"803:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"793:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"824:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"854:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"860:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:201"},"nodeType":"YulFunctionCall","src":"850:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"828:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"901:31:201","statements":[{"nodeType":"YulAssignment","src":"903:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"917:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"925:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"913:3:201"},"nodeType":"YulFunctionCall","src":"913:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"903:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"881:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"874:6:201"},"nodeType":"YulFunctionCall","src":"874:26:201"},"nodeType":"YulIf","src":"871:61:201"},{"body":{"nodeType":"YulBlock","src":"991:111:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1012:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1019:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1024:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1015:3:201"},"nodeType":"YulFunctionCall","src":"1015:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1005:6:201"},"nodeType":"YulFunctionCall","src":"1005:31:201"},"nodeType":"YulExpressionStatement","src":"1005:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1056:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1059:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1049:6:201"},"nodeType":"YulFunctionCall","src":"1049:15:201"},"nodeType":"YulExpressionStatement","src":"1049:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1084:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1087:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1077:6:201"},"nodeType":"YulFunctionCall","src":"1077:15:201"},"nodeType":"YulExpressionStatement","src":"1077:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"947:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"970:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"978:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"967:2:201"},"nodeType":"YulFunctionCall","src":"967:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"944:2:201"},"nodeType":"YulFunctionCall","src":"944:38:201"},"nodeType":"YulIf","src":"941:161:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"763:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"772:6:201","type":""}],"src":"728:380:201"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPool(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$4860_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60e0604052600080553480156200001557600080fd5b5060405162002cb438038062002cb4833981016040819052620000389162000237565b80806040518060400160405280601681526020017f535441424c455f444542545f544f4b454e5f494d504c000000000000000000008152506040518060400160405280601681526020017f535441424c455f444542545f544f4b454e5f494d504c0000000000000000000081525060004660808181525050836001600160a01b0316630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000115919062000237565b6001600160a01b031660a05282516200013690603b90602086019062000178565b5081516200014c90603c90602085019062000178565b50603d805460ff191660ff9290921691909117905550506001600160a01b031660c052506200029b9050565b82805462000186906200025e565b90600052602060002090601f016020900481019282620001aa5760008555620001f5565b82601f10620001c557805160ff1916838001178555620001f5565b82800160010185558215620001f5579182015b82811115620001f5578251825591602001919060010190620001d8565b506200020392915062000207565b5090565b5b8082111562000203576000815560010162000208565b6001600160a01b03811681146200023457600080fd5b50565b6000602082840312156200024a57600080fd5b815162000257816200021e565b9392505050565b600181811c908216806200027357607f821691505b602082108114156200029557634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c0516129cd620002e76000396000818161030501528181610c4501528181611144015281816116a401526117ff015260006118cb01526000610abd01526129cd6000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c806390f6fcf21161012a578063c04a8a10116100bd578063e655dbd81161008c578063e78c9b3b11610071578063e78c9b3b146105b5578063f3bfc73814610611578063f731e9be1461063857600080fd5b8063e655dbd81461057f578063e74848901461059257600080fd5b8063c04a8a1014610503578063c222ec8a14610516578063c634dfaa14610529578063dd62ed3e1461057157600080fd5b8063a9059cbb116100f9578063a9059cbb1461022e578063b16a19de146104ad578063b3f1c93d146104cb578063b9a7b622146104fb57600080fd5b806390f6fcf21461046357806395d89b411461047d5780639dc29fac14610485578063a457c2d71461022e57600080fd5b80636bd76d24116101a25780637816037611610171578063781603761461036f57806379774338146103ab57806379ce6b8c146103da5780637ecebe001461042d57600080fd5b80636bd76d24146102a757806370a08231146102ed5780637535d2461461030057806375d264131461034c57600080fd5b806323b872dd116101de57806323b872dd1461027c578063313ce5671461028a5780633644e5151461029f578063395093511461022e57600080fd5b806306fdde0314610210578063095ea7b31461022e5780630b52d5581461025157806318160ddd14610266575b600080fd5b610218610640565b604051610225919061233e565b60405180910390f35b61024161023c366004612381565b6106d2565b6040519015158152602001610225565b61026461025f3660046123be565b610742565b005b61026e610a93565b604051908152602001610225565b61024161023c36600461242c565b603d5460405160ff9091168152602001610225565b61026e610ab9565b61026e6102b536600461246d565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260366020908152604080832093909416825291909152205490565b61026e6102fb3660046124a6565b610af2565b6103277f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610225565b603d54610100900473ffffffffffffffffffffffffffffffffffffffff16610327565b6102186040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6103b3610b9e565b6040805194855260208501939093529183015264ffffffffff166060820152608001610225565b6104176103e83660046124a6565b73ffffffffffffffffffffffffffffffffffffffff166000908152603e602052604090205464ffffffffff1690565b60405164ffffffffff9091168152602001610225565b61026e61043b3660046124a6565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205490565b603f546fffffffffffffffffffffffffffffffff1661026e565b610218610bfa565b610498610493366004612381565b610c09565b60408051928352602083019190915201610225565b60375473ffffffffffffffffffffffffffffffffffffffff16610327565b6104de6104d93660046124c3565b611129565b604080519315158452602084019290925290820152606001610225565b61026e600181565b610264610511366004612381565b6115ab565b610264610524366004612625565b6115ba565b61026e6105373660046124a6565b73ffffffffffffffffffffffffffffffffffffffff166000908152603860205260409020546fffffffffffffffffffffffffffffffff1690565b61026e61023c36600461246d565b61026461058d3660046124a6565b6118c7565b603f54700100000000000000000000000000000000900464ffffffffff16610417565b61026e6105c33660046124a6565b73ffffffffffffffffffffffffffffffffffffffff1660009081526038602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b61026e7f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa081565b610498611aa5565b6060603b805461064f906126fa565b80601f016020809104026020016040519081016040528092919081815260200182805461067b906126fa565b80156106c85780601f1061069d576101008083540402835291602001916106c8565b820191906000526020600020905b8154815290600101906020018083116106ab57829003601f168201915b5050505050905090565b604080518082018252600281527f3830000000000000000000000000000000000000000000000000000000000000602082015290517f08c379a00000000000000000000000000000000000000000000000000000000081526000916107399160040161233e565b60405180910390fd5b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff88166107c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b50834211156040518060400160405280600281526020017f373800000000000000000000000000000000000000000000000000000000000081525090610837576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b5073ffffffffffffffffffffffffffffffffffffffff871660009081526034602052604081205490610867610ab9565b604080517f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa0602082015273ffffffffffffffffffffffffffffffffffffffff8b1691810191909152606081018990526080810184905260a0810188905260c0016040516020818303038152906040528051906020012060405160200161091f9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa1580156109a5573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f373900000000000000000000000000000000000000000000000000000000000081525090610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b50610a5782600161277d565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260346020526040902055610a88898989611ad0565b505050505050505050565b603f54600090610ab4906fffffffffffffffffffffffffffffffff16611b47565b905090565b60007f0000000000000000000000000000000000000000000000000000000000000000461415610aea575060355490565b610ab4611b96565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603860205260408120546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041681610b51575060009392505050565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603e6020526040812054610b8990839064ffffffffff16611c5b565b9050610b958382611c6f565b95945050505050565b603f546000908190819081906fffffffffffffffffffffffffffffffff16610bc5603a5490565b610bce82611b47565b603f549197909650919450700100000000000000000000000000000000900464ffffffffff1692509050565b6060603c805461064f906126fa565b60408051808201909152600281527f323300000000000000000000000000000000000000000000000000000000000060208201526000908190337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b50600080610cbf86611cc6565b92509250506000610cce610a93565b73ffffffffffffffffffffffffffffffffffffffff881660009081526038602052604081205491925090819070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16888411610d5957603f80547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690556000603a55610e53565b610d638985612795565b603a81905591506000610d93610d7886611d4b565b603f546fffffffffffffffffffffffffffffffff1690611c6f565b90506000610daa610da38c611d4b565b8490611c6f565b9050818110610de957603f80547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690556000603a8190559450610e50565b610e0d610e08610df886611d4b565b610e028486612795565b90611d66565b611da5565b603f80547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216918217905594505b50505b85891415610ecb5773ffffffffffffffffffffffffffffffffffffffff8a16600090815260386020908152604080832080546fffffffffffffffffffffffffffffffff169055603e909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000169055610f20565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603e6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff161790555b603f80547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff160217905588851115611049576000610f788a87612795565b9050610f858b8287611e4b565b60405181815273ffffffffffffffffffffffffffffffffffffffff8c16906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101899052908101879052606081018390526080810185905260a0810184905273ffffffffffffffffffffffffffffffffffffffff8c169081907fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f9060c00160405180910390a350611119565b6000611055868b612795565b90506110628b8287611fbc565b60405181815260009073ffffffffffffffffffffffffffffffffffffffff8d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101899052908101879052606081018590526080810184905273ffffffffffffffffffffffffffffffffffffffff8c16907f44bd20a79e993bdcc7cbedf54a3b4d19fb78490124b6b90d04fe3242eea579e89060a00160405180910390a2505b50955093505050505b9250929050565b6000808073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f3233000000000000000000000000000000000000000000000000000000000000815250906111ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b506112246040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146112625761126287898861200c565b60008061126e89611cc6565b925092505061127b610a93565b808452603f546fffffffffffffffffffffffffffffffff1660a08501526112a390899061277d565b603a81905560208401526112b688611d4b565b60408481019190915273ffffffffffffffffffffffffffffffffffffffff8a1660009081526038602052205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16606084015261135261132261131d8a8561277d565b611d4b565b6040850151611331908a611c6f565b61134861133d86611d4b565b606088015190611c6f565b610e02919061277d565b6080840181905261136290611da5565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260386020908152604080832080546fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000969091168602179055603e825290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff16908117909155603f80547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff16919093021790915583015161146190610e089061143690611d4b565b6040860151611446908b90611c6f565b6113486114568860000151611d4b565b60a089015190611c6f565b603f80547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216918217905560a084015260006114b2828a61277d565b90506114c38a828660000151611e4b565b60405181815273ffffffffffffffffffffffffffffffffffffffff8b16906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360808085015160a080870151602080890151604080518881529283018a9052820188905260608201949094529384015282015273ffffffffffffffffffffffffffffffffffffffff808c1691908d16907fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f9060c00160405180910390a35050602082015160a0909201519015999198509650945050505050565b6115b6338383611ad0565b5050565b60015460039060ff16806115cd5750303b155b806115d9575060005481115b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610739565b60015460ff161580156116a257600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f38370000000000000000000000000000000000000000000000000000000000008152509061175f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b50611769866120cc565b611772856120df565b603d80546037805473ffffffffffffffffffffffffffffffffffffffff8d81167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179091558a16610100027fffffffffffffffffffffff00000000000000000000000000000000000000000090911660ff8a16171790556117f7611b96565b6035819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f40251fbfb6656cfa65a00d7879029fec1fad21d28fdcff2f4f68f52795b74f2c8a8a8a8a8a8a604051611884969594939291906127ac565b60405180910390a380156118bb57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611934573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611958919061284c565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156119c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e99190612869565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b5050603d805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b603f5460009081906fffffffffffffffffffffffffffffffff16611ac881611b47565b939092509050565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526036602090815260408083208786168085529083529281902086905560375490518681529416939192917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1910160405180910390a4505050565b600080611b53603a5490565b905080611b635750600092915050565b6000611b8284603f60109054906101000a900464ffffffffff16611c5b565b9050611b8e8282611c6f565b949350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611bc16120f2565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000611c688383426120fc565b9392505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517611ca457600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b600080600080611d0a8573ffffffffffffffffffffffffffffffffffffffff166000908152603860205260409020546fffffffffffffffffffffffffffffffff1690565b905080611d2257600080600093509350935050611d44565b6000611d2d86610af2565b90508181611d3b8282612795565b94509450945050505b9193909250565b633b9aca008181029081048214611d6157600080fd5b919050565b600081156b033b2e3c9fd0803ce800000060028404190484111715611d8a57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b60006fffffffffffffffffffffffffffffffff821115611e47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610739565b5090565b6000611e5683611da5565b73ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260409020549091506fffffffffffffffffffffffffffffffff16611e9b828261288b565b73ffffffffffffffffffffffffffffffffffffffff868116600090815260386020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9390931692909217909155603d5461010090041615611fb557603d546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018690526fffffffffffffffffffffffffffffffff84166044830152610100909204909116906331873e2e90606401600060405180830381600087803b158015611fa157600080fd5b505af1158015610a88573d6000803e3d6000fd5b5050505050565b6000611fc783611da5565b73ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260409020549091506fffffffffffffffffffffffffffffffff16611e9b82826128bf565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260366020908152604080832093861683529290529081205461204c908390612795565b73ffffffffffffffffffffffffffffffffffffffff808616600081815260366020908152604080832089861680855292529182902085905560375491519495509216927fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1906120be9086815260200190565b60405180910390a450505050565b80516115b690603b906020840190612243565b80516115b690603c906020840190612243565b6060610ab4610640565b60008061211064ffffffffff851684612795565b90508061212c576b033b2e3c9fd0803ce8000000915050611c68565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511612162576000612167565b600285035b925066038882915c400061217b8a80611c6f565b81612188576121886128f0565b0491506301e1338061219a838b611c6f565b816121a7576121a76128f0565b0490506000826121b7868861291f565b6121c1919061291f565b600290049050600082856121d5888a61291f565b6121df919061291f565b6121e9919061291f565b60069004905080826301e133806122008a8f61291f565b61220a919061295c565b612220906b033b2e3c9fd0803ce800000061277d565b61222a919061277d565b612234919061277d565b9b9a5050505050505050505050565b82805461224f906126fa565b90600052602060002090601f01602090048101928261227157600085556122b7565b82601f1061228a57805160ff19168380011785556122b7565b828001600101855582156122b7579182015b828111156122b757825182559160200191906001019061229c565b50611e479291505b80821115611e4757600081556001016122bf565b6000815180845260005b818110156122f9576020818501810151868301820152016122dd565b8181111561230b576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611c6860208301846122d3565b73ffffffffffffffffffffffffffffffffffffffff8116811461237357600080fd5b50565b8035611d6181612351565b6000806040838503121561239457600080fd5b823561239f81612351565b946020939093013593505050565b803560ff81168114611d6157600080fd5b600080600080600080600060e0888a0312156123d957600080fd5b87356123e481612351565b965060208801356123f481612351565b95506040880135945060608801359350612410608089016123ad565b925060a0880135915060c0880135905092959891949750929550565b60008060006060848603121561244157600080fd5b833561244c81612351565b9250602084013561245c81612351565b929592945050506040919091013590565b6000806040838503121561248057600080fd5b823561248b81612351565b9150602083013561249b81612351565b809150509250929050565b6000602082840312156124b857600080fd5b8135611c6881612351565b600080600080608085870312156124d957600080fd5b84356124e481612351565b935060208501356124f481612351565b93969395505050506040820135916060013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261254957600080fd5b813567ffffffffffffffff8082111561256457612564612509565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156125aa576125aa612509565b816040528381528660208588010111156125c357600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008083601f8401126125f557600080fd5b50813567ffffffffffffffff81111561260d57600080fd5b60208301915083602082850101111561112257600080fd5b60008060008060008060008060e0898b03121561264157600080fd5b883561264c81612351565b9750602089013561265c81612351565b965061266a60408a01612376565b955061267860608a016123ad565b9450608089013567ffffffffffffffff8082111561269557600080fd5b6126a18c838d01612538565b955060a08b01359150808211156126b757600080fd5b6126c38c838d01612538565b945060c08b01359150808211156126d957600080fd5b506126e68b828c016125e3565b999c989b5096995094979396929594505050565b600181811c9082168061270e57607f821691505b60208210811415612748577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156127905761279061274e565b500190565b6000828210156127a7576127a761274e565b500390565b73ffffffffffffffffffffffffffffffffffffffff8716815260ff8616602082015260a0604082015260006127e460a08301876122d3565b82810360608401526127f681876122d3565b905082810360808401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050979650505050505050565b60006020828403121561285e57600080fd5b8151611c6881612351565b60006020828403121561287b57600080fd5b81518015158114611c6857600080fd5b60006fffffffffffffffffffffffffffffffff8083168185168083038211156128b6576128b661274e565b01949350505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156128e8576128e861274e565b039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156129575761295761274e565b500290565b600082612992577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220d1e34ae789102f8cc7a311a2993348bb2eb93dfe4bca819c0253535e9a7eb74b64736f6c634300080a0033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2CB4 CODESIZE SUB DUP1 PUSH3 0x2CB4 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x38 SWAP2 PUSH3 0x237 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x16 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x535441424C455F444542545F544F4B454E5F494D504C00000000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x16 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x535441424C455F444542545F544F4B454E5F494D504C00000000000000000000 DUP2 MSTORE POP PUSH1 0x0 CHAINID PUSH1 0x80 DUP2 DUP2 MSTORE POP POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xEF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x115 SWAP2 SWAP1 PUSH3 0x237 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE DUP3 MLOAD PUSH3 0x136 SWAP1 PUSH1 0x3B SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH3 0x178 JUMP JUMPDEST POP DUP2 MLOAD PUSH3 0x14C SWAP1 PUSH1 0x3C SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x178 JUMP JUMPDEST POP PUSH1 0x3D DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xC0 MSTORE POP PUSH3 0x29B SWAP1 POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x186 SWAP1 PUSH3 0x25E JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x1AA JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x1F5 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x1C5 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x1F5 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x1F5 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x1F5 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x1D8 JUMP JUMPDEST POP PUSH3 0x203 SWAP3 SWAP2 POP PUSH3 0x207 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x203 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x208 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x234 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x24A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x257 DUP2 PUSH3 0x21E JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x273 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x295 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x29CD PUSH3 0x2E7 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x305 ADD MSTORE DUP2 DUP2 PUSH2 0xC45 ADD MSTORE DUP2 DUP2 PUSH2 0x1144 ADD MSTORE DUP2 DUP2 PUSH2 0x16A4 ADD MSTORE PUSH2 0x17FF ADD MSTORE PUSH1 0x0 PUSH2 0x18CB ADD MSTORE PUSH1 0x0 PUSH2 0xABD ADD MSTORE PUSH2 0x29CD 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 0x20B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x90F6FCF2 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xC04A8A10 GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xE655DBD8 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xE78C9B3B GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE78C9B3B EQ PUSH2 0x5B5 JUMPI DUP1 PUSH4 0xF3BFC738 EQ PUSH2 0x611 JUMPI DUP1 PUSH4 0xF731E9BE EQ PUSH2 0x638 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x57F JUMPI DUP1 PUSH4 0xE7484890 EQ PUSH2 0x592 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC04A8A10 EQ PUSH2 0x503 JUMPI DUP1 PUSH4 0xC222EC8A EQ PUSH2 0x516 JUMPI DUP1 PUSH4 0xC634DFAA EQ PUSH2 0x529 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x571 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA9059CBB GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x4AD JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x4CB JUMPI DUP1 PUSH4 0xB9A7B622 EQ PUSH2 0x4FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x90F6FCF2 EQ PUSH2 0x463 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x47D JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x485 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6BD76D24 GT PUSH2 0x1A2 JUMPI DUP1 PUSH4 0x78160376 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x36F JUMPI DUP1 PUSH4 0x79774338 EQ PUSH2 0x3AB JUMPI DUP1 PUSH4 0x79CE6B8C EQ PUSH2 0x3DA JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x42D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6BD76D24 EQ PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x2ED JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x300 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x34C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0x1DE JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x27C JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x28A JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x29F JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0xB52D558 EQ PUSH2 0x251 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x266 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x218 PUSH2 0x640 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x225 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x241 PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x2381 JUMP JUMPDEST PUSH2 0x6D2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x264 PUSH2 0x25F CALLDATASIZE PUSH1 0x4 PUSH2 0x23BE JUMP JUMPDEST PUSH2 0x742 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x26E PUSH2 0xA93 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x241 PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x242C JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x26E PUSH2 0xAB9 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x2B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x246D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x2FB CALLDATASIZE PUSH1 0x4 PUSH2 0x24A6 JUMP JUMPDEST PUSH2 0xAF2 JUMP JUMPDEST PUSH2 0x327 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x327 JUMP JUMPDEST PUSH2 0x218 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0xB9E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP4 ADD MSTORE PUSH5 0xFFFFFFFFFF AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x417 PUSH2 0x3E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x24A6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3E PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH5 0xFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH5 0xFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x43B CALLDATASIZE PUSH1 0x4 PUSH2 0x24A6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x26E JUMP JUMPDEST PUSH2 0x218 PUSH2 0xBFA JUMP JUMPDEST PUSH2 0x498 PUSH2 0x493 CALLDATASIZE PUSH1 0x4 PUSH2 0x2381 JUMP JUMPDEST PUSH2 0xC09 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x225 JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x327 JUMP JUMPDEST PUSH2 0x4DE PUSH2 0x4D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x24C3 JUMP JUMPDEST PUSH2 0x1129 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x26E PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH2 0x264 PUSH2 0x511 CALLDATASIZE PUSH1 0x4 PUSH2 0x2381 JUMP JUMPDEST PUSH2 0x15AB JUMP JUMPDEST PUSH2 0x264 PUSH2 0x524 CALLDATASIZE PUSH1 0x4 PUSH2 0x2625 JUMP JUMPDEST PUSH2 0x15BA JUMP JUMPDEST PUSH2 0x26E PUSH2 0x537 CALLDATASIZE PUSH1 0x4 PUSH2 0x24A6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x246D JUMP JUMPDEST PUSH2 0x264 PUSH2 0x58D CALLDATASIZE PUSH1 0x4 PUSH2 0x24A6 JUMP JUMPDEST PUSH2 0x18C7 JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x417 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x5C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x24A6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x26E PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x1AA5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3B DUP1 SLOAD PUSH2 0x64F SWAP1 PUSH2 0x26FA JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x67B SWAP1 PUSH2 0x26FA JUMP JUMPDEST DUP1 ISZERO PUSH2 0x6C8 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x69D JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6C8 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 0x6AB JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3830000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x739 SWAP2 PUSH1 0x4 ADD PUSH2 0x233E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x7C4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x837 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x867 PUSH2 0xAB9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x91F SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xA4B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP PUSH2 0xA57 DUP3 PUSH1 0x1 PUSH2 0x277D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0xA88 DUP10 DUP10 DUP10 PUSH2 0x1AD0 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0x0 SWAP1 PUSH2 0xAB4 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1B47 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0xAEA JUMPI POP PUSH1 0x35 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xAB4 PUSH2 0x1B96 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND DUP2 PUSH2 0xB51 JUMPI POP PUSH1 0x0 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3E PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xB89 SWAP1 DUP4 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x1C5B JUMP JUMPDEST SWAP1 POP PUSH2 0xB95 DUP4 DUP3 PUSH2 0x1C6F JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xBC5 PUSH1 0x3A SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xBCE DUP3 PUSH2 0x1B47 JUMP JUMPDEST PUSH1 0x3F SLOAD SWAP2 SWAP8 SWAP1 SWAP7 POP SWAP2 SWAP5 POP PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3C DUP1 SLOAD PUSH2 0x64F SWAP1 PUSH2 0x26FA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCB2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH2 0xCBF DUP7 PUSH2 0x1CC6 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP PUSH1 0x0 PUSH2 0xCCE PUSH2 0xA93 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 DUP2 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 DUP5 GT PUSH2 0xD59 JUMPI PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x0 PUSH1 0x3A SSTORE PUSH2 0xE53 JUMP JUMPDEST PUSH2 0xD63 DUP10 DUP6 PUSH2 0x2795 JUMP JUMPDEST PUSH1 0x3A DUP2 SWAP1 SSTORE SWAP2 POP PUSH1 0x0 PUSH2 0xD93 PUSH2 0xD78 DUP7 PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0x1C6F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xDAA PUSH2 0xDA3 DUP13 PUSH2 0x1D4B JUMP JUMPDEST DUP5 SWAP1 PUSH2 0x1C6F JUMP JUMPDEST SWAP1 POP DUP2 DUP2 LT PUSH2 0xDE9 JUMPI PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x0 PUSH1 0x3A DUP2 SWAP1 SSTORE SWAP5 POP PUSH2 0xE50 JUMP JUMPDEST PUSH2 0xE0D PUSH2 0xE08 PUSH2 0xDF8 DUP7 PUSH2 0x1D4B JUMP JUMPDEST PUSH2 0xE02 DUP5 DUP7 PUSH2 0x2795 JUMP JUMPDEST SWAP1 PUSH2 0x1D66 JUMP JUMPDEST PUSH2 0x1DA5 JUMP JUMPDEST PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 DUP3 OR SWAP1 SSTORE SWAP5 POP JUMPDEST POP POP JUMPDEST DUP6 DUP10 EQ ISZERO PUSH2 0xECB JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 SSTORE PUSH1 0x3E SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 AND SWAP1 SSTORE PUSH2 0xF20 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3E PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 AND TIMESTAMP PUSH5 0xFFFFFFFFFF AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE DUP9 DUP6 GT ISZERO PUSH2 0x1049 JUMPI PUSH1 0x0 PUSH2 0xF78 DUP11 DUP8 PUSH2 0x2795 JUMP JUMPDEST SWAP1 POP PUSH2 0xF85 DUP12 DUP3 DUP8 PUSH2 0x1E4B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP10 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 DUP2 SWAP1 PUSH32 0xC16F4E4CA34D790DE4C656C72FD015C667D688F20BE64EEA360618545C4C530F SWAP1 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x1119 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1055 DUP7 DUP12 PUSH2 0x2795 JUMP JUMPDEST SWAP1 POP PUSH2 0x1062 DUP12 DUP3 DUP8 PUSH2 0x1FBC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP10 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 PUSH32 0x44BD20A79E993BDCC7CBEDF54A3B4D19FB78490124B6B90D04FE3242EEA579E8 SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMPDEST POP SWAP6 POP SWAP4 POP POP POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x11EA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP PUSH2 0x1224 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1262 JUMPI PUSH2 0x1262 DUP8 DUP10 DUP9 PUSH2 0x200C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x126E DUP10 PUSH2 0x1CC6 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP PUSH2 0x127B PUSH2 0xA93 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x3F SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x12A3 SWAP1 DUP10 SWAP1 PUSH2 0x277D JUMP JUMPDEST PUSH1 0x3A DUP2 SWAP1 SSTORE PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x12B6 DUP9 PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0x40 DUP5 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x1352 PUSH2 0x1322 PUSH2 0x131D DUP11 DUP6 PUSH2 0x277D JUMP JUMPDEST PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD PUSH2 0x1331 SWAP1 DUP11 PUSH2 0x1C6F JUMP JUMPDEST PUSH2 0x1348 PUSH2 0x133D DUP7 PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0x60 DUP9 ADD MLOAD SWAP1 PUSH2 0x1C6F JUMP JUMPDEST PUSH2 0xE02 SWAP2 SWAP1 PUSH2 0x277D JUMP JUMPDEST PUSH1 0x80 DUP5 ADD DUP2 SWAP1 MSTORE PUSH2 0x1362 SWAP1 PUSH2 0x1DA5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP7 SWAP1 SWAP2 AND DUP7 MUL OR SWAP1 SSTORE PUSH1 0x3E DUP3 MSTORE SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 AND TIMESTAMP PUSH5 0xFFFFFFFFFF AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 SWAP1 SWAP4 MUL OR SWAP1 SWAP2 SSTORE DUP4 ADD MLOAD PUSH2 0x1461 SWAP1 PUSH2 0xE08 SWAP1 PUSH2 0x1436 SWAP1 PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD PUSH2 0x1446 SWAP1 DUP12 SWAP1 PUSH2 0x1C6F JUMP JUMPDEST PUSH2 0x1348 PUSH2 0x1456 DUP9 PUSH1 0x0 ADD MLOAD PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0xA0 DUP10 ADD MLOAD SWAP1 PUSH2 0x1C6F JUMP JUMPDEST PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 DUP3 OR SWAP1 SSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x0 PUSH2 0x14B2 DUP3 DUP11 PUSH2 0x277D JUMP JUMPDEST SWAP1 POP PUSH2 0x14C3 DUP11 DUP3 DUP7 PUSH1 0x0 ADD MLOAD PUSH2 0x1E4B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x80 DUP1 DUP6 ADD MLOAD PUSH1 0xA0 DUP1 DUP8 ADD MLOAD PUSH1 0x20 DUP1 DUP10 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP9 DUP2 MSTORE SWAP3 DUP4 ADD DUP11 SWAP1 MSTORE DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 DUP5 ADD MSTORE DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND SWAP2 SWAP1 DUP14 AND SWAP1 PUSH32 0xC16F4E4CA34D790DE4C656C72FD015C667D688F20BE64EEA360618545C4C530F SWAP1 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0xA0 SWAP1 SWAP3 ADD MLOAD SWAP1 ISZERO SWAP10 SWAP2 SWAP9 POP SWAP7 POP SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x15B6 CALLER DUP4 DUP4 PUSH2 0x1AD0 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x3 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x15CD JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x15D9 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x1665 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x739 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x16A2 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x175F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP PUSH2 0x1769 DUP7 PUSH2 0x20CC JUMP JUMPDEST PUSH2 0x1772 DUP6 PUSH2 0x20DF JUMP JUMPDEST PUSH1 0x3D DUP1 SLOAD PUSH1 0x37 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE DUP11 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH1 0xFF DUP11 AND OR OR SWAP1 SSTORE PUSH2 0x17F7 PUSH2 0x1B96 JUMP JUMPDEST PUSH1 0x35 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x40251FBFB6656CFA65A00D7879029FEC1FAD21D28FDCFF2F4F68F52795B74F2C DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH1 0x40 MLOAD PUSH2 0x1884 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x27AC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0x18BB JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1934 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1958 SWAP2 SWAP1 PUSH2 0x284C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19C5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19E9 SWAP2 SWAP1 PUSH2 0x2869 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1A57 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP POP PUSH1 0x3D DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1AC8 DUP2 PUSH2 0x1B47 JUMP JUMPDEST SWAP4 SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP7 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP7 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP1 MLOAD DUP7 DUP2 MSTORE SWAP5 AND SWAP4 SWAP2 SWAP3 SWAP2 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1B53 PUSH1 0x3A SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1B63 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B82 DUP5 PUSH1 0x3F PUSH1 0x10 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x1C5B JUMP JUMPDEST SWAP1 POP PUSH2 0x1B8E DUP3 DUP3 PUSH2 0x1C6F JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x1BC1 PUSH2 0x20F2 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C68 DUP4 DUP4 TIMESTAMP PUSH2 0x20FC JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1CA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x1D0A DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1D22 JUMPI PUSH1 0x0 DUP1 PUSH1 0x0 SWAP4 POP SWAP4 POP SWAP4 POP POP PUSH2 0x1D44 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D2D DUP7 PUSH2 0xAF2 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 PUSH2 0x1D3B DUP3 DUP3 PUSH2 0x2795 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP POP POP JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH4 0x3B9ACA00 DUP2 DUP2 MUL SWAP1 DUP2 DIV DUP3 EQ PUSH2 0x1D61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1D8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1E47 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x739 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E56 DUP4 PUSH2 0x1DA5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9B DUP3 DUP3 PUSH2 0x288B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV AND ISZERO PUSH2 0x1FB5 JUMPI PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP7 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH2 0x100 SWAP1 SWAP3 DIV SWAP1 SWAP2 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA88 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1FC7 DUP4 PUSH2 0x1DA5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9B DUP3 DUP3 PUSH2 0x28BF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x204C SWAP1 DUP4 SWAP1 PUSH2 0x2795 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP7 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP2 MLOAD SWAP5 SWAP6 POP SWAP3 AND SWAP3 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP1 PUSH2 0x20BE SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x15B6 SWAP1 PUSH1 0x3B SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2243 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x15B6 SWAP1 PUSH1 0x3C SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2243 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xAB4 PUSH2 0x640 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2110 PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x2795 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x212C JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x1C68 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x2162 JUMPI PUSH1 0x0 PUSH2 0x2167 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x217B DUP11 DUP1 PUSH2 0x1C6F JUMP JUMPDEST DUP2 PUSH2 0x2188 JUMPI PUSH2 0x2188 PUSH2 0x28F0 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x219A DUP4 DUP12 PUSH2 0x1C6F JUMP JUMPDEST DUP2 PUSH2 0x21A7 JUMPI PUSH2 0x21A7 PUSH2 0x28F0 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x21B7 DUP7 DUP9 PUSH2 0x291F JUMP JUMPDEST PUSH2 0x21C1 SWAP2 SWAP1 PUSH2 0x291F JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x21D5 DUP9 DUP11 PUSH2 0x291F JUMP JUMPDEST PUSH2 0x21DF SWAP2 SWAP1 PUSH2 0x291F JUMP JUMPDEST PUSH2 0x21E9 SWAP2 SWAP1 PUSH2 0x291F JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x2200 DUP11 DUP16 PUSH2 0x291F JUMP JUMPDEST PUSH2 0x220A SWAP2 SWAP1 PUSH2 0x295C JUMP JUMPDEST PUSH2 0x2220 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x277D JUMP JUMPDEST PUSH2 0x222A SWAP2 SWAP1 PUSH2 0x277D JUMP JUMPDEST PUSH2 0x2234 SWAP2 SWAP1 PUSH2 0x277D JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x224F SWAP1 PUSH2 0x26FA JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x2271 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x22B7 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x228A JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x22B7 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x22B7 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x22B7 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x229C JUMP JUMPDEST POP PUSH2 0x1E47 SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1E47 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x22BF JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x22F9 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x22DD JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x230B JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1C68 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x22D3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2373 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1D61 DUP2 PUSH2 0x2351 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2394 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x239F DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1D61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x23D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x23E4 DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x23F4 DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x2410 PUSH1 0x80 DUP10 ADD PUSH2 0x23AD JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2441 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x244C DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x245C DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2480 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x248B DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x249B DUP2 PUSH2 0x2351 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x24B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1C68 DUP2 PUSH2 0x2351 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x24D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x24E4 DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x24F4 DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2549 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2564 JUMPI PUSH2 0x2564 PUSH2 0x2509 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x25AA JUMPI PUSH2 0x25AA PUSH2 0x2509 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x25C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x25F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x260D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x1122 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xE0 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x2641 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x264C DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x265C DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP7 POP PUSH2 0x266A PUSH1 0x40 DUP11 ADD PUSH2 0x2376 JUMP JUMPDEST SWAP6 POP PUSH2 0x2678 PUSH1 0x60 DUP11 ADD PUSH2 0x23AD JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2695 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26A1 DUP13 DUP4 DUP14 ADD PUSH2 0x2538 JUMP JUMPDEST SWAP6 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26C3 DUP13 DUP4 DUP14 ADD PUSH2 0x2538 JUMP JUMPDEST SWAP5 POP PUSH1 0xC0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26E6 DUP12 DUP3 DUP13 ADD PUSH2 0x25E3 JUMP JUMPDEST SWAP10 SWAP13 SWAP9 SWAP12 POP SWAP7 SWAP10 POP SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x270E JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x2748 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x2790 JUMPI PUSH2 0x2790 PUSH2 0x274E JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x27A7 JUMPI PUSH2 0x27A7 PUSH2 0x274E JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP2 MSTORE PUSH1 0xFF DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x27E4 PUSH1 0xA0 DUP4 ADD DUP8 PUSH2 0x22D3 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x27F6 DUP2 DUP8 PUSH2 0x22D3 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE DUP4 DUP2 MSTORE DUP4 DUP6 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND DUP3 ADD ADD SWAP2 POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x285E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C68 DUP2 PUSH2 0x2351 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x287B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1C68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x28B6 JUMPI PUSH2 0x28B6 PUSH2 0x274E JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x28E8 JUMPI PUSH2 0x28E8 PUSH2 0x274E JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2957 JUMPI PUSH2 0x2957 PUSH2 0x274E JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2992 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD1 0xE3 0x4A 0xE7 DUP10 LT 0x2F DUP13 0xC7 LOG3 GT LOG2 SWAP10 CALLER BASEFEE 0xBB 0x2E 0xB9 RETURNDATASIZE INVALID 0x4B 0xCA DUP2 SWAP13 MUL MSTORE8 MSTORE8 0x5E SWAP11 PUSH31 0xB74B64736F6C634300080A0033000000000000000000000000000000000000 ","sourceMap":"194:191:64:-:0;;;928:1:71;886:43;;246:48:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;286:4;1853::99;2671:222:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1911:1:99;630:13:102;619:24;;;;;;2780:4:103;-1:-1:-1;;;;;2780:23:103;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2759:46:103;;;2811:12;;;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;2829:16:103;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;2851:9:103;:20;;-1:-1:-1;;2851:20:103;;;;;;;;;;;;-1:-1:-1;;;;;;;2877:11:103;;;-1:-1:-1;194:191:64;;-1:-1:-1;194:191:64;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;194:191:64;;;-1:-1:-1;194:191:64;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:138:201;-1:-1:-1;;;;;96:31:201;;86:42;;76:70;;142:1;139;132:12;76:70;14:138;:::o;157:272::-;241:6;294:2;282:9;273:7;269:23;265:32;262:52;;;310:1;307;300:12;262:52;342:9;336:16;361:38;393:5;361:38;:::i;:::-;418:5;157:272;-1:-1:-1;;;157:272:201:o;728:380::-;807:1;803:12;;;;850;;;871:61;;925:4;917:6;913:17;903:27;;871:61;978:2;970:6;967:14;947:18;944:38;941:161;;;1024:10;1019:3;1015:20;1012:1;1005:31;1059:4;1056:1;1049:15;1087:4;1084:1;1077:15;941:161;;728:380;;;:::o;:::-;194:191:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@DEBT_TOKEN_REVISION_26077":{"entryPoint":null,"id":26077,"parameterSlots":0,"returnSlots":0},"@DELEGATION_WITH_SIG_TYPEHASH_27522":{"entryPoint":null,"id":27522,"parameterSlots":0,"returnSlots":0},"@DOMAIN_SEPARATOR_27772":{"entryPoint":2745,"id":27772,"parameterSlots":0,"returnSlots":1},"@EIP712_REVISION_27731":{"entryPoint":null,"id":27731,"parameterSlots":0,"returnSlots":0},"@POOL_27929":{"entryPoint":null,"id":27929,"parameterSlots":0,"returnSlots":0},"@UNDERLYING_ASSET_ADDRESS_26858":{"entryPoint":null,"id":26858,"parameterSlots":0,"returnSlots":1},"@_EIP712BaseId_27008":{"entryPoint":8434,"id":27008,"parameterSlots":0,"returnSlots":1},"@_approveDelegation_27685":{"entryPoint":6864,"id":27685,"parameterSlots":3,"returnSlots":0},"@_burn_26997":{"entryPoint":8124,"id":26997,"parameterSlots":3,"returnSlots":0},"@_calcTotalSupply_26893":{"entryPoint":6983,"id":26893,"parameterSlots":1,"returnSlots":1},"@_calculateBalanceIncrease_26763":{"entryPoint":7366,"id":26763,"parameterSlots":1,"returnSlots":3},"@_calculateDomainSeparator_27815":{"entryPoint":7062,"id":27815,"parameterSlots":0,"returnSlots":1},"@_decreaseBorrowAllowance_27721":{"entryPoint":8204,"id":27721,"parameterSlots":3,"returnSlots":0},"@_mint_26945":{"entryPoint":7755,"id":26945,"parameterSlots":3,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_setDecimals_28348":{"entryPoint":null,"id":28348,"parameterSlots":1,"returnSlots":0},"@_setName_28326":{"entryPoint":8396,"id":28326,"parameterSlots":1,"returnSlots":0},"@_setSymbol_28337":{"entryPoint":8415,"id":28337,"parameterSlots":1,"returnSlots":0},"@allowance_27041":{"entryPoint":null,"id":27041,"parameterSlots":2,"returnSlots":1},"@approveDelegation_27548":{"entryPoint":5547,"id":27548,"parameterSlots":2,"returnSlots":0},"@approve_27057":{"entryPoint":1746,"id":27057,"parameterSlots":2,"returnSlots":1},"@balanceOf_26269":{"entryPoint":2802,"id":26269,"parameterSlots":1,"returnSlots":1},"@balanceOf_28020":{"entryPoint":null,"id":28020,"parameterSlots":1,"returnSlots":1},"@borrowAllowance_27659":{"entryPoint":null,"id":27659,"parameterSlots":2,"returnSlots":1},"@burn_26720":{"entryPoint":3081,"id":26720,"parameterSlots":2,"returnSlots":2},"@calculateCompoundedInterest_21079":{"entryPoint":8444,"id":21079,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_21097":{"entryPoint":7259,"id":21097,"parameterSlots":2,"returnSlots":1},"@decimals_27995":{"entryPoint":null,"id":27995,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_27107":{"entryPoint":null,"id":27107,"parameterSlots":2,"returnSlots":1},"@delegationWithSig_27641":{"entryPoint":1858,"id":27641,"parameterSlots":7,"returnSlots":0},"@getAverageStableRate_26194":{"entryPoint":null,"id":26194,"parameterSlots":0,"returnSlots":1},"@getIncentivesController_28030":{"entryPoint":null,"id":28030,"parameterSlots":0,"returnSlots":1},"@getRevision_9105":{"entryPoint":null,"id":9105,"parameterSlots":0,"returnSlots":1},"@getSupplyData_26791":{"entryPoint":2974,"id":26791,"parameterSlots":0,"returnSlots":4},"@getTotalSupplyAndAvgRate_26811":{"entryPoint":6821,"id":26811,"parameterSlots":0,"returnSlots":2},"@getTotalSupplyLastUpdated_26833":{"entryPoint":null,"id":26833,"parameterSlots":0,"returnSlots":1},"@getUserLastUpdated_26208":{"entryPoint":null,"id":26208,"parameterSlots":1,"returnSlots":1},"@getUserStableRate_26223":{"entryPoint":null,"id":26223,"parameterSlots":1,"returnSlots":1},"@increaseAllowance_27091":{"entryPoint":null,"id":27091,"parameterSlots":2,"returnSlots":1},"@initialize_26174":{"entryPoint":5562,"id":26174,"parameterSlots":8,"returnSlots":0},"@isConstructor_10568":{"entryPoint":null,"id":10568,"parameterSlots":0,"returnSlots":1},"@mint_26493":{"entryPoint":4393,"id":26493,"parameterSlots":4,"returnSlots":3},"@name_27975":{"entryPoint":1600,"id":27975,"parameterSlots":0,"returnSlots":1},"@nonces_27785":{"entryPoint":null,"id":27785,"parameterSlots":1,"returnSlots":1},"@principalBalanceOf_26848":{"entryPoint":null,"id":26848,"parameterSlots":1,"returnSlots":1},"@rayDiv_21198":{"entryPoint":7526,"id":21198,"parameterSlots":2,"returnSlots":1},"@rayMul_21186":{"entryPoint":7279,"id":21186,"parameterSlots":2,"returnSlots":1},"@setIncentivesController_28044":{"entryPoint":6343,"id":28044,"parameterSlots":1,"returnSlots":0},"@symbol_27985":{"entryPoint":3066,"id":27985,"parameterSlots":0,"returnSlots":1},"@toUint128_1626":{"entryPoint":7589,"id":1626,"parameterSlots":1,"returnSlots":1},"@totalSupply_26823":{"entryPoint":2707,"id":26823,"parameterSlots":0,"returnSlots":1},"@totalSupply_28005":{"entryPoint":null,"id":28005,"parameterSlots":0,"returnSlots":1},"@transferFrom_27075":{"entryPoint":null,"id":27075,"parameterSlots":3,"returnSlots":1},"@transfer_27025":{"entryPoint":null,"id":27025,"parameterSlots":2,"returnSlots":1},"@wadToRay_21218":{"entryPoint":7499,"id":21218,"parameterSlots":1,"returnSlots":1},"abi_decode_address":{"entryPoint":9078,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":9699,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_string":{"entryPoint":9528,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":9382,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":10316,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":9325,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":9260,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256":{"entryPoint":9411,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":9150,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":9089,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":10345,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IAaveIncentivesController_$3875":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$4860t_addresst_contract$_IAaveIncentivesController_$3875t_uint8t_string_memory_ptrt_string_memory_ptrt_bytes_calldata_ptr":{"entryPoint":9765,"id":null,"parameterSlots":2,"returnSlots":8},"abi_decode_uint8":{"entryPoint":9133,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_string":{"entryPoint":8915,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":10156,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool_t_uint256_t_uint256__to_t_bool_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IAaveIncentivesController_$3875__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":9022,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint40__to_t_uint256_t_uint256_t_uint256_t_uint40__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_uint40__to_t_uint40__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":10379,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":10109,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":10588,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":10527,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint128":{"entryPoint":10431,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":10133,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":9978,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":10062,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":10480,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":9481,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":9041,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:17494:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"64:481:201","statements":[{"nodeType":"YulVariableDeclaration","src":"74:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"94:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"88:5:201"},"nodeType":"YulFunctionCall","src":"88:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"78:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"116:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"121:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"109:6:201"},"nodeType":"YulFunctionCall","src":"109:19:201"},"nodeType":"YulExpressionStatement","src":"109:19:201"},{"nodeType":"YulVariableDeclaration","src":"137:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"146:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"141:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"208:110:201","statements":[{"nodeType":"YulVariableDeclaration","src":"222:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"232:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"226:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"264:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"269:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"260:3:201"},"nodeType":"YulFunctionCall","src":"260:11:201"},{"name":"_1","nodeType":"YulIdentifier","src":"273:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"256:3:201"},"nodeType":"YulFunctionCall","src":"256:20:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"292:5:201"},{"name":"i","nodeType":"YulIdentifier","src":"299:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"288:3:201"},"nodeType":"YulFunctionCall","src":"288:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"303:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"284:3:201"},"nodeType":"YulFunctionCall","src":"284:22:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"278:5:201"},"nodeType":"YulFunctionCall","src":"278:29:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"249:6:201"},"nodeType":"YulFunctionCall","src":"249:59:201"},"nodeType":"YulExpressionStatement","src":"249:59:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"167:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"170:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"164:2:201"},"nodeType":"YulFunctionCall","src":"164:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"178:21:201","statements":[{"nodeType":"YulAssignment","src":"180:17:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"189:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"192:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"185:3:201"},"nodeType":"YulFunctionCall","src":"185:12:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"180:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"160:3:201","statements":[]},"src":"156:162:201"},{"body":{"nodeType":"YulBlock","src":"352:62:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"381:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"386:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"377:3:201"},"nodeType":"YulFunctionCall","src":"377:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"395:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"373:3:201"},"nodeType":"YulFunctionCall","src":"373:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"402:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"366:6:201"},"nodeType":"YulFunctionCall","src":"366:38:201"},"nodeType":"YulExpressionStatement","src":"366:38:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"333:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"336:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"330:2:201"},"nodeType":"YulFunctionCall","src":"330:13:201"},"nodeType":"YulIf","src":"327:87:201"},{"nodeType":"YulAssignment","src":"423:116:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"438:3:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"451:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"459:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"447:3:201"},"nodeType":"YulFunctionCall","src":"447:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"464:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"443:3:201"},"nodeType":"YulFunctionCall","src":"443:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"434:3:201"},"nodeType":"YulFunctionCall","src":"434:98:201"},{"kind":"number","nodeType":"YulLiteral","src":"534:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"430:3:201"},"nodeType":"YulFunctionCall","src":"430:109:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"423:3:201"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"41:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"48:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"56:3:201","type":""}],"src":"14:531:201"},{"body":{"nodeType":"YulBlock","src":"671:99:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"688:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"699:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"681:6:201"},"nodeType":"YulFunctionCall","src":"681:21:201"},"nodeType":"YulExpressionStatement","src":"681:21:201"},{"nodeType":"YulAssignment","src":"711:53:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"737:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"749:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"760:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"745:3:201"},"nodeType":"YulFunctionCall","src":"745:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"719:17:201"},"nodeType":"YulFunctionCall","src":"719:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"711:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"640:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"651:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"662:4:201","type":""}],"src":"550:220:201"},{"body":{"nodeType":"YulBlock","src":"820:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"907:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"916:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"919:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"909:6:201"},"nodeType":"YulFunctionCall","src":"909:12:201"},"nodeType":"YulExpressionStatement","src":"909:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"843:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"854:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"861:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:201"},"nodeType":"YulFunctionCall","src":"850:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"840:2:201"},"nodeType":"YulFunctionCall","src":"840:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"833:6:201"},"nodeType":"YulFunctionCall","src":"833:73:201"},"nodeType":"YulIf","src":"830:93:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"809:5:201","type":""}],"src":"775:154:201"},{"body":{"nodeType":"YulBlock","src":"983:85:201","statements":[{"nodeType":"YulAssignment","src":"993:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1015:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1002:12:201"},"nodeType":"YulFunctionCall","src":"1002:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"993:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1056:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1031:24:201"},"nodeType":"YulFunctionCall","src":"1031:31:201"},"nodeType":"YulExpressionStatement","src":"1031:31:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"962:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"973:5:201","type":""}],"src":"934:134:201"},{"body":{"nodeType":"YulBlock","src":"1160:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"1206:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1215:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1218:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1208:6:201"},"nodeType":"YulFunctionCall","src":"1208:12:201"},"nodeType":"YulExpressionStatement","src":"1208:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1181:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1190:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1177:3:201"},"nodeType":"YulFunctionCall","src":"1177:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1202:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1173:3:201"},"nodeType":"YulFunctionCall","src":"1173:32:201"},"nodeType":"YulIf","src":"1170:52:201"},{"nodeType":"YulVariableDeclaration","src":"1231:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1257:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1244:12:201"},"nodeType":"YulFunctionCall","src":"1244:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1235:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1301:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1276:24:201"},"nodeType":"YulFunctionCall","src":"1276:31:201"},"nodeType":"YulExpressionStatement","src":"1276:31:201"},{"nodeType":"YulAssignment","src":"1316:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1326:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1316:6:201"}]},{"nodeType":"YulAssignment","src":"1340:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1367:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1378:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1363:3:201"},"nodeType":"YulFunctionCall","src":"1363:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1350:12:201"},"nodeType":"YulFunctionCall","src":"1350:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1340:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1118:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1129:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1141:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1149:6:201","type":""}],"src":"1073:315:201"},{"body":{"nodeType":"YulBlock","src":"1488:92:201","statements":[{"nodeType":"YulAssignment","src":"1498:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1510:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1521:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1506:3:201"},"nodeType":"YulFunctionCall","src":"1506:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1498:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1540:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1565:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1558:6:201"},"nodeType":"YulFunctionCall","src":"1558:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1551:6:201"},"nodeType":"YulFunctionCall","src":"1551:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1533:6:201"},"nodeType":"YulFunctionCall","src":"1533:41:201"},"nodeType":"YulExpressionStatement","src":"1533:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1457:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1468:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1479:4:201","type":""}],"src":"1393:187:201"},{"body":{"nodeType":"YulBlock","src":"1632:109:201","statements":[{"nodeType":"YulAssignment","src":"1642:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1664:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1651:12:201"},"nodeType":"YulFunctionCall","src":"1651:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1642:5:201"}]},{"body":{"nodeType":"YulBlock","src":"1719:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1728:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1731:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1721:6:201"},"nodeType":"YulFunctionCall","src":"1721:12:201"},"nodeType":"YulExpressionStatement","src":"1721:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1693:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1704:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1711:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1700:3:201"},"nodeType":"YulFunctionCall","src":"1700:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1690:2:201"},"nodeType":"YulFunctionCall","src":"1690:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1683:6:201"},"nodeType":"YulFunctionCall","src":"1683:35:201"},"nodeType":"YulIf","src":"1680:55:201"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1611:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1622:5:201","type":""}],"src":"1585:156:201"},{"body":{"nodeType":"YulBlock","src":"1916:564:201","statements":[{"body":{"nodeType":"YulBlock","src":"1963:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1972:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1975:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1965:6:201"},"nodeType":"YulFunctionCall","src":"1965:12:201"},"nodeType":"YulExpressionStatement","src":"1965:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1937:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1946:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1933:3:201"},"nodeType":"YulFunctionCall","src":"1933:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1958:3:201","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1929:3:201"},"nodeType":"YulFunctionCall","src":"1929:33:201"},"nodeType":"YulIf","src":"1926:53:201"},{"nodeType":"YulVariableDeclaration","src":"1988:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2014:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2001:12:201"},"nodeType":"YulFunctionCall","src":"2001:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1992:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2058:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2033:24:201"},"nodeType":"YulFunctionCall","src":"2033:31:201"},"nodeType":"YulExpressionStatement","src":"2033:31:201"},{"nodeType":"YulAssignment","src":"2073:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"2083:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2073:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2097:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2129:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2140:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2125:3:201"},"nodeType":"YulFunctionCall","src":"2125:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2112:12:201"},"nodeType":"YulFunctionCall","src":"2112:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2101:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2178:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2153:24:201"},"nodeType":"YulFunctionCall","src":"2153:33:201"},"nodeType":"YulExpressionStatement","src":"2153:33:201"},{"nodeType":"YulAssignment","src":"2195:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"2205:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2195:6:201"}]},{"nodeType":"YulAssignment","src":"2221:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2248:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2259:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2244:3:201"},"nodeType":"YulFunctionCall","src":"2244:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2231:12:201"},"nodeType":"YulFunctionCall","src":"2231:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2221:6:201"}]},{"nodeType":"YulAssignment","src":"2272:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2299:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2310:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2295:3:201"},"nodeType":"YulFunctionCall","src":"2295:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2282:12:201"},"nodeType":"YulFunctionCall","src":"2282:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2272:6:201"}]},{"nodeType":"YulAssignment","src":"2323:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2354:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2365:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2350:3:201"},"nodeType":"YulFunctionCall","src":"2350:19:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"2333:16:201"},"nodeType":"YulFunctionCall","src":"2333:37:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"2323:6:201"}]},{"nodeType":"YulAssignment","src":"2379:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2406:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2417:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2402:3:201"},"nodeType":"YulFunctionCall","src":"2402:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2389:12:201"},"nodeType":"YulFunctionCall","src":"2389:33:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"2379:6:201"}]},{"nodeType":"YulAssignment","src":"2431:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2458:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2469:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2454:3:201"},"nodeType":"YulFunctionCall","src":"2454:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2441:12:201"},"nodeType":"YulFunctionCall","src":"2441:33:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"2431:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1834:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1845:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1857:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1865:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1873:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1881:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1889:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"1897:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"1905:6:201","type":""}],"src":"1746:734:201"},{"body":{"nodeType":"YulBlock","src":"2586:76:201","statements":[{"nodeType":"YulAssignment","src":"2596:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2608:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2619:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2604:3:201"},"nodeType":"YulFunctionCall","src":"2604:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2596:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2638:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"2649:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2631:6:201"},"nodeType":"YulFunctionCall","src":"2631:25:201"},"nodeType":"YulExpressionStatement","src":"2631:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2555:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2566:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2577:4:201","type":""}],"src":"2485:177:201"},{"body":{"nodeType":"YulBlock","src":"2771:352:201","statements":[{"body":{"nodeType":"YulBlock","src":"2817:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2826:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2829:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2819:6:201"},"nodeType":"YulFunctionCall","src":"2819:12:201"},"nodeType":"YulExpressionStatement","src":"2819:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2792:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2801:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2788:3:201"},"nodeType":"YulFunctionCall","src":"2788:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2813:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2784:3:201"},"nodeType":"YulFunctionCall","src":"2784:32:201"},"nodeType":"YulIf","src":"2781:52:201"},{"nodeType":"YulVariableDeclaration","src":"2842:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2868:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2855:12:201"},"nodeType":"YulFunctionCall","src":"2855:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2846:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2912:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2887:24:201"},"nodeType":"YulFunctionCall","src":"2887:31:201"},"nodeType":"YulExpressionStatement","src":"2887:31:201"},{"nodeType":"YulAssignment","src":"2927:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"2937:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2927:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2951:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2983:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2994:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2979:3:201"},"nodeType":"YulFunctionCall","src":"2979:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2966:12:201"},"nodeType":"YulFunctionCall","src":"2966:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2955:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3032:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3007:24:201"},"nodeType":"YulFunctionCall","src":"3007:33:201"},"nodeType":"YulExpressionStatement","src":"3007:33:201"},{"nodeType":"YulAssignment","src":"3049:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3059:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3049:6:201"}]},{"nodeType":"YulAssignment","src":"3075:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3102:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3113:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3098:3:201"},"nodeType":"YulFunctionCall","src":"3098:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3085:12:201"},"nodeType":"YulFunctionCall","src":"3085:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3075:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2721:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2732:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2744:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2752:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2760:6:201","type":""}],"src":"2667:456:201"},{"body":{"nodeType":"YulBlock","src":"3225:87:201","statements":[{"nodeType":"YulAssignment","src":"3235:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3247:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3258:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3243:3:201"},"nodeType":"YulFunctionCall","src":"3243:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3235:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3277:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3292:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3300:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3288:3:201"},"nodeType":"YulFunctionCall","src":"3288:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3270:6:201"},"nodeType":"YulFunctionCall","src":"3270:36:201"},"nodeType":"YulExpressionStatement","src":"3270:36:201"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3194:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3205:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3216:4:201","type":""}],"src":"3128:184:201"},{"body":{"nodeType":"YulBlock","src":"3418:76:201","statements":[{"nodeType":"YulAssignment","src":"3428:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3440:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3451:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3436:3:201"},"nodeType":"YulFunctionCall","src":"3436:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3428:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3470:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"3481:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3463:6:201"},"nodeType":"YulFunctionCall","src":"3463:25:201"},"nodeType":"YulExpressionStatement","src":"3463:25:201"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3387:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3398:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3409:4:201","type":""}],"src":"3317:177:201"},{"body":{"nodeType":"YulBlock","src":"3586:301:201","statements":[{"body":{"nodeType":"YulBlock","src":"3632:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3641:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3644:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3634:6:201"},"nodeType":"YulFunctionCall","src":"3634:12:201"},"nodeType":"YulExpressionStatement","src":"3634:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3607:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3616:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3603:3:201"},"nodeType":"YulFunctionCall","src":"3603:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3628:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3599:3:201"},"nodeType":"YulFunctionCall","src":"3599:32:201"},"nodeType":"YulIf","src":"3596:52:201"},{"nodeType":"YulVariableDeclaration","src":"3657:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3683:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3670:12:201"},"nodeType":"YulFunctionCall","src":"3670:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3661:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3727:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3702:24:201"},"nodeType":"YulFunctionCall","src":"3702:31:201"},"nodeType":"YulExpressionStatement","src":"3702:31:201"},{"nodeType":"YulAssignment","src":"3742:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3752:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3742:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3766:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3798:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3809:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3794:3:201"},"nodeType":"YulFunctionCall","src":"3794:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3781:12:201"},"nodeType":"YulFunctionCall","src":"3781:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"3770:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3847:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3822:24:201"},"nodeType":"YulFunctionCall","src":"3822:33:201"},"nodeType":"YulExpressionStatement","src":"3822:33:201"},{"nodeType":"YulAssignment","src":"3864:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3874:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3864:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3544:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3555:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3567:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3575:6:201","type":""}],"src":"3499:388:201"},{"body":{"nodeType":"YulBlock","src":"3962:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"4008:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4017:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4020:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4010:6:201"},"nodeType":"YulFunctionCall","src":"4010:12:201"},"nodeType":"YulExpressionStatement","src":"4010:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3983:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3992:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3979:3:201"},"nodeType":"YulFunctionCall","src":"3979:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4004:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3975:3:201"},"nodeType":"YulFunctionCall","src":"3975:32:201"},"nodeType":"YulIf","src":"3972:52:201"},{"nodeType":"YulVariableDeclaration","src":"4033:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4059:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4046:12:201"},"nodeType":"YulFunctionCall","src":"4046:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4037:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4103:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4078:24:201"},"nodeType":"YulFunctionCall","src":"4078:31:201"},"nodeType":"YulExpressionStatement","src":"4078:31:201"},{"nodeType":"YulAssignment","src":"4118:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"4128:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4118:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3928:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3939:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3951:6:201","type":""}],"src":"3892:247:201"},{"body":{"nodeType":"YulBlock","src":"4259:125:201","statements":[{"nodeType":"YulAssignment","src":"4269:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4281:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4292:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4277:3:201"},"nodeType":"YulFunctionCall","src":"4277:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4269:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4311:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4326:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4334:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4322:3:201"},"nodeType":"YulFunctionCall","src":"4322:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4304:6:201"},"nodeType":"YulFunctionCall","src":"4304:74:201"},"nodeType":"YulExpressionStatement","src":"4304:74:201"}]},"name":"abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4228:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4239:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4250:4:201","type":""}],"src":"4144:240:201"},{"body":{"nodeType":"YulBlock","src":"4524:125:201","statements":[{"nodeType":"YulAssignment","src":"4534:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4546:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4557:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4542:3:201"},"nodeType":"YulFunctionCall","src":"4542:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4534:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4576:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4591:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4599:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4587:3:201"},"nodeType":"YulFunctionCall","src":"4587:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4569:6:201"},"nodeType":"YulFunctionCall","src":"4569:74:201"},"nodeType":"YulExpressionStatement","src":"4569:74:201"}]},"name":"abi_encode_tuple_t_contract$_IAaveIncentivesController_$3875__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4493:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4504:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4515:4:201","type":""}],"src":"4389:260:201"},{"body":{"nodeType":"YulBlock","src":"4773:99:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4790:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4801:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4783:6:201"},"nodeType":"YulFunctionCall","src":"4783:21:201"},"nodeType":"YulExpressionStatement","src":"4783:21:201"},{"nodeType":"YulAssignment","src":"4813:53:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4839:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4851:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4862:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4847:3:201"},"nodeType":"YulFunctionCall","src":"4847:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"4821:17:201"},"nodeType":"YulFunctionCall","src":"4821:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4813:4:201"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4742:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4753:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4764:4:201","type":""}],"src":"4654:218:201"},{"body":{"nodeType":"YulBlock","src":"5060:225:201","statements":[{"nodeType":"YulAssignment","src":"5070:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5082:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5093:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5078:3:201"},"nodeType":"YulFunctionCall","src":"5078:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5070:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5113:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"5124:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5106:6:201"},"nodeType":"YulFunctionCall","src":"5106:25:201"},"nodeType":"YulExpressionStatement","src":"5106:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5151:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5162:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5147:3:201"},"nodeType":"YulFunctionCall","src":"5147:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"5167:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5140:6:201"},"nodeType":"YulFunctionCall","src":"5140:34:201"},"nodeType":"YulExpressionStatement","src":"5140:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5194:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5205:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5190:3:201"},"nodeType":"YulFunctionCall","src":"5190:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"5210:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5183:6:201"},"nodeType":"YulFunctionCall","src":"5183:34:201"},"nodeType":"YulExpressionStatement","src":"5183:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5237:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5248:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5233:3:201"},"nodeType":"YulFunctionCall","src":"5233:18:201"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"5257:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5265:12:201","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5253:3:201"},"nodeType":"YulFunctionCall","src":"5253:25:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5226:6:201"},"nodeType":"YulFunctionCall","src":"5226:53:201"},"nodeType":"YulExpressionStatement","src":"5226:53:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint40__to_t_uint256_t_uint256_t_uint256_t_uint40__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5005:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5016:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5024:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5032:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5040:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5051:4:201","type":""}],"src":"4877:408:201"},{"body":{"nodeType":"YulBlock","src":"5389:95:201","statements":[{"nodeType":"YulAssignment","src":"5399:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5411:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5422:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5407:3:201"},"nodeType":"YulFunctionCall","src":"5407:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5399:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5441:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5456:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5464:12:201","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5452:3:201"},"nodeType":"YulFunctionCall","src":"5452:25:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5434:6:201"},"nodeType":"YulFunctionCall","src":"5434:44:201"},"nodeType":"YulExpressionStatement","src":"5434:44:201"}]},"name":"abi_encode_tuple_t_uint40__to_t_uint40__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5358:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5369:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5380:4:201","type":""}],"src":"5290:194:201"},{"body":{"nodeType":"YulBlock","src":"5618:119:201","statements":[{"nodeType":"YulAssignment","src":"5628:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5640:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5651:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5636:3:201"},"nodeType":"YulFunctionCall","src":"5636:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5628:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5670:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"5681:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5663:6:201"},"nodeType":"YulFunctionCall","src":"5663:25:201"},"nodeType":"YulExpressionStatement","src":"5663:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5708:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5719:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5704:3:201"},"nodeType":"YulFunctionCall","src":"5704:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"5724:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5697:6:201"},"nodeType":"YulFunctionCall","src":"5697:34:201"},"nodeType":"YulExpressionStatement","src":"5697:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5579:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5590:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5598:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5609:4:201","type":""}],"src":"5489:248:201"},{"body":{"nodeType":"YulBlock","src":"5843:125:201","statements":[{"nodeType":"YulAssignment","src":"5853:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5865:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5876:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5861:3:201"},"nodeType":"YulFunctionCall","src":"5861:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5853:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5895:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5910:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5918:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5906:3:201"},"nodeType":"YulFunctionCall","src":"5906:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5888:6:201"},"nodeType":"YulFunctionCall","src":"5888:74:201"},"nodeType":"YulExpressionStatement","src":"5888:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5812:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5823:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5834:4:201","type":""}],"src":"5742:226:201"},{"body":{"nodeType":"YulBlock","src":"6094:404:201","statements":[{"body":{"nodeType":"YulBlock","src":"6141:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6150:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6153:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6143:6:201"},"nodeType":"YulFunctionCall","src":"6143:12:201"},"nodeType":"YulExpressionStatement","src":"6143:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6115:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6124:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6111:3:201"},"nodeType":"YulFunctionCall","src":"6111:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"6136:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6107:3:201"},"nodeType":"YulFunctionCall","src":"6107:33:201"},"nodeType":"YulIf","src":"6104:53:201"},{"nodeType":"YulVariableDeclaration","src":"6166:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6192:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6179:12:201"},"nodeType":"YulFunctionCall","src":"6179:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6170:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6236:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6211:24:201"},"nodeType":"YulFunctionCall","src":"6211:31:201"},"nodeType":"YulExpressionStatement","src":"6211:31:201"},{"nodeType":"YulAssignment","src":"6251:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"6261:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6251:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"6275:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6307:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6318:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6303:3:201"},"nodeType":"YulFunctionCall","src":"6303:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6290:12:201"},"nodeType":"YulFunctionCall","src":"6290:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"6279:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"6356:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6331:24:201"},"nodeType":"YulFunctionCall","src":"6331:33:201"},"nodeType":"YulExpressionStatement","src":"6331:33:201"},{"nodeType":"YulAssignment","src":"6373:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"6383:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6373:6:201"}]},{"nodeType":"YulAssignment","src":"6399:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6426:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6437:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6422:3:201"},"nodeType":"YulFunctionCall","src":"6422:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6409:12:201"},"nodeType":"YulFunctionCall","src":"6409:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6399:6:201"}]},{"nodeType":"YulAssignment","src":"6450:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6477:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6488:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6473:3:201"},"nodeType":"YulFunctionCall","src":"6473:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6460:12:201"},"nodeType":"YulFunctionCall","src":"6460:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"6450:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6036:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6047:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6059:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6067:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6075:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6083:6:201","type":""}],"src":"5973:525:201"},{"body":{"nodeType":"YulBlock","src":"6654:178:201","statements":[{"nodeType":"YulAssignment","src":"6664:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6676:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6687:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6672:3:201"},"nodeType":"YulFunctionCall","src":"6672:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6664:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6706:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6731:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6724:6:201"},"nodeType":"YulFunctionCall","src":"6724:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6717:6:201"},"nodeType":"YulFunctionCall","src":"6717:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6699:6:201"},"nodeType":"YulFunctionCall","src":"6699:41:201"},"nodeType":"YulExpressionStatement","src":"6699:41:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6760:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6771:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6756:3:201"},"nodeType":"YulFunctionCall","src":"6756:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"6776:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6749:6:201"},"nodeType":"YulFunctionCall","src":"6749:34:201"},"nodeType":"YulExpressionStatement","src":"6749:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6803:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6814:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6799:3:201"},"nodeType":"YulFunctionCall","src":"6799:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"6819:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6792:6:201"},"nodeType":"YulFunctionCall","src":"6792:34:201"},"nodeType":"YulExpressionStatement","src":"6792:34:201"}]},"name":"abi_encode_tuple_t_bool_t_uint256_t_uint256__to_t_bool_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6607:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6618:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6626:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6634:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6645:4:201","type":""}],"src":"6503:329:201"},{"body":{"nodeType":"YulBlock","src":"6869:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6886:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6889:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6879:6:201"},"nodeType":"YulFunctionCall","src":"6879:88:201"},"nodeType":"YulExpressionStatement","src":"6879:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6983:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6986:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6976:6:201"},"nodeType":"YulFunctionCall","src":"6976:15:201"},"nodeType":"YulExpressionStatement","src":"6976:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7007:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7010:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7000:6:201"},"nodeType":"YulFunctionCall","src":"7000:15:201"},"nodeType":"YulExpressionStatement","src":"7000:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"6837:184:201"},{"body":{"nodeType":"YulBlock","src":"7079:725:201","statements":[{"body":{"nodeType":"YulBlock","src":"7128:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7137:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7140:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7130:6:201"},"nodeType":"YulFunctionCall","src":"7130:12:201"},"nodeType":"YulExpressionStatement","src":"7130:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7107:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7115:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7103:3:201"},"nodeType":"YulFunctionCall","src":"7103:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"7122:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7099:3:201"},"nodeType":"YulFunctionCall","src":"7099:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7092:6:201"},"nodeType":"YulFunctionCall","src":"7092:35:201"},"nodeType":"YulIf","src":"7089:55:201"},{"nodeType":"YulVariableDeclaration","src":"7153:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7176:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7163:12:201"},"nodeType":"YulFunctionCall","src":"7163:20:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"7157:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7192:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"7202:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"7196:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"7243:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"7245:16:201"},"nodeType":"YulFunctionCall","src":"7245:18:201"},"nodeType":"YulExpressionStatement","src":"7245:18:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"7235:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"7239:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7232:2:201"},"nodeType":"YulFunctionCall","src":"7232:10:201"},"nodeType":"YulIf","src":"7229:36:201"},{"nodeType":"YulVariableDeclaration","src":"7274:76:201","value":{"kind":"number","nodeType":"YulLiteral","src":"7284:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"7278:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7359:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7379:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7373:5:201"},"nodeType":"YulFunctionCall","src":"7373:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"7363:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7391:71:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7413:6:201"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"7437:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"7441:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7433:3:201"},"nodeType":"YulFunctionCall","src":"7433:13:201"},{"name":"_3","nodeType":"YulIdentifier","src":"7448:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7429:3:201"},"nodeType":"YulFunctionCall","src":"7429:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"7453:2:201","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7425:3:201"},"nodeType":"YulFunctionCall","src":"7425:31:201"},{"name":"_3","nodeType":"YulIdentifier","src":"7458:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7421:3:201"},"nodeType":"YulFunctionCall","src":"7421:40:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7409:3:201"},"nodeType":"YulFunctionCall","src":"7409:53:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"7395:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"7521:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"7523:16:201"},"nodeType":"YulFunctionCall","src":"7523:18:201"},"nodeType":"YulExpressionStatement","src":"7523:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7480:10:201"},{"name":"_2","nodeType":"YulIdentifier","src":"7492:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7477:2:201"},"nodeType":"YulFunctionCall","src":"7477:18:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7500:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"7512:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7497:2:201"},"nodeType":"YulFunctionCall","src":"7497:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"7474:2:201"},"nodeType":"YulFunctionCall","src":"7474:46:201"},"nodeType":"YulIf","src":"7471:72:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7559:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7563:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7552:6:201"},"nodeType":"YulFunctionCall","src":"7552:22:201"},"nodeType":"YulExpressionStatement","src":"7552:22:201"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7590:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7598:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7583:6:201"},"nodeType":"YulFunctionCall","src":"7583:18:201"},"nodeType":"YulExpressionStatement","src":"7583:18:201"},{"body":{"nodeType":"YulBlock","src":"7649:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7658:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7661:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7651:6:201"},"nodeType":"YulFunctionCall","src":"7651:12:201"},"nodeType":"YulExpressionStatement","src":"7651:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7624:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7632:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7620:3:201"},"nodeType":"YulFunctionCall","src":"7620:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"7637:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7616:3:201"},"nodeType":"YulFunctionCall","src":"7616:26:201"},{"name":"end","nodeType":"YulIdentifier","src":"7644:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7613:2:201"},"nodeType":"YulFunctionCall","src":"7613:35:201"},"nodeType":"YulIf","src":"7610:55:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7691:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7699:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7687:3:201"},"nodeType":"YulFunctionCall","src":"7687:17:201"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7710:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7718:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7706:3:201"},"nodeType":"YulFunctionCall","src":"7706:17:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7725:2:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"7674:12:201"},"nodeType":"YulFunctionCall","src":"7674:54:201"},"nodeType":"YulExpressionStatement","src":"7674:54:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7752:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7760:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7748:3:201"},"nodeType":"YulFunctionCall","src":"7748:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"7765:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7744:3:201"},"nodeType":"YulFunctionCall","src":"7744:26:201"},{"kind":"number","nodeType":"YulLiteral","src":"7772:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7737:6:201"},"nodeType":"YulFunctionCall","src":"7737:37:201"},"nodeType":"YulExpressionStatement","src":"7737:37:201"},{"nodeType":"YulAssignment","src":"7783:15:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"7792:6:201"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"7783:5:201"}]}]},"name":"abi_decode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7053:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"7061:3:201","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"7069:5:201","type":""}],"src":"7026:778:201"},{"body":{"nodeType":"YulBlock","src":"7881:275:201","statements":[{"body":{"nodeType":"YulBlock","src":"7930:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7939:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7942:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7932:6:201"},"nodeType":"YulFunctionCall","src":"7932:12:201"},"nodeType":"YulExpressionStatement","src":"7932:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7909:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7917:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7905:3:201"},"nodeType":"YulFunctionCall","src":"7905:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"7924:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7901:3:201"},"nodeType":"YulFunctionCall","src":"7901:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7894:6:201"},"nodeType":"YulFunctionCall","src":"7894:35:201"},"nodeType":"YulIf","src":"7891:55:201"},{"nodeType":"YulAssignment","src":"7955:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7978:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7965:12:201"},"nodeType":"YulFunctionCall","src":"7965:20:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"7955:6:201"}]},{"body":{"nodeType":"YulBlock","src":"8028:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8037:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8040:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8030:6:201"},"nodeType":"YulFunctionCall","src":"8030:12:201"},"nodeType":"YulExpressionStatement","src":"8030:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8000:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8008:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7997:2:201"},"nodeType":"YulFunctionCall","src":"7997:30:201"},"nodeType":"YulIf","src":"7994:50:201"},{"nodeType":"YulAssignment","src":"8053:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8069:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8077:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8065:3:201"},"nodeType":"YulFunctionCall","src":"8065:17:201"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"8053:8:201"}]},{"body":{"nodeType":"YulBlock","src":"8134:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8143:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8146:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8136:6:201"},"nodeType":"YulFunctionCall","src":"8136:12:201"},"nodeType":"YulExpressionStatement","src":"8136:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8105:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"8113:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8101:3:201"},"nodeType":"YulFunctionCall","src":"8101:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"8122:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8097:3:201"},"nodeType":"YulFunctionCall","src":"8097:30:201"},{"name":"end","nodeType":"YulIdentifier","src":"8129:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8094:2:201"},"nodeType":"YulFunctionCall","src":"8094:39:201"},"nodeType":"YulIf","src":"8091:59:201"}]},"name":"abi_decode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7844:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"7852:3:201","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"7860:8:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"7870:6:201","type":""}],"src":"7809:347:201"},{"body":{"nodeType":"YulBlock","src":"8418:1045:201","statements":[{"body":{"nodeType":"YulBlock","src":"8465:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8474:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8477:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8467:6:201"},"nodeType":"YulFunctionCall","src":"8467:12:201"},"nodeType":"YulExpressionStatement","src":"8467:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8439:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"8448:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8435:3:201"},"nodeType":"YulFunctionCall","src":"8435:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"8460:3:201","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8431:3:201"},"nodeType":"YulFunctionCall","src":"8431:33:201"},"nodeType":"YulIf","src":"8428:53:201"},{"nodeType":"YulVariableDeclaration","src":"8490:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8516:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8503:12:201"},"nodeType":"YulFunctionCall","src":"8503:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"8494:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8560:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"8535:24:201"},"nodeType":"YulFunctionCall","src":"8535:31:201"},"nodeType":"YulExpressionStatement","src":"8535:31:201"},{"nodeType":"YulAssignment","src":"8575:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"8585:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8575:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"8599:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8631:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8642:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8627:3:201"},"nodeType":"YulFunctionCall","src":"8627:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8614:12:201"},"nodeType":"YulFunctionCall","src":"8614:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"8603:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"8680:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"8655:24:201"},"nodeType":"YulFunctionCall","src":"8655:33:201"},"nodeType":"YulExpressionStatement","src":"8655:33:201"},{"nodeType":"YulAssignment","src":"8697:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"8707:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"8697:6:201"}]},{"nodeType":"YulAssignment","src":"8723:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8756:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8767:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8752:3:201"},"nodeType":"YulFunctionCall","src":"8752:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"8733:18:201"},"nodeType":"YulFunctionCall","src":"8733:38:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"8723:6:201"}]},{"nodeType":"YulAssignment","src":"8780:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8811:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8822:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8807:3:201"},"nodeType":"YulFunctionCall","src":"8807:18:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"8790:16:201"},"nodeType":"YulFunctionCall","src":"8790:36:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"8780:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"8835:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8866:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8877:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8862:3:201"},"nodeType":"YulFunctionCall","src":"8862:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8849:12:201"},"nodeType":"YulFunctionCall","src":"8849:33:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"8839:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8891:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8901:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8895:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"8946:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8955:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8958:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8948:6:201"},"nodeType":"YulFunctionCall","src":"8948:12:201"},"nodeType":"YulExpressionStatement","src":"8948:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8934:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"8942:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8931:2:201"},"nodeType":"YulFunctionCall","src":"8931:14:201"},"nodeType":"YulIf","src":"8928:34:201"},{"nodeType":"YulAssignment","src":"8971:60:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9003:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"9014:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8999:3:201"},"nodeType":"YulFunctionCall","src":"8999:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"9023:7:201"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"8981:17:201"},"nodeType":"YulFunctionCall","src":"8981:50:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"8971:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"9040:49:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9073:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9084:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9069:3:201"},"nodeType":"YulFunctionCall","src":"9069:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9056:12:201"},"nodeType":"YulFunctionCall","src":"9056:33:201"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"9044:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"9118:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9127:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9130:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9120:6:201"},"nodeType":"YulFunctionCall","src":"9120:12:201"},"nodeType":"YulExpressionStatement","src":"9120:12:201"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"9104:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9114:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9101:2:201"},"nodeType":"YulFunctionCall","src":"9101:16:201"},"nodeType":"YulIf","src":"9098:36:201"},{"nodeType":"YulAssignment","src":"9143:62:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9175:9:201"},{"name":"offset_1","nodeType":"YulIdentifier","src":"9186:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9171:3:201"},"nodeType":"YulFunctionCall","src":"9171:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"9197:7:201"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"9153:17:201"},"nodeType":"YulFunctionCall","src":"9153:52:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"9143:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"9214:49:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9247:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9258:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9243:3:201"},"nodeType":"YulFunctionCall","src":"9243:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9230:12:201"},"nodeType":"YulFunctionCall","src":"9230:33:201"},"variables":[{"name":"offset_2","nodeType":"YulTypedName","src":"9218:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"9292:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9301:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9304:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9294:6:201"},"nodeType":"YulFunctionCall","src":"9294:12:201"},"nodeType":"YulExpressionStatement","src":"9294:12:201"}]},"condition":{"arguments":[{"name":"offset_2","nodeType":"YulIdentifier","src":"9278:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9288:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9275:2:201"},"nodeType":"YulFunctionCall","src":"9275:16:201"},"nodeType":"YulIf","src":"9272:36:201"},{"nodeType":"YulVariableDeclaration","src":"9317:86:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9373:9:201"},{"name":"offset_2","nodeType":"YulIdentifier","src":"9384:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9369:3:201"},"nodeType":"YulFunctionCall","src":"9369:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"9395:7:201"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"9343:25:201"},"nodeType":"YulFunctionCall","src":"9343:60:201"},"variables":[{"name":"value6_1","nodeType":"YulTypedName","src":"9321:8:201","type":""},{"name":"value7_1","nodeType":"YulTypedName","src":"9331:8:201","type":""}]},{"nodeType":"YulAssignment","src":"9412:18:201","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"9422:8:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"9412:6:201"}]},{"nodeType":"YulAssignment","src":"9439:18:201","value":{"name":"value7_1","nodeType":"YulIdentifier","src":"9449:8:201"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"9439:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$4860t_addresst_contract$_IAaveIncentivesController_$3875t_uint8t_string_memory_ptrt_string_memory_ptrt_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8328:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8339:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8351:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8359:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8367:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"8375:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"8383:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"8391:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"8399:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"8407:6:201","type":""}],"src":"8161:1302:201"},{"body":{"nodeType":"YulBlock","src":"9572:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"9618:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9627:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9630:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9620:6:201"},"nodeType":"YulFunctionCall","src":"9620:12:201"},"nodeType":"YulExpressionStatement","src":"9620:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9593:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"9602:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9589:3:201"},"nodeType":"YulFunctionCall","src":"9589:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"9614:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9585:3:201"},"nodeType":"YulFunctionCall","src":"9585:32:201"},"nodeType":"YulIf","src":"9582:52:201"},{"nodeType":"YulVariableDeclaration","src":"9643:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9669:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9656:12:201"},"nodeType":"YulFunctionCall","src":"9656:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9647:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9713:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9688:24:201"},"nodeType":"YulFunctionCall","src":"9688:31:201"},"nodeType":"YulExpressionStatement","src":"9688:31:201"},{"nodeType":"YulAssignment","src":"9728:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"9738:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9728:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IAaveIncentivesController_$3875","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9538:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9549:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9561:6:201","type":""}],"src":"9468:281:201"},{"body":{"nodeType":"YulBlock","src":"9809:382:201","statements":[{"nodeType":"YulAssignment","src":"9819:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9833:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"9836:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"9829:3:201"},"nodeType":"YulFunctionCall","src":"9829:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"9819:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"9850:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"9880:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"9886:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9876:3:201"},"nodeType":"YulFunctionCall","src":"9876:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"9854:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"9927:31:201","statements":[{"nodeType":"YulAssignment","src":"9929:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9943:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"9951:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9939:3:201"},"nodeType":"YulFunctionCall","src":"9939:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"9929:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"9907:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9900:6:201"},"nodeType":"YulFunctionCall","src":"9900:26:201"},"nodeType":"YulIf","src":"9897:61:201"},{"body":{"nodeType":"YulBlock","src":"10017:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10038:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10041:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10031:6:201"},"nodeType":"YulFunctionCall","src":"10031:88:201"},"nodeType":"YulExpressionStatement","src":"10031:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10139:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10142:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10132:6:201"},"nodeType":"YulFunctionCall","src":"10132:15:201"},"nodeType":"YulExpressionStatement","src":"10132:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10167:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10170:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10160:6:201"},"nodeType":"YulFunctionCall","src":"10160:15:201"},"nodeType":"YulExpressionStatement","src":"10160:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"9973:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9996:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10004:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9993:2:201"},"nodeType":"YulFunctionCall","src":"9993:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"9970:2:201"},"nodeType":"YulFunctionCall","src":"9970:38:201"},"nodeType":"YulIf","src":"9967:218:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"9789:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"9798:6:201","type":""}],"src":"9754:437:201"},{"body":{"nodeType":"YulBlock","src":"10409:299:201","statements":[{"nodeType":"YulAssignment","src":"10419:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10431:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10442:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10427:3:201"},"nodeType":"YulFunctionCall","src":"10427:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10419:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10462:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"10473:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10455:6:201"},"nodeType":"YulFunctionCall","src":"10455:25:201"},"nodeType":"YulExpressionStatement","src":"10455:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10500:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10511:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10496:3:201"},"nodeType":"YulFunctionCall","src":"10496:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10520:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10528:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10516:3:201"},"nodeType":"YulFunctionCall","src":"10516:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10489:6:201"},"nodeType":"YulFunctionCall","src":"10489:83:201"},"nodeType":"YulExpressionStatement","src":"10489:83:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10592:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10603:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10588:3:201"},"nodeType":"YulFunctionCall","src":"10588:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"10608:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10581:6:201"},"nodeType":"YulFunctionCall","src":"10581:34:201"},"nodeType":"YulExpressionStatement","src":"10581:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10635:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10646:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10631:3:201"},"nodeType":"YulFunctionCall","src":"10631:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"10651:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10624:6:201"},"nodeType":"YulFunctionCall","src":"10624:34:201"},"nodeType":"YulExpressionStatement","src":"10624:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10678:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10689:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10674:3:201"},"nodeType":"YulFunctionCall","src":"10674:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"10695:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10667:6:201"},"nodeType":"YulFunctionCall","src":"10667:35:201"},"nodeType":"YulExpressionStatement","src":"10667:35:201"}]},"name":"abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10346:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"10357:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"10365:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10373:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10381:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10389:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10400:4:201","type":""}],"src":"10196:512:201"},{"body":{"nodeType":"YulBlock","src":"10961:196:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10978:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"10983:66:201","type":"","value":"0x1901000000000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10971:6:201"},"nodeType":"YulFunctionCall","src":"10971:79:201"},"nodeType":"YulExpressionStatement","src":"10971:79:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11070:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"11075:1:201","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11066:3:201"},"nodeType":"YulFunctionCall","src":"11066:11:201"},{"name":"value0","nodeType":"YulIdentifier","src":"11079:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11059:6:201"},"nodeType":"YulFunctionCall","src":"11059:27:201"},"nodeType":"YulExpressionStatement","src":"11059:27:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11106:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"11111:2:201","type":"","value":"34"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11102:3:201"},"nodeType":"YulFunctionCall","src":"11102:12:201"},{"name":"value1","nodeType":"YulIdentifier","src":"11116:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11095:6:201"},"nodeType":"YulFunctionCall","src":"11095:28:201"},"nodeType":"YulExpressionStatement","src":"11095:28:201"},{"nodeType":"YulAssignment","src":"11132:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11143:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"11148:2:201","type":"","value":"66"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11139:3:201"},"nodeType":"YulFunctionCall","src":"11139:12:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"11132:3:201"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"10929:3:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10934:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10942:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"10953:3:201","type":""}],"src":"10713:444:201"},{"body":{"nodeType":"YulBlock","src":"11343:217:201","statements":[{"nodeType":"YulAssignment","src":"11353:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11365:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11376:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11361:3:201"},"nodeType":"YulFunctionCall","src":"11361:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11353:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11396:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"11407:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11389:6:201"},"nodeType":"YulFunctionCall","src":"11389:25:201"},"nodeType":"YulExpressionStatement","src":"11389:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11434:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11445:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11430:3:201"},"nodeType":"YulFunctionCall","src":"11430:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11454:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"11462:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11450:3:201"},"nodeType":"YulFunctionCall","src":"11450:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11423:6:201"},"nodeType":"YulFunctionCall","src":"11423:45:201"},"nodeType":"YulExpressionStatement","src":"11423:45:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11488:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11499:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11484:3:201"},"nodeType":"YulFunctionCall","src":"11484:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"11504:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11477:6:201"},"nodeType":"YulFunctionCall","src":"11477:34:201"},"nodeType":"YulExpressionStatement","src":"11477:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11531:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11542:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11527:3:201"},"nodeType":"YulFunctionCall","src":"11527:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"11547:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11520:6:201"},"nodeType":"YulFunctionCall","src":"11520:34:201"},"nodeType":"YulExpressionStatement","src":"11520:34:201"}]},"name":"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11288:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11299:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11307:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11315:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11323:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11334:4:201","type":""}],"src":"11162:398:201"},{"body":{"nodeType":"YulBlock","src":"11597:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11614:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11617:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11607:6:201"},"nodeType":"YulFunctionCall","src":"11607:88:201"},"nodeType":"YulExpressionStatement","src":"11607:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11711:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"11714:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11704:6:201"},"nodeType":"YulFunctionCall","src":"11704:15:201"},"nodeType":"YulExpressionStatement","src":"11704:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11735:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11738:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11728:6:201"},"nodeType":"YulFunctionCall","src":"11728:15:201"},"nodeType":"YulExpressionStatement","src":"11728:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"11565:184:201"},{"body":{"nodeType":"YulBlock","src":"11802:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"11829:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11831:16:201"},"nodeType":"YulFunctionCall","src":"11831:18:201"},"nodeType":"YulExpressionStatement","src":"11831:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11818:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"11825:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"11821:3:201"},"nodeType":"YulFunctionCall","src":"11821:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11815:2:201"},"nodeType":"YulFunctionCall","src":"11815:13:201"},"nodeType":"YulIf","src":"11812:39:201"},{"nodeType":"YulAssignment","src":"11860:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11871:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"11874:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11867:3:201"},"nodeType":"YulFunctionCall","src":"11867:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"11860:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11785:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"11788:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"11794:3:201","type":""}],"src":"11754:128:201"},{"body":{"nodeType":"YulBlock","src":"11936:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"11958:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11960:16:201"},"nodeType":"YulFunctionCall","src":"11960:18:201"},"nodeType":"YulExpressionStatement","src":"11960:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11952:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"11955:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"11949:2:201"},"nodeType":"YulFunctionCall","src":"11949:8:201"},"nodeType":"YulIf","src":"11946:34:201"},{"nodeType":"YulAssignment","src":"11989:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"12001:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"12004:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11997:3:201"},"nodeType":"YulFunctionCall","src":"11997:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"11989:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11918:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"11921:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"11927:4:201","type":""}],"src":"11887:125:201"},{"body":{"nodeType":"YulBlock","src":"12258:294:201","statements":[{"nodeType":"YulAssignment","src":"12268:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12280:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12291:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12276:3:201"},"nodeType":"YulFunctionCall","src":"12276:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12268:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12311:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"12322:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12304:6:201"},"nodeType":"YulFunctionCall","src":"12304:25:201"},"nodeType":"YulExpressionStatement","src":"12304:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12349:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12360:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12345:3:201"},"nodeType":"YulFunctionCall","src":"12345:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"12365:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12338:6:201"},"nodeType":"YulFunctionCall","src":"12338:34:201"},"nodeType":"YulExpressionStatement","src":"12338:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12392:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12403:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12388:3:201"},"nodeType":"YulFunctionCall","src":"12388:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"12408:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12381:6:201"},"nodeType":"YulFunctionCall","src":"12381:34:201"},"nodeType":"YulExpressionStatement","src":"12381:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12435:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12446:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12431:3:201"},"nodeType":"YulFunctionCall","src":"12431:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"12451:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12424:6:201"},"nodeType":"YulFunctionCall","src":"12424:34:201"},"nodeType":"YulExpressionStatement","src":"12424:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12478:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12489:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12474:3:201"},"nodeType":"YulFunctionCall","src":"12474:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"12495:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12467:6:201"},"nodeType":"YulFunctionCall","src":"12467:35:201"},"nodeType":"YulExpressionStatement","src":"12467:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12522:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12533:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12518:3:201"},"nodeType":"YulFunctionCall","src":"12518:19:201"},{"name":"value5","nodeType":"YulIdentifier","src":"12539:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12511:6:201"},"nodeType":"YulFunctionCall","src":"12511:35:201"},"nodeType":"YulExpressionStatement","src":"12511:35:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12187:9:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"12198:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12206:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12214:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12222:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12230:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12238:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12249:4:201","type":""}],"src":"12017:535:201"},{"body":{"nodeType":"YulBlock","src":"12770:250:201","statements":[{"nodeType":"YulAssignment","src":"12780:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12792:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12803:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12788:3:201"},"nodeType":"YulFunctionCall","src":"12788:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12780:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12823:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"12834:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12816:6:201"},"nodeType":"YulFunctionCall","src":"12816:25:201"},"nodeType":"YulExpressionStatement","src":"12816:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12861:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12872:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12857:3:201"},"nodeType":"YulFunctionCall","src":"12857:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"12877:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12850:6:201"},"nodeType":"YulFunctionCall","src":"12850:34:201"},"nodeType":"YulExpressionStatement","src":"12850:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12904:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12915:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12900:3:201"},"nodeType":"YulFunctionCall","src":"12900:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"12920:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12893:6:201"},"nodeType":"YulFunctionCall","src":"12893:34:201"},"nodeType":"YulExpressionStatement","src":"12893:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12947:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12958:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12943:3:201"},"nodeType":"YulFunctionCall","src":"12943:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"12963:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12936:6:201"},"nodeType":"YulFunctionCall","src":"12936:34:201"},"nodeType":"YulExpressionStatement","src":"12936:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12990:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13001:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12986:3:201"},"nodeType":"YulFunctionCall","src":"12986:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"13007:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12979:6:201"},"nodeType":"YulFunctionCall","src":"12979:35:201"},"nodeType":"YulExpressionStatement","src":"12979:35:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12707:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12718:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12726:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12734:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12742:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12750:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12761:4:201","type":""}],"src":"12557:463:201"},{"body":{"nodeType":"YulBlock","src":"13199:236:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13216:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13227:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13209:6:201"},"nodeType":"YulFunctionCall","src":"13209:21:201"},"nodeType":"YulExpressionStatement","src":"13209:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13250:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13261:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13246:3:201"},"nodeType":"YulFunctionCall","src":"13246:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"13266:2:201","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13239:6:201"},"nodeType":"YulFunctionCall","src":"13239:30:201"},"nodeType":"YulExpressionStatement","src":"13239:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13289:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13300:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13285:3:201"},"nodeType":"YulFunctionCall","src":"13285:18:201"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"13305:34:201","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13278:6:201"},"nodeType":"YulFunctionCall","src":"13278:62:201"},"nodeType":"YulExpressionStatement","src":"13278:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13360:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13371:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13356:3:201"},"nodeType":"YulFunctionCall","src":"13356:18:201"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"13376:16:201","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13349:6:201"},"nodeType":"YulFunctionCall","src":"13349:44:201"},"nodeType":"YulExpressionStatement","src":"13349:44:201"},{"nodeType":"YulAssignment","src":"13402:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13414:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13425:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13410:3:201"},"nodeType":"YulFunctionCall","src":"13410:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13402:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13176:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13190:4:201","type":""}],"src":"13025:410:201"},{"body":{"nodeType":"YulBlock","src":"13717:688:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13734:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13749:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13757:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13745:3:201"},"nodeType":"YulFunctionCall","src":"13745:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13727:6:201"},"nodeType":"YulFunctionCall","src":"13727:74:201"},"nodeType":"YulExpressionStatement","src":"13727:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13821:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13832:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13817:3:201"},"nodeType":"YulFunctionCall","src":"13817:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"13841:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13849:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13837:3:201"},"nodeType":"YulFunctionCall","src":"13837:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13810:6:201"},"nodeType":"YulFunctionCall","src":"13810:45:201"},"nodeType":"YulExpressionStatement","src":"13810:45:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13875:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13886:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13871:3:201"},"nodeType":"YulFunctionCall","src":"13871:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"13891:3:201","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13864:6:201"},"nodeType":"YulFunctionCall","src":"13864:31:201"},"nodeType":"YulExpressionStatement","src":"13864:31:201"},{"nodeType":"YulVariableDeclaration","src":"13904:60:201","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"13936:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13948:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13959:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13944:3:201"},"nodeType":"YulFunctionCall","src":"13944:19:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"13918:17:201"},"nodeType":"YulFunctionCall","src":"13918:46:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"13908:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13984:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13995:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13980:3:201"},"nodeType":"YulFunctionCall","src":"13980:18:201"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"14004:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"14012:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14000:3:201"},"nodeType":"YulFunctionCall","src":"14000:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13973:6:201"},"nodeType":"YulFunctionCall","src":"13973:50:201"},"nodeType":"YulExpressionStatement","src":"13973:50:201"},{"nodeType":"YulVariableDeclaration","src":"14032:47:201","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"14064:6:201"},{"name":"tail_1","nodeType":"YulIdentifier","src":"14072:6:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"14046:17:201"},"nodeType":"YulFunctionCall","src":"14046:33:201"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"14036:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14099:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14110:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14095:3:201"},"nodeType":"YulFunctionCall","src":"14095:19:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"14120:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"14128:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14116:3:201"},"nodeType":"YulFunctionCall","src":"14116:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14088:6:201"},"nodeType":"YulFunctionCall","src":"14088:51:201"},"nodeType":"YulExpressionStatement","src":"14088:51:201"},{"expression":{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"14155:6:201"},{"name":"value5","nodeType":"YulIdentifier","src":"14163:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14148:6:201"},"nodeType":"YulFunctionCall","src":"14148:22:201"},"nodeType":"YulExpressionStatement","src":"14148:22:201"},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"14196:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"14204:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14192:3:201"},"nodeType":"YulFunctionCall","src":"14192:15:201"},{"name":"value4","nodeType":"YulIdentifier","src":"14209:6:201"},{"name":"value5","nodeType":"YulIdentifier","src":"14217:6:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"14179:12:201"},"nodeType":"YulFunctionCall","src":"14179:45:201"},"nodeType":"YulExpressionStatement","src":"14179:45:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"14248:6:201"},{"name":"value5","nodeType":"YulIdentifier","src":"14256:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14244:3:201"},"nodeType":"YulFunctionCall","src":"14244:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"14265:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14240:3:201"},"nodeType":"YulFunctionCall","src":"14240:28:201"},{"kind":"number","nodeType":"YulLiteral","src":"14270:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14233:6:201"},"nodeType":"YulFunctionCall","src":"14233:39:201"},"nodeType":"YulExpressionStatement","src":"14233:39:201"},{"nodeType":"YulAssignment","src":"14281:118:201","value":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"14297:6:201"},{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"14313:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"14321:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14309:3:201"},"nodeType":"YulFunctionCall","src":"14309:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"14326:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14305:3:201"},"nodeType":"YulFunctionCall","src":"14305:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14293:3:201"},"nodeType":"YulFunctionCall","src":"14293:101:201"},{"kind":"number","nodeType":"YulLiteral","src":"14396:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14289:3:201"},"nodeType":"YulFunctionCall","src":"14289:110:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14281:4:201"}]}]},"name":"abi_encode_tuple_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13646:9:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"13657:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"13665:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13673:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13681:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13689:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13697:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13708:4:201","type":""}],"src":"13440:965:201"},{"body":{"nodeType":"YulBlock","src":"14491:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"14537:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14546:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14549:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14539:6:201"},"nodeType":"YulFunctionCall","src":"14539:12:201"},"nodeType":"YulExpressionStatement","src":"14539:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14512:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"14521:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14508:3:201"},"nodeType":"YulFunctionCall","src":"14508:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"14533:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14504:3:201"},"nodeType":"YulFunctionCall","src":"14504:32:201"},"nodeType":"YulIf","src":"14501:52:201"},{"nodeType":"YulVariableDeclaration","src":"14562:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14581:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14575:5:201"},"nodeType":"YulFunctionCall","src":"14575:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"14566:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14625:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"14600:24:201"},"nodeType":"YulFunctionCall","src":"14600:31:201"},"nodeType":"YulExpressionStatement","src":"14600:31:201"},{"nodeType":"YulAssignment","src":"14640:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"14650:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14640:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14457:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14468:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14480:6:201","type":""}],"src":"14410:251:201"},{"body":{"nodeType":"YulBlock","src":"14744:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"14790:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14799:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14802:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14792:6:201"},"nodeType":"YulFunctionCall","src":"14792:12:201"},"nodeType":"YulExpressionStatement","src":"14792:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14765:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"14774:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14761:3:201"},"nodeType":"YulFunctionCall","src":"14761:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"14786:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14757:3:201"},"nodeType":"YulFunctionCall","src":"14757:32:201"},"nodeType":"YulIf","src":"14754:52:201"},{"nodeType":"YulVariableDeclaration","src":"14815:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14834:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14828:5:201"},"nodeType":"YulFunctionCall","src":"14828:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"14819:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"14897:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14906:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14909:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14899:6:201"},"nodeType":"YulFunctionCall","src":"14899:12:201"},"nodeType":"YulExpressionStatement","src":"14899:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14866:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14887:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"14880:6:201"},"nodeType":"YulFunctionCall","src":"14880:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"14873:6:201"},"nodeType":"YulFunctionCall","src":"14873:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"14863:2:201"},"nodeType":"YulFunctionCall","src":"14863:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"14856:6:201"},"nodeType":"YulFunctionCall","src":"14856:40:201"},"nodeType":"YulIf","src":"14853:60:201"},{"nodeType":"YulAssignment","src":"14922:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"14932:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14922:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14710:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14721:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14733:6:201","type":""}],"src":"14666:277:201"},{"body":{"nodeType":"YulBlock","src":"15161:299:201","statements":[{"nodeType":"YulAssignment","src":"15171:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15183:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15194:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15179:3:201"},"nodeType":"YulFunctionCall","src":"15179:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15171:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15214:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"15225:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15207:6:201"},"nodeType":"YulFunctionCall","src":"15207:25:201"},"nodeType":"YulExpressionStatement","src":"15207:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15252:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15263:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15248:3:201"},"nodeType":"YulFunctionCall","src":"15248:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"15268:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15241:6:201"},"nodeType":"YulFunctionCall","src":"15241:34:201"},"nodeType":"YulExpressionStatement","src":"15241:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15295:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15306:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15291:3:201"},"nodeType":"YulFunctionCall","src":"15291:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"15311:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15284:6:201"},"nodeType":"YulFunctionCall","src":"15284:34:201"},"nodeType":"YulExpressionStatement","src":"15284:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15338:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15349:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15334:3:201"},"nodeType":"YulFunctionCall","src":"15334:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"15354:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15327:6:201"},"nodeType":"YulFunctionCall","src":"15327:34:201"},"nodeType":"YulExpressionStatement","src":"15327:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15381:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15392:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15377:3:201"},"nodeType":"YulFunctionCall","src":"15377:19:201"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"15402:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"15410:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15398:3:201"},"nodeType":"YulFunctionCall","src":"15398:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15370:6:201"},"nodeType":"YulFunctionCall","src":"15370:84:201"},"nodeType":"YulExpressionStatement","src":"15370:84:201"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15098:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"15109:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"15117:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15125:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15133:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15141:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15152:4:201","type":""}],"src":"14948:512:201"},{"body":{"nodeType":"YulBlock","src":"15639:229:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15656:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15667:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15649:6:201"},"nodeType":"YulFunctionCall","src":"15649:21:201"},"nodeType":"YulExpressionStatement","src":"15649:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15690:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15701:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15686:3:201"},"nodeType":"YulFunctionCall","src":"15686:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"15706:2:201","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15679:6:201"},"nodeType":"YulFunctionCall","src":"15679:30:201"},"nodeType":"YulExpressionStatement","src":"15679:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15729:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15740:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15725:3:201"},"nodeType":"YulFunctionCall","src":"15725:18:201"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"15745:34:201","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15718:6:201"},"nodeType":"YulFunctionCall","src":"15718:62:201"},"nodeType":"YulExpressionStatement","src":"15718:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15800:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15811:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15796:3:201"},"nodeType":"YulFunctionCall","src":"15796:18:201"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"15816:9:201","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15789:6:201"},"nodeType":"YulFunctionCall","src":"15789:37:201"},"nodeType":"YulExpressionStatement","src":"15789:37:201"},{"nodeType":"YulAssignment","src":"15835:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15847:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15858:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15843:3:201"},"nodeType":"YulFunctionCall","src":"15843:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15835:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15616:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15630:4:201","type":""}],"src":"15465:403:201"},{"body":{"nodeType":"YulBlock","src":"15921:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"15931:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"15941:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15935:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15984:21:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15999:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16002:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15995:3:201"},"nodeType":"YulFunctionCall","src":"15995:10:201"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15988:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16014:21:201","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"16029:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16032:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16025:3:201"},"nodeType":"YulFunctionCall","src":"16025:10:201"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"16018:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"16069:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"16071:16:201"},"nodeType":"YulFunctionCall","src":"16071:18:201"},"nodeType":"YulExpressionStatement","src":"16071:18:201"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16050:3:201"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"16059:2:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"16063:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16055:3:201"},"nodeType":"YulFunctionCall","src":"16055:12:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"16047:2:201"},"nodeType":"YulFunctionCall","src":"16047:21:201"},"nodeType":"YulIf","src":"16044:47:201"},{"nodeType":"YulAssignment","src":"16100:20:201","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16111:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"16116:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16107:3:201"},"nodeType":"YulFunctionCall","src":"16107:13:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"16100:3:201"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15904:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"15907:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"15913:3:201","type":""}],"src":"15873:253:201"},{"body":{"nodeType":"YulBlock","src":"16288:252:201","statements":[{"nodeType":"YulAssignment","src":"16298:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16310:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16321:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16306:3:201"},"nodeType":"YulFunctionCall","src":"16306:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16298:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16340:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16355:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"16363:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16351:3:201"},"nodeType":"YulFunctionCall","src":"16351:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16333:6:201"},"nodeType":"YulFunctionCall","src":"16333:74:201"},"nodeType":"YulExpressionStatement","src":"16333:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16427:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16438:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16423:3:201"},"nodeType":"YulFunctionCall","src":"16423:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"16443:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16416:6:201"},"nodeType":"YulFunctionCall","src":"16416:34:201"},"nodeType":"YulExpressionStatement","src":"16416:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16470:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16481:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16466:3:201"},"nodeType":"YulFunctionCall","src":"16466:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"16490:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"16498:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16486:3:201"},"nodeType":"YulFunctionCall","src":"16486:47:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16459:6:201"},"nodeType":"YulFunctionCall","src":"16459:75:201"},"nodeType":"YulExpressionStatement","src":"16459:75:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16241:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"16252:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16260:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16268:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16279:4:201","type":""}],"src":"16131:409:201"},{"body":{"nodeType":"YulBlock","src":"16594:197:201","statements":[{"nodeType":"YulVariableDeclaration","src":"16604:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"16614:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"16608:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16657:21:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"16672:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16675:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16668:3:201"},"nodeType":"YulFunctionCall","src":"16668:10:201"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"16661:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16687:21:201","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"16702:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16705:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16698:3:201"},"nodeType":"YulFunctionCall","src":"16698:10:201"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"16691:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"16733:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"16735:16:201"},"nodeType":"YulFunctionCall","src":"16735:18:201"},"nodeType":"YulExpressionStatement","src":"16735:18:201"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16723:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"16728:3:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16720:2:201"},"nodeType":"YulFunctionCall","src":"16720:12:201"},"nodeType":"YulIf","src":"16717:38:201"},{"nodeType":"YulAssignment","src":"16764:21:201","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16776:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"16781:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16772:3:201"},"nodeType":"YulFunctionCall","src":"16772:13:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"16764:4:201"}]}]},"name":"checked_sub_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"16576:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"16579:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"16585:4:201","type":""}],"src":"16545:246:201"},{"body":{"nodeType":"YulBlock","src":"16828:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16845:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16848:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16838:6:201"},"nodeType":"YulFunctionCall","src":"16838:88:201"},"nodeType":"YulExpressionStatement","src":"16838:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16942:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"16945:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16935:6:201"},"nodeType":"YulFunctionCall","src":"16935:15:201"},"nodeType":"YulExpressionStatement","src":"16935:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16966:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16969:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16959:6:201"},"nodeType":"YulFunctionCall","src":"16959:15:201"},"nodeType":"YulExpressionStatement","src":"16959:15:201"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"16796:184:201"},{"body":{"nodeType":"YulBlock","src":"17037:176:201","statements":[{"body":{"nodeType":"YulBlock","src":"17156:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"17158:16:201"},"nodeType":"YulFunctionCall","src":"17158:18:201"},"nodeType":"YulExpressionStatement","src":"17158:18:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"17068:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17061:6:201"},"nodeType":"YulFunctionCall","src":"17061:9:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17054:6:201"},"nodeType":"YulFunctionCall","src":"17054:17:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"17076:1:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17083:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"17151:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"17079:3:201"},"nodeType":"YulFunctionCall","src":"17079:74:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"17073:2:201"},"nodeType":"YulFunctionCall","src":"17073:81:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17050:3:201"},"nodeType":"YulFunctionCall","src":"17050:105:201"},"nodeType":"YulIf","src":"17047:131:201"},{"nodeType":"YulAssignment","src":"17187:20:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"17202:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"17205:1:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"17198:3:201"},"nodeType":"YulFunctionCall","src":"17198:9:201"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"17187:7:201"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"17016:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"17019:1:201","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"17025:7:201","type":""}],"src":"16985:228:201"},{"body":{"nodeType":"YulBlock","src":"17264:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"17295:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17316:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17319:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17309:6:201"},"nodeType":"YulFunctionCall","src":"17309:88:201"},"nodeType":"YulExpressionStatement","src":"17309:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17417:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"17420:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17410:6:201"},"nodeType":"YulFunctionCall","src":"17410:15:201"},"nodeType":"YulExpressionStatement","src":"17410:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17445:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17448:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17438:6:201"},"nodeType":"YulFunctionCall","src":"17438:15:201"},"nodeType":"YulExpressionStatement","src":"17438:15:201"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"17284:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17277:6:201"},"nodeType":"YulFunctionCall","src":"17277:9:201"},"nodeType":"YulIf","src":"17274:189:201"},{"nodeType":"YulAssignment","src":"17472:14:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"17481:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"17484:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"17477:3:201"},"nodeType":"YulFunctionCall","src":"17477:9:201"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"17472:1:201"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"17249:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"17252:1:201","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"17258:1:201","type":""}],"src":"17218:274:201"}]},"contents":"{\n    { }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_contract$_IAaveIncentivesController_$3875__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint40__to_t_uint256_t_uint256_t_uint256_t_uint40__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, 0xffffffffff))\n    }\n    function abi_encode_tuple_t_uint40__to_t_uint40__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffff))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_encode_tuple_t_bool_t_uint256_t_uint256__to_t_bool_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, iszero(iszero(value0)))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_string(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$4860t_addresst_contract$_IAaveIncentivesController_$3875t_uint8t_string_memory_ptrt_string_memory_ptrt_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := abi_decode_address(add(headStart, 64))\n        value3 := abi_decode_uint8(add(headStart, 96))\n        let offset := calldataload(add(headStart, 128))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        value4 := abi_decode_string(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 160))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value5 := abi_decode_string(add(headStart, offset_1), dataEnd)\n        let offset_2 := calldataload(add(headStart, 192))\n        if gt(offset_2, _1) { revert(0, 0) }\n        let value6_1, value7_1 := abi_decode_bytes_calldata(add(headStart, offset_2), dataEnd)\n        value6 := value6_1\n        value7 := value7_1\n    }\n    function abi_decode_tuple_t_contract$_IAaveIncentivesController_$3875(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, 0x1901000000000000000000000000000000000000000000000000000000000000)\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), 160)\n        let tail_1 := abi_encode_string(value2, add(headStart, 160))\n        mstore(add(headStart, 96), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string(value3, tail_1)\n        mstore(add(headStart, 128), sub(tail_2, headStart))\n        mstore(tail_2, value5)\n        calldatacopy(add(tail_2, 32), value4, value5)\n        mstore(add(add(tail_2, value5), 32), 0)\n        tail := add(add(tail_2, and(add(value5, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 32)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffff))\n    }\n    function checked_sub_t_uint128(x, y) -> diff\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"27744":[{"length":32,"start":2749}],"27926":[{"length":32,"start":6347}],"27929":[{"length":32,"start":773},{"length":32,"start":3141},{"length":32,"start":4420},{"length":32,"start":5796},{"length":32,"start":6143}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061020b5760003560e01c806390f6fcf21161012a578063c04a8a10116100bd578063e655dbd81161008c578063e78c9b3b11610071578063e78c9b3b146105b5578063f3bfc73814610611578063f731e9be1461063857600080fd5b8063e655dbd81461057f578063e74848901461059257600080fd5b8063c04a8a1014610503578063c222ec8a14610516578063c634dfaa14610529578063dd62ed3e1461057157600080fd5b8063a9059cbb116100f9578063a9059cbb1461022e578063b16a19de146104ad578063b3f1c93d146104cb578063b9a7b622146104fb57600080fd5b806390f6fcf21461046357806395d89b411461047d5780639dc29fac14610485578063a457c2d71461022e57600080fd5b80636bd76d24116101a25780637816037611610171578063781603761461036f57806379774338146103ab57806379ce6b8c146103da5780637ecebe001461042d57600080fd5b80636bd76d24146102a757806370a08231146102ed5780637535d2461461030057806375d264131461034c57600080fd5b806323b872dd116101de57806323b872dd1461027c578063313ce5671461028a5780633644e5151461029f578063395093511461022e57600080fd5b806306fdde0314610210578063095ea7b31461022e5780630b52d5581461025157806318160ddd14610266575b600080fd5b610218610640565b604051610225919061233e565b60405180910390f35b61024161023c366004612381565b6106d2565b6040519015158152602001610225565b61026461025f3660046123be565b610742565b005b61026e610a93565b604051908152602001610225565b61024161023c36600461242c565b603d5460405160ff9091168152602001610225565b61026e610ab9565b61026e6102b536600461246d565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260366020908152604080832093909416825291909152205490565b61026e6102fb3660046124a6565b610af2565b6103277f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610225565b603d54610100900473ffffffffffffffffffffffffffffffffffffffff16610327565b6102186040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6103b3610b9e565b6040805194855260208501939093529183015264ffffffffff166060820152608001610225565b6104176103e83660046124a6565b73ffffffffffffffffffffffffffffffffffffffff166000908152603e602052604090205464ffffffffff1690565b60405164ffffffffff9091168152602001610225565b61026e61043b3660046124a6565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205490565b603f546fffffffffffffffffffffffffffffffff1661026e565b610218610bfa565b610498610493366004612381565b610c09565b60408051928352602083019190915201610225565b60375473ffffffffffffffffffffffffffffffffffffffff16610327565b6104de6104d93660046124c3565b611129565b604080519315158452602084019290925290820152606001610225565b61026e600181565b610264610511366004612381565b6115ab565b610264610524366004612625565b6115ba565b61026e6105373660046124a6565b73ffffffffffffffffffffffffffffffffffffffff166000908152603860205260409020546fffffffffffffffffffffffffffffffff1690565b61026e61023c36600461246d565b61026461058d3660046124a6565b6118c7565b603f54700100000000000000000000000000000000900464ffffffffff16610417565b61026e6105c33660046124a6565b73ffffffffffffffffffffffffffffffffffffffff1660009081526038602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b61026e7f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa081565b610498611aa5565b6060603b805461064f906126fa565b80601f016020809104026020016040519081016040528092919081815260200182805461067b906126fa565b80156106c85780601f1061069d576101008083540402835291602001916106c8565b820191906000526020600020905b8154815290600101906020018083116106ab57829003601f168201915b5050505050905090565b604080518082018252600281527f3830000000000000000000000000000000000000000000000000000000000000602082015290517f08c379a00000000000000000000000000000000000000000000000000000000081526000916107399160040161233e565b60405180910390fd5b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff88166107c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b50834211156040518060400160405280600281526020017f373800000000000000000000000000000000000000000000000000000000000081525090610837576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b5073ffffffffffffffffffffffffffffffffffffffff871660009081526034602052604081205490610867610ab9565b604080517f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa0602082015273ffffffffffffffffffffffffffffffffffffffff8b1691810191909152606081018990526080810184905260a0810188905260c0016040516020818303038152906040528051906020012060405160200161091f9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa1580156109a5573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f373900000000000000000000000000000000000000000000000000000000000081525090610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b50610a5782600161277d565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260346020526040902055610a88898989611ad0565b505050505050505050565b603f54600090610ab4906fffffffffffffffffffffffffffffffff16611b47565b905090565b60007f0000000000000000000000000000000000000000000000000000000000000000461415610aea575060355490565b610ab4611b96565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603860205260408120546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041681610b51575060009392505050565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603e6020526040812054610b8990839064ffffffffff16611c5b565b9050610b958382611c6f565b95945050505050565b603f546000908190819081906fffffffffffffffffffffffffffffffff16610bc5603a5490565b610bce82611b47565b603f549197909650919450700100000000000000000000000000000000900464ffffffffff1692509050565b6060603c805461064f906126fa565b60408051808201909152600281527f323300000000000000000000000000000000000000000000000000000000000060208201526000908190337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b50600080610cbf86611cc6565b92509250506000610cce610a93565b73ffffffffffffffffffffffffffffffffffffffff881660009081526038602052604081205491925090819070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16888411610d5957603f80547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690556000603a55610e53565b610d638985612795565b603a81905591506000610d93610d7886611d4b565b603f546fffffffffffffffffffffffffffffffff1690611c6f565b90506000610daa610da38c611d4b565b8490611c6f565b9050818110610de957603f80547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690556000603a8190559450610e50565b610e0d610e08610df886611d4b565b610e028486612795565b90611d66565b611da5565b603f80547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216918217905594505b50505b85891415610ecb5773ffffffffffffffffffffffffffffffffffffffff8a16600090815260386020908152604080832080546fffffffffffffffffffffffffffffffff169055603e909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000169055610f20565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603e6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff161790555b603f80547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff160217905588851115611049576000610f788a87612795565b9050610f858b8287611e4b565b60405181815273ffffffffffffffffffffffffffffffffffffffff8c16906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101899052908101879052606081018390526080810185905260a0810184905273ffffffffffffffffffffffffffffffffffffffff8c169081907fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f9060c00160405180910390a350611119565b6000611055868b612795565b90506110628b8287611fbc565b60405181815260009073ffffffffffffffffffffffffffffffffffffffff8d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101899052908101879052606081018590526080810184905273ffffffffffffffffffffffffffffffffffffffff8c16907f44bd20a79e993bdcc7cbedf54a3b4d19fb78490124b6b90d04fe3242eea579e89060a00160405180910390a2505b50955093505050505b9250929050565b6000808073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f3233000000000000000000000000000000000000000000000000000000000000815250906111ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b506112246040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146112625761126287898861200c565b60008061126e89611cc6565b925092505061127b610a93565b808452603f546fffffffffffffffffffffffffffffffff1660a08501526112a390899061277d565b603a81905560208401526112b688611d4b565b60408481019190915273ffffffffffffffffffffffffffffffffffffffff8a1660009081526038602052205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16606084015261135261132261131d8a8561277d565b611d4b565b6040850151611331908a611c6f565b61134861133d86611d4b565b606088015190611c6f565b610e02919061277d565b6080840181905261136290611da5565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260386020908152604080832080546fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000969091168602179055603e825290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff16908117909155603f80547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff16919093021790915583015161146190610e089061143690611d4b565b6040860151611446908b90611c6f565b6113486114568860000151611d4b565b60a089015190611c6f565b603f80547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216918217905560a084015260006114b2828a61277d565b90506114c38a828660000151611e4b565b60405181815273ffffffffffffffffffffffffffffffffffffffff8b16906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360808085015160a080870151602080890151604080518881529283018a9052820188905260608201949094529384015282015273ffffffffffffffffffffffffffffffffffffffff808c1691908d16907fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f9060c00160405180910390a35050602082015160a0909201519015999198509650945050505050565b6115b6338383611ad0565b5050565b60015460039060ff16806115cd5750303b155b806115d9575060005481115b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610739565b60015460ff161580156116a257600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f38370000000000000000000000000000000000000000000000000000000000008152509061175f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b50611769866120cc565b611772856120df565b603d80546037805473ffffffffffffffffffffffffffffffffffffffff8d81167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179091558a16610100027fffffffffffffffffffffff00000000000000000000000000000000000000000090911660ff8a16171790556117f7611b96565b6035819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f40251fbfb6656cfa65a00d7879029fec1fad21d28fdcff2f4f68f52795b74f2c8a8a8a8a8a8a604051611884969594939291906127ac565b60405180910390a380156118bb57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611934573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611958919061284c565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156119c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e99190612869565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233e565b5050603d805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b603f5460009081906fffffffffffffffffffffffffffffffff16611ac881611b47565b939092509050565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526036602090815260408083208786168085529083529281902086905560375490518681529416939192917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1910160405180910390a4505050565b600080611b53603a5490565b905080611b635750600092915050565b6000611b8284603f60109054906101000a900464ffffffffff16611c5b565b9050611b8e8282611c6f565b949350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611bc16120f2565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000611c688383426120fc565b9392505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517611ca457600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b600080600080611d0a8573ffffffffffffffffffffffffffffffffffffffff166000908152603860205260409020546fffffffffffffffffffffffffffffffff1690565b905080611d2257600080600093509350935050611d44565b6000611d2d86610af2565b90508181611d3b8282612795565b94509450945050505b9193909250565b633b9aca008181029081048214611d6157600080fd5b919050565b600081156b033b2e3c9fd0803ce800000060028404190484111715611d8a57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b60006fffffffffffffffffffffffffffffffff821115611e47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610739565b5090565b6000611e5683611da5565b73ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260409020549091506fffffffffffffffffffffffffffffffff16611e9b828261288b565b73ffffffffffffffffffffffffffffffffffffffff868116600090815260386020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9390931692909217909155603d5461010090041615611fb557603d546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018690526fffffffffffffffffffffffffffffffff84166044830152610100909204909116906331873e2e90606401600060405180830381600087803b158015611fa157600080fd5b505af1158015610a88573d6000803e3d6000fd5b5050505050565b6000611fc783611da5565b73ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260409020549091506fffffffffffffffffffffffffffffffff16611e9b82826128bf565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260366020908152604080832093861683529290529081205461204c908390612795565b73ffffffffffffffffffffffffffffffffffffffff808616600081815260366020908152604080832089861680855292529182902085905560375491519495509216927fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1906120be9086815260200190565b60405180910390a450505050565b80516115b690603b906020840190612243565b80516115b690603c906020840190612243565b6060610ab4610640565b60008061211064ffffffffff851684612795565b90508061212c576b033b2e3c9fd0803ce8000000915050611c68565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511612162576000612167565b600285035b925066038882915c400061217b8a80611c6f565b81612188576121886128f0565b0491506301e1338061219a838b611c6f565b816121a7576121a76128f0565b0490506000826121b7868861291f565b6121c1919061291f565b600290049050600082856121d5888a61291f565b6121df919061291f565b6121e9919061291f565b60069004905080826301e133806122008a8f61291f565b61220a919061295c565b612220906b033b2e3c9fd0803ce800000061277d565b61222a919061277d565b612234919061277d565b9b9a5050505050505050505050565b82805461224f906126fa565b90600052602060002090601f01602090048101928261227157600085556122b7565b82601f1061228a57805160ff19168380011785556122b7565b828001600101855582156122b7579182015b828111156122b757825182559160200191906001019061229c565b50611e479291505b80821115611e4757600081556001016122bf565b6000815180845260005b818110156122f9576020818501810151868301820152016122dd565b8181111561230b576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611c6860208301846122d3565b73ffffffffffffffffffffffffffffffffffffffff8116811461237357600080fd5b50565b8035611d6181612351565b6000806040838503121561239457600080fd5b823561239f81612351565b946020939093013593505050565b803560ff81168114611d6157600080fd5b600080600080600080600060e0888a0312156123d957600080fd5b87356123e481612351565b965060208801356123f481612351565b95506040880135945060608801359350612410608089016123ad565b925060a0880135915060c0880135905092959891949750929550565b60008060006060848603121561244157600080fd5b833561244c81612351565b9250602084013561245c81612351565b929592945050506040919091013590565b6000806040838503121561248057600080fd5b823561248b81612351565b9150602083013561249b81612351565b809150509250929050565b6000602082840312156124b857600080fd5b8135611c6881612351565b600080600080608085870312156124d957600080fd5b84356124e481612351565b935060208501356124f481612351565b93969395505050506040820135916060013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261254957600080fd5b813567ffffffffffffffff8082111561256457612564612509565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156125aa576125aa612509565b816040528381528660208588010111156125c357600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008083601f8401126125f557600080fd5b50813567ffffffffffffffff81111561260d57600080fd5b60208301915083602082850101111561112257600080fd5b60008060008060008060008060e0898b03121561264157600080fd5b883561264c81612351565b9750602089013561265c81612351565b965061266a60408a01612376565b955061267860608a016123ad565b9450608089013567ffffffffffffffff8082111561269557600080fd5b6126a18c838d01612538565b955060a08b01359150808211156126b757600080fd5b6126c38c838d01612538565b945060c08b01359150808211156126d957600080fd5b506126e68b828c016125e3565b999c989b5096995094979396929594505050565b600181811c9082168061270e57607f821691505b60208210811415612748577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156127905761279061274e565b500190565b6000828210156127a7576127a761274e565b500390565b73ffffffffffffffffffffffffffffffffffffffff8716815260ff8616602082015260a0604082015260006127e460a08301876122d3565b82810360608401526127f681876122d3565b905082810360808401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050979650505050505050565b60006020828403121561285e57600080fd5b8151611c6881612351565b60006020828403121561287b57600080fd5b81518015158114611c6857600080fd5b60006fffffffffffffffffffffffffffffffff8083168185168083038211156128b6576128b661274e565b01949350505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156128e8576128e861274e565b039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156129575761295761274e565b500290565b600082612992577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220d1e34ae789102f8cc7a311a2993348bb2eb93dfe4bca819c0253535e9a7eb74b64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x20B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x90F6FCF2 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xC04A8A10 GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xE655DBD8 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xE78C9B3B GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE78C9B3B EQ PUSH2 0x5B5 JUMPI DUP1 PUSH4 0xF3BFC738 EQ PUSH2 0x611 JUMPI DUP1 PUSH4 0xF731E9BE EQ PUSH2 0x638 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x57F JUMPI DUP1 PUSH4 0xE7484890 EQ PUSH2 0x592 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC04A8A10 EQ PUSH2 0x503 JUMPI DUP1 PUSH4 0xC222EC8A EQ PUSH2 0x516 JUMPI DUP1 PUSH4 0xC634DFAA EQ PUSH2 0x529 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x571 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA9059CBB GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x4AD JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x4CB JUMPI DUP1 PUSH4 0xB9A7B622 EQ PUSH2 0x4FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x90F6FCF2 EQ PUSH2 0x463 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x47D JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x485 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6BD76D24 GT PUSH2 0x1A2 JUMPI DUP1 PUSH4 0x78160376 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x36F JUMPI DUP1 PUSH4 0x79774338 EQ PUSH2 0x3AB JUMPI DUP1 PUSH4 0x79CE6B8C EQ PUSH2 0x3DA JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x42D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6BD76D24 EQ PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x2ED JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x300 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x34C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0x1DE JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x27C JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x28A JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x29F JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0xB52D558 EQ PUSH2 0x251 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x266 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x218 PUSH2 0x640 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x225 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x241 PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x2381 JUMP JUMPDEST PUSH2 0x6D2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x264 PUSH2 0x25F CALLDATASIZE PUSH1 0x4 PUSH2 0x23BE JUMP JUMPDEST PUSH2 0x742 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x26E PUSH2 0xA93 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x241 PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x242C JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x26E PUSH2 0xAB9 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x2B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x246D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x2FB CALLDATASIZE PUSH1 0x4 PUSH2 0x24A6 JUMP JUMPDEST PUSH2 0xAF2 JUMP JUMPDEST PUSH2 0x327 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x327 JUMP JUMPDEST PUSH2 0x218 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0xB9E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP4 ADD MSTORE PUSH5 0xFFFFFFFFFF AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x417 PUSH2 0x3E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x24A6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3E PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH5 0xFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH5 0xFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x43B CALLDATASIZE PUSH1 0x4 PUSH2 0x24A6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x26E JUMP JUMPDEST PUSH2 0x218 PUSH2 0xBFA JUMP JUMPDEST PUSH2 0x498 PUSH2 0x493 CALLDATASIZE PUSH1 0x4 PUSH2 0x2381 JUMP JUMPDEST PUSH2 0xC09 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x225 JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x327 JUMP JUMPDEST PUSH2 0x4DE PUSH2 0x4D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x24C3 JUMP JUMPDEST PUSH2 0x1129 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x26E PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH2 0x264 PUSH2 0x511 CALLDATASIZE PUSH1 0x4 PUSH2 0x2381 JUMP JUMPDEST PUSH2 0x15AB JUMP JUMPDEST PUSH2 0x264 PUSH2 0x524 CALLDATASIZE PUSH1 0x4 PUSH2 0x2625 JUMP JUMPDEST PUSH2 0x15BA JUMP JUMPDEST PUSH2 0x26E PUSH2 0x537 CALLDATASIZE PUSH1 0x4 PUSH2 0x24A6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x246D JUMP JUMPDEST PUSH2 0x264 PUSH2 0x58D CALLDATASIZE PUSH1 0x4 PUSH2 0x24A6 JUMP JUMPDEST PUSH2 0x18C7 JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x417 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x5C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x24A6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x26E PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x1AA5 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3B DUP1 SLOAD PUSH2 0x64F SWAP1 PUSH2 0x26FA JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x67B SWAP1 PUSH2 0x26FA JUMP JUMPDEST DUP1 ISZERO PUSH2 0x6C8 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x69D JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6C8 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 0x6AB JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3830000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x739 SWAP2 PUSH1 0x4 ADD PUSH2 0x233E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x7C4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x837 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x867 PUSH2 0xAB9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x91F SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xA4B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP PUSH2 0xA57 DUP3 PUSH1 0x1 PUSH2 0x277D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0xA88 DUP10 DUP10 DUP10 PUSH2 0x1AD0 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0x0 SWAP1 PUSH2 0xAB4 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1B47 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0xAEA JUMPI POP PUSH1 0x35 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xAB4 PUSH2 0x1B96 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND DUP2 PUSH2 0xB51 JUMPI POP PUSH1 0x0 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3E PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xB89 SWAP1 DUP4 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x1C5B JUMP JUMPDEST SWAP1 POP PUSH2 0xB95 DUP4 DUP3 PUSH2 0x1C6F JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xBC5 PUSH1 0x3A SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xBCE DUP3 PUSH2 0x1B47 JUMP JUMPDEST PUSH1 0x3F SLOAD SWAP2 SWAP8 SWAP1 SWAP7 POP SWAP2 SWAP5 POP PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3C DUP1 SLOAD PUSH2 0x64F SWAP1 PUSH2 0x26FA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCB2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH2 0xCBF DUP7 PUSH2 0x1CC6 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP PUSH1 0x0 PUSH2 0xCCE PUSH2 0xA93 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 DUP2 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 DUP5 GT PUSH2 0xD59 JUMPI PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x0 PUSH1 0x3A SSTORE PUSH2 0xE53 JUMP JUMPDEST PUSH2 0xD63 DUP10 DUP6 PUSH2 0x2795 JUMP JUMPDEST PUSH1 0x3A DUP2 SWAP1 SSTORE SWAP2 POP PUSH1 0x0 PUSH2 0xD93 PUSH2 0xD78 DUP7 PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0x1C6F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xDAA PUSH2 0xDA3 DUP13 PUSH2 0x1D4B JUMP JUMPDEST DUP5 SWAP1 PUSH2 0x1C6F JUMP JUMPDEST SWAP1 POP DUP2 DUP2 LT PUSH2 0xDE9 JUMPI PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x0 PUSH1 0x3A DUP2 SWAP1 SSTORE SWAP5 POP PUSH2 0xE50 JUMP JUMPDEST PUSH2 0xE0D PUSH2 0xE08 PUSH2 0xDF8 DUP7 PUSH2 0x1D4B JUMP JUMPDEST PUSH2 0xE02 DUP5 DUP7 PUSH2 0x2795 JUMP JUMPDEST SWAP1 PUSH2 0x1D66 JUMP JUMPDEST PUSH2 0x1DA5 JUMP JUMPDEST PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 DUP3 OR SWAP1 SSTORE SWAP5 POP JUMPDEST POP POP JUMPDEST DUP6 DUP10 EQ ISZERO PUSH2 0xECB JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 SSTORE PUSH1 0x3E SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 AND SWAP1 SSTORE PUSH2 0xF20 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3E PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 AND TIMESTAMP PUSH5 0xFFFFFFFFFF AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE DUP9 DUP6 GT ISZERO PUSH2 0x1049 JUMPI PUSH1 0x0 PUSH2 0xF78 DUP11 DUP8 PUSH2 0x2795 JUMP JUMPDEST SWAP1 POP PUSH2 0xF85 DUP12 DUP3 DUP8 PUSH2 0x1E4B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP10 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 DUP2 SWAP1 PUSH32 0xC16F4E4CA34D790DE4C656C72FD015C667D688F20BE64EEA360618545C4C530F SWAP1 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x1119 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1055 DUP7 DUP12 PUSH2 0x2795 JUMP JUMPDEST SWAP1 POP PUSH2 0x1062 DUP12 DUP3 DUP8 PUSH2 0x1FBC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP10 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 PUSH32 0x44BD20A79E993BDCC7CBEDF54A3B4D19FB78490124B6B90D04FE3242EEA579E8 SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMPDEST POP SWAP6 POP SWAP4 POP POP POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x11EA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP PUSH2 0x1224 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1262 JUMPI PUSH2 0x1262 DUP8 DUP10 DUP9 PUSH2 0x200C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x126E DUP10 PUSH2 0x1CC6 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP PUSH2 0x127B PUSH2 0xA93 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x3F SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x12A3 SWAP1 DUP10 SWAP1 PUSH2 0x277D JUMP JUMPDEST PUSH1 0x3A DUP2 SWAP1 SSTORE PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x12B6 DUP9 PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0x40 DUP5 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x1352 PUSH2 0x1322 PUSH2 0x131D DUP11 DUP6 PUSH2 0x277D JUMP JUMPDEST PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD PUSH2 0x1331 SWAP1 DUP11 PUSH2 0x1C6F JUMP JUMPDEST PUSH2 0x1348 PUSH2 0x133D DUP7 PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0x60 DUP9 ADD MLOAD SWAP1 PUSH2 0x1C6F JUMP JUMPDEST PUSH2 0xE02 SWAP2 SWAP1 PUSH2 0x277D JUMP JUMPDEST PUSH1 0x80 DUP5 ADD DUP2 SWAP1 MSTORE PUSH2 0x1362 SWAP1 PUSH2 0x1DA5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP7 SWAP1 SWAP2 AND DUP7 MUL OR SWAP1 SSTORE PUSH1 0x3E DUP3 MSTORE SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 AND TIMESTAMP PUSH5 0xFFFFFFFFFF AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 SWAP1 SWAP4 MUL OR SWAP1 SWAP2 SSTORE DUP4 ADD MLOAD PUSH2 0x1461 SWAP1 PUSH2 0xE08 SWAP1 PUSH2 0x1436 SWAP1 PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD PUSH2 0x1446 SWAP1 DUP12 SWAP1 PUSH2 0x1C6F JUMP JUMPDEST PUSH2 0x1348 PUSH2 0x1456 DUP9 PUSH1 0x0 ADD MLOAD PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0xA0 DUP10 ADD MLOAD SWAP1 PUSH2 0x1C6F JUMP JUMPDEST PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 DUP3 OR SWAP1 SSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x0 PUSH2 0x14B2 DUP3 DUP11 PUSH2 0x277D JUMP JUMPDEST SWAP1 POP PUSH2 0x14C3 DUP11 DUP3 DUP7 PUSH1 0x0 ADD MLOAD PUSH2 0x1E4B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x80 DUP1 DUP6 ADD MLOAD PUSH1 0xA0 DUP1 DUP8 ADD MLOAD PUSH1 0x20 DUP1 DUP10 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP9 DUP2 MSTORE SWAP3 DUP4 ADD DUP11 SWAP1 MSTORE DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 DUP5 ADD MSTORE DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND SWAP2 SWAP1 DUP14 AND SWAP1 PUSH32 0xC16F4E4CA34D790DE4C656C72FD015C667D688F20BE64EEA360618545C4C530F SWAP1 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0xA0 SWAP1 SWAP3 ADD MLOAD SWAP1 ISZERO SWAP10 SWAP2 SWAP9 POP SWAP7 POP SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x15B6 CALLER DUP4 DUP4 PUSH2 0x1AD0 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x3 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x15CD JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x15D9 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x1665 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x739 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x16A2 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x175F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP PUSH2 0x1769 DUP7 PUSH2 0x20CC JUMP JUMPDEST PUSH2 0x1772 DUP6 PUSH2 0x20DF JUMP JUMPDEST PUSH1 0x3D DUP1 SLOAD PUSH1 0x37 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE DUP11 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH1 0xFF DUP11 AND OR OR SWAP1 SSTORE PUSH2 0x17F7 PUSH2 0x1B96 JUMP JUMPDEST PUSH1 0x35 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x40251FBFB6656CFA65A00D7879029FEC1FAD21D28FDCFF2F4F68F52795B74F2C DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH1 0x40 MLOAD PUSH2 0x1884 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x27AC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0x18BB JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1934 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1958 SWAP2 SWAP1 PUSH2 0x284C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19C5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19E9 SWAP2 SWAP1 PUSH2 0x2869 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1A57 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST POP POP PUSH1 0x3D DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1AC8 DUP2 PUSH2 0x1B47 JUMP JUMPDEST SWAP4 SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP7 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP7 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP1 MLOAD DUP7 DUP2 MSTORE SWAP5 AND SWAP4 SWAP2 SWAP3 SWAP2 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1B53 PUSH1 0x3A SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1B63 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B82 DUP5 PUSH1 0x3F PUSH1 0x10 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x1C5B JUMP JUMPDEST SWAP1 POP PUSH2 0x1B8E DUP3 DUP3 PUSH2 0x1C6F JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x1BC1 PUSH2 0x20F2 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C68 DUP4 DUP4 TIMESTAMP PUSH2 0x20FC JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1CA4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x1D0A DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1D22 JUMPI PUSH1 0x0 DUP1 PUSH1 0x0 SWAP4 POP SWAP4 POP SWAP4 POP POP PUSH2 0x1D44 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D2D DUP7 PUSH2 0xAF2 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 PUSH2 0x1D3B DUP3 DUP3 PUSH2 0x2795 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP POP POP JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH4 0x3B9ACA00 DUP2 DUP2 MUL SWAP1 DUP2 DIV DUP3 EQ PUSH2 0x1D61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1D8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1E47 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x739 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E56 DUP4 PUSH2 0x1DA5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9B DUP3 DUP3 PUSH2 0x288B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV AND ISZERO PUSH2 0x1FB5 JUMPI PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP7 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH2 0x100 SWAP1 SWAP3 DIV SWAP1 SWAP2 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1FA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA88 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1FC7 DUP4 PUSH2 0x1DA5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9B DUP3 DUP3 PUSH2 0x28BF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x204C SWAP1 DUP4 SWAP1 PUSH2 0x2795 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP7 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP2 MLOAD SWAP5 SWAP6 POP SWAP3 AND SWAP3 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP1 PUSH2 0x20BE SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x15B6 SWAP1 PUSH1 0x3B SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2243 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x15B6 SWAP1 PUSH1 0x3C SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2243 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xAB4 PUSH2 0x640 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2110 PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x2795 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x212C JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x1C68 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x2162 JUMPI PUSH1 0x0 PUSH2 0x2167 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x217B DUP11 DUP1 PUSH2 0x1C6F JUMP JUMPDEST DUP2 PUSH2 0x2188 JUMPI PUSH2 0x2188 PUSH2 0x28F0 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x219A DUP4 DUP12 PUSH2 0x1C6F JUMP JUMPDEST DUP2 PUSH2 0x21A7 JUMPI PUSH2 0x21A7 PUSH2 0x28F0 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x21B7 DUP7 DUP9 PUSH2 0x291F JUMP JUMPDEST PUSH2 0x21C1 SWAP2 SWAP1 PUSH2 0x291F JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x21D5 DUP9 DUP11 PUSH2 0x291F JUMP JUMPDEST PUSH2 0x21DF SWAP2 SWAP1 PUSH2 0x291F JUMP JUMPDEST PUSH2 0x21E9 SWAP2 SWAP1 PUSH2 0x291F JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x2200 DUP11 DUP16 PUSH2 0x291F JUMP JUMPDEST PUSH2 0x220A SWAP2 SWAP1 PUSH2 0x295C JUMP JUMPDEST PUSH2 0x2220 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x277D JUMP JUMPDEST PUSH2 0x222A SWAP2 SWAP1 PUSH2 0x277D JUMP JUMPDEST PUSH2 0x2234 SWAP2 SWAP1 PUSH2 0x277D JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x224F SWAP1 PUSH2 0x26FA JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x2271 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x22B7 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x228A JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x22B7 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x22B7 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x22B7 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x229C JUMP JUMPDEST POP PUSH2 0x1E47 SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1E47 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x22BF JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x22F9 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x22DD JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x230B JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1C68 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x22D3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2373 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1D61 DUP2 PUSH2 0x2351 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2394 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x239F DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1D61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x23D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x23E4 DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x23F4 DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x2410 PUSH1 0x80 DUP10 ADD PUSH2 0x23AD JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2441 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x244C DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x245C DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2480 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x248B DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x249B DUP2 PUSH2 0x2351 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x24B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1C68 DUP2 PUSH2 0x2351 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x24D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x24E4 DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x24F4 DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2549 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2564 JUMPI PUSH2 0x2564 PUSH2 0x2509 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x25AA JUMPI PUSH2 0x25AA PUSH2 0x2509 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x25C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x25F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x260D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x1122 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xE0 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x2641 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x264C DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x265C DUP2 PUSH2 0x2351 JUMP JUMPDEST SWAP7 POP PUSH2 0x266A PUSH1 0x40 DUP11 ADD PUSH2 0x2376 JUMP JUMPDEST SWAP6 POP PUSH2 0x2678 PUSH1 0x60 DUP11 ADD PUSH2 0x23AD JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2695 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26A1 DUP13 DUP4 DUP14 ADD PUSH2 0x2538 JUMP JUMPDEST SWAP6 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26C3 DUP13 DUP4 DUP14 ADD PUSH2 0x2538 JUMP JUMPDEST SWAP5 POP PUSH1 0xC0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26E6 DUP12 DUP3 DUP13 ADD PUSH2 0x25E3 JUMP JUMPDEST SWAP10 SWAP13 SWAP9 SWAP12 POP SWAP7 SWAP10 POP SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x270E JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x2748 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x2790 JUMPI PUSH2 0x2790 PUSH2 0x274E JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x27A7 JUMPI PUSH2 0x27A7 PUSH2 0x274E JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP2 MSTORE PUSH1 0xFF DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x27E4 PUSH1 0xA0 DUP4 ADD DUP8 PUSH2 0x22D3 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x27F6 DUP2 DUP8 PUSH2 0x22D3 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE DUP4 DUP2 MSTORE DUP4 DUP6 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND DUP3 ADD ADD SWAP2 POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x285E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C68 DUP2 PUSH2 0x2351 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x287B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1C68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x28B6 JUMPI PUSH2 0x28B6 PUSH2 0x274E JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x28E8 JUMPI PUSH2 0x28E8 PUSH2 0x274E JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2957 JUMPI PUSH2 0x2957 PUSH2 0x274E JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2992 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD1 0xE3 0x4A 0xE7 DUP10 LT 0x2F DUP13 0xC7 LOG3 GT LOG2 SWAP10 CALLER BASEFEE 0xBB 0x2E 0xB9 RETURNDATASIZE INVALID 0x4B 0xCA DUP2 SWAP13 MUL MSTORE8 MSTORE8 0x5E SWAP11 PUSH31 0xB74B64736F6C634300080A0033000000000000000000000000000000000000 ","sourceMap":"194:191:64:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84:103;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12646:125:99;;;;;;:::i;:::-;;:::i;:::-;;;1558:14:201;;1551:22;1533:41;;1521:2;1506:18;12646:125:99;1393:187:201;1424:823:101;;;;;;:::i;:::-;;:::i;:::-;;9656:120:99;;;:::i;:::-;;;2631:25:201;;;2619:2;2604:18;9656:120:99;2485:177:201;12775:139:99;;;;;;:::i;3178:86:103:-;3250:9;;3178:86;;3250:9;;;;3270:36:201;;3258:2;3243:18;3178:86:103;3128:184:201;867:185:102;;;:::i;2292:165:101:-;;;;;;:::i;:::-;2417:27;;;;2395:7;2417:27;;;:17;:27;;;;;;;;:35;;;;;;;;;;;;;2292:165;3477:433:99;;;;;;:::i;:::-;;:::i;2408:27:103:-;;;;;;;;4334:42:201;4322:55;;;4304:74;;4292:2;4277:18;2408:27:103;4144:240:201;3691:132:103;3797:21;;;;;;;3691:132;;192:50:102;;232:10;;;;;;;;;;;;;;;;;192:50;;9182:228:99;;;:::i;:::-;;;;5106:25:201;;;5162:2;5147:18;;5140:34;;;;5190:18;;;5183:34;5265:12;5253:25;5248:2;5233:18;;5226:53;5093:3;5078:19;9182:228:99;4877:408:201;3145:125:99;;;;;;:::i;:::-;3248:17;;3227:6;3248:17;;;:11;:17;;;;;;;;;3145:125;;;;5464:12:201;5452:25;;;5434:44;;5422:2;5407:18;3145:125:99;5290:194:201;1260:101:102;;;;;;:::i;:::-;1342:14;;1320:7;1342:14;;;:7;:14;;;;;;;1260:101;2993:113:99;3087:14;;;;2993:113;;3051:90:103;;;:::i;5927:2487:99:-;;;;;;:::i;:::-;;:::i;:::-;;;;5663:25:201;;;5719:2;5704:18;;5697:34;;;;5636:18;5927:2487:99;5489:248:201;10139:111:99;10229:16;;;;10139:111;;4149:1739;;;;;;:::i;:::-;;:::i;:::-;;;;6724:14:201;;6717:22;6699:41;;6771:2;6756:18;;6749:34;;;;6799:18;;;6792:34;6687:2;6672:18;4149:1739:99;6503:329:201;1362:49:99;;1408:3;1362:49;;1237:142:101;;;;;;:::i;:::-;;:::i;1997:803:99:-;;;;;;:::i;:::-;;:::i;9970:130::-;;;;;;:::i;:::-;3518:19:103;;10052:7:99;3518:19:103;;;:10;:19;;;;;:27;;;;9970:130:99;12507:135;;;;;;:::i;3938:139:103:-;;;;;;:::i;:::-;;:::i;9815:116:99:-;9905:21;;;;;;;9815:116;;3309:139;;;;;;:::i;:::-;3412:16;;3390:7;3412:16;;;:10;:16;;;;;:31;;;;;;;3309:139;897:153:101;;956:94;897:153;;9449:178:99;;;:::i;2930:84:103:-;2976:13;3004:5;2997:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84;:::o;12646:125:99:-;12735:30;;;;;;;;;;;;;;;;12728:38;;;;;12716:4;;12728:38;;;;;:::i;:::-;;;;;;;;1424:823:101;1633:29;;;;;;;;;;;;;;;;;1608:23;;;1600:63;;;;;;;;;;;;;:::i;:::-;;1727:8;1708:15;:27;;1737:25;;;;;;;;;;;;;;;;;1700:63;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1797:18:101;;;1769:25;1797:18;;;:7;:18;;;;;;;1901;:16;:18::i;:::-;1950:87;;;956:94;1950:87;;;10455:25:201;10528:42;10516:55;;10496:18;;;10489:83;;;;10588:18;;;10581:34;;;10631:18;;;10624:34;;;10674:19;;;10667:35;;;10427:19;;1950:87:101;;;;;;;;;;;;1929:118;;;;;;1855:200;;;;;;;;10983:66:201;10971:79;;11075:1;11066:11;;11059:27;;;;11111:2;11102:12;;11095:28;11148:2;11139:12;;10713:444;1855:200:101;;;;;;;;;;;;;;1838:223;;1855:200;1838:223;;;;2088:26;;;;;;;;;11389:25:201;;;11462:4;11450:17;;11430:18;;;11423:45;;;;11484:18;;;11477:34;;;11527:18;;;11520:34;;;1838:223:101;-1:-1:-1;2088:26:101;;11361:19:201;;2088:26:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2075:39;;:9;:39;;;2116:24;;;;;;;;;;;;;;;;;2067:74;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2168:21:101;:17;2188:1;2168:21;:::i;:::-;2147:18;;;;;;;:7;:18;;;;;:42;2195:47;2155:9;2225;2236:5;2195:18;:47::i;:::-;1594:653;;1424:823;;;;;;;:::o;9656:120:99:-;9756:14;;9717:7;;9739:32;;9756:14;;9739:16;:32::i;:::-;9732:39;;9656:120;:::o;867:185:102:-;924:7;960:8;943:13;:25;939:69;;;-1:-1:-1;985:16:102;;;867:185::o;939:69::-;1020:27;:25;:27::i;3477:433:99:-;3518:19:103;;;3551:7:99;3518:19:103;;;:10;:19;;;;;:27;;;;;;3642:34:99;;;;3518:27:103;3682:48:99;;-1:-1:-1;3722:1:99;;3477:433;-1:-1:-1;;;3477:433:99:o;3682:48::-;3826:20;;;3735:25;3826:20;;;:11;:20;;;;;;3763:89;;3808:10;;3826:20;;3763:37;:89::i;:::-;3735:117;-1:-1:-1;3865:40:99;:14;3735:117;3865:21;:40::i;:::-;3858:47;3477:433;-1:-1:-1;;;;;3477:433:99:o;9182:228::-;9298:14;;9239:7;;;;;;;;9298:14;;9326:19;3376:12:103;;;3293:100;9326:19:99;9347:25;9364:7;9347:16;:25::i;:::-;9383:21;;9318:87;;;;-1:-1:-1;9374:7:99;;-1:-1:-1;9383:21:99;;;;;;-1:-1:-1;9182:228:99;-1:-1:-1;9182:228:99:o;3051:90:103:-;3101:13;3129:7;3122:14;;;;;:::i;5927:2487:99:-;1519:26:103;;;;;;;;;;;;;;;;;6027:7:99;;;;678:10:4;1512:4:103;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;6054:22:99::1;6078:23:::0;6105:31:::1;6131:4;6105:25;:31::i;:::-;6051:85;;;;;6143:22;6168:13;:11;:13::i;:::-;6275:16;::::0;::::1;6187:25;6275:16:::0;;;:10:::1;:16;::::0;;;;:31;6143:38;;-1:-1:-1;6187:25:99;;;6275:31;;::::1;;;6621:24:::0;;::::1;6617:786;;6655:14;:18:::0;;;::::1;::::0;;6672:1:::1;6681:12;:16:::0;6617:786:::1;;;6746:23;6763:6:::0;6746:14;:23:::1;:::i;:::-;6731:12;:38;;;6718:51;;6777:17;6797:57;6828:25;:14;:23;:25::i;:::-;6805:14;::::0;::::1;;::::0;6797:30:::1;:57::i;:::-;6777:77;;6862:18;6883:40;6905:17;:6;:15;:17::i;:::-;6883:14:::0;;:21:::1;:40::i;:::-;6862:61;;7164:9;7150:10;:23;7146:251;;7220:14;:18:::0;;;::::1;::::0;;7237:1:::1;7205:12;:33:::0;;;7237:1;-1:-1:-1;7146:251:99::1;;;7300:88;7312:54;7344:21;:10;:19;:21::i;:::-;7313:22;7325:10:::0;7313:9;:22:::1;:::i;:::-;7312:31:::0;::::1;:54::i;:::-;7300:86;:88::i;:::-;7283:14;:105:::0;;;::::1;;::::0;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;7146:251:99::1;6710:693;;6617:786;7423:14;7413:6;:24;7409:206;;;7447:16;::::0;::::1;7481:1;7447:16:::0;;;:10:::1;:16;::::0;;;;;;;:35;;::::1;;::::0;;7490:11:::1;:17:::0;;;;;:21;;;::::1;::::0;;7409:206:::1;;;7565:17;::::0;::::1;;::::0;;;:11:::1;:17;::::0;;;;:43;;;::::1;7592:15;7565:43;;;::::0;;7409:206:::1;7651:21;:47:::0;;;::::1;::::0;7682:15:::1;7651:47;;;;::::0;;7709:24;;::::1;7705:660;;;7743:20;7766:24;7784:6:::0;7766:15;:24:::1;:::i;:::-;7743:47;;7798:41;7804:4;7810:12;7824:14;7798:5;:41::i;:::-;7852:40;::::0;2631:25:201;;;7852:40:99::1;::::0;::::1;::::0;7869:1:::1;::::0;7852:40:::1;::::0;2619:2:201;2604:18;7852:40:99::1;;;;;;;7905:182;::::0;;12304:25:201;;;12360:2;12345:18;;12338:34;;;12388:18;;;12381:34;;;12446:2;12431:18;;12424:34;;;12489:3;12474:19;;12467:35;;;12533:3;12518:19;;12511:35;;;7905:182:99::1;::::0;::::1;::::0;;;::::1;::::0;12291:3:201;12276:19;7905:182:99::1;;;;;;;7735:359;7705:660;;;8108:20;8131:24;8140:15:::0;8131:6;:24:::1;:::i;:::-;8108:47;;8163:41;8169:4;8175:12;8189:14;8163:5;:41::i;:::-;8217:40;::::0;2631:25:201;;;8240:1:99::1;::::0;8217:40:::1;::::0;::::1;::::0;::::1;::::0;2619:2:201;2604:18;8217:40:99::1;;;;;;;8270:88;::::0;;12816:25:201;;;12872:2;12857:18;;12850:34;;;12900:18;;;12893:34;;;12958:2;12943:18;;12936:34;;;13001:3;12986:19;;12979:35;;;8270:88:99::1;::::0;::::1;::::0;::::1;::::0;12803:3:201;12788:19;8270:88:99::1;;;;;;;8100:265;7705:660;-1:-1:-1::0;8379:10:99;-1:-1:-1;8391:17:99;-1:-1:-1;;;;1552:1:103::1;5927:2487:99::0;;;;;:::o;4149:1739::-;4291:4;;;1488:29:103;1512:4;1488:29;678:10:4;1488:29:103;;;1519:26;;;;;;;;;;;;;;;;;1480:66;;;;;;;;;;;;;;:::i;:::-;;4321:25:99::1;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4321:25:99::1;4365:10;4357:18;;:4;:18;;;4353:89;;4385:50;4410:10;4422:4;4428:6;4385:24;:50::i;:::-;4451:22;4475:23:::0;4502:37:::1;4528:10;4502:25;:37::i;:::-;4448:91;;;;;4568:13;:11;:13::i;:::-;4546:35:::0;;;4615:14:::1;::::0;::::1;;4587:25;::::0;::::1;:42:::0;4668:28:::1;::::0;4690:6;;4668:28:::1;:::i;:::-;4653:12;:43:::0;;;4635:15:::1;::::0;::::1;:61:::0;4722:17:::1;:6:::0;:15:::1;:17::i;:::-;4703:16;::::0;;::::1;:36:::0;;;;4771:22:::1;::::0;::::1;;::::0;;;:10:::1;:22;::::0;;:37;;;::::1;;;4746:22;::::0;::::1;:62:::0;4836:141:::1;4940:36;4941:23;4958:6:::0;4941:14;:23:::1;:::i;:::-;4940:34;:36::i;:::-;4902:16;::::0;::::1;::::0;:29:::1;::::0;4926:4;4902:23:::1;:29::i;:::-;4837:56;4867:25;:14;:23;:25::i;:::-;4837:22;::::0;::::1;::::0;;:29:::1;:56::i;:::-;:94;;;;:::i;4836:141::-;4814:19;::::0;::::1;:163:::0;;;5024:31:::1;::::0;:29:::1;:31::i;:::-;4984:22;::::0;::::1;;::::0;;;:10:::1;:22;::::0;;;;;;;:71;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;;5117:11:::1;:23:::0;;;;;:49;;;::::1;5150:15;5117:49;;::::0;;::::1;::::0;;;5093:21:::1;:73:::0;;;::::1;::::0;;;::::1;;::::0;;;5390:15;::::1;::::0;5268:167:::1;::::0;5276:141:::1;::::0;5390:26:::1;::::0;:24:::1;:26::i;:::-;5364:16;::::0;::::1;::::0;5352:29:::1;::::0;:4;;:11:::1;:29::i;:::-;5277:64;5310:30;:4;:19;;;:28;:30::i;:::-;5277:25;::::0;::::1;::::0;;:32:::1;:64::i;5268:167::-;5251:14;:184:::0;;;::::1;;::::0;;;::::1;::::0;;::::1;::::0;;5223:25:::1;::::0;::::1;:212:::0;-1:-1:-1;5465:24:99::1;5474:15:::0;5465:6;:24:::1;:::i;:::-;5442:47;;5495:52;5501:10;5513:12;5527:4;:19;;;5495:5;:52::i;:::-;5559:46;::::0;2631:25:201;;;5559:46:99::1;::::0;::::1;::::0;5576:1:::1;::::0;5559:46:::1;::::0;2619:2:201;2604:18;5559:46:99::1;;;;;;;5723:19;::::0;;::::1;::::0;5750:25:::1;::::0;;::::1;::::0;5783:15:::1;::::0;;::::1;::::0;5616:188:::1;::::0;;12304:25:201;;;12345:18;;;12338:34;;;12388:18;;12381:34;;;12446:2;12431:18;;12424:34;;;;12474:19;;;12467:35;12518:19;;12511:35;5616:188:99::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;12291:3:201;12276:19;5616:188:99::1;;;;;;;-1:-1:-1::0;;5840:15:99::1;::::0;::::1;::::0;5857:25:::1;::::0;;::::1;::::0;5819:19;;;5840:15;;-1:-1:-1;5857:25:99;-1:-1:-1;4149:1739:99;-1:-1:-1;;;;;4149:1739:99:o;1237:142:101:-;1323:51;678:10:4;1356:9:101;1367:6;1323:18;:51::i;:::-;1237:142;;:::o;1997:803:99:-;1217:12:71;;375:3:64;;1217:12:71;;;:31;;-1:-1:-1;2436:9:71;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;13227:2:201;1202:146:71;;;13209:21:201;13266:2;13246:18;;;13239:30;13305:34;13285:18;;;13278:62;13376:16;13356:18;;;13349:44;13410:19;;1202:146:71;13025:410:201;1202:146:71;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;2318:4:99::1;2298:24;;:16;:24;;;2324:34;;;;;;;;;;;;;;;;::::0;2290:69:::1;;;;;;;;;;;;;;:::i;:::-;;2365:23;2374:13;2365:8;:23::i;:::-;2394:27;2405:15;2394:10;:27::i;:::-;7979:9:103::0;:23;;2465:16:99::1;:34:::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;2505:44;::::1;2465:34;2505:44;::::0;;;;7979:23:103;;;2505:44:99;::::1;::::0;;2575:27:::1;:25;:27::i;:::-;2556:16;:46;;;;2664:4;2614:181;;2633:15;2614:181;;;2685:20;2714:17;2739:13;2760:15;2783:6;;2614:181;;;;;;;;;;;:::i;:::-;;;;;;;;1510:14:71::0;1506:55;;;1534:12;:20;;;;;;1506:55;1158:407;;1997:803:99;;;;;;;;:::o;3938:139:103:-;1211:22;1248:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1297;;;;;1320:10;1297:34;;;4304:74:201;1211:72:103;;-1:-1:-1;1297:22:103;;;;;;4277:18:201;;1297:34:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1333:28;;;;;;;;;;;;;;;;;1289:73;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;4038:21:103::1;:34:::0;;::::1;::::0;;::::1;;;::::0;;;::::1;::::0;;;::::1;::::0;;3938:139::o;9449:178:99:-;9559:14;;9517:7;;;;9559:14;;9587:25;9559:14;9587:16;:25::i;:::-;9579:43;9614:7;;-1:-1:-1;9449:178:99;-1:-1:-1;9449:178:99:o;2749:233:101:-;2846:28;;;;;;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;;:48;;;2952:16;;2905:72;;2631:25:201;;;2952:16:101;;;2846:39;;:28;2905:72;;2604:18:201;2905:72:101;;;;;;;2749:233;;;:::o;10454:363:99:-;10520:7;10535:23;10561:19;3376:12:103;;;3293:100;10561:19:99;10535:45;-1:-1:-1;10591:20:99;10587:49;;-1:-1:-1;10628:1:99;;10454:363;-1:-1:-1;;10454:363:99:o;10587:49::-;10642:25;10670:87;10715:7;10730:21;;;;;;;;;;;10670:37;:87::i;:::-;10642:115;-1:-1:-1;10771:41:99;:15;10642:115;10771:22;:41::i;:::-;10764:48;10454:363;-1:-1:-1;;;;10454:363:99:o;1475:298:102:-;1535:7;292:95;1645:15;:13;:15::i;:::-;1629:33;;;;;;;232:10;;;;;;;;;;;;;;;;1582:178;;;;;15207:25:201;;;;15248:18;;;15241:34;;;;1674:26:102;15291:18:201;;;15284:34;1712:13:102;15334:18:201;;;15327:34;1745:4:102;15377:19:201;;;15370:84;15179:19;;1582:178:102;;;;;;;;;;;;1563:205;;;;;;1550:218;;1475:298;:::o;3142:212:88:-;3256:7;3278:71;3306:4;3312:19;3333:15;3278:27;:71::i;:::-;3271:78;3142:212;-1:-1:-1;;;3142:212:88:o;2253:319:90:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:90;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;8712:431:99:-;8792:7;8801;8810;8825:32;8860:21;8876:4;3518:19:103;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;8860:21:99;8825:56;-1:-1:-1;8892:29:99;8888:66;;8939:1;8942;8945;8931:16;;;;;;;;;8888:66;8960:27;8990:15;9000:4;8990:9;:15::i;:::-;8960:45;-1:-1:-1;9027:24:99;8960:45;9086:46;9027:24;8960:45;9086:46;:::i;:::-;9012:126;;;;;;;;8712:431;;;;;;:::o;3901:247:90:-;4046:13;4039:21;;;;4081;;4078:28;;4068:70;;4128:1;4125;4118:12;4068:70;3901:247;;;:::o;2840:322::-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:90;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;15667:2:201;1635:78:12;;;15649:21:201;15706:2;15686:18;;;15679:30;15745:34;15725:18;;;15718:62;15816:9;15796:18;;;15789:37;15843:19;;1635:78:12;15465:403:201;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;11051:407:99:-;11138:18;11159;:6;:16;:18::i;:::-;11211:19;;;11183:25;11211:19;;;:10;:19;;;;;:27;11138:39;;-1:-1:-1;11211:27:99;;11274:30;11138:39;11211:27;11274:30;:::i;:::-;11244:19;;;;;;;;:10;:19;;;;;:60;;;;;;;;;;;;;;;;11323:21;;11244:60;11323:21;;;11315:44;11311:143;;11369:21;;:78;;;;;:21;16351:55:201;;;11369:78:99;;;16333:74:201;16423:18;;;16416:34;;;16498;16486:47;;16466:18;;;16459:75;11369:21:99;;;;;;;;:34;;16306:18:201;;11369:78:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11311:143;11132:326;;11051:407;;;:::o;11687:::-;11774:18;11795;:6;:16;:18::i;:::-;11847:19;;;11819:25;11847:19;;;:10;:19;;;;;:27;11774:39;;-1:-1:-1;11847:27:99;;11910:30;11774:39;11847:27;11910:30;:::i;3288:330:101:-;3414:28;;;;3391:20;3414:28;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;:48;;3456:6;;3414:48;:::i;:::-;3469:28;;;;;;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;:54;;;3582:16;;3535:78;;3391:71;;-1:-1:-1;3582:16:101;;;3535:78;;;;3391:71;2631:25:201;;2619:2;2604:18;;2485:177;3535:78:101;;;;;;;;3385:233;3288:330;;;:::o;7513:76:103:-;7569:15;;;;:5;;:15;;;;;:::i;7701:84::-;7761:19;;;;:7;;:19;;;;;:::i;12127:96:99:-;12184:13;12212:6;:4;:6::i;1780:972:88:-;1924:7;;1984:47;2003:28;;;1984:16;:47;:::i;:::-;1970:61;-1:-1:-1;2042:8:88;2038:50;;704:4:90;2060:21:88;;;;;2038:50;2230:7;;;2094:19;;;2266:1;2260:7;;:21;;2280:1;2260:21;;;2276:1;2270:3;:7;2260:21;2246:35;-1:-1:-1;2326:35:88;2305:17;2317:4;;2305:11;:17::i;:::-;:57;;;;;:::i;:::-;;;-1:-1:-1;376:8:88;2387:25;2305:57;2407:4;2387:19;:25::i;:::-;:44;;;;;:::i;:::-;;;-1:-1:-1;2444:18:88;2485:12;2465:17;2471:11;2465:3;:17;:::i;:::-;:32;;;;:::i;:::-;2535:1;2521:15;;;-1:-1:-1;2548:17:88;2602:14;2588:11;2568:17;2574:11;2568:3;:17;:::i;:::-;:31;;;;:::i;:::-;:48;;;;:::i;:::-;2653:1;2640:14;;;-1:-1:-1;2640:14:88;2725:10;376:8;2692:10;2699:3;2692:4;:10;:::i;:::-;2691:31;;;;:::i;:::-;2674:48;;704:4:90;2674:48:88;:::i;:::-;:61;;;;:::i;:::-;:73;;;;:::i;:::-;2667:80;1780:972;-1:-1:-1;;;;;;;;;;;1780:972:88:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:531:201;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;336:6;333:1;330:13;327:87;;;402:1;395:4;386:6;381:3;377:16;373:27;366:38;327:87;-1:-1:-1;459:2:201;447:15;464:66;443:88;434:98;;;;534:4;430:109;;14:531;-1:-1:-1;;14:531:201:o;550:220::-;699:2;688:9;681:21;662:4;719:45;760:2;749:9;745:18;737:6;719:45;:::i;775:154::-;861:42;854:5;850:54;843:5;840:65;830:93;;919:1;916;909:12;830:93;775:154;:::o;934:134::-;1002:20;;1031:31;1002:20;1031:31;:::i;1073:315::-;1141:6;1149;1202:2;1190:9;1181:7;1177:23;1173:32;1170:52;;;1218:1;1215;1208:12;1170:52;1257:9;1244:23;1276:31;1301:5;1276:31;:::i;:::-;1326:5;1378:2;1363:18;;;;1350:32;;-1:-1:-1;;;1073:315:201:o;1585:156::-;1651:20;;1711:4;1700:16;;1690:27;;1680:55;;1731:1;1728;1721:12;1746:734;1857:6;1865;1873;1881;1889;1897;1905;1958:3;1946:9;1937:7;1933:23;1929:33;1926:53;;;1975:1;1972;1965:12;1926:53;2014:9;2001:23;2033:31;2058:5;2033:31;:::i;:::-;2083:5;-1:-1:-1;2140:2:201;2125:18;;2112:32;2153:33;2112:32;2153:33;:::i;:::-;2205:7;-1:-1:-1;2259:2:201;2244:18;;2231:32;;-1:-1:-1;2310:2:201;2295:18;;2282:32;;-1:-1:-1;2333:37:201;2365:3;2350:19;;2333:37;:::i;:::-;2323:47;;2417:3;2406:9;2402:19;2389:33;2379:43;;2469:3;2458:9;2454:19;2441:33;2431:43;;1746:734;;;;;;;;;;:::o;2667:456::-;2744:6;2752;2760;2813:2;2801:9;2792:7;2788:23;2784:32;2781:52;;;2829:1;2826;2819:12;2781:52;2868:9;2855:23;2887:31;2912:5;2887:31;:::i;:::-;2937:5;-1:-1:-1;2994:2:201;2979:18;;2966:32;3007:33;2966:32;3007:33;:::i;:::-;2667:456;;3059:7;;-1:-1:-1;;;3113:2:201;3098:18;;;;3085:32;;2667:456::o;3499:388::-;3567:6;3575;3628:2;3616:9;3607:7;3603:23;3599:32;3596:52;;;3644:1;3641;3634:12;3596:52;3683:9;3670:23;3702:31;3727:5;3702:31;:::i;:::-;3752:5;-1:-1:-1;3809:2:201;3794:18;;3781:32;3822:33;3781:32;3822:33;:::i;:::-;3874:7;3864:17;;;3499:388;;;;;:::o;3892:247::-;3951:6;4004:2;3992:9;3983:7;3979:23;3975:32;3972:52;;;4020:1;4017;4010:12;3972:52;4059:9;4046:23;4078:31;4103:5;4078:31;:::i;5973:525::-;6059:6;6067;6075;6083;6136:3;6124:9;6115:7;6111:23;6107:33;6104:53;;;6153:1;6150;6143:12;6104:53;6192:9;6179:23;6211:31;6236:5;6211:31;:::i;:::-;6261:5;-1:-1:-1;6318:2:201;6303:18;;6290:32;6331:33;6290:32;6331:33;:::i;:::-;5973:525;;6383:7;;-1:-1:-1;;;;6437:2:201;6422:18;;6409:32;;6488:2;6473:18;6460:32;;5973:525::o;6837:184::-;6889:77;6886:1;6879:88;6986:4;6983:1;6976:15;7010:4;7007:1;7000:15;7026:778;7069:5;7122:3;7115:4;7107:6;7103:17;7099:27;7089:55;;7140:1;7137;7130:12;7089:55;7176:6;7163:20;7202:18;7239:2;7235;7232:10;7229:36;;;7245:18;;:::i;:::-;7379:2;7373:9;7441:4;7433:13;;7284:66;7429:22;;;7453:2;7425:31;7421:40;7409:53;;;7477:18;;;7497:22;;;7474:46;7471:72;;;7523:18;;:::i;:::-;7563:10;7559:2;7552:22;7598:2;7590:6;7583:18;7644:3;7637:4;7632:2;7624:6;7620:15;7616:26;7613:35;7610:55;;;7661:1;7658;7651:12;7610:55;7725:2;7718:4;7710:6;7706:17;7699:4;7691:6;7687:17;7674:54;7772:1;7765:4;7760:2;7752:6;7748:15;7744:26;7737:37;7792:6;7783:15;;;;;;7026:778;;;;:::o;7809:347::-;7860:8;7870:6;7924:3;7917:4;7909:6;7905:17;7901:27;7891:55;;7942:1;7939;7932:12;7891:55;-1:-1:-1;7965:20:201;;8008:18;7997:30;;7994:50;;;8040:1;8037;8030:12;7994:50;8077:4;8069:6;8065:17;8053:29;;8129:3;8122:4;8113:6;8105;8101:19;8097:30;8094:39;8091:59;;;8146:1;8143;8136:12;8161:1302;8351:6;8359;8367;8375;8383;8391;8399;8407;8460:3;8448:9;8439:7;8435:23;8431:33;8428:53;;;8477:1;8474;8467:12;8428:53;8516:9;8503:23;8535:31;8560:5;8535:31;:::i;:::-;8585:5;-1:-1:-1;8642:2:201;8627:18;;8614:32;8655:33;8614:32;8655:33;:::i;:::-;8707:7;-1:-1:-1;8733:38:201;8767:2;8752:18;;8733:38;:::i;:::-;8723:48;;8790:36;8822:2;8811:9;8807:18;8790:36;:::i;:::-;8780:46;;8877:3;8866:9;8862:19;8849:33;8901:18;8942:2;8934:6;8931:14;8928:34;;;8958:1;8955;8948:12;8928:34;8981:50;9023:7;9014:6;9003:9;8999:22;8981:50;:::i;:::-;8971:60;;9084:3;9073:9;9069:19;9056:33;9040:49;;9114:2;9104:8;9101:16;9098:36;;;9130:1;9127;9120:12;9098:36;9153:52;9197:7;9186:8;9175:9;9171:24;9153:52;:::i;:::-;9143:62;;9258:3;9247:9;9243:19;9230:33;9214:49;;9288:2;9278:8;9275:16;9272:36;;;9304:1;9301;9294:12;9272:36;;9343:60;9395:7;9384:8;9373:9;9369:24;9343:60;:::i;:::-;8161:1302;;;;-1:-1:-1;8161:1302:201;;-1:-1:-1;8161:1302:201;;;;;;9422:8;-1:-1:-1;;;8161:1302:201:o;9754:437::-;9833:1;9829:12;;;;9876;;;9897:61;;9951:4;9943:6;9939:17;9929:27;;9897:61;10004:2;9996:6;9993:14;9973:18;9970:38;9967:218;;;10041:77;10038:1;10031:88;10142:4;10139:1;10132:15;10170:4;10167:1;10160:15;9967:218;;9754:437;;;:::o;11565:184::-;11617:77;11614:1;11607:88;11714:4;11711:1;11704:15;11738:4;11735:1;11728:15;11754:128;11794:3;11825:1;11821:6;11818:1;11815:13;11812:39;;;11831:18;;:::i;:::-;-1:-1:-1;11867:9:201;;11754:128::o;11887:125::-;11927:4;11955:1;11952;11949:8;11946:34;;;11960:18;;:::i;:::-;-1:-1:-1;11997:9:201;;11887:125::o;13440:965::-;13757:42;13749:6;13745:55;13734:9;13727:74;13849:4;13841:6;13837:17;13832:2;13821:9;13817:18;13810:45;13891:3;13886:2;13875:9;13871:18;13864:31;13708:4;13918:46;13959:3;13948:9;13944:19;13936:6;13918:46;:::i;:::-;14012:9;14004:6;14000:22;13995:2;13984:9;13980:18;13973:50;14046:33;14072:6;14064;14046:33;:::i;:::-;14032:47;;14128:9;14120:6;14116:22;14110:3;14099:9;14095:19;14088:51;14163:6;14155;14148:22;14217:6;14209;14204:2;14196:6;14192:15;14179:45;14270:1;14265:2;14256:6;14248;14244:19;14240:28;14233:39;14396:2;14326:66;14321:2;14313:6;14309:15;14305:88;14297:6;14293:101;14289:110;14281:118;;;13440:965;;;;;;;;;:::o;14410:251::-;14480:6;14533:2;14521:9;14512:7;14508:23;14504:32;14501:52;;;14549:1;14546;14539:12;14501:52;14581:9;14575:16;14600:31;14625:5;14600:31;:::i;14666:277::-;14733:6;14786:2;14774:9;14765:7;14761:23;14757:32;14754:52;;;14802:1;14799;14792:12;14754:52;14834:9;14828:16;14887:5;14880:13;14873:21;14866:5;14863:32;14853:60;;14909:1;14906;14899:12;15873:253;15913:3;15941:34;16002:2;15999:1;15995:10;16032:2;16029:1;16025:10;16063:3;16059:2;16055:12;16050:3;16047:21;16044:47;;;16071:18;;:::i;:::-;16107:13;;15873:253;-1:-1:-1;;;;15873:253:201:o;16545:246::-;16585:4;16614:34;16698:10;;;;16668;;16720:12;;;16717:38;;;16735:18;;:::i;:::-;16772:13;;16545:246;-1:-1:-1;;;16545:246:201:o;16796:184::-;16848:77;16845:1;16838:88;16945:4;16942:1;16935:15;16969:4;16966:1;16959:15;16985:228;17025:7;17151:1;17083:66;17079:74;17076:1;17073:81;17068:1;17061:9;17054:17;17050:105;17047:131;;;17158:18;;:::i;:::-;-1:-1:-1;17198:9:201;;16985:228::o;17218:274::-;17258:1;17284;17274:189;;17319:77;17316:1;17309:88;17420:4;17417:1;17410:15;17448:4;17445:1;17438:15;17274:189;-1:-1:-1;17477:9:201;;17218:274::o"},"gasEstimates":{"creation":{"codeDepositCost":"2140200","executionCost":"infinite","totalCost":"infinite"},"external":{"DEBT_TOKEN_REVISION()":"306","DELEGATION_WITH_SIG_TYPEHASH()":"283","DOMAIN_SEPARATOR()":"infinite","EIP712_REVISION()":"infinite","POOL()":"infinite","UNDERLYING_ASSET_ADDRESS()":"2374","allowance(address,address)":"infinite","approve(address,uint256)":"infinite","approveDelegation(address,uint256)":"26966","balanceOf(address)":"infinite","borrowAllowance(address,address)":"infinite","burn(address,uint256)":"infinite","decimals()":"2357","decreaseAllowance(address,uint256)":"infinite","delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":"infinite","getAverageStableRate()":"2344","getIncentivesController()":"2430","getSupplyData()":"infinite","getTotalSupplyAndAvgRate()":"infinite","getTotalSupplyLastUpdated()":"2407","getUserLastUpdated(address)":"2611","getUserStableRate(address)":"2590","increaseAllowance(address,uint256)":"infinite","initialize(address,address,address,uint8,string,string,bytes)":"infinite","mint(address,address,uint256,uint256)":"infinite","name()":"infinite","nonces(address)":"2618","principalBalanceOf(address)":"2602","setIncentivesController(address)":"infinite","symbol()":"infinite","totalSupply()":"infinite","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite"},"internal":{"getRevision()":"infinite"}},"methodIdentifiers":{"DEBT_TOKEN_REVISION()":"b9a7b622","DELEGATION_WITH_SIG_TYPEHASH()":"f3bfc738","DOMAIN_SEPARATOR()":"3644e515","EIP712_REVISION()":"78160376","POOL()":"7535d246","UNDERLYING_ASSET_ADDRESS()":"b16a19de","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","approveDelegation(address,uint256)":"c04a8a10","balanceOf(address)":"70a08231","borrowAllowance(address,address)":"6bd76d24","burn(address,uint256)":"9dc29fac","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":"0b52d558","getAverageStableRate()":"90f6fcf2","getIncentivesController()":"75d26413","getSupplyData()":"79774338","getTotalSupplyAndAvgRate()":"f731e9be","getTotalSupplyLastUpdated()":"e7484890","getUserLastUpdated(address)":"79ce6b8c","getUserStableRate(address)":"e78c9b3b","increaseAllowance(address,uint256)":"39509351","initialize(address,address,address,uint8,string,string,bytes)":"c222ec8a","mint(address,address,uint256,uint256)":"b3f1c93d","name()":"06fdde03","nonces(address)":"7ecebe00","principalBalanceOf(address)":"c634dfaa","setIncentivesController(address)":"e655dbd8","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"}],\"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\":\"fromUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BorrowAllowanceDelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"avgStableRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalSupply\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"avgStableRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalSupply\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"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\":\"DEBT_TOKEN_REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DELEGATION_WITH_SIG_TYPEHASH\",\"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\":\"EIP712_REVISION\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approveDelegation\",\"outputs\":[],\"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\":\"fromUser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"}],\"name\":\"borrowAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatee\",\"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\":\"delegationWithSig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAverageStableRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupplyData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalSupplyAndAvgRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalSupplyLastUpdated\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserLastUpdated\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserStableRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"initializingPool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"user\",\"type\":\"address\"}],\"name\":\"principalBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setIncentivesController\",\"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\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Return cached value if chainId matches cache, otherwise recomputes separator\",\"returns\":{\"_0\":\"The domain separator of the token at current chain\"}},\"UNDERLYING_ASSET_ADDRESS()\":{\"returns\":{\"_0\":\"The address of the underlying asset\"}},\"approveDelegation(address,uint256)\":{\"params\":{\"amount\":\"The maximum amount being delegated.\",\"delegatee\":\"The address receiving the delegated borrowing power\"}},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"borrowAllowance(address,address)\":{\"params\":{\"fromUser\":\"The user to giving allowance\",\"toUser\":\"The user to give allowance to\"},\"returns\":{\"_0\":\"The current allowance of `toUser`\"}},\"burn(address,uint256)\":{\"details\":\"The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debtIn some instances, a burn transaction will emit a mint event if the amount to burn is less than the interest the user earned\",\"params\":{\"amount\":\"The amount of debt tokens getting burned\",\"from\":\"The address from which the debt will be burned\"},\"returns\":{\"_0\":\"The total stable debt\",\"_1\":\"The average stable borrow rate\"}},\"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"delegatee\":\"The delegatee that can use the credit\",\"delegator\":\"The delegator of the credit\",\"r\":\"The R signature param\",\"s\":\"The S signature param\",\"v\":\"The V signature param\",\"value\":\"The amount to be delegated\"}},\"getAverageStableRate()\":{\"returns\":{\"_0\":\"The average stable rate\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"The address of the Incentives Controller\"}},\"getSupplyData()\":{\"returns\":{\"_0\":\"The principal\",\"_1\":\"The total supply\",\"_2\":\"The average stable rate\",\"_3\":\"The timestamp of the last update\"}},\"getTotalSupplyAndAvgRate()\":{\"returns\":{\"_0\":\"The total supply\",\"_1\":\"The average rate\"}},\"getTotalSupplyLastUpdated()\":{\"returns\":{\"_0\":\"The timestamp\"}},\"getUserLastUpdated(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The timestamp\"}},\"getUserStableRate(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The stable rate of the user\"}},\"initialize(address,address,address,uint8,string,string,bytes)\":{\"params\":{\"debtTokenDecimals\":\"The decimals of the debtToken, same as the underlying asset's\",\"debtTokenName\":\"The name of the token\",\"debtTokenSymbol\":\"The symbol of the token\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}},\"mint(address,address,uint256,uint256)\":{\"details\":\"The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debt\",\"params\":{\"amount\":\"The amount of debt tokens to mint\",\"onBehalfOf\":\"The address receiving the debt tokens\",\"rate\":\"The rate of the debt being minted\",\"user\":\"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise\"},\"returns\":{\"_0\":\"True if it is the first borrow, false otherwise\",\"_1\":\"The total stable debt\",\"_2\":\"The average stable borrow rate\"}},\"nonces(address)\":{\"params\":{\"owner\":\"The address for which the nonce is being returned\"},\"returns\":{\"_0\":\"The nonce value for the input address`\"}},\"principalBalanceOf(address)\":{\"returns\":{\"_0\":\"The debt balance of the user since the last burn/mint action\"}},\"setIncentivesController(address)\":{\"params\":{\"controller\":\"the new Incentives controller\"}},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Being non transferrable, the debt token does not implement any of the standard ERC20 functions for transfer and allowance.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"notice\":\"Get the domain separator for the token\"},\"UNDERLYING_ASSET_ADDRESS()\":{\"notice\":\"Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\"},\"approveDelegation(address,uint256)\":{\"notice\":\"Delegates borrowing power to a user on the specific debt token. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)\"},\"borrowAllowance(address,address)\":{\"notice\":\"Returns the borrow allowance of the user\"},\"burn(address,uint256)\":{\"notice\":\"Burns debt of `user`\"},\"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Delegates borrowing power to a user on the specific debt token via ERC712 signature\"},\"getAverageStableRate()\":{\"notice\":\"Returns the average rate of all the stable rate loans.\"},\"getIncentivesController()\":{\"notice\":\"Returns the address of the Incentives Controller contract\"},\"getSupplyData()\":{\"notice\":\"Returns the principal, the total supply, the average stable rate and the timestamp for the last update\"},\"getTotalSupplyAndAvgRate()\":{\"notice\":\"Returns the total supply and the average stable rate\"},\"getTotalSupplyLastUpdated()\":{\"notice\":\"Returns the timestamp of the last update of the total supply\"},\"getUserLastUpdated(address)\":{\"notice\":\"Returns the timestamp of the last update of the user\"},\"getUserStableRate(address)\":{\"notice\":\"Returns the stable rate of the user debt\"},\"initialize(address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the debt token.\"},\"mint(address,address,uint256,uint256)\":{\"notice\":\"Mints debt token to the `onBehalfOf` address.\"},\"nonces(address)\":{\"notice\":\"Returns the nonce value for address specified as parameter\"},\"principalBalanceOf(address)\":{\"notice\":\"Returns the principal debt balance of the user\"},\"setIncentivesController(address)\":{\"notice\":\"Sets a new Incentives Controller\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol\":\"MockStableDebtToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/ICreditDelegationToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ICreditDelegationToken\\n * @author Aave\\n * @notice Defines the basic interface for a token supporting credit delegation.\\n */\\ninterface ICreditDelegationToken {\\n  /**\\n   * @dev Emitted on `approveDelegation` and `borrowAllowance\\n   * @param fromUser The address of the delegator\\n   * @param toUser The address of the delegatee\\n   * @param asset The address of the delegated asset\\n   * @param amount The amount being delegated\\n   */\\n  event BorrowAllowanceDelegated(\\n    address indexed fromUser,\\n    address indexed toUser,\\n    address indexed asset,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @notice Delegates borrowing power to a user on the specific debt token.\\n   * Delegation will still respect the liquidation constraints (even if delegated, a\\n   * delegatee cannot force a delegator HF to go below 1)\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The maximum amount being delegated.\\n   */\\n  function approveDelegation(address delegatee, uint256 amount) external;\\n\\n  /**\\n   * @notice Returns the borrow allowance of the user\\n   * @param fromUser The user to giving allowance\\n   * @param toUser The user to give allowance to\\n   * @return The current allowance of `toUser`\\n   */\\n  function borrowAllowance(address fromUser, address toUser) external view returns (uint256);\\n\\n  /**\\n   * @notice Delegates borrowing power to a user on the specific debt token via ERC712 signature\\n   * @param delegator The delegator of the credit\\n   * @param delegatee The delegatee that can use the credit\\n   * @param value The amount to be delegated\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v The V signature param\\n   * @param s The S signature param\\n   * @param r The R signature param\\n   */\\n  function delegationWithSig(\\n    address delegator,\\n    address delegatee,\\n    uint256 value,\\n    uint256 deadline,\\n    uint8 v,\\n    bytes32 r,\\n    bytes32 s\\n  ) external;\\n}\\n\",\"keccak256\":\"0xab2789bbbf54af9609fbd7fa93595a514866728b3096ede6b69952f98290c997\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {StableDebtToken} from '../../protocol/tokenization/StableDebtToken.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\ncontract MockStableDebtToken is StableDebtToken {\\n  constructor(IPool pool) StableDebtToken(pool) {}\\n\\n  function getRevision() internal pure override returns (uint256) {\\n    return 0x3;\\n  }\\n}\\n\",\"keccak256\":\"0xe4187b33f22dc8e20f3fbf121f0b96e86bdf73f07a9aa10f4c5943c48f4541d2\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {MathUtils} from '../libraries/math/MathUtils.sol';\\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\\nimport {IInitializableDebtToken} from '../../interfaces/IInitializableDebtToken.sol';\\nimport {IStableDebtToken} from '../../interfaces/IStableDebtToken.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {EIP712Base} from './base/EIP712Base.sol';\\nimport {DebtTokenBase} from './base/DebtTokenBase.sol';\\nimport {IncentivizedERC20} from './base/IncentivizedERC20.sol';\\nimport {SafeCast} from '../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title StableDebtToken\\n * @author Aave\\n * @notice Implements a stable debt token to track the borrowing positions of users\\n * at stable rate mode\\n * @dev Transfer and approve functionalities are disabled since its a non-transferable token\\n */\\ncontract StableDebtToken is DebtTokenBase, IncentivizedERC20, IStableDebtToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  uint256 public constant DEBT_TOKEN_REVISION = 0x1;\\n\\n  // Map of users address and the timestamp of their last update (userAddress => lastUpdateTimestamp)\\n  mapping(address => uint40) internal _timestamps;\\n\\n  uint128 internal _avgStableRate;\\n\\n  // Timestamp of the last update of the total supply\\n  uint40 internal _totalSupplyTimestamp;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The address of the Pool contract\\n   */\\n  constructor(\\n    IPool pool\\n  ) DebtTokenBase() IncentivizedERC20(pool, 'STABLE_DEBT_TOKEN_IMPL', 'STABLE_DEBT_TOKEN_IMPL', 0) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IInitializableDebtToken\\n  function initialize(\\n    IPool initializingPool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external override initializer {\\n    require(initializingPool == POOL, Errors.POOL_ADDRESSES_DO_NOT_MATCH);\\n    _setName(debtTokenName);\\n    _setSymbol(debtTokenSymbol);\\n    _setDecimals(debtTokenDecimals);\\n\\n    _underlyingAsset = underlyingAsset;\\n    _incentivesController = incentivesController;\\n\\n    _domainSeparator = _calculateDomainSeparator();\\n\\n    emit Initialized(\\n      underlyingAsset,\\n      address(POOL),\\n      address(incentivesController),\\n      debtTokenDecimals,\\n      debtTokenName,\\n      debtTokenSymbol,\\n      params\\n    );\\n  }\\n\\n  /// @inheritdoc VersionedInitializable\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return DEBT_TOKEN_REVISION;\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function getAverageStableRate() external view virtual override returns (uint256) {\\n    return _avgStableRate;\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function getUserLastUpdated(address user) external view virtual override returns (uint40) {\\n    return _timestamps[user];\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function getUserStableRate(address user) external view virtual override returns (uint256) {\\n    return _userState[user].additionalData;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    uint256 accountBalance = super.balanceOf(account);\\n    uint256 stableRate = _userState[account].additionalData;\\n    if (accountBalance == 0) {\\n      return 0;\\n    }\\n    uint256 cumulatedInterest = MathUtils.calculateCompoundedInterest(\\n      stableRate,\\n      _timestamps[account]\\n    );\\n    return accountBalance.rayMul(cumulatedInterest);\\n  }\\n\\n  struct MintLocalVars {\\n    uint256 previousSupply;\\n    uint256 nextSupply;\\n    uint256 amountInRay;\\n    uint256 currentStableRate;\\n    uint256 nextStableRate;\\n    uint256 currentAvgStableRate;\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external virtual override onlyPool returns (bool, uint256, uint256) {\\n    MintLocalVars memory vars;\\n\\n    if (user != onBehalfOf) {\\n      _decreaseBorrowAllowance(onBehalfOf, user, amount);\\n    }\\n\\n    (, uint256 currentBalance, uint256 balanceIncrease) = _calculateBalanceIncrease(onBehalfOf);\\n\\n    vars.previousSupply = totalSupply();\\n    vars.currentAvgStableRate = _avgStableRate;\\n    vars.nextSupply = _totalSupply = vars.previousSupply + amount;\\n\\n    vars.amountInRay = amount.wadToRay();\\n\\n    vars.currentStableRate = _userState[onBehalfOf].additionalData;\\n    vars.nextStableRate = (vars.currentStableRate.rayMul(currentBalance.wadToRay()) +\\n      vars.amountInRay.rayMul(rate)).rayDiv((currentBalance + amount).wadToRay());\\n\\n    _userState[onBehalfOf].additionalData = vars.nextStableRate.toUint128();\\n\\n    //solium-disable-next-line\\n    _totalSupplyTimestamp = _timestamps[onBehalfOf] = uint40(block.timestamp);\\n\\n    // Calculates the updated average stable rate\\n    vars.currentAvgStableRate = _avgStableRate = (\\n      (vars.currentAvgStableRate.rayMul(vars.previousSupply.wadToRay()) +\\n        rate.rayMul(vars.amountInRay)).rayDiv(vars.nextSupply.wadToRay())\\n    ).toUint128();\\n\\n    uint256 amountToMint = amount + balanceIncrease;\\n    _mint(onBehalfOf, amountToMint, vars.previousSupply);\\n\\n    emit Transfer(address(0), onBehalfOf, amountToMint);\\n    emit Mint(\\n      user,\\n      onBehalfOf,\\n      amountToMint,\\n      currentBalance,\\n      balanceIncrease,\\n      vars.nextStableRate,\\n      vars.currentAvgStableRate,\\n      vars.nextSupply\\n    );\\n\\n    return (currentBalance == 0, vars.nextSupply, vars.currentAvgStableRate);\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function burn(\\n    address from,\\n    uint256 amount\\n  ) external virtual override onlyPool returns (uint256, uint256) {\\n    (, uint256 currentBalance, uint256 balanceIncrease) = _calculateBalanceIncrease(from);\\n\\n    uint256 previousSupply = totalSupply();\\n    uint256 nextAvgStableRate = 0;\\n    uint256 nextSupply = 0;\\n    uint256 userStableRate = _userState[from].additionalData;\\n\\n    // Since the total supply and each single user debt accrue separately,\\n    // there might be accumulation errors so that the last borrower repaying\\n    // might actually try to repay more than the available debt supply.\\n    // In this case we simply set the total supply and the avg stable rate to 0\\n    if (previousSupply <= amount) {\\n      _avgStableRate = 0;\\n      _totalSupply = 0;\\n    } else {\\n      nextSupply = _totalSupply = previousSupply - amount;\\n      uint256 firstTerm = uint256(_avgStableRate).rayMul(previousSupply.wadToRay());\\n      uint256 secondTerm = userStableRate.rayMul(amount.wadToRay());\\n\\n      // For the same reason described above, when the last user is repaying it might\\n      // happen that user rate * user balance > avg rate * total supply. In that case,\\n      // we simply set the avg rate to 0\\n      if (secondTerm >= firstTerm) {\\n        nextAvgStableRate = _totalSupply = _avgStableRate = 0;\\n      } else {\\n        nextAvgStableRate = _avgStableRate = (\\n          (firstTerm - secondTerm).rayDiv(nextSupply.wadToRay())\\n        ).toUint128();\\n      }\\n    }\\n\\n    if (amount == currentBalance) {\\n      _userState[from].additionalData = 0;\\n      _timestamps[from] = 0;\\n    } else {\\n      //solium-disable-next-line\\n      _timestamps[from] = uint40(block.timestamp);\\n    }\\n    //solium-disable-next-line\\n    _totalSupplyTimestamp = uint40(block.timestamp);\\n\\n    if (balanceIncrease > amount) {\\n      uint256 amountToMint = balanceIncrease - amount;\\n      _mint(from, amountToMint, previousSupply);\\n      emit Transfer(address(0), from, amountToMint);\\n      emit Mint(\\n        from,\\n        from,\\n        amountToMint,\\n        currentBalance,\\n        balanceIncrease,\\n        userStableRate,\\n        nextAvgStableRate,\\n        nextSupply\\n      );\\n    } else {\\n      uint256 amountToBurn = amount - balanceIncrease;\\n      _burn(from, amountToBurn, previousSupply);\\n      emit Transfer(from, address(0), amountToBurn);\\n      emit Burn(from, amountToBurn, currentBalance, balanceIncrease, nextAvgStableRate, nextSupply);\\n    }\\n\\n    return (nextSupply, nextAvgStableRate);\\n  }\\n\\n  /**\\n   * @notice Calculates the increase in balance since the last user interaction\\n   * @param user The address of the user for which the interest is being accumulated\\n   * @return The previous principal balance\\n   * @return The new principal balance\\n   * @return The balance increase\\n   */\\n  function _calculateBalanceIncrease(\\n    address user\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 previousPrincipalBalance = super.balanceOf(user);\\n\\n    if (previousPrincipalBalance == 0) {\\n      return (0, 0, 0);\\n    }\\n\\n    uint256 newPrincipalBalance = balanceOf(user);\\n\\n    return (\\n      previousPrincipalBalance,\\n      newPrincipalBalance,\\n      newPrincipalBalance - previousPrincipalBalance\\n    );\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function getSupplyData() external view override returns (uint256, uint256, uint256, uint40) {\\n    uint256 avgRate = _avgStableRate;\\n    return (super.totalSupply(), _calcTotalSupply(avgRate), avgRate, _totalSupplyTimestamp);\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function getTotalSupplyAndAvgRate() external view override returns (uint256, uint256) {\\n    uint256 avgRate = _avgStableRate;\\n    return (_calcTotalSupply(avgRate), avgRate);\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _calcTotalSupply(_avgStableRate);\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function getTotalSupplyLastUpdated() external view override returns (uint40) {\\n    return _totalSupplyTimestamp;\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function principalBalanceOf(address user) external view virtual override returns (uint256) {\\n    return super.balanceOf(user);\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function UNDERLYING_ASSET_ADDRESS() external view override returns (address) {\\n    return _underlyingAsset;\\n  }\\n\\n  /**\\n   * @notice Calculates the total supply\\n   * @param avgRate The average rate at which the total supply increases\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function _calcTotalSupply(uint256 avgRate) internal view returns (uint256) {\\n    uint256 principalSupply = super.totalSupply();\\n\\n    if (principalSupply == 0) {\\n      return 0;\\n    }\\n\\n    uint256 cumulatedInterest = MathUtils.calculateCompoundedInterest(\\n      avgRate,\\n      _totalSupplyTimestamp\\n    );\\n\\n    return principalSupply.rayMul(cumulatedInterest);\\n  }\\n\\n  /**\\n   * @notice Mints stable debt tokens to a user\\n   * @param account The account receiving the debt tokens\\n   * @param amount The amount being minted\\n   * @param oldTotalSupply The total supply before the minting event\\n   */\\n  function _mint(address account, uint256 amount, uint256 oldTotalSupply) internal {\\n    uint128 castAmount = amount.toUint128();\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance + castAmount;\\n\\n    if (address(_incentivesController) != address(0)) {\\n      _incentivesController.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns stable debt tokens of a user\\n   * @param account The user getting his debt burned\\n   * @param amount The amount being burned\\n   * @param oldTotalSupply The total supply before the burning event\\n   */\\n  function _burn(address account, uint256 amount, uint256 oldTotalSupply) internal {\\n    uint128 castAmount = amount.toUint128();\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance - castAmount;\\n\\n    if (address(_incentivesController) != address(0)) {\\n      _incentivesController.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n\\n  /// @inheritdoc EIP712Base\\n  function _EIP712BaseId() internal view override returns (string memory) {\\n    return name();\\n  }\\n\\n  /**\\n   * @dev Being non transferrable, the debt token does not implement any of the\\n   * standard ERC20 functions for transfer and allowance.\\n   */\\n  function transfer(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function allowance(address, address) external view virtual override returns (uint256) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function approve(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function transferFrom(address, address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function increaseAllowance(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function decreaseAllowance(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n}\\n\",\"keccak256\":\"0xe27a3879a8d414bbe000b6e392458abc521550db3649b4bf63f9ba23fe42b180\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/DebtTokenBase.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {VersionedInitializable} from '../../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {ICreditDelegationToken} from '../../../interfaces/ICreditDelegationToken.sol';\\nimport {EIP712Base} from './EIP712Base.sol';\\n\\n/**\\n * @title DebtTokenBase\\n * @author Aave\\n * @notice Base contract for different types of debt tokens, like StableDebtToken or VariableDebtToken\\n */\\nabstract contract DebtTokenBase is\\n  VersionedInitializable,\\n  EIP712Base,\\n  Context,\\n  ICreditDelegationToken\\n{\\n  // Map of borrow allowances (delegator => delegatee => borrowAllowanceAmount)\\n  mapping(address => mapping(address => uint256)) internal _borrowAllowances;\\n\\n  // Credit Delegation Typehash\\n  bytes32 public constant DELEGATION_WITH_SIG_TYPEHASH =\\n    keccak256('DelegationWithSig(address delegatee,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  address internal _underlyingAsset;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() EIP712Base() {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function approveDelegation(address delegatee, uint256 amount) external override {\\n    _approveDelegation(_msgSender(), delegatee, amount);\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function delegationWithSig(\\n    address delegator,\\n    address delegatee,\\n    uint256 value,\\n    uint256 deadline,\\n    uint8 v,\\n    bytes32 r,\\n    bytes32 s\\n  ) external {\\n    require(delegator != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, Errors.INVALID_EXPIRATION);\\n    uint256 currentValidNonce = _nonces[delegator];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR(),\\n        keccak256(\\n          abi.encode(DELEGATION_WITH_SIG_TYPEHASH, delegatee, value, currentValidNonce, deadline)\\n        )\\n      )\\n    );\\n    require(delegator == ecrecover(digest, v, r, s), Errors.INVALID_SIGNATURE);\\n    _nonces[delegator] = currentValidNonce + 1;\\n    _approveDelegation(delegator, delegatee, value);\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function borrowAllowance(\\n    address fromUser,\\n    address toUser\\n  ) external view override returns (uint256) {\\n    return _borrowAllowances[fromUser][toUser];\\n  }\\n\\n  /**\\n   * @notice Updates the borrow allowance of a user on the specific debt token.\\n   * @param delegator The address delegating the borrowing power\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The allowance amount being delegated.\\n   */\\n  function _approveDelegation(address delegator, address delegatee, uint256 amount) internal {\\n    _borrowAllowances[delegator][delegatee] = amount;\\n    emit BorrowAllowanceDelegated(delegator, delegatee, _underlyingAsset, amount);\\n  }\\n\\n  /**\\n   * @notice Decreases the borrow allowance of a user on the specific debt token.\\n   * @param delegator The address delegating the borrowing power\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The amount to subtract from the current allowance\\n   */\\n  function _decreaseBorrowAllowance(address delegator, address delegatee, uint256 amount) internal {\\n    uint256 newAllowance = _borrowAllowances[delegator][delegatee] - amount;\\n\\n    _borrowAllowances[delegator][delegatee] = newAllowance;\\n\\n    emit BorrowAllowanceDelegated(delegator, delegatee, _underlyingAsset, newAllowance);\\n  }\\n}\\n\",\"keccak256\":\"0xf2f4490b59813b0372edfa3eca4b74bb2eb3be386c109201ddc08b97e1bff9fd\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/EIP712Base.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title EIP712Base\\n * @author Aave\\n * @notice Base contract implementation of EIP712.\\n */\\nabstract contract EIP712Base {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 internal _domainSeparator;\\n  uint256 internal immutable _chainId;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() {\\n    _chainId = block.chainid;\\n  }\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\\n    if (block.chainid == _chainId) {\\n      return _domainSeparator;\\n    }\\n    return _calculateDomainSeparator();\\n  }\\n\\n  /**\\n   * @notice Returns the nonce value for address specified as parameter\\n   * @param owner The address for which the nonce is being returned\\n   * @return The nonce value for the input address`\\n   */\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n\\n  /**\\n   * @notice Compute the current domain separator\\n   * @return The domain separator for the token\\n   */\\n  function _calculateDomainSeparator() internal view returns (bytes32) {\\n    return\\n      keccak256(\\n        abi.encode(\\n          EIP712_DOMAIN,\\n          keccak256(bytes(_EIP712BaseId())),\\n          keccak256(EIP712_REVISION),\\n          block.chainid,\\n          address(this)\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Returns the user readable name of signing domain (e.g. token name)\\n   * @return The name of the signing domain\\n   */\\n  function _EIP712BaseId() internal view virtual returns (string memory);\\n}\\n\",\"keccak256\":\"0xd4ed5763068be0ffb08219fc2f9f3c87487578cd0617dae06db26018054b89cd\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":10499,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":10502,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":10572,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":27740,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_nonces","offset":0,"slot":"52","type":"t_mapping(t_address,t_uint256)"},{"astId":27742,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_domainSeparator","offset":0,"slot":"53","type":"t_bytes32"},{"astId":27517,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_borrowAllowances","offset":0,"slot":"54","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":27524,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_underlyingAsset","offset":0,"slot":"55","type":"t_address"},{"astId":27906,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_userState","offset":0,"slot":"56","type":"t_mapping(t_address,t_struct(UserState)27901_storage)"},{"astId":27912,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_allowances","offset":0,"slot":"57","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":27914,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_totalSupply","offset":0,"slot":"58","type":"t_uint256"},{"astId":27916,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_name","offset":0,"slot":"59","type":"t_string_storage"},{"astId":27918,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_symbol","offset":0,"slot":"60","type":"t_string_storage"},{"astId":27920,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_decimals","offset":0,"slot":"61","type":"t_uint8"},{"astId":27923,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_incentivesController","offset":1,"slot":"61","type":"t_contract(IAaveIncentivesController)3875"},{"astId":26081,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_timestamps","offset":0,"slot":"62","type":"t_mapping(t_address,t_uint40)"},{"astId":26083,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_avgStableRate","offset":0,"slot":"63","type":"t_uint128"},{"astId":26085,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"_totalSupplyTimestamp","offset":16,"slot":"63","type":"t_uint40"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IAaveIncentivesController)3875":{"encoding":"inplace","label":"contract IAaveIncentivesController","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(UserState)27901_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct IncentivizedERC20.UserState)","numberOfBytes":"32","value":"t_struct(UserState)27901_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_address,t_uint40)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint40)","numberOfBytes":"32","value":"t_uint40"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(UserState)27901_storage":{"encoding":"inplace","label":"struct IncentivizedERC20.UserState","members":[{"astId":27898,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"balance","offset":0,"slot":"0","type":"t_uint128"},{"astId":27900,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockStableDebtToken.sol:MockStableDebtToken","label":"additionalData","offset":16,"slot":"0","type":"t_uint128"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint40":{"encoding":"inplace","label":"uint40","numberOfBytes":"5"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"DOMAIN_SEPARATOR()":{"notice":"Get the domain separator for the token"},"UNDERLYING_ASSET_ADDRESS()":{"notice":"Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)"},"approveDelegation(address,uint256)":{"notice":"Delegates borrowing power to a user on the specific debt token. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)"},"borrowAllowance(address,address)":{"notice":"Returns the borrow allowance of the user"},"burn(address,uint256)":{"notice":"Burns debt of `user`"},"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Delegates borrowing power to a user on the specific debt token via ERC712 signature"},"getAverageStableRate()":{"notice":"Returns the average rate of all the stable rate loans."},"getIncentivesController()":{"notice":"Returns the address of the Incentives Controller contract"},"getSupplyData()":{"notice":"Returns the principal, the total supply, the average stable rate and the timestamp for the last update"},"getTotalSupplyAndAvgRate()":{"notice":"Returns the total supply and the average stable rate"},"getTotalSupplyLastUpdated()":{"notice":"Returns the timestamp of the last update of the total supply"},"getUserLastUpdated(address)":{"notice":"Returns the timestamp of the last update of the user"},"getUserStableRate(address)":{"notice":"Returns the stable rate of the user debt"},"initialize(address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the debt token."},"mint(address,address,uint256,uint256)":{"notice":"Mints debt token to the `onBehalfOf` address."},"nonces(address)":{"notice":"Returns the nonce value for address specified as parameter"},"principalBalanceOf(address)":{"notice":"Returns the principal debt balance of the user"},"setIncentivesController(address)":{"notice":"Sets a new Incentives Controller"}},"version":1}}},"@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol":{"MockVariableDebtToken":{"abi":[{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"}],"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":"fromUser","type":"address"},{"indexed":true,"internalType":"address","name":"toUser","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BorrowAllowanceDelegated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"debtTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"debtTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Mint","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":"DEBT_TOKEN_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DELEGATION_WITH_SIG_TYPEHASH","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":"EIP712_REVISION","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNDERLYING_ASSET_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approveDelegation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fromUser","type":"address"},{"internalType":"address","name":"toUser","type":"address"}],"name":"borrowAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"burn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"},{"internalType":"address","name":"delegatee","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":"delegationWithSig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"contract IAaveIncentivesController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getPreviousIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getScaledUserBalanceAndSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"initializingPool","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"internalType":"string","name":"debtTokenName","type":"string"},{"internalType":"string","name":"debtTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"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":"user","type":"address"}],"name":"scaledBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scaledTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IAaveIncentivesController","name":"controller","type":"address"}],"name":"setIncentivesController","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":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Return cached value if chainId matches cache, otherwise recomputes separator","returns":{"_0":"The domain separator of the token at current chain"}},"UNDERLYING_ASSET_ADDRESS()":{"returns":{"_0":"The address of the underlying asset"}},"approveDelegation(address,uint256)":{"params":{"amount":"The maximum amount being delegated.","delegatee":"The address receiving the delegated borrowing power"}},"balanceOf(address)":{"details":"Returns the amount of tokens owned by `account`."},"borrowAllowance(address,address)":{"params":{"fromUser":"The user to giving allowance","toUser":"The user to give allowance to"},"returns":{"_0":"The current allowance of `toUser`"}},"burn(address,uint256,uint256)":{"details":"In some instances, a burn transaction will emit a mint event if the amount to burn is less than the interest that the user accrued","params":{"amount":"The amount getting burned","from":"The address from which the debt will be burned","index":"The variable debt index of the reserve"},"returns":{"_0":"The scaled total debt of the reserve"}},"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","delegatee":"The delegatee that can use the credit","delegator":"The delegator of the credit","r":"The R signature param","s":"The S signature param","v":"The V signature param","value":"The amount to be delegated"}},"getIncentivesController()":{"returns":{"_0":"The address of the Incentives Controller"}},"getPreviousIndex(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The last index interest was accrued to the user's balance, expressed in ray"}},"getScaledUserBalanceAndSupply(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The scaled balance of the user","_1":"The scaled total supply"}},"initialize(address,address,address,uint8,string,string,bytes)":{"params":{"debtTokenDecimals":"The decimals of the debtToken, same as the underlying asset's","debtTokenName":"The name of the token","debtTokenSymbol":"The symbol of the token","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}},"mint(address,address,uint256,uint256)":{"params":{"amount":"The amount of debt being minted","index":"The variable debt index of the reserve","onBehalfOf":"The address receiving the debt tokens","user":"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise"},"returns":{"_0":"True if the previous balance of the user is 0, false otherwise","_1":"The scaled total debt of the reserve"}},"nonces(address)":{"params":{"owner":"The address for which the nonce is being returned"},"returns":{"_0":"The nonce value for the input address`"}},"scaledBalanceOf(address)":{"details":"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update","params":{"user":"The user whose balance is calculated"},"returns":{"_0":"The scaled balance of the user"}},"scaledTotalSupply()":{"returns":{"_0":"The scaled total supply"}},"setIncentivesController(address)":{"params":{"controller":"the new Incentives controller"}},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Being non transferrable, the debt token does not implement any of the standard ERC20 functions for transfer and allowance."}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_27166":{"entryPoint":null,"id":27166,"parameterSlots":1,"returnSlots":0},"@_27531":{"entryPoint":null,"id":27531,"parameterSlots":0,"returnSlots":0},"@_27754":{"entryPoint":null,"id":27754,"parameterSlots":0,"returnSlots":0},"@_27965":{"entryPoint":null,"id":27965,"parameterSlots":4,"returnSlots":0},"@_28380":{"entryPoint":null,"id":28380,"parameterSlots":4,"returnSlots":0},"@_28544":{"entryPoint":null,"id":28544,"parameterSlots":4,"returnSlots":0},"@_9124":{"entryPoint":null,"id":9124,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$4860_fromMemory":{"entryPoint":583,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":622,"id":null,"parameterSlots":1,"returnSlots":1},"validator_revert_contract_IPool":{"entryPoint":558,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1110:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"66:86:201","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:201"},"nodeType":"YulFunctionCall","src":"132:12:201"},"nodeType":"YulExpressionStatement","src":"132:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"89:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"100:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"115:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"120:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"111:3:201"},"nodeType":"YulFunctionCall","src":"111:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"124:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"107:3:201"},"nodeType":"YulFunctionCall","src":"107:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"96:3:201"},"nodeType":"YulFunctionCall","src":"96:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"86:2:201"},"nodeType":"YulFunctionCall","src":"86:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"79:6:201"},"nodeType":"YulFunctionCall","src":"79:50:201"},"nodeType":"YulIf","src":"76:70:201"}]},"name":"validator_revert_contract_IPool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"55:5:201","type":""}],"src":"14:138:201"},{"body":{"nodeType":"YulBlock","src":"252:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"298:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"307:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"310:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"300:6:201"},"nodeType":"YulFunctionCall","src":"300:12:201"},"nodeType":"YulExpressionStatement","src":"300:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"273:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"282:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"269:3:201"},"nodeType":"YulFunctionCall","src":"269:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"294:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"265:3:201"},"nodeType":"YulFunctionCall","src":"265:32:201"},"nodeType":"YulIf","src":"262:52:201"},{"nodeType":"YulVariableDeclaration","src":"323:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"342:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"336:5:201"},"nodeType":"YulFunctionCall","src":"336:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"327:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"393:5:201"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"361:31:201"},"nodeType":"YulFunctionCall","src":"361:38:201"},"nodeType":"YulExpressionStatement","src":"361:38:201"},{"nodeType":"YulAssignment","src":"408:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"418:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"408:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$4860_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"218:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"229:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"241:6:201","type":""}],"src":"157:272:201"},{"body":{"nodeType":"YulBlock","src":"546:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"592:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"601:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"604:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"594:6:201"},"nodeType":"YulFunctionCall","src":"594:12:201"},"nodeType":"YulExpressionStatement","src":"594:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"567:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"576:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"563:3:201"},"nodeType":"YulFunctionCall","src":"563:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"588:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"559:3:201"},"nodeType":"YulFunctionCall","src":"559:32:201"},"nodeType":"YulIf","src":"556:52:201"},{"nodeType":"YulVariableDeclaration","src":"617:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"636:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"630:5:201"},"nodeType":"YulFunctionCall","src":"630:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"621:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"687:5:201"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"655:31:201"},"nodeType":"YulFunctionCall","src":"655:38:201"},"nodeType":"YulExpressionStatement","src":"655:38:201"},{"nodeType":"YulAssignment","src":"702:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"712:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"702:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"512:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"523:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"535:6:201","type":""}],"src":"434:289:201"},{"body":{"nodeType":"YulBlock","src":"783:325:201","statements":[{"nodeType":"YulAssignment","src":"793:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"807:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"810:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"803:3:201"},"nodeType":"YulFunctionCall","src":"803:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"793:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"824:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"854:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"860:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:201"},"nodeType":"YulFunctionCall","src":"850:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"828:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"901:31:201","statements":[{"nodeType":"YulAssignment","src":"903:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"917:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"925:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"913:3:201"},"nodeType":"YulFunctionCall","src":"913:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"903:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"881:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"874:6:201"},"nodeType":"YulFunctionCall","src":"874:26:201"},"nodeType":"YulIf","src":"871:61:201"},{"body":{"nodeType":"YulBlock","src":"991:111:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1012:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1019:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1024:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1015:3:201"},"nodeType":"YulFunctionCall","src":"1015:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1005:6:201"},"nodeType":"YulFunctionCall","src":"1005:31:201"},"nodeType":"YulExpressionStatement","src":"1005:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1056:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1059:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1049:6:201"},"nodeType":"YulFunctionCall","src":"1049:15:201"},"nodeType":"YulExpressionStatement","src":"1049:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1084:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1087:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1077:6:201"},"nodeType":"YulFunctionCall","src":"1077:15:201"},"nodeType":"YulExpressionStatement","src":"1077:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"947:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"970:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"978:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"967:2:201"},"nodeType":"YulFunctionCall","src":"967:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"944:2:201"},"nodeType":"YulFunctionCall","src":"944:38:201"},"nodeType":"YulIf","src":"941:161:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"763:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"772:6:201","type":""}],"src":"728:380:201"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPool(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$4860_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60e0604052600080553480156200001557600080fd5b50604051620027c2380380620027c2833981016040819052620000389162000247565b80806040518060400160405280601881526020017f5641524941424c455f444542545f544f4b454e5f494d504c00000000000000008152506040518060400160405280601881526020017f5641524941424c455f444542545f544f4b454e5f494d504c0000000000000000815250600083838383838383834660808181525050836001600160a01b0316630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200011d919062000247565b6001600160a01b031660a05282516200013e90603b90602086019062000188565b5081516200015490603c90602085019062000188565b50603d805460ff191660ff9290921691909117905550506001600160a01b031660c05250620002ab98505050505050505050565b82805462000196906200026e565b90600052602060002090601f016020900481019282620001ba576000855562000205565b82601f10620001d557805160ff191683800117855562000205565b8280016001018555821562000205579182015b8281111562000205578251825591602001919060010190620001e8565b506200021392915062000217565b5090565b5b8082111562000213576000815560010162000218565b6001600160a01b03811681146200024457600080fd5b50565b6000602082840312156200025a57600080fd5b815162000267816200022e565b9392505050565b600181811c908216806200028357607f821691505b60208210811415620002a557634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c0516124bd620003056000396000818161037e01528181610a3901528181610b7f01528181610c4e01528181610e1401528181610f6f015261124f0152600061103b01526000610ab801526124bd6000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80637ecebe0011610104578063b9a7b622116100a2578063e075398611610071578063e0753986146104ee578063e655dbd81461054a578063f3bfc7381461055d578063f5298aca1461058457600080fd5b8063b9a7b622146104b2578063c04a8a10146104ba578063c222ec8a146104cd578063dd62ed3e146104e057600080fd5b8063a9059cbb116100de578063a9059cbb146101fd578063b16a19de14610462578063b1bf962d14610480578063b3f1c93d1461048857600080fd5b80637ecebe001461042457806395d89b411461045a578063a457c2d7146101fd57600080fd5b8063313ce5671161017c57806370a082311161014b57806370a08231146103665780637535d2461461037957806375d26413146103c557806378160376146103e857600080fd5b8063313ce567146103035780633644e5151461031857806339509351146101fd5780636bd76d241461032057600080fd5b80630b52d558116101b85780630b52d5581461028257806318160ddd146102975780631da24f3e146102ad57806323b872dd146102f557600080fd5b806306fdde03146101df578063095ea7b3146101fd5780630afbcdc914610220575b600080fd5b6101e7610597565b6040516101f49190611e7b565b60405180910390f35b61021061020b366004611ec3565b610629565b60405190151581526020016101f4565b61026d61022e366004611eef565b73ffffffffffffffffffffffffffffffffffffffff16600090815260386020526040902054603a546fffffffffffffffffffffffffffffffff90911691565b604080519283526020830191909152016101f4565b610295610290366004611f1d565b610699565b005b61029f6109ea565b6040519081526020016101f4565b61029f6102bb366004611eef565b73ffffffffffffffffffffffffffffffffffffffff166000908152603860205260409020546fffffffffffffffffffffffffffffffff1690565b61021061020b366004611f8b565b603d5460405160ff90911681526020016101f4565b61029f610ab4565b61029f61032e366004611fcc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260366020908152604080832093909416825291909152205490565b61029f610374366004611eef565b610aed565b6103a07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b603d54610100900473ffffffffffffffffffffffffffffffffffffffff166103a0565b6101e76040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b61029f610432366004611eef565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205490565b6101e7610bf8565b60375473ffffffffffffffffffffffffffffffffffffffff166103a0565b61029f610c07565b61049b610496366004612005565b610c12565b6040805192151583526020830191909152016101f4565b61029f600181565b6102956104c8366004611ec3565b610d1b565b6102956104db36600461216e565b610d2a565b61029f61020b366004611fcc565b61029f6104fc366004611eef565b73ffffffffffffffffffffffffffffffffffffffff1660009081526038602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b610295610558366004611eef565b611037565b61029f7f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa081565b61029f610592366004612243565b611215565b6060603b80546105a690612278565b80601f01602080910402602001604051908101604052809291908181526020018280546105d290612278565b801561061f5780601f106105f45761010080835404028352916020019161061f565b820191906000526020600020905b81548152906001019060200180831161060257829003601f168201915b5050505050905090565b604080518082018252600281527f3830000000000000000000000000000000000000000000000000000000000000602082015290517f08c379a000000000000000000000000000000000000000000000000000000000815260009161069091600401611e7b565b60405180910390fd5b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff881661071b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b50834211156040518060400160405280600281526020017f37380000000000000000000000000000000000000000000000000000000000008152509061078e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b5073ffffffffffffffffffffffffffffffffffffffff8716600090815260346020526040812054906107be610ab4565b604080517f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa0602082015273ffffffffffffffffffffffffffffffffffffffff8b1691810191909152606081018990526080810184905260a0810188905260c001604051602081830303815290604052805190602001206040516020016108769291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa1580156108fc573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f3739000000000000000000000000000000000000000000000000000000000000815250906109a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b506109ae8260016122fb565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603460205260409020556109df8989896112da565b505050505050505050565b6037546040517f386497fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091610aaf917f00000000000000000000000000000000000000000000000000000000000000009091169063386497fd90602401602060405180830381865afa158015610a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa69190612313565b603a5490611351565b905090565b60007f0000000000000000000000000000000000000000000000000000000000000000461415610ae5575060355490565b610aaf6113a8565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603860205260408120546fffffffffffffffffffffffffffffffff1680610b335750600092915050565b6037546040517f386497fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152610bf1917f0000000000000000000000000000000000000000000000000000000000000000169063386497fd90602401602060405180830381865afa158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190612313565b8290611351565b9392505050565b6060603c80546105a690612278565b6000610aaf603a5490565b60408051808201909152600281527f323300000000000000000000000000000000000000000000000000000000000060208201526000908190337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610cbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610cfa57610cfa85878661146d565b610d068686868661152d565b610d0e610c07565b9150915094509492505050565b610d263383836112da565b5050565b60015460039060ff1680610d3d5750303b155b80610d49575060005481115b610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610690565b60015460ff16158015610e1257600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f383700000000000000000000000000000000000000000000000000000000000081525090610ecf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b50610ed98661176e565b610ee285611781565b603d80546037805473ffffffffffffffffffffffffffffffffffffffff8d81167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179091558a16610100027fffffffffffffffffffffff00000000000000000000000000000000000000000090911660ff8a1617179055610f676113a8565b6035819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f40251fbfb6656cfa65a00d7879029fec1fad21d28fdcff2f4f68f52795b74f2c8a8a8a8a8a8a604051610ff49695949392919061232c565b60405180910390a3801561102b57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c891906123cc565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015611135573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115991906123e9565b6040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250906111c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b5050603d805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152600090337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146112bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b506112ca8460008585611794565b6112d2610c07565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526036602090815260408083208786168085529083529281902086905560375490518681529416939192917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1910160405180910390a4505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761138657600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6113d3611ab1565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff80841660009081526036602090815260408083209386168352929052908120546114ad90839061240b565b73ffffffffffffffffffffffffffffffffffffffff808616600081815260366020908152604080832089861680855292529182902085905560375491519495509216927fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e19061151f9086815260200190565b60405180910390a450505050565b60008061153a8484611abb565b60408051808201909152600281527f32340000000000000000000000000000000000000000000000000000000000006020820152909150816115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260408120546fffffffffffffffffffffffffffffffff8082169291611606918491700100000000000000000000000000000000900416611351565b6116108387611351565b61161a919061240b565b905061162585611afa565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260386020526040902080546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905561168d8761168885611afa565b611ba0565b600061169982886122fb565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116fb91815260200190565b60405180910390a3604080518281526020810184905290810187905273ffffffffffffffffffffffffffffffffffffffff808a1691908b16907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35050159695505050505050565b8051610d2690603b906020840190611d80565b8051610d2690603c906020840190611d80565b60006117a08383611abb565b60408051808201909152600281527f323500000000000000000000000000000000000000000000000000000000000060208201529091508161180f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260408120546fffffffffffffffffffffffffffffffff808216929161186c918491700100000000000000000000000000000000900416611351565b6118768386611351565b611880919061240b565b905061188b84611afa565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260386020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556118f3876118ee85611afa565b611d1c565b848111156119d2576000611907868361240b565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161196991815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff89169081907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a350611aa8565b60006119de828761240b565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a4091815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff80891691908a16907f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f909060600160405180910390a3505b50505050505050565b6060610aaf610597565b600081156b033b2e3c9fd0803ce800000060028404190484111715611adf57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b60006fffffffffffffffffffffffffffffffff821115611b9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610690565b5090565b603a54611bbf6fffffffffffffffffffffffffffffffff8316826122fb565b603a5573ffffffffffffffffffffffffffffffffffffffff83166000908152603860205260409020546fffffffffffffffffffffffffffffffff16611c048382612422565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260386020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9390931692909217909155603d546101009004168015611d15576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590526fffffffffffffffffffffffffffffffff841660448301528216906331873e2e90606401600060405180830381600087803b158015611d0157600080fd5b505af11580156109df573d6000803e3d6000fd5b5050505050565b603a54611d3b6fffffffffffffffffffffffffffffffff83168261240b565b603a5573ffffffffffffffffffffffffffffffffffffffff83166000908152603860205260409020546fffffffffffffffffffffffffffffffff16611c048382612456565b828054611d8c90612278565b90600052602060002090601f016020900481019282611dae5760008555611df4565b82601f10611dc757805160ff1916838001178555611df4565b82800160010185558215611df4579182015b82811115611df4578251825591602001919060010190611dd9565b50611b9c9291505b80821115611b9c5760008155600101611dfc565b6000815180845260005b81811015611e3657602081850181015186830182015201611e1a565b81811115611e48576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bf16020830184611e10565b73ffffffffffffffffffffffffffffffffffffffff81168114611eb057600080fd5b50565b8035611ebe81611e8e565b919050565b60008060408385031215611ed657600080fd5b8235611ee181611e8e565b946020939093013593505050565b600060208284031215611f0157600080fd5b8135610bf181611e8e565b803560ff81168114611ebe57600080fd5b600080600080600080600060e0888a031215611f3857600080fd5b8735611f4381611e8e565b96506020880135611f5381611e8e565b95506040880135945060608801359350611f6f60808901611f0c565b925060a0880135915060c0880135905092959891949750929550565b600080600060608486031215611fa057600080fd5b8335611fab81611e8e565b92506020840135611fbb81611e8e565b929592945050506040919091013590565b60008060408385031215611fdf57600080fd5b8235611fea81611e8e565b91506020830135611ffa81611e8e565b809150509250929050565b6000806000806080858703121561201b57600080fd5b843561202681611e8e565b9350602085013561203681611e8e565b93969395505050506040820135916060013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261208b57600080fd5b813567ffffffffffffffff808211156120a6576120a661204b565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156120ec576120ec61204b565b8160405283815286602085880101111561210557600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008083601f84011261213757600080fd5b50813567ffffffffffffffff81111561214f57600080fd5b60208301915083602082850101111561216757600080fd5b9250929050565b60008060008060008060008060e0898b03121561218a57600080fd5b883561219581611e8e565b975060208901356121a581611e8e565b96506121b360408a01611eb3565b95506121c160608a01611f0c565b9450608089013567ffffffffffffffff808211156121de57600080fd5b6121ea8c838d0161207a565b955060a08b013591508082111561220057600080fd5b61220c8c838d0161207a565b945060c08b013591508082111561222257600080fd5b5061222f8b828c01612125565b999c989b5096995094979396929594505050565b60008060006060848603121561225857600080fd5b833561226381611e8e565b95602085013595506040909401359392505050565b600181811c9082168061228c57607f821691505b602082108114156122c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561230e5761230e6122cc565b500190565b60006020828403121561232557600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8716815260ff8616602082015260a06040820152600061236460a0830187611e10565b82810360608401526123768187611e10565b905082810360808401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050979650505050505050565b6000602082840312156123de57600080fd5b8151610bf181611e8e565b6000602082840312156123fb57600080fd5b81518015158114610bf157600080fd5b60008282101561241d5761241d6122cc565b500390565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561244d5761244d6122cc565b01949350505050565b60006fffffffffffffffffffffffffffffffff8381169083168181101561247f5761247f6122cc565b03939250505056fea26469706673582212203efa211ef7ba661a18c8a3a0fe7f9ad00f2b721dff953a177c9888b9034dc66b64736f6c634300080a0033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x27C2 CODESIZE SUB DUP1 PUSH3 0x27C2 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x38 SWAP2 PUSH3 0x247 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x18 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5641524941424C455F444542545F544F4B454E5F494D504C0000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x18 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5641524941424C455F444542545F544F4B454E5F494D504C0000000000000000 DUP2 MSTORE POP PUSH1 0x0 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 CHAINID PUSH1 0x80 DUP2 DUP2 MSTORE POP POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xF7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x11D SWAP2 SWAP1 PUSH3 0x247 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE DUP3 MLOAD PUSH3 0x13E SWAP1 PUSH1 0x3B SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH3 0x188 JUMP JUMPDEST POP DUP2 MLOAD PUSH3 0x154 SWAP1 PUSH1 0x3C SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x188 JUMP JUMPDEST POP PUSH1 0x3D DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xC0 MSTORE POP PUSH3 0x2AB SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x196 SWAP1 PUSH3 0x26E JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x1BA JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x205 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x1D5 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x205 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x205 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x205 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x1E8 JUMP JUMPDEST POP PUSH3 0x213 SWAP3 SWAP2 POP PUSH3 0x217 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x213 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x218 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x244 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x25A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x267 DUP2 PUSH3 0x22E JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x283 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x2A5 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x24BD PUSH3 0x305 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x37E ADD MSTORE DUP2 DUP2 PUSH2 0xA39 ADD MSTORE DUP2 DUP2 PUSH2 0xB7F ADD MSTORE DUP2 DUP2 PUSH2 0xC4E ADD MSTORE DUP2 DUP2 PUSH2 0xE14 ADD MSTORE DUP2 DUP2 PUSH2 0xF6F ADD MSTORE PUSH2 0x124F ADD MSTORE PUSH1 0x0 PUSH2 0x103B ADD MSTORE PUSH1 0x0 PUSH2 0xAB8 ADD MSTORE PUSH2 0x24BD 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 0x1DA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xB9A7B622 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xE0753986 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE0753986 EQ PUSH2 0x4EE JUMPI DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x54A JUMPI DUP1 PUSH4 0xF3BFC738 EQ PUSH2 0x55D JUMPI DUP1 PUSH4 0xF5298ACA EQ PUSH2 0x584 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB9A7B622 EQ PUSH2 0x4B2 JUMPI DUP1 PUSH4 0xC04A8A10 EQ PUSH2 0x4BA JUMPI DUP1 PUSH4 0xC222EC8A EQ PUSH2 0x4CD JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x4E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA9059CBB GT PUSH2 0xDE JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x462 JUMPI DUP1 PUSH4 0xB1BF962D EQ PUSH2 0x480 JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x424 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x45A JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0x17C JUMPI DUP1 PUSH4 0x70A08231 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x366 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x379 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x3C5 JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x3E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 EQ PUSH2 0x303 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x318 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0x6BD76D24 EQ PUSH2 0x320 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB52D558 GT PUSH2 0x1B8 JUMPI DUP1 PUSH4 0xB52D558 EQ PUSH2 0x282 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x297 JUMPI DUP1 PUSH4 0x1DA24F3E EQ PUSH2 0x2AD JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1DF JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0xAFBCDC9 EQ PUSH2 0x220 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E7 PUSH2 0x597 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F4 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x210 PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1EC3 JUMP JUMPDEST PUSH2 0x629 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x26D PUSH2 0x22E CALLDATASIZE PUSH1 0x4 PUSH2 0x1EEF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x295 PUSH2 0x290 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F1D JUMP JUMPDEST PUSH2 0x699 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x29F PUSH2 0x9EA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x2BB CALLDATASIZE PUSH1 0x4 PUSH2 0x1EEF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x210 PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1F8B JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x29F PUSH2 0xAB4 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x32E CALLDATASIZE PUSH1 0x4 PUSH2 0x1FCC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x374 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EEF JUMP JUMPDEST PUSH2 0xAED JUMP JUMPDEST PUSH2 0x3A0 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3A0 JUMP JUMPDEST PUSH2 0x1E7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x432 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EEF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0xBF8 JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3A0 JUMP JUMPDEST PUSH2 0x29F PUSH2 0xC07 JUMP JUMPDEST PUSH2 0x49B PUSH2 0x496 CALLDATASIZE PUSH1 0x4 PUSH2 0x2005 JUMP JUMPDEST PUSH2 0xC12 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x29F PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH2 0x295 PUSH2 0x4C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EC3 JUMP JUMPDEST PUSH2 0xD1B JUMP JUMPDEST PUSH2 0x295 PUSH2 0x4DB CALLDATASIZE PUSH1 0x4 PUSH2 0x216E JUMP JUMPDEST PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x29F PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1FCC JUMP JUMPDEST PUSH2 0x29F PUSH2 0x4FC CALLDATASIZE PUSH1 0x4 PUSH2 0x1EEF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x295 PUSH2 0x558 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EEF JUMP JUMPDEST PUSH2 0x1037 JUMP JUMPDEST PUSH2 0x29F PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 DUP2 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x592 CALLDATASIZE PUSH1 0x4 PUSH2 0x2243 JUMP JUMPDEST PUSH2 0x1215 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3B DUP1 SLOAD PUSH2 0x5A6 SWAP1 PUSH2 0x2278 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x5D2 SWAP1 PUSH2 0x2278 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x61F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5F4 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x61F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x602 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3830000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x690 SWAP2 PUSH1 0x4 ADD PUSH2 0x1E7B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x71B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x78E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x7BE PUSH2 0xAB4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x876 SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x9A2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP PUSH2 0x9AE DUP3 PUSH1 0x1 PUSH2 0x22FB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x9DF DUP10 DUP10 DUP10 PUSH2 0x12DA JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH1 0x40 MLOAD PUSH32 0x386497FD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH2 0xAAF SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x386497FD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA82 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAA6 SWAP2 SWAP1 PUSH2 0x2313 JUMP JUMPDEST PUSH1 0x3A SLOAD SWAP1 PUSH2 0x1351 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0xAE5 JUMPI POP PUSH1 0x35 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xAAF PUSH2 0x13A8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 PUSH2 0xB33 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH1 0x40 MLOAD PUSH32 0x386497FD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0xBF1 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x386497FD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBC6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBEA SWAP2 SWAP1 PUSH2 0x2313 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1351 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3C DUP1 SLOAD PUSH2 0x5A6 SWAP1 PUSH2 0x2278 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAAF PUSH1 0x3A SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCBB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCFA JUMPI PUSH2 0xCFA DUP6 DUP8 DUP7 PUSH2 0x146D JUMP JUMPDEST PUSH2 0xD06 DUP7 DUP7 DUP7 DUP7 PUSH2 0x152D JUMP JUMPDEST PUSH2 0xD0E PUSH2 0xC07 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xD26 CALLER DUP4 DUP4 PUSH2 0x12DA JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x3 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0xD3D JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0xD49 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0xDD5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x690 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xE12 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xECF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP PUSH2 0xED9 DUP7 PUSH2 0x176E JUMP JUMPDEST PUSH2 0xEE2 DUP6 PUSH2 0x1781 JUMP JUMPDEST PUSH1 0x3D DUP1 SLOAD PUSH1 0x37 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE DUP11 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH1 0xFF DUP11 AND OR OR SWAP1 SSTORE PUSH2 0xF67 PUSH2 0x13A8 JUMP JUMPDEST PUSH1 0x35 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x40251FBFB6656CFA65A00D7879029FEC1FAD21D28FDCFF2F4F68F52795B74F2C DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH1 0x40 MLOAD PUSH2 0xFF4 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x232C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0x102B JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10A4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10C8 SWAP2 SWAP1 PUSH2 0x23CC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1135 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1159 SWAP2 SWAP1 PUSH2 0x23E9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x11C7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP POP PUSH1 0x3D DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x12BC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP PUSH2 0x12CA DUP5 PUSH1 0x0 DUP6 DUP6 PUSH2 0x1794 JUMP JUMPDEST PUSH2 0x12D2 PUSH2 0xC07 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP7 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP7 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP1 MLOAD DUP7 DUP2 MSTORE SWAP5 AND SWAP4 SWAP2 SWAP3 SWAP2 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1386 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x13D3 PUSH2 0x1AB1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x14AD SWAP1 DUP4 SWAP1 PUSH2 0x240B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP7 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP2 MLOAD SWAP5 SWAP6 POP SWAP3 AND SWAP3 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP1 PUSH2 0x151F SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x153A DUP5 DUP5 PUSH2 0x1ABB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x15A9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x1606 SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1351 JUMP JUMPDEST PUSH2 0x1610 DUP4 DUP8 PUSH2 0x1351 JUMP JUMPDEST PUSH2 0x161A SWAP2 SWAP1 PUSH2 0x240B JUMP JUMPDEST SWAP1 POP PUSH2 0x1625 DUP6 PUSH2 0x1AFA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x168D DUP8 PUSH2 0x1688 DUP6 PUSH2 0x1AFA JUMP JUMPDEST PUSH2 0x1BA0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1699 DUP3 DUP9 PUSH2 0x22FB JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x16FB SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 AND SWAP2 SWAP1 DUP12 AND SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP ISZERO SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD26 SWAP1 PUSH1 0x3B SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x1D80 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD26 SWAP1 PUSH1 0x3C SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x1D80 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17A0 DUP4 DUP4 PUSH2 0x1ABB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x180F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x186C SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1351 JUMP JUMPDEST PUSH2 0x1876 DUP4 DUP7 PUSH2 0x1351 JUMP JUMPDEST PUSH2 0x1880 SWAP2 SWAP1 PUSH2 0x240B JUMP JUMPDEST SWAP1 POP PUSH2 0x188B DUP5 PUSH2 0x1AFA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x18F3 DUP8 PUSH2 0x18EE DUP6 PUSH2 0x1AFA JUMP JUMPDEST PUSH2 0x1D1C JUMP JUMPDEST DUP5 DUP2 GT ISZERO PUSH2 0x19D2 JUMPI PUSH1 0x0 PUSH2 0x1907 DUP7 DUP4 PUSH2 0x240B JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1969 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 DUP2 SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x1AA8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19DE DUP3 DUP8 PUSH2 0x240B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1A40 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP2 SWAP1 DUP11 AND SWAP1 PUSH32 0x4CF25BC1D991C17529C25213D3CC0CDA295EEAAD5F13F361969B12EA48015F90 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xAAF PUSH2 0x597 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1ADF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1B9C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x690 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x1BBF PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x22FB JUMP JUMPDEST PUSH1 0x3A SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1C04 DUP4 DUP3 PUSH2 0x2422 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x1D15 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D01 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x1D3B PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x240B JUMP JUMPDEST PUSH1 0x3A SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1C04 DUP4 DUP3 PUSH2 0x2456 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x1D8C SWAP1 PUSH2 0x2278 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x1DAE JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x1DF4 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x1DC7 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x1DF4 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x1DF4 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1DF4 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1DD9 JUMP JUMPDEST POP PUSH2 0x1B9C SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1B9C JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1DFC JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1E36 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x1E1A JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x1E48 JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xBF1 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1E10 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1EB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1EBE DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1ED6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1EE1 DUP2 PUSH2 0x1E8E 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 0x1F01 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xBF1 DUP2 PUSH2 0x1E8E JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1EBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1F38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x1F43 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x1F53 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x1F6F PUSH1 0x80 DUP10 ADD PUSH2 0x1F0C JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1FA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1FAB DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1FBB DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1FDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1FEA DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1FFA DUP2 PUSH2 0x1E8E JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x201B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x2026 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x2036 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x208B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x20A6 JUMPI PUSH2 0x20A6 PUSH2 0x204B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x20EC JUMPI PUSH2 0x20EC PUSH2 0x204B JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x2105 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2137 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x214F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x2167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xE0 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x218A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x2195 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x21A5 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP7 POP PUSH2 0x21B3 PUSH1 0x40 DUP11 ADD PUSH2 0x1EB3 JUMP JUMPDEST SWAP6 POP PUSH2 0x21C1 PUSH1 0x60 DUP11 ADD PUSH2 0x1F0C JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x21DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x21EA DUP13 DUP4 DUP14 ADD PUSH2 0x207A JUMP JUMPDEST SWAP6 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2200 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x220C DUP13 DUP4 DUP14 ADD PUSH2 0x207A JUMP JUMPDEST SWAP5 POP PUSH1 0xC0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2222 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x222F DUP12 DUP3 DUP13 ADD PUSH2 0x2125 JUMP JUMPDEST SWAP10 SWAP13 SWAP9 SWAP12 POP SWAP7 SWAP10 POP SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2258 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x2263 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x228C JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x22C6 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x230E JUMPI PUSH2 0x230E PUSH2 0x22CC JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2325 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP2 MSTORE PUSH1 0xFF DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2364 PUSH1 0xA0 DUP4 ADD DUP8 PUSH2 0x1E10 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x2376 DUP2 DUP8 PUSH2 0x1E10 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE DUP4 DUP2 MSTORE DUP4 DUP6 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND DUP3 ADD ADD SWAP2 POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x23DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xBF1 DUP2 PUSH2 0x1E8E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x23FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xBF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x241D JUMPI PUSH2 0x241D PUSH2 0x22CC JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x244D JUMPI PUSH2 0x244D PUSH2 0x22CC JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x247F JUMPI PUSH2 0x247F PUSH2 0x22CC JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURNDATACOPY STATICCALL 0x21 0x1E 0xF7 0xBA PUSH7 0x1A18C8A3A0FE7F SWAP11 0xD0 0xF 0x2B PUSH19 0x1DFF953A177C9888B9034DC66B64736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"198:197:65:-:0;;;928:1:71;886:43;;254:50:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;296:4;1550::100;988:195:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1612:1:100;1116:4:105;1122;1128:6;1136:8;817:4:104;823;829:6;837:8;630:13:102;619:24;;;;;;2780:4:103;-1:-1:-1;;;;;2780:23:103;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2759:46:103;;;2811:12;;;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;2829:16:103;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;2851:9:103;:20;;-1:-1:-1;;2851:20:103;;;;;;;;;;;;-1:-1:-1;;;;;;;2877:11:103;;;-1:-1:-1;198:197:65;;-1:-1:-1;;;;;;;;;198:197:65;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;198:197:65;;;-1:-1:-1;198:197:65;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:138:201;-1:-1:-1;;;;;96:31:201;;86:42;;76:70;;142:1;139;132:12;76:70;14:138;:::o;157:272::-;241:6;294:2;282:9;273:7;269:23;265:32;262:52;;;310:1;307;300:12;262:52;342:9;336:16;361:38;393:5;361:38;:::i;:::-;418:5;157:272;-1:-1:-1;;;157:272:201:o;728:380::-;807:1;803:12;;;;850;;;871:61;;925:4;917:6;913:17;903:27;;871:61;978:2;970:6;967:14;947:18;944:38;941:161;;;1024:10;1019:3;1015:20;1012:1;1005:31;1059:4;1056:1;1049:15;1087:4;1084:1;1077:15;941:161;;728:380;;;:::o;:::-;198:197:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@DEBT_TOKEN_REVISION_27150":{"entryPoint":null,"id":27150,"parameterSlots":0,"returnSlots":0},"@DELEGATION_WITH_SIG_TYPEHASH_27522":{"entryPoint":null,"id":27522,"parameterSlots":0,"returnSlots":0},"@DOMAIN_SEPARATOR_27772":{"entryPoint":2740,"id":27772,"parameterSlots":0,"returnSlots":1},"@EIP712_REVISION_27731":{"entryPoint":null,"id":27731,"parameterSlots":0,"returnSlots":0},"@POOL_27929":{"entryPoint":null,"id":27929,"parameterSlots":0,"returnSlots":0},"@UNDERLYING_ASSET_ADDRESS_27489":{"entryPoint":null,"id":27489,"parameterSlots":0,"returnSlots":1},"@_EIP712BaseId_27380":{"entryPoint":6833,"id":27380,"parameterSlots":0,"returnSlots":1},"@_approveDelegation_27685":{"entryPoint":4826,"id":27685,"parameterSlots":3,"returnSlots":0},"@_burnScaled_28821":{"entryPoint":6036,"id":28821,"parameterSlots":4,"returnSlots":0},"@_burn_28498":{"entryPoint":7452,"id":28498,"parameterSlots":2,"returnSlots":0},"@_calculateDomainSeparator_27815":{"entryPoint":5032,"id":27815,"parameterSlots":0,"returnSlots":1},"@_decreaseBorrowAllowance_27721":{"entryPoint":5229,"id":27721,"parameterSlots":3,"returnSlots":0},"@_mintScaled_28703":{"entryPoint":5421,"id":28703,"parameterSlots":4,"returnSlots":1},"@_mint_28439":{"entryPoint":7072,"id":28439,"parameterSlots":2,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_setDecimals_28348":{"entryPoint":null,"id":28348,"parameterSlots":1,"returnSlots":0},"@_setName_28326":{"entryPoint":5998,"id":28326,"parameterSlots":1,"returnSlots":0},"@_setSymbol_28337":{"entryPoint":6017,"id":28337,"parameterSlots":1,"returnSlots":0},"@allowance_27413":{"entryPoint":null,"id":27413,"parameterSlots":2,"returnSlots":1},"@approveDelegation_27548":{"entryPoint":3355,"id":27548,"parameterSlots":2,"returnSlots":0},"@approve_27429":{"entryPoint":1577,"id":27429,"parameterSlots":2,"returnSlots":1},"@balanceOf_27281":{"entryPoint":2797,"id":27281,"parameterSlots":1,"returnSlots":1},"@balanceOf_28020":{"entryPoint":null,"id":28020,"parameterSlots":1,"returnSlots":1},"@borrowAllowance_27659":{"entryPoint":null,"id":27659,"parameterSlots":2,"returnSlots":1},"@burn_27351":{"entryPoint":4629,"id":27351,"parameterSlots":3,"returnSlots":1},"@decimals_27995":{"entryPoint":null,"id":27995,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_27479":{"entryPoint":null,"id":27479,"parameterSlots":2,"returnSlots":1},"@delegationWithSig_27641":{"entryPoint":1689,"id":27641,"parameterSlots":7,"returnSlots":0},"@getIncentivesController_28030":{"entryPoint":null,"id":28030,"parameterSlots":0,"returnSlots":1},"@getPreviousIndex_28607":{"entryPoint":null,"id":28607,"parameterSlots":1,"returnSlots":1},"@getRevision_9133":{"entryPoint":null,"id":9133,"parameterSlots":0,"returnSlots":1},"@getScaledUserBalanceAndSupply_28580":{"entryPoint":null,"id":28580,"parameterSlots":1,"returnSlots":2},"@increaseAllowance_27463":{"entryPoint":null,"id":27463,"parameterSlots":2,"returnSlots":1},"@initialize_27239":{"entryPoint":3370,"id":27239,"parameterSlots":8,"returnSlots":0},"@isConstructor_10568":{"entryPoint":null,"id":10568,"parameterSlots":0,"returnSlots":1},"@mint_27322":{"entryPoint":3090,"id":27322,"parameterSlots":4,"returnSlots":2},"@name_27975":{"entryPoint":1431,"id":27975,"parameterSlots":0,"returnSlots":1},"@nonces_27785":{"entryPoint":null,"id":27785,"parameterSlots":1,"returnSlots":1},"@rayDiv_21198":{"entryPoint":6843,"id":21198,"parameterSlots":2,"returnSlots":1},"@rayMul_21186":{"entryPoint":4945,"id":21186,"parameterSlots":2,"returnSlots":1},"@scaledBalanceOf_28559":{"entryPoint":null,"id":28559,"parameterSlots":1,"returnSlots":1},"@scaledTotalSupply_28592":{"entryPoint":3079,"id":28592,"parameterSlots":0,"returnSlots":1},"@setIncentivesController_28044":{"entryPoint":4151,"id":28044,"parameterSlots":1,"returnSlots":0},"@symbol_27985":{"entryPoint":3064,"id":27985,"parameterSlots":0,"returnSlots":1},"@toUint128_1626":{"entryPoint":6906,"id":1626,"parameterSlots":1,"returnSlots":1},"@totalSupply_27369":{"entryPoint":2538,"id":27369,"parameterSlots":0,"returnSlots":1},"@totalSupply_28005":{"entryPoint":null,"id":28005,"parameterSlots":0,"returnSlots":1},"@transferFrom_27447":{"entryPoint":null,"id":27447,"parameterSlots":3,"returnSlots":1},"@transfer_27397":{"entryPoint":null,"id":27397,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":7859,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":8485,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_string":{"entryPoint":8314,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":7919,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":9164,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":8140,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":8075,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256":{"entryPoint":8197,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":7965,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":7875,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256t_uint256":{"entryPoint":8771,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":9193,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IAaveIncentivesController_$3875":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$4860t_addresst_contract$_IAaveIncentivesController_$3875t_uint8t_string_memory_ptrt_string_memory_ptrt_bytes_calldata_ptr":{"entryPoint":8558,"id":null,"parameterSlots":2,"returnSlots":8},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":8979,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint8":{"entryPoint":7948,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_string":{"entryPoint":7696,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":9004,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool_t_uint256__to_t_bool_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IAaveIncentivesController_$3875__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":7803,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":9250,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":8955,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint128":{"entryPoint":9302,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":9227,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":8824,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":8908,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":8267,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":7822,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:16003:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"64:481:201","statements":[{"nodeType":"YulVariableDeclaration","src":"74:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"94:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"88:5:201"},"nodeType":"YulFunctionCall","src":"88:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"78:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"116:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"121:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"109:6:201"},"nodeType":"YulFunctionCall","src":"109:19:201"},"nodeType":"YulExpressionStatement","src":"109:19:201"},{"nodeType":"YulVariableDeclaration","src":"137:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"146:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"141:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"208:110:201","statements":[{"nodeType":"YulVariableDeclaration","src":"222:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"232:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"226:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"264:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"269:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"260:3:201"},"nodeType":"YulFunctionCall","src":"260:11:201"},{"name":"_1","nodeType":"YulIdentifier","src":"273:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"256:3:201"},"nodeType":"YulFunctionCall","src":"256:20:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"292:5:201"},{"name":"i","nodeType":"YulIdentifier","src":"299:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"288:3:201"},"nodeType":"YulFunctionCall","src":"288:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"303:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"284:3:201"},"nodeType":"YulFunctionCall","src":"284:22:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"278:5:201"},"nodeType":"YulFunctionCall","src":"278:29:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"249:6:201"},"nodeType":"YulFunctionCall","src":"249:59:201"},"nodeType":"YulExpressionStatement","src":"249:59:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"167:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"170:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"164:2:201"},"nodeType":"YulFunctionCall","src":"164:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"178:21:201","statements":[{"nodeType":"YulAssignment","src":"180:17:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"189:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"192:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"185:3:201"},"nodeType":"YulFunctionCall","src":"185:12:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"180:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"160:3:201","statements":[]},"src":"156:162:201"},{"body":{"nodeType":"YulBlock","src":"352:62:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"381:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"386:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"377:3:201"},"nodeType":"YulFunctionCall","src":"377:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"395:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"373:3:201"},"nodeType":"YulFunctionCall","src":"373:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"402:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"366:6:201"},"nodeType":"YulFunctionCall","src":"366:38:201"},"nodeType":"YulExpressionStatement","src":"366:38:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"333:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"336:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"330:2:201"},"nodeType":"YulFunctionCall","src":"330:13:201"},"nodeType":"YulIf","src":"327:87:201"},{"nodeType":"YulAssignment","src":"423:116:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"438:3:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"451:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"459:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"447:3:201"},"nodeType":"YulFunctionCall","src":"447:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"464:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"443:3:201"},"nodeType":"YulFunctionCall","src":"443:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"434:3:201"},"nodeType":"YulFunctionCall","src":"434:98:201"},{"kind":"number","nodeType":"YulLiteral","src":"534:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"430:3:201"},"nodeType":"YulFunctionCall","src":"430:109:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"423:3:201"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"41:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"48:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"56:3:201","type":""}],"src":"14:531:201"},{"body":{"nodeType":"YulBlock","src":"671:99:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"688:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"699:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"681:6:201"},"nodeType":"YulFunctionCall","src":"681:21:201"},"nodeType":"YulExpressionStatement","src":"681:21:201"},{"nodeType":"YulAssignment","src":"711:53:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"737:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"749:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"760:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"745:3:201"},"nodeType":"YulFunctionCall","src":"745:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"719:17:201"},"nodeType":"YulFunctionCall","src":"719:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"711:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"640:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"651:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"662:4:201","type":""}],"src":"550:220:201"},{"body":{"nodeType":"YulBlock","src":"820:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"907:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"916:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"919:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"909:6:201"},"nodeType":"YulFunctionCall","src":"909:12:201"},"nodeType":"YulExpressionStatement","src":"909:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"843:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"854:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"861:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:201"},"nodeType":"YulFunctionCall","src":"850:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"840:2:201"},"nodeType":"YulFunctionCall","src":"840:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"833:6:201"},"nodeType":"YulFunctionCall","src":"833:73:201"},"nodeType":"YulIf","src":"830:93:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"809:5:201","type":""}],"src":"775:154:201"},{"body":{"nodeType":"YulBlock","src":"983:85:201","statements":[{"nodeType":"YulAssignment","src":"993:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1015:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1002:12:201"},"nodeType":"YulFunctionCall","src":"1002:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"993:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1056:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1031:24:201"},"nodeType":"YulFunctionCall","src":"1031:31:201"},"nodeType":"YulExpressionStatement","src":"1031:31:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"962:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"973:5:201","type":""}],"src":"934:134:201"},{"body":{"nodeType":"YulBlock","src":"1160:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"1206:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1215:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1218:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1208:6:201"},"nodeType":"YulFunctionCall","src":"1208:12:201"},"nodeType":"YulExpressionStatement","src":"1208:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1181:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1190:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1177:3:201"},"nodeType":"YulFunctionCall","src":"1177:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1202:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1173:3:201"},"nodeType":"YulFunctionCall","src":"1173:32:201"},"nodeType":"YulIf","src":"1170:52:201"},{"nodeType":"YulVariableDeclaration","src":"1231:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1257:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1244:12:201"},"nodeType":"YulFunctionCall","src":"1244:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1235:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1301:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1276:24:201"},"nodeType":"YulFunctionCall","src":"1276:31:201"},"nodeType":"YulExpressionStatement","src":"1276:31:201"},{"nodeType":"YulAssignment","src":"1316:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1326:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1316:6:201"}]},{"nodeType":"YulAssignment","src":"1340:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1367:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1378:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1363:3:201"},"nodeType":"YulFunctionCall","src":"1363:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1350:12:201"},"nodeType":"YulFunctionCall","src":"1350:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1340:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1118:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1129:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1141:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1149:6:201","type":""}],"src":"1073:315:201"},{"body":{"nodeType":"YulBlock","src":"1488:92:201","statements":[{"nodeType":"YulAssignment","src":"1498:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1510:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1521:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1506:3:201"},"nodeType":"YulFunctionCall","src":"1506:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1498:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1540:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1565:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1558:6:201"},"nodeType":"YulFunctionCall","src":"1558:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1551:6:201"},"nodeType":"YulFunctionCall","src":"1551:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1533:6:201"},"nodeType":"YulFunctionCall","src":"1533:41:201"},"nodeType":"YulExpressionStatement","src":"1533:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1457:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1468:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1479:4:201","type":""}],"src":"1393:187:201"},{"body":{"nodeType":"YulBlock","src":"1655:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"1701:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1710:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1713:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1703:6:201"},"nodeType":"YulFunctionCall","src":"1703:12:201"},"nodeType":"YulExpressionStatement","src":"1703:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1676:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1685:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1672:3:201"},"nodeType":"YulFunctionCall","src":"1672:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1697:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1668:3:201"},"nodeType":"YulFunctionCall","src":"1668:32:201"},"nodeType":"YulIf","src":"1665:52:201"},{"nodeType":"YulVariableDeclaration","src":"1726:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1752:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1739:12:201"},"nodeType":"YulFunctionCall","src":"1739:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1730:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1796:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1771:24:201"},"nodeType":"YulFunctionCall","src":"1771:31:201"},"nodeType":"YulExpressionStatement","src":"1771:31:201"},{"nodeType":"YulAssignment","src":"1811:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1821:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1811:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1621:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1632:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1644:6:201","type":""}],"src":"1585:247:201"},{"body":{"nodeType":"YulBlock","src":"1966:119:201","statements":[{"nodeType":"YulAssignment","src":"1976:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1988:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1999:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1984:3:201"},"nodeType":"YulFunctionCall","src":"1984:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1976:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2018:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"2029:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2011:6:201"},"nodeType":"YulFunctionCall","src":"2011:25:201"},"nodeType":"YulExpressionStatement","src":"2011:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2056:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2067:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2052:3:201"},"nodeType":"YulFunctionCall","src":"2052:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"2072:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2045:6:201"},"nodeType":"YulFunctionCall","src":"2045:34:201"},"nodeType":"YulExpressionStatement","src":"2045:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1927:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1938:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1946:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1957:4:201","type":""}],"src":"1837:248:201"},{"body":{"nodeType":"YulBlock","src":"2137:109:201","statements":[{"nodeType":"YulAssignment","src":"2147:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2169:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2156:12:201"},"nodeType":"YulFunctionCall","src":"2156:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"2147:5:201"}]},{"body":{"nodeType":"YulBlock","src":"2224:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2233:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2236:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2226:6:201"},"nodeType":"YulFunctionCall","src":"2226:12:201"},"nodeType":"YulExpressionStatement","src":"2226:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2198:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2209:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2216:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2205:3:201"},"nodeType":"YulFunctionCall","src":"2205:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2195:2:201"},"nodeType":"YulFunctionCall","src":"2195:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2188:6:201"},"nodeType":"YulFunctionCall","src":"2188:35:201"},"nodeType":"YulIf","src":"2185:55:201"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2116:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"2127:5:201","type":""}],"src":"2090:156:201"},{"body":{"nodeType":"YulBlock","src":"2421:564:201","statements":[{"body":{"nodeType":"YulBlock","src":"2468:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2477:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2480:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2470:6:201"},"nodeType":"YulFunctionCall","src":"2470:12:201"},"nodeType":"YulExpressionStatement","src":"2470:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2442:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2451:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2438:3:201"},"nodeType":"YulFunctionCall","src":"2438:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2463:3:201","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2434:3:201"},"nodeType":"YulFunctionCall","src":"2434:33:201"},"nodeType":"YulIf","src":"2431:53:201"},{"nodeType":"YulVariableDeclaration","src":"2493:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2519:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2506:12:201"},"nodeType":"YulFunctionCall","src":"2506:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2497:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2563:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2538:24:201"},"nodeType":"YulFunctionCall","src":"2538:31:201"},"nodeType":"YulExpressionStatement","src":"2538:31:201"},{"nodeType":"YulAssignment","src":"2578:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"2588:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2578:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2602:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2634:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2645:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2630:3:201"},"nodeType":"YulFunctionCall","src":"2630:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2617:12:201"},"nodeType":"YulFunctionCall","src":"2617:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2606:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2683:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2658:24:201"},"nodeType":"YulFunctionCall","src":"2658:33:201"},"nodeType":"YulExpressionStatement","src":"2658:33:201"},{"nodeType":"YulAssignment","src":"2700:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"2710:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2700:6:201"}]},{"nodeType":"YulAssignment","src":"2726:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2753:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2764:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2749:3:201"},"nodeType":"YulFunctionCall","src":"2749:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2736:12:201"},"nodeType":"YulFunctionCall","src":"2736:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2726:6:201"}]},{"nodeType":"YulAssignment","src":"2777:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2804:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2815:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2800:3:201"},"nodeType":"YulFunctionCall","src":"2800:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2787:12:201"},"nodeType":"YulFunctionCall","src":"2787:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2777:6:201"}]},{"nodeType":"YulAssignment","src":"2828:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2859:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2870:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2855:3:201"},"nodeType":"YulFunctionCall","src":"2855:19:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"2838:16:201"},"nodeType":"YulFunctionCall","src":"2838:37:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"2828:6:201"}]},{"nodeType":"YulAssignment","src":"2884:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2911:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2922:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2907:3:201"},"nodeType":"YulFunctionCall","src":"2907:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2894:12:201"},"nodeType":"YulFunctionCall","src":"2894:33:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"2884:6:201"}]},{"nodeType":"YulAssignment","src":"2936:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2963:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2974:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2959:3:201"},"nodeType":"YulFunctionCall","src":"2959:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2946:12:201"},"nodeType":"YulFunctionCall","src":"2946:33:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"2936:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2339:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2350:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2362:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2370:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2378:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2386:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"2394:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"2402:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"2410:6:201","type":""}],"src":"2251:734:201"},{"body":{"nodeType":"YulBlock","src":"3091:76:201","statements":[{"nodeType":"YulAssignment","src":"3101:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3113:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3124:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3109:3:201"},"nodeType":"YulFunctionCall","src":"3109:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3101:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3143:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"3154:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3136:6:201"},"nodeType":"YulFunctionCall","src":"3136:25:201"},"nodeType":"YulExpressionStatement","src":"3136:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3060:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3071:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3082:4:201","type":""}],"src":"2990:177:201"},{"body":{"nodeType":"YulBlock","src":"3276:352:201","statements":[{"body":{"nodeType":"YulBlock","src":"3322:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3331:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3334:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3324:6:201"},"nodeType":"YulFunctionCall","src":"3324:12:201"},"nodeType":"YulExpressionStatement","src":"3324:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3297:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3306:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3293:3:201"},"nodeType":"YulFunctionCall","src":"3293:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3318:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3289:3:201"},"nodeType":"YulFunctionCall","src":"3289:32:201"},"nodeType":"YulIf","src":"3286:52:201"},{"nodeType":"YulVariableDeclaration","src":"3347:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3373:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3360:12:201"},"nodeType":"YulFunctionCall","src":"3360:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3351:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3417:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3392:24:201"},"nodeType":"YulFunctionCall","src":"3392:31:201"},"nodeType":"YulExpressionStatement","src":"3392:31:201"},{"nodeType":"YulAssignment","src":"3432:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3442:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3432:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3456:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3488:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3499:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3484:3:201"},"nodeType":"YulFunctionCall","src":"3484:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3471:12:201"},"nodeType":"YulFunctionCall","src":"3471:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"3460:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3537:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3512:24:201"},"nodeType":"YulFunctionCall","src":"3512:33:201"},"nodeType":"YulExpressionStatement","src":"3512:33:201"},{"nodeType":"YulAssignment","src":"3554:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3564:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3554:6:201"}]},{"nodeType":"YulAssignment","src":"3580:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3607:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3618:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3603:3:201"},"nodeType":"YulFunctionCall","src":"3603:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3590:12:201"},"nodeType":"YulFunctionCall","src":"3590:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3580:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3226:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3237:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3249:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3257:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3265:6:201","type":""}],"src":"3172:456:201"},{"body":{"nodeType":"YulBlock","src":"3730:87:201","statements":[{"nodeType":"YulAssignment","src":"3740:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3752:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3763:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3748:3:201"},"nodeType":"YulFunctionCall","src":"3748:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3740:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3782:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3797:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3805:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3793:3:201"},"nodeType":"YulFunctionCall","src":"3793:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3775:6:201"},"nodeType":"YulFunctionCall","src":"3775:36:201"},"nodeType":"YulExpressionStatement","src":"3775:36:201"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3699:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3710:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3721:4:201","type":""}],"src":"3633:184:201"},{"body":{"nodeType":"YulBlock","src":"3923:76:201","statements":[{"nodeType":"YulAssignment","src":"3933:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3945:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3956:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3941:3:201"},"nodeType":"YulFunctionCall","src":"3941:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3933:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3975:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"3986:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3968:6:201"},"nodeType":"YulFunctionCall","src":"3968:25:201"},"nodeType":"YulExpressionStatement","src":"3968:25:201"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3892:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3903:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3914:4:201","type":""}],"src":"3822:177:201"},{"body":{"nodeType":"YulBlock","src":"4091:301:201","statements":[{"body":{"nodeType":"YulBlock","src":"4137:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4146:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4149:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4139:6:201"},"nodeType":"YulFunctionCall","src":"4139:12:201"},"nodeType":"YulExpressionStatement","src":"4139:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4112:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4121:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4108:3:201"},"nodeType":"YulFunctionCall","src":"4108:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4133:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4104:3:201"},"nodeType":"YulFunctionCall","src":"4104:32:201"},"nodeType":"YulIf","src":"4101:52:201"},{"nodeType":"YulVariableDeclaration","src":"4162:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4188:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4175:12:201"},"nodeType":"YulFunctionCall","src":"4175:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4166:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4232:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4207:24:201"},"nodeType":"YulFunctionCall","src":"4207:31:201"},"nodeType":"YulExpressionStatement","src":"4207:31:201"},{"nodeType":"YulAssignment","src":"4247:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"4257:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4247:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"4271:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4303:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4314:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4299:3:201"},"nodeType":"YulFunctionCall","src":"4299:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4286:12:201"},"nodeType":"YulFunctionCall","src":"4286:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"4275:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"4352:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4327:24:201"},"nodeType":"YulFunctionCall","src":"4327:33:201"},"nodeType":"YulExpressionStatement","src":"4327:33:201"},{"nodeType":"YulAssignment","src":"4369:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"4379:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4369:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4049:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4060:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4072:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4080:6:201","type":""}],"src":"4004:388:201"},{"body":{"nodeType":"YulBlock","src":"4512:125:201","statements":[{"nodeType":"YulAssignment","src":"4522:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4534:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4545:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4530:3:201"},"nodeType":"YulFunctionCall","src":"4530:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4522:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4564:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4579:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4587:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4575:3:201"},"nodeType":"YulFunctionCall","src":"4575:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4557:6:201"},"nodeType":"YulFunctionCall","src":"4557:74:201"},"nodeType":"YulExpressionStatement","src":"4557:74:201"}]},"name":"abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4481:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4492:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4503:4:201","type":""}],"src":"4397:240:201"},{"body":{"nodeType":"YulBlock","src":"4777:125:201","statements":[{"nodeType":"YulAssignment","src":"4787:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4799:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4810:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4795:3:201"},"nodeType":"YulFunctionCall","src":"4795:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4787:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4829:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4844:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4852:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4840:3:201"},"nodeType":"YulFunctionCall","src":"4840:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4822:6:201"},"nodeType":"YulFunctionCall","src":"4822:74:201"},"nodeType":"YulExpressionStatement","src":"4822:74:201"}]},"name":"abi_encode_tuple_t_contract$_IAaveIncentivesController_$3875__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4746:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4757:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4768:4:201","type":""}],"src":"4642:260:201"},{"body":{"nodeType":"YulBlock","src":"5026:99:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5043:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5054:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5036:6:201"},"nodeType":"YulFunctionCall","src":"5036:21:201"},"nodeType":"YulExpressionStatement","src":"5036:21:201"},{"nodeType":"YulAssignment","src":"5066:53:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5092:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5104:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5115:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5100:3:201"},"nodeType":"YulFunctionCall","src":"5100:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"5074:17:201"},"nodeType":"YulFunctionCall","src":"5074:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5066:4:201"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4995:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5006:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5017:4:201","type":""}],"src":"4907:218:201"},{"body":{"nodeType":"YulBlock","src":"5231:125:201","statements":[{"nodeType":"YulAssignment","src":"5241:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5253:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5264:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5249:3:201"},"nodeType":"YulFunctionCall","src":"5249:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5241:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5283:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5298:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5306:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5294:3:201"},"nodeType":"YulFunctionCall","src":"5294:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5276:6:201"},"nodeType":"YulFunctionCall","src":"5276:74:201"},"nodeType":"YulExpressionStatement","src":"5276:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5200:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5211:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5222:4:201","type":""}],"src":"5130:226:201"},{"body":{"nodeType":"YulBlock","src":"5482:404:201","statements":[{"body":{"nodeType":"YulBlock","src":"5529:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5538:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5541:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5531:6:201"},"nodeType":"YulFunctionCall","src":"5531:12:201"},"nodeType":"YulExpressionStatement","src":"5531:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5503:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"5512:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5499:3:201"},"nodeType":"YulFunctionCall","src":"5499:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"5524:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5495:3:201"},"nodeType":"YulFunctionCall","src":"5495:33:201"},"nodeType":"YulIf","src":"5492:53:201"},{"nodeType":"YulVariableDeclaration","src":"5554:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5580:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5567:12:201"},"nodeType":"YulFunctionCall","src":"5567:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5558:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5624:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"5599:24:201"},"nodeType":"YulFunctionCall","src":"5599:31:201"},"nodeType":"YulExpressionStatement","src":"5599:31:201"},{"nodeType":"YulAssignment","src":"5639:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"5649:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5639:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"5663:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5695:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5706:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5691:3:201"},"nodeType":"YulFunctionCall","src":"5691:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5678:12:201"},"nodeType":"YulFunctionCall","src":"5678:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"5667:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"5744:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"5719:24:201"},"nodeType":"YulFunctionCall","src":"5719:33:201"},"nodeType":"YulExpressionStatement","src":"5719:33:201"},{"nodeType":"YulAssignment","src":"5761:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"5771:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5761:6:201"}]},{"nodeType":"YulAssignment","src":"5787:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5814:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5825:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5810:3:201"},"nodeType":"YulFunctionCall","src":"5810:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5797:12:201"},"nodeType":"YulFunctionCall","src":"5797:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5787:6:201"}]},{"nodeType":"YulAssignment","src":"5838:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5865:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5876:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5861:3:201"},"nodeType":"YulFunctionCall","src":"5861:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5848:12:201"},"nodeType":"YulFunctionCall","src":"5848:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"5838:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5424:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5435:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5447:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5455:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5463:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5471:6:201","type":""}],"src":"5361:525:201"},{"body":{"nodeType":"YulBlock","src":"6014:135:201","statements":[{"nodeType":"YulAssignment","src":"6024:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6036:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6047:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6032:3:201"},"nodeType":"YulFunctionCall","src":"6032:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6024:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6066:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6091:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6084:6:201"},"nodeType":"YulFunctionCall","src":"6084:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6077:6:201"},"nodeType":"YulFunctionCall","src":"6077:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6059:6:201"},"nodeType":"YulFunctionCall","src":"6059:41:201"},"nodeType":"YulExpressionStatement","src":"6059:41:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6120:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6131:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6116:3:201"},"nodeType":"YulFunctionCall","src":"6116:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"6136:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6109:6:201"},"nodeType":"YulFunctionCall","src":"6109:34:201"},"nodeType":"YulExpressionStatement","src":"6109:34:201"}]},"name":"abi_encode_tuple_t_bool_t_uint256__to_t_bool_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5975:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5986:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5994:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6005:4:201","type":""}],"src":"5891:258:201"},{"body":{"nodeType":"YulBlock","src":"6186:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6203:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6206:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6196:6:201"},"nodeType":"YulFunctionCall","src":"6196:88:201"},"nodeType":"YulExpressionStatement","src":"6196:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6300:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6303:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6293:6:201"},"nodeType":"YulFunctionCall","src":"6293:15:201"},"nodeType":"YulExpressionStatement","src":"6293:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6324:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6327:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6317:6:201"},"nodeType":"YulFunctionCall","src":"6317:15:201"},"nodeType":"YulExpressionStatement","src":"6317:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"6154:184:201"},{"body":{"nodeType":"YulBlock","src":"6396:725:201","statements":[{"body":{"nodeType":"YulBlock","src":"6445:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6454:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6457:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6447:6:201"},"nodeType":"YulFunctionCall","src":"6447:12:201"},"nodeType":"YulExpressionStatement","src":"6447:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6424:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"6432:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6420:3:201"},"nodeType":"YulFunctionCall","src":"6420:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"6439:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6416:3:201"},"nodeType":"YulFunctionCall","src":"6416:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6409:6:201"},"nodeType":"YulFunctionCall","src":"6409:35:201"},"nodeType":"YulIf","src":"6406:55:201"},{"nodeType":"YulVariableDeclaration","src":"6470:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6493:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6480:12:201"},"nodeType":"YulFunctionCall","src":"6480:20:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6474:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6509:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6519:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"6513:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"6560:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"6562:16:201"},"nodeType":"YulFunctionCall","src":"6562:18:201"},"nodeType":"YulExpressionStatement","src":"6562:18:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"6552:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"6556:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6549:2:201"},"nodeType":"YulFunctionCall","src":"6549:10:201"},"nodeType":"YulIf","src":"6546:36:201"},{"nodeType":"YulVariableDeclaration","src":"6591:76:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6601:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"6595:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6676:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6696:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6690:5:201"},"nodeType":"YulFunctionCall","src":"6690:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"6680:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6708:71:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6730:6:201"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"6754:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"6758:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6750:3:201"},"nodeType":"YulFunctionCall","src":"6750:13:201"},{"name":"_3","nodeType":"YulIdentifier","src":"6765:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6746:3:201"},"nodeType":"YulFunctionCall","src":"6746:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"6770:2:201","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6742:3:201"},"nodeType":"YulFunctionCall","src":"6742:31:201"},{"name":"_3","nodeType":"YulIdentifier","src":"6775:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6738:3:201"},"nodeType":"YulFunctionCall","src":"6738:40:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6726:3:201"},"nodeType":"YulFunctionCall","src":"6726:53:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"6712:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"6838:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"6840:16:201"},"nodeType":"YulFunctionCall","src":"6840:18:201"},"nodeType":"YulExpressionStatement","src":"6840:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6797:10:201"},{"name":"_2","nodeType":"YulIdentifier","src":"6809:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6794:2:201"},"nodeType":"YulFunctionCall","src":"6794:18:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6817:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"6829:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6814:2:201"},"nodeType":"YulFunctionCall","src":"6814:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"6791:2:201"},"nodeType":"YulFunctionCall","src":"6791:46:201"},"nodeType":"YulIf","src":"6788:72:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6876:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6880:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6869:6:201"},"nodeType":"YulFunctionCall","src":"6869:22:201"},"nodeType":"YulExpressionStatement","src":"6869:22:201"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6907:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6915:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6900:6:201"},"nodeType":"YulFunctionCall","src":"6900:18:201"},"nodeType":"YulExpressionStatement","src":"6900:18:201"},{"body":{"nodeType":"YulBlock","src":"6966:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6975:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6978:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6968:6:201"},"nodeType":"YulFunctionCall","src":"6968:12:201"},"nodeType":"YulExpressionStatement","src":"6968:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6941:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6949:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6937:3:201"},"nodeType":"YulFunctionCall","src":"6937:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"6954:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6933:3:201"},"nodeType":"YulFunctionCall","src":"6933:26:201"},{"name":"end","nodeType":"YulIdentifier","src":"6961:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6930:2:201"},"nodeType":"YulFunctionCall","src":"6930:35:201"},"nodeType":"YulIf","src":"6927:55:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7008:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7016:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7004:3:201"},"nodeType":"YulFunctionCall","src":"7004:17:201"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7027:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7035:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7023:3:201"},"nodeType":"YulFunctionCall","src":"7023:17:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7042:2:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"6991:12:201"},"nodeType":"YulFunctionCall","src":"6991:54:201"},"nodeType":"YulExpressionStatement","src":"6991:54:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7069:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7077:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7065:3:201"},"nodeType":"YulFunctionCall","src":"7065:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"7082:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7061:3:201"},"nodeType":"YulFunctionCall","src":"7061:26:201"},{"kind":"number","nodeType":"YulLiteral","src":"7089:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7054:6:201"},"nodeType":"YulFunctionCall","src":"7054:37:201"},"nodeType":"YulExpressionStatement","src":"7054:37:201"},{"nodeType":"YulAssignment","src":"7100:15:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"7109:6:201"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"7100:5:201"}]}]},"name":"abi_decode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"6370:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"6378:3:201","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"6386:5:201","type":""}],"src":"6343:778:201"},{"body":{"nodeType":"YulBlock","src":"7198:275:201","statements":[{"body":{"nodeType":"YulBlock","src":"7247:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7256:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7259:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7249:6:201"},"nodeType":"YulFunctionCall","src":"7249:12:201"},"nodeType":"YulExpressionStatement","src":"7249:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7226:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7234:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7222:3:201"},"nodeType":"YulFunctionCall","src":"7222:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"7241:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7218:3:201"},"nodeType":"YulFunctionCall","src":"7218:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7211:6:201"},"nodeType":"YulFunctionCall","src":"7211:35:201"},"nodeType":"YulIf","src":"7208:55:201"},{"nodeType":"YulAssignment","src":"7272:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7295:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7282:12:201"},"nodeType":"YulFunctionCall","src":"7282:20:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"7272:6:201"}]},{"body":{"nodeType":"YulBlock","src":"7345:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7354:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7357:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7347:6:201"},"nodeType":"YulFunctionCall","src":"7347:12:201"},"nodeType":"YulExpressionStatement","src":"7347:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"7317:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7325:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7314:2:201"},"nodeType":"YulFunctionCall","src":"7314:30:201"},"nodeType":"YulIf","src":"7311:50:201"},{"nodeType":"YulAssignment","src":"7370:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7386:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7394:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7382:3:201"},"nodeType":"YulFunctionCall","src":"7382:17:201"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"7370:8:201"}]},{"body":{"nodeType":"YulBlock","src":"7451:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7460:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7463:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7453:6:201"},"nodeType":"YulFunctionCall","src":"7453:12:201"},"nodeType":"YulExpressionStatement","src":"7453:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7422:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"7430:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7418:3:201"},"nodeType":"YulFunctionCall","src":"7418:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"7439:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7414:3:201"},"nodeType":"YulFunctionCall","src":"7414:30:201"},{"name":"end","nodeType":"YulIdentifier","src":"7446:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7411:2:201"},"nodeType":"YulFunctionCall","src":"7411:39:201"},"nodeType":"YulIf","src":"7408:59:201"}]},"name":"abi_decode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7161:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"7169:3:201","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"7177:8:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"7187:6:201","type":""}],"src":"7126:347:201"},{"body":{"nodeType":"YulBlock","src":"7735:1045:201","statements":[{"body":{"nodeType":"YulBlock","src":"7782:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7791:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7794:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7784:6:201"},"nodeType":"YulFunctionCall","src":"7784:12:201"},"nodeType":"YulExpressionStatement","src":"7784:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7756:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"7765:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7752:3:201"},"nodeType":"YulFunctionCall","src":"7752:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"7777:3:201","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7748:3:201"},"nodeType":"YulFunctionCall","src":"7748:33:201"},"nodeType":"YulIf","src":"7745:53:201"},{"nodeType":"YulVariableDeclaration","src":"7807:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7833:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7820:12:201"},"nodeType":"YulFunctionCall","src":"7820:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7811:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7877:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7852:24:201"},"nodeType":"YulFunctionCall","src":"7852:31:201"},"nodeType":"YulExpressionStatement","src":"7852:31:201"},{"nodeType":"YulAssignment","src":"7892:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"7902:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7892:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"7916:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7948:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7959:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7944:3:201"},"nodeType":"YulFunctionCall","src":"7944:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7931:12:201"},"nodeType":"YulFunctionCall","src":"7931:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7920:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7997:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7972:24:201"},"nodeType":"YulFunctionCall","src":"7972:33:201"},"nodeType":"YulExpressionStatement","src":"7972:33:201"},{"nodeType":"YulAssignment","src":"8014:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"8024:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"8014:6:201"}]},{"nodeType":"YulAssignment","src":"8040:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8073:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8084:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8069:3:201"},"nodeType":"YulFunctionCall","src":"8069:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"8050:18:201"},"nodeType":"YulFunctionCall","src":"8050:38:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"8040:6:201"}]},{"nodeType":"YulAssignment","src":"8097:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8128:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8139:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8124:3:201"},"nodeType":"YulFunctionCall","src":"8124:18:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"8107:16:201"},"nodeType":"YulFunctionCall","src":"8107:36:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"8097:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"8152:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8183:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8194:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8179:3:201"},"nodeType":"YulFunctionCall","src":"8179:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8166:12:201"},"nodeType":"YulFunctionCall","src":"8166:33:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"8156:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8208:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8218:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8212:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"8263:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8272:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8275:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8265:6:201"},"nodeType":"YulFunctionCall","src":"8265:12:201"},"nodeType":"YulExpressionStatement","src":"8265:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8251:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"8259:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8248:2:201"},"nodeType":"YulFunctionCall","src":"8248:14:201"},"nodeType":"YulIf","src":"8245:34:201"},{"nodeType":"YulAssignment","src":"8288:60:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8320:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"8331:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8316:3:201"},"nodeType":"YulFunctionCall","src":"8316:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"8340:7:201"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"8298:17:201"},"nodeType":"YulFunctionCall","src":"8298:50:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"8288:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"8357:49:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8390:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8401:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8386:3:201"},"nodeType":"YulFunctionCall","src":"8386:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8373:12:201"},"nodeType":"YulFunctionCall","src":"8373:33:201"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"8361:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"8435:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8444:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8447:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8437:6:201"},"nodeType":"YulFunctionCall","src":"8437:12:201"},"nodeType":"YulExpressionStatement","src":"8437:12:201"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"8421:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"8431:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8418:2:201"},"nodeType":"YulFunctionCall","src":"8418:16:201"},"nodeType":"YulIf","src":"8415:36:201"},{"nodeType":"YulAssignment","src":"8460:62:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8492:9:201"},{"name":"offset_1","nodeType":"YulIdentifier","src":"8503:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8488:3:201"},"nodeType":"YulFunctionCall","src":"8488:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"8514:7:201"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"8470:17:201"},"nodeType":"YulFunctionCall","src":"8470:52:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"8460:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"8531:49:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8564:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8575:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8560:3:201"},"nodeType":"YulFunctionCall","src":"8560:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8547:12:201"},"nodeType":"YulFunctionCall","src":"8547:33:201"},"variables":[{"name":"offset_2","nodeType":"YulTypedName","src":"8535:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"8609:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8618:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8621:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8611:6:201"},"nodeType":"YulFunctionCall","src":"8611:12:201"},"nodeType":"YulExpressionStatement","src":"8611:12:201"}]},"condition":{"arguments":[{"name":"offset_2","nodeType":"YulIdentifier","src":"8595:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"8605:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8592:2:201"},"nodeType":"YulFunctionCall","src":"8592:16:201"},"nodeType":"YulIf","src":"8589:36:201"},{"nodeType":"YulVariableDeclaration","src":"8634:86:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8690:9:201"},{"name":"offset_2","nodeType":"YulIdentifier","src":"8701:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8686:3:201"},"nodeType":"YulFunctionCall","src":"8686:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"8712:7:201"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"8660:25:201"},"nodeType":"YulFunctionCall","src":"8660:60:201"},"variables":[{"name":"value6_1","nodeType":"YulTypedName","src":"8638:8:201","type":""},{"name":"value7_1","nodeType":"YulTypedName","src":"8648:8:201","type":""}]},{"nodeType":"YulAssignment","src":"8729:18:201","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"8739:8:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"8729:6:201"}]},{"nodeType":"YulAssignment","src":"8756:18:201","value":{"name":"value7_1","nodeType":"YulIdentifier","src":"8766:8:201"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"8756:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$4860t_addresst_contract$_IAaveIncentivesController_$3875t_uint8t_string_memory_ptrt_string_memory_ptrt_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7645:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7656:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7668:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7676:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7684:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"7692:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"7700:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"7708:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"7716:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"7724:6:201","type":""}],"src":"7478:1302:201"},{"body":{"nodeType":"YulBlock","src":"8889:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"8935:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8944:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8947:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8937:6:201"},"nodeType":"YulFunctionCall","src":"8937:12:201"},"nodeType":"YulExpressionStatement","src":"8937:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8910:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"8919:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8906:3:201"},"nodeType":"YulFunctionCall","src":"8906:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"8931:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8902:3:201"},"nodeType":"YulFunctionCall","src":"8902:32:201"},"nodeType":"YulIf","src":"8899:52:201"},{"nodeType":"YulVariableDeclaration","src":"8960:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8986:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8973:12:201"},"nodeType":"YulFunctionCall","src":"8973:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"8964:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9030:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9005:24:201"},"nodeType":"YulFunctionCall","src":"9005:31:201"},"nodeType":"YulExpressionStatement","src":"9005:31:201"},{"nodeType":"YulAssignment","src":"9045:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"9055:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9045:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IAaveIncentivesController_$3875","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8855:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8866:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8878:6:201","type":""}],"src":"8785:281:201"},{"body":{"nodeType":"YulBlock","src":"9175:279:201","statements":[{"body":{"nodeType":"YulBlock","src":"9221:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9230:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9233:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9223:6:201"},"nodeType":"YulFunctionCall","src":"9223:12:201"},"nodeType":"YulExpressionStatement","src":"9223:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9196:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"9205:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9192:3:201"},"nodeType":"YulFunctionCall","src":"9192:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"9217:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9188:3:201"},"nodeType":"YulFunctionCall","src":"9188:32:201"},"nodeType":"YulIf","src":"9185:52:201"},{"nodeType":"YulVariableDeclaration","src":"9246:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9272:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9259:12:201"},"nodeType":"YulFunctionCall","src":"9259:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9250:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9316:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9291:24:201"},"nodeType":"YulFunctionCall","src":"9291:31:201"},"nodeType":"YulExpressionStatement","src":"9291:31:201"},{"nodeType":"YulAssignment","src":"9331:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"9341:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9331:6:201"}]},{"nodeType":"YulAssignment","src":"9355:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9382:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9393:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9378:3:201"},"nodeType":"YulFunctionCall","src":"9378:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9365:12:201"},"nodeType":"YulFunctionCall","src":"9365:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"9355:6:201"}]},{"nodeType":"YulAssignment","src":"9406:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9433:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9444:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9429:3:201"},"nodeType":"YulFunctionCall","src":"9429:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9416:12:201"},"nodeType":"YulFunctionCall","src":"9416:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"9406:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9125:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9136:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9148:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9156:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9164:6:201","type":""}],"src":"9071:383:201"},{"body":{"nodeType":"YulBlock","src":"9514:382:201","statements":[{"nodeType":"YulAssignment","src":"9524:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9538:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"9541:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"9534:3:201"},"nodeType":"YulFunctionCall","src":"9534:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"9524:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"9555:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"9585:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"9591:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9581:3:201"},"nodeType":"YulFunctionCall","src":"9581:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"9559:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"9632:31:201","statements":[{"nodeType":"YulAssignment","src":"9634:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9648:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"9656:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9644:3:201"},"nodeType":"YulFunctionCall","src":"9644:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"9634:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"9612:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9605:6:201"},"nodeType":"YulFunctionCall","src":"9605:26:201"},"nodeType":"YulIf","src":"9602:61:201"},{"body":{"nodeType":"YulBlock","src":"9722:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9743:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9746:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9736:6:201"},"nodeType":"YulFunctionCall","src":"9736:88:201"},"nodeType":"YulExpressionStatement","src":"9736:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9844:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"9847:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9837:6:201"},"nodeType":"YulFunctionCall","src":"9837:15:201"},"nodeType":"YulExpressionStatement","src":"9837:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9872:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9875:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9865:6:201"},"nodeType":"YulFunctionCall","src":"9865:15:201"},"nodeType":"YulExpressionStatement","src":"9865:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"9678:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9701:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"9709:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9698:2:201"},"nodeType":"YulFunctionCall","src":"9698:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"9675:2:201"},"nodeType":"YulFunctionCall","src":"9675:38:201"},"nodeType":"YulIf","src":"9672:218:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"9494:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"9503:6:201","type":""}],"src":"9459:437:201"},{"body":{"nodeType":"YulBlock","src":"10114:299:201","statements":[{"nodeType":"YulAssignment","src":"10124:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10136:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10147:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10132:3:201"},"nodeType":"YulFunctionCall","src":"10132:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10124:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10167:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"10178:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10160:6:201"},"nodeType":"YulFunctionCall","src":"10160:25:201"},"nodeType":"YulExpressionStatement","src":"10160:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10205:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10216:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10201:3:201"},"nodeType":"YulFunctionCall","src":"10201:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10225:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10233:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10221:3:201"},"nodeType":"YulFunctionCall","src":"10221:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10194:6:201"},"nodeType":"YulFunctionCall","src":"10194:83:201"},"nodeType":"YulExpressionStatement","src":"10194:83:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10297:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10308:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10293:3:201"},"nodeType":"YulFunctionCall","src":"10293:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"10313:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10286:6:201"},"nodeType":"YulFunctionCall","src":"10286:34:201"},"nodeType":"YulExpressionStatement","src":"10286:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10340:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10351:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10336:3:201"},"nodeType":"YulFunctionCall","src":"10336:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"10356:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10329:6:201"},"nodeType":"YulFunctionCall","src":"10329:34:201"},"nodeType":"YulExpressionStatement","src":"10329:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10383:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10394:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10379:3:201"},"nodeType":"YulFunctionCall","src":"10379:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"10400:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10372:6:201"},"nodeType":"YulFunctionCall","src":"10372:35:201"},"nodeType":"YulExpressionStatement","src":"10372:35:201"}]},"name":"abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10051:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"10062:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"10070:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10078:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10086:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10094:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10105:4:201","type":""}],"src":"9901:512:201"},{"body":{"nodeType":"YulBlock","src":"10666:196:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10683:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"10688:66:201","type":"","value":"0x1901000000000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10676:6:201"},"nodeType":"YulFunctionCall","src":"10676:79:201"},"nodeType":"YulExpressionStatement","src":"10676:79:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10775:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"10780:1:201","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10771:3:201"},"nodeType":"YulFunctionCall","src":"10771:11:201"},{"name":"value0","nodeType":"YulIdentifier","src":"10784:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10764:6:201"},"nodeType":"YulFunctionCall","src":"10764:27:201"},"nodeType":"YulExpressionStatement","src":"10764:27:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10811:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"10816:2:201","type":"","value":"34"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10807:3:201"},"nodeType":"YulFunctionCall","src":"10807:12:201"},{"name":"value1","nodeType":"YulIdentifier","src":"10821:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10800:6:201"},"nodeType":"YulFunctionCall","src":"10800:28:201"},"nodeType":"YulExpressionStatement","src":"10800:28:201"},{"nodeType":"YulAssignment","src":"10837:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10848:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"10853:2:201","type":"","value":"66"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10844:3:201"},"nodeType":"YulFunctionCall","src":"10844:12:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"10837:3:201"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"10634:3:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10639:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10647:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"10658:3:201","type":""}],"src":"10418:444:201"},{"body":{"nodeType":"YulBlock","src":"11048:217:201","statements":[{"nodeType":"YulAssignment","src":"11058:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11070:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11081:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11066:3:201"},"nodeType":"YulFunctionCall","src":"11066:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11058:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11101:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"11112:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11094:6:201"},"nodeType":"YulFunctionCall","src":"11094:25:201"},"nodeType":"YulExpressionStatement","src":"11094:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11139:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11150:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11135:3:201"},"nodeType":"YulFunctionCall","src":"11135:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11159:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"11167:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11155:3:201"},"nodeType":"YulFunctionCall","src":"11155:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11128:6:201"},"nodeType":"YulFunctionCall","src":"11128:45:201"},"nodeType":"YulExpressionStatement","src":"11128:45:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11193:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11204:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11189:3:201"},"nodeType":"YulFunctionCall","src":"11189:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"11209:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11182:6:201"},"nodeType":"YulFunctionCall","src":"11182:34:201"},"nodeType":"YulExpressionStatement","src":"11182:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11236:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11247:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11232:3:201"},"nodeType":"YulFunctionCall","src":"11232:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"11252:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11225:6:201"},"nodeType":"YulFunctionCall","src":"11225:34:201"},"nodeType":"YulExpressionStatement","src":"11225:34:201"}]},"name":"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10993:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11004:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11012:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11020:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11028:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11039:4:201","type":""}],"src":"10867:398:201"},{"body":{"nodeType":"YulBlock","src":"11302:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11319:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11322:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11312:6:201"},"nodeType":"YulFunctionCall","src":"11312:88:201"},"nodeType":"YulExpressionStatement","src":"11312:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11416:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"11419:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11409:6:201"},"nodeType":"YulFunctionCall","src":"11409:15:201"},"nodeType":"YulExpressionStatement","src":"11409:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11440:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11443:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11433:6:201"},"nodeType":"YulFunctionCall","src":"11433:15:201"},"nodeType":"YulExpressionStatement","src":"11433:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"11270:184:201"},{"body":{"nodeType":"YulBlock","src":"11507:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"11534:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11536:16:201"},"nodeType":"YulFunctionCall","src":"11536:18:201"},"nodeType":"YulExpressionStatement","src":"11536:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11523:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"11530:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"11526:3:201"},"nodeType":"YulFunctionCall","src":"11526:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11520:2:201"},"nodeType":"YulFunctionCall","src":"11520:13:201"},"nodeType":"YulIf","src":"11517:39:201"},{"nodeType":"YulAssignment","src":"11565:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11576:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"11579:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11572:3:201"},"nodeType":"YulFunctionCall","src":"11572:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"11565:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11490:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"11493:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"11499:3:201","type":""}],"src":"11459:128:201"},{"body":{"nodeType":"YulBlock","src":"11673:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"11719:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11728:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11731:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11721:6:201"},"nodeType":"YulFunctionCall","src":"11721:12:201"},"nodeType":"YulExpressionStatement","src":"11721:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11694:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"11703:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11690:3:201"},"nodeType":"YulFunctionCall","src":"11690:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"11715:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11686:3:201"},"nodeType":"YulFunctionCall","src":"11686:32:201"},"nodeType":"YulIf","src":"11683:52:201"},{"nodeType":"YulAssignment","src":"11744:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11760:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11754:5:201"},"nodeType":"YulFunctionCall","src":"11754:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11744:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11639:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11650:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11662:6:201","type":""}],"src":"11592:184:201"},{"body":{"nodeType":"YulBlock","src":"11955:236:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11972:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11983:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11965:6:201"},"nodeType":"YulFunctionCall","src":"11965:21:201"},"nodeType":"YulExpressionStatement","src":"11965:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12006:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12017:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12002:3:201"},"nodeType":"YulFunctionCall","src":"12002:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"12022:2:201","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11995:6:201"},"nodeType":"YulFunctionCall","src":"11995:30:201"},"nodeType":"YulExpressionStatement","src":"11995:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12045:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12056:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12041:3:201"},"nodeType":"YulFunctionCall","src":"12041:18:201"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"12061:34:201","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12034:6:201"},"nodeType":"YulFunctionCall","src":"12034:62:201"},"nodeType":"YulExpressionStatement","src":"12034:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12116:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12127:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12112:3:201"},"nodeType":"YulFunctionCall","src":"12112:18:201"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"12132:16:201","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12105:6:201"},"nodeType":"YulFunctionCall","src":"12105:44:201"},"nodeType":"YulExpressionStatement","src":"12105:44:201"},{"nodeType":"YulAssignment","src":"12158:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12170:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12181:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12166:3:201"},"nodeType":"YulFunctionCall","src":"12166:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12158:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11932:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11946:4:201","type":""}],"src":"11781:410:201"},{"body":{"nodeType":"YulBlock","src":"12473:688:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12490:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12505:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"12513:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12501:3:201"},"nodeType":"YulFunctionCall","src":"12501:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12483:6:201"},"nodeType":"YulFunctionCall","src":"12483:74:201"},"nodeType":"YulExpressionStatement","src":"12483:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12577:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12588:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12573:3:201"},"nodeType":"YulFunctionCall","src":"12573:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12597:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"12605:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12593:3:201"},"nodeType":"YulFunctionCall","src":"12593:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12566:6:201"},"nodeType":"YulFunctionCall","src":"12566:45:201"},"nodeType":"YulExpressionStatement","src":"12566:45:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12631:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12642:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12627:3:201"},"nodeType":"YulFunctionCall","src":"12627:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"12647:3:201","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12620:6:201"},"nodeType":"YulFunctionCall","src":"12620:31:201"},"nodeType":"YulExpressionStatement","src":"12620:31:201"},{"nodeType":"YulVariableDeclaration","src":"12660:60:201","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"12692:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12704:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12715:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12700:3:201"},"nodeType":"YulFunctionCall","src":"12700:19:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"12674:17:201"},"nodeType":"YulFunctionCall","src":"12674:46:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"12664:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12740:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12751:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12736:3:201"},"nodeType":"YulFunctionCall","src":"12736:18:201"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"12760:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"12768:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12756:3:201"},"nodeType":"YulFunctionCall","src":"12756:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12729:6:201"},"nodeType":"YulFunctionCall","src":"12729:50:201"},"nodeType":"YulExpressionStatement","src":"12729:50:201"},{"nodeType":"YulVariableDeclaration","src":"12788:47:201","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"12820:6:201"},{"name":"tail_1","nodeType":"YulIdentifier","src":"12828:6:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"12802:17:201"},"nodeType":"YulFunctionCall","src":"12802:33:201"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"12792:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12855:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12866:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12851:3:201"},"nodeType":"YulFunctionCall","src":"12851:19:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"12876:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"12884:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12872:3:201"},"nodeType":"YulFunctionCall","src":"12872:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12844:6:201"},"nodeType":"YulFunctionCall","src":"12844:51:201"},"nodeType":"YulExpressionStatement","src":"12844:51:201"},{"expression":{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"12911:6:201"},{"name":"value5","nodeType":"YulIdentifier","src":"12919:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12904:6:201"},"nodeType":"YulFunctionCall","src":"12904:22:201"},"nodeType":"YulExpressionStatement","src":"12904:22:201"},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"12952:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"12960:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12948:3:201"},"nodeType":"YulFunctionCall","src":"12948:15:201"},{"name":"value4","nodeType":"YulIdentifier","src":"12965:6:201"},{"name":"value5","nodeType":"YulIdentifier","src":"12973:6:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"12935:12:201"},"nodeType":"YulFunctionCall","src":"12935:45:201"},"nodeType":"YulExpressionStatement","src":"12935:45:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"13004:6:201"},{"name":"value5","nodeType":"YulIdentifier","src":"13012:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13000:3:201"},"nodeType":"YulFunctionCall","src":"13000:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"13021:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12996:3:201"},"nodeType":"YulFunctionCall","src":"12996:28:201"},{"kind":"number","nodeType":"YulLiteral","src":"13026:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12989:6:201"},"nodeType":"YulFunctionCall","src":"12989:39:201"},"nodeType":"YulExpressionStatement","src":"12989:39:201"},{"nodeType":"YulAssignment","src":"13037:118:201","value":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"13053:6:201"},{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"13069:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13077:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13065:3:201"},"nodeType":"YulFunctionCall","src":"13065:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"13082:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13061:3:201"},"nodeType":"YulFunctionCall","src":"13061:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13049:3:201"},"nodeType":"YulFunctionCall","src":"13049:101:201"},{"kind":"number","nodeType":"YulLiteral","src":"13152:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13045:3:201"},"nodeType":"YulFunctionCall","src":"13045:110:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13037:4:201"}]}]},"name":"abi_encode_tuple_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12402:9:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"12413:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12421:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12429:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12437:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12445:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12453:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12464:4:201","type":""}],"src":"12196:965:201"},{"body":{"nodeType":"YulBlock","src":"13247:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"13293:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13302:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13305:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13295:6:201"},"nodeType":"YulFunctionCall","src":"13295:12:201"},"nodeType":"YulExpressionStatement","src":"13295:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13268:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"13277:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13264:3:201"},"nodeType":"YulFunctionCall","src":"13264:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"13289:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13260:3:201"},"nodeType":"YulFunctionCall","src":"13260:32:201"},"nodeType":"YulIf","src":"13257:52:201"},{"nodeType":"YulVariableDeclaration","src":"13318:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13337:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13331:5:201"},"nodeType":"YulFunctionCall","src":"13331:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13322:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13381:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"13356:24:201"},"nodeType":"YulFunctionCall","src":"13356:31:201"},"nodeType":"YulExpressionStatement","src":"13356:31:201"},{"nodeType":"YulAssignment","src":"13396:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"13406:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13396:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13213:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13224:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13236:6:201","type":""}],"src":"13166:251:201"},{"body":{"nodeType":"YulBlock","src":"13500:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"13546:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13555:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13558:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13548:6:201"},"nodeType":"YulFunctionCall","src":"13548:12:201"},"nodeType":"YulExpressionStatement","src":"13548:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13521:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"13530:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13517:3:201"},"nodeType":"YulFunctionCall","src":"13517:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"13542:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13513:3:201"},"nodeType":"YulFunctionCall","src":"13513:32:201"},"nodeType":"YulIf","src":"13510:52:201"},{"nodeType":"YulVariableDeclaration","src":"13571:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13590:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13584:5:201"},"nodeType":"YulFunctionCall","src":"13584:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13575:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"13653:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13662:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13665:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13655:6:201"},"nodeType":"YulFunctionCall","src":"13655:12:201"},"nodeType":"YulExpressionStatement","src":"13655:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13622:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13643:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13636:6:201"},"nodeType":"YulFunctionCall","src":"13636:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13629:6:201"},"nodeType":"YulFunctionCall","src":"13629:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"13619:2:201"},"nodeType":"YulFunctionCall","src":"13619:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13612:6:201"},"nodeType":"YulFunctionCall","src":"13612:40:201"},"nodeType":"YulIf","src":"13609:60:201"},{"nodeType":"YulAssignment","src":"13678:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"13688:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13678:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13466:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13477:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13489:6:201","type":""}],"src":"13422:277:201"},{"body":{"nodeType":"YulBlock","src":"13917:299:201","statements":[{"nodeType":"YulAssignment","src":"13927:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13939:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13950:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13935:3:201"},"nodeType":"YulFunctionCall","src":"13935:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13927:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13970:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"13981:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13963:6:201"},"nodeType":"YulFunctionCall","src":"13963:25:201"},"nodeType":"YulExpressionStatement","src":"13963:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14008:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14019:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14004:3:201"},"nodeType":"YulFunctionCall","src":"14004:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"14024:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13997:6:201"},"nodeType":"YulFunctionCall","src":"13997:34:201"},"nodeType":"YulExpressionStatement","src":"13997:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14051:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14062:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14047:3:201"},"nodeType":"YulFunctionCall","src":"14047:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"14067:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14040:6:201"},"nodeType":"YulFunctionCall","src":"14040:34:201"},"nodeType":"YulExpressionStatement","src":"14040:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14094:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14105:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14090:3:201"},"nodeType":"YulFunctionCall","src":"14090:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"14110:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14083:6:201"},"nodeType":"YulFunctionCall","src":"14083:34:201"},"nodeType":"YulExpressionStatement","src":"14083:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14137:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14148:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14133:3:201"},"nodeType":"YulFunctionCall","src":"14133:19:201"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"14158:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"14166:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14154:3:201"},"nodeType":"YulFunctionCall","src":"14154:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14126:6:201"},"nodeType":"YulFunctionCall","src":"14126:84:201"},"nodeType":"YulExpressionStatement","src":"14126:84:201"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13854:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"13865:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13873:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13881:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13889:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13897:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13908:4:201","type":""}],"src":"13704:512:201"},{"body":{"nodeType":"YulBlock","src":"14270:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"14292:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"14294:16:201"},"nodeType":"YulFunctionCall","src":"14294:18:201"},"nodeType":"YulExpressionStatement","src":"14294:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"14286:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"14289:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"14283:2:201"},"nodeType":"YulFunctionCall","src":"14283:8:201"},"nodeType":"YulIf","src":"14280:34:201"},{"nodeType":"YulAssignment","src":"14323:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"14335:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"14338:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14331:3:201"},"nodeType":"YulFunctionCall","src":"14331:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"14323:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"14252:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"14255:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"14261:4:201","type":""}],"src":"14221:125:201"},{"body":{"nodeType":"YulBlock","src":"14508:162:201","statements":[{"nodeType":"YulAssignment","src":"14518:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14530:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14541:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14526:3:201"},"nodeType":"YulFunctionCall","src":"14526:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14518:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14560:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"14571:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14553:6:201"},"nodeType":"YulFunctionCall","src":"14553:25:201"},"nodeType":"YulExpressionStatement","src":"14553:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14598:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14609:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14594:3:201"},"nodeType":"YulFunctionCall","src":"14594:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"14614:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14587:6:201"},"nodeType":"YulFunctionCall","src":"14587:34:201"},"nodeType":"YulExpressionStatement","src":"14587:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14641:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14652:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14637:3:201"},"nodeType":"YulFunctionCall","src":"14637:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"14657:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14630:6:201"},"nodeType":"YulFunctionCall","src":"14630:34:201"},"nodeType":"YulExpressionStatement","src":"14630:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14461:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14472:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14480:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14488:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14499:4:201","type":""}],"src":"14351:319:201"},{"body":{"nodeType":"YulBlock","src":"14849:229:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14866:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14877:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14859:6:201"},"nodeType":"YulFunctionCall","src":"14859:21:201"},"nodeType":"YulExpressionStatement","src":"14859:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14900:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14911:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14896:3:201"},"nodeType":"YulFunctionCall","src":"14896:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"14916:2:201","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14889:6:201"},"nodeType":"YulFunctionCall","src":"14889:30:201"},"nodeType":"YulExpressionStatement","src":"14889:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14939:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14950:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14935:3:201"},"nodeType":"YulFunctionCall","src":"14935:18:201"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"14955:34:201","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14928:6:201"},"nodeType":"YulFunctionCall","src":"14928:62:201"},"nodeType":"YulExpressionStatement","src":"14928:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15010:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15021:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15006:3:201"},"nodeType":"YulFunctionCall","src":"15006:18:201"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"15026:9:201","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14999:6:201"},"nodeType":"YulFunctionCall","src":"14999:37:201"},"nodeType":"YulExpressionStatement","src":"14999:37:201"},{"nodeType":"YulAssignment","src":"15045:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15057:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15068:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15053:3:201"},"nodeType":"YulFunctionCall","src":"15053:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15045:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14826:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14840:4:201","type":""}],"src":"14675:403:201"},{"body":{"nodeType":"YulBlock","src":"15131:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"15141:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"15151:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15145:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15194:21:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15209:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15212:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15205:3:201"},"nodeType":"YulFunctionCall","src":"15205:10:201"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15198:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15224:21:201","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"15239:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15242:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15235:3:201"},"nodeType":"YulFunctionCall","src":"15235:10:201"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"15228:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"15279:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15281:16:201"},"nodeType":"YulFunctionCall","src":"15281:18:201"},"nodeType":"YulExpressionStatement","src":"15281:18:201"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15260:3:201"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"15269:2:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"15273:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15265:3:201"},"nodeType":"YulFunctionCall","src":"15265:12:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15257:2:201"},"nodeType":"YulFunctionCall","src":"15257:21:201"},"nodeType":"YulIf","src":"15254:47:201"},{"nodeType":"YulAssignment","src":"15310:20:201","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15321:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"15326:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15317:3:201"},"nodeType":"YulFunctionCall","src":"15317:13:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"15310:3:201"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15114:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"15117:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"15123:3:201","type":""}],"src":"15083:253:201"},{"body":{"nodeType":"YulBlock","src":"15498:252:201","statements":[{"nodeType":"YulAssignment","src":"15508:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15520:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15531:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15516:3:201"},"nodeType":"YulFunctionCall","src":"15516:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15508:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15550:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15565:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"15573:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15561:3:201"},"nodeType":"YulFunctionCall","src":"15561:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15543:6:201"},"nodeType":"YulFunctionCall","src":"15543:74:201"},"nodeType":"YulExpressionStatement","src":"15543:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15637:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15648:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15633:3:201"},"nodeType":"YulFunctionCall","src":"15633:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"15653:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15626:6:201"},"nodeType":"YulFunctionCall","src":"15626:34:201"},"nodeType":"YulExpressionStatement","src":"15626:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15680:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15691:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15676:3:201"},"nodeType":"YulFunctionCall","src":"15676:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"15700:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"15708:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15696:3:201"},"nodeType":"YulFunctionCall","src":"15696:47:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15669:6:201"},"nodeType":"YulFunctionCall","src":"15669:75:201"},"nodeType":"YulExpressionStatement","src":"15669:75:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15451:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15462:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15470:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15478:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15489:4:201","type":""}],"src":"15341:409:201"},{"body":{"nodeType":"YulBlock","src":"15804:197:201","statements":[{"nodeType":"YulVariableDeclaration","src":"15814:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"15824:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15818:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15867:21:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15882:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15885:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15878:3:201"},"nodeType":"YulFunctionCall","src":"15878:10:201"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15871:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15897:21:201","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"15912:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15915:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15908:3:201"},"nodeType":"YulFunctionCall","src":"15908:10:201"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"15901:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"15943:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15945:16:201"},"nodeType":"YulFunctionCall","src":"15945:18:201"},"nodeType":"YulExpressionStatement","src":"15945:18:201"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15933:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"15938:3:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15930:2:201"},"nodeType":"YulFunctionCall","src":"15930:12:201"},"nodeType":"YulIf","src":"15927:38:201"},{"nodeType":"YulAssignment","src":"15974:21:201","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15986:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"15991:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15982:3:201"},"nodeType":"YulFunctionCall","src":"15982:13:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"15974:4:201"}]}]},"name":"checked_sub_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15786:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"15789:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"15795:4:201","type":""}],"src":"15755:246:201"}]},"contents":"{\n    { }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_contract$_IAaveIncentivesController_$3875__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_encode_tuple_t_bool_t_uint256__to_t_bool_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, iszero(iszero(value0)))\n        mstore(add(headStart, 32), value1)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_string(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$4860t_addresst_contract$_IAaveIncentivesController_$3875t_uint8t_string_memory_ptrt_string_memory_ptrt_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := abi_decode_address(add(headStart, 64))\n        value3 := abi_decode_uint8(add(headStart, 96))\n        let offset := calldataload(add(headStart, 128))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        value4 := abi_decode_string(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 160))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value5 := abi_decode_string(add(headStart, offset_1), dataEnd)\n        let offset_2 := calldataload(add(headStart, 192))\n        if gt(offset_2, _1) { revert(0, 0) }\n        let value6_1, value7_1 := abi_decode_bytes_calldata(add(headStart, offset_2), dataEnd)\n        value6 := value6_1\n        value7 := value7_1\n    }\n    function abi_decode_tuple_t_contract$_IAaveIncentivesController_$3875(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, 0x1901000000000000000000000000000000000000000000000000000000000000)\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), 160)\n        let tail_1 := abi_encode_string(value2, add(headStart, 160))\n        mstore(add(headStart, 96), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string(value3, tail_1)\n        mstore(add(headStart, 128), sub(tail_2, headStart))\n        mstore(tail_2, value5)\n        calldatacopy(add(tail_2, 32), value4, value5)\n        mstore(add(add(tail_2, value5), 32), 0)\n        tail := add(add(tail_2, and(add(value5, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 32)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffff))\n    }\n    function checked_sub_t_uint128(x, y) -> diff\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"27744":[{"length":32,"start":2744}],"27926":[{"length":32,"start":4155}],"27929":[{"length":32,"start":894},{"length":32,"start":2617},{"length":32,"start":2943},{"length":32,"start":3150},{"length":32,"start":3604},{"length":32,"start":3951},{"length":32,"start":4687}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106101da5760003560e01c80637ecebe0011610104578063b9a7b622116100a2578063e075398611610071578063e0753986146104ee578063e655dbd81461054a578063f3bfc7381461055d578063f5298aca1461058457600080fd5b8063b9a7b622146104b2578063c04a8a10146104ba578063c222ec8a146104cd578063dd62ed3e146104e057600080fd5b8063a9059cbb116100de578063a9059cbb146101fd578063b16a19de14610462578063b1bf962d14610480578063b3f1c93d1461048857600080fd5b80637ecebe001461042457806395d89b411461045a578063a457c2d7146101fd57600080fd5b8063313ce5671161017c57806370a082311161014b57806370a08231146103665780637535d2461461037957806375d26413146103c557806378160376146103e857600080fd5b8063313ce567146103035780633644e5151461031857806339509351146101fd5780636bd76d241461032057600080fd5b80630b52d558116101b85780630b52d5581461028257806318160ddd146102975780631da24f3e146102ad57806323b872dd146102f557600080fd5b806306fdde03146101df578063095ea7b3146101fd5780630afbcdc914610220575b600080fd5b6101e7610597565b6040516101f49190611e7b565b60405180910390f35b61021061020b366004611ec3565b610629565b60405190151581526020016101f4565b61026d61022e366004611eef565b73ffffffffffffffffffffffffffffffffffffffff16600090815260386020526040902054603a546fffffffffffffffffffffffffffffffff90911691565b604080519283526020830191909152016101f4565b610295610290366004611f1d565b610699565b005b61029f6109ea565b6040519081526020016101f4565b61029f6102bb366004611eef565b73ffffffffffffffffffffffffffffffffffffffff166000908152603860205260409020546fffffffffffffffffffffffffffffffff1690565b61021061020b366004611f8b565b603d5460405160ff90911681526020016101f4565b61029f610ab4565b61029f61032e366004611fcc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260366020908152604080832093909416825291909152205490565b61029f610374366004611eef565b610aed565b6103a07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b603d54610100900473ffffffffffffffffffffffffffffffffffffffff166103a0565b6101e76040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b61029f610432366004611eef565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205490565b6101e7610bf8565b60375473ffffffffffffffffffffffffffffffffffffffff166103a0565b61029f610c07565b61049b610496366004612005565b610c12565b6040805192151583526020830191909152016101f4565b61029f600181565b6102956104c8366004611ec3565b610d1b565b6102956104db36600461216e565b610d2a565b61029f61020b366004611fcc565b61029f6104fc366004611eef565b73ffffffffffffffffffffffffffffffffffffffff1660009081526038602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b610295610558366004611eef565b611037565b61029f7f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa081565b61029f610592366004612243565b611215565b6060603b80546105a690612278565b80601f01602080910402602001604051908101604052809291908181526020018280546105d290612278565b801561061f5780601f106105f45761010080835404028352916020019161061f565b820191906000526020600020905b81548152906001019060200180831161060257829003601f168201915b5050505050905090565b604080518082018252600281527f3830000000000000000000000000000000000000000000000000000000000000602082015290517f08c379a000000000000000000000000000000000000000000000000000000000815260009161069091600401611e7b565b60405180910390fd5b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff881661071b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b50834211156040518060400160405280600281526020017f37380000000000000000000000000000000000000000000000000000000000008152509061078e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b5073ffffffffffffffffffffffffffffffffffffffff8716600090815260346020526040812054906107be610ab4565b604080517f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa0602082015273ffffffffffffffffffffffffffffffffffffffff8b1691810191909152606081018990526080810184905260a0810188905260c001604051602081830303815290604052805190602001206040516020016108769291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa1580156108fc573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f3739000000000000000000000000000000000000000000000000000000000000815250906109a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b506109ae8260016122fb565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603460205260409020556109df8989896112da565b505050505050505050565b6037546040517f386497fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091610aaf917f00000000000000000000000000000000000000000000000000000000000000009091169063386497fd90602401602060405180830381865afa158015610a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa69190612313565b603a5490611351565b905090565b60007f0000000000000000000000000000000000000000000000000000000000000000461415610ae5575060355490565b610aaf6113a8565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603860205260408120546fffffffffffffffffffffffffffffffff1680610b335750600092915050565b6037546040517f386497fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152610bf1917f0000000000000000000000000000000000000000000000000000000000000000169063386497fd90602401602060405180830381865afa158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190612313565b8290611351565b9392505050565b6060603c80546105a690612278565b6000610aaf603a5490565b60408051808201909152600281527f323300000000000000000000000000000000000000000000000000000000000060208201526000908190337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610cbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610cfa57610cfa85878661146d565b610d068686868661152d565b610d0e610c07565b9150915094509492505050565b610d263383836112da565b5050565b60015460039060ff1680610d3d5750303b155b80610d49575060005481115b610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610690565b60015460ff16158015610e1257600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f383700000000000000000000000000000000000000000000000000000000000081525090610ecf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b50610ed98661176e565b610ee285611781565b603d80546037805473ffffffffffffffffffffffffffffffffffffffff8d81167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179091558a16610100027fffffffffffffffffffffff00000000000000000000000000000000000000000090911660ff8a1617179055610f676113a8565b6035819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f40251fbfb6656cfa65a00d7879029fec1fad21d28fdcff2f4f68f52795b74f2c8a8a8a8a8a8a604051610ff49695949392919061232c565b60405180910390a3801561102b57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c891906123cc565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015611135573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115991906123e9565b6040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250906111c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b5050603d805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152600090337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146112bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b506112ca8460008585611794565b6112d2610c07565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526036602090815260408083208786168085529083529281902086905560375490518681529416939192917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1910160405180910390a4505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761138657600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6113d3611ab1565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff80841660009081526036602090815260408083209386168352929052908120546114ad90839061240b565b73ffffffffffffffffffffffffffffffffffffffff808616600081815260366020908152604080832089861680855292529182902085905560375491519495509216927fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e19061151f9086815260200190565b60405180910390a450505050565b60008061153a8484611abb565b60408051808201909152600281527f32340000000000000000000000000000000000000000000000000000000000006020820152909150816115a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260408120546fffffffffffffffffffffffffffffffff8082169291611606918491700100000000000000000000000000000000900416611351565b6116108387611351565b61161a919061240b565b905061162585611afa565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260386020526040902080546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905561168d8761168885611afa565b611ba0565b600061169982886122fb565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116fb91815260200190565b60405180910390a3604080518281526020810184905290810187905273ffffffffffffffffffffffffffffffffffffffff808a1691908b16907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35050159695505050505050565b8051610d2690603b906020840190611d80565b8051610d2690603c906020840190611d80565b60006117a08383611abb565b60408051808201909152600281527f323500000000000000000000000000000000000000000000000000000000000060208201529091508161180f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e7b565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260408120546fffffffffffffffffffffffffffffffff808216929161186c918491700100000000000000000000000000000000900416611351565b6118768386611351565b611880919061240b565b905061188b84611afa565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260386020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556118f3876118ee85611afa565b611d1c565b848111156119d2576000611907868361240b565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161196991815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff89169081907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a350611aa8565b60006119de828761240b565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a4091815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff80891691908a16907f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f909060600160405180910390a3505b50505050505050565b6060610aaf610597565b600081156b033b2e3c9fd0803ce800000060028404190484111715611adf57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b60006fffffffffffffffffffffffffffffffff821115611b9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610690565b5090565b603a54611bbf6fffffffffffffffffffffffffffffffff8316826122fb565b603a5573ffffffffffffffffffffffffffffffffffffffff83166000908152603860205260409020546fffffffffffffffffffffffffffffffff16611c048382612422565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260386020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9390931692909217909155603d546101009004168015611d15576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590526fffffffffffffffffffffffffffffffff841660448301528216906331873e2e90606401600060405180830381600087803b158015611d0157600080fd5b505af11580156109df573d6000803e3d6000fd5b5050505050565b603a54611d3b6fffffffffffffffffffffffffffffffff83168261240b565b603a5573ffffffffffffffffffffffffffffffffffffffff83166000908152603860205260409020546fffffffffffffffffffffffffffffffff16611c048382612456565b828054611d8c90612278565b90600052602060002090601f016020900481019282611dae5760008555611df4565b82601f10611dc757805160ff1916838001178555611df4565b82800160010185558215611df4579182015b82811115611df4578251825591602001919060010190611dd9565b50611b9c9291505b80821115611b9c5760008155600101611dfc565b6000815180845260005b81811015611e3657602081850181015186830182015201611e1a565b81811115611e48576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bf16020830184611e10565b73ffffffffffffffffffffffffffffffffffffffff81168114611eb057600080fd5b50565b8035611ebe81611e8e565b919050565b60008060408385031215611ed657600080fd5b8235611ee181611e8e565b946020939093013593505050565b600060208284031215611f0157600080fd5b8135610bf181611e8e565b803560ff81168114611ebe57600080fd5b600080600080600080600060e0888a031215611f3857600080fd5b8735611f4381611e8e565b96506020880135611f5381611e8e565b95506040880135945060608801359350611f6f60808901611f0c565b925060a0880135915060c0880135905092959891949750929550565b600080600060608486031215611fa057600080fd5b8335611fab81611e8e565b92506020840135611fbb81611e8e565b929592945050506040919091013590565b60008060408385031215611fdf57600080fd5b8235611fea81611e8e565b91506020830135611ffa81611e8e565b809150509250929050565b6000806000806080858703121561201b57600080fd5b843561202681611e8e565b9350602085013561203681611e8e565b93969395505050506040820135916060013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261208b57600080fd5b813567ffffffffffffffff808211156120a6576120a661204b565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156120ec576120ec61204b565b8160405283815286602085880101111561210557600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008083601f84011261213757600080fd5b50813567ffffffffffffffff81111561214f57600080fd5b60208301915083602082850101111561216757600080fd5b9250929050565b60008060008060008060008060e0898b03121561218a57600080fd5b883561219581611e8e565b975060208901356121a581611e8e565b96506121b360408a01611eb3565b95506121c160608a01611f0c565b9450608089013567ffffffffffffffff808211156121de57600080fd5b6121ea8c838d0161207a565b955060a08b013591508082111561220057600080fd5b61220c8c838d0161207a565b945060c08b013591508082111561222257600080fd5b5061222f8b828c01612125565b999c989b5096995094979396929594505050565b60008060006060848603121561225857600080fd5b833561226381611e8e565b95602085013595506040909401359392505050565b600181811c9082168061228c57607f821691505b602082108114156122c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561230e5761230e6122cc565b500190565b60006020828403121561232557600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8716815260ff8616602082015260a06040820152600061236460a0830187611e10565b82810360608401526123768187611e10565b905082810360808401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050979650505050505050565b6000602082840312156123de57600080fd5b8151610bf181611e8e565b6000602082840312156123fb57600080fd5b81518015158114610bf157600080fd5b60008282101561241d5761241d6122cc565b500390565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561244d5761244d6122cc565b01949350505050565b60006fffffffffffffffffffffffffffffffff8381169083168181101561247f5761247f6122cc565b03939250505056fea26469706673582212203efa211ef7ba661a18c8a3a0fe7f9ad00f2b721dff953a177c9888b9034dc66b64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1DA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xB9A7B622 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xE0753986 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE0753986 EQ PUSH2 0x4EE JUMPI DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x54A JUMPI DUP1 PUSH4 0xF3BFC738 EQ PUSH2 0x55D JUMPI DUP1 PUSH4 0xF5298ACA EQ PUSH2 0x584 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB9A7B622 EQ PUSH2 0x4B2 JUMPI DUP1 PUSH4 0xC04A8A10 EQ PUSH2 0x4BA JUMPI DUP1 PUSH4 0xC222EC8A EQ PUSH2 0x4CD JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x4E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA9059CBB GT PUSH2 0xDE JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x462 JUMPI DUP1 PUSH4 0xB1BF962D EQ PUSH2 0x480 JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x424 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x45A JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0x17C JUMPI DUP1 PUSH4 0x70A08231 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x366 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x379 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x3C5 JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x3E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 EQ PUSH2 0x303 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x318 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0x6BD76D24 EQ PUSH2 0x320 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB52D558 GT PUSH2 0x1B8 JUMPI DUP1 PUSH4 0xB52D558 EQ PUSH2 0x282 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x297 JUMPI DUP1 PUSH4 0x1DA24F3E EQ PUSH2 0x2AD JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1DF JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0xAFBCDC9 EQ PUSH2 0x220 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E7 PUSH2 0x597 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F4 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x210 PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1EC3 JUMP JUMPDEST PUSH2 0x629 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x26D PUSH2 0x22E CALLDATASIZE PUSH1 0x4 PUSH2 0x1EEF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x295 PUSH2 0x290 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F1D JUMP JUMPDEST PUSH2 0x699 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x29F PUSH2 0x9EA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x2BB CALLDATASIZE PUSH1 0x4 PUSH2 0x1EEF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x210 PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1F8B JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x29F PUSH2 0xAB4 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x32E CALLDATASIZE PUSH1 0x4 PUSH2 0x1FCC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x374 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EEF JUMP JUMPDEST PUSH2 0xAED JUMP JUMPDEST PUSH2 0x3A0 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3A0 JUMP JUMPDEST PUSH2 0x1E7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x432 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EEF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0xBF8 JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3A0 JUMP JUMPDEST PUSH2 0x29F PUSH2 0xC07 JUMP JUMPDEST PUSH2 0x49B PUSH2 0x496 CALLDATASIZE PUSH1 0x4 PUSH2 0x2005 JUMP JUMPDEST PUSH2 0xC12 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x29F PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH2 0x295 PUSH2 0x4C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EC3 JUMP JUMPDEST PUSH2 0xD1B JUMP JUMPDEST PUSH2 0x295 PUSH2 0x4DB CALLDATASIZE PUSH1 0x4 PUSH2 0x216E JUMP JUMPDEST PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x29F PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1FCC JUMP JUMPDEST PUSH2 0x29F PUSH2 0x4FC CALLDATASIZE PUSH1 0x4 PUSH2 0x1EEF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x295 PUSH2 0x558 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EEF JUMP JUMPDEST PUSH2 0x1037 JUMP JUMPDEST PUSH2 0x29F PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 DUP2 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x592 CALLDATASIZE PUSH1 0x4 PUSH2 0x2243 JUMP JUMPDEST PUSH2 0x1215 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3B DUP1 SLOAD PUSH2 0x5A6 SWAP1 PUSH2 0x2278 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x5D2 SWAP1 PUSH2 0x2278 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x61F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5F4 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x61F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x602 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3830000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x690 SWAP2 PUSH1 0x4 ADD PUSH2 0x1E7B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x71B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x78E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x7BE PUSH2 0xAB4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x876 SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x9A2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP PUSH2 0x9AE DUP3 PUSH1 0x1 PUSH2 0x22FB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x9DF DUP10 DUP10 DUP10 PUSH2 0x12DA JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH1 0x40 MLOAD PUSH32 0x386497FD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH2 0xAAF SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x386497FD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA82 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAA6 SWAP2 SWAP1 PUSH2 0x2313 JUMP JUMPDEST PUSH1 0x3A SLOAD SWAP1 PUSH2 0x1351 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0xAE5 JUMPI POP PUSH1 0x35 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xAAF PUSH2 0x13A8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 PUSH2 0xB33 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH1 0x40 MLOAD PUSH32 0x386497FD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0xBF1 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x386497FD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBC6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBEA SWAP2 SWAP1 PUSH2 0x2313 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1351 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3C DUP1 SLOAD PUSH2 0x5A6 SWAP1 PUSH2 0x2278 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAAF PUSH1 0x3A SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCBB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCFA JUMPI PUSH2 0xCFA DUP6 DUP8 DUP7 PUSH2 0x146D JUMP JUMPDEST PUSH2 0xD06 DUP7 DUP7 DUP7 DUP7 PUSH2 0x152D JUMP JUMPDEST PUSH2 0xD0E PUSH2 0xC07 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xD26 CALLER DUP4 DUP4 PUSH2 0x12DA JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x3 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0xD3D JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0xD49 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0xDD5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x690 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xE12 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xECF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP PUSH2 0xED9 DUP7 PUSH2 0x176E JUMP JUMPDEST PUSH2 0xEE2 DUP6 PUSH2 0x1781 JUMP JUMPDEST PUSH1 0x3D DUP1 SLOAD PUSH1 0x37 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE DUP11 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH1 0xFF DUP11 AND OR OR SWAP1 SSTORE PUSH2 0xF67 PUSH2 0x13A8 JUMP JUMPDEST PUSH1 0x35 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x40251FBFB6656CFA65A00D7879029FEC1FAD21D28FDCFF2F4F68F52795B74F2C DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH1 0x40 MLOAD PUSH2 0xFF4 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x232C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0x102B JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10A4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10C8 SWAP2 SWAP1 PUSH2 0x23CC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1135 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1159 SWAP2 SWAP1 PUSH2 0x23E9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x11C7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP POP PUSH1 0x3D DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x12BC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP PUSH2 0x12CA DUP5 PUSH1 0x0 DUP6 DUP6 PUSH2 0x1794 JUMP JUMPDEST PUSH2 0x12D2 PUSH2 0xC07 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP7 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP7 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP1 MLOAD DUP7 DUP2 MSTORE SWAP5 AND SWAP4 SWAP2 SWAP3 SWAP2 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1386 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x13D3 PUSH2 0x1AB1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x14AD SWAP1 DUP4 SWAP1 PUSH2 0x240B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP7 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP2 MLOAD SWAP5 SWAP6 POP SWAP3 AND SWAP3 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP1 PUSH2 0x151F SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x153A DUP5 DUP5 PUSH2 0x1ABB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x15A9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x1606 SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1351 JUMP JUMPDEST PUSH2 0x1610 DUP4 DUP8 PUSH2 0x1351 JUMP JUMPDEST PUSH2 0x161A SWAP2 SWAP1 PUSH2 0x240B JUMP JUMPDEST SWAP1 POP PUSH2 0x1625 DUP6 PUSH2 0x1AFA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x168D DUP8 PUSH2 0x1688 DUP6 PUSH2 0x1AFA JUMP JUMPDEST PUSH2 0x1BA0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1699 DUP3 DUP9 PUSH2 0x22FB JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x16FB SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 AND SWAP2 SWAP1 DUP12 AND SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP ISZERO SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD26 SWAP1 PUSH1 0x3B SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x1D80 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD26 SWAP1 PUSH1 0x3C SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x1D80 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17A0 DUP4 DUP4 PUSH2 0x1ABB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x180F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E7B JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x186C SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1351 JUMP JUMPDEST PUSH2 0x1876 DUP4 DUP7 PUSH2 0x1351 JUMP JUMPDEST PUSH2 0x1880 SWAP2 SWAP1 PUSH2 0x240B JUMP JUMPDEST SWAP1 POP PUSH2 0x188B DUP5 PUSH2 0x1AFA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x18F3 DUP8 PUSH2 0x18EE DUP6 PUSH2 0x1AFA JUMP JUMPDEST PUSH2 0x1D1C JUMP JUMPDEST DUP5 DUP2 GT ISZERO PUSH2 0x19D2 JUMPI PUSH1 0x0 PUSH2 0x1907 DUP7 DUP4 PUSH2 0x240B JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1969 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 DUP2 SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x1AA8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19DE DUP3 DUP8 PUSH2 0x240B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1A40 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP2 SWAP1 DUP11 AND SWAP1 PUSH32 0x4CF25BC1D991C17529C25213D3CC0CDA295EEAAD5F13F361969B12EA48015F90 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xAAF PUSH2 0x597 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1ADF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1B9C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x690 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x1BBF PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x22FB JUMP JUMPDEST PUSH1 0x3A SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1C04 DUP4 DUP3 PUSH2 0x2422 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x1D15 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D01 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x1D3B PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x240B JUMP JUMPDEST PUSH1 0x3A SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1C04 DUP4 DUP3 PUSH2 0x2456 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x1D8C SWAP1 PUSH2 0x2278 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x1DAE JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x1DF4 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x1DC7 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x1DF4 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x1DF4 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1DF4 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1DD9 JUMP JUMPDEST POP PUSH2 0x1B9C SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1B9C JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1DFC JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1E36 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x1E1A JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x1E48 JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xBF1 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1E10 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1EB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1EBE DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1ED6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1EE1 DUP2 PUSH2 0x1E8E 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 0x1F01 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xBF1 DUP2 PUSH2 0x1E8E JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1EBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1F38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x1F43 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x1F53 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x1F6F PUSH1 0x80 DUP10 ADD PUSH2 0x1F0C JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1FA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1FAB DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1FBB DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1FDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1FEA DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1FFA DUP2 PUSH2 0x1E8E JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x201B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x2026 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x2036 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x208B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x20A6 JUMPI PUSH2 0x20A6 PUSH2 0x204B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x20EC JUMPI PUSH2 0x20EC PUSH2 0x204B JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x2105 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2137 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x214F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x2167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xE0 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x218A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x2195 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x21A5 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP7 POP PUSH2 0x21B3 PUSH1 0x40 DUP11 ADD PUSH2 0x1EB3 JUMP JUMPDEST SWAP6 POP PUSH2 0x21C1 PUSH1 0x60 DUP11 ADD PUSH2 0x1F0C JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x21DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x21EA DUP13 DUP4 DUP14 ADD PUSH2 0x207A JUMP JUMPDEST SWAP6 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2200 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x220C DUP13 DUP4 DUP14 ADD PUSH2 0x207A JUMP JUMPDEST SWAP5 POP PUSH1 0xC0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2222 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x222F DUP12 DUP3 DUP13 ADD PUSH2 0x2125 JUMP JUMPDEST SWAP10 SWAP13 SWAP9 SWAP12 POP SWAP7 SWAP10 POP SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2258 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x2263 DUP2 PUSH2 0x1E8E JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x228C JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x22C6 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x230E JUMPI PUSH2 0x230E PUSH2 0x22CC JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2325 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP2 MSTORE PUSH1 0xFF DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2364 PUSH1 0xA0 DUP4 ADD DUP8 PUSH2 0x1E10 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x2376 DUP2 DUP8 PUSH2 0x1E10 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE DUP4 DUP2 MSTORE DUP4 DUP6 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND DUP3 ADD ADD SWAP2 POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x23DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xBF1 DUP2 PUSH2 0x1E8E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x23FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xBF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x241D JUMPI PUSH2 0x241D PUSH2 0x22CC JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x244D JUMPI PUSH2 0x244D PUSH2 0x22CC JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x247F JUMPI PUSH2 0x247F PUSH2 0x22CC JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURNDATACOPY STATICCALL 0x21 0x1E 0xF7 0xBA PUSH7 0x1A18C8A3A0FE7F SWAP11 0xD0 0xF 0x2B PUSH19 0x1DFF953A177C9888B9034DC66B64736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"198:197:65:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84:103;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4352:125:100;;;;;;:::i;:::-;;:::i;:::-;;;1558:14:201;;1551:22;1533:41;;1521:2;1506:18;4352:125:100;1393:187:201;1386:173:105;;;;;;:::i;:::-;3518:19:103;;1479:7:105;3518:19:103;;;:10;:19;;;;;:27;3376:12;;3518:27;;;;;1386:173:105;;;;;2011:25:201;;;2067:2;2052:18;;2045:34;;;;1984:18;1386:173:105;1837:248:201;1424:823:101;;;;;;:::i;:::-;;:::i;:::-;;3629:171:100;;;:::i;:::-;;;3136:25:201;;;3124:2;3109:18;3629:171:100;2990:177:201;1225:119:105;;;;;;:::i;:::-;3518:19:103;;1296:7:105;3518:19:103;;;:10;:19;;;;;:27;;;;1225:119:105;4481:139:100;;;;;;:::i;3178:86:103:-;3250:9;;3178:86;;3250:9;;;;3775:36:201;;3763:2;3748:18;3178:86:103;3633:184:201;867:185:102;;;:::i;2292:165:101:-;;;;;;:::i;:::-;2417:27;;;;2395:7;2417:27;;;:17;:27;;;;;;;;:35;;;;;;;;;;;;;2292:165;2686:280:100;;;;;;:::i;:::-;;:::i;2408:27:103:-;;;;;;;;4587:42:201;4575:55;;;4557:74;;4545:2;4530:18;2408:27:103;4397:240:201;3691:132:103;3797:21;;;;;;;3691:132;;192:50:102;;232:10;;;;;;;;;;;;;;;;;192:50;;1260:101;;;;;;:::i;:::-;1342:14;;1320:7;1342:14;;;:7;:14;;;;;;;1260:101;3051:90:103;;;:::i;4939:111:100:-;5029:16;;;;4939:111;;1601:113:105;;;:::i;3007:337:100:-;;;;;;:::i;:::-;;:::i;:::-;;;;6084:14:201;;6077:22;6059:41;;6131:2;6116:18;;6109:34;;;;6032:18;3007:337:100;5891:258:201;1332:49:100;;1378:3;1332:49;;1237:142:101;;;;;;:::i;:::-;;:::i;1700:803:100:-;;;;;;:::i;:::-;;:::i;4213:135::-;;;;;;:::i;1756:138:105:-;;;;;;:::i;:::-;1858:16;;1836:7;1858:16;;;:10;:16;;;;;:31;;;;;;;1756:138;3938:139:103;;;;;;:::i;:::-;;:::i;897:153:101:-;;956:94;897:153;;3385:215:100;;;;;;:::i;:::-;;:::i;2930:84:103:-;2976:13;3004:5;2997:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84;:::o;4352:125:100:-;4441:30;;;;;;;;;;;;;;;;4434:38;;;;;4422:4;;4434:38;;;;;:::i;:::-;;;;;;;;1424:823:101;1633:29;;;;;;;;;;;;;;;;;1608:23;;;1600:63;;;;;;;;;;;;;:::i;:::-;;1727:8;1708:15;:27;;1737:25;;;;;;;;;;;;;;;;;1700:63;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1797:18:101;;;1769:25;1797:18;;;:7;:18;;;;;;;1901;:16;:18::i;:::-;1950:87;;;956:94;1950:87;;;10160:25:201;10233:42;10221:55;;10201:18;;;10194:83;;;;10293:18;;;10286:34;;;10336:18;;;10329:34;;;10379:19;;;10372:35;;;10132:19;;1950:87:101;;;;;;;;;;;;1929:118;;;;;;1855:200;;;;;;;;10688:66:201;10676:79;;10780:1;10771:11;;10764:27;;;;10816:2;10807:12;;10800:28;10853:2;10844:12;;10418:444;1855:200:101;;;;;;;;;;;;;;1838:223;;1855:200;1838:223;;;;2088:26;;;;;;;;;11094:25:201;;;11167:4;11155:17;;11135:18;;;11128:45;;;;11189:18;;;11182:34;;;11232:18;;;11225:34;;;1838:223:101;-1:-1:-1;2088:26:101;;11066:19:201;;2088:26:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2075:39;;:9;:39;;;2116:24;;;;;;;;;;;;;;;;;2067:74;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2168:21:101;:17;2188:1;2168:21;:::i;:::-;2147:18;;;;;;;:7;:18;;;;;:42;2195:47;2155:9;2225;2236:5;2195:18;:47::i;:::-;1594:653;;1424:823;;;;;;;:::o;3629:171:100:-;3777:16;;3739:55;;;;;:37;3777:16;;;3739:55;;;4557:74:201;3690:7:100;;3712:83;;3739:4;:37;;;;;;4530:18:201;;3739:55:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3376:12:103;;3712:26:100;;:83::i;:::-;3705:90;;3629:171;:::o;867:185:102:-;924:7;960:8;943:13;:25;939:69;;;-1:-1:-1;985:16:102;;;867:185::o;939:69::-;1020:27;:25;:27::i;2686:280:100:-;3518:19:103;;;2757:7:100;3518:19:103;;;:10;:19;;;;;:27;;;;2824:47:100;;-1:-1:-1;2863:1:100;;2686:280;-1:-1:-1;;2686:280:100:o;2824:47::-;2943:16;;2905:55;;;;;:37;2943:16;;;2905:55;;;4557:74:201;2884:77:100;;2905:4;:37;;;;4530:18:201;;2905:55:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2884:13;;:20;:77::i;:::-;2877:84;2686:280;-1:-1:-1;;;2686:280:100:o;3051:90:103:-;3101:13;3129:7;3122:14;;;;;:::i;1601:113:105:-;1668:7;1690:19;3376:12:103;;;3293:100;3007:337:100;1519:26:103;;;;;;;;;;;;;;;;;3150:4:100;;;;678:10:4;1512:4:103;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3183:10:100::1;3175:18;;:4;:18;;;3171:89;;3203:50;3228:10;3240:4;3246:6;3203:24;:50::i;:::-;3273:44;3285:4;3291:10;3303:6;3311:5;3273:11;:44::i;:::-;3319:19;:17;:19::i;:::-;3265:74;;;;3007:337:::0;;;;;;;:::o;1237:142:101:-;1323:51;678:10:4;1356:9:101;1367:6;1323:18;:51::i;:::-;1237:142;;:::o;1700:803:100:-;1217:12:71;;385:3:65;;1217:12:71;;;:31;;-1:-1:-1;2436:9:71;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;11983:2:201;1202:146:71;;;11965:21:201;12022:2;12002:18;;;11995:30;12061:34;12041:18;;;12034:62;12132:16;12112:18;;;12105:44;12166:19;;1202:146:71;11781:410:201;1202:146:71;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;2021:4:100::1;2001:24;;:16;:24;;;2027:34;;;;;;;;;;;;;;;;::::0;1993:69:::1;;;;;;;;;;;;;;:::i;:::-;;2068:23;2077:13;2068:8;:23::i;:::-;2097:27;2108:15;2097:10;:27::i;:::-;7979:9:103::0;:23;;2168:16:100::1;:34:::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;2208:44;::::1;2168:34;2208:44;::::0;;;;7979:23:103;;;2208:44:100;::::1;::::0;;2278:27:::1;:25;:27::i;:::-;2259:16;:46;;;;2367:4;2317:181;;2336:15;2317:181;;;2388:20;2417:17;2442:13;2463:15;2486:6;;2317:181;;;;;;;;;;;:::i;:::-;;;;;;;;1510:14:71::0;1506:55;;;1534:12;:20;;;;;;1506:55;1158:407;;1700:803:100;;;;;;;;:::o;3938:139:103:-;1211:22;1248:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1297;;;;;1320:10;1297:34;;;4557:74:201;1211:72:103;;-1:-1:-1;1297:22:103;;;;;;4530:18:201;;1297:34:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1333:28;;;;;;;;;;;;;;;;;1289:73;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;4038:21:103::1;:34:::0;;::::1;::::0;;::::1;;;::::0;;;::::1;::::0;;;::::1;::::0;;3938:139::o;3385:215:100:-;1519:26:103;;;;;;;;;;;;;;;;;3504:7:100;;678:10:4;1512:4:103;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3519:44:100::1;3531:4;3545:1;3549:6;3557:5;3519:11;:44::i;:::-;3576:19;:17;:19::i;:::-;3569:26:::0;3385:215;-1:-1:-1;;;;3385:215:100:o;2749:233:101:-;2846:28;;;;;;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;;:48;;;2952:16;;2905:72;;3136:25:201;;;2952:16:101;;;2846:39;;:28;2905:72;;3109:18:201;2905:72:101;;;;;;;2749:233;;;:::o;2253:319:90:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:90;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;1475:298:102:-;1535:7;292:95;1645:15;:13;:15::i;:::-;1629:33;;;;;;;232:10;;;;;;;;;;;;;;;;1582:178;;;;;13963:25:201;;;;14004:18;;;13997:34;;;;1674:26:102;14047:18:201;;;14040:34;1712:13:102;14090:18:201;;;14083:34;1745:4:102;14133:19:201;;;14126:84;13935:19;;1582:178:102;;;;;;;;;;;;1563:205;;;;;;1550:218;;1475:298;:::o;3288:330:101:-;3414:28;;;;3391:20;3414:28;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;:48;;3456:6;;3414:48;:::i;:::-;3469:28;;;;;;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;:54;;;3582:16;;3535:78;;3391:71;;-1:-1:-1;3582:16:101;;;3535:78;;;;3391:71;3136:25:201;;3124:2;3109:18;;2990:177;3535:78:101;;;;;;;;3385:233;3288:330;;;:::o;2295:763:105:-;2421:4;;2456:20;:6;2470:5;2456:13;:20::i;:::-;2509:26;;;;;;;;;;;;;;;;;2433:43;;-1:-1:-1;2490:17:105;2482:54;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3518:19:103;;;2543:21:105;3518:19:103;;;:10;:19;;;;;:27;;;;;;2543:21:105;2662:59;;3518:27:103;;2683:37:105;;;;2662:20;:59::i;:::-;2626:27;:13;2647:5;2626:20;:27::i;:::-;:95;;;;:::i;:::-;2600:121;;2768:17;:5;:15;:17::i;:::-;2728:22;;;;;;;:10;:22;;;;;:57;;;;;;;;;;;;;;;;2792:43;2739:10;2810:24;:12;:22;:24::i;:::-;2792:5;:43::i;:::-;2842:20;2865:24;2874:15;2865:6;:24;:::i;:::-;2842:47;;2921:10;2900:46;;2917:1;2900:46;;;2933:12;2900:46;;;;3136:25:201;;3124:2;3109:18;;2990:177;2900:46:105;;;;;;;;2957:62;;;14553:25:201;;;14609:2;14594:18;;14587:34;;;14637:18;;;14630:34;;;2957:62:105;;;;;;;;;;;14541:2:201;14526:18;2957:62:105;;;;;;;-1:-1:-1;;3034:18:105;;2295:763;-1:-1:-1;;;;;;2295:763:105:o;7513:76:103:-;7569:15;;;;:5;;:15;;;;;:::i;7701:84::-;7761:19;;;;:7;;:19;;;;;:::i;3512:888:105:-;3609:20;3632;:6;3646:5;3632:13;:20::i;:::-;3685:26;;;;;;;;;;;;;;;;;3609:43;;-1:-1:-1;3666:17:105;3658:54;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3518:19:103;;;3719:21:105;3518:19:103;;;:10;:19;;;;;:27;;;;;;3719:21:105;3832:53;;3518:27:103;;3853:31:105;;;;3832:20;:53::i;:::-;3796:27;:13;3817:5;3796:20;:27::i;:::-;:89;;;;:::i;:::-;3770:115;;3926:17;:5;:15;:17::i;:::-;3892:16;;;;;;;:10;:16;;;;;:51;;;;;;;;;;;;;;;;3950:37;3903:4;3962:24;:12;:22;:24::i;:::-;3950:5;:37::i;:::-;4016:6;3998:15;:24;3994:402;;;4032:20;4055:24;4073:6;4055:15;:24;:::i;:::-;4032:47;;4113:4;4092:40;;4109:1;4092:40;;;4119:12;4092:40;;;;3136:25:201;;3124:2;3109:18;;2990:177;4092:40:105;;;;;;;;4145:54;;;14553:25:201;;;14609:2;14594:18;;14587:34;;;14637:18;;;14630:34;;;4145:54:105;;;;;;;;14541:2:201;14526:18;4145:54:105;;;;;;;4024:182;3994:402;;;4220:20;4243:24;4252:15;4243:6;:24;:::i;:::-;4220:47;;4303:1;4280:40;;4289:4;4280:40;;;4307:12;4280:40;;;;3136:25:201;;3124:2;3109:18;;2990:177;4280:40:105;;;;;;;;4333:56;;;14553:25:201;;;14609:2;14594:18;;14587:34;;;14637:18;;;14630:34;;;4333:56:105;;;;;;;;;;;14541:2:201;14526:18;4333:56:105;;;;;;;4212:184;3994:402;3603:797;;;3512:888;;;;:::o;3833:96:100:-;3890:13;3918:6;:4;:6::i;2840:322:90:-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:90;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;14877:2:201;1635:78:12;;;14859:21:201;14916:2;14896:18;;;14889:30;14955:34;14935:18;;;14928:62;15026:9;15006:18;;;14999:37;15053:19;;1635:78:12;14675:403:201;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;1069:519:104:-;1165:12;;1198:23;;;;1165:12;1198:23;:::i;:::-;1183:12;:38;1256:19;;;1228:25;1256:19;;;:10;:19;;;;;:27;;;1319:26;1339:6;1256:27;1319:26;:::i;:::-;1289:19;;;;;;;;:10;:19;;;;;:56;;;;;;;;;;;;;;;;1406:21;;1289:56;1406:21;;;1437:48;;1433:151;;1495:82;;;;;:38;15561:55:201;;;1495:82:104;;;15543:74:201;15633:18;;;15626:34;;;15708;15696:47;;15676:18;;;15669:75;1495:38:104;;;;;15516:18:201;;1495:82:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1433:151;1134:454;;;1069:519;;:::o;1781:520::-;1877:12;;1910:23;;;;1877:12;1910:23;:::i;:::-;1895:12;:38;1968:19;;;1940:25;1968:19;;;:10;:19;;;;;:27;;;2031:26;2051:6;1968:27;2031:26;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:531:201;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;336:6;333:1;330:13;327:87;;;402:1;395:4;386:6;381:3;377:16;373:27;366:38;327:87;-1:-1:-1;459:2:201;447:15;464:66;443:88;434:98;;;;534:4;430:109;;14:531;-1:-1:-1;;14:531:201:o;550:220::-;699:2;688:9;681:21;662:4;719:45;760:2;749:9;745:18;737:6;719:45;:::i;775:154::-;861:42;854:5;850:54;843:5;840:65;830:93;;919:1;916;909:12;830:93;775:154;:::o;934:134::-;1002:20;;1031:31;1002:20;1031:31;:::i;:::-;934:134;;;:::o;1073:315::-;1141:6;1149;1202:2;1190:9;1181:7;1177:23;1173:32;1170:52;;;1218:1;1215;1208:12;1170:52;1257:9;1244:23;1276:31;1301:5;1276:31;:::i;:::-;1326:5;1378:2;1363:18;;;;1350:32;;-1:-1:-1;;;1073:315:201:o;1585:247::-;1644:6;1697:2;1685:9;1676:7;1672:23;1668:32;1665:52;;;1713:1;1710;1703:12;1665:52;1752:9;1739:23;1771:31;1796:5;1771:31;:::i;2090:156::-;2156:20;;2216:4;2205:16;;2195:27;;2185:55;;2236:1;2233;2226:12;2251:734;2362:6;2370;2378;2386;2394;2402;2410;2463:3;2451:9;2442:7;2438:23;2434:33;2431:53;;;2480:1;2477;2470:12;2431:53;2519:9;2506:23;2538:31;2563:5;2538:31;:::i;:::-;2588:5;-1:-1:-1;2645:2:201;2630:18;;2617:32;2658:33;2617:32;2658:33;:::i;:::-;2710:7;-1:-1:-1;2764:2:201;2749:18;;2736:32;;-1:-1:-1;2815:2:201;2800:18;;2787:32;;-1:-1:-1;2838:37:201;2870:3;2855:19;;2838:37;:::i;:::-;2828:47;;2922:3;2911:9;2907:19;2894:33;2884:43;;2974:3;2963:9;2959:19;2946:33;2936:43;;2251:734;;;;;;;;;;:::o;3172:456::-;3249:6;3257;3265;3318:2;3306:9;3297:7;3293:23;3289:32;3286:52;;;3334:1;3331;3324:12;3286:52;3373:9;3360:23;3392:31;3417:5;3392:31;:::i;:::-;3442:5;-1:-1:-1;3499:2:201;3484:18;;3471:32;3512:33;3471:32;3512:33;:::i;:::-;3172:456;;3564:7;;-1:-1:-1;;;3618:2:201;3603:18;;;;3590:32;;3172:456::o;4004:388::-;4072:6;4080;4133:2;4121:9;4112:7;4108:23;4104:32;4101:52;;;4149:1;4146;4139:12;4101:52;4188:9;4175:23;4207:31;4232:5;4207:31;:::i;:::-;4257:5;-1:-1:-1;4314:2:201;4299:18;;4286:32;4327:33;4286:32;4327:33;:::i;:::-;4379:7;4369:17;;;4004:388;;;;;:::o;5361:525::-;5447:6;5455;5463;5471;5524:3;5512:9;5503:7;5499:23;5495:33;5492:53;;;5541:1;5538;5531:12;5492:53;5580:9;5567:23;5599:31;5624:5;5599:31;:::i;:::-;5649:5;-1:-1:-1;5706:2:201;5691:18;;5678:32;5719:33;5678:32;5719:33;:::i;:::-;5361:525;;5771:7;;-1:-1:-1;;;;5825:2:201;5810:18;;5797:32;;5876:2;5861:18;5848:32;;5361:525::o;6154:184::-;6206:77;6203:1;6196:88;6303:4;6300:1;6293:15;6327:4;6324:1;6317:15;6343:778;6386:5;6439:3;6432:4;6424:6;6420:17;6416:27;6406:55;;6457:1;6454;6447:12;6406:55;6493:6;6480:20;6519:18;6556:2;6552;6549:10;6546:36;;;6562:18;;:::i;:::-;6696:2;6690:9;6758:4;6750:13;;6601:66;6746:22;;;6770:2;6742:31;6738:40;6726:53;;;6794:18;;;6814:22;;;6791:46;6788:72;;;6840:18;;:::i;:::-;6880:10;6876:2;6869:22;6915:2;6907:6;6900:18;6961:3;6954:4;6949:2;6941:6;6937:15;6933:26;6930:35;6927:55;;;6978:1;6975;6968:12;6927:55;7042:2;7035:4;7027:6;7023:17;7016:4;7008:6;7004:17;6991:54;7089:1;7082:4;7077:2;7069:6;7065:15;7061:26;7054:37;7109:6;7100:15;;;;;;6343:778;;;;:::o;7126:347::-;7177:8;7187:6;7241:3;7234:4;7226:6;7222:17;7218:27;7208:55;;7259:1;7256;7249:12;7208:55;-1:-1:-1;7282:20:201;;7325:18;7314:30;;7311:50;;;7357:1;7354;7347:12;7311:50;7394:4;7386:6;7382:17;7370:29;;7446:3;7439:4;7430:6;7422;7418:19;7414:30;7411:39;7408:59;;;7463:1;7460;7453:12;7408:59;7126:347;;;;;:::o;7478:1302::-;7668:6;7676;7684;7692;7700;7708;7716;7724;7777:3;7765:9;7756:7;7752:23;7748:33;7745:53;;;7794:1;7791;7784:12;7745:53;7833:9;7820:23;7852:31;7877:5;7852:31;:::i;:::-;7902:5;-1:-1:-1;7959:2:201;7944:18;;7931:32;7972:33;7931:32;7972:33;:::i;:::-;8024:7;-1:-1:-1;8050:38:201;8084:2;8069:18;;8050:38;:::i;:::-;8040:48;;8107:36;8139:2;8128:9;8124:18;8107:36;:::i;:::-;8097:46;;8194:3;8183:9;8179:19;8166:33;8218:18;8259:2;8251:6;8248:14;8245:34;;;8275:1;8272;8265:12;8245:34;8298:50;8340:7;8331:6;8320:9;8316:22;8298:50;:::i;:::-;8288:60;;8401:3;8390:9;8386:19;8373:33;8357:49;;8431:2;8421:8;8418:16;8415:36;;;8447:1;8444;8437:12;8415:36;8470:52;8514:7;8503:8;8492:9;8488:24;8470:52;:::i;:::-;8460:62;;8575:3;8564:9;8560:19;8547:33;8531:49;;8605:2;8595:8;8592:16;8589:36;;;8621:1;8618;8611:12;8589:36;;8660:60;8712:7;8701:8;8690:9;8686:24;8660:60;:::i;:::-;7478:1302;;;;-1:-1:-1;7478:1302:201;;-1:-1:-1;7478:1302:201;;;;;;8739:8;-1:-1:-1;;;7478:1302:201:o;9071:383::-;9148:6;9156;9164;9217:2;9205:9;9196:7;9192:23;9188:32;9185:52;;;9233:1;9230;9223:12;9185:52;9272:9;9259:23;9291:31;9316:5;9291:31;:::i;:::-;9341:5;9393:2;9378:18;;9365:32;;-1:-1:-1;9444:2:201;9429:18;;;9416:32;;9071:383;-1:-1:-1;;;9071:383:201:o;9459:437::-;9538:1;9534:12;;;;9581;;;9602:61;;9656:4;9648:6;9644:17;9634:27;;9602:61;9709:2;9701:6;9698:14;9678:18;9675:38;9672:218;;;9746:77;9743:1;9736:88;9847:4;9844:1;9837:15;9875:4;9872:1;9865:15;9672:218;;9459:437;;;:::o;11270:184::-;11322:77;11319:1;11312:88;11419:4;11416:1;11409:15;11443:4;11440:1;11433:15;11459:128;11499:3;11530:1;11526:6;11523:1;11520:13;11517:39;;;11536:18;;:::i;:::-;-1:-1:-1;11572:9:201;;11459:128::o;11592:184::-;11662:6;11715:2;11703:9;11694:7;11690:23;11686:32;11683:52;;;11731:1;11728;11721:12;11683:52;-1:-1:-1;11754:16:201;;11592:184;-1:-1:-1;11592:184:201:o;12196:965::-;12513:42;12505:6;12501:55;12490:9;12483:74;12605:4;12597:6;12593:17;12588:2;12577:9;12573:18;12566:45;12647:3;12642:2;12631:9;12627:18;12620:31;12464:4;12674:46;12715:3;12704:9;12700:19;12692:6;12674:46;:::i;:::-;12768:9;12760:6;12756:22;12751:2;12740:9;12736:18;12729:50;12802:33;12828:6;12820;12802:33;:::i;:::-;12788:47;;12884:9;12876:6;12872:22;12866:3;12855:9;12851:19;12844:51;12919:6;12911;12904:22;12973:6;12965;12960:2;12952:6;12948:15;12935:45;13026:1;13021:2;13012:6;13004;13000:19;12996:28;12989:39;13152:2;13082:66;13077:2;13069:6;13065:15;13061:88;13053:6;13049:101;13045:110;13037:118;;;12196:965;;;;;;;;;:::o;13166:251::-;13236:6;13289:2;13277:9;13268:7;13264:23;13260:32;13257:52;;;13305:1;13302;13295:12;13257:52;13337:9;13331:16;13356:31;13381:5;13356:31;:::i;13422:277::-;13489:6;13542:2;13530:9;13521:7;13517:23;13513:32;13510:52;;;13558:1;13555;13548:12;13510:52;13590:9;13584:16;13643:5;13636:13;13629:21;13622:5;13619:32;13609:60;;13665:1;13662;13655:12;14221:125;14261:4;14289:1;14286;14283:8;14280:34;;;14294:18;;:::i;:::-;-1:-1:-1;14331:9:201;;14221:125::o;15083:253::-;15123:3;15151:34;15212:2;15209:1;15205:10;15242:2;15239:1;15235:10;15273:3;15269:2;15265:12;15260:3;15257:21;15254:47;;;15281:18;;:::i;:::-;15317:13;;15083:253;-1:-1:-1;;;;15083:253:201:o;15755:246::-;15795:4;15824:34;15908:10;;;;15878;;15930:12;;;15927:38;;;15945:18;;:::i;:::-;15982:13;;15755:246;-1:-1:-1;;;15755:246:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"1881000","executionCost":"infinite","totalCost":"infinite"},"external":{"DEBT_TOKEN_REVISION()":"240","DELEGATION_WITH_SIG_TYPEHASH()":"283","DOMAIN_SEPARATOR()":"infinite","EIP712_REVISION()":"infinite","POOL()":"infinite","UNDERLYING_ASSET_ADDRESS()":"2374","allowance(address,address)":"infinite","approve(address,uint256)":"infinite","approveDelegation(address,uint256)":"26988","balanceOf(address)":"infinite","borrowAllowance(address,address)":"infinite","burn(address,uint256,uint256)":"infinite","decimals()":"2335","decreaseAllowance(address,uint256)":"infinite","delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":"infinite","getIncentivesController()":"2407","getPreviousIndex(address)":"2568","getScaledUserBalanceAndSupply(address)":"4737","increaseAllowance(address,uint256)":"infinite","initialize(address,address,address,uint8,string,string,bytes)":"infinite","mint(address,address,uint256,uint256)":"infinite","name()":"infinite","nonces(address)":"2553","scaledBalanceOf(address)":"2603","scaledTotalSupply()":"2419","setIncentivesController(address)":"infinite","symbol()":"infinite","totalSupply()":"infinite","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite"},"internal":{"getRevision()":"infinite"}},"methodIdentifiers":{"DEBT_TOKEN_REVISION()":"b9a7b622","DELEGATION_WITH_SIG_TYPEHASH()":"f3bfc738","DOMAIN_SEPARATOR()":"3644e515","EIP712_REVISION()":"78160376","POOL()":"7535d246","UNDERLYING_ASSET_ADDRESS()":"b16a19de","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","approveDelegation(address,uint256)":"c04a8a10","balanceOf(address)":"70a08231","borrowAllowance(address,address)":"6bd76d24","burn(address,uint256,uint256)":"f5298aca","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":"0b52d558","getIncentivesController()":"75d26413","getPreviousIndex(address)":"e0753986","getScaledUserBalanceAndSupply(address)":"0afbcdc9","increaseAllowance(address,uint256)":"39509351","initialize(address,address,address,uint8,string,string,bytes)":"c222ec8a","mint(address,address,uint256,uint256)":"b3f1c93d","name()":"06fdde03","nonces(address)":"7ecebe00","scaledBalanceOf(address)":"1da24f3e","scaledTotalSupply()":"b1bf962d","setIncentivesController(address)":"e655dbd8","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"}],\"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\":\"fromUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BorrowAllowanceDelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"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\":\"DEBT_TOKEN_REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DELEGATION_WITH_SIG_TYPEHASH\",\"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\":\"EIP712_REVISION\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approveDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromUser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"}],\"name\":\"borrowAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatee\",\"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\":\"delegationWithSig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getPreviousIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getScaledUserBalanceAndSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"initializingPool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"user\",\"type\":\"address\"}],\"name\":\"scaledBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scaledTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setIncentivesController\",\"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\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Return cached value if chainId matches cache, otherwise recomputes separator\",\"returns\":{\"_0\":\"The domain separator of the token at current chain\"}},\"UNDERLYING_ASSET_ADDRESS()\":{\"returns\":{\"_0\":\"The address of the underlying asset\"}},\"approveDelegation(address,uint256)\":{\"params\":{\"amount\":\"The maximum amount being delegated.\",\"delegatee\":\"The address receiving the delegated borrowing power\"}},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"borrowAllowance(address,address)\":{\"params\":{\"fromUser\":\"The user to giving allowance\",\"toUser\":\"The user to give allowance to\"},\"returns\":{\"_0\":\"The current allowance of `toUser`\"}},\"burn(address,uint256,uint256)\":{\"details\":\"In some instances, a burn transaction will emit a mint event if the amount to burn is less than the interest that the user accrued\",\"params\":{\"amount\":\"The amount getting burned\",\"from\":\"The address from which the debt will be burned\",\"index\":\"The variable debt index of the reserve\"},\"returns\":{\"_0\":\"The scaled total debt of the reserve\"}},\"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"delegatee\":\"The delegatee that can use the credit\",\"delegator\":\"The delegator of the credit\",\"r\":\"The R signature param\",\"s\":\"The S signature param\",\"v\":\"The V signature param\",\"value\":\"The amount to be delegated\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"The address of the Incentives Controller\"}},\"getPreviousIndex(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The last index interest was accrued to the user's balance, expressed in ray\"}},\"getScaledUserBalanceAndSupply(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The scaled balance of the user\",\"_1\":\"The scaled total supply\"}},\"initialize(address,address,address,uint8,string,string,bytes)\":{\"params\":{\"debtTokenDecimals\":\"The decimals of the debtToken, same as the underlying asset's\",\"debtTokenName\":\"The name of the token\",\"debtTokenSymbol\":\"The symbol of the token\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}},\"mint(address,address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of debt being minted\",\"index\":\"The variable debt index of the reserve\",\"onBehalfOf\":\"The address receiving the debt tokens\",\"user\":\"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise\"},\"returns\":{\"_0\":\"True if the previous balance of the user is 0, false otherwise\",\"_1\":\"The scaled total debt of the reserve\"}},\"nonces(address)\":{\"params\":{\"owner\":\"The address for which the nonce is being returned\"},\"returns\":{\"_0\":\"The nonce value for the input address`\"}},\"scaledBalanceOf(address)\":{\"details\":\"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update\",\"params\":{\"user\":\"The user whose balance is calculated\"},\"returns\":{\"_0\":\"The scaled balance of the user\"}},\"scaledTotalSupply()\":{\"returns\":{\"_0\":\"The scaled total supply\"}},\"setIncentivesController(address)\":{\"params\":{\"controller\":\"the new Incentives controller\"}},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Being non transferrable, the debt token does not implement any of the standard ERC20 functions for transfer and allowance.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"notice\":\"Get the domain separator for the token\"},\"UNDERLYING_ASSET_ADDRESS()\":{\"notice\":\"Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\"},\"approveDelegation(address,uint256)\":{\"notice\":\"Delegates borrowing power to a user on the specific debt token. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)\"},\"borrowAllowance(address,address)\":{\"notice\":\"Returns the borrow allowance of the user\"},\"burn(address,uint256,uint256)\":{\"notice\":\"Burns user variable debt\"},\"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Delegates borrowing power to a user on the specific debt token via ERC712 signature\"},\"getIncentivesController()\":{\"notice\":\"Returns the address of the Incentives Controller contract\"},\"getPreviousIndex(address)\":{\"notice\":\"Returns last index interest was accrued to the user's balance\"},\"getScaledUserBalanceAndSupply(address)\":{\"notice\":\"Returns the scaled balance of the user and the scaled total supply.\"},\"initialize(address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the debt token.\"},\"mint(address,address,uint256,uint256)\":{\"notice\":\"Mints debt token to the `onBehalfOf` address\"},\"nonces(address)\":{\"notice\":\"Returns the nonce value for address specified as parameter\"},\"scaledBalanceOf(address)\":{\"notice\":\"Returns the scaled balance of the user.\"},\"scaledTotalSupply()\":{\"notice\":\"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\"},\"setIncentivesController(address)\":{\"notice\":\"Sets a new Incentives Controller\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol\":\"MockVariableDebtToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/ICreditDelegationToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ICreditDelegationToken\\n * @author Aave\\n * @notice Defines the basic interface for a token supporting credit delegation.\\n */\\ninterface ICreditDelegationToken {\\n  /**\\n   * @dev Emitted on `approveDelegation` and `borrowAllowance\\n   * @param fromUser The address of the delegator\\n   * @param toUser The address of the delegatee\\n   * @param asset The address of the delegated asset\\n   * @param amount The amount being delegated\\n   */\\n  event BorrowAllowanceDelegated(\\n    address indexed fromUser,\\n    address indexed toUser,\\n    address indexed asset,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @notice Delegates borrowing power to a user on the specific debt token.\\n   * Delegation will still respect the liquidation constraints (even if delegated, a\\n   * delegatee cannot force a delegator HF to go below 1)\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The maximum amount being delegated.\\n   */\\n  function approveDelegation(address delegatee, uint256 amount) external;\\n\\n  /**\\n   * @notice Returns the borrow allowance of the user\\n   * @param fromUser The user to giving allowance\\n   * @param toUser The user to give allowance to\\n   * @return The current allowance of `toUser`\\n   */\\n  function borrowAllowance(address fromUser, address toUser) external view returns (uint256);\\n\\n  /**\\n   * @notice Delegates borrowing power to a user on the specific debt token via ERC712 signature\\n   * @param delegator The delegator of the credit\\n   * @param delegatee The delegatee that can use the credit\\n   * @param value The amount to be delegated\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v The V signature param\\n   * @param s The S signature param\\n   * @param r The R signature param\\n   */\\n  function delegationWithSig(\\n    address delegator,\\n    address delegatee,\\n    uint256 value,\\n    uint256 deadline,\\n    uint8 v,\\n    bytes32 r,\\n    bytes32 s\\n  ) external;\\n}\\n\",\"keccak256\":\"0xab2789bbbf54af9609fbd7fa93595a514866728b3096ede6b69952f98290c997\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {VariableDebtToken} from '../../protocol/tokenization/VariableDebtToken.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\ncontract MockVariableDebtToken is VariableDebtToken {\\n  constructor(IPool pool) VariableDebtToken(pool) {}\\n\\n  function getRevision() internal pure override returns (uint256) {\\n    return 0x3;\\n  }\\n}\\n\",\"keccak256\":\"0xd701a18b4dec32cbe4b3c05b200bf7dcf1db90b646c4667e46fbc9a2b4314e23\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {SafeCast} from '../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\\nimport {IInitializableDebtToken} from '../../interfaces/IInitializableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../interfaces/IVariableDebtToken.sol';\\nimport {EIP712Base} from './base/EIP712Base.sol';\\nimport {DebtTokenBase} from './base/DebtTokenBase.sol';\\nimport {ScaledBalanceTokenBase} from './base/ScaledBalanceTokenBase.sol';\\n\\n/**\\n * @title VariableDebtToken\\n * @author Aave\\n * @notice Implements a variable debt token to track the borrowing positions of users\\n * at variable rate mode\\n * @dev Transfer and approve functionalities are disabled since its a non-transferable token\\n */\\ncontract VariableDebtToken is DebtTokenBase, ScaledBalanceTokenBase, IVariableDebtToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  uint256 public constant DEBT_TOKEN_REVISION = 0x1;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The address of the Pool contract\\n   */\\n  constructor(\\n    IPool pool\\n  )\\n    DebtTokenBase()\\n    ScaledBalanceTokenBase(pool, 'VARIABLE_DEBT_TOKEN_IMPL', 'VARIABLE_DEBT_TOKEN_IMPL', 0)\\n  {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IInitializableDebtToken\\n  function initialize(\\n    IPool initializingPool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external override initializer {\\n    require(initializingPool == POOL, Errors.POOL_ADDRESSES_DO_NOT_MATCH);\\n    _setName(debtTokenName);\\n    _setSymbol(debtTokenSymbol);\\n    _setDecimals(debtTokenDecimals);\\n\\n    _underlyingAsset = underlyingAsset;\\n    _incentivesController = incentivesController;\\n\\n    _domainSeparator = _calculateDomainSeparator();\\n\\n    emit Initialized(\\n      underlyingAsset,\\n      address(POOL),\\n      address(incentivesController),\\n      debtTokenDecimals,\\n      debtTokenName,\\n      debtTokenSymbol,\\n      params\\n    );\\n  }\\n\\n  /// @inheritdoc VersionedInitializable\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return DEBT_TOKEN_REVISION;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address user) public view virtual override returns (uint256) {\\n    uint256 scaledBalance = super.balanceOf(user);\\n\\n    if (scaledBalance == 0) {\\n      return 0;\\n    }\\n\\n    return scaledBalance.rayMul(POOL.getReserveNormalizedVariableDebt(_underlyingAsset));\\n  }\\n\\n  /// @inheritdoc IVariableDebtToken\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external virtual override onlyPool returns (bool, uint256) {\\n    if (user != onBehalfOf) {\\n      _decreaseBorrowAllowance(onBehalfOf, user, amount);\\n    }\\n    return (_mintScaled(user, onBehalfOf, amount, index), scaledTotalSupply());\\n  }\\n\\n  /// @inheritdoc IVariableDebtToken\\n  function burn(\\n    address from,\\n    uint256 amount,\\n    uint256 index\\n  ) external virtual override onlyPool returns (uint256) {\\n    _burnScaled(from, address(0), amount, index);\\n    return scaledTotalSupply();\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return super.totalSupply().rayMul(POOL.getReserveNormalizedVariableDebt(_underlyingAsset));\\n  }\\n\\n  /// @inheritdoc EIP712Base\\n  function _EIP712BaseId() internal view override returns (string memory) {\\n    return name();\\n  }\\n\\n  /**\\n   * @dev Being non transferrable, the debt token does not implement any of the\\n   * standard ERC20 functions for transfer and allowance.\\n   */\\n  function transfer(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function allowance(address, address) external view virtual override returns (uint256) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function approve(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function transferFrom(address, address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function increaseAllowance(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function decreaseAllowance(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  /// @inheritdoc IVariableDebtToken\\n  function UNDERLYING_ASSET_ADDRESS() external view override returns (address) {\\n    return _underlyingAsset;\\n  }\\n}\\n\",\"keccak256\":\"0xd86b1ee620cb0fb2d3db1926f31660cd94c055e17103102e2b13f84c7a65191d\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/DebtTokenBase.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {VersionedInitializable} from '../../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {ICreditDelegationToken} from '../../../interfaces/ICreditDelegationToken.sol';\\nimport {EIP712Base} from './EIP712Base.sol';\\n\\n/**\\n * @title DebtTokenBase\\n * @author Aave\\n * @notice Base contract for different types of debt tokens, like StableDebtToken or VariableDebtToken\\n */\\nabstract contract DebtTokenBase is\\n  VersionedInitializable,\\n  EIP712Base,\\n  Context,\\n  ICreditDelegationToken\\n{\\n  // Map of borrow allowances (delegator => delegatee => borrowAllowanceAmount)\\n  mapping(address => mapping(address => uint256)) internal _borrowAllowances;\\n\\n  // Credit Delegation Typehash\\n  bytes32 public constant DELEGATION_WITH_SIG_TYPEHASH =\\n    keccak256('DelegationWithSig(address delegatee,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  address internal _underlyingAsset;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() EIP712Base() {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function approveDelegation(address delegatee, uint256 amount) external override {\\n    _approveDelegation(_msgSender(), delegatee, amount);\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function delegationWithSig(\\n    address delegator,\\n    address delegatee,\\n    uint256 value,\\n    uint256 deadline,\\n    uint8 v,\\n    bytes32 r,\\n    bytes32 s\\n  ) external {\\n    require(delegator != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, Errors.INVALID_EXPIRATION);\\n    uint256 currentValidNonce = _nonces[delegator];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR(),\\n        keccak256(\\n          abi.encode(DELEGATION_WITH_SIG_TYPEHASH, delegatee, value, currentValidNonce, deadline)\\n        )\\n      )\\n    );\\n    require(delegator == ecrecover(digest, v, r, s), Errors.INVALID_SIGNATURE);\\n    _nonces[delegator] = currentValidNonce + 1;\\n    _approveDelegation(delegator, delegatee, value);\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function borrowAllowance(\\n    address fromUser,\\n    address toUser\\n  ) external view override returns (uint256) {\\n    return _borrowAllowances[fromUser][toUser];\\n  }\\n\\n  /**\\n   * @notice Updates the borrow allowance of a user on the specific debt token.\\n   * @param delegator The address delegating the borrowing power\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The allowance amount being delegated.\\n   */\\n  function _approveDelegation(address delegator, address delegatee, uint256 amount) internal {\\n    _borrowAllowances[delegator][delegatee] = amount;\\n    emit BorrowAllowanceDelegated(delegator, delegatee, _underlyingAsset, amount);\\n  }\\n\\n  /**\\n   * @notice Decreases the borrow allowance of a user on the specific debt token.\\n   * @param delegator The address delegating the borrowing power\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The amount to subtract from the current allowance\\n   */\\n  function _decreaseBorrowAllowance(address delegator, address delegatee, uint256 amount) internal {\\n    uint256 newAllowance = _borrowAllowances[delegator][delegatee] - amount;\\n\\n    _borrowAllowances[delegator][delegatee] = newAllowance;\\n\\n    emit BorrowAllowanceDelegated(delegator, delegatee, _underlyingAsset, newAllowance);\\n  }\\n}\\n\",\"keccak256\":\"0xf2f4490b59813b0372edfa3eca4b74bb2eb3be386c109201ddc08b97e1bff9fd\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/EIP712Base.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title EIP712Base\\n * @author Aave\\n * @notice Base contract implementation of EIP712.\\n */\\nabstract contract EIP712Base {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 internal _domainSeparator;\\n  uint256 internal immutable _chainId;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() {\\n    _chainId = block.chainid;\\n  }\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\\n    if (block.chainid == _chainId) {\\n      return _domainSeparator;\\n    }\\n    return _calculateDomainSeparator();\\n  }\\n\\n  /**\\n   * @notice Returns the nonce value for address specified as parameter\\n   * @param owner The address for which the nonce is being returned\\n   * @return The nonce value for the input address`\\n   */\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n\\n  /**\\n   * @notice Compute the current domain separator\\n   * @return The domain separator for the token\\n   */\\n  function _calculateDomainSeparator() internal view returns (bytes32) {\\n    return\\n      keccak256(\\n        abi.encode(\\n          EIP712_DOMAIN,\\n          keccak256(bytes(_EIP712BaseId())),\\n          keccak256(EIP712_REVISION),\\n          block.chainid,\\n          address(this)\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Returns the user readable name of signing domain (e.g. token name)\\n   * @return The name of the signing domain\\n   */\\n  function _EIP712BaseId() internal view virtual returns (string memory);\\n}\\n\",\"keccak256\":\"0xd4ed5763068be0ffb08219fc2f9f3c87487578cd0617dae06db26018054b89cd\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IncentivizedERC20} from './IncentivizedERC20.sol';\\n\\n/**\\n * @title MintableIncentivizedERC20\\n * @author Aave\\n * @notice Implements mint and burn functions for IncentivizedERC20\\n */\\nabstract contract MintableIncentivizedERC20 is IncentivizedERC20 {\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) IncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /**\\n   * @notice Mints tokens to an account and apply incentives if defined\\n   * @param account The address receiving tokens\\n   * @param amount The amount of tokens to mint\\n   */\\n  function _mint(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply + amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns tokens from an account and apply incentives if defined\\n   * @param account The account whose tokens are burnt\\n   * @param amount The amount of tokens to burn\\n   */\\n  function _burn(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply - amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance - amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xc24b3d20923fd55a160698a594e47247c2fb0b1e0c795e47f89ddd2da2918824\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {MintableIncentivizedERC20} from './MintableIncentivizedERC20.sol';\\n\\n/**\\n * @title ScaledBalanceTokenBase\\n * @author Aave\\n * @notice Basic ERC20 implementation of scaled balance token\\n */\\nabstract contract ScaledBalanceTokenBase is MintableIncentivizedERC20, IScaledBalanceToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) MintableIncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledBalanceOf(address user) external view override returns (uint256) {\\n    return super.balanceOf(user);\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getScaledUserBalanceAndSupply(\\n    address user\\n  ) external view override returns (uint256, uint256) {\\n    return (super.balanceOf(user), super.totalSupply());\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledTotalSupply() public view virtual override returns (uint256) {\\n    return super.totalSupply();\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getPreviousIndex(address user) external view virtual override returns (uint256) {\\n    return _userState[user].additionalData;\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to mint a scaled balance token.\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the scaled tokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function _mintScaled(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) internal returns (bool) {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_MINT_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(onBehalfOf);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[onBehalfOf].additionalData);\\n\\n    _userState[onBehalfOf].additionalData = index.toUint128();\\n\\n    _mint(onBehalfOf, amountScaled.toUint128());\\n\\n    uint256 amountToMint = amount + balanceIncrease;\\n    emit Transfer(address(0), onBehalfOf, amountToMint);\\n    emit Mint(caller, onBehalfOf, amountToMint, balanceIncrease, index);\\n\\n    return (scaledBalance == 0);\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to burn a scaled balance token.\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param user The user which debt is burnt\\n   * @param target The address that will receive the underlying, if any\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   */\\n  function _burnScaled(address user, address target, uint256 amount, uint256 index) internal {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_BURN_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(user);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[user].additionalData);\\n\\n    _userState[user].additionalData = index.toUint128();\\n\\n    _burn(user, amountScaled.toUint128());\\n\\n    if (balanceIncrease > amount) {\\n      uint256 amountToMint = balanceIncrease - amount;\\n      emit Transfer(address(0), user, amountToMint);\\n      emit Mint(user, user, amountToMint, balanceIncrease, index);\\n    } else {\\n      uint256 amountToBurn = amount - balanceIncrease;\\n      emit Transfer(user, address(0), amountToBurn);\\n      emit Burn(user, target, amountToBurn, balanceIncrease, index);\\n    }\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to transfer scaled balance tokens between two users\\n   * @dev It emits a mint event with the interest accrued per user\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount, uint256 index) internal {\\n    uint256 senderScaledBalance = super.balanceOf(sender);\\n    uint256 senderBalanceIncrease = senderScaledBalance.rayMul(index) -\\n      senderScaledBalance.rayMul(_userState[sender].additionalData);\\n\\n    uint256 recipientScaledBalance = super.balanceOf(recipient);\\n    uint256 recipientBalanceIncrease = recipientScaledBalance.rayMul(index) -\\n      recipientScaledBalance.rayMul(_userState[recipient].additionalData);\\n\\n    _userState[sender].additionalData = index.toUint128();\\n    _userState[recipient].additionalData = index.toUint128();\\n\\n    super._transfer(sender, recipient, amount.rayDiv(index).toUint128());\\n\\n    if (senderBalanceIncrease > 0) {\\n      emit Transfer(address(0), sender, senderBalanceIncrease);\\n      emit Mint(_msgSender(), sender, senderBalanceIncrease, senderBalanceIncrease, index);\\n    }\\n\\n    if (sender != recipient && recipientBalanceIncrease > 0) {\\n      emit Transfer(address(0), recipient, recipientBalanceIncrease);\\n      emit Mint(_msgSender(), recipient, recipientBalanceIncrease, recipientBalanceIncrease, index);\\n    }\\n\\n    emit Transfer(sender, recipient, amount);\\n  }\\n}\\n\",\"keccak256\":\"0xbd3f86bbb655838646ea5f7c306bc8c572a9d272f54632f369908bb5420021dd\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":10499,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":10502,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":10572,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":27740,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"_nonces","offset":0,"slot":"52","type":"t_mapping(t_address,t_uint256)"},{"astId":27742,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"_domainSeparator","offset":0,"slot":"53","type":"t_bytes32"},{"astId":27517,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"_borrowAllowances","offset":0,"slot":"54","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":27524,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"_underlyingAsset","offset":0,"slot":"55","type":"t_address"},{"astId":27906,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"_userState","offset":0,"slot":"56","type":"t_mapping(t_address,t_struct(UserState)27901_storage)"},{"astId":27912,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"_allowances","offset":0,"slot":"57","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":27914,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"_totalSupply","offset":0,"slot":"58","type":"t_uint256"},{"astId":27916,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"_name","offset":0,"slot":"59","type":"t_string_storage"},{"astId":27918,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"_symbol","offset":0,"slot":"60","type":"t_string_storage"},{"astId":27920,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"_decimals","offset":0,"slot":"61","type":"t_uint8"},{"astId":27923,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"_incentivesController","offset":1,"slot":"61","type":"t_contract(IAaveIncentivesController)3875"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IAaveIncentivesController)3875":{"encoding":"inplace","label":"contract IAaveIncentivesController","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(UserState)27901_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct IncentivizedERC20.UserState)","numberOfBytes":"32","value":"t_struct(UserState)27901_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(UserState)27901_storage":{"encoding":"inplace","label":"struct IncentivizedERC20.UserState","members":[{"astId":27898,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"balance","offset":0,"slot":"0","type":"t_uint128"},{"astId":27900,"contract":"@aave/core-v3/contracts/mocks/upgradeability/MockVariableDebtToken.sol:MockVariableDebtToken","label":"additionalData","offset":16,"slot":"0","type":"t_uint128"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"DOMAIN_SEPARATOR()":{"notice":"Get the domain separator for the token"},"UNDERLYING_ASSET_ADDRESS()":{"notice":"Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)"},"approveDelegation(address,uint256)":{"notice":"Delegates borrowing power to a user on the specific debt token. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)"},"borrowAllowance(address,address)":{"notice":"Returns the borrow allowance of the user"},"burn(address,uint256,uint256)":{"notice":"Burns user variable debt"},"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Delegates borrowing power to a user on the specific debt token via ERC712 signature"},"getIncentivesController()":{"notice":"Returns the address of the Incentives Controller contract"},"getPreviousIndex(address)":{"notice":"Returns last index interest was accrued to the user's balance"},"getScaledUserBalanceAndSupply(address)":{"notice":"Returns the scaled balance of the user and the scaled total supply."},"initialize(address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the debt token."},"mint(address,address,uint256,uint256)":{"notice":"Mints debt token to the `onBehalfOf` address"},"nonces(address)":{"notice":"Returns the nonce value for address specified as parameter"},"scaledBalanceOf(address)":{"notice":"Returns the scaled balance of the user."},"scaledTotalSupply()":{"notice":"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)"},"setIncentivesController(address)":{"notice":"Sets a new Incentives Controller"}},"version":1}}},"@aave/core-v3/contracts/protocol/configuration/ACLManager.sol":{"ACLManager":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ASSET_LISTING_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BRIDGE_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EMERGENCY_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASH_BORROWER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RISK_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"addAssetListingAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bridge","type":"address"}],"name":"addBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"addEmergencyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"}],"name":"addFlashBorrower","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"addPoolAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"addRiskAdmin","outputs":[],"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":"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":"admin","type":"address"}],"name":"isAssetListingAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"bridge","type":"address"}],"name":"isBridge","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"isEmergencyAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"}],"name":"isFlashBorrower","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"isPoolAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"isRiskAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"removeAssetListingAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bridge","type":"address"}],"name":"removeBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"removeEmergencyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"borrower","type":"address"}],"name":"removeFlashBorrower","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"removePoolAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"removeRiskAdmin","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":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"bytes32","name":"adminRole","type":"bytes32"}],"name":"setRoleAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"addAssetListingAdmin(address)":{"params":{"admin":"The address of the new admin"}},"addBridge(address)":{"params":{"bridge":"The address of the new Bridge"}},"addEmergencyAdmin(address)":{"params":{"admin":"The address of the new admin"}},"addFlashBorrower(address)":{"params":{"borrower":"The address of the new FlashBorrower"}},"addPoolAdmin(address)":{"params":{"admin":"The address of the new admin"}},"addRiskAdmin(address)":{"params":{"admin":"The address of the new admin"}},"constructor":{"details":"ConstructorThe ACL admin should be initialized at the addressesProvider beforehand","params":{"provider":"The address of the PoolAddressesProvider"}},"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"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`."},"isAssetListingAdmin(address)":{"params":{"admin":"The address to check"},"returns":{"_0":"True if the given address is AssetListingAdmin, false otherwise"}},"isBridge(address)":{"params":{"bridge":"The address to check"},"returns":{"_0":"True if the given address is Bridge, false otherwise"}},"isEmergencyAdmin(address)":{"params":{"admin":"The address to check"},"returns":{"_0":"True if the given address is EmergencyAdmin, false otherwise"}},"isFlashBorrower(address)":{"params":{"borrower":"The address to check"},"returns":{"_0":"True if the given address is FlashBorrower, false otherwise"}},"isPoolAdmin(address)":{"params":{"admin":"The address to check"},"returns":{"_0":"True if the given address is PoolAdmin, false otherwise"}},"isRiskAdmin(address)":{"params":{"admin":"The address to check"},"returns":{"_0":"True if the given address is RiskAdmin, false otherwise"}},"removeAssetListingAdmin(address)":{"params":{"admin":"The address of the admin to remove"}},"removeBridge(address)":{"params":{"bridge":"The address of the bridge to remove"}},"removeEmergencyAdmin(address)":{"params":{"admin":"The address of the admin to remove"}},"removeFlashBorrower(address)":{"params":{"borrower":"The address of the FlashBorrower to remove"}},"removePoolAdmin(address)":{"params":{"admin":"The address of the admin to remove"}},"removeRiskAdmin(address)":{"params":{"admin":"The address of the admin to remove"}},"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."},"setRoleAdmin(bytes32,bytes32)":{"details":"By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.","params":{"adminRole":"The admin role","role":"The role to be managed by the admin role"}},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."}},"stateVariables":{"ADDRESSES_PROVIDER":{"return":"The address of the PoolAddressesProvider","returns":{"_0":"The address of the PoolAddressesProvider"}},"ASSET_LISTING_ADMIN_ROLE":{"return":"The id of the AssetListingAdmin role","returns":{"_0":"The id of the AssetListingAdmin role"}},"BRIDGE_ROLE":{"return":"The id of the Bridge role","returns":{"_0":"The id of the Bridge role"}},"EMERGENCY_ADMIN_ROLE":{"return":"The id of the EmergencyAdmin role","returns":{"_0":"The id of the EmergencyAdmin role"}},"FLASH_BORROWER_ROLE":{"return":"The id of the FlashBorrower role","returns":{"_0":"The id of the FlashBorrower role"}},"POOL_ADMIN_ROLE":{"return":"The id of the PoolAdmin role","returns":{"_0":"The id of the PoolAdmin role"}},"RISK_ADMIN_ROLE":{"return":"The id of the RiskAdmin role","returns":{"_0":"The id of the RiskAdmin role"}}},"title":"ACLManager","version":1},"evm":{"bytecode":{"functionDebugData":{"@_9222":{"entryPoint":null,"id":9222,"parameterSlots":1,"returnSlots":0},"@_grantRole_394":{"entryPoint":298,"id":394,"parameterSlots":2,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_setupRole_335":{"entryPoint":282,"id":335,"parameterSlots":2,"returnSlots":0},"@hasRole_200":{"entryPoint":null,"id":200,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory":{"entryPoint":483,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":522,"id":null,"parameterSlots":2,"returnSlots":1},"validator_revert_contract_IPoolAddressesProvider":{"entryPoint":458,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1364:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"83:86:201","statements":[{"body":{"nodeType":"YulBlock","src":"147:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"156:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"149:6:201"},"nodeType":"YulFunctionCall","src":"149:12:201"},"nodeType":"YulExpressionStatement","src":"149:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"106:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"117:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"132:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"137:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"128:3:201"},"nodeType":"YulFunctionCall","src":"128:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"141:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"124:3:201"},"nodeType":"YulFunctionCall","src":"124:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"113:3:201"},"nodeType":"YulFunctionCall","src":"113:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"103:2:201"},"nodeType":"YulFunctionCall","src":"103:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"96:6:201"},"nodeType":"YulFunctionCall","src":"96:50:201"},"nodeType":"YulIf","src":"93:70:201"}]},"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"72:5:201","type":""}],"src":"14:155:201"},{"body":{"nodeType":"YulBlock","src":"286:194:201","statements":[{"body":{"nodeType":"YulBlock","src":"332:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"341:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"344:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"334:6:201"},"nodeType":"YulFunctionCall","src":"334:12:201"},"nodeType":"YulExpressionStatement","src":"334:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"307:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"316:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"303:3:201"},"nodeType":"YulFunctionCall","src":"303:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"328:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"299:3:201"},"nodeType":"YulFunctionCall","src":"299:32:201"},"nodeType":"YulIf","src":"296:52:201"},{"nodeType":"YulVariableDeclaration","src":"357:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"376:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"370:5:201"},"nodeType":"YulFunctionCall","src":"370:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"361:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"444:5:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"395:48:201"},"nodeType":"YulFunctionCall","src":"395:55:201"},"nodeType":"YulExpressionStatement","src":"395:55:201"},{"nodeType":"YulAssignment","src":"459:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"469:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"459:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"252:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"263:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"275:6:201","type":""}],"src":"174:306:201"},{"body":{"nodeType":"YulBlock","src":"566:194:201","statements":[{"body":{"nodeType":"YulBlock","src":"612:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"621:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"624:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"614:6:201"},"nodeType":"YulFunctionCall","src":"614:12:201"},"nodeType":"YulExpressionStatement","src":"614:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"587:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"596:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"583:3:201"},"nodeType":"YulFunctionCall","src":"583:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"608:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"579:3:201"},"nodeType":"YulFunctionCall","src":"579:32:201"},"nodeType":"YulIf","src":"576:52:201"},{"nodeType":"YulVariableDeclaration","src":"637:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"656:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"650:5:201"},"nodeType":"YulFunctionCall","src":"650:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"641:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"724:5:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"675:48:201"},"nodeType":"YulFunctionCall","src":"675:55:201"},"nodeType":"YulExpressionStatement","src":"675:55:201"},{"nodeType":"YulAssignment","src":"739:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"749:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"739:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"532:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"543:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"555:6:201","type":""}],"src":"485:275:201"},{"body":{"nodeType":"YulBlock","src":"886:476:201","statements":[{"nodeType":"YulVariableDeclaration","src":"896:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"906:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"900:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"924:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"935:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"917:6:201"},"nodeType":"YulFunctionCall","src":"917:21:201"},"nodeType":"YulExpressionStatement","src":"917:21:201"},{"nodeType":"YulVariableDeclaration","src":"947:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"967:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"961:5:201"},"nodeType":"YulFunctionCall","src":"961:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"951:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"994:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1005:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"990:3:201"},"nodeType":"YulFunctionCall","src":"990:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"1010:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"983:6:201"},"nodeType":"YulFunctionCall","src":"983:34:201"},"nodeType":"YulExpressionStatement","src":"983:34:201"},{"nodeType":"YulVariableDeclaration","src":"1026:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1035:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"1030:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1095:90:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1124:9:201"},{"name":"i","nodeType":"YulIdentifier","src":"1135:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1120:3:201"},"nodeType":"YulFunctionCall","src":"1120:17:201"},{"kind":"number","nodeType":"YulLiteral","src":"1139:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1116:3:201"},"nodeType":"YulFunctionCall","src":"1116:26:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1158:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"1166:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1154:3:201"},"nodeType":"YulFunctionCall","src":"1154:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1170:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1150:3:201"},"nodeType":"YulFunctionCall","src":"1150:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1144:5:201"},"nodeType":"YulFunctionCall","src":"1144:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1109:6:201"},"nodeType":"YulFunctionCall","src":"1109:66:201"},"nodeType":"YulExpressionStatement","src":"1109:66:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1056:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"1059:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1053:2:201"},"nodeType":"YulFunctionCall","src":"1053:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"1067:19:201","statements":[{"nodeType":"YulAssignment","src":"1069:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1078:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1081:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1074:3:201"},"nodeType":"YulFunctionCall","src":"1074:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"1069:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"1049:3:201","statements":[]},"src":"1045:140:201"},{"body":{"nodeType":"YulBlock","src":"1219:66:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1248:9:201"},{"name":"length","nodeType":"YulIdentifier","src":"1259:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1244:3:201"},"nodeType":"YulFunctionCall","src":"1244:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"1268:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1240:3:201"},"nodeType":"YulFunctionCall","src":"1240:31:201"},{"kind":"number","nodeType":"YulLiteral","src":"1273:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1233:6:201"},"nodeType":"YulFunctionCall","src":"1233:42:201"},"nodeType":"YulExpressionStatement","src":"1233:42:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1200:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"1203:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1197:2:201"},"nodeType":"YulFunctionCall","src":"1197:13:201"},"nodeType":"YulIf","src":"1194:91:201"},{"nodeType":"YulAssignment","src":"1294:62:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1310:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1329:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1337:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1325:3:201"},"nodeType":"YulFunctionCall","src":"1325:15:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1346:2:201","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1342:3:201"},"nodeType":"YulFunctionCall","src":"1342:7:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1321:3:201"},"nodeType":"YulFunctionCall","src":"1321:29:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1306:3:201"},"nodeType":"YulFunctionCall","src":"1306:45:201"},{"kind":"number","nodeType":"YulLiteral","src":"1353:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1302:3:201"},"nodeType":"YulFunctionCall","src":"1302:54:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1294:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"855:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"866:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"877:4:201","type":""}],"src":"765:597:201"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPoolAddressesProvider(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60a06040523480156200001157600080fd5b50604051620015cd380380620015cd8339810160408190526200003491620001e3565b806001600160a01b03166080816001600160a01b0316815250506000816001600160a01b0316630e67178c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200008f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b59190620001e3565b604080518082019091526002815261373560f01b60208201529091506001600160a01b038216620001045760405162461bcd60e51b8152600401620000fb91906200020a565b60405180910390fd5b50620001126000826200011a565b505062000262565b6200012682826200012a565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000126576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001863390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6001600160a01b0381168114620001e057600080fd5b50565b600060208284031215620001f657600080fd5b81516200020381620001ca565b9392505050565b600060208083528351808285015260005b8181101562000239578581018301518582016040015282016200021b565b818111156200024c576000604083870101525b50601f01601f1916929092016040019392505050565b60805161134f6200027e6000396000610252015261134f6000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c8063674b5e4d1161012a5780639a2b96f7116100bd578063b5bfddea1161008c578063d547741f11610071578063d547741f1461059e578063f83695cb146105b1578063fa50f297146105c457600080fd5b8063b5bfddea14610550578063b8f6dba71461057757600080fd5b80639a2b96f71461050f5780639ac9d80b14610522578063a217fddf14610535578063a21bce151461053d57600080fd5b80637a9a93f4116100f95780637a9a93f41461044a5780637be53ca11461045d57806391d14854146104b85780639712fdf8146104fc57600080fd5b8063674b5e4d146103d65780636e76fc8f146103e9578063726600ce1461041057806378bb0a431461042357600080fd5b80632500f2b6116101a25780633c5a08e5116101715780633c5a08e5146103625780634f16b425146103755780635577b7a91461039c5780635b9a94e4146103c357600080fd5b80632500f2b614610316578063253cf980146103295780632f2ff15d1461033c57806336568abe1461034f57600080fd5b8063179efb09116101de578063179efb09146102ac5780631e4e0091146102bf57806322650caf146102d2578063248a9ca3146102e557600080fd5b806301ffc9a71461021057806304df017d146102385780630542975c1461024d57806313ee32e014610299575b600080fd5b61022361021e366004611013565b6105d7565b60405190151581526020015b60405180910390f35b61024b61024636600461107e565b610670565b005b6102747f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161022f565b6102236102a736600461107e565b61069d565b61024b6102ba36600461107e565b6106ea565b61024b6102cd366004611099565b610714565b61024b6102e036600461107e565b61072f565b6103086102f33660046110bb565b60009081526020819052604090206001015490565b60405190815260200161022f565b61022361032436600461107e565b610759565b61024b61033736600461107e565b6107a6565b61024b61034a3660046110d4565b6107d0565b61024b61035d3660046110d4565b6107f6565b61024b61037036600461107e565b6108ae565b6103087f8aa855a911518ecfbe5bc3088c8f3dda7badf130faaf8ace33fdc33828e1816781565b6103087f939b8dfb57ecef2aea54a93a15e86768b9d4089f1ba61c245e6ec980695f4ca481565b61024b6103d136600461107e565b6108d8565b6102236103e436600461107e565b610902565b6103087f5c91514091af31f62f596a314af7d5be40146b2f2355969392f055e12e0982fb81565b61022361041e36600461107e565b61094f565b6103087f19c860a63258efbd0ecb7d55c626237bf5c2044c26c073390b74f0c13c85743381565b61024b61045836600461107e565b61099c565b61022361046b36600461107e565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fd21b659ff028ba5860060da0a2ef0b8b1b13b1f79963511fcee160c2e54d2f22602052604081205460ff1661066a565b6102236104c63660046110d4565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61024b61050a36600461107e565b6109c6565b61024b61051d36600461107e565b6109f0565b61024b61053036600461107e565b610a1a565b610308600081565b61024b61054b36600461107e565b610a44565b6103087f08fb31c3e81624356c3314088aa971b73bcc82d22bc3e3b184b4593077ae327881565b6103087f12ad05bde78c5ab75238ce885307f96ecd482bb402ef831f99e7018a0f169b7b81565b61024b6105ac3660046110d4565b610a6a565b61024b6105bf36600461107e565b610a90565b6102236105d236600461107e565b610aba565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061066a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61069a7f08fb31c3e81624356c3314088aa971b73bcc82d22bc3e3b184b4593077ae327882610a6a565b50565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fcba084d2e26105260e9ae84b007967d64af085c681345e4941eeba502738cf44602052604081205460ff1661066a565b61069a7f5c91514091af31f62f596a314af7d5be40146b2f2355969392f055e12e0982fb826107d0565b60006107208133610b07565b61072a8383610bd7565b505050565b61069a7f12ad05bde78c5ab75238ce885307f96ecd482bb402ef831f99e7018a0f169b7b826107d0565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fac55d60145c2b1e72232130507b090ddd2cd26daa31eeab1e3e64b89140e668d602052604081205460ff1661066a565b61069a7f939b8dfb57ecef2aea54a93a15e86768b9d4089f1ba61c245e6ec980695f4ca482610a6a565b6000828152602081905260409020600101546107ec8133610b07565b61072a8383610c22565b73ffffffffffffffffffffffffffffffffffffffff811633146108a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b6108aa8282610d12565b5050565b61069a7f8aa855a911518ecfbe5bc3088c8f3dda7badf130faaf8ace33fdc33828e1816782610a6a565b61069a7f8aa855a911518ecfbe5bc3088c8f3dda7badf130faaf8ace33fdc33828e18167826107d0565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fa2630211c42039a24e17727bf18ec344681c4916090d2a50e04b9b6e50b7fea9602052604081205460ff1661066a565b73ffffffffffffffffffffffffffffffffffffffff811660009081527f9e350b38c6d0090a0631963682975411c4e88e66bd66d7f4ffcc296b4c83bf93602052604081205460ff1661066a565b61069a7f5c91514091af31f62f596a314af7d5be40146b2f2355969392f055e12e0982fb82610a6a565b61069a7f08fb31c3e81624356c3314088aa971b73bcc82d22bc3e3b184b4593077ae3278826107d0565b61069a7f19c860a63258efbd0ecb7d55c626237bf5c2044c26c073390b74f0c13c857433826107d0565b61069a7f939b8dfb57ecef2aea54a93a15e86768b9d4089f1ba61c245e6ec980695f4ca4826107d0565b61069a7f19c860a63258efbd0ecb7d55c626237bf5c2044c26c073390b74f0c13c857433825b600082815260208190526040902060010154610a868133610b07565b61072a8383610d12565b61069a7f12ad05bde78c5ab75238ce885307f96ecd482bb402ef831f99e7018a0f169b7b82610a6a565b73ffffffffffffffffffffffffffffffffffffffff811660009081527f2eadd72b6698cc7bfac8abf613f53107771ac2a3e4a3221cda0a8e2b1b91b0b4602052604081205460ff1661066a565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166108aa57610b5d8173ffffffffffffffffffffffffffffffffffffffff166014610dc9565b610b68836020610dc9565b604051602001610b79929190611130565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610897916004016111b1565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166108aa5760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610cb43390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156108aa5760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60606000610dd8836002611231565b610de390600261126e565b67ffffffffffffffff811115610dfb57610dfb611286565b6040519080825280601f01601f191660200182016040528015610e25576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110610e5c57610e5c6112b5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110610ebf57610ebf6112b5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000610efb846002611231565b610f0690600161126e565b90505b6001811115610fa3577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110610f4757610f476112b5565b1a60f81b828281518110610f5d57610f5d6112b5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93610f9c816112e4565b9050610f09565b50831561100c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610897565b9392505050565b60006020828403121561102557600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461100c57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461107957600080fd5b919050565b60006020828403121561109057600080fd5b61100c82611055565b600080604083850312156110ac57600080fd5b50508035926020909101359150565b6000602082840312156110cd57600080fd5b5035919050565b600080604083850312156110e757600080fd5b823591506110f760208401611055565b90509250929050565b60005b8381101561111b578181015183820152602001611103565b8381111561112a576000848401525b50505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611168816017850160208801611100565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516111a5816028840160208801611100565b01602801949350505050565b60208152600082518060208401526111d0816040850160208701611100565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561126957611269611202565b500290565b6000821982111561128157611281611202565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000816112f3576112f3611202565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea2646970667358221220a67d953277025ae12510dc5947dcbc90c046dcef6453a6facc9699c20372272264736f6c634300080a0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x15CD CODESIZE SUB DUP1 PUSH3 0x15CD DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x1E3 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE67178C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x8F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0xB5 SWAP2 SWAP1 PUSH3 0x1E3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH2 0x3735 PUSH1 0xF0 SHL PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0x104 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0xFB SWAP2 SWAP1 PUSH3 0x20A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH3 0x112 PUSH1 0x0 DUP3 PUSH3 0x11A JUMP JUMPDEST POP POP PUSH3 0x262 JUMP JUMPDEST PUSH3 0x126 DUP3 DUP3 PUSH3 0x12A JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH3 0x126 JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH3 0x186 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x203 DUP2 PUSH3 0x1CA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x239 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH3 0x21B JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH3 0x24C JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x134F PUSH3 0x27E PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH2 0x252 ADD MSTORE PUSH2 0x134F 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 0x20B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x674B5E4D GT PUSH2 0x12A JUMPI DUP1 PUSH4 0x9A2B96F7 GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xB5BFDDEA GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xD547741F GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0x59E JUMPI DUP1 PUSH4 0xF83695CB EQ PUSH2 0x5B1 JUMPI DUP1 PUSH4 0xFA50F297 EQ PUSH2 0x5C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB5BFDDEA EQ PUSH2 0x550 JUMPI DUP1 PUSH4 0xB8F6DBA7 EQ PUSH2 0x577 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9A2B96F7 EQ PUSH2 0x50F JUMPI DUP1 PUSH4 0x9AC9D80B EQ PUSH2 0x522 JUMPI DUP1 PUSH4 0xA217FDDF EQ PUSH2 0x535 JUMPI DUP1 PUSH4 0xA21BCE15 EQ PUSH2 0x53D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7A9A93F4 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0x7A9A93F4 EQ PUSH2 0x44A JUMPI DUP1 PUSH4 0x7BE53CA1 EQ PUSH2 0x45D JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x4B8 JUMPI DUP1 PUSH4 0x9712FDF8 EQ PUSH2 0x4FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x674B5E4D EQ PUSH2 0x3D6 JUMPI DUP1 PUSH4 0x6E76FC8F EQ PUSH2 0x3E9 JUMPI DUP1 PUSH4 0x726600CE EQ PUSH2 0x410 JUMPI DUP1 PUSH4 0x78BB0A43 EQ PUSH2 0x423 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2500F2B6 GT PUSH2 0x1A2 JUMPI DUP1 PUSH4 0x3C5A08E5 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x3C5A08E5 EQ PUSH2 0x362 JUMPI DUP1 PUSH4 0x4F16B425 EQ PUSH2 0x375 JUMPI DUP1 PUSH4 0x5577B7A9 EQ PUSH2 0x39C JUMPI DUP1 PUSH4 0x5B9A94E4 EQ PUSH2 0x3C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2500F2B6 EQ PUSH2 0x316 JUMPI DUP1 PUSH4 0x253CF980 EQ PUSH2 0x329 JUMPI DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x33C JUMPI DUP1 PUSH4 0x36568ABE EQ PUSH2 0x34F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x179EFB09 GT PUSH2 0x1DE JUMPI DUP1 PUSH4 0x179EFB09 EQ PUSH2 0x2AC JUMPI DUP1 PUSH4 0x1E4E0091 EQ PUSH2 0x2BF JUMPI DUP1 PUSH4 0x22650CAF EQ PUSH2 0x2D2 JUMPI DUP1 PUSH4 0x248A9CA3 EQ PUSH2 0x2E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0x4DF017D EQ PUSH2 0x238 JUMPI DUP1 PUSH4 0x542975C EQ PUSH2 0x24D JUMPI DUP1 PUSH4 0x13EE32E0 EQ PUSH2 0x299 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x223 PUSH2 0x21E CALLDATASIZE PUSH1 0x4 PUSH2 0x1013 JUMP JUMPDEST PUSH2 0x5D7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x24B PUSH2 0x246 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x670 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x274 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x22F JUMP JUMPDEST PUSH2 0x223 PUSH2 0x2A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x69D JUMP JUMPDEST PUSH2 0x24B PUSH2 0x2BA CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x6EA JUMP JUMPDEST PUSH2 0x24B PUSH2 0x2CD CALLDATASIZE PUSH1 0x4 PUSH2 0x1099 JUMP JUMPDEST PUSH2 0x714 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x2E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x72F JUMP JUMPDEST PUSH2 0x308 PUSH2 0x2F3 CALLDATASIZE PUSH1 0x4 PUSH2 0x10BB JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x22F JUMP JUMPDEST PUSH2 0x223 PUSH2 0x324 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x759 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x337 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x7A6 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x34A CALLDATASIZE PUSH1 0x4 PUSH2 0x10D4 JUMP JUMPDEST PUSH2 0x7D0 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x35D CALLDATASIZE PUSH1 0x4 PUSH2 0x10D4 JUMP JUMPDEST PUSH2 0x7F6 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x370 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x8AE JUMP JUMPDEST PUSH2 0x308 PUSH32 0x8AA855A911518ECFBE5BC3088C8F3DDA7BADF130FAAF8ACE33FDC33828E18167 DUP2 JUMP JUMPDEST PUSH2 0x308 PUSH32 0x939B8DFB57ECEF2AEA54A93A15E86768B9D4089F1BA61C245E6EC980695F4CA4 DUP2 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x3D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x8D8 JUMP JUMPDEST PUSH2 0x223 PUSH2 0x3E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x902 JUMP JUMPDEST PUSH2 0x308 PUSH32 0x5C91514091AF31F62F596A314AF7D5BE40146B2F2355969392F055E12E0982FB DUP2 JUMP JUMPDEST PUSH2 0x223 PUSH2 0x41E CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x94F JUMP JUMPDEST PUSH2 0x308 PUSH32 0x19C860A63258EFBD0ECB7D55C626237BF5C2044C26C073390B74F0C13C857433 DUP2 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x458 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x99C JUMP JUMPDEST PUSH2 0x223 PUSH2 0x46B CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xD21B659FF028BA5860060DA0A2EF0B8B1B13B1F79963511FCEE160C2E54D2F22 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x66A JUMP JUMPDEST PUSH2 0x223 PUSH2 0x4C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x10D4 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x50A CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x9C6 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x51D CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x9F0 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x530 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0xA1A JUMP JUMPDEST PUSH2 0x308 PUSH1 0x0 DUP2 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x54B CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0xA44 JUMP JUMPDEST PUSH2 0x308 PUSH32 0x8FB31C3E81624356C3314088AA971B73BCC82D22BC3E3B184B4593077AE3278 DUP2 JUMP JUMPDEST PUSH2 0x308 PUSH32 0x12AD05BDE78C5AB75238CE885307F96ECD482BB402EF831F99E7018A0F169B7B DUP2 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x5AC CALLDATASIZE PUSH1 0x4 PUSH2 0x10D4 JUMP JUMPDEST PUSH2 0xA6A JUMP JUMPDEST PUSH2 0x24B PUSH2 0x5BF CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0xA90 JUMP JUMPDEST PUSH2 0x223 PUSH2 0x5D2 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0xABA JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH32 0x7965DB0B00000000000000000000000000000000000000000000000000000000 EQ DUP1 PUSH2 0x66A JUMPI POP PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND EQ JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x69A PUSH32 0x8FB31C3E81624356C3314088AA971B73BCC82D22BC3E3B184B4593077AE3278 DUP3 PUSH2 0xA6A JUMP JUMPDEST POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xCBA084D2E26105260E9AE84B007967D64AF085C681345E4941EEBA502738CF44 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x66A JUMP JUMPDEST PUSH2 0x69A PUSH32 0x5C91514091AF31F62F596A314AF7D5BE40146B2F2355969392F055E12E0982FB DUP3 PUSH2 0x7D0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x720 DUP2 CALLER PUSH2 0xB07 JUMP JUMPDEST PUSH2 0x72A DUP4 DUP4 PUSH2 0xBD7 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x69A PUSH32 0x12AD05BDE78C5AB75238CE885307F96ECD482BB402EF831F99E7018A0F169B7B DUP3 PUSH2 0x7D0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xAC55D60145C2B1E72232130507B090DDD2CD26DAA31EEAB1E3E64B89140E668D PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x66A JUMP JUMPDEST PUSH2 0x69A PUSH32 0x939B8DFB57ECEF2AEA54A93A15E86768B9D4089F1BA61C245E6EC980695F4CA4 DUP3 PUSH2 0xA6A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH2 0x7EC DUP2 CALLER PUSH2 0xB07 JUMP JUMPDEST PUSH2 0x72A DUP4 DUP4 PUSH2 0xC22 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND CALLER EQ PUSH2 0x8A0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416363657373436F6E74726F6C3A2063616E206F6E6C792072656E6F756E6365 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x20726F6C657320666F722073656C660000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x8AA DUP3 DUP3 PUSH2 0xD12 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x69A PUSH32 0x8AA855A911518ECFBE5BC3088C8F3DDA7BADF130FAAF8ACE33FDC33828E18167 DUP3 PUSH2 0xA6A JUMP JUMPDEST PUSH2 0x69A PUSH32 0x8AA855A911518ECFBE5BC3088C8F3DDA7BADF130FAAF8ACE33FDC33828E18167 DUP3 PUSH2 0x7D0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xA2630211C42039A24E17727BF18EC344681C4916090D2A50E04B9B6E50B7FEA9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x66A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0x9E350B38C6D0090A0631963682975411C4E88E66BD66D7F4FFCC296B4C83BF93 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x66A JUMP JUMPDEST PUSH2 0x69A PUSH32 0x5C91514091AF31F62F596A314AF7D5BE40146B2F2355969392F055E12E0982FB DUP3 PUSH2 0xA6A JUMP JUMPDEST PUSH2 0x69A PUSH32 0x8FB31C3E81624356C3314088AA971B73BCC82D22BC3E3B184B4593077AE3278 DUP3 PUSH2 0x7D0 JUMP JUMPDEST PUSH2 0x69A PUSH32 0x19C860A63258EFBD0ECB7D55C626237BF5C2044C26C073390B74F0C13C857433 DUP3 PUSH2 0x7D0 JUMP JUMPDEST PUSH2 0x69A PUSH32 0x939B8DFB57ECEF2AEA54A93A15E86768B9D4089F1BA61C245E6EC980695F4CA4 DUP3 PUSH2 0x7D0 JUMP JUMPDEST PUSH2 0x69A PUSH32 0x19C860A63258EFBD0ECB7D55C626237BF5C2044C26C073390B74F0C13C857433 DUP3 JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH2 0xA86 DUP2 CALLER PUSH2 0xB07 JUMP JUMPDEST PUSH2 0x72A DUP4 DUP4 PUSH2 0xD12 JUMP JUMPDEST PUSH2 0x69A PUSH32 0x12AD05BDE78C5AB75238CE885307F96ECD482BB402EF831F99E7018A0F169B7B DUP3 PUSH2 0xA6A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0x2EADD72B6698CC7BFAC8ABF613F53107771AC2A3E4A3221CDA0A8E2B1B91B0B4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x66A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x8AA JUMPI PUSH2 0xB5D DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x14 PUSH2 0xDC9 JUMP JUMPDEST PUSH2 0xB68 DUP4 PUSH1 0x20 PUSH2 0xDC9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xB79 SWAP3 SWAP2 SWAP1 PUSH2 0x1130 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH2 0x897 SWAP2 PUSH1 0x4 ADD PUSH2 0x11B1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 PUSH1 0x1 ADD DUP1 SLOAD SWAP1 DUP5 SWAP1 SSTORE SWAP1 MLOAD SWAP1 SWAP2 DUP4 SWAP2 DUP4 SWAP2 DUP7 SWAP2 PUSH32 0xBD79B86FFE0AB8E8776151514217CD7CACD52C909F66475C3AF44E129F0B00FF SWAP2 SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x8AA JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0xCB4 CALLER SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x8AA JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE MLOAD CALLER SWAP3 DUP6 SWAP2 PUSH32 0xF6391F5C32D9C69D2A47EA670B442974B53935D1EDC7FD64EB21E047A839171B SWAP2 SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0xDD8 DUP4 PUSH1 0x2 PUSH2 0x1231 JUMP JUMPDEST PUSH2 0xDE3 SWAP1 PUSH1 0x2 PUSH2 0x126E JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xDFB JUMPI PUSH2 0xDFB PUSH2 0x1286 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xE25 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH32 0x3000000000000000000000000000000000000000000000000000000000000000 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xE5C JUMPI PUSH2 0xE5C PUSH2 0x12B5 JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH32 0x7800000000000000000000000000000000000000000000000000000000000000 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xEBF JUMPI PUSH2 0xEBF PUSH2 0x12B5 JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x0 PUSH2 0xEFB DUP5 PUSH1 0x2 PUSH2 0x1231 JUMP JUMPDEST PUSH2 0xF06 SWAP1 PUSH1 0x1 PUSH2 0x126E JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x1 DUP2 GT ISZERO PUSH2 0xFA3 JUMPI PUSH32 0x3031323334353637383961626364656600000000000000000000000000000000 DUP6 PUSH1 0xF AND PUSH1 0x10 DUP2 LT PUSH2 0xF47 JUMPI PUSH2 0xF47 PUSH2 0x12B5 JUMP JUMPDEST BYTE PUSH1 0xF8 SHL DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xF5D JUMPI PUSH2 0xF5D PUSH2 0x12B5 JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x4 SWAP5 SWAP1 SWAP5 SHR SWAP4 PUSH2 0xF9C DUP2 PUSH2 0x12E4 JUMP JUMPDEST SWAP1 POP PUSH2 0xF09 JUMP JUMPDEST POP DUP4 ISZERO PUSH2 0x100C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537472696E67733A20686578206C656E67746820696E73756666696369656E74 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x897 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1025 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x100C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1079 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1090 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x100C DUP3 PUSH2 0x1055 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x10AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x10CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x10E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH2 0x10F7 PUSH1 0x20 DUP5 ADD PUSH2 0x1055 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x111B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1103 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x112A JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH32 0x416363657373436F6E74726F6C3A206163636F756E7420000000000000000000 DUP2 MSTORE PUSH1 0x0 DUP4 MLOAD PUSH2 0x1168 DUP2 PUSH1 0x17 DUP6 ADD PUSH1 0x20 DUP9 ADD PUSH2 0x1100 JUMP JUMPDEST PUSH32 0x206973206D697373696E6720726F6C6520000000000000000000000000000000 PUSH1 0x17 SWAP2 DUP5 ADD SWAP2 DUP3 ADD MSTORE DUP4 MLOAD PUSH2 0x11A5 DUP2 PUSH1 0x28 DUP5 ADD PUSH1 0x20 DUP9 ADD PUSH2 0x1100 JUMP JUMPDEST ADD PUSH1 0x28 ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x11D0 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x1100 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x1269 JUMPI PUSH2 0x1269 PUSH2 0x1202 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1281 JUMPI PUSH2 0x1281 PUSH2 0x1202 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x12F3 JUMPI PUSH2 0x12F3 PUSH2 0x1202 JUMP JUMPDEST POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA6 PUSH30 0x953277025AE12510DC5947DCBC90C046DCEF6453A6FACC9699C203722722 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"489:3901:66:-:0;;;1281:248;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1353:8;-1:-1:-1;;;;;1332:29:66;;;-1:-1:-1;;;;;1332:29:66;;;;;1367:16;1386:8;-1:-1:-1;;;;;1386:20:66;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1446:31;;;;;;;;;;;;-1:-1:-1;;;1446:31:66;;;;1367:41;;-1:-1:-1;;;;;;1422:22:66;;1414:64;;;;-1:-1:-1;;;1414:64:66;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;1484:40:66;1946:4:2;1515:8:66;1484:10;:40::i;:::-;1326:203;1281:248;489:3901;;5727:104:2;5801:25;5812:4;5818:7;5801:10;:25::i;:::-;5727:104;;:::o;6181:202::-;2807:4;2826:12;;;;;;;;;;;-1:-1:-1;;;;;2826:29:2;;;;;;;;;;;;6246:133;;6283:6;:12;;;;;;;;;;;-1:-1:-1;;;;;6283:29:2;;;;;;;;;:36;;-1:-1:-1;;6283:36:2;6315:4;6283:36;;;6359:12;678:10:4;;587:107;6359:12:2;-1:-1:-1;;;;;6332:40:2;6350:7;-1:-1:-1;;;;;6332:40:2;6344:4;6332:40;;;;;;;;;;6181:202;;:::o;14:155:201:-;-1:-1:-1;;;;;113:31:201;;103:42;;93:70;;159:1;156;149:12;93:70;14:155;:::o;174:306::-;275:6;328:2;316:9;307:7;303:23;299:32;296:52;;;344:1;341;334:12;296:52;376:9;370:16;395:55;444:5;395:55;:::i;:::-;469:5;174:306;-1:-1:-1;;;174:306:201:o;765:597::-;877:4;906:2;935;924:9;917:21;967:6;961:13;1010:6;1005:2;994:9;990:18;983:34;1035:1;1045:140;1059:6;1056:1;1053:13;1045:140;;;1154:14;;;1150:23;;1144:30;1120:17;;;1139:2;1116:26;1109:66;1074:10;;1045:140;;;1203:6;1200:1;1197:13;1194:91;;;1273:1;1268:2;1259:6;1248:9;1244:22;1240:31;1233:42;1194:91;-1:-1:-1;1346:2:201;1325:15;-1:-1:-1;;1321:29:201;1306:45;;;;1353:2;1302:54;;765:597;-1:-1:-1;;;765:597:201:o;:::-;489:3901:66;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ADDRESSES_PROVIDER_9188":{"entryPoint":null,"id":9188,"parameterSlots":0,"returnSlots":0},"@ASSET_LISTING_ADMIN_ROLE_9185":{"entryPoint":null,"id":9185,"parameterSlots":0,"returnSlots":0},"@BRIDGE_ROLE_9179":{"entryPoint":null,"id":9179,"parameterSlots":0,"returnSlots":0},"@DEFAULT_ADMIN_ROLE_146":{"entryPoint":null,"id":146,"parameterSlots":0,"returnSlots":0},"@EMERGENCY_ADMIN_ROLE_9161":{"entryPoint":null,"id":9161,"parameterSlots":0,"returnSlots":0},"@FLASH_BORROWER_ROLE_9173":{"entryPoint":null,"id":9173,"parameterSlots":0,"returnSlots":0},"@POOL_ADMIN_ROLE_9155":{"entryPoint":null,"id":9155,"parameterSlots":0,"returnSlots":0},"@RISK_ADMIN_ROLE_9167":{"entryPoint":null,"id":9167,"parameterSlots":0,"returnSlots":0},"@_checkRole_243":{"entryPoint":2823,"id":243,"parameterSlots":2,"returnSlots":0},"@_grantRole_394":{"entryPoint":3106,"id":394,"parameterSlots":2,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_revokeRole_424":{"entryPoint":3346,"id":424,"parameterSlots":2,"returnSlots":0},"@_setRoleAdmin_363":{"entryPoint":3031,"id":363,"parameterSlots":2,"returnSlots":0},"@addAssetListingAdmin_9458":{"entryPoint":2544,"id":9458,"parameterSlots":1,"returnSlots":0},"@addBridge_9417":{"entryPoint":2502,"id":9417,"parameterSlots":1,"returnSlots":0},"@addEmergencyAdmin_9294":{"entryPoint":1770,"id":9294,"parameterSlots":1,"returnSlots":0},"@addFlashBorrower_9376":{"entryPoint":2586,"id":9376,"parameterSlots":1,"returnSlots":0},"@addPoolAdmin_9253":{"entryPoint":1839,"id":9253,"parameterSlots":1,"returnSlots":0},"@addRiskAdmin_9335":{"entryPoint":2264,"id":9335,"parameterSlots":1,"returnSlots":0},"@getRoleAdmin_258":{"entryPoint":null,"id":258,"parameterSlots":1,"returnSlots":1},"@grantRole_278":{"entryPoint":2000,"id":278,"parameterSlots":2,"returnSlots":0},"@hasRole_200":{"entryPoint":null,"id":200,"parameterSlots":2,"returnSlots":1},"@isAssetListingAdmin_9486":{"entryPoint":1693,"id":9486,"parameterSlots":1,"returnSlots":1},"@isBridge_9445":{"entryPoint":2383,"id":9445,"parameterSlots":1,"returnSlots":1},"@isEmergencyAdmin_9322":{"entryPoint":1881,"id":9322,"parameterSlots":1,"returnSlots":1},"@isFlashBorrower_9404":{"entryPoint":2746,"id":9404,"parameterSlots":1,"returnSlots":1},"@isPoolAdmin_9281":{"entryPoint":null,"id":9281,"parameterSlots":1,"returnSlots":1},"@isRiskAdmin_9363":{"entryPoint":2306,"id":9363,"parameterSlots":1,"returnSlots":1},"@removeAssetListingAdmin_9471":{"entryPoint":2628,"id":9471,"parameterSlots":1,"returnSlots":0},"@removeBridge_9430":{"entryPoint":1648,"id":9430,"parameterSlots":1,"returnSlots":0},"@removeEmergencyAdmin_9307":{"entryPoint":2460,"id":9307,"parameterSlots":1,"returnSlots":0},"@removeFlashBorrower_9389":{"entryPoint":1958,"id":9389,"parameterSlots":1,"returnSlots":0},"@removePoolAdmin_9266":{"entryPoint":2704,"id":9266,"parameterSlots":1,"returnSlots":0},"@removeRiskAdmin_9348":{"entryPoint":2222,"id":9348,"parameterSlots":1,"returnSlots":0},"@renounceRole_321":{"entryPoint":2038,"id":321,"parameterSlots":2,"returnSlots":0},"@revokeRole_298":{"entryPoint":2666,"id":298,"parameterSlots":2,"returnSlots":0},"@setRoleAdmin_9240":{"entryPoint":1812,"id":9240,"parameterSlots":2,"returnSlots":0},"@supportsInterface_181":{"entryPoint":1495,"id":181,"parameterSlots":1,"returnSlots":1},"@supportsInterface_771":{"entryPoint":null,"id":771,"parameterSlots":1,"returnSlots":1},"@toHexString_2512":{"entryPoint":3529,"id":2512,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":4181,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":4222,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32":{"entryPoint":4283,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32t_address":{"entryPoint":4308,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bytes32t_bytes32":{"entryPoint":4249,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bytes4":{"entryPoint":4115,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_da0d07ce4a2849fbfc4cb9d6f939e9bd93016c372ca4a5ff14fe06caf3d67874_t_string_memory_ptr_t_stringliteral_f986ce851518a691bccd44ea42a5a185d1b866ef6cb07984a09b81694d20ab69_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":4400,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":4529,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_fb06fa8ff2141e8ed74502f6792273793f25f0e9d3cf15344f3f5a0d4948fd4b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":4718,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":4657,"id":null,"parameterSlots":2,"returnSlots":1},"copy_memory_to_memory":{"entryPoint":4352,"id":null,"parameterSlots":3,"returnSlots":0},"decrement_t_uint256":{"entryPoint":4836,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":4610,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":4789,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":4742,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:5485:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"83:263:201","statements":[{"body":{"nodeType":"YulBlock","src":"129:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"138:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"141:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"131:6:201"},"nodeType":"YulFunctionCall","src":"131:12:201"},"nodeType":"YulExpressionStatement","src":"131:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"104:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"113:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"100:3:201"},"nodeType":"YulFunctionCall","src":"100:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"125:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"96:3:201"},"nodeType":"YulFunctionCall","src":"96:32:201"},"nodeType":"YulIf","src":"93:52:201"},{"nodeType":"YulVariableDeclaration","src":"154:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"180:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"167:12:201"},"nodeType":"YulFunctionCall","src":"167:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"158:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"300:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"309:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"312:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"302:6:201"},"nodeType":"YulFunctionCall","src":"302:12:201"},"nodeType":"YulExpressionStatement","src":"302:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"212:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"223:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"230:66:201","type":"","value":"0xffffffff00000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"219:3:201"},"nodeType":"YulFunctionCall","src":"219:78:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"209:2:201"},"nodeType":"YulFunctionCall","src":"209:89:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"202:6:201"},"nodeType":"YulFunctionCall","src":"202:97:201"},"nodeType":"YulIf","src":"199:117:201"},{"nodeType":"YulAssignment","src":"325:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"335:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"325:6:201"}]}]},"name":"abi_decode_tuple_t_bytes4","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"49:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"60:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"72:6:201","type":""}],"src":"14:332:201"},{"body":{"nodeType":"YulBlock","src":"446:92:201","statements":[{"nodeType":"YulAssignment","src":"456:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"468:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"479:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"464:3:201"},"nodeType":"YulFunctionCall","src":"464:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"456:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"498:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"523:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"516:6:201"},"nodeType":"YulFunctionCall","src":"516:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"509:6:201"},"nodeType":"YulFunctionCall","src":"509:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"491:6:201"},"nodeType":"YulFunctionCall","src":"491:41:201"},"nodeType":"YulExpressionStatement","src":"491:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"415:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"426:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"437:4:201","type":""}],"src":"351:187:201"},{"body":{"nodeType":"YulBlock","src":"592:147:201","statements":[{"nodeType":"YulAssignment","src":"602:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"624:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"611:12:201"},"nodeType":"YulFunctionCall","src":"611:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"602:5:201"}]},{"body":{"nodeType":"YulBlock","src":"717:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"726:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"729:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"719:6:201"},"nodeType":"YulFunctionCall","src":"719:12:201"},"nodeType":"YulExpressionStatement","src":"719:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"653:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"664:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"671:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"660:3:201"},"nodeType":"YulFunctionCall","src":"660:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"650:2:201"},"nodeType":"YulFunctionCall","src":"650:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"643:6:201"},"nodeType":"YulFunctionCall","src":"643:73:201"},"nodeType":"YulIf","src":"640:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"571:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"582:5:201","type":""}],"src":"543:196:201"},{"body":{"nodeType":"YulBlock","src":"814:116:201","statements":[{"body":{"nodeType":"YulBlock","src":"860:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"869:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"872:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"862:6:201"},"nodeType":"YulFunctionCall","src":"862:12:201"},"nodeType":"YulExpressionStatement","src":"862:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"835:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"844:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"831:3:201"},"nodeType":"YulFunctionCall","src":"831:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"856:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"827:3:201"},"nodeType":"YulFunctionCall","src":"827:32:201"},"nodeType":"YulIf","src":"824:52:201"},{"nodeType":"YulAssignment","src":"885:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"914:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"895:18:201"},"nodeType":"YulFunctionCall","src":"895:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"885:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"780:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"791:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"803:6:201","type":""}],"src":"744:186:201"},{"body":{"nodeType":"YulBlock","src":"1067:125:201","statements":[{"nodeType":"YulAssignment","src":"1077:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1089:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1100:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1085:3:201"},"nodeType":"YulFunctionCall","src":"1085:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1077:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1119:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1134:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1142:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1130:3:201"},"nodeType":"YulFunctionCall","src":"1130:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1112:6:201"},"nodeType":"YulFunctionCall","src":"1112:74:201"},"nodeType":"YulExpressionStatement","src":"1112:74:201"}]},"name":"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1036:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1047:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1058:4:201","type":""}],"src":"935:257:201"},{"body":{"nodeType":"YulBlock","src":"1284:161:201","statements":[{"body":{"nodeType":"YulBlock","src":"1330:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1339:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1342:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1332:6:201"},"nodeType":"YulFunctionCall","src":"1332:12:201"},"nodeType":"YulExpressionStatement","src":"1332:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1305:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1314:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1301:3:201"},"nodeType":"YulFunctionCall","src":"1301:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1326:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1297:3:201"},"nodeType":"YulFunctionCall","src":"1297:32:201"},"nodeType":"YulIf","src":"1294:52:201"},{"nodeType":"YulAssignment","src":"1355:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1378:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1365:12:201"},"nodeType":"YulFunctionCall","src":"1365:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1355:6:201"}]},{"nodeType":"YulAssignment","src":"1397:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1424:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1435:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1420:3:201"},"nodeType":"YulFunctionCall","src":"1420:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1407:12:201"},"nodeType":"YulFunctionCall","src":"1407:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1397:6:201"}]}]},"name":"abi_decode_tuple_t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1242:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1253:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1265:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1273:6:201","type":""}],"src":"1197:248:201"},{"body":{"nodeType":"YulBlock","src":"1520:110:201","statements":[{"body":{"nodeType":"YulBlock","src":"1566:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1575:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1578:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1568:6:201"},"nodeType":"YulFunctionCall","src":"1568:12:201"},"nodeType":"YulExpressionStatement","src":"1568:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1541:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1550:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1537:3:201"},"nodeType":"YulFunctionCall","src":"1537:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1562:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1533:3:201"},"nodeType":"YulFunctionCall","src":"1533:32:201"},"nodeType":"YulIf","src":"1530:52:201"},{"nodeType":"YulAssignment","src":"1591:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1614:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1601:12:201"},"nodeType":"YulFunctionCall","src":"1601:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1591:6:201"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1486:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1497:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1509:6:201","type":""}],"src":"1450:180:201"},{"body":{"nodeType":"YulBlock","src":"1736:76:201","statements":[{"nodeType":"YulAssignment","src":"1746:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1758:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1769:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1754:3:201"},"nodeType":"YulFunctionCall","src":"1754:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1746:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1788:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"1799:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1781:6:201"},"nodeType":"YulFunctionCall","src":"1781:25:201"},"nodeType":"YulExpressionStatement","src":"1781:25:201"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1705:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1716:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1727:4:201","type":""}],"src":"1635:177:201"},{"body":{"nodeType":"YulBlock","src":"1904:167:201","statements":[{"body":{"nodeType":"YulBlock","src":"1950:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1959:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1962:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1952:6:201"},"nodeType":"YulFunctionCall","src":"1952:12:201"},"nodeType":"YulExpressionStatement","src":"1952:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1925:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1934:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1921:3:201"},"nodeType":"YulFunctionCall","src":"1921:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1946:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1917:3:201"},"nodeType":"YulFunctionCall","src":"1917:32:201"},"nodeType":"YulIf","src":"1914:52:201"},{"nodeType":"YulAssignment","src":"1975:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1998:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1985:12:201"},"nodeType":"YulFunctionCall","src":"1985:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1975:6:201"}]},{"nodeType":"YulAssignment","src":"2017:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2050:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2061:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2046:3:201"},"nodeType":"YulFunctionCall","src":"2046:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2027:18:201"},"nodeType":"YulFunctionCall","src":"2027:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2017:6:201"}]}]},"name":"abi_decode_tuple_t_bytes32t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1862:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1873:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1885:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1893:6:201","type":""}],"src":"1817:254:201"},{"body":{"nodeType":"YulBlock","src":"2250:237:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2267:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2278:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2260:6:201"},"nodeType":"YulFunctionCall","src":"2260:21:201"},"nodeType":"YulExpressionStatement","src":"2260:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2301:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2312:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2297:3:201"},"nodeType":"YulFunctionCall","src":"2297:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2317:2:201","type":"","value":"47"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2290:6:201"},"nodeType":"YulFunctionCall","src":"2290:30:201"},"nodeType":"YulExpressionStatement","src":"2290:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2340:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2351:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2336:3:201"},"nodeType":"YulFunctionCall","src":"2336:18:201"},{"hexValue":"416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e6365","kind":"string","nodeType":"YulLiteral","src":"2356:34:201","type":"","value":"AccessControl: can only renounce"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2329:6:201"},"nodeType":"YulFunctionCall","src":"2329:62:201"},"nodeType":"YulExpressionStatement","src":"2329:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2411:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2422:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2407:3:201"},"nodeType":"YulFunctionCall","src":"2407:18:201"},{"hexValue":"20726f6c657320666f722073656c66","kind":"string","nodeType":"YulLiteral","src":"2427:17:201","type":"","value":" roles for self"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2400:6:201"},"nodeType":"YulFunctionCall","src":"2400:45:201"},"nodeType":"YulExpressionStatement","src":"2400:45:201"},{"nodeType":"YulAssignment","src":"2454:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2466:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2477:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2462:3:201"},"nodeType":"YulFunctionCall","src":"2462:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2454:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_fb06fa8ff2141e8ed74502f6792273793f25f0e9d3cf15344f3f5a0d4948fd4b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2227:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2241:4:201","type":""}],"src":"2076:411:201"},{"body":{"nodeType":"YulBlock","src":"2545:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"2555:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2564:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"2559:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2624:63:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2649:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"2654:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2645:3:201"},"nodeType":"YulFunctionCall","src":"2645:11:201"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2668:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"2673:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2664:3:201"},"nodeType":"YulFunctionCall","src":"2664:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2658:5:201"},"nodeType":"YulFunctionCall","src":"2658:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2638:6:201"},"nodeType":"YulFunctionCall","src":"2638:39:201"},"nodeType":"YulExpressionStatement","src":"2638:39:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2585:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"2588:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2582:2:201"},"nodeType":"YulFunctionCall","src":"2582:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2596:19:201","statements":[{"nodeType":"YulAssignment","src":"2598:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2607:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"2610:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2603:3:201"},"nodeType":"YulFunctionCall","src":"2603:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"2598:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"2578:3:201","statements":[]},"src":"2574:113:201"},{"body":{"nodeType":"YulBlock","src":"2713:31:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2726:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"2731:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2722:3:201"},"nodeType":"YulFunctionCall","src":"2722:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"2740:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2715:6:201"},"nodeType":"YulFunctionCall","src":"2715:27:201"},"nodeType":"YulExpressionStatement","src":"2715:27:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2702:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"2705:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2699:2:201"},"nodeType":"YulFunctionCall","src":"2699:13:201"},"nodeType":"YulIf","src":"2696:48:201"}]},"name":"copy_memory_to_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"2523:3:201","type":""},{"name":"dst","nodeType":"YulTypedName","src":"2528:3:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"2533:6:201","type":""}],"src":"2492:258:201"},{"body":{"nodeType":"YulBlock","src":"3144:397:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3161:3:201"},{"hexValue":"416363657373436f6e74726f6c3a206163636f756e7420","kind":"string","nodeType":"YulLiteral","src":"3166:25:201","type":"","value":"AccessControl: account "}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3154:6:201"},"nodeType":"YulFunctionCall","src":"3154:38:201"},"nodeType":"YulExpressionStatement","src":"3154:38:201"},{"nodeType":"YulVariableDeclaration","src":"3201:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3221:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3215:5:201"},"nodeType":"YulFunctionCall","src":"3215:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"3205:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3263:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3271:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3259:3:201"},"nodeType":"YulFunctionCall","src":"3259:17:201"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3282:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"3287:2:201","type":"","value":"23"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3278:3:201"},"nodeType":"YulFunctionCall","src":"3278:12:201"},{"name":"length","nodeType":"YulIdentifier","src":"3292:6:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"3237:21:201"},"nodeType":"YulFunctionCall","src":"3237:62:201"},"nodeType":"YulExpressionStatement","src":"3237:62:201"},{"nodeType":"YulVariableDeclaration","src":"3308:26:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3322:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"3327:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3318:3:201"},"nodeType":"YulFunctionCall","src":"3318:16:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3312:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3354:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"3358:2:201","type":"","value":"23"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3350:3:201"},"nodeType":"YulFunctionCall","src":"3350:11:201"},{"hexValue":"206973206d697373696e6720726f6c6520","kind":"string","nodeType":"YulLiteral","src":"3363:19:201","type":"","value":" is missing role "}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3343:6:201"},"nodeType":"YulFunctionCall","src":"3343:40:201"},"nodeType":"YulExpressionStatement","src":"3343:40:201"},{"nodeType":"YulVariableDeclaration","src":"3392:29:201","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"3414:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3408:5:201"},"nodeType":"YulFunctionCall","src":"3408:13:201"},"variables":[{"name":"length_1","nodeType":"YulTypedName","src":"3396:8:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"3456:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3464:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3452:3:201"},"nodeType":"YulFunctionCall","src":"3452:17:201"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3475:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"3479:2:201","type":"","value":"40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3471:3:201"},"nodeType":"YulFunctionCall","src":"3471:11:201"},{"name":"length_1","nodeType":"YulIdentifier","src":"3484:8:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"3430:21:201"},"nodeType":"YulFunctionCall","src":"3430:63:201"},"nodeType":"YulExpressionStatement","src":"3430:63:201"},{"nodeType":"YulAssignment","src":"3502:33:201","value":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3517:2:201"},{"name":"length_1","nodeType":"YulIdentifier","src":"3521:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3513:3:201"},"nodeType":"YulFunctionCall","src":"3513:17:201"},{"kind":"number","nodeType":"YulLiteral","src":"3532:2:201","type":"","value":"40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3509:3:201"},"nodeType":"YulFunctionCall","src":"3509:26:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"3502:3:201"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_da0d07ce4a2849fbfc4cb9d6f939e9bd93016c372ca4a5ff14fe06caf3d67874_t_string_memory_ptr_t_stringliteral_f986ce851518a691bccd44ea42a5a185d1b866ef6cb07984a09b81694d20ab69_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"3112:3:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3117:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3125:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"3136:3:201","type":""}],"src":"2755:786:201"},{"body":{"nodeType":"YulBlock","src":"3667:321:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3684:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3695:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3677:6:201"},"nodeType":"YulFunctionCall","src":"3677:21:201"},"nodeType":"YulExpressionStatement","src":"3677:21:201"},{"nodeType":"YulVariableDeclaration","src":"3707:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3727:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3721:5:201"},"nodeType":"YulFunctionCall","src":"3721:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"3711:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3754:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3765:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3750:3:201"},"nodeType":"YulFunctionCall","src":"3750:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"3770:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3743:6:201"},"nodeType":"YulFunctionCall","src":"3743:34:201"},"nodeType":"YulExpressionStatement","src":"3743:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3812:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3820:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3808:3:201"},"nodeType":"YulFunctionCall","src":"3808:15:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3829:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3840:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3825:3:201"},"nodeType":"YulFunctionCall","src":"3825:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"3845:6:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"3786:21:201"},"nodeType":"YulFunctionCall","src":"3786:66:201"},"nodeType":"YulExpressionStatement","src":"3786:66:201"},{"nodeType":"YulAssignment","src":"3861:121:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3877:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3896:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3904:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3892:3:201"},"nodeType":"YulFunctionCall","src":"3892:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"3909:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3888:3:201"},"nodeType":"YulFunctionCall","src":"3888:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3873:3:201"},"nodeType":"YulFunctionCall","src":"3873:104:201"},{"kind":"number","nodeType":"YulLiteral","src":"3979:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3869:3:201"},"nodeType":"YulFunctionCall","src":"3869:113:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3861:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3636:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3647:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3658:4:201","type":""}],"src":"3546:442:201"},{"body":{"nodeType":"YulBlock","src":"4025:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4042:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4045:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4035:6:201"},"nodeType":"YulFunctionCall","src":"4035:88:201"},"nodeType":"YulExpressionStatement","src":"4035:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4139:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4142:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4132:6:201"},"nodeType":"YulFunctionCall","src":"4132:15:201"},"nodeType":"YulExpressionStatement","src":"4132:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4163:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4166:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4156:6:201"},"nodeType":"YulFunctionCall","src":"4156:15:201"},"nodeType":"YulExpressionStatement","src":"4156:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"3993:184:201"},{"body":{"nodeType":"YulBlock","src":"4234:176:201","statements":[{"body":{"nodeType":"YulBlock","src":"4353:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"4355:16:201"},"nodeType":"YulFunctionCall","src":"4355:18:201"},"nodeType":"YulExpressionStatement","src":"4355:18:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4265:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4258:6:201"},"nodeType":"YulFunctionCall","src":"4258:9:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4251:6:201"},"nodeType":"YulFunctionCall","src":"4251:17:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"4273:1:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4280:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"4348:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"4276:3:201"},"nodeType":"YulFunctionCall","src":"4276:74:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4270:2:201"},"nodeType":"YulFunctionCall","src":"4270:81:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4247:3:201"},"nodeType":"YulFunctionCall","src":"4247:105:201"},"nodeType":"YulIf","src":"4244:131:201"},{"nodeType":"YulAssignment","src":"4384:20:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4399:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"4402:1:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"4395:3:201"},"nodeType":"YulFunctionCall","src":"4395:9:201"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"4384:7:201"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"4213:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"4216:1:201","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"4222:7:201","type":""}],"src":"4182:228:201"},{"body":{"nodeType":"YulBlock","src":"4463:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"4490:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"4492:16:201"},"nodeType":"YulFunctionCall","src":"4492:18:201"},"nodeType":"YulExpressionStatement","src":"4492:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4479:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"4486:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"4482:3:201"},"nodeType":"YulFunctionCall","src":"4482:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4476:2:201"},"nodeType":"YulFunctionCall","src":"4476:13:201"},"nodeType":"YulIf","src":"4473:39:201"},{"nodeType":"YulAssignment","src":"4521:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4532:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"4535:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4528:3:201"},"nodeType":"YulFunctionCall","src":"4528:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"4521:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"4446:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"4449:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"4455:3:201","type":""}],"src":"4415:128:201"},{"body":{"nodeType":"YulBlock","src":"4580:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4597:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4600:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4590:6:201"},"nodeType":"YulFunctionCall","src":"4590:88:201"},"nodeType":"YulExpressionStatement","src":"4590:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4694:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4697:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4687:6:201"},"nodeType":"YulFunctionCall","src":"4687:15:201"},"nodeType":"YulExpressionStatement","src":"4687:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4718:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4721:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4711:6:201"},"nodeType":"YulFunctionCall","src":"4711:15:201"},"nodeType":"YulExpressionStatement","src":"4711:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"4548:184:201"},{"body":{"nodeType":"YulBlock","src":"4769:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4786:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4789:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4779:6:201"},"nodeType":"YulFunctionCall","src":"4779:88:201"},"nodeType":"YulExpressionStatement","src":"4779:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4883:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4886:4:201","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4876:6:201"},"nodeType":"YulFunctionCall","src":"4876:15:201"},"nodeType":"YulExpressionStatement","src":"4876:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4907:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4910:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4900:6:201"},"nodeType":"YulFunctionCall","src":"4900:15:201"},"nodeType":"YulExpressionStatement","src":"4900:15:201"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"4737:184:201"},{"body":{"nodeType":"YulBlock","src":"4973:149:201","statements":[{"body":{"nodeType":"YulBlock","src":"5000:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"5002:16:201"},"nodeType":"YulFunctionCall","src":"5002:18:201"},"nodeType":"YulExpressionStatement","src":"5002:18:201"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4993:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4986:6:201"},"nodeType":"YulFunctionCall","src":"4986:13:201"},"nodeType":"YulIf","src":"4983:39:201"},{"nodeType":"YulAssignment","src":"5031:85:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5042:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5049:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5038:3:201"},"nodeType":"YulFunctionCall","src":"5038:78:201"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"5031:3:201"}]}]},"name":"decrement_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4955:5:201","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"4965:3:201","type":""}],"src":"4926:196:201"},{"body":{"nodeType":"YulBlock","src":"5301:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5318:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5329:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5311:6:201"},"nodeType":"YulFunctionCall","src":"5311:21:201"},"nodeType":"YulExpressionStatement","src":"5311:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5352:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5363:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5348:3:201"},"nodeType":"YulFunctionCall","src":"5348:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"5368:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5341:6:201"},"nodeType":"YulFunctionCall","src":"5341:30:201"},"nodeType":"YulExpressionStatement","src":"5341:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5391:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5402:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5387:3:201"},"nodeType":"YulFunctionCall","src":"5387:18:201"},{"hexValue":"537472696e67733a20686578206c656e67746820696e73756666696369656e74","kind":"string","nodeType":"YulLiteral","src":"5407:34:201","type":"","value":"Strings: hex length insufficient"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5380:6:201"},"nodeType":"YulFunctionCall","src":"5380:62:201"},"nodeType":"YulExpressionStatement","src":"5380:62:201"},{"nodeType":"YulAssignment","src":"5451:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5463:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5474:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5459:3:201"},"nodeType":"YulFunctionCall","src":"5459:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5451:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5278:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5292:4:201","type":""}],"src":"5127:356:201"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_bytes32t_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_fb06fa8ff2141e8ed74502f6792273793f25f0e9d3cf15344f3f5a0d4948fd4b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 47)\n        mstore(add(headStart, 64), \"AccessControl: can only renounce\")\n        mstore(add(headStart, 96), \" roles for self\")\n        tail := add(headStart, 128)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_encode_tuple_packed_t_stringliteral_da0d07ce4a2849fbfc4cb9d6f939e9bd93016c372ca4a5ff14fe06caf3d67874_t_string_memory_ptr_t_stringliteral_f986ce851518a691bccd44ea42a5a185d1b866ef6cb07984a09b81694d20ab69_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, \"AccessControl: account \")\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), add(pos, 23), length)\n        let _1 := add(pos, length)\n        mstore(add(_1, 23), \" is missing role \")\n        let length_1 := mload(value1)\n        copy_memory_to_memory(add(value1, 0x20), add(_1, 40), length_1)\n        end := add(add(_1, length_1), 40)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function decrement_t_uint256(value) -> ret\n    {\n        if iszero(value) { panic_error_0x11() }\n        ret := add(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n    }\n    function abi_encode_tuple_t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Strings: hex length insufficient\")\n        tail := add(headStart, 96)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"9188":[{"length":32,"start":594}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061020b5760003560e01c8063674b5e4d1161012a5780639a2b96f7116100bd578063b5bfddea1161008c578063d547741f11610071578063d547741f1461059e578063f83695cb146105b1578063fa50f297146105c457600080fd5b8063b5bfddea14610550578063b8f6dba71461057757600080fd5b80639a2b96f71461050f5780639ac9d80b14610522578063a217fddf14610535578063a21bce151461053d57600080fd5b80637a9a93f4116100f95780637a9a93f41461044a5780637be53ca11461045d57806391d14854146104b85780639712fdf8146104fc57600080fd5b8063674b5e4d146103d65780636e76fc8f146103e9578063726600ce1461041057806378bb0a431461042357600080fd5b80632500f2b6116101a25780633c5a08e5116101715780633c5a08e5146103625780634f16b425146103755780635577b7a91461039c5780635b9a94e4146103c357600080fd5b80632500f2b614610316578063253cf980146103295780632f2ff15d1461033c57806336568abe1461034f57600080fd5b8063179efb09116101de578063179efb09146102ac5780631e4e0091146102bf57806322650caf146102d2578063248a9ca3146102e557600080fd5b806301ffc9a71461021057806304df017d146102385780630542975c1461024d57806313ee32e014610299575b600080fd5b61022361021e366004611013565b6105d7565b60405190151581526020015b60405180910390f35b61024b61024636600461107e565b610670565b005b6102747f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161022f565b6102236102a736600461107e565b61069d565b61024b6102ba36600461107e565b6106ea565b61024b6102cd366004611099565b610714565b61024b6102e036600461107e565b61072f565b6103086102f33660046110bb565b60009081526020819052604090206001015490565b60405190815260200161022f565b61022361032436600461107e565b610759565b61024b61033736600461107e565b6107a6565b61024b61034a3660046110d4565b6107d0565b61024b61035d3660046110d4565b6107f6565b61024b61037036600461107e565b6108ae565b6103087f8aa855a911518ecfbe5bc3088c8f3dda7badf130faaf8ace33fdc33828e1816781565b6103087f939b8dfb57ecef2aea54a93a15e86768b9d4089f1ba61c245e6ec980695f4ca481565b61024b6103d136600461107e565b6108d8565b6102236103e436600461107e565b610902565b6103087f5c91514091af31f62f596a314af7d5be40146b2f2355969392f055e12e0982fb81565b61022361041e36600461107e565b61094f565b6103087f19c860a63258efbd0ecb7d55c626237bf5c2044c26c073390b74f0c13c85743381565b61024b61045836600461107e565b61099c565b61022361046b36600461107e565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fd21b659ff028ba5860060da0a2ef0b8b1b13b1f79963511fcee160c2e54d2f22602052604081205460ff1661066a565b6102236104c63660046110d4565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61024b61050a36600461107e565b6109c6565b61024b61051d36600461107e565b6109f0565b61024b61053036600461107e565b610a1a565b610308600081565b61024b61054b36600461107e565b610a44565b6103087f08fb31c3e81624356c3314088aa971b73bcc82d22bc3e3b184b4593077ae327881565b6103087f12ad05bde78c5ab75238ce885307f96ecd482bb402ef831f99e7018a0f169b7b81565b61024b6105ac3660046110d4565b610a6a565b61024b6105bf36600461107e565b610a90565b6102236105d236600461107e565b610aba565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061066a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61069a7f08fb31c3e81624356c3314088aa971b73bcc82d22bc3e3b184b4593077ae327882610a6a565b50565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fcba084d2e26105260e9ae84b007967d64af085c681345e4941eeba502738cf44602052604081205460ff1661066a565b61069a7f5c91514091af31f62f596a314af7d5be40146b2f2355969392f055e12e0982fb826107d0565b60006107208133610b07565b61072a8383610bd7565b505050565b61069a7f12ad05bde78c5ab75238ce885307f96ecd482bb402ef831f99e7018a0f169b7b826107d0565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fac55d60145c2b1e72232130507b090ddd2cd26daa31eeab1e3e64b89140e668d602052604081205460ff1661066a565b61069a7f939b8dfb57ecef2aea54a93a15e86768b9d4089f1ba61c245e6ec980695f4ca482610a6a565b6000828152602081905260409020600101546107ec8133610b07565b61072a8383610c22565b73ffffffffffffffffffffffffffffffffffffffff811633146108a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b6108aa8282610d12565b5050565b61069a7f8aa855a911518ecfbe5bc3088c8f3dda7badf130faaf8ace33fdc33828e1816782610a6a565b61069a7f8aa855a911518ecfbe5bc3088c8f3dda7badf130faaf8ace33fdc33828e18167826107d0565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fa2630211c42039a24e17727bf18ec344681c4916090d2a50e04b9b6e50b7fea9602052604081205460ff1661066a565b73ffffffffffffffffffffffffffffffffffffffff811660009081527f9e350b38c6d0090a0631963682975411c4e88e66bd66d7f4ffcc296b4c83bf93602052604081205460ff1661066a565b61069a7f5c91514091af31f62f596a314af7d5be40146b2f2355969392f055e12e0982fb82610a6a565b61069a7f08fb31c3e81624356c3314088aa971b73bcc82d22bc3e3b184b4593077ae3278826107d0565b61069a7f19c860a63258efbd0ecb7d55c626237bf5c2044c26c073390b74f0c13c857433826107d0565b61069a7f939b8dfb57ecef2aea54a93a15e86768b9d4089f1ba61c245e6ec980695f4ca4826107d0565b61069a7f19c860a63258efbd0ecb7d55c626237bf5c2044c26c073390b74f0c13c857433825b600082815260208190526040902060010154610a868133610b07565b61072a8383610d12565b61069a7f12ad05bde78c5ab75238ce885307f96ecd482bb402ef831f99e7018a0f169b7b82610a6a565b73ffffffffffffffffffffffffffffffffffffffff811660009081527f2eadd72b6698cc7bfac8abf613f53107771ac2a3e4a3221cda0a8e2b1b91b0b4602052604081205460ff1661066a565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166108aa57610b5d8173ffffffffffffffffffffffffffffffffffffffff166014610dc9565b610b68836020610dc9565b604051602001610b79929190611130565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610897916004016111b1565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166108aa5760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610cb43390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156108aa5760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60606000610dd8836002611231565b610de390600261126e565b67ffffffffffffffff811115610dfb57610dfb611286565b6040519080825280601f01601f191660200182016040528015610e25576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110610e5c57610e5c6112b5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110610ebf57610ebf6112b5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000610efb846002611231565b610f0690600161126e565b90505b6001811115610fa3577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110610f4757610f476112b5565b1a60f81b828281518110610f5d57610f5d6112b5565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93610f9c816112e4565b9050610f09565b50831561100c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610897565b9392505050565b60006020828403121561102557600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461100c57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461107957600080fd5b919050565b60006020828403121561109057600080fd5b61100c82611055565b600080604083850312156110ac57600080fd5b50508035926020909101359150565b6000602082840312156110cd57600080fd5b5035919050565b600080604083850312156110e757600080fd5b823591506110f760208401611055565b90509250929050565b60005b8381101561111b578181015183820152602001611103565b8381111561112a576000848401525b50505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611168816017850160208801611100565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516111a5816028840160208801611100565b01602801949350505050565b60208152600082518060208401526111d0816040850160208701611100565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561126957611269611202565b500290565b6000821982111561128157611281611202565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000816112f3576112f3611202565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea2646970667358221220a67d953277025ae12510dc5947dcbc90c046dcef6453a6facc9699c20372272264736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x20B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x674B5E4D GT PUSH2 0x12A JUMPI DUP1 PUSH4 0x9A2B96F7 GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xB5BFDDEA GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xD547741F GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0x59E JUMPI DUP1 PUSH4 0xF83695CB EQ PUSH2 0x5B1 JUMPI DUP1 PUSH4 0xFA50F297 EQ PUSH2 0x5C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB5BFDDEA EQ PUSH2 0x550 JUMPI DUP1 PUSH4 0xB8F6DBA7 EQ PUSH2 0x577 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9A2B96F7 EQ PUSH2 0x50F JUMPI DUP1 PUSH4 0x9AC9D80B EQ PUSH2 0x522 JUMPI DUP1 PUSH4 0xA217FDDF EQ PUSH2 0x535 JUMPI DUP1 PUSH4 0xA21BCE15 EQ PUSH2 0x53D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7A9A93F4 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0x7A9A93F4 EQ PUSH2 0x44A JUMPI DUP1 PUSH4 0x7BE53CA1 EQ PUSH2 0x45D JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x4B8 JUMPI DUP1 PUSH4 0x9712FDF8 EQ PUSH2 0x4FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x674B5E4D EQ PUSH2 0x3D6 JUMPI DUP1 PUSH4 0x6E76FC8F EQ PUSH2 0x3E9 JUMPI DUP1 PUSH4 0x726600CE EQ PUSH2 0x410 JUMPI DUP1 PUSH4 0x78BB0A43 EQ PUSH2 0x423 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2500F2B6 GT PUSH2 0x1A2 JUMPI DUP1 PUSH4 0x3C5A08E5 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x3C5A08E5 EQ PUSH2 0x362 JUMPI DUP1 PUSH4 0x4F16B425 EQ PUSH2 0x375 JUMPI DUP1 PUSH4 0x5577B7A9 EQ PUSH2 0x39C JUMPI DUP1 PUSH4 0x5B9A94E4 EQ PUSH2 0x3C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2500F2B6 EQ PUSH2 0x316 JUMPI DUP1 PUSH4 0x253CF980 EQ PUSH2 0x329 JUMPI DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x33C JUMPI DUP1 PUSH4 0x36568ABE EQ PUSH2 0x34F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x179EFB09 GT PUSH2 0x1DE JUMPI DUP1 PUSH4 0x179EFB09 EQ PUSH2 0x2AC JUMPI DUP1 PUSH4 0x1E4E0091 EQ PUSH2 0x2BF JUMPI DUP1 PUSH4 0x22650CAF EQ PUSH2 0x2D2 JUMPI DUP1 PUSH4 0x248A9CA3 EQ PUSH2 0x2E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0x4DF017D EQ PUSH2 0x238 JUMPI DUP1 PUSH4 0x542975C EQ PUSH2 0x24D JUMPI DUP1 PUSH4 0x13EE32E0 EQ PUSH2 0x299 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x223 PUSH2 0x21E CALLDATASIZE PUSH1 0x4 PUSH2 0x1013 JUMP JUMPDEST PUSH2 0x5D7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x24B PUSH2 0x246 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x670 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x274 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x22F JUMP JUMPDEST PUSH2 0x223 PUSH2 0x2A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x69D JUMP JUMPDEST PUSH2 0x24B PUSH2 0x2BA CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x6EA JUMP JUMPDEST PUSH2 0x24B PUSH2 0x2CD CALLDATASIZE PUSH1 0x4 PUSH2 0x1099 JUMP JUMPDEST PUSH2 0x714 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x2E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x72F JUMP JUMPDEST PUSH2 0x308 PUSH2 0x2F3 CALLDATASIZE PUSH1 0x4 PUSH2 0x10BB JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x22F JUMP JUMPDEST PUSH2 0x223 PUSH2 0x324 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x759 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x337 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x7A6 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x34A CALLDATASIZE PUSH1 0x4 PUSH2 0x10D4 JUMP JUMPDEST PUSH2 0x7D0 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x35D CALLDATASIZE PUSH1 0x4 PUSH2 0x10D4 JUMP JUMPDEST PUSH2 0x7F6 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x370 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x8AE JUMP JUMPDEST PUSH2 0x308 PUSH32 0x8AA855A911518ECFBE5BC3088C8F3DDA7BADF130FAAF8ACE33FDC33828E18167 DUP2 JUMP JUMPDEST PUSH2 0x308 PUSH32 0x939B8DFB57ECEF2AEA54A93A15E86768B9D4089F1BA61C245E6EC980695F4CA4 DUP2 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x3D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x8D8 JUMP JUMPDEST PUSH2 0x223 PUSH2 0x3E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x902 JUMP JUMPDEST PUSH2 0x308 PUSH32 0x5C91514091AF31F62F596A314AF7D5BE40146B2F2355969392F055E12E0982FB DUP2 JUMP JUMPDEST PUSH2 0x223 PUSH2 0x41E CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x94F JUMP JUMPDEST PUSH2 0x308 PUSH32 0x19C860A63258EFBD0ECB7D55C626237BF5C2044C26C073390B74F0C13C857433 DUP2 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x458 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x99C JUMP JUMPDEST PUSH2 0x223 PUSH2 0x46B CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xD21B659FF028BA5860060DA0A2EF0B8B1B13B1F79963511FCEE160C2E54D2F22 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x66A JUMP JUMPDEST PUSH2 0x223 PUSH2 0x4C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x10D4 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x50A CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x9C6 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x51D CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0x9F0 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x530 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0xA1A JUMP JUMPDEST PUSH2 0x308 PUSH1 0x0 DUP2 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x54B CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0xA44 JUMP JUMPDEST PUSH2 0x308 PUSH32 0x8FB31C3E81624356C3314088AA971B73BCC82D22BC3E3B184B4593077AE3278 DUP2 JUMP JUMPDEST PUSH2 0x308 PUSH32 0x12AD05BDE78C5AB75238CE885307F96ECD482BB402EF831F99E7018A0F169B7B DUP2 JUMP JUMPDEST PUSH2 0x24B PUSH2 0x5AC CALLDATASIZE PUSH1 0x4 PUSH2 0x10D4 JUMP JUMPDEST PUSH2 0xA6A JUMP JUMPDEST PUSH2 0x24B PUSH2 0x5BF CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0xA90 JUMP JUMPDEST PUSH2 0x223 PUSH2 0x5D2 CALLDATASIZE PUSH1 0x4 PUSH2 0x107E JUMP JUMPDEST PUSH2 0xABA JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH32 0x7965DB0B00000000000000000000000000000000000000000000000000000000 EQ DUP1 PUSH2 0x66A JUMPI POP PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND EQ JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x69A PUSH32 0x8FB31C3E81624356C3314088AA971B73BCC82D22BC3E3B184B4593077AE3278 DUP3 PUSH2 0xA6A JUMP JUMPDEST POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xCBA084D2E26105260E9AE84B007967D64AF085C681345E4941EEBA502738CF44 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x66A JUMP JUMPDEST PUSH2 0x69A PUSH32 0x5C91514091AF31F62F596A314AF7D5BE40146B2F2355969392F055E12E0982FB DUP3 PUSH2 0x7D0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x720 DUP2 CALLER PUSH2 0xB07 JUMP JUMPDEST PUSH2 0x72A DUP4 DUP4 PUSH2 0xBD7 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x69A PUSH32 0x12AD05BDE78C5AB75238CE885307F96ECD482BB402EF831F99E7018A0F169B7B DUP3 PUSH2 0x7D0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xAC55D60145C2B1E72232130507B090DDD2CD26DAA31EEAB1E3E64B89140E668D PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x66A JUMP JUMPDEST PUSH2 0x69A PUSH32 0x939B8DFB57ECEF2AEA54A93A15E86768B9D4089F1BA61C245E6EC980695F4CA4 DUP3 PUSH2 0xA6A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH2 0x7EC DUP2 CALLER PUSH2 0xB07 JUMP JUMPDEST PUSH2 0x72A DUP4 DUP4 PUSH2 0xC22 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND CALLER EQ PUSH2 0x8A0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416363657373436F6E74726F6C3A2063616E206F6E6C792072656E6F756E6365 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x20726F6C657320666F722073656C660000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x8AA DUP3 DUP3 PUSH2 0xD12 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x69A PUSH32 0x8AA855A911518ECFBE5BC3088C8F3DDA7BADF130FAAF8ACE33FDC33828E18167 DUP3 PUSH2 0xA6A JUMP JUMPDEST PUSH2 0x69A PUSH32 0x8AA855A911518ECFBE5BC3088C8F3DDA7BADF130FAAF8ACE33FDC33828E18167 DUP3 PUSH2 0x7D0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xA2630211C42039A24E17727BF18EC344681C4916090D2A50E04B9B6E50B7FEA9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x66A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0x9E350B38C6D0090A0631963682975411C4E88E66BD66D7F4FFCC296B4C83BF93 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x66A JUMP JUMPDEST PUSH2 0x69A PUSH32 0x5C91514091AF31F62F596A314AF7D5BE40146B2F2355969392F055E12E0982FB DUP3 PUSH2 0xA6A JUMP JUMPDEST PUSH2 0x69A PUSH32 0x8FB31C3E81624356C3314088AA971B73BCC82D22BC3E3B184B4593077AE3278 DUP3 PUSH2 0x7D0 JUMP JUMPDEST PUSH2 0x69A PUSH32 0x19C860A63258EFBD0ECB7D55C626237BF5C2044C26C073390B74F0C13C857433 DUP3 PUSH2 0x7D0 JUMP JUMPDEST PUSH2 0x69A PUSH32 0x939B8DFB57ECEF2AEA54A93A15E86768B9D4089F1BA61C245E6EC980695F4CA4 DUP3 PUSH2 0x7D0 JUMP JUMPDEST PUSH2 0x69A PUSH32 0x19C860A63258EFBD0ECB7D55C626237BF5C2044C26C073390B74F0C13C857433 DUP3 JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH2 0xA86 DUP2 CALLER PUSH2 0xB07 JUMP JUMPDEST PUSH2 0x72A DUP4 DUP4 PUSH2 0xD12 JUMP JUMPDEST PUSH2 0x69A PUSH32 0x12AD05BDE78C5AB75238CE885307F96ECD482BB402EF831F99E7018A0F169B7B DUP3 PUSH2 0xA6A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0x2EADD72B6698CC7BFAC8ABF613F53107771AC2A3E4A3221CDA0A8E2B1B91B0B4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x66A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x8AA JUMPI PUSH2 0xB5D DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x14 PUSH2 0xDC9 JUMP JUMPDEST PUSH2 0xB68 DUP4 PUSH1 0x20 PUSH2 0xDC9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xB79 SWAP3 SWAP2 SWAP1 PUSH2 0x1130 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH2 0x897 SWAP2 PUSH1 0x4 ADD PUSH2 0x11B1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 PUSH1 0x1 ADD DUP1 SLOAD SWAP1 DUP5 SWAP1 SSTORE SWAP1 MLOAD SWAP1 SWAP2 DUP4 SWAP2 DUP4 SWAP2 DUP7 SWAP2 PUSH32 0xBD79B86FFE0AB8E8776151514217CD7CACD52C909F66475C3AF44E129F0B00FF SWAP2 SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x8AA JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0xCB4 CALLER SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x8AA JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE MLOAD CALLER SWAP3 DUP6 SWAP2 PUSH32 0xF6391F5C32D9C69D2A47EA670B442974B53935D1EDC7FD64EB21E047A839171B SWAP2 SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0xDD8 DUP4 PUSH1 0x2 PUSH2 0x1231 JUMP JUMPDEST PUSH2 0xDE3 SWAP1 PUSH1 0x2 PUSH2 0x126E JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xDFB JUMPI PUSH2 0xDFB PUSH2 0x1286 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xE25 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH32 0x3000000000000000000000000000000000000000000000000000000000000000 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xE5C JUMPI PUSH2 0xE5C PUSH2 0x12B5 JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH32 0x7800000000000000000000000000000000000000000000000000000000000000 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0xEBF JUMPI PUSH2 0xEBF PUSH2 0x12B5 JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x0 PUSH2 0xEFB DUP5 PUSH1 0x2 PUSH2 0x1231 JUMP JUMPDEST PUSH2 0xF06 SWAP1 PUSH1 0x1 PUSH2 0x126E JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x1 DUP2 GT ISZERO PUSH2 0xFA3 JUMPI PUSH32 0x3031323334353637383961626364656600000000000000000000000000000000 DUP6 PUSH1 0xF AND PUSH1 0x10 DUP2 LT PUSH2 0xF47 JUMPI PUSH2 0xF47 PUSH2 0x12B5 JUMP JUMPDEST BYTE PUSH1 0xF8 SHL DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xF5D JUMPI PUSH2 0xF5D PUSH2 0x12B5 JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x4 SWAP5 SWAP1 SWAP5 SHR SWAP4 PUSH2 0xF9C DUP2 PUSH2 0x12E4 JUMP JUMPDEST SWAP1 POP PUSH2 0xF09 JUMP JUMPDEST POP DUP4 ISZERO PUSH2 0x100C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537472696E67733A20686578206C656E67746820696E73756666696369656E74 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x897 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1025 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x100C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1079 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1090 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x100C DUP3 PUSH2 0x1055 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x10AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x10CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x10E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH2 0x10F7 PUSH1 0x20 DUP5 ADD PUSH2 0x1055 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x111B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1103 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x112A JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH32 0x416363657373436F6E74726F6C3A206163636F756E7420000000000000000000 DUP2 MSTORE PUSH1 0x0 DUP4 MLOAD PUSH2 0x1168 DUP2 PUSH1 0x17 DUP6 ADD PUSH1 0x20 DUP9 ADD PUSH2 0x1100 JUMP JUMPDEST PUSH32 0x206973206D697373696E6720726F6C6520000000000000000000000000000000 PUSH1 0x17 SWAP2 DUP5 ADD SWAP2 DUP3 ADD MSTORE DUP4 MLOAD PUSH2 0x11A5 DUP2 PUSH1 0x28 DUP5 ADD PUSH1 0x20 DUP9 ADD PUSH2 0x1100 JUMP JUMPDEST ADD PUSH1 0x28 ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x11D0 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x1100 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x1269 JUMPI PUSH2 0x1269 PUSH2 0x1202 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1281 JUMPI PUSH2 0x1281 PUSH2 0x1202 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x12F3 JUMPI PUSH2 0x12F3 PUSH2 0x1202 JUMP JUMPDEST POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA6 PUSH30 0x953277025AE12510DC5947DCBC90C046DCEF6453A6FACC9699C203722722 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"489:3901:66:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2454:196:2;;;;;;:::i;:::-;;:::i;:::-;;;516:14:201;;509:22;491:41;;479:2;464:18;2454:196:2;;;;;;;;3660:98:66;;;;;;:::i;:::-;;:::i;:::-;;1040:58;;;;;;;;1142:42:201;1130:55;;;1112:74;;1100:2;1085:18;1040:58:66;935:257:201;4248:140:66;;;;;;:::i;:::-;;:::i;2179:109::-;;;;;;:::i;:::-;;:::i;1563:155::-;;;;;;:::i;:::-;;:::i;1752:99::-;;;;;;:::i;:::-;;:::i;3670:115:2:-;;;;;;:::i;:::-;3736:7;3758:12;;;;;;;;;;:22;;;;3670:115;;;;1781:25:201;;;1769:2;1754:18;3670:115:2;1635:177:201;2469:133:66;;;;;;:::i;:::-;;:::i;3210:117::-;;;;;;:::i;:::-;;:::i;4013:151:2:-;;;;;;:::i;:::-;;:::i;4992:204::-;;;;;;:::i;:::-;;:::i;2769:103:66:-;;;;;;:::i;:::-;;:::i;709:74::-;;760:23;709:74;;787:82;;842:27;787:82;;2636:99;;;;;;:::i;:::-;;:::i;2906:123::-;;;;;;:::i;:::-;;:::i;621:84::-;;677:28;621:84;;3792:118;;;;;;:::i;:::-;;:::i;943:92::-;;1003:32;943:92;;2322:113;;;;;;:::i;:::-;;:::i;2022:123::-;;;;;;:::i;:::-;2826:29:2;;;2090:4:66;2826:29:2;;;:12;;:29;:12;:29;;;;;2109:31:66;2729:131:2;;;;;;;:::i;:::-;2807:4;2826:12;;;;;;;;;;;:29;;;;;;;;;;;;;;;;2729:131;3532:94:66;;;;;;:::i;:::-;;:::i;3944:116::-;;;;;;:::i;:::-;;:::i;3063:113::-;;;;;;:::i;:::-;;:::i;1901:49:2:-;;1946:4;1901:49;;4094:120:66;;;;;;:::i;:::-;;:::i;873:66::-;;920:19;873:66;;543:74;;594:23;543:74;;4378:153:2;;;;;;:::i;:::-;;:::i;1885:103:66:-;;;;;;:::i;:::-;;:::i;3361:137::-;;;;;;:::i;:::-;;:::i;2454:196:2:-;2539:4;2558:47;;;2573:32;2558:47;;:87;;-1:-1:-1;874:25:5;859:40;;;;2609:36:2;2551:94;2454:196;-1:-1:-1;;2454:196:2:o;3660:98:66:-;3722:31;920:19;3746:6;3722:10;:31::i;:::-;3660:98;:::o;4248:140::-;2826:29:2;;;4324:4:66;2826:29:2;;;:12;;:29;:12;:29;;;;;4343:40:66;2729:131:2;2179:109:66;2245:38;677:28;2277:5;2245:9;:38::i;1563:155::-;1946:4:2;2353:30;1946:4;678:10:4;2353::2;:30::i;:::-;1683::66::1;1697:4;1703:9;1683:13;:30::i;:::-;1563:155:::0;;;:::o;1752:99::-;1813:33;594:23;1840:5;1813:9;:33::i;2469:133::-;2826:29:2;;;2542:4:66;2826:29:2;;;:12;;:29;:12;:29;;;;;2561:36:66;2729:131:2;3210:117:66;3281:41;842:27;3313:8;3281:10;:41::i;4013:151:2:-;3736:7;3758:12;;;;;;;;;;:22;;;2353:30;2364:4;678:10:4;2353::2;:30::i;:::-;4134:25:::1;4145:4;4151:7;4134:10;:25::i;4992:204::-:0;5083:23;;;678:10:4;5083:23:2;5075:83;;;;;;;2278:2:201;5075:83:2;;;2260:21:201;2317:2;2297:18;;;2290:30;2356:34;2336:18;;;2329:62;2427:17;2407:18;;;2400:45;2462:19;;5075:83:2;;;;;;;;;5165:26;5177:4;5183:7;5165:11;:26::i;:::-;4992:204;;:::o;2769:103:66:-;2833:34;760:23;2861:5;2833:10;:34::i;2636:99::-;2697:33;760:23;2724:5;2697:9;:33::i;2906:123::-;2826:29:2;;;2974:4:66;2826:29:2;;;:12;;:29;:12;:29;;;;;2993:31:66;2729:131:2;3792:118:66;2826:29:2;;;3858:4:66;2826:29:2;;;:12;;:29;:12;:29;;;;;3877:28:66;2729:131:2;2322:113:66;2391:39;677:28;2424:5;2391:10;:39::i;3532:94::-;3591:30;920:19;3614:6;3591:9;:30::i;3944:116::-;4013:42;1003:32;4049:5;4013:9;:42::i;3063:113::-;3131:40;842:27;3162:8;3131:9;:40::i;4094:120::-;4166:43;1003:32;4203:5;4378:153:2;3736:7;3758:12;;;;;;;;;;:22;;;2353:30;2364:4;678:10:4;2353::2;:30::i;:::-;4500:26:::1;4512:4;4518:7;4500:11;:26::i;1885:103:66:-:0;1949:34;594:23;1977:5;1949:10;:34::i;3361:137::-;2826:29:2;;;3436:4:66;2826:29:2;;;:12;;:29;:12;:29;;;;;3455:38:66;2729:131:2;3125:378;2807:4;2826:12;;;;;;;;;;;:29;;;;;;;;;;;;;3196:303;;3336:41;3364:7;3336:41;;3374:2;3336:19;:41::i;:::-;3424:38;3452:4;3459:2;3424:19;:38::i;:::-;3267:207;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;3233:259;;;;;;;;:::i;5944:233::-;6023:25;3758:12;;;;;;;;;;;:22;;;;6075:34;;;;6120:52;;3758:22;;6075:34;;3758:22;;:12;;6120:52;;6023:25;6120:52;6017:160;5944:233;;:::o;6181:202::-;2807:4;2826:12;;;;;;;;;;;:29;;;;;;;;;;;;;6246:133;;6283:6;:12;;;;;;;;;;;:29;;;;;;;;;;:36;;;;6315:4;6283:36;;;6359:12;678:10:4;;587:107;6359:12:2;6332:40;;6350:7;6332:40;;6344:4;6332:40;;;;;;;;;;6181:202;;:::o;6387:203::-;2807:4;2826:12;;;;;;;;;;;:29;;;;;;;;;;;;;6453:133;;;6521:5;6489:12;;;;;;;;;;;:29;;;;;;;;;;;:37;;;;;;6539:40;678:10:4;;6489:12:2;;6539:40;;6521:5;6539:40;6387:203;;:::o;1375:399:15:-;1450:13;1471:19;1503:10;1507:6;1503:1;:10;:::i;:::-;:14;;1516:1;1503:14;:::i;:::-;1493:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1493:25:15;;1471:47;;1524:15;:6;1531:1;1524:9;;;;;;;;:::i;:::-;;;;:15;;;;;;;;;;;1545;:6;1552:1;1545:9;;;;;;;;:::i;:::-;;;;:15;;;;;;;;;;-1:-1:-1;1571:9:15;1583:10;1587:6;1583:1;:10;:::i;:::-;:14;;1596:1;1583:14;:::i;:::-;1571:26;;1566:116;1603:1;1599;:5;1566:116;;;1631:12;1644:5;1652:3;1644:11;1631:25;;;;;;;:::i;:::-;;;;1619:6;1626:1;1619:9;;;;;;;;:::i;:::-;;;;:37;;;;;;;;;;-1:-1:-1;1674:1:15;1664:11;;;;;1606:3;;;:::i;:::-;;;1566:116;;;-1:-1:-1;1695:10:15;;1687:55;;;;;;;5329:2:201;1687:55:15;;;5311:21:201;;;5348:18;;;5341:30;5407:34;5387:18;;;5380:62;5459:18;;1687:55:15;5127:356:201;1687:55:15;1762:6;1375:399;-1:-1:-1;;;1375:399:15:o;14:332:201:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;180:9;167:23;230:66;223:5;219:78;212:5;209:89;199:117;;312:1;309;302:12;543:196;611:20;;671:42;660:54;;650:65;;640:93;;729:1;726;719:12;640:93;543:196;;;:::o;744:186::-;803:6;856:2;844:9;835:7;831:23;827:32;824:52;;;872:1;869;862:12;824:52;895:29;914:9;895:29;:::i;1197:248::-;1265:6;1273;1326:2;1314:9;1305:7;1301:23;1297:32;1294:52;;;1342:1;1339;1332:12;1294:52;-1:-1:-1;;1365:23:201;;;1435:2;1420:18;;;1407:32;;-1:-1:-1;1197:248:201:o;1450:180::-;1509:6;1562:2;1550:9;1541:7;1537:23;1533:32;1530:52;;;1578:1;1575;1568:12;1530:52;-1:-1:-1;1601:23:201;;1450:180;-1:-1:-1;1450:180:201:o;1817:254::-;1885:6;1893;1946:2;1934:9;1925:7;1921:23;1917:32;1914:52;;;1962:1;1959;1952:12;1914:52;1998:9;1985:23;1975:33;;2027:38;2061:2;2050:9;2046:18;2027:38;:::i;:::-;2017:48;;1817:254;;;;;:::o;2492:258::-;2564:1;2574:113;2588:6;2585:1;2582:13;2574:113;;;2664:11;;;2658:18;2645:11;;;2638:39;2610:2;2603:10;2574:113;;;2705:6;2702:1;2699:13;2696:48;;;2740:1;2731:6;2726:3;2722:16;2715:27;2696:48;;2492:258;;;:::o;2755:786::-;3166:25;3161:3;3154:38;3136:3;3221:6;3215:13;3237:62;3292:6;3287:2;3282:3;3278:12;3271:4;3263:6;3259:17;3237:62;:::i;:::-;3363:19;3358:2;3318:16;;;3350:11;;;3343:40;3408:13;;3430:63;3408:13;3479:2;3471:11;;3464:4;3452:17;;3430:63;:::i;:::-;3513:17;3532:2;3509:26;;2755:786;-1:-1:-1;;;;2755:786:201:o;3546:442::-;3695:2;3684:9;3677:21;3658:4;3727:6;3721:13;3770:6;3765:2;3754:9;3750:18;3743:34;3786:66;3845:6;3840:2;3829:9;3825:18;3820:2;3812:6;3808:15;3786:66;:::i;:::-;3904:2;3892:15;3909:66;3888:88;3873:104;;;;3979:2;3869:113;;3546:442;-1:-1:-1;;3546:442:201:o;3993:184::-;4045:77;4042:1;4035:88;4142:4;4139:1;4132:15;4166:4;4163:1;4156:15;4182:228;4222:7;4348:1;4280:66;4276:74;4273:1;4270:81;4265:1;4258:9;4251:17;4247:105;4244:131;;;4355:18;;:::i;:::-;-1:-1:-1;4395:9:201;;4182:228::o;4415:128::-;4455:3;4486:1;4482:6;4479:1;4476:13;4473:39;;;4492:18;;:::i;:::-;-1:-1:-1;4528:9:201;;4415:128::o;4548:184::-;4600:77;4597:1;4590:88;4697:4;4694:1;4687:15;4721:4;4718:1;4711:15;4737:184;4789:77;4786:1;4779:88;4886:4;4883:1;4876:15;4910:4;4907:1;4900:15;4926:196;4965:3;4993:5;4983:39;;5002:18;;:::i;:::-;-1:-1:-1;5049:66:201;5038:78;;4926:196::o"},"gasEstimates":{"creation":{"codeDepositCost":"988600","executionCost":"infinite","totalCost":"infinite"},"external":{"ADDRESSES_PROVIDER()":"infinite","ASSET_LISTING_ADMIN_ROLE()":"307","BRIDGE_ROLE()":"262","DEFAULT_ADMIN_ROLE()":"284","EMERGENCY_ADMIN_ROLE()":"263","FLASH_BORROWER_ROLE()":"284","POOL_ADMIN_ROLE()":"284","RISK_ADMIN_ROLE()":"262","addAssetListingAdmin(address)":"infinite","addBridge(address)":"infinite","addEmergencyAdmin(address)":"infinite","addFlashBorrower(address)":"infinite","addPoolAdmin(address)":"infinite","addRiskAdmin(address)":"infinite","getRoleAdmin(bytes32)":"2559","grantRole(bytes32,address)":"infinite","hasRole(bytes32,address)":"2704","isAssetListingAdmin(address)":"2661","isBridge(address)":"2638","isEmergencyAdmin(address)":"2594","isFlashBorrower(address)":"2658","isPoolAdmin(address)":"2603","isRiskAdmin(address)":"2594","removeAssetListingAdmin(address)":"infinite","removeBridge(address)":"infinite","removeEmergencyAdmin(address)":"infinite","removeFlashBorrower(address)":"infinite","removePoolAdmin(address)":"infinite","removeRiskAdmin(address)":"infinite","renounceRole(bytes32,address)":"29017","revokeRole(bytes32,address)":"infinite","setRoleAdmin(bytes32,bytes32)":"infinite","supportsInterface(bytes4)":"416"}},"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","ASSET_LISTING_ADMIN_ROLE()":"78bb0a43","BRIDGE_ROLE()":"b5bfddea","DEFAULT_ADMIN_ROLE()":"a217fddf","EMERGENCY_ADMIN_ROLE()":"6e76fc8f","FLASH_BORROWER_ROLE()":"5577b7a9","POOL_ADMIN_ROLE()":"b8f6dba7","RISK_ADMIN_ROLE()":"4f16b425","addAssetListingAdmin(address)":"9a2b96f7","addBridge(address)":"9712fdf8","addEmergencyAdmin(address)":"179efb09","addFlashBorrower(address)":"9ac9d80b","addPoolAdmin(address)":"22650caf","addRiskAdmin(address)":"5b9a94e4","getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","isAssetListingAdmin(address)":"13ee32e0","isBridge(address)":"726600ce","isEmergencyAdmin(address)":"2500f2b6","isFlashBorrower(address)":"fa50f297","isPoolAdmin(address)":"7be53ca1","isRiskAdmin(address)":"674b5e4d","removeAssetListingAdmin(address)":"a21bce15","removeBridge(address)":"04df017d","removeEmergencyAdmin(address)":"7a9a93f4","removeFlashBorrower(address)":"253cf980","removePoolAdmin(address)":"f83695cb","removeRiskAdmin(address)":"3c5a08e5","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","setRoleAdmin(bytes32,bytes32)":"1e4e0091","supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"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\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ASSET_LISTING_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BRIDGE_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EMERGENCY_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FLASH_BORROWER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RISK_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"addAssetListingAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"addBridge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"addEmergencyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"addFlashBorrower\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"addPoolAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"addRiskAdmin\",\"outputs\":[],\"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\":\"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\":\"admin\",\"type\":\"address\"}],\"name\":\"isAssetListingAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"isBridge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"isEmergencyAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"isFlashBorrower\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"isPoolAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"isRiskAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"removeAssetListingAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"removeBridge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"removeEmergencyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"}],\"name\":\"removeFlashBorrower\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"removePoolAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"removeRiskAdmin\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"adminRole\",\"type\":\"bytes32\"}],\"name\":\"setRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"addAssetListingAdmin(address)\":{\"params\":{\"admin\":\"The address of the new admin\"}},\"addBridge(address)\":{\"params\":{\"bridge\":\"The address of the new Bridge\"}},\"addEmergencyAdmin(address)\":{\"params\":{\"admin\":\"The address of the new admin\"}},\"addFlashBorrower(address)\":{\"params\":{\"borrower\":\"The address of the new FlashBorrower\"}},\"addPoolAdmin(address)\":{\"params\":{\"admin\":\"The address of the new admin\"}},\"addRiskAdmin(address)\":{\"params\":{\"admin\":\"The address of the new admin\"}},\"constructor\":{\"details\":\"ConstructorThe ACL admin should be initialized at the addressesProvider beforehand\",\"params\":{\"provider\":\"The address of the PoolAddressesProvider\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"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`.\"},\"isAssetListingAdmin(address)\":{\"params\":{\"admin\":\"The address to check\"},\"returns\":{\"_0\":\"True if the given address is AssetListingAdmin, false otherwise\"}},\"isBridge(address)\":{\"params\":{\"bridge\":\"The address to check\"},\"returns\":{\"_0\":\"True if the given address is Bridge, false otherwise\"}},\"isEmergencyAdmin(address)\":{\"params\":{\"admin\":\"The address to check\"},\"returns\":{\"_0\":\"True if the given address is EmergencyAdmin, false otherwise\"}},\"isFlashBorrower(address)\":{\"params\":{\"borrower\":\"The address to check\"},\"returns\":{\"_0\":\"True if the given address is FlashBorrower, false otherwise\"}},\"isPoolAdmin(address)\":{\"params\":{\"admin\":\"The address to check\"},\"returns\":{\"_0\":\"True if the given address is PoolAdmin, false otherwise\"}},\"isRiskAdmin(address)\":{\"params\":{\"admin\":\"The address to check\"},\"returns\":{\"_0\":\"True if the given address is RiskAdmin, false otherwise\"}},\"removeAssetListingAdmin(address)\":{\"params\":{\"admin\":\"The address of the admin to remove\"}},\"removeBridge(address)\":{\"params\":{\"bridge\":\"The address of the bridge to remove\"}},\"removeEmergencyAdmin(address)\":{\"params\":{\"admin\":\"The address of the admin to remove\"}},\"removeFlashBorrower(address)\":{\"params\":{\"borrower\":\"The address of the FlashBorrower to remove\"}},\"removePoolAdmin(address)\":{\"params\":{\"admin\":\"The address of the admin to remove\"}},\"removeRiskAdmin(address)\":{\"params\":{\"admin\":\"The address of the admin to remove\"}},\"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.\"},\"setRoleAdmin(bytes32,bytes32)\":{\"details\":\"By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\",\"params\":{\"adminRole\":\"The admin role\",\"role\":\"The role to be managed by the admin role\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"stateVariables\":{\"ADDRESSES_PROVIDER\":{\"return\":\"The address of the PoolAddressesProvider\",\"returns\":{\"_0\":\"The address of the PoolAddressesProvider\"}},\"ASSET_LISTING_ADMIN_ROLE\":{\"return\":\"The id of the AssetListingAdmin role\",\"returns\":{\"_0\":\"The id of the AssetListingAdmin role\"}},\"BRIDGE_ROLE\":{\"return\":\"The id of the Bridge role\",\"returns\":{\"_0\":\"The id of the Bridge role\"}},\"EMERGENCY_ADMIN_ROLE\":{\"return\":\"The id of the EmergencyAdmin role\",\"returns\":{\"_0\":\"The id of the EmergencyAdmin role\"}},\"FLASH_BORROWER_ROLE\":{\"return\":\"The id of the FlashBorrower role\",\"returns\":{\"_0\":\"The id of the FlashBorrower role\"}},\"POOL_ADMIN_ROLE\":{\"return\":\"The id of the PoolAdmin role\",\"returns\":{\"_0\":\"The id of the PoolAdmin role\"}},\"RISK_ADMIN_ROLE\":{\"return\":\"The id of the RiskAdmin role\",\"returns\":{\"_0\":\"The id of the RiskAdmin role\"}}},\"title\":\"ACLManager\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the contract address of the PoolAddressesProvider\"},\"ASSET_LISTING_ADMIN_ROLE()\":{\"notice\":\"Returns the identifier of the AssetListingAdmin role\"},\"BRIDGE_ROLE()\":{\"notice\":\"Returns the identifier of the Bridge role\"},\"EMERGENCY_ADMIN_ROLE()\":{\"notice\":\"Returns the identifier of the EmergencyAdmin role\"},\"FLASH_BORROWER_ROLE()\":{\"notice\":\"Returns the identifier of the FlashBorrower role\"},\"POOL_ADMIN_ROLE()\":{\"notice\":\"Returns the identifier of the PoolAdmin role\"},\"RISK_ADMIN_ROLE()\":{\"notice\":\"Returns the identifier of the RiskAdmin role\"},\"addAssetListingAdmin(address)\":{\"notice\":\"Adds a new admin as AssetListingAdmin\"},\"addBridge(address)\":{\"notice\":\"Adds a new address as Bridge\"},\"addEmergencyAdmin(address)\":{\"notice\":\"Adds a new admin as EmergencyAdmin\"},\"addFlashBorrower(address)\":{\"notice\":\"Adds a new address as FlashBorrower\"},\"addPoolAdmin(address)\":{\"notice\":\"Adds a new admin as PoolAdmin\"},\"addRiskAdmin(address)\":{\"notice\":\"Adds a new admin as RiskAdmin\"},\"isAssetListingAdmin(address)\":{\"notice\":\"Returns true if the address is AssetListingAdmin, false otherwise\"},\"isBridge(address)\":{\"notice\":\"Returns true if the address is Bridge, false otherwise\"},\"isEmergencyAdmin(address)\":{\"notice\":\"Returns true if the address is EmergencyAdmin, false otherwise\"},\"isFlashBorrower(address)\":{\"notice\":\"Returns true if the address is FlashBorrower, false otherwise\"},\"isPoolAdmin(address)\":{\"notice\":\"Returns true if the address is PoolAdmin, false otherwise\"},\"isRiskAdmin(address)\":{\"notice\":\"Returns true if the address is RiskAdmin, false otherwise\"},\"removeAssetListingAdmin(address)\":{\"notice\":\"Removes an admin as AssetListingAdmin\"},\"removeBridge(address)\":{\"notice\":\"Removes an address as Bridge\"},\"removeEmergencyAdmin(address)\":{\"notice\":\"Removes an admin as EmergencyAdmin\"},\"removeFlashBorrower(address)\":{\"notice\":\"Removes an address as FlashBorrower\"},\"removePoolAdmin(address)\":{\"notice\":\"Removes an admin as PoolAdmin\"},\"removeRiskAdmin(address)\":{\"notice\":\"Removes an admin as RiskAdmin\"},\"setRoleAdmin(bytes32,bytes32)\":{\"notice\":\"Set the role as admin of a specific role.\"}},\"notice\":\"Access Control List Manager. Main registry of system roles and permissions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/configuration/ACLManager.sol\":\"ACLManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './IAccessControl.sol';\\nimport './Context.sol';\\nimport './Strings.sol';\\nimport './ERC165.sol';\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\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 AccessControl is Context, IAccessControl, ERC165 {\\n  struct RoleData {\\n    mapping(address => bool) 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 Modifier that checks that an account has a specific role. Reverts\\n   * with a standardized message including the required role.\\n   *\\n   * The format of the revert reason is given by the following regular expression:\\n   *\\n   *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n   *\\n   * _Available since v4.1._\\n   */\\n  modifier onlyRole(bytes32 role) {\\n    _checkRole(role, _msgSender());\\n    _;\\n  }\\n\\n  /**\\n   * @dev See {IERC165-supportsInterface}.\\n   */\\n  function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n    return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n  }\\n\\n  /**\\n   * @dev Returns `true` if `account` has been granted `role`.\\n   */\\n  function hasRole(bytes32 role, address account) public view override returns (bool) {\\n    return _roles[role].members[account];\\n  }\\n\\n  /**\\n   * @dev Revert with a standard message if `account` is missing `role`.\\n   *\\n   * The format of the revert reason is given by the following regular expression:\\n   *\\n   *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n   */\\n  function _checkRole(bytes32 role, address account) internal view {\\n    if (!hasRole(role, account)) {\\n      revert(\\n        string(\\n          abi.encodePacked(\\n            'AccessControl: account ',\\n            Strings.toHexString(uint160(account), 20),\\n            ' is missing role ',\\n            Strings.toHexString(uint256(role), 32)\\n          )\\n        )\\n      );\\n    }\\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 override 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(\\n    bytes32 role,\\n    address account\\n  ) public virtual override onlyRole(getRoleAdmin(role)) {\\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(\\n    bytes32 role,\\n    address account\\n  ) public virtual override onlyRole(getRoleAdmin(role)) {\\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 override {\\n    require(account == _msgSender(), '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    bytes32 previousAdminRole = getRoleAdmin(role);\\n    _roles[role].adminRole = adminRole;\\n    emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n  }\\n\\n  function _grantRole(bytes32 role, address account) private {\\n    if (!hasRole(role, account)) {\\n      _roles[role].members[account] = true;\\n      emit RoleGranted(role, account, _msgSender());\\n    }\\n  }\\n\\n  function _revokeRole(bytes32 role, address account) private {\\n    if (hasRole(role, account)) {\\n      _roles[role].members[account] = false;\\n      emit RoleRevoked(role, account, _msgSender());\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xee6ee05b311d9683fe6402b9c396d3767bb1c7517a8ac7fb270d6c09facefb36\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './IERC165.sol';\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n  /**\\n   * @dev See {IERC165-supportsInterface}.\\n   */\\n  function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n    return interfaceId == type(IERC165).interfaceId;\\n  }\\n}\\n\",\"keccak256\":\"0x583726b0d457b859eb327ac9838dd3ee345e1956a47cd0a5cd0c0c3c17277eef\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\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(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\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 {AccessControl-_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) external view returns (bool);\\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 {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\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) external;\\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) external;\\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) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n  /**\\n   * @dev Returns true if this contract implements the interface defined by\\n   * `interfaceId`. See the corresponding\\n   * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n   * to learn more about how these ids are created.\\n   *\\n   * This function call must use less than 30 000 gas.\\n   */\\n  function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xbca9de297214bb9c30daefda5ecaedd0af2c3e8e0440403ad543fb33528c5ef8\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n  bytes16 private constant _HEX_SYMBOLS = '0123456789abcdef';\\n\\n  /**\\n   * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n   */\\n  function toString(uint256 value) internal pure returns (string memory) {\\n    // Inspired by OraclizeAPI's implementation - MIT licence\\n    // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n    if (value == 0) {\\n      return '0';\\n    }\\n    uint256 temp = value;\\n    uint256 digits;\\n    while (temp != 0) {\\n      digits++;\\n      temp /= 10;\\n    }\\n    bytes memory buffer = new bytes(digits);\\n    while (value != 0) {\\n      digits -= 1;\\n      buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));\\n      value /= 10;\\n    }\\n    return string(buffer);\\n  }\\n\\n  /**\\n   * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n   */\\n  function toHexString(uint256 value) internal pure returns (string memory) {\\n    if (value == 0) {\\n      return '0x00';\\n    }\\n    uint256 temp = value;\\n    uint256 length = 0;\\n    while (temp != 0) {\\n      length++;\\n      temp >>= 8;\\n    }\\n    return toHexString(value, length);\\n  }\\n\\n  /**\\n   * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n   */\\n  function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n    bytes memory buffer = new bytes(2 * length + 2);\\n    buffer[0] = '0';\\n    buffer[1] = 'x';\\n    for (uint256 i = 2 * length + 1; i > 1; --i) {\\n      buffer[i] = _HEX_SYMBOLS[value & 0xf];\\n      value >>= 4;\\n    }\\n    require(value == 0, 'Strings: hex length insufficient');\\n    return string(buffer);\\n  }\\n}\\n\",\"keccak256\":\"0xb2754a420cad582ee384ce1075833bc78411b4e27198019fe762066f7a72946a\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/configuration/ACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {AccessControl} from '../../dependencies/openzeppelin/contracts/AccessControl.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IACLManager} from '../../interfaces/IACLManager.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\n\\n/**\\n * @title ACLManager\\n * @author Aave\\n * @notice Access Control List Manager. Main registry of system roles and permissions.\\n */\\ncontract ACLManager is AccessControl, IACLManager {\\n  bytes32 public constant override POOL_ADMIN_ROLE = keccak256('POOL_ADMIN');\\n  bytes32 public constant override EMERGENCY_ADMIN_ROLE = keccak256('EMERGENCY_ADMIN');\\n  bytes32 public constant override RISK_ADMIN_ROLE = keccak256('RISK_ADMIN');\\n  bytes32 public constant override FLASH_BORROWER_ROLE = keccak256('FLASH_BORROWER');\\n  bytes32 public constant override BRIDGE_ROLE = keccak256('BRIDGE');\\n  bytes32 public constant override ASSET_LISTING_ADMIN_ROLE = keccak256('ASSET_LISTING_ADMIN');\\n\\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\\n\\n  /**\\n   * @dev Constructor\\n   * @dev The ACL admin should be initialized at the addressesProvider beforehand\\n   * @param provider The address of the PoolAddressesProvider\\n   */\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n    address aclAdmin = provider.getACLAdmin();\\n    require(aclAdmin != address(0), Errors.ACL_ADMIN_CANNOT_BE_ZERO);\\n    _setupRole(DEFAULT_ADMIN_ROLE, aclAdmin);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function setRoleAdmin(\\n    bytes32 role,\\n    bytes32 adminRole\\n  ) external override onlyRole(DEFAULT_ADMIN_ROLE) {\\n    _setRoleAdmin(role, adminRole);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function addPoolAdmin(address admin) external override {\\n    grantRole(POOL_ADMIN_ROLE, admin);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function removePoolAdmin(address admin) external override {\\n    revokeRole(POOL_ADMIN_ROLE, admin);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function isPoolAdmin(address admin) external view override returns (bool) {\\n    return hasRole(POOL_ADMIN_ROLE, admin);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function addEmergencyAdmin(address admin) external override {\\n    grantRole(EMERGENCY_ADMIN_ROLE, admin);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function removeEmergencyAdmin(address admin) external override {\\n    revokeRole(EMERGENCY_ADMIN_ROLE, admin);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function isEmergencyAdmin(address admin) external view override returns (bool) {\\n    return hasRole(EMERGENCY_ADMIN_ROLE, admin);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function addRiskAdmin(address admin) external override {\\n    grantRole(RISK_ADMIN_ROLE, admin);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function removeRiskAdmin(address admin) external override {\\n    revokeRole(RISK_ADMIN_ROLE, admin);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function isRiskAdmin(address admin) external view override returns (bool) {\\n    return hasRole(RISK_ADMIN_ROLE, admin);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function addFlashBorrower(address borrower) external override {\\n    grantRole(FLASH_BORROWER_ROLE, borrower);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function removeFlashBorrower(address borrower) external override {\\n    revokeRole(FLASH_BORROWER_ROLE, borrower);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function isFlashBorrower(address borrower) external view override returns (bool) {\\n    return hasRole(FLASH_BORROWER_ROLE, borrower);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function addBridge(address bridge) external override {\\n    grantRole(BRIDGE_ROLE, bridge);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function removeBridge(address bridge) external override {\\n    revokeRole(BRIDGE_ROLE, bridge);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function isBridge(address bridge) external view override returns (bool) {\\n    return hasRole(BRIDGE_ROLE, bridge);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function addAssetListingAdmin(address admin) external override {\\n    grantRole(ASSET_LISTING_ADMIN_ROLE, admin);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function removeAssetListingAdmin(address admin) external override {\\n    revokeRole(ASSET_LISTING_ADMIN_ROLE, admin);\\n  }\\n\\n  /// @inheritdoc IACLManager\\n  function isAssetListingAdmin(address admin) external view override returns (bool) {\\n    return hasRole(ASSET_LISTING_ADMIN_ROLE, admin);\\n  }\\n}\\n\",\"keccak256\":\"0x67e7a1a872a007101947bdab4eb9314613148271f0bc21bcc69aa78cbe1635a3\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":143,"contract":"@aave/core-v3/contracts/protocol/configuration/ACLManager.sol:ACLManager","label":"_roles","offset":0,"slot":"0","type":"t_mapping(t_bytes32,t_struct(RoleData)138_storage)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_bytes32,t_struct(RoleData)138_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct AccessControl.RoleData)","numberOfBytes":"32","value":"t_struct(RoleData)138_storage"},"t_struct(RoleData)138_storage":{"encoding":"inplace","label":"struct AccessControl.RoleData","members":[{"astId":135,"contract":"@aave/core-v3/contracts/protocol/configuration/ACLManager.sol:ACLManager","label":"members","offset":0,"slot":"0","type":"t_mapping(t_address,t_bool)"},{"astId":137,"contract":"@aave/core-v3/contracts/protocol/configuration/ACLManager.sol:ACLManager","label":"adminRole","offset":0,"slot":"1","type":"t_bytes32"}],"numberOfBytes":"64"}}},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the contract address of the PoolAddressesProvider"},"ASSET_LISTING_ADMIN_ROLE()":{"notice":"Returns the identifier of the AssetListingAdmin role"},"BRIDGE_ROLE()":{"notice":"Returns the identifier of the Bridge role"},"EMERGENCY_ADMIN_ROLE()":{"notice":"Returns the identifier of the EmergencyAdmin role"},"FLASH_BORROWER_ROLE()":{"notice":"Returns the identifier of the FlashBorrower role"},"POOL_ADMIN_ROLE()":{"notice":"Returns the identifier of the PoolAdmin role"},"RISK_ADMIN_ROLE()":{"notice":"Returns the identifier of the RiskAdmin role"},"addAssetListingAdmin(address)":{"notice":"Adds a new admin as AssetListingAdmin"},"addBridge(address)":{"notice":"Adds a new address as Bridge"},"addEmergencyAdmin(address)":{"notice":"Adds a new admin as EmergencyAdmin"},"addFlashBorrower(address)":{"notice":"Adds a new address as FlashBorrower"},"addPoolAdmin(address)":{"notice":"Adds a new admin as PoolAdmin"},"addRiskAdmin(address)":{"notice":"Adds a new admin as RiskAdmin"},"isAssetListingAdmin(address)":{"notice":"Returns true if the address is AssetListingAdmin, false otherwise"},"isBridge(address)":{"notice":"Returns true if the address is Bridge, false otherwise"},"isEmergencyAdmin(address)":{"notice":"Returns true if the address is EmergencyAdmin, false otherwise"},"isFlashBorrower(address)":{"notice":"Returns true if the address is FlashBorrower, false otherwise"},"isPoolAdmin(address)":{"notice":"Returns true if the address is PoolAdmin, false otherwise"},"isRiskAdmin(address)":{"notice":"Returns true if the address is RiskAdmin, false otherwise"},"removeAssetListingAdmin(address)":{"notice":"Removes an admin as AssetListingAdmin"},"removeBridge(address)":{"notice":"Removes an address as Bridge"},"removeEmergencyAdmin(address)":{"notice":"Removes an admin as EmergencyAdmin"},"removeFlashBorrower(address)":{"notice":"Removes an address as FlashBorrower"},"removePoolAdmin(address)":{"notice":"Removes an admin as PoolAdmin"},"removeRiskAdmin(address)":{"notice":"Removes an admin as RiskAdmin"},"setRoleAdmin(bytes32,bytes32)":{"notice":"Set the role as admin of a specific role."}},"notice":"Access Control List Manager. Main registry of system roles and permissions.","version":1}}},"@aave/core-v3/contracts/protocol/configuration/PoolAddressesProvider.sol":{"PoolAddressesProvider":{"abi":[{"inputs":[{"internalType":"string","name":"marketId","type":"string"},{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"ACLAdminUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"ACLManagerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"AddressSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"address","name":"proxyAddress","type":"address"},{"indexed":false,"internalType":"address","name":"oldImplementationAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newImplementationAddress","type":"address"}],"name":"AddressSetAsProxy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"oldMarketId","type":"string"},{"indexed":true,"internalType":"string","name":"newMarketId","type":"string"}],"name":"MarketIdSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"PoolConfiguratorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"PoolDataProviderUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"PoolUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"PriceOracleSentinelUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"PriceOracleUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"address","name":"proxyAddress","type":"address"},{"indexed":true,"internalType":"address","name":"implementationAddress","type":"address"}],"name":"ProxyCreated","type":"event"},{"inputs":[],"name":"getACLAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getACLManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"getAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketId","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolConfigurator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolDataProvider","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceOracleSentinel","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAclAdmin","type":"address"}],"name":"setACLAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAclManager","type":"address"}],"name":"setACLManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"newAddress","type":"address"}],"name":"setAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"address","name":"newImplementationAddress","type":"address"}],"name":"setAddressAsProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newMarketId","type":"string"}],"name":"setMarketId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPoolConfiguratorImpl","type":"address"}],"name":"setPoolConfiguratorImpl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDataProvider","type":"address"}],"name":"setPoolDataProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPoolImpl","type":"address"}],"name":"setPoolImpl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPriceOracle","type":"address"}],"name":"setPriceOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPriceOracleSentinel","type":"address"}],"name":"setPriceOracleSentinel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","details":"Acts as factory of proxies and admin of those, so with right to change its implementationsOwned by the Aave Governance","kind":"dev","methods":{"constructor":{"details":"Constructor.","params":{"marketId":"The identifier of the market.","owner":"The owner address of this contract."}},"getACLAdmin()":{"returns":{"_0":"The address of the ACL admin"}},"getACLManager()":{"returns":{"_0":"The address of the ACLManager"}},"getAddress(bytes32)":{"details":"The returned address might be an EOA or a contract, potentially proxiedIt returns ZERO if there is no registered address with the given id","params":{"id":"The id"},"returns":{"_0":"The address of the registered for the specified id"}},"getMarketId()":{"returns":{"_0":"The market id"}},"getPool()":{"returns":{"_0":"The Pool proxy address"}},"getPoolConfigurator()":{"returns":{"_0":"The PoolConfigurator proxy address"}},"getPoolDataProvider()":{"returns":{"_0":"The address of the DataProvider"}},"getPriceOracle()":{"returns":{"_0":"The address of the PriceOracle"}},"getPriceOracleSentinel()":{"returns":{"_0":"The address of the PriceOracleSentinel"}},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"setACLAdmin(address)":{"params":{"newAclAdmin":"The address of the new ACL admin"}},"setACLManager(address)":{"params":{"newAclManager":"The address of the new ACLManager"}},"setAddress(bytes32,address)":{"details":"IMPORTANT Use this function carefully, as it will do a hard replacement","params":{"id":"The id","newAddress":"The address to set"}},"setAddressAsProxy(bytes32,address)":{"details":"IMPORTANT Use this function carefully, only for ids that don't have an explicit setter function, in order to avoid unexpected consequences","params":{"id":"The id","newImplementationAddress":"The address of the new implementation"}},"setMarketId(string)":{"details":"This can be used to create an onchain registry of PoolAddressesProviders to identify and validate multiple Aave markets.","params":{"newMarketId":"The market id"}},"setPoolConfiguratorImpl(address)":{"params":{"newPoolConfiguratorImpl":"The new PoolConfigurator implementation"}},"setPoolDataProvider(address)":{"params":{"newDataProvider":"The address of the new DataProvider"}},"setPoolImpl(address)":{"params":{"newPoolImpl":"The new Pool implementation"}},"setPriceOracle(address)":{"params":{"newPriceOracle":"The address of the new PriceOracle"}},"setPriceOracleSentinel(address)":{"params":{"newPriceOracleSentinel":"The address of the new PriceOracleSentinel"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"title":"PoolAddressesProvider","version":1},"evm":{"bytecode":{"functionDebugData":{"@_1500":{"entryPoint":null,"id":1500,"parameterSlots":0,"returnSlots":0},"@_9544":{"entryPoint":null,"id":9544,"parameterSlots":2,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_setMarketId_10029":{"entryPoint":130,"id":10029,"parameterSlots":1,"returnSlots":0},"@transferOwnership_1572":{"entryPoint":397,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":909,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_string_memory_ptrt_address_fromMemory":{"entryPoint":938,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_packed_t_string_memory_ptr__to_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":1204,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory":{"entryPoint":858,"id":null,"parameterSlots":3,"returnSlots":0},"extract_byte_array_length":{"entryPoint":1143,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x41":{"entryPoint":836,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3004:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"46:95:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"63:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"70:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"75:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"66:3:201"},"nodeType":"YulFunctionCall","src":"66:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"56:6:201"},"nodeType":"YulFunctionCall","src":"56:31:201"},"nodeType":"YulExpressionStatement","src":"56:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"103:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"106:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"96:6:201"},"nodeType":"YulFunctionCall","src":"96:15:201"},"nodeType":"YulExpressionStatement","src":"96:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"127:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"130:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"120:6:201"},"nodeType":"YulFunctionCall","src":"120:15:201"},"nodeType":"YulExpressionStatement","src":"120:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"14:127:201"},{"body":{"nodeType":"YulBlock","src":"199:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"209:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"218:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"213:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"278:63:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"303:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"308:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"299:3:201"},"nodeType":"YulFunctionCall","src":"299:11:201"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"322:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"327:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"318:3:201"},"nodeType":"YulFunctionCall","src":"318:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"312:5:201"},"nodeType":"YulFunctionCall","src":"312:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"292:6:201"},"nodeType":"YulFunctionCall","src":"292:39:201"},"nodeType":"YulExpressionStatement","src":"292:39:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"239:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"242:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"236:2:201"},"nodeType":"YulFunctionCall","src":"236:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"250:19:201","statements":[{"nodeType":"YulAssignment","src":"252:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"261:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"264:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"257:3:201"},"nodeType":"YulFunctionCall","src":"257:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"252:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"232:3:201","statements":[]},"src":"228:113:201"},{"body":{"nodeType":"YulBlock","src":"367:31:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"380:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"385:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"376:3:201"},"nodeType":"YulFunctionCall","src":"376:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"394:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"369:6:201"},"nodeType":"YulFunctionCall","src":"369:27:201"},"nodeType":"YulExpressionStatement","src":"369:27:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"356:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"359:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"353:2:201"},"nodeType":"YulFunctionCall","src":"353:13:201"},"nodeType":"YulIf","src":"350:48:201"}]},"name":"copy_memory_to_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"177:3:201","type":""},{"name":"dst","nodeType":"YulTypedName","src":"182:3:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"187:6:201","type":""}],"src":"146:258:201"},{"body":{"nodeType":"YulBlock","src":"469:117:201","statements":[{"nodeType":"YulAssignment","src":"479:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"494:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"488:5:201"},"nodeType":"YulFunctionCall","src":"488:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"479:5:201"}]},{"body":{"nodeType":"YulBlock","src":"564:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"573:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"576:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"566:6:201"},"nodeType":"YulFunctionCall","src":"566:12:201"},"nodeType":"YulExpressionStatement","src":"566:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"523:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"534:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"549:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"554:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"545:3:201"},"nodeType":"YulFunctionCall","src":"545:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"558:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"541:3:201"},"nodeType":"YulFunctionCall","src":"541:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"530:3:201"},"nodeType":"YulFunctionCall","src":"530:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"520:2:201"},"nodeType":"YulFunctionCall","src":"520:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"513:6:201"},"nodeType":"YulFunctionCall","src":"513:50:201"},"nodeType":"YulIf","src":"510:70:201"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"448:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"459:5:201","type":""}],"src":"409:177:201"},{"body":{"nodeType":"YulBlock","src":"699:869:201","statements":[{"body":{"nodeType":"YulBlock","src":"745:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"754:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"757:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"747:6:201"},"nodeType":"YulFunctionCall","src":"747:12:201"},"nodeType":"YulExpressionStatement","src":"747:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"720:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"729:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"716:3:201"},"nodeType":"YulFunctionCall","src":"716:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"741:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"712:3:201"},"nodeType":"YulFunctionCall","src":"712:32:201"},"nodeType":"YulIf","src":"709:52:201"},{"nodeType":"YulVariableDeclaration","src":"770:30:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"790:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"784:5:201"},"nodeType":"YulFunctionCall","src":"784:16:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"774:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"809:28:201","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"827:2:201","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"831:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"823:3:201"},"nodeType":"YulFunctionCall","src":"823:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"835:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"819:3:201"},"nodeType":"YulFunctionCall","src":"819:18:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"813:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"864:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"873:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"876:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"866:6:201"},"nodeType":"YulFunctionCall","src":"866:12:201"},"nodeType":"YulExpressionStatement","src":"866:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"852:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"860:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"849:2:201"},"nodeType":"YulFunctionCall","src":"849:14:201"},"nodeType":"YulIf","src":"846:34:201"},{"nodeType":"YulVariableDeclaration","src":"889:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"903:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"914:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"899:3:201"},"nodeType":"YulFunctionCall","src":"899:22:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"893:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"969:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"978:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"981:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"971:6:201"},"nodeType":"YulFunctionCall","src":"971:12:201"},"nodeType":"YulExpressionStatement","src":"971:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"948:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"952:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"944:3:201"},"nodeType":"YulFunctionCall","src":"944:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"959:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"940:3:201"},"nodeType":"YulFunctionCall","src":"940:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"933:6:201"},"nodeType":"YulFunctionCall","src":"933:35:201"},"nodeType":"YulIf","src":"930:55:201"},{"nodeType":"YulVariableDeclaration","src":"994:19:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1010:2:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1004:5:201"},"nodeType":"YulFunctionCall","src":"1004:9:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"998:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1036:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1038:16:201"},"nodeType":"YulFunctionCall","src":"1038:18:201"},"nodeType":"YulExpressionStatement","src":"1038:18:201"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1028:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1032:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1025:2:201"},"nodeType":"YulFunctionCall","src":"1025:10:201"},"nodeType":"YulIf","src":"1022:36:201"},{"nodeType":"YulVariableDeclaration","src":"1067:17:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1081:2:201","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1077:3:201"},"nodeType":"YulFunctionCall","src":"1077:7:201"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"1071:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1093:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1113:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1107:5:201"},"nodeType":"YulFunctionCall","src":"1107:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1097:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1125:71:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1147:6:201"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1171:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"1175:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1167:3:201"},"nodeType":"YulFunctionCall","src":"1167:13:201"},{"name":"_4","nodeType":"YulIdentifier","src":"1182:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1163:3:201"},"nodeType":"YulFunctionCall","src":"1163:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"1187:2:201","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1159:3:201"},"nodeType":"YulFunctionCall","src":"1159:31:201"},{"name":"_4","nodeType":"YulIdentifier","src":"1192:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1155:3:201"},"nodeType":"YulFunctionCall","src":"1155:40:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1143:3:201"},"nodeType":"YulFunctionCall","src":"1143:53:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1129:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1255:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1257:16:201"},"nodeType":"YulFunctionCall","src":"1257:18:201"},"nodeType":"YulExpressionStatement","src":"1257:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1214:10:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1226:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1211:2:201"},"nodeType":"YulFunctionCall","src":"1211:18:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1234:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1246:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1231:2:201"},"nodeType":"YulFunctionCall","src":"1231:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1208:2:201"},"nodeType":"YulFunctionCall","src":"1208:46:201"},"nodeType":"YulIf","src":"1205:72:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1293:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1297:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1286:6:201"},"nodeType":"YulFunctionCall","src":"1286:22:201"},"nodeType":"YulExpressionStatement","src":"1286:22:201"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1324:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"1332:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1317:6:201"},"nodeType":"YulFunctionCall","src":"1317:18:201"},"nodeType":"YulExpressionStatement","src":"1317:18:201"},{"body":{"nodeType":"YulBlock","src":"1383:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1392:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1395:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1385:6:201"},"nodeType":"YulFunctionCall","src":"1385:12:201"},"nodeType":"YulExpressionStatement","src":"1385:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1358:2:201"},{"name":"_3","nodeType":"YulIdentifier","src":"1362:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1354:3:201"},"nodeType":"YulFunctionCall","src":"1354:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"1367:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1350:3:201"},"nodeType":"YulFunctionCall","src":"1350:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1374:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1347:2:201"},"nodeType":"YulFunctionCall","src":"1347:35:201"},"nodeType":"YulIf","src":"1344:55:201"},{"expression":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1434:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"1438:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1430:3:201"},"nodeType":"YulFunctionCall","src":"1430:13:201"},{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1449:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1457:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1445:3:201"},"nodeType":"YulFunctionCall","src":"1445:17:201"},{"name":"_3","nodeType":"YulIdentifier","src":"1464:2:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"1408:21:201"},"nodeType":"YulFunctionCall","src":"1408:59:201"},"nodeType":"YulExpressionStatement","src":"1408:59:201"},{"nodeType":"YulAssignment","src":"1476:16:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1486:6:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1476:6:201"}]},{"nodeType":"YulAssignment","src":"1501:61:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1545:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1556:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1541:3:201"},"nodeType":"YulFunctionCall","src":"1541:20:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"1511:29:201"},"nodeType":"YulFunctionCall","src":"1511:51:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1501:6:201"}]}]},"name":"abi_decode_tuple_t_string_memory_ptrt_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"657:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"668:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"680:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"688:6:201","type":""}],"src":"591:977:201"},{"body":{"nodeType":"YulBlock","src":"1628:325:201","statements":[{"nodeType":"YulAssignment","src":"1638:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1652:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"1655:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1648:3:201"},"nodeType":"YulFunctionCall","src":"1648:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"1638:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1669:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"1699:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"1705:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1695:3:201"},"nodeType":"YulFunctionCall","src":"1695:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"1673:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1746:31:201","statements":[{"nodeType":"YulAssignment","src":"1748:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1762:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1770:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1758:3:201"},"nodeType":"YulFunctionCall","src":"1758:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"1748:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"1726:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1719:6:201"},"nodeType":"YulFunctionCall","src":"1719:26:201"},"nodeType":"YulIf","src":"1716:61:201"},{"body":{"nodeType":"YulBlock","src":"1836:111:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1857:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1864:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1869:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1860:3:201"},"nodeType":"YulFunctionCall","src":"1860:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1850:6:201"},"nodeType":"YulFunctionCall","src":"1850:31:201"},"nodeType":"YulExpressionStatement","src":"1850:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1901:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1904:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1894:6:201"},"nodeType":"YulFunctionCall","src":"1894:15:201"},"nodeType":"YulExpressionStatement","src":"1894:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1929:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1932:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1922:6:201"},"nodeType":"YulFunctionCall","src":"1922:15:201"},"nodeType":"YulExpressionStatement","src":"1922:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"1792:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1815:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1823:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1812:2:201"},"nodeType":"YulFunctionCall","src":"1812:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1789:2:201"},"nodeType":"YulFunctionCall","src":"1789:38:201"},"nodeType":"YulIf","src":"1786:161:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"1608:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"1617:6:201","type":""}],"src":"1573:380:201"},{"body":{"nodeType":"YulBlock","src":"2097:137:201","statements":[{"nodeType":"YulVariableDeclaration","src":"2107:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2127:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2121:5:201"},"nodeType":"YulFunctionCall","src":"2121:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2111:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2169:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2177:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2165:3:201"},"nodeType":"YulFunctionCall","src":"2165:17:201"},{"name":"pos","nodeType":"YulIdentifier","src":"2184:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"2189:6:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"2143:21:201"},"nodeType":"YulFunctionCall","src":"2143:53:201"},"nodeType":"YulExpressionStatement","src":"2143:53:201"},{"nodeType":"YulAssignment","src":"2205:23:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2216:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"2221:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2212:3:201"},"nodeType":"YulFunctionCall","src":"2212:16:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"2205:3:201"}]}]},"name":"abi_encode_tuple_packed_t_string_memory_ptr__to_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"2073:3:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2078:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"2089:3:201","type":""}],"src":"1958:276:201"},{"body":{"nodeType":"YulBlock","src":"2413:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2430:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2441:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2423:6:201"},"nodeType":"YulFunctionCall","src":"2423:21:201"},"nodeType":"YulExpressionStatement","src":"2423:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2464:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2475:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2460:3:201"},"nodeType":"YulFunctionCall","src":"2460:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2480:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2453:6:201"},"nodeType":"YulFunctionCall","src":"2453:30:201"},"nodeType":"YulExpressionStatement","src":"2453:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2503:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2514:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2499:3:201"},"nodeType":"YulFunctionCall","src":"2499:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"2519:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2492:6:201"},"nodeType":"YulFunctionCall","src":"2492:62:201"},"nodeType":"YulExpressionStatement","src":"2492:62:201"},{"nodeType":"YulAssignment","src":"2563:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2575:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2586:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2571:3:201"},"nodeType":"YulFunctionCall","src":"2571:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2563:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2390:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2404:4:201","type":""}],"src":"2239:356:201"},{"body":{"nodeType":"YulBlock","src":"2774:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2791:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2802:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2784:6:201"},"nodeType":"YulFunctionCall","src":"2784:21:201"},"nodeType":"YulExpressionStatement","src":"2784:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2825:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2836:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2821:3:201"},"nodeType":"YulFunctionCall","src":"2821:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2841:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2814:6:201"},"nodeType":"YulFunctionCall","src":"2814:30:201"},"nodeType":"YulExpressionStatement","src":"2814:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2864:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2875:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2860:3:201"},"nodeType":"YulFunctionCall","src":"2860:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"2880:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2853:6:201"},"nodeType":"YulFunctionCall","src":"2853:62:201"},"nodeType":"YulExpressionStatement","src":"2853:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2935:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2946:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2931:3:201"},"nodeType":"YulFunctionCall","src":"2931:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"2951:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2924:6:201"},"nodeType":"YulFunctionCall","src":"2924:36:201"},"nodeType":"YulExpressionStatement","src":"2924:36:201"},{"nodeType":"YulAssignment","src":"2969:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2981:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2992:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2977:3:201"},"nodeType":"YulFunctionCall","src":"2977:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2969:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2751:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2765:4:201","type":""}],"src":"2600:402:201"}]},"contents":"{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_string_memory_ptrt_address_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := mload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 0x20), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory(add(_2, 0x20), add(memPtr, 0x20), _3)\n        value0 := memPtr\n        value1 := abi_decode_address_fromMemory(add(headStart, 0x20))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_packed_t_string_memory_ptr__to_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60806040523480156200001157600080fd5b5060405162002b3538038062002b358339810160408190526200003491620003aa565b600080546001600160a01b0319163390811782556040519091829160008051602062002b15833981519152908290a3506200006f8262000082565b6200007a816200018d565b5050620004d2565b600060018054620000939062000477565b80601f0160208091040260200160405190810160405280929190818152602001828054620000c19062000477565b8015620001125780601f10620000e65761010080835404028352916020019162000112565b820191906000526020600020905b815481529060010190602001808311620000f457829003601f168201915b5050855193945062000130936001935060208701925090506200029e565b5081604051620001419190620004b4565b604051809103902081604051620001599190620004b4565b604051908190038120907fe685c8cdecc6030c45030fd54778812cb84ed8e4467c38294403d68ba786082390600090a35050565b6000546001600160a01b03163314620001ed5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b038116620002545760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620001e4565b600080546040516001600160a01b038085169392169160008051602062002b1583398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b828054620002ac9062000477565b90600052602060002090601f016020900481019282620002d057600085556200031b565b82601f10620002eb57805160ff19168380011785556200031b565b828001600101855582156200031b579182015b828111156200031b578251825591602001919060010190620002fe565b50620003299291506200032d565b5090565b5b808211156200032957600081556001016200032e565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003775781810151838201526020016200035d565b8381111562000387576000848401525b50505050565b80516001600160a01b0381168114620003a557600080fd5b919050565b60008060408385031215620003be57600080fd5b82516001600160401b0380821115620003d657600080fd5b818501915085601f830112620003eb57600080fd5b81518181111562000400576200040062000344565b604051601f8201601f19908116603f011681019083821181831017156200042b576200042b62000344565b816040528281528860208487010111156200044557600080fd5b620004588360208301602088016200035a565b80965050505050506200046e602084016200038d565b90509250929050565b600181811c908216806200048c57607f821691505b60208210811415620004ae57634e487b7160e01b600052602260045260246000fd5b50919050565b60008251620004c88184602087016200035a565b9190910192915050565b61263380620004e26000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c806376d84ffc116100d8578063e4ca28b71161008c578063f2fde38b11610066578063f2fde38b1461052f578063f67b184714610542578063fca513a81461055557600080fd5b8063e4ca28b7146104a3578063e860accb146104b6578063ed301ca91461051c57600080fd5b8063a1564406116100bd578063a15644061461046a578063ca446dd91461047d578063e44e9ed11461049057600080fd5b806376d84ffc146104395780638da5cb5b1461044c57600080fd5b80635dcc528c1161013a578063707cd71611610114578063707cd716146103b8578063715018a61461041e57806374944cec1461042657600080fd5b80635dcc528c146102d95780635eb88d3d146102ec578063631adfca1461035257600080fd5b806321f8a7211161016b57806321f8a72114610279578063530e784f146102af578063568ef470146102c457600080fd5b8063026b1d5f146101875780630e67178c14610213575b600080fd5b7f504f4f4c0000000000000000000000000000000000000000000000000000000060005260026020527f4fe005067814bb4b024d9515847377d15011b64593c006223b4a722952d2c05a5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b7f41434c5f41444d494e000000000000000000000000000000000000000000000060005260026020527ffab167ad2009dcb80ee379700bb4bd029d97c1181ed9d961625632c8a6f051c65473ffffffffffffffffffffffffffffffffffffffff166101e9565b6101e9610287366004611962565b60009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6102c26102bd36600461199d565b6105bb565b005b6102cc6106ff565b60405161020a9190611a3b565b6102c26102e7366004611a4e565b610791565b7f50524943455f4f5241434c455f53454e54494e454c000000000000000000000060005260026020527f0d2c1bcee56447b4f46248272f34207a580a5c40f666a31f4e2fbb470ea53ab85473ffffffffffffffffffffffffffffffffffffffff166101e9565b7f504f4f4c5f434f4e464947555241544f5200000000000000000000000000000060005260026020527f90c127ef1c12c03f5781afeca3079527ea5333738078bba6fea26825bf9bf2c55473ffffffffffffffffffffffffffffffffffffffff166101e9565b7f41434c5f4d414e4147455200000000000000000000000000000000000000000060005260026020527f9edef266ef35fd0c6e131df0f31a330f3dd4c4d19dd31ed615c21d005c68116b5473ffffffffffffffffffffffffffffffffffffffff166101e9565b6102c26108a7565b6102c261043436600461199d565b610997565b6102c261044736600461199d565b610ad6565b60005473ffffffffffffffffffffffffffffffffffffffff166101e9565b6102c261047836600461199d565b610c15565b6102c261048b366004611a4e565b610d4b565b6102c261049e36600461199d565b610e4f565b6102c26104b136600461199d565b610f8e565b7f444154415f50524f56494445520000000000000000000000000000000000000060005260026020527fcd7944601aaa5cd7ccdae1bebec659e98c6aac8f12486b30e59db0d39698051f5473ffffffffffffffffffffffffffffffffffffffff166101e9565b6102c261052a36600461199d565b6110c4565b6102c261053d36600461199d565b611203565b6102c2610550366004611aad565b6113b4565b7f50524943455f4f5241434c45000000000000000000000000000000000000000060005260026020527f740f710666bd7a12af42df98311e541e47f7fd33d382d11602457a6d540cbd635473ffffffffffffffffffffffffffffffffffffffff166101e9565b60005473ffffffffffffffffffffffffffffffffffffffff163314610641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b7f50524943455f4f5241434c450000000000000000000000000000000000000000600090815260026020527f740f710666bd7a12af42df98311e541e47f7fd33d382d11602457a6d540cbd63805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169283917f56b5f80d8cac1479698aa7d01605fd6111e90b15fc4d2b377417f46034876cbd9190a35050565b60606001805461070e90611b7c565b80601f016020809104026020016040519081016040528092919081815260200182805461073a90611b7c565b80156107875780601f1061075c57610100808354040283529160200191610787565b820191906000526020600020905b81548152906001019060200180831161076a57829003601f168201915b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b60008281526002602052604081205473ffffffffffffffffffffffffffffffffffffffff169061084184611441565b905061084d84846114f8565b60405173ffffffffffffffffffffffffffffffffffffffff8281168252808516919084169086907f3bbd45b5429b385e3fb37ad5cd1cd1435a3c8ec32196c7937597365a3fd3e99c9060200160405180910390a450505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b7f50524943455f4f5241434c455f53454e54494e454c0000000000000000000000600090815260026020527f0d2c1bcee56447b4f46248272f34207a580a5c40f666a31f4e2fbb470ea53ab8805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169283917f5326514eeca90494a14bedabcff812a0e683029ee85d1e23824d44fd14cd6ae79190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b7f41434c5f41444d494e0000000000000000000000000000000000000000000000600090815260026020527ffab167ad2009dcb80ee379700bb4bd029d97c1181ed9d961625632c8a6f051c6805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169283917fe9cf53972264dc95304fd424458745019ddfca0e37ae8f703d74772c41ad115b9190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b6000610cc17f504f4f4c00000000000000000000000000000000000000000000000000000000611441565b9050610ced7f504f4f4c00000000000000000000000000000000000000000000000000000000836114f8565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90affc163f1a2dfedcd36aa02ed992eeeba8100a4014f0b4cdc20ea265a6662760405160405180910390a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b60008281526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff8681169182179093559251911692839186917f9ef0e8c8e52743bb38b83b17d9429141d494b8041ca6d616a6c77cebae9cd8b791a4505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ed0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b7f444154415f50524f564944455200000000000000000000000000000000000000600090815260026020527fcd7944601aaa5cd7ccdae1bebec659e98c6aac8f12486b30e59db0d39698051f805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169283917fc853974cfbf81487a14a23565917bee63f527853bcb5fa54f2ae1cdf8a38356d9190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461100f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b600061103a7f504f4f4c5f434f4e464947555241544f52000000000000000000000000000000611441565b90506110667f504f4f4c5f434f4e464947555241544f52000000000000000000000000000000836114f8565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8932892569eba59c8382a089d9b732d1f49272878775235761a2a6b0309cd46560405160405180910390a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b7f41434c5f4d414e41474552000000000000000000000000000000000000000000600090815260026020527f9edef266ef35fd0c6e131df0f31a330f3dd4c4d19dd31ed615c21d005c68116b805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169283917fb30efa04327bb8a537d61cc1e5c48095345ad18ef7cc04e6bacf7dfb6caaf5079190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b73ffffffffffffffffffffffffffffffffffffffff8116611327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610638565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314611435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b61143e816117bf565b50565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16806114745750600092915050565b60008190508073ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156114c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ea9190611bca565b949350505050565b50919050565b60008281526002602052604080822054905130602482015273ffffffffffffffffffffffffffffffffffffffff90911691908190604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052905073ffffffffffffffffffffffffffffffffffffffff831661172e57306040516115cf906118bc565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015611608573d6000803e3d6000fd5b506000868152600260205260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915590517fd1f578940000000000000000000000000000000000000000000000000000000081529194508493509063d1f578949061169c9087908590600401611be7565b600060405180830381600087803b1580156116b657600080fd5b505af11580156116ca573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16867f4a465a9bd819d9662563c1e11ae958f8109e437e7f4bf1c6ef0b9a7b3f35d47860405160405180910390a46117b8565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815283925073ffffffffffffffffffffffffffffffffffffffff831690634f1ef286906117859087908590600401611be7565b600060405180830381600087803b15801561179f57600080fd5b505af11580156117b3573d6000803e3d6000fd5b505050505b5050505050565b6000600180546117ce90611b7c565b80601f01602080910402602001604051908101604052809291908181526020018280546117fa90611b7c565b80156118475780601f1061181c57610100808354040283529160200191611847565b820191906000526020600020905b81548152906001019060200180831161182a57829003601f168201915b50508551939450611863936001935060208701925090506118c9565b50816040516118729190611c16565b6040518091039020816040516118889190611c16565b604051908190038120907fe685c8cdecc6030c45030fd54778812cb84ed8e4467c38294403d68ba786082390600090a35050565b6109cb80611c3383390190565b8280546118d590611b7c565b90600052602060002090601f0160209004810192826118f7576000855561193d565b82601f1061191057805160ff191683800117855561193d565b8280016001018555821561193d579182015b8281111561193d578251825591602001919060010190611922565b5061194992915061194d565b5090565b5b80821115611949576000815560010161194e565b60006020828403121561197457600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461143e57600080fd5b6000602082840312156119af57600080fd5b81356119ba8161197b565b9392505050565b60005b838110156119dc5781810151838201526020016119c4565b838111156119eb576000848401525b50505050565b60008151808452611a098160208601602086016119c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006119ba60208301846119f1565b60008060408385031215611a6157600080fd5b823591506020830135611a738161197b565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215611abf57600080fd5b813567ffffffffffffffff80821115611ad757600080fd5b818401915084601f830112611aeb57600080fd5b813581811115611afd57611afd611a7e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611b4357611b43611a7e565b81604052828152876020848701011115611b5c57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600181811c90821680611b9057607f821691505b602082108114156114f2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215611bdc57600080fd5b81516119ba8161197b565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006114ea60408301846119f1565b60008251611c288184602087016119c1565b919091019291505056fe60a060405234801561001057600080fd5b506040516109cb3803806109cb83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b60805161091d6100ae6000396000818161014f015281816101a101528181610274015281816104110152818161043a01526105a4015261091d6000f3fe60806040526004361061005a5760003560e01c80635c60da1b116100435780635c60da1b14610097578063d1f57894146100d5578063f851a440146100e85761005a565b80633659cfe6146100645780634f1ef28614610084575b6100626100fd565b005b34801561007057600080fd5b5061006261007f36600461067b565b610137565b61006261009236600461069d565b610189565b3480156100a357600080fd5b506100ac61025a565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100626100e336600461074f565b6102cb565b3480156100f457600080fd5b506100ac6103f7565b61010561045c565b6101356101307f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b610464565b565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156101815761017e81610488565b50565b61017e6100fd565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561024d576101d083610488565b60008373ffffffffffffffffffffffffffffffffffffffff1683836040516101f992919061082f565b600060405180830381855af49150503d8060008114610234576040519150601f19603f3d011682016040523d82523d6000602084013e610239565b606091505b505090508061024757600080fd5b50505050565b6102556100fd565b505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102c057507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6102c86100fd565b90565b60006102f57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff161461031557600080fd5b61034060017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61083f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc1461036e5761036e61087d565b610377826104d5565b8051156103f35760008273ffffffffffffffffffffffffffffffffffffffff16826040516103a591906108ac565b600060405180830381855af49150503d80600081146103e0576040519150601f19603f3d011682016040523d82523d6000602084013e6103e5565b606091505b505090508061025557600080fd5b5050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102c057507f000000000000000000000000000000000000000000000000000000000000000090565b61013561058c565b3660008037600080366000845af43d6000803e808015610483573d6000f35b3d6000fd5b610491816104d5565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b803b610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161415610135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e0000000000000000000000000000606482015260840161055f565b803573ffffffffffffffffffffffffffffffffffffffff8116811461067657600080fd5b919050565b60006020828403121561068d57600080fd5b61069682610652565b9392505050565b6000806000604084860312156106b257600080fd5b6106bb84610652565b9250602084013567ffffffffffffffff808211156106d857600080fd5b818601915086601f8301126106ec57600080fd5b8135818111156106fb57600080fd5b87602082850101111561070d57600080fd5b6020830194508093505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561076257600080fd5b61076b83610652565b9150602083013567ffffffffffffffff8082111561078857600080fd5b818501915085601f83011261079c57600080fd5b8135818111156107ae576107ae610720565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156107f4576107f4610720565b8160405282815288602084870101111561080d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b8183823760009101908152919050565b600082821015610878577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b818110156108cd57602081860181015185830152016108b3565b818111156108dc576000828501525b50919091019291505056fea2646970667358221220f9157fc154ba5797dbf9f1c996264175793cc650e7132a50aacd715276ed42a364736f6c634300080a0033a2646970667358221220c6335c01a38ba20458c98da1c7e3997542f7e503f5508d634fe6b862cb680fc464736f6c634300080a00338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2B35 CODESIZE SUB DUP1 PUSH3 0x2B35 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x3AA JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 DUP3 SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x2B15 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 DUP3 SWAP1 LOG3 POP PUSH3 0x6F DUP3 PUSH3 0x82 JUMP JUMPDEST PUSH3 0x7A DUP2 PUSH3 0x18D JUMP JUMPDEST POP POP PUSH3 0x4D2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 SLOAD PUSH3 0x93 SWAP1 PUSH3 0x477 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH3 0xC1 SWAP1 PUSH3 0x477 JUMP JUMPDEST DUP1 ISZERO PUSH3 0x112 JUMPI DUP1 PUSH1 0x1F LT PUSH3 0xE6 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH3 0x112 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 PUSH3 0xF4 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP6 MLOAD SWAP4 SWAP5 POP PUSH3 0x130 SWAP4 PUSH1 0x1 SWAP4 POP PUSH1 0x20 DUP8 ADD SWAP3 POP SWAP1 POP PUSH3 0x29E JUMP JUMPDEST POP DUP2 PUSH1 0x40 MLOAD PUSH3 0x141 SWAP2 SWAP1 PUSH3 0x4B4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP2 PUSH1 0x40 MLOAD PUSH3 0x159 SWAP2 SWAP1 PUSH3 0x4B4 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB DUP2 KECCAK256 SWAP1 PUSH32 0xE685C8CDECC6030C45030FD54778812CB84ED8E4467C38294403D68BA7860823 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH3 0x1ED JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x254 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x1E4 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x2B15 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 LOG3 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 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x2AC SWAP1 PUSH3 0x477 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x2D0 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x31B JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x2EB JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x31B JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x31B JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x31B JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x2FE JUMP JUMPDEST POP PUSH3 0x329 SWAP3 SWAP2 POP PUSH3 0x32D JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x329 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x32E JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x377 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x35D JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x387 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x3A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x3BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x3D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x3EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH3 0x400 JUMPI PUSH3 0x400 PUSH3 0x344 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x42B JUMPI PUSH3 0x42B PUSH3 0x344 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH3 0x445 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x458 DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH3 0x35A JUMP JUMPDEST DUP1 SWAP7 POP POP POP POP POP POP PUSH3 0x46E PUSH1 0x20 DUP5 ADD PUSH3 0x38D JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x48C JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x4AE JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH3 0x4C8 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH3 0x35A JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2633 DUP1 PUSH3 0x4E2 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 0x182 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x76D84FFC GT PUSH2 0xD8 JUMPI DUP1 PUSH4 0xE4CA28B7 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xF2FDE38B GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x52F JUMPI DUP1 PUSH4 0xF67B1847 EQ PUSH2 0x542 JUMPI DUP1 PUSH4 0xFCA513A8 EQ PUSH2 0x555 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE4CA28B7 EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0xE860ACCB EQ PUSH2 0x4B6 JUMPI DUP1 PUSH4 0xED301CA9 EQ PUSH2 0x51C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA1564406 GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xA1564406 EQ PUSH2 0x46A JUMPI DUP1 PUSH4 0xCA446DD9 EQ PUSH2 0x47D JUMPI DUP1 PUSH4 0xE44E9ED1 EQ PUSH2 0x490 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x76D84FFC EQ PUSH2 0x439 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x44C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5DCC528C GT PUSH2 0x13A JUMPI DUP1 PUSH4 0x707CD716 GT PUSH2 0x114 JUMPI DUP1 PUSH4 0x707CD716 EQ PUSH2 0x3B8 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x41E JUMPI DUP1 PUSH4 0x74944CEC EQ PUSH2 0x426 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5DCC528C EQ PUSH2 0x2D9 JUMPI DUP1 PUSH4 0x5EB88D3D EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0x631ADFCA EQ PUSH2 0x352 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x21F8A721 GT PUSH2 0x16B JUMPI DUP1 PUSH4 0x21F8A721 EQ PUSH2 0x279 JUMPI DUP1 PUSH4 0x530E784F EQ PUSH2 0x2AF JUMPI DUP1 PUSH4 0x568EF470 EQ PUSH2 0x2C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x26B1D5F EQ PUSH2 0x187 JUMPI DUP1 PUSH4 0xE67178C EQ PUSH2 0x213 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x504F4F4C00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x4FE005067814BB4B024D9515847377D15011B64593C006223B4A722952D2C05A SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH32 0x41434C5F41444D494E0000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xFAB167AD2009DCB80EE379700BB4BD029D97C1181ED9D961625632C8A6F051C6 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH2 0x1E9 PUSH2 0x287 CALLDATASIZE PUSH1 0x4 PUSH2 0x1962 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x2BD CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0x5BB JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2CC PUSH2 0x6FF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x20A SWAP2 SWAP1 PUSH2 0x1A3B JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x2E7 CALLDATASIZE PUSH1 0x4 PUSH2 0x1A4E JUMP JUMPDEST PUSH2 0x791 JUMP JUMPDEST PUSH32 0x50524943455F4F5241434C455F53454E54494E454C0000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xD2C1BCEE56447B4F46248272F34207A580A5C40F666A31F4E2FBB470EA53AB8 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH32 0x504F4F4C5F434F4E464947555241544F52000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x90C127EF1C12C03F5781AFECA3079527EA5333738078BBA6FEA26825BF9BF2C5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH32 0x41434C5F4D414E41474552000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x9EDEF266EF35FD0C6E131DF0F31A330F3DD4C4D19DD31ED615C21D005C68116B SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x8A7 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x434 CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0x997 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x447 CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0xAD6 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x478 CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0xC15 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x48B CALLDATASIZE PUSH1 0x4 PUSH2 0x1A4E JUMP JUMPDEST PUSH2 0xD4B JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x49E CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0xE4F JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x4B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0xF8E JUMP JUMPDEST PUSH32 0x444154415F50524F564944455200000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xCD7944601AAA5CD7CCDAE1BEBEC659E98C6AAC8F12486B30E59DB0D39698051F SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x52A CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0x10C4 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x53D CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0x1203 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x550 CALLDATASIZE PUSH1 0x4 PUSH2 0x1AAD JUMP JUMPDEST PUSH2 0x13B4 JUMP JUMPDEST PUSH32 0x50524943455F4F5241434C450000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x740F710666BD7A12AF42DF98311E541E47F7FD33D382D11602457A6D540CBD63 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x641 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x50524943455F4F5241434C450000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x740F710666BD7A12AF42DF98311E541E47F7FD33D382D11602457A6D540CBD63 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP3 DUP4 SWAP2 PUSH32 0x56B5F80D8CAC1479698AA7D01605FD6111E90B15FC4D2B377417F46034876CBD SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 DUP1 SLOAD PUSH2 0x70E SWAP1 PUSH2 0x1B7C JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x73A SWAP1 PUSH2 0x1B7C JUMP JUMPDEST DUP1 ISZERO PUSH2 0x787 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x75C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x787 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 0x76A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x812 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0x841 DUP5 PUSH2 0x1441 JUMP JUMPDEST SWAP1 POP PUSH2 0x84D DUP5 DUP5 PUSH2 0x14F8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND DUP3 MSTORE DUP1 DUP6 AND SWAP2 SWAP1 DUP5 AND SWAP1 DUP7 SWAP1 PUSH32 0x3BBD45B5429B385E3FB37AD5CD1CD1435A3C8EC32196C7937597365A3FD3E99C SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x928 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xA18 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH32 0x50524943455F4F5241434C455F53454E54494E454C0000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xD2C1BCEE56447B4F46248272F34207A580A5C40F666A31F4E2FBB470EA53AB8 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP3 DUP4 SWAP2 PUSH32 0x5326514EECA90494A14BEDABCFF812A0E683029EE85D1E23824D44FD14CD6AE7 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xB57 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH32 0x41434C5F41444D494E0000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xFAB167AD2009DCB80EE379700BB4BD029D97C1181ED9D961625632C8A6F051C6 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP3 DUP4 SWAP2 PUSH32 0xE9CF53972264DC95304FD424458745019DDFCA0E37AE8F703D74772C41AD115B SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xC96 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 PUSH32 0x504F4F4C00000000000000000000000000000000000000000000000000000000 PUSH2 0x1441 JUMP JUMPDEST SWAP1 POP PUSH2 0xCED PUSH32 0x504F4F4C00000000000000000000000000000000000000000000000000000000 DUP4 PUSH2 0x14F8 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x90AFFC163F1A2DFEDCD36AA02ED992EEEBA8100A4014F0B4CDC20EA265A66627 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xDCC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP4 SSTORE SWAP3 MLOAD SWAP2 AND SWAP3 DUP4 SWAP2 DUP7 SWAP2 PUSH32 0x9EF0E8C8E52743BB38B83B17D9429141D494B8041CA6D616A6C77CEBAE9CD8B7 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xED0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH32 0x444154415F50524F564944455200000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xCD7944601AAA5CD7CCDAE1BEBEC659E98C6AAC8F12486B30E59DB0D39698051F DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP3 DUP4 SWAP2 PUSH32 0xC853974CFBF81487A14A23565917BEE63F527853BCB5FA54F2AE1CDF8A38356D SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x100F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x103A PUSH32 0x504F4F4C5F434F4E464947555241544F52000000000000000000000000000000 PUSH2 0x1441 JUMP JUMPDEST SWAP1 POP PUSH2 0x1066 PUSH32 0x504F4F4C5F434F4E464947555241544F52000000000000000000000000000000 DUP4 PUSH2 0x14F8 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8932892569EBA59C8382A089D9B732D1F49272878775235761A2A6B0309CD465 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1145 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH32 0x41434C5F4D414E41474552000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x9EDEF266EF35FD0C6E131DF0F31A330F3DD4C4D19DD31ED615C21D005C68116B DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP3 DUP4 SWAP2 PUSH32 0xB30EFA04327BB8A537D61CC1E5C48095345AD18EF7CC04E6BACF7DFB6CAAF507 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1284 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x1327 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x638 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1435 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH2 0x143E DUP2 PUSH2 0x17BF JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 PUSH2 0x1474 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5C60DA1B 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 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x14C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14EA SWAP2 SWAP1 PUSH2 0x1BCA JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SLOAD SWAP1 MLOAD ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 SWAP1 DUP2 SWAP1 PUSH1 0x44 ADD 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 0xC4D66DE800000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x172E JUMPI ADDRESS PUSH1 0x40 MLOAD PUSH2 0x15CF SWAP1 PUSH2 0x18BC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x1608 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD PUSH32 0xD1F5789400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP5 POP DUP5 SWAP4 POP SWAP1 PUSH4 0xD1F57894 SWAP1 PUSH2 0x169C SWAP1 DUP8 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x1BE7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH32 0x4A465A9BD819D9662563C1E11AE958F8109E437E7F4BF1C6EF0B9A7B3F35D478 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH2 0x17B8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4F1EF28600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP4 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 PUSH4 0x4F1EF286 SWAP1 PUSH2 0x1785 SWAP1 DUP8 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x1BE7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x179F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x17B3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 SLOAD PUSH2 0x17CE SWAP1 PUSH2 0x1B7C JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x17FA SWAP1 PUSH2 0x1B7C JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1847 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x181C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1847 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 0x182A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP6 MLOAD SWAP4 SWAP5 POP PUSH2 0x1863 SWAP4 PUSH1 0x1 SWAP4 POP PUSH1 0x20 DUP8 ADD SWAP3 POP SWAP1 POP PUSH2 0x18C9 JUMP JUMPDEST POP DUP2 PUSH1 0x40 MLOAD PUSH2 0x1872 SWAP2 SWAP1 PUSH2 0x1C16 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP2 PUSH1 0x40 MLOAD PUSH2 0x1888 SWAP2 SWAP1 PUSH2 0x1C16 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB DUP2 KECCAK256 SWAP1 PUSH32 0xE685C8CDECC6030C45030FD54778812CB84ED8E4467C38294403D68BA7860823 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x9CB DUP1 PUSH2 0x1C33 DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x18D5 SWAP1 PUSH2 0x1B7C JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x18F7 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x193D JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x1910 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x193D JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x193D JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x193D JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1922 JUMP JUMPDEST POP PUSH2 0x1949 SWAP3 SWAP2 POP PUSH2 0x194D JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1949 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x194E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1974 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x143E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x19AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x19BA DUP2 PUSH2 0x197B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x19DC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x19C4 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x19EB JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1A09 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x19C1 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x19BA PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x19F1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1A61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1A73 DUP2 PUSH2 0x197B JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1ABF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1AD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1AEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x1AFD JUMPI PUSH2 0x1AFD PUSH2 0x1A7E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x1B43 JUMPI PUSH2 0x1B43 PUSH2 0x1A7E JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP8 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x1B5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP3 DUP2 ADD PUSH1 0x20 ADD SWAP3 SWAP1 SWAP3 MSTORE POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x1B90 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x14F2 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1BDC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x19BA DUP2 PUSH2 0x197B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x14EA PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x19F1 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x1C28 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x19C1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x9CB CODESIZE SUB DUP1 PUSH2 0x9CB DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH2 0x70 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x91D PUSH2 0xAE PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x14F ADD MSTORE DUP2 DUP2 PUSH2 0x1A1 ADD MSTORE DUP2 DUP2 PUSH2 0x274 ADD MSTORE DUP2 DUP2 PUSH2 0x411 ADD MSTORE DUP2 DUP2 PUSH2 0x43A ADD MSTORE PUSH2 0x5A4 ADD MSTORE PUSH2 0x91D PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0xD1F57894 EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xE8 JUMPI PUSH2 0x5A JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x84 JUMPI JUMPDEST PUSH2 0x62 PUSH2 0xFD JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x62 PUSH2 0x7F CALLDATASIZE PUSH1 0x4 PUSH2 0x67B JUMP JUMPDEST PUSH2 0x137 JUMP JUMPDEST PUSH2 0x62 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x69D JUMP JUMPDEST PUSH2 0x189 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x25A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x62 PUSH2 0xE3 CALLDATASIZE PUSH1 0x4 PUSH2 0x74F JUMP JUMPDEST PUSH2 0x2CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x3F7 JUMP JUMPDEST PUSH2 0x105 PUSH2 0x45C JUMP JUMPDEST PUSH2 0x135 PUSH2 0x130 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x464 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x181 JUMPI PUSH2 0x17E DUP2 PUSH2 0x488 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x17E PUSH2 0xFD JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x24D JUMPI PUSH2 0x1D0 DUP4 PUSH2 0x488 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1F9 SWAP3 SWAP2 SWAP1 PUSH2 0x82F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x234 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 0x239 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x247 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x255 PUSH2 0xFD JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x2C0 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0xFD JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F5 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x315 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x340 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0x83F JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC EQ PUSH2 0x36E JUMPI PUSH2 0x36E PUSH2 0x87D JUMP JUMPDEST PUSH2 0x377 DUP3 PUSH2 0x4D5 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x3F3 JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x3A5 SWAP2 SWAP1 PUSH2 0x8AC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3E0 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 0x3E5 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x2C0 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x135 PUSH2 0x58C JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x483 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x491 DUP2 PUSH2 0x4D5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x568 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x135 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x55F JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x676 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x68D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x696 DUP3 PUSH2 0x652 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x6B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6BB DUP5 PUSH2 0x652 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x6D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x6EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x6FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x762 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x76B DUP4 PUSH2 0x652 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x788 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x79C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x7AE JUMPI PUSH2 0x7AE PUSH2 0x720 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x7F4 JUMPI PUSH2 0x7F4 PUSH2 0x720 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x80D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x878 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x8CD JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x8B3 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x8DC JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF9 ISZERO PUSH32 0xC154BA5797DBF9F1C996264175793CC650E7132A50AACD715276ED42A364736F PUSH13 0x634300080A0033A26469706673 PC 0x22 SLT KECCAK256 0xC6 CALLER 0x5C ADD LOG3 DUP12 LOG2 DIV PC 0xC9 DUP14 LOG1 0xC7 0xE3 SWAP10 PUSH22 0x42F7E503F5508D634FE6B862CB680FC464736F6C6343 STOP ADDMOD EXP STOP CALLER DUP12 0xE0 SMOD SWAP13 MSTORE8 AND MSIZE EQ SGT DIFFICULTY 0xCD 0x1F 0xD0 LOG4 CALLCODE DUP5 NOT 0x49 PUSH32 0x9722A3DAAFE3B4186F6B6457E000000000000000000000000000000000000000 ","sourceMap":"672:7625:67:-:0;;;1499:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;835:17:11;873:18;;-1:-1:-1;;;;;;873:18:11;678:10:4;873:18:11;;;;;902:43;;678:10:4;;;;-1:-1:-1;;;;;;;;;;;902:43:11;835:17;;902:43;-1:-1:-1;1556:22:67;1569:8;1556:12;:22::i;:::-;1584:24;1602:5;1584:17;:24::i;:::-;1499:114;;672:7625;;7357:183;7421:25;7449:9;7421:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7464:23:67;;7421:37;;-1:-1:-1;7464:23:67;;:9;;-1:-1:-1;7464:23:67;;;;-1:-1:-1;7464:23:67;-1:-1:-1;7464:23:67;:::i;:::-;;7523:11;7498:37;;;;;;:::i;:::-;;;;;;;;7510:11;7498:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;7415:125;7357:183;:::o;1875:226:11:-;1204:6;;-1:-1:-1;;;;;1204:6:11;678:10:4;1204:22:11;1196:67;;;;-1:-1:-1;;;1196:67:11;;2441:2:201;1196:67:11;;;2423:21:201;;;2460:18;;;2453:30;2519:34;2499:18;;;2492:62;2571:18;;1196:67:11;;;;;;;;;-1:-1:-1;;;;;1959:22:11;::::1;1951:73;;;::::0;-1:-1:-1;;;1951:73:11;;2802:2:201;1951:73:11::1;::::0;::::1;2784:21:201::0;2841:2;2821:18;;;2814:30;2880:34;2860:18;;;2853:62;-1:-1:-1;;;2931:18:201;;;2924:36;2977:19;;1951:73:11::1;2600:402:201::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;-1:-1:-1;;;;;2035:38:11;;::::1;::::0;2056:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;2035:38:11;::::1;2079:6;:17:::0;;-1:-1:-1;;;;;;2079:17:11::1;-1:-1:-1::0;;;;;2079:17:11;;;::::1;::::0;;;::::1;::::0;;1875:226::o;672:7625:67:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;672:7625:67;;;-1:-1:-1;672:7625:67;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:127:201;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:258;218:1;228:113;242:6;239:1;236:13;228:113;;;318:11;;;312:18;299:11;;;292:39;264:2;257:10;228:113;;;359:6;356:1;353:13;350:48;;;394:1;385:6;380:3;376:16;369:27;350:48;;146:258;;;:::o;409:177::-;488:13;;-1:-1:-1;;;;;530:31:201;;520:42;;510:70;;576:1;573;566:12;510:70;409:177;;;:::o;591:977::-;680:6;688;741:2;729:9;720:7;716:23;712:32;709:52;;;757:1;754;747:12;709:52;784:16;;-1:-1:-1;;;;;849:14:201;;;846:34;;;876:1;873;866:12;846:34;914:6;903:9;899:22;889:32;;959:7;952:4;948:2;944:13;940:27;930:55;;981:1;978;971:12;930:55;1010:2;1004:9;1032:2;1028;1025:10;1022:36;;;1038:18;;:::i;:::-;1113:2;1107:9;1081:2;1167:13;;-1:-1:-1;;1163:22:201;;;1187:2;1159:31;1155:40;1143:53;;;1211:18;;;1231:22;;;1208:46;1205:72;;;1257:18;;:::i;:::-;1297:10;1293:2;1286:22;1332:2;1324:6;1317:18;1374:7;1367:4;1362:2;1358;1354:11;1350:22;1347:35;1344:55;;;1395:1;1392;1385:12;1344:55;1408:59;1464:2;1457:4;1449:6;1445:17;1438:4;1434:2;1430:13;1408:59;:::i;:::-;1486:6;1476:16;;;;;;;1511:51;1556:4;1545:9;1541:20;1511:51;:::i;:::-;1501:61;;591:977;;;;;:::o;1573:380::-;1652:1;1648:12;;;;1695;;;1716:61;;1770:4;1762:6;1758:17;1748:27;;1716:61;1823:2;1815:6;1812:14;1792:18;1789:38;1786:161;;;1869:10;1864:3;1860:20;1857:1;1850:31;1904:4;1901:1;1894:15;1932:4;1929:1;1922:15;1786:161;;1573:380;;;:::o;1958:276::-;2089:3;2127:6;2121:13;2143:53;2189:6;2184:3;2177:4;2169:6;2165:17;2143:53;:::i;:::-;2212:16;;;;;1958:276;-1:-1:-1;;1958:276:201:o;2600:402::-;672:7625:67;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_getProxyImplementation_10071":{"entryPoint":5185,"id":10071,"parameterSlots":1,"returnSlots":1},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_setMarketId_10029":{"entryPoint":6079,"id":10029,"parameterSlots":1,"returnSlots":0},"@_updateImpl_10009":{"entryPoint":5368,"id":10009,"parameterSlots":2,"returnSlots":0},"@getACLAdmin_9814":{"entryPoint":null,"id":9814,"parameterSlots":0,"returnSlots":1},"@getACLManager_9775":{"entryPoint":null,"id":9775,"parameterSlots":0,"returnSlots":1},"@getAddress_9582":{"entryPoint":null,"id":9582,"parameterSlots":1,"returnSlots":1},"@getMarketId_9554":{"entryPoint":1791,"id":9554,"parameterSlots":0,"returnSlots":1},"@getPoolConfigurator_9698":{"entryPoint":null,"id":9698,"parameterSlots":0,"returnSlots":1},"@getPoolDataProvider_9892":{"entryPoint":null,"id":9892,"parameterSlots":0,"returnSlots":1},"@getPool_9660":{"entryPoint":null,"id":9660,"parameterSlots":0,"returnSlots":1},"@getPriceOracleSentinel_9853":{"entryPoint":null,"id":9853,"parameterSlots":0,"returnSlots":1},"@getPriceOracle_9736":{"entryPoint":null,"id":9736,"parameterSlots":0,"returnSlots":1},"@owner_1509":{"entryPoint":null,"id":1509,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_1544":{"entryPoint":2215,"id":1544,"parameterSlots":0,"returnSlots":0},"@setACLAdmin_9841":{"entryPoint":2774,"id":9841,"parameterSlots":1,"returnSlots":0},"@setACLManager_9802":{"entryPoint":4292,"id":9802,"parameterSlots":1,"returnSlots":0},"@setAddressAsProxy_9648":{"entryPoint":1937,"id":9648,"parameterSlots":2,"returnSlots":0},"@setAddress_9612":{"entryPoint":3403,"id":9612,"parameterSlots":2,"returnSlots":0},"@setMarketId_9568":{"entryPoint":5044,"id":9568,"parameterSlots":1,"returnSlots":0},"@setPoolConfiguratorImpl_9724":{"entryPoint":3982,"id":9724,"parameterSlots":1,"returnSlots":0},"@setPoolDataProvider_9919":{"entryPoint":3663,"id":9919,"parameterSlots":1,"returnSlots":0},"@setPoolImpl_9686":{"entryPoint":3093,"id":9686,"parameterSlots":1,"returnSlots":0},"@setPriceOracleSentinel_9880":{"entryPoint":2455,"id":9880,"parameterSlots":1,"returnSlots":0},"@setPriceOracle_9763":{"entryPoint":1467,"id":9763,"parameterSlots":1,"returnSlots":0},"@transferOwnership_1572":{"entryPoint":4611,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address":{"entryPoint":6557,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":7114,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32":{"entryPoint":6498,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32t_address":{"entryPoint":6734,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_string_memory_ptr":{"entryPoint":6829,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string":{"entryPoint":6641,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_string_memory_ptr__to_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":7190,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":7143,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":6715,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"copy_memory_to_memory":{"entryPoint":6593,"id":null,"parameterSlots":3,"returnSlots":0},"extract_byte_array_length":{"entryPoint":7036,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x41":{"entryPoint":6782,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":6523,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:5233:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"115:125:201","statements":[{"nodeType":"YulAssignment","src":"125:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"137:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"148:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"133:3:201"},"nodeType":"YulFunctionCall","src":"133:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"125:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"167:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"182:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"190:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"178:3:201"},"nodeType":"YulFunctionCall","src":"178:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"160:6:201"},"nodeType":"YulFunctionCall","src":"160:74:201"},"nodeType":"YulExpressionStatement","src":"160:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"84:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"95:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"106:4:201","type":""}],"src":"14:226:201"},{"body":{"nodeType":"YulBlock","src":"315:110:201","statements":[{"body":{"nodeType":"YulBlock","src":"361:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"370:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"373:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"363:6:201"},"nodeType":"YulFunctionCall","src":"363:12:201"},"nodeType":"YulExpressionStatement","src":"363:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"336:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"345:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"332:3:201"},"nodeType":"YulFunctionCall","src":"332:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"357:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"328:3:201"},"nodeType":"YulFunctionCall","src":"328:32:201"},"nodeType":"YulIf","src":"325:52:201"},{"nodeType":"YulAssignment","src":"386:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"409:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"396:12:201"},"nodeType":"YulFunctionCall","src":"396:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"386:6:201"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"281:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"292:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"304:6:201","type":""}],"src":"245:180:201"},{"body":{"nodeType":"YulBlock","src":"475:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"562:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"571:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"574:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"564:6:201"},"nodeType":"YulFunctionCall","src":"564:12:201"},"nodeType":"YulExpressionStatement","src":"564:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"498:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"509:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"516:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"505:3:201"},"nodeType":"YulFunctionCall","src":"505:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"495:2:201"},"nodeType":"YulFunctionCall","src":"495:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"488:6:201"},"nodeType":"YulFunctionCall","src":"488:73:201"},"nodeType":"YulIf","src":"485:93:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"464:5:201","type":""}],"src":"430:154:201"},{"body":{"nodeType":"YulBlock","src":"659:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"705:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"714:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"717:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"707:6:201"},"nodeType":"YulFunctionCall","src":"707:12:201"},"nodeType":"YulExpressionStatement","src":"707:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"680:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"689:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"676:3:201"},"nodeType":"YulFunctionCall","src":"676:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"701:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"672:3:201"},"nodeType":"YulFunctionCall","src":"672:32:201"},"nodeType":"YulIf","src":"669:52:201"},{"nodeType":"YulVariableDeclaration","src":"730:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"756:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"743:12:201"},"nodeType":"YulFunctionCall","src":"743:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"734:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"800:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"775:24:201"},"nodeType":"YulFunctionCall","src":"775:31:201"},"nodeType":"YulExpressionStatement","src":"775:31:201"},{"nodeType":"YulAssignment","src":"815:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"825:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"815:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"625:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"636:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"648:6:201","type":""}],"src":"589:247:201"},{"body":{"nodeType":"YulBlock","src":"894:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"904:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"913:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"908:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"973:63:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"998:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"1003:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"994:3:201"},"nodeType":"YulFunctionCall","src":"994:11:201"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"1017:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"1022:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1013:3:201"},"nodeType":"YulFunctionCall","src":"1013:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1007:5:201"},"nodeType":"YulFunctionCall","src":"1007:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"987:6:201"},"nodeType":"YulFunctionCall","src":"987:39:201"},"nodeType":"YulExpressionStatement","src":"987:39:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"934:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"937:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"931:2:201"},"nodeType":"YulFunctionCall","src":"931:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"945:19:201","statements":[{"nodeType":"YulAssignment","src":"947:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"956:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"959:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"952:3:201"},"nodeType":"YulFunctionCall","src":"952:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"947:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"927:3:201","statements":[]},"src":"923:113:201"},{"body":{"nodeType":"YulBlock","src":"1062:31:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1075:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"1080:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1071:3:201"},"nodeType":"YulFunctionCall","src":"1071:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"1089:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1064:6:201"},"nodeType":"YulFunctionCall","src":"1064:27:201"},"nodeType":"YulExpressionStatement","src":"1064:27:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1051:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"1054:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1048:2:201"},"nodeType":"YulFunctionCall","src":"1048:13:201"},"nodeType":"YulIf","src":"1045:48:201"}]},"name":"copy_memory_to_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"872:3:201","type":""},{"name":"dst","nodeType":"YulTypedName","src":"877:3:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"882:6:201","type":""}],"src":"841:258:201"},{"body":{"nodeType":"YulBlock","src":"1154:267:201","statements":[{"nodeType":"YulVariableDeclaration","src":"1164:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1184:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1178:5:201"},"nodeType":"YulFunctionCall","src":"1178:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"1168:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1206:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"1211:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1199:6:201"},"nodeType":"YulFunctionCall","src":"1199:19:201"},"nodeType":"YulExpressionStatement","src":"1199:19:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1253:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1260:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1249:3:201"},"nodeType":"YulFunctionCall","src":"1249:16:201"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1271:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"1276:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1267:3:201"},"nodeType":"YulFunctionCall","src":"1267:14:201"},{"name":"length","nodeType":"YulIdentifier","src":"1283:6:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"1227:21:201"},"nodeType":"YulFunctionCall","src":"1227:63:201"},"nodeType":"YulExpressionStatement","src":"1227:63:201"},{"nodeType":"YulAssignment","src":"1299:116:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1314:3:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1327:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1335:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1323:3:201"},"nodeType":"YulFunctionCall","src":"1323:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"1340:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1319:3:201"},"nodeType":"YulFunctionCall","src":"1319:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1310:3:201"},"nodeType":"YulFunctionCall","src":"1310:98:201"},{"kind":"number","nodeType":"YulLiteral","src":"1410:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1306:3:201"},"nodeType":"YulFunctionCall","src":"1306:109:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"1299:3:201"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1131:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"1138:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"1146:3:201","type":""}],"src":"1104:317:201"},{"body":{"nodeType":"YulBlock","src":"1547:99:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1564:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1575:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1557:6:201"},"nodeType":"YulFunctionCall","src":"1557:21:201"},"nodeType":"YulExpressionStatement","src":"1557:21:201"},{"nodeType":"YulAssignment","src":"1587:53:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1613:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1625:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1636:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1621:3:201"},"nodeType":"YulFunctionCall","src":"1621:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"1595:17:201"},"nodeType":"YulFunctionCall","src":"1595:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1587:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1516:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1527:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1538:4:201","type":""}],"src":"1426:220:201"},{"body":{"nodeType":"YulBlock","src":"1738:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"1784:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1793:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1796:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1786:6:201"},"nodeType":"YulFunctionCall","src":"1786:12:201"},"nodeType":"YulExpressionStatement","src":"1786:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1759:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1768:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1755:3:201"},"nodeType":"YulFunctionCall","src":"1755:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1780:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1751:3:201"},"nodeType":"YulFunctionCall","src":"1751:32:201"},"nodeType":"YulIf","src":"1748:52:201"},{"nodeType":"YulAssignment","src":"1809:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1832:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1819:12:201"},"nodeType":"YulFunctionCall","src":"1819:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1809:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1851:45:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1881:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1892:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1877:3:201"},"nodeType":"YulFunctionCall","src":"1877:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1864:12:201"},"nodeType":"YulFunctionCall","src":"1864:32:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1855:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1930:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1905:24:201"},"nodeType":"YulFunctionCall","src":"1905:31:201"},"nodeType":"YulExpressionStatement","src":"1905:31:201"},{"nodeType":"YulAssignment","src":"1945:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1955:5:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1945:6:201"}]}]},"name":"abi_decode_tuple_t_bytes32t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1696:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1707:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1719:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1727:6:201","type":""}],"src":"1651:315:201"},{"body":{"nodeType":"YulBlock","src":"2003:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2020:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2023:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2013:6:201"},"nodeType":"YulFunctionCall","src":"2013:88:201"},"nodeType":"YulExpressionStatement","src":"2013:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2117:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2120:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2110:6:201"},"nodeType":"YulFunctionCall","src":"2110:15:201"},"nodeType":"YulExpressionStatement","src":"2110:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2141:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2144:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2134:6:201"},"nodeType":"YulFunctionCall","src":"2134:15:201"},"nodeType":"YulExpressionStatement","src":"2134:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1971:184:201"},{"body":{"nodeType":"YulBlock","src":"2240:901:201","statements":[{"body":{"nodeType":"YulBlock","src":"2286:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2295:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2298:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2288:6:201"},"nodeType":"YulFunctionCall","src":"2288:12:201"},"nodeType":"YulExpressionStatement","src":"2288:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2261:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2270:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2257:3:201"},"nodeType":"YulFunctionCall","src":"2257:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2282:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2253:3:201"},"nodeType":"YulFunctionCall","src":"2253:32:201"},"nodeType":"YulIf","src":"2250:52:201"},{"nodeType":"YulVariableDeclaration","src":"2311:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2338:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2325:12:201"},"nodeType":"YulFunctionCall","src":"2325:23:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2315:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2357:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2367:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2361:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2412:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2421:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2424:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2414:6:201"},"nodeType":"YulFunctionCall","src":"2414:12:201"},"nodeType":"YulExpressionStatement","src":"2414:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2400:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2408:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2397:2:201"},"nodeType":"YulFunctionCall","src":"2397:14:201"},"nodeType":"YulIf","src":"2394:34:201"},{"nodeType":"YulVariableDeclaration","src":"2437:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2451:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"2462:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2447:3:201"},"nodeType":"YulFunctionCall","src":"2447:22:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"2441:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2517:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2526:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2529:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2519:6:201"},"nodeType":"YulFunctionCall","src":"2519:12:201"},"nodeType":"YulExpressionStatement","src":"2519:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2496:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"2500:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2492:3:201"},"nodeType":"YulFunctionCall","src":"2492:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2507:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2488:3:201"},"nodeType":"YulFunctionCall","src":"2488:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2481:6:201"},"nodeType":"YulFunctionCall","src":"2481:35:201"},"nodeType":"YulIf","src":"2478:55:201"},{"nodeType":"YulVariableDeclaration","src":"2542:26:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2565:2:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2552:12:201"},"nodeType":"YulFunctionCall","src":"2552:16:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"2546:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2591:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2593:16:201"},"nodeType":"YulFunctionCall","src":"2593:18:201"},"nodeType":"YulExpressionStatement","src":"2593:18:201"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2583:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2587:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2580:2:201"},"nodeType":"YulFunctionCall","src":"2580:10:201"},"nodeType":"YulIf","src":"2577:36:201"},{"nodeType":"YulVariableDeclaration","src":"2622:76:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2632:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"2626:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2707:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2727:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2721:5:201"},"nodeType":"YulFunctionCall","src":"2721:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"2711:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2739:71:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2761:6:201"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2785:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"2789:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2781:3:201"},"nodeType":"YulFunctionCall","src":"2781:13:201"},{"name":"_4","nodeType":"YulIdentifier","src":"2796:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2777:3:201"},"nodeType":"YulFunctionCall","src":"2777:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"2801:2:201","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2773:3:201"},"nodeType":"YulFunctionCall","src":"2773:31:201"},{"name":"_4","nodeType":"YulIdentifier","src":"2806:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2769:3:201"},"nodeType":"YulFunctionCall","src":"2769:40:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2757:3:201"},"nodeType":"YulFunctionCall","src":"2757:53:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"2743:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2869:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2871:16:201"},"nodeType":"YulFunctionCall","src":"2871:18:201"},"nodeType":"YulExpressionStatement","src":"2871:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2828:10:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2840:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2825:2:201"},"nodeType":"YulFunctionCall","src":"2825:18:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2848:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"2860:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2845:2:201"},"nodeType":"YulFunctionCall","src":"2845:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2822:2:201"},"nodeType":"YulFunctionCall","src":"2822:46:201"},"nodeType":"YulIf","src":"2819:72:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2907:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2911:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2900:6:201"},"nodeType":"YulFunctionCall","src":"2900:22:201"},"nodeType":"YulExpressionStatement","src":"2900:22:201"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2938:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"2946:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2931:6:201"},"nodeType":"YulFunctionCall","src":"2931:18:201"},"nodeType":"YulExpressionStatement","src":"2931:18:201"},{"body":{"nodeType":"YulBlock","src":"2995:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3004:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3007:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2997:6:201"},"nodeType":"YulFunctionCall","src":"2997:12:201"},"nodeType":"YulExpressionStatement","src":"2997:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2972:2:201"},{"name":"_3","nodeType":"YulIdentifier","src":"2976:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2968:3:201"},"nodeType":"YulFunctionCall","src":"2968:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"2981:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2964:3:201"},"nodeType":"YulFunctionCall","src":"2964:20:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2986:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2961:2:201"},"nodeType":"YulFunctionCall","src":"2961:33:201"},"nodeType":"YulIf","src":"2958:53:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3037:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3045:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3033:3:201"},"nodeType":"YulFunctionCall","src":"3033:15:201"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"3054:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"3058:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3050:3:201"},"nodeType":"YulFunctionCall","src":"3050:11:201"},{"name":"_3","nodeType":"YulIdentifier","src":"3063:2:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"3020:12:201"},"nodeType":"YulFunctionCall","src":"3020:46:201"},"nodeType":"YulExpressionStatement","src":"3020:46:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3090:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"3098:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3086:3:201"},"nodeType":"YulFunctionCall","src":"3086:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"3103:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3082:3:201"},"nodeType":"YulFunctionCall","src":"3082:24:201"},{"kind":"number","nodeType":"YulLiteral","src":"3108:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3075:6:201"},"nodeType":"YulFunctionCall","src":"3075:35:201"},"nodeType":"YulExpressionStatement","src":"3075:35:201"},{"nodeType":"YulAssignment","src":"3119:16:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"3129:6:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3119:6:201"}]}]},"name":"abi_decode_tuple_t_string_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2206:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2217:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2229:6:201","type":""}],"src":"2160:981:201"},{"body":{"nodeType":"YulBlock","src":"3320:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3337:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3348:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3330:6:201"},"nodeType":"YulFunctionCall","src":"3330:21:201"},"nodeType":"YulExpressionStatement","src":"3330:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3371:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3382:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3367:3:201"},"nodeType":"YulFunctionCall","src":"3367:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"3387:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3360:6:201"},"nodeType":"YulFunctionCall","src":"3360:30:201"},"nodeType":"YulExpressionStatement","src":"3360:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3410:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3421:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3406:3:201"},"nodeType":"YulFunctionCall","src":"3406:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"3426:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3399:6:201"},"nodeType":"YulFunctionCall","src":"3399:62:201"},"nodeType":"YulExpressionStatement","src":"3399:62:201"},{"nodeType":"YulAssignment","src":"3470:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3482:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3493:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3478:3:201"},"nodeType":"YulFunctionCall","src":"3478:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3470:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3297:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3311:4:201","type":""}],"src":"3146:356:201"},{"body":{"nodeType":"YulBlock","src":"3562:382:201","statements":[{"nodeType":"YulAssignment","src":"3572:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3586:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"3589:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"3582:3:201"},"nodeType":"YulFunctionCall","src":"3582:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3572:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3603:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"3633:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"3639:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3629:3:201"},"nodeType":"YulFunctionCall","src":"3629:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"3607:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3680:31:201","statements":[{"nodeType":"YulAssignment","src":"3682:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3696:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3704:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3692:3:201"},"nodeType":"YulFunctionCall","src":"3692:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3682:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3660:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3653:6:201"},"nodeType":"YulFunctionCall","src":"3653:26:201"},"nodeType":"YulIf","src":"3650:61:201"},{"body":{"nodeType":"YulBlock","src":"3770:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3791:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3794:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3784:6:201"},"nodeType":"YulFunctionCall","src":"3784:88:201"},"nodeType":"YulExpressionStatement","src":"3784:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3892:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3895:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3885:6:201"},"nodeType":"YulFunctionCall","src":"3885:15:201"},"nodeType":"YulExpressionStatement","src":"3885:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3920:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3923:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3913:6:201"},"nodeType":"YulFunctionCall","src":"3913:15:201"},"nodeType":"YulExpressionStatement","src":"3913:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3726:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3749:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3757:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3746:2:201"},"nodeType":"YulFunctionCall","src":"3746:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3723:2:201"},"nodeType":"YulFunctionCall","src":"3723:38:201"},"nodeType":"YulIf","src":"3720:218:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"3542:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"3551:6:201","type":""}],"src":"3507:437:201"},{"body":{"nodeType":"YulBlock","src":"4123:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4140:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4151:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4133:6:201"},"nodeType":"YulFunctionCall","src":"4133:21:201"},"nodeType":"YulExpressionStatement","src":"4133:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4174:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4185:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4170:3:201"},"nodeType":"YulFunctionCall","src":"4170:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"4190:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4163:6:201"},"nodeType":"YulFunctionCall","src":"4163:30:201"},"nodeType":"YulExpressionStatement","src":"4163:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4213:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4224:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4209:3:201"},"nodeType":"YulFunctionCall","src":"4209:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"4229:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4202:6:201"},"nodeType":"YulFunctionCall","src":"4202:62:201"},"nodeType":"YulExpressionStatement","src":"4202:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4284:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4295:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4280:3:201"},"nodeType":"YulFunctionCall","src":"4280:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"4300:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4273:6:201"},"nodeType":"YulFunctionCall","src":"4273:36:201"},"nodeType":"YulExpressionStatement","src":"4273:36:201"},{"nodeType":"YulAssignment","src":"4318:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4330:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4341:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4326:3:201"},"nodeType":"YulFunctionCall","src":"4326:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4318:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4100:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4114:4:201","type":""}],"src":"3949:402:201"},{"body":{"nodeType":"YulBlock","src":"4437:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"4483:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4492:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4495:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4485:6:201"},"nodeType":"YulFunctionCall","src":"4485:12:201"},"nodeType":"YulExpressionStatement","src":"4485:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4458:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4467:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4454:3:201"},"nodeType":"YulFunctionCall","src":"4454:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4479:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4450:3:201"},"nodeType":"YulFunctionCall","src":"4450:32:201"},"nodeType":"YulIf","src":"4447:52:201"},{"nodeType":"YulVariableDeclaration","src":"4508:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4527:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4521:5:201"},"nodeType":"YulFunctionCall","src":"4521:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4512:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4571:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4546:24:201"},"nodeType":"YulFunctionCall","src":"4546:31:201"},"nodeType":"YulExpressionStatement","src":"4546:31:201"},{"nodeType":"YulAssignment","src":"4586:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"4596:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4586:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4403:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4414:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4426:6:201","type":""}],"src":"4356:251:201"},{"body":{"nodeType":"YulBlock","src":"4759:191:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4776:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4791:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4799:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4787:3:201"},"nodeType":"YulFunctionCall","src":"4787:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4769:6:201"},"nodeType":"YulFunctionCall","src":"4769:74:201"},"nodeType":"YulExpressionStatement","src":"4769:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4863:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4874:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4859:3:201"},"nodeType":"YulFunctionCall","src":"4859:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"4879:2:201","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4852:6:201"},"nodeType":"YulFunctionCall","src":"4852:30:201"},"nodeType":"YulExpressionStatement","src":"4852:30:201"},{"nodeType":"YulAssignment","src":"4891:53:201","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"4917:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4929:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4940:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4925:3:201"},"nodeType":"YulFunctionCall","src":"4925:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"4899:17:201"},"nodeType":"YulFunctionCall","src":"4899:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4891:4:201"}]}]},"name":"abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4720:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4731:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4739:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4750:4:201","type":""}],"src":"4612:338:201"},{"body":{"nodeType":"YulBlock","src":"5094:137:201","statements":[{"nodeType":"YulVariableDeclaration","src":"5104:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5124:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5118:5:201"},"nodeType":"YulFunctionCall","src":"5118:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"5108:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5166:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5174:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5162:3:201"},"nodeType":"YulFunctionCall","src":"5162:17:201"},{"name":"pos","nodeType":"YulIdentifier","src":"5181:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"5186:6:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"5140:21:201"},"nodeType":"YulFunctionCall","src":"5140:53:201"},"nodeType":"YulExpressionStatement","src":"5140:53:201"},{"nodeType":"YulAssignment","src":"5202:23:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5213:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"5218:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5209:3:201"},"nodeType":"YulFunctionCall","src":"5209:16:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"5202:3:201"}]}]},"name":"abi_encode_tuple_packed_t_string_memory_ptr__to_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"5070:3:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5075:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"5086:3:201","type":""}],"src":"4955:276:201"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_bytes32t_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_address(value)\n        value1 := value\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_string_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        calldatacopy(add(memPtr, 32), add(_2, 32), _3)\n        mstore(add(add(memPtr, _3), 32), 0)\n        value0 := memPtr\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), 64)\n        tail := abi_encode_string(value1, add(headStart, 64))\n    }\n    function abi_encode_tuple_packed_t_string_memory_ptr__to_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106101825760003560e01c806376d84ffc116100d8578063e4ca28b71161008c578063f2fde38b11610066578063f2fde38b1461052f578063f67b184714610542578063fca513a81461055557600080fd5b8063e4ca28b7146104a3578063e860accb146104b6578063ed301ca91461051c57600080fd5b8063a1564406116100bd578063a15644061461046a578063ca446dd91461047d578063e44e9ed11461049057600080fd5b806376d84ffc146104395780638da5cb5b1461044c57600080fd5b80635dcc528c1161013a578063707cd71611610114578063707cd716146103b8578063715018a61461041e57806374944cec1461042657600080fd5b80635dcc528c146102d95780635eb88d3d146102ec578063631adfca1461035257600080fd5b806321f8a7211161016b57806321f8a72114610279578063530e784f146102af578063568ef470146102c457600080fd5b8063026b1d5f146101875780630e67178c14610213575b600080fd5b7f504f4f4c0000000000000000000000000000000000000000000000000000000060005260026020527f4fe005067814bb4b024d9515847377d15011b64593c006223b4a722952d2c05a5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b7f41434c5f41444d494e000000000000000000000000000000000000000000000060005260026020527ffab167ad2009dcb80ee379700bb4bd029d97c1181ed9d961625632c8a6f051c65473ffffffffffffffffffffffffffffffffffffffff166101e9565b6101e9610287366004611962565b60009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6102c26102bd36600461199d565b6105bb565b005b6102cc6106ff565b60405161020a9190611a3b565b6102c26102e7366004611a4e565b610791565b7f50524943455f4f5241434c455f53454e54494e454c000000000000000000000060005260026020527f0d2c1bcee56447b4f46248272f34207a580a5c40f666a31f4e2fbb470ea53ab85473ffffffffffffffffffffffffffffffffffffffff166101e9565b7f504f4f4c5f434f4e464947555241544f5200000000000000000000000000000060005260026020527f90c127ef1c12c03f5781afeca3079527ea5333738078bba6fea26825bf9bf2c55473ffffffffffffffffffffffffffffffffffffffff166101e9565b7f41434c5f4d414e4147455200000000000000000000000000000000000000000060005260026020527f9edef266ef35fd0c6e131df0f31a330f3dd4c4d19dd31ed615c21d005c68116b5473ffffffffffffffffffffffffffffffffffffffff166101e9565b6102c26108a7565b6102c261043436600461199d565b610997565b6102c261044736600461199d565b610ad6565b60005473ffffffffffffffffffffffffffffffffffffffff166101e9565b6102c261047836600461199d565b610c15565b6102c261048b366004611a4e565b610d4b565b6102c261049e36600461199d565b610e4f565b6102c26104b136600461199d565b610f8e565b7f444154415f50524f56494445520000000000000000000000000000000000000060005260026020527fcd7944601aaa5cd7ccdae1bebec659e98c6aac8f12486b30e59db0d39698051f5473ffffffffffffffffffffffffffffffffffffffff166101e9565b6102c261052a36600461199d565b6110c4565b6102c261053d36600461199d565b611203565b6102c2610550366004611aad565b6113b4565b7f50524943455f4f5241434c45000000000000000000000000000000000000000060005260026020527f740f710666bd7a12af42df98311e541e47f7fd33d382d11602457a6d540cbd635473ffffffffffffffffffffffffffffffffffffffff166101e9565b60005473ffffffffffffffffffffffffffffffffffffffff163314610641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b7f50524943455f4f5241434c450000000000000000000000000000000000000000600090815260026020527f740f710666bd7a12af42df98311e541e47f7fd33d382d11602457a6d540cbd63805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169283917f56b5f80d8cac1479698aa7d01605fd6111e90b15fc4d2b377417f46034876cbd9190a35050565b60606001805461070e90611b7c565b80601f016020809104026020016040519081016040528092919081815260200182805461073a90611b7c565b80156107875780601f1061075c57610100808354040283529160200191610787565b820191906000526020600020905b81548152906001019060200180831161076a57829003601f168201915b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b60008281526002602052604081205473ffffffffffffffffffffffffffffffffffffffff169061084184611441565b905061084d84846114f8565b60405173ffffffffffffffffffffffffffffffffffffffff8281168252808516919084169086907f3bbd45b5429b385e3fb37ad5cd1cd1435a3c8ec32196c7937597365a3fd3e99c9060200160405180910390a450505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b7f50524943455f4f5241434c455f53454e54494e454c0000000000000000000000600090815260026020527f0d2c1bcee56447b4f46248272f34207a580a5c40f666a31f4e2fbb470ea53ab8805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169283917f5326514eeca90494a14bedabcff812a0e683029ee85d1e23824d44fd14cd6ae79190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b7f41434c5f41444d494e0000000000000000000000000000000000000000000000600090815260026020527ffab167ad2009dcb80ee379700bb4bd029d97c1181ed9d961625632c8a6f051c6805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169283917fe9cf53972264dc95304fd424458745019ddfca0e37ae8f703d74772c41ad115b9190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b6000610cc17f504f4f4c00000000000000000000000000000000000000000000000000000000611441565b9050610ced7f504f4f4c00000000000000000000000000000000000000000000000000000000836114f8565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90affc163f1a2dfedcd36aa02ed992eeeba8100a4014f0b4cdc20ea265a6662760405160405180910390a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b60008281526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff8681169182179093559251911692839186917f9ef0e8c8e52743bb38b83b17d9429141d494b8041ca6d616a6c77cebae9cd8b791a4505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ed0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b7f444154415f50524f564944455200000000000000000000000000000000000000600090815260026020527fcd7944601aaa5cd7ccdae1bebec659e98c6aac8f12486b30e59db0d39698051f805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169283917fc853974cfbf81487a14a23565917bee63f527853bcb5fa54f2ae1cdf8a38356d9190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461100f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b600061103a7f504f4f4c5f434f4e464947555241544f52000000000000000000000000000000611441565b90506110667f504f4f4c5f434f4e464947555241544f52000000000000000000000000000000836114f8565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8932892569eba59c8382a089d9b732d1f49272878775235761a2a6b0309cd46560405160405180910390a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b7f41434c5f4d414e41474552000000000000000000000000000000000000000000600090815260026020527f9edef266ef35fd0c6e131df0f31a330f3dd4c4d19dd31ed615c21d005c68116b805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff00000000000000000000000000000000000000008316811790935560405191169283917fb30efa04327bb8a537d61cc1e5c48095345ad18ef7cc04e6bacf7dfb6caaf5079190a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b73ffffffffffffffffffffffffffffffffffffffff8116611327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610638565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314611435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610638565b61143e816117bf565b50565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16806114745750600092915050565b60008190508073ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156114c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ea9190611bca565b949350505050565b50919050565b60008281526002602052604080822054905130602482015273ffffffffffffffffffffffffffffffffffffffff90911691908190604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052905073ffffffffffffffffffffffffffffffffffffffff831661172e57306040516115cf906118bc565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015611608573d6000803e3d6000fd5b506000868152600260205260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915590517fd1f578940000000000000000000000000000000000000000000000000000000081529194508493509063d1f578949061169c9087908590600401611be7565b600060405180830381600087803b1580156116b657600080fd5b505af11580156116ca573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16867f4a465a9bd819d9662563c1e11ae958f8109e437e7f4bf1c6ef0b9a7b3f35d47860405160405180910390a46117b8565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815283925073ffffffffffffffffffffffffffffffffffffffff831690634f1ef286906117859087908590600401611be7565b600060405180830381600087803b15801561179f57600080fd5b505af11580156117b3573d6000803e3d6000fd5b505050505b5050505050565b6000600180546117ce90611b7c565b80601f01602080910402602001604051908101604052809291908181526020018280546117fa90611b7c565b80156118475780601f1061181c57610100808354040283529160200191611847565b820191906000526020600020905b81548152906001019060200180831161182a57829003601f168201915b50508551939450611863936001935060208701925090506118c9565b50816040516118729190611c16565b6040518091039020816040516118889190611c16565b604051908190038120907fe685c8cdecc6030c45030fd54778812cb84ed8e4467c38294403d68ba786082390600090a35050565b6109cb80611c3383390190565b8280546118d590611b7c565b90600052602060002090601f0160209004810192826118f7576000855561193d565b82601f1061191057805160ff191683800117855561193d565b8280016001018555821561193d579182015b8281111561193d578251825591602001919060010190611922565b5061194992915061194d565b5090565b5b80821115611949576000815560010161194e565b60006020828403121561197457600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461143e57600080fd5b6000602082840312156119af57600080fd5b81356119ba8161197b565b9392505050565b60005b838110156119dc5781810151838201526020016119c4565b838111156119eb576000848401525b50505050565b60008151808452611a098160208601602086016119c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006119ba60208301846119f1565b60008060408385031215611a6157600080fd5b823591506020830135611a738161197b565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215611abf57600080fd5b813567ffffffffffffffff80821115611ad757600080fd5b818401915084601f830112611aeb57600080fd5b813581811115611afd57611afd611a7e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611b4357611b43611a7e565b81604052828152876020848701011115611b5c57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600181811c90821680611b9057607f821691505b602082108114156114f2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215611bdc57600080fd5b81516119ba8161197b565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006114ea60408301846119f1565b60008251611c288184602087016119c1565b919091019291505056fe60a060405234801561001057600080fd5b506040516109cb3803806109cb83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b60805161091d6100ae6000396000818161014f015281816101a101528181610274015281816104110152818161043a01526105a4015261091d6000f3fe60806040526004361061005a5760003560e01c80635c60da1b116100435780635c60da1b14610097578063d1f57894146100d5578063f851a440146100e85761005a565b80633659cfe6146100645780634f1ef28614610084575b6100626100fd565b005b34801561007057600080fd5b5061006261007f36600461067b565b610137565b61006261009236600461069d565b610189565b3480156100a357600080fd5b506100ac61025a565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100626100e336600461074f565b6102cb565b3480156100f457600080fd5b506100ac6103f7565b61010561045c565b6101356101307f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b610464565b565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156101815761017e81610488565b50565b61017e6100fd565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561024d576101d083610488565b60008373ffffffffffffffffffffffffffffffffffffffff1683836040516101f992919061082f565b600060405180830381855af49150503d8060008114610234576040519150601f19603f3d011682016040523d82523d6000602084013e610239565b606091505b505090508061024757600080fd5b50505050565b6102556100fd565b505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102c057507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6102c86100fd565b90565b60006102f57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff161461031557600080fd5b61034060017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61083f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc1461036e5761036e61087d565b610377826104d5565b8051156103f35760008273ffffffffffffffffffffffffffffffffffffffff16826040516103a591906108ac565b600060405180830381855af49150503d80600081146103e0576040519150601f19603f3d011682016040523d82523d6000602084013e6103e5565b606091505b505090508061025557600080fd5b5050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102c057507f000000000000000000000000000000000000000000000000000000000000000090565b61013561058c565b3660008037600080366000845af43d6000803e808015610483573d6000f35b3d6000fd5b610491816104d5565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b803b610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161415610135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e0000000000000000000000000000606482015260840161055f565b803573ffffffffffffffffffffffffffffffffffffffff8116811461067657600080fd5b919050565b60006020828403121561068d57600080fd5b61069682610652565b9392505050565b6000806000604084860312156106b257600080fd5b6106bb84610652565b9250602084013567ffffffffffffffff808211156106d857600080fd5b818601915086601f8301126106ec57600080fd5b8135818111156106fb57600080fd5b87602082850101111561070d57600080fd5b6020830194508093505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561076257600080fd5b61076b83610652565b9150602083013567ffffffffffffffff8082111561078857600080fd5b818501915085601f83011261079c57600080fd5b8135818111156107ae576107ae610720565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156107f4576107f4610720565b8160405282815288602084870101111561080d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b8183823760009101908152919050565b600082821015610878577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b818110156108cd57602081860181015185830152016108b3565b818111156108dc576000828501525b50919091019291505056fea2646970667358221220f9157fc154ba5797dbf9f1c996264175793cc650e7132a50aacd715276ed42a364736f6c634300080a0033a2646970667358221220c6335c01a38ba20458c98da1c7e3997542f7e503f5508d634fe6b862cb680fc464736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x182 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x76D84FFC GT PUSH2 0xD8 JUMPI DUP1 PUSH4 0xE4CA28B7 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xF2FDE38B GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x52F JUMPI DUP1 PUSH4 0xF67B1847 EQ PUSH2 0x542 JUMPI DUP1 PUSH4 0xFCA513A8 EQ PUSH2 0x555 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE4CA28B7 EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0xE860ACCB EQ PUSH2 0x4B6 JUMPI DUP1 PUSH4 0xED301CA9 EQ PUSH2 0x51C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA1564406 GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xA1564406 EQ PUSH2 0x46A JUMPI DUP1 PUSH4 0xCA446DD9 EQ PUSH2 0x47D JUMPI DUP1 PUSH4 0xE44E9ED1 EQ PUSH2 0x490 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x76D84FFC EQ PUSH2 0x439 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x44C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5DCC528C GT PUSH2 0x13A JUMPI DUP1 PUSH4 0x707CD716 GT PUSH2 0x114 JUMPI DUP1 PUSH4 0x707CD716 EQ PUSH2 0x3B8 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x41E JUMPI DUP1 PUSH4 0x74944CEC EQ PUSH2 0x426 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5DCC528C EQ PUSH2 0x2D9 JUMPI DUP1 PUSH4 0x5EB88D3D EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0x631ADFCA EQ PUSH2 0x352 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x21F8A721 GT PUSH2 0x16B JUMPI DUP1 PUSH4 0x21F8A721 EQ PUSH2 0x279 JUMPI DUP1 PUSH4 0x530E784F EQ PUSH2 0x2AF JUMPI DUP1 PUSH4 0x568EF470 EQ PUSH2 0x2C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x26B1D5F EQ PUSH2 0x187 JUMPI DUP1 PUSH4 0xE67178C EQ PUSH2 0x213 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x504F4F4C00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x4FE005067814BB4B024D9515847377D15011B64593C006223B4A722952D2C05A SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH32 0x41434C5F41444D494E0000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xFAB167AD2009DCB80EE379700BB4BD029D97C1181ED9D961625632C8A6F051C6 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH2 0x1E9 PUSH2 0x287 CALLDATASIZE PUSH1 0x4 PUSH2 0x1962 JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x2BD CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0x5BB JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2CC PUSH2 0x6FF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x20A SWAP2 SWAP1 PUSH2 0x1A3B JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x2E7 CALLDATASIZE PUSH1 0x4 PUSH2 0x1A4E JUMP JUMPDEST PUSH2 0x791 JUMP JUMPDEST PUSH32 0x50524943455F4F5241434C455F53454E54494E454C0000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xD2C1BCEE56447B4F46248272F34207A580A5C40F666A31F4E2FBB470EA53AB8 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH32 0x504F4F4C5F434F4E464947555241544F52000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x90C127EF1C12C03F5781AFECA3079527EA5333738078BBA6FEA26825BF9BF2C5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH32 0x41434C5F4D414E41474552000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x9EDEF266EF35FD0C6E131DF0F31A330F3DD4C4D19DD31ED615C21D005C68116B SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x8A7 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x434 CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0x997 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x447 CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0xAD6 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x478 CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0xC15 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x48B CALLDATASIZE PUSH1 0x4 PUSH2 0x1A4E JUMP JUMPDEST PUSH2 0xD4B JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x49E CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0xE4F JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x4B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0xF8E JUMP JUMPDEST PUSH32 0x444154415F50524F564944455200000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xCD7944601AAA5CD7CCDAE1BEBEC659E98C6AAC8F12486B30E59DB0D39698051F SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x52A CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0x10C4 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x53D CALLDATASIZE PUSH1 0x4 PUSH2 0x199D JUMP JUMPDEST PUSH2 0x1203 JUMP JUMPDEST PUSH2 0x2C2 PUSH2 0x550 CALLDATASIZE PUSH1 0x4 PUSH2 0x1AAD JUMP JUMPDEST PUSH2 0x13B4 JUMP JUMPDEST PUSH32 0x50524943455F4F5241434C450000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x740F710666BD7A12AF42DF98311E541E47F7FD33D382D11602457A6D540CBD63 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E9 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x641 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x50524943455F4F5241434C450000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x740F710666BD7A12AF42DF98311E541E47F7FD33D382D11602457A6D540CBD63 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP3 DUP4 SWAP2 PUSH32 0x56B5F80D8CAC1479698AA7D01605FD6111E90B15FC4D2B377417F46034876CBD SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 DUP1 SLOAD PUSH2 0x70E SWAP1 PUSH2 0x1B7C JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x73A SWAP1 PUSH2 0x1B7C JUMP JUMPDEST DUP1 ISZERO PUSH2 0x787 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x75C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x787 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 0x76A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x812 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0x841 DUP5 PUSH2 0x1441 JUMP JUMPDEST SWAP1 POP PUSH2 0x84D DUP5 DUP5 PUSH2 0x14F8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND DUP3 MSTORE DUP1 DUP6 AND SWAP2 SWAP1 DUP5 AND SWAP1 DUP7 SWAP1 PUSH32 0x3BBD45B5429B385E3FB37AD5CD1CD1435A3C8EC32196C7937597365A3FD3E99C SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x928 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xA18 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH32 0x50524943455F4F5241434C455F53454E54494E454C0000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xD2C1BCEE56447B4F46248272F34207A580A5C40F666A31F4E2FBB470EA53AB8 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP3 DUP4 SWAP2 PUSH32 0x5326514EECA90494A14BEDABCFF812A0E683029EE85D1E23824D44FD14CD6AE7 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xB57 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH32 0x41434C5F41444D494E0000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xFAB167AD2009DCB80EE379700BB4BD029D97C1181ED9D961625632C8A6F051C6 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP3 DUP4 SWAP2 PUSH32 0xE9CF53972264DC95304FD424458745019DDFCA0E37AE8F703D74772C41AD115B SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xC96 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 PUSH32 0x504F4F4C00000000000000000000000000000000000000000000000000000000 PUSH2 0x1441 JUMP JUMPDEST SWAP1 POP PUSH2 0xCED PUSH32 0x504F4F4C00000000000000000000000000000000000000000000000000000000 DUP4 PUSH2 0x14F8 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x90AFFC163F1A2DFEDCD36AA02ED992EEEBA8100A4014F0B4CDC20EA265A66627 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xDCC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP4 SSTORE SWAP3 MLOAD SWAP2 AND SWAP3 DUP4 SWAP2 DUP7 SWAP2 PUSH32 0x9EF0E8C8E52743BB38B83B17D9429141D494B8041CA6D616A6C77CEBAE9CD8B7 SWAP2 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xED0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH32 0x444154415F50524F564944455200000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0xCD7944601AAA5CD7CCDAE1BEBEC659E98C6AAC8F12486B30E59DB0D39698051F DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP3 DUP4 SWAP2 PUSH32 0xC853974CFBF81487A14A23565917BEE63F527853BCB5FA54F2AE1CDF8A38356D SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x100F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x103A PUSH32 0x504F4F4C5F434F4E464947555241544F52000000000000000000000000000000 PUSH2 0x1441 JUMP JUMPDEST SWAP1 POP PUSH2 0x1066 PUSH32 0x504F4F4C5F434F4E464947555241544F52000000000000000000000000000000 DUP4 PUSH2 0x14F8 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8932892569EBA59C8382A089D9B732D1F49272878775235761A2A6B0309CD465 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1145 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH32 0x41434C5F4D414E41474552000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH32 0x9EDEF266EF35FD0C6E131DF0F31A330F3DD4C4D19DD31ED615C21D005C68116B DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP3 DUP4 SWAP2 PUSH32 0xB30EFA04327BB8A537D61CC1E5C48095345AD18EF7CC04E6BACF7DFB6CAAF507 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1284 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x1327 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x638 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1435 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x638 JUMP JUMPDEST PUSH2 0x143E DUP2 PUSH2 0x17BF JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 PUSH2 0x1474 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5C60DA1B 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 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x14C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14EA SWAP2 SWAP1 PUSH2 0x1BCA JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SLOAD SWAP1 MLOAD ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 SWAP1 DUP2 SWAP1 PUSH1 0x44 ADD 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 0xC4D66DE800000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x172E JUMPI ADDRESS PUSH1 0x40 MLOAD PUSH2 0x15CF SWAP1 PUSH2 0x18BC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x1608 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 MLOAD PUSH32 0xD1F5789400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP5 POP DUP5 SWAP4 POP SWAP1 PUSH4 0xD1F57894 SWAP1 PUSH2 0x169C SWAP1 DUP8 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x1BE7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH32 0x4A465A9BD819D9662563C1E11AE958F8109E437E7F4BF1C6EF0B9A7B3F35D478 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH2 0x17B8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4F1EF28600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP4 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 PUSH4 0x4F1EF286 SWAP1 PUSH2 0x1785 SWAP1 DUP8 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x1BE7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x179F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x17B3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP1 SLOAD PUSH2 0x17CE SWAP1 PUSH2 0x1B7C JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x17FA SWAP1 PUSH2 0x1B7C JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1847 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x181C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1847 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 0x182A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP DUP6 MLOAD SWAP4 SWAP5 POP PUSH2 0x1863 SWAP4 PUSH1 0x1 SWAP4 POP PUSH1 0x20 DUP8 ADD SWAP3 POP SWAP1 POP PUSH2 0x18C9 JUMP JUMPDEST POP DUP2 PUSH1 0x40 MLOAD PUSH2 0x1872 SWAP2 SWAP1 PUSH2 0x1C16 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 DUP2 PUSH1 0x40 MLOAD PUSH2 0x1888 SWAP2 SWAP1 PUSH2 0x1C16 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 SWAP1 SUB DUP2 KECCAK256 SWAP1 PUSH32 0xE685C8CDECC6030C45030FD54778812CB84ED8E4467C38294403D68BA7860823 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x9CB DUP1 PUSH2 0x1C33 DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x18D5 SWAP1 PUSH2 0x1B7C JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x18F7 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x193D JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x1910 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x193D JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x193D JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x193D JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1922 JUMP JUMPDEST POP PUSH2 0x1949 SWAP3 SWAP2 POP PUSH2 0x194D JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1949 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x194E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1974 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x143E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x19AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x19BA DUP2 PUSH2 0x197B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x19DC JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x19C4 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x19EB JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1A09 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x19C1 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x19BA PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x19F1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1A61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1A73 DUP2 PUSH2 0x197B JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1ABF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1AD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1AEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x1AFD JUMPI PUSH2 0x1AFD PUSH2 0x1A7E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x1B43 JUMPI PUSH2 0x1B43 PUSH2 0x1A7E JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP8 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x1B5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP3 DUP2 ADD PUSH1 0x20 ADD SWAP3 SWAP1 SWAP3 MSTORE POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x1B90 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x14F2 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1BDC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x19BA DUP2 PUSH2 0x197B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x14EA PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x19F1 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x1C28 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x19C1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x9CB CODESIZE SUB DUP1 PUSH2 0x9CB DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH2 0x70 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x91D PUSH2 0xAE PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x14F ADD MSTORE DUP2 DUP2 PUSH2 0x1A1 ADD MSTORE DUP2 DUP2 PUSH2 0x274 ADD MSTORE DUP2 DUP2 PUSH2 0x411 ADD MSTORE DUP2 DUP2 PUSH2 0x43A ADD MSTORE PUSH2 0x5A4 ADD MSTORE PUSH2 0x91D PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0xD1F57894 EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xE8 JUMPI PUSH2 0x5A JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x84 JUMPI JUMPDEST PUSH2 0x62 PUSH2 0xFD JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x62 PUSH2 0x7F CALLDATASIZE PUSH1 0x4 PUSH2 0x67B JUMP JUMPDEST PUSH2 0x137 JUMP JUMPDEST PUSH2 0x62 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x69D JUMP JUMPDEST PUSH2 0x189 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x25A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x62 PUSH2 0xE3 CALLDATASIZE PUSH1 0x4 PUSH2 0x74F JUMP JUMPDEST PUSH2 0x2CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x3F7 JUMP JUMPDEST PUSH2 0x105 PUSH2 0x45C JUMP JUMPDEST PUSH2 0x135 PUSH2 0x130 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x464 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x181 JUMPI PUSH2 0x17E DUP2 PUSH2 0x488 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x17E PUSH2 0xFD JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x24D JUMPI PUSH2 0x1D0 DUP4 PUSH2 0x488 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1F9 SWAP3 SWAP2 SWAP1 PUSH2 0x82F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x234 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 0x239 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x247 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x255 PUSH2 0xFD JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x2C0 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0xFD JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F5 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x315 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x340 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0x83F JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC EQ PUSH2 0x36E JUMPI PUSH2 0x36E PUSH2 0x87D JUMP JUMPDEST PUSH2 0x377 DUP3 PUSH2 0x4D5 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x3F3 JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x3A5 SWAP2 SWAP1 PUSH2 0x8AC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3E0 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 0x3E5 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x2C0 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x135 PUSH2 0x58C JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x483 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x491 DUP2 PUSH2 0x4D5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x568 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x135 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x55F JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x676 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x68D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x696 DUP3 PUSH2 0x652 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x6B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6BB DUP5 PUSH2 0x652 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x6D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x6EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x6FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x762 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x76B DUP4 PUSH2 0x652 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x788 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x79C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x7AE JUMPI PUSH2 0x7AE PUSH2 0x720 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x7F4 JUMPI PUSH2 0x7F4 PUSH2 0x720 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x80D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x878 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x8CD JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x8B3 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x8DC JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF9 ISZERO PUSH32 0xC154BA5797DBF9F1C996264175793CC650E7132A50AACD715276ED42A364736F PUSH13 0x634300080A0033A26469706673 PC 0x22 SLT KECCAK256 0xC6 CALLER 0x5C ADD LOG3 DUP12 LOG2 DIV PC 0xC9 DUP14 LOG1 0xC7 0xE3 SWAP10 PUSH22 0x42F7E503F5508D634FE6B862CB680FC464736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"672:7625:67:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2777:94;2861:4;2828:7;2041:14;:10;:14;;;;;;2777:94;;;190:42:201;178:55;;;160:74;;148:2;133:18;2777:94:67;;;;;;;;4587:103;4675:9;4642:7;2041:14;:10;:14;;;;;;4587:103;2777:94;1957:103;;;;;;:::i;:::-;2019:7;2041:14;;;:10;:14;;;;;;;;;1957:103;3866:244;;;;;;:::i;:::-;;:::i;:::-;;1658:97;;;:::i;:::-;;;;;;;:::i;2358:374::-;;;;;;:::i;:::-;;:::i;4997:126::-;5096:21;5063:7;2041:14;:10;:14;;;;;;4997:126;2777:94;3177:119;3273:17;3240:7;2041:14;:10;:14;;;;;;3177:119;2777:94;4155:107;4245:11;4212:7;2041:14;:10;:14;;;;;;4155:107;2777:94;1601:135:11;;;:::i;5168:318:67:-;;;;;;:::i;:::-;;:::i;4735:217::-;;;;;;:::i;:::-;;:::i;1018:71:11:-;1056:7;1078:6;;;1018:71;;2916:216:67;;;;;;:::i;:::-;;:::i;2105:208::-;;;;;;:::i;:::-;;:::i;5691:261::-;;;;;;:::i;:::-;;:::i;3341:326::-;;;;;;:::i;:::-;;:::i;5531:115::-;5627:13;5594:7;2041:14;:10;:14;;;;;;5531:115;2777:94;4307:235;;;;;;:::i;:::-;;:::i;1875:226:11:-;;;;;;:::i;:::-;;:::i;1800:112:67:-;;;;;;:::i;:::-;;:::i;3712:109::-;3803:12;3770:7;2041:14;:10;:14;;;;;;3712:109;2777:94;3866:244;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3348:2:201;1196:67:11;;;3330:21:201;;;3367:18;;;3360:30;3426:34;3406:18;;;3399:62;3478:18;;1196:67:11;;;;;;;;;3984:12:67::1;3948:22;3973:24:::0;;;:10:::1;:24;::::0;;;;::::1;4003:41:::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;3973:24;4055:50;3973:24;::::1;::::0;;;4055:50:::1;::::0;3948:22;4055:50:::1;3942:168;3866:244:::0;:::o;1658:97::-;1713:13;1741:9;1734:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1658:97;:::o;2358:374::-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3348:2:201;1196:67:11;;;3330:21:201;;;3367:18;;;3360:30;3426:34;3406:18;;;3399:62;3478:18;;1196:67:11;3146:356:201;1196:67:11;2477:20:67::1;2500:14:::0;;;:10:::1;:14;::::0;;;;;::::1;;::::0;2555:27:::1;2511:2:::0;2555:23:::1;:27::i;:::-;2520:62;;2588:41;2600:2;2604:24;2588:11;:41::i;:::-;2640:87;::::0;::::1;178:55:201::0;;;160:74;;2640:87:67;;::::1;::::0;;;::::1;::::0;2658:2;;2640:87:::1;::::0;148:2:201;133:18;2640:87:67::1;;;;;;;2471:261;;2358:374:::0;;:::o;1601:135:11:-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3348:2:201;1196:67:11;;;3330:21:201;;;3367:18;;;3360:30;3426:34;3406:18;;;3399:62;3478:18;;1196:67:11;3146:356:201;1196:67:11;1703:1:::1;1687:6:::0;;1666:40:::1;::::0;::::1;1687:6:::0;;::::1;::::0;1666:40:::1;::::0;1703:1;;1666:40:::1;1729:1;1712:19:::0;;;::::1;::::0;;1601:135::o;5168:318:67:-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3348:2:201;1196:67:11;;;3330:21:201;;;3367:18;;;3360:30;3426:34;3406:18;;;3399:62;3478:18;;1196:67:11;3146:356:201;1196:67:11;5310:21:67::1;5266:30;5299:33:::0;;;:10:::1;:33;::::0;;;;::::1;5338:58:::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;5299:33;5407:74;5299:33;::::1;::::0;;;5407:74:::1;::::0;5266:30;5407:74:::1;5260:226;5168:318:::0;:::o;4735:217::-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3348:2:201;1196:67:11;;;3330:21:201;;;3367:18;;;3360:30;3426:34;3406:18;;;3399:62;3478:18;;1196:67:11;3146:356:201;1196:67:11;4844:9:67::1;4811:19;4833:21:::0;;;:10:::1;:21;::::0;;;;::::1;4860:35:::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;4833:21;4906:41;4833:21;::::1;::::0;;;4906:41:::1;::::0;4811:19;4906:41:::1;4805:147;4735:217:::0;:::o;2916:216::-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3348:2:201;1196:67:11;;;3330:21:201;;;3367:18;;;3360:30;3426:34;3406:18;;;3399:62;3478:18;;1196:67:11;3146:356:201;1196:67:11;2992:19:67::1;3014:29;3038:4;3014:23;:29::i;:::-;2992:51;;3049:30;3061:4;3067:11;3049;:30::i;:::-;3115:11;3090:37;;3102:11;3090:37;;;;;;;;;;;;2986:146;2916:216:::0;:::o;2105:208::-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3348:2:201;1196:67:11;;;3330:21:201;;;3367:18;;;3360:30;3426:34;3406:18;;;3399:62;3478:18;;1196:67:11;3146:356:201;1196:67:11;2191:18:67::1;2212:14:::0;;;:10:::1;:14;::::0;;;;;;;2232:27;;::::1;2212:14;2232:27:::0;;::::1;::::0;;::::1;::::0;;;2270:38;;2212:14;::::1;::::0;;;;;2270:38:::1;::::0;::::1;2185:128;2105:208:::0;;:::o;5691:261::-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3348:2:201;1196:67:11;;;3330:21:201;;;3367:18;;;3360:30;3426:34;3406:18;;;3399:62;3478:18;;1196:67:11;3146:356:201;1196:67:11;5816:13:67::1;5779:23;5805:25:::0;;;:10:::1;:25;::::0;;;;::::1;5836:43:::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;5805:25;5890:57;5805:25;::::1;::::0;;;5890:57:::1;::::0;5779:23;5890:57:::1;5773:179;5691:261:::0;:::o;3341:326::-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3348:2:201;1196:67:11;;;3330:21:201;;;3367:18;;;3360:30;3426:34;3406:18;;;3399:62;3478:18;;1196:67:11;3146:356:201;1196:67:11;3441:31:67::1;3475:42;3499:17;3475:23;:42::i;:::-;3441:76;;3523:55;3535:17;3554:23;3523:11;:55::i;:::-;3638:23;3589:73;;3613:23;3589:73;;;;;;;;;;;;3435:232;3341:326:::0;:::o;4307:235::-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3348:2:201;1196:67:11;;;3330:21:201;;;3367:18;;;3360:30;3426:34;3406:18;;;3399:62;3478:18;;1196:67:11;3146:356:201;1196:67:11;4422:11:67::1;4387:21;4411:23:::0;;;:10:::1;:23;::::0;;;;::::1;4440:39:::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;4411:23;4490:47;4411:23;::::1;::::0;;;4490:47:::1;::::0;4387:21;4490:47:::1;4381:161;4307:235:::0;:::o;1875:226:11:-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3348:2:201;1196:67:11;;;3330:21:201;;;3367:18;;;3360:30;3426:34;3406:18;;;3399:62;3478:18;;1196:67:11;3146:356:201;1196:67:11;1959:22:::1;::::0;::::1;1951:73;;;::::0;::::1;::::0;;4151:2:201;1951:73:11::1;::::0;::::1;4133:21:201::0;4190:2;4170:18;;;4163:30;4229:34;4209:18;;;4202:62;4300:8;4280:18;;;4273:36;4326:19;;1951:73:11::1;3949:402:201::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;::::1;::::0;;::::1;::::0;2056:6;::::1;::::0;2035:38:::1;::::0;::::1;2079:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1875:226::o;1800:112:67:-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3348:2:201;1196:67:11;;;3330:21:201;;;3367:18;;;3360:30;3426:34;3406:18;;;3399:62;3478:18;;1196:67:11;3146:356:201;1196:67:11;1882:25:67::1;1895:11;1882:12;:25::i;:::-;1800:112:::0;:::o;7927:368::-;7990:7;8028:14;;;:10;:14;;;;;;;;8052:26;8048:243;;-1:-1:-1;8103:1:67;;7927:368;-1:-1:-1;;7927:368:67:o;8048:243::-;8126:35;8172:12;8126:59;;8247:19;8200:82;;;:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8193:91;7927:368;-1:-1:-1;;;;7927:368:67:o;8048:243::-;7999:296;7927:368;;;:::o;6552:684::-;6620:20;6643:14;;;:10;:14;;;;;;;6743:61;;6798:4;6743:61;;;160:74:201;6643:14:67;;;;;6620:20;;;133:18:201;;6743:61:67;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6815:26:67;;;6811:421;;6918:4;6859:65;;;;;:::i;:::-;190:42:201;178:55;;;160:74;;148:2;133:18;6859:65:67;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6932:14:67;;;;:10;:14;;;;;;;:46;;;;;;;;;;;;;6986:36;;;;;6932:46;;-1:-1:-1;6932:46:67;;-1:-1:-1;6932:46:67;6986:16;;:36;;7003:10;;7015:6;;6986:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7066:10;7035:42;;7052:12;7035:42;;7048:2;7035:42;;;;;;;;;;6811:421;;;7183:42;;;;;7161:12;;-1:-1:-1;7183:22:67;;;;;;:42;;7206:10;;7218:6;;7183:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6811:421;6614:622;;;6552:684;;:::o;7357:183::-;7421:25;7449:9;7421:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7464:23:67;;7421:37;;-1:-1:-1;7464:23:67;;:9;;-1:-1:-1;7464:23:67;;;;-1:-1:-1;7464:23:67;-1:-1:-1;7464:23:67;:::i;:::-;;7523:11;7498:37;;;;;;:::i;:::-;;;;;;;;7510:11;7498:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;7415:125;7357:183;:::o;-1:-1:-1:-;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;245:180:201;304:6;357:2;345:9;336:7;332:23;328:32;325:52;;;373:1;370;363:12;325:52;-1:-1:-1;396:23:201;;245:180;-1:-1:-1;245:180:201:o;430:154::-;516:42;509:5;505:54;498:5;495:65;485:93;;574:1;571;564:12;589:247;648:6;701:2;689:9;680:7;676:23;672:32;669:52;;;717:1;714;707:12;669:52;756:9;743:23;775:31;800:5;775:31;:::i;:::-;825:5;589:247;-1:-1:-1;;;589:247:201:o;841:258::-;913:1;923:113;937:6;934:1;931:13;923:113;;;1013:11;;;1007:18;994:11;;;987:39;959:2;952:10;923:113;;;1054:6;1051:1;1048:13;1045:48;;;1089:1;1080:6;1075:3;1071:16;1064:27;1045:48;;841:258;;;:::o;1104:317::-;1146:3;1184:5;1178:12;1211:6;1206:3;1199:19;1227:63;1283:6;1276:4;1271:3;1267:14;1260:4;1253:5;1249:16;1227:63;:::i;:::-;1335:2;1323:15;1340:66;1319:88;1310:98;;;;1410:4;1306:109;;1104:317;-1:-1:-1;;1104:317:201:o;1426:220::-;1575:2;1564:9;1557:21;1538:4;1595:45;1636:2;1625:9;1621:18;1613:6;1595:45;:::i;1651:315::-;1719:6;1727;1780:2;1768:9;1759:7;1755:23;1751:32;1748:52;;;1796:1;1793;1786:12;1748:52;1832:9;1819:23;1809:33;;1892:2;1881:9;1877:18;1864:32;1905:31;1930:5;1905:31;:::i;:::-;1955:5;1945:15;;;1651:315;;;;;:::o;1971:184::-;2023:77;2020:1;2013:88;2120:4;2117:1;2110:15;2144:4;2141:1;2134:15;2160:981;2229:6;2282:2;2270:9;2261:7;2257:23;2253:32;2250:52;;;2298:1;2295;2288:12;2250:52;2338:9;2325:23;2367:18;2408:2;2400:6;2397:14;2394:34;;;2424:1;2421;2414:12;2394:34;2462:6;2451:9;2447:22;2437:32;;2507:7;2500:4;2496:2;2492:13;2488:27;2478:55;;2529:1;2526;2519:12;2478:55;2565:2;2552:16;2587:2;2583;2580:10;2577:36;;;2593:18;;:::i;:::-;2727:2;2721:9;2789:4;2781:13;;2632:66;2777:22;;;2801:2;2773:31;2769:40;2757:53;;;2825:18;;;2845:22;;;2822:46;2819:72;;;2871:18;;:::i;:::-;2911:10;2907:2;2900:22;2946:2;2938:6;2931:18;2986:7;2981:2;2976;2972;2968:11;2964:20;2961:33;2958:53;;;3007:1;3004;2997:12;2958:53;3063:2;3058;3054;3050:11;3045:2;3037:6;3033:15;3020:46;3108:1;3086:15;;;3103:2;3082:24;3075:35;;;;-1:-1:-1;3090:6:201;2160:981;-1:-1:-1;;;;;2160:981:201:o;3507:437::-;3586:1;3582:12;;;;3629;;;3650:61;;3704:4;3696:6;3692:17;3682:27;;3650:61;3757:2;3749:6;3746:14;3726:18;3723:38;3720:218;;;3794:77;3791:1;3784:88;3895:4;3892:1;3885:15;3923:4;3920:1;3913:15;4356:251;4426:6;4479:2;4467:9;4458:7;4454:23;4450:32;4447:52;;;4495:1;4492;4485:12;4447:52;4527:9;4521:16;4546:31;4571:5;4546:31;:::i;4612:338::-;4799:42;4791:6;4787:55;4776:9;4769:74;4879:2;4874;4863:9;4859:18;4852:30;4750:4;4899:45;4940:2;4929:9;4925:18;4917:6;4899:45;:::i;4955:276::-;5086:3;5124:6;5118:13;5140:53;5186:6;5181:3;5174:4;5166:6;5162:17;5140:53;:::i;:::-;5209:16;;;;;4955:276;-1:-1:-1;;4955:276:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"1955800","executionCost":"infinite","totalCost":"infinite"},"external":{"getACLAdmin()":"2383","getACLManager()":"2359","getAddress(bytes32)":"2488","getMarketId()":"infinite","getPool()":"2350","getPoolConfigurator()":"2404","getPoolDataProvider()":"2381","getPriceOracle()":"2402","getPriceOracleSentinel()":"2382","owner()":"2364","renounceOwnership()":"30193","setACLAdmin(address)":"28255","setACLManager(address)":"28298","setAddress(bytes32,address)":"28735","setAddressAsProxy(bytes32,address)":"infinite","setMarketId(string)":"infinite","setPoolConfiguratorImpl(address)":"infinite","setPoolDataProvider(address)":"28298","setPoolImpl(address)":"infinite","setPriceOracle(address)":"28277","setPriceOracleSentinel(address)":"28298","transferOwnership(address)":"30363"},"internal":{"_getProxyImplementation(bytes32)":"infinite","_setMarketId(string memory)":"infinite","_updateImpl(bytes32,address)":"infinite"}},"methodIdentifiers":{"getACLAdmin()":"0e67178c","getACLManager()":"707cd716","getAddress(bytes32)":"21f8a721","getMarketId()":"568ef470","getPool()":"026b1d5f","getPoolConfigurator()":"631adfca","getPoolDataProvider()":"e860accb","getPriceOracle()":"fca513a8","getPriceOracleSentinel()":"5eb88d3d","owner()":"8da5cb5b","renounceOwnership()":"715018a6","setACLAdmin(address)":"76d84ffc","setACLManager(address)":"ed301ca9","setAddress(bytes32,address)":"ca446dd9","setAddressAsProxy(bytes32,address)":"5dcc528c","setMarketId(string)":"f67b1847","setPoolConfiguratorImpl(address)":"e4ca28b7","setPoolDataProvider(address)":"e44e9ed1","setPoolImpl(address)":"a1564406","setPriceOracle(address)":"530e784f","setPriceOracleSentinel(address)":"74944cec","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"marketId\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ACLAdminUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ACLManagerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"AddressSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxyAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldImplementationAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementationAddress\",\"type\":\"address\"}],\"name\":\"AddressSetAsProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"oldMarketId\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"newMarketId\",\"type\":\"string\"}],\"name\":\"MarketIdSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PoolConfiguratorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PoolDataProviderUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PoolUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PriceOracleSentinelUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"PriceOracleUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxyAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementationAddress\",\"type\":\"address\"}],\"name\":\"ProxyCreated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getACLAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getACLManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMarketId\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolConfigurator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolDataProvider\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPriceOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPriceOracleSentinel\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAclAdmin\",\"type\":\"address\"}],\"name\":\"setACLAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAclManager\",\"type\":\"address\"}],\"name\":\"setACLManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"setAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"newImplementationAddress\",\"type\":\"address\"}],\"name\":\"setAddressAsProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newMarketId\",\"type\":\"string\"}],\"name\":\"setMarketId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newPoolConfiguratorImpl\",\"type\":\"address\"}],\"name\":\"setPoolConfiguratorImpl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newDataProvider\",\"type\":\"address\"}],\"name\":\"setPoolDataProvider\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newPoolImpl\",\"type\":\"address\"}],\"name\":\"setPoolImpl\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newPriceOracle\",\"type\":\"address\"}],\"name\":\"setPriceOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newPriceOracleSentinel\",\"type\":\"address\"}],\"name\":\"setPriceOracleSentinel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"Acts as factory of proxies and admin of those, so with right to change its implementationsOwned by the Aave Governance\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"marketId\":\"The identifier of the market.\",\"owner\":\"The owner address of this contract.\"}},\"getACLAdmin()\":{\"returns\":{\"_0\":\"The address of the ACL admin\"}},\"getACLManager()\":{\"returns\":{\"_0\":\"The address of the ACLManager\"}},\"getAddress(bytes32)\":{\"details\":\"The returned address might be an EOA or a contract, potentially proxiedIt returns ZERO if there is no registered address with the given id\",\"params\":{\"id\":\"The id\"},\"returns\":{\"_0\":\"The address of the registered for the specified id\"}},\"getMarketId()\":{\"returns\":{\"_0\":\"The market id\"}},\"getPool()\":{\"returns\":{\"_0\":\"The Pool proxy address\"}},\"getPoolConfigurator()\":{\"returns\":{\"_0\":\"The PoolConfigurator proxy address\"}},\"getPoolDataProvider()\":{\"returns\":{\"_0\":\"The address of the DataProvider\"}},\"getPriceOracle()\":{\"returns\":{\"_0\":\"The address of the PriceOracle\"}},\"getPriceOracleSentinel()\":{\"returns\":{\"_0\":\"The address of the PriceOracleSentinel\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setACLAdmin(address)\":{\"params\":{\"newAclAdmin\":\"The address of the new ACL admin\"}},\"setACLManager(address)\":{\"params\":{\"newAclManager\":\"The address of the new ACLManager\"}},\"setAddress(bytes32,address)\":{\"details\":\"IMPORTANT Use this function carefully, as it will do a hard replacement\",\"params\":{\"id\":\"The id\",\"newAddress\":\"The address to set\"}},\"setAddressAsProxy(bytes32,address)\":{\"details\":\"IMPORTANT Use this function carefully, only for ids that don't have an explicit setter function, in order to avoid unexpected consequences\",\"params\":{\"id\":\"The id\",\"newImplementationAddress\":\"The address of the new implementation\"}},\"setMarketId(string)\":{\"details\":\"This can be used to create an onchain registry of PoolAddressesProviders to identify and validate multiple Aave markets.\",\"params\":{\"newMarketId\":\"The market id\"}},\"setPoolConfiguratorImpl(address)\":{\"params\":{\"newPoolConfiguratorImpl\":\"The new PoolConfigurator implementation\"}},\"setPoolDataProvider(address)\":{\"params\":{\"newDataProvider\":\"The address of the new DataProvider\"}},\"setPoolImpl(address)\":{\"params\":{\"newPoolImpl\":\"The new Pool implementation\"}},\"setPriceOracle(address)\":{\"params\":{\"newPriceOracle\":\"The address of the new PriceOracle\"}},\"setPriceOracleSentinel(address)\":{\"params\":{\"newPriceOracleSentinel\":\"The address of the new PriceOracleSentinel\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"PoolAddressesProvider\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getACLAdmin()\":{\"notice\":\"Returns the address of the ACL admin.\"},\"getACLManager()\":{\"notice\":\"Returns the address of the ACL manager.\"},\"getAddress(bytes32)\":{\"notice\":\"Returns an address by its identifier.\"},\"getMarketId()\":{\"notice\":\"Returns the id of the Aave market to which this contract points to.\"},\"getPool()\":{\"notice\":\"Returns the address of the Pool proxy.\"},\"getPoolConfigurator()\":{\"notice\":\"Returns the address of the PoolConfigurator proxy.\"},\"getPoolDataProvider()\":{\"notice\":\"Returns the address of the data provider.\"},\"getPriceOracle()\":{\"notice\":\"Returns the address of the price oracle.\"},\"getPriceOracleSentinel()\":{\"notice\":\"Returns the address of the price oracle sentinel.\"},\"setACLAdmin(address)\":{\"notice\":\"Updates the address of the ACL admin.\"},\"setACLManager(address)\":{\"notice\":\"Updates the address of the ACL manager.\"},\"setAddress(bytes32,address)\":{\"notice\":\"Sets an address for an id replacing the address saved in the addresses map.\"},\"setAddressAsProxy(bytes32,address)\":{\"notice\":\"General function to update the implementation of a proxy registered with certain `id`. If there is no proxy registered, it will instantiate one and set as implementation the `newImplementationAddress`.\"},\"setMarketId(string)\":{\"notice\":\"Associates an id with a specific PoolAddressesProvider.\"},\"setPoolConfiguratorImpl(address)\":{\"notice\":\"Updates the implementation of the PoolConfigurator, or creates a proxy setting the new `PoolConfigurator` implementation when the function is called for the first time.\"},\"setPoolDataProvider(address)\":{\"notice\":\"Updates the address of the data provider.\"},\"setPoolImpl(address)\":{\"notice\":\"Updates the implementation of the Pool, or creates a proxy setting the new `pool` implementation when the function is called for the first time.\"},\"setPriceOracle(address)\":{\"notice\":\"Updates the address of the price oracle.\"},\"setPriceOracleSentinel(address)\":{\"notice\":\"Updates the address of the price oracle sentinel.\"}},\"notice\":\"Main registry of addresses part of or connected to the protocol, including permissioned roles\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/configuration/PoolAddressesProvider.sol\":\"PoolAddressesProvider\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable is Context {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial owner.\\n   */\\n  constructor() {\\n    address msgSender = _msgSender();\\n    _owner = msgSender;\\n    emit OwnershipTransferred(address(0), msgSender);\\n  }\\n\\n  /**\\n   * @dev Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Leaves the contract without owner. It will not be possible to call\\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\\n   *\\n   * NOTE: Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public virtual onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = address(0);\\n  }\\n\\n  /**\\n   * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function transferOwnership(address newOwner) public virtual onlyOwner {\\n    require(newOwner != address(0), 'Ownable: new owner is the zero address');\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\",\"keccak256\":\"0x3ce185c4f579e32006f8893dbfdc1b5d878c0e2cafd1508f7ceb081698bc81f9\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './Proxy.sol';\\nimport '../contracts/Address.sol';\\n\\n/**\\n * @title BaseUpgradeabilityProxy\\n * @dev This contract implements a proxy that allows to change the\\n * implementation address to which it will delegate.\\n * Such a change is called an implementation upgrade.\\n */\\ncontract BaseUpgradeabilityProxy is Proxy {\\n  /**\\n   * @dev Emitted when the implementation is upgraded.\\n   * @param implementation Address of the new implementation.\\n   */\\n  event Upgraded(address indexed implementation);\\n\\n  /**\\n   * @dev Storage slot with the address of the current implementation.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant IMPLEMENTATION_SLOT =\\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n  /**\\n   * @dev Returns the current implementation.\\n   * @return impl Address of the current implementation\\n   */\\n  function _implementation() internal view override returns (address impl) {\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      impl := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Upgrades the proxy to a new implementation.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _upgradeTo(address newImplementation) internal {\\n    _setImplementation(newImplementation);\\n    emit Upgraded(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Sets the implementation address of the proxy.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _setImplementation(address newImplementation) internal {\\n    require(\\n      Address.isContract(newImplementation),\\n      'Cannot set a proxy implementation to a non-contract address'\\n    );\\n\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newImplementation)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe47eb278267d31f096fc643c2a322c72066abfa6ba07f6386c266fe7cbd15013\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableUpgradeabilityProxy\\n * @dev Extends BaseUpgradeabilityProxy with an initializer for initializing\\n * implementation and init data.\\n */\\ncontract InitializableUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Contract initializer.\\n   * @param _logic Address of the initial implementation.\\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\\n   */\\n  function initialize(address _logic, bytes memory _data) public payable {\\n    require(_implementation() == address(0));\\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\\n    _setImplementation(_logic);\\n    if (_data.length > 0) {\\n      (bool success, ) = _logic.delegatecall(_data);\\n      require(success);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x8a1e927b97f5da20f4640ba4d2588666910dfa89f5a2b0a37440d27e5a47ee08\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\n    assembly {\\n      // Copy msg.data. We take full control of memory in this inline assembly\\n      // block because it will not return to Solidity code. We overwrite the\\n      // Solidity scratch pad at memory position 0.\\n      calldatacopy(0, 0, calldatasize())\\n\\n      // Call the implementation.\\n      // out and outsize are 0 because we don't know the size yet.\\n      let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n      // Copy the returned data.\\n      returndatacopy(0, 0, returndatasize())\\n\\n      switch result\\n      // delegatecall returns 0 on error.\\n      case 0 {\\n        revert(0, returndatasize())\\n      }\\n      default {\\n        return(0, returndatasize())\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/configuration/PoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Ownable} from '../../dependencies/openzeppelin/contracts/Ownable.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {InitializableImmutableAdminUpgradeabilityProxy} from '../libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol';\\n\\n/**\\n * @title PoolAddressesProvider\\n * @author Aave\\n * @notice Main registry of addresses part of or connected to the protocol, including permissioned roles\\n * @dev Acts as factory of proxies and admin of those, so with right to change its implementations\\n * @dev Owned by the Aave Governance\\n */\\ncontract PoolAddressesProvider is Ownable, IPoolAddressesProvider {\\n  // Identifier of the Aave Market\\n  string private _marketId;\\n\\n  // Map of registered addresses (identifier => registeredAddress)\\n  mapping(bytes32 => address) private _addresses;\\n\\n  // Main identifiers\\n  bytes32 private constant POOL = 'POOL';\\n  bytes32 private constant POOL_CONFIGURATOR = 'POOL_CONFIGURATOR';\\n  bytes32 private constant PRICE_ORACLE = 'PRICE_ORACLE';\\n  bytes32 private constant ACL_MANAGER = 'ACL_MANAGER';\\n  bytes32 private constant ACL_ADMIN = 'ACL_ADMIN';\\n  bytes32 private constant PRICE_ORACLE_SENTINEL = 'PRICE_ORACLE_SENTINEL';\\n  bytes32 private constant DATA_PROVIDER = 'DATA_PROVIDER';\\n\\n  /**\\n   * @dev Constructor.\\n   * @param marketId The identifier of the market.\\n   * @param owner The owner address of this contract.\\n   */\\n  constructor(string memory marketId, address owner) {\\n    _setMarketId(marketId);\\n    transferOwnership(owner);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function getMarketId() external view override returns (string memory) {\\n    return _marketId;\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function setMarketId(string memory newMarketId) external override onlyOwner {\\n    _setMarketId(newMarketId);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function getAddress(bytes32 id) public view override returns (address) {\\n    return _addresses[id];\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function setAddress(bytes32 id, address newAddress) external override onlyOwner {\\n    address oldAddress = _addresses[id];\\n    _addresses[id] = newAddress;\\n    emit AddressSet(id, oldAddress, newAddress);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function setAddressAsProxy(\\n    bytes32 id,\\n    address newImplementationAddress\\n  ) external override onlyOwner {\\n    address proxyAddress = _addresses[id];\\n    address oldImplementationAddress = _getProxyImplementation(id);\\n    _updateImpl(id, newImplementationAddress);\\n    emit AddressSetAsProxy(id, proxyAddress, oldImplementationAddress, newImplementationAddress);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function getPool() external view override returns (address) {\\n    return getAddress(POOL);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function setPoolImpl(address newPoolImpl) external override onlyOwner {\\n    address oldPoolImpl = _getProxyImplementation(POOL);\\n    _updateImpl(POOL, newPoolImpl);\\n    emit PoolUpdated(oldPoolImpl, newPoolImpl);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function getPoolConfigurator() external view override returns (address) {\\n    return getAddress(POOL_CONFIGURATOR);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external override onlyOwner {\\n    address oldPoolConfiguratorImpl = _getProxyImplementation(POOL_CONFIGURATOR);\\n    _updateImpl(POOL_CONFIGURATOR, newPoolConfiguratorImpl);\\n    emit PoolConfiguratorUpdated(oldPoolConfiguratorImpl, newPoolConfiguratorImpl);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function getPriceOracle() external view override returns (address) {\\n    return getAddress(PRICE_ORACLE);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function setPriceOracle(address newPriceOracle) external override onlyOwner {\\n    address oldPriceOracle = _addresses[PRICE_ORACLE];\\n    _addresses[PRICE_ORACLE] = newPriceOracle;\\n    emit PriceOracleUpdated(oldPriceOracle, newPriceOracle);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function getACLManager() external view override returns (address) {\\n    return getAddress(ACL_MANAGER);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function setACLManager(address newAclManager) external override onlyOwner {\\n    address oldAclManager = _addresses[ACL_MANAGER];\\n    _addresses[ACL_MANAGER] = newAclManager;\\n    emit ACLManagerUpdated(oldAclManager, newAclManager);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function getACLAdmin() external view override returns (address) {\\n    return getAddress(ACL_ADMIN);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function setACLAdmin(address newAclAdmin) external override onlyOwner {\\n    address oldAclAdmin = _addresses[ACL_ADMIN];\\n    _addresses[ACL_ADMIN] = newAclAdmin;\\n    emit ACLAdminUpdated(oldAclAdmin, newAclAdmin);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function getPriceOracleSentinel() external view override returns (address) {\\n    return getAddress(PRICE_ORACLE_SENTINEL);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external override onlyOwner {\\n    address oldPriceOracleSentinel = _addresses[PRICE_ORACLE_SENTINEL];\\n    _addresses[PRICE_ORACLE_SENTINEL] = newPriceOracleSentinel;\\n    emit PriceOracleSentinelUpdated(oldPriceOracleSentinel, newPriceOracleSentinel);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function getPoolDataProvider() external view override returns (address) {\\n    return getAddress(DATA_PROVIDER);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProvider\\n  function setPoolDataProvider(address newDataProvider) external override onlyOwner {\\n    address oldDataProvider = _addresses[DATA_PROVIDER];\\n    _addresses[DATA_PROVIDER] = newDataProvider;\\n    emit PoolDataProviderUpdated(oldDataProvider, newDataProvider);\\n  }\\n\\n  /**\\n   * @notice Internal function to update the implementation of a specific proxied component of the protocol.\\n   * @dev If there is no proxy registered with the given identifier, it creates the proxy setting `newAddress`\\n   *   as implementation and calls the initialize() function on the proxy\\n   * @dev If there is already a proxy registered, it just updates the implementation to `newAddress` and\\n   *   calls the initialize() function via upgradeToAndCall() in the proxy\\n   * @param id The id of the proxy to be updated\\n   * @param newAddress The address of the new implementation\\n   */\\n  function _updateImpl(bytes32 id, address newAddress) internal {\\n    address proxyAddress = _addresses[id];\\n    InitializableImmutableAdminUpgradeabilityProxy proxy;\\n    bytes memory params = abi.encodeWithSignature('initialize(address)', address(this));\\n\\n    if (proxyAddress == address(0)) {\\n      proxy = new InitializableImmutableAdminUpgradeabilityProxy(address(this));\\n      _addresses[id] = proxyAddress = address(proxy);\\n      proxy.initialize(newAddress, params);\\n      emit ProxyCreated(id, proxyAddress, newAddress);\\n    } else {\\n      proxy = InitializableImmutableAdminUpgradeabilityProxy(payable(proxyAddress));\\n      proxy.upgradeToAndCall(newAddress, params);\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the identifier of the Aave market.\\n   * @param newMarketId The new id of the market\\n   */\\n  function _setMarketId(string memory newMarketId) internal {\\n    string memory oldMarketId = _marketId;\\n    _marketId = newMarketId;\\n    emit MarketIdSet(oldMarketId, newMarketId);\\n  }\\n\\n  /**\\n   * @notice Returns the the implementation contract of the proxy contract by its identifier.\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @dev It reverts if the registered address with the given id is not `InitializableImmutableAdminUpgradeabilityProxy`\\n   * @param id The id\\n   * @return The address of the implementation contract\\n   */\\n  function _getProxyImplementation(bytes32 id) internal returns (address) {\\n    address proxyAddress = _addresses[id];\\n    if (proxyAddress == address(0)) {\\n      return address(0);\\n    } else {\\n      address payable payableProxyAddress = payable(proxyAddress);\\n      return InitializableImmutableAdminUpgradeabilityProxy(payableProxyAddress).implementation();\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xa3e001fb534cd318159374e8736ce1ce45afd08246e3fe6ce78ec85dd6281db0\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {BaseUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title BaseImmutableAdminUpgradeabilityProxy\\n * @author Aave, inspired by the OpenZeppelin upgradeability proxy pattern\\n * @notice This contract combines an upgradeability proxy with an authorization\\n * mechanism for administrative tasks.\\n * @dev The admin role is stored in an immutable, which helps saving transactions costs\\n * All external functions in this contract must be guarded by the\\n * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\\n * feature proposal that would enable this to be done automatically.\\n */\\ncontract BaseImmutableAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  address internal immutable _admin;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param admin The address of the admin\\n   */\\n  constructor(address admin) {\\n    _admin = admin;\\n  }\\n\\n  modifier ifAdmin() {\\n    if (msg.sender == _admin) {\\n      _;\\n    } else {\\n      _fallback();\\n    }\\n  }\\n\\n  /**\\n   * @notice Return the admin address\\n   * @return The address of the proxy admin.\\n   */\\n  function admin() external ifAdmin returns (address) {\\n    return _admin;\\n  }\\n\\n  /**\\n   * @notice Return the implementation address\\n   * @return The address of the implementation.\\n   */\\n  function implementation() external ifAdmin returns (address) {\\n    return _implementation();\\n  }\\n\\n  /**\\n   * @notice Upgrade the backing implementation of the proxy.\\n   * @dev Only the admin can call this function.\\n   * @param newImplementation The address of the new implementation.\\n   */\\n  function upgradeTo(address newImplementation) external ifAdmin {\\n    _upgradeTo(newImplementation);\\n  }\\n\\n  /**\\n   * @notice Upgrade the backing implementation of the proxy and call a function\\n   * on the new implementation.\\n   * @dev This is useful to initialize the proxied contract.\\n   * @param newImplementation The address of the new implementation.\\n   * @param data Data to send as msg.data in the low level call.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   */\\n  function upgradeToAndCall(\\n    address newImplementation,\\n    bytes calldata data\\n  ) external payable ifAdmin {\\n    _upgradeTo(newImplementation);\\n    (bool success, ) = newImplementation.delegatecall(data);\\n    require(success);\\n  }\\n\\n  /**\\n   * @notice Only fall back when the sender is not the admin.\\n   */\\n  function _willFallback() internal virtual override {\\n    require(msg.sender != _admin, 'Cannot call fallback function from the proxy admin');\\n    super._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0x11d0bbbcb776fc3519b79af975016fa342115cff9e70d982acfe3b7f86683674\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {InitializableUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol';\\nimport {Proxy} from '../../../dependencies/openzeppelin/upgradeability/Proxy.sol';\\nimport {BaseImmutableAdminUpgradeabilityProxy} from './BaseImmutableAdminUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableAdminUpgradeabilityProxy\\n * @author Aave\\n * @dev Extends BaseAdminUpgradeabilityProxy with an initializer function\\n */\\ncontract InitializableImmutableAdminUpgradeabilityProxy is\\n  BaseImmutableAdminUpgradeabilityProxy,\\n  InitializableUpgradeabilityProxy\\n{\\n  /**\\n   * @dev Constructor.\\n   * @param admin The address of the admin\\n   */\\n  constructor(address admin) BaseImmutableAdminUpgradeabilityProxy(admin) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc BaseImmutableAdminUpgradeabilityProxy\\n  function _willFallback() internal override(BaseImmutableAdminUpgradeabilityProxy, Proxy) {\\n    BaseImmutableAdminUpgradeabilityProxy._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0xea2a329a627687f51e7f1240a05406efb208b036054dc6ed5aca217cdc0020f0\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1472,"contract":"@aave/core-v3/contracts/protocol/configuration/PoolAddressesProvider.sol:PoolAddressesProvider","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":9502,"contract":"@aave/core-v3/contracts/protocol/configuration/PoolAddressesProvider.sol:PoolAddressesProvider","label":"_marketId","offset":0,"slot":"1","type":"t_string_storage"},{"astId":9506,"contract":"@aave/core-v3/contracts/protocol/configuration/PoolAddressesProvider.sol:PoolAddressesProvider","label":"_addresses","offset":0,"slot":"2","type":"t_mapping(t_bytes32,t_address)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_bytes32,t_address)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => address)","numberOfBytes":"32","value":"t_address"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"getACLAdmin()":{"notice":"Returns the address of the ACL admin."},"getACLManager()":{"notice":"Returns the address of the ACL manager."},"getAddress(bytes32)":{"notice":"Returns an address by its identifier."},"getMarketId()":{"notice":"Returns the id of the Aave market to which this contract points to."},"getPool()":{"notice":"Returns the address of the Pool proxy."},"getPoolConfigurator()":{"notice":"Returns the address of the PoolConfigurator proxy."},"getPoolDataProvider()":{"notice":"Returns the address of the data provider."},"getPriceOracle()":{"notice":"Returns the address of the price oracle."},"getPriceOracleSentinel()":{"notice":"Returns the address of the price oracle sentinel."},"setACLAdmin(address)":{"notice":"Updates the address of the ACL admin."},"setACLManager(address)":{"notice":"Updates the address of the ACL manager."},"setAddress(bytes32,address)":{"notice":"Sets an address for an id replacing the address saved in the addresses map."},"setAddressAsProxy(bytes32,address)":{"notice":"General function to update the implementation of a proxy registered with certain `id`. If there is no proxy registered, it will instantiate one and set as implementation the `newImplementationAddress`."},"setMarketId(string)":{"notice":"Associates an id with a specific PoolAddressesProvider."},"setPoolConfiguratorImpl(address)":{"notice":"Updates the implementation of the PoolConfigurator, or creates a proxy setting the new `PoolConfigurator` implementation when the function is called for the first time."},"setPoolDataProvider(address)":{"notice":"Updates the address of the data provider."},"setPoolImpl(address)":{"notice":"Updates the implementation of the Pool, or creates a proxy setting the new `pool` implementation when the function is called for the first time."},"setPriceOracle(address)":{"notice":"Updates the address of the price oracle."},"setPriceOracleSentinel(address)":{"notice":"Updates the address of the price oracle sentinel."}},"notice":"Main registry of addresses part of or connected to the protocol, including permissioned roles","version":1}}},"@aave/core-v3/contracts/protocol/configuration/PoolAddressesProviderRegistry.sol":{"PoolAddressesProviderRegistry":{"abi":[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addressesProvider","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"AddressesProviderRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addressesProvider","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"AddressesProviderUnregistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getAddressesProviderAddressById","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addressesProvider","type":"address"}],"name":"getAddressesProviderIdByAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAddressesProvidersList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"provider","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"registerAddressesProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"provider","type":"address"}],"name":"unregisterAddressesProvider","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","details":"Used for indexing purposes of Aave protocol's markets. The id assigned to a PoolAddressesProvider refers to the market it is connected with, for example with `1` for the Aave main market and `2` for the next created.","kind":"dev","methods":{"constructor":{"details":"Constructor.","params":{"owner":"The owner address of this contract."}},"getAddressesProviderAddressById(uint256)":{"params":{"id":"The id of the market"},"returns":{"_0":"The address of the PoolAddressesProvider with the given id or zero address if it is not registered"}},"getAddressesProviderIdByAddress(address)":{"params":{"addressesProvider":"The address of the PoolAddressesProvider"},"returns":{"_0":"The id of the PoolAddressesProvider or 0 if is not registered"}},"getAddressesProvidersList()":{"returns":{"_0":"The list of addresses providers"}},"owner()":{"details":"Returns the address of the current owner."},"registerAddressesProvider(address,uint256)":{"details":"The PoolAddressesProvider must not already be registered in the registryThe id must not be used by an already registered PoolAddressesProvider","params":{"id":"The id for the new PoolAddressesProvider, referring to the market it belongs to","provider":"The address of the new PoolAddressesProvider"}},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"unregisterAddressesProvider(address)":{"params":{"provider":"The PoolAddressesProvider address"}}},"title":"PoolAddressesProviderRegistry","version":1},"evm":{"bytecode":{"functionDebugData":{"@_10111":{"entryPoint":null,"id":10111,"parameterSlots":1,"returnSlots":0},"@_1500":{"entryPoint":null,"id":1500,"parameterSlots":0,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@transferOwnership_1572":{"entryPoint":109,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":378,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1074:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"95:209:201","statements":[{"body":{"nodeType":"YulBlock","src":"141:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"150:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"153:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"143:6:201"},"nodeType":"YulFunctionCall","src":"143:12:201"},"nodeType":"YulExpressionStatement","src":"143:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"116:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"125:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"112:3:201"},"nodeType":"YulFunctionCall","src":"112:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"137:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"108:3:201"},"nodeType":"YulFunctionCall","src":"108:32:201"},"nodeType":"YulIf","src":"105:52:201"},{"nodeType":"YulVariableDeclaration","src":"166:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"185:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"179:5:201"},"nodeType":"YulFunctionCall","src":"179:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"170:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"258:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"267:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"270:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"260:6:201"},"nodeType":"YulFunctionCall","src":"260:12:201"},"nodeType":"YulExpressionStatement","src":"260:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"217:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"228:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"243:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"248:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"239:3:201"},"nodeType":"YulFunctionCall","src":"239:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"252:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"235:3:201"},"nodeType":"YulFunctionCall","src":"235:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"224:3:201"},"nodeType":"YulFunctionCall","src":"224:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"214:2:201"},"nodeType":"YulFunctionCall","src":"214:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"207:6:201"},"nodeType":"YulFunctionCall","src":"207:50:201"},"nodeType":"YulIf","src":"204:70:201"},{"nodeType":"YulAssignment","src":"283:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"293:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"283:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"61:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"72:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"84:6:201","type":""}],"src":"14:290:201"},{"body":{"nodeType":"YulBlock","src":"483:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"500:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"511:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"493:6:201"},"nodeType":"YulFunctionCall","src":"493:21:201"},"nodeType":"YulExpressionStatement","src":"493:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"534:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"545:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"530:3:201"},"nodeType":"YulFunctionCall","src":"530:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"550:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"523:6:201"},"nodeType":"YulFunctionCall","src":"523:30:201"},"nodeType":"YulExpressionStatement","src":"523:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"573:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"584:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"569:3:201"},"nodeType":"YulFunctionCall","src":"569:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"589:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"562:6:201"},"nodeType":"YulFunctionCall","src":"562:62:201"},"nodeType":"YulExpressionStatement","src":"562:62:201"},{"nodeType":"YulAssignment","src":"633:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"645:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"656:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"641:3:201"},"nodeType":"YulFunctionCall","src":"641:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"633:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"460:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"474:4:201","type":""}],"src":"309:356:201"},{"body":{"nodeType":"YulBlock","src":"844:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"861:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"872:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"854:6:201"},"nodeType":"YulFunctionCall","src":"854:21:201"},"nodeType":"YulExpressionStatement","src":"854:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"895:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"906:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"891:3:201"},"nodeType":"YulFunctionCall","src":"891:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"911:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"884:6:201"},"nodeType":"YulFunctionCall","src":"884:30:201"},"nodeType":"YulExpressionStatement","src":"884:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"934:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"945:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"930:3:201"},"nodeType":"YulFunctionCall","src":"930:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"950:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"923:6:201"},"nodeType":"YulFunctionCall","src":"923:62:201"},"nodeType":"YulExpressionStatement","src":"923:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1005:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1016:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1001:3:201"},"nodeType":"YulFunctionCall","src":"1001:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"1021:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"994:6:201"},"nodeType":"YulFunctionCall","src":"994:36:201"},"nodeType":"YulExpressionStatement","src":"994:36:201"},{"nodeType":"YulAssignment","src":"1039:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1051:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1062:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1047:3:201"},"nodeType":"YulFunctionCall","src":"1047:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1039:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"821:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"835:4:201","type":""}],"src":"670:402:201"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b50604051610edf380380610edf83398101604081905261002f9161017a565b600080546001600160a01b03191633908117825560405190918291600080516020610ebf833981519152908290a3506100678161006d565b506101aa565b6000546001600160a01b031633146100cc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b0381166101315760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016100c3565b600080546040516001600160a01b0380851693921691600080516020610ebf83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006020828403121561018c57600080fd5b81516001600160a01b03811681146101a357600080fd5b9392505050565b610d06806101b96000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b14610123578063d0267be714610141578063d258191e14610185578063f2fde38b1461019857600080fd5b80630de267071461008d578063365ccbbf146100a257806357dc0566146100c0578063715018a61461011b575b600080fd5b6100a061009b366004610b02565b6101ab565b005b6100aa610375565b6040516100b79190610b24565b60405180910390f35b6100f66100ce366004610b7e565b60009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b7565b6100a06103e4565b60005473ffffffffffffffffffffffffffffffffffffffff166100f6565b61017761014f366004610b02565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b6040519081526020016100b7565b6100a0610193366004610b97565b6104d4565b6100a06101a6366004610b02565b6107c2565b60005473ffffffffffffffffffffffffffffffffffffffff163314610231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160208181526040928390205483518085019094529183527f3700000000000000000000000000000000000000000000000000000000000000908301526102c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102289190610bc1565b5073ffffffffffffffffffffffffffffffffffffffff8116600081815260016020818152604080842080548086526002845291852080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055948452919052915561032e82610973565b604051819073ffffffffffffffffffffffffffffffffffffffff8416907f254723080701bde71d562cad0e967cef23d86bb27ee842c190a2596820f3b24190600090a35050565b606060038054806020026020016040519081016040528092919081815260200182805480156103da57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103af575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610228565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610228565b60408051808201909152600181527f38000000000000000000000000000000000000000000000000000000000000006020820152816105c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102289190610bc1565b50600081815260026020908152604091829020548251808401909352600183527f38000000000000000000000000000000000000000000000000000000000000009183019190915273ffffffffffffffffffffffffffffffffffffffff1615610657576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102289190610bc1565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020908152604091829020548251808401909352600283527f383600000000000000000000000000000000000000000000000000000000000091830191909152156106ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102289190610bc1565b5073ffffffffffffffffffffffffffffffffffffffff821660008181526001602081815260408084208690558584526002825280842080547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116871790915560038054878752600490945282862084905593830184559284527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90910180549092168417909155518392917fc2e7cc813550ef0e7126cc0571281850ce5df2e9c400acf3589c38e4627f85f191a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610228565b73ffffffffffffffffffffffffffffffffffffffff81166108e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610228565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081208054908290556003549091906109b090600190610c34565b905080821015610a6b576000600382815481106109cf576109cf610c72565b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff9092169250829185908110610a0b57610a0b610c72565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9485161790559290911681526004909152604090208290555b6003805480610a7c57610a7c610ca1565b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610afd57600080fd5b919050565b600060208284031215610b1457600080fd5b610b1d82610ad9565b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610b7257835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610b40565b50909695505050505050565b600060208284031215610b9057600080fd5b5035919050565b60008060408385031215610baa57600080fd5b610bb383610ad9565b946020939093013593505050565b600060208083528351808285015260005b81811015610bee57858101830151858201604001528201610bd2565b81811115610c00576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600082821015610c6d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212206ba914d891a02a1d665ec649554882f3cf0adda5012b106fd01ca7d2c4e968bd64736f6c634300080a00338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xEDF CODESIZE SUB DUP1 PUSH2 0xEDF DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x17A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 DUP3 SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xEBF DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 DUP3 SWAP1 LOG3 POP PUSH2 0x67 DUP2 PUSH2 0x6D JUMP JUMPDEST POP PUSH2 0x1AA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xCC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x131 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xEBF DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 LOG3 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 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x18C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xD06 DUP1 PUSH2 0x1B9 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x88 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x123 JUMPI DUP1 PUSH4 0xD0267BE7 EQ PUSH2 0x141 JUMPI DUP1 PUSH4 0xD258191E EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xDE26707 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x365CCBBF EQ PUSH2 0xA2 JUMPI DUP1 PUSH4 0x57DC0566 EQ PUSH2 0xC0 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x11B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA0 PUSH2 0x9B CALLDATASIZE PUSH1 0x4 PUSH2 0xB02 JUMP JUMPDEST PUSH2 0x1AB JUMP JUMPDEST STOP JUMPDEST PUSH2 0xAA PUSH2 0x375 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB7 SWAP2 SWAP1 PUSH2 0xB24 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xF6 PUSH2 0xCE CALLDATASIZE PUSH1 0x4 PUSH2 0xB7E JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB7 JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x3E4 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xF6 JUMP JUMPDEST PUSH2 0x177 PUSH2 0x14F CALLDATASIZE PUSH1 0x4 PUSH2 0xB02 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB7 JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x193 CALLDATASIZE PUSH1 0x4 PUSH2 0xB97 JUMP JUMPDEST PUSH2 0x4D4 JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x1A6 CALLDATASIZE PUSH1 0x4 PUSH2 0xB02 JUMP JUMPDEST PUSH2 0x7C2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x231 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 SLOAD DUP4 MLOAD DUP1 DUP6 ADD SWAP1 SWAP5 MSTORE SWAP2 DUP4 MSTORE PUSH32 0x3700000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP4 ADD MSTORE PUSH2 0x2C2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x228 SWAP2 SWAP1 PUSH2 0xBC1 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP1 SLOAD DUP1 DUP7 MSTORE PUSH1 0x2 DUP5 MSTORE SWAP2 DUP6 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE SWAP5 DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP2 SSTORE PUSH2 0x32E DUP3 PUSH2 0x973 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x254723080701BDE71D562CAD0E967CEF23D86BB27EE842C190A2596820F3B241 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x3DA JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3AF JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x465 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x228 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x555 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x228 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3800000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 PUSH2 0x5C1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x228 SWAP2 SWAP1 PUSH2 0xBC1 JUMP JUMPDEST POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x1 DUP4 MSTORE PUSH32 0x3800000000000000000000000000000000000000000000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x657 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x228 SWAP2 SWAP1 PUSH2 0xBC1 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP4 MSTORE PUSH32 0x3836000000000000000000000000000000000000000000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ISZERO PUSH2 0x6EE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x228 SWAP2 SWAP1 PUSH2 0xBC1 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP6 DUP5 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND DUP8 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD DUP8 DUP8 MSTORE PUSH1 0x4 SWAP1 SWAP5 MSTORE DUP3 DUP7 KECCAK256 DUP5 SWAP1 SSTORE SWAP4 DUP4 ADD DUP5 SSTORE SWAP3 DUP5 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 SWAP2 ADD DUP1 SLOAD SWAP1 SWAP3 AND DUP5 OR SWAP1 SWAP2 SSTORE MLOAD DUP4 SWAP3 SWAP2 PUSH32 0xC2E7CC813550EF0E7126CC0571281850CE5DF2E9C400ACF3589C38E4627F85F1 SWAP2 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x843 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x228 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x8E6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x228 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x3 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x9B0 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0xC34 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT ISZERO PUSH2 0xA6B JUMPI PUSH1 0x0 PUSH1 0x3 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x9CF JUMPI PUSH2 0x9CF PUSH2 0xC72 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x3 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 POP DUP3 SWAP2 DUP6 SWAP1 DUP2 LT PUSH2 0xA0B JUMPI PUSH2 0xA0B PUSH2 0xC72 JUMP 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 0x4 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x3 DUP1 SLOAD DUP1 PUSH2 0xA7C JUMPI PUSH2 0xA7C PUSH2 0xCA1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE ADD SWAP1 SSTORE POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xAFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB1D DUP3 PUSH2 0xAD9 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB72 JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xB40 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xBAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBB3 DUP4 PUSH2 0xAD9 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xBEE JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xBD2 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xC00 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0xC6D JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH12 0xA914D891A02A1D665EC64955 BASEFEE DUP3 RETURN 0xCF EXP 0xDD 0xA5 ADD 0x2B LT PUSH16 0xD01CA7D2C4E968BD64736F6C63430008 EXP STOP CALLER DUP12 0xE0 SMOD SWAP13 MSTORE8 AND MSIZE EQ SGT DIFFICULTY 0xCD 0x1F 0xD0 LOG4 CALLCODE DUP5 NOT 0x49 PUSH32 0x9722A3DAAFE3B4186F6B6457E000000000000000000000000000000000000000 ","sourceMap":"658:3439:68:-:0;;;1299:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;835:17:11;873:18;;-1:-1:-1;;;;;;873:18:11;678:10:4;873:18:11;;;;;902:43;;678:10:4;;;;-1:-1:-1;;;;;;;;;;;902:43:11;835:17;;902:43;-1:-1:-1;1332:24:68;1350:5;1332:17;:24::i;:::-;1299:62;658:3439;;1875:226:11;1204:6;;-1:-1:-1;;;;;1204:6:11;678:10:4;1204:22:11;1196:67;;;;-1:-1:-1;;;1196:67:11;;511:2:201;1196:67:11;;;493:21:201;;;530:18;;;523:30;589:34;569:18;;;562:62;641:18;;1196:67:11;;;;;;;;;-1:-1:-1;;;;;1959:22:11;::::1;1951:73;;;::::0;-1:-1:-1;;;1951:73:11;;872:2:201;1951:73:11::1;::::0;::::1;854:21:201::0;911:2;891:18;;;884:30;950:34;930:18;;;923:62;-1:-1:-1;;;1001:18:201;;;994:36;1047:19;;1951:73:11::1;670:402:201::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;-1:-1:-1;;;;;2035:38:11;;::::1;::::0;2056:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;2035:38:11;::::1;2079:6;:17:::0;;-1:-1:-1;;;;;;2079:17:11::1;-1:-1:-1::0;;;;;2079:17:11;;;::::1;::::0;;;::::1;::::0;;1875:226::o;14:290:201:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:201;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:201:o;670:402::-;658:3439:68;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_addToAddressesProvidersList_10284":{"entryPoint":null,"id":10284,"parameterSlots":1,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_removeFromAddressesProvidersList_10338":{"entryPoint":2419,"id":10338,"parameterSlots":1,"returnSlots":0},"@getAddressesProviderAddressById_10264":{"entryPoint":null,"id":10264,"parameterSlots":1,"returnSlots":1},"@getAddressesProviderIdByAddress_10250":{"entryPoint":null,"id":10250,"parameterSlots":1,"returnSlots":1},"@getAddressesProvidersList_10122":{"entryPoint":885,"id":10122,"parameterSlots":0,"returnSlots":1},"@owner_1509":{"entryPoint":null,"id":1509,"parameterSlots":0,"returnSlots":1},"@registerAddressesProvider_10186":{"entryPoint":1236,"id":10186,"parameterSlots":2,"returnSlots":0},"@renounceOwnership_1544":{"entryPoint":996,"id":1544,"parameterSlots":0,"returnSlots":0},"@transferOwnership_1572":{"entryPoint":1986,"id":1572,"parameterSlots":1,"returnSlots":0},"@unregisterAddressesProvider_10236":{"entryPoint":427,"id":10236,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":2777,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":2818,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":2967,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256":{"entryPoint":2942,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":2852,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":3009,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":3124,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x31":{"entryPoint":3233,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":3186,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:4037:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:147:201","statements":[{"nodeType":"YulAssignment","src":"73:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:201"},"nodeType":"YulFunctionCall","src":"82:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:201"}]},{"body":{"nodeType":"YulBlock","src":"188:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"197:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"200:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"190:6:201"},"nodeType":"YulFunctionCall","src":"190:12:201"},"nodeType":"YulExpressionStatement","src":"190:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"142:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:201"},"nodeType":"YulFunctionCall","src":"131:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:201"},"nodeType":"YulFunctionCall","src":"121:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:201"},"nodeType":"YulFunctionCall","src":"114:73:201"},"nodeType":"YulIf","src":"111:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:201","type":""}],"src":"14:196:201"},{"body":{"nodeType":"YulBlock","src":"285:116:201","statements":[{"body":{"nodeType":"YulBlock","src":"331:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"340:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"343:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"333:6:201"},"nodeType":"YulFunctionCall","src":"333:12:201"},"nodeType":"YulExpressionStatement","src":"333:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"306:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"315:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"302:3:201"},"nodeType":"YulFunctionCall","src":"302:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"327:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"298:3:201"},"nodeType":"YulFunctionCall","src":"298:32:201"},"nodeType":"YulIf","src":"295:52:201"},{"nodeType":"YulAssignment","src":"356:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"385:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"366:18:201"},"nodeType":"YulFunctionCall","src":"366:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"356:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"251:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"262:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"274:6:201","type":""}],"src":"215:186:201"},{"body":{"nodeType":"YulBlock","src":"557:530:201","statements":[{"nodeType":"YulVariableDeclaration","src":"567:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"577:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"571:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"588:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"606:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"617:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"602:3:201"},"nodeType":"YulFunctionCall","src":"602:18:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"592:6:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"636:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"647:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"629:6:201"},"nodeType":"YulFunctionCall","src":"629:21:201"},"nodeType":"YulExpressionStatement","src":"629:21:201"},{"nodeType":"YulVariableDeclaration","src":"659:17:201","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"670:6:201"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"663:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"685:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"705:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"699:5:201"},"nodeType":"YulFunctionCall","src":"699:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"689:6:201","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"728:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"736:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"721:6:201"},"nodeType":"YulFunctionCall","src":"721:22:201"},"nodeType":"YulExpressionStatement","src":"721:22:201"},{"nodeType":"YulAssignment","src":"752:25:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"763:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"774:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"759:3:201"},"nodeType":"YulFunctionCall","src":"759:18:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"752:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"786:29:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"804:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"812:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"800:3:201"},"nodeType":"YulFunctionCall","src":"800:15:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"790:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"824:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"833:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"828:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"892:169:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"913:3:201"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"928:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"922:5:201"},"nodeType":"YulFunctionCall","src":"922:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"937:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"918:3:201"},"nodeType":"YulFunctionCall","src":"918:62:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"906:6:201"},"nodeType":"YulFunctionCall","src":"906:75:201"},"nodeType":"YulExpressionStatement","src":"906:75:201"},{"nodeType":"YulAssignment","src":"994:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1005:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1010:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1001:3:201"},"nodeType":"YulFunctionCall","src":"1001:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"994:3:201"}]},{"nodeType":"YulAssignment","src":"1026:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"1040:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1048:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1036:3:201"},"nodeType":"YulFunctionCall","src":"1036:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"1026:6:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"854:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"857:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"851:2:201"},"nodeType":"YulFunctionCall","src":"851:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"865:18:201","statements":[{"nodeType":"YulAssignment","src":"867:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"876:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"879:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"872:3:201"},"nodeType":"YulFunctionCall","src":"872:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"867:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"847:3:201","statements":[]},"src":"843:218:201"},{"nodeType":"YulAssignment","src":"1070:11:201","value":{"name":"pos","nodeType":"YulIdentifier","src":"1078:3:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1070:4:201"}]}]},"name":"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"526:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"537:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"548:4:201","type":""}],"src":"406:681:201"},{"body":{"nodeType":"YulBlock","src":"1162:110:201","statements":[{"body":{"nodeType":"YulBlock","src":"1208:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1217:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1220:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1210:6:201"},"nodeType":"YulFunctionCall","src":"1210:12:201"},"nodeType":"YulExpressionStatement","src":"1210:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1183:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1192:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1179:3:201"},"nodeType":"YulFunctionCall","src":"1179:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1204:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1175:3:201"},"nodeType":"YulFunctionCall","src":"1175:32:201"},"nodeType":"YulIf","src":"1172:52:201"},{"nodeType":"YulAssignment","src":"1233:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1256:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1243:12:201"},"nodeType":"YulFunctionCall","src":"1243:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1233:6:201"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1128:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1139:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1151:6:201","type":""}],"src":"1092:180:201"},{"body":{"nodeType":"YulBlock","src":"1378:125:201","statements":[{"nodeType":"YulAssignment","src":"1388:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1400:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1411:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1396:3:201"},"nodeType":"YulFunctionCall","src":"1396:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1388:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1430:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1445:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1453:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1441:3:201"},"nodeType":"YulFunctionCall","src":"1441:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1423:6:201"},"nodeType":"YulFunctionCall","src":"1423:74:201"},"nodeType":"YulExpressionStatement","src":"1423:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1347:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1358:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1369:4:201","type":""}],"src":"1277:226:201"},{"body":{"nodeType":"YulBlock","src":"1609:76:201","statements":[{"nodeType":"YulAssignment","src":"1619:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1631:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1642:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1627:3:201"},"nodeType":"YulFunctionCall","src":"1627:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1619:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1661:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"1672:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1654:6:201"},"nodeType":"YulFunctionCall","src":"1654:25:201"},"nodeType":"YulExpressionStatement","src":"1654:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1578:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1589:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1600:4:201","type":""}],"src":"1508:177:201"},{"body":{"nodeType":"YulBlock","src":"1777:167:201","statements":[{"body":{"nodeType":"YulBlock","src":"1823:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1832:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1835:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1825:6:201"},"nodeType":"YulFunctionCall","src":"1825:12:201"},"nodeType":"YulExpressionStatement","src":"1825:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1798:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1807:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1794:3:201"},"nodeType":"YulFunctionCall","src":"1794:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1819:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1790:3:201"},"nodeType":"YulFunctionCall","src":"1790:32:201"},"nodeType":"YulIf","src":"1787:52:201"},{"nodeType":"YulAssignment","src":"1848:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1877:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1858:18:201"},"nodeType":"YulFunctionCall","src":"1858:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1848:6:201"}]},{"nodeType":"YulAssignment","src":"1896:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1923:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1934:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1919:3:201"},"nodeType":"YulFunctionCall","src":"1919:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1906:12:201"},"nodeType":"YulFunctionCall","src":"1906:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1896:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1735:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1746:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1758:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1766:6:201","type":""}],"src":"1690:254:201"},{"body":{"nodeType":"YulBlock","src":"2123:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2140:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2151:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2133:6:201"},"nodeType":"YulFunctionCall","src":"2133:21:201"},"nodeType":"YulExpressionStatement","src":"2133:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2174:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2185:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2170:3:201"},"nodeType":"YulFunctionCall","src":"2170:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2190:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2163:6:201"},"nodeType":"YulFunctionCall","src":"2163:30:201"},"nodeType":"YulExpressionStatement","src":"2163:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2213:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2224:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2209:3:201"},"nodeType":"YulFunctionCall","src":"2209:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"2229:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2202:6:201"},"nodeType":"YulFunctionCall","src":"2202:62:201"},"nodeType":"YulExpressionStatement","src":"2202:62:201"},{"nodeType":"YulAssignment","src":"2273:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2285:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2296:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2281:3:201"},"nodeType":"YulFunctionCall","src":"2281:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2273:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2100:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2114:4:201","type":""}],"src":"1949:356:201"},{"body":{"nodeType":"YulBlock","src":"2431:535:201","statements":[{"nodeType":"YulVariableDeclaration","src":"2441:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2451:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2445:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2469:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2480:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2462:6:201"},"nodeType":"YulFunctionCall","src":"2462:21:201"},"nodeType":"YulExpressionStatement","src":"2462:21:201"},{"nodeType":"YulVariableDeclaration","src":"2492:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2512:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2506:5:201"},"nodeType":"YulFunctionCall","src":"2506:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2496:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2539:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2550:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2535:3:201"},"nodeType":"YulFunctionCall","src":"2535:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"2555:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2528:6:201"},"nodeType":"YulFunctionCall","src":"2528:34:201"},"nodeType":"YulExpressionStatement","src":"2528:34:201"},{"nodeType":"YulVariableDeclaration","src":"2571:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2580:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"2575:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2640:90:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2669:9:201"},{"name":"i","nodeType":"YulIdentifier","src":"2680:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2665:3:201"},"nodeType":"YulFunctionCall","src":"2665:17:201"},{"kind":"number","nodeType":"YulLiteral","src":"2684:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2661:3:201"},"nodeType":"YulFunctionCall","src":"2661:26:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2703:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"2711:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2699:3:201"},"nodeType":"YulFunctionCall","src":"2699:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2715:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2695:3:201"},"nodeType":"YulFunctionCall","src":"2695:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2689:5:201"},"nodeType":"YulFunctionCall","src":"2689:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2654:6:201"},"nodeType":"YulFunctionCall","src":"2654:66:201"},"nodeType":"YulExpressionStatement","src":"2654:66:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2601:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"2604:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2598:2:201"},"nodeType":"YulFunctionCall","src":"2598:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2612:19:201","statements":[{"nodeType":"YulAssignment","src":"2614:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2623:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2626:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2619:3:201"},"nodeType":"YulFunctionCall","src":"2619:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"2614:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"2594:3:201","statements":[]},"src":"2590:140:201"},{"body":{"nodeType":"YulBlock","src":"2764:66:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2793:9:201"},{"name":"length","nodeType":"YulIdentifier","src":"2804:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2789:3:201"},"nodeType":"YulFunctionCall","src":"2789:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"2813:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2785:3:201"},"nodeType":"YulFunctionCall","src":"2785:31:201"},{"kind":"number","nodeType":"YulLiteral","src":"2818:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2778:6:201"},"nodeType":"YulFunctionCall","src":"2778:42:201"},"nodeType":"YulExpressionStatement","src":"2778:42:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2745:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"2748:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2742:2:201"},"nodeType":"YulFunctionCall","src":"2742:13:201"},"nodeType":"YulIf","src":"2739:91:201"},{"nodeType":"YulAssignment","src":"2839:121:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2855:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2874:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2882:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2870:3:201"},"nodeType":"YulFunctionCall","src":"2870:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"2887:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2866:3:201"},"nodeType":"YulFunctionCall","src":"2866:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2851:3:201"},"nodeType":"YulFunctionCall","src":"2851:104:201"},{"kind":"number","nodeType":"YulLiteral","src":"2957:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2847:3:201"},"nodeType":"YulFunctionCall","src":"2847:113:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2839:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2400:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2411:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2422:4:201","type":""}],"src":"2310:656:201"},{"body":{"nodeType":"YulBlock","src":"3145:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3162:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3173:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3155:6:201"},"nodeType":"YulFunctionCall","src":"3155:21:201"},"nodeType":"YulExpressionStatement","src":"3155:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3196:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3207:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3192:3:201"},"nodeType":"YulFunctionCall","src":"3192:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"3212:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3185:6:201"},"nodeType":"YulFunctionCall","src":"3185:30:201"},"nodeType":"YulExpressionStatement","src":"3185:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3235:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3246:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3231:3:201"},"nodeType":"YulFunctionCall","src":"3231:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"3251:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3224:6:201"},"nodeType":"YulFunctionCall","src":"3224:62:201"},"nodeType":"YulExpressionStatement","src":"3224:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3306:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3317:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3302:3:201"},"nodeType":"YulFunctionCall","src":"3302:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"3322:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3295:6:201"},"nodeType":"YulFunctionCall","src":"3295:36:201"},"nodeType":"YulExpressionStatement","src":"3295:36:201"},{"nodeType":"YulAssignment","src":"3340:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3352:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3363:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3348:3:201"},"nodeType":"YulFunctionCall","src":"3348:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3340:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3122:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3136:4:201","type":""}],"src":"2971:402:201"},{"body":{"nodeType":"YulBlock","src":"3427:230:201","statements":[{"body":{"nodeType":"YulBlock","src":"3457:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3478:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3481:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3471:6:201"},"nodeType":"YulFunctionCall","src":"3471:88:201"},"nodeType":"YulExpressionStatement","src":"3471:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3579:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3582:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3572:6:201"},"nodeType":"YulFunctionCall","src":"3572:15:201"},"nodeType":"YulExpressionStatement","src":"3572:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3607:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3610:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3600:6:201"},"nodeType":"YulFunctionCall","src":"3600:15:201"},"nodeType":"YulExpressionStatement","src":"3600:15:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3443:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"3446:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3440:2:201"},"nodeType":"YulFunctionCall","src":"3440:8:201"},"nodeType":"YulIf","src":"3437:188:201"},{"nodeType":"YulAssignment","src":"3634:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3646:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"3649:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3642:3:201"},"nodeType":"YulFunctionCall","src":"3642:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"3634:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3409:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"3412:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"3418:4:201","type":""}],"src":"3378:279:201"},{"body":{"nodeType":"YulBlock","src":"3694:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3711:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3714:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3704:6:201"},"nodeType":"YulFunctionCall","src":"3704:88:201"},"nodeType":"YulExpressionStatement","src":"3704:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3808:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3811:4:201","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3801:6:201"},"nodeType":"YulFunctionCall","src":"3801:15:201"},"nodeType":"YulExpressionStatement","src":"3801:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3832:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3835:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3825:6:201"},"nodeType":"YulFunctionCall","src":"3825:15:201"},"nodeType":"YulExpressionStatement","src":"3825:15:201"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"3662:184:201"},{"body":{"nodeType":"YulBlock","src":"3883:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3900:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3903:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3893:6:201"},"nodeType":"YulFunctionCall","src":"3893:88:201"},"nodeType":"YulExpressionStatement","src":"3893:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3997:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4000:4:201","type":"","value":"0x31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3990:6:201"},"nodeType":"YulFunctionCall","src":"3990:15:201"},"nodeType":"YulExpressionStatement","src":"3990:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4021:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4024:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4014:6:201"},"nodeType":"YulFunctionCall","src":"4014:15:201"},"nodeType":"YulExpressionStatement","src":"4014:15:201"}]},"name":"panic_error_0x31","nodeType":"YulFunctionDefinition","src":"3851:184:201"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        diff := sub(x, y)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function panic_error_0x31()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x31)\n        revert(0, 0x24)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b14610123578063d0267be714610141578063d258191e14610185578063f2fde38b1461019857600080fd5b80630de267071461008d578063365ccbbf146100a257806357dc0566146100c0578063715018a61461011b575b600080fd5b6100a061009b366004610b02565b6101ab565b005b6100aa610375565b6040516100b79190610b24565b60405180910390f35b6100f66100ce366004610b7e565b60009081526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b7565b6100a06103e4565b60005473ffffffffffffffffffffffffffffffffffffffff166100f6565b61017761014f366004610b02565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b6040519081526020016100b7565b6100a0610193366004610b97565b6104d4565b6100a06101a6366004610b02565b6107c2565b60005473ffffffffffffffffffffffffffffffffffffffff163314610231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160208181526040928390205483518085019094529183527f3700000000000000000000000000000000000000000000000000000000000000908301526102c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102289190610bc1565b5073ffffffffffffffffffffffffffffffffffffffff8116600081815260016020818152604080842080548086526002845291852080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055948452919052915561032e82610973565b604051819073ffffffffffffffffffffffffffffffffffffffff8416907f254723080701bde71d562cad0e967cef23d86bb27ee842c190a2596820f3b24190600090a35050565b606060038054806020026020016040519081016040528092919081815260200182805480156103da57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103af575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610228565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610228565b60408051808201909152600181527f38000000000000000000000000000000000000000000000000000000000000006020820152816105c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102289190610bc1565b50600081815260026020908152604091829020548251808401909352600183527f38000000000000000000000000000000000000000000000000000000000000009183019190915273ffffffffffffffffffffffffffffffffffffffff1615610657576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102289190610bc1565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020908152604091829020548251808401909352600283527f383600000000000000000000000000000000000000000000000000000000000091830191909152156106ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102289190610bc1565b5073ffffffffffffffffffffffffffffffffffffffff821660008181526001602081815260408084208690558584526002825280842080547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116871790915560038054878752600490945282862084905593830184559284527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90910180549092168417909155518392917fc2e7cc813550ef0e7126cc0571281850ce5df2e9c400acf3589c38e4627f85f191a35050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610228565b73ffffffffffffffffffffffffffffffffffffffff81166108e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610228565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081208054908290556003549091906109b090600190610c34565b905080821015610a6b576000600382815481106109cf576109cf610c72565b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff9092169250829185908110610a0b57610a0b610c72565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9485161790559290911681526004909152604090208290555b6003805480610a7c57610a7c610ca1565b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610afd57600080fd5b919050565b600060208284031215610b1457600080fd5b610b1d82610ad9565b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610b7257835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610b40565b50909695505050505050565b600060208284031215610b9057600080fd5b5035919050565b60008060408385031215610baa57600080fd5b610bb383610ad9565b946020939093013593505050565b600060208083528351808285015260005b81811015610bee57858101830151858201604001528201610bd2565b81811115610c00576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600082821015610c6d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212206ba914d891a02a1d665ec649554882f3cf0adda5012b106fd01ca7d2c4e968bd64736f6c634300080a0033","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 0x8DA5CB5B GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x123 JUMPI DUP1 PUSH4 0xD0267BE7 EQ PUSH2 0x141 JUMPI DUP1 PUSH4 0xD258191E EQ PUSH2 0x185 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x198 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xDE26707 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x365CCBBF EQ PUSH2 0xA2 JUMPI DUP1 PUSH4 0x57DC0566 EQ PUSH2 0xC0 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x11B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA0 PUSH2 0x9B CALLDATASIZE PUSH1 0x4 PUSH2 0xB02 JUMP JUMPDEST PUSH2 0x1AB JUMP JUMPDEST STOP JUMPDEST PUSH2 0xAA PUSH2 0x375 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB7 SWAP2 SWAP1 PUSH2 0xB24 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xF6 PUSH2 0xCE CALLDATASIZE PUSH1 0x4 PUSH2 0xB7E JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB7 JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x3E4 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xF6 JUMP JUMPDEST PUSH2 0x177 PUSH2 0x14F CALLDATASIZE PUSH1 0x4 PUSH2 0xB02 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB7 JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x193 CALLDATASIZE PUSH1 0x4 PUSH2 0xB97 JUMP JUMPDEST PUSH2 0x4D4 JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x1A6 CALLDATASIZE PUSH1 0x4 PUSH2 0xB02 JUMP JUMPDEST PUSH2 0x7C2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x231 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 SLOAD DUP4 MLOAD DUP1 DUP6 ADD SWAP1 SWAP5 MSTORE SWAP2 DUP4 MSTORE PUSH32 0x3700000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP4 ADD MSTORE PUSH2 0x2C2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x228 SWAP2 SWAP1 PUSH2 0xBC1 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP1 SLOAD DUP1 DUP7 MSTORE PUSH1 0x2 DUP5 MSTORE SWAP2 DUP6 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE SWAP5 DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP2 SSTORE PUSH2 0x32E DUP3 PUSH2 0x973 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x254723080701BDE71D562CAD0E967CEF23D86BB27EE842C190A2596820F3B241 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x3DA JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3AF JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x465 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x228 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x555 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x228 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3800000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 PUSH2 0x5C1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x228 SWAP2 SWAP1 PUSH2 0xBC1 JUMP JUMPDEST POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x1 DUP4 MSTORE PUSH32 0x3800000000000000000000000000000000000000000000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x657 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x228 SWAP2 SWAP1 PUSH2 0xBC1 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP4 MSTORE PUSH32 0x3836000000000000000000000000000000000000000000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ISZERO PUSH2 0x6EE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x228 SWAP2 SWAP1 PUSH2 0xBC1 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP7 SWAP1 SSTORE DUP6 DUP5 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 DUP5 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND DUP8 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD DUP8 DUP8 MSTORE PUSH1 0x4 SWAP1 SWAP5 MSTORE DUP3 DUP7 KECCAK256 DUP5 SWAP1 SSTORE SWAP4 DUP4 ADD DUP5 SSTORE SWAP3 DUP5 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 SWAP2 ADD DUP1 SLOAD SWAP1 SWAP3 AND DUP5 OR SWAP1 SWAP2 SSTORE MLOAD DUP4 SWAP3 SWAP2 PUSH32 0xC2E7CC813550EF0E7126CC0571281850CE5DF2E9C400ACF3589C38E4627F85F1 SWAP2 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x843 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x228 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x8E6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x228 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD SWAP1 DUP3 SWAP1 SSTORE PUSH1 0x3 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x9B0 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0xC34 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 LT ISZERO PUSH2 0xA6B JUMPI PUSH1 0x0 PUSH1 0x3 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x9CF JUMPI PUSH2 0x9CF PUSH2 0xC72 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x3 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 POP DUP3 SWAP2 DUP6 SWAP1 DUP2 LT PUSH2 0xA0B JUMPI PUSH2 0xA0B PUSH2 0xC72 JUMP 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 0x4 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x3 DUP1 SLOAD DUP1 PUSH2 0xA7C JUMPI PUSH2 0xA7C PUSH2 0xCA1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE ADD SWAP1 SSTORE POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xAFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB1D DUP3 PUSH2 0xAD9 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB72 JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xB40 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB90 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xBAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBB3 DUP4 PUSH2 0xAD9 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xBEE JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xBD2 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xC00 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0xC6D JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH12 0xA914D891A02A1D665EC64955 BASEFEE DUP3 RETURN 0xCF EXP 0xDD 0xA5 ADD 0x2B LT PUSH16 0xD01CA7D2C4E968BD64736F6C63430008 EXP STOP CALLER ","sourceMap":"658:3439:68:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2176:434;;;;;;:::i;:::-;;:::i;:::-;;1414:128;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2892:138;;;;;;:::i;:::-;2977:7;2999:26;;;:22;:26;;;;;;;;;2892:138;;;;1453:42:201;1441:55;;;1423:74;;1411:2;1396:18;2892:138:68;1277:226:201;1601:135:11;;;:::i;1018:71::-;1056:7;1078:6;;;1018:71;;2663:176:68;;;;;;:::i;:::-;2793:41;;2771:7;2793:41;;;:22;:41;;;;;;;2663:176;;;;1654:25:201;;;1642:2;1627:18;2663:176:68;1508:177:201;1595:528:68;;;;;;:::i;:::-;;:::i;1875:226:11:-;;;;;;:::i;:::-;;:::i;2176:434:68:-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;2151:2:201;1196:67:11;;;2133:21:201;;;2170:18;;;2163:30;2229:34;2209:18;;;2202:62;2281:18;;1196:67:11;;;;;;;;;2273:32:68::1;::::0;::::1;;::::0;;;:22:::1;:32;::::0;;;;;;;;;2312:40;;;;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;2265:88:::1;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;2375:32:68::1;::::0;::::1;2359:13;2375:32:::0;;;:22:::1;:32;::::0;;;;;;;;;2413:29;;;:22:::1;:29:::0;;;;;:42;;;::::1;::::0;;2461:32;;;;;;:36;;2504:43:::1;2398:8:::0;2504:33:::1;:43::i;:::-;2559:46;::::0;2599:5;;2559:46:::1;::::0;::::1;::::0;::::1;::::0;;;::::1;2259:351;2176:434:::0;:::o;1414:128::-;1483:16;1514:23;1507:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1414:128;:::o;1601:135:11:-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;2151:2:201;1196:67:11;;;2133:21:201;;;2170:18;;;2163:30;2229:34;2209:18;;;2202:62;2281:18;;1196:67:11;1949:356:201;1196:67:11;1703:1:::1;1687:6:::0;;1666:40:::1;::::0;::::1;1687:6:::0;;::::1;::::0;1666:40:::1;::::0;1703:1;;1666:40:::1;1729:1;1712:19:::0;;;::::1;::::0;;1601:135::o;1595:528:68:-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;2151:2:201;1196:67:11;;;2133:21:201;;;2170:18;;;2163:30;2229:34;2209:18;;;2202:62;2281:18;;1196:67:11;1949:356:201;1196:67:11;1711:36:68::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;1702:7;1694:54:::1;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;1800:1:68::1;1762:26:::0;;;:22:::1;:26;::::0;;;;;;;;;1804:36;;;;::::1;::::0;;;1762:26;1804:36;;::::1;::::0;;::::1;::::0;;;;1762:40:::1;:26;:40:::0;1754:87:::1;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;1855:32:68::1;::::0;::::1;;::::0;;;:22:::1;:32;::::0;;;;;;;;;1894:39;;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;1855:37;1847:87:::1;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;1941:32:68::1;::::0;::::1;;::::0;;;:22:::1;:32;::::0;;;;;;;:37;;;1984:26;;;:22:::1;:26:::0;;;;;:37;;;;;::::1;::::0;::::1;::::0;;;3280:23;:30;;3241:36;;;:26;:36;;;;;;:69;;;3316:38;;;;;;;;;;;;;;;;;;;;;;2077:41;1941:37;;:32;2077:41:::1;::::0;::::1;1595:528:::0;;:::o;1875:226:11:-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;2151:2:201;1196:67:11;;;2133:21:201;;;2170:18;;;2163:30;2229:34;2209:18;;;2202:62;2281:18;;1196:67:11;1949:356:201;1196:67:11;1959:22:::1;::::0;::::1;1951:73;;;::::0;::::1;::::0;;3173:2:201;1951:73:11::1;::::0;::::1;3155:21:201::0;3212:2;3192:18;;;3185:30;3251:34;3231:18;;;3224:62;3322:8;3302:18;;;3295:36;3348:19;;1951:73:11::1;2971:402:201::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;::::1;::::0;;::::1;::::0;2056:6;::::1;::::0;2035:38:::1;::::0;::::1;2079:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1875:226::o;3504:591:68:-;3596:36;;;3580:13;3596:36;;;:26;:36;;;;;;;3639:40;;;;3812:23;:30;3596:36;;3580:13;3812:34;;-1:-1:-1;;3812:34:68;:::i;:::-;3792:54;;3864:9;3856:5;:17;3852:204;;;3883:20;3906:23;3930:9;3906:34;;;;;;;;:::i;:::-;;;;;;;;;;;3948:23;:30;;3906:34;;;;;-1:-1:-1;3906:34:68;;3972:5;;3948:30;;;;;;:::i;:::-;;;;;;;;;;;;;:45;;;;;;;;;;;4001:40;;;;;;:26;:40;;;;;;:48;;;3852:204;4061:23;:29;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3504:591:68:o;14:196:201:-;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:186::-;274:6;327:2;315:9;306:7;302:23;298:32;295:52;;;343:1;340;333:12;295:52;366:29;385:9;366:29;:::i;:::-;356:39;215:186;-1:-1:-1;;;215:186:201:o;406:681::-;577:2;629:21;;;699:13;;602:18;;;721:22;;;548:4;;577:2;800:15;;;;774:2;759:18;;;548:4;843:218;857:6;854:1;851:13;843:218;;;922:13;;937:42;918:62;906:75;;1036:15;;;;1001:12;;;;879:1;872:9;843:218;;;-1:-1:-1;1078:3:201;;406:681;-1:-1:-1;;;;;;406:681:201:o;1092:180::-;1151:6;1204:2;1192:9;1183:7;1179:23;1175:32;1172:52;;;1220:1;1217;1210:12;1172:52;-1:-1:-1;1243:23:201;;1092:180;-1:-1:-1;1092:180:201:o;1690:254::-;1758:6;1766;1819:2;1807:9;1798:7;1794:23;1790:32;1787:52;;;1835:1;1832;1825:12;1787:52;1858:29;1877:9;1858:29;:::i;:::-;1848:39;1934:2;1919:18;;;;1906:32;;-1:-1:-1;;;1690:254:201:o;2310:656::-;2422:4;2451:2;2480;2469:9;2462:21;2512:6;2506:13;2555:6;2550:2;2539:9;2535:18;2528:34;2580:1;2590:140;2604:6;2601:1;2598:13;2590:140;;;2699:14;;;2695:23;;2689:30;2665:17;;;2684:2;2661:26;2654:66;2619:10;;2590:140;;;2748:6;2745:1;2742:13;2739:91;;;2818:1;2813:2;2804:6;2793:9;2789:22;2785:31;2778:42;2739:91;-1:-1:-1;2882:2:201;2870:15;2887:66;2866:88;2851:104;;;;2957:2;2847:113;;2310:656;-1:-1:-1;;;2310:656:201:o;3378:279::-;3418:4;3446:1;3443;3440:8;3437:188;;;3481:77;3478:1;3471:88;3582:4;3579:1;3572:15;3610:4;3607:1;3600:15;3437:188;-1:-1:-1;3642:9:201;;3378:279::o;3662:184::-;3714:77;3711:1;3704:88;3811:4;3808:1;3801:15;3835:4;3832:1;3825:15;3851:184;3903:77;3900:1;3893:88;4000:4;3997:1;3990:15;4024:4;4021:1;4014:15"},"gasEstimates":{"creation":{"codeDepositCost":"666800","executionCost":"infinite","totalCost":"infinite"},"external":{"getAddressesProviderAddressById(uint256)":"2498","getAddressesProviderIdByAddress(address)":"2535","getAddressesProvidersList()":"infinite","owner()":"2307","registerAddressesProvider(address,uint256)":"infinite","renounceOwnership()":"30193","transferOwnership(address)":"30391","unregisterAddressesProvider(address)":"infinite"},"internal":{"_addToAddressesProvidersList(address)":"infinite","_removeFromAddressesProvidersList(address)":"110864"}},"methodIdentifiers":{"getAddressesProviderAddressById(uint256)":"57dc0566","getAddressesProviderIdByAddress(address)":"d0267be7","getAddressesProvidersList()":"365ccbbf","owner()":"8da5cb5b","registerAddressesProvider(address,uint256)":"d258191e","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","unregisterAddressesProvider(address)":"0de26707"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addressesProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"AddressesProviderRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addressesProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"AddressesProviderUnregistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getAddressesProviderAddressById\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addressesProvider\",\"type\":\"address\"}],\"name\":\"getAddressesProviderIdByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAddressesProvidersList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"registerAddressesProvider\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"unregisterAddressesProvider\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"Used for indexing purposes of Aave protocol's markets. The id assigned to a PoolAddressesProvider refers to the market it is connected with, for example with `1` for the Aave main market and `2` for the next created.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"owner\":\"The owner address of this contract.\"}},\"getAddressesProviderAddressById(uint256)\":{\"params\":{\"id\":\"The id of the market\"},\"returns\":{\"_0\":\"The address of the PoolAddressesProvider with the given id or zero address if it is not registered\"}},\"getAddressesProviderIdByAddress(address)\":{\"params\":{\"addressesProvider\":\"The address of the PoolAddressesProvider\"},\"returns\":{\"_0\":\"The id of the PoolAddressesProvider or 0 if is not registered\"}},\"getAddressesProvidersList()\":{\"returns\":{\"_0\":\"The list of addresses providers\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"registerAddressesProvider(address,uint256)\":{\"details\":\"The PoolAddressesProvider must not already be registered in the registryThe id must not be used by an already registered PoolAddressesProvider\",\"params\":{\"id\":\"The id for the new PoolAddressesProvider, referring to the market it belongs to\",\"provider\":\"The address of the new PoolAddressesProvider\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"unregisterAddressesProvider(address)\":{\"params\":{\"provider\":\"The PoolAddressesProvider address\"}}},\"title\":\"PoolAddressesProviderRegistry\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAddressesProviderAddressById(uint256)\":{\"notice\":\"Returns the address of a registered PoolAddressesProvider\"},\"getAddressesProviderIdByAddress(address)\":{\"notice\":\"Returns the id of a registered PoolAddressesProvider\"},\"getAddressesProvidersList()\":{\"notice\":\"Returns the list of registered addresses providers\"},\"registerAddressesProvider(address,uint256)\":{\"notice\":\"Registers an addresses provider\"},\"unregisterAddressesProvider(address)\":{\"notice\":\"Removes an addresses provider from the list of registered addresses providers\"}},\"notice\":\"Main registry of PoolAddressesProvider of Aave markets.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/configuration/PoolAddressesProviderRegistry.sol\":\"PoolAddressesProviderRegistry\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable is Context {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial owner.\\n   */\\n  constructor() {\\n    address msgSender = _msgSender();\\n    _owner = msgSender;\\n    emit OwnershipTransferred(address(0), msgSender);\\n  }\\n\\n  /**\\n   * @dev Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Leaves the contract without owner. It will not be possible to call\\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\\n   *\\n   * NOTE: Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public virtual onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = address(0);\\n  }\\n\\n  /**\\n   * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function transferOwnership(address newOwner) public virtual onlyOwner {\\n    require(newOwner != address(0), 'Ownable: new owner is the zero address');\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\",\"keccak256\":\"0x3ce185c4f579e32006f8893dbfdc1b5d878c0e2cafd1508f7ceb081698bc81f9\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProviderRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProviderRegistry\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool Addresses Provider Registry.\\n */\\ninterface IPoolAddressesProviderRegistry {\\n  /**\\n   * @dev Emitted when a new AddressesProvider is registered.\\n   * @param addressesProvider The address of the registered PoolAddressesProvider\\n   * @param id The id of the registered PoolAddressesProvider\\n   */\\n  event AddressesProviderRegistered(address indexed addressesProvider, uint256 indexed id);\\n\\n  /**\\n   * @dev Emitted when an AddressesProvider is unregistered.\\n   * @param addressesProvider The address of the unregistered PoolAddressesProvider\\n   * @param id The id of the unregistered PoolAddressesProvider\\n   */\\n  event AddressesProviderUnregistered(address indexed addressesProvider, uint256 indexed id);\\n\\n  /**\\n   * @notice Returns the list of registered addresses providers\\n   * @return The list of addresses providers\\n   */\\n  function getAddressesProvidersList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the id of a registered PoolAddressesProvider\\n   * @param addressesProvider The address of the PoolAddressesProvider\\n   * @return The id of the PoolAddressesProvider or 0 if is not registered\\n   */\\n  function getAddressesProviderIdByAddress(\\n    address addressesProvider\\n  ) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of a registered PoolAddressesProvider\\n   * @param id The id of the market\\n   * @return The address of the PoolAddressesProvider with the given id or zero address if it is not registered\\n   */\\n  function getAddressesProviderAddressById(uint256 id) external view returns (address);\\n\\n  /**\\n   * @notice Registers an addresses provider\\n   * @dev The PoolAddressesProvider must not already be registered in the registry\\n   * @dev The id must not be used by an already registered PoolAddressesProvider\\n   * @param provider The address of the new PoolAddressesProvider\\n   * @param id The id for the new PoolAddressesProvider, referring to the market it belongs to\\n   */\\n  function registerAddressesProvider(address provider, uint256 id) external;\\n\\n  /**\\n   * @notice Removes an addresses provider from the list of registered addresses providers\\n   * @param provider The PoolAddressesProvider address\\n   */\\n  function unregisterAddressesProvider(address provider) external;\\n}\\n\",\"keccak256\":\"0x71ae9fcb634382141cce4c138230280f50b98fc47ba1d90cbc2d15ef8224fab1\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/configuration/PoolAddressesProviderRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Ownable} from '../../dependencies/openzeppelin/contracts/Ownable.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {IPoolAddressesProviderRegistry} from '../../interfaces/IPoolAddressesProviderRegistry.sol';\\n\\n/**\\n * @title PoolAddressesProviderRegistry\\n * @author Aave\\n * @notice Main registry of PoolAddressesProvider of Aave markets.\\n * @dev Used for indexing purposes of Aave protocol's markets. The id assigned to a PoolAddressesProvider refers to the\\n * market it is connected with, for example with `1` for the Aave main market and `2` for the next created.\\n */\\ncontract PoolAddressesProviderRegistry is Ownable, IPoolAddressesProviderRegistry {\\n  // Map of address provider ids (addressesProvider => id)\\n  mapping(address => uint256) private _addressesProviderToId;\\n  // Map of id to address provider (id => addressesProvider)\\n  mapping(uint256 => address) private _idToAddressesProvider;\\n  // List of addresses providers\\n  address[] private _addressesProvidersList;\\n  // Map of address provider list indexes (addressesProvider => indexInList)\\n  mapping(address => uint256) private _addressesProvidersIndexes;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param owner The owner address of this contract.\\n   */\\n  constructor(address owner) {\\n    transferOwnership(owner);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProviderRegistry\\n  function getAddressesProvidersList() external view override returns (address[] memory) {\\n    return _addressesProvidersList;\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProviderRegistry\\n  function registerAddressesProvider(address provider, uint256 id) external override onlyOwner {\\n    require(id != 0, Errors.INVALID_ADDRESSES_PROVIDER_ID);\\n    require(_idToAddressesProvider[id] == address(0), Errors.INVALID_ADDRESSES_PROVIDER_ID);\\n    require(_addressesProviderToId[provider] == 0, Errors.ADDRESSES_PROVIDER_ALREADY_ADDED);\\n\\n    _addressesProviderToId[provider] = id;\\n    _idToAddressesProvider[id] = provider;\\n\\n    _addToAddressesProvidersList(provider);\\n    emit AddressesProviderRegistered(provider, id);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProviderRegistry\\n  function unregisterAddressesProvider(address provider) external override onlyOwner {\\n    require(_addressesProviderToId[provider] != 0, Errors.ADDRESSES_PROVIDER_NOT_REGISTERED);\\n    uint256 oldId = _addressesProviderToId[provider];\\n    _idToAddressesProvider[oldId] = address(0);\\n    _addressesProviderToId[provider] = 0;\\n\\n    _removeFromAddressesProvidersList(provider);\\n\\n    emit AddressesProviderUnregistered(provider, oldId);\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProviderRegistry\\n  function getAddressesProviderIdByAddress(\\n    address addressesProvider\\n  ) external view override returns (uint256) {\\n    return _addressesProviderToId[addressesProvider];\\n  }\\n\\n  /// @inheritdoc IPoolAddressesProviderRegistry\\n  function getAddressesProviderAddressById(uint256 id) external view override returns (address) {\\n    return _idToAddressesProvider[id];\\n  }\\n\\n  /**\\n   * @notice Adds the addresses provider address to the list.\\n   * @param provider The address of the PoolAddressesProvider\\n   */\\n  function _addToAddressesProvidersList(address provider) internal {\\n    _addressesProvidersIndexes[provider] = _addressesProvidersList.length;\\n    _addressesProvidersList.push(provider);\\n  }\\n\\n  /**\\n   * @notice Removes the addresses provider address from the list.\\n   * @param provider The address of the PoolAddressesProvider\\n   */\\n  function _removeFromAddressesProvidersList(address provider) internal {\\n    uint256 index = _addressesProvidersIndexes[provider];\\n\\n    _addressesProvidersIndexes[provider] = 0;\\n\\n    // Swap the index of the last addresses provider in the list with the index of the provider to remove\\n    uint256 lastIndex = _addressesProvidersList.length - 1;\\n    if (index < lastIndex) {\\n      address lastProvider = _addressesProvidersList[lastIndex];\\n      _addressesProvidersList[index] = lastProvider;\\n      _addressesProvidersIndexes[lastProvider] = index;\\n    }\\n    _addressesProvidersList.pop();\\n  }\\n}\\n\",\"keccak256\":\"0x0055e677185fa3a8ca3586d4ad78d8fe5633772753b3c21a5c4507e0d4b6522e\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1472,"contract":"@aave/core-v3/contracts/protocol/configuration/PoolAddressesProviderRegistry.sol:PoolAddressesProviderRegistry","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":10089,"contract":"@aave/core-v3/contracts/protocol/configuration/PoolAddressesProviderRegistry.sol:PoolAddressesProviderRegistry","label":"_addressesProviderToId","offset":0,"slot":"1","type":"t_mapping(t_address,t_uint256)"},{"astId":10093,"contract":"@aave/core-v3/contracts/protocol/configuration/PoolAddressesProviderRegistry.sol:PoolAddressesProviderRegistry","label":"_idToAddressesProvider","offset":0,"slot":"2","type":"t_mapping(t_uint256,t_address)"},{"astId":10096,"contract":"@aave/core-v3/contracts/protocol/configuration/PoolAddressesProviderRegistry.sol:PoolAddressesProviderRegistry","label":"_addressesProvidersList","offset":0,"slot":"3","type":"t_array(t_address)dyn_storage"},{"astId":10100,"contract":"@aave/core-v3/contracts/protocol/configuration/PoolAddressesProviderRegistry.sol:PoolAddressesProviderRegistry","label":"_addressesProvidersIndexes","offset":0,"slot":"4","type":"t_mapping(t_address,t_uint256)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"base":"t_address","encoding":"dynamic_array","label":"address[]","numberOfBytes":"32"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_address)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => address)","numberOfBytes":"32","value":"t_address"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"getAddressesProviderAddressById(uint256)":{"notice":"Returns the address of a registered PoolAddressesProvider"},"getAddressesProviderIdByAddress(address)":{"notice":"Returns the id of a registered PoolAddressesProvider"},"getAddressesProvidersList()":{"notice":"Returns the list of registered addresses providers"},"registerAddressesProvider(address,uint256)":{"notice":"Registers an addresses provider"},"unregisterAddressesProvider(address)":{"notice":"Removes an addresses provider from the list of registered addresses providers"}},"notice":"Main registry of PoolAddressesProvider of Aave markets.","version":1}}},"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol":{"BaseImmutableAdminUpgradeabilityProxy":{"abi":[{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"}],"devdoc":{"author":"Aave, inspired by the OpenZeppelin upgradeability proxy pattern","details":"The admin role is stored in an immutable, which helps saving transactions costs All external functions in this contract must be guarded by the `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity feature proposal that would enable this to be done automatically.","kind":"dev","methods":{"admin()":{"returns":{"_0":"The address of the proxy admin."}},"constructor":{"details":"Constructor.","params":{"admin":"The address of the admin"}},"implementation()":{"returns":{"_0":"The address of the implementation."}},"upgradeTo(address)":{"details":"Only the admin can call this function.","params":{"newImplementation":"The address of the new implementation."}},"upgradeToAndCall(address,bytes)":{"details":"This is useful to initialize the proxied contract.","params":{"data":"Data to send as msg.data in the low level call. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.","newImplementation":"The address of the new implementation."}}},"title":"BaseImmutableAdminUpgradeabilityProxy","version":1},"evm":{"bytecode":{"functionDebugData":{"@_10359":{"entryPoint":null,"id":10359,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":64,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:306:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"95:209:201","statements":[{"body":{"nodeType":"YulBlock","src":"141:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"150:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"153:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"143:6:201"},"nodeType":"YulFunctionCall","src":"143:12:201"},"nodeType":"YulExpressionStatement","src":"143:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"116:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"125:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"112:3:201"},"nodeType":"YulFunctionCall","src":"112:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"137:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"108:3:201"},"nodeType":"YulFunctionCall","src":"108:32:201"},"nodeType":"YulIf","src":"105:52:201"},{"nodeType":"YulVariableDeclaration","src":"166:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"185:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"179:5:201"},"nodeType":"YulFunctionCall","src":"179:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"170:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"258:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"267:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"270:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"260:6:201"},"nodeType":"YulFunctionCall","src":"260:12:201"},"nodeType":"YulExpressionStatement","src":"260:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"217:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"228:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"243:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"248:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"239:3:201"},"nodeType":"YulFunctionCall","src":"239:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"252:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"235:3:201"},"nodeType":"YulFunctionCall","src":"235:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"224:3:201"},"nodeType":"YulFunctionCall","src":"224:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"214:2:201"},"nodeType":"YulFunctionCall","src":"214:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"207:6:201"},"nodeType":"YulFunctionCall","src":"207:50:201"},"nodeType":"YulIf","src":"204:70:201"},{"nodeType":"YulAssignment","src":"283:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"293:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"283:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"61:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"72:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"84:6:201","type":""}],"src":"14:290:201"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60a060405234801561001057600080fd5b506040516106b23803806106b283398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516106046100ae600039600081816101210152818161017301528181610246015281816102b7015281816102e0015261031a01526106046000f3fe60806040526004361061003f5760003560e01c80633659cfe6146100495780634f1ef286146100695780635c60da1b1461007c578063f851a440146100ba575b6100476100cf565b005b34801561005557600080fd5b50610047610064366004610519565b610109565b61004761007736600461053b565b61015b565b34801561008857600080fd5b5061009161022c565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100c657600080fd5b5061009161029d565b6100d7610302565b6101076101027f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6103cd565b565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561015357610150816103f1565b50565b6101506100cf565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561021f576101a2836103f1565b60008373ffffffffffffffffffffffffffffffffffffffff1683836040516101cb9291906105be565b600060405180830381855af49150503d8060008114610206576040519150601f19603f3d011682016040523d82523d6000602084013e61020b565b606091505b505090508061021957600080fd5b50505050565b6102276100cf565b505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561029257507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b61029a6100cf565b90565b60003373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561029257507f000000000000000000000000000000000000000000000000000000000000000090565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161415610107576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8080156103ec573d6000f35b3d6000fd5b6103fa8161043e565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b803b6104cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084016103c4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b803573ffffffffffffffffffffffffffffffffffffffff8116811461051457600080fd5b919050565b60006020828403121561052b57600080fd5b610534826104f0565b9392505050565b60008060006040848603121561055057600080fd5b610559846104f0565b9250602084013567ffffffffffffffff8082111561057657600080fd5b818601915086601f83011261058a57600080fd5b81358181111561059957600080fd5b8760208285010111156105ab57600080fd5b6020830194508093505050509250925092565b818382376000910190815291905056fea2646970667358221220b6ee1a7b38e7a46b020032f2d44a55881d7ea373d36332c984f10b31710664da64736f6c634300080a0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x6B2 CODESIZE SUB DUP1 PUSH2 0x6B2 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH2 0x70 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x604 PUSH2 0xAE PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x121 ADD MSTORE DUP2 DUP2 PUSH2 0x173 ADD MSTORE DUP2 DUP2 PUSH2 0x246 ADD MSTORE DUP2 DUP2 PUSH2 0x2B7 ADD MSTORE DUP2 DUP2 PUSH2 0x2E0 ADD MSTORE PUSH2 0x31A ADD MSTORE PUSH2 0x604 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3F JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x49 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x69 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x7C JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xBA JUMPI JUMPDEST PUSH2 0x47 PUSH2 0xCF JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47 PUSH2 0x64 CALLDATASIZE PUSH1 0x4 PUSH2 0x519 JUMP JUMPDEST PUSH2 0x109 JUMP JUMPDEST PUSH2 0x47 PUSH2 0x77 CALLDATASIZE PUSH1 0x4 PUSH2 0x53B JUMP JUMPDEST PUSH2 0x15B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x91 PUSH2 0x22C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x91 PUSH2 0x29D JUMP JUMPDEST PUSH2 0xD7 PUSH2 0x302 JUMP JUMPDEST PUSH2 0x107 PUSH2 0x102 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x3CD JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x153 JUMPI PUSH2 0x150 DUP2 PUSH2 0x3F1 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x150 PUSH2 0xCF JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x21F JUMPI PUSH2 0x1A2 DUP4 PUSH2 0x3F1 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1CB SWAP3 SWAP2 SWAP1 PUSH2 0x5BE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x206 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 0x20B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x219 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x227 PUSH2 0xCF JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x292 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x29A PUSH2 0xCF JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x292 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x107 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x3EC JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x3FA DUP2 PUSH2 0x43E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x4CC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C4 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x514 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x534 DUP3 PUSH2 0x4F0 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x550 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x559 DUP5 PUSH2 0x4F0 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x576 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x58A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x599 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x5AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB6 0xEE BYTE PUSH28 0x38E7A46B020032F2D44A55881D7EA373D36332C984F10B31710664DA PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"720:2049:69:-:0;;;914:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;947:14:69;;;720:2049;;14:290:201;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:201;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:201:o;:::-;720:2049:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_2893":{"entryPoint":null,"id":2893,"parameterSlots":0,"returnSlots":0},"@_delegate_2907":{"entryPoint":973,"id":2907,"parameterSlots":1,"returnSlots":0},"@_fallback_2925":{"entryPoint":207,"id":2925,"parameterSlots":0,"returnSlots":0},"@_implementation_2712":{"entryPoint":null,"id":2712,"parameterSlots":0,"returnSlots":1},"@_setImplementation_2747":{"entryPoint":1086,"id":2747,"parameterSlots":1,"returnSlots":0},"@_upgradeTo_2727":{"entryPoint":1009,"id":2727,"parameterSlots":1,"returnSlots":0},"@_willFallback_10454":{"entryPoint":770,"id":10454,"parameterSlots":0,"returnSlots":0},"@_willFallback_2912":{"entryPoint":null,"id":2912,"parameterSlots":0,"returnSlots":0},"@admin_10384":{"entryPoint":669,"id":10384,"parameterSlots":0,"returnSlots":1},"@implementation_10396":{"entryPoint":556,"id":10396,"parameterSlots":0,"returnSlots":1},"@isContract_445":{"entryPoint":null,"id":445,"parameterSlots":1,"returnSlots":1},"@upgradeToAndCall_10435":{"entryPoint":347,"id":10435,"parameterSlots":3,"returnSlots":0},"@upgradeTo_10409":{"entryPoint":265,"id":10409,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":1264,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":1305,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_bytes_calldata_ptr":{"entryPoint":1339,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":1470,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2427:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:147:201","statements":[{"nodeType":"YulAssignment","src":"73:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:201"},"nodeType":"YulFunctionCall","src":"82:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:201"}]},{"body":{"nodeType":"YulBlock","src":"188:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"197:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"200:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"190:6:201"},"nodeType":"YulFunctionCall","src":"190:12:201"},"nodeType":"YulExpressionStatement","src":"190:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"142:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:201"},"nodeType":"YulFunctionCall","src":"131:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:201"},"nodeType":"YulFunctionCall","src":"121:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:201"},"nodeType":"YulFunctionCall","src":"114:73:201"},"nodeType":"YulIf","src":"111:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:201","type":""}],"src":"14:196:201"},{"body":{"nodeType":"YulBlock","src":"285:116:201","statements":[{"body":{"nodeType":"YulBlock","src":"331:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"340:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"343:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"333:6:201"},"nodeType":"YulFunctionCall","src":"333:12:201"},"nodeType":"YulExpressionStatement","src":"333:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"306:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"315:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"302:3:201"},"nodeType":"YulFunctionCall","src":"302:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"327:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"298:3:201"},"nodeType":"YulFunctionCall","src":"298:32:201"},"nodeType":"YulIf","src":"295:52:201"},{"nodeType":"YulAssignment","src":"356:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"385:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"366:18:201"},"nodeType":"YulFunctionCall","src":"366:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"356:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"251:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"262:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"274:6:201","type":""}],"src":"215:186:201"},{"body":{"nodeType":"YulBlock","src":"512:559:201","statements":[{"body":{"nodeType":"YulBlock","src":"558:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"567:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"570:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"560:6:201"},"nodeType":"YulFunctionCall","src":"560:12:201"},"nodeType":"YulExpressionStatement","src":"560:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"533:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"542:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"529:3:201"},"nodeType":"YulFunctionCall","src":"529:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"554:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"525:3:201"},"nodeType":"YulFunctionCall","src":"525:32:201"},"nodeType":"YulIf","src":"522:52:201"},{"nodeType":"YulAssignment","src":"583:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"612:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"593:18:201"},"nodeType":"YulFunctionCall","src":"593:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"583:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"631:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"662:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"673:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"658:3:201"},"nodeType":"YulFunctionCall","src":"658:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"645:12:201"},"nodeType":"YulFunctionCall","src":"645:32:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"635:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"686:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"696:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"690:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"741:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"750:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"753:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"743:6:201"},"nodeType":"YulFunctionCall","src":"743:12:201"},"nodeType":"YulExpressionStatement","src":"743:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"729:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"737:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"726:2:201"},"nodeType":"YulFunctionCall","src":"726:14:201"},"nodeType":"YulIf","src":"723:34:201"},{"nodeType":"YulVariableDeclaration","src":"766:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"780:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"791:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"776:3:201"},"nodeType":"YulFunctionCall","src":"776:22:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"770:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"846:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"855:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"858:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"848:6:201"},"nodeType":"YulFunctionCall","src":"848:12:201"},"nodeType":"YulExpressionStatement","src":"848:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"825:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"829:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"821:3:201"},"nodeType":"YulFunctionCall","src":"821:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"836:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"817:3:201"},"nodeType":"YulFunctionCall","src":"817:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"810:6:201"},"nodeType":"YulFunctionCall","src":"810:35:201"},"nodeType":"YulIf","src":"807:55:201"},{"nodeType":"YulVariableDeclaration","src":"871:30:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"898:2:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"885:12:201"},"nodeType":"YulFunctionCall","src":"885:16:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"875:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"928:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"937:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"940:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"930:6:201"},"nodeType":"YulFunctionCall","src":"930:12:201"},"nodeType":"YulExpressionStatement","src":"930:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"916:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"924:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"913:2:201"},"nodeType":"YulFunctionCall","src":"913:14:201"},"nodeType":"YulIf","src":"910:34:201"},{"body":{"nodeType":"YulBlock","src":"994:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1003:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1006:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"996:6:201"},"nodeType":"YulFunctionCall","src":"996:12:201"},"nodeType":"YulExpressionStatement","src":"996:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"967:2:201"},{"name":"length","nodeType":"YulIdentifier","src":"971:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"963:3:201"},"nodeType":"YulFunctionCall","src":"963:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"980:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"959:3:201"},"nodeType":"YulFunctionCall","src":"959:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"985:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"956:2:201"},"nodeType":"YulFunctionCall","src":"956:37:201"},"nodeType":"YulIf","src":"953:57:201"},{"nodeType":"YulAssignment","src":"1019:21:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1033:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"1037:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1029:3:201"},"nodeType":"YulFunctionCall","src":"1029:11:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1019:6:201"}]},{"nodeType":"YulAssignment","src":"1049:16:201","value":{"name":"length","nodeType":"YulIdentifier","src":"1059:6:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1049:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"462:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"473:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"485:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"493:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"501:6:201","type":""}],"src":"406:665:201"},{"body":{"nodeType":"YulBlock","src":"1177:125:201","statements":[{"nodeType":"YulAssignment","src":"1187:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1199:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1210:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1195:3:201"},"nodeType":"YulFunctionCall","src":"1195:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1187:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1229:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1244:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1252:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1240:3:201"},"nodeType":"YulFunctionCall","src":"1240:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1222:6:201"},"nodeType":"YulFunctionCall","src":"1222:74:201"},"nodeType":"YulExpressionStatement","src":"1222:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1146:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1157:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1168:4:201","type":""}],"src":"1076:226:201"},{"body":{"nodeType":"YulBlock","src":"1454:124:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1477:3:201"},{"name":"value0","nodeType":"YulIdentifier","src":"1482:6:201"},{"name":"value1","nodeType":"YulIdentifier","src":"1490:6:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"1464:12:201"},"nodeType":"YulFunctionCall","src":"1464:33:201"},"nodeType":"YulExpressionStatement","src":"1464:33:201"},{"nodeType":"YulVariableDeclaration","src":"1506:26:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1520:3:201"},{"name":"value1","nodeType":"YulIdentifier","src":"1525:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1516:3:201"},"nodeType":"YulFunctionCall","src":"1516:16:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1510:2:201","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1548:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"1552:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1541:6:201"},"nodeType":"YulFunctionCall","src":"1541:13:201"},"nodeType":"YulExpressionStatement","src":"1541:13:201"},{"nodeType":"YulAssignment","src":"1563:9:201","value":{"name":"_1","nodeType":"YulIdentifier","src":"1570:2:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"1563:3:201"}]}]},"name":"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"1422:3:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1427:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1435:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"1446:3:201","type":""}],"src":"1307:271:201"},{"body":{"nodeType":"YulBlock","src":"1757:240:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1774:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1785:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1767:6:201"},"nodeType":"YulFunctionCall","src":"1767:21:201"},"nodeType":"YulExpressionStatement","src":"1767:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1808:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1819:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1804:3:201"},"nodeType":"YulFunctionCall","src":"1804:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"1824:2:201","type":"","value":"50"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1797:6:201"},"nodeType":"YulFunctionCall","src":"1797:30:201"},"nodeType":"YulExpressionStatement","src":"1797:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1847:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1858:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1843:3:201"},"nodeType":"YulFunctionCall","src":"1843:18:201"},{"hexValue":"43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e206672","kind":"string","nodeType":"YulLiteral","src":"1863:34:201","type":"","value":"Cannot call fallback function fr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1836:6:201"},"nodeType":"YulFunctionCall","src":"1836:62:201"},"nodeType":"YulExpressionStatement","src":"1836:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1918:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1929:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1914:3:201"},"nodeType":"YulFunctionCall","src":"1914:18:201"},{"hexValue":"6f6d207468652070726f78792061646d696e","kind":"string","nodeType":"YulLiteral","src":"1934:20:201","type":"","value":"om the proxy admin"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1907:6:201"},"nodeType":"YulFunctionCall","src":"1907:48:201"},"nodeType":"YulExpressionStatement","src":"1907:48:201"},{"nodeType":"YulAssignment","src":"1964:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1976:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1987:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1972:3:201"},"nodeType":"YulFunctionCall","src":"1972:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1964:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1734:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1748:4:201","type":""}],"src":"1583:414:201"},{"body":{"nodeType":"YulBlock","src":"2176:249:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2193:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2204:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2186:6:201"},"nodeType":"YulFunctionCall","src":"2186:21:201"},"nodeType":"YulExpressionStatement","src":"2186:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2227:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2238:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2223:3:201"},"nodeType":"YulFunctionCall","src":"2223:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2243:2:201","type":"","value":"59"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2216:6:201"},"nodeType":"YulFunctionCall","src":"2216:30:201"},"nodeType":"YulExpressionStatement","src":"2216:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2266:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2277:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2262:3:201"},"nodeType":"YulFunctionCall","src":"2262:18:201"},{"hexValue":"43616e6e6f742073657420612070726f787920696d706c656d656e746174696f","kind":"string","nodeType":"YulLiteral","src":"2282:34:201","type":"","value":"Cannot set a proxy implementatio"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2255:6:201"},"nodeType":"YulFunctionCall","src":"2255:62:201"},"nodeType":"YulExpressionStatement","src":"2255:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2337:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2348:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2333:3:201"},"nodeType":"YulFunctionCall","src":"2333:18:201"},{"hexValue":"6e20746f2061206e6f6e2d636f6e74726163742061646472657373","kind":"string","nodeType":"YulLiteral","src":"2353:29:201","type":"","value":"n to a non-contract address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2326:6:201"},"nodeType":"YulFunctionCall","src":"2326:57:201"},"nodeType":"YulExpressionStatement","src":"2326:57:201"},{"nodeType":"YulAssignment","src":"2392:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2404:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2415:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2400:3:201"},"nodeType":"YulFunctionCall","src":"2400:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2392:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2153:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2167:4:201","type":""}],"src":"2002:423:201"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n        value1 := add(_2, 32)\n        value2 := length\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, 0)\n        end := _1\n    }\n    function abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 50)\n        mstore(add(headStart, 64), \"Cannot call fallback function fr\")\n        mstore(add(headStart, 96), \"om the proxy admin\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 59)\n        mstore(add(headStart, 64), \"Cannot set a proxy implementatio\")\n        mstore(add(headStart, 96), \"n to a non-contract address\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"10348":[{"length":32,"start":289},{"length":32,"start":371},{"length":32,"start":582},{"length":32,"start":695},{"length":32,"start":736},{"length":32,"start":794}]},"linkReferences":{},"object":"60806040526004361061003f5760003560e01c80633659cfe6146100495780634f1ef286146100695780635c60da1b1461007c578063f851a440146100ba575b6100476100cf565b005b34801561005557600080fd5b50610047610064366004610519565b610109565b61004761007736600461053b565b61015b565b34801561008857600080fd5b5061009161022c565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100c657600080fd5b5061009161029d565b6100d7610302565b6101076101027f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6103cd565b565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561015357610150816103f1565b50565b6101506100cf565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561021f576101a2836103f1565b60008373ffffffffffffffffffffffffffffffffffffffff1683836040516101cb9291906105be565b600060405180830381855af49150503d8060008114610206576040519150601f19603f3d011682016040523d82523d6000602084013e61020b565b606091505b505090508061021957600080fd5b50505050565b6102276100cf565b505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561029257507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b61029a6100cf565b90565b60003373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561029257507f000000000000000000000000000000000000000000000000000000000000000090565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161415610107576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8080156103ec573d6000f35b3d6000fd5b6103fa8161043e565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b803b6104cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084016103c4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b803573ffffffffffffffffffffffffffffffffffffffff8116811461051457600080fd5b919050565b60006020828403121561052b57600080fd5b610534826104f0565b9392505050565b60008060006040848603121561055057600080fd5b610559846104f0565b9250602084013567ffffffffffffffff8082111561057657600080fd5b818601915086601f83011261058a57600080fd5b81358181111561059957600080fd5b8760208285010111156105ab57600080fd5b6020830194508093505050509250925092565b818382376000910190815291905056fea2646970667358221220b6ee1a7b38e7a46b020032f2d44a55881d7ea373d36332c984f10b31710664da64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3F JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x49 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x69 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x7C JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xBA JUMPI JUMPDEST PUSH2 0x47 PUSH2 0xCF JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47 PUSH2 0x64 CALLDATASIZE PUSH1 0x4 PUSH2 0x519 JUMP JUMPDEST PUSH2 0x109 JUMP JUMPDEST PUSH2 0x47 PUSH2 0x77 CALLDATASIZE PUSH1 0x4 PUSH2 0x53B JUMP JUMPDEST PUSH2 0x15B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x91 PUSH2 0x22C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x91 PUSH2 0x29D JUMP JUMPDEST PUSH2 0xD7 PUSH2 0x302 JUMP JUMPDEST PUSH2 0x107 PUSH2 0x102 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x3CD JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x153 JUMPI PUSH2 0x150 DUP2 PUSH2 0x3F1 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x150 PUSH2 0xCF JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x21F JUMPI PUSH2 0x1A2 DUP4 PUSH2 0x3F1 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1CB SWAP3 SWAP2 SWAP1 PUSH2 0x5BE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x206 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 0x20B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x219 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x227 PUSH2 0xCF JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x292 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x29A PUSH2 0xCF JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x292 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x107 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x3EC JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x3FA DUP2 PUSH2 0x43E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x4CC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3C4 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x514 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x534 DUP3 PUSH2 0x4F0 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x550 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x559 DUP5 PUSH2 0x4F0 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x576 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x58A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x599 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x5AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB6 0xEE BYTE PUSH28 0x38E7A46B020032F2D44A55881D7EA373D36332C984F10B31710664DA PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"720:2049:69:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;572:11:20;:9;:11::i;:::-;720:2049:69;1651:103;;;;;;;;;;-1:-1:-1;1651:103:69;;;;;:::i;:::-;;:::i;2283:234::-;;;;;;:::i;:::-;;:::i;1359:96::-;;;;;;;;;;;;;:::i;:::-;;;1252:42:201;1240:55;;;1222:74;;1210:2;1195:18;1359:96:69;;;;;;;1172:76;;;;;;;;;;;;;:::i;2155:90:20:-;2191:15;:13;:15::i;:::-;2212:28;2222:17;823:66:17;1183:11;;1008:196;2222:17:20;2212:9;:28::i;:::-;2155:90::o;1651:103:69:-;999:10;:20;1013:6;999:20;;995:74;;;1720:29:::1;1731:17;1720:10;:29::i;:::-;1651:103:::0;:::o;995:74::-;1051:11;:9;:11::i;2283:234::-;999:10;:20;1013:6;999:20;;995:74;;;2400:29:::1;2411:17;2400:10;:29::i;:::-;2436:12;2454:17;:30;;2485:4;;2454:36;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2435:55;;;2504:7;2496:16;;;::::0;::::1;;2394:123;2283:234:::0;;;:::o;995:74::-;1051:11;:9;:11::i;:::-;2283:234;;;:::o;1359:96::-;1411:7;999:10;:20;1013:6;999:20;;995:74;;;-1:-1:-1;823:66:17;1183:11;;1359:96:69:o;995:74::-;1051:11;:9;:11::i;:::-;1359:96;:::o;1172:76::-;1215:7;999:10;:20;1013:6;999:20;;995:74;;;-1:-1:-1;1237:6:69::1;1359:96:::0;:::o;2595:172::-;2660:10;:20;2674:6;2660:20;;;2652:83;;;;;;;1785:2:201;2652:83:69;;;1767:21:201;1824:2;1804:18;;;1797:30;1863:34;1843:18;;;1836:62;1934:20;1914:18;;;1907:48;1972:19;;2652:83:69;;;;;;;;1005:802:20;1338:14;1335:1;1332;1319:34;1534:1;1531;1515:14;1512:1;1496:14;1489:5;1476:60;1598:16;1595:1;1592;1577:38;1630:6;1685:52;;;;1772:16;1769:1;1762:27;1685:52;1712:16;1709:1;1702:27;1339:142:17;1401:37;1420:17;1401:18;:37::i;:::-;1449:27;;;;;;;;;;;1339:142;:::o;1618:334::-;1025:20:3;;1688:127:17;;;;;;;2204:2:201;1688:127:17;;;2186:21:201;2243:2;2223:18;;;2216:30;2282:34;2262:18;;;2255:62;2353:29;2333:18;;;2326:57;2400:19;;1688:127:17;2002:423:201;1688:127:17;823:66;1911:31;1618:334::o;14:196:201:-;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:186::-;274:6;327:2;315:9;306:7;302:23;298:32;295:52;;;343:1;340;333:12;295:52;366:29;385:9;366:29;:::i;:::-;356:39;215:186;-1:-1:-1;;;215:186:201:o;406:665::-;485:6;493;501;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;593:29;612:9;593:29;:::i;:::-;583:39;;673:2;662:9;658:18;645:32;696:18;737:2;729:6;726:14;723:34;;;753:1;750;743:12;723:34;791:6;780:9;776:22;766:32;;836:7;829:4;825:2;821:13;817:27;807:55;;858:1;855;848:12;807:55;898:2;885:16;924:2;916:6;913:14;910:34;;;940:1;937;930:12;910:34;985:7;980:2;971:6;967:2;963:15;959:24;956:37;953:57;;;1006:1;1003;996:12;953:57;1037:2;1033;1029:11;1019:21;;1059:6;1049:16;;;;;406:665;;;;;:::o;1307:271::-;1490:6;1482;1477:3;1464:33;1446:3;1516:16;;1541:13;;;1516:16;1307:271;-1:-1:-1;1307:271:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"308000","executionCost":"infinite","totalCost":"infinite"},"external":{"":"infinite","admin()":"infinite","implementation()":"infinite","upgradeTo(address)":"infinite","upgradeToAndCall(address,bytes)":"infinite"},"internal":{"_willFallback()":"infinite"}},"methodIdentifiers":{"admin()":"f851a440","implementation()":"5c60da1b","upgradeTo(address)":"3659cfe6","upgradeToAndCall(address,bytes)":"4f1ef286"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave, inspired by the OpenZeppelin upgradeability proxy pattern\",\"details\":\"The admin role is stored in an immutable, which helps saving transactions costs All external functions in this contract must be guarded by the `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity feature proposal that would enable this to be done automatically.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"returns\":{\"_0\":\"The address of the proxy admin.\"}},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"admin\":\"The address of the admin\"}},\"implementation()\":{\"returns\":{\"_0\":\"The address of the implementation.\"}},\"upgradeTo(address)\":{\"details\":\"Only the admin can call this function.\",\"params\":{\"newImplementation\":\"The address of the new implementation.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"This is useful to initialize the proxied contract.\",\"params\":{\"data\":\"Data to send as msg.data in the low level call. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\",\"newImplementation\":\"The address of the new implementation.\"}}},\"title\":\"BaseImmutableAdminUpgradeabilityProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"admin()\":{\"notice\":\"Return the admin address\"},\"implementation()\":{\"notice\":\"Return the implementation address\"},\"upgradeTo(address)\":{\"notice\":\"Upgrade the backing implementation of the proxy.\"},\"upgradeToAndCall(address,bytes)\":{\"notice\":\"Upgrade the backing implementation of the proxy and call a function on the new implementation.\"}},\"notice\":\"This contract combines an upgradeability proxy with an authorization mechanism for administrative tasks.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol\":\"BaseImmutableAdminUpgradeabilityProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './Proxy.sol';\\nimport '../contracts/Address.sol';\\n\\n/**\\n * @title BaseUpgradeabilityProxy\\n * @dev This contract implements a proxy that allows to change the\\n * implementation address to which it will delegate.\\n * Such a change is called an implementation upgrade.\\n */\\ncontract BaseUpgradeabilityProxy is Proxy {\\n  /**\\n   * @dev Emitted when the implementation is upgraded.\\n   * @param implementation Address of the new implementation.\\n   */\\n  event Upgraded(address indexed implementation);\\n\\n  /**\\n   * @dev Storage slot with the address of the current implementation.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant IMPLEMENTATION_SLOT =\\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n  /**\\n   * @dev Returns the current implementation.\\n   * @return impl Address of the current implementation\\n   */\\n  function _implementation() internal view override returns (address impl) {\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      impl := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Upgrades the proxy to a new implementation.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _upgradeTo(address newImplementation) internal {\\n    _setImplementation(newImplementation);\\n    emit Upgraded(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Sets the implementation address of the proxy.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _setImplementation(address newImplementation) internal {\\n    require(\\n      Address.isContract(newImplementation),\\n      'Cannot set a proxy implementation to a non-contract address'\\n    );\\n\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newImplementation)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe47eb278267d31f096fc643c2a322c72066abfa6ba07f6386c266fe7cbd15013\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\n    assembly {\\n      // Copy msg.data. We take full control of memory in this inline assembly\\n      // block because it will not return to Solidity code. We overwrite the\\n      // Solidity scratch pad at memory position 0.\\n      calldatacopy(0, 0, calldatasize())\\n\\n      // Call the implementation.\\n      // out and outsize are 0 because we don't know the size yet.\\n      let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n      // Copy the returned data.\\n      returndatacopy(0, 0, returndatasize())\\n\\n      switch result\\n      // delegatecall returns 0 on error.\\n      case 0 {\\n        revert(0, returndatasize())\\n      }\\n      default {\\n        return(0, returndatasize())\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {BaseUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title BaseImmutableAdminUpgradeabilityProxy\\n * @author Aave, inspired by the OpenZeppelin upgradeability proxy pattern\\n * @notice This contract combines an upgradeability proxy with an authorization\\n * mechanism for administrative tasks.\\n * @dev The admin role is stored in an immutable, which helps saving transactions costs\\n * All external functions in this contract must be guarded by the\\n * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\\n * feature proposal that would enable this to be done automatically.\\n */\\ncontract BaseImmutableAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  address internal immutable _admin;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param admin The address of the admin\\n   */\\n  constructor(address admin) {\\n    _admin = admin;\\n  }\\n\\n  modifier ifAdmin() {\\n    if (msg.sender == _admin) {\\n      _;\\n    } else {\\n      _fallback();\\n    }\\n  }\\n\\n  /**\\n   * @notice Return the admin address\\n   * @return The address of the proxy admin.\\n   */\\n  function admin() external ifAdmin returns (address) {\\n    return _admin;\\n  }\\n\\n  /**\\n   * @notice Return the implementation address\\n   * @return The address of the implementation.\\n   */\\n  function implementation() external ifAdmin returns (address) {\\n    return _implementation();\\n  }\\n\\n  /**\\n   * @notice Upgrade the backing implementation of the proxy.\\n   * @dev Only the admin can call this function.\\n   * @param newImplementation The address of the new implementation.\\n   */\\n  function upgradeTo(address newImplementation) external ifAdmin {\\n    _upgradeTo(newImplementation);\\n  }\\n\\n  /**\\n   * @notice Upgrade the backing implementation of the proxy and call a function\\n   * on the new implementation.\\n   * @dev This is useful to initialize the proxied contract.\\n   * @param newImplementation The address of the new implementation.\\n   * @param data Data to send as msg.data in the low level call.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   */\\n  function upgradeToAndCall(\\n    address newImplementation,\\n    bytes calldata data\\n  ) external payable ifAdmin {\\n    _upgradeTo(newImplementation);\\n    (bool success, ) = newImplementation.delegatecall(data);\\n    require(success);\\n  }\\n\\n  /**\\n   * @notice Only fall back when the sender is not the admin.\\n   */\\n  function _willFallback() internal virtual override {\\n    require(msg.sender != _admin, 'Cannot call fallback function from the proxy admin');\\n    super._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0x11d0bbbcb776fc3519b79af975016fa342115cff9e70d982acfe3b7f86683674\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"admin()":{"notice":"Return the admin address"},"implementation()":{"notice":"Return the implementation address"},"upgradeTo(address)":{"notice":"Upgrade the backing implementation of the proxy."},"upgradeToAndCall(address,bytes)":{"notice":"Upgrade the backing implementation of the proxy and call a function on the new implementation."}},"notice":"This contract combines an upgradeability proxy with an authorization mechanism for administrative tasks.","version":1}}},"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol":{"InitializableImmutableAdminUpgradeabilityProxy":{"abi":[{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"}],"devdoc":{"author":"Aave","details":"Extends BaseAdminUpgradeabilityProxy with an initializer function","kind":"dev","methods":{"admin()":{"returns":{"_0":"The address of the proxy admin."}},"constructor":{"details":"Constructor.","params":{"admin":"The address of the admin"}},"implementation()":{"returns":{"_0":"The address of the implementation."}},"initialize(address,bytes)":{"details":"Contract initializer.","params":{"_data":"Data to send as msg.data to the implementation to initialize the proxied contract. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.","_logic":"Address of the initial implementation."}},"upgradeTo(address)":{"details":"Only the admin can call this function.","params":{"newImplementation":"The address of the new implementation."}},"upgradeToAndCall(address,bytes)":{"details":"This is useful to initialize the proxied contract.","params":{"data":"Data to send as msg.data in the low level call. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.","newImplementation":"The address of the new implementation."}}},"title":"InitializableAdminUpgradeabilityProxy","version":1},"evm":{"bytecode":{"functionDebugData":{"@_10359":{"entryPoint":null,"id":10359,"parameterSlots":1,"returnSlots":0},"@_10478":{"entryPoint":null,"id":10478,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":64,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:306:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"95:209:201","statements":[{"body":{"nodeType":"YulBlock","src":"141:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"150:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"153:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"143:6:201"},"nodeType":"YulFunctionCall","src":"143:12:201"},"nodeType":"YulExpressionStatement","src":"143:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"116:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"125:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"112:3:201"},"nodeType":"YulFunctionCall","src":"112:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"137:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"108:3:201"},"nodeType":"YulFunctionCall","src":"108:32:201"},"nodeType":"YulIf","src":"105:52:201"},{"nodeType":"YulVariableDeclaration","src":"166:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"185:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"179:5:201"},"nodeType":"YulFunctionCall","src":"179:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"170:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"258:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"267:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"270:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"260:6:201"},"nodeType":"YulFunctionCall","src":"260:12:201"},"nodeType":"YulExpressionStatement","src":"260:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"217:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"228:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"243:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"248:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"239:3:201"},"nodeType":"YulFunctionCall","src":"239:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"252:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"235:3:201"},"nodeType":"YulFunctionCall","src":"235:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"224:3:201"},"nodeType":"YulFunctionCall","src":"224:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"214:2:201"},"nodeType":"YulFunctionCall","src":"214:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"207:6:201"},"nodeType":"YulFunctionCall","src":"207:50:201"},"nodeType":"YulIf","src":"204:70:201"},{"nodeType":"YulAssignment","src":"283:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"293:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"283:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"61:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"72:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"84:6:201","type":""}],"src":"14:290:201"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60a060405234801561001057600080fd5b506040516109cb3803806109cb83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b60805161091d6100ae6000396000818161014f015281816101a101528181610274015281816104110152818161043a01526105a4015261091d6000f3fe60806040526004361061005a5760003560e01c80635c60da1b116100435780635c60da1b14610097578063d1f57894146100d5578063f851a440146100e85761005a565b80633659cfe6146100645780634f1ef28614610084575b6100626100fd565b005b34801561007057600080fd5b5061006261007f36600461067b565b610137565b61006261009236600461069d565b610189565b3480156100a357600080fd5b506100ac61025a565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100626100e336600461074f565b6102cb565b3480156100f457600080fd5b506100ac6103f7565b61010561045c565b6101356101307f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b610464565b565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156101815761017e81610488565b50565b61017e6100fd565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561024d576101d083610488565b60008373ffffffffffffffffffffffffffffffffffffffff1683836040516101f992919061082f565b600060405180830381855af49150503d8060008114610234576040519150601f19603f3d011682016040523d82523d6000602084013e610239565b606091505b505090508061024757600080fd5b50505050565b6102556100fd565b505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102c057507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6102c86100fd565b90565b60006102f57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff161461031557600080fd5b61034060017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61083f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc1461036e5761036e61087d565b610377826104d5565b8051156103f35760008273ffffffffffffffffffffffffffffffffffffffff16826040516103a591906108ac565b600060405180830381855af49150503d80600081146103e0576040519150601f19603f3d011682016040523d82523d6000602084013e6103e5565b606091505b505090508061025557600080fd5b5050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102c057507f000000000000000000000000000000000000000000000000000000000000000090565b61013561058c565b3660008037600080366000845af43d6000803e808015610483573d6000f35b3d6000fd5b610491816104d5565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b803b610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161415610135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e0000000000000000000000000000606482015260840161055f565b803573ffffffffffffffffffffffffffffffffffffffff8116811461067657600080fd5b919050565b60006020828403121561068d57600080fd5b61069682610652565b9392505050565b6000806000604084860312156106b257600080fd5b6106bb84610652565b9250602084013567ffffffffffffffff808211156106d857600080fd5b818601915086601f8301126106ec57600080fd5b8135818111156106fb57600080fd5b87602082850101111561070d57600080fd5b6020830194508093505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561076257600080fd5b61076b83610652565b9150602083013567ffffffffffffffff8082111561078857600080fd5b818501915085601f83011261079c57600080fd5b8135818111156107ae576107ae610720565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156107f4576107f4610720565b8160405282815288602084870101111561080d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b8183823760009101908152919050565b600082821015610878577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b818110156108cd57602081860181015185830152016108b3565b818111156108dc576000828501525b50919091019291505056fea2646970667358221220f9157fc154ba5797dbf9f1c996264175793cc650e7132a50aacd715276ed42a364736f6c634300080a0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x9CB CODESIZE SUB DUP1 PUSH2 0x9CB DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH2 0x70 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x91D PUSH2 0xAE PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x14F ADD MSTORE DUP2 DUP2 PUSH2 0x1A1 ADD MSTORE DUP2 DUP2 PUSH2 0x274 ADD MSTORE DUP2 DUP2 PUSH2 0x411 ADD MSTORE DUP2 DUP2 PUSH2 0x43A ADD MSTORE PUSH2 0x5A4 ADD MSTORE PUSH2 0x91D PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0xD1F57894 EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xE8 JUMPI PUSH2 0x5A JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x84 JUMPI JUMPDEST PUSH2 0x62 PUSH2 0xFD JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x62 PUSH2 0x7F CALLDATASIZE PUSH1 0x4 PUSH2 0x67B JUMP JUMPDEST PUSH2 0x137 JUMP JUMPDEST PUSH2 0x62 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x69D JUMP JUMPDEST PUSH2 0x189 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x25A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x62 PUSH2 0xE3 CALLDATASIZE PUSH1 0x4 PUSH2 0x74F JUMP JUMPDEST PUSH2 0x2CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x3F7 JUMP JUMPDEST PUSH2 0x105 PUSH2 0x45C JUMP JUMPDEST PUSH2 0x135 PUSH2 0x130 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x464 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x181 JUMPI PUSH2 0x17E DUP2 PUSH2 0x488 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x17E PUSH2 0xFD JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x24D JUMPI PUSH2 0x1D0 DUP4 PUSH2 0x488 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1F9 SWAP3 SWAP2 SWAP1 PUSH2 0x82F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x234 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 0x239 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x247 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x255 PUSH2 0xFD JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x2C0 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0xFD JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F5 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x315 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x340 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0x83F JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC EQ PUSH2 0x36E JUMPI PUSH2 0x36E PUSH2 0x87D JUMP JUMPDEST PUSH2 0x377 DUP3 PUSH2 0x4D5 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x3F3 JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x3A5 SWAP2 SWAP1 PUSH2 0x8AC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3E0 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 0x3E5 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x2C0 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x135 PUSH2 0x58C JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x483 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x491 DUP2 PUSH2 0x4D5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x568 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x135 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x55F JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x676 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x68D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x696 DUP3 PUSH2 0x652 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x6B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6BB DUP5 PUSH2 0x652 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x6D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x6EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x6FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x762 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x76B DUP4 PUSH2 0x652 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x788 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x79C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x7AE JUMPI PUSH2 0x7AE PUSH2 0x720 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x7F4 JUMPI PUSH2 0x7F4 PUSH2 0x720 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x80D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x878 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x8CD JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x8B3 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x8DC JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF9 ISZERO PUSH32 0xC154BA5797DBF9F1C996264175793CC650E7132A50AACD715276ED42A364736F PUSH13 0x634300080A0033000000000000 ","sourceMap":"528:541:70:-:0;;;745:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;947:14:69;;;528:541:70;;14:290:201;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:201;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:201:o;:::-;528:541:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_2893":{"entryPoint":null,"id":2893,"parameterSlots":0,"returnSlots":0},"@_delegate_2907":{"entryPoint":1124,"id":2907,"parameterSlots":1,"returnSlots":0},"@_fallback_2925":{"entryPoint":253,"id":2925,"parameterSlots":0,"returnSlots":0},"@_implementation_2712":{"entryPoint":null,"id":2712,"parameterSlots":0,"returnSlots":1},"@_setImplementation_2747":{"entryPoint":1237,"id":2747,"parameterSlots":1,"returnSlots":0},"@_upgradeTo_2727":{"entryPoint":1160,"id":2727,"parameterSlots":1,"returnSlots":0},"@_willFallback_10454":{"entryPoint":1420,"id":10454,"parameterSlots":0,"returnSlots":0},"@_willFallback_10491":{"entryPoint":1116,"id":10491,"parameterSlots":0,"returnSlots":0},"@_willFallback_2912":{"entryPoint":null,"id":2912,"parameterSlots":0,"returnSlots":0},"@admin_10384":{"entryPoint":1015,"id":10384,"parameterSlots":0,"returnSlots":1},"@implementation_10396":{"entryPoint":602,"id":10396,"parameterSlots":0,"returnSlots":1},"@initialize_2881":{"entryPoint":715,"id":2881,"parameterSlots":2,"returnSlots":0},"@isContract_445":{"entryPoint":null,"id":445,"parameterSlots":1,"returnSlots":1},"@upgradeToAndCall_10435":{"entryPoint":393,"id":10435,"parameterSlots":3,"returnSlots":0},"@upgradeTo_10409":{"entryPoint":311,"id":10409,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":1618,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":1659,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_bytes_calldata_ptr":{"entryPoint":1693,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_bytes_memory_ptr":{"entryPoint":1871,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":2095,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":2220,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":2111,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x01":{"entryPoint":2173,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":1824,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:4579:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:147:201","statements":[{"nodeType":"YulAssignment","src":"73:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:201"},"nodeType":"YulFunctionCall","src":"82:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:201"}]},{"body":{"nodeType":"YulBlock","src":"188:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"197:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"200:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"190:6:201"},"nodeType":"YulFunctionCall","src":"190:12:201"},"nodeType":"YulExpressionStatement","src":"190:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"142:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:201"},"nodeType":"YulFunctionCall","src":"131:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:201"},"nodeType":"YulFunctionCall","src":"121:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:201"},"nodeType":"YulFunctionCall","src":"114:73:201"},"nodeType":"YulIf","src":"111:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:201","type":""}],"src":"14:196:201"},{"body":{"nodeType":"YulBlock","src":"285:116:201","statements":[{"body":{"nodeType":"YulBlock","src":"331:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"340:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"343:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"333:6:201"},"nodeType":"YulFunctionCall","src":"333:12:201"},"nodeType":"YulExpressionStatement","src":"333:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"306:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"315:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"302:3:201"},"nodeType":"YulFunctionCall","src":"302:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"327:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"298:3:201"},"nodeType":"YulFunctionCall","src":"298:32:201"},"nodeType":"YulIf","src":"295:52:201"},{"nodeType":"YulAssignment","src":"356:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"385:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"366:18:201"},"nodeType":"YulFunctionCall","src":"366:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"356:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"251:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"262:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"274:6:201","type":""}],"src":"215:186:201"},{"body":{"nodeType":"YulBlock","src":"512:559:201","statements":[{"body":{"nodeType":"YulBlock","src":"558:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"567:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"570:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"560:6:201"},"nodeType":"YulFunctionCall","src":"560:12:201"},"nodeType":"YulExpressionStatement","src":"560:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"533:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"542:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"529:3:201"},"nodeType":"YulFunctionCall","src":"529:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"554:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"525:3:201"},"nodeType":"YulFunctionCall","src":"525:32:201"},"nodeType":"YulIf","src":"522:52:201"},{"nodeType":"YulAssignment","src":"583:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"612:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"593:18:201"},"nodeType":"YulFunctionCall","src":"593:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"583:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"631:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"662:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"673:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"658:3:201"},"nodeType":"YulFunctionCall","src":"658:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"645:12:201"},"nodeType":"YulFunctionCall","src":"645:32:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"635:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"686:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"696:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"690:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"741:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"750:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"753:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"743:6:201"},"nodeType":"YulFunctionCall","src":"743:12:201"},"nodeType":"YulExpressionStatement","src":"743:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"729:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"737:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"726:2:201"},"nodeType":"YulFunctionCall","src":"726:14:201"},"nodeType":"YulIf","src":"723:34:201"},{"nodeType":"YulVariableDeclaration","src":"766:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"780:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"791:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"776:3:201"},"nodeType":"YulFunctionCall","src":"776:22:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"770:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"846:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"855:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"858:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"848:6:201"},"nodeType":"YulFunctionCall","src":"848:12:201"},"nodeType":"YulExpressionStatement","src":"848:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"825:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"829:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"821:3:201"},"nodeType":"YulFunctionCall","src":"821:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"836:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"817:3:201"},"nodeType":"YulFunctionCall","src":"817:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"810:6:201"},"nodeType":"YulFunctionCall","src":"810:35:201"},"nodeType":"YulIf","src":"807:55:201"},{"nodeType":"YulVariableDeclaration","src":"871:30:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"898:2:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"885:12:201"},"nodeType":"YulFunctionCall","src":"885:16:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"875:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"928:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"937:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"940:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"930:6:201"},"nodeType":"YulFunctionCall","src":"930:12:201"},"nodeType":"YulExpressionStatement","src":"930:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"916:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"924:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"913:2:201"},"nodeType":"YulFunctionCall","src":"913:14:201"},"nodeType":"YulIf","src":"910:34:201"},{"body":{"nodeType":"YulBlock","src":"994:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1003:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1006:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"996:6:201"},"nodeType":"YulFunctionCall","src":"996:12:201"},"nodeType":"YulExpressionStatement","src":"996:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"967:2:201"},{"name":"length","nodeType":"YulIdentifier","src":"971:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"963:3:201"},"nodeType":"YulFunctionCall","src":"963:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"980:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"959:3:201"},"nodeType":"YulFunctionCall","src":"959:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"985:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"956:2:201"},"nodeType":"YulFunctionCall","src":"956:37:201"},"nodeType":"YulIf","src":"953:57:201"},{"nodeType":"YulAssignment","src":"1019:21:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1033:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"1037:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1029:3:201"},"nodeType":"YulFunctionCall","src":"1029:11:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1019:6:201"}]},{"nodeType":"YulAssignment","src":"1049:16:201","value":{"name":"length","nodeType":"YulIdentifier","src":"1059:6:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1049:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"462:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"473:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"485:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"493:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"501:6:201","type":""}],"src":"406:665:201"},{"body":{"nodeType":"YulBlock","src":"1177:125:201","statements":[{"nodeType":"YulAssignment","src":"1187:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1199:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1210:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1195:3:201"},"nodeType":"YulFunctionCall","src":"1195:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1187:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1229:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1244:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1252:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1240:3:201"},"nodeType":"YulFunctionCall","src":"1240:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1222:6:201"},"nodeType":"YulFunctionCall","src":"1222:74:201"},"nodeType":"YulExpressionStatement","src":"1222:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1146:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1157:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1168:4:201","type":""}],"src":"1076:226:201"},{"body":{"nodeType":"YulBlock","src":"1339:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1356:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1359:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1349:6:201"},"nodeType":"YulFunctionCall","src":"1349:88:201"},"nodeType":"YulExpressionStatement","src":"1349:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1453:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1456:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1446:6:201"},"nodeType":"YulFunctionCall","src":"1446:15:201"},"nodeType":"YulExpressionStatement","src":"1446:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1477:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1480:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1470:6:201"},"nodeType":"YulFunctionCall","src":"1470:15:201"},"nodeType":"YulExpressionStatement","src":"1470:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1307:184:201"},{"body":{"nodeType":"YulBlock","src":"1592:958:201","statements":[{"body":{"nodeType":"YulBlock","src":"1638:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1647:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1650:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1640:6:201"},"nodeType":"YulFunctionCall","src":"1640:12:201"},"nodeType":"YulExpressionStatement","src":"1640:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1613:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1622:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1609:3:201"},"nodeType":"YulFunctionCall","src":"1609:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1634:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1605:3:201"},"nodeType":"YulFunctionCall","src":"1605:32:201"},"nodeType":"YulIf","src":"1602:52:201"},{"nodeType":"YulAssignment","src":"1663:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1692:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1673:18:201"},"nodeType":"YulFunctionCall","src":"1673:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1663:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1711:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1742:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1753:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1738:3:201"},"nodeType":"YulFunctionCall","src":"1738:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1725:12:201"},"nodeType":"YulFunctionCall","src":"1725:32:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1715:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1766:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1776:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1770:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1821:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1830:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1833:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1823:6:201"},"nodeType":"YulFunctionCall","src":"1823:12:201"},"nodeType":"YulExpressionStatement","src":"1823:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1809:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1817:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1806:2:201"},"nodeType":"YulFunctionCall","src":"1806:14:201"},"nodeType":"YulIf","src":"1803:34:201"},{"nodeType":"YulVariableDeclaration","src":"1846:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1860:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"1871:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1856:3:201"},"nodeType":"YulFunctionCall","src":"1856:22:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1850:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1926:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1935:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1938:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1928:6:201"},"nodeType":"YulFunctionCall","src":"1928:12:201"},"nodeType":"YulExpressionStatement","src":"1928:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1905:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"1909:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1901:3:201"},"nodeType":"YulFunctionCall","src":"1901:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1916:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1897:3:201"},"nodeType":"YulFunctionCall","src":"1897:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1890:6:201"},"nodeType":"YulFunctionCall","src":"1890:35:201"},"nodeType":"YulIf","src":"1887:55:201"},{"nodeType":"YulVariableDeclaration","src":"1951:26:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"1974:2:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1961:12:201"},"nodeType":"YulFunctionCall","src":"1961:16:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"1955:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2000:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2002:16:201"},"nodeType":"YulFunctionCall","src":"2002:18:201"},"nodeType":"YulExpressionStatement","src":"2002:18:201"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"1992:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1996:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1989:2:201"},"nodeType":"YulFunctionCall","src":"1989:10:201"},"nodeType":"YulIf","src":"1986:36:201"},{"nodeType":"YulVariableDeclaration","src":"2031:76:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2041:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"2035:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2116:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2136:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2130:5:201"},"nodeType":"YulFunctionCall","src":"2130:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"2120:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2148:71:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2170:6:201"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2194:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"2198:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2190:3:201"},"nodeType":"YulFunctionCall","src":"2190:13:201"},{"name":"_4","nodeType":"YulIdentifier","src":"2205:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2186:3:201"},"nodeType":"YulFunctionCall","src":"2186:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"2210:2:201","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2182:3:201"},"nodeType":"YulFunctionCall","src":"2182:31:201"},{"name":"_4","nodeType":"YulIdentifier","src":"2215:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2178:3:201"},"nodeType":"YulFunctionCall","src":"2178:40:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2166:3:201"},"nodeType":"YulFunctionCall","src":"2166:53:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"2152:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2278:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2280:16:201"},"nodeType":"YulFunctionCall","src":"2280:18:201"},"nodeType":"YulExpressionStatement","src":"2280:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2237:10:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2249:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2234:2:201"},"nodeType":"YulFunctionCall","src":"2234:18:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2257:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"2269:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2254:2:201"},"nodeType":"YulFunctionCall","src":"2254:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2231:2:201"},"nodeType":"YulFunctionCall","src":"2231:46:201"},"nodeType":"YulIf","src":"2228:72:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2316:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2320:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2309:6:201"},"nodeType":"YulFunctionCall","src":"2309:22:201"},"nodeType":"YulExpressionStatement","src":"2309:22:201"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2347:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"2355:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2340:6:201"},"nodeType":"YulFunctionCall","src":"2340:18:201"},"nodeType":"YulExpressionStatement","src":"2340:18:201"},{"body":{"nodeType":"YulBlock","src":"2404:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2413:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2416:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2406:6:201"},"nodeType":"YulFunctionCall","src":"2406:12:201"},"nodeType":"YulExpressionStatement","src":"2406:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2381:2:201"},{"name":"_3","nodeType":"YulIdentifier","src":"2385:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2377:3:201"},"nodeType":"YulFunctionCall","src":"2377:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"2390:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2373:3:201"},"nodeType":"YulFunctionCall","src":"2373:20:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2395:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2370:2:201"},"nodeType":"YulFunctionCall","src":"2370:33:201"},"nodeType":"YulIf","src":"2367:53:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2446:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2454:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2442:3:201"},"nodeType":"YulFunctionCall","src":"2442:15:201"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2463:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"2467:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2459:3:201"},"nodeType":"YulFunctionCall","src":"2459:11:201"},{"name":"_3","nodeType":"YulIdentifier","src":"2472:2:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"2429:12:201"},"nodeType":"YulFunctionCall","src":"2429:46:201"},"nodeType":"YulExpressionStatement","src":"2429:46:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2499:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"2507:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2495:3:201"},"nodeType":"YulFunctionCall","src":"2495:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"2512:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2491:3:201"},"nodeType":"YulFunctionCall","src":"2491:24:201"},{"kind":"number","nodeType":"YulLiteral","src":"2517:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2484:6:201"},"nodeType":"YulFunctionCall","src":"2484:35:201"},"nodeType":"YulExpressionStatement","src":"2484:35:201"},{"nodeType":"YulAssignment","src":"2528:16:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"2538:6:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2528:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_bytes_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1550:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1561:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1573:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1581:6:201","type":""}],"src":"1496:1054:201"},{"body":{"nodeType":"YulBlock","src":"2702:124:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2725:3:201"},{"name":"value0","nodeType":"YulIdentifier","src":"2730:6:201"},{"name":"value1","nodeType":"YulIdentifier","src":"2738:6:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"2712:12:201"},"nodeType":"YulFunctionCall","src":"2712:33:201"},"nodeType":"YulExpressionStatement","src":"2712:33:201"},{"nodeType":"YulVariableDeclaration","src":"2754:26:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2768:3:201"},{"name":"value1","nodeType":"YulIdentifier","src":"2773:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2764:3:201"},"nodeType":"YulFunctionCall","src":"2764:16:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2758:2:201","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2796:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"2800:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2789:6:201"},"nodeType":"YulFunctionCall","src":"2789:13:201"},"nodeType":"YulExpressionStatement","src":"2789:13:201"},{"nodeType":"YulAssignment","src":"2811:9:201","value":{"name":"_1","nodeType":"YulIdentifier","src":"2818:2:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"2811:3:201"}]}]},"name":"abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"2670:3:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2675:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2683:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"2694:3:201","type":""}],"src":"2555:271:201"},{"body":{"nodeType":"YulBlock","src":"2880:230:201","statements":[{"body":{"nodeType":"YulBlock","src":"2910:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2931:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2934:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2924:6:201"},"nodeType":"YulFunctionCall","src":"2924:88:201"},"nodeType":"YulExpressionStatement","src":"2924:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3032:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3035:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3025:6:201"},"nodeType":"YulFunctionCall","src":"3025:15:201"},"nodeType":"YulExpressionStatement","src":"3025:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3060:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3063:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3053:6:201"},"nodeType":"YulFunctionCall","src":"3053:15:201"},"nodeType":"YulExpressionStatement","src":"3053:15:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2896:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"2899:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2893:2:201"},"nodeType":"YulFunctionCall","src":"2893:8:201"},"nodeType":"YulIf","src":"2890:188:201"},{"nodeType":"YulAssignment","src":"3087:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3099:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"3102:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3095:3:201"},"nodeType":"YulFunctionCall","src":"3095:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"3087:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"2862:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"2865:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"2871:4:201","type":""}],"src":"2831:279:201"},{"body":{"nodeType":"YulBlock","src":"3147:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3164:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3167:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3157:6:201"},"nodeType":"YulFunctionCall","src":"3157:88:201"},"nodeType":"YulExpressionStatement","src":"3157:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3261:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3264:4:201","type":"","value":"0x01"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3254:6:201"},"nodeType":"YulFunctionCall","src":"3254:15:201"},"nodeType":"YulExpressionStatement","src":"3254:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3285:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3288:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3278:6:201"},"nodeType":"YulFunctionCall","src":"3278:15:201"},"nodeType":"YulExpressionStatement","src":"3278:15:201"}]},"name":"panic_error_0x01","nodeType":"YulFunctionDefinition","src":"3115:184:201"},{"body":{"nodeType":"YulBlock","src":"3441:289:201","statements":[{"nodeType":"YulVariableDeclaration","src":"3451:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3471:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3465:5:201"},"nodeType":"YulFunctionCall","src":"3465:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"3455:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3487:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3496:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"3491:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3558:77:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3583:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"3588:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3579:3:201"},"nodeType":"YulFunctionCall","src":"3579:11:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3606:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"3614:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3602:3:201"},"nodeType":"YulFunctionCall","src":"3602:14:201"},{"kind":"number","nodeType":"YulLiteral","src":"3618:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3598:3:201"},"nodeType":"YulFunctionCall","src":"3598:25:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3592:5:201"},"nodeType":"YulFunctionCall","src":"3592:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3572:6:201"},"nodeType":"YulFunctionCall","src":"3572:53:201"},"nodeType":"YulExpressionStatement","src":"3572:53:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3517:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"3520:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3514:2:201"},"nodeType":"YulFunctionCall","src":"3514:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"3528:21:201","statements":[{"nodeType":"YulAssignment","src":"3530:17:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3539:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"3542:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3535:3:201"},"nodeType":"YulFunctionCall","src":"3535:12:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"3530:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"3510:3:201","statements":[]},"src":"3506:129:201"},{"body":{"nodeType":"YulBlock","src":"3661:31:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3674:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"3679:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3670:3:201"},"nodeType":"YulFunctionCall","src":"3670:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"3688:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3663:6:201"},"nodeType":"YulFunctionCall","src":"3663:27:201"},"nodeType":"YulExpressionStatement","src":"3663:27:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3650:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"3653:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3647:2:201"},"nodeType":"YulFunctionCall","src":"3647:13:201"},"nodeType":"YulIf","src":"3644:48:201"},{"nodeType":"YulAssignment","src":"3701:23:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3712:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"3717:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3708:3:201"},"nodeType":"YulFunctionCall","src":"3708:16:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"3701:3:201"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"3417:3:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3422:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"3433:3:201","type":""}],"src":"3304:426:201"},{"body":{"nodeType":"YulBlock","src":"3909:249:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3926:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3937:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3919:6:201"},"nodeType":"YulFunctionCall","src":"3919:21:201"},"nodeType":"YulExpressionStatement","src":"3919:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3960:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3971:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3956:3:201"},"nodeType":"YulFunctionCall","src":"3956:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"3976:2:201","type":"","value":"59"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3949:6:201"},"nodeType":"YulFunctionCall","src":"3949:30:201"},"nodeType":"YulExpressionStatement","src":"3949:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3999:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4010:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3995:3:201"},"nodeType":"YulFunctionCall","src":"3995:18:201"},{"hexValue":"43616e6e6f742073657420612070726f787920696d706c656d656e746174696f","kind":"string","nodeType":"YulLiteral","src":"4015:34:201","type":"","value":"Cannot set a proxy implementatio"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3988:6:201"},"nodeType":"YulFunctionCall","src":"3988:62:201"},"nodeType":"YulExpressionStatement","src":"3988:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4070:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4081:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4066:3:201"},"nodeType":"YulFunctionCall","src":"4066:18:201"},{"hexValue":"6e20746f2061206e6f6e2d636f6e74726163742061646472657373","kind":"string","nodeType":"YulLiteral","src":"4086:29:201","type":"","value":"n to a non-contract address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4059:6:201"},"nodeType":"YulFunctionCall","src":"4059:57:201"},"nodeType":"YulExpressionStatement","src":"4059:57:201"},{"nodeType":"YulAssignment","src":"4125:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4137:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4148:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4133:3:201"},"nodeType":"YulFunctionCall","src":"4133:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4125:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3886:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3900:4:201","type":""}],"src":"3735:423:201"},{"body":{"nodeType":"YulBlock","src":"4337:240:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4354:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4365:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4347:6:201"},"nodeType":"YulFunctionCall","src":"4347:21:201"},"nodeType":"YulExpressionStatement","src":"4347:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4388:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4399:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4384:3:201"},"nodeType":"YulFunctionCall","src":"4384:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"4404:2:201","type":"","value":"50"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4377:6:201"},"nodeType":"YulFunctionCall","src":"4377:30:201"},"nodeType":"YulExpressionStatement","src":"4377:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4427:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4438:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4423:3:201"},"nodeType":"YulFunctionCall","src":"4423:18:201"},{"hexValue":"43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e206672","kind":"string","nodeType":"YulLiteral","src":"4443:34:201","type":"","value":"Cannot call fallback function fr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4416:6:201"},"nodeType":"YulFunctionCall","src":"4416:62:201"},"nodeType":"YulExpressionStatement","src":"4416:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4498:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4509:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4494:3:201"},"nodeType":"YulFunctionCall","src":"4494:18:201"},{"hexValue":"6f6d207468652070726f78792061646d696e","kind":"string","nodeType":"YulLiteral","src":"4514:20:201","type":"","value":"om the proxy admin"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4487:6:201"},"nodeType":"YulFunctionCall","src":"4487:48:201"},"nodeType":"YulExpressionStatement","src":"4487:48:201"},{"nodeType":"YulAssignment","src":"4544:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4556:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4567:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4552:3:201"},"nodeType":"YulFunctionCall","src":"4552:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4544:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4314:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4328:4:201","type":""}],"src":"4163:414:201"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n        value1 := add(_2, 32)\n        value2 := length\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := calldataload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let _4 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n        if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        calldatacopy(add(memPtr, 32), add(_2, 32), _3)\n        mstore(add(add(memPtr, _3), 32), 0)\n        value1 := memPtr\n    }\n    function abi_encode_tuple_packed_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        calldatacopy(pos, value0, value1)\n        let _1 := add(pos, value1)\n        mstore(_1, 0)\n        end := _1\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        diff := sub(x, y)\n    }\n    function panic_error_0x01()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x01)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            mstore(add(pos, i), mload(add(add(value0, i), 0x20)))\n        }\n        if gt(i, length) { mstore(add(pos, length), 0) }\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_b5145a64ce8c406e5785204fe5b300f0ceda96d6636350b38fdccb9cd8c0c37c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 59)\n        mstore(add(headStart, 64), \"Cannot set a proxy implementatio\")\n        mstore(add(headStart, 96), \"n to a non-contract address\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_08b466bde770d6d309a22d90ec051a62ad397be6218a53e741989877ec297fc9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 50)\n        mstore(add(headStart, 64), \"Cannot call fallback function fr\")\n        mstore(add(headStart, 96), \"om the proxy admin\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"10348":[{"length":32,"start":335},{"length":32,"start":417},{"length":32,"start":628},{"length":32,"start":1041},{"length":32,"start":1082},{"length":32,"start":1444}]},"linkReferences":{},"object":"60806040526004361061005a5760003560e01c80635c60da1b116100435780635c60da1b14610097578063d1f57894146100d5578063f851a440146100e85761005a565b80633659cfe6146100645780634f1ef28614610084575b6100626100fd565b005b34801561007057600080fd5b5061006261007f36600461067b565b610137565b61006261009236600461069d565b610189565b3480156100a357600080fd5b506100ac61025a565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100626100e336600461074f565b6102cb565b3480156100f457600080fd5b506100ac6103f7565b61010561045c565b6101356101307f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b610464565b565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156101815761017e81610488565b50565b61017e6100fd565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561024d576101d083610488565b60008373ffffffffffffffffffffffffffffffffffffffff1683836040516101f992919061082f565b600060405180830381855af49150503d8060008114610234576040519150601f19603f3d011682016040523d82523d6000602084013e610239565b606091505b505090508061024757600080fd5b50505050565b6102556100fd565b505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102c057507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6102c86100fd565b90565b60006102f57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff161461031557600080fd5b61034060017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61083f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc1461036e5761036e61087d565b610377826104d5565b8051156103f35760008273ffffffffffffffffffffffffffffffffffffffff16826040516103a591906108ac565b600060405180830381855af49150503d80600081146103e0576040519150601f19603f3d011682016040523d82523d6000602084013e6103e5565b606091505b505090508061025557600080fd5b5050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102c057507f000000000000000000000000000000000000000000000000000000000000000090565b61013561058c565b3660008037600080366000845af43d6000803e808015610483573d6000f35b3d6000fd5b610491816104d5565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b803b610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161415610135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e0000000000000000000000000000606482015260840161055f565b803573ffffffffffffffffffffffffffffffffffffffff8116811461067657600080fd5b919050565b60006020828403121561068d57600080fd5b61069682610652565b9392505050565b6000806000604084860312156106b257600080fd5b6106bb84610652565b9250602084013567ffffffffffffffff808211156106d857600080fd5b818601915086601f8301126106ec57600080fd5b8135818111156106fb57600080fd5b87602082850101111561070d57600080fd5b6020830194508093505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561076257600080fd5b61076b83610652565b9150602083013567ffffffffffffffff8082111561078857600080fd5b818501915085601f83011261079c57600080fd5b8135818111156107ae576107ae610720565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156107f4576107f4610720565b8160405282815288602084870101111561080d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b8183823760009101908152919050565b600082821015610878577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b818110156108cd57602081860181015185830152016108b3565b818111156108dc576000828501525b50919091019291505056fea2646970667358221220f9157fc154ba5797dbf9f1c996264175793cc650e7132a50aacd715276ed42a364736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0xD1F57894 EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xE8 JUMPI PUSH2 0x5A JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x84 JUMPI JUMPDEST PUSH2 0x62 PUSH2 0xFD JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x62 PUSH2 0x7F CALLDATASIZE PUSH1 0x4 PUSH2 0x67B JUMP JUMPDEST PUSH2 0x137 JUMP JUMPDEST PUSH2 0x62 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x69D JUMP JUMPDEST PUSH2 0x189 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x25A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x62 PUSH2 0xE3 CALLDATASIZE PUSH1 0x4 PUSH2 0x74F JUMP JUMPDEST PUSH2 0x2CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x3F7 JUMP JUMPDEST PUSH2 0x105 PUSH2 0x45C JUMP JUMPDEST PUSH2 0x135 PUSH2 0x130 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x464 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x181 JUMPI PUSH2 0x17E DUP2 PUSH2 0x488 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x17E PUSH2 0xFD JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x24D JUMPI PUSH2 0x1D0 DUP4 PUSH2 0x488 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1F9 SWAP3 SWAP2 SWAP1 PUSH2 0x82F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x234 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 0x239 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x247 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x255 PUSH2 0xFD JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x2C0 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0xFD JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F5 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x315 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x340 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0x83F JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC EQ PUSH2 0x36E JUMPI PUSH2 0x36E PUSH2 0x87D JUMP JUMPDEST PUSH2 0x377 DUP3 PUSH2 0x4D5 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x3F3 JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x3A5 SWAP2 SWAP1 PUSH2 0x8AC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3E0 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 0x3E5 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x2C0 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x135 PUSH2 0x58C JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x483 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x491 DUP2 PUSH2 0x4D5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x568 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x135 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x55F JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x676 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x68D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x696 DUP3 PUSH2 0x652 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x6B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6BB DUP5 PUSH2 0x652 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x6D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x6EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x6FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x762 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x76B DUP4 PUSH2 0x652 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x788 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x79C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x7AE JUMPI PUSH2 0x7AE PUSH2 0x720 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x7F4 JUMPI PUSH2 0x7F4 PUSH2 0x720 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x80D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x878 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x8CD JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x8B3 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x8DC JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF9 ISZERO PUSH32 0xC154BA5797DBF9F1C996264175793CC650E7132A50AACD715276ED42A364736F PUSH13 0x634300080A0033000000000000 ","sourceMap":"528:541:70:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;572:11:20;:9;:11::i;:::-;528:541:70;1651:103:69;;;;;;;;;;-1:-1:-1;1651:103:69;;;;;:::i;:::-;;:::i;2283:234::-;;;;;;:::i;:::-;;:::i;1359:96::-;;;;;;;;;;;;;:::i;:::-;;;1252:42:201;1240:55;;;1222:74;;1210:2;1195:18;1359:96:69;;;;;;;859:365:19;;;;;;:::i;:::-;;:::i;1172:76:69:-;;;;;;;;;;;;;:::i;2155:90:20:-;2191:15;:13;:15::i;:::-;2212:28;2222:17;823:66:17;1183:11;;1008:196;2222:17:20;2212:9;:28::i;:::-;2155:90::o;1651:103:69:-;999:10;:20;1013:6;999:20;;995:74;;;1720:29:::1;1731:17;1720:10;:29::i;:::-;1651:103:::0;:::o;995:74::-;1051:11;:9;:11::i;2283:234::-;999:10;:20;1013:6;999:20;;995:74;;;2400:29:::1;2411:17;2400:10;:29::i;:::-;2436:12;2454:17;:30;;2485:4;;2454:36;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2435:55;;;2504:7;2496:16;;;::::0;::::1;;2394:123;2283:234:::0;;;:::o;995:74::-;1051:11;:9;:11::i;:::-;2283:234;;;:::o;1359:96::-;1411:7;999:10;:20;1013:6;999:20;;995:74;;;-1:-1:-1;823:66:17;1183:11;;1359:96:69:o;995:74::-;1051:11;:9;:11::i;:::-;1359:96;:::o;859:365:19:-;973:1;944:17;823:66:17;1183:11;;1008:196;944:17:19;:31;;;936:40;;;;;;1020:54;1073:1;1028:41;1020:54;:::i;:::-;823:66:17;989:86:19;982:94;;;;:::i;:::-;1082:26;1101:6;1082:18;:26::i;:::-;1118:12;;:16;1114:106;;1145:12;1163:6;:19;;1183:5;1163:26;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1144:45;;;1205:7;1197:16;;;;;1114:106;859:365;;:::o;1172:76:69:-;1215:7;999:10;:20;1013:6;999:20;;995:74;;;-1:-1:-1;1237:6:69::1;1359:96:::0;:::o;914:153:70:-;1009:53;:51;:53::i;1005:802:20:-;1338:14;1335:1;1332;1319:34;1534:1;1531;1515:14;1512:1;1496:14;1489:5;1476:60;1598:16;1595:1;1592;1577:38;1630:6;1685:52;;;;1772:16;1769:1;1762:27;1685:52;1712:16;1709:1;1702:27;1339:142:17;1401:37;1420:17;1401:18;:37::i;:::-;1449:27;;;;;;;;;;;1339:142;:::o;1618:334::-;1025:20:3;;1688:127:17;;;;;;;3937:2:201;1688:127:17;;;3919:21:201;3976:2;3956:18;;;3949:30;4015:34;3995:18;;;3988:62;4086:29;4066:18;;;4059:57;4133:19;;1688:127:17;;;;;;;;;823:66;1911:31;1618:334::o;2595:172:69:-;2660:10;:20;2674:6;2660:20;;;2652:83;;;;;;;4365:2:201;2652:83:69;;;4347:21:201;4404:2;4384:18;;;4377:30;4443:34;4423:18;;;4416:62;4514:20;4494:18;;;4487:48;4552:19;;2652:83:69;4163:414:201;14:196;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:186::-;274:6;327:2;315:9;306:7;302:23;298:32;295:52;;;343:1;340;333:12;295:52;366:29;385:9;366:29;:::i;:::-;356:39;215:186;-1:-1:-1;;;215:186:201:o;406:665::-;485:6;493;501;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;593:29;612:9;593:29;:::i;:::-;583:39;;673:2;662:9;658:18;645:32;696:18;737:2;729:6;726:14;723:34;;;753:1;750;743:12;723:34;791:6;780:9;776:22;766:32;;836:7;829:4;825:2;821:13;817:27;807:55;;858:1;855;848:12;807:55;898:2;885:16;924:2;916:6;913:14;910:34;;;940:1;937;930:12;910:34;985:7;980:2;971:6;967:2;963:15;959:24;956:37;953:57;;;1006:1;1003;996:12;953:57;1037:2;1033;1029:11;1019:21;;1059:6;1049:16;;;;;406:665;;;;;:::o;1307:184::-;1359:77;1356:1;1349:88;1456:4;1453:1;1446:15;1480:4;1477:1;1470:15;1496:1054;1573:6;1581;1634:2;1622:9;1613:7;1609:23;1605:32;1602:52;;;1650:1;1647;1640:12;1602:52;1673:29;1692:9;1673:29;:::i;:::-;1663:39;;1753:2;1742:9;1738:18;1725:32;1776:18;1817:2;1809:6;1806:14;1803:34;;;1833:1;1830;1823:12;1803:34;1871:6;1860:9;1856:22;1846:32;;1916:7;1909:4;1905:2;1901:13;1897:27;1887:55;;1938:1;1935;1928:12;1887:55;1974:2;1961:16;1996:2;1992;1989:10;1986:36;;;2002:18;;:::i;:::-;2136:2;2130:9;2198:4;2190:13;;2041:66;2186:22;;;2210:2;2182:31;2178:40;2166:53;;;2234:18;;;2254:22;;;2231:46;2228:72;;;2280:18;;:::i;:::-;2320:10;2316:2;2309:22;2355:2;2347:6;2340:18;2395:7;2390:2;2385;2381;2377:11;2373:20;2370:33;2367:53;;;2416:1;2413;2406:12;2367:53;2472:2;2467;2463;2459:11;2454:2;2446:6;2442:15;2429:46;2517:1;2512:2;2507;2499:6;2495:15;2491:24;2484:35;2538:6;2528:16;;;;;;;1496:1054;;;;;:::o;2555:271::-;2738:6;2730;2725:3;2712:33;2694:3;2764:16;;2789:13;;;2764:16;2555:271;-1:-1:-1;2555:271:201:o;2831:279::-;2871:4;2899:1;2896;2893:8;2890:188;;;2934:77;2931:1;2924:88;3035:4;3032:1;3025:15;3063:4;3060:1;3053:15;2890:188;-1:-1:-1;3095:9:201;;2831:279::o;3115:184::-;3167:77;3164:1;3157:88;3264:4;3261:1;3254:15;3288:4;3285:1;3278:15;3304:426;3433:3;3471:6;3465:13;3496:1;3506:129;3520:6;3517:1;3514:13;3506:129;;;3618:4;3602:14;;;3598:25;;3592:32;3579:11;;;3572:53;3535:12;3506:129;;;3653:6;3650:1;3647:13;3644:48;;;3688:1;3679:6;3674:3;3670:16;3663:27;3644:48;-1:-1:-1;3708:16:201;;;;;3304:426;-1:-1:-1;;3304:426:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"466600","executionCost":"infinite","totalCost":"infinite"},"external":{"":"infinite","admin()":"infinite","implementation()":"infinite","initialize(address,bytes)":"infinite","upgradeTo(address)":"infinite","upgradeToAndCall(address,bytes)":"infinite"},"internal":{"_willFallback()":"infinite"}},"methodIdentifiers":{"admin()":"f851a440","implementation()":"5c60da1b","initialize(address,bytes)":"d1f57894","upgradeTo(address)":"3659cfe6","upgradeToAndCall(address,bytes)":"4f1ef286"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"Extends BaseAdminUpgradeabilityProxy with an initializer function\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"returns\":{\"_0\":\"The address of the proxy admin.\"}},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"admin\":\"The address of the admin\"}},\"implementation()\":{\"returns\":{\"_0\":\"The address of the implementation.\"}},\"initialize(address,bytes)\":{\"details\":\"Contract initializer.\",\"params\":{\"_data\":\"Data to send as msg.data to the implementation to initialize the proxied contract. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding. This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\",\"_logic\":\"Address of the initial implementation.\"}},\"upgradeTo(address)\":{\"details\":\"Only the admin can call this function.\",\"params\":{\"newImplementation\":\"The address of the new implementation.\"}},\"upgradeToAndCall(address,bytes)\":{\"details\":\"This is useful to initialize the proxied contract.\",\"params\":{\"data\":\"Data to send as msg.data in the low level call. It should include the signature and the parameters of the function to be called, as described in https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\",\"newImplementation\":\"The address of the new implementation.\"}}},\"title\":\"InitializableAdminUpgradeabilityProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"admin()\":{\"notice\":\"Return the admin address\"},\"implementation()\":{\"notice\":\"Return the implementation address\"},\"upgradeTo(address)\":{\"notice\":\"Upgrade the backing implementation of the proxy.\"},\"upgradeToAndCall(address,bytes)\":{\"notice\":\"Upgrade the backing implementation of the proxy and call a function on the new implementation.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol\":\"InitializableImmutableAdminUpgradeabilityProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './Proxy.sol';\\nimport '../contracts/Address.sol';\\n\\n/**\\n * @title BaseUpgradeabilityProxy\\n * @dev This contract implements a proxy that allows to change the\\n * implementation address to which it will delegate.\\n * Such a change is called an implementation upgrade.\\n */\\ncontract BaseUpgradeabilityProxy is Proxy {\\n  /**\\n   * @dev Emitted when the implementation is upgraded.\\n   * @param implementation Address of the new implementation.\\n   */\\n  event Upgraded(address indexed implementation);\\n\\n  /**\\n   * @dev Storage slot with the address of the current implementation.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant IMPLEMENTATION_SLOT =\\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n  /**\\n   * @dev Returns the current implementation.\\n   * @return impl Address of the current implementation\\n   */\\n  function _implementation() internal view override returns (address impl) {\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      impl := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Upgrades the proxy to a new implementation.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _upgradeTo(address newImplementation) internal {\\n    _setImplementation(newImplementation);\\n    emit Upgraded(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Sets the implementation address of the proxy.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _setImplementation(address newImplementation) internal {\\n    require(\\n      Address.isContract(newImplementation),\\n      'Cannot set a proxy implementation to a non-contract address'\\n    );\\n\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newImplementation)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe47eb278267d31f096fc643c2a322c72066abfa6ba07f6386c266fe7cbd15013\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableUpgradeabilityProxy\\n * @dev Extends BaseUpgradeabilityProxy with an initializer for initializing\\n * implementation and init data.\\n */\\ncontract InitializableUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Contract initializer.\\n   * @param _logic Address of the initial implementation.\\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\\n   */\\n  function initialize(address _logic, bytes memory _data) public payable {\\n    require(_implementation() == address(0));\\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\\n    _setImplementation(_logic);\\n    if (_data.length > 0) {\\n      (bool success, ) = _logic.delegatecall(_data);\\n      require(success);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x8a1e927b97f5da20f4640ba4d2588666910dfa89f5a2b0a37440d27e5a47ee08\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\n    assembly {\\n      // Copy msg.data. We take full control of memory in this inline assembly\\n      // block because it will not return to Solidity code. We overwrite the\\n      // Solidity scratch pad at memory position 0.\\n      calldatacopy(0, 0, calldatasize())\\n\\n      // Call the implementation.\\n      // out and outsize are 0 because we don't know the size yet.\\n      let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n      // Copy the returned data.\\n      returndatacopy(0, 0, returndatasize())\\n\\n      switch result\\n      // delegatecall returns 0 on error.\\n      case 0 {\\n        revert(0, returndatasize())\\n      }\\n      default {\\n        return(0, returndatasize())\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {BaseUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title BaseImmutableAdminUpgradeabilityProxy\\n * @author Aave, inspired by the OpenZeppelin upgradeability proxy pattern\\n * @notice This contract combines an upgradeability proxy with an authorization\\n * mechanism for administrative tasks.\\n * @dev The admin role is stored in an immutable, which helps saving transactions costs\\n * All external functions in this contract must be guarded by the\\n * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\\n * feature proposal that would enable this to be done automatically.\\n */\\ncontract BaseImmutableAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  address internal immutable _admin;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param admin The address of the admin\\n   */\\n  constructor(address admin) {\\n    _admin = admin;\\n  }\\n\\n  modifier ifAdmin() {\\n    if (msg.sender == _admin) {\\n      _;\\n    } else {\\n      _fallback();\\n    }\\n  }\\n\\n  /**\\n   * @notice Return the admin address\\n   * @return The address of the proxy admin.\\n   */\\n  function admin() external ifAdmin returns (address) {\\n    return _admin;\\n  }\\n\\n  /**\\n   * @notice Return the implementation address\\n   * @return The address of the implementation.\\n   */\\n  function implementation() external ifAdmin returns (address) {\\n    return _implementation();\\n  }\\n\\n  /**\\n   * @notice Upgrade the backing implementation of the proxy.\\n   * @dev Only the admin can call this function.\\n   * @param newImplementation The address of the new implementation.\\n   */\\n  function upgradeTo(address newImplementation) external ifAdmin {\\n    _upgradeTo(newImplementation);\\n  }\\n\\n  /**\\n   * @notice Upgrade the backing implementation of the proxy and call a function\\n   * on the new implementation.\\n   * @dev This is useful to initialize the proxied contract.\\n   * @param newImplementation The address of the new implementation.\\n   * @param data Data to send as msg.data in the low level call.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   */\\n  function upgradeToAndCall(\\n    address newImplementation,\\n    bytes calldata data\\n  ) external payable ifAdmin {\\n    _upgradeTo(newImplementation);\\n    (bool success, ) = newImplementation.delegatecall(data);\\n    require(success);\\n  }\\n\\n  /**\\n   * @notice Only fall back when the sender is not the admin.\\n   */\\n  function _willFallback() internal virtual override {\\n    require(msg.sender != _admin, 'Cannot call fallback function from the proxy admin');\\n    super._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0x11d0bbbcb776fc3519b79af975016fa342115cff9e70d982acfe3b7f86683674\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {InitializableUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol';\\nimport {Proxy} from '../../../dependencies/openzeppelin/upgradeability/Proxy.sol';\\nimport {BaseImmutableAdminUpgradeabilityProxy} from './BaseImmutableAdminUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableAdminUpgradeabilityProxy\\n * @author Aave\\n * @dev Extends BaseAdminUpgradeabilityProxy with an initializer function\\n */\\ncontract InitializableImmutableAdminUpgradeabilityProxy is\\n  BaseImmutableAdminUpgradeabilityProxy,\\n  InitializableUpgradeabilityProxy\\n{\\n  /**\\n   * @dev Constructor.\\n   * @param admin The address of the admin\\n   */\\n  constructor(address admin) BaseImmutableAdminUpgradeabilityProxy(admin) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc BaseImmutableAdminUpgradeabilityProxy\\n  function _willFallback() internal override(BaseImmutableAdminUpgradeabilityProxy, Proxy) {\\n    BaseImmutableAdminUpgradeabilityProxy._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0xea2a329a627687f51e7f1240a05406efb208b036054dc6ed5aca217cdc0020f0\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"admin()":{"notice":"Return the admin address"},"implementation()":{"notice":"Return the implementation address"},"upgradeTo(address)":{"notice":"Upgrade the backing implementation of the proxy."},"upgradeToAndCall(address,bytes)":{"notice":"Upgrade the backing implementation of the proxy and call a function on the new implementation."}},"version":1}}},"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol":{"VersionedInitializable":{"abi":[],"devdoc":{"author":"Aave, inspired by the OpenZeppelin Initializable contract","details":"WARNING: Unlike constructors, initializer functions must be manually invoked. This applies both to deploying an Initializable contract, as well as extending an Initializable contract via inheritance. WARNING: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or ensure that all initializers are idempotent, because this is not dealt with automatically as with constructors.","kind":"dev","methods":{},"stateVariables":{"initializing":{"details":"Indicates that the contract is in the process of being initialized."},"lastInitializedRevision":{"details":"Indicates that the contract has been initialized."}},"title":"VersionedInitializable","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Aave, inspired by the OpenZeppelin Initializable contract\",\"details\":\"WARNING: Unlike constructors, initializer functions must be manually invoked. This applies both to deploying an Initializable contract, as well as extending an Initializable contract via inheritance. WARNING: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or ensure that all initializers are idempotent, because this is not dealt with automatically as with constructors.\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"initializing\":{\"details\":\"Indicates that the contract is in the process of being initialized.\"},\"lastInitializedRevision\":{\"details\":\"Indicates that the contract has been initialized.\"}},\"title\":\"VersionedInitializable\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Helper contract to implement initializer functions. To use it, replace the constructor with a function that has the `initializer` modifier.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":\"VersionedInitializable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":10499,"contract":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol:VersionedInitializable","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":10502,"contract":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol:VersionedInitializable","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":10572,"contract":"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol:VersionedInitializable","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"}],"types":{"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"notice":"Helper contract to implement initializer functions. To use it, replace the constructor with a function that has the `initializer` modifier.","version":1}}},"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol":{"ReserveConfiguration":{"abi":[{"inputs":[],"name":"DEBT_CEILING_DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_RESERVES_COUNT","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{},"stateVariables":{"LIQUIDATION_THRESHOLD_START_BIT_POSITION":{"details":"For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed"}},"title":"ReserveConfiguration library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60ab610038600b82828239805160001a607314602b57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610603d5760003560e01c8063280d5de914604257806331b561ba14605c575b600080fd5b6049600281565b6040519081526020015b60405180910390f35b6063608081565b60405161ffff9091168152602001605356fea2646970667358221220d26e295b3f6096062b9eed49dc1617f64d2c550bb5d9fd2996465c3c5d2f39df64736f6c634300080a0033","opcodes":"PUSH1 0xAB PUSH2 0x38 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2B JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x3D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x280D5DE9 EQ PUSH1 0x42 JUMPI DUP1 PUSH4 0x31B561BA EQ PUSH1 0x5C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x49 PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x63 PUSH1 0x80 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x53 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD2 PUSH15 0x295B3F6096062B9EED49DC1617F64D 0x2C SSTORE SIGNEXTEND 0xB5 0xD9 REVERT 0x29 SWAP7 CHAINID 0x5C EXTCODECOPY 0x5D 0x2F CODECOPY 0xDF PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"297:23357:72:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;297:23357:72;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@DEBT_CEILING_DECIMALS_10728":{"entryPoint":null,"id":10728,"parameterSlots":0,"returnSlots":0},"@MAX_RESERVES_COUNT_10731":{"entryPoint":null,"id":10731,"parameterSlots":0,"returnSlots":0},"abi_encode_tuple_t_uint16__to_t_uint16__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:402:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"123:76:201","statements":[{"nodeType":"YulAssignment","src":"133:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"145:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"156:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"141:3:201"},"nodeType":"YulFunctionCall","src":"141:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"133:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"175:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"186:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"168:6:201"},"nodeType":"YulFunctionCall","src":"168:25:201"},"nodeType":"YulExpressionStatement","src":"168:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"92:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"103:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"114:4:201","type":""}],"src":"14:185:201"},{"body":{"nodeType":"YulBlock","src":"311:89:201","statements":[{"nodeType":"YulAssignment","src":"321:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"333:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"344:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"329:3:201"},"nodeType":"YulFunctionCall","src":"329:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"321:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"363:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"378:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"386:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"374:3:201"},"nodeType":"YulFunctionCall","src":"374:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"356:6:201"},"nodeType":"YulFunctionCall","src":"356:38:201"},"nodeType":"YulExpressionStatement","src":"356:38:201"}]},"name":"abi_encode_tuple_t_uint16__to_t_uint16__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"280:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"291:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"302:4:201","type":""}],"src":"204:196:201"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint16__to_t_uint16__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffff))\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"7300000000000000000000000000000000000000003014608060405260043610603d5760003560e01c8063280d5de914604257806331b561ba14605c575b600080fd5b6049600281565b6040519081526020015b60405180910390f35b6063608081565b60405161ffff9091168152602001605356fea2646970667358221220d26e295b3f6096062b9eed49dc1617f64d2c550bb5d9fd2996465c3c5d2f39df64736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x3D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x280D5DE9 EQ PUSH1 0x42 JUMPI DUP1 PUSH4 0x31B561BA EQ PUSH1 0x5C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x49 PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x63 PUSH1 0x80 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x53 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD2 PUSH15 0x295B3F6096062B9EED49DC1617F64D 0x2C SSTORE SIGNEXTEND 0xB5 0xD9 REVERT 0x29 SWAP7 CHAINID 0x5C EXTCODECOPY 0x5D 0x2F CODECOPY 0xDF PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"297:23357:72:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5187:49;;5235:1;5187:49;;;;;168:25:201;;;156:2;141:18;5187:49:72;;;;;;;;5240:47;;5284:3;5240:47;;;;;386:6:201;374:19;;;356:38;;344:2;329:18;5240:47:72;204:196:201"},"gasEstimates":{"creation":{"codeDepositCost":"34200","executionCost":"118","totalCost":"34318"},"external":{"DEBT_CEILING_DECIMALS()":"146","MAX_RESERVES_COUNT()":"188"},"internal":{"getActive(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getBorrowCap(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getBorrowableInIsolation(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getBorrowingEnabled(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getCaps(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getDebtCeiling(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getDecimals(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getEModeCategory(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getFlags(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getFlashLoanEnabled(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getFrozen(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getLiquidationBonus(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getLiquidationProtocolFee(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getLiquidationThreshold(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getLtv(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getParams(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getPaused(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getReserveFactor(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getSiloedBorrowing(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getStableRateBorrowingEnabled(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getSupplyCap(struct DataTypes.ReserveConfigurationMap memory)":"infinite","getUnbackedMintCap(struct DataTypes.ReserveConfigurationMap memory)":"infinite","setActive(struct DataTypes.ReserveConfigurationMap memory,bool)":"infinite","setBorrowCap(struct DataTypes.ReserveConfigurationMap memory,uint256)":"infinite","setBorrowableInIsolation(struct DataTypes.ReserveConfigurationMap memory,bool)":"infinite","setBorrowingEnabled(struct DataTypes.ReserveConfigurationMap memory,bool)":"infinite","setDebtCeiling(struct DataTypes.ReserveConfigurationMap memory,uint256)":"infinite","setDecimals(struct DataTypes.ReserveConfigurationMap memory,uint256)":"infinite","setEModeCategory(struct DataTypes.ReserveConfigurationMap memory,uint256)":"infinite","setFlashLoanEnabled(struct DataTypes.ReserveConfigurationMap memory,bool)":"infinite","setFrozen(struct DataTypes.ReserveConfigurationMap memory,bool)":"infinite","setLiquidationBonus(struct DataTypes.ReserveConfigurationMap memory,uint256)":"infinite","setLiquidationProtocolFee(struct DataTypes.ReserveConfigurationMap memory,uint256)":"infinite","setLiquidationThreshold(struct DataTypes.ReserveConfigurationMap memory,uint256)":"infinite","setLtv(struct DataTypes.ReserveConfigurationMap memory,uint256)":"infinite","setPaused(struct DataTypes.ReserveConfigurationMap memory,bool)":"infinite","setReserveFactor(struct DataTypes.ReserveConfigurationMap memory,uint256)":"infinite","setSiloedBorrowing(struct DataTypes.ReserveConfigurationMap memory,bool)":"infinite","setStableRateBorrowingEnabled(struct DataTypes.ReserveConfigurationMap memory,bool)":"infinite","setSupplyCap(struct DataTypes.ReserveConfigurationMap memory,uint256)":"infinite","setUnbackedMintCap(struct DataTypes.ReserveConfigurationMap memory,uint256)":"infinite"}},"methodIdentifiers":{"DEBT_CEILING_DECIMALS()":"280d5de9","MAX_RESERVES_COUNT()":"31b561ba"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DEBT_CEILING_DECIMALS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_RESERVES_COUNT\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"LIQUIDATION_THRESHOLD_START_BIT_POSITION\":{\"details\":\"For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\"}},\"title\":\"ReserveConfiguration library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Implements the bitmap logic to handle the reserve configuration\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":\"ReserveConfiguration\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Implements the bitmap logic to handle the reserve configuration","version":1}}},"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol":{"UserConfiguration":{"abi":[],"devdoc":{"author":"Aave","kind":"dev","methods":{},"title":"UserConfiguration library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205a7ef846ae9ccb2a847e7d79a9f4ea234bd06b1f97970f76d6361cf47089f7d564736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GAS PUSH31 0xF846AE9CCB2A847E7D79A9F4EA234BD06B1F97970F76D6361CF47089F7D564 PUSH20 0x6F6C634300080A00330000000000000000000000 ","sourceMap":"356:8450:73:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;356:8450:73;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205a7ef846ae9ccb2a847e7d79a9f4ea234bd06b1f97970f76d6361cf47089f7d564736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GAS PUSH31 0xF846AE9CCB2A847E7D79A9F4EA234BD06B1F97970F76D6361CF47089F7D564 PUSH20 0x6F6C634300080A00330000000000000000000000 ","sourceMap":"356:8450:73:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_getFirstAssetIdByMask(struct DataTypes.UserConfigurationMap memory,uint256)":"infinite","getIsolationModeState(struct DataTypes.UserConfigurationMap memory,mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address))":"infinite","getSiloedBorrowingState(struct DataTypes.UserConfigurationMap memory,mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address))":"infinite","isBorrowing(struct DataTypes.UserConfigurationMap memory,uint256)":"infinite","isBorrowingAny(struct DataTypes.UserConfigurationMap memory)":"infinite","isBorrowingOne(struct DataTypes.UserConfigurationMap memory)":"infinite","isEmpty(struct DataTypes.UserConfigurationMap memory)":"infinite","isUsingAsCollateral(struct DataTypes.UserConfigurationMap memory,uint256)":"infinite","isUsingAsCollateralAny(struct DataTypes.UserConfigurationMap memory)":"infinite","isUsingAsCollateralOne(struct DataTypes.UserConfigurationMap memory)":"infinite","isUsingAsCollateralOrBorrowing(struct DataTypes.UserConfigurationMap memory,uint256)":"infinite","setBorrowing(struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)":"infinite","setUsingAsCollateral(struct DataTypes.UserConfigurationMap storage pointer,uint256,bool)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{},\"title\":\"UserConfiguration library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Implements the bitmap logic to handle the user configuration\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol\":\"UserConfiguration\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Implements the bitmap logic to handle the user configuration","version":1}}},"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol":{"Errors":{"abi":[{"inputs":[],"name":"ACL_ADMIN_CANNOT_BE_ZERO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ADDRESSES_PROVIDER_ALREADY_ADDED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ADDRESSES_PROVIDER_NOT_REGISTERED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ASSET_NOT_BORROWABLE_IN_ISOLATION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ASSET_NOT_LISTED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BORROWING_NOT_ENABLED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BORROW_CAP_EXCEEDED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BRIDGE_PROTOCOL_FEE_INVALID","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CALLER_MUST_BE_POOL","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CALLER_NOT_ATOKEN","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CALLER_NOT_BRIDGE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CALLER_NOT_EMERGENCY_ADMIN","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CALLER_NOT_POOL_ADMIN","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CALLER_NOT_POOL_CONFIGURATOR","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CALLER_NOT_POOL_OR_EMERGENCY_ADMIN","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CALLER_NOT_RISK_OR_POOL_ADMIN","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COLLATERAL_BALANCE_IS_ZERO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COLLATERAL_CANNOT_BE_LIQUIDATED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COLLATERAL_CANNOT_COVER_NEW_BORROW","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COLLATERAL_SAME_AS_BORROWING_CURRENCY","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEBT_CEILING_EXCEEDED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEBT_CEILING_NOT_ZERO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EMODE_CATEGORY_RESERVED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASHLOAN_DISABLED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASHLOAN_PREMIUM_INVALID","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HEALTH_FACTOR_NOT_BELOW_THRESHOLD","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INCONSISTENT_EMODE_CATEGORY","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INCONSISTENT_FLASHLOAN_PARAMS","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INCONSISTENT_PARAMS_LENGTH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_ADDRESSES_PROVIDER","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_ADDRESSES_PROVIDER_ID","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_AMOUNT","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_BORROW_CAP","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_BURN_AMOUNT","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_DEBT_CEILING","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_DECIMALS","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_EMODE_CATEGORY","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_EMODE_CATEGORY_ASSIGNMENT","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_EMODE_CATEGORY_PARAMS","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_EXPIRATION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_FLASHLOAN_EXECUTOR_RETURN","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_INTEREST_RATE_MODE_SELECTED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_LIQUIDATION_PROTOCOL_FEE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_LIQ_BONUS","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_LIQ_THRESHOLD","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_LTV","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_MINT_AMOUNT","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_OPTIMAL_USAGE_RATIO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_RESERVE_FACTOR","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_RESERVE_INDEX","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_RESERVE_PARAMS","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_SIGNATURE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_SUPPLY_CAP","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVALID_UNBACKED_MINT_CAP","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LTV_VALIDATION_FAILED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NOT_CONTRACT","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NOT_ENOUGH_AVAILABLE_USER_BALANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NO_DEBT_OF_SELECTED_TYPE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NO_MORE_RESERVES_ALLOWED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NO_OUTSTANDING_STABLE_DEBT","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NO_OUTSTANDING_VARIABLE_DEBT","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPERATION_NOT_SUPPORTED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_ADDRESSES_DO_NOT_MATCH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_ORACLE_SENTINEL_CHECK_FAILED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_ALREADY_ADDED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_ALREADY_INITIALIZED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_DEBT_NOT_ZERO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_FROZEN","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_INACTIVE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_LIQUIDITY_NOT_ZERO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_PAUSED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SILOED_BORROWING_VIOLATION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STABLE_BORROWING_ENABLED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STABLE_BORROWING_NOT_ENABLED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STABLE_DEBT_NOT_ZERO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_CAP_EXCEEDED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNBACKED_MINT_CAP_EXCEEDED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNDERLYING_BALANCE_ZERO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNDERLYING_CANNOT_BE_RESCUED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USER_IN_ISOLATION_MODE_OR_LTV_ZERO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VARIABLE_DEBT_SUPPLY_NOT_ZERO","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO_ADDRESS_NOT_VALID","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{},"title":"Errors library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"611bd461003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106105f85760003560e01c80638aa3ca4c11610318578063bad8308c116101b1578063dd1dd95f11610103578063f07f6785116100ac578063fa163a8311610086578063fa163a8314611a77578063fae8279114611ab3578063fd1828ff14611aef57600080fd5b8063f07f6785146119c3578063f10727db146119ff578063f479ea1114611a3b57600080fd5b8063e3fa20f5116100dd578063e3fa20f51461190f578063e4dd8b741461194b578063e981483a1461198757600080fd5b8063dd1dd95f1461185b578063de24948c14611897578063e02f07ee146118d357600080fd5b8063d14bb17a11610165578063d9adda851161013f578063d9adda85146117a7578063dc191bd9146117e3578063dcc56db61461181f57600080fd5b8063d14bb17a146116f3578063d1cd8b1d1461172f578063d6f9fcde1461176b57600080fd5b8063c863808211610196578063c86380821461163f578063c899301a1461167b578063cd23367c146116b757600080fd5b8063bad8308c146115c7578063c08a11461461160357600080fd5b8063a4868dca1161026a578063b05100541161021e578063b68774e9116101f8578063b68774e914611513578063b7f5e2241461154f578063b87041c21461158b57600080fd5b8063b05100541461145f578063b4a457301461149b578063b5e79366146114d757600080fd5b8063ab883ca01161024f578063ab883ca0146113ab578063abd351b1146113e7578063ac7532361461142357600080fd5b8063a4868dca14611333578063a8c978531461136f57600080fd5b8063952633c5116102cc578063a2797c80116102a6578063a2797c801461127f578063a2e976c6146112bb578063a3402a38146112f757600080fd5b8063952633c5146111cb5780639527e9d91461120757806399ce53f31461124357600080fd5b80638eda46bd116102fd5780638eda46bd146111175780638f7722b21461115357806394f9fd8a1461118f57600080fd5b80638aa3ca4c1461109f5780638b8b98d7146110db57600080fd5b80634e3aed37116104955780636cd3cfbc116103e75780637aa0767e11610390578063895f7dc81161036a578063895f7dc814610feb57806389c5d45f146110275780638a3440001461106357600080fd5b80637aa0767e14610f375780637fea6f3614610f735780638596aad514610faf57600080fd5b806374459b14116103c157806374459b1414610e83578063747fa55614610ebf57806376ae8fca14610efb57600080fd5b80636cd3cfbc14610dcf578063712f536a14610e0b57806373dea5e314610e4757600080fd5b80635d9c76c01161044957806365a83bab1161042357806365a83bab14610d1b57806365e7ef4c14610d575780636b3f7cc714610d9357600080fd5b80635d9c76c014610c6757806360c3de8014610ca357806361c111d214610cdf57600080fd5b80634f77647b1161047a5780634f77647b14610bb35780635126745014610bef57806352ba9dbe14610c2b57600080fd5b80634e3aed3714610b3b5780634ef999ff14610b7757600080fd5b80632eed17e81161054e57806347ba93d811610502578063485c8ff6116104dc578063485c8ff614610a875780634d86f39314610ac35780634e01e3c114610aff57600080fd5b806347ba93d8146109d357806347cf152314610a0f578063480702ae14610a4b57600080fd5b8063366eb54d11610533578063366eb54d1461091f578063379307821461095b578063471df6851461099757600080fd5b80632eed17e8146108a7578063335763de146108e357600080fd5b80631abbb001116105b057806326e7b3121161058a57806326e7b312146107f35780632926c9711461082f5780632c8e3b4c1461086b57600080fd5b80631abbb0011461073f57806322a734461461077b57806326bbd053146107b757600080fd5b806312dcade8116105e157806312dcade81461068b57806314dcfbbc146106c7578063198d6a6b1461070357600080fd5b8063084dfa0d146105fd57806311d7b0061461064f575b600080fd5b6106396040518060400160405280600281526020017f313800000000000000000000000000000000000000000000000000000000000081525081565b6040516106469190611b2b565b60405180910390f35b6106396040518060400160405280600181526020017f390000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383800000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f350000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f360000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f380000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323800000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f393100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353800000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373800000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363800000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f370000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f393000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333800000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373500000000000000000000000000000000000000000000000000000000000081525081565b600060208083528351808285015260005b81811015611b5857858101830151858201604001528201611b3c565b81811115611b6a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212206739150b82c001fea54f4a3aa3df25739eb9b10d8e6dc93c3f2b0d69cc24351864736f6c634300080a0033","opcodes":"PUSH2 0x1BD4 PUSH2 0x3A PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5F8 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8AA3CA4C GT PUSH2 0x318 JUMPI DUP1 PUSH4 0xBAD8308C GT PUSH2 0x1B1 JUMPI DUP1 PUSH4 0xDD1DD95F GT PUSH2 0x103 JUMPI DUP1 PUSH4 0xF07F6785 GT PUSH2 0xAC JUMPI DUP1 PUSH4 0xFA163A83 GT PUSH2 0x86 JUMPI DUP1 PUSH4 0xFA163A83 EQ PUSH2 0x1A77 JUMPI DUP1 PUSH4 0xFAE82791 EQ PUSH2 0x1AB3 JUMPI DUP1 PUSH4 0xFD1828FF EQ PUSH2 0x1AEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xF07F6785 EQ PUSH2 0x19C3 JUMPI DUP1 PUSH4 0xF10727DB EQ PUSH2 0x19FF JUMPI DUP1 PUSH4 0xF479EA11 EQ PUSH2 0x1A3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE3FA20F5 GT PUSH2 0xDD JUMPI DUP1 PUSH4 0xE3FA20F5 EQ PUSH2 0x190F JUMPI DUP1 PUSH4 0xE4DD8B74 EQ PUSH2 0x194B JUMPI DUP1 PUSH4 0xE981483A EQ PUSH2 0x1987 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xDD1DD95F EQ PUSH2 0x185B JUMPI DUP1 PUSH4 0xDE24948C EQ PUSH2 0x1897 JUMPI DUP1 PUSH4 0xE02F07EE EQ PUSH2 0x18D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD14BB17A GT PUSH2 0x165 JUMPI DUP1 PUSH4 0xD9ADDA85 GT PUSH2 0x13F JUMPI DUP1 PUSH4 0xD9ADDA85 EQ PUSH2 0x17A7 JUMPI DUP1 PUSH4 0xDC191BD9 EQ PUSH2 0x17E3 JUMPI DUP1 PUSH4 0xDCC56DB6 EQ PUSH2 0x181F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD14BB17A EQ PUSH2 0x16F3 JUMPI DUP1 PUSH4 0xD1CD8B1D EQ PUSH2 0x172F JUMPI DUP1 PUSH4 0xD6F9FCDE EQ PUSH2 0x176B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC8638082 GT PUSH2 0x196 JUMPI DUP1 PUSH4 0xC8638082 EQ PUSH2 0x163F JUMPI DUP1 PUSH4 0xC899301A EQ PUSH2 0x167B JUMPI DUP1 PUSH4 0xCD23367C EQ PUSH2 0x16B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBAD8308C EQ PUSH2 0x15C7 JUMPI DUP1 PUSH4 0xC08A1146 EQ PUSH2 0x1603 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA4868DCA GT PUSH2 0x26A JUMPI DUP1 PUSH4 0xB0510054 GT PUSH2 0x21E JUMPI DUP1 PUSH4 0xB68774E9 GT PUSH2 0x1F8 JUMPI DUP1 PUSH4 0xB68774E9 EQ PUSH2 0x1513 JUMPI DUP1 PUSH4 0xB7F5E224 EQ PUSH2 0x154F JUMPI DUP1 PUSH4 0xB87041C2 EQ PUSH2 0x158B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB0510054 EQ PUSH2 0x145F JUMPI DUP1 PUSH4 0xB4A45730 EQ PUSH2 0x149B JUMPI DUP1 PUSH4 0xB5E79366 EQ PUSH2 0x14D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xAB883CA0 GT PUSH2 0x24F JUMPI DUP1 PUSH4 0xAB883CA0 EQ PUSH2 0x13AB JUMPI DUP1 PUSH4 0xABD351B1 EQ PUSH2 0x13E7 JUMPI DUP1 PUSH4 0xAC753236 EQ PUSH2 0x1423 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA4868DCA EQ PUSH2 0x1333 JUMPI DUP1 PUSH4 0xA8C97853 EQ PUSH2 0x136F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x952633C5 GT PUSH2 0x2CC JUMPI DUP1 PUSH4 0xA2797C80 GT PUSH2 0x2A6 JUMPI DUP1 PUSH4 0xA2797C80 EQ PUSH2 0x127F JUMPI DUP1 PUSH4 0xA2E976C6 EQ PUSH2 0x12BB JUMPI DUP1 PUSH4 0xA3402A38 EQ PUSH2 0x12F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x952633C5 EQ PUSH2 0x11CB JUMPI DUP1 PUSH4 0x9527E9D9 EQ PUSH2 0x1207 JUMPI DUP1 PUSH4 0x99CE53F3 EQ PUSH2 0x1243 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8EDA46BD GT PUSH2 0x2FD JUMPI DUP1 PUSH4 0x8EDA46BD EQ PUSH2 0x1117 JUMPI DUP1 PUSH4 0x8F7722B2 EQ PUSH2 0x1153 JUMPI DUP1 PUSH4 0x94F9FD8A EQ PUSH2 0x118F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8AA3CA4C EQ PUSH2 0x109F JUMPI DUP1 PUSH4 0x8B8B98D7 EQ PUSH2 0x10DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4E3AED37 GT PUSH2 0x495 JUMPI DUP1 PUSH4 0x6CD3CFBC GT PUSH2 0x3E7 JUMPI DUP1 PUSH4 0x7AA0767E GT PUSH2 0x390 JUMPI DUP1 PUSH4 0x895F7DC8 GT PUSH2 0x36A JUMPI DUP1 PUSH4 0x895F7DC8 EQ PUSH2 0xFEB JUMPI DUP1 PUSH4 0x89C5D45F EQ PUSH2 0x1027 JUMPI DUP1 PUSH4 0x8A344000 EQ PUSH2 0x1063 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7AA0767E EQ PUSH2 0xF37 JUMPI DUP1 PUSH4 0x7FEA6F36 EQ PUSH2 0xF73 JUMPI DUP1 PUSH4 0x8596AAD5 EQ PUSH2 0xFAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x74459B14 GT PUSH2 0x3C1 JUMPI DUP1 PUSH4 0x74459B14 EQ PUSH2 0xE83 JUMPI DUP1 PUSH4 0x747FA556 EQ PUSH2 0xEBF JUMPI DUP1 PUSH4 0x76AE8FCA EQ PUSH2 0xEFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6CD3CFBC EQ PUSH2 0xDCF JUMPI DUP1 PUSH4 0x712F536A EQ PUSH2 0xE0B JUMPI DUP1 PUSH4 0x73DEA5E3 EQ PUSH2 0xE47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5D9C76C0 GT PUSH2 0x449 JUMPI DUP1 PUSH4 0x65A83BAB GT PUSH2 0x423 JUMPI DUP1 PUSH4 0x65A83BAB EQ PUSH2 0xD1B JUMPI DUP1 PUSH4 0x65E7EF4C EQ PUSH2 0xD57 JUMPI DUP1 PUSH4 0x6B3F7CC7 EQ PUSH2 0xD93 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5D9C76C0 EQ PUSH2 0xC67 JUMPI DUP1 PUSH4 0x60C3DE80 EQ PUSH2 0xCA3 JUMPI DUP1 PUSH4 0x61C111D2 EQ PUSH2 0xCDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4F77647B GT PUSH2 0x47A JUMPI DUP1 PUSH4 0x4F77647B EQ PUSH2 0xBB3 JUMPI DUP1 PUSH4 0x51267450 EQ PUSH2 0xBEF JUMPI DUP1 PUSH4 0x52BA9DBE EQ PUSH2 0xC2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4E3AED37 EQ PUSH2 0xB3B JUMPI DUP1 PUSH4 0x4EF999FF EQ PUSH2 0xB77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2EED17E8 GT PUSH2 0x54E JUMPI DUP1 PUSH4 0x47BA93D8 GT PUSH2 0x502 JUMPI DUP1 PUSH4 0x485C8FF6 GT PUSH2 0x4DC JUMPI DUP1 PUSH4 0x485C8FF6 EQ PUSH2 0xA87 JUMPI DUP1 PUSH4 0x4D86F393 EQ PUSH2 0xAC3 JUMPI DUP1 PUSH4 0x4E01E3C1 EQ PUSH2 0xAFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x47BA93D8 EQ PUSH2 0x9D3 JUMPI DUP1 PUSH4 0x47CF1523 EQ PUSH2 0xA0F JUMPI DUP1 PUSH4 0x480702AE EQ PUSH2 0xA4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x366EB54D GT PUSH2 0x533 JUMPI DUP1 PUSH4 0x366EB54D EQ PUSH2 0x91F JUMPI DUP1 PUSH4 0x37930782 EQ PUSH2 0x95B JUMPI DUP1 PUSH4 0x471DF685 EQ PUSH2 0x997 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2EED17E8 EQ PUSH2 0x8A7 JUMPI DUP1 PUSH4 0x335763DE EQ PUSH2 0x8E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1ABBB001 GT PUSH2 0x5B0 JUMPI DUP1 PUSH4 0x26E7B312 GT PUSH2 0x58A JUMPI DUP1 PUSH4 0x26E7B312 EQ PUSH2 0x7F3 JUMPI DUP1 PUSH4 0x2926C971 EQ PUSH2 0x82F JUMPI DUP1 PUSH4 0x2C8E3B4C EQ PUSH2 0x86B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1ABBB001 EQ PUSH2 0x73F JUMPI DUP1 PUSH4 0x22A73446 EQ PUSH2 0x77B JUMPI DUP1 PUSH4 0x26BBD053 EQ PUSH2 0x7B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x12DCADE8 GT PUSH2 0x5E1 JUMPI DUP1 PUSH4 0x12DCADE8 EQ PUSH2 0x68B JUMPI DUP1 PUSH4 0x14DCFBBC EQ PUSH2 0x6C7 JUMPI DUP1 PUSH4 0x198D6A6B EQ PUSH2 0x703 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x84DFA0D EQ PUSH2 0x5FD JUMPI DUP1 PUSH4 0x11D7B006 EQ PUSH2 0x64F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3138000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x646 SWAP2 SWAP1 PUSH2 0x1B2B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3900000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3134000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3836000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3838000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3437000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3639000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3300000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3434000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3500000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3530000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3230000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3335000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3132000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3732000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3632000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3200000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3331000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3334000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3833000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3330000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3600000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3137000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3800000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3130000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3533000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3535000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3532000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3238000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3430000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3439000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3431000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3139000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3135000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3232000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3133000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3630000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3436000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3333000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3337000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3931000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3830000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3730000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3538000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3534000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3435000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3635000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3633000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3433000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3131000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3637000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3731000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3835000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3531000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3432000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3400000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3332000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3537000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3736000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3539000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3834000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3638000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3631000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3339000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3733000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3634000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3839000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3700000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3336000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3831000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3930000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3338000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3536000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3136000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3636000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3236000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3735000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1B58 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x1B3C JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x1B6A JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH8 0x39150B82C001FEA5 0x4F 0x4A GASPRICE LOG3 0xDF 0x25 PUSH20 0x9EB9B10D8E6DC93C3F2B0D69CC24351864736F6C PUSH4 0x4300080A STOP CALLER ","sourceMap":"205:9704:74:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;205:9704:74;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ACL_ADMIN_CANNOT_BE_ZERO_12593":{"entryPoint":null,"id":12593,"parameterSlots":0,"returnSlots":0},"@ADDRESSES_PROVIDER_ALREADY_ADDED_12626":{"entryPoint":null,"id":12626,"parameterSlots":0,"returnSlots":0},"@ADDRESSES_PROVIDER_NOT_REGISTERED_12392":{"entryPoint":null,"id":12392,"parameterSlots":0,"returnSlots":0},"@AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE_12485":{"entryPoint":null,"id":12485,"parameterSlots":0,"returnSlots":0},"@ASSET_NOT_BORROWABLE_IN_ISOLATION_12548":{"entryPoint":null,"id":12548,"parameterSlots":0,"returnSlots":0},"@ASSET_NOT_LISTED_12614":{"entryPoint":null,"id":12614,"parameterSlots":0,"returnSlots":0},"@BORROWING_NOT_ENABLED_12461":{"entryPoint":null,"id":12461,"parameterSlots":0,"returnSlots":0},"@BORROW_CAP_EXCEEDED_12518":{"entryPoint":null,"id":12518,"parameterSlots":0,"returnSlots":0},"@BRIDGE_PROTOCOL_FEE_INVALID_12437":{"entryPoint":null,"id":12437,"parameterSlots":0,"returnSlots":0},"@CALLER_MUST_BE_POOL_12440":{"entryPoint":null,"id":12440,"parameterSlots":0,"returnSlots":0},"@CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN_12386":{"entryPoint":null,"id":12386,"parameterSlots":0,"returnSlots":0},"@CALLER_NOT_ATOKEN_12404":{"entryPoint":null,"id":12404,"parameterSlots":0,"returnSlots":0},"@CALLER_NOT_BRIDGE_12389":{"entryPoint":null,"id":12389,"parameterSlots":0,"returnSlots":0},"@CALLER_NOT_EMERGENCY_ADMIN_12377":{"entryPoint":null,"id":12377,"parameterSlots":0,"returnSlots":0},"@CALLER_NOT_POOL_ADMIN_12374":{"entryPoint":null,"id":12374,"parameterSlots":0,"returnSlots":0},"@CALLER_NOT_POOL_CONFIGURATOR_12401":{"entryPoint":null,"id":12401,"parameterSlots":0,"returnSlots":0},"@CALLER_NOT_POOL_OR_EMERGENCY_ADMIN_12380":{"entryPoint":null,"id":12380,"parameterSlots":0,"returnSlots":0},"@CALLER_NOT_RISK_OR_POOL_ADMIN_12383":{"entryPoint":null,"id":12383,"parameterSlots":0,"returnSlots":0},"@COLLATERAL_BALANCE_IS_ZERO_12473":{"entryPoint":null,"id":12473,"parameterSlots":0,"returnSlots":0},"@COLLATERAL_CANNOT_BE_LIQUIDATED_12509":{"entryPoint":null,"id":12509,"parameterSlots":0,"returnSlots":0},"@COLLATERAL_CANNOT_COVER_NEW_BORROW_12479":{"entryPoint":null,"id":12479,"parameterSlots":0,"returnSlots":0},"@COLLATERAL_SAME_AS_BORROWING_CURRENCY_12482":{"entryPoint":null,"id":12482,"parameterSlots":0,"returnSlots":0},"@DEBT_CEILING_EXCEEDED_12527":{"entryPoint":null,"id":12527,"parameterSlots":0,"returnSlots":0},"@DEBT_CEILING_NOT_ZERO_12611":{"entryPoint":null,"id":12611,"parameterSlots":0,"returnSlots":0},"@EMODE_CATEGORY_RESERVED_12419":{"entryPoint":null,"id":12419,"parameterSlots":0,"returnSlots":0},"@FLASHLOAN_DISABLED_12641":{"entryPoint":null,"id":12641,"parameterSlots":0,"returnSlots":0},"@FLASHLOAN_PREMIUM_INVALID_12428":{"entryPoint":null,"id":12428,"parameterSlots":0,"returnSlots":0},"@HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD_12476":{"entryPoint":null,"id":12476,"parameterSlots":0,"returnSlots":0},"@HEALTH_FACTOR_NOT_BELOW_THRESHOLD_12506":{"entryPoint":null,"id":12506,"parameterSlots":0,"returnSlots":0},"@INCONSISTENT_EMODE_CATEGORY_12542":{"entryPoint":null,"id":12542,"parameterSlots":0,"returnSlots":0},"@INCONSISTENT_FLASHLOAN_PARAMS_12515":{"entryPoint":null,"id":12515,"parameterSlots":0,"returnSlots":0},"@INCONSISTENT_PARAMS_LENGTH_12596":{"entryPoint":null,"id":12596,"parameterSlots":0,"returnSlots":0},"@INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET_12503":{"entryPoint":null,"id":12503,"parameterSlots":0,"returnSlots":0},"@INVALID_ADDRESSES_PROVIDER_12407":{"entryPoint":null,"id":12407,"parameterSlots":0,"returnSlots":0},"@INVALID_ADDRESSES_PROVIDER_ID_12395":{"entryPoint":null,"id":12395,"parameterSlots":0,"returnSlots":0},"@INVALID_AMOUNT_12449":{"entryPoint":null,"id":12449,"parameterSlots":0,"returnSlots":0},"@INVALID_BORROW_CAP_12572":{"entryPoint":null,"id":12572,"parameterSlots":0,"returnSlots":0},"@INVALID_BURN_AMOUNT_12446":{"entryPoint":null,"id":12446,"parameterSlots":0,"returnSlots":0},"@INVALID_DEBT_CEILING_12587":{"entryPoint":null,"id":12587,"parameterSlots":0,"returnSlots":0},"@INVALID_DECIMALS_12566":{"entryPoint":null,"id":12566,"parameterSlots":0,"returnSlots":0},"@INVALID_EMODE_CATEGORY_12581":{"entryPoint":null,"id":12581,"parameterSlots":0,"returnSlots":0},"@INVALID_EMODE_CATEGORY_ASSIGNMENT_12422":{"entryPoint":null,"id":12422,"parameterSlots":0,"returnSlots":0},"@INVALID_EMODE_CATEGORY_PARAMS_12434":{"entryPoint":null,"id":12434,"parameterSlots":0,"returnSlots":0},"@INVALID_EXPIRATION_12602":{"entryPoint":null,"id":12602,"parameterSlots":0,"returnSlots":0},"@INVALID_FLASHLOAN_EXECUTOR_RETURN_12410":{"entryPoint":null,"id":12410,"parameterSlots":0,"returnSlots":0},"@INVALID_INTEREST_RATE_MODE_SELECTED_12470":{"entryPoint":null,"id":12470,"parameterSlots":0,"returnSlots":0},"@INVALID_LIQUIDATION_PROTOCOL_FEE_12578":{"entryPoint":null,"id":12578,"parameterSlots":0,"returnSlots":0},"@INVALID_LIQ_BONUS_12563":{"entryPoint":null,"id":12563,"parameterSlots":0,"returnSlots":0},"@INVALID_LIQ_THRESHOLD_12560":{"entryPoint":null,"id":12560,"parameterSlots":0,"returnSlots":0},"@INVALID_LTV_12557":{"entryPoint":null,"id":12557,"parameterSlots":0,"returnSlots":0},"@INVALID_MINT_AMOUNT_12443":{"entryPoint":null,"id":12443,"parameterSlots":0,"returnSlots":0},"@INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO_12620":{"entryPoint":null,"id":12620,"parameterSlots":0,"returnSlots":0},"@INVALID_OPTIMAL_USAGE_RATIO_12617":{"entryPoint":null,"id":12617,"parameterSlots":0,"returnSlots":0},"@INVALID_RESERVE_FACTOR_12569":{"entryPoint":null,"id":12569,"parameterSlots":0,"returnSlots":0},"@INVALID_RESERVE_INDEX_12590":{"entryPoint":null,"id":12590,"parameterSlots":0,"returnSlots":0},"@INVALID_RESERVE_PARAMS_12431":{"entryPoint":null,"id":12431,"parameterSlots":0,"returnSlots":0},"@INVALID_SIGNATURE_12605":{"entryPoint":null,"id":12605,"parameterSlots":0,"returnSlots":0},"@INVALID_SUPPLY_CAP_12575":{"entryPoint":null,"id":12575,"parameterSlots":0,"returnSlots":0},"@INVALID_UNBACKED_MINT_CAP_12584":{"entryPoint":null,"id":12584,"parameterSlots":0,"returnSlots":0},"@LTV_VALIDATION_FAILED_12539":{"entryPoint":null,"id":12539,"parameterSlots":0,"returnSlots":0},"@NOT_CONTRACT_12398":{"entryPoint":null,"id":12398,"parameterSlots":0,"returnSlots":0},"@NOT_ENOUGH_AVAILABLE_USER_BALANCE_12467":{"entryPoint":null,"id":12467,"parameterSlots":0,"returnSlots":0},"@NO_DEBT_OF_SELECTED_TYPE_12488":{"entryPoint":null,"id":12488,"parameterSlots":0,"returnSlots":0},"@NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF_12491":{"entryPoint":null,"id":12491,"parameterSlots":0,"returnSlots":0},"@NO_MORE_RESERVES_ALLOWED_12416":{"entryPoint":null,"id":12416,"parameterSlots":0,"returnSlots":0},"@NO_OUTSTANDING_STABLE_DEBT_12494":{"entryPoint":null,"id":12494,"parameterSlots":0,"returnSlots":0},"@NO_OUTSTANDING_VARIABLE_DEBT_12497":{"entryPoint":null,"id":12497,"parameterSlots":0,"returnSlots":0},"@OPERATION_NOT_SUPPORTED_12608":{"entryPoint":null,"id":12608,"parameterSlots":0,"returnSlots":0},"@POOL_ADDRESSES_DO_NOT_MATCH_12629":{"entryPoint":null,"id":12629,"parameterSlots":0,"returnSlots":0},"@PRICE_ORACLE_SENTINEL_CHECK_FAILED_12545":{"entryPoint":null,"id":12545,"parameterSlots":0,"returnSlots":0},"@RESERVE_ALREADY_ADDED_12413":{"entryPoint":null,"id":12413,"parameterSlots":0,"returnSlots":0},"@RESERVE_ALREADY_INITIALIZED_12551":{"entryPoint":null,"id":12551,"parameterSlots":0,"returnSlots":0},"@RESERVE_DEBT_NOT_ZERO_12638":{"entryPoint":null,"id":12638,"parameterSlots":0,"returnSlots":0},"@RESERVE_FROZEN_12455":{"entryPoint":null,"id":12455,"parameterSlots":0,"returnSlots":0},"@RESERVE_INACTIVE_12452":{"entryPoint":null,"id":12452,"parameterSlots":0,"returnSlots":0},"@RESERVE_LIQUIDITY_NOT_ZERO_12425":{"entryPoint":null,"id":12425,"parameterSlots":0,"returnSlots":0},"@RESERVE_PAUSED_12458":{"entryPoint":null,"id":12458,"parameterSlots":0,"returnSlots":0},"@SILOED_BORROWING_VIOLATION_12635":{"entryPoint":null,"id":12635,"parameterSlots":0,"returnSlots":0},"@SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER_12512":{"entryPoint":null,"id":12512,"parameterSlots":0,"returnSlots":0},"@STABLE_BORROWING_ENABLED_12632":{"entryPoint":null,"id":12632,"parameterSlots":0,"returnSlots":0},"@STABLE_BORROWING_NOT_ENABLED_12464":{"entryPoint":null,"id":12464,"parameterSlots":0,"returnSlots":0},"@STABLE_DEBT_NOT_ZERO_12533":{"entryPoint":null,"id":12533,"parameterSlots":0,"returnSlots":0},"@SUPPLY_CAP_EXCEEDED_12521":{"entryPoint":null,"id":12521,"parameterSlots":0,"returnSlots":0},"@UNBACKED_MINT_CAP_EXCEEDED_12524":{"entryPoint":null,"id":12524,"parameterSlots":0,"returnSlots":0},"@UNDERLYING_BALANCE_ZERO_12500":{"entryPoint":null,"id":12500,"parameterSlots":0,"returnSlots":0},"@UNDERLYING_CANNOT_BE_RESCUED_12623":{"entryPoint":null,"id":12623,"parameterSlots":0,"returnSlots":0},"@UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO_12530":{"entryPoint":null,"id":12530,"parameterSlots":0,"returnSlots":0},"@USER_IN_ISOLATION_MODE_OR_LTV_ZERO_12554":{"entryPoint":null,"id":12554,"parameterSlots":0,"returnSlots":0},"@VARIABLE_DEBT_SUPPLY_NOT_ZERO_12536":{"entryPoint":null,"id":12536,"parameterSlots":0,"returnSlots":0},"@ZERO_ADDRESS_NOT_VALID_12599":{"entryPoint":null,"id":12599,"parameterSlots":0,"returnSlots":0},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_library_reversed":{"entryPoint":6955,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:680:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"143:535:201","statements":[{"nodeType":"YulVariableDeclaration","src":"153:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"163:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"157:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"181:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"192:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"174:6:201"},"nodeType":"YulFunctionCall","src":"174:21:201"},"nodeType":"YulExpressionStatement","src":"174:21:201"},{"nodeType":"YulVariableDeclaration","src":"204:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"224:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"218:5:201"},"nodeType":"YulFunctionCall","src":"218:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"208:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"251:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"262:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"247:3:201"},"nodeType":"YulFunctionCall","src":"247:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"267:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"240:6:201"},"nodeType":"YulFunctionCall","src":"240:34:201"},"nodeType":"YulExpressionStatement","src":"240:34:201"},{"nodeType":"YulVariableDeclaration","src":"283:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"292:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"287:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"352:90:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"381:9:201"},{"name":"i","nodeType":"YulIdentifier","src":"392:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"377:3:201"},"nodeType":"YulFunctionCall","src":"377:17:201"},{"kind":"number","nodeType":"YulLiteral","src":"396:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"373:3:201"},"nodeType":"YulFunctionCall","src":"373:26:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"415:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"423:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"411:3:201"},"nodeType":"YulFunctionCall","src":"411:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"427:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"407:3:201"},"nodeType":"YulFunctionCall","src":"407:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"401:5:201"},"nodeType":"YulFunctionCall","src":"401:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"366:6:201"},"nodeType":"YulFunctionCall","src":"366:66:201"},"nodeType":"YulExpressionStatement","src":"366:66:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"313:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"316:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"310:2:201"},"nodeType":"YulFunctionCall","src":"310:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"324:19:201","statements":[{"nodeType":"YulAssignment","src":"326:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"335:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"338:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"331:3:201"},"nodeType":"YulFunctionCall","src":"331:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"326:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"306:3:201","statements":[]},"src":"302:140:201"},{"body":{"nodeType":"YulBlock","src":"476:66:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"505:9:201"},{"name":"length","nodeType":"YulIdentifier","src":"516:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"501:3:201"},"nodeType":"YulFunctionCall","src":"501:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"525:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"497:3:201"},"nodeType":"YulFunctionCall","src":"497:31:201"},{"kind":"number","nodeType":"YulLiteral","src":"530:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"490:6:201"},"nodeType":"YulFunctionCall","src":"490:42:201"},"nodeType":"YulExpressionStatement","src":"490:42:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"457:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"460:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"454:2:201"},"nodeType":"YulFunctionCall","src":"454:13:201"},"nodeType":"YulIf","src":"451:91:201"},{"nodeType":"YulAssignment","src":"551:121:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"567:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"586:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"594:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"582:3:201"},"nodeType":"YulFunctionCall","src":"582:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"599:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"578:3:201"},"nodeType":"YulFunctionCall","src":"578:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"563:3:201"},"nodeType":"YulFunctionCall","src":"563:104:201"},{"kind":"number","nodeType":"YulLiteral","src":"669:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"559:3:201"},"nodeType":"YulFunctionCall","src":"559:113:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"551:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"112:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"123:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"134:4:201","type":""}],"src":"14:664:201"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600436106105f85760003560e01c80638aa3ca4c11610318578063bad8308c116101b1578063dd1dd95f11610103578063f07f6785116100ac578063fa163a8311610086578063fa163a8314611a77578063fae8279114611ab3578063fd1828ff14611aef57600080fd5b8063f07f6785146119c3578063f10727db146119ff578063f479ea1114611a3b57600080fd5b8063e3fa20f5116100dd578063e3fa20f51461190f578063e4dd8b741461194b578063e981483a1461198757600080fd5b8063dd1dd95f1461185b578063de24948c14611897578063e02f07ee146118d357600080fd5b8063d14bb17a11610165578063d9adda851161013f578063d9adda85146117a7578063dc191bd9146117e3578063dcc56db61461181f57600080fd5b8063d14bb17a146116f3578063d1cd8b1d1461172f578063d6f9fcde1461176b57600080fd5b8063c863808211610196578063c86380821461163f578063c899301a1461167b578063cd23367c146116b757600080fd5b8063bad8308c146115c7578063c08a11461461160357600080fd5b8063a4868dca1161026a578063b05100541161021e578063b68774e9116101f8578063b68774e914611513578063b7f5e2241461154f578063b87041c21461158b57600080fd5b8063b05100541461145f578063b4a457301461149b578063b5e79366146114d757600080fd5b8063ab883ca01161024f578063ab883ca0146113ab578063abd351b1146113e7578063ac7532361461142357600080fd5b8063a4868dca14611333578063a8c978531461136f57600080fd5b8063952633c5116102cc578063a2797c80116102a6578063a2797c801461127f578063a2e976c6146112bb578063a3402a38146112f757600080fd5b8063952633c5146111cb5780639527e9d91461120757806399ce53f31461124357600080fd5b80638eda46bd116102fd5780638eda46bd146111175780638f7722b21461115357806394f9fd8a1461118f57600080fd5b80638aa3ca4c1461109f5780638b8b98d7146110db57600080fd5b80634e3aed37116104955780636cd3cfbc116103e75780637aa0767e11610390578063895f7dc81161036a578063895f7dc814610feb57806389c5d45f146110275780638a3440001461106357600080fd5b80637aa0767e14610f375780637fea6f3614610f735780638596aad514610faf57600080fd5b806374459b14116103c157806374459b1414610e83578063747fa55614610ebf57806376ae8fca14610efb57600080fd5b80636cd3cfbc14610dcf578063712f536a14610e0b57806373dea5e314610e4757600080fd5b80635d9c76c01161044957806365a83bab1161042357806365a83bab14610d1b57806365e7ef4c14610d575780636b3f7cc714610d9357600080fd5b80635d9c76c014610c6757806360c3de8014610ca357806361c111d214610cdf57600080fd5b80634f77647b1161047a5780634f77647b14610bb35780635126745014610bef57806352ba9dbe14610c2b57600080fd5b80634e3aed3714610b3b5780634ef999ff14610b7757600080fd5b80632eed17e81161054e57806347ba93d811610502578063485c8ff6116104dc578063485c8ff614610a875780634d86f39314610ac35780634e01e3c114610aff57600080fd5b806347ba93d8146109d357806347cf152314610a0f578063480702ae14610a4b57600080fd5b8063366eb54d11610533578063366eb54d1461091f578063379307821461095b578063471df6851461099757600080fd5b80632eed17e8146108a7578063335763de146108e357600080fd5b80631abbb001116105b057806326e7b3121161058a57806326e7b312146107f35780632926c9711461082f5780632c8e3b4c1461086b57600080fd5b80631abbb0011461073f57806322a734461461077b57806326bbd053146107b757600080fd5b806312dcade8116105e157806312dcade81461068b57806314dcfbbc146106c7578063198d6a6b1461070357600080fd5b8063084dfa0d146105fd57806311d7b0061461064f575b600080fd5b6106396040518060400160405280600281526020017f313800000000000000000000000000000000000000000000000000000000000081525081565b6040516106469190611b2b565b60405180910390f35b6106396040518060400160405280600181526020017f390000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383800000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f350000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f360000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f380000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323800000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f393100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353800000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383500000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f343200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373800000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383200000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373700000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363800000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373300000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363400000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383900000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600181526020017f370000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f383100000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f393000000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f333800000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f353600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f313600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f363600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f323600000000000000000000000000000000000000000000000000000000000081525081565b6106396040518060400160405280600281526020017f373500000000000000000000000000000000000000000000000000000000000081525081565b600060208083528351808285015260005b81811015611b5857858101830151858201604001528201611b3c565b81811115611b6a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212206739150b82c001fea54f4a3aa3df25739eb9b10d8e6dc93c3f2b0d69cc24351864736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5F8 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8AA3CA4C GT PUSH2 0x318 JUMPI DUP1 PUSH4 0xBAD8308C GT PUSH2 0x1B1 JUMPI DUP1 PUSH4 0xDD1DD95F GT PUSH2 0x103 JUMPI DUP1 PUSH4 0xF07F6785 GT PUSH2 0xAC JUMPI DUP1 PUSH4 0xFA163A83 GT PUSH2 0x86 JUMPI DUP1 PUSH4 0xFA163A83 EQ PUSH2 0x1A77 JUMPI DUP1 PUSH4 0xFAE82791 EQ PUSH2 0x1AB3 JUMPI DUP1 PUSH4 0xFD1828FF EQ PUSH2 0x1AEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xF07F6785 EQ PUSH2 0x19C3 JUMPI DUP1 PUSH4 0xF10727DB EQ PUSH2 0x19FF JUMPI DUP1 PUSH4 0xF479EA11 EQ PUSH2 0x1A3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE3FA20F5 GT PUSH2 0xDD JUMPI DUP1 PUSH4 0xE3FA20F5 EQ PUSH2 0x190F JUMPI DUP1 PUSH4 0xE4DD8B74 EQ PUSH2 0x194B JUMPI DUP1 PUSH4 0xE981483A EQ PUSH2 0x1987 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xDD1DD95F EQ PUSH2 0x185B JUMPI DUP1 PUSH4 0xDE24948C EQ PUSH2 0x1897 JUMPI DUP1 PUSH4 0xE02F07EE EQ PUSH2 0x18D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD14BB17A GT PUSH2 0x165 JUMPI DUP1 PUSH4 0xD9ADDA85 GT PUSH2 0x13F JUMPI DUP1 PUSH4 0xD9ADDA85 EQ PUSH2 0x17A7 JUMPI DUP1 PUSH4 0xDC191BD9 EQ PUSH2 0x17E3 JUMPI DUP1 PUSH4 0xDCC56DB6 EQ PUSH2 0x181F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD14BB17A EQ PUSH2 0x16F3 JUMPI DUP1 PUSH4 0xD1CD8B1D EQ PUSH2 0x172F JUMPI DUP1 PUSH4 0xD6F9FCDE EQ PUSH2 0x176B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC8638082 GT PUSH2 0x196 JUMPI DUP1 PUSH4 0xC8638082 EQ PUSH2 0x163F JUMPI DUP1 PUSH4 0xC899301A EQ PUSH2 0x167B JUMPI DUP1 PUSH4 0xCD23367C EQ PUSH2 0x16B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBAD8308C EQ PUSH2 0x15C7 JUMPI DUP1 PUSH4 0xC08A1146 EQ PUSH2 0x1603 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA4868DCA GT PUSH2 0x26A JUMPI DUP1 PUSH4 0xB0510054 GT PUSH2 0x21E JUMPI DUP1 PUSH4 0xB68774E9 GT PUSH2 0x1F8 JUMPI DUP1 PUSH4 0xB68774E9 EQ PUSH2 0x1513 JUMPI DUP1 PUSH4 0xB7F5E224 EQ PUSH2 0x154F JUMPI DUP1 PUSH4 0xB87041C2 EQ PUSH2 0x158B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB0510054 EQ PUSH2 0x145F JUMPI DUP1 PUSH4 0xB4A45730 EQ PUSH2 0x149B JUMPI DUP1 PUSH4 0xB5E79366 EQ PUSH2 0x14D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xAB883CA0 GT PUSH2 0x24F JUMPI DUP1 PUSH4 0xAB883CA0 EQ PUSH2 0x13AB JUMPI DUP1 PUSH4 0xABD351B1 EQ PUSH2 0x13E7 JUMPI DUP1 PUSH4 0xAC753236 EQ PUSH2 0x1423 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA4868DCA EQ PUSH2 0x1333 JUMPI DUP1 PUSH4 0xA8C97853 EQ PUSH2 0x136F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x952633C5 GT PUSH2 0x2CC JUMPI DUP1 PUSH4 0xA2797C80 GT PUSH2 0x2A6 JUMPI DUP1 PUSH4 0xA2797C80 EQ PUSH2 0x127F JUMPI DUP1 PUSH4 0xA2E976C6 EQ PUSH2 0x12BB JUMPI DUP1 PUSH4 0xA3402A38 EQ PUSH2 0x12F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x952633C5 EQ PUSH2 0x11CB JUMPI DUP1 PUSH4 0x9527E9D9 EQ PUSH2 0x1207 JUMPI DUP1 PUSH4 0x99CE53F3 EQ PUSH2 0x1243 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8EDA46BD GT PUSH2 0x2FD JUMPI DUP1 PUSH4 0x8EDA46BD EQ PUSH2 0x1117 JUMPI DUP1 PUSH4 0x8F7722B2 EQ PUSH2 0x1153 JUMPI DUP1 PUSH4 0x94F9FD8A EQ PUSH2 0x118F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8AA3CA4C EQ PUSH2 0x109F JUMPI DUP1 PUSH4 0x8B8B98D7 EQ PUSH2 0x10DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4E3AED37 GT PUSH2 0x495 JUMPI DUP1 PUSH4 0x6CD3CFBC GT PUSH2 0x3E7 JUMPI DUP1 PUSH4 0x7AA0767E GT PUSH2 0x390 JUMPI DUP1 PUSH4 0x895F7DC8 GT PUSH2 0x36A JUMPI DUP1 PUSH4 0x895F7DC8 EQ PUSH2 0xFEB JUMPI DUP1 PUSH4 0x89C5D45F EQ PUSH2 0x1027 JUMPI DUP1 PUSH4 0x8A344000 EQ PUSH2 0x1063 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7AA0767E EQ PUSH2 0xF37 JUMPI DUP1 PUSH4 0x7FEA6F36 EQ PUSH2 0xF73 JUMPI DUP1 PUSH4 0x8596AAD5 EQ PUSH2 0xFAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x74459B14 GT PUSH2 0x3C1 JUMPI DUP1 PUSH4 0x74459B14 EQ PUSH2 0xE83 JUMPI DUP1 PUSH4 0x747FA556 EQ PUSH2 0xEBF JUMPI DUP1 PUSH4 0x76AE8FCA EQ PUSH2 0xEFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6CD3CFBC EQ PUSH2 0xDCF JUMPI DUP1 PUSH4 0x712F536A EQ PUSH2 0xE0B JUMPI DUP1 PUSH4 0x73DEA5E3 EQ PUSH2 0xE47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5D9C76C0 GT PUSH2 0x449 JUMPI DUP1 PUSH4 0x65A83BAB GT PUSH2 0x423 JUMPI DUP1 PUSH4 0x65A83BAB EQ PUSH2 0xD1B JUMPI DUP1 PUSH4 0x65E7EF4C EQ PUSH2 0xD57 JUMPI DUP1 PUSH4 0x6B3F7CC7 EQ PUSH2 0xD93 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5D9C76C0 EQ PUSH2 0xC67 JUMPI DUP1 PUSH4 0x60C3DE80 EQ PUSH2 0xCA3 JUMPI DUP1 PUSH4 0x61C111D2 EQ PUSH2 0xCDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4F77647B GT PUSH2 0x47A JUMPI DUP1 PUSH4 0x4F77647B EQ PUSH2 0xBB3 JUMPI DUP1 PUSH4 0x51267450 EQ PUSH2 0xBEF JUMPI DUP1 PUSH4 0x52BA9DBE EQ PUSH2 0xC2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4E3AED37 EQ PUSH2 0xB3B JUMPI DUP1 PUSH4 0x4EF999FF EQ PUSH2 0xB77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2EED17E8 GT PUSH2 0x54E JUMPI DUP1 PUSH4 0x47BA93D8 GT PUSH2 0x502 JUMPI DUP1 PUSH4 0x485C8FF6 GT PUSH2 0x4DC JUMPI DUP1 PUSH4 0x485C8FF6 EQ PUSH2 0xA87 JUMPI DUP1 PUSH4 0x4D86F393 EQ PUSH2 0xAC3 JUMPI DUP1 PUSH4 0x4E01E3C1 EQ PUSH2 0xAFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x47BA93D8 EQ PUSH2 0x9D3 JUMPI DUP1 PUSH4 0x47CF1523 EQ PUSH2 0xA0F JUMPI DUP1 PUSH4 0x480702AE EQ PUSH2 0xA4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x366EB54D GT PUSH2 0x533 JUMPI DUP1 PUSH4 0x366EB54D EQ PUSH2 0x91F JUMPI DUP1 PUSH4 0x37930782 EQ PUSH2 0x95B JUMPI DUP1 PUSH4 0x471DF685 EQ PUSH2 0x997 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2EED17E8 EQ PUSH2 0x8A7 JUMPI DUP1 PUSH4 0x335763DE EQ PUSH2 0x8E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1ABBB001 GT PUSH2 0x5B0 JUMPI DUP1 PUSH4 0x26E7B312 GT PUSH2 0x58A JUMPI DUP1 PUSH4 0x26E7B312 EQ PUSH2 0x7F3 JUMPI DUP1 PUSH4 0x2926C971 EQ PUSH2 0x82F JUMPI DUP1 PUSH4 0x2C8E3B4C EQ PUSH2 0x86B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1ABBB001 EQ PUSH2 0x73F JUMPI DUP1 PUSH4 0x22A73446 EQ PUSH2 0x77B JUMPI DUP1 PUSH4 0x26BBD053 EQ PUSH2 0x7B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x12DCADE8 GT PUSH2 0x5E1 JUMPI DUP1 PUSH4 0x12DCADE8 EQ PUSH2 0x68B JUMPI DUP1 PUSH4 0x14DCFBBC EQ PUSH2 0x6C7 JUMPI DUP1 PUSH4 0x198D6A6B EQ PUSH2 0x703 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x84DFA0D EQ PUSH2 0x5FD JUMPI DUP1 PUSH4 0x11D7B006 EQ PUSH2 0x64F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3138000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x646 SWAP2 SWAP1 PUSH2 0x1B2B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3900000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3134000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3836000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3838000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3437000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3639000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3300000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3434000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3500000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3530000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3230000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3335000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3132000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3732000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3632000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3200000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3331000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3334000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3833000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3330000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3600000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3137000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3800000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3130000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3533000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3535000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3532000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3238000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3430000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3439000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3431000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3139000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3135000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3232000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3133000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3630000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3436000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3333000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3337000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3931000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3830000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3730000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3538000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3534000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3435000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3635000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3633000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3433000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3131000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3637000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3731000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3835000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3531000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3432000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3400000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3332000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3537000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3736000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3539000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3834000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3638000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3631000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3339000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3733000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3634000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3839000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3700000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3336000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3831000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3930000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3338000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3536000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3136000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3636000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3236000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x639 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3735000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1B58 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x1B3C JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x1B6A JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH8 0x39150B82C001FEA5 0x4F 0x4A GASPRICE LOG3 0xDF 0x25 PUSH20 0x9EB9B10D8E6DC93C3F2B0D69CC24351864736F6C PUSH4 0x4300080A STOP CALLER ","sourceMap":"205:9704:74:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2169:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;1163:41;;;;;;;;;;;;;;;;;;;;;1709:51;;;;;;;;;;;;;;;;;;;;;9203:62;;;;;;;;;;;;;;;;;;;;;9493:54;;;;;;;;;;;;;;;;;;;;;9321:57;;;;;;;;;;;;;;;;;;;;;5418:69;;;;;;;;;;;;;;;;;;;;;7579:48;;;;;;;;;;;;;;;;;;;;;447:63;;;;;;;;;;;;;;;;;;;;;5063:72;;;;;;;;;;;;;;;;;;;;;701:67;;;;;;;;;;;;;;;;;;;;;5641:49;;;;;;;;;;;;;;;;;;;;;2367:52;;;;;;;;;;;;;;;;;;;;;3844:76;;;;;;;;;;;;;;;;;;;;;1462:56;;;;;;;;;;;;;;;;;;;;;2677:49;;;;;;;;;;;;;;;;;;;;;7891:55;;;;;;;;;;;;;;;;;;;;;2468:59;;;;;;;;;;;;;;;;;;;;;6834:64;;;;;;;;;;;;;;;;;;;;;330:55;;;;;;;;;;;;;;;;;;;;;3417:58;;;;;;;;;;;;;;;;;;;;;3751:56;;;;;;;;;;;;;;;;;;;;;8879:57;;;;;;;;;;;;;;;;;;;;;3332:51;;;;;;;;;;;;;;;;;;;;;842:46;;;;;;;;;;;;;;;;;;;;;2859:49;;;;;;;;;;;;;;;;;;;;;3023:46;;;;;;;;;;;;;;;;;;;;;2054:63;;;;;;;;;;;;;;;;;;;;;1053:58;;;;;;;;;;;;;;;;;;;;;1239;;;;;;;;;;;;;;;;;;;;;5898:51;;;;;;;;;;;;;;;;;;;;;6137:50;;;;;;;;;;;;;;;;;;;;;5803:56;;;;;;;;;;;;;;;;;;;;;3112:44;;;;;;;;;;;;;;;;;;;;;4546:67;;;;;;;;;;;;;;;;;;;;;5539:59;;;;;;;;;;;;;;;;;;;;;4689:56;;;;;;;;;;;;;;;;;;;;;2277:55;;;;;;;;;;;;;;;;;;;;;1816:54;;;;;;;;;;;;;;;;;;;;;2583:57;;;;;;;;;;;;;;;;;;;;;1581:63;;;;;;;;;;;;;;;;;;;;;6617;;;;;;;;;;;;;;;;;;;;;5305:61;;;;;;;;;;;;;;;;;;;;;3641:65;;;;;;;;;;;;;;;;;;;;;4110:67;;;;;;;;;;;;;;;;;;;;;9815:48;;;;;;;;;;;;;;;;;;;;;8633:53;;;;;;;;;;;;;;;;;;;;;7671:62;;;;;;;;;;;;;;;;;;;;;6410:57;;;;;;;;;;;;;;;;;;;;;5983:66;;;;;;;;;;;;;;;;;;;;;5192:63;;;;;;;;;;;;;;;;;;;;;7150:47;;;;;;;;;;;;;;;;;;;;;6948:41;;;;;;;;;;;;;;;;;;;;;4951:53;;;;;;;;;;;;;;;;;;;;;1362:47;;;;;;;;;;;;;;;;;;;;;8559;;;;;;;;;;;;;;;;;;;;;7377:52;;;;;;;;;;;;;;;;;;;;;7791;;;;;;;;;;;;;;;;;;;;;9097:58;;;;;;;;;;;;;;;;;;;;;2778:49;;;;;;;;;;;;;;;;;;;;;224:50;;;;;;;;;;;;;;;;;;;;;5722:49;;;;;;;;;;;;;;;;;;;;;4818:58;;;;;;;;;;;;;;;;;;;;;579;;;;;;;;;;;;;;;;;;;;;3222:44;;;;;;;;;;;;;;;;;;;;;3516:63;;;;;;;;;;;;;;;;;;;;;6328:51;;;;;;;;;;;;;;;;;;;;;8281:56;;;;;;;;;;;;;;;;;;;;;8483:48;;;;;;;;;;;;;;;;;;;;;6504:64;;;;;;;;;;;;;;;;;;;;;8973:72;;;;;;;;;;;;;;;;;;;;;8804:46;;;;;;;;;;;;;;;;;;;;;8399:52;;;;;;;;;;;;;;;;;;;;;8092:51;;;;;;;;;;;;;;;;;;;;;7487:48;;;;;;;;;;;;;;;;;;;;;6731:57;;;;;;;;;;;;;;;;;;;;;4403:54;;;;;;;;;;;;;;;;;;;;;7997:50;;;;;;;;;;;;;;;;;;;;;7036:51;;;;;;;;;;;;;;;;;;;;;9584:56;;;;;;;;;;;;;;;;;;;;;940:62;;;;;;;;;;;;;;;;;;;;;3984:64;;;;;;;;;;;;;;;;;;;;;8719:51;;;;;;;;;;;;;;;;;;;;;9713;;;;;;;;;;;;;;;;;;;;;4250:69;;;;;;;;;;;;;;;;;;;;;6227:59;;;;;;;;;;;;;;;;;;;;;1926:53;;;;;;;;;;;;;;;;;;;;;7256:46;;;;;;;;;;;;;;;;;;;;;2940:44;;;;;;;;;;;;;;;;;;;;;8174:54;;;;;;;;;;;;;;;;;;;;;14:664:201;134:4;163:2;192;181:9;174:21;224:6;218:13;267:6;262:2;251:9;247:18;240:34;292:1;302:140;316:6;313:1;310:13;302:140;;;411:14;;;407:23;;401:30;377:17;;;396:2;373:26;366:66;331:10;;302:140;;;460:6;457:1;454:13;451:91;;;530:1;525:2;516:6;505:9;501:22;497:31;490:42;451:91;-1:-1:-1;594:2:201;582:15;599:66;578:88;563:104;;;;669:2;559:113;;14:664;-1:-1:-1;;;14:664:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"1424800","executionCost":"1517","totalCost":"1426317"},"external":{"ACL_ADMIN_CANNOT_BE_ZERO()":"infinite","ADDRESSES_PROVIDER_ALREADY_ADDED()":"infinite","ADDRESSES_PROVIDER_NOT_REGISTERED()":"infinite","AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE()":"infinite","ASSET_NOT_BORROWABLE_IN_ISOLATION()":"infinite","ASSET_NOT_LISTED()":"infinite","BORROWING_NOT_ENABLED()":"infinite","BORROW_CAP_EXCEEDED()":"infinite","BRIDGE_PROTOCOL_FEE_INVALID()":"infinite","CALLER_MUST_BE_POOL()":"infinite","CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN()":"infinite","CALLER_NOT_ATOKEN()":"infinite","CALLER_NOT_BRIDGE()":"infinite","CALLER_NOT_EMERGENCY_ADMIN()":"infinite","CALLER_NOT_POOL_ADMIN()":"infinite","CALLER_NOT_POOL_CONFIGURATOR()":"infinite","CALLER_NOT_POOL_OR_EMERGENCY_ADMIN()":"infinite","CALLER_NOT_RISK_OR_POOL_ADMIN()":"infinite","COLLATERAL_BALANCE_IS_ZERO()":"infinite","COLLATERAL_CANNOT_BE_LIQUIDATED()":"infinite","COLLATERAL_CANNOT_COVER_NEW_BORROW()":"infinite","COLLATERAL_SAME_AS_BORROWING_CURRENCY()":"infinite","DEBT_CEILING_EXCEEDED()":"infinite","DEBT_CEILING_NOT_ZERO()":"infinite","EMODE_CATEGORY_RESERVED()":"infinite","FLASHLOAN_DISABLED()":"infinite","FLASHLOAN_PREMIUM_INVALID()":"infinite","HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD()":"infinite","HEALTH_FACTOR_NOT_BELOW_THRESHOLD()":"infinite","INCONSISTENT_EMODE_CATEGORY()":"infinite","INCONSISTENT_FLASHLOAN_PARAMS()":"infinite","INCONSISTENT_PARAMS_LENGTH()":"infinite","INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET()":"infinite","INVALID_ADDRESSES_PROVIDER()":"infinite","INVALID_ADDRESSES_PROVIDER_ID()":"infinite","INVALID_AMOUNT()":"infinite","INVALID_BORROW_CAP()":"infinite","INVALID_BURN_AMOUNT()":"infinite","INVALID_DEBT_CEILING()":"infinite","INVALID_DECIMALS()":"infinite","INVALID_EMODE_CATEGORY()":"infinite","INVALID_EMODE_CATEGORY_ASSIGNMENT()":"infinite","INVALID_EMODE_CATEGORY_PARAMS()":"infinite","INVALID_EXPIRATION()":"infinite","INVALID_FLASHLOAN_EXECUTOR_RETURN()":"infinite","INVALID_INTEREST_RATE_MODE_SELECTED()":"infinite","INVALID_LIQUIDATION_PROTOCOL_FEE()":"infinite","INVALID_LIQ_BONUS()":"infinite","INVALID_LIQ_THRESHOLD()":"infinite","INVALID_LTV()":"infinite","INVALID_MINT_AMOUNT()":"infinite","INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()":"infinite","INVALID_OPTIMAL_USAGE_RATIO()":"infinite","INVALID_RESERVE_FACTOR()":"infinite","INVALID_RESERVE_INDEX()":"infinite","INVALID_RESERVE_PARAMS()":"infinite","INVALID_SIGNATURE()":"infinite","INVALID_SUPPLY_CAP()":"infinite","INVALID_UNBACKED_MINT_CAP()":"infinite","LTV_VALIDATION_FAILED()":"infinite","NOT_CONTRACT()":"infinite","NOT_ENOUGH_AVAILABLE_USER_BALANCE()":"infinite","NO_DEBT_OF_SELECTED_TYPE()":"infinite","NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF()":"infinite","NO_MORE_RESERVES_ALLOWED()":"infinite","NO_OUTSTANDING_STABLE_DEBT()":"infinite","NO_OUTSTANDING_VARIABLE_DEBT()":"infinite","OPERATION_NOT_SUPPORTED()":"infinite","POOL_ADDRESSES_DO_NOT_MATCH()":"infinite","PRICE_ORACLE_SENTINEL_CHECK_FAILED()":"infinite","RESERVE_ALREADY_ADDED()":"infinite","RESERVE_ALREADY_INITIALIZED()":"infinite","RESERVE_DEBT_NOT_ZERO()":"infinite","RESERVE_FROZEN()":"infinite","RESERVE_INACTIVE()":"infinite","RESERVE_LIQUIDITY_NOT_ZERO()":"infinite","RESERVE_PAUSED()":"infinite","SILOED_BORROWING_VIOLATION()":"infinite","SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER()":"infinite","STABLE_BORROWING_ENABLED()":"infinite","STABLE_BORROWING_NOT_ENABLED()":"infinite","STABLE_DEBT_NOT_ZERO()":"infinite","SUPPLY_CAP_EXCEEDED()":"infinite","UNBACKED_MINT_CAP_EXCEEDED()":"infinite","UNDERLYING_BALANCE_ZERO()":"infinite","UNDERLYING_CANNOT_BE_RESCUED()":"infinite","UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO()":"infinite","USER_IN_ISOLATION_MODE_OR_LTV_ZERO()":"infinite","VARIABLE_DEBT_SUPPLY_NOT_ZERO()":"infinite","ZERO_ADDRESS_NOT_VALID()":"infinite"}},"methodIdentifiers":{"ACL_ADMIN_CANNOT_BE_ZERO()":"fd1828ff","ADDRESSES_PROVIDER_ALREADY_ADDED()":"14dcfbbc","ADDRESSES_PROVIDER_NOT_REGISTERED()":"e02f07ee","AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE()":"f07f6785","ASSET_NOT_BORROWABLE_IN_ISOLATION()":"8596aad5","ASSET_NOT_LISTED()":"cd23367c","BORROWING_NOT_ENABLED()":"4ef999ff","BORROW_CAP_EXCEEDED()":"2eed17e8","BRIDGE_PROTOCOL_FEE_INVALID()":"7aa0767e","CALLER_MUST_BE_POOL()":"471df685","CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN()":"2c8e3b4c","CALLER_NOT_ATOKEN()":"a2e976c6","CALLER_NOT_BRIDGE()":"4f77647b","CALLER_NOT_EMERGENCY_ADMIN()":"485c8ff6","CALLER_NOT_POOL_ADMIN()":"ac753236","CALLER_NOT_POOL_CONFIGURATOR()":"61c111d2","CALLER_NOT_POOL_OR_EMERGENCY_ADMIN()":"26e7b312","CALLER_NOT_RISK_OR_POOL_ADMIN()":"b5e79366","COLLATERAL_BALANCE_IS_ZERO()":"4e01e3c1","COLLATERAL_CANNOT_BE_LIQUIDATED()":"895f7dc8","COLLATERAL_CANNOT_COVER_NEW_BORROW()":"e3fa20f5","COLLATERAL_SAME_AS_BORROWING_CURRENCY()":"8a344000","DEBT_CEILING_EXCEEDED()":"65a83bab","DEBT_CEILING_NOT_ZERO()":"e4dd8b74","EMODE_CATEGORY_RESERVED()":"f479ea11","FLASHLOAN_DISABLED()":"8aa3ca4c","FLASHLOAN_PREMIUM_INVALID()":"747fa556","HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD()":"366eb54d","HEALTH_FACTOR_NOT_BELOW_THRESHOLD()":"952633c5","INCONSISTENT_EMODE_CATEGORY()":"8f7722b2","INCONSISTENT_FLASHLOAN_PARAMS()":"73dea5e3","INCONSISTENT_PARAMS_LENGTH()":"bad8308c","INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET()":"2926c971","INVALID_ADDRESSES_PROVIDER()":"37930782","INVALID_ADDRESSES_PROVIDER_ID()":"60c3de80","INVALID_AMOUNT()":"fae82791","INVALID_BORROW_CAP()":"d6f9fcde","INVALID_BURN_AMOUNT()":"51267450","INVALID_DEBT_CEILING()":"dcc56db6","INVALID_DECIMALS()":"fa163a83","INVALID_EMODE_CATEGORY()":"a8c97853","INVALID_EMODE_CATEGORY_ASSIGNMENT()":"5d9c76c0","INVALID_EMODE_CATEGORY_PARAMS()":"47cf1523","INVALID_EXPIRATION()":"c08a1146","INVALID_FLASHLOAN_EXECUTOR_RETURN()":"7fea6f36","INVALID_INTEREST_RATE_MODE_SELECTED()":"89c5d45f","INVALID_LIQUIDATION_PROTOCOL_FEE()":"8eda46bd","INVALID_LIQ_BONUS()":"9527e9d9","INVALID_LIQ_THRESHOLD()":"dd1dd95f","INVALID_LTV()":"99ce53f3","INVALID_MINT_AMOUNT()":"abd351b1","INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()":"c899301a","INVALID_OPTIMAL_USAGE_RATIO()":"4e3aed37","INVALID_RESERVE_FACTOR()":"a4868dca","INVALID_RESERVE_INDEX()":"d1cd8b1d","INVALID_RESERVE_PARAMS()":"335763de","INVALID_SIGNATURE()":"a3402a38","INVALID_SUPPLY_CAP()":"26bbd053","INVALID_UNBACKED_MINT_CAP()":"47ba93d8","LTV_VALIDATION_FAILED()":"b87041c2","NOT_CONTRACT()":"11d7b006","NOT_ENOUGH_AVAILABLE_USER_BALANCE()":"b7f5e224","NO_DEBT_OF_SELECTED_TYPE()":"dc191bd9","NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF()":"712f536a","NO_MORE_RESERVES_ALLOWED()":"76ae8fca","NO_OUTSTANDING_STABLE_DEBT()":"74459b14","NO_OUTSTANDING_VARIABLE_DEBT()":"b4a45730","OPERATION_NOT_SUPPORTED()":"8b8b98d7","POOL_ADDRESSES_DO_NOT_MATCH()":"1abbb001","PRICE_ORACLE_SENTINEL_CHECK_FAILED()":"c8638082","RESERVE_ALREADY_ADDED()":"12dcade8","RESERVE_ALREADY_INITIALIZED()":"d9adda85","RESERVE_DEBT_NOT_ZERO()":"e981483a","RESERVE_FROZEN()":"6cd3cfbc","RESERVE_INACTIVE()":"52ba9dbe","RESERVE_LIQUIDITY_NOT_ZERO()":"084dfa0d","RESERVE_PAUSED()":"b68774e9","SILOED_BORROWING_VIOLATION()":"de24948c","SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER()":"22a73446","STABLE_BORROWING_ENABLED()":"198d6a6b","STABLE_BORROWING_NOT_ENABLED()":"4d86f393","STABLE_DEBT_NOT_ZERO()":"65e7ef4c","SUPPLY_CAP_EXCEEDED()":"b0510054","UNBACKED_MINT_CAP_EXCEEDED()":"6b3f7cc7","UNDERLYING_BALANCE_ZERO()":"a2797c80","UNDERLYING_CANNOT_BE_RESCUED()":"ab883ca0","UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO()":"94f9fd8a","USER_IN_ISOLATION_MODE_OR_LTV_ZERO()":"480702ae","VARIABLE_DEBT_SUPPLY_NOT_ZERO()":"f10727db","ZERO_ADDRESS_NOT_VALID()":"d14bb17a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ACL_ADMIN_CANNOT_BE_ZERO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER_ALREADY_ADDED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER_NOT_REGISTERED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ASSET_NOT_BORROWABLE_IN_ISOLATION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ASSET_NOT_LISTED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BORROWING_NOT_ENABLED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BORROW_CAP_EXCEEDED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BRIDGE_PROTOCOL_FEE_INVALID\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CALLER_MUST_BE_POOL\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CALLER_NOT_ATOKEN\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CALLER_NOT_BRIDGE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CALLER_NOT_EMERGENCY_ADMIN\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CALLER_NOT_POOL_ADMIN\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CALLER_NOT_POOL_CONFIGURATOR\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CALLER_NOT_POOL_OR_EMERGENCY_ADMIN\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CALLER_NOT_RISK_OR_POOL_ADMIN\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"COLLATERAL_BALANCE_IS_ZERO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"COLLATERAL_CANNOT_BE_LIQUIDATED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"COLLATERAL_CANNOT_COVER_NEW_BORROW\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"COLLATERAL_SAME_AS_BORROWING_CURRENCY\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEBT_CEILING_EXCEEDED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEBT_CEILING_NOT_ZERO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EMODE_CATEGORY_RESERVED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FLASHLOAN_DISABLED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FLASHLOAN_PREMIUM_INVALID\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"HEALTH_FACTOR_NOT_BELOW_THRESHOLD\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INCONSISTENT_EMODE_CATEGORY\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INCONSISTENT_FLASHLOAN_PARAMS\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INCONSISTENT_PARAMS_LENGTH\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_ADDRESSES_PROVIDER_ID\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_AMOUNT\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_BORROW_CAP\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_BURN_AMOUNT\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_DEBT_CEILING\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_DECIMALS\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_EMODE_CATEGORY\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_EMODE_CATEGORY_ASSIGNMENT\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_EMODE_CATEGORY_PARAMS\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_EXPIRATION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_FLASHLOAN_EXECUTOR_RETURN\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_INTEREST_RATE_MODE_SELECTED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_LIQUIDATION_PROTOCOL_FEE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_LIQ_BONUS\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_LIQ_THRESHOLD\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_LTV\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_MINT_AMOUNT\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_OPTIMAL_USAGE_RATIO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_RESERVE_FACTOR\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_RESERVE_INDEX\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_RESERVE_PARAMS\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_SIGNATURE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_SUPPLY_CAP\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INVALID_UNBACKED_MINT_CAP\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LTV_VALIDATION_FAILED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NOT_CONTRACT\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NOT_ENOUGH_AVAILABLE_USER_BALANCE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NO_DEBT_OF_SELECTED_TYPE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NO_MORE_RESERVES_ALLOWED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NO_OUTSTANDING_STABLE_DEBT\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NO_OUTSTANDING_VARIABLE_DEBT\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATION_NOT_SUPPORTED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_ADDRESSES_DO_NOT_MATCH\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PRICE_ORACLE_SENTINEL_CHECK_FAILED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_ALREADY_ADDED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_ALREADY_INITIALIZED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_DEBT_NOT_ZERO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_FROZEN\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_INACTIVE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_LIQUIDITY_NOT_ZERO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_PAUSED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SILOED_BORROWING_VIOLATION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STABLE_BORROWING_ENABLED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STABLE_BORROWING_NOT_ENABLED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STABLE_DEBT_NOT_ZERO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUPPLY_CAP_EXCEEDED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNBACKED_MINT_CAP_EXCEEDED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_BALANCE_ZERO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_CANNOT_BE_RESCUED\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"USER_IN_ISOLATION_MODE_OR_LTV_ZERO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VARIABLE_DEBT_SUPPLY_NOT_ZERO\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ZERO_ADDRESS_NOT_VALID\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Errors library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Defines the error messages emitted by the different contracts of the Aave protocol\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":\"Errors\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Defines the error messages emitted by the different contracts of the Aave protocol","version":1}}},"@aave/core-v3/contracts/protocol/libraries/helpers/Helpers.sol":{"Helpers":{"abi":[],"devdoc":{"author":"Aave","kind":"dev","methods":{},"title":"Helpers library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122093f1e832187e7542cc08e8660144c538fe8f49d48ab29b8b244d24283292880a64736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP4 CALL 0xE8 ORIGIN XOR PUSH31 0x7542CC08E8660144C538FE8F49D48AB29B8B244D24283292880A64736F6C63 NUMBER STOP ADDMOD EXP STOP CALLER ","sourceMap":"243:570:75:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;243:570:75;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122093f1e832187e7542cc08e8660144c538fe8f49d48ab29b8b244d24283292880a64736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP4 CALL 0xE8 ORIGIN XOR PUSH31 0x7542CC08E8660144C538FE8F49D48AB29B8B244D24283292880A64736F6C63 NUMBER STOP ADDMOD EXP STOP CALLER ","sourceMap":"243:570:75:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"getUserCurrentDebt(address,struct DataTypes.ReserveCache memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Helpers library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/libraries/helpers/Helpers.sol\":\"Helpers\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title Helpers library\\n * @author Aave\\n */\\nlibrary Helpers {\\n  /**\\n   * @notice Fetches the user current stable and variable debt balances\\n   * @param user The user address\\n   * @param reserveCache The reserve cache data object\\n   * @return The stable debt balance\\n   * @return The variable debt balance\\n   */\\n  function getUserCurrentDebt(\\n    address user,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal view returns (uint256, uint256) {\\n    return (\\n      IERC20(reserveCache.stableDebtTokenAddress).balanceOf(user),\\n      IERC20(reserveCache.variableDebtTokenAddress).balanceOf(user)\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x7e0c79cab4c30d9fadd227dcdecb51046e01d74ed34e5e8597f928f7f3a97640\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol":{"BorrowLogic":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"borrowRate","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"Borrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalDebt","type":"uint256"}],"name":"IsolationModeTotalDebtUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"RebalanceStableBorrowRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"repayer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"useATokens","type":"bool"}],"name":"Repay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"}],"name":"SwapBorrowRateMode","type":"event"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"executeBorrow(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteBorrowParams)":{"details":"Emits the `Borrow()` event","params":{"eModeCategories":"The configuration of all the efficiency mode categories","params":"The additional parameters needed to execute the borrow function","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves","userConfig":"The user configuration mapping that tracks the supplied/borrowed assets"}},"executeRebalanceStableBorrowRate(DataTypes.ReserveData storage,address,address)":{"details":"The rules that define if a position can be rebalanced are implemented in `ValidationLogic.validateRebalanceStableBorrowRate()`Emits the `RebalanceStableBorrowRate()` event","params":{"asset":"The asset of the position being rebalanced","reserve":"The state of the reserve of the asset being repaid","user":"The user being rebalanced"}},"executeRepay(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteRepayParams)":{"details":"Emits the `Repay()` event","params":{"params":"The additional parameters needed to execute the repay function","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves","userConfig":"The user configuration mapping that tracks the supplied/borrowed assets"},"returns":{"_0":"The actual amount being repaid"}},"executeSwapBorrowRateMode(DataTypes.ReserveData storage,DataTypes.UserConfigurationMap storage,address,DataTypes.InterestRateMode)":{"details":"Emits the `Swap()` event","params":{"asset":"The asset of the position being swapped","interestRateMode":"The current interest rate mode of the position being swapped","reserve":"The of the reserve of the asset being repaid","userConfig":"The user configuration mapping that tracks the supplied/borrowed assets"}}},"title":"BorrowLogic library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6154b361003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c80631e6473f91461005b57806340e95de61461007d5780636973f744146100af578063eac4d703146100cf575b600080fd5b81801561006757600080fd5b5061007b610076366004614cc6565b6100ef565b005b81801561008957600080fd5b5061009d610098366004614e02565b610773565b60405190815260200160405180910390f35b8180156100bb57600080fd5b5061007b6100ca366004614f02565b610cd9565b8180156100db57600080fd5b5061007b6100ea366004614f3e565b610f6d565b805173ffffffffffffffffffffffffffffffffffffffff1660009081526020869052604081209061011f8261131d565b905061012b8282611536565b6040805160208101909152845481526000908190819061014c908b8b6115c1565b92509250925061027c8a8a8a604051806101c001604052808981526020018c60405180602001604052908160008201548152505081526020018b6000015173ffffffffffffffffffffffffffffffffffffffff1681526020018b6040015173ffffffffffffffffffffffffffffffffffffffff1681526020018b6060015181526020018b6080015160028111156101e5576101e5614f84565b81526020018b60e0015181526020018b610100015181526020018b610120015173ffffffffffffffffffffffffffffffffffffffff1681526020018b610140015160ff1681526020018b610160015173ffffffffffffffffffffffffffffffffffffffff16815260200188151581526020018773ffffffffffffffffffffffffffffffffffffffff16815260200186815250611679565b60008060018860800151600281111561029757610297614f84565b141561038657600387015461020087015160208a01516040808c015160608d015191517fb3f1c93d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384166004820152908316602482015260448101919091526fffffffffffffffffffffffffffffffff909316606484018190529450169063b3f1c93d906084016060604051808303816000875af1158015610351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103759190614fb3565b60a089015260c0880152905061044f565b61022086015160208901516040808b015160608c01516101408b015192517fb3f1c93d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff948516600482015291841660248301526044820152606481019190915291169063b3f1c93d9060840160408051808303816000875af1158015610423573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104479190614fea565b602088015290505b8015610484576003870154610484908a907501000000000000000000000000000000000000000000900461ffff16600161259c565b84156105af576101c0860151516000906104ca9060029060301c60ff166104ab9190615047565b6104b690600a61517e565b8a606001516104c591906151b9565b612617565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260208f90526040812060090180549091906105149084906fffffffffffffffffffffffffffffffff166151f4565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790556fffffffffffffffffffffffffffffffff1690508473ffffffffffffffffffffffffffffffffffffffff167faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5826040516105a591815260200190565b60405180910390a2505b6105da86896000015160008b60c001516105ca5760006105d0565b8b606001515b8b939291906126a3565b8760c001511561067e576101e0860151602089015160608a01516040517f4efecaa500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152911690634efecaa590604401600060405180830381600087803b15801561066557600080fd5b505af1158015610679573d6000803e3d6000fd5b505050505b8760a0015161ffff16886040015173ffffffffffffffffffffffffffffffffffffffff16896000015173ffffffffffffffffffffffffffffffffffffffff167fb3d084820fb1a9decffb176436bd02558d15fac9b0ddfed8c465bc7359d7dce08b602001518c606001518d608001516001600281111561070057610700614f84565b8f60800151600281111561071657610716614f84565b1461074b5760028e015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1661074d565b885b60405161075d9493929190615263565b60405180910390a4505050505050505050505050565b805173ffffffffffffffffffffffffffffffffffffffff166000908152602085905260408120816107a38261131d565b90506107af8282611536565b6000806107c08660600151846129e4565b915091506107de838760200151886040015189606001518686612b21565b60006001876040015160028111156107f8576107f8614f84565b146108035781610805565b825b90508660800151801561083b57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8760200151145b156108db576101e08401516040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa1580156108b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d591906152a3565b60208801525b80876020015110156108ee575060208601515b60018760400151600281111561090657610906614f84565b14156109be5761020084015160608801516040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260248101849052911690639dc29fac9060440160408051808303816000875af115801561098b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109af91906152bc565b60a086015260c0850152610a76565b61022084015160608801516101408601516040517ff5298aca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101859052604481019190915291169063f5298aca906064016020604051808303816000875af1158015610a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7091906152a3565b60208501525b610a9c8488600001518960800151610a8e5783610a91565b60005b8892919060006126a3565b80610aa783856152e0565b610ab19190615047565b610ae4576003850154610ae49089907501000000000000000000000000000000000000000000900461ffff16600061259c565b610af18a8a8a8785612db7565b866080015115610ba2576101e08401516101008501516040517fd7020d0a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909216602483018190526044830184905260648301919091529063d7020d0a90608401600060405180830381600087803b158015610b8557600080fd5b505af1158015610b99573d6000803e3d6000fd5b50505050610c69565b6101e08401518751610bcf9173ffffffffffffffffffffffffffffffffffffffff90911690339084612fb9565b6101e084015160608801516040517f6fd9767600000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff918216602482015260448101849052911690636fd9767690606401600060405180830381600087803b158015610c5057600080fd5b505af1158015610c64573d6000803e3d6000fd5b505050505b606087015187516080890151604080518581529115156020830152339373ffffffffffffffffffffffffffffffffffffffff9081169316917fa534c8dbe71f871f9f3530e97a74601fea17b426cae02e1c5aee42c96c784051910160405180910390a49998505050505050505050565b6000610ce48461131d565b9050610cf08482611536565b610cfb84828561307a565b6102008101516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600091908316906370a0823190602401602060405180830381865afa158015610d71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9591906152a3565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820183905291925090831690639dc29fac9060440160408051808303816000875af1158015610e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3191906152bc565b505060038601546040517fb3f1c93d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483018190526024830152604482018490526fffffffffffffffffffffffffffffffff90921660648201529083169063b3f1c93d906084016060604051808303816000875af1158015610ece573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef29190614fb3565b60a086015260c085015250610f0b8684876000806126a3565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f9f439ae0c81e41a04d3fdfe07aed54e6a179fb0db15be7702eb66fa8ef6f530060405160405180910390a3505050505050565b6000610f788561131d565b9050610f848582611536565b600080610f9133846129e4565b91509150610fa3878488858589613482565b6001846002811115610fb757610fb7614f84565b1415611121576102008301516040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff90911690639dc29fac9060440160408051808303816000875af1158015611036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105a91906152bc565b60a085015260c08401526102208301516101408401516040517fb3f1c93d0000000000000000000000000000000000000000000000000000000081523360048201819052602482015260448101859052606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063b3f1c93d9060840160408051808303816000875af11580156110f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111169190614fea565b6020850152506112a1565b6102208301516101408401516040517ff5298aca00000000000000000000000000000000000000000000000000000000815233600482015260248101849052604481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063f5298aca906064016020604051808303816000875af11580156111a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cd91906152a3565b602084015261020083015160038801546040517fb3f1c93d00000000000000000000000000000000000000000000000000000000815233600482018190526024820152604481018490526fffffffffffffffffffffffffffffffff909116606482015273ffffffffffffffffffffffffffffffffffffffff9091169063b3f1c93d906084016060604051808303816000875af1158015611271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190614fb3565b60a086015260c0850152505b6112af8784876000806126a3565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f7962b394d85a534033ba2efcf43cd36de57b7ebeb3de0ca4428965d9b3ddc4818660405161130c91906152f8565b60405180910390a350505050505050565b611325614b51565b61132d614b51565b60408051602081018252845481526101c0830181905251901c61ffff166101a082015260018301546fffffffffffffffffffffffffffffffff808216610100840181905260e0840152600285015480821661014085018190526101208501527001000000000000000000000000000000009283900482166101608501528290041661018083015260048085015473ffffffffffffffffffffffffffffffffffffffff9081166101e085015260058601548116610200850152600686015416610220840181905260038601549290920464ffffffffff16610240840152604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905163b1bf962d928281019260209291908290030181865afa15801561145a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147e91906152a3565b816020018181525081600001818152505080610200015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa1580156114df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115039190615306565b64ffffffffff166102608501526060840181905260808401829052604084019290925260c083015260a082015292915050565b60038201544264ffffffffff908116700100000000000000000000000000000000909204161415611565575050565b61156f82826138b2565b61157982826139d3565b5060030180547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff1602179055565b60008060006115cf86613b53565b15611666576000611600877faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa613b9a565b6000818152602087815260408083205473ffffffffffffffffffffffffffffffffffffffff168084528a8352818420825193840190925290549182905292935060d41c64ffffffffff1690508015611662576001955090935091506116709050565b5050505b5060009150819050805b93509350939050565b608081015160408051808201909152600281527f32360000000000000000000000000000000000000000000000000000000000006020820152906116d95760405162461bcd60e51b81526004016116d09190615351565b60405180910390fd5b506117ae604051806102800160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581526020016000151581526020016000151581526020016000151581526020016000151581525090565b81516101c09081015151671000000000000000811615156102008401526708000000000000008116151561024084015267040000000000000081161515610220840152670200000000000000811615156101e084015267010000000000000016151590820181905260408051808201909152600281527f32370000000000000000000000000000000000000000000000000000000000006020820152906118685760405162461bcd60e51b81526004016116d09190615351565b50806102000151156040518060400160405280600281526020017f3239000000000000000000000000000000000000000000000000000000000000815250906118c45760405162461bcd60e51b81526004016116d09190615351565b50806101e00151156040518060400160405280600281526020017f3238000000000000000000000000000000000000000000000000000000000000815250906119205760405162461bcd60e51b81526004016116d09190615351565b508061022001516040518060400160405280600281526020017f33300000000000000000000000000000000000000000000000000000000000008152509061197b5760405162461bcd60e51b81526004016116d09190615351565b5061014082015173ffffffffffffffffffffffffffffffffffffffff161580611a13575081610140015173ffffffffffffffffffffffffffffffffffffffff166349aa2e816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1391906153c4565b6040518060400160405280600281526020017f353900000000000000000000000000000000000000000000000000000000000081525090611a675760405162461bcd60e51b81526004016116d09190615351565b5060028260a001516002811115611a8057611a80614f84565b1480611aa1575060018260a001516002811115611a9f57611a9f614f84565b145b6040518060400160405280600281526020017f333300000000000000000000000000000000000000000000000000000000000081525090611af55760405162461bcd60e51b81526004016116d09190615351565b5081516101c001515160301c60ff1661010082015281516101c001515160501c640fffffffff166101208201819052610100820151600a0a61016083015215611bde5781516101408101519051611b4b91613be9565b60e082018190526080808401518451909101519091611b69916152e0565b611b7391906152e0565b60c0820181905261016082015161012083015160408051808201909152600281527f353000000000000000000000000000000000000000000000000000000000000060208201529291021015611bdc5760405162461bcd60e51b81526004016116d09190615351565b505b81610160015115611d3b5781516101c00151516720000000000000001615156040518060400160405280600281526020017f363000000000000000000000000000000000000000000000000000000000000081525090611c515760405162461bcd60e51b81526004016116d09190615351565b50816101a00151611c876002836101000151611c6d9190615047565b611c7890600a61517e565b84608001516104c591906151b9565b61018084015173ffffffffffffffffffffffffffffffffffffffff16600090815260208890526040902060090154611cd191906fffffffffffffffffffffffffffffffff166151f4565b6fffffffffffffffffffffffffffffffff1611156040518060400160405280600281526020017f353300000000000000000000000000000000000000000000000000000000000081525090611d395760405162461bcd60e51b81526004016116d09190615351565b505b61012082015160ff1615611df95761012082015182516101c001515160ff9182169160a89190911c16146040518060400160405280600281526020017f353800000000000000000000000000000000000000000000000000000000000081525090611db95760405162461bcd60e51b81526004016116d09190615351565b5061012082015160ff166000908152602084905260409020546601000000000000900473ffffffffffffffffffffffffffffffffffffffff166101808201525b611e708585856040518060a00160405280876020015181526020018760e001518152602001876060015173ffffffffffffffffffffffffffffffffffffffff16815260200187610100015173ffffffffffffffffffffffffffffffffffffffff16815260200187610120015160ff16815250613c40565b5060a0860152508352606083015260408083018290528051808201909152600281527f3334000000000000000000000000000000000000000000000000000000000000602082015290611ed65760405162461bcd60e51b81526004016116d09190615351565b50805160408051808201909152600281527f3537000000000000000000000000000000000000000000000000000000000000602082015290611f2b5760405162461bcd60e51b81526004016116d09190615351565b50670de0b6b3a76400008160a00151116040518060400160405280600281526020017f333500000000000000000000000000000000000000000000000000000000000081525090611f8f5760405162461bcd60e51b81526004016116d09190615351565b50816080015182610100015173ffffffffffffffffffffffffffffffffffffffff1663b3596f07600073ffffffffffffffffffffffffffffffffffffffff1684610180015173ffffffffffffffffffffffffffffffffffffffff161415611ffa578460400151612001565b8361018001515b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801561206a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208e91906152a3565b61209891906153e1565b6101408201818152610160830151918290816120b6576120b661518a565b04905250805161014082015160608301516120db92916120d5916152e0565b906141aa565b60208083018290526040808401518151808301909252600282527f33360000000000000000000000000000000000000000000000000000000000009282019290925291111561213d5760405162461bcd60e51b81526004016116d09190615351565b5060018260a00151600281111561215657612156614f84565b1415612436578061024001516040518060400160405280600281526020017f3331000000000000000000000000000000000000000000000000000000000000815250906121b65760405162461bcd60e51b81526004016116d09190615351565b5060408281015173ffffffffffffffffffffffffffffffffffffffff1660009081526020878152919020600301549083015161220e917501000000000000000000000000000000000000000000900461ffff166141d5565b1580612223575081516101c001515161ffff16155b806122cc575081516101e0015160608301516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116906370a0823190602401602060405180830381865afa1580156122a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c591906152a3565b8260800151115b6040518060400160405280600281526020017f3337000000000000000000000000000000000000000000000000000000000000815250906123205760405162461bcd60e51b81526004016116d09190615351565b5060408281015183516101e0015191517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116906370a0823190602401602060405180830381865afa158015612399573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123bd91906152a3565b6080820181905260c08301516000916123d59161423f565b905080836080015111156040518060400160405280600281526020017f3338000000000000000000000000000000000000000000000000000000000000815250906124335760405162461bcd60e51b81526004016116d09190615351565b50505b6020820151517f55555555555555555555555555555555555555555555555555555555555555551615612595576020820151612473908686614282565b73ffffffffffffffffffffffffffffffffffffffff166101a083015215801561026083015261252e57816040015173ffffffffffffffffffffffffffffffffffffffff16816101a0015173ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f3839000000000000000000000000000000000000000000000000000000000000815250906125285760405162461bcd60e51b81526004016116d09190615351565b50612595565b81516101c001515160408051808201909152600281527f383900000000000000000000000000000000000000000000000000000000000060208201529067400000000000000016156125935760405162461bcd60e51b81526004016116d09190615351565b505b5050505050565b60408051808201909152600281527f37340000000000000000000000000000000000000000000000000000000000006020820152608083106125f15760405162461bcd60e51b81526004016116d09190615351565b50600182811b1b811561260957835481178455612611565b835481191684555b50505050565b60006fffffffffffffffffffffffffffffffff82111561269f5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f323820626974730000000000000000000000000000000000000000000000000060648201526084016116d0565b5090565b6126ce6040518060800160405280600081526020016000815260200160008152602001600081525090565b61014085015160208601516126e291613be9565b60608083019182526007880154604080516101208101825260088b01546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000009091041681526020810188905280820187905260c0808b0151948201949094529351608085015260a0808a0151908501526101a08901519284019290925273ffffffffffffffffffffffffffffffffffffffff87811660e08501526101e0890151811661010085015291517fa589870900000000000000000000000000000000000000000000000000000000815291169163a5898709916128439190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa158015612860573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612884919061541e565b6040840152602083015280825261289a90612617565b6001870180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905560208101516128dd90612617565b6003870180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055604081015161292e90612617565b6002870180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905580516020808301516040808501516101008a01516101408b0151835196875294860193909352908401526060830152608082015273ffffffffffffffffffffffffffffffffffffffff8516907f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a9060a00160405180910390a2505050505050565b6102008101516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260009283929116906370a0823190602401602060405180830381865afa158015612a5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a7f91906152a3565b6102208401516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152909116906370a0823190602401602060405180830381865afa158015612af2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1691906152a3565b915091509250929050565b60408051808201909152600281527f3236000000000000000000000000000000000000000000000000000000000000602082015285612b735760405162461bcd60e51b81526004016116d09190615351565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85141580612bb857503373ffffffffffffffffffffffffffffffffffffffff8416145b6040518060400160405280600281526020017f343000000000000000000000000000000000000000000000000000000000000081525090612c0c5760405162461bcd60e51b81526004016116d09190615351565b50600080612c61886101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b94505050509150816040518060400160405280600281526020017f323700000000000000000000000000000000000000000000000000000000000081525090612cbd5760405162461bcd60e51b81526004016116d09190615351565b5060408051808201909152600281527f323900000000000000000000000000000000000000000000000000000000000060208201528115612d115760405162461bcd60e51b81526004016116d09190615351565b508315801590612d3257506001866002811115612d3057612d30614f84565b145b80612d5857508215801590612d5857506002866002811115612d5657612d56614f84565b145b6040518060400160405280600281526020017f333900000000000000000000000000000000000000000000000000000000000081525090612dac5760405162461bcd60e51b81526004016116d09190615351565b505050505050505050565b6040805160208101909152835481526000908190612dd69088886115c1565b50915091508115612fb05773ffffffffffffffffffffffffffffffffffffffff81166000908152602088905260408120600901546101c0860151516fffffffffffffffffffffffffffffffff9091169190612e539060029060301c60ff16612e3e9190615047565b612e4990600a61517e565b6104c590876151b9565b9050806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff1611612f035773ffffffffffffffffffffffffffffffffffffffff8316600081815260208b8152604080832060090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055519182527faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5910160405180910390a2612dac565b6000612f0f828461544c565b73ffffffffffffffffffffffffffffffffffffffff8516600081815260208d815260409182902060090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff959095169485179055905183815292935090917faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5910160405180910390a25050505b50505050505050565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af1613024573d6000803e3d6000fd5b5061302e8561432e565b6125955760405162461bcd60e51b815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d0000000000000060448201526064016116d0565b6000806130ce846101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b94505050509150816040518060400160405280600281526020017f32370000000000000000000000000000000000000000000000000000000000008152509061312a5760405162461bcd60e51b81526004016116d09190615351565b5060408051808201909152600281527f32390000000000000000000000000000000000000000000000000000000000006020820152811561317e5760405162461bcd60e51b81526004016116d09190615351565b50600084610220015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131f591906152a3565b85610200015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613245573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061326991906152a3565b61327391906152e0565b6007870154604080516101208101825260088a01546fffffffffffffffffffffffffffffffff700100000000000000000000000000000000909104168152600060208201819052818301819052606082018190526080820185905260a082018190526101a08a015160c083015273ffffffffffffffffffffffffffffffffffffffff89811660e08401526101e08b0151811661010084015292517fa589870900000000000000000000000000000000000000000000000000000000815294955093919092169163a5898709916133c99190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa1580156133e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061340a919061541e565b5090915061341c90508161232861423f565b86610160015111156040518060400160405280600281526020017f3434000000000000000000000000000000000000000000000000000000000000815250906134785760405162461bcd60e51b81526004016116d09190615351565b5050505050505050565b6000806000806134d9896101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b945094505093509350836040518060400160405280600281526020017f3237000000000000000000000000000000000000000000000000000000000000815250906135375760405162461bcd60e51b81526004016116d09190615351565b5060408051808201909152600281527f32390000000000000000000000000000000000000000000000000000000000006020820152811561358b5760405162461bcd60e51b81526004016116d09190615351565b5060408051808201909152600281527f3238000000000000000000000000000000000000000000000000000000000000602082015283156135df5760405162461bcd60e51b81526004016116d09190615351565b5060018560028111156135f4576135f4614f84565b14156136525760408051808201909152600281527f343100000000000000000000000000000000000000000000000000000000000060208201528761364c5760405162461bcd60e51b81526004016116d09190615351565b506138a6565b600285600281111561366657613666614f84565b141561385b5760408051808201909152600281527f34320000000000000000000000000000000000000000000000000000000000006020820152866136be5760405162461bcd60e51b81526004016116d09190615351565b5060408051808201909152600281527f33310000000000000000000000000000000000000000000000000000000000006020820152826137115760405162461bcd60e51b81526004016116d09190615351565b5060038a015460408051602081019091528954815261374c917501000000000000000000000000000000000000000000900461ffff166141d5565b158061376057506101c08901515161ffff16155b8061380757506101e08901516040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa1580156137d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137fb91906152a3565b61380587896152e0565b115b6040518060400160405280600281526020017f33370000000000000000000000000000000000000000000000000000000000008152509061364c5760405162461bcd60e51b81526004016116d09190615351565b604080518082018252600281527f33330000000000000000000000000000000000000000000000000000000000006020820152905162461bcd60e51b81526116d09190600401615351565b50505050505050505050565b610160810151156139425760006138d38261016001518361024001516143e0565b90506138ec8260e0015182613be990919063ffffffff16565b61010083018190526138fd90612617565b6001840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b8051156139cf57600061395f826101800151836102400151614425565b905061397982610120015182613be990919063ffffffff16565b610140830181905261398a90612617565b6002840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b5050565b613a0c6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6101a0820151613a1b57505050565b6101208201518251613a2c91613be9565b60208201526101408201518251613a4291613be9565b60408201526060820151610260830151610240840151613a6a92919064ffffffffff1661442e565b606082018190526040830151613a7f91613be9565b808252602082015160808401516040840151613a9b91906152e0565b613aa59190615047565b613aaf9190615047565b608082018190526101a0830151613ac6919061423f565b60a0820181905215613b4e57613af16104c58361010001518360a0015161457590919063ffffffff16565b600884018054600090613b179084906fffffffffffffffffffffffffffffffff166151f4565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b505050565b80516000907faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa168015801590613b935750613b8f600182615047565b8116155b9392505050565b815160009082167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101198116825b60029190911c908115613bde57600101613bc9565b925050505b92915050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517613c1e57600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b600080600080600080613c568760000151511590565b15613c925750600094508493508392508291507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90508161419d565b613d4160405180610260016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581525090565b608088015160ff1615613d8657608088015160ff16600090815260208a9052604090206060890151613d7391906145b4565b6101808401526101c08301526101a08201525b87602001518160c0015110156140a55760c08101518851613da691614693565b613dba5760c0810180516001019052613d86565b60c0810151600090815260208b9052604090205473ffffffffffffffffffffffffffffffffffffffff166102008201819052613e005760c0810180516001019052613d86565b61020081015173ffffffffffffffffffffffffffffffffffffffff16600090815260208c8152604091829020825180830190935280549283905260ff60a884901c81166101e0860152603084901c166060850181905261ffff601085901c811660a08701529093166080850152600a9290920a9083015261018082015115801590613e965750816101e00151896080015160ff16145b613f3a5760608901516102008301516040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063b3596f0790602401602060405180830381865afa158015613f11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f3591906152a3565b613f41565b8161018001515b825260a082015115801590613f61575060c08201518951613f61916141d5565b1561405157613f7e896040015182846000015185602001516146fe565b6040830181905261010083018051613f979083906152e0565b90525060808901516101e0830151613fb29160ff16906147dd565b151561024083015260808201511561400857816102400151613fd8578160800151613fdf565b816101a001515b8260400151613fee91906153e1565b826101400181815161400091906152e0565b905250614011565b60016102208301525b816102400151614025578160a0015161402c565b816101c001515b826040015161403b91906153e1565b826101600181815161404d91906152e0565b9052505b60c08201518951614061916147ee565b156140945761407e89604001518284600001518560200151614856565b826101200181815161409091906152e0565b9052505b5060c0810180516001019052613d86565b6101008101516140b65760006140d1565b806101000151816101400151816140cf576140cf61518a565b045b6101408201526101008101516140e8576000614103565b806101000151816101600151816141015761410161518a565b045b610160820152610120810151156141455761414081610120015161413a83610160015184610100015161423f90919063ffffffff16565b906149d6565b614167565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b60e0820181905261010082015161012083015161014084015161016085015161022090950151929a509098509650919450925090505b9499939850945094509450565b60008115612710600284041904841117156141c457600080fd5b506127109190910260028204010490565b60408051808201909152600281527f373400000000000000000000000000000000000000000000000000000000000060208201526000906080831061422d5760405162461bcd60e51b81526004016116d09190615351565b50509051600191821b82011c16151590565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec778390048411151761427457600080fd5b506127109102611388010490565b60008061428e85614a0d565b1561431f5760006142bf867f5555555555555555555555555555555555555555555555555555555555555555613b9a565b6000818152602086815260408083205473ffffffffffffffffffffffffffffffffffffffff16808452898352928190208151928301909152549081905291925090674000000000000000161561431c576001935091506143269050565b50505b5060009050805b935093915050565b6000614354565b62461bcd60e51b60005260206004528060245250806044525060646000fd5b3d801561439357602081146143cd5761438e7f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f614335565b6143da565b823b6143c4576143c47f475076323a206e6f74206120636f6e74726163740000000000000000000000006014614335565b600191506143da565b3d6000803e600051151591505b50919050565b6000806143f464ffffffffff841642615047565b6143fe90856153e1565b6301e133809004905061441d816b033b2e3c9fd0803ce80000006152e0565b949350505050565b6000613b938383425b60008061444264ffffffffff851684615047565b90508061445e576b033b2e3c9fd0803ce8000000915050613b93565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511614494576000614499565b600285035b925066038882915c40006144ad8a80613be9565b816144ba576144ba61518a565b0491506301e133806144cc838b613be9565b816144d9576144d961518a565b0490506000826144e986886153e1565b6144f391906153e1565b60029004905060008285614507888a6153e1565b61451191906153e1565b61451b91906153e1565b60069004905080826301e133806145328a8f6153e1565b61453c91906151b9565b614552906b033b2e3c9fd0803ce80000006152e0565b61455c91906152e0565b61456691906152e0565b9b9a5050505050505050505050565b600081156b033b2e3c9fd0803ce80000006002840419048411171561459957600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b81546000908190819081906601000000000000900473ffffffffffffffffffffffffffffffffffffffff168015614678576040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015287169063b3596f0790602401602060405180830381865afa158015614651573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061467591906152a3565b91505b50945461ffff80821697620100009092041695945092505050565b60408051808201909152600281527f37340000000000000000000000000000000000000000000000000000000000006020820152600090608083106146eb5760405162461bcd60e51b81526004016116d09190615351565b5050905160019190911b1c600316151590565b60008061470a85614a49565b6004868101546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81169382019390935292935060009287926147b6928692911690631da24f3e90602401602060405180830381865afa15801561478c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147b091906152a3565b90613be9565b6147c091906153e1565b90508381816147d1576147d161518a565b04979650505050505050565b60008215801590613b935750501490565b60408051808201909152600281527f37340000000000000000000000000000000000000000000000000000000000006020820152600090608083106148465760405162461bcd60e51b81526004016116d09190615351565b50509051600191821b1c16151590565b60068301546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000928392911690631da24f3e90602401602060405180830381865afa1580156148cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148f091906152a3565b9050801561490e5761490b61490486614acd565b8290613be9565b90505b60058501546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152909116906370a0823190602401602060405180830381865afa158015614980573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149a491906152a3565b6149ae90826152e0565b90506149ba81856153e1565b90508281816149cb576149cb61518a565b049695505050505050565b60008115670de0b6b3a7640000600284041904841117156149f657600080fd5b50670de0b6b3a76400009190910260028204010490565b80516000907f5555555555555555555555555555555555555555555555555555555555555555168015801590613b935750613b8f600182615047565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415614a8f575050600101546fffffffffffffffffffffffffffffffff1690565b6001830154613b93906fffffffffffffffffffffffffffffffff808216916147b09170010000000000000000000000000000000090910416846143e0565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415614b13575050600201546fffffffffffffffffffffffffffffffff1690565b6002830154613b93906fffffffffffffffffffffffffffffffff808216916147b0917001000000000000000000000000000000009091041684614425565b6040518061028001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001614bd56040518060200160405280600081525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b604051610180810167ffffffffffffffff81118282101715614c49577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803573ffffffffffffffffffffffffffffffffffffffff81168114614c7357600080fd5b919050565b803560038110614c7357600080fd5b803561ffff81168114614c7357600080fd5b8015158114614ca757600080fd5b50565b8035614c7381614c99565b803560ff81168114614c7357600080fd5b6000806000806000858703610200811215614ce057600080fd5b86359550602087013594506040870135935060608701359250610180807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083011215614d2b57600080fd5b614d33614bfe565b9150614d4160808901614c4f565b8252614d4f60a08901614c4f565b6020830152614d6060c08901614c4f565b604083015260e08801356060830152610100614d7d818a01614c78565b6080840152610120614d90818b01614c87565b60a0850152610140614da3818c01614caa565b60c0860152610160808c013560e0870152848c013584870152614dc96101a08d01614c4f565b83870152614dda6101c08d01614cb5565b82870152614deb6101e08d01614c4f565b818701525050505050809150509295509295909350565b600080600080848603610100811215614e1a57600080fd5b85359450602086013593506040860135925060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa082011215614e5c57600080fd5b5060405160a0810181811067ffffffffffffffff82111715614ea7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052614eb660608701614c4f565b815260808601356020820152614ece60a08701614c78565b6040820152614edf60c08701614c4f565b606082015260e0860135614ef281614c99565b6080820152939692955090935050565b600080600060608486031215614f1757600080fd5b83359250614f2760208501614c4f565b9150614f3560408501614c4f565b90509250925092565b60008060008060808587031215614f5457600080fd5b8435935060208501359250614f6b60408601614c4f565b9150614f7960608601614c78565b905092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080600060608486031215614fc857600080fd5b8351614fd381614c99565b602085015160409095015190969495509392505050565b60008060408385031215614ffd57600080fd5b825161500881614c99565b6020939093015192949293505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561505957615059615018565b500390565b600181815b808511156150b757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561509d5761509d615018565b808516156150aa57918102915b93841c9390800290615063565b509250929050565b6000826150ce57506001613be3565b816150db57506000613be3565b81600181146150f157600281146150fb57615117565b6001915050613be3565b60ff84111561510c5761510c615018565b50506001821b613be3565b5060208310610133831016604e8410600b841016171561513a575081810a613be3565b615144838361505e565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561517657615176615018565b029392505050565b6000613b9383836150bf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826151ef577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561521f5761521f615018565b01949350505050565b6003811061525f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff8516815260208101849052608081016152946040830185615228565b82606083015295945050505050565b6000602082840312156152b557600080fd5b5051919050565b600080604083850312156152cf57600080fd5b505080516020909101519092909150565b600082198211156152f3576152f3615018565b500190565b60208101613be38284615228565b6000806000806080858703121561531c57600080fd5b845193506020850151925060408501519150606085015164ffffffffff8116811461534657600080fd5b939692955090935050565b600060208083528351808285015260005b8181101561537e57858101830151858201604001528201615362565b81811115615390576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156153d657600080fd5b8151613b9381614c99565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561541957615419615018565b500290565b60008060006060848603121561543357600080fd5b8351925060208401519150604084015190509250925092565b60006fffffffffffffffffffffffffffffffff8381169083168181101561547557615475615018565b03939250505056fea26469706673582212200cf2e507b48625b462ed197608997c2204d999a24a36ca801ca20b43e9f4039364736f6c634300080a0033","opcodes":"PUSH2 0x54B3 PUSH2 0x3A PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x56 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1E6473F9 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0x40E95DE6 EQ PUSH2 0x7D JUMPI DUP1 PUSH4 0x6973F744 EQ PUSH2 0xAF JUMPI DUP1 PUSH4 0xEAC4D703 EQ PUSH2 0xCF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0x76 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CC6 JUMP JUMPDEST PUSH2 0xEF JUMP JUMPDEST STOP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9D PUSH2 0x98 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E02 JUMP JUMPDEST PUSH2 0x773 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0xCA CALLDATASIZE PUSH1 0x4 PUSH2 0x4F02 JUMP JUMPDEST PUSH2 0xCD9 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0xEA CALLDATASIZE PUSH1 0x4 PUSH2 0x4F3E JUMP JUMPDEST PUSH2 0xF6D JUMP JUMPDEST DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x11F DUP3 PUSH2 0x131D JUMP JUMPDEST SWAP1 POP PUSH2 0x12B DUP3 DUP3 PUSH2 0x1536 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP5 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH2 0x14C SWAP1 DUP12 DUP12 PUSH2 0x15C1 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x27C DUP11 DUP11 DUP11 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1C0 ADD PUSH1 0x40 MSTORE DUP1 DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0x60 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0x80 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1E5 JUMPI PUSH2 0x1E5 PUSH2 0x4F84 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0xE0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH2 0x100 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH2 0x120 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH2 0x140 ADD MLOAD PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH2 0x160 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE POP PUSH2 0x1679 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1 DUP9 PUSH1 0x80 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x297 JUMPI PUSH2 0x297 PUSH2 0x4F84 JUMP JUMPDEST EQ ISZERO PUSH2 0x386 JUMPI PUSH1 0x3 DUP8 ADD SLOAD PUSH2 0x200 DUP8 ADD MLOAD PUSH1 0x20 DUP11 ADD MLOAD PUSH1 0x40 DUP1 DUP13 ADD MLOAD PUSH1 0x60 DUP14 ADD MLOAD SWAP2 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND PUSH1 0x64 DUP5 ADD DUP2 SWAP1 MSTORE SWAP5 POP AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x351 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x375 SWAP2 SWAP1 PUSH2 0x4FB3 JUMP JUMPDEST PUSH1 0xA0 DUP10 ADD MSTORE PUSH1 0xC0 DUP9 ADD MSTORE SWAP1 POP PUSH2 0x44F JUMP JUMPDEST PUSH2 0x220 DUP7 ADD MLOAD PUSH1 0x20 DUP10 ADD MLOAD PUSH1 0x40 DUP1 DUP12 ADD MLOAD PUSH1 0x60 DUP13 ADD MLOAD PUSH2 0x140 DUP12 ADD MLOAD SWAP3 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x423 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x447 SWAP2 SWAP1 PUSH2 0x4FEA JUMP JUMPDEST PUSH1 0x20 DUP9 ADD MSTORE SWAP1 POP JUMPDEST DUP1 ISZERO PUSH2 0x484 JUMPI PUSH1 0x3 DUP8 ADD SLOAD PUSH2 0x484 SWAP1 DUP11 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x1 PUSH2 0x259C JUMP JUMPDEST DUP5 ISZERO PUSH2 0x5AF JUMPI PUSH2 0x1C0 DUP7 ADD MLOAD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x4CA SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0x4AB SWAP2 SWAP1 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x4B6 SWAP1 PUSH1 0xA PUSH2 0x517E JUMP JUMPDEST DUP11 PUSH1 0x60 ADD MLOAD PUSH2 0x4C5 SWAP2 SWAP1 PUSH2 0x51B9 JUMP JUMPDEST PUSH2 0x2617 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP16 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x514 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x51F4 JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xAEF84D3B40895FD58C561F3998000F0583ABB992A52FBDC99ACE8E8DE4D676A5 DUP3 PUSH1 0x40 MLOAD PUSH2 0x5A5 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMPDEST PUSH2 0x5DA DUP7 DUP10 PUSH1 0x0 ADD MLOAD PUSH1 0x0 DUP12 PUSH1 0xC0 ADD MLOAD PUSH2 0x5CA JUMPI PUSH1 0x0 PUSH2 0x5D0 JUMP JUMPDEST DUP12 PUSH1 0x60 ADD MLOAD JUMPDEST DUP12 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x26A3 JUMP JUMPDEST DUP8 PUSH1 0xC0 ADD MLOAD ISZERO PUSH2 0x67E JUMPI PUSH2 0x1E0 DUP7 ADD MLOAD PUSH1 0x20 DUP10 ADD MLOAD PUSH1 0x60 DUP11 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x4EFECAA500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x4EFECAA5 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x665 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x679 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST DUP8 PUSH1 0xA0 ADD MLOAD PUSH2 0xFFFF AND DUP9 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xB3D084820FB1A9DECFFB176436BD02558D15FAC9B0DDFED8C465BC7359D7DCE0 DUP12 PUSH1 0x20 ADD MLOAD DUP13 PUSH1 0x60 ADD MLOAD DUP14 PUSH1 0x80 ADD MLOAD PUSH1 0x1 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x700 JUMPI PUSH2 0x700 PUSH2 0x4F84 JUMP JUMPDEST DUP16 PUSH1 0x80 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x716 JUMPI PUSH2 0x716 PUSH2 0x4F84 JUMP JUMPDEST EQ PUSH2 0x74B JUMPI PUSH1 0x2 DUP15 ADD SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x74D JUMP JUMPDEST DUP9 JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x75D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5263 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 PUSH2 0x7A3 DUP3 PUSH2 0x131D JUMP JUMPDEST SWAP1 POP PUSH2 0x7AF DUP3 DUP3 PUSH2 0x1536 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x7C0 DUP7 PUSH1 0x60 ADD MLOAD DUP5 PUSH2 0x29E4 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x7DE DUP4 DUP8 PUSH1 0x20 ADD MLOAD DUP9 PUSH1 0x40 ADD MLOAD DUP10 PUSH1 0x60 ADD MLOAD DUP7 DUP7 PUSH2 0x2B21 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP8 PUSH1 0x40 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x7F8 JUMPI PUSH2 0x7F8 PUSH2 0x4F84 JUMP JUMPDEST EQ PUSH2 0x803 JUMPI DUP2 PUSH2 0x805 JUMP JUMPDEST DUP3 JUMPDEST SWAP1 POP DUP7 PUSH1 0x80 ADD MLOAD DUP1 ISZERO PUSH2 0x83B JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 PUSH1 0x20 ADD MLOAD EQ JUMPDEST ISZERO PUSH2 0x8DB JUMPI PUSH2 0x1E0 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8B1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8D5 SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST PUSH1 0x20 DUP9 ADD MSTORE JUMPDEST DUP1 DUP8 PUSH1 0x20 ADD MLOAD LT ISZERO PUSH2 0x8EE JUMPI POP PUSH1 0x20 DUP7 ADD MLOAD JUMPDEST PUSH1 0x1 DUP8 PUSH1 0x40 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x906 JUMPI PUSH2 0x906 PUSH2 0x4F84 JUMP JUMPDEST EQ ISZERO PUSH2 0x9BE JUMPI PUSH2 0x200 DUP5 ADD MLOAD PUSH1 0x60 DUP9 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x9DC29FAC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP5 SWAP1 MSTORE SWAP2 AND SWAP1 PUSH4 0x9DC29FAC SWAP1 PUSH1 0x44 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x98B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9AF SWAP2 SWAP1 PUSH2 0x52BC JUMP JUMPDEST PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0xA76 JUMP JUMPDEST PUSH2 0x220 DUP5 ADD MLOAD PUSH1 0x60 DUP9 ADD MLOAD PUSH2 0x140 DUP7 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xF5298ACA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND SWAP1 PUSH4 0xF5298ACA SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA4C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA70 SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE JUMPDEST PUSH2 0xA9C DUP5 DUP9 PUSH1 0x0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD PUSH2 0xA8E JUMPI DUP4 PUSH2 0xA91 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP9 SWAP3 SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x26A3 JUMP JUMPDEST DUP1 PUSH2 0xAA7 DUP4 DUP6 PUSH2 0x52E0 JUMP JUMPDEST PUSH2 0xAB1 SWAP2 SWAP1 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0xAE4 JUMPI PUSH1 0x3 DUP6 ADD SLOAD PUSH2 0xAE4 SWAP1 DUP10 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 PUSH2 0x259C JUMP JUMPDEST PUSH2 0xAF1 DUP11 DUP11 DUP11 DUP8 DUP6 PUSH2 0x2DB7 JUMP JUMPDEST DUP7 PUSH1 0x80 ADD MLOAD ISZERO PUSH2 0xBA2 JUMPI PUSH2 0x1E0 DUP5 ADD MLOAD PUSH2 0x100 DUP6 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xD7020D0A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x24 DUP4 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP4 ADD DUP5 SWAP1 MSTORE PUSH1 0x64 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 PUSH4 0xD7020D0A SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB99 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0xC69 JUMP JUMPDEST PUSH2 0x1E0 DUP5 ADD MLOAD DUP8 MLOAD PUSH2 0xBCF SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 CALLER SWAP1 DUP5 PUSH2 0x2FB9 JUMP JUMPDEST PUSH2 0x1E0 DUP5 ADD MLOAD PUSH1 0x60 DUP9 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6FD9767600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE SWAP2 AND SWAP1 PUSH4 0x6FD97676 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC64 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x60 DUP8 ADD MLOAD DUP8 MLOAD PUSH1 0x80 DUP10 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE SWAP2 ISZERO ISZERO PUSH1 0x20 DUP4 ADD MSTORE CALLER SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP4 AND SWAP2 PUSH32 0xA534C8DBE71F871F9F3530E97A74601FEA17B426CAE02E1C5AEE42C96C784051 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCE4 DUP5 PUSH2 0x131D JUMP JUMPDEST SWAP1 POP PUSH2 0xCF0 DUP5 DUP3 PUSH2 0x1536 JUMP JUMPDEST PUSH2 0xCFB DUP5 DUP3 DUP6 PUSH2 0x307A JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD71 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD95 SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x9DC29FAC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 DUP4 AND SWAP1 PUSH4 0x9DC29FAC SWAP1 PUSH1 0x44 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE0D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE31 SWAP2 SWAP1 PUSH2 0x52BC JUMP JUMPDEST POP POP PUSH1 0x3 DUP7 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP5 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP1 DUP4 AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xECE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEF2 SWAP2 SWAP1 PUSH2 0x4FB3 JUMP JUMPDEST PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xC0 DUP6 ADD MSTORE POP PUSH2 0xF0B DUP7 DUP5 DUP8 PUSH1 0x0 DUP1 PUSH2 0x26A3 JUMP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x9F439AE0C81E41A04D3FDFE07AED54E6A179FB0DB15BE7702EB66FA8EF6F5300 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF78 DUP6 PUSH2 0x131D JUMP JUMPDEST SWAP1 POP PUSH2 0xF84 DUP6 DUP3 PUSH2 0x1536 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF91 CALLER DUP5 PUSH2 0x29E4 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xFA3 DUP8 DUP5 DUP9 DUP6 DUP6 DUP10 PUSH2 0x3482 JUMP JUMPDEST PUSH1 0x1 DUP5 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xFB7 JUMPI PUSH2 0xFB7 PUSH2 0x4F84 JUMP JUMPDEST EQ ISZERO PUSH2 0x1121 JUMPI PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x9DC29FAC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x9DC29FAC SWAP1 PUSH1 0x44 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1036 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x105A SWAP2 SWAP1 PUSH2 0x52BC JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x220 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1116 SWAP2 SWAP1 PUSH2 0x4FEA JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE POP PUSH2 0x12A1 JUMP JUMPDEST PUSH2 0x220 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xF5298ACA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xF5298ACA SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x11A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11CD SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x3 DUP9 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1271 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1295 SWAP2 SWAP1 PUSH2 0x4FB3 JUMP JUMPDEST PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xC0 DUP6 ADD MSTORE POP JUMPDEST PUSH2 0x12AF DUP8 DUP5 DUP8 PUSH1 0x0 DUP1 PUSH2 0x26A3 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x7962B394D85A534033BA2EFCF43CD36DE57B7EBEB3DE0CA4428965D9B3DDC481 DUP7 PUSH1 0x40 MLOAD PUSH2 0x130C SWAP2 SWAP1 PUSH2 0x52F8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1325 PUSH2 0x4B51 JUMP JUMPDEST PUSH2 0x132D PUSH2 0x4B51 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE DUP5 SLOAD DUP2 MSTORE PUSH2 0x1C0 DUP4 ADD DUP2 SWAP1 MSTORE MLOAD SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x1A0 DUP3 ADD MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH2 0x100 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x2 DUP6 ADD SLOAD DUP1 DUP3 AND PUSH2 0x140 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP6 ADD MSTORE PUSH17 0x100000000000000000000000000000000 SWAP3 DUP4 SWAP1 DIV DUP3 AND PUSH2 0x160 DUP6 ADD MSTORE DUP3 SWAP1 DIV AND PUSH2 0x180 DUP4 ADD MSTORE PUSH1 0x4 DUP1 DUP6 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE PUSH1 0x5 DUP7 ADD SLOAD DUP2 AND PUSH2 0x200 DUP6 ADD MSTORE PUSH1 0x6 DUP7 ADD SLOAD AND PUSH2 0x220 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x3 DUP7 ADD SLOAD SWAP3 SWAP1 SWAP3 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x240 DUP5 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0xB1BF962D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0xB1BF962D SWAP3 DUP3 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x145A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x147E SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP DUP2 PUSH1 0x0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x79774338 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1503 SWAP2 SWAP1 PUSH2 0x5306 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH2 0x260 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP5 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD TIMESTAMP PUSH5 0xFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP3 DIV AND EQ ISZERO PUSH2 0x1565 JUMPI POP POP JUMP JUMPDEST PUSH2 0x156F DUP3 DUP3 PUSH2 0x38B2 JUMP JUMPDEST PUSH2 0x1579 DUP3 DUP3 PUSH2 0x39D3 JUMP JUMPDEST POP PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x15CF DUP7 PUSH2 0x3B53 JUMP JUMPDEST ISZERO PUSH2 0x1666 JUMPI PUSH1 0x0 PUSH2 0x1600 DUP8 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA PUSH2 0x3B9A JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 DUP5 MSTORE DUP11 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP3 MLOAD SWAP4 DUP5 ADD SWAP1 SWAP3 MSTORE SWAP1 SLOAD SWAP2 DUP3 SWAP1 MSTORE SWAP3 SWAP4 POP PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x1662 JUMPI PUSH1 0x1 SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x1670 SWAP1 POP JUMP JUMPDEST POP POP POP JUMPDEST POP PUSH1 0x0 SWAP2 POP DUP2 SWAP1 POP DUP1 JUMPDEST SWAP4 POP SWAP4 POP SWAP4 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3236000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH2 0x16D9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH2 0x17AE PUSH1 0x40 MLOAD DUP1 PUSH2 0x280 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH2 0x1C0 SWAP1 DUP2 ADD MLOAD MLOAD PUSH8 0x1000000000000000 DUP2 AND ISZERO ISZERO PUSH2 0x200 DUP5 ADD MSTORE PUSH8 0x800000000000000 DUP2 AND ISZERO ISZERO PUSH2 0x240 DUP5 ADD MSTORE PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO PUSH2 0x220 DUP5 ADD MSTORE PUSH8 0x200000000000000 DUP2 AND ISZERO ISZERO PUSH2 0x1E0 DUP5 ADD MSTORE PUSH8 0x100000000000000 AND ISZERO ISZERO SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH2 0x1868 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP DUP1 PUSH2 0x200 ADD MLOAD ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x18C4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP DUP1 PUSH2 0x1E0 ADD MLOAD ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3238000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1920 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP DUP1 PUSH2 0x220 ADD MLOAD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3330000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x197B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH2 0x140 DUP3 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO DUP1 PUSH2 0x1A13 JUMPI POP DUP2 PUSH2 0x140 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x49AA2E81 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19EF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A13 SWAP2 SWAP1 PUSH2 0x53C4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3539000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1A67 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x2 DUP3 PUSH1 0xA0 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1A80 JUMPI PUSH2 0x1A80 PUSH2 0x4F84 JUMP JUMPDEST EQ DUP1 PUSH2 0x1AA1 JUMPI POP PUSH1 0x1 DUP3 PUSH1 0xA0 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1A9F JUMPI PUSH2 0x1A9F PUSH2 0x4F84 JUMP JUMPDEST EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3333000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1AF5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP DUP2 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0x100 DUP3 ADD MSTORE DUP2 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH1 0x50 SHR PUSH5 0xFFFFFFFFF AND PUSH2 0x120 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH1 0xA EXP PUSH2 0x160 DUP4 ADD MSTORE ISZERO PUSH2 0x1BDE JUMPI DUP2 MLOAD PUSH2 0x140 DUP2 ADD MLOAD SWAP1 MLOAD PUSH2 0x1B4B SWAP2 PUSH2 0x3BE9 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP1 DUP5 ADD MLOAD DUP5 MLOAD SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 PUSH2 0x1B69 SWAP2 PUSH2 0x52E0 JUMP JUMPDEST PUSH2 0x1B73 SWAP2 SWAP1 PUSH2 0x52E0 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x160 DUP3 ADD MLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3530000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP3 SWAP2 MUL LT ISZERO PUSH2 0x1BDC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP JUMPDEST DUP2 PUSH2 0x160 ADD MLOAD ISZERO PUSH2 0x1D3B JUMPI DUP2 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x2000000000000000 AND ISZERO ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3630000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1C51 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP DUP2 PUSH2 0x1A0 ADD MLOAD PUSH2 0x1C87 PUSH1 0x2 DUP4 PUSH2 0x100 ADD MLOAD PUSH2 0x1C6D SWAP2 SWAP1 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x1C78 SWAP1 PUSH1 0xA PUSH2 0x517E JUMP JUMPDEST DUP5 PUSH1 0x80 ADD MLOAD PUSH2 0x4C5 SWAP2 SWAP1 PUSH2 0x51B9 JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH2 0x1CD1 SWAP2 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x51F4 JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3533000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1D39 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1DF9 JUMPI PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH1 0xFF SWAP2 DUP3 AND SWAP2 PUSH1 0xA8 SWAP2 SWAP1 SWAP2 SHR AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3538000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1DB9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH2 0x120 DUP3 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH7 0x1000000000000 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x180 DUP3 ADD MSTORE JUMPDEST PUSH2 0x1E70 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP8 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0xE0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH2 0x120 ADD MLOAD PUSH1 0xFF AND DUP2 MSTORE POP PUSH2 0x3C40 JUMP JUMPDEST POP PUSH1 0xA0 DUP7 ADD MSTORE POP DUP4 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3334000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH2 0x1ED6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP DUP1 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3537000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH2 0x1F2B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 DUP2 PUSH1 0xA0 ADD MLOAD GT PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3335000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1F8F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP DUP2 PUSH1 0x80 ADD MLOAD DUP3 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB3596F07 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH2 0x180 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1FFA JUMPI DUP5 PUSH1 0x40 ADD MLOAD PUSH2 0x2001 JUMP JUMPDEST DUP4 PUSH2 0x180 ADD MLOAD JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x206A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x208E SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST PUSH2 0x2098 SWAP2 SWAP1 PUSH2 0x53E1 JUMP JUMPDEST PUSH2 0x140 DUP3 ADD DUP2 DUP2 MSTORE PUSH2 0x160 DUP4 ADD MLOAD SWAP2 DUP3 SWAP1 DUP2 PUSH2 0x20B6 JUMPI PUSH2 0x20B6 PUSH2 0x518A JUMP JUMPDEST DIV SWAP1 MSTORE POP DUP1 MLOAD PUSH2 0x140 DUP3 ADD MLOAD PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x20DB SWAP3 SWAP2 PUSH2 0x20D5 SWAP2 PUSH2 0x52E0 JUMP JUMPDEST SWAP1 PUSH2 0x41AA JUMP JUMPDEST PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP5 ADD MLOAD DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH32 0x3336000000000000000000000000000000000000000000000000000000000000 SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP2 GT ISZERO PUSH2 0x213D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x1 DUP3 PUSH1 0xA0 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2156 JUMPI PUSH2 0x2156 PUSH2 0x4F84 JUMP JUMPDEST EQ ISZERO PUSH2 0x2436 JUMPI DUP1 PUSH2 0x240 ADD MLOAD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3331000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x21B6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x40 DUP3 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE SWAP2 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD SWAP1 DUP4 ADD MLOAD PUSH2 0x220E SWAP2 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0x41D5 JUMP JUMPDEST ISZERO DUP1 PUSH2 0x2223 JUMPI POP DUP2 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH2 0xFFFF AND ISZERO JUMPDEST DUP1 PUSH2 0x22CC JUMPI POP DUP2 MLOAD PUSH2 0x1E0 ADD MLOAD PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22A1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x22C5 SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST DUP3 PUSH1 0x80 ADD MLOAD GT JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3337000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2320 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x40 DUP3 DUP2 ADD MLOAD DUP4 MLOAD PUSH2 0x1E0 ADD MLOAD SWAP2 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2399 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x23BD SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0x0 SWAP2 PUSH2 0x23D5 SWAP2 PUSH2 0x423F JUMP JUMPDEST SWAP1 POP DUP1 DUP4 PUSH1 0x80 ADD MLOAD GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3338000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2433 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP POP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD MLOAD PUSH32 0x5555555555555555555555555555555555555555555555555555555555555555 AND ISZERO PUSH2 0x2595 JUMPI PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x2473 SWAP1 DUP7 DUP7 PUSH2 0x4282 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1A0 DUP4 ADD MSTORE ISZERO DUP1 ISZERO PUSH2 0x260 DUP4 ADD MSTORE PUSH2 0x252E JUMPI DUP2 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH2 0x1A0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3839000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2528 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH2 0x2595 JUMP JUMPDEST DUP2 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3839000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH8 0x4000000000000000 AND ISZERO PUSH2 0x2593 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 DUP4 LT PUSH2 0x25F1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x1 DUP3 DUP2 SHL SHL DUP2 ISZERO PUSH2 0x2609 JUMPI DUP4 SLOAD DUP2 OR DUP5 SSTORE PUSH2 0x2611 JUMP JUMPDEST DUP4 SLOAD DUP2 NOT AND DUP5 SSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x269F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x16D0 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x26CE PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0x26E2 SWAP2 PUSH2 0x3BE9 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x7 DUP9 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x8 DUP12 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP9 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP12 ADD MLOAD SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 MLOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP11 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x1A0 DUP10 ADD MLOAD SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x1E0 DUP10 ADD MLOAD DUP2 AND PUSH2 0x100 DUP6 ADD MSTORE SWAP2 MLOAD PUSH32 0xA589870900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0xA5898709 SWAP2 PUSH2 0x2843 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE 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 PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 SWAP2 POP DUP1 DUP3 DUP7 ADD MLOAD AND DUP3 DUP6 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2860 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2884 SWAP2 SWAP1 PUSH2 0x541E JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP1 DUP3 MSTORE PUSH2 0x289A SWAP1 PUSH2 0x2617 JUMP JUMPDEST PUSH1 0x1 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x28DD SWAP1 PUSH2 0x2617 JUMP JUMPDEST PUSH1 0x3 DUP8 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x292E SWAP1 PUSH2 0x2617 JUMP JUMPDEST PUSH1 0x2 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH2 0x100 DUP11 ADD MLOAD PUSH2 0x140 DUP12 ADD MLOAD DUP4 MLOAD SWAP7 DUP8 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0x804C9B842B2748A22BB64B345453A3DE7CA54A6CA45CE00D415894979E22897A SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A5B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2A7F SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST PUSH2 0x220 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2AF2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2B16 SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3236000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP6 PUSH2 0x2B73 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 EQ ISZERO DUP1 PUSH2 0x2BB8 JUMPI POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3430000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2C0C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH2 0x2C61 DUP9 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP POP POP POP SWAP2 POP DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2CBD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x2D11 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP DUP4 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2D32 JUMPI POP PUSH1 0x1 DUP7 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2D30 JUMPI PUSH2 0x2D30 PUSH2 0x4F84 JUMP JUMPDEST EQ JUMPDEST DUP1 PUSH2 0x2D58 JUMPI POP DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2D58 JUMPI POP PUSH1 0x2 DUP7 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2D56 JUMPI PUSH2 0x2D56 PUSH2 0x4F84 JUMP JUMPDEST EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3339000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2DAC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0x2DD6 SWAP1 DUP9 DUP9 PUSH2 0x15C1 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x2FB0 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH2 0x1C0 DUP7 ADD MLOAD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 SWAP1 PUSH2 0x2E53 SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0x2E3E SWAP2 SWAP1 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x2E49 SWAP1 PUSH1 0xA PUSH2 0x517E JUMP JUMPDEST PUSH2 0x4C5 SWAP1 DUP8 PUSH2 0x51B9 JUMP JUMPDEST SWAP1 POP DUP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT PUSH2 0x2F03 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP12 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE MLOAD SWAP2 DUP3 MSTORE PUSH32 0xAEF84D3B40895FD58C561F3998000F0583ABB992A52FBDC99ACE8E8DE4D676A5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x2DAC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F0F DUP3 DUP5 PUSH2 0x544C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP14 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 SWAP1 SWAP6 AND SWAP5 DUP6 OR SWAP1 SSTORE SWAP1 MLOAD DUP4 DUP2 MSTORE SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH32 0xAEF84D3B40895FD58C561F3998000F0583ABB992A52FBDC99ACE8E8DE4D676A5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x3024 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x302E DUP6 PUSH2 0x432E JUMP JUMPDEST PUSH2 0x2595 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x16D0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x30CE DUP5 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP POP POP POP SWAP2 POP DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x312A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x317E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x0 DUP5 PUSH2 0x220 ADD MLOAD 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 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x31D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x31F5 SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST DUP6 PUSH2 0x200 ADD MLOAD 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 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3245 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3269 SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST PUSH2 0x3273 SWAP2 SWAP1 PUSH2 0x52E0 JUMP JUMPDEST PUSH1 0x7 DUP8 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x8 DUP11 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE DUP2 DUP4 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP11 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP2 AND PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x1E0 DUP12 ADD MLOAD DUP2 AND PUSH2 0x100 DUP5 ADD MSTORE SWAP3 MLOAD PUSH32 0xA589870900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP5 SWAP6 POP SWAP4 SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xA5898709 SWAP2 PUSH2 0x33C9 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE 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 PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 SWAP2 POP DUP1 DUP3 DUP7 ADD MLOAD AND DUP3 DUP6 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x33E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x340A SWAP2 SWAP1 PUSH2 0x541E JUMP JUMPDEST POP SWAP1 SWAP2 POP PUSH2 0x341C SWAP1 POP DUP2 PUSH2 0x2328 PUSH2 0x423F JUMP JUMPDEST DUP7 PUSH2 0x160 ADD MLOAD GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3434000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3478 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x34D9 DUP10 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP SWAP5 POP POP SWAP4 POP SWAP4 POP DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3537 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x358B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3238000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP4 ISZERO PUSH2 0x35DF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x1 DUP6 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x35F4 JUMPI PUSH2 0x35F4 PUSH2 0x4F84 JUMP JUMPDEST EQ ISZERO PUSH2 0x3652 JUMPI PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3431000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP8 PUSH2 0x364C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH2 0x38A6 JUMP JUMPDEST PUSH1 0x2 DUP6 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x3666 JUMPI PUSH2 0x3666 PUSH2 0x4F84 JUMP JUMPDEST EQ ISZERO PUSH2 0x385B JUMPI PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3432000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP7 PUSH2 0x36BE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3331000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH2 0x3711 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x3 DUP11 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP10 SLOAD DUP2 MSTORE PUSH2 0x374C SWAP2 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0x41D5 JUMP JUMPDEST ISZERO DUP1 PUSH2 0x3760 JUMPI POP PUSH2 0x1C0 DUP10 ADD MLOAD MLOAD PUSH2 0xFFFF AND ISZERO JUMPDEST DUP1 PUSH2 0x3807 JUMPI POP PUSH2 0x1E0 DUP10 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x37D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x37FB SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST PUSH2 0x3805 DUP8 DUP10 PUSH2 0x52E0 JUMP JUMPDEST GT JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3337000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x364C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3333000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH2 0x16D0 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5351 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD ISZERO PUSH2 0x3942 JUMPI PUSH1 0x0 PUSH2 0x38D3 DUP3 PUSH2 0x160 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x43E0 JUMP JUMPDEST SWAP1 POP PUSH2 0x38EC DUP3 PUSH1 0xE0 ADD MLOAD DUP3 PUSH2 0x3BE9 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x100 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x38FD SWAP1 PUSH2 0x2617 JUMP JUMPDEST PUSH1 0x1 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x39CF JUMPI PUSH1 0x0 PUSH2 0x395F DUP3 PUSH2 0x180 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x4425 JUMP JUMPDEST SWAP1 POP PUSH2 0x3979 DUP3 PUSH2 0x120 ADD MLOAD DUP3 PUSH2 0x3BE9 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x140 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x398A SWAP1 PUSH2 0x2617 JUMP JUMPDEST PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x3A0C PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x1A0 DUP3 ADD MLOAD PUSH2 0x3A1B JUMPI POP POP POP JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x3A2C SWAP2 PUSH2 0x3BE9 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x140 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x3A42 SWAP2 PUSH2 0x3BE9 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x260 DUP4 ADD MLOAD PUSH2 0x240 DUP5 ADD MLOAD PUSH2 0x3A6A SWAP3 SWAP2 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x442E JUMP JUMPDEST PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x3A7F SWAP2 PUSH2 0x3BE9 JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x3A9B SWAP2 SWAP1 PUSH2 0x52E0 JUMP JUMPDEST PUSH2 0x3AA5 SWAP2 SWAP1 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x3AAF SWAP2 SWAP1 PUSH2 0x5047 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP4 ADD MLOAD PUSH2 0x3AC6 SWAP2 SWAP1 PUSH2 0x423F JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE ISZERO PUSH2 0x3B4E JUMPI PUSH2 0x3AF1 PUSH2 0x4C5 DUP4 PUSH2 0x100 ADD MLOAD DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0x4575 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x8 DUP5 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x3B17 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x51F4 JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3B93 JUMPI POP PUSH2 0x3B8F PUSH1 0x1 DUP3 PUSH2 0x5047 JUMP JUMPDEST DUP2 AND ISZERO JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 DUP3 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD NOT DUP2 AND DUP3 JUMPDEST PUSH1 0x2 SWAP2 SWAP1 SWAP2 SHR SWAP1 DUP2 ISZERO PUSH2 0x3BDE JUMPI PUSH1 0x1 ADD PUSH2 0x3BC9 JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x3C1E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3C56 DUP8 PUSH1 0x0 ADD MLOAD MLOAD ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x3C92 JUMPI POP PUSH1 0x0 SWAP5 POP DUP5 SWAP4 POP DUP4 SWAP3 POP DUP3 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 POP DUP2 PUSH2 0x419D JUMP JUMPDEST PUSH2 0x3D41 PUSH1 0x40 MLOAD DUP1 PUSH2 0x260 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND ISZERO PUSH2 0x3D86 JUMPI PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x3D73 SWAP2 SWAP1 PUSH2 0x45B4 JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MSTORE PUSH2 0x1C0 DUP4 ADD MSTORE PUSH2 0x1A0 DUP3 ADD MSTORE JUMPDEST DUP8 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0xC0 ADD MLOAD LT ISZERO PUSH2 0x40A5 JUMPI PUSH1 0xC0 DUP2 ADD MLOAD DUP9 MLOAD PUSH2 0x3DA6 SWAP2 PUSH2 0x4693 JUMP JUMPDEST PUSH2 0x3DBA JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x3D86 JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP12 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x200 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x3E00 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x3D86 JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP13 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP4 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP3 DUP4 SWAP1 MSTORE PUSH1 0xFF PUSH1 0xA8 DUP5 SWAP1 SHR DUP2 AND PUSH2 0x1E0 DUP7 ADD MSTORE PUSH1 0x30 DUP5 SWAP1 SHR AND PUSH1 0x60 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0xFFFF PUSH1 0x10 DUP6 SWAP1 SHR DUP2 AND PUSH1 0xA0 DUP8 ADD MSTORE SWAP1 SWAP4 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA SWAP3 SWAP1 SWAP3 EXP SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3E96 JUMPI POP DUP2 PUSH2 0x1E0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD PUSH1 0xFF AND EQ JUMPDEST PUSH2 0x3F3A JUMPI PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3F11 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3F35 SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST PUSH2 0x3F41 JUMP JUMPDEST DUP2 PUSH2 0x180 ADD MLOAD JUMPDEST DUP3 MSTORE PUSH1 0xA0 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3F61 JUMPI POP PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0x3F61 SWAP2 PUSH2 0x41D5 JUMP JUMPDEST ISZERO PUSH2 0x4051 JUMPI PUSH2 0x3F7E DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x46FE JUMP JUMPDEST PUSH1 0x40 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP4 ADD DUP1 MLOAD PUSH2 0x3F97 SWAP1 DUP4 SWAP1 PUSH2 0x52E0 JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x1E0 DUP4 ADD MLOAD PUSH2 0x3FB2 SWAP2 PUSH1 0xFF AND SWAP1 PUSH2 0x47DD JUMP JUMPDEST ISZERO ISZERO PUSH2 0x240 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD ISZERO PUSH2 0x4008 JUMPI DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0x3FD8 JUMPI DUP2 PUSH1 0x80 ADD MLOAD PUSH2 0x3FDF JUMP JUMPDEST DUP2 PUSH2 0x1A0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x3FEE SWAP2 SWAP1 PUSH2 0x53E1 JUMP JUMPDEST DUP3 PUSH2 0x140 ADD DUP2 DUP2 MLOAD PUSH2 0x4000 SWAP2 SWAP1 PUSH2 0x52E0 JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x4011 JUMP JUMPDEST PUSH1 0x1 PUSH2 0x220 DUP4 ADD MSTORE JUMPDEST DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0x4025 JUMPI DUP2 PUSH1 0xA0 ADD MLOAD PUSH2 0x402C JUMP JUMPDEST DUP2 PUSH2 0x1C0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x403B SWAP2 SWAP1 PUSH2 0x53E1 JUMP JUMPDEST DUP3 PUSH2 0x160 ADD DUP2 DUP2 MLOAD PUSH2 0x404D SWAP2 SWAP1 PUSH2 0x52E0 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0x4061 SWAP2 PUSH2 0x47EE JUMP JUMPDEST ISZERO PUSH2 0x4094 JUMPI PUSH2 0x407E DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x4856 JUMP JUMPDEST DUP3 PUSH2 0x120 ADD DUP2 DUP2 MLOAD PUSH2 0x4090 SWAP2 SWAP1 PUSH2 0x52E0 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST POP PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x3D86 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x40B6 JUMPI PUSH1 0x0 PUSH2 0x40D1 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x140 ADD MLOAD DUP2 PUSH2 0x40CF JUMPI PUSH2 0x40CF PUSH2 0x518A JUMP JUMPDEST DIV JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x40E8 JUMPI PUSH1 0x0 PUSH2 0x4103 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x160 ADD MLOAD DUP2 PUSH2 0x4101 JUMPI PUSH2 0x4101 PUSH2 0x518A JUMP JUMPDEST DIV JUMPDEST PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD ISZERO PUSH2 0x4145 JUMPI PUSH2 0x4140 DUP2 PUSH2 0x120 ADD MLOAD PUSH2 0x413A DUP4 PUSH2 0x160 ADD MLOAD DUP5 PUSH2 0x100 ADD MLOAD PUSH2 0x423F SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x49D6 JUMP JUMPDEST PUSH2 0x4167 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH2 0x160 DUP6 ADD MLOAD PUSH2 0x220 SWAP1 SWAP6 ADD MLOAD SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMPDEST SWAP5 SWAP10 SWAP4 SWAP9 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH2 0x2710 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x41C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x422D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL DUP3 ADD SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x4274 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x428E DUP6 PUSH2 0x4A0D JUMP JUMPDEST ISZERO PUSH2 0x431F JUMPI PUSH1 0x0 PUSH2 0x42BF DUP7 PUSH32 0x5555555555555555555555555555555555555555555555555555555555555555 PUSH2 0x3B9A JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP7 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 DUP5 MSTORE DUP10 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 PUSH8 0x4000000000000000 AND ISZERO PUSH2 0x431C JUMPI PUSH1 0x1 SWAP4 POP SWAP2 POP PUSH2 0x4326 SWAP1 POP JUMP JUMPDEST POP POP JUMPDEST POP PUSH1 0x0 SWAP1 POP DUP1 JUMPDEST SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4354 JUMP JUMPDEST PUSH3 0x461BCD PUSH1 0xE5 SHL PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x4393 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x43CD JUMPI PUSH2 0x438E PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x4335 JUMP JUMPDEST PUSH2 0x43DA JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x43C4 JUMPI PUSH2 0x43C4 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x4335 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x43DA JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x43F4 PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x43FE SWAP1 DUP6 PUSH2 0x53E1 JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x441D DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x52E0 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3B93 DUP4 DUP4 TIMESTAMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4442 PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x5047 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x445E JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x3B93 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x4494 JUMPI PUSH1 0x0 PUSH2 0x4499 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x44AD DUP11 DUP1 PUSH2 0x3BE9 JUMP JUMPDEST DUP2 PUSH2 0x44BA JUMPI PUSH2 0x44BA PUSH2 0x518A JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x44CC DUP4 DUP12 PUSH2 0x3BE9 JUMP JUMPDEST DUP2 PUSH2 0x44D9 JUMPI PUSH2 0x44D9 PUSH2 0x518A JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x44E9 DUP7 DUP9 PUSH2 0x53E1 JUMP JUMPDEST PUSH2 0x44F3 SWAP2 SWAP1 PUSH2 0x53E1 JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x4507 DUP9 DUP11 PUSH2 0x53E1 JUMP JUMPDEST PUSH2 0x4511 SWAP2 SWAP1 PUSH2 0x53E1 JUMP JUMPDEST PUSH2 0x451B SWAP2 SWAP1 PUSH2 0x53E1 JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x4532 DUP11 DUP16 PUSH2 0x53E1 JUMP JUMPDEST PUSH2 0x453C SWAP2 SWAP1 PUSH2 0x51B9 JUMP JUMPDEST PUSH2 0x4552 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x52E0 JUMP JUMPDEST PUSH2 0x455C SWAP2 SWAP1 PUSH2 0x52E0 JUMP JUMPDEST PUSH2 0x4566 SWAP2 SWAP1 PUSH2 0x52E0 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x4599 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH7 0x1000000000000 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x4678 JUMPI PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4651 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4675 SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP5 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP8 PUSH3 0x10000 SWAP1 SWAP3 DIV AND SWAP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x46EB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 SHL SHR PUSH1 0x3 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x470A DUP6 PUSH2 0x4A49 JUMP JUMPDEST PUSH1 0x4 DUP7 DUP2 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 DUP8 SWAP3 PUSH2 0x47B6 SWAP3 DUP7 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x478C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x47B0 SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST SWAP1 PUSH2 0x3BE9 JUMP JUMPDEST PUSH2 0x47C0 SWAP2 SWAP1 PUSH2 0x53E1 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 PUSH2 0x47D1 JUMPI PUSH2 0x47D1 PUSH2 0x518A JUMP JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3B93 JUMPI POP POP EQ SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x4846 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x6 DUP4 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x48CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x48F0 SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x490E JUMPI PUSH2 0x490B PUSH2 0x4904 DUP7 PUSH2 0x4ACD JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x3BE9 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x5 DUP6 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4980 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x49A4 SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST PUSH2 0x49AE SWAP1 DUP3 PUSH2 0x52E0 JUMP JUMPDEST SWAP1 POP PUSH2 0x49BA DUP2 DUP6 PUSH2 0x53E1 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 PUSH2 0x49CB JUMPI PUSH2 0x49CB PUSH2 0x518A JUMP JUMPDEST DIV SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH8 0xDE0B6B3A7640000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x49F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH32 0x5555555555555555555555555555555555555555555555555555555555555555 AND DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3B93 JUMPI POP PUSH2 0x3B8F PUSH1 0x1 DUP3 PUSH2 0x5047 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x4A8F JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x3B93 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x47B0 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x43E0 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x4B13 JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x3B93 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x47B0 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x4425 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x280 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x4BD5 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x180 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4C49 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4C73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x3 DUP2 LT PUSH2 0x4C73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x4C73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x4CA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x4C73 DUP2 PUSH2 0x4C99 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x4C73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP8 SUB PUSH2 0x200 DUP2 SLT ISZERO PUSH2 0x4CE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH2 0x180 DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP4 ADD SLT ISZERO PUSH2 0x4D2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4D33 PUSH2 0x4BFE JUMP JUMPDEST SWAP2 POP PUSH2 0x4D41 PUSH1 0x80 DUP10 ADD PUSH2 0x4C4F JUMP JUMPDEST DUP3 MSTORE PUSH2 0x4D4F PUSH1 0xA0 DUP10 ADD PUSH2 0x4C4F JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x4D60 PUSH1 0xC0 DUP10 ADD PUSH2 0x4C4F JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xE0 DUP9 ADD CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x100 PUSH2 0x4D7D DUP2 DUP11 ADD PUSH2 0x4C78 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x120 PUSH2 0x4D90 DUP2 DUP12 ADD PUSH2 0x4C87 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x140 PUSH2 0x4DA3 DUP2 DUP13 ADD PUSH2 0x4CAA JUMP JUMPDEST PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x160 DUP1 DUP13 ADD CALLDATALOAD PUSH1 0xE0 DUP8 ADD MSTORE DUP5 DUP13 ADD CALLDATALOAD DUP5 DUP8 ADD MSTORE PUSH2 0x4DC9 PUSH2 0x1A0 DUP14 ADD PUSH2 0x4C4F JUMP JUMPDEST DUP4 DUP8 ADD MSTORE PUSH2 0x4DDA PUSH2 0x1C0 DUP14 ADD PUSH2 0x4CB5 JUMP JUMPDEST DUP3 DUP8 ADD MSTORE PUSH2 0x4DEB PUSH2 0x1E0 DUP14 ADD PUSH2 0x4C4F JUMP JUMPDEST DUP2 DUP8 ADD MSTORE POP POP POP POP POP DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 DUP7 SUB PUSH2 0x100 DUP2 SLT ISZERO PUSH2 0x4E1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0xA0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 DUP3 ADD SLT ISZERO PUSH2 0x4E5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x4EA7 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE PUSH2 0x4EB6 PUSH1 0x60 DUP8 ADD PUSH2 0x4C4F JUMP JUMPDEST DUP2 MSTORE PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x4ECE PUSH1 0xA0 DUP8 ADD PUSH2 0x4C78 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x4EDF PUSH1 0xC0 DUP8 ADD PUSH2 0x4C4F JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xE0 DUP7 ADD CALLDATALOAD PUSH2 0x4EF2 DUP2 PUSH2 0x4C99 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4F17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH2 0x4F27 PUSH1 0x20 DUP6 ADD PUSH2 0x4C4F JUMP JUMPDEST SWAP2 POP PUSH2 0x4F35 PUSH1 0x40 DUP6 ADD PUSH2 0x4C4F JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4F54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH2 0x4F6B PUSH1 0x40 DUP7 ADD PUSH2 0x4C4F JUMP JUMPDEST SWAP2 POP PUSH2 0x4F79 PUSH1 0x60 DUP7 ADD PUSH2 0x4C78 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4FC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH2 0x4FD3 DUP2 PUSH2 0x4C99 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x40 SWAP1 SWAP6 ADD MLOAD SWAP1 SWAP7 SWAP5 SWAP6 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4FFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x5008 DUP2 PUSH2 0x4C99 JUMP JUMPDEST PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD MLOAD SWAP3 SWAP5 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x5059 JUMPI PUSH2 0x5059 PUSH2 0x5018 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x50B7 JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x509D JUMPI PUSH2 0x509D PUSH2 0x5018 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x50AA JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x5063 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x50CE JUMPI POP PUSH1 0x1 PUSH2 0x3BE3 JUMP JUMPDEST DUP2 PUSH2 0x50DB JUMPI POP PUSH1 0x0 PUSH2 0x3BE3 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x50F1 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x50FB JUMPI PUSH2 0x5117 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x3BE3 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x510C JUMPI PUSH2 0x510C PUSH2 0x5018 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x3BE3 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x513A JUMPI POP DUP2 DUP2 EXP PUSH2 0x3BE3 JUMP JUMPDEST PUSH2 0x5144 DUP4 DUP4 PUSH2 0x505E JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x5176 JUMPI PUSH2 0x5176 PUSH2 0x5018 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3B93 DUP4 DUP4 PUSH2 0x50BF JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x51EF JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x521F JUMPI PUSH2 0x521F PUSH2 0x5018 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x525F JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD PUSH2 0x5294 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x5228 JUMP JUMPDEST DUP3 PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x52CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x52F3 JUMPI PUSH2 0x52F3 PUSH2 0x5018 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x3BE3 DUP3 DUP5 PUSH2 0x5228 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x531C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x5346 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x537E JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x5362 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x5390 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x53D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x3B93 DUP2 PUSH2 0x4C99 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x5419 JUMPI PUSH2 0x5419 PUSH2 0x5018 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5433 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x5475 JUMPI PUSH2 0x5475 PUSH2 0x5018 JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC CALLCODE 0xE5 SMOD 0xB4 DUP7 0x25 0xB4 PUSH3 0xED1976 ADDMOD SWAP10 PUSH29 0x2204D999A24A36CA801CA20B43E9F4039364736F6C634300080A003300 ","sourceMap":"1076:11976:76:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1076:11976:76;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_accrueToTreasury_18152":{"entryPoint":14803,"id":18152,"parameterSlots":2,"returnSlots":0},"@_getFirstAssetIdByMask_12367":{"entryPoint":15258,"id":12367,"parameterSlots":2,"returnSlots":1},"@_getUserBalanceInBaseCurrency_15854":{"entryPoint":18174,"id":15854,"parameterSlots":4,"returnSlots":1},"@_getUserDebtInBaseCurrency_15811":{"entryPoint":18518,"id":15811,"parameterSlots":4,"returnSlots":1},"@_updateIndexes_18233":{"entryPoint":14514,"id":18233,"parameterSlots":2,"returnSlots":0},"@cache_18376":{"entryPoint":4893,"id":18376,"parameterSlots":1,"returnSlots":1},"@calculateCompoundedInterest_21079":{"entryPoint":17454,"id":21079,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_21097":{"entryPoint":17445,"id":21097,"parameterSlots":2,"returnSlots":1},"@calculateLinearInterest_20956":{"entryPoint":17376,"id":20956,"parameterSlots":2,"returnSlots":1},"@calculateUserAccountData_15713":{"entryPoint":15424,"id":15713,"parameterSlots":4,"returnSlots":6},"@executeBorrow_13039":{"entryPoint":239,"id":13039,"parameterSlots":5,"returnSlots":0},"@executeRebalanceStableBorrowRate_13392":{"entryPoint":3289,"id":13392,"parameterSlots":3,"returnSlots":0},"@executeRepay_13300":{"entryPoint":1907,"id":13300,"parameterSlots":4,"returnSlots":1},"@executeSwapBorrowRateMode_13542":{"entryPoint":3949,"id":13542,"parameterSlots":4,"returnSlots":0},"@getBorrowCap_11387":{"entryPoint":null,"id":11387,"parameterSlots":1,"returnSlots":1},"@getBorrowableInIsolation_11133":{"entryPoint":null,"id":11133,"parameterSlots":1,"returnSlots":1},"@getDebtCeiling_11491":{"entryPoint":null,"id":11491,"parameterSlots":1,"returnSlots":1},"@getDecimals_10933":{"entryPoint":null,"id":10933,"parameterSlots":1,"returnSlots":1},"@getEModeCategory_11647":{"entryPoint":null,"id":11647,"parameterSlots":1,"returnSlots":1},"@getEModeConfiguration_14594":{"entryPoint":17844,"id":14594,"parameterSlots":2,"returnSlots":3},"@getFlags_11757":{"entryPoint":null,"id":11757,"parameterSlots":1,"returnSlots":5},"@getIsolationModeState_12262":{"entryPoint":5569,"id":12262,"parameterSlots":3,"returnSlots":3},"@getLastTransferResult_117":{"entryPoint":17198,"id":117,"parameterSlots":1,"returnSlots":1},"@getLtv_10777":{"entryPoint":null,"id":10777,"parameterSlots":1,"returnSlots":1},"@getNormalizedDebt_17751":{"entryPoint":19149,"id":17751,"parameterSlots":1,"returnSlots":1},"@getNormalizedIncome_17715":{"entryPoint":19017,"id":17715,"parameterSlots":1,"returnSlots":1},"@getParams_11823":{"entryPoint":null,"id":11823,"parameterSlots":1,"returnSlots":6},"@getReserveFactor_11335":{"entryPoint":null,"id":11335,"parameterSlots":1,"returnSlots":1},"@getSiloedBorrowingState_12320":{"entryPoint":17026,"id":12320,"parameterSlots":3,"returnSlots":2},"@getSiloedBorrowing_11183":{"entryPoint":null,"id":11183,"parameterSlots":1,"returnSlots":1},"@getUserCurrentDebt_12679":{"entryPoint":10724,"id":12679,"parameterSlots":2,"returnSlots":2},"@isBorrowingAny_12179":{"entryPoint":null,"id":12179,"parameterSlots":1,"returnSlots":1},"@isBorrowingOne_12162":{"entryPoint":18957,"id":12162,"parameterSlots":1,"returnSlots":1},"@isBorrowing_12045":{"entryPoint":18414,"id":12045,"parameterSlots":2,"returnSlots":1},"@isEmpty_12194":{"entryPoint":null,"id":12194,"parameterSlots":1,"returnSlots":1},"@isInEModeCategory_14614":{"entryPoint":18397,"id":14614,"parameterSlots":2,"returnSlots":1},"@isUsingAsCollateralOne_12114":{"entryPoint":15187,"id":12114,"parameterSlots":1,"returnSlots":1},"@isUsingAsCollateralOrBorrowing_12010":{"entryPoint":18067,"id":12010,"parameterSlots":2,"returnSlots":1},"@isUsingAsCollateral_12083":{"entryPoint":16853,"id":12083,"parameterSlots":2,"returnSlots":1},"@percentDiv_21131":{"entryPoint":16810,"id":21131,"parameterSlots":2,"returnSlots":1},"@percentMul_21119":{"entryPoint":16959,"id":21119,"parameterSlots":2,"returnSlots":1},"@rayDiv_21198":{"entryPoint":17781,"id":21198,"parameterSlots":2,"returnSlots":1},"@rayMul_21186":{"entryPoint":15337,"id":21186,"parameterSlots":2,"returnSlots":1},"@safeTransferFrom_106":{"entryPoint":12217,"id":106,"parameterSlots":4,"returnSlots":0},"@setBorrowing_11924":{"entryPoint":9628,"id":11924,"parameterSlots":3,"returnSlots":0},"@toUint128_1626":{"entryPoint":9751,"id":1626,"parameterSlots":1,"returnSlots":1},"@updateInterestRates_18024":{"entryPoint":9891,"id":18024,"parameterSlots":5,"returnSlots":0},"@updateIsolatedDebtIfIsolated_15977":{"entryPoint":11703,"id":15977,"parameterSlots":5,"returnSlots":0},"@updateState_17793":{"entryPoint":5430,"id":17793,"parameterSlots":2,"returnSlots":0},"@validateBorrow_19883":{"entryPoint":5753,"id":19883,"parameterSlots":4,"returnSlots":0},"@validateRebalanceStableBorrowRate_20189":{"entryPoint":12410,"id":20189,"parameterSlots":3,"returnSlots":0},"@validateRepay_19975":{"entryPoint":11041,"id":19975,"parameterSlots":6,"returnSlots":0},"@validateSwapRateMode_20102":{"entryPoint":13442,"id":20102,"parameterSlots":6,"returnSlots":0},"@wadDiv_21174":{"entryPoint":18902,"id":21174,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":19535,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bool":{"entryPoint":19626,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_enum_InterestRateMode":{"entryPoint":19576,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":21444,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_boolt_uint256_fromMemory":{"entryPoint":20458,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_boolt_uint256t_uint256_fromMemory":{"entryPoint":20403,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$t_struct$_UserConfigurationMap_$21322_storage_ptrt_struct$_ExecuteBorrowParams_$21433_memory_ptr":{"entryPoint":19654,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_struct$_UserConfigurationMap_$21322_storage_ptrt_struct$_ExecuteRepayParams_$21445_memory_ptr":{"entryPoint":19970,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_struct$_ReserveData_$21315_storage_ptrt_addresst_address":{"entryPoint":20226,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_struct$_ReserveData_$21315_storage_ptrt_struct$_UserConfigurationMap_$21322_storage_ptrt_addresst_enum$_InterestRateMode_$21337":{"entryPoint":20286,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":21155,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256_fromMemory":{"entryPoint":21180,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory":{"entryPoint":21534,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory":{"entryPoint":21254,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_uint16":{"entryPoint":19591,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint8":{"entryPoint":19637,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_enum_InterestRateMode":{"entryPoint":21032,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256_t_uint128__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_enum$_InterestRateMode_$21337_t_uint256__to_t_address_t_uint256_t_uint8_t_uint256__fromStack_reversed":{"entryPoint":21091,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_enum$_InterestRateMode_$21337__to_t_uint8__fromStack_reversed":{"entryPoint":21240,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_rational_0_by_1__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":21329,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_bool__to_t_uint256_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"allocate_memory":{"entryPoint":19454,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":20980,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":21216,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":20921,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":20574,"id":null,"parameterSlots":2,"returnSlots":2},"checked_exp_t_uint256_t_uint256":{"entryPoint":20862,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":20671,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":21473,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint128":{"entryPoint":21580,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":20551,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":20504,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":20874,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":20356,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_bool":{"entryPoint":19609,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:17909:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"55:363:201","statements":[{"nodeType":"YulAssignment","src":"65:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"81:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"75:5:201"},"nodeType":"YulFunctionCall","src":"75:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"65:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"93:37:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"115:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"123:6:201","type":"","value":"0x0180"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"111:3:201"},"nodeType":"YulFunctionCall","src":"111:19:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"97:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"213:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"234:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"237:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"227:6:201"},"nodeType":"YulFunctionCall","src":"227:88:201"},"nodeType":"YulExpressionStatement","src":"227:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"335:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"338:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"328:6:201"},"nodeType":"YulFunctionCall","src":"328:15:201"},"nodeType":"YulExpressionStatement","src":"328:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"363:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"366:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"356:6:201"},"nodeType":"YulFunctionCall","src":"356:15:201"},"nodeType":"YulExpressionStatement","src":"356:15:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"148:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"160:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"145:2:201"},"nodeType":"YulFunctionCall","src":"145:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"184:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"196:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"181:2:201"},"nodeType":"YulFunctionCall","src":"181:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"142:2:201"},"nodeType":"YulFunctionCall","src":"142:62:201"},"nodeType":"YulIf","src":"139:242:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"397:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"401:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"390:6:201"},"nodeType":"YulFunctionCall","src":"390:22:201"},"nodeType":"YulExpressionStatement","src":"390:22:201"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"44:6:201","type":""}],"src":"14:404:201"},{"body":{"nodeType":"YulBlock","src":"472:147:201","statements":[{"nodeType":"YulAssignment","src":"482:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"504:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"491:12:201"},"nodeType":"YulFunctionCall","src":"491:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"482:5:201"}]},{"body":{"nodeType":"YulBlock","src":"597:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"606:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"609:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"599:6:201"},"nodeType":"YulFunctionCall","src":"599:12:201"},"nodeType":"YulExpressionStatement","src":"599:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"533:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"544:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"551:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"540:3:201"},"nodeType":"YulFunctionCall","src":"540:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"530:2:201"},"nodeType":"YulFunctionCall","src":"530:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"523:6:201"},"nodeType":"YulFunctionCall","src":"523:73:201"},"nodeType":"YulIf","src":"520:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"451:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"462:5:201","type":""}],"src":"423:196:201"},{"body":{"nodeType":"YulBlock","src":"687:94:201","statements":[{"nodeType":"YulAssignment","src":"697:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"719:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"706:12:201"},"nodeType":"YulFunctionCall","src":"706:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"697:5:201"}]},{"body":{"nodeType":"YulBlock","src":"759:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"768:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"771:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"761:6:201"},"nodeType":"YulFunctionCall","src":"761:12:201"},"nodeType":"YulExpressionStatement","src":"761:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"748:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"755:1:201","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"745:2:201"},"nodeType":"YulFunctionCall","src":"745:12:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"738:6:201"},"nodeType":"YulFunctionCall","src":"738:20:201"},"nodeType":"YulIf","src":"735:40:201"}]},"name":"abi_decode_enum_InterestRateMode","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"666:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"677:5:201","type":""}],"src":"624:157:201"},{"body":{"nodeType":"YulBlock","src":"834:111:201","statements":[{"nodeType":"YulAssignment","src":"844:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"866:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"853:12:201"},"nodeType":"YulFunctionCall","src":"853:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"844:5:201"}]},{"body":{"nodeType":"YulBlock","src":"923:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"932:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"935:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"925:6:201"},"nodeType":"YulFunctionCall","src":"925:12:201"},"nodeType":"YulExpressionStatement","src":"925:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"895:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"906:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"913:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"902:3:201"},"nodeType":"YulFunctionCall","src":"902:18:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"892:2:201"},"nodeType":"YulFunctionCall","src":"892:29:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"885:6:201"},"nodeType":"YulFunctionCall","src":"885:37:201"},"nodeType":"YulIf","src":"882:57:201"}]},"name":"abi_decode_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"813:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"824:5:201","type":""}],"src":"786:159:201"},{"body":{"nodeType":"YulBlock","src":"992:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"1046:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1055:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1058:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1048:6:201"},"nodeType":"YulFunctionCall","src":"1048:12:201"},"nodeType":"YulExpressionStatement","src":"1048:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1015:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1036:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1029:6:201"},"nodeType":"YulFunctionCall","src":"1029:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1022:6:201"},"nodeType":"YulFunctionCall","src":"1022:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1012:2:201"},"nodeType":"YulFunctionCall","src":"1012:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1005:6:201"},"nodeType":"YulFunctionCall","src":"1005:40:201"},"nodeType":"YulIf","src":"1002:60:201"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"981:5:201","type":""}],"src":"950:118:201"},{"body":{"nodeType":"YulBlock","src":"1119:82:201","statements":[{"nodeType":"YulAssignment","src":"1129:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1151:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1138:12:201"},"nodeType":"YulFunctionCall","src":"1138:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1129:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1189:5:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"1167:21:201"},"nodeType":"YulFunctionCall","src":"1167:28:201"},"nodeType":"YulExpressionStatement","src":"1167:28:201"}]},"name":"abi_decode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1098:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1109:5:201","type":""}],"src":"1073:128:201"},{"body":{"nodeType":"YulBlock","src":"1253:109:201","statements":[{"nodeType":"YulAssignment","src":"1263:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1285:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1272:12:201"},"nodeType":"YulFunctionCall","src":"1272:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1263:5:201"}]},{"body":{"nodeType":"YulBlock","src":"1340:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1349:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1352:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1342:6:201"},"nodeType":"YulFunctionCall","src":"1342:12:201"},"nodeType":"YulExpressionStatement","src":"1342:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1314:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1325:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1332:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1321:3:201"},"nodeType":"YulFunctionCall","src":"1321:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1311:2:201"},"nodeType":"YulFunctionCall","src":"1311:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1304:6:201"},"nodeType":"YulFunctionCall","src":"1304:35:201"},"nodeType":"YulIf","src":"1301:55:201"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1232:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1243:5:201","type":""}],"src":"1206:156:201"},{"body":{"nodeType":"YulBlock","src":"1712:1418:201","statements":[{"nodeType":"YulVariableDeclaration","src":"1722:33:201","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1736:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1745:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1732:3:201"},"nodeType":"YulFunctionCall","src":"1732:23:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1726:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1780:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1789:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1792:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1782:6:201"},"nodeType":"YulFunctionCall","src":"1782:12:201"},"nodeType":"YulExpressionStatement","src":"1782:12:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1771:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"1775:3:201","type":"","value":"512"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1767:3:201"},"nodeType":"YulFunctionCall","src":"1767:12:201"},"nodeType":"YulIf","src":"1764:32:201"},{"nodeType":"YulAssignment","src":"1805:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1828:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1815:12:201"},"nodeType":"YulFunctionCall","src":"1815:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1805:6:201"}]},{"nodeType":"YulAssignment","src":"1847:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1874:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1885:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1870:3:201"},"nodeType":"YulFunctionCall","src":"1870:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1857:12:201"},"nodeType":"YulFunctionCall","src":"1857:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1847:6:201"}]},{"nodeType":"YulAssignment","src":"1898:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1925:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1936:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1921:3:201"},"nodeType":"YulFunctionCall","src":"1921:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1908:12:201"},"nodeType":"YulFunctionCall","src":"1908:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1898:6:201"}]},{"nodeType":"YulAssignment","src":"1949:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1976:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1987:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1972:3:201"},"nodeType":"YulFunctionCall","src":"1972:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1959:12:201"},"nodeType":"YulFunctionCall","src":"1959:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1949:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2000:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2010:6:201","type":"","value":"0x0180"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"2004:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2113:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2122:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2125:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2115:6:201"},"nodeType":"YulFunctionCall","src":"2115:12:201"},"nodeType":"YulExpressionStatement","src":"2115:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2036:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"2040:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2032:3:201"},"nodeType":"YulFunctionCall","src":"2032:75:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2109:2:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2028:3:201"},"nodeType":"YulFunctionCall","src":"2028:84:201"},"nodeType":"YulIf","src":"2025:104:201"},{"nodeType":"YulVariableDeclaration","src":"2138:30:201","value":{"arguments":[],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"2151:15:201"},"nodeType":"YulFunctionCall","src":"2151:17:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2142:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2184:5:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2214:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2225:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2210:3:201"},"nodeType":"YulFunctionCall","src":"2210:19:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2191:18:201"},"nodeType":"YulFunctionCall","src":"2191:39:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2177:6:201"},"nodeType":"YulFunctionCall","src":"2177:54:201"},"nodeType":"YulExpressionStatement","src":"2177:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2251:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2258:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2247:3:201"},"nodeType":"YulFunctionCall","src":"2247:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2286:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2297:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2282:3:201"},"nodeType":"YulFunctionCall","src":"2282:19:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2263:18:201"},"nodeType":"YulFunctionCall","src":"2263:39:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2240:6:201"},"nodeType":"YulFunctionCall","src":"2240:63:201"},"nodeType":"YulExpressionStatement","src":"2240:63:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2323:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2330:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2319:3:201"},"nodeType":"YulFunctionCall","src":"2319:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2358:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2369:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2354:3:201"},"nodeType":"YulFunctionCall","src":"2354:19:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2335:18:201"},"nodeType":"YulFunctionCall","src":"2335:39:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2312:6:201"},"nodeType":"YulFunctionCall","src":"2312:63:201"},"nodeType":"YulExpressionStatement","src":"2312:63:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2395:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2402:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2391:3:201"},"nodeType":"YulFunctionCall","src":"2391:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2424:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2435:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2420:3:201"},"nodeType":"YulFunctionCall","src":"2420:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2407:12:201"},"nodeType":"YulFunctionCall","src":"2407:33:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2384:6:201"},"nodeType":"YulFunctionCall","src":"2384:57:201"},"nodeType":"YulExpressionStatement","src":"2384:57:201"},{"nodeType":"YulVariableDeclaration","src":"2450:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2460:3:201","type":"","value":"256"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"2454:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2483:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2490:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2479:3:201"},"nodeType":"YulFunctionCall","src":"2479:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2533:9:201"},{"name":"_3","nodeType":"YulIdentifier","src":"2544:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2529:3:201"},"nodeType":"YulFunctionCall","src":"2529:18:201"}],"functionName":{"name":"abi_decode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"2496:32:201"},"nodeType":"YulFunctionCall","src":"2496:52:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2472:6:201"},"nodeType":"YulFunctionCall","src":"2472:77:201"},"nodeType":"YulExpressionStatement","src":"2472:77:201"},{"nodeType":"YulVariableDeclaration","src":"2558:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2568:3:201","type":"","value":"288"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"2562:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2591:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2598:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2587:3:201"},"nodeType":"YulFunctionCall","src":"2587:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2626:9:201"},{"name":"_4","nodeType":"YulIdentifier","src":"2637:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2622:3:201"},"nodeType":"YulFunctionCall","src":"2622:18:201"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"2604:17:201"},"nodeType":"YulFunctionCall","src":"2604:37:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2580:6:201"},"nodeType":"YulFunctionCall","src":"2580:62:201"},"nodeType":"YulExpressionStatement","src":"2580:62:201"},{"nodeType":"YulVariableDeclaration","src":"2651:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2661:3:201","type":"","value":"320"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"2655:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2684:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2691:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2680:3:201"},"nodeType":"YulFunctionCall","src":"2680:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2717:9:201"},{"name":"_5","nodeType":"YulIdentifier","src":"2728:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2713:3:201"},"nodeType":"YulFunctionCall","src":"2713:18:201"}],"functionName":{"name":"abi_decode_bool","nodeType":"YulIdentifier","src":"2697:15:201"},"nodeType":"YulFunctionCall","src":"2697:35:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2673:6:201"},"nodeType":"YulFunctionCall","src":"2673:60:201"},"nodeType":"YulExpressionStatement","src":"2673:60:201"},{"nodeType":"YulVariableDeclaration","src":"2742:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2752:3:201","type":"","value":"352"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"2746:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2775:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2782:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2771:3:201"},"nodeType":"YulFunctionCall","src":"2771:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2805:9:201"},{"name":"_6","nodeType":"YulIdentifier","src":"2816:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2801:3:201"},"nodeType":"YulFunctionCall","src":"2801:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2788:12:201"},"nodeType":"YulFunctionCall","src":"2788:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2764:6:201"},"nodeType":"YulFunctionCall","src":"2764:57:201"},"nodeType":"YulExpressionStatement","src":"2764:57:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2841:5:201"},{"name":"_3","nodeType":"YulIdentifier","src":"2848:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2837:3:201"},"nodeType":"YulFunctionCall","src":"2837:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2870:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2881:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2866:3:201"},"nodeType":"YulFunctionCall","src":"2866:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2853:12:201"},"nodeType":"YulFunctionCall","src":"2853:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2830:6:201"},"nodeType":"YulFunctionCall","src":"2830:56:201"},"nodeType":"YulExpressionStatement","src":"2830:56:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2906:5:201"},{"name":"_4","nodeType":"YulIdentifier","src":"2913:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2902:3:201"},"nodeType":"YulFunctionCall","src":"2902:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2941:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2952:3:201","type":"","value":"416"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2937:3:201"},"nodeType":"YulFunctionCall","src":"2937:19:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2918:18:201"},"nodeType":"YulFunctionCall","src":"2918:39:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2895:6:201"},"nodeType":"YulFunctionCall","src":"2895:63:201"},"nodeType":"YulExpressionStatement","src":"2895:63:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2978:5:201"},{"name":"_5","nodeType":"YulIdentifier","src":"2985:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2974:3:201"},"nodeType":"YulFunctionCall","src":"2974:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3011:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3022:3:201","type":"","value":"448"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3007:3:201"},"nodeType":"YulFunctionCall","src":"3007:19:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"2990:16:201"},"nodeType":"YulFunctionCall","src":"2990:37:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2967:6:201"},"nodeType":"YulFunctionCall","src":"2967:61:201"},"nodeType":"YulExpressionStatement","src":"2967:61:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3048:5:201"},{"name":"_6","nodeType":"YulIdentifier","src":"3055:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3044:3:201"},"nodeType":"YulFunctionCall","src":"3044:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3083:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3094:3:201","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3079:3:201"},"nodeType":"YulFunctionCall","src":"3079:19:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3060:18:201"},"nodeType":"YulFunctionCall","src":"3060:39:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3037:6:201"},"nodeType":"YulFunctionCall","src":"3037:63:201"},"nodeType":"YulExpressionStatement","src":"3037:63:201"},{"nodeType":"YulAssignment","src":"3109:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3119:5:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3109:6:201"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$t_struct$_UserConfigurationMap_$21322_storage_ptrt_struct$_ExecuteBorrowParams_$21433_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1646:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1657:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1669:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1677:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1685:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1693:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1701:6:201","type":""}],"src":"1367:1763:201"},{"body":{"nodeType":"YulBlock","src":"3410:1155:201","statements":[{"nodeType":"YulVariableDeclaration","src":"3420:33:201","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3434:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3443:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3430:3:201"},"nodeType":"YulFunctionCall","src":"3430:23:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3424:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3478:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3487:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3490:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3480:6:201"},"nodeType":"YulFunctionCall","src":"3480:12:201"},"nodeType":"YulExpressionStatement","src":"3480:12:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3469:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"3473:3:201","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3465:3:201"},"nodeType":"YulFunctionCall","src":"3465:12:201"},"nodeType":"YulIf","src":"3462:32:201"},{"nodeType":"YulAssignment","src":"3503:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3526:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3513:12:201"},"nodeType":"YulFunctionCall","src":"3513:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3503:6:201"}]},{"nodeType":"YulAssignment","src":"3545:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3572:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3583:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3568:3:201"},"nodeType":"YulFunctionCall","src":"3568:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3555:12:201"},"nodeType":"YulFunctionCall","src":"3555:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3545:6:201"}]},{"nodeType":"YulAssignment","src":"3596:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3623:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3634:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3619:3:201"},"nodeType":"YulFunctionCall","src":"3619:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3606:12:201"},"nodeType":"YulFunctionCall","src":"3606:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3596:6:201"}]},{"body":{"nodeType":"YulBlock","src":"3737:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3746:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3749:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3739:6:201"},"nodeType":"YulFunctionCall","src":"3739:12:201"},"nodeType":"YulExpressionStatement","src":"3739:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3658:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"3662:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3654:3:201"},"nodeType":"YulFunctionCall","src":"3654:75:201"},{"kind":"number","nodeType":"YulLiteral","src":"3731:4:201","type":"","value":"0xa0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3650:3:201"},"nodeType":"YulFunctionCall","src":"3650:86:201"},"nodeType":"YulIf","src":"3647:106:201"},{"nodeType":"YulVariableDeclaration","src":"3762:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3782:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3776:5:201"},"nodeType":"YulFunctionCall","src":"3776:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"3766:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3794:35:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3816:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3824:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3812:3:201"},"nodeType":"YulFunctionCall","src":"3812:17:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"3798:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3912:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3933:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3936:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3926:6:201"},"nodeType":"YulFunctionCall","src":"3926:88:201"},"nodeType":"YulExpressionStatement","src":"3926:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4034:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4037:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4027:6:201"},"nodeType":"YulFunctionCall","src":"4027:15:201"},"nodeType":"YulExpressionStatement","src":"4027:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4062:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4065:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4055:6:201"},"nodeType":"YulFunctionCall","src":"4055:15:201"},"nodeType":"YulExpressionStatement","src":"4055:15:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3847:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"3859:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3844:2:201"},"nodeType":"YulFunctionCall","src":"3844:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3883:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"3895:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3880:2:201"},"nodeType":"YulFunctionCall","src":"3880:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"3841:2:201"},"nodeType":"YulFunctionCall","src":"3841:62:201"},"nodeType":"YulIf","src":"3838:242:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4096:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"4100:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4089:6:201"},"nodeType":"YulFunctionCall","src":"4089:22:201"},"nodeType":"YulExpressionStatement","src":"4089:22:201"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4127:6:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4158:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4169:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4154:3:201"},"nodeType":"YulFunctionCall","src":"4154:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"4135:18:201"},"nodeType":"YulFunctionCall","src":"4135:38:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4120:6:201"},"nodeType":"YulFunctionCall","src":"4120:54:201"},"nodeType":"YulExpressionStatement","src":"4120:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4194:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4202:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4190:3:201"},"nodeType":"YulFunctionCall","src":"4190:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4224:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4235:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4220:3:201"},"nodeType":"YulFunctionCall","src":"4220:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4207:12:201"},"nodeType":"YulFunctionCall","src":"4207:33:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4183:6:201"},"nodeType":"YulFunctionCall","src":"4183:58:201"},"nodeType":"YulExpressionStatement","src":"4183:58:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4261:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4269:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4257:3:201"},"nodeType":"YulFunctionCall","src":"4257:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4311:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4322:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4307:3:201"},"nodeType":"YulFunctionCall","src":"4307:20:201"}],"functionName":{"name":"abi_decode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"4274:32:201"},"nodeType":"YulFunctionCall","src":"4274:54:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4250:6:201"},"nodeType":"YulFunctionCall","src":"4250:79:201"},"nodeType":"YulExpressionStatement","src":"4250:79:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4349:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4357:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4345:3:201"},"nodeType":"YulFunctionCall","src":"4345:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4385:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4396:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4381:3:201"},"nodeType":"YulFunctionCall","src":"4381:19:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"4362:18:201"},"nodeType":"YulFunctionCall","src":"4362:39:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4338:6:201"},"nodeType":"YulFunctionCall","src":"4338:64:201"},"nodeType":"YulExpressionStatement","src":"4338:64:201"},{"nodeType":"YulVariableDeclaration","src":"4411:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4441:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4452:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4437:3:201"},"nodeType":"YulFunctionCall","src":"4437:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4424:12:201"},"nodeType":"YulFunctionCall","src":"4424:33:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4415:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4488:5:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"4466:21:201"},"nodeType":"YulFunctionCall","src":"4466:28:201"},"nodeType":"YulExpressionStatement","src":"4466:28:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4514:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4522:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4510:3:201"},"nodeType":"YulFunctionCall","src":"4510:16:201"},{"name":"value","nodeType":"YulIdentifier","src":"4528:5:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4503:6:201"},"nodeType":"YulFunctionCall","src":"4503:31:201"},"nodeType":"YulExpressionStatement","src":"4503:31:201"},{"nodeType":"YulAssignment","src":"4543:16:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"4553:6:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"4543:6:201"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_struct$_UserConfigurationMap_$21322_storage_ptrt_struct$_ExecuteRepayParams_$21445_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3352:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3363:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3375:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3383:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3391:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3399:6:201","type":""}],"src":"3135:1430:201"},{"body":{"nodeType":"YulBlock","src":"4679:76:201","statements":[{"nodeType":"YulAssignment","src":"4689:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4701:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4712:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4697:3:201"},"nodeType":"YulFunctionCall","src":"4697:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4689:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4731:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"4742:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4724:6:201"},"nodeType":"YulFunctionCall","src":"4724:25:201"},"nodeType":"YulExpressionStatement","src":"4724:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4648:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4659:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4670:4:201","type":""}],"src":"4570:185:201"},{"body":{"nodeType":"YulBlock","src":"4895:224:201","statements":[{"body":{"nodeType":"YulBlock","src":"4941:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4950:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4953:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4943:6:201"},"nodeType":"YulFunctionCall","src":"4943:12:201"},"nodeType":"YulExpressionStatement","src":"4943:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4916:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4925:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4912:3:201"},"nodeType":"YulFunctionCall","src":"4912:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4937:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4908:3:201"},"nodeType":"YulFunctionCall","src":"4908:32:201"},"nodeType":"YulIf","src":"4905:52:201"},{"nodeType":"YulAssignment","src":"4966:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4989:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4976:12:201"},"nodeType":"YulFunctionCall","src":"4976:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4966:6:201"}]},{"nodeType":"YulAssignment","src":"5008:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5041:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5052:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5037:3:201"},"nodeType":"YulFunctionCall","src":"5037:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5018:18:201"},"nodeType":"YulFunctionCall","src":"5018:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5008:6:201"}]},{"nodeType":"YulAssignment","src":"5065:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5098:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5109:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5094:3:201"},"nodeType":"YulFunctionCall","src":"5094:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5075:18:201"},"nodeType":"YulFunctionCall","src":"5075:38:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5065:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveData_$21315_storage_ptrt_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4845:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4856:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4868:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4876:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4884:6:201","type":""}],"src":"4760:359:201"},{"body":{"nodeType":"YulBlock","src":"5338:290:201","statements":[{"body":{"nodeType":"YulBlock","src":"5385:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5394:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5397:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5387:6:201"},"nodeType":"YulFunctionCall","src":"5387:12:201"},"nodeType":"YulExpressionStatement","src":"5387:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5359:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"5368:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5355:3:201"},"nodeType":"YulFunctionCall","src":"5355:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"5380:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5351:3:201"},"nodeType":"YulFunctionCall","src":"5351:33:201"},"nodeType":"YulIf","src":"5348:53:201"},{"nodeType":"YulAssignment","src":"5410:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5433:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5420:12:201"},"nodeType":"YulFunctionCall","src":"5420:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5410:6:201"}]},{"nodeType":"YulAssignment","src":"5452:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5479:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5490:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5475:3:201"},"nodeType":"YulFunctionCall","src":"5475:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5462:12:201"},"nodeType":"YulFunctionCall","src":"5462:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5452:6:201"}]},{"nodeType":"YulAssignment","src":"5503:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5536:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5547:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5532:3:201"},"nodeType":"YulFunctionCall","src":"5532:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5513:18:201"},"nodeType":"YulFunctionCall","src":"5513:38:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5503:6:201"}]},{"nodeType":"YulAssignment","src":"5560:62:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5607:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5618:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5603:3:201"},"nodeType":"YulFunctionCall","src":"5603:18:201"}],"functionName":{"name":"abi_decode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"5570:32:201"},"nodeType":"YulFunctionCall","src":"5570:52:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"5560:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveData_$21315_storage_ptrt_struct$_UserConfigurationMap_$21322_storage_ptrt_addresst_enum$_InterestRateMode_$21337","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5280:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5291:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5303:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5311:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5319:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5327:6:201","type":""}],"src":"5124:504:201"},{"body":{"nodeType":"YulBlock","src":"5665:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5682:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5685:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5675:6:201"},"nodeType":"YulFunctionCall","src":"5675:88:201"},"nodeType":"YulExpressionStatement","src":"5675:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5779:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"5782:4:201","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5772:6:201"},"nodeType":"YulFunctionCall","src":"5772:15:201"},"nodeType":"YulExpressionStatement","src":"5772:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5803:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5806:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5796:6:201"},"nodeType":"YulFunctionCall","src":"5796:15:201"},"nodeType":"YulExpressionStatement","src":"5796:15:201"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"5633:184:201"},{"body":{"nodeType":"YulBlock","src":"6007:285:201","statements":[{"nodeType":"YulAssignment","src":"6017:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6029:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6040:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6025:3:201"},"nodeType":"YulFunctionCall","src":"6025:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6017:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"6053:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6063:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6057:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6121:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6136:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6144:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6132:3:201"},"nodeType":"YulFunctionCall","src":"6132:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6114:6:201"},"nodeType":"YulFunctionCall","src":"6114:34:201"},"nodeType":"YulExpressionStatement","src":"6114:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6168:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6179:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6164:3:201"},"nodeType":"YulFunctionCall","src":"6164:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"6188:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6196:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6184:3:201"},"nodeType":"YulFunctionCall","src":"6184:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6157:6:201"},"nodeType":"YulFunctionCall","src":"6157:43:201"},"nodeType":"YulExpressionStatement","src":"6157:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6220:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6231:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6216:3:201"},"nodeType":"YulFunctionCall","src":"6216:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"6236:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6209:6:201"},"nodeType":"YulFunctionCall","src":"6209:34:201"},"nodeType":"YulExpressionStatement","src":"6209:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6263:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6274:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6259:3:201"},"nodeType":"YulFunctionCall","src":"6259:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"6279:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6252:6:201"},"nodeType":"YulFunctionCall","src":"6252:34:201"},"nodeType":"YulExpressionStatement","src":"6252:34:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5952:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5963:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5971:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5979:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5987:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5998:4:201","type":""}],"src":"5822:470:201"},{"body":{"nodeType":"YulBlock","src":"6409:255:201","statements":[{"body":{"nodeType":"YulBlock","src":"6455:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6464:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6467:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6457:6:201"},"nodeType":"YulFunctionCall","src":"6457:12:201"},"nodeType":"YulExpressionStatement","src":"6457:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6430:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6439:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6426:3:201"},"nodeType":"YulFunctionCall","src":"6426:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"6451:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6422:3:201"},"nodeType":"YulFunctionCall","src":"6422:32:201"},"nodeType":"YulIf","src":"6419:52:201"},{"nodeType":"YulVariableDeclaration","src":"6480:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6499:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6493:5:201"},"nodeType":"YulFunctionCall","src":"6493:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6484:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6540:5:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"6518:21:201"},"nodeType":"YulFunctionCall","src":"6518:28:201"},"nodeType":"YulExpressionStatement","src":"6518:28:201"},{"nodeType":"YulAssignment","src":"6555:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"6565:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6555:6:201"}]},{"nodeType":"YulAssignment","src":"6579:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6599:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6610:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6595:3:201"},"nodeType":"YulFunctionCall","src":"6595:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6589:5:201"},"nodeType":"YulFunctionCall","src":"6589:25:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6579:6:201"}]},{"nodeType":"YulAssignment","src":"6623:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6643:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6654:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6639:3:201"},"nodeType":"YulFunctionCall","src":"6639:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6633:5:201"},"nodeType":"YulFunctionCall","src":"6633:25:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6623:6:201"}]}]},"name":"abi_decode_tuple_t_boolt_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6359:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6370:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6382:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6390:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6398:6:201","type":""}],"src":"6297:367:201"},{"body":{"nodeType":"YulBlock","src":"6764:211:201","statements":[{"body":{"nodeType":"YulBlock","src":"6810:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6819:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6822:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6812:6:201"},"nodeType":"YulFunctionCall","src":"6812:12:201"},"nodeType":"YulExpressionStatement","src":"6812:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6785:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6794:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6781:3:201"},"nodeType":"YulFunctionCall","src":"6781:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"6806:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6777:3:201"},"nodeType":"YulFunctionCall","src":"6777:32:201"},"nodeType":"YulIf","src":"6774:52:201"},{"nodeType":"YulVariableDeclaration","src":"6835:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6854:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6848:5:201"},"nodeType":"YulFunctionCall","src":"6848:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6839:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6895:5:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"6873:21:201"},"nodeType":"YulFunctionCall","src":"6873:28:201"},"nodeType":"YulExpressionStatement","src":"6873:28:201"},{"nodeType":"YulAssignment","src":"6910:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"6920:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6910:6:201"}]},{"nodeType":"YulAssignment","src":"6934:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6954:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6965:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6950:3:201"},"nodeType":"YulFunctionCall","src":"6950:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6944:5:201"},"nodeType":"YulFunctionCall","src":"6944:25:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6934:6:201"}]}]},"name":"abi_decode_tuple_t_boolt_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6722:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6733:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6745:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6753:6:201","type":""}],"src":"6669:306:201"},{"body":{"nodeType":"YulBlock","src":"7012:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7029:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7032:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7022:6:201"},"nodeType":"YulFunctionCall","src":"7022:88:201"},"nodeType":"YulExpressionStatement","src":"7022:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7126:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7129:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7119:6:201"},"nodeType":"YulFunctionCall","src":"7119:15:201"},"nodeType":"YulExpressionStatement","src":"7119:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7150:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7153:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7143:6:201"},"nodeType":"YulFunctionCall","src":"7143:15:201"},"nodeType":"YulExpressionStatement","src":"7143:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"6980:184:201"},{"body":{"nodeType":"YulBlock","src":"7218:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"7240:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"7242:16:201"},"nodeType":"YulFunctionCall","src":"7242:18:201"},"nodeType":"YulExpressionStatement","src":"7242:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7234:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"7237:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7231:2:201"},"nodeType":"YulFunctionCall","src":"7231:8:201"},"nodeType":"YulIf","src":"7228:34:201"},{"nodeType":"YulAssignment","src":"7271:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7283:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"7286:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7279:3:201"},"nodeType":"YulFunctionCall","src":"7279:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"7271:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"7200:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"7203:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"7209:4:201","type":""}],"src":"7169:125:201"},{"body":{"nodeType":"YulBlock","src":"7363:418:201","statements":[{"nodeType":"YulVariableDeclaration","src":"7373:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"7388:1:201","type":"","value":"1"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"7377:7:201","type":""}]},{"nodeType":"YulAssignment","src":"7398:16:201","value":{"name":"power_1","nodeType":"YulIdentifier","src":"7407:7:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"7398:5:201"}]},{"nodeType":"YulAssignment","src":"7423:13:201","value":{"name":"_base","nodeType":"YulIdentifier","src":"7431:5:201"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"7423:4:201"}]},{"body":{"nodeType":"YulBlock","src":"7487:288:201","statements":[{"body":{"nodeType":"YulBlock","src":"7592:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"7594:16:201"},"nodeType":"YulFunctionCall","src":"7594:18:201"},"nodeType":"YulExpressionStatement","src":"7594:18:201"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"7507:4:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7517:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base","nodeType":"YulIdentifier","src":"7585:4:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"7513:3:201"},"nodeType":"YulFunctionCall","src":"7513:77:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7504:2:201"},"nodeType":"YulFunctionCall","src":"7504:87:201"},"nodeType":"YulIf","src":"7501:113:201"},{"body":{"nodeType":"YulBlock","src":"7653:29:201","statements":[{"nodeType":"YulAssignment","src":"7655:25:201","value":{"arguments":[{"name":"power","nodeType":"YulIdentifier","src":"7668:5:201"},{"name":"base","nodeType":"YulIdentifier","src":"7675:4:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"7664:3:201"},"nodeType":"YulFunctionCall","src":"7664:16:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"7655:5:201"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"7634:8:201"},{"name":"power_1","nodeType":"YulIdentifier","src":"7644:7:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7630:3:201"},"nodeType":"YulFunctionCall","src":"7630:22:201"},"nodeType":"YulIf","src":"7627:55:201"},{"nodeType":"YulAssignment","src":"7695:23:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"7707:4:201"},{"name":"base","nodeType":"YulIdentifier","src":"7713:4:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"7703:3:201"},"nodeType":"YulFunctionCall","src":"7703:15:201"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"7695:4:201"}]},{"nodeType":"YulAssignment","src":"7731:34:201","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"7747:7:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"7756:8:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"7743:3:201"},"nodeType":"YulFunctionCall","src":"7743:22:201"},"variableNames":[{"name":"exponent","nodeType":"YulIdentifier","src":"7731:8:201"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"7456:8:201"},{"name":"power_1","nodeType":"YulIdentifier","src":"7466:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7453:2:201"},"nodeType":"YulFunctionCall","src":"7453:21:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"7475:3:201","statements":[]},"pre":{"nodeType":"YulBlock","src":"7449:3:201","statements":[]},"src":"7445:330:201"}]},"name":"checked_exp_helper","nodeType":"YulFunctionDefinition","parameters":[{"name":"_base","nodeType":"YulTypedName","src":"7327:5:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"7334:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"7347:5:201","type":""},{"name":"base","nodeType":"YulTypedName","src":"7354:4:201","type":""}],"src":"7299:482:201"},{"body":{"nodeType":"YulBlock","src":"7845:807:201","statements":[{"body":{"nodeType":"YulBlock","src":"7883:52:201","statements":[{"nodeType":"YulAssignment","src":"7897:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"7906:1:201","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"7897:5:201"}]},{"nodeType":"YulLeave","src":"7920:5:201"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"7865:8:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7858:6:201"},"nodeType":"YulFunctionCall","src":"7858:16:201"},"nodeType":"YulIf","src":"7855:80:201"},{"body":{"nodeType":"YulBlock","src":"7968:52:201","statements":[{"nodeType":"YulAssignment","src":"7982:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"7991:1:201","type":"","value":"0"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"7982:5:201"}]},{"nodeType":"YulLeave","src":"8005:5:201"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"7954:4:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7947:6:201"},"nodeType":"YulFunctionCall","src":"7947:12:201"},"nodeType":"YulIf","src":"7944:76:201"},{"cases":[{"body":{"nodeType":"YulBlock","src":"8056:52:201","statements":[{"nodeType":"YulAssignment","src":"8070:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8079:1:201","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"8070:5:201"}]},{"nodeType":"YulLeave","src":"8093:5:201"}]},"nodeType":"YulCase","src":"8049:59:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8054:1:201","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"8124:123:201","statements":[{"body":{"nodeType":"YulBlock","src":"8159:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"8161:16:201"},"nodeType":"YulFunctionCall","src":"8161:18:201"},"nodeType":"YulExpressionStatement","src":"8161:18:201"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"8144:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"8154:3:201","type":"","value":"255"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8141:2:201"},"nodeType":"YulFunctionCall","src":"8141:17:201"},"nodeType":"YulIf","src":"8138:43:201"},{"nodeType":"YulAssignment","src":"8194:25:201","value":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"8207:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"8217:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"8203:3:201"},"nodeType":"YulFunctionCall","src":"8203:16:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"8194:5:201"}]},{"nodeType":"YulLeave","src":"8232:5:201"}]},"nodeType":"YulCase","src":"8117:130:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8122:1:201","type":"","value":"2"}}],"expression":{"name":"base","nodeType":"YulIdentifier","src":"8036:4:201"},"nodeType":"YulSwitch","src":"8029:218:201"},{"body":{"nodeType":"YulBlock","src":"8345:70:201","statements":[{"nodeType":"YulAssignment","src":"8359:28:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"8372:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"8378:8:201"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"8368:3:201"},"nodeType":"YulFunctionCall","src":"8368:19:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"8359:5:201"}]},{"nodeType":"YulLeave","src":"8400:5:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"8269:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"8275:2:201","type":"","value":"11"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8266:2:201"},"nodeType":"YulFunctionCall","src":"8266:12:201"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"8283:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"8293:2:201","type":"","value":"78"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8280:2:201"},"nodeType":"YulFunctionCall","src":"8280:16:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8262:3:201"},"nodeType":"YulFunctionCall","src":"8262:35:201"},{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"8306:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"8312:3:201","type":"","value":"307"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8303:2:201"},"nodeType":"YulFunctionCall","src":"8303:13:201"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"8321:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"8331:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8318:2:201"},"nodeType":"YulFunctionCall","src":"8318:16:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8299:3:201"},"nodeType":"YulFunctionCall","src":"8299:36:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"8259:2:201"},"nodeType":"YulFunctionCall","src":"8259:77:201"},"nodeType":"YulIf","src":"8256:159:201"},{"nodeType":"YulVariableDeclaration","src":"8424:57:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"8466:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"8472:8:201"}],"functionName":{"name":"checked_exp_helper","nodeType":"YulIdentifier","src":"8447:18:201"},"nodeType":"YulFunctionCall","src":"8447:34:201"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"8428:7:201","type":""},{"name":"base_1","nodeType":"YulTypedName","src":"8437:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"8586:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"8588:16:201"},"nodeType":"YulFunctionCall","src":"8588:18:201"},"nodeType":"YulExpressionStatement","src":"8588:18:201"}]},"condition":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"8496:7:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8509:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base_1","nodeType":"YulIdentifier","src":"8577:6:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"8505:3:201"},"nodeType":"YulFunctionCall","src":"8505:79:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8493:2:201"},"nodeType":"YulFunctionCall","src":"8493:92:201"},"nodeType":"YulIf","src":"8490:118:201"},{"nodeType":"YulAssignment","src":"8617:29:201","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"8630:7:201"},{"name":"base_1","nodeType":"YulIdentifier","src":"8639:6:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"8626:3:201"},"nodeType":"YulFunctionCall","src":"8626:20:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"8617:5:201"}]}]},"name":"checked_exp_unsigned","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"7816:4:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"7822:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"7835:5:201","type":""}],"src":"7786:866:201"},{"body":{"nodeType":"YulBlock","src":"8727:61:201","statements":[{"nodeType":"YulAssignment","src":"8737:45:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"8767:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"8773:8:201"}],"functionName":{"name":"checked_exp_unsigned","nodeType":"YulIdentifier","src":"8746:20:201"},"nodeType":"YulFunctionCall","src":"8746:36:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"8737:5:201"}]}]},"name":"checked_exp_t_uint256_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"8698:4:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"8704:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"8717:5:201","type":""}],"src":"8657:131:201"},{"body":{"nodeType":"YulBlock","src":"8825:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8842:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8845:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8835:6:201"},"nodeType":"YulFunctionCall","src":"8835:88:201"},"nodeType":"YulExpressionStatement","src":"8835:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8939:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"8942:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8932:6:201"},"nodeType":"YulFunctionCall","src":"8932:15:201"},"nodeType":"YulExpressionStatement","src":"8932:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8963:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8966:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8956:6:201"},"nodeType":"YulFunctionCall","src":"8956:15:201"},"nodeType":"YulExpressionStatement","src":"8956:15:201"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"8793:184:201"},{"body":{"nodeType":"YulBlock","src":"9028:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"9059:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9080:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9083:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9073:6:201"},"nodeType":"YulFunctionCall","src":"9073:88:201"},"nodeType":"YulExpressionStatement","src":"9073:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9181:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"9184:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9174:6:201"},"nodeType":"YulFunctionCall","src":"9174:15:201"},"nodeType":"YulExpressionStatement","src":"9174:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9209:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9212:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9202:6:201"},"nodeType":"YulFunctionCall","src":"9202:15:201"},"nodeType":"YulExpressionStatement","src":"9202:15:201"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"9048:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9041:6:201"},"nodeType":"YulFunctionCall","src":"9041:9:201"},"nodeType":"YulIf","src":"9038:189:201"},{"nodeType":"YulAssignment","src":"9236:14:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9245:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"9248:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"9241:3:201"},"nodeType":"YulFunctionCall","src":"9241:9:201"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"9236:1:201"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"9013:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"9016:1:201","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"9022:1:201","type":""}],"src":"8982:274:201"},{"body":{"nodeType":"YulBlock","src":"9309:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"9319:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9329:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9323:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9372:21:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9387:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9390:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9383:3:201"},"nodeType":"YulFunctionCall","src":"9383:10:201"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"9376:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9402:21:201","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"9417:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9420:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9413:3:201"},"nodeType":"YulFunctionCall","src":"9413:10:201"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"9406:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"9457:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"9459:16:201"},"nodeType":"YulFunctionCall","src":"9459:18:201"},"nodeType":"YulExpressionStatement","src":"9459:18:201"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"9438:3:201"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"9447:2:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"9451:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9443:3:201"},"nodeType":"YulFunctionCall","src":"9443:12:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9435:2:201"},"nodeType":"YulFunctionCall","src":"9435:21:201"},"nodeType":"YulIf","src":"9432:47:201"},{"nodeType":"YulAssignment","src":"9488:20:201","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"9499:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"9504:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9495:3:201"},"nodeType":"YulFunctionCall","src":"9495:13:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"9488:3:201"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"9292:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"9295:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"9301:3:201","type":""}],"src":"9261:253:201"},{"body":{"nodeType":"YulBlock","src":"9620:76:201","statements":[{"nodeType":"YulAssignment","src":"9630:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9642:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9653:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9638:3:201"},"nodeType":"YulFunctionCall","src":"9638:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9630:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9672:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"9683:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9665:6:201"},"nodeType":"YulFunctionCall","src":"9665:25:201"},"nodeType":"YulExpressionStatement","src":"9665:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9589:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9600:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9611:4:201","type":""}],"src":"9519:177:201"},{"body":{"nodeType":"YulBlock","src":"9830:168:201","statements":[{"nodeType":"YulAssignment","src":"9840:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9852:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9863:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9848:3:201"},"nodeType":"YulFunctionCall","src":"9848:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9840:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9882:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9897:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"9905:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9893:3:201"},"nodeType":"YulFunctionCall","src":"9893:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9875:6:201"},"nodeType":"YulFunctionCall","src":"9875:74:201"},"nodeType":"YulExpressionStatement","src":"9875:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9969:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9980:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9965:3:201"},"nodeType":"YulFunctionCall","src":"9965:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"9985:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9958:6:201"},"nodeType":"YulFunctionCall","src":"9958:34:201"},"nodeType":"YulExpressionStatement","src":"9958:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9791:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9802:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9810:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9821:4:201","type":""}],"src":"9701:297:201"},{"body":{"nodeType":"YulBlock","src":"10061:243:201","statements":[{"body":{"nodeType":"YulBlock","src":"10103:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10124:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10127:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10117:6:201"},"nodeType":"YulFunctionCall","src":"10117:88:201"},"nodeType":"YulExpressionStatement","src":"10117:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10225:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10228:4:201","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10218:6:201"},"nodeType":"YulFunctionCall","src":"10218:15:201"},"nodeType":"YulExpressionStatement","src":"10218:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10253:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10256:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10246:6:201"},"nodeType":"YulFunctionCall","src":"10246:15:201"},"nodeType":"YulExpressionStatement","src":"10246:15:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10084:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"10091:1:201","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10081:2:201"},"nodeType":"YulFunctionCall","src":"10081:12:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10074:6:201"},"nodeType":"YulFunctionCall","src":"10074:20:201"},"nodeType":"YulIf","src":"10071:200:201"},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10287:3:201"},{"name":"value","nodeType":"YulIdentifier","src":"10292:5:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10280:6:201"},"nodeType":"YulFunctionCall","src":"10280:18:201"},"nodeType":"YulExpressionStatement","src":"10280:18:201"}]},"name":"abi_encode_enum_InterestRateMode","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"10045:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"10052:3:201","type":""}],"src":"10003:301:201"},{"body":{"nodeType":"YulBlock","src":"10514:281:201","statements":[{"nodeType":"YulAssignment","src":"10524:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10536:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10547:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10532:3:201"},"nodeType":"YulFunctionCall","src":"10532:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10524:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10567:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10582:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10590:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10578:3:201"},"nodeType":"YulFunctionCall","src":"10578:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10560:6:201"},"nodeType":"YulFunctionCall","src":"10560:74:201"},"nodeType":"YulExpressionStatement","src":"10560:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10654:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10665:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10650:3:201"},"nodeType":"YulFunctionCall","src":"10650:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"10670:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10643:6:201"},"nodeType":"YulFunctionCall","src":"10643:34:201"},"nodeType":"YulExpressionStatement","src":"10643:34:201"},{"expression":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"10719:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10731:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10742:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10727:3:201"},"nodeType":"YulFunctionCall","src":"10727:18:201"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"10686:32:201"},"nodeType":"YulFunctionCall","src":"10686:60:201"},"nodeType":"YulExpressionStatement","src":"10686:60:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10766:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10777:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10762:3:201"},"nodeType":"YulFunctionCall","src":"10762:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"10782:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10755:6:201"},"nodeType":"YulFunctionCall","src":"10755:34:201"},"nodeType":"YulExpressionStatement","src":"10755:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_enum$_InterestRateMode_$21337_t_uint256__to_t_address_t_uint256_t_uint8_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10459:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"10470:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10478:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10486:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10494:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10505:4:201","type":""}],"src":"10309:486:201"},{"body":{"nodeType":"YulBlock","src":"10901:125:201","statements":[{"nodeType":"YulAssignment","src":"10911:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10923:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10934:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10919:3:201"},"nodeType":"YulFunctionCall","src":"10919:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10911:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10953:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10968:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10976:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10964:3:201"},"nodeType":"YulFunctionCall","src":"10964:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10946:6:201"},"nodeType":"YulFunctionCall","src":"10946:74:201"},"nodeType":"YulExpressionStatement","src":"10946:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10870:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10881:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10892:4:201","type":""}],"src":"10800:226:201"},{"body":{"nodeType":"YulBlock","src":"11112:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"11158:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11167:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11170:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11160:6:201"},"nodeType":"YulFunctionCall","src":"11160:12:201"},"nodeType":"YulExpressionStatement","src":"11160:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11133:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"11142:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11129:3:201"},"nodeType":"YulFunctionCall","src":"11129:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"11154:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11125:3:201"},"nodeType":"YulFunctionCall","src":"11125:32:201"},"nodeType":"YulIf","src":"11122:52:201"},{"nodeType":"YulAssignment","src":"11183:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11199:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11193:5:201"},"nodeType":"YulFunctionCall","src":"11193:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11183:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11078:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11089:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11101:6:201","type":""}],"src":"11031:184:201"},{"body":{"nodeType":"YulBlock","src":"11318:147:201","statements":[{"body":{"nodeType":"YulBlock","src":"11364:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11373:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11376:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11366:6:201"},"nodeType":"YulFunctionCall","src":"11366:12:201"},"nodeType":"YulExpressionStatement","src":"11366:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11339:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"11348:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11335:3:201"},"nodeType":"YulFunctionCall","src":"11335:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"11360:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11331:3:201"},"nodeType":"YulFunctionCall","src":"11331:32:201"},"nodeType":"YulIf","src":"11328:52:201"},{"nodeType":"YulAssignment","src":"11389:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11405:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11399:5:201"},"nodeType":"YulFunctionCall","src":"11399:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11389:6:201"}]},{"nodeType":"YulAssignment","src":"11424:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11444:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11455:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11440:3:201"},"nodeType":"YulFunctionCall","src":"11440:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11434:5:201"},"nodeType":"YulFunctionCall","src":"11434:25:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"11424:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11276:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11287:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11299:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11307:6:201","type":""}],"src":"11220:245:201"},{"body":{"nodeType":"YulBlock","src":"11627:211:201","statements":[{"nodeType":"YulAssignment","src":"11637:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11649:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11660:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11645:3:201"},"nodeType":"YulFunctionCall","src":"11645:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11637:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11679:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11694:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"11702:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11690:3:201"},"nodeType":"YulFunctionCall","src":"11690:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11672:6:201"},"nodeType":"YulFunctionCall","src":"11672:74:201"},"nodeType":"YulExpressionStatement","src":"11672:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11766:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11777:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11762:3:201"},"nodeType":"YulFunctionCall","src":"11762:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"11782:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11755:6:201"},"nodeType":"YulFunctionCall","src":"11755:34:201"},"nodeType":"YulExpressionStatement","src":"11755:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11809:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11820:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11805:3:201"},"nodeType":"YulFunctionCall","src":"11805:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"11825:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11798:6:201"},"nodeType":"YulFunctionCall","src":"11798:34:201"},"nodeType":"YulExpressionStatement","src":"11798:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11580:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11591:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11599:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11607:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11618:4:201","type":""}],"src":"11470:368:201"},{"body":{"nodeType":"YulBlock","src":"11891:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"11918:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11920:16:201"},"nodeType":"YulFunctionCall","src":"11920:18:201"},"nodeType":"YulExpressionStatement","src":"11920:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11907:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"11914:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"11910:3:201"},"nodeType":"YulFunctionCall","src":"11910:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11904:2:201"},"nodeType":"YulFunctionCall","src":"11904:13:201"},"nodeType":"YulIf","src":"11901:39:201"},{"nodeType":"YulAssignment","src":"11949:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11960:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"11963:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11956:3:201"},"nodeType":"YulFunctionCall","src":"11956:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"11949:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11874:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"11877:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"11883:3:201","type":""}],"src":"11843:128:201"},{"body":{"nodeType":"YulBlock","src":"12133:241:201","statements":[{"nodeType":"YulAssignment","src":"12143:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12155:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12166:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12151:3:201"},"nodeType":"YulFunctionCall","src":"12151:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12143:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"12178:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12188:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12182:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12246:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12261:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12269:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12257:3:201"},"nodeType":"YulFunctionCall","src":"12257:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12239:6:201"},"nodeType":"YulFunctionCall","src":"12239:34:201"},"nodeType":"YulExpressionStatement","src":"12239:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12293:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12304:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12289:3:201"},"nodeType":"YulFunctionCall","src":"12289:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12313:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12321:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12309:3:201"},"nodeType":"YulFunctionCall","src":"12309:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12282:6:201"},"nodeType":"YulFunctionCall","src":"12282:43:201"},"nodeType":"YulExpressionStatement","src":"12282:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12345:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12356:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12341:3:201"},"nodeType":"YulFunctionCall","src":"12341:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"12361:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12334:6:201"},"nodeType":"YulFunctionCall","src":"12334:34:201"},"nodeType":"YulExpressionStatement","src":"12334:34:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12086:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12097:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12105:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12113:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12124:4:201","type":""}],"src":"11976:398:201"},{"body":{"nodeType":"YulBlock","src":"12502:135:201","statements":[{"nodeType":"YulAssignment","src":"12512:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12524:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12535:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12520:3:201"},"nodeType":"YulFunctionCall","src":"12520:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12512:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12554:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"12565:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12547:6:201"},"nodeType":"YulFunctionCall","src":"12547:25:201"},"nodeType":"YulExpressionStatement","src":"12547:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12592:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12603:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12588:3:201"},"nodeType":"YulFunctionCall","src":"12588:18:201"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12622:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12615:6:201"},"nodeType":"YulFunctionCall","src":"12615:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12608:6:201"},"nodeType":"YulFunctionCall","src":"12608:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12581:6:201"},"nodeType":"YulFunctionCall","src":"12581:50:201"},"nodeType":"YulExpressionStatement","src":"12581:50:201"}]},"name":"abi_encode_tuple_t_uint256_t_bool__to_t_uint256_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12463:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12474:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12482:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12493:4:201","type":""}],"src":"12379:258:201"},{"body":{"nodeType":"YulBlock","src":"12827:326:201","statements":[{"nodeType":"YulAssignment","src":"12837:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12849:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12860:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12845:3:201"},"nodeType":"YulFunctionCall","src":"12845:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12837:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"12873:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12883:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12877:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12941:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12956:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12964:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12952:3:201"},"nodeType":"YulFunctionCall","src":"12952:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12934:6:201"},"nodeType":"YulFunctionCall","src":"12934:34:201"},"nodeType":"YulExpressionStatement","src":"12934:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12988:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12999:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12984:3:201"},"nodeType":"YulFunctionCall","src":"12984:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"13008:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"13016:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13004:3:201"},"nodeType":"YulFunctionCall","src":"13004:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12977:6:201"},"nodeType":"YulFunctionCall","src":"12977:43:201"},"nodeType":"YulExpressionStatement","src":"12977:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13040:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13051:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13036:3:201"},"nodeType":"YulFunctionCall","src":"13036:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"13056:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13029:6:201"},"nodeType":"YulFunctionCall","src":"13029:34:201"},"nodeType":"YulExpressionStatement","src":"13029:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13083:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13094:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13079:3:201"},"nodeType":"YulFunctionCall","src":"13079:18:201"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"13103:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13111:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13099:3:201"},"nodeType":"YulFunctionCall","src":"13099:47:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13072:6:201"},"nodeType":"YulFunctionCall","src":"13072:75:201"},"nodeType":"YulExpressionStatement","src":"13072:75:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_uint128__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12772:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12783:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12791:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12799:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12807:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12818:4:201","type":""}],"src":"12642:511:201"},{"body":{"nodeType":"YulBlock","src":"13279:102:201","statements":[{"nodeType":"YulAssignment","src":"13289:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13301:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13312:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13297:3:201"},"nodeType":"YulFunctionCall","src":"13297:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13289:4:201"}]},{"expression":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13357:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"13365:9:201"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"13324:32:201"},"nodeType":"YulFunctionCall","src":"13324:51:201"},"nodeType":"YulExpressionStatement","src":"13324:51:201"}]},"name":"abi_encode_tuple_t_enum$_InterestRateMode_$21337__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13248:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13259:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13270:4:201","type":""}],"src":"13158:223:201"},{"body":{"nodeType":"YulBlock","src":"13517:335:201","statements":[{"body":{"nodeType":"YulBlock","src":"13564:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13573:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13576:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13566:6:201"},"nodeType":"YulFunctionCall","src":"13566:12:201"},"nodeType":"YulExpressionStatement","src":"13566:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13538:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"13547:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13534:3:201"},"nodeType":"YulFunctionCall","src":"13534:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"13559:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13530:3:201"},"nodeType":"YulFunctionCall","src":"13530:33:201"},"nodeType":"YulIf","src":"13527:53:201"},{"nodeType":"YulAssignment","src":"13589:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13605:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13599:5:201"},"nodeType":"YulFunctionCall","src":"13599:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13589:6:201"}]},{"nodeType":"YulAssignment","src":"13624:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13644:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13655:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13640:3:201"},"nodeType":"YulFunctionCall","src":"13640:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13634:5:201"},"nodeType":"YulFunctionCall","src":"13634:25:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"13624:6:201"}]},{"nodeType":"YulAssignment","src":"13668:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13688:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13699:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13684:3:201"},"nodeType":"YulFunctionCall","src":"13684:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13678:5:201"},"nodeType":"YulFunctionCall","src":"13678:25:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"13668:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"13712:38:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13735:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13746:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13731:3:201"},"nodeType":"YulFunctionCall","src":"13731:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13725:5:201"},"nodeType":"YulFunctionCall","src":"13725:25:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13716:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"13806:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13815:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13818:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13808:6:201"},"nodeType":"YulFunctionCall","src":"13808:12:201"},"nodeType":"YulExpressionStatement","src":"13808:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13772:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13783:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"13790:12:201","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13779:3:201"},"nodeType":"YulFunctionCall","src":"13779:24:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"13769:2:201"},"nodeType":"YulFunctionCall","src":"13769:35:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13762:6:201"},"nodeType":"YulFunctionCall","src":"13762:43:201"},"nodeType":"YulIf","src":"13759:63:201"},{"nodeType":"YulAssignment","src":"13831:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"13841:5:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"13831:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13459:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13470:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13482:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13490:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13498:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13506:6:201","type":""}],"src":"13386:466:201"},{"body":{"nodeType":"YulBlock","src":"13978:535:201","statements":[{"nodeType":"YulVariableDeclaration","src":"13988:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"13998:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"13992:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14016:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"14027:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14009:6:201"},"nodeType":"YulFunctionCall","src":"14009:21:201"},"nodeType":"YulExpressionStatement","src":"14009:21:201"},{"nodeType":"YulVariableDeclaration","src":"14039:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14059:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14053:5:201"},"nodeType":"YulFunctionCall","src":"14053:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"14043:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14086:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"14097:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14082:3:201"},"nodeType":"YulFunctionCall","src":"14082:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"14102:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14075:6:201"},"nodeType":"YulFunctionCall","src":"14075:34:201"},"nodeType":"YulExpressionStatement","src":"14075:34:201"},{"nodeType":"YulVariableDeclaration","src":"14118:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14127:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"14122:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"14187:90:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14216:9:201"},{"name":"i","nodeType":"YulIdentifier","src":"14227:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14212:3:201"},"nodeType":"YulFunctionCall","src":"14212:17:201"},{"kind":"number","nodeType":"YulLiteral","src":"14231:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14208:3:201"},"nodeType":"YulFunctionCall","src":"14208:26:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14250:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"14258:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14246:3:201"},"nodeType":"YulFunctionCall","src":"14246:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"14262:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14242:3:201"},"nodeType":"YulFunctionCall","src":"14242:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14236:5:201"},"nodeType":"YulFunctionCall","src":"14236:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14201:6:201"},"nodeType":"YulFunctionCall","src":"14201:66:201"},"nodeType":"YulExpressionStatement","src":"14201:66:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"14148:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"14151:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"14145:2:201"},"nodeType":"YulFunctionCall","src":"14145:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"14159:19:201","statements":[{"nodeType":"YulAssignment","src":"14161:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"14170:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"14173:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14166:3:201"},"nodeType":"YulFunctionCall","src":"14166:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"14161:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"14141:3:201","statements":[]},"src":"14137:140:201"},{"body":{"nodeType":"YulBlock","src":"14311:66:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14340:9:201"},{"name":"length","nodeType":"YulIdentifier","src":"14351:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14336:3:201"},"nodeType":"YulFunctionCall","src":"14336:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"14360:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14332:3:201"},"nodeType":"YulFunctionCall","src":"14332:31:201"},{"kind":"number","nodeType":"YulLiteral","src":"14365:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14325:6:201"},"nodeType":"YulFunctionCall","src":"14325:42:201"},"nodeType":"YulExpressionStatement","src":"14325:42:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"14292:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"14295:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14289:2:201"},"nodeType":"YulFunctionCall","src":"14289:13:201"},"nodeType":"YulIf","src":"14286:91:201"},{"nodeType":"YulAssignment","src":"14386:121:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14402:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"14421:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"14429:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14417:3:201"},"nodeType":"YulFunctionCall","src":"14417:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"14434:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14413:3:201"},"nodeType":"YulFunctionCall","src":"14413:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14398:3:201"},"nodeType":"YulFunctionCall","src":"14398:104:201"},{"kind":"number","nodeType":"YulLiteral","src":"14504:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14394:3:201"},"nodeType":"YulFunctionCall","src":"14394:113:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14386:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13947:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13958:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13969:4:201","type":""}],"src":"13857:656:201"},{"body":{"nodeType":"YulBlock","src":"14596:167:201","statements":[{"body":{"nodeType":"YulBlock","src":"14642:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14651:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14654:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14644:6:201"},"nodeType":"YulFunctionCall","src":"14644:12:201"},"nodeType":"YulExpressionStatement","src":"14644:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14617:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"14626:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14613:3:201"},"nodeType":"YulFunctionCall","src":"14613:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"14638:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14609:3:201"},"nodeType":"YulFunctionCall","src":"14609:32:201"},"nodeType":"YulIf","src":"14606:52:201"},{"nodeType":"YulVariableDeclaration","src":"14667:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14686:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14680:5:201"},"nodeType":"YulFunctionCall","src":"14680:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"14671:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14727:5:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"14705:21:201"},"nodeType":"YulFunctionCall","src":"14705:28:201"},"nodeType":"YulExpressionStatement","src":"14705:28:201"},{"nodeType":"YulAssignment","src":"14742:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"14752:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14742:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14562:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14573:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14585:6:201","type":""}],"src":"14518:245:201"},{"body":{"nodeType":"YulBlock","src":"14820:176:201","statements":[{"body":{"nodeType":"YulBlock","src":"14939:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"14941:16:201"},"nodeType":"YulFunctionCall","src":"14941:18:201"},"nodeType":"YulExpressionStatement","src":"14941:18:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"14851:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"14844:6:201"},"nodeType":"YulFunctionCall","src":"14844:9:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"14837:6:201"},"nodeType":"YulFunctionCall","src":"14837:17:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"14859:1:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14866:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"14934:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"14862:3:201"},"nodeType":"YulFunctionCall","src":"14862:74:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14856:2:201"},"nodeType":"YulFunctionCall","src":"14856:81:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14833:3:201"},"nodeType":"YulFunctionCall","src":"14833:105:201"},"nodeType":"YulIf","src":"14830:131:201"},{"nodeType":"YulAssignment","src":"14970:20:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"14985:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"14988:1:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"14981:3:201"},"nodeType":"YulFunctionCall","src":"14981:9:201"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"14970:7:201"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"14799:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"14802:1:201","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"14808:7:201","type":""}],"src":"14768:228:201"},{"body":{"nodeType":"YulBlock","src":"15175:229:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15192:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15203:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15185:6:201"},"nodeType":"YulFunctionCall","src":"15185:21:201"},"nodeType":"YulExpressionStatement","src":"15185:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15226:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15237:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15222:3:201"},"nodeType":"YulFunctionCall","src":"15222:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"15242:2:201","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15215:6:201"},"nodeType":"YulFunctionCall","src":"15215:30:201"},"nodeType":"YulExpressionStatement","src":"15215:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15265:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15276:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15261:3:201"},"nodeType":"YulFunctionCall","src":"15261:18:201"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"15281:34:201","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15254:6:201"},"nodeType":"YulFunctionCall","src":"15254:62:201"},"nodeType":"YulExpressionStatement","src":"15254:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15336:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15347:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15332:3:201"},"nodeType":"YulFunctionCall","src":"15332:18:201"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"15352:9:201","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15325:6:201"},"nodeType":"YulFunctionCall","src":"15325:37:201"},"nodeType":"YulExpressionStatement","src":"15325:37:201"},{"nodeType":"YulAssignment","src":"15371:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15383:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15394:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15379:3:201"},"nodeType":"YulFunctionCall","src":"15379:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15371:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15152:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15166:4:201","type":""}],"src":"15001:403:201"},{"body":{"nodeType":"YulBlock","src":"15604:729:201","statements":[{"nodeType":"YulAssignment","src":"15614:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15626:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15637:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15622:3:201"},"nodeType":"YulFunctionCall","src":"15622:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15614:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15657:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15674:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15668:5:201"},"nodeType":"YulFunctionCall","src":"15668:13:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15650:6:201"},"nodeType":"YulFunctionCall","src":"15650:32:201"},"nodeType":"YulExpressionStatement","src":"15650:32:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15702:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15713:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15698:3:201"},"nodeType":"YulFunctionCall","src":"15698:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15730:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"15738:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15726:3:201"},"nodeType":"YulFunctionCall","src":"15726:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15720:5:201"},"nodeType":"YulFunctionCall","src":"15720:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15691:6:201"},"nodeType":"YulFunctionCall","src":"15691:54:201"},"nodeType":"YulExpressionStatement","src":"15691:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15765:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15776:4:201","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15761:3:201"},"nodeType":"YulFunctionCall","src":"15761:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15793:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"15801:4:201","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15789:3:201"},"nodeType":"YulFunctionCall","src":"15789:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15783:5:201"},"nodeType":"YulFunctionCall","src":"15783:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15754:6:201"},"nodeType":"YulFunctionCall","src":"15754:54:201"},"nodeType":"YulExpressionStatement","src":"15754:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15828:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15839:4:201","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15824:3:201"},"nodeType":"YulFunctionCall","src":"15824:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15856:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"15864:4:201","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15852:3:201"},"nodeType":"YulFunctionCall","src":"15852:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15846:5:201"},"nodeType":"YulFunctionCall","src":"15846:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15817:6:201"},"nodeType":"YulFunctionCall","src":"15817:54:201"},"nodeType":"YulExpressionStatement","src":"15817:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15891:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15902:4:201","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15887:3:201"},"nodeType":"YulFunctionCall","src":"15887:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15919:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"15927:4:201","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15915:3:201"},"nodeType":"YulFunctionCall","src":"15915:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15909:5:201"},"nodeType":"YulFunctionCall","src":"15909:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15880:6:201"},"nodeType":"YulFunctionCall","src":"15880:54:201"},"nodeType":"YulExpressionStatement","src":"15880:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15954:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15965:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15950:3:201"},"nodeType":"YulFunctionCall","src":"15950:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15982:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"15990:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15978:3:201"},"nodeType":"YulFunctionCall","src":"15978:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15972:5:201"},"nodeType":"YulFunctionCall","src":"15972:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15943:6:201"},"nodeType":"YulFunctionCall","src":"15943:54:201"},"nodeType":"YulExpressionStatement","src":"15943:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16017:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16028:4:201","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16013:3:201"},"nodeType":"YulFunctionCall","src":"16013:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16045:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"16053:4:201","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16041:3:201"},"nodeType":"YulFunctionCall","src":"16041:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16035:5:201"},"nodeType":"YulFunctionCall","src":"16035:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16006:6:201"},"nodeType":"YulFunctionCall","src":"16006:54:201"},"nodeType":"YulExpressionStatement","src":"16006:54:201"},{"nodeType":"YulVariableDeclaration","src":"16069:44:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16099:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"16107:4:201","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16095:3:201"},"nodeType":"YulFunctionCall","src":"16095:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16089:5:201"},"nodeType":"YulFunctionCall","src":"16089:24:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"16073:12:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16122:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"16132:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"16126:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16194:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16205:4:201","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16190:3:201"},"nodeType":"YulFunctionCall","src":"16190:20:201"},{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"16216:12:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16230:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16212:3:201"},"nodeType":"YulFunctionCall","src":"16212:21:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16183:6:201"},"nodeType":"YulFunctionCall","src":"16183:51:201"},"nodeType":"YulExpressionStatement","src":"16183:51:201"},{"nodeType":"YulVariableDeclaration","src":"16243:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"16253:6:201","type":"","value":"0x0100"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"16247:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16279:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"16290:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16275:3:201"},"nodeType":"YulFunctionCall","src":"16275:18:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16309:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"16317:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16305:3:201"},"nodeType":"YulFunctionCall","src":"16305:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16299:5:201"},"nodeType":"YulFunctionCall","src":"16299:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16323:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16295:3:201"},"nodeType":"YulFunctionCall","src":"16295:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16268:6:201"},"nodeType":"YulFunctionCall","src":"16268:59:201"},"nodeType":"YulExpressionStatement","src":"16268:59:201"}]},"name":"abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15573:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15584:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15595:4:201","type":""}],"src":"15409:924:201"},{"body":{"nodeType":"YulBlock","src":"16453:191:201","statements":[{"body":{"nodeType":"YulBlock","src":"16499:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16508:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16511:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16501:6:201"},"nodeType":"YulFunctionCall","src":"16501:12:201"},"nodeType":"YulExpressionStatement","src":"16501:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"16474:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"16483:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16470:3:201"},"nodeType":"YulFunctionCall","src":"16470:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"16495:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"16466:3:201"},"nodeType":"YulFunctionCall","src":"16466:32:201"},"nodeType":"YulIf","src":"16463:52:201"},{"nodeType":"YulAssignment","src":"16524:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16540:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16534:5:201"},"nodeType":"YulFunctionCall","src":"16534:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"16524:6:201"}]},{"nodeType":"YulAssignment","src":"16559:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16579:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16590:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16575:3:201"},"nodeType":"YulFunctionCall","src":"16575:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16569:5:201"},"nodeType":"YulFunctionCall","src":"16569:25:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"16559:6:201"}]},{"nodeType":"YulAssignment","src":"16603:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16623:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16634:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16619:3:201"},"nodeType":"YulFunctionCall","src":"16619:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16613:5:201"},"nodeType":"YulFunctionCall","src":"16613:25:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"16603:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16403:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"16414:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"16426:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16434:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"16442:6:201","type":""}],"src":"16338:306:201"},{"body":{"nodeType":"YulBlock","src":"16862:250:201","statements":[{"nodeType":"YulAssignment","src":"16872:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16884:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16895:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16880:3:201"},"nodeType":"YulFunctionCall","src":"16880:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16872:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16915:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"16926:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16908:6:201"},"nodeType":"YulFunctionCall","src":"16908:25:201"},"nodeType":"YulExpressionStatement","src":"16908:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16953:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16964:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16949:3:201"},"nodeType":"YulFunctionCall","src":"16949:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"16969:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16942:6:201"},"nodeType":"YulFunctionCall","src":"16942:34:201"},"nodeType":"YulExpressionStatement","src":"16942:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16996:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17007:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16992:3:201"},"nodeType":"YulFunctionCall","src":"16992:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"17012:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16985:6:201"},"nodeType":"YulFunctionCall","src":"16985:34:201"},"nodeType":"YulExpressionStatement","src":"16985:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17039:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17050:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17035:3:201"},"nodeType":"YulFunctionCall","src":"17035:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"17055:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17028:6:201"},"nodeType":"YulFunctionCall","src":"17028:34:201"},"nodeType":"YulExpressionStatement","src":"17028:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17082:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17093:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17078:3:201"},"nodeType":"YulFunctionCall","src":"17078:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"17099:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17071:6:201"},"nodeType":"YulFunctionCall","src":"17071:35:201"},"nodeType":"YulExpressionStatement","src":"17071:35:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16799:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"16810:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"16818:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"16826:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16834:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16842:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16853:4:201","type":""}],"src":"16649:463:201"},{"body":{"nodeType":"YulBlock","src":"17226:76:201","statements":[{"nodeType":"YulAssignment","src":"17236:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17248:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17259:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17244:3:201"},"nodeType":"YulFunctionCall","src":"17244:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17236:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17278:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"17289:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17271:6:201"},"nodeType":"YulFunctionCall","src":"17271:25:201"},"nodeType":"YulExpressionStatement","src":"17271:25:201"}]},"name":"abi_encode_tuple_t_rational_0_by_1__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17195:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17206:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17217:4:201","type":""}],"src":"17117:185:201"},{"body":{"nodeType":"YulBlock","src":"17356:197:201","statements":[{"nodeType":"YulVariableDeclaration","src":"17366:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"17376:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"17370:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"17419:21:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"17434:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"17437:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17430:3:201"},"nodeType":"YulFunctionCall","src":"17430:10:201"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"17423:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"17449:21:201","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"17464:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"17467:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17460:3:201"},"nodeType":"YulFunctionCall","src":"17460:10:201"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"17453:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"17495:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"17497:16:201"},"nodeType":"YulFunctionCall","src":"17497:18:201"},"nodeType":"YulExpressionStatement","src":"17497:18:201"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"17485:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"17490:3:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17482:2:201"},"nodeType":"YulFunctionCall","src":"17482:12:201"},"nodeType":"YulIf","src":"17479:38:201"},{"nodeType":"YulAssignment","src":"17526:21:201","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"17538:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"17543:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17534:3:201"},"nodeType":"YulFunctionCall","src":"17534:13:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"17526:4:201"}]}]},"name":"checked_sub_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"17338:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"17341:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"17347:4:201","type":""}],"src":"17307:246:201"},{"body":{"nodeType":"YulBlock","src":"17732:175:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17749:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17760:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17742:6:201"},"nodeType":"YulFunctionCall","src":"17742:21:201"},"nodeType":"YulExpressionStatement","src":"17742:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17783:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17794:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17779:3:201"},"nodeType":"YulFunctionCall","src":"17779:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"17799:2:201","type":"","value":"25"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17772:6:201"},"nodeType":"YulFunctionCall","src":"17772:30:201"},"nodeType":"YulExpressionStatement","src":"17772:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17822:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17833:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17818:3:201"},"nodeType":"YulFunctionCall","src":"17818:18:201"},{"hexValue":"475076323a206661696c6564207472616e7366657246726f6d","kind":"string","nodeType":"YulLiteral","src":"17838:27:201","type":"","value":"GPv2: failed transferFrom"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17811:6:201"},"nodeType":"YulFunctionCall","src":"17811:55:201"},"nodeType":"YulExpressionStatement","src":"17811:55:201"},{"nodeType":"YulAssignment","src":"17875:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17887:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17898:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17883:3:201"},"nodeType":"YulFunctionCall","src":"17883:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17875:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17709:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17723:4:201","type":""}],"src":"17558:349:201"}]},"contents":"{\n    { }\n    function allocate_memory() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x0180)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_enum_InterestRateMode(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(lt(value, 3)) { revert(0, 0) }\n    }\n    function abi_decode_uint16(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_bool(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_bool(value)\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$t_struct$_UserConfigurationMap_$21322_storage_ptrt_struct$_ExecuteBorrowParams_$21433_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 512) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        let _2 := 0x0180\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80), _2) { revert(0, 0) }\n        let value := allocate_memory()\n        mstore(value, abi_decode_address(add(headStart, 128)))\n        mstore(add(value, 32), abi_decode_address(add(headStart, 160)))\n        mstore(add(value, 64), abi_decode_address(add(headStart, 192)))\n        mstore(add(value, 96), calldataload(add(headStart, 224)))\n        let _3 := 256\n        mstore(add(value, 128), abi_decode_enum_InterestRateMode(add(headStart, _3)))\n        let _4 := 288\n        mstore(add(value, 160), abi_decode_uint16(add(headStart, _4)))\n        let _5 := 320\n        mstore(add(value, 192), abi_decode_bool(add(headStart, _5)))\n        let _6 := 352\n        mstore(add(value, 224), calldataload(add(headStart, _6)))\n        mstore(add(value, _3), calldataload(add(headStart, _2)))\n        mstore(add(value, _4), abi_decode_address(add(headStart, 416)))\n        mstore(add(value, _5), abi_decode_uint8(add(headStart, 448)))\n        mstore(add(value, _6), abi_decode_address(add(headStart, 480)))\n        value4 := value\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_struct$_UserConfigurationMap_$21322_storage_ptrt_struct$_ExecuteRepayParams_$21445_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 256) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0), 0xa0) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xa0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n        mstore(memPtr, abi_decode_address(add(headStart, 96)))\n        mstore(add(memPtr, 32), calldataload(add(headStart, 128)))\n        mstore(add(memPtr, 64), abi_decode_enum_InterestRateMode(add(headStart, 0xa0)))\n        mstore(add(memPtr, 96), abi_decode_address(add(headStart, 192)))\n        let value := calldataload(add(headStart, 224))\n        validator_revert_bool(value)\n        mstore(add(memPtr, 128), value)\n        value3 := memPtr\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_struct$_ReserveData_$21315_storage_ptrt_addresst_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := abi_decode_address(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_struct$_ReserveData_$21315_storage_ptrt_struct$_UserConfigurationMap_$21322_storage_ptrt_addresst_enum$_InterestRateMode_$21337(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := abi_decode_address(add(headStart, 64))\n        value3 := abi_decode_enum_InterestRateMode(add(headStart, 96))\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_decode_tuple_t_boolt_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_boolt_uint256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n        value1 := mload(add(headStart, 32))\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint256(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, exponent)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_enum_InterestRateMode(value, pos)\n    {\n        if iszero(lt(value, 3))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x21)\n            revert(0, 0x24)\n        }\n        mstore(pos, value)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_enum$_InterestRateMode_$21337_t_uint256__to_t_address_t_uint256_t_uint8_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        abi_encode_enum_InterestRateMode(value2, add(headStart, 64))\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_decode_tuple_t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_uint256_t_bool__to_t_uint256_t_bool__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_uint128__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, 0xffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_enum$_InterestRateMode_$21337__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        abi_encode_enum_InterestRateMode(value0, headStart)\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        let value := mload(add(headStart, 96))\n        if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n        value3 := value\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 288)\n        mstore(headStart, mload(value0))\n        mstore(add(headStart, 0x20), mload(add(value0, 0x20)))\n        mstore(add(headStart, 0x40), mload(add(value0, 0x40)))\n        mstore(add(headStart, 0x60), mload(add(value0, 0x60)))\n        mstore(add(headStart, 0x80), mload(add(value0, 0x80)))\n        mstore(add(headStart, 0xa0), mload(add(value0, 0xa0)))\n        mstore(add(headStart, 0xc0), mload(add(value0, 0xc0)))\n        let memberValue0 := mload(add(value0, 0xe0))\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 0xe0), and(memberValue0, _1))\n        let _2 := 0x0100\n        mstore(add(headStart, _2), and(mload(add(value0, _2)), _1))\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_t_rational_0_by_1__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function checked_sub_t_uint128(x, y) -> diff\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"GPv2: failed transferFrom\")\n        tail := add(headStart, 96)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c80631e6473f91461005b57806340e95de61461007d5780636973f744146100af578063eac4d703146100cf575b600080fd5b81801561006757600080fd5b5061007b610076366004614cc6565b6100ef565b005b81801561008957600080fd5b5061009d610098366004614e02565b610773565b60405190815260200160405180910390f35b8180156100bb57600080fd5b5061007b6100ca366004614f02565b610cd9565b8180156100db57600080fd5b5061007b6100ea366004614f3e565b610f6d565b805173ffffffffffffffffffffffffffffffffffffffff1660009081526020869052604081209061011f8261131d565b905061012b8282611536565b6040805160208101909152845481526000908190819061014c908b8b6115c1565b92509250925061027c8a8a8a604051806101c001604052808981526020018c60405180602001604052908160008201548152505081526020018b6000015173ffffffffffffffffffffffffffffffffffffffff1681526020018b6040015173ffffffffffffffffffffffffffffffffffffffff1681526020018b6060015181526020018b6080015160028111156101e5576101e5614f84565b81526020018b60e0015181526020018b610100015181526020018b610120015173ffffffffffffffffffffffffffffffffffffffff1681526020018b610140015160ff1681526020018b610160015173ffffffffffffffffffffffffffffffffffffffff16815260200188151581526020018773ffffffffffffffffffffffffffffffffffffffff16815260200186815250611679565b60008060018860800151600281111561029757610297614f84565b141561038657600387015461020087015160208a01516040808c015160608d015191517fb3f1c93d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384166004820152908316602482015260448101919091526fffffffffffffffffffffffffffffffff909316606484018190529450169063b3f1c93d906084016060604051808303816000875af1158015610351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103759190614fb3565b60a089015260c0880152905061044f565b61022086015160208901516040808b015160608c01516101408b015192517fb3f1c93d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff948516600482015291841660248301526044820152606481019190915291169063b3f1c93d9060840160408051808303816000875af1158015610423573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104479190614fea565b602088015290505b8015610484576003870154610484908a907501000000000000000000000000000000000000000000900461ffff16600161259c565b84156105af576101c0860151516000906104ca9060029060301c60ff166104ab9190615047565b6104b690600a61517e565b8a606001516104c591906151b9565b612617565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260208f90526040812060090180549091906105149084906fffffffffffffffffffffffffffffffff166151f4565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790556fffffffffffffffffffffffffffffffff1690508473ffffffffffffffffffffffffffffffffffffffff167faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5826040516105a591815260200190565b60405180910390a2505b6105da86896000015160008b60c001516105ca5760006105d0565b8b606001515b8b939291906126a3565b8760c001511561067e576101e0860151602089015160608a01516040517f4efecaa500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810191909152911690634efecaa590604401600060405180830381600087803b15801561066557600080fd5b505af1158015610679573d6000803e3d6000fd5b505050505b8760a0015161ffff16886040015173ffffffffffffffffffffffffffffffffffffffff16896000015173ffffffffffffffffffffffffffffffffffffffff167fb3d084820fb1a9decffb176436bd02558d15fac9b0ddfed8c465bc7359d7dce08b602001518c606001518d608001516001600281111561070057610700614f84565b8f60800151600281111561071657610716614f84565b1461074b5760028e015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1661074d565b885b60405161075d9493929190615263565b60405180910390a4505050505050505050505050565b805173ffffffffffffffffffffffffffffffffffffffff166000908152602085905260408120816107a38261131d565b90506107af8282611536565b6000806107c08660600151846129e4565b915091506107de838760200151886040015189606001518686612b21565b60006001876040015160028111156107f8576107f8614f84565b146108035781610805565b825b90508660800151801561083b57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8760200151145b156108db576101e08401516040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa1580156108b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d591906152a3565b60208801525b80876020015110156108ee575060208601515b60018760400151600281111561090657610906614f84565b14156109be5761020084015160608801516040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260248101849052911690639dc29fac9060440160408051808303816000875af115801561098b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109af91906152bc565b60a086015260c0850152610a76565b61022084015160608801516101408601516040517ff5298aca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101859052604481019190915291169063f5298aca906064016020604051808303816000875af1158015610a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7091906152a3565b60208501525b610a9c8488600001518960800151610a8e5783610a91565b60005b8892919060006126a3565b80610aa783856152e0565b610ab19190615047565b610ae4576003850154610ae49089907501000000000000000000000000000000000000000000900461ffff16600061259c565b610af18a8a8a8785612db7565b866080015115610ba2576101e08401516101008501516040517fd7020d0a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909216602483018190526044830184905260648301919091529063d7020d0a90608401600060405180830381600087803b158015610b8557600080fd5b505af1158015610b99573d6000803e3d6000fd5b50505050610c69565b6101e08401518751610bcf9173ffffffffffffffffffffffffffffffffffffffff90911690339084612fb9565b6101e084015160608801516040517f6fd9767600000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff918216602482015260448101849052911690636fd9767690606401600060405180830381600087803b158015610c5057600080fd5b505af1158015610c64573d6000803e3d6000fd5b505050505b606087015187516080890151604080518581529115156020830152339373ffffffffffffffffffffffffffffffffffffffff9081169316917fa534c8dbe71f871f9f3530e97a74601fea17b426cae02e1c5aee42c96c784051910160405180910390a49998505050505050505050565b6000610ce48461131d565b9050610cf08482611536565b610cfb84828561307a565b6102008101516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600091908316906370a0823190602401602060405180830381865afa158015610d71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9591906152a3565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820183905291925090831690639dc29fac9060440160408051808303816000875af1158015610e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3191906152bc565b505060038601546040517fb3f1c93d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483018190526024830152604482018490526fffffffffffffffffffffffffffffffff90921660648201529083169063b3f1c93d906084016060604051808303816000875af1158015610ece573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef29190614fb3565b60a086015260c085015250610f0b8684876000806126a3565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f9f439ae0c81e41a04d3fdfe07aed54e6a179fb0db15be7702eb66fa8ef6f530060405160405180910390a3505050505050565b6000610f788561131d565b9050610f848582611536565b600080610f9133846129e4565b91509150610fa3878488858589613482565b6001846002811115610fb757610fb7614f84565b1415611121576102008301516040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810184905273ffffffffffffffffffffffffffffffffffffffff90911690639dc29fac9060440160408051808303816000875af1158015611036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105a91906152bc565b60a085015260c08401526102208301516101408401516040517fb3f1c93d0000000000000000000000000000000000000000000000000000000081523360048201819052602482015260448101859052606481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063b3f1c93d9060840160408051808303816000875af11580156110f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111169190614fea565b6020850152506112a1565b6102208301516101408401516040517ff5298aca00000000000000000000000000000000000000000000000000000000815233600482015260248101849052604481019190915273ffffffffffffffffffffffffffffffffffffffff9091169063f5298aca906064016020604051808303816000875af11580156111a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cd91906152a3565b602084015261020083015160038801546040517fb3f1c93d00000000000000000000000000000000000000000000000000000000815233600482018190526024820152604481018490526fffffffffffffffffffffffffffffffff909116606482015273ffffffffffffffffffffffffffffffffffffffff9091169063b3f1c93d906084016060604051808303816000875af1158015611271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190614fb3565b60a086015260c0850152505b6112af8784876000806126a3565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f7962b394d85a534033ba2efcf43cd36de57b7ebeb3de0ca4428965d9b3ddc4818660405161130c91906152f8565b60405180910390a350505050505050565b611325614b51565b61132d614b51565b60408051602081018252845481526101c0830181905251901c61ffff166101a082015260018301546fffffffffffffffffffffffffffffffff808216610100840181905260e0840152600285015480821661014085018190526101208501527001000000000000000000000000000000009283900482166101608501528290041661018083015260048085015473ffffffffffffffffffffffffffffffffffffffff9081166101e085015260058601548116610200850152600686015416610220840181905260038601549290920464ffffffffff16610240840152604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905163b1bf962d928281019260209291908290030181865afa15801561145a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147e91906152a3565b816020018181525081600001818152505080610200015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa1580156114df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115039190615306565b64ffffffffff166102608501526060840181905260808401829052604084019290925260c083015260a082015292915050565b60038201544264ffffffffff908116700100000000000000000000000000000000909204161415611565575050565b61156f82826138b2565b61157982826139d3565b5060030180547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff1602179055565b60008060006115cf86613b53565b15611666576000611600877faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa613b9a565b6000818152602087815260408083205473ffffffffffffffffffffffffffffffffffffffff168084528a8352818420825193840190925290549182905292935060d41c64ffffffffff1690508015611662576001955090935091506116709050565b5050505b5060009150819050805b93509350939050565b608081015160408051808201909152600281527f32360000000000000000000000000000000000000000000000000000000000006020820152906116d95760405162461bcd60e51b81526004016116d09190615351565b60405180910390fd5b506117ae604051806102800160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581526020016000151581526020016000151581526020016000151581526020016000151581525090565b81516101c09081015151671000000000000000811615156102008401526708000000000000008116151561024084015267040000000000000081161515610220840152670200000000000000811615156101e084015267010000000000000016151590820181905260408051808201909152600281527f32370000000000000000000000000000000000000000000000000000000000006020820152906118685760405162461bcd60e51b81526004016116d09190615351565b50806102000151156040518060400160405280600281526020017f3239000000000000000000000000000000000000000000000000000000000000815250906118c45760405162461bcd60e51b81526004016116d09190615351565b50806101e00151156040518060400160405280600281526020017f3238000000000000000000000000000000000000000000000000000000000000815250906119205760405162461bcd60e51b81526004016116d09190615351565b508061022001516040518060400160405280600281526020017f33300000000000000000000000000000000000000000000000000000000000008152509061197b5760405162461bcd60e51b81526004016116d09190615351565b5061014082015173ffffffffffffffffffffffffffffffffffffffff161580611a13575081610140015173ffffffffffffffffffffffffffffffffffffffff166349aa2e816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1391906153c4565b6040518060400160405280600281526020017f353900000000000000000000000000000000000000000000000000000000000081525090611a675760405162461bcd60e51b81526004016116d09190615351565b5060028260a001516002811115611a8057611a80614f84565b1480611aa1575060018260a001516002811115611a9f57611a9f614f84565b145b6040518060400160405280600281526020017f333300000000000000000000000000000000000000000000000000000000000081525090611af55760405162461bcd60e51b81526004016116d09190615351565b5081516101c001515160301c60ff1661010082015281516101c001515160501c640fffffffff166101208201819052610100820151600a0a61016083015215611bde5781516101408101519051611b4b91613be9565b60e082018190526080808401518451909101519091611b69916152e0565b611b7391906152e0565b60c0820181905261016082015161012083015160408051808201909152600281527f353000000000000000000000000000000000000000000000000000000000000060208201529291021015611bdc5760405162461bcd60e51b81526004016116d09190615351565b505b81610160015115611d3b5781516101c00151516720000000000000001615156040518060400160405280600281526020017f363000000000000000000000000000000000000000000000000000000000000081525090611c515760405162461bcd60e51b81526004016116d09190615351565b50816101a00151611c876002836101000151611c6d9190615047565b611c7890600a61517e565b84608001516104c591906151b9565b61018084015173ffffffffffffffffffffffffffffffffffffffff16600090815260208890526040902060090154611cd191906fffffffffffffffffffffffffffffffff166151f4565b6fffffffffffffffffffffffffffffffff1611156040518060400160405280600281526020017f353300000000000000000000000000000000000000000000000000000000000081525090611d395760405162461bcd60e51b81526004016116d09190615351565b505b61012082015160ff1615611df95761012082015182516101c001515160ff9182169160a89190911c16146040518060400160405280600281526020017f353800000000000000000000000000000000000000000000000000000000000081525090611db95760405162461bcd60e51b81526004016116d09190615351565b5061012082015160ff166000908152602084905260409020546601000000000000900473ffffffffffffffffffffffffffffffffffffffff166101808201525b611e708585856040518060a00160405280876020015181526020018760e001518152602001876060015173ffffffffffffffffffffffffffffffffffffffff16815260200187610100015173ffffffffffffffffffffffffffffffffffffffff16815260200187610120015160ff16815250613c40565b5060a0860152508352606083015260408083018290528051808201909152600281527f3334000000000000000000000000000000000000000000000000000000000000602082015290611ed65760405162461bcd60e51b81526004016116d09190615351565b50805160408051808201909152600281527f3537000000000000000000000000000000000000000000000000000000000000602082015290611f2b5760405162461bcd60e51b81526004016116d09190615351565b50670de0b6b3a76400008160a00151116040518060400160405280600281526020017f333500000000000000000000000000000000000000000000000000000000000081525090611f8f5760405162461bcd60e51b81526004016116d09190615351565b50816080015182610100015173ffffffffffffffffffffffffffffffffffffffff1663b3596f07600073ffffffffffffffffffffffffffffffffffffffff1684610180015173ffffffffffffffffffffffffffffffffffffffff161415611ffa578460400151612001565b8361018001515b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801561206a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208e91906152a3565b61209891906153e1565b6101408201818152610160830151918290816120b6576120b661518a565b04905250805161014082015160608301516120db92916120d5916152e0565b906141aa565b60208083018290526040808401518151808301909252600282527f33360000000000000000000000000000000000000000000000000000000000009282019290925291111561213d5760405162461bcd60e51b81526004016116d09190615351565b5060018260a00151600281111561215657612156614f84565b1415612436578061024001516040518060400160405280600281526020017f3331000000000000000000000000000000000000000000000000000000000000815250906121b65760405162461bcd60e51b81526004016116d09190615351565b5060408281015173ffffffffffffffffffffffffffffffffffffffff1660009081526020878152919020600301549083015161220e917501000000000000000000000000000000000000000000900461ffff166141d5565b1580612223575081516101c001515161ffff16155b806122cc575081516101e0015160608301516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116906370a0823190602401602060405180830381865afa1580156122a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c591906152a3565b8260800151115b6040518060400160405280600281526020017f3337000000000000000000000000000000000000000000000000000000000000815250906123205760405162461bcd60e51b81526004016116d09190615351565b5060408281015183516101e0015191517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116906370a0823190602401602060405180830381865afa158015612399573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123bd91906152a3565b6080820181905260c08301516000916123d59161423f565b905080836080015111156040518060400160405280600281526020017f3338000000000000000000000000000000000000000000000000000000000000815250906124335760405162461bcd60e51b81526004016116d09190615351565b50505b6020820151517f55555555555555555555555555555555555555555555555555555555555555551615612595576020820151612473908686614282565b73ffffffffffffffffffffffffffffffffffffffff166101a083015215801561026083015261252e57816040015173ffffffffffffffffffffffffffffffffffffffff16816101a0015173ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f3839000000000000000000000000000000000000000000000000000000000000815250906125285760405162461bcd60e51b81526004016116d09190615351565b50612595565b81516101c001515160408051808201909152600281527f383900000000000000000000000000000000000000000000000000000000000060208201529067400000000000000016156125935760405162461bcd60e51b81526004016116d09190615351565b505b5050505050565b60408051808201909152600281527f37340000000000000000000000000000000000000000000000000000000000006020820152608083106125f15760405162461bcd60e51b81526004016116d09190615351565b50600182811b1b811561260957835481178455612611565b835481191684555b50505050565b60006fffffffffffffffffffffffffffffffff82111561269f5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f323820626974730000000000000000000000000000000000000000000000000060648201526084016116d0565b5090565b6126ce6040518060800160405280600081526020016000815260200160008152602001600081525090565b61014085015160208601516126e291613be9565b60608083019182526007880154604080516101208101825260088b01546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000009091041681526020810188905280820187905260c0808b0151948201949094529351608085015260a0808a0151908501526101a08901519284019290925273ffffffffffffffffffffffffffffffffffffffff87811660e08501526101e0890151811661010085015291517fa589870900000000000000000000000000000000000000000000000000000000815291169163a5898709916128439190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa158015612860573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612884919061541e565b6040840152602083015280825261289a90612617565b6001870180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905560208101516128dd90612617565b6003870180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055604081015161292e90612617565b6002870180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905580516020808301516040808501516101008a01516101408b0151835196875294860193909352908401526060830152608082015273ffffffffffffffffffffffffffffffffffffffff8516907f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a9060a00160405180910390a2505050505050565b6102008101516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260009283929116906370a0823190602401602060405180830381865afa158015612a5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a7f91906152a3565b6102208401516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152909116906370a0823190602401602060405180830381865afa158015612af2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1691906152a3565b915091509250929050565b60408051808201909152600281527f3236000000000000000000000000000000000000000000000000000000000000602082015285612b735760405162461bcd60e51b81526004016116d09190615351565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85141580612bb857503373ffffffffffffffffffffffffffffffffffffffff8416145b6040518060400160405280600281526020017f343000000000000000000000000000000000000000000000000000000000000081525090612c0c5760405162461bcd60e51b81526004016116d09190615351565b50600080612c61886101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b94505050509150816040518060400160405280600281526020017f323700000000000000000000000000000000000000000000000000000000000081525090612cbd5760405162461bcd60e51b81526004016116d09190615351565b5060408051808201909152600281527f323900000000000000000000000000000000000000000000000000000000000060208201528115612d115760405162461bcd60e51b81526004016116d09190615351565b508315801590612d3257506001866002811115612d3057612d30614f84565b145b80612d5857508215801590612d5857506002866002811115612d5657612d56614f84565b145b6040518060400160405280600281526020017f333900000000000000000000000000000000000000000000000000000000000081525090612dac5760405162461bcd60e51b81526004016116d09190615351565b505050505050505050565b6040805160208101909152835481526000908190612dd69088886115c1565b50915091508115612fb05773ffffffffffffffffffffffffffffffffffffffff81166000908152602088905260408120600901546101c0860151516fffffffffffffffffffffffffffffffff9091169190612e539060029060301c60ff16612e3e9190615047565b612e4990600a61517e565b6104c590876151b9565b9050806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff1611612f035773ffffffffffffffffffffffffffffffffffffffff8316600081815260208b8152604080832060090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055519182527faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5910160405180910390a2612dac565b6000612f0f828461544c565b73ffffffffffffffffffffffffffffffffffffffff8516600081815260208d815260409182902060090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff959095169485179055905183815292935090917faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5910160405180910390a25050505b50505050505050565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af1613024573d6000803e3d6000fd5b5061302e8561432e565b6125955760405162461bcd60e51b815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d0000000000000060448201526064016116d0565b6000806130ce846101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b94505050509150816040518060400160405280600281526020017f32370000000000000000000000000000000000000000000000000000000000008152509061312a5760405162461bcd60e51b81526004016116d09190615351565b5060408051808201909152600281527f32390000000000000000000000000000000000000000000000000000000000006020820152811561317e5760405162461bcd60e51b81526004016116d09190615351565b50600084610220015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131f591906152a3565b85610200015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613245573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061326991906152a3565b61327391906152e0565b6007870154604080516101208101825260088a01546fffffffffffffffffffffffffffffffff700100000000000000000000000000000000909104168152600060208201819052818301819052606082018190526080820185905260a082018190526101a08a015160c083015273ffffffffffffffffffffffffffffffffffffffff89811660e08401526101e08b0151811661010084015292517fa589870900000000000000000000000000000000000000000000000000000000815294955093919092169163a5898709916133c99190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa1580156133e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061340a919061541e565b5090915061341c90508161232861423f565b86610160015111156040518060400160405280600281526020017f3434000000000000000000000000000000000000000000000000000000000000815250906134785760405162461bcd60e51b81526004016116d09190615351565b5050505050505050565b6000806000806134d9896101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b945094505093509350836040518060400160405280600281526020017f3237000000000000000000000000000000000000000000000000000000000000815250906135375760405162461bcd60e51b81526004016116d09190615351565b5060408051808201909152600281527f32390000000000000000000000000000000000000000000000000000000000006020820152811561358b5760405162461bcd60e51b81526004016116d09190615351565b5060408051808201909152600281527f3238000000000000000000000000000000000000000000000000000000000000602082015283156135df5760405162461bcd60e51b81526004016116d09190615351565b5060018560028111156135f4576135f4614f84565b14156136525760408051808201909152600281527f343100000000000000000000000000000000000000000000000000000000000060208201528761364c5760405162461bcd60e51b81526004016116d09190615351565b506138a6565b600285600281111561366657613666614f84565b141561385b5760408051808201909152600281527f34320000000000000000000000000000000000000000000000000000000000006020820152866136be5760405162461bcd60e51b81526004016116d09190615351565b5060408051808201909152600281527f33310000000000000000000000000000000000000000000000000000000000006020820152826137115760405162461bcd60e51b81526004016116d09190615351565b5060038a015460408051602081019091528954815261374c917501000000000000000000000000000000000000000000900461ffff166141d5565b158061376057506101c08901515161ffff16155b8061380757506101e08901516040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa1580156137d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137fb91906152a3565b61380587896152e0565b115b6040518060400160405280600281526020017f33370000000000000000000000000000000000000000000000000000000000008152509061364c5760405162461bcd60e51b81526004016116d09190615351565b604080518082018252600281527f33330000000000000000000000000000000000000000000000000000000000006020820152905162461bcd60e51b81526116d09190600401615351565b50505050505050505050565b610160810151156139425760006138d38261016001518361024001516143e0565b90506138ec8260e0015182613be990919063ffffffff16565b61010083018190526138fd90612617565b6001840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b8051156139cf57600061395f826101800151836102400151614425565b905061397982610120015182613be990919063ffffffff16565b610140830181905261398a90612617565b6002840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b5050565b613a0c6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6101a0820151613a1b57505050565b6101208201518251613a2c91613be9565b60208201526101408201518251613a4291613be9565b60408201526060820151610260830151610240840151613a6a92919064ffffffffff1661442e565b606082018190526040830151613a7f91613be9565b808252602082015160808401516040840151613a9b91906152e0565b613aa59190615047565b613aaf9190615047565b608082018190526101a0830151613ac6919061423f565b60a0820181905215613b4e57613af16104c58361010001518360a0015161457590919063ffffffff16565b600884018054600090613b179084906fffffffffffffffffffffffffffffffff166151f4565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b505050565b80516000907faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa168015801590613b935750613b8f600182615047565b8116155b9392505050565b815160009082167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101198116825b60029190911c908115613bde57600101613bc9565b925050505b92915050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517613c1e57600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b600080600080600080613c568760000151511590565b15613c925750600094508493508392508291507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90508161419d565b613d4160405180610260016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581525090565b608088015160ff1615613d8657608088015160ff16600090815260208a9052604090206060890151613d7391906145b4565b6101808401526101c08301526101a08201525b87602001518160c0015110156140a55760c08101518851613da691614693565b613dba5760c0810180516001019052613d86565b60c0810151600090815260208b9052604090205473ffffffffffffffffffffffffffffffffffffffff166102008201819052613e005760c0810180516001019052613d86565b61020081015173ffffffffffffffffffffffffffffffffffffffff16600090815260208c8152604091829020825180830190935280549283905260ff60a884901c81166101e0860152603084901c166060850181905261ffff601085901c811660a08701529093166080850152600a9290920a9083015261018082015115801590613e965750816101e00151896080015160ff16145b613f3a5760608901516102008301516040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063b3596f0790602401602060405180830381865afa158015613f11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f3591906152a3565b613f41565b8161018001515b825260a082015115801590613f61575060c08201518951613f61916141d5565b1561405157613f7e896040015182846000015185602001516146fe565b6040830181905261010083018051613f979083906152e0565b90525060808901516101e0830151613fb29160ff16906147dd565b151561024083015260808201511561400857816102400151613fd8578160800151613fdf565b816101a001515b8260400151613fee91906153e1565b826101400181815161400091906152e0565b905250614011565b60016102208301525b816102400151614025578160a0015161402c565b816101c001515b826040015161403b91906153e1565b826101600181815161404d91906152e0565b9052505b60c08201518951614061916147ee565b156140945761407e89604001518284600001518560200151614856565b826101200181815161409091906152e0565b9052505b5060c0810180516001019052613d86565b6101008101516140b65760006140d1565b806101000151816101400151816140cf576140cf61518a565b045b6101408201526101008101516140e8576000614103565b806101000151816101600151816141015761410161518a565b045b610160820152610120810151156141455761414081610120015161413a83610160015184610100015161423f90919063ffffffff16565b906149d6565b614167565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b60e0820181905261010082015161012083015161014084015161016085015161022090950151929a509098509650919450925090505b9499939850945094509450565b60008115612710600284041904841117156141c457600080fd5b506127109190910260028204010490565b60408051808201909152600281527f373400000000000000000000000000000000000000000000000000000000000060208201526000906080831061422d5760405162461bcd60e51b81526004016116d09190615351565b50509051600191821b82011c16151590565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec778390048411151761427457600080fd5b506127109102611388010490565b60008061428e85614a0d565b1561431f5760006142bf867f5555555555555555555555555555555555555555555555555555555555555555613b9a565b6000818152602086815260408083205473ffffffffffffffffffffffffffffffffffffffff16808452898352928190208151928301909152549081905291925090674000000000000000161561431c576001935091506143269050565b50505b5060009050805b935093915050565b6000614354565b62461bcd60e51b60005260206004528060245250806044525060646000fd5b3d801561439357602081146143cd5761438e7f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f614335565b6143da565b823b6143c4576143c47f475076323a206e6f74206120636f6e74726163740000000000000000000000006014614335565b600191506143da565b3d6000803e600051151591505b50919050565b6000806143f464ffffffffff841642615047565b6143fe90856153e1565b6301e133809004905061441d816b033b2e3c9fd0803ce80000006152e0565b949350505050565b6000613b938383425b60008061444264ffffffffff851684615047565b90508061445e576b033b2e3c9fd0803ce8000000915050613b93565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511614494576000614499565b600285035b925066038882915c40006144ad8a80613be9565b816144ba576144ba61518a565b0491506301e133806144cc838b613be9565b816144d9576144d961518a565b0490506000826144e986886153e1565b6144f391906153e1565b60029004905060008285614507888a6153e1565b61451191906153e1565b61451b91906153e1565b60069004905080826301e133806145328a8f6153e1565b61453c91906151b9565b614552906b033b2e3c9fd0803ce80000006152e0565b61455c91906152e0565b61456691906152e0565b9b9a5050505050505050505050565b600081156b033b2e3c9fd0803ce80000006002840419048411171561459957600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b81546000908190819081906601000000000000900473ffffffffffffffffffffffffffffffffffffffff168015614678576040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015287169063b3596f0790602401602060405180830381865afa158015614651573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061467591906152a3565b91505b50945461ffff80821697620100009092041695945092505050565b60408051808201909152600281527f37340000000000000000000000000000000000000000000000000000000000006020820152600090608083106146eb5760405162461bcd60e51b81526004016116d09190615351565b5050905160019190911b1c600316151590565b60008061470a85614a49565b6004868101546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81169382019390935292935060009287926147b6928692911690631da24f3e90602401602060405180830381865afa15801561478c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147b091906152a3565b90613be9565b6147c091906153e1565b90508381816147d1576147d161518a565b04979650505050505050565b60008215801590613b935750501490565b60408051808201909152600281527f37340000000000000000000000000000000000000000000000000000000000006020820152600090608083106148465760405162461bcd60e51b81526004016116d09190615351565b50509051600191821b1c16151590565b60068301546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000928392911690631da24f3e90602401602060405180830381865afa1580156148cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148f091906152a3565b9050801561490e5761490b61490486614acd565b8290613be9565b90505b60058501546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152909116906370a0823190602401602060405180830381865afa158015614980573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149a491906152a3565b6149ae90826152e0565b90506149ba81856153e1565b90508281816149cb576149cb61518a565b049695505050505050565b60008115670de0b6b3a7640000600284041904841117156149f657600080fd5b50670de0b6b3a76400009190910260028204010490565b80516000907f5555555555555555555555555555555555555555555555555555555555555555168015801590613b935750613b8f600182615047565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415614a8f575050600101546fffffffffffffffffffffffffffffffff1690565b6001830154613b93906fffffffffffffffffffffffffffffffff808216916147b09170010000000000000000000000000000000090910416846143e0565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415614b13575050600201546fffffffffffffffffffffffffffffffff1690565b6002830154613b93906fffffffffffffffffffffffffffffffff808216916147b0917001000000000000000000000000000000009091041684614425565b6040518061028001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001614bd56040518060200160405280600081525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b604051610180810167ffffffffffffffff81118282101715614c49577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803573ffffffffffffffffffffffffffffffffffffffff81168114614c7357600080fd5b919050565b803560038110614c7357600080fd5b803561ffff81168114614c7357600080fd5b8015158114614ca757600080fd5b50565b8035614c7381614c99565b803560ff81168114614c7357600080fd5b6000806000806000858703610200811215614ce057600080fd5b86359550602087013594506040870135935060608701359250610180807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083011215614d2b57600080fd5b614d33614bfe565b9150614d4160808901614c4f565b8252614d4f60a08901614c4f565b6020830152614d6060c08901614c4f565b604083015260e08801356060830152610100614d7d818a01614c78565b6080840152610120614d90818b01614c87565b60a0850152610140614da3818c01614caa565b60c0860152610160808c013560e0870152848c013584870152614dc96101a08d01614c4f565b83870152614dda6101c08d01614cb5565b82870152614deb6101e08d01614c4f565b818701525050505050809150509295509295909350565b600080600080848603610100811215614e1a57600080fd5b85359450602086013593506040860135925060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa082011215614e5c57600080fd5b5060405160a0810181811067ffffffffffffffff82111715614ea7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052614eb660608701614c4f565b815260808601356020820152614ece60a08701614c78565b6040820152614edf60c08701614c4f565b606082015260e0860135614ef281614c99565b6080820152939692955090935050565b600080600060608486031215614f1757600080fd5b83359250614f2760208501614c4f565b9150614f3560408501614c4f565b90509250925092565b60008060008060808587031215614f5457600080fd5b8435935060208501359250614f6b60408601614c4f565b9150614f7960608601614c78565b905092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080600060608486031215614fc857600080fd5b8351614fd381614c99565b602085015160409095015190969495509392505050565b60008060408385031215614ffd57600080fd5b825161500881614c99565b6020939093015192949293505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561505957615059615018565b500390565b600181815b808511156150b757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561509d5761509d615018565b808516156150aa57918102915b93841c9390800290615063565b509250929050565b6000826150ce57506001613be3565b816150db57506000613be3565b81600181146150f157600281146150fb57615117565b6001915050613be3565b60ff84111561510c5761510c615018565b50506001821b613be3565b5060208310610133831016604e8410600b841016171561513a575081810a613be3565b615144838361505e565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561517657615176615018565b029392505050565b6000613b9383836150bf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826151ef577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561521f5761521f615018565b01949350505050565b6003811061525f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff8516815260208101849052608081016152946040830185615228565b82606083015295945050505050565b6000602082840312156152b557600080fd5b5051919050565b600080604083850312156152cf57600080fd5b505080516020909101519092909150565b600082198211156152f3576152f3615018565b500190565b60208101613be38284615228565b6000806000806080858703121561531c57600080fd5b845193506020850151925060408501519150606085015164ffffffffff8116811461534657600080fd5b939692955090935050565b600060208083528351808285015260005b8181101561537e57858101830151858201604001528201615362565b81811115615390576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156153d657600080fd5b8151613b9381614c99565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561541957615419615018565b500290565b60008060006060848603121561543357600080fd5b8351925060208401519150604084015190509250925092565b60006fffffffffffffffffffffffffffffffff8381169083168181101561547557615475615018565b03939250505056fea26469706673582212200cf2e507b48625b462ed197608997c2204d999a24a36ca801ca20b43e9f4039364736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x56 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1E6473F9 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0x40E95DE6 EQ PUSH2 0x7D JUMPI DUP1 PUSH4 0x6973F744 EQ PUSH2 0xAF JUMPI DUP1 PUSH4 0xEAC4D703 EQ PUSH2 0xCF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0x76 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CC6 JUMP JUMPDEST PUSH2 0xEF JUMP JUMPDEST STOP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9D PUSH2 0x98 CALLDATASIZE PUSH1 0x4 PUSH2 0x4E02 JUMP JUMPDEST PUSH2 0x773 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0xCA CALLDATASIZE PUSH1 0x4 PUSH2 0x4F02 JUMP JUMPDEST PUSH2 0xCD9 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0xEA CALLDATASIZE PUSH1 0x4 PUSH2 0x4F3E JUMP JUMPDEST PUSH2 0xF6D JUMP JUMPDEST DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x11F DUP3 PUSH2 0x131D JUMP JUMPDEST SWAP1 POP PUSH2 0x12B DUP3 DUP3 PUSH2 0x1536 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP5 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH2 0x14C SWAP1 DUP12 DUP12 PUSH2 0x15C1 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH2 0x27C DUP11 DUP11 DUP11 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1C0 ADD PUSH1 0x40 MSTORE DUP1 DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0x60 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0x80 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1E5 JUMPI PUSH2 0x1E5 PUSH2 0x4F84 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0xE0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH2 0x100 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH2 0x120 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH2 0x140 ADD MLOAD PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH2 0x160 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE POP PUSH2 0x1679 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1 DUP9 PUSH1 0x80 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x297 JUMPI PUSH2 0x297 PUSH2 0x4F84 JUMP JUMPDEST EQ ISZERO PUSH2 0x386 JUMPI PUSH1 0x3 DUP8 ADD SLOAD PUSH2 0x200 DUP8 ADD MLOAD PUSH1 0x20 DUP11 ADD MLOAD PUSH1 0x40 DUP1 DUP13 ADD MLOAD PUSH1 0x60 DUP14 ADD MLOAD SWAP2 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND PUSH1 0x64 DUP5 ADD DUP2 SWAP1 MSTORE SWAP5 POP AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x351 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x375 SWAP2 SWAP1 PUSH2 0x4FB3 JUMP JUMPDEST PUSH1 0xA0 DUP10 ADD MSTORE PUSH1 0xC0 DUP9 ADD MSTORE SWAP1 POP PUSH2 0x44F JUMP JUMPDEST PUSH2 0x220 DUP7 ADD MLOAD PUSH1 0x20 DUP10 ADD MLOAD PUSH1 0x40 DUP1 DUP12 ADD MLOAD PUSH1 0x60 DUP13 ADD MLOAD PUSH2 0x140 DUP12 ADD MLOAD SWAP3 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x423 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x447 SWAP2 SWAP1 PUSH2 0x4FEA JUMP JUMPDEST PUSH1 0x20 DUP9 ADD MSTORE SWAP1 POP JUMPDEST DUP1 ISZERO PUSH2 0x484 JUMPI PUSH1 0x3 DUP8 ADD SLOAD PUSH2 0x484 SWAP1 DUP11 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x1 PUSH2 0x259C JUMP JUMPDEST DUP5 ISZERO PUSH2 0x5AF JUMPI PUSH2 0x1C0 DUP7 ADD MLOAD MLOAD PUSH1 0x0 SWAP1 PUSH2 0x4CA SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0x4AB SWAP2 SWAP1 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x4B6 SWAP1 PUSH1 0xA PUSH2 0x517E JUMP JUMPDEST DUP11 PUSH1 0x60 ADD MLOAD PUSH2 0x4C5 SWAP2 SWAP1 PUSH2 0x51B9 JUMP JUMPDEST PUSH2 0x2617 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP16 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x514 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x51F4 JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xAEF84D3B40895FD58C561F3998000F0583ABB992A52FBDC99ACE8E8DE4D676A5 DUP3 PUSH1 0x40 MLOAD PUSH2 0x5A5 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMPDEST PUSH2 0x5DA DUP7 DUP10 PUSH1 0x0 ADD MLOAD PUSH1 0x0 DUP12 PUSH1 0xC0 ADD MLOAD PUSH2 0x5CA JUMPI PUSH1 0x0 PUSH2 0x5D0 JUMP JUMPDEST DUP12 PUSH1 0x60 ADD MLOAD JUMPDEST DUP12 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x26A3 JUMP JUMPDEST DUP8 PUSH1 0xC0 ADD MLOAD ISZERO PUSH2 0x67E JUMPI PUSH2 0x1E0 DUP7 ADD MLOAD PUSH1 0x20 DUP10 ADD MLOAD PUSH1 0x60 DUP11 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x4EFECAA500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x4EFECAA5 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x665 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x679 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST DUP8 PUSH1 0xA0 ADD MLOAD PUSH2 0xFFFF AND DUP9 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xB3D084820FB1A9DECFFB176436BD02558D15FAC9B0DDFED8C465BC7359D7DCE0 DUP12 PUSH1 0x20 ADD MLOAD DUP13 PUSH1 0x60 ADD MLOAD DUP14 PUSH1 0x80 ADD MLOAD PUSH1 0x1 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x700 JUMPI PUSH2 0x700 PUSH2 0x4F84 JUMP JUMPDEST DUP16 PUSH1 0x80 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x716 JUMPI PUSH2 0x716 PUSH2 0x4F84 JUMP JUMPDEST EQ PUSH2 0x74B JUMPI PUSH1 0x2 DUP15 ADD SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x74D JUMP JUMPDEST DUP9 JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x75D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5263 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 PUSH2 0x7A3 DUP3 PUSH2 0x131D JUMP JUMPDEST SWAP1 POP PUSH2 0x7AF DUP3 DUP3 PUSH2 0x1536 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x7C0 DUP7 PUSH1 0x60 ADD MLOAD DUP5 PUSH2 0x29E4 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x7DE DUP4 DUP8 PUSH1 0x20 ADD MLOAD DUP9 PUSH1 0x40 ADD MLOAD DUP10 PUSH1 0x60 ADD MLOAD DUP7 DUP7 PUSH2 0x2B21 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP8 PUSH1 0x40 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x7F8 JUMPI PUSH2 0x7F8 PUSH2 0x4F84 JUMP JUMPDEST EQ PUSH2 0x803 JUMPI DUP2 PUSH2 0x805 JUMP JUMPDEST DUP3 JUMPDEST SWAP1 POP DUP7 PUSH1 0x80 ADD MLOAD DUP1 ISZERO PUSH2 0x83B JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 PUSH1 0x20 ADD MLOAD EQ JUMPDEST ISZERO PUSH2 0x8DB JUMPI PUSH2 0x1E0 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8B1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8D5 SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST PUSH1 0x20 DUP9 ADD MSTORE JUMPDEST DUP1 DUP8 PUSH1 0x20 ADD MLOAD LT ISZERO PUSH2 0x8EE JUMPI POP PUSH1 0x20 DUP7 ADD MLOAD JUMPDEST PUSH1 0x1 DUP8 PUSH1 0x40 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x906 JUMPI PUSH2 0x906 PUSH2 0x4F84 JUMP JUMPDEST EQ ISZERO PUSH2 0x9BE JUMPI PUSH2 0x200 DUP5 ADD MLOAD PUSH1 0x60 DUP9 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x9DC29FAC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP5 SWAP1 MSTORE SWAP2 AND SWAP1 PUSH4 0x9DC29FAC SWAP1 PUSH1 0x44 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x98B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9AF SWAP2 SWAP1 PUSH2 0x52BC JUMP JUMPDEST PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0xA76 JUMP JUMPDEST PUSH2 0x220 DUP5 ADD MLOAD PUSH1 0x60 DUP9 ADD MLOAD PUSH2 0x140 DUP7 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xF5298ACA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND SWAP1 PUSH4 0xF5298ACA SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA4C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA70 SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE JUMPDEST PUSH2 0xA9C DUP5 DUP9 PUSH1 0x0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD PUSH2 0xA8E JUMPI DUP4 PUSH2 0xA91 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP9 SWAP3 SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x26A3 JUMP JUMPDEST DUP1 PUSH2 0xAA7 DUP4 DUP6 PUSH2 0x52E0 JUMP JUMPDEST PUSH2 0xAB1 SWAP2 SWAP1 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0xAE4 JUMPI PUSH1 0x3 DUP6 ADD SLOAD PUSH2 0xAE4 SWAP1 DUP10 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 PUSH2 0x259C JUMP JUMPDEST PUSH2 0xAF1 DUP11 DUP11 DUP11 DUP8 DUP6 PUSH2 0x2DB7 JUMP JUMPDEST DUP7 PUSH1 0x80 ADD MLOAD ISZERO PUSH2 0xBA2 JUMPI PUSH2 0x1E0 DUP5 ADD MLOAD PUSH2 0x100 DUP6 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xD7020D0A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x24 DUP4 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP4 ADD DUP5 SWAP1 MSTORE PUSH1 0x64 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 PUSH4 0xD7020D0A SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB99 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0xC69 JUMP JUMPDEST PUSH2 0x1E0 DUP5 ADD MLOAD DUP8 MLOAD PUSH2 0xBCF SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 CALLER SWAP1 DUP5 PUSH2 0x2FB9 JUMP JUMPDEST PUSH2 0x1E0 DUP5 ADD MLOAD PUSH1 0x60 DUP9 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6FD9767600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE SWAP2 AND SWAP1 PUSH4 0x6FD97676 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC64 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x60 DUP8 ADD MLOAD DUP8 MLOAD PUSH1 0x80 DUP10 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE SWAP2 ISZERO ISZERO PUSH1 0x20 DUP4 ADD MSTORE CALLER SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP4 AND SWAP2 PUSH32 0xA534C8DBE71F871F9F3530E97A74601FEA17B426CAE02E1C5AEE42C96C784051 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCE4 DUP5 PUSH2 0x131D JUMP JUMPDEST SWAP1 POP PUSH2 0xCF0 DUP5 DUP3 PUSH2 0x1536 JUMP JUMPDEST PUSH2 0xCFB DUP5 DUP3 DUP6 PUSH2 0x307A JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD71 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD95 SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x9DC29FAC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 DUP4 AND SWAP1 PUSH4 0x9DC29FAC SWAP1 PUSH1 0x44 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE0D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE31 SWAP2 SWAP1 PUSH2 0x52BC JUMP JUMPDEST POP POP PUSH1 0x3 DUP7 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP5 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP1 DUP4 AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xECE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEF2 SWAP2 SWAP1 PUSH2 0x4FB3 JUMP JUMPDEST PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xC0 DUP6 ADD MSTORE POP PUSH2 0xF0B DUP7 DUP5 DUP8 PUSH1 0x0 DUP1 PUSH2 0x26A3 JUMP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x9F439AE0C81E41A04D3FDFE07AED54E6A179FB0DB15BE7702EB66FA8EF6F5300 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF78 DUP6 PUSH2 0x131D JUMP JUMPDEST SWAP1 POP PUSH2 0xF84 DUP6 DUP3 PUSH2 0x1536 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF91 CALLER DUP5 PUSH2 0x29E4 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xFA3 DUP8 DUP5 DUP9 DUP6 DUP6 DUP10 PUSH2 0x3482 JUMP JUMPDEST PUSH1 0x1 DUP5 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xFB7 JUMPI PUSH2 0xFB7 PUSH2 0x4F84 JUMP JUMPDEST EQ ISZERO PUSH2 0x1121 JUMPI PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x9DC29FAC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x9DC29FAC SWAP1 PUSH1 0x44 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1036 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x105A SWAP2 SWAP1 PUSH2 0x52BC JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x220 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1116 SWAP2 SWAP1 PUSH2 0x4FEA JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE POP PUSH2 0x12A1 JUMP JUMPDEST PUSH2 0x220 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xF5298ACA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xF5298ACA SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x11A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11CD SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x3 DUP9 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x64 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1271 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1295 SWAP2 SWAP1 PUSH2 0x4FB3 JUMP JUMPDEST PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xC0 DUP6 ADD MSTORE POP JUMPDEST PUSH2 0x12AF DUP8 DUP5 DUP8 PUSH1 0x0 DUP1 PUSH2 0x26A3 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x7962B394D85A534033BA2EFCF43CD36DE57B7EBEB3DE0CA4428965D9B3DDC481 DUP7 PUSH1 0x40 MLOAD PUSH2 0x130C SWAP2 SWAP1 PUSH2 0x52F8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1325 PUSH2 0x4B51 JUMP JUMPDEST PUSH2 0x132D PUSH2 0x4B51 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE DUP5 SLOAD DUP2 MSTORE PUSH2 0x1C0 DUP4 ADD DUP2 SWAP1 MSTORE MLOAD SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x1A0 DUP3 ADD MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH2 0x100 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x2 DUP6 ADD SLOAD DUP1 DUP3 AND PUSH2 0x140 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP6 ADD MSTORE PUSH17 0x100000000000000000000000000000000 SWAP3 DUP4 SWAP1 DIV DUP3 AND PUSH2 0x160 DUP6 ADD MSTORE DUP3 SWAP1 DIV AND PUSH2 0x180 DUP4 ADD MSTORE PUSH1 0x4 DUP1 DUP6 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE PUSH1 0x5 DUP7 ADD SLOAD DUP2 AND PUSH2 0x200 DUP6 ADD MSTORE PUSH1 0x6 DUP7 ADD SLOAD AND PUSH2 0x220 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x3 DUP7 ADD SLOAD SWAP3 SWAP1 SWAP3 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x240 DUP5 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0xB1BF962D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0xB1BF962D SWAP3 DUP3 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x145A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x147E SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP DUP2 PUSH1 0x0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x79774338 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1503 SWAP2 SWAP1 PUSH2 0x5306 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH2 0x260 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP5 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD TIMESTAMP PUSH5 0xFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP3 DIV AND EQ ISZERO PUSH2 0x1565 JUMPI POP POP JUMP JUMPDEST PUSH2 0x156F DUP3 DUP3 PUSH2 0x38B2 JUMP JUMPDEST PUSH2 0x1579 DUP3 DUP3 PUSH2 0x39D3 JUMP JUMPDEST POP PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x15CF DUP7 PUSH2 0x3B53 JUMP JUMPDEST ISZERO PUSH2 0x1666 JUMPI PUSH1 0x0 PUSH2 0x1600 DUP8 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA PUSH2 0x3B9A JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 DUP5 MSTORE DUP11 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP3 MLOAD SWAP4 DUP5 ADD SWAP1 SWAP3 MSTORE SWAP1 SLOAD SWAP2 DUP3 SWAP1 MSTORE SWAP3 SWAP4 POP PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x1662 JUMPI PUSH1 0x1 SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x1670 SWAP1 POP JUMP JUMPDEST POP POP POP JUMPDEST POP PUSH1 0x0 SWAP2 POP DUP2 SWAP1 POP DUP1 JUMPDEST SWAP4 POP SWAP4 POP SWAP4 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3236000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH2 0x16D9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH2 0x17AE PUSH1 0x40 MLOAD DUP1 PUSH2 0x280 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH2 0x1C0 SWAP1 DUP2 ADD MLOAD MLOAD PUSH8 0x1000000000000000 DUP2 AND ISZERO ISZERO PUSH2 0x200 DUP5 ADD MSTORE PUSH8 0x800000000000000 DUP2 AND ISZERO ISZERO PUSH2 0x240 DUP5 ADD MSTORE PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO PUSH2 0x220 DUP5 ADD MSTORE PUSH8 0x200000000000000 DUP2 AND ISZERO ISZERO PUSH2 0x1E0 DUP5 ADD MSTORE PUSH8 0x100000000000000 AND ISZERO ISZERO SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH2 0x1868 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP DUP1 PUSH2 0x200 ADD MLOAD ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x18C4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP DUP1 PUSH2 0x1E0 ADD MLOAD ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3238000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1920 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP DUP1 PUSH2 0x220 ADD MLOAD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3330000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x197B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH2 0x140 DUP3 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO DUP1 PUSH2 0x1A13 JUMPI POP DUP2 PUSH2 0x140 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x49AA2E81 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19EF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A13 SWAP2 SWAP1 PUSH2 0x53C4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3539000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1A67 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x2 DUP3 PUSH1 0xA0 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1A80 JUMPI PUSH2 0x1A80 PUSH2 0x4F84 JUMP JUMPDEST EQ DUP1 PUSH2 0x1AA1 JUMPI POP PUSH1 0x1 DUP3 PUSH1 0xA0 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1A9F JUMPI PUSH2 0x1A9F PUSH2 0x4F84 JUMP JUMPDEST EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3333000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1AF5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP DUP2 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0x100 DUP3 ADD MSTORE DUP2 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH1 0x50 SHR PUSH5 0xFFFFFFFFF AND PUSH2 0x120 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH1 0xA EXP PUSH2 0x160 DUP4 ADD MSTORE ISZERO PUSH2 0x1BDE JUMPI DUP2 MLOAD PUSH2 0x140 DUP2 ADD MLOAD SWAP1 MLOAD PUSH2 0x1B4B SWAP2 PUSH2 0x3BE9 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP1 DUP5 ADD MLOAD DUP5 MLOAD SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP2 PUSH2 0x1B69 SWAP2 PUSH2 0x52E0 JUMP JUMPDEST PUSH2 0x1B73 SWAP2 SWAP1 PUSH2 0x52E0 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x160 DUP3 ADD MLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3530000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP3 SWAP2 MUL LT ISZERO PUSH2 0x1BDC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP JUMPDEST DUP2 PUSH2 0x160 ADD MLOAD ISZERO PUSH2 0x1D3B JUMPI DUP2 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x2000000000000000 AND ISZERO ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3630000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1C51 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP DUP2 PUSH2 0x1A0 ADD MLOAD PUSH2 0x1C87 PUSH1 0x2 DUP4 PUSH2 0x100 ADD MLOAD PUSH2 0x1C6D SWAP2 SWAP1 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x1C78 SWAP1 PUSH1 0xA PUSH2 0x517E JUMP JUMPDEST DUP5 PUSH1 0x80 ADD MLOAD PUSH2 0x4C5 SWAP2 SWAP1 PUSH2 0x51B9 JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH2 0x1CD1 SWAP2 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x51F4 JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3533000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1D39 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1DF9 JUMPI PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH1 0xFF SWAP2 DUP3 AND SWAP2 PUSH1 0xA8 SWAP2 SWAP1 SWAP2 SHR AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3538000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1DB9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH2 0x120 DUP3 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH7 0x1000000000000 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x180 DUP3 ADD MSTORE JUMPDEST PUSH2 0x1E70 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP8 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0xE0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH2 0x120 ADD MLOAD PUSH1 0xFF AND DUP2 MSTORE POP PUSH2 0x3C40 JUMP JUMPDEST POP PUSH1 0xA0 DUP7 ADD MSTORE POP DUP4 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3334000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH2 0x1ED6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP DUP1 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3537000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH2 0x1F2B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 DUP2 PUSH1 0xA0 ADD MLOAD GT PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3335000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1F8F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP DUP2 PUSH1 0x80 ADD MLOAD DUP3 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB3596F07 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH2 0x180 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1FFA JUMPI DUP5 PUSH1 0x40 ADD MLOAD PUSH2 0x2001 JUMP JUMPDEST DUP4 PUSH2 0x180 ADD MLOAD JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x206A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x208E SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST PUSH2 0x2098 SWAP2 SWAP1 PUSH2 0x53E1 JUMP JUMPDEST PUSH2 0x140 DUP3 ADD DUP2 DUP2 MSTORE PUSH2 0x160 DUP4 ADD MLOAD SWAP2 DUP3 SWAP1 DUP2 PUSH2 0x20B6 JUMPI PUSH2 0x20B6 PUSH2 0x518A JUMP JUMPDEST DIV SWAP1 MSTORE POP DUP1 MLOAD PUSH2 0x140 DUP3 ADD MLOAD PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x20DB SWAP3 SWAP2 PUSH2 0x20D5 SWAP2 PUSH2 0x52E0 JUMP JUMPDEST SWAP1 PUSH2 0x41AA JUMP JUMPDEST PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP5 ADD MLOAD DUP2 MLOAD DUP1 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH32 0x3336000000000000000000000000000000000000000000000000000000000000 SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP2 GT ISZERO PUSH2 0x213D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x1 DUP3 PUSH1 0xA0 ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2156 JUMPI PUSH2 0x2156 PUSH2 0x4F84 JUMP JUMPDEST EQ ISZERO PUSH2 0x2436 JUMPI DUP1 PUSH2 0x240 ADD MLOAD PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3331000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x21B6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x40 DUP3 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE SWAP2 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD SWAP1 DUP4 ADD MLOAD PUSH2 0x220E SWAP2 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0x41D5 JUMP JUMPDEST ISZERO DUP1 PUSH2 0x2223 JUMPI POP DUP2 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH2 0xFFFF AND ISZERO JUMPDEST DUP1 PUSH2 0x22CC JUMPI POP DUP2 MLOAD PUSH2 0x1E0 ADD MLOAD PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22A1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x22C5 SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST DUP3 PUSH1 0x80 ADD MLOAD GT JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3337000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2320 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x40 DUP3 DUP2 ADD MLOAD DUP4 MLOAD PUSH2 0x1E0 ADD MLOAD SWAP2 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2399 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x23BD SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0x0 SWAP2 PUSH2 0x23D5 SWAP2 PUSH2 0x423F JUMP JUMPDEST SWAP1 POP DUP1 DUP4 PUSH1 0x80 ADD MLOAD GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3338000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2433 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP POP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD MLOAD PUSH32 0x5555555555555555555555555555555555555555555555555555555555555555 AND ISZERO PUSH2 0x2595 JUMPI PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x2473 SWAP1 DUP7 DUP7 PUSH2 0x4282 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1A0 DUP4 ADD MSTORE ISZERO DUP1 ISZERO PUSH2 0x260 DUP4 ADD MSTORE PUSH2 0x252E JUMPI DUP2 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH2 0x1A0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3839000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2528 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH2 0x2595 JUMP JUMPDEST DUP2 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3839000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH8 0x4000000000000000 AND ISZERO PUSH2 0x2593 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 DUP4 LT PUSH2 0x25F1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x1 DUP3 DUP2 SHL SHL DUP2 ISZERO PUSH2 0x2609 JUMPI DUP4 SLOAD DUP2 OR DUP5 SSTORE PUSH2 0x2611 JUMP JUMPDEST DUP4 SLOAD DUP2 NOT AND DUP5 SSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x269F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x16D0 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x26CE PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0x26E2 SWAP2 PUSH2 0x3BE9 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x7 DUP9 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x8 DUP12 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP9 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP12 ADD MLOAD SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 MLOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP11 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x1A0 DUP10 ADD MLOAD SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x1E0 DUP10 ADD MLOAD DUP2 AND PUSH2 0x100 DUP6 ADD MSTORE SWAP2 MLOAD PUSH32 0xA589870900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0xA5898709 SWAP2 PUSH2 0x2843 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE 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 PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 SWAP2 POP DUP1 DUP3 DUP7 ADD MLOAD AND DUP3 DUP6 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2860 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2884 SWAP2 SWAP1 PUSH2 0x541E JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP1 DUP3 MSTORE PUSH2 0x289A SWAP1 PUSH2 0x2617 JUMP JUMPDEST PUSH1 0x1 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x28DD SWAP1 PUSH2 0x2617 JUMP JUMPDEST PUSH1 0x3 DUP8 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x292E SWAP1 PUSH2 0x2617 JUMP JUMPDEST PUSH1 0x2 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH2 0x100 DUP11 ADD MLOAD PUSH2 0x140 DUP12 ADD MLOAD DUP4 MLOAD SWAP7 DUP8 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0x804C9B842B2748A22BB64B345453A3DE7CA54A6CA45CE00D415894979E22897A SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A5B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2A7F SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST PUSH2 0x220 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2AF2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2B16 SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3236000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP6 PUSH2 0x2B73 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 EQ ISZERO DUP1 PUSH2 0x2BB8 JUMPI POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3430000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2C0C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH2 0x2C61 DUP9 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP POP POP POP SWAP2 POP DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2CBD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x2D11 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP DUP4 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2D32 JUMPI POP PUSH1 0x1 DUP7 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2D30 JUMPI PUSH2 0x2D30 PUSH2 0x4F84 JUMP JUMPDEST EQ JUMPDEST DUP1 PUSH2 0x2D58 JUMPI POP DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2D58 JUMPI POP PUSH1 0x2 DUP7 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2D56 JUMPI PUSH2 0x2D56 PUSH2 0x4F84 JUMP JUMPDEST EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3339000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2DAC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0x2DD6 SWAP1 DUP9 DUP9 PUSH2 0x15C1 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x2FB0 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH2 0x1C0 DUP7 ADD MLOAD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 SWAP1 PUSH2 0x2E53 SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0x2E3E SWAP2 SWAP1 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x2E49 SWAP1 PUSH1 0xA PUSH2 0x517E JUMP JUMPDEST PUSH2 0x4C5 SWAP1 DUP8 PUSH2 0x51B9 JUMP JUMPDEST SWAP1 POP DUP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT PUSH2 0x2F03 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP12 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE MLOAD SWAP2 DUP3 MSTORE PUSH32 0xAEF84D3B40895FD58C561F3998000F0583ABB992A52FBDC99ACE8E8DE4D676A5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x2DAC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F0F DUP3 DUP5 PUSH2 0x544C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP14 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 SWAP1 SWAP6 AND SWAP5 DUP6 OR SWAP1 SSTORE SWAP1 MLOAD DUP4 DUP2 MSTORE SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH32 0xAEF84D3B40895FD58C561F3998000F0583ABB992A52FBDC99ACE8E8DE4D676A5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x3024 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x302E DUP6 PUSH2 0x432E JUMP JUMPDEST PUSH2 0x2595 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x16D0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x30CE DUP5 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP POP POP POP SWAP2 POP DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x312A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x317E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x0 DUP5 PUSH2 0x220 ADD MLOAD 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 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x31D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x31F5 SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST DUP6 PUSH2 0x200 ADD MLOAD 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 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3245 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3269 SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST PUSH2 0x3273 SWAP2 SWAP1 PUSH2 0x52E0 JUMP JUMPDEST PUSH1 0x7 DUP8 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x8 DUP11 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE DUP2 DUP4 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP11 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP2 AND PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x1E0 DUP12 ADD MLOAD DUP2 AND PUSH2 0x100 DUP5 ADD MSTORE SWAP3 MLOAD PUSH32 0xA589870900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP5 SWAP6 POP SWAP4 SWAP2 SWAP1 SWAP3 AND SWAP2 PUSH4 0xA5898709 SWAP2 PUSH2 0x33C9 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE 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 PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 SWAP2 POP DUP1 DUP3 DUP7 ADD MLOAD AND DUP3 DUP6 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x33E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x340A SWAP2 SWAP1 PUSH2 0x541E JUMP JUMPDEST POP SWAP1 SWAP2 POP PUSH2 0x341C SWAP1 POP DUP2 PUSH2 0x2328 PUSH2 0x423F JUMP JUMPDEST DUP7 PUSH2 0x160 ADD MLOAD GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3434000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3478 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x34D9 DUP10 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP SWAP5 POP POP SWAP4 POP SWAP4 POP DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3537 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x358B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3238000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP4 ISZERO PUSH2 0x35DF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x1 DUP6 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x35F4 JUMPI PUSH2 0x35F4 PUSH2 0x4F84 JUMP JUMPDEST EQ ISZERO PUSH2 0x3652 JUMPI PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3431000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP8 PUSH2 0x364C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH2 0x38A6 JUMP JUMPDEST PUSH1 0x2 DUP6 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x3666 JUMPI PUSH2 0x3666 PUSH2 0x4F84 JUMP JUMPDEST EQ ISZERO PUSH2 0x385B JUMPI PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3432000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP7 PUSH2 0x36BE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3331000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH2 0x3711 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP PUSH1 0x3 DUP11 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP10 SLOAD DUP2 MSTORE PUSH2 0x374C SWAP2 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0x41D5 JUMP JUMPDEST ISZERO DUP1 PUSH2 0x3760 JUMPI POP PUSH2 0x1C0 DUP10 ADD MLOAD MLOAD PUSH2 0xFFFF AND ISZERO JUMPDEST DUP1 PUSH2 0x3807 JUMPI POP PUSH2 0x1E0 DUP10 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x37D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x37FB SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST PUSH2 0x3805 DUP8 DUP10 PUSH2 0x52E0 JUMP JUMPDEST GT JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3337000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x364C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3333000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH2 0x16D0 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x5351 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD ISZERO PUSH2 0x3942 JUMPI PUSH1 0x0 PUSH2 0x38D3 DUP3 PUSH2 0x160 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x43E0 JUMP JUMPDEST SWAP1 POP PUSH2 0x38EC DUP3 PUSH1 0xE0 ADD MLOAD DUP3 PUSH2 0x3BE9 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x100 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x38FD SWAP1 PUSH2 0x2617 JUMP JUMPDEST PUSH1 0x1 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x39CF JUMPI PUSH1 0x0 PUSH2 0x395F DUP3 PUSH2 0x180 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x4425 JUMP JUMPDEST SWAP1 POP PUSH2 0x3979 DUP3 PUSH2 0x120 ADD MLOAD DUP3 PUSH2 0x3BE9 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x140 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x398A SWAP1 PUSH2 0x2617 JUMP JUMPDEST PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x3A0C PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x1A0 DUP3 ADD MLOAD PUSH2 0x3A1B JUMPI POP POP POP JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x3A2C SWAP2 PUSH2 0x3BE9 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x140 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x3A42 SWAP2 PUSH2 0x3BE9 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x260 DUP4 ADD MLOAD PUSH2 0x240 DUP5 ADD MLOAD PUSH2 0x3A6A SWAP3 SWAP2 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x442E JUMP JUMPDEST PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x3A7F SWAP2 PUSH2 0x3BE9 JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x3A9B SWAP2 SWAP1 PUSH2 0x52E0 JUMP JUMPDEST PUSH2 0x3AA5 SWAP2 SWAP1 PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x3AAF SWAP2 SWAP1 PUSH2 0x5047 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP4 ADD MLOAD PUSH2 0x3AC6 SWAP2 SWAP1 PUSH2 0x423F JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE ISZERO PUSH2 0x3B4E JUMPI PUSH2 0x3AF1 PUSH2 0x4C5 DUP4 PUSH2 0x100 ADD MLOAD DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0x4575 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x8 DUP5 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x3B17 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x51F4 JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3B93 JUMPI POP PUSH2 0x3B8F PUSH1 0x1 DUP3 PUSH2 0x5047 JUMP JUMPDEST DUP2 AND ISZERO JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 DUP3 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD NOT DUP2 AND DUP3 JUMPDEST PUSH1 0x2 SWAP2 SWAP1 SWAP2 SHR SWAP1 DUP2 ISZERO PUSH2 0x3BDE JUMPI PUSH1 0x1 ADD PUSH2 0x3BC9 JUMP JUMPDEST SWAP3 POP POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x3C1E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3C56 DUP8 PUSH1 0x0 ADD MLOAD MLOAD ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x3C92 JUMPI POP PUSH1 0x0 SWAP5 POP DUP5 SWAP4 POP DUP4 SWAP3 POP DUP3 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 POP DUP2 PUSH2 0x419D JUMP JUMPDEST PUSH2 0x3D41 PUSH1 0x40 MLOAD DUP1 PUSH2 0x260 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND ISZERO PUSH2 0x3D86 JUMPI PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x3D73 SWAP2 SWAP1 PUSH2 0x45B4 JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MSTORE PUSH2 0x1C0 DUP4 ADD MSTORE PUSH2 0x1A0 DUP3 ADD MSTORE JUMPDEST DUP8 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0xC0 ADD MLOAD LT ISZERO PUSH2 0x40A5 JUMPI PUSH1 0xC0 DUP2 ADD MLOAD DUP9 MLOAD PUSH2 0x3DA6 SWAP2 PUSH2 0x4693 JUMP JUMPDEST PUSH2 0x3DBA JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x3D86 JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP12 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x200 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x3E00 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x3D86 JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP13 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP4 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP3 DUP4 SWAP1 MSTORE PUSH1 0xFF PUSH1 0xA8 DUP5 SWAP1 SHR DUP2 AND PUSH2 0x1E0 DUP7 ADD MSTORE PUSH1 0x30 DUP5 SWAP1 SHR AND PUSH1 0x60 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0xFFFF PUSH1 0x10 DUP6 SWAP1 SHR DUP2 AND PUSH1 0xA0 DUP8 ADD MSTORE SWAP1 SWAP4 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA SWAP3 SWAP1 SWAP3 EXP SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3E96 JUMPI POP DUP2 PUSH2 0x1E0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD PUSH1 0xFF AND EQ JUMPDEST PUSH2 0x3F3A JUMPI PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3F11 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3F35 SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST PUSH2 0x3F41 JUMP JUMPDEST DUP2 PUSH2 0x180 ADD MLOAD JUMPDEST DUP3 MSTORE PUSH1 0xA0 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3F61 JUMPI POP PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0x3F61 SWAP2 PUSH2 0x41D5 JUMP JUMPDEST ISZERO PUSH2 0x4051 JUMPI PUSH2 0x3F7E DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x46FE JUMP JUMPDEST PUSH1 0x40 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP4 ADD DUP1 MLOAD PUSH2 0x3F97 SWAP1 DUP4 SWAP1 PUSH2 0x52E0 JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x1E0 DUP4 ADD MLOAD PUSH2 0x3FB2 SWAP2 PUSH1 0xFF AND SWAP1 PUSH2 0x47DD JUMP JUMPDEST ISZERO ISZERO PUSH2 0x240 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD ISZERO PUSH2 0x4008 JUMPI DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0x3FD8 JUMPI DUP2 PUSH1 0x80 ADD MLOAD PUSH2 0x3FDF JUMP JUMPDEST DUP2 PUSH2 0x1A0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x3FEE SWAP2 SWAP1 PUSH2 0x53E1 JUMP JUMPDEST DUP3 PUSH2 0x140 ADD DUP2 DUP2 MLOAD PUSH2 0x4000 SWAP2 SWAP1 PUSH2 0x52E0 JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x4011 JUMP JUMPDEST PUSH1 0x1 PUSH2 0x220 DUP4 ADD MSTORE JUMPDEST DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0x4025 JUMPI DUP2 PUSH1 0xA0 ADD MLOAD PUSH2 0x402C JUMP JUMPDEST DUP2 PUSH2 0x1C0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x403B SWAP2 SWAP1 PUSH2 0x53E1 JUMP JUMPDEST DUP3 PUSH2 0x160 ADD DUP2 DUP2 MLOAD PUSH2 0x404D SWAP2 SWAP1 PUSH2 0x52E0 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0x4061 SWAP2 PUSH2 0x47EE JUMP JUMPDEST ISZERO PUSH2 0x4094 JUMPI PUSH2 0x407E DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x4856 JUMP JUMPDEST DUP3 PUSH2 0x120 ADD DUP2 DUP2 MLOAD PUSH2 0x4090 SWAP2 SWAP1 PUSH2 0x52E0 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST POP PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x3D86 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x40B6 JUMPI PUSH1 0x0 PUSH2 0x40D1 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x140 ADD MLOAD DUP2 PUSH2 0x40CF JUMPI PUSH2 0x40CF PUSH2 0x518A JUMP JUMPDEST DIV JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x40E8 JUMPI PUSH1 0x0 PUSH2 0x4103 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x160 ADD MLOAD DUP2 PUSH2 0x4101 JUMPI PUSH2 0x4101 PUSH2 0x518A JUMP JUMPDEST DIV JUMPDEST PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD ISZERO PUSH2 0x4145 JUMPI PUSH2 0x4140 DUP2 PUSH2 0x120 ADD MLOAD PUSH2 0x413A DUP4 PUSH2 0x160 ADD MLOAD DUP5 PUSH2 0x100 ADD MLOAD PUSH2 0x423F SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x49D6 JUMP JUMPDEST PUSH2 0x4167 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH2 0x160 DUP6 ADD MLOAD PUSH2 0x220 SWAP1 SWAP6 ADD MLOAD SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMPDEST SWAP5 SWAP10 SWAP4 SWAP9 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH2 0x2710 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x41C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x422D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL DUP3 ADD SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x4274 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x428E DUP6 PUSH2 0x4A0D JUMP JUMPDEST ISZERO PUSH2 0x431F JUMPI PUSH1 0x0 PUSH2 0x42BF DUP7 PUSH32 0x5555555555555555555555555555555555555555555555555555555555555555 PUSH2 0x3B9A JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP7 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 DUP5 MSTORE DUP10 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 PUSH8 0x4000000000000000 AND ISZERO PUSH2 0x431C JUMPI PUSH1 0x1 SWAP4 POP SWAP2 POP PUSH2 0x4326 SWAP1 POP JUMP JUMPDEST POP POP JUMPDEST POP PUSH1 0x0 SWAP1 POP DUP1 JUMPDEST SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4354 JUMP JUMPDEST PUSH3 0x461BCD PUSH1 0xE5 SHL PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x4393 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x43CD JUMPI PUSH2 0x438E PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x4335 JUMP JUMPDEST PUSH2 0x43DA JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x43C4 JUMPI PUSH2 0x43C4 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x4335 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x43DA JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x43F4 PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x5047 JUMP JUMPDEST PUSH2 0x43FE SWAP1 DUP6 PUSH2 0x53E1 JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x441D DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x52E0 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3B93 DUP4 DUP4 TIMESTAMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4442 PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x5047 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x445E JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x3B93 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x4494 JUMPI PUSH1 0x0 PUSH2 0x4499 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x44AD DUP11 DUP1 PUSH2 0x3BE9 JUMP JUMPDEST DUP2 PUSH2 0x44BA JUMPI PUSH2 0x44BA PUSH2 0x518A JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x44CC DUP4 DUP12 PUSH2 0x3BE9 JUMP JUMPDEST DUP2 PUSH2 0x44D9 JUMPI PUSH2 0x44D9 PUSH2 0x518A JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x44E9 DUP7 DUP9 PUSH2 0x53E1 JUMP JUMPDEST PUSH2 0x44F3 SWAP2 SWAP1 PUSH2 0x53E1 JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x4507 DUP9 DUP11 PUSH2 0x53E1 JUMP JUMPDEST PUSH2 0x4511 SWAP2 SWAP1 PUSH2 0x53E1 JUMP JUMPDEST PUSH2 0x451B SWAP2 SWAP1 PUSH2 0x53E1 JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x4532 DUP11 DUP16 PUSH2 0x53E1 JUMP JUMPDEST PUSH2 0x453C SWAP2 SWAP1 PUSH2 0x51B9 JUMP JUMPDEST PUSH2 0x4552 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x52E0 JUMP JUMPDEST PUSH2 0x455C SWAP2 SWAP1 PUSH2 0x52E0 JUMP JUMPDEST PUSH2 0x4566 SWAP2 SWAP1 PUSH2 0x52E0 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x4599 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH7 0x1000000000000 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x4678 JUMPI PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4651 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4675 SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP5 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP8 PUSH3 0x10000 SWAP1 SWAP3 DIV AND SWAP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x46EB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 SHL SHR PUSH1 0x3 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x470A DUP6 PUSH2 0x4A49 JUMP JUMPDEST PUSH1 0x4 DUP7 DUP2 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 DUP8 SWAP3 PUSH2 0x47B6 SWAP3 DUP7 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x478C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x47B0 SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST SWAP1 PUSH2 0x3BE9 JUMP JUMPDEST PUSH2 0x47C0 SWAP2 SWAP1 PUSH2 0x53E1 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 PUSH2 0x47D1 JUMPI PUSH2 0x47D1 PUSH2 0x518A JUMP JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3B93 JUMPI POP POP EQ SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x4846 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D0 SWAP2 SWAP1 PUSH2 0x5351 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x6 DUP4 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x48CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x48F0 SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x490E JUMPI PUSH2 0x490B PUSH2 0x4904 DUP7 PUSH2 0x4ACD JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x3BE9 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x5 DUP6 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4980 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x49A4 SWAP2 SWAP1 PUSH2 0x52A3 JUMP JUMPDEST PUSH2 0x49AE SWAP1 DUP3 PUSH2 0x52E0 JUMP JUMPDEST SWAP1 POP PUSH2 0x49BA DUP2 DUP6 PUSH2 0x53E1 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 PUSH2 0x49CB JUMPI PUSH2 0x49CB PUSH2 0x518A JUMP JUMPDEST DIV SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH8 0xDE0B6B3A7640000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x49F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH32 0x5555555555555555555555555555555555555555555555555555555555555555 AND DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3B93 JUMPI POP PUSH2 0x3B8F PUSH1 0x1 DUP3 PUSH2 0x5047 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x4A8F JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x3B93 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x47B0 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x43E0 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x4B13 JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x3B93 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x47B0 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x4425 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x280 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x4BD5 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x180 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x4C49 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4C73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x3 DUP2 LT PUSH2 0x4C73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x4C73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x4CA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x4C73 DUP2 PUSH2 0x4C99 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x4C73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP8 SUB PUSH2 0x200 DUP2 SLT ISZERO PUSH2 0x4CE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH2 0x180 DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP4 ADD SLT ISZERO PUSH2 0x4D2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4D33 PUSH2 0x4BFE JUMP JUMPDEST SWAP2 POP PUSH2 0x4D41 PUSH1 0x80 DUP10 ADD PUSH2 0x4C4F JUMP JUMPDEST DUP3 MSTORE PUSH2 0x4D4F PUSH1 0xA0 DUP10 ADD PUSH2 0x4C4F JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x4D60 PUSH1 0xC0 DUP10 ADD PUSH2 0x4C4F JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xE0 DUP9 ADD CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x100 PUSH2 0x4D7D DUP2 DUP11 ADD PUSH2 0x4C78 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x120 PUSH2 0x4D90 DUP2 DUP12 ADD PUSH2 0x4C87 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x140 PUSH2 0x4DA3 DUP2 DUP13 ADD PUSH2 0x4CAA JUMP JUMPDEST PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x160 DUP1 DUP13 ADD CALLDATALOAD PUSH1 0xE0 DUP8 ADD MSTORE DUP5 DUP13 ADD CALLDATALOAD DUP5 DUP8 ADD MSTORE PUSH2 0x4DC9 PUSH2 0x1A0 DUP14 ADD PUSH2 0x4C4F JUMP JUMPDEST DUP4 DUP8 ADD MSTORE PUSH2 0x4DDA PUSH2 0x1C0 DUP14 ADD PUSH2 0x4CB5 JUMP JUMPDEST DUP3 DUP8 ADD MSTORE PUSH2 0x4DEB PUSH2 0x1E0 DUP14 ADD PUSH2 0x4C4F JUMP JUMPDEST DUP2 DUP8 ADD MSTORE POP POP POP POP POP DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 DUP7 SUB PUSH2 0x100 DUP2 SLT ISZERO PUSH2 0x4E1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0xA0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 DUP3 ADD SLT ISZERO PUSH2 0x4E5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x4EA7 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE PUSH2 0x4EB6 PUSH1 0x60 DUP8 ADD PUSH2 0x4C4F JUMP JUMPDEST DUP2 MSTORE PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x4ECE PUSH1 0xA0 DUP8 ADD PUSH2 0x4C78 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x4EDF PUSH1 0xC0 DUP8 ADD PUSH2 0x4C4F JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xE0 DUP7 ADD CALLDATALOAD PUSH2 0x4EF2 DUP2 PUSH2 0x4C99 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4F17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH2 0x4F27 PUSH1 0x20 DUP6 ADD PUSH2 0x4C4F JUMP JUMPDEST SWAP2 POP PUSH2 0x4F35 PUSH1 0x40 DUP6 ADD PUSH2 0x4C4F JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4F54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH2 0x4F6B PUSH1 0x40 DUP7 ADD PUSH2 0x4C4F JUMP JUMPDEST SWAP2 POP PUSH2 0x4F79 PUSH1 0x60 DUP7 ADD PUSH2 0x4C78 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4FC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH2 0x4FD3 DUP2 PUSH2 0x4C99 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x40 SWAP1 SWAP6 ADD MLOAD SWAP1 SWAP7 SWAP5 SWAP6 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4FFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x5008 DUP2 PUSH2 0x4C99 JUMP JUMPDEST PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD MLOAD SWAP3 SWAP5 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x5059 JUMPI PUSH2 0x5059 PUSH2 0x5018 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x50B7 JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x509D JUMPI PUSH2 0x509D PUSH2 0x5018 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x50AA JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x5063 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x50CE JUMPI POP PUSH1 0x1 PUSH2 0x3BE3 JUMP JUMPDEST DUP2 PUSH2 0x50DB JUMPI POP PUSH1 0x0 PUSH2 0x3BE3 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x50F1 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x50FB JUMPI PUSH2 0x5117 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x3BE3 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x510C JUMPI PUSH2 0x510C PUSH2 0x5018 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x3BE3 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x513A JUMPI POP DUP2 DUP2 EXP PUSH2 0x3BE3 JUMP JUMPDEST PUSH2 0x5144 DUP4 DUP4 PUSH2 0x505E JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x5176 JUMPI PUSH2 0x5176 PUSH2 0x5018 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3B93 DUP4 DUP4 PUSH2 0x50BF JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x51EF JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x521F JUMPI PUSH2 0x521F PUSH2 0x5018 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x525F JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD PUSH2 0x5294 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x5228 JUMP JUMPDEST DUP3 PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x52CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x52F3 JUMPI PUSH2 0x52F3 PUSH2 0x5018 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH2 0x3BE3 DUP3 DUP5 PUSH2 0x5228 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x531C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x5346 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x537E JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x5362 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x5390 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x53D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x3B93 DUP2 PUSH2 0x4C99 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x5419 JUMPI PUSH2 0x5419 PUSH2 0x5018 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5433 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x5475 JUMPI PUSH2 0x5475 PUSH2 0x5018 JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC CALLCODE 0xE5 SMOD 0xB4 DUP7 0x25 0xB4 PUSH3 0xED1976 ADDMOD SWAP10 PUSH29 0x2204D999A24A36CA801CA20B43E9F4039364736F6C634300080A003300 ","sourceMap":"1076:11976:76:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2781:3383;;;;;;;;;;-1:-1:-1;2781:3383:76;;;;;:::i;:::-;;:::i;:::-;;6819:2688;;;;;;;;;;-1:-1:-1;6819:2688:76;;;;;:::i;:::-;;:::i;:::-;;;4724:25:201;;;4712:2;4697:18;6819:2688:76;;;;;;;10119:825;;;;;;;;;;-1:-1:-1;10119:825:76;;;;;:::i;:::-;;:::i;11423:1627::-;;;;;;;;;;-1:-1:-1;11423:1627:76;;;;;:::i;:::-;;:::i;2781:3383::-;3171:12;;3158:26;;3118:37;3158:26;;;;;;;;;;;3235:15;3158:26;3235:13;:15::i;:::-;3190:60;-1:-1:-1;3257:33:76;:7;3190:60;3257:19;:33::i;:::-;3424:32;;;;;;;;;;;;;3305:24;;;;;;3424:60;;3457:12;3471;3424:32;:60::i;:::-;3297:187;;;;;;3491:803;3529:12;3549;3569:15;3592:696;;;;;;;;3647:12;3592:696;;;;3681:10;3592:696;;;;;;;;;;;;;;;;;;;;;3708:6;:12;;;3592:696;;;;;;3743:6;:17;;;3592:696;;;;;;3778:6;:13;;;3592:696;;;;3819:6;:23;;;3592:696;;;;;;;;:::i;:::-;;;;;3874:6;:37;;;3592:696;;;;3936:6;:20;;;3592:696;;;;3974:6;:13;;;3592:696;;;;;;4016:6;:24;;;3592:696;;;;;;4071:6;:26;;;3592:696;;;;;;4128:19;3592:696;;;;;;4189:30;3592:696;;;;;;4255:24;3592:696;;;3491:30;:803::i;:::-;4301:25;;4403:33;4376:6;:23;;;:60;;;;;;;;:::i;:::-;;4372:672;;;4466:31;;;;4648:35;;;;4699:11;;;;4720:17;;;;;4747:13;;;;4631:164;;;;;:58;6132:15:201;;;4631:164:76;;;6114:34:201;6184:15;;;6164:18;;;6157:43;6216:18;;;6209:34;;;;4466:31:76;;;;6259:18:201;;;6252:34;;;4466:31:76;-1:-1:-1;4631:58:76;;;;6025:19:201;;4631:164:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4584:36;;;4506:289;4542:32;;;4506:289;;-1:-1:-1;4372:672:76;;;4902:37;;;;4953:11;;;;4966:17;;;;;4985:13;;;;5000:36;;;;4874:163;;;;;:78;6132:15:201;;;4874:163:76;;;6114:34:201;6184:15;;;6164:18;;;6157:43;6216:18;;;6209:34;6259:18;;;6252:34;;;;4874:78:76;;;;;6025:19:201;;4874:163:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4835:35;;;4816:221;;-1:-1:-1;4372:672:76;5054:16;5050:78;;;5104:10;;;;5080:41;;:10;;5104;;;;;5116:4;5080:23;:41::i;:::-;5138:19;5134:443;;;5326:33;;;;8368:9:72;5167:34:76;;5284:160;;5235:1:72;;3439:2;8367:67;;;5326:104:76;;;;:::i;:::-;5309:122;;:2;:122;:::i;:::-;5285:6;:13;;;:146;;;;:::i;:::-;5284:158;:160::i;:::-;5204:44;;;;;;;;;;;;;;:76;;:240;;:76;;:44;:240;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;5167:277;;;;5496:30;5457:113;;;5536:26;5457:113;;;;4724:25:201;;4712:2;4697:18;;4570:185;5457:113:76;;;;;;;;5159:418;5134:443;5583:134;5618:12;5638:6;:12;;;5658:1;5667:6;:24;;;:44;;5710:1;5667:44;;;5694:6;:13;;;5667:44;5583:7;;:134;;;:27;:134::i;:::-;5728:6;:24;;;5724:129;;;5770:26;;;;5819:11;;;;5832:13;;;;5762:84;;;;;:56;9893:55:201;;;5762:84:76;;;9875:74:201;9965:18;;;9958:34;;;;5762:56:76;;;;;9848:18:201;;5762:84:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5724:129;6134:6;:19;;;5864:295;;5917:6;:17;;;5864:295;;5878:6;:12;;;5864:295;;;5898:6;:11;;;5942:6;:13;;;5963:6;:23;;;6021:33;5994:60;;;;;;;;:::i;:::-;:6;:23;;;:60;;;;;;;;:::i;:::-;;:132;;6093:33;;;;;;;;;5994:132;;;6065:17;5994:132;5864:295;;;;;;;;;:::i;:::-;;;;;;;;3112:3052;;;;;;;2781:3383;;;;;:::o;6819:2688::-;7156:12;;7143:26;;7088:7;7143:26;;;;;;;;;;7088:7;7220:15;7143:26;7220:13;:15::i;:::-;7175:60;-1:-1:-1;7241:33:76;:7;7175:60;7241:19;:33::i;:::-;7282:18;7302:20;7326:77;7360:6;:17;;;7385:12;7326:26;:77::i;:::-;7281:122;;;;7410:170;7447:12;7467:6;:13;;;7488:6;:23;;;7519:6;:17;;;7544:10;7562:12;7410:29;:170::i;:::-;7587:21;7638:33;7611:6;:23;;;:60;;;;;;;;:::i;:::-;;:100;;7699:12;7611:100;;;7680:10;7611:100;7587:124;;7801:6;:17;;;:55;;;;;7839:17;7822:6;:13;;;:34;7801:55;7797:149;;;7890:26;;;;7882:57;;;;;7928:10;7882:57;;;10946:74:201;7882:45:76;;;;;;;10919:18:201;;7882:57:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7866:13;;;:73;7797:149;7972:13;7956:6;:13;;;:29;7952:79;;;-1:-1:-1;8011:13:76;;;;7952:79;8068:33;8041:6;:23;;;:60;;;;;;;;:::i;:::-;;8037:473;;;8212:35;;;;8261:17;;;;8186:108;;;;;:74;9893:55:201;;;8186:108:76;;;9875:74:201;9965:18;;;9958:34;;;8186:74:76;;;;;9848:18:201;;8186:108:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8146:36;;;8111:183;8112:32;;;8111:183;8037:473;;;8381:37;;;;8432:17;;;;8466:36;;;;8353:150;;;;;:78;11690:55:201;;;8353:150:76;;;11672:74:201;11762:18;;;11755:34;;;11805:18;;;11798:34;;;;8353:78:76;;;;;11645:18:201;;8353:150:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8315:35;;;:188;8037:473;8516:127;8551:12;8571:6;:12;;;8591:6;:17;;;:37;;8615:13;8591:37;;;8611:1;8591:37;8516:7;;:127;;8636:1;8516:27;:127::i;:::-;8682:13;8654:25;8667:12;8654:10;:25;:::i;:::-;:41;;;;:::i;:::-;8650:109;;8734:10;;;;8710:42;;:10;;8734;;;;;8746:5;8710:23;:42::i;:::-;8765:152;8820:12;8840;8860:10;8878:12;8898:13;8765:47;:152::i;:::-;8928:6;:17;;;8924:456;;;8963:26;;;;9084:31;;;;8955:168;;;;;9005:10;8955:168;;;6114:34:201;8955:40:76;;;;6164:18:201;;;6157:43;;;6216:18;;;6209:34;;;6259:18;;;6252:34;;;;8955:40:76;;;6025:19:201;;8955:168:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8924:456;;;9194:26;;;;9151:12;;9144:92;;:37;;;;;9182:10;;9222:13;9144:37;:92::i;:::-;9252:26;;;;9325:17;;;;9244:129;;;;;9305:10;9244:129;;;12239:34:201;9244:51:76;12309:15:201;;;12289:18;;;12282:43;12341:18;;;12334:34;;;9244:51:76;;;;;12151:18:201;;9244:129:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8924:456;9411:17;;;;9397:12;;9457:17;;;;9391:84;;;12547:25:201;;;12615:14;;12608:22;12603:2;12588:18;;12581:50;9430:10:76;;9391:84;;;;;;;;;12520:18:201;9391:84:76;;;;;;;9489:13;6819:2688;-1:-1:-1;;;;;;;;;6819:2688:76:o;10119:825::-;10260:42;10305:15;:7;:13;:15::i;:::-;10260:60;-1:-1:-1;10326:33:76;:7;10260:60;10326:19;:33::i;:::-;10366:79;10416:7;10425:12;10439:5;10366:49;:79::i;:::-;10504:35;;;;10567:48;;;;;:42;10964:55:201;;;10567:48:76;;;10946:74:201;10452:32:76;;10567:42;;;;;;10919:18:201;;10567:48:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10622:38;;;;;:20;9893:55:201;;;10622:38:76;;;9875:74:201;9965:18;;;9958:34;;;10546:69:76;;-1:-1:-1;10622:20:76;;;;;;9848:18:201;;10622:38:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;10796:31:76;;;;10744:84;;;;;:27;12952:15:201;;;10744:84:76;;;12934:34:201;;;12984:18;;;12977:43;13036:18;;;13029:34;;;10796:31:76;;;;13079:18:201;;;13072:75;10744:27:76;;;;;;12845:19:201;;10744:84:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10704:36;;;10667:161;10670:32;;;10667:161;-1:-1:-1;10835:54:76;:7;10670:12;10877:5;-1:-1:-1;;10835:27:76;:54::i;:::-;10934:4;10901:38;;10927:5;10901:38;;;;;;;;;;;;10254:690;;;10119:825;;;:::o;11423:1627::-;11643:42;11688:15;:7;:13;:15::i;:::-;11643:60;-1:-1:-1;11710:33:76;:7;11643:60;11710:19;:33::i;:::-;11751:18;11771:20;11795:70;11829:10;11847:12;11795:26;:70::i;:::-;11750:115;;;;11872:157;11916:7;11931:12;11951:10;11969;11987:12;12007:16;11872:36;:157::i;:::-;12060:33;12040:16;:53;;;;;;;;:::i;:::-;;12036:882;;;12204:35;;;;12178:98;;;;;12253:10;12178:98;;;9875:74:201;9965:18;;;9958:34;;;12178:74:76;;;;;;;9848:18:201;;12178:98:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12138:36;;;12103:173;12104:32;;;12103:173;12355:37;;;;12442:36;;;;12327:152;;;;;12406:10;12327:152;;;6114:34:201;;;6164:18;;;6157:43;6216:18;;;6209:34;;;6259:18;;;6252:34;;;;12327:78:76;;;;;;;6025:19:201;;12327:152:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12288:35;;;12285:194;-1:-1:-1;12036:882:76;;;12566:37;;;;12643:36;;;;12538:142;;;;;12617:10;12538:142;;;11672:74:201;11762:18;;;11755:34;;;11805:18;;;11798:34;;;;12538:78:76;;;;;;;11645:18:201;;12538:142:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12500:35;;;:180;12792:35;;;;12879:31;;;;12766:145;;;;;12841:10;12766:145;;;12934:34:201;;;12984:18;;;12977:43;13036:18;;;13029:34;;;12879:31:76;;;;13079:18:201;;;13072:75;12766:74:76;;;;;;;12845:19:201;;12766:145:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12726:36;;;12689:222;12692:32;;;12689:222;-1:-1:-1;12036:882:76;12924:54;:7;12952:12;12966:5;12973:1;;12924:27;:54::i;:::-;13016:10;12990:55;;13009:5;12990:55;;;13028:16;12990:55;;;;;;:::i;:::-;;;;;;;;11637:1413;;;11423:1627;;;;:::o;12460:1739:85:-;12545:29;;:::i;:::-;12582:42;;:::i;:::-;12631:57;;;;;;;;;;;;:33;;;:57;;;15238:9:72;15237:71;;;;12694:26:85;;;:81;12849:22;;;;;;;;;12815:31;;:56;;;12781:31;;;:90;12955:34;;;;;;;12916:36;;;:73;;;12877:36;;;:112;13028:28;;;;;;;12995:30;;;:61;13100:33;;;;13062:35;;;:71;13169:21;;;;;;;;;13140:26;;;:50;13234:30;;;;;;13196:35;;;:68;13310:32;;;;;13270:37;;;:72;;;13391:27;;;;;;;;;;13349:39;;;:69;-1:-1:-1;13501:89:85;;;;;;;:87;;:89;;;;-1:-1:-1;;13501:89:85;;;;;;;13310:32;13501:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13463:12;:35;;:127;;;;13425:12;:35;;:165;;;;;13801:12;:35;;;13784:67;;;:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13597:256;;13733:42;;;13597:256;13689:36;;;13597:256;;;13649:32;;;13597:256;;;13605:36;;;13597:256;;;;14020:32;;;:67;14093:36;;;:75;13605:12;12460:1739;-1:-1:-1;;12460:1739:85:o;3556:502::-;3796:27;;;;3834:15;3796:54;;;;:27;;;;;:54;3792:81;;;3556:502;;:::o;3792:81::-;3879:37;3894:7;3903:12;3879:14;:37::i;:::-;3922:40;3940:7;3949:12;3922:17;:40::i;:::-;-1:-1:-1;4000:27:85;;:53;;;;;4037:15;4000:53;;;;;;3556:502::o;6625:625:73:-;6853:4;6859:7;6868;6887:28;6910:4;6887:22;:28::i;:::-;6883:328;;;6925:15;6943:45;6966:4;620:66;6943:22;:45::i;:::-;6997:20;7020:21;;;;;;;;;;;;;;7067:26;;;;;;;;;:55;;;;;;;;;;;;;;7020:21;;-1:-1:-1;4478:3:72;17633:67;;;7049:75:73;-1:-1:-1;7136:12:73;;7132:73;;7168:4;;-1:-1:-1;7174:12:73;;-1:-1:-1;7188:7:73;-1:-1:-1;7160:36:73;;-1:-1:-1;7160:36:73;7132:73;6917:294;;;6883:328;-1:-1:-1;7224:5:73;;-1:-1:-1;7224:5:73;;-1:-1:-1;7224:5:73;6625:625;;;;;;;;:::o;5531:6352:87:-;5830:13;;;;5850:21;;;;;;;;;;;;;;;;;;5822:50;;;;-1:-1:-1;;;5822:50:87;;;;;;;;:::i;:::-;;;;;;;;;;5879:35;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5879:35:87;6061:19;;:40;;;;;21735:9:72;21948:12;21936:24;;21935:31;;6039:13:87;;;5921:191;21899:22:72;21887:34;;21886:41;;6000:31:87;;;5921:191;21857:15:72;21845:27;;21844:34;;5971:21:87;;;5921:191;21818:12:72;21806:24;;21805:31;;5950:13:87;;;5921:191;21779:12:72;21767:24;21766:31;;5929:13:87;;;5921:191;;;-1:-1:-1;6142:23:87;;;;;;;;;;;;-1:-1:-1;6142:23:87;;;;6119:47;;;;-1:-1:-1;;;6119:47:87;;;;;;;;:::i;:::-;;6181:4;:13;;;6180:14;6196:21;;;;;;;;;;;;;;;;;6172:46;;;;;-1:-1:-1;;;6172:46:87;;;;;;;;:::i;:::-;;6233:4;:13;;;6232:14;6248:21;;;;;;;;;;;;;;;;;6224:46;;;;;-1:-1:-1;;;6224:46:87;;;;;;;;:::i;:::-;;6284:4;:21;;;6307:28;;;;;;;;;;;;;;;;;6276:60;;;;;-1:-1:-1;;;6276:60:87;;;;;;;;:::i;:::-;-1:-1:-1;6358:26:87;;;;:40;;;;:118;;;6431:6;:26;;;6410:64;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6484:41;;;;;;;;;;;;;;;;;6343:188;;;;;-1:-1:-1;;;6343:188:87;;;;;;;;:::i;:::-;-1:-1:-1;6614:35:87;6587:6;:23;;;:62;;;;;;;;:::i;:::-;;:134;;;-1:-1:-1;6688:33:87;6661:6;:23;;;:60;;;;;;;;:::i;:::-;;6587:134;6729:42;;;;;;;;;;;;;;;;;6572:205;;;;;-1:-1:-1;;;6572:205:87;;;;;;;;:::i;:::-;-1:-1:-1;6807:19:87;;:40;;;8368:9:72;3439:2;8367:67;;;6784:20:87;;;:77;6884:19;;:40;;;16004:9:72;4127:2;16003:63;;;6867:14:87;;;:72;;;6986:20;;;;6980:2;:26;6963:14;;;:43;7023:19;7019:440;;7142:19;;:43;;;;7083:42;;:110;;:49;:110::i;:::-;7052:28;;;:141;;;7316:13;;;;;7227:19;;:39;;;;7316:13;;7227:78;;;:::i;:::-;:102;;;;:::i;:::-;7202:14;;;:127;;;7401:14;;;;7384;;;;7417:26;;;;;;;;;;;;;;;;;;7384:31;;-1:-1:-1;7366:49:87;7358:86;;;;-1:-1:-1;;;7358:86:87;;;;;;;;:::i;:::-;;7019:440;7469:6;:26;;;7465:676;;;7677:19;;:40;;;11852:9:72;11864:29;11852:41;11851:48;;7754:40:87;;;;;;;;;;;;;;;;;7660:142;;;;;-1:-1:-1;;;7660:142:87;;;;;;;;:::i;:::-;;8057:6;:31;;;7915:128;5235:1:72;7951:4:87;:20;;;:65;;;;:::i;:::-;7944:73;;:2;:73;:::i;:::-;7916:6;:13;;;:101;;;;:::i;7915:128::-;7841:37;;;;7828:51;;;;;;;;;;;;;:74;;;:215;;;:74;;:215;:::i;:::-;:260;;;;8098:28;;;;;;;;;;;;;;;;;7811:323;;;;;-1:-1:-1;;;7811:323:87;;;;;;;;:::i;:::-;;7465:676;8151:24;;;;:29;;;8147:291;;8270:24;;;;8207:19;;:40;;;20324:9:72;8207:87:87;;;;;4339:3:72;20323:71;;;;;8207:87:87;8304:34;;;;;;;;;;;;;;;;;8190:156;;;;;-1:-1:-1;;;8190:156:87;;;;;;;;:::i;:::-;-1:-1:-1;8394:24:87;;;;8378:41;;;;;;;;;;;;;:53;;;;;;8354:21;;;:77;8147:291;8587:366;8632:12;8652;8672:15;8695:252;;;;;;;;8758:6;:17;;;8695:252;;;;8800:6;:20;;;8695:252;;;;8836:6;:18;;;8695:252;;;;;;8872:6;:13;;;8695:252;;;;;;8914:6;:24;;;8695:252;;;;;8587:37;:366::i;:::-;-1:-1:-1;8559:17:87;;;8444:509;-1:-1:-1;8444:509:87;;8493:27;;;8444:509;8452:33;;;;8444:509;;;9008:33;;;;;;;;;;;;-1:-1:-1;9008:33:87;;;;8960:82;;;;-1:-1:-1;;;8960:82:87;;;;;;;;:::i;:::-;-1:-1:-1;9056:15:87;;9078:28;;;;;;;;;;;;;;;;;;9048:59;;;;-1:-1:-1;;;9048:59:87;;;;;;;;:::i;:::-;;2677:4;9129;:17;;;:55;9192:53;;;;;;;;;;;;;;;;;9114:137;;;;;-1:-1:-1;;;9114:137:87;;;;;;;;:::i;:::-;;9440:6;:13;;;9311:6;:13;;;9292:47;;;9382:1;9349:35;;:4;:21;;;:35;;;;:74;;9411:6;:12;;;9349:74;;;9387:4;:21;;;9349:74;9292:139;;;;;;;;;;10976:42:201;10964:55;;;9292:139:87;;;10946:74:201;10919:18;;9292:139:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:161;;;;:::i;:::-;9258:25;;;:195;;;9506:14;;;;;;;;9477:43;;;;:::i;:::-;;;;-1:-1:-1;9759:15:87;;9714:25;;;;9684:27;;;;9683:92;;9759:15;9684:55;;;:::i;:::-;9683:75;;:92::i;:::-;9645:35;;;;:130;;;9870:33;;;;;9911:41;;;;;;;;;;;;;;;;;;;;9831:72;;9816:142;;;;-1:-1:-1;;;9816:142:87;;;;;;;;:::i;:::-;-1:-1:-1;10392:33:87;10365:6;:23;;;:60;;;;;;;;:::i;:::-;;10361:1001;;;10543:4;:31;;;10576:35;;;;;;;;;;;;;;;;;10535:77;;;;;-1:-1:-1;;;10535:77:87;;;;;;;;:::i;:::-;-1:-1:-1;10690:12:87;;;;;10677:26;;;;;;;;;;;;;:29;;;10639:17;;;;:68;;10677:29;;;;;10639:37;:68::i;:::-;10638:69;:137;;;-1:-1:-1;10721:19:87;;:40;;;5872:9:72;5884;5872:21;10721:54:87;10638:137;:238;;;-1:-1:-1;10812:19:87;;:33;;;10857:18;;;;10805:71;;;;;:51;10964:55:201;;;10805:71:87;;;10946:74:201;10805:51:87;;;;;10919:18:201;;10805:71:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10789:6;:13;;;:87;10638:238;10886:44;;;;;;;;;;;;;;;;;10621:317;;;;;-1:-1:-1;;;10621:317:87;;;;;;;;:::i;:::-;-1:-1:-1;10980:12:87;;;;;11004:19;;:33;;;10973:65;;;;;:30;10964:55:201;;;10973:65:87;;;10946:74:201;10973:30:87;;;;;10919:18:201;;10973:65:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10947:23;;;:91;;;11227:27;;;;11164:25;;11192:63;;:34;:63::i;:::-;11164:91;;11289:17;11272:6;:13;;;:34;;11308:46;;;;;;;;;;;;;;;;;11264:91;;;;;-1:-1:-1;;;11264:91:87;;;;;;;;:::i;:::-;;10427:935;10361:1001;11372:17;;;;5817:9:73;502:66;5817:26;:31;11368:511:87;;11477:26;;;;:87;;11537:12;11551;11477:59;:87::i;:::-;11416:148;;11446:27;;;11416:148;;;;11417:27;;;11416:148;11573:300;;11655:6;:12;;;11624:43;;:4;:27;;;:43;;;11669:33;;;;;;;;;;;;;;;;;11616:87;;;;;-1:-1:-1;;;11616:87:87;;;;;;;;:::i;:::-;;11573:300;;;11748:19;;:40;;;12837:9:72;11821:33:87;;;;;;;;;;;;;;;;;;12849:22:72;12837:34;12836:41;11728:136:87;;;;-1:-1:-1;;;11728:136:87;;;;;;;;:::i;:::-;;11573:300;5816:6067;5531:6352;;;;:::o;972:403:73:-;1190:28;;;;;;;;;;;;;;;;;5284:3:72;1134:54:73;;1126:93;;;;-1:-1:-1;;;1126:93:73;;;;;;;;:::i;:::-;-1:-1:-1;1263:1:73;1247:17;;;1241:24;1273:92;;;;1298:16;;;;;;1273:92;;;1339:17;;1352:4;;1339:17;;;1273:92;1108:263;972:403;;;:::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;-1:-1:-1;;;1635:78:12;;15203:2:201;1635:78:12;;;15185:21:201;15242:2;15222:18;;;15215:30;15281:34;15261:18;;;15254:62;15352:9;15332:18;;;15325:37;15379:19;;1635:78:12;15001:403:201;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;6827:1514:85:-;7050:40;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7050:40:85;7172:36;;;;7122:35;;;;:92;;:42;:92::i;:::-;7097:22;;;;:117;;;7345:35;;;;7412:473;;;;;;;;7471:16;;;;;;;;;;7412:473;;-1:-1:-1;7412:473:85;;;;;;;;;;;7594:32;;;;;7412:473;;;;;;;7655:22;;7412:473;;;;;7712:36;;;;7412:473;;;;7773:26;;;;7412:473;;;;;;;7345:35;7412:473;;;-1:-1:-1;7412:473:85;;;7850:26;;;;7412:473;;7345:35;7412:473;;;7316:575;;;;;7345:35;;;7316:88;;:575;;7412:473;7316:575;;15595:4:201;15637:3;15626:9;15622:19;15614:27;;15674:6;15668:13;15657:9;15650:32;15738:4;15730:6;15726:17;15720:24;15713:4;15702:9;15698:20;15691:54;15801:4;15793:6;15789:17;15783:24;15776:4;15765:9;15761:20;15754:54;15864:4;15856:6;15852:17;15846:24;15839:4;15828:9;15824:20;15817:54;15927:4;15919:6;15915:17;15909:24;15902:4;15891:9;15887:20;15880:54;15990:4;15982:6;15978:17;15972:24;15965:4;15954:9;15950:20;15943:54;16053:4;16045:6;16041:17;16035:24;16028:4;16017:9;16013:20;16006:54;16107:4;16099:6;16095:17;16089:24;16132:42;16230:2;16216:12;16212:21;16205:4;16194:9;16190:20;16183:51;16253:6;16243:16;;16323:2;16317;16309:6;16305:15;16299:22;16295:31;16290:2;16279:9;16275:18;16268:59;;;15409:924;;;;;7316:575:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7286:21;;;7221:670;7259:19;;;7221:670;;;;7929:34;;:32;:34::i;:::-;7898:28;;;:65;;;;;;;;;;;;;;;;8003:19;;;;:31;;:29;:31::i;:::-;7969;;;:65;;;;;;;;;;;;;;;8076:21;;;;:33;;:31;:33::i;:::-;8040;;;:69;;;;;;;;;;;;;;;;8169:22;;8199:19;;;;;8226:21;;;;;8040:69;8255:31;;;8294:36;;;;8121:215;;16908:25:201;;;16949:18;;;16942:34;;;;16992:18;;;16985:34;17050:2;17035:18;;17028:34;17093:3;17078:19;;17071:35;8121:215:85;;;;;;16895:3:201;16880:19;8121:215:85;;;;;;;7044:1297;6827:1514;;;;;:::o;512:299:75:-;679:35;;;;672:59;;;;;:53;10964:55:201;;;672:59:75;;;10946:74:201;633:7:75;;;;672:53;;;;;10919:18:201;;672:59:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;746:37;;;;739:61;;;;;:55;10964::201;;;739:61:75;;;10946:74:201;739:55:75;;;;;;10919:18:201;;739:61:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;657:149;;;;512:299;;;;;:::o;12348:848:87:-;12615:21;;;;;;;;;;;;;;;;;12598:15;12590:47;;;;-1:-1:-1;;;12590:47:87;;;;;;;;:::i;:::-;;12672:17;12658:10;:31;;:59;;;-1:-1:-1;12693:10:87;:24;;;;12658:59;12725:44;;;;;;;;;;;;;;;;;12643:132;;;;;-1:-1:-1;;;12643:132:87;;;;;;;;:::i;:::-;;12783:13;12804;12821:44;:12;:33;;;21735:9:72;21779:12;21767:24;;21766:31;;;21818:12;21806:24;;21805:31;;;21857:15;21845:27;;21844:34;;;21899:22;21887:34;;21886:41;;;21948:12;21936:24;21935:31;;;21583:394;12821:44:87;12782:83;;;;;;;12879:8;12889:23;;;;;;;;;;;;;;;;;12871:42;;;;;-1:-1:-1;;;12871:42:87;;;;;;;;:::i;:::-;-1:-1:-1;12938:21:87;;;;;;;;;;;;;;;;;12927:9;;12919:41;;;;-1:-1:-1;;;12919:41:87;;;;;;;;:::i;:::-;-1:-1:-1;12983:15:87;;;;;:72;;-1:-1:-1;13022:33:87;13002:16;:53;;;;;;;;:::i;:::-;;12983:72;12982:164;;;-1:-1:-1;13069:17:87;;;;;:76;;-1:-1:-1;13110:35:87;13090:16;:55;;;;;;;;:::i;:::-;;13069:76;13154:31;;;;;;;;;;;;;;;;;12967:224;;;;;-1:-1:-1;;;12967:224:87;;;;;;;;:::i;:::-;;12584:612;;12348:848;;;;;;:::o;1230:1498:82:-;1608:39;;;;;;;;;;;;;1538:24;;;;1608:67;;1648:12;1662;1608:39;:67::i;:::-;1537:138;;;;;1686:19;1682:1042;;;1748:44;;;1715:30;1748:44;;;;;;;;;;:76;;;1902:33;;;;8368:9:72;1748:76:82;;;;;1715:30;1862:158;;5235:1:72;;3439:2;8367:67;;;1902:104:82;;;;:::i;:::-;1885:122;;:2;:122;:::i;:::-;1863:144;;:11;:144;:::i;1862:158::-;1833:187;;2209:18;2183:44;;:22;:44;;;2179:539;;2239:44;;;2309:1;2239:44;;;;;;;;;;;:67;;:71;;;;;;2325:64;4724:25:201;;;2325:64:82;;4697:18:201;2325:64:82;;;;;;;2179:539;;;2414:34;2532:43;2557:18;2532:22;:43;:::i;:::-;2451:44;;;;;;;;;;;;;;;;:78;;:124;;;;;;;;;;;;;;2590:119;;4724:25:201;;;2451:124:82;;-1:-1:-1;2451:44:82;;2590:119;;4697:18:201;2590:119:82;;;;;;;2404:314;1707:1017;;1682:1042;1531:1197;;1230:1498;;;;;:::o;1228:780:1:-;1477:4;1471:11;1343:27;1489:36;;;1576:42;1566:53;;;1562:1;1539:25;;1532:88;1662:51;;1657:2;1634:26;;1627:87;1751:2;1728:26;;1721:41;;;1343:27;1324:16;;1821:3;1471:11;1324:16;1792:5;1785;1780:51;1770:155;;1864:16;1861:1;1858;1843:38;1900:16;1897:1;1890:27;1770:155;;1945:28;1967:5;1945:21;:28::i;:::-;1937:66;;;;-1:-1:-1;;;1937:66:1;;17760:2:201;1937:66:1;;;17742:21:201;17799:2;17779:18;;;17772:30;17838:27;17818:18;;;17811:55;17883:18;;1937:66:1;17558:349:201;15809:1286:87;15996:13;16017;16034:44;:12;:33;;;21735:9:72;21779:12;21767:24;;21766:31;;;21818:12;21806:24;;21805:31;;;21857:15;21845:27;;21844:34;;;21899:22;21887:34;;21886:41;;;21948:12;21936:24;21935:31;;;21583:394;16034:44:87;15995:83;;;;;;;16092:8;16102:23;;;;;;;;;;;;;;;;;16084:42;;;;;-1:-1:-1;;;16084:42:87;;;;;;;;:::i;:::-;-1:-1:-1;16151:21:87;;;;;;;;;;;;;;;;;16140:9;;16132:41;;;;-1:-1:-1;;;16132:41:87;;;;;;;;:::i;:::-;;16180:17;16273:12;:37;;;16266:57;;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16207:12;:35;;;16200:55;;;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:125;;;;:::i;:::-;16414:35;;;;16488:388;;;;;;;;16549:16;;;;;;;;;;16488:388;;16333:37;16488:388;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16758:26;;;;16488:388;;;;16414:35;16488:388;;;-1:-1:-1;16488:388:87;;;16839:26;;;;16488:388;;16414:35;16488:388;;;16378:506;;;;;16180:145;;-1:-1:-1;16333:37:87;16414:35;;;;;16378:100;;:506;;16488:388;16378:506;;15595:4:201;15637:3;15626:9;15622:19;15614:27;;15674:6;15668:13;15657:9;15650:32;15738:4;15730:6;15726:17;15720:24;15713:4;15702:9;15698:20;15691:54;15801:4;15793:6;15789:17;15783:24;15776:4;15765:9;15761:20;15754:54;15864:4;15856:6;15852:17;15846:24;15839:4;15828:9;15824:20;15817:54;15927:4;15919:6;15915:17;15909:24;15902:4;15891:9;15887:20;15880:54;15990:4;15982:6;15978:17;15972:24;15965:4;15954:9;15950:20;15943:54;16053:4;16045:6;16041:17;16035:24;16028:4;16017:9;16013:20;16006:54;16107:4;16099:6;16095:17;16089:24;16132:42;16230:2;16216:12;16212:21;16205:4;16194:9;16190:20;16183:51;16253:6;16243:16;;16323:2;16317;16309:6;16305:15;16299:22;16295:31;16290:2;16279:9;16275:18;16268:59;;;15409:924;;;;;16378:506:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16332:552:87;;-1:-1:-1;16948:79:87;;-1:-1:-1;16332:552:87;2311:5;16948:40;:79::i;:::-;16906:12;:30;;;:121;;17035:49;;;;;;;;;;;;;;;;;16891:199;;;;;-1:-1:-1;;;16891:199:87;;;;;;;;:::i;:::-;;15989:1106;;;;15809:1286;;;:::o;13625:1655::-;13924:13;13939;13956:22;13980:13;13997:58;:12;:40;;;21735:9:72;21779:12;21767:24;;21766:31;;;21818:12;21806:24;;21805:31;;;21857:15;21845:27;;21844:34;;;21899:22;21887:34;;21886:41;;;21948:12;21936:24;21935:31;;;21583:394;13997:58:87;13923:132;;;;;;;;;14069:8;14079:23;;;;;;;;;;;;;;;;;14061:42;;;;;-1:-1:-1;;;14061:42:87;;;;;;;;:::i;:::-;-1:-1:-1;14128:21:87;;;;;;;;;;;;;;;;;14117:9;;14109:41;;;;-1:-1:-1;;;14109:41:87;;;;;;;;:::i;:::-;-1:-1:-1;14175:21:87;;;;;;;;;;;;;;;;;14164:9;;14156:41;;;;-1:-1:-1;;;14156:41:87;;;;;;;;:::i;:::-;-1:-1:-1;14227:33:87;14208:15;:52;;;;;;;;:::i;:::-;;14204:1072;;;14295:33;;;;;;;;;;;;;;;;;14278:15;14270:59;;;;-1:-1:-1;;;14270:59:87;;;;;;;;:::i;:::-;;14204:1072;;;14365:35;14346:15;:54;;;;;;;;:::i;:::-;;14342:934;;;14437:35;;;;;;;;;;;;;;;;;14418:17;14410:63;;;;-1:-1:-1;;;14410:63:87;;;;;;;;:::i;:::-;-1:-1:-1;14872:35:87;;;;;;;;;;;;;;;;;14853:17;14845:63;;;;-1:-1:-1;;;14845:63:87;;;;;;;;:::i;:::-;-1:-1:-1;14966:10:87;;;;14935:30;;;;;;;;;;;;;:42;;14966:10;;;;;14935:30;:42::i;:::-;14934:43;:104;;;-1:-1:-1;14991:33:87;;;;5872:9:72;5884;5872:21;14991:47:87;14934:104;:202;;;-1:-1:-1;15087:26:87;;;;15080:56;;;;;15125:10;15080:56;;;10946:74:201;15080:44:87;;;;;;;10919:18:201;;15080:56:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15052:25;15065:12;15052:10;:25;:::i;:::-;:84;14934:202;15146:44;;;;;;;;;;;;;;;;;14917:281;;;;;-1:-1:-1;;;14917:281:87;;;;;;;;:::i;14342:934::-;15226:42;;;;;;;;;;;;;;;;15219:50;;-1:-1:-1;;;15219:50:87;;;;15226:42;15219:50;;;:::i;14342:934::-;13917:1363;;;;13625:1655;;;;;;:::o;10657:1542:85:-;11008:30;;;;:35;11004:423;;11053:34;11090:130;11133:12;:30;;;11173:12;:39;;;11090:33;:130::i;:::-;11053:167;;11262:82;11305:12;:31;;;11262:26;:33;;:82;;;;:::i;:::-;11228:31;;;:116;;;11377:43;;:41;:43::i;:::-;11352:22;;;:68;;;;;;;;;;;;;;;-1:-1:-1;11004:423:85;11732:35;;:40;11728:467;;11782:39;11824:139;11871:12;:35;;;11916:12;:39;;;11824:37;:139::i;:::-;11782:181;;12010:92;12058:12;:36;;;12010:31;:38;;:92;;;;:::i;:::-;11971:36;;;:131;;;12140:48;;:46;:48::i;:::-;12110:27;;;:78;;;;;;;;;;;;;;;-1:-1:-1;11728:467:85;10657:1542;;:::o;8841:1598::-;8978:37;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8978:37:85;9026:26;;;;9022:58;;9067:7;8841:1598;;:::o;9022:58::-;9239:36;;;;9189:35;;:92;;:42;:92::i;:::-;9160:26;;;:121;9459:36;;;;9409:35;;:92;;:42;:92::i;:::-;9380:26;;;:121;9648:36;;;;9692:42;;;;9742:39;;;;9603:184;;9648:36;9692:42;9603:184;;:37;:184::i;:::-;9572:28;;;:215;;;9821:36;;;;:85;;:43;:85::i;:::-;9794:112;;;10114:26;;;;10073:32;;;;10038:26;;;;:67;;10073:32;10038:67;:::i;:::-;:102;;;;:::i;:::-;:135;;;;:::i;:::-;10008:21;;;:165;;;10233:26;;;;10200:60;;10008:165;10200:32;:60::i;:::-;10180:17;;;:80;;;10271:22;10267:168;;10332:96;:75;10375:12;:31;;;10332:4;:26;;;:42;;:75;;;;:::i;:96::-;10303:25;;;:125;;:25;;:125;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10267:168;8972:1467;8841:1598;;:::o;4304:256:73:-;4448:9;;4411:4;;620:66;4448:27;4488:19;;;;;:67;;-1:-1:-1;4530:18:73;4547:1;4530:14;:18;:::i;:::-;4512:37;;:42;4488:67;4481:74;4304:256;-1:-1:-1;;;4304:256:73:o;8422:382::-;8601:9;;8547:7;;8601:16;;8669:14;;;8667:17;8654:30;;8547:7;8711:66;8742:1;8719:24;;;;;8718:31;;8711:66;;8767:1;8761:7;8711:66;;;8791:2;-1:-1:-1;;;8422:382:73;;;;;:::o;2253:319:90:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:90;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;2633:3723:81:-;2947:7;2956;2965;2974;2983;2992:4;3008:27;:6;:17;;;6194:9:73;:14;;6091:122;3008:27:81;3004:93;;;-1:-1:-1;3053:1:81;;-1:-1:-1;3053:1:81;;-1:-1:-1;3053:1:81;;-1:-1:-1;3053:1:81;;-1:-1:-1;3065:17:81;;-1:-1:-1;3053:1:81;3045:45;;3004:93;3103:40;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3103:40:81;3154:24;;;;:29;;;3150:263;;3326:24;;;;3310:41;;;;;;;;;;;;;3382:13;;;;3257:149;;3310:41;3257;:149::i;:::-;3233:20;;;3193:213;3209:22;;;3193:213;3194:13;;;3193:213;3150:263;3435:6;:20;;;3426:4;:6;;;:29;3419:2175;;;3519:6;;;;3470:17;;:56;;:48;:56::i;:::-;3465:140;;3562:6;;;3560:8;;;;;;3588;;3465:140;3655:6;;;;3642:20;;;;;;;;;;;;;;3613:26;;;:49;;;3671:123;;3751:6;;;3749:8;;;;;;3777;;3671:123;3862:26;;;;3849:40;;3802:44;3849:40;;;;;;;;;;;;4038:38;;;;;;;;;;;;;;22869:67:72;4339:3;23023:71;;;;;4004:23:81;;;3898:180;3439:2:72;22869:67;;;;3971:13:81;;;3898:180;;;22674:9:72;3298:2;22691:85;;;;;3926:25:81;;;3898:180;22662:21:72;;;3908:8:81;;;3898:180;4124:2;:19;;;;4107:14;;;:36;-1:-1:-1;4178:20:81;;;:25;;;;:88;;;4243:4;:23;;;4215:6;:24;;;:51;;;4178:88;:205;;4327:13;;;;4356:26;;;;4308:75;;;;;:47;10964:55:201;;;4308:75:81;;;10946:74:201;4308:47:81;;;;;10919:18:201;;4308:75:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4178:205;;;4277:4;:20;;;4178:205;4160:223;;4396:25;;;;:30;;;;:79;;-1:-1:-1;4468:6:81;;;;4430:17;;:45;;:37;:45::i;:::-;4392:911;;;4520:141;4561:6;:11;;;4584:14;4610:4;:15;;;4637:4;:14;;;4520:29;:141::i;:::-;4487:30;;;:174;;;4672:34;;;:68;;;;4487:174;;4672:68;:::i;:::-;;;-1:-1:-1;4816:24:81;;;;4852:23;;;;4776:109;;;;;:28;:109::i;:::-;4751:134;;:22;;;:134;4900:8;;;;:13;4896:226;;5000:4;:22;;;:49;;5041:4;:8;;;5000:49;;;5025:4;:13;;;5000:49;4954:4;:30;;;:96;;;;:::i;:::-;4927:4;:11;;:123;;;;;;;:::i;:::-;;;-1:-1:-1;4896:226:81;;;5107:4;5079:25;;;:32;4896:226;5218:4;:22;;;:75;;5268:4;:25;;;5218:75;;;5243:4;:22;;;5218:75;5174:4;:30;;;:120;;;;:::i;:::-;5132:4;:28;;:162;;;;;;;:::i;:::-;;;-1:-1:-1;4392:911:81;5345:6;;;;5315:17;;:37;;:29;:37::i;:::-;5311:232;;;5396:138;5434:6;:11;;;5457:14;5483:4;:15;;;5510:4;:14;;;5396:26;:138::i;:::-;5364:4;:28;;:170;;;;;;;:::i;:::-;;;-1:-1:-1;5311:232:81;-1:-1:-1;5573:6:81;;;5571:8;;;;;;3419:2175;;;5632:34;;;;:110;;5741:1;5632:110;;;5696:4;:34;;;5682:4;:11;;;:48;;;;;:::i;:::-;;5632:110;5618:11;;;:124;5781:34;;;;:127;;5907:1;5781:127;;;5862:4;:34;;;5831:4;:28;;;:65;;;;;:::i;:::-;;5781:127;5750:28;;;:158;5942:28;;;;:33;5941:200;;6011:130;6105:4;:28;;;6012:75;6058:4;:28;;;6012:4;:34;;;:45;;:75;;;;:::i;:::-;6011:84;;:130::i;:::-;5941:200;;;5985:17;5941:200;5921:17;;;:220;;;6162:34;;;;6204:28;;;;6240:11;;;;6259:28;;;;6320:25;;;;;6162:34;;-1:-1:-1;6204:28:81;;-1:-1:-1;6240:11:81;-1:-1:-1;6259:28:81;;-1:-1:-1;5921:220:81;-1:-1:-1;6320:25:81;-1:-1:-1;2633:3723:81;;;;;;;;;;;;:::o;1874:472:89:-;1952:14;2098:18;;2187:17;2182:1;2166:18;;2154:31;2150:55;2140:66;;2086:130;2083:164;;;2237:1;2234;2227:12;2083:164;-1:-1:-1;2284:17:89;2273:29;;;;2320:1;2304:18;;2269:54;2265:71;;1874:472::o;3638:328:73:-;3862:28;;;;;;;;;;;;;;;;;3768:4;;5284:3:72;3806:54:73;;3798:93;;;;-1:-1:-1;;;3798:93:73;;;;;;;;:::i;:::-;-1:-1:-1;;3907:9:73;;3938:1;3922:17;;;3921:23;;3907:38;3906:44;:49;;;3638:328::o;1005:496:89:-;1083:14;1248:18;;1299:35;1295:52;;;1285:63;;1278:71;1234:125;1215:183;;1388:1;1385;1378:12;1215:183;-1:-1:-1;1473:17:89;1424:22;;1448;1420:51;1416:75;;1005:496::o;7592:563:73:-;7822:4;7828:7;7847:20;7862:4;7847:14;:20::i;:::-;7843:275;;;7877:15;7895:44;7918:4;502:66;7895:22;:44::i;:::-;7947:20;7970:21;;;;;;;;;;;;;;8003:26;;;;;;;;;;:59;;;;;;;;;;;;;7970:21;;-1:-1:-1;7970:21:73;12849:22:72;12837:34;12836:41;7999:113:73;;8084:4;;-1:-1:-1;8090:12:73;-1:-1:-1;8076:27:73;;-1:-1:-1;8076:27:73;7999:113;7869:249;;7843:275;-1:-1:-1;8132:5:73;;-1:-1:-1;8132:5:73;7592:563;;;;;;;:::o;2198:2524:1:-;2265:12;3323:207;;;-1:-1:-1;;;3384:4:1;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;4611:1;4605:8;4598:16;4591:24;4580:35;;3538:1174;;2198:2524;;;:::o;700:334:88:-;810:7;;881:46;899:28;;;881:15;:46;:::i;:::-;873:55;;:4;:55;:::i;:::-;376:8;961:25;;;-1:-1:-1;1006:23:88;961:25;704:4:90;1006:23:88;:::i;:::-;999:30;700:334;-1:-1:-1;;;;700:334:88:o;3142:212::-;3256:7;3278:71;3306:4;3312:19;3333:15;1780:972;1924:7;;1984:47;2003:28;;;1984:16;:47;:::i;:::-;1970:61;-1:-1:-1;2042:8:88;2038:50;;704:4:90;2060:21:88;;;;;2038:50;2230:7;;;2094:19;;;2266:1;2260:7;;:21;;2280:1;2260:21;;;2276:1;2270:3;:7;2260:21;2246:35;-1:-1:-1;2326:35:88;2305:17;2317:4;;2305:11;:17::i;:::-;:57;;;;;:::i;:::-;;;-1:-1:-1;376:8:88;2387:25;2305:57;2407:4;2387:19;:25::i;:::-;:44;;;;;:::i;:::-;;;-1:-1:-1;2444:18:88;2485:12;2465:17;2471:11;2465:3;:17;:::i;:::-;:32;;;;:::i;:::-;2535:1;2521:15;;;-1:-1:-1;2548:17:88;2602:14;2588:11;2568:17;2574:11;2568:3;:17;:::i;:::-;:31;;;;:::i;:::-;:48;;;;:::i;:::-;2653:1;2640:14;;;-1:-1:-1;2640:14:88;2725:10;376:8;2692:10;2699:3;2692:4;:10;:::i;:::-;2691:31;;;;:::i;:::-;2674:48;;704:4:90;2674:48:88;:::i;:::-;:61;;;;:::i;:::-;:73;;;;:::i;:::-;2667:80;1780:972;-1:-1:-1;;;;;;;;;;;1780:972:88:o;2840:322:90:-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:90;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;3336:442:79:-;3564:20;;3471:7;;;;;;;;3564:20;;;;;3595:30;;3591:107;;3653:38;;;;;:20;10964:55:201;;;3653:38:79;;;10946:74:201;3653:20:79;;;;;10919:18:201;;3653:38:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3635:56;;3591:107;-1:-1:-1;3712:12:79;;;;;;;3726:29;;;;;;3757:15;-1:-1:-1;3336:442:79;-1:-1:-1;;;3336:442:79:o;2435:333:73:-;2670:28;;;;;;;;;;;;;;;;;2576:4;;5284:3:72;2614:54:73;;2606:93;;;;-1:-1:-1;;;2606:93:73;;;;;;;;:::i;:::-;-1:-1:-1;;2715:9:73;;2745:1;2729:17;;;;2715:32;2751:1;2714:38;:43;;;2435:333::o;9524:446:81:-;9697:7;9712:24;9739:29;:7;:27;:29::i;:::-;9820:21;;;;;9800:64;;;;;9820:21;10964:55:201;;;9800:64:81;;;10946:74:201;;;;9712:56:81;;-1:-1:-1;9774:15:81;;9898:10;;9800:89;;9712:56;;9820:21;;;9800:58;;10919:18:201;;9800:64:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:71;;:89::i;:::-;9792:116;;;;:::i;:::-;9774:134;;9950:9;9940:7;:19;;;;;:::i;:::-;;;9524:446;-1:-1:-1;;;;;;;9524:446:81:o;4133:208:79:-;4250:4;4270:22;;;;;:65;;-1:-1:-1;;4296:39:79;;4133:208::o;3046:314:73:-;3262:28;;;;;;;;;;;;;;;;;3168:4;;5284:3:72;3206:54:73;;3198:93;;;;-1:-1:-1;;;3198:93:73;;;;;;;;:::i;:::-;-1:-1:-1;;3307:9:73;;3337:1;3321:17;;;3307:32;3306:38;:43;;;3046:314::o;8150:645:81:-;8409:32;;;;8389:87;;;;;8409:32;10964:55:201;;;8389:87:81;;;10946:74:201;8320:7:81;;;;8409:32;;;8389:69;;10919:18:201;;8389:87:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8365:111;-1:-1:-1;8486:18:81;;8482:104;;8530:49;8551:27;:7;:25;:27::i;:::-;8530:13;;:20;:49::i;:::-;8514:65;;8482:104;8631:30;;;;8624:54;;;;;8631:30;10964:55:201;;;8624:54:81;;;10946:74:201;8631:30:81;;;;8624:48;;10919:18:201;;8624:54:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8608:70;;:13;:70;:::i;:::-;8592:86;-1:-1:-1;8701:26:81;8592:86;8701:10;:26;:::i;:::-;8685:42;;8775:9;8759:13;:25;;;;;:::i;:::-;;;8150:645;-1:-1:-1;;;;;;8150:645:81:o;1660:322:90:-;1721:9;1826;;1885:3;1880:1;1873:9;;1861:22;1857:32;1851:39;;1823:70;1820:104;;;1914:1;1911;1904:12;1820:104;-1:-1:-1;1952:3:90;1945:11;;;;1965:1;1958:9;;1941:27;1937:35;;1660:322::o;5270:235:73:-;5397:9;;5361:4;;502:66;5397:26;5436:18;;;;;:64;;-1:-1:-1;5476:17:73;5492:1;5476:13;:17;:::i;1895:528:85:-;2028:27;;;;1994:7;;2028:27;;;;;2110:15;2097:28;;2093:326;;;-1:-1:-1;;2229:22:85;;;;;;1895:528::o;2093:326::-;2380:22;;;;2287:125;;2380:22;;;;;2287:74;;2321:28;;;;;2351:9;2287:33;:74::i;2809:545::-;2940:27;;;;2906:7;;2940:27;;;;;3022:15;3009:28;;3005:345;;;-1:-1:-1;;3141:27:85;;;;;;2809:545::o;3005:345::-;3306:27;;;;3204:139;;3306:27;;;;;3204:83;;3242:33;;;;;3277:9;3204:37;:83::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:404:201:-;81:2;75:9;123:6;111:19;;160:18;145:34;;181:22;;;142:62;139:242;;;237:77;234:1;227:88;338:4;335:1;328:15;366:4;363:1;356:15;139:242;397:2;390:22;14:404;:::o;423:196::-;491:20;;551:42;540:54;;530:65;;520:93;;609:1;606;599:12;520:93;423:196;;;:::o;624:157::-;706:20;;755:1;745:12;;735:40;;771:1;768;761:12;786:159;853:20;;913:6;902:18;;892:29;;882:57;;935:1;932;925:12;950:118;1036:5;1029:13;1022:21;1015:5;1012:32;1002:60;;1058:1;1055;1048:12;1002:60;950:118;:::o;1073:128::-;1138:20;;1167:28;1138:20;1167:28;:::i;1206:156::-;1272:20;;1332:4;1321:16;;1311:27;;1301:55;;1352:1;1349;1342:12;1367:1763;1669:6;1677;1685;1693;1701;1745:9;1736:7;1732:23;1775:3;1771:2;1767:12;1764:32;;;1792:1;1789;1782:12;1764:32;1828:9;1815:23;1805:33;;1885:2;1874:9;1870:18;1857:32;1847:42;;1936:2;1925:9;1921:18;1908:32;1898:42;;1987:2;1976:9;1972:18;1959:32;1949:42;;2010:6;2109:2;2040:66;2036:2;2032:75;2028:84;2025:104;;;2125:1;2122;2115:12;2025:104;2151:17;;:::i;:::-;2138:30;;2191:39;2225:3;2214:9;2210:19;2191:39;:::i;:::-;2184:5;2177:54;2263:39;2297:3;2286:9;2282:19;2263:39;:::i;:::-;2258:2;2251:5;2247:14;2240:63;2335:39;2369:3;2358:9;2354:19;2335:39;:::i;:::-;2330:2;2323:5;2319:14;2312:63;2435:3;2424:9;2420:19;2407:33;2402:2;2395:5;2391:14;2384:57;2460:3;2496:52;2544:2;2533:9;2529:18;2496:52;:::i;:::-;2490:3;2483:5;2479:15;2472:77;2568:3;2604:37;2637:2;2626:9;2622:18;2604:37;:::i;:::-;2598:3;2591:5;2587:15;2580:62;2661:3;2697:35;2728:2;2717:9;2713:18;2697:35;:::i;:::-;2691:3;2684:5;2680:15;2673:60;2752:3;2816:2;2805:9;2801:18;2788:32;2782:3;2775:5;2771:15;2764:57;2881:2;2870:9;2866:18;2853:32;2848:2;2841:5;2837:14;2830:56;2918:39;2952:3;2941:9;2937:19;2918:39;:::i;:::-;2913:2;2906:5;2902:14;2895:63;2990:37;3022:3;3011:9;3007:19;2990:37;:::i;:::-;2985:2;2978:5;2974:14;2967:61;3060:39;3094:3;3083:9;3079:19;3060:39;:::i;:::-;3055:2;3048:5;3044:14;3037:63;;;;;;3119:5;3109:15;;;1367:1763;;;;;;;;:::o;3135:1430::-;3375:6;3383;3391;3399;3443:9;3434:7;3430:23;3473:3;3469:2;3465:12;3462:32;;;3490:1;3487;3480:12;3462:32;3526:9;3513:23;3503:33;;3583:2;3572:9;3568:18;3555:32;3545:42;;3634:2;3623:9;3619:18;3606:32;3596:42;;3731:4;3662:66;3658:2;3654:75;3650:86;3647:106;;;3749:1;3746;3739:12;3647:106;;3782:2;3776:9;3824:4;3816:6;3812:17;3895:6;3883:10;3880:22;3859:18;3847:10;3844:34;3841:62;3838:242;;;3936:77;3933:1;3926:88;4037:4;4034:1;4027:15;4065:4;4062:1;4055:15;3838:242;4096:2;4089:22;4135:38;4169:2;4154:18;;4135:38;:::i;:::-;4127:6;4120:54;4235:3;4224:9;4220:19;4207:33;4202:2;4194:6;4190:15;4183:58;4274:54;4322:4;4311:9;4307:20;4274:54;:::i;:::-;4269:2;4261:6;4257:15;4250:79;4362:39;4396:3;4385:9;4381:19;4362:39;:::i;:::-;4357:2;4349:6;4345:15;4338:64;4452:3;4441:9;4437:19;4424:33;4466:28;4488:5;4466:28;:::i;:::-;4522:3;4510:16;;4503:31;3135:1430;;;;-1:-1:-1;3135:1430:201;;-1:-1:-1;;3135:1430:201:o;4760:359::-;4868:6;4876;4884;4937:2;4925:9;4916:7;4912:23;4908:32;4905:52;;;4953:1;4950;4943:12;4905:52;4989:9;4976:23;4966:33;;5018:38;5052:2;5041:9;5037:18;5018:38;:::i;:::-;5008:48;;5075:38;5109:2;5098:9;5094:18;5075:38;:::i;:::-;5065:48;;4760:359;;;;;:::o;5124:504::-;5303:6;5311;5319;5327;5380:3;5368:9;5359:7;5355:23;5351:33;5348:53;;;5397:1;5394;5387:12;5348:53;5433:9;5420:23;5410:33;;5490:2;5479:9;5475:18;5462:32;5452:42;;5513:38;5547:2;5536:9;5532:18;5513:38;:::i;:::-;5503:48;;5570:52;5618:2;5607:9;5603:18;5570:52;:::i;:::-;5560:62;;5124:504;;;;;;;:::o;5633:184::-;5685:77;5682:1;5675:88;5782:4;5779:1;5772:15;5806:4;5803:1;5796:15;6297:367;6382:6;6390;6398;6451:2;6439:9;6430:7;6426:23;6422:32;6419:52;;;6467:1;6464;6457:12;6419:52;6499:9;6493:16;6518:28;6540:5;6518:28;:::i;:::-;6610:2;6595:18;;6589:25;6654:2;6639:18;;;6633:25;6565:5;;6589:25;;-1:-1:-1;6633:25:201;6297:367;-1:-1:-1;;;6297:367:201:o;6669:306::-;6745:6;6753;6806:2;6794:9;6785:7;6781:23;6777:32;6774:52;;;6822:1;6819;6812:12;6774:52;6854:9;6848:16;6873:28;6895:5;6873:28;:::i;:::-;6965:2;6950:18;;;;6944:25;6920:5;;6944:25;;-1:-1:-1;;;6669:306:201:o;6980:184::-;7032:77;7029:1;7022:88;7129:4;7126:1;7119:15;7153:4;7150:1;7143:15;7169:125;7209:4;7237:1;7234;7231:8;7228:34;;;7242:18;;:::i;:::-;-1:-1:-1;7279:9:201;;7169:125::o;7299:482::-;7388:1;7431:5;7388:1;7445:330;7466:7;7456:8;7453:21;7445:330;;;7585:4;7517:66;7513:77;7507:4;7504:87;7501:113;;;7594:18;;:::i;:::-;7644:7;7634:8;7630:22;7627:55;;;7664:16;;;;7627:55;7743:22;;;;7703:15;;;;7445:330;;;7449:3;7299:482;;;;;:::o;7786:866::-;7835:5;7865:8;7855:80;;-1:-1:-1;7906:1:201;7920:5;;7855:80;7954:4;7944:76;;-1:-1:-1;7991:1:201;8005:5;;7944:76;8036:4;8054:1;8049:59;;;;8122:1;8117:130;;;;8029:218;;8049:59;8079:1;8070:10;;8093:5;;;8117:130;8154:3;8144:8;8141:17;8138:43;;;8161:18;;:::i;:::-;-1:-1:-1;;8217:1:201;8203:16;;8232:5;;8029:218;;8331:2;8321:8;8318:16;8312:3;8306:4;8303:13;8299:36;8293:2;8283:8;8280:16;8275:2;8269:4;8266:12;8262:35;8259:77;8256:159;;;-1:-1:-1;8368:19:201;;;8400:5;;8256:159;8447:34;8472:8;8466:4;8447:34;:::i;:::-;8577:6;8509:66;8505:79;8496:7;8493:92;8490:118;;;8588:18;;:::i;:::-;8626:20;;7786:866;-1:-1:-1;;;7786:866:201:o;8657:131::-;8717:5;8746:36;8773:8;8767:4;8746:36;:::i;8793:184::-;8845:77;8842:1;8835:88;8942:4;8939:1;8932:15;8966:4;8963:1;8956:15;8982:274;9022:1;9048;9038:189;;9083:77;9080:1;9073:88;9184:4;9181:1;9174:15;9212:4;9209:1;9202:15;9038:189;-1:-1:-1;9241:9:201;;8982:274::o;9261:253::-;9301:3;9329:34;9390:2;9387:1;9383:10;9420:2;9417:1;9413:10;9451:3;9447:2;9443:12;9438:3;9435:21;9432:47;;;9459:18;;:::i;:::-;9495:13;;9261:253;-1:-1:-1;;;;9261:253:201:o;10003:301::-;10091:1;10084:5;10081:12;10071:200;;10127:77;10124:1;10117:88;10228:4;10225:1;10218:15;10256:4;10253:1;10246:15;10071:200;10280:18;;10003:301::o;10309:486::-;10590:42;10578:55;;10560:74;;10665:2;10650:18;;10643:34;;;10547:3;10532:19;;10686:60;10742:2;10727:18;;10719:6;10686:60;:::i;:::-;10782:6;10777:2;10766:9;10762:18;10755:34;10309:486;;;;;;;:::o;11031:184::-;11101:6;11154:2;11142:9;11133:7;11129:23;11125:32;11122:52;;;11170:1;11167;11160:12;11122:52;-1:-1:-1;11193:16:201;;11031:184;-1:-1:-1;11031:184:201:o;11220:245::-;11299:6;11307;11360:2;11348:9;11339:7;11335:23;11331:32;11328:52;;;11376:1;11373;11366:12;11328:52;-1:-1:-1;;11399:16:201;;11455:2;11440:18;;;11434:25;11399:16;;11434:25;;-1:-1:-1;11220:245:201:o;11843:128::-;11883:3;11914:1;11910:6;11907:1;11904:13;11901:39;;;11920:18;;:::i;:::-;-1:-1:-1;11956:9:201;;11843:128::o;13158:223::-;13312:2;13297:18;;13324:51;13301:9;13357:6;13324:51;:::i;13386:466::-;13482:6;13490;13498;13506;13559:3;13547:9;13538:7;13534:23;13530:33;13527:53;;;13576:1;13573;13566:12;13527:53;13605:9;13599:16;13589:26;;13655:2;13644:9;13640:18;13634:25;13624:35;;13699:2;13688:9;13684:18;13678:25;13668:35;;13746:2;13735:9;13731:18;13725:25;13790:12;13783:5;13779:24;13772:5;13769:35;13759:63;;13818:1;13815;13808:12;13759:63;13386:466;;;;-1:-1:-1;13386:466:201;;-1:-1:-1;;13386:466:201:o;13857:656::-;13969:4;13998:2;14027;14016:9;14009:21;14059:6;14053:13;14102:6;14097:2;14086:9;14082:18;14075:34;14127:1;14137:140;14151:6;14148:1;14145:13;14137:140;;;14246:14;;;14242:23;;14236:30;14212:17;;;14231:2;14208:26;14201:66;14166:10;;14137:140;;;14295:6;14292:1;14289:13;14286:91;;;14365:1;14360:2;14351:6;14340:9;14336:22;14332:31;14325:42;14286:91;-1:-1:-1;14429:2:201;14417:15;14434:66;14413:88;14398:104;;;;14504:2;14394:113;;13857:656;-1:-1:-1;;;13857:656:201:o;14518:245::-;14585:6;14638:2;14626:9;14617:7;14613:23;14609:32;14606:52;;;14654:1;14651;14644:12;14606:52;14686:9;14680:16;14705:28;14727:5;14705:28;:::i;14768:228::-;14808:7;14934:1;14866:66;14862:74;14859:1;14856:81;14851:1;14844:9;14837:17;14833:105;14830:131;;;14941:18;;:::i;:::-;-1:-1:-1;14981:9:201;;14768:228::o;16338:306::-;16426:6;16434;16442;16495:2;16483:9;16474:7;16470:23;16466:32;16463:52;;;16511:1;16508;16501:12;16463:52;16540:9;16534:16;16524:26;;16590:2;16579:9;16575:18;16569:25;16559:35;;16634:2;16623:9;16619:18;16613:25;16603:35;;16338:306;;;;;:::o;17307:246::-;17347:4;17376:34;17460:10;;;;17430;;17482:12;;;17479:38;;;17497:18;;:::i;:::-;17534:13;;17307:246;-1:-1:-1;;;17307:246:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"4336600","executionCost":"5047","totalCost":"4341647"},"external":{"executeBorrow(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteBorrowParams)":"infinite","executeRebalanceStableBorrowRate(DataTypes.ReserveData storage,address,address)":"infinite","executeRepay(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteRepayParams)":"infinite","executeSwapBorrowRateMode(DataTypes.ReserveData storage,DataTypes.UserConfigurationMap storage,address,DataTypes.InterestRateMode)":"infinite"}},"methodIdentifiers":{"executeBorrow(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteBorrowParams)":"1e6473f9","executeRebalanceStableBorrowRate(DataTypes.ReserveData storage,address,address)":"6973f744","executeRepay(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteRepayParams)":"40e95de6","executeSwapBorrowRateMode(DataTypes.ReserveData storage,DataTypes.UserConfigurationMap storage,address,DataTypes.InterestRateMode)":"eac4d703"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowRate\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"Borrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalDebt\",\"type\":\"uint256\"}],\"name\":\"IsolationModeTotalDebtUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"RebalanceStableBorrowRate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"repayer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"useATokens\",\"type\":\"bool\"}],\"name\":\"Repay\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"}],\"name\":\"SwapBorrowRateMode\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"executeBorrow(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteBorrowParams)\":{\"details\":\"Emits the `Borrow()` event\",\"params\":{\"eModeCategories\":\"The configuration of all the efficiency mode categories\",\"params\":\"The additional parameters needed to execute the borrow function\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\",\"userConfig\":\"The user configuration mapping that tracks the supplied/borrowed assets\"}},\"executeRebalanceStableBorrowRate(DataTypes.ReserveData storage,address,address)\":{\"details\":\"The rules that define if a position can be rebalanced are implemented in `ValidationLogic.validateRebalanceStableBorrowRate()`Emits the `RebalanceStableBorrowRate()` event\",\"params\":{\"asset\":\"The asset of the position being rebalanced\",\"reserve\":\"The state of the reserve of the asset being repaid\",\"user\":\"The user being rebalanced\"}},\"executeRepay(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteRepayParams)\":{\"details\":\"Emits the `Repay()` event\",\"params\":{\"params\":\"The additional parameters needed to execute the repay function\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\",\"userConfig\":\"The user configuration mapping that tracks the supplied/borrowed assets\"},\"returns\":{\"_0\":\"The actual amount being repaid\"}},\"executeSwapBorrowRateMode(DataTypes.ReserveData storage,DataTypes.UserConfigurationMap storage,address,DataTypes.InterestRateMode)\":{\"details\":\"Emits the `Swap()` event\",\"params\":{\"asset\":\"The asset of the position being swapped\",\"interestRateMode\":\"The current interest rate mode of the position being swapped\",\"reserve\":\"The of the reserve of the asset being repaid\",\"userConfig\":\"The user configuration mapping that tracks the supplied/borrowed assets\"}}},\"title\":\"BorrowLogic library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeBorrow(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteBorrowParams)\":{\"notice\":\"Implements the borrow feature. Borrowing allows users that provided collateral to draw liquidity from the Aave protocol proportionally to their collateralization power. For isolated positions, it also increases the isolated debt.\"},\"executeRebalanceStableBorrowRate(DataTypes.ReserveData storage,address,address)\":{\"notice\":\"Implements the rebalance stable borrow rate feature. In case of liquidity crunches on the protocol, stable rate borrows might need to be rebalanced to bring back equilibrium between the borrow and supply APYs.\"},\"executeRepay(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteRepayParams)\":{\"notice\":\"Implements the repay feature. Repaying transfers the underlying back to the aToken and clears the equivalent amount of debt for the user by burning the corresponding debt token. For isolated positions, it also reduces the isolated debt.\"},\"executeSwapBorrowRateMode(DataTypes.ReserveData storage,DataTypes.UserConfigurationMap storage,address,DataTypes.InterestRateMode)\":{\"notice\":\"Implements the swap borrow rate feature. Borrowers can swap from variable to stable positions at any time.\"}},\"notice\":\"Implements the base logic for all the actions related to borrowing\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol\":\"BorrowLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\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(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\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 {AccessControl-_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) external view returns (bool);\\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 {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\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) external;\\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) external;\\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) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title Helpers library\\n * @author Aave\\n */\\nlibrary Helpers {\\n  /**\\n   * @notice Fetches the user current stable and variable debt balances\\n   * @param user The user address\\n   * @param reserveCache The reserve cache data object\\n   * @return The stable debt balance\\n   * @return The variable debt balance\\n   */\\n  function getUserCurrentDebt(\\n    address user,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal view returns (uint256, uint256) {\\n    return (\\n      IERC20(reserveCache.stableDebtTokenAddress).balanceOf(user),\\n      IERC20(reserveCache.variableDebtTokenAddress).balanceOf(user)\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x7e0c79cab4c30d9fadd227dcdecb51046e01d74ed34e5e8597f928f7f3a97640\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Helpers} from '../helpers/Helpers.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\\n\\n/**\\n * @title BorrowLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to borrowing\\n */\\nlibrary BorrowLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice Implements the borrow feature. Borrowing allows users that provided collateral to draw liquidity from the\\n   * Aave protocol proportionally to their collateralization power. For isolated positions, it also increases the\\n   * isolated debt.\\n   * @dev  Emits the `Borrow()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the borrow function\\n   */\\n  function executeBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteBorrowParams memory params\\n  ) public {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    (\\n      bool isolationModeActive,\\n      address isolationModeCollateralAddress,\\n      uint256 isolationModeDebtCeiling\\n    ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    ValidationLogic.validateBorrow(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.ValidateBorrowParams({\\n        reserveCache: reserveCache,\\n        userConfig: userConfig,\\n        asset: params.asset,\\n        userAddress: params.onBehalfOf,\\n        amount: params.amount,\\n        interestRateMode: params.interestRateMode,\\n        maxStableLoanPercent: params.maxStableRateBorrowSizePercent,\\n        reservesCount: params.reservesCount,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory,\\n        priceOracleSentinel: params.priceOracleSentinel,\\n        isolationModeActive: isolationModeActive,\\n        isolationModeCollateralAddress: isolationModeCollateralAddress,\\n        isolationModeDebtCeiling: isolationModeDebtCeiling\\n      })\\n    );\\n\\n    uint256 currentStableRate = 0;\\n    bool isFirstBorrowing = false;\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      currentStableRate = reserve.currentStableBorrowRate;\\n\\n      (\\n        isFirstBorrowing,\\n        reserveCache.nextTotalStableDebt,\\n        reserveCache.nextAvgStableBorrowRate\\n      ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).mint(\\n        params.user,\\n        params.onBehalfOf,\\n        params.amount,\\n        currentStableRate\\n      );\\n    } else {\\n      (isFirstBorrowing, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).mint(params.user, params.onBehalfOf, params.amount, reserveCache.nextVariableBorrowIndex);\\n    }\\n\\n    if (isFirstBorrowing) {\\n      userConfig.setBorrowing(reserve.id, true);\\n    }\\n\\n    if (isolationModeActive) {\\n      uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt += (params.amount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n      emit IsolationModeTotalDebtUpdated(\\n        isolationModeCollateralAddress,\\n        nextIsolationModeTotalDebt\\n      );\\n    }\\n\\n    reserve.updateInterestRates(\\n      reserveCache,\\n      params.asset,\\n      0,\\n      params.releaseUnderlying ? params.amount : 0\\n    );\\n\\n    if (params.releaseUnderlying) {\\n      IAToken(reserveCache.aTokenAddress).transferUnderlyingTo(params.user, params.amount);\\n    }\\n\\n    emit Borrow(\\n      params.asset,\\n      params.user,\\n      params.onBehalfOf,\\n      params.amount,\\n      params.interestRateMode,\\n      params.interestRateMode == DataTypes.InterestRateMode.STABLE\\n        ? currentStableRate\\n        : reserve.currentVariableBorrowRate,\\n      params.referralCode\\n    );\\n  }\\n\\n  /**\\n   * @notice Implements the repay feature. Repaying transfers the underlying back to the aToken and clears the\\n   * equivalent amount of debt for the user by burning the corresponding debt token. For isolated positions, it also\\n   * reduces the isolated debt.\\n   * @dev  Emits the `Repay()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the repay function\\n   * @return The actual amount being repaid\\n   */\\n  function executeRepay(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteRepayParams memory params\\n  ) external returns (uint256) {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n\\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\\n      params.onBehalfOf,\\n      reserveCache\\n    );\\n\\n    ValidationLogic.validateRepay(\\n      reserveCache,\\n      params.amount,\\n      params.interestRateMode,\\n      params.onBehalfOf,\\n      stableDebt,\\n      variableDebt\\n    );\\n\\n    uint256 paybackAmount = params.interestRateMode == DataTypes.InterestRateMode.STABLE\\n      ? stableDebt\\n      : variableDebt;\\n\\n    // Allows a user to repay with aTokens without leaving dust from interest.\\n    if (params.useATokens && params.amount == type(uint256).max) {\\n      params.amount = IAToken(reserveCache.aTokenAddress).balanceOf(msg.sender);\\n    }\\n\\n    if (params.amount < paybackAmount) {\\n      paybackAmount = params.amount;\\n    }\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).burn(params.onBehalfOf, paybackAmount);\\n    } else {\\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).burn(params.onBehalfOf, paybackAmount, reserveCache.nextVariableBorrowIndex);\\n    }\\n\\n    reserve.updateInterestRates(\\n      reserveCache,\\n      params.asset,\\n      params.useATokens ? 0 : paybackAmount,\\n      0\\n    );\\n\\n    if (stableDebt + variableDebt - paybackAmount == 0) {\\n      userConfig.setBorrowing(reserve.id, false);\\n    }\\n\\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\\n      reservesData,\\n      reservesList,\\n      userConfig,\\n      reserveCache,\\n      paybackAmount\\n    );\\n\\n    if (params.useATokens) {\\n      IAToken(reserveCache.aTokenAddress).burn(\\n        msg.sender,\\n        reserveCache.aTokenAddress,\\n        paybackAmount,\\n        reserveCache.nextLiquidityIndex\\n      );\\n    } else {\\n      IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, paybackAmount);\\n      IAToken(reserveCache.aTokenAddress).handleRepayment(\\n        msg.sender,\\n        params.onBehalfOf,\\n        paybackAmount\\n      );\\n    }\\n\\n    emit Repay(params.asset, params.onBehalfOf, msg.sender, paybackAmount, params.useATokens);\\n\\n    return paybackAmount;\\n  }\\n\\n  /**\\n   * @notice Implements the rebalance stable borrow rate feature. In case of liquidity crunches on the protocol, stable\\n   * rate borrows might need to be rebalanced to bring back equilibrium between the borrow and supply APYs.\\n   * @dev The rules that define if a position can be rebalanced are implemented in `ValidationLogic.validateRebalanceStableBorrowRate()`\\n   * @dev Emits the `RebalanceStableBorrowRate()` event\\n   * @param reserve The state of the reserve of the asset being repaid\\n   * @param asset The asset of the position being rebalanced\\n   * @param user The user being rebalanced\\n   */\\n  function executeRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    address asset,\\n    address user\\n  ) external {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateRebalanceStableBorrowRate(reserve, reserveCache, asset);\\n\\n    IStableDebtToken stableDebtToken = IStableDebtToken(reserveCache.stableDebtTokenAddress);\\n    uint256 stableDebt = IERC20(address(stableDebtToken)).balanceOf(user);\\n\\n    stableDebtToken.burn(user, stableDebt);\\n\\n    (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = stableDebtToken\\n      .mint(user, user, stableDebt, reserve.currentStableBorrowRate);\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    emit RebalanceStableBorrowRate(asset, user);\\n  }\\n\\n  /**\\n   * @notice Implements the swap borrow rate feature. Borrowers can swap from variable to stable positions at any time.\\n   * @dev Emits the `Swap()` event\\n   * @param reserve The of the reserve of the asset being repaid\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param asset The asset of the position being swapped\\n   * @param interestRateMode The current interest rate mode of the position being swapped\\n   */\\n  function executeSwapBorrowRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    DataTypes.InterestRateMode interestRateMode\\n  ) external {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\\n      msg.sender,\\n      reserveCache\\n    );\\n\\n    ValidationLogic.validateSwapRateMode(\\n      reserve,\\n      reserveCache,\\n      userConfig,\\n      stableDebt,\\n      variableDebt,\\n      interestRateMode\\n    );\\n\\n    if (interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).burn(msg.sender, stableDebt);\\n\\n      (, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).mint(msg.sender, msg.sender, stableDebt, reserveCache.nextVariableBorrowIndex);\\n    } else {\\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).burn(msg.sender, variableDebt, reserveCache.nextVariableBorrowIndex);\\n\\n      (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).mint(msg.sender, msg.sender, variableDebt, reserve.currentStableBorrowRate);\\n    }\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    emit SwapBorrowRateMode(asset, msg.sender, interestRateMode);\\n  }\\n}\\n\",\"keccak256\":\"0xf3d4fcd846149f0414db46d23cee241831b3c04c375477e84bdb5a95bd3ccac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/IsolationModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title IsolationModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for handling repayments for assets borrowed in isolation mode\\n */\\nlibrary IsolationModeLogic {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice updated the isolated debt whenever a position collateralized by an isolated asset is repaid or liquidated\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping\\n   * @param reserveCache The cached data of the reserve\\n   * @param repayAmount The amount being repaid\\n   */\\n  function updateIsolatedDebtIfIsolated(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 repayAmount\\n  ) internal {\\n    (bool isolationModeActive, address isolationModeCollateralAddress, ) = userConfig\\n      .getIsolationModeState(reservesData, reservesList);\\n\\n    if (isolationModeActive) {\\n      uint128 isolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt;\\n\\n      uint128 isolatedDebtRepaid = (repayAmount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n\\n      // since the debt ceiling does not take into account the interest accrued, it might happen that amount\\n      // repaid > debt in isolation mode\\n      if (isolationModeTotalDebt <= isolatedDebtRepaid) {\\n        reservesData[isolationModeCollateralAddress].isolationModeTotalDebt = 0;\\n        emit IsolationModeTotalDebtUpdated(isolationModeCollateralAddress, 0);\\n      } else {\\n        uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n          .isolationModeTotalDebt = isolationModeTotalDebt - isolatedDebtRepaid;\\n        emit IsolationModeTotalDebtUpdated(\\n          isolationModeCollateralAddress,\\n          nextIsolationModeTotalDebt\\n        );\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xf96e7a7bb1d0d62c233462fcb86954361ef2d7be03bf444017ce8a443d0b6cc1\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeBorrow(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteBorrowParams)":{"notice":"Implements the borrow feature. Borrowing allows users that provided collateral to draw liquidity from the Aave protocol proportionally to their collateralization power. For isolated positions, it also increases the isolated debt."},"executeRebalanceStableBorrowRate(DataTypes.ReserveData storage,address,address)":{"notice":"Implements the rebalance stable borrow rate feature. In case of liquidity crunches on the protocol, stable rate borrows might need to be rebalanced to bring back equilibrium between the borrow and supply APYs."},"executeRepay(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteRepayParams)":{"notice":"Implements the repay feature. Repaying transfers the underlying back to the aToken and clears the equivalent amount of debt for the user by burning the corresponding debt token. For isolated positions, it also reduces the isolated debt."},"executeSwapBorrowRateMode(DataTypes.ReserveData storage,DataTypes.UserConfigurationMap storage,address,DataTypes.InterestRateMode)":{"notice":"Implements the swap borrow rate feature. Borrowers can swap from variable to stable positions at any time."}},"notice":"Implements the base logic for all the actions related to borrowing","version":1}}},"@aave/core-v3/contracts/protocol/libraries/logic/BridgeLogic.sol":{"BridgeLogic":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"backer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"BackUnbacked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"MintUnbacked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralEnabled","type":"event"}],"devdoc":{"kind":"dev","methods":{"executeBackUnbacked(DataTypes.ReserveData storage,address,uint256,uint256,uint256)":{"details":"It is not possible to back more than the existing unbacked amount of the reserveEmits the `BackUnbacked` event","params":{"amount":"The amount to back","asset":"The address of the underlying asset to repay","fee":"The amount paid in fees","protocolFeeBps":"The fraction of fees in basis points paid to the protocol","reserve":"The reserve to back unbacked for"},"returns":{"_0":"The backed amount"}},"executeMintUnbacked(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,address,uint256,address,uint16)":{"details":"Essentially a supply without transferring the underlying.Emits the `MintUnbacked` eventEmits the `ReserveUsedAsCollateralEnabled` if asset is set as collateral","params":{"amount":"The amount to mint","asset":"The address of the underlying asset to mint aTokens of","onBehalfOf":"The address that will receive the aTokens","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves","userConfig":"The user configuration mapping that tracks the supplied/borrowed assets"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6122e261003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100405760003560e01c80630413c86f146100455780638e74324814610067575b600080fd5b81801561005157600080fd5b50610065610060366004611e11565b610099565b005b81801561007357600080fd5b50610087610082366004611e8a565b6103f7565b60405190815260200160405180910390f35b73ffffffffffffffffffffffffffffffffffffffff84166000908152602088905260408120906100c8826106ee565b90506100d48282610907565b6100df818387610992565b6101c08101515160b081901c640fffffffff169060301c60ff16600061010488610d2a565b60088601805460109061013e90849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16611f01565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790556fffffffffffffffffffffffffffffffff16905081600a6101949190612055565b61019e9084612061565b8111156040518060400160405280600281526020017f353200000000000000000000000000000000000000000000000000000000000081525090610218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b60405180910390fd5b5061022785858b600080610dd0565b6101e08401516101008501516040517fb3f1c93d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8a81166024830152604482018c90526064820192909252600092919091169063b3f1c93d906084016020604051808303816000875af11580156102bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102df9190612111565b9050801561038c576102fe8d8d8d886101c00151896101e00151611111565b1561038c576003860154610332908c907501000000000000000000000000000000000000000000900461ffff166001611351565b8773ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a35b60408051338152602081018b905261ffff89169173ffffffffffffffffffffffffffffffffffffffff808c1692908e16917ff25af37b3d3ec226063dc9bdc103ece7eb110a50f340fe854bb7bc1b0676d7d0910160405180910390a450505050505050505050505050565b600080610403876106ee565b905061040f8782610907565b600887015460009070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16861061047357600888015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16610475565b855b9050600061048386866113e8565b905060006104918288612133565b9050600061049f888561214a565b61010086015160088d0154919250610555916104cf916fffffffffffffffffffffffffffffffff9091169061142b565b866101e0015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561051f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105439190612162565b61054d919061214a565b8c9084611482565b61010086018190526105719061056c908590611522565b610d2a565b60088c0180546000906105979084906fffffffffffffffffffffffffffffffff16611f01565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506105d684610d2a565b60088c01805460109061061090849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1661217b565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550610660858b8360008f610dd090949392919063ffffffff16565b6101e085015161068a9073ffffffffffffffffffffffffffffffffffffffff8c1690339084611561565b60408051858152602081018a9052339173ffffffffffffffffffffffffffffffffffffffff8d16917f281596e92b2d974beb7d4f124df30a0b39067b096893e95011ce4bdad798b759910160405180910390a3509193505050505b95945050505050565b6106f6611d3f565b6106fe611d3f565b60408051602081018252845481526101c0830181905251901c61ffff166101a082015260018301546fffffffffffffffffffffffffffffffff808216610100840181905260e0840152600285015480821661014085018190526101208501527001000000000000000000000000000000009283900482166101608501528290041661018083015260048085015473ffffffffffffffffffffffffffffffffffffffff9081166101e085015260058601548116610200850152600686015416610220840181905260038601549290920464ffffffffff16610240840152604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905163b1bf962d928281019260209291908290030181865afa15801561082b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084f9190612162565b816020018181525081600001818152505080610200015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa1580156108b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d491906121ac565b64ffffffffff166102608501526060840181905260808401829052604084019290925260c083015260a082015292915050565b60038201544264ffffffffff908116700100000000000000000000000000000000909204161415610936575050565b6109408282611643565b61094a8282611764565b5060030180547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff1602179055565b60408051808201909152600281527f32360000000000000000000000000000000000000000000000000000000000006020820152816109fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b506000806000610a55866101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b9450505092509250826040518060400160405280600281526020017f323700000000000000000000000000000000000000000000000000000000000081525090610acc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b5060408051808201909152600281527f323900000000000000000000000000000000000000000000000000000000000060208201528115610b3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b5060408051808201909152600281527f323800000000000000000000000000000000000000000000000000000000000060208201528215610ba8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b506101c08601515160741c640fffffffff16801580610cb257506101c08701515160301c60ff16610bda90600a612055565b610be49082612061565b85610ca58961010001518960080160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168b6101e0015173ffffffffffffffffffffffffffffffffffffffff1663b1bf962d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c959190612162565b610c9f919061214a565b9061142b565b610caf919061214a565b11155b6040518060400160405280600281526020017f353100000000000000000000000000000000000000000000000000000000000081525090610d20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b5050505050505050565b60006fffffffffffffffffffffffffffffffff821115610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f3238206269747300000000000000000000000000000000000000000000000000606482015260840161020f565b5090565b610dfb6040518060800160405280600081526020016000815260200160008152602001600081525090565b6101408501516020860151610e0f9161142b565b60608083019182526007880154604080516101208101825260088b01546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000009091041681526020810188905280820187905260c0808b0151948201949094529351608085015260a0808a0151908501526101a08901519284019290925273ffffffffffffffffffffffffffffffffffffffff87811660e08501526101e0890151811661010085015291517fa589870900000000000000000000000000000000000000000000000000000000815291169163a589870991610f709190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa158015610f8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb191906121f7565b60408401526020830152808252610fc790610d2a565b6001870180546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055602081015161100a90610d2a565b6003870180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055604081015161105b90610d2a565b6002870180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905580516020808301516040808501516101008a01516101408b0151835196875294860193909352908401526060830152608082015273ffffffffffffffffffffffffffffffffffffffff8516907f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a9060a00160405180910390a2505050505050565b815160009060d41c64ffffffffff161561133b5760008273ffffffffffffffffffffffffffffffffffffffff16637535d2466040518163ffffffff1660e01b8152600401602060405180830381865afa158015611172573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111969190612225565b73ffffffffffffffffffffffffffffffffffffffff16630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112049190612225565b90508073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611251573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112759190612225565b6040517f91d148540000000000000000000000000000000000000000000000000000000081527fd1d2cf869016112a9af1107bcf43c3759daf22cf734aad47d0c9c726e33bc782600482015233602482015273ffffffffffffffffffffffffffffffffffffffff91909116906391d1485490604401602060405180830381865afa158015611307573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132b9190612111565b6113395760009150506106e5565b505b611347868686866118e4565b9695505050505050565b60408051808201909152600281527f37340000000000000000000000000000000000000000000000000000000000006020820152608083106113c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b50600182811b81011b81156113da578354811784556113e2565b835481191684555b50505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec778390048411151761141d57600080fd5b506127109102611388010490565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761146057600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b600183015460009081906114ca906fffffffffffffffffffffffffffffffff166b033b2e3c9fd0803ce8000000610c956114bb88611981565b6114c488611981565b90611522565b90506114d581610d2a565b6001860180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691909117905590505b9392505050565b600081156b033b2e3c9fd0803ce80000006002840419048411171561154657600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af16115cc573d6000803e3d6000fd5b506115d68561199c565b61163c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d00000000000000604482015260640161020f565b5050505050565b610160810151156116d3576000611664826101600151836102400151611a68565b905061167d8260e001518261142b90919063ffffffff16565b610100830181905261168e90610d2a565b6001840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b8051156117605760006116f0826101800151836102400151611aaf565b905061170a8261012001518261142b90919063ffffffff16565b610140830181905261171b90610d2a565b6002840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b5050565b61179d6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6101a08201516117ac57505050565b61012082015182516117bd9161142b565b602082015261014082015182516117d39161142b565b604082015260608201516102608301516102408401516117fb92919064ffffffffff16611ab8565b6060820181905260408301516118109161142b565b80825260208201516080840151604084015161182c919061214a565b6118369190612133565b6118409190612133565b608082018190526101a083015161185791906113e8565b60a08201819052156118df5761188261056c8361010001518360a0015161152290919063ffffffff16565b6008840180546000906118a89084906fffffffffffffffffffffffffffffffff16611f01565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b505050565b60006118f2825161ffff1690565b6118fe57506000611979565b60408051602081019091528354908190527faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1661193d57506001611979565b60408051602081019091528354815260009061195a908787611bff565b50509050801580156119755750825160d41c64ffffffffff16155b9150505b949350505050565b633b9aca00818102908104821461199757600080fd5b919050565b60006119dc565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d8015611a1b5760208114611a5557611a167f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f6119a3565b611a62565b823b611a4c57611a4c7f475076323a206e6f74206120636f6e747261637400000000000000000000000060146119a3565b60019150611a62565b3d6000803e600051151591505b50919050565b600080611a7c64ffffffffff841642612133565b611a869085612061565b6301e1338090049050611aa5816b033b2e3c9fd0803ce800000061214a565b9150505b92915050565b600061151b8383425b600080611acc64ffffffffff851684612133565b905080611ae8576b033b2e3c9fd0803ce800000091505061151b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511611b1e576000611b23565b600285035b925066038882915c4000611b378a8061142b565b81611b4457611b44612242565b0491506301e13380611b56838b61142b565b81611b6357611b63612242565b049050600082611b738688612061565b611b7d9190612061565b60029004905060008285611b91888a612061565b611b9b9190612061565b611ba59190612061565b60069004905080826301e13380611bbc8a8f612061565b611bc69190612271565b611bdc906b033b2e3c9fd0803ce800000061214a565b611be6919061214a565b611bf0919061214a565b9b9a5050505050505050505050565b6000806000611c0d86611cb7565b15611ca4576000611c3e877faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa611cfb565b6000818152602087815260408083205473ffffffffffffffffffffffffffffffffffffffff168084528a8352818420825193840190925290549182905292935060d41c64ffffffffff1690508015611ca057600195509093509150611cae9050565b5050505b5060009150819050805b93509350939050565b80516000907faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa16801580159061151b5750611cf3600182612133565b161592915050565b815160009082167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101198116825b60029190911c9081156106e557600101611d2a565b6040518061028001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001611dc36040518060200160405280600081525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b73ffffffffffffffffffffffffffffffffffffffff81168114611e0e57600080fd5b50565b600080600080600080600060e0888a031215611e2c57600080fd5b8735965060208801359550604088013594506060880135611e4c81611dec565b93506080880135925060a0880135611e6381611dec565b915060c088013561ffff81168114611e7a57600080fd5b8091505092959891949750929550565b600080600080600060a08688031215611ea257600080fd5b853594506020860135611eb481611dec565b94979496505050506040830135926060810135926080909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006fffffffffffffffffffffffffffffffff808316818516808303821115611f2c57611f2c611ed2565b01949350505050565b600181815b80851115611f8e57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115611f7457611f74611ed2565b80851615611f8157918102915b93841c9390800290611f3a565b509250929050565b600082611fa557506001611aa9565b81611fb257506000611aa9565b8160018114611fc85760028114611fd257611fee565b6001915050611aa9565b60ff841115611fe357611fe3611ed2565b50506001821b611aa9565b5060208310610133831016604e8410600b8410161715612011575081810a611aa9565b61201b8383611f35565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561204d5761204d611ed2565b029392505050565b600061151b8383611f96565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561209957612099611ed2565b500290565b600060208083528351808285015260005b818110156120cb578581018301518582016040015282016120af565b818111156120dd576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561212357600080fd5b8151801515811461151b57600080fd5b60008282101561214557612145611ed2565b500390565b6000821982111561215d5761215d611ed2565b500190565b60006020828403121561217457600080fd5b5051919050565b60006fffffffffffffffffffffffffffffffff838116908316818110156121a4576121a4611ed2565b039392505050565b600080600080608085870312156121c257600080fd5b845193506020850151925060408501519150606085015164ffffffffff811681146121ec57600080fd5b939692955090935050565b60008060006060848603121561220c57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561223757600080fd5b815161151b81611dec565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826122a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212202498e903bb834f32cb31eee280ffd635a521efbdb60bc25ba5dcbc8b3db806d264736f6c634300080a0033","opcodes":"PUSH2 0x22E2 PUSH2 0x3A PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x40 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x413C86F EQ PUSH2 0x45 JUMPI DUP1 PUSH4 0x8E743248 EQ PUSH2 0x67 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x65 PUSH2 0x60 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E11 JUMP JUMPDEST PUSH2 0x99 JUMP JUMPDEST STOP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x87 PUSH2 0x82 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E8A JUMP JUMPDEST PUSH2 0x3F7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0xC8 DUP3 PUSH2 0x6EE JUMP JUMPDEST SWAP1 POP PUSH2 0xD4 DUP3 DUP3 PUSH2 0x907 JUMP JUMPDEST PUSH2 0xDF DUP2 DUP4 DUP8 PUSH2 0x992 JUMP JUMPDEST PUSH2 0x1C0 DUP2 ADD MLOAD MLOAD PUSH1 0xB0 DUP2 SWAP1 SHR PUSH5 0xFFFFFFFFF AND SWAP1 PUSH1 0x30 SHR PUSH1 0xFF AND PUSH1 0x0 PUSH2 0x104 DUP9 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x8 DUP7 ADD DUP1 SLOAD PUSH1 0x10 SWAP1 PUSH2 0x13E SWAP1 DUP5 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1F01 JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 PUSH1 0xA PUSH2 0x194 SWAP2 SWAP1 PUSH2 0x2055 JUMP JUMPDEST PUSH2 0x19E SWAP1 DUP5 PUSH2 0x2061 JUMP JUMPDEST DUP2 GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3532000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x218 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH2 0x227 DUP6 DUP6 DUP12 PUSH1 0x0 DUP1 PUSH2 0xDD0 JUMP JUMPDEST PUSH2 0x1E0 DUP5 ADD MLOAD PUSH2 0x100 DUP6 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP13 SWAP1 MSTORE PUSH1 0x64 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2BB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2DF SWAP2 SWAP1 PUSH2 0x2111 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x38C JUMPI PUSH2 0x2FE DUP14 DUP14 DUP14 DUP9 PUSH2 0x1C0 ADD MLOAD DUP10 PUSH2 0x1E0 ADD MLOAD PUSH2 0x1111 JUMP JUMPDEST ISZERO PUSH2 0x38C JUMPI PUSH1 0x3 DUP7 ADD SLOAD PUSH2 0x332 SWAP1 DUP13 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x1 PUSH2 0x1351 JUMP JUMPDEST DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH31 0x58A56EA94653CDF4F152D227ACE22D4C00AD99E2A43F58CB7D9E3FEB295F2 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP12 SWAP1 MSTORE PUSH2 0xFFFF DUP10 AND SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND SWAP3 SWAP1 DUP15 AND SWAP2 PUSH32 0xF25AF37B3D3EC226063DC9BDC103ECE7EB110A50F340FE854BB7BC1B0676D7D0 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x403 DUP8 PUSH2 0x6EE JUMP JUMPDEST SWAP1 POP PUSH2 0x40F DUP8 DUP3 PUSH2 0x907 JUMP JUMPDEST PUSH1 0x8 DUP8 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 LT PUSH2 0x473 JUMPI PUSH1 0x8 DUP9 ADD SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x475 JUMP JUMPDEST DUP6 JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x483 DUP7 DUP7 PUSH2 0x13E8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x491 DUP3 DUP9 PUSH2 0x2133 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x49F DUP9 DUP6 PUSH2 0x214A JUMP JUMPDEST PUSH2 0x100 DUP7 ADD MLOAD PUSH1 0x8 DUP14 ADD SLOAD SWAP2 SWAP3 POP PUSH2 0x555 SWAP2 PUSH2 0x4CF SWAP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH2 0x142B JUMP JUMPDEST DUP7 PUSH2 0x1E0 ADD MLOAD 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 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x51F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x543 SWAP2 SWAP1 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0x54D SWAP2 SWAP1 PUSH2 0x214A JUMP JUMPDEST DUP13 SWAP1 DUP5 PUSH2 0x1482 JUMP JUMPDEST PUSH2 0x100 DUP7 ADD DUP2 SWAP1 MSTORE PUSH2 0x571 SWAP1 PUSH2 0x56C SWAP1 DUP6 SWAP1 PUSH2 0x1522 JUMP JUMPDEST PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x8 DUP13 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x597 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1F01 JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x5D6 DUP5 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x8 DUP13 ADD DUP1 SLOAD PUSH1 0x10 SWAP1 PUSH2 0x610 SWAP1 DUP5 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x217B JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x660 DUP6 DUP12 DUP4 PUSH1 0x0 DUP16 PUSH2 0xDD0 SWAP1 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x1E0 DUP6 ADD MLOAD PUSH2 0x68A SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 CALLER SWAP1 DUP5 PUSH2 0x1561 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP11 SWAP1 MSTORE CALLER SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND SWAP2 PUSH32 0x281596E92B2D974BEB7D4F124DF30A0B39067B096893E95011CE4BDAD798B759 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP SWAP2 SWAP4 POP POP POP POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x6F6 PUSH2 0x1D3F JUMP JUMPDEST PUSH2 0x6FE PUSH2 0x1D3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE DUP5 SLOAD DUP2 MSTORE PUSH2 0x1C0 DUP4 ADD DUP2 SWAP1 MSTORE MLOAD SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x1A0 DUP3 ADD MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH2 0x100 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x2 DUP6 ADD SLOAD DUP1 DUP3 AND PUSH2 0x140 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP6 ADD MSTORE PUSH17 0x100000000000000000000000000000000 SWAP3 DUP4 SWAP1 DIV DUP3 AND PUSH2 0x160 DUP6 ADD MSTORE DUP3 SWAP1 DIV AND PUSH2 0x180 DUP4 ADD MSTORE PUSH1 0x4 DUP1 DUP6 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE PUSH1 0x5 DUP7 ADD SLOAD DUP2 AND PUSH2 0x200 DUP6 ADD MSTORE PUSH1 0x6 DUP7 ADD SLOAD AND PUSH2 0x220 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x3 DUP7 ADD SLOAD SWAP3 SWAP1 SWAP3 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x240 DUP5 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0xB1BF962D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0xB1BF962D SWAP3 DUP3 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x82B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x84F SWAP2 SWAP1 PUSH2 0x2162 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP DUP2 PUSH1 0x0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x79774338 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8B0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8D4 SWAP2 SWAP1 PUSH2 0x21AC JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH2 0x260 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP5 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD TIMESTAMP PUSH5 0xFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP3 DIV AND EQ ISZERO PUSH2 0x936 JUMPI POP POP JUMP JUMPDEST PUSH2 0x940 DUP3 DUP3 PUSH2 0x1643 JUMP JUMPDEST PUSH2 0x94A DUP3 DUP3 PUSH2 0x1764 JUMP JUMPDEST POP PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3236000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 PUSH2 0x9FE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xA55 DUP7 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP POP POP SWAP3 POP SWAP3 POP DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xACC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0xB3A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3238000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP3 ISZERO PUSH2 0xBA8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST POP PUSH2 0x1C0 DUP7 ADD MLOAD MLOAD PUSH1 0x74 SHR PUSH5 0xFFFFFFFFF AND DUP1 ISZERO DUP1 PUSH2 0xCB2 JUMPI POP PUSH2 0x1C0 DUP8 ADD MLOAD MLOAD PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0xBDA SWAP1 PUSH1 0xA PUSH2 0x2055 JUMP JUMPDEST PUSH2 0xBE4 SWAP1 DUP3 PUSH2 0x2061 JUMP JUMPDEST DUP6 PUSH2 0xCA5 DUP10 PUSH2 0x100 ADD MLOAD DUP10 PUSH1 0x8 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH2 0x1E0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB1BF962D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC71 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC95 SWAP2 SWAP1 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0xC9F SWAP2 SWAP1 PUSH2 0x214A JUMP JUMPDEST SWAP1 PUSH2 0x142B JUMP JUMPDEST PUSH2 0xCAF SWAP2 SWAP1 PUSH2 0x214A JUMP JUMPDEST GT ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3531000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xD20 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xDCC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x20F JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0xDFB PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0xE0F SWAP2 PUSH2 0x142B JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x7 DUP9 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x8 DUP12 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP9 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP12 ADD MLOAD SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 MLOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP11 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x1A0 DUP10 ADD MLOAD SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x1E0 DUP10 ADD MLOAD DUP2 AND PUSH2 0x100 DUP6 ADD MSTORE SWAP2 MLOAD PUSH32 0xA589870900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0xA5898709 SWAP2 PUSH2 0xF70 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE 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 PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 SWAP2 POP DUP1 DUP3 DUP7 ADD MLOAD AND DUP3 DUP6 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF8D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xFB1 SWAP2 SWAP1 PUSH2 0x21F7 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP1 DUP3 MSTORE PUSH2 0xFC7 SWAP1 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x1 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x100A SWAP1 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x3 DUP8 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x105B SWAP1 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x2 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH2 0x100 DUP11 ADD MLOAD PUSH2 0x140 DUP12 ADD MLOAD DUP4 MLOAD SWAP7 DUP8 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0x804C9B842B2748A22BB64B345453A3DE7CA54A6CA45CE00D415894979E22897A SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND ISZERO PUSH2 0x133B JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x7535D246 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1172 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1196 SWAP2 SWAP1 PUSH2 0x2225 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11E0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1204 SWAP2 SWAP1 PUSH2 0x2225 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1251 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1275 SWAP2 SWAP1 PUSH2 0x2225 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x91D1485400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0xD1D2CF869016112A9AF1107BCF43C3759DAF22CF734AAD47D0C9C726E33BC782 PUSH1 0x4 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x91D14854 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1307 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x132B SWAP2 SWAP1 PUSH2 0x2111 JUMP JUMPDEST PUSH2 0x1339 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x6E5 JUMP JUMPDEST POP JUMPDEST PUSH2 0x1347 DUP7 DUP7 DUP7 DUP7 PUSH2 0x18E4 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 DUP4 LT PUSH2 0x13C0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST POP PUSH1 0x1 DUP3 DUP2 SHL DUP2 ADD SHL DUP2 ISZERO PUSH2 0x13DA JUMPI DUP4 SLOAD DUP2 OR DUP5 SSTORE PUSH2 0x13E2 JUMP JUMPDEST DUP4 SLOAD DUP2 NOT AND DUP5 SSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x141D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0x14CA SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0xC95 PUSH2 0x14BB DUP9 PUSH2 0x1981 JUMP JUMPDEST PUSH2 0x14C4 DUP9 PUSH2 0x1981 JUMP JUMPDEST SWAP1 PUSH2 0x1522 JUMP JUMPDEST SWAP1 POP PUSH2 0x14D5 DUP2 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x1 DUP7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x15CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x15D6 DUP6 PUSH2 0x199C JUMP JUMPDEST PUSH2 0x163C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x20F JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD ISZERO PUSH2 0x16D3 JUMPI PUSH1 0x0 PUSH2 0x1664 DUP3 PUSH2 0x160 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x1A68 JUMP JUMPDEST SWAP1 POP PUSH2 0x167D DUP3 PUSH1 0xE0 ADD MLOAD DUP3 PUSH2 0x142B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x100 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x168E SWAP1 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x1 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1760 JUMPI PUSH1 0x0 PUSH2 0x16F0 DUP3 PUSH2 0x180 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x1AAF JUMP JUMPDEST SWAP1 POP PUSH2 0x170A DUP3 PUSH2 0x120 ADD MLOAD DUP3 PUSH2 0x142B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x140 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x171B SWAP1 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x179D PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x1A0 DUP3 ADD MLOAD PUSH2 0x17AC JUMPI POP POP POP JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x17BD SWAP2 PUSH2 0x142B JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x140 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x17D3 SWAP2 PUSH2 0x142B JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x260 DUP4 ADD MLOAD PUSH2 0x240 DUP5 ADD MLOAD PUSH2 0x17FB SWAP3 SWAP2 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x1AB8 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x1810 SWAP2 PUSH2 0x142B JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x182C SWAP2 SWAP1 PUSH2 0x214A JUMP JUMPDEST PUSH2 0x1836 SWAP2 SWAP1 PUSH2 0x2133 JUMP JUMPDEST PUSH2 0x1840 SWAP2 SWAP1 PUSH2 0x2133 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP4 ADD MLOAD PUSH2 0x1857 SWAP2 SWAP1 PUSH2 0x13E8 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE ISZERO PUSH2 0x18DF JUMPI PUSH2 0x1882 PUSH2 0x56C DUP4 PUSH2 0x100 ADD MLOAD DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0x1522 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x8 DUP5 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x18A8 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1F01 JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x18F2 DUP3 MLOAD PUSH2 0xFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x18FE JUMPI POP PUSH1 0x0 PUSH2 0x1979 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND PUSH2 0x193D JUMPI POP PUSH1 0x1 PUSH2 0x1979 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x195A SWAP1 DUP8 DUP8 PUSH2 0x1BFF JUMP JUMPDEST POP POP SWAP1 POP DUP1 ISZERO DUP1 ISZERO PUSH2 0x1975 JUMPI POP DUP3 MLOAD PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND ISZERO JUMPDEST SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH4 0x3B9ACA00 DUP2 DUP2 MUL SWAP1 DUP2 DIV DUP3 EQ PUSH2 0x1997 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19DC JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x1A1B JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x1A55 JUMPI PUSH2 0x1A16 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x19A3 JUMP JUMPDEST PUSH2 0x1A62 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x1A4C JUMPI PUSH2 0x1A4C PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x19A3 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x1A62 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1A7C PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x2133 JUMP JUMPDEST PUSH2 0x1A86 SWAP1 DUP6 PUSH2 0x2061 JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x1AA5 DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x214A JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x151B DUP4 DUP4 TIMESTAMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1ACC PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x2133 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1AE8 JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x151B JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x1B1E JUMPI PUSH1 0x0 PUSH2 0x1B23 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x1B37 DUP11 DUP1 PUSH2 0x142B JUMP JUMPDEST DUP2 PUSH2 0x1B44 JUMPI PUSH2 0x1B44 PUSH2 0x2242 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x1B56 DUP4 DUP12 PUSH2 0x142B JUMP JUMPDEST DUP2 PUSH2 0x1B63 JUMPI PUSH2 0x1B63 PUSH2 0x2242 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x1B73 DUP7 DUP9 PUSH2 0x2061 JUMP JUMPDEST PUSH2 0x1B7D SWAP2 SWAP1 PUSH2 0x2061 JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x1B91 DUP9 DUP11 PUSH2 0x2061 JUMP JUMPDEST PUSH2 0x1B9B SWAP2 SWAP1 PUSH2 0x2061 JUMP JUMPDEST PUSH2 0x1BA5 SWAP2 SWAP1 PUSH2 0x2061 JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x1BBC DUP11 DUP16 PUSH2 0x2061 JUMP JUMPDEST PUSH2 0x1BC6 SWAP2 SWAP1 PUSH2 0x2271 JUMP JUMPDEST PUSH2 0x1BDC SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x214A JUMP JUMPDEST PUSH2 0x1BE6 SWAP2 SWAP1 PUSH2 0x214A JUMP JUMPDEST PUSH2 0x1BF0 SWAP2 SWAP1 PUSH2 0x214A JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1C0D DUP7 PUSH2 0x1CB7 JUMP JUMPDEST ISZERO PUSH2 0x1CA4 JUMPI PUSH1 0x0 PUSH2 0x1C3E DUP8 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA PUSH2 0x1CFB JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 DUP5 MSTORE DUP11 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP3 MLOAD SWAP4 DUP5 ADD SWAP1 SWAP3 MSTORE SWAP1 SLOAD SWAP2 DUP3 SWAP1 MSTORE SWAP3 SWAP4 POP PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x1CA0 JUMPI PUSH1 0x1 SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x1CAE SWAP1 POP JUMP JUMPDEST POP POP POP JUMPDEST POP PUSH1 0x0 SWAP2 POP DUP2 SWAP1 POP DUP1 JUMPDEST SWAP4 POP SWAP4 POP SWAP4 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x151B JUMPI POP PUSH2 0x1CF3 PUSH1 0x1 DUP3 PUSH2 0x2133 JUMP JUMPDEST AND ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 DUP3 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD NOT DUP2 AND DUP3 JUMPDEST PUSH1 0x2 SWAP2 SWAP1 SWAP2 SHR SWAP1 DUP2 ISZERO PUSH2 0x6E5 JUMPI PUSH1 0x1 ADD PUSH2 0x1D2A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x280 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1DC3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1E0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1E2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH2 0x1E4C DUP2 PUSH2 0x1DEC JUMP JUMPDEST SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD PUSH2 0x1E63 DUP2 PUSH2 0x1DEC JUMP JUMPDEST SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x1E7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1EA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x1EB4 DUP2 PUSH2 0x1DEC JUMP JUMPDEST SWAP5 SWAP8 SWAP5 SWAP7 POP POP POP POP PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP3 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP3 PUSH1 0x80 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x1F2C JUMPI PUSH2 0x1F2C PUSH2 0x1ED2 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x1F8E JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x1F74 JUMPI PUSH2 0x1F74 PUSH2 0x1ED2 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x1F81 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x1F3A JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1FA5 JUMPI POP PUSH1 0x1 PUSH2 0x1AA9 JUMP JUMPDEST DUP2 PUSH2 0x1FB2 JUMPI POP PUSH1 0x0 PUSH2 0x1AA9 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x1FC8 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x1FD2 JUMPI PUSH2 0x1FEE JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x1AA9 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x1FE3 JUMPI PUSH2 0x1FE3 PUSH2 0x1ED2 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x1AA9 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x2011 JUMPI POP DUP2 DUP2 EXP PUSH2 0x1AA9 JUMP JUMPDEST PUSH2 0x201B DUP4 DUP4 PUSH2 0x1F35 JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x204D JUMPI PUSH2 0x204D PUSH2 0x1ED2 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x151B DUP4 DUP4 PUSH2 0x1F96 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2099 JUMPI PUSH2 0x2099 PUSH2 0x1ED2 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x20CB JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x20AF JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x20DD JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x151B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x2145 JUMPI PUSH2 0x2145 PUSH2 0x1ED2 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x215D JUMPI PUSH2 0x215D PUSH2 0x1ED2 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2174 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x21A4 JUMPI PUSH2 0x21A4 PUSH2 0x1ED2 JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x21C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x21EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x220C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2237 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x151B DUP2 PUSH2 0x1DEC JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x22A7 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 SWAP9 0xE9 SUB 0xBB DUP4 0x4F ORIGIN 0xCB BALANCE 0xEE 0xE2 DUP1 SELFDESTRUCT 0xD6 CALLDATALOAD 0xA5 0x21 0xEF 0xBD 0xB6 SIGNEXTEND 0xC2 JUMPDEST 0xA5 0xDC 0xBC DUP12 RETURNDATASIZE 0xB8 MOD 0xD2 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"837:4930:77:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;837:4930:77;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_accrueToTreasury_18152":{"entryPoint":5988,"id":18152,"parameterSlots":2,"returnSlots":0},"@_getFirstAssetIdByMask_12367":{"entryPoint":7419,"id":12367,"parameterSlots":2,"returnSlots":1},"@_updateIndexes_18233":{"entryPoint":5699,"id":18233,"parameterSlots":2,"returnSlots":0},"@cache_18376":{"entryPoint":1774,"id":18376,"parameterSlots":1,"returnSlots":1},"@calculateCompoundedInterest_21079":{"entryPoint":6840,"id":21079,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_21097":{"entryPoint":6831,"id":21097,"parameterSlots":2,"returnSlots":1},"@calculateLinearInterest_20956":{"entryPoint":6760,"id":20956,"parameterSlots":2,"returnSlots":1},"@cumulateToLiquidityIndex_17836":{"entryPoint":5250,"id":17836,"parameterSlots":3,"returnSlots":1},"@executeBackUnbacked_13919":{"entryPoint":1015,"id":13919,"parameterSlots":5,"returnSlots":1},"@executeMintUnbacked_13780":{"entryPoint":153,"id":13780,"parameterSlots":7,"returnSlots":0},"@getDebtCeiling_11491":{"entryPoint":null,"id":11491,"parameterSlots":1,"returnSlots":1},"@getDecimals_10933":{"entryPoint":null,"id":10933,"parameterSlots":1,"returnSlots":1},"@getFlags_11757":{"entryPoint":null,"id":11757,"parameterSlots":1,"returnSlots":5},"@getIsolationModeState_12262":{"entryPoint":7167,"id":12262,"parameterSlots":3,"returnSlots":3},"@getLastTransferResult_117":{"entryPoint":6556,"id":117,"parameterSlots":1,"returnSlots":1},"@getLtv_10777":{"entryPoint":null,"id":10777,"parameterSlots":1,"returnSlots":1},"@getReserveFactor_11335":{"entryPoint":null,"id":11335,"parameterSlots":1,"returnSlots":1},"@getSupplyCap_11439":{"entryPoint":null,"id":11439,"parameterSlots":1,"returnSlots":1},"@getUnbackedMintCap_11595":{"entryPoint":null,"id":11595,"parameterSlots":1,"returnSlots":1},"@isUsingAsCollateralAny_12131":{"entryPoint":null,"id":12131,"parameterSlots":1,"returnSlots":1},"@isUsingAsCollateralOne_12114":{"entryPoint":7351,"id":12114,"parameterSlots":1,"returnSlots":1},"@percentMul_21119":{"entryPoint":5096,"id":21119,"parameterSlots":2,"returnSlots":1},"@rayDiv_21198":{"entryPoint":5410,"id":21198,"parameterSlots":2,"returnSlots":1},"@rayMul_21186":{"entryPoint":5163,"id":21186,"parameterSlots":2,"returnSlots":1},"@safeTransferFrom_106":{"entryPoint":5473,"id":106,"parameterSlots":4,"returnSlots":0},"@setUsingAsCollateral_11975":{"entryPoint":4945,"id":11975,"parameterSlots":3,"returnSlots":0},"@toUint128_1626":{"entryPoint":3370,"id":1626,"parameterSlots":1,"returnSlots":1},"@updateInterestRates_18024":{"entryPoint":3536,"id":18024,"parameterSlots":5,"returnSlots":0},"@updateState_17793":{"entryPoint":2311,"id":17793,"parameterSlots":2,"returnSlots":0},"@validateAutomaticUseAsCollateral_20907":{"entryPoint":4369,"id":20907,"parameterSlots":5,"returnSlots":1},"@validateSupply_19277":{"entryPoint":2450,"id":19277,"parameterSlots":3,"returnSlots":0},"@validateUseAsCollateral_20844":{"entryPoint":6372,"id":20844,"parameterSlots":4,"returnSlots":1},"@wadToRay_21218":{"entryPoint":6529,"id":21218,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":8465,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$4860_fromMemory":{"entryPoint":8741,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_struct$_UserConfigurationMap_$21322_storage_ptrt_addresst_uint256t_addresst_uint16":{"entryPoint":7697,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_struct$_ReserveData_$21315_storage_ptrt_addresst_uint256t_uint256t_uint256":{"entryPoint":7818,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":8546,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory":{"entryPoint":8695,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory":{"entryPoint":8620,"id":null,"parameterSlots":2,"returnSlots":4},"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address__to_t_bytes32_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":8350,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":7937,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":8522,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":8817,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":7989,"id":null,"parameterSlots":2,"returnSlots":2},"checked_exp_t_uint256_t_uint256":{"entryPoint":8277,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":8086,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":8289,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint128":{"entryPoint":8571,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":8499,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":7890,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":8770,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":7660,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:11245:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"59:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"146:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"155:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"158:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"148:6:201"},"nodeType":"YulFunctionCall","src":"148:12:201"},"nodeType":"YulExpressionStatement","src":"148:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"82:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"93:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"100:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"89:3:201"},"nodeType":"YulFunctionCall","src":"89:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"79:2:201"},"nodeType":"YulFunctionCall","src":"79:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"72:6:201"},"nodeType":"YulFunctionCall","src":"72:73:201"},"nodeType":"YulIf","src":"69:93:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"48:5:201","type":""}],"src":"14:154:201"},{"body":{"nodeType":"YulBlock","src":"461:661:201","statements":[{"body":{"nodeType":"YulBlock","src":"508:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"517:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"520:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"510:6:201"},"nodeType":"YulFunctionCall","src":"510:12:201"},"nodeType":"YulExpressionStatement","src":"510:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"482:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"491:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"478:3:201"},"nodeType":"YulFunctionCall","src":"478:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"503:3:201","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"474:3:201"},"nodeType":"YulFunctionCall","src":"474:33:201"},"nodeType":"YulIf","src":"471:53:201"},{"nodeType":"YulAssignment","src":"533:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"556:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"543:12:201"},"nodeType":"YulFunctionCall","src":"543:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"533:6:201"}]},{"nodeType":"YulAssignment","src":"575:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"602:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"613:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"598:3:201"},"nodeType":"YulFunctionCall","src":"598:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"585:12:201"},"nodeType":"YulFunctionCall","src":"585:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"575:6:201"}]},{"nodeType":"YulAssignment","src":"626:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"653:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"664:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"649:3:201"},"nodeType":"YulFunctionCall","src":"649:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"636:12:201"},"nodeType":"YulFunctionCall","src":"636:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"626:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"677:45:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"707:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"718:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"703:3:201"},"nodeType":"YulFunctionCall","src":"703:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"690:12:201"},"nodeType":"YulFunctionCall","src":"690:32:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"681:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"756:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"731:24:201"},"nodeType":"YulFunctionCall","src":"731:31:201"},"nodeType":"YulExpressionStatement","src":"731:31:201"},{"nodeType":"YulAssignment","src":"771:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"781:5:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"771:6:201"}]},{"nodeType":"YulAssignment","src":"795:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"822:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"833:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"818:3:201"},"nodeType":"YulFunctionCall","src":"818:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"805:12:201"},"nodeType":"YulFunctionCall","src":"805:33:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"795:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"847:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"879:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"890:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"875:3:201"},"nodeType":"YulFunctionCall","src":"875:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"862:12:201"},"nodeType":"YulFunctionCall","src":"862:33:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"851:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"929:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"904:24:201"},"nodeType":"YulFunctionCall","src":"904:33:201"},"nodeType":"YulExpressionStatement","src":"904:33:201"},{"nodeType":"YulAssignment","src":"946:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"956:7:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"946:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"972:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1004:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1015:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1000:3:201"},"nodeType":"YulFunctionCall","src":"1000:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"987:12:201"},"nodeType":"YulFunctionCall","src":"987:33:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"976:7:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1074:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1083:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1086:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1076:6:201"},"nodeType":"YulFunctionCall","src":"1076:12:201"},"nodeType":"YulExpressionStatement","src":"1076:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"1042:7:201"},{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"1055:7:201"},{"kind":"number","nodeType":"YulLiteral","src":"1064:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1051:3:201"},"nodeType":"YulFunctionCall","src":"1051:20:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1039:2:201"},"nodeType":"YulFunctionCall","src":"1039:33:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1032:6:201"},"nodeType":"YulFunctionCall","src":"1032:41:201"},"nodeType":"YulIf","src":"1029:61:201"},{"nodeType":"YulAssignment","src":"1099:17:201","value":{"name":"value_2","nodeType":"YulIdentifier","src":"1109:7:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"1099:6:201"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_struct$_UserConfigurationMap_$21322_storage_ptrt_addresst_uint256t_addresst_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"379:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"390:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"402:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"410:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"418:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"426:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"434:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"442:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"450:6:201","type":""}],"src":"173:949:201"},{"body":{"nodeType":"YulBlock","src":"1296:383:201","statements":[{"body":{"nodeType":"YulBlock","src":"1343:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1352:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1355:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1345:6:201"},"nodeType":"YulFunctionCall","src":"1345:12:201"},"nodeType":"YulExpressionStatement","src":"1345:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1317:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1326:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1313:3:201"},"nodeType":"YulFunctionCall","src":"1313:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1338:3:201","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1309:3:201"},"nodeType":"YulFunctionCall","src":"1309:33:201"},"nodeType":"YulIf","src":"1306:53:201"},{"nodeType":"YulAssignment","src":"1368:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1391:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1378:12:201"},"nodeType":"YulFunctionCall","src":"1378:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1368:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1410:45:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1440:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1451:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1436:3:201"},"nodeType":"YulFunctionCall","src":"1436:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1423:12:201"},"nodeType":"YulFunctionCall","src":"1423:32:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1414:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1489:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1464:24:201"},"nodeType":"YulFunctionCall","src":"1464:31:201"},"nodeType":"YulExpressionStatement","src":"1464:31:201"},{"nodeType":"YulAssignment","src":"1504:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1514:5:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1504:6:201"}]},{"nodeType":"YulAssignment","src":"1528:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1555:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1566:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1551:3:201"},"nodeType":"YulFunctionCall","src":"1551:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1538:12:201"},"nodeType":"YulFunctionCall","src":"1538:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1528:6:201"}]},{"nodeType":"YulAssignment","src":"1579:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1606:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1617:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1602:3:201"},"nodeType":"YulFunctionCall","src":"1602:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1589:12:201"},"nodeType":"YulFunctionCall","src":"1589:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1579:6:201"}]},{"nodeType":"YulAssignment","src":"1630:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1657:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1668:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1653:3:201"},"nodeType":"YulFunctionCall","src":"1653:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1640:12:201"},"nodeType":"YulFunctionCall","src":"1640:33:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"1630:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveData_$21315_storage_ptrt_addresst_uint256t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1230:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1241:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1253:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1261:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1269:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1277:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1285:6:201","type":""}],"src":"1127:552:201"},{"body":{"nodeType":"YulBlock","src":"1793:76:201","statements":[{"nodeType":"YulAssignment","src":"1803:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1815:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1826:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1811:3:201"},"nodeType":"YulFunctionCall","src":"1811:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1803:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1845:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"1856:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1838:6:201"},"nodeType":"YulFunctionCall","src":"1838:25:201"},"nodeType":"YulExpressionStatement","src":"1838:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1762:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1773:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1784:4:201","type":""}],"src":"1684:185:201"},{"body":{"nodeType":"YulBlock","src":"1906:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1923:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1926:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1916:6:201"},"nodeType":"YulFunctionCall","src":"1916:88:201"},"nodeType":"YulExpressionStatement","src":"1916:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2020:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2023:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2013:6:201"},"nodeType":"YulFunctionCall","src":"2013:15:201"},"nodeType":"YulExpressionStatement","src":"2013:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2044:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2047:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2037:6:201"},"nodeType":"YulFunctionCall","src":"2037:15:201"},"nodeType":"YulExpressionStatement","src":"2037:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"1874:184:201"},{"body":{"nodeType":"YulBlock","src":"2111:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"2121:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2131:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2125:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2174:21:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2189:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2192:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2185:3:201"},"nodeType":"YulFunctionCall","src":"2185:10:201"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"2178:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2204:21:201","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"2219:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2222:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2215:3:201"},"nodeType":"YulFunctionCall","src":"2215:10:201"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"2208:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2259:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"2261:16:201"},"nodeType":"YulFunctionCall","src":"2261:18:201"},"nodeType":"YulExpressionStatement","src":"2261:18:201"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"2240:3:201"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2249:2:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"2253:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2245:3:201"},"nodeType":"YulFunctionCall","src":"2245:12:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2237:2:201"},"nodeType":"YulFunctionCall","src":"2237:21:201"},"nodeType":"YulIf","src":"2234:47:201"},{"nodeType":"YulAssignment","src":"2290:20:201","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"2301:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"2306:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2297:3:201"},"nodeType":"YulFunctionCall","src":"2297:13:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"2290:3:201"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"2094:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"2097:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"2103:3:201","type":""}],"src":"2063:253:201"},{"body":{"nodeType":"YulBlock","src":"2385:418:201","statements":[{"nodeType":"YulVariableDeclaration","src":"2395:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2410:1:201","type":"","value":"1"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"2399:7:201","type":""}]},{"nodeType":"YulAssignment","src":"2420:16:201","value":{"name":"power_1","nodeType":"YulIdentifier","src":"2429:7:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"2420:5:201"}]},{"nodeType":"YulAssignment","src":"2445:13:201","value":{"name":"_base","nodeType":"YulIdentifier","src":"2453:5:201"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"2445:4:201"}]},{"body":{"nodeType":"YulBlock","src":"2509:288:201","statements":[{"body":{"nodeType":"YulBlock","src":"2614:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"2616:16:201"},"nodeType":"YulFunctionCall","src":"2616:18:201"},"nodeType":"YulExpressionStatement","src":"2616:18:201"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"2529:4:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2539:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base","nodeType":"YulIdentifier","src":"2607:4:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"2535:3:201"},"nodeType":"YulFunctionCall","src":"2535:77:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2526:2:201"},"nodeType":"YulFunctionCall","src":"2526:87:201"},"nodeType":"YulIf","src":"2523:113:201"},{"body":{"nodeType":"YulBlock","src":"2675:29:201","statements":[{"nodeType":"YulAssignment","src":"2677:25:201","value":{"arguments":[{"name":"power","nodeType":"YulIdentifier","src":"2690:5:201"},{"name":"base","nodeType":"YulIdentifier","src":"2697:4:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"2686:3:201"},"nodeType":"YulFunctionCall","src":"2686:16:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"2677:5:201"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"2656:8:201"},{"name":"power_1","nodeType":"YulIdentifier","src":"2666:7:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2652:3:201"},"nodeType":"YulFunctionCall","src":"2652:22:201"},"nodeType":"YulIf","src":"2649:55:201"},{"nodeType":"YulAssignment","src":"2717:23:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"2729:4:201"},{"name":"base","nodeType":"YulIdentifier","src":"2735:4:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"2725:3:201"},"nodeType":"YulFunctionCall","src":"2725:15:201"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"2717:4:201"}]},{"nodeType":"YulAssignment","src":"2753:34:201","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"2769:7:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"2778:8:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2765:3:201"},"nodeType":"YulFunctionCall","src":"2765:22:201"},"variableNames":[{"name":"exponent","nodeType":"YulIdentifier","src":"2753:8:201"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"2478:8:201"},{"name":"power_1","nodeType":"YulIdentifier","src":"2488:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2475:2:201"},"nodeType":"YulFunctionCall","src":"2475:21:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2497:3:201","statements":[]},"pre":{"nodeType":"YulBlock","src":"2471:3:201","statements":[]},"src":"2467:330:201"}]},"name":"checked_exp_helper","nodeType":"YulFunctionDefinition","parameters":[{"name":"_base","nodeType":"YulTypedName","src":"2349:5:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"2356:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"2369:5:201","type":""},{"name":"base","nodeType":"YulTypedName","src":"2376:4:201","type":""}],"src":"2321:482:201"},{"body":{"nodeType":"YulBlock","src":"2867:807:201","statements":[{"body":{"nodeType":"YulBlock","src":"2905:52:201","statements":[{"nodeType":"YulAssignment","src":"2919:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2928:1:201","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"2919:5:201"}]},{"nodeType":"YulLeave","src":"2942:5:201"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"2887:8:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2880:6:201"},"nodeType":"YulFunctionCall","src":"2880:16:201"},"nodeType":"YulIf","src":"2877:80:201"},{"body":{"nodeType":"YulBlock","src":"2990:52:201","statements":[{"nodeType":"YulAssignment","src":"3004:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3013:1:201","type":"","value":"0"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"3004:5:201"}]},{"nodeType":"YulLeave","src":"3027:5:201"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"2976:4:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2969:6:201"},"nodeType":"YulFunctionCall","src":"2969:12:201"},"nodeType":"YulIf","src":"2966:76:201"},{"cases":[{"body":{"nodeType":"YulBlock","src":"3078:52:201","statements":[{"nodeType":"YulAssignment","src":"3092:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3101:1:201","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"3092:5:201"}]},{"nodeType":"YulLeave","src":"3115:5:201"}]},"nodeType":"YulCase","src":"3071:59:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3076:1:201","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"3146:123:201","statements":[{"body":{"nodeType":"YulBlock","src":"3181:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3183:16:201"},"nodeType":"YulFunctionCall","src":"3183:18:201"},"nodeType":"YulExpressionStatement","src":"3183:18:201"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"3166:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"3176:3:201","type":"","value":"255"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3163:2:201"},"nodeType":"YulFunctionCall","src":"3163:17:201"},"nodeType":"YulIf","src":"3160:43:201"},{"nodeType":"YulAssignment","src":"3216:25:201","value":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"3229:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"3239:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3225:3:201"},"nodeType":"YulFunctionCall","src":"3225:16:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"3216:5:201"}]},{"nodeType":"YulLeave","src":"3254:5:201"}]},"nodeType":"YulCase","src":"3139:130:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3144:1:201","type":"","value":"2"}}],"expression":{"name":"base","nodeType":"YulIdentifier","src":"3058:4:201"},"nodeType":"YulSwitch","src":"3051:218:201"},{"body":{"nodeType":"YulBlock","src":"3367:70:201","statements":[{"nodeType":"YulAssignment","src":"3381:28:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"3394:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"3400:8:201"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"3390:3:201"},"nodeType":"YulFunctionCall","src":"3390:19:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"3381:5:201"}]},{"nodeType":"YulLeave","src":"3422:5:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"3291:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"3297:2:201","type":"","value":"11"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3288:2:201"},"nodeType":"YulFunctionCall","src":"3288:12:201"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"3305:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"3315:2:201","type":"","value":"78"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3302:2:201"},"nodeType":"YulFunctionCall","src":"3302:16:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3284:3:201"},"nodeType":"YulFunctionCall","src":"3284:35:201"},{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"3328:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"3334:3:201","type":"","value":"307"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3325:2:201"},"nodeType":"YulFunctionCall","src":"3325:13:201"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"3343:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"3353:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3340:2:201"},"nodeType":"YulFunctionCall","src":"3340:16:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3321:3:201"},"nodeType":"YulFunctionCall","src":"3321:36:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"3281:2:201"},"nodeType":"YulFunctionCall","src":"3281:77:201"},"nodeType":"YulIf","src":"3278:159:201"},{"nodeType":"YulVariableDeclaration","src":"3446:57:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"3488:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"3494:8:201"}],"functionName":{"name":"checked_exp_helper","nodeType":"YulIdentifier","src":"3469:18:201"},"nodeType":"YulFunctionCall","src":"3469:34:201"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"3450:7:201","type":""},{"name":"base_1","nodeType":"YulTypedName","src":"3459:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3608:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3610:16:201"},"nodeType":"YulFunctionCall","src":"3610:18:201"},"nodeType":"YulExpressionStatement","src":"3610:18:201"}]},"condition":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"3518:7:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3531:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base_1","nodeType":"YulIdentifier","src":"3599:6:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"3527:3:201"},"nodeType":"YulFunctionCall","src":"3527:79:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3515:2:201"},"nodeType":"YulFunctionCall","src":"3515:92:201"},"nodeType":"YulIf","src":"3512:118:201"},{"nodeType":"YulAssignment","src":"3639:29:201","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"3652:7:201"},{"name":"base_1","nodeType":"YulIdentifier","src":"3661:6:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"3648:3:201"},"nodeType":"YulFunctionCall","src":"3648:20:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"3639:5:201"}]}]},"name":"checked_exp_unsigned","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"2838:4:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"2844:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"2857:5:201","type":""}],"src":"2808:866:201"},{"body":{"nodeType":"YulBlock","src":"3749:61:201","statements":[{"nodeType":"YulAssignment","src":"3759:45:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"3789:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"3795:8:201"}],"functionName":{"name":"checked_exp_unsigned","nodeType":"YulIdentifier","src":"3768:20:201"},"nodeType":"YulFunctionCall","src":"3768:36:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"3759:5:201"}]}]},"name":"checked_exp_t_uint256_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"3720:4:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"3726:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"3739:5:201","type":""}],"src":"3679:131:201"},{"body":{"nodeType":"YulBlock","src":"3867:176:201","statements":[{"body":{"nodeType":"YulBlock","src":"3986:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3988:16:201"},"nodeType":"YulFunctionCall","src":"3988:18:201"},"nodeType":"YulExpressionStatement","src":"3988:18:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3898:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3891:6:201"},"nodeType":"YulFunctionCall","src":"3891:9:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3884:6:201"},"nodeType":"YulFunctionCall","src":"3884:17:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"3906:1:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3913:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"3981:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"3909:3:201"},"nodeType":"YulFunctionCall","src":"3909:74:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3903:2:201"},"nodeType":"YulFunctionCall","src":"3903:81:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3880:3:201"},"nodeType":"YulFunctionCall","src":"3880:105:201"},"nodeType":"YulIf","src":"3877:131:201"},{"nodeType":"YulAssignment","src":"4017:20:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4032:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"4035:1:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"4028:3:201"},"nodeType":"YulFunctionCall","src":"4028:9:201"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"4017:7:201"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3846:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"3849:1:201","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"3855:7:201","type":""}],"src":"3815:228:201"},{"body":{"nodeType":"YulBlock","src":"4169:535:201","statements":[{"nodeType":"YulVariableDeclaration","src":"4179:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"4189:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4183:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4207:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4218:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4200:6:201"},"nodeType":"YulFunctionCall","src":"4200:21:201"},"nodeType":"YulExpressionStatement","src":"4200:21:201"},{"nodeType":"YulVariableDeclaration","src":"4230:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4250:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4244:5:201"},"nodeType":"YulFunctionCall","src":"4244:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"4234:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4277:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4288:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4273:3:201"},"nodeType":"YulFunctionCall","src":"4273:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"4293:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4266:6:201"},"nodeType":"YulFunctionCall","src":"4266:34:201"},"nodeType":"YulExpressionStatement","src":"4266:34:201"},{"nodeType":"YulVariableDeclaration","src":"4309:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"4318:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"4313:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4378:90:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4407:9:201"},{"name":"i","nodeType":"YulIdentifier","src":"4418:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4403:3:201"},"nodeType":"YulFunctionCall","src":"4403:17:201"},{"kind":"number","nodeType":"YulLiteral","src":"4422:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4399:3:201"},"nodeType":"YulFunctionCall","src":"4399:26:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4441:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"4449:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4437:3:201"},"nodeType":"YulFunctionCall","src":"4437:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4453:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4433:3:201"},"nodeType":"YulFunctionCall","src":"4433:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4427:5:201"},"nodeType":"YulFunctionCall","src":"4427:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4392:6:201"},"nodeType":"YulFunctionCall","src":"4392:66:201"},"nodeType":"YulExpressionStatement","src":"4392:66:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4339:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"4342:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4336:2:201"},"nodeType":"YulFunctionCall","src":"4336:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"4350:19:201","statements":[{"nodeType":"YulAssignment","src":"4352:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4361:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4364:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4357:3:201"},"nodeType":"YulFunctionCall","src":"4357:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"4352:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"4332:3:201","statements":[]},"src":"4328:140:201"},{"body":{"nodeType":"YulBlock","src":"4502:66:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4531:9:201"},{"name":"length","nodeType":"YulIdentifier","src":"4542:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4527:3:201"},"nodeType":"YulFunctionCall","src":"4527:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"4551:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4523:3:201"},"nodeType":"YulFunctionCall","src":"4523:31:201"},{"kind":"number","nodeType":"YulLiteral","src":"4556:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4516:6:201"},"nodeType":"YulFunctionCall","src":"4516:42:201"},"nodeType":"YulExpressionStatement","src":"4516:42:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4483:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"4486:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4480:2:201"},"nodeType":"YulFunctionCall","src":"4480:13:201"},"nodeType":"YulIf","src":"4477:91:201"},{"nodeType":"YulAssignment","src":"4577:121:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4593:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4612:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4620:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4608:3:201"},"nodeType":"YulFunctionCall","src":"4608:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"4625:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4604:3:201"},"nodeType":"YulFunctionCall","src":"4604:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4589:3:201"},"nodeType":"YulFunctionCall","src":"4589:104:201"},{"kind":"number","nodeType":"YulLiteral","src":"4695:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4585:3:201"},"nodeType":"YulFunctionCall","src":"4585:113:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4577:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4138:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4149:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4160:4:201","type":""}],"src":"4048:656:201"},{"body":{"nodeType":"YulBlock","src":"4894:285:201","statements":[{"nodeType":"YulAssignment","src":"4904:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4916:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4927:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4912:3:201"},"nodeType":"YulFunctionCall","src":"4912:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4904:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"4940:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"4950:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4944:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5008:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5023:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5031:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5019:3:201"},"nodeType":"YulFunctionCall","src":"5019:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5001:6:201"},"nodeType":"YulFunctionCall","src":"5001:34:201"},"nodeType":"YulExpressionStatement","src":"5001:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5055:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5066:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5051:3:201"},"nodeType":"YulFunctionCall","src":"5051:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"5075:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5083:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5071:3:201"},"nodeType":"YulFunctionCall","src":"5071:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5044:6:201"},"nodeType":"YulFunctionCall","src":"5044:43:201"},"nodeType":"YulExpressionStatement","src":"5044:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5107:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5118:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5103:3:201"},"nodeType":"YulFunctionCall","src":"5103:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"5123:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5096:6:201"},"nodeType":"YulFunctionCall","src":"5096:34:201"},"nodeType":"YulExpressionStatement","src":"5096:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5150:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5161:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5146:3:201"},"nodeType":"YulFunctionCall","src":"5146:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"5166:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5139:6:201"},"nodeType":"YulFunctionCall","src":"5139:34:201"},"nodeType":"YulExpressionStatement","src":"5139:34:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4839:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"4850:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4858:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4866:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4874:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4885:4:201","type":""}],"src":"4709:470:201"},{"body":{"nodeType":"YulBlock","src":"5262:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"5308:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5317:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5320:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5310:6:201"},"nodeType":"YulFunctionCall","src":"5310:12:201"},"nodeType":"YulExpressionStatement","src":"5310:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5283:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"5292:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5279:3:201"},"nodeType":"YulFunctionCall","src":"5279:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"5304:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5275:3:201"},"nodeType":"YulFunctionCall","src":"5275:32:201"},"nodeType":"YulIf","src":"5272:52:201"},{"nodeType":"YulVariableDeclaration","src":"5333:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5352:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5346:5:201"},"nodeType":"YulFunctionCall","src":"5346:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5337:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"5415:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5424:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5427:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5417:6:201"},"nodeType":"YulFunctionCall","src":"5417:12:201"},"nodeType":"YulExpressionStatement","src":"5417:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5384:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5405:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5398:6:201"},"nodeType":"YulFunctionCall","src":"5398:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5391:6:201"},"nodeType":"YulFunctionCall","src":"5391:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"5381:2:201"},"nodeType":"YulFunctionCall","src":"5381:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5374:6:201"},"nodeType":"YulFunctionCall","src":"5374:40:201"},"nodeType":"YulIf","src":"5371:60:201"},{"nodeType":"YulAssignment","src":"5440:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"5450:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5440:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5228:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5239:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5251:6:201","type":""}],"src":"5184:277:201"},{"body":{"nodeType":"YulBlock","src":"5595:168:201","statements":[{"nodeType":"YulAssignment","src":"5605:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5617:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5628:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5613:3:201"},"nodeType":"YulFunctionCall","src":"5613:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5605:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5647:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5662:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5670:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5658:3:201"},"nodeType":"YulFunctionCall","src":"5658:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5640:6:201"},"nodeType":"YulFunctionCall","src":"5640:74:201"},"nodeType":"YulExpressionStatement","src":"5640:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5734:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5745:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5730:3:201"},"nodeType":"YulFunctionCall","src":"5730:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"5750:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5723:6:201"},"nodeType":"YulFunctionCall","src":"5723:34:201"},"nodeType":"YulExpressionStatement","src":"5723:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5556:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5567:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5575:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5586:4:201","type":""}],"src":"5466:297:201"},{"body":{"nodeType":"YulBlock","src":"5817:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"5839:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"5841:16:201"},"nodeType":"YulFunctionCall","src":"5841:18:201"},"nodeType":"YulExpressionStatement","src":"5841:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5833:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"5836:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5830:2:201"},"nodeType":"YulFunctionCall","src":"5830:8:201"},"nodeType":"YulIf","src":"5827:34:201"},{"nodeType":"YulAssignment","src":"5870:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5882:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"5885:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5878:3:201"},"nodeType":"YulFunctionCall","src":"5878:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"5870:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"5799:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"5802:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"5808:4:201","type":""}],"src":"5768:125:201"},{"body":{"nodeType":"YulBlock","src":"5946:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"5973:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"5975:16:201"},"nodeType":"YulFunctionCall","src":"5975:18:201"},"nodeType":"YulExpressionStatement","src":"5975:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5962:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"5969:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"5965:3:201"},"nodeType":"YulFunctionCall","src":"5965:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5959:2:201"},"nodeType":"YulFunctionCall","src":"5959:13:201"},"nodeType":"YulIf","src":"5956:39:201"},{"nodeType":"YulAssignment","src":"6004:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6015:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"6018:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6011:3:201"},"nodeType":"YulFunctionCall","src":"6011:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"6004:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"5929:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"5932:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"5938:3:201","type":""}],"src":"5898:128:201"},{"body":{"nodeType":"YulBlock","src":"6112:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"6158:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6167:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6170:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6160:6:201"},"nodeType":"YulFunctionCall","src":"6160:12:201"},"nodeType":"YulExpressionStatement","src":"6160:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6133:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6142:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6129:3:201"},"nodeType":"YulFunctionCall","src":"6129:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"6154:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6125:3:201"},"nodeType":"YulFunctionCall","src":"6125:32:201"},"nodeType":"YulIf","src":"6122:52:201"},{"nodeType":"YulAssignment","src":"6183:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6199:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6193:5:201"},"nodeType":"YulFunctionCall","src":"6193:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6183:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6078:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6089:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6101:6:201","type":""}],"src":"6031:184:201"},{"body":{"nodeType":"YulBlock","src":"6269:197:201","statements":[{"nodeType":"YulVariableDeclaration","src":"6279:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6289:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6283:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6332:21:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6347:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6350:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6343:3:201"},"nodeType":"YulFunctionCall","src":"6343:10:201"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"6336:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6362:21:201","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"6377:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6380:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6373:3:201"},"nodeType":"YulFunctionCall","src":"6373:10:201"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"6366:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"6408:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"6410:16:201"},"nodeType":"YulFunctionCall","src":"6410:18:201"},"nodeType":"YulExpressionStatement","src":"6410:18:201"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"6398:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"6403:3:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6395:2:201"},"nodeType":"YulFunctionCall","src":"6395:12:201"},"nodeType":"YulIf","src":"6392:38:201"},{"nodeType":"YulAssignment","src":"6439:21:201","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"6451:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"6456:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6447:3:201"},"nodeType":"YulFunctionCall","src":"6447:13:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"6439:4:201"}]}]},"name":"checked_sub_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"6251:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"6254:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"6260:4:201","type":""}],"src":"6220:246:201"},{"body":{"nodeType":"YulBlock","src":"6600:119:201","statements":[{"nodeType":"YulAssignment","src":"6610:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6622:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6633:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6618:3:201"},"nodeType":"YulFunctionCall","src":"6618:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6610:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6652:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"6663:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6645:6:201"},"nodeType":"YulFunctionCall","src":"6645:25:201"},"nodeType":"YulExpressionStatement","src":"6645:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6690:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6701:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6686:3:201"},"nodeType":"YulFunctionCall","src":"6686:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"6706:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6679:6:201"},"nodeType":"YulFunctionCall","src":"6679:34:201"},"nodeType":"YulExpressionStatement","src":"6679:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6561:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6572:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6580:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6591:4:201","type":""}],"src":"6471:248:201"},{"body":{"nodeType":"YulBlock","src":"6855:335:201","statements":[{"body":{"nodeType":"YulBlock","src":"6902:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6911:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6914:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6904:6:201"},"nodeType":"YulFunctionCall","src":"6904:12:201"},"nodeType":"YulExpressionStatement","src":"6904:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6876:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6885:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6872:3:201"},"nodeType":"YulFunctionCall","src":"6872:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"6897:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6868:3:201"},"nodeType":"YulFunctionCall","src":"6868:33:201"},"nodeType":"YulIf","src":"6865:53:201"},{"nodeType":"YulAssignment","src":"6927:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6943:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6937:5:201"},"nodeType":"YulFunctionCall","src":"6937:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6927:6:201"}]},{"nodeType":"YulAssignment","src":"6962:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6982:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6993:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6978:3:201"},"nodeType":"YulFunctionCall","src":"6978:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6972:5:201"},"nodeType":"YulFunctionCall","src":"6972:25:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6962:6:201"}]},{"nodeType":"YulAssignment","src":"7006:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7026:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7037:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7022:3:201"},"nodeType":"YulFunctionCall","src":"7022:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7016:5:201"},"nodeType":"YulFunctionCall","src":"7016:25:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"7006:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"7050:38:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7073:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7084:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7069:3:201"},"nodeType":"YulFunctionCall","src":"7069:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7063:5:201"},"nodeType":"YulFunctionCall","src":"7063:25:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7054:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"7144:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7153:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7156:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7146:6:201"},"nodeType":"YulFunctionCall","src":"7146:12:201"},"nodeType":"YulExpressionStatement","src":"7146:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7110:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7121:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"7128:12:201","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7117:3:201"},"nodeType":"YulFunctionCall","src":"7117:24:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"7107:2:201"},"nodeType":"YulFunctionCall","src":"7107:35:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7100:6:201"},"nodeType":"YulFunctionCall","src":"7100:43:201"},"nodeType":"YulIf","src":"7097:63:201"},{"nodeType":"YulAssignment","src":"7169:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"7179:5:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"7169:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6797:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6808:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6820:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6828:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6836:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6844:6:201","type":""}],"src":"6724:466:201"},{"body":{"nodeType":"YulBlock","src":"7369:229:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7386:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7397:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7379:6:201"},"nodeType":"YulFunctionCall","src":"7379:21:201"},"nodeType":"YulExpressionStatement","src":"7379:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7420:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7431:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7416:3:201"},"nodeType":"YulFunctionCall","src":"7416:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"7436:2:201","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7409:6:201"},"nodeType":"YulFunctionCall","src":"7409:30:201"},"nodeType":"YulExpressionStatement","src":"7409:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7459:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7470:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7455:3:201"},"nodeType":"YulFunctionCall","src":"7455:18:201"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"7475:34:201","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7448:6:201"},"nodeType":"YulFunctionCall","src":"7448:62:201"},"nodeType":"YulExpressionStatement","src":"7448:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7530:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7541:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7526:3:201"},"nodeType":"YulFunctionCall","src":"7526:18:201"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"7546:9:201","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7519:6:201"},"nodeType":"YulFunctionCall","src":"7519:37:201"},"nodeType":"YulExpressionStatement","src":"7519:37:201"},{"nodeType":"YulAssignment","src":"7565:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7577:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7588:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7573:3:201"},"nodeType":"YulFunctionCall","src":"7573:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7565:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7346:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7360:4:201","type":""}],"src":"7195:403:201"},{"body":{"nodeType":"YulBlock","src":"7798:729:201","statements":[{"nodeType":"YulAssignment","src":"7808:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7820:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7831:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7816:3:201"},"nodeType":"YulFunctionCall","src":"7816:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7808:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7851:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7868:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7862:5:201"},"nodeType":"YulFunctionCall","src":"7862:13:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7844:6:201"},"nodeType":"YulFunctionCall","src":"7844:32:201"},"nodeType":"YulExpressionStatement","src":"7844:32:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7896:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7907:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7892:3:201"},"nodeType":"YulFunctionCall","src":"7892:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7924:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7932:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7920:3:201"},"nodeType":"YulFunctionCall","src":"7920:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7914:5:201"},"nodeType":"YulFunctionCall","src":"7914:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7885:6:201"},"nodeType":"YulFunctionCall","src":"7885:54:201"},"nodeType":"YulExpressionStatement","src":"7885:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7959:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7970:4:201","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7955:3:201"},"nodeType":"YulFunctionCall","src":"7955:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7987:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7995:4:201","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7983:3:201"},"nodeType":"YulFunctionCall","src":"7983:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7977:5:201"},"nodeType":"YulFunctionCall","src":"7977:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7948:6:201"},"nodeType":"YulFunctionCall","src":"7948:54:201"},"nodeType":"YulExpressionStatement","src":"7948:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8022:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8033:4:201","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8018:3:201"},"nodeType":"YulFunctionCall","src":"8018:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8050:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8058:4:201","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8046:3:201"},"nodeType":"YulFunctionCall","src":"8046:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8040:5:201"},"nodeType":"YulFunctionCall","src":"8040:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8011:6:201"},"nodeType":"YulFunctionCall","src":"8011:54:201"},"nodeType":"YulExpressionStatement","src":"8011:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8085:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8096:4:201","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8081:3:201"},"nodeType":"YulFunctionCall","src":"8081:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8113:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8121:4:201","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8109:3:201"},"nodeType":"YulFunctionCall","src":"8109:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8103:5:201"},"nodeType":"YulFunctionCall","src":"8103:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8074:6:201"},"nodeType":"YulFunctionCall","src":"8074:54:201"},"nodeType":"YulExpressionStatement","src":"8074:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8148:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8159:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8144:3:201"},"nodeType":"YulFunctionCall","src":"8144:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8176:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8184:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8172:3:201"},"nodeType":"YulFunctionCall","src":"8172:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8166:5:201"},"nodeType":"YulFunctionCall","src":"8166:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8137:6:201"},"nodeType":"YulFunctionCall","src":"8137:54:201"},"nodeType":"YulExpressionStatement","src":"8137:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8211:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8222:4:201","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8207:3:201"},"nodeType":"YulFunctionCall","src":"8207:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8239:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8247:4:201","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8235:3:201"},"nodeType":"YulFunctionCall","src":"8235:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8229:5:201"},"nodeType":"YulFunctionCall","src":"8229:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8200:6:201"},"nodeType":"YulFunctionCall","src":"8200:54:201"},"nodeType":"YulExpressionStatement","src":"8200:54:201"},{"nodeType":"YulVariableDeclaration","src":"8263:44:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8293:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8301:4:201","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8289:3:201"},"nodeType":"YulFunctionCall","src":"8289:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8283:5:201"},"nodeType":"YulFunctionCall","src":"8283:24:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"8267:12:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8316:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8326:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8320:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8388:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8399:4:201","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8384:3:201"},"nodeType":"YulFunctionCall","src":"8384:20:201"},{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"8410:12:201"},{"name":"_1","nodeType":"YulIdentifier","src":"8424:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8406:3:201"},"nodeType":"YulFunctionCall","src":"8406:21:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8377:6:201"},"nodeType":"YulFunctionCall","src":"8377:51:201"},"nodeType":"YulExpressionStatement","src":"8377:51:201"},{"nodeType":"YulVariableDeclaration","src":"8437:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8447:6:201","type":"","value":"0x0100"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"8441:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8473:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"8484:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8469:3:201"},"nodeType":"YulFunctionCall","src":"8469:18:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8503:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"8511:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8499:3:201"},"nodeType":"YulFunctionCall","src":"8499:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8493:5:201"},"nodeType":"YulFunctionCall","src":"8493:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"8517:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8489:3:201"},"nodeType":"YulFunctionCall","src":"8489:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8462:6:201"},"nodeType":"YulFunctionCall","src":"8462:59:201"},"nodeType":"YulExpressionStatement","src":"8462:59:201"}]},"name":"abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7767:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7778:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7789:4:201","type":""}],"src":"7603:924:201"},{"body":{"nodeType":"YulBlock","src":"8647:191:201","statements":[{"body":{"nodeType":"YulBlock","src":"8693:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8702:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8705:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8695:6:201"},"nodeType":"YulFunctionCall","src":"8695:12:201"},"nodeType":"YulExpressionStatement","src":"8695:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8668:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"8677:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8664:3:201"},"nodeType":"YulFunctionCall","src":"8664:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"8689:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8660:3:201"},"nodeType":"YulFunctionCall","src":"8660:32:201"},"nodeType":"YulIf","src":"8657:52:201"},{"nodeType":"YulAssignment","src":"8718:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8734:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8728:5:201"},"nodeType":"YulFunctionCall","src":"8728:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8718:6:201"}]},{"nodeType":"YulAssignment","src":"8753:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8773:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8784:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8769:3:201"},"nodeType":"YulFunctionCall","src":"8769:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8763:5:201"},"nodeType":"YulFunctionCall","src":"8763:25:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"8753:6:201"}]},{"nodeType":"YulAssignment","src":"8797:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8817:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8828:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8813:3:201"},"nodeType":"YulFunctionCall","src":"8813:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8807:5:201"},"nodeType":"YulFunctionCall","src":"8807:25:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"8797:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8597:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8608:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8620:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8628:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8636:6:201","type":""}],"src":"8532:306:201"},{"body":{"nodeType":"YulBlock","src":"9056:250:201","statements":[{"nodeType":"YulAssignment","src":"9066:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9078:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9089:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9074:3:201"},"nodeType":"YulFunctionCall","src":"9074:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9066:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9109:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"9120:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9102:6:201"},"nodeType":"YulFunctionCall","src":"9102:25:201"},"nodeType":"YulExpressionStatement","src":"9102:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9147:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9158:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9143:3:201"},"nodeType":"YulFunctionCall","src":"9143:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"9163:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9136:6:201"},"nodeType":"YulFunctionCall","src":"9136:34:201"},"nodeType":"YulExpressionStatement","src":"9136:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9190:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9201:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9186:3:201"},"nodeType":"YulFunctionCall","src":"9186:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"9206:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9179:6:201"},"nodeType":"YulFunctionCall","src":"9179:34:201"},"nodeType":"YulExpressionStatement","src":"9179:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9233:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9244:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9229:3:201"},"nodeType":"YulFunctionCall","src":"9229:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"9249:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9222:6:201"},"nodeType":"YulFunctionCall","src":"9222:34:201"},"nodeType":"YulExpressionStatement","src":"9222:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9276:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9287:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9272:3:201"},"nodeType":"YulFunctionCall","src":"9272:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"9293:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9265:6:201"},"nodeType":"YulFunctionCall","src":"9265:35:201"},"nodeType":"YulExpressionStatement","src":"9265:35:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8993:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"9004:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9012:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9020:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9028:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9036:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9047:4:201","type":""}],"src":"8843:463:201"},{"body":{"nodeType":"YulBlock","src":"9406:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"9452:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9461:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9464:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9454:6:201"},"nodeType":"YulFunctionCall","src":"9454:12:201"},"nodeType":"YulExpressionStatement","src":"9454:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9427:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"9436:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9423:3:201"},"nodeType":"YulFunctionCall","src":"9423:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"9448:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9419:3:201"},"nodeType":"YulFunctionCall","src":"9419:32:201"},"nodeType":"YulIf","src":"9416:52:201"},{"nodeType":"YulVariableDeclaration","src":"9477:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9496:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9490:5:201"},"nodeType":"YulFunctionCall","src":"9490:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9481:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9540:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9515:24:201"},"nodeType":"YulFunctionCall","src":"9515:31:201"},"nodeType":"YulExpressionStatement","src":"9515:31:201"},{"nodeType":"YulAssignment","src":"9555:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"9565:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9555:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$4860_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9372:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9383:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9395:6:201","type":""}],"src":"9311:265:201"},{"body":{"nodeType":"YulBlock","src":"9693:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"9739:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9748:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9751:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9741:6:201"},"nodeType":"YulFunctionCall","src":"9741:12:201"},"nodeType":"YulExpressionStatement","src":"9741:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9714:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"9723:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9710:3:201"},"nodeType":"YulFunctionCall","src":"9710:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"9735:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9706:3:201"},"nodeType":"YulFunctionCall","src":"9706:32:201"},"nodeType":"YulIf","src":"9703:52:201"},{"nodeType":"YulVariableDeclaration","src":"9764:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9783:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9777:5:201"},"nodeType":"YulFunctionCall","src":"9777:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9768:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9827:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9802:24:201"},"nodeType":"YulFunctionCall","src":"9802:31:201"},"nodeType":"YulExpressionStatement","src":"9802:31:201"},{"nodeType":"YulAssignment","src":"9842:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"9852:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9842:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9659:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9670:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9682:6:201","type":""}],"src":"9581:282:201"},{"body":{"nodeType":"YulBlock","src":"9949:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"9995:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10004:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10007:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9997:6:201"},"nodeType":"YulFunctionCall","src":"9997:12:201"},"nodeType":"YulExpressionStatement","src":"9997:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9970:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"9979:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9966:3:201"},"nodeType":"YulFunctionCall","src":"9966:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"9991:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9962:3:201"},"nodeType":"YulFunctionCall","src":"9962:32:201"},"nodeType":"YulIf","src":"9959:52:201"},{"nodeType":"YulVariableDeclaration","src":"10020:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10039:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10033:5:201"},"nodeType":"YulFunctionCall","src":"10033:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"10024:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10083:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"10058:24:201"},"nodeType":"YulFunctionCall","src":"10058:31:201"},"nodeType":"YulExpressionStatement","src":"10058:31:201"},{"nodeType":"YulAssignment","src":"10098:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"10108:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"10098:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9915:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9926:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9938:6:201","type":""}],"src":"9868:251:201"},{"body":{"nodeType":"YulBlock","src":"10253:168:201","statements":[{"nodeType":"YulAssignment","src":"10263:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10275:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10286:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10271:3:201"},"nodeType":"YulFunctionCall","src":"10271:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10263:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10305:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"10316:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10298:6:201"},"nodeType":"YulFunctionCall","src":"10298:25:201"},"nodeType":"YulExpressionStatement","src":"10298:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10343:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10354:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10339:3:201"},"nodeType":"YulFunctionCall","src":"10339:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10363:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10371:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10359:3:201"},"nodeType":"YulFunctionCall","src":"10359:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10332:6:201"},"nodeType":"YulFunctionCall","src":"10332:83:201"},"nodeType":"YulExpressionStatement","src":"10332:83:201"}]},"name":"abi_encode_tuple_t_bytes32_t_address__to_t_bytes32_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10214:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10225:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10233:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10244:4:201","type":""}],"src":"10124:297:201"},{"body":{"nodeType":"YulBlock","src":"10600:175:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10617:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10628:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10610:6:201"},"nodeType":"YulFunctionCall","src":"10610:21:201"},"nodeType":"YulExpressionStatement","src":"10610:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10651:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10662:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10647:3:201"},"nodeType":"YulFunctionCall","src":"10647:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"10667:2:201","type":"","value":"25"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10640:6:201"},"nodeType":"YulFunctionCall","src":"10640:30:201"},"nodeType":"YulExpressionStatement","src":"10640:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10690:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10701:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10686:3:201"},"nodeType":"YulFunctionCall","src":"10686:18:201"},{"hexValue":"475076323a206661696c6564207472616e7366657246726f6d","kind":"string","nodeType":"YulLiteral","src":"10706:27:201","type":"","value":"GPv2: failed transferFrom"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10679:6:201"},"nodeType":"YulFunctionCall","src":"10679:55:201"},"nodeType":"YulExpressionStatement","src":"10679:55:201"},{"nodeType":"YulAssignment","src":"10743:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10755:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10766:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10751:3:201"},"nodeType":"YulFunctionCall","src":"10751:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10743:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10577:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10591:4:201","type":""}],"src":"10426:349:201"},{"body":{"nodeType":"YulBlock","src":"10812:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10829:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10832:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10822:6:201"},"nodeType":"YulFunctionCall","src":"10822:88:201"},"nodeType":"YulExpressionStatement","src":"10822:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10926:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10929:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10919:6:201"},"nodeType":"YulFunctionCall","src":"10919:15:201"},"nodeType":"YulExpressionStatement","src":"10919:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10950:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10953:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10943:6:201"},"nodeType":"YulFunctionCall","src":"10943:15:201"},"nodeType":"YulExpressionStatement","src":"10943:15:201"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"10780:184:201"},{"body":{"nodeType":"YulBlock","src":"11015:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"11046:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11067:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11070:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11060:6:201"},"nodeType":"YulFunctionCall","src":"11060:88:201"},"nodeType":"YulExpressionStatement","src":"11060:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11168:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"11171:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11161:6:201"},"nodeType":"YulFunctionCall","src":"11161:15:201"},"nodeType":"YulExpressionStatement","src":"11161:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11196:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11199:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11189:6:201"},"nodeType":"YulFunctionCall","src":"11189:15:201"},"nodeType":"YulExpressionStatement","src":"11189:15:201"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"11035:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11028:6:201"},"nodeType":"YulFunctionCall","src":"11028:9:201"},"nodeType":"YulIf","src":"11025:189:201"},{"nodeType":"YulAssignment","src":"11223:14:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11232:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"11235:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"11228:3:201"},"nodeType":"YulFunctionCall","src":"11228:9:201"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"11223:1:201"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11000:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"11003:1:201","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"11009:1:201","type":""}],"src":"10969:274:201"}]},"contents":"{\n    { }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_struct$_UserConfigurationMap_$21322_storage_ptrt_addresst_uint256t_addresst_uint16(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value := calldataload(add(headStart, 96))\n        validator_revert_address(value)\n        value3 := value\n        value4 := calldataload(add(headStart, 128))\n        let value_1 := calldataload(add(headStart, 160))\n        validator_revert_address(value_1)\n        value5 := value_1\n        let value_2 := calldataload(add(headStart, 192))\n        if iszero(eq(value_2, and(value_2, 0xffff))) { revert(0, 0) }\n        value6 := value_2\n    }\n    function abi_decode_tuple_t_struct$_ReserveData_$21315_storage_ptrt_addresst_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_address(value)\n        value1 := value\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint256(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, exponent)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function checked_sub_t_uint128(x, y) -> diff\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        let value := mload(add(headStart, 96))\n        if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n        value3 := value\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 288)\n        mstore(headStart, mload(value0))\n        mstore(add(headStart, 0x20), mload(add(value0, 0x20)))\n        mstore(add(headStart, 0x40), mload(add(value0, 0x40)))\n        mstore(add(headStart, 0x60), mload(add(value0, 0x60)))\n        mstore(add(headStart, 0x80), mload(add(value0, 0x80)))\n        mstore(add(headStart, 0xa0), mload(add(value0, 0xa0)))\n        mstore(add(headStart, 0xc0), mload(add(value0, 0xc0)))\n        let memberValue0 := mload(add(value0, 0xe0))\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 0xe0), and(memberValue0, _1))\n        let _2 := 0x0100\n        mstore(add(headStart, _2), and(mload(add(value0, _2)), _1))\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_decode_tuple_t_contract$_IPool_$4860_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_bytes32_t_address__to_t_bytes32_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"GPv2: failed transferFrom\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600436106100405760003560e01c80630413c86f146100455780638e74324814610067575b600080fd5b81801561005157600080fd5b50610065610060366004611e11565b610099565b005b81801561007357600080fd5b50610087610082366004611e8a565b6103f7565b60405190815260200160405180910390f35b73ffffffffffffffffffffffffffffffffffffffff84166000908152602088905260408120906100c8826106ee565b90506100d48282610907565b6100df818387610992565b6101c08101515160b081901c640fffffffff169060301c60ff16600061010488610d2a565b60088601805460109061013e90849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16611f01565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790556fffffffffffffffffffffffffffffffff16905081600a6101949190612055565b61019e9084612061565b8111156040518060400160405280600281526020017f353200000000000000000000000000000000000000000000000000000000000081525090610218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b60405180910390fd5b5061022785858b600080610dd0565b6101e08401516101008501516040517fb3f1c93d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8a81166024830152604482018c90526064820192909252600092919091169063b3f1c93d906084016020604051808303816000875af11580156102bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102df9190612111565b9050801561038c576102fe8d8d8d886101c00151896101e00151611111565b1561038c576003860154610332908c907501000000000000000000000000000000000000000000900461ffff166001611351565b8773ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a35b60408051338152602081018b905261ffff89169173ffffffffffffffffffffffffffffffffffffffff808c1692908e16917ff25af37b3d3ec226063dc9bdc103ece7eb110a50f340fe854bb7bc1b0676d7d0910160405180910390a450505050505050505050505050565b600080610403876106ee565b905061040f8782610907565b600887015460009070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16861061047357600888015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16610475565b855b9050600061048386866113e8565b905060006104918288612133565b9050600061049f888561214a565b61010086015160088d0154919250610555916104cf916fffffffffffffffffffffffffffffffff9091169061142b565b866101e0015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561051f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105439190612162565b61054d919061214a565b8c9084611482565b61010086018190526105719061056c908590611522565b610d2a565b60088c0180546000906105979084906fffffffffffffffffffffffffffffffff16611f01565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506105d684610d2a565b60088c01805460109061061090849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1661217b565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550610660858b8360008f610dd090949392919063ffffffff16565b6101e085015161068a9073ffffffffffffffffffffffffffffffffffffffff8c1690339084611561565b60408051858152602081018a9052339173ffffffffffffffffffffffffffffffffffffffff8d16917f281596e92b2d974beb7d4f124df30a0b39067b096893e95011ce4bdad798b759910160405180910390a3509193505050505b95945050505050565b6106f6611d3f565b6106fe611d3f565b60408051602081018252845481526101c0830181905251901c61ffff166101a082015260018301546fffffffffffffffffffffffffffffffff808216610100840181905260e0840152600285015480821661014085018190526101208501527001000000000000000000000000000000009283900482166101608501528290041661018083015260048085015473ffffffffffffffffffffffffffffffffffffffff9081166101e085015260058601548116610200850152600686015416610220840181905260038601549290920464ffffffffff16610240840152604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905163b1bf962d928281019260209291908290030181865afa15801561082b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084f9190612162565b816020018181525081600001818152505080610200015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa1580156108b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d491906121ac565b64ffffffffff166102608501526060840181905260808401829052604084019290925260c083015260a082015292915050565b60038201544264ffffffffff908116700100000000000000000000000000000000909204161415610936575050565b6109408282611643565b61094a8282611764565b5060030180547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff1602179055565b60408051808201909152600281527f32360000000000000000000000000000000000000000000000000000000000006020820152816109fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b506000806000610a55866101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b9450505092509250826040518060400160405280600281526020017f323700000000000000000000000000000000000000000000000000000000000081525090610acc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b5060408051808201909152600281527f323900000000000000000000000000000000000000000000000000000000000060208201528115610b3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b5060408051808201909152600281527f323800000000000000000000000000000000000000000000000000000000000060208201528215610ba8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b506101c08601515160741c640fffffffff16801580610cb257506101c08701515160301c60ff16610bda90600a612055565b610be49082612061565b85610ca58961010001518960080160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168b6101e0015173ffffffffffffffffffffffffffffffffffffffff1663b1bf962d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c959190612162565b610c9f919061214a565b9061142b565b610caf919061214a565b11155b6040518060400160405280600281526020017f353100000000000000000000000000000000000000000000000000000000000081525090610d20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b5050505050505050565b60006fffffffffffffffffffffffffffffffff821115610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f3238206269747300000000000000000000000000000000000000000000000000606482015260840161020f565b5090565b610dfb6040518060800160405280600081526020016000815260200160008152602001600081525090565b6101408501516020860151610e0f9161142b565b60608083019182526007880154604080516101208101825260088b01546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000009091041681526020810188905280820187905260c0808b0151948201949094529351608085015260a0808a0151908501526101a08901519284019290925273ffffffffffffffffffffffffffffffffffffffff87811660e08501526101e0890151811661010085015291517fa589870900000000000000000000000000000000000000000000000000000000815291169163a589870991610f709190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa158015610f8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb191906121f7565b60408401526020830152808252610fc790610d2a565b6001870180546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055602081015161100a90610d2a565b6003870180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055604081015161105b90610d2a565b6002870180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905580516020808301516040808501516101008a01516101408b0151835196875294860193909352908401526060830152608082015273ffffffffffffffffffffffffffffffffffffffff8516907f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a9060a00160405180910390a2505050505050565b815160009060d41c64ffffffffff161561133b5760008273ffffffffffffffffffffffffffffffffffffffff16637535d2466040518163ffffffff1660e01b8152600401602060405180830381865afa158015611172573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111969190612225565b73ffffffffffffffffffffffffffffffffffffffff16630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112049190612225565b90508073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611251573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112759190612225565b6040517f91d148540000000000000000000000000000000000000000000000000000000081527fd1d2cf869016112a9af1107bcf43c3759daf22cf734aad47d0c9c726e33bc782600482015233602482015273ffffffffffffffffffffffffffffffffffffffff91909116906391d1485490604401602060405180830381865afa158015611307573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132b9190612111565b6113395760009150506106e5565b505b611347868686866118e4565b9695505050505050565b60408051808201909152600281527f37340000000000000000000000000000000000000000000000000000000000006020820152608083106113c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020f919061209e565b50600182811b81011b81156113da578354811784556113e2565b835481191684555b50505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec778390048411151761141d57600080fd5b506127109102611388010490565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761146057600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b600183015460009081906114ca906fffffffffffffffffffffffffffffffff166b033b2e3c9fd0803ce8000000610c956114bb88611981565b6114c488611981565b90611522565b90506114d581610d2a565b6001860180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691909117905590505b9392505050565b600081156b033b2e3c9fd0803ce80000006002840419048411171561154657600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af16115cc573d6000803e3d6000fd5b506115d68561199c565b61163c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d00000000000000604482015260640161020f565b5050505050565b610160810151156116d3576000611664826101600151836102400151611a68565b905061167d8260e001518261142b90919063ffffffff16565b610100830181905261168e90610d2a565b6001840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b8051156117605760006116f0826101800151836102400151611aaf565b905061170a8261012001518261142b90919063ffffffff16565b610140830181905261171b90610d2a565b6002840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b5050565b61179d6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6101a08201516117ac57505050565b61012082015182516117bd9161142b565b602082015261014082015182516117d39161142b565b604082015260608201516102608301516102408401516117fb92919064ffffffffff16611ab8565b6060820181905260408301516118109161142b565b80825260208201516080840151604084015161182c919061214a565b6118369190612133565b6118409190612133565b608082018190526101a083015161185791906113e8565b60a08201819052156118df5761188261056c8361010001518360a0015161152290919063ffffffff16565b6008840180546000906118a89084906fffffffffffffffffffffffffffffffff16611f01565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b505050565b60006118f2825161ffff1690565b6118fe57506000611979565b60408051602081019091528354908190527faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1661193d57506001611979565b60408051602081019091528354815260009061195a908787611bff565b50509050801580156119755750825160d41c64ffffffffff16155b9150505b949350505050565b633b9aca00818102908104821461199757600080fd5b919050565b60006119dc565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d8015611a1b5760208114611a5557611a167f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f6119a3565b611a62565b823b611a4c57611a4c7f475076323a206e6f74206120636f6e747261637400000000000000000000000060146119a3565b60019150611a62565b3d6000803e600051151591505b50919050565b600080611a7c64ffffffffff841642612133565b611a869085612061565b6301e1338090049050611aa5816b033b2e3c9fd0803ce800000061214a565b9150505b92915050565b600061151b8383425b600080611acc64ffffffffff851684612133565b905080611ae8576b033b2e3c9fd0803ce800000091505061151b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511611b1e576000611b23565b600285035b925066038882915c4000611b378a8061142b565b81611b4457611b44612242565b0491506301e13380611b56838b61142b565b81611b6357611b63612242565b049050600082611b738688612061565b611b7d9190612061565b60029004905060008285611b91888a612061565b611b9b9190612061565b611ba59190612061565b60069004905080826301e13380611bbc8a8f612061565b611bc69190612271565b611bdc906b033b2e3c9fd0803ce800000061214a565b611be6919061214a565b611bf0919061214a565b9b9a5050505050505050505050565b6000806000611c0d86611cb7565b15611ca4576000611c3e877faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa611cfb565b6000818152602087815260408083205473ffffffffffffffffffffffffffffffffffffffff168084528a8352818420825193840190925290549182905292935060d41c64ffffffffff1690508015611ca057600195509093509150611cae9050565b5050505b5060009150819050805b93509350939050565b80516000907faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa16801580159061151b5750611cf3600182612133565b161592915050565b815160009082167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101198116825b60029190911c9081156106e557600101611d2a565b6040518061028001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001611dc36040518060200160405280600081525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b73ffffffffffffffffffffffffffffffffffffffff81168114611e0e57600080fd5b50565b600080600080600080600060e0888a031215611e2c57600080fd5b8735965060208801359550604088013594506060880135611e4c81611dec565b93506080880135925060a0880135611e6381611dec565b915060c088013561ffff81168114611e7a57600080fd5b8091505092959891949750929550565b600080600080600060a08688031215611ea257600080fd5b853594506020860135611eb481611dec565b94979496505050506040830135926060810135926080909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006fffffffffffffffffffffffffffffffff808316818516808303821115611f2c57611f2c611ed2565b01949350505050565b600181815b80851115611f8e57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115611f7457611f74611ed2565b80851615611f8157918102915b93841c9390800290611f3a565b509250929050565b600082611fa557506001611aa9565b81611fb257506000611aa9565b8160018114611fc85760028114611fd257611fee565b6001915050611aa9565b60ff841115611fe357611fe3611ed2565b50506001821b611aa9565b5060208310610133831016604e8410600b8410161715612011575081810a611aa9565b61201b8383611f35565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561204d5761204d611ed2565b029392505050565b600061151b8383611f96565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561209957612099611ed2565b500290565b600060208083528351808285015260005b818110156120cb578581018301518582016040015282016120af565b818111156120dd576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561212357600080fd5b8151801515811461151b57600080fd5b60008282101561214557612145611ed2565b500390565b6000821982111561215d5761215d611ed2565b500190565b60006020828403121561217457600080fd5b5051919050565b60006fffffffffffffffffffffffffffffffff838116908316818110156121a4576121a4611ed2565b039392505050565b600080600080608085870312156121c257600080fd5b845193506020850151925060408501519150606085015164ffffffffff811681146121ec57600080fd5b939692955090935050565b60008060006060848603121561220c57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561223757600080fd5b815161151b81611dec565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826122a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212202498e903bb834f32cb31eee280ffd635a521efbdb60bc25ba5dcbc8b3db806d264736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x40 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x413C86F EQ PUSH2 0x45 JUMPI DUP1 PUSH4 0x8E743248 EQ PUSH2 0x67 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x65 PUSH2 0x60 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E11 JUMP JUMPDEST PUSH2 0x99 JUMP JUMPDEST STOP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x87 PUSH2 0x82 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E8A JUMP JUMPDEST PUSH2 0x3F7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0xC8 DUP3 PUSH2 0x6EE JUMP JUMPDEST SWAP1 POP PUSH2 0xD4 DUP3 DUP3 PUSH2 0x907 JUMP JUMPDEST PUSH2 0xDF DUP2 DUP4 DUP8 PUSH2 0x992 JUMP JUMPDEST PUSH2 0x1C0 DUP2 ADD MLOAD MLOAD PUSH1 0xB0 DUP2 SWAP1 SHR PUSH5 0xFFFFFFFFF AND SWAP1 PUSH1 0x30 SHR PUSH1 0xFF AND PUSH1 0x0 PUSH2 0x104 DUP9 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x8 DUP7 ADD DUP1 SLOAD PUSH1 0x10 SWAP1 PUSH2 0x13E SWAP1 DUP5 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1F01 JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 PUSH1 0xA PUSH2 0x194 SWAP2 SWAP1 PUSH2 0x2055 JUMP JUMPDEST PUSH2 0x19E SWAP1 DUP5 PUSH2 0x2061 JUMP JUMPDEST DUP2 GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3532000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x218 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH2 0x227 DUP6 DUP6 DUP12 PUSH1 0x0 DUP1 PUSH2 0xDD0 JUMP JUMPDEST PUSH2 0x1E0 DUP5 ADD MLOAD PUSH2 0x100 DUP6 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP13 SWAP1 MSTORE PUSH1 0x64 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2BB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2DF SWAP2 SWAP1 PUSH2 0x2111 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x38C JUMPI PUSH2 0x2FE DUP14 DUP14 DUP14 DUP9 PUSH2 0x1C0 ADD MLOAD DUP10 PUSH2 0x1E0 ADD MLOAD PUSH2 0x1111 JUMP JUMPDEST ISZERO PUSH2 0x38C JUMPI PUSH1 0x3 DUP7 ADD SLOAD PUSH2 0x332 SWAP1 DUP13 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x1 PUSH2 0x1351 JUMP JUMPDEST DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH31 0x58A56EA94653CDF4F152D227ACE22D4C00AD99E2A43F58CB7D9E3FEB295F2 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLER DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP12 SWAP1 MSTORE PUSH2 0xFFFF DUP10 AND SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND SWAP3 SWAP1 DUP15 AND SWAP2 PUSH32 0xF25AF37B3D3EC226063DC9BDC103ECE7EB110A50F340FE854BB7BC1B0676D7D0 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x403 DUP8 PUSH2 0x6EE JUMP JUMPDEST SWAP1 POP PUSH2 0x40F DUP8 DUP3 PUSH2 0x907 JUMP JUMPDEST PUSH1 0x8 DUP8 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 LT PUSH2 0x473 JUMPI PUSH1 0x8 DUP9 ADD SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x475 JUMP JUMPDEST DUP6 JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x483 DUP7 DUP7 PUSH2 0x13E8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x491 DUP3 DUP9 PUSH2 0x2133 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x49F DUP9 DUP6 PUSH2 0x214A JUMP JUMPDEST PUSH2 0x100 DUP7 ADD MLOAD PUSH1 0x8 DUP14 ADD SLOAD SWAP2 SWAP3 POP PUSH2 0x555 SWAP2 PUSH2 0x4CF SWAP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH2 0x142B JUMP JUMPDEST DUP7 PUSH2 0x1E0 ADD MLOAD 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 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x51F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x543 SWAP2 SWAP1 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0x54D SWAP2 SWAP1 PUSH2 0x214A JUMP JUMPDEST DUP13 SWAP1 DUP5 PUSH2 0x1482 JUMP JUMPDEST PUSH2 0x100 DUP7 ADD DUP2 SWAP1 MSTORE PUSH2 0x571 SWAP1 PUSH2 0x56C SWAP1 DUP6 SWAP1 PUSH2 0x1522 JUMP JUMPDEST PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x8 DUP13 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x597 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1F01 JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x5D6 DUP5 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x8 DUP13 ADD DUP1 SLOAD PUSH1 0x10 SWAP1 PUSH2 0x610 SWAP1 DUP5 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x217B JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x660 DUP6 DUP12 DUP4 PUSH1 0x0 DUP16 PUSH2 0xDD0 SWAP1 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x1E0 DUP6 ADD MLOAD PUSH2 0x68A SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 CALLER SWAP1 DUP5 PUSH2 0x1561 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP11 SWAP1 MSTORE CALLER SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND SWAP2 PUSH32 0x281596E92B2D974BEB7D4F124DF30A0B39067B096893E95011CE4BDAD798B759 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP SWAP2 SWAP4 POP POP POP POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x6F6 PUSH2 0x1D3F JUMP JUMPDEST PUSH2 0x6FE PUSH2 0x1D3F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE DUP5 SLOAD DUP2 MSTORE PUSH2 0x1C0 DUP4 ADD DUP2 SWAP1 MSTORE MLOAD SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x1A0 DUP3 ADD MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH2 0x100 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x2 DUP6 ADD SLOAD DUP1 DUP3 AND PUSH2 0x140 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP6 ADD MSTORE PUSH17 0x100000000000000000000000000000000 SWAP3 DUP4 SWAP1 DIV DUP3 AND PUSH2 0x160 DUP6 ADD MSTORE DUP3 SWAP1 DIV AND PUSH2 0x180 DUP4 ADD MSTORE PUSH1 0x4 DUP1 DUP6 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE PUSH1 0x5 DUP7 ADD SLOAD DUP2 AND PUSH2 0x200 DUP6 ADD MSTORE PUSH1 0x6 DUP7 ADD SLOAD AND PUSH2 0x220 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x3 DUP7 ADD SLOAD SWAP3 SWAP1 SWAP3 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x240 DUP5 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0xB1BF962D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0xB1BF962D SWAP3 DUP3 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x82B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x84F SWAP2 SWAP1 PUSH2 0x2162 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP DUP2 PUSH1 0x0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x79774338 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8B0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8D4 SWAP2 SWAP1 PUSH2 0x21AC JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH2 0x260 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP5 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD TIMESTAMP PUSH5 0xFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP3 DIV AND EQ ISZERO PUSH2 0x936 JUMPI POP POP JUMP JUMPDEST PUSH2 0x940 DUP3 DUP3 PUSH2 0x1643 JUMP JUMPDEST PUSH2 0x94A DUP3 DUP3 PUSH2 0x1764 JUMP JUMPDEST POP PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3236000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 PUSH2 0x9FE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xA55 DUP7 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP POP POP SWAP3 POP SWAP3 POP DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xACC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0xB3A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3238000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP3 ISZERO PUSH2 0xBA8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST POP PUSH2 0x1C0 DUP7 ADD MLOAD MLOAD PUSH1 0x74 SHR PUSH5 0xFFFFFFFFF AND DUP1 ISZERO DUP1 PUSH2 0xCB2 JUMPI POP PUSH2 0x1C0 DUP8 ADD MLOAD MLOAD PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0xBDA SWAP1 PUSH1 0xA PUSH2 0x2055 JUMP JUMPDEST PUSH2 0xBE4 SWAP1 DUP3 PUSH2 0x2061 JUMP JUMPDEST DUP6 PUSH2 0xCA5 DUP10 PUSH2 0x100 ADD MLOAD DUP10 PUSH1 0x8 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH2 0x1E0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB1BF962D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC71 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC95 SWAP2 SWAP1 PUSH2 0x2162 JUMP JUMPDEST PUSH2 0xC9F SWAP2 SWAP1 PUSH2 0x214A JUMP JUMPDEST SWAP1 PUSH2 0x142B JUMP JUMPDEST PUSH2 0xCAF SWAP2 SWAP1 PUSH2 0x214A JUMP JUMPDEST GT ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3531000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xD20 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xDCC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x20F JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0xDFB PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0xE0F SWAP2 PUSH2 0x142B JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x7 DUP9 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x8 DUP12 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP9 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP12 ADD MLOAD SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 MLOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP11 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x1A0 DUP10 ADD MLOAD SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x1E0 DUP10 ADD MLOAD DUP2 AND PUSH2 0x100 DUP6 ADD MSTORE SWAP2 MLOAD PUSH32 0xA589870900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0xA5898709 SWAP2 PUSH2 0xF70 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE 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 PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 SWAP2 POP DUP1 DUP3 DUP7 ADD MLOAD AND DUP3 DUP6 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF8D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xFB1 SWAP2 SWAP1 PUSH2 0x21F7 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP1 DUP3 MSTORE PUSH2 0xFC7 SWAP1 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x1 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x100A SWAP1 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x3 DUP8 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x105B SWAP1 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x2 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH2 0x100 DUP11 ADD MLOAD PUSH2 0x140 DUP12 ADD MLOAD DUP4 MLOAD SWAP7 DUP8 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0x804C9B842B2748A22BB64B345453A3DE7CA54A6CA45CE00D415894979E22897A SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND ISZERO PUSH2 0x133B JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x7535D246 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1172 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1196 SWAP2 SWAP1 PUSH2 0x2225 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11E0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1204 SWAP2 SWAP1 PUSH2 0x2225 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1251 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1275 SWAP2 SWAP1 PUSH2 0x2225 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x91D1485400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0xD1D2CF869016112A9AF1107BCF43C3759DAF22CF734AAD47D0C9C726E33BC782 PUSH1 0x4 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x91D14854 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1307 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x132B SWAP2 SWAP1 PUSH2 0x2111 JUMP JUMPDEST PUSH2 0x1339 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x6E5 JUMP JUMPDEST POP JUMPDEST PUSH2 0x1347 DUP7 DUP7 DUP7 DUP7 PUSH2 0x18E4 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 DUP4 LT PUSH2 0x13C0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20F SWAP2 SWAP1 PUSH2 0x209E JUMP JUMPDEST POP PUSH1 0x1 DUP3 DUP2 SHL DUP2 ADD SHL DUP2 ISZERO PUSH2 0x13DA JUMPI DUP4 SLOAD DUP2 OR DUP5 SSTORE PUSH2 0x13E2 JUMP JUMPDEST DUP4 SLOAD DUP2 NOT AND DUP5 SSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x141D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0x14CA SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0xC95 PUSH2 0x14BB DUP9 PUSH2 0x1981 JUMP JUMPDEST PUSH2 0x14C4 DUP9 PUSH2 0x1981 JUMP JUMPDEST SWAP1 PUSH2 0x1522 JUMP JUMPDEST SWAP1 POP PUSH2 0x14D5 DUP2 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x1 DUP7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x15CC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x15D6 DUP6 PUSH2 0x199C JUMP JUMPDEST PUSH2 0x163C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x20F JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD ISZERO PUSH2 0x16D3 JUMPI PUSH1 0x0 PUSH2 0x1664 DUP3 PUSH2 0x160 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x1A68 JUMP JUMPDEST SWAP1 POP PUSH2 0x167D DUP3 PUSH1 0xE0 ADD MLOAD DUP3 PUSH2 0x142B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x100 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x168E SWAP1 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x1 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1760 JUMPI PUSH1 0x0 PUSH2 0x16F0 DUP3 PUSH2 0x180 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x1AAF JUMP JUMPDEST SWAP1 POP PUSH2 0x170A DUP3 PUSH2 0x120 ADD MLOAD DUP3 PUSH2 0x142B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x140 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x171B SWAP1 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x179D PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x1A0 DUP3 ADD MLOAD PUSH2 0x17AC JUMPI POP POP POP JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x17BD SWAP2 PUSH2 0x142B JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x140 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x17D3 SWAP2 PUSH2 0x142B JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x260 DUP4 ADD MLOAD PUSH2 0x240 DUP5 ADD MLOAD PUSH2 0x17FB SWAP3 SWAP2 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x1AB8 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x1810 SWAP2 PUSH2 0x142B JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x182C SWAP2 SWAP1 PUSH2 0x214A JUMP JUMPDEST PUSH2 0x1836 SWAP2 SWAP1 PUSH2 0x2133 JUMP JUMPDEST PUSH2 0x1840 SWAP2 SWAP1 PUSH2 0x2133 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP4 ADD MLOAD PUSH2 0x1857 SWAP2 SWAP1 PUSH2 0x13E8 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE ISZERO PUSH2 0x18DF JUMPI PUSH2 0x1882 PUSH2 0x56C DUP4 PUSH2 0x100 ADD MLOAD DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0x1522 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x8 DUP5 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x18A8 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1F01 JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x18F2 DUP3 MLOAD PUSH2 0xFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x18FE JUMPI POP PUSH1 0x0 PUSH2 0x1979 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND PUSH2 0x193D JUMPI POP PUSH1 0x1 PUSH2 0x1979 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x195A SWAP1 DUP8 DUP8 PUSH2 0x1BFF JUMP JUMPDEST POP POP SWAP1 POP DUP1 ISZERO DUP1 ISZERO PUSH2 0x1975 JUMPI POP DUP3 MLOAD PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND ISZERO JUMPDEST SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH4 0x3B9ACA00 DUP2 DUP2 MUL SWAP1 DUP2 DIV DUP3 EQ PUSH2 0x1997 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19DC JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x1A1B JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x1A55 JUMPI PUSH2 0x1A16 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x19A3 JUMP JUMPDEST PUSH2 0x1A62 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x1A4C JUMPI PUSH2 0x1A4C PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x19A3 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x1A62 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1A7C PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x2133 JUMP JUMPDEST PUSH2 0x1A86 SWAP1 DUP6 PUSH2 0x2061 JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x1AA5 DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x214A JUMP JUMPDEST SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x151B DUP4 DUP4 TIMESTAMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1ACC PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x2133 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1AE8 JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x151B JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x1B1E JUMPI PUSH1 0x0 PUSH2 0x1B23 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x1B37 DUP11 DUP1 PUSH2 0x142B JUMP JUMPDEST DUP2 PUSH2 0x1B44 JUMPI PUSH2 0x1B44 PUSH2 0x2242 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x1B56 DUP4 DUP12 PUSH2 0x142B JUMP JUMPDEST DUP2 PUSH2 0x1B63 JUMPI PUSH2 0x1B63 PUSH2 0x2242 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x1B73 DUP7 DUP9 PUSH2 0x2061 JUMP JUMPDEST PUSH2 0x1B7D SWAP2 SWAP1 PUSH2 0x2061 JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x1B91 DUP9 DUP11 PUSH2 0x2061 JUMP JUMPDEST PUSH2 0x1B9B SWAP2 SWAP1 PUSH2 0x2061 JUMP JUMPDEST PUSH2 0x1BA5 SWAP2 SWAP1 PUSH2 0x2061 JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x1BBC DUP11 DUP16 PUSH2 0x2061 JUMP JUMPDEST PUSH2 0x1BC6 SWAP2 SWAP1 PUSH2 0x2271 JUMP JUMPDEST PUSH2 0x1BDC SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x214A JUMP JUMPDEST PUSH2 0x1BE6 SWAP2 SWAP1 PUSH2 0x214A JUMP JUMPDEST PUSH2 0x1BF0 SWAP2 SWAP1 PUSH2 0x214A JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1C0D DUP7 PUSH2 0x1CB7 JUMP JUMPDEST ISZERO PUSH2 0x1CA4 JUMPI PUSH1 0x0 PUSH2 0x1C3E DUP8 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA PUSH2 0x1CFB JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 DUP5 MSTORE DUP11 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP3 MLOAD SWAP4 DUP5 ADD SWAP1 SWAP3 MSTORE SWAP1 SLOAD SWAP2 DUP3 SWAP1 MSTORE SWAP3 SWAP4 POP PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x1CA0 JUMPI PUSH1 0x1 SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x1CAE SWAP1 POP JUMP JUMPDEST POP POP POP JUMPDEST POP PUSH1 0x0 SWAP2 POP DUP2 SWAP1 POP DUP1 JUMPDEST SWAP4 POP SWAP4 POP SWAP4 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x151B JUMPI POP PUSH2 0x1CF3 PUSH1 0x1 DUP3 PUSH2 0x2133 JUMP JUMPDEST AND ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 DUP3 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD NOT DUP2 AND DUP3 JUMPDEST PUSH1 0x2 SWAP2 SWAP1 SWAP2 SHR SWAP1 DUP2 ISZERO PUSH2 0x6E5 JUMPI PUSH1 0x1 ADD PUSH2 0x1D2A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x280 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1DC3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1E0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1E2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH2 0x1E4C DUP2 PUSH2 0x1DEC JUMP JUMPDEST SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD PUSH2 0x1E63 DUP2 PUSH2 0x1DEC JUMP JUMPDEST SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x1E7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1EA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x1EB4 DUP2 PUSH2 0x1DEC JUMP JUMPDEST SWAP5 SWAP8 SWAP5 SWAP7 POP POP POP POP PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP3 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP3 PUSH1 0x80 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x1F2C JUMPI PUSH2 0x1F2C PUSH2 0x1ED2 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x1F8E JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x1F74 JUMPI PUSH2 0x1F74 PUSH2 0x1ED2 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x1F81 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x1F3A JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1FA5 JUMPI POP PUSH1 0x1 PUSH2 0x1AA9 JUMP JUMPDEST DUP2 PUSH2 0x1FB2 JUMPI POP PUSH1 0x0 PUSH2 0x1AA9 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x1FC8 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x1FD2 JUMPI PUSH2 0x1FEE JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x1AA9 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x1FE3 JUMPI PUSH2 0x1FE3 PUSH2 0x1ED2 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x1AA9 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x2011 JUMPI POP DUP2 DUP2 EXP PUSH2 0x1AA9 JUMP JUMPDEST PUSH2 0x201B DUP4 DUP4 PUSH2 0x1F35 JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x204D JUMPI PUSH2 0x204D PUSH2 0x1ED2 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x151B DUP4 DUP4 PUSH2 0x1F96 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2099 JUMPI PUSH2 0x2099 PUSH2 0x1ED2 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x20CB JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x20AF JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x20DD JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x151B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x2145 JUMPI PUSH2 0x2145 PUSH2 0x1ED2 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x215D JUMPI PUSH2 0x215D PUSH2 0x1ED2 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2174 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x21A4 JUMPI PUSH2 0x21A4 PUSH2 0x1ED2 JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x21C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x21EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x220C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2237 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x151B DUP2 PUSH2 0x1DEC JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x22A7 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 SWAP9 0xE9 SUB 0xBB DUP4 0x4F ORIGIN 0xCB BALANCE 0xEE 0xE2 DUP1 SELFDESTRUCT 0xD6 CALLDATALOAD 0xA5 0x21 0xEF 0xBD 0xB6 SIGNEXTEND 0xC2 JUMPDEST 0xA5 0xDC 0xBC DUP12 RETURNDATASIZE 0xB8 MOD 0xD2 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"837:4930:77:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2476:1608;;;;;;;;;;-1:-1:-1;2476:1608:77;;;;;:::i;:::-;;:::i;:::-;;4610:1155;;;;;;;;;;-1:-1:-1;4610:1155:77;;;;;:::i;:::-;;:::i;:::-;;;1838:25:201;;;1826:2;1811:18;4610:1155:77;;;;;;;2476:1608;2829:19;;;2789:37;2829:19;;;;;;;;;;;2899:15;2829:19;2899:13;:15::i;:::-;2854:60;-1:-1:-1;2921:33:77;:7;2854:60;2921:19;:33::i;:::-;2961:61;2992:12;3006:7;3015:6;2961:30;:61::i;:::-;3055:33;;;;19491:9:72;4411:3;19490:77;;;;;;3439:2;8367:67;;;3029:23:77;3234:18;:6;:16;:18::i;:::-;3214:16;;;:38;;:16;;:38;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;3195:57;;;;3311:15;3305:2;:21;;;;:::i;:::-;3286:41;;:15;:41;:::i;:::-;3274:8;:53;;3335:33;;;;;;;;;;;;;;;;;3259:115;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;3381:54:77;:7;3409:12;3423:5;3430:1;;3381:27;:54::i;:::-;3471:26;;;;3561:31;;;;3463:135;;;;;3511:10;3463:135;;;5001:34:201;3463:40:77;5071:15:201;;;5051:18;;;5044:43;5103:18;;;5096:34;;;5146:18;;;5139:34;;;;3442:18:77;;3463:40;;;;;;;4912:19:201;;3463:135:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3442:156;;3609:13;3605:398;;;3645:211;3705:12;3729;3753:10;3775:12;:33;;;3820:12;:26;;;3645:48;:211::i;:::-;3632:365;;;3907:10;;;;3875:49;;:10;;3907;;;;;3919:4;3875:31;:49::i;:::-;3977:10;3939:49;;3970:5;3939:49;;;;;;;;;;;;3632:365;4014:65;;;4034:10;5640:74:201;;5745:2;5730:18;;5723:34;;;4014:65:77;;;;;;;;;;;;;;;5613:18:201;4014:65:77;;;;;;;2783:1301;;;;;;2476:1608;;;;;;;:::o;4610:1155::-;4788:7;4803:42;4848:15;:7;:13;:15::i;:::-;4803:60;-1:-1:-1;4870:33:77;:7;4803:60;4870:19;:33::i;:::-;4944:16;;;;4910:21;;4944:16;;;;;4935:25;;4934:55;;4973:16;;;;;;;;;4934:55;;;4964:6;4934:55;4910:79;-1:-1:-1;4996:21:77;5020:30;:3;5035:14;5020;:30::i;:::-;4996:54;-1:-1:-1;5056:15:77;5074:19;4996:54;5074:3;:19;:::i;:::-;5056:37;-1:-1:-1;5099:13:77;5115:19;5131:3;5115:13;:19;:::i;:::-;5316:31;;;;5282:25;;;;5099:35;;-1:-1:-1;5175:194:77;;5274:74;;5282:25;;;;;5274:41;:74::i;:::-;5222:12;:26;;;5215:46;;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:133;;;;:::i;:::-;5175:7;;5356;5175:32;:194::i;:::-;5141:31;;;:228;;;5405:65;;:53;;:13;;:20;:53::i;:::-;:63;:65::i;:::-;5376:25;;;:94;;:25;;:94;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5497:25;:13;:23;:25::i;:::-;5477:16;;;:45;;:16;;:45;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5528:58;5556:12;5570:5;5577;5584:1;5528:7;:27;;:58;;;;;;;:::i;:::-;5636:26;;;;5593:77;;:30;;;;5624:10;;5664:5;5593:30;:77::i;:::-;5682:51;;;6645:25:201;;;6701:2;6686:18;;6679:34;;;5702:10:77;;5682:51;;;;;;6618:18:201;5682:51:77;;;;;;;-1:-1:-1;5747:13:77;;-1:-1:-1;;;;4610:1155:77;;;;;;;;:::o;12460:1739:85:-;12545:29;;:::i;:::-;12582:42;;:::i;:::-;12631:57;;;;;;;;;;;;:33;;;:57;;;15238:9:72;15237:71;;;;12694:26:85;;;:81;12849:22;;;;;;;;;12815:31;;:56;;;12781:31;;;:90;12955:34;;;;;;;12916:36;;;:73;;;12877:36;;;:112;13028:28;;;;;;;12995:30;;;:61;13100:33;;;;13062:35;;;:71;13169:21;;;;;;;;;13140:26;;;:50;13234:30;;;;;;13196:35;;;:68;13310:32;;;;;13270:37;;;:72;;;13391:27;;;;;;;;;;13349:39;;;:69;-1:-1:-1;13501:89:85;;;;;;;:87;;:89;;;;-1:-1:-1;;13501:89:85;;;;;;;13310:32;13501:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13463:12;:35;;:127;;;;13425:12;:35;;:165;;;;;13801:12;:35;;;13784:67;;;:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13597:256;;13733:42;;;13597:256;13689:36;;;13597:256;;;13649:32;;;13597:256;;;13605:36;;;13597:256;;;;14020:32;;;:67;14093:36;;;:75;13605:12;12460:1739;-1:-1:-1;;12460:1739:85:o;3556:502::-;3796:27;;;;3834:15;3796:54;;;;:27;;;;;:54;3792:81;;;3556:502;;:::o;3792:81::-;3879:37;3894:7;3903:12;3879:14;:37::i;:::-;3922:40;3940:7;3949:12;3922:17;:40::i;:::-;-1:-1:-1;4000:27:85;;:53;;;;;4037:15;4000:53;;;;;;3556:502::o;3050:862:87:-;3230:21;;;;;;;;;;;;;;;;;3217:11;3209:43;;;;;;;;;;;;;:::i;:::-;;3260:13;3275;3294;3311:58;:12;:40;;;21735:9:72;21779:12;21767:24;;21766:31;;;21818:12;21806:24;;21805:31;;;21857:15;21845:27;;21844:34;;;21899:22;21887:34;;21886:41;;;21948:12;21936:24;21935:31;;;21583:394;3311:58:87;3259:110;;;;;;;;3383:8;3393:23;;;;;;;;;;;;;;;;;3375:42;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3442:21:87;;;;;;;;;;;;;;;;;3431:9;;3423:41;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3489:21:87;;;;;;;;;;;;;;;;;3478:9;;3470:41;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3538:33:87;;;;16762:9:72;4191:3;16761:63;;;3607:14:87;;;:260;;-1:-1:-1;3819:33:87;;;;8368:9:72;3439:2;8367:67;;;3813:53:87;;:2;:53;:::i;:::-;3800:67;;:9;:67;:::i;:::-;3781:6;3634:144;3746:12;:31;;;3711:7;:25;;;;;;;;;;;;3703:34;;3643:12;:26;;;3635:53;;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:102;;;;:::i;:::-;3634:111;;:144::i;:::-;:153;;;;:::i;:::-;3633:234;;3607:260;3875:26;;;;;;;;;;;;;;;;;3592:315;;;;;;;;;;;;;;:::i;:::-;;3203:709;;;;3050:862;;;:::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;7397:2:201;1635:78:12;;;7379:21:201;7436:2;7416:18;;;7409:30;7475:34;7455:18;;;7448:62;7546:9;7526:18;;;7519:37;7573:19;;1635:78:12;7195:403:201;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;6827:1514:85:-;7050:40;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7050:40:85;7172:36;;;;7122:35;;;;:92;;:42;:92::i;:::-;7097:22;;;;:117;;;7345:35;;;;7412:473;;;;;;;;7471:16;;;;;;;;;;7412:473;;-1:-1:-1;7412:473:85;;;;;;;;;;;7594:32;;;;;7412:473;;;;;;;7655:22;;7412:473;;;;;7712:36;;;;7412:473;;;;7773:26;;;;7412:473;;;;;;;7345:35;7412:473;;;-1:-1:-1;7412:473:85;;;7850:26;;;;7412:473;;7345:35;7412:473;;;7316:575;;;;;7345:35;;;7316:88;;:575;;7412:473;7316:575;;7789:4:201;7831:3;7820:9;7816:19;7808:27;;7868:6;7862:13;7851:9;7844:32;7932:4;7924:6;7920:17;7914:24;7907:4;7896:9;7892:20;7885:54;7995:4;7987:6;7983:17;7977:24;7970:4;7959:9;7955:20;7948:54;8058:4;8050:6;8046:17;8040:24;8033:4;8022:9;8018:20;8011:54;8121:4;8113:6;8109:17;8103:24;8096:4;8085:9;8081:20;8074:54;8184:4;8176:6;8172:17;8166:24;8159:4;8148:9;8144:20;8137:54;8247:4;8239:6;8235:17;8229:24;8222:4;8211:9;8207:20;8200:54;8301:4;8293:6;8289:17;8283:24;8326:42;8424:2;8410:12;8406:21;8399:4;8388:9;8384:20;8377:51;8447:6;8437:16;;8517:2;8511;8503:6;8499:15;8493:22;8489:31;8484:2;8473:9;8469:18;8462:59;;;7603:924;;;;;7316:575:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7286:21;;;7221:670;7259:19;;;7221:670;;;;7929:34;;:32;:34::i;:::-;7898:28;;;:65;;;;;;;;;;;;;;;;8003:19;;;;:31;;:29;:31::i;:::-;7969;;;:65;;;;;;;;;;;;;;;8076:21;;;;:33;;:31;:33::i;:::-;8040;;;:69;;;;;;;;;;;;;;;;8169:22;;8199:19;;;;;8226:21;;;;;8040:69;8255:31;;;8294:36;;;;8121:215;;9102:25:201;;;9143:18;;;9136:34;;;;9186:18;;;9179:34;9244:2;9229:18;;9222:34;9287:3;9272:19;;9265:35;8121:215:85;;;;;;9089:3:201;9074:19;8121:215:85;;;;;;;7044:1297;6827:1514;;;;;:::o;28482:904:87:-;17634:9:72;;28815:4:87;;4478:3:72;17633:67;;;28831:35:87;28827:464;;28986:40;29047:13;29029:46;;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:76;;;:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28986:121;;29144:17;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29129:134;;;;;2851:41;29129:134;;;10298:25:201;29243:10:87;10339:18:201;;;10332:83;29129:57:87;;;;;;;;10271:18:201;;29129:134:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29115:169;;29279:5;29272:12;;;;;29115:169;28868:423;28827:464;29303:78;29327:12;29341;29355:10;29367:13;29303:23;:78::i;:::-;29296:85;28482:904;-1:-1:-1;;;;;;28482:904:87:o;1688:433:73:-;1922:28;;;;;;;;;;;;;;;;;5284:3:72;1866:54:73;;1858:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1996:1:73;1980:17;;;1979:23;;1973:30;2011:100;;;;2044:16;;;;;;2011:100;;;2085:17;;2098:4;;2085:17;;;2011:100;1840:277;1688:433;;;:::o;1005:496:89:-;1083:14;1248:18;;1299:35;1295:52;;;1285:63;;1278:71;1234:125;1215:183;;1388:1;1385;1378:12;1215:183;-1:-1:-1;1473:17:89;1424:22;;1448;1420:51;1416:75;;1005:496::o;2253:319:90:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:90;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;4496:534:85:-;4929:22;;;;4643:7;;;;4844:113;;4929:22;;704:4:90;4845:51:85;4870:25;:14;:23;:25::i;:::-;4845:17;:6;:15;:17::i;:::-;:24;;:51::i;4844:113::-;4827:130;;4988:18;:6;:16;:18::i;:::-;4963:22;;;:43;;;;;;;;;;;;;;;5019:6;-1:-1:-1;4496:534:85;;;;;;:::o;2840:322:90:-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:90;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;1228:780:1:-;1477:4;1471:11;1343:27;1489:36;;;1576:42;1566:53;;;1562:1;1539:25;;1532:88;1662:51;;1657:2;1634:26;;1627:87;1751:2;1728:26;;1721:41;;;1343:27;1324:16;;1821:3;1471:11;1324:16;1792:5;1785;1780:51;1770:155;;1864:16;1861:1;1858;1843:38;1900:16;1897:1;1890:27;1770:155;;1945:28;1967:5;1945:21;:28::i;:::-;1937:66;;;;;;;10628:2:201;1937:66:1;;;10610:21:201;10667:2;10647:18;;;10640:30;10706:27;10686:18;;;10679:55;10751:18;;1937:66:1;10426:349:201;1937:66:1;1318:690;1228:780;;;;:::o;10657:1542:85:-;11008:30;;;;:35;11004:423;;11053:34;11090:130;11133:12;:30;;;11173:12;:39;;;11090:33;:130::i;:::-;11053:167;;11262:82;11305:12;:31;;;11262:26;:33;;:82;;;;:::i;:::-;11228:31;;;:116;;;11377:43;;:41;:43::i;:::-;11352:22;;;:68;;;;;;;;;;;;;;;-1:-1:-1;11004:423:85;11732:35;;:40;11728:467;;11782:39;11824:139;11871:12;:35;;;11916:12;:39;;;11824:37;:139::i;:::-;11782:181;;12010:92;12058:12;:36;;;12010:31;:38;;:92;;;;:::i;:::-;11971:36;;;:131;;;12140:48;;:46;:48::i;:::-;12110:27;;;:78;;;;;;;;;;;;;;;-1:-1:-1;11728:467:85;10657:1542;;:::o;8841:1598::-;8978:37;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8978:37:85;9026:26;;;;9022:58;;9067:7;8841:1598;;:::o;9022:58::-;9239:36;;;;9189:35;;:92;;:42;:92::i;:::-;9160:26;;;:121;9459:36;;;;9409:35;;:92;;:42;:92::i;:::-;9380:26;;;:121;9648:36;;;;9692:42;;;;9742:39;;;;9603:184;;9648:36;9692:42;9603:184;;:37;:184::i;:::-;9572:28;;;:215;;;9821:36;;;;:85;;:43;:85::i;:::-;9794:112;;;10114:26;;;;10073:32;;;;10038:26;;;;:67;;10073:32;10038:67;:::i;:::-;:102;;;;:::i;:::-;:135;;;;:::i;:::-;10008:21;;;:165;;;10233:26;;;;10200:60;;10008:165;10200:32;:60::i;:::-;10180:17;;;:80;;;10271:22;10267:168;;10332:96;:75;10375:12;:31;;;10332:4;:26;;;:42;;:75;;;;:::i;:96::-;10303:25;;;:125;;:25;;:125;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10267:168;8972:1467;8841:1598;;:::o;27289:620:87:-;27586:4;27602:22;:13;5872:9:72;5884;5872:21;;5764:134;27602:22:87;27598:60;;-1:-1:-1;27646:5:87;27639:12;;27598:60;27668:33;;;;;;;;;;;;;;;620:66:73;4911:27;27663:68:87;;-1:-1:-1;27720:4:87;27713:11;;27663:68;27769:32;;;;;;;;;;;;;27737:24;;27769:60;;27802:12;27816;27769:32;:60::i;:::-;27736:93;;;;27845:19;27844:20;:59;;;;-1:-1:-1;17634:9:72;;4478:3;17633:67;;;27868:35:87;27844:59;27836:68;;;27289:620;;;;;;;:::o;3901:247:90:-;4046:13;4039:21;;;;4081;;4078:28;;4068:70;;4128:1;4125;4118:12;4068:70;3901:247;;;:::o;2198:2524:1:-;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;4611:1;4605:8;4598:16;4591:24;4580:35;;3538:1174;;2198:2524;;;:::o;700:334:88:-;810:7;;881:46;899:28;;;881:15;:46;:::i;:::-;873:55;;:4;:55;:::i;:::-;376:8;961:25;;;-1:-1:-1;1006:23:88;961:25;704:4:90;1006:23:88;:::i;:::-;999:30;;;700:334;;;;;:::o;3142:212::-;3256:7;3278:71;3306:4;3312:19;3333:15;1780:972;1924:7;;1984:47;2003:28;;;1984:16;:47;:::i;:::-;1970:61;-1:-1:-1;2042:8:88;2038:50;;704:4:90;2060:21:88;;;;;2038:50;2230:7;;;2094:19;;;2266:1;2260:7;;:21;;2280:1;2260:21;;;2276:1;2270:3;:7;2260:21;2246:35;-1:-1:-1;2326:35:88;2305:17;2317:4;;2305:11;:17::i;:::-;:57;;;;;:::i;:::-;;;-1:-1:-1;376:8:88;2387:25;2305:57;2407:4;2387:19;:25::i;:::-;:44;;;;;:::i;:::-;;;-1:-1:-1;2444:18:88;2485:12;2465:17;2471:11;2465:3;:17;:::i;:::-;:32;;;;:::i;:::-;2535:1;2521:15;;;-1:-1:-1;2548:17:88;2602:14;2588:11;2568:17;2574:11;2568:3;:17;:::i;:::-;:31;;;;:::i;:::-;:48;;;;:::i;:::-;2653:1;2640:14;;;-1:-1:-1;2640:14:88;2725:10;376:8;2692:10;2699:3;2692:4;:10;:::i;:::-;2691:31;;;;:::i;:::-;2674:48;;704:4:90;2674:48:88;:::i;:::-;:61;;;;:::i;:::-;:73;;;;:::i;:::-;2667:80;1780:972;-1:-1:-1;;;;;;;;;;;1780:972:88:o;6625:625:73:-;6853:4;6859:7;6868;6887:28;6910:4;6887:22;:28::i;:::-;6883:328;;;6925:15;6943:45;6966:4;620:66;6943:22;:45::i;:::-;6997:20;7020:21;;;;;;;;;;;;;;7067:26;;;;;;;;;:55;;;;;;;;;;;;;;7020:21;;-1:-1:-1;4478:3:72;17633:67;;;7049:75:73;-1:-1:-1;7136:12:73;;7132:73;;7168:4;;-1:-1:-1;7174:12:73;;-1:-1:-1;7188:7:73;-1:-1:-1;7160:36:73;;-1:-1:-1;7160:36:73;7132:73;6917:294;;;6883:328;-1:-1:-1;7224:5:73;;-1:-1:-1;7224:5:73;;-1:-1:-1;7224:5:73;6625:625;;;;;;;;:::o;4304:256::-;4448:9;;4411:4;;620:66;4448:27;4488:19;;;;;:67;;-1:-1:-1;4530:18:73;4547:1;4530:14;:18;:::i;:::-;4512:37;:42;;4481:74;-1:-1:-1;;4304:256:73:o;8422:382::-;8601:9;;8547:7;;8601:16;;8669:14;;;8667:17;8654:30;;8547:7;8711:66;8742:1;8719:24;;;;;8718:31;;8711:66;;8767:1;8761:7;8711:66;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:154:201:-;100:42;93:5;89:54;82:5;79:65;69:93;;158:1;155;148:12;69:93;14:154;:::o;173:949::-;402:6;410;418;426;434;442;450;503:3;491:9;482:7;478:23;474:33;471:53;;;520:1;517;510:12;471:53;556:9;543:23;533:33;;613:2;602:9;598:18;585:32;575:42;;664:2;653:9;649:18;636:32;626:42;;718:2;707:9;703:18;690:32;731:31;756:5;731:31;:::i;:::-;781:5;-1:-1:-1;833:3:201;818:19;;805:33;;-1:-1:-1;890:3:201;875:19;;862:33;904;862;904;:::i;:::-;956:7;-1:-1:-1;1015:3:201;1000:19;;987:33;1064:6;1051:20;;1039:33;;1029:61;;1086:1;1083;1076:12;1029:61;1109:7;1099:17;;;173:949;;;;;;;;;;:::o;1127:552::-;1253:6;1261;1269;1277;1285;1338:3;1326:9;1317:7;1313:23;1309:33;1306:53;;;1355:1;1352;1345:12;1306:53;1391:9;1378:23;1368:33;;1451:2;1440:9;1436:18;1423:32;1464:31;1489:5;1464:31;:::i;:::-;1127:552;;1514:5;;-1:-1:-1;;;;1566:2:201;1551:18;;1538:32;;1617:2;1602:18;;1589:32;;1668:3;1653:19;;;1640:33;;-1:-1:-1;1127:552:201:o;1874:184::-;1926:77;1923:1;1916:88;2023:4;2020:1;2013:15;2047:4;2044:1;2037:15;2063:253;2103:3;2131:34;2192:2;2189:1;2185:10;2222:2;2219:1;2215:10;2253:3;2249:2;2245:12;2240:3;2237:21;2234:47;;;2261:18;;:::i;:::-;2297:13;;2063:253;-1:-1:-1;;;;2063:253:201:o;2321:482::-;2410:1;2453:5;2410:1;2467:330;2488:7;2478:8;2475:21;2467:330;;;2607:4;2539:66;2535:77;2529:4;2526:87;2523:113;;;2616:18;;:::i;:::-;2666:7;2656:8;2652:22;2649:55;;;2686:16;;;;2649:55;2765:22;;;;2725:15;;;;2467:330;;;2471:3;2321:482;;;;;:::o;2808:866::-;2857:5;2887:8;2877:80;;-1:-1:-1;2928:1:201;2942:5;;2877:80;2976:4;2966:76;;-1:-1:-1;3013:1:201;3027:5;;2966:76;3058:4;3076:1;3071:59;;;;3144:1;3139:130;;;;3051:218;;3071:59;3101:1;3092:10;;3115:5;;;3139:130;3176:3;3166:8;3163:17;3160:43;;;3183:18;;:::i;:::-;-1:-1:-1;;3239:1:201;3225:16;;3254:5;;3051:218;;3353:2;3343:8;3340:16;3334:3;3328:4;3325:13;3321:36;3315:2;3305:8;3302:16;3297:2;3291:4;3288:12;3284:35;3281:77;3278:159;;;-1:-1:-1;3390:19:201;;;3422:5;;3278:159;3469:34;3494:8;3488:4;3469:34;:::i;:::-;3599:6;3531:66;3527:79;3518:7;3515:92;3512:118;;;3610:18;;:::i;:::-;3648:20;;2808:866;-1:-1:-1;;;2808:866:201:o;3679:131::-;3739:5;3768:36;3795:8;3789:4;3768:36;:::i;3815:228::-;3855:7;3981:1;3913:66;3909:74;3906:1;3903:81;3898:1;3891:9;3884:17;3880:105;3877:131;;;3988:18;;:::i;:::-;-1:-1:-1;4028:9:201;;3815:228::o;4048:656::-;4160:4;4189:2;4218;4207:9;4200:21;4250:6;4244:13;4293:6;4288:2;4277:9;4273:18;4266:34;4318:1;4328:140;4342:6;4339:1;4336:13;4328:140;;;4437:14;;;4433:23;;4427:30;4403:17;;;4422:2;4399:26;4392:66;4357:10;;4328:140;;;4486:6;4483:1;4480:13;4477:91;;;4556:1;4551:2;4542:6;4531:9;4527:22;4523:31;4516:42;4477:91;-1:-1:-1;4620:2:201;4608:15;4625:66;4604:88;4589:104;;;;4695:2;4585:113;;4048:656;-1:-1:-1;;;4048:656:201:o;5184:277::-;5251:6;5304:2;5292:9;5283:7;5279:23;5275:32;5272:52;;;5320:1;5317;5310:12;5272:52;5352:9;5346:16;5405:5;5398:13;5391:21;5384:5;5381:32;5371:60;;5427:1;5424;5417:12;5768:125;5808:4;5836:1;5833;5830:8;5827:34;;;5841:18;;:::i;:::-;-1:-1:-1;5878:9:201;;5768:125::o;5898:128::-;5938:3;5969:1;5965:6;5962:1;5959:13;5956:39;;;5975:18;;:::i;:::-;-1:-1:-1;6011:9:201;;5898:128::o;6031:184::-;6101:6;6154:2;6142:9;6133:7;6129:23;6125:32;6122:52;;;6170:1;6167;6160:12;6122:52;-1:-1:-1;6193:16:201;;6031:184;-1:-1:-1;6031:184:201:o;6220:246::-;6260:4;6289:34;6373:10;;;;6343;;6395:12;;;6392:38;;;6410:18;;:::i;:::-;6447:13;;6220:246;-1:-1:-1;;;6220:246:201:o;6724:466::-;6820:6;6828;6836;6844;6897:3;6885:9;6876:7;6872:23;6868:33;6865:53;;;6914:1;6911;6904:12;6865:53;6943:9;6937:16;6927:26;;6993:2;6982:9;6978:18;6972:25;6962:35;;7037:2;7026:9;7022:18;7016:25;7006:35;;7084:2;7073:9;7069:18;7063:25;7128:12;7121:5;7117:24;7110:5;7107:35;7097:63;;7156:1;7153;7146:12;7097:63;6724:466;;;;-1:-1:-1;6724:466:201;;-1:-1:-1;;6724:466:201:o;8532:306::-;8620:6;8628;8636;8689:2;8677:9;8668:7;8664:23;8660:32;8657:52;;;8705:1;8702;8695:12;8657:52;8734:9;8728:16;8718:26;;8784:2;8773:9;8769:18;8763:25;8753:35;;8828:2;8817:9;8813:18;8807:25;8797:35;;8532:306;;;;;:::o;9311:265::-;9395:6;9448:2;9436:9;9427:7;9423:23;9419:32;9416:52;;;9464:1;9461;9454:12;9416:52;9496:9;9490:16;9515:31;9540:5;9515:31;:::i;10780:184::-;10832:77;10829:1;10822:88;10929:4;10926:1;10919:15;10953:4;10950:1;10943:15;10969:274;11009:1;11035;11025:189;;11070:77;11067:1;11060:88;11171:4;11168:1;11161:15;11199:4;11196:1;11189:15;11025:189;-1:-1:-1;11228:9:201;;10969:274::o"},"gasEstimates":{"creation":{"codeDepositCost":"1786000","executionCost":"1915","totalCost":"1787915"},"external":{"executeBackUnbacked(DataTypes.ReserveData storage,address,uint256,uint256,uint256)":"infinite","executeMintUnbacked(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,address,uint256,address,uint16)":"infinite"}},"methodIdentifiers":{"executeBackUnbacked(DataTypes.ReserveData storage,address,uint256,uint256,uint256)":"8e743248","executeMintUnbacked(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,address,uint256,address,uint16)":"0413c86f"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"backer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"BackUnbacked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"MintUnbacked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralEnabled\",\"type\":\"event\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"executeBackUnbacked(DataTypes.ReserveData storage,address,uint256,uint256,uint256)\":{\"details\":\"It is not possible to back more than the existing unbacked amount of the reserveEmits the `BackUnbacked` event\",\"params\":{\"amount\":\"The amount to back\",\"asset\":\"The address of the underlying asset to repay\",\"fee\":\"The amount paid in fees\",\"protocolFeeBps\":\"The fraction of fees in basis points paid to the protocol\",\"reserve\":\"The reserve to back unbacked for\"},\"returns\":{\"_0\":\"The backed amount\"}},\"executeMintUnbacked(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,address,uint256,address,uint16)\":{\"details\":\"Essentially a supply without transferring the underlying.Emits the `MintUnbacked` eventEmits the `ReserveUsedAsCollateralEnabled` if asset is set as collateral\",\"params\":{\"amount\":\"The amount to mint\",\"asset\":\"The address of the underlying asset to mint aTokens of\",\"onBehalfOf\":\"The address that will receive the aTokens\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\",\"userConfig\":\"The user configuration mapping that tracks the supplied/borrowed assets\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeBackUnbacked(DataTypes.ReserveData storage,address,uint256,uint256,uint256)\":{\"notice\":\"Back the current unbacked with `amount` and pay `fee`.\"},\"executeMintUnbacked(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,address,uint256,address,uint16)\":{\"notice\":\"Mint unbacked aTokens to a user and updates the unbacked for the reserve.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/libraries/logic/BridgeLogic.sol\":\"BridgeLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\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(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\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 {AccessControl-_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) external view returns (bool);\\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 {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\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) external;\\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) external;\\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) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/BridgeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\nlibrary BridgeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @notice Mint unbacked aTokens to a user and updates the unbacked for the reserve.\\n   * @dev Essentially a supply without transferring the underlying.\\n   * @dev Emits the `MintUnbacked` event\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled` if asset is set as collateral\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param asset The address of the underlying asset to mint aTokens of\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function executeMintUnbacked(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateSupply(reserveCache, reserve, amount);\\n\\n    uint256 unbackedMintCap = reserveCache.reserveConfiguration.getUnbackedMintCap();\\n    uint256 reserveDecimals = reserveCache.reserveConfiguration.getDecimals();\\n\\n    uint256 unbacked = reserve.unbacked += amount.toUint128();\\n\\n    require(\\n      unbacked <= unbackedMintCap * (10 ** reserveDecimals),\\n      Errors.UNBACKED_MINT_CAP_EXCEEDED\\n    );\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    bool isFirstSupply = IAToken(reserveCache.aTokenAddress).mint(\\n      msg.sender,\\n      onBehalfOf,\\n      amount,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isFirstSupply) {\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration,\\n          reserveCache.aTokenAddress\\n        )\\n      ) {\\n        userConfig.setUsingAsCollateral(reserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(asset, onBehalfOf);\\n      }\\n    }\\n\\n    emit MintUnbacked(asset, msg.sender, onBehalfOf, amount, referralCode);\\n  }\\n\\n  /**\\n   * @notice Back the current unbacked with `amount` and pay `fee`.\\n   * @dev It is not possible to back more than the existing unbacked amount of the reserve\\n   * @dev Emits the `BackUnbacked` event\\n   * @param reserve The reserve to back unbacked for\\n   * @param asset The address of the underlying asset to repay\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @param protocolFeeBps The fraction of fees in basis points paid to the protocol\\n   * @return The backed amount\\n   */\\n  function executeBackUnbacked(\\n    DataTypes.ReserveData storage reserve,\\n    address asset,\\n    uint256 amount,\\n    uint256 fee,\\n    uint256 protocolFeeBps\\n  ) external returns (uint256) {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    uint256 backingAmount = (amount < reserve.unbacked) ? amount : reserve.unbacked;\\n\\n    uint256 feeToProtocol = fee.percentMul(protocolFeeBps);\\n    uint256 feeToLP = fee - feeToProtocol;\\n    uint256 added = backingAmount + fee;\\n\\n    reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex(\\n      IERC20(reserveCache.aTokenAddress).totalSupply() +\\n        uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex),\\n      feeToLP\\n    );\\n\\n    reserve.accruedToTreasury += feeToProtocol.rayDiv(reserveCache.nextLiquidityIndex).toUint128();\\n\\n    reserve.unbacked -= backingAmount.toUint128();\\n    reserve.updateInterestRates(reserveCache, asset, added, 0);\\n\\n    IERC20(asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, added);\\n\\n    emit BackUnbacked(asset, msg.sender, backingAmount, fee);\\n\\n    return backingAmount;\\n  }\\n}\\n\",\"keccak256\":\"0x71e1204a0ee1e4b9cdf787b1949c219845e5099671dd07639c4fa23995379edd\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeBackUnbacked(DataTypes.ReserveData storage,address,uint256,uint256,uint256)":{"notice":"Back the current unbacked with `amount` and pay `fee`."},"executeMintUnbacked(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,address,uint256,address,uint16)":{"notice":"Mint unbacked aTokens to a user and updates the unbacked for the reserve."}},"version":1}}},"@aave/core-v3/contracts/protocol/libraries/logic/ConfiguratorLogic.sol":{"ConfiguratorLogic":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"ATokenUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"aToken","type":"address"},{"indexed":false,"internalType":"address","name":"stableDebtToken","type":"address"},{"indexed":false,"internalType":"address","name":"variableDebtToken","type":"address"},{"indexed":false,"internalType":"address","name":"interestRateStrategyAddress","type":"address"}],"name":"ReserveInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"StableDebtTokenUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"VariableDebtTokenUpgraded","type":"event"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"executeInitReserve(IPool,ConfiguratorInputTypes.InitReserveInput)":{"details":"Emits the `ReserveInitialized` event","params":{"input":"The needed parameters for the initialization","pool":"The Pool in which the reserve will be initialized"}},"executeUpdateAToken(IPool,ConfiguratorInputTypes.UpdateATokenInput)":{"details":"Emits the `ATokenUpgraded` event","params":{"cachedPool":"The Pool containing the reserve with the aToken","input":"The parameters needed for the initialize call"}},"executeUpdateStableDebtToken(IPool,ConfiguratorInputTypes.UpdateDebtTokenInput)":{"details":"Emits the `StableDebtTokenUpgraded` event","params":{"cachedPool":"The Pool containing the reserve with the stable debt token","input":"The parameters needed for the initialize call"}},"executeUpdateVariableDebtToken(IPool,ConfiguratorInputTypes.UpdateDebtTokenInput)":{"details":"Emits the `VariableDebtTokenUpgraded` event","params":{"cachedPool":"The Pool containing the reserve with the variable debt token","input":"The parameters needed for the initialize call"}}},"title":"ConfiguratorLogic library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"61221c61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c8063b0f093551461005b578063b13c96a81461007d578063df59b8b21461009d578063f5b50e70146100bd575b600080fd5b81801561006757600080fd5b5061007b61007636600461117d565b6100dd565b005b81801561008957600080fd5b5061007b6100983660046111d4565b610439565b8180156100a957600080fd5b5061007b6100b8366004611220565b6106c6565b8180156100c957600080fd5b5061007b6100d836600461117d565b610bd3565b600073ffffffffffffffffffffffffffffffffffffffff83166335ea6a75610108602085018561126d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016101e060405180830381865afa158015610172573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019691906113a2565b9050600061028573ffffffffffffffffffffffffffffffffffffffff851663c44b11f76101c6602087018761126d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801561022f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025391906114c5565b5161ffff80821692601083901c821692602081901c83169260ff603083901c811693604084901c9092169260a81c1690565b50909450600093507fc222ec8a0000000000000000000000000000000000000000000000000000000092508791506102c29050602087018761126d565b6102d2604088016020890161126d565b856102e060408a018a6114e1565b6102ed60608c018c6114e1565b6102fa60a08e018e6114e1565b6040516024016103139a99989796959493929190611596565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526101408401519091506103b3906103ad60a087016080880161126d565b83610e6a565b6103c360a085016080860161126d565b61014084015173ffffffffffffffffffffffffffffffffffffffff91821691166103f0602087018761126d565b73ffffffffffffffffffffffffffffffffffffffff167f9439658a562a5c46b1173589df89cf001483d685bad28aedaff4a88656292d8160405160405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff83166335ea6a75610464602085018561126d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016101e060405180830381865afa1580156104ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f291906113a2565b9050600061052273ffffffffffffffffffffffffffffffffffffffff851663c44b11f76101c6602087018761126d565b50509350505050600063183fb41360e01b85856020016020810190610547919061126d565b610554602088018861126d565b6105646060890160408a0161126d565b8661057260608b018b6114e1565b61057f60808d018d6114e1565b61058c60c08f018f6114e1565b6040516024016105a69b9a99989796959493929190611617565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610100840151909150610640906103ad60c0870160a0880161126d565b61065060c0850160a0860161126d565b61010084015173ffffffffffffffffffffffffffffffffffffffff918216911661067d602087018761126d565b73ffffffffffffffffffffffffffffffffffffffff167fa76f65411ec66a7fb6bc467432eb14767900449ae4469fa295e4441fe5e1cb7360405160405180910390a45050505050565b60006108016106d8602084018461126d565b7f183fb413000000000000000000000000000000000000000000000000000000008561070a60e0870160c0880161126d565b61071a60c0880160a0890161126d565b61072b610100890160e08a0161126d565b61073b60808a0160608b016116a4565b6107496101008b018b6114e1565b6107576101208d018d6114e1565b6107656101c08f018f6114e1565b60405160240161077f9b9a999897969594939291906116c7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610ef8565b905060006108ae610818604085016020860161126d565b7fc222ec8a000000000000000000000000000000000000000000000000000000008661084a60c0880160a0890161126d565b61085b610100890160e08a0161126d565b61086b60808a0160608b016116a4565b6108796101808b018b6114e1565b6108876101a08d018d6114e1565b6108956101c08f018f6114e1565b60405160240161077f9a9998979695949392919061171b565b905060006109456108c5606086016040870161126d565b7fc222ec8a00000000000000000000000000000000000000000000000000000000876108f760c0890160a08a0161126d565b6109086101008a0160e08b0161126d565b61091860808b0160608c016116a4565b6109266101408c018c6114e1565b6109346101608e018e6114e1565b8e806101c0019061089591906114e1565b905073ffffffffffffffffffffffffffffffffffffffff8516637a708e9261097360c0870160a0880161126d565b85858561098660a08b0160808c0161126d565b60405160e087901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff95861660048201529385166024850152918416604484015283166064830152909116608482015260a401600060405180830381600087803b158015610a0b57600080fd5b505af1158015610a1f573d6000803e3d6000fd5b50506040805160208101909152600081529150610a519050610a4760808701606088016116a4565b829060ff16610fd3565b610a5c81600161107c565b610a678160006110c1565b610a72816000611106565b73ffffffffffffffffffffffffffffffffffffffff861663f51e435b610a9e60c0880160a0890161126d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff909116600482015283516024820152604401600060405180830381600087803b158015610b0b57600080fd5b505af1158015610b1f573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff85169050610b4b60c0870160a0880161126d565b73ffffffffffffffffffffffffffffffffffffffff167f3a0ca721fc364424566385a1aa271ed508cc2c0949c2272575fb3013a163a45f8585610b9460a08b0160808c0161126d565b6040805173ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015292168183015290519081900360600190a3505050505050565b600073ffffffffffffffffffffffffffffffffffffffff83166335ea6a75610bfe602085018561126d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016101e060405180830381865afa158015610c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8c91906113a2565b90506000610cbc73ffffffffffffffffffffffffffffffffffffffff851663c44b11f76101c6602087018761126d565b50909450600093507fc222ec8a000000000000000000000000000000000000000000000000000000009250879150610cf99050602087018761126d565b610d09604088016020890161126d565b85610d1760408a018a6114e1565b610d2460608c018c6114e1565b610d3160a08e018e6114e1565b604051602401610d4a9a99989796959493929190611596565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610120840151909150610de4906103ad60a087016080880161126d565b610df460a085016080860161126d565b61012084015173ffffffffffffffffffffffffffffffffffffffff9182169116610e21602087018761126d565b73ffffffffffffffffffffffffffffffffffffffff167f7a943a5b6c214bf7726c069a878b1e2a8e7371981d516048b84e03743e67bc2860405160405180910390a45050505050565b6040517f4f1ef286000000000000000000000000000000000000000000000000000000008152839073ffffffffffffffffffffffffffffffffffffffff821690634f1ef28690610ec090869086906004016117d1565b600060405180830381600087803b158015610eda57600080fd5b505af1158015610eee573d6000803e3d6000fd5b5050505050505050565b60008030604051610f089061114b565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015610f41573d6000803e3d6000fd5b506040517fd1f5789400000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff82169063d1f5789490610f9990879087906004016117d1565b600060405180830381600087803b158015610fb357600080fd5b505af1158015610fc7573d6000803e3d6000fd5b50929695505050505050565b60408051808201909152600281527f3636000000000000000000000000000000000000000000000000000000000000602082015260ff82111561104c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110439190611808565b60405180910390fd5b5081517fffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff1660309190911b179052565b60388161108a57600061108d565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffff1660ff9190911690911b1790915250565b603c816110cf5760006110d2565b60015b83517fffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffff1660ff9190911690911b1790915250565b603981611114576000611117565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff1660ff9190911690911b1790915250565b6109cb8061181c83390190565b73ffffffffffffffffffffffffffffffffffffffff8116811461117a57600080fd5b50565b6000806040838503121561119057600080fd5b823561119b81611158565b9150602083013567ffffffffffffffff8111156111b757600080fd5b830160c081860312156111c957600080fd5b809150509250929050565b600080604083850312156111e757600080fd5b82356111f281611158565b9150602083013567ffffffffffffffff81111561120e57600080fd5b830160e081860312156111c957600080fd5b6000806040838503121561123357600080fd5b823561123e81611158565b9150602083013567ffffffffffffffff81111561125a57600080fd5b83016101e081860312156111c957600080fd5b60006020828403121561127f57600080fd5b813561128a81611158565b9392505050565b6040516101e0810167ffffffffffffffff811182821017156112dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b6000602082840312156112f457600080fd5b6040516020810181811067ffffffffffffffff8211171561133e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529151825250919050565b80516fffffffffffffffffffffffffffffffff8116811461136b57600080fd5b919050565b805164ffffffffff8116811461136b57600080fd5b805161ffff8116811461136b57600080fd5b805161136b81611158565b60006101e082840312156113b557600080fd5b6113bd611291565b6113c784846112e2565b81526113d56020840161134b565b60208201526113e66040840161134b565b60408201526113f76060840161134b565b60608201526114086080840161134b565b608082015261141960a0840161134b565b60a082015261142a60c08401611370565b60c082015261143b60e08401611385565b60e082015261010061144e818501611397565b90820152610120611460848201611397565b90820152610140611472848201611397565b90820152610160611484848201611397565b9082015261018061149684820161134b565b908201526101a06114a884820161134b565b908201526101c06114ba84820161134b565b908201529392505050565b6000602082840312156114d757600080fd5b61128a83836112e2565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261151657600080fd5b83018035915067ffffffffffffffff82111561153157600080fd5b60200191503681900382131561154657600080fd5b9250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808d168352808c166020840152808b1660408401525088606083015260e060808301526115de60e08301888a61154d565b82810360a08401526115f181878961154d565b905082810360c084015261160681858761154d565b9d9c50505050505050505050505050565b600061010073ffffffffffffffffffffffffffffffffffffffff808f168452808e166020850152808d166040850152808c166060850152508960808401528060a0840152611668818401898b61154d565b905082810360c084015261167d81878961154d565b905082810360e084015261169281858761154d565b9e9d5050505050505050505050505050565b6000602082840312156116b657600080fd5b813560ff8116811461128a57600080fd5b600061010073ffffffffffffffffffffffffffffffffffffffff808f168452808e166020850152808d166040850152808c1660608501525060ff8a1660808401528060a0840152611668818401898b61154d565b600073ffffffffffffffffffffffffffffffffffffffff808d168352808c166020840152808b1660408401525060ff8916606083015260e060808301526115de60e08301888a61154d565b6000815180845260005b8181101561178c57602081850181015186830182015201611770565b8181111561179e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006118006040830184611766565b949350505050565b60208152600061128a602083018461176656fe60a060405234801561001057600080fd5b506040516109cb3803806109cb83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b60805161091d6100ae6000396000818161014f015281816101a101528181610274015281816104110152818161043a01526105a4015261091d6000f3fe60806040526004361061005a5760003560e01c80635c60da1b116100435780635c60da1b14610097578063d1f57894146100d5578063f851a440146100e85761005a565b80633659cfe6146100645780634f1ef28614610084575b6100626100fd565b005b34801561007057600080fd5b5061006261007f36600461067b565b610137565b61006261009236600461069d565b610189565b3480156100a357600080fd5b506100ac61025a565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100626100e336600461074f565b6102cb565b3480156100f457600080fd5b506100ac6103f7565b61010561045c565b6101356101307f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b610464565b565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156101815761017e81610488565b50565b61017e6100fd565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561024d576101d083610488565b60008373ffffffffffffffffffffffffffffffffffffffff1683836040516101f992919061082f565b600060405180830381855af49150503d8060008114610234576040519150601f19603f3d011682016040523d82523d6000602084013e610239565b606091505b505090508061024757600080fd5b50505050565b6102556100fd565b505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102c057507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6102c86100fd565b90565b60006102f57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff161461031557600080fd5b61034060017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61083f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc1461036e5761036e61087d565b610377826104d5565b8051156103f35760008273ffffffffffffffffffffffffffffffffffffffff16826040516103a591906108ac565b600060405180830381855af49150503d80600081146103e0576040519150601f19603f3d011682016040523d82523d6000602084013e6103e5565b606091505b505090508061025557600080fd5b5050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102c057507f000000000000000000000000000000000000000000000000000000000000000090565b61013561058c565b3660008037600080366000845af43d6000803e808015610483573d6000f35b3d6000fd5b610491816104d5565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b803b610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161415610135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e0000000000000000000000000000606482015260840161055f565b803573ffffffffffffffffffffffffffffffffffffffff8116811461067657600080fd5b919050565b60006020828403121561068d57600080fd5b61069682610652565b9392505050565b6000806000604084860312156106b257600080fd5b6106bb84610652565b9250602084013567ffffffffffffffff808211156106d857600080fd5b818601915086601f8301126106ec57600080fd5b8135818111156106fb57600080fd5b87602082850101111561070d57600080fd5b6020830194508093505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561076257600080fd5b61076b83610652565b9150602083013567ffffffffffffffff8082111561078857600080fd5b818501915085601f83011261079c57600080fd5b8135818111156107ae576107ae610720565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156107f4576107f4610720565b8160405282815288602084870101111561080d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b8183823760009101908152919050565b600082821015610878577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b818110156108cd57602081860181015185830152016108b3565b818111156108dc576000828501525b50919091019291505056fea2646970667358221220f9157fc154ba5797dbf9f1c996264175793cc650e7132a50aacd715276ed42a364736f6c634300080a0033a26469706673582212209dd78bf2e2a3b63f2d40c2f2b34aa63f0ae865b4629b326bd898a2dd4e253ddf64736f6c634300080a0033","opcodes":"PUSH2 0x221C PUSH2 0x3A PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x56 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xB0F09355 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0xB13C96A8 EQ PUSH2 0x7D JUMPI DUP1 PUSH4 0xDF59B8B2 EQ PUSH2 0x9D JUMPI DUP1 PUSH4 0xF5B50E70 EQ PUSH2 0xBD JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0x76 CALLDATASIZE PUSH1 0x4 PUSH2 0x117D JUMP JUMPDEST PUSH2 0xDD JUMP JUMPDEST STOP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0x98 CALLDATASIZE PUSH1 0x4 PUSH2 0x11D4 JUMP JUMPDEST PUSH2 0x439 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0xB8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1220 JUMP JUMPDEST PUSH2 0x6C6 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0xD8 CALLDATASIZE PUSH1 0x4 PUSH2 0x117D JUMP JUMPDEST PUSH2 0xBD3 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH4 0x35EA6A75 PUSH2 0x108 PUSH1 0x20 DUP6 ADD DUP6 PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x172 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x196 SWAP2 SWAP1 PUSH2 0x13A2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x285 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH4 0xC44B11F7 PUSH2 0x1C6 PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x253 SWAP2 SWAP1 PUSH2 0x14C5 JUMP JUMPDEST MLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP3 PUSH1 0x10 DUP4 SWAP1 SHR DUP3 AND SWAP3 PUSH1 0x20 DUP2 SWAP1 SHR DUP4 AND SWAP3 PUSH1 0xFF PUSH1 0x30 DUP4 SWAP1 SHR DUP2 AND SWAP4 PUSH1 0x40 DUP5 SWAP1 SHR SWAP1 SWAP3 AND SWAP3 PUSH1 0xA8 SHR AND SWAP1 JUMP JUMPDEST POP SWAP1 SWAP5 POP PUSH1 0x0 SWAP4 POP PUSH32 0xC222EC8A00000000000000000000000000000000000000000000000000000000 SWAP3 POP DUP8 SWAP2 POP PUSH2 0x2C2 SWAP1 POP PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST PUSH2 0x2D2 PUSH1 0x40 DUP9 ADD PUSH1 0x20 DUP10 ADD PUSH2 0x126D JUMP JUMPDEST DUP6 PUSH2 0x2E0 PUSH1 0x40 DUP11 ADD DUP11 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x2ED PUSH1 0x60 DUP13 ADD DUP13 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x2FA PUSH1 0xA0 DUP15 ADD DUP15 PUSH2 0x14E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x313 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1596 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 0x140 DUP5 ADD MLOAD SWAP1 SWAP2 POP PUSH2 0x3B3 SWAP1 PUSH2 0x3AD PUSH1 0xA0 DUP8 ADD PUSH1 0x80 DUP9 ADD PUSH2 0x126D JUMP JUMPDEST DUP4 PUSH2 0xE6A JUMP JUMPDEST PUSH2 0x3C3 PUSH1 0xA0 DUP6 ADD PUSH1 0x80 DUP7 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x140 DUP5 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP2 AND PUSH2 0x3F0 PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x9439658A562A5C46B1173589DF89CF001483D685BAD28AEDAFF4A88656292D81 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH4 0x35EA6A75 PUSH2 0x464 PUSH1 0x20 DUP6 ADD DUP6 PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4F2 SWAP2 SWAP1 PUSH2 0x13A2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x522 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH4 0xC44B11F7 PUSH2 0x1C6 PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST POP POP SWAP4 POP POP POP POP PUSH1 0x0 PUSH4 0x183FB413 PUSH1 0xE0 SHL DUP6 DUP6 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x547 SWAP2 SWAP1 PUSH2 0x126D JUMP JUMPDEST PUSH2 0x554 PUSH1 0x20 DUP9 ADD DUP9 PUSH2 0x126D JUMP JUMPDEST PUSH2 0x564 PUSH1 0x60 DUP10 ADD PUSH1 0x40 DUP11 ADD PUSH2 0x126D JUMP JUMPDEST DUP7 PUSH2 0x572 PUSH1 0x60 DUP12 ADD DUP12 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x57F PUSH1 0x80 DUP14 ADD DUP14 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x58C PUSH1 0xC0 DUP16 ADD DUP16 PUSH2 0x14E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x5A6 SWAP12 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1617 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 0x100 DUP5 ADD MLOAD SWAP1 SWAP2 POP PUSH2 0x640 SWAP1 PUSH2 0x3AD PUSH1 0xC0 DUP8 ADD PUSH1 0xA0 DUP9 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x650 PUSH1 0xC0 DUP6 ADD PUSH1 0xA0 DUP7 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x100 DUP5 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP2 AND PUSH2 0x67D PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xA76F65411EC66A7FB6BC467432EB14767900449AE4469FA295E4441FE5E1CB73 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x801 PUSH2 0x6D8 PUSH1 0x20 DUP5 ADD DUP5 PUSH2 0x126D JUMP JUMPDEST PUSH32 0x183FB41300000000000000000000000000000000000000000000000000000000 DUP6 PUSH2 0x70A PUSH1 0xE0 DUP8 ADD PUSH1 0xC0 DUP9 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x71A PUSH1 0xC0 DUP9 ADD PUSH1 0xA0 DUP10 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x72B PUSH2 0x100 DUP10 ADD PUSH1 0xE0 DUP11 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x73B PUSH1 0x80 DUP11 ADD PUSH1 0x60 DUP12 ADD PUSH2 0x16A4 JUMP JUMPDEST PUSH2 0x749 PUSH2 0x100 DUP12 ADD DUP12 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x757 PUSH2 0x120 DUP14 ADD DUP14 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x765 PUSH2 0x1C0 DUP16 ADD DUP16 PUSH2 0x14E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x77F SWAP12 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x16C7 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 0xEF8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x8AE PUSH2 0x818 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x126D JUMP JUMPDEST PUSH32 0xC222EC8A00000000000000000000000000000000000000000000000000000000 DUP7 PUSH2 0x84A PUSH1 0xC0 DUP9 ADD PUSH1 0xA0 DUP10 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x85B PUSH2 0x100 DUP10 ADD PUSH1 0xE0 DUP11 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x86B PUSH1 0x80 DUP11 ADD PUSH1 0x60 DUP12 ADD PUSH2 0x16A4 JUMP JUMPDEST PUSH2 0x879 PUSH2 0x180 DUP12 ADD DUP12 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x887 PUSH2 0x1A0 DUP14 ADD DUP14 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x895 PUSH2 0x1C0 DUP16 ADD DUP16 PUSH2 0x14E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x77F SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x171B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x945 PUSH2 0x8C5 PUSH1 0x60 DUP7 ADD PUSH1 0x40 DUP8 ADD PUSH2 0x126D JUMP JUMPDEST PUSH32 0xC222EC8A00000000000000000000000000000000000000000000000000000000 DUP8 PUSH2 0x8F7 PUSH1 0xC0 DUP10 ADD PUSH1 0xA0 DUP11 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x908 PUSH2 0x100 DUP11 ADD PUSH1 0xE0 DUP12 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x918 PUSH1 0x80 DUP12 ADD PUSH1 0x60 DUP13 ADD PUSH2 0x16A4 JUMP JUMPDEST PUSH2 0x926 PUSH2 0x140 DUP13 ADD DUP13 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x934 PUSH2 0x160 DUP15 ADD DUP15 PUSH2 0x14E1 JUMP JUMPDEST DUP15 DUP1 PUSH2 0x1C0 ADD SWAP1 PUSH2 0x895 SWAP2 SWAP1 PUSH2 0x14E1 JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH4 0x7A708E92 PUSH2 0x973 PUSH1 0xC0 DUP8 ADD PUSH1 0xA0 DUP9 ADD PUSH2 0x126D JUMP JUMPDEST DUP6 DUP6 DUP6 PUSH2 0x986 PUSH1 0xA0 DUP12 ADD PUSH1 0x80 DUP13 ADD PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xE0 DUP8 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP4 DUP6 AND PUSH1 0x24 DUP6 ADD MSTORE SWAP2 DUP5 AND PUSH1 0x44 DUP5 ADD MSTORE DUP4 AND PUSH1 0x64 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA1F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP2 POP PUSH2 0xA51 SWAP1 POP PUSH2 0xA47 PUSH1 0x80 DUP8 ADD PUSH1 0x60 DUP9 ADD PUSH2 0x16A4 JUMP JUMPDEST DUP3 SWAP1 PUSH1 0xFF AND PUSH2 0xFD3 JUMP JUMPDEST PUSH2 0xA5C DUP2 PUSH1 0x1 PUSH2 0x107C JUMP JUMPDEST PUSH2 0xA67 DUP2 PUSH1 0x0 PUSH2 0x10C1 JUMP JUMPDEST PUSH2 0xA72 DUP2 PUSH1 0x0 PUSH2 0x1106 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH4 0xF51E435B PUSH2 0xA9E PUSH1 0xC0 DUP9 ADD PUSH1 0xA0 DUP10 ADD PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB1F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 POP PUSH2 0xB4B PUSH1 0xC0 DUP8 ADD PUSH1 0xA0 DUP9 ADD PUSH2 0x126D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x3A0CA721FC364424566385A1AA271ED508CC2C0949C2272575FB3013A163A45F DUP6 DUP6 PUSH2 0xB94 PUSH1 0xA0 DUP12 ADD PUSH1 0x80 DUP13 ADD PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 DUP5 AND PUSH1 0x20 DUP5 ADD MSTORE SWAP3 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH4 0x35EA6A75 PUSH2 0xBFE PUSH1 0x20 DUP6 ADD DUP6 PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC68 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC8C SWAP2 SWAP1 PUSH2 0x13A2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xCBC PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH4 0xC44B11F7 PUSH2 0x1C6 PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST POP SWAP1 SWAP5 POP PUSH1 0x0 SWAP4 POP PUSH32 0xC222EC8A00000000000000000000000000000000000000000000000000000000 SWAP3 POP DUP8 SWAP2 POP PUSH2 0xCF9 SWAP1 POP PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST PUSH2 0xD09 PUSH1 0x40 DUP9 ADD PUSH1 0x20 DUP10 ADD PUSH2 0x126D JUMP JUMPDEST DUP6 PUSH2 0xD17 PUSH1 0x40 DUP11 ADD DUP11 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0xD24 PUSH1 0x60 DUP13 ADD DUP13 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0xD31 PUSH1 0xA0 DUP15 ADD DUP15 PUSH2 0x14E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xD4A SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1596 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 0x120 DUP5 ADD MLOAD SWAP1 SWAP2 POP PUSH2 0xDE4 SWAP1 PUSH2 0x3AD PUSH1 0xA0 DUP8 ADD PUSH1 0x80 DUP9 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0xDF4 PUSH1 0xA0 DUP6 ADD PUSH1 0x80 DUP7 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x120 DUP5 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP2 AND PUSH2 0xE21 PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x7A943A5B6C214BF7726C069A878B1E2A8E7371981D516048B84E03743E67BC28 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4F1EF28600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP4 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x4F1EF286 SWAP1 PUSH2 0xEC0 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x17D1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xEDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xEEE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 ADDRESS PUSH1 0x40 MLOAD PUSH2 0xF08 SWAP1 PUSH2 0x114B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0xF41 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0xD1F5789400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0xD1F57894 SWAP1 PUSH2 0xF99 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x17D1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xFB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xFC7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP SWAP3 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3636000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP3 GT ISZERO PUSH2 0x104C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1043 SWAP2 SWAP1 PUSH2 0x1808 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF AND PUSH1 0x30 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x38 DUP2 PUSH2 0x108A JUMPI PUSH1 0x0 PUSH2 0x108D JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x3C DUP2 PUSH2 0x10CF JUMPI PUSH1 0x0 PUSH2 0x10D2 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x39 DUP2 PUSH2 0x1114 JUMPI PUSH1 0x0 PUSH2 0x1117 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH2 0x9CB DUP1 PUSH2 0x181C DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x117A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1190 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x119B DUP2 PUSH2 0x1158 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x11B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0xC0 DUP2 DUP7 SUB SLT ISZERO PUSH2 0x11C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x11E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x11F2 DUP2 PUSH2 0x1158 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x120E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0xE0 DUP2 DUP7 SUB SLT ISZERO PUSH2 0x11C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x123E DUP2 PUSH2 0x1158 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x125A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH2 0x1E0 DUP2 DUP7 SUB SLT ISZERO PUSH2 0x11C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x127F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x128A DUP2 PUSH2 0x1158 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x12DC JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x12F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x133E JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x136B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x136B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x136B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x136B DUP2 PUSH2 0x1158 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x13B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x13BD PUSH2 0x1291 JUMP JUMPDEST PUSH2 0x13C7 DUP5 DUP5 PUSH2 0x12E2 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x13D5 PUSH1 0x20 DUP5 ADD PUSH2 0x134B JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x13E6 PUSH1 0x40 DUP5 ADD PUSH2 0x134B JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x13F7 PUSH1 0x60 DUP5 ADD PUSH2 0x134B JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x1408 PUSH1 0x80 DUP5 ADD PUSH2 0x134B JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x1419 PUSH1 0xA0 DUP5 ADD PUSH2 0x134B JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x142A PUSH1 0xC0 DUP5 ADD PUSH2 0x1370 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x143B PUSH1 0xE0 DUP5 ADD PUSH2 0x1385 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x144E DUP2 DUP6 ADD PUSH2 0x1397 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x1460 DUP5 DUP3 ADD PUSH2 0x1397 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x1472 DUP5 DUP3 ADD PUSH2 0x1397 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x1484 DUP5 DUP3 ADD PUSH2 0x1397 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x1496 DUP5 DUP3 ADD PUSH2 0x134B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x14A8 DUP5 DUP3 ADD PUSH2 0x134B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x14BA DUP5 DUP3 ADD PUSH2 0x134B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x14D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x128A DUP4 DUP4 PUSH2 0x12E2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x1516 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1531 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x1546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 ADD ADD MSTORE PUSH1 0x0 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP5 ADD ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 AND DUP4 MSTORE DUP1 DUP13 AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 DUP12 AND PUSH1 0x40 DUP5 ADD MSTORE POP DUP9 PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xE0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x15DE PUSH1 0xE0 DUP4 ADD DUP9 DUP11 PUSH2 0x154D JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x15F1 DUP2 DUP8 DUP10 PUSH2 0x154D JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x1606 DUP2 DUP6 DUP8 PUSH2 0x154D JUMP JUMPDEST SWAP14 SWAP13 POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP16 AND DUP5 MSTORE DUP1 DUP15 AND PUSH1 0x20 DUP6 ADD MSTORE DUP1 DUP14 AND PUSH1 0x40 DUP6 ADD MSTORE DUP1 DUP13 AND PUSH1 0x60 DUP6 ADD MSTORE POP DUP10 PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x1668 DUP2 DUP5 ADD DUP10 DUP12 PUSH2 0x154D JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x167D DUP2 DUP8 DUP10 PUSH2 0x154D JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x1692 DUP2 DUP6 DUP8 PUSH2 0x154D JUMP JUMPDEST SWAP15 SWAP14 POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x16B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x128A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x100 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP16 AND DUP5 MSTORE DUP1 DUP15 AND PUSH1 0x20 DUP6 ADD MSTORE DUP1 DUP14 AND PUSH1 0x40 DUP6 ADD MSTORE DUP1 DUP13 AND PUSH1 0x60 DUP6 ADD MSTORE POP PUSH1 0xFF DUP11 AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x1668 DUP2 DUP5 ADD DUP10 DUP12 PUSH2 0x154D JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 AND DUP4 MSTORE DUP1 DUP13 AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 DUP12 AND PUSH1 0x40 DUP5 ADD MSTORE POP PUSH1 0xFF DUP10 AND PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xE0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x15DE PUSH1 0xE0 DUP4 ADD DUP9 DUP11 PUSH2 0x154D JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x178C JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x1770 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x179E JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1800 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x1766 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x128A PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1766 JUMP INVALID PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x9CB CODESIZE SUB DUP1 PUSH2 0x9CB DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH2 0x70 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x91D PUSH2 0xAE PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x14F ADD MSTORE DUP2 DUP2 PUSH2 0x1A1 ADD MSTORE DUP2 DUP2 PUSH2 0x274 ADD MSTORE DUP2 DUP2 PUSH2 0x411 ADD MSTORE DUP2 DUP2 PUSH2 0x43A ADD MSTORE PUSH2 0x5A4 ADD MSTORE PUSH2 0x91D PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0xD1F57894 EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xE8 JUMPI PUSH2 0x5A JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x84 JUMPI JUMPDEST PUSH2 0x62 PUSH2 0xFD JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x62 PUSH2 0x7F CALLDATASIZE PUSH1 0x4 PUSH2 0x67B JUMP JUMPDEST PUSH2 0x137 JUMP JUMPDEST PUSH2 0x62 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x69D JUMP JUMPDEST PUSH2 0x189 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x25A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x62 PUSH2 0xE3 CALLDATASIZE PUSH1 0x4 PUSH2 0x74F JUMP JUMPDEST PUSH2 0x2CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x3F7 JUMP JUMPDEST PUSH2 0x105 PUSH2 0x45C JUMP JUMPDEST PUSH2 0x135 PUSH2 0x130 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x464 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x181 JUMPI PUSH2 0x17E DUP2 PUSH2 0x488 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x17E PUSH2 0xFD JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x24D JUMPI PUSH2 0x1D0 DUP4 PUSH2 0x488 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1F9 SWAP3 SWAP2 SWAP1 PUSH2 0x82F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x234 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 0x239 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x247 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x255 PUSH2 0xFD JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x2C0 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0xFD JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F5 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x315 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x340 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0x83F JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC EQ PUSH2 0x36E JUMPI PUSH2 0x36E PUSH2 0x87D JUMP JUMPDEST PUSH2 0x377 DUP3 PUSH2 0x4D5 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x3F3 JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x3A5 SWAP2 SWAP1 PUSH2 0x8AC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3E0 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 0x3E5 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x2C0 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x135 PUSH2 0x58C JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x483 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x491 DUP2 PUSH2 0x4D5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x568 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x135 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x55F JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x676 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x68D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x696 DUP3 PUSH2 0x652 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x6B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6BB DUP5 PUSH2 0x652 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x6D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x6EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x6FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x762 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x76B DUP4 PUSH2 0x652 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x788 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x79C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x7AE JUMPI PUSH2 0x7AE PUSH2 0x720 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x7F4 JUMPI PUSH2 0x7F4 PUSH2 0x720 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x80D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x878 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x8CD JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x8B3 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x8DC JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF9 ISZERO PUSH32 0xC154BA5797DBF9F1C996264175793CC650E7132A50AACD715276ED42A364736F PUSH13 0x634300080A0033A26469706673 PC 0x22 SLT KECCAK256 SWAP14 0xD7 DUP12 CALLCODE 0xE2 LOG3 0xB6 EXTCODEHASH 0x2D BLOCKHASH 0xC2 CALLCODE 0xB3 0x4A 0xA6 EXTCODEHASH EXP 0xE8 PUSH6 0xB4629B326BD8 SWAP9 LOG2 0xDD 0x4E 0x25 RETURNDATASIZE 0xDF PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"786:7674:78:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;786:7674:78;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_initTokenWithProxy_14380":{"entryPoint":3832,"id":14380,"parameterSlots":2,"returnSlots":1},"@_upgradeTokenImplementation_14408":{"entryPoint":3690,"id":14408,"parameterSlots":3,"returnSlots":0},"@executeInitReserve_14133":{"entryPoint":1734,"id":14133,"parameterSlots":2,"returnSlots":0},"@executeUpdateAToken_14205":{"entryPoint":1081,"id":14205,"parameterSlots":2,"returnSlots":0},"@executeUpdateStableDebtToken_14275":{"entryPoint":3027,"id":14275,"parameterSlots":2,"returnSlots":0},"@executeUpdateVariableDebtToken_14345":{"entryPoint":221,"id":14345,"parameterSlots":2,"returnSlots":0},"@getParams_11823":{"entryPoint":null,"id":11823,"parameterSlots":1,"returnSlots":6},"@setActive_10964":{"entryPoint":4220,"id":10964,"parameterSlots":2,"returnSlots":0},"@setDecimals_10914":{"entryPoint":4051,"id":10914,"parameterSlots":2,"returnSlots":0},"@setFrozen_11014":{"entryPoint":4358,"id":11014,"parameterSlots":2,"returnSlots":0},"@setPaused_11064":{"entryPoint":4289,"id":11064,"parameterSlots":2,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":5015,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_ReserveConfigurationMap_fromMemory":{"entryPoint":4834,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":4717,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$4860t_struct$_InitReserveInput_$21252_calldata_ptr":{"entryPoint":4640,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_contract$_IPool_$4860t_struct$_UpdateATokenInput_$21267_calldata_ptr":{"entryPoint":4564,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_contract$_IPool_$4860t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr":{"entryPoint":4477,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_fromMemory":{"entryPoint":5317,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory":{"entryPoint":5026,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint8":{"entryPoint":5796,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint128_fromMemory":{"entryPoint":4939,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint16_fromMemory":{"entryPoint":4997,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint40_fromMemory":{"entryPoint":4976,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_bytes":{"entryPoint":5990,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string_calldata":{"entryPoint":5453,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":6097,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_struct$_ReserveConfigurationMap_$21318_memory_ptr__to_t_address_t_struct$_ReserveConfigurationMap_$21318_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$4860_t_address_t_address_t_address_t_uint256_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_address_t_address_t_uint256_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":5655,"id":null,"parameterSlots":12,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$4860_t_address_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":5831,"id":null,"parameterSlots":12,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$4860_t_address_t_address_t_uint256_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_address_t_uint256_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":5526,"id":null,"parameterSlots":11,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$4860_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":5915,"id":null,"parameterSlots":11,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":6152,"id":null,"parameterSlots":2,"returnSlots":1},"access_calldata_tail_t_bytes_calldata_ptr":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":2},"access_calldata_tail_t_string_calldata_ptr":{"entryPoint":5345,"id":null,"parameterSlots":2,"returnSlots":2},"allocate_memory":{"entryPoint":4753,"id":null,"parameterSlots":0,"returnSlots":1},"validator_revert_contract_IPool":{"entryPoint":4440,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:14525:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"66:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"153:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"162:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"165:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"155:6:201"},"nodeType":"YulFunctionCall","src":"155:12:201"},"nodeType":"YulExpressionStatement","src":"155:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"89:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"100:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"107:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"96:3:201"},"nodeType":"YulFunctionCall","src":"96:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"86:2:201"},"nodeType":"YulFunctionCall","src":"86:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"79:6:201"},"nodeType":"YulFunctionCall","src":"79:73:201"},"nodeType":"YulIf","src":"76:93:201"}]},"name":"validator_revert_contract_IPool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"55:5:201","type":""}],"src":"14:161:201"},{"body":{"nodeType":"YulBlock","src":"322:415:201","statements":[{"body":{"nodeType":"YulBlock","src":"368:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"377:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"380:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"370:6:201"},"nodeType":"YulFunctionCall","src":"370:12:201"},"nodeType":"YulExpressionStatement","src":"370:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"343:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"352:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"339:3:201"},"nodeType":"YulFunctionCall","src":"339:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"364:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"335:3:201"},"nodeType":"YulFunctionCall","src":"335:32:201"},"nodeType":"YulIf","src":"332:52:201"},{"nodeType":"YulVariableDeclaration","src":"393:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"419:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"406:12:201"},"nodeType":"YulFunctionCall","src":"406:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"397:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"470:5:201"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"438:31:201"},"nodeType":"YulFunctionCall","src":"438:38:201"},"nodeType":"YulExpressionStatement","src":"438:38:201"},{"nodeType":"YulAssignment","src":"485:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"495:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"485:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"509:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"540:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"551:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"536:3:201"},"nodeType":"YulFunctionCall","src":"536:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"523:12:201"},"nodeType":"YulFunctionCall","src":"523:32:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"513:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"598:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"607:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"610:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"600:6:201"},"nodeType":"YulFunctionCall","src":"600:12:201"},"nodeType":"YulExpressionStatement","src":"600:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"570:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"578:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"567:2:201"},"nodeType":"YulFunctionCall","src":"567:30:201"},"nodeType":"YulIf","src":"564:50:201"},{"nodeType":"YulVariableDeclaration","src":"623:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"637:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"648:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"633:3:201"},"nodeType":"YulFunctionCall","src":"633:22:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"627:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"694:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"703:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"706:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"696:6:201"},"nodeType":"YulFunctionCall","src":"696:12:201"},"nodeType":"YulExpressionStatement","src":"696:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"675:7:201"},{"name":"_1","nodeType":"YulIdentifier","src":"684:2:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"671:3:201"},"nodeType":"YulFunctionCall","src":"671:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"689:3:201","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"667:3:201"},"nodeType":"YulFunctionCall","src":"667:26:201"},"nodeType":"YulIf","src":"664:46:201"},{"nodeType":"YulAssignment","src":"719:12:201","value":{"name":"_1","nodeType":"YulIdentifier","src":"729:2:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"719:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$4860t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"280:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"291:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"303:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"311:6:201","type":""}],"src":"180:557:201"},{"body":{"nodeType":"YulBlock","src":"881:415:201","statements":[{"body":{"nodeType":"YulBlock","src":"927:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"936:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"939:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"929:6:201"},"nodeType":"YulFunctionCall","src":"929:12:201"},"nodeType":"YulExpressionStatement","src":"929:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"902:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"911:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"898:3:201"},"nodeType":"YulFunctionCall","src":"898:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"923:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"894:3:201"},"nodeType":"YulFunctionCall","src":"894:32:201"},"nodeType":"YulIf","src":"891:52:201"},{"nodeType":"YulVariableDeclaration","src":"952:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"978:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"965:12:201"},"nodeType":"YulFunctionCall","src":"965:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"956:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1029:5:201"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"997:31:201"},"nodeType":"YulFunctionCall","src":"997:38:201"},"nodeType":"YulExpressionStatement","src":"997:38:201"},{"nodeType":"YulAssignment","src":"1044:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1054:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1044:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1068:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1099:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1110:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1095:3:201"},"nodeType":"YulFunctionCall","src":"1095:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1082:12:201"},"nodeType":"YulFunctionCall","src":"1082:32:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1072:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1157:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1166:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1169:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1159:6:201"},"nodeType":"YulFunctionCall","src":"1159:12:201"},"nodeType":"YulExpressionStatement","src":"1159:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1129:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1137:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1126:2:201"},"nodeType":"YulFunctionCall","src":"1126:30:201"},"nodeType":"YulIf","src":"1123:50:201"},{"nodeType":"YulVariableDeclaration","src":"1182:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1196:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"1207:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1192:3:201"},"nodeType":"YulFunctionCall","src":"1192:22:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1186:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1253:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1262:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1265:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1255:6:201"},"nodeType":"YulFunctionCall","src":"1255:12:201"},"nodeType":"YulExpressionStatement","src":"1255:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1234:7:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1243:2:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1230:3:201"},"nodeType":"YulFunctionCall","src":"1230:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"1248:3:201","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1226:3:201"},"nodeType":"YulFunctionCall","src":"1226:26:201"},"nodeType":"YulIf","src":"1223:46:201"},{"nodeType":"YulAssignment","src":"1278:12:201","value":{"name":"_1","nodeType":"YulIdentifier","src":"1288:2:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1278:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$4860t_struct$_UpdateATokenInput_$21267_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"839:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"850:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"862:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"870:6:201","type":""}],"src":"742:554:201"},{"body":{"nodeType":"YulBlock","src":"1439:415:201","statements":[{"body":{"nodeType":"YulBlock","src":"1485:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1494:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1497:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1487:6:201"},"nodeType":"YulFunctionCall","src":"1487:12:201"},"nodeType":"YulExpressionStatement","src":"1487:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1460:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1469:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1456:3:201"},"nodeType":"YulFunctionCall","src":"1456:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1481:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1452:3:201"},"nodeType":"YulFunctionCall","src":"1452:32:201"},"nodeType":"YulIf","src":"1449:52:201"},{"nodeType":"YulVariableDeclaration","src":"1510:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1536:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1523:12:201"},"nodeType":"YulFunctionCall","src":"1523:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1514:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1587:5:201"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"1555:31:201"},"nodeType":"YulFunctionCall","src":"1555:38:201"},"nodeType":"YulExpressionStatement","src":"1555:38:201"},{"nodeType":"YulAssignment","src":"1602:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1612:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1602:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1626:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1657:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1668:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1653:3:201"},"nodeType":"YulFunctionCall","src":"1653:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1640:12:201"},"nodeType":"YulFunctionCall","src":"1640:32:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1630:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1715:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1724:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1727:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1717:6:201"},"nodeType":"YulFunctionCall","src":"1717:12:201"},"nodeType":"YulExpressionStatement","src":"1717:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1687:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1695:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1684:2:201"},"nodeType":"YulFunctionCall","src":"1684:30:201"},"nodeType":"YulIf","src":"1681:50:201"},{"nodeType":"YulVariableDeclaration","src":"1740:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1754:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"1765:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1750:3:201"},"nodeType":"YulFunctionCall","src":"1750:22:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1744:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1811:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1820:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1823:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1813:6:201"},"nodeType":"YulFunctionCall","src":"1813:12:201"},"nodeType":"YulExpressionStatement","src":"1813:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1792:7:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1801:2:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1788:3:201"},"nodeType":"YulFunctionCall","src":"1788:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"1806:3:201","type":"","value":"480"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1784:3:201"},"nodeType":"YulFunctionCall","src":"1784:26:201"},"nodeType":"YulIf","src":"1781:46:201"},{"nodeType":"YulAssignment","src":"1836:12:201","value":{"name":"_1","nodeType":"YulIdentifier","src":"1846:2:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1836:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$4860t_struct$_InitReserveInput_$21252_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1397:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1408:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1420:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1428:6:201","type":""}],"src":"1301:553:201"},{"body":{"nodeType":"YulBlock","src":"1929:184:201","statements":[{"body":{"nodeType":"YulBlock","src":"1975:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1984:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1987:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1977:6:201"},"nodeType":"YulFunctionCall","src":"1977:12:201"},"nodeType":"YulExpressionStatement","src":"1977:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1950:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1959:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1946:3:201"},"nodeType":"YulFunctionCall","src":"1946:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1971:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1942:3:201"},"nodeType":"YulFunctionCall","src":"1942:32:201"},"nodeType":"YulIf","src":"1939:52:201"},{"nodeType":"YulVariableDeclaration","src":"2000:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2026:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2013:12:201"},"nodeType":"YulFunctionCall","src":"2013:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2004:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2077:5:201"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"2045:31:201"},"nodeType":"YulFunctionCall","src":"2045:38:201"},"nodeType":"YulExpressionStatement","src":"2045:38:201"},{"nodeType":"YulAssignment","src":"2092:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"2102:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2092:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1895:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1906:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1918:6:201","type":""}],"src":"1859:254:201"},{"body":{"nodeType":"YulBlock","src":"2219:125:201","statements":[{"nodeType":"YulAssignment","src":"2229:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2241:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2252:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2237:3:201"},"nodeType":"YulFunctionCall","src":"2237:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2229:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2271:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2286:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2294:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2282:3:201"},"nodeType":"YulFunctionCall","src":"2282:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2264:6:201"},"nodeType":"YulFunctionCall","src":"2264:74:201"},"nodeType":"YulExpressionStatement","src":"2264:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2188:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2199:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2210:4:201","type":""}],"src":"2118:226:201"},{"body":{"nodeType":"YulBlock","src":"2390:360:201","statements":[{"nodeType":"YulAssignment","src":"2400:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2416:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2410:5:201"},"nodeType":"YulFunctionCall","src":"2410:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2400:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2428:34:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2450:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2458:3:201","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2446:3:201"},"nodeType":"YulFunctionCall","src":"2446:16:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"2432:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2545:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2566:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2569:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2559:6:201"},"nodeType":"YulFunctionCall","src":"2559:88:201"},"nodeType":"YulExpressionStatement","src":"2559:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2667:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2670:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2660:6:201"},"nodeType":"YulFunctionCall","src":"2660:15:201"},"nodeType":"YulExpressionStatement","src":"2660:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2695:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2698:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2688:6:201"},"nodeType":"YulFunctionCall","src":"2688:15:201"},"nodeType":"YulExpressionStatement","src":"2688:15:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2480:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"2492:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2477:2:201"},"nodeType":"YulFunctionCall","src":"2477:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2516:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"2528:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2513:2:201"},"nodeType":"YulFunctionCall","src":"2513:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2474:2:201"},"nodeType":"YulFunctionCall","src":"2474:62:201"},"nodeType":"YulIf","src":"2471:242:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2729:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"2733:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2722:6:201"},"nodeType":"YulFunctionCall","src":"2722:22:201"},"nodeType":"YulExpressionStatement","src":"2722:22:201"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"2379:6:201","type":""}],"src":"2349:401:201"},{"body":{"nodeType":"YulBlock","src":"2846:489:201","statements":[{"body":{"nodeType":"YulBlock","src":"2890:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2899:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2902:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2892:6:201"},"nodeType":"YulFunctionCall","src":"2892:12:201"},"nodeType":"YulExpressionStatement","src":"2892:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"2867:3:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2872:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2863:3:201"},"nodeType":"YulFunctionCall","src":"2863:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"2884:4:201","type":"","value":"0x20"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2859:3:201"},"nodeType":"YulFunctionCall","src":"2859:30:201"},"nodeType":"YulIf","src":"2856:50:201"},{"nodeType":"YulVariableDeclaration","src":"2915:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2935:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2929:5:201"},"nodeType":"YulFunctionCall","src":"2929:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"2919:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2947:35:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"2969:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2977:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2965:3:201"},"nodeType":"YulFunctionCall","src":"2965:17:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"2951:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3065:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3086:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3089:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3079:6:201"},"nodeType":"YulFunctionCall","src":"3079:88:201"},"nodeType":"YulExpressionStatement","src":"3079:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3187:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3190:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3180:6:201"},"nodeType":"YulFunctionCall","src":"3180:15:201"},"nodeType":"YulExpressionStatement","src":"3180:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3215:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3218:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3208:6:201"},"nodeType":"YulFunctionCall","src":"3208:15:201"},"nodeType":"YulExpressionStatement","src":"3208:15:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3000:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"3012:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2997:2:201"},"nodeType":"YulFunctionCall","src":"2997:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3036:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"3048:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3033:2:201"},"nodeType":"YulFunctionCall","src":"3033:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2994:2:201"},"nodeType":"YulFunctionCall","src":"2994:62:201"},"nodeType":"YulIf","src":"2991:242:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3249:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"3253:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3242:6:201"},"nodeType":"YulFunctionCall","src":"3242:22:201"},"nodeType":"YulExpressionStatement","src":"3242:22:201"},{"nodeType":"YulAssignment","src":"3273:15:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"3282:6:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"3273:5:201"}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"3304:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3318:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3312:5:201"},"nodeType":"YulFunctionCall","src":"3312:16:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3297:6:201"},"nodeType":"YulFunctionCall","src":"3297:32:201"},"nodeType":"YulExpressionStatement","src":"3297:32:201"}]},"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2817:9:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"2828:3:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"2836:5:201","type":""}],"src":"2755:580:201"},{"body":{"nodeType":"YulBlock","src":"3400:132:201","statements":[{"nodeType":"YulAssignment","src":"3410:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3425:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3419:5:201"},"nodeType":"YulFunctionCall","src":"3419:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"3410:5:201"}]},{"body":{"nodeType":"YulBlock","src":"3510:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3519:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3522:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3512:6:201"},"nodeType":"YulFunctionCall","src":"3512:12:201"},"nodeType":"YulExpressionStatement","src":"3512:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3454:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3465:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"3472:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3461:3:201"},"nodeType":"YulFunctionCall","src":"3461:46:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3451:2:201"},"nodeType":"YulFunctionCall","src":"3451:57:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3444:6:201"},"nodeType":"YulFunctionCall","src":"3444:65:201"},"nodeType":"YulIf","src":"3441:85:201"}]},"name":"abi_decode_uint128_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3379:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"3390:5:201","type":""}],"src":"3340:192:201"},{"body":{"nodeType":"YulBlock","src":"3596:110:201","statements":[{"nodeType":"YulAssignment","src":"3606:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3621:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3615:5:201"},"nodeType":"YulFunctionCall","src":"3615:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"3606:5:201"}]},{"body":{"nodeType":"YulBlock","src":"3684:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3693:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3696:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3686:6:201"},"nodeType":"YulFunctionCall","src":"3686:12:201"},"nodeType":"YulExpressionStatement","src":"3686:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3650:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3661:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"3668:12:201","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3657:3:201"},"nodeType":"YulFunctionCall","src":"3657:24:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3647:2:201"},"nodeType":"YulFunctionCall","src":"3647:35:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3640:6:201"},"nodeType":"YulFunctionCall","src":"3640:43:201"},"nodeType":"YulIf","src":"3637:63:201"}]},"name":"abi_decode_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3575:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"3586:5:201","type":""}],"src":"3537:169:201"},{"body":{"nodeType":"YulBlock","src":"3770:104:201","statements":[{"nodeType":"YulAssignment","src":"3780:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3795:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3789:5:201"},"nodeType":"YulFunctionCall","src":"3789:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"3780:5:201"}]},{"body":{"nodeType":"YulBlock","src":"3852:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3861:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3864:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3854:6:201"},"nodeType":"YulFunctionCall","src":"3854:12:201"},"nodeType":"YulExpressionStatement","src":"3854:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3824:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3835:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"3842:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3831:3:201"},"nodeType":"YulFunctionCall","src":"3831:18:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3821:2:201"},"nodeType":"YulFunctionCall","src":"3821:29:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3814:6:201"},"nodeType":"YulFunctionCall","src":"3814:37:201"},"nodeType":"YulIf","src":"3811:57:201"}]},"name":"abi_decode_uint16_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3749:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"3760:5:201","type":""}],"src":"3711:163:201"},{"body":{"nodeType":"YulBlock","src":"3939:85:201","statements":[{"nodeType":"YulAssignment","src":"3949:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3964:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3958:5:201"},"nodeType":"YulFunctionCall","src":"3958:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"3949:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4012:5:201"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"3980:31:201"},"nodeType":"YulFunctionCall","src":"3980:38:201"},"nodeType":"YulExpressionStatement","src":"3980:38:201"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3918:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"3929:5:201","type":""}],"src":"3879:145:201"},{"body":{"nodeType":"YulBlock","src":"4140:1536:201","statements":[{"body":{"nodeType":"YulBlock","src":"4187:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4196:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4199:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4189:6:201"},"nodeType":"YulFunctionCall","src":"4189:12:201"},"nodeType":"YulExpressionStatement","src":"4189:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4161:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4170:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4157:3:201"},"nodeType":"YulFunctionCall","src":"4157:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4182:3:201","type":"","value":"480"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4153:3:201"},"nodeType":"YulFunctionCall","src":"4153:33:201"},"nodeType":"YulIf","src":"4150:53:201"},{"nodeType":"YulVariableDeclaration","src":"4212:30:201","value":{"arguments":[],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"4225:15:201"},"nodeType":"YulFunctionCall","src":"4225:17:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4216:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4258:5:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4318:9:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4329:7:201"}],"functionName":{"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulIdentifier","src":"4265:52:201"},"nodeType":"YulFunctionCall","src":"4265:72:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4251:6:201"},"nodeType":"YulFunctionCall","src":"4251:87:201"},"nodeType":"YulExpressionStatement","src":"4251:87:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4358:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"4365:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4354:3:201"},"nodeType":"YulFunctionCall","src":"4354:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4404:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4415:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4400:3:201"},"nodeType":"YulFunctionCall","src":"4400:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"4370:29:201"},"nodeType":"YulFunctionCall","src":"4370:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4347:6:201"},"nodeType":"YulFunctionCall","src":"4347:73:201"},"nodeType":"YulExpressionStatement","src":"4347:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4440:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"4447:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4436:3:201"},"nodeType":"YulFunctionCall","src":"4436:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4486:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4497:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4482:3:201"},"nodeType":"YulFunctionCall","src":"4482:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"4452:29:201"},"nodeType":"YulFunctionCall","src":"4452:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4429:6:201"},"nodeType":"YulFunctionCall","src":"4429:73:201"},"nodeType":"YulExpressionStatement","src":"4429:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4522:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"4529:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4518:3:201"},"nodeType":"YulFunctionCall","src":"4518:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4568:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4579:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4564:3:201"},"nodeType":"YulFunctionCall","src":"4564:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"4534:29:201"},"nodeType":"YulFunctionCall","src":"4534:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4511:6:201"},"nodeType":"YulFunctionCall","src":"4511:73:201"},"nodeType":"YulExpressionStatement","src":"4511:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4604:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"4611:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4600:3:201"},"nodeType":"YulFunctionCall","src":"4600:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4651:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4662:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4647:3:201"},"nodeType":"YulFunctionCall","src":"4647:19:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"4617:29:201"},"nodeType":"YulFunctionCall","src":"4617:50:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4593:6:201"},"nodeType":"YulFunctionCall","src":"4593:75:201"},"nodeType":"YulExpressionStatement","src":"4593:75:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4688:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"4695:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4684:3:201"},"nodeType":"YulFunctionCall","src":"4684:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4735:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4746:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4731:3:201"},"nodeType":"YulFunctionCall","src":"4731:19:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"4701:29:201"},"nodeType":"YulFunctionCall","src":"4701:50:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4677:6:201"},"nodeType":"YulFunctionCall","src":"4677:75:201"},"nodeType":"YulExpressionStatement","src":"4677:75:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4772:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"4779:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4768:3:201"},"nodeType":"YulFunctionCall","src":"4768:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4818:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4829:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4814:3:201"},"nodeType":"YulFunctionCall","src":"4814:19:201"}],"functionName":{"name":"abi_decode_uint40_fromMemory","nodeType":"YulIdentifier","src":"4785:28:201"},"nodeType":"YulFunctionCall","src":"4785:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4761:6:201"},"nodeType":"YulFunctionCall","src":"4761:74:201"},"nodeType":"YulExpressionStatement","src":"4761:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4855:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"4862:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4851:3:201"},"nodeType":"YulFunctionCall","src":"4851:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4901:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4912:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4897:3:201"},"nodeType":"YulFunctionCall","src":"4897:19:201"}],"functionName":{"name":"abi_decode_uint16_fromMemory","nodeType":"YulIdentifier","src":"4868:28:201"},"nodeType":"YulFunctionCall","src":"4868:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4844:6:201"},"nodeType":"YulFunctionCall","src":"4844:74:201"},"nodeType":"YulExpressionStatement","src":"4844:74:201"},{"nodeType":"YulVariableDeclaration","src":"4927:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"4937:3:201","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4931:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4960:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4967:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4956:3:201"},"nodeType":"YulFunctionCall","src":"4956:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5006:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5017:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5002:3:201"},"nodeType":"YulFunctionCall","src":"5002:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"4972:29:201"},"nodeType":"YulFunctionCall","src":"4972:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4949:6:201"},"nodeType":"YulFunctionCall","src":"4949:73:201"},"nodeType":"YulExpressionStatement","src":"4949:73:201"},{"nodeType":"YulVariableDeclaration","src":"5031:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5041:3:201","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"5035:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5064:5:201"},{"name":"_2","nodeType":"YulIdentifier","src":"5071:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5060:3:201"},"nodeType":"YulFunctionCall","src":"5060:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5110:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"5121:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5106:3:201"},"nodeType":"YulFunctionCall","src":"5106:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"5076:29:201"},"nodeType":"YulFunctionCall","src":"5076:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5053:6:201"},"nodeType":"YulFunctionCall","src":"5053:73:201"},"nodeType":"YulExpressionStatement","src":"5053:73:201"},{"nodeType":"YulVariableDeclaration","src":"5135:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5145:3:201","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"5139:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5168:5:201"},{"name":"_3","nodeType":"YulIdentifier","src":"5175:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5164:3:201"},"nodeType":"YulFunctionCall","src":"5164:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5214:9:201"},{"name":"_3","nodeType":"YulIdentifier","src":"5225:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5210:3:201"},"nodeType":"YulFunctionCall","src":"5210:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"5180:29:201"},"nodeType":"YulFunctionCall","src":"5180:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5157:6:201"},"nodeType":"YulFunctionCall","src":"5157:73:201"},"nodeType":"YulExpressionStatement","src":"5157:73:201"},{"nodeType":"YulVariableDeclaration","src":"5239:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5249:3:201","type":"","value":"352"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"5243:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5272:5:201"},{"name":"_4","nodeType":"YulIdentifier","src":"5279:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5268:3:201"},"nodeType":"YulFunctionCall","src":"5268:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5318:9:201"},{"name":"_4","nodeType":"YulIdentifier","src":"5329:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5314:3:201"},"nodeType":"YulFunctionCall","src":"5314:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"5284:29:201"},"nodeType":"YulFunctionCall","src":"5284:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5261:6:201"},"nodeType":"YulFunctionCall","src":"5261:73:201"},"nodeType":"YulExpressionStatement","src":"5261:73:201"},{"nodeType":"YulVariableDeclaration","src":"5343:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5353:3:201","type":"","value":"384"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"5347:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5376:5:201"},{"name":"_5","nodeType":"YulIdentifier","src":"5383:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5372:3:201"},"nodeType":"YulFunctionCall","src":"5372:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5422:9:201"},{"name":"_5","nodeType":"YulIdentifier","src":"5433:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5418:3:201"},"nodeType":"YulFunctionCall","src":"5418:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"5388:29:201"},"nodeType":"YulFunctionCall","src":"5388:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5365:6:201"},"nodeType":"YulFunctionCall","src":"5365:73:201"},"nodeType":"YulExpressionStatement","src":"5365:73:201"},{"nodeType":"YulVariableDeclaration","src":"5447:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5457:3:201","type":"","value":"416"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"5451:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5480:5:201"},{"name":"_6","nodeType":"YulIdentifier","src":"5487:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5476:3:201"},"nodeType":"YulFunctionCall","src":"5476:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5526:9:201"},{"name":"_6","nodeType":"YulIdentifier","src":"5537:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5522:3:201"},"nodeType":"YulFunctionCall","src":"5522:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"5492:29:201"},"nodeType":"YulFunctionCall","src":"5492:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5469:6:201"},"nodeType":"YulFunctionCall","src":"5469:73:201"},"nodeType":"YulExpressionStatement","src":"5469:73:201"},{"nodeType":"YulVariableDeclaration","src":"5551:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5561:3:201","type":"","value":"448"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"5555:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5584:5:201"},{"name":"_7","nodeType":"YulIdentifier","src":"5591:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5580:3:201"},"nodeType":"YulFunctionCall","src":"5580:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5630:9:201"},{"name":"_7","nodeType":"YulIdentifier","src":"5641:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5626:3:201"},"nodeType":"YulFunctionCall","src":"5626:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"5596:29:201"},"nodeType":"YulFunctionCall","src":"5596:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5573:6:201"},"nodeType":"YulFunctionCall","src":"5573:73:201"},"nodeType":"YulExpressionStatement","src":"5573:73:201"},{"nodeType":"YulAssignment","src":"5655:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"5665:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5655:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4106:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4117:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4129:6:201","type":""}],"src":"4029:1647:201"},{"body":{"nodeType":"YulBlock","src":"5804:159:201","statements":[{"body":{"nodeType":"YulBlock","src":"5850:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5859:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5862:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5852:6:201"},"nodeType":"YulFunctionCall","src":"5852:12:201"},"nodeType":"YulExpressionStatement","src":"5852:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5825:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"5834:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5821:3:201"},"nodeType":"YulFunctionCall","src":"5821:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"5846:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5817:3:201"},"nodeType":"YulFunctionCall","src":"5817:32:201"},"nodeType":"YulIf","src":"5814:52:201"},{"nodeType":"YulAssignment","src":"5875:82:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5938:9:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5949:7:201"}],"functionName":{"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulIdentifier","src":"5885:52:201"},"nodeType":"YulFunctionCall","src":"5885:72:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5875:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5770:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5781:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5793:6:201","type":""}],"src":"5681:282:201"},{"body":{"nodeType":"YulBlock","src":"6063:486:201","statements":[{"nodeType":"YulVariableDeclaration","src":"6073:51:201","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"6112:11:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6099:12:201"},"nodeType":"YulFunctionCall","src":"6099:25:201"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"6077:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"6272:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6281:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6284:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6274:6:201"},"nodeType":"YulFunctionCall","src":"6274:12:201"},"nodeType":"YulExpressionStatement","src":"6274:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"6147:18:201"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"6175:12:201"},"nodeType":"YulFunctionCall","src":"6175:14:201"},{"name":"base_ref","nodeType":"YulIdentifier","src":"6191:8:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6171:3:201"},"nodeType":"YulFunctionCall","src":"6171:29:201"},{"kind":"number","nodeType":"YulLiteral","src":"6202:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6167:3:201"},"nodeType":"YulFunctionCall","src":"6167:102:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6143:3:201"},"nodeType":"YulFunctionCall","src":"6143:127:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6136:6:201"},"nodeType":"YulFunctionCall","src":"6136:135:201"},"nodeType":"YulIf","src":"6133:155:201"},{"nodeType":"YulVariableDeclaration","src":"6297:47:201","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"6315:8:201"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"6325:18:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6311:3:201"},"nodeType":"YulFunctionCall","src":"6311:33:201"},"variables":[{"name":"addr_1","nodeType":"YulTypedName","src":"6301:6:201","type":""}]},{"nodeType":"YulAssignment","src":"6353:30:201","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"6376:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6363:12:201"},"nodeType":"YulFunctionCall","src":"6363:20:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"6353:6:201"}]},{"body":{"nodeType":"YulBlock","src":"6426:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6435:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6438:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6428:6:201"},"nodeType":"YulFunctionCall","src":"6428:12:201"},"nodeType":"YulExpressionStatement","src":"6428:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"6398:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"6406:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6395:2:201"},"nodeType":"YulFunctionCall","src":"6395:30:201"},"nodeType":"YulIf","src":"6392:50:201"},{"nodeType":"YulAssignment","src":"6451:25:201","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"6463:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"6471:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6459:3:201"},"nodeType":"YulFunctionCall","src":"6459:17:201"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"6451:4:201"}]},{"body":{"nodeType":"YulBlock","src":"6527:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6536:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6539:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6529:6:201"},"nodeType":"YulFunctionCall","src":"6529:12:201"},"nodeType":"YulExpressionStatement","src":"6529:12:201"}]},"condition":{"arguments":[{"name":"addr","nodeType":"YulIdentifier","src":"6492:4:201"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"6502:12:201"},"nodeType":"YulFunctionCall","src":"6502:14:201"},{"name":"length","nodeType":"YulIdentifier","src":"6518:6:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6498:3:201"},"nodeType":"YulFunctionCall","src":"6498:27:201"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"6488:3:201"},"nodeType":"YulFunctionCall","src":"6488:38:201"},"nodeType":"YulIf","src":"6485:58:201"}]},"name":"access_calldata_tail_t_string_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"6020:8:201","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"6030:11:201","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"6046:4:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"6052:6:201","type":""}],"src":"5968:581:201"},{"body":{"nodeType":"YulBlock","src":"6648:486:201","statements":[{"nodeType":"YulVariableDeclaration","src":"6658:51:201","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"6697:11:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6684:12:201"},"nodeType":"YulFunctionCall","src":"6684:25:201"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"6662:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"6857:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6866:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6869:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6859:6:201"},"nodeType":"YulFunctionCall","src":"6859:12:201"},"nodeType":"YulExpressionStatement","src":"6859:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"6732:18:201"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"6760:12:201"},"nodeType":"YulFunctionCall","src":"6760:14:201"},{"name":"base_ref","nodeType":"YulIdentifier","src":"6776:8:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6756:3:201"},"nodeType":"YulFunctionCall","src":"6756:29:201"},{"kind":"number","nodeType":"YulLiteral","src":"6787:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6752:3:201"},"nodeType":"YulFunctionCall","src":"6752:102:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6728:3:201"},"nodeType":"YulFunctionCall","src":"6728:127:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6721:6:201"},"nodeType":"YulFunctionCall","src":"6721:135:201"},"nodeType":"YulIf","src":"6718:155:201"},{"nodeType":"YulVariableDeclaration","src":"6882:47:201","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"6900:8:201"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"6910:18:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6896:3:201"},"nodeType":"YulFunctionCall","src":"6896:33:201"},"variables":[{"name":"addr_1","nodeType":"YulTypedName","src":"6886:6:201","type":""}]},{"nodeType":"YulAssignment","src":"6938:30:201","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"6961:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6948:12:201"},"nodeType":"YulFunctionCall","src":"6948:20:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"6938:6:201"}]},{"body":{"nodeType":"YulBlock","src":"7011:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7020:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7023:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7013:6:201"},"nodeType":"YulFunctionCall","src":"7013:12:201"},"nodeType":"YulExpressionStatement","src":"7013:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"6983:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"6991:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6980:2:201"},"nodeType":"YulFunctionCall","src":"6980:30:201"},"nodeType":"YulIf","src":"6977:50:201"},{"nodeType":"YulAssignment","src":"7036:25:201","value":{"arguments":[{"name":"addr_1","nodeType":"YulIdentifier","src":"7048:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7056:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7044:3:201"},"nodeType":"YulFunctionCall","src":"7044:17:201"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"7036:4:201"}]},{"body":{"nodeType":"YulBlock","src":"7112:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7121:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7124:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7114:6:201"},"nodeType":"YulFunctionCall","src":"7114:12:201"},"nodeType":"YulExpressionStatement","src":"7114:12:201"}]},"condition":{"arguments":[{"name":"addr","nodeType":"YulIdentifier","src":"7077:4:201"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"7087:12:201"},"nodeType":"YulFunctionCall","src":"7087:14:201"},{"name":"length","nodeType":"YulIdentifier","src":"7103:6:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7083:3:201"},"nodeType":"YulFunctionCall","src":"7083:27:201"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"7073:3:201"},"nodeType":"YulFunctionCall","src":"7073:38:201"},"nodeType":"YulIf","src":"7070:58:201"}]},"name":"access_calldata_tail_t_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"6605:8:201","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"6615:11:201","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"6631:4:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"6637:6:201","type":""}],"src":"6554:580:201"},{"body":{"nodeType":"YulBlock","src":"7206:259:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7223:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"7228:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7216:6:201"},"nodeType":"YulFunctionCall","src":"7216:19:201"},"nodeType":"YulExpressionStatement","src":"7216:19:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7261:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"7266:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7257:3:201"},"nodeType":"YulFunctionCall","src":"7257:14:201"},{"name":"start","nodeType":"YulIdentifier","src":"7273:5:201"},{"name":"length","nodeType":"YulIdentifier","src":"7280:6:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"7244:12:201"},"nodeType":"YulFunctionCall","src":"7244:43:201"},"nodeType":"YulExpressionStatement","src":"7244:43:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7311:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"7316:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7307:3:201"},"nodeType":"YulFunctionCall","src":"7307:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"7325:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7303:3:201"},"nodeType":"YulFunctionCall","src":"7303:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"7332:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7296:6:201"},"nodeType":"YulFunctionCall","src":"7296:38:201"},"nodeType":"YulExpressionStatement","src":"7296:38:201"},{"nodeType":"YulAssignment","src":"7343:116:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7358:3:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"7371:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7379:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7367:3:201"},"nodeType":"YulFunctionCall","src":"7367:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"7384:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7363:3:201"},"nodeType":"YulFunctionCall","src":"7363:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7354:3:201"},"nodeType":"YulFunctionCall","src":"7354:98:201"},{"kind":"number","nodeType":"YulLiteral","src":"7454:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7350:3:201"},"nodeType":"YulFunctionCall","src":"7350:109:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"7343:3:201"}]}]},"name":"abi_encode_string_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"start","nodeType":"YulTypedName","src":"7175:5:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"7182:6:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"7190:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"7198:3:201","type":""}],"src":"7139:326:201"},{"body":{"nodeType":"YulBlock","src":"7841:645:201","statements":[{"nodeType":"YulVariableDeclaration","src":"7851:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"7861:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"7855:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7919:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7934:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7942:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7930:3:201"},"nodeType":"YulFunctionCall","src":"7930:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7912:6:201"},"nodeType":"YulFunctionCall","src":"7912:34:201"},"nodeType":"YulExpressionStatement","src":"7912:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7966:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7977:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7962:3:201"},"nodeType":"YulFunctionCall","src":"7962:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"7986:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7994:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7982:3:201"},"nodeType":"YulFunctionCall","src":"7982:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7955:6:201"},"nodeType":"YulFunctionCall","src":"7955:43:201"},"nodeType":"YulExpressionStatement","src":"7955:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8018:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8029:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8014:3:201"},"nodeType":"YulFunctionCall","src":"8014:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"8038:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"8046:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8034:3:201"},"nodeType":"YulFunctionCall","src":"8034:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8007:6:201"},"nodeType":"YulFunctionCall","src":"8007:43:201"},"nodeType":"YulExpressionStatement","src":"8007:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8070:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8081:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8066:3:201"},"nodeType":"YulFunctionCall","src":"8066:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"8086:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8059:6:201"},"nodeType":"YulFunctionCall","src":"8059:34:201"},"nodeType":"YulExpressionStatement","src":"8059:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8113:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8124:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8109:3:201"},"nodeType":"YulFunctionCall","src":"8109:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"8130:3:201","type":"","value":"224"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8102:6:201"},"nodeType":"YulFunctionCall","src":"8102:32:201"},"nodeType":"YulExpressionStatement","src":"8102:32:201"},{"nodeType":"YulVariableDeclaration","src":"8143:77:201","value":{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"8184:6:201"},{"name":"value5","nodeType":"YulIdentifier","src":"8192:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8204:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8215:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8200:3:201"},"nodeType":"YulFunctionCall","src":"8200:19:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"8157:26:201"},"nodeType":"YulFunctionCall","src":"8157:63:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"8147:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8240:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8251:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8236:3:201"},"nodeType":"YulFunctionCall","src":"8236:19:201"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"8261:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"8269:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8257:3:201"},"nodeType":"YulFunctionCall","src":"8257:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8229:6:201"},"nodeType":"YulFunctionCall","src":"8229:51:201"},"nodeType":"YulExpressionStatement","src":"8229:51:201"},{"nodeType":"YulVariableDeclaration","src":"8289:64:201","value":{"arguments":[{"name":"value6","nodeType":"YulIdentifier","src":"8330:6:201"},{"name":"value7","nodeType":"YulIdentifier","src":"8338:6:201"},{"name":"tail_1","nodeType":"YulIdentifier","src":"8346:6:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"8303:26:201"},"nodeType":"YulFunctionCall","src":"8303:50:201"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"8293:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8373:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8384:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8369:3:201"},"nodeType":"YulFunctionCall","src":"8369:19:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"8394:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"8402:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8390:3:201"},"nodeType":"YulFunctionCall","src":"8390:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8362:6:201"},"nodeType":"YulFunctionCall","src":"8362:51:201"},"nodeType":"YulExpressionStatement","src":"8362:51:201"},{"nodeType":"YulAssignment","src":"8422:58:201","value":{"arguments":[{"name":"value8","nodeType":"YulIdentifier","src":"8457:6:201"},{"name":"value9","nodeType":"YulIdentifier","src":"8465:6:201"},{"name":"tail_2","nodeType":"YulIdentifier","src":"8473:6:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"8430:26:201"},"nodeType":"YulFunctionCall","src":"8430:50:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8422:4:201"}]}]},"name":"abi_encode_tuple_t_contract$_IPool_$4860_t_address_t_address_t_uint256_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_address_t_uint256_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7738:9:201","type":""},{"name":"value9","nodeType":"YulTypedName","src":"7749:6:201","type":""},{"name":"value8","nodeType":"YulTypedName","src":"7757:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"7765:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"7773:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"7781:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"7789:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"7797:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7805:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7813:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7821:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7832:4:201","type":""}],"src":"7470:1016:201"},{"body":{"nodeType":"YulBlock","src":"8891:719:201","statements":[{"nodeType":"YulVariableDeclaration","src":"8901:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8911:3:201","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8905:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8923:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8933:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"8927:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8991:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9006:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"9014:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9002:3:201"},"nodeType":"YulFunctionCall","src":"9002:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8984:6:201"},"nodeType":"YulFunctionCall","src":"8984:34:201"},"nodeType":"YulExpressionStatement","src":"8984:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9038:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9049:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9034:3:201"},"nodeType":"YulFunctionCall","src":"9034:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9058:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"9066:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9054:3:201"},"nodeType":"YulFunctionCall","src":"9054:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9027:6:201"},"nodeType":"YulFunctionCall","src":"9027:43:201"},"nodeType":"YulExpressionStatement","src":"9027:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9090:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9101:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9086:3:201"},"nodeType":"YulFunctionCall","src":"9086:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"9110:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"9118:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9106:3:201"},"nodeType":"YulFunctionCall","src":"9106:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9079:6:201"},"nodeType":"YulFunctionCall","src":"9079:43:201"},"nodeType":"YulExpressionStatement","src":"9079:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9142:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9153:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9138:3:201"},"nodeType":"YulFunctionCall","src":"9138:18:201"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"9162:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"9170:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9158:3:201"},"nodeType":"YulFunctionCall","src":"9158:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9131:6:201"},"nodeType":"YulFunctionCall","src":"9131:43:201"},"nodeType":"YulExpressionStatement","src":"9131:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9194:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9205:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9190:3:201"},"nodeType":"YulFunctionCall","src":"9190:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"9211:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9183:6:201"},"nodeType":"YulFunctionCall","src":"9183:35:201"},"nodeType":"YulExpressionStatement","src":"9183:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9238:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9249:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9234:3:201"},"nodeType":"YulFunctionCall","src":"9234:19:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9255:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9227:6:201"},"nodeType":"YulFunctionCall","src":"9227:31:201"},"nodeType":"YulExpressionStatement","src":"9227:31:201"},{"nodeType":"YulVariableDeclaration","src":"9267:76:201","value":{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"9308:6:201"},{"name":"value6","nodeType":"YulIdentifier","src":"9316:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9328:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9339:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9324:3:201"},"nodeType":"YulFunctionCall","src":"9324:18:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"9281:26:201"},"nodeType":"YulFunctionCall","src":"9281:62:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"9271:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9363:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9374:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9359:3:201"},"nodeType":"YulFunctionCall","src":"9359:19:201"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"9384:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"9392:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9380:3:201"},"nodeType":"YulFunctionCall","src":"9380:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9352:6:201"},"nodeType":"YulFunctionCall","src":"9352:51:201"},"nodeType":"YulExpressionStatement","src":"9352:51:201"},{"nodeType":"YulVariableDeclaration","src":"9412:64:201","value":{"arguments":[{"name":"value7","nodeType":"YulIdentifier","src":"9453:6:201"},{"name":"value8","nodeType":"YulIdentifier","src":"9461:6:201"},{"name":"tail_1","nodeType":"YulIdentifier","src":"9469:6:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"9426:26:201"},"nodeType":"YulFunctionCall","src":"9426:50:201"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"9416:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9496:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9507:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9492:3:201"},"nodeType":"YulFunctionCall","src":"9492:19:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"9517:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"9525:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9513:3:201"},"nodeType":"YulFunctionCall","src":"9513:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9485:6:201"},"nodeType":"YulFunctionCall","src":"9485:51:201"},"nodeType":"YulExpressionStatement","src":"9485:51:201"},{"nodeType":"YulAssignment","src":"9545:59:201","value":{"arguments":[{"name":"value9","nodeType":"YulIdentifier","src":"9580:6:201"},{"name":"value10","nodeType":"YulIdentifier","src":"9588:7:201"},{"name":"tail_2","nodeType":"YulIdentifier","src":"9597:6:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"9553:26:201"},"nodeType":"YulFunctionCall","src":"9553:51:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9545:4:201"}]}]},"name":"abi_encode_tuple_t_contract$_IPool_$4860_t_address_t_address_t_address_t_uint256_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_address_t_address_t_uint256_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8779:9:201","type":""},{"name":"value10","nodeType":"YulTypedName","src":"8790:7:201","type":""},{"name":"value9","nodeType":"YulTypedName","src":"8799:6:201","type":""},{"name":"value8","nodeType":"YulTypedName","src":"8807:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"8815:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"8823:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"8831:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"8839:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"8847:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8855:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8863:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8871:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8882:4:201","type":""}],"src":"8491:1119:201"},{"body":{"nodeType":"YulBlock","src":"9683:201:201","statements":[{"body":{"nodeType":"YulBlock","src":"9729:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9738:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9741:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9731:6:201"},"nodeType":"YulFunctionCall","src":"9731:12:201"},"nodeType":"YulExpressionStatement","src":"9731:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9704:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"9713:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9700:3:201"},"nodeType":"YulFunctionCall","src":"9700:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"9725:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9696:3:201"},"nodeType":"YulFunctionCall","src":"9696:32:201"},"nodeType":"YulIf","src":"9693:52:201"},{"nodeType":"YulVariableDeclaration","src":"9754:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9780:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9767:12:201"},"nodeType":"YulFunctionCall","src":"9767:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9758:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"9838:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9847:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9850:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9840:6:201"},"nodeType":"YulFunctionCall","src":"9840:12:201"},"nodeType":"YulExpressionStatement","src":"9840:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9812:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9823:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"9830:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9819:3:201"},"nodeType":"YulFunctionCall","src":"9819:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"9809:2:201"},"nodeType":"YulFunctionCall","src":"9809:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9802:6:201"},"nodeType":"YulFunctionCall","src":"9802:35:201"},"nodeType":"YulIf","src":"9799:55:201"},{"nodeType":"YulAssignment","src":"9863:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"9873:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9863:6:201"}]}]},"name":"abi_decode_tuple_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9649:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9660:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9672:6:201","type":""}],"src":"9615:269:201"},{"body":{"nodeType":"YulBlock","src":"10285:730:201","statements":[{"nodeType":"YulVariableDeclaration","src":"10295:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10305:3:201","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10299:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10317:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10327:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"10321:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10385:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10400:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"10408:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10396:3:201"},"nodeType":"YulFunctionCall","src":"10396:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10378:6:201"},"nodeType":"YulFunctionCall","src":"10378:34:201"},"nodeType":"YulExpressionStatement","src":"10378:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10432:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10443:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10428:3:201"},"nodeType":"YulFunctionCall","src":"10428:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10452:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"10460:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10448:3:201"},"nodeType":"YulFunctionCall","src":"10448:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10421:6:201"},"nodeType":"YulFunctionCall","src":"10421:43:201"},"nodeType":"YulExpressionStatement","src":"10421:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10484:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10495:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10480:3:201"},"nodeType":"YulFunctionCall","src":"10480:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"10504:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"10512:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10500:3:201"},"nodeType":"YulFunctionCall","src":"10500:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10473:6:201"},"nodeType":"YulFunctionCall","src":"10473:43:201"},"nodeType":"YulExpressionStatement","src":"10473:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10536:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10547:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10532:3:201"},"nodeType":"YulFunctionCall","src":"10532:18:201"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"10556:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"10564:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10552:3:201"},"nodeType":"YulFunctionCall","src":"10552:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10525:6:201"},"nodeType":"YulFunctionCall","src":"10525:43:201"},"nodeType":"YulExpressionStatement","src":"10525:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10588:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10599:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10584:3:201"},"nodeType":"YulFunctionCall","src":"10584:19:201"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"10609:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10617:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10605:3:201"},"nodeType":"YulFunctionCall","src":"10605:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10577:6:201"},"nodeType":"YulFunctionCall","src":"10577:46:201"},"nodeType":"YulExpressionStatement","src":"10577:46:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10643:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10654:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10639:3:201"},"nodeType":"YulFunctionCall","src":"10639:19:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10660:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10632:6:201"},"nodeType":"YulFunctionCall","src":"10632:31:201"},"nodeType":"YulExpressionStatement","src":"10632:31:201"},{"nodeType":"YulVariableDeclaration","src":"10672:76:201","value":{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"10713:6:201"},{"name":"value6","nodeType":"YulIdentifier","src":"10721:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10733:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10744:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10729:3:201"},"nodeType":"YulFunctionCall","src":"10729:18:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10686:26:201"},"nodeType":"YulFunctionCall","src":"10686:62:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"10676:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10768:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10779:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10764:3:201"},"nodeType":"YulFunctionCall","src":"10764:19:201"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"10789:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"10797:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10785:3:201"},"nodeType":"YulFunctionCall","src":"10785:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10757:6:201"},"nodeType":"YulFunctionCall","src":"10757:51:201"},"nodeType":"YulExpressionStatement","src":"10757:51:201"},{"nodeType":"YulVariableDeclaration","src":"10817:64:201","value":{"arguments":[{"name":"value7","nodeType":"YulIdentifier","src":"10858:6:201"},{"name":"value8","nodeType":"YulIdentifier","src":"10866:6:201"},{"name":"tail_1","nodeType":"YulIdentifier","src":"10874:6:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10831:26:201"},"nodeType":"YulFunctionCall","src":"10831:50:201"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"10821:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10901:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10912:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10897:3:201"},"nodeType":"YulFunctionCall","src":"10897:19:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"10922:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"10930:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10918:3:201"},"nodeType":"YulFunctionCall","src":"10918:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10890:6:201"},"nodeType":"YulFunctionCall","src":"10890:51:201"},"nodeType":"YulExpressionStatement","src":"10890:51:201"},{"nodeType":"YulAssignment","src":"10950:59:201","value":{"arguments":[{"name":"value9","nodeType":"YulIdentifier","src":"10985:6:201"},{"name":"value10","nodeType":"YulIdentifier","src":"10993:7:201"},{"name":"tail_2","nodeType":"YulIdentifier","src":"11002:6:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10958:26:201"},"nodeType":"YulFunctionCall","src":"10958:51:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10950:4:201"}]}]},"name":"abi_encode_tuple_t_contract$_IPool_$4860_t_address_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10173:9:201","type":""},{"name":"value10","nodeType":"YulTypedName","src":"10184:7:201","type":""},{"name":"value9","nodeType":"YulTypedName","src":"10193:6:201","type":""},{"name":"value8","nodeType":"YulTypedName","src":"10201:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"10209:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"10217:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"10225:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"10233:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"10241:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10249:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10257:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10265:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10276:4:201","type":""}],"src":"9889:1126:201"},{"body":{"nodeType":"YulBlock","src":"11387:656:201","statements":[{"nodeType":"YulVariableDeclaration","src":"11397:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11407:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11401:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11465:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11480:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11488:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11476:3:201"},"nodeType":"YulFunctionCall","src":"11476:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11458:6:201"},"nodeType":"YulFunctionCall","src":"11458:34:201"},"nodeType":"YulExpressionStatement","src":"11458:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11512:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11523:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11508:3:201"},"nodeType":"YulFunctionCall","src":"11508:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11532:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11540:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11528:3:201"},"nodeType":"YulFunctionCall","src":"11528:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11501:6:201"},"nodeType":"YulFunctionCall","src":"11501:43:201"},"nodeType":"YulExpressionStatement","src":"11501:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11564:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11575:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11560:3:201"},"nodeType":"YulFunctionCall","src":"11560:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"11584:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11592:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11580:3:201"},"nodeType":"YulFunctionCall","src":"11580:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11553:6:201"},"nodeType":"YulFunctionCall","src":"11553:43:201"},"nodeType":"YulExpressionStatement","src":"11553:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11616:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11627:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11612:3:201"},"nodeType":"YulFunctionCall","src":"11612:18:201"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"11636:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"11644:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11632:3:201"},"nodeType":"YulFunctionCall","src":"11632:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11605:6:201"},"nodeType":"YulFunctionCall","src":"11605:45:201"},"nodeType":"YulExpressionStatement","src":"11605:45:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11670:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11681:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11666:3:201"},"nodeType":"YulFunctionCall","src":"11666:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"11687:3:201","type":"","value":"224"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11659:6:201"},"nodeType":"YulFunctionCall","src":"11659:32:201"},"nodeType":"YulExpressionStatement","src":"11659:32:201"},{"nodeType":"YulVariableDeclaration","src":"11700:77:201","value":{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"11741:6:201"},{"name":"value5","nodeType":"YulIdentifier","src":"11749:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11761:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11772:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11757:3:201"},"nodeType":"YulFunctionCall","src":"11757:19:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"11714:26:201"},"nodeType":"YulFunctionCall","src":"11714:63:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"11704:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11797:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11808:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11793:3:201"},"nodeType":"YulFunctionCall","src":"11793:19:201"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"11818:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"11826:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11814:3:201"},"nodeType":"YulFunctionCall","src":"11814:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11786:6:201"},"nodeType":"YulFunctionCall","src":"11786:51:201"},"nodeType":"YulExpressionStatement","src":"11786:51:201"},{"nodeType":"YulVariableDeclaration","src":"11846:64:201","value":{"arguments":[{"name":"value6","nodeType":"YulIdentifier","src":"11887:6:201"},{"name":"value7","nodeType":"YulIdentifier","src":"11895:6:201"},{"name":"tail_1","nodeType":"YulIdentifier","src":"11903:6:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"11860:26:201"},"nodeType":"YulFunctionCall","src":"11860:50:201"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"11850:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11930:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11941:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11926:3:201"},"nodeType":"YulFunctionCall","src":"11926:19:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"11951:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"11959:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11947:3:201"},"nodeType":"YulFunctionCall","src":"11947:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11919:6:201"},"nodeType":"YulFunctionCall","src":"11919:51:201"},"nodeType":"YulExpressionStatement","src":"11919:51:201"},{"nodeType":"YulAssignment","src":"11979:58:201","value":{"arguments":[{"name":"value8","nodeType":"YulIdentifier","src":"12014:6:201"},{"name":"value9","nodeType":"YulIdentifier","src":"12022:6:201"},{"name":"tail_2","nodeType":"YulIdentifier","src":"12030:6:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"11987:26:201"},"nodeType":"YulFunctionCall","src":"11987:50:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11979:4:201"}]}]},"name":"abi_encode_tuple_t_contract$_IPool_$4860_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11284:9:201","type":""},{"name":"value9","nodeType":"YulTypedName","src":"11295:6:201","type":""},{"name":"value8","nodeType":"YulTypedName","src":"11303:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"11311:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"11319:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"11327:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"11335:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11343:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11351:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11359:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11367:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11378:4:201","type":""}],"src":"11020:1023:201"},{"body":{"nodeType":"YulBlock","src":"12261:356:201","statements":[{"nodeType":"YulAssignment","src":"12271:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12283:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12294:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12279:3:201"},"nodeType":"YulFunctionCall","src":"12279:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12271:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"12307:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12317:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12311:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12375:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12390:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12398:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12386:3:201"},"nodeType":"YulFunctionCall","src":"12386:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12368:6:201"},"nodeType":"YulFunctionCall","src":"12368:34:201"},"nodeType":"YulExpressionStatement","src":"12368:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12422:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12433:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12418:3:201"},"nodeType":"YulFunctionCall","src":"12418:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12442:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12450:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12438:3:201"},"nodeType":"YulFunctionCall","src":"12438:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12411:6:201"},"nodeType":"YulFunctionCall","src":"12411:43:201"},"nodeType":"YulExpressionStatement","src":"12411:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12474:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12485:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12470:3:201"},"nodeType":"YulFunctionCall","src":"12470:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"12494:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12502:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12490:3:201"},"nodeType":"YulFunctionCall","src":"12490:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12463:6:201"},"nodeType":"YulFunctionCall","src":"12463:43:201"},"nodeType":"YulExpressionStatement","src":"12463:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12526:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12537:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12522:3:201"},"nodeType":"YulFunctionCall","src":"12522:18:201"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"12546:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12554:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12542:3:201"},"nodeType":"YulFunctionCall","src":"12542:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12515:6:201"},"nodeType":"YulFunctionCall","src":"12515:43:201"},"nodeType":"YulExpressionStatement","src":"12515:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12578:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12589:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12574:3:201"},"nodeType":"YulFunctionCall","src":"12574:19:201"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"12599:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12607:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12595:3:201"},"nodeType":"YulFunctionCall","src":"12595:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12567:6:201"},"nodeType":"YulFunctionCall","src":"12567:44:201"},"nodeType":"YulExpressionStatement","src":"12567:44:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12198:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12209:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12217:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12225:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12233:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12241:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12252:4:201","type":""}],"src":"12048:569:201"},{"body":{"nodeType":"YulBlock","src":"12835:175:201","statements":[{"nodeType":"YulAssignment","src":"12845:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12857:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12868:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12853:3:201"},"nodeType":"YulFunctionCall","src":"12853:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12845:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12887:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12902:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"12910:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12898:3:201"},"nodeType":"YulFunctionCall","src":"12898:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12880:6:201"},"nodeType":"YulFunctionCall","src":"12880:74:201"},"nodeType":"YulExpressionStatement","src":"12880:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12974:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12985:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12970:3:201"},"nodeType":"YulFunctionCall","src":"12970:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12996:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12990:5:201"},"nodeType":"YulFunctionCall","src":"12990:13:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12963:6:201"},"nodeType":"YulFunctionCall","src":"12963:41:201"},"nodeType":"YulExpressionStatement","src":"12963:41:201"}]},"name":"abi_encode_tuple_t_address_t_struct$_ReserveConfigurationMap_$21318_memory_ptr__to_t_address_t_struct$_ReserveConfigurationMap_$21318_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12796:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12807:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12815:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12826:4:201","type":""}],"src":"12622:388:201"},{"body":{"nodeType":"YulBlock","src":"13172:250:201","statements":[{"nodeType":"YulAssignment","src":"13182:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13194:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13205:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13190:3:201"},"nodeType":"YulFunctionCall","src":"13190:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13182:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"13217:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"13227:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"13221:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13285:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13300:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"13308:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13296:3:201"},"nodeType":"YulFunctionCall","src":"13296:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13278:6:201"},"nodeType":"YulFunctionCall","src":"13278:34:201"},"nodeType":"YulExpressionStatement","src":"13278:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13332:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13343:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13328:3:201"},"nodeType":"YulFunctionCall","src":"13328:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"13352:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"13360:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13348:3:201"},"nodeType":"YulFunctionCall","src":"13348:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13321:6:201"},"nodeType":"YulFunctionCall","src":"13321:43:201"},"nodeType":"YulExpressionStatement","src":"13321:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13384:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13395:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13380:3:201"},"nodeType":"YulFunctionCall","src":"13380:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"13404:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"13412:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13400:3:201"},"nodeType":"YulFunctionCall","src":"13400:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13373:6:201"},"nodeType":"YulFunctionCall","src":"13373:43:201"},"nodeType":"YulExpressionStatement","src":"13373:43:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13125:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13136:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13144:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13152:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13163:4:201","type":""}],"src":"13015:407:201"},{"body":{"nodeType":"YulBlock","src":"13476:481:201","statements":[{"nodeType":"YulVariableDeclaration","src":"13486:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13506:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13500:5:201"},"nodeType":"YulFunctionCall","src":"13500:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"13490:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"13528:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"13533:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13521:6:201"},"nodeType":"YulFunctionCall","src":"13521:19:201"},"nodeType":"YulExpressionStatement","src":"13521:19:201"},{"nodeType":"YulVariableDeclaration","src":"13549:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"13558:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"13553:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"13620:110:201","statements":[{"nodeType":"YulVariableDeclaration","src":"13634:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"13644:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"13638:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"13676:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"13681:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13672:3:201"},"nodeType":"YulFunctionCall","src":"13672:11:201"},{"name":"_1","nodeType":"YulIdentifier","src":"13685:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13668:3:201"},"nodeType":"YulFunctionCall","src":"13668:20:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13704:5:201"},{"name":"i","nodeType":"YulIdentifier","src":"13711:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13700:3:201"},"nodeType":"YulFunctionCall","src":"13700:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"13715:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13696:3:201"},"nodeType":"YulFunctionCall","src":"13696:22:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13690:5:201"},"nodeType":"YulFunctionCall","src":"13690:29:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13661:6:201"},"nodeType":"YulFunctionCall","src":"13661:59:201"},"nodeType":"YulExpressionStatement","src":"13661:59:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"13579:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"13582:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"13576:2:201"},"nodeType":"YulFunctionCall","src":"13576:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"13590:21:201","statements":[{"nodeType":"YulAssignment","src":"13592:17:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"13601:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"13604:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13597:3:201"},"nodeType":"YulFunctionCall","src":"13597:12:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"13592:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"13572:3:201","statements":[]},"src":"13568:162:201"},{"body":{"nodeType":"YulBlock","src":"13764:62:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"13793:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"13798:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13789:3:201"},"nodeType":"YulFunctionCall","src":"13789:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"13807:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13785:3:201"},"nodeType":"YulFunctionCall","src":"13785:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"13814:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13778:6:201"},"nodeType":"YulFunctionCall","src":"13778:38:201"},"nodeType":"YulExpressionStatement","src":"13778:38:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"13745:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"13748:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13742:2:201"},"nodeType":"YulFunctionCall","src":"13742:13:201"},"nodeType":"YulIf","src":"13739:87:201"},{"nodeType":"YulAssignment","src":"13835:116:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"13850:3:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"13863:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13871:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13859:3:201"},"nodeType":"YulFunctionCall","src":"13859:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"13876:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13855:3:201"},"nodeType":"YulFunctionCall","src":"13855:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13846:3:201"},"nodeType":"YulFunctionCall","src":"13846:98:201"},{"kind":"number","nodeType":"YulLiteral","src":"13946:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13842:3:201"},"nodeType":"YulFunctionCall","src":"13842:109:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"13835:3:201"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"13453:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"13460:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"13468:3:201","type":""}],"src":"13427:530:201"},{"body":{"nodeType":"YulBlock","src":"14109:190:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14126:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14141:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"14149:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14137:3:201"},"nodeType":"YulFunctionCall","src":"14137:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14119:6:201"},"nodeType":"YulFunctionCall","src":"14119:74:201"},"nodeType":"YulExpressionStatement","src":"14119:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14213:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14224:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14209:3:201"},"nodeType":"YulFunctionCall","src":"14209:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"14229:2:201","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14202:6:201"},"nodeType":"YulFunctionCall","src":"14202:30:201"},"nodeType":"YulExpressionStatement","src":"14202:30:201"},{"nodeType":"YulAssignment","src":"14241:52:201","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"14266:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14278:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14289:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14274:3:201"},"nodeType":"YulFunctionCall","src":"14274:18:201"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"14249:16:201"},"nodeType":"YulFunctionCall","src":"14249:44:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14241:4:201"}]}]},"name":"abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14070:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14081:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14089:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14100:4:201","type":""}],"src":"13962:337:201"},{"body":{"nodeType":"YulBlock","src":"14425:98:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14442:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14453:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14435:6:201"},"nodeType":"YulFunctionCall","src":"14435:21:201"},"nodeType":"YulExpressionStatement","src":"14435:21:201"},{"nodeType":"YulAssignment","src":"14465:52:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14490:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14502:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14513:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14498:3:201"},"nodeType":"YulFunctionCall","src":"14498:18:201"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"14473:16:201"},"nodeType":"YulFunctionCall","src":"14473:44:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14465:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14394:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14405:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14416:4:201","type":""}],"src":"14304:219:201"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPool(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$4860t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if slt(sub(dataEnd, _1), 192) { revert(0, 0) }\n        value1 := _1\n    }\n    function abi_decode_tuple_t_contract$_IPool_$4860t_struct$_UpdateATokenInput_$21267_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if slt(sub(dataEnd, _1), 224) { revert(0, 0) }\n        value1 := _1\n    }\n    function abi_decode_tuple_t_contract$_IPool_$4860t_struct$_InitReserveInput_$21252_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if slt(sub(dataEnd, _1), 480) { revert(0, 0) }\n        value1 := _1\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function allocate_memory() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 480)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x20) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x20)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n        value := memPtr\n        mstore(memPtr, mload(headStart))\n    }\n    function abi_decode_uint128_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint40_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint16_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        validator_revert_contract_IPool(value)\n    }\n    function abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 480) { revert(0, 0) }\n        let value := allocate_memory()\n        mstore(value, abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, dataEnd))\n        mstore(add(value, 32), abi_decode_uint128_fromMemory(add(headStart, 32)))\n        mstore(add(value, 64), abi_decode_uint128_fromMemory(add(headStart, 64)))\n        mstore(add(value, 96), abi_decode_uint128_fromMemory(add(headStart, 96)))\n        mstore(add(value, 128), abi_decode_uint128_fromMemory(add(headStart, 128)))\n        mstore(add(value, 160), abi_decode_uint128_fromMemory(add(headStart, 160)))\n        mstore(add(value, 192), abi_decode_uint40_fromMemory(add(headStart, 192)))\n        mstore(add(value, 224), abi_decode_uint16_fromMemory(add(headStart, 224)))\n        let _1 := 256\n        mstore(add(value, _1), abi_decode_address_fromMemory(add(headStart, _1)))\n        let _2 := 288\n        mstore(add(value, _2), abi_decode_address_fromMemory(add(headStart, _2)))\n        let _3 := 320\n        mstore(add(value, _3), abi_decode_address_fromMemory(add(headStart, _3)))\n        let _4 := 352\n        mstore(add(value, _4), abi_decode_address_fromMemory(add(headStart, _4)))\n        let _5 := 384\n        mstore(add(value, _5), abi_decode_uint128_fromMemory(add(headStart, _5)))\n        let _6 := 416\n        mstore(add(value, _6), abi_decode_uint128_fromMemory(add(headStart, _6)))\n        let _7 := 448\n        mstore(add(value, _7), abi_decode_uint128_fromMemory(add(headStart, _7)))\n        value0 := value\n    }\n    function abi_decode_tuple_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, dataEnd)\n    }\n    function access_calldata_tail_t_string_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1))) { revert(0, 0) }\n        let addr_1 := add(base_ref, rel_offset_of_tail)\n        length := calldataload(addr_1)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        addr := add(addr_1, 0x20)\n        if sgt(addr, sub(calldatasize(), length)) { revert(0, 0) }\n    }\n    function access_calldata_tail_t_bytes_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1))) { revert(0, 0) }\n        let addr_1 := add(base_ref, rel_offset_of_tail)\n        length := calldataload(addr_1)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        addr := add(addr_1, 0x20)\n        if sgt(addr, sub(calldatasize(), length)) { revert(0, 0) }\n    }\n    function abi_encode_string_calldata(start, length, pos) -> end\n    {\n        mstore(pos, length)\n        calldatacopy(add(pos, 0x20), start, length)\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_contract$_IPool_$4860_t_address_t_address_t_uint256_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_address_t_uint256_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value9, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), 224)\n        let tail_1 := abi_encode_string_calldata(value4, value5, add(headStart, 224))\n        mstore(add(headStart, 160), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string_calldata(value6, value7, tail_1)\n        mstore(add(headStart, 192), sub(tail_2, headStart))\n        tail := abi_encode_string_calldata(value8, value9, tail_2)\n    }\n    function abi_encode_tuple_t_contract$_IPool_$4860_t_address_t_address_t_address_t_uint256_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_address_t_address_t_uint256_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value10, value9, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 256\n        let _2 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _2))\n        mstore(add(headStart, 32), and(value1, _2))\n        mstore(add(headStart, 64), and(value2, _2))\n        mstore(add(headStart, 96), and(value3, _2))\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), _1)\n        let tail_1 := abi_encode_string_calldata(value5, value6, add(headStart, _1))\n        mstore(add(headStart, 192), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string_calldata(value7, value8, tail_1)\n        mstore(add(headStart, 224), sub(tail_2, headStart))\n        tail := abi_encode_string_calldata(value9, value10, tail_2)\n    }\n    function abi_decode_tuple_t_uint8(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_contract$_IPool_$4860_t_address_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value10, value9, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 256\n        let _2 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _2))\n        mstore(add(headStart, 32), and(value1, _2))\n        mstore(add(headStart, 64), and(value2, _2))\n        mstore(add(headStart, 96), and(value3, _2))\n        mstore(add(headStart, 128), and(value4, 0xff))\n        mstore(add(headStart, 160), _1)\n        let tail_1 := abi_encode_string_calldata(value5, value6, add(headStart, _1))\n        mstore(add(headStart, 192), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string_calldata(value7, value8, tail_1)\n        mstore(add(headStart, 224), sub(tail_2, headStart))\n        tail := abi_encode_string_calldata(value9, value10, tail_2)\n    }\n    function abi_encode_tuple_t_contract$_IPool_$4860_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value9, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), and(value3, 0xff))\n        mstore(add(headStart, 128), 224)\n        let tail_1 := abi_encode_string_calldata(value4, value5, add(headStart, 224))\n        mstore(add(headStart, 160), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string_calldata(value6, value7, tail_1)\n        mstore(add(headStart, 192), sub(tail_2, headStart))\n        tail := abi_encode_string_calldata(value8, value9, tail_2)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address_t_address_t_address__to_t_address_t_address_t_address_t_address_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), and(value3, _1))\n        mstore(add(headStart, 128), and(value4, _1))\n    }\n    function abi_encode_tuple_t_address_t_struct$_ReserveConfigurationMap_$21318_memory_ptr__to_t_address_t_struct$_ReserveConfigurationMap_$21318_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), mload(value1))\n    }\n    function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), 64)\n        tail := abi_encode_bytes(value1, add(headStart, 64))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c8063b0f093551461005b578063b13c96a81461007d578063df59b8b21461009d578063f5b50e70146100bd575b600080fd5b81801561006757600080fd5b5061007b61007636600461117d565b6100dd565b005b81801561008957600080fd5b5061007b6100983660046111d4565b610439565b8180156100a957600080fd5b5061007b6100b8366004611220565b6106c6565b8180156100c957600080fd5b5061007b6100d836600461117d565b610bd3565b600073ffffffffffffffffffffffffffffffffffffffff83166335ea6a75610108602085018561126d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016101e060405180830381865afa158015610172573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061019691906113a2565b9050600061028573ffffffffffffffffffffffffffffffffffffffff851663c44b11f76101c6602087018761126d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801561022f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025391906114c5565b5161ffff80821692601083901c821692602081901c83169260ff603083901c811693604084901c9092169260a81c1690565b50909450600093507fc222ec8a0000000000000000000000000000000000000000000000000000000092508791506102c29050602087018761126d565b6102d2604088016020890161126d565b856102e060408a018a6114e1565b6102ed60608c018c6114e1565b6102fa60a08e018e6114e1565b6040516024016103139a99989796959493929190611596565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526101408401519091506103b3906103ad60a087016080880161126d565b83610e6a565b6103c360a085016080860161126d565b61014084015173ffffffffffffffffffffffffffffffffffffffff91821691166103f0602087018761126d565b73ffffffffffffffffffffffffffffffffffffffff167f9439658a562a5c46b1173589df89cf001483d685bad28aedaff4a88656292d8160405160405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff83166335ea6a75610464602085018561126d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016101e060405180830381865afa1580156104ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f291906113a2565b9050600061052273ffffffffffffffffffffffffffffffffffffffff851663c44b11f76101c6602087018761126d565b50509350505050600063183fb41360e01b85856020016020810190610547919061126d565b610554602088018861126d565b6105646060890160408a0161126d565b8661057260608b018b6114e1565b61057f60808d018d6114e1565b61058c60c08f018f6114e1565b6040516024016105a69b9a99989796959493929190611617565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610100840151909150610640906103ad60c0870160a0880161126d565b61065060c0850160a0860161126d565b61010084015173ffffffffffffffffffffffffffffffffffffffff918216911661067d602087018761126d565b73ffffffffffffffffffffffffffffffffffffffff167fa76f65411ec66a7fb6bc467432eb14767900449ae4469fa295e4441fe5e1cb7360405160405180910390a45050505050565b60006108016106d8602084018461126d565b7f183fb413000000000000000000000000000000000000000000000000000000008561070a60e0870160c0880161126d565b61071a60c0880160a0890161126d565b61072b610100890160e08a0161126d565b61073b60808a0160608b016116a4565b6107496101008b018b6114e1565b6107576101208d018d6114e1565b6107656101c08f018f6114e1565b60405160240161077f9b9a999897969594939291906116c7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610ef8565b905060006108ae610818604085016020860161126d565b7fc222ec8a000000000000000000000000000000000000000000000000000000008661084a60c0880160a0890161126d565b61085b610100890160e08a0161126d565b61086b60808a0160608b016116a4565b6108796101808b018b6114e1565b6108876101a08d018d6114e1565b6108956101c08f018f6114e1565b60405160240161077f9a9998979695949392919061171b565b905060006109456108c5606086016040870161126d565b7fc222ec8a00000000000000000000000000000000000000000000000000000000876108f760c0890160a08a0161126d565b6109086101008a0160e08b0161126d565b61091860808b0160608c016116a4565b6109266101408c018c6114e1565b6109346101608e018e6114e1565b8e806101c0019061089591906114e1565b905073ffffffffffffffffffffffffffffffffffffffff8516637a708e9261097360c0870160a0880161126d565b85858561098660a08b0160808c0161126d565b60405160e087901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff95861660048201529385166024850152918416604484015283166064830152909116608482015260a401600060405180830381600087803b158015610a0b57600080fd5b505af1158015610a1f573d6000803e3d6000fd5b50506040805160208101909152600081529150610a519050610a4760808701606088016116a4565b829060ff16610fd3565b610a5c81600161107c565b610a678160006110c1565b610a72816000611106565b73ffffffffffffffffffffffffffffffffffffffff861663f51e435b610a9e60c0880160a0890161126d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff909116600482015283516024820152604401600060405180830381600087803b158015610b0b57600080fd5b505af1158015610b1f573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff85169050610b4b60c0870160a0880161126d565b73ffffffffffffffffffffffffffffffffffffffff167f3a0ca721fc364424566385a1aa271ed508cc2c0949c2272575fb3013a163a45f8585610b9460a08b0160808c0161126d565b6040805173ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015292168183015290519081900360600190a3505050505050565b600073ffffffffffffffffffffffffffffffffffffffff83166335ea6a75610bfe602085018561126d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016101e060405180830381865afa158015610c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8c91906113a2565b90506000610cbc73ffffffffffffffffffffffffffffffffffffffff851663c44b11f76101c6602087018761126d565b50909450600093507fc222ec8a000000000000000000000000000000000000000000000000000000009250879150610cf99050602087018761126d565b610d09604088016020890161126d565b85610d1760408a018a6114e1565b610d2460608c018c6114e1565b610d3160a08e018e6114e1565b604051602401610d4a9a99989796959493929190611596565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610120840151909150610de4906103ad60a087016080880161126d565b610df460a085016080860161126d565b61012084015173ffffffffffffffffffffffffffffffffffffffff9182169116610e21602087018761126d565b73ffffffffffffffffffffffffffffffffffffffff167f7a943a5b6c214bf7726c069a878b1e2a8e7371981d516048b84e03743e67bc2860405160405180910390a45050505050565b6040517f4f1ef286000000000000000000000000000000000000000000000000000000008152839073ffffffffffffffffffffffffffffffffffffffff821690634f1ef28690610ec090869086906004016117d1565b600060405180830381600087803b158015610eda57600080fd5b505af1158015610eee573d6000803e3d6000fd5b5050505050505050565b60008030604051610f089061114b565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f080158015610f41573d6000803e3d6000fd5b506040517fd1f5789400000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff82169063d1f5789490610f9990879087906004016117d1565b600060405180830381600087803b158015610fb357600080fd5b505af1158015610fc7573d6000803e3d6000fd5b50929695505050505050565b60408051808201909152600281527f3636000000000000000000000000000000000000000000000000000000000000602082015260ff82111561104c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110439190611808565b60405180910390fd5b5081517fffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff1660309190911b179052565b60388161108a57600061108d565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffff1660ff9190911690911b1790915250565b603c816110cf5760006110d2565b60015b83517fffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffff1660ff9190911690911b1790915250565b603981611114576000611117565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff1660ff9190911690911b1790915250565b6109cb8061181c83390190565b73ffffffffffffffffffffffffffffffffffffffff8116811461117a57600080fd5b50565b6000806040838503121561119057600080fd5b823561119b81611158565b9150602083013567ffffffffffffffff8111156111b757600080fd5b830160c081860312156111c957600080fd5b809150509250929050565b600080604083850312156111e757600080fd5b82356111f281611158565b9150602083013567ffffffffffffffff81111561120e57600080fd5b830160e081860312156111c957600080fd5b6000806040838503121561123357600080fd5b823561123e81611158565b9150602083013567ffffffffffffffff81111561125a57600080fd5b83016101e081860312156111c957600080fd5b60006020828403121561127f57600080fd5b813561128a81611158565b9392505050565b6040516101e0810167ffffffffffffffff811182821017156112dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b6000602082840312156112f457600080fd5b6040516020810181811067ffffffffffffffff8211171561133e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529151825250919050565b80516fffffffffffffffffffffffffffffffff8116811461136b57600080fd5b919050565b805164ffffffffff8116811461136b57600080fd5b805161ffff8116811461136b57600080fd5b805161136b81611158565b60006101e082840312156113b557600080fd5b6113bd611291565b6113c784846112e2565b81526113d56020840161134b565b60208201526113e66040840161134b565b60408201526113f76060840161134b565b60608201526114086080840161134b565b608082015261141960a0840161134b565b60a082015261142a60c08401611370565b60c082015261143b60e08401611385565b60e082015261010061144e818501611397565b90820152610120611460848201611397565b90820152610140611472848201611397565b90820152610160611484848201611397565b9082015261018061149684820161134b565b908201526101a06114a884820161134b565b908201526101c06114ba84820161134b565b908201529392505050565b6000602082840312156114d757600080fd5b61128a83836112e2565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261151657600080fd5b83018035915067ffffffffffffffff82111561153157600080fd5b60200191503681900382131561154657600080fd5b9250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808d168352808c166020840152808b1660408401525088606083015260e060808301526115de60e08301888a61154d565b82810360a08401526115f181878961154d565b905082810360c084015261160681858761154d565b9d9c50505050505050505050505050565b600061010073ffffffffffffffffffffffffffffffffffffffff808f168452808e166020850152808d166040850152808c166060850152508960808401528060a0840152611668818401898b61154d565b905082810360c084015261167d81878961154d565b905082810360e084015261169281858761154d565b9e9d5050505050505050505050505050565b6000602082840312156116b657600080fd5b813560ff8116811461128a57600080fd5b600061010073ffffffffffffffffffffffffffffffffffffffff808f168452808e166020850152808d166040850152808c1660608501525060ff8a1660808401528060a0840152611668818401898b61154d565b600073ffffffffffffffffffffffffffffffffffffffff808d168352808c166020840152808b1660408401525060ff8916606083015260e060808301526115de60e08301888a61154d565b6000815180845260005b8181101561178c57602081850181015186830182015201611770565b8181111561179e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006118006040830184611766565b949350505050565b60208152600061128a602083018461176656fe60a060405234801561001057600080fd5b506040516109cb3803806109cb83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b60805161091d6100ae6000396000818161014f015281816101a101528181610274015281816104110152818161043a01526105a4015261091d6000f3fe60806040526004361061005a5760003560e01c80635c60da1b116100435780635c60da1b14610097578063d1f57894146100d5578063f851a440146100e85761005a565b80633659cfe6146100645780634f1ef28614610084575b6100626100fd565b005b34801561007057600080fd5b5061006261007f36600461067b565b610137565b61006261009236600461069d565b610189565b3480156100a357600080fd5b506100ac61025a565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100626100e336600461074f565b6102cb565b3480156100f457600080fd5b506100ac6103f7565b61010561045c565b6101356101307f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b610464565b565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156101815761017e81610488565b50565b61017e6100fd565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561024d576101d083610488565b60008373ffffffffffffffffffffffffffffffffffffffff1683836040516101f992919061082f565b600060405180830381855af49150503d8060008114610234576040519150601f19603f3d011682016040523d82523d6000602084013e610239565b606091505b505090508061024757600080fd5b50505050565b6102556100fd565b505050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102c057507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6102c86100fd565b90565b60006102f57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff161461031557600080fd5b61034060017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61083f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc1461036e5761036e61087d565b610377826104d5565b8051156103f35760008273ffffffffffffffffffffffffffffffffffffffff16826040516103a591906108ac565b600060405180830381855af49150503d80600081146103e0576040519150601f19603f3d011682016040523d82523d6000602084013e6103e5565b606091505b505090508061025557600080fd5b5050565b60003373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102c057507f000000000000000000000000000000000000000000000000000000000000000090565b61013561058c565b3660008037600080366000845af43d6000803e808015610483573d6000f35b3d6000fd5b610491816104d5565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b803b610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161415610135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667260448201527f6f6d207468652070726f78792061646d696e0000000000000000000000000000606482015260840161055f565b803573ffffffffffffffffffffffffffffffffffffffff8116811461067657600080fd5b919050565b60006020828403121561068d57600080fd5b61069682610652565b9392505050565b6000806000604084860312156106b257600080fd5b6106bb84610652565b9250602084013567ffffffffffffffff808211156106d857600080fd5b818601915086601f8301126106ec57600080fd5b8135818111156106fb57600080fd5b87602082850101111561070d57600080fd5b6020830194508093505050509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561076257600080fd5b61076b83610652565b9150602083013567ffffffffffffffff8082111561078857600080fd5b818501915085601f83011261079c57600080fd5b8135818111156107ae576107ae610720565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156107f4576107f4610720565b8160405282815288602084870101111561080d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b8183823760009101908152919050565b600082821015610878577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000825160005b818110156108cd57602081860181015185830152016108b3565b818111156108dc576000828501525b50919091019291505056fea2646970667358221220f9157fc154ba5797dbf9f1c996264175793cc650e7132a50aacd715276ed42a364736f6c634300080a0033a26469706673582212209dd78bf2e2a3b63f2d40c2f2b34aa63f0ae865b4629b326bd898a2dd4e253ddf64736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x56 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xB0F09355 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0xB13C96A8 EQ PUSH2 0x7D JUMPI DUP1 PUSH4 0xDF59B8B2 EQ PUSH2 0x9D JUMPI DUP1 PUSH4 0xF5B50E70 EQ PUSH2 0xBD JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0x76 CALLDATASIZE PUSH1 0x4 PUSH2 0x117D JUMP JUMPDEST PUSH2 0xDD JUMP JUMPDEST STOP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x89 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0x98 CALLDATASIZE PUSH1 0x4 PUSH2 0x11D4 JUMP JUMPDEST PUSH2 0x439 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0xB8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1220 JUMP JUMPDEST PUSH2 0x6C6 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xC9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0xD8 CALLDATASIZE PUSH1 0x4 PUSH2 0x117D JUMP JUMPDEST PUSH2 0xBD3 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH4 0x35EA6A75 PUSH2 0x108 PUSH1 0x20 DUP6 ADD DUP6 PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x172 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x196 SWAP2 SWAP1 PUSH2 0x13A2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x285 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH4 0xC44B11F7 PUSH2 0x1C6 PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x253 SWAP2 SWAP1 PUSH2 0x14C5 JUMP JUMPDEST MLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP3 PUSH1 0x10 DUP4 SWAP1 SHR DUP3 AND SWAP3 PUSH1 0x20 DUP2 SWAP1 SHR DUP4 AND SWAP3 PUSH1 0xFF PUSH1 0x30 DUP4 SWAP1 SHR DUP2 AND SWAP4 PUSH1 0x40 DUP5 SWAP1 SHR SWAP1 SWAP3 AND SWAP3 PUSH1 0xA8 SHR AND SWAP1 JUMP JUMPDEST POP SWAP1 SWAP5 POP PUSH1 0x0 SWAP4 POP PUSH32 0xC222EC8A00000000000000000000000000000000000000000000000000000000 SWAP3 POP DUP8 SWAP2 POP PUSH2 0x2C2 SWAP1 POP PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST PUSH2 0x2D2 PUSH1 0x40 DUP9 ADD PUSH1 0x20 DUP10 ADD PUSH2 0x126D JUMP JUMPDEST DUP6 PUSH2 0x2E0 PUSH1 0x40 DUP11 ADD DUP11 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x2ED PUSH1 0x60 DUP13 ADD DUP13 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x2FA PUSH1 0xA0 DUP15 ADD DUP15 PUSH2 0x14E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x313 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1596 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 0x140 DUP5 ADD MLOAD SWAP1 SWAP2 POP PUSH2 0x3B3 SWAP1 PUSH2 0x3AD PUSH1 0xA0 DUP8 ADD PUSH1 0x80 DUP9 ADD PUSH2 0x126D JUMP JUMPDEST DUP4 PUSH2 0xE6A JUMP JUMPDEST PUSH2 0x3C3 PUSH1 0xA0 DUP6 ADD PUSH1 0x80 DUP7 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x140 DUP5 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP2 AND PUSH2 0x3F0 PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x9439658A562A5C46B1173589DF89CF001483D685BAD28AEDAFF4A88656292D81 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH4 0x35EA6A75 PUSH2 0x464 PUSH1 0x20 DUP6 ADD DUP6 PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4F2 SWAP2 SWAP1 PUSH2 0x13A2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x522 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH4 0xC44B11F7 PUSH2 0x1C6 PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST POP POP SWAP4 POP POP POP POP PUSH1 0x0 PUSH4 0x183FB413 PUSH1 0xE0 SHL DUP6 DUP6 PUSH1 0x20 ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x547 SWAP2 SWAP1 PUSH2 0x126D JUMP JUMPDEST PUSH2 0x554 PUSH1 0x20 DUP9 ADD DUP9 PUSH2 0x126D JUMP JUMPDEST PUSH2 0x564 PUSH1 0x60 DUP10 ADD PUSH1 0x40 DUP11 ADD PUSH2 0x126D JUMP JUMPDEST DUP7 PUSH2 0x572 PUSH1 0x60 DUP12 ADD DUP12 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x57F PUSH1 0x80 DUP14 ADD DUP14 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x58C PUSH1 0xC0 DUP16 ADD DUP16 PUSH2 0x14E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x5A6 SWAP12 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1617 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 0x100 DUP5 ADD MLOAD SWAP1 SWAP2 POP PUSH2 0x640 SWAP1 PUSH2 0x3AD PUSH1 0xC0 DUP8 ADD PUSH1 0xA0 DUP9 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x650 PUSH1 0xC0 DUP6 ADD PUSH1 0xA0 DUP7 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x100 DUP5 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP2 AND PUSH2 0x67D PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xA76F65411EC66A7FB6BC467432EB14767900449AE4469FA295E4441FE5E1CB73 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x801 PUSH2 0x6D8 PUSH1 0x20 DUP5 ADD DUP5 PUSH2 0x126D JUMP JUMPDEST PUSH32 0x183FB41300000000000000000000000000000000000000000000000000000000 DUP6 PUSH2 0x70A PUSH1 0xE0 DUP8 ADD PUSH1 0xC0 DUP9 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x71A PUSH1 0xC0 DUP9 ADD PUSH1 0xA0 DUP10 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x72B PUSH2 0x100 DUP10 ADD PUSH1 0xE0 DUP11 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x73B PUSH1 0x80 DUP11 ADD PUSH1 0x60 DUP12 ADD PUSH2 0x16A4 JUMP JUMPDEST PUSH2 0x749 PUSH2 0x100 DUP12 ADD DUP12 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x757 PUSH2 0x120 DUP14 ADD DUP14 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x765 PUSH2 0x1C0 DUP16 ADD DUP16 PUSH2 0x14E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x77F SWAP12 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x16C7 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 0xEF8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x8AE PUSH2 0x818 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x126D JUMP JUMPDEST PUSH32 0xC222EC8A00000000000000000000000000000000000000000000000000000000 DUP7 PUSH2 0x84A PUSH1 0xC0 DUP9 ADD PUSH1 0xA0 DUP10 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x85B PUSH2 0x100 DUP10 ADD PUSH1 0xE0 DUP11 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x86B PUSH1 0x80 DUP11 ADD PUSH1 0x60 DUP12 ADD PUSH2 0x16A4 JUMP JUMPDEST PUSH2 0x879 PUSH2 0x180 DUP12 ADD DUP12 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x887 PUSH2 0x1A0 DUP14 ADD DUP14 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x895 PUSH2 0x1C0 DUP16 ADD DUP16 PUSH2 0x14E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x77F SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x171B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x945 PUSH2 0x8C5 PUSH1 0x60 DUP7 ADD PUSH1 0x40 DUP8 ADD PUSH2 0x126D JUMP JUMPDEST PUSH32 0xC222EC8A00000000000000000000000000000000000000000000000000000000 DUP8 PUSH2 0x8F7 PUSH1 0xC0 DUP10 ADD PUSH1 0xA0 DUP11 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x908 PUSH2 0x100 DUP11 ADD PUSH1 0xE0 DUP12 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x918 PUSH1 0x80 DUP12 ADD PUSH1 0x60 DUP13 ADD PUSH2 0x16A4 JUMP JUMPDEST PUSH2 0x926 PUSH2 0x140 DUP13 ADD DUP13 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0x934 PUSH2 0x160 DUP15 ADD DUP15 PUSH2 0x14E1 JUMP JUMPDEST DUP15 DUP1 PUSH2 0x1C0 ADD SWAP1 PUSH2 0x895 SWAP2 SWAP1 PUSH2 0x14E1 JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH4 0x7A708E92 PUSH2 0x973 PUSH1 0xC0 DUP8 ADD PUSH1 0xA0 DUP9 ADD PUSH2 0x126D JUMP JUMPDEST DUP6 DUP6 DUP6 PUSH2 0x986 PUSH1 0xA0 DUP12 ADD PUSH1 0x80 DUP13 ADD PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xE0 DUP8 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP4 DUP6 AND PUSH1 0x24 DUP6 ADD MSTORE SWAP2 DUP5 AND PUSH1 0x44 DUP5 ADD MSTORE DUP4 AND PUSH1 0x64 DUP4 ADD MSTORE SWAP1 SWAP2 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA1F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE SWAP2 POP PUSH2 0xA51 SWAP1 POP PUSH2 0xA47 PUSH1 0x80 DUP8 ADD PUSH1 0x60 DUP9 ADD PUSH2 0x16A4 JUMP JUMPDEST DUP3 SWAP1 PUSH1 0xFF AND PUSH2 0xFD3 JUMP JUMPDEST PUSH2 0xA5C DUP2 PUSH1 0x1 PUSH2 0x107C JUMP JUMPDEST PUSH2 0xA67 DUP2 PUSH1 0x0 PUSH2 0x10C1 JUMP JUMPDEST PUSH2 0xA72 DUP2 PUSH1 0x0 PUSH2 0x1106 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH4 0xF51E435B PUSH2 0xA9E PUSH1 0xC0 DUP9 ADD PUSH1 0xA0 DUP10 ADD PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB1F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 POP PUSH2 0xB4B PUSH1 0xC0 DUP8 ADD PUSH1 0xA0 DUP9 ADD PUSH2 0x126D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x3A0CA721FC364424566385A1AA271ED508CC2C0949C2272575FB3013A163A45F DUP6 DUP6 PUSH2 0xB94 PUSH1 0xA0 DUP12 ADD PUSH1 0x80 DUP13 ADD PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 DUP5 AND PUSH1 0x20 DUP5 ADD MSTORE SWAP3 AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH4 0x35EA6A75 PUSH2 0xBFE PUSH1 0x20 DUP6 ADD DUP6 PUSH2 0x126D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC68 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC8C SWAP2 SWAP1 PUSH2 0x13A2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xCBC PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH4 0xC44B11F7 PUSH2 0x1C6 PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST POP SWAP1 SWAP5 POP PUSH1 0x0 SWAP4 POP PUSH32 0xC222EC8A00000000000000000000000000000000000000000000000000000000 SWAP3 POP DUP8 SWAP2 POP PUSH2 0xCF9 SWAP1 POP PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST PUSH2 0xD09 PUSH1 0x40 DUP9 ADD PUSH1 0x20 DUP10 ADD PUSH2 0x126D JUMP JUMPDEST DUP6 PUSH2 0xD17 PUSH1 0x40 DUP11 ADD DUP11 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0xD24 PUSH1 0x60 DUP13 ADD DUP13 PUSH2 0x14E1 JUMP JUMPDEST PUSH2 0xD31 PUSH1 0xA0 DUP15 ADD DUP15 PUSH2 0x14E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xD4A SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1596 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 0x120 DUP5 ADD MLOAD SWAP1 SWAP2 POP PUSH2 0xDE4 SWAP1 PUSH2 0x3AD PUSH1 0xA0 DUP8 ADD PUSH1 0x80 DUP9 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0xDF4 PUSH1 0xA0 DUP6 ADD PUSH1 0x80 DUP7 ADD PUSH2 0x126D JUMP JUMPDEST PUSH2 0x120 DUP5 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP2 AND PUSH2 0xE21 PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x126D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x7A943A5B6C214BF7726C069A878B1E2A8E7371981D516048B84E03743E67BC28 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4F1EF28600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP4 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x4F1EF286 SWAP1 PUSH2 0xEC0 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x17D1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xEDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xEEE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 ADDRESS PUSH1 0x40 MLOAD PUSH2 0xF08 SWAP1 PUSH2 0x114B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0xF41 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0xD1F5789400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0xD1F57894 SWAP1 PUSH2 0xF99 SWAP1 DUP8 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x17D1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xFB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xFC7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP SWAP3 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3636000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP3 GT ISZERO PUSH2 0x104C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1043 SWAP2 SWAP1 PUSH2 0x1808 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF AND PUSH1 0x30 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x38 DUP2 PUSH2 0x108A JUMPI PUSH1 0x0 PUSH2 0x108D JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x3C DUP2 PUSH2 0x10CF JUMPI PUSH1 0x0 PUSH2 0x10D2 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x39 DUP2 PUSH2 0x1114 JUMPI PUSH1 0x0 PUSH2 0x1117 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH2 0x9CB DUP1 PUSH2 0x181C DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x117A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1190 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x119B DUP2 PUSH2 0x1158 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x11B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0xC0 DUP2 DUP7 SUB SLT ISZERO PUSH2 0x11C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x11E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x11F2 DUP2 PUSH2 0x1158 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x120E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0xE0 DUP2 DUP7 SUB SLT ISZERO PUSH2 0x11C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x123E DUP2 PUSH2 0x1158 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x125A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH2 0x1E0 DUP2 DUP7 SUB SLT ISZERO PUSH2 0x11C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x127F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x128A DUP2 PUSH2 0x1158 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x12DC JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x12F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x133E JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x136B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x136B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x136B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x136B DUP2 PUSH2 0x1158 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x13B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x13BD PUSH2 0x1291 JUMP JUMPDEST PUSH2 0x13C7 DUP5 DUP5 PUSH2 0x12E2 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x13D5 PUSH1 0x20 DUP5 ADD PUSH2 0x134B JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x13E6 PUSH1 0x40 DUP5 ADD PUSH2 0x134B JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x13F7 PUSH1 0x60 DUP5 ADD PUSH2 0x134B JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x1408 PUSH1 0x80 DUP5 ADD PUSH2 0x134B JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x1419 PUSH1 0xA0 DUP5 ADD PUSH2 0x134B JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x142A PUSH1 0xC0 DUP5 ADD PUSH2 0x1370 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x143B PUSH1 0xE0 DUP5 ADD PUSH2 0x1385 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x144E DUP2 DUP6 ADD PUSH2 0x1397 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x1460 DUP5 DUP3 ADD PUSH2 0x1397 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x1472 DUP5 DUP3 ADD PUSH2 0x1397 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x1484 DUP5 DUP3 ADD PUSH2 0x1397 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x1496 DUP5 DUP3 ADD PUSH2 0x134B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x14A8 DUP5 DUP3 ADD PUSH2 0x134B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x14BA DUP5 DUP3 ADD PUSH2 0x134B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x14D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x128A DUP4 DUP4 PUSH2 0x12E2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x1516 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1531 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x1546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 ADD ADD MSTORE PUSH1 0x0 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP5 ADD ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 AND DUP4 MSTORE DUP1 DUP13 AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 DUP12 AND PUSH1 0x40 DUP5 ADD MSTORE POP DUP9 PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xE0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x15DE PUSH1 0xE0 DUP4 ADD DUP9 DUP11 PUSH2 0x154D JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x15F1 DUP2 DUP8 DUP10 PUSH2 0x154D JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x1606 DUP2 DUP6 DUP8 PUSH2 0x154D JUMP JUMPDEST SWAP14 SWAP13 POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP16 AND DUP5 MSTORE DUP1 DUP15 AND PUSH1 0x20 DUP6 ADD MSTORE DUP1 DUP14 AND PUSH1 0x40 DUP6 ADD MSTORE DUP1 DUP13 AND PUSH1 0x60 DUP6 ADD MSTORE POP DUP10 PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x1668 DUP2 DUP5 ADD DUP10 DUP12 PUSH2 0x154D JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x167D DUP2 DUP8 DUP10 PUSH2 0x154D JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x1692 DUP2 DUP6 DUP8 PUSH2 0x154D JUMP JUMPDEST SWAP15 SWAP14 POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x16B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x128A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x100 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP16 AND DUP5 MSTORE DUP1 DUP15 AND PUSH1 0x20 DUP6 ADD MSTORE DUP1 DUP14 AND PUSH1 0x40 DUP6 ADD MSTORE DUP1 DUP13 AND PUSH1 0x60 DUP6 ADD MSTORE POP PUSH1 0xFF DUP11 AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x1668 DUP2 DUP5 ADD DUP10 DUP12 PUSH2 0x154D JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 AND DUP4 MSTORE DUP1 DUP13 AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 DUP12 AND PUSH1 0x40 DUP5 ADD MSTORE POP PUSH1 0xFF DUP10 AND PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xE0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x15DE PUSH1 0xE0 DUP4 ADD DUP9 DUP11 PUSH2 0x154D JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x178C JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x1770 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x179E JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x1800 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x1766 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x128A PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1766 JUMP INVALID PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x9CB CODESIZE SUB DUP1 PUSH2 0x9CB DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH2 0x70 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x91D PUSH2 0xAE PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x14F ADD MSTORE DUP2 DUP2 PUSH2 0x1A1 ADD MSTORE DUP2 DUP2 PUSH2 0x274 ADD MSTORE DUP2 DUP2 PUSH2 0x411 ADD MSTORE DUP2 DUP2 PUSH2 0x43A ADD MSTORE PUSH2 0x5A4 ADD MSTORE PUSH2 0x91D PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0xD1F57894 EQ PUSH2 0xD5 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xE8 JUMPI PUSH2 0x5A JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x84 JUMPI JUMPDEST PUSH2 0x62 PUSH2 0xFD JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x62 PUSH2 0x7F CALLDATASIZE PUSH1 0x4 PUSH2 0x67B JUMP JUMPDEST PUSH2 0x137 JUMP JUMPDEST PUSH2 0x62 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x69D JUMP JUMPDEST PUSH2 0x189 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x25A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x62 PUSH2 0xE3 CALLDATASIZE PUSH1 0x4 PUSH2 0x74F JUMP JUMPDEST PUSH2 0x2CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAC PUSH2 0x3F7 JUMP JUMPDEST PUSH2 0x105 PUSH2 0x45C JUMP JUMPDEST PUSH2 0x135 PUSH2 0x130 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x464 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x181 JUMPI PUSH2 0x17E DUP2 PUSH2 0x488 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x17E PUSH2 0xFD JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x24D JUMPI PUSH2 0x1D0 DUP4 PUSH2 0x488 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1F9 SWAP3 SWAP2 SWAP1 PUSH2 0x82F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x234 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 0x239 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x247 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x255 PUSH2 0xFD JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x2C0 JUMPI POP PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2C8 PUSH2 0xFD JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F5 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x315 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x340 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0x83F JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC EQ PUSH2 0x36E JUMPI PUSH2 0x36E PUSH2 0x87D JUMP JUMPDEST PUSH2 0x377 DUP3 PUSH2 0x4D5 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x3F3 JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x40 MLOAD PUSH2 0x3A5 SWAP2 SWAP1 PUSH2 0x8AC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x3E0 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 0x3E5 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x255 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x2C0 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x135 PUSH2 0x58C JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x483 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x491 DUP2 PUSH2 0x4D5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 EXTCODESIZE PUSH2 0x568 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742073657420612070726F787920696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E20746F2061206E6F6E2D636F6E747261637420616464726573730000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x135 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x32 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616E6E6F742063616C6C2066616C6C6261636B2066756E6374696F6E206672 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F6D207468652070726F78792061646D696E0000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x55F JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x676 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x68D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x696 DUP3 PUSH2 0x652 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x6B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6BB DUP5 PUSH2 0x652 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x6D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x6EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x6FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x762 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x76B DUP4 PUSH2 0x652 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x788 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x79C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x7AE JUMPI PUSH2 0x7AE PUSH2 0x720 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x7F4 JUMPI PUSH2 0x7F4 PUSH2 0x720 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x80D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 DUP3 CALLDATACOPY PUSH1 0x0 SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x878 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x8CD JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x8B3 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x8DC JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF9 ISZERO PUSH32 0xC154BA5797DBF9F1C996264175793CC650E7132A50AACD715276ED42A364736F PUSH13 0x634300080A0033A26469706673 PC 0x22 SLT KECCAK256 SWAP14 0xD7 DUP12 CALLCODE 0xE2 LOG3 0xB6 EXTCODEHASH 0x2D BLOCKHASH 0xC2 CALLCODE 0xB3 0x4A 0xA6 EXTCODEHASH EXP 0xE8 PUSH6 0xB4629B326BD8 SWAP9 LOG2 0xDD 0x4E 0x25 RETURNDATASIZE 0xDF PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"786:7674:78:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6318:842;;;;;;;;;;-1:-1:-1;6318:842:78;;;;;:::i;:::-;;:::i;:::-;;4130:766;;;;;;;;;;-1:-1:-1;4130:766:78;;;;;:::i;:::-;;:::i;1796:2074::-;;;;;;;;;;-1:-1:-1;1796:2074:78;;;;;:::i;:::-;;:::i;5187:834::-;;;;;;;;;;-1:-1:-1;5187:834:78;;;;;:::i;:::-;;:::i;6318:842::-;6461:40;6504:25;;;;6530:11;;;;:5;:11;:::i;:::-;6504:38;;;;;;;;;;2294:42:201;2282:55;;;6504:38:78;;;2264:74:201;2237:18;;6504:38:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6461:81;-1:-1:-1;6556:16:78;6580:52;:27;;;;6608:11;;;;:5;:11;:::i;:::-;6580:40;;;;;;;;;;2294:42:201;2282:55;;;6580:40:78;;;2264:74:201;2237:18;;6580:40:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22631:9:72;22674;22662:21;;;;3298:2;22691:85;;;;;;3369:2;22784:77;;;;;;22869:67;3439:2;22869:67;;;;;;4063:2;22944:71;;;;;;;4339:3;23023:71;;;22454:651;6580:52:78;-1:-1:-1;6549:83:78;;-1:-1:-1;6639:24:78;;-1:-1:-1;6696:43:78;;-1:-1:-1;6747:10:78;;-1:-1:-1;6765:11:78;;-1:-1:-1;6765:11:78;;;:5;:11;:::i;:::-;6784:26;;;;;;;;:::i;:::-;6818:8;6834:10;;;;:5;:10;:::i;:::-;6852:12;;;;:5;:12;:::i;:::-;6872;;;;:5;:12;:::i;:::-;6666:224;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6932:36;;;;6666:224;;-1:-1:-1;6897:124:78;;6976:20;;;;;;;;:::i;:::-;7004:11;6897:27;:124::i;:::-;7129:20;;;;;;;;:::i;:::-;7085:36;;;;7033:122;;;;;;7066:11;;;;:5;:11;:::i;:::-;7033:122;;;;;;;;;;;;6455:705;;;6318:842;;:::o;4130:766::-;4259:40;4302:25;;;;4328:11;;;;:5;:11;:::i;:::-;4302:38;;;;;;;;;;2294:42:201;2282:55;;;4302:38:78;;;2264:74:201;2237:18;;4302:38:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4259:81;-1:-1:-1;4354:16:78;4378:52;:27;;;;4406:11;;;;:5;:11;:::i;4378:52::-;4347:83;;;;;;;4437:24;4494:40;;;4542:10;4560:5;:14;;;;;;;;;;:::i;:::-;4582:11;;;;:5;:11;:::i;:::-;4601:26;;;;;;;;:::i;:::-;4635:8;4651:10;;;;:5;:10;:::i;:::-;4669:12;;;;:5;:12;:::i;:::-;4689;;;;:5;:12;:::i;:::-;4464:243;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4742:25;;;;4464:243;;-1:-1:-1;4714:89:78;;4769:20;;;;;;;;:::i;4714:89::-;4870:20;;;;;;;;:::i;:::-;4843:25;;;;4815:76;;;;;;4830:11;;;;:5;:11;:::i;:::-;4815:76;;;;;;;;;;;;4253:643;;;4130:766;;:::o;1796:2074::-;1917:26;1946:357;1973:16;;;;:5;:16;:::i;:::-;2029:40;2079:4;2093:14;2029:40;2093:14;;;;;;:::i;:::-;2117:21;;;;;;;;:::i;:::-;2148:26;;;;;;;;:::i;:::-;2184:29;;;;;;;;:::i;:::-;2223:16;;;;:5;:16;:::i;:::-;2249:18;;;;:5;:18;:::i;:::-;2277:12;;;;:5;:12;:::i;:::-;1997:300;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1946:19;:357::i;:::-;1917:386;-1:-1:-1;2310:35:78;2348:363;2375:25;;;;;;;;:::i;:::-;2440:43;2493:4;2507:21;;;;;;;;:::i;:::-;2538:26;;;;;;;;:::i;:::-;2574:29;;;;;;;;:::i;:::-;2613:25;;;;:5;:25;:::i;:::-;2648:27;;;;:5;:27;:::i;:::-;2685:12;;;;:5;:12;:::i;:::-;2408:297;;;;;;;;;;;;;;;;;:::i;2348:363::-;2310:401;-1:-1:-1;2718:37:78;2758:369;2785:27;;;;;;;;:::i;:::-;2852:43;2905:4;2919:21;;;;;;;;:::i;:::-;2950:26;;;;;;;;:::i;:::-;2986:29;;;;;;;;:::i;:::-;3025:27;;;;:5;:27;:::i;:::-;3062:29;;;;:5;:29;:::i;:::-;3101:5;:12;;;;;;;;:::i;2758:369::-;2718:409;-1:-1:-1;3134:16:78;;;;3158:21;;;;;;;;:::i;:::-;3187:18;3213:27;3248:29;3285:33;;;;;;;;:::i;:::-;3134:190;;;;;;;;;;12317:42:201;12386:15;;;3134:190:78;;;12368:34:201;12438:15;;;12418:18;;;12411:43;12490:15;;;12470:18;;;12463:43;12542:15;;12522:18;;;12515:43;12595:15;;;12574:19;;;12567:44;12279:19;;3134:190:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3388:36:78;;;;;;;;;3331:54;3388:36;;;-1:-1:-1;3431:56:78;;-1:-1:-1;3457:29:78;;;;;;;;:::i;:::-;3431:13;;:56;;:25;:56::i;:::-;3494:29;:13;3518:4;3494:23;:29::i;:::-;3529:30;:13;3553:5;3529:23;:30::i;:::-;3565;:13;3589:5;3565:23;:30::i;:::-;3602:21;;;;3624;;;;;;;;:::i;:::-;3602:59;;;;;;;;;;12910:42:201;12898:55;;;3602:59:78;;;12880:74:201;12990:13;;12970:18;;;12963:41;12853:18;;3602:59:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3673:192:78;;;;-1:-1:-1;3699:21:78;;;;;;;;:::i;:::-;3673:192;;;3754:27;3789:29;3826:33;;;;;;;;:::i;:::-;3673:192;;;13227:42:201;13296:15;;;13278:34;;13348:15;;;13343:2;13328:18;;13321:43;13400:15;;13380:18;;;13373:43;3673:192:78;;;;;;13205:2:201;3673:192:78;;;1911:1959;;;;1796:2074;;:::o;5187:834::-;5328:40;5371:25;;;;5397:11;;;;:5;:11;:::i;:::-;5371:38;;;;;;;;;;2294:42:201;2282:55;;;5371:38:78;;;2264:74:201;2237:18;;5371:38:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5328:81;-1:-1:-1;5423:16:78;5447:52;:27;;;;5475:11;;;;:5;:11;:::i;5447:52::-;-1:-1:-1;5416:83:78;;-1:-1:-1;5506:24:78;;-1:-1:-1;5563:43:78;;-1:-1:-1;5614:10:78;;-1:-1:-1;5632:11:78;;-1:-1:-1;5632:11:78;;;:5;:11;:::i;:::-;5651:26;;;;;;;;:::i;:::-;5685:8;5701:10;;;;:5;:10;:::i;:::-;5719:12;;;;:5;:12;:::i;:::-;5739;;;;:5;:12;:::i;:::-;5533:224;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5799:34;;;;5533:224;;-1:-1:-1;5764:122:78;;5841:20;;;;;;;;:::i;5764:122::-;5990:20;;;;;;;;:::i;:::-;5948:34;;;;5898:118;;;;;;5929:11;;;;:5;:11;:::i;:::-;5898:118;;;;;;;;;;;;5322:699;;;5187:834;;:::o;8117:341::-;8403:50;;;;;8375:12;;8403:22;;;;;;:50;;8426:14;;8442:10;;8403:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8250:208;8117:341;;;:::o;7440:343::-;7548:7;7563:52;7686:4;7618:81;;;;;:::i;:::-;2294:42:201;2282:55;;;2264:74;;2252:2;2237:18;7618:81:78;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7706:44:78;;;;;7563:136;;-1:-1:-1;7706:16:78;;;;;;:44;;7723:14;;7739:10;;7706:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7772:5:78;;7440:343;-1:-1:-1;;;;;;7440:343:78:o;7793:285:72:-;7951:23;;;;;;;;;;;;;;;;;4718:3;7919:30;;;7911:64;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;7995:9:72;;833:66;7995:25;3439:2;8025:47;;;;7994:79;7982:91;;7793:285::o;8584:213::-;3502:2;8744:6;:14;;8757:1;8744:14;;;8753:1;8744:14;8702:9;;981:66;8702:23;8736;;;;;:55;;;8701:91;8683:109;;;-1:-1:-1;8584:213:72:o;9866:::-;3777:2;10026:6;:14;;10039:1;10026:14;;;10035:1;10026:14;9984:9;;1573:66;9984:23;10018;;;;;:55;;;9983:91;9965:109;;;-1:-1:-1;9866:213:72:o;9225:::-;3565:2;9385:6;:14;;9398:1;9385:14;;;9394:1;9385:14;9343:9;;1129:66;9343:23;9377;;;;;:55;;;9342:91;9324:109;;;-1:-1:-1;9225:213:72:o;-1:-1:-1:-;;;;;;;;:::o;14:161:201:-;107:42;100:5;96:54;89:5;86:65;76:93;;165:1;162;155:12;76:93;14:161;:::o;180:557::-;303:6;311;364:2;352:9;343:7;339:23;335:32;332:52;;;380:1;377;370:12;332:52;419:9;406:23;438:38;470:5;438:38;:::i;:::-;495:5;-1:-1:-1;551:2:201;536:18;;523:32;578:18;567:30;;564:50;;;610:1;607;600:12;564:50;633:22;;689:3;671:16;;;667:26;664:46;;;706:1;703;696:12;664:46;729:2;719:12;;;180:557;;;;;:::o;742:554::-;862:6;870;923:2;911:9;902:7;898:23;894:32;891:52;;;939:1;936;929:12;891:52;978:9;965:23;997:38;1029:5;997:38;:::i;:::-;1054:5;-1:-1:-1;1110:2:201;1095:18;;1082:32;1137:18;1126:30;;1123:50;;;1169:1;1166;1159:12;1123:50;1192:22;;1248:3;1230:16;;;1226:26;1223:46;;;1265:1;1262;1255:12;1301:553;1420:6;1428;1481:2;1469:9;1460:7;1456:23;1452:32;1449:52;;;1497:1;1494;1487:12;1449:52;1536:9;1523:23;1555:38;1587:5;1555:38;:::i;:::-;1612:5;-1:-1:-1;1668:2:201;1653:18;;1640:32;1695:18;1684:30;;1681:50;;;1727:1;1724;1717:12;1681:50;1750:22;;1806:3;1788:16;;;1784:26;1781:46;;;1823:1;1820;1813:12;1859:254;1918:6;1971:2;1959:9;1950:7;1946:23;1942:32;1939:52;;;1987:1;1984;1977:12;1939:52;2026:9;2013:23;2045:38;2077:5;2045:38;:::i;:::-;2102:5;1859:254;-1:-1:-1;;;1859:254:201:o;2349:401::-;2416:2;2410:9;2458:3;2446:16;;2492:18;2477:34;;2513:22;;;2474:62;2471:242;;;2569:77;2566:1;2559:88;2670:4;2667:1;2660:15;2698:4;2695:1;2688:15;2471:242;2729:2;2722:22;2349:401;:::o;2755:580::-;2836:5;2884:4;2872:9;2867:3;2863:19;2859:30;2856:50;;;2902:1;2899;2892:12;2856:50;2935:2;2929:9;2977:4;2969:6;2965:17;3048:6;3036:10;3033:22;3012:18;3000:10;2997:34;2994:62;2991:242;;;3089:77;3086:1;3079:88;3190:4;3187:1;3180:15;3218:4;3215:1;3208:15;2991:242;3249:2;3242:22;3312:16;;3297:32;;-1:-1:-1;3282:6:201;2755:580;-1:-1:-1;2755:580:201:o;3340:192::-;3419:13;;3472:34;3461:46;;3451:57;;3441:85;;3522:1;3519;3512:12;3441:85;3340:192;;;:::o;3537:169::-;3615:13;;3668:12;3657:24;;3647:35;;3637:63;;3696:1;3693;3686:12;3711:163;3789:13;;3842:6;3831:18;;3821:29;;3811:57;;3864:1;3861;3854:12;3879:145;3958:13;;3980:38;3958:13;3980:38;:::i;4029:1647::-;4129:6;4182:3;4170:9;4161:7;4157:23;4153:33;4150:53;;;4199:1;4196;4189:12;4150:53;4225:17;;:::i;:::-;4265:72;4329:7;4318:9;4265:72;:::i;:::-;4258:5;4251:87;4370:49;4415:2;4404:9;4400:18;4370:49;:::i;:::-;4365:2;4358:5;4354:14;4347:73;4452:49;4497:2;4486:9;4482:18;4452:49;:::i;:::-;4447:2;4440:5;4436:14;4429:73;4534:49;4579:2;4568:9;4564:18;4534:49;:::i;:::-;4529:2;4522:5;4518:14;4511:73;4617:50;4662:3;4651:9;4647:19;4617:50;:::i;:::-;4611:3;4604:5;4600:15;4593:75;4701:50;4746:3;4735:9;4731:19;4701:50;:::i;:::-;4695:3;4688:5;4684:15;4677:75;4785:49;4829:3;4818:9;4814:19;4785:49;:::i;:::-;4779:3;4772:5;4768:15;4761:74;4868:49;4912:3;4901:9;4897:19;4868:49;:::i;:::-;4862:3;4855:5;4851:15;4844:74;4937:3;4972:49;5017:2;5006:9;5002:18;4972:49;:::i;:::-;4956:14;;;4949:73;5041:3;5076:49;5106:18;;;5076:49;:::i;:::-;5060:14;;;5053:73;5145:3;5180:49;5210:18;;;5180:49;:::i;:::-;5164:14;;;5157:73;5249:3;5284:49;5314:18;;;5284:49;:::i;:::-;5268:14;;;5261:73;5353:3;5388:49;5418:18;;;5388:49;:::i;:::-;5372:14;;;5365:73;5457:3;5492:49;5522:18;;;5492:49;:::i;:::-;5476:14;;;5469:73;5561:3;5596:49;5626:18;;;5596:49;:::i;:::-;5580:14;;;5573:73;5584:5;4029:1647;-1:-1:-1;;;4029:1647:201:o;5681:282::-;5793:6;5846:2;5834:9;5825:7;5821:23;5817:32;5814:52;;;5862:1;5859;5852:12;5814:52;5885:72;5949:7;5938:9;5885:72;:::i;5968:581::-;6046:4;6052:6;6112:11;6099:25;6202:66;6191:8;6175:14;6171:29;6167:102;6147:18;6143:127;6133:155;;6284:1;6281;6274:12;6133:155;6311:33;;6363:20;;;-1:-1:-1;6406:18:201;6395:30;;6392:50;;;6438:1;6435;6428:12;6392:50;6471:4;6459:17;;-1:-1:-1;6502:14:201;6498:27;;;6488:38;;6485:58;;;6539:1;6536;6529:12;6485:58;5968:581;;;;;:::o;7139:326::-;7228:6;7223:3;7216:19;7280:6;7273:5;7266:4;7261:3;7257:14;7244:43;;7332:1;7325:4;7316:6;7311:3;7307:16;7303:27;7296:38;7198:3;7454:4;7384:66;7379:2;7371:6;7367:15;7363:88;7358:3;7354:98;7350:109;7343:116;;7139:326;;;;:::o;7470:1016::-;7832:4;7861:42;7942:2;7934:6;7930:15;7919:9;7912:34;7994:2;7986:6;7982:15;7977:2;7966:9;7962:18;7955:43;8046:2;8038:6;8034:15;8029:2;8018:9;8014:18;8007:43;;8086:6;8081:2;8070:9;8066:18;8059:34;8130:3;8124;8113:9;8109:19;8102:32;8157:63;8215:3;8204:9;8200:19;8192:6;8184;8157:63;:::i;:::-;8269:9;8261:6;8257:22;8251:3;8240:9;8236:19;8229:51;8303:50;8346:6;8338;8330;8303:50;:::i;:::-;8289:64;;8402:9;8394:6;8390:22;8384:3;8373:9;8369:19;8362:51;8430:50;8473:6;8465;8457;8430:50;:::i;:::-;8422:58;7470:1016;-1:-1:-1;;;;;;;;;;;;;7470:1016:201:o;8491:1119::-;8882:4;8911:3;8933:42;9014:2;9006:6;9002:15;8991:9;8984:34;9066:2;9058:6;9054:15;9049:2;9038:9;9034:18;9027:43;9118:2;9110:6;9106:15;9101:2;9090:9;9086:18;9079:43;9170:2;9162:6;9158:15;9153:2;9142:9;9138:18;9131:43;;9211:6;9205:3;9194:9;9190:19;9183:35;9255:2;9249:3;9238:9;9234:19;9227:31;9281:62;9339:2;9328:9;9324:18;9316:6;9308;9281:62;:::i;:::-;9267:76;;9392:9;9384:6;9380:22;9374:3;9363:9;9359:19;9352:51;9426:50;9469:6;9461;9453;9426:50;:::i;:::-;9412:64;;9525:9;9517:6;9513:22;9507:3;9496:9;9492:19;9485:51;9553;9597:6;9588:7;9580:6;9553:51;:::i;:::-;9545:59;8491:1119;-1:-1:-1;;;;;;;;;;;;;;8491:1119:201:o;9615:269::-;9672:6;9725:2;9713:9;9704:7;9700:23;9696:32;9693:52;;;9741:1;9738;9731:12;9693:52;9780:9;9767:23;9830:4;9823:5;9819:16;9812:5;9809:27;9799:55;;9850:1;9847;9840:12;9889:1126;10276:4;10305:3;10327:42;10408:2;10400:6;10396:15;10385:9;10378:34;10460:2;10452:6;10448:15;10443:2;10432:9;10428:18;10421:43;10512:2;10504:6;10500:15;10495:2;10484:9;10480:18;10473:43;10564:2;10556:6;10552:15;10547:2;10536:9;10532:18;10525:43;;10617:4;10609:6;10605:17;10599:3;10588:9;10584:19;10577:46;10660:2;10654:3;10643:9;10639:19;10632:31;10686:62;10744:2;10733:9;10729:18;10721:6;10713;10686:62;:::i;11020:1023::-;11378:4;11407:42;11488:2;11480:6;11476:15;11465:9;11458:34;11540:2;11532:6;11528:15;11523:2;11512:9;11508:18;11501:43;11592:2;11584:6;11580:15;11575:2;11564:9;11560:18;11553:43;;11644:4;11636:6;11632:17;11627:2;11616:9;11612:18;11605:45;11687:3;11681;11670:9;11666:19;11659:32;11714:63;11772:3;11761:9;11757:19;11749:6;11741;11714:63;:::i;13427:530::-;13468:3;13506:5;13500:12;13533:6;13528:3;13521:19;13558:1;13568:162;13582:6;13579:1;13576:13;13568:162;;;13644:4;13700:13;;;13696:22;;13690:29;13672:11;;;13668:20;;13661:59;13597:12;13568:162;;;13748:6;13745:1;13742:13;13739:87;;;13814:1;13807:4;13798:6;13793:3;13789:16;13785:27;13778:38;13739:87;-1:-1:-1;13871:2:201;13859:15;13876:66;13855:88;13846:98;;;;13946:4;13842:109;;13427:530;-1:-1:-1;;13427:530:201:o;13962:337::-;14149:42;14141:6;14137:55;14126:9;14119:74;14229:2;14224;14213:9;14209:18;14202:30;14100:4;14249:44;14289:2;14278:9;14274:18;14266:6;14249:44;:::i;:::-;14241:52;13962:337;-1:-1:-1;;;;13962:337:201:o;14304:219::-;14453:2;14442:9;14435:21;14416:4;14473:44;14513:2;14502:9;14498:18;14490:6;14473:44;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"1746400","executionCost":"1869","totalCost":"1748269"},"external":{"executeInitReserve(IPool,ConfiguratorInputTypes.InitReserveInput)":"infinite","executeUpdateAToken(IPool,ConfiguratorInputTypes.UpdateATokenInput)":"infinite","executeUpdateStableDebtToken(IPool,ConfiguratorInputTypes.UpdateDebtTokenInput)":"infinite","executeUpdateVariableDebtToken(IPool,ConfiguratorInputTypes.UpdateDebtTokenInput)":"infinite"},"internal":{"_initTokenWithProxy(address,bytes memory)":"infinite","_upgradeTokenImplementation(address,address,bytes memory)":"infinite"}},"methodIdentifiers":{"executeInitReserve(IPool,ConfiguratorInputTypes.InitReserveInput)":"df59b8b2","executeUpdateAToken(IPool,ConfiguratorInputTypes.UpdateATokenInput)":"b13c96a8","executeUpdateStableDebtToken(IPool,ConfiguratorInputTypes.UpdateDebtTokenInput)":"f5b50e70","executeUpdateVariableDebtToken(IPool,ConfiguratorInputTypes.UpdateDebtTokenInput)":"b0f09355"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ATokenUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"aToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"stableDebtToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"variableDebtToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"}],\"name\":\"ReserveInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"StableDebtTokenUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"VariableDebtTokenUpgraded\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"executeInitReserve(IPool,ConfiguratorInputTypes.InitReserveInput)\":{\"details\":\"Emits the `ReserveInitialized` event\",\"params\":{\"input\":\"The needed parameters for the initialization\",\"pool\":\"The Pool in which the reserve will be initialized\"}},\"executeUpdateAToken(IPool,ConfiguratorInputTypes.UpdateATokenInput)\":{\"details\":\"Emits the `ATokenUpgraded` event\",\"params\":{\"cachedPool\":\"The Pool containing the reserve with the aToken\",\"input\":\"The parameters needed for the initialize call\"}},\"executeUpdateStableDebtToken(IPool,ConfiguratorInputTypes.UpdateDebtTokenInput)\":{\"details\":\"Emits the `StableDebtTokenUpgraded` event\",\"params\":{\"cachedPool\":\"The Pool containing the reserve with the stable debt token\",\"input\":\"The parameters needed for the initialize call\"}},\"executeUpdateVariableDebtToken(IPool,ConfiguratorInputTypes.UpdateDebtTokenInput)\":{\"details\":\"Emits the `VariableDebtTokenUpgraded` event\",\"params\":{\"cachedPool\":\"The Pool containing the reserve with the variable debt token\",\"input\":\"The parameters needed for the initialize call\"}}},\"title\":\"ConfiguratorLogic library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeInitReserve(IPool,ConfiguratorInputTypes.InitReserveInput)\":{\"notice\":\"Initialize a reserve by creating and initializing aToken, stable debt token and variable debt token\"},\"executeUpdateAToken(IPool,ConfiguratorInputTypes.UpdateATokenInput)\":{\"notice\":\"Updates the aToken implementation and initializes it\"},\"executeUpdateStableDebtToken(IPool,ConfiguratorInputTypes.UpdateDebtTokenInput)\":{\"notice\":\"Updates the stable debt token implementation and initializes it\"},\"executeUpdateVariableDebtToken(IPool,ConfiguratorInputTypes.UpdateDebtTokenInput)\":{\"notice\":\"Updates the variable debt token implementation and initializes it\"}},\"notice\":\"Implements the functions to initialize reserves and update aTokens and debtTokens\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/libraries/logic/ConfiguratorLogic.sol\":\"ConfiguratorLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './Proxy.sol';\\nimport '../contracts/Address.sol';\\n\\n/**\\n * @title BaseUpgradeabilityProxy\\n * @dev This contract implements a proxy that allows to change the\\n * implementation address to which it will delegate.\\n * Such a change is called an implementation upgrade.\\n */\\ncontract BaseUpgradeabilityProxy is Proxy {\\n  /**\\n   * @dev Emitted when the implementation is upgraded.\\n   * @param implementation Address of the new implementation.\\n   */\\n  event Upgraded(address indexed implementation);\\n\\n  /**\\n   * @dev Storage slot with the address of the current implementation.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant IMPLEMENTATION_SLOT =\\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n  /**\\n   * @dev Returns the current implementation.\\n   * @return impl Address of the current implementation\\n   */\\n  function _implementation() internal view override returns (address impl) {\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      impl := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Upgrades the proxy to a new implementation.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _upgradeTo(address newImplementation) internal {\\n    _setImplementation(newImplementation);\\n    emit Upgraded(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Sets the implementation address of the proxy.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _setImplementation(address newImplementation) internal {\\n    require(\\n      Address.isContract(newImplementation),\\n      'Cannot set a proxy implementation to a non-contract address'\\n    );\\n\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newImplementation)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe47eb278267d31f096fc643c2a322c72066abfa6ba07f6386c266fe7cbd15013\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableUpgradeabilityProxy\\n * @dev Extends BaseUpgradeabilityProxy with an initializer for initializing\\n * implementation and init data.\\n */\\ncontract InitializableUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Contract initializer.\\n   * @param _logic Address of the initial implementation.\\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\\n   */\\n  function initialize(address _logic, bytes memory _data) public payable {\\n    require(_implementation() == address(0));\\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\\n    _setImplementation(_logic);\\n    if (_data.length > 0) {\\n      (bool success, ) = _logic.delegatecall(_data);\\n      require(success);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x8a1e927b97f5da20f4640ba4d2588666910dfa89f5a2b0a37440d27e5a47ee08\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\n    assembly {\\n      // Copy msg.data. We take full control of memory in this inline assembly\\n      // block because it will not return to Solidity code. We overwrite the\\n      // Solidity scratch pad at memory position 0.\\n      calldatacopy(0, 0, calldatasize())\\n\\n      // Call the implementation.\\n      // out and outsize are 0 because we don't know the size yet.\\n      let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n      // Copy the returned data.\\n      returndatacopy(0, 0, returndatasize())\\n\\n      switch result\\n      // delegatecall returns 0 on error.\\n      case 0 {\\n        revert(0, returndatasize())\\n      }\\n      default {\\n        return(0, returndatasize())\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {BaseUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title BaseImmutableAdminUpgradeabilityProxy\\n * @author Aave, inspired by the OpenZeppelin upgradeability proxy pattern\\n * @notice This contract combines an upgradeability proxy with an authorization\\n * mechanism for administrative tasks.\\n * @dev The admin role is stored in an immutable, which helps saving transactions costs\\n * All external functions in this contract must be guarded by the\\n * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\\n * feature proposal that would enable this to be done automatically.\\n */\\ncontract BaseImmutableAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  address internal immutable _admin;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param admin The address of the admin\\n   */\\n  constructor(address admin) {\\n    _admin = admin;\\n  }\\n\\n  modifier ifAdmin() {\\n    if (msg.sender == _admin) {\\n      _;\\n    } else {\\n      _fallback();\\n    }\\n  }\\n\\n  /**\\n   * @notice Return the admin address\\n   * @return The address of the proxy admin.\\n   */\\n  function admin() external ifAdmin returns (address) {\\n    return _admin;\\n  }\\n\\n  /**\\n   * @notice Return the implementation address\\n   * @return The address of the implementation.\\n   */\\n  function implementation() external ifAdmin returns (address) {\\n    return _implementation();\\n  }\\n\\n  /**\\n   * @notice Upgrade the backing implementation of the proxy.\\n   * @dev Only the admin can call this function.\\n   * @param newImplementation The address of the new implementation.\\n   */\\n  function upgradeTo(address newImplementation) external ifAdmin {\\n    _upgradeTo(newImplementation);\\n  }\\n\\n  /**\\n   * @notice Upgrade the backing implementation of the proxy and call a function\\n   * on the new implementation.\\n   * @dev This is useful to initialize the proxied contract.\\n   * @param newImplementation The address of the new implementation.\\n   * @param data Data to send as msg.data in the low level call.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   */\\n  function upgradeToAndCall(\\n    address newImplementation,\\n    bytes calldata data\\n  ) external payable ifAdmin {\\n    _upgradeTo(newImplementation);\\n    (bool success, ) = newImplementation.delegatecall(data);\\n    require(success);\\n  }\\n\\n  /**\\n   * @notice Only fall back when the sender is not the admin.\\n   */\\n  function _willFallback() internal virtual override {\\n    require(msg.sender != _admin, 'Cannot call fallback function from the proxy admin');\\n    super._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0x11d0bbbcb776fc3519b79af975016fa342115cff9e70d982acfe3b7f86683674\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {InitializableUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol';\\nimport {Proxy} from '../../../dependencies/openzeppelin/upgradeability/Proxy.sol';\\nimport {BaseImmutableAdminUpgradeabilityProxy} from './BaseImmutableAdminUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableAdminUpgradeabilityProxy\\n * @author Aave\\n * @dev Extends BaseAdminUpgradeabilityProxy with an initializer function\\n */\\ncontract InitializableImmutableAdminUpgradeabilityProxy is\\n  BaseImmutableAdminUpgradeabilityProxy,\\n  InitializableUpgradeabilityProxy\\n{\\n  /**\\n   * @dev Constructor.\\n   * @param admin The address of the admin\\n   */\\n  constructor(address admin) BaseImmutableAdminUpgradeabilityProxy(admin) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc BaseImmutableAdminUpgradeabilityProxy\\n  function _willFallback() internal override(BaseImmutableAdminUpgradeabilityProxy, Proxy) {\\n    BaseImmutableAdminUpgradeabilityProxy._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0xea2a329a627687f51e7f1240a05406efb208b036054dc6ed5aca217cdc0020f0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ConfiguratorLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IInitializableAToken} from '../../../interfaces/IInitializableAToken.sol';\\nimport {IInitializableDebtToken} from '../../../interfaces/IInitializableDebtToken.sol';\\nimport {InitializableImmutableAdminUpgradeabilityProxy} from '../aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ConfiguratorInputTypes} from '../types/ConfiguratorInputTypes.sol';\\n\\n/**\\n * @title ConfiguratorLogic library\\n * @author Aave\\n * @notice Implements the functions to initialize reserves and update aTokens and debtTokens\\n */\\nlibrary ConfiguratorLogic {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPoolConfigurator` for descriptions\\n  event ReserveInitialized(\\n    address indexed asset,\\n    address indexed aToken,\\n    address stableDebtToken,\\n    address variableDebtToken,\\n    address interestRateStrategyAddress\\n  );\\n  event ATokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n  event StableDebtTokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n  event VariableDebtTokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n\\n  /**\\n   * @notice Initialize a reserve by creating and initializing aToken, stable debt token and variable debt token\\n   * @dev Emits the `ReserveInitialized` event\\n   * @param pool The Pool in which the reserve will be initialized\\n   * @param input The needed parameters for the initialization\\n   */\\n  function executeInitReserve(\\n    IPool pool,\\n    ConfiguratorInputTypes.InitReserveInput calldata input\\n  ) public {\\n    address aTokenProxyAddress = _initTokenWithProxy(\\n      input.aTokenImpl,\\n      abi.encodeWithSelector(\\n        IInitializableAToken.initialize.selector,\\n        pool,\\n        input.treasury,\\n        input.underlyingAsset,\\n        input.incentivesController,\\n        input.underlyingAssetDecimals,\\n        input.aTokenName,\\n        input.aTokenSymbol,\\n        input.params\\n      )\\n    );\\n\\n    address stableDebtTokenProxyAddress = _initTokenWithProxy(\\n      input.stableDebtTokenImpl,\\n      abi.encodeWithSelector(\\n        IInitializableDebtToken.initialize.selector,\\n        pool,\\n        input.underlyingAsset,\\n        input.incentivesController,\\n        input.underlyingAssetDecimals,\\n        input.stableDebtTokenName,\\n        input.stableDebtTokenSymbol,\\n        input.params\\n      )\\n    );\\n\\n    address variableDebtTokenProxyAddress = _initTokenWithProxy(\\n      input.variableDebtTokenImpl,\\n      abi.encodeWithSelector(\\n        IInitializableDebtToken.initialize.selector,\\n        pool,\\n        input.underlyingAsset,\\n        input.incentivesController,\\n        input.underlyingAssetDecimals,\\n        input.variableDebtTokenName,\\n        input.variableDebtTokenSymbol,\\n        input.params\\n      )\\n    );\\n\\n    pool.initReserve(\\n      input.underlyingAsset,\\n      aTokenProxyAddress,\\n      stableDebtTokenProxyAddress,\\n      variableDebtTokenProxyAddress,\\n      input.interestRateStrategyAddress\\n    );\\n\\n    DataTypes.ReserveConfigurationMap memory currentConfig = DataTypes.ReserveConfigurationMap(0);\\n\\n    currentConfig.setDecimals(input.underlyingAssetDecimals);\\n\\n    currentConfig.setActive(true);\\n    currentConfig.setPaused(false);\\n    currentConfig.setFrozen(false);\\n\\n    pool.setConfiguration(input.underlyingAsset, currentConfig);\\n\\n    emit ReserveInitialized(\\n      input.underlyingAsset,\\n      aTokenProxyAddress,\\n      stableDebtTokenProxyAddress,\\n      variableDebtTokenProxyAddress,\\n      input.interestRateStrategyAddress\\n    );\\n  }\\n\\n  /**\\n   * @notice Updates the aToken implementation and initializes it\\n   * @dev Emits the `ATokenUpgraded` event\\n   * @param cachedPool The Pool containing the reserve with the aToken\\n   * @param input The parameters needed for the initialize call\\n   */\\n  function executeUpdateAToken(\\n    IPool cachedPool,\\n    ConfiguratorInputTypes.UpdateATokenInput calldata input\\n  ) public {\\n    DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);\\n\\n    (, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();\\n\\n    bytes memory encodedCall = abi.encodeWithSelector(\\n      IInitializableAToken.initialize.selector,\\n      cachedPool,\\n      input.treasury,\\n      input.asset,\\n      input.incentivesController,\\n      decimals,\\n      input.name,\\n      input.symbol,\\n      input.params\\n    );\\n\\n    _upgradeTokenImplementation(reserveData.aTokenAddress, input.implementation, encodedCall);\\n\\n    emit ATokenUpgraded(input.asset, reserveData.aTokenAddress, input.implementation);\\n  }\\n\\n  /**\\n   * @notice Updates the stable debt token implementation and initializes it\\n   * @dev Emits the `StableDebtTokenUpgraded` event\\n   * @param cachedPool The Pool containing the reserve with the stable debt token\\n   * @param input The parameters needed for the initialize call\\n   */\\n  function executeUpdateStableDebtToken(\\n    IPool cachedPool,\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) public {\\n    DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);\\n\\n    (, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();\\n\\n    bytes memory encodedCall = abi.encodeWithSelector(\\n      IInitializableDebtToken.initialize.selector,\\n      cachedPool,\\n      input.asset,\\n      input.incentivesController,\\n      decimals,\\n      input.name,\\n      input.symbol,\\n      input.params\\n    );\\n\\n    _upgradeTokenImplementation(\\n      reserveData.stableDebtTokenAddress,\\n      input.implementation,\\n      encodedCall\\n    );\\n\\n    emit StableDebtTokenUpgraded(\\n      input.asset,\\n      reserveData.stableDebtTokenAddress,\\n      input.implementation\\n    );\\n  }\\n\\n  /**\\n   * @notice Updates the variable debt token implementation and initializes it\\n   * @dev Emits the `VariableDebtTokenUpgraded` event\\n   * @param cachedPool The Pool containing the reserve with the variable debt token\\n   * @param input The parameters needed for the initialize call\\n   */\\n  function executeUpdateVariableDebtToken(\\n    IPool cachedPool,\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) public {\\n    DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);\\n\\n    (, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();\\n\\n    bytes memory encodedCall = abi.encodeWithSelector(\\n      IInitializableDebtToken.initialize.selector,\\n      cachedPool,\\n      input.asset,\\n      input.incentivesController,\\n      decimals,\\n      input.name,\\n      input.symbol,\\n      input.params\\n    );\\n\\n    _upgradeTokenImplementation(\\n      reserveData.variableDebtTokenAddress,\\n      input.implementation,\\n      encodedCall\\n    );\\n\\n    emit VariableDebtTokenUpgraded(\\n      input.asset,\\n      reserveData.variableDebtTokenAddress,\\n      input.implementation\\n    );\\n  }\\n\\n  /**\\n   * @notice Creates a new proxy and initializes the implementation\\n   * @param implementation The address of the implementation\\n   * @param initParams The parameters that is passed to the implementation to initialize\\n   * @return The address of initialized proxy\\n   */\\n  function _initTokenWithProxy(\\n    address implementation,\\n    bytes memory initParams\\n  ) internal returns (address) {\\n    InitializableImmutableAdminUpgradeabilityProxy proxy = new InitializableImmutableAdminUpgradeabilityProxy(\\n        address(this)\\n      );\\n\\n    proxy.initialize(implementation, initParams);\\n\\n    return address(proxy);\\n  }\\n\\n  /**\\n   * @notice Upgrades the implementation and makes call to the proxy\\n   * @dev The call is used to initialize the new implementation.\\n   * @param proxyAddress The address of the proxy\\n   * @param implementation The address of the new implementation\\n   * @param  initParams The parameters to the call after the upgrade\\n   */\\n  function _upgradeTokenImplementation(\\n    address proxyAddress,\\n    address implementation,\\n    bytes memory initParams\\n  ) internal {\\n    InitializableImmutableAdminUpgradeabilityProxy proxy = InitializableImmutableAdminUpgradeabilityProxy(\\n        payable(proxyAddress)\\n      );\\n\\n    proxy.upgradeToAndCall(implementation, initParams);\\n  }\\n}\\n\",\"keccak256\":\"0xfbf8cf6a8cbfb4c0624f76f1607ec76a58b7320e662309806ee79d6728b78fb7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/ConfiguratorInputTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary ConfiguratorInputTypes {\\n  struct InitReserveInput {\\n    address aTokenImpl;\\n    address stableDebtTokenImpl;\\n    address variableDebtTokenImpl;\\n    uint8 underlyingAssetDecimals;\\n    address interestRateStrategyAddress;\\n    address underlyingAsset;\\n    address treasury;\\n    address incentivesController;\\n    string aTokenName;\\n    string aTokenSymbol;\\n    string variableDebtTokenName;\\n    string variableDebtTokenSymbol;\\n    string stableDebtTokenName;\\n    string stableDebtTokenSymbol;\\n    bytes params;\\n  }\\n\\n  struct UpdateATokenInput {\\n    address asset;\\n    address treasury;\\n    address incentivesController;\\n    string name;\\n    string symbol;\\n    address implementation;\\n    bytes params;\\n  }\\n\\n  struct UpdateDebtTokenInput {\\n    address asset;\\n    address incentivesController;\\n    string name;\\n    string symbol;\\n    address implementation;\\n    bytes params;\\n  }\\n}\\n\",\"keccak256\":\"0x1fb622bd7b4f68289b727a824c92ab4c05b06f4aa8308c7d2b0ccb0f9ae63b0b\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeInitReserve(IPool,ConfiguratorInputTypes.InitReserveInput)":{"notice":"Initialize a reserve by creating and initializing aToken, stable debt token and variable debt token"},"executeUpdateAToken(IPool,ConfiguratorInputTypes.UpdateATokenInput)":{"notice":"Updates the aToken implementation and initializes it"},"executeUpdateStableDebtToken(IPool,ConfiguratorInputTypes.UpdateDebtTokenInput)":{"notice":"Updates the stable debt token implementation and initializes it"},"executeUpdateVariableDebtToken(IPool,ConfiguratorInputTypes.UpdateDebtTokenInput)":{"notice":"Updates the variable debt token implementation and initializes it"}},"notice":"Implements the functions to initialize reserves and update aTokens and debtTokens","version":1}}},"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol":{"EModeLogic":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint8","name":"categoryId","type":"uint8"}],"name":"UserEModeSet","type":"event"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"executeSetUserEMode(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,mapping(address => uint8) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteSetUserEModeParams)":{"details":"Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLDEmits the `UserEModeSet` event","params":{"eModeCategories":"The configuration of all the efficiency mode categories","params":"The additional parameters needed to execute the setUserEMode function","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves","userConfig":"The user configuration mapping that tracks the supplied/borrowed assets","usersEModeCategory":"The state of all users efficiency mode category"}}},"title":"EModeLogic library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"61146e61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c80635d5dc3131461003a575b600080fd5b81801561004657600080fd5b5061005a610055366004611192565b61005c565b005b60408051602081018252835481528251918301516100809289928992899290610145565b336000908152602084905260409081902080549183015160ff9081167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008416179091551680156100fe576100fb87878786604051806020016040529081600082015481525050338760400151886000015189602001516102e0565b50505b604080830151905160ff909116815233907fd728da875fc88944cbf17638bcbe4af0eedaef63becd1d1c57cc097eb4608d849060200160405180910390a250505050505050565b60ff81161580610170575060ff811660009081526020859052604090205462010000900461ffff1615155b6040518060400160405280600281526020017f3538000000000000000000000000000000000000000000000000000000000000815250906101e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101de91906112a7565b60405180910390fd5b5082516101f3576102d8565b60ff8116156102d85760005b828110156102d65761021184826103db565b156102ce576000818152602087815260408083205473ffffffffffffffffffffffffffffffffffffffff168352898252918290208251918201909252905480825260ff8481169160a81c16146040518060400160405280600281526020017f3538000000000000000000000000000000000000000000000000000000000000815250906102cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101de91906112a7565b50505b6001016101ff565b505b505050505050565b6000806000806103478c8c8c6040518060a001604052808e81526020018b81526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018c60ff1681525061045d565b9550955050505050670de0b6b3a76400008210156040518060400160405280600281526020017f3335000000000000000000000000000000000000000000000000000000000000815250906103c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101de91906112a7565b50909b909a5098505050505050505050565b60408051808201909152600281527f373400000000000000000000000000000000000000000000000000000000000060208201526000906080831061044d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101de91906112a7565b50509051600191821b1c16151590565b6000806000806000806104738760000151511590565b156104af5750600094508493508392508291507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050816109ba565b61055e60405180610260016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581525090565b608088015160ff16156105a357608088015160ff16600090815260208a905260409020606089015161059091906109c7565b6101808401526101c08301526101a08201525b87602001518160c0015110156108c25760c081015188516105c391610aa6565b6105d75760c08101805160010190526105a3565b60c0810151600090815260208b9052604090205473ffffffffffffffffffffffffffffffffffffffff16610200820181905261061d5760c08101805160010190526105a3565b61020081015173ffffffffffffffffffffffffffffffffffffffff16600090815260208c8152604091829020825180830190935280549283905260ff60a884901c81166101e0860152603084901c166060850181905261ffff601085901c811660a08701529093166080850152600a9290920a90830152610180820151158015906106b35750816101e00151896080015160ff16145b6107575760608901516102008301516040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063b3596f0790602401602060405180830381865afa15801561072e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610752919061131a565b61075e565b8161018001515b825260a08201511580159061077e575060c0820151895161077e91610b2b565b1561086e5761079b89604001518284600001518560200151610baf565b60408301819052610100830180516107b4908390611362565b90525060808901516101e08301516107cf9160ff1690610c8e565b1515610240830152608082015115610825578161024001516107f55781608001516107fc565b816101a001515b826040015161080b919061137a565b826101400181815161081d9190611362565b90525061082e565b60016102208301525b816102400151610842578160a00151610849565b816101c001515b8260400151610858919061137a565b826101600181815161086a9190611362565b9052505b60c0820151895161087e916103db565b156108b15761089b89604001518284600001518560200151610ca5565b82610120018181516108ad9190611362565b9052505b5060c08101805160010190526105a3565b6101008101516108d35760006108ee565b806101000151816101400151816108ec576108ec6113b7565b045b610140820152610100810151610905576000610920565b8061010001518161016001518161091e5761091e6113b7565b045b610160820152610120810151156109625761095d816101200151610957836101600151846101000151610e2590919063ffffffff16565b90610e68565b610984565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b60e0820181905261010082015161012083015161014084015161016085015161022090950151929a509098509650919450925090505b9499939850945094509450565b81546000908190819081906601000000000000900473ffffffffffffffffffffffffffffffffffffffff168015610a8b576040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015287169063b3596f0790602401602060405180830381865afa158015610a64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a88919061131a565b91505b50945461ffff80821697620100009092041695945092505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310610b18576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101de91906112a7565b5050905160019190911b1c600316151590565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310610b9d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101de91906112a7565b50509051600191821b82011c16151590565b600080610bbb85610e9f565b6004868101546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116938201939093529293506000928792610c67928692911690631da24f3e90602401602060405180830381865afa158015610c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c61919061131a565b90610f23565b610c71919061137a565b9050838181610c8257610c826113b7565b04979650505050505050565b60008215801590610c9e57508282145b9392505050565b60068301546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000928392911690631da24f3e90602401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f919061131a565b90508015610d5d57610d5a610d5386610f7a565b8290610f23565b90505b60058501546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152909116906370a0823190602401602060405180830381865afa158015610dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df3919061131a565b610dfd9082611362565b9050610e09818561137a565b9050828181610e1a57610e1a6113b7565b049695505050505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7783900484111517610e5a57600080fd5b506127109102611388010490565b60008115670de0b6b3a764000060028404190484111715610e8857600080fd5b50670de0b6b3a76400009190910260028204010490565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415610ee5575050600101546fffffffffffffffffffffffffffffffff1690565b6001830154610c9e906fffffffffffffffffffffffffffffffff80821691610c61917001000000000000000000000000000000009091041684610ffe565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517610f5857600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415610fc0575050600201546fffffffffffffffffffffffffffffffff1690565b6002830154610c9e906fffffffffffffffffffffffffffffffff80821691610c61917001000000000000000000000000000000009091041684611043565b60008061101264ffffffffff8416426113e6565b61101c908561137a565b6301e133809004905061103b816b033b2e3c9fd0803ce8000000611362565b949350505050565b6000610c9e83834260008061105f64ffffffffff8516846113e6565b90508061107b576b033b2e3c9fd0803ce8000000915050610c9e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810160008080600285116110b15760006110b6565b600285035b925066038882915c40006110ca8a80610f23565b816110d7576110d76113b7565b0491506301e133806110e9838b610f23565b816110f6576110f66113b7565b049050600082611106868861137a565b611110919061137a565b60029004905060008285611124888a61137a565b61112e919061137a565b611138919061137a565b60069004905080826301e1338061114f8a8f61137a565b61115991906113fd565b61116f906b033b2e3c9fd0803ce8000000611362565b6111799190611362565b6111839190611362565b9b9a5050505050505050505050565b6000806000806000808688036101008112156111ad57600080fd5b873596506020880135955060408801359450606088013593506080880135925060607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60820112156111fd57600080fd5b506040516060810181811067ffffffffffffffff82111715611248577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405260a0880135815260c088013573ffffffffffffffffffffffffffffffffffffffff8116811461127957600080fd5b602082015260e088013560ff8116811461129257600080fd5b80604083015250809150509295509295509295565b600060208083528351808285015260005b818110156112d4578581018301518582016040015282016112b8565b818111156112e6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561132c57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561137557611375611333565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156113b2576113b2611333565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000828210156113f8576113f8611333565b500390565b600082611433577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea264697066735822122044d05a5565f04b9d23ca746d3fbe4b9b48bd255524a71128b14d36c260dc753564736f6c634300080a0033","opcodes":"PUSH2 0x146E PUSH2 0x3A PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x35 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5D5DC313 EQ PUSH2 0x3A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5A PUSH2 0x55 CALLDATASIZE PUSH1 0x4 PUSH2 0x1192 JUMP JUMPDEST PUSH2 0x5C JUMP JUMPDEST STOP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE DUP4 SLOAD DUP2 MSTORE DUP3 MLOAD SWAP2 DUP4 ADD MLOAD PUSH2 0x80 SWAP3 DUP10 SWAP3 DUP10 SWAP3 DUP10 SWAP3 SWAP1 PUSH2 0x145 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP2 DUP4 ADD MLOAD PUSH1 0xFF SWAP1 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP5 AND OR SWAP1 SWAP2 SSTORE AND DUP1 ISZERO PUSH2 0xFE JUMPI PUSH2 0xFB DUP8 DUP8 DUP8 DUP7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP CALLER DUP8 PUSH1 0x40 ADD MLOAD DUP9 PUSH1 0x0 ADD MLOAD DUP10 PUSH1 0x20 ADD MLOAD PUSH2 0x2E0 JUMP JUMPDEST POP POP JUMPDEST PUSH1 0x40 DUP1 DUP4 ADD MLOAD SWAP1 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE CALLER SWAP1 PUSH32 0xD728DA875FC88944CBF17638BCBE4AF0EEDAEF63BECD1D1C57CC097EB4608D84 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xFF DUP2 AND ISZERO DUP1 PUSH2 0x170 JUMPI POP PUSH1 0xFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3538000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1E7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DE SWAP2 SWAP1 PUSH2 0x12A7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP3 MLOAD PUSH2 0x1F3 JUMPI PUSH2 0x2D8 JUMP JUMPDEST PUSH1 0xFF DUP2 AND ISZERO PUSH2 0x2D8 JUMPI PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2D6 JUMPI PUSH2 0x211 DUP5 DUP3 PUSH2 0x3DB JUMP JUMPDEST ISZERO PUSH2 0x2CE JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP10 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP1 SLOAD DUP1 DUP3 MSTORE PUSH1 0xFF DUP5 DUP2 AND SWAP2 PUSH1 0xA8 SHR AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3538000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2CB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DE SWAP2 SWAP1 PUSH2 0x12A7 JUMP JUMPDEST POP POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1FF JUMP JUMPDEST POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x347 DUP13 DUP13 DUP13 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP15 DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE PUSH1 0x20 ADD DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH1 0xFF AND DUP2 MSTORE POP PUSH2 0x45D JUMP JUMPDEST SWAP6 POP SWAP6 POP POP POP POP POP PUSH8 0xDE0B6B3A7640000 DUP3 LT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3335000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3C9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DE SWAP2 SWAP1 PUSH2 0x12A7 JUMP JUMPDEST POP SWAP1 SWAP12 SWAP1 SWAP11 POP SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x44D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DE SWAP2 SWAP1 PUSH2 0x12A7 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x473 DUP8 PUSH1 0x0 ADD MLOAD MLOAD ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x4AF JUMPI POP PUSH1 0x0 SWAP5 POP DUP5 SWAP4 POP DUP4 SWAP3 POP DUP3 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 POP DUP2 PUSH2 0x9BA JUMP JUMPDEST PUSH2 0x55E PUSH1 0x40 MLOAD DUP1 PUSH2 0x260 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND ISZERO PUSH2 0x5A3 JUMPI PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x590 SWAP2 SWAP1 PUSH2 0x9C7 JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MSTORE PUSH2 0x1C0 DUP4 ADD MSTORE PUSH2 0x1A0 DUP3 ADD MSTORE JUMPDEST DUP8 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0xC0 ADD MLOAD LT ISZERO PUSH2 0x8C2 JUMPI PUSH1 0xC0 DUP2 ADD MLOAD DUP9 MLOAD PUSH2 0x5C3 SWAP2 PUSH2 0xAA6 JUMP JUMPDEST PUSH2 0x5D7 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x5A3 JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP12 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x200 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x61D JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x5A3 JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP13 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP4 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP3 DUP4 SWAP1 MSTORE PUSH1 0xFF PUSH1 0xA8 DUP5 SWAP1 SHR DUP2 AND PUSH2 0x1E0 DUP7 ADD MSTORE PUSH1 0x30 DUP5 SWAP1 SHR AND PUSH1 0x60 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0xFFFF PUSH1 0x10 DUP6 SWAP1 SHR DUP2 AND PUSH1 0xA0 DUP8 ADD MSTORE SWAP1 SWAP4 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA SWAP3 SWAP1 SWAP3 EXP SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x6B3 JUMPI POP DUP2 PUSH2 0x1E0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD PUSH1 0xFF AND EQ JUMPDEST PUSH2 0x757 JUMPI PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x72E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x752 SWAP2 SWAP1 PUSH2 0x131A JUMP JUMPDEST PUSH2 0x75E JUMP JUMPDEST DUP2 PUSH2 0x180 ADD MLOAD JUMPDEST DUP3 MSTORE PUSH1 0xA0 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x77E JUMPI POP PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0x77E SWAP2 PUSH2 0xB2B JUMP JUMPDEST ISZERO PUSH2 0x86E JUMPI PUSH2 0x79B DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0xBAF JUMP JUMPDEST PUSH1 0x40 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP4 ADD DUP1 MLOAD PUSH2 0x7B4 SWAP1 DUP4 SWAP1 PUSH2 0x1362 JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x1E0 DUP4 ADD MLOAD PUSH2 0x7CF SWAP2 PUSH1 0xFF AND SWAP1 PUSH2 0xC8E JUMP JUMPDEST ISZERO ISZERO PUSH2 0x240 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD ISZERO PUSH2 0x825 JUMPI DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0x7F5 JUMPI DUP2 PUSH1 0x80 ADD MLOAD PUSH2 0x7FC JUMP JUMPDEST DUP2 PUSH2 0x1A0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x80B SWAP2 SWAP1 PUSH2 0x137A JUMP JUMPDEST DUP3 PUSH2 0x140 ADD DUP2 DUP2 MLOAD PUSH2 0x81D SWAP2 SWAP1 PUSH2 0x1362 JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x82E JUMP JUMPDEST PUSH1 0x1 PUSH2 0x220 DUP4 ADD MSTORE JUMPDEST DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0x842 JUMPI DUP2 PUSH1 0xA0 ADD MLOAD PUSH2 0x849 JUMP JUMPDEST DUP2 PUSH2 0x1C0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x858 SWAP2 SWAP1 PUSH2 0x137A JUMP JUMPDEST DUP3 PUSH2 0x160 ADD DUP2 DUP2 MLOAD PUSH2 0x86A SWAP2 SWAP1 PUSH2 0x1362 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0x87E SWAP2 PUSH2 0x3DB JUMP JUMPDEST ISZERO PUSH2 0x8B1 JUMPI PUSH2 0x89B DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0xCA5 JUMP JUMPDEST DUP3 PUSH2 0x120 ADD DUP2 DUP2 MLOAD PUSH2 0x8AD SWAP2 SWAP1 PUSH2 0x1362 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST POP PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x5A3 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x8D3 JUMPI PUSH1 0x0 PUSH2 0x8EE JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x140 ADD MLOAD DUP2 PUSH2 0x8EC JUMPI PUSH2 0x8EC PUSH2 0x13B7 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x905 JUMPI PUSH1 0x0 PUSH2 0x920 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x160 ADD MLOAD DUP2 PUSH2 0x91E JUMPI PUSH2 0x91E PUSH2 0x13B7 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD ISZERO PUSH2 0x962 JUMPI PUSH2 0x95D DUP2 PUSH2 0x120 ADD MLOAD PUSH2 0x957 DUP4 PUSH2 0x160 ADD MLOAD DUP5 PUSH2 0x100 ADD MLOAD PUSH2 0xE25 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0xE68 JUMP JUMPDEST PUSH2 0x984 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH2 0x160 DUP6 ADD MLOAD PUSH2 0x220 SWAP1 SWAP6 ADD MLOAD SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMPDEST SWAP5 SWAP10 SWAP4 SWAP9 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH7 0x1000000000000 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0xA8B JUMPI PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA64 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA88 SWAP2 SWAP1 PUSH2 0x131A JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP5 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP8 PUSH3 0x10000 SWAP1 SWAP3 DIV AND SWAP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0xB18 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DE SWAP2 SWAP1 PUSH2 0x12A7 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 SHL SHR PUSH1 0x3 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0xB9D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DE SWAP2 SWAP1 PUSH2 0x12A7 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL DUP3 ADD SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xBBB DUP6 PUSH2 0xE9F JUMP JUMPDEST PUSH1 0x4 DUP7 DUP2 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 DUP8 SWAP3 PUSH2 0xC67 SWAP3 DUP7 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC3D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC61 SWAP2 SWAP1 PUSH2 0x131A JUMP JUMPDEST SWAP1 PUSH2 0xF23 JUMP JUMPDEST PUSH2 0xC71 SWAP2 SWAP1 PUSH2 0x137A JUMP JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 PUSH2 0xC82 JUMPI PUSH2 0xC82 PUSH2 0x13B7 JUMP JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0xC9E JUMPI POP DUP3 DUP3 EQ JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6 DUP4 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD1B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD3F SWAP2 SWAP1 PUSH2 0x131A JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0xD5D JUMPI PUSH2 0xD5A PUSH2 0xD53 DUP7 PUSH2 0xF7A JUMP JUMPDEST DUP3 SWAP1 PUSH2 0xF23 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x5 DUP6 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDCF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDF3 SWAP2 SWAP1 PUSH2 0x131A JUMP JUMPDEST PUSH2 0xDFD SWAP1 DUP3 PUSH2 0x1362 JUMP JUMPDEST SWAP1 POP PUSH2 0xE09 DUP2 DUP6 PUSH2 0x137A JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 PUSH2 0xE1A JUMPI PUSH2 0xE1A PUSH2 0x13B7 JUMP JUMPDEST DIV SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0xE5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH8 0xDE0B6B3A7640000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0xE88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0xEE5 JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0xC9E SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0xC61 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0xFFE JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0xF58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0xFC0 JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0xC9E SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0xC61 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x1043 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1012 PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x13E6 JUMP JUMPDEST PUSH2 0x101C SWAP1 DUP6 PUSH2 0x137A JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x103B DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x1362 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC9E DUP4 DUP4 TIMESTAMP PUSH1 0x0 DUP1 PUSH2 0x105F PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x13E6 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x107B JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0xC9E JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x10B1 JUMPI PUSH1 0x0 PUSH2 0x10B6 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x10CA DUP11 DUP1 PUSH2 0xF23 JUMP JUMPDEST DUP2 PUSH2 0x10D7 JUMPI PUSH2 0x10D7 PUSH2 0x13B7 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x10E9 DUP4 DUP12 PUSH2 0xF23 JUMP JUMPDEST DUP2 PUSH2 0x10F6 JUMPI PUSH2 0x10F6 PUSH2 0x13B7 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x1106 DUP7 DUP9 PUSH2 0x137A JUMP JUMPDEST PUSH2 0x1110 SWAP2 SWAP1 PUSH2 0x137A JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x1124 DUP9 DUP11 PUSH2 0x137A JUMP JUMPDEST PUSH2 0x112E SWAP2 SWAP1 PUSH2 0x137A JUMP JUMPDEST PUSH2 0x1138 SWAP2 SWAP1 PUSH2 0x137A JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x114F DUP11 DUP16 PUSH2 0x137A JUMP JUMPDEST PUSH2 0x1159 SWAP2 SWAP1 PUSH2 0x13FD JUMP JUMPDEST PUSH2 0x116F SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x1362 JUMP JUMPDEST PUSH2 0x1179 SWAP2 SWAP1 PUSH2 0x1362 JUMP JUMPDEST PUSH2 0x1183 SWAP2 SWAP1 PUSH2 0x1362 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP7 DUP9 SUB PUSH2 0x100 DUP2 SLT ISZERO PUSH2 0x11AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 DUP3 ADD SLT ISZERO PUSH2 0x11FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1248 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE PUSH1 0xA0 DUP9 ADD CALLDATALOAD DUP2 MSTORE PUSH1 0xC0 DUP9 ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1279 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xE0 DUP9 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1292 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x40 DUP4 ADD MSTORE POP DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x12D4 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x12B8 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x12E6 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x132C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1375 JUMPI PUSH2 0x1375 PUSH2 0x1333 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x13B2 JUMPI PUSH2 0x13B2 PUSH2 0x1333 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x13F8 JUMPI PUSH2 0x13F8 PUSH2 0x1333 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1433 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DIFFICULTY 0xD0 GAS SSTORE PUSH6 0xF04B9D23CA74 PUSH14 0x3FBE4B9B48BD255524A71128B14D CALLDATASIZE 0xC2 PUSH1 0xDC PUSH22 0x3564736F6C634300080A003300000000000000000000 ","sourceMap":"826:3517:79:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;826:3517:79;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_getUserBalanceInBaseCurrency_15854":{"entryPoint":2991,"id":15854,"parameterSlots":4,"returnSlots":1},"@_getUserDebtInBaseCurrency_15811":{"entryPoint":3237,"id":15811,"parameterSlots":4,"returnSlots":1},"@calculateCompoundedInterest_21079":{"entryPoint":null,"id":21079,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_21097":{"entryPoint":4163,"id":21097,"parameterSlots":2,"returnSlots":1},"@calculateLinearInterest_20956":{"entryPoint":4094,"id":20956,"parameterSlots":2,"returnSlots":1},"@calculateUserAccountData_15713":{"entryPoint":1117,"id":15713,"parameterSlots":4,"returnSlots":6},"@executeSetUserEMode_14546":{"entryPoint":92,"id":14546,"parameterSlots":6,"returnSlots":0},"@getEModeCategory_11647":{"entryPoint":null,"id":11647,"parameterSlots":1,"returnSlots":1},"@getEModeConfiguration_14594":{"entryPoint":2503,"id":14594,"parameterSlots":2,"returnSlots":3},"@getNormalizedDebt_17751":{"entryPoint":3962,"id":17751,"parameterSlots":1,"returnSlots":1},"@getNormalizedIncome_17715":{"entryPoint":3743,"id":17715,"parameterSlots":1,"returnSlots":1},"@getParams_11823":{"entryPoint":null,"id":11823,"parameterSlots":1,"returnSlots":6},"@isBorrowing_12045":{"entryPoint":987,"id":12045,"parameterSlots":2,"returnSlots":1},"@isEmpty_12194":{"entryPoint":null,"id":12194,"parameterSlots":1,"returnSlots":1},"@isInEModeCategory_14614":{"entryPoint":3214,"id":14614,"parameterSlots":2,"returnSlots":1},"@isUsingAsCollateralOrBorrowing_12010":{"entryPoint":2726,"id":12010,"parameterSlots":2,"returnSlots":1},"@isUsingAsCollateral_12083":{"entryPoint":2859,"id":12083,"parameterSlots":2,"returnSlots":1},"@percentMul_21119":{"entryPoint":3621,"id":21119,"parameterSlots":2,"returnSlots":1},"@rayMul_21186":{"entryPoint":3875,"id":21186,"parameterSlots":2,"returnSlots":1},"@validateHealthFactor_20524":{"entryPoint":736,"id":20524,"parameterSlots":8,"returnSlots":2},"@validateSetUserEMode_20787":{"entryPoint":325,"id":20787,"parameterSlots":6,"returnSlots":0},"@wadDiv_21174":{"entryPoint":3688,"id":21174,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$t_mapping$_t_address_$_t_uint8_$t_struct$_UserConfigurationMap_$21322_storage_ptrt_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr":{"entryPoint":4498,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":4890,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":4775,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":4962,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":5117,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":4986,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":5094,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":4915,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":5047,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:4081:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"405:1251:201","statements":[{"nodeType":"YulVariableDeclaration","src":"415:33:201","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"429:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"438:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"425:3:201"},"nodeType":"YulFunctionCall","src":"425:23:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"419:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"473:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"482:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"485:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"475:6:201"},"nodeType":"YulFunctionCall","src":"475:12:201"},"nodeType":"YulExpressionStatement","src":"475:12:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"464:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"468:3:201","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"460:3:201"},"nodeType":"YulFunctionCall","src":"460:12:201"},"nodeType":"YulIf","src":"457:32:201"},{"nodeType":"YulAssignment","src":"498:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"521:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"508:12:201"},"nodeType":"YulFunctionCall","src":"508:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"498:6:201"}]},{"nodeType":"YulAssignment","src":"540:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"567:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"578:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"563:3:201"},"nodeType":"YulFunctionCall","src":"563:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"550:12:201"},"nodeType":"YulFunctionCall","src":"550:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"540:6:201"}]},{"nodeType":"YulAssignment","src":"591:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"618:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"629:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"614:3:201"},"nodeType":"YulFunctionCall","src":"614:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"601:12:201"},"nodeType":"YulFunctionCall","src":"601:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"591:6:201"}]},{"nodeType":"YulAssignment","src":"642:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"669:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"680:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"665:3:201"},"nodeType":"YulFunctionCall","src":"665:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"652:12:201"},"nodeType":"YulFunctionCall","src":"652:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"642:6:201"}]},{"nodeType":"YulAssignment","src":"693:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"720:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"731:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"716:3:201"},"nodeType":"YulFunctionCall","src":"716:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"703:12:201"},"nodeType":"YulFunctionCall","src":"703:33:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"693:6:201"}]},{"body":{"nodeType":"YulBlock","src":"833:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"842:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"845:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"835:6:201"},"nodeType":"YulFunctionCall","src":"835:12:201"},"nodeType":"YulExpressionStatement","src":"835:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"756:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"760:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"752:3:201"},"nodeType":"YulFunctionCall","src":"752:75:201"},{"kind":"number","nodeType":"YulLiteral","src":"829:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"748:3:201"},"nodeType":"YulFunctionCall","src":"748:84:201"},"nodeType":"YulIf","src":"745:104:201"},{"nodeType":"YulVariableDeclaration","src":"858:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"878:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"872:5:201"},"nodeType":"YulFunctionCall","src":"872:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"862:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"890:33:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"912:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"920:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"908:3:201"},"nodeType":"YulFunctionCall","src":"908:15:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"894:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1006:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1027:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1030:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1020:6:201"},"nodeType":"YulFunctionCall","src":"1020:88:201"},"nodeType":"YulExpressionStatement","src":"1020:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1128:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1131:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1121:6:201"},"nodeType":"YulFunctionCall","src":"1121:15:201"},"nodeType":"YulExpressionStatement","src":"1121:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1156:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1159:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1149:6:201"},"nodeType":"YulFunctionCall","src":"1149:15:201"},"nodeType":"YulExpressionStatement","src":"1149:15:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"941:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"953:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"938:2:201"},"nodeType":"YulFunctionCall","src":"938:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"977:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"989:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"974:2:201"},"nodeType":"YulFunctionCall","src":"974:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"935:2:201"},"nodeType":"YulFunctionCall","src":"935:62:201"},"nodeType":"YulIf","src":"932:242:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1190:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1194:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1183:6:201"},"nodeType":"YulFunctionCall","src":"1183:22:201"},"nodeType":"YulExpressionStatement","src":"1183:22:201"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1221:6:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1246:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1257:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1242:3:201"},"nodeType":"YulFunctionCall","src":"1242:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1229:12:201"},"nodeType":"YulFunctionCall","src":"1229:33:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1214:6:201"},"nodeType":"YulFunctionCall","src":"1214:49:201"},"nodeType":"YulExpressionStatement","src":"1214:49:201"},{"nodeType":"YulVariableDeclaration","src":"1272:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1302:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1313:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1298:3:201"},"nodeType":"YulFunctionCall","src":"1298:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1285:12:201"},"nodeType":"YulFunctionCall","src":"1285:33:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1276:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1404:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1413:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1416:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1406:6:201"},"nodeType":"YulFunctionCall","src":"1406:12:201"},"nodeType":"YulExpressionStatement","src":"1406:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1340:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1351:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1358:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1347:3:201"},"nodeType":"YulFunctionCall","src":"1347:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1337:2:201"},"nodeType":"YulFunctionCall","src":"1337:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1330:6:201"},"nodeType":"YulFunctionCall","src":"1330:73:201"},"nodeType":"YulIf","src":"1327:93:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1440:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1448:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1436:3:201"},"nodeType":"YulFunctionCall","src":"1436:15:201"},{"name":"value","nodeType":"YulIdentifier","src":"1453:5:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1429:6:201"},"nodeType":"YulFunctionCall","src":"1429:30:201"},"nodeType":"YulExpressionStatement","src":"1429:30:201"},{"nodeType":"YulVariableDeclaration","src":"1468:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1500:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1511:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1496:3:201"},"nodeType":"YulFunctionCall","src":"1496:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1483:12:201"},"nodeType":"YulFunctionCall","src":"1483:33:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"1472:7:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1568:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1577:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1580:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1570:6:201"},"nodeType":"YulFunctionCall","src":"1570:12:201"},"nodeType":"YulExpressionStatement","src":"1570:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1538:7:201"},{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1551:7:201"},{"kind":"number","nodeType":"YulLiteral","src":"1560:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1547:3:201"},"nodeType":"YulFunctionCall","src":"1547:18:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1535:2:201"},"nodeType":"YulFunctionCall","src":"1535:31:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1528:6:201"},"nodeType":"YulFunctionCall","src":"1528:39:201"},"nodeType":"YulIf","src":"1525:59:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1604:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1612:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1600:3:201"},"nodeType":"YulFunctionCall","src":"1600:15:201"},{"name":"value_1","nodeType":"YulIdentifier","src":"1617:7:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1593:6:201"},"nodeType":"YulFunctionCall","src":"1593:32:201"},"nodeType":"YulExpressionStatement","src":"1593:32:201"},{"nodeType":"YulAssignment","src":"1634:16:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1644:6:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"1634:6:201"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$t_mapping$_t_address_$_t_uint8_$t_struct$_UserConfigurationMap_$21322_storage_ptrt_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"331:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"342:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"354:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"362:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"370:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"378:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"386:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"394:6:201","type":""}],"src":"14:1642:201"},{"body":{"nodeType":"YulBlock","src":"1758:87:201","statements":[{"nodeType":"YulAssignment","src":"1768:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1780:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1791:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1776:3:201"},"nodeType":"YulFunctionCall","src":"1776:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1768:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1810:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1825:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1833:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1821:3:201"},"nodeType":"YulFunctionCall","src":"1821:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1803:6:201"},"nodeType":"YulFunctionCall","src":"1803:36:201"},"nodeType":"YulExpressionStatement","src":"1803:36:201"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1727:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1738:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1749:4:201","type":""}],"src":"1661:184:201"},{"body":{"nodeType":"YulBlock","src":"1971:535:201","statements":[{"nodeType":"YulVariableDeclaration","src":"1981:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1991:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1985:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2009:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2020:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2002:6:201"},"nodeType":"YulFunctionCall","src":"2002:21:201"},"nodeType":"YulExpressionStatement","src":"2002:21:201"},{"nodeType":"YulVariableDeclaration","src":"2032:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2052:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2046:5:201"},"nodeType":"YulFunctionCall","src":"2046:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"2036:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2079:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2090:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2075:3:201"},"nodeType":"YulFunctionCall","src":"2075:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"2095:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2068:6:201"},"nodeType":"YulFunctionCall","src":"2068:34:201"},"nodeType":"YulExpressionStatement","src":"2068:34:201"},{"nodeType":"YulVariableDeclaration","src":"2111:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2120:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"2115:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2180:90:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2209:9:201"},{"name":"i","nodeType":"YulIdentifier","src":"2220:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2205:3:201"},"nodeType":"YulFunctionCall","src":"2205:17:201"},{"kind":"number","nodeType":"YulLiteral","src":"2224:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2201:3:201"},"nodeType":"YulFunctionCall","src":"2201:26:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2243:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"2251:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2239:3:201"},"nodeType":"YulFunctionCall","src":"2239:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2255:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2235:3:201"},"nodeType":"YulFunctionCall","src":"2235:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2229:5:201"},"nodeType":"YulFunctionCall","src":"2229:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2194:6:201"},"nodeType":"YulFunctionCall","src":"2194:66:201"},"nodeType":"YulExpressionStatement","src":"2194:66:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2141:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"2144:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2138:2:201"},"nodeType":"YulFunctionCall","src":"2138:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2152:19:201","statements":[{"nodeType":"YulAssignment","src":"2154:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2163:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2166:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2159:3:201"},"nodeType":"YulFunctionCall","src":"2159:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"2154:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"2134:3:201","statements":[]},"src":"2130:140:201"},{"body":{"nodeType":"YulBlock","src":"2304:66:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2333:9:201"},{"name":"length","nodeType":"YulIdentifier","src":"2344:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2329:3:201"},"nodeType":"YulFunctionCall","src":"2329:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"2353:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2325:3:201"},"nodeType":"YulFunctionCall","src":"2325:31:201"},{"kind":"number","nodeType":"YulLiteral","src":"2358:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2318:6:201"},"nodeType":"YulFunctionCall","src":"2318:42:201"},"nodeType":"YulExpressionStatement","src":"2318:42:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2285:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"2288:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2282:2:201"},"nodeType":"YulFunctionCall","src":"2282:13:201"},"nodeType":"YulIf","src":"2279:91:201"},{"nodeType":"YulAssignment","src":"2379:121:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2395:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2414:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2422:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2410:3:201"},"nodeType":"YulFunctionCall","src":"2410:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"2427:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2406:3:201"},"nodeType":"YulFunctionCall","src":"2406:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2391:3:201"},"nodeType":"YulFunctionCall","src":"2391:104:201"},{"kind":"number","nodeType":"YulLiteral","src":"2497:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2387:3:201"},"nodeType":"YulFunctionCall","src":"2387:113:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2379:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1940:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1951:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1962:4:201","type":""}],"src":"1850:656:201"},{"body":{"nodeType":"YulBlock","src":"2612:125:201","statements":[{"nodeType":"YulAssignment","src":"2622:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2634:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2645:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2630:3:201"},"nodeType":"YulFunctionCall","src":"2630:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2622:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2664:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2679:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2687:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2675:3:201"},"nodeType":"YulFunctionCall","src":"2675:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2657:6:201"},"nodeType":"YulFunctionCall","src":"2657:74:201"},"nodeType":"YulExpressionStatement","src":"2657:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2581:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2592:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2603:4:201","type":""}],"src":"2511:226:201"},{"body":{"nodeType":"YulBlock","src":"2823:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"2869:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2878:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2881:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2871:6:201"},"nodeType":"YulFunctionCall","src":"2871:12:201"},"nodeType":"YulExpressionStatement","src":"2871:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2844:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2853:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2840:3:201"},"nodeType":"YulFunctionCall","src":"2840:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2865:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2836:3:201"},"nodeType":"YulFunctionCall","src":"2836:32:201"},"nodeType":"YulIf","src":"2833:52:201"},{"nodeType":"YulAssignment","src":"2894:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2910:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2904:5:201"},"nodeType":"YulFunctionCall","src":"2904:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2894:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2789:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2800:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2812:6:201","type":""}],"src":"2742:184:201"},{"body":{"nodeType":"YulBlock","src":"2963:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2980:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2983:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2973:6:201"},"nodeType":"YulFunctionCall","src":"2973:88:201"},"nodeType":"YulExpressionStatement","src":"2973:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3077:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3080:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3070:6:201"},"nodeType":"YulFunctionCall","src":"3070:15:201"},"nodeType":"YulExpressionStatement","src":"3070:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3101:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3104:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3094:6:201"},"nodeType":"YulFunctionCall","src":"3094:15:201"},"nodeType":"YulExpressionStatement","src":"3094:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"2931:184:201"},{"body":{"nodeType":"YulBlock","src":"3168:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"3195:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3197:16:201"},"nodeType":"YulFunctionCall","src":"3197:18:201"},"nodeType":"YulExpressionStatement","src":"3197:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3184:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"3191:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3187:3:201"},"nodeType":"YulFunctionCall","src":"3187:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3181:2:201"},"nodeType":"YulFunctionCall","src":"3181:13:201"},"nodeType":"YulIf","src":"3178:39:201"},{"nodeType":"YulAssignment","src":"3226:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3237:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"3240:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3233:3:201"},"nodeType":"YulFunctionCall","src":"3233:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"3226:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3151:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"3154:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"3160:3:201","type":""}],"src":"3120:128:201"},{"body":{"nodeType":"YulBlock","src":"3305:176:201","statements":[{"body":{"nodeType":"YulBlock","src":"3424:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3426:16:201"},"nodeType":"YulFunctionCall","src":"3426:18:201"},"nodeType":"YulExpressionStatement","src":"3426:18:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3336:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3329:6:201"},"nodeType":"YulFunctionCall","src":"3329:9:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3322:6:201"},"nodeType":"YulFunctionCall","src":"3322:17:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"3344:1:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3351:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"3419:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"3347:3:201"},"nodeType":"YulFunctionCall","src":"3347:74:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3341:2:201"},"nodeType":"YulFunctionCall","src":"3341:81:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3318:3:201"},"nodeType":"YulFunctionCall","src":"3318:105:201"},"nodeType":"YulIf","src":"3315:131:201"},{"nodeType":"YulAssignment","src":"3455:20:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3470:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"3473:1:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"3466:3:201"},"nodeType":"YulFunctionCall","src":"3466:9:201"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"3455:7:201"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3284:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"3287:1:201","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"3293:7:201","type":""}],"src":"3253:228:201"},{"body":{"nodeType":"YulBlock","src":"3518:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3535:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3538:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3528:6:201"},"nodeType":"YulFunctionCall","src":"3528:88:201"},"nodeType":"YulExpressionStatement","src":"3528:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3632:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3635:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3625:6:201"},"nodeType":"YulFunctionCall","src":"3625:15:201"},"nodeType":"YulExpressionStatement","src":"3625:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3656:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3659:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3649:6:201"},"nodeType":"YulFunctionCall","src":"3649:15:201"},"nodeType":"YulExpressionStatement","src":"3649:15:201"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"3486:184:201"},{"body":{"nodeType":"YulBlock","src":"3724:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"3746:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3748:16:201"},"nodeType":"YulFunctionCall","src":"3748:18:201"},"nodeType":"YulExpressionStatement","src":"3748:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3740:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"3743:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3737:2:201"},"nodeType":"YulFunctionCall","src":"3737:8:201"},"nodeType":"YulIf","src":"3734:34:201"},{"nodeType":"YulAssignment","src":"3777:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3789:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"3792:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3785:3:201"},"nodeType":"YulFunctionCall","src":"3785:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"3777:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3706:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"3709:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"3715:4:201","type":""}],"src":"3675:125:201"},{"body":{"nodeType":"YulBlock","src":"3851:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"3882:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3903:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3906:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3896:6:201"},"nodeType":"YulFunctionCall","src":"3896:88:201"},"nodeType":"YulExpressionStatement","src":"3896:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4004:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4007:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3997:6:201"},"nodeType":"YulFunctionCall","src":"3997:15:201"},"nodeType":"YulExpressionStatement","src":"3997:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4032:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4035:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4025:6:201"},"nodeType":"YulFunctionCall","src":"4025:15:201"},"nodeType":"YulExpressionStatement","src":"4025:15:201"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"3871:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3864:6:201"},"nodeType":"YulFunctionCall","src":"3864:9:201"},"nodeType":"YulIf","src":"3861:189:201"},{"nodeType":"YulAssignment","src":"4059:14:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4068:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"4071:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"4064:3:201"},"nodeType":"YulFunctionCall","src":"4064:9:201"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"4059:1:201"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3836:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"3839:1:201","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"3845:1:201","type":""}],"src":"3805:274:201"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$t_mapping$_t_address_$_t_uint8_$t_struct$_UserConfigurationMap_$21322_storage_ptrt_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 256) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60), 96) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 96)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n        mstore(memPtr, calldataload(add(headStart, 160)))\n        let value := calldataload(add(headStart, 192))\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n        mstore(add(memPtr, 32), value)\n        let value_1 := calldataload(add(headStart, 224))\n        if iszero(eq(value_1, and(value_1, 0xff))) { revert(0, 0) }\n        mstore(add(memPtr, 64), value_1)\n        value5 := memPtr\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c80635d5dc3131461003a575b600080fd5b81801561004657600080fd5b5061005a610055366004611192565b61005c565b005b60408051602081018252835481528251918301516100809289928992899290610145565b336000908152602084905260409081902080549183015160ff9081167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008416179091551680156100fe576100fb87878786604051806020016040529081600082015481525050338760400151886000015189602001516102e0565b50505b604080830151905160ff909116815233907fd728da875fc88944cbf17638bcbe4af0eedaef63becd1d1c57cc097eb4608d849060200160405180910390a250505050505050565b60ff81161580610170575060ff811660009081526020859052604090205462010000900461ffff1615155b6040518060400160405280600281526020017f3538000000000000000000000000000000000000000000000000000000000000815250906101e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101de91906112a7565b60405180910390fd5b5082516101f3576102d8565b60ff8116156102d85760005b828110156102d65761021184826103db565b156102ce576000818152602087815260408083205473ffffffffffffffffffffffffffffffffffffffff168352898252918290208251918201909252905480825260ff8481169160a81c16146040518060400160405280600281526020017f3538000000000000000000000000000000000000000000000000000000000000815250906102cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101de91906112a7565b50505b6001016101ff565b505b505050505050565b6000806000806103478c8c8c6040518060a001604052808e81526020018b81526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018c60ff1681525061045d565b9550955050505050670de0b6b3a76400008210156040518060400160405280600281526020017f3335000000000000000000000000000000000000000000000000000000000000815250906103c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101de91906112a7565b50909b909a5098505050505050505050565b60408051808201909152600281527f373400000000000000000000000000000000000000000000000000000000000060208201526000906080831061044d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101de91906112a7565b50509051600191821b1c16151590565b6000806000806000806104738760000151511590565b156104af5750600094508493508392508291507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050816109ba565b61055e60405180610260016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581525090565b608088015160ff16156105a357608088015160ff16600090815260208a905260409020606089015161059091906109c7565b6101808401526101c08301526101a08201525b87602001518160c0015110156108c25760c081015188516105c391610aa6565b6105d75760c08101805160010190526105a3565b60c0810151600090815260208b9052604090205473ffffffffffffffffffffffffffffffffffffffff16610200820181905261061d5760c08101805160010190526105a3565b61020081015173ffffffffffffffffffffffffffffffffffffffff16600090815260208c8152604091829020825180830190935280549283905260ff60a884901c81166101e0860152603084901c166060850181905261ffff601085901c811660a08701529093166080850152600a9290920a90830152610180820151158015906106b35750816101e00151896080015160ff16145b6107575760608901516102008301516040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063b3596f0790602401602060405180830381865afa15801561072e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610752919061131a565b61075e565b8161018001515b825260a08201511580159061077e575060c0820151895161077e91610b2b565b1561086e5761079b89604001518284600001518560200151610baf565b60408301819052610100830180516107b4908390611362565b90525060808901516101e08301516107cf9160ff1690610c8e565b1515610240830152608082015115610825578161024001516107f55781608001516107fc565b816101a001515b826040015161080b919061137a565b826101400181815161081d9190611362565b90525061082e565b60016102208301525b816102400151610842578160a00151610849565b816101c001515b8260400151610858919061137a565b826101600181815161086a9190611362565b9052505b60c0820151895161087e916103db565b156108b15761089b89604001518284600001518560200151610ca5565b82610120018181516108ad9190611362565b9052505b5060c08101805160010190526105a3565b6101008101516108d35760006108ee565b806101000151816101400151816108ec576108ec6113b7565b045b610140820152610100810151610905576000610920565b8061010001518161016001518161091e5761091e6113b7565b045b610160820152610120810151156109625761095d816101200151610957836101600151846101000151610e2590919063ffffffff16565b90610e68565b610984565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b60e0820181905261010082015161012083015161014084015161016085015161022090950151929a509098509650919450925090505b9499939850945094509450565b81546000908190819081906601000000000000900473ffffffffffffffffffffffffffffffffffffffff168015610a8b576040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015287169063b3596f0790602401602060405180830381865afa158015610a64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a88919061131a565b91505b50945461ffff80821697620100009092041695945092505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310610b18576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101de91906112a7565b5050905160019190911b1c600316151590565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310610b9d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101de91906112a7565b50509051600191821b82011c16151590565b600080610bbb85610e9f565b6004868101546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116938201939093529293506000928792610c67928692911690631da24f3e90602401602060405180830381865afa158015610c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c61919061131a565b90610f23565b610c71919061137a565b9050838181610c8257610c826113b7565b04979650505050505050565b60008215801590610c9e57508282145b9392505050565b60068301546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000928392911690631da24f3e90602401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f919061131a565b90508015610d5d57610d5a610d5386610f7a565b8290610f23565b90505b60058501546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152909116906370a0823190602401602060405180830381865afa158015610dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df3919061131a565b610dfd9082611362565b9050610e09818561137a565b9050828181610e1a57610e1a6113b7565b049695505050505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7783900484111517610e5a57600080fd5b506127109102611388010490565b60008115670de0b6b3a764000060028404190484111715610e8857600080fd5b50670de0b6b3a76400009190910260028204010490565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415610ee5575050600101546fffffffffffffffffffffffffffffffff1690565b6001830154610c9e906fffffffffffffffffffffffffffffffff80821691610c61917001000000000000000000000000000000009091041684610ffe565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517610f5857600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415610fc0575050600201546fffffffffffffffffffffffffffffffff1690565b6002830154610c9e906fffffffffffffffffffffffffffffffff80821691610c61917001000000000000000000000000000000009091041684611043565b60008061101264ffffffffff8416426113e6565b61101c908561137a565b6301e133809004905061103b816b033b2e3c9fd0803ce8000000611362565b949350505050565b6000610c9e83834260008061105f64ffffffffff8516846113e6565b90508061107b576b033b2e3c9fd0803ce8000000915050610c9e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810160008080600285116110b15760006110b6565b600285035b925066038882915c40006110ca8a80610f23565b816110d7576110d76113b7565b0491506301e133806110e9838b610f23565b816110f6576110f66113b7565b049050600082611106868861137a565b611110919061137a565b60029004905060008285611124888a61137a565b61112e919061137a565b611138919061137a565b60069004905080826301e1338061114f8a8f61137a565b61115991906113fd565b61116f906b033b2e3c9fd0803ce8000000611362565b6111799190611362565b6111839190611362565b9b9a5050505050505050505050565b6000806000806000808688036101008112156111ad57600080fd5b873596506020880135955060408801359450606088013593506080880135925060607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60820112156111fd57600080fd5b506040516060810181811067ffffffffffffffff82111715611248577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405260a0880135815260c088013573ffffffffffffffffffffffffffffffffffffffff8116811461127957600080fd5b602082015260e088013560ff8116811461129257600080fd5b80604083015250809150509295509295509295565b600060208083528351808285015260005b818110156112d4578581018301518582016040015282016112b8565b818111156112e6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561132c57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561137557611375611333565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156113b2576113b2611333565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000828210156113f8576113f8611333565b500390565b600082611433577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea264697066735822122044d05a5565f04b9d23ca746d3fbe4b9b48bd255524a71128b14d36c260dc753564736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x35 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5D5DC313 EQ PUSH2 0x3A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5A PUSH2 0x55 CALLDATASIZE PUSH1 0x4 PUSH2 0x1192 JUMP JUMPDEST PUSH2 0x5C JUMP JUMPDEST STOP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE DUP4 SLOAD DUP2 MSTORE DUP3 MLOAD SWAP2 DUP4 ADD MLOAD PUSH2 0x80 SWAP3 DUP10 SWAP3 DUP10 SWAP3 DUP10 SWAP3 SWAP1 PUSH2 0x145 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD SWAP2 DUP4 ADD MLOAD PUSH1 0xFF SWAP1 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP5 AND OR SWAP1 SWAP2 SSTORE AND DUP1 ISZERO PUSH2 0xFE JUMPI PUSH2 0xFB DUP8 DUP8 DUP8 DUP7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP CALLER DUP8 PUSH1 0x40 ADD MLOAD DUP9 PUSH1 0x0 ADD MLOAD DUP10 PUSH1 0x20 ADD MLOAD PUSH2 0x2E0 JUMP JUMPDEST POP POP JUMPDEST PUSH1 0x40 DUP1 DUP4 ADD MLOAD SWAP1 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE CALLER SWAP1 PUSH32 0xD728DA875FC88944CBF17638BCBE4AF0EEDAEF63BECD1D1C57CC097EB4608D84 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0xFF DUP2 AND ISZERO DUP1 PUSH2 0x170 JUMPI POP PUSH1 0xFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH3 0x10000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3538000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1E7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DE SWAP2 SWAP1 PUSH2 0x12A7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP3 MLOAD PUSH2 0x1F3 JUMPI PUSH2 0x2D8 JUMP JUMPDEST PUSH1 0xFF DUP2 AND ISZERO PUSH2 0x2D8 JUMPI PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2D6 JUMPI PUSH2 0x211 DUP5 DUP3 PUSH2 0x3DB JUMP JUMPDEST ISZERO PUSH2 0x2CE JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE DUP10 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP1 SLOAD DUP1 DUP3 MSTORE PUSH1 0xFF DUP5 DUP2 AND SWAP2 PUSH1 0xA8 SHR AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3538000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2CB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DE SWAP2 SWAP1 PUSH2 0x12A7 JUMP JUMPDEST POP POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1FF JUMP JUMPDEST POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x347 DUP13 DUP13 DUP13 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP15 DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE PUSH1 0x20 ADD DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH1 0xFF AND DUP2 MSTORE POP PUSH2 0x45D JUMP JUMPDEST SWAP6 POP SWAP6 POP POP POP POP POP PUSH8 0xDE0B6B3A7640000 DUP3 LT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3335000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3C9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DE SWAP2 SWAP1 PUSH2 0x12A7 JUMP JUMPDEST POP SWAP1 SWAP12 SWAP1 SWAP11 POP SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x44D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DE SWAP2 SWAP1 PUSH2 0x12A7 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x473 DUP8 PUSH1 0x0 ADD MLOAD MLOAD ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x4AF JUMPI POP PUSH1 0x0 SWAP5 POP DUP5 SWAP4 POP DUP4 SWAP3 POP DUP3 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 POP DUP2 PUSH2 0x9BA JUMP JUMPDEST PUSH2 0x55E PUSH1 0x40 MLOAD DUP1 PUSH2 0x260 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND ISZERO PUSH2 0x5A3 JUMPI PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x590 SWAP2 SWAP1 PUSH2 0x9C7 JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MSTORE PUSH2 0x1C0 DUP4 ADD MSTORE PUSH2 0x1A0 DUP3 ADD MSTORE JUMPDEST DUP8 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0xC0 ADD MLOAD LT ISZERO PUSH2 0x8C2 JUMPI PUSH1 0xC0 DUP2 ADD MLOAD DUP9 MLOAD PUSH2 0x5C3 SWAP2 PUSH2 0xAA6 JUMP JUMPDEST PUSH2 0x5D7 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x5A3 JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP12 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x200 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x61D JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x5A3 JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP13 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP4 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP3 DUP4 SWAP1 MSTORE PUSH1 0xFF PUSH1 0xA8 DUP5 SWAP1 SHR DUP2 AND PUSH2 0x1E0 DUP7 ADD MSTORE PUSH1 0x30 DUP5 SWAP1 SHR AND PUSH1 0x60 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0xFFFF PUSH1 0x10 DUP6 SWAP1 SHR DUP2 AND PUSH1 0xA0 DUP8 ADD MSTORE SWAP1 SWAP4 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA SWAP3 SWAP1 SWAP3 EXP SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x6B3 JUMPI POP DUP2 PUSH2 0x1E0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD PUSH1 0xFF AND EQ JUMPDEST PUSH2 0x757 JUMPI PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x72E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x752 SWAP2 SWAP1 PUSH2 0x131A JUMP JUMPDEST PUSH2 0x75E JUMP JUMPDEST DUP2 PUSH2 0x180 ADD MLOAD JUMPDEST DUP3 MSTORE PUSH1 0xA0 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x77E JUMPI POP PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0x77E SWAP2 PUSH2 0xB2B JUMP JUMPDEST ISZERO PUSH2 0x86E JUMPI PUSH2 0x79B DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0xBAF JUMP JUMPDEST PUSH1 0x40 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP4 ADD DUP1 MLOAD PUSH2 0x7B4 SWAP1 DUP4 SWAP1 PUSH2 0x1362 JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x1E0 DUP4 ADD MLOAD PUSH2 0x7CF SWAP2 PUSH1 0xFF AND SWAP1 PUSH2 0xC8E JUMP JUMPDEST ISZERO ISZERO PUSH2 0x240 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD ISZERO PUSH2 0x825 JUMPI DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0x7F5 JUMPI DUP2 PUSH1 0x80 ADD MLOAD PUSH2 0x7FC JUMP JUMPDEST DUP2 PUSH2 0x1A0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x80B SWAP2 SWAP1 PUSH2 0x137A JUMP JUMPDEST DUP3 PUSH2 0x140 ADD DUP2 DUP2 MLOAD PUSH2 0x81D SWAP2 SWAP1 PUSH2 0x1362 JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x82E JUMP JUMPDEST PUSH1 0x1 PUSH2 0x220 DUP4 ADD MSTORE JUMPDEST DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0x842 JUMPI DUP2 PUSH1 0xA0 ADD MLOAD PUSH2 0x849 JUMP JUMPDEST DUP2 PUSH2 0x1C0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x858 SWAP2 SWAP1 PUSH2 0x137A JUMP JUMPDEST DUP3 PUSH2 0x160 ADD DUP2 DUP2 MLOAD PUSH2 0x86A SWAP2 SWAP1 PUSH2 0x1362 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0x87E SWAP2 PUSH2 0x3DB JUMP JUMPDEST ISZERO PUSH2 0x8B1 JUMPI PUSH2 0x89B DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0xCA5 JUMP JUMPDEST DUP3 PUSH2 0x120 ADD DUP2 DUP2 MLOAD PUSH2 0x8AD SWAP2 SWAP1 PUSH2 0x1362 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST POP PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x5A3 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x8D3 JUMPI PUSH1 0x0 PUSH2 0x8EE JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x140 ADD MLOAD DUP2 PUSH2 0x8EC JUMPI PUSH2 0x8EC PUSH2 0x13B7 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x905 JUMPI PUSH1 0x0 PUSH2 0x920 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x160 ADD MLOAD DUP2 PUSH2 0x91E JUMPI PUSH2 0x91E PUSH2 0x13B7 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD ISZERO PUSH2 0x962 JUMPI PUSH2 0x95D DUP2 PUSH2 0x120 ADD MLOAD PUSH2 0x957 DUP4 PUSH2 0x160 ADD MLOAD DUP5 PUSH2 0x100 ADD MLOAD PUSH2 0xE25 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0xE68 JUMP JUMPDEST PUSH2 0x984 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH2 0x160 DUP6 ADD MLOAD PUSH2 0x220 SWAP1 SWAP6 ADD MLOAD SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMPDEST SWAP5 SWAP10 SWAP4 SWAP9 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH7 0x1000000000000 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0xA8B JUMPI PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA64 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA88 SWAP2 SWAP1 PUSH2 0x131A JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP5 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP8 PUSH3 0x10000 SWAP1 SWAP3 DIV AND SWAP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0xB18 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DE SWAP2 SWAP1 PUSH2 0x12A7 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 SHL SHR PUSH1 0x3 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0xB9D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DE SWAP2 SWAP1 PUSH2 0x12A7 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL DUP3 ADD SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xBBB DUP6 PUSH2 0xE9F JUMP JUMPDEST PUSH1 0x4 DUP7 DUP2 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 DUP8 SWAP3 PUSH2 0xC67 SWAP3 DUP7 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC3D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC61 SWAP2 SWAP1 PUSH2 0x131A JUMP JUMPDEST SWAP1 PUSH2 0xF23 JUMP JUMPDEST PUSH2 0xC71 SWAP2 SWAP1 PUSH2 0x137A JUMP JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 PUSH2 0xC82 JUMPI PUSH2 0xC82 PUSH2 0x13B7 JUMP JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0xC9E JUMPI POP DUP3 DUP3 EQ JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x6 DUP4 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD1B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD3F SWAP2 SWAP1 PUSH2 0x131A JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0xD5D JUMPI PUSH2 0xD5A PUSH2 0xD53 DUP7 PUSH2 0xF7A JUMP JUMPDEST DUP3 SWAP1 PUSH2 0xF23 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x5 DUP6 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDCF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDF3 SWAP2 SWAP1 PUSH2 0x131A JUMP JUMPDEST PUSH2 0xDFD SWAP1 DUP3 PUSH2 0x1362 JUMP JUMPDEST SWAP1 POP PUSH2 0xE09 DUP2 DUP6 PUSH2 0x137A JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 PUSH2 0xE1A JUMPI PUSH2 0xE1A PUSH2 0x13B7 JUMP JUMPDEST DIV SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0xE5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH8 0xDE0B6B3A7640000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0xE88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0xEE5 JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0xC9E SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0xC61 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0xFFE JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0xF58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0xFC0 JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0xC9E SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0xC61 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x1043 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1012 PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x13E6 JUMP JUMPDEST PUSH2 0x101C SWAP1 DUP6 PUSH2 0x137A JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x103B DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x1362 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC9E DUP4 DUP4 TIMESTAMP PUSH1 0x0 DUP1 PUSH2 0x105F PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x13E6 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x107B JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0xC9E JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x10B1 JUMPI PUSH1 0x0 PUSH2 0x10B6 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x10CA DUP11 DUP1 PUSH2 0xF23 JUMP JUMPDEST DUP2 PUSH2 0x10D7 JUMPI PUSH2 0x10D7 PUSH2 0x13B7 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x10E9 DUP4 DUP12 PUSH2 0xF23 JUMP JUMPDEST DUP2 PUSH2 0x10F6 JUMPI PUSH2 0x10F6 PUSH2 0x13B7 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x1106 DUP7 DUP9 PUSH2 0x137A JUMP JUMPDEST PUSH2 0x1110 SWAP2 SWAP1 PUSH2 0x137A JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x1124 DUP9 DUP11 PUSH2 0x137A JUMP JUMPDEST PUSH2 0x112E SWAP2 SWAP1 PUSH2 0x137A JUMP JUMPDEST PUSH2 0x1138 SWAP2 SWAP1 PUSH2 0x137A JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x114F DUP11 DUP16 PUSH2 0x137A JUMP JUMPDEST PUSH2 0x1159 SWAP2 SWAP1 PUSH2 0x13FD JUMP JUMPDEST PUSH2 0x116F SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x1362 JUMP JUMPDEST PUSH2 0x1179 SWAP2 SWAP1 PUSH2 0x1362 JUMP JUMPDEST PUSH2 0x1183 SWAP2 SWAP1 PUSH2 0x1362 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP7 DUP9 SUB PUSH2 0x100 DUP2 SLT ISZERO PUSH2 0x11AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 DUP3 ADD SLT ISZERO PUSH2 0x11FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1248 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE PUSH1 0xA0 DUP9 ADD CALLDATALOAD DUP2 MSTORE PUSH1 0xC0 DUP9 ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1279 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xE0 DUP9 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1292 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x40 DUP4 ADD MSTORE POP DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x12D4 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x12B8 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x12E6 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x132C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x1375 JUMPI PUSH2 0x1375 PUSH2 0x1333 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x13B2 JUMPI PUSH2 0x13B2 PUSH2 0x1333 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x13F8 JUMPI PUSH2 0x13F8 PUSH2 0x1333 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x1433 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DIFFICULTY 0xD0 GAS SSTORE PUSH6 0xF04B9D23CA74 PUSH14 0x3FBE4B9B48BD255524A71128B14D CALLDATASIZE 0xC2 PUSH1 0xDC PUSH22 0x3564736F6C634300080A003300000000000000000000 ","sourceMap":"826:3517:79:-:0;;;;;;;;;;;;;;;;;;;;;;;;1909:1039;;;;;;;;;;-1:-1:-1;1909:1039:79;;;;;:::i;:::-;;:::i;:::-;;;2318:176;;;;;;;;;;;;2443:20;;2471:17;;;;2318:176;;2362:12;;2382;;2402:15;;2443:20;2318:36;:176::i;:::-;2543:10;2501:20;2524:30;;;;;;;;;;;;;;2593:17;;;;2524:30;2560:50;;;;;;;;;;2524:30;2621:19;;2617:273;;2650:233;2696:12;2718;2740:15;2765:10;2650:233;;;;;;;;;;;;;;;;;2785:10;2805:6;:17;;;2832:6;:20;;;2862:6;:13;;;2650:36;:233::i;:::-;;;2617:273;2925:17;;;;;2900:43;;1833:4:201;1821:17;;;1803:36;;2913:10:79;;2900:43;;1791:2:201;1776:18;2900:43:79;;;;;;;2312:636;1909:1039;;;;;;:::o;25523:1287:87:-;25947:15;;;;;:72;;-1:-1:-1;25966:27:87;;;;;;;;;;;;;;:48;;;;;;:53;;25947:72;26027:34;;;;;;;;;;;;;;;;;25932:135;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;6194:9:73;;26146:47:87;;26180:7;;26146:47;26361:15;;;;26357:449;;26411:9;26406:386;26430:13;26426:1;:17;26406:386;;;26466:25;:10;26489:1;26466:22;:25::i;:::-;26462:320;;;26507:54;26577:15;;;;;;;;;;;;;;26564:29;;;;;;;;;26507:115;;;;;;;;;;;;;26659:46;;;;;4339:3:72;20323:71;;26659:46:87;26721:34;;;;;;;;;;;;;;;;;26636:133;;;;;;;;;;;;;;:::i;:::-;;26493:289;26462:320;26445:3;;26406:386;;;;26357:449;25523:1287;;;;;;:::o;21356:1027::-;21754:7;21763:4;21784:20;21806:25;21835:353;21889:12;21911;21933:15;21958:222;;;;;;;;22023:10;21958:222;;;;22060:13;21958:222;;;;22091:4;21958:222;;;;;;22115:6;21958:222;;;;;;22152:17;21958:222;;;;;21835:44;:353::i;:::-;21775:413;;;;;;;;2677:4;22210:12;:51;;22269:53;;;;;;;;;;;;;;;;;22195:133;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22343:12:87;;;;-1:-1:-1;21356:1027:87;-1:-1:-1;;;;;;;;;21356:1027:87:o;3046:314:73:-;3262:28;;;;;;;;;;;;;;;;;3168:4;;5284:3:72;3206:54:73;;3198:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3307:9:73;;3337:1;3321:17;;;3307:32;3306:38;:43;;;3046:314::o;2633:3723:81:-;2947:7;2956;2965;2974;2983;2992:4;3008:27;:6;:17;;;6194:9:73;:14;;6091:122;3008:27:81;3004:93;;;-1:-1:-1;3053:1:81;;-1:-1:-1;3053:1:81;;-1:-1:-1;3053:1:81;;-1:-1:-1;3053:1:81;;-1:-1:-1;3065:17:81;;-1:-1:-1;3053:1:81;3045:45;;3004:93;3103:40;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3103:40:81;3154:24;;;;:29;;;3150:263;;3326:24;;;;3310:41;;;;;;;;;;;;;3382:13;;;;3257:149;;3310:41;3257;:149::i;:::-;3233:20;;;3193:213;3209:22;;;3193:213;3194:13;;;3193:213;3150:263;3435:6;:20;;;3426:4;:6;;;:29;3419:2175;;;3519:6;;;;3470:17;;:56;;:48;:56::i;:::-;3465:140;;3562:6;;;3560:8;;;;;;3588;;3465:140;3655:6;;;;3642:20;;;;;;;;;;;;;;3613:26;;;:49;;;3671:123;;3751:6;;;3749:8;;;;;;3777;;3671:123;3862:26;;;;3849:40;;3802:44;3849:40;;;;;;;;;;;;4038:38;;;;;;;;;;;;;;22869:67:72;4339:3;23023:71;;;;;4004:23:81;;;3898:180;3439:2:72;22869:67;;;;3971:13:81;;;3898:180;;;22674:9:72;3298:2;22691:85;;;;;3926:25:81;;;3898:180;22662:21:72;;;3908:8:81;;;3898:180;4124:2;:19;;;;4107:14;;;:36;-1:-1:-1;4178:20:81;;;:25;;;;:88;;;4243:4;:23;;;4215:6;:24;;;:51;;;4178:88;:205;;4327:13;;;;4356:26;;;;4308:75;;;;;:47;2675:55:201;;;4308:75:81;;;2657:74:201;4308:47:81;;;;;2630:18:201;;4308:75:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4178:205;;;4277:4;:20;;;4178:205;4160:223;;4396:25;;;;:30;;;;:79;;-1:-1:-1;4468:6:81;;;;4430:17;;:45;;:37;:45::i;:::-;4392:911;;;4520:141;4561:6;:11;;;4584:14;4610:4;:15;;;4637:4;:14;;;4520:29;:141::i;:::-;4487:30;;;:174;;;4672:34;;;:68;;;;4487:174;;4672:68;:::i;:::-;;;-1:-1:-1;4816:24:81;;;;4852:23;;;;4776:109;;;;;:28;:109::i;:::-;4751:134;;:22;;;:134;4900:8;;;;:13;4896:226;;5000:4;:22;;;:49;;5041:4;:8;;;5000:49;;;5025:4;:13;;;5000:49;4954:4;:30;;;:96;;;;:::i;:::-;4927:4;:11;;:123;;;;;;;:::i;:::-;;;-1:-1:-1;4896:226:81;;;5107:4;5079:25;;;:32;4896:226;5218:4;:22;;;:75;;5268:4;:25;;;5218:75;;;5243:4;:22;;;5218:75;5174:4;:30;;;:120;;;;:::i;:::-;5132:4;:28;;:162;;;;;;;:::i;:::-;;;-1:-1:-1;4392:911:81;5345:6;;;;5315:17;;:37;;:29;:37::i;:::-;5311:232;;;5396:138;5434:6;:11;;;5457:14;5483:4;:15;;;5510:4;:14;;;5396:26;:138::i;:::-;5364:4;:28;;:170;;;;;;;:::i;:::-;;;-1:-1:-1;5311:232:81;-1:-1:-1;5573:6:81;;;5571:8;;;;;;3419:2175;;;5632:34;;;;:110;;5741:1;5632:110;;;5696:4;:34;;;5682:4;:11;;;:48;;;;;:::i;:::-;;5632:110;5618:11;;;:124;5781:34;;;;:127;;5907:1;5781:127;;;5862:4;:34;;;5831:4;:28;;;:65;;;;;:::i;:::-;;5781:127;5750:28;;;:158;5942:28;;;;:33;5941:200;;6011:130;6105:4;:28;;;6012:75;6058:4;:28;;;6012:4;:34;;;:45;;:75;;;;:::i;:::-;6011:84;;:130::i;:::-;5941:200;;;5985:17;5941:200;5921:17;;;:220;;;6162:34;;;;6204:28;;;;6240:11;;;;6259:28;;;;6320:25;;;;;6162:34;;-1:-1:-1;6204:28:81;;-1:-1:-1;6240:11:81;-1:-1:-1;6259:28:81;;-1:-1:-1;5921:220:81;-1:-1:-1;6320:25:81;-1:-1:-1;2633:3723:81;;;;;;;;;;;;:::o;3336:442:79:-;3564:20;;3471:7;;;;;;;;3564:20;;;;;3595:30;;3591:107;;3653:38;;;;;:20;2675:55:201;;;3653:38:79;;;2657:74:201;3653:20:79;;;;;2630:18:201;;3653:38:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3635:56;;3591:107;-1:-1:-1;3712:12:79;;;;;;;3726:29;;;;;;3757:15;-1:-1:-1;3336:442:79;-1:-1:-1;;;3336:442:79:o;2435:333:73:-;2670:28;;;;;;;;;;;;;;;;;2576:4;;5284:3:72;2614:54:73;;2606:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;2715:9:73;;2745:1;2729:17;;;;2715:32;2751:1;2714:38;:43;;;2435:333::o;3638:328::-;3862:28;;;;;;;;;;;;;;;;;3768:4;;5284:3:72;3806:54:73;;3798:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3907:9:73;;3938:1;3922:17;;;3921:23;;3907:38;3906:44;:49;;;3638:328::o;9524:446:81:-;9697:7;9712:24;9739:29;:7;:27;:29::i;:::-;9820:21;;;;;9800:64;;;;;9820:21;2675:55:201;;;9800:64:81;;;2657:74:201;;;;9712:56:81;;-1:-1:-1;9774:15:81;;9898:10;;9800:89;;9712:56;;9820:21;;;9800:58;;2630:18:201;;9800:64:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:71;;:89::i;:::-;9792:116;;;;:::i;:::-;9774:134;;9950:9;9940:7;:19;;;;;:::i;:::-;;;9524:446;-1:-1:-1;;;;;;;9524:446:81:o;4133:208:79:-;4250:4;4270:22;;;;;:65;;;4318:17;4296:18;:39;4270:65;4262:74;4133:208;-1:-1:-1;;;4133:208:79:o;8150:645:81:-;8409:32;;;;8389:87;;;;;8409:32;2675:55:201;;;8389:87:81;;;2657:74:201;8320:7:81;;;;8409:32;;;8389:69;;2630:18:201;;8389:87:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8365:111;-1:-1:-1;8486:18:81;;8482:104;;8530:49;8551:27;:7;:25;:27::i;:::-;8530:13;;:20;:49::i;:::-;8514:65;;8482:104;8631:30;;;;8624:54;;;;;8631:30;2675:55:201;;;8624:54:81;;;2657:74:201;8631:30:81;;;;8624:48;;2630:18:201;;8624:54:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8608:70;;:13;:70;:::i;:::-;8592:86;-1:-1:-1;8701:26:81;8592:86;8701:10;:26;:::i;:::-;8685:42;;8775:9;8759:13;:25;;;;;:::i;:::-;;;8150:645;-1:-1:-1;;;;;;8150:645:81:o;1005:496:89:-;1083:14;1248:18;;1299:35;1295:52;;;1285:63;;1278:71;1234:125;1215:183;;1388:1;1385;1378:12;1215:183;-1:-1:-1;1473:17:89;1424:22;;1448;1420:51;1416:75;;1005:496::o;1660:322:90:-;1721:9;1826;;1885:3;1880:1;1873:9;;1861:22;1857:32;1851:39;;1823:70;1820:104;;;1914:1;1911;1904:12;1820:104;-1:-1:-1;1952:3:90;1945:11;;;;1965:1;1958:9;;1941:27;1937:35;;1660:322::o;1895:528:85:-;2028:27;;;;1994:7;;2028:27;;;;;2110:15;2097:28;;2093:326;;;-1:-1:-1;;2229:22:85;;;;;;1895:528::o;2093:326::-;2380:22;;;;2287:125;;2380:22;;;;;2287:74;;2321:28;;;;;2351:9;2287:33;:74::i;2253:319:90:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:90;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;2809:545:85:-;2940:27;;;;2906:7;;2940:27;;;;;3022:15;3009:28;;3005:345;;;-1:-1:-1;;3141:27:85;;;;;;2809:545::o;3005:345::-;3306:27;;;;3204:139;;3306:27;;;;;3204:83;;3242:33;;;;;3277:9;3204:37;:83::i;700:334:88:-;810:7;;881:46;899:28;;;881:15;:46;:::i;:::-;873:55;;:4;:55;:::i;:::-;376:8;961:25;;;-1:-1:-1;1006:23:88;961:25;704:4:90;1006:23:88;:::i;:::-;999:30;700:334;-1:-1:-1;;;;700:334:88:o;3142:212::-;3256:7;3278:71;3306:4;3312:19;3333:15;1924:7;;1984:47;2003:28;;;1984:16;:47;:::i;:::-;1970:61;-1:-1:-1;2042:8:88;2038:50;;704:4:90;2060:21:88;;;;;2038:50;2230:7;;;2094:19;;;2266:1;2260:7;;:21;;2280:1;2260:21;;;2276:1;2270:3;:7;2260:21;2246:35;-1:-1:-1;2326:35:88;2305:17;2317:4;;2305:11;:17::i;:::-;:57;;;;;:::i;:::-;;;-1:-1:-1;376:8:88;2387:25;2305:57;2407:4;2387:19;:25::i;:::-;:44;;;;;:::i;:::-;;;-1:-1:-1;2444:18:88;2485:12;2465:17;2471:11;2465:3;:17;:::i;:::-;:32;;;;:::i;:::-;2535:1;2521:15;;;-1:-1:-1;2548:17:88;2602:14;2588:11;2568:17;2574:11;2568:3;:17;:::i;:::-;:31;;;;:::i;:::-;:48;;;;:::i;:::-;2653:1;2640:14;;;-1:-1:-1;2640:14:88;2725:10;376:8;2692:10;2699:3;2692:4;:10;:::i;:::-;2691:31;;;;:::i;:::-;2674:48;;704:4:90;2674:48:88;:::i;:::-;:61;;;;:::i;:::-;:73;;;;:::i;:::-;2667:80;1780:972;-1:-1:-1;;;;;;;;;;;1780:972:88:o;14:1642:201:-;354:6;362;370;378;386;394;438:9;429:7;425:23;468:3;464:2;460:12;457:32;;;485:1;482;475:12;457:32;521:9;508:23;498:33;;578:2;567:9;563:18;550:32;540:42;;629:2;618:9;614:18;601:32;591:42;;680:2;669:9;665:18;652:32;642:42;;731:3;720:9;716:19;703:33;693:43;;829:2;760:66;756:2;752:75;748:84;745:104;;;845:1;842;835:12;745:104;;878:2;872:9;920:2;912:6;908:15;989:6;977:10;974:22;953:18;941:10;938:34;935:62;932:242;;;1030:77;1027:1;1020:88;1131:4;1128:1;1121:15;1159:4;1156:1;1149:15;932:242;1190:2;1183:22;1257:3;1242:19;;1229:33;1214:49;;1313:3;1298:19;;1285:33;1358:42;1347:54;;1337:65;;1327:93;;1416:1;1413;1406:12;1327:93;1448:2;1436:15;;1429:30;1511:3;1496:19;;1483:33;1560:4;1547:18;;1535:31;;1525:59;;1580:1;1577;1570:12;1525:59;1617:7;1612:2;1604:6;1600:15;1593:32;;1644:6;1634:16;;;14:1642;;;;;;;;:::o;1850:656::-;1962:4;1991:2;2020;2009:9;2002:21;2052:6;2046:13;2095:6;2090:2;2079:9;2075:18;2068:34;2120:1;2130:140;2144:6;2141:1;2138:13;2130:140;;;2239:14;;;2235:23;;2229:30;2205:17;;;2224:2;2201:26;2194:66;2159:10;;2130:140;;;2288:6;2285:1;2282:13;2279:91;;;2358:1;2353:2;2344:6;2333:9;2329:22;2325:31;2318:42;2279:91;-1:-1:-1;2422:2:201;2410:15;2427:66;2406:88;2391:104;;;;2497:2;2387:113;;1850:656;-1:-1:-1;;;1850:656:201:o;2742:184::-;2812:6;2865:2;2853:9;2844:7;2840:23;2836:32;2833:52;;;2881:1;2878;2871:12;2833:52;-1:-1:-1;2904:16:201;;2742:184;-1:-1:-1;2742:184:201:o;2931:::-;2983:77;2980:1;2973:88;3080:4;3077:1;3070:15;3104:4;3101:1;3094:15;3120:128;3160:3;3191:1;3187:6;3184:1;3181:13;3178:39;;;3197:18;;:::i;:::-;-1:-1:-1;3233:9:201;;3120:128::o;3253:228::-;3293:7;3419:1;3351:66;3347:74;3344:1;3341:81;3336:1;3329:9;3322:17;3318:105;3315:131;;;3426:18;;:::i;:::-;-1:-1:-1;3466:9:201;;3253:228::o;3486:184::-;3538:77;3535:1;3528:88;3635:4;3632:1;3625:15;3659:4;3656:1;3649:15;3675:125;3715:4;3743:1;3740;3737:8;3734:34;;;3748:18;;:::i;:::-;-1:-1:-1;3785:9:201;;3675:125::o;3805:274::-;3845:1;3871;3861:189;;3906:77;3903:1;3896:88;4007:4;4004:1;3997:15;4035:4;4032:1;4025:15;3861:189;-1:-1:-1;4064:9:201;;3805:274::o"},"gasEstimates":{"creation":{"codeDepositCost":"1046000","executionCost":"1118","totalCost":"1047118"},"external":{"executeSetUserEMode(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,mapping(address => uint8) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteSetUserEModeParams)":"infinite"},"internal":{"getEModeConfiguration(struct DataTypes.EModeCategory storage pointer,contract IPriceOracleGetter)":"infinite","isInEModeCategory(uint256,uint256)":"64"}},"methodIdentifiers":{"executeSetUserEMode(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,mapping(address => uint8) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteSetUserEModeParams)":"5d5dc313"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"}],\"name\":\"UserEModeSet\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"executeSetUserEMode(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,mapping(address => uint8) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteSetUserEModeParams)\":{\"details\":\"Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLDEmits the `UserEModeSet` event\",\"params\":{\"eModeCategories\":\"The configuration of all the efficiency mode categories\",\"params\":\"The additional parameters needed to execute the setUserEMode function\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\",\"userConfig\":\"The user configuration mapping that tracks the supplied/borrowed assets\",\"usersEModeCategory\":\"The state of all users efficiency mode category\"}}},\"title\":\"EModeLogic library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeSetUserEMode(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,mapping(address => uint8) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteSetUserEModeParams)\":{\"notice\":\"Updates the user efficiency mode category\"}},\"notice\":\"Implements the base logic for all the actions related to the eMode\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol\":\"EModeLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\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(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\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 {AccessControl-_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) external view returns (bool);\\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 {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\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) external;\\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) external;\\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) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeSetUserEMode(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,mapping(address => uint8) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteSetUserEModeParams)":{"notice":"Updates the user efficiency mode category"}},"notice":"Implements the base logic for all the actions related to the eMode","version":1}}},"@aave/core-v3/contracts/protocol/libraries/logic/FlashLoanLogic.sol":{"FlashLoanLogic":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"address","name":"initiator","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"premium","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"FlashLoan","type":"event"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"executeFlashLoan(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.FlashloanParams)":{"details":"For authorized flashborrowers the fee is waivedAt the end of the transaction the pool will pull amount borrowed + fee from the receiver, if the receiver have not approved the pool the transaction will revert.Emits the `FlashLoan()` event","params":{"eModeCategories":"The configuration of all the efficiency mode categories","params":"The additional parameters needed to execute the flashloan function","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves","userConfig":"The user configuration mapping that tracks the supplied/borrowed assets"}},"executeFlashLoanSimple(DataTypes.ReserveData storage,DataTypes.FlashloanSimpleParams)":{"details":"Does not waive fee for approved flashborrowers nor allow taking on debt instead of repaying to save gasAt the end of the transaction the pool will pull amount borrowed + fee from the receiver, if the receiver have not approved the pool the transaction will revert.Emits the `FlashLoan()` event","params":{"params":"The additional parameters needed to execute the simple flashloan function","reserve":"The state of the flashloaned reserve"}}},"title":"FlashLoanLogic library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{"@aave/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol":{"BorrowLogic":[{"length":20,"start":1636}]}},"object":"612b8761003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100405760003560e01c80632e7263ea14610045578063a1fe0e8d14610067575b600080fd5b81801561005157600080fd5b506100656100603660046122ee565b610087565b005b81801561007357600080fd5b5061006561008236600461248b565b61097c565b61009a8582602001518360400151610be8565b6101066040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016060815260200160008152602001600081525090565b81602001515167ffffffffffffffff81111561012457610124612036565b60405190808252806020026020018201604052801561014d578160200160208202803683370190505b506080820152815173ffffffffffffffffffffffffffffffffffffffff1681526101a0820151610187578161010001518260e0015161018b565b6000805b60c083015260a0820152600060208201525b8160200151518160200151101561034f5781604001518160200151815181106101c8576101c8612555565b60209081029190910101516060820152600082606001518260200151815181106101f4576101f4612555565b6020026020010151600281111561020d5761020d612584565b600281111561021e5761021e612584565b1461022a57600061023d565b60a0810151606082015161023d91610cd9565b816080015182602001518151811061025757610257612555565b602002602001018181525050856000836020015183602001518151811061028057610280612555565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff90811683529082019290925260409081016000206004908101548551606086015193517f4efecaa5000000000000000000000000000000000000000000000000000000008152908516928101929092526024820192909252911690634efecaa590604401600060405180830381600087803b15801561031f57600080fd5b505af1158015610333573d6000803e3d6000fd5b5050506020820180519150610347826125e2565b90525061019d565b806000015173ffffffffffffffffffffffffffffffffffffffff1663920f5c84836020015184604001518460800151338760a001516040518663ffffffff1660e01b81526004016103a49594939291906126c1565b6020604051808303816000875af11580156103c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e79190612775565b6040518060400160405280600281526020017f31330000000000000000000000000000000000000000000000000000000000008152509061045e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559190612792565b60405180910390fd5b50600060208201525b8160200151518160200151101561097457816020015181602001518151811061049257610492612555565b6020026020010151816040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081604001518160200151815181106104eb576104eb612555565b602090810291909101015160608201526000826060015182602001518151811061051757610517612555565b6020026020010151600281111561053057610530612584565b600281111561054157610541612584565b141561062857610623866000836040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c001604052808460600151815260200184608001518560200151815181106105bb576105bb612555565b602002602001015181526020018460c001518152602001846040015173ffffffffffffffffffffffffffffffffffffffff168152602001856000015173ffffffffffffffffffffffffffffffffffffffff1681526020018560c0015161ffff16815250610d1c565b61095c565b73__$f250b95a8491f1e84f401ed6d1693cd837$__631e6473f987878787604051806101800160405280886040015173ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001896080015173ffffffffffffffffffffffffffffffffffffffff1681526020018860600151815260200189606001518960200151815181106106d2576106d2612555565b602002602001015160028111156106eb576106eb612584565b60028111156106fc576106fc612584565b81526020018960c0015161ffff1681526020016000151581526020018961012001518152602001896101400151815260200189610160015173ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561077e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a291906127a5565b73ffffffffffffffffffffffffffffffffffffffff16815260200189610180015160ff16815260200189610160015173ffffffffffffffffffffffffffffffffffffffff16635eb88d3d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561081b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083f91906127a5565b73ffffffffffffffffffffffffffffffffffffffff168152506040518663ffffffff1660e01b81526004016108789594939291906127fd565b60006040518083038186803b15801561089057600080fd5b505af41580156108a4573d6000803e3d6000fd5b505050508160c0015161ffff16816040015173ffffffffffffffffffffffffffffffffffffffff16836000015173ffffffffffffffffffffffffffffffffffffffff167fefefaba5e921573100900a3ad9cf29f222d995fb3b6045797eaea7521bd8d6f0338560600151876060015187602001518151811061092857610928612555565b6020026020010151600281111561094157610941612584565b60006040516109539493929190612925565b60405180910390a45b6020810180519061096c826125e2565b905250610467565b505050505050565b61098582611030565b805160c0820151604083015160009161099e9190610cd9565b600480860154855160408088015190517f4efecaa500000000000000000000000000000000000000000000000000000000815294955073ffffffffffffffffffffffffffffffffffffffff90921693634efecaa593610a1f93910173ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600060405180830381600087803b158015610a3957600080fd5b505af1158015610a4d573d6000803e3d6000fd5b505050506020830151604080850151606086015191517f1b11d0ff00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861693631b11d0ff93610ab693919287913391600401612965565b6020604051808303816000875af1158015610ad5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af99190612775565b6040518060400160405280600281526020017f313300000000000000000000000000000000000000000000000000000000000081525090610b67576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559190612792565b50610be2846040518060c00160405280866040015181526020018481526020018660a001518152602001866020015173ffffffffffffffffffffffffffffffffffffffff168152602001866000015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015161ffff16815250610d1c565b50505050565b80518251146040518060400160405280600281526020017f343900000000000000000000000000000000000000000000000000000000000081525090610c5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559190612792565b5060005b8251811015610be257610cc7846000858481518110610c8057610c80612555565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611030565b80610cd1816125e2565b915050610c5f565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7783900484111517610d0e57600080fd5b506127109102611388010490565b6000610d3982604001518360200151610cd990919063ffffffff16565b90506000818360200151610d4d91906129b5565b9050600083602001518460000151610d6591906129cc565b90506000610d72866111ba565b9050610d7e86826113d3565b6101008101516008870154610e2f91610da9916fffffffffffffffffffffffffffffffff169061145e565b826101e0015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1d91906129e4565b610e2791906129cc565b8790856114b5565b6101008201819052610e4b90610e46908690611565565b6115a4565b600887018054600090610e719084906fffffffffffffffffffffffffffffffff166129fd565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550610ec58186606001518460008a61164a90949392919063ffffffff16565b60808501516101e08201516060870151610ef89273ffffffffffffffffffffffffffffffffffffffff909116918561198b565b6101e081015160808601516040517f6fd9767600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201819052602482015260448101859052911690636fd9767690606401600060405180830381600087803b158015610f7a57600080fd5b505af1158015610f8e573d6000803e3d6000fd5b505050508460a0015161ffff16856060015173ffffffffffffffffffffffffffffffffffffffff16866080015173ffffffffffffffffffffffffffffffffffffffff167fefefaba5e921573100900a3ad9cf29f222d995fb3b6045797eaea7521bd8d6f03389600001516000600281111561100b5761100b612584565b8b602001516040516110209493929190612925565b60405180910390a4505050505050565b60408051602081019091528154808252671000000000000000161515156040518060400160405280600281526020017f3239000000000000000000000000000000000000000000000000000000000000815250906110bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559190612792565b5080516701000000000000001615156040518060400160405280600281526020017f323700000000000000000000000000000000000000000000000000000000000081525090611138576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559190612792565b5080516780000000000000001615156040518060400160405280600281526020017f3931000000000000000000000000000000000000000000000000000000000000815250906111b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559190612792565b505050565b6111c2611f89565b6111ca611f89565b60408051602081018252845481526101c0830181905251901c61ffff166101a082015260018301546fffffffffffffffffffffffffffffffff808216610100840181905260e0840152600285015480821661014085018190526101208501527001000000000000000000000000000000009283900482166101608501528290041661018083015260048085015473ffffffffffffffffffffffffffffffffffffffff9081166101e085015260058601548116610200850152600686015416610220840181905260038601549290920464ffffffffff16610240840152604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905163b1bf962d928281019260209291908290030181865afa1580156112f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131b91906129e4565b816020018181525081600001818152505080610200015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa15801561137c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a09190612a31565b64ffffffffff166102608501526060840181905260808401829052604084019290925260c083015260a082015292915050565b60038201544264ffffffffff908116700100000000000000000000000000000000909204161415611402575050565b61140c8282611a6d565b6114168282611b8e565b5060030180547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff1602179055565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761149357600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b6001830154600090819061150d906fffffffffffffffffffffffffffffffff166b033b2e3c9fd0803ce80000006114fd6114ee88611d0d565b6114f788611d0d565b90611565565b61150791906129cc565b9061145e565b9050611518816115a4565b6001860180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691909117905590505b9392505050565b600081156b033b2e3c9fd0803ce80000006002840419048411171561158957600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b60006fffffffffffffffffffffffffffffffff821115611646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610455565b5090565b6116756040518060800160405280600081526020016000815260200160008152602001600081525090565b61014085015160208601516116899161145e565b60608083019182526007880154604080516101208101825260088b01546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000009091041681526020810188905280820187905260c0808b0151948201949094529351608085015260a0808a0151908501526101a08901519284019290925273ffffffffffffffffffffffffffffffffffffffff87811660e08501526101e0890151811661010085015291517fa589870900000000000000000000000000000000000000000000000000000000815291169163a5898709916117ea9190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa158015611807573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182b9190612a7c565b60408401526020830152808252611841906115a4565b6001870180546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556020810151611884906115a4565b6003870180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691909117905560408101516118d5906115a4565b6002870180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905580516020808301516040808501516101008a01516101408b0151835196875294860193909352908401526060830152608082015273ffffffffffffffffffffffffffffffffffffffff8516907f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a9060a00160405180910390a2505050505050565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af16119f6573d6000803e3d6000fd5b50611a0085611d28565b611a66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d000000000000006044820152606401610455565b5050505050565b61016081015115611afd576000611a8e826101600151836102400151611df4565b9050611aa78260e001518261145e90919063ffffffff16565b6101008301819052611ab8906115a4565b6001840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b805115611b8a576000611b1a826101800151836102400151611e39565b9050611b348261012001518261145e90919063ffffffff16565b6101408301819052611b45906115a4565b6002840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b5050565b611bc76040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6101a0820151611bd657505050565b6101208201518251611be79161145e565b60208201526101408201518251611bfd9161145e565b60408201526060820151610260830151610240840151611c2592919064ffffffffff16611e42565b606082018190526040830151611c3a9161145e565b808252602082015160808401516040840151611c5691906129cc565b611c6091906129b5565b611c6a91906129b5565b608082018190526101a0830151611c819190610cd9565b60a08201819052156111b557611cac610e468361010001518360a0015161156590919063ffffffff16565b600884018054600090611cd29084906fffffffffffffffffffffffffffffffff166129fd565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550505050565b633b9aca008181029081048214611d2357600080fd5b919050565b6000611d68565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d8015611da75760208114611de157611da27f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f611d2f565b611dee565b823b611dd857611dd87f475076323a206e6f74206120636f6e74726163740000000000000000000000006014611d2f565b60019150611dee565b3d6000803e600051151591505b50919050565b600080611e0864ffffffffff8416426129b5565b611e129085612aaa565b6301e1338090049050611e31816b033b2e3c9fd0803ce80000006129cc565b949350505050565b600061155e8383425b600080611e5664ffffffffff8516846129b5565b905080611e72576b033b2e3c9fd0803ce800000091505061155e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511611ea8576000611ead565b600285035b925066038882915c4000611ec18a8061145e565b81611ece57611ece612ae7565b0491506301e13380611ee0838b61145e565b81611eed57611eed612ae7565b049050600082611efd8688612aaa565b611f079190612aaa565b60029004905060008285611f1b888a612aaa565b611f259190612aaa565b611f2f9190612aaa565b60069004905080826301e13380611f468a8f612aaa565b611f509190612b16565b611f66906b033b2e3c9fd0803ce80000006129cc565b611f7091906129cc565b611f7a91906129cc565b9b9a5050505050505050505050565b604051806102800160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200161200d6040518060200160405280600081525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101c0810167ffffffffffffffff8111828210171561208957612089612036565b60405290565b60405160e0810167ffffffffffffffff8111828210171561208957612089612036565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156120f9576120f9612036565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461212357600080fd5b50565b8035611d2381612101565b600067ffffffffffffffff82111561214b5761214b612036565b5060051b60200190565b600082601f83011261216657600080fd5b8135602061217b61217683612131565b6120b2565b82815260059290921b8401810191818101908684111561219a57600080fd5b8286015b848110156121be5780356121b181612101565b835291830191830161219e565b509695505050505050565b600082601f8301126121da57600080fd5b813560206121ea61217683612131565b82815260059290921b8401810191818101908684111561220957600080fd5b8286015b848110156121be578035835291830191830161220d565b600082601f83011261223557600080fd5b813567ffffffffffffffff81111561224f5761224f612036565b61228060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016120b2565b81815284602083860101111561229557600080fd5b816020850160208301376000918101602001919091529392505050565b803561ffff81168114611d2357600080fd5b803560ff81168114611d2357600080fd5b801515811461212357600080fd5b8035611d23816122d5565b600080600080600060a0868803121561230657600080fd5b85359450602086013593506040860135925060608601359150608086013567ffffffffffffffff8082111561233a57600080fd5b908701906101c0828a03121561234f57600080fd5b612357612065565b61236083612126565b815260208301358281111561237457600080fd5b6123808b828601612155565b60208301525060408301358281111561239857600080fd5b6123a48b8286016121c9565b6040830152506060830135828111156123bc57600080fd5b6123c88b8286016121c9565b6060830152506123da60808401612126565b608082015260a0830135828111156123f157600080fd5b6123fd8b828601612224565b60a08301525061240f60c084016122b2565b60c082015260e08381013590820152610100808401359082015261012080840135908201526101408084013590820152610160915061244f828401612126565b8282015261018091506124638284016122c4565b828201526101a091506124778284016122e3565b828201528093505050509295509295909350565b6000806040838503121561249e57600080fd5b82359150602083013567ffffffffffffffff808211156124bd57600080fd5b9084019060e082870312156124d157600080fd5b6124d961208f565b6124e283612126565b81526124f060208401612126565b60208201526040830135604082015260608301358281111561251157600080fd5b61251d88828601612224565b60608301525061252f608084016122b2565b608082015260a083013560a082015260c083013560c08201528093505050509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612614576126146125b3565b5060010190565b600081518084526020808501945080840160005b8381101561264b5781518752958201959082019060010161262f565b509495945050505050565b6000815180845260005b8181101561267c57602081850181015186830182015201612660565b8181111561268e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60a0808252865190820181905260009060209060c0840190828a01845b8281101561271057815173ffffffffffffffffffffffffffffffffffffffff16845292840192908401906001016126de565b50505083810382850152612724818961261b565b9150508281036040840152612739818761261b565b905073ffffffffffffffffffffffffffffffffffffffff8516606084015282810360808401526127698185612656565b98975050505050505050565b60006020828403121561278757600080fd5b815161155e816122d5565b60208152600061155e6020830184612656565b6000602082840312156127b757600080fd5b815161155e81612101565b600381106127f9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b858152602081018590526040810184905260608101839052815173ffffffffffffffffffffffffffffffffffffffff1660808201526102008101602083015173ffffffffffffffffffffffffffffffffffffffff811660a084015250604083015173ffffffffffffffffffffffffffffffffffffffff811660c084015250606083015160e08301526080830151610100612899818501836127c2565b60a085015191506101206128b28186018461ffff169052565b60c086015192506101406128c98187018515159052565b60e087015161016087810191909152928701516101808701529086015173ffffffffffffffffffffffffffffffffffffffff9081166101a08701529086015160ff166101c0860152908501519081166101e085015290506121be565b73ffffffffffffffffffffffffffffffffffffffff85168152602081018490526080810161295660408301856127c2565b82606083015295945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835286602084015285604084015280851660608401525060a060808301526129aa60a0830184612656565b979650505050505050565b6000828210156129c7576129c76125b3565b500390565b600082198211156129df576129df6125b3565b500190565b6000602082840312156129f657600080fd5b5051919050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a2857612a286125b3565b01949350505050565b60008060008060808587031215612a4757600080fd5b845193506020850151925060408501519150606085015164ffffffffff81168114612a7157600080fd5b939692955090935050565b600080600060608486031215612a9157600080fd5b8351925060208401519150604084015190509250925092565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612ae257612ae26125b3565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612b4c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220c754305337612f5415c370b6d17c38e594b32b1b1f6322d97af0b262f651eb2464736f6c634300080a0033","opcodes":"PUSH2 0x2B87 PUSH2 0x3A PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x40 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2E7263EA EQ PUSH2 0x45 JUMPI DUP1 PUSH4 0xA1FE0E8D EQ PUSH2 0x67 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x65 PUSH2 0x60 CALLDATASIZE PUSH1 0x4 PUSH2 0x22EE JUMP JUMPDEST PUSH2 0x87 JUMP JUMPDEST STOP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x65 PUSH2 0x82 CALLDATASIZE PUSH1 0x4 PUSH2 0x248B JUMP JUMPDEST PUSH2 0x97C JUMP JUMPDEST PUSH2 0x9A DUP6 DUP3 PUSH1 0x20 ADD MLOAD DUP4 PUSH1 0x40 ADD MLOAD PUSH2 0xBE8 JUMP JUMPDEST PUSH2 0x106 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x124 JUMPI PUSH2 0x124 PUSH2 0x2036 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x14D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x80 DUP3 ADD MSTORE DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH2 0x1A0 DUP3 ADD MLOAD PUSH2 0x187 JUMPI DUP2 PUSH2 0x100 ADD MLOAD DUP3 PUSH1 0xE0 ADD MLOAD PUSH2 0x18B JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD MSTORE JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD MLOAD DUP2 PUSH1 0x20 ADD MLOAD LT ISZERO PUSH2 0x34F JUMPI DUP2 PUSH1 0x40 ADD MLOAD DUP2 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x1C8 JUMPI PUSH2 0x1C8 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 DUP3 PUSH1 0x60 ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x1F4 JUMPI PUSH2 0x1F4 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x20D JUMPI PUSH2 0x20D PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x21E JUMPI PUSH2 0x21E PUSH2 0x2584 JUMP JUMPDEST EQ PUSH2 0x22A JUMPI PUSH1 0x0 PUSH2 0x23D JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x23D SWAP2 PUSH2 0xCD9 JUMP JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x257 JUMPI PUSH2 0x257 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP6 PUSH1 0x0 DUP4 PUSH1 0x20 ADD MLOAD DUP4 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x280 JUMPI PUSH2 0x280 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP4 MSTORE SWAP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 DUP2 ADD PUSH1 0x0 KECCAK256 PUSH1 0x4 SWAP1 DUP2 ADD SLOAD DUP6 MLOAD PUSH1 0x60 DUP7 ADD MLOAD SWAP4 MLOAD PUSH32 0x4EFECAA500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 DUP6 AND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP2 AND SWAP1 PUSH4 0x4EFECAA5 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x31F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x333 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 DUP3 ADD DUP1 MLOAD SWAP2 POP PUSH2 0x347 DUP3 PUSH2 0x25E2 JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x19D JUMP JUMPDEST DUP1 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x920F5C84 DUP4 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x40 ADD MLOAD DUP5 PUSH1 0x80 ADD MLOAD CALLER DUP8 PUSH1 0xA0 ADD MLOAD PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A4 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x26C1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3C3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3E7 SWAP2 SWAP1 PUSH2 0x2775 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3133000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x45E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2792 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 ADD MSTORE JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD MLOAD DUP2 PUSH1 0x20 ADD MLOAD LT ISZERO PUSH2 0x974 JUMPI DUP2 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x492 JUMPI PUSH2 0x492 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 PUSH1 0x40 ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP2 PUSH1 0x40 ADD MLOAD DUP2 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x4EB JUMPI PUSH2 0x4EB PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 DUP3 PUSH1 0x60 ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x517 JUMPI PUSH2 0x517 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x530 JUMPI PUSH2 0x530 PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x541 JUMPI PUSH2 0x541 PUSH2 0x2584 JUMP JUMPDEST EQ ISZERO PUSH2 0x628 JUMPI PUSH2 0x623 DUP7 PUSH1 0x0 DUP4 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP5 PUSH1 0x60 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x80 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x5BB JUMPI PUSH2 0x5BB PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xC0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0xC0 ADD MLOAD PUSH2 0xFFFF AND DUP2 MSTORE POP PUSH2 0xD1C JUMP JUMPDEST PUSH2 0x95C JUMP JUMPDEST PUSH20 0x0 PUSH4 0x1E6473F9 DUP8 DUP8 DUP8 DUP8 PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x60 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x60 ADD MLOAD DUP10 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x6D2 JUMPI PUSH2 0x6D2 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x6EB JUMPI PUSH2 0x6EB PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x6FC JUMPI PUSH2 0x6FC PUSH2 0x2584 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0xC0 ADD MLOAD PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x120 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x140 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x160 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x77E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7A2 SWAP2 SWAP1 PUSH2 0x27A5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x180 ADD MLOAD PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x160 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5EB88D3D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x81B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x83F SWAP2 SWAP1 PUSH2 0x27A5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x878 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x27FD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x890 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x8A4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP2 PUSH1 0xC0 ADD MLOAD PUSH2 0xFFFF AND DUP2 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xEFEFABA5E921573100900A3AD9CF29F222D995FB3B6045797EAEA7521BD8D6F0 CALLER DUP6 PUSH1 0x60 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP8 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x928 JUMPI PUSH2 0x928 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x941 JUMPI PUSH2 0x941 PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH2 0x953 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2925 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 JUMPDEST PUSH1 0x20 DUP2 ADD DUP1 MLOAD SWAP1 PUSH2 0x96C DUP3 PUSH2 0x25E2 JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x467 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x985 DUP3 PUSH2 0x1030 JUMP JUMPDEST DUP1 MLOAD PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x0 SWAP2 PUSH2 0x99E SWAP2 SWAP1 PUSH2 0xCD9 JUMP JUMPDEST PUSH1 0x4 DUP1 DUP7 ADD SLOAD DUP6 MLOAD PUSH1 0x40 DUP1 DUP9 ADD MLOAD SWAP1 MLOAD PUSH32 0x4EFECAA500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP5 SWAP6 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP4 PUSH4 0x4EFECAA5 SWAP4 PUSH2 0xA1F SWAP4 SWAP2 ADD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA4D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD SWAP2 MLOAD PUSH32 0x1B11D0FF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP4 PUSH4 0x1B11D0FF SWAP4 PUSH2 0xAB6 SWAP4 SWAP2 SWAP3 DUP8 SWAP2 CALLER SWAP2 PUSH1 0x4 ADD PUSH2 0x2965 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xAD5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAF9 SWAP2 SWAP1 PUSH2 0x2775 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3133000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xB67 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2792 JUMP JUMPDEST POP PUSH2 0xBE2 DUP5 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP7 PUSH1 0x40 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0xA0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x80 ADD MLOAD PUSH2 0xFFFF AND DUP2 MSTORE POP PUSH2 0xD1C JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST DUP1 MLOAD DUP3 MLOAD EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3439000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xC5B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2792 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0xBE2 JUMPI PUSH2 0xCC7 DUP5 PUSH1 0x0 DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xC80 JUMPI PUSH2 0xC80 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH2 0x1030 JUMP JUMPDEST DUP1 PUSH2 0xCD1 DUP2 PUSH2 0x25E2 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xC5F JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0xD0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD39 DUP3 PUSH1 0x40 ADD MLOAD DUP4 PUSH1 0x20 ADD MLOAD PUSH2 0xCD9 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP4 PUSH1 0x20 ADD MLOAD PUSH2 0xD4D SWAP2 SWAP1 PUSH2 0x29B5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0xD65 SWAP2 SWAP1 PUSH2 0x29CC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xD72 DUP7 PUSH2 0x11BA JUMP JUMPDEST SWAP1 POP PUSH2 0xD7E DUP7 DUP3 PUSH2 0x13D3 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH1 0x8 DUP8 ADD SLOAD PUSH2 0xE2F SWAP2 PUSH2 0xDA9 SWAP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0x145E JUMP JUMPDEST DUP3 PUSH2 0x1E0 ADD MLOAD 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 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDF9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE1D SWAP2 SWAP1 PUSH2 0x29E4 JUMP JUMPDEST PUSH2 0xE27 SWAP2 SWAP1 PUSH2 0x29CC JUMP JUMPDEST DUP8 SWAP1 DUP6 PUSH2 0x14B5 JUMP JUMPDEST PUSH2 0x100 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0xE4B SWAP1 PUSH2 0xE46 SWAP1 DUP7 SWAP1 PUSH2 0x1565 JUMP JUMPDEST PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x8 DUP8 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0xE71 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x29FD JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0xEC5 DUP2 DUP7 PUSH1 0x60 ADD MLOAD DUP5 PUSH1 0x0 DUP11 PUSH2 0x164A SWAP1 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x1E0 DUP3 ADD MLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH2 0xEF8 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 DUP6 PUSH2 0x198B JUMP JUMPDEST PUSH2 0x1E0 DUP2 ADD MLOAD PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6FD9767600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP6 SWAP1 MSTORE SWAP2 AND SWAP1 PUSH4 0x6FD97676 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF8E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP5 PUSH1 0xA0 ADD MLOAD PUSH2 0xFFFF AND DUP6 PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xEFEFABA5E921573100900A3AD9CF29F222D995FB3B6045797EAEA7521BD8D6F0 CALLER DUP10 PUSH1 0x0 ADD MLOAD PUSH1 0x0 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x100B JUMPI PUSH2 0x100B PUSH2 0x2584 JUMP JUMPDEST DUP12 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x1020 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2925 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP2 SLOAD DUP1 DUP3 MSTORE PUSH8 0x1000000000000000 AND ISZERO ISZERO ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x10BB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2792 JUMP JUMPDEST POP DUP1 MLOAD PUSH8 0x100000000000000 AND ISZERO ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1138 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2792 JUMP JUMPDEST POP DUP1 MLOAD PUSH8 0x8000000000000000 AND ISZERO ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3931000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x11B5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2792 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x11C2 PUSH2 0x1F89 JUMP JUMPDEST PUSH2 0x11CA PUSH2 0x1F89 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE DUP5 SLOAD DUP2 MSTORE PUSH2 0x1C0 DUP4 ADD DUP2 SWAP1 MSTORE MLOAD SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x1A0 DUP3 ADD MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH2 0x100 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x2 DUP6 ADD SLOAD DUP1 DUP3 AND PUSH2 0x140 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP6 ADD MSTORE PUSH17 0x100000000000000000000000000000000 SWAP3 DUP4 SWAP1 DIV DUP3 AND PUSH2 0x160 DUP6 ADD MSTORE DUP3 SWAP1 DIV AND PUSH2 0x180 DUP4 ADD MSTORE PUSH1 0x4 DUP1 DUP6 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE PUSH1 0x5 DUP7 ADD SLOAD DUP2 AND PUSH2 0x200 DUP6 ADD MSTORE PUSH1 0x6 DUP7 ADD SLOAD AND PUSH2 0x220 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x3 DUP7 ADD SLOAD SWAP3 SWAP1 SWAP3 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x240 DUP5 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0xB1BF962D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0xB1BF962D SWAP3 DUP3 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12F7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x131B SWAP2 SWAP1 PUSH2 0x29E4 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP DUP2 PUSH1 0x0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x79774338 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x137C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13A0 SWAP2 SWAP1 PUSH2 0x2A31 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH2 0x260 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP5 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD TIMESTAMP PUSH5 0xFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP3 DIV AND EQ ISZERO PUSH2 0x1402 JUMPI POP POP JUMP JUMPDEST PUSH2 0x140C DUP3 DUP3 PUSH2 0x1A6D JUMP JUMPDEST PUSH2 0x1416 DUP3 DUP3 PUSH2 0x1B8E JUMP JUMPDEST POP PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1493 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0x150D SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x14FD PUSH2 0x14EE DUP9 PUSH2 0x1D0D JUMP JUMPDEST PUSH2 0x14F7 DUP9 PUSH2 0x1D0D JUMP JUMPDEST SWAP1 PUSH2 0x1565 JUMP JUMPDEST PUSH2 0x1507 SWAP2 SWAP1 PUSH2 0x29CC JUMP JUMPDEST SWAP1 PUSH2 0x145E JUMP JUMPDEST SWAP1 POP PUSH2 0x1518 DUP2 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x1 DUP7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1589 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1646 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x455 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x1675 PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0x1689 SWAP2 PUSH2 0x145E JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x7 DUP9 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x8 DUP12 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP9 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP12 ADD MLOAD SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 MLOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP11 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x1A0 DUP10 ADD MLOAD SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x1E0 DUP10 ADD MLOAD DUP2 AND PUSH2 0x100 DUP6 ADD MSTORE SWAP2 MLOAD PUSH32 0xA589870900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0xA5898709 SWAP2 PUSH2 0x17EA SWAP2 SWAP1 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE 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 PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 SWAP2 POP DUP1 DUP3 DUP7 ADD MLOAD AND DUP3 DUP6 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1807 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x182B SWAP2 SWAP1 PUSH2 0x2A7C JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP1 DUP3 MSTORE PUSH2 0x1841 SWAP1 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x1 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x1884 SWAP1 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x3 DUP8 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x18D5 SWAP1 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x2 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH2 0x100 DUP11 ADD MLOAD PUSH2 0x140 DUP12 ADD MLOAD DUP4 MLOAD SWAP7 DUP8 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0x804C9B842B2748A22BB64B345453A3DE7CA54A6CA45CE00D415894979E22897A SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x19F6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1A00 DUP6 PUSH2 0x1D28 JUMP JUMPDEST PUSH2 0x1A66 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x455 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD ISZERO PUSH2 0x1AFD JUMPI PUSH1 0x0 PUSH2 0x1A8E DUP3 PUSH2 0x160 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x1DF4 JUMP JUMPDEST SWAP1 POP PUSH2 0x1AA7 DUP3 PUSH1 0xE0 ADD MLOAD DUP3 PUSH2 0x145E SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x100 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x1AB8 SWAP1 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x1 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1B8A JUMPI PUSH1 0x0 PUSH2 0x1B1A DUP3 PUSH2 0x180 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x1E39 JUMP JUMPDEST SWAP1 POP PUSH2 0x1B34 DUP3 PUSH2 0x120 ADD MLOAD DUP3 PUSH2 0x145E SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x140 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x1B45 SWAP1 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x1BC7 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x1A0 DUP3 ADD MLOAD PUSH2 0x1BD6 JUMPI POP POP POP JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x1BE7 SWAP2 PUSH2 0x145E JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x140 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x1BFD SWAP2 PUSH2 0x145E JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x260 DUP4 ADD MLOAD PUSH2 0x240 DUP5 ADD MLOAD PUSH2 0x1C25 SWAP3 SWAP2 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x1C3A SWAP2 PUSH2 0x145E JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x1C56 SWAP2 SWAP1 PUSH2 0x29CC JUMP JUMPDEST PUSH2 0x1C60 SWAP2 SWAP1 PUSH2 0x29B5 JUMP JUMPDEST PUSH2 0x1C6A SWAP2 SWAP1 PUSH2 0x29B5 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP4 ADD MLOAD PUSH2 0x1C81 SWAP2 SWAP1 PUSH2 0xCD9 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE ISZERO PUSH2 0x11B5 JUMPI PUSH2 0x1CAC PUSH2 0xE46 DUP4 PUSH2 0x100 ADD MLOAD DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0x1565 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x8 DUP5 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x1CD2 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x29FD JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST PUSH4 0x3B9ACA00 DUP2 DUP2 MUL SWAP1 DUP2 DIV DUP3 EQ PUSH2 0x1D23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D68 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x1DA7 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x1DE1 JUMPI PUSH2 0x1DA2 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x1D2F JUMP JUMPDEST PUSH2 0x1DEE JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x1DD8 JUMPI PUSH2 0x1DD8 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x1D2F JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x1DEE JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1E08 PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x29B5 JUMP JUMPDEST PUSH2 0x1E12 SWAP1 DUP6 PUSH2 0x2AAA JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x1E31 DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x29CC JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x155E DUP4 DUP4 TIMESTAMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1E56 PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x29B5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1E72 JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x155E JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x1EA8 JUMPI PUSH1 0x0 PUSH2 0x1EAD JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x1EC1 DUP11 DUP1 PUSH2 0x145E JUMP JUMPDEST DUP2 PUSH2 0x1ECE JUMPI PUSH2 0x1ECE PUSH2 0x2AE7 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x1EE0 DUP4 DUP12 PUSH2 0x145E JUMP JUMPDEST DUP2 PUSH2 0x1EED JUMPI PUSH2 0x1EED PUSH2 0x2AE7 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x1EFD DUP7 DUP9 PUSH2 0x2AAA JUMP JUMPDEST PUSH2 0x1F07 SWAP2 SWAP1 PUSH2 0x2AAA JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x1F1B DUP9 DUP11 PUSH2 0x2AAA JUMP JUMPDEST PUSH2 0x1F25 SWAP2 SWAP1 PUSH2 0x2AAA JUMP JUMPDEST PUSH2 0x1F2F SWAP2 SWAP1 PUSH2 0x2AAA JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x1F46 DUP11 DUP16 PUSH2 0x2AAA JUMP JUMPDEST PUSH2 0x1F50 SWAP2 SWAP1 PUSH2 0x2B16 JUMP JUMPDEST PUSH2 0x1F66 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x29CC JUMP JUMPDEST PUSH2 0x1F70 SWAP2 SWAP1 PUSH2 0x29CC JUMP JUMPDEST PUSH2 0x1F7A SWAP2 SWAP1 PUSH2 0x29CC JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x280 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x200D PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2089 JUMPI PUSH2 0x2089 PUSH2 0x2036 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xE0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2089 JUMPI PUSH2 0x2089 PUSH2 0x2036 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x20F9 JUMPI PUSH2 0x20F9 PUSH2 0x2036 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1D23 DUP2 PUSH2 0x2101 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x214B JUMPI PUSH2 0x214B PUSH2 0x2036 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2166 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x217B PUSH2 0x2176 DUP4 PUSH2 0x2131 JUMP JUMPDEST PUSH2 0x20B2 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP7 DUP5 GT ISZERO PUSH2 0x219A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP7 ADD JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x21BE JUMPI DUP1 CALLDATALOAD PUSH2 0x21B1 DUP2 PUSH2 0x2101 JUMP JUMPDEST DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x219E JUMP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x21DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x21EA PUSH2 0x2176 DUP4 PUSH2 0x2131 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP7 DUP5 GT ISZERO PUSH2 0x2209 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP7 ADD JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x21BE JUMPI DUP1 CALLDATALOAD DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x220D JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2235 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x224F JUMPI PUSH2 0x224F PUSH2 0x2036 JUMP JUMPDEST PUSH2 0x2280 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x20B2 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x2295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x1D23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1D23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x2123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1D23 DUP2 PUSH2 0x22D5 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2306 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x233A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP8 ADD SWAP1 PUSH2 0x1C0 DUP3 DUP11 SUB SLT ISZERO PUSH2 0x234F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2357 PUSH2 0x2065 JUMP JUMPDEST PUSH2 0x2360 DUP4 PUSH2 0x2126 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x2374 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2380 DUP12 DUP3 DUP7 ADD PUSH2 0x2155 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x2398 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x23A4 DUP12 DUP3 DUP7 ADD PUSH2 0x21C9 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x23BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x23C8 DUP12 DUP3 DUP7 ADD PUSH2 0x21C9 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH2 0x23DA PUSH1 0x80 DUP5 ADD PUSH2 0x2126 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x23F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x23FD DUP12 DUP3 DUP7 ADD PUSH2 0x2224 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH2 0x240F PUSH1 0xC0 DUP5 ADD PUSH2 0x22B2 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xE0 DUP4 DUP2 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x100 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x120 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x140 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x160 SWAP2 POP PUSH2 0x244F DUP3 DUP5 ADD PUSH2 0x2126 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH2 0x180 SWAP2 POP PUSH2 0x2463 DUP3 DUP5 ADD PUSH2 0x22C4 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH2 0x1A0 SWAP2 POP PUSH2 0x2477 DUP3 DUP5 ADD PUSH2 0x22E3 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE DUP1 SWAP4 POP POP POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x249E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x24BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP5 ADD SWAP1 PUSH1 0xE0 DUP3 DUP8 SUB SLT ISZERO PUSH2 0x24D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x24D9 PUSH2 0x208F JUMP JUMPDEST PUSH2 0x24E2 DUP4 PUSH2 0x2126 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x24F0 PUSH1 0x20 DUP5 ADD PUSH2 0x2126 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x2511 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x251D DUP9 DUP3 DUP7 ADD PUSH2 0x2224 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH2 0x252F PUSH1 0x80 DUP5 ADD PUSH2 0x22B2 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP4 ADD CALLDATALOAD PUSH1 0xC0 DUP3 ADD MSTORE DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x2614 JUMPI PUSH2 0x2614 PUSH2 0x25B3 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x264B JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x262F JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x267C JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x2660 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x268E JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xA0 DUP1 DUP3 MSTORE DUP7 MLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0xC0 DUP5 ADD SWAP1 DUP3 DUP11 ADD DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2710 JUMPI DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x26DE JUMP JUMPDEST POP POP POP DUP4 DUP2 SUB DUP3 DUP6 ADD MSTORE PUSH2 0x2724 DUP2 DUP10 PUSH2 0x261B JUMP JUMPDEST SWAP2 POP POP DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x2739 DUP2 DUP8 PUSH2 0x261B JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x60 DUP5 ADD MSTORE DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x2769 DUP2 DUP6 PUSH2 0x2656 JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2787 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x155E DUP2 PUSH2 0x22D5 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x155E PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2656 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x27B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x155E DUP2 PUSH2 0x2101 JUMP JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x27F9 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x200 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x2899 DUP2 DUP6 ADD DUP4 PUSH2 0x27C2 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x120 PUSH2 0x28B2 DUP2 DUP7 ADD DUP5 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xC0 DUP7 ADD MLOAD SWAP3 POP PUSH2 0x140 PUSH2 0x28C9 DUP2 DUP8 ADD DUP6 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MLOAD PUSH2 0x160 DUP8 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP8 ADD MLOAD PUSH2 0x180 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1A0 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x1C0 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x21BE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD PUSH2 0x2956 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x27C2 JUMP JUMPDEST DUP3 PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND DUP4 MSTORE DUP7 PUSH1 0x20 DUP5 ADD MSTORE DUP6 PUSH1 0x40 DUP5 ADD MSTORE DUP1 DUP6 AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0xA0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x29AA PUSH1 0xA0 DUP4 ADD DUP5 PUSH2 0x2656 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x29C7 JUMPI PUSH2 0x29C7 PUSH2 0x25B3 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x29DF JUMPI PUSH2 0x29DF PUSH2 0x25B3 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x29F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x2A28 JUMPI PUSH2 0x2A28 PUSH2 0x25B3 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2A47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2A71 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2A91 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2AE2 JUMPI PUSH2 0x2AE2 PUSH2 0x25B3 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2B4C JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC7 SLOAD ADDRESS MSTORE8 CALLDATACOPY PUSH2 0x2F54 ISZERO 0xC3 PUSH17 0xB6D17C38E594B32B1B1F6322D97AF0B262 0xF6 MLOAD 0xEB 0x24 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"1270:9574:80:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1270:9574:80;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_accrueToTreasury_18152":{"entryPoint":7054,"id":18152,"parameterSlots":2,"returnSlots":0},"@_handleFlashLoanRepayment_15249":{"entryPoint":3356,"id":15249,"parameterSlots":2,"returnSlots":0},"@_updateIndexes_18233":{"entryPoint":6765,"id":18233,"parameterSlots":2,"returnSlots":0},"@cache_18376":{"entryPoint":4538,"id":18376,"parameterSlots":1,"returnSlots":1},"@calculateCompoundedInterest_21079":{"entryPoint":7746,"id":21079,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_21097":{"entryPoint":7737,"id":21097,"parameterSlots":2,"returnSlots":1},"@calculateLinearInterest_20956":{"entryPoint":7668,"id":20956,"parameterSlots":2,"returnSlots":1},"@cumulateToLiquidityIndex_17836":{"entryPoint":5301,"id":17836,"parameterSlots":3,"returnSlots":1},"@executeFlashLoanSimple_15109":{"entryPoint":2428,"id":15109,"parameterSlots":2,"returnSlots":0},"@executeFlashLoan_15029":{"entryPoint":135,"id":15029,"parameterSlots":5,"returnSlots":0},"@getActive_10983":{"entryPoint":null,"id":10983,"parameterSlots":1,"returnSlots":1},"@getFlashLoanEnabled_11697":{"entryPoint":null,"id":11697,"parameterSlots":1,"returnSlots":1},"@getLastTransferResult_117":{"entryPoint":7464,"id":117,"parameterSlots":1,"returnSlots":1},"@getPaused_11083":{"entryPoint":null,"id":11083,"parameterSlots":1,"returnSlots":1},"@getReserveFactor_11335":{"entryPoint":null,"id":11335,"parameterSlots":1,"returnSlots":1},"@percentMul_21119":{"entryPoint":3289,"id":21119,"parameterSlots":2,"returnSlots":1},"@rayDiv_21198":{"entryPoint":5477,"id":21198,"parameterSlots":2,"returnSlots":1},"@rayMul_21186":{"entryPoint":5214,"id":21186,"parameterSlots":2,"returnSlots":1},"@safeTransferFrom_106":{"entryPoint":6539,"id":106,"parameterSlots":4,"returnSlots":0},"@toUint128_1626":{"entryPoint":5540,"id":1626,"parameterSlots":1,"returnSlots":1},"@updateInterestRates_18024":{"entryPoint":5706,"id":18024,"parameterSlots":5,"returnSlots":0},"@updateState_17793":{"entryPoint":5075,"id":17793,"parameterSlots":2,"returnSlots":0},"@validateFlashloanSimple_20317":{"entryPoint":4144,"id":20317,"parameterSlots":1,"returnSlots":0},"@validateFlashloan_20276":{"entryPoint":3048,"id":20276,"parameterSlots":3,"returnSlots":0},"@wadToRay_21218":{"entryPoint":7437,"id":21218,"parameterSlots":1,"returnSlots":1},"abi_decode_address":{"entryPoint":8486,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_address_dyn":{"entryPoint":8533,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn":{"entryPoint":8649,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool":{"entryPoint":8931,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes":{"entryPoint":8740,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":10149,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":10101,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$t_struct$_UserConfigurationMap_$21322_storage_ptrt_struct$_FlashloanParams_$21516_memory_ptr":{"entryPoint":8942,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_struct$_ReserveData_$21315_storage_ptrt_struct$_FlashloanSimpleParams_$21531_memory_ptr":{"entryPoint":9355,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":10724,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory":{"entryPoint":10876,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory":{"entryPoint":10801,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_uint16":{"entryPoint":8882,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint8":{"entryPoint":8900,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_array_uint256_dyn":{"entryPoint":9755,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_bytes":{"entryPoint":9814,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_enum_InterestRateMode":{"entryPoint":10178,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_enum$_InterestRateMode_$21337_t_rational_0_by_1__to_t_address_t_uint256_t_uint8_t_uint256__fromStack_reversed":{"entryPoint":10533,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_enum$_InterestRateMode_$21337_t_uint256__to_t_address_t_uint256_t_uint8_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint256_t_address_t_bytes_memory_ptr__to_t_address_t_uint256_t_uint256_t_address_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":10597,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":9921,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_t_struct$_ExecuteBorrowParams_$21433_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteBorrowParams_$21433_memory_ptr__fromStack_library_reversed":{"entryPoint":10237,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":10130,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_uint16":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint8":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"allocate_memory":{"entryPoint":8370,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_2626":{"entryPoint":8293,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_2628":{"entryPoint":8335,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_array_address_dyn":{"entryPoint":8497,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":10749,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":10700,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":11030,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":10922,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":10677,"id":null,"parameterSlots":2,"returnSlots":1},"increment_t_uint256":{"entryPoint":9698,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":9651,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":10983,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":9604,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":9557,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":8246,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":8449,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_bool":{"entryPoint":8917,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:20727:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"46:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"63:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"66:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"56:6:201"},"nodeType":"YulFunctionCall","src":"56:88:201"},"nodeType":"YulExpressionStatement","src":"56:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"160:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"163:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"153:6:201"},"nodeType":"YulFunctionCall","src":"153:15:201"},"nodeType":"YulExpressionStatement","src":"153:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"184:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"187:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"177:6:201"},"nodeType":"YulFunctionCall","src":"177:15:201"},"nodeType":"YulExpressionStatement","src":"177:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"14:184:201"},{"body":{"nodeType":"YulBlock","src":"249:209:201","statements":[{"nodeType":"YulAssignment","src":"259:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"275:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"269:5:201"},"nodeType":"YulFunctionCall","src":"269:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"259:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"287:37:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"309:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"317:6:201","type":"","value":"0x01c0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"305:3:201"},"nodeType":"YulFunctionCall","src":"305:19:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"291:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"399:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"401:16:201"},"nodeType":"YulFunctionCall","src":"401:18:201"},"nodeType":"YulExpressionStatement","src":"401:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"342:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"354:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"339:2:201"},"nodeType":"YulFunctionCall","src":"339:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"378:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"390:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"375:2:201"},"nodeType":"YulFunctionCall","src":"375:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"336:2:201"},"nodeType":"YulFunctionCall","src":"336:62:201"},"nodeType":"YulIf","src":"333:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"437:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"441:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"430:6:201"},"nodeType":"YulFunctionCall","src":"430:22:201"},"nodeType":"YulExpressionStatement","src":"430:22:201"}]},"name":"allocate_memory_2626","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"238:6:201","type":""}],"src":"203:255:201"},{"body":{"nodeType":"YulBlock","src":"509:207:201","statements":[{"nodeType":"YulAssignment","src":"519:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"535:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"529:5:201"},"nodeType":"YulFunctionCall","src":"529:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"519:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"547:35:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"569:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"577:4:201","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"565:3:201"},"nodeType":"YulFunctionCall","src":"565:17:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"551:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"657:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"659:16:201"},"nodeType":"YulFunctionCall","src":"659:18:201"},"nodeType":"YulExpressionStatement","src":"659:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"600:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"612:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"597:2:201"},"nodeType":"YulFunctionCall","src":"597:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"636:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"648:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"633:2:201"},"nodeType":"YulFunctionCall","src":"633:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"594:2:201"},"nodeType":"YulFunctionCall","src":"594:62:201"},"nodeType":"YulIf","src":"591:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"695:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"699:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"688:6:201"},"nodeType":"YulFunctionCall","src":"688:22:201"},"nodeType":"YulExpressionStatement","src":"688:22:201"}]},"name":"allocate_memory_2628","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"498:6:201","type":""}],"src":"463:253:201"},{"body":{"nodeType":"YulBlock","src":"766:289:201","statements":[{"nodeType":"YulAssignment","src":"776:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"792:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"786:5:201"},"nodeType":"YulFunctionCall","src":"786:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"776:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"804:117:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"826:6:201"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"842:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"848:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"838:3:201"},"nodeType":"YulFunctionCall","src":"838:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"853:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"834:3:201"},"nodeType":"YulFunctionCall","src":"834:86:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"822:3:201"},"nodeType":"YulFunctionCall","src":"822:99:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"808:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"996:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"998:16:201"},"nodeType":"YulFunctionCall","src":"998:18:201"},"nodeType":"YulExpressionStatement","src":"998:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"939:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"951:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"936:2:201"},"nodeType":"YulFunctionCall","src":"936:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"975:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"987:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"972:2:201"},"nodeType":"YulFunctionCall","src":"972:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"933:2:201"},"nodeType":"YulFunctionCall","src":"933:62:201"},"nodeType":"YulIf","src":"930:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1034:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1038:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1027:6:201"},"nodeType":"YulFunctionCall","src":"1027:22:201"},"nodeType":"YulExpressionStatement","src":"1027:22:201"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"746:4:201","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"755:6:201","type":""}],"src":"721:334:201"},{"body":{"nodeType":"YulBlock","src":"1105:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"1192:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1201:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1204:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1194:6:201"},"nodeType":"YulFunctionCall","src":"1194:12:201"},"nodeType":"YulExpressionStatement","src":"1194:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1128:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1139:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1146:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1135:3:201"},"nodeType":"YulFunctionCall","src":"1135:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1125:2:201"},"nodeType":"YulFunctionCall","src":"1125:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1118:6:201"},"nodeType":"YulFunctionCall","src":"1118:73:201"},"nodeType":"YulIf","src":"1115:93:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1094:5:201","type":""}],"src":"1060:154:201"},{"body":{"nodeType":"YulBlock","src":"1268:85:201","statements":[{"nodeType":"YulAssignment","src":"1278:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1300:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1287:12:201"},"nodeType":"YulFunctionCall","src":"1287:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1278:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1341:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1316:24:201"},"nodeType":"YulFunctionCall","src":"1316:31:201"},"nodeType":"YulExpressionStatement","src":"1316:31:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1247:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1258:5:201","type":""}],"src":"1219:134:201"},{"body":{"nodeType":"YulBlock","src":"1427:114:201","statements":[{"body":{"nodeType":"YulBlock","src":"1471:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1473:16:201"},"nodeType":"YulFunctionCall","src":"1473:18:201"},"nodeType":"YulExpressionStatement","src":"1473:18:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1443:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1451:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1440:2:201"},"nodeType":"YulFunctionCall","src":"1440:30:201"},"nodeType":"YulIf","src":"1437:56:201"},{"nodeType":"YulAssignment","src":"1502:33:201","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1518:1:201","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"1521:6:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1514:3:201"},"nodeType":"YulFunctionCall","src":"1514:14:201"},{"kind":"number","nodeType":"YulLiteral","src":"1530:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1510:3:201"},"nodeType":"YulFunctionCall","src":"1510:25:201"},"variableNames":[{"name":"size","nodeType":"YulIdentifier","src":"1502:4:201"}]}]},"name":"array_allocation_size_array_address_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nodeType":"YulTypedName","src":"1407:6:201","type":""}],"returnVariables":[{"name":"size","nodeType":"YulTypedName","src":"1418:4:201","type":""}],"src":"1358:183:201"},{"body":{"nodeType":"YulBlock","src":"1610:673:201","statements":[{"body":{"nodeType":"YulBlock","src":"1659:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1668:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1671:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1661:6:201"},"nodeType":"YulFunctionCall","src":"1661:12:201"},"nodeType":"YulExpressionStatement","src":"1661:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1638:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1646:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1634:3:201"},"nodeType":"YulFunctionCall","src":"1634:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"1653:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1630:3:201"},"nodeType":"YulFunctionCall","src":"1630:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1623:6:201"},"nodeType":"YulFunctionCall","src":"1623:35:201"},"nodeType":"YulIf","src":"1620:55:201"},{"nodeType":"YulVariableDeclaration","src":"1684:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1707:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1694:12:201"},"nodeType":"YulFunctionCall","src":"1694:20:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1688:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1723:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1733:4:201","type":"","value":"0x20"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1727:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1746:71:201","value":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1813:2:201"}],"functionName":{"name":"array_allocation_size_array_address_dyn","nodeType":"YulIdentifier","src":"1773:39:201"},"nodeType":"YulFunctionCall","src":"1773:43:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"1757:15:201"},"nodeType":"YulFunctionCall","src":"1757:60:201"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"1750:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1826:16:201","value":{"name":"dst","nodeType":"YulIdentifier","src":"1839:3:201"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"1830:5:201","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1858:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1863:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1851:6:201"},"nodeType":"YulFunctionCall","src":"1851:15:201"},"nodeType":"YulExpressionStatement","src":"1851:15:201"},{"nodeType":"YulAssignment","src":"1875:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1886:3:201"},{"name":"_2","nodeType":"YulIdentifier","src":"1891:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1882:3:201"},"nodeType":"YulFunctionCall","src":"1882:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"1875:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"1903:46:201","value":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1925:6:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1937:1:201","type":"","value":"5"},{"name":"_1","nodeType":"YulIdentifier","src":"1940:2:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1933:3:201"},"nodeType":"YulFunctionCall","src":"1933:10:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1921:3:201"},"nodeType":"YulFunctionCall","src":"1921:23:201"},{"name":"_2","nodeType":"YulIdentifier","src":"1946:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1917:3:201"},"nodeType":"YulFunctionCall","src":"1917:32:201"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"1907:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1977:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1986:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1989:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1979:6:201"},"nodeType":"YulFunctionCall","src":"1979:12:201"},"nodeType":"YulExpressionStatement","src":"1979:12:201"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"1964:6:201"},{"name":"end","nodeType":"YulIdentifier","src":"1972:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1961:2:201"},"nodeType":"YulFunctionCall","src":"1961:15:201"},"nodeType":"YulIf","src":"1958:35:201"},{"nodeType":"YulVariableDeclaration","src":"2002:26:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2017:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2025:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2013:3:201"},"nodeType":"YulFunctionCall","src":"2013:15:201"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"2006:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2093:161:201","statements":[{"nodeType":"YulVariableDeclaration","src":"2107:30:201","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2133:3:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2120:12:201"},"nodeType":"YulFunctionCall","src":"2120:17:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2111:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2175:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2150:24:201"},"nodeType":"YulFunctionCall","src":"2150:31:201"},"nodeType":"YulExpressionStatement","src":"2150:31:201"},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2201:3:201"},{"name":"value","nodeType":"YulIdentifier","src":"2206:5:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2194:6:201"},"nodeType":"YulFunctionCall","src":"2194:18:201"},"nodeType":"YulExpressionStatement","src":"2194:18:201"},{"nodeType":"YulAssignment","src":"2225:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2236:3:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2241:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2232:3:201"},"nodeType":"YulFunctionCall","src":"2232:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"2225:3:201"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2048:3:201"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"2053:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2045:2:201"},"nodeType":"YulFunctionCall","src":"2045:15:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2061:23:201","statements":[{"nodeType":"YulAssignment","src":"2063:19:201","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2074:3:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2079:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2070:3:201"},"nodeType":"YulFunctionCall","src":"2070:12:201"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"2063:3:201"}]}]},"pre":{"nodeType":"YulBlock","src":"2041:3:201","statements":[]},"src":"2037:217:201"},{"nodeType":"YulAssignment","src":"2263:14:201","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"2272:5:201"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"2263:5:201"}]}]},"name":"abi_decode_array_address_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1584:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"1592:3:201","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"1600:5:201","type":""}],"src":"1546:737:201"},{"body":{"nodeType":"YulBlock","src":"2352:598:201","statements":[{"body":{"nodeType":"YulBlock","src":"2401:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2410:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2413:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2403:6:201"},"nodeType":"YulFunctionCall","src":"2403:12:201"},"nodeType":"YulExpressionStatement","src":"2403:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2380:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2388:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2376:3:201"},"nodeType":"YulFunctionCall","src":"2376:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"2395:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2372:3:201"},"nodeType":"YulFunctionCall","src":"2372:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2365:6:201"},"nodeType":"YulFunctionCall","src":"2365:35:201"},"nodeType":"YulIf","src":"2362:55:201"},{"nodeType":"YulVariableDeclaration","src":"2426:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2449:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2436:12:201"},"nodeType":"YulFunctionCall","src":"2436:20:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2430:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2465:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2475:4:201","type":"","value":"0x20"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"2469:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2488:71:201","value":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2555:2:201"}],"functionName":{"name":"array_allocation_size_array_address_dyn","nodeType":"YulIdentifier","src":"2515:39:201"},"nodeType":"YulFunctionCall","src":"2515:43:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"2499:15:201"},"nodeType":"YulFunctionCall","src":"2499:60:201"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"2492:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2568:16:201","value":{"name":"dst","nodeType":"YulIdentifier","src":"2581:3:201"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"2572:5:201","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2600:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2605:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2593:6:201"},"nodeType":"YulFunctionCall","src":"2593:15:201"},"nodeType":"YulExpressionStatement","src":"2593:15:201"},{"nodeType":"YulAssignment","src":"2617:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2628:3:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2633:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2624:3:201"},"nodeType":"YulFunctionCall","src":"2624:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"2617:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"2645:46:201","value":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2667:6:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2679:1:201","type":"","value":"5"},{"name":"_1","nodeType":"YulIdentifier","src":"2682:2:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2675:3:201"},"nodeType":"YulFunctionCall","src":"2675:10:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2663:3:201"},"nodeType":"YulFunctionCall","src":"2663:23:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2688:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2659:3:201"},"nodeType":"YulFunctionCall","src":"2659:32:201"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"2649:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2719:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2728:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2731:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2721:6:201"},"nodeType":"YulFunctionCall","src":"2721:12:201"},"nodeType":"YulExpressionStatement","src":"2721:12:201"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"2706:6:201"},{"name":"end","nodeType":"YulIdentifier","src":"2714:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2703:2:201"},"nodeType":"YulFunctionCall","src":"2703:15:201"},"nodeType":"YulIf","src":"2700:35:201"},{"nodeType":"YulVariableDeclaration","src":"2744:26:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2759:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2767:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2755:3:201"},"nodeType":"YulFunctionCall","src":"2755:15:201"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"2748:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2835:86:201","statements":[{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2856:3:201"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2874:3:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2861:12:201"},"nodeType":"YulFunctionCall","src":"2861:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2849:6:201"},"nodeType":"YulFunctionCall","src":"2849:30:201"},"nodeType":"YulExpressionStatement","src":"2849:30:201"},{"nodeType":"YulAssignment","src":"2892:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2903:3:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2908:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2899:3:201"},"nodeType":"YulFunctionCall","src":"2899:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"2892:3:201"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2790:3:201"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"2795:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2787:2:201"},"nodeType":"YulFunctionCall","src":"2787:15:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2803:23:201","statements":[{"nodeType":"YulAssignment","src":"2805:19:201","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"2816:3:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2821:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2812:3:201"},"nodeType":"YulFunctionCall","src":"2812:12:201"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"2805:3:201"}]}]},"pre":{"nodeType":"YulBlock","src":"2783:3:201","statements":[]},"src":"2779:142:201"},{"nodeType":"YulAssignment","src":"2930:14:201","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"2939:5:201"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"2930:5:201"}]}]},"name":"abi_decode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2326:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"2334:3:201","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"2342:5:201","type":""}],"src":"2288:662:201"},{"body":{"nodeType":"YulBlock","src":"3007:537:201","statements":[{"body":{"nodeType":"YulBlock","src":"3056:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3065:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3068:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3058:6:201"},"nodeType":"YulFunctionCall","src":"3058:12:201"},"nodeType":"YulExpressionStatement","src":"3058:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3035:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3043:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3031:3:201"},"nodeType":"YulFunctionCall","src":"3031:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"3050:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3027:3:201"},"nodeType":"YulFunctionCall","src":"3027:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3020:6:201"},"nodeType":"YulFunctionCall","src":"3020:35:201"},"nodeType":"YulIf","src":"3017:55:201"},{"nodeType":"YulVariableDeclaration","src":"3081:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3104:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3091:12:201"},"nodeType":"YulFunctionCall","src":"3091:20:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3085:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3150:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"3152:16:201"},"nodeType":"YulFunctionCall","src":"3152:18:201"},"nodeType":"YulExpressionStatement","src":"3152:18:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3126:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"3130:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3123:2:201"},"nodeType":"YulFunctionCall","src":"3123:26:201"},"nodeType":"YulIf","src":"3120:52:201"},{"nodeType":"YulVariableDeclaration","src":"3181:129:201","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3224:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"3228:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3220:3:201"},"nodeType":"YulFunctionCall","src":"3220:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"3235:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3216:3:201"},"nodeType":"YulFunctionCall","src":"3216:86:201"},{"kind":"number","nodeType":"YulLiteral","src":"3304:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3212:3:201"},"nodeType":"YulFunctionCall","src":"3212:97:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"3196:15:201"},"nodeType":"YulFunctionCall","src":"3196:114:201"},"variables":[{"name":"array_1","nodeType":"YulTypedName","src":"3185:7:201","type":""}]},{"expression":{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"3326:7:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3335:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3319:6:201"},"nodeType":"YulFunctionCall","src":"3319:19:201"},"nodeType":"YulExpressionStatement","src":"3319:19:201"},{"body":{"nodeType":"YulBlock","src":"3386:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3395:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3398:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3388:6:201"},"nodeType":"YulFunctionCall","src":"3388:12:201"},"nodeType":"YulExpressionStatement","src":"3388:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3361:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3369:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3357:3:201"},"nodeType":"YulFunctionCall","src":"3357:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"3374:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3353:3:201"},"nodeType":"YulFunctionCall","src":"3353:26:201"},{"name":"end","nodeType":"YulIdentifier","src":"3381:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3350:2:201"},"nodeType":"YulFunctionCall","src":"3350:35:201"},"nodeType":"YulIf","src":"3347:55:201"},{"expression":{"arguments":[{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"3428:7:201"},{"kind":"number","nodeType":"YulLiteral","src":"3437:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3424:3:201"},"nodeType":"YulFunctionCall","src":"3424:18:201"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3448:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3456:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3444:3:201"},"nodeType":"YulFunctionCall","src":"3444:17:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3463:2:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"3411:12:201"},"nodeType":"YulFunctionCall","src":"3411:55:201"},"nodeType":"YulExpressionStatement","src":"3411:55:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"3490:7:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3499:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3486:3:201"},"nodeType":"YulFunctionCall","src":"3486:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"3504:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3482:3:201"},"nodeType":"YulFunctionCall","src":"3482:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"3511:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3475:6:201"},"nodeType":"YulFunctionCall","src":"3475:38:201"},"nodeType":"YulExpressionStatement","src":"3475:38:201"},{"nodeType":"YulAssignment","src":"3522:16:201","value":{"name":"array_1","nodeType":"YulIdentifier","src":"3531:7:201"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"3522:5:201"}]}]},"name":"abi_decode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2981:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"2989:3:201","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"2997:5:201","type":""}],"src":"2955:589:201"},{"body":{"nodeType":"YulBlock","src":"3597:111:201","statements":[{"nodeType":"YulAssignment","src":"3607:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3629:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3616:12:201"},"nodeType":"YulFunctionCall","src":"3616:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"3607:5:201"}]},{"body":{"nodeType":"YulBlock","src":"3686:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3695:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3698:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3688:6:201"},"nodeType":"YulFunctionCall","src":"3688:12:201"},"nodeType":"YulExpressionStatement","src":"3688:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3658:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3669:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"3676:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3665:3:201"},"nodeType":"YulFunctionCall","src":"3665:18:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3655:2:201"},"nodeType":"YulFunctionCall","src":"3655:29:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3648:6:201"},"nodeType":"YulFunctionCall","src":"3648:37:201"},"nodeType":"YulIf","src":"3645:57:201"}]},"name":"abi_decode_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3576:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"3587:5:201","type":""}],"src":"3549:159:201"},{"body":{"nodeType":"YulBlock","src":"3760:109:201","statements":[{"nodeType":"YulAssignment","src":"3770:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3792:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3779:12:201"},"nodeType":"YulFunctionCall","src":"3779:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"3770:5:201"}]},{"body":{"nodeType":"YulBlock","src":"3847:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3856:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3859:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3849:6:201"},"nodeType":"YulFunctionCall","src":"3849:12:201"},"nodeType":"YulExpressionStatement","src":"3849:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3821:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3832:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"3839:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3828:3:201"},"nodeType":"YulFunctionCall","src":"3828:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3818:2:201"},"nodeType":"YulFunctionCall","src":"3818:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3811:6:201"},"nodeType":"YulFunctionCall","src":"3811:35:201"},"nodeType":"YulIf","src":"3808:55:201"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3739:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"3750:5:201","type":""}],"src":"3713:156:201"},{"body":{"nodeType":"YulBlock","src":"3916:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"3970:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3979:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3982:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3972:6:201"},"nodeType":"YulFunctionCall","src":"3972:12:201"},"nodeType":"YulExpressionStatement","src":"3972:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3939:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3960:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3953:6:201"},"nodeType":"YulFunctionCall","src":"3953:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3946:6:201"},"nodeType":"YulFunctionCall","src":"3946:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3936:2:201"},"nodeType":"YulFunctionCall","src":"3936:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3929:6:201"},"nodeType":"YulFunctionCall","src":"3929:40:201"},"nodeType":"YulIf","src":"3926:60:201"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"3905:5:201","type":""}],"src":"3874:118:201"},{"body":{"nodeType":"YulBlock","src":"4043:82:201","statements":[{"nodeType":"YulAssignment","src":"4053:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4075:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4062:12:201"},"nodeType":"YulFunctionCall","src":"4062:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"4053:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4113:5:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"4091:21:201"},"nodeType":"YulFunctionCall","src":"4091:28:201"},"nodeType":"YulExpressionStatement","src":"4091:28:201"}]},"name":"abi_decode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"4022:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"4033:5:201","type":""}],"src":"3997:128:201"},{"body":{"nodeType":"YulBlock","src":"4471:2023:201","statements":[{"body":{"nodeType":"YulBlock","src":"4518:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4527:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4530:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4520:6:201"},"nodeType":"YulFunctionCall","src":"4520:12:201"},"nodeType":"YulExpressionStatement","src":"4520:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4492:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4501:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4488:3:201"},"nodeType":"YulFunctionCall","src":"4488:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4513:3:201","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4484:3:201"},"nodeType":"YulFunctionCall","src":"4484:33:201"},"nodeType":"YulIf","src":"4481:53:201"},{"nodeType":"YulAssignment","src":"4543:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4566:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4553:12:201"},"nodeType":"YulFunctionCall","src":"4553:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4543:6:201"}]},{"nodeType":"YulAssignment","src":"4585:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4612:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4623:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4608:3:201"},"nodeType":"YulFunctionCall","src":"4608:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4595:12:201"},"nodeType":"YulFunctionCall","src":"4595:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4585:6:201"}]},{"nodeType":"YulAssignment","src":"4636:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4663:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4674:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4659:3:201"},"nodeType":"YulFunctionCall","src":"4659:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4646:12:201"},"nodeType":"YulFunctionCall","src":"4646:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4636:6:201"}]},{"nodeType":"YulAssignment","src":"4687:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4714:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4725:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4710:3:201"},"nodeType":"YulFunctionCall","src":"4710:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4697:12:201"},"nodeType":"YulFunctionCall","src":"4697:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"4687:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"4738:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4769:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4780:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4765:3:201"},"nodeType":"YulFunctionCall","src":"4765:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4752:12:201"},"nodeType":"YulFunctionCall","src":"4752:33:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"4742:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4794:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"4804:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4798:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4849:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4858:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4861:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4851:6:201"},"nodeType":"YulFunctionCall","src":"4851:12:201"},"nodeType":"YulExpressionStatement","src":"4851:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4837:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4845:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4834:2:201"},"nodeType":"YulFunctionCall","src":"4834:14:201"},"nodeType":"YulIf","src":"4831:34:201"},{"nodeType":"YulVariableDeclaration","src":"4874:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4888:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"4899:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4884:3:201"},"nodeType":"YulFunctionCall","src":"4884:22:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"4878:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4948:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4957:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4960:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4950:6:201"},"nodeType":"YulFunctionCall","src":"4950:12:201"},"nodeType":"YulExpressionStatement","src":"4950:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4926:7:201"},{"name":"_2","nodeType":"YulIdentifier","src":"4935:2:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4922:3:201"},"nodeType":"YulFunctionCall","src":"4922:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"4940:6:201","type":"","value":"0x01c0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4918:3:201"},"nodeType":"YulFunctionCall","src":"4918:29:201"},"nodeType":"YulIf","src":"4915:49:201"},{"nodeType":"YulVariableDeclaration","src":"4973:35:201","value":{"arguments":[],"functionName":{"name":"allocate_memory_2626","nodeType":"YulIdentifier","src":"4986:20:201"},"nodeType":"YulFunctionCall","src":"4986:22:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4977:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5024:5:201"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5050:2:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5031:18:201"},"nodeType":"YulFunctionCall","src":"5031:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5017:6:201"},"nodeType":"YulFunctionCall","src":"5017:37:201"},"nodeType":"YulExpressionStatement","src":"5017:37:201"},{"nodeType":"YulVariableDeclaration","src":"5063:41:201","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5096:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"5100:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5092:3:201"},"nodeType":"YulFunctionCall","src":"5092:11:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5079:12:201"},"nodeType":"YulFunctionCall","src":"5079:25:201"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"5067:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"5133:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5142:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5145:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5135:6:201"},"nodeType":"YulFunctionCall","src":"5135:12:201"},"nodeType":"YulExpressionStatement","src":"5135:12:201"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"5119:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5129:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5116:2:201"},"nodeType":"YulFunctionCall","src":"5116:16:201"},"nodeType":"YulIf","src":"5113:36:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5169:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5176:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5165:3:201"},"nodeType":"YulFunctionCall","src":"5165:14:201"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5214:2:201"},{"name":"offset_1","nodeType":"YulIdentifier","src":"5218:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5210:3:201"},"nodeType":"YulFunctionCall","src":"5210:17:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5229:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn","nodeType":"YulIdentifier","src":"5181:28:201"},"nodeType":"YulFunctionCall","src":"5181:56:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5158:6:201"},"nodeType":"YulFunctionCall","src":"5158:80:201"},"nodeType":"YulExpressionStatement","src":"5158:80:201"},{"nodeType":"YulVariableDeclaration","src":"5247:41:201","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5280:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"5284:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5276:3:201"},"nodeType":"YulFunctionCall","src":"5276:11:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5263:12:201"},"nodeType":"YulFunctionCall","src":"5263:25:201"},"variables":[{"name":"offset_2","nodeType":"YulTypedName","src":"5251:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"5317:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5326:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5329:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5319:6:201"},"nodeType":"YulFunctionCall","src":"5319:12:201"},"nodeType":"YulExpressionStatement","src":"5319:12:201"}]},"condition":{"arguments":[{"name":"offset_2","nodeType":"YulIdentifier","src":"5303:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5313:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5300:2:201"},"nodeType":"YulFunctionCall","src":"5300:16:201"},"nodeType":"YulIf","src":"5297:36:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5353:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5360:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5349:3:201"},"nodeType":"YulFunctionCall","src":"5349:14:201"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5398:2:201"},{"name":"offset_2","nodeType":"YulIdentifier","src":"5402:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5394:3:201"},"nodeType":"YulFunctionCall","src":"5394:17:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5413:7:201"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nodeType":"YulIdentifier","src":"5365:28:201"},"nodeType":"YulFunctionCall","src":"5365:56:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5342:6:201"},"nodeType":"YulFunctionCall","src":"5342:80:201"},"nodeType":"YulExpressionStatement","src":"5342:80:201"},{"nodeType":"YulVariableDeclaration","src":"5431:41:201","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5464:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"5468:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5460:3:201"},"nodeType":"YulFunctionCall","src":"5460:11:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5447:12:201"},"nodeType":"YulFunctionCall","src":"5447:25:201"},"variables":[{"name":"offset_3","nodeType":"YulTypedName","src":"5435:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"5501:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5510:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5513:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5503:6:201"},"nodeType":"YulFunctionCall","src":"5503:12:201"},"nodeType":"YulExpressionStatement","src":"5503:12:201"}]},"condition":{"arguments":[{"name":"offset_3","nodeType":"YulIdentifier","src":"5487:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5497:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5484:2:201"},"nodeType":"YulFunctionCall","src":"5484:16:201"},"nodeType":"YulIf","src":"5481:36:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5537:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5544:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5533:3:201"},"nodeType":"YulFunctionCall","src":"5533:14:201"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5582:2:201"},{"name":"offset_3","nodeType":"YulIdentifier","src":"5586:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5578:3:201"},"nodeType":"YulFunctionCall","src":"5578:17:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5597:7:201"}],"functionName":{"name":"abi_decode_array_uint256_dyn","nodeType":"YulIdentifier","src":"5549:28:201"},"nodeType":"YulFunctionCall","src":"5549:56:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5526:6:201"},"nodeType":"YulFunctionCall","src":"5526:80:201"},"nodeType":"YulExpressionStatement","src":"5526:80:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5626:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5633:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5622:3:201"},"nodeType":"YulFunctionCall","src":"5622:15:201"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5662:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"5666:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5658:3:201"},"nodeType":"YulFunctionCall","src":"5658:12:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5639:18:201"},"nodeType":"YulFunctionCall","src":"5639:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5615:6:201"},"nodeType":"YulFunctionCall","src":"5615:57:201"},"nodeType":"YulExpressionStatement","src":"5615:57:201"},{"nodeType":"YulVariableDeclaration","src":"5681:42:201","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5714:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"5718:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5710:3:201"},"nodeType":"YulFunctionCall","src":"5710:12:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5697:12:201"},"nodeType":"YulFunctionCall","src":"5697:26:201"},"variables":[{"name":"offset_4","nodeType":"YulTypedName","src":"5685:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"5752:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5761:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5764:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5754:6:201"},"nodeType":"YulFunctionCall","src":"5754:12:201"},"nodeType":"YulExpressionStatement","src":"5754:12:201"}]},"condition":{"arguments":[{"name":"offset_4","nodeType":"YulIdentifier","src":"5738:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5748:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5735:2:201"},"nodeType":"YulFunctionCall","src":"5735:16:201"},"nodeType":"YulIf","src":"5732:36:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5788:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5795:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5784:3:201"},"nodeType":"YulFunctionCall","src":"5784:15:201"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5822:2:201"},{"name":"offset_4","nodeType":"YulIdentifier","src":"5826:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5818:3:201"},"nodeType":"YulFunctionCall","src":"5818:17:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5837:7:201"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"5801:16:201"},"nodeType":"YulFunctionCall","src":"5801:44:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5777:6:201"},"nodeType":"YulFunctionCall","src":"5777:69:201"},"nodeType":"YulExpressionStatement","src":"5777:69:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5866:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5873:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5862:3:201"},"nodeType":"YulFunctionCall","src":"5862:15:201"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5901:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"5905:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5897:3:201"},"nodeType":"YulFunctionCall","src":"5897:12:201"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"5879:17:201"},"nodeType":"YulFunctionCall","src":"5879:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5855:6:201"},"nodeType":"YulFunctionCall","src":"5855:56:201"},"nodeType":"YulExpressionStatement","src":"5855:56:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5931:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5938:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5927:3:201"},"nodeType":"YulFunctionCall","src":"5927:15:201"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5961:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"5965:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5957:3:201"},"nodeType":"YulFunctionCall","src":"5957:12:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5944:12:201"},"nodeType":"YulFunctionCall","src":"5944:26:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5920:6:201"},"nodeType":"YulFunctionCall","src":"5920:51:201"},"nodeType":"YulExpressionStatement","src":"5920:51:201"},{"nodeType":"YulVariableDeclaration","src":"5980:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5990:3:201","type":"","value":"256"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"5984:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6013:5:201"},{"name":"_3","nodeType":"YulIdentifier","src":"6020:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6009:3:201"},"nodeType":"YulFunctionCall","src":"6009:14:201"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6042:2:201"},{"name":"_3","nodeType":"YulIdentifier","src":"6046:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6038:3:201"},"nodeType":"YulFunctionCall","src":"6038:11:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6025:12:201"},"nodeType":"YulFunctionCall","src":"6025:25:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6002:6:201"},"nodeType":"YulFunctionCall","src":"6002:49:201"},"nodeType":"YulExpressionStatement","src":"6002:49:201"},{"nodeType":"YulVariableDeclaration","src":"6060:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6070:3:201","type":"","value":"288"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"6064:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6093:5:201"},{"name":"_4","nodeType":"YulIdentifier","src":"6100:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6089:3:201"},"nodeType":"YulFunctionCall","src":"6089:14:201"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6122:2:201"},{"name":"_4","nodeType":"YulIdentifier","src":"6126:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6118:3:201"},"nodeType":"YulFunctionCall","src":"6118:11:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6105:12:201"},"nodeType":"YulFunctionCall","src":"6105:25:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6082:6:201"},"nodeType":"YulFunctionCall","src":"6082:49:201"},"nodeType":"YulExpressionStatement","src":"6082:49:201"},{"nodeType":"YulVariableDeclaration","src":"6140:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6150:3:201","type":"","value":"320"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"6144:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6173:5:201"},{"name":"_5","nodeType":"YulIdentifier","src":"6180:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6169:3:201"},"nodeType":"YulFunctionCall","src":"6169:14:201"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6202:2:201"},{"name":"_5","nodeType":"YulIdentifier","src":"6206:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6198:3:201"},"nodeType":"YulFunctionCall","src":"6198:11:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6185:12:201"},"nodeType":"YulFunctionCall","src":"6185:25:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6162:6:201"},"nodeType":"YulFunctionCall","src":"6162:49:201"},"nodeType":"YulExpressionStatement","src":"6162:49:201"},{"nodeType":"YulVariableDeclaration","src":"6220:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6230:3:201","type":"","value":"352"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"6224:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6253:5:201"},{"name":"_6","nodeType":"YulIdentifier","src":"6260:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6249:3:201"},"nodeType":"YulFunctionCall","src":"6249:14:201"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6288:2:201"},{"name":"_6","nodeType":"YulIdentifier","src":"6292:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6284:3:201"},"nodeType":"YulFunctionCall","src":"6284:11:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"6265:18:201"},"nodeType":"YulFunctionCall","src":"6265:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6242:6:201"},"nodeType":"YulFunctionCall","src":"6242:55:201"},"nodeType":"YulExpressionStatement","src":"6242:55:201"},{"nodeType":"YulVariableDeclaration","src":"6306:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6316:3:201","type":"","value":"384"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"6310:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6339:5:201"},{"name":"_7","nodeType":"YulIdentifier","src":"6346:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6335:3:201"},"nodeType":"YulFunctionCall","src":"6335:14:201"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6372:2:201"},{"name":"_7","nodeType":"YulIdentifier","src":"6376:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6368:3:201"},"nodeType":"YulFunctionCall","src":"6368:11:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"6351:16:201"},"nodeType":"YulFunctionCall","src":"6351:29:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6328:6:201"},"nodeType":"YulFunctionCall","src":"6328:53:201"},"nodeType":"YulExpressionStatement","src":"6328:53:201"},{"nodeType":"YulVariableDeclaration","src":"6390:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6400:3:201","type":"","value":"416"},"variables":[{"name":"_8","nodeType":"YulTypedName","src":"6394:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6423:5:201"},{"name":"_8","nodeType":"YulIdentifier","src":"6430:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6419:3:201"},"nodeType":"YulFunctionCall","src":"6419:14:201"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6455:2:201"},{"name":"_8","nodeType":"YulIdentifier","src":"6459:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6451:3:201"},"nodeType":"YulFunctionCall","src":"6451:11:201"}],"functionName":{"name":"abi_decode_bool","nodeType":"YulIdentifier","src":"6435:15:201"},"nodeType":"YulFunctionCall","src":"6435:28:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6412:6:201"},"nodeType":"YulFunctionCall","src":"6412:52:201"},"nodeType":"YulExpressionStatement","src":"6412:52:201"},{"nodeType":"YulAssignment","src":"6473:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"6483:5:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"6473:6:201"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$t_struct$_UserConfigurationMap_$21322_storage_ptrt_struct$_FlashloanParams_$21516_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4405:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4416:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4428:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4436:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4444:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"4452:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"4460:6:201","type":""}],"src":"4130:2364:201"},{"body":{"nodeType":"YulBlock","src":"6657:935:201","statements":[{"body":{"nodeType":"YulBlock","src":"6703:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6712:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6715:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6705:6:201"},"nodeType":"YulFunctionCall","src":"6705:12:201"},"nodeType":"YulExpressionStatement","src":"6705:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6678:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6687:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6674:3:201"},"nodeType":"YulFunctionCall","src":"6674:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"6699:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6670:3:201"},"nodeType":"YulFunctionCall","src":"6670:32:201"},"nodeType":"YulIf","src":"6667:52:201"},{"nodeType":"YulAssignment","src":"6728:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6751:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6738:12:201"},"nodeType":"YulFunctionCall","src":"6738:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6728:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"6770:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6801:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6812:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6797:3:201"},"nodeType":"YulFunctionCall","src":"6797:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6784:12:201"},"nodeType":"YulFunctionCall","src":"6784:32:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"6774:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6825:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6835:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6829:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"6880:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6889:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6892:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6882:6:201"},"nodeType":"YulFunctionCall","src":"6882:12:201"},"nodeType":"YulExpressionStatement","src":"6882:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6868:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6876:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6865:2:201"},"nodeType":"YulFunctionCall","src":"6865:14:201"},"nodeType":"YulIf","src":"6862:34:201"},{"nodeType":"YulVariableDeclaration","src":"6905:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6919:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"6930:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6915:3:201"},"nodeType":"YulFunctionCall","src":"6915:22:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"6909:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"6977:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6986:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6989:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6979:6:201"},"nodeType":"YulFunctionCall","src":"6979:12:201"},"nodeType":"YulExpressionStatement","src":"6979:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6957:7:201"},{"name":"_2","nodeType":"YulIdentifier","src":"6966:2:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6953:3:201"},"nodeType":"YulFunctionCall","src":"6953:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"6971:4:201","type":"","value":"0xe0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6949:3:201"},"nodeType":"YulFunctionCall","src":"6949:27:201"},"nodeType":"YulIf","src":"6946:47:201"},{"nodeType":"YulVariableDeclaration","src":"7002:35:201","value":{"arguments":[],"functionName":{"name":"allocate_memory_2628","nodeType":"YulIdentifier","src":"7015:20:201"},"nodeType":"YulFunctionCall","src":"7015:22:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7006:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7053:5:201"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"7079:2:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"7060:18:201"},"nodeType":"YulFunctionCall","src":"7060:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7046:6:201"},"nodeType":"YulFunctionCall","src":"7046:37:201"},"nodeType":"YulExpressionStatement","src":"7046:37:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7103:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"7110:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7099:3:201"},"nodeType":"YulFunctionCall","src":"7099:14:201"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"7138:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"7142:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7134:3:201"},"nodeType":"YulFunctionCall","src":"7134:11:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"7115:18:201"},"nodeType":"YulFunctionCall","src":"7115:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7092:6:201"},"nodeType":"YulFunctionCall","src":"7092:55:201"},"nodeType":"YulExpressionStatement","src":"7092:55:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7167:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"7174:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7163:3:201"},"nodeType":"YulFunctionCall","src":"7163:14:201"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"7196:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"7200:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7192:3:201"},"nodeType":"YulFunctionCall","src":"7192:11:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7179:12:201"},"nodeType":"YulFunctionCall","src":"7179:25:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7156:6:201"},"nodeType":"YulFunctionCall","src":"7156:49:201"},"nodeType":"YulExpressionStatement","src":"7156:49:201"},{"nodeType":"YulVariableDeclaration","src":"7214:41:201","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"7247:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"7251:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7243:3:201"},"nodeType":"YulFunctionCall","src":"7243:11:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7230:12:201"},"nodeType":"YulFunctionCall","src":"7230:25:201"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"7218:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"7284:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7293:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7296:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7286:6:201"},"nodeType":"YulFunctionCall","src":"7286:12:201"},"nodeType":"YulExpressionStatement","src":"7286:12:201"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"7270:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7280:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7267:2:201"},"nodeType":"YulFunctionCall","src":"7267:16:201"},"nodeType":"YulIf","src":"7264:36:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7320:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"7327:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7316:3:201"},"nodeType":"YulFunctionCall","src":"7316:14:201"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"7353:2:201"},{"name":"offset_1","nodeType":"YulIdentifier","src":"7357:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7349:3:201"},"nodeType":"YulFunctionCall","src":"7349:17:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"7368:7:201"}],"functionName":{"name":"abi_decode_bytes","nodeType":"YulIdentifier","src":"7332:16:201"},"nodeType":"YulFunctionCall","src":"7332:44:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7309:6:201"},"nodeType":"YulFunctionCall","src":"7309:68:201"},"nodeType":"YulExpressionStatement","src":"7309:68:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7397:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"7404:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7393:3:201"},"nodeType":"YulFunctionCall","src":"7393:15:201"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"7432:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"7436:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7428:3:201"},"nodeType":"YulFunctionCall","src":"7428:12:201"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"7410:17:201"},"nodeType":"YulFunctionCall","src":"7410:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7386:6:201"},"nodeType":"YulFunctionCall","src":"7386:56:201"},"nodeType":"YulExpressionStatement","src":"7386:56:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7462:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"7469:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7458:3:201"},"nodeType":"YulFunctionCall","src":"7458:15:201"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"7492:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"7496:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7488:3:201"},"nodeType":"YulFunctionCall","src":"7488:12:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7475:12:201"},"nodeType":"YulFunctionCall","src":"7475:26:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7451:6:201"},"nodeType":"YulFunctionCall","src":"7451:51:201"},"nodeType":"YulExpressionStatement","src":"7451:51:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7522:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"7529:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7518:3:201"},"nodeType":"YulFunctionCall","src":"7518:15:201"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"7552:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"7556:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7548:3:201"},"nodeType":"YulFunctionCall","src":"7548:12:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7535:12:201"},"nodeType":"YulFunctionCall","src":"7535:26:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7511:6:201"},"nodeType":"YulFunctionCall","src":"7511:51:201"},"nodeType":"YulExpressionStatement","src":"7511:51:201"},{"nodeType":"YulAssignment","src":"7571:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"7581:5:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7571:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveData_$21315_storage_ptrt_struct$_FlashloanSimpleParams_$21531_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6615:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6626:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6638:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6646:6:201","type":""}],"src":"6499:1093:201"},{"body":{"nodeType":"YulBlock","src":"7629:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7646:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7649:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7639:6:201"},"nodeType":"YulFunctionCall","src":"7639:88:201"},"nodeType":"YulExpressionStatement","src":"7639:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7743:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7746:4:201","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7736:6:201"},"nodeType":"YulFunctionCall","src":"7736:15:201"},"nodeType":"YulExpressionStatement","src":"7736:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7767:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7770:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7760:6:201"},"nodeType":"YulFunctionCall","src":"7760:15:201"},"nodeType":"YulExpressionStatement","src":"7760:15:201"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"7597:184:201"},{"body":{"nodeType":"YulBlock","src":"7818:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7835:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7838:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7828:6:201"},"nodeType":"YulFunctionCall","src":"7828:88:201"},"nodeType":"YulExpressionStatement","src":"7828:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7932:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7935:4:201","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7925:6:201"},"nodeType":"YulFunctionCall","src":"7925:15:201"},"nodeType":"YulExpressionStatement","src":"7925:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7956:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7959:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7949:6:201"},"nodeType":"YulFunctionCall","src":"7949:15:201"},"nodeType":"YulExpressionStatement","src":"7949:15:201"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"7786:184:201"},{"body":{"nodeType":"YulBlock","src":"8019:83:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8036:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8045:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"8052:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8041:3:201"},"nodeType":"YulFunctionCall","src":"8041:54:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8029:6:201"},"nodeType":"YulFunctionCall","src":"8029:67:201"},"nodeType":"YulExpressionStatement","src":"8029:67:201"}]},"name":"abi_encode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"8003:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"8010:3:201","type":""}],"src":"7975:127:201"},{"body":{"nodeType":"YulBlock","src":"8236:168:201","statements":[{"nodeType":"YulAssignment","src":"8246:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8258:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8269:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8254:3:201"},"nodeType":"YulFunctionCall","src":"8254:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8246:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8288:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8303:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8311:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8299:3:201"},"nodeType":"YulFunctionCall","src":"8299:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8281:6:201"},"nodeType":"YulFunctionCall","src":"8281:74:201"},"nodeType":"YulExpressionStatement","src":"8281:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8375:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8386:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8371:3:201"},"nodeType":"YulFunctionCall","src":"8371:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"8391:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8364:6:201"},"nodeType":"YulFunctionCall","src":"8364:34:201"},"nodeType":"YulExpressionStatement","src":"8364:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8197:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8208:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8216:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8227:4:201","type":""}],"src":"8107:297:201"},{"body":{"nodeType":"YulBlock","src":"8441:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8458:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8461:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8451:6:201"},"nodeType":"YulFunctionCall","src":"8451:88:201"},"nodeType":"YulExpressionStatement","src":"8451:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8555:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"8558:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8548:6:201"},"nodeType":"YulFunctionCall","src":"8548:15:201"},"nodeType":"YulExpressionStatement","src":"8548:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8579:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8582:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8572:6:201"},"nodeType":"YulFunctionCall","src":"8572:15:201"},"nodeType":"YulExpressionStatement","src":"8572:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"8409:184:201"},{"body":{"nodeType":"YulBlock","src":"8645:148:201","statements":[{"body":{"nodeType":"YulBlock","src":"8736:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"8738:16:201"},"nodeType":"YulFunctionCall","src":"8738:18:201"},"nodeType":"YulExpressionStatement","src":"8738:18:201"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8661:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"8668:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8658:2:201"},"nodeType":"YulFunctionCall","src":"8658:77:201"},"nodeType":"YulIf","src":"8655:103:201"},{"nodeType":"YulAssignment","src":"8767:20:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8778:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"8785:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8774:3:201"},"nodeType":"YulFunctionCall","src":"8774:13:201"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"8767:3:201"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"8627:5:201","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"8637:3:201","type":""}],"src":"8598:195:201"},{"body":{"nodeType":"YulBlock","src":"8859:374:201","statements":[{"nodeType":"YulVariableDeclaration","src":"8869:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8889:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8883:5:201"},"nodeType":"YulFunctionCall","src":"8883:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"8873:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8911:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"8916:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8904:6:201"},"nodeType":"YulFunctionCall","src":"8904:19:201"},"nodeType":"YulExpressionStatement","src":"8904:19:201"},{"nodeType":"YulVariableDeclaration","src":"8932:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8942:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8936:2:201","type":""}]},{"nodeType":"YulAssignment","src":"8955:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8966:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"8971:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8962:3:201"},"nodeType":"YulFunctionCall","src":"8962:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"8955:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"8983:28:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9001:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9008:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8997:3:201"},"nodeType":"YulFunctionCall","src":"8997:14:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"8987:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9020:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9029:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"9024:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"9088:120:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9109:3:201"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"9120:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9114:5:201"},"nodeType":"YulFunctionCall","src":"9114:13:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9102:6:201"},"nodeType":"YulFunctionCall","src":"9102:26:201"},"nodeType":"YulExpressionStatement","src":"9102:26:201"},{"nodeType":"YulAssignment","src":"9141:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9152:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9157:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9148:3:201"},"nodeType":"YulFunctionCall","src":"9148:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"9141:3:201"}]},{"nodeType":"YulAssignment","src":"9173:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"9187:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9195:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9183:3:201"},"nodeType":"YulFunctionCall","src":"9183:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"9173:6:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"9050:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"9053:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9047:2:201"},"nodeType":"YulFunctionCall","src":"9047:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"9061:18:201","statements":[{"nodeType":"YulAssignment","src":"9063:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"9072:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"9075:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9068:3:201"},"nodeType":"YulFunctionCall","src":"9068:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"9063:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"9043:3:201","statements":[]},"src":"9039:169:201"},{"nodeType":"YulAssignment","src":"9217:10:201","value":{"name":"pos","nodeType":"YulIdentifier","src":"9224:3:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"9217:3:201"}]}]},"name":"abi_encode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"8836:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"8843:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"8851:3:201","type":""}],"src":"8798:435:201"},{"body":{"nodeType":"YulBlock","src":"9287:481:201","statements":[{"nodeType":"YulVariableDeclaration","src":"9297:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9317:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9311:5:201"},"nodeType":"YulFunctionCall","src":"9311:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"9301:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9339:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"9344:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9332:6:201"},"nodeType":"YulFunctionCall","src":"9332:19:201"},"nodeType":"YulExpressionStatement","src":"9332:19:201"},{"nodeType":"YulVariableDeclaration","src":"9360:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9369:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"9364:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"9431:110:201","statements":[{"nodeType":"YulVariableDeclaration","src":"9445:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9455:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9449:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9487:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"9492:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9483:3:201"},"nodeType":"YulFunctionCall","src":"9483:11:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9496:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9479:3:201"},"nodeType":"YulFunctionCall","src":"9479:20:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9515:5:201"},{"name":"i","nodeType":"YulIdentifier","src":"9522:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9511:3:201"},"nodeType":"YulFunctionCall","src":"9511:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9526:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9507:3:201"},"nodeType":"YulFunctionCall","src":"9507:22:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9501:5:201"},"nodeType":"YulFunctionCall","src":"9501:29:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9472:6:201"},"nodeType":"YulFunctionCall","src":"9472:59:201"},"nodeType":"YulExpressionStatement","src":"9472:59:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"9390:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"9393:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9387:2:201"},"nodeType":"YulFunctionCall","src":"9387:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"9401:21:201","statements":[{"nodeType":"YulAssignment","src":"9403:17:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"9412:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"9415:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9408:3:201"},"nodeType":"YulFunctionCall","src":"9408:12:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"9403:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"9383:3:201","statements":[]},"src":"9379:162:201"},{"body":{"nodeType":"YulBlock","src":"9575:62:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9604:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"9609:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9600:3:201"},"nodeType":"YulFunctionCall","src":"9600:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"9618:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9596:3:201"},"nodeType":"YulFunctionCall","src":"9596:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"9625:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9589:6:201"},"nodeType":"YulFunctionCall","src":"9589:38:201"},"nodeType":"YulExpressionStatement","src":"9589:38:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"9556:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"9559:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9553:2:201"},"nodeType":"YulFunctionCall","src":"9553:13:201"},"nodeType":"YulIf","src":"9550:87:201"},{"nodeType":"YulAssignment","src":"9646:116:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9661:3:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9674:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"9682:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9670:3:201"},"nodeType":"YulFunctionCall","src":"9670:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"9687:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9666:3:201"},"nodeType":"YulFunctionCall","src":"9666:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9657:3:201"},"nodeType":"YulFunctionCall","src":"9657:98:201"},{"kind":"number","nodeType":"YulLiteral","src":"9757:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9653:3:201"},"nodeType":"YulFunctionCall","src":"9653:109:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"9646:3:201"}]}]},"name":"abi_encode_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"9264:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"9271:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"9279:3:201","type":""}],"src":"9238:530:201"},{"body":{"nodeType":"YulBlock","src":"10154:962:201","statements":[{"nodeType":"YulVariableDeclaration","src":"10164:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10182:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10193:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10178:3:201"},"nodeType":"YulFunctionCall","src":"10178:19:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"10168:6:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10213:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10224:3:201","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10206:6:201"},"nodeType":"YulFunctionCall","src":"10206:22:201"},"nodeType":"YulExpressionStatement","src":"10206:22:201"},{"nodeType":"YulVariableDeclaration","src":"10237:17:201","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"10248:6:201"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"10241:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10263:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10283:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10277:5:201"},"nodeType":"YulFunctionCall","src":"10277:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"10267:6:201","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"10306:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"10314:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10299:6:201"},"nodeType":"YulFunctionCall","src":"10299:22:201"},"nodeType":"YulExpressionStatement","src":"10299:22:201"},{"nodeType":"YulAssignment","src":"10330:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10341:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10352:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10337:3:201"},"nodeType":"YulFunctionCall","src":"10337:19:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"10330:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"10365:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10375:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10369:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10388:29:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10406:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10414:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10402:3:201"},"nodeType":"YulFunctionCall","src":"10402:15:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"10392:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10426:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10435:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"10430:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"10494:169:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10515:3:201"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"10530:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10524:5:201"},"nodeType":"YulFunctionCall","src":"10524:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"10539:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10520:3:201"},"nodeType":"YulFunctionCall","src":"10520:62:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10508:6:201"},"nodeType":"YulFunctionCall","src":"10508:75:201"},"nodeType":"YulExpressionStatement","src":"10508:75:201"},{"nodeType":"YulAssignment","src":"10596:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10607:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10612:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10603:3:201"},"nodeType":"YulFunctionCall","src":"10603:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"10596:3:201"}]},{"nodeType":"YulAssignment","src":"10628:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"10642:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10650:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10638:3:201"},"nodeType":"YulFunctionCall","src":"10638:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"10628:6:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"10456:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"10459:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10453:2:201"},"nodeType":"YulFunctionCall","src":"10453:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"10467:18:201","statements":[{"nodeType":"YulAssignment","src":"10469:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"10478:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"10481:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10474:3:201"},"nodeType":"YulFunctionCall","src":"10474:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"10469:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"10449:3:201","statements":[]},"src":"10445:218:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10683:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10694:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10679:3:201"},"nodeType":"YulFunctionCall","src":"10679:18:201"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10703:3:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"10708:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10699:3:201"},"nodeType":"YulFunctionCall","src":"10699:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10672:6:201"},"nodeType":"YulFunctionCall","src":"10672:47:201"},"nodeType":"YulExpressionStatement","src":"10672:47:201"},{"nodeType":"YulVariableDeclaration","src":"10728:55:201","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10771:6:201"},{"name":"pos","nodeType":"YulIdentifier","src":"10779:3:201"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"10742:28:201"},"nodeType":"YulFunctionCall","src":"10742:41:201"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"10732:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10803:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10814:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10799:3:201"},"nodeType":"YulFunctionCall","src":"10799:18:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"10823:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"10831:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10819:3:201"},"nodeType":"YulFunctionCall","src":"10819:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10792:6:201"},"nodeType":"YulFunctionCall","src":"10792:50:201"},"nodeType":"YulExpressionStatement","src":"10792:50:201"},{"nodeType":"YulVariableDeclaration","src":"10851:58:201","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"10894:6:201"},{"name":"tail_2","nodeType":"YulIdentifier","src":"10902:6:201"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"10865:28:201"},"nodeType":"YulFunctionCall","src":"10865:44:201"},"variables":[{"name":"tail_3","nodeType":"YulTypedName","src":"10855:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10929:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10940:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10925:3:201"},"nodeType":"YulFunctionCall","src":"10925:18:201"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"10949:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10957:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10945:3:201"},"nodeType":"YulFunctionCall","src":"10945:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10918:6:201"},"nodeType":"YulFunctionCall","src":"10918:83:201"},"nodeType":"YulExpressionStatement","src":"10918:83:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11021:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11032:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11017:3:201"},"nodeType":"YulFunctionCall","src":"11017:19:201"},{"arguments":[{"name":"tail_3","nodeType":"YulIdentifier","src":"11042:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"11050:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11038:3:201"},"nodeType":"YulFunctionCall","src":"11038:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11010:6:201"},"nodeType":"YulFunctionCall","src":"11010:51:201"},"nodeType":"YulExpressionStatement","src":"11010:51:201"},{"nodeType":"YulAssignment","src":"11070:40:201","value":{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"11095:6:201"},{"name":"tail_3","nodeType":"YulIdentifier","src":"11103:6:201"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"11078:16:201"},"nodeType":"YulFunctionCall","src":"11078:32:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11070:4:201"}]}]},"name":"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10091:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"10102:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"10110:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10118:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10126:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10134:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10145:4:201","type":""}],"src":"9773:1343:201"},{"body":{"nodeType":"YulBlock","src":"11199:167:201","statements":[{"body":{"nodeType":"YulBlock","src":"11245:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11254:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11257:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11247:6:201"},"nodeType":"YulFunctionCall","src":"11247:12:201"},"nodeType":"YulExpressionStatement","src":"11247:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11220:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"11229:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11216:3:201"},"nodeType":"YulFunctionCall","src":"11216:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"11241:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11212:3:201"},"nodeType":"YulFunctionCall","src":"11212:32:201"},"nodeType":"YulIf","src":"11209:52:201"},{"nodeType":"YulVariableDeclaration","src":"11270:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11289:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11283:5:201"},"nodeType":"YulFunctionCall","src":"11283:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11274:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11330:5:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"11308:21:201"},"nodeType":"YulFunctionCall","src":"11308:28:201"},"nodeType":"YulExpressionStatement","src":"11308:28:201"},{"nodeType":"YulAssignment","src":"11345:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"11355:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11345:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11165:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11176:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11188:6:201","type":""}],"src":"11121:245:201"},{"body":{"nodeType":"YulBlock","src":"11492:98:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11509:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11520:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11502:6:201"},"nodeType":"YulFunctionCall","src":"11502:21:201"},"nodeType":"YulExpressionStatement","src":"11502:21:201"},{"nodeType":"YulAssignment","src":"11532:52:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11557:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11569:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11580:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11565:3:201"},"nodeType":"YulFunctionCall","src":"11565:18:201"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"11540:16:201"},"nodeType":"YulFunctionCall","src":"11540:44:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11532:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11461:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11472:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11483:4:201","type":""}],"src":"11371:219:201"},{"body":{"nodeType":"YulBlock","src":"11676:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"11722:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11731:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11734:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11724:6:201"},"nodeType":"YulFunctionCall","src":"11724:12:201"},"nodeType":"YulExpressionStatement","src":"11724:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11697:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"11706:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11693:3:201"},"nodeType":"YulFunctionCall","src":"11693:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"11718:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11689:3:201"},"nodeType":"YulFunctionCall","src":"11689:32:201"},"nodeType":"YulIf","src":"11686:52:201"},{"nodeType":"YulVariableDeclaration","src":"11747:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11766:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11760:5:201"},"nodeType":"YulFunctionCall","src":"11760:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11751:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11810:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"11785:24:201"},"nodeType":"YulFunctionCall","src":"11785:31:201"},"nodeType":"YulExpressionStatement","src":"11785:31:201"},{"nodeType":"YulAssignment","src":"11825:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"11835:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11825:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11642:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11653:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11665:6:201","type":""}],"src":"11595:251:201"},{"body":{"nodeType":"YulBlock","src":"11909:243:201","statements":[{"body":{"nodeType":"YulBlock","src":"11951:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11972:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11975:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11965:6:201"},"nodeType":"YulFunctionCall","src":"11965:88:201"},"nodeType":"YulExpressionStatement","src":"11965:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12073:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"12076:4:201","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12066:6:201"},"nodeType":"YulFunctionCall","src":"12066:15:201"},"nodeType":"YulExpressionStatement","src":"12066:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12101:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12104:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12094:6:201"},"nodeType":"YulFunctionCall","src":"12094:15:201"},"nodeType":"YulExpressionStatement","src":"12094:15:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11932:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"11939:1:201","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"11929:2:201"},"nodeType":"YulFunctionCall","src":"11929:12:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11922:6:201"},"nodeType":"YulFunctionCall","src":"11922:20:201"},"nodeType":"YulIf","src":"11919:200:201"},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12135:3:201"},{"name":"value","nodeType":"YulIdentifier","src":"12140:5:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12128:6:201"},"nodeType":"YulFunctionCall","src":"12128:18:201"},"nodeType":"YulExpressionStatement","src":"12128:18:201"}]},"name":"abi_encode_enum_InterestRateMode","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"11893:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"11900:3:201","type":""}],"src":"11851:301:201"},{"body":{"nodeType":"YulBlock","src":"12200:47:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12217:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12226:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"12233:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12222:3:201"},"nodeType":"YulFunctionCall","src":"12222:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12210:6:201"},"nodeType":"YulFunctionCall","src":"12210:31:201"},"nodeType":"YulExpressionStatement","src":"12210:31:201"}]},"name":"abi_encode_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"12184:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"12191:3:201","type":""}],"src":"12157:90:201"},{"body":{"nodeType":"YulBlock","src":"12293:50:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12310:3:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12329:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12322:6:201"},"nodeType":"YulFunctionCall","src":"12322:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12315:6:201"},"nodeType":"YulFunctionCall","src":"12315:21:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12303:6:201"},"nodeType":"YulFunctionCall","src":"12303:34:201"},"nodeType":"YulExpressionStatement","src":"12303:34:201"}]},"name":"abi_encode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"12277:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"12284:3:201","type":""}],"src":"12252:91:201"},{"body":{"nodeType":"YulBlock","src":"12390:33:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12399:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12408:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"12415:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12404:3:201"},"nodeType":"YulFunctionCall","src":"12404:16:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12392:6:201"},"nodeType":"YulFunctionCall","src":"12392:29:201"},"nodeType":"YulExpressionStatement","src":"12392:29:201"}]},"name":"abi_encode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"12374:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"12381:3:201","type":""}],"src":"12348:75:201"},{"body":{"nodeType":"YulBlock","src":"12894:1498:201","statements":[{"nodeType":"YulAssignment","src":"12904:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12916:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12927:3:201","type":"","value":"512"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12912:3:201"},"nodeType":"YulFunctionCall","src":"12912:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12904:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12947:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"12958:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12940:6:201"},"nodeType":"YulFunctionCall","src":"12940:25:201"},"nodeType":"YulExpressionStatement","src":"12940:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12985:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12996:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12981:3:201"},"nodeType":"YulFunctionCall","src":"12981:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"13001:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12974:6:201"},"nodeType":"YulFunctionCall","src":"12974:34:201"},"nodeType":"YulExpressionStatement","src":"12974:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13028:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13039:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13024:3:201"},"nodeType":"YulFunctionCall","src":"13024:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"13044:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13017:6:201"},"nodeType":"YulFunctionCall","src":"13017:34:201"},"nodeType":"YulExpressionStatement","src":"13017:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13071:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13082:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13067:3:201"},"nodeType":"YulFunctionCall","src":"13067:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"13087:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13060:6:201"},"nodeType":"YulFunctionCall","src":"13060:34:201"},"nodeType":"YulExpressionStatement","src":"13060:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"13128:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13122:5:201"},"nodeType":"YulFunctionCall","src":"13122:13:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13141:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13152:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13137:3:201"},"nodeType":"YulFunctionCall","src":"13137:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"13103:18:201"},"nodeType":"YulFunctionCall","src":"13103:54:201"},"nodeType":"YulExpressionStatement","src":"13103:54:201"},{"nodeType":"YulVariableDeclaration","src":"13166:42:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"13196:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13204:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13192:3:201"},"nodeType":"YulFunctionCall","src":"13192:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13186:5:201"},"nodeType":"YulFunctionCall","src":"13186:22:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"13170:12:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"13236:12:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13254:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13265:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13250:3:201"},"nodeType":"YulFunctionCall","src":"13250:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"13217:18:201"},"nodeType":"YulFunctionCall","src":"13217:53:201"},"nodeType":"YulExpressionStatement","src":"13217:53:201"},{"nodeType":"YulVariableDeclaration","src":"13279:44:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"13311:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13319:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13307:3:201"},"nodeType":"YulFunctionCall","src":"13307:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13301:5:201"},"nodeType":"YulFunctionCall","src":"13301:22:201"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"13283:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"13351:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13371:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13382:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13367:3:201"},"nodeType":"YulFunctionCall","src":"13367:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"13332:18:201"},"nodeType":"YulFunctionCall","src":"13332:55:201"},"nodeType":"YulExpressionStatement","src":"13332:55:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13407:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13418:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13403:3:201"},"nodeType":"YulFunctionCall","src":"13403:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"13434:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13442:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13430:3:201"},"nodeType":"YulFunctionCall","src":"13430:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13424:5:201"},"nodeType":"YulFunctionCall","src":"13424:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13396:6:201"},"nodeType":"YulFunctionCall","src":"13396:51:201"},"nodeType":"YulExpressionStatement","src":"13396:51:201"},{"nodeType":"YulVariableDeclaration","src":"13456:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"13488:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13496:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13484:3:201"},"nodeType":"YulFunctionCall","src":"13484:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13478:5:201"},"nodeType":"YulFunctionCall","src":"13478:23:201"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"13460:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13510:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"13520:3:201","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"13514:2:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"13565:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13585:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"13596:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13581:3:201"},"nodeType":"YulFunctionCall","src":"13581:18:201"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"13532:32:201"},"nodeType":"YulFunctionCall","src":"13532:68:201"},"nodeType":"YulExpressionStatement","src":"13532:68:201"},{"nodeType":"YulVariableDeclaration","src":"13609:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"13641:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13649:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13637:3:201"},"nodeType":"YulFunctionCall","src":"13637:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13631:5:201"},"nodeType":"YulFunctionCall","src":"13631:23:201"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"13613:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13663:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"13673:3:201","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"13667:2:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"13703:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13723:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"13734:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13719:3:201"},"nodeType":"YulFunctionCall","src":"13719:18:201"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"13685:17:201"},"nodeType":"YulFunctionCall","src":"13685:53:201"},"nodeType":"YulExpressionStatement","src":"13685:53:201"},{"nodeType":"YulVariableDeclaration","src":"13747:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"13779:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13787:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13775:3:201"},"nodeType":"YulFunctionCall","src":"13775:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13769:5:201"},"nodeType":"YulFunctionCall","src":"13769:23:201"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"13751:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13801:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"13811:3:201","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"13805:2:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"13839:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13859:9:201"},{"name":"_3","nodeType":"YulIdentifier","src":"13870:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13855:3:201"},"nodeType":"YulFunctionCall","src":"13855:18:201"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"13823:15:201"},"nodeType":"YulFunctionCall","src":"13823:51:201"},"nodeType":"YulExpressionStatement","src":"13823:51:201"},{"nodeType":"YulVariableDeclaration","src":"13883:33:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"13903:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13911:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13899:3:201"},"nodeType":"YulFunctionCall","src":"13899:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13893:5:201"},"nodeType":"YulFunctionCall","src":"13893:23:201"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"13887:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13925:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"13935:3:201","type":"","value":"352"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"13929:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13958:9:201"},{"name":"_5","nodeType":"YulIdentifier","src":"13969:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13954:3:201"},"nodeType":"YulFunctionCall","src":"13954:18:201"},{"name":"_4","nodeType":"YulIdentifier","src":"13974:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13947:6:201"},"nodeType":"YulFunctionCall","src":"13947:30:201"},"nodeType":"YulExpressionStatement","src":"13947:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13997:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14008:3:201","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13993:3:201"},"nodeType":"YulFunctionCall","src":"13993:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"14024:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"14032:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14020:3:201"},"nodeType":"YulFunctionCall","src":"14020:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14014:5:201"},"nodeType":"YulFunctionCall","src":"14014:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13986:6:201"},"nodeType":"YulFunctionCall","src":"13986:51:201"},"nodeType":"YulExpressionStatement","src":"13986:51:201"},{"nodeType":"YulVariableDeclaration","src":"14046:44:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"14078:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"14086:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14074:3:201"},"nodeType":"YulFunctionCall","src":"14074:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14068:5:201"},"nodeType":"YulFunctionCall","src":"14068:22:201"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"14050:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"14118:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14138:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14149:3:201","type":"","value":"416"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14134:3:201"},"nodeType":"YulFunctionCall","src":"14134:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"14099:18:201"},"nodeType":"YulFunctionCall","src":"14099:55:201"},"nodeType":"YulExpressionStatement","src":"14099:55:201"},{"nodeType":"YulVariableDeclaration","src":"14163:44:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"14195:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"14203:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14191:3:201"},"nodeType":"YulFunctionCall","src":"14191:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14185:5:201"},"nodeType":"YulFunctionCall","src":"14185:22:201"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"14167:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"14233:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14253:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14264:3:201","type":"","value":"448"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14249:3:201"},"nodeType":"YulFunctionCall","src":"14249:19:201"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"14216:16:201"},"nodeType":"YulFunctionCall","src":"14216:53:201"},"nodeType":"YulExpressionStatement","src":"14216:53:201"},{"nodeType":"YulVariableDeclaration","src":"14278:44:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"14310:6:201"},{"name":"_5","nodeType":"YulIdentifier","src":"14318:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14306:3:201"},"nodeType":"YulFunctionCall","src":"14306:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14300:5:201"},"nodeType":"YulFunctionCall","src":"14300:22:201"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"14282:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"14350:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14370:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14381:3:201","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14366:3:201"},"nodeType":"YulFunctionCall","src":"14366:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"14331:18:201"},"nodeType":"YulFunctionCall","src":"14331:55:201"},"nodeType":"YulExpressionStatement","src":"14331:55:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_t_struct$_ExecuteBorrowParams_$21433_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteBorrowParams_$21433_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12831:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12842:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12850:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12858:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12866:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12874:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12885:4:201","type":""}],"src":"12428:1964:201"},{"body":{"nodeType":"YulBlock","src":"14610:281:201","statements":[{"nodeType":"YulAssignment","src":"14620:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14632:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14643:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14628:3:201"},"nodeType":"YulFunctionCall","src":"14628:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14620:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14663:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14678:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"14686:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14674:3:201"},"nodeType":"YulFunctionCall","src":"14674:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14656:6:201"},"nodeType":"YulFunctionCall","src":"14656:74:201"},"nodeType":"YulExpressionStatement","src":"14656:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14750:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14761:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14746:3:201"},"nodeType":"YulFunctionCall","src":"14746:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"14766:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14739:6:201"},"nodeType":"YulFunctionCall","src":"14739:34:201"},"nodeType":"YulExpressionStatement","src":"14739:34:201"},{"expression":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"14815:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14827:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14838:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14823:3:201"},"nodeType":"YulFunctionCall","src":"14823:18:201"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"14782:32:201"},"nodeType":"YulFunctionCall","src":"14782:60:201"},"nodeType":"YulExpressionStatement","src":"14782:60:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14862:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14873:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14858:3:201"},"nodeType":"YulFunctionCall","src":"14858:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"14878:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14851:6:201"},"nodeType":"YulFunctionCall","src":"14851:34:201"},"nodeType":"YulExpressionStatement","src":"14851:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_enum$_InterestRateMode_$21337_t_rational_0_by_1__to_t_address_t_uint256_t_uint8_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14555:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14566:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14574:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14582:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14590:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14601:4:201","type":""}],"src":"14397:494:201"},{"body":{"nodeType":"YulBlock","src":"15127:352:201","statements":[{"nodeType":"YulVariableDeclaration","src":"15137:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"15147:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15141:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15205:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15220:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15228:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15216:3:201"},"nodeType":"YulFunctionCall","src":"15216:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15198:6:201"},"nodeType":"YulFunctionCall","src":"15198:34:201"},"nodeType":"YulExpressionStatement","src":"15198:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15252:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15263:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15248:3:201"},"nodeType":"YulFunctionCall","src":"15248:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"15268:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15241:6:201"},"nodeType":"YulFunctionCall","src":"15241:34:201"},"nodeType":"YulExpressionStatement","src":"15241:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15295:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15306:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15291:3:201"},"nodeType":"YulFunctionCall","src":"15291:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"15311:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15284:6:201"},"nodeType":"YulFunctionCall","src":"15284:34:201"},"nodeType":"YulExpressionStatement","src":"15284:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15338:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15349:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15334:3:201"},"nodeType":"YulFunctionCall","src":"15334:18:201"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"15358:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15366:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15354:3:201"},"nodeType":"YulFunctionCall","src":"15354:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15327:6:201"},"nodeType":"YulFunctionCall","src":"15327:43:201"},"nodeType":"YulExpressionStatement","src":"15327:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15390:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15401:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15386:3:201"},"nodeType":"YulFunctionCall","src":"15386:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"15407:3:201","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15379:6:201"},"nodeType":"YulFunctionCall","src":"15379:32:201"},"nodeType":"YulExpressionStatement","src":"15379:32:201"},{"nodeType":"YulAssignment","src":"15420:53:201","value":{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"15445:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15457:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15468:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15453:3:201"},"nodeType":"YulFunctionCall","src":"15453:19:201"}],"functionName":{"name":"abi_encode_bytes","nodeType":"YulIdentifier","src":"15428:16:201"},"nodeType":"YulFunctionCall","src":"15428:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15420:4:201"}]}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint256_t_address_t_bytes_memory_ptr__to_t_address_t_uint256_t_uint256_t_address_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15064:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"15075:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"15083:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15091:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15099:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15107:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15118:4:201","type":""}],"src":"14896:583:201"},{"body":{"nodeType":"YulBlock","src":"15533:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"15555:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15557:16:201"},"nodeType":"YulFunctionCall","src":"15557:18:201"},"nodeType":"YulExpressionStatement","src":"15557:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15549:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"15552:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15546:2:201"},"nodeType":"YulFunctionCall","src":"15546:8:201"},"nodeType":"YulIf","src":"15543:34:201"},{"nodeType":"YulAssignment","src":"15586:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15598:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"15601:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15594:3:201"},"nodeType":"YulFunctionCall","src":"15594:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"15586:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15515:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"15518:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"15524:4:201","type":""}],"src":"15484:125:201"},{"body":{"nodeType":"YulBlock","src":"15662:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"15689:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15691:16:201"},"nodeType":"YulFunctionCall","src":"15691:18:201"},"nodeType":"YulExpressionStatement","src":"15691:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15678:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"15685:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"15681:3:201"},"nodeType":"YulFunctionCall","src":"15681:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15675:2:201"},"nodeType":"YulFunctionCall","src":"15675:13:201"},"nodeType":"YulIf","src":"15672:39:201"},{"nodeType":"YulAssignment","src":"15720:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15731:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"15734:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15727:3:201"},"nodeType":"YulFunctionCall","src":"15727:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"15720:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15645:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"15648:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"15654:3:201","type":""}],"src":"15614:128:201"},{"body":{"nodeType":"YulBlock","src":"15828:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"15874:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15883:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15886:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15876:6:201"},"nodeType":"YulFunctionCall","src":"15876:12:201"},"nodeType":"YulExpressionStatement","src":"15876:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"15849:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"15858:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15845:3:201"},"nodeType":"YulFunctionCall","src":"15845:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"15870:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"15841:3:201"},"nodeType":"YulFunctionCall","src":"15841:32:201"},"nodeType":"YulIf","src":"15838:52:201"},{"nodeType":"YulAssignment","src":"15899:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15915:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15909:5:201"},"nodeType":"YulFunctionCall","src":"15909:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"15899:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15794:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"15805:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"15817:6:201","type":""}],"src":"15747:184:201"},{"body":{"nodeType":"YulBlock","src":"15984:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"15994:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"16004:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15998:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16047:21:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"16062:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16065:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16058:3:201"},"nodeType":"YulFunctionCall","src":"16058:10:201"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"16051:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16077:21:201","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"16092:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16095:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16088:3:201"},"nodeType":"YulFunctionCall","src":"16088:10:201"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"16081:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"16132:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"16134:16:201"},"nodeType":"YulFunctionCall","src":"16134:18:201"},"nodeType":"YulExpressionStatement","src":"16134:18:201"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16113:3:201"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"16122:2:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"16126:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16118:3:201"},"nodeType":"YulFunctionCall","src":"16118:12:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"16110:2:201"},"nodeType":"YulFunctionCall","src":"16110:21:201"},"nodeType":"YulIf","src":"16107:47:201"},{"nodeType":"YulAssignment","src":"16163:20:201","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16174:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"16179:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16170:3:201"},"nodeType":"YulFunctionCall","src":"16170:13:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"16163:3:201"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15967:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"15970:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"15976:3:201","type":""}],"src":"15936:253:201"},{"body":{"nodeType":"YulBlock","src":"16351:241:201","statements":[{"nodeType":"YulAssignment","src":"16361:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16373:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16384:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16369:3:201"},"nodeType":"YulFunctionCall","src":"16369:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16361:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"16396:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"16406:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"16400:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16464:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16479:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16487:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16475:3:201"},"nodeType":"YulFunctionCall","src":"16475:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16457:6:201"},"nodeType":"YulFunctionCall","src":"16457:34:201"},"nodeType":"YulExpressionStatement","src":"16457:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16511:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16522:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16507:3:201"},"nodeType":"YulFunctionCall","src":"16507:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"16531:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16539:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16527:3:201"},"nodeType":"YulFunctionCall","src":"16527:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16500:6:201"},"nodeType":"YulFunctionCall","src":"16500:43:201"},"nodeType":"YulExpressionStatement","src":"16500:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16563:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16574:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16559:3:201"},"nodeType":"YulFunctionCall","src":"16559:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"16579:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16552:6:201"},"nodeType":"YulFunctionCall","src":"16552:34:201"},"nodeType":"YulExpressionStatement","src":"16552:34:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16304:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"16315:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16323:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16331:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16342:4:201","type":""}],"src":"16194:398:201"},{"body":{"nodeType":"YulBlock","src":"16802:281:201","statements":[{"nodeType":"YulAssignment","src":"16812:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16824:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16835:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16820:3:201"},"nodeType":"YulFunctionCall","src":"16820:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16812:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16855:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16870:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"16878:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16866:3:201"},"nodeType":"YulFunctionCall","src":"16866:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16848:6:201"},"nodeType":"YulFunctionCall","src":"16848:74:201"},"nodeType":"YulExpressionStatement","src":"16848:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16942:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16953:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16938:3:201"},"nodeType":"YulFunctionCall","src":"16938:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"16958:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16931:6:201"},"nodeType":"YulFunctionCall","src":"16931:34:201"},"nodeType":"YulExpressionStatement","src":"16931:34:201"},{"expression":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"17007:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17019:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17030:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17015:3:201"},"nodeType":"YulFunctionCall","src":"17015:18:201"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"16974:32:201"},"nodeType":"YulFunctionCall","src":"16974:60:201"},"nodeType":"YulExpressionStatement","src":"16974:60:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17054:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17065:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17050:3:201"},"nodeType":"YulFunctionCall","src":"17050:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"17070:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17043:6:201"},"nodeType":"YulFunctionCall","src":"17043:34:201"},"nodeType":"YulExpressionStatement","src":"17043:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_enum$_InterestRateMode_$21337_t_uint256__to_t_address_t_uint256_t_uint8_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16747:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"16758:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"16766:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16774:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16782:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16793:4:201","type":""}],"src":"16597:486:201"},{"body":{"nodeType":"YulBlock","src":"17219:335:201","statements":[{"body":{"nodeType":"YulBlock","src":"17266:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17275:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17278:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17268:6:201"},"nodeType":"YulFunctionCall","src":"17268:12:201"},"nodeType":"YulExpressionStatement","src":"17268:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"17240:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"17249:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17236:3:201"},"nodeType":"YulFunctionCall","src":"17236:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"17261:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"17232:3:201"},"nodeType":"YulFunctionCall","src":"17232:33:201"},"nodeType":"YulIf","src":"17229:53:201"},{"nodeType":"YulAssignment","src":"17291:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17307:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17301:5:201"},"nodeType":"YulFunctionCall","src":"17301:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"17291:6:201"}]},{"nodeType":"YulAssignment","src":"17326:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17346:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17357:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17342:3:201"},"nodeType":"YulFunctionCall","src":"17342:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17336:5:201"},"nodeType":"YulFunctionCall","src":"17336:25:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"17326:6:201"}]},{"nodeType":"YulAssignment","src":"17370:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17390:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17401:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17386:3:201"},"nodeType":"YulFunctionCall","src":"17386:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17380:5:201"},"nodeType":"YulFunctionCall","src":"17380:25:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"17370:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"17414:38:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17437:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17448:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17433:3:201"},"nodeType":"YulFunctionCall","src":"17433:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17427:5:201"},"nodeType":"YulFunctionCall","src":"17427:25:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"17418:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"17508:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17517:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17520:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17510:6:201"},"nodeType":"YulFunctionCall","src":"17510:12:201"},"nodeType":"YulExpressionStatement","src":"17510:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17474:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17485:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"17492:12:201","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17481:3:201"},"nodeType":"YulFunctionCall","src":"17481:24:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"17471:2:201"},"nodeType":"YulFunctionCall","src":"17471:35:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17464:6:201"},"nodeType":"YulFunctionCall","src":"17464:43:201"},"nodeType":"YulIf","src":"17461:63:201"},{"nodeType":"YulAssignment","src":"17533:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"17543:5:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"17533:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17161:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"17172:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"17184:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"17192:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"17200:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"17208:6:201","type":""}],"src":"17088:466:201"},{"body":{"nodeType":"YulBlock","src":"17733:229:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17750:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17761:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17743:6:201"},"nodeType":"YulFunctionCall","src":"17743:21:201"},"nodeType":"YulExpressionStatement","src":"17743:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17784:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17795:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17780:3:201"},"nodeType":"YulFunctionCall","src":"17780:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"17800:2:201","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17773:6:201"},"nodeType":"YulFunctionCall","src":"17773:30:201"},"nodeType":"YulExpressionStatement","src":"17773:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17823:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17834:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17819:3:201"},"nodeType":"YulFunctionCall","src":"17819:18:201"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"17839:34:201","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17812:6:201"},"nodeType":"YulFunctionCall","src":"17812:62:201"},"nodeType":"YulExpressionStatement","src":"17812:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17894:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17905:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17890:3:201"},"nodeType":"YulFunctionCall","src":"17890:18:201"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"17910:9:201","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17883:6:201"},"nodeType":"YulFunctionCall","src":"17883:37:201"},"nodeType":"YulExpressionStatement","src":"17883:37:201"},{"nodeType":"YulAssignment","src":"17929:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17941:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17952:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17937:3:201"},"nodeType":"YulFunctionCall","src":"17937:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17929:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17710:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17724:4:201","type":""}],"src":"17559:403:201"},{"body":{"nodeType":"YulBlock","src":"18162:729:201","statements":[{"nodeType":"YulAssignment","src":"18172:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18184:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18195:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18180:3:201"},"nodeType":"YulFunctionCall","src":"18180:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18172:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18215:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18232:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18226:5:201"},"nodeType":"YulFunctionCall","src":"18226:13:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18208:6:201"},"nodeType":"YulFunctionCall","src":"18208:32:201"},"nodeType":"YulExpressionStatement","src":"18208:32:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18260:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18271:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18256:3:201"},"nodeType":"YulFunctionCall","src":"18256:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18288:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"18296:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18284:3:201"},"nodeType":"YulFunctionCall","src":"18284:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18278:5:201"},"nodeType":"YulFunctionCall","src":"18278:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18249:6:201"},"nodeType":"YulFunctionCall","src":"18249:54:201"},"nodeType":"YulExpressionStatement","src":"18249:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18323:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18334:4:201","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18319:3:201"},"nodeType":"YulFunctionCall","src":"18319:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18351:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"18359:4:201","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18347:3:201"},"nodeType":"YulFunctionCall","src":"18347:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18341:5:201"},"nodeType":"YulFunctionCall","src":"18341:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18312:6:201"},"nodeType":"YulFunctionCall","src":"18312:54:201"},"nodeType":"YulExpressionStatement","src":"18312:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18386:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18397:4:201","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18382:3:201"},"nodeType":"YulFunctionCall","src":"18382:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18414:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"18422:4:201","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18410:3:201"},"nodeType":"YulFunctionCall","src":"18410:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18404:5:201"},"nodeType":"YulFunctionCall","src":"18404:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18375:6:201"},"nodeType":"YulFunctionCall","src":"18375:54:201"},"nodeType":"YulExpressionStatement","src":"18375:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18449:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18460:4:201","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18445:3:201"},"nodeType":"YulFunctionCall","src":"18445:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18477:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"18485:4:201","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18473:3:201"},"nodeType":"YulFunctionCall","src":"18473:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18467:5:201"},"nodeType":"YulFunctionCall","src":"18467:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18438:6:201"},"nodeType":"YulFunctionCall","src":"18438:54:201"},"nodeType":"YulExpressionStatement","src":"18438:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18512:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18523:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18508:3:201"},"nodeType":"YulFunctionCall","src":"18508:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18540:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"18548:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18536:3:201"},"nodeType":"YulFunctionCall","src":"18536:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18530:5:201"},"nodeType":"YulFunctionCall","src":"18530:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18501:6:201"},"nodeType":"YulFunctionCall","src":"18501:54:201"},"nodeType":"YulExpressionStatement","src":"18501:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18575:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18586:4:201","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18571:3:201"},"nodeType":"YulFunctionCall","src":"18571:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18603:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"18611:4:201","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18599:3:201"},"nodeType":"YulFunctionCall","src":"18599:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18593:5:201"},"nodeType":"YulFunctionCall","src":"18593:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18564:6:201"},"nodeType":"YulFunctionCall","src":"18564:54:201"},"nodeType":"YulExpressionStatement","src":"18564:54:201"},{"nodeType":"YulVariableDeclaration","src":"18627:44:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18657:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"18665:4:201","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18653:3:201"},"nodeType":"YulFunctionCall","src":"18653:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18647:5:201"},"nodeType":"YulFunctionCall","src":"18647:24:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"18631:12:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"18680:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"18690:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"18684:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18752:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18763:4:201","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18748:3:201"},"nodeType":"YulFunctionCall","src":"18748:20:201"},{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"18774:12:201"},{"name":"_1","nodeType":"YulIdentifier","src":"18788:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18770:3:201"},"nodeType":"YulFunctionCall","src":"18770:21:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18741:6:201"},"nodeType":"YulFunctionCall","src":"18741:51:201"},"nodeType":"YulExpressionStatement","src":"18741:51:201"},{"nodeType":"YulVariableDeclaration","src":"18801:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"18811:6:201","type":"","value":"0x0100"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"18805:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18837:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"18848:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18833:3:201"},"nodeType":"YulFunctionCall","src":"18833:18:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18867:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"18875:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18863:3:201"},"nodeType":"YulFunctionCall","src":"18863:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18857:5:201"},"nodeType":"YulFunctionCall","src":"18857:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"18881:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18853:3:201"},"nodeType":"YulFunctionCall","src":"18853:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18826:6:201"},"nodeType":"YulFunctionCall","src":"18826:59:201"},"nodeType":"YulExpressionStatement","src":"18826:59:201"}]},"name":"abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18131:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18142:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18153:4:201","type":""}],"src":"17967:924:201"},{"body":{"nodeType":"YulBlock","src":"19011:191:201","statements":[{"body":{"nodeType":"YulBlock","src":"19057:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19066:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19069:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19059:6:201"},"nodeType":"YulFunctionCall","src":"19059:12:201"},"nodeType":"YulExpressionStatement","src":"19059:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"19032:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"19041:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19028:3:201"},"nodeType":"YulFunctionCall","src":"19028:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"19053:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"19024:3:201"},"nodeType":"YulFunctionCall","src":"19024:32:201"},"nodeType":"YulIf","src":"19021:52:201"},{"nodeType":"YulAssignment","src":"19082:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19098:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19092:5:201"},"nodeType":"YulFunctionCall","src":"19092:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"19082:6:201"}]},{"nodeType":"YulAssignment","src":"19117:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19137:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19148:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19133:3:201"},"nodeType":"YulFunctionCall","src":"19133:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19127:5:201"},"nodeType":"YulFunctionCall","src":"19127:25:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"19117:6:201"}]},{"nodeType":"YulAssignment","src":"19161:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19181:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19192:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19177:3:201"},"nodeType":"YulFunctionCall","src":"19177:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19171:5:201"},"nodeType":"YulFunctionCall","src":"19171:25:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"19161:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18961:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"18972:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"18984:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"18992:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"19000:6:201","type":""}],"src":"18896:306:201"},{"body":{"nodeType":"YulBlock","src":"19420:250:201","statements":[{"nodeType":"YulAssignment","src":"19430:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19442:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19453:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19438:3:201"},"nodeType":"YulFunctionCall","src":"19438:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19430:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19473:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"19484:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19466:6:201"},"nodeType":"YulFunctionCall","src":"19466:25:201"},"nodeType":"YulExpressionStatement","src":"19466:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19511:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19522:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19507:3:201"},"nodeType":"YulFunctionCall","src":"19507:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"19527:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19500:6:201"},"nodeType":"YulFunctionCall","src":"19500:34:201"},"nodeType":"YulExpressionStatement","src":"19500:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19554:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19565:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19550:3:201"},"nodeType":"YulFunctionCall","src":"19550:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"19570:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19543:6:201"},"nodeType":"YulFunctionCall","src":"19543:34:201"},"nodeType":"YulExpressionStatement","src":"19543:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19597:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19608:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19593:3:201"},"nodeType":"YulFunctionCall","src":"19593:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"19613:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19586:6:201"},"nodeType":"YulFunctionCall","src":"19586:34:201"},"nodeType":"YulExpressionStatement","src":"19586:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19640:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19651:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19636:3:201"},"nodeType":"YulFunctionCall","src":"19636:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"19657:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19629:6:201"},"nodeType":"YulFunctionCall","src":"19629:35:201"},"nodeType":"YulExpressionStatement","src":"19629:35:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19357:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"19368:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"19376:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"19384:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"19392:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"19400:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19411:4:201","type":""}],"src":"19207:463:201"},{"body":{"nodeType":"YulBlock","src":"19849:175:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19866:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19877:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19859:6:201"},"nodeType":"YulFunctionCall","src":"19859:21:201"},"nodeType":"YulExpressionStatement","src":"19859:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19900:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19911:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19896:3:201"},"nodeType":"YulFunctionCall","src":"19896:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"19916:2:201","type":"","value":"25"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19889:6:201"},"nodeType":"YulFunctionCall","src":"19889:30:201"},"nodeType":"YulExpressionStatement","src":"19889:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19939:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19950:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19935:3:201"},"nodeType":"YulFunctionCall","src":"19935:18:201"},{"hexValue":"475076323a206661696c6564207472616e7366657246726f6d","kind":"string","nodeType":"YulLiteral","src":"19955:27:201","type":"","value":"GPv2: failed transferFrom"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19928:6:201"},"nodeType":"YulFunctionCall","src":"19928:55:201"},"nodeType":"YulExpressionStatement","src":"19928:55:201"},{"nodeType":"YulAssignment","src":"19992:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20004:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20015:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20000:3:201"},"nodeType":"YulFunctionCall","src":"20000:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19992:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19826:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19840:4:201","type":""}],"src":"19675:349:201"},{"body":{"nodeType":"YulBlock","src":"20081:176:201","statements":[{"body":{"nodeType":"YulBlock","src":"20200:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"20202:16:201"},"nodeType":"YulFunctionCall","src":"20202:18:201"},"nodeType":"YulExpressionStatement","src":"20202:18:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"20112:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"20105:6:201"},"nodeType":"YulFunctionCall","src":"20105:9:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"20098:6:201"},"nodeType":"YulFunctionCall","src":"20098:17:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"20120:1:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20127:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"20195:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"20123:3:201"},"nodeType":"YulFunctionCall","src":"20123:74:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20117:2:201"},"nodeType":"YulFunctionCall","src":"20117:81:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20094:3:201"},"nodeType":"YulFunctionCall","src":"20094:105:201"},"nodeType":"YulIf","src":"20091:131:201"},{"nodeType":"YulAssignment","src":"20231:20:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"20246:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"20249:1:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"20242:3:201"},"nodeType":"YulFunctionCall","src":"20242:9:201"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"20231:7:201"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"20060:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"20063:1:201","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"20069:7:201","type":""}],"src":"20029:228:201"},{"body":{"nodeType":"YulBlock","src":"20294:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20311:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20314:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20304:6:201"},"nodeType":"YulFunctionCall","src":"20304:88:201"},"nodeType":"YulExpressionStatement","src":"20304:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20408:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"20411:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20401:6:201"},"nodeType":"YulFunctionCall","src":"20401:15:201"},"nodeType":"YulExpressionStatement","src":"20401:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20432:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20435:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20425:6:201"},"nodeType":"YulFunctionCall","src":"20425:15:201"},"nodeType":"YulExpressionStatement","src":"20425:15:201"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"20262:184:201"},{"body":{"nodeType":"YulBlock","src":"20497:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"20528:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20549:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20552:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20542:6:201"},"nodeType":"YulFunctionCall","src":"20542:88:201"},"nodeType":"YulExpressionStatement","src":"20542:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20650:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"20653:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20643:6:201"},"nodeType":"YulFunctionCall","src":"20643:15:201"},"nodeType":"YulExpressionStatement","src":"20643:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20678:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20681:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20671:6:201"},"nodeType":"YulFunctionCall","src":"20671:15:201"},"nodeType":"YulExpressionStatement","src":"20671:15:201"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"20517:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"20510:6:201"},"nodeType":"YulFunctionCall","src":"20510:9:201"},"nodeType":"YulIf","src":"20507:189:201"},{"nodeType":"YulAssignment","src":"20705:14:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"20714:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"20717:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"20710:3:201"},"nodeType":"YulFunctionCall","src":"20710:9:201"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"20705:1:201"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"20482:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"20485:1:201","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"20491:1:201","type":""}],"src":"20451:274:201"}]},"contents":"{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_2626() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x01c0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory_2628() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xe0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function array_allocation_size_array_address_dyn(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n        size := add(shl(5, length), 0x20)\n    }\n    function abi_decode_array_address_dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0x20\n        let dst := allocate_memory(array_allocation_size_array_address_dyn(_1))\n        let dst_1 := dst\n        mstore(dst, _1)\n        dst := add(dst, _2)\n        let srcEnd := add(add(offset, shl(5, _1)), _2)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, _2)\n        for { } lt(src, srcEnd) { src := add(src, _2) }\n        {\n            let value := calldataload(src)\n            validator_revert_address(value)\n            mstore(dst, value)\n            dst := add(dst, _2)\n        }\n        array := dst_1\n    }\n    function abi_decode_array_uint256_dyn(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0x20\n        let dst := allocate_memory(array_allocation_size_array_address_dyn(_1))\n        let dst_1 := dst\n        mstore(dst, _1)\n        dst := add(dst, _2)\n        let srcEnd := add(add(offset, shl(5, _1)), _2)\n        if gt(srcEnd, end) { revert(0, 0) }\n        let src := add(offset, _2)\n        for { } lt(src, srcEnd) { src := add(src, _2) }\n        {\n            mstore(dst, calldataload(src))\n            dst := add(dst, _2)\n        }\n        array := dst_1\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        if gt(_1, 0xffffffffffffffff) { panic_error_0x41() }\n        let array_1 := allocate_memory(add(and(add(_1, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), 0x20))\n        mstore(array_1, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(array_1, _1), 0x20), 0)\n        array := array_1\n    }\n    function abi_decode_uint16(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_bool(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_bool(value)\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$t_struct$_UserConfigurationMap_$21322_storage_ptrt_struct$_FlashloanParams_$21516_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        let offset := calldataload(add(headStart, 128))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if slt(sub(dataEnd, _2), 0x01c0) { revert(0, 0) }\n        let value := allocate_memory_2626()\n        mstore(value, abi_decode_address(_2))\n        let offset_1 := calldataload(add(_2, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        mstore(add(value, 32), abi_decode_array_address_dyn(add(_2, offset_1), dataEnd))\n        let offset_2 := calldataload(add(_2, 64))\n        if gt(offset_2, _1) { revert(0, 0) }\n        mstore(add(value, 64), abi_decode_array_uint256_dyn(add(_2, offset_2), dataEnd))\n        let offset_3 := calldataload(add(_2, 96))\n        if gt(offset_3, _1) { revert(0, 0) }\n        mstore(add(value, 96), abi_decode_array_uint256_dyn(add(_2, offset_3), dataEnd))\n        mstore(add(value, 128), abi_decode_address(add(_2, 128)))\n        let offset_4 := calldataload(add(_2, 160))\n        if gt(offset_4, _1) { revert(0, 0) }\n        mstore(add(value, 160), abi_decode_bytes(add(_2, offset_4), dataEnd))\n        mstore(add(value, 192), abi_decode_uint16(add(_2, 192)))\n        mstore(add(value, 224), calldataload(add(_2, 224)))\n        let _3 := 256\n        mstore(add(value, _3), calldataload(add(_2, _3)))\n        let _4 := 288\n        mstore(add(value, _4), calldataload(add(_2, _4)))\n        let _5 := 320\n        mstore(add(value, _5), calldataload(add(_2, _5)))\n        let _6 := 352\n        mstore(add(value, _6), abi_decode_address(add(_2, _6)))\n        let _7 := 384\n        mstore(add(value, _7), abi_decode_uint8(add(_2, _7)))\n        let _8 := 416\n        mstore(add(value, _8), abi_decode_bool(add(_2, _8)))\n        value4 := value\n    }\n    function abi_decode_tuple_t_struct$_ReserveData_$21315_storage_ptrt_struct$_FlashloanSimpleParams_$21531_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if slt(sub(dataEnd, _2), 0xe0) { revert(0, 0) }\n        let value := allocate_memory_2628()\n        mstore(value, abi_decode_address(_2))\n        mstore(add(value, 32), abi_decode_address(add(_2, 32)))\n        mstore(add(value, 64), calldataload(add(_2, 64)))\n        let offset_1 := calldataload(add(_2, 96))\n        if gt(offset_1, _1) { revert(0, 0) }\n        mstore(add(value, 96), abi_decode_bytes(add(_2, offset_1), dataEnd))\n        mstore(add(value, 128), abi_decode_uint16(add(_2, 128)))\n        mstore(add(value, 160), calldataload(add(_2, 160)))\n        mstore(add(value, 192), calldataload(add(_2, 192)))\n        value1 := value\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_address(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function abi_encode_array_uint256_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 160)\n        mstore(headStart, 160)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 192)\n        let _1 := 0x20\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        mstore(add(headStart, _1), sub(pos, headStart))\n        let tail_2 := abi_encode_array_uint256_dyn(value1, pos)\n        mstore(add(headStart, 64), sub(tail_2, headStart))\n        let tail_3 := abi_encode_array_uint256_dyn(value2, tail_2)\n        mstore(add(headStart, 96), and(value3, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 128), sub(tail_3, headStart))\n        tail := abi_encode_bytes(value4, tail_3)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_enum_InterestRateMode(value, pos)\n    {\n        if iszero(lt(value, 3))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x21)\n            revert(0, 0x24)\n        }\n        mstore(pos, value)\n    }\n    function abi_encode_uint16(value, pos)\n    {\n        mstore(pos, and(value, 0xffff))\n    }\n    function abi_encode_bool(value, pos)\n    {\n        mstore(pos, iszero(iszero(value)))\n    }\n    function abi_encode_uint8(value, pos)\n    { mstore(pos, and(value, 0xff)) }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_ptr_t_struct$_ExecuteBorrowParams_$21433_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteBorrowParams_$21433_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 512)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        abi_encode_address(mload(value4), add(headStart, 128))\n        let memberValue0 := mload(add(value4, 32))\n        abi_encode_address(memberValue0, add(headStart, 160))\n        let memberValue0_1 := mload(add(value4, 64))\n        abi_encode_address(memberValue0_1, add(headStart, 192))\n        mstore(add(headStart, 224), mload(add(value4, 96)))\n        let memberValue0_2 := mload(add(value4, 128))\n        let _1 := 256\n        abi_encode_enum_InterestRateMode(memberValue0_2, add(headStart, _1))\n        let memberValue0_3 := mload(add(value4, 160))\n        let _2 := 288\n        abi_encode_uint16(memberValue0_3, add(headStart, _2))\n        let memberValue0_4 := mload(add(value4, 192))\n        let _3 := 320\n        abi_encode_bool(memberValue0_4, add(headStart, _3))\n        let _4 := mload(add(value4, 224))\n        let _5 := 352\n        mstore(add(headStart, _5), _4)\n        mstore(add(headStart, 384), mload(add(value4, _1)))\n        let memberValue0_5 := mload(add(value4, _2))\n        abi_encode_address(memberValue0_5, add(headStart, 416))\n        let memberValue0_6 := mload(add(value4, _3))\n        abi_encode_uint8(memberValue0_6, add(headStart, 448))\n        let memberValue0_7 := mload(add(value4, _5))\n        abi_encode_address(memberValue0_7, add(headStart, 480))\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_enum$_InterestRateMode_$21337_t_rational_0_by_1__to_t_address_t_uint256_t_uint8_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        abi_encode_enum_InterestRateMode(value2, add(headStart, 64))\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint256_t_address_t_bytes_memory_ptr__to_t_address_t_uint256_t_uint256_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, _1))\n        mstore(add(headStart, 128), 160)\n        tail := abi_encode_bytes(value4, add(headStart, 160))\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_enum$_InterestRateMode_$21337_t_uint256__to_t_address_t_uint256_t_uint8_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        abi_encode_enum_InterestRateMode(value2, add(headStart, 64))\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        let value := mload(add(headStart, 96))\n        if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n        value3 := value\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 288)\n        mstore(headStart, mload(value0))\n        mstore(add(headStart, 0x20), mload(add(value0, 0x20)))\n        mstore(add(headStart, 0x40), mload(add(value0, 0x40)))\n        mstore(add(headStart, 0x60), mload(add(value0, 0x60)))\n        mstore(add(headStart, 0x80), mload(add(value0, 0x80)))\n        mstore(add(headStart, 0xa0), mload(add(value0, 0xa0)))\n        mstore(add(headStart, 0xc0), mload(add(value0, 0xc0)))\n        let memberValue0 := mload(add(value0, 0xe0))\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 0xe0), and(memberValue0, _1))\n        let _2 := 0x0100\n        mstore(add(headStart, _2), and(mload(add(value0, _2)), _1))\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"GPv2: failed transferFrom\")\n        tail := add(headStart, 96)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{"@aave/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol":{"BorrowLogic":[{"length":20,"start":1578}]}},"object":"73000000000000000000000000000000000000000030146080604052600436106100405760003560e01c80632e7263ea14610045578063a1fe0e8d14610067575b600080fd5b81801561005157600080fd5b506100656100603660046122ee565b610087565b005b81801561007357600080fd5b5061006561008236600461248b565b61097c565b61009a8582602001518360400151610be8565b6101066040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016060815260200160008152602001600081525090565b81602001515167ffffffffffffffff81111561012457610124612036565b60405190808252806020026020018201604052801561014d578160200160208202803683370190505b506080820152815173ffffffffffffffffffffffffffffffffffffffff1681526101a0820151610187578161010001518260e0015161018b565b6000805b60c083015260a0820152600060208201525b8160200151518160200151101561034f5781604001518160200151815181106101c8576101c8612555565b60209081029190910101516060820152600082606001518260200151815181106101f4576101f4612555565b6020026020010151600281111561020d5761020d612584565b600281111561021e5761021e612584565b1461022a57600061023d565b60a0810151606082015161023d91610cd9565b816080015182602001518151811061025757610257612555565b602002602001018181525050856000836020015183602001518151811061028057610280612555565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff90811683529082019290925260409081016000206004908101548551606086015193517f4efecaa5000000000000000000000000000000000000000000000000000000008152908516928101929092526024820192909252911690634efecaa590604401600060405180830381600087803b15801561031f57600080fd5b505af1158015610333573d6000803e3d6000fd5b5050506020820180519150610347826125e2565b90525061019d565b806000015173ffffffffffffffffffffffffffffffffffffffff1663920f5c84836020015184604001518460800151338760a001516040518663ffffffff1660e01b81526004016103a49594939291906126c1565b6020604051808303816000875af11580156103c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e79190612775565b6040518060400160405280600281526020017f31330000000000000000000000000000000000000000000000000000000000008152509061045e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559190612792565b60405180910390fd5b50600060208201525b8160200151518160200151101561097457816020015181602001518151811061049257610492612555565b6020026020010151816040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081604001518160200151815181106104eb576104eb612555565b602090810291909101015160608201526000826060015182602001518151811061051757610517612555565b6020026020010151600281111561053057610530612584565b600281111561054157610541612584565b141561062857610623866000836040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c001604052808460600151815260200184608001518560200151815181106105bb576105bb612555565b602002602001015181526020018460c001518152602001846040015173ffffffffffffffffffffffffffffffffffffffff168152602001856000015173ffffffffffffffffffffffffffffffffffffffff1681526020018560c0015161ffff16815250610d1c565b61095c565b73__$f250b95a8491f1e84f401ed6d1693cd837$__631e6473f987878787604051806101800160405280886040015173ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001896080015173ffffffffffffffffffffffffffffffffffffffff1681526020018860600151815260200189606001518960200151815181106106d2576106d2612555565b602002602001015160028111156106eb576106eb612584565b60028111156106fc576106fc612584565b81526020018960c0015161ffff1681526020016000151581526020018961012001518152602001896101400151815260200189610160015173ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561077e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a291906127a5565b73ffffffffffffffffffffffffffffffffffffffff16815260200189610180015160ff16815260200189610160015173ffffffffffffffffffffffffffffffffffffffff16635eb88d3d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561081b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083f91906127a5565b73ffffffffffffffffffffffffffffffffffffffff168152506040518663ffffffff1660e01b81526004016108789594939291906127fd565b60006040518083038186803b15801561089057600080fd5b505af41580156108a4573d6000803e3d6000fd5b505050508160c0015161ffff16816040015173ffffffffffffffffffffffffffffffffffffffff16836000015173ffffffffffffffffffffffffffffffffffffffff167fefefaba5e921573100900a3ad9cf29f222d995fb3b6045797eaea7521bd8d6f0338560600151876060015187602001518151811061092857610928612555565b6020026020010151600281111561094157610941612584565b60006040516109539493929190612925565b60405180910390a45b6020810180519061096c826125e2565b905250610467565b505050505050565b61098582611030565b805160c0820151604083015160009161099e9190610cd9565b600480860154855160408088015190517f4efecaa500000000000000000000000000000000000000000000000000000000815294955073ffffffffffffffffffffffffffffffffffffffff90921693634efecaa593610a1f93910173ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600060405180830381600087803b158015610a3957600080fd5b505af1158015610a4d573d6000803e3d6000fd5b505050506020830151604080850151606086015191517f1b11d0ff00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861693631b11d0ff93610ab693919287913391600401612965565b6020604051808303816000875af1158015610ad5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af99190612775565b6040518060400160405280600281526020017f313300000000000000000000000000000000000000000000000000000000000081525090610b67576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559190612792565b50610be2846040518060c00160405280866040015181526020018481526020018660a001518152602001866020015173ffffffffffffffffffffffffffffffffffffffff168152602001866000015173ffffffffffffffffffffffffffffffffffffffff168152602001866080015161ffff16815250610d1c565b50505050565b80518251146040518060400160405280600281526020017f343900000000000000000000000000000000000000000000000000000000000081525090610c5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559190612792565b5060005b8251811015610be257610cc7846000858481518110610c8057610c80612555565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611030565b80610cd1816125e2565b915050610c5f565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7783900484111517610d0e57600080fd5b506127109102611388010490565b6000610d3982604001518360200151610cd990919063ffffffff16565b90506000818360200151610d4d91906129b5565b9050600083602001518460000151610d6591906129cc565b90506000610d72866111ba565b9050610d7e86826113d3565b6101008101516008870154610e2f91610da9916fffffffffffffffffffffffffffffffff169061145e565b826101e0015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1d91906129e4565b610e2791906129cc565b8790856114b5565b6101008201819052610e4b90610e46908690611565565b6115a4565b600887018054600090610e719084906fffffffffffffffffffffffffffffffff166129fd565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550610ec58186606001518460008a61164a90949392919063ffffffff16565b60808501516101e08201516060870151610ef89273ffffffffffffffffffffffffffffffffffffffff909116918561198b565b6101e081015160808601516040517f6fd9767600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201819052602482015260448101859052911690636fd9767690606401600060405180830381600087803b158015610f7a57600080fd5b505af1158015610f8e573d6000803e3d6000fd5b505050508460a0015161ffff16856060015173ffffffffffffffffffffffffffffffffffffffff16866080015173ffffffffffffffffffffffffffffffffffffffff167fefefaba5e921573100900a3ad9cf29f222d995fb3b6045797eaea7521bd8d6f03389600001516000600281111561100b5761100b612584565b8b602001516040516110209493929190612925565b60405180910390a4505050505050565b60408051602081019091528154808252671000000000000000161515156040518060400160405280600281526020017f3239000000000000000000000000000000000000000000000000000000000000815250906110bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559190612792565b5080516701000000000000001615156040518060400160405280600281526020017f323700000000000000000000000000000000000000000000000000000000000081525090611138576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559190612792565b5080516780000000000000001615156040518060400160405280600281526020017f3931000000000000000000000000000000000000000000000000000000000000815250906111b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104559190612792565b505050565b6111c2611f89565b6111ca611f89565b60408051602081018252845481526101c0830181905251901c61ffff166101a082015260018301546fffffffffffffffffffffffffffffffff808216610100840181905260e0840152600285015480821661014085018190526101208501527001000000000000000000000000000000009283900482166101608501528290041661018083015260048085015473ffffffffffffffffffffffffffffffffffffffff9081166101e085015260058601548116610200850152600686015416610220840181905260038601549290920464ffffffffff16610240840152604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905163b1bf962d928281019260209291908290030181865afa1580156112f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131b91906129e4565b816020018181525081600001818152505080610200015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa15801561137c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a09190612a31565b64ffffffffff166102608501526060840181905260808401829052604084019290925260c083015260a082015292915050565b60038201544264ffffffffff908116700100000000000000000000000000000000909204161415611402575050565b61140c8282611a6d565b6114168282611b8e565b5060030180547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff1602179055565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761149357600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b6001830154600090819061150d906fffffffffffffffffffffffffffffffff166b033b2e3c9fd0803ce80000006114fd6114ee88611d0d565b6114f788611d0d565b90611565565b61150791906129cc565b9061145e565b9050611518816115a4565b6001860180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691909117905590505b9392505050565b600081156b033b2e3c9fd0803ce80000006002840419048411171561158957600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b60006fffffffffffffffffffffffffffffffff821115611646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610455565b5090565b6116756040518060800160405280600081526020016000815260200160008152602001600081525090565b61014085015160208601516116899161145e565b60608083019182526007880154604080516101208101825260088b01546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000009091041681526020810188905280820187905260c0808b0151948201949094529351608085015260a0808a0151908501526101a08901519284019290925273ffffffffffffffffffffffffffffffffffffffff87811660e08501526101e0890151811661010085015291517fa589870900000000000000000000000000000000000000000000000000000000815291169163a5898709916117ea9190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa158015611807573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182b9190612a7c565b60408401526020830152808252611841906115a4565b6001870180546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556020810151611884906115a4565b6003870180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691909117905560408101516118d5906115a4565b6002870180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905580516020808301516040808501516101008a01516101408b0151835196875294860193909352908401526060830152608082015273ffffffffffffffffffffffffffffffffffffffff8516907f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a9060a00160405180910390a2505050505050565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af16119f6573d6000803e3d6000fd5b50611a0085611d28565b611a66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d000000000000006044820152606401610455565b5050505050565b61016081015115611afd576000611a8e826101600151836102400151611df4565b9050611aa78260e001518261145e90919063ffffffff16565b6101008301819052611ab8906115a4565b6001840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b805115611b8a576000611b1a826101800151836102400151611e39565b9050611b348261012001518261145e90919063ffffffff16565b6101408301819052611b45906115a4565b6002840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b5050565b611bc76040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6101a0820151611bd657505050565b6101208201518251611be79161145e565b60208201526101408201518251611bfd9161145e565b60408201526060820151610260830151610240840151611c2592919064ffffffffff16611e42565b606082018190526040830151611c3a9161145e565b808252602082015160808401516040840151611c5691906129cc565b611c6091906129b5565b611c6a91906129b5565b608082018190526101a0830151611c819190610cd9565b60a08201819052156111b557611cac610e468361010001518360a0015161156590919063ffffffff16565b600884018054600090611cd29084906fffffffffffffffffffffffffffffffff166129fd565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550505050565b633b9aca008181029081048214611d2357600080fd5b919050565b6000611d68565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d8015611da75760208114611de157611da27f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f611d2f565b611dee565b823b611dd857611dd87f475076323a206e6f74206120636f6e74726163740000000000000000000000006014611d2f565b60019150611dee565b3d6000803e600051151591505b50919050565b600080611e0864ffffffffff8416426129b5565b611e129085612aaa565b6301e1338090049050611e31816b033b2e3c9fd0803ce80000006129cc565b949350505050565b600061155e8383425b600080611e5664ffffffffff8516846129b5565b905080611e72576b033b2e3c9fd0803ce800000091505061155e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511611ea8576000611ead565b600285035b925066038882915c4000611ec18a8061145e565b81611ece57611ece612ae7565b0491506301e13380611ee0838b61145e565b81611eed57611eed612ae7565b049050600082611efd8688612aaa565b611f079190612aaa565b60029004905060008285611f1b888a612aaa565b611f259190612aaa565b611f2f9190612aaa565b60069004905080826301e13380611f468a8f612aaa565b611f509190612b16565b611f66906b033b2e3c9fd0803ce80000006129cc565b611f7091906129cc565b611f7a91906129cc565b9b9a5050505050505050505050565b604051806102800160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200161200d6040518060200160405280600081525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101c0810167ffffffffffffffff8111828210171561208957612089612036565b60405290565b60405160e0810167ffffffffffffffff8111828210171561208957612089612036565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156120f9576120f9612036565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461212357600080fd5b50565b8035611d2381612101565b600067ffffffffffffffff82111561214b5761214b612036565b5060051b60200190565b600082601f83011261216657600080fd5b8135602061217b61217683612131565b6120b2565b82815260059290921b8401810191818101908684111561219a57600080fd5b8286015b848110156121be5780356121b181612101565b835291830191830161219e565b509695505050505050565b600082601f8301126121da57600080fd5b813560206121ea61217683612131565b82815260059290921b8401810191818101908684111561220957600080fd5b8286015b848110156121be578035835291830191830161220d565b600082601f83011261223557600080fd5b813567ffffffffffffffff81111561224f5761224f612036565b61228060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016120b2565b81815284602083860101111561229557600080fd5b816020850160208301376000918101602001919091529392505050565b803561ffff81168114611d2357600080fd5b803560ff81168114611d2357600080fd5b801515811461212357600080fd5b8035611d23816122d5565b600080600080600060a0868803121561230657600080fd5b85359450602086013593506040860135925060608601359150608086013567ffffffffffffffff8082111561233a57600080fd5b908701906101c0828a03121561234f57600080fd5b612357612065565b61236083612126565b815260208301358281111561237457600080fd5b6123808b828601612155565b60208301525060408301358281111561239857600080fd5b6123a48b8286016121c9565b6040830152506060830135828111156123bc57600080fd5b6123c88b8286016121c9565b6060830152506123da60808401612126565b608082015260a0830135828111156123f157600080fd5b6123fd8b828601612224565b60a08301525061240f60c084016122b2565b60c082015260e08381013590820152610100808401359082015261012080840135908201526101408084013590820152610160915061244f828401612126565b8282015261018091506124638284016122c4565b828201526101a091506124778284016122e3565b828201528093505050509295509295909350565b6000806040838503121561249e57600080fd5b82359150602083013567ffffffffffffffff808211156124bd57600080fd5b9084019060e082870312156124d157600080fd5b6124d961208f565b6124e283612126565b81526124f060208401612126565b60208201526040830135604082015260608301358281111561251157600080fd5b61251d88828601612224565b60608301525061252f608084016122b2565b608082015260a083013560a082015260c083013560c08201528093505050509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612614576126146125b3565b5060010190565b600081518084526020808501945080840160005b8381101561264b5781518752958201959082019060010161262f565b509495945050505050565b6000815180845260005b8181101561267c57602081850181015186830182015201612660565b8181111561268e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60a0808252865190820181905260009060209060c0840190828a01845b8281101561271057815173ffffffffffffffffffffffffffffffffffffffff16845292840192908401906001016126de565b50505083810382850152612724818961261b565b9150508281036040840152612739818761261b565b905073ffffffffffffffffffffffffffffffffffffffff8516606084015282810360808401526127698185612656565b98975050505050505050565b60006020828403121561278757600080fd5b815161155e816122d5565b60208152600061155e6020830184612656565b6000602082840312156127b757600080fd5b815161155e81612101565b600381106127f9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b858152602081018590526040810184905260608101839052815173ffffffffffffffffffffffffffffffffffffffff1660808201526102008101602083015173ffffffffffffffffffffffffffffffffffffffff811660a084015250604083015173ffffffffffffffffffffffffffffffffffffffff811660c084015250606083015160e08301526080830151610100612899818501836127c2565b60a085015191506101206128b28186018461ffff169052565b60c086015192506101406128c98187018515159052565b60e087015161016087810191909152928701516101808701529086015173ffffffffffffffffffffffffffffffffffffffff9081166101a08701529086015160ff166101c0860152908501519081166101e085015290506121be565b73ffffffffffffffffffffffffffffffffffffffff85168152602081018490526080810161295660408301856127c2565b82606083015295945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835286602084015285604084015280851660608401525060a060808301526129aa60a0830184612656565b979650505050505050565b6000828210156129c7576129c76125b3565b500390565b600082198211156129df576129df6125b3565b500190565b6000602082840312156129f657600080fd5b5051919050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115612a2857612a286125b3565b01949350505050565b60008060008060808587031215612a4757600080fd5b845193506020850151925060408501519150606085015164ffffffffff81168114612a7157600080fd5b939692955090935050565b600080600060608486031215612a9157600080fd5b8351925060208401519150604084015190509250925092565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612ae257612ae26125b3565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612b4c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220c754305337612f5415c370b6d17c38e594b32b1b1f6322d97af0b262f651eb2464736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x40 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2E7263EA EQ PUSH2 0x45 JUMPI DUP1 PUSH4 0xA1FE0E8D EQ PUSH2 0x67 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x65 PUSH2 0x60 CALLDATASIZE PUSH1 0x4 PUSH2 0x22EE JUMP JUMPDEST PUSH2 0x87 JUMP JUMPDEST STOP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x65 PUSH2 0x82 CALLDATASIZE PUSH1 0x4 PUSH2 0x248B JUMP JUMPDEST PUSH2 0x97C JUMP JUMPDEST PUSH2 0x9A DUP6 DUP3 PUSH1 0x20 ADD MLOAD DUP4 PUSH1 0x40 ADD MLOAD PUSH2 0xBE8 JUMP JUMPDEST PUSH2 0x106 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x124 JUMPI PUSH2 0x124 PUSH2 0x2036 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x14D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH1 0x80 DUP3 ADD MSTORE DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH2 0x1A0 DUP3 ADD MLOAD PUSH2 0x187 JUMPI DUP2 PUSH2 0x100 ADD MLOAD DUP3 PUSH1 0xE0 ADD MLOAD PUSH2 0x18B JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD MSTORE JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD MLOAD DUP2 PUSH1 0x20 ADD MLOAD LT ISZERO PUSH2 0x34F JUMPI DUP2 PUSH1 0x40 ADD MLOAD DUP2 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x1C8 JUMPI PUSH2 0x1C8 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 DUP3 PUSH1 0x60 ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x1F4 JUMPI PUSH2 0x1F4 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x20D JUMPI PUSH2 0x20D PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x21E JUMPI PUSH2 0x21E PUSH2 0x2584 JUMP JUMPDEST EQ PUSH2 0x22A JUMPI PUSH1 0x0 PUSH2 0x23D JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x23D SWAP2 PUSH2 0xCD9 JUMP JUMPDEST DUP2 PUSH1 0x80 ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x257 JUMPI PUSH2 0x257 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP DUP6 PUSH1 0x0 DUP4 PUSH1 0x20 ADD MLOAD DUP4 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x280 JUMPI PUSH2 0x280 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP4 MSTORE SWAP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 DUP2 ADD PUSH1 0x0 KECCAK256 PUSH1 0x4 SWAP1 DUP2 ADD SLOAD DUP6 MLOAD PUSH1 0x60 DUP7 ADD MLOAD SWAP4 MLOAD PUSH32 0x4EFECAA500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 DUP6 AND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP2 AND SWAP1 PUSH4 0x4EFECAA5 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x31F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x333 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 DUP3 ADD DUP1 MLOAD SWAP2 POP PUSH2 0x347 DUP3 PUSH2 0x25E2 JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x19D JUMP JUMPDEST DUP1 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x920F5C84 DUP4 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x40 ADD MLOAD DUP5 PUSH1 0x80 ADD MLOAD CALLER DUP8 PUSH1 0xA0 ADD MLOAD PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3A4 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x26C1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3C3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3E7 SWAP2 SWAP1 PUSH2 0x2775 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3133000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x45E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2792 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH1 0x20 DUP3 ADD MSTORE JUMPDEST DUP2 PUSH1 0x20 ADD MLOAD MLOAD DUP2 PUSH1 0x20 ADD MLOAD LT ISZERO PUSH2 0x974 JUMPI DUP2 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x492 JUMPI PUSH2 0x492 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 PUSH1 0x40 ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP2 PUSH1 0x40 ADD MLOAD DUP2 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x4EB JUMPI PUSH2 0x4EB PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 DUP3 PUSH1 0x60 ADD MLOAD DUP3 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x517 JUMPI PUSH2 0x517 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x530 JUMPI PUSH2 0x530 PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x541 JUMPI PUSH2 0x541 PUSH2 0x2584 JUMP JUMPDEST EQ ISZERO PUSH2 0x628 JUMPI PUSH2 0x623 DUP7 PUSH1 0x0 DUP4 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP5 PUSH1 0x60 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x80 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x5BB JUMPI PUSH2 0x5BB PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xC0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0xC0 ADD MLOAD PUSH2 0xFFFF AND DUP2 MSTORE POP PUSH2 0xD1C JUMP JUMPDEST PUSH2 0x95C JUMP JUMPDEST PUSH20 0x0 PUSH4 0x1E6473F9 DUP8 DUP8 DUP8 DUP8 PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x60 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x60 ADD MLOAD DUP10 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x6D2 JUMPI PUSH2 0x6D2 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x6EB JUMPI PUSH2 0x6EB PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x6FC JUMPI PUSH2 0x6FC PUSH2 0x2584 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0xC0 ADD MLOAD PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x120 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x140 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x160 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x77E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7A2 SWAP2 SWAP1 PUSH2 0x27A5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x180 ADD MLOAD PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x160 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5EB88D3D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x81B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x83F SWAP2 SWAP1 PUSH2 0x27A5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x878 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x27FD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x890 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x8A4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP2 PUSH1 0xC0 ADD MLOAD PUSH2 0xFFFF AND DUP2 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xEFEFABA5E921573100900A3AD9CF29F222D995FB3B6045797EAEA7521BD8D6F0 CALLER DUP6 PUSH1 0x60 ADD MLOAD DUP8 PUSH1 0x60 ADD MLOAD DUP8 PUSH1 0x20 ADD MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x928 JUMPI PUSH2 0x928 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x941 JUMPI PUSH2 0x941 PUSH2 0x2584 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH2 0x953 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2925 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 JUMPDEST PUSH1 0x20 DUP2 ADD DUP1 MLOAD SWAP1 PUSH2 0x96C DUP3 PUSH2 0x25E2 JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x467 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x985 DUP3 PUSH2 0x1030 JUMP JUMPDEST DUP1 MLOAD PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x0 SWAP2 PUSH2 0x99E SWAP2 SWAP1 PUSH2 0xCD9 JUMP JUMPDEST PUSH1 0x4 DUP1 DUP7 ADD SLOAD DUP6 MLOAD PUSH1 0x40 DUP1 DUP9 ADD MLOAD SWAP1 MLOAD PUSH32 0x4EFECAA500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP5 SWAP6 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP4 PUSH4 0x4EFECAA5 SWAP4 PUSH2 0xA1F SWAP4 SWAP2 ADD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA4D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD SWAP2 MLOAD PUSH32 0x1B11D0FF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP4 PUSH4 0x1B11D0FF SWAP4 PUSH2 0xAB6 SWAP4 SWAP2 SWAP3 DUP8 SWAP2 CALLER SWAP2 PUSH1 0x4 ADD PUSH2 0x2965 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xAD5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAF9 SWAP2 SWAP1 PUSH2 0x2775 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3133000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xB67 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2792 JUMP JUMPDEST POP PUSH2 0xBE2 DUP5 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP7 PUSH1 0x40 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0xA0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x80 ADD MLOAD PUSH2 0xFFFF AND DUP2 MSTORE POP PUSH2 0xD1C JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST DUP1 MLOAD DUP3 MLOAD EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3439000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xC5B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2792 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0xBE2 JUMPI PUSH2 0xCC7 DUP5 PUSH1 0x0 DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xC80 JUMPI PUSH2 0xC80 PUSH2 0x2555 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH2 0x1030 JUMP JUMPDEST DUP1 PUSH2 0xCD1 DUP2 PUSH2 0x25E2 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xC5F JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0xD0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD39 DUP3 PUSH1 0x40 ADD MLOAD DUP4 PUSH1 0x20 ADD MLOAD PUSH2 0xCD9 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP4 PUSH1 0x20 ADD MLOAD PUSH2 0xD4D SWAP2 SWAP1 PUSH2 0x29B5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0xD65 SWAP2 SWAP1 PUSH2 0x29CC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xD72 DUP7 PUSH2 0x11BA JUMP JUMPDEST SWAP1 POP PUSH2 0xD7E DUP7 DUP3 PUSH2 0x13D3 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH1 0x8 DUP8 ADD SLOAD PUSH2 0xE2F SWAP2 PUSH2 0xDA9 SWAP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0x145E JUMP JUMPDEST DUP3 PUSH2 0x1E0 ADD MLOAD 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 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDF9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE1D SWAP2 SWAP1 PUSH2 0x29E4 JUMP JUMPDEST PUSH2 0xE27 SWAP2 SWAP1 PUSH2 0x29CC JUMP JUMPDEST DUP8 SWAP1 DUP6 PUSH2 0x14B5 JUMP JUMPDEST PUSH2 0x100 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0xE4B SWAP1 PUSH2 0xE46 SWAP1 DUP7 SWAP1 PUSH2 0x1565 JUMP JUMPDEST PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x8 DUP8 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0xE71 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x29FD JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0xEC5 DUP2 DUP7 PUSH1 0x60 ADD MLOAD DUP5 PUSH1 0x0 DUP11 PUSH2 0x164A SWAP1 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x1E0 DUP3 ADD MLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH2 0xEF8 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 DUP6 PUSH2 0x198B JUMP JUMPDEST PUSH2 0x1E0 DUP2 ADD MLOAD PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6FD9767600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP6 SWAP1 MSTORE SWAP2 AND SWAP1 PUSH4 0x6FD97676 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF8E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP5 PUSH1 0xA0 ADD MLOAD PUSH2 0xFFFF AND DUP6 PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xEFEFABA5E921573100900A3AD9CF29F222D995FB3B6045797EAEA7521BD8D6F0 CALLER DUP10 PUSH1 0x0 ADD MLOAD PUSH1 0x0 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x100B JUMPI PUSH2 0x100B PUSH2 0x2584 JUMP JUMPDEST DUP12 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x1020 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2925 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP2 SLOAD DUP1 DUP3 MSTORE PUSH8 0x1000000000000000 AND ISZERO ISZERO ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x10BB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2792 JUMP JUMPDEST POP DUP1 MLOAD PUSH8 0x100000000000000 AND ISZERO ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1138 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2792 JUMP JUMPDEST POP DUP1 MLOAD PUSH8 0x8000000000000000 AND ISZERO ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3931000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x11B5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x455 SWAP2 SWAP1 PUSH2 0x2792 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x11C2 PUSH2 0x1F89 JUMP JUMPDEST PUSH2 0x11CA PUSH2 0x1F89 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE DUP5 SLOAD DUP2 MSTORE PUSH2 0x1C0 DUP4 ADD DUP2 SWAP1 MSTORE MLOAD SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x1A0 DUP3 ADD MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH2 0x100 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x2 DUP6 ADD SLOAD DUP1 DUP3 AND PUSH2 0x140 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP6 ADD MSTORE PUSH17 0x100000000000000000000000000000000 SWAP3 DUP4 SWAP1 DIV DUP3 AND PUSH2 0x160 DUP6 ADD MSTORE DUP3 SWAP1 DIV AND PUSH2 0x180 DUP4 ADD MSTORE PUSH1 0x4 DUP1 DUP6 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE PUSH1 0x5 DUP7 ADD SLOAD DUP2 AND PUSH2 0x200 DUP6 ADD MSTORE PUSH1 0x6 DUP7 ADD SLOAD AND PUSH2 0x220 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x3 DUP7 ADD SLOAD SWAP3 SWAP1 SWAP3 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x240 DUP5 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0xB1BF962D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0xB1BF962D SWAP3 DUP3 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12F7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x131B SWAP2 SWAP1 PUSH2 0x29E4 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP DUP2 PUSH1 0x0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x79774338 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x137C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13A0 SWAP2 SWAP1 PUSH2 0x2A31 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH2 0x260 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP5 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD TIMESTAMP PUSH5 0xFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP3 DIV AND EQ ISZERO PUSH2 0x1402 JUMPI POP POP JUMP JUMPDEST PUSH2 0x140C DUP3 DUP3 PUSH2 0x1A6D JUMP JUMPDEST PUSH2 0x1416 DUP3 DUP3 PUSH2 0x1B8E JUMP JUMPDEST POP PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1493 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0x150D SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x14FD PUSH2 0x14EE DUP9 PUSH2 0x1D0D JUMP JUMPDEST PUSH2 0x14F7 DUP9 PUSH2 0x1D0D JUMP JUMPDEST SWAP1 PUSH2 0x1565 JUMP JUMPDEST PUSH2 0x1507 SWAP2 SWAP1 PUSH2 0x29CC JUMP JUMPDEST SWAP1 PUSH2 0x145E JUMP JUMPDEST SWAP1 POP PUSH2 0x1518 DUP2 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x1 DUP7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1589 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1646 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x455 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x1675 PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0x1689 SWAP2 PUSH2 0x145E JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x7 DUP9 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x8 DUP12 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP9 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP12 ADD MLOAD SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 MLOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP11 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x1A0 DUP10 ADD MLOAD SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x1E0 DUP10 ADD MLOAD DUP2 AND PUSH2 0x100 DUP6 ADD MSTORE SWAP2 MLOAD PUSH32 0xA589870900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0xA5898709 SWAP2 PUSH2 0x17EA SWAP2 SWAP1 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE 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 PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 SWAP2 POP DUP1 DUP3 DUP7 ADD MLOAD AND DUP3 DUP6 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1807 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x182B SWAP2 SWAP1 PUSH2 0x2A7C JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP1 DUP3 MSTORE PUSH2 0x1841 SWAP1 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x1 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x1884 SWAP1 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x3 DUP8 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x18D5 SWAP1 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x2 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH2 0x100 DUP11 ADD MLOAD PUSH2 0x140 DUP12 ADD MLOAD DUP4 MLOAD SWAP7 DUP8 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0x804C9B842B2748A22BB64B345453A3DE7CA54A6CA45CE00D415894979E22897A SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x19F6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1A00 DUP6 PUSH2 0x1D28 JUMP JUMPDEST PUSH2 0x1A66 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x455 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD ISZERO PUSH2 0x1AFD JUMPI PUSH1 0x0 PUSH2 0x1A8E DUP3 PUSH2 0x160 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x1DF4 JUMP JUMPDEST SWAP1 POP PUSH2 0x1AA7 DUP3 PUSH1 0xE0 ADD MLOAD DUP3 PUSH2 0x145E SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x100 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x1AB8 SWAP1 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x1 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1B8A JUMPI PUSH1 0x0 PUSH2 0x1B1A DUP3 PUSH2 0x180 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x1E39 JUMP JUMPDEST SWAP1 POP PUSH2 0x1B34 DUP3 PUSH2 0x120 ADD MLOAD DUP3 PUSH2 0x145E SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x140 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x1B45 SWAP1 PUSH2 0x15A4 JUMP JUMPDEST PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x1BC7 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x1A0 DUP3 ADD MLOAD PUSH2 0x1BD6 JUMPI POP POP POP JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x1BE7 SWAP2 PUSH2 0x145E JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x140 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x1BFD SWAP2 PUSH2 0x145E JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x260 DUP4 ADD MLOAD PUSH2 0x240 DUP5 ADD MLOAD PUSH2 0x1C25 SWAP3 SWAP2 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x1E42 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x1C3A SWAP2 PUSH2 0x145E JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x1C56 SWAP2 SWAP1 PUSH2 0x29CC JUMP JUMPDEST PUSH2 0x1C60 SWAP2 SWAP1 PUSH2 0x29B5 JUMP JUMPDEST PUSH2 0x1C6A SWAP2 SWAP1 PUSH2 0x29B5 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP4 ADD MLOAD PUSH2 0x1C81 SWAP2 SWAP1 PUSH2 0xCD9 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE ISZERO PUSH2 0x11B5 JUMPI PUSH2 0x1CAC PUSH2 0xE46 DUP4 PUSH2 0x100 ADD MLOAD DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0x1565 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x8 DUP5 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x1CD2 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x29FD JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST PUSH4 0x3B9ACA00 DUP2 DUP2 MUL SWAP1 DUP2 DIV DUP3 EQ PUSH2 0x1D23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D68 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x1DA7 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x1DE1 JUMPI PUSH2 0x1DA2 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x1D2F JUMP JUMPDEST PUSH2 0x1DEE JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x1DD8 JUMPI PUSH2 0x1DD8 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x1D2F JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x1DEE JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1E08 PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x29B5 JUMP JUMPDEST PUSH2 0x1E12 SWAP1 DUP6 PUSH2 0x2AAA JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x1E31 DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x29CC JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x155E DUP4 DUP4 TIMESTAMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1E56 PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x29B5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1E72 JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x155E JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x1EA8 JUMPI PUSH1 0x0 PUSH2 0x1EAD JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x1EC1 DUP11 DUP1 PUSH2 0x145E JUMP JUMPDEST DUP2 PUSH2 0x1ECE JUMPI PUSH2 0x1ECE PUSH2 0x2AE7 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x1EE0 DUP4 DUP12 PUSH2 0x145E JUMP JUMPDEST DUP2 PUSH2 0x1EED JUMPI PUSH2 0x1EED PUSH2 0x2AE7 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x1EFD DUP7 DUP9 PUSH2 0x2AAA JUMP JUMPDEST PUSH2 0x1F07 SWAP2 SWAP1 PUSH2 0x2AAA JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x1F1B DUP9 DUP11 PUSH2 0x2AAA JUMP JUMPDEST PUSH2 0x1F25 SWAP2 SWAP1 PUSH2 0x2AAA JUMP JUMPDEST PUSH2 0x1F2F SWAP2 SWAP1 PUSH2 0x2AAA JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x1F46 DUP11 DUP16 PUSH2 0x2AAA JUMP JUMPDEST PUSH2 0x1F50 SWAP2 SWAP1 PUSH2 0x2B16 JUMP JUMPDEST PUSH2 0x1F66 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x29CC JUMP JUMPDEST PUSH2 0x1F70 SWAP2 SWAP1 PUSH2 0x29CC JUMP JUMPDEST PUSH2 0x1F7A SWAP2 SWAP1 PUSH2 0x29CC JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x280 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x200D PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2089 JUMPI PUSH2 0x2089 PUSH2 0x2036 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xE0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2089 JUMPI PUSH2 0x2089 PUSH2 0x2036 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x20F9 JUMPI PUSH2 0x20F9 PUSH2 0x2036 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1D23 DUP2 PUSH2 0x2101 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x214B JUMPI PUSH2 0x214B PUSH2 0x2036 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2166 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x217B PUSH2 0x2176 DUP4 PUSH2 0x2131 JUMP JUMPDEST PUSH2 0x20B2 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP7 DUP5 GT ISZERO PUSH2 0x219A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP7 ADD JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x21BE JUMPI DUP1 CALLDATALOAD PUSH2 0x21B1 DUP2 PUSH2 0x2101 JUMP JUMPDEST DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x219E JUMP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x21DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x20 PUSH2 0x21EA PUSH2 0x2176 DUP4 PUSH2 0x2131 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP5 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP7 DUP5 GT ISZERO PUSH2 0x2209 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP7 ADD JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x21BE JUMPI DUP1 CALLDATALOAD DUP4 MSTORE SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x220D JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2235 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x224F JUMPI PUSH2 0x224F PUSH2 0x2036 JUMP JUMPDEST PUSH2 0x2280 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x20B2 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x2295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP6 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD PUSH1 0x20 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x1D23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1D23 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x2123 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1D23 DUP2 PUSH2 0x22D5 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x2306 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x233A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP8 ADD SWAP1 PUSH2 0x1C0 DUP3 DUP11 SUB SLT ISZERO PUSH2 0x234F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2357 PUSH2 0x2065 JUMP JUMPDEST PUSH2 0x2360 DUP4 PUSH2 0x2126 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x2374 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2380 DUP12 DUP3 DUP7 ADD PUSH2 0x2155 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH1 0x40 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x2398 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x23A4 DUP12 DUP3 DUP7 ADD PUSH2 0x21C9 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x23BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x23C8 DUP12 DUP3 DUP7 ADD PUSH2 0x21C9 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH2 0x23DA PUSH1 0x80 DUP5 ADD PUSH2 0x2126 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x23F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x23FD DUP12 DUP3 DUP7 ADD PUSH2 0x2224 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH2 0x240F PUSH1 0xC0 DUP5 ADD PUSH2 0x22B2 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xE0 DUP4 DUP2 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x100 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x120 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x140 DUP1 DUP5 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x160 SWAP2 POP PUSH2 0x244F DUP3 DUP5 ADD PUSH2 0x2126 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH2 0x180 SWAP2 POP PUSH2 0x2463 DUP3 DUP5 ADD PUSH2 0x22C4 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH2 0x1A0 SWAP2 POP PUSH2 0x2477 DUP3 DUP5 ADD PUSH2 0x22E3 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE DUP1 SWAP4 POP POP POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x249E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x24BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP5 ADD SWAP1 PUSH1 0xE0 DUP3 DUP8 SUB SLT ISZERO PUSH2 0x24D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x24D9 PUSH2 0x208F JUMP JUMPDEST PUSH2 0x24E2 DUP4 PUSH2 0x2126 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x24F0 PUSH1 0x20 DUP5 ADD PUSH2 0x2126 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x2511 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x251D DUP9 DUP3 DUP7 ADD PUSH2 0x2224 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH2 0x252F PUSH1 0x80 DUP5 ADD PUSH2 0x22B2 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP4 ADD CALLDATALOAD PUSH1 0xC0 DUP3 ADD MSTORE DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x2614 JUMPI PUSH2 0x2614 PUSH2 0x25B3 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x264B JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x262F JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x267C JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x2660 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x268E JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xA0 DUP1 DUP3 MSTORE DUP7 MLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0xC0 DUP5 ADD SWAP1 DUP3 DUP11 ADD DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2710 JUMPI DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x26DE JUMP JUMPDEST POP POP POP DUP4 DUP2 SUB DUP3 DUP6 ADD MSTORE PUSH2 0x2724 DUP2 DUP10 PUSH2 0x261B JUMP JUMPDEST SWAP2 POP POP DUP3 DUP2 SUB PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x2739 DUP2 DUP8 PUSH2 0x261B JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x60 DUP5 ADD MSTORE DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x2769 DUP2 DUP6 PUSH2 0x2656 JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2787 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x155E DUP2 PUSH2 0x22D5 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x155E PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2656 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x27B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x155E DUP2 PUSH2 0x2101 JUMP JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x27F9 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x200 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x2899 DUP2 DUP6 ADD DUP4 PUSH2 0x27C2 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x120 PUSH2 0x28B2 DUP2 DUP7 ADD DUP5 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xC0 DUP7 ADD MLOAD SWAP3 POP PUSH2 0x140 PUSH2 0x28C9 DUP2 DUP8 ADD DUP6 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MLOAD PUSH2 0x160 DUP8 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP8 ADD MLOAD PUSH2 0x180 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1A0 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x1C0 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x21BE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD PUSH2 0x2956 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x27C2 JUMP JUMPDEST DUP3 PUSH1 0x60 DUP4 ADD MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND DUP4 MSTORE DUP7 PUSH1 0x20 DUP5 ADD MSTORE DUP6 PUSH1 0x40 DUP5 ADD MSTORE DUP1 DUP6 AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0xA0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x29AA PUSH1 0xA0 DUP4 ADD DUP5 PUSH2 0x2656 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x29C7 JUMPI PUSH2 0x29C7 PUSH2 0x25B3 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x29DF JUMPI PUSH2 0x29DF PUSH2 0x25B3 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x29F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x2A28 JUMPI PUSH2 0x2A28 PUSH2 0x25B3 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2A47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2A71 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2A91 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2AE2 JUMPI PUSH2 0x2AE2 PUSH2 0x25B3 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2B4C JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC7 SLOAD ADDRESS MSTORE8 CALLDATACOPY PUSH2 0x2F54 ISZERO 0xC3 PUSH17 0xB6D17C38E594B32B1B1F6322D97AF0B262 0xF6 MLOAD 0xEB 0x24 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"1270:9574:80:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3037:4017;;;;;;;;;;-1:-1:-1;3037:4017:80;;;;;:::i;:::-;;:::i;:::-;;7731:1375;;;;;;;;;;-1:-1:-1;7731:1375:80;;;;;:::i;:::-;;:::i;3037:4017::-;3699:78;3733:12;3747:6;:13;;;3762:6;:14;;;3699:33;:78::i;:::-;3784:30;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3784:30:80;3856:6;:13;;;:20;3842:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3842:35:80;-1:-1:-1;3821:18:80;;;:56;3919:22;;3884:58;;;;4012:32;;;;:121;;4069:6;:28;;;4099:6;:33;;;4012:121;;;4054:1;4057;4012:121;3977:31;;;3948:185;3949:26;;;3948:185;-1:-1:-1;;4145:6:80;;:10;4140:491;4166:6;:13;;;:20;4157:4;:6;;;:29;4140:491;;;4227:6;:14;;;4242:4;:6;;;4227:22;;;;;;;;:::i;:::-;;;;;;;;;;;4206:18;;;:43;4358:31;4313:6;:24;;;4338:4;:6;;;4313:32;;;;;;;;:::i;:::-;;;;;;;4286:60;;;;;;;;:::i;:::-;:103;;;;;;;;:::i;:::-;;:183;;4468:1;4286:183;;;4430:26;;;;4400:18;;;;:57;;:29;:57::i;:::-;4257:4;:18;;;4276:4;:6;;;4257:26;;;;;;;;:::i;:::-;;;;;;:212;;;;;4485:12;:35;4498:6;:13;;;4512:4;:6;;;4498:21;;;;;;;;:::i;:::-;;;;;;;;;;;;4485:35;;;;;;;;;;;;;;;;;-1:-1:-1;4485:35:80;:49;;;;;4566:22;;4598:18;;;;4477:147;;;;;8299:55:201;;;4477:147:80;;;8281:74:201;;;;8371:18;;;8364:34;;;;4485:49:80;;;4477:79;;8254:18:201;;4477:147:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4188:6:80;;;:8;;;-1:-1:-1;4188:8:80;;;:::i;:::-;;;-1:-1:-1;4140:491:80;;;4652:4;:13;;;:30;;;4692:6;:13;;;4715:6;:14;;;4739:4;:18;;;4767:10;4787:6;:13;;;4652:156;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4816:40;;;;;;;;;;;;;;;;;4637:225;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;4883:1:80;4874:6;;;:10;4869:2181;4895:6;:13;;;:20;4886:4;:6;;;:29;4869:2181;;;4955:6;:13;;;4969:4;:6;;;4955:21;;;;;;;;:::i;:::-;;;;;;;4935:4;:17;;:41;;;;;;;;;;;5005:6;:14;;;5020:4;:6;;;5005:22;;;;;;;;:::i;:::-;;;;;;;;;;;4984:18;;;:43;5121:31;5076:6;:24;;;5101:4;:6;;;5076:32;;;;;;;;:::i;:::-;;;;;;;5049:60;;;;;;;;:::i;:::-;:103;;;;;;;;:::i;:::-;;5036:2008;;;5171:443;5208:12;:31;5221:4;:17;;;5208:31;;;;;;;;;;;;;;;5251:353;;;;;;;;5399:4;:18;;;5251:353;;;;5445:4;:18;;;5464:4;:6;;;5445:26;;;;;;;;:::i;:::-;;;;;;;5251:353;;;;5513:4;:31;;;5251:353;;;;5307:4;:17;;;5251:353;;;;;;5355:6;:22;;;5251:353;;;;;;5572:6;:19;;;5251:353;;;;;5171:25;:443::i;:::-;5036:2008;;;5789:11;:25;5826:12;5850;5874:15;5901:10;5923:770;;;;;;;;5974:4;:17;;;5923:770;;;;;;6011:10;5923:770;;;;;;6047:6;:17;;;5923:770;;;;;;6086:4;:18;;;5923:770;;;;6163:6;:24;;;6188:4;:6;;;6163:32;;;;;;;;:::i;:::-;;;;;;;6136:60;;;;;;;;:::i;:::-;5923:770;;;;;;;;:::i;:::-;;;;;6224:6;:19;;;5923:770;;;;;;6276:5;5923:770;;;;;;6327:6;:37;;;5923:770;;;;6393:6;:20;;;5923:770;;;;6458:6;:24;;;6435:63;;;:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5923:770;;;;;;6533:6;:24;;;5923:770;;;;;;6615:6;:24;;;6592:86;;;:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5923:770;;;;;5789:914;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7006:6;:19;;;6785:250;;6862:4;:17;;;6785:250;;6806:6;:22;;;6785:250;;;6840:10;6891:4;:18;;;6948:6;:24;;;6973:4;:6;;;6948:32;;;;;;;;:::i;:::-;;;;;;;6921:60;;;;;;;;:::i;:::-;6993:1;6785:250;;;;;;;;;:::i;:::-;;;;;;;;5036:2008;4917:6;;;:8;;;;;;:::i;:::-;;;-1:-1:-1;4869:2181:80;;;3369:3685;3037:4017;;;;;:::o;7731:1375::-;8200:48;8240:7;8200:39;:48::i;:::-;8316:22;;8393:28;;;;8368:13;;;;8255:33;;8368:54;;:13;:24;:54::i;:::-;8436:21;;;;;8480:22;;8504:13;;;;;8428:90;;;;;8345:77;;-1:-1:-1;8436:21:80;;;;;8428:51;;:90;;8504:13;8428:90;8311:42:201;8299:55;;;;8281:74;;8386:2;8371:18;;8364:34;8269:2;8254:18;;8107:297;8428:90:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;8575:12:80;;;;8597:13;;;;;8662;;;;8540:143;;;;;:25;;;;;;:143;;8575:12;;8620;;8642:10;;8540:143;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8691:40;;;;;;;;;;;;;;;;;8525:212;;;;;;;;;;;;;;:::i;:::-;;8744:357;8777:7;8792:303;;;;;;;;8923:6;:13;;;8792:303;;;;8960:12;8792:303;;;;9010:6;:33;;;8792:303;;;;8844:6;:12;;;8792:303;;;;;;8883:6;:22;;;8792:303;;;;;;9067:6;:19;;;8792:303;;;;;8744:25;:357::i;:::-;7870:1236;;7731:1375;;:::o;17898:373:87:-;18101:7;:14;18084:6;:13;:31;18117:36;;;;;;;;;;;;;;;;;18076:78;;;;;;;;;;;;;;:::i;:::-;;18165:9;18160:107;18184:6;:13;18180:1;:17;18160:107;;;18212:48;18236:12;:23;18249:6;18256:1;18249:9;;;;;;;;:::i;:::-;;;;;;;18236:23;;;;;;;;;;;;;;;18212;:48::i;:::-;18199:3;;;;:::i;:::-;;;;18160:107;;1005:496:89;1083:14;1248:18;;1299:35;1295:52;;;1285:63;;1278:71;1234:125;1215:183;;1388:1;1385;1378:12;1215:183;-1:-1:-1;1473:17:89;1424:22;;1448;1420:51;1416:75;;1005:496::o;9415:1427:80:-;9566:25;9594:65;9625:6;:33;;;9594:6;:19;;;:30;;:65;;;;:::i;:::-;9566:93;;9665:19;9709:17;9687:6;:19;;;:39;;;;:::i;:::-;9665:61;;9732:25;9776:6;:19;;;9760:6;:13;;;:35;;;;:::i;:::-;9732:63;;9802:42;9847:15;:7;:13;:15::i;:::-;9802:60;-1:-1:-1;9868:33:80;:7;9802:60;9868:19;:33::i;:::-;10082:31;;;;10048:25;;;;9941:198;;10040:74;;10048:25;;;10040:41;:74::i;:::-;9988:12;:26;;;9981:46;;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:133;;;;:::i;:::-;9941:7;;10122:11;9941:32;:198::i;:::-;9907:31;;;:232;;;10175:83;;:64;;:17;;:31;:64::i;:::-;:81;:83::i;:::-;10146:25;;;:112;;:25;;:112;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10265:77;10293:12;10307:6;:12;;;10321:17;10340:1;10265:7;:27;;:77;;;;;;;:::i;:::-;10394:22;;;;10424:26;;;;10356:12;;;;10349:132;;:37;;;;;10458:17;10349:37;:132::i;:::-;10496:26;;;;10547:22;;;;10488:142;;;;;:51;16475:15:201;;;10488:142:80;;;16457:34:201;;;16507:18;;;16500:43;16559:18;;;16552:34;;;10488:51:80;;;;;16369:18:201;;10488:142:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10812:6;:19;;;10642:195;;10707:6;:12;;;10642:195;;10659:6;:22;;;10642:195;;;10689:10;10727:6;:13;;;10775:1;10748:29;;;;;;;;:::i;:::-;10785:6;:19;;;10642:195;;;;;;;;;:::i;:::-;;;;;;;;9560:1282;;;;9415:1427;;:::o;18375:381:87:-;18467:78;;;;;;;;;;;;;;10339:12:72;10327:24;10326:31;;18559:26:87;18587:21;;;;;;;;;;;;;;;;;18551:58;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;9045:9:72;;9057:12;9045:24;9044:31;;18650:23:87;;;;;;;;;;;;;;;;;18615:59;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;21149:9:72;;21161:23;21149:35;21148:42;;18725:25:87;;;;;;;;;;;;;;;;;18680:71;;;;;;;;;;;;;;:::i;:::-;;18461:295;18375:381;:::o;12460:1739:85:-;12545:29;;:::i;:::-;12582:42;;:::i;:::-;12631:57;;;;;;;;;;;;:33;;;:57;;;15238:9:72;15237:71;;;;12694:26:85;;;:81;12849:22;;;;;;;;;12815:31;;:56;;;12781:31;;;:90;12955:34;;;;;;;12916:36;;;:73;;;12877:36;;;:112;13028:28;;;;;;;12995:30;;;:61;13100:33;;;;13062:35;;;:71;13169:21;;;;;;;;;13140:26;;;:50;13234:30;;;;;;13196:35;;;:68;13310:32;;;;;13270:37;;;:72;;;13391:27;;;;;;;;;;13349:39;;;:69;-1:-1:-1;13501:89:85;;;;;;;:87;;:89;;;;-1:-1:-1;;13501:89:85;;;;;;;13310:32;13501:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13463:12;:35;;:127;;;;13425:12;:35;;:165;;;;;13801:12;:35;;;13784:67;;;:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13597:256;;13733:42;;;13597:256;13689:36;;;13597:256;;;13649:32;;;13597:256;;;13605:36;;;13597:256;;;;14020:32;;;:67;14093:36;;;:75;13605:12;12460:1739;-1:-1:-1;;12460:1739:85:o;3556:502::-;3796:27;;;;3834:15;3796:54;;;;:27;;;;;:54;3792:81;;;3556:502;;:::o;3792:81::-;3879:37;3894:7;3903:12;3879:14;:37::i;:::-;3922:40;3940:7;3949:12;3922:17;:40::i;:::-;-1:-1:-1;4000:27:85;;:53;;;;;4037:15;4000:53;;;;;;3556:502::o;2253:319:90:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:90;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;4496:534:85:-;4929:22;;;;4643:7;;;;4844:113;;4929:22;;704:4:90;4845:51:85;4870:25;:14;:23;:25::i;:::-;4845:17;:6;:15;:17::i;:::-;:24;;:51::i;:::-;:68;;;;:::i;:::-;4844:77;;:113::i;:::-;4827:130;;4988:18;:6;:16;:18::i;:::-;4963:22;;;:43;;;;;;;;;;;;;;;5019:6;-1:-1:-1;4496:534:85;;;;;;:::o;2840:322:90:-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:90;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;17761:2:201;1635:78:12;;;17743:21:201;17800:2;17780:18;;;17773:30;17839:34;17819:18;;;17812:62;17910:9;17890:18;;;17883:37;17937:19;;1635:78:12;17559:403:201;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;6827:1514:85:-;7050:40;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7050:40:85;7172:36;;;;7122:35;;;;:92;;:42;:92::i;:::-;7097:22;;;;:117;;;7345:35;;;;7412:473;;;;;;;;7471:16;;;;;;;;;;7412:473;;-1:-1:-1;7412:473:85;;;;;;;;;;;7594:32;;;;;7412:473;;;;;;;7655:22;;7412:473;;;;;7712:36;;;;7412:473;;;;7773:26;;;;7412:473;;;;;;;7345:35;7412:473;;;-1:-1:-1;7412:473:85;;;7850:26;;;;7412:473;;7345:35;7412:473;;;7316:575;;;;;7345:35;;;7316:88;;:575;;7412:473;7316:575;;18153:4:201;18195:3;18184:9;18180:19;18172:27;;18232:6;18226:13;18215:9;18208:32;18296:4;18288:6;18284:17;18278:24;18271:4;18260:9;18256:20;18249:54;18359:4;18351:6;18347:17;18341:24;18334:4;18323:9;18319:20;18312:54;18422:4;18414:6;18410:17;18404:24;18397:4;18386:9;18382:20;18375:54;18485:4;18477:6;18473:17;18467:24;18460:4;18449:9;18445:20;18438:54;18548:4;18540:6;18536:17;18530:24;18523:4;18512:9;18508:20;18501:54;18611:4;18603:6;18599:17;18593:24;18586:4;18575:9;18571:20;18564:54;18665:4;18657:6;18653:17;18647:24;18690:42;18788:2;18774:12;18770:21;18763:4;18752:9;18748:20;18741:51;18811:6;18801:16;;18881:2;18875;18867:6;18863:15;18857:22;18853:31;18848:2;18837:9;18833:18;18826:59;;;17967:924;;;;;7316:575:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7286:21;;;7221:670;7259:19;;;7221:670;;;;7929:34;;:32;:34::i;:::-;7898:28;;;:65;;;;;;;;;;;;;;;;8003:19;;;;:31;;:29;:31::i;:::-;7969;;;:65;;;;;;;;;;;;;;;8076:21;;;;:33;;:31;:33::i;:::-;8040;;;:69;;;;;;;;;;;;;;;;8169:22;;8199:19;;;;;8226:21;;;;;8040:69;8255:31;;;8294:36;;;;8121:215;;19466:25:201;;;19507:18;;;19500:34;;;;19550:18;;;19543:34;19608:2;19593:18;;19586:34;19651:3;19636:19;;19629:35;8121:215:85;;;;;;19453:3:201;19438:19;8121:215:85;;;;;;;7044:1297;6827:1514;;;;;:::o;1228:780:1:-;1477:4;1471:11;1343:27;1489:36;;;1576:42;1566:53;;;1562:1;1539:25;;1532:88;1662:51;;1657:2;1634:26;;1627:87;1751:2;1728:26;;1721:41;;;1343:27;1324:16;;1821:3;1471:11;1324:16;1792:5;1785;1780:51;1770:155;;1864:16;1861:1;1858;1843:38;1900:16;1897:1;1890:27;1770:155;;1945:28;1967:5;1945:21;:28::i;:::-;1937:66;;;;;;;19877:2:201;1937:66:1;;;19859:21:201;19916:2;19896:18;;;19889:30;19955:27;19935:18;;;19928:55;20000:18;;1937:66:1;19675:349:201;1937:66:1;1318:690;1228:780;;;;:::o;10657:1542:85:-;11008:30;;;;:35;11004:423;;11053:34;11090:130;11133:12;:30;;;11173:12;:39;;;11090:33;:130::i;:::-;11053:167;;11262:82;11305:12;:31;;;11262:26;:33;;:82;;;;:::i;:::-;11228:31;;;:116;;;11377:43;;:41;:43::i;:::-;11352:22;;;:68;;;;;;;;;;;;;;;-1:-1:-1;11004:423:85;11732:35;;:40;11728:467;;11782:39;11824:139;11871:12;:35;;;11916:12;:39;;;11824:37;:139::i;:::-;11782:181;;12010:92;12058:12;:36;;;12010:31;:38;;:92;;;;:::i;:::-;11971:36;;;:131;;;12140:48;;:46;:48::i;:::-;12110:27;;;:78;;;;;;;;;;;;;;;-1:-1:-1;11728:467:85;10657:1542;;:::o;8841:1598::-;8978:37;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8978:37:85;9026:26;;;;9022:58;;9067:7;8841:1598;;:::o;9022:58::-;9239:36;;;;9189:35;;:92;;:42;:92::i;:::-;9160:26;;;:121;9459:36;;;;9409:35;;:92;;:42;:92::i;:::-;9380:26;;;:121;9648:36;;;;9692:42;;;;9742:39;;;;9603:184;;9648:36;9692:42;9603:184;;:37;:184::i;:::-;9572:28;;;:215;;;9821:36;;;;:85;;:43;:85::i;:::-;9794:112;;;10114:26;;;;10073:32;;;;10038:26;;;;:67;;10073:32;10038:67;:::i;:::-;:102;;;;:::i;:::-;:135;;;;:::i;:::-;10008:21;;;:165;;;10233:26;;;;10200:60;;10008:165;10200:32;:60::i;:::-;10180:17;;;:80;;;10271:22;10267:168;;10332:96;:75;10375:12;:31;;;10332:4;:26;;;:42;;:75;;;;:::i;:96::-;10303:25;;;:125;;:25;;:125;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8972:1467;8841:1598;;:::o;3901:247:90:-;4046:13;4039:21;;;;4081;;4078:28;;4068:70;;4128:1;4125;4118:12;4068:70;3901:247;;;:::o;2198:2524:1:-;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;4611:1;4605:8;4598:16;4591:24;4580:35;;3538:1174;;2198:2524;;;:::o;700:334:88:-;810:7;;881:46;899:28;;;881:15;:46;:::i;:::-;873:55;;:4;:55;:::i;:::-;376:8;961:25;;;-1:-1:-1;1006:23:88;961:25;704:4:90;1006:23:88;:::i;:::-;999:30;700:334;-1:-1:-1;;;;700:334:88:o;3142:212::-;3256:7;3278:71;3306:4;3312:19;3333:15;1780:972;1924:7;;1984:47;2003:28;;;1984:16;:47;:::i;:::-;1970:61;-1:-1:-1;2042:8:88;2038:50;;704:4:90;2060:21:88;;;;;2038:50;2230:7;;;2094:19;;;2266:1;2260:7;;:21;;2280:1;2260:21;;;2276:1;2270:3;:7;2260:21;2246:35;-1:-1:-1;2326:35:88;2305:17;2317:4;;2305:11;:17::i;:::-;:57;;;;;:::i;:::-;;;-1:-1:-1;376:8:88;2387:25;2305:57;2407:4;2387:19;:25::i;:::-;:44;;;;;:::i;:::-;;;-1:-1:-1;2444:18:88;2485:12;2465:17;2471:11;2465:3;:17;:::i;:::-;:32;;;;:::i;:::-;2535:1;2521:15;;;-1:-1:-1;2548:17:88;2602:14;2588:11;2568:17;2574:11;2568:3;:17;:::i;:::-;:31;;;;:::i;:::-;:48;;;;:::i;:::-;2653:1;2640:14;;;-1:-1:-1;2640:14:88;2725:10;376:8;2692:10;2699:3;2692:4;:10;:::i;:::-;2691:31;;;;:::i;:::-;2674:48;;704:4:90;2674:48:88;:::i;:::-;:61;;;;:::i;:::-;:73;;;;:::i;:::-;2667:80;1780:972;-1:-1:-1;;;;;;;;;;;1780:972:88:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:184:201:-;66:77;63:1;56:88;163:4;160:1;153:15;187:4;184:1;177:15;203:255;275:2;269:9;317:6;305:19;;354:18;339:34;;375:22;;;336:62;333:88;;;401:18;;:::i;:::-;437:2;430:22;203:255;:::o;463:253::-;535:2;529:9;577:4;565:17;;612:18;597:34;;633:22;;;594:62;591:88;;;659:18;;:::i;721:334::-;792:2;786:9;848:2;838:13;;853:66;834:86;822:99;;951:18;936:34;;972:22;;;933:62;930:88;;;998:18;;:::i;:::-;1034:2;1027:22;721:334;;-1:-1:-1;721:334:201:o;1060:154::-;1146:42;1139:5;1135:54;1128:5;1125:65;1115:93;;1204:1;1201;1194:12;1115:93;1060:154;:::o;1219:134::-;1287:20;;1316:31;1287:20;1316:31;:::i;1358:183::-;1418:4;1451:18;1443:6;1440:30;1437:56;;;1473:18;;:::i;:::-;-1:-1:-1;1518:1:201;1514:14;1530:4;1510:25;;1358:183::o;1546:737::-;1600:5;1653:3;1646:4;1638:6;1634:17;1630:27;1620:55;;1671:1;1668;1661:12;1620:55;1707:6;1694:20;1733:4;1757:60;1773:43;1813:2;1773:43;:::i;:::-;1757:60;:::i;:::-;1851:15;;;1937:1;1933:10;;;;1921:23;;1917:32;;;1882:12;;;;1961:15;;;1958:35;;;1989:1;1986;1979:12;1958:35;2025:2;2017:6;2013:15;2037:217;2053:6;2048:3;2045:15;2037:217;;;2133:3;2120:17;2150:31;2175:5;2150:31;:::i;:::-;2194:18;;2232:12;;;;2070;;2037:217;;;-1:-1:-1;2272:5:201;1546:737;-1:-1:-1;;;;;;1546:737:201:o;2288:662::-;2342:5;2395:3;2388:4;2380:6;2376:17;2372:27;2362:55;;2413:1;2410;2403:12;2362:55;2449:6;2436:20;2475:4;2499:60;2515:43;2555:2;2515:43;:::i;2499:60::-;2593:15;;;2679:1;2675:10;;;;2663:23;;2659:32;;;2624:12;;;;2703:15;;;2700:35;;;2731:1;2728;2721:12;2700:35;2767:2;2759:6;2755:15;2779:142;2795:6;2790:3;2787:15;2779:142;;;2861:17;;2849:30;;2899:12;;;;2812;;2779:142;;2955:589;2997:5;3050:3;3043:4;3035:6;3031:17;3027:27;3017:55;;3068:1;3065;3058:12;3017:55;3104:6;3091:20;3130:18;3126:2;3123:26;3120:52;;;3152:18;;:::i;:::-;3196:114;3304:4;3235:66;3228:4;3224:2;3220:13;3216:86;3212:97;3196:114;:::i;:::-;3335:2;3326:7;3319:19;3381:3;3374:4;3369:2;3361:6;3357:15;3353:26;3350:35;3347:55;;;3398:1;3395;3388:12;3347:55;3463:2;3456:4;3448:6;3444:17;3437:4;3428:7;3424:18;3411:55;3511:1;3486:16;;;3504:4;3482:27;3475:38;;;;3490:7;2955:589;-1:-1:-1;;;2955:589:201:o;3549:159::-;3616:20;;3676:6;3665:18;;3655:29;;3645:57;;3698:1;3695;3688:12;3713:156;3779:20;;3839:4;3828:16;;3818:27;;3808:55;;3859:1;3856;3849:12;3874:118;3960:5;3953:13;3946:21;3939:5;3936:32;3926:60;;3982:1;3979;3972:12;3997:128;4062:20;;4091:28;4062:20;4091:28;:::i;4130:2364::-;4428:6;4436;4444;4452;4460;4513:3;4501:9;4492:7;4488:23;4484:33;4481:53;;;4530:1;4527;4520:12;4481:53;4566:9;4553:23;4543:33;;4623:2;4612:9;4608:18;4595:32;4585:42;;4674:2;4663:9;4659:18;4646:32;4636:42;;4725:2;4714:9;4710:18;4697:32;4687:42;;4780:3;4769:9;4765:19;4752:33;4804:18;4845:2;4837:6;4834:14;4831:34;;;4861:1;4858;4851:12;4831:34;4884:22;;;;4940:6;4922:16;;;4918:29;4915:49;;;4960:1;4957;4950:12;4915:49;4986:22;;:::i;:::-;5031;5050:2;5031:22;:::i;:::-;5024:5;5017:37;5100:2;5096;5092:11;5079:25;5129:2;5119:8;5116:16;5113:36;;;5145:1;5142;5135:12;5113:36;5181:56;5229:7;5218:8;5214:2;5210:17;5181:56;:::i;:::-;5176:2;5169:5;5165:14;5158:80;;5284:2;5280;5276:11;5263:25;5313:2;5303:8;5300:16;5297:36;;;5329:1;5326;5319:12;5297:36;5365:56;5413:7;5402:8;5398:2;5394:17;5365:56;:::i;:::-;5360:2;5353:5;5349:14;5342:80;;5468:2;5464;5460:11;5447:25;5497:2;5487:8;5484:16;5481:36;;;5513:1;5510;5503:12;5481:36;5549:56;5597:7;5586:8;5582:2;5578:17;5549:56;:::i;:::-;5544:2;5537:5;5533:14;5526:80;;5639:32;5666:3;5662:2;5658:12;5639:32;:::i;:::-;5633:3;5626:5;5622:15;5615:57;5718:3;5714:2;5710:12;5697:26;5748:2;5738:8;5735:16;5732:36;;;5764:1;5761;5754:12;5732:36;5801:44;5837:7;5826:8;5822:2;5818:17;5801:44;:::i;:::-;5795:3;5788:5;5784:15;5777:69;;5879:31;5905:3;5901:2;5897:12;5879:31;:::i;:::-;5873:3;5862:15;;5855:56;5965:3;5957:12;;;5944:26;5927:15;;;5920:51;5990:3;6038:11;;;6025:25;6009:14;;;6002:49;6070:3;6118:11;;;6105:25;6089:14;;;6082:49;6150:3;6198:11;;;6185:25;6169:14;;;6162:49;6230:3;;-1:-1:-1;6265:31:201;6284:11;;;6265:31;:::i;:::-;6260:2;6253:5;6249:14;6242:55;6316:3;6306:13;;6351:29;6376:2;6372;6368:11;6351:29;:::i;:::-;6346:2;6339:5;6335:14;6328:53;6400:3;6390:13;;6435:28;6459:2;6455;6451:11;6435:28;:::i;:::-;6430:2;6423:5;6419:14;6412:52;6483:5;6473:15;;;;;4130:2364;;;;;;;;:::o;6499:1093::-;6638:6;6646;6699:2;6687:9;6678:7;6674:23;6670:32;6667:52;;;6715:1;6712;6705:12;6667:52;6751:9;6738:23;6728:33;;6812:2;6801:9;6797:18;6784:32;6835:18;6876:2;6868:6;6865:14;6862:34;;;6892:1;6889;6882:12;6862:34;6915:22;;;;6971:4;6953:16;;;6949:27;6946:47;;;6989:1;6986;6979:12;6946:47;7015:22;;:::i;:::-;7060;7079:2;7060:22;:::i;:::-;7053:5;7046:37;7115:31;7142:2;7138;7134:11;7115:31;:::i;:::-;7110:2;7103:5;7099:14;7092:55;7200:2;7196;7192:11;7179:25;7174:2;7167:5;7163:14;7156:49;7251:2;7247;7243:11;7230:25;7280:2;7270:8;7267:16;7264:36;;;7296:1;7293;7286:12;7264:36;7332:44;7368:7;7357:8;7353:2;7349:17;7332:44;:::i;:::-;7327:2;7320:5;7316:14;7309:68;;7410:31;7436:3;7432:2;7428:12;7410:31;:::i;:::-;7404:3;7397:5;7393:15;7386:56;7496:3;7492:2;7488:12;7475:26;7469:3;7462:5;7458:15;7451:51;7556:3;7552:2;7548:12;7535:26;7529:3;7522:5;7518:15;7511:51;7581:5;7571:15;;;;;6499:1093;;;;;:::o;7597:184::-;7649:77;7646:1;7639:88;7746:4;7743:1;7736:15;7770:4;7767:1;7760:15;7786:184;7838:77;7835:1;7828:88;7935:4;7932:1;7925:15;7959:4;7956:1;7949:15;8409:184;8461:77;8458:1;8451:88;8558:4;8555:1;8548:15;8582:4;8579:1;8572:15;8598:195;8637:3;8668:66;8661:5;8658:77;8655:103;;;8738:18;;:::i;:::-;-1:-1:-1;8785:1:201;8774:13;;8598:195::o;8798:435::-;8851:3;8889:5;8883:12;8916:6;8911:3;8904:19;8942:4;8971:2;8966:3;8962:12;8955:19;;9008:2;9001:5;8997:14;9029:1;9039:169;9053:6;9050:1;9047:13;9039:169;;;9114:13;;9102:26;;9148:12;;;;9183:15;;;;9075:1;9068:9;9039:169;;;-1:-1:-1;9224:3:201;;8798:435;-1:-1:-1;;;;;8798:435:201:o;9238:530::-;9279:3;9317:5;9311:12;9344:6;9339:3;9332:19;9369:1;9379:162;9393:6;9390:1;9387:13;9379:162;;;9455:4;9511:13;;;9507:22;;9501:29;9483:11;;;9479:20;;9472:59;9408:12;9379:162;;;9559:6;9556:1;9553:13;9550:87;;;9625:1;9618:4;9609:6;9604:3;9600:16;9596:27;9589:38;9550:87;-1:-1:-1;9682:2:201;9670:15;9687:66;9666:88;9657:98;;;;9757:4;9653:109;;9238:530;-1:-1:-1;;9238:530:201:o;9773:1343::-;10193:3;10206:22;;;10277:13;;10178:19;;;10299:22;;;10145:4;;10375;;10352:3;10337:19;;;10402:15;;;10145:4;10445:218;10459:6;10456:1;10453:13;10445:218;;;10524:13;;10539:42;10520:62;10508:75;;10603:12;;;;10638:15;;;;10481:1;10474:9;10445:218;;;10449:3;;;10708:9;10703:3;10699:19;10694:2;10683:9;10679:18;10672:47;10742:41;10779:3;10771:6;10742:41;:::i;:::-;10728:55;;;10831:9;10823:6;10819:22;10814:2;10803:9;10799:18;10792:50;10865:44;10902:6;10894;10865:44;:::i;:::-;10851:58;;10957:42;10949:6;10945:55;10940:2;10929:9;10925:18;10918:83;11050:9;11042:6;11038:22;11032:3;11021:9;11017:19;11010:51;11078:32;11103:6;11095;11078:32;:::i;:::-;11070:40;9773:1343;-1:-1:-1;;;;;;;;9773:1343:201:o;11121:245::-;11188:6;11241:2;11229:9;11220:7;11216:23;11212:32;11209:52;;;11257:1;11254;11247:12;11209:52;11289:9;11283:16;11308:28;11330:5;11308:28;:::i;11371:219::-;11520:2;11509:9;11502:21;11483:4;11540:44;11580:2;11569:9;11565:18;11557:6;11540:44;:::i;11595:251::-;11665:6;11718:2;11706:9;11697:7;11693:23;11689:32;11686:52;;;11734:1;11731;11724:12;11686:52;11766:9;11760:16;11785:31;11810:5;11785:31;:::i;11851:301::-;11939:1;11932:5;11929:12;11919:200;;11975:77;11972:1;11965:88;12076:4;12073:1;12066:15;12104:4;12101:1;12094:15;11919:200;12128:18;;11851:301::o;12428:1964::-;12940:25;;;12996:2;12981:18;;12974:34;;;13039:2;13024:18;;13017:34;;;13082:2;13067:18;;13060:34;;;13122:13;;8052:42;8041:54;13152:3;13137:19;;8029:67;12927:3;12912:19;;13204:2;13192:15;;13186:22;8052:42;8041:54;;13265:3;13250:19;;8029:67;-1:-1:-1;13319:2:201;13307:15;;13301:22;8052:42;8041:54;;13382:3;13367:19;;8029:67;13332:55;13442:2;13434:6;13430:15;13424:22;13418:3;13407:9;13403:19;13396:51;13496:3;13488:6;13484:16;13478:23;13520:3;13532:68;13596:2;13585:9;13581:18;13565:14;13532:68;:::i;:::-;13649:3;13641:6;13637:16;13631:23;13609:45;;13673:3;13685:53;13734:2;13723:9;13719:18;13703:14;12233:6;12222:18;12210:31;;12157:90;13685:53;13787:3;13779:6;13775:16;13769:23;13747:45;;13811:3;13823:51;13870:2;13859:9;13855:18;13839:14;12322:13;12315:21;12303:34;;12252:91;13823:51;13911:3;13899:16;;13893:23;13935:3;13954:18;;;13947:30;;;;14020:15;;;14014:22;14008:3;13993:19;;13986:51;14074:15;;;14068:22;8052:42;8041:54;;;14149:3;14134:19;;8029:67;14191:15;;;14185:22;12415:4;12404:16;14264:3;14249:19;;12392:29;14306:15;;;14300:22;8041:54;;;14381:3;14366:19;;8029:67;14300:22;-1:-1:-1;14331:55:201;7975:127;14397:494;14686:42;14674:55;;14656:74;;14761:2;14746:18;;14739:34;;;14643:3;14628:19;;14782:60;14838:2;14823:18;;14815:6;14782:60;:::i;:::-;14878:6;14873:2;14862:9;14858:18;14851:34;14397:494;;;;;;;:::o;14896:583::-;15118:4;15147:42;15228:2;15220:6;15216:15;15205:9;15198:34;15268:6;15263:2;15252:9;15248:18;15241:34;15311:6;15306:2;15295:9;15291:18;15284:34;15366:2;15358:6;15354:15;15349:2;15338:9;15334:18;15327:43;;15407:3;15401;15390:9;15386:19;15379:32;15428:45;15468:3;15457:9;15453:19;15445:6;15428:45;:::i;:::-;15420:53;14896:583;-1:-1:-1;;;;;;;14896:583:201:o;15484:125::-;15524:4;15552:1;15549;15546:8;15543:34;;;15557:18;;:::i;:::-;-1:-1:-1;15594:9:201;;15484:125::o;15614:128::-;15654:3;15685:1;15681:6;15678:1;15675:13;15672:39;;;15691:18;;:::i;:::-;-1:-1:-1;15727:9:201;;15614:128::o;15747:184::-;15817:6;15870:2;15858:9;15849:7;15845:23;15841:32;15838:52;;;15886:1;15883;15876:12;15838:52;-1:-1:-1;15909:16:201;;15747:184;-1:-1:-1;15747:184:201:o;15936:253::-;15976:3;16004:34;16065:2;16062:1;16058:10;16095:2;16092:1;16088:10;16126:3;16122:2;16118:12;16113:3;16110:21;16107:47;;;16134:18;;:::i;:::-;16170:13;;15936:253;-1:-1:-1;;;;15936:253:201:o;17088:466::-;17184:6;17192;17200;17208;17261:3;17249:9;17240:7;17236:23;17232:33;17229:53;;;17278:1;17275;17268:12;17229:53;17307:9;17301:16;17291:26;;17357:2;17346:9;17342:18;17336:25;17326:35;;17401:2;17390:9;17386:18;17380:25;17370:35;;17448:2;17437:9;17433:18;17427:25;17492:12;17485:5;17481:24;17474:5;17471:35;17461:63;;17520:1;17517;17510:12;17461:63;17088:466;;;;-1:-1:-1;17088:466:201;;-1:-1:-1;;17088:466:201:o;18896:306::-;18984:6;18992;19000;19053:2;19041:9;19032:7;19028:23;19024:32;19021:52;;;19069:1;19066;19059:12;19021:52;19098:9;19092:16;19082:26;;19148:2;19137:9;19133:18;19127:25;19117:35;;19192:2;19181:9;19177:18;19171:25;19161:35;;18896:306;;;;;:::o;20029:228::-;20069:7;20195:1;20127:66;20123:74;20120:1;20117:81;20112:1;20105:9;20098:17;20094:105;20091:131;;;20202:18;;:::i;:::-;-1:-1:-1;20242:9:201;;20029:228::o;20262:184::-;20314:77;20311:1;20304:88;20411:4;20408:1;20401:15;20435:4;20432:1;20425:15;20451:274;20491:1;20517;20507:189;;20552:77;20549:1;20542:88;20653:4;20650:1;20643:15;20681:4;20678:1;20671:15;20507:189;-1:-1:-1;20710:9:201;;20451:274::o"},"gasEstimates":{"creation":{"codeDepositCost":"2228600","executionCost":"2413","totalCost":"2231013"},"external":{"executeFlashLoan(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.FlashloanParams)":"infinite","executeFlashLoanSimple(DataTypes.ReserveData storage,DataTypes.FlashloanSimpleParams)":"infinite"},"internal":{"_handleFlashLoanRepayment(struct DataTypes.ReserveData storage pointer,struct DataTypes.FlashLoanRepaymentParams memory)":"infinite"}},"methodIdentifiers":{"executeFlashLoan(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.FlashloanParams)":"2e7263ea","executeFlashLoanSimple(DataTypes.ReserveData storage,DataTypes.FlashloanSimpleParams)":"a1fe0e8d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"premium\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"FlashLoan\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"executeFlashLoan(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.FlashloanParams)\":{\"details\":\"For authorized flashborrowers the fee is waivedAt the end of the transaction the pool will pull amount borrowed + fee from the receiver, if the receiver have not approved the pool the transaction will revert.Emits the `FlashLoan()` event\",\"params\":{\"eModeCategories\":\"The configuration of all the efficiency mode categories\",\"params\":\"The additional parameters needed to execute the flashloan function\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\",\"userConfig\":\"The user configuration mapping that tracks the supplied/borrowed assets\"}},\"executeFlashLoanSimple(DataTypes.ReserveData storage,DataTypes.FlashloanSimpleParams)\":{\"details\":\"Does not waive fee for approved flashborrowers nor allow taking on debt instead of repaying to save gasAt the end of the transaction the pool will pull amount borrowed + fee from the receiver, if the receiver have not approved the pool the transaction will revert.Emits the `FlashLoan()` event\",\"params\":{\"params\":\"The additional parameters needed to execute the simple flashloan function\",\"reserve\":\"The state of the flashloaned reserve\"}}},\"title\":\"FlashLoanLogic library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeFlashLoan(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.FlashloanParams)\":{\"notice\":\"Implements the flashloan feature that allow users to access liquidity of the pool for one transaction as long as the amount taken plus fee is returned or debt is opened.\"},\"executeFlashLoanSimple(DataTypes.ReserveData storage,DataTypes.FlashloanSimpleParams)\":{\"notice\":\"Implements the simple flashloan feature that allow users to access liquidity of ONE reserve for one transaction as long as the amount taken plus fee is returned.\"}},\"notice\":\"Implements the logic for the flash loans\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/libraries/logic/FlashLoanLogic.sol\":\"FlashLoanLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\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(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\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 {AccessControl-_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) external view returns (bool);\\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 {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\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) external;\\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) external;\\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) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed assets\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param assets The addresses of the flash-borrowed assets\\n   * @param amounts The amounts of the flash-borrowed assets\\n   * @param premiums The fee of each flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata premiums,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0x0c7446b978d8044330dea7a491768498ac4052e2b3ca02d1b86ce32ea63b3810\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanSimpleReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanSimpleReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed asset\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param asset The address of the flash-borrowed asset\\n   * @param amount The amount of the flash-borrowed asset\\n   * @param premium The fee of the flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0xba50a7834ddfdca3e3cfac09043f72699be42ff88925641ac30950a434b2b2ff\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title Helpers library\\n * @author Aave\\n */\\nlibrary Helpers {\\n  /**\\n   * @notice Fetches the user current stable and variable debt balances\\n   * @param user The user address\\n   * @param reserveCache The reserve cache data object\\n   * @return The stable debt balance\\n   * @return The variable debt balance\\n   */\\n  function getUserCurrentDebt(\\n    address user,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal view returns (uint256, uint256) {\\n    return (\\n      IERC20(reserveCache.stableDebtTokenAddress).balanceOf(user),\\n      IERC20(reserveCache.variableDebtTokenAddress).balanceOf(user)\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x7e0c79cab4c30d9fadd227dcdecb51046e01d74ed34e5e8597f928f7f3a97640\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Helpers} from '../helpers/Helpers.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\\n\\n/**\\n * @title BorrowLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to borrowing\\n */\\nlibrary BorrowLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice Implements the borrow feature. Borrowing allows users that provided collateral to draw liquidity from the\\n   * Aave protocol proportionally to their collateralization power. For isolated positions, it also increases the\\n   * isolated debt.\\n   * @dev  Emits the `Borrow()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the borrow function\\n   */\\n  function executeBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteBorrowParams memory params\\n  ) public {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    (\\n      bool isolationModeActive,\\n      address isolationModeCollateralAddress,\\n      uint256 isolationModeDebtCeiling\\n    ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    ValidationLogic.validateBorrow(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.ValidateBorrowParams({\\n        reserveCache: reserveCache,\\n        userConfig: userConfig,\\n        asset: params.asset,\\n        userAddress: params.onBehalfOf,\\n        amount: params.amount,\\n        interestRateMode: params.interestRateMode,\\n        maxStableLoanPercent: params.maxStableRateBorrowSizePercent,\\n        reservesCount: params.reservesCount,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory,\\n        priceOracleSentinel: params.priceOracleSentinel,\\n        isolationModeActive: isolationModeActive,\\n        isolationModeCollateralAddress: isolationModeCollateralAddress,\\n        isolationModeDebtCeiling: isolationModeDebtCeiling\\n      })\\n    );\\n\\n    uint256 currentStableRate = 0;\\n    bool isFirstBorrowing = false;\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      currentStableRate = reserve.currentStableBorrowRate;\\n\\n      (\\n        isFirstBorrowing,\\n        reserveCache.nextTotalStableDebt,\\n        reserveCache.nextAvgStableBorrowRate\\n      ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).mint(\\n        params.user,\\n        params.onBehalfOf,\\n        params.amount,\\n        currentStableRate\\n      );\\n    } else {\\n      (isFirstBorrowing, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).mint(params.user, params.onBehalfOf, params.amount, reserveCache.nextVariableBorrowIndex);\\n    }\\n\\n    if (isFirstBorrowing) {\\n      userConfig.setBorrowing(reserve.id, true);\\n    }\\n\\n    if (isolationModeActive) {\\n      uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt += (params.amount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n      emit IsolationModeTotalDebtUpdated(\\n        isolationModeCollateralAddress,\\n        nextIsolationModeTotalDebt\\n      );\\n    }\\n\\n    reserve.updateInterestRates(\\n      reserveCache,\\n      params.asset,\\n      0,\\n      params.releaseUnderlying ? params.amount : 0\\n    );\\n\\n    if (params.releaseUnderlying) {\\n      IAToken(reserveCache.aTokenAddress).transferUnderlyingTo(params.user, params.amount);\\n    }\\n\\n    emit Borrow(\\n      params.asset,\\n      params.user,\\n      params.onBehalfOf,\\n      params.amount,\\n      params.interestRateMode,\\n      params.interestRateMode == DataTypes.InterestRateMode.STABLE\\n        ? currentStableRate\\n        : reserve.currentVariableBorrowRate,\\n      params.referralCode\\n    );\\n  }\\n\\n  /**\\n   * @notice Implements the repay feature. Repaying transfers the underlying back to the aToken and clears the\\n   * equivalent amount of debt for the user by burning the corresponding debt token. For isolated positions, it also\\n   * reduces the isolated debt.\\n   * @dev  Emits the `Repay()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the repay function\\n   * @return The actual amount being repaid\\n   */\\n  function executeRepay(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteRepayParams memory params\\n  ) external returns (uint256) {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n\\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\\n      params.onBehalfOf,\\n      reserveCache\\n    );\\n\\n    ValidationLogic.validateRepay(\\n      reserveCache,\\n      params.amount,\\n      params.interestRateMode,\\n      params.onBehalfOf,\\n      stableDebt,\\n      variableDebt\\n    );\\n\\n    uint256 paybackAmount = params.interestRateMode == DataTypes.InterestRateMode.STABLE\\n      ? stableDebt\\n      : variableDebt;\\n\\n    // Allows a user to repay with aTokens without leaving dust from interest.\\n    if (params.useATokens && params.amount == type(uint256).max) {\\n      params.amount = IAToken(reserveCache.aTokenAddress).balanceOf(msg.sender);\\n    }\\n\\n    if (params.amount < paybackAmount) {\\n      paybackAmount = params.amount;\\n    }\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).burn(params.onBehalfOf, paybackAmount);\\n    } else {\\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).burn(params.onBehalfOf, paybackAmount, reserveCache.nextVariableBorrowIndex);\\n    }\\n\\n    reserve.updateInterestRates(\\n      reserveCache,\\n      params.asset,\\n      params.useATokens ? 0 : paybackAmount,\\n      0\\n    );\\n\\n    if (stableDebt + variableDebt - paybackAmount == 0) {\\n      userConfig.setBorrowing(reserve.id, false);\\n    }\\n\\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\\n      reservesData,\\n      reservesList,\\n      userConfig,\\n      reserveCache,\\n      paybackAmount\\n    );\\n\\n    if (params.useATokens) {\\n      IAToken(reserveCache.aTokenAddress).burn(\\n        msg.sender,\\n        reserveCache.aTokenAddress,\\n        paybackAmount,\\n        reserveCache.nextLiquidityIndex\\n      );\\n    } else {\\n      IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, paybackAmount);\\n      IAToken(reserveCache.aTokenAddress).handleRepayment(\\n        msg.sender,\\n        params.onBehalfOf,\\n        paybackAmount\\n      );\\n    }\\n\\n    emit Repay(params.asset, params.onBehalfOf, msg.sender, paybackAmount, params.useATokens);\\n\\n    return paybackAmount;\\n  }\\n\\n  /**\\n   * @notice Implements the rebalance stable borrow rate feature. In case of liquidity crunches on the protocol, stable\\n   * rate borrows might need to be rebalanced to bring back equilibrium between the borrow and supply APYs.\\n   * @dev The rules that define if a position can be rebalanced are implemented in `ValidationLogic.validateRebalanceStableBorrowRate()`\\n   * @dev Emits the `RebalanceStableBorrowRate()` event\\n   * @param reserve The state of the reserve of the asset being repaid\\n   * @param asset The asset of the position being rebalanced\\n   * @param user The user being rebalanced\\n   */\\n  function executeRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    address asset,\\n    address user\\n  ) external {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateRebalanceStableBorrowRate(reserve, reserveCache, asset);\\n\\n    IStableDebtToken stableDebtToken = IStableDebtToken(reserveCache.stableDebtTokenAddress);\\n    uint256 stableDebt = IERC20(address(stableDebtToken)).balanceOf(user);\\n\\n    stableDebtToken.burn(user, stableDebt);\\n\\n    (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = stableDebtToken\\n      .mint(user, user, stableDebt, reserve.currentStableBorrowRate);\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    emit RebalanceStableBorrowRate(asset, user);\\n  }\\n\\n  /**\\n   * @notice Implements the swap borrow rate feature. Borrowers can swap from variable to stable positions at any time.\\n   * @dev Emits the `Swap()` event\\n   * @param reserve The of the reserve of the asset being repaid\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param asset The asset of the position being swapped\\n   * @param interestRateMode The current interest rate mode of the position being swapped\\n   */\\n  function executeSwapBorrowRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    DataTypes.InterestRateMode interestRateMode\\n  ) external {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\\n      msg.sender,\\n      reserveCache\\n    );\\n\\n    ValidationLogic.validateSwapRateMode(\\n      reserve,\\n      reserveCache,\\n      userConfig,\\n      stableDebt,\\n      variableDebt,\\n      interestRateMode\\n    );\\n\\n    if (interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).burn(msg.sender, stableDebt);\\n\\n      (, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).mint(msg.sender, msg.sender, stableDebt, reserveCache.nextVariableBorrowIndex);\\n    } else {\\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).burn(msg.sender, variableDebt, reserveCache.nextVariableBorrowIndex);\\n\\n      (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).mint(msg.sender, msg.sender, variableDebt, reserve.currentStableBorrowRate);\\n    }\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    emit SwapBorrowRateMode(asset, msg.sender, interestRateMode);\\n  }\\n}\\n\",\"keccak256\":\"0xf3d4fcd846149f0414db46d23cee241831b3c04c375477e84bdb5a95bd3ccac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/FlashLoanLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IFlashLoanReceiver} from '../../../flashloan/interfaces/IFlashLoanReceiver.sol';\\nimport {IFlashLoanSimpleReceiver} from '../../../flashloan/interfaces/IFlashLoanSimpleReceiver.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {BorrowLogic} from './BorrowLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title FlashLoanLogic library\\n * @author Aave\\n * @notice Implements the logic for the flash loans\\n */\\nlibrary FlashLoanLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  // Helper struct for internal variables used in the `executeFlashLoan` function\\n  struct FlashLoanLocalVars {\\n    IFlashLoanReceiver receiver;\\n    uint256 i;\\n    address currentAsset;\\n    uint256 currentAmount;\\n    uint256[] totalPremiums;\\n    uint256 flashloanPremiumTotal;\\n    uint256 flashloanPremiumToProtocol;\\n  }\\n\\n  /**\\n   * @notice Implements the flashloan feature that allow users to access liquidity of the pool for one transaction\\n   * as long as the amount taken plus fee is returned or debt is opened.\\n   * @dev For authorized flashborrowers the fee is waived\\n   * @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\\n   * if the receiver have not approved the pool the transaction will revert.\\n   * @dev Emits the `FlashLoan()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the flashloan function\\n   */\\n  function executeFlashLoan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.FlashloanParams memory params\\n  ) external {\\n    // The usual action flow (cache -> updateState -> validation -> changeState -> updateRates)\\n    // is altered to (validation -> user payload -> cache -> updateState -> changeState -> updateRates) for flashloans.\\n    // This is done to protect against reentrance and rate manipulation within the user specified payload.\\n\\n    ValidationLogic.validateFlashloan(reservesData, params.assets, params.amounts);\\n\\n    FlashLoanLocalVars memory vars;\\n\\n    vars.totalPremiums = new uint256[](params.assets.length);\\n\\n    vars.receiver = IFlashLoanReceiver(params.receiverAddress);\\n    (vars.flashloanPremiumTotal, vars.flashloanPremiumToProtocol) = params.isAuthorizedFlashBorrower\\n      ? (0, 0)\\n      : (params.flashLoanPremiumTotal, params.flashLoanPremiumToProtocol);\\n\\n    for (vars.i = 0; vars.i < params.assets.length; vars.i++) {\\n      vars.currentAmount = params.amounts[vars.i];\\n      vars.totalPremiums[vars.i] = DataTypes.InterestRateMode(params.interestRateModes[vars.i]) ==\\n        DataTypes.InterestRateMode.NONE\\n        ? vars.currentAmount.percentMul(vars.flashloanPremiumTotal)\\n        : 0;\\n      IAToken(reservesData[params.assets[vars.i]].aTokenAddress).transferUnderlyingTo(\\n        params.receiverAddress,\\n        vars.currentAmount\\n      );\\n    }\\n\\n    require(\\n      vars.receiver.executeOperation(\\n        params.assets,\\n        params.amounts,\\n        vars.totalPremiums,\\n        msg.sender,\\n        params.params\\n      ),\\n      Errors.INVALID_FLASHLOAN_EXECUTOR_RETURN\\n    );\\n\\n    for (vars.i = 0; vars.i < params.assets.length; vars.i++) {\\n      vars.currentAsset = params.assets[vars.i];\\n      vars.currentAmount = params.amounts[vars.i];\\n\\n      if (\\n        DataTypes.InterestRateMode(params.interestRateModes[vars.i]) ==\\n        DataTypes.InterestRateMode.NONE\\n      ) {\\n        _handleFlashLoanRepayment(\\n          reservesData[vars.currentAsset],\\n          DataTypes.FlashLoanRepaymentParams({\\n            asset: vars.currentAsset,\\n            receiverAddress: params.receiverAddress,\\n            amount: vars.currentAmount,\\n            totalPremium: vars.totalPremiums[vars.i],\\n            flashLoanPremiumToProtocol: vars.flashloanPremiumToProtocol,\\n            referralCode: params.referralCode\\n          })\\n        );\\n      } else {\\n        // If the user chose to not return the funds, the system checks if there is enough collateral and\\n        // eventually opens a debt position\\n        BorrowLogic.executeBorrow(\\n          reservesData,\\n          reservesList,\\n          eModeCategories,\\n          userConfig,\\n          DataTypes.ExecuteBorrowParams({\\n            asset: vars.currentAsset,\\n            user: msg.sender,\\n            onBehalfOf: params.onBehalfOf,\\n            amount: vars.currentAmount,\\n            interestRateMode: DataTypes.InterestRateMode(params.interestRateModes[vars.i]),\\n            referralCode: params.referralCode,\\n            releaseUnderlying: false,\\n            maxStableRateBorrowSizePercent: params.maxStableRateBorrowSizePercent,\\n            reservesCount: params.reservesCount,\\n            oracle: IPoolAddressesProvider(params.addressesProvider).getPriceOracle(),\\n            userEModeCategory: params.userEModeCategory,\\n            priceOracleSentinel: IPoolAddressesProvider(params.addressesProvider)\\n              .getPriceOracleSentinel()\\n          })\\n        );\\n        // no premium is paid when taking on the flashloan as debt\\n        emit FlashLoan(\\n          params.receiverAddress,\\n          msg.sender,\\n          vars.currentAsset,\\n          vars.currentAmount,\\n          DataTypes.InterestRateMode(params.interestRateModes[vars.i]),\\n          0,\\n          params.referralCode\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Implements the simple flashloan feature that allow users to access liquidity of ONE reserve for one\\n   * transaction as long as the amount taken plus fee is returned.\\n   * @dev Does not waive fee for approved flashborrowers nor allow taking on debt instead of repaying to save gas\\n   * @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\\n   * if the receiver have not approved the pool the transaction will revert.\\n   * @dev Emits the `FlashLoan()` event\\n   * @param reserve The state of the flashloaned reserve\\n   * @param params The additional parameters needed to execute the simple flashloan function\\n   */\\n  function executeFlashLoanSimple(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.FlashloanSimpleParams memory params\\n  ) external {\\n    // The usual action flow (cache -> updateState -> validation -> changeState -> updateRates)\\n    // is altered to (validation -> user payload -> cache -> updateState -> changeState -> updateRates) for flashloans.\\n    // This is done to protect against reentrance and rate manipulation within the user specified payload.\\n\\n    ValidationLogic.validateFlashloanSimple(reserve);\\n\\n    IFlashLoanSimpleReceiver receiver = IFlashLoanSimpleReceiver(params.receiverAddress);\\n    uint256 totalPremium = params.amount.percentMul(params.flashLoanPremiumTotal);\\n    IAToken(reserve.aTokenAddress).transferUnderlyingTo(params.receiverAddress, params.amount);\\n\\n    require(\\n      receiver.executeOperation(\\n        params.asset,\\n        params.amount,\\n        totalPremium,\\n        msg.sender,\\n        params.params\\n      ),\\n      Errors.INVALID_FLASHLOAN_EXECUTOR_RETURN\\n    );\\n\\n    _handleFlashLoanRepayment(\\n      reserve,\\n      DataTypes.FlashLoanRepaymentParams({\\n        asset: params.asset,\\n        receiverAddress: params.receiverAddress,\\n        amount: params.amount,\\n        totalPremium: totalPremium,\\n        flashLoanPremiumToProtocol: params.flashLoanPremiumToProtocol,\\n        referralCode: params.referralCode\\n      })\\n    );\\n  }\\n\\n  /**\\n   * @notice Handles repayment of flashloaned assets + premium\\n   * @dev Will pull the amount + premium from the receiver, so must have approved pool\\n   * @param reserve The state of the flashloaned reserve\\n   * @param params The additional parameters needed to execute the repayment function\\n   */\\n  function _handleFlashLoanRepayment(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.FlashLoanRepaymentParams memory params\\n  ) internal {\\n    uint256 premiumToProtocol = params.totalPremium.percentMul(params.flashLoanPremiumToProtocol);\\n    uint256 premiumToLP = params.totalPremium - premiumToProtocol;\\n    uint256 amountPlusPremium = params.amount + params.totalPremium;\\n\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n    reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex(\\n      IERC20(reserveCache.aTokenAddress).totalSupply() +\\n        uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex),\\n      premiumToLP\\n    );\\n\\n    reserve.accruedToTreasury += premiumToProtocol\\n      .rayDiv(reserveCache.nextLiquidityIndex)\\n      .toUint128();\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, amountPlusPremium, 0);\\n\\n    IERC20(params.asset).safeTransferFrom(\\n      params.receiverAddress,\\n      reserveCache.aTokenAddress,\\n      amountPlusPremium\\n    );\\n\\n    IAToken(reserveCache.aTokenAddress).handleRepayment(\\n      params.receiverAddress,\\n      params.receiverAddress,\\n      amountPlusPremium\\n    );\\n\\n    emit FlashLoan(\\n      params.receiverAddress,\\n      msg.sender,\\n      params.asset,\\n      params.amount,\\n      DataTypes.InterestRateMode(0),\\n      params.totalPremium,\\n      params.referralCode\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x086859964ddcf0b39d0ee5498f2c9baf211bcecd18d36864848ed33bd6396a3b\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/IsolationModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title IsolationModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for handling repayments for assets borrowed in isolation mode\\n */\\nlibrary IsolationModeLogic {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice updated the isolated debt whenever a position collateralized by an isolated asset is repaid or liquidated\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping\\n   * @param reserveCache The cached data of the reserve\\n   * @param repayAmount The amount being repaid\\n   */\\n  function updateIsolatedDebtIfIsolated(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 repayAmount\\n  ) internal {\\n    (bool isolationModeActive, address isolationModeCollateralAddress, ) = userConfig\\n      .getIsolationModeState(reservesData, reservesList);\\n\\n    if (isolationModeActive) {\\n      uint128 isolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt;\\n\\n      uint128 isolatedDebtRepaid = (repayAmount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n\\n      // since the debt ceiling does not take into account the interest accrued, it might happen that amount\\n      // repaid > debt in isolation mode\\n      if (isolationModeTotalDebt <= isolatedDebtRepaid) {\\n        reservesData[isolationModeCollateralAddress].isolationModeTotalDebt = 0;\\n        emit IsolationModeTotalDebtUpdated(isolationModeCollateralAddress, 0);\\n      } else {\\n        uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n          .isolationModeTotalDebt = isolationModeTotalDebt - isolatedDebtRepaid;\\n        emit IsolationModeTotalDebtUpdated(\\n          isolationModeCollateralAddress,\\n          nextIsolationModeTotalDebt\\n        );\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xf96e7a7bb1d0d62c233462fcb86954361ef2d7be03bf444017ce8a443d0b6cc1\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeFlashLoan(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.FlashloanParams)":{"notice":"Implements the flashloan feature that allow users to access liquidity of the pool for one transaction as long as the amount taken plus fee is returned or debt is opened."},"executeFlashLoanSimple(DataTypes.ReserveData storage,DataTypes.FlashloanSimpleParams)":{"notice":"Implements the simple flashloan feature that allow users to access liquidity of ONE reserve for one transaction as long as the amount taken plus fee is returned."}},"notice":"Implements the logic for the flash loans","version":1}}},"@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol":{"GenericLogic":{"abi":[],"devdoc":{"author":"Aave","kind":"dev","methods":{},"title":"GenericLogic library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203ec33af63d4bb80f4f498afaf47861c82d167994165e9887ca9ac60a4baf3dfe64736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURNDATACOPY 0xC3 GASPRICE 0xF6 RETURNDATASIZE 0x4B 0xB8 0xF 0x4F 0x49 DUP11 STATICCALL DELEGATECALL PUSH25 0x61C82D167994165E9887CA9AC60A4BAF3DFE64736F6C634300 ADDMOD EXP STOP CALLER ","sourceMap":"856:9116:81:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;856:9116:81;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203ec33af63d4bb80f4f498afaf47861c82d167994165e9887ca9ac60a4baf3dfe64736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURNDATACOPY 0xC3 GASPRICE 0xF6 RETURNDATASIZE 0x4B 0xB8 0xF 0x4F 0x49 DUP11 STATICCALL DELEGATECALL PUSH25 0x61C82D167994165E9887CA9AC60A4BAF3DFE64736F6C634300 ADDMOD EXP STOP CALLER ","sourceMap":"856:9116:81:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_getUserBalanceInBaseCurrency(address,struct DataTypes.ReserveData storage pointer,uint256,uint256)":"infinite","_getUserDebtInBaseCurrency(address,struct DataTypes.ReserveData storage pointer,uint256,uint256)":"infinite","calculateAvailableBorrows(uint256,uint256,uint256)":"infinite","calculateUserAccountData(mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.CalculateUserAccountDataParams memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{},\"title\":\"GenericLogic library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Implements protocol-level logic to calculate and validate the state of a user\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol\":\"GenericLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\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(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\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 {AccessControl-_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) external view returns (bool);\\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 {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\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) external;\\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) external;\\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) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Implements protocol-level logic to calculate and validate the state of a user","version":1}}},"@aave/core-v3/contracts/protocol/libraries/logic/IsolationModeLogic.sol":{"IsolationModeLogic":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalDebt","type":"uint256"}],"name":"IsolationModeTotalDebtUpdated","type":"event"}],"devdoc":{"author":"Aave","kind":"dev","methods":{},"title":"IsolationModeLogic library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122089e8df02ca9a6d42d5487c9c4d00e446205ebfa585d23b3e9fae33987d41307164736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP10 0xE8 0xDF MUL 0xCA SWAP11 PUSH14 0x42D5487C9C4D00E446205EBFA585 0xD2 EXTCODESIZE RETURNDATACOPY SWAP16 0xAE CALLER SWAP9 PUSH30 0x41307164736F6C634300080A003300000000000000000000000000000000 ","sourceMap":"512:2218:82:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;512:2218:82;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122089e8df02ca9a6d42d5487c9c4d00e446205ebfa585d23b3e9fae33987d41307164736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP10 0xE8 0xDF MUL 0xCA SWAP11 PUSH14 0x42D5487C9C4D00E446205EBFA585 0xD2 EXTCODESIZE RETURNDATACOPY SWAP16 0xAE CALLER SWAP9 PUSH30 0x41307164736F6C634300080A003300000000000000000000000000000000 ","sourceMap":"512:2218:82:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"updateIsolatedDebtIfIsolated(mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveCache memory,uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalDebt\",\"type\":\"uint256\"}],\"name\":\"IsolationModeTotalDebtUpdated\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{},\"title\":\"IsolationModeLogic library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Implements the base logic for handling repayments for assets borrowed in isolation mode\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/libraries/logic/IsolationModeLogic.sol\":\"IsolationModeLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/IsolationModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title IsolationModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for handling repayments for assets borrowed in isolation mode\\n */\\nlibrary IsolationModeLogic {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice updated the isolated debt whenever a position collateralized by an isolated asset is repaid or liquidated\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping\\n   * @param reserveCache The cached data of the reserve\\n   * @param repayAmount The amount being repaid\\n   */\\n  function updateIsolatedDebtIfIsolated(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 repayAmount\\n  ) internal {\\n    (bool isolationModeActive, address isolationModeCollateralAddress, ) = userConfig\\n      .getIsolationModeState(reservesData, reservesList);\\n\\n    if (isolationModeActive) {\\n      uint128 isolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt;\\n\\n      uint128 isolatedDebtRepaid = (repayAmount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n\\n      // since the debt ceiling does not take into account the interest accrued, it might happen that amount\\n      // repaid > debt in isolation mode\\n      if (isolationModeTotalDebt <= isolatedDebtRepaid) {\\n        reservesData[isolationModeCollateralAddress].isolationModeTotalDebt = 0;\\n        emit IsolationModeTotalDebtUpdated(isolationModeCollateralAddress, 0);\\n      } else {\\n        uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n          .isolationModeTotalDebt = isolationModeTotalDebt - isolatedDebtRepaid;\\n        emit IsolationModeTotalDebtUpdated(\\n          isolationModeCollateralAddress,\\n          nextIsolationModeTotalDebt\\n        );\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xf96e7a7bb1d0d62c233462fcb86954361ef2d7be03bf444017ce8a443d0b6cc1\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Implements the base logic for handling repayments for assets borrowed in isolation mode","version":1}}},"@aave/core-v3/contracts/protocol/libraries/logic/LiquidationLogic.sol":{"LiquidationLogic":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"collateralAsset","type":"address"},{"indexed":true,"internalType":"address","name":"debtAsset","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"debtToCover","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidatedCollateralAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"liquidator","type":"address"},{"indexed":false,"internalType":"bool","name":"receiveAToken","type":"bool"}],"name":"LiquidationCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralEnabled","type":"event"},{"inputs":[],"name":"CLOSE_FACTOR_HF_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_LIQUIDATION_CLOSE_FACTOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"executeLiquidationCall(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(address => DataTypes.UserConfigurationMap) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.ExecuteLiquidationCallParams)":{"details":"Emits the `LiquidationCall()` event","params":{"eModeCategories":"The configuration of all the efficiency mode categories","params":"The additional parameters needed to execute the liquidation function","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves","usersConfig":"The users configuration mapping that track the supplied/borrowed assets"}}},"stateVariables":{"CLOSE_FACTOR_HF_THRESHOLD":{"details":"This constant represents below which health factor value it is possible to liquidate an amount of debt corresponding to `MAX_LIQUIDATION_CLOSE_FACTOR`. A value of 0.95e18 results in 0.95"},"DEFAULT_LIQUIDATION_CLOSE_FACTOR":{"details":"Default percentage of borrower's debt to be repaid in a liquidation.Percentage applied when the users health factor is above `CLOSE_FACTOR_HF_THRESHOLD` Expressed in bps, a value of 0.5e4 results in 50.00%"},"MAX_LIQUIDATION_CLOSE_FACTOR":{"details":"Maximum percentage of borrower's debt to be repaid in a liquidationPercentage applied when the users health factor is below `CLOSE_FACTOR_HF_THRESHOLD` Expressed in bps, a value of 1e4 results in 100.00%"}},"title":"LiquidationLogic library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"61402261003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061004b5760003560e01c806383c1087d14610050578063a18964a514610072578063d246754414610093575b600080fd5b81801561005c57600080fd5b5061007061006b366004613aea565b61009c565b005b610081670d2f13f7789f000081565b60405190815260200160405180910390f35b61008161271081565b6100a46138e5565b60408083015173ffffffffffffffffffffffffffffffffffffffff9081166000908152602089815283822060608701518416835284832060808801519094168352908890529290206100f582610832565b6101608501819052610108908390610a4b565b61018e8989886040518060a001604052808660405180602001604052908160008201548152505081526020018a6000015181526020018a6080015173ffffffffffffffffffffffffffffffffffffffff1681526020018a60c0015173ffffffffffffffffffffffffffffffffffffffff1681526020018a60e0015160ff16815250610ad6565b5060c089018190526101608901516101ad955093508992509050611040565b86602001876040018860600183815250838152508381525050505061021b818460405180608001604052808861016001518152602001886040015181526020018860c00151815260200189610100015173ffffffffffffffffffffffffffffffffffffffff168152506110c6565b610226868487611575565b60a088015273ffffffffffffffffffffffffffffffffffffffff908116610120880152908116610100870152908116610140860181905260808701516040517f70a0823100000000000000000000000000000000000000000000000000000000815292166004830152906370a0823190602401602060405180830381865afa1580156102b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102da9190613bf3565b808552610160850151610100860151610120870151606088015160a089015160c08b015161030f968a969594939290916116a9565b60e08701526060860181905260808601919091526040850151141561035d57600382015461035d9082907501000000000000000000000000000000000000000000900461ffff166000611a09565b835160e085015160808601516103739190613c3b565b141561040b5760038301546103a89082907501000000000000000000000000000000000000000000900461ffff166000611a9e565b846080015173ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff167f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd60405160405180910390a35b6104158585611b27565b6101608401516060808701519086015161043492859290916000611db8565b61044a89898387610160015188606001516120f9565b8460a001511561046757610462898989868989612301565b610472565b61047283868661250d565b60e08401511561067c576000610487846125e5565b905060006104a2828760e0015161267c90919063ffffffff16565b61014087015160808901516040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152929350600092911690631da24f3e90602401602060405180830381865afa15801561051f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105439190613bf3565b90508082111561055d5761055781846126bb565b60e08801525b86610140015173ffffffffffffffffffffffffffffffffffffffff1663f866c319896080015189610140015173ffffffffffffffffffffffffffffffffffffffff1663ae1673356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f79190613c53565b8a60e001516040518463ffffffff1660e01b81526004016106469392919073ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b600060405180830381600087803b15801561066057600080fd5b505af1158015610674573d6000803e3d6000fd5b505050505050505b6106bb338561016001516101e001518660600151886060015173ffffffffffffffffffffffffffffffffffffffff16612712909392919063ffffffff16565b6101608401516101e00151608086015160608601516040517f6fd9767600000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff92831660248201526044810191909152911690636fd9767690606401600060405180830381600087803b15801561074757600080fd5b505af115801561075b573d6000803e3d6000fd5b50505050846080015173ffffffffffffffffffffffffffffffffffffffff16856060015173ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff167fe413a321e8681d831f4dbccbca790d2952b56f977908e45be37335533e00528687606001518860800151338b60a0015160405161081f9493929190938452602084019290925273ffffffffffffffffffffffffffffffffffffffff1660408301521515606082015260800190565b60405180910390a4505050505050505050565b61083a61398d565b61084261398d565b60408051602081018252845481526101c0830181905251901c61ffff166101a082015260018301546fffffffffffffffffffffffffffffffff808216610100840181905260e0840152600285015480821661014085018190526101208501527001000000000000000000000000000000009283900482166101608501528290041661018083015260048085015473ffffffffffffffffffffffffffffffffffffffff9081166101e085015260058601548116610200850152600686015416610220840181905260038601549290920464ffffffffff16610240840152604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905163b1bf962d928281019260209291908290030181865afa15801561096f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109939190613bf3565b816020018181525081600001818152505080610200015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa1580156109f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a189190613c70565b64ffffffffff166102608501526060840181905260808401829052604084019290925260c083015260a082015292915050565b60038201544264ffffffffff908116700100000000000000000000000000000000909204161415610a7a575050565b610a8482826127ed565b610a8e828261290f565b5060030180547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff1602179055565b600080600080600080610aec8760000151511590565b15610b285750600094508493508392508291507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905081611033565b610bd760405180610260016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581525090565b608088015160ff1615610c1c57608088015160ff16600090815260208a9052604090206060890151610c099190612a8f565b6101808401526101c08301526101a08201525b87602001518160c001511015610f3b5760c08101518851610c3c91612b6e565b610c505760c0810180516001019052610c1c565b60c0810151600090815260208b9052604090205473ffffffffffffffffffffffffffffffffffffffff166102008201819052610c965760c0810180516001019052610c1c565b61020081015173ffffffffffffffffffffffffffffffffffffffff16600090815260208c8152604091829020825180830190935280549283905260ff60a884901c81166101e0860152603084901c166060850181905261ffff601085901c811660a08701529093166080850152600a9290920a9083015261018082015115801590610d2c5750816101e00151896080015160ff16145b610dd05760608901516102008301516040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063b3596f0790602401602060405180830381865afa158015610da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcb9190613bf3565b610dd7565b8161018001515b825260a082015115801590610df7575060c08201518951610df791612bf6565b15610ee757610e1489604001518284600001518560200151612c7a565b6040830181905261010083018051610e2d908390613c3b565b90525060808901516101e0830151610e489160ff1690612d55565b1515610240830152608082015115610e9e57816102400151610e6e578160800151610e75565b816101a001515b8260400151610e849190613cbb565b8261014001818151610e969190613c3b565b905250610ea7565b60016102208301525b816102400151610ebb578160a00151610ec2565b816101c001515b8260400151610ed19190613cbb565b8261016001818151610ee39190613c3b565b9052505b60c08201518951610ef791612d66565b15610f2a57610f1489604001518284600001518560200151612de8565b8261012001818151610f269190613c3b565b9052505b5060c0810180516001019052610c1c565b610100810151610f4c576000610f67565b80610100015181610140015181610f6557610f65613cf8565b045b610140820152610100810151610f7e576000610f99565b80610100015181610160015181610f9757610f97613cf8565b045b61016082015261012081015115610fdb57610fd6816101200151610fd0836101600151846101000151612f6890919063ffffffff16565b90612fab565b610ffd565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b60e0820181905261010082015161012083015161014084015161016085015161022090950151929a509098509650919450925090505b9499939850945094509450565b6000806000806000611056876080015189612fe2565b909250905060006110678284613c3b565b90506000670d2f13f7789f0000881161108257612710611086565b6113885b905060006110948383612f68565b90506000818b60200151116110ad578a602001516110af565b815b949850929650929450505050505b93509350939050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915260408051602081019091528354815261114c9051670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b1515602086015250505015801580835283516101c0015151671000000000000000811615156060850152670100000000000000161515604084015290611193575080604001515b6040518060400160405280600281526020017f32370000000000000000000000000000000000000000000000000000000000008152509061120a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b60405180910390fd5b50806020015115801561121f57508060600151155b6040518060400160405280600281526020017f32390000000000000000000000000000000000000000000000000000000000008152509061128d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50606082015173ffffffffffffffffffffffffffffffffffffffff1615806112c05750670d2f13f7789f00008260400151105b806113395750816060015173ffffffffffffffffffffffffffffffffffffffff16637a5d20ea6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113399190613d9a565b6040518060400160405280600281526020017f3539000000000000000000000000000000000000000000000000000000000000815250906113a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50670de0b6b3a76400008260400151106040518060400160405280600281526020017f343500000000000000000000000000000000000000000000000000000000000081525090611425576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50604080516020810190915283549081905260101c61ffff161580159061148157506003830154604080516020810190915285548152611481917501000000000000000000000000000000000000000000900461ffff16612bf6565b15156080820181905260408051808201909152600281527f34360000000000000000000000000000000000000000000000000000000000006020820152906114f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b508160200151600014156040518060400160405280600281526020017f34370000000000000000000000000000000000000000000000000000000000008152509061156e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b5050505050565b6004820154604080516020808201835285549182905291840151606085015160e086015160009586958695869573ffffffffffffffffffffffffffffffffffffffff90931694911c61ffff169260ff16156116985760e08901805160ff908116600090815260208e815260409182902054935182519182019092528d5490819052660100000000000090930473ffffffffffffffffffffffffffffffffffffffff169261162c929182169160a89190911c16612d55565b156116765760e08a015160ff16600090815260208d90526040902054640100000000900461ffff16935073ffffffffffffffffffffffffffffffffffffffff811615611676578092505b73ffffffffffffffffffffffffffffffffffffffff811615611696578091505b505b929a90995091975095509350505050565b6000806000611719604051806101a00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015286169063b3596f0790602401602060405180830381865afa158015611785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a99190613bf3565b81526040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116600483015286169063b3596f0790602401602060405180830381865afa158015611817573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183b9190613bf3565b6020828101919091526040805191820190528c549081905260301c60ff1660c08201526101c08b01515160301c60ff1660a0820181905260c0820151600a90810a60e08401520a61010082015260408051602081019091528c549081905260981c61ffff1661016082015261010081015181516118b89190613cbb565b8160e001518983602001516118cd9190613cbb565b6118d79190613cbb565b6118e19190613db7565b606082018190526118f29087612f68565b6040820181905287101561195f57610120810187905260e081015160208201516119549188916119229190613cbb565b610100840151610120850151855161193a9190613cbb565b6119449190613cbb565b61194e9190613db7565b9061311f565b610140820152611973565b604081015161012082015261014081018890525b610160810151156119e55761012081015161198e908761311f565b81610120015161199e9190613df2565b608082018190526101608201516119b59190612f68565b61018082018190526101208201516119cd9190613df2565b816101400151826101800151935093509350506119fb565b8061012001518161014001516000935093509350505b985098509895505050505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260808310611a78576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50600182811b1b8115611a9057835481178455611a98565b835481191684555b50505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260808310611b0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50600182811b81011b8115611a9057835481178455611a98565b8060600151816020015110611bff5761016081015161022081015160808401516060840151610140909301516040517ff5298aca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101949094526044840152169063f5298aca906064016020604051808303816000875af1158015611bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf19190613bf3565b610160820151602001525050565b602081015115611ccf5761016081015161022081015160808401516020840151610140909301516040517ff5298aca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101949094526044840152169063f5298aca906064016020604051808303816000875af1158015611ca0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc49190613bf3565b610160820151602001525b806101600151610200015173ffffffffffffffffffffffffffffffffffffffff16639dc29fac836080015183602001518460600151611d0e9190613df2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff9092166004830152602482015260440160408051808303816000875af1158015611d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da19190613e09565b61016083015160a081019190915260c001525b5050565b611de36040518060800160405280600081526020016000815260200160008152602001600081525090565b6101408501516020860151611df7916126bb565b60608083019182526007880154604080516101208101825260088b01546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000009091041681526020810188905280820187905260c0808b0151948201949094529351608085015260a0808a0151908501526101a08901519284019290925273ffffffffffffffffffffffffffffffffffffffff87811660e08501526101e0890151811661010085015291517fa589870900000000000000000000000000000000000000000000000000000000815291169163a589870991611f589190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa158015611f75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f999190613e2d565b60408401526020830152808252611faf9061314a565b6001870180546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556020810151611ff29061314a565b6003870180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691909117905560408101516120439061314a565b6002870180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905580516020808301516040808501516101008a01516101408b0151835196875294860193909352908401526060830152608082015273ffffffffffffffffffffffffffffffffffffffff8516907f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a9060a00160405180910390a2505050505050565b60408051602081019091528354815260009081906121189088886131f0565b509150915081156122f85773ffffffffffffffffffffffffffffffffffffffff81166000908152602088905260408120600901546101c0860151516fffffffffffffffffffffffffffffffff909116919061219a9060029060301c60ff166121809190613df2565b61218b90600a613f7b565b6121959087613db7565b61314a565b9050806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff161161224a5773ffffffffffffffffffffffffffffffffffffffff8316600081815260208b8152604080832060090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055519182527faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5910160405180910390a26122f5565b60006122568284613f87565b73ffffffffffffffffffffffffffffffffffffffff8516600081815260208d815260409182902060090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff959095169485179055905183815292935090917faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5910160405180910390a2505b50505b50505050505050565b6101408101516040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612373573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123979190613bf3565b610140830151608080860151908501516040517ff866c31900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201523360248201526044810191909152929350169063f866c31990606401600060405180830381600087803b15801561242057600080fd5b505af1158015612434573d6000803e3d6000fd5b5050505080600014156122f85733600090815260208681526040918290208251918201909252855481526004860154612488918a918a91859173ffffffffffffffffffffffffffffffffffffffff166132a5565b156125035760038501546124bc9082907501000000000000000000000000000000000000000000900461ffff166001611a9e565b6040808501519051339173ffffffffffffffffffffffffffffffffffffffff16907e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f290600090a35b5050505050505050565b600061251884610832565b90506125248482610a4b565b6040830151608083015161253f918691849190600090611db8565b610140820151608080850151908401516101008401516040517fd7020d0a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201523360248201526044810192909252606482015291169063d7020d0a90608401600060405180830381600087803b1580156125d157600080fd5b505af1158015612503573d6000803e3d6000fd5b6003810154600090700100000000000000000000000000000000900464ffffffffff164281141561262b575050600101546fffffffffffffffffffffffffffffffff1690565b600183015461266f906fffffffffffffffffffffffffffffffff808216916126699170010000000000000000000000000000000090910416846134e7565b906126bb565b9392505050565b50919050565b600081156b033b2e3c9fd0803ce8000000600284041904841117156126a057600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff839004841115176126f057600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af161277d573d6000803e3d6000fd5b5061278785613524565b61156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d000000000000006044820152606401611201565b6101608101511561287d57600061280e8261016001518361024001516134e7565b90506128278260e00151826126bb90919063ffffffff16565b61010083018190526128389061314a565b6001840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b805115611db457600061289a8261018001518361024001516135ee565b90506128b4826101200151826126bb90919063ffffffff16565b61014083018190526128c59061314a565b6002840180546fffffffffffffffffffffffffffffffff929092167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216919091179055505050565b6129486040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6101a082015161295757505050565b6101208201518251612968916126bb565b6020820152610140820151825161297e916126bb565b604082015260608201516102608301516102408401516129a692919064ffffffffff166135f7565b6060820181905260408301516129bb916126bb565b8082526020820151608084015160408401516129d79190613c3b565b6129e19190613df2565b6129eb9190613df2565b608082018190526101a0830151612a029190612f68565b60a0820181905215612a8a57612a2d6121958361010001518360a0015161267c90919063ffffffff16565b600884018054600090612a539084906fffffffffffffffffffffffffffffffff16613fb8565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b505050565b81546000908190819081906601000000000000900473ffffffffffffffffffffffffffffffffffffffff168015612b53576040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015287169063b3596f0790602401602060405180830381865afa158015612b2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b509190613bf3565b91505b50945461ffff80821697620100009092041695945092505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612be0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50508151600182901b1c60031615155b92915050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612c68576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50509051600191821b82011c16151590565b600080612c86856125e5565b6004868101546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116938201939093529293506000928792612d2c928692911690631da24f3e90602401602060405180830381865afa158015612d08573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126699190613bf3565b612d369190613cbb565b9050838181612d4757612d47613cf8565b04925050505b949350505050565b6000821580159061266f5750501490565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612dd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50509051600191821b1c16151590565b60068301546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000928392911690631da24f3e90602401602060405180830381865afa158015612e5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e829190613bf3565b90508015612ea057612e9d612e968661373e565b82906126bb565b90505b60058501546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152909116906370a0823190602401602060405180830381865afa158015612f12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f369190613bf3565b612f409082613c3b565b9050612f4c8185613cbb565b9050828181612f5d57612f5d613cf8565b049695505050505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7783900484111517612f9d57600080fd5b506127109102611388010490565b60008115670de0b6b3a764000060028404190484111715612fcb57600080fd5b50670de0b6b3a76400009190910260028204010490565b6102008101516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260009283929116906370a0823190602401602060405180830381865afa158015613059573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061307d9190613bf3565b6102208401516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152909116906370a0823190602401602060405180830381865afa1580156130f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131149190613bf3565b915091509250929050565b600081156127106002840419048411171561313957600080fd5b506127109190910260028204010490565b60006fffffffffffffffffffffffffffffffff8211156131ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401611201565b5090565b60008060006131fe866137c2565b1561329557600061322f877faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa613806565b6000818152602087815260408083205473ffffffffffffffffffffffffffffffffffffffff168084528a8352818420825193840190925290549182905292935060d41c64ffffffffff1690508015613291576001955090935091506110bd9050565b5050505b5060009586955085945092505050565b815160009060d41c64ffffffffff16156134cf5760008273ffffffffffffffffffffffffffffffffffffffff16637535d2466040518163ffffffff1660e01b8152600401602060405180830381865afa158015613306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332a9190613c53565b73ffffffffffffffffffffffffffffffffffffffff16630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133989190613c53565b90508073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134099190613c53565b6040517f91d148540000000000000000000000000000000000000000000000000000000081527fd1d2cf869016112a9af1107bcf43c3759daf22cf734aad47d0c9c726e33bc782600482015233602482015273ffffffffffffffffffffffffffffffffffffffff91909116906391d1485490604401602060405180830381865afa15801561349b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134bf9190613d9a565b6134cd5760009150506134de565b505b6134db8686868661384a565b90505b95945050505050565b6000806134fb64ffffffffff841642613df2565b6135059085613cbb565b6301e1338090049050612d4d816b033b2e3c9fd0803ce8000000613c3b565b6000613564565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156135a357602081146135dd5761359e7f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f61352b565b612676565b823b6135d4576135d47f475076323a206e6f74206120636f6e7472616374000000000000000000000000601461352b565b60019150612676565b3d6000803e50506000511515919050565b600061266f8383425b60008061360b64ffffffffff851684613df2565b905080613627576b033b2e3c9fd0803ce800000091505061266f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101600080806002851161365d576000613662565b600285035b925066038882915c40006136768a806126bb565b8161368357613683613cf8565b0491506301e13380613695838b6126bb565b816136a2576136a2613cf8565b0490506000826136b28688613cbb565b6136bc9190613cbb565b600290049050600082856136d0888a613cbb565b6136da9190613cbb565b6136e49190613cbb565b60069004905080826301e133806136fb8a8f613cbb565b6137059190613db7565b61371b906b033b2e3c9fd0803ce8000000613c3b565b6137259190613c3b565b61372f9190613c3b565b9b9a5050505050505050505050565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415613784575050600201546fffffffffffffffffffffffffffffffff1690565b600283015461266f906fffffffffffffffffffffffffffffffff808216916126699170010000000000000000000000000000000090910416846135ee565b80516000907faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa16801580159061266f57506137fe600182613df2565b161592915050565b815160009082167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101198116825b60029190911c9081156134de57600101613835565b6000613858825161ffff1690565b61386457506000612d4d565b60408051602081019091528354908190527faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa166138a357506001612d4d565b6040805160208101909152835481526000906138c09087876131f0565b50509050801580156138db5750825160d41c64ffffffffff16155b9695505050505050565b6040518061018001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200161398861398d565b905290565b6040518061028001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001613a116040518060200160405280600081525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b604051610120810167ffffffffffffffff81118282101715613a85577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b73ffffffffffffffffffffffffffffffffffffffff81168114613aad57600080fd5b50565b8035613abb81613a8b565b919050565b8015158114613aad57600080fd5b8035613abb81613ac0565b803560ff81168114613abb57600080fd5b60008060008060008587036101a0811215613b0457600080fd5b86359550602087013594506040870135935060608701359250610120807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083011215613b4f57600080fd5b613b57613a3a565b91506080880135825260a08801356020830152613b7660c08901613ab0565b6040830152613b8760e08901613ab0565b6060830152610100613b9a818a01613ab0565b6080840152613baa828a01613ace565b60a0840152613bbc6101408a01613ab0565b60c0840152613bce6101608a01613ad9565b60e0840152613be06101808a01613ab0565b9083015250949793965091945092919050565b600060208284031215613c0557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115613c4e57613c4e613c0c565b500190565b600060208284031215613c6557600080fd5b815161266f81613a8b565b60008060008060808587031215613c8657600080fd5b845193506020850151925060408501519150606085015164ffffffffff81168114613cb057600080fd5b939692955090935050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613cf357613cf3613c0c565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060208083528351808285015260005b81811015613d5457858101830151858201604001528201613d38565b81811115613d66576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060208284031215613dac57600080fd5b815161266f81613ac0565b600082613ded577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015613e0457613e04613c0c565b500390565b60008060408385031215613e1c57600080fd5b505080516020909101519092909150565b600080600060608486031215613e4257600080fd5b8351925060208401519150604084015190509250925092565b600181815b80851115613eb457817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613e9a57613e9a613c0c565b80851615613ea757918102915b93841c9390800290613e60565b509250929050565b600082613ecb57506001612bf0565b81613ed857506000612bf0565b8160018114613eee5760028114613ef857613f14565b6001915050612bf0565b60ff841115613f0957613f09613c0c565b50506001821b612bf0565b5060208310610133831016604e8410600b8410161715613f37575081810a612bf0565b613f418383613e5b565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613f7357613f73613c0c565b029392505050565b600061266f8383613ebc565b60006fffffffffffffffffffffffffffffffff83811690831681811015613fb057613fb0613c0c565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115613fe357613fe3613c0c565b0194935050505056fea26469706673582212200117cc6118a47134965aee898d0743fed6f01d2d313d158e2078a86ebbab403464736f6c634300080a0033","opcodes":"PUSH2 0x4022 PUSH2 0x3A PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x83C1087D EQ PUSH2 0x50 JUMPI DUP1 PUSH4 0xA18964A5 EQ PUSH2 0x72 JUMPI DUP1 PUSH4 0xD2467544 EQ PUSH2 0x93 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x70 PUSH2 0x6B CALLDATASIZE PUSH1 0x4 PUSH2 0x3AEA JUMP JUMPDEST PUSH2 0x9C JUMP JUMPDEST STOP JUMPDEST PUSH2 0x81 PUSH8 0xD2F13F7789F0000 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x81 PUSH2 0x2710 DUP2 JUMP JUMPDEST PUSH2 0xA4 PUSH2 0x38E5 JUMP JUMPDEST PUSH1 0x40 DUP1 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP10 DUP2 MSTORE DUP4 DUP3 KECCAK256 PUSH1 0x60 DUP8 ADD MLOAD DUP5 AND DUP4 MSTORE DUP5 DUP4 KECCAK256 PUSH1 0x80 DUP9 ADD MLOAD SWAP1 SWAP5 AND DUP4 MSTORE SWAP1 DUP9 SWAP1 MSTORE SWAP3 SWAP1 KECCAK256 PUSH2 0xF5 DUP3 PUSH2 0x832 JUMP JUMPDEST PUSH2 0x160 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x108 SWAP1 DUP4 SWAP1 PUSH2 0xA4B JUMP JUMPDEST PUSH2 0x18E DUP10 DUP10 DUP9 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0xC0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0xE0 ADD MLOAD PUSH1 0xFF AND DUP2 MSTORE POP PUSH2 0xAD6 JUMP JUMPDEST POP PUSH1 0xC0 DUP10 ADD DUP2 SWAP1 MSTORE PUSH2 0x160 DUP10 ADD MLOAD PUSH2 0x1AD SWAP6 POP SWAP4 POP DUP10 SWAP3 POP SWAP1 POP PUSH2 0x1040 JUMP JUMPDEST DUP7 PUSH1 0x20 ADD DUP8 PUSH1 0x40 ADD DUP9 PUSH1 0x60 ADD DUP4 DUP2 MSTORE POP DUP4 DUP2 MSTORE POP DUP4 DUP2 MSTORE POP POP POP POP PUSH2 0x21B DUP2 DUP5 PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH2 0x160 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x40 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0xC0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH2 0x10C6 JUMP JUMPDEST PUSH2 0x226 DUP7 DUP5 DUP8 PUSH2 0x1575 JUMP JUMPDEST PUSH1 0xA0 DUP9 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x120 DUP9 ADD MSTORE SWAP1 DUP2 AND PUSH2 0x100 DUP8 ADD MSTORE SWAP1 DUP2 AND PUSH2 0x140 DUP7 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP8 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2DA SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST DUP1 DUP6 MSTORE PUSH2 0x160 DUP6 ADD MLOAD PUSH2 0x100 DUP7 ADD MLOAD PUSH2 0x120 DUP8 ADD MLOAD PUSH1 0x60 DUP9 ADD MLOAD PUSH1 0xA0 DUP10 ADD MLOAD PUSH1 0xC0 DUP12 ADD MLOAD PUSH2 0x30F SWAP7 DUP11 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP1 SWAP2 PUSH2 0x16A9 JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MSTORE PUSH1 0x60 DUP7 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP6 ADD MLOAD EQ ISZERO PUSH2 0x35D JUMPI PUSH1 0x3 DUP3 ADD SLOAD PUSH2 0x35D SWAP1 DUP3 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 PUSH2 0x1A09 JUMP JUMPDEST DUP4 MLOAD PUSH1 0xE0 DUP6 ADD MLOAD PUSH1 0x80 DUP7 ADD MLOAD PUSH2 0x373 SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST EQ ISZERO PUSH2 0x40B JUMPI PUSH1 0x3 DUP4 ADD SLOAD PUSH2 0x3A8 SWAP1 DUP3 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 PUSH2 0x1A9E JUMP JUMPDEST DUP5 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x44C58D81365B66DD4B1A7F36C25AA97B8C71C361EE4937ADC1A00000227DB5DD PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST PUSH2 0x415 DUP6 DUP6 PUSH2 0x1B27 JUMP JUMPDEST PUSH2 0x160 DUP5 ADD MLOAD PUSH1 0x60 DUP1 DUP8 ADD MLOAD SWAP1 DUP7 ADD MLOAD PUSH2 0x434 SWAP3 DUP6 SWAP3 SWAP1 SWAP2 PUSH1 0x0 PUSH2 0x1DB8 JUMP JUMPDEST PUSH2 0x44A DUP10 DUP10 DUP4 DUP8 PUSH2 0x160 ADD MLOAD DUP9 PUSH1 0x60 ADD MLOAD PUSH2 0x20F9 JUMP JUMPDEST DUP5 PUSH1 0xA0 ADD MLOAD ISZERO PUSH2 0x467 JUMPI PUSH2 0x462 DUP10 DUP10 DUP10 DUP7 DUP10 DUP10 PUSH2 0x2301 JUMP JUMPDEST PUSH2 0x472 JUMP JUMPDEST PUSH2 0x472 DUP4 DUP7 DUP7 PUSH2 0x250D JUMP JUMPDEST PUSH1 0xE0 DUP5 ADD MLOAD ISZERO PUSH2 0x67C JUMPI PUSH1 0x0 PUSH2 0x487 DUP5 PUSH2 0x25E5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4A2 DUP3 DUP8 PUSH1 0xE0 ADD MLOAD PUSH2 0x267C SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x140 DUP8 ADD MLOAD PUSH1 0x80 DUP10 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x51F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x543 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x55D JUMPI PUSH2 0x557 DUP2 DUP5 PUSH2 0x26BB JUMP JUMPDEST PUSH1 0xE0 DUP9 ADD MSTORE JUMPDEST DUP7 PUSH2 0x140 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF866C319 DUP10 PUSH1 0x80 ADD MLOAD DUP10 PUSH2 0x140 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAE167335 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5D3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x5F7 SWAP2 SWAP1 PUSH2 0x3C53 JUMP JUMPDEST DUP11 PUSH1 0xE0 ADD MLOAD PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x646 SWAP4 SWAP3 SWAP2 SWAP1 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 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x660 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x674 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMPDEST PUSH2 0x6BB CALLER DUP6 PUSH2 0x160 ADD MLOAD PUSH2 0x1E0 ADD MLOAD DUP7 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2712 SWAP1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x160 DUP5 ADD MLOAD PUSH2 0x1E0 ADD MLOAD PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6FD9767600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x6FD97676 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x747 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x75B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP5 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xE413A321E8681D831F4DBCCBCA790D2952B56F977908E45BE37335533E005286 DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD CALLER DUP12 PUSH1 0xA0 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x81F SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 DUP4 ADD MSTORE ISZERO ISZERO PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x83A PUSH2 0x398D JUMP JUMPDEST PUSH2 0x842 PUSH2 0x398D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE DUP5 SLOAD DUP2 MSTORE PUSH2 0x1C0 DUP4 ADD DUP2 SWAP1 MSTORE MLOAD SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x1A0 DUP3 ADD MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH2 0x100 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x2 DUP6 ADD SLOAD DUP1 DUP3 AND PUSH2 0x140 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP6 ADD MSTORE PUSH17 0x100000000000000000000000000000000 SWAP3 DUP4 SWAP1 DIV DUP3 AND PUSH2 0x160 DUP6 ADD MSTORE DUP3 SWAP1 DIV AND PUSH2 0x180 DUP4 ADD MSTORE PUSH1 0x4 DUP1 DUP6 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE PUSH1 0x5 DUP7 ADD SLOAD DUP2 AND PUSH2 0x200 DUP6 ADD MSTORE PUSH1 0x6 DUP7 ADD SLOAD AND PUSH2 0x220 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x3 DUP7 ADD SLOAD SWAP3 SWAP1 SWAP3 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x240 DUP5 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0xB1BF962D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0xB1BF962D SWAP3 DUP3 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x96F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x993 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP DUP2 PUSH1 0x0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x79774338 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9F4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA18 SWAP2 SWAP1 PUSH2 0x3C70 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH2 0x260 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP5 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD TIMESTAMP PUSH5 0xFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP3 DIV AND EQ ISZERO PUSH2 0xA7A JUMPI POP POP JUMP JUMPDEST PUSH2 0xA84 DUP3 DUP3 PUSH2 0x27ED JUMP JUMPDEST PUSH2 0xA8E DUP3 DUP3 PUSH2 0x290F JUMP JUMPDEST POP PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0xAEC DUP8 PUSH1 0x0 ADD MLOAD MLOAD ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0xB28 JUMPI POP PUSH1 0x0 SWAP5 POP DUP5 SWAP4 POP DUP4 SWAP3 POP DUP3 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 POP DUP2 PUSH2 0x1033 JUMP JUMPDEST PUSH2 0xBD7 PUSH1 0x40 MLOAD DUP1 PUSH2 0x260 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND ISZERO PUSH2 0xC1C JUMPI PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0xC09 SWAP2 SWAP1 PUSH2 0x2A8F JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MSTORE PUSH2 0x1C0 DUP4 ADD MSTORE PUSH2 0x1A0 DUP3 ADD MSTORE JUMPDEST DUP8 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0xC0 ADD MLOAD LT ISZERO PUSH2 0xF3B JUMPI PUSH1 0xC0 DUP2 ADD MLOAD DUP9 MLOAD PUSH2 0xC3C SWAP2 PUSH2 0x2B6E JUMP JUMPDEST PUSH2 0xC50 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0xC1C JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP12 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x200 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0xC96 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0xC1C JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP13 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP4 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP3 DUP4 SWAP1 MSTORE PUSH1 0xFF PUSH1 0xA8 DUP5 SWAP1 SHR DUP2 AND PUSH2 0x1E0 DUP7 ADD MSTORE PUSH1 0x30 DUP5 SWAP1 SHR AND PUSH1 0x60 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0xFFFF PUSH1 0x10 DUP6 SWAP1 SHR DUP2 AND PUSH1 0xA0 DUP8 ADD MSTORE SWAP1 SWAP4 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA SWAP3 SWAP1 SWAP3 EXP SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0xD2C JUMPI POP DUP2 PUSH2 0x1E0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD PUSH1 0xFF AND EQ JUMPDEST PUSH2 0xDD0 JUMPI PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDA7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDCB SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0xDD7 JUMP JUMPDEST DUP2 PUSH2 0x180 ADD MLOAD JUMPDEST DUP3 MSTORE PUSH1 0xA0 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0xDF7 JUMPI POP PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0xDF7 SWAP2 PUSH2 0x2BF6 JUMP JUMPDEST ISZERO PUSH2 0xEE7 JUMPI PUSH2 0xE14 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x2C7A JUMP JUMPDEST PUSH1 0x40 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP4 ADD DUP1 MLOAD PUSH2 0xE2D SWAP1 DUP4 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x1E0 DUP4 ADD MLOAD PUSH2 0xE48 SWAP2 PUSH1 0xFF AND SWAP1 PUSH2 0x2D55 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x240 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD ISZERO PUSH2 0xE9E JUMPI DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0xE6E JUMPI DUP2 PUSH1 0x80 ADD MLOAD PUSH2 0xE75 JUMP JUMPDEST DUP2 PUSH2 0x1A0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0xE84 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST DUP3 PUSH2 0x140 ADD DUP2 DUP2 MLOAD PUSH2 0xE96 SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0xEA7 JUMP JUMPDEST PUSH1 0x1 PUSH2 0x220 DUP4 ADD MSTORE JUMPDEST DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0xEBB JUMPI DUP2 PUSH1 0xA0 ADD MLOAD PUSH2 0xEC2 JUMP JUMPDEST DUP2 PUSH2 0x1C0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0xED1 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST DUP3 PUSH2 0x160 ADD DUP2 DUP2 MLOAD PUSH2 0xEE3 SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0xEF7 SWAP2 PUSH2 0x2D66 JUMP JUMPDEST ISZERO PUSH2 0xF2A JUMPI PUSH2 0xF14 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x2DE8 JUMP JUMPDEST DUP3 PUSH2 0x120 ADD DUP2 DUP2 MLOAD PUSH2 0xF26 SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST POP PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0xC1C JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0xF4C JUMPI PUSH1 0x0 PUSH2 0xF67 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x140 ADD MLOAD DUP2 PUSH2 0xF65 JUMPI PUSH2 0xF65 PUSH2 0x3CF8 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0xF7E JUMPI PUSH1 0x0 PUSH2 0xF99 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x160 ADD MLOAD DUP2 PUSH2 0xF97 JUMPI PUSH2 0xF97 PUSH2 0x3CF8 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD ISZERO PUSH2 0xFDB JUMPI PUSH2 0xFD6 DUP2 PUSH2 0x120 ADD MLOAD PUSH2 0xFD0 DUP4 PUSH2 0x160 ADD MLOAD DUP5 PUSH2 0x100 ADD MLOAD PUSH2 0x2F68 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x2FAB JUMP JUMPDEST PUSH2 0xFFD JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH2 0x160 DUP6 ADD MLOAD PUSH2 0x220 SWAP1 SWAP6 ADD MLOAD SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMPDEST SWAP5 SWAP10 SWAP4 SWAP9 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1056 DUP8 PUSH1 0x80 ADD MLOAD DUP10 PUSH2 0x2FE2 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x0 PUSH2 0x1067 DUP3 DUP5 PUSH2 0x3C3B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH8 0xD2F13F7789F0000 DUP9 GT PUSH2 0x1082 JUMPI PUSH2 0x2710 PUSH2 0x1086 JUMP JUMPDEST PUSH2 0x1388 JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1094 DUP4 DUP4 PUSH2 0x2F68 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP12 PUSH1 0x20 ADD MLOAD GT PUSH2 0x10AD JUMPI DUP11 PUSH1 0x20 ADD MLOAD PUSH2 0x10AF JUMP JUMPDEST DUP2 JUMPDEST SWAP5 SWAP9 POP SWAP3 SWAP7 POP SWAP3 SWAP5 POP POP POP POP POP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD DUP2 MSTORE PUSH2 0x114C SWAP1 MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO ISZERO PUSH1 0x20 DUP7 ADD MSTORE POP POP POP ISZERO DUP1 ISZERO DUP1 DUP4 MSTORE DUP4 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x1000000000000000 DUP2 AND ISZERO ISZERO PUSH1 0x60 DUP6 ADD MSTORE PUSH8 0x100000000000000 AND ISZERO ISZERO PUSH1 0x40 DUP5 ADD MSTORE SWAP1 PUSH2 0x1193 JUMPI POP DUP1 PUSH1 0x40 ADD MLOAD JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x120A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP1 PUSH1 0x20 ADD MLOAD ISZERO DUP1 ISZERO PUSH2 0x121F JUMPI POP DUP1 PUSH1 0x60 ADD MLOAD ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x128D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO DUP1 PUSH2 0x12C0 JUMPI POP PUSH8 0xD2F13F7789F0000 DUP3 PUSH1 0x40 ADD MLOAD LT JUMPDEST DUP1 PUSH2 0x1339 JUMPI POP DUP2 PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x7A5D20EA PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1315 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1339 SWAP2 SWAP1 PUSH2 0x3D9A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3539000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x13A7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 DUP3 PUSH1 0x40 ADD MLOAD LT PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3435000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1425 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x10 SHR PUSH2 0xFFFF AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1481 JUMPI POP PUSH1 0x3 DUP4 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP6 SLOAD DUP2 MSTORE PUSH2 0x1481 SWAP2 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0x2BF6 JUMP JUMPDEST ISZERO ISZERO PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3436000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH2 0x14F6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP DUP2 PUSH1 0x20 ADD MLOAD PUSH1 0x0 EQ ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3437000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x156E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE DUP6 SLOAD SWAP2 DUP3 SWAP1 MSTORE SWAP2 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0xE0 DUP7 ADD MLOAD PUSH1 0x0 SWAP6 DUP7 SWAP6 DUP7 SWAP6 DUP7 SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP5 SWAP2 SHR PUSH2 0xFFFF AND SWAP3 PUSH1 0xFF AND ISZERO PUSH2 0x1698 JUMPI PUSH1 0xE0 DUP10 ADD DUP1 MLOAD PUSH1 0xFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP15 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD SWAP4 MLOAD DUP3 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP3 MSTORE DUP14 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH7 0x1000000000000 SWAP1 SWAP4 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 PUSH2 0x162C SWAP3 SWAP2 DUP3 AND SWAP2 PUSH1 0xA8 SWAP2 SWAP1 SWAP2 SHR AND PUSH2 0x2D55 JUMP JUMPDEST ISZERO PUSH2 0x1676 JUMPI PUSH1 0xE0 DUP11 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP14 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH5 0x100000000 SWAP1 DIV PUSH2 0xFFFF AND SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x1676 JUMPI DUP1 SWAP3 POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x1696 JUMPI DUP1 SWAP2 POP JUMPDEST POP JUMPDEST SWAP3 SWAP11 SWAP1 SWAP10 POP SWAP2 SWAP8 POP SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1719 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1A0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1785 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x17A9 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1817 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x183B SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH1 0x20 DUP3 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 ADD SWAP1 MSTORE DUP13 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x30 SHR PUSH1 0xFF AND PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1C0 DUP12 ADD MLOAD MLOAD PUSH1 0x30 SHR PUSH1 0xFF AND PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0xA SWAP1 DUP2 EXP PUSH1 0xE0 DUP5 ADD MSTORE EXP PUSH2 0x100 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP13 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x98 SHR PUSH2 0xFFFF AND PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD DUP2 MLOAD PUSH2 0x18B8 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST DUP2 PUSH1 0xE0 ADD MLOAD DUP10 DUP4 PUSH1 0x20 ADD MLOAD PUSH2 0x18CD SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x18D7 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x18E1 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x18F2 SWAP1 DUP8 PUSH2 0x2F68 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE DUP8 LT ISZERO PUSH2 0x195F JUMPI PUSH2 0x120 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x1954 SWAP2 DUP9 SWAP2 PUSH2 0x1922 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x100 DUP5 ADD MLOAD PUSH2 0x120 DUP6 ADD MLOAD DUP6 MLOAD PUSH2 0x193A SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x1944 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x194E SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP1 PUSH2 0x311F JUMP JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x1973 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x120 DUP3 ADD MSTORE PUSH2 0x140 DUP2 ADD DUP9 SWAP1 MSTORE JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD ISZERO PUSH2 0x19E5 JUMPI PUSH2 0x120 DUP2 ADD MLOAD PUSH2 0x198E SWAP1 DUP8 PUSH2 0x311F JUMP JUMPDEST DUP2 PUSH2 0x120 ADD MLOAD PUSH2 0x199E SWAP2 SWAP1 PUSH2 0x3DF2 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x160 DUP3 ADD MLOAD PUSH2 0x19B5 SWAP2 SWAP1 PUSH2 0x2F68 JUMP JUMPDEST PUSH2 0x180 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP3 ADD MLOAD PUSH2 0x19CD SWAP2 SWAP1 PUSH2 0x3DF2 JUMP JUMPDEST DUP2 PUSH2 0x140 ADD MLOAD DUP3 PUSH2 0x180 ADD MLOAD SWAP4 POP SWAP4 POP SWAP4 POP POP PUSH2 0x19FB JUMP JUMPDEST DUP1 PUSH2 0x120 ADD MLOAD DUP2 PUSH2 0x140 ADD MLOAD PUSH1 0x0 SWAP4 POP SWAP4 POP SWAP4 POP POP JUMPDEST SWAP9 POP SWAP9 POP SWAP9 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 DUP4 LT PUSH2 0x1A78 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP PUSH1 0x1 DUP3 DUP2 SHL SHL DUP2 ISZERO PUSH2 0x1A90 JUMPI DUP4 SLOAD DUP2 OR DUP5 SSTORE PUSH2 0x1A98 JUMP JUMPDEST DUP4 SLOAD DUP2 NOT AND DUP5 SSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 DUP4 LT PUSH2 0x1B0D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP PUSH1 0x1 DUP3 DUP2 SHL DUP2 ADD SHL DUP2 ISZERO PUSH2 0x1A90 JUMPI DUP4 SLOAD DUP2 OR DUP5 SSTORE PUSH2 0x1A98 JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x20 ADD MLOAD LT PUSH2 0x1BFF JUMPI PUSH2 0x160 DUP2 ADD MLOAD PUSH2 0x220 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH2 0x140 SWAP1 SWAP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xF5298ACA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x44 DUP5 ADD MSTORE AND SWAP1 PUSH4 0xF5298ACA SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1BCD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1BF1 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0x160 DUP3 ADD MLOAD PUSH1 0x20 ADD MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD ISZERO PUSH2 0x1CCF JUMPI PUSH2 0x160 DUP2 ADD MLOAD PUSH2 0x220 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x140 SWAP1 SWAP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xF5298ACA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x44 DUP5 ADD MSTORE AND SWAP1 PUSH4 0xF5298ACA SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1CA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1CC4 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0x160 DUP3 ADD MLOAD PUSH1 0x20 ADD MSTORE JUMPDEST DUP1 PUSH2 0x160 ADD MLOAD PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9DC29FAC DUP4 PUSH1 0x80 ADD MLOAD DUP4 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x60 ADD MLOAD PUSH2 0x1D0E SWAP2 SWAP1 PUSH2 0x3DF2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1D7D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DA1 SWAP2 SWAP1 PUSH2 0x3E09 JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MLOAD PUSH1 0xA0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xC0 ADD MSTORE JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x1DE3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0x1DF7 SWAP2 PUSH2 0x26BB JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x7 DUP9 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x8 DUP12 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP9 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP12 ADD MLOAD SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 MLOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP11 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x1A0 DUP10 ADD MLOAD SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x1E0 DUP10 ADD MLOAD DUP2 AND PUSH2 0x100 DUP6 ADD MSTORE SWAP2 MLOAD PUSH32 0xA589870900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0xA5898709 SWAP2 PUSH2 0x1F58 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE 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 PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 SWAP2 POP DUP1 DUP3 DUP7 ADD MLOAD AND DUP3 DUP6 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F75 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F99 SWAP2 SWAP1 PUSH2 0x3E2D JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP1 DUP3 MSTORE PUSH2 0x1FAF SWAP1 PUSH2 0x314A JUMP JUMPDEST PUSH1 0x1 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x1FF2 SWAP1 PUSH2 0x314A JUMP JUMPDEST PUSH1 0x3 DUP8 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x2043 SWAP1 PUSH2 0x314A JUMP JUMPDEST PUSH1 0x2 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH2 0x100 DUP11 ADD MLOAD PUSH2 0x140 DUP12 ADD MLOAD DUP4 MLOAD SWAP7 DUP8 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0x804C9B842B2748A22BB64B345453A3DE7CA54A6CA45CE00D415894979E22897A SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0x2118 SWAP1 DUP9 DUP9 PUSH2 0x31F0 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x22F8 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH2 0x1C0 DUP7 ADD MLOAD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 SWAP1 PUSH2 0x219A SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0x2180 SWAP2 SWAP1 PUSH2 0x3DF2 JUMP JUMPDEST PUSH2 0x218B SWAP1 PUSH1 0xA PUSH2 0x3F7B JUMP JUMPDEST PUSH2 0x2195 SWAP1 DUP8 PUSH2 0x3DB7 JUMP JUMPDEST PUSH2 0x314A JUMP JUMPDEST SWAP1 POP DUP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT PUSH2 0x224A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP12 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE MLOAD SWAP2 DUP3 MSTORE PUSH32 0xAEF84D3B40895FD58C561F3998000F0583ABB992A52FBDC99ACE8E8DE4D676A5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x22F5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2256 DUP3 DUP5 PUSH2 0x3F87 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP14 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 SWAP1 SWAP6 AND SWAP5 DUP6 OR SWAP1 SSTORE SWAP1 MLOAD DUP4 DUP2 MSTORE SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH32 0xAEF84D3B40895FD58C561F3998000F0583ABB992A52FBDC99ACE8E8DE4D676A5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMPDEST POP POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x140 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2373 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2397 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MLOAD PUSH1 0x80 DUP1 DUP7 ADD MLOAD SWAP1 DUP6 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xF866C31900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 SWAP4 POP AND SWAP1 PUSH4 0xF866C319 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2420 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2434 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x22F8 JUMPI CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP3 MSTORE DUP6 SLOAD DUP2 MSTORE PUSH1 0x4 DUP7 ADD SLOAD PUSH2 0x2488 SWAP2 DUP11 SWAP2 DUP11 SWAP2 DUP6 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x32A5 JUMP JUMPDEST ISZERO PUSH2 0x2503 JUMPI PUSH1 0x3 DUP6 ADD SLOAD PUSH2 0x24BC SWAP1 DUP3 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x1 PUSH2 0x1A9E JUMP JUMPDEST PUSH1 0x40 DUP1 DUP6 ADD MLOAD SWAP1 MLOAD CALLER SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH31 0x58A56EA94653CDF4F152D227ACE22D4C00AD99E2A43F58CB7D9E3FEB295F2 SWAP1 PUSH1 0x0 SWAP1 LOG3 JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2518 DUP5 PUSH2 0x832 JUMP JUMPDEST SWAP1 POP PUSH2 0x2524 DUP5 DUP3 PUSH2 0xA4B JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x253F SWAP2 DUP7 SWAP2 DUP5 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x1DB8 JUMP JUMPDEST PUSH2 0x140 DUP3 ADD MLOAD PUSH1 0x80 DUP1 DUP6 ADD MLOAD SWAP1 DUP5 ADD MLOAD PUSH2 0x100 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xD7020D0A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x64 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0xD7020D0A SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x25D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2503 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x262B JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x266F SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x2669 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x34E7 JUMP JUMPDEST SWAP1 PUSH2 0x26BB JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x26A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x26F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x277D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x2787 DUP6 PUSH2 0x3524 JUMP JUMPDEST PUSH2 0x156E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1201 JUMP JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD ISZERO PUSH2 0x287D JUMPI PUSH1 0x0 PUSH2 0x280E DUP3 PUSH2 0x160 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x34E7 JUMP JUMPDEST SWAP1 POP PUSH2 0x2827 DUP3 PUSH1 0xE0 ADD MLOAD DUP3 PUSH2 0x26BB SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x100 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x2838 SWAP1 PUSH2 0x314A JUMP JUMPDEST PUSH1 0x1 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1DB4 JUMPI PUSH1 0x0 PUSH2 0x289A DUP3 PUSH2 0x180 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x35EE JUMP JUMPDEST SWAP1 POP PUSH2 0x28B4 DUP3 PUSH2 0x120 ADD MLOAD DUP3 PUSH2 0x26BB SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x140 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x28C5 SWAP1 PUSH2 0x314A JUMP JUMPDEST PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH2 0x2948 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x1A0 DUP3 ADD MLOAD PUSH2 0x2957 JUMPI POP POP POP JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x2968 SWAP2 PUSH2 0x26BB JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x140 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x297E SWAP2 PUSH2 0x26BB JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x260 DUP4 ADD MLOAD PUSH2 0x240 DUP5 ADD MLOAD PUSH2 0x29A6 SWAP3 SWAP2 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x35F7 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x29BB SWAP2 PUSH2 0x26BB JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x29D7 SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST PUSH2 0x29E1 SWAP2 SWAP1 PUSH2 0x3DF2 JUMP JUMPDEST PUSH2 0x29EB SWAP2 SWAP1 PUSH2 0x3DF2 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP4 ADD MLOAD PUSH2 0x2A02 SWAP2 SWAP1 PUSH2 0x2F68 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE ISZERO PUSH2 0x2A8A JUMPI PUSH2 0x2A2D PUSH2 0x2195 DUP4 PUSH2 0x100 ADD MLOAD DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0x267C SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x8 DUP5 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x2A53 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3FB8 JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST POP POP POP JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH7 0x1000000000000 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x2B53 JUMPI PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B2C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2B50 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP5 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP8 PUSH3 0x10000 SWAP1 SWAP3 DIV AND SWAP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x2BE0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP POP DUP2 MLOAD PUSH1 0x1 DUP3 SWAP1 SHL SHR PUSH1 0x3 AND ISZERO ISZERO JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x2C68 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL DUP3 ADD SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2C86 DUP6 PUSH2 0x25E5 JUMP JUMPDEST PUSH1 0x4 DUP7 DUP2 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 DUP8 SWAP3 PUSH2 0x2D2C SWAP3 DUP7 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D08 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2669 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0x2D36 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 PUSH2 0x2D47 JUMPI PUSH2 0x2D47 PUSH2 0x3CF8 JUMP JUMPDEST DIV SWAP3 POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x266F JUMPI POP POP EQ SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x2DD8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x6 DUP4 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E5E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2E82 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x2EA0 JUMPI PUSH2 0x2E9D PUSH2 0x2E96 DUP7 PUSH2 0x373E JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x26BB JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x5 DUP6 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F12 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F36 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0x2F40 SWAP1 DUP3 PUSH2 0x3C3B JUMP JUMPDEST SWAP1 POP PUSH2 0x2F4C DUP2 DUP6 PUSH2 0x3CBB JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 PUSH2 0x2F5D JUMPI PUSH2 0x2F5D PUSH2 0x3CF8 JUMP JUMPDEST DIV SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x2F9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH8 0xDE0B6B3A7640000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x2FCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3059 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x307D SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0x220 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x30F0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3114 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH2 0x2710 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x3139 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x31EC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1201 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x31FE DUP7 PUSH2 0x37C2 JUMP JUMPDEST ISZERO PUSH2 0x3295 JUMPI PUSH1 0x0 PUSH2 0x322F DUP8 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA PUSH2 0x3806 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 DUP5 MSTORE DUP11 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP3 MLOAD SWAP4 DUP5 ADD SWAP1 SWAP3 MSTORE SWAP1 SLOAD SWAP2 DUP3 SWAP1 MSTORE SWAP3 SWAP4 POP PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x3291 JUMPI PUSH1 0x1 SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x10BD SWAP1 POP JUMP JUMPDEST POP POP POP JUMPDEST POP PUSH1 0x0 SWAP6 DUP7 SWAP6 POP DUP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND ISZERO PUSH2 0x34CF JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x7535D246 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3306 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x332A SWAP2 SWAP1 PUSH2 0x3C53 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3374 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3398 SWAP2 SWAP1 PUSH2 0x3C53 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x33E5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3409 SWAP2 SWAP1 PUSH2 0x3C53 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x91D1485400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0xD1D2CF869016112A9AF1107BCF43C3759DAF22CF734AAD47D0C9C726E33BC782 PUSH1 0x4 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x91D14854 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x349B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x34BF SWAP2 SWAP1 PUSH2 0x3D9A JUMP JUMPDEST PUSH2 0x34CD JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x34DE JUMP JUMPDEST POP JUMPDEST PUSH2 0x34DB DUP7 DUP7 DUP7 DUP7 PUSH2 0x384A JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x34FB PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x3DF2 JUMP JUMPDEST PUSH2 0x3505 SWAP1 DUP6 PUSH2 0x3CBB JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x2D4D DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x3C3B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3564 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x35A3 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x35DD JUMPI PUSH2 0x359E PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x352B JUMP JUMPDEST PUSH2 0x2676 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x35D4 JUMPI PUSH2 0x35D4 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x352B JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x2676 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY POP POP PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x266F DUP4 DUP4 TIMESTAMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x360B PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x3DF2 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x3627 JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x266F JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x365D JUMPI PUSH1 0x0 PUSH2 0x3662 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x3676 DUP11 DUP1 PUSH2 0x26BB JUMP JUMPDEST DUP2 PUSH2 0x3683 JUMPI PUSH2 0x3683 PUSH2 0x3CF8 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x3695 DUP4 DUP12 PUSH2 0x26BB JUMP JUMPDEST DUP2 PUSH2 0x36A2 JUMPI PUSH2 0x36A2 PUSH2 0x3CF8 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x36B2 DUP7 DUP9 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x36BC SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x36D0 DUP9 DUP11 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x36DA SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x36E4 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x36FB DUP11 DUP16 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x3705 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH2 0x371B SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x3C3B JUMP JUMPDEST PUSH2 0x3725 SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST PUSH2 0x372F SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x3784 JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x266F SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x2669 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x35EE JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x266F JUMPI POP PUSH2 0x37FE PUSH1 0x1 DUP3 PUSH2 0x3DF2 JUMP JUMPDEST AND ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 DUP3 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD NOT DUP2 AND DUP3 JUMPDEST PUSH1 0x2 SWAP2 SWAP1 SWAP2 SHR SWAP1 DUP2 ISZERO PUSH2 0x34DE JUMPI PUSH1 0x1 ADD PUSH2 0x3835 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3858 DUP3 MLOAD PUSH2 0xFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x3864 JUMPI POP PUSH1 0x0 PUSH2 0x2D4D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND PUSH2 0x38A3 JUMPI POP PUSH1 0x1 PUSH2 0x2D4D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x38C0 SWAP1 DUP8 DUP8 PUSH2 0x31F0 JUMP JUMPDEST POP POP SWAP1 POP DUP1 ISZERO DUP1 ISZERO PUSH2 0x38DB JUMPI POP DUP3 MLOAD PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND ISZERO JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE 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 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3988 PUSH2 0x398D JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x280 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3A11 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3A85 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3AAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3ABB DUP2 PUSH2 0x3A8B JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3AAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3ABB DUP2 PUSH2 0x3AC0 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3ABB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP8 SUB PUSH2 0x1A0 DUP2 SLT ISZERO PUSH2 0x3B04 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH2 0x120 DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP4 ADD SLT ISZERO PUSH2 0x3B4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3B57 PUSH2 0x3A3A JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD DUP3 MSTORE PUSH1 0xA0 DUP9 ADD CALLDATALOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x3B76 PUSH1 0xC0 DUP10 ADD PUSH2 0x3AB0 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x3B87 PUSH1 0xE0 DUP10 ADD PUSH2 0x3AB0 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x100 PUSH2 0x3B9A DUP2 DUP11 ADD PUSH2 0x3AB0 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x3BAA DUP3 DUP11 ADD PUSH2 0x3ACE JUMP JUMPDEST PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x3BBC PUSH2 0x140 DUP11 ADD PUSH2 0x3AB0 JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x3BCE PUSH2 0x160 DUP11 ADD PUSH2 0x3AD9 JUMP JUMPDEST PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x3BE0 PUSH2 0x180 DUP11 ADD PUSH2 0x3AB0 JUMP JUMPDEST SWAP1 DUP4 ADD MSTORE POP SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 POP SWAP3 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3C05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x3C4E JUMPI PUSH2 0x3C4E PUSH2 0x3C0C JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3C65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x266F DUP2 PUSH2 0x3A8B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3C86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3CB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x3CF3 JUMPI PUSH2 0x3CF3 PUSH2 0x3C0C JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3D54 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x3D38 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x3D66 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3DAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x266F DUP2 PUSH2 0x3AC0 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3DED JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x3E04 JUMPI PUSH2 0x3E04 PUSH2 0x3C0C JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3E1C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3E42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x3EB4 JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x3E9A JUMPI PUSH2 0x3E9A PUSH2 0x3C0C JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x3EA7 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x3E60 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3ECB JUMPI POP PUSH1 0x1 PUSH2 0x2BF0 JUMP JUMPDEST DUP2 PUSH2 0x3ED8 JUMPI POP PUSH1 0x0 PUSH2 0x2BF0 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x3EEE JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x3EF8 JUMPI PUSH2 0x3F14 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x2BF0 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x3F09 JUMPI PUSH2 0x3F09 PUSH2 0x3C0C JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x2BF0 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x3F37 JUMPI POP DUP2 DUP2 EXP PUSH2 0x2BF0 JUMP JUMPDEST PUSH2 0x3F41 DUP4 DUP4 PUSH2 0x3E5B JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x3F73 JUMPI PUSH2 0x3F73 PUSH2 0x3C0C JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x266F DUP4 DUP4 PUSH2 0x3EBC JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x3FB0 JUMPI PUSH2 0x3FB0 PUSH2 0x3C0C JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x3FE3 JUMPI PUSH2 0x3FE3 PUSH2 0x3C0C JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ADD OR 0xCC PUSH2 0x18A4 PUSH18 0x34965AEE898D0743FED6F01D2D313D158E20 PUSH25 0xA86EBBAB403464736F6C634300080A00330000000000000000 ","sourceMap":"1399:19850:83:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1399:19850:83;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@CLOSE_FACTOR_HF_THRESHOLD_16081":{"entryPoint":null,"id":16081,"parameterSlots":0,"returnSlots":0},"@MAX_LIQUIDATION_CLOSE_FACTOR_16077":{"entryPoint":null,"id":16077,"parameterSlots":0,"returnSlots":0},"@_accrueToTreasury_18152":{"entryPoint":10511,"id":18152,"parameterSlots":2,"returnSlots":0},"@_burnCollateralATokens_16547":{"entryPoint":9485,"id":16547,"parameterSlots":3,"returnSlots":0},"@_burnDebtTokens_16733":{"entryPoint":6951,"id":16733,"parameterSlots":2,"returnSlots":0},"@_calculateAvailableCollateralToLiquidate_17170":{"entryPoint":5801,"id":17170,"parameterSlots":8,"returnSlots":3},"@_calculateDebt_16801":{"entryPoint":4160,"id":16801,"parameterSlots":3,"returnSlots":3},"@_getConfigurationData_16914":{"entryPoint":5493,"id":16914,"parameterSlots":3,"returnSlots":4},"@_getFirstAssetIdByMask_12367":{"entryPoint":14342,"id":12367,"parameterSlots":2,"returnSlots":1},"@_getUserBalanceInBaseCurrency_15854":{"entryPoint":11386,"id":15854,"parameterSlots":4,"returnSlots":1},"@_getUserDebtInBaseCurrency_15811":{"entryPoint":11752,"id":15811,"parameterSlots":4,"returnSlots":1},"@_liquidateATokens_16641":{"entryPoint":8961,"id":16641,"parameterSlots":6,"returnSlots":0},"@_updateIndexes_18233":{"entryPoint":10221,"id":18233,"parameterSlots":2,"returnSlots":0},"@cache_18376":{"entryPoint":2098,"id":18376,"parameterSlots":1,"returnSlots":1},"@calculateCompoundedInterest_21079":{"entryPoint":13815,"id":21079,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_21097":{"entryPoint":13806,"id":21097,"parameterSlots":2,"returnSlots":1},"@calculateLinearInterest_20956":{"entryPoint":13543,"id":20956,"parameterSlots":2,"returnSlots":1},"@calculateUserAccountData_15713":{"entryPoint":2774,"id":15713,"parameterSlots":4,"returnSlots":6},"@executeLiquidationCall_16492":{"entryPoint":156,"id":16492,"parameterSlots":5,"returnSlots":0},"@getDebtCeiling_11491":{"entryPoint":null,"id":11491,"parameterSlots":1,"returnSlots":1},"@getDecimals_10933":{"entryPoint":null,"id":10933,"parameterSlots":1,"returnSlots":1},"@getEModeCategory_11647":{"entryPoint":null,"id":11647,"parameterSlots":1,"returnSlots":1},"@getEModeConfiguration_14594":{"entryPoint":10895,"id":14594,"parameterSlots":2,"returnSlots":3},"@getFlags_11757":{"entryPoint":null,"id":11757,"parameterSlots":1,"returnSlots":5},"@getIsolationModeState_12262":{"entryPoint":12784,"id":12262,"parameterSlots":3,"returnSlots":3},"@getLastTransferResult_117":{"entryPoint":13604,"id":117,"parameterSlots":1,"returnSlots":1},"@getLiquidationBonus_10881":{"entryPoint":null,"id":10881,"parameterSlots":1,"returnSlots":1},"@getLiquidationProtocolFee_11543":{"entryPoint":null,"id":11543,"parameterSlots":1,"returnSlots":1},"@getLiquidationThreshold_10829":{"entryPoint":null,"id":10829,"parameterSlots":1,"returnSlots":1},"@getLtv_10777":{"entryPoint":null,"id":10777,"parameterSlots":1,"returnSlots":1},"@getNormalizedDebt_17751":{"entryPoint":14142,"id":17751,"parameterSlots":1,"returnSlots":1},"@getNormalizedIncome_17715":{"entryPoint":9701,"id":17715,"parameterSlots":1,"returnSlots":1},"@getParams_11823":{"entryPoint":null,"id":11823,"parameterSlots":1,"returnSlots":6},"@getReserveFactor_11335":{"entryPoint":null,"id":11335,"parameterSlots":1,"returnSlots":1},"@getUserCurrentDebt_12679":{"entryPoint":12258,"id":12679,"parameterSlots":2,"returnSlots":2},"@isBorrowing_12045":{"entryPoint":11622,"id":12045,"parameterSlots":2,"returnSlots":1},"@isEmpty_12194":{"entryPoint":null,"id":12194,"parameterSlots":1,"returnSlots":1},"@isInEModeCategory_14614":{"entryPoint":11605,"id":14614,"parameterSlots":2,"returnSlots":1},"@isUsingAsCollateralAny_12131":{"entryPoint":null,"id":12131,"parameterSlots":1,"returnSlots":1},"@isUsingAsCollateralOne_12114":{"entryPoint":14274,"id":12114,"parameterSlots":1,"returnSlots":1},"@isUsingAsCollateralOrBorrowing_12010":{"entryPoint":11118,"id":12010,"parameterSlots":2,"returnSlots":1},"@isUsingAsCollateral_12083":{"entryPoint":11254,"id":12083,"parameterSlots":2,"returnSlots":1},"@percentDiv_21131":{"entryPoint":12575,"id":21131,"parameterSlots":2,"returnSlots":1},"@percentMul_21119":{"entryPoint":12136,"id":21119,"parameterSlots":2,"returnSlots":1},"@rayDiv_21198":{"entryPoint":9852,"id":21198,"parameterSlots":2,"returnSlots":1},"@rayMul_21186":{"entryPoint":9915,"id":21186,"parameterSlots":2,"returnSlots":1},"@safeTransferFrom_106":{"entryPoint":10002,"id":106,"parameterSlots":4,"returnSlots":0},"@setBorrowing_11924":{"entryPoint":6665,"id":11924,"parameterSlots":3,"returnSlots":0},"@setUsingAsCollateral_11975":{"entryPoint":6814,"id":11975,"parameterSlots":3,"returnSlots":0},"@toUint128_1626":{"entryPoint":12618,"id":1626,"parameterSlots":1,"returnSlots":1},"@updateInterestRates_18024":{"entryPoint":7608,"id":18024,"parameterSlots":5,"returnSlots":0},"@updateIsolatedDebtIfIsolated_15977":{"entryPoint":8441,"id":15977,"parameterSlots":5,"returnSlots":0},"@updateState_17793":{"entryPoint":2635,"id":17793,"parameterSlots":2,"returnSlots":0},"@validateAutomaticUseAsCollateral_20907":{"entryPoint":12965,"id":20907,"parameterSlots":5,"returnSlots":1},"@validateLiquidationCall_20459":{"entryPoint":4294,"id":20459,"parameterSlots":3,"returnSlots":0},"@validateUseAsCollateral_20844":{"entryPoint":14410,"id":20844,"parameterSlots":4,"returnSlots":1},"@wadDiv_21174":{"entryPoint":12203,"id":21174,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":15024,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bool":{"entryPoint":15054,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":15443,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":15770,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$4860_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr":{"entryPoint":15082,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":15347,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256_fromMemory":{"entryPoint":15881,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory":{"entryPoint":15917,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory":{"entryPoint":15472,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_uint8":{"entryPoint":15065,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address__to_t_bytes32_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_rational_0_by_1__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":15655,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_address_t_bool__to_t_uint256_t_uint256_t_address_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"allocate_memory":{"entryPoint":14906,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":16312,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":15419,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":15799,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":15963,"id":null,"parameterSlots":2,"returnSlots":2},"checked_exp_t_uint256_t_uint256":{"entryPoint":16251,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":16060,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":15547,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint128":{"entryPoint":16263,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":15858,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":15372,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":15608,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":14987,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_bool":{"entryPoint":15040,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:14010:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"55:363:201","statements":[{"nodeType":"YulAssignment","src":"65:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"81:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"75:5:201"},"nodeType":"YulFunctionCall","src":"75:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"65:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"93:37:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"115:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"123:6:201","type":"","value":"0x0120"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"111:3:201"},"nodeType":"YulFunctionCall","src":"111:19:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"97:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"213:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"234:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"237:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"227:6:201"},"nodeType":"YulFunctionCall","src":"227:88:201"},"nodeType":"YulExpressionStatement","src":"227:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"335:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"338:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"328:6:201"},"nodeType":"YulFunctionCall","src":"328:15:201"},"nodeType":"YulExpressionStatement","src":"328:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"363:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"366:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"356:6:201"},"nodeType":"YulFunctionCall","src":"356:15:201"},"nodeType":"YulExpressionStatement","src":"356:15:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"148:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"160:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"145:2:201"},"nodeType":"YulFunctionCall","src":"145:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"184:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"196:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"181:2:201"},"nodeType":"YulFunctionCall","src":"181:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"142:2:201"},"nodeType":"YulFunctionCall","src":"142:62:201"},"nodeType":"YulIf","src":"139:242:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"397:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"401:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"390:6:201"},"nodeType":"YulFunctionCall","src":"390:22:201"},"nodeType":"YulExpressionStatement","src":"390:22:201"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"44:6:201","type":""}],"src":"14:404:201"},{"body":{"nodeType":"YulBlock","src":"468:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"555:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"564:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"567:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"557:6:201"},"nodeType":"YulFunctionCall","src":"557:12:201"},"nodeType":"YulExpressionStatement","src":"557:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"491:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"502:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"509:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"498:3:201"},"nodeType":"YulFunctionCall","src":"498:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"488:2:201"},"nodeType":"YulFunctionCall","src":"488:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"481:6:201"},"nodeType":"YulFunctionCall","src":"481:73:201"},"nodeType":"YulIf","src":"478:93:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"457:5:201","type":""}],"src":"423:154:201"},{"body":{"nodeType":"YulBlock","src":"631:85:201","statements":[{"nodeType":"YulAssignment","src":"641:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"663:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"650:12:201"},"nodeType":"YulFunctionCall","src":"650:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"641:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"704:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"679:24:201"},"nodeType":"YulFunctionCall","src":"679:31:201"},"nodeType":"YulExpressionStatement","src":"679:31:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"610:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"621:5:201","type":""}],"src":"582:134:201"},{"body":{"nodeType":"YulBlock","src":"763:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"817:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"826:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"829:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"819:6:201"},"nodeType":"YulFunctionCall","src":"819:12:201"},"nodeType":"YulExpressionStatement","src":"819:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"786:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"807:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"800:6:201"},"nodeType":"YulFunctionCall","src":"800:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"793:6:201"},"nodeType":"YulFunctionCall","src":"793:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"783:2:201"},"nodeType":"YulFunctionCall","src":"783:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"776:6:201"},"nodeType":"YulFunctionCall","src":"776:40:201"},"nodeType":"YulIf","src":"773:60:201"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"752:5:201","type":""}],"src":"721:118:201"},{"body":{"nodeType":"YulBlock","src":"890:82:201","statements":[{"nodeType":"YulAssignment","src":"900:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"922:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"909:12:201"},"nodeType":"YulFunctionCall","src":"909:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"900:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"960:5:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"938:21:201"},"nodeType":"YulFunctionCall","src":"938:28:201"},"nodeType":"YulExpressionStatement","src":"938:28:201"}]},"name":"abi_decode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"869:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"880:5:201","type":""}],"src":"844:128:201"},{"body":{"nodeType":"YulBlock","src":"1024:109:201","statements":[{"nodeType":"YulAssignment","src":"1034:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1056:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1043:12:201"},"nodeType":"YulFunctionCall","src":"1043:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1034:5:201"}]},{"body":{"nodeType":"YulBlock","src":"1111:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1120:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1123:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1113:6:201"},"nodeType":"YulFunctionCall","src":"1113:12:201"},"nodeType":"YulExpressionStatement","src":"1113:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1085:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1096:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1103:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1092:3:201"},"nodeType":"YulFunctionCall","src":"1092:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1082:2:201"},"nodeType":"YulFunctionCall","src":"1082:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1075:6:201"},"nodeType":"YulFunctionCall","src":"1075:35:201"},"nodeType":"YulIf","src":"1072:55:201"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1003:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1014:5:201","type":""}],"src":"977:156:201"},{"body":{"nodeType":"YulBlock","src":"1513:1132:201","statements":[{"nodeType":"YulVariableDeclaration","src":"1523:33:201","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1537:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1546:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1533:3:201"},"nodeType":"YulFunctionCall","src":"1533:23:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1527:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1581:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1590:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1593:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1583:6:201"},"nodeType":"YulFunctionCall","src":"1583:12:201"},"nodeType":"YulExpressionStatement","src":"1583:12:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1572:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"1576:3:201","type":"","value":"416"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1568:3:201"},"nodeType":"YulFunctionCall","src":"1568:12:201"},"nodeType":"YulIf","src":"1565:32:201"},{"nodeType":"YulAssignment","src":"1606:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1629:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1616:12:201"},"nodeType":"YulFunctionCall","src":"1616:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1606:6:201"}]},{"nodeType":"YulAssignment","src":"1648:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1675:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1686:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1671:3:201"},"nodeType":"YulFunctionCall","src":"1671:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1658:12:201"},"nodeType":"YulFunctionCall","src":"1658:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1648:6:201"}]},{"nodeType":"YulAssignment","src":"1699:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1726:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1737:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1722:3:201"},"nodeType":"YulFunctionCall","src":"1722:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1709:12:201"},"nodeType":"YulFunctionCall","src":"1709:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1699:6:201"}]},{"nodeType":"YulAssignment","src":"1750:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1777:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1788:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1773:3:201"},"nodeType":"YulFunctionCall","src":"1773:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1760:12:201"},"nodeType":"YulFunctionCall","src":"1760:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1750:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1801:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1811:6:201","type":"","value":"0x0120"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1805:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1914:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1923:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1926:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1916:6:201"},"nodeType":"YulFunctionCall","src":"1916:12:201"},"nodeType":"YulExpressionStatement","src":"1916:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"1837:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"1841:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1833:3:201"},"nodeType":"YulFunctionCall","src":"1833:75:201"},{"name":"_2","nodeType":"YulIdentifier","src":"1910:2:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1829:3:201"},"nodeType":"YulFunctionCall","src":"1829:84:201"},"nodeType":"YulIf","src":"1826:104:201"},{"nodeType":"YulVariableDeclaration","src":"1939:30:201","value":{"arguments":[],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"1952:15:201"},"nodeType":"YulFunctionCall","src":"1952:17:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1943:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1985:5:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2009:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2020:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2005:3:201"},"nodeType":"YulFunctionCall","src":"2005:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1992:12:201"},"nodeType":"YulFunctionCall","src":"1992:33:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1978:6:201"},"nodeType":"YulFunctionCall","src":"1978:48:201"},"nodeType":"YulExpressionStatement","src":"1978:48:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2046:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2053:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2042:3:201"},"nodeType":"YulFunctionCall","src":"2042:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2075:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2086:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2071:3:201"},"nodeType":"YulFunctionCall","src":"2071:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2058:12:201"},"nodeType":"YulFunctionCall","src":"2058:33:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2035:6:201"},"nodeType":"YulFunctionCall","src":"2035:57:201"},"nodeType":"YulExpressionStatement","src":"2035:57:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2112:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2119:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2108:3:201"},"nodeType":"YulFunctionCall","src":"2108:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2147:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2158:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2143:3:201"},"nodeType":"YulFunctionCall","src":"2143:19:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2124:18:201"},"nodeType":"YulFunctionCall","src":"2124:39:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2101:6:201"},"nodeType":"YulFunctionCall","src":"2101:63:201"},"nodeType":"YulExpressionStatement","src":"2101:63:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2184:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2191:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2180:3:201"},"nodeType":"YulFunctionCall","src":"2180:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2219:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2230:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2215:3:201"},"nodeType":"YulFunctionCall","src":"2215:19:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2196:18:201"},"nodeType":"YulFunctionCall","src":"2196:39:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2173:6:201"},"nodeType":"YulFunctionCall","src":"2173:63:201"},"nodeType":"YulExpressionStatement","src":"2173:63:201"},{"nodeType":"YulVariableDeclaration","src":"2245:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2255:3:201","type":"","value":"256"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"2249:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2278:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2285:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2274:3:201"},"nodeType":"YulFunctionCall","src":"2274:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2314:9:201"},{"name":"_3","nodeType":"YulIdentifier","src":"2325:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2310:3:201"},"nodeType":"YulFunctionCall","src":"2310:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2291:18:201"},"nodeType":"YulFunctionCall","src":"2291:38:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2267:6:201"},"nodeType":"YulFunctionCall","src":"2267:63:201"},"nodeType":"YulExpressionStatement","src":"2267:63:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2350:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2357:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2346:3:201"},"nodeType":"YulFunctionCall","src":"2346:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2383:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2394:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2379:3:201"},"nodeType":"YulFunctionCall","src":"2379:18:201"}],"functionName":{"name":"abi_decode_bool","nodeType":"YulIdentifier","src":"2363:15:201"},"nodeType":"YulFunctionCall","src":"2363:35:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2339:6:201"},"nodeType":"YulFunctionCall","src":"2339:60:201"},"nodeType":"YulExpressionStatement","src":"2339:60:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2419:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2426:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2415:3:201"},"nodeType":"YulFunctionCall","src":"2415:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2455:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2466:3:201","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2451:3:201"},"nodeType":"YulFunctionCall","src":"2451:19:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2432:18:201"},"nodeType":"YulFunctionCall","src":"2432:39:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2408:6:201"},"nodeType":"YulFunctionCall","src":"2408:64:201"},"nodeType":"YulExpressionStatement","src":"2408:64:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2492:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2499:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2488:3:201"},"nodeType":"YulFunctionCall","src":"2488:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2526:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2537:3:201","type":"","value":"352"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2522:3:201"},"nodeType":"YulFunctionCall","src":"2522:19:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"2505:16:201"},"nodeType":"YulFunctionCall","src":"2505:37:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2481:6:201"},"nodeType":"YulFunctionCall","src":"2481:62:201"},"nodeType":"YulExpressionStatement","src":"2481:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2563:5:201"},{"name":"_3","nodeType":"YulIdentifier","src":"2570:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2559:3:201"},"nodeType":"YulFunctionCall","src":"2559:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2598:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2609:3:201","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2594:3:201"},"nodeType":"YulFunctionCall","src":"2594:19:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2575:18:201"},"nodeType":"YulFunctionCall","src":"2575:39:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2552:6:201"},"nodeType":"YulFunctionCall","src":"2552:63:201"},"nodeType":"YulExpressionStatement","src":"2552:63:201"},{"nodeType":"YulAssignment","src":"2624:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"2634:5:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"2624:6:201"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1447:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1458:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1470:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1478:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1486:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1494:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1502:6:201","type":""}],"src":"1138:1507:201"},{"body":{"nodeType":"YulBlock","src":"2759:76:201","statements":[{"nodeType":"YulAssignment","src":"2769:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2781:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2792:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2777:3:201"},"nodeType":"YulFunctionCall","src":"2777:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2769:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2811:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"2822:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2804:6:201"},"nodeType":"YulFunctionCall","src":"2804:25:201"},"nodeType":"YulExpressionStatement","src":"2804:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2728:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2739:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2750:4:201","type":""}],"src":"2650:185:201"},{"body":{"nodeType":"YulBlock","src":"2941:125:201","statements":[{"nodeType":"YulAssignment","src":"2951:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2963:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2974:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2959:3:201"},"nodeType":"YulFunctionCall","src":"2959:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2951:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2993:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3008:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3016:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3004:3:201"},"nodeType":"YulFunctionCall","src":"3004:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2986:6:201"},"nodeType":"YulFunctionCall","src":"2986:74:201"},"nodeType":"YulExpressionStatement","src":"2986:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2910:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2921:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2932:4:201","type":""}],"src":"2840:226:201"},{"body":{"nodeType":"YulBlock","src":"3152:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"3198:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3207:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3210:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3200:6:201"},"nodeType":"YulFunctionCall","src":"3200:12:201"},"nodeType":"YulExpressionStatement","src":"3200:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3173:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3182:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3169:3:201"},"nodeType":"YulFunctionCall","src":"3169:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3194:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3165:3:201"},"nodeType":"YulFunctionCall","src":"3165:32:201"},"nodeType":"YulIf","src":"3162:52:201"},{"nodeType":"YulAssignment","src":"3223:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3239:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3233:5:201"},"nodeType":"YulFunctionCall","src":"3233:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3223:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3118:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3129:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3141:6:201","type":""}],"src":"3071:184:201"},{"body":{"nodeType":"YulBlock","src":"3292:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3309:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3312:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3302:6:201"},"nodeType":"YulFunctionCall","src":"3302:88:201"},"nodeType":"YulExpressionStatement","src":"3302:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3406:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3409:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3399:6:201"},"nodeType":"YulFunctionCall","src":"3399:15:201"},"nodeType":"YulExpressionStatement","src":"3399:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3430:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3433:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3423:6:201"},"nodeType":"YulFunctionCall","src":"3423:15:201"},"nodeType":"YulExpressionStatement","src":"3423:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"3260:184:201"},{"body":{"nodeType":"YulBlock","src":"3497:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"3524:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3526:16:201"},"nodeType":"YulFunctionCall","src":"3526:18:201"},"nodeType":"YulExpressionStatement","src":"3526:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3513:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"3520:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3516:3:201"},"nodeType":"YulFunctionCall","src":"3516:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3510:2:201"},"nodeType":"YulFunctionCall","src":"3510:13:201"},"nodeType":"YulIf","src":"3507:39:201"},{"nodeType":"YulAssignment","src":"3555:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3566:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"3569:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3562:3:201"},"nodeType":"YulFunctionCall","src":"3562:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"3555:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3480:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"3483:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"3489:3:201","type":""}],"src":"3449:128:201"},{"body":{"nodeType":"YulBlock","src":"3663:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"3709:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3718:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3721:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3711:6:201"},"nodeType":"YulFunctionCall","src":"3711:12:201"},"nodeType":"YulExpressionStatement","src":"3711:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3684:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3693:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3680:3:201"},"nodeType":"YulFunctionCall","src":"3680:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3705:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3676:3:201"},"nodeType":"YulFunctionCall","src":"3676:32:201"},"nodeType":"YulIf","src":"3673:52:201"},{"nodeType":"YulVariableDeclaration","src":"3734:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3753:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3747:5:201"},"nodeType":"YulFunctionCall","src":"3747:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3738:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3797:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3772:24:201"},"nodeType":"YulFunctionCall","src":"3772:31:201"},"nodeType":"YulExpressionStatement","src":"3772:31:201"},{"nodeType":"YulAssignment","src":"3812:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3822:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3812:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3629:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3640:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3652:6:201","type":""}],"src":"3582:251:201"},{"body":{"nodeType":"YulBlock","src":"3995:241:201","statements":[{"nodeType":"YulAssignment","src":"4005:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4017:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4028:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4013:3:201"},"nodeType":"YulFunctionCall","src":"4013:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4005:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"4040:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"4050:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4044:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4108:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4123:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4131:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4119:3:201"},"nodeType":"YulFunctionCall","src":"4119:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4101:6:201"},"nodeType":"YulFunctionCall","src":"4101:34:201"},"nodeType":"YulExpressionStatement","src":"4101:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4155:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4166:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4151:3:201"},"nodeType":"YulFunctionCall","src":"4151:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"4175:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4183:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4171:3:201"},"nodeType":"YulFunctionCall","src":"4171:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4144:6:201"},"nodeType":"YulFunctionCall","src":"4144:43:201"},"nodeType":"YulExpressionStatement","src":"4144:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4207:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4218:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4203:3:201"},"nodeType":"YulFunctionCall","src":"4203:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"4223:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4196:6:201"},"nodeType":"YulFunctionCall","src":"4196:34:201"},"nodeType":"YulExpressionStatement","src":"4196:34:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3948:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3959:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3967:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3975:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3986:4:201","type":""}],"src":"3838:398:201"},{"body":{"nodeType":"YulBlock","src":"4420:271:201","statements":[{"nodeType":"YulAssignment","src":"4430:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4442:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4453:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4438:3:201"},"nodeType":"YulFunctionCall","src":"4438:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4430:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4473:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"4484:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4466:6:201"},"nodeType":"YulFunctionCall","src":"4466:25:201"},"nodeType":"YulExpressionStatement","src":"4466:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4511:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4522:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4507:3:201"},"nodeType":"YulFunctionCall","src":"4507:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"4527:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4500:6:201"},"nodeType":"YulFunctionCall","src":"4500:34:201"},"nodeType":"YulExpressionStatement","src":"4500:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4554:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4565:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4550:3:201"},"nodeType":"YulFunctionCall","src":"4550:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"4574:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4582:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4570:3:201"},"nodeType":"YulFunctionCall","src":"4570:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4543:6:201"},"nodeType":"YulFunctionCall","src":"4543:83:201"},"nodeType":"YulExpressionStatement","src":"4543:83:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4646:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4657:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4642:3:201"},"nodeType":"YulFunctionCall","src":"4642:18:201"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"4676:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4669:6:201"},"nodeType":"YulFunctionCall","src":"4669:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4662:6:201"},"nodeType":"YulFunctionCall","src":"4662:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4635:6:201"},"nodeType":"YulFunctionCall","src":"4635:50:201"},"nodeType":"YulExpressionStatement","src":"4635:50:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_address_t_bool__to_t_uint256_t_uint256_t_address_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4365:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"4376:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4384:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4392:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4400:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4411:4:201","type":""}],"src":"4241:450:201"},{"body":{"nodeType":"YulBlock","src":"4827:335:201","statements":[{"body":{"nodeType":"YulBlock","src":"4874:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4883:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4886:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4876:6:201"},"nodeType":"YulFunctionCall","src":"4876:12:201"},"nodeType":"YulExpressionStatement","src":"4876:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4848:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4857:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4844:3:201"},"nodeType":"YulFunctionCall","src":"4844:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4869:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4840:3:201"},"nodeType":"YulFunctionCall","src":"4840:33:201"},"nodeType":"YulIf","src":"4837:53:201"},{"nodeType":"YulAssignment","src":"4899:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4915:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4909:5:201"},"nodeType":"YulFunctionCall","src":"4909:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4899:6:201"}]},{"nodeType":"YulAssignment","src":"4934:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4954:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4965:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4950:3:201"},"nodeType":"YulFunctionCall","src":"4950:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4944:5:201"},"nodeType":"YulFunctionCall","src":"4944:25:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4934:6:201"}]},{"nodeType":"YulAssignment","src":"4978:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4998:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5009:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4994:3:201"},"nodeType":"YulFunctionCall","src":"4994:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4988:5:201"},"nodeType":"YulFunctionCall","src":"4988:25:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4978:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"5022:38:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5045:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5056:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5041:3:201"},"nodeType":"YulFunctionCall","src":"5041:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5035:5:201"},"nodeType":"YulFunctionCall","src":"5035:25:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5026:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"5116:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5125:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5128:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5118:6:201"},"nodeType":"YulFunctionCall","src":"5118:12:201"},"nodeType":"YulExpressionStatement","src":"5118:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5082:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5093:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5100:12:201","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5089:3:201"},"nodeType":"YulFunctionCall","src":"5089:24:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"5079:2:201"},"nodeType":"YulFunctionCall","src":"5079:35:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5072:6:201"},"nodeType":"YulFunctionCall","src":"5072:43:201"},"nodeType":"YulIf","src":"5069:63:201"},{"nodeType":"YulAssignment","src":"5141:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"5151:5:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"5141:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4769:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4780:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4792:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4800:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4808:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"4816:6:201","type":""}],"src":"4696:466:201"},{"body":{"nodeType":"YulBlock","src":"5219:176:201","statements":[{"body":{"nodeType":"YulBlock","src":"5338:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"5340:16:201"},"nodeType":"YulFunctionCall","src":"5340:18:201"},"nodeType":"YulExpressionStatement","src":"5340:18:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5250:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5243:6:201"},"nodeType":"YulFunctionCall","src":"5243:9:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5236:6:201"},"nodeType":"YulFunctionCall","src":"5236:17:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"5258:1:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5265:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"5333:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"5261:3:201"},"nodeType":"YulFunctionCall","src":"5261:74:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5255:2:201"},"nodeType":"YulFunctionCall","src":"5255:81:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5232:3:201"},"nodeType":"YulFunctionCall","src":"5232:105:201"},"nodeType":"YulIf","src":"5229:131:201"},{"nodeType":"YulAssignment","src":"5369:20:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5384:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"5387:1:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"5380:3:201"},"nodeType":"YulFunctionCall","src":"5380:9:201"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"5369:7:201"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"5198:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"5201:1:201","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"5207:7:201","type":""}],"src":"5167:228:201"},{"body":{"nodeType":"YulBlock","src":"5432:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5449:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5452:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5442:6:201"},"nodeType":"YulFunctionCall","src":"5442:88:201"},"nodeType":"YulExpressionStatement","src":"5442:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5546:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"5549:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5539:6:201"},"nodeType":"YulFunctionCall","src":"5539:15:201"},"nodeType":"YulExpressionStatement","src":"5539:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5570:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5573:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5563:6:201"},"nodeType":"YulFunctionCall","src":"5563:15:201"},"nodeType":"YulExpressionStatement","src":"5563:15:201"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"5400:184:201"},{"body":{"nodeType":"YulBlock","src":"5710:535:201","statements":[{"nodeType":"YulVariableDeclaration","src":"5720:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5730:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5724:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5748:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5759:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5741:6:201"},"nodeType":"YulFunctionCall","src":"5741:21:201"},"nodeType":"YulExpressionStatement","src":"5741:21:201"},{"nodeType":"YulVariableDeclaration","src":"5771:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5791:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5785:5:201"},"nodeType":"YulFunctionCall","src":"5785:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"5775:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5818:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5829:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5814:3:201"},"nodeType":"YulFunctionCall","src":"5814:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"5834:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5807:6:201"},"nodeType":"YulFunctionCall","src":"5807:34:201"},"nodeType":"YulExpressionStatement","src":"5807:34:201"},{"nodeType":"YulVariableDeclaration","src":"5850:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5859:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"5854:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"5919:90:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5948:9:201"},{"name":"i","nodeType":"YulIdentifier","src":"5959:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5944:3:201"},"nodeType":"YulFunctionCall","src":"5944:17:201"},{"kind":"number","nodeType":"YulLiteral","src":"5963:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5940:3:201"},"nodeType":"YulFunctionCall","src":"5940:26:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5982:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"5990:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5978:3:201"},"nodeType":"YulFunctionCall","src":"5978:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5994:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5974:3:201"},"nodeType":"YulFunctionCall","src":"5974:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5968:5:201"},"nodeType":"YulFunctionCall","src":"5968:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5933:6:201"},"nodeType":"YulFunctionCall","src":"5933:66:201"},"nodeType":"YulExpressionStatement","src":"5933:66:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5880:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"5883:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5877:2:201"},"nodeType":"YulFunctionCall","src":"5877:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5891:19:201","statements":[{"nodeType":"YulAssignment","src":"5893:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5902:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5905:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5898:3:201"},"nodeType":"YulFunctionCall","src":"5898:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"5893:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"5873:3:201","statements":[]},"src":"5869:140:201"},{"body":{"nodeType":"YulBlock","src":"6043:66:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6072:9:201"},{"name":"length","nodeType":"YulIdentifier","src":"6083:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6068:3:201"},"nodeType":"YulFunctionCall","src":"6068:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"6092:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6064:3:201"},"nodeType":"YulFunctionCall","src":"6064:31:201"},{"kind":"number","nodeType":"YulLiteral","src":"6097:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6057:6:201"},"nodeType":"YulFunctionCall","src":"6057:42:201"},"nodeType":"YulExpressionStatement","src":"6057:42:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6024:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"6027:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6021:2:201"},"nodeType":"YulFunctionCall","src":"6021:13:201"},"nodeType":"YulIf","src":"6018:91:201"},{"nodeType":"YulAssignment","src":"6118:121:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6134:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"6153:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"6161:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6149:3:201"},"nodeType":"YulFunctionCall","src":"6149:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"6166:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6145:3:201"},"nodeType":"YulFunctionCall","src":"6145:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6130:3:201"},"nodeType":"YulFunctionCall","src":"6130:104:201"},{"kind":"number","nodeType":"YulLiteral","src":"6236:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6126:3:201"},"nodeType":"YulFunctionCall","src":"6126:113:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6118:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5679:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5690:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5701:4:201","type":""}],"src":"5589:656:201"},{"body":{"nodeType":"YulBlock","src":"6328:167:201","statements":[{"body":{"nodeType":"YulBlock","src":"6374:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6383:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6386:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6376:6:201"},"nodeType":"YulFunctionCall","src":"6376:12:201"},"nodeType":"YulExpressionStatement","src":"6376:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6349:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6358:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6345:3:201"},"nodeType":"YulFunctionCall","src":"6345:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"6370:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6341:3:201"},"nodeType":"YulFunctionCall","src":"6341:32:201"},"nodeType":"YulIf","src":"6338:52:201"},{"nodeType":"YulVariableDeclaration","src":"6399:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6418:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6412:5:201"},"nodeType":"YulFunctionCall","src":"6412:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6403:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6459:5:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"6437:21:201"},"nodeType":"YulFunctionCall","src":"6437:28:201"},"nodeType":"YulExpressionStatement","src":"6437:28:201"},{"nodeType":"YulAssignment","src":"6474:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"6484:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6474:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6294:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6305:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6317:6:201","type":""}],"src":"6250:245:201"},{"body":{"nodeType":"YulBlock","src":"6546:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"6577:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6598:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6601:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6591:6:201"},"nodeType":"YulFunctionCall","src":"6591:88:201"},"nodeType":"YulExpressionStatement","src":"6591:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6699:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6702:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6692:6:201"},"nodeType":"YulFunctionCall","src":"6692:15:201"},"nodeType":"YulExpressionStatement","src":"6692:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6727:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6730:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6720:6:201"},"nodeType":"YulFunctionCall","src":"6720:15:201"},"nodeType":"YulExpressionStatement","src":"6720:15:201"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"6566:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6559:6:201"},"nodeType":"YulFunctionCall","src":"6559:9:201"},"nodeType":"YulIf","src":"6556:189:201"},{"nodeType":"YulAssignment","src":"6754:14:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6763:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"6766:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"6759:3:201"},"nodeType":"YulFunctionCall","src":"6759:9:201"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"6754:1:201"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"6531:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"6534:1:201","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"6540:1:201","type":""}],"src":"6500:274:201"},{"body":{"nodeType":"YulBlock","src":"6828:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"6850:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"6852:16:201"},"nodeType":"YulFunctionCall","src":"6852:18:201"},"nodeType":"YulExpressionStatement","src":"6852:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6844:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"6847:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6841:2:201"},"nodeType":"YulFunctionCall","src":"6841:8:201"},"nodeType":"YulIf","src":"6838:34:201"},{"nodeType":"YulAssignment","src":"6881:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6893:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"6896:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6889:3:201"},"nodeType":"YulFunctionCall","src":"6889:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"6881:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"6810:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"6813:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"6819:4:201","type":""}],"src":"6779:125:201"},{"body":{"nodeType":"YulBlock","src":"7066:211:201","statements":[{"nodeType":"YulAssignment","src":"7076:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7088:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7099:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7084:3:201"},"nodeType":"YulFunctionCall","src":"7084:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7076:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7118:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7133:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7141:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7129:3:201"},"nodeType":"YulFunctionCall","src":"7129:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7111:6:201"},"nodeType":"YulFunctionCall","src":"7111:74:201"},"nodeType":"YulExpressionStatement","src":"7111:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7205:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7216:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7201:3:201"},"nodeType":"YulFunctionCall","src":"7201:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"7221:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7194:6:201"},"nodeType":"YulFunctionCall","src":"7194:34:201"},"nodeType":"YulExpressionStatement","src":"7194:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7248:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7259:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7244:3:201"},"nodeType":"YulFunctionCall","src":"7244:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"7264:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7237:6:201"},"nodeType":"YulFunctionCall","src":"7237:34:201"},"nodeType":"YulExpressionStatement","src":"7237:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7019:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7030:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7038:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7046:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7057:4:201","type":""}],"src":"6909:368:201"},{"body":{"nodeType":"YulBlock","src":"7411:168:201","statements":[{"nodeType":"YulAssignment","src":"7421:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7433:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7444:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7429:3:201"},"nodeType":"YulFunctionCall","src":"7429:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7421:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7463:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7478:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7486:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7474:3:201"},"nodeType":"YulFunctionCall","src":"7474:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7456:6:201"},"nodeType":"YulFunctionCall","src":"7456:74:201"},"nodeType":"YulExpressionStatement","src":"7456:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7550:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7561:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7546:3:201"},"nodeType":"YulFunctionCall","src":"7546:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"7566:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7539:6:201"},"nodeType":"YulFunctionCall","src":"7539:34:201"},"nodeType":"YulExpressionStatement","src":"7539:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7372:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7383:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7391:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7402:4:201","type":""}],"src":"7282:297:201"},{"body":{"nodeType":"YulBlock","src":"7682:147:201","statements":[{"body":{"nodeType":"YulBlock","src":"7728:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7737:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7740:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7730:6:201"},"nodeType":"YulFunctionCall","src":"7730:12:201"},"nodeType":"YulExpressionStatement","src":"7730:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7703:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"7712:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7699:3:201"},"nodeType":"YulFunctionCall","src":"7699:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"7724:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7695:3:201"},"nodeType":"YulFunctionCall","src":"7695:32:201"},"nodeType":"YulIf","src":"7692:52:201"},{"nodeType":"YulAssignment","src":"7753:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7769:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7763:5:201"},"nodeType":"YulFunctionCall","src":"7763:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7753:6:201"}]},{"nodeType":"YulAssignment","src":"7788:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7808:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7819:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7804:3:201"},"nodeType":"YulFunctionCall","src":"7804:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7798:5:201"},"nodeType":"YulFunctionCall","src":"7798:25:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7788:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7640:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7651:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7663:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7671:6:201","type":""}],"src":"7584:245:201"},{"body":{"nodeType":"YulBlock","src":"8029:729:201","statements":[{"nodeType":"YulAssignment","src":"8039:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8051:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8062:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8047:3:201"},"nodeType":"YulFunctionCall","src":"8047:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8039:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8082:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8099:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8093:5:201"},"nodeType":"YulFunctionCall","src":"8093:13:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8075:6:201"},"nodeType":"YulFunctionCall","src":"8075:32:201"},"nodeType":"YulExpressionStatement","src":"8075:32:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8127:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8138:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8123:3:201"},"nodeType":"YulFunctionCall","src":"8123:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8155:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8163:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8151:3:201"},"nodeType":"YulFunctionCall","src":"8151:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8145:5:201"},"nodeType":"YulFunctionCall","src":"8145:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8116:6:201"},"nodeType":"YulFunctionCall","src":"8116:54:201"},"nodeType":"YulExpressionStatement","src":"8116:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8190:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8201:4:201","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8186:3:201"},"nodeType":"YulFunctionCall","src":"8186:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8218:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8226:4:201","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8214:3:201"},"nodeType":"YulFunctionCall","src":"8214:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8208:5:201"},"nodeType":"YulFunctionCall","src":"8208:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8179:6:201"},"nodeType":"YulFunctionCall","src":"8179:54:201"},"nodeType":"YulExpressionStatement","src":"8179:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8253:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8264:4:201","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8249:3:201"},"nodeType":"YulFunctionCall","src":"8249:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8281:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8289:4:201","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8277:3:201"},"nodeType":"YulFunctionCall","src":"8277:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8271:5:201"},"nodeType":"YulFunctionCall","src":"8271:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8242:6:201"},"nodeType":"YulFunctionCall","src":"8242:54:201"},"nodeType":"YulExpressionStatement","src":"8242:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8316:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8327:4:201","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8312:3:201"},"nodeType":"YulFunctionCall","src":"8312:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8344:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8352:4:201","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8340:3:201"},"nodeType":"YulFunctionCall","src":"8340:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8334:5:201"},"nodeType":"YulFunctionCall","src":"8334:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8305:6:201"},"nodeType":"YulFunctionCall","src":"8305:54:201"},"nodeType":"YulExpressionStatement","src":"8305:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8379:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8390:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8375:3:201"},"nodeType":"YulFunctionCall","src":"8375:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8407:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8415:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8403:3:201"},"nodeType":"YulFunctionCall","src":"8403:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8397:5:201"},"nodeType":"YulFunctionCall","src":"8397:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8368:6:201"},"nodeType":"YulFunctionCall","src":"8368:54:201"},"nodeType":"YulExpressionStatement","src":"8368:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8442:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8453:4:201","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8438:3:201"},"nodeType":"YulFunctionCall","src":"8438:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8470:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8478:4:201","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8466:3:201"},"nodeType":"YulFunctionCall","src":"8466:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8460:5:201"},"nodeType":"YulFunctionCall","src":"8460:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8431:6:201"},"nodeType":"YulFunctionCall","src":"8431:54:201"},"nodeType":"YulExpressionStatement","src":"8431:54:201"},{"nodeType":"YulVariableDeclaration","src":"8494:44:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8524:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8532:4:201","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8520:3:201"},"nodeType":"YulFunctionCall","src":"8520:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8514:5:201"},"nodeType":"YulFunctionCall","src":"8514:24:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"8498:12:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8547:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8557:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8551:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8619:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8630:4:201","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8615:3:201"},"nodeType":"YulFunctionCall","src":"8615:20:201"},{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"8641:12:201"},{"name":"_1","nodeType":"YulIdentifier","src":"8655:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8637:3:201"},"nodeType":"YulFunctionCall","src":"8637:21:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8608:6:201"},"nodeType":"YulFunctionCall","src":"8608:51:201"},"nodeType":"YulExpressionStatement","src":"8608:51:201"},{"nodeType":"YulVariableDeclaration","src":"8668:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8678:6:201","type":"","value":"0x0100"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"8672:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8704:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"8715:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8700:3:201"},"nodeType":"YulFunctionCall","src":"8700:18:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8734:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"8742:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8730:3:201"},"nodeType":"YulFunctionCall","src":"8730:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8724:5:201"},"nodeType":"YulFunctionCall","src":"8724:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"8748:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8720:3:201"},"nodeType":"YulFunctionCall","src":"8720:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8693:6:201"},"nodeType":"YulFunctionCall","src":"8693:59:201"},"nodeType":"YulExpressionStatement","src":"8693:59:201"}]},"name":"abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7998:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8009:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8020:4:201","type":""}],"src":"7834:924:201"},{"body":{"nodeType":"YulBlock","src":"8878:191:201","statements":[{"body":{"nodeType":"YulBlock","src":"8924:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8933:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8936:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8926:6:201"},"nodeType":"YulFunctionCall","src":"8926:12:201"},"nodeType":"YulExpressionStatement","src":"8926:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8899:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"8908:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8895:3:201"},"nodeType":"YulFunctionCall","src":"8895:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"8920:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8891:3:201"},"nodeType":"YulFunctionCall","src":"8891:32:201"},"nodeType":"YulIf","src":"8888:52:201"},{"nodeType":"YulAssignment","src":"8949:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8965:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8959:5:201"},"nodeType":"YulFunctionCall","src":"8959:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8949:6:201"}]},{"nodeType":"YulAssignment","src":"8984:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9004:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9015:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9000:3:201"},"nodeType":"YulFunctionCall","src":"9000:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8994:5:201"},"nodeType":"YulFunctionCall","src":"8994:25:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"8984:6:201"}]},{"nodeType":"YulAssignment","src":"9028:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9048:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9059:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9044:3:201"},"nodeType":"YulFunctionCall","src":"9044:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9038:5:201"},"nodeType":"YulFunctionCall","src":"9038:25:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"9028:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8828:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8839:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8851:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8859:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8867:6:201","type":""}],"src":"8763:306:201"},{"body":{"nodeType":"YulBlock","src":"9287:250:201","statements":[{"nodeType":"YulAssignment","src":"9297:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9309:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9320:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9305:3:201"},"nodeType":"YulFunctionCall","src":"9305:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9297:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9340:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"9351:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9333:6:201"},"nodeType":"YulFunctionCall","src":"9333:25:201"},"nodeType":"YulExpressionStatement","src":"9333:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9378:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9389:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9374:3:201"},"nodeType":"YulFunctionCall","src":"9374:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"9394:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9367:6:201"},"nodeType":"YulFunctionCall","src":"9367:34:201"},"nodeType":"YulExpressionStatement","src":"9367:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9421:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9432:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9417:3:201"},"nodeType":"YulFunctionCall","src":"9417:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"9437:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9410:6:201"},"nodeType":"YulFunctionCall","src":"9410:34:201"},"nodeType":"YulExpressionStatement","src":"9410:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9464:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9475:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9460:3:201"},"nodeType":"YulFunctionCall","src":"9460:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"9480:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9453:6:201"},"nodeType":"YulFunctionCall","src":"9453:34:201"},"nodeType":"YulExpressionStatement","src":"9453:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9507:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9518:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9503:3:201"},"nodeType":"YulFunctionCall","src":"9503:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"9524:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9496:6:201"},"nodeType":"YulFunctionCall","src":"9496:35:201"},"nodeType":"YulExpressionStatement","src":"9496:35:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9224:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"9235:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9243:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9251:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9259:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9267:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9278:4:201","type":""}],"src":"9074:463:201"},{"body":{"nodeType":"YulBlock","src":"9606:418:201","statements":[{"nodeType":"YulVariableDeclaration","src":"9616:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9631:1:201","type":"","value":"1"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"9620:7:201","type":""}]},{"nodeType":"YulAssignment","src":"9641:16:201","value":{"name":"power_1","nodeType":"YulIdentifier","src":"9650:7:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"9641:5:201"}]},{"nodeType":"YulAssignment","src":"9666:13:201","value":{"name":"_base","nodeType":"YulIdentifier","src":"9674:5:201"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"9666:4:201"}]},{"body":{"nodeType":"YulBlock","src":"9730:288:201","statements":[{"body":{"nodeType":"YulBlock","src":"9835:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"9837:16:201"},"nodeType":"YulFunctionCall","src":"9837:18:201"},"nodeType":"YulExpressionStatement","src":"9837:18:201"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"9750:4:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9760:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base","nodeType":"YulIdentifier","src":"9828:4:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"9756:3:201"},"nodeType":"YulFunctionCall","src":"9756:77:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9747:2:201"},"nodeType":"YulFunctionCall","src":"9747:87:201"},"nodeType":"YulIf","src":"9744:113:201"},{"body":{"nodeType":"YulBlock","src":"9896:29:201","statements":[{"nodeType":"YulAssignment","src":"9898:25:201","value":{"arguments":[{"name":"power","nodeType":"YulIdentifier","src":"9911:5:201"},{"name":"base","nodeType":"YulIdentifier","src":"9918:4:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"9907:3:201"},"nodeType":"YulFunctionCall","src":"9907:16:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"9898:5:201"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"9877:8:201"},{"name":"power_1","nodeType":"YulIdentifier","src":"9887:7:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9873:3:201"},"nodeType":"YulFunctionCall","src":"9873:22:201"},"nodeType":"YulIf","src":"9870:55:201"},{"nodeType":"YulAssignment","src":"9938:23:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"9950:4:201"},{"name":"base","nodeType":"YulIdentifier","src":"9956:4:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"9946:3:201"},"nodeType":"YulFunctionCall","src":"9946:15:201"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"9938:4:201"}]},{"nodeType":"YulAssignment","src":"9974:34:201","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"9990:7:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"9999:8:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"9986:3:201"},"nodeType":"YulFunctionCall","src":"9986:22:201"},"variableNames":[{"name":"exponent","nodeType":"YulIdentifier","src":"9974:8:201"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"9699:8:201"},{"name":"power_1","nodeType":"YulIdentifier","src":"9709:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9696:2:201"},"nodeType":"YulFunctionCall","src":"9696:21:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"9718:3:201","statements":[]},"pre":{"nodeType":"YulBlock","src":"9692:3:201","statements":[]},"src":"9688:330:201"}]},"name":"checked_exp_helper","nodeType":"YulFunctionDefinition","parameters":[{"name":"_base","nodeType":"YulTypedName","src":"9570:5:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"9577:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"9590:5:201","type":""},{"name":"base","nodeType":"YulTypedName","src":"9597:4:201","type":""}],"src":"9542:482:201"},{"body":{"nodeType":"YulBlock","src":"10088:807:201","statements":[{"body":{"nodeType":"YulBlock","src":"10126:52:201","statements":[{"nodeType":"YulAssignment","src":"10140:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10149:1:201","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"10140:5:201"}]},{"nodeType":"YulLeave","src":"10163:5:201"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"10108:8:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10101:6:201"},"nodeType":"YulFunctionCall","src":"10101:16:201"},"nodeType":"YulIf","src":"10098:80:201"},{"body":{"nodeType":"YulBlock","src":"10211:52:201","statements":[{"nodeType":"YulAssignment","src":"10225:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10234:1:201","type":"","value":"0"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"10225:5:201"}]},{"nodeType":"YulLeave","src":"10248:5:201"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"10197:4:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10190:6:201"},"nodeType":"YulFunctionCall","src":"10190:12:201"},"nodeType":"YulIf","src":"10187:76:201"},{"cases":[{"body":{"nodeType":"YulBlock","src":"10299:52:201","statements":[{"nodeType":"YulAssignment","src":"10313:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10322:1:201","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"10313:5:201"}]},{"nodeType":"YulLeave","src":"10336:5:201"}]},"nodeType":"YulCase","src":"10292:59:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10297:1:201","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"10367:123:201","statements":[{"body":{"nodeType":"YulBlock","src":"10402:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"10404:16:201"},"nodeType":"YulFunctionCall","src":"10404:18:201"},"nodeType":"YulExpressionStatement","src":"10404:18:201"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"10387:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"10397:3:201","type":"","value":"255"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10384:2:201"},"nodeType":"YulFunctionCall","src":"10384:17:201"},"nodeType":"YulIf","src":"10381:43:201"},{"nodeType":"YulAssignment","src":"10437:25:201","value":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"10450:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"10460:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10446:3:201"},"nodeType":"YulFunctionCall","src":"10446:16:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"10437:5:201"}]},{"nodeType":"YulLeave","src":"10475:5:201"}]},"nodeType":"YulCase","src":"10360:130:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10365:1:201","type":"","value":"2"}}],"expression":{"name":"base","nodeType":"YulIdentifier","src":"10279:4:201"},"nodeType":"YulSwitch","src":"10272:218:201"},{"body":{"nodeType":"YulBlock","src":"10588:70:201","statements":[{"nodeType":"YulAssignment","src":"10602:28:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"10615:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"10621:8:201"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"10611:3:201"},"nodeType":"YulFunctionCall","src":"10611:19:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"10602:5:201"}]},{"nodeType":"YulLeave","src":"10643:5:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"10512:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"10518:2:201","type":"","value":"11"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10509:2:201"},"nodeType":"YulFunctionCall","src":"10509:12:201"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"10526:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"10536:2:201","type":"","value":"78"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10523:2:201"},"nodeType":"YulFunctionCall","src":"10523:16:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10505:3:201"},"nodeType":"YulFunctionCall","src":"10505:35:201"},{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"10549:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"10555:3:201","type":"","value":"307"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10546:2:201"},"nodeType":"YulFunctionCall","src":"10546:13:201"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"10564:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"10574:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10561:2:201"},"nodeType":"YulFunctionCall","src":"10561:16:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10542:3:201"},"nodeType":"YulFunctionCall","src":"10542:36:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"10502:2:201"},"nodeType":"YulFunctionCall","src":"10502:77:201"},"nodeType":"YulIf","src":"10499:159:201"},{"nodeType":"YulVariableDeclaration","src":"10667:57:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"10709:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"10715:8:201"}],"functionName":{"name":"checked_exp_helper","nodeType":"YulIdentifier","src":"10690:18:201"},"nodeType":"YulFunctionCall","src":"10690:34:201"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"10671:7:201","type":""},{"name":"base_1","nodeType":"YulTypedName","src":"10680:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"10829:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"10831:16:201"},"nodeType":"YulFunctionCall","src":"10831:18:201"},"nodeType":"YulExpressionStatement","src":"10831:18:201"}]},"condition":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"10739:7:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10752:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base_1","nodeType":"YulIdentifier","src":"10820:6:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"10748:3:201"},"nodeType":"YulFunctionCall","src":"10748:79:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10736:2:201"},"nodeType":"YulFunctionCall","src":"10736:92:201"},"nodeType":"YulIf","src":"10733:118:201"},{"nodeType":"YulAssignment","src":"10860:29:201","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"10873:7:201"},{"name":"base_1","nodeType":"YulIdentifier","src":"10882:6:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"10869:3:201"},"nodeType":"YulFunctionCall","src":"10869:20:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"10860:5:201"}]}]},"name":"checked_exp_unsigned","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"10059:4:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"10065:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"10078:5:201","type":""}],"src":"10029:866:201"},{"body":{"nodeType":"YulBlock","src":"10970:61:201","statements":[{"nodeType":"YulAssignment","src":"10980:45:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"11010:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"11016:8:201"}],"functionName":{"name":"checked_exp_unsigned","nodeType":"YulIdentifier","src":"10989:20:201"},"nodeType":"YulFunctionCall","src":"10989:36:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"10980:5:201"}]}]},"name":"checked_exp_t_uint256_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"10941:4:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"10947:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"10960:5:201","type":""}],"src":"10900:131:201"},{"body":{"nodeType":"YulBlock","src":"11145:76:201","statements":[{"nodeType":"YulAssignment","src":"11155:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11167:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11178:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11163:3:201"},"nodeType":"YulFunctionCall","src":"11163:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11155:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11197:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"11208:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11190:6:201"},"nodeType":"YulFunctionCall","src":"11190:25:201"},"nodeType":"YulExpressionStatement","src":"11190:25:201"}]},"name":"abi_encode_tuple_t_rational_0_by_1__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11114:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11125:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11136:4:201","type":""}],"src":"11036:185:201"},{"body":{"nodeType":"YulBlock","src":"11275:197:201","statements":[{"nodeType":"YulVariableDeclaration","src":"11285:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11295:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11289:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11338:21:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11353:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11356:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11349:3:201"},"nodeType":"YulFunctionCall","src":"11349:10:201"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"11342:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11368:21:201","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"11383:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11386:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11379:3:201"},"nodeType":"YulFunctionCall","src":"11379:10:201"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"11372:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"11414:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11416:16:201"},"nodeType":"YulFunctionCall","src":"11416:18:201"},"nodeType":"YulExpressionStatement","src":"11416:18:201"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"11404:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"11409:3:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"11401:2:201"},"nodeType":"YulFunctionCall","src":"11401:12:201"},"nodeType":"YulIf","src":"11398:38:201"},{"nodeType":"YulAssignment","src":"11445:21:201","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"11457:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"11462:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11453:3:201"},"nodeType":"YulFunctionCall","src":"11453:13:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"11445:4:201"}]}]},"name":"checked_sub_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11257:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"11260:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"11266:4:201","type":""}],"src":"11226:246:201"},{"body":{"nodeType":"YulBlock","src":"11578:76:201","statements":[{"nodeType":"YulAssignment","src":"11588:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11600:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11611:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11596:3:201"},"nodeType":"YulFunctionCall","src":"11596:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11588:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11630:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"11641:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11623:6:201"},"nodeType":"YulFunctionCall","src":"11623:25:201"},"nodeType":"YulExpressionStatement","src":"11623:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11547:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11558:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11569:4:201","type":""}],"src":"11477:177:201"},{"body":{"nodeType":"YulBlock","src":"11844:285:201","statements":[{"nodeType":"YulAssignment","src":"11854:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11866:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11877:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11862:3:201"},"nodeType":"YulFunctionCall","src":"11862:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11854:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"11890:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11900:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11894:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11958:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11973:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11981:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11969:3:201"},"nodeType":"YulFunctionCall","src":"11969:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11951:6:201"},"nodeType":"YulFunctionCall","src":"11951:34:201"},"nodeType":"YulExpressionStatement","src":"11951:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12005:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12016:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12001:3:201"},"nodeType":"YulFunctionCall","src":"12001:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12025:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12033:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12021:3:201"},"nodeType":"YulFunctionCall","src":"12021:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11994:6:201"},"nodeType":"YulFunctionCall","src":"11994:43:201"},"nodeType":"YulExpressionStatement","src":"11994:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12057:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12068:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12053:3:201"},"nodeType":"YulFunctionCall","src":"12053:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"12073:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12046:6:201"},"nodeType":"YulFunctionCall","src":"12046:34:201"},"nodeType":"YulExpressionStatement","src":"12046:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12100:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12111:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12096:3:201"},"nodeType":"YulFunctionCall","src":"12096:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"12116:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12089:6:201"},"nodeType":"YulFunctionCall","src":"12089:34:201"},"nodeType":"YulExpressionStatement","src":"12089:34:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11789:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11800:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11808:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11816:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11824:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11835:4:201","type":""}],"src":"11659:470:201"},{"body":{"nodeType":"YulBlock","src":"12308:175:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12325:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12336:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12318:6:201"},"nodeType":"YulFunctionCall","src":"12318:21:201"},"nodeType":"YulExpressionStatement","src":"12318:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12359:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12370:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12355:3:201"},"nodeType":"YulFunctionCall","src":"12355:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"12375:2:201","type":"","value":"25"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12348:6:201"},"nodeType":"YulFunctionCall","src":"12348:30:201"},"nodeType":"YulExpressionStatement","src":"12348:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12398:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12409:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12394:3:201"},"nodeType":"YulFunctionCall","src":"12394:18:201"},{"hexValue":"475076323a206661696c6564207472616e7366657246726f6d","kind":"string","nodeType":"YulLiteral","src":"12414:27:201","type":"","value":"GPv2: failed transferFrom"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12387:6:201"},"nodeType":"YulFunctionCall","src":"12387:55:201"},"nodeType":"YulExpressionStatement","src":"12387:55:201"},{"nodeType":"YulAssignment","src":"12451:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12463:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12474:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12459:3:201"},"nodeType":"YulFunctionCall","src":"12459:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12451:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12285:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12299:4:201","type":""}],"src":"12134:349:201"},{"body":{"nodeType":"YulBlock","src":"12536:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"12546:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12556:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12550:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12599:21:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"12614:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12617:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12610:3:201"},"nodeType":"YulFunctionCall","src":"12610:10:201"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"12603:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12629:21:201","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"12644:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12647:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12640:3:201"},"nodeType":"YulFunctionCall","src":"12640:10:201"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"12633:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"12684:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"12686:16:201"},"nodeType":"YulFunctionCall","src":"12686:18:201"},"nodeType":"YulExpressionStatement","src":"12686:18:201"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"12665:3:201"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"12674:2:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"12678:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12670:3:201"},"nodeType":"YulFunctionCall","src":"12670:12:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12662:2:201"},"nodeType":"YulFunctionCall","src":"12662:21:201"},"nodeType":"YulIf","src":"12659:47:201"},{"nodeType":"YulAssignment","src":"12715:20:201","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"12726:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"12731:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12722:3:201"},"nodeType":"YulFunctionCall","src":"12722:13:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"12715:3:201"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"12519:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"12522:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"12528:3:201","type":""}],"src":"12488:253:201"},{"body":{"nodeType":"YulBlock","src":"12920:229:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12937:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12948:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12930:6:201"},"nodeType":"YulFunctionCall","src":"12930:21:201"},"nodeType":"YulExpressionStatement","src":"12930:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12971:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12982:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12967:3:201"},"nodeType":"YulFunctionCall","src":"12967:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"12987:2:201","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12960:6:201"},"nodeType":"YulFunctionCall","src":"12960:30:201"},"nodeType":"YulExpressionStatement","src":"12960:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13010:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13021:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13006:3:201"},"nodeType":"YulFunctionCall","src":"13006:18:201"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"13026:34:201","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12999:6:201"},"nodeType":"YulFunctionCall","src":"12999:62:201"},"nodeType":"YulExpressionStatement","src":"12999:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13081:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13092:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13077:3:201"},"nodeType":"YulFunctionCall","src":"13077:18:201"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"13097:9:201","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13070:6:201"},"nodeType":"YulFunctionCall","src":"13070:37:201"},"nodeType":"YulExpressionStatement","src":"13070:37:201"},{"nodeType":"YulAssignment","src":"13116:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13128:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13139:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13124:3:201"},"nodeType":"YulFunctionCall","src":"13124:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13116:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12897:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12911:4:201","type":""}],"src":"12746:403:201"},{"body":{"nodeType":"YulBlock","src":"13249:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"13295:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13304:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13307:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13297:6:201"},"nodeType":"YulFunctionCall","src":"13297:12:201"},"nodeType":"YulExpressionStatement","src":"13297:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13270:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"13279:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13266:3:201"},"nodeType":"YulFunctionCall","src":"13266:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"13291:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13262:3:201"},"nodeType":"YulFunctionCall","src":"13262:32:201"},"nodeType":"YulIf","src":"13259:52:201"},{"nodeType":"YulVariableDeclaration","src":"13320:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13339:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13333:5:201"},"nodeType":"YulFunctionCall","src":"13333:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13324:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13383:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"13358:24:201"},"nodeType":"YulFunctionCall","src":"13358:31:201"},"nodeType":"YulExpressionStatement","src":"13358:31:201"},{"nodeType":"YulAssignment","src":"13398:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"13408:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13398:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$4860_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13215:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13226:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13238:6:201","type":""}],"src":"13154:265:201"},{"body":{"nodeType":"YulBlock","src":"13536:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"13582:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13591:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13594:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13584:6:201"},"nodeType":"YulFunctionCall","src":"13584:12:201"},"nodeType":"YulExpressionStatement","src":"13584:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13557:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"13566:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13553:3:201"},"nodeType":"YulFunctionCall","src":"13553:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"13578:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13549:3:201"},"nodeType":"YulFunctionCall","src":"13549:32:201"},"nodeType":"YulIf","src":"13546:52:201"},{"nodeType":"YulVariableDeclaration","src":"13607:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13626:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13620:5:201"},"nodeType":"YulFunctionCall","src":"13620:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13611:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13670:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"13645:24:201"},"nodeType":"YulFunctionCall","src":"13645:31:201"},"nodeType":"YulExpressionStatement","src":"13645:31:201"},{"nodeType":"YulAssignment","src":"13685:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"13695:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13685:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13502:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13513:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13525:6:201","type":""}],"src":"13424:282:201"},{"body":{"nodeType":"YulBlock","src":"13840:168:201","statements":[{"nodeType":"YulAssignment","src":"13850:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13862:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13873:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13858:3:201"},"nodeType":"YulFunctionCall","src":"13858:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13850:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13892:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"13903:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13885:6:201"},"nodeType":"YulFunctionCall","src":"13885:25:201"},"nodeType":"YulExpressionStatement","src":"13885:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13930:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13941:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13926:3:201"},"nodeType":"YulFunctionCall","src":"13926:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"13950:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13958:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13946:3:201"},"nodeType":"YulFunctionCall","src":"13946:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13919:6:201"},"nodeType":"YulFunctionCall","src":"13919:83:201"},"nodeType":"YulExpressionStatement","src":"13919:83:201"}]},"name":"abi_encode_tuple_t_bytes32_t_address__to_t_bytes32_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13801:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13812:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13820:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13831:4:201","type":""}],"src":"13711:297:201"}]},"contents":"{\n    { }\n    function allocate_memory() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x0120)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_bool(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_bool(value)\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 416) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        let _2 := 0x0120\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80), _2) { revert(0, 0) }\n        let value := allocate_memory()\n        mstore(value, calldataload(add(headStart, 128)))\n        mstore(add(value, 32), calldataload(add(headStart, 160)))\n        mstore(add(value, 64), abi_decode_address(add(headStart, 192)))\n        mstore(add(value, 96), abi_decode_address(add(headStart, 224)))\n        let _3 := 256\n        mstore(add(value, 128), abi_decode_address(add(headStart, _3)))\n        mstore(add(value, 160), abi_decode_bool(add(headStart, _2)))\n        mstore(add(value, 192), abi_decode_address(add(headStart, 320)))\n        mstore(add(value, 224), abi_decode_uint8(add(headStart, 352)))\n        mstore(add(value, _3), abi_decode_address(add(headStart, 384)))\n        value4 := value\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_address_t_bool__to_t_uint256_t_uint256_t_address_t_bool__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 96), iszero(iszero(value3)))\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        let value := mload(add(headStart, 96))\n        if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n        value3 := value\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_tuple_t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 288)\n        mstore(headStart, mload(value0))\n        mstore(add(headStart, 0x20), mload(add(value0, 0x20)))\n        mstore(add(headStart, 0x40), mload(add(value0, 0x40)))\n        mstore(add(headStart, 0x60), mload(add(value0, 0x60)))\n        mstore(add(headStart, 0x80), mload(add(value0, 0x80)))\n        mstore(add(headStart, 0xa0), mload(add(value0, 0xa0)))\n        mstore(add(headStart, 0xc0), mload(add(value0, 0xc0)))\n        let memberValue0 := mload(add(value0, 0xe0))\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 0xe0), and(memberValue0, _1))\n        let _2 := 0x0100\n        mstore(add(headStart, _2), and(mload(add(value0, _2)), _1))\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint256(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, exponent)\n    }\n    function abi_encode_tuple_t_rational_0_by_1__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function checked_sub_t_uint128(x, y) -> diff\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"GPv2: failed transferFrom\")\n        tail := add(headStart, 96)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function abi_decode_tuple_t_contract$_IPool_$4860_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_bytes32_t_address__to_t_bytes32_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"730000000000000000000000000000000000000000301460806040526004361061004b5760003560e01c806383c1087d14610050578063a18964a514610072578063d246754414610093575b600080fd5b81801561005c57600080fd5b5061007061006b366004613aea565b61009c565b005b610081670d2f13f7789f000081565b60405190815260200160405180910390f35b61008161271081565b6100a46138e5565b60408083015173ffffffffffffffffffffffffffffffffffffffff9081166000908152602089815283822060608701518416835284832060808801519094168352908890529290206100f582610832565b6101608501819052610108908390610a4b565b61018e8989886040518060a001604052808660405180602001604052908160008201548152505081526020018a6000015181526020018a6080015173ffffffffffffffffffffffffffffffffffffffff1681526020018a60c0015173ffffffffffffffffffffffffffffffffffffffff1681526020018a60e0015160ff16815250610ad6565b5060c089018190526101608901516101ad955093508992509050611040565b86602001876040018860600183815250838152508381525050505061021b818460405180608001604052808861016001518152602001886040015181526020018860c00151815260200189610100015173ffffffffffffffffffffffffffffffffffffffff168152506110c6565b610226868487611575565b60a088015273ffffffffffffffffffffffffffffffffffffffff908116610120880152908116610100870152908116610140860181905260808701516040517f70a0823100000000000000000000000000000000000000000000000000000000815292166004830152906370a0823190602401602060405180830381865afa1580156102b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102da9190613bf3565b808552610160850151610100860151610120870151606088015160a089015160c08b015161030f968a969594939290916116a9565b60e08701526060860181905260808601919091526040850151141561035d57600382015461035d9082907501000000000000000000000000000000000000000000900461ffff166000611a09565b835160e085015160808601516103739190613c3b565b141561040b5760038301546103a89082907501000000000000000000000000000000000000000000900461ffff166000611a9e565b846080015173ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff167f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd60405160405180910390a35b6104158585611b27565b6101608401516060808701519086015161043492859290916000611db8565b61044a89898387610160015188606001516120f9565b8460a001511561046757610462898989868989612301565b610472565b61047283868661250d565b60e08401511561067c576000610487846125e5565b905060006104a2828760e0015161267c90919063ffffffff16565b61014087015160808901516040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152929350600092911690631da24f3e90602401602060405180830381865afa15801561051f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105439190613bf3565b90508082111561055d5761055781846126bb565b60e08801525b86610140015173ffffffffffffffffffffffffffffffffffffffff1663f866c319896080015189610140015173ffffffffffffffffffffffffffffffffffffffff1663ae1673356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f79190613c53565b8a60e001516040518463ffffffff1660e01b81526004016106469392919073ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b600060405180830381600087803b15801561066057600080fd5b505af1158015610674573d6000803e3d6000fd5b505050505050505b6106bb338561016001516101e001518660600151886060015173ffffffffffffffffffffffffffffffffffffffff16612712909392919063ffffffff16565b6101608401516101e00151608086015160608601516040517f6fd9767600000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff92831660248201526044810191909152911690636fd9767690606401600060405180830381600087803b15801561074757600080fd5b505af115801561075b573d6000803e3d6000fd5b50505050846080015173ffffffffffffffffffffffffffffffffffffffff16856060015173ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff167fe413a321e8681d831f4dbccbca790d2952b56f977908e45be37335533e00528687606001518860800151338b60a0015160405161081f9493929190938452602084019290925273ffffffffffffffffffffffffffffffffffffffff1660408301521515606082015260800190565b60405180910390a4505050505050505050565b61083a61398d565b61084261398d565b60408051602081018252845481526101c0830181905251901c61ffff166101a082015260018301546fffffffffffffffffffffffffffffffff808216610100840181905260e0840152600285015480821661014085018190526101208501527001000000000000000000000000000000009283900482166101608501528290041661018083015260048085015473ffffffffffffffffffffffffffffffffffffffff9081166101e085015260058601548116610200850152600686015416610220840181905260038601549290920464ffffffffff16610240840152604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905163b1bf962d928281019260209291908290030181865afa15801561096f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109939190613bf3565b816020018181525081600001818152505080610200015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa1580156109f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a189190613c70565b64ffffffffff166102608501526060840181905260808401829052604084019290925260c083015260a082015292915050565b60038201544264ffffffffff908116700100000000000000000000000000000000909204161415610a7a575050565b610a8482826127ed565b610a8e828261290f565b5060030180547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff1602179055565b600080600080600080610aec8760000151511590565b15610b285750600094508493508392508291507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905081611033565b610bd760405180610260016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581525090565b608088015160ff1615610c1c57608088015160ff16600090815260208a9052604090206060890151610c099190612a8f565b6101808401526101c08301526101a08201525b87602001518160c001511015610f3b5760c08101518851610c3c91612b6e565b610c505760c0810180516001019052610c1c565b60c0810151600090815260208b9052604090205473ffffffffffffffffffffffffffffffffffffffff166102008201819052610c965760c0810180516001019052610c1c565b61020081015173ffffffffffffffffffffffffffffffffffffffff16600090815260208c8152604091829020825180830190935280549283905260ff60a884901c81166101e0860152603084901c166060850181905261ffff601085901c811660a08701529093166080850152600a9290920a9083015261018082015115801590610d2c5750816101e00151896080015160ff16145b610dd05760608901516102008301516040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063b3596f0790602401602060405180830381865afa158015610da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcb9190613bf3565b610dd7565b8161018001515b825260a082015115801590610df7575060c08201518951610df791612bf6565b15610ee757610e1489604001518284600001518560200151612c7a565b6040830181905261010083018051610e2d908390613c3b565b90525060808901516101e0830151610e489160ff1690612d55565b1515610240830152608082015115610e9e57816102400151610e6e578160800151610e75565b816101a001515b8260400151610e849190613cbb565b8261014001818151610e969190613c3b565b905250610ea7565b60016102208301525b816102400151610ebb578160a00151610ec2565b816101c001515b8260400151610ed19190613cbb565b8261016001818151610ee39190613c3b565b9052505b60c08201518951610ef791612d66565b15610f2a57610f1489604001518284600001518560200151612de8565b8261012001818151610f269190613c3b565b9052505b5060c0810180516001019052610c1c565b610100810151610f4c576000610f67565b80610100015181610140015181610f6557610f65613cf8565b045b610140820152610100810151610f7e576000610f99565b80610100015181610160015181610f9757610f97613cf8565b045b61016082015261012081015115610fdb57610fd6816101200151610fd0836101600151846101000151612f6890919063ffffffff16565b90612fab565b610ffd565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b60e0820181905261010082015161012083015161014084015161016085015161022090950151929a509098509650919450925090505b9499939850945094509450565b6000806000806000611056876080015189612fe2565b909250905060006110678284613c3b565b90506000670d2f13f7789f0000881161108257612710611086565b6113885b905060006110948383612f68565b90506000818b60200151116110ad578a602001516110af565b815b949850929650929450505050505b93509350939050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915260408051602081019091528354815261114c9051670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b1515602086015250505015801580835283516101c0015151671000000000000000811615156060850152670100000000000000161515604084015290611193575080604001515b6040518060400160405280600281526020017f32370000000000000000000000000000000000000000000000000000000000008152509061120a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b60405180910390fd5b50806020015115801561121f57508060600151155b6040518060400160405280600281526020017f32390000000000000000000000000000000000000000000000000000000000008152509061128d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50606082015173ffffffffffffffffffffffffffffffffffffffff1615806112c05750670d2f13f7789f00008260400151105b806113395750816060015173ffffffffffffffffffffffffffffffffffffffff16637a5d20ea6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113399190613d9a565b6040518060400160405280600281526020017f3539000000000000000000000000000000000000000000000000000000000000815250906113a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50670de0b6b3a76400008260400151106040518060400160405280600281526020017f343500000000000000000000000000000000000000000000000000000000000081525090611425576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50604080516020810190915283549081905260101c61ffff161580159061148157506003830154604080516020810190915285548152611481917501000000000000000000000000000000000000000000900461ffff16612bf6565b15156080820181905260408051808201909152600281527f34360000000000000000000000000000000000000000000000000000000000006020820152906114f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b508160200151600014156040518060400160405280600281526020017f34370000000000000000000000000000000000000000000000000000000000008152509061156e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b5050505050565b6004820154604080516020808201835285549182905291840151606085015160e086015160009586958695869573ffffffffffffffffffffffffffffffffffffffff90931694911c61ffff169260ff16156116985760e08901805160ff908116600090815260208e815260409182902054935182519182019092528d5490819052660100000000000090930473ffffffffffffffffffffffffffffffffffffffff169261162c929182169160a89190911c16612d55565b156116765760e08a015160ff16600090815260208d90526040902054640100000000900461ffff16935073ffffffffffffffffffffffffffffffffffffffff811615611676578092505b73ffffffffffffffffffffffffffffffffffffffff811615611696578091505b505b929a90995091975095509350505050565b6000806000611719604051806101a00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015286169063b3596f0790602401602060405180830381865afa158015611785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a99190613bf3565b81526040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116600483015286169063b3596f0790602401602060405180830381865afa158015611817573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183b9190613bf3565b6020828101919091526040805191820190528c549081905260301c60ff1660c08201526101c08b01515160301c60ff1660a0820181905260c0820151600a90810a60e08401520a61010082015260408051602081019091528c549081905260981c61ffff1661016082015261010081015181516118b89190613cbb565b8160e001518983602001516118cd9190613cbb565b6118d79190613cbb565b6118e19190613db7565b606082018190526118f29087612f68565b6040820181905287101561195f57610120810187905260e081015160208201516119549188916119229190613cbb565b610100840151610120850151855161193a9190613cbb565b6119449190613cbb565b61194e9190613db7565b9061311f565b610140820152611973565b604081015161012082015261014081018890525b610160810151156119e55761012081015161198e908761311f565b81610120015161199e9190613df2565b608082018190526101608201516119b59190612f68565b61018082018190526101208201516119cd9190613df2565b816101400151826101800151935093509350506119fb565b8061012001518161014001516000935093509350505b985098509895505050505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260808310611a78576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50600182811b1b8115611a9057835481178455611a98565b835481191684555b50505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260808310611b0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50600182811b81011b8115611a9057835481178455611a98565b8060600151816020015110611bff5761016081015161022081015160808401516060840151610140909301516040517ff5298aca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101949094526044840152169063f5298aca906064016020604051808303816000875af1158015611bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf19190613bf3565b610160820151602001525050565b602081015115611ccf5761016081015161022081015160808401516020840151610140909301516040517ff5298aca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101949094526044840152169063f5298aca906064016020604051808303816000875af1158015611ca0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc49190613bf3565b610160820151602001525b806101600151610200015173ffffffffffffffffffffffffffffffffffffffff16639dc29fac836080015183602001518460600151611d0e9190613df2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff9092166004830152602482015260440160408051808303816000875af1158015611d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da19190613e09565b61016083015160a081019190915260c001525b5050565b611de36040518060800160405280600081526020016000815260200160008152602001600081525090565b6101408501516020860151611df7916126bb565b60608083019182526007880154604080516101208101825260088b01546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000009091041681526020810188905280820187905260c0808b0151948201949094529351608085015260a0808a0151908501526101a08901519284019290925273ffffffffffffffffffffffffffffffffffffffff87811660e08501526101e0890151811661010085015291517fa589870900000000000000000000000000000000000000000000000000000000815291169163a589870991611f589190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa158015611f75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f999190613e2d565b60408401526020830152808252611faf9061314a565b6001870180546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556020810151611ff29061314a565b6003870180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9290921691909117905560408101516120439061314a565b6002870180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905580516020808301516040808501516101008a01516101408b0151835196875294860193909352908401526060830152608082015273ffffffffffffffffffffffffffffffffffffffff8516907f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a9060a00160405180910390a2505050505050565b60408051602081019091528354815260009081906121189088886131f0565b509150915081156122f85773ffffffffffffffffffffffffffffffffffffffff81166000908152602088905260408120600901546101c0860151516fffffffffffffffffffffffffffffffff909116919061219a9060029060301c60ff166121809190613df2565b61218b90600a613f7b565b6121959087613db7565b61314a565b9050806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff161161224a5773ffffffffffffffffffffffffffffffffffffffff8316600081815260208b8152604080832060090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055519182527faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5910160405180910390a26122f5565b60006122568284613f87565b73ffffffffffffffffffffffffffffffffffffffff8516600081815260208d815260409182902060090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff959095169485179055905183815292935090917faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5910160405180910390a2505b50505b50505050505050565b6101408101516040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612373573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123979190613bf3565b610140830151608080860151908501516040517ff866c31900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201523360248201526044810191909152929350169063f866c31990606401600060405180830381600087803b15801561242057600080fd5b505af1158015612434573d6000803e3d6000fd5b5050505080600014156122f85733600090815260208681526040918290208251918201909252855481526004860154612488918a918a91859173ffffffffffffffffffffffffffffffffffffffff166132a5565b156125035760038501546124bc9082907501000000000000000000000000000000000000000000900461ffff166001611a9e565b6040808501519051339173ffffffffffffffffffffffffffffffffffffffff16907e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f290600090a35b5050505050505050565b600061251884610832565b90506125248482610a4b565b6040830151608083015161253f918691849190600090611db8565b610140820151608080850151908401516101008401516040517fd7020d0a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff93841660048201523360248201526044810192909252606482015291169063d7020d0a90608401600060405180830381600087803b1580156125d157600080fd5b505af1158015612503573d6000803e3d6000fd5b6003810154600090700100000000000000000000000000000000900464ffffffffff164281141561262b575050600101546fffffffffffffffffffffffffffffffff1690565b600183015461266f906fffffffffffffffffffffffffffffffff808216916126699170010000000000000000000000000000000090910416846134e7565b906126bb565b9392505050565b50919050565b600081156b033b2e3c9fd0803ce8000000600284041904841117156126a057600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff839004841115176126f057600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af161277d573d6000803e3d6000fd5b5061278785613524565b61156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d000000000000006044820152606401611201565b6101608101511561287d57600061280e8261016001518361024001516134e7565b90506128278260e00151826126bb90919063ffffffff16565b61010083018190526128389061314a565b6001840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b805115611db457600061289a8261018001518361024001516135ee565b90506128b4826101200151826126bb90919063ffffffff16565b61014083018190526128c59061314a565b6002840180546fffffffffffffffffffffffffffffffff929092167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216919091179055505050565b6129486040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6101a082015161295757505050565b6101208201518251612968916126bb565b6020820152610140820151825161297e916126bb565b604082015260608201516102608301516102408401516129a692919064ffffffffff166135f7565b6060820181905260408301516129bb916126bb565b8082526020820151608084015160408401516129d79190613c3b565b6129e19190613df2565b6129eb9190613df2565b608082018190526101a0830151612a029190612f68565b60a0820181905215612a8a57612a2d6121958361010001518360a0015161267c90919063ffffffff16565b600884018054600090612a539084906fffffffffffffffffffffffffffffffff16613fb8565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b505050565b81546000908190819081906601000000000000900473ffffffffffffffffffffffffffffffffffffffff168015612b53576040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015287169063b3596f0790602401602060405180830381865afa158015612b2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b509190613bf3565b91505b50945461ffff80821697620100009092041695945092505050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612be0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50508151600182901b1c60031615155b92915050565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612c68576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50509051600191821b82011c16151590565b600080612c86856125e5565b6004868101546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116938201939093529293506000928792612d2c928692911690631da24f3e90602401602060405180830381865afa158015612d08573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126699190613bf3565b612d369190613cbb565b9050838181612d4757612d47613cf8565b04925050505b949350505050565b6000821580159061266f5750501490565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612dd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019190613d27565b50509051600191821b1c16151590565b60068301546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000928392911690631da24f3e90602401602060405180830381865afa158015612e5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e829190613bf3565b90508015612ea057612e9d612e968661373e565b82906126bb565b90505b60058501546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152909116906370a0823190602401602060405180830381865afa158015612f12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f369190613bf3565b612f409082613c3b565b9050612f4c8185613cbb565b9050828181612f5d57612f5d613cf8565b049695505050505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7783900484111517612f9d57600080fd5b506127109102611388010490565b60008115670de0b6b3a764000060028404190484111715612fcb57600080fd5b50670de0b6b3a76400009190910260028204010490565b6102008101516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260009283929116906370a0823190602401602060405180830381865afa158015613059573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061307d9190613bf3565b6102208401516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152909116906370a0823190602401602060405180830381865afa1580156130f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131149190613bf3565b915091509250929050565b600081156127106002840419048411171561313957600080fd5b506127109190910260028204010490565b60006fffffffffffffffffffffffffffffffff8211156131ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401611201565b5090565b60008060006131fe866137c2565b1561329557600061322f877faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa613806565b6000818152602087815260408083205473ffffffffffffffffffffffffffffffffffffffff168084528a8352818420825193840190925290549182905292935060d41c64ffffffffff1690508015613291576001955090935091506110bd9050565b5050505b5060009586955085945092505050565b815160009060d41c64ffffffffff16156134cf5760008273ffffffffffffffffffffffffffffffffffffffff16637535d2466040518163ffffffff1660e01b8152600401602060405180830381865afa158015613306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332a9190613c53565b73ffffffffffffffffffffffffffffffffffffffff16630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133989190613c53565b90508073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134099190613c53565b6040517f91d148540000000000000000000000000000000000000000000000000000000081527fd1d2cf869016112a9af1107bcf43c3759daf22cf734aad47d0c9c726e33bc782600482015233602482015273ffffffffffffffffffffffffffffffffffffffff91909116906391d1485490604401602060405180830381865afa15801561349b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134bf9190613d9a565b6134cd5760009150506134de565b505b6134db8686868661384a565b90505b95945050505050565b6000806134fb64ffffffffff841642613df2565b6135059085613cbb565b6301e1338090049050612d4d816b033b2e3c9fd0803ce8000000613c3b565b6000613564565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156135a357602081146135dd5761359e7f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f61352b565b612676565b823b6135d4576135d47f475076323a206e6f74206120636f6e7472616374000000000000000000000000601461352b565b60019150612676565b3d6000803e50506000511515919050565b600061266f8383425b60008061360b64ffffffffff851684613df2565b905080613627576b033b2e3c9fd0803ce800000091505061266f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101600080806002851161365d576000613662565b600285035b925066038882915c40006136768a806126bb565b8161368357613683613cf8565b0491506301e13380613695838b6126bb565b816136a2576136a2613cf8565b0490506000826136b28688613cbb565b6136bc9190613cbb565b600290049050600082856136d0888a613cbb565b6136da9190613cbb565b6136e49190613cbb565b60069004905080826301e133806136fb8a8f613cbb565b6137059190613db7565b61371b906b033b2e3c9fd0803ce8000000613c3b565b6137259190613c3b565b61372f9190613c3b565b9b9a5050505050505050505050565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415613784575050600201546fffffffffffffffffffffffffffffffff1690565b600283015461266f906fffffffffffffffffffffffffffffffff808216916126699170010000000000000000000000000000000090910416846135ee565b80516000907faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa16801580159061266f57506137fe600182613df2565b161592915050565b815160009082167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101198116825b60029190911c9081156134de57600101613835565b6000613858825161ffff1690565b61386457506000612d4d565b60408051602081019091528354908190527faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa166138a357506001612d4d565b6040805160208101909152835481526000906138c09087876131f0565b50509050801580156138db5750825160d41c64ffffffffff16155b9695505050505050565b6040518061018001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200161398861398d565b905290565b6040518061028001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001613a116040518060200160405280600081525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b604051610120810167ffffffffffffffff81118282101715613a85577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b73ffffffffffffffffffffffffffffffffffffffff81168114613aad57600080fd5b50565b8035613abb81613a8b565b919050565b8015158114613aad57600080fd5b8035613abb81613ac0565b803560ff81168114613abb57600080fd5b60008060008060008587036101a0811215613b0457600080fd5b86359550602087013594506040870135935060608701359250610120807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083011215613b4f57600080fd5b613b57613a3a565b91506080880135825260a08801356020830152613b7660c08901613ab0565b6040830152613b8760e08901613ab0565b6060830152610100613b9a818a01613ab0565b6080840152613baa828a01613ace565b60a0840152613bbc6101408a01613ab0565b60c0840152613bce6101608a01613ad9565b60e0840152613be06101808a01613ab0565b9083015250949793965091945092919050565b600060208284031215613c0557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115613c4e57613c4e613c0c565b500190565b600060208284031215613c6557600080fd5b815161266f81613a8b565b60008060008060808587031215613c8657600080fd5b845193506020850151925060408501519150606085015164ffffffffff81168114613cb057600080fd5b939692955090935050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613cf357613cf3613c0c565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060208083528351808285015260005b81811015613d5457858101830151858201604001528201613d38565b81811115613d66576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060208284031215613dac57600080fd5b815161266f81613ac0565b600082613ded577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015613e0457613e04613c0c565b500390565b60008060408385031215613e1c57600080fd5b505080516020909101519092909150565b600080600060608486031215613e4257600080fd5b8351925060208401519150604084015190509250925092565b600181815b80851115613eb457817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613e9a57613e9a613c0c565b80851615613ea757918102915b93841c9390800290613e60565b509250929050565b600082613ecb57506001612bf0565b81613ed857506000612bf0565b8160018114613eee5760028114613ef857613f14565b6001915050612bf0565b60ff841115613f0957613f09613c0c565b50506001821b612bf0565b5060208310610133831016604e8410600b8410161715613f37575081810a612bf0565b613f418383613e5b565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613f7357613f73613c0c565b029392505050565b600061266f8383613ebc565b60006fffffffffffffffffffffffffffffffff83811690831681811015613fb057613fb0613c0c565b039392505050565b60006fffffffffffffffffffffffffffffffff808316818516808303821115613fe357613fe3613c0c565b0194935050505056fea26469706673582212200117cc6118a47134965aee898d0743fed6f01d2d313d158e2078a86ebbab403464736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x83C1087D EQ PUSH2 0x50 JUMPI DUP1 PUSH4 0xA18964A5 EQ PUSH2 0x72 JUMPI DUP1 PUSH4 0xD2467544 EQ PUSH2 0x93 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x70 PUSH2 0x6B CALLDATASIZE PUSH1 0x4 PUSH2 0x3AEA JUMP JUMPDEST PUSH2 0x9C JUMP JUMPDEST STOP JUMPDEST PUSH2 0x81 PUSH8 0xD2F13F7789F0000 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x81 PUSH2 0x2710 DUP2 JUMP JUMPDEST PUSH2 0xA4 PUSH2 0x38E5 JUMP JUMPDEST PUSH1 0x40 DUP1 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP10 DUP2 MSTORE DUP4 DUP3 KECCAK256 PUSH1 0x60 DUP8 ADD MLOAD DUP5 AND DUP4 MSTORE DUP5 DUP4 KECCAK256 PUSH1 0x80 DUP9 ADD MLOAD SWAP1 SWAP5 AND DUP4 MSTORE SWAP1 DUP9 SWAP1 MSTORE SWAP3 SWAP1 KECCAK256 PUSH2 0xF5 DUP3 PUSH2 0x832 JUMP JUMPDEST PUSH2 0x160 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x108 SWAP1 DUP4 SWAP1 PUSH2 0xA4B JUMP JUMPDEST PUSH2 0x18E DUP10 DUP10 DUP9 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0xC0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0xE0 ADD MLOAD PUSH1 0xFF AND DUP2 MSTORE POP PUSH2 0xAD6 JUMP JUMPDEST POP PUSH1 0xC0 DUP10 ADD DUP2 SWAP1 MSTORE PUSH2 0x160 DUP10 ADD MLOAD PUSH2 0x1AD SWAP6 POP SWAP4 POP DUP10 SWAP3 POP SWAP1 POP PUSH2 0x1040 JUMP JUMPDEST DUP7 PUSH1 0x20 ADD DUP8 PUSH1 0x40 ADD DUP9 PUSH1 0x60 ADD DUP4 DUP2 MSTORE POP DUP4 DUP2 MSTORE POP DUP4 DUP2 MSTORE POP POP POP POP PUSH2 0x21B DUP2 DUP5 PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH2 0x160 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x40 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0xC0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP PUSH2 0x10C6 JUMP JUMPDEST PUSH2 0x226 DUP7 DUP5 DUP8 PUSH2 0x1575 JUMP JUMPDEST PUSH1 0xA0 DUP9 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x120 DUP9 ADD MSTORE SWAP1 DUP2 AND PUSH2 0x100 DUP8 ADD MSTORE SWAP1 DUP2 AND PUSH2 0x140 DUP7 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP8 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2DA SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST DUP1 DUP6 MSTORE PUSH2 0x160 DUP6 ADD MLOAD PUSH2 0x100 DUP7 ADD MLOAD PUSH2 0x120 DUP8 ADD MLOAD PUSH1 0x60 DUP9 ADD MLOAD PUSH1 0xA0 DUP10 ADD MLOAD PUSH1 0xC0 DUP12 ADD MLOAD PUSH2 0x30F SWAP7 DUP11 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP1 SWAP2 PUSH2 0x16A9 JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MSTORE PUSH1 0x60 DUP7 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP6 ADD MLOAD EQ ISZERO PUSH2 0x35D JUMPI PUSH1 0x3 DUP3 ADD SLOAD PUSH2 0x35D SWAP1 DUP3 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 PUSH2 0x1A09 JUMP JUMPDEST DUP4 MLOAD PUSH1 0xE0 DUP6 ADD MLOAD PUSH1 0x80 DUP7 ADD MLOAD PUSH2 0x373 SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST EQ ISZERO PUSH2 0x40B JUMPI PUSH1 0x3 DUP4 ADD SLOAD PUSH2 0x3A8 SWAP1 DUP3 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 PUSH2 0x1A9E JUMP JUMPDEST DUP5 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x44C58D81365B66DD4B1A7F36C25AA97B8C71C361EE4937ADC1A00000227DB5DD PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST PUSH2 0x415 DUP6 DUP6 PUSH2 0x1B27 JUMP JUMPDEST PUSH2 0x160 DUP5 ADD MLOAD PUSH1 0x60 DUP1 DUP8 ADD MLOAD SWAP1 DUP7 ADD MLOAD PUSH2 0x434 SWAP3 DUP6 SWAP3 SWAP1 SWAP2 PUSH1 0x0 PUSH2 0x1DB8 JUMP JUMPDEST PUSH2 0x44A DUP10 DUP10 DUP4 DUP8 PUSH2 0x160 ADD MLOAD DUP9 PUSH1 0x60 ADD MLOAD PUSH2 0x20F9 JUMP JUMPDEST DUP5 PUSH1 0xA0 ADD MLOAD ISZERO PUSH2 0x467 JUMPI PUSH2 0x462 DUP10 DUP10 DUP10 DUP7 DUP10 DUP10 PUSH2 0x2301 JUMP JUMPDEST PUSH2 0x472 JUMP JUMPDEST PUSH2 0x472 DUP4 DUP7 DUP7 PUSH2 0x250D JUMP JUMPDEST PUSH1 0xE0 DUP5 ADD MLOAD ISZERO PUSH2 0x67C JUMPI PUSH1 0x0 PUSH2 0x487 DUP5 PUSH2 0x25E5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4A2 DUP3 DUP8 PUSH1 0xE0 ADD MLOAD PUSH2 0x267C SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x140 DUP8 ADD MLOAD PUSH1 0x80 DUP10 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x51F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x543 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 GT ISZERO PUSH2 0x55D JUMPI PUSH2 0x557 DUP2 DUP5 PUSH2 0x26BB JUMP JUMPDEST PUSH1 0xE0 DUP9 ADD MSTORE JUMPDEST DUP7 PUSH2 0x140 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF866C319 DUP10 PUSH1 0x80 ADD MLOAD DUP10 PUSH2 0x140 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAE167335 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5D3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x5F7 SWAP2 SWAP1 PUSH2 0x3C53 JUMP JUMPDEST DUP11 PUSH1 0xE0 ADD MLOAD PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x646 SWAP4 SWAP3 SWAP2 SWAP1 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 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x660 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x674 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMPDEST PUSH2 0x6BB CALLER DUP6 PUSH2 0x160 ADD MLOAD PUSH2 0x1E0 ADD MLOAD DUP7 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2712 SWAP1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x160 DUP5 ADD MLOAD PUSH2 0x1E0 ADD MLOAD PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6FD9767600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND SWAP1 PUSH4 0x6FD97676 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x747 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x75B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP5 PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xE413A321E8681D831F4DBCCBCA790D2952B56F977908E45BE37335533E005286 DUP8 PUSH1 0x60 ADD MLOAD DUP9 PUSH1 0x80 ADD MLOAD CALLER DUP12 PUSH1 0xA0 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x81F SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 DUP4 ADD MSTORE ISZERO ISZERO PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x83A PUSH2 0x398D JUMP JUMPDEST PUSH2 0x842 PUSH2 0x398D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE DUP5 SLOAD DUP2 MSTORE PUSH2 0x1C0 DUP4 ADD DUP2 SWAP1 MSTORE MLOAD SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x1A0 DUP3 ADD MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH2 0x100 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x2 DUP6 ADD SLOAD DUP1 DUP3 AND PUSH2 0x140 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP6 ADD MSTORE PUSH17 0x100000000000000000000000000000000 SWAP3 DUP4 SWAP1 DIV DUP3 AND PUSH2 0x160 DUP6 ADD MSTORE DUP3 SWAP1 DIV AND PUSH2 0x180 DUP4 ADD MSTORE PUSH1 0x4 DUP1 DUP6 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE PUSH1 0x5 DUP7 ADD SLOAD DUP2 AND PUSH2 0x200 DUP6 ADD MSTORE PUSH1 0x6 DUP7 ADD SLOAD AND PUSH2 0x220 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x3 DUP7 ADD SLOAD SWAP3 SWAP1 SWAP3 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x240 DUP5 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0xB1BF962D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0xB1BF962D SWAP3 DUP3 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x96F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x993 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP DUP2 PUSH1 0x0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x79774338 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9F4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA18 SWAP2 SWAP1 PUSH2 0x3C70 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH2 0x260 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP5 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD TIMESTAMP PUSH5 0xFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP3 DIV AND EQ ISZERO PUSH2 0xA7A JUMPI POP POP JUMP JUMPDEST PUSH2 0xA84 DUP3 DUP3 PUSH2 0x27ED JUMP JUMPDEST PUSH2 0xA8E DUP3 DUP3 PUSH2 0x290F JUMP JUMPDEST POP PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0xAEC DUP8 PUSH1 0x0 ADD MLOAD MLOAD ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0xB28 JUMPI POP PUSH1 0x0 SWAP5 POP DUP5 SWAP4 POP DUP4 SWAP3 POP DUP3 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 POP DUP2 PUSH2 0x1033 JUMP JUMPDEST PUSH2 0xBD7 PUSH1 0x40 MLOAD DUP1 PUSH2 0x260 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND ISZERO PUSH2 0xC1C JUMPI PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0xC09 SWAP2 SWAP1 PUSH2 0x2A8F JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MSTORE PUSH2 0x1C0 DUP4 ADD MSTORE PUSH2 0x1A0 DUP3 ADD MSTORE JUMPDEST DUP8 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0xC0 ADD MLOAD LT ISZERO PUSH2 0xF3B JUMPI PUSH1 0xC0 DUP2 ADD MLOAD DUP9 MLOAD PUSH2 0xC3C SWAP2 PUSH2 0x2B6E JUMP JUMPDEST PUSH2 0xC50 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0xC1C JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP12 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x200 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0xC96 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0xC1C JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP13 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP4 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP3 DUP4 SWAP1 MSTORE PUSH1 0xFF PUSH1 0xA8 DUP5 SWAP1 SHR DUP2 AND PUSH2 0x1E0 DUP7 ADD MSTORE PUSH1 0x30 DUP5 SWAP1 SHR AND PUSH1 0x60 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0xFFFF PUSH1 0x10 DUP6 SWAP1 SHR DUP2 AND PUSH1 0xA0 DUP8 ADD MSTORE SWAP1 SWAP4 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA SWAP3 SWAP1 SWAP3 EXP SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0xD2C JUMPI POP DUP2 PUSH2 0x1E0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD PUSH1 0xFF AND EQ JUMPDEST PUSH2 0xDD0 JUMPI PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDA7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDCB SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0xDD7 JUMP JUMPDEST DUP2 PUSH2 0x180 ADD MLOAD JUMPDEST DUP3 MSTORE PUSH1 0xA0 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0xDF7 JUMPI POP PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0xDF7 SWAP2 PUSH2 0x2BF6 JUMP JUMPDEST ISZERO PUSH2 0xEE7 JUMPI PUSH2 0xE14 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x2C7A JUMP JUMPDEST PUSH1 0x40 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP4 ADD DUP1 MLOAD PUSH2 0xE2D SWAP1 DUP4 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x1E0 DUP4 ADD MLOAD PUSH2 0xE48 SWAP2 PUSH1 0xFF AND SWAP1 PUSH2 0x2D55 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x240 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD ISZERO PUSH2 0xE9E JUMPI DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0xE6E JUMPI DUP2 PUSH1 0x80 ADD MLOAD PUSH2 0xE75 JUMP JUMPDEST DUP2 PUSH2 0x1A0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0xE84 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST DUP3 PUSH2 0x140 ADD DUP2 DUP2 MLOAD PUSH2 0xE96 SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0xEA7 JUMP JUMPDEST PUSH1 0x1 PUSH2 0x220 DUP4 ADD MSTORE JUMPDEST DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0xEBB JUMPI DUP2 PUSH1 0xA0 ADD MLOAD PUSH2 0xEC2 JUMP JUMPDEST DUP2 PUSH2 0x1C0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0xED1 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST DUP3 PUSH2 0x160 ADD DUP2 DUP2 MLOAD PUSH2 0xEE3 SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0xEF7 SWAP2 PUSH2 0x2D66 JUMP JUMPDEST ISZERO PUSH2 0xF2A JUMPI PUSH2 0xF14 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x2DE8 JUMP JUMPDEST DUP3 PUSH2 0x120 ADD DUP2 DUP2 MLOAD PUSH2 0xF26 SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST POP PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0xC1C JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0xF4C JUMPI PUSH1 0x0 PUSH2 0xF67 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x140 ADD MLOAD DUP2 PUSH2 0xF65 JUMPI PUSH2 0xF65 PUSH2 0x3CF8 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0xF7E JUMPI PUSH1 0x0 PUSH2 0xF99 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x160 ADD MLOAD DUP2 PUSH2 0xF97 JUMPI PUSH2 0xF97 PUSH2 0x3CF8 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD ISZERO PUSH2 0xFDB JUMPI PUSH2 0xFD6 DUP2 PUSH2 0x120 ADD MLOAD PUSH2 0xFD0 DUP4 PUSH2 0x160 ADD MLOAD DUP5 PUSH2 0x100 ADD MLOAD PUSH2 0x2F68 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x2FAB JUMP JUMPDEST PUSH2 0xFFD JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH2 0x160 DUP6 ADD MLOAD PUSH2 0x220 SWAP1 SWAP6 ADD MLOAD SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMPDEST SWAP5 SWAP10 SWAP4 SWAP9 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1056 DUP8 PUSH1 0x80 ADD MLOAD DUP10 PUSH2 0x2FE2 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x0 PUSH2 0x1067 DUP3 DUP5 PUSH2 0x3C3B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH8 0xD2F13F7789F0000 DUP9 GT PUSH2 0x1082 JUMPI PUSH2 0x2710 PUSH2 0x1086 JUMP JUMPDEST PUSH2 0x1388 JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1094 DUP4 DUP4 PUSH2 0x2F68 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 DUP12 PUSH1 0x20 ADD MLOAD GT PUSH2 0x10AD JUMPI DUP11 PUSH1 0x20 ADD MLOAD PUSH2 0x10AF JUMP JUMPDEST DUP2 JUMPDEST SWAP5 SWAP9 POP SWAP3 SWAP7 POP SWAP3 SWAP5 POP POP POP POP POP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD DUP2 MSTORE PUSH2 0x114C SWAP1 MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO ISZERO PUSH1 0x20 DUP7 ADD MSTORE POP POP POP ISZERO DUP1 ISZERO DUP1 DUP4 MSTORE DUP4 MLOAD PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x1000000000000000 DUP2 AND ISZERO ISZERO PUSH1 0x60 DUP6 ADD MSTORE PUSH8 0x100000000000000 AND ISZERO ISZERO PUSH1 0x40 DUP5 ADD MSTORE SWAP1 PUSH2 0x1193 JUMPI POP DUP1 PUSH1 0x40 ADD MLOAD JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x120A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP1 PUSH1 0x20 ADD MLOAD ISZERO DUP1 ISZERO PUSH2 0x121F JUMPI POP DUP1 PUSH1 0x60 ADD MLOAD ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x128D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO DUP1 PUSH2 0x12C0 JUMPI POP PUSH8 0xD2F13F7789F0000 DUP3 PUSH1 0x40 ADD MLOAD LT JUMPDEST DUP1 PUSH2 0x1339 JUMPI POP DUP2 PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x7A5D20EA PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1315 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1339 SWAP2 SWAP1 PUSH2 0x3D9A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3539000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x13A7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 DUP3 PUSH1 0x40 ADD MLOAD LT PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3435000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1425 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x10 SHR PUSH2 0xFFFF AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1481 JUMPI POP PUSH1 0x3 DUP4 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP6 SLOAD DUP2 MSTORE PUSH2 0x1481 SWAP2 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0x2BF6 JUMP JUMPDEST ISZERO ISZERO PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3436000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH2 0x14F6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP DUP2 PUSH1 0x20 ADD MLOAD PUSH1 0x0 EQ ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3437000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x156E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE DUP6 SLOAD SWAP2 DUP3 SWAP1 MSTORE SWAP2 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0xE0 DUP7 ADD MLOAD PUSH1 0x0 SWAP6 DUP7 SWAP6 DUP7 SWAP6 DUP7 SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP5 SWAP2 SHR PUSH2 0xFFFF AND SWAP3 PUSH1 0xFF AND ISZERO PUSH2 0x1698 JUMPI PUSH1 0xE0 DUP10 ADD DUP1 MLOAD PUSH1 0xFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP15 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD SWAP4 MLOAD DUP3 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP3 MSTORE DUP14 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH7 0x1000000000000 SWAP1 SWAP4 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 PUSH2 0x162C SWAP3 SWAP2 DUP3 AND SWAP2 PUSH1 0xA8 SWAP2 SWAP1 SWAP2 SHR AND PUSH2 0x2D55 JUMP JUMPDEST ISZERO PUSH2 0x1676 JUMPI PUSH1 0xE0 DUP11 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP14 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH5 0x100000000 SWAP1 DIV PUSH2 0xFFFF AND SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x1676 JUMPI DUP1 SWAP3 POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x1696 JUMPI DUP1 SWAP2 POP JUMPDEST POP JUMPDEST SWAP3 SWAP11 SWAP1 SWAP10 POP SWAP2 SWAP8 POP SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1719 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1A0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1785 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x17A9 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1817 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x183B SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH1 0x20 DUP3 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 ADD SWAP1 MSTORE DUP13 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x30 SHR PUSH1 0xFF AND PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1C0 DUP12 ADD MLOAD MLOAD PUSH1 0x30 SHR PUSH1 0xFF AND PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0xA SWAP1 DUP2 EXP PUSH1 0xE0 DUP5 ADD MSTORE EXP PUSH2 0x100 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP13 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0x98 SHR PUSH2 0xFFFF AND PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD DUP2 MLOAD PUSH2 0x18B8 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST DUP2 PUSH1 0xE0 ADD MLOAD DUP10 DUP4 PUSH1 0x20 ADD MLOAD PUSH2 0x18CD SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x18D7 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x18E1 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x18F2 SWAP1 DUP8 PUSH2 0x2F68 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE DUP8 LT ISZERO PUSH2 0x195F JUMPI PUSH2 0x120 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x1954 SWAP2 DUP9 SWAP2 PUSH2 0x1922 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x100 DUP5 ADD MLOAD PUSH2 0x120 DUP6 ADD MLOAD DUP6 MLOAD PUSH2 0x193A SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x1944 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x194E SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST SWAP1 PUSH2 0x311F JUMP JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x1973 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x120 DUP3 ADD MSTORE PUSH2 0x140 DUP2 ADD DUP9 SWAP1 MSTORE JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD ISZERO PUSH2 0x19E5 JUMPI PUSH2 0x120 DUP2 ADD MLOAD PUSH2 0x198E SWAP1 DUP8 PUSH2 0x311F JUMP JUMPDEST DUP2 PUSH2 0x120 ADD MLOAD PUSH2 0x199E SWAP2 SWAP1 PUSH2 0x3DF2 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x160 DUP3 ADD MLOAD PUSH2 0x19B5 SWAP2 SWAP1 PUSH2 0x2F68 JUMP JUMPDEST PUSH2 0x180 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP3 ADD MLOAD PUSH2 0x19CD SWAP2 SWAP1 PUSH2 0x3DF2 JUMP JUMPDEST DUP2 PUSH2 0x140 ADD MLOAD DUP3 PUSH2 0x180 ADD MLOAD SWAP4 POP SWAP4 POP SWAP4 POP POP PUSH2 0x19FB JUMP JUMPDEST DUP1 PUSH2 0x120 ADD MLOAD DUP2 PUSH2 0x140 ADD MLOAD PUSH1 0x0 SWAP4 POP SWAP4 POP SWAP4 POP POP JUMPDEST SWAP9 POP SWAP9 POP SWAP9 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 DUP4 LT PUSH2 0x1A78 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP PUSH1 0x1 DUP3 DUP2 SHL SHL DUP2 ISZERO PUSH2 0x1A90 JUMPI DUP4 SLOAD DUP2 OR DUP5 SSTORE PUSH2 0x1A98 JUMP JUMPDEST DUP4 SLOAD DUP2 NOT AND DUP5 SSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 DUP4 LT PUSH2 0x1B0D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP PUSH1 0x1 DUP3 DUP2 SHL DUP2 ADD SHL DUP2 ISZERO PUSH2 0x1A90 JUMPI DUP4 SLOAD DUP2 OR DUP5 SSTORE PUSH2 0x1A98 JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x20 ADD MLOAD LT PUSH2 0x1BFF JUMPI PUSH2 0x160 DUP2 ADD MLOAD PUSH2 0x220 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x60 DUP5 ADD MLOAD PUSH2 0x140 SWAP1 SWAP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xF5298ACA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x44 DUP5 ADD MSTORE AND SWAP1 PUSH4 0xF5298ACA SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1BCD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1BF1 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0x160 DUP3 ADD MLOAD PUSH1 0x20 ADD MSTORE POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD ISZERO PUSH2 0x1CCF JUMPI PUSH2 0x160 DUP2 ADD MLOAD PUSH2 0x220 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x140 SWAP1 SWAP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xF5298ACA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x44 DUP5 ADD MSTORE AND SWAP1 PUSH4 0xF5298ACA SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1CA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1CC4 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0x160 DUP3 ADD MLOAD PUSH1 0x20 ADD MSTORE JUMPDEST DUP1 PUSH2 0x160 ADD MLOAD PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9DC29FAC DUP4 PUSH1 0x80 ADD MLOAD DUP4 PUSH1 0x20 ADD MLOAD DUP5 PUSH1 0x60 ADD MLOAD PUSH2 0x1D0E SWAP2 SWAP1 PUSH2 0x3DF2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1D7D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DA1 SWAP2 SWAP1 PUSH2 0x3E09 JUMP JUMPDEST PUSH2 0x160 DUP4 ADD MLOAD PUSH1 0xA0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xC0 ADD MSTORE JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x1DE3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0x1DF7 SWAP2 PUSH2 0x26BB JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x7 DUP9 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x8 DUP12 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP9 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP12 ADD MLOAD SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 MLOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP11 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x1A0 DUP10 ADD MLOAD SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x1E0 DUP10 ADD MLOAD DUP2 AND PUSH2 0x100 DUP6 ADD MSTORE SWAP2 MLOAD PUSH32 0xA589870900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0xA5898709 SWAP2 PUSH2 0x1F58 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE 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 PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 SWAP2 POP DUP1 DUP3 DUP7 ADD MLOAD AND DUP3 DUP6 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F75 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F99 SWAP2 SWAP1 PUSH2 0x3E2D JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP1 DUP3 MSTORE PUSH2 0x1FAF SWAP1 PUSH2 0x314A JUMP JUMPDEST PUSH1 0x1 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x1FF2 SWAP1 PUSH2 0x314A JUMP JUMPDEST PUSH1 0x3 DUP8 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x2043 SWAP1 PUSH2 0x314A JUMP JUMPDEST PUSH1 0x2 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH2 0x100 DUP11 ADD MLOAD PUSH2 0x140 DUP12 ADD MLOAD DUP4 MLOAD SWAP7 DUP8 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0x804C9B842B2748A22BB64B345453A3DE7CA54A6CA45CE00D415894979E22897A SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0x2118 SWAP1 DUP9 DUP9 PUSH2 0x31F0 JUMP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x22F8 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x9 ADD SLOAD PUSH2 0x1C0 DUP7 ADD MLOAD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 SWAP1 PUSH2 0x219A SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0x2180 SWAP2 SWAP1 PUSH2 0x3DF2 JUMP JUMPDEST PUSH2 0x218B SWAP1 PUSH1 0xA PUSH2 0x3F7B JUMP JUMPDEST PUSH2 0x2195 SWAP1 DUP8 PUSH2 0x3DB7 JUMP JUMPDEST PUSH2 0x314A JUMP JUMPDEST SWAP1 POP DUP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GT PUSH2 0x224A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP12 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE MLOAD SWAP2 DUP3 MSTORE PUSH32 0xAEF84D3B40895FD58C561F3998000F0583ABB992A52FBDC99ACE8E8DE4D676A5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH2 0x22F5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2256 DUP3 DUP5 PUSH2 0x3F87 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP14 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 SWAP1 SWAP6 AND SWAP5 DUP6 OR SWAP1 SSTORE SWAP1 MLOAD DUP4 DUP2 MSTORE SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH32 0xAEF84D3B40895FD58C561F3998000F0583ABB992A52FBDC99ACE8E8DE4D676A5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMPDEST POP POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x140 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2373 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2397 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MLOAD PUSH1 0x80 DUP1 DUP7 ADD MLOAD SWAP1 DUP6 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xF866C31900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 SWAP4 POP AND SWAP1 PUSH4 0xF866C319 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2420 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2434 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH1 0x0 EQ ISZERO PUSH2 0x22F8 JUMPI CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP3 MSTORE DUP6 SLOAD DUP2 MSTORE PUSH1 0x4 DUP7 ADD SLOAD PUSH2 0x2488 SWAP2 DUP11 SWAP2 DUP11 SWAP2 DUP6 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x32A5 JUMP JUMPDEST ISZERO PUSH2 0x2503 JUMPI PUSH1 0x3 DUP6 ADD SLOAD PUSH2 0x24BC SWAP1 DUP3 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x1 PUSH2 0x1A9E JUMP JUMPDEST PUSH1 0x40 DUP1 DUP6 ADD MLOAD SWAP1 MLOAD CALLER SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH31 0x58A56EA94653CDF4F152D227ACE22D4C00AD99E2A43F58CB7D9E3FEB295F2 SWAP1 PUSH1 0x0 SWAP1 LOG3 JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2518 DUP5 PUSH2 0x832 JUMP JUMPDEST SWAP1 POP PUSH2 0x2524 DUP5 DUP3 PUSH2 0xA4B JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x253F SWAP2 DUP7 SWAP2 DUP5 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH2 0x1DB8 JUMP JUMPDEST PUSH2 0x140 DUP3 ADD MLOAD PUSH1 0x80 DUP1 DUP6 ADD MLOAD SWAP1 DUP5 ADD MLOAD PUSH2 0x100 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xD7020D0A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x64 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0xD7020D0A SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x25D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2503 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x262B JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x266F SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x2669 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x34E7 JUMP JUMPDEST SWAP1 PUSH2 0x26BB JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x26A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x26F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x277D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x2787 DUP6 PUSH2 0x3524 JUMP JUMPDEST PUSH2 0x156E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1201 JUMP JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD ISZERO PUSH2 0x287D JUMPI PUSH1 0x0 PUSH2 0x280E DUP3 PUSH2 0x160 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x34E7 JUMP JUMPDEST SWAP1 POP PUSH2 0x2827 DUP3 PUSH1 0xE0 ADD MLOAD DUP3 PUSH2 0x26BB SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x100 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x2838 SWAP1 PUSH2 0x314A JUMP JUMPDEST PUSH1 0x1 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1DB4 JUMPI PUSH1 0x0 PUSH2 0x289A DUP3 PUSH2 0x180 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x35EE JUMP JUMPDEST SWAP1 POP PUSH2 0x28B4 DUP3 PUSH2 0x120 ADD MLOAD DUP3 PUSH2 0x26BB SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x140 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x28C5 SWAP1 PUSH2 0x314A JUMP JUMPDEST PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH2 0x2948 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x1A0 DUP3 ADD MLOAD PUSH2 0x2957 JUMPI POP POP POP JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x2968 SWAP2 PUSH2 0x26BB JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x140 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x297E SWAP2 PUSH2 0x26BB JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x260 DUP4 ADD MLOAD PUSH2 0x240 DUP5 ADD MLOAD PUSH2 0x29A6 SWAP3 SWAP2 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x35F7 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x29BB SWAP2 PUSH2 0x26BB JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x29D7 SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST PUSH2 0x29E1 SWAP2 SWAP1 PUSH2 0x3DF2 JUMP JUMPDEST PUSH2 0x29EB SWAP2 SWAP1 PUSH2 0x3DF2 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP4 ADD MLOAD PUSH2 0x2A02 SWAP2 SWAP1 PUSH2 0x2F68 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE ISZERO PUSH2 0x2A8A JUMPI PUSH2 0x2A2D PUSH2 0x2195 DUP4 PUSH2 0x100 ADD MLOAD DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0x267C SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x8 DUP5 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x2A53 SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3FB8 JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST POP POP POP JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH7 0x1000000000000 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x2B53 JUMPI PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B2C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2B50 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP5 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP8 PUSH3 0x10000 SWAP1 SWAP3 DIV AND SWAP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x2BE0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP POP DUP2 MLOAD PUSH1 0x1 DUP3 SWAP1 SHL SHR PUSH1 0x3 AND ISZERO ISZERO JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x2C68 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL DUP3 ADD SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2C86 DUP6 PUSH2 0x25E5 JUMP JUMPDEST PUSH1 0x4 DUP7 DUP2 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 DUP8 SWAP3 PUSH2 0x2D2C SWAP3 DUP7 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D08 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2669 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0x2D36 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 PUSH2 0x2D47 JUMPI PUSH2 0x2D47 PUSH2 0x3CF8 JUMP JUMPDEST DIV SWAP3 POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x266F JUMPI POP POP EQ SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x2DD8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1201 SWAP2 SWAP1 PUSH2 0x3D27 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x6 DUP4 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E5E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2E82 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x2EA0 JUMPI PUSH2 0x2E9D PUSH2 0x2E96 DUP7 PUSH2 0x373E JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x26BB JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x5 DUP6 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F12 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F36 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0x2F40 SWAP1 DUP3 PUSH2 0x3C3B JUMP JUMPDEST SWAP1 POP PUSH2 0x2F4C DUP2 DUP6 PUSH2 0x3CBB JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 PUSH2 0x2F5D JUMPI PUSH2 0x2F5D PUSH2 0x3CF8 JUMP JUMPDEST DIV SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x2F9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH8 0xDE0B6B3A7640000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x2FCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3059 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x307D SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST PUSH2 0x220 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x30F0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3114 SWAP2 SWAP1 PUSH2 0x3BF3 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH2 0x2710 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x3139 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x31EC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1201 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x31FE DUP7 PUSH2 0x37C2 JUMP JUMPDEST ISZERO PUSH2 0x3295 JUMPI PUSH1 0x0 PUSH2 0x322F DUP8 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA PUSH2 0x3806 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 DUP5 MSTORE DUP11 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP3 MLOAD SWAP4 DUP5 ADD SWAP1 SWAP3 MSTORE SWAP1 SLOAD SWAP2 DUP3 SWAP1 MSTORE SWAP3 SWAP4 POP PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x3291 JUMPI PUSH1 0x1 SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x10BD SWAP1 POP JUMP JUMPDEST POP POP POP JUMPDEST POP PUSH1 0x0 SWAP6 DUP7 SWAP6 POP DUP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND ISZERO PUSH2 0x34CF JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x7535D246 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3306 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x332A SWAP2 SWAP1 PUSH2 0x3C53 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3374 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3398 SWAP2 SWAP1 PUSH2 0x3C53 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x33E5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3409 SWAP2 SWAP1 PUSH2 0x3C53 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x91D1485400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0xD1D2CF869016112A9AF1107BCF43C3759DAF22CF734AAD47D0C9C726E33BC782 PUSH1 0x4 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x91D14854 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x349B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x34BF SWAP2 SWAP1 PUSH2 0x3D9A JUMP JUMPDEST PUSH2 0x34CD JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x34DE JUMP JUMPDEST POP JUMPDEST PUSH2 0x34DB DUP7 DUP7 DUP7 DUP7 PUSH2 0x384A JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x34FB PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x3DF2 JUMP JUMPDEST PUSH2 0x3505 SWAP1 DUP6 PUSH2 0x3CBB JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x2D4D DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x3C3B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3564 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x35A3 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x35DD JUMPI PUSH2 0x359E PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x352B JUMP JUMPDEST PUSH2 0x2676 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x35D4 JUMPI PUSH2 0x35D4 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x352B JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x2676 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY POP POP PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x266F DUP4 DUP4 TIMESTAMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x360B PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x3DF2 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x3627 JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x266F JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x365D JUMPI PUSH1 0x0 PUSH2 0x3662 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x3676 DUP11 DUP1 PUSH2 0x26BB JUMP JUMPDEST DUP2 PUSH2 0x3683 JUMPI PUSH2 0x3683 PUSH2 0x3CF8 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x3695 DUP4 DUP12 PUSH2 0x26BB JUMP JUMPDEST DUP2 PUSH2 0x36A2 JUMPI PUSH2 0x36A2 PUSH2 0x3CF8 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x36B2 DUP7 DUP9 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x36BC SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x36D0 DUP9 DUP11 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x36DA SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x36E4 SWAP2 SWAP1 PUSH2 0x3CBB JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x36FB DUP11 DUP16 PUSH2 0x3CBB JUMP JUMPDEST PUSH2 0x3705 SWAP2 SWAP1 PUSH2 0x3DB7 JUMP JUMPDEST PUSH2 0x371B SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x3C3B JUMP JUMPDEST PUSH2 0x3725 SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST PUSH2 0x372F SWAP2 SWAP1 PUSH2 0x3C3B JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x3784 JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x266F SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x2669 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x35EE JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x266F JUMPI POP PUSH2 0x37FE PUSH1 0x1 DUP3 PUSH2 0x3DF2 JUMP JUMPDEST AND ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 DUP3 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD NOT DUP2 AND DUP3 JUMPDEST PUSH1 0x2 SWAP2 SWAP1 SWAP2 SHR SWAP1 DUP2 ISZERO PUSH2 0x34DE JUMPI PUSH1 0x1 ADD PUSH2 0x3835 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3858 DUP3 MLOAD PUSH2 0xFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x3864 JUMPI POP PUSH1 0x0 PUSH2 0x2D4D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND PUSH2 0x38A3 JUMPI POP PUSH1 0x1 PUSH2 0x2D4D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x38C0 SWAP1 DUP8 DUP8 PUSH2 0x31F0 JUMP JUMPDEST POP POP SWAP1 POP DUP1 ISZERO DUP1 ISZERO PUSH2 0x38DB JUMPI POP DUP3 MLOAD PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND ISZERO JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE 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 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3988 PUSH2 0x398D JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x280 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3A11 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3A85 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3AAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3ABB DUP2 PUSH2 0x3A8B JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3AAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3ABB DUP2 PUSH2 0x3AC0 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3ABB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP8 SUB PUSH2 0x1A0 DUP2 SLT ISZERO PUSH2 0x3B04 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH2 0x120 DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP4 ADD SLT ISZERO PUSH2 0x3B4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3B57 PUSH2 0x3A3A JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD DUP3 MSTORE PUSH1 0xA0 DUP9 ADD CALLDATALOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x3B76 PUSH1 0xC0 DUP10 ADD PUSH2 0x3AB0 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x3B87 PUSH1 0xE0 DUP10 ADD PUSH2 0x3AB0 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x100 PUSH2 0x3B9A DUP2 DUP11 ADD PUSH2 0x3AB0 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x3BAA DUP3 DUP11 ADD PUSH2 0x3ACE JUMP JUMPDEST PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x3BBC PUSH2 0x140 DUP11 ADD PUSH2 0x3AB0 JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x3BCE PUSH2 0x160 DUP11 ADD PUSH2 0x3AD9 JUMP JUMPDEST PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x3BE0 PUSH2 0x180 DUP11 ADD PUSH2 0x3AB0 JUMP JUMPDEST SWAP1 DUP4 ADD MSTORE POP SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 POP SWAP3 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3C05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x3C4E JUMPI PUSH2 0x3C4E PUSH2 0x3C0C JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3C65 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x266F DUP2 PUSH2 0x3A8B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3C86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3CB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x3CF3 JUMPI PUSH2 0x3CF3 PUSH2 0x3C0C JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3D54 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x3D38 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x3D66 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3DAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x266F DUP2 PUSH2 0x3AC0 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3DED JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x3E04 JUMPI PUSH2 0x3E04 PUSH2 0x3C0C JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3E1C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3E42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x3EB4 JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x3E9A JUMPI PUSH2 0x3E9A PUSH2 0x3C0C JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x3EA7 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x3E60 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3ECB JUMPI POP PUSH1 0x1 PUSH2 0x2BF0 JUMP JUMPDEST DUP2 PUSH2 0x3ED8 JUMPI POP PUSH1 0x0 PUSH2 0x2BF0 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x3EEE JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x3EF8 JUMPI PUSH2 0x3F14 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x2BF0 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x3F09 JUMPI PUSH2 0x3F09 PUSH2 0x3C0C JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x2BF0 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x3F37 JUMPI POP DUP2 DUP2 EXP PUSH2 0x2BF0 JUMP JUMPDEST PUSH2 0x3F41 DUP4 DUP4 PUSH2 0x3E5B JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x3F73 JUMPI PUSH2 0x3F73 PUSH2 0x3C0C JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x266F DUP4 DUP4 PUSH2 0x3EBC JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x3FB0 JUMPI PUSH2 0x3FB0 PUSH2 0x3C0C JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x3FE3 JUMPI PUSH2 0x3FE3 PUSH2 0x3C0C JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ADD OR 0xCC PUSH2 0x18A4 PUSH18 0x34965AEE898D0743FED6F01D2D313D158E20 PUSH25 0xA86EBBAB403464736F6C634300080A00330000000000000000 ","sourceMap":"1399:19850:83:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4278:4956;;;;;;;;;;-1:-1:-1;4278:4956:83;;;;;:::i;:::-;;:::i;:::-;;3043:59;;3095:7;3043:59;;;;;2804:25:201;;;2792:2;2777:18;3043:59:83;;;;;;;2761:58;;2816:3;2761:58;;4278:4956;4656:36;;:::i;:::-;4762:22;;;;;4749:36;;;;4699:47;4749:36;;;;;;;;;;4848:16;;;;4835:30;;;;;;;4935:11;;;;4923:24;;;;;;;;;;;;4977:19;4835:30;4977:17;:19::i;:::-;4953:21;;;:43;;;5002:46;;:11;;:23;:46::i;:::-;5087:357;5132:12;5152;5172:15;5195:243;;;;;;;;5258:10;5195:243;;;;;;;;;;;;;;;;;;;;;5293:6;:20;;;5195:243;;;;5329:6;:11;;;5195:243;;;;;;5358:6;:18;;;5195:243;;;;;;5405:6;:24;;;5195:243;;;;;5087:37;:357::i;:::-;-1:-1:-1;5064:17:83;;;5055:389;;;5547:21;;;;5525:88;;-1:-1:-1;5547:21:83;-1:-1:-1;5576:6:83;;-1:-1:-1;5055:389:83;-1:-1:-1;5525:14:83;:88::i;:::-;5452:4;:21;;5475:4;:18;;5495:4;:26;;5451:162;;;;;;;;;;;;;;;5620:331;5667:10;5685:17;5710:235;;;;;;;;5778:4;:21;;;5710:235;;;;5820:4;:18;;;5710:235;;;;5862:4;:17;;;5710:235;;;;5910:6;:26;;;5710:235;;;;;5620:39;:331::i;:::-;6087:65;6109:15;6126:17;6145:6;6087:21;:65::i;:::-;6057:21;;;5958:194;;;;;6029:20;;;5958:194;;;;5995:26;;;5958:194;;;;5966:21;;;5958:194;;;6220:11;;;;6188:44;;;;;3004:55:201;;6188:44:83;;;2986:74:201;5958:194:83;6188:31;;2959:18:201;;6188:44:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6159:73;;;6436:21;;;;6465:26;;;;6499:20;;;;6527:26;;;;6595:21;;;;6643:18;;;;6363:305;;6411:17;;6436:21;6465:26;6499:20;6527:26;6159:73;;6363:40;:305::i;:::-;6321:33;;;6239:429;6287:26;;;6239:429;;;6247:32;;;6239:429;;;;6679:18;;;;:48;6675:115;;;6761:14;;;;6737:46;;:10;;6761:14;;;;;6777:5;6737:23;:46::i;:::-;7024:26;;6981:33;;;;6946:32;;;;:68;;6981:33;6946:68;:::i;:::-;:104;6935:278;;;7097:20;;;;7065:60;;:10;;7097:20;;;;;7119:5;7065:31;:60::i;:::-;7194:6;:11;;;7138:68;;7170:6;:22;;;7138:68;;;;;;;;;;;;6935:278;7219:29;7235:6;7243:4;7219:15;:29::i;:::-;7294:21;;;;7323:16;;;;;7347:26;;;;7255:133;;:11;;7294:21;;7381:1;7255:31;:133::i;:::-;7395:174;7450:12;7470;7490:10;7508:4;:21;;;7537:4;:26;;;7395:47;:174::i;:::-;7580:6;:20;;;7576:208;;;7610:91;7628:12;7642;7656:11;7669:17;7688:6;7696:4;7610:17;:91::i;:::-;7576:208;;;7722:55;7745:17;7764:6;7772:4;7722:22;:55::i;:::-;7844:33;;;;:38;7840:783;;7892:22;7917:39;:17;:37;:39::i;:::-;7892:64;;7964:40;8007:72;8057:14;8007:4;:33;;;:40;;:72;;;;:::i;:::-;8119:21;;;;8157:11;;;;8119:50;;;;;:37;3004:55:201;;;8119:50:83;;;2986:74:201;7964:115:83;;-1:-1:-1;8087:29:83;;8119:37;;;;;2959:18:201;;8119:50:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8087:82;;8314:21;8279:32;:56;8275:161;;;8383:44;:21;8412:14;8383:28;:44::i;:::-;8347:33;;;:80;8275:161;8443:4;:21;;;:43;;;8496:6;:11;;;8517:4;:21;;;:46;;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8575:4;:33;;;8443:173;;;;;;;;;;;;;;;;4050:42:201;4119:15;;;4101:34;;4171:15;;;;4166:2;4151:18;;4144:43;4218:2;4203:18;;4196:34;;;;4028:2;4013:18;;3838:398;8443:173:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7884:739;;;7840:783;8717:142;8766:10;8784:4;:21;;;:35;;;8827:4;:26;;;8724:6;:16;;;8717:41;;;;:142;;;;;;:::i;:::-;8874:21;;;;:35;;;8952:11;;;;8971:26;;;;8866:137;;;;;8934:10;8866:137;;;4101:34:201;8866:60:83;4171:15:201;;;4151:18;;;4144:43;4203:18;;;4196:34;;;;8866:60:83;;;;;4013:18:201;;8866:137:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9092:6;:11;;;9015:214;;9068:6;:16;;;9015:214;;9038:6;:22;;;9015:214;;;9111:4;:26;;;9145:4;:32;;;9185:10;9203:6;:20;;;9015:214;;;;;;;;4466:25:201;;;4522:2;4507:18;;4500:34;;;;4582:42;4570:55;4565:2;4550:18;;4543:83;4669:14;4662:22;4657:2;4642:18;;4635:50;4453:3;4438:19;;4241:450;9015:214:83;;;;;;;;4650:4584;;;;4278:4956;;;;;:::o;12460:1739:85:-;12545:29;;:::i;:::-;12582:42;;:::i;:::-;12631:57;;;;;;;;;;;;:33;;;:57;;;15238:9:72;15237:71;;;;12694:26:85;;;:81;12849:22;;;;;;;;;12815:31;;:56;;;12781:31;;;:90;12955:34;;;;;;;12916:36;;;:73;;;12877:36;;;:112;13028:28;;;;;;;12995:30;;;:61;13100:33;;;;13062:35;;;:71;13169:21;;;;;;;;;13140:26;;;:50;13234:30;;;;;;13196:35;;;:68;13310:32;;;;;13270:37;;;:72;;;13391:27;;;;;;;;;;13349:39;;;:69;-1:-1:-1;13501:89:85;;;;;;;:87;;:89;;;;-1:-1:-1;;13501:89:85;;;;;;;13310:32;13501:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13463:12;:35;;:127;;;;13425:12;:35;;:165;;;;;13801:12;:35;;;13784:67;;;:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13597:256;;13733:42;;;13597:256;13689:36;;;13597:256;;;13649:32;;;13597:256;;;13605:36;;;13597:256;;;;14020:32;;;:67;14093:36;;;:75;13605:12;12460:1739;-1:-1:-1;;12460:1739:85:o;3556:502::-;3796:27;;;;3834:15;3796:54;;;;:27;;;;;:54;3792:81;;;3556:502;;:::o;3792:81::-;3879:37;3894:7;3903:12;3879:14;:37::i;:::-;3922:40;3940:7;3949:12;3922:17;:40::i;:::-;-1:-1:-1;4000:27:85;;:53;;;;;4037:15;4000:53;;;;;;3556:502::o;2633:3723:81:-;2947:7;2956;2965;2974;2983;2992:4;3008:27;:6;:17;;;6194:9:73;:14;;6091:122;3008:27:81;3004:93;;;-1:-1:-1;3053:1:81;;-1:-1:-1;3053:1:81;;-1:-1:-1;3053:1:81;;-1:-1:-1;3053:1:81;;-1:-1:-1;3065:17:81;;-1:-1:-1;3053:1:81;3045:45;;3004:93;3103:40;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3103:40:81;3154:24;;;;:29;;;3150:263;;3326:24;;;;3310:41;;;;;;;;;;;;;3382:13;;;;3257:149;;3310:41;3257;:149::i;:::-;3233:20;;;3193:213;3209:22;;;3193:213;3194:13;;;3193:213;3150:263;3435:6;:20;;;3426:4;:6;;;:29;3419:2175;;;3519:6;;;;3470:17;;:56;;:48;:56::i;:::-;3465:140;;3562:6;;;3560:8;;;;;;3588;;3465:140;3655:6;;;;3642:20;;;;;;;;;;;;;;3613:26;;;:49;;;3671:123;;3751:6;;;3749:8;;;;;;3777;;3671:123;3862:26;;;;3849:40;;3802:44;3849:40;;;;;;;;;;;;4038:38;;;;;;;;;;;;;;22869:67:72;4339:3;23023:71;;;;;4004:23:81;;;3898:180;3439:2:72;22869:67;;;;3971:13:81;;;3898:180;;;22674:9:72;3298:2;22691:85;;;;;3926:25:81;;;3898:180;22662:21:72;;;3908:8:81;;;3898:180;4124:2;:19;;;;4107:14;;;:36;-1:-1:-1;4178:20:81;;;:25;;;;:88;;;4243:4;:23;;;4215:6;:24;;;:51;;;4178:88;:205;;4327:13;;;;4356:26;;;;4308:75;;;;;:47;3004:55:201;;;4308:75:81;;;2986:74:201;4308:47:81;;;;;2959:18:201;;4308:75:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4178:205;;;4277:4;:20;;;4178:205;4160:223;;4396:25;;;;:30;;;;:79;;-1:-1:-1;4468:6:81;;;;4430:17;;:45;;:37;:45::i;:::-;4392:911;;;4520:141;4561:6;:11;;;4584:14;4610:4;:15;;;4637:4;:14;;;4520:29;:141::i;:::-;4487:30;;;:174;;;4672:34;;;:68;;;;4487:174;;4672:68;:::i;:::-;;;-1:-1:-1;4816:24:81;;;;4852:23;;;;4776:109;;;;;:28;:109::i;:::-;4751:134;;:22;;;:134;4900:8;;;;:13;4896:226;;5000:4;:22;;;:49;;5041:4;:8;;;5000:49;;;5025:4;:13;;;5000:49;4954:4;:30;;;:96;;;;:::i;:::-;4927:4;:11;;:123;;;;;;;:::i;:::-;;;-1:-1:-1;4896:226:81;;;5107:4;5079:25;;;:32;4896:226;5218:4;:22;;;:75;;5268:4;:25;;;5218:75;;;5243:4;:22;;;5218:75;5174:4;:30;;;:120;;;;:::i;:::-;5132:4;:28;;:162;;;;;;;:::i;:::-;;;-1:-1:-1;4392:911:81;5345:6;;;;5315:17;;:37;;:29;:37::i;:::-;5311:232;;;5396:138;5434:6;:11;;;5457:14;5483:4;:15;;;5510:4;:14;;;5396:26;:138::i;:::-;5364:4;:28;;:170;;;;;;;:::i;:::-;;;-1:-1:-1;5311:232:81;-1:-1:-1;5573:6:81;;;5571:8;;;;;;3419:2175;;;5632:34;;;;:110;;5741:1;5632:110;;;5696:4;:34;;;5682:4;:11;;;:48;;;;;:::i;:::-;;5632:110;5618:11;;;:124;5781:34;;;;:127;;5907:1;5781:127;;;5862:4;:34;;;5831:4;:28;;;:65;;;;;:::i;:::-;;5781:127;5750:28;;;:158;5942:28;;;;:33;5941:200;;6011:130;6105:4;:28;;;6012:75;6058:4;:28;;;6012:4;:34;;;:45;;:75;;;;:::i;:::-;6011:84;;:130::i;:::-;5941:200;;;5985:17;5941:200;5921:17;;;:220;;;6162:34;;;;6204:28;;;;6240:11;;;;6259:28;;;;6320:25;;;;;6162:34;;-1:-1:-1;6204:28:81;;-1:-1:-1;6240:11:81;-1:-1:-1;6259:28:81;;-1:-1:-1;5921:220:81;-1:-1:-1;6320:25:81;-1:-1:-1;2633:3723:81;;;;;;;;;;;;:::o;14520:842:83:-;14707:7;14716;14725;14741:22;14765:24;14793:75;14827:6;:11;;;14846:16;14793:26;:75::i;:::-;14740:128;;-1:-1:-1;14740:128:83;-1:-1:-1;14875:21:83;14899:33;14740:128;;14899:33;:::i;:::-;14875:57;;14939:19;3095:7;14961:12;:40;:118;;2816:3;14961:118;;;2509:5;14961:118;14939:140;-1:-1:-1;15086:27:83;15116:37;:13;14939:140;15116:24;:37::i;:::-;15086:67;;15160:29;15213:19;15192:6;:18;;;:40;:95;;15269:6;:18;;;15192:95;;;15241:19;15192:95;15302:16;;-1:-1:-1;15320:13:83;;-1:-1:-1;15160:127:83;;-1:-1:-1;;;;;14520:842:83;;;;;;;;:::o;19218:1573:87:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19562:54:87;;;;;;;;;;;;;:56;;21735:9:72;21779:12;21767:24;;21766:31;;;21818:12;21806:24;;21805:31;;;21857:15;21845:27;;21844:34;;;21899:22;21887:34;;21886:41;;;21948:12;21936:24;21935:31;;;21583:394;19562:56:87;19493:125;;19530:28;;;19493:125;-1:-1:-1;;;19493:125:87;;;;;;19692:30;;:58;;;21735:9:72;21948:12;21936:24;;21935:31;;19661:27:87;;;19625:143;21779:12:72;21767:24;21766:31;;19626:27:87;;;19625:143;19493:125;19783:59;;;19815:4;:27;;;19783:59;19844:23;;;;;;;;;;;;;;;;;19775:93;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19883:4;:28;;;19882:29;:61;;;;;19916:4;:27;;;19915:28;19882:61;19945:21;;;;;;;;;;;;;;;;;19874:93;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;19989:26:87;;;;:40;;;;:117;;;2489:7;20041:6;:19;;;:65;19989:117;:200;;;;20139:6;:26;;;20118:69;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20197:41;;;;;;;;;;;;;;;;;19974:270;;;;;;;;;;;;;;:::i;:::-;;2677:4;20266:6;:19;;;:57;20331:40;;;;;;;;;;;;;;;;;20251:126;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;20417:55:87;;;;;;;;;;;;;;;3298:2:72;6706:85;;;20417:62:87;;;;:124;;-1:-1:-1;20520:20:87;;;;20489:30;;;;;;;;;;;;;:52;;20520:20;;;;;20489:30;:52::i;:::-;20384:157;;:24;;;:157;;;20663:38;;;;;;;;;;;;;;;;;;20629:73;;;;;;;;;;;;;:::i;:::-;;20716:6;:16;;;20736:1;20716:21;;20739:46;;;;;;;;;;;;;;;;;20708:78;;;;;;;;;;;;;;:::i;:::-;;19436:1355;19218:1573;;;:::o;15926:1348:83:-;16243:31;;;;16308:51;;;;;;;;;;;;;;;16400:22;;;;16454:16;;;;16481:24;;;;-1:-1:-1;;;;;;;;16243:31:83;;;;;7548:77:72;;;;;16481:29:83;;;16477:703;;16563:24;;;;;16547:41;;;;16520:24;16547:41;;;;;;;;;;;;:53;16662:24;;16698:48;;;;;;;;;;;;;;16547:53;;;;;;;16622:136;;;;;;4339:3:72;20323:71;;;;;16622:28:83;:136::i;:::-;16609:363;;;16812:24;;;;16796:41;;;;;;;;;;;;;:58;;;;;;;-1:-1:-1;16869:30:83;;;;16865:99;;16937:16;16913:40;;16865:99;17089:30;;;;17085:89;;17149:16;17131:34;;17085:89;16512:668;16477:703;17194:16;;17212:21;;-1:-1:-1;17194:16:83;;-1:-1:-1;17235:15:83;-1:-1:-1;15926:1348:83;-1:-1:-1;;;;15926:1348:83:o;18966:2281::-;19321:7;19330;19339;19354:51;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19354:51:83;19435:37;;;;;:20;3004:55:201;;;19435:37:83;;;2986:74:201;19435:20:83;;;;;2959:18:201;;19435:37:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19412:60;;19500:31;;;;;:20;3004:55:201;;;19500:31:83;;;2986:74:201;19500:20:83;;;;;2959:18:201;;19500:31:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19478:19;;;;:53;;;;19564:43;;;;;;;;;;;;;;3439:2:72;8367:67;;;19538:23:83;;;:71;19640:37;;;;8368:9:72;3439:2;8367:67;;;19615:22:83;;;:76;;;19749:23;;;;19743:2;:29;;;19716:24;;;:56;19801:28;19780:18;;;:49;19882:71;;;;;;;;;;;;;;;4270:3:72;18603:91;;;19842:37:83;;;:113;20168:18;;;;20145:20;;:41;;20168:18;20145:41;:::i;:::-;20109:4;:24;;;20095:11;20073:4;:19;;;:33;;;;:::i;:::-;:60;;;;:::i;:::-;20071:116;;;;:::i;:::-;20043:19;;;:144;;;20226:48;;20257:16;20226:30;:48::i;:::-;20194:29;;;:80;;;20285:53;-1:-1:-1;20281:425:83;;;20348:21;;;:45;;;20527:24;;;;20505:19;;;;20425:157;;20565:16;;20505:46;;20527:24;20505:46;:::i;:::-;20474:18;;;;20450:21;;;;20427:20;;:44;;20450:21;20427:44;:::i;:::-;:65;;;;:::i;:::-;20426:126;;;;:::i;:::-;20425:139;;:157::i;:::-;20401:21;;;:181;20281:425;;;20627:29;;;;20603:21;;;:53;20664:21;;;:35;;;20281:425;20716:37;;;;:42;20712:531;;20831:21;;;;:50;;20864:16;20831:32;:50::i;:::-;20799:4;:21;;;:82;;;;:::i;:::-;20768:20;;;:113;;;20961:37;;;;20920:86;;20768:113;20920:31;:86::i;:::-;20890:27;;;:116;;;21032:21;;;;:51;;20890:116;21032:51;:::i;:::-;21093:4;:21;;;21124:4;:27;;;21015:144;;;;;;;;;20712:531;21188:4;:21;;;21211:4;:21;;;21234:1;21180:56;;;;;;;18966:2281;;;;;;;;;;;;;:::o;972:403:73:-;1190:28;;;;;;;;;;;;;;;;;5284:3:72;1134:54:73;;1126:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1263:1:73;1247:17;;;1241:24;1273:92;;;;1298:16;;;;;;1273:92;;;1339:17;;1352:4;;1339:17;;;1273:92;1108:263;972:403;;;:::o;1688:433::-;1922:28;;;;;;;;;;;;;;;;;5284:3:72;1866:54:73;;1858:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1996:1:73;1980:17;;;1979:23;;1973:30;2011:100;;;;2044:16;;;;;;2011:100;;12689:1148:83;12862:4;:26;;;12837:4;:21;;;:51;12833:1000;;12973:21;;;;:46;;;;13044:11;;;;13067:26;;;;13105:45;;;;;12945:215;;;;;:87;7129:55:201;;;12945:215:83;;;7111:74:201;7201:18;;;7194:34;;;;7244:18;;;7237:34;12945:87:83;;;;7084:18:201;;12945:215:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12898:21;;;;:44;;:262;12689:1148;;:::o;12833:1000::-;13278:21;;;;:26;13274:272;;13393:21;;;;:46;;;;13455:11;;;;13468:21;;;;13491:45;;;;;13363:174;;;;;:91;7129:55:201;;;13363:174:83;;;7111:74:201;7201:18;;;7194:34;;;;7244:18;;;7237:34;13363:91:83;;;;7084:18:201;;13363:174:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13316:21;;;;:44;;:221;13274:272;13687:4;:21;;;:44;;;13670:67;;;13747:6;:11;;;13797:4;:21;;;13768:4;:26;;;:50;;;;:::i;:::-;13670:156;;;;;;;;;;7486:42:201;7474:55;;;13670:156:83;;;7456:74:201;7546:18;;;7539:34;7429:18;;13670:156:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13563:21;;;;13614:45;;;13553:273;;;;13563:41;;13553:273;12833:1000;12689:1148;;:::o;6827:1514:85:-;7050:40;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7050:40:85;7172:36;;;;7122:35;;;;:92;;:42;:92::i;:::-;7097:22;;;;:117;;;7345:35;;;;7412:473;;;;;;;;7471:16;;;;;;;;;;7412:473;;-1:-1:-1;7412:473:85;;;;;;;;;;;7594:32;;;;;7412:473;;;;;;;7655:22;;7412:473;;;;;7712:36;;;;7412:473;;;;7773:26;;;;7412:473;;;;;;;7345:35;7412:473;;;-1:-1:-1;7412:473:85;;;7850:26;;;;7412:473;;7345:35;7412:473;;;7316:575;;;;;7345:35;;;7316:88;;:575;;7412:473;7316:575;;8020:4:201;8062:3;8051:9;8047:19;8039:27;;8099:6;8093:13;8082:9;8075:32;8163:4;8155:6;8151:17;8145:24;8138:4;8127:9;8123:20;8116:54;8226:4;8218:6;8214:17;8208:24;8201:4;8190:9;8186:20;8179:54;8289:4;8281:6;8277:17;8271:24;8264:4;8253:9;8249:20;8242:54;8352:4;8344:6;8340:17;8334:24;8327:4;8316:9;8312:20;8305:54;8415:4;8407:6;8403:17;8397:24;8390:4;8379:9;8375:20;8368:54;8478:4;8470:6;8466:17;8460:24;8453:4;8442:9;8438:20;8431:54;8532:4;8524:6;8520:17;8514:24;8557:42;8655:2;8641:12;8637:21;8630:4;8619:9;8615:20;8608:51;8678:6;8668:16;;8748:2;8742;8734:6;8730:15;8724:22;8720:31;8715:2;8704:9;8700:18;8693:59;;;7834:924;;;;;7316:575:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7286:21;;;7221:670;7259:19;;;7221:670;;;;7929:34;;:32;:34::i;:::-;7898:28;;;:65;;;;;;;;;;;;;;;;8003:19;;;;:31;;:29;:31::i;:::-;7969;;;:65;;;;;;;;;;;;;;;8076:21;;;;:33;;:31;:33::i;:::-;8040;;;:69;;;;;;;;;;;;;;;;8169:22;;8199:19;;;;;8226:21;;;;;8040:69;8255:31;;;8294:36;;;;8121:215;;9333:25:201;;;9374:18;;;9367:34;;;;9417:18;;;9410:34;9475:2;9460:18;;9453:34;9518:3;9503:19;;9496:35;8121:215:85;;;;;;9320:3:201;9305:19;8121:215:85;;;;;;;7044:1297;6827:1514;;;;;:::o;1230:1498:82:-;1608:39;;;;;;;;;;;;;1538:24;;;;1608:67;;1648:12;1662;1608:39;:67::i;:::-;1537:138;;;;;1686:19;1682:1042;;;1748:44;;;1715:30;1748:44;;;;;;;;;;:76;;;1902:33;;;;8368:9:72;1748:76:82;;;;;1715:30;1862:158;;5235:1:72;;3439:2;8367:67;;;1902:104:82;;;;:::i;:::-;1885:122;;:2;:122;:::i;:::-;1863:144;;:11;:144;:::i;:::-;1862:156;:158::i;:::-;1833:187;;2209:18;2183:44;;:22;:44;;;2179:539;;2239:44;;;2309:1;2239:44;;;;;;;;;;;:67;;:71;;;;;;2325:64;2804:25:201;;;2325:64:82;;2777:18:201;2325:64:82;;;;;;;2179:539;;;2414:34;2532:43;2557:18;2532:22;:43;:::i;:::-;2451:44;;;;;;;;;;;;;;;;:78;;:124;;;;;;;;;;;;;;2590:119;;2804:25:201;;;2451:124:82;;-1:-1:-1;2451:44:82;;2590:119;;2777:18:201;2590:119:82;;;;;;;2404:314;2179:539;1707:1017;;1682:1042;1531:1197;;1230:1498;;;;;:::o;11136:1185:83:-;11582:21;;;;11575:51;;;;;11615:10;11575:51;;;2986:74:201;11533:39:83;;11575;;;;;2959:18:201;;11575:51:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11632:21;;;;11683:11;;;;;11720:32;;;;11632:126;;;;;:43;4119:15:201;;;11632:126:83;;;4101:34:201;11702:10:83;4151:18:201;;;4144:43;4203:18;;;4196:34;;;;11533:93:83;;-1:-1:-1;11632:43:83;;;;4013:18:201;;11632:126:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11769:31;11804:1;11769:36;11765:552;;;11885:10;11815:55;11873:23;;;;;;;;;;;;11917:220;;;;;;;;;;;;12096:31;;;;11917:220;;11977:12;;12001;;11873:23;;;12096:31;11917:48;:220::i;:::-;11904:407;;;12194:20;;;;12156:65;;:16;;12194:20;;;;;12216:4;12156:37;:65::i;:::-;12267:22;;;;;12236:66;;12291:10;;12236:66;;;;;;;;11904:407;11807:510;11527:794;11136:1185;;;;;;:::o;9656:757::-;9860:52;9915:25;:17;:23;:25::i;:::-;9860:80;-1:-1:-1;9946:53:83;:17;9860:80;9946:29;:53::i;:::-;10080:22;;;;10119:32;;;;10005:152;;:17;;10050:22;;10080;10110:1;;10005:37;:152::i;:::-;10250:21;;;;10284:11;;;;;10321:32;;;;10361:41;;;;10250:158;;;;;:26;11969:15:201;;;10250:158:83;;;11951:34:201;10303:10:83;12001:18:201;;;11994:43;12053:18;;;12046:34;;;;12096:18;;;12089:34;10250:26:83;;;;;11862:19:201;;10250:158:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1895:528:85;2028:27;;;;1994:7;;2028:27;;;;;2110:15;2097:28;;2093:326;;;-1:-1:-1;;2229:22:85;;;;;;1895:528::o;2093:326::-;2380:22;;;;2287:125;;2380:22;;;;;2287:74;;2321:28;;;;;2351:9;2287:33;:74::i;:::-;:81;;:125::i;:::-;2272:140;1895:528;-1:-1:-1;;;1895:528:85:o;2093:326::-;2003:420;1895:528;;;:::o;2840:322:90:-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:90;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;2253:319::-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:90;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;1228:780:1:-;1477:4;1471:11;1343:27;1489:36;;;1576:42;1566:53;;;1562:1;1539:25;;1532:88;1662:51;;1657:2;1634:26;;1627:87;1751:2;1728:26;;1721:41;;;1343:27;1324:16;;1821:3;1471:11;1324:16;1792:5;1785;1780:51;1770:155;;1864:16;1861:1;1858;1843:38;1900:16;1897:1;1890:27;1770:155;;1945:28;1967:5;1945:21;:28::i;:::-;1937:66;;;;;;;12336:2:201;1937:66:1;;;12318:21:201;12375:2;12355:18;;;12348:30;12414:27;12394:18;;;12387:55;12459:18;;1937:66:1;12134:349:201;10657:1542:85;11008:30;;;;:35;11004:423;;11053:34;11090:130;11133:12;:30;;;11173:12;:39;;;11090:33;:130::i;:::-;11053:167;;11262:82;11305:12;:31;;;11262:26;:33;;:82;;;;:::i;:::-;11228:31;;;:116;;;11377:43;;:41;:43::i;:::-;11352:22;;;:68;;;;;;;;;;;;;;;-1:-1:-1;11004:423:85;11732:35;;:40;11728:467;;11782:39;11824:139;11871:12;:35;;;11916:12;:39;;;11824:37;:139::i;:::-;11782:181;;12010:92;12058:12;:36;;;12010:31;:38;;:92;;;;:::i;:::-;11971:36;;;:131;;;12140:48;;:46;:48::i;:::-;12110:27;;;:78;;;;;;;;;;;;;;;;;-1:-1:-1;10657:1542:85;;:::o;8841:1598::-;8978:37;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8978:37:85;9026:26;;;;9022:58;;9067:7;8841:1598;;:::o;9022:58::-;9239:36;;;;9189:35;;:92;;:42;:92::i;:::-;9160:26;;;:121;9459:36;;;;9409:35;;:92;;:42;:92::i;:::-;9380:26;;;:121;9648:36;;;;9692:42;;;;9742:39;;;;9603:184;;9648:36;9692:42;9603:184;;:37;:184::i;:::-;9572:28;;;:215;;;9821:36;;;;:85;;:43;:85::i;:::-;9794:112;;;10114:26;;;;10073:32;;;;10038:26;;;;:67;;10073:32;10038:67;:::i;:::-;:102;;;;:::i;:::-;:135;;;;:::i;:::-;10008:21;;;:165;;;10233:26;;;;10200:60;;10008:165;10200:32;:60::i;:::-;10180:17;;;:80;;;10271:22;10267:168;;10332:96;:75;10375:12;:31;;;10332:4;:26;;;:42;;:75;;;;:::i;:96::-;10303:25;;;:125;;:25;;:125;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10267:168;8972:1467;8841:1598;;:::o;3336:442:79:-;3564:20;;3471:7;;;;;;;;3564:20;;;;;3595:30;;3591:107;;3653:38;;;;;:20;3004:55:201;;;3653:38:79;;;2986:74:201;3653:20:79;;;;;2959:18:201;;3653:38:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3635:56;;3591:107;-1:-1:-1;3712:12:79;;;;;;;3726:29;;;;;;3757:15;-1:-1:-1;3336:442:79;-1:-1:-1;;;3336:442:79:o;2435:333:73:-;2670:28;;;;;;;;;;;;;;;;;2576:4;;5284:3:72;2614:54:73;;2606:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;2715:9:73;;2745:1;2729:17;;;2715:32;2751:1;2714:38;:43;;2435:333;;;;;:::o;3638:328::-;3862:28;;;;;;;;;;;;;;;;;3768:4;;5284:3:72;3806:54:73;;3798:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3907:9:73;;3938:1;3922:17;;;3921:23;;3907:38;3906:44;:49;;;3638:328::o;9524:446:81:-;9697:7;9712:24;9739:29;:7;:27;:29::i;:::-;9820:21;;;;;9800:64;;;;;9820:21;3004:55:201;;;9800:64:81;;;2986:74:201;;;;9712:56:81;;-1:-1:-1;9774:15:81;;9898:10;;9800:89;;9712:56;;9820:21;;;9800:58;;2959:18:201;;9800:64:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:89::-;9792:116;;;;:::i;:::-;9774:134;;9950:9;9940:7;:19;;;;;:::i;:::-;;9933:26;;;;9524:446;;;;;;;:::o;4133:208:79:-;4250:4;4270:22;;;;;:65;;-1:-1:-1;;4296:39:79;;4133:208::o;3046:314:73:-;3262:28;;;;;;;;;;;;;;;;;3168:4;;5284:3:72;3206:54:73;;3198:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3307:9:73;;3337:1;3321:17;;;3307:32;3306:38;:43;;;3046:314::o;8150:645:81:-;8409:32;;;;8389:87;;;;;8409:32;3004:55:201;;;8389:87:81;;;2986:74:201;8320:7:81;;;;8409:32;;;8389:69;;2959:18:201;;8389:87:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8365:111;-1:-1:-1;8486:18:81;;8482:104;;8530:49;8551:27;:7;:25;:27::i;:::-;8530:13;;:20;:49::i;:::-;8514:65;;8482:104;8631:30;;;;8624:54;;;;;8631:30;3004:55:201;;;8624:54:81;;;2986:74:201;8631:30:81;;;;8624:48;;2959:18:201;;8624:54:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8608:70;;:13;:70;:::i;:::-;8592:86;-1:-1:-1;8701:26:81;8592:86;8701:10;:26;:::i;:::-;8685:42;;8775:9;8759:13;:25;;;;;:::i;:::-;;;8150:645;-1:-1:-1;;;;;;8150:645:81:o;1005:496:89:-;1083:14;1248:18;;1299:35;1295:52;;;1285:63;;1278:71;1234:125;1215:183;;1388:1;1385;1378:12;1215:183;-1:-1:-1;1473:17:89;1424:22;;1448;1420:51;1416:75;;1005:496::o;1660:322:90:-;1721:9;1826;;1885:3;1880:1;1873:9;;1861:22;1857:32;1851:39;;1823:70;1820:104;;;1914:1;1911;1904:12;1820:104;-1:-1:-1;1952:3:90;1945:11;;;;1965:1;1958:9;;1941:27;1937:35;;1660:322::o;512:299:75:-;679:35;;;;672:59;;;;;:53;3004:55:201;;;672:59:75;;;2986:74:201;633:7:75;;;;672:53;;;;;2959:18:201;;672:59:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;746:37;;;;739:61;;;;;:55;3004::201;;;739:61:75;;;2986:74:201;739:55:75;;;;;;2959:18:201;;739:61:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;657:149;;;;512:299;;;;;:::o;1874:472:89:-;1952:14;2098:18;;2187:17;2182:1;2166:18;;2154:31;2150:55;2140:66;;2086:130;2083:164;;;2237:1;2234;2227:12;2083:164;-1:-1:-1;2284:17:89;2273:29;;;;2320:1;2304:18;;2269:54;2265:71;;1874:472::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;12948:2:201;1635:78:12;;;12930:21:201;12987:2;12967:18;;;12960:30;13026:34;13006:18;;;12999:62;13097:9;13077:18;;;13070:37;13124:19;;1635:78:12;12746:403:201;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;6625:625:73:-;6853:4;6859:7;6868;6887:28;6910:4;6887:22;:28::i;:::-;6883:328;;;6925:15;6943:45;6966:4;620:66;6943:22;:45::i;:::-;6997:20;7020:21;;;;;;;;;;;;;;7067:26;;;;;;;;;:55;;;;;;;;;;;;;;7020:21;;-1:-1:-1;4478:3:72;17633:67;;;7049:75:73;-1:-1:-1;7136:12:73;;7132:73;;7168:4;;-1:-1:-1;7174:12:73;;-1:-1:-1;7188:7:73;-1:-1:-1;7160:36:73;;-1:-1:-1;7160:36:73;7132:73;6917:294;;;6883:328;-1:-1:-1;7224:5:73;;;;-1:-1:-1;7224:5:73;;-1:-1:-1;6625:625:73;-1:-1:-1;;;6625:625:73:o;28482:904:87:-;17634:9:72;;28815:4:87;;4478:3:72;17633:67;;;28831:35:87;28827:464;;28986:40;29047:13;29029:46;;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:76;;;:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28986:121;;29144:17;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29129:134;;;;;2851:41;29129:134;;;13885:25:201;29243:10:87;13926:18:201;;;13919:83;29129:57:87;;;;;;;;13858:18:201;;29129:134:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29115:169;;29279:5;29272:12;;;;;29115:169;28868:423;28827:464;29303:78;29327:12;29341;29355:10;29367:13;29303:23;:78::i;:::-;29296:85;;28482:904;;;;;;;;:::o;700:334:88:-;810:7;;881:46;899:28;;;881:15;:46;:::i;:::-;873:55;;:4;:55;:::i;:::-;376:8;961:25;;;-1:-1:-1;1006:23:88;961:25;704:4:90;1006:23:88;:::i;2198:2524:1:-;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;-1:-1:-1;;4611:1:1;4605:8;4598:16;4591:24;;2198:2524;-1:-1:-1;2198:2524:1:o;3142:212:88:-;3256:7;3278:71;3306:4;3312:19;3333:15;1780:972;1924:7;;1984:47;2003:28;;;1984:16;:47;:::i;:::-;1970:61;-1:-1:-1;2042:8:88;2038:50;;704:4:90;2060:21:88;;;;;2038:50;2230:7;;;2094:19;;;2266:1;2260:7;;:21;;2280:1;2260:21;;;2276:1;2270:3;:7;2260:21;2246:35;-1:-1:-1;2326:35:88;2305:17;2317:4;;2305:11;:17::i;:::-;:57;;;;;:::i;:::-;;;-1:-1:-1;376:8:88;2387:25;2305:57;2407:4;2387:19;:25::i;:::-;:44;;;;;:::i;:::-;;;-1:-1:-1;2444:18:88;2485:12;2465:17;2471:11;2465:3;:17;:::i;:::-;:32;;;;:::i;:::-;2535:1;2521:15;;;-1:-1:-1;2548:17:88;2602:14;2588:11;2568:17;2574:11;2568:3;:17;:::i;:::-;:31;;;;:::i;:::-;:48;;;;:::i;:::-;2653:1;2640:14;;;-1:-1:-1;2640:14:88;2725:10;376:8;2692:10;2699:3;2692:4;:10;:::i;:::-;2691:31;;;;:::i;:::-;2674:48;;704:4:90;2674:48:88;:::i;:::-;:61;;;;:::i;:::-;:73;;;;:::i;:::-;2667:80;1780:972;-1:-1:-1;;;;;;;;;;;1780:972:88:o;2809:545:85:-;2940:27;;;;2906:7;;2940:27;;;;;3022:15;3009:28;;3005:345;;;-1:-1:-1;;3141:27:85;;;;;;2809:545::o;3005:345::-;3306:27;;;;3204:139;;3306:27;;;;;3204:83;;3242:33;;;;;3277:9;3204:37;:83::i;4304:256:73:-;4448:9;;4411:4;;620:66;4448:27;4488:19;;;;;:67;;-1:-1:-1;4530:18:73;4547:1;4530:14;:18;:::i;:::-;4512:37;:42;;4481:74;-1:-1:-1;;4304:256:73:o;8422:382::-;8601:9;;8547:7;;8601:16;;8669:14;;;8667:17;8654:30;;8547:7;8711:66;8742:1;8719:24;;;;;8718:31;;8711:66;;8767:1;8761:7;8711:66;;27289:620:87;27586:4;27602:22;:13;5872:9:72;5884;5872:21;;5764:134;27602:22:87;27598:60;;-1:-1:-1;27646:5:87;27639:12;;27598:60;27668:33;;;;;;;;;;;;;;;620:66:73;4911:27;27663:68:87;;-1:-1:-1;27720:4:87;27713:11;;27663:68;27769:32;;;;;;;;;;;;;27737:24;;27769:60;;27802:12;27816;27769:32;:60::i;:::-;27736:93;;;;27845:19;27844:20;:59;;;;-1:-1:-1;17634:9:72;;4478:3;17633:67;;;27868:35:87;27844:59;27836:68;27289:620;-1:-1:-1;;;;;;27289:620:87:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:404:201:-;81:2;75:9;123:6;111:19;;160:18;145:34;;181:22;;;142:62;139:242;;;237:77;234:1;227:88;338:4;335:1;328:15;366:4;363:1;356:15;139:242;397:2;390:22;14:404;:::o;423:154::-;509:42;502:5;498:54;491:5;488:65;478:93;;567:1;564;557:12;478:93;423:154;:::o;582:134::-;650:20;;679:31;650:20;679:31;:::i;:::-;582:134;;;:::o;721:118::-;807:5;800:13;793:21;786:5;783:32;773:60;;829:1;826;819:12;844:128;909:20;;938:28;909:20;938:28;:::i;977:156::-;1043:20;;1103:4;1092:16;;1082:27;;1072:55;;1123:1;1120;1113:12;1138:1507;1470:6;1478;1486;1494;1502;1546:9;1537:7;1533:23;1576:3;1572:2;1568:12;1565:32;;;1593:1;1590;1583:12;1565:32;1629:9;1616:23;1606:33;;1686:2;1675:9;1671:18;1658:32;1648:42;;1737:2;1726:9;1722:18;1709:32;1699:42;;1788:2;1777:9;1773:18;1760:32;1750:42;;1811:6;1910:2;1841:66;1837:2;1833:75;1829:84;1826:104;;;1926:1;1923;1916:12;1826:104;1952:17;;:::i;:::-;1939:30;;2020:3;2009:9;2005:19;1992:33;1985:5;1978:48;2086:3;2075:9;2071:19;2058:33;2053:2;2046:5;2042:14;2035:57;2124:39;2158:3;2147:9;2143:19;2124:39;:::i;:::-;2119:2;2112:5;2108:14;2101:63;2196:39;2230:3;2219:9;2215:19;2196:39;:::i;:::-;2191:2;2184:5;2180:14;2173:63;2255:3;2291:38;2325:2;2314:9;2310:18;2291:38;:::i;:::-;2285:3;2278:5;2274:15;2267:63;2363:35;2394:2;2383:9;2379:18;2363:35;:::i;:::-;2357:3;2350:5;2346:15;2339:60;2432:39;2466:3;2455:9;2451:19;2432:39;:::i;:::-;2426:3;2419:5;2415:15;2408:64;2505:37;2537:3;2526:9;2522:19;2505:37;:::i;:::-;2499:3;2492:5;2488:15;2481:62;2575:39;2609:3;2598:9;2594:19;2575:39;:::i;:::-;2559:14;;;2552:63;-1:-1:-1;1138:1507:201;;;;-1:-1:-1;1138:1507:201;;-1:-1:-1;1138:1507:201;2563:5;1138:1507;-1:-1:-1;1138:1507:201:o;3071:184::-;3141:6;3194:2;3182:9;3173:7;3169:23;3165:32;3162:52;;;3210:1;3207;3200:12;3162:52;-1:-1:-1;3233:16:201;;3071:184;-1:-1:-1;3071:184:201:o;3260:::-;3312:77;3309:1;3302:88;3409:4;3406:1;3399:15;3433:4;3430:1;3423:15;3449:128;3489:3;3520:1;3516:6;3513:1;3510:13;3507:39;;;3526:18;;:::i;:::-;-1:-1:-1;3562:9:201;;3449:128::o;3582:251::-;3652:6;3705:2;3693:9;3684:7;3680:23;3676:32;3673:52;;;3721:1;3718;3711:12;3673:52;3753:9;3747:16;3772:31;3797:5;3772:31;:::i;4696:466::-;4792:6;4800;4808;4816;4869:3;4857:9;4848:7;4844:23;4840:33;4837:53;;;4886:1;4883;4876:12;4837:53;4915:9;4909:16;4899:26;;4965:2;4954:9;4950:18;4944:25;4934:35;;5009:2;4998:9;4994:18;4988:25;4978:35;;5056:2;5045:9;5041:18;5035:25;5100:12;5093:5;5089:24;5082:5;5079:35;5069:63;;5128:1;5125;5118:12;5069:63;4696:466;;;;-1:-1:-1;4696:466:201;;-1:-1:-1;;4696:466:201:o;5167:228::-;5207:7;5333:1;5265:66;5261:74;5258:1;5255:81;5250:1;5243:9;5236:17;5232:105;5229:131;;;5340:18;;:::i;:::-;-1:-1:-1;5380:9:201;;5167:228::o;5400:184::-;5452:77;5449:1;5442:88;5549:4;5546:1;5539:15;5573:4;5570:1;5563:15;5589:656;5701:4;5730:2;5759;5748:9;5741:21;5791:6;5785:13;5834:6;5829:2;5818:9;5814:18;5807:34;5859:1;5869:140;5883:6;5880:1;5877:13;5869:140;;;5978:14;;;5974:23;;5968:30;5944:17;;;5963:2;5940:26;5933:66;5898:10;;5869:140;;;6027:6;6024:1;6021:13;6018:91;;;6097:1;6092:2;6083:6;6072:9;6068:22;6064:31;6057:42;6018:91;-1:-1:-1;6161:2:201;6149:15;6166:66;6145:88;6130:104;;;;6236:2;6126:113;;5589:656;-1:-1:-1;;;5589:656:201:o;6250:245::-;6317:6;6370:2;6358:9;6349:7;6345:23;6341:32;6338:52;;;6386:1;6383;6376:12;6338:52;6418:9;6412:16;6437:28;6459:5;6437:28;:::i;6500:274::-;6540:1;6566;6556:189;;6601:77;6598:1;6591:88;6702:4;6699:1;6692:15;6730:4;6727:1;6720:15;6556:189;-1:-1:-1;6759:9:201;;6500:274::o;6779:125::-;6819:4;6847:1;6844;6841:8;6838:34;;;6852:18;;:::i;:::-;-1:-1:-1;6889:9:201;;6779:125::o;7584:245::-;7663:6;7671;7724:2;7712:9;7703:7;7699:23;7695:32;7692:52;;;7740:1;7737;7730:12;7692:52;-1:-1:-1;;7763:16:201;;7819:2;7804:18;;;7798:25;7763:16;;7798:25;;-1:-1:-1;7584:245:201:o;8763:306::-;8851:6;8859;8867;8920:2;8908:9;8899:7;8895:23;8891:32;8888:52;;;8936:1;8933;8926:12;8888:52;8965:9;8959:16;8949:26;;9015:2;9004:9;9000:18;8994:25;8984:35;;9059:2;9048:9;9044:18;9038:25;9028:35;;8763:306;;;;;:::o;9542:482::-;9631:1;9674:5;9631:1;9688:330;9709:7;9699:8;9696:21;9688:330;;;9828:4;9760:66;9756:77;9750:4;9747:87;9744:113;;;9837:18;;:::i;:::-;9887:7;9877:8;9873:22;9870:55;;;9907:16;;;;9870:55;9986:22;;;;9946:15;;;;9688:330;;;9692:3;9542:482;;;;;:::o;10029:866::-;10078:5;10108:8;10098:80;;-1:-1:-1;10149:1:201;10163:5;;10098:80;10197:4;10187:76;;-1:-1:-1;10234:1:201;10248:5;;10187:76;10279:4;10297:1;10292:59;;;;10365:1;10360:130;;;;10272:218;;10292:59;10322:1;10313:10;;10336:5;;;10360:130;10397:3;10387:8;10384:17;10381:43;;;10404:18;;:::i;:::-;-1:-1:-1;;10460:1:201;10446:16;;10475:5;;10272:218;;10574:2;10564:8;10561:16;10555:3;10549:4;10546:13;10542:36;10536:2;10526:8;10523:16;10518:2;10512:4;10509:12;10505:35;10502:77;10499:159;;;-1:-1:-1;10611:19:201;;;10643:5;;10499:159;10690:34;10715:8;10709:4;10690:34;:::i;:::-;10820:6;10752:66;10748:79;10739:7;10736:92;10733:118;;;10831:18;;:::i;:::-;10869:20;;10029:866;-1:-1:-1;;;10029:866:201:o;10900:131::-;10960:5;10989:36;11016:8;11010:4;10989:36;:::i;11226:246::-;11266:4;11295:34;11379:10;;;;11349;;11401:12;;;11398:38;;;11416:18;;:::i;:::-;11453:13;;11226:246;-1:-1:-1;;;11226:246:201:o;12488:253::-;12528:3;12556:34;12617:2;12614:1;12610:10;12647:2;12644:1;12640:10;12678:3;12674:2;12670:12;12665:3;12662:21;12659:47;;;12686:18;;:::i;:::-;12722:13;;12488:253;-1:-1:-1;;;;12488:253:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"3283600","executionCost":"3682","totalCost":"3287282"},"external":{"CLOSE_FACTOR_HF_THRESHOLD()":"167","MAX_LIQUIDATION_CLOSE_FACTOR()":"189","executeLiquidationCall(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(address => DataTypes.UserConfigurationMap) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.ExecuteLiquidationCallParams)":"infinite"},"internal":{"_burnCollateralATokens(struct DataTypes.ReserveData storage pointer,struct DataTypes.ExecuteLiquidationCallParams memory,struct LiquidationLogic.LiquidationCallLocalVars memory)":"infinite","_burnDebtTokens(struct DataTypes.ExecuteLiquidationCallParams memory,struct LiquidationLogic.LiquidationCallLocalVars memory)":"infinite","_calculateAvailableCollateralToLiquidate(struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,address,uint256,uint256,uint256,contract IPriceOracleGetter)":"infinite","_calculateDebt(struct DataTypes.ReserveCache memory,struct DataTypes.ExecuteLiquidationCallParams memory,uint256)":"infinite","_getConfigurationData(mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.ReserveData storage pointer,struct DataTypes.ExecuteLiquidationCallParams memory)":"infinite","_liquidateATokens(mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(address => struct DataTypes.UserConfigurationMap storage ref),struct DataTypes.ReserveData storage pointer,struct DataTypes.ExecuteLiquidationCallParams memory,struct LiquidationLogic.LiquidationCallLocalVars memory)":"infinite"}},"methodIdentifiers":{"CLOSE_FACTOR_HF_THRESHOLD()":"a18964a5","MAX_LIQUIDATION_CLOSE_FACTOR()":"d2467544","executeLiquidationCall(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(address => DataTypes.UserConfigurationMap) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.ExecuteLiquidationCallParams)":"83c1087d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collateralAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"debtAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"debtToCover\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidatedCollateralAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"receiveAToken\",\"type\":\"bool\"}],\"name\":\"LiquidationCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralEnabled\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CLOSE_FACTOR_HF_THRESHOLD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_LIQUIDATION_CLOSE_FACTOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"executeLiquidationCall(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(address => DataTypes.UserConfigurationMap) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.ExecuteLiquidationCallParams)\":{\"details\":\"Emits the `LiquidationCall()` event\",\"params\":{\"eModeCategories\":\"The configuration of all the efficiency mode categories\",\"params\":\"The additional parameters needed to execute the liquidation function\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\",\"usersConfig\":\"The users configuration mapping that track the supplied/borrowed assets\"}}},\"stateVariables\":{\"CLOSE_FACTOR_HF_THRESHOLD\":{\"details\":\"This constant represents below which health factor value it is possible to liquidate an amount of debt corresponding to `MAX_LIQUIDATION_CLOSE_FACTOR`. A value of 0.95e18 results in 0.95\"},\"DEFAULT_LIQUIDATION_CLOSE_FACTOR\":{\"details\":\"Default percentage of borrower's debt to be repaid in a liquidation.Percentage applied when the users health factor is above `CLOSE_FACTOR_HF_THRESHOLD` Expressed in bps, a value of 0.5e4 results in 50.00%\"},\"MAX_LIQUIDATION_CLOSE_FACTOR\":{\"details\":\"Maximum percentage of borrower's debt to be repaid in a liquidationPercentage applied when the users health factor is below `CLOSE_FACTOR_HF_THRESHOLD` Expressed in bps, a value of 1e4 results in 100.00%\"}},\"title\":\"LiquidationLogic library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeLiquidationCall(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(address => DataTypes.UserConfigurationMap) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.ExecuteLiquidationCallParams)\":{\"notice\":\"Function to liquidate a position if its Health Factor drops below 1. The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives a proportional amount of the `collateralAsset` plus a bonus to cover market risk\"}},\"notice\":\"Implements actions involving management of collateral in the protocol, the main one being the liquidations\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/libraries/logic/LiquidationLogic.sol\":\"LiquidationLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\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(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\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 {AccessControl-_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) external view returns (bool);\\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 {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\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) external;\\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) external;\\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) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title Helpers library\\n * @author Aave\\n */\\nlibrary Helpers {\\n  /**\\n   * @notice Fetches the user current stable and variable debt balances\\n   * @param user The user address\\n   * @param reserveCache The reserve cache data object\\n   * @return The stable debt balance\\n   * @return The variable debt balance\\n   */\\n  function getUserCurrentDebt(\\n    address user,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal view returns (uint256, uint256) {\\n    return (\\n      IERC20(reserveCache.stableDebtTokenAddress).balanceOf(user),\\n      IERC20(reserveCache.variableDebtTokenAddress).balanceOf(user)\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x7e0c79cab4c30d9fadd227dcdecb51046e01d74ed34e5e8597f928f7f3a97640\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/IsolationModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title IsolationModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for handling repayments for assets borrowed in isolation mode\\n */\\nlibrary IsolationModeLogic {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice updated the isolated debt whenever a position collateralized by an isolated asset is repaid or liquidated\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping\\n   * @param reserveCache The cached data of the reserve\\n   * @param repayAmount The amount being repaid\\n   */\\n  function updateIsolatedDebtIfIsolated(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 repayAmount\\n  ) internal {\\n    (bool isolationModeActive, address isolationModeCollateralAddress, ) = userConfig\\n      .getIsolationModeState(reservesData, reservesList);\\n\\n    if (isolationModeActive) {\\n      uint128 isolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt;\\n\\n      uint128 isolatedDebtRepaid = (repayAmount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n\\n      // since the debt ceiling does not take into account the interest accrued, it might happen that amount\\n      // repaid > debt in isolation mode\\n      if (isolationModeTotalDebt <= isolatedDebtRepaid) {\\n        reservesData[isolationModeCollateralAddress].isolationModeTotalDebt = 0;\\n        emit IsolationModeTotalDebtUpdated(isolationModeCollateralAddress, 0);\\n      } else {\\n        uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n          .isolationModeTotalDebt = isolationModeTotalDebt - isolatedDebtRepaid;\\n        emit IsolationModeTotalDebtUpdated(\\n          isolationModeCollateralAddress,\\n          nextIsolationModeTotalDebt\\n        );\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xf96e7a7bb1d0d62c233462fcb86954361ef2d7be03bf444017ce8a443d0b6cc1\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/LiquidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts//IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {PercentageMath} from '../../libraries/math/PercentageMath.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Helpers} from '../../libraries/helpers/Helpers.sol';\\nimport {DataTypes} from '../../libraries/types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\nimport {UserConfiguration} from '../../libraries/configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../../libraries/configuration/ReserveConfiguration.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\n\\n/**\\n * @title LiquidationLogic library\\n * @author Aave\\n * @notice Implements actions involving management of collateral in the protocol, the main one being the liquidations\\n */\\nlibrary LiquidationLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Default percentage of borrower's debt to be repaid in a liquidation.\\n   * @dev Percentage applied when the users health factor is above `CLOSE_FACTOR_HF_THRESHOLD`\\n   * Expressed in bps, a value of 0.5e4 results in 50.00%\\n   */\\n  uint256 internal constant DEFAULT_LIQUIDATION_CLOSE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @dev Maximum percentage of borrower's debt to be repaid in a liquidation\\n   * @dev Percentage applied when the users health factor is below `CLOSE_FACTOR_HF_THRESHOLD`\\n   * Expressed in bps, a value of 1e4 results in 100.00%\\n   */\\n  uint256 public constant MAX_LIQUIDATION_CLOSE_FACTOR = 1e4;\\n\\n  /**\\n   * @dev This constant represents below which health factor value it is possible to liquidate\\n   * an amount of debt corresponding to `MAX_LIQUIDATION_CLOSE_FACTOR`.\\n   * A value of 0.95e18 results in 0.95\\n   */\\n  uint256 public constant CLOSE_FACTOR_HF_THRESHOLD = 0.95e18;\\n\\n  struct LiquidationCallLocalVars {\\n    uint256 userCollateralBalance;\\n    uint256 userVariableDebt;\\n    uint256 userTotalDebt;\\n    uint256 actualDebtToLiquidate;\\n    uint256 actualCollateralToLiquidate;\\n    uint256 liquidationBonus;\\n    uint256 healthFactor;\\n    uint256 liquidationProtocolFeeAmount;\\n    address collateralPriceSource;\\n    address debtPriceSource;\\n    IAToken collateralAToken;\\n    DataTypes.ReserveCache debtReserveCache;\\n  }\\n\\n  /**\\n   * @notice Function to liquidate a position if its Health Factor drops below 1. The caller (liquidator)\\n   * covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   * a proportional amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @dev Emits the `LiquidationCall()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params The additional parameters needed to execute the liquidation function\\n   */\\n  function executeLiquidationCall(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ExecuteLiquidationCallParams memory params\\n  ) external {\\n    LiquidationCallLocalVars memory vars;\\n\\n    DataTypes.ReserveData storage collateralReserve = reservesData[params.collateralAsset];\\n    DataTypes.ReserveData storage debtReserve = reservesData[params.debtAsset];\\n    DataTypes.UserConfigurationMap storage userConfig = usersConfig[params.user];\\n    vars.debtReserveCache = debtReserve.cache();\\n    debtReserve.updateState(vars.debtReserveCache);\\n\\n    (, , , , vars.healthFactor, ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.user,\\n        oracle: params.priceOracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    (vars.userVariableDebt, vars.userTotalDebt, vars.actualDebtToLiquidate) = _calculateDebt(\\n      vars.debtReserveCache,\\n      params,\\n      vars.healthFactor\\n    );\\n\\n    ValidationLogic.validateLiquidationCall(\\n      userConfig,\\n      collateralReserve,\\n      DataTypes.ValidateLiquidationCallParams({\\n        debtReserveCache: vars.debtReserveCache,\\n        totalDebt: vars.userTotalDebt,\\n        healthFactor: vars.healthFactor,\\n        priceOracleSentinel: params.priceOracleSentinel\\n      })\\n    );\\n\\n    (\\n      vars.collateralAToken,\\n      vars.collateralPriceSource,\\n      vars.debtPriceSource,\\n      vars.liquidationBonus\\n    ) = _getConfigurationData(eModeCategories, collateralReserve, params);\\n\\n    vars.userCollateralBalance = vars.collateralAToken.balanceOf(params.user);\\n\\n    (\\n      vars.actualCollateralToLiquidate,\\n      vars.actualDebtToLiquidate,\\n      vars.liquidationProtocolFeeAmount\\n    ) = _calculateAvailableCollateralToLiquidate(\\n      collateralReserve,\\n      vars.debtReserveCache,\\n      vars.collateralPriceSource,\\n      vars.debtPriceSource,\\n      vars.actualDebtToLiquidate,\\n      vars.userCollateralBalance,\\n      vars.liquidationBonus,\\n      IPriceOracleGetter(params.priceOracle)\\n    );\\n\\n    if (vars.userTotalDebt == vars.actualDebtToLiquidate) {\\n      userConfig.setBorrowing(debtReserve.id, false);\\n    }\\n\\n    // If the collateral being liquidated is equal to the user balance,\\n    // we set the currency as not being used as collateral anymore\\n    if (\\n      vars.actualCollateralToLiquidate + vars.liquidationProtocolFeeAmount ==\\n      vars.userCollateralBalance\\n    ) {\\n      userConfig.setUsingAsCollateral(collateralReserve.id, false);\\n      emit ReserveUsedAsCollateralDisabled(params.collateralAsset, params.user);\\n    }\\n\\n    _burnDebtTokens(params, vars);\\n\\n    debtReserve.updateInterestRates(\\n      vars.debtReserveCache,\\n      params.debtAsset,\\n      vars.actualDebtToLiquidate,\\n      0\\n    );\\n\\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\\n      reservesData,\\n      reservesList,\\n      userConfig,\\n      vars.debtReserveCache,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    if (params.receiveAToken) {\\n      _liquidateATokens(reservesData, reservesList, usersConfig, collateralReserve, params, vars);\\n    } else {\\n      _burnCollateralATokens(collateralReserve, params, vars);\\n    }\\n\\n    // Transfer fee to treasury if it is non-zero\\n    if (vars.liquidationProtocolFeeAmount != 0) {\\n      uint256 liquidityIndex = collateralReserve.getNormalizedIncome();\\n      uint256 scaledDownLiquidationProtocolFee = vars.liquidationProtocolFeeAmount.rayDiv(\\n        liquidityIndex\\n      );\\n      uint256 scaledDownUserBalance = vars.collateralAToken.scaledBalanceOf(params.user);\\n      // To avoid trying to send more aTokens than available on balance, due to 1 wei imprecision\\n      if (scaledDownLiquidationProtocolFee > scaledDownUserBalance) {\\n        vars.liquidationProtocolFeeAmount = scaledDownUserBalance.rayMul(liquidityIndex);\\n      }\\n      vars.collateralAToken.transferOnLiquidation(\\n        params.user,\\n        vars.collateralAToken.RESERVE_TREASURY_ADDRESS(),\\n        vars.liquidationProtocolFeeAmount\\n      );\\n    }\\n\\n    // Transfers the debt asset being repaid to the aToken, where the liquidity is kept\\n    IERC20(params.debtAsset).safeTransferFrom(\\n      msg.sender,\\n      vars.debtReserveCache.aTokenAddress,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    IAToken(vars.debtReserveCache.aTokenAddress).handleRepayment(\\n      msg.sender,\\n      params.user,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    emit LiquidationCall(\\n      params.collateralAsset,\\n      params.debtAsset,\\n      params.user,\\n      vars.actualDebtToLiquidate,\\n      vars.actualCollateralToLiquidate,\\n      msg.sender,\\n      params.receiveAToken\\n    );\\n  }\\n\\n  /**\\n   * @notice Burns the collateral aTokens and transfers the underlying to the liquidator.\\n   * @dev   The function also updates the state and the interest rate of the collateral reserve.\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars The executeLiquidationCall() function local vars\\n   */\\n  function _burnCollateralATokens(\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    DataTypes.ReserveCache memory collateralReserveCache = collateralReserve.cache();\\n    collateralReserve.updateState(collateralReserveCache);\\n    collateralReserve.updateInterestRates(\\n      collateralReserveCache,\\n      params.collateralAsset,\\n      0,\\n      vars.actualCollateralToLiquidate\\n    );\\n\\n    // Burn the equivalent amount of aToken, sending the underlying to the liquidator\\n    vars.collateralAToken.burn(\\n      params.user,\\n      msg.sender,\\n      vars.actualCollateralToLiquidate,\\n      collateralReserveCache.nextLiquidityIndex\\n    );\\n  }\\n\\n  /**\\n   * @notice Liquidates the user aTokens by transferring them to the liquidator.\\n   * @dev   The function also checks the state of the liquidator and activates the aToken as collateral\\n   *        as in standard transfers if the isolation mode constraints are respected.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars The executeLiquidationCall() function local vars\\n   */\\n  function _liquidateATokens(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    uint256 liquidatorPreviousATokenBalance = IERC20(vars.collateralAToken).balanceOf(msg.sender);\\n    vars.collateralAToken.transferOnLiquidation(\\n      params.user,\\n      msg.sender,\\n      vars.actualCollateralToLiquidate\\n    );\\n\\n    if (liquidatorPreviousATokenBalance == 0) {\\n      DataTypes.UserConfigurationMap storage liquidatorConfig = usersConfig[msg.sender];\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          liquidatorConfig,\\n          collateralReserve.configuration,\\n          collateralReserve.aTokenAddress\\n        )\\n      ) {\\n        liquidatorConfig.setUsingAsCollateral(collateralReserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(params.collateralAsset, msg.sender);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns the debt tokens of the user up to the amount being repaid by the liquidator.\\n   * @dev The function alters the `debtReserveCache` state in `vars` to update the debt related data.\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars the executeLiquidationCall() function local vars\\n   */\\n  function _burnDebtTokens(\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    if (vars.userVariableDebt >= vars.actualDebtToLiquidate) {\\n      vars.debtReserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        vars.debtReserveCache.variableDebtTokenAddress\\n      ).burn(\\n          params.user,\\n          vars.actualDebtToLiquidate,\\n          vars.debtReserveCache.nextVariableBorrowIndex\\n        );\\n    } else {\\n      // If the user doesn't have variable debt, no need to try to burn variable debt tokens\\n      if (vars.userVariableDebt != 0) {\\n        vars.debtReserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n          vars.debtReserveCache.variableDebtTokenAddress\\n        ).burn(params.user, vars.userVariableDebt, vars.debtReserveCache.nextVariableBorrowIndex);\\n      }\\n      (\\n        vars.debtReserveCache.nextTotalStableDebt,\\n        vars.debtReserveCache.nextAvgStableBorrowRate\\n      ) = IStableDebtToken(vars.debtReserveCache.stableDebtTokenAddress).burn(\\n        params.user,\\n        vars.actualDebtToLiquidate - vars.userVariableDebt\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the total debt of the user and the actual amount to liquidate depending on the health factor\\n   * and corresponding close factor.\\n   * @dev If the Health Factor is below CLOSE_FACTOR_HF_THRESHOLD, the close factor is increased to MAX_LIQUIDATION_CLOSE_FACTOR\\n   * @param debtReserveCache The reserve cache data object of the debt reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param healthFactor The health factor of the position\\n   * @return The variable debt of the user\\n   * @return The total debt of the user\\n   * @return The actual debt to liquidate as a function of the closeFactor\\n   */\\n  function _calculateDebt(\\n    DataTypes.ReserveCache memory debtReserveCache,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    uint256 healthFactor\\n  ) internal view returns (uint256, uint256, uint256) {\\n    (uint256 userStableDebt, uint256 userVariableDebt) = Helpers.getUserCurrentDebt(\\n      params.user,\\n      debtReserveCache\\n    );\\n\\n    uint256 userTotalDebt = userStableDebt + userVariableDebt;\\n\\n    uint256 closeFactor = healthFactor > CLOSE_FACTOR_HF_THRESHOLD\\n      ? DEFAULT_LIQUIDATION_CLOSE_FACTOR\\n      : MAX_LIQUIDATION_CLOSE_FACTOR;\\n\\n    uint256 maxLiquidatableDebt = userTotalDebt.percentMul(closeFactor);\\n\\n    uint256 actualDebtToLiquidate = params.debtToCover > maxLiquidatableDebt\\n      ? maxLiquidatableDebt\\n      : params.debtToCover;\\n\\n    return (userVariableDebt, userTotalDebt, actualDebtToLiquidate);\\n  }\\n\\n  /**\\n   * @notice Returns the configuration data for the debt and the collateral reserves.\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @return The collateral aToken\\n   * @return The address to use as price source for the collateral\\n   * @return The address to use as price source for the debt\\n   * @return The liquidation bonus to apply to the collateral\\n   */\\n  function _getConfigurationData(\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params\\n  ) internal view returns (IAToken, address, address, uint256) {\\n    IAToken collateralAToken = IAToken(collateralReserve.aTokenAddress);\\n    uint256 liquidationBonus = collateralReserve.configuration.getLiquidationBonus();\\n\\n    address collateralPriceSource = params.collateralAsset;\\n    address debtPriceSource = params.debtAsset;\\n\\n    if (params.userEModeCategory != 0) {\\n      address eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n\\n      if (\\n        EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          collateralReserve.configuration.getEModeCategory()\\n        )\\n      ) {\\n        liquidationBonus = eModeCategories[params.userEModeCategory].liquidationBonus;\\n\\n        if (eModePriceSource != address(0)) {\\n          collateralPriceSource = eModePriceSource;\\n        }\\n      }\\n\\n      // when in eMode, debt will always be in the same eMode category, can skip matching category check\\n      if (eModePriceSource != address(0)) {\\n        debtPriceSource = eModePriceSource;\\n      }\\n    }\\n\\n    return (collateralAToken, collateralPriceSource, debtPriceSource, liquidationBonus);\\n  }\\n\\n  struct AvailableCollateralToLiquidateLocalVars {\\n    uint256 collateralPrice;\\n    uint256 debtAssetPrice;\\n    uint256 maxCollateralToLiquidate;\\n    uint256 baseCollateral;\\n    uint256 bonusCollateral;\\n    uint256 debtAssetDecimals;\\n    uint256 collateralDecimals;\\n    uint256 collateralAssetUnit;\\n    uint256 debtAssetUnit;\\n    uint256 collateralAmount;\\n    uint256 debtAmountNeeded;\\n    uint256 liquidationProtocolFeePercentage;\\n    uint256 liquidationProtocolFee;\\n  }\\n\\n  /**\\n   * @notice Calculates how much of a specific collateral can be liquidated, given\\n   * a certain amount of debt asset.\\n   * @dev This function needs to be called after all the checks to validate the liquidation have been performed,\\n   *   otherwise it might fail.\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param debtReserveCache The cached data of the debt reserve\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param userCollateralBalance The collateral balance for the specific `collateralAsset` of the user being liquidated\\n   * @param liquidationBonus The collateral bonus percentage to receive as result of the liquidation\\n   * @return The maximum amount that is possible to liquidate given all the liquidation constraints (user balance, close factor)\\n   * @return The amount to repay with the liquidation\\n   * @return The fee taken from the liquidation bonus amount to be paid to the protocol\\n   */\\n  function _calculateAvailableCollateralToLiquidate(\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ReserveCache memory debtReserveCache,\\n    address collateralAsset,\\n    address debtAsset,\\n    uint256 debtToCover,\\n    uint256 userCollateralBalance,\\n    uint256 liquidationBonus,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    AvailableCollateralToLiquidateLocalVars memory vars;\\n\\n    vars.collateralPrice = oracle.getAssetPrice(collateralAsset);\\n    vars.debtAssetPrice = oracle.getAssetPrice(debtAsset);\\n\\n    vars.collateralDecimals = collateralReserve.configuration.getDecimals();\\n    vars.debtAssetDecimals = debtReserveCache.reserveConfiguration.getDecimals();\\n\\n    unchecked {\\n      vars.collateralAssetUnit = 10 ** vars.collateralDecimals;\\n      vars.debtAssetUnit = 10 ** vars.debtAssetDecimals;\\n    }\\n\\n    vars.liquidationProtocolFeePercentage = collateralReserve\\n      .configuration\\n      .getLiquidationProtocolFee();\\n\\n    // This is the base collateral to liquidate based on the given debt to cover\\n    vars.baseCollateral =\\n      ((vars.debtAssetPrice * debtToCover * vars.collateralAssetUnit)) /\\n      (vars.collateralPrice * vars.debtAssetUnit);\\n\\n    vars.maxCollateralToLiquidate = vars.baseCollateral.percentMul(liquidationBonus);\\n\\n    if (vars.maxCollateralToLiquidate > userCollateralBalance) {\\n      vars.collateralAmount = userCollateralBalance;\\n      vars.debtAmountNeeded = ((vars.collateralPrice * vars.collateralAmount * vars.debtAssetUnit) /\\n        (vars.debtAssetPrice * vars.collateralAssetUnit)).percentDiv(liquidationBonus);\\n    } else {\\n      vars.collateralAmount = vars.maxCollateralToLiquidate;\\n      vars.debtAmountNeeded = debtToCover;\\n    }\\n\\n    if (vars.liquidationProtocolFeePercentage != 0) {\\n      vars.bonusCollateral =\\n        vars.collateralAmount -\\n        vars.collateralAmount.percentDiv(liquidationBonus);\\n\\n      vars.liquidationProtocolFee = vars.bonusCollateral.percentMul(\\n        vars.liquidationProtocolFeePercentage\\n      );\\n\\n      return (\\n        vars.collateralAmount - vars.liquidationProtocolFee,\\n        vars.debtAmountNeeded,\\n        vars.liquidationProtocolFee\\n      );\\n    } else {\\n      return (vars.collateralAmount, vars.debtAmountNeeded, 0);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xde6eb6f7c1e21dfee970b2f5abe014ed4c422164c505a5dbbe1191bd59cd85ec\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeLiquidationCall(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(address => DataTypes.UserConfigurationMap) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.ExecuteLiquidationCallParams)":{"notice":"Function to liquidate a position if its Health Factor drops below 1. The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives a proportional amount of the `collateralAsset` plus a bonus to cover market risk"}},"notice":"Implements actions involving management of collateral in the protocol, the main one being the liquidations","version":1}}},"@aave/core-v3/contracts/protocol/libraries/logic/PoolLogic.sol":{"PoolLogic":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalDebt","type":"uint256"}],"name":"IsolationModeTotalDebtUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountMinted","type":"uint256"}],"name":"MintedToTreasury","type":"event"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"executeDropReserve(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,address)":{"params":{"asset":"The address of the underlying asset of the reserve","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves"}},"executeGetUserAccountData(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.CalculateUserAccountDataParams)":{"params":{"eModeCategories":"The configuration of all the efficiency mode categories","params":"Additional params needed for the calculation","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves"},"returns":{"availableBorrowsBase":"The borrowing power left of the user in the base currency used by the price feed","currentLiquidationThreshold":"The liquidation threshold of the user","healthFactor":"The current health factor of the user","ltv":"The loan to value of The user","totalCollateralBase":"The total collateral of the user in the base currency used by the price feed","totalDebtBase":"The total debt of the user in the base currency used by the price feed"}},"executeInitReserve(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.InitReserveParams)":{"params":{"params":"Additional parameters needed for initiation","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves"},"returns":{"_0":"true if appended, false if inserted at existing empty spot"}},"executeMintToTreasury(mapping(address => DataTypes.ReserveData) storage,address[])":{"params":{"assets":"The list of reserves for which the minting needs to be executed","reservesData":"The state of all the reserves"}},"executeRescueTokens(address,address,uint256)":{"params":{"amount":"The amount of token to transfer","to":"The address of the recipient","token":"The address of the token"}},"executeResetIsolationModeTotalDebt(mapping(address => DataTypes.ReserveData) storage,address)":{"details":"It requires the given asset has zero debt ceiling","params":{"asset":"The address of the underlying asset to reset the isolationModeTotalDebt","reservesData":"The state of all the reserves"}}},"title":"PoolLogic library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6125cf61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061007c5760003560e01c806369fc1bdf1161005a57806369fc1bdf1461010857806387b322b2146101385780639cf570231461015857600080fd5b80631e3b41451461008157806326ec273f146100a357806348c2ca8c146100e8575b600080fd5b81801561008d57600080fd5b506100a161009c366004611f9d565b610178565b005b6100b66100b13660046120ad565b6102b0565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0015b60405180910390f35b8180156100f457600080fd5b506100a1610103366004612186565b6102ed565b81801561011457600080fd5b50610128610123366004612217565b6104d3565b60405190151581526020016100df565b81801561014457600080fd5b506100a16101533660046122f2565b6108cc565b81801561016457600080fd5b506100a161017336600461232e565b6108f2565b73ffffffffffffffffffffffffffffffffffffffff811660009081526020838152604091829020825191820190925290549081905260d41c64ffffffffff1660408051808201909152600281527f38310000000000000000000000000000000000000000000000000000000000006020820152901561022d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff811660008181526020848152604080832060090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055519182527faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5910160405180910390a25050565b6000806000806000806102c58a8a8a8a610a33565b50939950919750909450925090506102de868684610f9d565b93509499939850945094509450565b60005b818110156104cd57600083838381811061030c5761030c6123d6565b90506020020160208101906103219190612405565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208781526040918290208251918201909252815490819052919250906701000000000000001661036f5750506104bb565b60088101546fffffffffffffffffffffffffffffffff1680156104b7576008820180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016905560006103c183610fd1565b905060006103cf8383611061565b6004808601546040517f7df5bd3b00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff1691637df5bd3b91610432918591879101918252602082015260400190565b600060405180830381600087803b15801561044c57600080fd5b505af1158015610460573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fbfa21aa5d5f9a1f0120a95e7c0749f389863cbdbfff531aa7339077a5bc919de826040516104ac91815260200190565b60405180910390a250505b5050505b806104c58161244f565b9150506102f0565b50505050565b805160408051808201909152600181527f390000000000000000000000000000000000000000000000000000000000000060208201526000913b610544576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b5060208083015160408085015160608601516080870151875173ffffffffffffffffffffffffffffffffffffffff166000908152958a90529290942061058c949093926110b8565b815173ffffffffffffffffffffffffffffffffffffffff166000908152602085905260408120600301547501000000000000000000000000000000000000000000900461ffff161515806106085750825160008080526020869052604090205473ffffffffffffffffffffffffffffffffffffffff9081169116145b905080156040518060400160405280600281526020017f31340000000000000000000000000000000000000000000000000000000000008152509061067a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b5060005b8360a0015161ffff168161ffff1610156107885761ffff811660009081526020869052604090205473ffffffffffffffffffffffffffffffffffffffff1661077657835173ffffffffffffffffffffffffffffffffffffffff90811660009081526020888152604080832060030180547fffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000061ffff97909716968702179055875194835290889052812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169390921692909217905591506108c59050565b8061078081612488565b91505061067e565b508260c0015161ffff168360a0015161ffff16106040518060400160405280600281526020017f31350000000000000000000000000000000000000000000000000000000000008152509061080a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b50505060a081018051825173ffffffffffffffffffffffffffffffffffffffff90811660009081526020878152604080832060030180547fffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000061ffff978816021790558651955190941682528690529190912080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169290911691909117905560015b9392505050565b6108ed73ffffffffffffffffffffffffffffffffffffffff8416838361120b565b505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526020849052604090206109228382846112de565b5073ffffffffffffffffffffffffffffffffffffffff166000818152602084815260408083206003810180547501000000000000000000000000000000000000000000900461ffff16855295835290832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116909155938352949052808455600184018190556002840181905582547fffffffffffffffffff0000000000000000000000000000000000000000000000169092556004830180548216905560058301805482169055600683018054821690556007830180549091169055600882015560090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055565b600080600080600080610a498760000151511590565b15610a855750600094508493508392508291507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905081610f90565b610b3460405180610260016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581525090565b608088015160ff1615610b7957608088015160ff16600090815260208a9052604090206060890151610b669190611749565b6101808401526101c08301526101a08201525b87602001518160c001511015610e985760c08101518851610b9991611828565b610bad5760c0810180516001019052610b79565b60c0810151600090815260208b9052604090205473ffffffffffffffffffffffffffffffffffffffff166102008201819052610bf35760c0810180516001019052610b79565b61020081015173ffffffffffffffffffffffffffffffffffffffff16600090815260208c8152604091829020825180830190935280549283905260ff60a884901c81166101e0860152603084901c166060850181905261ffff601085901c811660a08701529093166080850152600a9290920a9083015261018082015115801590610c895750816101e00151896080015160ff16145b610d2d5760608901516102008301516040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063b3596f0790602401602060405180830381865afa158015610d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2891906124aa565b610d34565b8161018001515b825260a082015115801590610d54575060c08201518951610d54916118ad565b15610e4457610d7189604001518284600001518560200151611931565b6040830181905261010083018051610d8a9083906124c3565b90525060808901516101e0830151610da59160ff1690611a0a565b1515610240830152608082015115610dfb57816102400151610dcb578160800151610dd2565b816101a001515b8260400151610de191906124db565b8261014001818151610df391906124c3565b905250610e04565b60016102208301525b816102400151610e18578160a00151610e1f565b816101c001515b8260400151610e2e91906124db565b8261016001818151610e4091906124c3565b9052505b60c08201518951610e5491611a1b565b15610e8757610e7189604001518284600001518560200151611a9d565b8261012001818151610e8391906124c3565b9052505b5060c0810180516001019052610b79565b610100810151610ea9576000610ec4565b80610100015181610140015181610ec257610ec2612518565b045b610140820152610100810151610edb576000610ef6565b80610100015181610160015181610ef457610ef4612518565b045b61016082015261012081015115610f3857610f33816101200151610f2d836101600151846101000151611c1d90919063ffffffff16565b90611c60565b610f5a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b60e0820181905261010082015161012083015161014084015161016085015161022090950151929a509098509650919450925090505b9499939850945094509450565b600080610faa8584611c1d565b905083811015610fbe5760009150506108c5565b610fc88482612547565b95945050505050565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415611017575050600101546fffffffffffffffffffffffffffffffff1690565b60018301546108c5906fffffffffffffffffffffffffffffffff80821691611055917001000000000000000000000000000000009091041684611c97565b90611061565b50919050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761109657600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b600485015460408051808201909152600281527f363100000000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff1615611140576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b506001850180546b033b2e3c9fd0803ce80000007fffffffffffffffffffffffffffffffff00000000000000000000000000000000918216811790925560028701805490911690911790556004850180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff968716179091556005860180548216948616949094179093556006850180548416928516929092179091556007909301805490911692909116919091179055565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af161126e573d6000803e3d6000fd5b5061127884611cdc565b6104cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e7366657200000000000000000000006044820152606401610224565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216611360576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b5060038201547501000000000000000000000000000000000000000000900461ffff161515806113b6575060008080526020849052604090205473ffffffffffffffffffffffffffffffffffffffff8281169116145b6040518060400160405280600281526020017f383200000000000000000000000000000000000000000000000000000000000081525090611424576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b508160050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b891906124aa565b60408051808201909152600281527f353500000000000000000000000000000000000000000000000000000000000060208201529015611525576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b508160060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611595573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b991906124aa565b60408051808201909152600281527f353600000000000000000000000000000000000000000000000000000000000060208201529015611626576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b50600480830154604080517f18160ddd000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216926318160ddd9282820192602092908290030181865afa158015611696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ba91906124aa565b1580156116db575060088201546fffffffffffffffffffffffffffffffff16155b6040518060400160405280600281526020017f3534000000000000000000000000000000000000000000000000000000000000815250906104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b81546000908190819081906601000000000000900473ffffffffffffffffffffffffffffffffffffffff16801561180d576040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015287169063b3596f0790602401602060405180830381865afa1580156117e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180a91906124aa565b91505b50945461ffff80821697620100009092041695945092505050565b60408051808201909152600281527f373400000000000000000000000000000000000000000000000000000000000060208201526000906080831061189a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b5050905160019190911b1c600316151590565b60408051808201909152600281527f373400000000000000000000000000000000000000000000000000000000000060208201526000906080831061191f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b50509051600191821b82011c16151590565b60008061193d85610fd1565b6004868101546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81169382019390935292935060009287926119e3928692911690631da24f3e90602401602060405180830381865afa1580156119bf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105591906124aa565b6119ed91906124db565b90508381816119fe576119fe612518565b04979650505050505050565b600082158015906108c55750501490565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310611a8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b50509051600191821b1c16151590565b60068301546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000928392911690631da24f3e90602401602060405180830381865afa158015611b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3791906124aa565b90508015611b5557611b52611b4b86611da6565b8290611061565b90505b60058501546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152909116906370a0823190602401602060405180830381865afa158015611bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611beb91906124aa565b611bf590826124c3565b9050611c0181856124db565b9050828181611c1257611c12612518565b049695505050505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7783900484111517611c5257600080fd5b506127109102611388010490565b60008115670de0b6b3a764000060028404190484111715611c8057600080fd5b50670de0b6b3a76400009190910260028204010490565b600080611cab64ffffffffff841642612547565b611cb590856124db565b6301e1338090049050611cd4816b033b2e3c9fd0803ce80000006124c3565b949350505050565b6000611d1c565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d8015611d5b5760208114611d9557611d567f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f611ce3565b61105b565b823b611d8c57611d8c7f475076323a206e6f74206120636f6e74726163740000000000000000000000006014611ce3565b6001915061105b565b3d6000803e50506000511515919050565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415611dec575050600201546fffffffffffffffffffffffffffffffff1690565b60028301546108c5906fffffffffffffffffffffffffffffffff8082169161105591700100000000000000000000000000000000909104168460006108c5838342600080611e4164ffffffffff851684612547565b905080611e5d576b033b2e3c9fd0803ce80000009150506108c5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511611e93576000611e98565b600285035b925066038882915c4000611eac8a80611061565b81611eb957611eb9612518565b0491506301e13380611ecb838b611061565b81611ed857611ed8612518565b049050600082611ee886886124db565b611ef291906124db565b60029004905060008285611f06888a6124db565b611f1091906124db565b611f1a91906124db565b60069004905080826301e13380611f318a8f6124db565b611f3b919061255e565b611f51906b033b2e3c9fd0803ce80000006124c3565b611f5b91906124c3565b611f6591906124c3565b9b9a5050505050505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f9857600080fd5b919050565b60008060408385031215611fb057600080fd5b82359150611fc060208401611f74565b90509250929050565b60405160a0810167ffffffffffffffff81118282101715612013577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b6040516020810167ffffffffffffffff81118282101715612013577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715612013577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000808486036101008112156120c557600080fd5b8535945060208601359350604086013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa00160a081121561210757600080fd5b61210f611fc9565b602082121561211d57600080fd5b612125612019565b9150606087013582528181526080870135602082015261214760a08801611f74565b604082015261215860c08801611f74565b606082015260e0870135915060ff8216821461217357600080fd5b6080810191909152939692955090935050565b60008060006040848603121561219b57600080fd5b83359250602084013567ffffffffffffffff808211156121ba57600080fd5b818601915086601f8301126121ce57600080fd5b8135818111156121dd57600080fd5b8760208260051b85010111156121f257600080fd5b6020830194508093505050509250925092565b803561ffff81168114611f9857600080fd5b600080600083850361012081121561222e57600080fd5b843593506020850135925060e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08201121561226957600080fd5b50612272612063565b61227e60408601611f74565b815261228c60608601611f74565b602082015261229d60808601611f74565b60408201526122ae60a08601611f74565b60608201526122bf60c08601611f74565b60808201526122d060e08601612205565b60a08201526122e26101008601612205565b60c0820152809150509250925092565b60008060006060848603121561230757600080fd5b61231084611f74565b925061231e60208501611f74565b9150604084013590509250925092565b60008060006060848603121561234357600080fd5b833592506020840135915061235a60408501611f74565b90509250925092565b600060208083528351808285015260005b8181101561239057858101830151858201604001528201612374565b818111156123a2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561241757600080fd5b6108c582611f74565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561248157612481612420565b5060010190565b600061ffff808316818114156124a0576124a0612420565b6001019392505050565b6000602082840312156124bc57600080fd5b5051919050565b600082198211156124d6576124d6612420565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561251357612513612420565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008282101561255957612559612420565b500390565b600082612594577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220f19e28cf44bd33c4782c83497ed8e836316161e37483a0dba26176c1d50596c964736f6c634300080a0033","opcodes":"PUSH2 0x25CF PUSH2 0x3A PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x69FC1BDF GT PUSH2 0x5A JUMPI DUP1 PUSH4 0x69FC1BDF EQ PUSH2 0x108 JUMPI DUP1 PUSH4 0x87B322B2 EQ PUSH2 0x138 JUMPI DUP1 PUSH4 0x9CF57023 EQ PUSH2 0x158 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1E3B4145 EQ PUSH2 0x81 JUMPI DUP1 PUSH4 0x26EC273F EQ PUSH2 0xA3 JUMPI DUP1 PUSH4 0x48C2CA8C EQ PUSH2 0xE8 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x8D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA1 PUSH2 0x9C CALLDATASIZE PUSH1 0x4 PUSH2 0x1F9D JUMP JUMPDEST PUSH2 0x178 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xB6 PUSH2 0xB1 CALLDATASIZE PUSH1 0x4 PUSH2 0x20AD JUMP JUMPDEST PUSH2 0x2B0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA1 PUSH2 0x103 CALLDATASIZE PUSH1 0x4 PUSH2 0x2186 JUMP JUMPDEST PUSH2 0x2ED JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x114 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x128 PUSH2 0x123 CALLDATASIZE PUSH1 0x4 PUSH2 0x2217 JUMP JUMPDEST PUSH2 0x4D3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xDF JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x144 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA1 PUSH2 0x153 CALLDATASIZE PUSH1 0x4 PUSH2 0x22F2 JUMP JUMPDEST PUSH2 0x8CC JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x164 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA1 PUSH2 0x173 CALLDATASIZE PUSH1 0x4 PUSH2 0x232E JUMP JUMPDEST PUSH2 0x8F2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP4 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP1 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3831000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO PUSH2 0x22D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE MLOAD SWAP2 DUP3 MSTORE PUSH32 0xAEF84D3B40895FD58C561F3998000F0583ABB992A52FBDC99ACE8E8DE4D676A5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2C5 DUP11 DUP11 DUP11 DUP11 PUSH2 0xA33 JUMP JUMPDEST POP SWAP4 SWAP10 POP SWAP2 SWAP8 POP SWAP1 SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x2DE DUP7 DUP7 DUP5 PUSH2 0xF9D JUMP JUMPDEST SWAP4 POP SWAP5 SWAP10 SWAP4 SWAP9 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4CD JUMPI PUSH1 0x0 DUP4 DUP4 DUP4 DUP2 DUP2 LT PUSH2 0x30C JUMPI PUSH2 0x30C PUSH2 0x23D6 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x321 SWAP2 SWAP1 PUSH2 0x2405 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP3 MSTORE DUP2 SLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 PUSH8 0x100000000000000 AND PUSH2 0x36F JUMPI POP POP PUSH2 0x4BB JUMP JUMPDEST PUSH1 0x8 DUP2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x4B7 JUMPI PUSH1 0x8 DUP3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x0 PUSH2 0x3C1 DUP4 PUSH2 0xFD1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3CF DUP4 DUP4 PUSH2 0x1061 JUMP JUMPDEST PUSH1 0x4 DUP1 DUP7 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x7DF5BD3B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP3 SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x7DF5BD3B SWAP2 PUSH2 0x432 SWAP2 DUP6 SWAP2 DUP8 SWAP2 ADD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x44C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x460 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xBFA21AA5D5F9A1F0120A95E7C0749F389863CBDBFFF531AA7339077A5BC919DE DUP3 PUSH1 0x40 MLOAD PUSH2 0x4AC SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMPDEST POP POP POP JUMPDEST DUP1 PUSH2 0x4C5 DUP2 PUSH2 0x244F JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2F0 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 EXTCODESIZE PUSH2 0x544 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x80 DUP8 ADD MLOAD DUP8 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP6 DUP11 SWAP1 MSTORE SWAP3 SWAP1 SWAP5 KECCAK256 PUSH2 0x58C SWAP5 SWAP1 SWAP4 SWAP3 PUSH2 0x10B8 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x608 JUMPI POP DUP3 MLOAD PUSH1 0x0 DUP1 DUP1 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 AND EQ JUMPDEST SWAP1 POP DUP1 ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3134000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x67A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0xFFFF AND DUP2 PUSH2 0xFFFF AND LT ISZERO PUSH2 0x788 JUMPI PUSH2 0xFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x776 JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH22 0x1000000000000000000000000000000000000000000 PUSH2 0xFFFF SWAP8 SWAP1 SWAP8 AND SWAP7 DUP8 MUL OR SWAP1 SSTORE DUP8 MLOAD SWAP5 DUP4 MSTORE SWAP1 DUP9 SWAP1 MSTORE DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP4 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SSTORE SWAP2 POP PUSH2 0x8C5 SWAP1 POP JUMP JUMPDEST DUP1 PUSH2 0x780 DUP2 PUSH2 0x2488 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x67E JUMP JUMPDEST POP DUP3 PUSH1 0xC0 ADD MLOAD PUSH2 0xFFFF AND DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0xFFFF AND LT PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3135000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x80A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP POP POP PUSH1 0xA0 DUP2 ADD DUP1 MLOAD DUP3 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH22 0x1000000000000000000000000000000000000000000 PUSH2 0xFFFF SWAP8 DUP9 AND MUL OR SWAP1 SSTORE DUP7 MLOAD SWAP6 MLOAD SWAP1 SWAP5 AND DUP3 MSTORE DUP7 SWAP1 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x1 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x8ED PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP4 DUP4 PUSH2 0x120B JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x922 DUP4 DUP3 DUP5 PUSH2 0x12DE JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND DUP6 MSTORE SWAP6 DUP4 MSTORE SWAP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP4 DUP4 MSTORE SWAP5 SWAP1 MSTORE DUP1 DUP5 SSTORE PUSH1 0x1 DUP5 ADD DUP2 SWAP1 SSTORE PUSH1 0x2 DUP5 ADD DUP2 SWAP1 SSTORE DUP3 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000 AND SWAP1 SWAP3 SSTORE PUSH1 0x4 DUP4 ADD DUP1 SLOAD DUP3 AND SWAP1 SSTORE PUSH1 0x5 DUP4 ADD DUP1 SLOAD DUP3 AND SWAP1 SSTORE PUSH1 0x6 DUP4 ADD DUP1 SLOAD DUP3 AND SWAP1 SSTORE PUSH1 0x7 DUP4 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE PUSH1 0x8 DUP3 ADD SSTORE PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0xA49 DUP8 PUSH1 0x0 ADD MLOAD MLOAD ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0xA85 JUMPI POP PUSH1 0x0 SWAP5 POP DUP5 SWAP4 POP DUP4 SWAP3 POP DUP3 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 POP DUP2 PUSH2 0xF90 JUMP JUMPDEST PUSH2 0xB34 PUSH1 0x40 MLOAD DUP1 PUSH2 0x260 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND ISZERO PUSH2 0xB79 JUMPI PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0xB66 SWAP2 SWAP1 PUSH2 0x1749 JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MSTORE PUSH2 0x1C0 DUP4 ADD MSTORE PUSH2 0x1A0 DUP3 ADD MSTORE JUMPDEST DUP8 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0xC0 ADD MLOAD LT ISZERO PUSH2 0xE98 JUMPI PUSH1 0xC0 DUP2 ADD MLOAD DUP9 MLOAD PUSH2 0xB99 SWAP2 PUSH2 0x1828 JUMP JUMPDEST PUSH2 0xBAD JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0xB79 JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP12 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x200 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0xBF3 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0xB79 JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP13 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP4 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP3 DUP4 SWAP1 MSTORE PUSH1 0xFF PUSH1 0xA8 DUP5 SWAP1 SHR DUP2 AND PUSH2 0x1E0 DUP7 ADD MSTORE PUSH1 0x30 DUP5 SWAP1 SHR AND PUSH1 0x60 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0xFFFF PUSH1 0x10 DUP6 SWAP1 SHR DUP2 AND PUSH1 0xA0 DUP8 ADD MSTORE SWAP1 SWAP4 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA SWAP3 SWAP1 SWAP3 EXP SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0xC89 JUMPI POP DUP2 PUSH2 0x1E0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD PUSH1 0xFF AND EQ JUMPDEST PUSH2 0xD2D JUMPI PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD04 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD28 SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST PUSH2 0xD34 JUMP JUMPDEST DUP2 PUSH2 0x180 ADD MLOAD JUMPDEST DUP3 MSTORE PUSH1 0xA0 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0xD54 JUMPI POP PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0xD54 SWAP2 PUSH2 0x18AD JUMP JUMPDEST ISZERO PUSH2 0xE44 JUMPI PUSH2 0xD71 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x1931 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP4 ADD DUP1 MLOAD PUSH2 0xD8A SWAP1 DUP4 SWAP1 PUSH2 0x24C3 JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x1E0 DUP4 ADD MLOAD PUSH2 0xDA5 SWAP2 PUSH1 0xFF AND SWAP1 PUSH2 0x1A0A JUMP JUMPDEST ISZERO ISZERO PUSH2 0x240 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD ISZERO PUSH2 0xDFB JUMPI DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0xDCB JUMPI DUP2 PUSH1 0x80 ADD MLOAD PUSH2 0xDD2 JUMP JUMPDEST DUP2 PUSH2 0x1A0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0xDE1 SWAP2 SWAP1 PUSH2 0x24DB JUMP JUMPDEST DUP3 PUSH2 0x140 ADD DUP2 DUP2 MLOAD PUSH2 0xDF3 SWAP2 SWAP1 PUSH2 0x24C3 JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0xE04 JUMP JUMPDEST PUSH1 0x1 PUSH2 0x220 DUP4 ADD MSTORE JUMPDEST DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0xE18 JUMPI DUP2 PUSH1 0xA0 ADD MLOAD PUSH2 0xE1F JUMP JUMPDEST DUP2 PUSH2 0x1C0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0xE2E SWAP2 SWAP1 PUSH2 0x24DB JUMP JUMPDEST DUP3 PUSH2 0x160 ADD DUP2 DUP2 MLOAD PUSH2 0xE40 SWAP2 SWAP1 PUSH2 0x24C3 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0xE54 SWAP2 PUSH2 0x1A1B JUMP JUMPDEST ISZERO PUSH2 0xE87 JUMPI PUSH2 0xE71 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x1A9D JUMP JUMPDEST DUP3 PUSH2 0x120 ADD DUP2 DUP2 MLOAD PUSH2 0xE83 SWAP2 SWAP1 PUSH2 0x24C3 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST POP PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0xB79 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0xEA9 JUMPI PUSH1 0x0 PUSH2 0xEC4 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x140 ADD MLOAD DUP2 PUSH2 0xEC2 JUMPI PUSH2 0xEC2 PUSH2 0x2518 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0xEDB JUMPI PUSH1 0x0 PUSH2 0xEF6 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x160 ADD MLOAD DUP2 PUSH2 0xEF4 JUMPI PUSH2 0xEF4 PUSH2 0x2518 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD ISZERO PUSH2 0xF38 JUMPI PUSH2 0xF33 DUP2 PUSH2 0x120 ADD MLOAD PUSH2 0xF2D DUP4 PUSH2 0x160 ADD MLOAD DUP5 PUSH2 0x100 ADD MLOAD PUSH2 0x1C1D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x1C60 JUMP JUMPDEST PUSH2 0xF5A JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH2 0x160 DUP6 ADD MLOAD PUSH2 0x220 SWAP1 SWAP6 ADD MLOAD SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMPDEST SWAP5 SWAP10 SWAP4 SWAP9 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xFAA DUP6 DUP5 PUSH2 0x1C1D JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0xFBE JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x8C5 JUMP JUMPDEST PUSH2 0xFC8 DUP5 DUP3 PUSH2 0x2547 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x1017 JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x8C5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x1055 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x1C97 JUMP JUMPDEST SWAP1 PUSH2 0x1061 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1096 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP6 ADD SLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3631000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x1140 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP PUSH1 0x1 DUP6 ADD DUP1 SLOAD PUSH12 0x33B2E3C9FD0803CE8000000 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE PUSH1 0x2 DUP8 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x4 DUP6 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x5 DUP7 ADD DUP1 SLOAD DUP3 AND SWAP5 DUP7 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE PUSH1 0x6 DUP6 ADD DUP1 SLOAD DUP5 AND SWAP3 DUP6 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x7 SWAP1 SWAP4 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x126E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1278 DUP5 PUSH2 0x1CDC JUMP JUMPDEST PUSH2 0x4CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x224 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x1360 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP PUSH1 0x3 DUP3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x13B6 JUMPI POP PUSH1 0x0 DUP1 DUP1 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1424 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP DUP2 PUSH1 0x5 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND 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 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1494 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14B8 SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3535000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO PUSH2 0x1525 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP DUP2 PUSH1 0x6 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND 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 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1595 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15B9 SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3536000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO PUSH2 0x1626 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP PUSH1 0x4 DUP1 DUP4 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x18160DDD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 PUSH4 0x18160DDD SWAP3 DUP3 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1696 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16BA SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x16DB JUMPI POP PUSH1 0x8 DUP3 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3534000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x4CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH7 0x1000000000000 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x180D JUMPI PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x17E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x180A SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP5 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP8 PUSH3 0x10000 SWAP1 SWAP3 DIV AND SWAP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x189A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 SHL SHR PUSH1 0x3 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x191F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL DUP3 ADD SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x193D DUP6 PUSH2 0xFD1 JUMP JUMPDEST PUSH1 0x4 DUP7 DUP2 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 DUP8 SWAP3 PUSH2 0x19E3 SWAP3 DUP7 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1055 SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST PUSH2 0x19ED SWAP2 SWAP1 PUSH2 0x24DB JUMP JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 PUSH2 0x19FE JUMPI PUSH2 0x19FE PUSH2 0x2518 JUMP JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x8C5 JUMPI POP POP EQ SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x1A8D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x6 DUP4 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B13 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B37 SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x1B55 JUMPI PUSH2 0x1B52 PUSH2 0x1B4B DUP7 PUSH2 0x1DA6 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1061 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x5 DUP6 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BC7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1BEB SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST PUSH2 0x1BF5 SWAP1 DUP3 PUSH2 0x24C3 JUMP JUMPDEST SWAP1 POP PUSH2 0x1C01 DUP2 DUP6 PUSH2 0x24DB JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 PUSH2 0x1C12 JUMPI PUSH2 0x1C12 PUSH2 0x2518 JUMP JUMPDEST DIV SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1C52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH8 0xDE0B6B3A7640000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1C80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1CAB PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x2547 JUMP JUMPDEST PUSH2 0x1CB5 SWAP1 DUP6 PUSH2 0x24DB JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x1CD4 DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x24C3 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D1C JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x1D5B JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x1D95 JUMPI PUSH2 0x1D56 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x1CE3 JUMP JUMPDEST PUSH2 0x105B JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x1D8C JUMPI PUSH2 0x1D8C PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x1CE3 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x105B JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY POP POP PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x1DEC JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x8C5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x1055 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH1 0x0 PUSH2 0x8C5 DUP4 DUP4 TIMESTAMP PUSH1 0x0 DUP1 PUSH2 0x1E41 PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x2547 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1E5D JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x8C5 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x1E93 JUMPI PUSH1 0x0 PUSH2 0x1E98 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x1EAC DUP11 DUP1 PUSH2 0x1061 JUMP JUMPDEST DUP2 PUSH2 0x1EB9 JUMPI PUSH2 0x1EB9 PUSH2 0x2518 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x1ECB DUP4 DUP12 PUSH2 0x1061 JUMP JUMPDEST DUP2 PUSH2 0x1ED8 JUMPI PUSH2 0x1ED8 PUSH2 0x2518 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x1EE8 DUP7 DUP9 PUSH2 0x24DB JUMP JUMPDEST PUSH2 0x1EF2 SWAP2 SWAP1 PUSH2 0x24DB JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x1F06 DUP9 DUP11 PUSH2 0x24DB JUMP JUMPDEST PUSH2 0x1F10 SWAP2 SWAP1 PUSH2 0x24DB JUMP JUMPDEST PUSH2 0x1F1A SWAP2 SWAP1 PUSH2 0x24DB JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x1F31 DUP11 DUP16 PUSH2 0x24DB JUMP JUMPDEST PUSH2 0x1F3B SWAP2 SWAP1 PUSH2 0x255E JUMP JUMPDEST PUSH2 0x1F51 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x24C3 JUMP JUMPDEST PUSH2 0x1F5B SWAP2 SWAP1 PUSH2 0x24C3 JUMP JUMPDEST PUSH2 0x1F65 SWAP2 SWAP1 PUSH2 0x24C3 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1F98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1FB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH2 0x1FC0 PUSH1 0x20 DUP5 ADD PUSH2 0x1F74 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2013 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2013 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xE0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2013 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 DUP7 SUB PUSH2 0x100 DUP2 SLT ISZERO PUSH2 0x20C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 ADD PUSH1 0xA0 DUP2 SLT ISZERO PUSH2 0x2107 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x210F PUSH2 0x1FC9 JUMP JUMPDEST PUSH1 0x20 DUP3 SLT ISZERO PUSH2 0x211D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2125 PUSH2 0x2019 JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD DUP3 MSTORE DUP2 DUP2 MSTORE PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2147 PUSH1 0xA0 DUP9 ADD PUSH2 0x1F74 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x2158 PUSH1 0xC0 DUP9 ADD PUSH2 0x1F74 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xE0 DUP8 ADD CALLDATALOAD SWAP2 POP PUSH1 0xFF DUP3 AND DUP3 EQ PUSH2 0x2173 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x219B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x21BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x21CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x21DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x21F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x1F98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 DUP6 SUB PUSH2 0x120 DUP2 SLT ISZERO PUSH2 0x222E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0xE0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP3 ADD SLT ISZERO PUSH2 0x2269 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2272 PUSH2 0x2063 JUMP JUMPDEST PUSH2 0x227E PUSH1 0x40 DUP7 ADD PUSH2 0x1F74 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x228C PUSH1 0x60 DUP7 ADD PUSH2 0x1F74 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x229D PUSH1 0x80 DUP7 ADD PUSH2 0x1F74 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x22AE PUSH1 0xA0 DUP7 ADD PUSH2 0x1F74 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x22BF PUSH1 0xC0 DUP7 ADD PUSH2 0x1F74 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x22D0 PUSH1 0xE0 DUP7 ADD PUSH2 0x2205 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x22E2 PUSH2 0x100 DUP7 ADD PUSH2 0x2205 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2307 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2310 DUP5 PUSH2 0x1F74 JUMP JUMPDEST SWAP3 POP PUSH2 0x231E PUSH1 0x20 DUP6 ADD PUSH2 0x1F74 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2343 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH2 0x235A PUSH1 0x40 DUP6 ADD PUSH2 0x1F74 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2390 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x2374 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x23A2 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2417 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8C5 DUP3 PUSH2 0x1F74 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x2481 JUMPI PUSH2 0x2481 PUSH2 0x2420 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x24A0 JUMPI PUSH2 0x24A0 PUSH2 0x2420 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x24BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x24D6 JUMPI PUSH2 0x24D6 PUSH2 0x2420 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2513 JUMPI PUSH2 0x2513 PUSH2 0x2420 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x2559 JUMPI PUSH2 0x2559 PUSH2 0x2420 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2594 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALL SWAP15 0x28 0xCF DIFFICULTY 0xBD CALLER 0xC4 PUSH25 0x2C83497ED8E836316161E37483A0DBA26176C1D50596C96473 PUSH16 0x6C634300080A00330000000000000000 ","sourceMap":"863:6419:84:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;863:6419:84;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_getUserBalanceInBaseCurrency_15854":{"entryPoint":6449,"id":15854,"parameterSlots":4,"returnSlots":1},"@_getUserDebtInBaseCurrency_15811":{"entryPoint":6813,"id":15811,"parameterSlots":4,"returnSlots":1},"@calculateAvailableBorrows_15748":{"entryPoint":3997,"id":15748,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_21079":{"entryPoint":null,"id":21079,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_21097":{"entryPoint":null,"id":21097,"parameterSlots":2,"returnSlots":1},"@calculateLinearInterest_20956":{"entryPoint":7319,"id":20956,"parameterSlots":2,"returnSlots":1},"@calculateUserAccountData_15713":{"entryPoint":2611,"id":15713,"parameterSlots":4,"returnSlots":6},"@executeDropReserve_17558":{"entryPoint":2290,"id":17558,"parameterSlots":3,"returnSlots":0},"@executeGetUserAccountData_17616":{"entryPoint":688,"id":17616,"parameterSlots":4,"returnSlots":6},"@executeInitReserve_17360":{"entryPoint":1235,"id":17360,"parameterSlots":3,"returnSlots":1},"@executeMintToTreasury_17471":{"entryPoint":749,"id":17471,"parameterSlots":3,"returnSlots":0},"@executeRescueTokens_17379":{"entryPoint":2252,"id":17379,"parameterSlots":3,"returnSlots":0},"@executeResetIsolationModeTotalDebt_17508":{"entryPoint":376,"id":17508,"parameterSlots":2,"returnSlots":0},"@getActive_10983":{"entryPoint":null,"id":10983,"parameterSlots":1,"returnSlots":1},"@getDebtCeiling_11491":{"entryPoint":null,"id":11491,"parameterSlots":1,"returnSlots":1},"@getEModeConfiguration_14594":{"entryPoint":5961,"id":14594,"parameterSlots":2,"returnSlots":3},"@getLastTransferResult_117":{"entryPoint":7388,"id":117,"parameterSlots":1,"returnSlots":1},"@getNormalizedDebt_17751":{"entryPoint":7590,"id":17751,"parameterSlots":1,"returnSlots":1},"@getNormalizedIncome_17715":{"entryPoint":4049,"id":17715,"parameterSlots":1,"returnSlots":1},"@getParams_11823":{"entryPoint":null,"id":11823,"parameterSlots":1,"returnSlots":6},"@init_17908":{"entryPoint":4280,"id":17908,"parameterSlots":5,"returnSlots":0},"@isBorrowing_12045":{"entryPoint":6683,"id":12045,"parameterSlots":2,"returnSlots":1},"@isContract_445":{"entryPoint":null,"id":445,"parameterSlots":1,"returnSlots":1},"@isEmpty_12194":{"entryPoint":null,"id":12194,"parameterSlots":1,"returnSlots":1},"@isInEModeCategory_14614":{"entryPoint":6666,"id":14614,"parameterSlots":2,"returnSlots":1},"@isUsingAsCollateralOrBorrowing_12010":{"entryPoint":6184,"id":12010,"parameterSlots":2,"returnSlots":1},"@isUsingAsCollateral_12083":{"entryPoint":6317,"id":12083,"parameterSlots":2,"returnSlots":1},"@percentMul_21119":{"entryPoint":7197,"id":21119,"parameterSlots":2,"returnSlots":1},"@rayMul_21186":{"entryPoint":4193,"id":21186,"parameterSlots":2,"returnSlots":1},"@safeTransfer_78":{"entryPoint":4619,"id":78,"parameterSlots":3,"returnSlots":0},"@validateDropReserve_20694":{"entryPoint":4830,"id":20694,"parameterSlots":3,"returnSlots":0},"@wadDiv_21174":{"entryPoint":7264,"id":21174,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":8052,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":9221,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":8946,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_address":{"entryPoint":8093,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_array$_t_address_$dyn_calldata_ptr":{"entryPoint":8582,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_address":{"entryPoint":9006,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr":{"entryPoint":8365,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_struct$_InitReserveParams_$21632_memory_ptr":{"entryPoint":8727,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":9386,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint16":{"entryPoint":8709,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_rational_0_by_1__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":9059,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"allocate_memory":{"entryPoint":8217,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_1302":{"entryPoint":8137,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_1305":{"entryPoint":8291,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":9411,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":9566,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":9435,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":9543,"id":null,"parameterSlots":2,"returnSlots":1},"increment_t_uint16":{"entryPoint":9352,"id":null,"parameterSlots":1,"returnSlots":1},"increment_t_uint256":{"entryPoint":9295,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":9248,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":9496,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":9174,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:10504:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:147:201","statements":[{"nodeType":"YulAssignment","src":"73:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:201"},"nodeType":"YulFunctionCall","src":"82:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:201"}]},{"body":{"nodeType":"YulBlock","src":"188:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"197:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"200:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"190:6:201"},"nodeType":"YulFunctionCall","src":"190:12:201"},"nodeType":"YulExpressionStatement","src":"190:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"142:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:201"},"nodeType":"YulFunctionCall","src":"131:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:201"},"nodeType":"YulFunctionCall","src":"121:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:201"},"nodeType":"YulFunctionCall","src":"114:73:201"},"nodeType":"YulIf","src":"111:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:201","type":""}],"src":"14:196:201"},{"body":{"nodeType":"YulBlock","src":"354:167:201","statements":[{"body":{"nodeType":"YulBlock","src":"400:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"409:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"412:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"402:6:201"},"nodeType":"YulFunctionCall","src":"402:12:201"},"nodeType":"YulExpressionStatement","src":"402:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"375:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"384:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"371:3:201"},"nodeType":"YulFunctionCall","src":"371:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"396:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"367:3:201"},"nodeType":"YulFunctionCall","src":"367:32:201"},"nodeType":"YulIf","src":"364:52:201"},{"nodeType":"YulAssignment","src":"425:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"448:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"435:12:201"},"nodeType":"YulFunctionCall","src":"435:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"425:6:201"}]},{"nodeType":"YulAssignment","src":"467:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"500:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"511:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"496:3:201"},"nodeType":"YulFunctionCall","src":"496:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"477:18:201"},"nodeType":"YulFunctionCall","src":"477:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"467:6:201"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"312:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"323:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"335:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"343:6:201","type":""}],"src":"215:306:201"},{"body":{"nodeType":"YulBlock","src":"572:361:201","statements":[{"nodeType":"YulAssignment","src":"582:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"598:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"592:5:201"},"nodeType":"YulFunctionCall","src":"592:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"582:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"610:35:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"632:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"640:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"628:3:201"},"nodeType":"YulFunctionCall","src":"628:17:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"614:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"728:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"749:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"752:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"742:6:201"},"nodeType":"YulFunctionCall","src":"742:88:201"},"nodeType":"YulExpressionStatement","src":"742:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"850:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"853:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"843:6:201"},"nodeType":"YulFunctionCall","src":"843:15:201"},"nodeType":"YulExpressionStatement","src":"843:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"878:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"881:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"871:6:201"},"nodeType":"YulFunctionCall","src":"871:15:201"},"nodeType":"YulExpressionStatement","src":"871:15:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"663:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"675:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"660:2:201"},"nodeType":"YulFunctionCall","src":"660:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"699:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"711:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"696:2:201"},"nodeType":"YulFunctionCall","src":"696:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"657:2:201"},"nodeType":"YulFunctionCall","src":"657:62:201"},"nodeType":"YulIf","src":"654:242:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"912:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"916:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"905:6:201"},"nodeType":"YulFunctionCall","src":"905:22:201"},"nodeType":"YulExpressionStatement","src":"905:22:201"}]},"name":"allocate_memory_1302","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"561:6:201","type":""}],"src":"526:407:201"},{"body":{"nodeType":"YulBlock","src":"979:359:201","statements":[{"nodeType":"YulAssignment","src":"989:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1005:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"999:5:201"},"nodeType":"YulFunctionCall","src":"999:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"989:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1017:33:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1039:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1047:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1035:3:201"},"nodeType":"YulFunctionCall","src":"1035:15:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1021:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1133:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1154:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1157:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1147:6:201"},"nodeType":"YulFunctionCall","src":"1147:88:201"},"nodeType":"YulExpressionStatement","src":"1147:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1255:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1258:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1248:6:201"},"nodeType":"YulFunctionCall","src":"1248:15:201"},"nodeType":"YulExpressionStatement","src":"1248:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1283:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1286:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1276:6:201"},"nodeType":"YulFunctionCall","src":"1276:15:201"},"nodeType":"YulExpressionStatement","src":"1276:15:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1068:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"1080:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1065:2:201"},"nodeType":"YulFunctionCall","src":"1065:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1104:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1116:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1101:2:201"},"nodeType":"YulFunctionCall","src":"1101:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1062:2:201"},"nodeType":"YulFunctionCall","src":"1062:62:201"},"nodeType":"YulIf","src":"1059:242:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1317:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1321:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1310:6:201"},"nodeType":"YulFunctionCall","src":"1310:22:201"},"nodeType":"YulExpressionStatement","src":"1310:22:201"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"968:6:201","type":""}],"src":"938:400:201"},{"body":{"nodeType":"YulBlock","src":"1389:361:201","statements":[{"nodeType":"YulAssignment","src":"1399:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1415:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1409:5:201"},"nodeType":"YulFunctionCall","src":"1409:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1399:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1427:35:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1449:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1457:4:201","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1445:3:201"},"nodeType":"YulFunctionCall","src":"1445:17:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1431:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1545:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1566:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1569:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1559:6:201"},"nodeType":"YulFunctionCall","src":"1559:88:201"},"nodeType":"YulExpressionStatement","src":"1559:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1667:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1670:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1660:6:201"},"nodeType":"YulFunctionCall","src":"1660:15:201"},"nodeType":"YulExpressionStatement","src":"1660:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1695:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1698:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1688:6:201"},"nodeType":"YulFunctionCall","src":"1688:15:201"},"nodeType":"YulExpressionStatement","src":"1688:15:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1480:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"1492:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1477:2:201"},"nodeType":"YulFunctionCall","src":"1477:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1516:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1528:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1513:2:201"},"nodeType":"YulFunctionCall","src":"1513:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1474:2:201"},"nodeType":"YulFunctionCall","src":"1474:62:201"},"nodeType":"YulIf","src":"1471:242:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1729:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1733:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1722:6:201"},"nodeType":"YulFunctionCall","src":"1722:22:201"},"nodeType":"YulExpressionStatement","src":"1722:22:201"}]},"name":"allocate_memory_1305","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1378:6:201","type":""}],"src":"1343:407:201"},{"body":{"nodeType":"YulBlock","src":"2054:985:201","statements":[{"nodeType":"YulVariableDeclaration","src":"2064:33:201","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2078:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2087:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2074:3:201"},"nodeType":"YulFunctionCall","src":"2074:23:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2068:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2122:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2131:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2134:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2124:6:201"},"nodeType":"YulFunctionCall","src":"2124:12:201"},"nodeType":"YulExpressionStatement","src":"2124:12:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2113:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"2117:3:201","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2109:3:201"},"nodeType":"YulFunctionCall","src":"2109:12:201"},"nodeType":"YulIf","src":"2106:32:201"},{"nodeType":"YulAssignment","src":"2147:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2170:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2157:12:201"},"nodeType":"YulFunctionCall","src":"2157:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2147:6:201"}]},{"nodeType":"YulAssignment","src":"2189:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2216:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2227:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2212:3:201"},"nodeType":"YulFunctionCall","src":"2212:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2199:12:201"},"nodeType":"YulFunctionCall","src":"2199:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2189:6:201"}]},{"nodeType":"YulAssignment","src":"2240:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2267:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2278:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2263:3:201"},"nodeType":"YulFunctionCall","src":"2263:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2250:12:201"},"nodeType":"YulFunctionCall","src":"2250:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2240:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2291:85:201","value":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2305:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"2309:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2301:3:201"},"nodeType":"YulFunctionCall","src":"2301:75:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"2295:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2402:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2411:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2414:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2404:6:201"},"nodeType":"YulFunctionCall","src":"2404:12:201"},"nodeType":"YulExpressionStatement","src":"2404:12:201"}]},"condition":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2392:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"2396:4:201","type":"","value":"0xa0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2388:3:201"},"nodeType":"YulFunctionCall","src":"2388:13:201"},"nodeType":"YulIf","src":"2385:33:201"},{"nodeType":"YulVariableDeclaration","src":"2427:35:201","value":{"arguments":[],"functionName":{"name":"allocate_memory_1302","nodeType":"YulIdentifier","src":"2440:20:201"},"nodeType":"YulFunctionCall","src":"2440:22:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2431:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2486:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2495:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2498:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2488:6:201"},"nodeType":"YulFunctionCall","src":"2488:12:201"},"nodeType":"YulExpressionStatement","src":"2488:12:201"}]},"condition":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"2478:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"2482:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2474:3:201"},"nodeType":"YulFunctionCall","src":"2474:11:201"},"nodeType":"YulIf","src":"2471:31:201"},{"nodeType":"YulVariableDeclaration","src":"2511:32:201","value":{"arguments":[],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"2526:15:201"},"nodeType":"YulFunctionCall","src":"2526:17:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2515:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2559:7:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2585:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2596:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2581:3:201"},"nodeType":"YulFunctionCall","src":"2581:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2568:12:201"},"nodeType":"YulFunctionCall","src":"2568:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2552:6:201"},"nodeType":"YulFunctionCall","src":"2552:49:201"},"nodeType":"YulExpressionStatement","src":"2552:49:201"},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2617:5:201"},{"name":"value_1","nodeType":"YulIdentifier","src":"2624:7:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2610:6:201"},"nodeType":"YulFunctionCall","src":"2610:22:201"},"nodeType":"YulExpressionStatement","src":"2610:22:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2652:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2659:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2648:3:201"},"nodeType":"YulFunctionCall","src":"2648:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2681:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2692:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2677:3:201"},"nodeType":"YulFunctionCall","src":"2677:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2664:12:201"},"nodeType":"YulFunctionCall","src":"2664:33:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2641:6:201"},"nodeType":"YulFunctionCall","src":"2641:57:201"},"nodeType":"YulExpressionStatement","src":"2641:57:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2718:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2725:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2714:3:201"},"nodeType":"YulFunctionCall","src":"2714:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2753:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2764:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2749:3:201"},"nodeType":"YulFunctionCall","src":"2749:20:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2730:18:201"},"nodeType":"YulFunctionCall","src":"2730:40:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2707:6:201"},"nodeType":"YulFunctionCall","src":"2707:64:201"},"nodeType":"YulExpressionStatement","src":"2707:64:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2791:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2798:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2787:3:201"},"nodeType":"YulFunctionCall","src":"2787:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2826:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2837:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2822:3:201"},"nodeType":"YulFunctionCall","src":"2822:19:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2803:18:201"},"nodeType":"YulFunctionCall","src":"2803:39:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2780:6:201"},"nodeType":"YulFunctionCall","src":"2780:63:201"},"nodeType":"YulExpressionStatement","src":"2780:63:201"},{"nodeType":"YulVariableDeclaration","src":"2852:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2884:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2895:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2880:3:201"},"nodeType":"YulFunctionCall","src":"2880:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2867:12:201"},"nodeType":"YulFunctionCall","src":"2867:33:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"2856:7:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2952:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2961:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2964:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2954:6:201"},"nodeType":"YulFunctionCall","src":"2954:12:201"},"nodeType":"YulExpressionStatement","src":"2954:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"2922:7:201"},{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"2935:7:201"},{"kind":"number","nodeType":"YulLiteral","src":"2944:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2931:3:201"},"nodeType":"YulFunctionCall","src":"2931:18:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2919:2:201"},"nodeType":"YulFunctionCall","src":"2919:31:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2912:6:201"},"nodeType":"YulFunctionCall","src":"2912:39:201"},"nodeType":"YulIf","src":"2909:59:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2988:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2995:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2984:3:201"},"nodeType":"YulFunctionCall","src":"2984:15:201"},{"name":"value_2","nodeType":"YulIdentifier","src":"3001:7:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2977:6:201"},"nodeType":"YulFunctionCall","src":"2977:32:201"},"nodeType":"YulExpressionStatement","src":"2977:32:201"},{"nodeType":"YulAssignment","src":"3018:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3028:5:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3018:6:201"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1996:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2007:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2019:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2027:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2035:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2043:6:201","type":""}],"src":"1755:1284:201"},{"body":{"nodeType":"YulBlock","src":"3293:294:201","statements":[{"nodeType":"YulAssignment","src":"3303:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3315:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3326:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3311:3:201"},"nodeType":"YulFunctionCall","src":"3311:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3303:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3346:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"3357:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3339:6:201"},"nodeType":"YulFunctionCall","src":"3339:25:201"},"nodeType":"YulExpressionStatement","src":"3339:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3384:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3395:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3380:3:201"},"nodeType":"YulFunctionCall","src":"3380:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"3400:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3373:6:201"},"nodeType":"YulFunctionCall","src":"3373:34:201"},"nodeType":"YulExpressionStatement","src":"3373:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3427:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3438:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3423:3:201"},"nodeType":"YulFunctionCall","src":"3423:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"3443:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3416:6:201"},"nodeType":"YulFunctionCall","src":"3416:34:201"},"nodeType":"YulExpressionStatement","src":"3416:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3470:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3481:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3466:3:201"},"nodeType":"YulFunctionCall","src":"3466:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"3486:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3459:6:201"},"nodeType":"YulFunctionCall","src":"3459:34:201"},"nodeType":"YulExpressionStatement","src":"3459:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3513:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3524:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3509:3:201"},"nodeType":"YulFunctionCall","src":"3509:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"3530:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3502:6:201"},"nodeType":"YulFunctionCall","src":"3502:35:201"},"nodeType":"YulExpressionStatement","src":"3502:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3557:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3568:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3553:3:201"},"nodeType":"YulFunctionCall","src":"3553:19:201"},{"name":"value5","nodeType":"YulIdentifier","src":"3574:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3546:6:201"},"nodeType":"YulFunctionCall","src":"3546:35:201"},"nodeType":"YulExpressionStatement","src":"3546:35:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3222:9:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"3233:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3241:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3249:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3257:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3265:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3273:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3284:4:201","type":""}],"src":"3044:543:201"},{"body":{"nodeType":"YulBlock","src":"3766:561:201","statements":[{"body":{"nodeType":"YulBlock","src":"3812:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3821:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3824:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3814:6:201"},"nodeType":"YulFunctionCall","src":"3814:12:201"},"nodeType":"YulExpressionStatement","src":"3814:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3787:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3796:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3783:3:201"},"nodeType":"YulFunctionCall","src":"3783:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3808:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3779:3:201"},"nodeType":"YulFunctionCall","src":"3779:32:201"},"nodeType":"YulIf","src":"3776:52:201"},{"nodeType":"YulAssignment","src":"3837:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3860:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3847:12:201"},"nodeType":"YulFunctionCall","src":"3847:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3837:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3879:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3910:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3921:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3906:3:201"},"nodeType":"YulFunctionCall","src":"3906:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3893:12:201"},"nodeType":"YulFunctionCall","src":"3893:32:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"3883:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3934:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3944:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3938:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3989:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3998:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4001:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3991:6:201"},"nodeType":"YulFunctionCall","src":"3991:12:201"},"nodeType":"YulExpressionStatement","src":"3991:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3977:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3985:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3974:2:201"},"nodeType":"YulFunctionCall","src":"3974:14:201"},"nodeType":"YulIf","src":"3971:34:201"},{"nodeType":"YulVariableDeclaration","src":"4014:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4028:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"4039:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4024:3:201"},"nodeType":"YulFunctionCall","src":"4024:22:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"4018:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4094:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4103:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4106:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4096:6:201"},"nodeType":"YulFunctionCall","src":"4096:12:201"},"nodeType":"YulExpressionStatement","src":"4096:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4073:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"4077:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4069:3:201"},"nodeType":"YulFunctionCall","src":"4069:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4084:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4065:3:201"},"nodeType":"YulFunctionCall","src":"4065:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4058:6:201"},"nodeType":"YulFunctionCall","src":"4058:35:201"},"nodeType":"YulIf","src":"4055:55:201"},{"nodeType":"YulVariableDeclaration","src":"4119:30:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4146:2:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4133:12:201"},"nodeType":"YulFunctionCall","src":"4133:16:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"4123:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4176:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4185:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4188:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4178:6:201"},"nodeType":"YulFunctionCall","src":"4178:12:201"},"nodeType":"YulExpressionStatement","src":"4178:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4164:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4172:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4161:2:201"},"nodeType":"YulFunctionCall","src":"4161:14:201"},"nodeType":"YulIf","src":"4158:34:201"},{"body":{"nodeType":"YulBlock","src":"4250:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4259:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4262:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4252:6:201"},"nodeType":"YulFunctionCall","src":"4252:12:201"},"nodeType":"YulExpressionStatement","src":"4252:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4215:2:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4223:1:201","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"4226:6:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4219:3:201"},"nodeType":"YulFunctionCall","src":"4219:14:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4211:3:201"},"nodeType":"YulFunctionCall","src":"4211:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4236:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4207:3:201"},"nodeType":"YulFunctionCall","src":"4207:32:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4241:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4204:2:201"},"nodeType":"YulFunctionCall","src":"4204:45:201"},"nodeType":"YulIf","src":"4201:65:201"},{"nodeType":"YulAssignment","src":"4275:21:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4289:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"4293:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4285:3:201"},"nodeType":"YulFunctionCall","src":"4285:11:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4275:6:201"}]},{"nodeType":"YulAssignment","src":"4305:16:201","value":{"name":"length","nodeType":"YulIdentifier","src":"4315:6:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4305:6:201"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_array$_t_address_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3716:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3727:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3739:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3747:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3755:6:201","type":""}],"src":"3592:735:201"},{"body":{"nodeType":"YulBlock","src":"4380:111:201","statements":[{"nodeType":"YulAssignment","src":"4390:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4412:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4399:12:201"},"nodeType":"YulFunctionCall","src":"4399:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"4390:5:201"}]},{"body":{"nodeType":"YulBlock","src":"4469:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4478:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4481:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4471:6:201"},"nodeType":"YulFunctionCall","src":"4471:12:201"},"nodeType":"YulExpressionStatement","src":"4471:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4441:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4452:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"4459:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4448:3:201"},"nodeType":"YulFunctionCall","src":"4448:18:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4438:2:201"},"nodeType":"YulFunctionCall","src":"4438:29:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4431:6:201"},"nodeType":"YulFunctionCall","src":"4431:37:201"},"nodeType":"YulIf","src":"4428:57:201"}]},"name":"abi_decode_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"4359:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"4370:5:201","type":""}],"src":"4332:159:201"},{"body":{"nodeType":"YulBlock","src":"4713:861:201","statements":[{"nodeType":"YulVariableDeclaration","src":"4723:33:201","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4737:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4746:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4733:3:201"},"nodeType":"YulFunctionCall","src":"4733:23:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4727:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4781:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4790:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4793:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4783:6:201"},"nodeType":"YulFunctionCall","src":"4783:12:201"},"nodeType":"YulExpressionStatement","src":"4783:12:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"4772:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"4776:3:201","type":"","value":"288"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4768:3:201"},"nodeType":"YulFunctionCall","src":"4768:12:201"},"nodeType":"YulIf","src":"4765:32:201"},{"nodeType":"YulAssignment","src":"4806:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4829:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4816:12:201"},"nodeType":"YulFunctionCall","src":"4816:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4806:6:201"}]},{"nodeType":"YulAssignment","src":"4848:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4875:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4886:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4871:3:201"},"nodeType":"YulFunctionCall","src":"4871:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4858:12:201"},"nodeType":"YulFunctionCall","src":"4858:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4848:6:201"}]},{"body":{"nodeType":"YulBlock","src":"4989:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4998:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5001:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4991:6:201"},"nodeType":"YulFunctionCall","src":"4991:12:201"},"nodeType":"YulExpressionStatement","src":"4991:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"4910:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"4914:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4906:3:201"},"nodeType":"YulFunctionCall","src":"4906:75:201"},{"kind":"number","nodeType":"YulLiteral","src":"4983:4:201","type":"","value":"0xe0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4902:3:201"},"nodeType":"YulFunctionCall","src":"4902:86:201"},"nodeType":"YulIf","src":"4899:106:201"},{"nodeType":"YulVariableDeclaration","src":"5014:35:201","value":{"arguments":[],"functionName":{"name":"allocate_memory_1305","nodeType":"YulIdentifier","src":"5027:20:201"},"nodeType":"YulFunctionCall","src":"5027:22:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5018:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5065:5:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5095:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5106:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5091:3:201"},"nodeType":"YulFunctionCall","src":"5091:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5072:18:201"},"nodeType":"YulFunctionCall","src":"5072:38:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5058:6:201"},"nodeType":"YulFunctionCall","src":"5058:53:201"},"nodeType":"YulExpressionStatement","src":"5058:53:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5131:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5138:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5127:3:201"},"nodeType":"YulFunctionCall","src":"5127:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5166:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5177:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5162:3:201"},"nodeType":"YulFunctionCall","src":"5162:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5143:18:201"},"nodeType":"YulFunctionCall","src":"5143:38:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5120:6:201"},"nodeType":"YulFunctionCall","src":"5120:62:201"},"nodeType":"YulExpressionStatement","src":"5120:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5202:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5209:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5198:3:201"},"nodeType":"YulFunctionCall","src":"5198:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5237:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5248:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5233:3:201"},"nodeType":"YulFunctionCall","src":"5233:19:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5214:18:201"},"nodeType":"YulFunctionCall","src":"5214:39:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5191:6:201"},"nodeType":"YulFunctionCall","src":"5191:63:201"},"nodeType":"YulExpressionStatement","src":"5191:63:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5274:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5281:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5270:3:201"},"nodeType":"YulFunctionCall","src":"5270:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5309:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5320:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5305:3:201"},"nodeType":"YulFunctionCall","src":"5305:19:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5286:18:201"},"nodeType":"YulFunctionCall","src":"5286:39:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5263:6:201"},"nodeType":"YulFunctionCall","src":"5263:63:201"},"nodeType":"YulExpressionStatement","src":"5263:63:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5346:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5353:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5342:3:201"},"nodeType":"YulFunctionCall","src":"5342:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5382:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5393:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5378:3:201"},"nodeType":"YulFunctionCall","src":"5378:19:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5359:18:201"},"nodeType":"YulFunctionCall","src":"5359:39:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5335:6:201"},"nodeType":"YulFunctionCall","src":"5335:64:201"},"nodeType":"YulExpressionStatement","src":"5335:64:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5419:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5426:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5415:3:201"},"nodeType":"YulFunctionCall","src":"5415:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5454:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5465:4:201","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5450:3:201"},"nodeType":"YulFunctionCall","src":"5450:20:201"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"5432:17:201"},"nodeType":"YulFunctionCall","src":"5432:39:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5408:6:201"},"nodeType":"YulFunctionCall","src":"5408:64:201"},"nodeType":"YulExpressionStatement","src":"5408:64:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5492:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5499:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5488:3:201"},"nodeType":"YulFunctionCall","src":"5488:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5527:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5538:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5523:3:201"},"nodeType":"YulFunctionCall","src":"5523:19:201"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"5505:17:201"},"nodeType":"YulFunctionCall","src":"5505:38:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5481:6:201"},"nodeType":"YulFunctionCall","src":"5481:63:201"},"nodeType":"YulExpressionStatement","src":"5481:63:201"},{"nodeType":"YulAssignment","src":"5553:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"5563:5:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5553:6:201"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_struct$_InitReserveParams_$21632_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4663:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4674:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4686:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4694:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4702:6:201","type":""}],"src":"4496:1078:201"},{"body":{"nodeType":"YulBlock","src":"5682:92:201","statements":[{"nodeType":"YulAssignment","src":"5692:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5704:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5715:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5700:3:201"},"nodeType":"YulFunctionCall","src":"5700:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5692:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5734:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5759:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5752:6:201"},"nodeType":"YulFunctionCall","src":"5752:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5745:6:201"},"nodeType":"YulFunctionCall","src":"5745:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5727:6:201"},"nodeType":"YulFunctionCall","src":"5727:41:201"},"nodeType":"YulExpressionStatement","src":"5727:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5651:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5662:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5673:4:201","type":""}],"src":"5579:195:201"},{"body":{"nodeType":"YulBlock","src":"5883:224:201","statements":[{"body":{"nodeType":"YulBlock","src":"5929:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5938:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5941:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5931:6:201"},"nodeType":"YulFunctionCall","src":"5931:12:201"},"nodeType":"YulExpressionStatement","src":"5931:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5904:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"5913:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5900:3:201"},"nodeType":"YulFunctionCall","src":"5900:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"5925:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5896:3:201"},"nodeType":"YulFunctionCall","src":"5896:32:201"},"nodeType":"YulIf","src":"5893:52:201"},{"nodeType":"YulAssignment","src":"5954:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5983:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5964:18:201"},"nodeType":"YulFunctionCall","src":"5964:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5954:6:201"}]},{"nodeType":"YulAssignment","src":"6002:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6035:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6046:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6031:3:201"},"nodeType":"YulFunctionCall","src":"6031:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"6012:18:201"},"nodeType":"YulFunctionCall","src":"6012:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6002:6:201"}]},{"nodeType":"YulAssignment","src":"6059:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6086:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6097:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6082:3:201"},"nodeType":"YulFunctionCall","src":"6082:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6069:12:201"},"nodeType":"YulFunctionCall","src":"6069:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6059:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5833:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5844:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5856:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5864:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5872:6:201","type":""}],"src":"5779:328:201"},{"body":{"nodeType":"YulBlock","src":"6293:218:201","statements":[{"body":{"nodeType":"YulBlock","src":"6339:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6348:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6351:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6341:6:201"},"nodeType":"YulFunctionCall","src":"6341:12:201"},"nodeType":"YulExpressionStatement","src":"6341:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6314:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6323:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6310:3:201"},"nodeType":"YulFunctionCall","src":"6310:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"6335:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6306:3:201"},"nodeType":"YulFunctionCall","src":"6306:32:201"},"nodeType":"YulIf","src":"6303:52:201"},{"nodeType":"YulAssignment","src":"6364:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6387:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6374:12:201"},"nodeType":"YulFunctionCall","src":"6374:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6364:6:201"}]},{"nodeType":"YulAssignment","src":"6406:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6433:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6444:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6429:3:201"},"nodeType":"YulFunctionCall","src":"6429:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6416:12:201"},"nodeType":"YulFunctionCall","src":"6416:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6406:6:201"}]},{"nodeType":"YulAssignment","src":"6457:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6490:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6501:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6486:3:201"},"nodeType":"YulFunctionCall","src":"6486:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"6467:18:201"},"nodeType":"YulFunctionCall","src":"6467:38:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6457:6:201"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6243:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6254:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6266:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6274:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6282:6:201","type":""}],"src":"6112:399:201"},{"body":{"nodeType":"YulBlock","src":"6637:535:201","statements":[{"nodeType":"YulVariableDeclaration","src":"6647:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6657:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6651:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6675:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6686:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6668:6:201"},"nodeType":"YulFunctionCall","src":"6668:21:201"},"nodeType":"YulExpressionStatement","src":"6668:21:201"},{"nodeType":"YulVariableDeclaration","src":"6698:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6718:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6712:5:201"},"nodeType":"YulFunctionCall","src":"6712:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"6702:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6745:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6756:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6741:3:201"},"nodeType":"YulFunctionCall","src":"6741:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"6761:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6734:6:201"},"nodeType":"YulFunctionCall","src":"6734:34:201"},"nodeType":"YulExpressionStatement","src":"6734:34:201"},{"nodeType":"YulVariableDeclaration","src":"6777:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6786:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"6781:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"6846:90:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6875:9:201"},{"name":"i","nodeType":"YulIdentifier","src":"6886:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6871:3:201"},"nodeType":"YulFunctionCall","src":"6871:17:201"},{"kind":"number","nodeType":"YulLiteral","src":"6890:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6867:3:201"},"nodeType":"YulFunctionCall","src":"6867:26:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6909:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"6917:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6905:3:201"},"nodeType":"YulFunctionCall","src":"6905:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6921:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6901:3:201"},"nodeType":"YulFunctionCall","src":"6901:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6895:5:201"},"nodeType":"YulFunctionCall","src":"6895:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6860:6:201"},"nodeType":"YulFunctionCall","src":"6860:66:201"},"nodeType":"YulExpressionStatement","src":"6860:66:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6807:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"6810:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6804:2:201"},"nodeType":"YulFunctionCall","src":"6804:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"6818:19:201","statements":[{"nodeType":"YulAssignment","src":"6820:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6829:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6832:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6825:3:201"},"nodeType":"YulFunctionCall","src":"6825:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"6820:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"6800:3:201","statements":[]},"src":"6796:140:201"},{"body":{"nodeType":"YulBlock","src":"6970:66:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6999:9:201"},{"name":"length","nodeType":"YulIdentifier","src":"7010:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6995:3:201"},"nodeType":"YulFunctionCall","src":"6995:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"7019:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6991:3:201"},"nodeType":"YulFunctionCall","src":"6991:31:201"},{"kind":"number","nodeType":"YulLiteral","src":"7024:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6984:6:201"},"nodeType":"YulFunctionCall","src":"6984:42:201"},"nodeType":"YulExpressionStatement","src":"6984:42:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6951:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"6954:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6948:2:201"},"nodeType":"YulFunctionCall","src":"6948:13:201"},"nodeType":"YulIf","src":"6945:91:201"},{"nodeType":"YulAssignment","src":"7045:121:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7061:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"7080:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7088:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7076:3:201"},"nodeType":"YulFunctionCall","src":"7076:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"7093:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7072:3:201"},"nodeType":"YulFunctionCall","src":"7072:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7057:3:201"},"nodeType":"YulFunctionCall","src":"7057:104:201"},{"kind":"number","nodeType":"YulLiteral","src":"7163:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7053:3:201"},"nodeType":"YulFunctionCall","src":"7053:113:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7045:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6606:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6617:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6628:4:201","type":""}],"src":"6516:656:201"},{"body":{"nodeType":"YulBlock","src":"7286:76:201","statements":[{"nodeType":"YulAssignment","src":"7296:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7308:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7319:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7304:3:201"},"nodeType":"YulFunctionCall","src":"7304:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7296:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7338:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"7349:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7331:6:201"},"nodeType":"YulFunctionCall","src":"7331:25:201"},"nodeType":"YulExpressionStatement","src":"7331:25:201"}]},"name":"abi_encode_tuple_t_rational_0_by_1__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7255:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7266:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7277:4:201","type":""}],"src":"7177:185:201"},{"body":{"nodeType":"YulBlock","src":"7399:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7416:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7419:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7409:6:201"},"nodeType":"YulFunctionCall","src":"7409:88:201"},"nodeType":"YulExpressionStatement","src":"7409:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7513:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7516:4:201","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7506:6:201"},"nodeType":"YulFunctionCall","src":"7506:15:201"},"nodeType":"YulExpressionStatement","src":"7506:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7537:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7540:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7530:6:201"},"nodeType":"YulFunctionCall","src":"7530:15:201"},"nodeType":"YulExpressionStatement","src":"7530:15:201"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"7367:184:201"},{"body":{"nodeType":"YulBlock","src":"7626:116:201","statements":[{"body":{"nodeType":"YulBlock","src":"7672:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7681:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7684:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7674:6:201"},"nodeType":"YulFunctionCall","src":"7674:12:201"},"nodeType":"YulExpressionStatement","src":"7674:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7647:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"7656:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7643:3:201"},"nodeType":"YulFunctionCall","src":"7643:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"7668:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7639:3:201"},"nodeType":"YulFunctionCall","src":"7639:32:201"},"nodeType":"YulIf","src":"7636:52:201"},{"nodeType":"YulAssignment","src":"7697:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7726:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"7707:18:201"},"nodeType":"YulFunctionCall","src":"7707:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7697:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7592:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7603:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7615:6:201","type":""}],"src":"7556:186:201"},{"body":{"nodeType":"YulBlock","src":"7876:119:201","statements":[{"nodeType":"YulAssignment","src":"7886:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7898:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7909:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7894:3:201"},"nodeType":"YulFunctionCall","src":"7894:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7886:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7928:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"7939:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7921:6:201"},"nodeType":"YulFunctionCall","src":"7921:25:201"},"nodeType":"YulExpressionStatement","src":"7921:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7966:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7977:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7962:3:201"},"nodeType":"YulFunctionCall","src":"7962:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"7982:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7955:6:201"},"nodeType":"YulFunctionCall","src":"7955:34:201"},"nodeType":"YulExpressionStatement","src":"7955:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7837:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7848:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7856:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7867:4:201","type":""}],"src":"7747:248:201"},{"body":{"nodeType":"YulBlock","src":"8101:76:201","statements":[{"nodeType":"YulAssignment","src":"8111:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8123:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8134:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8119:3:201"},"nodeType":"YulFunctionCall","src":"8119:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8111:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8153:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"8164:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8146:6:201"},"nodeType":"YulFunctionCall","src":"8146:25:201"},"nodeType":"YulExpressionStatement","src":"8146:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8070:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8081:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8092:4:201","type":""}],"src":"8000:177:201"},{"body":{"nodeType":"YulBlock","src":"8214:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8231:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8234:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8224:6:201"},"nodeType":"YulFunctionCall","src":"8224:88:201"},"nodeType":"YulExpressionStatement","src":"8224:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8328:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"8331:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8321:6:201"},"nodeType":"YulFunctionCall","src":"8321:15:201"},"nodeType":"YulExpressionStatement","src":"8321:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8352:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8355:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8345:6:201"},"nodeType":"YulFunctionCall","src":"8345:15:201"},"nodeType":"YulExpressionStatement","src":"8345:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"8182:184:201"},{"body":{"nodeType":"YulBlock","src":"8418:148:201","statements":[{"body":{"nodeType":"YulBlock","src":"8509:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"8511:16:201"},"nodeType":"YulFunctionCall","src":"8511:18:201"},"nodeType":"YulExpressionStatement","src":"8511:18:201"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8434:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"8441:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8431:2:201"},"nodeType":"YulFunctionCall","src":"8431:77:201"},"nodeType":"YulIf","src":"8428:103:201"},{"nodeType":"YulAssignment","src":"8540:20:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8551:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"8558:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8547:3:201"},"nodeType":"YulFunctionCall","src":"8547:13:201"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"8540:3:201"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"8400:5:201","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"8410:3:201","type":""}],"src":"8371:195:201"},{"body":{"nodeType":"YulBlock","src":"8617:151:201","statements":[{"nodeType":"YulVariableDeclaration","src":"8627:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8637:6:201","type":"","value":"0xffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8631:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8652:29:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8671:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"8678:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8667:3:201"},"nodeType":"YulFunctionCall","src":"8667:14:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"8656:7:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"8709:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"8711:16:201"},"nodeType":"YulFunctionCall","src":"8711:18:201"},"nodeType":"YulExpressionStatement","src":"8711:18:201"}]},"condition":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"8696:7:201"},{"name":"_1","nodeType":"YulIdentifier","src":"8705:2:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8693:2:201"},"nodeType":"YulFunctionCall","src":"8693:15:201"},"nodeType":"YulIf","src":"8690:41:201"},{"nodeType":"YulAssignment","src":"8740:22:201","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"8751:7:201"},{"kind":"number","nodeType":"YulLiteral","src":"8760:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8747:3:201"},"nodeType":"YulFunctionCall","src":"8747:15:201"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"8740:3:201"}]}]},"name":"increment_t_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"8599:5:201","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"8609:3:201","type":""}],"src":"8571:197:201"},{"body":{"nodeType":"YulBlock","src":"8874:125:201","statements":[{"nodeType":"YulAssignment","src":"8884:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8896:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8907:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8892:3:201"},"nodeType":"YulFunctionCall","src":"8892:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8884:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8926:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8941:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8949:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8937:3:201"},"nodeType":"YulFunctionCall","src":"8937:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8919:6:201"},"nodeType":"YulFunctionCall","src":"8919:74:201"},"nodeType":"YulExpressionStatement","src":"8919:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8843:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8854:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8865:4:201","type":""}],"src":"8773:226:201"},{"body":{"nodeType":"YulBlock","src":"9085:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"9131:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9140:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9143:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9133:6:201"},"nodeType":"YulFunctionCall","src":"9133:12:201"},"nodeType":"YulExpressionStatement","src":"9133:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9106:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"9115:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9102:3:201"},"nodeType":"YulFunctionCall","src":"9102:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"9127:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9098:3:201"},"nodeType":"YulFunctionCall","src":"9098:32:201"},"nodeType":"YulIf","src":"9095:52:201"},{"nodeType":"YulAssignment","src":"9156:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9172:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9166:5:201"},"nodeType":"YulFunctionCall","src":"9166:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9156:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9051:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9062:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9074:6:201","type":""}],"src":"9004:184:201"},{"body":{"nodeType":"YulBlock","src":"9241:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"9268:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"9270:16:201"},"nodeType":"YulFunctionCall","src":"9270:18:201"},"nodeType":"YulExpressionStatement","src":"9270:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9257:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"9264:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"9260:3:201"},"nodeType":"YulFunctionCall","src":"9260:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9254:2:201"},"nodeType":"YulFunctionCall","src":"9254:13:201"},"nodeType":"YulIf","src":"9251:39:201"},{"nodeType":"YulAssignment","src":"9299:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9310:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"9313:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9306:3:201"},"nodeType":"YulFunctionCall","src":"9306:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"9299:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"9224:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"9227:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"9233:3:201","type":""}],"src":"9193:128:201"},{"body":{"nodeType":"YulBlock","src":"9378:176:201","statements":[{"body":{"nodeType":"YulBlock","src":"9497:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"9499:16:201"},"nodeType":"YulFunctionCall","src":"9499:18:201"},"nodeType":"YulExpressionStatement","src":"9499:18:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9409:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9402:6:201"},"nodeType":"YulFunctionCall","src":"9402:9:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9395:6:201"},"nodeType":"YulFunctionCall","src":"9395:17:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"9417:1:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9424:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"9492:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"9420:3:201"},"nodeType":"YulFunctionCall","src":"9420:74:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9414:2:201"},"nodeType":"YulFunctionCall","src":"9414:81:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9391:3:201"},"nodeType":"YulFunctionCall","src":"9391:105:201"},"nodeType":"YulIf","src":"9388:131:201"},{"nodeType":"YulAssignment","src":"9528:20:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9543:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"9546:1:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"9539:3:201"},"nodeType":"YulFunctionCall","src":"9539:9:201"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"9528:7:201"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"9357:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"9360:1:201","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"9366:7:201","type":""}],"src":"9326:228:201"},{"body":{"nodeType":"YulBlock","src":"9591:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9608:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9611:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9601:6:201"},"nodeType":"YulFunctionCall","src":"9601:88:201"},"nodeType":"YulExpressionStatement","src":"9601:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9705:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"9708:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9698:6:201"},"nodeType":"YulFunctionCall","src":"9698:15:201"},"nodeType":"YulExpressionStatement","src":"9698:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9729:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9732:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9722:6:201"},"nodeType":"YulFunctionCall","src":"9722:15:201"},"nodeType":"YulExpressionStatement","src":"9722:15:201"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"9559:184:201"},{"body":{"nodeType":"YulBlock","src":"9797:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"9819:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"9821:16:201"},"nodeType":"YulFunctionCall","src":"9821:18:201"},"nodeType":"YulExpressionStatement","src":"9821:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9813:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"9816:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9810:2:201"},"nodeType":"YulFunctionCall","src":"9810:8:201"},"nodeType":"YulIf","src":"9807:34:201"},{"nodeType":"YulAssignment","src":"9850:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9862:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"9865:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9858:3:201"},"nodeType":"YulFunctionCall","src":"9858:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"9850:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"9779:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"9782:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"9788:4:201","type":""}],"src":"9748:125:201"},{"body":{"nodeType":"YulBlock","src":"10052:171:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10069:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10080:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10062:6:201"},"nodeType":"YulFunctionCall","src":"10062:21:201"},"nodeType":"YulExpressionStatement","src":"10062:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10103:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10114:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10099:3:201"},"nodeType":"YulFunctionCall","src":"10099:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"10119:2:201","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10092:6:201"},"nodeType":"YulFunctionCall","src":"10092:30:201"},"nodeType":"YulExpressionStatement","src":"10092:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10142:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10153:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10138:3:201"},"nodeType":"YulFunctionCall","src":"10138:18:201"},{"hexValue":"475076323a206661696c6564207472616e73666572","kind":"string","nodeType":"YulLiteral","src":"10158:23:201","type":"","value":"GPv2: failed transfer"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10131:6:201"},"nodeType":"YulFunctionCall","src":"10131:51:201"},"nodeType":"YulExpressionStatement","src":"10131:51:201"},{"nodeType":"YulAssignment","src":"10191:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10203:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10214:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10199:3:201"},"nodeType":"YulFunctionCall","src":"10199:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10191:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10029:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10043:4:201","type":""}],"src":"9878:345:201"},{"body":{"nodeType":"YulBlock","src":"10274:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"10305:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10326:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10329:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10319:6:201"},"nodeType":"YulFunctionCall","src":"10319:88:201"},"nodeType":"YulExpressionStatement","src":"10319:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10427:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10430:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10420:6:201"},"nodeType":"YulFunctionCall","src":"10420:15:201"},"nodeType":"YulExpressionStatement","src":"10420:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10455:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10458:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10448:6:201"},"nodeType":"YulFunctionCall","src":"10448:15:201"},"nodeType":"YulExpressionStatement","src":"10448:15:201"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"10294:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10287:6:201"},"nodeType":"YulFunctionCall","src":"10287:9:201"},"nodeType":"YulIf","src":"10284:189:201"},{"nodeType":"YulAssignment","src":"10482:14:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10491:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"10494:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"10487:3:201"},"nodeType":"YulFunctionCall","src":"10487:9:201"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"10482:1:201"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"10259:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"10262:1:201","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"10268:1:201","type":""}],"src":"10228:274:201"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function allocate_memory_1302() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xa0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 32)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory_1305() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xe0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 256) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let _2 := add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0)\n        if slt(_2, 0xa0) { revert(0, 0) }\n        let value := allocate_memory_1302()\n        if slt(_2, 32) { revert(0, 0) }\n        let value_1 := allocate_memory()\n        mstore(value_1, calldataload(add(headStart, 96)))\n        mstore(value, value_1)\n        mstore(add(value, 32), calldataload(add(headStart, 128)))\n        mstore(add(value, 64), abi_decode_address(add(headStart, 0xa0)))\n        mstore(add(value, 96), abi_decode_address(add(headStart, 192)))\n        let value_2 := calldataload(add(headStart, 224))\n        if iszero(eq(value_2, and(value_2, 0xff))) { revert(0, 0) }\n        mstore(add(value, 128), value_2)\n        value3 := value\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_library_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_array$_t_address_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, shl(5, length)), 32), dataEnd) { revert(0, 0) }\n        value1 := add(_2, 32)\n        value2 := length\n    }\n    function abi_decode_uint16(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_struct$_InitReserveParams_$21632_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 288) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0), 0xe0) { revert(0, 0) }\n        let value := allocate_memory_1305()\n        mstore(value, abi_decode_address(add(headStart, 64)))\n        mstore(add(value, 32), abi_decode_address(add(headStart, 96)))\n        mstore(add(value, 64), abi_decode_address(add(headStart, 128)))\n        mstore(add(value, 96), abi_decode_address(add(headStart, 160)))\n        mstore(add(value, 128), abi_decode_address(add(headStart, 192)))\n        mstore(add(value, 160), abi_decode_uint16(add(headStart, 0xe0)))\n        mstore(add(value, 192), abi_decode_uint16(add(headStart, 256)))\n        value2 := value\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := abi_decode_address(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_encode_tuple_t_rational_0_by_1__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function increment_t_uint16(value) -> ret\n    {\n        let _1 := 0xffff\n        let value_1 := and(value, _1)\n        if eq(value_1, _1) { panic_error_0x11() }\n        ret := add(value_1, 1)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"GPv2: failed transfer\")\n        tail := add(headStart, 96)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"730000000000000000000000000000000000000000301460806040526004361061007c5760003560e01c806369fc1bdf1161005a57806369fc1bdf1461010857806387b322b2146101385780639cf570231461015857600080fd5b80631e3b41451461008157806326ec273f146100a357806348c2ca8c146100e8575b600080fd5b81801561008d57600080fd5b506100a161009c366004611f9d565b610178565b005b6100b66100b13660046120ad565b6102b0565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0015b60405180910390f35b8180156100f457600080fd5b506100a1610103366004612186565b6102ed565b81801561011457600080fd5b50610128610123366004612217565b6104d3565b60405190151581526020016100df565b81801561014457600080fd5b506100a16101533660046122f2565b6108cc565b81801561016457600080fd5b506100a161017336600461232e565b6108f2565b73ffffffffffffffffffffffffffffffffffffffff811660009081526020838152604091829020825191820190925290549081905260d41c64ffffffffff1660408051808201909152600281527f38310000000000000000000000000000000000000000000000000000000000006020820152901561022d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff811660008181526020848152604080832060090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055519182527faef84d3b40895fd58c561f3998000f0583abb992a52fbdc99ace8e8de4d676a5910160405180910390a25050565b6000806000806000806102c58a8a8a8a610a33565b50939950919750909450925090506102de868684610f9d565b93509499939850945094509450565b60005b818110156104cd57600083838381811061030c5761030c6123d6565b90506020020160208101906103219190612405565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208781526040918290208251918201909252815490819052919250906701000000000000001661036f5750506104bb565b60088101546fffffffffffffffffffffffffffffffff1680156104b7576008820180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016905560006103c183610fd1565b905060006103cf8383611061565b6004808601546040517f7df5bd3b00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff1691637df5bd3b91610432918591879101918252602082015260400190565b600060405180830381600087803b15801561044c57600080fd5b505af1158015610460573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff167fbfa21aa5d5f9a1f0120a95e7c0749f389863cbdbfff531aa7339077a5bc919de826040516104ac91815260200190565b60405180910390a250505b5050505b806104c58161244f565b9150506102f0565b50505050565b805160408051808201909152600181527f390000000000000000000000000000000000000000000000000000000000000060208201526000913b610544576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b5060208083015160408085015160608601516080870151875173ffffffffffffffffffffffffffffffffffffffff166000908152958a90529290942061058c949093926110b8565b815173ffffffffffffffffffffffffffffffffffffffff166000908152602085905260408120600301547501000000000000000000000000000000000000000000900461ffff161515806106085750825160008080526020869052604090205473ffffffffffffffffffffffffffffffffffffffff9081169116145b905080156040518060400160405280600281526020017f31340000000000000000000000000000000000000000000000000000000000008152509061067a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b5060005b8360a0015161ffff168161ffff1610156107885761ffff811660009081526020869052604090205473ffffffffffffffffffffffffffffffffffffffff1661077657835173ffffffffffffffffffffffffffffffffffffffff90811660009081526020888152604080832060030180547fffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000061ffff97909716968702179055875194835290889052812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169390921692909217905591506108c59050565b8061078081612488565b91505061067e565b508260c0015161ffff168360a0015161ffff16106040518060400160405280600281526020017f31350000000000000000000000000000000000000000000000000000000000008152509061080a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b50505060a081018051825173ffffffffffffffffffffffffffffffffffffffff90811660009081526020878152604080832060030180547fffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000061ffff978816021790558651955190941682528690529190912080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169290911691909117905560015b9392505050565b6108ed73ffffffffffffffffffffffffffffffffffffffff8416838361120b565b505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526020849052604090206109228382846112de565b5073ffffffffffffffffffffffffffffffffffffffff166000818152602084815260408083206003810180547501000000000000000000000000000000000000000000900461ffff16855295835290832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116909155938352949052808455600184018190556002840181905582547fffffffffffffffffff0000000000000000000000000000000000000000000000169092556004830180548216905560058301805482169055600683018054821690556007830180549091169055600882015560090180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000169055565b600080600080600080610a498760000151511590565b15610a855750600094508493508392508291507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905081610f90565b610b3460405180610260016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581525090565b608088015160ff1615610b7957608088015160ff16600090815260208a9052604090206060890151610b669190611749565b6101808401526101c08301526101a08201525b87602001518160c001511015610e985760c08101518851610b9991611828565b610bad5760c0810180516001019052610b79565b60c0810151600090815260208b9052604090205473ffffffffffffffffffffffffffffffffffffffff166102008201819052610bf35760c0810180516001019052610b79565b61020081015173ffffffffffffffffffffffffffffffffffffffff16600090815260208c8152604091829020825180830190935280549283905260ff60a884901c81166101e0860152603084901c166060850181905261ffff601085901c811660a08701529093166080850152600a9290920a9083015261018082015115801590610c895750816101e00151896080015160ff16145b610d2d5760608901516102008301516040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063b3596f0790602401602060405180830381865afa158015610d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2891906124aa565b610d34565b8161018001515b825260a082015115801590610d54575060c08201518951610d54916118ad565b15610e4457610d7189604001518284600001518560200151611931565b6040830181905261010083018051610d8a9083906124c3565b90525060808901516101e0830151610da59160ff1690611a0a565b1515610240830152608082015115610dfb57816102400151610dcb578160800151610dd2565b816101a001515b8260400151610de191906124db565b8261014001818151610df391906124c3565b905250610e04565b60016102208301525b816102400151610e18578160a00151610e1f565b816101c001515b8260400151610e2e91906124db565b8261016001818151610e4091906124c3565b9052505b60c08201518951610e5491611a1b565b15610e8757610e7189604001518284600001518560200151611a9d565b8261012001818151610e8391906124c3565b9052505b5060c0810180516001019052610b79565b610100810151610ea9576000610ec4565b80610100015181610140015181610ec257610ec2612518565b045b610140820152610100810151610edb576000610ef6565b80610100015181610160015181610ef457610ef4612518565b045b61016082015261012081015115610f3857610f33816101200151610f2d836101600151846101000151611c1d90919063ffffffff16565b90611c60565b610f5a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b60e0820181905261010082015161012083015161014084015161016085015161022090950151929a509098509650919450925090505b9499939850945094509450565b600080610faa8584611c1d565b905083811015610fbe5760009150506108c5565b610fc88482612547565b95945050505050565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415611017575050600101546fffffffffffffffffffffffffffffffff1690565b60018301546108c5906fffffffffffffffffffffffffffffffff80821691611055917001000000000000000000000000000000009091041684611c97565b90611061565b50919050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761109657600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b600485015460408051808201909152600281527f363100000000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff1615611140576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b506001850180546b033b2e3c9fd0803ce80000007fffffffffffffffffffffffffffffffff00000000000000000000000000000000918216811790925560028701805490911690911790556004850180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff968716179091556005860180548216948616949094179093556006850180548416928516929092179091556007909301805490911692909116919091179055565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af161126e573d6000803e3d6000fd5b5061127884611cdc565b6104cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e7366657200000000000000000000006044820152606401610224565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216611360576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b5060038201547501000000000000000000000000000000000000000000900461ffff161515806113b6575060008080526020849052604090205473ffffffffffffffffffffffffffffffffffffffff8281169116145b6040518060400160405280600281526020017f383200000000000000000000000000000000000000000000000000000000000081525090611424576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b508160050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b891906124aa565b60408051808201909152600281527f353500000000000000000000000000000000000000000000000000000000000060208201529015611525576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b508160060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611595573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b991906124aa565b60408051808201909152600281527f353600000000000000000000000000000000000000000000000000000000000060208201529015611626576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b50600480830154604080517f18160ddd000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216926318160ddd9282820192602092908290030181865afa158015611696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ba91906124aa565b1580156116db575060088201546fffffffffffffffffffffffffffffffff16155b6040518060400160405280600281526020017f3534000000000000000000000000000000000000000000000000000000000000815250906104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b81546000908190819081906601000000000000900473ffffffffffffffffffffffffffffffffffffffff16801561180d576040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015287169063b3596f0790602401602060405180830381865afa1580156117e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180a91906124aa565b91505b50945461ffff80821697620100009092041695945092505050565b60408051808201909152600281527f373400000000000000000000000000000000000000000000000000000000000060208201526000906080831061189a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b5050905160019190911b1c600316151590565b60408051808201909152600281527f373400000000000000000000000000000000000000000000000000000000000060208201526000906080831061191f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b50509051600191821b82011c16151590565b60008061193d85610fd1565b6004868101546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81169382019390935292935060009287926119e3928692911690631da24f3e90602401602060405180830381865afa1580156119bf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105591906124aa565b6119ed91906124db565b90508381816119fe576119fe612518565b04979650505050505050565b600082158015906108c55750501490565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310611a8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102249190612363565b50509051600191821b1c16151590565b60068301546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000928392911690631da24f3e90602401602060405180830381865afa158015611b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3791906124aa565b90508015611b5557611b52611b4b86611da6565b8290611061565b90505b60058501546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152909116906370a0823190602401602060405180830381865afa158015611bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611beb91906124aa565b611bf590826124c3565b9050611c0181856124db565b9050828181611c1257611c12612518565b049695505050505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7783900484111517611c5257600080fd5b506127109102611388010490565b60008115670de0b6b3a764000060028404190484111715611c8057600080fd5b50670de0b6b3a76400009190910260028204010490565b600080611cab64ffffffffff841642612547565b611cb590856124db565b6301e1338090049050611cd4816b033b2e3c9fd0803ce80000006124c3565b949350505050565b6000611d1c565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d8015611d5b5760208114611d9557611d567f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f611ce3565b61105b565b823b611d8c57611d8c7f475076323a206e6f74206120636f6e74726163740000000000000000000000006014611ce3565b6001915061105b565b3d6000803e50506000511515919050565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415611dec575050600201546fffffffffffffffffffffffffffffffff1690565b60028301546108c5906fffffffffffffffffffffffffffffffff8082169161105591700100000000000000000000000000000000909104168460006108c5838342600080611e4164ffffffffff851684612547565b905080611e5d576b033b2e3c9fd0803ce80000009150506108c5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511611e93576000611e98565b600285035b925066038882915c4000611eac8a80611061565b81611eb957611eb9612518565b0491506301e13380611ecb838b611061565b81611ed857611ed8612518565b049050600082611ee886886124db565b611ef291906124db565b60029004905060008285611f06888a6124db565b611f1091906124db565b611f1a91906124db565b60069004905080826301e13380611f318a8f6124db565b611f3b919061255e565b611f51906b033b2e3c9fd0803ce80000006124c3565b611f5b91906124c3565b611f6591906124c3565b9b9a5050505050505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f9857600080fd5b919050565b60008060408385031215611fb057600080fd5b82359150611fc060208401611f74565b90509250929050565b60405160a0810167ffffffffffffffff81118282101715612013577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b6040516020810167ffffffffffffffff81118282101715612013577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715612013577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000808486036101008112156120c557600080fd5b8535945060208601359350604086013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa00160a081121561210757600080fd5b61210f611fc9565b602082121561211d57600080fd5b612125612019565b9150606087013582528181526080870135602082015261214760a08801611f74565b604082015261215860c08801611f74565b606082015260e0870135915060ff8216821461217357600080fd5b6080810191909152939692955090935050565b60008060006040848603121561219b57600080fd5b83359250602084013567ffffffffffffffff808211156121ba57600080fd5b818601915086601f8301126121ce57600080fd5b8135818111156121dd57600080fd5b8760208260051b85010111156121f257600080fd5b6020830194508093505050509250925092565b803561ffff81168114611f9857600080fd5b600080600083850361012081121561222e57600080fd5b843593506020850135925060e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08201121561226957600080fd5b50612272612063565b61227e60408601611f74565b815261228c60608601611f74565b602082015261229d60808601611f74565b60408201526122ae60a08601611f74565b60608201526122bf60c08601611f74565b60808201526122d060e08601612205565b60a08201526122e26101008601612205565b60c0820152809150509250925092565b60008060006060848603121561230757600080fd5b61231084611f74565b925061231e60208501611f74565b9150604084013590509250925092565b60008060006060848603121561234357600080fd5b833592506020840135915061235a60408501611f74565b90509250925092565b600060208083528351808285015260005b8181101561239057858101830151858201604001528201612374565b818111156123a2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561241757600080fd5b6108c582611f74565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561248157612481612420565b5060010190565b600061ffff808316818114156124a0576124a0612420565b6001019392505050565b6000602082840312156124bc57600080fd5b5051919050565b600082198211156124d6576124d6612420565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561251357612513612420565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008282101561255957612559612420565b500390565b600082612594577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220f19e28cf44bd33c4782c83497ed8e836316161e37483a0dba26176c1d50596c964736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x69FC1BDF GT PUSH2 0x5A JUMPI DUP1 PUSH4 0x69FC1BDF EQ PUSH2 0x108 JUMPI DUP1 PUSH4 0x87B322B2 EQ PUSH2 0x138 JUMPI DUP1 PUSH4 0x9CF57023 EQ PUSH2 0x158 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1E3B4145 EQ PUSH2 0x81 JUMPI DUP1 PUSH4 0x26EC273F EQ PUSH2 0xA3 JUMPI DUP1 PUSH4 0x48C2CA8C EQ PUSH2 0xE8 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x8D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA1 PUSH2 0x9C CALLDATASIZE PUSH1 0x4 PUSH2 0x1F9D JUMP JUMPDEST PUSH2 0x178 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xB6 PUSH2 0xB1 CALLDATASIZE PUSH1 0x4 PUSH2 0x20AD JUMP JUMPDEST PUSH2 0x2B0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA1 PUSH2 0x103 CALLDATASIZE PUSH1 0x4 PUSH2 0x2186 JUMP JUMPDEST PUSH2 0x2ED JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x114 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x128 PUSH2 0x123 CALLDATASIZE PUSH1 0x4 PUSH2 0x2217 JUMP JUMPDEST PUSH2 0x4D3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xDF JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x144 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA1 PUSH2 0x153 CALLDATASIZE PUSH1 0x4 PUSH2 0x22F2 JUMP JUMPDEST PUSH2 0x8CC JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x164 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA1 PUSH2 0x173 CALLDATASIZE PUSH1 0x4 PUSH2 0x232E JUMP JUMPDEST PUSH2 0x8F2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP4 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP3 MSTORE SWAP1 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3831000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO PUSH2 0x22D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE MLOAD SWAP2 DUP3 MSTORE PUSH32 0xAEF84D3B40895FD58C561F3998000F0583ABB992A52FBDC99ACE8E8DE4D676A5 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2C5 DUP11 DUP11 DUP11 DUP11 PUSH2 0xA33 JUMP JUMPDEST POP SWAP4 SWAP10 POP SWAP2 SWAP8 POP SWAP1 SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x2DE DUP7 DUP7 DUP5 PUSH2 0xF9D JUMP JUMPDEST SWAP4 POP SWAP5 SWAP10 SWAP4 SWAP9 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4CD JUMPI PUSH1 0x0 DUP4 DUP4 DUP4 DUP2 DUP2 LT PUSH2 0x30C JUMPI PUSH2 0x30C PUSH2 0x23D6 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x321 SWAP2 SWAP1 PUSH2 0x2405 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP3 MSTORE DUP2 SLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP2 SWAP3 POP SWAP1 PUSH8 0x100000000000000 AND PUSH2 0x36F JUMPI POP POP PUSH2 0x4BB JUMP JUMPDEST PUSH1 0x8 DUP2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x4B7 JUMPI PUSH1 0x8 DUP3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x0 PUSH2 0x3C1 DUP4 PUSH2 0xFD1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3CF DUP4 DUP4 PUSH2 0x1061 JUMP JUMPDEST PUSH1 0x4 DUP1 DUP7 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x7DF5BD3B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP3 SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x7DF5BD3B SWAP2 PUSH2 0x432 SWAP2 DUP6 SWAP2 DUP8 SWAP2 ADD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x44C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x460 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xBFA21AA5D5F9A1F0120A95E7C0749F389863CBDBFFF531AA7339077A5BC919DE DUP3 PUSH1 0x40 MLOAD PUSH2 0x4AC SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMPDEST POP POP POP JUMPDEST DUP1 PUSH2 0x4C5 DUP2 PUSH2 0x244F JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2F0 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3900000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 EXTCODESIZE PUSH2 0x544 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x80 DUP8 ADD MLOAD DUP8 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP6 DUP11 SWAP1 MSTORE SWAP3 SWAP1 SWAP5 KECCAK256 PUSH2 0x58C SWAP5 SWAP1 SWAP4 SWAP3 PUSH2 0x10B8 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x608 JUMPI POP DUP3 MLOAD PUSH1 0x0 DUP1 DUP1 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 AND EQ JUMPDEST SWAP1 POP DUP1 ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3134000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x67A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0xFFFF AND DUP2 PUSH2 0xFFFF AND LT ISZERO PUSH2 0x788 JUMPI PUSH2 0xFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x776 JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH22 0x1000000000000000000000000000000000000000000 PUSH2 0xFFFF SWAP8 SWAP1 SWAP8 AND SWAP7 DUP8 MUL OR SWAP1 SSTORE DUP8 MLOAD SWAP5 DUP4 MSTORE SWAP1 DUP9 SWAP1 MSTORE DUP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP4 SWAP1 SWAP3 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SSTORE SWAP2 POP PUSH2 0x8C5 SWAP1 POP JUMP JUMPDEST DUP1 PUSH2 0x780 DUP2 PUSH2 0x2488 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x67E JUMP JUMPDEST POP DUP3 PUSH1 0xC0 ADD MLOAD PUSH2 0xFFFF AND DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0xFFFF AND LT PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3135000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x80A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP POP POP PUSH1 0xA0 DUP2 ADD DUP1 MLOAD DUP3 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH22 0x1000000000000000000000000000000000000000000 PUSH2 0xFFFF SWAP8 DUP9 AND MUL OR SWAP1 SSTORE DUP7 MLOAD SWAP6 MLOAD SWAP1 SWAP5 AND DUP3 MSTORE DUP7 SWAP1 MSTORE SWAP2 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x1 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x8ED PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP4 DUP4 PUSH2 0x120B JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x922 DUP4 DUP3 DUP5 PUSH2 0x12DE JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND DUP6 MSTORE SWAP6 DUP4 MSTORE SWAP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP4 DUP4 MSTORE SWAP5 SWAP1 MSTORE DUP1 DUP5 SSTORE PUSH1 0x1 DUP5 ADD DUP2 SWAP1 SSTORE PUSH1 0x2 DUP5 ADD DUP2 SWAP1 SSTORE DUP3 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000 AND SWAP1 SWAP3 SSTORE PUSH1 0x4 DUP4 ADD DUP1 SLOAD DUP3 AND SWAP1 SSTORE PUSH1 0x5 DUP4 ADD DUP1 SLOAD DUP3 AND SWAP1 SSTORE PUSH1 0x6 DUP4 ADD DUP1 SLOAD DUP3 AND SWAP1 SSTORE PUSH1 0x7 DUP4 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE PUSH1 0x8 DUP3 ADD SSTORE PUSH1 0x9 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0xA49 DUP8 PUSH1 0x0 ADD MLOAD MLOAD ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0xA85 JUMPI POP PUSH1 0x0 SWAP5 POP DUP5 SWAP4 POP DUP4 SWAP3 POP DUP3 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 POP DUP2 PUSH2 0xF90 JUMP JUMPDEST PUSH2 0xB34 PUSH1 0x40 MLOAD DUP1 PUSH2 0x260 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND ISZERO PUSH2 0xB79 JUMPI PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0xB66 SWAP2 SWAP1 PUSH2 0x1749 JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MSTORE PUSH2 0x1C0 DUP4 ADD MSTORE PUSH2 0x1A0 DUP3 ADD MSTORE JUMPDEST DUP8 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0xC0 ADD MLOAD LT ISZERO PUSH2 0xE98 JUMPI PUSH1 0xC0 DUP2 ADD MLOAD DUP9 MLOAD PUSH2 0xB99 SWAP2 PUSH2 0x1828 JUMP JUMPDEST PUSH2 0xBAD JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0xB79 JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP12 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x200 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0xBF3 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0xB79 JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP13 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP4 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP3 DUP4 SWAP1 MSTORE PUSH1 0xFF PUSH1 0xA8 DUP5 SWAP1 SHR DUP2 AND PUSH2 0x1E0 DUP7 ADD MSTORE PUSH1 0x30 DUP5 SWAP1 SHR AND PUSH1 0x60 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0xFFFF PUSH1 0x10 DUP6 SWAP1 SHR DUP2 AND PUSH1 0xA0 DUP8 ADD MSTORE SWAP1 SWAP4 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA SWAP3 SWAP1 SWAP3 EXP SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0xC89 JUMPI POP DUP2 PUSH2 0x1E0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD PUSH1 0xFF AND EQ JUMPDEST PUSH2 0xD2D JUMPI PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD04 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD28 SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST PUSH2 0xD34 JUMP JUMPDEST DUP2 PUSH2 0x180 ADD MLOAD JUMPDEST DUP3 MSTORE PUSH1 0xA0 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0xD54 JUMPI POP PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0xD54 SWAP2 PUSH2 0x18AD JUMP JUMPDEST ISZERO PUSH2 0xE44 JUMPI PUSH2 0xD71 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x1931 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP4 ADD DUP1 MLOAD PUSH2 0xD8A SWAP1 DUP4 SWAP1 PUSH2 0x24C3 JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x1E0 DUP4 ADD MLOAD PUSH2 0xDA5 SWAP2 PUSH1 0xFF AND SWAP1 PUSH2 0x1A0A JUMP JUMPDEST ISZERO ISZERO PUSH2 0x240 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD ISZERO PUSH2 0xDFB JUMPI DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0xDCB JUMPI DUP2 PUSH1 0x80 ADD MLOAD PUSH2 0xDD2 JUMP JUMPDEST DUP2 PUSH2 0x1A0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0xDE1 SWAP2 SWAP1 PUSH2 0x24DB JUMP JUMPDEST DUP3 PUSH2 0x140 ADD DUP2 DUP2 MLOAD PUSH2 0xDF3 SWAP2 SWAP1 PUSH2 0x24C3 JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0xE04 JUMP JUMPDEST PUSH1 0x1 PUSH2 0x220 DUP4 ADD MSTORE JUMPDEST DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0xE18 JUMPI DUP2 PUSH1 0xA0 ADD MLOAD PUSH2 0xE1F JUMP JUMPDEST DUP2 PUSH2 0x1C0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0xE2E SWAP2 SWAP1 PUSH2 0x24DB JUMP JUMPDEST DUP3 PUSH2 0x160 ADD DUP2 DUP2 MLOAD PUSH2 0xE40 SWAP2 SWAP1 PUSH2 0x24C3 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0xE54 SWAP2 PUSH2 0x1A1B JUMP JUMPDEST ISZERO PUSH2 0xE87 JUMPI PUSH2 0xE71 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x1A9D JUMP JUMPDEST DUP3 PUSH2 0x120 ADD DUP2 DUP2 MLOAD PUSH2 0xE83 SWAP2 SWAP1 PUSH2 0x24C3 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST POP PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0xB79 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0xEA9 JUMPI PUSH1 0x0 PUSH2 0xEC4 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x140 ADD MLOAD DUP2 PUSH2 0xEC2 JUMPI PUSH2 0xEC2 PUSH2 0x2518 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0xEDB JUMPI PUSH1 0x0 PUSH2 0xEF6 JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x160 ADD MLOAD DUP2 PUSH2 0xEF4 JUMPI PUSH2 0xEF4 PUSH2 0x2518 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD ISZERO PUSH2 0xF38 JUMPI PUSH2 0xF33 DUP2 PUSH2 0x120 ADD MLOAD PUSH2 0xF2D DUP4 PUSH2 0x160 ADD MLOAD DUP5 PUSH2 0x100 ADD MLOAD PUSH2 0x1C1D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x1C60 JUMP JUMPDEST PUSH2 0xF5A JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH2 0x160 DUP6 ADD MLOAD PUSH2 0x220 SWAP1 SWAP6 ADD MLOAD SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMPDEST SWAP5 SWAP10 SWAP4 SWAP9 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xFAA DUP6 DUP5 PUSH2 0x1C1D JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0xFBE JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x8C5 JUMP JUMPDEST PUSH2 0xFC8 DUP5 DUP3 PUSH2 0x2547 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x1017 JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x8C5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x1055 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x1C97 JUMP JUMPDEST SWAP1 PUSH2 0x1061 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1096 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP6 ADD SLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3631000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x1140 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP PUSH1 0x1 DUP6 ADD DUP1 SLOAD PUSH12 0x33B2E3C9FD0803CE8000000 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 SWAP2 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE PUSH1 0x2 DUP8 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x4 DUP6 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x5 DUP7 ADD DUP1 SLOAD DUP3 AND SWAP5 DUP7 AND SWAP5 SWAP1 SWAP5 OR SWAP1 SWAP4 SSTORE PUSH1 0x6 DUP6 ADD DUP1 SLOAD DUP5 AND SWAP3 DUP6 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x7 SWAP1 SWAP4 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x126E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1278 DUP5 PUSH2 0x1CDC JUMP JUMPDEST PUSH2 0x4CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x224 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x1360 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP PUSH1 0x3 DUP3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x13B6 JUMPI POP PUSH1 0x0 DUP1 DUP1 MSTORE PUSH1 0x20 DUP5 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1424 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP DUP2 PUSH1 0x5 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND 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 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1494 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14B8 SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3535000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO PUSH2 0x1525 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP DUP2 PUSH1 0x6 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND 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 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1595 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15B9 SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3536000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 ISZERO PUSH2 0x1626 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP PUSH1 0x4 DUP1 DUP4 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x18160DDD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 PUSH4 0x18160DDD SWAP3 DUP3 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1696 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16BA SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST ISZERO DUP1 ISZERO PUSH2 0x16DB JUMPI POP PUSH1 0x8 DUP3 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3534000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x4CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH7 0x1000000000000 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x180D JUMPI PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x17E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x180A SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP5 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP8 PUSH3 0x10000 SWAP1 SWAP3 DIV AND SWAP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x189A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 SHL SHR PUSH1 0x3 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x191F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL DUP3 ADD SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x193D DUP6 PUSH2 0xFD1 JUMP JUMPDEST PUSH1 0x4 DUP7 DUP2 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 DUP8 SWAP3 PUSH2 0x19E3 SWAP3 DUP7 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1055 SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST PUSH2 0x19ED SWAP2 SWAP1 PUSH2 0x24DB JUMP JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 PUSH2 0x19FE JUMPI PUSH2 0x19FE PUSH2 0x2518 JUMP JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x8C5 JUMPI POP POP EQ SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x1A8D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x224 SWAP2 SWAP1 PUSH2 0x2363 JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x6 DUP4 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B13 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B37 SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x1B55 JUMPI PUSH2 0x1B52 PUSH2 0x1B4B DUP7 PUSH2 0x1DA6 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1061 JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x5 DUP6 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BC7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1BEB SWAP2 SWAP1 PUSH2 0x24AA JUMP JUMPDEST PUSH2 0x1BF5 SWAP1 DUP3 PUSH2 0x24C3 JUMP JUMPDEST SWAP1 POP PUSH2 0x1C01 DUP2 DUP6 PUSH2 0x24DB JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 PUSH2 0x1C12 JUMPI PUSH2 0x1C12 PUSH2 0x2518 JUMP JUMPDEST DIV SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1C52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH8 0xDE0B6B3A7640000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1C80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1CAB PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x2547 JUMP JUMPDEST PUSH2 0x1CB5 SWAP1 DUP6 PUSH2 0x24DB JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x1CD4 DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x24C3 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D1C JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x1D5B JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x1D95 JUMPI PUSH2 0x1D56 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x1CE3 JUMP JUMPDEST PUSH2 0x105B JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x1D8C JUMPI PUSH2 0x1D8C PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x1CE3 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x105B JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY POP POP PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x1DEC JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x8C5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x1055 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH1 0x0 PUSH2 0x8C5 DUP4 DUP4 TIMESTAMP PUSH1 0x0 DUP1 PUSH2 0x1E41 PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x2547 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1E5D JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x8C5 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x1E93 JUMPI PUSH1 0x0 PUSH2 0x1E98 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x1EAC DUP11 DUP1 PUSH2 0x1061 JUMP JUMPDEST DUP2 PUSH2 0x1EB9 JUMPI PUSH2 0x1EB9 PUSH2 0x2518 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x1ECB DUP4 DUP12 PUSH2 0x1061 JUMP JUMPDEST DUP2 PUSH2 0x1ED8 JUMPI PUSH2 0x1ED8 PUSH2 0x2518 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x1EE8 DUP7 DUP9 PUSH2 0x24DB JUMP JUMPDEST PUSH2 0x1EF2 SWAP2 SWAP1 PUSH2 0x24DB JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x1F06 DUP9 DUP11 PUSH2 0x24DB JUMP JUMPDEST PUSH2 0x1F10 SWAP2 SWAP1 PUSH2 0x24DB JUMP JUMPDEST PUSH2 0x1F1A SWAP2 SWAP1 PUSH2 0x24DB JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x1F31 DUP11 DUP16 PUSH2 0x24DB JUMP JUMPDEST PUSH2 0x1F3B SWAP2 SWAP1 PUSH2 0x255E JUMP JUMPDEST PUSH2 0x1F51 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x24C3 JUMP JUMPDEST PUSH2 0x1F5B SWAP2 SWAP1 PUSH2 0x24C3 JUMP JUMPDEST PUSH2 0x1F65 SWAP2 SWAP1 PUSH2 0x24C3 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1F98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1FB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH2 0x1FC0 PUSH1 0x20 DUP5 ADD PUSH2 0x1F74 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2013 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2013 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xE0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2013 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 DUP7 SUB PUSH2 0x100 DUP2 SLT ISZERO PUSH2 0x20C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 ADD PUSH1 0xA0 DUP2 SLT ISZERO PUSH2 0x2107 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x210F PUSH2 0x1FC9 JUMP JUMPDEST PUSH1 0x20 DUP3 SLT ISZERO PUSH2 0x211D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2125 PUSH2 0x2019 JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD DUP3 MSTORE DUP2 DUP2 MSTORE PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2147 PUSH1 0xA0 DUP9 ADD PUSH2 0x1F74 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x2158 PUSH1 0xC0 DUP9 ADD PUSH2 0x1F74 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xE0 DUP8 ADD CALLDATALOAD SWAP2 POP PUSH1 0xFF DUP3 AND DUP3 EQ PUSH2 0x2173 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x219B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x21BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x21CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x21DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x21F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x1F98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 DUP6 SUB PUSH2 0x120 DUP2 SLT ISZERO PUSH2 0x222E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0xE0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP3 ADD SLT ISZERO PUSH2 0x2269 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2272 PUSH2 0x2063 JUMP JUMPDEST PUSH2 0x227E PUSH1 0x40 DUP7 ADD PUSH2 0x1F74 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x228C PUSH1 0x60 DUP7 ADD PUSH2 0x1F74 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x229D PUSH1 0x80 DUP7 ADD PUSH2 0x1F74 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x22AE PUSH1 0xA0 DUP7 ADD PUSH2 0x1F74 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x22BF PUSH1 0xC0 DUP7 ADD PUSH2 0x1F74 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x22D0 PUSH1 0xE0 DUP7 ADD PUSH2 0x2205 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x22E2 PUSH2 0x100 DUP7 ADD PUSH2 0x2205 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2307 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2310 DUP5 PUSH2 0x1F74 JUMP JUMPDEST SWAP3 POP PUSH2 0x231E PUSH1 0x20 DUP6 ADD PUSH2 0x1F74 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2343 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH2 0x235A PUSH1 0x40 DUP6 ADD PUSH2 0x1F74 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2390 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x2374 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x23A2 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2417 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8C5 DUP3 PUSH2 0x1F74 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x2481 JUMPI PUSH2 0x2481 PUSH2 0x2420 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x24A0 JUMPI PUSH2 0x24A0 PUSH2 0x2420 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x24BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x24D6 JUMPI PUSH2 0x24D6 PUSH2 0x2420 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2513 JUMPI PUSH2 0x2513 PUSH2 0x2420 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x2559 JUMPI PUSH2 0x2559 PUSH2 0x2420 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2594 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALL SWAP15 0x28 0xCF DIFFICULTY 0xBD CALLER 0xC4 PUSH25 0x2C83497ED8E836316161E37483A0DBA26176C1D50596C96473 PUSH16 0x6C634300080A00330000000000000000 ","sourceMap":"863:6419:84:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4536:351;;;;;;;;;;-1:-1:-1;4536:351:84;;;;;:::i;:::-;;:::i;:::-;;6396:884;;;;;;:::i;:::-;;:::i;:::-;;;;3339:25:201;;;3395:2;3380:18;;3373:34;;;;3423:18;;;3416:34;;;;3481:2;3466:18;;3459:34;3524:3;3509:19;;3502:35;3568:3;3553:19;;3546:35;3326:3;3311:19;6396:884:84;;;;;;;;3312:926;;;;;;;;;;-1:-1:-1;3312:926:84;;;;;:::i;:::-;;:::i;1610:1096::-;;;;;;;;;;-1:-1:-1;1610:1096:84;;;;;:::i;:::-;;:::i;:::-;;;5752:14:201;;5745:22;5727:41;;5715:2;5700:18;1610:1096:84;5579:195:201;2924:130:84;;;;;;;;;;-1:-1:-1;2924:130:84;;;;;:::i;:::-;;:::i;5121:410::-;;;;;;;;;;-1:-1:-1;5121:410:84;;;;;:::i;:::-;;:::i;4536:351::-;4694:19;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;4478:3:72;17633:67;;;4751:28:84;;;;;;;;;;;;;;;;;;4694:55;4686:94;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;4786:19:84;;;4831:1;4786:19;;;;;;;;;;;:42;;:46;;;;;;4843:39;7331:25:201;;;4843:39:84;;7304:18:201;4843:39:84;;;;;;;4536:351;;:::o;6396:884::-;6730:27;6765:21;6794:28;6830:35;6873:11;6892:20;7052:90;7090:12;7104;7118:15;7135:6;7052:37;:90::i;:::-;-1:-1:-1;6927:215:84;;-1:-1:-1;6927:215:84;;-1:-1:-1;6927:215:84;;-1:-1:-1;6927:215:84;-1:-1:-1;6927:215:84;-1:-1:-1;7172:103:84;6927:215;;;7172:38;:103::i;:::-;7149:126;;6396:884;;;;;;;;;;;:::o;3312:926::-;3466:9;3461:773;3481:17;;;3461:773;;;3513:20;3536:6;;3543:1;3536:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;3594:26;;;3554:37;3594:26;;;;;;;;;;;;3732:31;;;;;;;;;;;;;;3594:26;;-1:-1:-1;3594:26:84;9057:12:72;9045:24;3727:67:84;;3777:8;;;;3727:67;3830:25;;;;;;3868:22;;3864:364;;3902:25;;;:29;;;;;;3930:1;3968:29;3902:7;3968:27;:29::i;:::-;3941:56;-1:-1:-1;4007:20:84;4030:42;:17;3941:56;4030:24;:42::i;:::-;4090:21;;;;;4082:77;;;;;4007:65;;-1:-1:-1;4090:21:84;;;4082:45;;:77;;4007:65;;4142:16;;4082:77;7921:25:201;;;7977:2;7962:18;;7955:34;7909:2;7894:18;;7747:248;4082:77:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4192:12;4175:44;;;4206:12;4175:44;;;;7331:25:201;;7319:2;7304:18;;7177:185;4175:44:84;;;;;;;;3892:336;;3864:364;3505:729;;;3461:773;3500:3;;;;:::i;:::-;;;;3461:773;;;;3312:926;;;:::o;1610:1096::-;1868:12;;1883:19;;;;;;;;;;;;;;;;;1829:4;;1025:20:3;1841:62:84;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1948:20:84;;;;;1976:24;;;;;2008:26;;;;2042:34;;;;1922:12;;1909:26;;;;;;;;;;;;;;:173;;:26;;1948:20;1909:31;:173::i;:::-;2129:12;;2116:26;;2089:24;2116:26;;;;;;;;;;:29;;;;;;;;:34;;;:75;;-1:-1:-1;2179:12:84;;;2160:15;;;;;;;;;;;:31;:15;;;:31;;;2116:75;2089:102;;2206:19;2205:20;2227:28;;;;;;;;;;;;;;;;;2197:59;;;;;;;;;;;;;;:::i;:::-;;2268:8;2263:213;2286:6;:20;;;2282:24;;:1;:24;;;2263:213;;;2325:15;;;2352:1;2325:15;;;;;;;;;;;:29;:15;2321:149;;2379:12;;2366:26;;;;;;;;;;;;;;;;:29;;:33;;;;;;;;;;;;;;;;2427:12;;2409:15;;;;;;;;;:30;;;;;;;;;;;;;;2366:26;-1:-1:-1;2449:12:84;;-1:-1:-1;2449:12:84;2321:149;2308:3;;;;:::i;:::-;;;;2263:213;;;;2513:6;:24;;;2490:47;;:6;:20;;;:47;;;2539:31;;;;;;;;;;;;;;;;;2482:89;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;2609:20:84;;;;;2590:12;;2577:26;;;;;;;;;;;;;;;;:29;;:52;;;;;;;;;;;;;2672:12;;2648:20;;2635:34;;;;;;;;;;;;:49;;;;;;;;;;;;;;-1:-1:-1;1610:1096:84;;;;;;:::o;2924:130::-;3011:38;:26;;;3038:2;3042:6;3011:26;:38::i;:::-;2924:130;;;:::o;5121:410::-;5349:19;;;5309:37;5349:19;;;;;;;;;;5374:65;5410:12;5349:19;5362:5;5374:35;:65::i;:::-;-1:-1:-1;5458:19:84;;5492:1;5458:19;;;;;;;;;;;:22;;;;;;;;;;5445:36;;;;;;;;:49;;;;;;;;;5507:19;;;;;;5500:26;;;-1:-1:-1;5500:26:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5121:410::o;2633:3723:81:-;2947:7;2956;2965;2974;2983;2992:4;3008:27;:6;:17;;;6194:9:73;:14;;6091:122;3008:27:81;3004:93;;;-1:-1:-1;3053:1:81;;-1:-1:-1;3053:1:81;;-1:-1:-1;3053:1:81;;-1:-1:-1;3053:1:81;;-1:-1:-1;3065:17:81;;-1:-1:-1;3053:1:81;3045:45;;3004:93;3103:40;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3103:40:81;3154:24;;;;:29;;;3150:263;;3326:24;;;;3310:41;;;;;;;;;;;;;3382:13;;;;3257:149;;3310:41;3257;:149::i;:::-;3233:20;;;3193:213;3209:22;;;3193:213;3194:13;;;3193:213;3150:263;3435:6;:20;;;3426:4;:6;;;:29;3419:2175;;;3519:6;;;;3470:17;;:56;;:48;:56::i;:::-;3465:140;;3562:6;;;3560:8;;;;;;3588;;3465:140;3655:6;;;;3642:20;;;;;;;;;;;;;;3613:26;;;:49;;;3671:123;;3751:6;;;3749:8;;;;;;3777;;3671:123;3862:26;;;;3849:40;;3802:44;3849:40;;;;;;;;;;;;4038:38;;;;;;;;;;;;;;22869:67:72;4339:3;23023:71;;;;;4004:23:81;;;3898:180;3439:2:72;22869:67;;;;3971:13:81;;;3898:180;;;22674:9:72;3298:2;22691:85;;;;;3926:25:81;;;3898:180;22662:21:72;;;3908:8:81;;;3898:180;4124:2;:19;;;;4107:14;;;:36;-1:-1:-1;4178:20:81;;;:25;;;;:88;;;4243:4;:23;;;4215:6;:24;;;:51;;;4178:88;:205;;4327:13;;;;4356:26;;;;4308:75;;;;;:47;8937:55:201;;;4308:75:81;;;8919:74:201;4308:47:81;;;;;8892:18:201;;4308:75:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4178:205;;;4277:4;:20;;;4178:205;4160:223;;4396:25;;;;:30;;;;:79;;-1:-1:-1;4468:6:81;;;;4430:17;;:45;;:37;:45::i;:::-;4392:911;;;4520:141;4561:6;:11;;;4584:14;4610:4;:15;;;4637:4;:14;;;4520:29;:141::i;:::-;4487:30;;;:174;;;4672:34;;;:68;;;;4487:174;;4672:68;:::i;:::-;;;-1:-1:-1;4816:24:81;;;;4852:23;;;;4776:109;;;;;:28;:109::i;:::-;4751:134;;:22;;;:134;4900:8;;;;:13;4896:226;;5000:4;:22;;;:49;;5041:4;:8;;;5000:49;;;5025:4;:13;;;5000:49;4954:4;:30;;;:96;;;;:::i;:::-;4927:4;:11;;:123;;;;;;;:::i;:::-;;;-1:-1:-1;4896:226:81;;;5107:4;5079:25;;;:32;4896:226;5218:4;:22;;;:75;;5268:4;:25;;;5218:75;;;5243:4;:22;;;5218:75;5174:4;:30;;;:120;;;;:::i;:::-;5132:4;:28;;:162;;;;;;;:::i;:::-;;;-1:-1:-1;4392:911:81;5345:6;;;;5315:17;;:37;;:29;:37::i;:::-;5311:232;;;5396:138;5434:6;:11;;;5457:14;5483:4;:15;;;5510:4;:14;;;5396:26;:138::i;:::-;5364:4;:28;;:170;;;;;;;:::i;:::-;;;-1:-1:-1;5311:232:81;-1:-1:-1;5573:6:81;;;5571:8;;;;;;3419:2175;;;5632:34;;;;:110;;5741:1;5632:110;;;5696:4;:34;;;5682:4;:11;;;:48;;;;;:::i;:::-;;5632:110;5618:11;;;:124;5781:34;;;;:127;;5907:1;5781:127;;;5862:4;:34;;;5831:4;:28;;;:65;;;;;:::i;:::-;;5781:127;5750:28;;;:158;5942:28;;;;:33;5941:200;;6011:130;6105:4;:28;;;6012:75;6058:4;:28;;;6012:4;:34;;;:45;;:75;;;;:::i;:::-;6011:84;;:130::i;:::-;5941:200;;;5985:17;5941:200;5921:17;;;:220;;;6162:34;;;;6204:28;;;;6240:11;;;;6259:28;;;;6320:25;;;;;6162:34;;-1:-1:-1;6204:28:81;;-1:-1:-1;6240:11:81;-1:-1:-1;6259:28:81;;-1:-1:-1;5921:220:81;-1:-1:-1;6320:25:81;-1:-1:-1;2633:3723:81;;;;;;;;;;;;:::o;6874:495::-;7033:7;;7089:45;:29;7130:3;7089:40;:45::i;:::-;7048:86;;7178:23;7145:30;:56;7141:85;;;7218:1;7211:8;;;;;7141:85;7265:56;7298:23;7265:30;:56;:::i;:::-;7232:89;6874:495;-1:-1:-1;;;;;6874:495:81:o;1895:528:85:-;2028:27;;;;1994:7;;2028:27;;;;;2110:15;2097:28;;2093:326;;;-1:-1:-1;;2229:22:85;;;;;;1895:528::o;2093:326::-;2380:22;;;;2287:125;;2380:22;;;;;2287:74;;2321:28;;;;;2351:9;2287:33;:74::i;:::-;:81;;:125::i;2093:326::-;2003:420;1895:528;;;:::o;2253:319:90:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:90;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;5469:657:85:-;5695:21;;;;5732:34;;;;;;;;;;;;;;;;;;5695:35;:21;:35;5687:80;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5774:22:85;;;:48;;704:4:90;5774:48:85;;;;;;;;;5828:27;;;:53;;;;;;;;;;5887:21;;;:37;;;;;;;;;;;;;;5930:30;;;:55;;;;;;;;;;;;;;5991:32;;;:59;;;;;;;;;;;;;;6056:35;;;;:65;;;;;;;;;;;;;;;5469:657::o;441::1:-;668:4;662:11;538:23;680:36;;;765:42;757:51;;753:1;730:25;;723:86;846:2;823:26;;816:41;;;538:23;519:16;;916:2;662:11;519:16;887:5;880;875:50;865:154;;958:16;955:1;952;937:38;994:16;991:1;984:27;865:154;;1039:28;1061:5;1039:21;:28::i;:::-;1031:62;;;;;;;10080:2:201;1031:62:1;;;10062:21:201;10119:2;10099:18;;;10092:30;10158:23;10138:18;;;10131:51;10199:18;;1031:62:1;9878:345:201;24368:707:87;24566:29;;;;;;;;;;;;;;;;;24545:19;;;24537:59;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;24610:10:87;;;;;;;;;:15;;;:43;;-1:-1:-1;24629:15:87;;;;;;;;;;;;:24;;;;:15;;:24;24610:43;24655:23;;;;;;;;;;;;;;;;;24602:77;;;;;;;;;;;;;;:::i;:::-;;24700:7;:30;;;;;;;;;;;;24693:50;;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24752:27;;;;;;;;;;;;;;;;;;24693:57;24685:95;;;;;;;;;;;;;:::i;:::-;;24808:7;:32;;;;;;;;;;;;24801:52;;;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24868:36;;;;;;;;;;;;;;;;;;24801:59;24786:124;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;24938:21:87;;;;;24931:43;;;;;;;;24938:21;;;;;24931:41;;:43;;;;;;;;;;;;24938:21;24931:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;:82;;;;-1:-1:-1;24983:25:87;;;;;;:30;24931:82;25021:43;;;;;;;;;;;;;;;;;24916:154;;;;;;;;;;;;;;:::i;3336:442:79:-;3564:20;;3471:7;;;;;;;;3564:20;;;;;3595:30;;3591:107;;3653:38;;;;;:20;8937:55:201;;;3653:38:79;;;8919:74:201;3653:20:79;;;;;8892:18:201;;3653:38:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3635:56;;3591:107;-1:-1:-1;3712:12:79;;;;;;;3726:29;;;;;;3757:15;-1:-1:-1;3336:442:79;-1:-1:-1;;;3336:442:79:o;2435:333:73:-;2670:28;;;;;;;;;;;;;;;;;2576:4;;5284:3:72;2614:54:73;;2606:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;2715:9:73;;2745:1;2729:17;;;;2715:32;2751:1;2714:38;:43;;;2435:333::o;3638:328::-;3862:28;;;;;;;;;;;;;;;;;3768:4;;5284:3:72;3806:54:73;;3798:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3907:9:73;;3938:1;3922:17;;;3921:23;;3907:38;3906:44;:49;;;3638:328::o;9524:446:81:-;9697:7;9712:24;9739:29;:7;:27;:29::i;:::-;9820:21;;;;;9800:64;;;;;9820:21;8937:55:201;;;9800:64:81;;;8919:74:201;;;;9712:56:81;;-1:-1:-1;9774:15:81;;9898:10;;9800:89;;9712:56;;9820:21;;;9800:58;;8892:18:201;;9800:64:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:89::-;9792:116;;;;:::i;:::-;9774:134;;9950:9;9940:7;:19;;;;;:::i;:::-;;;9524:446;-1:-1:-1;;;;;;;9524:446:81:o;4133:208:79:-;4250:4;4270:22;;;;;:65;;-1:-1:-1;;4296:39:79;;4133:208::o;3046:314:73:-;3262:28;;;;;;;;;;;;;;;;;3168:4;;5284:3:72;3206:54:73;;3198:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3307:9:73;;3337:1;3321:17;;;3307:32;3306:38;:43;;;3046:314::o;8150:645:81:-;8409:32;;;;8389:87;;;;;8409:32;8937:55:201;;;8389:87:81;;;8919:74:201;8320:7:81;;;;8409:32;;;8389:69;;8892:18:201;;8389:87:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8365:111;-1:-1:-1;8486:18:81;;8482:104;;8530:49;8551:27;:7;:25;:27::i;:::-;8530:13;;:20;:49::i;:::-;8514:65;;8482:104;8631:30;;;;8624:54;;;;;8631:30;8937:55:201;;;8624:54:81;;;8919:74:201;8631:30:81;;;;8624:48;;8892:18:201;;8624:54:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8608:70;;:13;:70;:::i;:::-;8592:86;-1:-1:-1;8701:26:81;8592:86;8701:10;:26;:::i;:::-;8685:42;;8775:9;8759:13;:25;;;;;:::i;:::-;;;8150:645;-1:-1:-1;;;;;;8150:645:81:o;1005:496:89:-;1083:14;1248:18;;1299:35;1295:52;;;1285:63;;1278:71;1234:125;1215:183;;1388:1;1385;1378:12;1215:183;-1:-1:-1;1473:17:89;1424:22;;1448;1420:51;1416:75;;1005:496::o;1660:322:90:-;1721:9;1826;;1885:3;1880:1;1873:9;;1861:22;1857:32;1851:39;;1823:70;1820:104;;;1914:1;1911;1904:12;1820:104;-1:-1:-1;1952:3:90;1945:11;;;;1965:1;1958:9;;1941:27;1937:35;;1660:322::o;700:334:88:-;810:7;;881:46;899:28;;;881:15;:46;:::i;:::-;873:55;;:4;:55;:::i;:::-;376:8;961:25;;;-1:-1:-1;1006:23:88;961:25;704:4:90;1006:23:88;:::i;:::-;999:30;700:334;-1:-1:-1;;;;700:334:88:o;2198:2524:1:-;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;-1:-1:-1;;4611:1:1;4605:8;4598:16;4591:24;;2198:2524;-1:-1:-1;2198:2524:1:o;2809:545:85:-;2940:27;;;;2906:7;;2940:27;;;;;3022:15;3009:28;;3005:345;;;-1:-1:-1;;3141:27:85;;;;;;2809:545::o;3005:345::-;3306:27;;;;3204:139;;3306:27;;;;;3204:83;;3242:33;;;;;3277:9;3256:7:88;3278:71;3306:4;3312:19;3333:15;1924:7;;1984:47;2003:28;;;1984:16;:47;:::i;:::-;1970:61;-1:-1:-1;2042:8:88;2038:50;;704:4:90;2060:21:88;;;;;2038:50;2230:7;;;2094:19;;;2266:1;2260:7;;:21;;2280:1;2260:21;;;2276:1;2270:3;:7;2260:21;2246:35;-1:-1:-1;2326:35:88;2305:17;2317:4;;2305:11;:17::i;:::-;:57;;;;;:::i;:::-;;;-1:-1:-1;376:8:88;2387:25;2305:57;2407:4;2387:19;:25::i;:::-;:44;;;;;:::i;:::-;;;-1:-1:-1;2444:18:88;2485:12;2465:17;2471:11;2465:3;:17;:::i;:::-;:32;;;;:::i;:::-;2535:1;2521:15;;;-1:-1:-1;2548:17:88;2602:14;2588:11;2568:17;2574:11;2568:3;:17;:::i;:::-;:31;;;;:::i;:::-;:48;;;;:::i;:::-;2653:1;2640:14;;;-1:-1:-1;2640:14:88;2725:10;376:8;2692:10;2699:3;2692:4;:10;:::i;:::-;2691:31;;;;:::i;:::-;2674:48;;704:4:90;2674:48:88;:::i;:::-;:61;;;;:::i;:::-;:73;;;;:::i;:::-;2667:80;1780:972;-1:-1:-1;;;;;;;;;;;1780:972:88:o;14:196:201:-;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:306::-;335:6;343;396:2;384:9;375:7;371:23;367:32;364:52;;;412:1;409;402:12;364:52;448:9;435:23;425:33;;477:38;511:2;500:9;496:18;477:38;:::i;:::-;467:48;;215:306;;;;;:::o;526:407::-;598:2;592:9;640:4;628:17;;675:18;660:34;;696:22;;;657:62;654:242;;;752:77;749:1;742:88;853:4;850:1;843:15;881:4;878:1;871:15;654:242;912:2;905:22;526:407;:::o;938:400::-;1005:2;999:9;1047:2;1035:15;;1080:18;1065:34;;1101:22;;;1062:62;1059:242;;;1157:77;1154:1;1147:88;1258:4;1255:1;1248:15;1286:4;1283:1;1276:15;1343:407;1415:2;1409:9;1457:4;1445:17;;1492:18;1477:34;;1513:22;;;1474:62;1471:242;;;1569:77;1566:1;1559:88;1670:4;1667:1;1660:15;1698:4;1695:1;1688:15;1755:1284;2019:6;2027;2035;2043;2087:9;2078:7;2074:23;2117:3;2113:2;2109:12;2106:32;;;2134:1;2131;2124:12;2106:32;2157:23;;;-1:-1:-1;2227:2:201;2212:18;;2199:32;;-1:-1:-1;2278:2:201;2263:18;;2250:32;;-1:-1:-1;2309:66:201;2301:75;2396:4;2388:13;;2385:33;;;2414:1;2411;2404:12;2385:33;2440:22;;:::i;:::-;2482:2;2478;2474:11;2471:31;;;2498:1;2495;2488:12;2471:31;2526:17;;:::i;:::-;2511:32;;2596:2;2585:9;2581:18;2568:32;2559:7;2552:49;2624:7;2617:5;2610:22;2692:3;2681:9;2677:19;2664:33;2659:2;2652:5;2648:14;2641:57;2730:40;2764:4;2753:9;2749:20;2730:40;:::i;:::-;2725:2;2718:5;2714:14;2707:64;2803:39;2837:3;2826:9;2822:19;2803:39;:::i;:::-;2798:2;2791:5;2787:14;2780:63;2895:3;2884:9;2880:19;2867:33;2852:48;;2944:4;2935:7;2931:18;2922:7;2919:31;2909:59;;2964:1;2961;2954:12;2909:59;2995:3;2984:15;;2977:32;;;;1755:1284;;;;-1:-1:-1;1755:1284:201;;-1:-1:-1;;1755:1284:201:o;3592:735::-;3739:6;3747;3755;3808:2;3796:9;3787:7;3783:23;3779:32;3776:52;;;3824:1;3821;3814:12;3776:52;3860:9;3847:23;3837:33;;3921:2;3910:9;3906:18;3893:32;3944:18;3985:2;3977:6;3974:14;3971:34;;;4001:1;3998;3991:12;3971:34;4039:6;4028:9;4024:22;4014:32;;4084:7;4077:4;4073:2;4069:13;4065:27;4055:55;;4106:1;4103;4096:12;4055:55;4146:2;4133:16;4172:2;4164:6;4161:14;4158:34;;;4188:1;4185;4178:12;4158:34;4241:7;4236:2;4226:6;4223:1;4219:14;4215:2;4211:23;4207:32;4204:45;4201:65;;;4262:1;4259;4252:12;4201:65;4293:2;4289;4285:11;4275:21;;4315:6;4305:16;;;;;3592:735;;;;;:::o;4332:159::-;4399:20;;4459:6;4448:18;;4438:29;;4428:57;;4481:1;4478;4471:12;4496:1078;4686:6;4694;4702;4746:9;4737:7;4733:23;4776:3;4772:2;4768:12;4765:32;;;4793:1;4790;4783:12;4765:32;4829:9;4816:23;4806:33;;4886:2;4875:9;4871:18;4858:32;4848:42;;4983:4;4914:66;4910:2;4906:75;4902:86;4899:106;;;5001:1;4998;4991:12;4899:106;;5027:22;;:::i;:::-;5072:38;5106:2;5095:9;5091:18;5072:38;:::i;:::-;5065:5;5058:53;5143:38;5177:2;5166:9;5162:18;5143:38;:::i;:::-;5138:2;5131:5;5127:14;5120:62;5214:39;5248:3;5237:9;5233:19;5214:39;:::i;:::-;5209:2;5202:5;5198:14;5191:63;5286:39;5320:3;5309:9;5305:19;5286:39;:::i;:::-;5281:2;5274:5;5270:14;5263:63;5359:39;5393:3;5382:9;5378:19;5359:39;:::i;:::-;5353:3;5346:5;5342:15;5335:64;5432:39;5465:4;5454:9;5450:20;5432:39;:::i;:::-;5426:3;5419:5;5415:15;5408:64;5505:38;5538:3;5527:9;5523:19;5505:38;:::i;:::-;5499:3;5492:5;5488:15;5481:63;5563:5;5553:15;;;4496:1078;;;;;:::o;5779:328::-;5856:6;5864;5872;5925:2;5913:9;5904:7;5900:23;5896:32;5893:52;;;5941:1;5938;5931:12;5893:52;5964:29;5983:9;5964:29;:::i;:::-;5954:39;;6012:38;6046:2;6035:9;6031:18;6012:38;:::i;:::-;6002:48;;6097:2;6086:9;6082:18;6069:32;6059:42;;5779:328;;;;;:::o;6112:399::-;6266:6;6274;6282;6335:2;6323:9;6314:7;6310:23;6306:32;6303:52;;;6351:1;6348;6341:12;6303:52;6387:9;6374:23;6364:33;;6444:2;6433:9;6429:18;6416:32;6406:42;;6467:38;6501:2;6490:9;6486:18;6467:38;:::i;:::-;6457:48;;6112:399;;;;;:::o;6516:656::-;6628:4;6657:2;6686;6675:9;6668:21;6718:6;6712:13;6761:6;6756:2;6745:9;6741:18;6734:34;6786:1;6796:140;6810:6;6807:1;6804:13;6796:140;;;6905:14;;;6901:23;;6895:30;6871:17;;;6890:2;6867:26;6860:66;6825:10;;6796:140;;;6954:6;6951:1;6948:13;6945:91;;;7024:1;7019:2;7010:6;6999:9;6995:22;6991:31;6984:42;6945:91;-1:-1:-1;7088:2:201;7076:15;7093:66;7072:88;7057:104;;;;7163:2;7053:113;;6516:656;-1:-1:-1;;;6516:656:201:o;7367:184::-;7419:77;7416:1;7409:88;7516:4;7513:1;7506:15;7540:4;7537:1;7530:15;7556:186;7615:6;7668:2;7656:9;7647:7;7643:23;7639:32;7636:52;;;7684:1;7681;7674:12;7636:52;7707:29;7726:9;7707:29;:::i;8182:184::-;8234:77;8231:1;8224:88;8331:4;8328:1;8321:15;8355:4;8352:1;8345:15;8371:195;8410:3;8441:66;8434:5;8431:77;8428:103;;;8511:18;;:::i;:::-;-1:-1:-1;8558:1:201;8547:13;;8371:195::o;8571:197::-;8609:3;8637:6;8678:2;8671:5;8667:14;8705:2;8696:7;8693:15;8690:41;;;8711:18;;:::i;:::-;8760:1;8747:15;;8571:197;-1:-1:-1;;;8571:197:201:o;9004:184::-;9074:6;9127:2;9115:9;9106:7;9102:23;9098:32;9095:52;;;9143:1;9140;9133:12;9095:52;-1:-1:-1;9166:16:201;;9004:184;-1:-1:-1;9004:184:201:o;9193:128::-;9233:3;9264:1;9260:6;9257:1;9254:13;9251:39;;;9270:18;;:::i;:::-;-1:-1:-1;9306:9:201;;9193:128::o;9326:228::-;9366:7;9492:1;9424:66;9420:74;9417:1;9414:81;9409:1;9402:9;9395:17;9391:105;9388:131;;;9499:18;;:::i;:::-;-1:-1:-1;9539:9:201;;9326:228::o;9559:184::-;9611:77;9608:1;9601:88;9708:4;9705:1;9698:15;9732:4;9729:1;9722:15;9748:125;9788:4;9816:1;9813;9810:8;9807:34;;;9821:18;;:::i;:::-;-1:-1:-1;9858:9:201;;9748:125::o;10228:274::-;10268:1;10294;10284:189;;10329:77;10326:1;10319:88;10430:4;10427:1;10420:15;10458:4;10455:1;10448:15;10284:189;-1:-1:-1;10487:9:201;;10228:274::o"},"gasEstimates":{"creation":{"codeDepositCost":"1935800","executionCost":"2079","totalCost":"1937879"},"external":{"executeDropReserve(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,address)":"infinite","executeGetUserAccountData(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.CalculateUserAccountDataParams)":"infinite","executeInitReserve(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.InitReserveParams)":"infinite","executeMintToTreasury(mapping(address => DataTypes.ReserveData) storage,address[])":"infinite","executeRescueTokens(address,address,uint256)":"infinite","executeResetIsolationModeTotalDebt(mapping(address => DataTypes.ReserveData) storage,address)":"infinite"}},"methodIdentifiers":{"executeDropReserve(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,address)":"9cf57023","executeGetUserAccountData(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.CalculateUserAccountDataParams)":"26ec273f","executeInitReserve(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.InitReserveParams)":"69fc1bdf","executeMintToTreasury(mapping(address => DataTypes.ReserveData) storage,address[])":"48c2ca8c","executeRescueTokens(address,address,uint256)":"87b322b2","executeResetIsolationModeTotalDebt(mapping(address => DataTypes.ReserveData) storage,address)":"1e3b4145"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalDebt\",\"type\":\"uint256\"}],\"name\":\"IsolationModeTotalDebtUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountMinted\",\"type\":\"uint256\"}],\"name\":\"MintedToTreasury\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"executeDropReserve(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\"}},\"executeGetUserAccountData(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.CalculateUserAccountDataParams)\":{\"params\":{\"eModeCategories\":\"The configuration of all the efficiency mode categories\",\"params\":\"Additional params needed for the calculation\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\"},\"returns\":{\"availableBorrowsBase\":\"The borrowing power left of the user in the base currency used by the price feed\",\"currentLiquidationThreshold\":\"The liquidation threshold of the user\",\"healthFactor\":\"The current health factor of the user\",\"ltv\":\"The loan to value of The user\",\"totalCollateralBase\":\"The total collateral of the user in the base currency used by the price feed\",\"totalDebtBase\":\"The total debt of the user in the base currency used by the price feed\"}},\"executeInitReserve(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.InitReserveParams)\":{\"params\":{\"params\":\"Additional parameters needed for initiation\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\"},\"returns\":{\"_0\":\"true if appended, false if inserted at existing empty spot\"}},\"executeMintToTreasury(mapping(address => DataTypes.ReserveData) storage,address[])\":{\"params\":{\"assets\":\"The list of reserves for which the minting needs to be executed\",\"reservesData\":\"The state of all the reserves\"}},\"executeRescueTokens(address,address,uint256)\":{\"params\":{\"amount\":\"The amount of token to transfer\",\"to\":\"The address of the recipient\",\"token\":\"The address of the token\"}},\"executeResetIsolationModeTotalDebt(mapping(address => DataTypes.ReserveData) storage,address)\":{\"details\":\"It requires the given asset has zero debt ceiling\",\"params\":{\"asset\":\"The address of the underlying asset to reset the isolationModeTotalDebt\",\"reservesData\":\"The state of all the reserves\"}}},\"title\":\"PoolLogic library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeDropReserve(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,address)\":{\"notice\":\"Drop a reserve\"},\"executeGetUserAccountData(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.CalculateUserAccountDataParams)\":{\"notice\":\"Returns the user account data across all the reserves\"},\"executeInitReserve(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.InitReserveParams)\":{\"notice\":\"Initialize an asset reserve and add the reserve to the list of reserves\"},\"executeMintToTreasury(mapping(address => DataTypes.ReserveData) storage,address[])\":{\"notice\":\"Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\"},\"executeRescueTokens(address,address,uint256)\":{\"notice\":\"Rescue and transfer tokens locked in this contract\"},\"executeResetIsolationModeTotalDebt(mapping(address => DataTypes.ReserveData) storage,address)\":{\"notice\":\"Resets the isolation mode total debt of the given asset to zero\"}},\"notice\":\"Implements the logic for Pool specific functions\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/libraries/logic/PoolLogic.sol\":\"PoolLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\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(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\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 {AccessControl-_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) external view returns (bool);\\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 {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\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) external;\\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) external;\\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) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/PoolLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\n\\n/**\\n * @title PoolLogic library\\n * @author Aave\\n * @notice Implements the logic for Pool specific functions\\n */\\nlibrary PoolLogic {\\n  using GPv2SafeERC20 for IERC20;\\n  using WadRayMath for uint256;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice Initialize an asset reserve and add the reserve to the list of reserves\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param params Additional parameters needed for initiation\\n   * @return true if appended, false if inserted at existing empty spot\\n   */\\n  function executeInitReserve(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.InitReserveParams memory params\\n  ) external returns (bool) {\\n    require(Address.isContract(params.asset), Errors.NOT_CONTRACT);\\n    reservesData[params.asset].init(\\n      params.aTokenAddress,\\n      params.stableDebtAddress,\\n      params.variableDebtAddress,\\n      params.interestRateStrategyAddress\\n    );\\n\\n    bool reserveAlreadyAdded = reservesData[params.asset].id != 0 ||\\n      reservesList[0] == params.asset;\\n    require(!reserveAlreadyAdded, Errors.RESERVE_ALREADY_ADDED);\\n\\n    for (uint16 i = 0; i < params.reservesCount; i++) {\\n      if (reservesList[i] == address(0)) {\\n        reservesData[params.asset].id = i;\\n        reservesList[i] = params.asset;\\n        return false;\\n      }\\n    }\\n\\n    require(params.reservesCount < params.maxNumberReserves, Errors.NO_MORE_RESERVES_ALLOWED);\\n    reservesData[params.asset].id = params.reservesCount;\\n    reservesList[params.reservesCount] = params.asset;\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function executeRescueTokens(address token, address to, uint256 amount) external {\\n    IERC20(token).safeTransfer(to, amount);\\n  }\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param reservesData The state of all the reserves\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function executeMintToTreasury(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] calldata assets\\n  ) external {\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      address assetAddress = assets[i];\\n\\n      DataTypes.ReserveData storage reserve = reservesData[assetAddress];\\n\\n      // this cover both inactive reserves and invalid reserves since the flag will be 0 for both\\n      if (!reserve.configuration.getActive()) {\\n        continue;\\n      }\\n\\n      uint256 accruedToTreasury = reserve.accruedToTreasury;\\n\\n      if (accruedToTreasury != 0) {\\n        reserve.accruedToTreasury = 0;\\n        uint256 normalizedIncome = reserve.getNormalizedIncome();\\n        uint256 amountToMint = accruedToTreasury.rayMul(normalizedIncome);\\n        IAToken(reserve.aTokenAddress).mintToTreasury(amountToMint, normalizedIncome);\\n\\n        emit MintedToTreasury(assetAddress, amountToMint);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param reservesData The state of all the reserves\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function executeResetIsolationModeTotalDebt(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address asset\\n  ) external {\\n    require(reservesData[asset].configuration.getDebtCeiling() == 0, Errors.DEBT_CEILING_NOT_ZERO);\\n    reservesData[asset].isolationModeTotalDebt = 0;\\n    emit IsolationModeTotalDebtUpdated(asset, 0);\\n  }\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function executeDropReserve(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    address asset\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    ValidationLogic.validateDropReserve(reservesList, reserve, asset);\\n    reservesList[reservesData[asset].id] = address(0);\\n    delete reservesData[asset];\\n  }\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the calculation\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function executeGetUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    )\\n  {\\n    (\\n      totalCollateralBase,\\n      totalDebtBase,\\n      ltv,\\n      currentLiquidationThreshold,\\n      healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(reservesData, reservesList, eModeCategories, params);\\n\\n    availableBorrowsBase = GenericLogic.calculateAvailableBorrows(\\n      totalCollateralBase,\\n      totalDebtBase,\\n      ltv\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x87d386100fb287b49ef144b0ea2269d2842998b426ba5c018dce9f1bc09f1913\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeDropReserve(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,address)":{"notice":"Drop a reserve"},"executeGetUserAccountData(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.CalculateUserAccountDataParams)":{"notice":"Returns the user account data across all the reserves"},"executeInitReserve(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.InitReserveParams)":{"notice":"Initialize an asset reserve and add the reserve to the list of reserves"},"executeMintToTreasury(mapping(address => DataTypes.ReserveData) storage,address[])":{"notice":"Mints the assets accrued through the reserve factor to the treasury in the form of aTokens"},"executeRescueTokens(address,address,uint256)":{"notice":"Rescue and transfer tokens locked in this contract"},"executeResetIsolationModeTotalDebt(mapping(address => DataTypes.ReserveData) storage,address)":{"notice":"Resets the isolation mode total debt of the given asset to zero"}},"notice":"Implements the logic for Pool specific functions","version":1}}},"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol":{"ReserveLogic":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"uint256","name":"liquidityRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stableBorrowRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"variableBorrowRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"variableBorrowIndex","type":"uint256"}],"name":"ReserveDataUpdated","type":"event"}],"devdoc":{"author":"Aave","kind":"dev","methods":{},"title":"ReserveLogic library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b63a1d243e21348d35e28c7f93edff036d79a198698992f0ef8449dc38ba433e64736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB6 GASPRICE SAR 0x24 RETURNDATACOPY 0x21 CALLVALUE DUP14 CALLDATALOAD 0xE2 DUP13 PUSH32 0x93EDFF036D79A198698992F0EF8449DC38BA433E64736F6C634300080A003300 ","sourceMap":"1020:13181:85:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1020:13181:85;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b63a1d243e21348d35e28c7f93edff036d79a198698992f0ef8449dc38ba433e64736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB6 GASPRICE SAR 0x24 RETURNDATACOPY 0x21 CALLVALUE DUP14 CALLDATALOAD 0xE2 DUP13 PUSH32 0x93EDFF036D79A198698992F0EF8449DC38BA433E64736F6C634300080A003300 ","sourceMap":"1020:13181:85:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_accrueToTreasury(struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)":"infinite","_updateIndexes(struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)":"infinite","cache(struct DataTypes.ReserveData storage pointer)":"infinite","cumulateToLiquidityIndex(struct DataTypes.ReserveData storage pointer,uint256,uint256)":"infinite","getNormalizedDebt(struct DataTypes.ReserveData storage pointer)":"infinite","getNormalizedIncome(struct DataTypes.ReserveData storage pointer)":"infinite","init(struct DataTypes.ReserveData storage pointer,address,address,address,address)":"infinite","updateInterestRates(struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address,uint256,uint256)":"infinite","updateState(struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidityRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stableBorrowRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"variableBorrowRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidityIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"variableBorrowIndex\",\"type\":\"uint256\"}],\"name\":\"ReserveDataUpdated\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{},\"title\":\"ReserveLogic library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Implements the logic to update the reserves state\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol\":\"ReserveLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Implements the logic to update the reserves state","version":1}}},"@aave/core-v3/contracts/protocol/libraries/logic/SupplyLogic.sol":{"SupplyLogic":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"Supply","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"executeFinalizeTransfer(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,mapping(address => DataTypes.UserConfigurationMap) storage,DataTypes.FinalizeTransferParams)":{"details":"Emits the `ReserveUsedAsCollateralEnabled()` event for the `to` account, if the asset is being activated as collateral.In case the `from` user transfers everything, `ReserveUsedAsCollateralDisabled()` is emitted for `from`.","params":{"eModeCategories":"The configuration of all the efficiency mode categories","params":"The additional parameters needed to execute the finalizeTransfer function","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves","usersConfig":"The users configuration mapping that track the supplied/borrowed assets"}},"executeSupply(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteSupplyParams)":{"details":"Emits the `Supply()` event.In the first supply action, `ReserveUsedAsCollateralEnabled()` is emitted, if the asset can be enabled as collateral.","params":{"params":"The additional parameters needed to execute the supply function","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves","userConfig":"The user configuration mapping that tracks the supplied/borrowed assets"}},"executeUseReserveAsCollateral(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,address,bool,uint256,address,uint8)":{"details":"Emits the `ReserveUsedAsCollateralEnabled()` event if the asset can be activated as collateral.In case the asset is being deactivated as collateral, `ReserveUsedAsCollateralDisabled()` is emitted.","params":{"asset":"The address of the asset being configured as collateral","eModeCategories":"The configuration of all the efficiency mode categories","priceOracle":"The address of the price oracle","reservesCount":"The number of initialized reserves","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves","useAsCollateral":"True if the user wants to set the asset as collateral, false otherwise","userConfig":"The users configuration mapping that track the supplied/borrowed assets","userEModeCategory":"The eMode category chosen by the user"}},"executeWithdraw(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteWithdrawParams)":{"details":"Emits the `Withdraw()` event.If the user withdraws everything, `ReserveUsedAsCollateralDisabled()` is emitted.","params":{"eModeCategories":"The configuration of all the efficiency mode categories","params":"The additional parameters needed to execute the withdraw function","reservesData":"The state of all the reserves","reservesList":"The addresses of all the active reserves","userConfig":"The user configuration mapping that tracks the supplied/borrowed assets"},"returns":{"_0":"The actual amount withdrawn"}}},"title":"SupplyLogic library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"613da061003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c8063186dea441461005b5780631913f1611461008d5780638a5dadd1146100af578063bf697a26146100cf575b600080fd5b81801561006757600080fd5b5061007b6100763660046136a7565b6100ef565b60405190815260200160405180910390f35b81801561009957600080fd5b506100ad6100a836600461377e565b6104a2565b005b8180156100bb57600080fd5b506100ad6100ca366004613832565b610751565b8180156100db57600080fd5b506100ad6100ea36600461393b565b610a2d565b805173ffffffffffffffffffffffffffffffffffffffff1660009081526020869052604081208161011f82610cf9565b905061012b8282610f12565b6101008101516101e08201516040517f1da24f3e0000000000000000000000000000000000000000000000000000000081523360048201526000926101d692909173ffffffffffffffffffffffffffffffffffffffff90911690631da24f3e906024015b602060405180830381865afa1580156101ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d091906139c6565b90610f9d565b60208601519091507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114156102095750805b610214838284610ff4565b85516102269085908590600085611211565b600384015460408051602081019091528854815260009161026491907501000000000000000000000000000000000000000000900461ffff16611552565b905080801561027257508282145b156102eb5760038501546102a69089907501000000000000000000000000000000000000000000900461ffff1660006115dd565b8651604051339173ffffffffffffffffffffffffffffffffffffffff16907f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd90600090a35b6101e084015160408089015161010087015191517fd7020d0a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff91821660248201526044810186905260648101929092529091169063d7020d0a90608401600060405180830381600087803b15801561037b57600080fd5b505af115801561038f573d6000803e3d6000fd5b505050508080156103d1575060408051602081019091528854908190527f55555555555555555555555555555555555555555555555555555555555555551615155b1561040c5761040c8b8b8b8b6040518060200160405290816000820154815250508b60000151338d606001518e608001518f60a00151611674565b866040015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16886000015173ffffffffffffffffffffffffffffffffffffffff167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78560405161048a91815260200190565b60405180910390a45093505050505b95945050505050565b805173ffffffffffffffffffffffffffffffffffffffff166000908152602085905260408120906104d282610cf9565b90506104de8282610f12565b6104ed81838560200151611830565b825160208401516105049184918491906000611211565b6101e0810151602084015184516105369273ffffffffffffffffffffffffffffffffffffffff90911691339190611bb8565b6101e0810151604080850151602086015161010085015192517fb3f1c93d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff928316602482015260448101919091526064810192909252600092169063b3f1c93d906084016020604051808303816000875af11580156105d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f691906139df565b905080156106ab57610615878787856101c00151866101e00151611c9a565b156106ab5760038301546106499086907501000000000000000000000000000000000000000000900461ffff1660016115dd565b836040015173ffffffffffffffffffffffffffffffffffffffff16846000015173ffffffffffffffffffffffffffffffffffffffff167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a35b836060015161ffff16846040015173ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f2b627736bca15cd5381dcf80b0bf11fd197d01a037c52b927a881a10fb73ba6133886020015160405161074092919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a450505050505050565b805173ffffffffffffffffffffffffffffffffffffffff16600090815260208690526040902061078081611eda565b600381015460408301516020840151750100000000000000000000000000000000000000000090920461ffff169173ffffffffffffffffffffffffffffffffffffffff9182169116148015906107d95750606083015115155b15610a245760208084015173ffffffffffffffffffffffffffffffffffffffff1660009081528582526040908190208151928301909152805482529061081f9083611552565b156109575760408051602081019091528154908190527f555555555555555555555555555555555555555555555555555555555555555516156108d8576108d8888888886000896020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806020016040529081600082015481525050886000015189602001518a60c001518b60e001518c6101000151611674565b836060015184608001511415610957576108f4818360006115dd565b836020015173ffffffffffffffffffffffffffffffffffffffff16846000015173ffffffffffffffffffffffffffffffffffffffff167f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd60405160405180910390a35b60a0840151610a225760408085015173ffffffffffffffffffffffffffffffffffffffff908116600090815260208881529083902083519182019093528554815260048601546109ad928c928c92869216611c9a565b15610a20576109be818460016115dd565b846040015173ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a35b505b505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208a90526040812090610a5c82610cf9565b6101e08101516040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015291925060009173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015610ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af791906139c6565b9050610b038282611f62565b600383015460408051602081019091528a548152610b3d917501000000000000000000000000000000000000000000900461ffff16611552565b15158715151415610b5057505050610a20565b8615610c5557610b678c8c8b856101c00151612107565b6040518060400160405280600281526020017f363200000000000000000000000000000000000000000000000000000000000081525090610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b60405180910390fd5b506003830154610c0e908a907501000000000000000000000000000000000000000000900461ffff1660016115dd565b604051339073ffffffffffffffffffffffffffffffffffffffff8a16907e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f290600090a3610ceb565b6003830154610c84908a907501000000000000000000000000000000000000000000900461ffff1660006115dd565b604080516020810190915289548152610ca7908d908d908d908c338c8c8c611674565b604051339073ffffffffffffffffffffffffffffffffffffffff8a16907f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd90600090a35b505050505050505050505050565b610d016134cf565b610d096134cf565b60408051602081018252845481526101c0830181905251901c61ffff166101a082015260018301546fffffffffffffffffffffffffffffffff808216610100840181905260e0840152600285015480821661014085018190526101208501527001000000000000000000000000000000009283900482166101608501528290041661018083015260048085015473ffffffffffffffffffffffffffffffffffffffff9081166101e085015260058601548116610200850152600686015416610220840181905260038601549290920464ffffffffff16610240840152604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905163b1bf962d928281019260209291908290030181865afa158015610e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5a91906139c6565b816020018181525081600001818152505080610200015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa158015610ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edf9190613a6f565b64ffffffffff166102608501526060840181905260808401829052604084019290925260c083015260a082015292915050565b60038201544264ffffffffff908116700100000000000000000000000000000000909204161415610f41575050565b610f4b82826121a4565b610f5582826122c6565b5060030180547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff1602179055565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517610fd257600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b60408051808201909152600281527f3236000000000000000000000000000000000000000000000000000000000000602082015282611060576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5060408051808201909152600281527f33320000000000000000000000000000000000000000000000000000000000006020820152818311156110d0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b50600080611125856101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b94505050509150816040518060400160405280600281526020017f32370000000000000000000000000000000000000000000000000000000000008152509061119b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5060408051808201909152600281527f323900000000000000000000000000000000000000000000000000000000000060208201528115611209576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b505050505050565b61123c6040518060800160405280600081526020016000815260200160008152602001600081525090565b610140850151602086015161125091610f9d565b60608083019182526007880154604080516101208101825260088b01546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000009091041681526020810188905280820187905260c0808b0151948201949094529351608085015260a0808a0151908501526101a08901519284019290925273ffffffffffffffffffffffffffffffffffffffff87811660e08501526101e0890151811661010085015291517fa589870900000000000000000000000000000000000000000000000000000000815291169163a5898709916113b19190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa1580156113ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f29190613aba565b604084015260208301528082526114089061244b565b6001870180546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055602081015161144b9061244b565b6003870180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055604081015161149c9061244b565b6002870180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905580516020808301516040808501516101008a01516101408b0151835196875294860193909352908401526060830152608082015273ffffffffffffffffffffffffffffffffffffffff8516907f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a9060a00160405180910390a2505050505050565b60408051808201909152600281527f37340000000000000000000000000000000000000000000000000000000000006020820152600090608083106115c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b50508151600182811b81019190911c1615155b92915050565b60408051808201909152600281527f373400000000000000000000000000000000000000000000000000000000000060208201526080831061164c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b50600182811b81011b81156116665783548117845561166e565b835481191684555b50505050565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260208b8152604080832081516102008101835281546101e08201908152815260018201546fffffffffffffffffffffffffffffffff80821695830195909552700100000000000000000000000000000000908190048516938201939093526002820154808516606083015283900484166080820152600382015480851660a083015283810464ffffffffff1660c08301527501000000000000000000000000000000000000000000900461ffff1660e0820152600482015486166101008201526005820154861661012082015260068201548616610140820152600782015490951661016086015260088101548084166101808701529190910482166101a085015260090154166101c08301526117ae8b8b8b8b8a888b8b6124f1565b9150508015806117c2575081515161ffff16155b6040518060400160405280600281526020017f353700000000000000000000000000000000000000000000000000000000000081525090610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b60408051808201909152600281527f323600000000000000000000000000000000000000000000000000000000000060208201528161189c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5060008060006118f3866101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b9450505092509250826040518060400160405280600281526020017f32370000000000000000000000000000000000000000000000000000000000008152509061196a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5060408051808201909152600281527f3239000000000000000000000000000000000000000000000000000000000000602082015281156119d8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5060408051808201909152600281527f323800000000000000000000000000000000000000000000000000000000000060208201528215611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b506101c08601515160741c640fffffffff16801580611b4a57506101c08701515160301c60ff16611a7890600a613c37565b611a829082613c43565b85611b3d8961010001518960080160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168b6101e0015173ffffffffffffffffffffffffffffffffffffffff1663b1bf962d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3391906139c6565b6101d09190613c80565b611b479190613c80565b11155b6040518060400160405280600281526020017f353100000000000000000000000000000000000000000000000000000000000081525090610a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af1611c23573d6000803e3d6000fd5b50611c2d856125ec565b611c93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d000000000000006044820152606401610bd5565b5050505050565b815160009060d41c64ffffffffff1615611ec45760008273ffffffffffffffffffffffffffffffffffffffff16637535d2466040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1f9190613c98565b73ffffffffffffffffffffffffffffffffffffffff16630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8d9190613c98565b90508073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfe9190613c98565b6040517f91d148540000000000000000000000000000000000000000000000000000000081527fd1d2cf869016112a9af1107bcf43c3759daf22cf734aad47d0c9c726e33bc782600482015233602482015273ffffffffffffffffffffffffffffffffffffffff91909116906391d1485490604401602060405180830381865afa158015611e90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb491906139df565b611ec2576000915050610499565b505b611ed086868686612107565b9695505050505050565b60408051602080820183528354918290528251808401909352600283527f3239000000000000000000000000000000000000000000000000000000000000908301526710000000000000001615611f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5050565b60408051808201909152600281527f3433000000000000000000000000000000000000000000000000000000000000602082015281611fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b50600080612023846101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b94505050509150816040518060400160405280600281526020017f323700000000000000000000000000000000000000000000000000000000000081525090612099576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5060408051808201909152600281527f323900000000000000000000000000000000000000000000000000000000000060208201528115611c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b6000612115825161ffff1690565b6121215750600061219c565b60408051602081019091528354908190527faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa166121605750600161219c565b60408051602081019091528354815260009061217d9087876126b8565b50509050801580156121985750825160d41c64ffffffffff16155b9150505b949350505050565b610160810151156122345760006121c5826101600151836102400151612770565b90506121de8260e0015182610f9d90919063ffffffff16565b61010083018190526121ef9061244b565b6001840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b805115611f5e5760006122518261018001518361024001516127ad565b905061226b82610120015182610f9d90919063ffffffff16565b610140830181905261227c9061244b565b6002840180546fffffffffffffffffffffffffffffffff929092167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216919091179055505050565b6122ff6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6101a082015161230e57505050565b610120820151825161231f91610f9d565b6020820152610140820151825161233591610f9d565b6040820152606082015161026083015161024084015161235d92919064ffffffffff166127c1565b60608201819052604083015161237291610f9d565b80825260208201516080840151604084015161238e9190613c80565b6123989190613cb5565b6123a29190613cb5565b608082018190526101a08301516123b99190612908565b60a0820181905215612446576123e96123e48361010001518360a0015161294b90919063ffffffff16565b61244b565b60088401805460009061240f9084906fffffffffffffffffffffffffffffffff16613ccc565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b505050565b60006fffffffffffffffffffffffffffffffff8211156124ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610bd5565b5090565b6000806000806125588c8c8c6040518060a001604052808e81526020018b81526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018c60ff1681525061298a565b9550955050505050670de0b6b3a76400008210156040518060400160405280600281526020017f3335000000000000000000000000000000000000000000000000000000000000815250906125da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b50909b909a5098505050505050505050565b600061262c565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d801561266b57602081146126a5576126667f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f6125f3565b6126b2565b823b61269c5761269c7f475076323a206e6f74206120636f6e747261637400000000000000000000000060146125f3565b600191506126b2565b3d6000803e600051151591505b50919050565b60008060006126c686612ef4565b1561275d5760006126f7877faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa612f38565b6000818152602087815260408083205473ffffffffffffffffffffffffffffffffffffffff168084528a8352818420825193840190925290549182905292935060d41c64ffffffffff1690508015612759576001955090935091506127679050565b5050505b5060009150819050805b93509350939050565b60008061278464ffffffffff841642613cb5565b61278e9085613c43565b6301e133809004905061219c816b033b2e3c9fd0803ce8000000613c80565b60006127ba8383426127c1565b9392505050565b6000806127d564ffffffffff851684613cb5565b9050806127f1576b033b2e3c9fd0803ce80000009150506127ba565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101600080806002851161282757600061282c565b600285035b925066038882915c40006128408a80610f9d565b8161284d5761284d613d00565b0491506301e1338061285f838b610f9d565b8161286c5761286c613d00565b04905060008261287c8688613c43565b6128869190613c43565b6002900490506000828561289a888a613c43565b6128a49190613c43565b6128ae9190613c43565b60069004905080826301e133806128c58a8f613c43565b6128cf9190613d2f565b6128e5906b033b2e3c9fd0803ce8000000613c80565b6128ef9190613c80565b6128f99190613c80565b9b9a5050505050505050505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec778390048411151761293d57600080fd5b506127109102611388010490565b600081156b033b2e3c9fd0803ce80000006002840419048411171561296f57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b6000806000806000806129a08760000151511590565b156129dc5750600094508493508392508291507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905081612ee7565b612a8b60405180610260016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581525090565b608088015160ff1615612ad057608088015160ff16600090815260208a9052604090206060890151612abd9190612f7c565b6101808401526101c08301526101a08201525b87602001518160c001511015612def5760c08101518851612af09161305b565b612b045760c0810180516001019052612ad0565b60c0810151600090815260208b9052604090205473ffffffffffffffffffffffffffffffffffffffff166102008201819052612b4a5760c0810180516001019052612ad0565b61020081015173ffffffffffffffffffffffffffffffffffffffff16600090815260208c8152604091829020825180830190935280549283905260ff60a884901c81166101e0860152603084901c166060850181905261ffff601085901c811660a08701529093166080850152600a9290920a9083015261018082015115801590612be05750816101e00151896080015160ff16145b612c845760608901516102008301516040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063b3596f0790602401602060405180830381865afa158015612c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7f91906139c6565b612c8b565b8161018001515b825260a082015115801590612cab575060c08201518951612cab91611552565b15612d9b57612cc8896040015182846000015185602001516130e0565b6040830181905261010083018051612ce1908390613c80565b90525060808901516101e0830151612cfc9160ff169061317d565b1515610240830152608082015115612d5257816102400151612d22578160800151612d29565b816101a001515b8260400151612d389190613c43565b8261014001818151612d4a9190613c80565b905250612d5b565b60016102208301525b816102400151612d6f578160a00151612d76565b816101c001515b8260400151612d859190613c43565b8261016001818151612d979190613c80565b9052505b60c08201518951612dab9161318e565b15612dde57612dc889604001518284600001518560200151613210565b8261012001818151612dda9190613c80565b9052505b5060c0810180516001019052612ad0565b610100810151612e00576000612e1b565b80610100015181610140015181612e1957612e19613d00565b045b610140820152610100810151612e32576000612e4d565b80610100015181610160015181612e4b57612e4b613d00565b045b61016082015261012081015115612e8f57612e8a816101200151612e8483610160015184610100015161290890919063ffffffff16565b90613390565b612eb1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b60e0820181905261010082015161012083015161014084015161016085015161022090950151929a509098509650919450925090505b9499939850945094509450565b80516000907faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1680158015906127ba5750612f30600182613cb5565b161592915050565b815160009082167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101198116825b60029190911c90811561049957600101612f67565b81546000908190819081906601000000000000900473ffffffffffffffffffffffffffffffffffffffff168015613040576040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015287169063b3596f0790602401602060405180830381865afa158015613019573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061303d91906139c6565b91505b50945461ffff80821697620100009092041695945092505050565b60408051808201909152600281527f37340000000000000000000000000000000000000000000000000000000000006020820152600090608083106130cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5050905160019190911b1c600316151590565b6000806130ec856133c7565b6004868101546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116938201939093529293506000928792613156928692911690631da24f3e9060240161018f565b6131609190613c43565b905083818161317157613171613d00565b04979650505050505050565b600082158015906127ba5750501490565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310613200576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b50509051600191821b1c16151590565b60068301546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000928392911690631da24f3e90602401602060405180830381865afa158015613286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132aa91906139c6565b905080156132c8576132c56132be8661344b565b8290610f9d565b90505b60058501546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152909116906370a0823190602401602060405180830381865afa15801561333a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335e91906139c6565b6133689082613c80565b90506133748185613c43565b905082818161338557613385613d00565b049695505050505050565b60008115670de0b6b3a7640000600284041904841117156133b057600080fd5b50670de0b6b3a76400009190910260028204010490565b6003810154600090700100000000000000000000000000000000900464ffffffffff164281141561340d575050600101546fffffffffffffffffffffffffffffffff1690565b60018301546127ba906fffffffffffffffffffffffffffffffff808216916101d0917001000000000000000000000000000000009091041684612770565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415613491575050600201546fffffffffffffffffffffffffffffffff1690565b60028301546127ba906fffffffffffffffffffffffffffffffff808216916101d09170010000000000000000000000000000000090910416846127ad565b60405180610280016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016135536040518060200160405280600081525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b60405160c0810167ffffffffffffffff811182821017156135c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b6040516080810167ffffffffffffffff811182821017156135c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156135c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461368357600080fd5b50565b803561369181613661565b919050565b803560ff8116811461369157600080fd5b60008060008060008587036101408112156136c157600080fd5b8635955060208701359450604087013593506060870135925060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808201121561370a57600080fd5b5061371361357c565b608087013561372181613661565b815260a0870135602082015260c087013561373b81613661565b604082015260e0870135606082015261010087013561375981613661565b608082015261376b6101208801613696565b60a0820152809150509295509295909350565b60008060008084860360e081121561379557600080fd5b85359450602086013593506040860135925060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0820112156137d757600080fd5b506137e06135cc565b60608601356137ee81613661565b81526080860135602082015260a086013561380881613661565b604082015260c086013561ffff8116811461382257600080fd5b6060820152939692955090935050565b60008060008060008587036101a081121561384c57600080fd5b86359550602087013594506040870135935060608701359250610120807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808301121561389757600080fd5b61389f613616565b91506138ad60808901613686565b82526138bb60a08901613686565b60208301526138cc60c08901613686565b604083015260e088013560608301526101008089013560808401528189013560a084015261014089013560c08401526139086101608a01613686565b60e084015261391a6101808a01613696565b9083015250949793965091945092919050565b801515811461368357600080fd5b60008060008060008060008060006101208a8c03121561395a57600080fd5b8935985060208a0135975060408a0135965060608a0135955060808a013561398181613661565b945060a08a01356139918161392d565b935060c08a0135925060e08a01356139a881613661565b91506139b76101008b01613696565b90509295985092959850929598565b6000602082840312156139d857600080fd5b5051919050565b6000602082840312156139f157600080fd5b81516127ba8161392d565b600060208083528351808285015260005b81811015613a2957858101830151858201604001528201613a0d565b81811115613a3b576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008060008060808587031215613a8557600080fd5b845193506020850151925060408501519150606085015164ffffffffff81168114613aaf57600080fd5b939692955090935050565b600080600060608486031215613acf57600080fd5b8351925060208401519150604084015190509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115613b7057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613b5657613b56613ae8565b80851615613b6357918102915b93841c9390800290613b1c565b509250929050565b600082613b87575060016115d7565b81613b94575060006115d7565b8160018114613baa5760028114613bb457613bd0565b60019150506115d7565b60ff841115613bc557613bc5613ae8565b50506001821b6115d7565b5060208310610133831016604e8410600b8410161715613bf3575081810a6115d7565b613bfd8383613b17565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613c2f57613c2f613ae8565b029392505050565b60006127ba8383613b78565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c7b57613c7b613ae8565b500290565b60008219821115613c9357613c93613ae8565b500190565b600060208284031215613caa57600080fd5b81516127ba81613661565b600082821015613cc757613cc7613ae8565b500390565b60006fffffffffffffffffffffffffffffffff808316818516808303821115613cf757613cf7613ae8565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082613d65577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212205ae982c63497625f6e0f5d17cf0e2d96671588e68f7a21458812ebbde948aee964736f6c634300080a0033","opcodes":"PUSH2 0x3DA0 PUSH2 0x3A PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x56 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x186DEA44 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0x1913F161 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x8A5DADD1 EQ PUSH2 0xAF JUMPI DUP1 PUSH4 0xBF697A26 EQ PUSH2 0xCF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0x76 CALLDATASIZE PUSH1 0x4 PUSH2 0x36A7 JUMP JUMPDEST PUSH2 0xEF JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH2 0xA8 CALLDATASIZE PUSH1 0x4 PUSH2 0x377E JUMP JUMPDEST PUSH2 0x4A2 JUMP JUMPDEST STOP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH2 0xCA CALLDATASIZE PUSH1 0x4 PUSH2 0x3832 JUMP JUMPDEST PUSH2 0x751 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH2 0xEA CALLDATASIZE PUSH1 0x4 PUSH2 0x393B JUMP JUMPDEST PUSH2 0xA2D JUMP JUMPDEST DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 PUSH2 0x11F DUP3 PUSH2 0xCF9 JUMP JUMPDEST SWAP1 POP PUSH2 0x12B DUP3 DUP3 PUSH2 0xF12 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x1E0 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP3 PUSH2 0x1D6 SWAP3 SWAP1 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D0 SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST SWAP1 PUSH2 0xF9D JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD SWAP1 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 EQ ISZERO PUSH2 0x209 JUMPI POP DUP1 JUMPDEST PUSH2 0x214 DUP4 DUP3 DUP5 PUSH2 0xFF4 JUMP JUMPDEST DUP6 MLOAD PUSH2 0x226 SWAP1 DUP6 SWAP1 DUP6 SWAP1 PUSH1 0x0 DUP6 PUSH2 0x1211 JUMP JUMPDEST PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP9 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x264 SWAP2 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0x1552 JUMP JUMPDEST SWAP1 POP DUP1 DUP1 ISZERO PUSH2 0x272 JUMPI POP DUP3 DUP3 EQ JUMPDEST ISZERO PUSH2 0x2EB JUMPI PUSH1 0x3 DUP6 ADD SLOAD PUSH2 0x2A6 SWAP1 DUP10 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 PUSH2 0x15DD JUMP JUMPDEST DUP7 MLOAD PUSH1 0x40 MLOAD CALLER SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH32 0x44C58D81365B66DD4B1A7F36C25AA97B8C71C361EE4937ADC1A00000227DB5DD SWAP1 PUSH1 0x0 SWAP1 LOG3 JUMPDEST PUSH2 0x1E0 DUP5 ADD MLOAD PUSH1 0x40 DUP1 DUP10 ADD MLOAD PUSH2 0x100 DUP8 ADD MLOAD SWAP2 MLOAD PUSH32 0xD7020D0A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xD7020D0A SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x37B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x38F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 DUP1 ISZERO PUSH2 0x3D1 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP9 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH32 0x5555555555555555555555555555555555555555555555555555555555555555 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x40C JUMPI PUSH2 0x40C DUP12 DUP12 DUP12 DUP12 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP DUP12 PUSH1 0x0 ADD MLOAD CALLER DUP14 PUSH1 0x60 ADD MLOAD DUP15 PUSH1 0x80 ADD MLOAD DUP16 PUSH1 0xA0 ADD MLOAD PUSH2 0x1674 JUMP JUMPDEST DUP7 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x3115D1449A7B732C986CBA18244E897A450F61E1BB8D589CD2E69E6C8924F9F7 DUP6 PUSH1 0x40 MLOAD PUSH2 0x48A SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP SWAP4 POP POP POP POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x4D2 DUP3 PUSH2 0xCF9 JUMP JUMPDEST SWAP1 POP PUSH2 0x4DE DUP3 DUP3 PUSH2 0xF12 JUMP JUMPDEST PUSH2 0x4ED DUP2 DUP4 DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x1830 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x504 SWAP2 DUP5 SWAP2 DUP5 SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x1211 JUMP JUMPDEST PUSH2 0x1E0 DUP2 ADD MLOAD PUSH1 0x20 DUP5 ADD MLOAD DUP5 MLOAD PUSH2 0x536 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 CALLER SWAP2 SWAP1 PUSH2 0x1BB8 JUMP JUMPDEST PUSH2 0x1E0 DUP2 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0x100 DUP6 ADD MLOAD SWAP3 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x64 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x5F6 SWAP2 SWAP1 PUSH2 0x39DF JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x6AB JUMPI PUSH2 0x615 DUP8 DUP8 DUP8 DUP6 PUSH2 0x1C0 ADD MLOAD DUP7 PUSH2 0x1E0 ADD MLOAD PUSH2 0x1C9A JUMP JUMPDEST ISZERO PUSH2 0x6AB JUMPI PUSH1 0x3 DUP4 ADD SLOAD PUSH2 0x649 SWAP1 DUP7 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x1 PUSH2 0x15DD JUMP JUMPDEST DUP4 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH31 0x58A56EA94653CDF4F152D227ACE22D4C00AD99E2A43F58CB7D9E3FEB295F2 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST DUP4 PUSH1 0x60 ADD MLOAD PUSH2 0xFFFF AND DUP5 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x2B627736BCA15CD5381DCF80B0BF11FD197D01A037C52B927A881A10FB73BA61 CALLER DUP9 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x740 SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x780 DUP2 PUSH2 0x1EDA JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x20 DUP5 ADD MLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 SWAP3 DIV PUSH2 0xFFFF AND SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP2 AND EQ DUP1 ISZERO SWAP1 PUSH2 0x7D9 JUMPI POP PUSH1 0x60 DUP4 ADD MLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xA24 JUMPI PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE DUP6 DUP3 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE DUP1 SLOAD DUP3 MSTORE SWAP1 PUSH2 0x81F SWAP1 DUP4 PUSH2 0x1552 JUMP JUMPDEST ISZERO PUSH2 0x957 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP2 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH32 0x5555555555555555555555555555555555555555555555555555555555555555 AND ISZERO PUSH2 0x8D8 JUMPI PUSH2 0x8D8 DUP9 DUP9 DUP9 DUP9 PUSH1 0x0 DUP10 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP DUP9 PUSH1 0x0 ADD MLOAD DUP10 PUSH1 0x20 ADD MLOAD DUP11 PUSH1 0xC0 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x100 ADD MLOAD PUSH2 0x1674 JUMP JUMPDEST DUP4 PUSH1 0x60 ADD MLOAD DUP5 PUSH1 0x80 ADD MLOAD EQ ISZERO PUSH2 0x957 JUMPI PUSH2 0x8F4 DUP2 DUP4 PUSH1 0x0 PUSH2 0x15DD JUMP JUMPDEST DUP4 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x44C58D81365B66DD4B1A7F36C25AA97B8C71C361EE4937ADC1A00000227DB5DD PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST PUSH1 0xA0 DUP5 ADD MLOAD PUSH2 0xA22 JUMPI PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 DUP2 MSTORE SWAP1 DUP4 SWAP1 KECCAK256 DUP4 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP4 MSTORE DUP6 SLOAD DUP2 MSTORE PUSH1 0x4 DUP7 ADD SLOAD PUSH2 0x9AD SWAP3 DUP13 SWAP3 DUP13 SWAP3 DUP7 SWAP3 AND PUSH2 0x1C9A JUMP JUMPDEST ISZERO PUSH2 0xA20 JUMPI PUSH2 0x9BE DUP2 DUP5 PUSH1 0x1 PUSH2 0x15DD JUMP JUMPDEST DUP5 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH31 0x58A56EA94653CDF4F152D227ACE22D4C00AD99E2A43F58CB7D9E3FEB295F2 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST POP JUMPDEST POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0xA5C DUP3 PUSH2 0xCF9 JUMP JUMPDEST PUSH2 0x1E0 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAF7 SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST SWAP1 POP PUSH2 0xB03 DUP3 DUP3 PUSH2 0x1F62 JUMP JUMPDEST PUSH1 0x3 DUP4 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP11 SLOAD DUP2 MSTORE PUSH2 0xB3D SWAP2 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0x1552 JUMP JUMPDEST ISZERO ISZERO DUP8 ISZERO ISZERO EQ ISZERO PUSH2 0xB50 JUMPI POP POP POP PUSH2 0xA20 JUMP JUMPDEST DUP7 ISZERO PUSH2 0xC55 JUMPI PUSH2 0xB67 DUP13 DUP13 DUP12 DUP6 PUSH2 0x1C0 ADD MLOAD PUSH2 0x2107 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3632000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xBDE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x3 DUP4 ADD SLOAD PUSH2 0xC0E SWAP1 DUP11 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x1 PUSH2 0x15DD JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP1 PUSH31 0x58A56EA94653CDF4F152D227ACE22D4C00AD99E2A43F58CB7D9E3FEB295F2 SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH2 0xCEB JUMP JUMPDEST PUSH1 0x3 DUP4 ADD SLOAD PUSH2 0xC84 SWAP1 DUP11 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 PUSH2 0x15DD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP10 SLOAD DUP2 MSTORE PUSH2 0xCA7 SWAP1 DUP14 SWAP1 DUP14 SWAP1 DUP14 SWAP1 DUP13 CALLER DUP13 DUP13 DUP13 PUSH2 0x1674 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP1 PUSH32 0x44C58D81365B66DD4B1A7F36C25AA97B8C71C361EE4937ADC1A00000227DB5DD SWAP1 PUSH1 0x0 SWAP1 LOG3 JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xD01 PUSH2 0x34CF JUMP JUMPDEST PUSH2 0xD09 PUSH2 0x34CF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE DUP5 SLOAD DUP2 MSTORE PUSH2 0x1C0 DUP4 ADD DUP2 SWAP1 MSTORE MLOAD SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x1A0 DUP3 ADD MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH2 0x100 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x2 DUP6 ADD SLOAD DUP1 DUP3 AND PUSH2 0x140 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP6 ADD MSTORE PUSH17 0x100000000000000000000000000000000 SWAP3 DUP4 SWAP1 DIV DUP3 AND PUSH2 0x160 DUP6 ADD MSTORE DUP3 SWAP1 DIV AND PUSH2 0x180 DUP4 ADD MSTORE PUSH1 0x4 DUP1 DUP6 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE PUSH1 0x5 DUP7 ADD SLOAD DUP2 AND PUSH2 0x200 DUP6 ADD MSTORE PUSH1 0x6 DUP7 ADD SLOAD AND PUSH2 0x220 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x3 DUP7 ADD SLOAD SWAP3 SWAP1 SWAP3 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x240 DUP5 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0xB1BF962D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0xB1BF962D SWAP3 DUP3 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE36 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE5A SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP DUP2 PUSH1 0x0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x79774338 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEBB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEDF SWAP2 SWAP1 PUSH2 0x3A6F JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH2 0x260 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP5 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD TIMESTAMP PUSH5 0xFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP3 DIV AND EQ ISZERO PUSH2 0xF41 JUMPI POP POP JUMP JUMPDEST PUSH2 0xF4B DUP3 DUP3 PUSH2 0x21A4 JUMP JUMPDEST PUSH2 0xF55 DUP3 DUP3 PUSH2 0x22C6 JUMP JUMPDEST POP PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0xFD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3236000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH2 0x1060 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3332000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 DUP4 GT ISZERO PUSH2 0x10D0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH2 0x1125 DUP6 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP POP POP POP SWAP2 POP DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x119B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x1209 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x123C PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0x1250 SWAP2 PUSH2 0xF9D JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x7 DUP9 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x8 DUP12 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP9 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP12 ADD MLOAD SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 MLOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP11 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x1A0 DUP10 ADD MLOAD SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x1E0 DUP10 ADD MLOAD DUP2 AND PUSH2 0x100 DUP6 ADD MSTORE SWAP2 MLOAD PUSH32 0xA589870900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0xA5898709 SWAP2 PUSH2 0x13B1 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE 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 PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 SWAP2 POP DUP1 DUP3 DUP7 ADD MLOAD AND DUP3 DUP6 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13F2 SWAP2 SWAP1 PUSH2 0x3ABA JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP1 DUP3 MSTORE PUSH2 0x1408 SWAP1 PUSH2 0x244B JUMP JUMPDEST PUSH1 0x1 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x144B SWAP1 PUSH2 0x244B JUMP JUMPDEST PUSH1 0x3 DUP8 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x149C SWAP1 PUSH2 0x244B JUMP JUMPDEST PUSH1 0x2 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH2 0x100 DUP11 ADD MLOAD PUSH2 0x140 DUP12 ADD MLOAD DUP4 MLOAD SWAP7 DUP8 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0x804C9B842B2748A22BB64B345453A3DE7CA54A6CA45CE00D415894979E22897A SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x15C4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP POP DUP2 MLOAD PUSH1 0x1 DUP3 DUP2 SHL DUP2 ADD SWAP2 SWAP1 SWAP2 SHR AND ISZERO ISZERO JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 DUP4 LT PUSH2 0x164C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x1 DUP3 DUP2 SHL DUP2 ADD SHL DUP2 ISZERO PUSH2 0x1666 JUMPI DUP4 SLOAD DUP2 OR DUP5 SSTORE PUSH2 0x166E JUMP JUMPDEST DUP4 SLOAD DUP2 NOT AND DUP5 SSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP12 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH2 0x200 DUP2 ADD DUP4 MSTORE DUP2 SLOAD PUSH2 0x1E0 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP6 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH17 0x100000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP6 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP3 ADD SLOAD DUP1 DUP6 AND PUSH1 0x60 DUP4 ADD MSTORE DUP4 SWAP1 DIV DUP5 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x3 DUP3 ADD SLOAD DUP1 DUP6 AND PUSH1 0xA0 DUP4 ADD MSTORE DUP4 DUP2 DIV PUSH5 0xFFFFFFFFFF AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD DUP7 AND PUSH2 0x100 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD DUP7 AND PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD DUP7 AND PUSH2 0x140 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD SWAP1 SWAP6 AND PUSH2 0x160 DUP7 ADD MSTORE PUSH1 0x8 DUP2 ADD SLOAD DUP1 DUP5 AND PUSH2 0x180 DUP8 ADD MSTORE SWAP2 SWAP1 SWAP2 DIV DUP3 AND PUSH2 0x1A0 DUP6 ADD MSTORE PUSH1 0x9 ADD SLOAD AND PUSH2 0x1C0 DUP4 ADD MSTORE PUSH2 0x17AE DUP12 DUP12 DUP12 DUP12 DUP11 DUP9 DUP12 DUP12 PUSH2 0x24F1 JUMP JUMPDEST SWAP2 POP POP DUP1 ISZERO DUP1 PUSH2 0x17C2 JUMPI POP DUP2 MLOAD MLOAD PUSH2 0xFFFF AND ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3537000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xCEB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3236000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 PUSH2 0x189C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x18F3 DUP7 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP POP POP SWAP3 POP SWAP3 POP DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x196A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x19D8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3238000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP3 ISZERO PUSH2 0x1A46 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH2 0x1C0 DUP7 ADD MLOAD MLOAD PUSH1 0x74 SHR PUSH5 0xFFFFFFFFF AND DUP1 ISZERO DUP1 PUSH2 0x1B4A JUMPI POP PUSH2 0x1C0 DUP8 ADD MLOAD MLOAD PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0x1A78 SWAP1 PUSH1 0xA PUSH2 0x3C37 JUMP JUMPDEST PUSH2 0x1A82 SWAP1 DUP3 PUSH2 0x3C43 JUMP JUMPDEST DUP6 PUSH2 0x1B3D DUP10 PUSH2 0x100 ADD MLOAD DUP10 PUSH1 0x8 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH2 0x1E0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB1BF962D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B0F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B33 SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST PUSH2 0x1D0 SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST PUSH2 0x1B47 SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST GT ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3531000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xA22 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x1C23 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1C2D DUP6 PUSH2 0x25EC JUMP JUMPDEST PUSH2 0x1C93 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xBD5 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND ISZERO PUSH2 0x1EC4 JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x7535D246 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CFB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D1F SWAP2 SWAP1 PUSH2 0x3C98 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D69 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D8D SWAP2 SWAP1 PUSH2 0x3C98 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DDA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DFE SWAP2 SWAP1 PUSH2 0x3C98 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x91D1485400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0xD1D2CF869016112A9AF1107BCF43C3759DAF22CF734AAD47D0C9C726E33BC782 PUSH1 0x4 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x91D14854 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E90 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1EB4 SWAP2 SWAP1 PUSH2 0x39DF JUMP JUMPDEST PUSH2 0x1EC2 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x499 JUMP JUMPDEST POP JUMPDEST PUSH2 0x1ED0 DUP7 DUP7 DUP7 DUP7 PUSH2 0x2107 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE DUP4 SLOAD SWAP2 DUP3 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP4 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP4 ADD MSTORE PUSH8 0x1000000000000000 AND ISZERO PUSH2 0x1F5E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3433000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 PUSH2 0x1FCE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH2 0x2023 DUP5 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP POP POP POP SWAP2 POP DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2099 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x1C93 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2115 DUP3 MLOAD PUSH2 0xFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x2121 JUMPI POP PUSH1 0x0 PUSH2 0x219C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND PUSH2 0x2160 JUMPI POP PUSH1 0x1 PUSH2 0x219C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x217D SWAP1 DUP8 DUP8 PUSH2 0x26B8 JUMP JUMPDEST POP POP SWAP1 POP DUP1 ISZERO DUP1 ISZERO PUSH2 0x2198 JUMPI POP DUP3 MLOAD PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND ISZERO JUMPDEST SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD ISZERO PUSH2 0x2234 JUMPI PUSH1 0x0 PUSH2 0x21C5 DUP3 PUSH2 0x160 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x2770 JUMP JUMPDEST SWAP1 POP PUSH2 0x21DE DUP3 PUSH1 0xE0 ADD MLOAD DUP3 PUSH2 0xF9D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x100 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x21EF SWAP1 PUSH2 0x244B JUMP JUMPDEST PUSH1 0x1 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1F5E JUMPI PUSH1 0x0 PUSH2 0x2251 DUP3 PUSH2 0x180 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x27AD JUMP JUMPDEST SWAP1 POP PUSH2 0x226B DUP3 PUSH2 0x120 ADD MLOAD DUP3 PUSH2 0xF9D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x140 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x227C SWAP1 PUSH2 0x244B JUMP JUMPDEST PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH2 0x22FF PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x1A0 DUP3 ADD MLOAD PUSH2 0x230E JUMPI POP POP POP JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x231F SWAP2 PUSH2 0xF9D JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x140 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x2335 SWAP2 PUSH2 0xF9D JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x260 DUP4 ADD MLOAD PUSH2 0x240 DUP5 ADD MLOAD PUSH2 0x235D SWAP3 SWAP2 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x27C1 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x2372 SWAP2 PUSH2 0xF9D JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x238E SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST PUSH2 0x2398 SWAP2 SWAP1 PUSH2 0x3CB5 JUMP JUMPDEST PUSH2 0x23A2 SWAP2 SWAP1 PUSH2 0x3CB5 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP4 ADD MLOAD PUSH2 0x23B9 SWAP2 SWAP1 PUSH2 0x2908 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE ISZERO PUSH2 0x2446 JUMPI PUSH2 0x23E9 PUSH2 0x23E4 DUP4 PUSH2 0x100 ADD MLOAD DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0x294B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x244B JUMP JUMPDEST PUSH1 0x8 DUP5 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x240F SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3CCC JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x24ED JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xBD5 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2558 DUP13 DUP13 DUP13 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP15 DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE PUSH1 0x20 ADD DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH1 0xFF AND DUP2 MSTORE POP PUSH2 0x298A JUMP JUMPDEST SWAP6 POP SWAP6 POP POP POP POP POP PUSH8 0xDE0B6B3A7640000 DUP3 LT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3335000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x25DA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP SWAP1 SWAP12 SWAP1 SWAP11 POP SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x262C JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x266B JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x26A5 JUMPI PUSH2 0x2666 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x25F3 JUMP JUMPDEST PUSH2 0x26B2 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x269C JUMPI PUSH2 0x269C PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x25F3 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x26B2 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x26C6 DUP7 PUSH2 0x2EF4 JUMP JUMPDEST ISZERO PUSH2 0x275D JUMPI PUSH1 0x0 PUSH2 0x26F7 DUP8 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA PUSH2 0x2F38 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 DUP5 MSTORE DUP11 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP3 MLOAD SWAP4 DUP5 ADD SWAP1 SWAP3 MSTORE SWAP1 SLOAD SWAP2 DUP3 SWAP1 MSTORE SWAP3 SWAP4 POP PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x2759 JUMPI PUSH1 0x1 SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x2767 SWAP1 POP JUMP JUMPDEST POP POP POP JUMPDEST POP PUSH1 0x0 SWAP2 POP DUP2 SWAP1 POP DUP1 JUMPDEST SWAP4 POP SWAP4 POP SWAP4 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2784 PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x3CB5 JUMP JUMPDEST PUSH2 0x278E SWAP1 DUP6 PUSH2 0x3C43 JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x219C DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x3C80 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x27BA DUP4 DUP4 TIMESTAMP PUSH2 0x27C1 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x27D5 PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x3CB5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x27F1 JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x27BA JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x2827 JUMPI PUSH1 0x0 PUSH2 0x282C JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x2840 DUP11 DUP1 PUSH2 0xF9D JUMP JUMPDEST DUP2 PUSH2 0x284D JUMPI PUSH2 0x284D PUSH2 0x3D00 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x285F DUP4 DUP12 PUSH2 0xF9D JUMP JUMPDEST DUP2 PUSH2 0x286C JUMPI PUSH2 0x286C PUSH2 0x3D00 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x287C DUP7 DUP9 PUSH2 0x3C43 JUMP JUMPDEST PUSH2 0x2886 SWAP2 SWAP1 PUSH2 0x3C43 JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x289A DUP9 DUP11 PUSH2 0x3C43 JUMP JUMPDEST PUSH2 0x28A4 SWAP2 SWAP1 PUSH2 0x3C43 JUMP JUMPDEST PUSH2 0x28AE SWAP2 SWAP1 PUSH2 0x3C43 JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x28C5 DUP11 DUP16 PUSH2 0x3C43 JUMP JUMPDEST PUSH2 0x28CF SWAP2 SWAP1 PUSH2 0x3D2F JUMP JUMPDEST PUSH2 0x28E5 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x3C80 JUMP JUMPDEST PUSH2 0x28EF SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST PUSH2 0x28F9 SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x293D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x296F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x29A0 DUP8 PUSH1 0x0 ADD MLOAD MLOAD ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x29DC JUMPI POP PUSH1 0x0 SWAP5 POP DUP5 SWAP4 POP DUP4 SWAP3 POP DUP3 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 POP DUP2 PUSH2 0x2EE7 JUMP JUMPDEST PUSH2 0x2A8B PUSH1 0x40 MLOAD DUP1 PUSH2 0x260 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2AD0 JUMPI PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x2ABD SWAP2 SWAP1 PUSH2 0x2F7C JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MSTORE PUSH2 0x1C0 DUP4 ADD MSTORE PUSH2 0x1A0 DUP3 ADD MSTORE JUMPDEST DUP8 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0xC0 ADD MLOAD LT ISZERO PUSH2 0x2DEF JUMPI PUSH1 0xC0 DUP2 ADD MLOAD DUP9 MLOAD PUSH2 0x2AF0 SWAP2 PUSH2 0x305B JUMP JUMPDEST PUSH2 0x2B04 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x2AD0 JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP12 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x200 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x2B4A JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x2AD0 JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP13 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP4 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP3 DUP4 SWAP1 MSTORE PUSH1 0xFF PUSH1 0xA8 DUP5 SWAP1 SHR DUP2 AND PUSH2 0x1E0 DUP7 ADD MSTORE PUSH1 0x30 DUP5 SWAP1 SHR AND PUSH1 0x60 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0xFFFF PUSH1 0x10 DUP6 SWAP1 SHR DUP2 AND PUSH1 0xA0 DUP8 ADD MSTORE SWAP1 SWAP4 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA SWAP3 SWAP1 SWAP3 EXP SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2BE0 JUMPI POP DUP2 PUSH2 0x1E0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD PUSH1 0xFF AND EQ JUMPDEST PUSH2 0x2C84 JUMPI PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C5B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2C7F SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST PUSH2 0x2C8B JUMP JUMPDEST DUP2 PUSH2 0x180 ADD MLOAD JUMPDEST DUP3 MSTORE PUSH1 0xA0 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2CAB JUMPI POP PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0x2CAB SWAP2 PUSH2 0x1552 JUMP JUMPDEST ISZERO PUSH2 0x2D9B JUMPI PUSH2 0x2CC8 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x30E0 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP4 ADD DUP1 MLOAD PUSH2 0x2CE1 SWAP1 DUP4 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x1E0 DUP4 ADD MLOAD PUSH2 0x2CFC SWAP2 PUSH1 0xFF AND SWAP1 PUSH2 0x317D JUMP JUMPDEST ISZERO ISZERO PUSH2 0x240 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD ISZERO PUSH2 0x2D52 JUMPI DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0x2D22 JUMPI DUP2 PUSH1 0x80 ADD MLOAD PUSH2 0x2D29 JUMP JUMPDEST DUP2 PUSH2 0x1A0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x2D38 SWAP2 SWAP1 PUSH2 0x3C43 JUMP JUMPDEST DUP3 PUSH2 0x140 ADD DUP2 DUP2 MLOAD PUSH2 0x2D4A SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x2D5B JUMP JUMPDEST PUSH1 0x1 PUSH2 0x220 DUP4 ADD MSTORE JUMPDEST DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0x2D6F JUMPI DUP2 PUSH1 0xA0 ADD MLOAD PUSH2 0x2D76 JUMP JUMPDEST DUP2 PUSH2 0x1C0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x2D85 SWAP2 SWAP1 PUSH2 0x3C43 JUMP JUMPDEST DUP3 PUSH2 0x160 ADD DUP2 DUP2 MLOAD PUSH2 0x2D97 SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0x2DAB SWAP2 PUSH2 0x318E JUMP JUMPDEST ISZERO PUSH2 0x2DDE JUMPI PUSH2 0x2DC8 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x3210 JUMP JUMPDEST DUP3 PUSH2 0x120 ADD DUP2 DUP2 MLOAD PUSH2 0x2DDA SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST POP PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x2AD0 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x2E00 JUMPI PUSH1 0x0 PUSH2 0x2E1B JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x140 ADD MLOAD DUP2 PUSH2 0x2E19 JUMPI PUSH2 0x2E19 PUSH2 0x3D00 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x2E32 JUMPI PUSH1 0x0 PUSH2 0x2E4D JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x160 ADD MLOAD DUP2 PUSH2 0x2E4B JUMPI PUSH2 0x2E4B PUSH2 0x3D00 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD ISZERO PUSH2 0x2E8F JUMPI PUSH2 0x2E8A DUP2 PUSH2 0x120 ADD MLOAD PUSH2 0x2E84 DUP4 PUSH2 0x160 ADD MLOAD DUP5 PUSH2 0x100 ADD MLOAD PUSH2 0x2908 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x3390 JUMP JUMPDEST PUSH2 0x2EB1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH2 0x160 DUP6 ADD MLOAD PUSH2 0x220 SWAP1 SWAP6 ADD MLOAD SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMPDEST SWAP5 SWAP10 SWAP4 SWAP9 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x27BA JUMPI POP PUSH2 0x2F30 PUSH1 0x1 DUP3 PUSH2 0x3CB5 JUMP JUMPDEST AND ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 DUP3 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD NOT DUP2 AND DUP3 JUMPDEST PUSH1 0x2 SWAP2 SWAP1 SWAP2 SHR SWAP1 DUP2 ISZERO PUSH2 0x499 JUMPI PUSH1 0x1 ADD PUSH2 0x2F67 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH7 0x1000000000000 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x3040 JUMPI PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3019 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x303D SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP5 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP8 PUSH3 0x10000 SWAP1 SWAP3 DIV AND SWAP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x30CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 SHL SHR PUSH1 0x3 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x30EC DUP6 PUSH2 0x33C7 JUMP JUMPDEST PUSH1 0x4 DUP7 DUP2 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 DUP8 SWAP3 PUSH2 0x3156 SWAP3 DUP7 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH2 0x18F JUMP JUMPDEST PUSH2 0x3160 SWAP2 SWAP1 PUSH2 0x3C43 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 PUSH2 0x3171 JUMPI PUSH2 0x3171 PUSH2 0x3D00 JUMP JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x27BA JUMPI POP POP EQ SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x3200 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x6 DUP4 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3286 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x32AA SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x32C8 JUMPI PUSH2 0x32C5 PUSH2 0x32BE DUP7 PUSH2 0x344B JUMP JUMPDEST DUP3 SWAP1 PUSH2 0xF9D JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x5 DUP6 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x333A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x335E SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST PUSH2 0x3368 SWAP1 DUP3 PUSH2 0x3C80 JUMP JUMPDEST SWAP1 POP PUSH2 0x3374 DUP2 DUP6 PUSH2 0x3C43 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 PUSH2 0x3385 JUMPI PUSH2 0x3385 PUSH2 0x3D00 JUMP JUMPDEST DIV SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH8 0xDE0B6B3A7640000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x33B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x340D JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x27BA SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x1D0 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x2770 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x3491 JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x27BA SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x1D0 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x27AD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x280 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3553 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xC0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x35C6 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x80 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x35C6 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x35C6 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3683 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3691 DUP2 PUSH2 0x3661 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3691 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP8 SUB PUSH2 0x140 DUP2 SLT ISZERO PUSH2 0x36C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH1 0xC0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP3 ADD SLT ISZERO PUSH2 0x370A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3713 PUSH2 0x357C JUMP JUMPDEST PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH2 0x3721 DUP2 PUSH2 0x3661 JUMP JUMPDEST DUP2 MSTORE PUSH1 0xA0 DUP8 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xC0 DUP8 ADD CALLDATALOAD PUSH2 0x373B DUP2 PUSH2 0x3661 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xE0 DUP8 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x100 DUP8 ADD CALLDATALOAD PUSH2 0x3759 DUP2 PUSH2 0x3661 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x376B PUSH2 0x120 DUP9 ADD PUSH2 0x3696 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 DUP7 SUB PUSH1 0xE0 DUP2 SLT ISZERO PUSH2 0x3795 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 DUP3 ADD SLT ISZERO PUSH2 0x37D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x37E0 PUSH2 0x35CC JUMP JUMPDEST PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x37EE DUP2 PUSH2 0x3661 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA0 DUP7 ADD CALLDATALOAD PUSH2 0x3808 DUP2 PUSH2 0x3661 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xC0 DUP7 ADD CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x3822 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP8 SUB PUSH2 0x1A0 DUP2 SLT ISZERO PUSH2 0x384C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH2 0x120 DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP4 ADD SLT ISZERO PUSH2 0x3897 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x389F PUSH2 0x3616 JUMP JUMPDEST SWAP2 POP PUSH2 0x38AD PUSH1 0x80 DUP10 ADD PUSH2 0x3686 JUMP JUMPDEST DUP3 MSTORE PUSH2 0x38BB PUSH1 0xA0 DUP10 ADD PUSH2 0x3686 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x38CC PUSH1 0xC0 DUP10 ADD PUSH2 0x3686 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xE0 DUP9 ADD CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP10 ADD CALLDATALOAD PUSH1 0x80 DUP5 ADD MSTORE DUP2 DUP10 ADD CALLDATALOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x140 DUP10 ADD CALLDATALOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x3908 PUSH2 0x160 DUP11 ADD PUSH2 0x3686 JUMP JUMPDEST PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x391A PUSH2 0x180 DUP11 ADD PUSH2 0x3696 JUMP JUMPDEST SWAP1 DUP4 ADD MSTORE POP SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 POP SWAP3 SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3683 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x120 DUP11 DUP13 SUB SLT ISZERO PUSH2 0x395A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 CALLDATALOAD SWAP9 POP PUSH1 0x20 DUP11 ADD CALLDATALOAD SWAP8 POP PUSH1 0x40 DUP11 ADD CALLDATALOAD SWAP7 POP PUSH1 0x60 DUP11 ADD CALLDATALOAD SWAP6 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD PUSH2 0x3981 DUP2 PUSH2 0x3661 JUMP JUMPDEST SWAP5 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD PUSH2 0x3991 DUP2 PUSH2 0x392D JUMP JUMPDEST SWAP4 POP PUSH1 0xC0 DUP11 ADD CALLDATALOAD SWAP3 POP PUSH1 0xE0 DUP11 ADD CALLDATALOAD PUSH2 0x39A8 DUP2 PUSH2 0x3661 JUMP JUMPDEST SWAP2 POP PUSH2 0x39B7 PUSH2 0x100 DUP12 ADD PUSH2 0x3696 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x39D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x39F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x27BA DUP2 PUSH2 0x392D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3A29 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x3A0D JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x3A3B JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3A85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3AAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3ACF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x3B70 JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x3B56 JUMPI PUSH2 0x3B56 PUSH2 0x3AE8 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x3B63 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x3B1C JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3B87 JUMPI POP PUSH1 0x1 PUSH2 0x15D7 JUMP JUMPDEST DUP2 PUSH2 0x3B94 JUMPI POP PUSH1 0x0 PUSH2 0x15D7 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x3BAA JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x3BB4 JUMPI PUSH2 0x3BD0 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x15D7 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x3BC5 JUMPI PUSH2 0x3BC5 PUSH2 0x3AE8 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x15D7 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x3BF3 JUMPI POP DUP2 DUP2 EXP PUSH2 0x15D7 JUMP JUMPDEST PUSH2 0x3BFD DUP4 DUP4 PUSH2 0x3B17 JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x3C2F JUMPI PUSH2 0x3C2F PUSH2 0x3AE8 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x27BA DUP4 DUP4 PUSH2 0x3B78 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x3C7B JUMPI PUSH2 0x3C7B PUSH2 0x3AE8 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x3C93 JUMPI PUSH2 0x3C93 PUSH2 0x3AE8 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3CAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x27BA DUP2 PUSH2 0x3661 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x3CC7 JUMPI PUSH2 0x3CC7 PUSH2 0x3AE8 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x3CF7 JUMPI PUSH2 0x3CF7 PUSH2 0x3AE8 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3D65 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GAS 0xE9 DUP3 0xC6 CALLVALUE SWAP8 PUSH3 0x5F6E0F 0x5D OR 0xCF 0xE 0x2D SWAP7 PUSH8 0x1588E68F7A214588 SLT 0xEB 0xBD 0xE9 BASEFEE 0xAE 0xE9 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"864:10771:86:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;864:10771:86;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_accrueToTreasury_18152":{"entryPoint":8902,"id":18152,"parameterSlots":2,"returnSlots":0},"@_getFirstAssetIdByMask_12367":{"entryPoint":12088,"id":12367,"parameterSlots":2,"returnSlots":1},"@_getUserBalanceInBaseCurrency_15854":{"entryPoint":12512,"id":15854,"parameterSlots":4,"returnSlots":1},"@_getUserDebtInBaseCurrency_15811":{"entryPoint":12816,"id":15811,"parameterSlots":4,"returnSlots":1},"@_updateIndexes_18233":{"entryPoint":8612,"id":18233,"parameterSlots":2,"returnSlots":0},"@cache_18376":{"entryPoint":3321,"id":18376,"parameterSlots":1,"returnSlots":1},"@calculateCompoundedInterest_21079":{"entryPoint":10177,"id":21079,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_21097":{"entryPoint":10157,"id":21097,"parameterSlots":2,"returnSlots":1},"@calculateLinearInterest_20956":{"entryPoint":10096,"id":20956,"parameterSlots":2,"returnSlots":1},"@calculateUserAccountData_15713":{"entryPoint":10634,"id":15713,"parameterSlots":4,"returnSlots":6},"@executeFinalizeTransfer_18952":{"entryPoint":1873,"id":18952,"parameterSlots":5,"returnSlots":0},"@executeSupply_18600":{"entryPoint":1186,"id":18600,"parameterSlots":4,"returnSlots":0},"@executeUseReserveAsCollateral_19089":{"entryPoint":2605,"id":19089,"parameterSlots":9,"returnSlots":0},"@executeWithdraw_18786":{"entryPoint":239,"id":18786,"parameterSlots":5,"returnSlots":1},"@getDebtCeiling_11491":{"entryPoint":null,"id":11491,"parameterSlots":1,"returnSlots":1},"@getDecimals_10933":{"entryPoint":null,"id":10933,"parameterSlots":1,"returnSlots":1},"@getEModeConfiguration_14594":{"entryPoint":12156,"id":14594,"parameterSlots":2,"returnSlots":3},"@getFlags_11757":{"entryPoint":null,"id":11757,"parameterSlots":1,"returnSlots":5},"@getIsolationModeState_12262":{"entryPoint":9912,"id":12262,"parameterSlots":3,"returnSlots":3},"@getLastTransferResult_117":{"entryPoint":9708,"id":117,"parameterSlots":1,"returnSlots":1},"@getLtv_10777":{"entryPoint":null,"id":10777,"parameterSlots":1,"returnSlots":1},"@getNormalizedDebt_17751":{"entryPoint":13387,"id":17751,"parameterSlots":1,"returnSlots":1},"@getNormalizedIncome_17715":{"entryPoint":13255,"id":17715,"parameterSlots":1,"returnSlots":1},"@getParams_11823":{"entryPoint":null,"id":11823,"parameterSlots":1,"returnSlots":6},"@getPaused_11083":{"entryPoint":null,"id":11083,"parameterSlots":1,"returnSlots":1},"@getReserveFactor_11335":{"entryPoint":null,"id":11335,"parameterSlots":1,"returnSlots":1},"@getSupplyCap_11439":{"entryPoint":null,"id":11439,"parameterSlots":1,"returnSlots":1},"@isBorrowingAny_12179":{"entryPoint":null,"id":12179,"parameterSlots":1,"returnSlots":1},"@isBorrowing_12045":{"entryPoint":12686,"id":12045,"parameterSlots":2,"returnSlots":1},"@isEmpty_12194":{"entryPoint":null,"id":12194,"parameterSlots":1,"returnSlots":1},"@isInEModeCategory_14614":{"entryPoint":12669,"id":14614,"parameterSlots":2,"returnSlots":1},"@isUsingAsCollateralAny_12131":{"entryPoint":null,"id":12131,"parameterSlots":1,"returnSlots":1},"@isUsingAsCollateralOne_12114":{"entryPoint":12020,"id":12114,"parameterSlots":1,"returnSlots":1},"@isUsingAsCollateralOrBorrowing_12010":{"entryPoint":12379,"id":12010,"parameterSlots":2,"returnSlots":1},"@isUsingAsCollateral_12083":{"entryPoint":5458,"id":12083,"parameterSlots":2,"returnSlots":1},"@percentMul_21119":{"entryPoint":10504,"id":21119,"parameterSlots":2,"returnSlots":1},"@rayDiv_21198":{"entryPoint":10571,"id":21198,"parameterSlots":2,"returnSlots":1},"@rayMul_21186":{"entryPoint":3997,"id":21186,"parameterSlots":2,"returnSlots":1},"@safeTransferFrom_106":{"entryPoint":7096,"id":106,"parameterSlots":4,"returnSlots":0},"@setUsingAsCollateral_11975":{"entryPoint":5597,"id":11975,"parameterSlots":3,"returnSlots":0},"@toUint128_1626":{"entryPoint":9291,"id":1626,"parameterSlots":1,"returnSlots":1},"@updateInterestRates_18024":{"entryPoint":4625,"id":18024,"parameterSlots":5,"returnSlots":0},"@updateState_17793":{"entryPoint":3858,"id":17793,"parameterSlots":2,"returnSlots":0},"@validateAutomaticUseAsCollateral_20907":{"entryPoint":7322,"id":20907,"parameterSlots":5,"returnSlots":1},"@validateHFAndLtv_20592":{"entryPoint":5748,"id":20592,"parameterSlots":9,"returnSlots":0},"@validateHealthFactor_20524":{"entryPoint":9457,"id":20524,"parameterSlots":8,"returnSlots":2},"@validateSetUseReserveAsCollateral_20229":{"entryPoint":8034,"id":20229,"parameterSlots":2,"returnSlots":0},"@validateSupply_19277":{"entryPoint":6192,"id":19277,"parameterSlots":3,"returnSlots":0},"@validateTransfer_20610":{"entryPoint":7898,"id":20610,"parameterSlots":1,"returnSlots":0},"@validateUseAsCollateral_20844":{"entryPoint":8455,"id":20844,"parameterSlots":4,"returnSlots":1},"@validateWithdraw_19327":{"entryPoint":4084,"id":19327,"parameterSlots":3,"returnSlots":0},"@wadDiv_21174":{"entryPoint":13200,"id":21174,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":13958,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":14815,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$4860_fromMemory":{"entryPoint":15512,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$t_struct$_FinalizeTransferParams_$21484_memory_ptr":{"entryPoint":14386,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$t_struct$_UserConfigurationMap_$21322_storage_ptrt_addresst_boolt_uint256t_addresst_uint8":{"entryPoint":14651,"id":null,"parameterSlots":2,"returnSlots":9},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$t_struct$_UserConfigurationMap_$21322_storage_ptrt_struct$_ExecuteWithdrawParams_$21458_memory_ptr":{"entryPoint":13991,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_struct$_UserConfigurationMap_$21322_storage_ptrt_struct$_ExecuteSupplyParams_$21407_memory_ptr":{"entryPoint":14206,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":14790,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory":{"entryPoint":15034,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory":{"entryPoint":14959,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_uint8":{"entryPoint":13974,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address__to_t_bytes32_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":14844,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"allocate_memory":{"entryPoint":13846,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_2073":{"entryPoint":13692,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_2075":{"entryPoint":13772,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":15564,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":15488,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":15663,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":15127,"id":null,"parameterSlots":2,"returnSlots":2},"checked_exp_t_uint256_t_uint256":{"entryPoint":15415,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":15224,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":15427,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":15541,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":15080,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":15616,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":13921,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_bool":{"entryPoint":14637,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:16510:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"60:361:201","statements":[{"nodeType":"YulAssignment","src":"70:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"86:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"80:5:201"},"nodeType":"YulFunctionCall","src":"80:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"70:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"98:35:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"120:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"128:4:201","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"116:3:201"},"nodeType":"YulFunctionCall","src":"116:17:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"102:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"216:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"237:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"240:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"230:6:201"},"nodeType":"YulFunctionCall","src":"230:88:201"},"nodeType":"YulExpressionStatement","src":"230:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"338:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"341:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"331:6:201"},"nodeType":"YulFunctionCall","src":"331:15:201"},"nodeType":"YulExpressionStatement","src":"331:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"366:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"369:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"359:6:201"},"nodeType":"YulFunctionCall","src":"359:15:201"},"nodeType":"YulExpressionStatement","src":"359:15:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"151:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"163:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"148:2:201"},"nodeType":"YulFunctionCall","src":"148:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"187:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"199:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"184:2:201"},"nodeType":"YulFunctionCall","src":"184:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"145:2:201"},"nodeType":"YulFunctionCall","src":"145:62:201"},"nodeType":"YulIf","src":"142:242:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"400:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"404:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"393:6:201"},"nodeType":"YulFunctionCall","src":"393:22:201"},"nodeType":"YulExpressionStatement","src":"393:22:201"}]},"name":"allocate_memory_2073","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"49:6:201","type":""}],"src":"14:407:201"},{"body":{"nodeType":"YulBlock","src":"472:361:201","statements":[{"nodeType":"YulAssignment","src":"482:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"498:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"492:5:201"},"nodeType":"YulFunctionCall","src":"492:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"482:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"510:35:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"532:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"540:4:201","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"528:3:201"},"nodeType":"YulFunctionCall","src":"528:17:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"514:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"628:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"649:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"652:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"642:6:201"},"nodeType":"YulFunctionCall","src":"642:88:201"},"nodeType":"YulExpressionStatement","src":"642:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"750:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"753:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"743:6:201"},"nodeType":"YulFunctionCall","src":"743:15:201"},"nodeType":"YulExpressionStatement","src":"743:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"778:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"781:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"771:6:201"},"nodeType":"YulFunctionCall","src":"771:15:201"},"nodeType":"YulExpressionStatement","src":"771:15:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"563:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"575:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"560:2:201"},"nodeType":"YulFunctionCall","src":"560:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"599:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"611:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"596:2:201"},"nodeType":"YulFunctionCall","src":"596:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"557:2:201"},"nodeType":"YulFunctionCall","src":"557:62:201"},"nodeType":"YulIf","src":"554:242:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"812:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"816:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"805:6:201"},"nodeType":"YulFunctionCall","src":"805:22:201"},"nodeType":"YulExpressionStatement","src":"805:22:201"}]},"name":"allocate_memory_2075","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"461:6:201","type":""}],"src":"426:407:201"},{"body":{"nodeType":"YulBlock","src":"879:363:201","statements":[{"nodeType":"YulAssignment","src":"889:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"905:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"899:5:201"},"nodeType":"YulFunctionCall","src":"899:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"889:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"917:37:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"939:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"947:6:201","type":"","value":"0x0120"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"935:3:201"},"nodeType":"YulFunctionCall","src":"935:19:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"921:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1037:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1058:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1061:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1051:6:201"},"nodeType":"YulFunctionCall","src":"1051:88:201"},"nodeType":"YulExpressionStatement","src":"1051:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1159:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1162:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1152:6:201"},"nodeType":"YulFunctionCall","src":"1152:15:201"},"nodeType":"YulExpressionStatement","src":"1152:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1187:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1190:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1180:6:201"},"nodeType":"YulFunctionCall","src":"1180:15:201"},"nodeType":"YulExpressionStatement","src":"1180:15:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"972:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"984:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"969:2:201"},"nodeType":"YulFunctionCall","src":"969:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1008:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1020:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1005:2:201"},"nodeType":"YulFunctionCall","src":"1005:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"966:2:201"},"nodeType":"YulFunctionCall","src":"966:62:201"},"nodeType":"YulIf","src":"963:242:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1221:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1225:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1214:6:201"},"nodeType":"YulFunctionCall","src":"1214:22:201"},"nodeType":"YulExpressionStatement","src":"1214:22:201"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"868:6:201","type":""}],"src":"838:404:201"},{"body":{"nodeType":"YulBlock","src":"1292:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"1379:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1388:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1391:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1381:6:201"},"nodeType":"YulFunctionCall","src":"1381:12:201"},"nodeType":"YulExpressionStatement","src":"1381:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1315:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1326:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1333:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1322:3:201"},"nodeType":"YulFunctionCall","src":"1322:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1312:2:201"},"nodeType":"YulFunctionCall","src":"1312:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1305:6:201"},"nodeType":"YulFunctionCall","src":"1305:73:201"},"nodeType":"YulIf","src":"1302:93:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1281:5:201","type":""}],"src":"1247:154:201"},{"body":{"nodeType":"YulBlock","src":"1455:85:201","statements":[{"nodeType":"YulAssignment","src":"1465:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1487:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1474:12:201"},"nodeType":"YulFunctionCall","src":"1474:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1465:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1528:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1503:24:201"},"nodeType":"YulFunctionCall","src":"1503:31:201"},"nodeType":"YulExpressionStatement","src":"1503:31:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1434:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1445:5:201","type":""}],"src":"1406:134:201"},{"body":{"nodeType":"YulBlock","src":"1592:109:201","statements":[{"nodeType":"YulAssignment","src":"1602:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1624:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1611:12:201"},"nodeType":"YulFunctionCall","src":"1611:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1602:5:201"}]},{"body":{"nodeType":"YulBlock","src":"1679:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1688:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1691:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1681:6:201"},"nodeType":"YulFunctionCall","src":"1681:12:201"},"nodeType":"YulExpressionStatement","src":"1681:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1653:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1664:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1671:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1660:3:201"},"nodeType":"YulFunctionCall","src":"1660:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1650:2:201"},"nodeType":"YulFunctionCall","src":"1650:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1643:6:201"},"nodeType":"YulFunctionCall","src":"1643:35:201"},"nodeType":"YulIf","src":"1640:55:201"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1571:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1582:5:201","type":""}],"src":"1545:156:201"},{"body":{"nodeType":"YulBlock","src":"2053:1081:201","statements":[{"nodeType":"YulVariableDeclaration","src":"2063:33:201","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2077:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2086:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2073:3:201"},"nodeType":"YulFunctionCall","src":"2073:23:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2067:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2121:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2130:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2133:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2123:6:201"},"nodeType":"YulFunctionCall","src":"2123:12:201"},"nodeType":"YulExpressionStatement","src":"2123:12:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2112:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"2116:3:201","type":"","value":"320"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2108:3:201"},"nodeType":"YulFunctionCall","src":"2108:12:201"},"nodeType":"YulIf","src":"2105:32:201"},{"nodeType":"YulAssignment","src":"2146:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2169:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2156:12:201"},"nodeType":"YulFunctionCall","src":"2156:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2146:6:201"}]},{"nodeType":"YulAssignment","src":"2188:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2215:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2226:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2211:3:201"},"nodeType":"YulFunctionCall","src":"2211:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2198:12:201"},"nodeType":"YulFunctionCall","src":"2198:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2188:6:201"}]},{"nodeType":"YulAssignment","src":"2239:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2266:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2277:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2262:3:201"},"nodeType":"YulFunctionCall","src":"2262:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2249:12:201"},"nodeType":"YulFunctionCall","src":"2249:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2239:6:201"}]},{"nodeType":"YulAssignment","src":"2290:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2317:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2328:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2313:3:201"},"nodeType":"YulFunctionCall","src":"2313:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2300:12:201"},"nodeType":"YulFunctionCall","src":"2300:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2290:6:201"}]},{"body":{"nodeType":"YulBlock","src":"2431:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2440:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2443:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2433:6:201"},"nodeType":"YulFunctionCall","src":"2433:12:201"},"nodeType":"YulExpressionStatement","src":"2433:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"2352:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"2356:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2348:3:201"},"nodeType":"YulFunctionCall","src":"2348:75:201"},{"kind":"number","nodeType":"YulLiteral","src":"2425:4:201","type":"","value":"0xc0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2344:3:201"},"nodeType":"YulFunctionCall","src":"2344:86:201"},"nodeType":"YulIf","src":"2341:106:201"},{"nodeType":"YulVariableDeclaration","src":"2456:35:201","value":{"arguments":[],"functionName":{"name":"allocate_memory_2073","nodeType":"YulIdentifier","src":"2469:20:201"},"nodeType":"YulFunctionCall","src":"2469:22:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2460:5:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2500:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2532:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2543:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2528:3:201"},"nodeType":"YulFunctionCall","src":"2528:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2515:12:201"},"nodeType":"YulFunctionCall","src":"2515:33:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2504:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2582:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2557:24:201"},"nodeType":"YulFunctionCall","src":"2557:33:201"},"nodeType":"YulExpressionStatement","src":"2557:33:201"},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2606:5:201"},{"name":"value_1","nodeType":"YulIdentifier","src":"2613:7:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2599:6:201"},"nodeType":"YulFunctionCall","src":"2599:22:201"},"nodeType":"YulExpressionStatement","src":"2599:22:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2641:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2648:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2637:3:201"},"nodeType":"YulFunctionCall","src":"2637:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2670:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2681:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2666:3:201"},"nodeType":"YulFunctionCall","src":"2666:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2653:12:201"},"nodeType":"YulFunctionCall","src":"2653:33:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2630:6:201"},"nodeType":"YulFunctionCall","src":"2630:57:201"},"nodeType":"YulExpressionStatement","src":"2630:57:201"},{"nodeType":"YulVariableDeclaration","src":"2696:49:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2728:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2739:4:201","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2724:3:201"},"nodeType":"YulFunctionCall","src":"2724:20:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2711:12:201"},"nodeType":"YulFunctionCall","src":"2711:34:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"2700:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"2779:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2754:24:201"},"nodeType":"YulFunctionCall","src":"2754:33:201"},"nodeType":"YulExpressionStatement","src":"2754:33:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2807:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2814:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2803:3:201"},"nodeType":"YulFunctionCall","src":"2803:14:201"},{"name":"value_2","nodeType":"YulIdentifier","src":"2819:7:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2796:6:201"},"nodeType":"YulFunctionCall","src":"2796:31:201"},"nodeType":"YulExpressionStatement","src":"2796:31:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2847:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2854:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2843:3:201"},"nodeType":"YulFunctionCall","src":"2843:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2876:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2887:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2872:3:201"},"nodeType":"YulFunctionCall","src":"2872:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2859:12:201"},"nodeType":"YulFunctionCall","src":"2859:33:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2836:6:201"},"nodeType":"YulFunctionCall","src":"2836:57:201"},"nodeType":"YulExpressionStatement","src":"2836:57:201"},{"nodeType":"YulVariableDeclaration","src":"2902:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2934:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2945:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2930:3:201"},"nodeType":"YulFunctionCall","src":"2930:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2917:12:201"},"nodeType":"YulFunctionCall","src":"2917:33:201"},"variables":[{"name":"value_3","nodeType":"YulTypedName","src":"2906:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_3","nodeType":"YulIdentifier","src":"2984:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2959:24:201"},"nodeType":"YulFunctionCall","src":"2959:33:201"},"nodeType":"YulExpressionStatement","src":"2959:33:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3012:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"3019:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3008:3:201"},"nodeType":"YulFunctionCall","src":"3008:15:201"},{"name":"value_3","nodeType":"YulIdentifier","src":"3025:7:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3001:6:201"},"nodeType":"YulFunctionCall","src":"3001:32:201"},"nodeType":"YulExpressionStatement","src":"3001:32:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3053:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"3060:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3049:3:201"},"nodeType":"YulFunctionCall","src":"3049:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3087:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3098:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3083:3:201"},"nodeType":"YulFunctionCall","src":"3083:19:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"3066:16:201"},"nodeType":"YulFunctionCall","src":"3066:37:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3042:6:201"},"nodeType":"YulFunctionCall","src":"3042:62:201"},"nodeType":"YulExpressionStatement","src":"3042:62:201"},{"nodeType":"YulAssignment","src":"3113:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3123:5:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3113:6:201"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$t_struct$_UserConfigurationMap_$21322_storage_ptrt_struct$_ExecuteWithdrawParams_$21458_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1987:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1998:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2010:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2018:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2026:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2034:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"2042:6:201","type":""}],"src":"1706:1428:201"},{"body":{"nodeType":"YulBlock","src":"3248:76:201","statements":[{"nodeType":"YulAssignment","src":"3258:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3270:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3281:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3266:3:201"},"nodeType":"YulFunctionCall","src":"3266:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3258:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3300:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"3311:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3293:6:201"},"nodeType":"YulFunctionCall","src":"3293:25:201"},"nodeType":"YulExpressionStatement","src":"3293:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3217:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3228:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3239:4:201","type":""}],"src":"3139:185:201"},{"body":{"nodeType":"YulBlock","src":"3605:919:201","statements":[{"nodeType":"YulVariableDeclaration","src":"3615:33:201","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3629:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3638:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3625:3:201"},"nodeType":"YulFunctionCall","src":"3625:23:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3619:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3673:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3682:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3685:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3675:6:201"},"nodeType":"YulFunctionCall","src":"3675:12:201"},"nodeType":"YulExpressionStatement","src":"3675:12:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3664:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"3668:3:201","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3660:3:201"},"nodeType":"YulFunctionCall","src":"3660:12:201"},"nodeType":"YulIf","src":"3657:32:201"},{"nodeType":"YulAssignment","src":"3698:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3721:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3708:12:201"},"nodeType":"YulFunctionCall","src":"3708:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3698:6:201"}]},{"nodeType":"YulAssignment","src":"3740:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3767:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3778:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3763:3:201"},"nodeType":"YulFunctionCall","src":"3763:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3750:12:201"},"nodeType":"YulFunctionCall","src":"3750:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3740:6:201"}]},{"nodeType":"YulAssignment","src":"3791:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3818:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3829:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3814:3:201"},"nodeType":"YulFunctionCall","src":"3814:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3801:12:201"},"nodeType":"YulFunctionCall","src":"3801:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3791:6:201"}]},{"body":{"nodeType":"YulBlock","src":"3932:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3941:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3944:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3934:6:201"},"nodeType":"YulFunctionCall","src":"3934:12:201"},"nodeType":"YulExpressionStatement","src":"3934:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3853:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"3857:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3849:3:201"},"nodeType":"YulFunctionCall","src":"3849:75:201"},{"kind":"number","nodeType":"YulLiteral","src":"3926:4:201","type":"","value":"0x80"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3845:3:201"},"nodeType":"YulFunctionCall","src":"3845:86:201"},"nodeType":"YulIf","src":"3842:106:201"},{"nodeType":"YulVariableDeclaration","src":"3957:35:201","value":{"arguments":[],"functionName":{"name":"allocate_memory_2075","nodeType":"YulIdentifier","src":"3970:20:201"},"nodeType":"YulFunctionCall","src":"3970:22:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3961:5:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4001:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4033:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4044:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4029:3:201"},"nodeType":"YulFunctionCall","src":"4029:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4016:12:201"},"nodeType":"YulFunctionCall","src":"4016:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"4005:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"4082:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4057:24:201"},"nodeType":"YulFunctionCall","src":"4057:33:201"},"nodeType":"YulExpressionStatement","src":"4057:33:201"},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4106:5:201"},{"name":"value_1","nodeType":"YulIdentifier","src":"4113:7:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4099:6:201"},"nodeType":"YulFunctionCall","src":"4099:22:201"},"nodeType":"YulExpressionStatement","src":"4099:22:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4141:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"4148:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4137:3:201"},"nodeType":"YulFunctionCall","src":"4137:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4170:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4181:4:201","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4166:3:201"},"nodeType":"YulFunctionCall","src":"4166:20:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4153:12:201"},"nodeType":"YulFunctionCall","src":"4153:34:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4130:6:201"},"nodeType":"YulFunctionCall","src":"4130:58:201"},"nodeType":"YulExpressionStatement","src":"4130:58:201"},{"nodeType":"YulVariableDeclaration","src":"4197:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4229:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4240:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4225:3:201"},"nodeType":"YulFunctionCall","src":"4225:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4212:12:201"},"nodeType":"YulFunctionCall","src":"4212:33:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"4201:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"4279:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4254:24:201"},"nodeType":"YulFunctionCall","src":"4254:33:201"},"nodeType":"YulExpressionStatement","src":"4254:33:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4307:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"4314:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4303:3:201"},"nodeType":"YulFunctionCall","src":"4303:14:201"},{"name":"value_2","nodeType":"YulIdentifier","src":"4319:7:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4296:6:201"},"nodeType":"YulFunctionCall","src":"4296:31:201"},"nodeType":"YulExpressionStatement","src":"4296:31:201"},{"nodeType":"YulVariableDeclaration","src":"4336:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4368:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4379:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4364:3:201"},"nodeType":"YulFunctionCall","src":"4364:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4351:12:201"},"nodeType":"YulFunctionCall","src":"4351:33:201"},"variables":[{"name":"value_3","nodeType":"YulTypedName","src":"4340:7:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4438:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4447:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4450:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4440:6:201"},"nodeType":"YulFunctionCall","src":"4440:12:201"},"nodeType":"YulExpressionStatement","src":"4440:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value_3","nodeType":"YulIdentifier","src":"4406:7:201"},{"arguments":[{"name":"value_3","nodeType":"YulIdentifier","src":"4419:7:201"},{"kind":"number","nodeType":"YulLiteral","src":"4428:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4415:3:201"},"nodeType":"YulFunctionCall","src":"4415:20:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4403:2:201"},"nodeType":"YulFunctionCall","src":"4403:33:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4396:6:201"},"nodeType":"YulFunctionCall","src":"4396:41:201"},"nodeType":"YulIf","src":"4393:61:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4474:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"4481:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4470:3:201"},"nodeType":"YulFunctionCall","src":"4470:14:201"},{"name":"value_3","nodeType":"YulIdentifier","src":"4486:7:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4463:6:201"},"nodeType":"YulFunctionCall","src":"4463:31:201"},"nodeType":"YulExpressionStatement","src":"4463:31:201"},{"nodeType":"YulAssignment","src":"4503:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"4513:5:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"4503:6:201"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_struct$_UserConfigurationMap_$21322_storage_ptrt_struct$_ExecuteSupplyParams_$21407_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3547:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3558:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3570:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3578:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3586:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3594:6:201","type":""}],"src":"3329:1195:201"},{"body":{"nodeType":"YulBlock","src":"4898:1123:201","statements":[{"nodeType":"YulVariableDeclaration","src":"4908:33:201","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4922:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4931:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4918:3:201"},"nodeType":"YulFunctionCall","src":"4918:23:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4912:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4966:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4975:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4978:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4968:6:201"},"nodeType":"YulFunctionCall","src":"4968:12:201"},"nodeType":"YulExpressionStatement","src":"4968:12:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"4957:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"4961:3:201","type":"","value":"416"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4953:3:201"},"nodeType":"YulFunctionCall","src":"4953:12:201"},"nodeType":"YulIf","src":"4950:32:201"},{"nodeType":"YulAssignment","src":"4991:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5014:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5001:12:201"},"nodeType":"YulFunctionCall","src":"5001:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4991:6:201"}]},{"nodeType":"YulAssignment","src":"5033:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5060:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5071:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5056:3:201"},"nodeType":"YulFunctionCall","src":"5056:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5043:12:201"},"nodeType":"YulFunctionCall","src":"5043:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5033:6:201"}]},{"nodeType":"YulAssignment","src":"5084:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5111:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5122:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5107:3:201"},"nodeType":"YulFunctionCall","src":"5107:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5094:12:201"},"nodeType":"YulFunctionCall","src":"5094:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5084:6:201"}]},{"nodeType":"YulAssignment","src":"5135:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5162:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5173:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5158:3:201"},"nodeType":"YulFunctionCall","src":"5158:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5145:12:201"},"nodeType":"YulFunctionCall","src":"5145:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"5135:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"5186:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5196:6:201","type":"","value":"0x0120"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"5190:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"5299:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5308:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5311:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5301:6:201"},"nodeType":"YulFunctionCall","src":"5301:12:201"},"nodeType":"YulExpressionStatement","src":"5301:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"5222:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"5226:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5218:3:201"},"nodeType":"YulFunctionCall","src":"5218:75:201"},{"name":"_2","nodeType":"YulIdentifier","src":"5295:2:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5214:3:201"},"nodeType":"YulFunctionCall","src":"5214:84:201"},"nodeType":"YulIf","src":"5211:104:201"},{"nodeType":"YulVariableDeclaration","src":"5324:30:201","value":{"arguments":[],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"5337:15:201"},"nodeType":"YulFunctionCall","src":"5337:17:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5328:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5370:5:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5400:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5411:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5396:3:201"},"nodeType":"YulFunctionCall","src":"5396:19:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5377:18:201"},"nodeType":"YulFunctionCall","src":"5377:39:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5363:6:201"},"nodeType":"YulFunctionCall","src":"5363:54:201"},"nodeType":"YulExpressionStatement","src":"5363:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5437:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5444:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5433:3:201"},"nodeType":"YulFunctionCall","src":"5433:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5472:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5483:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5468:3:201"},"nodeType":"YulFunctionCall","src":"5468:19:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5449:18:201"},"nodeType":"YulFunctionCall","src":"5449:39:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5426:6:201"},"nodeType":"YulFunctionCall","src":"5426:63:201"},"nodeType":"YulExpressionStatement","src":"5426:63:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5509:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5516:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5505:3:201"},"nodeType":"YulFunctionCall","src":"5505:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5544:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5555:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5540:3:201"},"nodeType":"YulFunctionCall","src":"5540:19:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5521:18:201"},"nodeType":"YulFunctionCall","src":"5521:39:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5498:6:201"},"nodeType":"YulFunctionCall","src":"5498:63:201"},"nodeType":"YulExpressionStatement","src":"5498:63:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5581:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5588:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5577:3:201"},"nodeType":"YulFunctionCall","src":"5577:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5610:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5621:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5606:3:201"},"nodeType":"YulFunctionCall","src":"5606:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5593:12:201"},"nodeType":"YulFunctionCall","src":"5593:33:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5570:6:201"},"nodeType":"YulFunctionCall","src":"5570:57:201"},"nodeType":"YulExpressionStatement","src":"5570:57:201"},{"nodeType":"YulVariableDeclaration","src":"5636:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5646:3:201","type":"","value":"256"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"5640:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5669:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5676:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5665:3:201"},"nodeType":"YulFunctionCall","src":"5665:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5699:9:201"},{"name":"_3","nodeType":"YulIdentifier","src":"5710:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5695:3:201"},"nodeType":"YulFunctionCall","src":"5695:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5682:12:201"},"nodeType":"YulFunctionCall","src":"5682:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5658:6:201"},"nodeType":"YulFunctionCall","src":"5658:57:201"},"nodeType":"YulExpressionStatement","src":"5658:57:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5735:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5742:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5731:3:201"},"nodeType":"YulFunctionCall","src":"5731:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5765:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"5776:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5761:3:201"},"nodeType":"YulFunctionCall","src":"5761:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5748:12:201"},"nodeType":"YulFunctionCall","src":"5748:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5724:6:201"},"nodeType":"YulFunctionCall","src":"5724:57:201"},"nodeType":"YulExpressionStatement","src":"5724:57:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5801:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5808:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5797:3:201"},"nodeType":"YulFunctionCall","src":"5797:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5831:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5842:3:201","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5827:3:201"},"nodeType":"YulFunctionCall","src":"5827:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5814:12:201"},"nodeType":"YulFunctionCall","src":"5814:33:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5790:6:201"},"nodeType":"YulFunctionCall","src":"5790:58:201"},"nodeType":"YulExpressionStatement","src":"5790:58:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5868:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5875:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5864:3:201"},"nodeType":"YulFunctionCall","src":"5864:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5904:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5915:3:201","type":"","value":"352"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5900:3:201"},"nodeType":"YulFunctionCall","src":"5900:19:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"5881:18:201"},"nodeType":"YulFunctionCall","src":"5881:39:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5857:6:201"},"nodeType":"YulFunctionCall","src":"5857:64:201"},"nodeType":"YulExpressionStatement","src":"5857:64:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5941:5:201"},{"name":"_3","nodeType":"YulIdentifier","src":"5948:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5937:3:201"},"nodeType":"YulFunctionCall","src":"5937:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5974:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5985:3:201","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5970:3:201"},"nodeType":"YulFunctionCall","src":"5970:19:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"5953:16:201"},"nodeType":"YulFunctionCall","src":"5953:37:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5930:6:201"},"nodeType":"YulFunctionCall","src":"5930:61:201"},"nodeType":"YulExpressionStatement","src":"5930:61:201"},{"nodeType":"YulAssignment","src":"6000:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"6010:5:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"6000:6:201"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$t_struct$_FinalizeTransferParams_$21484_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4832:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4843:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4855:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4863:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4871:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"4879:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"4887:6:201","type":""}],"src":"4529:1492:201"},{"body":{"nodeType":"YulBlock","src":"6068:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"6122:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6131:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6134:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6124:6:201"},"nodeType":"YulFunctionCall","src":"6124:12:201"},"nodeType":"YulExpressionStatement","src":"6124:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6091:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6112:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6105:6:201"},"nodeType":"YulFunctionCall","src":"6105:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6098:6:201"},"nodeType":"YulFunctionCall","src":"6098:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"6088:2:201"},"nodeType":"YulFunctionCall","src":"6088:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6081:6:201"},"nodeType":"YulFunctionCall","src":"6081:40:201"},"nodeType":"YulIf","src":"6078:60:201"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"6057:5:201","type":""}],"src":"6026:118:201"},{"body":{"nodeType":"YulBlock","src":"6519:738:201","statements":[{"body":{"nodeType":"YulBlock","src":"6566:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6575:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6578:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6568:6:201"},"nodeType":"YulFunctionCall","src":"6568:12:201"},"nodeType":"YulExpressionStatement","src":"6568:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6540:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6549:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6536:3:201"},"nodeType":"YulFunctionCall","src":"6536:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"6561:3:201","type":"","value":"288"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6532:3:201"},"nodeType":"YulFunctionCall","src":"6532:33:201"},"nodeType":"YulIf","src":"6529:53:201"},{"nodeType":"YulAssignment","src":"6591:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6614:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6601:12:201"},"nodeType":"YulFunctionCall","src":"6601:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6591:6:201"}]},{"nodeType":"YulAssignment","src":"6633:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6660:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6671:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6656:3:201"},"nodeType":"YulFunctionCall","src":"6656:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6643:12:201"},"nodeType":"YulFunctionCall","src":"6643:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6633:6:201"}]},{"nodeType":"YulAssignment","src":"6684:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6711:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6722:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6707:3:201"},"nodeType":"YulFunctionCall","src":"6707:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6694:12:201"},"nodeType":"YulFunctionCall","src":"6694:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6684:6:201"}]},{"nodeType":"YulAssignment","src":"6735:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6762:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6773:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6758:3:201"},"nodeType":"YulFunctionCall","src":"6758:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6745:12:201"},"nodeType":"YulFunctionCall","src":"6745:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"6735:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"6786:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6816:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6827:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6812:3:201"},"nodeType":"YulFunctionCall","src":"6812:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6799:12:201"},"nodeType":"YulFunctionCall","src":"6799:33:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6790:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6866:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6841:24:201"},"nodeType":"YulFunctionCall","src":"6841:31:201"},"nodeType":"YulExpressionStatement","src":"6841:31:201"},{"nodeType":"YulAssignment","src":"6881:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"6891:5:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"6881:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"6905:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6937:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6948:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6933:3:201"},"nodeType":"YulFunctionCall","src":"6933:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6920:12:201"},"nodeType":"YulFunctionCall","src":"6920:33:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"6909:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"6984:7:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"6962:21:201"},"nodeType":"YulFunctionCall","src":"6962:30:201"},"nodeType":"YulExpressionStatement","src":"6962:30:201"},{"nodeType":"YulAssignment","src":"7001:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"7011:7:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"7001:6:201"}]},{"nodeType":"YulAssignment","src":"7027:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7054:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7065:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7050:3:201"},"nodeType":"YulFunctionCall","src":"7050:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7037:12:201"},"nodeType":"YulFunctionCall","src":"7037:33:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"7027:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"7079:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7111:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7122:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7107:3:201"},"nodeType":"YulFunctionCall","src":"7107:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7094:12:201"},"nodeType":"YulFunctionCall","src":"7094:33:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"7083:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"7161:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7136:24:201"},"nodeType":"YulFunctionCall","src":"7136:33:201"},"nodeType":"YulExpressionStatement","src":"7136:33:201"},{"nodeType":"YulAssignment","src":"7178:17:201","value":{"name":"value_2","nodeType":"YulIdentifier","src":"7188:7:201"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"7178:6:201"}]},{"nodeType":"YulAssignment","src":"7204:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7235:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7246:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7231:3:201"},"nodeType":"YulFunctionCall","src":"7231:19:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"7214:16:201"},"nodeType":"YulFunctionCall","src":"7214:37:201"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"7204:6:201"}]}]},"name":"abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$t_struct$_UserConfigurationMap_$21322_storage_ptrt_addresst_boolt_uint256t_addresst_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6421:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6432:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6444:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6452:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6460:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6468:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"6476:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"6484:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"6492:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"6500:6:201","type":""},{"name":"value8","nodeType":"YulTypedName","src":"6508:6:201","type":""}],"src":"6149:1108:201"},{"body":{"nodeType":"YulBlock","src":"7363:125:201","statements":[{"nodeType":"YulAssignment","src":"7373:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7385:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7396:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7381:3:201"},"nodeType":"YulFunctionCall","src":"7381:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7373:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7415:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7430:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7438:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7426:3:201"},"nodeType":"YulFunctionCall","src":"7426:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7408:6:201"},"nodeType":"YulFunctionCall","src":"7408:74:201"},"nodeType":"YulExpressionStatement","src":"7408:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7332:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7343:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7354:4:201","type":""}],"src":"7262:226:201"},{"body":{"nodeType":"YulBlock","src":"7574:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"7620:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7629:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7632:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7622:6:201"},"nodeType":"YulFunctionCall","src":"7622:12:201"},"nodeType":"YulExpressionStatement","src":"7622:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7595:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"7604:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7591:3:201"},"nodeType":"YulFunctionCall","src":"7591:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"7616:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7587:3:201"},"nodeType":"YulFunctionCall","src":"7587:32:201"},"nodeType":"YulIf","src":"7584:52:201"},{"nodeType":"YulAssignment","src":"7645:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7661:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7655:5:201"},"nodeType":"YulFunctionCall","src":"7655:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7645:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7540:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7551:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7563:6:201","type":""}],"src":"7493:184:201"},{"body":{"nodeType":"YulBlock","src":"7867:285:201","statements":[{"nodeType":"YulAssignment","src":"7877:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7889:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7900:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7885:3:201"},"nodeType":"YulFunctionCall","src":"7885:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7877:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"7913:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"7923:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"7917:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7981:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7996:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"8004:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7992:3:201"},"nodeType":"YulFunctionCall","src":"7992:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7974:6:201"},"nodeType":"YulFunctionCall","src":"7974:34:201"},"nodeType":"YulExpressionStatement","src":"7974:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8028:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8039:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8024:3:201"},"nodeType":"YulFunctionCall","src":"8024:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"8048:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"8056:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8044:3:201"},"nodeType":"YulFunctionCall","src":"8044:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8017:6:201"},"nodeType":"YulFunctionCall","src":"8017:43:201"},"nodeType":"YulExpressionStatement","src":"8017:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8080:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8091:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8076:3:201"},"nodeType":"YulFunctionCall","src":"8076:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"8096:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8069:6:201"},"nodeType":"YulFunctionCall","src":"8069:34:201"},"nodeType":"YulExpressionStatement","src":"8069:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8123:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8134:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8119:3:201"},"nodeType":"YulFunctionCall","src":"8119:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"8139:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8112:6:201"},"nodeType":"YulFunctionCall","src":"8112:34:201"},"nodeType":"YulExpressionStatement","src":"8112:34:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7812:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"7823:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7831:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7839:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7847:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7858:4:201","type":""}],"src":"7682:470:201"},{"body":{"nodeType":"YulBlock","src":"8258:76:201","statements":[{"nodeType":"YulAssignment","src":"8268:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8280:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8291:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8276:3:201"},"nodeType":"YulFunctionCall","src":"8276:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8268:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8310:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"8321:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8303:6:201"},"nodeType":"YulFunctionCall","src":"8303:25:201"},"nodeType":"YulExpressionStatement","src":"8303:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8227:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8238:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8249:4:201","type":""}],"src":"8157:177:201"},{"body":{"nodeType":"YulBlock","src":"8417:167:201","statements":[{"body":{"nodeType":"YulBlock","src":"8463:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8472:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8475:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8465:6:201"},"nodeType":"YulFunctionCall","src":"8465:12:201"},"nodeType":"YulExpressionStatement","src":"8465:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8438:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"8447:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8434:3:201"},"nodeType":"YulFunctionCall","src":"8434:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"8459:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8430:3:201"},"nodeType":"YulFunctionCall","src":"8430:32:201"},"nodeType":"YulIf","src":"8427:52:201"},{"nodeType":"YulVariableDeclaration","src":"8488:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8507:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8501:5:201"},"nodeType":"YulFunctionCall","src":"8501:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"8492:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8548:5:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"8526:21:201"},"nodeType":"YulFunctionCall","src":"8526:28:201"},"nodeType":"YulExpressionStatement","src":"8526:28:201"},{"nodeType":"YulAssignment","src":"8563:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"8573:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8563:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8383:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8394:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8406:6:201","type":""}],"src":"8339:245:201"},{"body":{"nodeType":"YulBlock","src":"8718:168:201","statements":[{"nodeType":"YulAssignment","src":"8728:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8740:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8751:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8736:3:201"},"nodeType":"YulFunctionCall","src":"8736:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8728:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8770:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8785:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8793:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8781:3:201"},"nodeType":"YulFunctionCall","src":"8781:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8763:6:201"},"nodeType":"YulFunctionCall","src":"8763:74:201"},"nodeType":"YulExpressionStatement","src":"8763:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8857:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8868:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8853:3:201"},"nodeType":"YulFunctionCall","src":"8853:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"8873:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8846:6:201"},"nodeType":"YulFunctionCall","src":"8846:34:201"},"nodeType":"YulExpressionStatement","src":"8846:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8679:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8690:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8698:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8709:4:201","type":""}],"src":"8589:297:201"},{"body":{"nodeType":"YulBlock","src":"9012:535:201","statements":[{"nodeType":"YulVariableDeclaration","src":"9022:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9032:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9026:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9050:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9061:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9043:6:201"},"nodeType":"YulFunctionCall","src":"9043:21:201"},"nodeType":"YulExpressionStatement","src":"9043:21:201"},{"nodeType":"YulVariableDeclaration","src":"9073:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9093:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9087:5:201"},"nodeType":"YulFunctionCall","src":"9087:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"9077:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9120:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9131:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9116:3:201"},"nodeType":"YulFunctionCall","src":"9116:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"9136:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9109:6:201"},"nodeType":"YulFunctionCall","src":"9109:34:201"},"nodeType":"YulExpressionStatement","src":"9109:34:201"},{"nodeType":"YulVariableDeclaration","src":"9152:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9161:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"9156:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"9221:90:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9250:9:201"},{"name":"i","nodeType":"YulIdentifier","src":"9261:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9246:3:201"},"nodeType":"YulFunctionCall","src":"9246:17:201"},{"kind":"number","nodeType":"YulLiteral","src":"9265:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9242:3:201"},"nodeType":"YulFunctionCall","src":"9242:26:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9284:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"9292:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9280:3:201"},"nodeType":"YulFunctionCall","src":"9280:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9296:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9276:3:201"},"nodeType":"YulFunctionCall","src":"9276:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9270:5:201"},"nodeType":"YulFunctionCall","src":"9270:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9235:6:201"},"nodeType":"YulFunctionCall","src":"9235:66:201"},"nodeType":"YulExpressionStatement","src":"9235:66:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"9182:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"9185:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9179:2:201"},"nodeType":"YulFunctionCall","src":"9179:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"9193:19:201","statements":[{"nodeType":"YulAssignment","src":"9195:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"9204:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9207:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9200:3:201"},"nodeType":"YulFunctionCall","src":"9200:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"9195:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"9175:3:201","statements":[]},"src":"9171:140:201"},{"body":{"nodeType":"YulBlock","src":"9345:66:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9374:9:201"},{"name":"length","nodeType":"YulIdentifier","src":"9385:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9370:3:201"},"nodeType":"YulFunctionCall","src":"9370:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"9394:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9366:3:201"},"nodeType":"YulFunctionCall","src":"9366:31:201"},{"kind":"number","nodeType":"YulLiteral","src":"9399:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9359:6:201"},"nodeType":"YulFunctionCall","src":"9359:42:201"},"nodeType":"YulExpressionStatement","src":"9359:42:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"9326:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"9329:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9323:2:201"},"nodeType":"YulFunctionCall","src":"9323:13:201"},"nodeType":"YulIf","src":"9320:91:201"},{"nodeType":"YulAssignment","src":"9420:121:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9436:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9455:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"9463:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9451:3:201"},"nodeType":"YulFunctionCall","src":"9451:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"9468:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9447:3:201"},"nodeType":"YulFunctionCall","src":"9447:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9432:3:201"},"nodeType":"YulFunctionCall","src":"9432:104:201"},{"kind":"number","nodeType":"YulLiteral","src":"9538:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9428:3:201"},"nodeType":"YulFunctionCall","src":"9428:113:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9420:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8981:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8992:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9003:4:201","type":""}],"src":"8891:656:201"},{"body":{"nodeType":"YulBlock","src":"9683:335:201","statements":[{"body":{"nodeType":"YulBlock","src":"9730:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9739:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9742:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9732:6:201"},"nodeType":"YulFunctionCall","src":"9732:12:201"},"nodeType":"YulExpressionStatement","src":"9732:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9704:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"9713:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9700:3:201"},"nodeType":"YulFunctionCall","src":"9700:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"9725:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9696:3:201"},"nodeType":"YulFunctionCall","src":"9696:33:201"},"nodeType":"YulIf","src":"9693:53:201"},{"nodeType":"YulAssignment","src":"9755:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9771:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9765:5:201"},"nodeType":"YulFunctionCall","src":"9765:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9755:6:201"}]},{"nodeType":"YulAssignment","src":"9790:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9810:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9821:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9806:3:201"},"nodeType":"YulFunctionCall","src":"9806:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9800:5:201"},"nodeType":"YulFunctionCall","src":"9800:25:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"9790:6:201"}]},{"nodeType":"YulAssignment","src":"9834:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9854:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9865:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9850:3:201"},"nodeType":"YulFunctionCall","src":"9850:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9844:5:201"},"nodeType":"YulFunctionCall","src":"9844:25:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"9834:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"9878:38:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9901:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9912:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9897:3:201"},"nodeType":"YulFunctionCall","src":"9897:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9891:5:201"},"nodeType":"YulFunctionCall","src":"9891:25:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9882:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"9972:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9981:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9984:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9974:6:201"},"nodeType":"YulFunctionCall","src":"9974:12:201"},"nodeType":"YulExpressionStatement","src":"9974:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9938:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9949:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"9956:12:201","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9945:3:201"},"nodeType":"YulFunctionCall","src":"9945:24:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"9935:2:201"},"nodeType":"YulFunctionCall","src":"9935:35:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9928:6:201"},"nodeType":"YulFunctionCall","src":"9928:43:201"},"nodeType":"YulIf","src":"9925:63:201"},{"nodeType":"YulAssignment","src":"9997:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"10007:5:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"9997:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9625:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9636:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9648:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9656:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9664:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9672:6:201","type":""}],"src":"9552:466:201"},{"body":{"nodeType":"YulBlock","src":"10218:729:201","statements":[{"nodeType":"YulAssignment","src":"10228:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10240:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10251:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10236:3:201"},"nodeType":"YulFunctionCall","src":"10236:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10228:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10271:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10288:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10282:5:201"},"nodeType":"YulFunctionCall","src":"10282:13:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10264:6:201"},"nodeType":"YulFunctionCall","src":"10264:32:201"},"nodeType":"YulExpressionStatement","src":"10264:32:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10316:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10327:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10312:3:201"},"nodeType":"YulFunctionCall","src":"10312:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10344:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10352:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10340:3:201"},"nodeType":"YulFunctionCall","src":"10340:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10334:5:201"},"nodeType":"YulFunctionCall","src":"10334:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10305:6:201"},"nodeType":"YulFunctionCall","src":"10305:54:201"},"nodeType":"YulExpressionStatement","src":"10305:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10379:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10390:4:201","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10375:3:201"},"nodeType":"YulFunctionCall","src":"10375:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10407:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10415:4:201","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10403:3:201"},"nodeType":"YulFunctionCall","src":"10403:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10397:5:201"},"nodeType":"YulFunctionCall","src":"10397:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10368:6:201"},"nodeType":"YulFunctionCall","src":"10368:54:201"},"nodeType":"YulExpressionStatement","src":"10368:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10442:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10453:4:201","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10438:3:201"},"nodeType":"YulFunctionCall","src":"10438:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10470:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10478:4:201","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10466:3:201"},"nodeType":"YulFunctionCall","src":"10466:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10460:5:201"},"nodeType":"YulFunctionCall","src":"10460:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10431:6:201"},"nodeType":"YulFunctionCall","src":"10431:54:201"},"nodeType":"YulExpressionStatement","src":"10431:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10505:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10516:4:201","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10501:3:201"},"nodeType":"YulFunctionCall","src":"10501:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10533:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10541:4:201","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10529:3:201"},"nodeType":"YulFunctionCall","src":"10529:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10523:5:201"},"nodeType":"YulFunctionCall","src":"10523:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10494:6:201"},"nodeType":"YulFunctionCall","src":"10494:54:201"},"nodeType":"YulExpressionStatement","src":"10494:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10568:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10579:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10564:3:201"},"nodeType":"YulFunctionCall","src":"10564:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10596:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10604:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10592:3:201"},"nodeType":"YulFunctionCall","src":"10592:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10586:5:201"},"nodeType":"YulFunctionCall","src":"10586:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10557:6:201"},"nodeType":"YulFunctionCall","src":"10557:54:201"},"nodeType":"YulExpressionStatement","src":"10557:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10631:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10642:4:201","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10627:3:201"},"nodeType":"YulFunctionCall","src":"10627:20:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10659:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10667:4:201","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10655:3:201"},"nodeType":"YulFunctionCall","src":"10655:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10649:5:201"},"nodeType":"YulFunctionCall","src":"10649:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10620:6:201"},"nodeType":"YulFunctionCall","src":"10620:54:201"},"nodeType":"YulExpressionStatement","src":"10620:54:201"},{"nodeType":"YulVariableDeclaration","src":"10683:44:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10713:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10721:4:201","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10709:3:201"},"nodeType":"YulFunctionCall","src":"10709:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10703:5:201"},"nodeType":"YulFunctionCall","src":"10703:24:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"10687:12:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10736:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10746:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10740:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10808:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10819:4:201","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10804:3:201"},"nodeType":"YulFunctionCall","src":"10804:20:201"},{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"10830:12:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10844:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10826:3:201"},"nodeType":"YulFunctionCall","src":"10826:21:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10797:6:201"},"nodeType":"YulFunctionCall","src":"10797:51:201"},"nodeType":"YulExpressionStatement","src":"10797:51:201"},{"nodeType":"YulVariableDeclaration","src":"10857:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10867:6:201","type":"","value":"0x0100"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"10861:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10893:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"10904:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10889:3:201"},"nodeType":"YulFunctionCall","src":"10889:18:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10923:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"10931:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10919:3:201"},"nodeType":"YulFunctionCall","src":"10919:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10913:5:201"},"nodeType":"YulFunctionCall","src":"10913:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10937:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10909:3:201"},"nodeType":"YulFunctionCall","src":"10909:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10882:6:201"},"nodeType":"YulFunctionCall","src":"10882:59:201"},"nodeType":"YulExpressionStatement","src":"10882:59:201"}]},"name":"abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10187:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10198:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10209:4:201","type":""}],"src":"10023:924:201"},{"body":{"nodeType":"YulBlock","src":"11067:191:201","statements":[{"body":{"nodeType":"YulBlock","src":"11113:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11122:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11125:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11115:6:201"},"nodeType":"YulFunctionCall","src":"11115:12:201"},"nodeType":"YulExpressionStatement","src":"11115:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11088:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"11097:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11084:3:201"},"nodeType":"YulFunctionCall","src":"11084:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"11109:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11080:3:201"},"nodeType":"YulFunctionCall","src":"11080:32:201"},"nodeType":"YulIf","src":"11077:52:201"},{"nodeType":"YulAssignment","src":"11138:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11154:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11148:5:201"},"nodeType":"YulFunctionCall","src":"11148:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11138:6:201"}]},{"nodeType":"YulAssignment","src":"11173:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11193:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11204:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11189:3:201"},"nodeType":"YulFunctionCall","src":"11189:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11183:5:201"},"nodeType":"YulFunctionCall","src":"11183:25:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"11173:6:201"}]},{"nodeType":"YulAssignment","src":"11217:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11237:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11248:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11233:3:201"},"nodeType":"YulFunctionCall","src":"11233:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11227:5:201"},"nodeType":"YulFunctionCall","src":"11227:25:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"11217:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11017:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11028:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11040:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11048:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11056:6:201","type":""}],"src":"10952:306:201"},{"body":{"nodeType":"YulBlock","src":"11476:250:201","statements":[{"nodeType":"YulAssignment","src":"11486:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11498:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11509:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11494:3:201"},"nodeType":"YulFunctionCall","src":"11494:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11486:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11529:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"11540:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11522:6:201"},"nodeType":"YulFunctionCall","src":"11522:25:201"},"nodeType":"YulExpressionStatement","src":"11522:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11567:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11578:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11563:3:201"},"nodeType":"YulFunctionCall","src":"11563:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"11583:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11556:6:201"},"nodeType":"YulFunctionCall","src":"11556:34:201"},"nodeType":"YulExpressionStatement","src":"11556:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11610:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11621:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11606:3:201"},"nodeType":"YulFunctionCall","src":"11606:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"11626:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11599:6:201"},"nodeType":"YulFunctionCall","src":"11599:34:201"},"nodeType":"YulExpressionStatement","src":"11599:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11653:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11664:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11649:3:201"},"nodeType":"YulFunctionCall","src":"11649:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"11669:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11642:6:201"},"nodeType":"YulFunctionCall","src":"11642:34:201"},"nodeType":"YulExpressionStatement","src":"11642:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11696:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11707:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11692:3:201"},"nodeType":"YulFunctionCall","src":"11692:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"11713:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11685:6:201"},"nodeType":"YulFunctionCall","src":"11685:35:201"},"nodeType":"YulExpressionStatement","src":"11685:35:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11413:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"11424:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11432:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11440:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11448:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11456:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11467:4:201","type":""}],"src":"11263:463:201"},{"body":{"nodeType":"YulBlock","src":"11763:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11780:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11783:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11773:6:201"},"nodeType":"YulFunctionCall","src":"11773:88:201"},"nodeType":"YulExpressionStatement","src":"11773:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11877:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"11880:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11870:6:201"},"nodeType":"YulFunctionCall","src":"11870:15:201"},"nodeType":"YulExpressionStatement","src":"11870:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11901:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11904:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11894:6:201"},"nodeType":"YulFunctionCall","src":"11894:15:201"},"nodeType":"YulExpressionStatement","src":"11894:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"11731:184:201"},{"body":{"nodeType":"YulBlock","src":"11984:418:201","statements":[{"nodeType":"YulVariableDeclaration","src":"11994:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12009:1:201","type":"","value":"1"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"11998:7:201","type":""}]},{"nodeType":"YulAssignment","src":"12019:16:201","value":{"name":"power_1","nodeType":"YulIdentifier","src":"12028:7:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"12019:5:201"}]},{"nodeType":"YulAssignment","src":"12044:13:201","value":{"name":"_base","nodeType":"YulIdentifier","src":"12052:5:201"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"12044:4:201"}]},{"body":{"nodeType":"YulBlock","src":"12108:288:201","statements":[{"body":{"nodeType":"YulBlock","src":"12213:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"12215:16:201"},"nodeType":"YulFunctionCall","src":"12215:18:201"},"nodeType":"YulExpressionStatement","src":"12215:18:201"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"12128:4:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12138:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base","nodeType":"YulIdentifier","src":"12206:4:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"12134:3:201"},"nodeType":"YulFunctionCall","src":"12134:77:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12125:2:201"},"nodeType":"YulFunctionCall","src":"12125:87:201"},"nodeType":"YulIf","src":"12122:113:201"},{"body":{"nodeType":"YulBlock","src":"12274:29:201","statements":[{"nodeType":"YulAssignment","src":"12276:25:201","value":{"arguments":[{"name":"power","nodeType":"YulIdentifier","src":"12289:5:201"},{"name":"base","nodeType":"YulIdentifier","src":"12296:4:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"12285:3:201"},"nodeType":"YulFunctionCall","src":"12285:16:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"12276:5:201"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"12255:8:201"},{"name":"power_1","nodeType":"YulIdentifier","src":"12265:7:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12251:3:201"},"nodeType":"YulFunctionCall","src":"12251:22:201"},"nodeType":"YulIf","src":"12248:55:201"},{"nodeType":"YulAssignment","src":"12316:23:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"12328:4:201"},{"name":"base","nodeType":"YulIdentifier","src":"12334:4:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"12324:3:201"},"nodeType":"YulFunctionCall","src":"12324:15:201"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"12316:4:201"}]},{"nodeType":"YulAssignment","src":"12352:34:201","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"12368:7:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"12377:8:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"12364:3:201"},"nodeType":"YulFunctionCall","src":"12364:22:201"},"variableNames":[{"name":"exponent","nodeType":"YulIdentifier","src":"12352:8:201"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"12077:8:201"},{"name":"power_1","nodeType":"YulIdentifier","src":"12087:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12074:2:201"},"nodeType":"YulFunctionCall","src":"12074:21:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"12096:3:201","statements":[]},"pre":{"nodeType":"YulBlock","src":"12070:3:201","statements":[]},"src":"12066:330:201"}]},"name":"checked_exp_helper","nodeType":"YulFunctionDefinition","parameters":[{"name":"_base","nodeType":"YulTypedName","src":"11948:5:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"11955:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"11968:5:201","type":""},{"name":"base","nodeType":"YulTypedName","src":"11975:4:201","type":""}],"src":"11920:482:201"},{"body":{"nodeType":"YulBlock","src":"12466:807:201","statements":[{"body":{"nodeType":"YulBlock","src":"12504:52:201","statements":[{"nodeType":"YulAssignment","src":"12518:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12527:1:201","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"12518:5:201"}]},{"nodeType":"YulLeave","src":"12541:5:201"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"12486:8:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12479:6:201"},"nodeType":"YulFunctionCall","src":"12479:16:201"},"nodeType":"YulIf","src":"12476:80:201"},{"body":{"nodeType":"YulBlock","src":"12589:52:201","statements":[{"nodeType":"YulAssignment","src":"12603:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12612:1:201","type":"","value":"0"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"12603:5:201"}]},{"nodeType":"YulLeave","src":"12626:5:201"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"12575:4:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12568:6:201"},"nodeType":"YulFunctionCall","src":"12568:12:201"},"nodeType":"YulIf","src":"12565:76:201"},{"cases":[{"body":{"nodeType":"YulBlock","src":"12677:52:201","statements":[{"nodeType":"YulAssignment","src":"12691:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12700:1:201","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"12691:5:201"}]},{"nodeType":"YulLeave","src":"12714:5:201"}]},"nodeType":"YulCase","src":"12670:59:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12675:1:201","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"12745:123:201","statements":[{"body":{"nodeType":"YulBlock","src":"12780:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"12782:16:201"},"nodeType":"YulFunctionCall","src":"12782:18:201"},"nodeType":"YulExpressionStatement","src":"12782:18:201"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"12765:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"12775:3:201","type":"","value":"255"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12762:2:201"},"nodeType":"YulFunctionCall","src":"12762:17:201"},"nodeType":"YulIf","src":"12759:43:201"},{"nodeType":"YulAssignment","src":"12815:25:201","value":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"12828:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"12838:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"12824:3:201"},"nodeType":"YulFunctionCall","src":"12824:16:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"12815:5:201"}]},{"nodeType":"YulLeave","src":"12853:5:201"}]},"nodeType":"YulCase","src":"12738:130:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12743:1:201","type":"","value":"2"}}],"expression":{"name":"base","nodeType":"YulIdentifier","src":"12657:4:201"},"nodeType":"YulSwitch","src":"12650:218:201"},{"body":{"nodeType":"YulBlock","src":"12966:70:201","statements":[{"nodeType":"YulAssignment","src":"12980:28:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"12993:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"12999:8:201"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"12989:3:201"},"nodeType":"YulFunctionCall","src":"12989:19:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"12980:5:201"}]},{"nodeType":"YulLeave","src":"13021:5:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"12890:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"12896:2:201","type":"","value":"11"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"12887:2:201"},"nodeType":"YulFunctionCall","src":"12887:12:201"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"12904:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"12914:2:201","type":"","value":"78"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"12901:2:201"},"nodeType":"YulFunctionCall","src":"12901:16:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12883:3:201"},"nodeType":"YulFunctionCall","src":"12883:35:201"},{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"12927:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"12933:3:201","type":"","value":"307"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"12924:2:201"},"nodeType":"YulFunctionCall","src":"12924:13:201"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"12942:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"12952:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"12939:2:201"},"nodeType":"YulFunctionCall","src":"12939:16:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12920:3:201"},"nodeType":"YulFunctionCall","src":"12920:36:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"12880:2:201"},"nodeType":"YulFunctionCall","src":"12880:77:201"},"nodeType":"YulIf","src":"12877:159:201"},{"nodeType":"YulVariableDeclaration","src":"13045:57:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"13087:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"13093:8:201"}],"functionName":{"name":"checked_exp_helper","nodeType":"YulIdentifier","src":"13068:18:201"},"nodeType":"YulFunctionCall","src":"13068:34:201"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"13049:7:201","type":""},{"name":"base_1","nodeType":"YulTypedName","src":"13058:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"13207:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"13209:16:201"},"nodeType":"YulFunctionCall","src":"13209:18:201"},"nodeType":"YulExpressionStatement","src":"13209:18:201"}]},"condition":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"13117:7:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13130:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base_1","nodeType":"YulIdentifier","src":"13198:6:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"13126:3:201"},"nodeType":"YulFunctionCall","src":"13126:79:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13114:2:201"},"nodeType":"YulFunctionCall","src":"13114:92:201"},"nodeType":"YulIf","src":"13111:118:201"},{"nodeType":"YulAssignment","src":"13238:29:201","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"13251:7:201"},{"name":"base_1","nodeType":"YulIdentifier","src":"13260:6:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"13247:3:201"},"nodeType":"YulFunctionCall","src":"13247:20:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"13238:5:201"}]}]},"name":"checked_exp_unsigned","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"12437:4:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"12443:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"12456:5:201","type":""}],"src":"12407:866:201"},{"body":{"nodeType":"YulBlock","src":"13348:61:201","statements":[{"nodeType":"YulAssignment","src":"13358:45:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"13388:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"13394:8:201"}],"functionName":{"name":"checked_exp_unsigned","nodeType":"YulIdentifier","src":"13367:20:201"},"nodeType":"YulFunctionCall","src":"13367:36:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"13358:5:201"}]}]},"name":"checked_exp_t_uint256_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"13319:4:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"13325:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"13338:5:201","type":""}],"src":"13278:131:201"},{"body":{"nodeType":"YulBlock","src":"13466:176:201","statements":[{"body":{"nodeType":"YulBlock","src":"13585:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"13587:16:201"},"nodeType":"YulFunctionCall","src":"13587:18:201"},"nodeType":"YulExpressionStatement","src":"13587:18:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"13497:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13490:6:201"},"nodeType":"YulFunctionCall","src":"13490:9:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13483:6:201"},"nodeType":"YulFunctionCall","src":"13483:17:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"13505:1:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13512:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"13580:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"13508:3:201"},"nodeType":"YulFunctionCall","src":"13508:74:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13502:2:201"},"nodeType":"YulFunctionCall","src":"13502:81:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13479:3:201"},"nodeType":"YulFunctionCall","src":"13479:105:201"},"nodeType":"YulIf","src":"13476:131:201"},{"nodeType":"YulAssignment","src":"13616:20:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"13631:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"13634:1:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"13627:3:201"},"nodeType":"YulFunctionCall","src":"13627:9:201"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"13616:7:201"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"13445:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"13448:1:201","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"13454:7:201","type":""}],"src":"13414:228:201"},{"body":{"nodeType":"YulBlock","src":"13695:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"13722:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"13724:16:201"},"nodeType":"YulFunctionCall","src":"13724:18:201"},"nodeType":"YulExpressionStatement","src":"13724:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"13711:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"13718:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"13714:3:201"},"nodeType":"YulFunctionCall","src":"13714:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13708:2:201"},"nodeType":"YulFunctionCall","src":"13708:13:201"},"nodeType":"YulIf","src":"13705:39:201"},{"nodeType":"YulAssignment","src":"13753:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"13764:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"13767:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13760:3:201"},"nodeType":"YulFunctionCall","src":"13760:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"13753:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"13678:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"13681:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"13687:3:201","type":""}],"src":"13647:128:201"},{"body":{"nodeType":"YulBlock","src":"13954:175:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13971:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13982:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13964:6:201"},"nodeType":"YulFunctionCall","src":"13964:21:201"},"nodeType":"YulExpressionStatement","src":"13964:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14005:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14016:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14001:3:201"},"nodeType":"YulFunctionCall","src":"14001:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"14021:2:201","type":"","value":"25"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13994:6:201"},"nodeType":"YulFunctionCall","src":"13994:30:201"},"nodeType":"YulExpressionStatement","src":"13994:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14044:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14055:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14040:3:201"},"nodeType":"YulFunctionCall","src":"14040:18:201"},{"hexValue":"475076323a206661696c6564207472616e7366657246726f6d","kind":"string","nodeType":"YulLiteral","src":"14060:27:201","type":"","value":"GPv2: failed transferFrom"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14033:6:201"},"nodeType":"YulFunctionCall","src":"14033:55:201"},"nodeType":"YulExpressionStatement","src":"14033:55:201"},{"nodeType":"YulAssignment","src":"14097:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14109:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14120:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14105:3:201"},"nodeType":"YulFunctionCall","src":"14105:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14097:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13931:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13945:4:201","type":""}],"src":"13780:349:201"},{"body":{"nodeType":"YulBlock","src":"14229:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"14275:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14284:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14287:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14277:6:201"},"nodeType":"YulFunctionCall","src":"14277:12:201"},"nodeType":"YulExpressionStatement","src":"14277:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14250:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"14259:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14246:3:201"},"nodeType":"YulFunctionCall","src":"14246:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"14271:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14242:3:201"},"nodeType":"YulFunctionCall","src":"14242:32:201"},"nodeType":"YulIf","src":"14239:52:201"},{"nodeType":"YulVariableDeclaration","src":"14300:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14319:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14313:5:201"},"nodeType":"YulFunctionCall","src":"14313:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"14304:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14363:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"14338:24:201"},"nodeType":"YulFunctionCall","src":"14338:31:201"},"nodeType":"YulExpressionStatement","src":"14338:31:201"},{"nodeType":"YulAssignment","src":"14378:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"14388:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14378:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$4860_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14195:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14206:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14218:6:201","type":""}],"src":"14134:265:201"},{"body":{"nodeType":"YulBlock","src":"14516:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"14562:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14571:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14574:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14564:6:201"},"nodeType":"YulFunctionCall","src":"14564:12:201"},"nodeType":"YulExpressionStatement","src":"14564:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14537:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"14546:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14533:3:201"},"nodeType":"YulFunctionCall","src":"14533:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"14558:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14529:3:201"},"nodeType":"YulFunctionCall","src":"14529:32:201"},"nodeType":"YulIf","src":"14526:52:201"},{"nodeType":"YulVariableDeclaration","src":"14587:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14606:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14600:5:201"},"nodeType":"YulFunctionCall","src":"14600:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"14591:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14650:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"14625:24:201"},"nodeType":"YulFunctionCall","src":"14625:31:201"},"nodeType":"YulExpressionStatement","src":"14625:31:201"},{"nodeType":"YulAssignment","src":"14665:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"14675:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14665:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14482:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14493:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14505:6:201","type":""}],"src":"14404:282:201"},{"body":{"nodeType":"YulBlock","src":"14772:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"14818:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14827:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14830:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14820:6:201"},"nodeType":"YulFunctionCall","src":"14820:12:201"},"nodeType":"YulExpressionStatement","src":"14820:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14793:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"14802:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14789:3:201"},"nodeType":"YulFunctionCall","src":"14789:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"14814:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14785:3:201"},"nodeType":"YulFunctionCall","src":"14785:32:201"},"nodeType":"YulIf","src":"14782:52:201"},{"nodeType":"YulVariableDeclaration","src":"14843:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14862:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14856:5:201"},"nodeType":"YulFunctionCall","src":"14856:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"14847:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14906:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"14881:24:201"},"nodeType":"YulFunctionCall","src":"14881:31:201"},"nodeType":"YulExpressionStatement","src":"14881:31:201"},{"nodeType":"YulAssignment","src":"14921:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"14931:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14921:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14738:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14749:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14761:6:201","type":""}],"src":"14691:251:201"},{"body":{"nodeType":"YulBlock","src":"15076:168:201","statements":[{"nodeType":"YulAssignment","src":"15086:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15098:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15109:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15094:3:201"},"nodeType":"YulFunctionCall","src":"15094:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15086:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15128:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"15139:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15121:6:201"},"nodeType":"YulFunctionCall","src":"15121:25:201"},"nodeType":"YulExpressionStatement","src":"15121:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15166:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15177:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15162:3:201"},"nodeType":"YulFunctionCall","src":"15162:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"15186:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"15194:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15182:3:201"},"nodeType":"YulFunctionCall","src":"15182:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15155:6:201"},"nodeType":"YulFunctionCall","src":"15155:83:201"},"nodeType":"YulExpressionStatement","src":"15155:83:201"}]},"name":"abi_encode_tuple_t_bytes32_t_address__to_t_bytes32_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15037:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15048:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15056:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15067:4:201","type":""}],"src":"14947:297:201"},{"body":{"nodeType":"YulBlock","src":"15298:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"15320:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15322:16:201"},"nodeType":"YulFunctionCall","src":"15322:18:201"},"nodeType":"YulExpressionStatement","src":"15322:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15314:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"15317:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15311:2:201"},"nodeType":"YulFunctionCall","src":"15311:8:201"},"nodeType":"YulIf","src":"15308:34:201"},{"nodeType":"YulAssignment","src":"15351:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15363:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"15366:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15359:3:201"},"nodeType":"YulFunctionCall","src":"15359:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"15351:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15280:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"15283:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"15289:4:201","type":""}],"src":"15249:125:201"},{"body":{"nodeType":"YulBlock","src":"15427:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"15437:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"15447:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15441:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15490:21:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15505:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15508:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15501:3:201"},"nodeType":"YulFunctionCall","src":"15501:10:201"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15494:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15520:21:201","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"15535:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15538:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15531:3:201"},"nodeType":"YulFunctionCall","src":"15531:10:201"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"15524:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"15575:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15577:16:201"},"nodeType":"YulFunctionCall","src":"15577:18:201"},"nodeType":"YulExpressionStatement","src":"15577:18:201"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15556:3:201"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"15565:2:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"15569:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15561:3:201"},"nodeType":"YulFunctionCall","src":"15561:12:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15553:2:201"},"nodeType":"YulFunctionCall","src":"15553:21:201"},"nodeType":"YulIf","src":"15550:47:201"},{"nodeType":"YulAssignment","src":"15606:20:201","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15617:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"15622:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15613:3:201"},"nodeType":"YulFunctionCall","src":"15613:13:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"15606:3:201"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15410:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"15413:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"15419:3:201","type":""}],"src":"15379:253:201"},{"body":{"nodeType":"YulBlock","src":"15811:229:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15828:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15839:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15821:6:201"},"nodeType":"YulFunctionCall","src":"15821:21:201"},"nodeType":"YulExpressionStatement","src":"15821:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15862:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15873:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15858:3:201"},"nodeType":"YulFunctionCall","src":"15858:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"15878:2:201","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15851:6:201"},"nodeType":"YulFunctionCall","src":"15851:30:201"},"nodeType":"YulExpressionStatement","src":"15851:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15901:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15912:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15897:3:201"},"nodeType":"YulFunctionCall","src":"15897:18:201"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"15917:34:201","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15890:6:201"},"nodeType":"YulFunctionCall","src":"15890:62:201"},"nodeType":"YulExpressionStatement","src":"15890:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15972:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15983:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15968:3:201"},"nodeType":"YulFunctionCall","src":"15968:18:201"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"15988:9:201","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15961:6:201"},"nodeType":"YulFunctionCall","src":"15961:37:201"},"nodeType":"YulExpressionStatement","src":"15961:37:201"},{"nodeType":"YulAssignment","src":"16007:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16019:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16030:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16015:3:201"},"nodeType":"YulFunctionCall","src":"16015:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16007:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15788:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15802:4:201","type":""}],"src":"15637:403:201"},{"body":{"nodeType":"YulBlock","src":"16077:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16094:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16097:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16087:6:201"},"nodeType":"YulFunctionCall","src":"16087:88:201"},"nodeType":"YulExpressionStatement","src":"16087:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16191:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"16194:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16184:6:201"},"nodeType":"YulFunctionCall","src":"16184:15:201"},"nodeType":"YulExpressionStatement","src":"16184:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16215:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16218:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16208:6:201"},"nodeType":"YulFunctionCall","src":"16208:15:201"},"nodeType":"YulExpressionStatement","src":"16208:15:201"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"16045:184:201"},{"body":{"nodeType":"YulBlock","src":"16280:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"16311:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16332:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16335:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16325:6:201"},"nodeType":"YulFunctionCall","src":"16325:88:201"},"nodeType":"YulExpressionStatement","src":"16325:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16433:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"16436:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16426:6:201"},"nodeType":"YulFunctionCall","src":"16426:15:201"},"nodeType":"YulExpressionStatement","src":"16426:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16461:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16464:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16454:6:201"},"nodeType":"YulFunctionCall","src":"16454:15:201"},"nodeType":"YulExpressionStatement","src":"16454:15:201"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"16300:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"16293:6:201"},"nodeType":"YulFunctionCall","src":"16293:9:201"},"nodeType":"YulIf","src":"16290:189:201"},{"nodeType":"YulAssignment","src":"16488:14:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"16497:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"16500:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"16493:3:201"},"nodeType":"YulFunctionCall","src":"16493:9:201"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"16488:1:201"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"16265:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"16268:1:201","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"16274:1:201","type":""}],"src":"16234:274:201"}]},"contents":"{\n    { }\n    function allocate_memory_2073() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xc0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory_2075() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x80)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x0120)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$t_struct$_UserConfigurationMap_$21322_storage_ptrt_struct$_ExecuteWithdrawParams_$21458_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 320) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80), 0xc0) { revert(0, 0) }\n        let value := allocate_memory_2073()\n        let value_1 := calldataload(add(headStart, 128))\n        validator_revert_address(value_1)\n        mstore(value, value_1)\n        mstore(add(value, 32), calldataload(add(headStart, 160)))\n        let value_2 := calldataload(add(headStart, 0xc0))\n        validator_revert_address(value_2)\n        mstore(add(value, 64), value_2)\n        mstore(add(value, 96), calldataload(add(headStart, 224)))\n        let value_3 := calldataload(add(headStart, 256))\n        validator_revert_address(value_3)\n        mstore(add(value, 128), value_3)\n        mstore(add(value, 160), abi_decode_uint8(add(headStart, 288)))\n        value4 := value\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_struct$_UserConfigurationMap_$21322_storage_ptrt_struct$_ExecuteSupplyParams_$21407_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 224) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0), 0x80) { revert(0, 0) }\n        let value := allocate_memory_2075()\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_address(value_1)\n        mstore(value, value_1)\n        mstore(add(value, 32), calldataload(add(headStart, 0x80)))\n        let value_2 := calldataload(add(headStart, 160))\n        validator_revert_address(value_2)\n        mstore(add(value, 64), value_2)\n        let value_3 := calldataload(add(headStart, 192))\n        if iszero(eq(value_3, and(value_3, 0xffff))) { revert(0, 0) }\n        mstore(add(value, 96), value_3)\n        value3 := value\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$t_struct$_FinalizeTransferParams_$21484_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 416) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        let _2 := 0x0120\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80), _2) { revert(0, 0) }\n        let value := allocate_memory()\n        mstore(value, abi_decode_address(add(headStart, 128)))\n        mstore(add(value, 32), abi_decode_address(add(headStart, 160)))\n        mstore(add(value, 64), abi_decode_address(add(headStart, 192)))\n        mstore(add(value, 96), calldataload(add(headStart, 224)))\n        let _3 := 256\n        mstore(add(value, 128), calldataload(add(headStart, _3)))\n        mstore(add(value, 160), calldataload(add(headStart, _2)))\n        mstore(add(value, 192), calldataload(add(headStart, 320)))\n        mstore(add(value, 224), abi_decode_address(add(headStart, 352)))\n        mstore(add(value, _3), abi_decode_uint8(add(headStart, 384)))\n        value4 := value\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$t_mapping$_t_uint256_$_t_address_$t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$t_struct$_UserConfigurationMap_$21322_storage_ptrt_addresst_boolt_uint256t_addresst_uint8(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8\n    {\n        if slt(sub(dataEnd, headStart), 288) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        let value := calldataload(add(headStart, 128))\n        validator_revert_address(value)\n        value4 := value\n        let value_1 := calldataload(add(headStart, 160))\n        validator_revert_bool(value_1)\n        value5 := value_1\n        value6 := calldataload(add(headStart, 192))\n        let value_2 := calldataload(add(headStart, 224))\n        validator_revert_address(value_2)\n        value7 := value_2\n        value8 := abi_decode_uint8(add(headStart, 256))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        let value := mload(add(headStart, 96))\n        if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n        value3 := value\n    }\n    function abi_encode_tuple_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__to_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 288)\n        mstore(headStart, mload(value0))\n        mstore(add(headStart, 0x20), mload(add(value0, 0x20)))\n        mstore(add(headStart, 0x40), mload(add(value0, 0x40)))\n        mstore(add(headStart, 0x60), mload(add(value0, 0x60)))\n        mstore(add(headStart, 0x80), mload(add(value0, 0x80)))\n        mstore(add(headStart, 0xa0), mload(add(value0, 0xa0)))\n        mstore(add(headStart, 0xc0), mload(add(value0, 0xc0)))\n        let memberValue0 := mload(add(value0, 0xe0))\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 0xe0), and(memberValue0, _1))\n        let _2 := 0x0100\n        mstore(add(headStart, _2), and(mload(add(value0, _2)), _1))\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint256(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, exponent)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"GPv2: failed transferFrom\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_contract$_IPool_$4860_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_bytes32_t_address__to_t_bytes32_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c8063186dea441461005b5780631913f1611461008d5780638a5dadd1146100af578063bf697a26146100cf575b600080fd5b81801561006757600080fd5b5061007b6100763660046136a7565b6100ef565b60405190815260200160405180910390f35b81801561009957600080fd5b506100ad6100a836600461377e565b6104a2565b005b8180156100bb57600080fd5b506100ad6100ca366004613832565b610751565b8180156100db57600080fd5b506100ad6100ea36600461393b565b610a2d565b805173ffffffffffffffffffffffffffffffffffffffff1660009081526020869052604081208161011f82610cf9565b905061012b8282610f12565b6101008101516101e08201516040517f1da24f3e0000000000000000000000000000000000000000000000000000000081523360048201526000926101d692909173ffffffffffffffffffffffffffffffffffffffff90911690631da24f3e906024015b602060405180830381865afa1580156101ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d091906139c6565b90610f9d565b60208601519091507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114156102095750805b610214838284610ff4565b85516102269085908590600085611211565b600384015460408051602081019091528854815260009161026491907501000000000000000000000000000000000000000000900461ffff16611552565b905080801561027257508282145b156102eb5760038501546102a69089907501000000000000000000000000000000000000000000900461ffff1660006115dd565b8651604051339173ffffffffffffffffffffffffffffffffffffffff16907f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd90600090a35b6101e084015160408089015161010087015191517fd7020d0a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff91821660248201526044810186905260648101929092529091169063d7020d0a90608401600060405180830381600087803b15801561037b57600080fd5b505af115801561038f573d6000803e3d6000fd5b505050508080156103d1575060408051602081019091528854908190527f55555555555555555555555555555555555555555555555555555555555555551615155b1561040c5761040c8b8b8b8b6040518060200160405290816000820154815250508b60000151338d606001518e608001518f60a00151611674565b866040015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16886000015173ffffffffffffffffffffffffffffffffffffffff167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f78560405161048a91815260200190565b60405180910390a45093505050505b95945050505050565b805173ffffffffffffffffffffffffffffffffffffffff166000908152602085905260408120906104d282610cf9565b90506104de8282610f12565b6104ed81838560200151611830565b825160208401516105049184918491906000611211565b6101e0810151602084015184516105369273ffffffffffffffffffffffffffffffffffffffff90911691339190611bb8565b6101e0810151604080850151602086015161010085015192517fb3f1c93d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff928316602482015260448101919091526064810192909252600092169063b3f1c93d906084016020604051808303816000875af11580156105d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f691906139df565b905080156106ab57610615878787856101c00151866101e00151611c9a565b156106ab5760038301546106499086907501000000000000000000000000000000000000000000900461ffff1660016115dd565b836040015173ffffffffffffffffffffffffffffffffffffffff16846000015173ffffffffffffffffffffffffffffffffffffffff167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a35b836060015161ffff16846040015173ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167f2b627736bca15cd5381dcf80b0bf11fd197d01a037c52b927a881a10fb73ba6133886020015160405161074092919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a450505050505050565b805173ffffffffffffffffffffffffffffffffffffffff16600090815260208690526040902061078081611eda565b600381015460408301516020840151750100000000000000000000000000000000000000000090920461ffff169173ffffffffffffffffffffffffffffffffffffffff9182169116148015906107d95750606083015115155b15610a245760208084015173ffffffffffffffffffffffffffffffffffffffff1660009081528582526040908190208151928301909152805482529061081f9083611552565b156109575760408051602081019091528154908190527f555555555555555555555555555555555555555555555555555555555555555516156108d8576108d8888888886000896020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806020016040529081600082015481525050886000015189602001518a60c001518b60e001518c6101000151611674565b836060015184608001511415610957576108f4818360006115dd565b836020015173ffffffffffffffffffffffffffffffffffffffff16846000015173ffffffffffffffffffffffffffffffffffffffff167f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd60405160405180910390a35b60a0840151610a225760408085015173ffffffffffffffffffffffffffffffffffffffff908116600090815260208881529083902083519182019093528554815260048601546109ad928c928c92869216611c9a565b15610a20576109be818460016115dd565b846040015173ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff167e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f260405160405180910390a35b505b505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260208a90526040812090610a5c82610cf9565b6101e08101516040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015291925060009173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015610ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af791906139c6565b9050610b038282611f62565b600383015460408051602081019091528a548152610b3d917501000000000000000000000000000000000000000000900461ffff16611552565b15158715151415610b5057505050610a20565b8615610c5557610b678c8c8b856101c00151612107565b6040518060400160405280600281526020017f363200000000000000000000000000000000000000000000000000000000000081525090610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b60405180910390fd5b506003830154610c0e908a907501000000000000000000000000000000000000000000900461ffff1660016115dd565b604051339073ffffffffffffffffffffffffffffffffffffffff8a16907e058a56ea94653cdf4f152d227ace22d4c00ad99e2a43f58cb7d9e3feb295f290600090a3610ceb565b6003830154610c84908a907501000000000000000000000000000000000000000000900461ffff1660006115dd565b604080516020810190915289548152610ca7908d908d908d908c338c8c8c611674565b604051339073ffffffffffffffffffffffffffffffffffffffff8a16907f44c58d81365b66dd4b1a7f36c25aa97b8c71c361ee4937adc1a00000227db5dd90600090a35b505050505050505050505050565b610d016134cf565b610d096134cf565b60408051602081018252845481526101c0830181905251901c61ffff166101a082015260018301546fffffffffffffffffffffffffffffffff808216610100840181905260e0840152600285015480821661014085018190526101208501527001000000000000000000000000000000009283900482166101608501528290041661018083015260048085015473ffffffffffffffffffffffffffffffffffffffff9081166101e085015260058601548116610200850152600686015416610220840181905260038601549290920464ffffffffff16610240840152604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905163b1bf962d928281019260209291908290030181865afa158015610e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5a91906139c6565b816020018181525081600001818152505080610200015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa158015610ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edf9190613a6f565b64ffffffffff166102608501526060840181905260808401829052604084019290925260c083015260a082015292915050565b60038201544264ffffffffff908116700100000000000000000000000000000000909204161415610f41575050565b610f4b82826121a4565b610f5582826122c6565b5060030180547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff1602179055565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517610fd257600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b60408051808201909152600281527f3236000000000000000000000000000000000000000000000000000000000000602082015282611060576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5060408051808201909152600281527f33320000000000000000000000000000000000000000000000000000000000006020820152818311156110d0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b50600080611125856101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b94505050509150816040518060400160405280600281526020017f32370000000000000000000000000000000000000000000000000000000000008152509061119b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5060408051808201909152600281527f323900000000000000000000000000000000000000000000000000000000000060208201528115611209576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b505050505050565b61123c6040518060800160405280600081526020016000815260200160008152602001600081525090565b610140850151602086015161125091610f9d565b60608083019182526007880154604080516101208101825260088b01546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000009091041681526020810188905280820187905260c0808b0151948201949094529351608085015260a0808a0151908501526101a08901519284019290925273ffffffffffffffffffffffffffffffffffffffff87811660e08501526101e0890151811661010085015291517fa589870900000000000000000000000000000000000000000000000000000000815291169163a5898709916113b19190600401600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015173ffffffffffffffffffffffffffffffffffffffff80821660e0850152610100915080828601511682850152505092915050565b606060405180830381865afa1580156113ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f29190613aba565b604084015260208301528082526114089061244b565b6001870180546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055602081015161144b9061244b565b6003870180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055604081015161149c9061244b565b6002870180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905580516020808301516040808501516101008a01516101408b0151835196875294860193909352908401526060830152608082015273ffffffffffffffffffffffffffffffffffffffff8516907f804c9b842b2748a22bb64b345453a3de7ca54a6ca45ce00d415894979e22897a9060a00160405180910390a2505050505050565b60408051808201909152600281527f37340000000000000000000000000000000000000000000000000000000000006020820152600090608083106115c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b50508151600182811b81019190911c1615155b92915050565b60408051808201909152600281527f373400000000000000000000000000000000000000000000000000000000000060208201526080831061164c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b50600182811b81011b81156116665783548117845561166e565b835481191684555b50505050565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260208b8152604080832081516102008101835281546101e08201908152815260018201546fffffffffffffffffffffffffffffffff80821695830195909552700100000000000000000000000000000000908190048516938201939093526002820154808516606083015283900484166080820152600382015480851660a083015283810464ffffffffff1660c08301527501000000000000000000000000000000000000000000900461ffff1660e0820152600482015486166101008201526005820154861661012082015260068201548616610140820152600782015490951661016086015260088101548084166101808701529190910482166101a085015260090154166101c08301526117ae8b8b8b8b8a888b8b6124f1565b9150508015806117c2575081515161ffff16155b6040518060400160405280600281526020017f353700000000000000000000000000000000000000000000000000000000000081525090610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b60408051808201909152600281527f323600000000000000000000000000000000000000000000000000000000000060208201528161189c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5060008060006118f3866101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b9450505092509250826040518060400160405280600281526020017f32370000000000000000000000000000000000000000000000000000000000008152509061196a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5060408051808201909152600281527f3239000000000000000000000000000000000000000000000000000000000000602082015281156119d8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5060408051808201909152600281527f323800000000000000000000000000000000000000000000000000000000000060208201528215611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b506101c08601515160741c640fffffffff16801580611b4a57506101c08701515160301c60ff16611a7890600a613c37565b611a829082613c43565b85611b3d8961010001518960080160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168b6101e0015173ffffffffffffffffffffffffffffffffffffffff1663b1bf962d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3391906139c6565b6101d09190613c80565b611b479190613c80565b11155b6040518060400160405280600281526020017f353100000000000000000000000000000000000000000000000000000000000081525090610a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af1611c23573d6000803e3d6000fd5b50611c2d856125ec565b611c93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d000000000000006044820152606401610bd5565b5050505050565b815160009060d41c64ffffffffff1615611ec45760008273ffffffffffffffffffffffffffffffffffffffff16637535d2466040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1f9190613c98565b73ffffffffffffffffffffffffffffffffffffffff16630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8d9190613c98565b90508073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dfe9190613c98565b6040517f91d148540000000000000000000000000000000000000000000000000000000081527fd1d2cf869016112a9af1107bcf43c3759daf22cf734aad47d0c9c726e33bc782600482015233602482015273ffffffffffffffffffffffffffffffffffffffff91909116906391d1485490604401602060405180830381865afa158015611e90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb491906139df565b611ec2576000915050610499565b505b611ed086868686612107565b9695505050505050565b60408051602080820183528354918290528251808401909352600283527f3239000000000000000000000000000000000000000000000000000000000000908301526710000000000000001615611f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5050565b60408051808201909152600281527f3433000000000000000000000000000000000000000000000000000000000000602082015281611fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b50600080612023846101c0015151670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b94505050509150816040518060400160405280600281526020017f323700000000000000000000000000000000000000000000000000000000000081525090612099576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5060408051808201909152600281527f323900000000000000000000000000000000000000000000000000000000000060208201528115611c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b6000612115825161ffff1690565b6121215750600061219c565b60408051602081019091528354908190527faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa166121605750600161219c565b60408051602081019091528354815260009061217d9087876126b8565b50509050801580156121985750825160d41c64ffffffffff16155b9150505b949350505050565b610160810151156122345760006121c5826101600151836102400151612770565b90506121de8260e0015182610f9d90919063ffffffff16565b61010083018190526121ef9061244b565b6001840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055505b805115611f5e5760006122518261018001518361024001516127ad565b905061226b82610120015182610f9d90919063ffffffff16565b610140830181905261227c9061244b565b6002840180546fffffffffffffffffffffffffffffffff929092167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216919091179055505050565b6122ff6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6101a082015161230e57505050565b610120820151825161231f91610f9d565b6020820152610140820151825161233591610f9d565b6040820152606082015161026083015161024084015161235d92919064ffffffffff166127c1565b60608201819052604083015161237291610f9d565b80825260208201516080840151604084015161238e9190613c80565b6123989190613cb5565b6123a29190613cb5565b608082018190526101a08301516123b99190612908565b60a0820181905215612446576123e96123e48361010001518360a0015161294b90919063ffffffff16565b61244b565b60088401805460009061240f9084906fffffffffffffffffffffffffffffffff16613ccc565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b505050565b60006fffffffffffffffffffffffffffffffff8211156124ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610bd5565b5090565b6000806000806125588c8c8c6040518060a001604052808e81526020018b81526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018c60ff1681525061298a565b9550955050505050670de0b6b3a76400008210156040518060400160405280600281526020017f3335000000000000000000000000000000000000000000000000000000000000815250906125da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b50909b909a5098505050505050505050565b600061262c565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d801561266b57602081146126a5576126667f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f6125f3565b6126b2565b823b61269c5761269c7f475076323a206e6f74206120636f6e747261637400000000000000000000000060146125f3565b600191506126b2565b3d6000803e600051151591505b50919050565b60008060006126c686612ef4565b1561275d5760006126f7877faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa612f38565b6000818152602087815260408083205473ffffffffffffffffffffffffffffffffffffffff168084528a8352818420825193840190925290549182905292935060d41c64ffffffffff1690508015612759576001955090935091506127679050565b5050505b5060009150819050805b93509350939050565b60008061278464ffffffffff841642613cb5565b61278e9085613c43565b6301e133809004905061219c816b033b2e3c9fd0803ce8000000613c80565b60006127ba8383426127c1565b9392505050565b6000806127d564ffffffffff851684613cb5565b9050806127f1576b033b2e3c9fd0803ce80000009150506127ba565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101600080806002851161282757600061282c565b600285035b925066038882915c40006128408a80610f9d565b8161284d5761284d613d00565b0491506301e1338061285f838b610f9d565b8161286c5761286c613d00565b04905060008261287c8688613c43565b6128869190613c43565b6002900490506000828561289a888a613c43565b6128a49190613c43565b6128ae9190613c43565b60069004905080826301e133806128c58a8f613c43565b6128cf9190613d2f565b6128e5906b033b2e3c9fd0803ce8000000613c80565b6128ef9190613c80565b6128f99190613c80565b9b9a5050505050505050505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec778390048411151761293d57600080fd5b506127109102611388010490565b600081156b033b2e3c9fd0803ce80000006002840419048411171561296f57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b6000806000806000806129a08760000151511590565b156129dc5750600094508493508392508291507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905081612ee7565b612a8b60405180610260016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581526020016000151581525090565b608088015160ff1615612ad057608088015160ff16600090815260208a9052604090206060890151612abd9190612f7c565b6101808401526101c08301526101a08201525b87602001518160c001511015612def5760c08101518851612af09161305b565b612b045760c0810180516001019052612ad0565b60c0810151600090815260208b9052604090205473ffffffffffffffffffffffffffffffffffffffff166102008201819052612b4a5760c0810180516001019052612ad0565b61020081015173ffffffffffffffffffffffffffffffffffffffff16600090815260208c8152604091829020825180830190935280549283905260ff60a884901c81166101e0860152603084901c166060850181905261ffff601085901c811660a08701529093166080850152600a9290920a9083015261018082015115801590612be05750816101e00151896080015160ff16145b612c845760608901516102008301516040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063b3596f0790602401602060405180830381865afa158015612c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7f91906139c6565b612c8b565b8161018001515b825260a082015115801590612cab575060c08201518951612cab91611552565b15612d9b57612cc8896040015182846000015185602001516130e0565b6040830181905261010083018051612ce1908390613c80565b90525060808901516101e0830151612cfc9160ff169061317d565b1515610240830152608082015115612d5257816102400151612d22578160800151612d29565b816101a001515b8260400151612d389190613c43565b8261014001818151612d4a9190613c80565b905250612d5b565b60016102208301525b816102400151612d6f578160a00151612d76565b816101c001515b8260400151612d859190613c43565b8261016001818151612d979190613c80565b9052505b60c08201518951612dab9161318e565b15612dde57612dc889604001518284600001518560200151613210565b8261012001818151612dda9190613c80565b9052505b5060c0810180516001019052612ad0565b610100810151612e00576000612e1b565b80610100015181610140015181612e1957612e19613d00565b045b610140820152610100810151612e32576000612e4d565b80610100015181610160015181612e4b57612e4b613d00565b045b61016082015261012081015115612e8f57612e8a816101200151612e8483610160015184610100015161290890919063ffffffff16565b90613390565b612eb1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b60e0820181905261010082015161012083015161014084015161016085015161022090950151929a509098509650919450925090505b9499939850945094509450565b80516000907faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1680158015906127ba5750612f30600182613cb5565b161592915050565b815160009082167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101198116825b60029190911c90811561049957600101612f67565b81546000908190819081906601000000000000900473ffffffffffffffffffffffffffffffffffffffff168015613040576040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015287169063b3596f0790602401602060405180830381865afa158015613019573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061303d91906139c6565b91505b50945461ffff80821697620100009092041695945092505050565b60408051808201909152600281527f37340000000000000000000000000000000000000000000000000000000000006020820152600090608083106130cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b5050905160019190911b1c600316151590565b6000806130ec856133c7565b6004868101546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a8116938201939093529293506000928792613156928692911690631da24f3e9060240161018f565b6131609190613c43565b905083818161317157613171613d00565b04979650505050505050565b600082158015906127ba5750501490565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310613200576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd591906139fc565b50509051600191821b1c16151590565b60068301546040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000928392911690631da24f3e90602401602060405180830381865afa158015613286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132aa91906139c6565b905080156132c8576132c56132be8661344b565b8290610f9d565b90505b60058501546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152909116906370a0823190602401602060405180830381865afa15801561333a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335e91906139c6565b6133689082613c80565b90506133748185613c43565b905082818161338557613385613d00565b049695505050505050565b60008115670de0b6b3a7640000600284041904841117156133b057600080fd5b50670de0b6b3a76400009190910260028204010490565b6003810154600090700100000000000000000000000000000000900464ffffffffff164281141561340d575050600101546fffffffffffffffffffffffffffffffff1690565b60018301546127ba906fffffffffffffffffffffffffffffffff808216916101d0917001000000000000000000000000000000009091041684612770565b6003810154600090700100000000000000000000000000000000900464ffffffffff1642811415613491575050600201546fffffffffffffffffffffffffffffffff1690565b60028301546127ba906fffffffffffffffffffffffffffffffff808216916101d09170010000000000000000000000000000000090910416846127ad565b60405180610280016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016135536040518060200160405280600081525090565b815260006020820181905260408201819052606082018190526080820181905260a09091015290565b60405160c0810167ffffffffffffffff811182821017156135c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b6040516080810167ffffffffffffffff811182821017156135c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610120810167ffffffffffffffff811182821017156135c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461368357600080fd5b50565b803561369181613661565b919050565b803560ff8116811461369157600080fd5b60008060008060008587036101408112156136c157600080fd5b8635955060208701359450604087013593506060870135925060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808201121561370a57600080fd5b5061371361357c565b608087013561372181613661565b815260a0870135602082015260c087013561373b81613661565b604082015260e0870135606082015261010087013561375981613661565b608082015261376b6101208801613696565b60a0820152809150509295509295909350565b60008060008084860360e081121561379557600080fd5b85359450602086013593506040860135925060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0820112156137d757600080fd5b506137e06135cc565b60608601356137ee81613661565b81526080860135602082015260a086013561380881613661565b604082015260c086013561ffff8116811461382257600080fd5b6060820152939692955090935050565b60008060008060008587036101a081121561384c57600080fd5b86359550602087013594506040870135935060608701359250610120807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808301121561389757600080fd5b61389f613616565b91506138ad60808901613686565b82526138bb60a08901613686565b60208301526138cc60c08901613686565b604083015260e088013560608301526101008089013560808401528189013560a084015261014089013560c08401526139086101608a01613686565b60e084015261391a6101808a01613696565b9083015250949793965091945092919050565b801515811461368357600080fd5b60008060008060008060008060006101208a8c03121561395a57600080fd5b8935985060208a0135975060408a0135965060608a0135955060808a013561398181613661565b945060a08a01356139918161392d565b935060c08a0135925060e08a01356139a881613661565b91506139b76101008b01613696565b90509295985092959850929598565b6000602082840312156139d857600080fd5b5051919050565b6000602082840312156139f157600080fd5b81516127ba8161392d565b600060208083528351808285015260005b81811015613a2957858101830151858201604001528201613a0d565b81811115613a3b576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008060008060808587031215613a8557600080fd5b845193506020850151925060408501519150606085015164ffffffffff81168114613aaf57600080fd5b939692955090935050565b600080600060608486031215613acf57600080fd5b8351925060208401519150604084015190509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115613b7057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613b5657613b56613ae8565b80851615613b6357918102915b93841c9390800290613b1c565b509250929050565b600082613b87575060016115d7565b81613b94575060006115d7565b8160018114613baa5760028114613bb457613bd0565b60019150506115d7565b60ff841115613bc557613bc5613ae8565b50506001821b6115d7565b5060208310610133831016604e8410600b8410161715613bf3575081810a6115d7565b613bfd8383613b17565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613c2f57613c2f613ae8565b029392505050565b60006127ba8383613b78565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c7b57613c7b613ae8565b500290565b60008219821115613c9357613c93613ae8565b500190565b600060208284031215613caa57600080fd5b81516127ba81613661565b600082821015613cc757613cc7613ae8565b500390565b60006fffffffffffffffffffffffffffffffff808316818516808303821115613cf757613cf7613ae8565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082613d65577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212205ae982c63497625f6e0f5d17cf0e2d96671588e68f7a21458812ebbde948aee964736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x56 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x186DEA44 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0x1913F161 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x8A5DADD1 EQ PUSH2 0xAF JUMPI DUP1 PUSH4 0xBF697A26 EQ PUSH2 0xCF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7B PUSH2 0x76 CALLDATASIZE PUSH1 0x4 PUSH2 0x36A7 JUMP JUMPDEST PUSH2 0xEF JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH2 0xA8 CALLDATASIZE PUSH1 0x4 PUSH2 0x377E JUMP JUMPDEST PUSH2 0x4A2 JUMP JUMPDEST STOP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH2 0xCA CALLDATASIZE PUSH1 0x4 PUSH2 0x3832 JUMP JUMPDEST PUSH2 0x751 JUMP JUMPDEST DUP2 DUP1 ISZERO PUSH2 0xDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD PUSH2 0xEA CALLDATASIZE PUSH1 0x4 PUSH2 0x393B JUMP JUMPDEST PUSH2 0xA2D JUMP JUMPDEST DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 PUSH2 0x11F DUP3 PUSH2 0xCF9 JUMP JUMPDEST SWAP1 POP PUSH2 0x12B DUP3 DUP3 PUSH2 0xF12 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x1E0 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP3 PUSH2 0x1D6 SWAP3 SWAP1 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D0 SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST SWAP1 PUSH2 0xF9D JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD SWAP1 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 EQ ISZERO PUSH2 0x209 JUMPI POP DUP1 JUMPDEST PUSH2 0x214 DUP4 DUP3 DUP5 PUSH2 0xFF4 JUMP JUMPDEST DUP6 MLOAD PUSH2 0x226 SWAP1 DUP6 SWAP1 DUP6 SWAP1 PUSH1 0x0 DUP6 PUSH2 0x1211 JUMP JUMPDEST PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP9 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x264 SWAP2 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0x1552 JUMP JUMPDEST SWAP1 POP DUP1 DUP1 ISZERO PUSH2 0x272 JUMPI POP DUP3 DUP3 EQ JUMPDEST ISZERO PUSH2 0x2EB JUMPI PUSH1 0x3 DUP6 ADD SLOAD PUSH2 0x2A6 SWAP1 DUP10 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 PUSH2 0x15DD JUMP JUMPDEST DUP7 MLOAD PUSH1 0x40 MLOAD CALLER SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH32 0x44C58D81365B66DD4B1A7F36C25AA97B8C71C361EE4937ADC1A00000227DB5DD SWAP1 PUSH1 0x0 SWAP1 LOG3 JUMPDEST PUSH2 0x1E0 DUP5 ADD MLOAD PUSH1 0x40 DUP1 DUP10 ADD MLOAD PUSH2 0x100 DUP8 ADD MLOAD SWAP2 MLOAD PUSH32 0xD7020D0A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xD7020D0A SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x37B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x38F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 DUP1 ISZERO PUSH2 0x3D1 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP9 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH32 0x5555555555555555555555555555555555555555555555555555555555555555 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x40C JUMPI PUSH2 0x40C DUP12 DUP12 DUP12 DUP12 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP DUP12 PUSH1 0x0 ADD MLOAD CALLER DUP14 PUSH1 0x60 ADD MLOAD DUP15 PUSH1 0x80 ADD MLOAD DUP16 PUSH1 0xA0 ADD MLOAD PUSH2 0x1674 JUMP JUMPDEST DUP7 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x3115D1449A7B732C986CBA18244E897A450F61E1BB8D589CD2E69E6C8924F9F7 DUP6 PUSH1 0x40 MLOAD PUSH2 0x48A SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP SWAP4 POP POP POP POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0x4D2 DUP3 PUSH2 0xCF9 JUMP JUMPDEST SWAP1 POP PUSH2 0x4DE DUP3 DUP3 PUSH2 0xF12 JUMP JUMPDEST PUSH2 0x4ED DUP2 DUP4 DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x1830 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x504 SWAP2 DUP5 SWAP2 DUP5 SWAP2 SWAP1 PUSH1 0x0 PUSH2 0x1211 JUMP JUMPDEST PUSH2 0x1E0 DUP2 ADD MLOAD PUSH1 0x20 DUP5 ADD MLOAD DUP5 MLOAD PUSH2 0x536 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 CALLER SWAP2 SWAP1 PUSH2 0x1BB8 JUMP JUMPDEST PUSH2 0x1E0 DUP2 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0x100 DUP6 ADD MLOAD SWAP3 MLOAD PUSH32 0xB3F1C93D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x64 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xB3F1C93D SWAP1 PUSH1 0x84 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x5F6 SWAP2 SWAP1 PUSH2 0x39DF JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x6AB JUMPI PUSH2 0x615 DUP8 DUP8 DUP8 DUP6 PUSH2 0x1C0 ADD MLOAD DUP7 PUSH2 0x1E0 ADD MLOAD PUSH2 0x1C9A JUMP JUMPDEST ISZERO PUSH2 0x6AB JUMPI PUSH1 0x3 DUP4 ADD SLOAD PUSH2 0x649 SWAP1 DUP7 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x1 PUSH2 0x15DD JUMP JUMPDEST DUP4 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH31 0x58A56EA94653CDF4F152D227ACE22D4C00AD99E2A43F58CB7D9E3FEB295F2 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST DUP4 PUSH1 0x60 ADD MLOAD PUSH2 0xFFFF AND DUP5 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x2B627736BCA15CD5381DCF80B0BF11FD197D01A037C52B927A881A10FB73BA61 CALLER DUP9 PUSH1 0x20 ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x740 SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x780 DUP2 PUSH2 0x1EDA JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x20 DUP5 ADD MLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 SWAP3 DIV PUSH2 0xFFFF AND SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP2 AND EQ DUP1 ISZERO SWAP1 PUSH2 0x7D9 JUMPI POP PUSH1 0x60 DUP4 ADD MLOAD ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xA24 JUMPI PUSH1 0x20 DUP1 DUP5 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE DUP6 DUP3 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE DUP1 SLOAD DUP3 MSTORE SWAP1 PUSH2 0x81F SWAP1 DUP4 PUSH2 0x1552 JUMP JUMPDEST ISZERO PUSH2 0x957 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP2 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH32 0x5555555555555555555555555555555555555555555555555555555555555555 AND ISZERO PUSH2 0x8D8 JUMPI PUSH2 0x8D8 DUP9 DUP9 DUP9 DUP9 PUSH1 0x0 DUP10 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE SWAP1 DUP2 PUSH1 0x0 DUP3 ADD SLOAD DUP2 MSTORE POP POP DUP9 PUSH1 0x0 ADD MLOAD DUP10 PUSH1 0x20 ADD MLOAD DUP11 PUSH1 0xC0 ADD MLOAD DUP12 PUSH1 0xE0 ADD MLOAD DUP13 PUSH2 0x100 ADD MLOAD PUSH2 0x1674 JUMP JUMPDEST DUP4 PUSH1 0x60 ADD MLOAD DUP5 PUSH1 0x80 ADD MLOAD EQ ISZERO PUSH2 0x957 JUMPI PUSH2 0x8F4 DUP2 DUP4 PUSH1 0x0 PUSH2 0x15DD JUMP JUMPDEST DUP4 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x44C58D81365B66DD4B1A7F36C25AA97B8C71C361EE4937ADC1A00000227DB5DD PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST PUSH1 0xA0 DUP5 ADD MLOAD PUSH2 0xA22 JUMPI PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP9 DUP2 MSTORE SWAP1 DUP4 SWAP1 KECCAK256 DUP4 MLOAD SWAP2 DUP3 ADD SWAP1 SWAP4 MSTORE DUP6 SLOAD DUP2 MSTORE PUSH1 0x4 DUP7 ADD SLOAD PUSH2 0x9AD SWAP3 DUP13 SWAP3 DUP13 SWAP3 DUP7 SWAP3 AND PUSH2 0x1C9A JUMP JUMPDEST ISZERO PUSH2 0xA20 JUMPI PUSH2 0x9BE DUP2 DUP5 PUSH1 0x1 PUSH2 0x15DD JUMP JUMPDEST DUP5 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH31 0x58A56EA94653CDF4F152D227ACE22D4C00AD99E2A43F58CB7D9E3FEB295F2 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 JUMPDEST POP JUMPDEST POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 PUSH2 0xA5C DUP3 PUSH2 0xCF9 JUMP JUMPDEST PUSH2 0x1E0 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAF7 SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST SWAP1 POP PUSH2 0xB03 DUP3 DUP3 PUSH2 0x1F62 JUMP JUMPDEST PUSH1 0x3 DUP4 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP11 SLOAD DUP2 MSTORE PUSH2 0xB3D SWAP2 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0x1552 JUMP JUMPDEST ISZERO ISZERO DUP8 ISZERO ISZERO EQ ISZERO PUSH2 0xB50 JUMPI POP POP POP PUSH2 0xA20 JUMP JUMPDEST DUP7 ISZERO PUSH2 0xC55 JUMPI PUSH2 0xB67 DUP13 DUP13 DUP12 DUP6 PUSH2 0x1C0 ADD MLOAD PUSH2 0x2107 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3632000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xBDE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x3 DUP4 ADD SLOAD PUSH2 0xC0E SWAP1 DUP11 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x1 PUSH2 0x15DD JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP1 PUSH31 0x58A56EA94653CDF4F152D227ACE22D4C00AD99E2A43F58CB7D9E3FEB295F2 SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH2 0xCEB JUMP JUMPDEST PUSH1 0x3 DUP4 ADD SLOAD PUSH2 0xC84 SWAP1 DUP11 SWAP1 PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 PUSH2 0x15DD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP10 SLOAD DUP2 MSTORE PUSH2 0xCA7 SWAP1 DUP14 SWAP1 DUP14 SWAP1 DUP14 SWAP1 DUP13 CALLER DUP13 DUP13 DUP13 PUSH2 0x1674 JUMP JUMPDEST PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP1 PUSH32 0x44C58D81365B66DD4B1A7F36C25AA97B8C71C361EE4937ADC1A00000227DB5DD SWAP1 PUSH1 0x0 SWAP1 LOG3 JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xD01 PUSH2 0x34CF JUMP JUMPDEST PUSH2 0xD09 PUSH2 0x34CF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD DUP3 MSTORE DUP5 SLOAD DUP2 MSTORE PUSH2 0x1C0 DUP4 ADD DUP2 SWAP1 MSTORE MLOAD SWAP1 SHR PUSH2 0xFFFF AND PUSH2 0x1A0 DUP3 ADD MSTORE PUSH1 0x1 DUP4 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH2 0x100 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x2 DUP6 ADD SLOAD DUP1 DUP3 AND PUSH2 0x140 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x120 DUP6 ADD MSTORE PUSH17 0x100000000000000000000000000000000 SWAP3 DUP4 SWAP1 DIV DUP3 AND PUSH2 0x160 DUP6 ADD MSTORE DUP3 SWAP1 DIV AND PUSH2 0x180 DUP4 ADD MSTORE PUSH1 0x4 DUP1 DUP6 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE PUSH1 0x5 DUP7 ADD SLOAD DUP2 AND PUSH2 0x200 DUP6 ADD MSTORE PUSH1 0x6 DUP7 ADD SLOAD AND PUSH2 0x220 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x3 DUP7 ADD SLOAD SWAP3 SWAP1 SWAP3 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x240 DUP5 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0xB1BF962D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0xB1BF962D SWAP3 DUP3 DUP2 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE36 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE5A SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP DUP2 PUSH1 0x0 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH2 0x200 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x79774338 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEBB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEDF SWAP2 SWAP1 PUSH2 0x3A6F JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH2 0x260 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP5 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x3 DUP3 ADD SLOAD TIMESTAMP PUSH5 0xFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP3 DIV AND EQ ISZERO PUSH2 0xF41 JUMPI POP POP JUMP JUMPDEST PUSH2 0xF4B DUP3 DUP3 PUSH2 0x21A4 JUMP JUMPDEST PUSH2 0xF55 DUP3 DUP3 PUSH2 0x22C6 JUMP JUMPDEST POP PUSH1 0x3 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0xFD2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3236000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH2 0x1060 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3332000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 DUP4 GT ISZERO PUSH2 0x10D0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH2 0x1125 DUP6 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP POP POP POP SWAP2 POP DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x119B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x1209 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x123C PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x140 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0x1250 SWAP2 PUSH2 0xF9D JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x7 DUP9 ADD SLOAD PUSH1 0x40 DUP1 MLOAD PUSH2 0x120 DUP2 ADD DUP3 MSTORE PUSH1 0x8 DUP12 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP9 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP12 ADD MLOAD SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 MLOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP11 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x1A0 DUP10 ADD MLOAD SWAP3 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x1E0 DUP10 ADD MLOAD DUP2 AND PUSH2 0x100 DUP6 ADD MSTORE SWAP2 MLOAD PUSH32 0xA589870900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 AND SWAP2 PUSH4 0xA5898709 SWAP2 PUSH2 0x13B1 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP3 MLOAD DUP3 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE 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 PUSH1 0xC0 DUP4 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 SWAP2 POP DUP1 DUP3 DUP7 ADD MLOAD AND DUP3 DUP6 ADD MSTORE POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13F2 SWAP2 SWAP1 PUSH2 0x3ABA JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x20 DUP4 ADD MSTORE DUP1 DUP3 MSTORE PUSH2 0x1408 SWAP1 PUSH2 0x244B JUMP JUMPDEST PUSH1 0x1 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x144B SWAP1 PUSH2 0x244B JUMP JUMPDEST PUSH1 0x3 DUP8 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x149C SWAP1 PUSH2 0x244B JUMP JUMPDEST PUSH1 0x2 DUP8 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 MLOAD PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH2 0x100 DUP11 ADD MLOAD PUSH2 0x140 DUP12 ADD MLOAD DUP4 MLOAD SWAP7 DUP8 MSTORE SWAP5 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH32 0x804C9B842B2748A22BB64B345453A3DE7CA54A6CA45CE00D415894979E22897A SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x15C4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP POP DUP2 MLOAD PUSH1 0x1 DUP3 DUP2 SHL DUP2 ADD SWAP2 SWAP1 SWAP2 SHR AND ISZERO ISZERO JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x80 DUP4 LT PUSH2 0x164C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x1 DUP3 DUP2 SHL DUP2 ADD SHL DUP2 ISZERO PUSH2 0x1666 JUMPI DUP4 SLOAD DUP2 OR DUP5 SSTORE PUSH2 0x166E JUMP JUMPDEST DUP4 SLOAD DUP2 NOT AND DUP5 SSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP12 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH2 0x200 DUP2 ADD DUP4 MSTORE DUP2 SLOAD PUSH2 0x1E0 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP6 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH17 0x100000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP6 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP3 ADD SLOAD DUP1 DUP6 AND PUSH1 0x60 DUP4 ADD MSTORE DUP4 SWAP1 DIV DUP5 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x3 DUP3 ADD SLOAD DUP1 DUP6 AND PUSH1 0xA0 DUP4 ADD MSTORE DUP4 DUP2 DIV PUSH5 0xFFFFFFFFFF AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD DUP7 AND PUSH2 0x100 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD DUP7 AND PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD DUP7 AND PUSH2 0x140 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD SWAP1 SWAP6 AND PUSH2 0x160 DUP7 ADD MSTORE PUSH1 0x8 DUP2 ADD SLOAD DUP1 DUP5 AND PUSH2 0x180 DUP8 ADD MSTORE SWAP2 SWAP1 SWAP2 DIV DUP3 AND PUSH2 0x1A0 DUP6 ADD MSTORE PUSH1 0x9 ADD SLOAD AND PUSH2 0x1C0 DUP4 ADD MSTORE PUSH2 0x17AE DUP12 DUP12 DUP12 DUP12 DUP11 DUP9 DUP12 DUP12 PUSH2 0x24F1 JUMP JUMPDEST SWAP2 POP POP DUP1 ISZERO DUP1 PUSH2 0x17C2 JUMPI POP DUP2 MLOAD MLOAD PUSH2 0xFFFF AND ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3537000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xCEB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3236000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 PUSH2 0x189C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x18F3 DUP7 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP POP POP SWAP3 POP SWAP3 POP DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x196A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x19D8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3238000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP3 ISZERO PUSH2 0x1A46 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH2 0x1C0 DUP7 ADD MLOAD MLOAD PUSH1 0x74 SHR PUSH5 0xFFFFFFFFF AND DUP1 ISZERO DUP1 PUSH2 0x1B4A JUMPI POP PUSH2 0x1C0 DUP8 ADD MLOAD MLOAD PUSH1 0x30 SHR PUSH1 0xFF AND PUSH2 0x1A78 SWAP1 PUSH1 0xA PUSH2 0x3C37 JUMP JUMPDEST PUSH2 0x1A82 SWAP1 DUP3 PUSH2 0x3C43 JUMP JUMPDEST DUP6 PUSH2 0x1B3D DUP10 PUSH2 0x100 ADD MLOAD DUP10 PUSH1 0x8 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH2 0x1E0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB1BF962D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B0F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B33 SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST PUSH2 0x1D0 SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST PUSH2 0x1B47 SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST GT ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3531000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xA22 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x1C23 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1C2D DUP6 PUSH2 0x25EC JUMP JUMPDEST PUSH2 0x1C93 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xBD5 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND ISZERO PUSH2 0x1EC4 JUMPI PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x7535D246 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1CFB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D1F SWAP2 SWAP1 PUSH2 0x3C98 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D69 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D8D SWAP2 SWAP1 PUSH2 0x3C98 JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DDA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DFE SWAP2 SWAP1 PUSH2 0x3C98 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x91D1485400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0xD1D2CF869016112A9AF1107BCF43C3759DAF22CF734AAD47D0C9C726E33BC782 PUSH1 0x4 DUP3 ADD MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x91D14854 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E90 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1EB4 SWAP2 SWAP1 PUSH2 0x39DF JUMP JUMPDEST PUSH2 0x1EC2 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x499 JUMP JUMPDEST POP JUMPDEST PUSH2 0x1ED0 DUP7 DUP7 DUP7 DUP7 PUSH2 0x2107 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE DUP4 SLOAD SWAP2 DUP3 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP4 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP4 ADD MSTORE PUSH8 0x1000000000000000 AND ISZERO PUSH2 0x1F5E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3433000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 PUSH2 0x1FCE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH2 0x2023 DUP5 PUSH2 0x1C0 ADD MLOAD MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP5 POP POP POP POP SWAP2 POP DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3237000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2099 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3239000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP2 ISZERO PUSH2 0x1C93 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2115 DUP3 MLOAD PUSH2 0xFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x2121 JUMPI POP PUSH1 0x0 PUSH2 0x219C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD SWAP1 DUP2 SWAP1 MSTORE PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND PUSH2 0x2160 JUMPI POP PUSH1 0x1 PUSH2 0x219C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 SWAP2 MSTORE DUP4 SLOAD DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH2 0x217D SWAP1 DUP8 DUP8 PUSH2 0x26B8 JUMP JUMPDEST POP POP SWAP1 POP DUP1 ISZERO DUP1 ISZERO PUSH2 0x2198 JUMPI POP DUP3 MLOAD PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND ISZERO JUMPDEST SWAP2 POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD ISZERO PUSH2 0x2234 JUMPI PUSH1 0x0 PUSH2 0x21C5 DUP3 PUSH2 0x160 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x2770 JUMP JUMPDEST SWAP1 POP PUSH2 0x21DE DUP3 PUSH1 0xE0 ADD MLOAD DUP3 PUSH2 0xF9D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x100 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x21EF SWAP1 PUSH2 0x244B JUMP JUMPDEST PUSH1 0x1 DUP5 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1F5E JUMPI PUSH1 0x0 PUSH2 0x2251 DUP3 PUSH2 0x180 ADD MLOAD DUP4 PUSH2 0x240 ADD MLOAD PUSH2 0x27AD JUMP JUMPDEST SWAP1 POP PUSH2 0x226B DUP3 PUSH2 0x120 ADD MLOAD DUP3 PUSH2 0xF9D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x140 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x227C SWAP1 PUSH2 0x244B JUMP JUMPDEST PUSH1 0x2 DUP5 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH2 0x22FF PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH2 0x1A0 DUP3 ADD MLOAD PUSH2 0x230E JUMPI POP POP POP JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x231F SWAP2 PUSH2 0xF9D JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x140 DUP3 ADD MLOAD DUP3 MLOAD PUSH2 0x2335 SWAP2 PUSH2 0xF9D JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH2 0x260 DUP4 ADD MLOAD PUSH2 0x240 DUP5 ADD MLOAD PUSH2 0x235D SWAP3 SWAP2 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x27C1 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x2372 SWAP2 PUSH2 0xF9D JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x238E SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST PUSH2 0x2398 SWAP2 SWAP1 PUSH2 0x3CB5 JUMP JUMPDEST PUSH2 0x23A2 SWAP2 SWAP1 PUSH2 0x3CB5 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x1A0 DUP4 ADD MLOAD PUSH2 0x23B9 SWAP2 SWAP1 PUSH2 0x2908 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE ISZERO PUSH2 0x2446 JUMPI PUSH2 0x23E9 PUSH2 0x23E4 DUP4 PUSH2 0x100 ADD MLOAD DUP4 PUSH1 0xA0 ADD MLOAD PUSH2 0x294B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x244B JUMP JUMPDEST PUSH1 0x8 DUP5 ADD DUP1 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x240F SWAP1 DUP5 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3CCC JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x24ED JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xBD5 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2558 DUP13 DUP13 DUP13 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP15 DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE PUSH1 0x20 ADD DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH1 0xFF AND DUP2 MSTORE POP PUSH2 0x298A JUMP JUMPDEST SWAP6 POP SWAP6 POP POP POP POP POP PUSH8 0xDE0B6B3A7640000 DUP3 LT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3335000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x25DA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP SWAP1 SWAP12 SWAP1 SWAP11 POP SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x262C JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x266B JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x26A5 JUMPI PUSH2 0x2666 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x25F3 JUMP JUMPDEST PUSH2 0x26B2 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x269C JUMPI PUSH2 0x269C PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x25F3 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x26B2 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x26C6 DUP7 PUSH2 0x2EF4 JUMP JUMPDEST ISZERO PUSH2 0x275D JUMPI PUSH1 0x0 PUSH2 0x26F7 DUP8 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA PUSH2 0x2F38 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 DUP5 MSTORE DUP11 DUP4 MSTORE DUP2 DUP5 KECCAK256 DUP3 MLOAD SWAP4 DUP5 ADD SWAP1 SWAP3 MSTORE SWAP1 SLOAD SWAP2 DUP3 SWAP1 MSTORE SWAP3 SWAP4 POP PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x2759 JUMPI PUSH1 0x1 SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x2767 SWAP1 POP JUMP JUMPDEST POP POP POP JUMPDEST POP PUSH1 0x0 SWAP2 POP DUP2 SWAP1 POP DUP1 JUMPDEST SWAP4 POP SWAP4 POP SWAP4 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2784 PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x3CB5 JUMP JUMPDEST PUSH2 0x278E SWAP1 DUP6 PUSH2 0x3C43 JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x219C DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x3C80 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x27BA DUP4 DUP4 TIMESTAMP PUSH2 0x27C1 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x27D5 PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x3CB5 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x27F1 JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x27BA JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x2827 JUMPI PUSH1 0x0 PUSH2 0x282C JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x2840 DUP11 DUP1 PUSH2 0xF9D JUMP JUMPDEST DUP2 PUSH2 0x284D JUMPI PUSH2 0x284D PUSH2 0x3D00 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x285F DUP4 DUP12 PUSH2 0xF9D JUMP JUMPDEST DUP2 PUSH2 0x286C JUMPI PUSH2 0x286C PUSH2 0x3D00 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x287C DUP7 DUP9 PUSH2 0x3C43 JUMP JUMPDEST PUSH2 0x2886 SWAP2 SWAP1 PUSH2 0x3C43 JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x289A DUP9 DUP11 PUSH2 0x3C43 JUMP JUMPDEST PUSH2 0x28A4 SWAP2 SWAP1 PUSH2 0x3C43 JUMP JUMPDEST PUSH2 0x28AE SWAP2 SWAP1 PUSH2 0x3C43 JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x28C5 DUP11 DUP16 PUSH2 0x3C43 JUMP JUMPDEST PUSH2 0x28CF SWAP2 SWAP1 PUSH2 0x3D2F JUMP JUMPDEST PUSH2 0x28E5 SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x3C80 JUMP JUMPDEST PUSH2 0x28EF SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST PUSH2 0x28F9 SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x293D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x296F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x29A0 DUP8 PUSH1 0x0 ADD MLOAD MLOAD ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x29DC JUMPI POP PUSH1 0x0 SWAP5 POP DUP5 SWAP4 POP DUP4 SWAP3 POP DUP3 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 POP DUP2 PUSH2 0x2EE7 JUMP JUMPDEST PUSH2 0x2A8B PUSH1 0x40 MLOAD DUP1 PUSH2 0x260 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND ISZERO PUSH2 0x2AD0 JUMPI PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0xFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP11 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x2ABD SWAP2 SWAP1 PUSH2 0x2F7C JUMP JUMPDEST PUSH2 0x180 DUP5 ADD MSTORE PUSH2 0x1C0 DUP4 ADD MSTORE PUSH2 0x1A0 DUP3 ADD MSTORE JUMPDEST DUP8 PUSH1 0x20 ADD MLOAD DUP2 PUSH1 0xC0 ADD MLOAD LT ISZERO PUSH2 0x2DEF JUMPI PUSH1 0xC0 DUP2 ADD MLOAD DUP9 MLOAD PUSH2 0x2AF0 SWAP2 PUSH2 0x305B JUMP JUMPDEST PUSH2 0x2B04 JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x2AD0 JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP12 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x200 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x2B4A JUMPI PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x2AD0 JUMP JUMPDEST PUSH2 0x200 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP13 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD DUP1 DUP4 ADD SWAP1 SWAP4 MSTORE DUP1 SLOAD SWAP3 DUP4 SWAP1 MSTORE PUSH1 0xFF PUSH1 0xA8 DUP5 SWAP1 SHR DUP2 AND PUSH2 0x1E0 DUP7 ADD MSTORE PUSH1 0x30 DUP5 SWAP1 SHR AND PUSH1 0x60 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0xFFFF PUSH1 0x10 DUP6 SWAP1 SHR DUP2 AND PUSH1 0xA0 DUP8 ADD MSTORE SWAP1 SWAP4 AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA SWAP3 SWAP1 SWAP3 EXP SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2BE0 JUMPI POP DUP2 PUSH2 0x1E0 ADD MLOAD DUP10 PUSH1 0x80 ADD MLOAD PUSH1 0xFF AND EQ JUMPDEST PUSH2 0x2C84 JUMPI PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x200 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C5B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2C7F SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST PUSH2 0x2C8B JUMP JUMPDEST DUP2 PUSH2 0x180 ADD MLOAD JUMPDEST DUP3 MSTORE PUSH1 0xA0 DUP3 ADD MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2CAB JUMPI POP PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0x2CAB SWAP2 PUSH2 0x1552 JUMP JUMPDEST ISZERO PUSH2 0x2D9B JUMPI PUSH2 0x2CC8 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x30E0 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP4 ADD DUP1 MLOAD PUSH2 0x2CE1 SWAP1 DUP4 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x1E0 DUP4 ADD MLOAD PUSH2 0x2CFC SWAP2 PUSH1 0xFF AND SWAP1 PUSH2 0x317D JUMP JUMPDEST ISZERO ISZERO PUSH2 0x240 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD ISZERO PUSH2 0x2D52 JUMPI DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0x2D22 JUMPI DUP2 PUSH1 0x80 ADD MLOAD PUSH2 0x2D29 JUMP JUMPDEST DUP2 PUSH2 0x1A0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x2D38 SWAP2 SWAP1 PUSH2 0x3C43 JUMP JUMPDEST DUP3 PUSH2 0x140 ADD DUP2 DUP2 MLOAD PUSH2 0x2D4A SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x2D5B JUMP JUMPDEST PUSH1 0x1 PUSH2 0x220 DUP4 ADD MSTORE JUMPDEST DUP2 PUSH2 0x240 ADD MLOAD PUSH2 0x2D6F JUMPI DUP2 PUSH1 0xA0 ADD MLOAD PUSH2 0x2D76 JUMP JUMPDEST DUP2 PUSH2 0x1C0 ADD MLOAD JUMPDEST DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0x2D85 SWAP2 SWAP1 PUSH2 0x3C43 JUMP JUMPDEST DUP3 PUSH2 0x160 ADD DUP2 DUP2 MLOAD PUSH2 0x2D97 SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST PUSH1 0xC0 DUP3 ADD MLOAD DUP10 MLOAD PUSH2 0x2DAB SWAP2 PUSH2 0x318E JUMP JUMPDEST ISZERO PUSH2 0x2DDE JUMPI PUSH2 0x2DC8 DUP10 PUSH1 0x40 ADD MLOAD DUP3 DUP5 PUSH1 0x0 ADD MLOAD DUP6 PUSH1 0x20 ADD MLOAD PUSH2 0x3210 JUMP JUMPDEST DUP3 PUSH2 0x120 ADD DUP2 DUP2 MLOAD PUSH2 0x2DDA SWAP2 SWAP1 PUSH2 0x3C80 JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST POP PUSH1 0xC0 DUP2 ADD DUP1 MLOAD PUSH1 0x1 ADD SWAP1 MSTORE PUSH2 0x2AD0 JUMP JUMPDEST PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x2E00 JUMPI PUSH1 0x0 PUSH2 0x2E1B JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x140 ADD MLOAD DUP2 PUSH2 0x2E19 JUMPI PUSH2 0x2E19 PUSH2 0x3D00 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x2E32 JUMPI PUSH1 0x0 PUSH2 0x2E4D JUMP JUMPDEST DUP1 PUSH2 0x100 ADD MLOAD DUP2 PUSH2 0x160 ADD MLOAD DUP2 PUSH2 0x2E4B JUMPI PUSH2 0x2E4B PUSH2 0x3D00 JUMP JUMPDEST DIV JUMPDEST PUSH2 0x160 DUP3 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD ISZERO PUSH2 0x2E8F JUMPI PUSH2 0x2E8A DUP2 PUSH2 0x120 ADD MLOAD PUSH2 0x2E84 DUP4 PUSH2 0x160 ADD MLOAD DUP5 PUSH2 0x100 ADD MLOAD PUSH2 0x2908 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x3390 JUMP JUMPDEST PUSH2 0x2EB1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF JUMPDEST PUSH1 0xE0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x120 DUP4 ADD MLOAD PUSH2 0x140 DUP5 ADD MLOAD PUSH2 0x160 DUP6 ADD MLOAD PUSH2 0x220 SWAP1 SWAP6 ADD MLOAD SWAP3 SWAP11 POP SWAP1 SWAP9 POP SWAP7 POP SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP JUMPDEST SWAP5 SWAP10 SWAP4 SWAP9 POP SWAP5 POP SWAP5 POP SWAP5 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH32 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AND DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x27BA JUMPI POP PUSH2 0x2F30 PUSH1 0x1 DUP3 PUSH2 0x3CB5 JUMP JUMPDEST AND ISZERO SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x0 SWAP1 DUP3 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD NOT DUP2 AND DUP3 JUMPDEST PUSH1 0x2 SWAP2 SWAP1 SWAP2 SHR SWAP1 DUP2 ISZERO PUSH2 0x499 JUMPI PUSH1 0x1 ADD PUSH2 0x2F67 JUMP JUMPDEST DUP2 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH7 0x1000000000000 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x3040 JUMPI PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP8 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3019 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x303D SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST SWAP2 POP JUMPDEST POP SWAP5 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND SWAP8 PUSH3 0x10000 SWAP1 SWAP3 DIV AND SWAP6 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x30CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 SWAP1 SWAP2 SHL SHR PUSH1 0x3 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x30EC DUP6 PUSH2 0x33C7 JUMP JUMPDEST PUSH1 0x4 DUP7 DUP2 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 DUP2 AND SWAP4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 SWAP4 POP PUSH1 0x0 SWAP3 DUP8 SWAP3 PUSH2 0x3156 SWAP3 DUP7 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH2 0x18F JUMP JUMPDEST PUSH2 0x3160 SWAP2 SWAP1 PUSH2 0x3C43 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 PUSH2 0x3171 JUMPI PUSH2 0x3171 PUSH2 0x3D00 JUMP JUMPDEST DIV SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x27BA JUMPI POP POP EQ SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x3200 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x6 DUP4 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3286 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x32AA SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x32C8 JUMPI PUSH2 0x32C5 PUSH2 0x32BE DUP7 PUSH2 0x344B JUMP JUMPDEST DUP3 SWAP1 PUSH2 0xF9D JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x5 DUP6 ADD SLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x333A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x335E SWAP2 SWAP1 PUSH2 0x39C6 JUMP JUMPDEST PUSH2 0x3368 SWAP1 DUP3 PUSH2 0x3C80 JUMP JUMPDEST SWAP1 POP PUSH2 0x3374 DUP2 DUP6 PUSH2 0x3C43 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 DUP2 PUSH2 0x3385 JUMPI PUSH2 0x3385 PUSH2 0x3D00 JUMP JUMPDEST DIV SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH8 0xDE0B6B3A7640000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x33B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x340D JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x27BA SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x1D0 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x2770 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x3491 JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x27BA SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x1D0 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x27AD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x280 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3553 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 SWAP1 SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xC0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x35C6 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x80 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x35C6 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x35C6 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3683 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3691 DUP2 PUSH2 0x3661 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3691 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP8 SUB PUSH2 0x140 DUP2 SLT ISZERO PUSH2 0x36C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH1 0xC0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP3 ADD SLT ISZERO PUSH2 0x370A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3713 PUSH2 0x357C JUMP JUMPDEST PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH2 0x3721 DUP2 PUSH2 0x3661 JUMP JUMPDEST DUP2 MSTORE PUSH1 0xA0 DUP8 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xC0 DUP8 ADD CALLDATALOAD PUSH2 0x373B DUP2 PUSH2 0x3661 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xE0 DUP8 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x100 DUP8 ADD CALLDATALOAD PUSH2 0x3759 DUP2 PUSH2 0x3661 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x376B PUSH2 0x120 DUP9 ADD PUSH2 0x3696 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP5 DUP7 SUB PUSH1 0xE0 DUP2 SLT ISZERO PUSH2 0x3795 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 DUP3 ADD SLT ISZERO PUSH2 0x37D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x37E0 PUSH2 0x35CC JUMP JUMPDEST PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x37EE DUP2 PUSH2 0x3661 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA0 DUP7 ADD CALLDATALOAD PUSH2 0x3808 DUP2 PUSH2 0x3661 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xC0 DUP7 ADD CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x3822 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP6 DUP8 SUB PUSH2 0x1A0 DUP2 SLT ISZERO PUSH2 0x384C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH2 0x120 DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP4 ADD SLT ISZERO PUSH2 0x3897 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x389F PUSH2 0x3616 JUMP JUMPDEST SWAP2 POP PUSH2 0x38AD PUSH1 0x80 DUP10 ADD PUSH2 0x3686 JUMP JUMPDEST DUP3 MSTORE PUSH2 0x38BB PUSH1 0xA0 DUP10 ADD PUSH2 0x3686 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x38CC PUSH1 0xC0 DUP10 ADD PUSH2 0x3686 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xE0 DUP9 ADD CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP10 ADD CALLDATALOAD PUSH1 0x80 DUP5 ADD MSTORE DUP2 DUP10 ADD CALLDATALOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x140 DUP10 ADD CALLDATALOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x3908 PUSH2 0x160 DUP11 ADD PUSH2 0x3686 JUMP JUMPDEST PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x391A PUSH2 0x180 DUP11 ADD PUSH2 0x3696 JUMP JUMPDEST SWAP1 DUP4 ADD MSTORE POP SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP2 SWAP5 POP SWAP3 SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3683 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x120 DUP11 DUP13 SUB SLT ISZERO PUSH2 0x395A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 CALLDATALOAD SWAP9 POP PUSH1 0x20 DUP11 ADD CALLDATALOAD SWAP8 POP PUSH1 0x40 DUP11 ADD CALLDATALOAD SWAP7 POP PUSH1 0x60 DUP11 ADD CALLDATALOAD SWAP6 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD PUSH2 0x3981 DUP2 PUSH2 0x3661 JUMP JUMPDEST SWAP5 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD PUSH2 0x3991 DUP2 PUSH2 0x392D JUMP JUMPDEST SWAP4 POP PUSH1 0xC0 DUP11 ADD CALLDATALOAD SWAP3 POP PUSH1 0xE0 DUP11 ADD CALLDATALOAD PUSH2 0x39A8 DUP2 PUSH2 0x3661 JUMP JUMPDEST SWAP2 POP PUSH2 0x39B7 PUSH2 0x100 DUP12 ADD PUSH2 0x3696 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x39D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x39F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x27BA DUP2 PUSH2 0x392D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3A29 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x3A0D JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x3A3B JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3A85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3AAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3ACF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x3B70 JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x3B56 JUMPI PUSH2 0x3B56 PUSH2 0x3AE8 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x3B63 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x3B1C JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3B87 JUMPI POP PUSH1 0x1 PUSH2 0x15D7 JUMP JUMPDEST DUP2 PUSH2 0x3B94 JUMPI POP PUSH1 0x0 PUSH2 0x15D7 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x3BAA JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x3BB4 JUMPI PUSH2 0x3BD0 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x15D7 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x3BC5 JUMPI PUSH2 0x3BC5 PUSH2 0x3AE8 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x15D7 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x3BF3 JUMPI POP DUP2 DUP2 EXP PUSH2 0x15D7 JUMP JUMPDEST PUSH2 0x3BFD DUP4 DUP4 PUSH2 0x3B17 JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x3C2F JUMPI PUSH2 0x3C2F PUSH2 0x3AE8 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x27BA DUP4 DUP4 PUSH2 0x3B78 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x3C7B JUMPI PUSH2 0x3C7B PUSH2 0x3AE8 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x3C93 JUMPI PUSH2 0x3C93 PUSH2 0x3AE8 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3CAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x27BA DUP2 PUSH2 0x3661 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x3CC7 JUMPI PUSH2 0x3CC7 PUSH2 0x3AE8 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x3CF7 JUMPI PUSH2 0x3CF7 PUSH2 0x3AE8 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x3D65 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GAS 0xE9 DUP3 0xC6 CALLVALUE SWAP8 PUSH3 0x5F6E0F 0x5D OR 0xCF 0xE 0x2D SWAP7 PUSH8 0x1588E68F7A214588 SLT 0xEB 0xBD 0xE9 BASEFEE 0xAE 0xE9 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"864:10771:86:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4403:1834;;;;;;;;;;-1:-1:-1;4403:1834:86;;;;;:::i;:::-;;:::i;:::-;;;3293:25:201;;;3281:2;3266:18;4403:1834:86;;;;;;;2269:1393;;;;;;;;;;-1:-1:-1;2269:1393:86;;;;;:::i;:::-;;:::i;:::-;;7050:1835;;;;;;;;;;-1:-1:-1;7050:1835:86;;;;;:::i;:::-;;:::i;10043:1590::-;;;;;;;;;;-1:-1:-1;10043:1590:86;;;;;:::i;:::-;;:::i;4403:1834::-;4817:12;;4804:26;;4749:7;4804:26;;;;;;;;;;4749:7;4881:15;4804:26;4881:13;:15::i;:::-;4836:60;-1:-1:-1;4903:33:86;:7;4836:60;4903:19;:33::i;:::-;5043:31;;;;4973:26;;;;4965:63;;;;;5017:10;4965:63;;;7408:74:201;4943:19:86;;4965:115;;5043:31;;4965:51;;;;;;;7381:18:201;;4965:63:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:70;;:115::i;:::-;5114:13;;;;4943:137;;-1:-1:-1;5155:17:86;5138:34;;5134:85;;;-1:-1:-1;5201:11:86;5134:85;5225:77;5258:12;5272:16;5290:11;5225:32;:77::i;:::-;5351:12;;5309:76;;:7;;5337:12;;5351;5368:16;5309:27;:76::i;:::-;5443:10;;;;5412:30;;;;;;;;;;;;;-1:-1:-1;;5412:42:86;;:30;5443:10;;;;;5412:30;:42::i;:::-;5392:62;;5465:12;:47;;;;;5501:11;5481:16;:31;5465:47;5461:188;;;5554:10;;;;5522:50;;:10;;5554;;;;;5566:5;5522:31;:50::i;:::-;5617:12;;5585:57;;5631:10;;5585:57;;;;;5617:12;;5585:57;5461:188;5663:26;;;;5721:9;;;;;5762:31;;;;5655:144;;;;;5703:10;5655:144;;;7974:34:201;5655:40:86;8044:15:201;;;8024:18;;;8017:43;8076:18;;;8069:34;;;8119:18;;;8112:34;;;;5655:40:86;;;;;;7885:19:201;;5655:144:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5810:12;:43;;;;-1:-1:-1;5826:25:86;;;;;;;;;;;;;;;502:66:73;5817:26;:31;;5826:27:86;5806:322;;;5863:258;5905:12;5927;5949:15;5974:10;5863:258;;;;;;;;;;;;;;;;;5994:6;:12;;;6016:10;6036:6;:20;;;6066:6;:13;;;6089:6;:24;;;5863:32;:258::i;:::-;6174:6;:9;;;6139:63;;6162:10;6139:63;;6148:6;:12;;;6139:63;;;6185:16;6139:63;;;;3293:25:201;;3281:2;3266:18;;3139:185;6139:63:86;;;;;;;;-1:-1:-1;6216:16:86;-1:-1:-1;;;;4403:1834:86;;;;;;;;:::o;2269:1393::-;2590:12;;2577:26;;2537:37;2577:26;;;;;;;;;;;2654:15;2577:26;2654:13;:15::i;:::-;2609:60;-1:-1:-1;2676:33:86;:7;2609:60;2676:19;:33::i;:::-;2716:68;2747:12;2761:7;2770:6;:13;;;2716:30;:68::i;:::-;2833:12;;2847:13;;;;2791:73;;:7;;2819:12;;2833;;2791:27;:73::i;:::-;2921:26;;;;2949:13;;;;2878:12;;2871:92;;:37;;;;;2909:10;;2921:26;2871:37;:92::i;:::-;2999:26;;;;3057:17;;;;;3082:13;;;;3103:31;;;;2991:149;;;;;3039:10;2991:149;;;7974:34:201;2991:40:86;8044:15:201;;;8024:18;;;8017:43;8076:18;;;8069:34;;;;8119:18;;;8112:34;;;;2970:18:86;;2991:40;;;;7885:19:201;;2991:149:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2970:170;;3151:13;3147:412;;;3187:211;3247:12;3271;3295:10;3317:12;:33;;;3362:12;:26;;;3187:48;:211::i;:::-;3174:379;;;3449:10;;;;3417:49;;:10;;3449;;;;;3461:4;3417:31;:49::i;:::-;3526:6;:17;;;3481:63;;3512:6;:12;;;3481:63;;;;;;;;;;;;3174:379;3637:6;:19;;;3570:87;;3603:6;:17;;;3570:87;;3577:6;:12;;;3570:87;;;3591:10;3622:6;:13;;;3570:87;;;;;;8793:42:201;8781:55;;;;8763:74;;8868:2;8853:18;;8846:34;8751:2;8736:18;;8589:297;3570:87:86;;;;;;;;2531:1131;;;2269:1393;;;;:::o;7050:1835::-;7476:12;;7463:26;;7423:37;7463:26;;;;;;;;;;7496:41;7463:26;7496:32;:41::i;:::-;7564:10;;;;7600:9;;;;7585:11;;;;7564:10;;;;;;;7585:24;;;;;;;;;;:46;;-1:-1:-1;7613:13:86;;;;:18;;7585:46;7581:1300;;;7705:11;;;;;7693:24;;7641:49;7693:24;;;;;;;;;;;7730:30;;;;;;;;;;;;7693:24;7730:41;;7761:9;7730:30;:41::i;:::-;7726:637;;;7787:25;;;;;;;;;;;;;;;502:66:73;5817:26;:31;7783:369:86;;7828:313;7874:12;7900;7926:15;7955:11;:24;7967:6;:11;;;7955:24;;;;;;;;;;;;;;;7828:313;;;;;;;;;;;;;;;;;7993:6;:12;;;8019:6;:11;;;8044:6;:20;;;8078:6;:13;;;8105:6;:24;;;7828:32;:313::i;:::-;8193:6;:13;;;8165:6;:24;;;:41;8161:194;;;8220:49;:10;8252:9;8263:5;8220:31;:49::i;:::-;8332:6;:11;;;8286:58;;8318:6;:12;;;8286:58;;;;;;;;;;;;8161:194;8375:22;;;;8371:504;;8476:9;;;;;8464:22;;;;8414:47;8464:22;;;;;;;;;;;8511:204;;;;;;;;;;;;8682:21;;;;8511:204;;8573:12;;8599;;8464:22;;8682:21;8511:48;:204::i;:::-;8496:371;;;8738:46;:8;8768:9;8779:4;8738:29;:46::i;:::-;8846:6;:9;;;8801:55;;8832:6;:12;;;8801:55;;;;;;;;;;;;8496:371;8404:471;8371:504;7633:1248;7581:1300;7417:1468;;7050:1835;;;;;:::o;10043:1590::-;10515:19;;;10475:37;10515:19;;;;;;;;;;;10585:15;10515:19;10585:13;:15::i;:::-;10636:26;;;;10629:56;;;;;10674:10;10629:56;;;7408:74:201;10540:60:86;;-1:-1:-1;10607:19:86;;10629:44;;;;;;;7381:18:201;;10629:56:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10607:78;;10692:76;10742:12;10756:11;10692:49;:76::i;:::-;10829:10;;;;10798:30;;;;;;;;;;;;;:42;;10829:10;;;;;10798:30;:42::i;:::-;10779:61;;:15;:61;;;10775:74;;;10842:7;;;;;10775:74;10859:15;10855:774;;;10901:164;10952:12;10976;11000:10;11022:12;:33;;;10901:39;:164::i;:::-;11075:41;;;;;;;;;;;;;;;;;10884:240;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;11165:10:86;;;;11133:49;;:10;;11165;;;;;11177:4;11133:31;:49::i;:::-;11195;;11233:10;;11195:49;;;;;;;;;10855:774;;;11297:10;;;;11265:50;;:10;;11297;;;;;11309:5;11265:31;:50::i;:::-;11323:235;;;;;;;;;;;;;;;11365:12;;11387;;11409:15;;11454:5;11469:10;11489:13;11512:11;11533:17;11323:32;:235::i;:::-;11572:50;;11611:10;;11572:50;;;;;;;;;10855:774;10469:1164;;;10043:1590;;;;;;;;;:::o;12460:1739:85:-;12545:29;;:::i;:::-;12582:42;;:::i;:::-;12631:57;;;;;;;;;;;;:33;;;:57;;;15238:9:72;15237:71;;;;12694:26:85;;;:81;12849:22;;;;;;;;;12815:31;;:56;;;12781:31;;;:90;12955:34;;;;;;;12916:36;;;:73;;;12877:36;;;:112;13028:28;;;;;;;12995:30;;;:61;13100:33;;;;13062:35;;;:71;13169:21;;;;;;;;;13140:26;;;:50;13234:30;;;;;;13196:35;;;:68;13310:32;;;;;13270:37;;;:72;;;13391:27;;;;;;;;;;13349:39;;;:69;-1:-1:-1;13501:89:85;;;;;;;:87;;:89;;;;-1:-1:-1;;13501:89:85;;;;;;;13310:32;13501:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13463:12;:35;;:127;;;;13425:12;:35;;:165;;;;;13801:12;:35;;;13784:67;;;:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13597:256;;13733:42;;;13597:256;13689:36;;;13597:256;;;13649:32;;;13597:256;;;13605:36;;;13597:256;;;;14020:32;;;:67;14093:36;;;:75;13605:12;12460:1739;-1:-1:-1;;12460:1739:85:o;3556:502::-;3796:27;;;;3834:15;3796:54;;;;:27;;;;;:54;3792:81;;;3556:502;;:::o;3792:81::-;3879:37;3894:7;3903:12;3879:14;:37::i;:::-;3922:40;3940:7;3949:12;3922:17;:40::i;:::-;-1:-1:-1;4000:27:85;;:53;;;;;4037:15;4000:53;;;;;;3556:502::o;2253:319:90:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:90;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;4120:454:87:-;4284:21;;;;;;;;;;;;;;;;;4271:11;4263:43;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4343:40:87;;;;;;;;;;;;;;;;;4320:21;;;;4312:72;;;;;;;;;;;;;:::i;:::-;;4392:13;4413;4430:44;:12;:33;;;21735:9:72;21779:12;21767:24;;21766:31;;;21818:12;21806:24;;21805:31;;;21857:15;21845:27;;21844:34;;;21899:22;21887:34;;21886:41;;;21948:12;21936:24;21935:31;;;21583:394;4430:44:87;4391:83;;;;;;;4488:8;4498:23;;;;;;;;;;;;;;;;;4480:42;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4547:21:87;;;;;;;;;;;;;;;;;4536:9;;4528:41;;;;;;;;;;;;;:::i;:::-;;4257:317;;4120:454;;;:::o;6827:1514:85:-;7050:40;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7050:40:85;7172:36;;;;7122:35;;;;:92;;:42;:92::i;:::-;7097:22;;;;:117;;;7345:35;;;;7412:473;;;;;;;;7471:16;;;;;;;;;;7412:473;;-1:-1:-1;7412:473:85;;;;;;;;;;;7594:32;;;;;7412:473;;;;;;;7655:22;;7412:473;;;;;7712:36;;;;7412:473;;;;7773:26;;;;7412:473;;;;;;;7345:35;7412:473;;;-1:-1:-1;7412:473:85;;;7850:26;;;;7412:473;;7345:35;7412:473;;;7316:575;;;;;7345:35;;;7316:88;;:575;;7412:473;7316:575;;10209:4:201;10251:3;10240:9;10236:19;10228:27;;10288:6;10282:13;10271:9;10264:32;10352:4;10344:6;10340:17;10334:24;10327:4;10316:9;10312:20;10305:54;10415:4;10407:6;10403:17;10397:24;10390:4;10379:9;10375:20;10368:54;10478:4;10470:6;10466:17;10460:24;10453:4;10442:9;10438:20;10431:54;10541:4;10533:6;10529:17;10523:24;10516:4;10505:9;10501:20;10494:54;10604:4;10596:6;10592:17;10586:24;10579:4;10568:9;10564:20;10557:54;10667:4;10659:6;10655:17;10649:24;10642:4;10631:9;10627:20;10620:54;10721:4;10713:6;10709:17;10703:24;10746:42;10844:2;10830:12;10826:21;10819:4;10808:9;10804:20;10797:51;10867:6;10857:16;;10937:2;10931;10923:6;10919:15;10913:22;10909:31;10904:2;10893:9;10889:18;10882:59;;;10023:924;;;;;7316:575:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7286:21;;;7221:670;7259:19;;;7221:670;;;;7929:34;;:32;:34::i;:::-;7898:28;;;:65;;;;;;;;;;;;;;;;8003:19;;;;:31;;:29;:31::i;:::-;7969;;;:65;;;;;;;;;;;;;;;8076:21;;;;:33;;:31;:33::i;:::-;8040;;;:69;;;;;;;;;;;;;;;;8169:22;;8199:19;;;;;8226:21;;;;;8040:69;8255:31;;;8294:36;;;;8121:215;;11522:25:201;;;11563:18;;;11556:34;;;;11606:18;;;11599:34;11664:2;11649:18;;11642:34;11707:3;11692:19;;11685:35;8121:215:85;;;;;;11509:3:201;11494:19;8121:215:85;;;;;;;7044:1297;6827:1514;;;;;:::o;3638:328:73:-;3862:28;;;;;;;;;;;;;;;;;3768:4;;5284:3:72;3806:54:73;;3798:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3907:9:73;;3938:1;3922:17;;;3921:23;;3907:38;;;;3906:44;:49;;3638:328;;;;;:::o;1688:433::-;1922:28;;;;;;;;;;;;;;;;;5284:3:72;1866:54:73;;1858:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1996:1:73;1980:17;;;1979:23;;1973:30;2011:100;;;;2044:16;;;;;;2011:100;;;2085:17;;2098:4;;2085:17;;;2011:100;1840:277;1688:433;;;:::o;23069:815:87:-;23518:19;;;;23479:36;23518:19;;;;;;;;;;;23479:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23479:58:87;;;;;;;;;-1:-1:-1;23479:58:87;;;;;;;;;-1:-1:-1;23479:58:87;;;;;;;;;;-1:-1:-1;23479:58:87;;;;;;;;;;-1:-1:-1;23479:58:87;;;;;;;;;-1:-1:-1;23479:58:87;;;;;;;-1:-1:-1;23479:58:87;;;23576:179;23518:19;23624:12;23644:15;23667:10;23685:4;23697:17;23722:13;23743:6;23576:20;:179::i;:::-;23544:211;;;23778:20;23777:21;:60;;;-1:-1:-1;23802:21:87;;5872:9:72;5884;5872:21;23802:35:87;23777:60;23845:28;;;;;;;;;;;;;;;;;23762:117;;;;;;;;;;;;;;:::i;3050:862::-;3230:21;;;;;;;;;;;;;;;;;3217:11;3209:43;;;;;;;;;;;;;:::i;:::-;;3260:13;3275;3294;3311:58;:12;:40;;;21735:9:72;21779:12;21767:24;;21766:31;;;21818:12;21806:24;;21805:31;;;21857:15;21845:27;;21844:34;;;21899:22;21887:34;;21886:41;;;21948:12;21936:24;21935:31;;;21583:394;3311:58:87;3259:110;;;;;;;;3383:8;3393:23;;;;;;;;;;;;;;;;;3375:42;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3442:21:87;;;;;;;;;;;;;;;;;3431:9;;3423:41;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3489:21:87;;;;;;;;;;;;;;;;;3478:9;;3470:41;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3538:33:87;;;;16762:9:72;4191:3;16761:63;;;3607:14:87;;;:260;;-1:-1:-1;3819:33:87;;;;8368:9:72;3439:2;8367:67;;;3813:53:87;;:2;:53;:::i;:::-;3800:67;;:9;:67;:::i;:::-;3781:6;3634:144;3746:12;:31;;;3711:7;:25;;;;;;;;;;;;3703:34;;3643:12;:26;;;3635:53;;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:102;;;;:::i;3634:144::-;:153;;;;:::i;:::-;3633:234;;3607:260;3875:26;;;;;;;;;;;;;;;;;3592:315;;;;;;;;;;;;;;:::i;1228:780:1:-;1477:4;1471:11;1343:27;1489:36;;;1576:42;1566:53;;;1562:1;1539:25;;1532:88;1662:51;;1657:2;1634:26;;1627:87;1751:2;1728:26;;1721:41;;;1343:27;1324:16;;1821:3;1471:11;1324:16;1792:5;1785;1780:51;1770:155;;1864:16;1861:1;1858;1843:38;1900:16;1897:1;1890:27;1770:155;;1945:28;1967:5;1945:21;:28::i;:::-;1937:66;;;;;;;13982:2:201;1937:66:1;;;13964:21:201;14021:2;14001:18;;;13994:30;14060:27;14040:18;;;14033:55;14105:18;;1937:66:1;13780:349:201;1937:66:1;1318:690;1228:780;;;;:::o;28482:904:87:-;17634:9:72;;28815:4:87;;4478:3:72;17633:67;;;28831:35:87;28827:464;;28986:40;29047:13;29029:46;;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:76;;;:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28986:121;;29144:17;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29129:134;;;;;2851:41;29129:134;;;15121:25:201;29243:10:87;15162:18:201;;;15155:83;29129:57:87;;;;;;;;15094:18:201;;29129:134:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29115:169;;29279:5;29272:12;;;;;29115:169;28868:423;28827:464;29303:78;29327:12;29341;29355:10;29367:13;29303:23;:78::i;:::-;29296:85;28482:904;-1:-1:-1;;;;;;28482:904:87:o;23981:156::-;24075:31;;;;;;;;;;;;;;;24110:21;;;;;;;;;;;;;;;;10339:12:72;10327:24;10326:31;24066:66:87;;;;;;;;;;;;;:::i;:::-;;23981:156;:::o;17284:387::-;17450:30;;;;;;;;;;;;;;;;;17432:16;17424:57;;;;;;;;;;;;;:::i;:::-;;17489:13;17510;17527:44;:12;:33;;;21735:9:72;21779:12;21767:24;;21766:31;;;21818:12;21806:24;;21805:31;;;21857:15;21845:27;;21844:34;;;21899:22;21887:34;;21886:41;;;21948:12;21936:24;21935:31;;;21583:394;17527:44:87;17488:83;;;;;;;17585:8;17595:23;;;;;;;;;;;;;;;;;17577:42;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;17644:21:87;;;;;;;;;;;;;;;;;17633:9;;17625:41;;;;;;;;;;;;;:::i;27289:620::-;27586:4;27602:22;:13;5872:9:72;5884;5872:21;;5764:134;27602:22:87;27598:60;;-1:-1:-1;27646:5:87;27639:12;;27598:60;27668:33;;;;;;;;;;;;;;;620:66:73;4911:27;27663:68:87;;-1:-1:-1;27720:4:87;27713:11;;27663:68;27769:32;;;;;;;;;;;;;27737:24;;27769:60;;27802:12;27816;27769:32;:60::i;:::-;27736:93;;;;27845:19;27844:20;:59;;;;-1:-1:-1;17634:9:72;;4478:3;17633:67;;;27868:35:87;27844:59;27836:68;;;27289:620;;;;;;;:::o;10657:1542:85:-;11008:30;;;;:35;11004:423;;11053:34;11090:130;11133:12;:30;;;11173:12;:39;;;11090:33;:130::i;:::-;11053:167;;11262:82;11305:12;:31;;;11262:26;:33;;:82;;;;:::i;:::-;11228:31;;;:116;;;11377:43;;:41;:43::i;:::-;11352:22;;;:68;;;;;;;;;;;;;;;-1:-1:-1;11004:423:85;11732:35;;:40;11728:467;;11782:39;11824:139;11871:12;:35;;;11916:12;:39;;;11824:37;:139::i;:::-;11782:181;;12010:92;12058:12;:36;;;12010:31;:38;;:92;;;;:::i;:::-;11971:36;;;:131;;;12140:48;;:46;:48::i;:::-;12110:27;;;:78;;;;;;;;;;;;;;;;;-1:-1:-1;10657:1542:85;;:::o;8841:1598::-;8978:37;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8978:37:85;9026:26;;;;9022:58;;9067:7;8841:1598;;:::o;9022:58::-;9239:36;;;;9189:35;;:92;;:42;:92::i;:::-;9160:26;;;:121;9459:36;;;;9409:35;;:92;;:42;:92::i;:::-;9380:26;;;:121;9648:36;;;;9692:42;;;;9742:39;;;;9603:184;;9648:36;9692:42;9603:184;;:37;:184::i;:::-;9572:28;;;:215;;;9821:36;;;;:85;;:43;:85::i;:::-;9794:112;;;10114:26;;;;10073:32;;;;10038:26;;;;:67;;10073:32;10038:67;:::i;:::-;:102;;;;:::i;:::-;:135;;;;:::i;:::-;10008:21;;;:165;;;10233:26;;;;10200:60;;10008:165;10200:32;:60::i;:::-;10180:17;;;:80;;;10271:22;10267:168;;10332:96;:75;10375:12;:31;;;10332:4;:26;;;:42;;:75;;;;:::i;:::-;:94;:96::i;:::-;10303:25;;;:125;;:25;;:125;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10267:168;8972:1467;8841:1598;;:::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;15839:2:201;1635:78:12;;;15821:21:201;15878:2;15858:18;;;15851:30;15917:34;15897:18;;;15890:62;15988:9;15968:18;;;15961:37;16015:19;;1635:78:12;15637:403:201;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;21356:1027:87:-;21754:7;21763:4;21784:20;21806:25;21835:353;21889:12;21911;21933:15;21958:222;;;;;;;;22023:10;21958:222;;;;22060:13;21958:222;;;;22091:4;21958:222;;;;;;22115:6;21958:222;;;;;;22152:17;21958:222;;;;;21835:44;:353::i;:::-;21775:413;;;;;;;;2677:4;22210:12;:51;;22269:53;;;;;;;;;;;;;;;;;22195:133;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;22343:12:87;;;;-1:-1:-1;21356:1027:87;-1:-1:-1;;;;;;;;;21356:1027:87:o;2198:2524:1:-;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;4611:1;4605:8;4598:16;4591:24;4580:35;;3538:1174;;2198:2524;;;:::o;6625:625:73:-;6853:4;6859:7;6868;6887:28;6910:4;6887:22;:28::i;:::-;6883:328;;;6925:15;6943:45;6966:4;620:66;6943:22;:45::i;:::-;6997:20;7020:21;;;;;;;;;;;;;;7067:26;;;;;;;;;:55;;;;;;;;;;;;;;7020:21;;-1:-1:-1;4478:3:72;17633:67;;;7049:75:73;-1:-1:-1;7136:12:73;;7132:73;;7168:4;;-1:-1:-1;7174:12:73;;-1:-1:-1;7188:7:73;-1:-1:-1;7160:36:73;;-1:-1:-1;7160:36:73;7132:73;6917:294;;;6883:328;-1:-1:-1;7224:5:73;;-1:-1:-1;7224:5:73;;-1:-1:-1;7224:5:73;6625:625;;;;;;;;:::o;700:334:88:-;810:7;;881:46;899:28;;;881:15;:46;:::i;:::-;873:55;;:4;:55;:::i;:::-;376:8;961:25;;;-1:-1:-1;1006:23:88;961:25;704:4:90;1006:23:88;:::i;3142:212::-;3256:7;3278:71;3306:4;3312:19;3333:15;3278:27;:71::i;:::-;3271:78;3142:212;-1:-1:-1;;;3142:212:88:o;1780:972::-;1924:7;;1984:47;2003:28;;;1984:16;:47;:::i;:::-;1970:61;-1:-1:-1;2042:8:88;2038:50;;704:4:90;2060:21:88;;;;;2038:50;2230:7;;;2094:19;;;2266:1;2260:7;;:21;;2280:1;2260:21;;;2276:1;2270:3;:7;2260:21;2246:35;-1:-1:-1;2326:35:88;2305:17;2317:4;;2305:11;:17::i;:::-;:57;;;;;:::i;:::-;;;-1:-1:-1;376:8:88;2387:25;2305:57;2407:4;2387:19;:25::i;:::-;:44;;;;;:::i;:::-;;;-1:-1:-1;2444:18:88;2485:12;2465:17;2471:11;2465:3;:17;:::i;:::-;:32;;;;:::i;:::-;2535:1;2521:15;;;-1:-1:-1;2548:17:88;2602:14;2588:11;2568:17;2574:11;2568:3;:17;:::i;:::-;:31;;;;:::i;:::-;:48;;;;:::i;:::-;2653:1;2640:14;;;-1:-1:-1;2640:14:88;2725:10;376:8;2692:10;2699:3;2692:4;:10;:::i;:::-;2691:31;;;;:::i;:::-;2674:48;;704:4:90;2674:48:88;:::i;:::-;:61;;;;:::i;:::-;:73;;;;:::i;:::-;2667:80;1780:972;-1:-1:-1;;;;;;;;;;;1780:972:88:o;1005:496:89:-;1083:14;1248:18;;1299:35;1295:52;;;1285:63;;1278:71;1234:125;1215:183;;1388:1;1385;1378:12;1215:183;-1:-1:-1;1473:17:89;1424:22;;1448;1420:51;1416:75;;1005:496::o;2840:322:90:-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:90;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;2633:3723:81:-;2947:7;2956;2965;2974;2983;2992:4;3008:27;:6;:17;;;6194:9:73;:14;;6091:122;3008:27:81;3004:93;;;-1:-1:-1;3053:1:81;;-1:-1:-1;3053:1:81;;-1:-1:-1;3053:1:81;;-1:-1:-1;3053:1:81;;-1:-1:-1;3065:17:81;;-1:-1:-1;3053:1:81;3045:45;;3004:93;3103:40;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3103:40:81;3154:24;;;;:29;;;3150:263;;3326:24;;;;3310:41;;;;;;;;;;;;;3382:13;;;;3257:149;;3310:41;3257;:149::i;:::-;3233:20;;;3193:213;3209:22;;;3193:213;3194:13;;;3193:213;3150:263;3435:6;:20;;;3426:4;:6;;;:29;3419:2175;;;3519:6;;;;3470:17;;:56;;:48;:56::i;:::-;3465:140;;3562:6;;;3560:8;;;;;;3588;;3465:140;3655:6;;;;3642:20;;;;;;;;;;;;;;3613:26;;;:49;;;3671:123;;3751:6;;;3749:8;;;;;;3777;;3671:123;3862:26;;;;3849:40;;3802:44;3849:40;;;;;;;;;;;;4038:38;;;;;;;;;;;;;;22869:67:72;4339:3;23023:71;;;;;4004:23:81;;;3898:180;3439:2:72;22869:67;;;;3971:13:81;;;3898:180;;;22674:9:72;3298:2;22691:85;;;;;3926:25:81;;;3898:180;22662:21:72;;;3908:8:81;;;3898:180;4124:2;:19;;;;4107:14;;;:36;-1:-1:-1;4178:20:81;;;:25;;;;:88;;;4243:4;:23;;;4215:6;:24;;;:51;;;4178:88;:205;;4327:13;;;;4356:26;;;;4308:75;;;;;:47;7426:55:201;;;4308:75:81;;;7408:74:201;4308:47:81;;;;;7381:18:201;;4308:75:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4178:205;;;4277:4;:20;;;4178:205;4160:223;;4396:25;;;;:30;;;;:79;;-1:-1:-1;4468:6:81;;;;4430:17;;:45;;:37;:45::i;:::-;4392:911;;;4520:141;4561:6;:11;;;4584:14;4610:4;:15;;;4637:4;:14;;;4520:29;:141::i;:::-;4487:30;;;:174;;;4672:34;;;:68;;;;4487:174;;4672:68;:::i;:::-;;;-1:-1:-1;4816:24:81;;;;4852:23;;;;4776:109;;;;;:28;:109::i;:::-;4751:134;;:22;;;:134;4900:8;;;;:13;4896:226;;5000:4;:22;;;:49;;5041:4;:8;;;5000:49;;;5025:4;:13;;;5000:49;4954:4;:30;;;:96;;;;:::i;:::-;4927:4;:11;;:123;;;;;;;:::i;:::-;;;-1:-1:-1;4896:226:81;;;5107:4;5079:25;;;:32;4896:226;5218:4;:22;;;:75;;5268:4;:25;;;5218:75;;;5243:4;:22;;;5218:75;5174:4;:30;;;:120;;;;:::i;:::-;5132:4;:28;;:162;;;;;;;:::i;:::-;;;-1:-1:-1;4392:911:81;5345:6;;;;5315:17;;:37;;:29;:37::i;:::-;5311:232;;;5396:138;5434:6;:11;;;5457:14;5483:4;:15;;;5510:4;:14;;;5396:26;:138::i;:::-;5364:4;:28;;:170;;;;;;;:::i;:::-;;;-1:-1:-1;5311:232:81;-1:-1:-1;5573:6:81;;;5571:8;;;;;;3419:2175;;;5632:34;;;;:110;;5741:1;5632:110;;;5696:4;:34;;;5682:4;:11;;;:48;;;;;:::i;:::-;;5632:110;5618:11;;;:124;5781:34;;;;:127;;5907:1;5781:127;;;5862:4;:34;;;5831:4;:28;;;:65;;;;;:::i;:::-;;5781:127;5750:28;;;:158;5942:28;;;;:33;5941:200;;6011:130;6105:4;:28;;;6012:75;6058:4;:28;;;6012:4;:34;;;:45;;:75;;;;:::i;:::-;6011:84;;:130::i;:::-;5941:200;;;5985:17;5941:200;5921:17;;;:220;;;6162:34;;;;6204:28;;;;6240:11;;;;6259:28;;;;6320:25;;;;;6162:34;;-1:-1:-1;6204:28:81;;-1:-1:-1;6240:11:81;-1:-1:-1;6259:28:81;;-1:-1:-1;5921:220:81;-1:-1:-1;6320:25:81;-1:-1:-1;2633:3723:81;;;;;;;;;;;;:::o;4304:256:73:-;4448:9;;4411:4;;620:66;4448:27;4488:19;;;;;:67;;-1:-1:-1;4530:18:73;4547:1;4530:14;:18;:::i;:::-;4512:37;:42;;4481:74;-1:-1:-1;;4304:256:73:o;8422:382::-;8601:9;;8547:7;;8601:16;;8669:14;;;8667:17;8654:30;;8547:7;8711:66;8742:1;8719:24;;;;;8718:31;;8711:66;;8767:1;8761:7;8711:66;;3336:442:79;3564:20;;3471:7;;;;;;;;3564:20;;;;;3595:30;;3591:107;;3653:38;;;;;:20;7426:55:201;;;3653:38:79;;;7408:74:201;3653:20:79;;;;;7381:18:201;;3653:38:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3635:56;;3591:107;-1:-1:-1;3712:12:79;;;;;;;3726:29;;;;;;3757:15;-1:-1:-1;3336:442:79;-1:-1:-1;;;3336:442:79:o;2435:333:73:-;2670:28;;;;;;;;;;;;;;;;;2576:4;;5284:3:72;2614:54:73;;2606:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;2715:9:73;;2745:1;2729:17;;;;2715:32;2751:1;2714:38;:43;;;2435:333::o;9524:446:81:-;9697:7;9712:24;9739:29;:7;:27;:29::i;:::-;9820:21;;;;;9800:64;;;;;9820:21;7426:55:201;;;9800:64:81;;;7408:74:201;;;;9712:56:81;;-1:-1:-1;9774:15:81;;9898:10;;9800:89;;9712:56;;9820:21;;;9800:58;;7381:18:201;;9800:64:81;7262:226:201;9800:89:81;9792:116;;;;:::i;:::-;9774:134;;9950:9;9940:7;:19;;;;;:::i;:::-;;;9524:446;-1:-1:-1;;;;;;;9524:446:81:o;4133:208:79:-;4250:4;4270:22;;;;;:65;;-1:-1:-1;;4296:39:79;;4133:208::o;3046:314:73:-;3262:28;;;;;;;;;;;;;;;;;3168:4;;5284:3:72;3206:54:73;;3198:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3307:9:73;;3337:1;3321:17;;;3307:32;3306:38;:43;;;3046:314::o;8150:645:81:-;8409:32;;;;8389:87;;;;;8409:32;7426:55:201;;;8389:87:81;;;7408:74:201;8320:7:81;;;;8409:32;;;8389:69;;7381:18:201;;8389:87:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8365:111;-1:-1:-1;8486:18:81;;8482:104;;8530:49;8551:27;:7;:25;:27::i;:::-;8530:13;;:20;:49::i;:::-;8514:65;;8482:104;8631:30;;;;8624:54;;;;;8631:30;7426:55:201;;;8624:54:81;;;7408:74:201;8631:30:81;;;;8624:48;;7381:18:201;;8624:54:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8608:70;;:13;:70;:::i;:::-;8592:86;-1:-1:-1;8701:26:81;8592:86;8701:10;:26;:::i;:::-;8685:42;;8775:9;8759:13;:25;;;;;:::i;:::-;;;8150:645;-1:-1:-1;;;;;;8150:645:81:o;1660:322:90:-;1721:9;1826;;1885:3;1880:1;1873:9;;1861:22;1857:32;1851:39;;1823:70;1820:104;;;1914:1;1911;1904:12;1820:104;-1:-1:-1;1952:3:90;1945:11;;;;1965:1;1958:9;;1941:27;1937:35;;1660:322::o;1895:528:85:-;2028:27;;;;1994:7;;2028:27;;;;;2110:15;2097:28;;2093:326;;;-1:-1:-1;;2229:22:85;;;;;;1895:528::o;2093:326::-;2380:22;;;;2287:125;;2380:22;;;;;2287:74;;2321:28;;;;;2351:9;2287:33;:74::i;2809:545::-;2940:27;;;;2906:7;;2940:27;;;;;3022:15;3009:28;;3005:345;;;-1:-1:-1;;3141:27:85;;;;;;2809:545::o;3005:345::-;3306:27;;;;3204:139;;3306:27;;;;;3204:83;;3242:33;;;;;3277:9;3204:37;:83::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:407:201:-;86:2;80:9;128:4;116:17;;163:18;148:34;;184:22;;;145:62;142:242;;;240:77;237:1;230:88;341:4;338:1;331:15;369:4;366:1;359:15;142:242;400:2;393:22;14:407;:::o;426:::-;498:2;492:9;540:4;528:17;;575:18;560:34;;596:22;;;557:62;554:242;;;652:77;649:1;642:88;753:4;750:1;743:15;781:4;778:1;771:15;838:404;905:2;899:9;947:6;935:19;;984:18;969:34;;1005:22;;;966:62;963:242;;;1061:77;1058:1;1051:88;1162:4;1159:1;1152:15;1190:4;1187:1;1180:15;1247:154;1333:42;1326:5;1322:54;1315:5;1312:65;1302:93;;1391:1;1388;1381:12;1302:93;1247:154;:::o;1406:134::-;1474:20;;1503:31;1474:20;1503:31;:::i;:::-;1406:134;;;:::o;1545:156::-;1611:20;;1671:4;1660:16;;1650:27;;1640:55;;1691:1;1688;1681:12;1706:1428;2010:6;2018;2026;2034;2042;2086:9;2077:7;2073:23;2116:3;2112:2;2108:12;2105:32;;;2133:1;2130;2123:12;2105:32;2169:9;2156:23;2146:33;;2226:2;2215:9;2211:18;2198:32;2188:42;;2277:2;2266:9;2262:18;2249:32;2239:42;;2328:2;2317:9;2313:18;2300:32;2290:42;;2425:4;2356:66;2352:2;2348:75;2344:86;2341:106;;;2443:1;2440;2433:12;2341:106;;2469:22;;:::i;:::-;2543:3;2532:9;2528:19;2515:33;2557;2582:7;2557:33;:::i;:::-;2599:22;;2681:3;2666:19;;2653:33;2648:2;2637:14;;2630:57;2739:4;2724:20;;2711:34;2754:33;2711:34;2754:33;:::i;:::-;2814:2;2803:14;;2796:31;2887:3;2872:19;;2859:33;2854:2;2843:14;;2836:57;2945:3;2930:19;;2917:33;2959;2917;2959;:::i;:::-;3019:3;3008:15;;3001:32;3066:37;3098:3;3083:19;;3066:37;:::i;:::-;3060:3;3053:5;3049:15;3042:62;3123:5;3113:15;;;1706:1428;;;;;;;;:::o;3329:1195::-;3570:6;3578;3586;3594;3638:9;3629:7;3625:23;3668:3;3664:2;3660:12;3657:32;;;3685:1;3682;3675:12;3657:32;3721:9;3708:23;3698:33;;3778:2;3767:9;3763:18;3750:32;3740:42;;3829:2;3818:9;3814:18;3801:32;3791:42;;3926:4;3857:66;3853:2;3849:75;3845:86;3842:106;;;3944:1;3941;3934:12;3842:106;;3970:22;;:::i;:::-;4044:2;4033:9;4029:18;4016:32;4057:33;4082:7;4057:33;:::i;:::-;4099:22;;4181:4;4166:20;;4153:34;4148:2;4137:14;;4130:58;4240:3;4225:19;;4212:33;4254;4212;4254;:::i;:::-;4314:2;4303:14;;4296:31;4379:3;4364:19;;4351:33;4428:6;4415:20;;4403:33;;4393:61;;4450:1;4447;4440:12;4393:61;4481:2;4470:14;;4463:31;3329:1195;;;;-1:-1:-1;3329:1195:201;;-1:-1:-1;;3329:1195:201:o;4529:1492::-;4855:6;4863;4871;4879;4887;4931:9;4922:7;4918:23;4961:3;4957:2;4953:12;4950:32;;;4978:1;4975;4968:12;4950:32;5014:9;5001:23;4991:33;;5071:2;5060:9;5056:18;5043:32;5033:42;;5122:2;5111:9;5107:18;5094:32;5084:42;;5173:2;5162:9;5158:18;5145:32;5135:42;;5196:6;5295:2;5226:66;5222:2;5218:75;5214:84;5211:104;;;5311:1;5308;5301:12;5211:104;5337:17;;:::i;:::-;5324:30;;5377:39;5411:3;5400:9;5396:19;5377:39;:::i;:::-;5370:5;5363:54;5449:39;5483:3;5472:9;5468:19;5449:39;:::i;:::-;5444:2;5437:5;5433:14;5426:63;5521:39;5555:3;5544:9;5540:19;5521:39;:::i;:::-;5516:2;5509:5;5505:14;5498:63;5621:3;5610:9;5606:19;5593:33;5588:2;5581:5;5577:14;5570:57;5646:3;5710:2;5699:9;5695:18;5682:32;5676:3;5669:5;5665:15;5658:57;5776:2;5765:9;5761:18;5748:32;5742:3;5735:5;5731:15;5724:57;5842:3;5831:9;5827:19;5814:33;5808:3;5801:5;5797:15;5790:58;5881:39;5915:3;5904:9;5900:19;5881:39;:::i;:::-;5875:3;5868:5;5864:15;5857:64;5953:37;5985:3;5974:9;5970:19;5953:37;:::i;:::-;5937:14;;;5930:61;-1:-1:-1;4529:1492:201;;;;-1:-1:-1;4529:1492:201;;-1:-1:-1;4529:1492:201;5941:5;4529:1492;-1:-1:-1;4529:1492:201:o;6026:118::-;6112:5;6105:13;6098:21;6091:5;6088:32;6078:60;;6134:1;6131;6124:12;6149:1108;6444:6;6452;6460;6468;6476;6484;6492;6500;6508;6561:3;6549:9;6540:7;6536:23;6532:33;6529:53;;;6578:1;6575;6568:12;6529:53;6614:9;6601:23;6591:33;;6671:2;6660:9;6656:18;6643:32;6633:42;;6722:2;6711:9;6707:18;6694:32;6684:42;;6773:2;6762:9;6758:18;6745:32;6735:42;;6827:3;6816:9;6812:19;6799:33;6841:31;6866:5;6841:31;:::i;:::-;6891:5;-1:-1:-1;6948:3:201;6933:19;;6920:33;6962:30;6920:33;6962:30;:::i;:::-;7011:7;-1:-1:-1;7065:3:201;7050:19;;7037:33;;-1:-1:-1;7122:3:201;7107:19;;7094:33;7136;7094;7136;:::i;:::-;7188:7;-1:-1:-1;7214:37:201;7246:3;7231:19;;7214:37;:::i;:::-;7204:47;;6149:1108;;;;;;;;;;;:::o;7493:184::-;7563:6;7616:2;7604:9;7595:7;7591:23;7587:32;7584:52;;;7632:1;7629;7622:12;7584:52;-1:-1:-1;7655:16:201;;7493:184;-1:-1:-1;7493:184:201:o;8339:245::-;8406:6;8459:2;8447:9;8438:7;8434:23;8430:32;8427:52;;;8475:1;8472;8465:12;8427:52;8507:9;8501:16;8526:28;8548:5;8526:28;:::i;8891:656::-;9003:4;9032:2;9061;9050:9;9043:21;9093:6;9087:13;9136:6;9131:2;9120:9;9116:18;9109:34;9161:1;9171:140;9185:6;9182:1;9179:13;9171:140;;;9280:14;;;9276:23;;9270:30;9246:17;;;9265:2;9242:26;9235:66;9200:10;;9171:140;;;9329:6;9326:1;9323:13;9320:91;;;9399:1;9394:2;9385:6;9374:9;9370:22;9366:31;9359:42;9320:91;-1:-1:-1;9463:2:201;9451:15;9468:66;9447:88;9432:104;;;;9538:2;9428:113;;8891:656;-1:-1:-1;;;8891:656:201:o;9552:466::-;9648:6;9656;9664;9672;9725:3;9713:9;9704:7;9700:23;9696:33;9693:53;;;9742:1;9739;9732:12;9693:53;9771:9;9765:16;9755:26;;9821:2;9810:9;9806:18;9800:25;9790:35;;9865:2;9854:9;9850:18;9844:25;9834:35;;9912:2;9901:9;9897:18;9891:25;9956:12;9949:5;9945:24;9938:5;9935:35;9925:63;;9984:1;9981;9974:12;9925:63;9552:466;;;;-1:-1:-1;9552:466:201;;-1:-1:-1;;9552:466:201:o;10952:306::-;11040:6;11048;11056;11109:2;11097:9;11088:7;11084:23;11080:32;11077:52;;;11125:1;11122;11115:12;11077:52;11154:9;11148:16;11138:26;;11204:2;11193:9;11189:18;11183:25;11173:35;;11248:2;11237:9;11233:18;11227:25;11217:35;;10952:306;;;;;:::o;11731:184::-;11783:77;11780:1;11773:88;11880:4;11877:1;11870:15;11904:4;11901:1;11894:15;11920:482;12009:1;12052:5;12009:1;12066:330;12087:7;12077:8;12074:21;12066:330;;;12206:4;12138:66;12134:77;12128:4;12125:87;12122:113;;;12215:18;;:::i;:::-;12265:7;12255:8;12251:22;12248:55;;;12285:16;;;;12248:55;12364:22;;;;12324:15;;;;12066:330;;;12070:3;11920:482;;;;;:::o;12407:866::-;12456:5;12486:8;12476:80;;-1:-1:-1;12527:1:201;12541:5;;12476:80;12575:4;12565:76;;-1:-1:-1;12612:1:201;12626:5;;12565:76;12657:4;12675:1;12670:59;;;;12743:1;12738:130;;;;12650:218;;12670:59;12700:1;12691:10;;12714:5;;;12738:130;12775:3;12765:8;12762:17;12759:43;;;12782:18;;:::i;:::-;-1:-1:-1;;12838:1:201;12824:16;;12853:5;;12650:218;;12952:2;12942:8;12939:16;12933:3;12927:4;12924:13;12920:36;12914:2;12904:8;12901:16;12896:2;12890:4;12887:12;12883:35;12880:77;12877:159;;;-1:-1:-1;12989:19:201;;;13021:5;;12877:159;13068:34;13093:8;13087:4;13068:34;:::i;:::-;13198:6;13130:66;13126:79;13117:7;13114:92;13111:118;;;13209:18;;:::i;:::-;13247:20;;12407:866;-1:-1:-1;;;12407:866:201:o;13278:131::-;13338:5;13367:36;13394:8;13388:4;13367:36;:::i;13414:228::-;13454:7;13580:1;13512:66;13508:74;13505:1;13502:81;13497:1;13490:9;13483:17;13479:105;13476:131;;;13587:18;;:::i;:::-;-1:-1:-1;13627:9:201;;13414:228::o;13647:128::-;13687:3;13718:1;13714:6;13711:1;13708:13;13705:39;;;13724:18;;:::i;:::-;-1:-1:-1;13760:9:201;;13647:128::o;14134:265::-;14218:6;14271:2;14259:9;14250:7;14246:23;14242:32;14239:52;;;14287:1;14284;14277:12;14239:52;14319:9;14313:16;14338:31;14363:5;14338:31;:::i;15249:125::-;15289:4;15317:1;15314;15311:8;15308:34;;;15322:18;;:::i;:::-;-1:-1:-1;15359:9:201;;15249:125::o;15379:253::-;15419:3;15447:34;15508:2;15505:1;15501:10;15538:2;15535:1;15531:10;15569:3;15565:2;15561:12;15556:3;15553:21;15550:47;;;15577:18;;:::i;:::-;15613:13;;15379:253;-1:-1:-1;;;;15379:253:201:o;16045:184::-;16097:77;16094:1;16087:88;16194:4;16191:1;16184:15;16218:4;16215:1;16208:15;16234:274;16274:1;16300;16290:189;;16335:77;16332:1;16325:88;16436:4;16433:1;16426:15;16464:4;16461:1;16454:15;16290:189;-1:-1:-1;16493:9:201;;16234:274::o"},"gasEstimates":{"creation":{"codeDepositCost":"3155200","executionCost":"3519","totalCost":"3158719"},"external":{"executeFinalizeTransfer(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,mapping(address => DataTypes.UserConfigurationMap) storage,DataTypes.FinalizeTransferParams)":"infinite","executeSupply(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteSupplyParams)":"infinite","executeUseReserveAsCollateral(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,address,bool,uint256,address,uint8)":"infinite","executeWithdraw(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteWithdrawParams)":"infinite"}},"methodIdentifiers":{"executeFinalizeTransfer(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,mapping(address => DataTypes.UserConfigurationMap) storage,DataTypes.FinalizeTransferParams)":"8a5dadd1","executeSupply(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteSupplyParams)":"1913f161","executeUseReserveAsCollateral(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,address,bool,uint256,address,uint8)":"bf697a26","executeWithdraw(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteWithdrawParams)":"186dea44"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"Supply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"executeFinalizeTransfer(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,mapping(address => DataTypes.UserConfigurationMap) storage,DataTypes.FinalizeTransferParams)\":{\"details\":\"Emits the `ReserveUsedAsCollateralEnabled()` event for the `to` account, if the asset is being activated as collateral.In case the `from` user transfers everything, `ReserveUsedAsCollateralDisabled()` is emitted for `from`.\",\"params\":{\"eModeCategories\":\"The configuration of all the efficiency mode categories\",\"params\":\"The additional parameters needed to execute the finalizeTransfer function\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\",\"usersConfig\":\"The users configuration mapping that track the supplied/borrowed assets\"}},\"executeSupply(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteSupplyParams)\":{\"details\":\"Emits the `Supply()` event.In the first supply action, `ReserveUsedAsCollateralEnabled()` is emitted, if the asset can be enabled as collateral.\",\"params\":{\"params\":\"The additional parameters needed to execute the supply function\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\",\"userConfig\":\"The user configuration mapping that tracks the supplied/borrowed assets\"}},\"executeUseReserveAsCollateral(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,address,bool,uint256,address,uint8)\":{\"details\":\"Emits the `ReserveUsedAsCollateralEnabled()` event if the asset can be activated as collateral.In case the asset is being deactivated as collateral, `ReserveUsedAsCollateralDisabled()` is emitted.\",\"params\":{\"asset\":\"The address of the asset being configured as collateral\",\"eModeCategories\":\"The configuration of all the efficiency mode categories\",\"priceOracle\":\"The address of the price oracle\",\"reservesCount\":\"The number of initialized reserves\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\",\"useAsCollateral\":\"True if the user wants to set the asset as collateral, false otherwise\",\"userConfig\":\"The users configuration mapping that track the supplied/borrowed assets\",\"userEModeCategory\":\"The eMode category chosen by the user\"}},\"executeWithdraw(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteWithdrawParams)\":{\"details\":\"Emits the `Withdraw()` event.If the user withdraws everything, `ReserveUsedAsCollateralDisabled()` is emitted.\",\"params\":{\"eModeCategories\":\"The configuration of all the efficiency mode categories\",\"params\":\"The additional parameters needed to execute the withdraw function\",\"reservesData\":\"The state of all the reserves\",\"reservesList\":\"The addresses of all the active reserves\",\"userConfig\":\"The user configuration mapping that tracks the supplied/borrowed assets\"},\"returns\":{\"_0\":\"The actual amount withdrawn\"}}},\"title\":\"SupplyLogic library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeFinalizeTransfer(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,mapping(address => DataTypes.UserConfigurationMap) storage,DataTypes.FinalizeTransferParams)\":{\"notice\":\"Validates a transfer of aTokens. The sender is subjected to health factor validation to avoid collateralization constraints violation.\"},\"executeSupply(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteSupplyParams)\":{\"notice\":\"Implements the supply feature. Through `supply()`, users supply assets to the Aave protocol.\"},\"executeUseReserveAsCollateral(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,address,bool,uint256,address,uint8)\":{\"notice\":\"Executes the 'set as collateral' feature. A user can choose to activate or deactivate an asset as collateral at any point in time. Deactivating an asset as collateral is subjected to the usual health factor checks to ensure collateralization.\"},\"executeWithdraw(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteWithdrawParams)\":{\"notice\":\"Implements the withdraw feature. Through `withdraw()`, users redeem their aTokens for the underlying asset previously supplied in the Aave protocol.\"}},\"notice\":\"Implements the base logic for supply/withdraw\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/libraries/logic/SupplyLogic.sol\":\"SupplyLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\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(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\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 {AccessControl-_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) external view returns (bool);\\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 {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\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) external;\\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) external;\\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) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/SupplyLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\n\\n/**\\n * @title SupplyLogic library\\n * @author Aave\\n * @notice Implements the base logic for supply/withdraw\\n */\\nlibrary SupplyLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @notice Implements the supply feature. Through `supply()`, users supply assets to the Aave protocol.\\n   * @dev Emits the `Supply()` event.\\n   * @dev In the first supply action, `ReserveUsedAsCollateralEnabled()` is emitted, if the asset can be enabled as\\n   * collateral.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the supply function\\n   */\\n  function executeSupply(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSupplyParams memory params\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateSupply(reserveCache, reserve, params.amount);\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, params.amount, 0);\\n\\n    IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, params.amount);\\n\\n    bool isFirstSupply = IAToken(reserveCache.aTokenAddress).mint(\\n      msg.sender,\\n      params.onBehalfOf,\\n      params.amount,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isFirstSupply) {\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration,\\n          reserveCache.aTokenAddress\\n        )\\n      ) {\\n        userConfig.setUsingAsCollateral(reserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(params.asset, params.onBehalfOf);\\n      }\\n    }\\n\\n    emit Supply(params.asset, msg.sender, params.onBehalfOf, params.amount, params.referralCode);\\n  }\\n\\n  /**\\n   * @notice Implements the withdraw feature. Through `withdraw()`, users redeem their aTokens for the underlying asset\\n   * previously supplied in the Aave protocol.\\n   * @dev Emits the `Withdraw()` event.\\n   * @dev If the user withdraws everything, `ReserveUsedAsCollateralDisabled()` is emitted.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the withdraw function\\n   * @return The actual amount withdrawn\\n   */\\n  function executeWithdraw(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteWithdrawParams memory params\\n  ) external returns (uint256) {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    uint256 userBalance = IAToken(reserveCache.aTokenAddress).scaledBalanceOf(msg.sender).rayMul(\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    uint256 amountToWithdraw = params.amount;\\n\\n    if (params.amount == type(uint256).max) {\\n      amountToWithdraw = userBalance;\\n    }\\n\\n    ValidationLogic.validateWithdraw(reserveCache, amountToWithdraw, userBalance);\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, 0, amountToWithdraw);\\n\\n    bool isCollateral = userConfig.isUsingAsCollateral(reserve.id);\\n\\n    if (isCollateral && amountToWithdraw == userBalance) {\\n      userConfig.setUsingAsCollateral(reserve.id, false);\\n      emit ReserveUsedAsCollateralDisabled(params.asset, msg.sender);\\n    }\\n\\n    IAToken(reserveCache.aTokenAddress).burn(\\n      msg.sender,\\n      params.to,\\n      amountToWithdraw,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isCollateral && userConfig.isBorrowingAny()) {\\n      ValidationLogic.validateHFAndLtv(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        params.asset,\\n        msg.sender,\\n        params.reservesCount,\\n        params.oracle,\\n        params.userEModeCategory\\n      );\\n    }\\n\\n    emit Withdraw(params.asset, msg.sender, params.to, amountToWithdraw);\\n\\n    return amountToWithdraw;\\n  }\\n\\n  /**\\n   * @notice Validates a transfer of aTokens. The sender is subjected to health factor validation to avoid\\n   * collateralization constraints violation.\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled()` event for the `to` account, if the asset is being activated as\\n   * collateral.\\n   * @dev In case the `from` user transfers everything, `ReserveUsedAsCollateralDisabled()` is emitted for `from`.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the finalizeTransfer function\\n   */\\n  function executeFinalizeTransfer(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    DataTypes.FinalizeTransferParams memory params\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n\\n    ValidationLogic.validateTransfer(reserve);\\n\\n    uint256 reserveId = reserve.id;\\n\\n    if (params.from != params.to && params.amount != 0) {\\n      DataTypes.UserConfigurationMap storage fromConfig = usersConfig[params.from];\\n\\n      if (fromConfig.isUsingAsCollateral(reserveId)) {\\n        if (fromConfig.isBorrowingAny()) {\\n          ValidationLogic.validateHFAndLtv(\\n            reservesData,\\n            reservesList,\\n            eModeCategories,\\n            usersConfig[params.from],\\n            params.asset,\\n            params.from,\\n            params.reservesCount,\\n            params.oracle,\\n            params.fromEModeCategory\\n          );\\n        }\\n        if (params.balanceFromBefore == params.amount) {\\n          fromConfig.setUsingAsCollateral(reserveId, false);\\n          emit ReserveUsedAsCollateralDisabled(params.asset, params.from);\\n        }\\n      }\\n\\n      if (params.balanceToBefore == 0) {\\n        DataTypes.UserConfigurationMap storage toConfig = usersConfig[params.to];\\n        if (\\n          ValidationLogic.validateAutomaticUseAsCollateral(\\n            reservesData,\\n            reservesList,\\n            toConfig,\\n            reserve.configuration,\\n            reserve.aTokenAddress\\n          )\\n        ) {\\n          toConfig.setUsingAsCollateral(reserveId, true);\\n          emit ReserveUsedAsCollateralEnabled(params.asset, params.to);\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes the 'set as collateral' feature. A user can choose to activate or deactivate an asset as\\n   * collateral at any point in time. Deactivating an asset as collateral is subjected to the usual health factor\\n   * checks to ensure collateralization.\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled()` event if the asset can be activated as collateral.\\n   * @dev In case the asset is being deactivated as collateral, `ReserveUsedAsCollateralDisabled()` is emitted.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param asset The address of the asset being configured as collateral\\n   * @param useAsCollateral True if the user wants to set the asset as collateral, false otherwise\\n   * @param reservesCount The number of initialized reserves\\n   * @param priceOracle The address of the price oracle\\n   * @param userEModeCategory The eMode category chosen by the user\\n   */\\n  function executeUseReserveAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    bool useAsCollateral,\\n    uint256 reservesCount,\\n    address priceOracle,\\n    uint8 userEModeCategory\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    uint256 userBalance = IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender);\\n\\n    ValidationLogic.validateSetUseReserveAsCollateral(reserveCache, userBalance);\\n\\n    if (useAsCollateral == userConfig.isUsingAsCollateral(reserve.id)) return;\\n\\n    if (useAsCollateral) {\\n      require(\\n        ValidationLogic.validateUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration\\n        ),\\n        Errors.USER_IN_ISOLATION_MODE_OR_LTV_ZERO\\n      );\\n\\n      userConfig.setUsingAsCollateral(reserve.id, true);\\n      emit ReserveUsedAsCollateralEnabled(asset, msg.sender);\\n    } else {\\n      userConfig.setUsingAsCollateral(reserve.id, false);\\n      ValidationLogic.validateHFAndLtv(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        asset,\\n        msg.sender,\\n        reservesCount,\\n        priceOracle,\\n        userEModeCategory\\n      );\\n\\n      emit ReserveUsedAsCollateralDisabled(asset, msg.sender);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xff4b3ad4e13b9b7df4158d33ee6b63370e4137be02e043827c4244432cf38588\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"executeFinalizeTransfer(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,mapping(address => DataTypes.UserConfigurationMap) storage,DataTypes.FinalizeTransferParams)":{"notice":"Validates a transfer of aTokens. The sender is subjected to health factor validation to avoid collateralization constraints violation."},"executeSupply(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteSupplyParams)":{"notice":"Implements the supply feature. Through `supply()`, users supply assets to the Aave protocol."},"executeUseReserveAsCollateral(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,address,bool,uint256,address,uint8)":{"notice":"Executes the 'set as collateral' feature. A user can choose to activate or deactivate an asset as collateral at any point in time. Deactivating an asset as collateral is subjected to the usual health factor checks to ensure collateralization."},"executeWithdraw(mapping(address => DataTypes.ReserveData) storage,mapping(uint256 => address) storage,mapping(uint8 => DataTypes.EModeCategory) storage,DataTypes.UserConfigurationMap storage,DataTypes.ExecuteWithdrawParams)":{"notice":"Implements the withdraw feature. Through `withdraw()`, users redeem their aTokens for the underlying asset previously supplied in the Aave protocol."}},"notice":"Implements the base logic for supply/withdraw","version":1}}},"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol":{"ValidationLogic":{"abi":[{"inputs":[],"name":"HEALTH_FACTOR_LIQUIDATION_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ISOLATED_COLLATERAL_SUPPLIER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{},"stateVariables":{"HEALTH_FACTOR_LIQUIDATION_THRESHOLD":{"details":"Minimum health factor to consider a user position healthy A value of 1e18 results in 1"},"ISOLATED_COLLATERAL_SUPPLIER_ROLE":{"details":"Role identifier for the role allowed to supply isolated reserves as collateral"}},"title":"ReserveLogic library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60e8610039600b82828239805160001a60731461002c57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060515760003560e01c80632b0139fa146056578063561cbec914608e578063abfcc86a14609c578063c3525c281460a4575b600080fd5b607c7fd1d2cf869016112a9af1107bcf43c3759daf22cf734aad47d0c9c726e33bc78281565b60405190815260200160405180910390f35b607c670d2f13f7789f000081565b607c61232881565b607c670de0b6b3a76400008156fea2646970667358221220dd4bc2d068257a87c26d371268ab18e1294570ecfaba59767e83a1c8c219288164736f6c634300080a0033","opcodes":"PUSH1 0xE8 PUSH2 0x39 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x2C JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x51 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2B0139FA EQ PUSH1 0x56 JUMPI DUP1 PUSH4 0x561CBEC9 EQ PUSH1 0x8E JUMPI DUP1 PUSH4 0xABFCC86A EQ PUSH1 0x9C JUMPI DUP1 PUSH4 0xC3525C28 EQ PUSH1 0xA4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x7C PUSH32 0xD1D2CF869016112A9AF1107BCF43C3759DAF22CF734AAD47D0C9C726E33BC782 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x7C PUSH8 0xD2F13F7789F0000 DUP2 JUMP JUMPDEST PUSH1 0x7C PUSH2 0x2328 DUP2 JUMP JUMPDEST PUSH1 0x7C PUSH8 0xDE0B6B3A7640000 DUP2 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDD 0x4B 0xC2 0xD0 PUSH9 0x257A87C26D371268AB XOR 0xE1 0x29 GASLIMIT PUSH17 0xECFABA59767E83A1C8C219288164736F6C PUSH4 0x4300080A STOP CALLER ","sourceMap":"1731:27657:87:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1731:27657:87;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@HEALTH_FACTOR_LIQUIDATION_THRESHOLD_19173":{"entryPoint":null,"id":19173,"parameterSlots":0,"returnSlots":0},"@ISOLATED_COLLATERAL_SUPPLIER_ROLE_19179":{"entryPoint":null,"id":19179,"parameterSlots":0,"returnSlots":0},"@MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD_19169":{"entryPoint":null,"id":19169,"parameterSlots":0,"returnSlots":0},"@REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD_19166":{"entryPoint":null,"id":19166,"parameterSlots":0,"returnSlots":0},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:391:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"123:76:201","statements":[{"nodeType":"YulAssignment","src":"133:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"145:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"156:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"141:3:201"},"nodeType":"YulFunctionCall","src":"141:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"133:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"175:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"186:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"168:6:201"},"nodeType":"YulFunctionCall","src":"168:25:201"},"nodeType":"YulExpressionStatement","src":"168:25:201"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"92:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"103:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"114:4:201","type":""}],"src":"14:185:201"},{"body":{"nodeType":"YulBlock","src":"313:76:201","statements":[{"nodeType":"YulAssignment","src":"323:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"335:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"346:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"331:3:201"},"nodeType":"YulFunctionCall","src":"331:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"323:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"365:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"376:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"358:6:201"},"nodeType":"YulFunctionCall","src":"358:25:201"},"nodeType":"YulExpressionStatement","src":"358:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"282:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"293:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"304:4:201","type":""}],"src":"204:185:201"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_library_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"730000000000000000000000000000000000000000301460806040526004361060515760003560e01c80632b0139fa146056578063561cbec914608e578063abfcc86a14609c578063c3525c281460a4575b600080fd5b607c7fd1d2cf869016112a9af1107bcf43c3759daf22cf734aad47d0c9c726e33bc78281565b60405190815260200160405180910390f35b607c670d2f13f7789f000081565b607c61232881565b607c670de0b6b3a76400008156fea2646970667358221220dd4bc2d068257a87c26d371268ab18e1294570ecfaba59767e83a1c8c219288164736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x51 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2B0139FA EQ PUSH1 0x56 JUMPI DUP1 PUSH4 0x561CBEC9 EQ PUSH1 0x8E JUMPI DUP1 PUSH4 0xABFCC86A EQ PUSH1 0x9C JUMPI DUP1 PUSH4 0xC3525C28 EQ PUSH1 0xA4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x7C PUSH32 0xD1D2CF869016112A9AF1107BCF43C3759DAF22CF734AAD47D0C9C726E33BC782 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x7C PUSH8 0xD2F13F7789F0000 DUP2 JUMP JUMPDEST PUSH1 0x7C PUSH2 0x2328 DUP2 JUMP JUMPDEST PUSH1 0x7C PUSH8 0xDE0B6B3A7640000 DUP2 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDD 0x4B 0xC2 0xD0 PUSH9 0x257A87C26D371268AB XOR 0xE1 0x29 GASLIMIT PUSH17 0xECFABA59767E83A1C8C219288164736F6C PUSH4 0x4300080A STOP CALLER ","sourceMap":"1731:27657:87:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2787:105;;2851:41;2787:105;;;;;168:25:201;;;156:2;141:18;2787:105:87;;;;;;;2419:77;;2489:7;2419:77;;2247:69;;2311:5;2247:69;;2615:66;;2677:4;2615:66;"},"gasEstimates":{"creation":{"codeDepositCost":"46400","executionCost":"130","totalCost":"46530"},"external":{"HEALTH_FACTOR_LIQUIDATION_THRESHOLD()":"211","ISOLATED_COLLATERAL_SUPPLIER_ROLE()":"145","MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD()":"167","REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD()":"189"},"internal":{"validateAutomaticUseAsCollateral(mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveConfigurationMap memory,address)":"infinite","validateBorrow(mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.ValidateBorrowParams memory)":"infinite","validateDropReserve(mapping(uint256 => address),struct DataTypes.ReserveData storage pointer,address)":"infinite","validateFlashloan(mapping(address => struct DataTypes.ReserveData storage ref),address[] memory,uint256[] memory)":"infinite","validateFlashloanSimple(struct DataTypes.ReserveData storage pointer)":"infinite","validateHFAndLtv(mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap memory,address,address,uint256,address,uint8)":"infinite","validateHealthFactor(mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap memory,address,uint8,uint256,address)":"infinite","validateLiquidationCall(struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveData storage pointer,struct DataTypes.ValidateLiquidationCallParams memory)":"infinite","validateRebalanceStableBorrowRate(struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,address)":"infinite","validateRepay(struct DataTypes.ReserveCache memory,uint256,enum DataTypes.InterestRateMode,address,uint256,uint256)":"infinite","validateSetUseReserveAsCollateral(struct DataTypes.ReserveCache memory,uint256)":"infinite","validateSetUserEMode(mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),mapping(uint8 => struct DataTypes.EModeCategory storage ref),struct DataTypes.UserConfigurationMap memory,uint256,uint8)":"infinite","validateSupply(struct DataTypes.ReserveCache memory,struct DataTypes.ReserveData storage pointer,uint256)":"infinite","validateSwapRateMode(struct DataTypes.ReserveData storage pointer,struct DataTypes.ReserveCache memory,struct DataTypes.UserConfigurationMap storage pointer,uint256,uint256,enum DataTypes.InterestRateMode)":"infinite","validateTransfer(struct DataTypes.ReserveData storage pointer)":"infinite","validateUseAsCollateral(mapping(address => struct DataTypes.ReserveData storage ref),mapping(uint256 => address),struct DataTypes.UserConfigurationMap storage pointer,struct DataTypes.ReserveConfigurationMap memory)":"infinite","validateWithdraw(struct DataTypes.ReserveCache memory,uint256,uint256)":"infinite"}},"methodIdentifiers":{"HEALTH_FACTOR_LIQUIDATION_THRESHOLD()":"c3525c28","ISOLATED_COLLATERAL_SUPPLIER_ROLE()":"2b0139fa","MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD()":"561cbec9","REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD()":"abfcc86a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"HEALTH_FACTOR_LIQUIDATION_THRESHOLD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ISOLATED_COLLATERAL_SUPPLIER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"HEALTH_FACTOR_LIQUIDATION_THRESHOLD\":{\"details\":\"Minimum health factor to consider a user position healthy A value of 1e18 results in 1\"},\"ISOLATED_COLLATERAL_SUPPLIER_ROLE\":{\"details\":\"Role identifier for the role allowed to supply isolated reserves as collateral\"}},\"title\":\"ReserveLogic library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Implements functions to validate the different actions of the protocol\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol\":\"ValidationLogic\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\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(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\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 {AccessControl-_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) external view returns (bool);\\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 {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\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) external;\\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) external;\\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) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Implements functions to validate the different actions of the protocol","version":1}}},"@aave/core-v3/contracts/protocol/libraries/math/MathUtils.sol":{"MathUtils":{"abi":[],"devdoc":{"author":"Aave","kind":"dev","methods":{},"stateVariables":{"SECONDS_PER_YEAR":{"details":"Ignoring leap years"}},"title":"MathUtils library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ff26e1d5d78cac20176a3c672c9794386119f12b47ea898cdd4f073b1b5819d464736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SELFDESTRUCT 0x26 0xE1 0xD5 0xD7 DUP13 0xAC KECCAK256 OR PUSH11 0x3C672C9794386119F12B47 0xEA DUP10 DUP13 0xDD 0x4F SMOD EXTCODESIZE SHL PC NOT 0xD4 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"245:3111:88:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;245:3111:88;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ff26e1d5d78cac20176a3c672c9794386119f12b47ea898cdd4f073b1b5819d464736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SELFDESTRUCT 0x26 0xE1 0xD5 0xD7 DUP13 0xAC KECCAK256 OR PUSH11 0x3C672C9794386119F12B47 0xEA DUP10 DUP13 0xDD 0x4F SMOD EXTCODESIZE SHL PC NOT 0xD4 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"245:3111:88:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"calculateCompoundedInterest(uint256,uint40)":"infinite","calculateCompoundedInterest(uint256,uint40,uint256)":"infinite","calculateLinearInterest(uint256,uint40)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"SECONDS_PER_YEAR\":{\"details\":\"Ignoring leap years\"}},\"title\":\"MathUtils library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Provides functions to perform linear and compounded interest calculations\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/libraries/math/MathUtils.sol\":\"MathUtils\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Provides functions to perform linear and compounded interest calculations","version":1}}},"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol":{"PercentageMath":{"abi":[],"devdoc":{"author":"Aave","details":"Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOROperations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.","kind":"dev","methods":{},"title":"PercentageMath library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122054b0ef2af08ac4ee4878553c9fb613dae77200f229e55a7f95dbe3b9a2e4663564736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SLOAD 0xB0 0xEF 0x2A CREATE DUP11 0xC4 0xEE BASEFEE PUSH25 0x553C9FB613DAE77200F229E55A7F95DBE3B9A2E4663564736F PUSH13 0x634300080A0033000000000000 ","sourceMap":"410:1938:89:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;410:1938:89;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122054b0ef2af08ac4ee4878553c9fb613dae77200f229e55a7f95dbe3b9a2e4663564736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SLOAD 0xB0 0xEF 0x2A CREATE DUP11 0xC4 0xEE BASEFEE PUSH25 0x553C9FB613DAE77200F229E55A7F95DBE3B9A2E4663564736F PUSH13 0x634300080A0033000000000000 ","sourceMap":"410:1938:89:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"percentDiv(uint256,uint256)":"infinite","percentMul(uint256,uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Aave\",\"details\":\"Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOROperations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"PercentageMath library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Provides functions to perform percentage calculations\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":\"PercentageMath\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Provides functions to perform percentage calculations","version":1}}},"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol":{"WadRayMath":{"abi":[],"devdoc":{"author":"Aave","details":"Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers with 27 digits of precision)Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.","kind":"dev","methods":{},"title":"WadRayMath library","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220119d60c96ac105fcba7cae53718c0bd96bbc98592f63d29013963fa88603011a64736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GT SWAP14 PUSH1 0xC9 PUSH11 0xC105FCBA7CAE53718C0BD9 PUSH12 0xBC98592F63D29013963FA886 SUB ADD BYTE PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"439:3711:90:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;439:3711:90;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220119d60c96ac105fcba7cae53718c0bd96bbc98592f63d29013963fa88603011a64736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GT SWAP14 PUSH1 0xC9 PUSH11 0xC105FCBA7CAE53718C0BD9 PUSH12 0xBC98592F63D29013963FA886 SUB ADD BYTE PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"439:3711:90:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"rayDiv(uint256,uint256)":"infinite","rayMul(uint256,uint256)":"infinite","rayToWad(uint256)":"infinite","wadDiv(uint256,uint256)":"infinite","wadMul(uint256,uint256)":"infinite","wadToRay(uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Aave\",\"details\":\"Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers with 27 digits of precision)Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"WadRayMath library\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Provides functions to perform calculations with Wad and Ray units\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":\"WadRayMath\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Provides functions to perform calculations with Wad and Ray units","version":1}}},"@aave/core-v3/contracts/protocol/libraries/types/ConfiguratorInputTypes.sol":{"ConfiguratorInputTypes":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a39a64f4e8f443b7dfee7f155d6f88f7ba9a8d2b76d1f49c7ebad3f0389223c864736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG3 SWAP11 PUSH5 0xF4E8F443B7 0xDF 0xEE PUSH32 0x155D6F88F7BA9A8D2B76D1F49C7EBAD3F0389223C864736F6C634300080A0033 ","sourceMap":"62:884:91:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;62:884:91;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a39a64f4e8f443b7dfee7f155d6f88f7ba9a8d2b76d1f49c7ebad3f0389223c864736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG3 SWAP11 PUSH5 0xF4E8F443B7 0xDF 0xEE PUSH32 0x155D6F88F7BA9A8D2B76D1F49C7EBAD3F0389223C864736F6C634300080A0033 ","sourceMap":"62:884:91:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/libraries/types/ConfiguratorInputTypes.sol\":\"ConfiguratorInputTypes\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/protocol/libraries/types/ConfiguratorInputTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary ConfiguratorInputTypes {\\n  struct InitReserveInput {\\n    address aTokenImpl;\\n    address stableDebtTokenImpl;\\n    address variableDebtTokenImpl;\\n    uint8 underlyingAssetDecimals;\\n    address interestRateStrategyAddress;\\n    address underlyingAsset;\\n    address treasury;\\n    address incentivesController;\\n    string aTokenName;\\n    string aTokenSymbol;\\n    string variableDebtTokenName;\\n    string variableDebtTokenSymbol;\\n    string stableDebtTokenName;\\n    string stableDebtTokenSymbol;\\n    bytes params;\\n  }\\n\\n  struct UpdateATokenInput {\\n    address asset;\\n    address treasury;\\n    address incentivesController;\\n    string name;\\n    string symbol;\\n    address implementation;\\n    bytes params;\\n  }\\n\\n  struct UpdateDebtTokenInput {\\n    address asset;\\n    address incentivesController;\\n    string name;\\n    string symbol;\\n    address implementation;\\n    bytes params;\\n  }\\n}\\n\",\"keccak256\":\"0x1fb622bd7b4f68289b727a824c92ab4c05b06f4aa8308c7d2b0ccb0f9ae63b0b\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol":{"DataTypes":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209c1c23ced137c64eaaddcf80bd8769035f1803bcb6c33e5416943d863e53453764736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP13 SHR 0x23 0xCE 0xD1 CALLDATACOPY 0xC6 0x4E 0xAA 0xDD 0xCF DUP1 0xBD DUP8 PUSH10 0x35F1803BCB6C33E5416 SWAP5 RETURNDATASIZE DUP7 RETURNDATACOPY MSTORE8 GASLIMIT CALLDATACOPY PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"62:7306:92:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;62:7306:92;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209c1c23ced137c64eaaddcf80bd8769035f1803bcb6c33e5416943d863e53453764736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP13 SHR 0x23 0xCE 0xD1 CALLDATACOPY 0xC6 0x4E 0xAA 0xDD 0xCF DUP1 0xBD DUP8 PUSH10 0x35F1803BCB6C33E5416 SWAP5 RETURNDATASIZE DUP7 RETURNDATACOPY MSTORE8 GASLIMIT CALLDATACOPY PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"62:7306:92:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":\"DataTypes\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@aave/core-v3/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol":{"DefaultReserveInterestRateStrategy":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"},{"internalType":"uint256","name":"optimalUsageRatio","type":"uint256"},{"internalType":"uint256","name":"baseVariableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"variableRateSlope1","type":"uint256"},{"internalType":"uint256","name":"variableRateSlope2","type":"uint256"},{"internalType":"uint256","name":"stableRateSlope1","type":"uint256"},{"internalType":"uint256","name":"stableRateSlope2","type":"uint256"},{"internalType":"uint256","name":"baseStableRateOffset","type":"uint256"},{"internalType":"uint256","name":"stableRateExcessOffset","type":"uint256"},{"internalType":"uint256","name":"optimalStableToTotalDebtRatio","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_EXCESS_USAGE_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPTIMAL_USAGE_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"unbacked","type":"uint256"},{"internalType":"uint256","name":"liquidityAdded","type":"uint256"},{"internalType":"uint256","name":"liquidityTaken","type":"uint256"},{"internalType":"uint256","name":"totalStableDebt","type":"uint256"},{"internalType":"uint256","name":"totalVariableDebt","type":"uint256"},{"internalType":"uint256","name":"averageStableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"reserveFactor","type":"uint256"},{"internalType":"address","name":"reserve","type":"address"},{"internalType":"address","name":"aToken","type":"address"}],"internalType":"struct DataTypes.CalculateInterestRatesParams","name":"params","type":"tuple"}],"name":"calculateInterestRates","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseStableBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseVariableBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxVariableBorrowRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStableRateExcessOffset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStableRateSlope1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStableRateSlope2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVariableRateSlope1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVariableRateSlope2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","details":"The model of interest rate is based on 2 slopes, one before the `OPTIMAL_USAGE_RATIO` point of usage and another from that one to 100%. - An instance of this same contract, can't be used across different Aave markets, due to the caching   of the PoolAddressesProvider","kind":"dev","methods":{"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":{"params":{"params":"The parameters needed to calculate interest rates"},"returns":{"_0":"liquidityRate The liquidity rate expressed in rays","_1":"stableBorrowRate The stable borrow rate expressed in rays","_2":"variableBorrowRate The variable borrow rate expressed in rays"}},"constructor":{"details":"Constructor.","params":{"baseStableRateOffset":"The premium on top of variable rate for base stable borrowing rate","baseVariableBorrowRate":"The base variable borrow rate","optimalStableToTotalDebtRatio":"The optimal stable debt to total debt ratio of the reserve","optimalUsageRatio":"The optimal usage ratio","provider":"The address of the PoolAddressesProvider contract","stableRateExcessOffset":"The premium on top of stable rate when there stable debt surpass the threshold","stableRateSlope1":"The stable rate slope below optimal usage ratio","stableRateSlope2":"The stable rate slope above optimal usage ratio","variableRateSlope1":"The variable rate slope below optimal usage ratio","variableRateSlope2":"The variable rate slope above optimal usage ratio"}},"getBaseStableBorrowRate()":{"returns":{"_0":"The base stable borrow rate, expressed in ray"}},"getBaseVariableBorrowRate()":{"returns":{"_0":"The base variable borrow rate, expressed in ray"}},"getMaxVariableBorrowRate()":{"returns":{"_0":"The maximum variable borrow rate, expressed in ray"}},"getStableRateExcessOffset()":{"details":"It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO","returns":{"_0":"The stable rate excess offset, expressed in ray"}},"getStableRateSlope1()":{"details":"It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO","returns":{"_0":"The stable rate slope, expressed in ray"}},"getStableRateSlope2()":{"details":"It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO","returns":{"_0":"The stable rate slope, expressed in ray"}},"getVariableRateSlope1()":{"details":"It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO","returns":{"_0":"The variable rate slope, expressed in ray"}},"getVariableRateSlope2()":{"details":"It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO","returns":{"_0":"The variable rate slope, expressed in ray"}}},"stateVariables":{"ADDRESSES_PROVIDER":{"return":"The address of the PoolAddressesProvider contract","returns":{"_0":"The address of the PoolAddressesProvider contract"}},"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO":{"details":"It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations)","return":"The max excess stable to total debt ratio, expressed in ray.","returns":{"_0":"The max excess stable to total debt ratio, expressed in ray."}},"MAX_EXCESS_USAGE_RATIO":{"details":"It's always equal to 1-optimal usage ratio (added as constant for gas optimizations)","return":"The max excess usage ratio, expressed in ray.","returns":{"_0":"The max excess usage ratio, expressed in ray."}},"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO":{"return":"The optimal stable to total debt ratio, expressed in ray.","returns":{"_0":"The optimal stable to total debt ratio, expressed in ray."}},"OPTIMAL_USAGE_RATIO":{"return":"The optimal usage ratio, expressed in ray.","returns":{"_0":"The optimal usage ratio, expressed in ray."}}},"title":"DefaultReserveInterestRateStrategy contract","version":1},"evm":{"bytecode":{"functionDebugData":{"@_21787":{"entryPoint":null,"id":21787,"parameterSlots":10,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory":{"entryPoint":326,"id":null,"parameterSlots":2,"returnSlots":10},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":465,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":550,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1722:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"279:612:201","statements":[{"body":{"nodeType":"YulBlock","src":"326:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"335:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"338:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"328:6:201"},"nodeType":"YulFunctionCall","src":"328:12:201"},"nodeType":"YulExpressionStatement","src":"328:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"300:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"309:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"296:3:201"},"nodeType":"YulFunctionCall","src":"296:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"321:3:201","type":"","value":"320"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"292:3:201"},"nodeType":"YulFunctionCall","src":"292:33:201"},"nodeType":"YulIf","src":"289:53:201"},{"nodeType":"YulVariableDeclaration","src":"351:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"370:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"364:5:201"},"nodeType":"YulFunctionCall","src":"364:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"355:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"443:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"452:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"455:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"445:6:201"},"nodeType":"YulFunctionCall","src":"445:12:201"},"nodeType":"YulExpressionStatement","src":"445:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"402:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"413:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"428:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"433:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"424:3:201"},"nodeType":"YulFunctionCall","src":"424:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"437:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"420:3:201"},"nodeType":"YulFunctionCall","src":"420:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"409:3:201"},"nodeType":"YulFunctionCall","src":"409:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"399:2:201"},"nodeType":"YulFunctionCall","src":"399:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"392:6:201"},"nodeType":"YulFunctionCall","src":"392:50:201"},"nodeType":"YulIf","src":"389:70:201"},{"nodeType":"YulAssignment","src":"468:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"478:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"468:6:201"}]},{"nodeType":"YulAssignment","src":"492:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"512:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"523:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"508:3:201"},"nodeType":"YulFunctionCall","src":"508:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"502:5:201"},"nodeType":"YulFunctionCall","src":"502:25:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"492:6:201"}]},{"nodeType":"YulAssignment","src":"536:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"556:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"567:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"552:3:201"},"nodeType":"YulFunctionCall","src":"552:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"546:5:201"},"nodeType":"YulFunctionCall","src":"546:25:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"536:6:201"}]},{"nodeType":"YulAssignment","src":"580:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"600:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"611:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"596:3:201"},"nodeType":"YulFunctionCall","src":"596:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"590:5:201"},"nodeType":"YulFunctionCall","src":"590:25:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"580:6:201"}]},{"nodeType":"YulAssignment","src":"624:36:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"644:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"655:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"640:3:201"},"nodeType":"YulFunctionCall","src":"640:19:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"634:5:201"},"nodeType":"YulFunctionCall","src":"634:26:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"624:6:201"}]},{"nodeType":"YulAssignment","src":"669:36:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"689:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"700:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"685:3:201"},"nodeType":"YulFunctionCall","src":"685:19:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"679:5:201"},"nodeType":"YulFunctionCall","src":"679:26:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"669:6:201"}]},{"nodeType":"YulAssignment","src":"714:36:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"734:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"745:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"730:3:201"},"nodeType":"YulFunctionCall","src":"730:19:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"724:5:201"},"nodeType":"YulFunctionCall","src":"724:26:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"714:6:201"}]},{"nodeType":"YulAssignment","src":"759:36:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"779:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"790:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"775:3:201"},"nodeType":"YulFunctionCall","src":"775:19:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"769:5:201"},"nodeType":"YulFunctionCall","src":"769:26:201"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"759:6:201"}]},{"nodeType":"YulAssignment","src":"804:36:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"824:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"835:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"820:3:201"},"nodeType":"YulFunctionCall","src":"820:19:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"814:5:201"},"nodeType":"YulFunctionCall","src":"814:26:201"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"804:6:201"}]},{"nodeType":"YulAssignment","src":"849:36:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"869:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"880:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"865:3:201"},"nodeType":"YulFunctionCall","src":"865:19:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"859:5:201"},"nodeType":"YulFunctionCall","src":"859:26:201"},"variableNames":[{"name":"value9","nodeType":"YulIdentifier","src":"849:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"173:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"184:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"196:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"204:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"212:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"220:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"228:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"236:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"244:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"252:6:201","type":""},{"name":"value8","nodeType":"YulTypedName","src":"260:6:201","type":""},{"name":"value9","nodeType":"YulTypedName","src":"268:6:201","type":""}],"src":"14:877:201"},{"body":{"nodeType":"YulBlock","src":"1017:476:201","statements":[{"nodeType":"YulVariableDeclaration","src":"1027:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1037:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1031:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1055:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1066:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1048:6:201"},"nodeType":"YulFunctionCall","src":"1048:21:201"},"nodeType":"YulExpressionStatement","src":"1048:21:201"},{"nodeType":"YulVariableDeclaration","src":"1078:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1098:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1092:5:201"},"nodeType":"YulFunctionCall","src":"1092:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"1082:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1125:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1136:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1121:3:201"},"nodeType":"YulFunctionCall","src":"1121:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"1141:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1114:6:201"},"nodeType":"YulFunctionCall","src":"1114:34:201"},"nodeType":"YulExpressionStatement","src":"1114:34:201"},{"nodeType":"YulVariableDeclaration","src":"1157:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1166:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"1161:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1226:90:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1255:9:201"},{"name":"i","nodeType":"YulIdentifier","src":"1266:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1251:3:201"},"nodeType":"YulFunctionCall","src":"1251:17:201"},{"kind":"number","nodeType":"YulLiteral","src":"1270:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1247:3:201"},"nodeType":"YulFunctionCall","src":"1247:26:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1289:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"1297:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1285:3:201"},"nodeType":"YulFunctionCall","src":"1285:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1301:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1281:3:201"},"nodeType":"YulFunctionCall","src":"1281:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1275:5:201"},"nodeType":"YulFunctionCall","src":"1275:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1240:6:201"},"nodeType":"YulFunctionCall","src":"1240:66:201"},"nodeType":"YulExpressionStatement","src":"1240:66:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1187:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"1190:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1184:2:201"},"nodeType":"YulFunctionCall","src":"1184:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"1198:19:201","statements":[{"nodeType":"YulAssignment","src":"1200:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1209:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1212:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1205:3:201"},"nodeType":"YulFunctionCall","src":"1205:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"1200:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"1180:3:201","statements":[]},"src":"1176:140:201"},{"body":{"nodeType":"YulBlock","src":"1350:66:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1379:9:201"},{"name":"length","nodeType":"YulIdentifier","src":"1390:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1375:3:201"},"nodeType":"YulFunctionCall","src":"1375:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"1399:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1371:3:201"},"nodeType":"YulFunctionCall","src":"1371:31:201"},{"kind":"number","nodeType":"YulLiteral","src":"1404:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1364:6:201"},"nodeType":"YulFunctionCall","src":"1364:42:201"},"nodeType":"YulExpressionStatement","src":"1364:42:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1331:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"1334:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1328:2:201"},"nodeType":"YulFunctionCall","src":"1328:13:201"},"nodeType":"YulIf","src":"1325:91:201"},{"nodeType":"YulAssignment","src":"1425:62:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1441:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1460:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1468:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1456:3:201"},"nodeType":"YulFunctionCall","src":"1456:15:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1477:2:201","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"1473:3:201"},"nodeType":"YulFunctionCall","src":"1473:7:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1452:3:201"},"nodeType":"YulFunctionCall","src":"1452:29:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1437:3:201"},"nodeType":"YulFunctionCall","src":"1437:45:201"},{"kind":"number","nodeType":"YulLiteral","src":"1484:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1433:3:201"},"nodeType":"YulFunctionCall","src":"1433:54:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1425:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"986:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"997:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1008:4:201","type":""}],"src":"896:597:201"},{"body":{"nodeType":"YulBlock","src":"1547:173:201","statements":[{"body":{"nodeType":"YulBlock","src":"1577:111:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1598:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1605:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1610:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1601:3:201"},"nodeType":"YulFunctionCall","src":"1601:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1591:6:201"},"nodeType":"YulFunctionCall","src":"1591:31:201"},"nodeType":"YulExpressionStatement","src":"1591:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1642:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1645:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1635:6:201"},"nodeType":"YulFunctionCall","src":"1635:15:201"},"nodeType":"YulExpressionStatement","src":"1635:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1670:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1673:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1663:6:201"},"nodeType":"YulFunctionCall","src":"1663:15:201"},"nodeType":"YulExpressionStatement","src":"1663:15:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"1563:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"1566:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1560:2:201"},"nodeType":"YulFunctionCall","src":"1560:8:201"},"nodeType":"YulIf","src":"1557:131:201"},{"nodeType":"YulAssignment","src":"1697:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"1709:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"1712:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1705:3:201"},"nodeType":"YulFunctionCall","src":"1705:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"1697:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"1529:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"1532:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"1538:4:201","type":""}],"src":"1498:222:201"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9\n    {\n        if slt(sub(dataEnd, headStart), 320) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        value3 := mload(add(headStart, 96))\n        value4 := mload(add(headStart, 128))\n        value5 := mload(add(headStart, 160))\n        value6 := mload(add(headStart, 192))\n        value7 := mload(add(headStart, 224))\n        value8 := mload(add(headStart, 256))\n        value9 := mload(add(headStart, 288))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y)\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        diff := sub(x, y)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"61020060405234801561001157600080fd5b5060405162000f7538038062000f7583398101604081905261003291610146565b886b033b2e3c9fd0803ce8000000101560405180604001604052806002815260200161383360f01b815250906100845760405162461bcd60e51b815260040161007b91906101d1565b60405180910390fd5b50806b033b2e3c9fd0803ce80000001015604051806040016040528060028152602001610e0d60f21b815250906100ce5760405162461bcd60e51b815260040161007b91906101d1565b5060808990526100ea896b033b2e3c9fd0803ce8000000610226565b60c05260a0819052610108816b033b2e3c9fd0803ce8000000610226565b60e052506001600160a01b0390981661010052610120959095526101409390935261016091909152610180526101a0526101c052506101e05261024b565b6000806000806000806000806000806101408b8d03121561016657600080fd5b8a516001600160a01b038116811461017d57600080fd5b809a505060208b0151985060408b0151975060608b0151965060808b0151955060a08b0151945060c08b0151935060e08b015192506101008b015191506101208b015190509295989b9194979a5092959850565b600060208083528351808285015260005b818110156101fe578581018301518582016040015282016101e2565b81811115610210576000604083870101525b50601f01601f1916929092016040019392505050565b60008282101561024657634e487b7160e01b600052601160045260246000fd5b500390565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610c0d62000368600039600081816102710152610821015260006108c601526000818161017201526105ec0152600081816102970152818161061701526106ec0152600081816102bd0152818161030c0152610654015260008181610142015281816103300152818161067f0152818161075e01526108e70152600081816101980152818161035101526103fa0152600060f40152600081816102e601526107cb01526000818161024501526105900152600081816101e80152818161079a01526107ec0152600081816101c10152818161055f015281816105b1015281816106c301526107380152610c0d6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a58987091161008c578063bc62690811610066578063bc6269081461026f578063d5cd739114610295578063f4202409146102bb578063fe5fd698146102e157600080fd5b8063a589870914610212578063a9c622f814610240578063acd786861461026757600080fd5b806334762ca5116100c857806334762ca51461019657806354c365c6146101bc5780636fb92589146101e357806380031e371461020a57600080fd5b80630542975c146100ef5780630b3429a21461014057806314e32da414610170575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b604051908152602001610137565b7f0000000000000000000000000000000000000000000000000000000000000000610162565b7f0000000000000000000000000000000000000000000000000000000000000000610162565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b610162610308565b610225610220366004610adb565b610384565b60408051938452602084019290925290820152606001610137565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b6101626108bf565b7f0000000000000000000000000000000000000000000000000000000000000000610162565b7f0000000000000000000000000000000000000000000000000000000000000000610162565b7f0000000000000000000000000000000000000000000000000000000000000000610162565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b60007f00000000000000000000000000000000000000000000000000000000000000006103757f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610b8f565b61037f9190610b8f565b905090565b60008060006103d86040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b846080015185606001516103ec9190610b8f565b6020820152600060808201527f000000000000000000000000000000000000000000000000000000000000000060408201526104266108bf565b606082015260208101511561055d57602081015160608601516104489161090b565b60e08083019190915260408087015160208801519288015161010089015192517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015291939216906370a0823190602401602060405180830381865afa1580156104d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f79190610ba7565b6105019190610b8f565b61050b9190610bc0565b808252602082015161051c91610b8f565b610100820181905260208201516105329161090b565b60a082015284516101008201516105579161054c91610b8f565b60208301519061090b565b60c08201525b7f00000000000000000000000000000000000000000000000000000000000000008160a0015111156106be5760006105e57f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008460a001516105df9190610bc0565b9061090b565b90506106117f00000000000000000000000000000000000000000000000000000000000000008261094a565b61063b907f0000000000000000000000000000000000000000000000000000000000000000610b8f565b8260600181815161064c9190610b8f565b9052506106797f00000000000000000000000000000000000000000000000000000000000000008261094a565b6106a3907f0000000000000000000000000000000000000000000000000000000000000000610b8f565b826040018181516106b49190610b8f565b9052506107989050565b6107197f00000000000000000000000000000000000000000000000000000000000000006105df8360a001517f000000000000000000000000000000000000000000000000000000000000000061094a90919063ffffffff16565b8160600181815161072a9190610b8f565b90525060a0810151610783907f0000000000000000000000000000000000000000000000000000000000000000906105df907f00000000000000000000000000000000000000000000000000000000000000009061094a565b816040018181516107949190610b8f565b9052505b7f00000000000000000000000000000000000000000000000000000000000000008160e00151111561085c57600061081a7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008460e001516105df9190610bc0565b90506108467f00000000000000000000000000000000000000000000000000000000000000008261094a565b826060018181516108579190610b8f565b905250505b6108a18560c001516127106108719190610bc0565b61089b8360c0015161089589606001518a6080015187604001518c60a001516109a1565b9061094a565b90610a08565b60808201819052606082015160409092015190969195509350915050565b600061037f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610b8f565b600081156b033b2e3c9fd0803ce80000006002840419048411171561092f57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761097f57600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b6000806109ae8587610b8f565b9050806109bf576000915050610a00565b60006109ce8561089588610a4b565b905060006109df856108958a610a4b565b905060006109f96109ef85610a4b565b6105df8486610b8f565b9450505050505b949350505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7783900484111517610a3d57600080fd5b506127109102611388010490565b633b9aca008181029081048214610a6157600080fd5b919050565b604051610120810167ffffffffffffffff81118282101715610ab1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a6157600080fd5b60006101208284031215610aee57600080fd5b610af6610a66565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c0820152610b4260e08401610ab7565b60e0820152610100610b55818501610ab7565b908201529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610ba257610ba2610b60565b500190565b600060208284031215610bb957600080fd5b5051919050565b600082821015610bd257610bd2610b60565b50039056fea2646970667358221220886d4169a8ff4d03f357616a33371db68a6ba97fe5f41c287fc40215d7f56b4364736f6c634300080a0033","opcodes":"PUSH2 0x200 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0xF75 CODESIZE SUB DUP1 PUSH3 0xF75 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x32 SWAP2 PUSH2 0x146 JUMP JUMPDEST DUP9 PUSH12 0x33B2E3C9FD0803CE8000000 LT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3833 PUSH1 0xF0 SHL DUP2 MSTORE POP SWAP1 PUSH2 0x84 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7B SWAP2 SWAP1 PUSH2 0x1D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP1 PUSH12 0x33B2E3C9FD0803CE8000000 LT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xE0D PUSH1 0xF2 SHL DUP2 MSTORE POP SWAP1 PUSH2 0xCE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7B SWAP2 SWAP1 PUSH2 0x1D1 JUMP JUMPDEST POP PUSH1 0x80 DUP10 SWAP1 MSTORE PUSH2 0xEA DUP10 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x226 JUMP JUMPDEST PUSH1 0xC0 MSTORE PUSH1 0xA0 DUP2 SWAP1 MSTORE PUSH2 0x108 DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x226 JUMP JUMPDEST PUSH1 0xE0 MSTORE POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP9 AND PUSH2 0x100 MSTORE PUSH2 0x120 SWAP6 SWAP1 SWAP6 MSTORE PUSH2 0x140 SWAP4 SWAP1 SWAP4 MSTORE PUSH2 0x160 SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x180 MSTORE PUSH2 0x1A0 MSTORE PUSH2 0x1C0 MSTORE POP PUSH2 0x1E0 MSTORE PUSH2 0x24B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x140 DUP12 DUP14 SUB SLT ISZERO PUSH2 0x166 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP11 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x17D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP11 POP POP PUSH1 0x20 DUP12 ADD MLOAD SWAP9 POP PUSH1 0x40 DUP12 ADD MLOAD SWAP8 POP PUSH1 0x60 DUP12 ADD MLOAD SWAP7 POP PUSH1 0x80 DUP12 ADD MLOAD SWAP6 POP PUSH1 0xA0 DUP12 ADD MLOAD SWAP5 POP PUSH1 0xC0 DUP12 ADD MLOAD SWAP4 POP PUSH1 0xE0 DUP12 ADD MLOAD SWAP3 POP PUSH2 0x100 DUP12 ADD MLOAD SWAP2 POP PUSH2 0x120 DUP12 ADD MLOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP2 SWAP5 SWAP8 SWAP11 POP SWAP3 SWAP6 SWAP9 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1FE JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x1E2 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x210 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x246 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH2 0x120 MLOAD PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x180 MLOAD PUSH2 0x1A0 MLOAD PUSH2 0x1C0 MLOAD PUSH2 0x1E0 MLOAD PUSH2 0xC0D PUSH3 0x368 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x271 ADD MSTORE PUSH2 0x821 ADD MSTORE PUSH1 0x0 PUSH2 0x8C6 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x172 ADD MSTORE PUSH2 0x5EC ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x297 ADD MSTORE DUP2 DUP2 PUSH2 0x617 ADD MSTORE PUSH2 0x6EC ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x2BD ADD MSTORE DUP2 DUP2 PUSH2 0x30C ADD MSTORE PUSH2 0x654 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x142 ADD MSTORE DUP2 DUP2 PUSH2 0x330 ADD MSTORE DUP2 DUP2 PUSH2 0x67F ADD MSTORE DUP2 DUP2 PUSH2 0x75E ADD MSTORE PUSH2 0x8E7 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x198 ADD MSTORE DUP2 DUP2 PUSH2 0x351 ADD MSTORE PUSH2 0x3FA ADD MSTORE PUSH1 0x0 PUSH1 0xF4 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x2E6 ADD MSTORE PUSH2 0x7CB ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x245 ADD MSTORE PUSH2 0x590 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x1E8 ADD MSTORE DUP2 DUP2 PUSH2 0x79A ADD MSTORE PUSH2 0x7EC ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x1C1 ADD MSTORE DUP2 DUP2 PUSH2 0x55F ADD MSTORE DUP2 DUP2 PUSH2 0x5B1 ADD MSTORE DUP2 DUP2 PUSH2 0x6C3 ADD MSTORE PUSH2 0x738 ADD MSTORE PUSH2 0xC0D PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA5898709 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xBC626908 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xBC626908 EQ PUSH2 0x26F JUMPI DUP1 PUSH4 0xD5CD7391 EQ PUSH2 0x295 JUMPI DUP1 PUSH4 0xF4202409 EQ PUSH2 0x2BB JUMPI DUP1 PUSH4 0xFE5FD698 EQ PUSH2 0x2E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA5898709 EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0xA9C622F8 EQ PUSH2 0x240 JUMPI DUP1 PUSH4 0xACD78686 EQ PUSH2 0x267 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x34762CA5 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x34762CA5 EQ PUSH2 0x196 JUMPI DUP1 PUSH4 0x54C365C6 EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0x6FB92589 EQ PUSH2 0x1E3 JUMPI DUP1 PUSH4 0x80031E37 EQ PUSH2 0x20A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0xB3429A2 EQ PUSH2 0x140 JUMPI DUP1 PUSH4 0x14E32DA4 EQ PUSH2 0x170 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x116 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH32 0x0 JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x137 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x162 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x162 JUMP JUMPDEST PUSH2 0x162 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x162 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x308 JUMP JUMPDEST PUSH2 0x225 PUSH2 0x220 CALLDATASIZE PUSH1 0x4 PUSH2 0xADB JUMP JUMPDEST PUSH2 0x384 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x137 JUMP JUMPDEST PUSH2 0x162 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x8BF JUMP JUMPDEST PUSH32 0x0 PUSH2 0x162 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x162 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x162 JUMP JUMPDEST PUSH2 0x162 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH2 0x375 PUSH32 0x0 PUSH32 0x0 PUSH2 0xB8F JUMP JUMPDEST PUSH2 0x37F SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3D8 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE 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 DUP5 PUSH1 0x80 ADD MLOAD DUP6 PUSH1 0x60 ADD MLOAD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x80 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x426 PUSH2 0x8BF JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO PUSH2 0x55D JUMPI PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH2 0x448 SWAP2 PUSH2 0x90B JUMP JUMPDEST PUSH1 0xE0 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 DUP8 ADD MLOAD PUSH1 0x20 DUP9 ADD MLOAD SWAP3 DUP9 ADD MLOAD PUSH2 0x100 DUP10 ADD MLOAD SWAP3 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP4 SWAP3 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4D3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4F7 SWAP2 SWAP1 PUSH2 0xBA7 JUMP JUMPDEST PUSH2 0x501 SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST PUSH2 0x50B SWAP2 SWAP1 PUSH2 0xBC0 JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x51C SWAP2 PUSH2 0xB8F JUMP JUMPDEST PUSH2 0x100 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x532 SWAP2 PUSH2 0x90B JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE DUP5 MLOAD PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x557 SWAP2 PUSH2 0x54C SWAP2 PUSH2 0xB8F JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MLOAD SWAP1 PUSH2 0x90B JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE JUMPDEST PUSH32 0x0 DUP2 PUSH1 0xA0 ADD MLOAD GT ISZERO PUSH2 0x6BE JUMPI PUSH1 0x0 PUSH2 0x5E5 PUSH32 0x0 PUSH32 0x0 DUP5 PUSH1 0xA0 ADD MLOAD PUSH2 0x5DF SWAP2 SWAP1 PUSH2 0xBC0 JUMP JUMPDEST SWAP1 PUSH2 0x90B JUMP JUMPDEST SWAP1 POP PUSH2 0x611 PUSH32 0x0 DUP3 PUSH2 0x94A JUMP JUMPDEST PUSH2 0x63B SWAP1 PUSH32 0x0 PUSH2 0xB8F JUMP JUMPDEST DUP3 PUSH1 0x60 ADD DUP2 DUP2 MLOAD PUSH2 0x64C SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x679 PUSH32 0x0 DUP3 PUSH2 0x94A JUMP JUMPDEST PUSH2 0x6A3 SWAP1 PUSH32 0x0 PUSH2 0xB8F JUMP JUMPDEST DUP3 PUSH1 0x40 ADD DUP2 DUP2 MLOAD PUSH2 0x6B4 SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x798 SWAP1 POP JUMP JUMPDEST PUSH2 0x719 PUSH32 0x0 PUSH2 0x5DF DUP4 PUSH1 0xA0 ADD MLOAD PUSH32 0x0 PUSH2 0x94A SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP2 PUSH1 0x60 ADD DUP2 DUP2 MLOAD PUSH2 0x72A SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0xA0 DUP2 ADD MLOAD PUSH2 0x783 SWAP1 PUSH32 0x0 SWAP1 PUSH2 0x5DF SWAP1 PUSH32 0x0 SWAP1 PUSH2 0x94A JUMP JUMPDEST DUP2 PUSH1 0x40 ADD DUP2 DUP2 MLOAD PUSH2 0x794 SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST PUSH32 0x0 DUP2 PUSH1 0xE0 ADD MLOAD GT ISZERO PUSH2 0x85C JUMPI PUSH1 0x0 PUSH2 0x81A PUSH32 0x0 PUSH32 0x0 DUP5 PUSH1 0xE0 ADD MLOAD PUSH2 0x5DF SWAP2 SWAP1 PUSH2 0xBC0 JUMP JUMPDEST SWAP1 POP PUSH2 0x846 PUSH32 0x0 DUP3 PUSH2 0x94A JUMP JUMPDEST DUP3 PUSH1 0x60 ADD DUP2 DUP2 MLOAD PUSH2 0x857 SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST SWAP1 MSTORE POP POP JUMPDEST PUSH2 0x8A1 DUP6 PUSH1 0xC0 ADD MLOAD PUSH2 0x2710 PUSH2 0x871 SWAP2 SWAP1 PUSH2 0xBC0 JUMP JUMPDEST PUSH2 0x89B DUP4 PUSH1 0xC0 ADD MLOAD PUSH2 0x895 DUP10 PUSH1 0x60 ADD MLOAD DUP11 PUSH1 0x80 ADD MLOAD DUP8 PUSH1 0x40 ADD MLOAD DUP13 PUSH1 0xA0 ADD MLOAD PUSH2 0x9A1 JUMP JUMPDEST SWAP1 PUSH2 0x94A JUMP JUMPDEST SWAP1 PUSH2 0xA08 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x40 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP7 SWAP2 SWAP6 POP SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37F PUSH32 0x0 PUSH32 0x0 PUSH2 0xB8F JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x92F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x97F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x9AE DUP6 DUP8 PUSH2 0xB8F JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x9BF JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0xA00 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9CE DUP6 PUSH2 0x895 DUP9 PUSH2 0xA4B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9DF DUP6 PUSH2 0x895 DUP11 PUSH2 0xA4B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9F9 PUSH2 0x9EF DUP6 PUSH2 0xA4B JUMP JUMPDEST PUSH2 0x5DF DUP5 DUP7 PUSH2 0xB8F JUMP JUMPDEST SWAP5 POP POP POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0xA3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH4 0x3B9ACA00 DUP2 DUP2 MUL SWAP1 DUP2 DIV DUP3 EQ PUSH2 0xA61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xAB1 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xA61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAF6 PUSH2 0xA66 JUMP JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP4 ADD CALLDATALOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0xB42 PUSH1 0xE0 DUP5 ADD PUSH2 0xAB7 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0xB55 DUP2 DUP6 ADD PUSH2 0xAB7 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0xBA2 JUMPI PUSH2 0xBA2 PUSH2 0xB60 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xBB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0xBD2 JUMPI PUSH2 0xBD2 PUSH2 0xB60 JUMP JUMPDEST POP SUB SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP9 PUSH14 0x4169A8FF4D03F357616A33371DB6 DUP11 PUSH12 0xA97FE5F41C287FC40215D7F5 PUSH12 0x4364736F6C634300080A0033 ","sourceMap":"1117:9169:93:-:0;;;3632:1222;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4021:17;704:4:90;4003:35:93;;4040:34;;;;;;;;;;;;;-1:-1:-1;;;4040:34:93;;;3995:80;;;;;-1:-1:-1;;;3995:80:93;;;;;;;;:::i;:::-;;;;;;;;;;4114:29;704:4:90;4096:47:93;;4151:49;;;;;;;;;;;;;-1:-1:-1;;;4151:49:93;;;4081:125;;;;;-1:-1:-1;;;4081:125:93;;;;;;;;:::i;:::-;-1:-1:-1;4212:39:93;;;;4282:34;4234:17;704:4:90;4282:34:93;:::i;:::-;4257:59;;4322:66;;;;4434:46;4359:29;704:4:90;4434:46:93;:::i;:::-;4394:86;;-1:-1:-1;;;;;;4486:29:93;;;;;4521:48;;;;;4575:40;;;;;4621;;;;;4667:36;;4709;;4751:44;;-1:-1:-1;4801:48:93;;1117:9169;;14:877:201;196:6;204;212;220;228;236;244;252;260;268;321:3;309:9;300:7;296:23;292:33;289:53;;;338:1;335;328:12;289:53;364:16;;-1:-1:-1;;;;;409:31:201;;399:42;;389:70;;455:1;452;445:12;389:70;478:5;468:15;;;523:2;512:9;508:18;502:25;492:35;;567:2;556:9;552:18;546:25;536:35;;611:2;600:9;596:18;590:25;580:35;;655:3;644:9;640:19;634:26;624:36;;700:3;689:9;685:19;679:26;669:36;;745:3;734:9;730:19;724:26;714:36;;790:3;779:9;775:19;769:26;759:36;;835:3;824:9;820:19;814:26;804:36;;880:3;869:9;865:19;859:26;849:36;;14:877;;;;;;;;;;;;;:::o;896:597::-;1008:4;1037:2;1066;1055:9;1048:21;1098:6;1092:13;1141:6;1136:2;1125:9;1121:18;1114:34;1166:1;1176:140;1190:6;1187:1;1184:13;1176:140;;;1285:14;;;1281:23;;1275:30;1251:17;;;1270:2;1247:26;1240:66;1205:10;;1176:140;;;1334:6;1331:1;1328:13;1325:91;;;1404:1;1399:2;1390:6;1379:9;1375:22;1371:31;1364:42;1325:91;-1:-1:-1;1477:2:201;1456:15;-1:-1:-1;;1452:29:201;1437:45;;;;1484:2;1433:54;;896:597;-1:-1:-1;;;896:597:201:o;1498:222::-;1538:4;1566:1;1563;1560:8;1557:131;;;1610:10;1605:3;1601:20;1598:1;1591:31;1645:4;1642:1;1635:15;1673:4;1670:1;1663:15;1557:131;-1:-1:-1;1705:9:201;;1498:222::o;:::-;1117:9169:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ADDRESSES_PROVIDER_21675":{"entryPoint":null,"id":21675,"parameterSlots":0,"returnSlots":0},"@MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO_21672":{"entryPoint":null,"id":21672,"parameterSlots":0,"returnSlots":0},"@MAX_EXCESS_USAGE_RATIO_21669":{"entryPoint":null,"id":21669,"parameterSlots":0,"returnSlots":0},"@OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO_21666":{"entryPoint":null,"id":21666,"parameterSlots":0,"returnSlots":0},"@OPTIMAL_USAGE_RATIO_21663":{"entryPoint":null,"id":21663,"parameterSlots":0,"returnSlots":0},"@_getOverallBorrowRate_22190":{"entryPoint":2465,"id":22190,"parameterSlots":4,"returnSlots":1},"@calculateInterestRates_22131":{"entryPoint":900,"id":22131,"parameterSlots":1,"returnSlots":3},"@getBaseStableBorrowRate_21843":{"entryPoint":2239,"id":21843,"parameterSlots":0,"returnSlots":1},"@getBaseVariableBorrowRate_21853":{"entryPoint":null,"id":21853,"parameterSlots":0,"returnSlots":1},"@getMaxVariableBorrowRate_21867":{"entryPoint":776,"id":21867,"parameterSlots":0,"returnSlots":1},"@getStableRateExcessOffset_21832":{"entryPoint":null,"id":21832,"parameterSlots":0,"returnSlots":1},"@getStableRateSlope1_21814":{"entryPoint":null,"id":21814,"parameterSlots":0,"returnSlots":1},"@getStableRateSlope2_21823":{"entryPoint":null,"id":21823,"parameterSlots":0,"returnSlots":1},"@getVariableRateSlope1_21796":{"entryPoint":null,"id":21796,"parameterSlots":0,"returnSlots":1},"@getVariableRateSlope2_21805":{"entryPoint":null,"id":21805,"parameterSlots":0,"returnSlots":1},"@percentMul_21119":{"entryPoint":2568,"id":21119,"parameterSlots":2,"returnSlots":1},"@rayDiv_21198":{"entryPoint":2315,"id":21198,"parameterSlots":2,"returnSlots":1},"@rayMul_21186":{"entryPoint":2378,"id":21186,"parameterSlots":2,"returnSlots":1},"@wadToRay_21218":{"entryPoint":2635,"id":21218,"parameterSlots":1,"returnSlots":1},"abi_decode_address":{"entryPoint":2743,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr":{"entryPoint":2779,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":2983,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"allocate_memory":{"entryPoint":2662,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":2959,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":3008,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":2912,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3121:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"146:125:201","statements":[{"nodeType":"YulAssignment","src":"156:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"168:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"179:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"164:3:201"},"nodeType":"YulFunctionCall","src":"164:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"156:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"198:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"213:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"221:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"209:3:201"},"nodeType":"YulFunctionCall","src":"209:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"191:6:201"},"nodeType":"YulFunctionCall","src":"191:74:201"},"nodeType":"YulExpressionStatement","src":"191:74:201"}]},"name":"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"115:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"126:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"137:4:201","type":""}],"src":"14:257:201"},{"body":{"nodeType":"YulBlock","src":"377:76:201","statements":[{"nodeType":"YulAssignment","src":"387:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"399:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"410:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"395:3:201"},"nodeType":"YulFunctionCall","src":"395:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"387:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"429:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"440:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"422:6:201"},"nodeType":"YulFunctionCall","src":"422:25:201"},"nodeType":"YulExpressionStatement","src":"422:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"346:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"357:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"368:4:201","type":""}],"src":"276:177:201"},{"body":{"nodeType":"YulBlock","src":"499:360:201","statements":[{"nodeType":"YulAssignment","src":"509:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"525:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"519:5:201"},"nodeType":"YulFunctionCall","src":"519:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"509:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"537:34:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"559:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"567:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"555:3:201"},"nodeType":"YulFunctionCall","src":"555:16:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"541:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"654:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"675:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"678:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"668:6:201"},"nodeType":"YulFunctionCall","src":"668:88:201"},"nodeType":"YulExpressionStatement","src":"668:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"776:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"779:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"769:6:201"},"nodeType":"YulFunctionCall","src":"769:15:201"},"nodeType":"YulExpressionStatement","src":"769:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"804:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"807:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"797:6:201"},"nodeType":"YulFunctionCall","src":"797:15:201"},"nodeType":"YulExpressionStatement","src":"797:15:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"589:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"601:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"586:2:201"},"nodeType":"YulFunctionCall","src":"586:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"625:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"637:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"622:2:201"},"nodeType":"YulFunctionCall","src":"622:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"583:2:201"},"nodeType":"YulFunctionCall","src":"583:62:201"},"nodeType":"YulIf","src":"580:242:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"838:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"842:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"831:6:201"},"nodeType":"YulFunctionCall","src":"831:22:201"},"nodeType":"YulExpressionStatement","src":"831:22:201"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"488:6:201","type":""}],"src":"458:401:201"},{"body":{"nodeType":"YulBlock","src":"913:147:201","statements":[{"nodeType":"YulAssignment","src":"923:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"945:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"932:12:201"},"nodeType":"YulFunctionCall","src":"932:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"923:5:201"}]},{"body":{"nodeType":"YulBlock","src":"1038:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1047:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1050:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1040:6:201"},"nodeType":"YulFunctionCall","src":"1040:12:201"},"nodeType":"YulExpressionStatement","src":"1040:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"974:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"985:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"992:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"981:3:201"},"nodeType":"YulFunctionCall","src":"981:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"971:2:201"},"nodeType":"YulFunctionCall","src":"971:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"964:6:201"},"nodeType":"YulFunctionCall","src":"964:73:201"},"nodeType":"YulIf","src":"961:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"892:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"903:5:201","type":""}],"src":"864:196:201"},{"body":{"nodeType":"YulBlock","src":"1182:741:201","statements":[{"body":{"nodeType":"YulBlock","src":"1229:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1238:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1241:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1231:6:201"},"nodeType":"YulFunctionCall","src":"1231:12:201"},"nodeType":"YulExpressionStatement","src":"1231:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1203:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1212:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1199:3:201"},"nodeType":"YulFunctionCall","src":"1199:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1224:3:201","type":"","value":"288"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1195:3:201"},"nodeType":"YulFunctionCall","src":"1195:33:201"},"nodeType":"YulIf","src":"1192:53:201"},{"nodeType":"YulVariableDeclaration","src":"1254:30:201","value":{"arguments":[],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"1267:15:201"},"nodeType":"YulFunctionCall","src":"1267:17:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1258:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1300:5:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1320:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1307:12:201"},"nodeType":"YulFunctionCall","src":"1307:23:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1293:6:201"},"nodeType":"YulFunctionCall","src":"1293:38:201"},"nodeType":"YulExpressionStatement","src":"1293:38:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1351:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1358:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1347:3:201"},"nodeType":"YulFunctionCall","src":"1347:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1380:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1391:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1376:3:201"},"nodeType":"YulFunctionCall","src":"1376:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1363:12:201"},"nodeType":"YulFunctionCall","src":"1363:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1340:6:201"},"nodeType":"YulFunctionCall","src":"1340:56:201"},"nodeType":"YulExpressionStatement","src":"1340:56:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1416:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1423:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1412:3:201"},"nodeType":"YulFunctionCall","src":"1412:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1445:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1456:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1441:3:201"},"nodeType":"YulFunctionCall","src":"1441:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1428:12:201"},"nodeType":"YulFunctionCall","src":"1428:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1405:6:201"},"nodeType":"YulFunctionCall","src":"1405:56:201"},"nodeType":"YulExpressionStatement","src":"1405:56:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1481:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1488:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1477:3:201"},"nodeType":"YulFunctionCall","src":"1477:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1510:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1521:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1506:3:201"},"nodeType":"YulFunctionCall","src":"1506:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1493:12:201"},"nodeType":"YulFunctionCall","src":"1493:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1470:6:201"},"nodeType":"YulFunctionCall","src":"1470:56:201"},"nodeType":"YulExpressionStatement","src":"1470:56:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1546:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1553:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1542:3:201"},"nodeType":"YulFunctionCall","src":"1542:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1576:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1587:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1572:3:201"},"nodeType":"YulFunctionCall","src":"1572:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1559:12:201"},"nodeType":"YulFunctionCall","src":"1559:33:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1535:6:201"},"nodeType":"YulFunctionCall","src":"1535:58:201"},"nodeType":"YulExpressionStatement","src":"1535:58:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1613:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1620:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1609:3:201"},"nodeType":"YulFunctionCall","src":"1609:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1643:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1654:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1639:3:201"},"nodeType":"YulFunctionCall","src":"1639:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1626:12:201"},"nodeType":"YulFunctionCall","src":"1626:33:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1602:6:201"},"nodeType":"YulFunctionCall","src":"1602:58:201"},"nodeType":"YulExpressionStatement","src":"1602:58:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1680:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1687:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1676:3:201"},"nodeType":"YulFunctionCall","src":"1676:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1710:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1721:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1706:3:201"},"nodeType":"YulFunctionCall","src":"1706:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1693:12:201"},"nodeType":"YulFunctionCall","src":"1693:33:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1669:6:201"},"nodeType":"YulFunctionCall","src":"1669:58:201"},"nodeType":"YulExpressionStatement","src":"1669:58:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1747:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1754:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1743:3:201"},"nodeType":"YulFunctionCall","src":"1743:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1783:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1794:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1779:3:201"},"nodeType":"YulFunctionCall","src":"1779:19:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1760:18:201"},"nodeType":"YulFunctionCall","src":"1760:39:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1736:6:201"},"nodeType":"YulFunctionCall","src":"1736:64:201"},"nodeType":"YulExpressionStatement","src":"1736:64:201"},{"nodeType":"YulVariableDeclaration","src":"1809:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1819:3:201","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1813:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1842:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1849:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1838:3:201"},"nodeType":"YulFunctionCall","src":"1838:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1877:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1888:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1873:3:201"},"nodeType":"YulFunctionCall","src":"1873:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1854:18:201"},"nodeType":"YulFunctionCall","src":"1854:38:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1831:6:201"},"nodeType":"YulFunctionCall","src":"1831:62:201"},"nodeType":"YulExpressionStatement","src":"1831:62:201"},{"nodeType":"YulAssignment","src":"1902:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1912:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1902:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1148:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1159:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1171:6:201","type":""}],"src":"1065:858:201"},{"body":{"nodeType":"YulBlock","src":"2085:162:201","statements":[{"nodeType":"YulAssignment","src":"2095:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2107:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2118:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2103:3:201"},"nodeType":"YulFunctionCall","src":"2103:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2095:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2137:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"2148:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2130:6:201"},"nodeType":"YulFunctionCall","src":"2130:25:201"},"nodeType":"YulExpressionStatement","src":"2130:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2175:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2186:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2171:3:201"},"nodeType":"YulFunctionCall","src":"2171:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"2191:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2164:6:201"},"nodeType":"YulFunctionCall","src":"2164:34:201"},"nodeType":"YulExpressionStatement","src":"2164:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2218:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2229:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2214:3:201"},"nodeType":"YulFunctionCall","src":"2214:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"2234:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2207:6:201"},"nodeType":"YulFunctionCall","src":"2207:34:201"},"nodeType":"YulExpressionStatement","src":"2207:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2038:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2049:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2057:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2065:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2076:4:201","type":""}],"src":"1928:319:201"},{"body":{"nodeType":"YulBlock","src":"2284:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2301:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2304:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2294:6:201"},"nodeType":"YulFunctionCall","src":"2294:88:201"},"nodeType":"YulExpressionStatement","src":"2294:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2398:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2401:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2391:6:201"},"nodeType":"YulFunctionCall","src":"2391:15:201"},"nodeType":"YulExpressionStatement","src":"2391:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2422:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2425:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2415:6:201"},"nodeType":"YulFunctionCall","src":"2415:15:201"},"nodeType":"YulExpressionStatement","src":"2415:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"2252:184:201"},{"body":{"nodeType":"YulBlock","src":"2489:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"2516:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"2518:16:201"},"nodeType":"YulFunctionCall","src":"2518:18:201"},"nodeType":"YulExpressionStatement","src":"2518:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2505:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"2512:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2508:3:201"},"nodeType":"YulFunctionCall","src":"2508:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2502:2:201"},"nodeType":"YulFunctionCall","src":"2502:13:201"},"nodeType":"YulIf","src":"2499:39:201"},{"nodeType":"YulAssignment","src":"2547:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2558:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"2561:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2554:3:201"},"nodeType":"YulFunctionCall","src":"2554:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"2547:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"2472:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"2475:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"2481:3:201","type":""}],"src":"2441:128:201"},{"body":{"nodeType":"YulBlock","src":"2675:125:201","statements":[{"nodeType":"YulAssignment","src":"2685:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2697:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2708:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2693:3:201"},"nodeType":"YulFunctionCall","src":"2693:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2685:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2727:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2742:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2750:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2738:3:201"},"nodeType":"YulFunctionCall","src":"2738:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2720:6:201"},"nodeType":"YulFunctionCall","src":"2720:74:201"},"nodeType":"YulExpressionStatement","src":"2720:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2644:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2655:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2666:4:201","type":""}],"src":"2574:226:201"},{"body":{"nodeType":"YulBlock","src":"2886:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"2932:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2941:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2944:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2934:6:201"},"nodeType":"YulFunctionCall","src":"2934:12:201"},"nodeType":"YulExpressionStatement","src":"2934:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2907:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2916:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2903:3:201"},"nodeType":"YulFunctionCall","src":"2903:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2928:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2899:3:201"},"nodeType":"YulFunctionCall","src":"2899:32:201"},"nodeType":"YulIf","src":"2896:52:201"},{"nodeType":"YulAssignment","src":"2957:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2973:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2967:5:201"},"nodeType":"YulFunctionCall","src":"2967:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2957:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2852:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2863:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2875:6:201","type":""}],"src":"2805:184:201"},{"body":{"nodeType":"YulBlock","src":"3043:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"3065:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3067:16:201"},"nodeType":"YulFunctionCall","src":"3067:18:201"},"nodeType":"YulExpressionStatement","src":"3067:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3059:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"3062:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3056:2:201"},"nodeType":"YulFunctionCall","src":"3056:8:201"},"nodeType":"YulIf","src":"3053:34:201"},{"nodeType":"YulAssignment","src":"3096:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3108:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"3111:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3104:3:201"},"nodeType":"YulFunctionCall","src":"3104:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"3096:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3025:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"3028:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"3034:4:201","type":""}],"src":"2994:125:201"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function allocate_memory() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 288)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_struct$_CalculateInterestRatesParams_$21617_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 288) { revert(0, 0) }\n        let value := allocate_memory()\n        mstore(value, calldataload(headStart))\n        mstore(add(value, 32), calldataload(add(headStart, 32)))\n        mstore(add(value, 64), calldataload(add(headStart, 64)))\n        mstore(add(value, 96), calldataload(add(headStart, 96)))\n        mstore(add(value, 128), calldataload(add(headStart, 128)))\n        mstore(add(value, 160), calldataload(add(headStart, 160)))\n        mstore(add(value, 192), calldataload(add(headStart, 192)))\n        mstore(add(value, 224), abi_decode_address(add(headStart, 224)))\n        let _1 := 256\n        mstore(add(value, _1), abi_decode_address(add(headStart, _1)))\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"21663":[{"length":32,"start":449},{"length":32,"start":1375},{"length":32,"start":1457},{"length":32,"start":1731},{"length":32,"start":1848}],"21666":[{"length":32,"start":488},{"length":32,"start":1946},{"length":32,"start":2028}],"21669":[{"length":32,"start":581},{"length":32,"start":1424}],"21672":[{"length":32,"start":742},{"length":32,"start":1995}],"21675":[{"length":32,"start":244}],"21677":[{"length":32,"start":408},{"length":32,"start":849},{"length":32,"start":1018}],"21679":[{"length":32,"start":322},{"length":32,"start":816},{"length":32,"start":1663},{"length":32,"start":1886},{"length":32,"start":2279}],"21681":[{"length":32,"start":701},{"length":32,"start":780},{"length":32,"start":1620}],"21683":[{"length":32,"start":663},{"length":32,"start":1559},{"length":32,"start":1772}],"21685":[{"length":32,"start":370},{"length":32,"start":1516}],"21687":[{"length":32,"start":2246}],"21689":[{"length":32,"start":625},{"length":32,"start":2081}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063a58987091161008c578063bc62690811610066578063bc6269081461026f578063d5cd739114610295578063f4202409146102bb578063fe5fd698146102e157600080fd5b8063a589870914610212578063a9c622f814610240578063acd786861461026757600080fd5b806334762ca5116100c857806334762ca51461019657806354c365c6146101bc5780636fb92589146101e357806380031e371461020a57600080fd5b80630542975c146100ef5780630b3429a21461014057806314e32da414610170575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b604051908152602001610137565b7f0000000000000000000000000000000000000000000000000000000000000000610162565b7f0000000000000000000000000000000000000000000000000000000000000000610162565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b610162610308565b610225610220366004610adb565b610384565b60408051938452602084019290925290820152606001610137565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b6101626108bf565b7f0000000000000000000000000000000000000000000000000000000000000000610162565b7f0000000000000000000000000000000000000000000000000000000000000000610162565b7f0000000000000000000000000000000000000000000000000000000000000000610162565b6101627f000000000000000000000000000000000000000000000000000000000000000081565b60007f00000000000000000000000000000000000000000000000000000000000000006103757f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610b8f565b61037f9190610b8f565b905090565b60008060006103d86040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b846080015185606001516103ec9190610b8f565b6020820152600060808201527f000000000000000000000000000000000000000000000000000000000000000060408201526104266108bf565b606082015260208101511561055d57602081015160608601516104489161090b565b60e08083019190915260408087015160208801519288015161010089015192517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015291939216906370a0823190602401602060405180830381865afa1580156104d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f79190610ba7565b6105019190610b8f565b61050b9190610bc0565b808252602082015161051c91610b8f565b610100820181905260208201516105329161090b565b60a082015284516101008201516105579161054c91610b8f565b60208301519061090b565b60c08201525b7f00000000000000000000000000000000000000000000000000000000000000008160a0015111156106be5760006105e57f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008460a001516105df9190610bc0565b9061090b565b90506106117f00000000000000000000000000000000000000000000000000000000000000008261094a565b61063b907f0000000000000000000000000000000000000000000000000000000000000000610b8f565b8260600181815161064c9190610b8f565b9052506106797f00000000000000000000000000000000000000000000000000000000000000008261094a565b6106a3907f0000000000000000000000000000000000000000000000000000000000000000610b8f565b826040018181516106b49190610b8f565b9052506107989050565b6107197f00000000000000000000000000000000000000000000000000000000000000006105df8360a001517f000000000000000000000000000000000000000000000000000000000000000061094a90919063ffffffff16565b8160600181815161072a9190610b8f565b90525060a0810151610783907f0000000000000000000000000000000000000000000000000000000000000000906105df907f00000000000000000000000000000000000000000000000000000000000000009061094a565b816040018181516107949190610b8f565b9052505b7f00000000000000000000000000000000000000000000000000000000000000008160e00151111561085c57600061081a7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008460e001516105df9190610bc0565b90506108467f00000000000000000000000000000000000000000000000000000000000000008261094a565b826060018181516108579190610b8f565b905250505b6108a18560c001516127106108719190610bc0565b61089b8360c0015161089589606001518a6080015187604001518c60a001516109a1565b9061094a565b90610a08565b60808201819052606082015160409092015190969195509350915050565b600061037f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610b8f565b600081156b033b2e3c9fd0803ce80000006002840419048411171561092f57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761097f57600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b6000806109ae8587610b8f565b9050806109bf576000915050610a00565b60006109ce8561089588610a4b565b905060006109df856108958a610a4b565b905060006109f96109ef85610a4b565b6105df8486610b8f565b9450505050505b949350505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7783900484111517610a3d57600080fd5b506127109102611388010490565b633b9aca008181029081048214610a6157600080fd5b919050565b604051610120810167ffffffffffffffff81118282101715610ab1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a6157600080fd5b60006101208284031215610aee57600080fd5b610af6610a66565b823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c0820152610b4260e08401610ab7565b60e0820152610100610b55818501610ab7565b908201529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610ba257610ba2610b60565b500190565b600060208284031215610bb957600080fd5b5051919050565b600082821015610bd257610bd2610b60565b50039056fea2646970667358221220886d4169a8ff4d03f357616a33371db68a6ba97fe5f41c287fc40215d7f56b4364736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xA5898709 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xBC626908 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xBC626908 EQ PUSH2 0x26F JUMPI DUP1 PUSH4 0xD5CD7391 EQ PUSH2 0x295 JUMPI DUP1 PUSH4 0xF4202409 EQ PUSH2 0x2BB JUMPI DUP1 PUSH4 0xFE5FD698 EQ PUSH2 0x2E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA5898709 EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0xA9C622F8 EQ PUSH2 0x240 JUMPI DUP1 PUSH4 0xACD78686 EQ PUSH2 0x267 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x34762CA5 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x34762CA5 EQ PUSH2 0x196 JUMPI DUP1 PUSH4 0x54C365C6 EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0x6FB92589 EQ PUSH2 0x1E3 JUMPI DUP1 PUSH4 0x80031E37 EQ PUSH2 0x20A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x542975C EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0xB3429A2 EQ PUSH2 0x140 JUMPI DUP1 PUSH4 0x14E32DA4 EQ PUSH2 0x170 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x116 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH32 0x0 JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x137 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x162 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x162 JUMP JUMPDEST PUSH2 0x162 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x162 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x308 JUMP JUMPDEST PUSH2 0x225 PUSH2 0x220 CALLDATASIZE PUSH1 0x4 PUSH2 0xADB JUMP JUMPDEST PUSH2 0x384 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x137 JUMP JUMPDEST PUSH2 0x162 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x162 PUSH2 0x8BF JUMP JUMPDEST PUSH32 0x0 PUSH2 0x162 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x162 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x162 JUMP JUMPDEST PUSH2 0x162 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH2 0x375 PUSH32 0x0 PUSH32 0x0 PUSH2 0xB8F JUMP JUMPDEST PUSH2 0x37F SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3D8 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE 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 DUP5 PUSH1 0x80 ADD MLOAD DUP6 PUSH1 0x60 ADD MLOAD PUSH2 0x3EC SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x80 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x426 PUSH2 0x8BF JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO PUSH2 0x55D JUMPI PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD PUSH2 0x448 SWAP2 PUSH2 0x90B JUMP JUMPDEST PUSH1 0xE0 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 DUP8 ADD MLOAD PUSH1 0x20 DUP9 ADD MLOAD SWAP3 DUP9 ADD MLOAD PUSH2 0x100 DUP10 ADD MLOAD SWAP3 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP4 SWAP3 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4D3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4F7 SWAP2 SWAP1 PUSH2 0xBA7 JUMP JUMPDEST PUSH2 0x501 SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST PUSH2 0x50B SWAP2 SWAP1 PUSH2 0xBC0 JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x51C SWAP2 PUSH2 0xB8F JUMP JUMPDEST PUSH2 0x100 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x532 SWAP2 PUSH2 0x90B JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE DUP5 MLOAD PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x557 SWAP2 PUSH2 0x54C SWAP2 PUSH2 0xB8F JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MLOAD SWAP1 PUSH2 0x90B JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE JUMPDEST PUSH32 0x0 DUP2 PUSH1 0xA0 ADD MLOAD GT ISZERO PUSH2 0x6BE JUMPI PUSH1 0x0 PUSH2 0x5E5 PUSH32 0x0 PUSH32 0x0 DUP5 PUSH1 0xA0 ADD MLOAD PUSH2 0x5DF SWAP2 SWAP1 PUSH2 0xBC0 JUMP JUMPDEST SWAP1 PUSH2 0x90B JUMP JUMPDEST SWAP1 POP PUSH2 0x611 PUSH32 0x0 DUP3 PUSH2 0x94A JUMP JUMPDEST PUSH2 0x63B SWAP1 PUSH32 0x0 PUSH2 0xB8F JUMP JUMPDEST DUP3 PUSH1 0x60 ADD DUP2 DUP2 MLOAD PUSH2 0x64C SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x679 PUSH32 0x0 DUP3 PUSH2 0x94A JUMP JUMPDEST PUSH2 0x6A3 SWAP1 PUSH32 0x0 PUSH2 0xB8F JUMP JUMPDEST DUP3 PUSH1 0x40 ADD DUP2 DUP2 MLOAD PUSH2 0x6B4 SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST SWAP1 MSTORE POP PUSH2 0x798 SWAP1 POP JUMP JUMPDEST PUSH2 0x719 PUSH32 0x0 PUSH2 0x5DF DUP4 PUSH1 0xA0 ADD MLOAD PUSH32 0x0 PUSH2 0x94A SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP2 PUSH1 0x60 ADD DUP2 DUP2 MLOAD PUSH2 0x72A SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST SWAP1 MSTORE POP PUSH1 0xA0 DUP2 ADD MLOAD PUSH2 0x783 SWAP1 PUSH32 0x0 SWAP1 PUSH2 0x5DF SWAP1 PUSH32 0x0 SWAP1 PUSH2 0x94A JUMP JUMPDEST DUP2 PUSH1 0x40 ADD DUP2 DUP2 MLOAD PUSH2 0x794 SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST PUSH32 0x0 DUP2 PUSH1 0xE0 ADD MLOAD GT ISZERO PUSH2 0x85C JUMPI PUSH1 0x0 PUSH2 0x81A PUSH32 0x0 PUSH32 0x0 DUP5 PUSH1 0xE0 ADD MLOAD PUSH2 0x5DF SWAP2 SWAP1 PUSH2 0xBC0 JUMP JUMPDEST SWAP1 POP PUSH2 0x846 PUSH32 0x0 DUP3 PUSH2 0x94A JUMP JUMPDEST DUP3 PUSH1 0x60 ADD DUP2 DUP2 MLOAD PUSH2 0x857 SWAP2 SWAP1 PUSH2 0xB8F JUMP JUMPDEST SWAP1 MSTORE POP POP JUMPDEST PUSH2 0x8A1 DUP6 PUSH1 0xC0 ADD MLOAD PUSH2 0x2710 PUSH2 0x871 SWAP2 SWAP1 PUSH2 0xBC0 JUMP JUMPDEST PUSH2 0x89B DUP4 PUSH1 0xC0 ADD MLOAD PUSH2 0x895 DUP10 PUSH1 0x60 ADD MLOAD DUP11 PUSH1 0x80 ADD MLOAD DUP8 PUSH1 0x40 ADD MLOAD DUP13 PUSH1 0xA0 ADD MLOAD PUSH2 0x9A1 JUMP JUMPDEST SWAP1 PUSH2 0x94A JUMP JUMPDEST SWAP1 PUSH2 0xA08 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x40 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP7 SWAP2 SWAP6 POP SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37F PUSH32 0x0 PUSH32 0x0 PUSH2 0xB8F JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x92F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x97F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x9AE DUP6 DUP8 PUSH2 0xB8F JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x9BF JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0xA00 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9CE DUP6 PUSH2 0x895 DUP9 PUSH2 0xA4B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9DF DUP6 PUSH2 0x895 DUP11 PUSH2 0xA4B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9F9 PUSH2 0x9EF DUP6 PUSH2 0xA4B JUMP JUMPDEST PUSH2 0x5DF DUP5 DUP7 PUSH2 0xB8F JUMP JUMPDEST SWAP5 POP POP POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0xA3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH4 0x3B9ACA00 DUP2 DUP2 MUL SWAP1 DUP2 DIV DUP3 EQ PUSH2 0xA61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xAB1 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xA61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAF6 PUSH2 0xA66 JUMP JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP4 ADD CALLDATALOAD PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0xB42 PUSH1 0xE0 DUP5 ADD PUSH2 0xAB7 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0xB55 DUP2 DUP6 ADD PUSH2 0xAB7 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0xBA2 JUMPI PUSH2 0xBA2 PUSH2 0xB60 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xBB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0xBD2 JUMPI PUSH2 0xBD2 PUSH2 0xB60 JUMP JUMPDEST POP SUB SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP9 PUSH14 0x4169A8FF4D03F357616A33371DB6 DUP11 PUSH12 0xA97FE5F41C287FC40215D7F5 PUSH12 0x4364736F6C634300080A0033 ","sourceMap":"1117:9169:93:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1686:58;;;;;;;;221:42:201;209:55;;;191:74;;179:2;164:18;1686:58:93;;;;;;;;4905:102;4983:19;4905:102;;;422:25:201;;;410:2;395:18;4905:102:93;276:177:201;5360:98:93;5436:17;5360:98;;5847:119;5938:23;5847:119;;1313:44;;;;;1409:59;;;;;6017:162;;;:::i;6574:2504::-;;;;;;:::i;:::-;;:::i;:::-;;;;2130:25:201;;;2186:2;2171:18;;2164:34;;;;2214:18;;;2207:34;2118:2;2103:18;6574:2504:93;1928:319:201;1520:47:93;;;;;5670:126;;;:::i;5509:110::-;5591:23;5509:110;;5211:98;5287:17;5211:98;;5058:102;5136:19;5058:102;;1619:62;;;;;6017:162;6085:7;6155:19;6107:45;6133:19;6107:23;:45;:::i;:::-;:67;;;;:::i;:::-;6100:74;;6017:162;:::o;6574:2504::-;6698:7;6707;6716;6731:38;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6731:38:93;6818:6;:24;;;6793:6;:22;;;:49;;;;:::i;:::-;6776:14;;;:66;6877:1;6849:25;;;:29;6917:23;6884:30;;;:56;6977:25;:23;:25::i;:::-;6946:28;;;:56;7013:14;;;;:19;7009:557;;7102:14;;;;7072:22;;;;:45;;:29;:45::i;:::-;7042:27;;;;:75;;;;7249:21;;;;;7217;;;;7166:14;;;;7192:13;;;;7159:47;;;;;:32;209:55:201;;;7159:47:93;;;191:74:201;7249:21:93;;7217;7159:32;;;;164:18:201;;7159:47:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:79;;;;:::i;:::-;:111;;;;:::i;:::-;7125:145;;;7339:14;;;;7313:40;;;:::i;:::-;7279:31;;;:74;;;7385:14;;;;:54;;:21;:54::i;:::-;7361:21;;;:78;7536:15;;7502:31;;;;7471:88;;7502:49;;;:::i;:::-;7471:14;;;;;:21;:88::i;:::-;7447:21;;;:112;7009:557;7600:19;7576:4;:21;;;:43;7572:725;;;7629:30;7662:92;7724:22;7687:19;7663:4;:21;;;:43;;;;:::i;:::-;7662:52;;:92::i;:::-;7629:125;-1:-1:-1;7831:48:93;:17;7629:125;7831:24;:48::i;:::-;7803:76;;:17;:76;:::i;:::-;7763:4;:28;;:116;;;;;;;:::i;:::-;;;-1:-1:-1;7960:50:93;:19;7987:22;7960:26;:50::i;:::-;7930:80;;:19;:80;:::i;:::-;7888:4;:30;;:122;;;;;;;:::i;:::-;;;-1:-1:-1;7572:725:93;;-1:-1:-1;7572:725:93;;8063:91;8127:19;8063:47;8088:4;:21;;;8063:17;:24;;:47;;;;:::i;:91::-;8031:4;:28;;:123;;;;;;;:::i;:::-;;;-1:-1:-1;8224:21:93;;;;8197:93;;8263:19;;8197:49;;:19;;:26;:49::i;:93::-;8163:4;:30;;:127;;;;;;;:::i;:::-;;;-1:-1:-1;7572:725:93;8337:34;8307:4;:27;;;:64;8303:330;;;8381:29;8413:120;8495:37;8452:34;8414:4;:27;;;:72;;;;:::i;8413:120::-;8381:152;-1:-1:-1;8573:53:93;:23;8381:152;8573:30;:53::i;:::-;8541:4;:28;;:85;;;;;;;:::i;:::-;;;-1:-1:-1;;8303:330:93;8667:279;8918:6;:20;;;524:3:89;8883:55:93;;;;:::i;:::-;8667:195;8840:4;:21;;;8667:165;8696:6;:22;;;8726:6;:24;;;8758:4;:30;;;8796:6;:30;;;8667:21;:165::i;:::-;:172;;:195::i;:::-;:206;;:279::i;:::-;8639:25;;;:307;;;9001:28;;;;9037:30;;;;;8639:307;;9001:28;;-1:-1:-1;9037:30:93;-1:-1:-1;6574:2504:93;-1:-1:-1;;6574:2504:93:o;5670:126::-;5726:7;5748:43;5770:21;5748:19;:43;:::i;2840:322:90:-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:90;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;2253:319::-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:90;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;9622:662:93:-;9823:7;;9858:35;9876:17;9858:15;:35;:::i;:::-;9838:55;-1:-1:-1;9904:14:93;9900:28;;9927:1;9920:8;;;;;9900:28;9935;9966:62;10002:25;9966:28;:17;:26;:28::i;:62::-;9935:93;;10035:26;10064:65;10098:30;10064:26;:15;:24;:26::i;:65::-;10035:94;;10136:25;10164:84;10222:20;:9;:18;:20::i;:::-;10165:41;10188:18;10165:20;:41;:::i;10164:84::-;10136:112;-1:-1:-1;;;;;9622:662:93;;;;;;;:::o;1005:496:89:-;1083:14;1248:18;;1299:35;1295:52;;;1285:63;;1278:71;1234:125;1215:183;;1388:1;1385;1378:12;1215:183;-1:-1:-1;1473:17:89;1424:22;;1448;1420:51;1416:75;;1005:496::o;3901:247:90:-;4046:13;4039:21;;;;4081;;4078:28;;4068:70;;4128:1;4125;4118:12;4068:70;3901:247;;;:::o;458:401:201:-;525:2;519:9;567:3;555:16;;601:18;586:34;;622:22;;;583:62;580:242;;;678:77;675:1;668:88;779:4;776:1;769:15;807:4;804:1;797:15;580:242;838:2;831:22;458:401;:::o;864:196::-;932:20;;992:42;981:54;;971:65;;961:93;;1050:1;1047;1040:12;1065:858;1171:6;1224:3;1212:9;1203:7;1199:23;1195:33;1192:53;;;1241:1;1238;1231:12;1192:53;1267:17;;:::i;:::-;1320:9;1307:23;1300:5;1293:38;1391:2;1380:9;1376:18;1363:32;1358:2;1351:5;1347:14;1340:56;1456:2;1445:9;1441:18;1428:32;1423:2;1416:5;1412:14;1405:56;1521:2;1510:9;1506:18;1493:32;1488:2;1481:5;1477:14;1470:56;1587:3;1576:9;1572:19;1559:33;1553:3;1546:5;1542:15;1535:58;1654:3;1643:9;1639:19;1626:33;1620:3;1613:5;1609:15;1602:58;1721:3;1710:9;1706:19;1693:33;1687:3;1680:5;1676:15;1669:58;1760:39;1794:3;1783:9;1779:19;1760:39;:::i;:::-;1754:3;1747:5;1743:15;1736:64;1819:3;1854:38;1888:2;1877:9;1873:18;1854:38;:::i;:::-;1838:14;;;1831:62;1842:5;1065:858;-1:-1:-1;;;1065:858:201:o;2252:184::-;2304:77;2301:1;2294:88;2401:4;2398:1;2391:15;2425:4;2422:1;2415:15;2441:128;2481:3;2512:1;2508:6;2505:1;2502:13;2499:39;;;2518:18;;:::i;:::-;-1:-1:-1;2554:9:201;;2441:128::o;2805:184::-;2875:6;2928:2;2916:9;2907:7;2903:23;2899:32;2896:52;;;2944:1;2941;2934:12;2896:52;-1:-1:-1;2967:16:201;;2805:184;-1:-1:-1;2805:184:201:o;2994:125::-;3034:4;3062:1;3059;3056:8;3053:34;;;3067:18;;:::i;:::-;-1:-1:-1;3104:9:201;;2994:125::o"},"gasEstimates":{"creation":{"codeDepositCost":"617000","executionCost":"infinite","totalCost":"infinite"},"external":{"ADDRESSES_PROVIDER()":"infinite","MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()":"infinite","MAX_EXCESS_USAGE_RATIO()":"infinite","OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()":"infinite","OPTIMAL_USAGE_RATIO()":"infinite","calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":"infinite","getBaseStableBorrowRate()":"infinite","getBaseVariableBorrowRate()":"infinite","getMaxVariableBorrowRate()":"infinite","getStableRateExcessOffset()":"infinite","getStableRateSlope1()":"infinite","getStableRateSlope2()":"infinite","getVariableRateSlope1()":"infinite","getVariableRateSlope2()":"infinite"},"internal":{"_getOverallBorrowRate(uint256,uint256,uint256,uint256)":"infinite"}},"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()":"fe5fd698","MAX_EXCESS_USAGE_RATIO()":"a9c622f8","OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()":"6fb92589","OPTIMAL_USAGE_RATIO()":"54c365c6","calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":"a5898709","getBaseStableBorrowRate()":"acd78686","getBaseVariableBorrowRate()":"34762ca5","getMaxVariableBorrowRate()":"80031e37","getStableRateExcessOffset()":"bc626908","getStableRateSlope1()":"d5cd7391","getStableRateSlope2()":"14e32da4","getVariableRateSlope1()":"0b3429a2","getVariableRateSlope2()":"f4202409"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"optimalUsageRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseVariableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableRateSlope1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableRateSlope2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateSlope1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateSlope2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseStableRateOffset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateExcessOffset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"optimalStableToTotalDebtRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_EXCESS_USAGE_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMAL_USAGE_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"unbacked\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityAdded\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidityTaken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"averageStableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"aToken\",\"type\":\"address\"}],\"internalType\":\"struct DataTypes.CalculateInterestRatesParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"calculateInterestRates\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBaseStableBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBaseVariableBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxVariableBorrowRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStableRateExcessOffset\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStableRateSlope1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStableRateSlope2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVariableRateSlope1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVariableRateSlope2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"The model of interest rate is based on 2 slopes, one before the `OPTIMAL_USAGE_RATIO` point of usage and another from that one to 100%. - An instance of this same contract, can't be used across different Aave markets, due to the caching   of the PoolAddressesProvider\",\"kind\":\"dev\",\"methods\":{\"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))\":{\"params\":{\"params\":\"The parameters needed to calculate interest rates\"},\"returns\":{\"_0\":\"liquidityRate The liquidity rate expressed in rays\",\"_1\":\"stableBorrowRate The stable borrow rate expressed in rays\",\"_2\":\"variableBorrowRate The variable borrow rate expressed in rays\"}},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"baseStableRateOffset\":\"The premium on top of variable rate for base stable borrowing rate\",\"baseVariableBorrowRate\":\"The base variable borrow rate\",\"optimalStableToTotalDebtRatio\":\"The optimal stable debt to total debt ratio of the reserve\",\"optimalUsageRatio\":\"The optimal usage ratio\",\"provider\":\"The address of the PoolAddressesProvider contract\",\"stableRateExcessOffset\":\"The premium on top of stable rate when there stable debt surpass the threshold\",\"stableRateSlope1\":\"The stable rate slope below optimal usage ratio\",\"stableRateSlope2\":\"The stable rate slope above optimal usage ratio\",\"variableRateSlope1\":\"The variable rate slope below optimal usage ratio\",\"variableRateSlope2\":\"The variable rate slope above optimal usage ratio\"}},\"getBaseStableBorrowRate()\":{\"returns\":{\"_0\":\"The base stable borrow rate, expressed in ray\"}},\"getBaseVariableBorrowRate()\":{\"returns\":{\"_0\":\"The base variable borrow rate, expressed in ray\"}},\"getMaxVariableBorrowRate()\":{\"returns\":{\"_0\":\"The maximum variable borrow rate, expressed in ray\"}},\"getStableRateExcessOffset()\":{\"details\":\"It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\",\"returns\":{\"_0\":\"The stable rate excess offset, expressed in ray\"}},\"getStableRateSlope1()\":{\"details\":\"It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\",\"returns\":{\"_0\":\"The stable rate slope, expressed in ray\"}},\"getStableRateSlope2()\":{\"details\":\"It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\",\"returns\":{\"_0\":\"The stable rate slope, expressed in ray\"}},\"getVariableRateSlope1()\":{\"details\":\"It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\",\"returns\":{\"_0\":\"The variable rate slope, expressed in ray\"}},\"getVariableRateSlope2()\":{\"details\":\"It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\",\"returns\":{\"_0\":\"The variable rate slope, expressed in ray\"}}},\"stateVariables\":{\"ADDRESSES_PROVIDER\":{\"return\":\"The address of the PoolAddressesProvider contract\",\"returns\":{\"_0\":\"The address of the PoolAddressesProvider contract\"}},\"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO\":{\"details\":\"It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations)\",\"return\":\"The max excess stable to total debt ratio, expressed in ray.\",\"returns\":{\"_0\":\"The max excess stable to total debt ratio, expressed in ray.\"}},\"MAX_EXCESS_USAGE_RATIO\":{\"details\":\"It's always equal to 1-optimal usage ratio (added as constant for gas optimizations)\",\"return\":\"The max excess usage ratio, expressed in ray.\",\"returns\":{\"_0\":\"The max excess usage ratio, expressed in ray.\"}},\"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\":{\"return\":\"The optimal stable to total debt ratio, expressed in ray.\",\"returns\":{\"_0\":\"The optimal stable to total debt ratio, expressed in ray.\"}},\"OPTIMAL_USAGE_RATIO\":{\"return\":\"The optimal usage ratio, expressed in ray.\",\"returns\":{\"_0\":\"The optimal usage ratio, expressed in ray.\"}}},\"title\":\"DefaultReserveInterestRateStrategy contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the address of the PoolAddressesProvider\"},\"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()\":{\"notice\":\"Returns the excess stable debt ratio above the optimal.\"},\"MAX_EXCESS_USAGE_RATIO()\":{\"notice\":\"Returns the excess usage ratio above the optimal.\"},\"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()\":{\"notice\":\"Returns the optimal stable to total debt ratio of the reserve.\"},\"OPTIMAL_USAGE_RATIO()\":{\"notice\":\"Returns the usage ratio at which the pool aims to obtain most competitive borrow rates.\"},\"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))\":{\"notice\":\"Calculates the interest rates depending on the reserve's state and configurations\"},\"getBaseStableBorrowRate()\":{\"notice\":\"Returns the base stable borrow rate\"},\"getBaseVariableBorrowRate()\":{\"notice\":\"Returns the base variable borrow rate\"},\"getMaxVariableBorrowRate()\":{\"notice\":\"Returns the maximum variable borrow rate\"},\"getStableRateExcessOffset()\":{\"notice\":\"Returns the stable rate excess offset\"},\"getStableRateSlope1()\":{\"notice\":\"Returns the stable rate slope below optimal usage ratio\"},\"getStableRateSlope2()\":{\"notice\":\"Returns the stable rate slope above optimal usage ratio\"},\"getVariableRateSlope1()\":{\"notice\":\"Returns the variable rate slope below optimal usage ratio\"},\"getVariableRateSlope2()\":{\"notice\":\"Returns the variable rate slope above optimal usage ratio\"}},\"notice\":\"Implements the calculation of the interest rates depending on the reserve state\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol\":\"DefaultReserveInterestRateStrategy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IDefaultInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IReserveInterestRateStrategy} from './IReserveInterestRateStrategy.sol';\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IDefaultInterestRateStrategy\\n * @author Aave\\n * @notice Defines the basic interface of the DefaultReserveInterestRateStrategy\\n */\\ninterface IDefaultInterestRateStrategy is IReserveInterestRateStrategy {\\n  /**\\n   * @notice Returns the usage ratio at which the pool aims to obtain most competitive borrow rates.\\n   * @return The optimal usage ratio, expressed in ray.\\n   */\\n  function OPTIMAL_USAGE_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the optimal stable to total debt ratio of the reserve.\\n   * @return The optimal stable to total debt ratio, expressed in ray.\\n   */\\n  function OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the excess usage ratio above the optimal.\\n   * @dev It's always equal to 1-optimal usage ratio (added as constant for gas optimizations)\\n   * @return The max excess usage ratio, expressed in ray.\\n   */\\n  function MAX_EXCESS_USAGE_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the excess stable debt ratio above the optimal.\\n   * @dev It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations)\\n   * @return The max excess stable to total debt ratio, expressed in ray.\\n   */\\n  function MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the variable rate slope below optimal usage ratio\\n   * @dev It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\\n   * @return The variable rate slope, expressed in ray\\n   */\\n  function getVariableRateSlope1() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the variable rate slope above optimal usage ratio\\n   * @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\\n   * @return The variable rate slope, expressed in ray\\n   */\\n  function getVariableRateSlope2() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate slope below optimal usage ratio\\n   * @dev It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\\n   * @return The stable rate slope, expressed in ray\\n   */\\n  function getStableRateSlope1() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate slope above optimal usage ratio\\n   * @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\\n   * @return The stable rate slope, expressed in ray\\n   */\\n  function getStableRateSlope2() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate excess offset\\n   * @dev It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\\n   * @return The stable rate excess offset, expressed in ray\\n   */\\n  function getStableRateExcessOffset() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the base stable borrow rate\\n   * @return The base stable borrow rate, expressed in ray\\n   */\\n  function getBaseStableBorrowRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the base variable borrow rate\\n   * @return The base variable borrow rate, expressed in ray\\n   */\\n  function getBaseVariableBorrowRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the maximum variable borrow rate\\n   * @return The maximum variable borrow rate, expressed in ray\\n   */\\n  function getMaxVariableBorrowRate() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xb7351f5dc779d86fc6d4aafb2fe48622b2dae3a00724923b8cd92b5c676ca893\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\\nimport {PercentageMath} from '../libraries/math/PercentageMath.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {IDefaultInterestRateStrategy} from '../../interfaces/IDefaultInterestRateStrategy.sol';\\nimport {IReserveInterestRateStrategy} from '../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\n\\n/**\\n * @title DefaultReserveInterestRateStrategy contract\\n * @author Aave\\n * @notice Implements the calculation of the interest rates depending on the reserve state\\n * @dev The model of interest rate is based on 2 slopes, one before the `OPTIMAL_USAGE_RATIO`\\n * point of usage and another from that one to 100%.\\n * - An instance of this same contract, can't be used across different Aave markets, due to the caching\\n *   of the PoolAddressesProvider\\n */\\ncontract DefaultReserveInterestRateStrategy is IDefaultInterestRateStrategy {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  uint256 public immutable OPTIMAL_USAGE_RATIO;\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  uint256 public immutable OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO;\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  uint256 public immutable MAX_EXCESS_USAGE_RATIO;\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  uint256 public immutable MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO;\\n\\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\\n\\n  // Base variable borrow rate when usage rate = 0. Expressed in ray\\n  uint256 internal immutable _baseVariableBorrowRate;\\n\\n  // Slope of the variable interest curve when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO. Expressed in ray\\n  uint256 internal immutable _variableRateSlope1;\\n\\n  // Slope of the variable interest curve when usage ratio > OPTIMAL_USAGE_RATIO. Expressed in ray\\n  uint256 internal immutable _variableRateSlope2;\\n\\n  // Slope of the stable interest curve when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO. Expressed in ray\\n  uint256 internal immutable _stableRateSlope1;\\n\\n  // Slope of the stable interest curve when usage ratio > OPTIMAL_USAGE_RATIO. Expressed in ray\\n  uint256 internal immutable _stableRateSlope2;\\n\\n  // Premium on top of `_variableRateSlope1` for base stable borrowing rate\\n  uint256 internal immutable _baseStableRateOffset;\\n\\n  // Additional premium applied to stable rate when stable debt surpass `OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO`\\n  uint256 internal immutable _stableRateExcessOffset;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param provider The address of the PoolAddressesProvider contract\\n   * @param optimalUsageRatio The optimal usage ratio\\n   * @param baseVariableBorrowRate The base variable borrow rate\\n   * @param variableRateSlope1 The variable rate slope below optimal usage ratio\\n   * @param variableRateSlope2 The variable rate slope above optimal usage ratio\\n   * @param stableRateSlope1 The stable rate slope below optimal usage ratio\\n   * @param stableRateSlope2 The stable rate slope above optimal usage ratio\\n   * @param baseStableRateOffset The premium on top of variable rate for base stable borrowing rate\\n   * @param stableRateExcessOffset The premium on top of stable rate when there stable debt surpass the threshold\\n   * @param optimalStableToTotalDebtRatio The optimal stable debt to total debt ratio of the reserve\\n   */\\n  constructor(\\n    IPoolAddressesProvider provider,\\n    uint256 optimalUsageRatio,\\n    uint256 baseVariableBorrowRate,\\n    uint256 variableRateSlope1,\\n    uint256 variableRateSlope2,\\n    uint256 stableRateSlope1,\\n    uint256 stableRateSlope2,\\n    uint256 baseStableRateOffset,\\n    uint256 stableRateExcessOffset,\\n    uint256 optimalStableToTotalDebtRatio\\n  ) {\\n    require(WadRayMath.RAY >= optimalUsageRatio, Errors.INVALID_OPTIMAL_USAGE_RATIO);\\n    require(\\n      WadRayMath.RAY >= optimalStableToTotalDebtRatio,\\n      Errors.INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\\n    );\\n    OPTIMAL_USAGE_RATIO = optimalUsageRatio;\\n    MAX_EXCESS_USAGE_RATIO = WadRayMath.RAY - optimalUsageRatio;\\n    OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = optimalStableToTotalDebtRatio;\\n    MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO = WadRayMath.RAY - optimalStableToTotalDebtRatio;\\n    ADDRESSES_PROVIDER = provider;\\n    _baseVariableBorrowRate = baseVariableBorrowRate;\\n    _variableRateSlope1 = variableRateSlope1;\\n    _variableRateSlope2 = variableRateSlope2;\\n    _stableRateSlope1 = stableRateSlope1;\\n    _stableRateSlope2 = stableRateSlope2;\\n    _baseStableRateOffset = baseStableRateOffset;\\n    _stableRateExcessOffset = stableRateExcessOffset;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getVariableRateSlope1() external view returns (uint256) {\\n    return _variableRateSlope1;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getVariableRateSlope2() external view returns (uint256) {\\n    return _variableRateSlope2;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getStableRateSlope1() external view returns (uint256) {\\n    return _stableRateSlope1;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getStableRateSlope2() external view returns (uint256) {\\n    return _stableRateSlope2;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getStableRateExcessOffset() external view returns (uint256) {\\n    return _stableRateExcessOffset;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getBaseStableBorrowRate() public view returns (uint256) {\\n    return _variableRateSlope1 + _baseStableRateOffset;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getBaseVariableBorrowRate() external view override returns (uint256) {\\n    return _baseVariableBorrowRate;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getMaxVariableBorrowRate() external view override returns (uint256) {\\n    return _baseVariableBorrowRate + _variableRateSlope1 + _variableRateSlope2;\\n  }\\n\\n  struct CalcInterestRatesLocalVars {\\n    uint256 availableLiquidity;\\n    uint256 totalDebt;\\n    uint256 currentVariableBorrowRate;\\n    uint256 currentStableBorrowRate;\\n    uint256 currentLiquidityRate;\\n    uint256 borrowUsageRatio;\\n    uint256 supplyUsageRatio;\\n    uint256 stableToTotalDebtRatio;\\n    uint256 availableLiquidityPlusDebt;\\n  }\\n\\n  /// @inheritdoc IReserveInterestRateStrategy\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) public view override returns (uint256, uint256, uint256) {\\n    CalcInterestRatesLocalVars memory vars;\\n\\n    vars.totalDebt = params.totalStableDebt + params.totalVariableDebt;\\n\\n    vars.currentLiquidityRate = 0;\\n    vars.currentVariableBorrowRate = _baseVariableBorrowRate;\\n    vars.currentStableBorrowRate = getBaseStableBorrowRate();\\n\\n    if (vars.totalDebt != 0) {\\n      vars.stableToTotalDebtRatio = params.totalStableDebt.rayDiv(vars.totalDebt);\\n      vars.availableLiquidity =\\n        IERC20(params.reserve).balanceOf(params.aToken) +\\n        params.liquidityAdded -\\n        params.liquidityTaken;\\n\\n      vars.availableLiquidityPlusDebt = vars.availableLiquidity + vars.totalDebt;\\n      vars.borrowUsageRatio = vars.totalDebt.rayDiv(vars.availableLiquidityPlusDebt);\\n      vars.supplyUsageRatio = vars.totalDebt.rayDiv(\\n        vars.availableLiquidityPlusDebt + params.unbacked\\n      );\\n    }\\n\\n    if (vars.borrowUsageRatio > OPTIMAL_USAGE_RATIO) {\\n      uint256 excessBorrowUsageRatio = (vars.borrowUsageRatio - OPTIMAL_USAGE_RATIO).rayDiv(\\n        MAX_EXCESS_USAGE_RATIO\\n      );\\n\\n      vars.currentStableBorrowRate +=\\n        _stableRateSlope1 +\\n        _stableRateSlope2.rayMul(excessBorrowUsageRatio);\\n\\n      vars.currentVariableBorrowRate +=\\n        _variableRateSlope1 +\\n        _variableRateSlope2.rayMul(excessBorrowUsageRatio);\\n    } else {\\n      vars.currentStableBorrowRate += _stableRateSlope1.rayMul(vars.borrowUsageRatio).rayDiv(\\n        OPTIMAL_USAGE_RATIO\\n      );\\n\\n      vars.currentVariableBorrowRate += _variableRateSlope1.rayMul(vars.borrowUsageRatio).rayDiv(\\n        OPTIMAL_USAGE_RATIO\\n      );\\n    }\\n\\n    if (vars.stableToTotalDebtRatio > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO) {\\n      uint256 excessStableDebtRatio = (vars.stableToTotalDebtRatio -\\n        OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO).rayDiv(MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO);\\n      vars.currentStableBorrowRate += _stableRateExcessOffset.rayMul(excessStableDebtRatio);\\n    }\\n\\n    vars.currentLiquidityRate = _getOverallBorrowRate(\\n      params.totalStableDebt,\\n      params.totalVariableDebt,\\n      vars.currentVariableBorrowRate,\\n      params.averageStableBorrowRate\\n    ).rayMul(vars.supplyUsageRatio).percentMul(\\n        PercentageMath.PERCENTAGE_FACTOR - params.reserveFactor\\n      );\\n\\n    return (\\n      vars.currentLiquidityRate,\\n      vars.currentStableBorrowRate,\\n      vars.currentVariableBorrowRate\\n    );\\n  }\\n\\n  /**\\n   * @dev Calculates the overall borrow rate as the weighted average between the total variable debt and total stable\\n   * debt\\n   * @param totalStableDebt The total borrowed from the reserve at a stable rate\\n   * @param totalVariableDebt The total borrowed from the reserve at a variable rate\\n   * @param currentVariableBorrowRate The current variable borrow rate of the reserve\\n   * @param currentAverageStableBorrowRate The current weighted average of all the stable rate loans\\n   * @return The weighted averaged borrow rate\\n   */\\n  function _getOverallBorrowRate(\\n    uint256 totalStableDebt,\\n    uint256 totalVariableDebt,\\n    uint256 currentVariableBorrowRate,\\n    uint256 currentAverageStableBorrowRate\\n  ) internal pure returns (uint256) {\\n    uint256 totalDebt = totalStableDebt + totalVariableDebt;\\n\\n    if (totalDebt == 0) return 0;\\n\\n    uint256 weightedVariableRate = totalVariableDebt.wadToRay().rayMul(currentVariableBorrowRate);\\n\\n    uint256 weightedStableRate = totalStableDebt.wadToRay().rayMul(currentAverageStableBorrowRate);\\n\\n    uint256 overallBorrowRate = (weightedVariableRate + weightedStableRate).rayDiv(\\n      totalDebt.wadToRay()\\n    );\\n\\n    return overallBorrowRate;\\n  }\\n}\\n\",\"keccak256\":\"0x01d746c72a9ace142997f4f66226b3a0005fbdc7b0e828915b837e156c4f520a\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the address of the PoolAddressesProvider"},"MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO()":{"notice":"Returns the excess stable debt ratio above the optimal."},"MAX_EXCESS_USAGE_RATIO()":{"notice":"Returns the excess usage ratio above the optimal."},"OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO()":{"notice":"Returns the optimal stable to total debt ratio of the reserve."},"OPTIMAL_USAGE_RATIO()":{"notice":"Returns the usage ratio at which the pool aims to obtain most competitive borrow rates."},"calculateInterestRates((uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address))":{"notice":"Calculates the interest rates depending on the reserve's state and configurations"},"getBaseStableBorrowRate()":{"notice":"Returns the base stable borrow rate"},"getBaseVariableBorrowRate()":{"notice":"Returns the base variable borrow rate"},"getMaxVariableBorrowRate()":{"notice":"Returns the maximum variable borrow rate"},"getStableRateExcessOffset()":{"notice":"Returns the stable rate excess offset"},"getStableRateSlope1()":{"notice":"Returns the stable rate slope below optimal usage ratio"},"getStableRateSlope2()":{"notice":"Returns the stable rate slope above optimal usage ratio"},"getVariableRateSlope1()":{"notice":"Returns the variable rate slope below optimal usage ratio"},"getVariableRateSlope2()":{"notice":"Returns the variable rate slope above optimal usage ratio"}},"notice":"Implements the calculation of the interest rates depending on the reserve state","version":1}}},"@aave/core-v3/contracts/protocol/pool/Pool.sol":{"Pool":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"backer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"BackUnbacked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"borrowRate","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"Borrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"address","name":"initiator","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"premium","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"FlashLoan","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalDebt","type":"uint256"}],"name":"IsolationModeTotalDebtUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"collateralAsset","type":"address"},{"indexed":true,"internalType":"address","name":"debtAsset","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"debtToCover","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidatedCollateralAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"liquidator","type":"address"},{"indexed":false,"internalType":"bool","name":"receiveAToken","type":"bool"}],"name":"LiquidationCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"MintUnbacked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountMinted","type":"uint256"}],"name":"MintedToTreasury","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"RebalanceStableBorrowRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"repayer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"useATokens","type":"bool"}],"name":"Repay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"uint256","name":"liquidityRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stableBorrowRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"variableBorrowRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"variableBorrowIndex","type":"uint256"}],"name":"ReserveDataUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"ReserveUsedAsCollateralEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"Supply","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"enum DataTypes.InterestRateMode","name":"interestRateMode","type":"uint8"}],"name":"SwapBorrowRateMode","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint8","name":"categoryId","type":"uint8"}],"name":"UserEModeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BRIDGE_PROTOCOL_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASHLOAN_PREMIUM_TOTAL","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLASHLOAN_PREMIUM_TO_PROTOCOL","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_NUMBER_RESERVES","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_STABLE_RATE_BORROW_SIZE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"backUnbacked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"uint16","name":"referralCode","type":"uint16"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"borrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"id","type":"uint8"},{"components":[{"internalType":"uint16","name":"ltv","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationBonus","type":"uint16"},{"internalType":"address","name":"priceSource","type":"address"},{"internalType":"string","name":"label","type":"string"}],"internalType":"struct DataTypes.EModeCategory","name":"category","type":"tuple"}],"name":"configureEModeCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"dropReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"balanceFromBefore","type":"uint256"},{"internalType":"uint256","name":"balanceToBefore","type":"uint256"}],"name":"finalizeTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiverAddress","type":"address"},{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"interestRateModes","type":"uint256[]"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"flashLoan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiverAddress","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"params","type":"bytes"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"flashLoanSimple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getConfiguration","outputs":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"id","type":"uint8"}],"name":"getEModeCategoryData","outputs":[{"components":[{"internalType":"uint16","name":"ltv","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationBonus","type":"uint16"},{"internalType":"address","name":"priceSource","type":"address"},{"internalType":"string","name":"label","type":"string"}],"internalType":"struct DataTypes.EModeCategory","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"id","type":"uint16"}],"name":"getReserveAddressById","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveData","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"configuration","type":"tuple"},{"internalType":"uint128","name":"liquidityIndex","type":"uint128"},{"internalType":"uint128","name":"currentLiquidityRate","type":"uint128"},{"internalType":"uint128","name":"variableBorrowIndex","type":"uint128"},{"internalType":"uint128","name":"currentVariableBorrowRate","type":"uint128"},{"internalType":"uint128","name":"currentStableBorrowRate","type":"uint128"},{"internalType":"uint40","name":"lastUpdateTimestamp","type":"uint40"},{"internalType":"uint16","name":"id","type":"uint16"},{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtTokenAddress","type":"address"},{"internalType":"address","name":"variableDebtTokenAddress","type":"address"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"},{"internalType":"uint128","name":"accruedToTreasury","type":"uint128"},{"internalType":"uint128","name":"unbacked","type":"uint128"},{"internalType":"uint128","name":"isolationModeTotalDebt","type":"uint128"}],"internalType":"struct DataTypes.ReserveData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveNormalizedIncome","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getReserveNormalizedVariableDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReservesList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserAccountData","outputs":[{"internalType":"uint256","name":"totalCollateralBase","type":"uint256"},{"internalType":"uint256","name":"totalDebtBase","type":"uint256"},{"internalType":"uint256","name":"availableBorrowsBase","type":"uint256"},{"internalType":"uint256","name":"currentLiquidationThreshold","type":"uint256"},{"internalType":"uint256","name":"ltv","type":"uint256"},{"internalType":"uint256","name":"healthFactor","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserConfiguration","outputs":[{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.UserConfigurationMap","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserEMode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtAddress","type":"address"},{"internalType":"address","name":"variableDebtAddress","type":"address"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"}],"name":"initReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collateralAsset","type":"address"},{"internalType":"address","name":"debtAsset","type":"address"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"debtToCover","type":"uint256"},{"internalType":"bool","name":"receiveAToken","type":"bool"}],"name":"liquidationCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"}],"name":"mintToTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"mintUnbacked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"rebalanceStableBorrowRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"repay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"}],"name":"repayWithATokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"permitV","type":"uint8"},{"internalType":"bytes32","name":"permitR","type":"bytes32"},{"internalType":"bytes32","name":"permitS","type":"bytes32"}],"name":"repayWithPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"resetIsolationModeTotalDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"components":[{"internalType":"uint256","name":"data","type":"uint256"}],"internalType":"struct DataTypes.ReserveConfigurationMap","name":"configuration","type":"tuple"}],"name":"setConfiguration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"rateStrategyAddress","type":"address"}],"name":"setReserveInterestRateStrategyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"categoryId","type":"uint8"}],"name":"setUserEMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"useAsCollateral","type":"bool"}],"name":"setUserUseReserveAsCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"supply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"permitV","type":"uint8"},{"internalType":"bytes32","name":"permitR","type":"bytes32"},{"internalType":"bytes32","name":"permitS","type":"bytes32"}],"name":"supplyWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"}],"name":"swapBorrowRateMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFee","type":"uint256"}],"name":"updateBridgeProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"flashLoanPremiumTotal","type":"uint128"},{"internalType":"uint128","name":"flashLoanPremiumToProtocol","type":"uint128"}],"name":"updateFlashloanPremiums","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","details":"To be covered by a proxy contract, owned by the PoolAddressesProvider of the specific marketAll admin functions are callable by the PoolConfigurator contract defined also in the   PoolAddressesProvider","kind":"dev","methods":{"BRIDGE_PROTOCOL_FEE()":{"returns":{"_0":"The bridge fee sent to the protocol treasury"}},"FLASHLOAN_PREMIUM_TOTAL()":{"returns":{"_0":"The total fee on flashloans"}},"FLASHLOAN_PREMIUM_TO_PROTOCOL()":{"returns":{"_0":"The flashloan fee sent to the protocol treasury"}},"MAX_NUMBER_RESERVES()":{"returns":{"_0":"The maximum number of reserves supported"}},"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":{"returns":{"_0":"The percentage of available liquidity to borrow, expressed in bps"}},"backUnbacked(address,uint256,uint256)":{"params":{"amount":"The amount to back","asset":"The address of the underlying asset to back","fee":"The amount paid in fees"},"returns":{"_0":"The backed amount"}},"borrow(address,uint256,uint256,uint16,address)":{"params":{"amount":"The amount to be borrowed","asset":"The address of the underlying asset to borrow","interestRateMode":"The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable","onBehalfOf":"The address of the user who will receive the debt. Should be the address of the borrower itself calling the function if he wants to borrow against his own collateral, or the address of the credit delegator if he has been given credit delegation allowance","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":{"details":"In eMode, the protocol allows very high borrowing power to borrow assets of the same category. The category 0 is reserved as it's the default for volatile assets","params":{"config":"The configuration of the category","id":"The id of the category"}},"constructor":{"details":"Constructor.","params":{"provider":"The address of the PoolAddressesProvider contract"}},"deposit(address,uint256,address,uint16)":{"details":"Deprecated: maintained for compatibility purposes","params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","onBehalfOf":"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"dropReserve(address)":{"details":"Only callable by the PoolConfigurator contract","params":{"asset":"The address of the underlying asset of the reserve"}},"finalizeTransfer(address,address,address,uint256,uint256,uint256)":{"details":"Only callable by the overlying aToken of the `asset`","params":{"amount":"The amount being transferred/withdrawn","asset":"The address of the underlying asset of the aToken","balanceFromBefore":"The aToken balance of the `from` user before the transfer","balanceToBefore":"The aToken balance of the `to` user before the transfer","from":"The user from which the aTokens are transferred","to":"The user receiving the aTokens"}},"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":{"details":"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/","params":{"amounts":"The amounts of the assets being flash-borrowed","assets":"The addresses of the assets being flash-borrowed","interestRateModes":"Types of the debt to open if the flash loan is not returned:   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address","onBehalfOf":"The address  that will receive the debt in the case of using on `modes` 1 or 2","params":"Variadic packed params to pass to the receiver as extra information","receiverAddress":"The address of the contract receiving the funds, implementing IFlashLoanReceiver interface","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"flashLoanSimple(address,address,uint256,bytes,uint16)":{"details":"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/","params":{"amount":"The amount of the asset being flash-borrowed","asset":"The address of the asset being flash-borrowed","params":"Variadic packed params to pass to the receiver as extra information","receiverAddress":"The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface","referralCode":"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"getConfiguration(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The configuration of the reserve"}},"getEModeCategoryData(uint8)":{"params":{"id":"The id of the category"},"returns":{"_0":"The configuration data of the category"}},"getReserveAddressById(uint16)":{"params":{"id":"The id of the reserve as stored in the DataTypes.ReserveData struct"},"returns":{"_0":"The address of the reserve associated with id"}},"getReserveData(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The state and configuration data of the reserve"}},"getReserveNormalizedIncome(address)":{"params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The reserve's normalized income"}},"getReserveNormalizedVariableDebt(address)":{"details":"WARNING: This function is intended to be used primarily by the protocol itself to get a \"dynamic\" variable index based on time, current stored index and virtual rate at the current moment (approx. a borrower would get if opening a position). This means that is always used in combination with variable debt supply/balances. If using this function externally, consider that is possible to have an increasing normalized variable debt that is not equivalent to how the variable debt index would be updated in storage (e.g. only updates with non-zero variable debt supply)","params":{"asset":"The address of the underlying asset of the reserve"},"returns":{"_0":"The reserve normalized variable debt"}},"getReservesList()":{"details":"It does not include dropped reserves","returns":{"_0":"The addresses of the underlying assets of the initialized reserves"}},"getUserAccountData(address)":{"params":{"user":"The address of the user"},"returns":{"availableBorrowsBase":"The borrowing power left of the user in the base currency used by the price feed","currentLiquidationThreshold":"The liquidation threshold of the user","healthFactor":"The current health factor of the user","ltv":"The loan to value of The user","totalCollateralBase":"The total collateral of the user in the base currency used by the price feed","totalDebtBase":"The total debt of the user in the base currency used by the price feed"}},"getUserConfiguration(address)":{"params":{"user":"The user address"},"returns":{"_0":"The configuration of the user"}},"getUserEMode(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The eMode id"}},"initReserve(address,address,address,address,address)":{"details":"Only callable by the PoolConfigurator contract","params":{"aTokenAddress":"The address of the aToken that will be assigned to the reserve","asset":"The address of the underlying asset of the reserve","interestRateStrategyAddress":"The address of the interest rate strategy contract","stableDebtAddress":"The address of the StableDebtToken that will be assigned to the reserve","variableDebtAddress":"The address of the VariableDebtToken that will be assigned to the reserve"}},"initialize(address)":{"details":"Function is invoked by the proxy contract when the Pool contract is added to the PoolAddressesProvider of the market.Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations","params":{"provider":"The address of the PoolAddressesProvider"}},"liquidationCall(address,address,address,uint256,bool)":{"params":{"collateralAsset":"The address of the underlying asset used as collateral, to receive as result of the liquidation","debtAsset":"The address of the underlying borrowed asset to be repaid with the liquidation","debtToCover":"The debt amount of borrowed `asset` the liquidator wants to cover","receiveAToken":"True if the liquidators wants to receive the collateral aTokens, `false` if he wants to receive the underlying collateral asset directly","user":"The address of the borrower getting liquidated"}},"mintToTreasury(address[])":{"params":{"assets":"The list of reserves for which the minting needs to be executed"}},"mintUnbacked(address,uint256,address,uint16)":{"params":{"amount":"The amount to mint","asset":"The address of the underlying asset to mint","onBehalfOf":"The address that will receive the aTokens","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"rebalanceStableBorrowRate(address,address)":{"params":{"asset":"The address of the underlying asset borrowed","user":"The address of the user to be rebalanced"}},"repay(address,uint256,uint256,address)":{"params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable","onBehalfOf":"The address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed"},"returns":{"_0":"The final amount repaid"}},"repayWithATokens(address,uint256,uint256)":{"details":"Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken balance is not enough to cover the whole debt","params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable"},"returns":{"_0":"The final amount repaid"}},"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":{"params":{"amount":"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`","asset":"The address of the borrowed underlying asset previously borrowed","deadline":"The deadline timestamp that the permit is valid","interestRateMode":"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable","onBehalfOf":"Address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed","permitR":"The R parameter of ERC712 permit sig","permitS":"The S parameter of ERC712 permit sig","permitV":"The V parameter of ERC712 permit sig"},"returns":{"_0":"The final amount repaid"}},"rescueTokens(address,address,uint256)":{"params":{"amount":"The amount of token to transfer","to":"The address of the recipient","token":"The address of the token"}},"resetIsolationModeTotalDebt(address)":{"details":"It requires the given asset has zero debt ceiling","params":{"asset":"The address of the underlying asset to reset the isolationModeTotalDebt"}},"setConfiguration(address,(uint256))":{"details":"Only callable by the PoolConfigurator contract","params":{"asset":"The address of the underlying asset of the reserve","configuration":"The new configuration bitmap"}},"setReserveInterestRateStrategyAddress(address,address)":{"details":"Only callable by the PoolConfigurator contract","params":{"asset":"The address of the underlying asset of the reserve","rateStrategyAddress":"The address of the interest rate strategy contract"}},"setUserEMode(uint8)":{"params":{"categoryId":"The id of the category"}},"setUserUseReserveAsCollateral(address,bool)":{"params":{"asset":"The address of the underlying asset supplied","useAsCollateral":"True if the user wants to use the supply as collateral, false otherwise"}},"supply(address,uint256,address,uint16)":{"params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","onBehalfOf":"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":{"params":{"amount":"The amount to be supplied","asset":"The address of the underlying asset to supply","deadline":"The deadline timestamp that the permit is valid","onBehalfOf":"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet","permitR":"The R parameter of ERC712 permit sig","permitS":"The S parameter of ERC712 permit sig","permitV":"The V parameter of ERC712 permit sig","referralCode":"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man"}},"swapBorrowRateMode(address,uint256)":{"params":{"asset":"The address of the underlying asset borrowed","interestRateMode":"The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable"}},"updateBridgeProtocolFee(uint256)":{"params":{"bridgeProtocolFee":"The part of the premium sent to the protocol treasury"}},"updateFlashloanPremiums(uint128,uint128)":{"details":"The total premium is calculated on the total borrowed amountThe premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`Only callable by the PoolConfigurator contract","params":{"flashLoanPremiumToProtocol":"The part of the premium sent to the protocol treasury, expressed in bps","flashLoanPremiumTotal":"The total premium, expressed in bps"}},"withdraw(address,uint256,address)":{"params":{"amount":"The underlying amount to be withdrawn   - Send the value type(uint256).max in order to withdraw the whole aToken balance","asset":"The address of the underlying asset to withdraw","to":"The address that will receive the underlying, same as msg.sender if the user   wants to receive it on his own wallet, or a different address if the beneficiary is a   different wallet"},"returns":{"_0":"The final amount withdrawn"}}},"stateVariables":{"ADDRESSES_PROVIDER":{"return":"The address of the PoolAddressesProvider","returns":{"_0":"The address of the PoolAddressesProvider"}}},"title":"Pool contract","version":1},"evm":{"bytecode":{"functionDebugData":{"@_22340":{"entryPoint":null,"id":22340,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory":{"entryPoint":74,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:337:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"126:209:201","statements":[{"body":{"nodeType":"YulBlock","src":"172:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"181:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"184:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"174:6:201"},"nodeType":"YulFunctionCall","src":"174:12:201"},"nodeType":"YulExpressionStatement","src":"174:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"147:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"156:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"143:3:201"},"nodeType":"YulFunctionCall","src":"143:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"168:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"139:3:201"},"nodeType":"YulFunctionCall","src":"139:32:201"},"nodeType":"YulIf","src":"136:52:201"},{"nodeType":"YulVariableDeclaration","src":"197:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"216:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:201"},"nodeType":"YulFunctionCall","src":"210:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"201:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"289:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"298:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"301:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"291:6:201"},"nodeType":"YulFunctionCall","src":"291:12:201"},"nodeType":"YulExpressionStatement","src":"291:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"248:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"259:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"274:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"279:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"270:3:201"},"nodeType":"YulFunctionCall","src":"270:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"283:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"266:3:201"},"nodeType":"YulFunctionCall","src":"266:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"255:3:201"},"nodeType":"YulFunctionCall","src":"255:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"245:2:201"},"nodeType":"YulFunctionCall","src":"245:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"238:6:201"},"nodeType":"YulFunctionCall","src":"238:50:201"},"nodeType":"YulIf","src":"235:70:201"},{"nodeType":"YulAssignment","src":"314:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"324:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"314:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"92:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"103:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"115:6:201","type":""}],"src":"14:321:201"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{"@aave/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol":{"BorrowLogic":[{"length":20,"start":4461},{"length":20,"start":5137},{"length":20,"start":7497},{"length":20,"start":7660},{"length":20,"start":10352},{"length":20,"start":12325}]},"@aave/core-v3/contracts/protocol/libraries/logic/BridgeLogic.sol":{"BridgeLogic":[{"length":20,"start":6791},{"length":20,"start":11876}]},"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol":{"EModeLogic":[{"length":20,"start":4045}]},"@aave/core-v3/contracts/protocol/libraries/logic/FlashLoanLogic.sol":{"FlashLoanLogic":[{"length":20,"start":5036},{"length":20,"start":9072}]},"@aave/core-v3/contracts/protocol/libraries/logic/LiquidationLogic.sol":{"LiquidationLogic":[{"length":20,"start":2640}]},"@aave/core-v3/contracts/protocol/libraries/logic/PoolLogic.sol":{"PoolLogic":[{"length":20,"start":6166},{"length":20,"start":7136},{"length":20,"start":7613},{"length":20,"start":9368},{"length":20,"start":10464},{"length":20,"start":11980}]},"@aave/core-v3/contracts/protocol/libraries/logic/SupplyLogic.sol":{"SupplyLogic":[{"length":20,"start":3514},{"length":20,"start":5428},{"length":20,"start":6005},{"length":20,"start":6204},{"length":20,"start":11342}]}},"object":"60a0604052600080553480156200001557600080fd5b5060405162004f5738038062004f5783398101604081905262000038916200004a565b6001600160a01b03166080526200007c565b6000602082840312156200005d57600080fd5b81516001600160a01b03811681146200007557600080fd5b9392505050565b608051614e5d620000fa60003960008181610356015281816109d901528181610ab101528181610f3f01528181611492015281816117d001528181611e1101528181611ed5015281816120f4015281816123c80152818161261a01528181612bdb0152818161313c015281816132c9015261343c0152614e5d6000f3fe608060405234801561001057600080fd5b50600436106103095760003560e01c80637a708e921161019c578063d15e0053116100ee578063e82fec2f11610097578063ee3e210b11610071578063ee3e210b1461091f578063f51e435b14610932578063f8119d511461094557600080fd5b8063e82fec2f146108e1578063e8eda9df146106a6578063eddf1b79146108f357600080fd5b8063d5ed3933116100c8578063d5ed3933146108a8578063d65dc7a1146108bb578063e43e88a1146108ce57600080fd5b8063d15e00531461086d578063d1946dbc14610880578063d579ea7d1461089557600080fd5b8063bcb6e52211610150578063c4d66de81161012a578063c4d66de814610834578063cd11238214610847578063cea9d26f1461085a57600080fd5b8063bcb6e5221461079f578063bf92857c146107b2578063c44b11f7146107f257600080fd5b80639cd19996116101815780639cd1999614610766578063a415bcad14610779578063ab9c4b5d1461078c57600080fd5b80637a708e921461074057806394ba89a21461075357600080fd5b8063386497fd11610260578063617ba0371161020957806369a933a5116101e357806369a933a5146106df5780636a99c036146106f25780636c6f6ae11461072057600080fd5b8063617ba037146106a657806363c9b860146106b957806369328dec146106cc57600080fd5b8063527517971161023a5780635275179714610653578063573ade81146106805780635a3b74b91461069357600080fd5b8063386497fd146105dc57806342b0b77c146105ef5780634417a5831461060257600080fd5b80631d2118f9116102c25780632dad97d41161029c5780632dad97d4146103f55780633036b4391461040857806335ea6a751461041b57600080fd5b80631d2118f9146103c7578063272d9072146103da57806328530a47146103e257600080fd5b806302c205f0116102f357806302c205f01461033e5780630542975c14610351578063074b2e431461039057600080fd5b8062a718a91461030e5780630148170e14610323575b600080fd5b61032161031c3660046138ed565b610954565b005b61032b600181565b6040519081526020015b60405180910390f35b61032161034c366004613978565b610b81565b6103787f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610335565b603a546fffffffffffffffffffffffffffffffff165b6040516fffffffffffffffffffffffffffffffff9091168152602001610335565b6103216103d53660046139f7565b610d17565b60395461032b565b6103216103f0366004613a30565b610ed1565b61032b610403366004613a4b565b61106f565b610321610416366004613a80565b61118c565b6105cf610429366004613a99565b604080516102008101825260006101e08201818152825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c0810191909152506001600160a01b0390811660009081526034602090815260409182902082516102008101845281546101e08201908152815260018201546fffffffffffffffffffffffffffffffff80821694830194909452700100000000000000000000000000000000908190048416948201949094526002820154808416606083015284900483166080820152600382015480841660a083015284810464ffffffffff1660c08301527501000000000000000000000000000000000000000000900461ffff1660e0820152600482015485166101008201526005820154851661012082015260068201548516610140820152600782015490941661016085015260088101548083166101808601529290920481166101a0840152600990910154166101c082015290565b6040516103359190613ab6565b61032b6105ea366004613a99565b611199565b6103216105fd366004613c6f565b6111c0565b610644610610366004613a99565b60408051602080820183526000918290526001600160a01b0393909316815260358352819020815192830190915254815290565b60405190518152602001610335565b610378610661366004613cf1565b61ffff166000908152603660205260409020546001600160a01b031690565b61032b61068e366004613d0c565b611313565b6103216106a1366004613d56565b611438565b6103216106b4366004613d84565b6115d9565b6103216106c7366004613a99565b6116cf565b61032b6106da366004613dd5565b61173e565b6103216106ed366004613d84565b61190f565b603a5470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff166103a6565b61073361072e366004613a30565b6119af565b6040516103359190613e82565b61032161074e366004613ed8565b611adc565b610321610761366004613f3b565b611c27565b610321610774366004613fac565b611c9b565b610321610787366004613fee565b611cf0565b61032161079a36600461402d565b611f6e565b6103216107ad366004614147565b6122e6565b6107c56107c0366004613a99565b61231d565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610335565b610644610800366004613a99565b60408051602080820183526000918290526001600160a01b0393909316815260348352819020815192830190915254815290565b610321610842366004613a99565b612532565b6103216108553660046139f7565b61271c565b61032161086836600461417a565b612798565b61032b61087b366004613a99565b612838565b610888612859565b60405161033591906141bb565b6103216108a33660046142af565b612961565b6103216108b63660046143e7565b612ac0565b61032b6108c9366004613a4b565b612cf9565b6103216108dc366004613a99565b612d8c565b603b5467ffffffffffffffff1661032b565b61032b610901366004613a99565b6001600160a01b031660009081526038602052604090205460ff1690565b61032b61092d36600461444c565b612df4565b610321610940366004614492565b612fa8565b60405160808152602001610335565b73__$4ae75c1292a38b6fb7c763c6480b4a24e8$__6383c1087d6034603660356037604051806101200160405280603b60089054906101000a900461ffff1661ffff1681526020018981526020018c6001600160a01b031681526020018b6001600160a01b031681526020018a6001600160a01b0316815260200188151581526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5991906144f1565b6001600160a01b0390811682528b81166000908152603860209081526040918290205460ff168185015281517f5eb88d3d000000000000000000000000000000000000000000000000000000008152825192909401937f000000000000000000000000000000000000000000000000000000000000000090931692635eb88d3d92600480830193928290030181865afa158015610afa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1e91906144f1565b6001600160a01b03168152506040518663ffffffff1660e01b8152600401610b4a95949392919061450e565b60006040518083038186803b158015610b6257600080fd5b505af4158015610b76573d6000803e3d6000fd5b505050505050505050565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c481018290526001600160a01b0389169063d505accf9060e401600060405180830381600087803b158015610c0657600080fd5b505af1158015610c1a573d6000803e3d6000fd5b505050506001600160a01b0386811660008181526035602090815260409182902082516080810184528d861681529182018c815282840194855261ffff8b81166060850190815294517f1913f16100000000000000000000000000000000000000000000000000000000815260346004820152603660248201526044810193909352925186166064830152516084820152925190931660a48301525190911660c482015273__$e9229d51100a3938db7663133e6dc5ffcb$__90631913f1619060e40160006040518083038186803b158015610cf557600080fd5b505af4158015610d09573d6000803e3d6000fd5b505050505050505050505050565b610d1f613130565b60408051808201909152600281527f373700000000000000000000000000000000000000000000000000000000000060208201526001600160a01b038316610d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9491906145c8565b60405180910390fd5b506001600160a01b0382166000908152603460205260409020600301547501000000000000000000000000000000000000000000900461ffff16151580610e1957506000805260366020527f4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e00546001600160a01b038381169116145b6040518060400160405280600281526020017f383200000000000000000000000000000000000000000000000000000000000081525090610e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9491906145c8565b506001600160a01b03918216600090815260346020526040902060070180547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73__$5a3f4c3d06a1537986751467788655cb94$__635d5dc313603460366037603860356000336001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405280603b60089054906101000a900461ffff1661ffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbf91906144f1565b6001600160a01b031681526020018960ff168152506040518763ffffffff1660e01b815260040161103c9695949392919095865260208087019590955260408087019490945260608601929092526080850152805160a0850152918201516001600160a01b031660c0840152015160ff1660e08201526101000190565b60006040518083038186803b15801561105457600080fd5b505af4158015611068573d6000803e3d6000fd5b5050505050565b600073__$f250b95a8491f1e84f401ed6d1693cd837$__6340e95de66034603660356000336001600160a01b03166001600160a01b031681526020019081526020016000206040518060a001604052808a6001600160a01b031681526020018981526020018860028111156110e6576110e66145db565b60028111156110f7576110f76145db565b81523360208201526001604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526111419493929190600401614645565b602060405180830381865af415801561115e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118291906146ab565b90505b9392505050565b611194613130565b603955565b6001600160a01b03811660009081526034602052604081206111ba90613237565b92915050565b60006040518060e00160405280886001600160a01b03168152602001876001600160a01b0316815260200186815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505061ffff8516602080840191909152603a546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008204811660408087019190915291166060909401939093526001600160a01b038a1682526034905281902090517fa1fe0e8d00000000000000000000000000000000000000000000000000000000815291925073__$3cafd0a079d9bba6279cd462d6f4920444$__9163a1fe0e8d916112da9185906004016146c4565b60006040518083038186803b1580156112f257600080fd5b505af4158015611306573d6000803e3d6000fd5b5050505050505050505050565b600073__$f250b95a8491f1e84f401ed6d1693cd837$__6340e95de66034603660356000876001600160a01b03166001600160a01b031681526020019081526020016000206040518060a001604052808b6001600160a01b031681526020018a815260200189600281111561138a5761138a6145db565b600281111561139b5761139b6145db565b81526001600160a01b03891660208201526000604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526113ee9493929190600401614645565b602060405180830381865af415801561140b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142f91906146ab565b95945050505050565b73__$e9229d51100a3938db7663133e6dc5ffcb$__63bf697a2660346036603760356000336001600160a01b03166001600160a01b031681526020019081526020016000208787603b60089054906101000a900461ffff167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151291906144f1565b336000908152603860205260409081902054905160e08b901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260048101999099526024890197909752604488019590955260648701939093526001600160a01b039182166084870152151560a486015261ffff90911660c48501521660e483015260ff16610104820152610124015b60006040518083038186803b1580156115bd57600080fd5b505af41580156115d1573d6000803e3d6000fd5b505050505050565b6001600160a01b038281166000818152603560209081526040918290208251608081018452898616815291820188815282840194855261ffff8781166060850190815294517f1913f16100000000000000000000000000000000000000000000000000000000815260346004820152603660248201526044810193909352925186166064830152516084820152925190931660a48301525190911660c482015273__$e9229d51100a3938db7663133e6dc5ffcb$__90631913f1619060e4015b60006040518083038186803b1580156116b157600080fd5b505af41580156116c5573d6000803e3d6000fd5b5050505050505050565b6116d7613130565b6040517f9cf5702300000000000000000000000000000000000000000000000000000000815260346004820152603660248201526001600160a01b038216604482015273__$370dc613f77da7345d5cfe489611ba2a28$__90639cf570239060640161103c565b600073__$e9229d51100a3938db7663133e6dc5ffcb$__63186dea4460346036603760356000336001600160a01b03166001600160a01b031681526020019081526020016000206040518060c001604052808b6001600160a01b031681526020018a8152602001896001600160a01b03168152602001603b60089054906101000a900461ffff1661ffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561182c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185091906144f1565b6001600160a01b039081168252336000908152603860209081526040918290205460ff90811694820194909452815160e08b901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260048101999099526024890197909752604488019590955260648701939093528151831660848701529381015160a486015291820151811660c4850152606082015160e485015260808201511661010484015260a001511661012482015261014401611141565b6119176132c7565b6001600160a01b038281166000818152603560205260409081902090517f0413c86f0000000000000000000000000000000000000000000000000000000081526034600482015260366024820152604481019190915291861660648301526084820185905260a482015261ffff821660c482015273__$d21c6b38ea0f6668c62b5e103f4ea47254$__90630413c86f9060e401611699565b6040805160a081018252600080825260208201819052918101829052606080820192909252608081019190915260ff8216600090815260376020908152604091829020825160a081018452815461ffff808216835262010000820481169483019490945264010000000081049093169381019390935266010000000000009091046001600160a01b03166060830152600181018054608084019190611a5390614742565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7f90614742565b8015611acc5780601f10611aa157610100808354040283529160200191611acc565b820191906000526020600020905b815481529060010190602001808311611aaf57829003601f168201915b5050505050815250509050919050565b611ae4613130565b73__$370dc613f77da7345d5cfe489611ba2a28$__6369fc1bdf603460366040518060e001604052808a6001600160a01b03168152602001896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b03168152602001603b60089054906101000a900461ffff1661ffff168152602001611b7a608090565b61ffff168152506040518463ffffffff1660e01b8152600401611b9f93929190614790565b602060405180830381865af4158015611bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be09190614813565b1561106857603b805468010000000000000000900461ffff16906008611c058361485f565b91906101000a81548161ffff021916908361ffff160217905550505050505050565b6001600160a01b0382166000908152603460209081526040808320338452603590925290912073__$f250b95a8491f1e84f401ed6d1693cd837$__9163eac4d7039185856002811115611c7c57611c7c6145db565b6040518563ffffffff1660e01b81526004016115a59493929190614881565b6040517f48c2ca8c00000000000000000000000000000000000000000000000000000000815273__$370dc613f77da7345d5cfe489611ba2a28$__906348c2ca8c906115a590603490869086906004016148ab565b73__$f250b95a8491f1e84f401ed6d1693cd837$__631e6473f960346036603760356000876001600160a01b03166001600160a01b031681526020019081526020016000206040518061018001604052808c6001600160a01b03168152602001336001600160a01b03168152602001886001600160a01b031681526020018b81526020018a6002811115611d8657611d866145db565b6002811115611d9757611d976145db565b815261ffff808b166020808401919091526001604080850191909152603b5467ffffffffffffffff81166060860152680100000000000000009004909216608084015281517ffca513a8000000000000000000000000000000000000000000000000000000008152915160a0909301926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263fca513a89260048083019391928290030181865afa158015611e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7d91906144f1565b6001600160a01b0390811682528981166000908152603860209081526040918290205460ff168185015281517f5eb88d3d000000000000000000000000000000000000000000000000000000008152825192909401937f000000000000000000000000000000000000000000000000000000000000000090931692635eb88d3d92600480830193928290030181865afa158015611f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4291906144f1565b6001600160a01b03168152506040518663ffffffff1660e01b8152600401610b4a959493929190614903565b6000604051806101c001604052808d6001600160a01b031681526020018c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d9182918501908490808284376000920191909152505050908252506040805160208a810282810182019093528a82529283019290918b918b9182918501908490808284376000920191909152505050908252506001600160a01b03871660208083019190915260408051601f88018390048302810183018252878152920191908790879081908401838280828437600092018290525093855250505061ffff808616602080850191909152603a546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008204811660408088019190915291166060860152603b5467ffffffffffffffff8116608087015268010000000000000000900490921660a08501526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660c08601819052908b16845260388252928290205460ff1660e085015281517f707cd71600000000000000000000000000000000000000000000000000000000815291516101009094019363707cd7169260048082019392918290030181865afa158015612187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ab91906144f1565b6040517ffa50f2970000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03919091169063fa50f29790602401602060405180830381865afa15801561220a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222e9190614813565b151590526001600160a01b0386166000908152603560205260409081902090517f2e7263ea00000000000000000000000000000000000000000000000000000000815291925073__$3cafd0a079d9bba6279cd462d6f4920444$__91632e7263ea916122a891603491603691603791908890600401614a6b565b60006040518083038186803b1580156122c057600080fd5b505af41580156122d4573d6000803e3d6000fd5b50505050505050505050505050505050565b6122ee613130565b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617603a55565b604080516001600160a01b0383811660008181526035602090815285822060c0860187525460a086019081528552603b5468010000000000000000900461ffff16818601528486019290925284517ffca513a8000000000000000000000000000000000000000000000000000000008152945190948594859485948594859473__$370dc613f77da7345d5cfe489611ba2a28$__946326ec273f9460349460369460379460608501937f0000000000000000000000000000000000000000000000000000000000000000169263fca513a8926004808401938290030181865afa15801561240e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243291906144f1565b6001600160a01b0390811682528e81166000908152603860209081526040918290205460ff90811694820194909452815160e08a901b7fffffffff00000000000000000000000000000000000000000000000000000000168152600481019890985260248801969096526044870194909452825151606487015293820151608486015291810151831660a4850152606081015190921660c48401526080909101511660e48201526101040160c060405180830381865af41580156124fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251e9190614bea565b949c939b5091995097509550909350915050565b6001805460ff16806125435750303b155b8061254f575060005481115b6125db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610d94565b60015460ff1615801561261857600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146040518060400160405280600281526020017f3132000000000000000000000000000000000000000000000000000000000000815250906126bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9491906145c8565b50603b80547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166109c4179055801561271757600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050565b6001600160a01b038281166000818152603460205260409081902090517f6973f74400000000000000000000000000000000000000000000000000000000815260048101919091526024810191909152908216604482015273__$f250b95a8491f1e84f401ed6d1693cd837$__90636973f744906064016115a5565b6127a061343a565b6040517f87b322b20000000000000000000000000000000000000000000000000000000081526001600160a01b038085166004830152831660248201526044810182905273__$370dc613f77da7345d5cfe489611ba2a28$__906387b322b29060640160006040518083038186803b15801561281b57600080fd5b505af415801561282f573d6000803e3d6000fd5b50505050505050565b6001600160a01b03811660009081526034602052604081206111ba906135ad565b603b5460609068010000000000000000900461ffff166000808267ffffffffffffffff81111561288b5761288b614208565b6040519080825280602002602001820160405280156128b4578160200160208202803683370190505b50905060005b83811015612957576000818152603660205260409020546001600160a01b031615612937576000818152603660205260409020546001600160a01b0316826129028584614c34565b8151811061291257612912614c4b565b60200260200101906001600160a01b031690816001600160a01b031681525050612945565b8261294181614c7a565b9350505b8061294f81614c7a565b9150506128ba565b5091038152919050565b612969613130565b60408051808201909152600281527f3136000000000000000000000000000000000000000000000000000000000000602082015260ff83166129d8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9491906145c8565b5060ff821660009081526037602090815260409182902083518154838601519486015160608701516001600160a01b03166601000000000000027fffffffffffff0000000000000000000000000000000000000000ffffffffffff61ffff92831664010000000002167fffffffffffff00000000000000000000000000000000000000000000ffffffff97831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909416929094169190911791909117949094161792909217825560808301518051849392611068926001850192910190613821565b6001600160a01b03868116600090815260346020908152604091829020600401548251808401909352600283527f3131000000000000000000000000000000000000000000000000000000000000918301919091529091163314612b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9491906145c8565b5073__$e9229d51100a3938db7663133e6dc5ffcb$__638a5dadd160346036603760356040518061012001604052808d6001600160a01b031681526020018c6001600160a01b031681526020018b6001600160a01b031681526020018a8152602001898152602001888152602001603b60089054906101000a900461ffff1661ffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5b91906144f1565b6001600160a01b0390811682528d166000908152603860209081526040918290205460ff16920191909152517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b168152612cc1959493929190600401614cb3565b60006040518083038186803b158015612cd957600080fd5b505af4158015612ced573d6000803e3d6000fd5b50505050505050505050565b6000612d036132c7565b6001600160a01b0384166000818152603460205260409081902060395491517f8e743248000000000000000000000000000000000000000000000000000000008152600481019190915260248101929092526044820185905260648201849052608482015273__$d21c6b38ea0f6668c62b5e103f4ea47254$__90638e7432489060a401611141565b612d94613130565b6040517f1e3b4145000000000000000000000000000000000000000000000000000000008152603460048201526001600160a01b038216602482015273__$370dc613f77da7345d5cfe489611ba2a28$__90631e3b41459060440161103c565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c481018290526000906001600160a01b038a169063d505accf9060e401600060405180830381600087803b158015612e7c57600080fd5b505af1158015612e90573d6000803e3d6000fd5b5050505060006040518060a001604052808b6001600160a01b031681526020018a8152602001896002811115612ec857612ec86145db565b6002811115612ed957612ed96145db565b81526001600160a01b0389166020808301829052600060409384018190529182526035905281902090517f40e95de600000000000000000000000000000000000000000000000000000000815291925073__$f250b95a8491f1e84f401ed6d1693cd837$__916340e95de691612f59916034916036918790600401614645565b602060405180830381865af4158015612f76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9a91906146ab565b9a9950505050505050505050565b612fb0613130565b60408051808201909152600281527f373700000000000000000000000000000000000000000000000000000000000060208201526001600160a01b038316613025576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9491906145c8565b506001600160a01b0382166000908152603460205260409020600301547501000000000000000000000000000000000000000000900461ffff161515806130a157506000805260366020527f4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e00546001600160a01b038381169116145b6040518060400160405280600281526020017f38320000000000000000000000000000000000000000000000000000000000008152509061310f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9491906145c8565b506001600160a01b0391909116600090815260346020526040902090359055565b336001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663631adfca6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131bc91906144f1565b6001600160a01b0316146040518060400160405280600281526020017f313000000000000000000000000000000000000000000000000000000000000081525090613234576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9491906145c8565b50565b6003810154600090700100000000000000000000000000000000900464ffffffffff164281141561327d575050600201546fffffffffffffffffffffffffffffffff1690565b6002830154611185906fffffffffffffffffffffffffffffffff808216916132bb917001000000000000000000000000000000009091041684613631565b9061363e565b50919050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015613325573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061334991906144f1565b6040517f726600ce0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03919091169063726600ce90602401602060405180830381865afa1580156133a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133cc9190614813565b6040518060400160405280600181526020017f360000000000000000000000000000000000000000000000000000000000000081525090613234576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9491906145c8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015613498573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134bc91906144f1565b6040517f7be53ca10000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039190911690637be53ca190602401602060405180830381865afa15801561351b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353f9190614813565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090613234576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9491906145c8565b6003810154600090700100000000000000000000000000000000900464ffffffffff16428114156135f3575050600101546fffffffffffffffffffffffffffffffff1690565b6001830154611185906fffffffffffffffffffffffffffffffff808216916132bb917001000000000000000000000000000000009091041684613695565b60006111858383426136da565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761367357600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b6000806136a964ffffffffff841642614c34565b6136b39085614d68565b6301e13380900490506136d2816b033b2e3c9fd0803ce8000000614dd4565b949350505050565b6000806136ee64ffffffffff851684614c34565b90508061370a576b033b2e3c9fd0803ce8000000915050611185565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511613740576000613745565b600285035b925066038882915c40006137598a8061363e565b8161376657613766614da5565b0491506301e13380613778838b61363e565b8161378557613785614da5565b0490506000826137958688614d68565b61379f9190614d68565b600290049050600082856137b3888a614d68565b6137bd9190614d68565b6137c79190614d68565b60069004905080826301e133806137de8a8f614d68565b6137e89190614dec565b6137fe906b033b2e3c9fd0803ce8000000614dd4565b6138089190614dd4565b6138129190614dd4565b9b9a5050505050505050505050565b82805461382d90614742565b90600052602060002090601f01602090048101928261384f5760008555613895565b82601f1061386857805160ff1916838001178555613895565b82800160010185558215613895579182015b8281111561389557825182559160200191906001019061387a565b506138a19291506138a5565b5090565b5b808211156138a157600081556001016138a6565b6001600160a01b038116811461323457600080fd5b80356138da816138ba565b919050565b801515811461323457600080fd5b600080600080600060a0868803121561390557600080fd5b8535613910816138ba565b94506020860135613920816138ba565b93506040860135613930816138ba565b9250606086013591506080860135613947816138df565b809150509295509295909350565b803561ffff811681146138da57600080fd5b803560ff811681146138da57600080fd5b600080600080600080600080610100898b03121561399557600080fd5b88356139a0816138ba565b97506020890135965060408901356139b7816138ba565b95506139c560608a01613955565b9450608089013593506139da60a08a01613967565b925060c0890135915060e089013590509295985092959890939650565b60008060408385031215613a0a57600080fd5b8235613a15816138ba565b91506020830135613a25816138ba565b809150509250929050565b600060208284031215613a4257600080fd5b61118582613967565b600080600060608486031215613a6057600080fd5b8335613a6b816138ba565b95602085013595506040909401359392505050565b600060208284031215613a9257600080fd5b5035919050565b600060208284031215613aab57600080fd5b8135611185816138ba565b81515181526101e081016020830151613ae360208401826fffffffffffffffffffffffffffffffff169052565b506040830151613b0760408401826fffffffffffffffffffffffffffffffff169052565b506060830151613b2b60608401826fffffffffffffffffffffffffffffffff169052565b506080830151613b4f60808401826fffffffffffffffffffffffffffffffff169052565b5060a0830151613b7360a08401826fffffffffffffffffffffffffffffffff169052565b5060c0830151613b8c60c084018264ffffffffff169052565b5060e0830151613ba260e084018261ffff169052565b50610100838101516001600160a01b039081169184019190915261012080850151821690840152610140808501518216908401526101608085015190911690830152610180808401516fffffffffffffffffffffffffffffffff908116918401919091526101a0808501518216908401526101c09384015116929091019190915290565b60008083601f840112613c3857600080fd5b50813567ffffffffffffffff811115613c5057600080fd5b602083019150836020828501011115613c6857600080fd5b9250929050565b60008060008060008060a08789031215613c8857600080fd5b8635613c93816138ba565b95506020870135613ca3816138ba565b945060408701359350606087013567ffffffffffffffff811115613cc657600080fd5b613cd289828a01613c26565b9094509250613ce5905060808801613955565b90509295509295509295565b600060208284031215613d0357600080fd5b61118582613955565b60008060008060808587031215613d2257600080fd5b8435613d2d816138ba565b935060208501359250604085013591506060850135613d4b816138ba565b939692955090935050565b60008060408385031215613d6957600080fd5b8235613d74816138ba565b91506020830135613a25816138df565b60008060008060808587031215613d9a57600080fd5b8435613da5816138ba565b9350602085013592506040850135613dbc816138ba565b9150613dca60608601613955565b905092959194509250565b600080600060608486031215613dea57600080fd5b8335613df5816138ba565b9250602084013591506040840135613e0c816138ba565b809150509250925092565b6000815180845260005b81811015613e3d57602081850181015186830182015201613e21565b81811115613e4f576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061ffff808451166020840152806020850151166040840152806040850151166060840152506001600160a01b036060840151166080830152608083015160a0808401526136d260c0840182613e17565b600080600080600060a08688031215613ef057600080fd5b8535613efb816138ba565b94506020860135613f0b816138ba565b93506040860135613f1b816138ba565b92506060860135613f2b816138ba565b91506080860135613947816138ba565b60008060408385031215613f4e57600080fd5b8235613f59816138ba565b946020939093013593505050565b60008083601f840112613f7957600080fd5b50813567ffffffffffffffff811115613f9157600080fd5b6020830191508360208260051b8501011115613c6857600080fd5b60008060208385031215613fbf57600080fd5b823567ffffffffffffffff811115613fd657600080fd5b613fe285828601613f67565b90969095509350505050565b600080600080600060a0868803121561400657600080fd5b8535614011816138ba565b94506020860135935060408601359250613f2b60608701613955565b600080600080600080600080600080600060e08c8e03121561404e57600080fd5b6140578c6138cf565b9a5067ffffffffffffffff8060208e0135111561407357600080fd5b6140838e60208f01358f01613f67565b909b50995060408d013581101561409957600080fd5b6140a98e60408f01358f01613f67565b909950975060608d01358110156140bf57600080fd5b6140cf8e60608f01358f01613f67565b90975095506140e060808e016138cf565b94508060a08e013511156140f357600080fd5b506141048d60a08e01358e01613c26565b909350915061411560c08d01613955565b90509295989b509295989b9093969950565b80356fffffffffffffffffffffffffffffffff811681146138da57600080fd5b6000806040838503121561415a57600080fd5b61416383614127565b915061417160208401614127565b90509250929050565b60008060006060848603121561418f57600080fd5b833561419a816138ba565b925060208401356141aa816138ba565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b818110156141fc5783516001600160a01b0316835292840192918401916001016141d7565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561425a5761425a614208565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156142a7576142a7614208565b604052919050565b600080604083850312156142c257600080fd5b6142cb83613967565b915060208084013567ffffffffffffffff808211156142e957600080fd5b9085019060a082880312156142fd57600080fd5b614305614237565b61430e83613955565b815261431b848401613955565b8482015261432b60408401613955565b6040820152606083013561433e816138ba565b606082015260808301358281111561435557600080fd5b80840193505087601f84011261436a57600080fd5b82358281111561437c5761437c614208565b6143ac857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614260565b925080835288858286010111156143c257600080fd5b8085850186850137600085828501015250816080820152809450505050509250929050565b60008060008060008060c0878903121561440057600080fd5b863561440b816138ba565b9550602087013561441b816138ba565b9450604087013561442b816138ba565b959894975094956060810135955060808101359460a0909101359350915050565b600080600080600080600080610100898b03121561446957600080fd5b8835614474816138ba565b9750602089013596506040890135955060608901356139c5816138ba565b60008082840360408112156144a657600080fd5b83356144b1816138ba565b925060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820112156144e357600080fd5b506020830190509250929050565b60006020828403121561450357600080fd5b8151611185816138ba565b60006101a08201905086825285602083015284604083015283606083015282516080830152602083015160a083015260408301516001600160a01b0380821660c08501528060608601511660e08501525050608083015161010061457c818501836001600160a01b03169052565b60a0850151151561012085015260c08501516001600160a01b0390811661014086015260e086015160ff166101608601529085015190811661018085015290505b509695505050505050565b6020815260006111856020830184613e17565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110614641577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b6000610100820190508582528460208301528360408301526001600160a01b0380845116606084015260208401516080840152604084015161468a60a085018261460a565b5060608401511660c0830152608090920151151560e0909101529392505050565b6000602082840312156146bd57600080fd5b5051919050565b8281526040602082015260006001600160a01b038084511660408401528060208501511660608401525060408301516080830152606083015160e060a0840152614712610120840182613e17565b905061ffff60808501511660c084015260a084015160e084015260c0840151610100840152809150509392505050565b600181811c9082168061475657607f821691505b602082108114156132c1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000610120820190508482528360208301526001600160a01b038084511660408401528060208501511660608401528060408501511660808401528060608501511660a08401528060808501511660c08401525060a08301516147f960e084018261ffff169052565b5060c083015161ffff811661010084015250949350505050565b60006020828403121561482557600080fd5b8151611185816138df565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168181141561487757614877614830565b6001019392505050565b848152602081018490526001600160a01b03831660408201526080810161142f606083018461460a565b83815260406020808301829052908201839052600090849060608401835b868110156148f75783356148dc816138ba565b6001600160a01b0316825292820192908201906001016148c9565b50979650505050505050565b85815260208101859052604081018490526060810183905281516001600160a01b03166080820152610200810160208301516001600160a01b03811660a08401525060408301516001600160a01b03811660c084015250606083015160e083015260808301516101006149788185018361460a565b60a085015191506101206149918186018461ffff169052565b60c086015192506101406149a88187018515159052565b60e08701516101608781019190915292870151610180870152908601516001600160a01b039081166101a08701529086015160ff166101c0860152908501519081166101e085015290506145bd565b600081518084526020808501945080840160005b83811015614a305781516001600160a01b031687529582019590820190600101614a0b565b509495945050505050565b600081518084526020808501945080840160005b83811015614a3057815187529582019590820190600101614a4f565b85815284602082015283604082015282606082015260a06080820152614a9d60a0820183516001600160a01b03169052565b600060208301516101c08060c0850152614abb6102608501836149f7565b915060408501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60808685030160e0870152614af78483614a3b565b935060608701519150610100818786030181880152614b168584614a3b565b945060808801519250610120614b36818901856001600160a01b03169052565b60a089015193506101408389880301818a0152614b538786613e17565b965060c08a015194506101609350614b70848a018661ffff169052565b60e08a0151945061018085818b0152838b015195506101a0935085848b0152828b0151878b0152818b01516101e08b0152848b01519650614bbd6102008b01886001600160a01b03169052565b8a015160ff81166102208b01529550614bd4915050565b87015180151561024088015292506148f7915050565b60008060008060008060c08789031215614c0357600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b600082821015614c4657614c46614830565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614cac57614cac614830565b5060010190565b60006101a0820190508682528560208301528460408301528360608301526001600160a01b038084511660808401528060208501511660a0840152506040830151614d0960c08401826001600160a01b03169052565b50606083015160e08301526080830151610100818185015260a085015161012085015260c085015161014085015260e08501519150614d546101608501836001600160a01b03169052565b84015160ff811661018085015290506145bd565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614da057614da0614830565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008219821115614de757614de7614830565b500190565b600082614e22577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212200419be14b009a01de63659f143e2a2572aeeeafafb6d79b08b2f7c1faa5810b664736f6c634300080a0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x4F57 CODESIZE SUB DUP1 PUSH3 0x4F57 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x38 SWAP2 PUSH3 0x4A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH3 0x7C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x4E5D PUSH3 0xFA PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x356 ADD MSTORE DUP2 DUP2 PUSH2 0x9D9 ADD MSTORE DUP2 DUP2 PUSH2 0xAB1 ADD MSTORE DUP2 DUP2 PUSH2 0xF3F ADD MSTORE DUP2 DUP2 PUSH2 0x1492 ADD MSTORE DUP2 DUP2 PUSH2 0x17D0 ADD MSTORE DUP2 DUP2 PUSH2 0x1E11 ADD MSTORE DUP2 DUP2 PUSH2 0x1ED5 ADD MSTORE DUP2 DUP2 PUSH2 0x20F4 ADD MSTORE DUP2 DUP2 PUSH2 0x23C8 ADD MSTORE DUP2 DUP2 PUSH2 0x261A ADD MSTORE DUP2 DUP2 PUSH2 0x2BDB ADD MSTORE DUP2 DUP2 PUSH2 0x313C ADD MSTORE DUP2 DUP2 PUSH2 0x32C9 ADD MSTORE PUSH2 0x343C ADD MSTORE PUSH2 0x4E5D 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 0x309 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7A708E92 GT PUSH2 0x19C JUMPI DUP1 PUSH4 0xD15E0053 GT PUSH2 0xEE JUMPI DUP1 PUSH4 0xE82FEC2F GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xEE3E210B GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xEE3E210B EQ PUSH2 0x91F JUMPI DUP1 PUSH4 0xF51E435B EQ PUSH2 0x932 JUMPI DUP1 PUSH4 0xF8119D51 EQ PUSH2 0x945 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE82FEC2F EQ PUSH2 0x8E1 JUMPI DUP1 PUSH4 0xE8EDA9DF EQ PUSH2 0x6A6 JUMPI DUP1 PUSH4 0xEDDF1B79 EQ PUSH2 0x8F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD5ED3933 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0xD5ED3933 EQ PUSH2 0x8A8 JUMPI DUP1 PUSH4 0xD65DC7A1 EQ PUSH2 0x8BB JUMPI DUP1 PUSH4 0xE43E88A1 EQ PUSH2 0x8CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD15E0053 EQ PUSH2 0x86D JUMPI DUP1 PUSH4 0xD1946DBC EQ PUSH2 0x880 JUMPI DUP1 PUSH4 0xD579EA7D EQ PUSH2 0x895 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCB6E522 GT PUSH2 0x150 JUMPI DUP1 PUSH4 0xC4D66DE8 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x834 JUMPI DUP1 PUSH4 0xCD112382 EQ PUSH2 0x847 JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0x85A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCB6E522 EQ PUSH2 0x79F JUMPI DUP1 PUSH4 0xBF92857C EQ PUSH2 0x7B2 JUMPI DUP1 PUSH4 0xC44B11F7 EQ PUSH2 0x7F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9CD19996 GT PUSH2 0x181 JUMPI DUP1 PUSH4 0x9CD19996 EQ PUSH2 0x766 JUMPI DUP1 PUSH4 0xA415BCAD EQ PUSH2 0x779 JUMPI DUP1 PUSH4 0xAB9C4B5D EQ PUSH2 0x78C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7A708E92 EQ PUSH2 0x740 JUMPI DUP1 PUSH4 0x94BA89A2 EQ PUSH2 0x753 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x386497FD GT PUSH2 0x260 JUMPI DUP1 PUSH4 0x617BA037 GT PUSH2 0x209 JUMPI DUP1 PUSH4 0x69A933A5 GT PUSH2 0x1E3 JUMPI DUP1 PUSH4 0x69A933A5 EQ PUSH2 0x6DF JUMPI DUP1 PUSH4 0x6A99C036 EQ PUSH2 0x6F2 JUMPI DUP1 PUSH4 0x6C6F6AE1 EQ PUSH2 0x720 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x617BA037 EQ PUSH2 0x6A6 JUMPI DUP1 PUSH4 0x63C9B860 EQ PUSH2 0x6B9 JUMPI DUP1 PUSH4 0x69328DEC EQ PUSH2 0x6CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52751797 GT PUSH2 0x23A JUMPI DUP1 PUSH4 0x52751797 EQ PUSH2 0x653 JUMPI DUP1 PUSH4 0x573ADE81 EQ PUSH2 0x680 JUMPI DUP1 PUSH4 0x5A3B74B9 EQ PUSH2 0x693 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x386497FD EQ PUSH2 0x5DC JUMPI DUP1 PUSH4 0x42B0B77C EQ PUSH2 0x5EF JUMPI DUP1 PUSH4 0x4417A583 EQ PUSH2 0x602 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1D2118F9 GT PUSH2 0x2C2 JUMPI DUP1 PUSH4 0x2DAD97D4 GT PUSH2 0x29C JUMPI DUP1 PUSH4 0x2DAD97D4 EQ PUSH2 0x3F5 JUMPI DUP1 PUSH4 0x3036B439 EQ PUSH2 0x408 JUMPI DUP1 PUSH4 0x35EA6A75 EQ PUSH2 0x41B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1D2118F9 EQ PUSH2 0x3C7 JUMPI DUP1 PUSH4 0x272D9072 EQ PUSH2 0x3DA JUMPI DUP1 PUSH4 0x28530A47 EQ PUSH2 0x3E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2C205F0 GT PUSH2 0x2F3 JUMPI DUP1 PUSH4 0x2C205F0 EQ PUSH2 0x33E JUMPI DUP1 PUSH4 0x542975C EQ PUSH2 0x351 JUMPI DUP1 PUSH4 0x74B2E43 EQ PUSH2 0x390 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH3 0xA718A9 EQ PUSH2 0x30E JUMPI DUP1 PUSH4 0x148170E EQ PUSH2 0x323 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x321 PUSH2 0x31C CALLDATASIZE PUSH1 0x4 PUSH2 0x38ED JUMP JUMPDEST PUSH2 0x954 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x32B PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x321 PUSH2 0x34C CALLDATASIZE PUSH1 0x4 PUSH2 0x3978 JUMP JUMPDEST PUSH2 0xB81 JUMP JUMPDEST PUSH2 0x378 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x335 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x335 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x3D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x39F7 JUMP JUMPDEST PUSH2 0xD17 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x32B JUMP JUMPDEST PUSH2 0x321 PUSH2 0x3F0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A30 JUMP JUMPDEST PUSH2 0xED1 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x403 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A4B JUMP JUMPDEST PUSH2 0x106F JUMP JUMPDEST PUSH2 0x321 PUSH2 0x416 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A80 JUMP JUMPDEST PUSH2 0x118C JUMP JUMPDEST PUSH2 0x5CF PUSH2 0x429 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A99 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x200 DUP2 ADD DUP3 MSTORE PUSH1 0x0 PUSH2 0x1E0 DUP3 ADD DUP2 DUP2 MSTORE DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1A0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x200 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH2 0x1E0 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH17 0x100000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP5 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x2 DUP3 ADD SLOAD DUP1 DUP5 AND PUSH1 0x60 DUP4 ADD MSTORE DUP5 SWAP1 DIV DUP4 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x3 DUP3 ADD SLOAD DUP1 DUP5 AND PUSH1 0xA0 DUP4 ADD MSTORE DUP5 DUP2 DIV PUSH5 0xFFFFFFFFFF AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD DUP6 AND PUSH2 0x100 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD DUP6 AND PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD DUP6 AND PUSH2 0x140 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD SWAP1 SWAP5 AND PUSH2 0x160 DUP6 ADD MSTORE PUSH1 0x8 DUP2 ADD SLOAD DUP1 DUP4 AND PUSH2 0x180 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP3 DIV DUP2 AND PUSH2 0x1A0 DUP5 ADD MSTORE PUSH1 0x9 SWAP1 SWAP2 ADD SLOAD AND PUSH2 0x1C0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x335 SWAP2 SWAP1 PUSH2 0x3AB6 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x5EA CALLDATASIZE PUSH1 0x4 PUSH2 0x3A99 JUMP JUMPDEST PUSH2 0x1199 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x5FD CALLDATASIZE PUSH1 0x4 PUSH2 0x3C6F JUMP JUMPDEST PUSH2 0x11C0 JUMP JUMPDEST PUSH2 0x644 PUSH2 0x610 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A99 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND DUP2 MSTORE PUSH1 0x35 DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 MLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x335 JUMP JUMPDEST PUSH2 0x378 PUSH2 0x661 CALLDATASIZE PUSH1 0x4 PUSH2 0x3CF1 JUMP JUMPDEST PUSH2 0xFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x68E CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0C JUMP JUMPDEST PUSH2 0x1313 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x6A1 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D56 JUMP JUMPDEST PUSH2 0x1438 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x6B4 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D84 JUMP JUMPDEST PUSH2 0x15D9 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x6C7 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A99 JUMP JUMPDEST PUSH2 0x16CF JUMP JUMPDEST PUSH2 0x32B PUSH2 0x6DA CALLDATASIZE PUSH1 0x4 PUSH2 0x3DD5 JUMP JUMPDEST PUSH2 0x173E JUMP JUMPDEST PUSH2 0x321 PUSH2 0x6ED CALLDATASIZE PUSH1 0x4 PUSH2 0x3D84 JUMP JUMPDEST PUSH2 0x190F JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3A6 JUMP JUMPDEST PUSH2 0x733 PUSH2 0x72E CALLDATASIZE PUSH1 0x4 PUSH2 0x3A30 JUMP JUMPDEST PUSH2 0x19AF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x335 SWAP2 SWAP1 PUSH2 0x3E82 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x74E CALLDATASIZE PUSH1 0x4 PUSH2 0x3ED8 JUMP JUMPDEST PUSH2 0x1ADC JUMP JUMPDEST PUSH2 0x321 PUSH2 0x761 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F3B JUMP JUMPDEST PUSH2 0x1C27 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x774 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FAC JUMP JUMPDEST PUSH2 0x1C9B JUMP JUMPDEST PUSH2 0x321 PUSH2 0x787 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FEE JUMP JUMPDEST PUSH2 0x1CF0 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x79A CALLDATASIZE PUSH1 0x4 PUSH2 0x402D JUMP JUMPDEST PUSH2 0x1F6E JUMP JUMPDEST PUSH2 0x321 PUSH2 0x7AD CALLDATASIZE PUSH1 0x4 PUSH2 0x4147 JUMP JUMPDEST PUSH2 0x22E6 JUMP JUMPDEST PUSH2 0x7C5 PUSH2 0x7C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A99 JUMP JUMPDEST PUSH2 0x231D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH2 0x335 JUMP JUMPDEST PUSH2 0x644 PUSH2 0x800 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A99 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND DUP2 MSTORE PUSH1 0x34 DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x842 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A99 JUMP JUMPDEST PUSH2 0x2532 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x855 CALLDATASIZE PUSH1 0x4 PUSH2 0x39F7 JUMP JUMPDEST PUSH2 0x271C JUMP JUMPDEST PUSH2 0x321 PUSH2 0x868 CALLDATASIZE PUSH1 0x4 PUSH2 0x417A JUMP JUMPDEST PUSH2 0x2798 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x87B CALLDATASIZE PUSH1 0x4 PUSH2 0x3A99 JUMP JUMPDEST PUSH2 0x2838 JUMP JUMPDEST PUSH2 0x888 PUSH2 0x2859 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x335 SWAP2 SWAP1 PUSH2 0x41BB JUMP JUMPDEST PUSH2 0x321 PUSH2 0x8A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x42AF JUMP JUMPDEST PUSH2 0x2961 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x8B6 CALLDATASIZE PUSH1 0x4 PUSH2 0x43E7 JUMP JUMPDEST PUSH2 0x2AC0 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x8C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A4B JUMP JUMPDEST PUSH2 0x2CF9 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x8DC CALLDATASIZE PUSH1 0x4 PUSH2 0x3A99 JUMP JUMPDEST PUSH2 0x2D8C JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0x32B JUMP JUMPDEST PUSH2 0x32B PUSH2 0x901 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A99 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x92D CALLDATASIZE PUSH1 0x4 PUSH2 0x444C JUMP JUMPDEST PUSH2 0x2DF4 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x940 CALLDATASIZE PUSH1 0x4 PUSH2 0x4492 JUMP JUMPDEST PUSH2 0x2FA8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x80 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x335 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x83C1087D PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x37 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA35 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA59 SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP12 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x5EB88D3D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP5 ADD SWAP4 PUSH32 0x0 SWAP1 SWAP4 AND SWAP3 PUSH4 0x5EB88D3D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAFA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB1E SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xB4A SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x450E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xB76 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC1A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP14 DUP7 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP13 DUP2 MSTORE DUP3 DUP5 ADD SWAP5 DUP6 MSTORE PUSH2 0xFFFF DUP12 DUP2 AND PUSH1 0x60 DUP6 ADD SWAP1 DUP2 MSTORE SWAP5 MLOAD PUSH32 0x1913F16100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 MLOAD DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE MLOAD PUSH1 0x84 DUP3 ADD MSTORE SWAP3 MLOAD SWAP1 SWAP4 AND PUSH1 0xA4 DUP4 ADD MSTORE MLOAD SWAP1 SWAP2 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1913F161 SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xCF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xD09 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xD1F PUSH2 0x3130 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xD9D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD94 SWAP2 SWAP1 PUSH2 0x45C8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0xE19 JUMPI POP PUSH1 0x0 DUP1 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH32 0x4CB2B152C1B54CE671907A93C300FD5AA72383A9D4EC19A81E3333632AE92E00 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xE87 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD94 SWAP2 SWAP1 PUSH2 0x45C8 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0x0 PUSH4 0x5D5DC313 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x38 PUSH1 0x35 PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF9B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xFBF SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0xFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP8 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x103C SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 SWAP6 DUP7 MSTORE PUSH1 0x20 DUP1 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x40 DUP1 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP6 ADD MSTORE DUP1 MLOAD PUSH1 0xA0 DUP6 ADD MSTORE SWAP2 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xC0 DUP5 ADD MSTORE ADD MLOAD PUSH1 0xFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1054 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1068 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x40E95DE6 PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x10E6 JUMPI PUSH2 0x10E6 PUSH2 0x45DB JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x10F7 JUMPI PUSH2 0x10F7 PUSH2 0x45DB JUMP JUMPDEST DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x40 SWAP2 DUP3 ADD MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x1141 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x4645 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x115E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1182 SWAP2 SWAP1 PUSH2 0x46AB JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1194 PUSH2 0x3130 JUMP JUMPDEST PUSH1 0x39 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x11BA SWAP1 PUSH2 0x3237 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP6 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 DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH2 0xFFFF DUP6 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV DUP2 AND PUSH1 0x40 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x60 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND DUP3 MSTORE PUSH1 0x34 SWAP1 MSTORE DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0xA1FE0E8D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0xA1FE0E8D SWAP2 PUSH2 0x12DA SWAP2 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x46C4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1306 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x40E95DE6 PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x0 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x138A JUMPI PUSH2 0x138A PUSH2 0x45DB JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x139B JUMPI PUSH2 0x139B PUSH2 0x45DB JUMP JUMPDEST DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x40 SWAP2 DUP3 ADD MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x13EE SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x4645 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x140B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x142F SWAP2 SWAP1 PUSH2 0x46AB JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH20 0x0 PUSH4 0xBF697A26 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP8 DUP8 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14EE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1512 SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0xE0 DUP12 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP10 SWAP1 SWAP10 MSTORE PUSH1 0x24 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x44 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x64 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x84 DUP8 ADD MSTORE ISZERO ISZERO PUSH1 0xA4 DUP7 ADD MSTORE PUSH2 0xFFFF SWAP1 SWAP2 AND PUSH1 0xC4 DUP6 ADD MSTORE AND PUSH1 0xE4 DUP4 ADD MSTORE PUSH1 0xFF AND PUSH2 0x104 DUP3 ADD MSTORE PUSH2 0x124 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x15BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x15D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP10 DUP7 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP9 DUP2 MSTORE DUP3 DUP5 ADD SWAP5 DUP6 MSTORE PUSH2 0xFFFF DUP8 DUP2 AND PUSH1 0x60 DUP6 ADD SWAP1 DUP2 MSTORE SWAP5 MLOAD PUSH32 0x1913F16100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 MLOAD DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE MLOAD PUSH1 0x84 DUP3 ADD MSTORE SWAP3 MLOAD SWAP1 SWAP4 AND PUSH1 0xA4 DUP4 ADD MSTORE MLOAD SWAP1 SWAP2 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1913F161 SWAP1 PUSH1 0xE4 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x16C5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x16D7 PUSH2 0x3130 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x9CF5702300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x9CF57023 SWAP1 PUSH1 0x64 ADD PUSH2 0x103C JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x186DEA44 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x182C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1850 SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP12 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP10 SWAP1 SWAP10 MSTORE PUSH1 0x24 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x44 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x64 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP2 MLOAD DUP4 AND PUSH1 0x84 DUP8 ADD MSTORE SWAP4 DUP2 ADD MLOAD PUSH1 0xA4 DUP7 ADD MSTORE SWAP2 DUP3 ADD MLOAD DUP2 AND PUSH1 0xC4 DUP6 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0xE4 DUP6 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD AND PUSH2 0x104 DUP5 ADD MSTORE PUSH1 0xA0 ADD MLOAD AND PUSH2 0x124 DUP3 ADD MSTORE PUSH2 0x144 ADD PUSH2 0x1141 JUMP JUMPDEST PUSH2 0x1917 PUSH2 0x32C7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x413C86F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x413C86F SWAP1 PUSH1 0xE4 ADD PUSH2 0x1699 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xA0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND DUP4 MSTORE PUSH3 0x10000 DUP3 DIV DUP2 AND SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH5 0x100000000 DUP2 DIV SWAP1 SWAP4 AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH7 0x1000000000000 SWAP1 SWAP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0x80 DUP5 ADD SWAP2 SWAP1 PUSH2 0x1A53 SWAP1 PUSH2 0x4742 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1A7F SWAP1 PUSH2 0x4742 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1ACC JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1AA1 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1ACC 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 0x1AAF JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1AE4 PUSH2 0x3130 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x69FC1BDF PUSH1 0x34 PUSH1 0x36 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1B7A PUSH1 0x80 SWAP1 JUMP JUMPDEST PUSH2 0xFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1B9F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4790 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1BBC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1BE0 SWAP2 SWAP1 PUSH2 0x4813 JUMP JUMPDEST ISZERO PUSH2 0x1068 JUMPI PUSH1 0x3B DUP1 SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND SWAP1 PUSH1 0x8 PUSH2 0x1C05 DUP4 PUSH2 0x485F JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH2 0xFFFF MUL NOT AND SWAP1 DUP4 PUSH2 0xFFFF AND MUL OR SWAP1 SSTORE POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE PUSH1 0x35 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 PUSH20 0x0 SWAP2 PUSH4 0xEAC4D703 SWAP2 DUP6 DUP6 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1C7C JUMPI PUSH2 0x1C7C PUSH2 0x45DB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x15A5 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4881 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x48C2CA8C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x48C2CA8C SWAP1 PUSH2 0x15A5 SWAP1 PUSH1 0x34 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x48AB JUMP JUMPDEST PUSH20 0x0 PUSH4 0x1E6473F9 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1D86 JUMPI PUSH2 0x1D86 PUSH2 0x45DB JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1D97 JUMPI PUSH2 0x1D97 PUSH2 0x45DB JUMP JUMPDEST DUP2 MSTORE PUSH2 0xFFFF DUP1 DUP12 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x40 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH9 0x10000000000000000 SWAP1 DIV SWAP1 SWAP3 AND PUSH1 0x80 DUP5 ADD MSTORE DUP2 MLOAD PUSH32 0xFCA513A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 MLOAD PUSH1 0xA0 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP3 PUSH4 0xFCA513A8 SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP2 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E59 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E7D SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x5EB88D3D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP5 ADD SWAP4 PUSH32 0x0 SWAP1 SWAP4 AND SWAP3 PUSH4 0x5EB88D3D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F1E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F42 SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xB4A SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4903 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1C0 ADD PUSH1 0x40 MSTORE DUP1 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 DUP13 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP13 DUP2 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP13 DUP3 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 DUP14 SWAP2 DUP14 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP11 DUP2 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP11 DUP3 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 DUP12 SWAP2 DUP12 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F DUP9 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD DUP3 MSTORE DUP8 DUP2 MSTORE SWAP3 ADD SWAP2 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH2 0xFFFF DUP1 DUP7 AND PUSH1 0x20 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV DUP2 AND PUSH1 0x40 DUP1 DUP9 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x80 DUP8 ADD MSTORE PUSH9 0x10000000000000000 SWAP1 DIV SWAP1 SWAP3 AND PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0xC0 DUP7 ADD DUP2 SWAP1 MSTORE SWAP1 DUP12 AND DUP5 MSTORE PUSH1 0x38 DUP3 MSTORE SWAP3 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0xE0 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 MLOAD PUSH2 0x100 SWAP1 SWAP5 ADD SWAP4 PUSH4 0x707CD716 SWAP3 PUSH1 0x4 DUP1 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2187 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x21AB SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFA50F29700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xFA50F297 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x220A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x222E SWAP2 SWAP1 PUSH2 0x4813 JUMP JUMPDEST ISZERO ISZERO SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x2E7263EA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x2E7263EA SWAP2 PUSH2 0x22A8 SWAP2 PUSH1 0x34 SWAP2 PUSH1 0x36 SWAP2 PUSH1 0x37 SWAP2 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x4A6B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x22C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x22D4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x22EE PUSH2 0x3130 JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP2 AND OR PUSH1 0x3A SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE DUP6 DUP3 KECCAK256 PUSH1 0xC0 DUP7 ADD DUP8 MSTORE SLOAD PUSH1 0xA0 DUP7 ADD SWAP1 DUP2 MSTORE DUP6 MSTORE PUSH1 0x3B SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND DUP2 DUP7 ADD MSTORE DUP5 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP5 MLOAD PUSH32 0xFCA513A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP5 MLOAD SWAP1 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 PUSH20 0x0 SWAP5 PUSH4 0x26EC273F SWAP5 PUSH1 0x34 SWAP5 PUSH1 0x36 SWAP5 PUSH1 0x37 SWAP5 PUSH1 0x60 DUP6 ADD SWAP4 PUSH32 0x0 AND SWAP3 PUSH4 0xFCA513A8 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x240E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2432 SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP15 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP11 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH1 0x24 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x44 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP3 MLOAD MLOAD PUSH1 0x64 DUP8 ADD MSTORE SWAP4 DUP3 ADD MLOAD PUSH1 0x84 DUP7 ADD MSTORE SWAP2 DUP2 ADD MLOAD DUP4 AND PUSH1 0xA4 DUP6 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP1 SWAP3 AND PUSH1 0xC4 DUP5 ADD MSTORE PUSH1 0x80 SWAP1 SWAP2 ADD MLOAD AND PUSH1 0xE4 DUP3 ADD MSTORE PUSH2 0x104 ADD PUSH1 0xC0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x24FA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x251E SWAP2 SWAP1 PUSH2 0x4BEA JUMP JUMPDEST SWAP5 SWAP13 SWAP4 SWAP12 POP SWAP2 SWAP10 POP SWAP8 POP SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x2543 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x254F JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x25DB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xD94 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x2618 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3132000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x26BB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD94 SWAP2 SWAP1 PUSH2 0x45C8 JUMP JUMPDEST POP PUSH1 0x3B DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH2 0x9C4 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x2717 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x6973F74400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x6973F744 SWAP1 PUSH1 0x64 ADD PUSH2 0x15A5 JUMP JUMPDEST PUSH2 0x27A0 PUSH2 0x343A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x87B322B200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x87B322B2 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x281B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x282F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x11BA SWAP1 PUSH2 0x35AD JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH1 0x60 SWAP1 PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 DUP1 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x288B JUMPI PUSH2 0x288B PUSH2 0x4208 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x28B4 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2957 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x2937 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH2 0x2902 DUP6 DUP5 PUSH2 0x4C34 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x2912 JUMPI PUSH2 0x2912 PUSH2 0x4C4B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH2 0x2945 JUMP JUMPDEST DUP3 PUSH2 0x2941 DUP2 PUSH2 0x4C7A JUMP JUMPDEST SWAP4 POP POP JUMPDEST DUP1 PUSH2 0x294F DUP2 PUSH2 0x4C7A JUMP JUMPDEST SWAP2 POP POP PUSH2 0x28BA JUMP JUMPDEST POP SWAP2 SUB DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2969 PUSH2 0x3130 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3136000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP4 AND PUSH2 0x29D8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD94 SWAP2 SWAP1 PUSH2 0x45C8 JUMP JUMPDEST POP PUSH1 0xFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD DUP4 DUP7 ADD MLOAD SWAP5 DUP7 ADD MLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH7 0x1000000000000 MUL PUSH32 0xFFFFFFFFFFFF0000000000000000000000000000000000000000FFFFFFFFFFFF PUSH2 0xFFFF SWAP3 DUP4 AND PUSH5 0x100000000 MUL AND PUSH32 0xFFFFFFFFFFFF00000000000000000000000000000000000000000000FFFFFFFF SWAP8 DUP4 AND PUSH3 0x10000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 SWAP1 SWAP5 AND SWAP3 SWAP1 SWAP5 AND SWAP2 SWAP1 SWAP2 OR SWAP2 SWAP1 SWAP2 OR SWAP5 SWAP1 SWAP5 AND OR SWAP3 SWAP1 SWAP3 OR DUP3 SSTORE PUSH1 0x80 DUP4 ADD MLOAD DUP1 MLOAD DUP5 SWAP4 SWAP3 PUSH2 0x1068 SWAP3 PUSH1 0x1 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x3821 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP4 MSTORE PUSH32 0x3131000000000000000000000000000000000000000000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 AND CALLER EQ PUSH2 0x2B51 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD94 SWAP2 SWAP1 PUSH2 0x45C8 JUMP JUMPDEST POP PUSH20 0x0 PUSH4 0x8A5DADD1 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C37 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2C5B SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP14 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP9 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x2CC1 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x4CB3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2CD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2CED JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D03 PUSH2 0x32C7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x39 SLOAD SWAP2 MLOAD PUSH32 0x8E74324800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x44 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0x64 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x8E743248 SWAP1 PUSH1 0xA4 ADD PUSH2 0x1141 JUMP JUMPDEST PUSH2 0x2D94 PUSH2 0x3130 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x1E3B414500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1E3B4145 SWAP1 PUSH1 0x44 ADD PUSH2 0x103C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E7C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2E90 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2EC8 JUMPI PUSH2 0x2EC8 PUSH2 0x45DB JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2ED9 JUMPI PUSH2 0x2ED9 PUSH2 0x45DB JUMP JUMPDEST DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x40 SWAP4 DUP5 ADD DUP2 SWAP1 MSTORE SWAP2 DUP3 MSTORE PUSH1 0x35 SWAP1 MSTORE DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x40E95DE600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x40E95DE6 SWAP2 PUSH2 0x2F59 SWAP2 PUSH1 0x34 SWAP2 PUSH1 0x36 SWAP2 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x4645 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2F76 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F9A SWAP2 SWAP1 PUSH2 0x46AB JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x2FB0 PUSH2 0x3130 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x3025 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD94 SWAP2 SWAP1 PUSH2 0x45C8 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x30A1 JUMPI POP PUSH1 0x0 DUP1 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH32 0x4CB2B152C1B54CE671907A93C300FD5AA72383A9D4EC19A81E3333632AE92E00 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x310F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD94 SWAP2 SWAP1 PUSH2 0x45C8 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 CALLDATALOAD SWAP1 SSTORE JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x631ADFCA PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3198 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x31BC SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3130000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3234 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD94 SWAP2 SWAP1 PUSH2 0x45C8 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x327D JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x1185 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x32BB SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x3631 JUMP JUMPDEST SWAP1 PUSH2 0x363E JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3325 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3349 SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x726600CE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x726600CE SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x33A8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x33CC SWAP2 SWAP1 PUSH2 0x4813 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3600000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3234 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD94 SWAP2 SWAP1 PUSH2 0x45C8 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3498 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x34BC SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x351B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x353F SWAP2 SWAP1 PUSH2 0x4813 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3234 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD94 SWAP2 SWAP1 PUSH2 0x45C8 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x35F3 JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x1185 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x32BB SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x3695 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1185 DUP4 DUP4 TIMESTAMP PUSH2 0x36DA JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x3673 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x36A9 PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x4C34 JUMP JUMPDEST PUSH2 0x36B3 SWAP1 DUP6 PUSH2 0x4D68 JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x36D2 DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x4DD4 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x36EE PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x4C34 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x370A JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x1185 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x3740 JUMPI PUSH1 0x0 PUSH2 0x3745 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x3759 DUP11 DUP1 PUSH2 0x363E JUMP JUMPDEST DUP2 PUSH2 0x3766 JUMPI PUSH2 0x3766 PUSH2 0x4DA5 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x3778 DUP4 DUP12 PUSH2 0x363E JUMP JUMPDEST DUP2 PUSH2 0x3785 JUMPI PUSH2 0x3785 PUSH2 0x4DA5 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x3795 DUP7 DUP9 PUSH2 0x4D68 JUMP JUMPDEST PUSH2 0x379F SWAP2 SWAP1 PUSH2 0x4D68 JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x37B3 DUP9 DUP11 PUSH2 0x4D68 JUMP JUMPDEST PUSH2 0x37BD SWAP2 SWAP1 PUSH2 0x4D68 JUMP JUMPDEST PUSH2 0x37C7 SWAP2 SWAP1 PUSH2 0x4D68 JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x37DE DUP11 DUP16 PUSH2 0x4D68 JUMP JUMPDEST PUSH2 0x37E8 SWAP2 SWAP1 PUSH2 0x4DEC JUMP JUMPDEST PUSH2 0x37FE SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x4DD4 JUMP JUMPDEST PUSH2 0x3808 SWAP2 SWAP1 PUSH2 0x4DD4 JUMP JUMPDEST PUSH2 0x3812 SWAP2 SWAP1 PUSH2 0x4DD4 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x382D SWAP1 PUSH2 0x4742 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x384F JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x3895 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x3868 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x3895 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x3895 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x3895 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x387A JUMP JUMPDEST POP PUSH2 0x38A1 SWAP3 SWAP2 POP PUSH2 0x38A5 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x38A1 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x38A6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3234 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x38DA DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3234 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3905 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x3910 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x3920 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x3930 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x3947 DUP2 PUSH2 0x38DF JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x38DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x38DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x3995 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x39A0 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH2 0x39B7 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP6 POP PUSH2 0x39C5 PUSH1 0x60 DUP11 ADD PUSH2 0x3955 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD SWAP4 POP PUSH2 0x39DA PUSH1 0xA0 DUP11 ADD PUSH2 0x3967 JUMP JUMPDEST SWAP3 POP PUSH1 0xC0 DUP10 ADD CALLDATALOAD SWAP2 POP PUSH1 0xE0 DUP10 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 SWAP1 SWAP4 SWAP7 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3A0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3A15 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3A25 DUP2 PUSH2 0x38BA JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3A42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1185 DUP3 PUSH2 0x3967 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3A60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3A6B DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3A92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3AAB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1185 DUP2 PUSH2 0x38BA JUMP JUMPDEST DUP2 MLOAD MLOAD DUP2 MSTORE PUSH2 0x1E0 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x3AE3 PUSH1 0x20 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x3B07 PUSH1 0x40 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x3B2B PUSH1 0x60 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x3B4F PUSH1 0x80 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x3B73 PUSH1 0xA0 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0x3B8C PUSH1 0xC0 DUP5 ADD DUP3 PUSH5 0xFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0x3BA2 PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH2 0x100 DUP4 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x120 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x140 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x160 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP1 DUP5 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x1C0 SWAP4 DUP5 ADD MLOAD AND SWAP3 SWAP1 SWAP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x3C38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3C50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x3C68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x3C88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x3C93 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x3CA3 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3CC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3CD2 DUP10 DUP3 DUP11 ADD PUSH2 0x3C26 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0x3CE5 SWAP1 POP PUSH1 0x80 DUP9 ADD PUSH2 0x3955 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3D03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1185 DUP3 PUSH2 0x3955 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3D22 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x3D2D DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x3D4B DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3D69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3D74 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3A25 DUP2 PUSH2 0x38DF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3D9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x3DA5 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x3DBC DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP2 POP PUSH2 0x3DCA PUSH1 0x60 DUP7 ADD PUSH2 0x3955 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3DEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3DF5 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x3E0C DUP2 PUSH2 0x38BA JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3E3D JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x3E21 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x3E4F JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP5 MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0xA0 DUP1 DUP5 ADD MSTORE PUSH2 0x36D2 PUSH1 0xC0 DUP5 ADD DUP3 PUSH2 0x3E17 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3EF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x3EFB DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x3F0B DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x3F1B DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x3F2B DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x3947 DUP2 PUSH2 0x38BA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3F4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3F59 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x3F79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3F91 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x3C68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3FBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3FD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3FE2 DUP6 DUP3 DUP7 ADD PUSH2 0x3F67 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4006 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4011 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x3F2B PUSH1 0x60 DUP8 ADD PUSH2 0x3955 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x404E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4057 DUP13 PUSH2 0x38CF JUMP JUMPDEST SWAP11 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0x20 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x4073 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4083 DUP15 PUSH1 0x20 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x3F67 JUMP JUMPDEST SWAP1 SWAP12 POP SWAP10 POP PUSH1 0x40 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x4099 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x40A9 DUP15 PUSH1 0x40 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x3F67 JUMP JUMPDEST SWAP1 SWAP10 POP SWAP8 POP PUSH1 0x60 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x40BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x40CF DUP15 PUSH1 0x60 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x3F67 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH2 0x40E0 PUSH1 0x80 DUP15 ADD PUSH2 0x38CF JUMP JUMPDEST SWAP5 POP DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x40F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4104 DUP14 PUSH1 0xA0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x3C26 JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x4115 PUSH1 0xC0 DUP14 ADD PUSH2 0x3955 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x38DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x415A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4163 DUP4 PUSH2 0x4127 JUMP JUMPDEST SWAP2 POP PUSH2 0x4171 PUSH1 0x20 DUP5 ADD PUSH2 0x4127 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x418F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x419A DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x41AA DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD 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 0x41FC JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x41D7 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x425A JUMPI PUSH2 0x425A PUSH2 0x4208 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x42A7 JUMPI PUSH2 0x42A7 PUSH2 0x4208 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x42C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x42CB DUP4 PUSH2 0x3967 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP1 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x42E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP6 ADD SWAP1 PUSH1 0xA0 DUP3 DUP9 SUB SLT ISZERO PUSH2 0x42FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4305 PUSH2 0x4237 JUMP JUMPDEST PUSH2 0x430E DUP4 PUSH2 0x3955 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x431B DUP5 DUP5 ADD PUSH2 0x3955 JUMP JUMPDEST DUP5 DUP3 ADD MSTORE PUSH2 0x432B PUSH1 0x40 DUP5 ADD PUSH2 0x3955 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH2 0x433E DUP2 PUSH2 0x38BA JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x4355 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP5 ADD SWAP4 POP POP DUP8 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x436A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x437C JUMPI PUSH2 0x437C PUSH2 0x4208 JUMP JUMPDEST PUSH2 0x43AC DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x4260 JUMP JUMPDEST SWAP3 POP DUP1 DUP4 MSTORE DUP9 DUP6 DUP3 DUP7 ADD ADD GT ISZERO PUSH2 0x43C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP6 DUP6 ADD DUP7 DUP6 ADD CALLDATACOPY PUSH1 0x0 DUP6 DUP3 DUP6 ADD ADD MSTORE POP DUP2 PUSH1 0x80 DUP3 ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x4400 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x440B DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x441B DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0x442B DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP5 SWAP6 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP6 POP PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP5 PUSH1 0xA0 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x4469 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x4474 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD SWAP6 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD PUSH2 0x39C5 DUP2 PUSH2 0x38BA JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 SUB PUSH1 0x40 DUP2 SLT ISZERO PUSH2 0x44A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x44B1 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP3 POP PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP3 ADD SLT ISZERO PUSH2 0x44E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 DUP4 ADD SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4503 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1185 DUP2 PUSH2 0x38BA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 ADD SWAP1 POP DUP7 DUP3 MSTORE DUP6 PUSH1 0x20 DUP4 ADD MSTORE DUP5 PUSH1 0x40 DUP4 ADD MSTORE DUP4 PUSH1 0x60 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0xC0 DUP6 ADD MSTORE DUP1 PUSH1 0x60 DUP7 ADD MLOAD AND PUSH1 0xE0 DUP6 ADD MSTORE POP POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x457C DUP2 DUP6 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD ISZERO ISZERO PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0xC0 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH2 0x140 DUP7 ADD MSTORE PUSH1 0xE0 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x160 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x180 DUP6 ADD MSTORE SWAP1 POP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1185 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3E17 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x4641 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 DUP3 ADD SWAP1 POP DUP6 DUP3 MSTORE DUP5 PUSH1 0x20 DUP4 ADD MSTORE DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x468A PUSH1 0xA0 DUP6 ADD DUP3 PUSH2 0x460A JUMP JUMPDEST POP PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x80 SWAP1 SWAP3 ADD MLOAD ISZERO ISZERO PUSH1 0xE0 SWAP1 SWAP2 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x46BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x4712 PUSH2 0x120 DUP5 ADD DUP3 PUSH2 0x3E17 JUMP JUMPDEST SWAP1 POP PUSH2 0xFFFF PUSH1 0x80 DUP6 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xA0 DUP5 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0xC0 DUP5 ADD MLOAD PUSH2 0x100 DUP5 ADD MSTORE DUP1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x4756 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x32C1 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP5 DUP3 MSTORE DUP4 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0x60 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE DUP1 PUSH1 0x80 DUP6 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x47F9 PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0xFFFF DUP2 AND PUSH2 0x100 DUP5 ADD MSTORE POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4825 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1185 DUP2 PUSH2 0x38DF JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x4877 JUMPI PUSH2 0x4877 PUSH2 0x4830 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD PUSH2 0x142F PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x460A JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE SWAP1 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP5 SWAP1 PUSH1 0x60 DUP5 ADD DUP4 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x48F7 JUMPI DUP4 CALLDATALOAD PUSH2 0x48DC DUP2 PUSH2 0x38BA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x48C9 JUMP JUMPDEST POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x200 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x4978 DUP2 DUP6 ADD DUP4 PUSH2 0x460A JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x120 PUSH2 0x4991 DUP2 DUP7 ADD DUP5 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xC0 DUP7 ADD MLOAD SWAP3 POP PUSH2 0x140 PUSH2 0x49A8 DUP2 DUP8 ADD DUP6 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MLOAD PUSH2 0x160 DUP8 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP8 ADD MLOAD PUSH2 0x180 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH2 0x1A0 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x1C0 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x45BD JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4A30 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x4A0B JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4A30 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x4A4F JUMP JUMPDEST DUP6 DUP2 MSTORE DUP5 PUSH1 0x20 DUP3 ADD MSTORE DUP4 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x4A9D PUSH1 0xA0 DUP3 ADD DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x1C0 DUP1 PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x4ABB PUSH2 0x260 DUP6 ADD DUP4 PUSH2 0x49F7 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP6 ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 DUP1 DUP7 DUP6 SUB ADD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x4AF7 DUP5 DUP4 PUSH2 0x4A3B JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP2 POP PUSH2 0x100 DUP2 DUP8 DUP7 SUB ADD DUP2 DUP9 ADD MSTORE PUSH2 0x4B16 DUP6 DUP5 PUSH2 0x4A3B JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP9 ADD MLOAD SWAP3 POP PUSH2 0x120 PUSH2 0x4B36 DUP2 DUP10 ADD DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP10 ADD MLOAD SWAP4 POP PUSH2 0x140 DUP4 DUP10 DUP9 SUB ADD DUP2 DUP11 ADD MSTORE PUSH2 0x4B53 DUP8 DUP7 PUSH2 0x3E17 JUMP JUMPDEST SWAP7 POP PUSH1 0xC0 DUP11 ADD MLOAD SWAP5 POP PUSH2 0x160 SWAP4 POP PUSH2 0x4B70 DUP5 DUP11 ADD DUP7 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP11 ADD MLOAD SWAP5 POP PUSH2 0x180 DUP6 DUP2 DUP12 ADD MSTORE DUP4 DUP12 ADD MLOAD SWAP6 POP PUSH2 0x1A0 SWAP4 POP DUP6 DUP5 DUP12 ADD MSTORE DUP3 DUP12 ADD MLOAD DUP8 DUP12 ADD MSTORE DUP2 DUP12 ADD MLOAD PUSH2 0x1E0 DUP12 ADD MSTORE DUP5 DUP12 ADD MLOAD SWAP7 POP PUSH2 0x4BBD PUSH2 0x200 DUP12 ADD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP11 ADD MLOAD PUSH1 0xFF DUP2 AND PUSH2 0x220 DUP12 ADD MSTORE SWAP6 POP PUSH2 0x4BD4 SWAP2 POP POP JUMP JUMPDEST DUP8 ADD MLOAD DUP1 ISZERO ISZERO PUSH2 0x240 DUP9 ADD MSTORE SWAP3 POP PUSH2 0x48F7 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x4C03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 MLOAD SWAP6 POP PUSH1 0x20 DUP8 ADD MLOAD SWAP5 POP PUSH1 0x40 DUP8 ADD MLOAD SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP3 POP PUSH1 0x80 DUP8 ADD MLOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x4C46 JUMPI PUSH2 0x4C46 PUSH2 0x4830 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x4CAC JUMPI PUSH2 0x4CAC PUSH2 0x4830 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 ADD SWAP1 POP DUP7 DUP3 MSTORE DUP6 PUSH1 0x20 DUP4 ADD MSTORE DUP5 PUSH1 0x40 DUP4 ADD MSTORE DUP4 PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x4D09 PUSH1 0xC0 DUP5 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 DUP2 DUP2 DUP6 ADD MSTORE PUSH1 0xA0 DUP6 ADD MLOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0xC0 DUP6 ADD MLOAD PUSH2 0x140 DUP6 ADD MSTORE PUSH1 0xE0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x4D54 PUSH2 0x160 DUP6 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP5 ADD MLOAD PUSH1 0xFF DUP2 AND PUSH2 0x180 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x45BD JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x4DA0 JUMPI PUSH2 0x4DA0 PUSH2 0x4830 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x4DE7 JUMPI PUSH2 0x4DE7 PUSH2 0x4830 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x4E22 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DIV NOT 0xBE EQ 0xB0 MULMOD LOG0 SAR 0xE6 CALLDATASIZE MSIZE CALL NUMBER 0xE2 LOG2 JUMPI 0x2A 0xEE 0xEA STATICCALL 0xFB PUSH14 0x79B08B2F7C1FAA5810B664736F6C PUSH4 0x4300080A STOP CALLER ","sourceMap":"1828:19453:94:-:0;;;928:1:71;886:43;;3270:85:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3321:29:94;;;1828:19453;;14:321:201;115:6;168:2;156:9;147:7;143:23;139:32;136:52;;;184:1;181;174:12;136:52;210:16;;-1:-1:-1;;;;;255:31:201;;245:42;;235:70;;301:1;298;291:12;235:70;324:5;14:321;-1:-1:-1;;;14:321:201:o;:::-;1828:19453:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ADDRESSES_PROVIDER_22244":{"entryPoint":null,"id":22244,"parameterSlots":0,"returnSlots":0},"@BRIDGE_PROTOCOL_FEE_23208":{"entryPoint":null,"id":23208,"parameterSlots":0,"returnSlots":1},"@FLASHLOAN_PREMIUM_TOTAL_23218":{"entryPoint":null,"id":23218,"parameterSlots":0,"returnSlots":1},"@FLASHLOAN_PREMIUM_TO_PROTOCOL_23228":{"entryPoint":null,"id":23228,"parameterSlots":0,"returnSlots":1},"@MAX_NUMBER_RESERVES_23239":{"entryPoint":null,"id":23239,"parameterSlots":0,"returnSlots":1},"@MAX_STABLE_RATE_BORROW_SIZE_PERCENT_23198":{"entryPoint":null,"id":23198,"parameterSlots":0,"returnSlots":1},"@POOL_REVISION_22241":{"entryPoint":null,"id":22241,"parameterSlots":0,"returnSlots":0},"@_onlyBridge_22319":{"entryPoint":12999,"id":22319,"parameterSlots":0,"returnSlots":0},"@_onlyPoolAdmin_22301":{"entryPoint":13370,"id":22301,"parameterSlots":0,"returnSlots":0},"@_onlyPoolConfigurator_22283":{"entryPoint":12592,"id":22283,"parameterSlots":0,"returnSlots":0},"@backUnbacked_22419":{"entryPoint":11513,"id":22419,"parameterSlots":3,"returnSlots":1},"@borrow_22597":{"entryPoint":7408,"id":22597,"parameterSlots":5,"returnSlots":0},"@calculateCompoundedInterest_21079":{"entryPoint":14042,"id":21079,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_21097":{"entryPoint":13873,"id":21097,"parameterSlots":2,"returnSlots":1},"@calculateLinearInterest_20956":{"entryPoint":13973,"id":20956,"parameterSlots":2,"returnSlots":1},"@configureEModeCategory_23507":{"entryPoint":10593,"id":23507,"parameterSlots":2,"returnSlots":0},"@deposit_23635":{"entryPoint":null,"id":23635,"parameterSlots":4,"returnSlots":0},"@dropReserve_23351":{"entryPoint":5839,"id":23351,"parameterSlots":1,"returnSlots":0},"@finalizeTransfer_23294":{"entryPoint":10944,"id":23294,"parameterSlots":6,"returnSlots":0},"@flashLoanSimple_22973":{"entryPoint":4544,"id":22973,"parameterSlots":6,"returnSlots":0},"@flashLoan_22932":{"entryPoint":8046,"id":22932,"parameterSlots":11,"returnSlots":0},"@getConfiguration_23061":{"entryPoint":null,"id":23061,"parameterSlots":1,"returnSlots":1},"@getEModeCategoryData_23522":{"entryPoint":6575,"id":23522,"parameterSlots":1,"returnSlots":1},"@getNormalizedDebt_17751":{"entryPoint":12855,"id":17751,"parameterSlots":1,"returnSlots":1},"@getNormalizedIncome_17715":{"entryPoint":13741,"id":17715,"parameterSlots":1,"returnSlots":1},"@getReserveAddressById_23188":{"entryPoint":null,"id":23188,"parameterSlots":1,"returnSlots":1},"@getReserveData_23004":{"entryPoint":null,"id":23004,"parameterSlots":1,"returnSlots":1},"@getReserveNormalizedIncome_23092":{"entryPoint":10296,"id":23092,"parameterSlots":1,"returnSlots":1},"@getReserveNormalizedVariableDebt_23108":{"entryPoint":4505,"id":23108,"parameterSlots":1,"returnSlots":1},"@getReservesList_23175":{"entryPoint":10329,"id":23175,"parameterSlots":0,"returnSlots":1},"@getRevision_22328":{"entryPoint":null,"id":22328,"parameterSlots":0,"returnSlots":1},"@getUserAccountData_23045":{"entryPoint":8989,"id":23045,"parameterSlots":1,"returnSlots":6},"@getUserConfiguration_23076":{"entryPoint":null,"id":23076,"parameterSlots":1,"returnSlots":1},"@getUserEMode_23565":{"entryPoint":null,"id":23565,"parameterSlots":1,"returnSlots":1},"@initReserve_23333":{"entryPoint":6876,"id":23333,"parameterSlots":5,"returnSlots":0},"@initialize_22362":{"entryPoint":9522,"id":22362,"parameterSlots":1,"returnSlots":0},"@isConstructor_10568":{"entryPoint":null,"id":10568,"parameterSlots":0,"returnSlots":1},"@liquidationCall_22861":{"entryPoint":2388,"id":22861,"parameterSlots":5,"returnSlots":0},"@mintToTreasury_22989":{"entryPoint":7323,"id":22989,"parameterSlots":2,"returnSlots":0},"@mintUnbacked_22392":{"entryPoint":6415,"id":22392,"parameterSlots":4,"returnSlots":0},"@rayMul_21186":{"entryPoint":13886,"id":21186,"parameterSlots":2,"returnSlots":1},"@rebalanceStableBorrowRate_22786":{"entryPoint":10012,"id":22786,"parameterSlots":2,"returnSlots":0},"@repayWithATokens_22739":{"entryPoint":4207,"id":22739,"parameterSlots":3,"returnSlots":1},"@repayWithPermit_22703":{"entryPoint":11764,"id":22703,"parameterSlots":8,"returnSlots":1},"@repay_22633":{"entryPoint":4883,"id":22633,"parameterSlots":4,"returnSlots":1},"@rescueTokens_23604":{"entryPoint":10136,"id":23604,"parameterSlots":3,"returnSlots":0},"@resetIsolationModeTotalDebt_23582":{"entryPoint":11660,"id":23582,"parameterSlots":1,"returnSlots":0},"@setConfiguration_23446":{"entryPoint":12200,"id":23446,"parameterSlots":2,"returnSlots":0},"@setReserveInterestRateStrategyAddress_23398":{"entryPoint":3351,"id":23398,"parameterSlots":2,"returnSlots":0},"@setUserEMode_23551":{"entryPoint":3793,"id":23551,"parameterSlots":1,"returnSlots":0},"@setUserUseReserveAsCollateral_22818":{"entryPoint":5176,"id":22818,"parameterSlots":2,"returnSlots":0},"@supplyWithPermit_22506":{"entryPoint":2945,"id":22506,"parameterSlots":8,"returnSlots":0},"@supply_22450":{"entryPoint":5593,"id":22450,"parameterSlots":4,"returnSlots":0},"@swapBorrowRateMode_22766":{"entryPoint":7207,"id":22766,"parameterSlots":2,"returnSlots":0},"@updateBridgeProtocolFee_23460":{"entryPoint":4492,"id":23460,"parameterSlots":1,"returnSlots":0},"@updateFlashloanPremiums_23480":{"entryPoint":8934,"id":23480,"parameterSlots":2,"returnSlots":0},"@withdraw_22545":{"entryPoint":5950,"id":22545,"parameterSlots":3,"returnSlots":1},"abi_decode_address":{"entryPoint":14543,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_address_dyn_calldata":{"entryPoint":16231,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes_calldata":{"entryPoint":15398,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":15001,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":17649,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":14839,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_addresst_addresst_address":{"entryPoint":16088,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_bool":{"entryPoint":14573,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_uint256t_uint256":{"entryPoint":17383,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":16762,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_bytes_calldata_ptrt_uint16":{"entryPoint":15471,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_addresst_bytes_calldata_ptrt_uint16":{"entryPoint":16429,"id":null,"parameterSlots":2,"returnSlots":11},"abi_decode_tuple_t_addresst_bool":{"entryPoint":15702,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_struct$_ReserveConfigurationMap_$21318_calldata_ptr":{"entryPoint":17554,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":16187,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256t_address":{"entryPoint":15829,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256t_addresst_uint16":{"entryPoint":15748,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_uint256t_addresst_uint16t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":14712,"id":null,"parameterSlots":2,"returnSlots":8},"abi_decode_tuple_t_addresst_uint256t_uint256":{"entryPoint":14923,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256t_uint256t_address":{"entryPoint":15628,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":17484,"id":null,"parameterSlots":2,"returnSlots":8},"abi_decode_tuple_t_addresst_uint256t_uint256t_uint16t_address":{"entryPoint":16366,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr":{"entryPoint":16300,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":18451,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint128t_uint128":{"entryPoint":16711,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint16":{"entryPoint":15601,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":14976,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":18091,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory":{"entryPoint":19434,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_uint8":{"entryPoint":14896,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint8t_struct$_EModeCategory_$21333_memory_ptr":{"entryPoint":17071,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_uint128":{"entryPoint":16679,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint16":{"entryPoint":14677,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint8":{"entryPoint":14695,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_array_address_dyn":{"entryPoint":18935,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":19003,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_enum_InterestRateMode":{"entryPoint":17930,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_string":{"entryPoint":15895,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_ReserveConfigurationMap":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":16827,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_address__to_t_uint256_t_address__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_array$_t_address_$dyn_calldata_ptr__to_t_uint256_t_array$_t_address_$dyn_memory_ptr__fromStack_library_reversed":{"entryPoint":18603,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_address__to_t_uint256_t_uint256_t_address__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr__fromStack_library_reversed":{"entryPoint":17678,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$_t_struct$_FinalizeTransferParams_$21484_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FinalizeTransferParams_$21484_memory_ptr__fromStack_library_reversed":{"entryPoint":19635,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_mapping$_t_address_$_t_uint8_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_t_address_t_bool_t_uint16_t_address_t_uint8__to_t_uint256_t_uint256_t_uint256_t_uint256_t_address_t_bool_t_uint256_t_address_t_uint8__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":10,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteBorrowParams_$21433_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteBorrowParams_$21433_memory_ptr__fromStack_library_reversed":{"entryPoint":18691,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteWithdrawParams_$21458_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteWithdrawParams_$21458_memory_ptr__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_FlashloanParams_$21516_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FlashloanParams_$21516_memory_ptr__fromStack_library_reversed":{"entryPoint":19051,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_InitReserveParams_$21632_memory_ptr__to_t_uint256_t_uint256_t_struct$_InitReserveParams_$21632_memory_ptr__fromStack_library_reversed":{"entryPoint":18320,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_t_address_t_uint256_t_address_t_uint16__to_t_uint256_t_uint256_t_uint256_t_address_t_uint256_t_address_t_uint16__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteRepayParams_$21445_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteRepayParams_$21445_memory_ptr__fromStack_library_reversed":{"entryPoint":17989,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteSupplyParams_$21407_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSupplyParams_$21407_memory_ptr__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":17864,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_struct$_EModeCategory_$21333_memory_ptr__to_t_struct$_EModeCategory_$21333_memory_ptr__fromStack_reversed":{"entryPoint":16002,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveConfigurationMap_$21318_memory_ptr__to_t_struct$_ReserveConfigurationMap_$21318_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$21315_memory_ptr__to_t_struct$_ReserveData_$21315_memory_ptr__fromStack_reversed":{"entryPoint":15030,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$21315_storage_t_address_t_address__to_t_uint256_t_address_t_address__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$21315_storage_t_address_t_uint256_t_uint256_t_uint256__to_t_uint256_t_address_t_uint256_t_uint256_t_uint256__fromStack_library_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$21315_storage_t_struct$_FlashloanSimpleParams_$21531_memory_ptr__to_t_uint256_t_struct$_FlashloanSimpleParams_$21531_memory_ptr__fromStack_library_reversed":{"entryPoint":18116,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_struct$_ReserveData_$21315_storage_t_struct$_UserConfigurationMap_$21322_storage_t_address_t_enum$_InterestRateMode_$21337__to_t_uint256_t_uint256_t_address_t_uint8__fromStack_library_reversed":{"entryPoint":18561,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_struct$_UserConfigurationMap_$21322_memory_ptr__to_t_struct$_UserConfigurationMap_$21322_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_uint128":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint16":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint40":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint8":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"allocate_memory":{"entryPoint":16992,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_5591":{"entryPoint":16951,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":19924,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":19948,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":19816,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":19508,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":18242,"id":null,"parameterSlots":1,"returnSlots":1},"increment_t_uint16":{"entryPoint":18527,"id":null,"parameterSlots":1,"returnSlots":1},"increment_t_uint256":{"entryPoint":19578,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":18480,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":19877,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":17883,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":19531,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":16904,"id":null,"parameterSlots":0,"returnSlots":0},"update_storage_value_offset_0t_struct$_ReserveConfigurationMap_$21318_calldata_ptr_to_t_struct$_ReserveConfigurationMap_$21318_storage":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"validator_revert_address":{"entryPoint":14522,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_bool":{"entryPoint":14559,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:50280:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"59:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"146:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"155:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"158:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"148:6:201"},"nodeType":"YulFunctionCall","src":"148:12:201"},"nodeType":"YulExpressionStatement","src":"148:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"82:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"93:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"100:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"89:3:201"},"nodeType":"YulFunctionCall","src":"89:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"79:2:201"},"nodeType":"YulFunctionCall","src":"79:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"72:6:201"},"nodeType":"YulFunctionCall","src":"72:73:201"},"nodeType":"YulIf","src":"69:93:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"48:5:201","type":""}],"src":"14:154:201"},{"body":{"nodeType":"YulBlock","src":"222:85:201","statements":[{"nodeType":"YulAssignment","src":"232:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"254:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"241:12:201"},"nodeType":"YulFunctionCall","src":"241:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"232:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"295:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"270:24:201"},"nodeType":"YulFunctionCall","src":"270:31:201"},"nodeType":"YulExpressionStatement","src":"270:31:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"201:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"212:5:201","type":""}],"src":"173:134:201"},{"body":{"nodeType":"YulBlock","src":"354:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"408:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"417:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"420:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"410:6:201"},"nodeType":"YulFunctionCall","src":"410:12:201"},"nodeType":"YulExpressionStatement","src":"410:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"377:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"398:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"391:6:201"},"nodeType":"YulFunctionCall","src":"391:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"384:6:201"},"nodeType":"YulFunctionCall","src":"384:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"374:2:201"},"nodeType":"YulFunctionCall","src":"374:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"367:6:201"},"nodeType":"YulFunctionCall","src":"367:40:201"},"nodeType":"YulIf","src":"364:60:201"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"343:5:201","type":""}],"src":"312:118:201"},{"body":{"nodeType":"YulBlock","src":"570:599:201","statements":[{"body":{"nodeType":"YulBlock","src":"617:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"626:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"629:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"619:6:201"},"nodeType":"YulFunctionCall","src":"619:12:201"},"nodeType":"YulExpressionStatement","src":"619:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"591:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"600:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"587:3:201"},"nodeType":"YulFunctionCall","src":"587:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"612:3:201","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"583:3:201"},"nodeType":"YulFunctionCall","src":"583:33:201"},"nodeType":"YulIf","src":"580:53:201"},{"nodeType":"YulVariableDeclaration","src":"642:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"668:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"655:12:201"},"nodeType":"YulFunctionCall","src":"655:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"646:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"712:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"687:24:201"},"nodeType":"YulFunctionCall","src":"687:31:201"},"nodeType":"YulExpressionStatement","src":"687:31:201"},{"nodeType":"YulAssignment","src":"727:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"737:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"727:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"751:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"783:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"794:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"779:3:201"},"nodeType":"YulFunctionCall","src":"779:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"766:12:201"},"nodeType":"YulFunctionCall","src":"766:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"755:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"832:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"807:24:201"},"nodeType":"YulFunctionCall","src":"807:33:201"},"nodeType":"YulExpressionStatement","src":"807:33:201"},{"nodeType":"YulAssignment","src":"849:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"859:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"849:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"875:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"907:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"918:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"903:3:201"},"nodeType":"YulFunctionCall","src":"903:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"890:12:201"},"nodeType":"YulFunctionCall","src":"890:32:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"879:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"956:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"931:24:201"},"nodeType":"YulFunctionCall","src":"931:33:201"},"nodeType":"YulExpressionStatement","src":"931:33:201"},{"nodeType":"YulAssignment","src":"973:17:201","value":{"name":"value_2","nodeType":"YulIdentifier","src":"983:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"973:6:201"}]},{"nodeType":"YulAssignment","src":"999:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1026:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1037:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1022:3:201"},"nodeType":"YulFunctionCall","src":"1022:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1009:12:201"},"nodeType":"YulFunctionCall","src":"1009:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"999:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1050:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1082:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1093:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1078:3:201"},"nodeType":"YulFunctionCall","src":"1078:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1065:12:201"},"nodeType":"YulFunctionCall","src":"1065:33:201"},"variables":[{"name":"value_3","nodeType":"YulTypedName","src":"1054:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_3","nodeType":"YulIdentifier","src":"1129:7:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"1107:21:201"},"nodeType":"YulFunctionCall","src":"1107:30:201"},"nodeType":"YulExpressionStatement","src":"1107:30:201"},{"nodeType":"YulAssignment","src":"1146:17:201","value":{"name":"value_3","nodeType":"YulIdentifier","src":"1156:7:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"1146:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"504:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"515:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"527:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"535:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"543:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"551:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"559:6:201","type":""}],"src":"435:734:201"},{"body":{"nodeType":"YulBlock","src":"1275:76:201","statements":[{"nodeType":"YulAssignment","src":"1285:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1297:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1308:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1293:3:201"},"nodeType":"YulFunctionCall","src":"1293:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1285:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1327:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"1338:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1320:6:201"},"nodeType":"YulFunctionCall","src":"1320:25:201"},"nodeType":"YulExpressionStatement","src":"1320:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1244:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1255:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1266:4:201","type":""}],"src":"1174:177:201"},{"body":{"nodeType":"YulBlock","src":"1404:111:201","statements":[{"nodeType":"YulAssignment","src":"1414:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1436:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1423:12:201"},"nodeType":"YulFunctionCall","src":"1423:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1414:5:201"}]},{"body":{"nodeType":"YulBlock","src":"1493:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1502:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1505:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1495:6:201"},"nodeType":"YulFunctionCall","src":"1495:12:201"},"nodeType":"YulExpressionStatement","src":"1495:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1465:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1476:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1483:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1472:3:201"},"nodeType":"YulFunctionCall","src":"1472:18:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1462:2:201"},"nodeType":"YulFunctionCall","src":"1462:29:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1455:6:201"},"nodeType":"YulFunctionCall","src":"1455:37:201"},"nodeType":"YulIf","src":"1452:57:201"}]},"name":"abi_decode_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1383:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1394:5:201","type":""}],"src":"1356:159:201"},{"body":{"nodeType":"YulBlock","src":"1567:109:201","statements":[{"nodeType":"YulAssignment","src":"1577:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1599:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1586:12:201"},"nodeType":"YulFunctionCall","src":"1586:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1577:5:201"}]},{"body":{"nodeType":"YulBlock","src":"1654:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1663:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1666:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1656:6:201"},"nodeType":"YulFunctionCall","src":"1656:12:201"},"nodeType":"YulExpressionStatement","src":"1656:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1628:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1639:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1646:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1635:3:201"},"nodeType":"YulFunctionCall","src":"1635:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1625:2:201"},"nodeType":"YulFunctionCall","src":"1625:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1618:6:201"},"nodeType":"YulFunctionCall","src":"1618:35:201"},"nodeType":"YulIf","src":"1615:55:201"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1546:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1557:5:201","type":""}],"src":"1520:156:201"},{"body":{"nodeType":"YulBlock","src":"1867:621:201","statements":[{"body":{"nodeType":"YulBlock","src":"1914:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1923:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1926:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1916:6:201"},"nodeType":"YulFunctionCall","src":"1916:12:201"},"nodeType":"YulExpressionStatement","src":"1916:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1888:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1897:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1884:3:201"},"nodeType":"YulFunctionCall","src":"1884:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1909:3:201","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1880:3:201"},"nodeType":"YulFunctionCall","src":"1880:33:201"},"nodeType":"YulIf","src":"1877:53:201"},{"nodeType":"YulVariableDeclaration","src":"1939:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1965:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1952:12:201"},"nodeType":"YulFunctionCall","src":"1952:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1943:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2009:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1984:24:201"},"nodeType":"YulFunctionCall","src":"1984:31:201"},"nodeType":"YulExpressionStatement","src":"1984:31:201"},{"nodeType":"YulAssignment","src":"2024:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"2034:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2024:6:201"}]},{"nodeType":"YulAssignment","src":"2048:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2075:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2086:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2071:3:201"},"nodeType":"YulFunctionCall","src":"2071:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2058:12:201"},"nodeType":"YulFunctionCall","src":"2058:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2048:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2099:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2131:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2142:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2127:3:201"},"nodeType":"YulFunctionCall","src":"2127:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2114:12:201"},"nodeType":"YulFunctionCall","src":"2114:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2103:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2180:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2155:24:201"},"nodeType":"YulFunctionCall","src":"2155:33:201"},"nodeType":"YulExpressionStatement","src":"2155:33:201"},{"nodeType":"YulAssignment","src":"2197:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"2207:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2197:6:201"}]},{"nodeType":"YulAssignment","src":"2223:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2255:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2266:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2251:3:201"},"nodeType":"YulFunctionCall","src":"2251:18:201"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"2233:17:201"},"nodeType":"YulFunctionCall","src":"2233:37:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2223:6:201"}]},{"nodeType":"YulAssignment","src":"2279:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2306:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2317:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2302:3:201"},"nodeType":"YulFunctionCall","src":"2302:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2289:12:201"},"nodeType":"YulFunctionCall","src":"2289:33:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"2279:6:201"}]},{"nodeType":"YulAssignment","src":"2331:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2362:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2373:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2358:3:201"},"nodeType":"YulFunctionCall","src":"2358:19:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"2341:16:201"},"nodeType":"YulFunctionCall","src":"2341:37:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"2331:6:201"}]},{"nodeType":"YulAssignment","src":"2387:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2414:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2425:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2410:3:201"},"nodeType":"YulFunctionCall","src":"2410:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2397:12:201"},"nodeType":"YulFunctionCall","src":"2397:33:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"2387:6:201"}]},{"nodeType":"YulAssignment","src":"2439:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2466:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2477:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2462:3:201"},"nodeType":"YulFunctionCall","src":"2462:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2449:12:201"},"nodeType":"YulFunctionCall","src":"2449:33:201"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"2439:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_addresst_uint16t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1777:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1788:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1800:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1808:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1816:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1824:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1832:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"1840:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"1848:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"1856:6:201","type":""}],"src":"1681:807:201"},{"body":{"nodeType":"YulBlock","src":"2625:125:201","statements":[{"nodeType":"YulAssignment","src":"2635:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2647:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2658:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2643:3:201"},"nodeType":"YulFunctionCall","src":"2643:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2635:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2677:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2692:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2700:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2688:3:201"},"nodeType":"YulFunctionCall","src":"2688:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2670:6:201"},"nodeType":"YulFunctionCall","src":"2670:74:201"},"nodeType":"YulExpressionStatement","src":"2670:74:201"}]},"name":"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2594:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2605:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2616:4:201","type":""}],"src":"2493:257:201"},{"body":{"nodeType":"YulBlock","src":"2799:75:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2816:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2825:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2832:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2821:3:201"},"nodeType":"YulFunctionCall","src":"2821:46:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2809:6:201"},"nodeType":"YulFunctionCall","src":"2809:59:201"},"nodeType":"YulExpressionStatement","src":"2809:59:201"}]},"name":"abi_encode_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"2783:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"2790:3:201","type":""}],"src":"2755:119:201"},{"body":{"nodeType":"YulBlock","src":"2980:117:201","statements":[{"nodeType":"YulAssignment","src":"2990:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3002:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3013:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2998:3:201"},"nodeType":"YulFunctionCall","src":"2998:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2990:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3032:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3047:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3055:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3043:3:201"},"nodeType":"YulFunctionCall","src":"3043:47:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3025:6:201"},"nodeType":"YulFunctionCall","src":"3025:66:201"},"nodeType":"YulExpressionStatement","src":"3025:66:201"}]},"name":"abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2949:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2960:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2971:4:201","type":""}],"src":"2879:218:201"},{"body":{"nodeType":"YulBlock","src":"3189:301:201","statements":[{"body":{"nodeType":"YulBlock","src":"3235:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3244:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3247:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3237:6:201"},"nodeType":"YulFunctionCall","src":"3237:12:201"},"nodeType":"YulExpressionStatement","src":"3237:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3210:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3219:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3206:3:201"},"nodeType":"YulFunctionCall","src":"3206:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3231:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3202:3:201"},"nodeType":"YulFunctionCall","src":"3202:32:201"},"nodeType":"YulIf","src":"3199:52:201"},{"nodeType":"YulVariableDeclaration","src":"3260:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3286:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3273:12:201"},"nodeType":"YulFunctionCall","src":"3273:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3264:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3330:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3305:24:201"},"nodeType":"YulFunctionCall","src":"3305:31:201"},"nodeType":"YulExpressionStatement","src":"3305:31:201"},{"nodeType":"YulAssignment","src":"3345:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3355:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3345:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3369:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3401:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3412:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3397:3:201"},"nodeType":"YulFunctionCall","src":"3397:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3384:12:201"},"nodeType":"YulFunctionCall","src":"3384:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"3373:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3450:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3425:24:201"},"nodeType":"YulFunctionCall","src":"3425:33:201"},"nodeType":"YulExpressionStatement","src":"3425:33:201"},{"nodeType":"YulAssignment","src":"3467:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3477:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3467:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3147:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3158:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3170:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3178:6:201","type":""}],"src":"3102:388:201"},{"body":{"nodeType":"YulBlock","src":"3563:114:201","statements":[{"body":{"nodeType":"YulBlock","src":"3609:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3618:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3621:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3611:6:201"},"nodeType":"YulFunctionCall","src":"3611:12:201"},"nodeType":"YulExpressionStatement","src":"3611:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3584:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3593:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3580:3:201"},"nodeType":"YulFunctionCall","src":"3580:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3605:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3576:3:201"},"nodeType":"YulFunctionCall","src":"3576:32:201"},"nodeType":"YulIf","src":"3573:52:201"},{"nodeType":"YulAssignment","src":"3634:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3661:9:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"3644:16:201"},"nodeType":"YulFunctionCall","src":"3644:27:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3634:6:201"}]}]},"name":"abi_decode_tuple_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3529:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3540:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3552:6:201","type":""}],"src":"3495:182:201"},{"body":{"nodeType":"YulBlock","src":"3786:279:201","statements":[{"body":{"nodeType":"YulBlock","src":"3832:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3841:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3844:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3834:6:201"},"nodeType":"YulFunctionCall","src":"3834:12:201"},"nodeType":"YulExpressionStatement","src":"3834:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3807:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3816:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3803:3:201"},"nodeType":"YulFunctionCall","src":"3803:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3828:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3799:3:201"},"nodeType":"YulFunctionCall","src":"3799:32:201"},"nodeType":"YulIf","src":"3796:52:201"},{"nodeType":"YulVariableDeclaration","src":"3857:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3883:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3870:12:201"},"nodeType":"YulFunctionCall","src":"3870:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3861:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3927:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3902:24:201"},"nodeType":"YulFunctionCall","src":"3902:31:201"},"nodeType":"YulExpressionStatement","src":"3902:31:201"},{"nodeType":"YulAssignment","src":"3942:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3952:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3942:6:201"}]},{"nodeType":"YulAssignment","src":"3966:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3993:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4004:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3989:3:201"},"nodeType":"YulFunctionCall","src":"3989:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3976:12:201"},"nodeType":"YulFunctionCall","src":"3976:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3966:6:201"}]},{"nodeType":"YulAssignment","src":"4017:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4044:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4055:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4040:3:201"},"nodeType":"YulFunctionCall","src":"4040:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4027:12:201"},"nodeType":"YulFunctionCall","src":"4027:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4017:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3736:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3747:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3759:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3767:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3775:6:201","type":""}],"src":"3682:383:201"},{"body":{"nodeType":"YulBlock","src":"4140:110:201","statements":[{"body":{"nodeType":"YulBlock","src":"4186:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4195:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4198:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4188:6:201"},"nodeType":"YulFunctionCall","src":"4188:12:201"},"nodeType":"YulExpressionStatement","src":"4188:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4161:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4170:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4157:3:201"},"nodeType":"YulFunctionCall","src":"4157:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4182:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4153:3:201"},"nodeType":"YulFunctionCall","src":"4153:32:201"},"nodeType":"YulIf","src":"4150:52:201"},{"nodeType":"YulAssignment","src":"4211:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4234:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4221:12:201"},"nodeType":"YulFunctionCall","src":"4221:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4211:6:201"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4106:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4117:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4129:6:201","type":""}],"src":"4070:180:201"},{"body":{"nodeType":"YulBlock","src":"4325:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"4371:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4380:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4383:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4373:6:201"},"nodeType":"YulFunctionCall","src":"4373:12:201"},"nodeType":"YulExpressionStatement","src":"4373:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4346:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4355:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4342:3:201"},"nodeType":"YulFunctionCall","src":"4342:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4367:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4338:3:201"},"nodeType":"YulFunctionCall","src":"4338:32:201"},"nodeType":"YulIf","src":"4335:52:201"},{"nodeType":"YulVariableDeclaration","src":"4396:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4422:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4409:12:201"},"nodeType":"YulFunctionCall","src":"4409:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4400:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4466:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4441:24:201"},"nodeType":"YulFunctionCall","src":"4441:31:201"},"nodeType":"YulExpressionStatement","src":"4441:31:201"},{"nodeType":"YulAssignment","src":"4481:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"4491:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4481:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4291:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4302:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4314:6:201","type":""}],"src":"4255:247:201"},{"body":{"nodeType":"YulBlock","src":"4574:29:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4583:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4594:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4588:5:201"},"nodeType":"YulFunctionCall","src":"4588:12:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4576:6:201"},"nodeType":"YulFunctionCall","src":"4576:25:201"},"nodeType":"YulExpressionStatement","src":"4576:25:201"}]},"name":"abi_encode_struct_ReserveConfigurationMap","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4558:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4565:3:201","type":""}],"src":"4507:96:201"},{"body":{"nodeType":"YulBlock","src":"4651:53:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4668:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4677:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"4684:12:201","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4673:3:201"},"nodeType":"YulFunctionCall","src":"4673:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4661:6:201"},"nodeType":"YulFunctionCall","src":"4661:37:201"},"nodeType":"YulExpressionStatement","src":"4661:37:201"}]},"name":"abi_encode_uint40","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4635:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4642:3:201","type":""}],"src":"4608:96:201"},{"body":{"nodeType":"YulBlock","src":"4752:47:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4769:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4778:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"4785:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4774:3:201"},"nodeType":"YulFunctionCall","src":"4774:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4762:6:201"},"nodeType":"YulFunctionCall","src":"4762:31:201"},"nodeType":"YulExpressionStatement","src":"4762:31:201"}]},"name":"abi_encode_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4736:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4743:3:201","type":""}],"src":"4709:90:201"},{"body":{"nodeType":"YulBlock","src":"4848:83:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4865:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4874:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"4881:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4870:3:201"},"nodeType":"YulFunctionCall","src":"4870:54:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4858:6:201"},"nodeType":"YulFunctionCall","src":"4858:67:201"},"nodeType":"YulExpressionStatement","src":"4858:67:201"}]},"name":"abi_encode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4832:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4839:3:201","type":""}],"src":"4804:127:201"},{"body":{"nodeType":"YulBlock","src":"5097:1948:201","statements":[{"nodeType":"YulAssignment","src":"5107:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5119:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5130:3:201","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5115:3:201"},"nodeType":"YulFunctionCall","src":"5115:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5107:4:201"}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5191:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5185:5:201"},"nodeType":"YulFunctionCall","src":"5185:13:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"5200:9:201"}],"functionName":{"name":"abi_encode_struct_ReserveConfigurationMap","nodeType":"YulIdentifier","src":"5143:41:201"},"nodeType":"YulFunctionCall","src":"5143:67:201"},"nodeType":"YulExpressionStatement","src":"5143:67:201"},{"nodeType":"YulVariableDeclaration","src":"5219:44:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5249:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5257:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5245:3:201"},"nodeType":"YulFunctionCall","src":"5245:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5239:5:201"},"nodeType":"YulFunctionCall","src":"5239:24:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"5223:12:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"5291:12:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5309:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5320:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5305:3:201"},"nodeType":"YulFunctionCall","src":"5305:20:201"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5272:18:201"},"nodeType":"YulFunctionCall","src":"5272:54:201"},"nodeType":"YulExpressionStatement","src":"5272:54:201"},{"nodeType":"YulVariableDeclaration","src":"5335:46:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5367:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5375:4:201","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5363:3:201"},"nodeType":"YulFunctionCall","src":"5363:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5357:5:201"},"nodeType":"YulFunctionCall","src":"5357:24:201"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"5339:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"5409:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5429:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5440:4:201","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5425:3:201"},"nodeType":"YulFunctionCall","src":"5425:20:201"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5390:18:201"},"nodeType":"YulFunctionCall","src":"5390:56:201"},"nodeType":"YulExpressionStatement","src":"5390:56:201"},{"nodeType":"YulVariableDeclaration","src":"5455:46:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5487:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5495:4:201","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5483:3:201"},"nodeType":"YulFunctionCall","src":"5483:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5477:5:201"},"nodeType":"YulFunctionCall","src":"5477:24:201"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"5459:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"5529:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5549:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5560:4:201","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5545:3:201"},"nodeType":"YulFunctionCall","src":"5545:20:201"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5510:18:201"},"nodeType":"YulFunctionCall","src":"5510:56:201"},"nodeType":"YulExpressionStatement","src":"5510:56:201"},{"nodeType":"YulVariableDeclaration","src":"5575:46:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5607:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5615:4:201","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5603:3:201"},"nodeType":"YulFunctionCall","src":"5603:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5597:5:201"},"nodeType":"YulFunctionCall","src":"5597:24:201"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"5579:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"5649:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5669:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5680:4:201","type":"","value":"0x80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5665:3:201"},"nodeType":"YulFunctionCall","src":"5665:20:201"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5630:18:201"},"nodeType":"YulFunctionCall","src":"5630:56:201"},"nodeType":"YulExpressionStatement","src":"5630:56:201"},{"nodeType":"YulVariableDeclaration","src":"5695:46:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5727:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5735:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5723:3:201"},"nodeType":"YulFunctionCall","src":"5723:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5717:5:201"},"nodeType":"YulFunctionCall","src":"5717:24:201"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"5699:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"5769:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5789:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5800:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5785:3:201"},"nodeType":"YulFunctionCall","src":"5785:20:201"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"5750:18:201"},"nodeType":"YulFunctionCall","src":"5750:56:201"},"nodeType":"YulExpressionStatement","src":"5750:56:201"},{"nodeType":"YulVariableDeclaration","src":"5815:46:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5847:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5855:4:201","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5843:3:201"},"nodeType":"YulFunctionCall","src":"5843:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5837:5:201"},"nodeType":"YulFunctionCall","src":"5837:24:201"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"5819:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"5888:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5908:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5919:4:201","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5904:3:201"},"nodeType":"YulFunctionCall","src":"5904:20:201"}],"functionName":{"name":"abi_encode_uint40","nodeType":"YulIdentifier","src":"5870:17:201"},"nodeType":"YulFunctionCall","src":"5870:55:201"},"nodeType":"YulExpressionStatement","src":"5870:55:201"},{"nodeType":"YulVariableDeclaration","src":"5934:46:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5966:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5974:4:201","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5962:3:201"},"nodeType":"YulFunctionCall","src":"5962:17:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5956:5:201"},"nodeType":"YulFunctionCall","src":"5956:24:201"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"5938:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"6007:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6027:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6038:4:201","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6023:3:201"},"nodeType":"YulFunctionCall","src":"6023:20:201"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"5989:17:201"},"nodeType":"YulFunctionCall","src":"5989:55:201"},"nodeType":"YulExpressionStatement","src":"5989:55:201"},{"nodeType":"YulVariableDeclaration","src":"6053:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6063:6:201","type":"","value":"0x0100"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6057:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6078:44:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6110:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6118:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6106:3:201"},"nodeType":"YulFunctionCall","src":"6106:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6100:5:201"},"nodeType":"YulFunctionCall","src":"6100:22:201"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"6082:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"6150:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6170:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6181:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6166:3:201"},"nodeType":"YulFunctionCall","src":"6166:18:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6131:18:201"},"nodeType":"YulFunctionCall","src":"6131:54:201"},"nodeType":"YulExpressionStatement","src":"6131:54:201"},{"nodeType":"YulVariableDeclaration","src":"6194:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6204:6:201","type":"","value":"0x0120"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"6198:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6219:44:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6251:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"6259:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6247:3:201"},"nodeType":"YulFunctionCall","src":"6247:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6241:5:201"},"nodeType":"YulFunctionCall","src":"6241:22:201"},"variables":[{"name":"memberValue0_8","nodeType":"YulTypedName","src":"6223:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_8","nodeType":"YulIdentifier","src":"6291:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6311:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"6322:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6307:3:201"},"nodeType":"YulFunctionCall","src":"6307:18:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6272:18:201"},"nodeType":"YulFunctionCall","src":"6272:54:201"},"nodeType":"YulExpressionStatement","src":"6272:54:201"},{"nodeType":"YulVariableDeclaration","src":"6335:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6345:6:201","type":"","value":"0x0140"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"6339:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6360:44:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6392:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"6400:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6388:3:201"},"nodeType":"YulFunctionCall","src":"6388:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6382:5:201"},"nodeType":"YulFunctionCall","src":"6382:22:201"},"variables":[{"name":"memberValue0_9","nodeType":"YulTypedName","src":"6364:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_9","nodeType":"YulIdentifier","src":"6432:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6452:9:201"},{"name":"_3","nodeType":"YulIdentifier","src":"6463:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6448:3:201"},"nodeType":"YulFunctionCall","src":"6448:18:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6413:18:201"},"nodeType":"YulFunctionCall","src":"6413:54:201"},"nodeType":"YulExpressionStatement","src":"6413:54:201"},{"nodeType":"YulVariableDeclaration","src":"6476:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6486:6:201","type":"","value":"0x0160"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"6480:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6501:45:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6534:6:201"},{"name":"_4","nodeType":"YulIdentifier","src":"6542:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6530:3:201"},"nodeType":"YulFunctionCall","src":"6530:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6524:5:201"},"nodeType":"YulFunctionCall","src":"6524:22:201"},"variables":[{"name":"memberValue0_10","nodeType":"YulTypedName","src":"6505:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_10","nodeType":"YulIdentifier","src":"6574:15:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6595:9:201"},{"name":"_4","nodeType":"YulIdentifier","src":"6606:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6591:3:201"},"nodeType":"YulFunctionCall","src":"6591:18:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6555:18:201"},"nodeType":"YulFunctionCall","src":"6555:55:201"},"nodeType":"YulExpressionStatement","src":"6555:55:201"},{"nodeType":"YulVariableDeclaration","src":"6619:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6629:6:201","type":"","value":"0x0180"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"6623:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6644:45:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6677:6:201"},{"name":"_5","nodeType":"YulIdentifier","src":"6685:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6673:3:201"},"nodeType":"YulFunctionCall","src":"6673:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6667:5:201"},"nodeType":"YulFunctionCall","src":"6667:22:201"},"variables":[{"name":"memberValue0_11","nodeType":"YulTypedName","src":"6648:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_11","nodeType":"YulIdentifier","src":"6717:15:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6738:9:201"},{"name":"_5","nodeType":"YulIdentifier","src":"6749:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6734:3:201"},"nodeType":"YulFunctionCall","src":"6734:18:201"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"6698:18:201"},"nodeType":"YulFunctionCall","src":"6698:55:201"},"nodeType":"YulExpressionStatement","src":"6698:55:201"},{"nodeType":"YulVariableDeclaration","src":"6762:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6772:6:201","type":"","value":"0x01a0"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"6766:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6787:45:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6820:6:201"},{"name":"_6","nodeType":"YulIdentifier","src":"6828:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6816:3:201"},"nodeType":"YulFunctionCall","src":"6816:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6810:5:201"},"nodeType":"YulFunctionCall","src":"6810:22:201"},"variables":[{"name":"memberValue0_12","nodeType":"YulTypedName","src":"6791:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_12","nodeType":"YulIdentifier","src":"6860:15:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6881:9:201"},{"name":"_6","nodeType":"YulIdentifier","src":"6892:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6877:3:201"},"nodeType":"YulFunctionCall","src":"6877:18:201"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"6841:18:201"},"nodeType":"YulFunctionCall","src":"6841:55:201"},"nodeType":"YulExpressionStatement","src":"6841:55:201"},{"nodeType":"YulVariableDeclaration","src":"6905:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6915:6:201","type":"","value":"0x01c0"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"6909:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6930:45:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6963:6:201"},{"name":"_7","nodeType":"YulIdentifier","src":"6971:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6959:3:201"},"nodeType":"YulFunctionCall","src":"6959:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6953:5:201"},"nodeType":"YulFunctionCall","src":"6953:22:201"},"variables":[{"name":"memberValue0_13","nodeType":"YulTypedName","src":"6934:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_13","nodeType":"YulIdentifier","src":"7003:15:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7024:9:201"},{"name":"_7","nodeType":"YulIdentifier","src":"7035:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7020:3:201"},"nodeType":"YulFunctionCall","src":"7020:18:201"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"6984:18:201"},"nodeType":"YulFunctionCall","src":"6984:55:201"},"nodeType":"YulExpressionStatement","src":"6984:55:201"}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$21315_memory_ptr__to_t_struct$_ReserveData_$21315_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5066:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5077:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5088:4:201","type":""}],"src":"4936:2109:201"},{"body":{"nodeType":"YulBlock","src":"7122:275:201","statements":[{"body":{"nodeType":"YulBlock","src":"7171:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7180:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7183:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7173:6:201"},"nodeType":"YulFunctionCall","src":"7173:12:201"},"nodeType":"YulExpressionStatement","src":"7173:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7150:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7158:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7146:3:201"},"nodeType":"YulFunctionCall","src":"7146:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"7165:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7142:3:201"},"nodeType":"YulFunctionCall","src":"7142:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7135:6:201"},"nodeType":"YulFunctionCall","src":"7135:35:201"},"nodeType":"YulIf","src":"7132:55:201"},{"nodeType":"YulAssignment","src":"7196:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7219:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7206:12:201"},"nodeType":"YulFunctionCall","src":"7206:20:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"7196:6:201"}]},{"body":{"nodeType":"YulBlock","src":"7269:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7278:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7281:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7271:6:201"},"nodeType":"YulFunctionCall","src":"7271:12:201"},"nodeType":"YulExpressionStatement","src":"7271:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"7241:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7249:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7238:2:201"},"nodeType":"YulFunctionCall","src":"7238:30:201"},"nodeType":"YulIf","src":"7235:50:201"},{"nodeType":"YulAssignment","src":"7294:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7310:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7318:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7306:3:201"},"nodeType":"YulFunctionCall","src":"7306:17:201"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"7294:8:201"}]},{"body":{"nodeType":"YulBlock","src":"7375:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7384:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7387:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7377:6:201"},"nodeType":"YulFunctionCall","src":"7377:12:201"},"nodeType":"YulExpressionStatement","src":"7377:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7346:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"7354:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7342:3:201"},"nodeType":"YulFunctionCall","src":"7342:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"7363:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7338:3:201"},"nodeType":"YulFunctionCall","src":"7338:30:201"},{"name":"end","nodeType":"YulIdentifier","src":"7370:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7335:2:201"},"nodeType":"YulFunctionCall","src":"7335:39:201"},"nodeType":"YulIf","src":"7332:59:201"}]},"name":"abi_decode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7085:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"7093:3:201","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"7101:8:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"7111:6:201","type":""}],"src":"7050:347:201"},{"body":{"nodeType":"YulBlock","src":"7558:671:201","statements":[{"body":{"nodeType":"YulBlock","src":"7605:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7614:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7617:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7607:6:201"},"nodeType":"YulFunctionCall","src":"7607:12:201"},"nodeType":"YulExpressionStatement","src":"7607:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7579:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"7588:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7575:3:201"},"nodeType":"YulFunctionCall","src":"7575:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"7600:3:201","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7571:3:201"},"nodeType":"YulFunctionCall","src":"7571:33:201"},"nodeType":"YulIf","src":"7568:53:201"},{"nodeType":"YulVariableDeclaration","src":"7630:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7656:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7643:12:201"},"nodeType":"YulFunctionCall","src":"7643:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7634:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7700:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7675:24:201"},"nodeType":"YulFunctionCall","src":"7675:31:201"},"nodeType":"YulExpressionStatement","src":"7675:31:201"},{"nodeType":"YulAssignment","src":"7715:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"7725:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7715:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"7739:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7771:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7782:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7767:3:201"},"nodeType":"YulFunctionCall","src":"7767:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7754:12:201"},"nodeType":"YulFunctionCall","src":"7754:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7743:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7820:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7795:24:201"},"nodeType":"YulFunctionCall","src":"7795:33:201"},"nodeType":"YulExpressionStatement","src":"7795:33:201"},{"nodeType":"YulAssignment","src":"7837:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"7847:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7837:6:201"}]},{"nodeType":"YulAssignment","src":"7863:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7890:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7901:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7886:3:201"},"nodeType":"YulFunctionCall","src":"7886:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7873:12:201"},"nodeType":"YulFunctionCall","src":"7873:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"7863:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"7914:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7945:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7956:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7941:3:201"},"nodeType":"YulFunctionCall","src":"7941:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7928:12:201"},"nodeType":"YulFunctionCall","src":"7928:32:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"7918:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"8003:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8012:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8015:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8005:6:201"},"nodeType":"YulFunctionCall","src":"8005:12:201"},"nodeType":"YulExpressionStatement","src":"8005:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7975:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7983:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7972:2:201"},"nodeType":"YulFunctionCall","src":"7972:30:201"},"nodeType":"YulIf","src":"7969:50:201"},{"nodeType":"YulVariableDeclaration","src":"8028:84:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8084:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"8095:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8080:3:201"},"nodeType":"YulFunctionCall","src":"8080:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"8104:7:201"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"8054:25:201"},"nodeType":"YulFunctionCall","src":"8054:58:201"},"variables":[{"name":"value3_1","nodeType":"YulTypedName","src":"8032:8:201","type":""},{"name":"value4_1","nodeType":"YulTypedName","src":"8042:8:201","type":""}]},{"nodeType":"YulAssignment","src":"8121:18:201","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"8131:8:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"8121:6:201"}]},{"nodeType":"YulAssignment","src":"8148:18:201","value":{"name":"value4_1","nodeType":"YulIdentifier","src":"8158:8:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"8148:6:201"}]},{"nodeType":"YulAssignment","src":"8175:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8207:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8218:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8203:3:201"},"nodeType":"YulFunctionCall","src":"8203:19:201"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"8185:17:201"},"nodeType":"YulFunctionCall","src":"8185:38:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"8175:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_bytes_calldata_ptrt_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7484:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7495:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7507:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7515:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7523:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"7531:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"7539:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"7547:6:201","type":""}],"src":"7402:827:201"},{"body":{"nodeType":"YulBlock","src":"8413:83:201","statements":[{"nodeType":"YulAssignment","src":"8423:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8435:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8446:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8431:3:201"},"nodeType":"YulFunctionCall","src":"8431:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8423:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8465:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8482:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8476:5:201"},"nodeType":"YulFunctionCall","src":"8476:13:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8458:6:201"},"nodeType":"YulFunctionCall","src":"8458:32:201"},"nodeType":"YulExpressionStatement","src":"8458:32:201"}]},"name":"abi_encode_tuple_t_struct$_UserConfigurationMap_$21322_memory_ptr__to_t_struct$_UserConfigurationMap_$21322_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8382:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8393:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8404:4:201","type":""}],"src":"8234:262:201"},{"body":{"nodeType":"YulBlock","src":"8570:115:201","statements":[{"body":{"nodeType":"YulBlock","src":"8616:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8625:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8628:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8618:6:201"},"nodeType":"YulFunctionCall","src":"8618:12:201"},"nodeType":"YulExpressionStatement","src":"8618:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8591:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"8600:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8587:3:201"},"nodeType":"YulFunctionCall","src":"8587:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"8612:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8583:3:201"},"nodeType":"YulFunctionCall","src":"8583:32:201"},"nodeType":"YulIf","src":"8580:52:201"},{"nodeType":"YulAssignment","src":"8641:38:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8669:9:201"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"8651:17:201"},"nodeType":"YulFunctionCall","src":"8651:28:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8641:6:201"}]}]},"name":"abi_decode_tuple_t_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8536:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8547:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8559:6:201","type":""}],"src":"8501:184:201"},{"body":{"nodeType":"YulBlock","src":"8791:125:201","statements":[{"nodeType":"YulAssignment","src":"8801:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8813:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8824:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8809:3:201"},"nodeType":"YulFunctionCall","src":"8809:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8801:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8843:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8858:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8866:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8854:3:201"},"nodeType":"YulFunctionCall","src":"8854:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8836:6:201"},"nodeType":"YulFunctionCall","src":"8836:74:201"},"nodeType":"YulExpressionStatement","src":"8836:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8760:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8771:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8782:4:201","type":""}],"src":"8690:226:201"},{"body":{"nodeType":"YulBlock","src":"9042:404:201","statements":[{"body":{"nodeType":"YulBlock","src":"9089:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9098:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9101:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9091:6:201"},"nodeType":"YulFunctionCall","src":"9091:12:201"},"nodeType":"YulExpressionStatement","src":"9091:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9063:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"9072:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9059:3:201"},"nodeType":"YulFunctionCall","src":"9059:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"9084:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9055:3:201"},"nodeType":"YulFunctionCall","src":"9055:33:201"},"nodeType":"YulIf","src":"9052:53:201"},{"nodeType":"YulVariableDeclaration","src":"9114:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9140:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9127:12:201"},"nodeType":"YulFunctionCall","src":"9127:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9118:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9184:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9159:24:201"},"nodeType":"YulFunctionCall","src":"9159:31:201"},"nodeType":"YulExpressionStatement","src":"9159:31:201"},{"nodeType":"YulAssignment","src":"9199:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"9209:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9199:6:201"}]},{"nodeType":"YulAssignment","src":"9223:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9250:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9261:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9246:3:201"},"nodeType":"YulFunctionCall","src":"9246:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9233:12:201"},"nodeType":"YulFunctionCall","src":"9233:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"9223:6:201"}]},{"nodeType":"YulAssignment","src":"9274:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9301:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9312:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9297:3:201"},"nodeType":"YulFunctionCall","src":"9297:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9284:12:201"},"nodeType":"YulFunctionCall","src":"9284:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"9274:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"9325:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9357:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9368:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9353:3:201"},"nodeType":"YulFunctionCall","src":"9353:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9340:12:201"},"nodeType":"YulFunctionCall","src":"9340:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"9329:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"9406:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9381:24:201"},"nodeType":"YulFunctionCall","src":"9381:33:201"},"nodeType":"YulExpressionStatement","src":"9381:33:201"},{"nodeType":"YulAssignment","src":"9423:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"9433:7:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"9423:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8984:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8995:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9007:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9015:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9023:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9031:6:201","type":""}],"src":"8921:525:201"},{"body":{"nodeType":"YulBlock","src":"9535:298:201","statements":[{"body":{"nodeType":"YulBlock","src":"9581:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9590:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9593:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9583:6:201"},"nodeType":"YulFunctionCall","src":"9583:12:201"},"nodeType":"YulExpressionStatement","src":"9583:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9556:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"9565:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9552:3:201"},"nodeType":"YulFunctionCall","src":"9552:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"9577:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9548:3:201"},"nodeType":"YulFunctionCall","src":"9548:32:201"},"nodeType":"YulIf","src":"9545:52:201"},{"nodeType":"YulVariableDeclaration","src":"9606:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9632:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9619:12:201"},"nodeType":"YulFunctionCall","src":"9619:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9610:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9676:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9651:24:201"},"nodeType":"YulFunctionCall","src":"9651:31:201"},"nodeType":"YulExpressionStatement","src":"9651:31:201"},{"nodeType":"YulAssignment","src":"9691:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"9701:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9691:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"9715:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9747:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9758:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9743:3:201"},"nodeType":"YulFunctionCall","src":"9743:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9730:12:201"},"nodeType":"YulFunctionCall","src":"9730:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"9719:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"9793:7:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"9771:21:201"},"nodeType":"YulFunctionCall","src":"9771:30:201"},"nodeType":"YulExpressionStatement","src":"9771:30:201"},{"nodeType":"YulAssignment","src":"9810:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"9820:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"9810:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9493:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9504:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9516:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9524:6:201","type":""}],"src":"9451:382:201"},{"body":{"nodeType":"YulBlock","src":"9958:409:201","statements":[{"body":{"nodeType":"YulBlock","src":"10005:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10014:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10017:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10007:6:201"},"nodeType":"YulFunctionCall","src":"10007:12:201"},"nodeType":"YulExpressionStatement","src":"10007:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9979:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"9988:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9975:3:201"},"nodeType":"YulFunctionCall","src":"9975:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"10000:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9971:3:201"},"nodeType":"YulFunctionCall","src":"9971:33:201"},"nodeType":"YulIf","src":"9968:53:201"},{"nodeType":"YulVariableDeclaration","src":"10030:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10056:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10043:12:201"},"nodeType":"YulFunctionCall","src":"10043:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"10034:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10100:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"10075:24:201"},"nodeType":"YulFunctionCall","src":"10075:31:201"},"nodeType":"YulExpressionStatement","src":"10075:31:201"},{"nodeType":"YulAssignment","src":"10115:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"10125:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"10115:6:201"}]},{"nodeType":"YulAssignment","src":"10139:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10166:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10177:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10162:3:201"},"nodeType":"YulFunctionCall","src":"10162:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10149:12:201"},"nodeType":"YulFunctionCall","src":"10149:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"10139:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"10190:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10222:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10233:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10218:3:201"},"nodeType":"YulFunctionCall","src":"10218:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10205:12:201"},"nodeType":"YulFunctionCall","src":"10205:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"10194:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"10271:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"10246:24:201"},"nodeType":"YulFunctionCall","src":"10246:33:201"},"nodeType":"YulExpressionStatement","src":"10246:33:201"},{"nodeType":"YulAssignment","src":"10288:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"10298:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"10288:6:201"}]},{"nodeType":"YulAssignment","src":"10314:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10346:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10357:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10342:3:201"},"nodeType":"YulFunctionCall","src":"10342:18:201"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"10324:17:201"},"nodeType":"YulFunctionCall","src":"10324:37:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"10314:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_addresst_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9900:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9911:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9923:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9931:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9939:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9947:6:201","type":""}],"src":"9838:529:201"},{"body":{"nodeType":"YulBlock","src":"10476:352:201","statements":[{"body":{"nodeType":"YulBlock","src":"10522:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10531:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10534:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10524:6:201"},"nodeType":"YulFunctionCall","src":"10524:12:201"},"nodeType":"YulExpressionStatement","src":"10524:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"10497:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"10506:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10493:3:201"},"nodeType":"YulFunctionCall","src":"10493:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"10518:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10489:3:201"},"nodeType":"YulFunctionCall","src":"10489:32:201"},"nodeType":"YulIf","src":"10486:52:201"},{"nodeType":"YulVariableDeclaration","src":"10547:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10573:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10560:12:201"},"nodeType":"YulFunctionCall","src":"10560:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"10551:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10617:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"10592:24:201"},"nodeType":"YulFunctionCall","src":"10592:31:201"},"nodeType":"YulExpressionStatement","src":"10592:31:201"},{"nodeType":"YulAssignment","src":"10632:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"10642:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"10632:6:201"}]},{"nodeType":"YulAssignment","src":"10656:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10683:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10694:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10679:3:201"},"nodeType":"YulFunctionCall","src":"10679:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10666:12:201"},"nodeType":"YulFunctionCall","src":"10666:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"10656:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"10707:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10739:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10750:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10735:3:201"},"nodeType":"YulFunctionCall","src":"10735:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10722:12:201"},"nodeType":"YulFunctionCall","src":"10722:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"10711:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"10788:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"10763:24:201"},"nodeType":"YulFunctionCall","src":"10763:33:201"},"nodeType":"YulExpressionStatement","src":"10763:33:201"},{"nodeType":"YulAssignment","src":"10805:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"10815:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"10805:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10426:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"10437:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"10449:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10457:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10465:6:201","type":""}],"src":"10372:456:201"},{"body":{"nodeType":"YulBlock","src":"10883:481:201","statements":[{"nodeType":"YulVariableDeclaration","src":"10893:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10913:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10907:5:201"},"nodeType":"YulFunctionCall","src":"10907:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"10897:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10935:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"10940:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10928:6:201"},"nodeType":"YulFunctionCall","src":"10928:19:201"},"nodeType":"YulExpressionStatement","src":"10928:19:201"},{"nodeType":"YulVariableDeclaration","src":"10956:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10965:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"10960:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"11027:110:201","statements":[{"nodeType":"YulVariableDeclaration","src":"11041:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11051:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11045:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11083:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"11088:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11079:3:201"},"nodeType":"YulFunctionCall","src":"11079:11:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11092:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11075:3:201"},"nodeType":"YulFunctionCall","src":"11075:20:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11111:5:201"},{"name":"i","nodeType":"YulIdentifier","src":"11118:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11107:3:201"},"nodeType":"YulFunctionCall","src":"11107:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11122:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11103:3:201"},"nodeType":"YulFunctionCall","src":"11103:22:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11097:5:201"},"nodeType":"YulFunctionCall","src":"11097:29:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11068:6:201"},"nodeType":"YulFunctionCall","src":"11068:59:201"},"nodeType":"YulExpressionStatement","src":"11068:59:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"10986:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"10989:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10983:2:201"},"nodeType":"YulFunctionCall","src":"10983:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"10997:21:201","statements":[{"nodeType":"YulAssignment","src":"10999:17:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"11008:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"11011:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11004:3:201"},"nodeType":"YulFunctionCall","src":"11004:12:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"10999:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"10979:3:201","statements":[]},"src":"10975:162:201"},{"body":{"nodeType":"YulBlock","src":"11171:62:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11200:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"11205:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11196:3:201"},"nodeType":"YulFunctionCall","src":"11196:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"11214:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11192:3:201"},"nodeType":"YulFunctionCall","src":"11192:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"11221:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11185:6:201"},"nodeType":"YulFunctionCall","src":"11185:38:201"},"nodeType":"YulExpressionStatement","src":"11185:38:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"11152:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"11155:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11149:2:201"},"nodeType":"YulFunctionCall","src":"11149:13:201"},"nodeType":"YulIf","src":"11146:87:201"},{"nodeType":"YulAssignment","src":"11242:116:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11257:3:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"11270:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"11278:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11266:3:201"},"nodeType":"YulFunctionCall","src":"11266:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"11283:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11262:3:201"},"nodeType":"YulFunctionCall","src":"11262:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11253:3:201"},"nodeType":"YulFunctionCall","src":"11253:98:201"},{"kind":"number","nodeType":"YulLiteral","src":"11353:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11249:3:201"},"nodeType":"YulFunctionCall","src":"11249:109:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"11242:3:201"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"10860:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"10867:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"10875:3:201","type":""}],"src":"10833:531:201"},{"body":{"nodeType":"YulBlock","src":"11534:530:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11551:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11562:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11544:6:201"},"nodeType":"YulFunctionCall","src":"11544:21:201"},"nodeType":"YulExpressionStatement","src":"11544:21:201"},{"nodeType":"YulVariableDeclaration","src":"11574:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11584:6:201","type":"","value":"0xffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11578:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11610:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11621:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11606:3:201"},"nodeType":"YulFunctionCall","src":"11606:18:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11636:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11630:5:201"},"nodeType":"YulFunctionCall","src":"11630:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11645:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11626:3:201"},"nodeType":"YulFunctionCall","src":"11626:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11599:6:201"},"nodeType":"YulFunctionCall","src":"11599:50:201"},"nodeType":"YulExpressionStatement","src":"11599:50:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11669:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11680:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11665:3:201"},"nodeType":"YulFunctionCall","src":"11665:18:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11699:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"11707:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11695:3:201"},"nodeType":"YulFunctionCall","src":"11695:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11689:5:201"},"nodeType":"YulFunctionCall","src":"11689:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11713:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11685:3:201"},"nodeType":"YulFunctionCall","src":"11685:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11658:6:201"},"nodeType":"YulFunctionCall","src":"11658:59:201"},"nodeType":"YulExpressionStatement","src":"11658:59:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11737:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11748:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11733:3:201"},"nodeType":"YulFunctionCall","src":"11733:18:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11767:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"11775:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11763:3:201"},"nodeType":"YulFunctionCall","src":"11763:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11757:5:201"},"nodeType":"YulFunctionCall","src":"11757:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11781:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11753:3:201"},"nodeType":"YulFunctionCall","src":"11753:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11726:6:201"},"nodeType":"YulFunctionCall","src":"11726:59:201"},"nodeType":"YulExpressionStatement","src":"11726:59:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11805:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11816:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11801:3:201"},"nodeType":"YulFunctionCall","src":"11801:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11836:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"11844:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11832:3:201"},"nodeType":"YulFunctionCall","src":"11832:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11826:5:201"},"nodeType":"YulFunctionCall","src":"11826:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"11850:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11822:3:201"},"nodeType":"YulFunctionCall","src":"11822:71:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11794:6:201"},"nodeType":"YulFunctionCall","src":"11794:100:201"},"nodeType":"YulExpressionStatement","src":"11794:100:201"},{"nodeType":"YulVariableDeclaration","src":"11903:43:201","value":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11933:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"11941:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11929:3:201"},"nodeType":"YulFunctionCall","src":"11929:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11923:5:201"},"nodeType":"YulFunctionCall","src":"11923:23:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"11907:12:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11966:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11977:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11962:3:201"},"nodeType":"YulFunctionCall","src":"11962:20:201"},{"kind":"number","nodeType":"YulLiteral","src":"11984:4:201","type":"","value":"0xa0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11955:6:201"},"nodeType":"YulFunctionCall","src":"11955:34:201"},"nodeType":"YulExpressionStatement","src":"11955:34:201"},{"nodeType":"YulAssignment","src":"11998:60:201","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"12024:12:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12042:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12053:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12038:3:201"},"nodeType":"YulFunctionCall","src":"12038:19:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"12006:17:201"},"nodeType":"YulFunctionCall","src":"12006:52:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11998:4:201"}]}]},"name":"abi_encode_tuple_t_struct$_EModeCategory_$21333_memory_ptr__to_t_struct$_EModeCategory_$21333_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11503:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11514:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11525:4:201","type":""}],"src":"11369:695:201"},{"body":{"nodeType":"YulBlock","src":"12207:675:201","statements":[{"body":{"nodeType":"YulBlock","src":"12254:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12263:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12266:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12256:6:201"},"nodeType":"YulFunctionCall","src":"12256:12:201"},"nodeType":"YulExpressionStatement","src":"12256:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"12228:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"12237:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12224:3:201"},"nodeType":"YulFunctionCall","src":"12224:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"12249:3:201","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12220:3:201"},"nodeType":"YulFunctionCall","src":"12220:33:201"},"nodeType":"YulIf","src":"12217:53:201"},{"nodeType":"YulVariableDeclaration","src":"12279:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12305:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12292:12:201"},"nodeType":"YulFunctionCall","src":"12292:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"12283:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12349:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12324:24:201"},"nodeType":"YulFunctionCall","src":"12324:31:201"},"nodeType":"YulExpressionStatement","src":"12324:31:201"},{"nodeType":"YulAssignment","src":"12364:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"12374:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"12364:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"12388:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12420:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12431:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12416:3:201"},"nodeType":"YulFunctionCall","src":"12416:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12403:12:201"},"nodeType":"YulFunctionCall","src":"12403:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"12392:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"12469:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12444:24:201"},"nodeType":"YulFunctionCall","src":"12444:33:201"},"nodeType":"YulExpressionStatement","src":"12444:33:201"},{"nodeType":"YulAssignment","src":"12486:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"12496:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"12486:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"12512:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12544:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12555:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12540:3:201"},"nodeType":"YulFunctionCall","src":"12540:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12527:12:201"},"nodeType":"YulFunctionCall","src":"12527:32:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"12516:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"12593:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12568:24:201"},"nodeType":"YulFunctionCall","src":"12568:33:201"},"nodeType":"YulExpressionStatement","src":"12568:33:201"},{"nodeType":"YulAssignment","src":"12610:17:201","value":{"name":"value_2","nodeType":"YulIdentifier","src":"12620:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"12610:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"12636:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12668:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12679:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12664:3:201"},"nodeType":"YulFunctionCall","src":"12664:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12651:12:201"},"nodeType":"YulFunctionCall","src":"12651:32:201"},"variables":[{"name":"value_3","nodeType":"YulTypedName","src":"12640:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_3","nodeType":"YulIdentifier","src":"12717:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12692:24:201"},"nodeType":"YulFunctionCall","src":"12692:33:201"},"nodeType":"YulExpressionStatement","src":"12692:33:201"},{"nodeType":"YulAssignment","src":"12734:17:201","value":{"name":"value_3","nodeType":"YulIdentifier","src":"12744:7:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"12734:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"12760:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12792:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12803:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12788:3:201"},"nodeType":"YulFunctionCall","src":"12788:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12775:12:201"},"nodeType":"YulFunctionCall","src":"12775:33:201"},"variables":[{"name":"value_4","nodeType":"YulTypedName","src":"12764:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_4","nodeType":"YulIdentifier","src":"12842:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12817:24:201"},"nodeType":"YulFunctionCall","src":"12817:33:201"},"nodeType":"YulExpressionStatement","src":"12817:33:201"},{"nodeType":"YulAssignment","src":"12859:17:201","value":{"name":"value_4","nodeType":"YulIdentifier","src":"12869:7:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"12859:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12141:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"12152:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"12164:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12172:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12180:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12188:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12196:6:201","type":""}],"src":"12069:813:201"},{"body":{"nodeType":"YulBlock","src":"12974:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"13020:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13029:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13032:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13022:6:201"},"nodeType":"YulFunctionCall","src":"13022:12:201"},"nodeType":"YulExpressionStatement","src":"13022:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"12995:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"13004:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12991:3:201"},"nodeType":"YulFunctionCall","src":"12991:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"13016:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12987:3:201"},"nodeType":"YulFunctionCall","src":"12987:32:201"},"nodeType":"YulIf","src":"12984:52:201"},{"nodeType":"YulVariableDeclaration","src":"13045:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13071:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13058:12:201"},"nodeType":"YulFunctionCall","src":"13058:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13049:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13115:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"13090:24:201"},"nodeType":"YulFunctionCall","src":"13090:31:201"},"nodeType":"YulExpressionStatement","src":"13090:31:201"},{"nodeType":"YulAssignment","src":"13130:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"13140:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13130:6:201"}]},{"nodeType":"YulAssignment","src":"13154:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13181:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13192:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13177:3:201"},"nodeType":"YulFunctionCall","src":"13177:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13164:12:201"},"nodeType":"YulFunctionCall","src":"13164:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"13154:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12932:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"12943:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"12955:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12963:6:201","type":""}],"src":"12887:315:201"},{"body":{"nodeType":"YulBlock","src":"13291:283:201","statements":[{"body":{"nodeType":"YulBlock","src":"13340:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13349:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13352:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13342:6:201"},"nodeType":"YulFunctionCall","src":"13342:12:201"},"nodeType":"YulExpressionStatement","src":"13342:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13319:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13327:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13315:3:201"},"nodeType":"YulFunctionCall","src":"13315:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"13334:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13311:3:201"},"nodeType":"YulFunctionCall","src":"13311:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13304:6:201"},"nodeType":"YulFunctionCall","src":"13304:35:201"},"nodeType":"YulIf","src":"13301:55:201"},{"nodeType":"YulAssignment","src":"13365:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13388:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13375:12:201"},"nodeType":"YulFunctionCall","src":"13375:20:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"13365:6:201"}]},{"body":{"nodeType":"YulBlock","src":"13438:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13447:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13450:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13440:6:201"},"nodeType":"YulFunctionCall","src":"13440:12:201"},"nodeType":"YulExpressionStatement","src":"13440:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"13410:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13418:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13407:2:201"},"nodeType":"YulFunctionCall","src":"13407:30:201"},"nodeType":"YulIf","src":"13404:50:201"},{"nodeType":"YulAssignment","src":"13463:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13479:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13487:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13475:3:201"},"nodeType":"YulFunctionCall","src":"13475:17:201"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"13463:8:201"}]},{"body":{"nodeType":"YulBlock","src":"13552:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13561:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13564:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13554:6:201"},"nodeType":"YulFunctionCall","src":"13554:12:201"},"nodeType":"YulExpressionStatement","src":"13554:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13515:6:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13527:1:201","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"13530:6:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"13523:3:201"},"nodeType":"YulFunctionCall","src":"13523:14:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13511:3:201"},"nodeType":"YulFunctionCall","src":"13511:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"13540:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13507:3:201"},"nodeType":"YulFunctionCall","src":"13507:38:201"},{"name":"end","nodeType":"YulIdentifier","src":"13547:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13504:2:201"},"nodeType":"YulFunctionCall","src":"13504:47:201"},"nodeType":"YulIf","src":"13501:67:201"}]},"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"13254:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"13262:3:201","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"13270:8:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"13280:6:201","type":""}],"src":"13207:367:201"},{"body":{"nodeType":"YulBlock","src":"13684:332:201","statements":[{"body":{"nodeType":"YulBlock","src":"13730:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13739:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13742:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13732:6:201"},"nodeType":"YulFunctionCall","src":"13732:12:201"},"nodeType":"YulExpressionStatement","src":"13732:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13705:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"13714:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13701:3:201"},"nodeType":"YulFunctionCall","src":"13701:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"13726:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13697:3:201"},"nodeType":"YulFunctionCall","src":"13697:32:201"},"nodeType":"YulIf","src":"13694:52:201"},{"nodeType":"YulVariableDeclaration","src":"13755:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13782:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13769:12:201"},"nodeType":"YulFunctionCall","src":"13769:23:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"13759:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"13835:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13844:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13847:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13837:6:201"},"nodeType":"YulFunctionCall","src":"13837:12:201"},"nodeType":"YulExpressionStatement","src":"13837:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13807:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13815:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13804:2:201"},"nodeType":"YulFunctionCall","src":"13804:30:201"},"nodeType":"YulIf","src":"13801:50:201"},{"nodeType":"YulVariableDeclaration","src":"13860:96:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13928:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"13939:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13924:3:201"},"nodeType":"YulFunctionCall","src":"13924:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"13948:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"13886:37:201"},"nodeType":"YulFunctionCall","src":"13886:70:201"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"13864:8:201","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"13874:8:201","type":""}]},{"nodeType":"YulAssignment","src":"13965:18:201","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"13975:8:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13965:6:201"}]},{"nodeType":"YulAssignment","src":"13992:18:201","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"14002:8:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"13992:6:201"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13642:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13653:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13665:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13673:6:201","type":""}],"src":"13579:437:201"},{"body":{"nodeType":"YulBlock","src":"14158:461:201","statements":[{"body":{"nodeType":"YulBlock","src":"14205:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14214:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14217:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14207:6:201"},"nodeType":"YulFunctionCall","src":"14207:12:201"},"nodeType":"YulExpressionStatement","src":"14207:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14179:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"14188:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14175:3:201"},"nodeType":"YulFunctionCall","src":"14175:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"14200:3:201","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14171:3:201"},"nodeType":"YulFunctionCall","src":"14171:33:201"},"nodeType":"YulIf","src":"14168:53:201"},{"nodeType":"YulVariableDeclaration","src":"14230:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14256:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14243:12:201"},"nodeType":"YulFunctionCall","src":"14243:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"14234:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14300:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"14275:24:201"},"nodeType":"YulFunctionCall","src":"14275:31:201"},"nodeType":"YulExpressionStatement","src":"14275:31:201"},{"nodeType":"YulAssignment","src":"14315:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"14325:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14315:6:201"}]},{"nodeType":"YulAssignment","src":"14339:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14366:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14377:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14362:3:201"},"nodeType":"YulFunctionCall","src":"14362:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14349:12:201"},"nodeType":"YulFunctionCall","src":"14349:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"14339:6:201"}]},{"nodeType":"YulAssignment","src":"14390:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14417:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14428:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14413:3:201"},"nodeType":"YulFunctionCall","src":"14413:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14400:12:201"},"nodeType":"YulFunctionCall","src":"14400:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"14390:6:201"}]},{"nodeType":"YulAssignment","src":"14441:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14473:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14484:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14469:3:201"},"nodeType":"YulFunctionCall","src":"14469:18:201"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"14451:17:201"},"nodeType":"YulFunctionCall","src":"14451:37:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"14441:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"14497:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14529:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14540:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14525:3:201"},"nodeType":"YulFunctionCall","src":"14525:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14512:12:201"},"nodeType":"YulFunctionCall","src":"14512:33:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"14501:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"14579:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"14554:24:201"},"nodeType":"YulFunctionCall","src":"14554:33:201"},"nodeType":"YulExpressionStatement","src":"14554:33:201"},{"nodeType":"YulAssignment","src":"14596:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"14606:7:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"14596:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_uint16t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14092:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14103:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14115:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14123:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14131:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14139:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"14147:6:201","type":""}],"src":"14021:598:201"},{"body":{"nodeType":"YulBlock","src":"14920:1276:201","statements":[{"body":{"nodeType":"YulBlock","src":"14967:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14976:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14979:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14969:6:201"},"nodeType":"YulFunctionCall","src":"14969:12:201"},"nodeType":"YulExpressionStatement","src":"14969:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14941:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"14950:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14937:3:201"},"nodeType":"YulFunctionCall","src":"14937:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"14962:3:201","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14933:3:201"},"nodeType":"YulFunctionCall","src":"14933:33:201"},"nodeType":"YulIf","src":"14930:53:201"},{"nodeType":"YulAssignment","src":"14992:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15021:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"15002:18:201"},"nodeType":"YulFunctionCall","src":"15002:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14992:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"15040:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"15050:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15044:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"15121:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15130:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15133:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15123:6:201"},"nodeType":"YulFunctionCall","src":"15123:12:201"},"nodeType":"YulExpressionStatement","src":"15123:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15100:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15111:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15096:3:201"},"nodeType":"YulFunctionCall","src":"15096:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15083:12:201"},"nodeType":"YulFunctionCall","src":"15083:32:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15117:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15080:2:201"},"nodeType":"YulFunctionCall","src":"15080:40:201"},"nodeType":"YulIf","src":"15077:60:201"},{"nodeType":"YulVariableDeclaration","src":"15146:122:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15214:9:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15242:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15253:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15238:3:201"},"nodeType":"YulFunctionCall","src":"15238:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15225:12:201"},"nodeType":"YulFunctionCall","src":"15225:32:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15210:3:201"},"nodeType":"YulFunctionCall","src":"15210:48:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15260:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"15172:37:201"},"nodeType":"YulFunctionCall","src":"15172:96:201"},"variables":[{"name":"value1_1","nodeType":"YulTypedName","src":"15150:8:201","type":""},{"name":"value2_1","nodeType":"YulTypedName","src":"15160:8:201","type":""}]},{"nodeType":"YulAssignment","src":"15277:18:201","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"15287:8:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"15277:6:201"}]},{"nodeType":"YulAssignment","src":"15304:18:201","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"15314:8:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"15304:6:201"}]},{"body":{"nodeType":"YulBlock","src":"15375:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15384:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15387:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15377:6:201"},"nodeType":"YulFunctionCall","src":"15377:12:201"},"nodeType":"YulExpressionStatement","src":"15377:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15354:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15365:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15350:3:201"},"nodeType":"YulFunctionCall","src":"15350:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15337:12:201"},"nodeType":"YulFunctionCall","src":"15337:32:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15371:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15334:2:201"},"nodeType":"YulFunctionCall","src":"15334:40:201"},"nodeType":"YulIf","src":"15331:60:201"},{"nodeType":"YulVariableDeclaration","src":"15400:122:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15468:9:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15496:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15507:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15492:3:201"},"nodeType":"YulFunctionCall","src":"15492:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15479:12:201"},"nodeType":"YulFunctionCall","src":"15479:32:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15464:3:201"},"nodeType":"YulFunctionCall","src":"15464:48:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15514:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"15426:37:201"},"nodeType":"YulFunctionCall","src":"15426:96:201"},"variables":[{"name":"value3_1","nodeType":"YulTypedName","src":"15404:8:201","type":""},{"name":"value4_1","nodeType":"YulTypedName","src":"15414:8:201","type":""}]},{"nodeType":"YulAssignment","src":"15531:18:201","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"15541:8:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"15531:6:201"}]},{"nodeType":"YulAssignment","src":"15558:18:201","value":{"name":"value4_1","nodeType":"YulIdentifier","src":"15568:8:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"15558:6:201"}]},{"body":{"nodeType":"YulBlock","src":"15629:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15638:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15641:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15631:6:201"},"nodeType":"YulFunctionCall","src":"15631:12:201"},"nodeType":"YulExpressionStatement","src":"15631:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15608:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15619:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15604:3:201"},"nodeType":"YulFunctionCall","src":"15604:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15591:12:201"},"nodeType":"YulFunctionCall","src":"15591:32:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15625:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15588:2:201"},"nodeType":"YulFunctionCall","src":"15588:40:201"},"nodeType":"YulIf","src":"15585:60:201"},{"nodeType":"YulVariableDeclaration","src":"15654:122:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15722:9:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15750:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15761:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15746:3:201"},"nodeType":"YulFunctionCall","src":"15746:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15733:12:201"},"nodeType":"YulFunctionCall","src":"15733:32:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15718:3:201"},"nodeType":"YulFunctionCall","src":"15718:48:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15768:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"15680:37:201"},"nodeType":"YulFunctionCall","src":"15680:96:201"},"variables":[{"name":"value5_1","nodeType":"YulTypedName","src":"15658:8:201","type":""},{"name":"value6_1","nodeType":"YulTypedName","src":"15668:8:201","type":""}]},{"nodeType":"YulAssignment","src":"15785:18:201","value":{"name":"value5_1","nodeType":"YulIdentifier","src":"15795:8:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"15785:6:201"}]},{"nodeType":"YulAssignment","src":"15812:18:201","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"15822:8:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"15812:6:201"}]},{"nodeType":"YulAssignment","src":"15839:49:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15872:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15883:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15868:3:201"},"nodeType":"YulFunctionCall","src":"15868:19:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"15849:18:201"},"nodeType":"YulFunctionCall","src":"15849:39:201"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"15839:6:201"}]},{"body":{"nodeType":"YulBlock","src":"15942:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15951:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15954:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15944:6:201"},"nodeType":"YulFunctionCall","src":"15944:12:201"},"nodeType":"YulExpressionStatement","src":"15944:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15920:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15931:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15916:3:201"},"nodeType":"YulFunctionCall","src":"15916:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"15903:12:201"},"nodeType":"YulFunctionCall","src":"15903:33:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15938:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15900:2:201"},"nodeType":"YulFunctionCall","src":"15900:41:201"},"nodeType":"YulIf","src":"15897:61:201"},{"nodeType":"YulVariableDeclaration","src":"15967:111:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16023:9:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16051:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16062:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16047:3:201"},"nodeType":"YulFunctionCall","src":"16047:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"16034:12:201"},"nodeType":"YulFunctionCall","src":"16034:33:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16019:3:201"},"nodeType":"YulFunctionCall","src":"16019:49:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"16070:7:201"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"15993:25:201"},"nodeType":"YulFunctionCall","src":"15993:85:201"},"variables":[{"name":"value8_1","nodeType":"YulTypedName","src":"15971:8:201","type":""},{"name":"value9_1","nodeType":"YulTypedName","src":"15981:8:201","type":""}]},{"nodeType":"YulAssignment","src":"16087:18:201","value":{"name":"value8_1","nodeType":"YulIdentifier","src":"16097:8:201"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"16087:6:201"}]},{"nodeType":"YulAssignment","src":"16114:18:201","value":{"name":"value9_1","nodeType":"YulIdentifier","src":"16124:8:201"},"variableNames":[{"name":"value9","nodeType":"YulIdentifier","src":"16114:6:201"}]},{"nodeType":"YulAssignment","src":"16141:49:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16174:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16185:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16170:3:201"},"nodeType":"YulFunctionCall","src":"16170:19:201"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"16152:17:201"},"nodeType":"YulFunctionCall","src":"16152:38:201"},"variableNames":[{"name":"value10","nodeType":"YulIdentifier","src":"16141:7:201"}]}]},"name":"abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_addresst_bytes_calldata_ptrt_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14805:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14816:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14828:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14836:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14844:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14852:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"14860:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"14868:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"14876:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"14884:6:201","type":""},{"name":"value8","nodeType":"YulTypedName","src":"14892:6:201","type":""},{"name":"value9","nodeType":"YulTypedName","src":"14900:6:201","type":""},{"name":"value10","nodeType":"YulTypedName","src":"14908:7:201","type":""}],"src":"14624:1572:201"},{"body":{"nodeType":"YulBlock","src":"16250:139:201","statements":[{"nodeType":"YulAssignment","src":"16260:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"16282:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"16269:12:201"},"nodeType":"YulFunctionCall","src":"16269:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"16260:5:201"}]},{"body":{"nodeType":"YulBlock","src":"16367:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16376:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16379:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16369:6:201"},"nodeType":"YulFunctionCall","src":"16369:12:201"},"nodeType":"YulExpressionStatement","src":"16369:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16311:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16322:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"16329:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16318:3:201"},"nodeType":"YulFunctionCall","src":"16318:46:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"16308:2:201"},"nodeType":"YulFunctionCall","src":"16308:57:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"16301:6:201"},"nodeType":"YulFunctionCall","src":"16301:65:201"},"nodeType":"YulIf","src":"16298:85:201"}]},"name":"abi_decode_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"16229:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"16240:5:201","type":""}],"src":"16201:188:201"},{"body":{"nodeType":"YulBlock","src":"16481:173:201","statements":[{"body":{"nodeType":"YulBlock","src":"16527:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16536:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16539:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16529:6:201"},"nodeType":"YulFunctionCall","src":"16529:12:201"},"nodeType":"YulExpressionStatement","src":"16529:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"16502:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"16511:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16498:3:201"},"nodeType":"YulFunctionCall","src":"16498:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"16523:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"16494:3:201"},"nodeType":"YulFunctionCall","src":"16494:32:201"},"nodeType":"YulIf","src":"16491:52:201"},{"nodeType":"YulAssignment","src":"16552:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16581:9:201"}],"functionName":{"name":"abi_decode_uint128","nodeType":"YulIdentifier","src":"16562:18:201"},"nodeType":"YulFunctionCall","src":"16562:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"16552:6:201"}]},{"nodeType":"YulAssignment","src":"16600:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16633:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16644:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16629:3:201"},"nodeType":"YulFunctionCall","src":"16629:18:201"}],"functionName":{"name":"abi_decode_uint128","nodeType":"YulIdentifier","src":"16610:18:201"},"nodeType":"YulFunctionCall","src":"16610:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"16600:6:201"}]}]},"name":"abi_decode_tuple_t_uint128t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16439:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"16450:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"16462:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16470:6:201","type":""}],"src":"16394:260:201"},{"body":{"nodeType":"YulBlock","src":"16900:294:201","statements":[{"nodeType":"YulAssignment","src":"16910:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16922:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16933:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16918:3:201"},"nodeType":"YulFunctionCall","src":"16918:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16910:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16953:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"16964:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16946:6:201"},"nodeType":"YulFunctionCall","src":"16946:25:201"},"nodeType":"YulExpressionStatement","src":"16946:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16991:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17002:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16987:3:201"},"nodeType":"YulFunctionCall","src":"16987:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"17007:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16980:6:201"},"nodeType":"YulFunctionCall","src":"16980:34:201"},"nodeType":"YulExpressionStatement","src":"16980:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17034:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17045:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17030:3:201"},"nodeType":"YulFunctionCall","src":"17030:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"17050:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17023:6:201"},"nodeType":"YulFunctionCall","src":"17023:34:201"},"nodeType":"YulExpressionStatement","src":"17023:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17077:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17088:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17073:3:201"},"nodeType":"YulFunctionCall","src":"17073:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"17093:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17066:6:201"},"nodeType":"YulFunctionCall","src":"17066:34:201"},"nodeType":"YulExpressionStatement","src":"17066:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17120:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17131:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17116:3:201"},"nodeType":"YulFunctionCall","src":"17116:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"17137:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17109:6:201"},"nodeType":"YulFunctionCall","src":"17109:35:201"},"nodeType":"YulExpressionStatement","src":"17109:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17164:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17175:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17160:3:201"},"nodeType":"YulFunctionCall","src":"17160:19:201"},{"name":"value5","nodeType":"YulIdentifier","src":"17181:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17153:6:201"},"nodeType":"YulFunctionCall","src":"17153:35:201"},"nodeType":"YulExpressionStatement","src":"17153:35:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16829:9:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"16840:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"16848:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"16856:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"16864:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16872:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16880:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16891:4:201","type":""}],"src":"16659:535:201"},{"body":{"nodeType":"YulBlock","src":"17384:83:201","statements":[{"nodeType":"YulAssignment","src":"17394:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17406:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17417:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17402:3:201"},"nodeType":"YulFunctionCall","src":"17402:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17394:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17436:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"17453:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17447:5:201"},"nodeType":"YulFunctionCall","src":"17447:13:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17429:6:201"},"nodeType":"YulFunctionCall","src":"17429:32:201"},"nodeType":"YulExpressionStatement","src":"17429:32:201"}]},"name":"abi_encode_tuple_t_struct$_ReserveConfigurationMap_$21318_memory_ptr__to_t_struct$_ReserveConfigurationMap_$21318_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17353:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17364:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17375:4:201","type":""}],"src":"17199:268:201"},{"body":{"nodeType":"YulBlock","src":"17573:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"17619:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17628:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17631:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17621:6:201"},"nodeType":"YulFunctionCall","src":"17621:12:201"},"nodeType":"YulExpressionStatement","src":"17621:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"17594:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"17603:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17590:3:201"},"nodeType":"YulFunctionCall","src":"17590:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"17615:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"17586:3:201"},"nodeType":"YulFunctionCall","src":"17586:32:201"},"nodeType":"YulIf","src":"17583:52:201"},{"nodeType":"YulVariableDeclaration","src":"17644:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17670:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"17657:12:201"},"nodeType":"YulFunctionCall","src":"17657:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"17648:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17714:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"17689:24:201"},"nodeType":"YulFunctionCall","src":"17689:31:201"},"nodeType":"YulExpressionStatement","src":"17689:31:201"},{"nodeType":"YulAssignment","src":"17729:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"17739:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"17729:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17539:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"17550:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"17562:6:201","type":""}],"src":"17472:278:201"},{"body":{"nodeType":"YulBlock","src":"17859:352:201","statements":[{"body":{"nodeType":"YulBlock","src":"17905:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17914:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17917:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17907:6:201"},"nodeType":"YulFunctionCall","src":"17907:12:201"},"nodeType":"YulExpressionStatement","src":"17907:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"17880:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"17889:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17876:3:201"},"nodeType":"YulFunctionCall","src":"17876:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"17901:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"17872:3:201"},"nodeType":"YulFunctionCall","src":"17872:32:201"},"nodeType":"YulIf","src":"17869:52:201"},{"nodeType":"YulVariableDeclaration","src":"17930:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17956:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"17943:12:201"},"nodeType":"YulFunctionCall","src":"17943:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"17934:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18000:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"17975:24:201"},"nodeType":"YulFunctionCall","src":"17975:31:201"},"nodeType":"YulExpressionStatement","src":"17975:31:201"},{"nodeType":"YulAssignment","src":"18015:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"18025:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"18015:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"18039:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18071:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18082:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18067:3:201"},"nodeType":"YulFunctionCall","src":"18067:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"18054:12:201"},"nodeType":"YulFunctionCall","src":"18054:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"18043:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"18120:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"18095:24:201"},"nodeType":"YulFunctionCall","src":"18095:33:201"},"nodeType":"YulExpressionStatement","src":"18095:33:201"},{"nodeType":"YulAssignment","src":"18137:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"18147:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"18137:6:201"}]},{"nodeType":"YulAssignment","src":"18163:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18190:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18201:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18186:3:201"},"nodeType":"YulFunctionCall","src":"18186:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"18173:12:201"},"nodeType":"YulFunctionCall","src":"18173:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"18163:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17809:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"17820:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"17832:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"17840:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"17848:6:201","type":""}],"src":"17755:456:201"},{"body":{"nodeType":"YulBlock","src":"18367:530:201","statements":[{"nodeType":"YulVariableDeclaration","src":"18377:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"18387:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"18381:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"18398:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18416:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"18427:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18412:3:201"},"nodeType":"YulFunctionCall","src":"18412:18:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"18402:6:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18446:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"18457:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18439:6:201"},"nodeType":"YulFunctionCall","src":"18439:21:201"},"nodeType":"YulExpressionStatement","src":"18439:21:201"},{"nodeType":"YulVariableDeclaration","src":"18469:17:201","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"18480:6:201"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"18473:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"18495:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18515:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18509:5:201"},"nodeType":"YulFunctionCall","src":"18509:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"18499:6:201","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"18538:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"18546:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18531:6:201"},"nodeType":"YulFunctionCall","src":"18531:22:201"},"nodeType":"YulExpressionStatement","src":"18531:22:201"},{"nodeType":"YulAssignment","src":"18562:25:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18573:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18584:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18569:3:201"},"nodeType":"YulFunctionCall","src":"18569:18:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"18562:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"18596:29:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18614:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"18622:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18610:3:201"},"nodeType":"YulFunctionCall","src":"18610:15:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"18600:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"18634:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"18643:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"18638:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"18702:169:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18723:3:201"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"18738:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18732:5:201"},"nodeType":"YulFunctionCall","src":"18732:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"18747:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18728:3:201"},"nodeType":"YulFunctionCall","src":"18728:62:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18716:6:201"},"nodeType":"YulFunctionCall","src":"18716:75:201"},"nodeType":"YulExpressionStatement","src":"18716:75:201"},{"nodeType":"YulAssignment","src":"18804:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"18815:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"18820:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18811:3:201"},"nodeType":"YulFunctionCall","src":"18811:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"18804:3:201"}]},{"nodeType":"YulAssignment","src":"18836:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"18850:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"18858:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18846:3:201"},"nodeType":"YulFunctionCall","src":"18846:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"18836:6:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"18664:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"18667:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"18661:2:201"},"nodeType":"YulFunctionCall","src":"18661:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"18675:18:201","statements":[{"nodeType":"YulAssignment","src":"18677:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"18686:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"18689:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18682:3:201"},"nodeType":"YulFunctionCall","src":"18682:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"18677:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"18657:3:201","statements":[]},"src":"18653:218:201"},{"nodeType":"YulAssignment","src":"18880:11:201","value":{"name":"pos","nodeType":"YulIdentifier","src":"18888:3:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18880:4:201"}]}]},"name":"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18336:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18347:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18358:4:201","type":""}],"src":"18216:681:201"},{"body":{"nodeType":"YulBlock","src":"18934:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18951:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"18954:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18944:6:201"},"nodeType":"YulFunctionCall","src":"18944:88:201"},"nodeType":"YulExpressionStatement","src":"18944:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19048:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"19051:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19041:6:201"},"nodeType":"YulFunctionCall","src":"19041:15:201"},"nodeType":"YulExpressionStatement","src":"19041:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19072:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19075:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19065:6:201"},"nodeType":"YulFunctionCall","src":"19065:15:201"},"nodeType":"YulExpressionStatement","src":"19065:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"18902:184:201"},{"body":{"nodeType":"YulBlock","src":"19137:207:201","statements":[{"nodeType":"YulAssignment","src":"19147:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19163:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19157:5:201"},"nodeType":"YulFunctionCall","src":"19157:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19147:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"19175:35:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19197:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"19205:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19193:3:201"},"nodeType":"YulFunctionCall","src":"19193:17:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"19179:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"19285:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"19287:16:201"},"nodeType":"YulFunctionCall","src":"19287:18:201"},"nodeType":"YulExpressionStatement","src":"19287:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19228:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"19240:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"19225:2:201"},"nodeType":"YulFunctionCall","src":"19225:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19264:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"19276:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"19261:2:201"},"nodeType":"YulFunctionCall","src":"19261:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"19222:2:201"},"nodeType":"YulFunctionCall","src":"19222:62:201"},"nodeType":"YulIf","src":"19219:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19323:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19327:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19316:6:201"},"nodeType":"YulFunctionCall","src":"19316:22:201"},"nodeType":"YulExpressionStatement","src":"19316:22:201"}]},"name":"allocate_memory_5591","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"19126:6:201","type":""}],"src":"19091:253:201"},{"body":{"nodeType":"YulBlock","src":"19394:289:201","statements":[{"nodeType":"YulAssignment","src":"19404:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19420:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19414:5:201"},"nodeType":"YulFunctionCall","src":"19414:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19404:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"19432:117:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19454:6:201"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"19470:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"19476:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19466:3:201"},"nodeType":"YulFunctionCall","src":"19466:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"19481:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19462:3:201"},"nodeType":"YulFunctionCall","src":"19462:86:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19450:3:201"},"nodeType":"YulFunctionCall","src":"19450:99:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"19436:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"19624:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"19626:16:201"},"nodeType":"YulFunctionCall","src":"19626:18:201"},"nodeType":"YulExpressionStatement","src":"19626:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19567:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"19579:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"19564:2:201"},"nodeType":"YulFunctionCall","src":"19564:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19603:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"19615:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"19600:2:201"},"nodeType":"YulFunctionCall","src":"19600:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"19561:2:201"},"nodeType":"YulFunctionCall","src":"19561:62:201"},"nodeType":"YulIf","src":"19558:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19662:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19666:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19655:6:201"},"nodeType":"YulFunctionCall","src":"19655:22:201"},"nodeType":"YulExpressionStatement","src":"19655:22:201"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"19374:4:201","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"19383:6:201","type":""}],"src":"19349:334:201"},{"body":{"nodeType":"YulBlock","src":"19805:1371:201","statements":[{"body":{"nodeType":"YulBlock","src":"19851:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19860:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19863:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19853:6:201"},"nodeType":"YulFunctionCall","src":"19853:12:201"},"nodeType":"YulExpressionStatement","src":"19853:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"19826:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"19835:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19822:3:201"},"nodeType":"YulFunctionCall","src":"19822:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"19847:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"19818:3:201"},"nodeType":"YulFunctionCall","src":"19818:32:201"},"nodeType":"YulIf","src":"19815:52:201"},{"nodeType":"YulAssignment","src":"19876:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19903:9:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"19886:16:201"},"nodeType":"YulFunctionCall","src":"19886:27:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"19876:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"19922:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"19932:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"19926:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19943:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19974:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"19985:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19970:3:201"},"nodeType":"YulFunctionCall","src":"19970:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"19957:12:201"},"nodeType":"YulFunctionCall","src":"19957:32:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"19947:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19998:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"20008:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"20002:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"20053:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20062:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20065:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20055:6:201"},"nodeType":"YulFunctionCall","src":"20055:12:201"},"nodeType":"YulExpressionStatement","src":"20055:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"20041:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"20049:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20038:2:201"},"nodeType":"YulFunctionCall","src":"20038:14:201"},"nodeType":"YulIf","src":"20035:34:201"},{"nodeType":"YulVariableDeclaration","src":"20078:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20092:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"20103:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20088:3:201"},"nodeType":"YulFunctionCall","src":"20088:22:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"20082:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"20150:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20159:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20162:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20152:6:201"},"nodeType":"YulFunctionCall","src":"20152:12:201"},"nodeType":"YulExpressionStatement","src":"20152:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"20130:7:201"},{"name":"_3","nodeType":"YulIdentifier","src":"20139:2:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"20126:3:201"},"nodeType":"YulFunctionCall","src":"20126:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"20144:4:201","type":"","value":"0xa0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"20122:3:201"},"nodeType":"YulFunctionCall","src":"20122:27:201"},"nodeType":"YulIf","src":"20119:47:201"},{"nodeType":"YulVariableDeclaration","src":"20175:35:201","value":{"arguments":[],"functionName":{"name":"allocate_memory_5591","nodeType":"YulIdentifier","src":"20188:20:201"},"nodeType":"YulFunctionCall","src":"20188:22:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"20179:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20226:5:201"},{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20251:2:201"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"20233:17:201"},"nodeType":"YulFunctionCall","src":"20233:21:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20219:6:201"},"nodeType":"YulFunctionCall","src":"20219:36:201"},"nodeType":"YulExpressionStatement","src":"20219:36:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20275:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"20282:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20271:3:201"},"nodeType":"YulFunctionCall","src":"20271:14:201"},{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20309:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"20313:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20305:3:201"},"nodeType":"YulFunctionCall","src":"20305:11:201"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"20287:17:201"},"nodeType":"YulFunctionCall","src":"20287:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20264:6:201"},"nodeType":"YulFunctionCall","src":"20264:54:201"},"nodeType":"YulExpressionStatement","src":"20264:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20338:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"20345:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20334:3:201"},"nodeType":"YulFunctionCall","src":"20334:14:201"},{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20372:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"20376:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20368:3:201"},"nodeType":"YulFunctionCall","src":"20368:11:201"}],"functionName":{"name":"abi_decode_uint16","nodeType":"YulIdentifier","src":"20350:17:201"},"nodeType":"YulFunctionCall","src":"20350:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20327:6:201"},"nodeType":"YulFunctionCall","src":"20327:54:201"},"nodeType":"YulExpressionStatement","src":"20327:54:201"},{"nodeType":"YulVariableDeclaration","src":"20390:40:201","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20422:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"20426:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20418:3:201"},"nodeType":"YulFunctionCall","src":"20418:11:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"20405:12:201"},"nodeType":"YulFunctionCall","src":"20405:25:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"20394:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"20464:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"20439:24:201"},"nodeType":"YulFunctionCall","src":"20439:33:201"},"nodeType":"YulExpressionStatement","src":"20439:33:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20492:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"20499:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20488:3:201"},"nodeType":"YulFunctionCall","src":"20488:14:201"},{"name":"value_1","nodeType":"YulIdentifier","src":"20504:7:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20481:6:201"},"nodeType":"YulFunctionCall","src":"20481:31:201"},"nodeType":"YulExpressionStatement","src":"20481:31:201"},{"nodeType":"YulVariableDeclaration","src":"20521:42:201","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20554:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"20558:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20550:3:201"},"nodeType":"YulFunctionCall","src":"20550:12:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"20537:12:201"},"nodeType":"YulFunctionCall","src":"20537:26:201"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"20525:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"20592:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20601:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20604:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20594:6:201"},"nodeType":"YulFunctionCall","src":"20594:12:201"},"nodeType":"YulExpressionStatement","src":"20594:12:201"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"20578:8:201"},{"name":"_2","nodeType":"YulIdentifier","src":"20588:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20575:2:201"},"nodeType":"YulFunctionCall","src":"20575:16:201"},"nodeType":"YulIf","src":"20572:36:201"},{"nodeType":"YulVariableDeclaration","src":"20617:27:201","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"20631:2:201"},{"name":"offset_1","nodeType":"YulIdentifier","src":"20635:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20627:3:201"},"nodeType":"YulFunctionCall","src":"20627:17:201"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"20621:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"20692:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20701:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20704:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20694:6:201"},"nodeType":"YulFunctionCall","src":"20694:12:201"},"nodeType":"YulExpressionStatement","src":"20694:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"20671:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"20675:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20667:3:201"},"nodeType":"YulFunctionCall","src":"20667:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"20682:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"20663:3:201"},"nodeType":"YulFunctionCall","src":"20663:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"20656:6:201"},"nodeType":"YulFunctionCall","src":"20656:35:201"},"nodeType":"YulIf","src":"20653:55:201"},{"nodeType":"YulVariableDeclaration","src":"20717:26:201","value":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"20740:2:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"20727:12:201"},"nodeType":"YulFunctionCall","src":"20727:16:201"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"20721:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"20766:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"20768:16:201"},"nodeType":"YulFunctionCall","src":"20768:18:201"},"nodeType":"YulExpressionStatement","src":"20768:18:201"}]},"condition":{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"20758:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"20762:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20755:2:201"},"nodeType":"YulFunctionCall","src":"20755:10:201"},"nodeType":"YulIf","src":"20752:36:201"},{"nodeType":"YulVariableDeclaration","src":"20797:125:201","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"20838:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"20842:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20834:3:201"},"nodeType":"YulFunctionCall","src":"20834:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"20849:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20830:3:201"},"nodeType":"YulFunctionCall","src":"20830:86:201"},{"name":"_1","nodeType":"YulIdentifier","src":"20918:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20826:3:201"},"nodeType":"YulFunctionCall","src":"20826:95:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"20810:15:201"},"nodeType":"YulFunctionCall","src":"20810:112:201"},"variables":[{"name":"array","nodeType":"YulTypedName","src":"20801:5:201","type":""}]},{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"20938:5:201"},{"name":"_5","nodeType":"YulIdentifier","src":"20945:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20931:6:201"},"nodeType":"YulFunctionCall","src":"20931:17:201"},"nodeType":"YulExpressionStatement","src":"20931:17:201"},{"body":{"nodeType":"YulBlock","src":"20994:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21003:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21006:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20996:6:201"},"nodeType":"YulFunctionCall","src":"20996:12:201"},"nodeType":"YulExpressionStatement","src":"20996:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"20971:2:201"},{"name":"_5","nodeType":"YulIdentifier","src":"20975:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20967:3:201"},"nodeType":"YulFunctionCall","src":"20967:11:201"},{"name":"_1","nodeType":"YulIdentifier","src":"20980:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20963:3:201"},"nodeType":"YulFunctionCall","src":"20963:20:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"20985:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20960:2:201"},"nodeType":"YulFunctionCall","src":"20960:33:201"},"nodeType":"YulIf","src":"20957:53:201"},{"expression":{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"21036:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"21043:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21032:3:201"},"nodeType":"YulFunctionCall","src":"21032:14:201"},{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"21052:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"21056:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21048:3:201"},"nodeType":"YulFunctionCall","src":"21048:11:201"},{"name":"_5","nodeType":"YulIdentifier","src":"21061:2:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"21019:12:201"},"nodeType":"YulFunctionCall","src":"21019:45:201"},"nodeType":"YulExpressionStatement","src":"21019:45:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"21088:5:201"},{"name":"_5","nodeType":"YulIdentifier","src":"21095:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21084:3:201"},"nodeType":"YulFunctionCall","src":"21084:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"21100:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21080:3:201"},"nodeType":"YulFunctionCall","src":"21080:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"21105:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21073:6:201"},"nodeType":"YulFunctionCall","src":"21073:34:201"},"nodeType":"YulExpressionStatement","src":"21073:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21127:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"21134:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21123:3:201"},"nodeType":"YulFunctionCall","src":"21123:15:201"},{"name":"array","nodeType":"YulIdentifier","src":"21140:5:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21116:6:201"},"nodeType":"YulFunctionCall","src":"21116:30:201"},"nodeType":"YulExpressionStatement","src":"21116:30:201"},{"nodeType":"YulAssignment","src":"21155:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"21165:5:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"21155:6:201"}]}]},"name":"abi_decode_tuple_t_uint8t_struct$_EModeCategory_$21333_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19763:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"19774:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"19786:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"19794:6:201","type":""}],"src":"19688:1488:201"},{"body":{"nodeType":"YulBlock","src":"21336:581:201","statements":[{"body":{"nodeType":"YulBlock","src":"21383:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21392:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21395:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21385:6:201"},"nodeType":"YulFunctionCall","src":"21385:12:201"},"nodeType":"YulExpressionStatement","src":"21385:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"21357:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"21366:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21353:3:201"},"nodeType":"YulFunctionCall","src":"21353:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"21378:3:201","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"21349:3:201"},"nodeType":"YulFunctionCall","src":"21349:33:201"},"nodeType":"YulIf","src":"21346:53:201"},{"nodeType":"YulVariableDeclaration","src":"21408:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21434:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21421:12:201"},"nodeType":"YulFunctionCall","src":"21421:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"21412:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21478:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"21453:24:201"},"nodeType":"YulFunctionCall","src":"21453:31:201"},"nodeType":"YulExpressionStatement","src":"21453:31:201"},{"nodeType":"YulAssignment","src":"21493:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"21503:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"21493:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"21517:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21549:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21560:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21545:3:201"},"nodeType":"YulFunctionCall","src":"21545:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21532:12:201"},"nodeType":"YulFunctionCall","src":"21532:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"21521:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"21598:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"21573:24:201"},"nodeType":"YulFunctionCall","src":"21573:33:201"},"nodeType":"YulExpressionStatement","src":"21573:33:201"},{"nodeType":"YulAssignment","src":"21615:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"21625:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"21615:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"21641:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21673:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21684:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21669:3:201"},"nodeType":"YulFunctionCall","src":"21669:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21656:12:201"},"nodeType":"YulFunctionCall","src":"21656:32:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"21645:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"21722:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"21697:24:201"},"nodeType":"YulFunctionCall","src":"21697:33:201"},"nodeType":"YulExpressionStatement","src":"21697:33:201"},{"nodeType":"YulAssignment","src":"21739:17:201","value":{"name":"value_2","nodeType":"YulIdentifier","src":"21749:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"21739:6:201"}]},{"nodeType":"YulAssignment","src":"21765:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21792:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21803:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21788:3:201"},"nodeType":"YulFunctionCall","src":"21788:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21775:12:201"},"nodeType":"YulFunctionCall","src":"21775:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"21765:6:201"}]},{"nodeType":"YulAssignment","src":"21816:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21843:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21854:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21839:3:201"},"nodeType":"YulFunctionCall","src":"21839:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21826:12:201"},"nodeType":"YulFunctionCall","src":"21826:33:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"21816:6:201"}]},{"nodeType":"YulAssignment","src":"21868:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21895:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21906:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21891:3:201"},"nodeType":"YulFunctionCall","src":"21891:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"21878:12:201"},"nodeType":"YulFunctionCall","src":"21878:33:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"21868:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_uint256t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21262:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"21273:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"21285:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"21293:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"21301:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"21309:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"21317:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"21325:6:201","type":""}],"src":"21181:736:201"},{"body":{"nodeType":"YulBlock","src":"22109:616:201","statements":[{"body":{"nodeType":"YulBlock","src":"22156:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22165:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"22168:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"22158:6:201"},"nodeType":"YulFunctionCall","src":"22158:12:201"},"nodeType":"YulExpressionStatement","src":"22158:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"22130:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"22139:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22126:3:201"},"nodeType":"YulFunctionCall","src":"22126:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"22151:3:201","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"22122:3:201"},"nodeType":"YulFunctionCall","src":"22122:33:201"},"nodeType":"YulIf","src":"22119:53:201"},{"nodeType":"YulVariableDeclaration","src":"22181:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22207:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22194:12:201"},"nodeType":"YulFunctionCall","src":"22194:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"22185:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"22251:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"22226:24:201"},"nodeType":"YulFunctionCall","src":"22226:31:201"},"nodeType":"YulExpressionStatement","src":"22226:31:201"},{"nodeType":"YulAssignment","src":"22266:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"22276:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"22266:6:201"}]},{"nodeType":"YulAssignment","src":"22290:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22317:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22328:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22313:3:201"},"nodeType":"YulFunctionCall","src":"22313:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22300:12:201"},"nodeType":"YulFunctionCall","src":"22300:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"22290:6:201"}]},{"nodeType":"YulAssignment","src":"22341:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22368:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22379:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22364:3:201"},"nodeType":"YulFunctionCall","src":"22364:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22351:12:201"},"nodeType":"YulFunctionCall","src":"22351:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"22341:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"22392:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22424:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22435:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22420:3:201"},"nodeType":"YulFunctionCall","src":"22420:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22407:12:201"},"nodeType":"YulFunctionCall","src":"22407:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"22396:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"22473:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"22448:24:201"},"nodeType":"YulFunctionCall","src":"22448:33:201"},"nodeType":"YulExpressionStatement","src":"22448:33:201"},{"nodeType":"YulAssignment","src":"22490:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"22500:7:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"22490:6:201"}]},{"nodeType":"YulAssignment","src":"22516:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22543:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22554:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22539:3:201"},"nodeType":"YulFunctionCall","src":"22539:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22526:12:201"},"nodeType":"YulFunctionCall","src":"22526:33:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"22516:6:201"}]},{"nodeType":"YulAssignment","src":"22568:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22599:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22610:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22595:3:201"},"nodeType":"YulFunctionCall","src":"22595:19:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"22578:16:201"},"nodeType":"YulFunctionCall","src":"22578:37:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"22568:6:201"}]},{"nodeType":"YulAssignment","src":"22624:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22651:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22662:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22647:3:201"},"nodeType":"YulFunctionCall","src":"22647:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22634:12:201"},"nodeType":"YulFunctionCall","src":"22634:33:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"22624:6:201"}]},{"nodeType":"YulAssignment","src":"22676:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22703:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22714:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22699:3:201"},"nodeType":"YulFunctionCall","src":"22699:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22686:12:201"},"nodeType":"YulFunctionCall","src":"22686:33:201"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"22676:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22019:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"22030:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"22042:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"22050:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"22058:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"22066:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"22074:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"22082:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"22090:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"22098:6:201","type":""}],"src":"21922:803:201"},{"body":{"nodeType":"YulBlock","src":"22861:348:201","statements":[{"nodeType":"YulVariableDeclaration","src":"22871:33:201","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"22885:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"22894:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22881:3:201"},"nodeType":"YulFunctionCall","src":"22881:23:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"22875:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"22928:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22937:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"22940:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"22930:6:201"},"nodeType":"YulFunctionCall","src":"22930:12:201"},"nodeType":"YulExpressionStatement","src":"22930:12:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"22920:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"22924:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"22916:3:201"},"nodeType":"YulFunctionCall","src":"22916:11:201"},"nodeType":"YulIf","src":"22913:31:201"},{"nodeType":"YulVariableDeclaration","src":"22953:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22979:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"22966:12:201"},"nodeType":"YulFunctionCall","src":"22966:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"22957:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23023:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"22998:24:201"},"nodeType":"YulFunctionCall","src":"22998:31:201"},"nodeType":"YulExpressionStatement","src":"22998:31:201"},{"nodeType":"YulAssignment","src":"23038:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"23048:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"23038:6:201"}]},{"body":{"nodeType":"YulBlock","src":"23150:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23159:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"23162:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"23152:6:201"},"nodeType":"YulFunctionCall","src":"23152:12:201"},"nodeType":"YulExpressionStatement","src":"23152:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"23073:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"23077:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23069:3:201"},"nodeType":"YulFunctionCall","src":"23069:75:201"},{"kind":"number","nodeType":"YulLiteral","src":"23146:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"23065:3:201"},"nodeType":"YulFunctionCall","src":"23065:84:201"},"nodeType":"YulIf","src":"23062:104:201"},{"nodeType":"YulAssignment","src":"23175:28:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23189:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23200:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23185:3:201"},"nodeType":"YulFunctionCall","src":"23185:18:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"23175:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_struct$_ReserveConfigurationMap_$21318_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22819:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"22830:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"22842:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"22850:6:201","type":""}],"src":"22730:479:201"},{"body":{"nodeType":"YulBlock","src":"23313:89:201","statements":[{"nodeType":"YulAssignment","src":"23323:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23335:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23346:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23331:3:201"},"nodeType":"YulFunctionCall","src":"23331:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23323:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23365:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"23380:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"23388:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23376:3:201"},"nodeType":"YulFunctionCall","src":"23376:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23358:6:201"},"nodeType":"YulFunctionCall","src":"23358:38:201"},"nodeType":"YulExpressionStatement","src":"23358:38:201"}]},"name":"abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23282:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"23293:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23304:4:201","type":""}],"src":"23214:188:201"},{"body":{"nodeType":"YulBlock","src":"23488:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"23534:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23543:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"23546:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"23536:6:201"},"nodeType":"YulFunctionCall","src":"23536:12:201"},"nodeType":"YulExpressionStatement","src":"23536:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"23509:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"23518:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"23505:3:201"},"nodeType":"YulFunctionCall","src":"23505:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"23530:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"23501:3:201"},"nodeType":"YulFunctionCall","src":"23501:32:201"},"nodeType":"YulIf","src":"23498:52:201"},{"nodeType":"YulVariableDeclaration","src":"23559:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23578:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"23572:5:201"},"nodeType":"YulFunctionCall","src":"23572:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"23563:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23622:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"23597:24:201"},"nodeType":"YulFunctionCall","src":"23597:31:201"},"nodeType":"YulExpressionStatement","src":"23597:31:201"},{"nodeType":"YulAssignment","src":"23637:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"23647:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"23637:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23454:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"23465:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"23477:6:201","type":""}],"src":"23407:251:201"},{"body":{"nodeType":"YulBlock","src":"23704:50:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"23721:3:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23740:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"23733:6:201"},"nodeType":"YulFunctionCall","src":"23733:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"23726:6:201"},"nodeType":"YulFunctionCall","src":"23726:21:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23714:6:201"},"nodeType":"YulFunctionCall","src":"23714:34:201"},"nodeType":"YulExpressionStatement","src":"23714:34:201"}]},"name":"abi_encode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"23688:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"23695:3:201","type":""}],"src":"23663:91:201"},{"body":{"nodeType":"YulBlock","src":"23801:33:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"23810:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23819:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"23826:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23815:3:201"},"nodeType":"YulFunctionCall","src":"23815:16:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23803:6:201"},"nodeType":"YulFunctionCall","src":"23803:29:201"},"nodeType":"YulExpressionStatement","src":"23803:29:201"}]},"name":"abi_encode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"23785:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"23792:3:201","type":""}],"src":"23759:75:201"},{"body":{"nodeType":"YulBlock","src":"24344:1162:201","statements":[{"nodeType":"YulAssignment","src":"24354:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24366:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24377:3:201","type":"","value":"416"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24362:3:201"},"nodeType":"YulFunctionCall","src":"24362:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24354:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24397:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"24408:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24390:6:201"},"nodeType":"YulFunctionCall","src":"24390:25:201"},"nodeType":"YulExpressionStatement","src":"24390:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24435:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24446:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24431:3:201"},"nodeType":"YulFunctionCall","src":"24431:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"24451:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24424:6:201"},"nodeType":"YulFunctionCall","src":"24424:34:201"},"nodeType":"YulExpressionStatement","src":"24424:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24478:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24489:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24474:3:201"},"nodeType":"YulFunctionCall","src":"24474:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"24494:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24467:6:201"},"nodeType":"YulFunctionCall","src":"24467:34:201"},"nodeType":"YulExpressionStatement","src":"24467:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24521:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24532:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24517:3:201"},"nodeType":"YulFunctionCall","src":"24517:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"24537:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24510:6:201"},"nodeType":"YulFunctionCall","src":"24510:34:201"},"nodeType":"YulExpressionStatement","src":"24510:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24564:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24575:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24560:3:201"},"nodeType":"YulFunctionCall","src":"24560:19:201"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"24587:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24581:5:201"},"nodeType":"YulFunctionCall","src":"24581:13:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24553:6:201"},"nodeType":"YulFunctionCall","src":"24553:42:201"},"nodeType":"YulExpressionStatement","src":"24553:42:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24615:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24626:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24611:3:201"},"nodeType":"YulFunctionCall","src":"24611:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"24642:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"24650:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24638:3:201"},"nodeType":"YulFunctionCall","src":"24638:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24632:5:201"},"nodeType":"YulFunctionCall","src":"24632:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24604:6:201"},"nodeType":"YulFunctionCall","src":"24604:51:201"},"nodeType":"YulExpressionStatement","src":"24604:51:201"},{"nodeType":"YulVariableDeclaration","src":"24664:42:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"24694:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"24702:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24690:3:201"},"nodeType":"YulFunctionCall","src":"24690:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24684:5:201"},"nodeType":"YulFunctionCall","src":"24684:22:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"24668:12:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"24715:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"24725:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"24719:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24787:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24798:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24783:3:201"},"nodeType":"YulFunctionCall","src":"24783:19:201"},{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"24808:12:201"},{"name":"_1","nodeType":"YulIdentifier","src":"24822:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24804:3:201"},"nodeType":"YulFunctionCall","src":"24804:21:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24776:6:201"},"nodeType":"YulFunctionCall","src":"24776:50:201"},"nodeType":"YulExpressionStatement","src":"24776:50:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24846:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24857:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24842:3:201"},"nodeType":"YulFunctionCall","src":"24842:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"24877:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"24885:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24873:3:201"},"nodeType":"YulFunctionCall","src":"24873:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24867:5:201"},"nodeType":"YulFunctionCall","src":"24867:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"24891:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24863:3:201"},"nodeType":"YulFunctionCall","src":"24863:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24835:6:201"},"nodeType":"YulFunctionCall","src":"24835:60:201"},"nodeType":"YulExpressionStatement","src":"24835:60:201"},{"nodeType":"YulVariableDeclaration","src":"24904:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"24936:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"24944:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24932:3:201"},"nodeType":"YulFunctionCall","src":"24932:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24926:5:201"},"nodeType":"YulFunctionCall","src":"24926:23:201"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"24908:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"24958:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"24968:3:201","type":"","value":"256"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"24962:2:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"24999:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25019:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"25030:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25015:3:201"},"nodeType":"YulFunctionCall","src":"25015:18:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"24980:18:201"},"nodeType":"YulFunctionCall","src":"24980:54:201"},"nodeType":"YulExpressionStatement","src":"24980:54:201"},{"nodeType":"YulVariableDeclaration","src":"25043:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25075:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"25083:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25071:3:201"},"nodeType":"YulFunctionCall","src":"25071:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25065:5:201"},"nodeType":"YulFunctionCall","src":"25065:23:201"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"25047:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"25113:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25133:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25144:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25129:3:201"},"nodeType":"YulFunctionCall","src":"25129:19:201"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"25097:15:201"},"nodeType":"YulFunctionCall","src":"25097:52:201"},"nodeType":"YulExpressionStatement","src":"25097:52:201"},{"nodeType":"YulVariableDeclaration","src":"25158:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25190:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"25198:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25186:3:201"},"nodeType":"YulFunctionCall","src":"25186:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25180:5:201"},"nodeType":"YulFunctionCall","src":"25180:23:201"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"25162:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"25231:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25251:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25262:3:201","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25247:3:201"},"nodeType":"YulFunctionCall","src":"25247:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"25212:18:201"},"nodeType":"YulFunctionCall","src":"25212:55:201"},"nodeType":"YulExpressionStatement","src":"25212:55:201"},{"nodeType":"YulVariableDeclaration","src":"25276:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25308:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"25316:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25304:3:201"},"nodeType":"YulFunctionCall","src":"25304:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25298:5:201"},"nodeType":"YulFunctionCall","src":"25298:23:201"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"25280:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"25347:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25367:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25378:3:201","type":"","value":"352"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25363:3:201"},"nodeType":"YulFunctionCall","src":"25363:19:201"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"25330:16:201"},"nodeType":"YulFunctionCall","src":"25330:53:201"},"nodeType":"YulExpressionStatement","src":"25330:53:201"},{"nodeType":"YulVariableDeclaration","src":"25392:44:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25424:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"25432:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25420:3:201"},"nodeType":"YulFunctionCall","src":"25420:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25414:5:201"},"nodeType":"YulFunctionCall","src":"25414:22:201"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"25396:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"25464:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25484:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25495:3:201","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25480:3:201"},"nodeType":"YulFunctionCall","src":"25480:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"25445:18:201"},"nodeType":"YulFunctionCall","src":"25445:55:201"},"nodeType":"YulExpressionStatement","src":"25445:55:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24281:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"24292:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"24300:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"24308:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"24316:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"24324:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24335:4:201","type":""}],"src":"23839:1667:201"},{"body":{"nodeType":"YulBlock","src":"25776:428:201","statements":[{"nodeType":"YulAssignment","src":"25786:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25798:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25809:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25794:3:201"},"nodeType":"YulFunctionCall","src":"25794:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25786:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"25822:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"25832:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"25826:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25890:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"25905:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"25913:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25901:3:201"},"nodeType":"YulFunctionCall","src":"25901:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25883:6:201"},"nodeType":"YulFunctionCall","src":"25883:34:201"},"nodeType":"YulExpressionStatement","src":"25883:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25937:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25948:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25933:3:201"},"nodeType":"YulFunctionCall","src":"25933:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"25957:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"25965:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25953:3:201"},"nodeType":"YulFunctionCall","src":"25953:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25926:6:201"},"nodeType":"YulFunctionCall","src":"25926:43:201"},"nodeType":"YulExpressionStatement","src":"25926:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25989:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26000:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25985:3:201"},"nodeType":"YulFunctionCall","src":"25985:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"26005:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25978:6:201"},"nodeType":"YulFunctionCall","src":"25978:34:201"},"nodeType":"YulExpressionStatement","src":"25978:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26032:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26043:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26028:3:201"},"nodeType":"YulFunctionCall","src":"26028:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"26048:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26021:6:201"},"nodeType":"YulFunctionCall","src":"26021:34:201"},"nodeType":"YulExpressionStatement","src":"26021:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26075:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26086:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26071:3:201"},"nodeType":"YulFunctionCall","src":"26071:19:201"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"26096:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"26104:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26092:3:201"},"nodeType":"YulFunctionCall","src":"26092:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26064:6:201"},"nodeType":"YulFunctionCall","src":"26064:46:201"},"nodeType":"YulExpressionStatement","src":"26064:46:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26130:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26141:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26126:3:201"},"nodeType":"YulFunctionCall","src":"26126:19:201"},{"name":"value5","nodeType":"YulIdentifier","src":"26147:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26119:6:201"},"nodeType":"YulFunctionCall","src":"26119:35:201"},"nodeType":"YulExpressionStatement","src":"26119:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26174:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26185:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26170:3:201"},"nodeType":"YulFunctionCall","src":"26170:19:201"},{"name":"value6","nodeType":"YulIdentifier","src":"26191:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26163:6:201"},"nodeType":"YulFunctionCall","src":"26163:35:201"},"nodeType":"YulExpressionStatement","src":"26163:35:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25697:9:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"25708:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"25716:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"25724:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"25732:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"25740:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"25748:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"25756:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25767:4:201","type":""}],"src":"25511:693:201"},{"body":{"nodeType":"YulBlock","src":"26591:485:201","statements":[{"nodeType":"YulAssignment","src":"26601:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26613:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26624:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26609:3:201"},"nodeType":"YulFunctionCall","src":"26609:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26601:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26644:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"26655:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26637:6:201"},"nodeType":"YulFunctionCall","src":"26637:25:201"},"nodeType":"YulExpressionStatement","src":"26637:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26682:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26693:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26678:3:201"},"nodeType":"YulFunctionCall","src":"26678:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"26698:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26671:6:201"},"nodeType":"YulFunctionCall","src":"26671:34:201"},"nodeType":"YulExpressionStatement","src":"26671:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26725:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26736:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26721:3:201"},"nodeType":"YulFunctionCall","src":"26721:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"26741:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26714:6:201"},"nodeType":"YulFunctionCall","src":"26714:34:201"},"nodeType":"YulExpressionStatement","src":"26714:34:201"},{"nodeType":"YulVariableDeclaration","src":"26757:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"26767:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"26761:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26829:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26840:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26825:3:201"},"nodeType":"YulFunctionCall","src":"26825:18:201"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"26855:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26849:5:201"},"nodeType":"YulFunctionCall","src":"26849:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"26864:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26845:3:201"},"nodeType":"YulFunctionCall","src":"26845:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26818:6:201"},"nodeType":"YulFunctionCall","src":"26818:50:201"},"nodeType":"YulExpressionStatement","src":"26818:50:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26888:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26899:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26884:3:201"},"nodeType":"YulFunctionCall","src":"26884:19:201"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"26915:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"26923:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26911:3:201"},"nodeType":"YulFunctionCall","src":"26911:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26905:5:201"},"nodeType":"YulFunctionCall","src":"26905:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26877:6:201"},"nodeType":"YulFunctionCall","src":"26877:51:201"},"nodeType":"YulExpressionStatement","src":"26877:51:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26948:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26959:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26944:3:201"},"nodeType":"YulFunctionCall","src":"26944:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"26979:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"26987:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26975:3:201"},"nodeType":"YulFunctionCall","src":"26975:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26969:5:201"},"nodeType":"YulFunctionCall","src":"26969:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"26993:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26965:3:201"},"nodeType":"YulFunctionCall","src":"26965:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26937:6:201"},"nodeType":"YulFunctionCall","src":"26937:60:201"},"nodeType":"YulExpressionStatement","src":"26937:60:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27017:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"27028:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27013:3:201"},"nodeType":"YulFunctionCall","src":"27013:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"27048:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"27056:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27044:3:201"},"nodeType":"YulFunctionCall","src":"27044:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27038:5:201"},"nodeType":"YulFunctionCall","src":"27038:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"27062:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"27034:3:201"},"nodeType":"YulFunctionCall","src":"27034:35:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27006:6:201"},"nodeType":"YulFunctionCall","src":"27006:64:201"},"nodeType":"YulExpressionStatement","src":"27006:64:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteSupplyParams_$21407_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSupplyParams_$21407_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26536:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"26547:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"26555:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"26563:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"26571:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26582:4:201","type":""}],"src":"26209:867:201"},{"body":{"nodeType":"YulBlock","src":"27202:99:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27219:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"27230:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27212:6:201"},"nodeType":"YulFunctionCall","src":"27212:21:201"},"nodeType":"YulExpressionStatement","src":"27212:21:201"},{"nodeType":"YulAssignment","src":"27242:53:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"27268:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27280:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"27291:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27276:3:201"},"nodeType":"YulFunctionCall","src":"27276:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"27250:17:201"},"nodeType":"YulFunctionCall","src":"27250:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"27242:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"27171:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"27182:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"27193:4:201","type":""}],"src":"27081:220:201"},{"body":{"nodeType":"YulBlock","src":"27831:481:201","statements":[{"nodeType":"YulAssignment","src":"27841:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27853:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"27864:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27849:3:201"},"nodeType":"YulFunctionCall","src":"27849:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"27841:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27884:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"27895:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27877:6:201"},"nodeType":"YulFunctionCall","src":"27877:25:201"},"nodeType":"YulExpressionStatement","src":"27877:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27922:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"27933:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27918:3:201"},"nodeType":"YulFunctionCall","src":"27918:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"27938:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27911:6:201"},"nodeType":"YulFunctionCall","src":"27911:34:201"},"nodeType":"YulExpressionStatement","src":"27911:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27965:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"27976:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27961:3:201"},"nodeType":"YulFunctionCall","src":"27961:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"27981:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27954:6:201"},"nodeType":"YulFunctionCall","src":"27954:34:201"},"nodeType":"YulExpressionStatement","src":"27954:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28008:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"28019:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28004:3:201"},"nodeType":"YulFunctionCall","src":"28004:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"28024:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27997:6:201"},"nodeType":"YulFunctionCall","src":"27997:34:201"},"nodeType":"YulExpressionStatement","src":"27997:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28051:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"28062:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28047:3:201"},"nodeType":"YulFunctionCall","src":"28047:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"28068:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28040:6:201"},"nodeType":"YulFunctionCall","src":"28040:35:201"},"nodeType":"YulExpressionStatement","src":"28040:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28095:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"28106:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28091:3:201"},"nodeType":"YulFunctionCall","src":"28091:19:201"},{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"28118:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28112:5:201"},"nodeType":"YulFunctionCall","src":"28112:13:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28084:6:201"},"nodeType":"YulFunctionCall","src":"28084:42:201"},"nodeType":"YulExpressionStatement","src":"28084:42:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28146:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"28157:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28142:3:201"},"nodeType":"YulFunctionCall","src":"28142:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"28177:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"28185:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28173:3:201"},"nodeType":"YulFunctionCall","src":"28173:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28167:5:201"},"nodeType":"YulFunctionCall","src":"28167:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"28191:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"28163:3:201"},"nodeType":"YulFunctionCall","src":"28163:71:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28135:6:201"},"nodeType":"YulFunctionCall","src":"28135:100:201"},"nodeType":"YulExpressionStatement","src":"28135:100:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28255:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"28266:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28251:3:201"},"nodeType":"YulFunctionCall","src":"28251:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"28286:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"28294:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28282:3:201"},"nodeType":"YulFunctionCall","src":"28282:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28276:5:201"},"nodeType":"YulFunctionCall","src":"28276:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"28300:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"28272:3:201"},"nodeType":"YulFunctionCall","src":"28272:33:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28244:6:201"},"nodeType":"YulFunctionCall","src":"28244:62:201"},"nodeType":"YulExpressionStatement","src":"28244:62:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_mapping$_t_address_$_t_uint8_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"27760:9:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"27771:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"27779:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"27787:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"27795:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"27803:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"27811:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"27822:4:201","type":""}],"src":"27306:1006:201"},{"body":{"nodeType":"YulBlock","src":"28349:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28366:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28369:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28359:6:201"},"nodeType":"YulFunctionCall","src":"28359:88:201"},"nodeType":"YulExpressionStatement","src":"28359:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28463:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"28466:4:201","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28456:6:201"},"nodeType":"YulFunctionCall","src":"28456:15:201"},"nodeType":"YulExpressionStatement","src":"28456:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28487:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28490:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"28480:6:201"},"nodeType":"YulFunctionCall","src":"28480:15:201"},"nodeType":"YulExpressionStatement","src":"28480:15:201"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"28317:184:201"},{"body":{"nodeType":"YulBlock","src":"28564:243:201","statements":[{"body":{"nodeType":"YulBlock","src":"28606:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28627:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28630:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28620:6:201"},"nodeType":"YulFunctionCall","src":"28620:88:201"},"nodeType":"YulExpressionStatement","src":"28620:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28728:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"28731:4:201","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28721:6:201"},"nodeType":"YulFunctionCall","src":"28721:15:201"},"nodeType":"YulExpressionStatement","src":"28721:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28756:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28759:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"28749:6:201"},"nodeType":"YulFunctionCall","src":"28749:15:201"},"nodeType":"YulExpressionStatement","src":"28749:15:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"28587:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"28594:1:201","type":"","value":"3"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"28584:2:201"},"nodeType":"YulFunctionCall","src":"28584:12:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"28577:6:201"},"nodeType":"YulFunctionCall","src":"28577:20:201"},"nodeType":"YulIf","src":"28574:200:201"},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"28790:3:201"},{"name":"value","nodeType":"YulIdentifier","src":"28795:5:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28783:6:201"},"nodeType":"YulFunctionCall","src":"28783:18:201"},"nodeType":"YulExpressionStatement","src":"28783:18:201"}]},"name":"abi_encode_enum_InterestRateMode","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"28548:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"28555:3:201","type":""}],"src":"28506:301:201"},{"body":{"nodeType":"YulBlock","src":"29192:616:201","statements":[{"nodeType":"YulAssignment","src":"29202:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29214:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29225:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29210:3:201"},"nodeType":"YulFunctionCall","src":"29210:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"29202:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29245:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"29256:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29238:6:201"},"nodeType":"YulFunctionCall","src":"29238:25:201"},"nodeType":"YulExpressionStatement","src":"29238:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29283:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29294:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29279:3:201"},"nodeType":"YulFunctionCall","src":"29279:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"29299:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29272:6:201"},"nodeType":"YulFunctionCall","src":"29272:34:201"},"nodeType":"YulExpressionStatement","src":"29272:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29326:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29337:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29322:3:201"},"nodeType":"YulFunctionCall","src":"29322:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"29342:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29315:6:201"},"nodeType":"YulFunctionCall","src":"29315:34:201"},"nodeType":"YulExpressionStatement","src":"29315:34:201"},{"nodeType":"YulVariableDeclaration","src":"29358:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"29368:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"29362:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29430:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29441:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29426:3:201"},"nodeType":"YulFunctionCall","src":"29426:18:201"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"29456:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29450:5:201"},"nodeType":"YulFunctionCall","src":"29450:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"29465:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"29446:3:201"},"nodeType":"YulFunctionCall","src":"29446:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29419:6:201"},"nodeType":"YulFunctionCall","src":"29419:50:201"},"nodeType":"YulExpressionStatement","src":"29419:50:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29489:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29500:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29485:3:201"},"nodeType":"YulFunctionCall","src":"29485:19:201"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"29516:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"29524:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29512:3:201"},"nodeType":"YulFunctionCall","src":"29512:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29506:5:201"},"nodeType":"YulFunctionCall","src":"29506:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29478:6:201"},"nodeType":"YulFunctionCall","src":"29478:51:201"},"nodeType":"YulExpressionStatement","src":"29478:51:201"},{"nodeType":"YulVariableDeclaration","src":"29538:42:201","value":{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"29568:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"29576:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29564:3:201"},"nodeType":"YulFunctionCall","src":"29564:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29558:5:201"},"nodeType":"YulFunctionCall","src":"29558:22:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"29542:12:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"29622:12:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29640:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29651:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29636:3:201"},"nodeType":"YulFunctionCall","src":"29636:19:201"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"29589:32:201"},"nodeType":"YulFunctionCall","src":"29589:67:201"},"nodeType":"YulExpressionStatement","src":"29589:67:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29676:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29687:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29672:3:201"},"nodeType":"YulFunctionCall","src":"29672:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"29707:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"29715:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29703:3:201"},"nodeType":"YulFunctionCall","src":"29703:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29697:5:201"},"nodeType":"YulFunctionCall","src":"29697:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"29721:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"29693:3:201"},"nodeType":"YulFunctionCall","src":"29693:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29665:6:201"},"nodeType":"YulFunctionCall","src":"29665:60:201"},"nodeType":"YulExpressionStatement","src":"29665:60:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29745:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29756:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29741:3:201"},"nodeType":"YulFunctionCall","src":"29741:19:201"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"29786:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"29794:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29782:3:201"},"nodeType":"YulFunctionCall","src":"29782:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29776:5:201"},"nodeType":"YulFunctionCall","src":"29776:23:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"29769:6:201"},"nodeType":"YulFunctionCall","src":"29769:31:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"29762:6:201"},"nodeType":"YulFunctionCall","src":"29762:39:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"29734:6:201"},"nodeType":"YulFunctionCall","src":"29734:68:201"},"nodeType":"YulExpressionStatement","src":"29734:68:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteRepayParams_$21445_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteRepayParams_$21445_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"29137:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"29148:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"29156:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"29164:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"29172:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"29183:4:201","type":""}],"src":"28812:996:201"},{"body":{"nodeType":"YulBlock","src":"29894:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"29940:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29949:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"29952:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"29942:6:201"},"nodeType":"YulFunctionCall","src":"29942:12:201"},"nodeType":"YulExpressionStatement","src":"29942:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"29915:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"29924:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"29911:3:201"},"nodeType":"YulFunctionCall","src":"29911:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"29936:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"29907:3:201"},"nodeType":"YulFunctionCall","src":"29907:32:201"},"nodeType":"YulIf","src":"29904:52:201"},{"nodeType":"YulAssignment","src":"29965:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29981:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29975:5:201"},"nodeType":"YulFunctionCall","src":"29975:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"29965:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"29860:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"29871:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"29883:6:201","type":""}],"src":"29813:184:201"},{"body":{"nodeType":"YulBlock","src":"30246:716:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30263:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"30274:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30256:6:201"},"nodeType":"YulFunctionCall","src":"30256:25:201"},"nodeType":"YulExpressionStatement","src":"30256:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30301:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"30312:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30297:3:201"},"nodeType":"YulFunctionCall","src":"30297:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"30317:2:201","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30290:6:201"},"nodeType":"YulFunctionCall","src":"30290:30:201"},"nodeType":"YulExpressionStatement","src":"30290:30:201"},{"nodeType":"YulVariableDeclaration","src":"30329:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"30339:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"30333:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30401:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"30412:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30397:3:201"},"nodeType":"YulFunctionCall","src":"30397:18:201"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30427:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30421:5:201"},"nodeType":"YulFunctionCall","src":"30421:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"30436:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30417:3:201"},"nodeType":"YulFunctionCall","src":"30417:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30390:6:201"},"nodeType":"YulFunctionCall","src":"30390:50:201"},"nodeType":"YulExpressionStatement","src":"30390:50:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30460:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"30471:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30456:3:201"},"nodeType":"YulFunctionCall","src":"30456:18:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30490:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"30498:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30486:3:201"},"nodeType":"YulFunctionCall","src":"30486:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30480:5:201"},"nodeType":"YulFunctionCall","src":"30480:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"30504:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30476:3:201"},"nodeType":"YulFunctionCall","src":"30476:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30449:6:201"},"nodeType":"YulFunctionCall","src":"30449:59:201"},"nodeType":"YulExpressionStatement","src":"30449:59:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30528:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"30539:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30524:3:201"},"nodeType":"YulFunctionCall","src":"30524:19:201"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30555:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"30563:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30551:3:201"},"nodeType":"YulFunctionCall","src":"30551:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30545:5:201"},"nodeType":"YulFunctionCall","src":"30545:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30517:6:201"},"nodeType":"YulFunctionCall","src":"30517:51:201"},"nodeType":"YulExpressionStatement","src":"30517:51:201"},{"nodeType":"YulVariableDeclaration","src":"30577:42:201","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30607:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"30615:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30603:3:201"},"nodeType":"YulFunctionCall","src":"30603:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30597:5:201"},"nodeType":"YulFunctionCall","src":"30597:22:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"30581:12:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30639:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"30650:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30635:3:201"},"nodeType":"YulFunctionCall","src":"30635:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"30656:4:201","type":"","value":"0xe0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30628:6:201"},"nodeType":"YulFunctionCall","src":"30628:33:201"},"nodeType":"YulExpressionStatement","src":"30628:33:201"},{"nodeType":"YulVariableDeclaration","src":"30670:66:201","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"30702:12:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30720:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"30731:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30716:3:201"},"nodeType":"YulFunctionCall","src":"30716:19:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"30684:17:201"},"nodeType":"YulFunctionCall","src":"30684:52:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"30674:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30756:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"30767:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30752:3:201"},"nodeType":"YulFunctionCall","src":"30752:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30787:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"30795:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30783:3:201"},"nodeType":"YulFunctionCall","src":"30783:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30777:5:201"},"nodeType":"YulFunctionCall","src":"30777:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"30802:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"30773:3:201"},"nodeType":"YulFunctionCall","src":"30773:36:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30745:6:201"},"nodeType":"YulFunctionCall","src":"30745:65:201"},"nodeType":"YulExpressionStatement","src":"30745:65:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30830:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"30841:4:201","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30826:3:201"},"nodeType":"YulFunctionCall","src":"30826:20:201"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30858:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"30866:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30854:3:201"},"nodeType":"YulFunctionCall","src":"30854:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30848:5:201"},"nodeType":"YulFunctionCall","src":"30848:23:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30819:6:201"},"nodeType":"YulFunctionCall","src":"30819:53:201"},"nodeType":"YulExpressionStatement","src":"30819:53:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"30892:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"30903:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30888:3:201"},"nodeType":"YulFunctionCall","src":"30888:19:201"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"30919:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"30927:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"30915:3:201"},"nodeType":"YulFunctionCall","src":"30915:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"30909:5:201"},"nodeType":"YulFunctionCall","src":"30909:23:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"30881:6:201"},"nodeType":"YulFunctionCall","src":"30881:52:201"},"nodeType":"YulExpressionStatement","src":"30881:52:201"},{"nodeType":"YulAssignment","src":"30942:14:201","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"30950:6:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"30942:4:201"}]}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$21315_storage_t_struct$_FlashloanSimpleParams_$21531_memory_ptr__to_t_uint256_t_struct$_FlashloanSimpleParams_$21531_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"30207:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"30218:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"30226:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"30237:4:201","type":""}],"src":"30002:960:201"},{"body":{"nodeType":"YulBlock","src":"31454:545:201","statements":[{"nodeType":"YulAssignment","src":"31464:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31476:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"31487:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31472:3:201"},"nodeType":"YulFunctionCall","src":"31472:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"31464:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31507:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"31518:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31500:6:201"},"nodeType":"YulFunctionCall","src":"31500:25:201"},"nodeType":"YulExpressionStatement","src":"31500:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31545:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"31556:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31541:3:201"},"nodeType":"YulFunctionCall","src":"31541:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"31561:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31534:6:201"},"nodeType":"YulFunctionCall","src":"31534:34:201"},"nodeType":"YulExpressionStatement","src":"31534:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31588:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"31599:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31584:3:201"},"nodeType":"YulFunctionCall","src":"31584:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"31604:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31577:6:201"},"nodeType":"YulFunctionCall","src":"31577:34:201"},"nodeType":"YulExpressionStatement","src":"31577:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31631:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"31642:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31627:3:201"},"nodeType":"YulFunctionCall","src":"31627:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"31647:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31620:6:201"},"nodeType":"YulFunctionCall","src":"31620:34:201"},"nodeType":"YulExpressionStatement","src":"31620:34:201"},{"nodeType":"YulVariableDeclaration","src":"31663:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"31673:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"31667:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31735:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"31746:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31731:3:201"},"nodeType":"YulFunctionCall","src":"31731:19:201"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"31756:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"31764:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"31752:3:201"},"nodeType":"YulFunctionCall","src":"31752:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31724:6:201"},"nodeType":"YulFunctionCall","src":"31724:44:201"},"nodeType":"YulExpressionStatement","src":"31724:44:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31788:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"31799:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31784:3:201"},"nodeType":"YulFunctionCall","src":"31784:19:201"},{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"31819:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"31812:6:201"},"nodeType":"YulFunctionCall","src":"31812:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"31805:6:201"},"nodeType":"YulFunctionCall","src":"31805:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31777:6:201"},"nodeType":"YulFunctionCall","src":"31777:51:201"},"nodeType":"YulExpressionStatement","src":"31777:51:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31848:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"31859:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31844:3:201"},"nodeType":"YulFunctionCall","src":"31844:19:201"},{"arguments":[{"name":"value6","nodeType":"YulIdentifier","src":"31869:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"31877:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"31865:3:201"},"nodeType":"YulFunctionCall","src":"31865:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31837:6:201"},"nodeType":"YulFunctionCall","src":"31837:48:201"},"nodeType":"YulExpressionStatement","src":"31837:48:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31905:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"31916:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31901:3:201"},"nodeType":"YulFunctionCall","src":"31901:19:201"},{"arguments":[{"name":"value7","nodeType":"YulIdentifier","src":"31926:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"31934:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"31922:3:201"},"nodeType":"YulFunctionCall","src":"31922:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31894:6:201"},"nodeType":"YulFunctionCall","src":"31894:44:201"},"nodeType":"YulExpressionStatement","src":"31894:44:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"31958:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"31969:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"31954:3:201"},"nodeType":"YulFunctionCall","src":"31954:19:201"},{"arguments":[{"name":"value8","nodeType":"YulIdentifier","src":"31979:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"31987:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"31975:3:201"},"nodeType":"YulFunctionCall","src":"31975:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"31947:6:201"},"nodeType":"YulFunctionCall","src":"31947:46:201"},"nodeType":"YulExpressionStatement","src":"31947:46:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_t_address_t_bool_t_uint16_t_address_t_uint8__to_t_uint256_t_uint256_t_uint256_t_uint256_t_address_t_bool_t_uint256_t_address_t_uint8__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"31359:9:201","type":""},{"name":"value8","nodeType":"YulTypedName","src":"31370:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"31378:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"31386:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"31394:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"31402:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"31410:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"31418:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"31426:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"31434:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"31445:4:201","type":""}],"src":"30967:1032:201"},{"body":{"nodeType":"YulBlock","src":"32246:211:201","statements":[{"nodeType":"YulAssignment","src":"32256:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32268:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"32279:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32264:3:201"},"nodeType":"YulFunctionCall","src":"32264:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"32256:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32298:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"32309:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32291:6:201"},"nodeType":"YulFunctionCall","src":"32291:25:201"},"nodeType":"YulExpressionStatement","src":"32291:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32336:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"32347:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32332:3:201"},"nodeType":"YulFunctionCall","src":"32332:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"32352:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32325:6:201"},"nodeType":"YulFunctionCall","src":"32325:34:201"},"nodeType":"YulExpressionStatement","src":"32325:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32379:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"32390:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32375:3:201"},"nodeType":"YulFunctionCall","src":"32375:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"32399:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"32407:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"32395:3:201"},"nodeType":"YulFunctionCall","src":"32395:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32368:6:201"},"nodeType":"YulFunctionCall","src":"32368:83:201"},"nodeType":"YulExpressionStatement","src":"32368:83:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_address__to_t_uint256_t_uint256_t_address__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"32199:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"32210:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"32218:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"32226:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"32237:4:201","type":""}],"src":"32004:453:201"},{"body":{"nodeType":"YulBlock","src":"32928:658:201","statements":[{"nodeType":"YulAssignment","src":"32938:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32950:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"32961:3:201","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"32946:3:201"},"nodeType":"YulFunctionCall","src":"32946:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"32938:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"32981:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"32992:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"32974:6:201"},"nodeType":"YulFunctionCall","src":"32974:25:201"},"nodeType":"YulExpressionStatement","src":"32974:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33019:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"33030:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33015:3:201"},"nodeType":"YulFunctionCall","src":"33015:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"33035:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33008:6:201"},"nodeType":"YulFunctionCall","src":"33008:34:201"},"nodeType":"YulExpressionStatement","src":"33008:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33062:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"33073:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33058:3:201"},"nodeType":"YulFunctionCall","src":"33058:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"33078:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33051:6:201"},"nodeType":"YulFunctionCall","src":"33051:34:201"},"nodeType":"YulExpressionStatement","src":"33051:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33105:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"33116:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33101:3:201"},"nodeType":"YulFunctionCall","src":"33101:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"33121:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33094:6:201"},"nodeType":"YulFunctionCall","src":"33094:34:201"},"nodeType":"YulExpressionStatement","src":"33094:34:201"},{"nodeType":"YulVariableDeclaration","src":"33137:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"33147:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"33141:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33209:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"33220:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33205:3:201"},"nodeType":"YulFunctionCall","src":"33205:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"33236:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33230:5:201"},"nodeType":"YulFunctionCall","src":"33230:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"33245:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"33226:3:201"},"nodeType":"YulFunctionCall","src":"33226:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33198:6:201"},"nodeType":"YulFunctionCall","src":"33198:51:201"},"nodeType":"YulExpressionStatement","src":"33198:51:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33269:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"33280:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33265:3:201"},"nodeType":"YulFunctionCall","src":"33265:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"33296:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"33304:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33292:3:201"},"nodeType":"YulFunctionCall","src":"33292:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33286:5:201"},"nodeType":"YulFunctionCall","src":"33286:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33258:6:201"},"nodeType":"YulFunctionCall","src":"33258:51:201"},"nodeType":"YulExpressionStatement","src":"33258:51:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33329:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"33340:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33325:3:201"},"nodeType":"YulFunctionCall","src":"33325:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"33360:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"33368:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33356:3:201"},"nodeType":"YulFunctionCall","src":"33356:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33350:5:201"},"nodeType":"YulFunctionCall","src":"33350:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"33374:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"33346:3:201"},"nodeType":"YulFunctionCall","src":"33346:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33318:6:201"},"nodeType":"YulFunctionCall","src":"33318:60:201"},"nodeType":"YulExpressionStatement","src":"33318:60:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33398:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"33409:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33394:3:201"},"nodeType":"YulFunctionCall","src":"33394:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"33425:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"33433:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33421:3:201"},"nodeType":"YulFunctionCall","src":"33421:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33415:5:201"},"nodeType":"YulFunctionCall","src":"33415:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33387:6:201"},"nodeType":"YulFunctionCall","src":"33387:51:201"},"nodeType":"YulExpressionStatement","src":"33387:51:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33458:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"33469:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33454:3:201"},"nodeType":"YulFunctionCall","src":"33454:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"33489:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"33497:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33485:3:201"},"nodeType":"YulFunctionCall","src":"33485:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33479:5:201"},"nodeType":"YulFunctionCall","src":"33479:23:201"},{"name":"_1","nodeType":"YulIdentifier","src":"33504:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"33475:3:201"},"nodeType":"YulFunctionCall","src":"33475:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33447:6:201"},"nodeType":"YulFunctionCall","src":"33447:61:201"},"nodeType":"YulExpressionStatement","src":"33447:61:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"33528:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"33539:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33524:3:201"},"nodeType":"YulFunctionCall","src":"33524:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"33559:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"33567:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33555:3:201"},"nodeType":"YulFunctionCall","src":"33555:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"33549:5:201"},"nodeType":"YulFunctionCall","src":"33549:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"33574:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"33545:3:201"},"nodeType":"YulFunctionCall","src":"33545:34:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"33517:6:201"},"nodeType":"YulFunctionCall","src":"33517:63:201"},"nodeType":"YulExpressionStatement","src":"33517:63:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteWithdrawParams_$21458_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteWithdrawParams_$21458_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"32865:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"32876:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"32884:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"32892:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"32900:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"32908:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"32919:4:201","type":""}],"src":"32462:1124:201"},{"body":{"nodeType":"YulBlock","src":"33979:430:201","statements":[{"nodeType":"YulAssignment","src":"33989:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34001:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"34012:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"33997:3:201"},"nodeType":"YulFunctionCall","src":"33997:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"33989:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34032:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"34043:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34025:6:201"},"nodeType":"YulFunctionCall","src":"34025:25:201"},"nodeType":"YulExpressionStatement","src":"34025:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34070:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"34081:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34066:3:201"},"nodeType":"YulFunctionCall","src":"34066:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"34086:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34059:6:201"},"nodeType":"YulFunctionCall","src":"34059:34:201"},"nodeType":"YulExpressionStatement","src":"34059:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34113:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"34124:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34109:3:201"},"nodeType":"YulFunctionCall","src":"34109:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"34129:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34102:6:201"},"nodeType":"YulFunctionCall","src":"34102:34:201"},"nodeType":"YulExpressionStatement","src":"34102:34:201"},{"nodeType":"YulVariableDeclaration","src":"34145:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"34155:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"34149:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34217:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"34228:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34213:3:201"},"nodeType":"YulFunctionCall","src":"34213:18:201"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"34237:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"34245:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34233:3:201"},"nodeType":"YulFunctionCall","src":"34233:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34206:6:201"},"nodeType":"YulFunctionCall","src":"34206:43:201"},"nodeType":"YulExpressionStatement","src":"34206:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34269:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"34280:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34265:3:201"},"nodeType":"YulFunctionCall","src":"34265:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"34286:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34258:6:201"},"nodeType":"YulFunctionCall","src":"34258:35:201"},"nodeType":"YulExpressionStatement","src":"34258:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34313:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"34324:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34309:3:201"},"nodeType":"YulFunctionCall","src":"34309:19:201"},{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"34334:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"34342:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34330:3:201"},"nodeType":"YulFunctionCall","src":"34330:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34302:6:201"},"nodeType":"YulFunctionCall","src":"34302:44:201"},"nodeType":"YulExpressionStatement","src":"34302:44:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"34366:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"34377:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"34362:3:201"},"nodeType":"YulFunctionCall","src":"34362:19:201"},{"arguments":[{"name":"value6","nodeType":"YulIdentifier","src":"34387:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"34395:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34383:3:201"},"nodeType":"YulFunctionCall","src":"34383:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34355:6:201"},"nodeType":"YulFunctionCall","src":"34355:48:201"},"nodeType":"YulExpressionStatement","src":"34355:48:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_t_address_t_uint256_t_address_t_uint16__to_t_uint256_t_uint256_t_uint256_t_address_t_uint256_t_address_t_uint16__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"33900:9:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"33911:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"33919:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"33927:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"33935:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"33943:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"33951:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"33959:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"33970:4:201","type":""}],"src":"33591:818:201"},{"body":{"nodeType":"YulBlock","src":"34469:382:201","statements":[{"nodeType":"YulAssignment","src":"34479:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"34493:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"34496:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"34489:3:201"},"nodeType":"YulFunctionCall","src":"34489:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"34479:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"34510:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"34540:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"34546:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34536:3:201"},"nodeType":"YulFunctionCall","src":"34536:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"34514:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"34587:31:201","statements":[{"nodeType":"YulAssignment","src":"34589:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"34603:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"34611:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"34599:3:201"},"nodeType":"YulFunctionCall","src":"34599:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"34589:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"34567:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"34560:6:201"},"nodeType":"YulFunctionCall","src":"34560:26:201"},"nodeType":"YulIf","src":"34557:61:201"},{"body":{"nodeType":"YulBlock","src":"34677:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"34698:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"34701:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34691:6:201"},"nodeType":"YulFunctionCall","src":"34691:88:201"},"nodeType":"YulExpressionStatement","src":"34691:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"34799:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"34802:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"34792:6:201"},"nodeType":"YulFunctionCall","src":"34792:15:201"},"nodeType":"YulExpressionStatement","src":"34792:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"34827:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"34830:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"34820:6:201"},"nodeType":"YulFunctionCall","src":"34820:15:201"},"nodeType":"YulExpressionStatement","src":"34820:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"34633:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"34656:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"34664:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"34653:2:201"},"nodeType":"YulFunctionCall","src":"34653:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"34630:2:201"},"nodeType":"YulFunctionCall","src":"34630:38:201"},"nodeType":"YulIf","src":"34627:218:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"34449:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"34458:6:201","type":""}],"src":"34414:437:201"},{"body":{"nodeType":"YulBlock","src":"35170:746:201","statements":[{"nodeType":"YulAssignment","src":"35180:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35192:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"35203:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35188:3:201"},"nodeType":"YulFunctionCall","src":"35188:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"35180:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35223:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"35234:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35216:6:201"},"nodeType":"YulFunctionCall","src":"35216:25:201"},"nodeType":"YulExpressionStatement","src":"35216:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35261:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"35272:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35257:3:201"},"nodeType":"YulFunctionCall","src":"35257:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"35277:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35250:6:201"},"nodeType":"YulFunctionCall","src":"35250:34:201"},"nodeType":"YulExpressionStatement","src":"35250:34:201"},{"nodeType":"YulVariableDeclaration","src":"35293:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"35303:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"35297:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35365:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"35376:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35361:3:201"},"nodeType":"YulFunctionCall","src":"35361:18:201"},{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"35391:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35385:5:201"},"nodeType":"YulFunctionCall","src":"35385:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"35400:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35381:3:201"},"nodeType":"YulFunctionCall","src":"35381:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35354:6:201"},"nodeType":"YulFunctionCall","src":"35354:50:201"},"nodeType":"YulExpressionStatement","src":"35354:50:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35424:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"35435:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35420:3:201"},"nodeType":"YulFunctionCall","src":"35420:18:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"35454:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"35462:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35450:3:201"},"nodeType":"YulFunctionCall","src":"35450:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35444:5:201"},"nodeType":"YulFunctionCall","src":"35444:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"35468:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35440:3:201"},"nodeType":"YulFunctionCall","src":"35440:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35413:6:201"},"nodeType":"YulFunctionCall","src":"35413:59:201"},"nodeType":"YulExpressionStatement","src":"35413:59:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35492:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"35503:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35488:3:201"},"nodeType":"YulFunctionCall","src":"35488:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"35523:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"35531:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35519:3:201"},"nodeType":"YulFunctionCall","src":"35519:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35513:5:201"},"nodeType":"YulFunctionCall","src":"35513:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"35537:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35509:3:201"},"nodeType":"YulFunctionCall","src":"35509:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35481:6:201"},"nodeType":"YulFunctionCall","src":"35481:60:201"},"nodeType":"YulExpressionStatement","src":"35481:60:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35561:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"35572:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35557:3:201"},"nodeType":"YulFunctionCall","src":"35557:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"35592:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"35600:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35588:3:201"},"nodeType":"YulFunctionCall","src":"35588:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35582:5:201"},"nodeType":"YulFunctionCall","src":"35582:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"35606:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35578:3:201"},"nodeType":"YulFunctionCall","src":"35578:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35550:6:201"},"nodeType":"YulFunctionCall","src":"35550:60:201"},"nodeType":"YulExpressionStatement","src":"35550:60:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35630:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"35641:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35626:3:201"},"nodeType":"YulFunctionCall","src":"35626:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"35661:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"35669:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35657:3:201"},"nodeType":"YulFunctionCall","src":"35657:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35651:5:201"},"nodeType":"YulFunctionCall","src":"35651:23:201"},{"name":"_1","nodeType":"YulIdentifier","src":"35676:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"35647:3:201"},"nodeType":"YulFunctionCall","src":"35647:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"35619:6:201"},"nodeType":"YulFunctionCall","src":"35619:61:201"},"nodeType":"YulExpressionStatement","src":"35619:61:201"},{"nodeType":"YulVariableDeclaration","src":"35689:43:201","value":{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"35719:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"35727:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35715:3:201"},"nodeType":"YulFunctionCall","src":"35715:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35709:5:201"},"nodeType":"YulFunctionCall","src":"35709:23:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"35693:12:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"35759:12:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35777:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"35788:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35773:3:201"},"nodeType":"YulFunctionCall","src":"35773:19:201"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"35741:17:201"},"nodeType":"YulFunctionCall","src":"35741:52:201"},"nodeType":"YulExpressionStatement","src":"35741:52:201"},{"nodeType":"YulVariableDeclaration","src":"35802:45:201","value":{"arguments":[{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"35834:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"35842:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35830:3:201"},"nodeType":"YulFunctionCall","src":"35830:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"35824:5:201"},"nodeType":"YulFunctionCall","src":"35824:23:201"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"35806:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"35874:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"35894:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"35905:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"35890:3:201"},"nodeType":"YulFunctionCall","src":"35890:19:201"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"35856:17:201"},"nodeType":"YulFunctionCall","src":"35856:54:201"},"nodeType":"YulExpressionStatement","src":"35856:54:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_InitReserveParams_$21632_memory_ptr__to_t_uint256_t_uint256_t_struct$_InitReserveParams_$21632_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"35123:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"35134:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"35142:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"35150:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"35161:4:201","type":""}],"src":"34856:1060:201"},{"body":{"nodeType":"YulBlock","src":"35999:167:201","statements":[{"body":{"nodeType":"YulBlock","src":"36045:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36054:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"36057:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"36047:6:201"},"nodeType":"YulFunctionCall","src":"36047:12:201"},"nodeType":"YulExpressionStatement","src":"36047:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"36020:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"36029:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"36016:3:201"},"nodeType":"YulFunctionCall","src":"36016:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"36041:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"36012:3:201"},"nodeType":"YulFunctionCall","src":"36012:32:201"},"nodeType":"YulIf","src":"36009:52:201"},{"nodeType":"YulVariableDeclaration","src":"36070:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36089:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"36083:5:201"},"nodeType":"YulFunctionCall","src":"36083:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"36074:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"36130:5:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"36108:21:201"},"nodeType":"YulFunctionCall","src":"36108:28:201"},"nodeType":"YulExpressionStatement","src":"36108:28:201"},{"nodeType":"YulAssignment","src":"36145:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"36155:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"36145:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"35965:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"35976:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"35988:6:201","type":""}],"src":"35921:245:201"},{"body":{"nodeType":"YulBlock","src":"36203:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36220:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"36223:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36213:6:201"},"nodeType":"YulFunctionCall","src":"36213:88:201"},"nodeType":"YulExpressionStatement","src":"36213:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36317:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"36320:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36310:6:201"},"nodeType":"YulFunctionCall","src":"36310:15:201"},"nodeType":"YulExpressionStatement","src":"36310:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"36341:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"36344:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"36334:6:201"},"nodeType":"YulFunctionCall","src":"36334:15:201"},"nodeType":"YulExpressionStatement","src":"36334:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"36171:184:201"},{"body":{"nodeType":"YulBlock","src":"36406:151:201","statements":[{"nodeType":"YulVariableDeclaration","src":"36416:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"36426:6:201","type":"","value":"0xffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"36420:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"36441:29:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"36460:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"36467:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36456:3:201"},"nodeType":"YulFunctionCall","src":"36456:14:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"36445:7:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"36498:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"36500:16:201"},"nodeType":"YulFunctionCall","src":"36500:18:201"},"nodeType":"YulExpressionStatement","src":"36500:18:201"}]},"condition":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"36485:7:201"},{"name":"_1","nodeType":"YulIdentifier","src":"36494:2:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"36482:2:201"},"nodeType":"YulFunctionCall","src":"36482:15:201"},"nodeType":"YulIf","src":"36479:41:201"},{"nodeType":"YulAssignment","src":"36529:22:201","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"36540:7:201"},{"kind":"number","nodeType":"YulLiteral","src":"36549:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36536:3:201"},"nodeType":"YulFunctionCall","src":"36536:15:201"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"36529:3:201"}]}]},"name":"increment_t_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"36388:5:201","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"36398:3:201","type":""}],"src":"36360:197:201"},{"body":{"nodeType":"YulBlock","src":"36838:281:201","statements":[{"nodeType":"YulAssignment","src":"36848:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36860:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"36871:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36856:3:201"},"nodeType":"YulFunctionCall","src":"36856:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"36848:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36891:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"36902:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36884:6:201"},"nodeType":"YulFunctionCall","src":"36884:25:201"},"nodeType":"YulExpressionStatement","src":"36884:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36929:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"36940:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36925:3:201"},"nodeType":"YulFunctionCall","src":"36925:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"36945:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36918:6:201"},"nodeType":"YulFunctionCall","src":"36918:34:201"},"nodeType":"YulExpressionStatement","src":"36918:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"36972:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"36983:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"36968:3:201"},"nodeType":"YulFunctionCall","src":"36968:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"36992:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"37000:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"36988:3:201"},"nodeType":"YulFunctionCall","src":"36988:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"36961:6:201"},"nodeType":"YulFunctionCall","src":"36961:83:201"},"nodeType":"YulExpressionStatement","src":"36961:83:201"},{"expression":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"37086:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37098:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"37109:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37094:3:201"},"nodeType":"YulFunctionCall","src":"37094:18:201"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"37053:32:201"},"nodeType":"YulFunctionCall","src":"37053:60:201"},"nodeType":"YulExpressionStatement","src":"37053:60:201"}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$21315_storage_t_struct$_UserConfigurationMap_$21322_storage_t_address_t_enum$_InterestRateMode_$21337__to_t_uint256_t_uint256_t_address_t_uint8__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"36783:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"36794:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"36802:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"36810:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"36818:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"36829:4:201","type":""}],"src":"36562:557:201"},{"body":{"nodeType":"YulBlock","src":"37373:610:201","statements":[{"nodeType":"YulVariableDeclaration","src":"37383:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37401:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"37412:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37397:3:201"},"nodeType":"YulFunctionCall","src":"37397:18:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"37387:6:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37431:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"37442:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37424:6:201"},"nodeType":"YulFunctionCall","src":"37424:25:201"},"nodeType":"YulExpressionStatement","src":"37424:25:201"},{"nodeType":"YulVariableDeclaration","src":"37458:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"37468:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"37462:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37490:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"37501:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37486:3:201"},"nodeType":"YulFunctionCall","src":"37486:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"37506:2:201","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37479:6:201"},"nodeType":"YulFunctionCall","src":"37479:30:201"},"nodeType":"YulExpressionStatement","src":"37479:30:201"},{"nodeType":"YulVariableDeclaration","src":"37518:17:201","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"37529:6:201"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"37522:3:201","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"37551:6:201"},{"name":"value2","nodeType":"YulIdentifier","src":"37559:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37544:6:201"},"nodeType":"YulFunctionCall","src":"37544:22:201"},"nodeType":"YulExpressionStatement","src":"37544:22:201"},{"nodeType":"YulAssignment","src":"37575:25:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"37586:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"37597:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37582:3:201"},"nodeType":"YulFunctionCall","src":"37582:18:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"37575:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"37609:20:201","value":{"name":"value1","nodeType":"YulIdentifier","src":"37623:6:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"37613:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"37638:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"37647:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"37642:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"37706:251:201","statements":[{"nodeType":"YulVariableDeclaration","src":"37720:33:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"37746:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"37733:12:201"},"nodeType":"YulFunctionCall","src":"37733:20:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"37724:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"37791:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"37766:24:201"},"nodeType":"YulFunctionCall","src":"37766:31:201"},"nodeType":"YulExpressionStatement","src":"37766:31:201"},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"37817:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"37826:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"37833:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"37822:3:201"},"nodeType":"YulFunctionCall","src":"37822:54:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"37810:6:201"},"nodeType":"YulFunctionCall","src":"37810:67:201"},"nodeType":"YulExpressionStatement","src":"37810:67:201"},{"nodeType":"YulAssignment","src":"37890:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"37901:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"37906:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37897:3:201"},"nodeType":"YulFunctionCall","src":"37897:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"37890:3:201"}]},{"nodeType":"YulAssignment","src":"37922:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"37936:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"37944:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37932:3:201"},"nodeType":"YulFunctionCall","src":"37932:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"37922:6:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"37668:1:201"},{"name":"value2","nodeType":"YulIdentifier","src":"37671:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"37665:2:201"},"nodeType":"YulFunctionCall","src":"37665:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"37679:18:201","statements":[{"nodeType":"YulAssignment","src":"37681:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"37690:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"37693:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"37686:3:201"},"nodeType":"YulFunctionCall","src":"37686:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"37681:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"37661:3:201","statements":[]},"src":"37657:300:201"},{"nodeType":"YulAssignment","src":"37966:11:201","value":{"name":"pos","nodeType":"YulIdentifier","src":"37974:3:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"37966:4:201"}]}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_array$_t_address_$dyn_calldata_ptr__to_t_uint256_t_array$_t_address_$dyn_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"37326:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"37337:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"37345:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"37353:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"37364:4:201","type":""}],"src":"37124:859:201"},{"body":{"nodeType":"YulBlock","src":"38450:1498:201","statements":[{"nodeType":"YulAssignment","src":"38460:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38472:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"38483:3:201","type":"","value":"512"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38468:3:201"},"nodeType":"YulFunctionCall","src":"38468:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"38460:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38503:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"38514:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38496:6:201"},"nodeType":"YulFunctionCall","src":"38496:25:201"},"nodeType":"YulExpressionStatement","src":"38496:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38541:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"38552:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38537:3:201"},"nodeType":"YulFunctionCall","src":"38537:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"38557:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38530:6:201"},"nodeType":"YulFunctionCall","src":"38530:34:201"},"nodeType":"YulExpressionStatement","src":"38530:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38584:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"38595:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38580:3:201"},"nodeType":"YulFunctionCall","src":"38580:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"38600:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38573:6:201"},"nodeType":"YulFunctionCall","src":"38573:34:201"},"nodeType":"YulExpressionStatement","src":"38573:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38627:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"38638:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38623:3:201"},"nodeType":"YulFunctionCall","src":"38623:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"38643:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38616:6:201"},"nodeType":"YulFunctionCall","src":"38616:34:201"},"nodeType":"YulExpressionStatement","src":"38616:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"38684:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38678:5:201"},"nodeType":"YulFunctionCall","src":"38678:13:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38697:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"38708:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38693:3:201"},"nodeType":"YulFunctionCall","src":"38693:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"38659:18:201"},"nodeType":"YulFunctionCall","src":"38659:54:201"},"nodeType":"YulExpressionStatement","src":"38659:54:201"},{"nodeType":"YulVariableDeclaration","src":"38722:42:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"38752:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"38760:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38748:3:201"},"nodeType":"YulFunctionCall","src":"38748:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38742:5:201"},"nodeType":"YulFunctionCall","src":"38742:22:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"38726:12:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"38792:12:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38810:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"38821:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38806:3:201"},"nodeType":"YulFunctionCall","src":"38806:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"38773:18:201"},"nodeType":"YulFunctionCall","src":"38773:53:201"},"nodeType":"YulExpressionStatement","src":"38773:53:201"},{"nodeType":"YulVariableDeclaration","src":"38835:44:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"38867:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"38875:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38863:3:201"},"nodeType":"YulFunctionCall","src":"38863:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38857:5:201"},"nodeType":"YulFunctionCall","src":"38857:22:201"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"38839:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"38907:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38927:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"38938:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38923:3:201"},"nodeType":"YulFunctionCall","src":"38923:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"38888:18:201"},"nodeType":"YulFunctionCall","src":"38888:55:201"},"nodeType":"YulExpressionStatement","src":"38888:55:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"38963:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"38974:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38959:3:201"},"nodeType":"YulFunctionCall","src":"38959:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"38990:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"38998:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"38986:3:201"},"nodeType":"YulFunctionCall","src":"38986:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"38980:5:201"},"nodeType":"YulFunctionCall","src":"38980:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"38952:6:201"},"nodeType":"YulFunctionCall","src":"38952:51:201"},"nodeType":"YulExpressionStatement","src":"38952:51:201"},{"nodeType":"YulVariableDeclaration","src":"39012:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39044:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"39052:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39040:3:201"},"nodeType":"YulFunctionCall","src":"39040:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39034:5:201"},"nodeType":"YulFunctionCall","src":"39034:23:201"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"39016:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"39066:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"39076:3:201","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"39070:2:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"39121:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39141:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"39152:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39137:3:201"},"nodeType":"YulFunctionCall","src":"39137:18:201"}],"functionName":{"name":"abi_encode_enum_InterestRateMode","nodeType":"YulIdentifier","src":"39088:32:201"},"nodeType":"YulFunctionCall","src":"39088:68:201"},"nodeType":"YulExpressionStatement","src":"39088:68:201"},{"nodeType":"YulVariableDeclaration","src":"39165:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39197:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"39205:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39193:3:201"},"nodeType":"YulFunctionCall","src":"39193:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39187:5:201"},"nodeType":"YulFunctionCall","src":"39187:23:201"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"39169:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"39219:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"39229:3:201","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"39223:2:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"39259:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39279:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"39290:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39275:3:201"},"nodeType":"YulFunctionCall","src":"39275:18:201"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"39241:17:201"},"nodeType":"YulFunctionCall","src":"39241:53:201"},"nodeType":"YulExpressionStatement","src":"39241:53:201"},{"nodeType":"YulVariableDeclaration","src":"39303:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39335:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"39343:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39331:3:201"},"nodeType":"YulFunctionCall","src":"39331:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39325:5:201"},"nodeType":"YulFunctionCall","src":"39325:23:201"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"39307:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"39357:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"39367:3:201","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"39361:2:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"39395:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39415:9:201"},{"name":"_3","nodeType":"YulIdentifier","src":"39426:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39411:3:201"},"nodeType":"YulFunctionCall","src":"39411:18:201"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"39379:15:201"},"nodeType":"YulFunctionCall","src":"39379:51:201"},"nodeType":"YulExpressionStatement","src":"39379:51:201"},{"nodeType":"YulVariableDeclaration","src":"39439:33:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39459:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"39467:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39455:3:201"},"nodeType":"YulFunctionCall","src":"39455:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39449:5:201"},"nodeType":"YulFunctionCall","src":"39449:23:201"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"39443:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"39481:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"39491:3:201","type":"","value":"352"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"39485:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39514:9:201"},{"name":"_5","nodeType":"YulIdentifier","src":"39525:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39510:3:201"},"nodeType":"YulFunctionCall","src":"39510:18:201"},{"name":"_4","nodeType":"YulIdentifier","src":"39530:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39503:6:201"},"nodeType":"YulFunctionCall","src":"39503:30:201"},"nodeType":"YulExpressionStatement","src":"39503:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39553:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"39564:3:201","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39549:3:201"},"nodeType":"YulFunctionCall","src":"39549:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39580:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"39588:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39576:3:201"},"nodeType":"YulFunctionCall","src":"39576:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39570:5:201"},"nodeType":"YulFunctionCall","src":"39570:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"39542:6:201"},"nodeType":"YulFunctionCall","src":"39542:51:201"},"nodeType":"YulExpressionStatement","src":"39542:51:201"},{"nodeType":"YulVariableDeclaration","src":"39602:44:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39634:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"39642:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39630:3:201"},"nodeType":"YulFunctionCall","src":"39630:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39624:5:201"},"nodeType":"YulFunctionCall","src":"39624:22:201"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"39606:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"39674:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39694:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"39705:3:201","type":"","value":"416"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39690:3:201"},"nodeType":"YulFunctionCall","src":"39690:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"39655:18:201"},"nodeType":"YulFunctionCall","src":"39655:55:201"},"nodeType":"YulExpressionStatement","src":"39655:55:201"},{"nodeType":"YulVariableDeclaration","src":"39719:44:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39751:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"39759:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39747:3:201"},"nodeType":"YulFunctionCall","src":"39747:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39741:5:201"},"nodeType":"YulFunctionCall","src":"39741:22:201"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"39723:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"39789:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39809:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"39820:3:201","type":"","value":"448"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39805:3:201"},"nodeType":"YulFunctionCall","src":"39805:19:201"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"39772:16:201"},"nodeType":"YulFunctionCall","src":"39772:53:201"},"nodeType":"YulExpressionStatement","src":"39772:53:201"},{"nodeType":"YulVariableDeclaration","src":"39834:44:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"39866:6:201"},{"name":"_5","nodeType":"YulIdentifier","src":"39874:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39862:3:201"},"nodeType":"YulFunctionCall","src":"39862:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"39856:5:201"},"nodeType":"YulFunctionCall","src":"39856:22:201"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"39838:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"39906:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"39926:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"39937:3:201","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"39922:3:201"},"nodeType":"YulFunctionCall","src":"39922:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"39887:18:201"},"nodeType":"YulFunctionCall","src":"39887:55:201"},"nodeType":"YulExpressionStatement","src":"39887:55:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteBorrowParams_$21433_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteBorrowParams_$21433_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"38387:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"38398:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"38406:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"38414:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"38422:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"38430:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"38441:4:201","type":""}],"src":"37988:1960:201"},{"body":{"nodeType":"YulBlock","src":"40014:423:201","statements":[{"nodeType":"YulVariableDeclaration","src":"40024:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"40044:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40038:5:201"},"nodeType":"YulFunctionCall","src":"40038:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"40028:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40066:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"40071:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"40059:6:201"},"nodeType":"YulFunctionCall","src":"40059:19:201"},"nodeType":"YulExpressionStatement","src":"40059:19:201"},{"nodeType":"YulVariableDeclaration","src":"40087:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"40097:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"40091:2:201","type":""}]},{"nodeType":"YulAssignment","src":"40110:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40121:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"40126:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40117:3:201"},"nodeType":"YulFunctionCall","src":"40117:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"40110:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"40138:28:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"40156:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"40163:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40152:3:201"},"nodeType":"YulFunctionCall","src":"40152:14:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"40142:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"40175:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"40184:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"40179:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"40243:169:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40264:3:201"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"40279:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40273:5:201"},"nodeType":"YulFunctionCall","src":"40273:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"40288:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"40269:3:201"},"nodeType":"YulFunctionCall","src":"40269:62:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"40257:6:201"},"nodeType":"YulFunctionCall","src":"40257:75:201"},"nodeType":"YulExpressionStatement","src":"40257:75:201"},{"nodeType":"YulAssignment","src":"40345:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40356:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"40361:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40352:3:201"},"nodeType":"YulFunctionCall","src":"40352:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"40345:3:201"}]},{"nodeType":"YulAssignment","src":"40377:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"40391:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"40399:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40387:3:201"},"nodeType":"YulFunctionCall","src":"40387:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"40377:6:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"40205:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"40208:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"40202:2:201"},"nodeType":"YulFunctionCall","src":"40202:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"40216:18:201","statements":[{"nodeType":"YulAssignment","src":"40218:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"40227:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"40230:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40223:3:201"},"nodeType":"YulFunctionCall","src":"40223:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"40218:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"40198:3:201","statements":[]},"src":"40194:218:201"},{"nodeType":"YulAssignment","src":"40421:10:201","value":{"name":"pos","nodeType":"YulIdentifier","src":"40428:3:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"40421:3:201"}]}]},"name":"abi_encode_array_address_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"39991:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"39998:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"40006:3:201","type":""}],"src":"39953:484:201"},{"body":{"nodeType":"YulBlock","src":"40503:374:201","statements":[{"nodeType":"YulVariableDeclaration","src":"40513:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"40533:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40527:5:201"},"nodeType":"YulFunctionCall","src":"40527:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"40517:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40555:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"40560:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"40548:6:201"},"nodeType":"YulFunctionCall","src":"40548:19:201"},"nodeType":"YulExpressionStatement","src":"40548:19:201"},{"nodeType":"YulVariableDeclaration","src":"40576:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"40586:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"40580:2:201","type":""}]},{"nodeType":"YulAssignment","src":"40599:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40610:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"40615:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40606:3:201"},"nodeType":"YulFunctionCall","src":"40606:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"40599:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"40627:28:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"40645:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"40652:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40641:3:201"},"nodeType":"YulFunctionCall","src":"40641:14:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"40631:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"40664:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"40673:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"40668:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"40732:120:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40753:3:201"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"40764:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"40758:5:201"},"nodeType":"YulFunctionCall","src":"40758:13:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"40746:6:201"},"nodeType":"YulFunctionCall","src":"40746:26:201"},"nodeType":"YulExpressionStatement","src":"40746:26:201"},{"nodeType":"YulAssignment","src":"40785:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"40796:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"40801:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40792:3:201"},"nodeType":"YulFunctionCall","src":"40792:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"40785:3:201"}]},{"nodeType":"YulAssignment","src":"40817:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"40831:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"40839:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40827:3:201"},"nodeType":"YulFunctionCall","src":"40827:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"40817:6:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"40694:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"40697:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"40691:2:201"},"nodeType":"YulFunctionCall","src":"40691:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"40705:18:201","statements":[{"nodeType":"YulAssignment","src":"40707:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"40716:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"40719:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"40712:3:201"},"nodeType":"YulFunctionCall","src":"40712:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"40707:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"40687:3:201","statements":[]},"src":"40683:169:201"},{"nodeType":"YulAssignment","src":"40861:10:201","value":{"name":"pos","nodeType":"YulIdentifier","src":"40868:3:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"40861:3:201"}]}]},"name":"abi_encode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"40480:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"40487:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"40495:3:201","type":""}],"src":"40442:435:201"},{"body":{"nodeType":"YulBlock","src":"41336:2157:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41353:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"41364:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41346:6:201"},"nodeType":"YulFunctionCall","src":"41346:25:201"},"nodeType":"YulExpressionStatement","src":"41346:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41391:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"41402:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41387:3:201"},"nodeType":"YulFunctionCall","src":"41387:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"41407:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41380:6:201"},"nodeType":"YulFunctionCall","src":"41380:34:201"},"nodeType":"YulExpressionStatement","src":"41380:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41434:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"41445:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41430:3:201"},"nodeType":"YulFunctionCall","src":"41430:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"41450:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41423:6:201"},"nodeType":"YulFunctionCall","src":"41423:34:201"},"nodeType":"YulExpressionStatement","src":"41423:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41477:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"41488:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41473:3:201"},"nodeType":"YulFunctionCall","src":"41473:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"41493:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41466:6:201"},"nodeType":"YulFunctionCall","src":"41466:34:201"},"nodeType":"YulExpressionStatement","src":"41466:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41520:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"41531:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41516:3:201"},"nodeType":"YulFunctionCall","src":"41516:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"41537:3:201","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41509:6:201"},"nodeType":"YulFunctionCall","src":"41509:32:201"},"nodeType":"YulExpressionStatement","src":"41509:32:201"},{"expression":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"41575:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"41569:5:201"},"nodeType":"YulFunctionCall","src":"41569:13:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41588:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"41599:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41584:3:201"},"nodeType":"YulFunctionCall","src":"41584:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"41550:18:201"},"nodeType":"YulFunctionCall","src":"41550:54:201"},"nodeType":"YulExpressionStatement","src":"41550:54:201"},{"nodeType":"YulVariableDeclaration","src":"41613:42:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"41643:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"41651:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41639:3:201"},"nodeType":"YulFunctionCall","src":"41639:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"41633:5:201"},"nodeType":"YulFunctionCall","src":"41633:22:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"41617:12:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"41664:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"41674:6:201","type":"","value":"0x01c0"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"41668:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41700:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"41711:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41696:3:201"},"nodeType":"YulFunctionCall","src":"41696:19:201"},{"name":"_1","nodeType":"YulIdentifier","src":"41717:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41689:6:201"},"nodeType":"YulFunctionCall","src":"41689:31:201"},"nodeType":"YulExpressionStatement","src":"41689:31:201"},{"nodeType":"YulVariableDeclaration","src":"41729:77:201","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"41772:12:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41790:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"41801:3:201","type":"","value":"608"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41786:3:201"},"nodeType":"YulFunctionCall","src":"41786:19:201"}],"functionName":{"name":"abi_encode_array_address_dyn","nodeType":"YulIdentifier","src":"41743:28:201"},"nodeType":"YulFunctionCall","src":"41743:63:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"41733:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"41815:44:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"41847:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"41855:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41843:3:201"},"nodeType":"YulFunctionCall","src":"41843:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"41837:5:201"},"nodeType":"YulFunctionCall","src":"41837:22:201"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"41819:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"41868:76:201","value":{"kind":"number","nodeType":"YulLiteral","src":"41878:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"41872:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"41964:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"41975:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41960:3:201"},"nodeType":"YulFunctionCall","src":"41960:19:201"},{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"41989:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"41997:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"41985:3:201"},"nodeType":"YulFunctionCall","src":"41985:22:201"},{"name":"_2","nodeType":"YulIdentifier","src":"42009:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"41981:3:201"},"nodeType":"YulFunctionCall","src":"41981:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"41953:6:201"},"nodeType":"YulFunctionCall","src":"41953:60:201"},"nodeType":"YulExpressionStatement","src":"41953:60:201"},{"nodeType":"YulVariableDeclaration","src":"42022:66:201","value":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"42065:14:201"},{"name":"tail_1","nodeType":"YulIdentifier","src":"42081:6:201"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"42036:28:201"},"nodeType":"YulFunctionCall","src":"42036:52:201"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"42026:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42097:44:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42129:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"42137:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42125:3:201"},"nodeType":"YulFunctionCall","src":"42125:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42119:5:201"},"nodeType":"YulFunctionCall","src":"42119:22:201"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"42101:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42150:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"42160:3:201","type":"","value":"256"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"42154:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42183:9:201"},{"name":"_3","nodeType":"YulIdentifier","src":"42194:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42179:3:201"},"nodeType":"YulFunctionCall","src":"42179:18:201"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"42207:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"42215:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"42203:3:201"},"nodeType":"YulFunctionCall","src":"42203:22:201"},{"name":"_2","nodeType":"YulIdentifier","src":"42227:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42199:3:201"},"nodeType":"YulFunctionCall","src":"42199:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42172:6:201"},"nodeType":"YulFunctionCall","src":"42172:59:201"},"nodeType":"YulExpressionStatement","src":"42172:59:201"},{"nodeType":"YulVariableDeclaration","src":"42240:66:201","value":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"42283:14:201"},{"name":"tail_2","nodeType":"YulIdentifier","src":"42299:6:201"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"42254:28:201"},"nodeType":"YulFunctionCall","src":"42254:52:201"},"variables":[{"name":"tail_3","nodeType":"YulTypedName","src":"42244:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42315:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42347:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"42355:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42343:3:201"},"nodeType":"YulFunctionCall","src":"42343:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42337:5:201"},"nodeType":"YulFunctionCall","src":"42337:23:201"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"42319:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42369:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"42379:3:201","type":"","value":"288"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"42373:2:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"42410:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42430:9:201"},{"name":"_4","nodeType":"YulIdentifier","src":"42441:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42426:3:201"},"nodeType":"YulFunctionCall","src":"42426:18:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"42391:18:201"},"nodeType":"YulFunctionCall","src":"42391:54:201"},"nodeType":"YulExpressionStatement","src":"42391:54:201"},{"nodeType":"YulVariableDeclaration","src":"42454:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42486:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"42494:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42482:3:201"},"nodeType":"YulFunctionCall","src":"42482:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42476:5:201"},"nodeType":"YulFunctionCall","src":"42476:23:201"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"42458:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42508:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"42518:3:201","type":"","value":"320"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"42512:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42541:9:201"},{"name":"_5","nodeType":"YulIdentifier","src":"42552:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42537:3:201"},"nodeType":"YulFunctionCall","src":"42537:18:201"},{"arguments":[{"arguments":[{"name":"tail_3","nodeType":"YulIdentifier","src":"42565:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"42573:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"42561:3:201"},"nodeType":"YulFunctionCall","src":"42561:22:201"},{"name":"_2","nodeType":"YulIdentifier","src":"42585:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42557:3:201"},"nodeType":"YulFunctionCall","src":"42557:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42530:6:201"},"nodeType":"YulFunctionCall","src":"42530:59:201"},"nodeType":"YulExpressionStatement","src":"42530:59:201"},{"nodeType":"YulVariableDeclaration","src":"42598:55:201","value":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"42630:14:201"},{"name":"tail_3","nodeType":"YulIdentifier","src":"42646:6:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"42612:17:201"},"nodeType":"YulFunctionCall","src":"42612:41:201"},"variables":[{"name":"tail_4","nodeType":"YulTypedName","src":"42602:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42662:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42694:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"42702:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42690:3:201"},"nodeType":"YulFunctionCall","src":"42690:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42684:5:201"},"nodeType":"YulFunctionCall","src":"42684:23:201"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"42666:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42716:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"42726:3:201","type":"","value":"352"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"42720:2:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"42756:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42776:9:201"},{"name":"_6","nodeType":"YulIdentifier","src":"42787:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42772:3:201"},"nodeType":"YulFunctionCall","src":"42772:18:201"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"42738:17:201"},"nodeType":"YulFunctionCall","src":"42738:53:201"},"nodeType":"YulExpressionStatement","src":"42738:53:201"},{"nodeType":"YulVariableDeclaration","src":"42800:33:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42820:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"42828:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42816:3:201"},"nodeType":"YulFunctionCall","src":"42816:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42810:5:201"},"nodeType":"YulFunctionCall","src":"42810:23:201"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"42804:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42842:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"42852:3:201","type":"","value":"384"},"variables":[{"name":"_8","nodeType":"YulTypedName","src":"42846:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42875:9:201"},{"name":"_8","nodeType":"YulIdentifier","src":"42886:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42871:3:201"},"nodeType":"YulFunctionCall","src":"42871:18:201"},{"name":"_7","nodeType":"YulIdentifier","src":"42891:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42864:6:201"},"nodeType":"YulFunctionCall","src":"42864:30:201"},"nodeType":"YulExpressionStatement","src":"42864:30:201"},{"nodeType":"YulVariableDeclaration","src":"42903:32:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"42923:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"42931:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42919:3:201"},"nodeType":"YulFunctionCall","src":"42919:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"42913:5:201"},"nodeType":"YulFunctionCall","src":"42913:22:201"},"variables":[{"name":"_9","nodeType":"YulTypedName","src":"42907:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"42944:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"42955:3:201","type":"","value":"416"},"variables":[{"name":"_10","nodeType":"YulTypedName","src":"42948:3:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"42978:9:201"},{"name":"_10","nodeType":"YulIdentifier","src":"42989:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"42974:3:201"},"nodeType":"YulFunctionCall","src":"42974:19:201"},{"name":"_9","nodeType":"YulIdentifier","src":"42995:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"42967:6:201"},"nodeType":"YulFunctionCall","src":"42967:31:201"},"nodeType":"YulExpressionStatement","src":"42967:31:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43018:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"43029:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43014:3:201"},"nodeType":"YulFunctionCall","src":"43014:18:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43044:6:201"},{"name":"_4","nodeType":"YulIdentifier","src":"43052:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43040:3:201"},"nodeType":"YulFunctionCall","src":"43040:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43034:5:201"},"nodeType":"YulFunctionCall","src":"43034:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43007:6:201"},"nodeType":"YulFunctionCall","src":"43007:50:201"},"nodeType":"YulExpressionStatement","src":"43007:50:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43077:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"43088:3:201","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43073:3:201"},"nodeType":"YulFunctionCall","src":"43073:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43104:6:201"},{"name":"_5","nodeType":"YulIdentifier","src":"43112:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43100:3:201"},"nodeType":"YulFunctionCall","src":"43100:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43094:5:201"},"nodeType":"YulFunctionCall","src":"43094:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43066:6:201"},"nodeType":"YulFunctionCall","src":"43066:51:201"},"nodeType":"YulExpressionStatement","src":"43066:51:201"},{"nodeType":"YulVariableDeclaration","src":"43126:44:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43158:6:201"},{"name":"_6","nodeType":"YulIdentifier","src":"43166:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43154:3:201"},"nodeType":"YulFunctionCall","src":"43154:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43148:5:201"},"nodeType":"YulFunctionCall","src":"43148:22:201"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"43130:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"43198:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43218:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"43229:3:201","type":"","value":"512"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43214:3:201"},"nodeType":"YulFunctionCall","src":"43214:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"43179:18:201"},"nodeType":"YulFunctionCall","src":"43179:55:201"},"nodeType":"YulExpressionStatement","src":"43179:55:201"},{"nodeType":"YulVariableDeclaration","src":"43243:44:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43275:6:201"},{"name":"_8","nodeType":"YulIdentifier","src":"43283:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43271:3:201"},"nodeType":"YulFunctionCall","src":"43271:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43265:5:201"},"nodeType":"YulFunctionCall","src":"43265:22:201"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"43247:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"43313:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43333:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"43344:3:201","type":"","value":"544"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43329:3:201"},"nodeType":"YulFunctionCall","src":"43329:19:201"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"43296:16:201"},"nodeType":"YulFunctionCall","src":"43296:53:201"},"nodeType":"YulExpressionStatement","src":"43296:53:201"},{"nodeType":"YulVariableDeclaration","src":"43358:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"43390:6:201"},{"name":"_10","nodeType":"YulIdentifier","src":"43398:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43386:3:201"},"nodeType":"YulFunctionCall","src":"43386:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"43380:5:201"},"nodeType":"YulFunctionCall","src":"43380:23:201"},"variables":[{"name":"memberValue0_8","nodeType":"YulTypedName","src":"43362:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_8","nodeType":"YulIdentifier","src":"43428:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43448:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"43459:3:201","type":"","value":"576"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43444:3:201"},"nodeType":"YulFunctionCall","src":"43444:19:201"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"43412:15:201"},"nodeType":"YulFunctionCall","src":"43412:52:201"},"nodeType":"YulExpressionStatement","src":"43412:52:201"},{"nodeType":"YulAssignment","src":"43473:14:201","value":{"name":"tail_4","nodeType":"YulIdentifier","src":"43481:6:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"43473:4:201"}]}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_FlashloanParams_$21516_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FlashloanParams_$21516_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"41273:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"41284:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"41292:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"41300:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"41308:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"41316:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"41327:4:201","type":""}],"src":"40882:2611:201"},{"body":{"nodeType":"YulBlock","src":"43918:592:201","statements":[{"nodeType":"YulAssignment","src":"43928:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43940:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"43951:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"43936:3:201"},"nodeType":"YulFunctionCall","src":"43936:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"43928:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"43971:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"43982:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43964:6:201"},"nodeType":"YulFunctionCall","src":"43964:25:201"},"nodeType":"YulExpressionStatement","src":"43964:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44009:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"44020:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44005:3:201"},"nodeType":"YulFunctionCall","src":"44005:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"44025:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"43998:6:201"},"nodeType":"YulFunctionCall","src":"43998:34:201"},"nodeType":"YulExpressionStatement","src":"43998:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44052:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"44063:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44048:3:201"},"nodeType":"YulFunctionCall","src":"44048:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"44068:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44041:6:201"},"nodeType":"YulFunctionCall","src":"44041:34:201"},"nodeType":"YulExpressionStatement","src":"44041:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44095:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"44106:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44091:3:201"},"nodeType":"YulFunctionCall","src":"44091:18:201"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"44123:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44117:5:201"},"nodeType":"YulFunctionCall","src":"44117:13:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44111:5:201"},"nodeType":"YulFunctionCall","src":"44111:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44084:6:201"},"nodeType":"YulFunctionCall","src":"44084:48:201"},"nodeType":"YulExpressionStatement","src":"44084:48:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44152:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"44163:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44148:3:201"},"nodeType":"YulFunctionCall","src":"44148:19:201"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"44179:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"44187:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44175:3:201"},"nodeType":"YulFunctionCall","src":"44175:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44169:5:201"},"nodeType":"YulFunctionCall","src":"44169:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44141:6:201"},"nodeType":"YulFunctionCall","src":"44141:51:201"},"nodeType":"YulExpressionStatement","src":"44141:51:201"},{"nodeType":"YulVariableDeclaration","src":"44201:42:201","value":{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"44231:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"44239:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44227:3:201"},"nodeType":"YulFunctionCall","src":"44227:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44221:5:201"},"nodeType":"YulFunctionCall","src":"44221:22:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"44205:12:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"44252:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"44262:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"44256:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44324:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"44335:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44320:3:201"},"nodeType":"YulFunctionCall","src":"44320:19:201"},{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"44345:12:201"},{"name":"_1","nodeType":"YulIdentifier","src":"44359:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"44341:3:201"},"nodeType":"YulFunctionCall","src":"44341:21:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44313:6:201"},"nodeType":"YulFunctionCall","src":"44313:50:201"},"nodeType":"YulExpressionStatement","src":"44313:50:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44383:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"44394:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44379:3:201"},"nodeType":"YulFunctionCall","src":"44379:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"44414:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"44422:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44410:3:201"},"nodeType":"YulFunctionCall","src":"44410:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44404:5:201"},"nodeType":"YulFunctionCall","src":"44404:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"44428:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"44400:3:201"},"nodeType":"YulFunctionCall","src":"44400:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44372:6:201"},"nodeType":"YulFunctionCall","src":"44372:60:201"},"nodeType":"YulExpressionStatement","src":"44372:60:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44452:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"44463:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44448:3:201"},"nodeType":"YulFunctionCall","src":"44448:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"44483:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"44491:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44479:3:201"},"nodeType":"YulFunctionCall","src":"44479:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44473:5:201"},"nodeType":"YulFunctionCall","src":"44473:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"44498:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"44469:3:201"},"nodeType":"YulFunctionCall","src":"44469:34:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"44441:6:201"},"nodeType":"YulFunctionCall","src":"44441:63:201"},"nodeType":"YulExpressionStatement","src":"44441:63:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"43863:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"43874:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"43882:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"43890:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"43898:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"43909:4:201","type":""}],"src":"43498:1012:201"},{"body":{"nodeType":"YulBlock","src":"44681:326:201","statements":[{"body":{"nodeType":"YulBlock","src":"44728:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"44737:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"44740:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"44730:6:201"},"nodeType":"YulFunctionCall","src":"44730:12:201"},"nodeType":"YulExpressionStatement","src":"44730:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"44702:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"44711:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"44698:3:201"},"nodeType":"YulFunctionCall","src":"44698:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"44723:3:201","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"44694:3:201"},"nodeType":"YulFunctionCall","src":"44694:33:201"},"nodeType":"YulIf","src":"44691:53:201"},{"nodeType":"YulAssignment","src":"44753:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44769:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44763:5:201"},"nodeType":"YulFunctionCall","src":"44763:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"44753:6:201"}]},{"nodeType":"YulAssignment","src":"44788:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44808:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"44819:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44804:3:201"},"nodeType":"YulFunctionCall","src":"44804:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44798:5:201"},"nodeType":"YulFunctionCall","src":"44798:25:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"44788:6:201"}]},{"nodeType":"YulAssignment","src":"44832:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44852:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"44863:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44848:3:201"},"nodeType":"YulFunctionCall","src":"44848:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44842:5:201"},"nodeType":"YulFunctionCall","src":"44842:25:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"44832:6:201"}]},{"nodeType":"YulAssignment","src":"44876:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44896:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"44907:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44892:3:201"},"nodeType":"YulFunctionCall","src":"44892:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44886:5:201"},"nodeType":"YulFunctionCall","src":"44886:25:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"44876:6:201"}]},{"nodeType":"YulAssignment","src":"44920:36:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44940:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"44951:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44936:3:201"},"nodeType":"YulFunctionCall","src":"44936:19:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44930:5:201"},"nodeType":"YulFunctionCall","src":"44930:26:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"44920:6:201"}]},{"nodeType":"YulAssignment","src":"44965:36:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"44985:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"44996:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"44981:3:201"},"nodeType":"YulFunctionCall","src":"44981:19:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"44975:5:201"},"nodeType":"YulFunctionCall","src":"44975:26:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"44965:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"44607:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"44618:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"44630:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"44638:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"44646:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"44654:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"44662:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"44670:6:201","type":""}],"src":"44515:492:201"},{"body":{"nodeType":"YulBlock","src":"45186:236:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45203:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"45214:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45196:6:201"},"nodeType":"YulFunctionCall","src":"45196:21:201"},"nodeType":"YulExpressionStatement","src":"45196:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45237:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"45248:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45233:3:201"},"nodeType":"YulFunctionCall","src":"45233:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"45253:2:201","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45226:6:201"},"nodeType":"YulFunctionCall","src":"45226:30:201"},"nodeType":"YulExpressionStatement","src":"45226:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45276:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"45287:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45272:3:201"},"nodeType":"YulFunctionCall","src":"45272:18:201"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"45292:34:201","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45265:6:201"},"nodeType":"YulFunctionCall","src":"45265:62:201"},"nodeType":"YulExpressionStatement","src":"45265:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45347:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"45358:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45343:3:201"},"nodeType":"YulFunctionCall","src":"45343:18:201"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"45363:16:201","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45336:6:201"},"nodeType":"YulFunctionCall","src":"45336:44:201"},"nodeType":"YulExpressionStatement","src":"45336:44:201"},{"nodeType":"YulAssignment","src":"45389:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45401:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"45412:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45397:3:201"},"nodeType":"YulFunctionCall","src":"45397:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"45389:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"45163:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"45177:4:201","type":""}],"src":"45012:410:201"},{"body":{"nodeType":"YulBlock","src":"45619:241:201","statements":[{"nodeType":"YulAssignment","src":"45629:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45641:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"45652:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45637:3:201"},"nodeType":"YulFunctionCall","src":"45637:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"45629:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45671:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"45682:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45664:6:201"},"nodeType":"YulFunctionCall","src":"45664:25:201"},"nodeType":"YulExpressionStatement","src":"45664:25:201"},{"nodeType":"YulVariableDeclaration","src":"45698:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"45708:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"45702:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45770:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"45781:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45766:3:201"},"nodeType":"YulFunctionCall","src":"45766:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"45790:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"45798:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"45786:3:201"},"nodeType":"YulFunctionCall","src":"45786:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45759:6:201"},"nodeType":"YulFunctionCall","src":"45759:43:201"},"nodeType":"YulExpressionStatement","src":"45759:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"45822:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"45833:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"45818:3:201"},"nodeType":"YulFunctionCall","src":"45818:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"45842:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"45850:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"45838:3:201"},"nodeType":"YulFunctionCall","src":"45838:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"45811:6:201"},"nodeType":"YulFunctionCall","src":"45811:43:201"},"nodeType":"YulExpressionStatement","src":"45811:43:201"}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$21315_storage_t_address_t_address__to_t_uint256_t_address_t_address__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"45572:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"45583:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"45591:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"45599:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"45610:4:201","type":""}],"src":"45427:433:201"},{"body":{"nodeType":"YulBlock","src":"46030:241:201","statements":[{"nodeType":"YulAssignment","src":"46040:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46052:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"46063:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46048:3:201"},"nodeType":"YulFunctionCall","src":"46048:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"46040:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"46075:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"46085:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"46079:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46143:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"46158:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"46166:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"46154:3:201"},"nodeType":"YulFunctionCall","src":"46154:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46136:6:201"},"nodeType":"YulFunctionCall","src":"46136:34:201"},"nodeType":"YulExpressionStatement","src":"46136:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46190:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"46201:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46186:3:201"},"nodeType":"YulFunctionCall","src":"46186:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"46210:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"46218:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"46206:3:201"},"nodeType":"YulFunctionCall","src":"46206:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46179:6:201"},"nodeType":"YulFunctionCall","src":"46179:43:201"},"nodeType":"YulExpressionStatement","src":"46179:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"46242:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"46253:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46238:3:201"},"nodeType":"YulFunctionCall","src":"46238:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"46258:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46231:6:201"},"nodeType":"YulFunctionCall","src":"46231:34:201"},"nodeType":"YulExpressionStatement","src":"46231:34:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"45983:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"45994:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"46002:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"46010:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"46021:4:201","type":""}],"src":"45865:406:201"},{"body":{"nodeType":"YulBlock","src":"46325:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"46347:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"46349:16:201"},"nodeType":"YulFunctionCall","src":"46349:18:201"},"nodeType":"YulExpressionStatement","src":"46349:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"46341:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"46344:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"46338:2:201"},"nodeType":"YulFunctionCall","src":"46338:8:201"},"nodeType":"YulIf","src":"46335:34:201"},{"nodeType":"YulAssignment","src":"46378:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"46390:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"46393:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"46386:3:201"},"nodeType":"YulFunctionCall","src":"46386:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"46378:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"46307:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"46310:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"46316:4:201","type":""}],"src":"46276:125:201"},{"body":{"nodeType":"YulBlock","src":"46438:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"46455:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"46458:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46448:6:201"},"nodeType":"YulFunctionCall","src":"46448:88:201"},"nodeType":"YulExpressionStatement","src":"46448:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"46552:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"46555:4:201","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"46545:6:201"},"nodeType":"YulFunctionCall","src":"46545:15:201"},"nodeType":"YulExpressionStatement","src":"46545:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"46576:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"46579:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"46569:6:201"},"nodeType":"YulFunctionCall","src":"46569:15:201"},"nodeType":"YulExpressionStatement","src":"46569:15:201"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"46406:184:201"},{"body":{"nodeType":"YulBlock","src":"46642:148:201","statements":[{"body":{"nodeType":"YulBlock","src":"46733:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"46735:16:201"},"nodeType":"YulFunctionCall","src":"46735:18:201"},"nodeType":"YulExpressionStatement","src":"46735:18:201"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"46658:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"46665:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"46655:2:201"},"nodeType":"YulFunctionCall","src":"46655:77:201"},"nodeType":"YulIf","src":"46652:103:201"},{"nodeType":"YulAssignment","src":"46764:20:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"46775:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"46782:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"46771:3:201"},"nodeType":"YulFunctionCall","src":"46771:13:201"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"46764:3:201"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"46624:5:201","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"46634:3:201","type":""}],"src":"46595:195:201"},{"body":{"nodeType":"YulBlock","src":"47288:1027:201","statements":[{"nodeType":"YulAssignment","src":"47298:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47310:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"47321:3:201","type":"","value":"416"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47306:3:201"},"nodeType":"YulFunctionCall","src":"47306:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"47298:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47341:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"47352:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47334:6:201"},"nodeType":"YulFunctionCall","src":"47334:25:201"},"nodeType":"YulExpressionStatement","src":"47334:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47379:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"47390:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47375:3:201"},"nodeType":"YulFunctionCall","src":"47375:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"47395:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47368:6:201"},"nodeType":"YulFunctionCall","src":"47368:34:201"},"nodeType":"YulExpressionStatement","src":"47368:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47422:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"47433:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47418:3:201"},"nodeType":"YulFunctionCall","src":"47418:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"47438:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47411:6:201"},"nodeType":"YulFunctionCall","src":"47411:34:201"},"nodeType":"YulExpressionStatement","src":"47411:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47465:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"47476:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47461:3:201"},"nodeType":"YulFunctionCall","src":"47461:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"47481:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47454:6:201"},"nodeType":"YulFunctionCall","src":"47454:34:201"},"nodeType":"YulExpressionStatement","src":"47454:34:201"},{"nodeType":"YulVariableDeclaration","src":"47497:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"47507:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"47501:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47569:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"47580:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47565:3:201"},"nodeType":"YulFunctionCall","src":"47565:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47596:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47590:5:201"},"nodeType":"YulFunctionCall","src":"47590:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"47605:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"47586:3:201"},"nodeType":"YulFunctionCall","src":"47586:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47558:6:201"},"nodeType":"YulFunctionCall","src":"47558:51:201"},"nodeType":"YulExpressionStatement","src":"47558:51:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47629:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"47640:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47625:3:201"},"nodeType":"YulFunctionCall","src":"47625:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47660:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"47668:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47656:3:201"},"nodeType":"YulFunctionCall","src":"47656:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47650:5:201"},"nodeType":"YulFunctionCall","src":"47650:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"47674:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"47646:3:201"},"nodeType":"YulFunctionCall","src":"47646:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47618:6:201"},"nodeType":"YulFunctionCall","src":"47618:60:201"},"nodeType":"YulExpressionStatement","src":"47618:60:201"},{"nodeType":"YulVariableDeclaration","src":"47687:42:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47717:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"47725:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47713:3:201"},"nodeType":"YulFunctionCall","src":"47713:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47707:5:201"},"nodeType":"YulFunctionCall","src":"47707:22:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"47691:12:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"47757:12:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47775:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"47786:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47771:3:201"},"nodeType":"YulFunctionCall","src":"47771:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"47738:18:201"},"nodeType":"YulFunctionCall","src":"47738:53:201"},"nodeType":"YulExpressionStatement","src":"47738:53:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47811:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"47822:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47807:3:201"},"nodeType":"YulFunctionCall","src":"47807:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47838:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"47846:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47834:3:201"},"nodeType":"YulFunctionCall","src":"47834:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47828:5:201"},"nodeType":"YulFunctionCall","src":"47828:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47800:6:201"},"nodeType":"YulFunctionCall","src":"47800:51:201"},"nodeType":"YulExpressionStatement","src":"47800:51:201"},{"nodeType":"YulVariableDeclaration","src":"47860:33:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"47880:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"47888:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47876:3:201"},"nodeType":"YulFunctionCall","src":"47876:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47870:5:201"},"nodeType":"YulFunctionCall","src":"47870:23:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"47864:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"47902:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"47912:3:201","type":"","value":"256"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"47906:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47935:9:201"},{"name":"_3","nodeType":"YulIdentifier","src":"47946:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47931:3:201"},"nodeType":"YulFunctionCall","src":"47931:18:201"},{"name":"_2","nodeType":"YulIdentifier","src":"47951:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47924:6:201"},"nodeType":"YulFunctionCall","src":"47924:30:201"},"nodeType":"YulExpressionStatement","src":"47924:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"47974:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"47985:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47970:3:201"},"nodeType":"YulFunctionCall","src":"47970:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48001:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"48009:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"47997:3:201"},"nodeType":"YulFunctionCall","src":"47997:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"47991:5:201"},"nodeType":"YulFunctionCall","src":"47991:23:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"47963:6:201"},"nodeType":"YulFunctionCall","src":"47963:52:201"},"nodeType":"YulExpressionStatement","src":"47963:52:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48035:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"48046:3:201","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48031:3:201"},"nodeType":"YulFunctionCall","src":"48031:19:201"},{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48062:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"48070:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48058:3:201"},"nodeType":"YulFunctionCall","src":"48058:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"48052:5:201"},"nodeType":"YulFunctionCall","src":"48052:23:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48024:6:201"},"nodeType":"YulFunctionCall","src":"48024:52:201"},"nodeType":"YulExpressionStatement","src":"48024:52:201"},{"nodeType":"YulVariableDeclaration","src":"48085:45:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48117:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"48125:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48113:3:201"},"nodeType":"YulFunctionCall","src":"48113:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"48107:5:201"},"nodeType":"YulFunctionCall","src":"48107:23:201"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"48089:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"48158:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48178:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"48189:3:201","type":"","value":"352"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48174:3:201"},"nodeType":"YulFunctionCall","src":"48174:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"48139:18:201"},"nodeType":"YulFunctionCall","src":"48139:55:201"},"nodeType":"YulExpressionStatement","src":"48139:55:201"},{"nodeType":"YulVariableDeclaration","src":"48203:44:201","value":{"arguments":[{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"48235:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"48243:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48231:3:201"},"nodeType":"YulFunctionCall","src":"48231:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"48225:5:201"},"nodeType":"YulFunctionCall","src":"48225:22:201"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"48207:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"48273:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48293:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"48304:3:201","type":"","value":"384"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48289:3:201"},"nodeType":"YulFunctionCall","src":"48289:19:201"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"48256:16:201"},"nodeType":"YulFunctionCall","src":"48256:53:201"},"nodeType":"YulExpressionStatement","src":"48256:53:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$_t_struct$_FinalizeTransferParams_$21484_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FinalizeTransferParams_$21484_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"47225:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"47236:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"47244:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"47252:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"47260:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"47268:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"47279:4:201","type":""}],"src":"46795:1520:201"},{"body":{"nodeType":"YulBlock","src":"48568:299:201","statements":[{"nodeType":"YulAssignment","src":"48578:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48590:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"48601:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48586:3:201"},"nodeType":"YulFunctionCall","src":"48586:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"48578:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48621:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"48632:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48614:6:201"},"nodeType":"YulFunctionCall","src":"48614:25:201"},"nodeType":"YulExpressionStatement","src":"48614:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48659:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"48670:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48655:3:201"},"nodeType":"YulFunctionCall","src":"48655:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"48679:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"48687:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"48675:3:201"},"nodeType":"YulFunctionCall","src":"48675:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48648:6:201"},"nodeType":"YulFunctionCall","src":"48648:83:201"},"nodeType":"YulExpressionStatement","src":"48648:83:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48751:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"48762:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48747:3:201"},"nodeType":"YulFunctionCall","src":"48747:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"48767:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48740:6:201"},"nodeType":"YulFunctionCall","src":"48740:34:201"},"nodeType":"YulExpressionStatement","src":"48740:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48794:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"48805:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48790:3:201"},"nodeType":"YulFunctionCall","src":"48790:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"48810:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48783:6:201"},"nodeType":"YulFunctionCall","src":"48783:34:201"},"nodeType":"YulExpressionStatement","src":"48783:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"48837:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"48848:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"48833:3:201"},"nodeType":"YulFunctionCall","src":"48833:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"48854:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"48826:6:201"},"nodeType":"YulFunctionCall","src":"48826:35:201"},"nodeType":"YulExpressionStatement","src":"48826:35:201"}]},"name":"abi_encode_tuple_t_struct$_ReserveData_$21315_storage_t_address_t_uint256_t_uint256_t_uint256__to_t_uint256_t_address_t_uint256_t_uint256_t_uint256__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"48505:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"48516:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"48524:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"48532:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"48540:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"48548:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"48559:4:201","type":""}],"src":"48320:547:201"},{"body":{"nodeType":"YulBlock","src":"49061:168:201","statements":[{"nodeType":"YulAssignment","src":"49071:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49083:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"49094:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"49079:3:201"},"nodeType":"YulFunctionCall","src":"49079:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"49071:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49113:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"49124:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49106:6:201"},"nodeType":"YulFunctionCall","src":"49106:25:201"},"nodeType":"YulExpressionStatement","src":"49106:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"49151:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"49162:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"49147:3:201"},"nodeType":"YulFunctionCall","src":"49147:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"49171:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"49179:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"49167:3:201"},"nodeType":"YulFunctionCall","src":"49167:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49140:6:201"},"nodeType":"YulFunctionCall","src":"49140:83:201"},"nodeType":"YulExpressionStatement","src":"49140:83:201"}]},"name":"abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_address__to_t_uint256_t_address__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"49022:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"49033:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"49041:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"49052:4:201","type":""}],"src":"48872:357:201"},{"body":{"nodeType":"YulBlock","src":"49395:49:201","statements":[{"expression":{"arguments":[{"name":"slot","nodeType":"YulIdentifier","src":"49412:4:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"49431:5:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"49418:12:201"},"nodeType":"YulFunctionCall","src":"49418:19:201"}],"functionName":{"name":"sstore","nodeType":"YulIdentifier","src":"49405:6:201"},"nodeType":"YulFunctionCall","src":"49405:33:201"},"nodeType":"YulExpressionStatement","src":"49405:33:201"}]},"name":"update_storage_value_offset_0t_struct$_ReserveConfigurationMap_$21318_calldata_ptr_to_t_struct$_ReserveConfigurationMap_$21318_storage","nodeType":"YulFunctionDefinition","parameters":[{"name":"slot","nodeType":"YulTypedName","src":"49378:4:201","type":""},{"name":"value","nodeType":"YulTypedName","src":"49384:5:201","type":""}],"src":"49234:210:201"},{"body":{"nodeType":"YulBlock","src":"49501:176:201","statements":[{"body":{"nodeType":"YulBlock","src":"49620:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"49622:16:201"},"nodeType":"YulFunctionCall","src":"49622:18:201"},"nodeType":"YulExpressionStatement","src":"49622:18:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"49532:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"49525:6:201"},"nodeType":"YulFunctionCall","src":"49525:9:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"49518:6:201"},"nodeType":"YulFunctionCall","src":"49518:17:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"49540:1:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"49547:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"49615:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"49543:3:201"},"nodeType":"YulFunctionCall","src":"49543:74:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"49537:2:201"},"nodeType":"YulFunctionCall","src":"49537:81:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"49514:3:201"},"nodeType":"YulFunctionCall","src":"49514:105:201"},"nodeType":"YulIf","src":"49511:131:201"},{"nodeType":"YulAssignment","src":"49651:20:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"49666:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"49669:1:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"49662:3:201"},"nodeType":"YulFunctionCall","src":"49662:9:201"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"49651:7:201"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"49480:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"49483:1:201","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"49489:7:201","type":""}],"src":"49449:228:201"},{"body":{"nodeType":"YulBlock","src":"49714:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"49731:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"49734:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49724:6:201"},"nodeType":"YulFunctionCall","src":"49724:88:201"},"nodeType":"YulExpressionStatement","src":"49724:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"49828:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"49831:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"49821:6:201"},"nodeType":"YulFunctionCall","src":"49821:15:201"},"nodeType":"YulExpressionStatement","src":"49821:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"49852:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"49855:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"49845:6:201"},"nodeType":"YulFunctionCall","src":"49845:15:201"},"nodeType":"YulExpressionStatement","src":"49845:15:201"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"49682:184:201"},{"body":{"nodeType":"YulBlock","src":"49919:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"49946:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"49948:16:201"},"nodeType":"YulFunctionCall","src":"49948:18:201"},"nodeType":"YulExpressionStatement","src":"49948:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"49935:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"49942:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"49938:3:201"},"nodeType":"YulFunctionCall","src":"49938:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"49932:2:201"},"nodeType":"YulFunctionCall","src":"49932:13:201"},"nodeType":"YulIf","src":"49929:39:201"},{"nodeType":"YulAssignment","src":"49977:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"49988:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"49991:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"49984:3:201"},"nodeType":"YulFunctionCall","src":"49984:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"49977:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"49902:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"49905:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"49911:3:201","type":""}],"src":"49871:128:201"},{"body":{"nodeType":"YulBlock","src":"50050:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"50081:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"50102:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"50105:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"50095:6:201"},"nodeType":"YulFunctionCall","src":"50095:88:201"},"nodeType":"YulExpressionStatement","src":"50095:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"50203:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"50206:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"50196:6:201"},"nodeType":"YulFunctionCall","src":"50196:15:201"},"nodeType":"YulExpressionStatement","src":"50196:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"50231:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"50234:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"50224:6:201"},"nodeType":"YulFunctionCall","src":"50224:15:201"},"nodeType":"YulExpressionStatement","src":"50224:15:201"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"50070:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"50063:6:201"},"nodeType":"YulFunctionCall","src":"50063:9:201"},"nodeType":"YulIf","src":"50060:189:201"},{"nodeType":"YulAssignment","src":"50258:14:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"50267:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"50270:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"50263:3:201"},"nodeType":"YulFunctionCall","src":"50263:9:201"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"50258:1:201"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"50035:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"50038:1:201","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"50044:1:201","type":""}],"src":"50004:274:201"}]},"contents":"{\n    { }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_uint256t_bool(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n        value3 := calldataload(add(headStart, 96))\n        let value_3 := calldataload(add(headStart, 128))\n        validator_revert_bool(value_3)\n        value4 := value_3\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_uint16(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256t_addresst_uint16t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n        value3 := abi_decode_uint16(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n        value5 := abi_decode_uint8(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n        value7 := calldataload(add(headStart, 224))\n    }\n    function abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_uint128(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_uint128__to_t_uint128__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_uint8(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint8(headStart)\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_struct_ReserveConfigurationMap(value, pos)\n    { mstore(pos, mload(value)) }\n    function abi_encode_uint40(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffff))\n    }\n    function abi_encode_uint16(value, pos)\n    {\n        mstore(pos, and(value, 0xffff))\n    }\n    function abi_encode_address(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$21315_memory_ptr__to_t_struct$_ReserveData_$21315_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 480)\n        abi_encode_struct_ReserveConfigurationMap(mload(value0), headStart)\n        let memberValue0 := mload(add(value0, 0x20))\n        abi_encode_uint128(memberValue0, add(headStart, 0x20))\n        let memberValue0_1 := mload(add(value0, 0x40))\n        abi_encode_uint128(memberValue0_1, add(headStart, 0x40))\n        let memberValue0_2 := mload(add(value0, 0x60))\n        abi_encode_uint128(memberValue0_2, add(headStart, 0x60))\n        let memberValue0_3 := mload(add(value0, 0x80))\n        abi_encode_uint128(memberValue0_3, add(headStart, 0x80))\n        let memberValue0_4 := mload(add(value0, 0xa0))\n        abi_encode_uint128(memberValue0_4, add(headStart, 0xa0))\n        let memberValue0_5 := mload(add(value0, 0xc0))\n        abi_encode_uint40(memberValue0_5, add(headStart, 0xc0))\n        let memberValue0_6 := mload(add(value0, 0xe0))\n        abi_encode_uint16(memberValue0_6, add(headStart, 0xe0))\n        let _1 := 0x0100\n        let memberValue0_7 := mload(add(value0, _1))\n        abi_encode_address(memberValue0_7, add(headStart, _1))\n        let _2 := 0x0120\n        let memberValue0_8 := mload(add(value0, _2))\n        abi_encode_address(memberValue0_8, add(headStart, _2))\n        let _3 := 0x0140\n        let memberValue0_9 := mload(add(value0, _3))\n        abi_encode_address(memberValue0_9, add(headStart, _3))\n        let _4 := 0x0160\n        let memberValue0_10 := mload(add(value0, _4))\n        abi_encode_address(memberValue0_10, add(headStart, _4))\n        let _5 := 0x0180\n        let memberValue0_11 := mload(add(value0, _5))\n        abi_encode_uint128(memberValue0_11, add(headStart, _5))\n        let _6 := 0x01a0\n        let memberValue0_12 := mload(add(value0, _6))\n        abi_encode_uint128(memberValue0_12, add(headStart, _6))\n        let _7 := 0x01c0\n        let memberValue0_13 := mload(add(value0, _7))\n        abi_encode_uint128(memberValue0_13, add(headStart, _7))\n    }\n    function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_calldata_ptrt_uint16(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        let offset := calldataload(add(headStart, 96))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value3_1, value4_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n        value3 := value3_1\n        value4 := value4_1\n        value5 := abi_decode_uint16(add(headStart, 128))\n    }\n    function abi_encode_tuple_t_struct$_UserConfigurationMap_$21322_memory_ptr__to_t_struct$_UserConfigurationMap_$21322_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, mload(value0))\n    }\n    function abi_decode_tuple_t_uint16(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint16(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_address(value_1)\n        value3 := value_1\n    }\n    function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_bool(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_addresst_uint256t_addresst_uint16(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n        value3 := abi_decode_uint16(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n    }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_struct$_EModeCategory_$21333_memory_ptr__to_t_struct$_EModeCategory_$21333_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let _1 := 0xffff\n        mstore(add(headStart, 32), and(mload(value0), _1))\n        mstore(add(headStart, 64), and(mload(add(value0, 32)), _1))\n        mstore(add(headStart, 96), and(mload(add(value0, 64)), _1))\n        mstore(add(headStart, 128), and(mload(add(value0, 96)), 0xffffffffffffffffffffffffffffffffffffffff))\n        let memberValue0 := mload(add(value0, 128))\n        mstore(add(headStart, 0xa0), 0xa0)\n        tail := abi_encode_string(memberValue0, add(headStart, 192))\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_addresst_address(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n        let value_3 := calldataload(add(headStart, 96))\n        validator_revert_address(value_3)\n        value3 := value_3\n        let value_4 := calldataload(add(headStart, 128))\n        validator_revert_address(value_4)\n        value4 := value_4\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_array_address_dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_uint16t_address(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := abi_decode_uint16(add(headStart, 96))\n        let value_1 := calldataload(add(headStart, 128))\n        validator_revert_address(value_1)\n        value4 := value_1\n    }\n    function abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptrt_addresst_bytes_calldata_ptrt_uint16(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(calldataload(add(headStart, 32)), _1) { revert(0, 0) }\n        let value1_1, value2_1 := abi_decode_array_address_dyn_calldata(add(headStart, calldataload(add(headStart, 32))), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n        if gt(calldataload(add(headStart, 64)), _1) { revert(0, 0) }\n        let value3_1, value4_1 := abi_decode_array_address_dyn_calldata(add(headStart, calldataload(add(headStart, 64))), dataEnd)\n        value3 := value3_1\n        value4 := value4_1\n        if gt(calldataload(add(headStart, 96)), _1) { revert(0, 0) }\n        let value5_1, value6_1 := abi_decode_array_address_dyn_calldata(add(headStart, calldataload(add(headStart, 96))), dataEnd)\n        value5 := value5_1\n        value6 := value6_1\n        value7 := abi_decode_address(add(headStart, 128))\n        if gt(calldataload(add(headStart, 160)), _1) { revert(0, 0) }\n        let value8_1, value9_1 := abi_decode_bytes_calldata(add(headStart, calldataload(add(headStart, 160))), dataEnd)\n        value8 := value8_1\n        value9 := value9_1\n        value10 := abi_decode_uint16(add(headStart, 192))\n    }\n    function abi_decode_uint128(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint128t_uint128(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_uint128(headStart)\n        value1 := abi_decode_uint128(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_t_struct$_ReserveConfigurationMap_$21318_memory_ptr__to_t_struct$_ReserveConfigurationMap_$21318_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, mload(value0))\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_5591() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xa0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_tuple_t_uint8t_struct$_EModeCategory_$21333_memory_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_uint8(headStart)\n        let _1 := 32\n        let offset := calldataload(add(headStart, _1))\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if slt(sub(dataEnd, _3), 0xa0) { revert(0, 0) }\n        let value := allocate_memory_5591()\n        mstore(value, abi_decode_uint16(_3))\n        mstore(add(value, _1), abi_decode_uint16(add(_3, _1)))\n        mstore(add(value, 64), abi_decode_uint16(add(_3, 64)))\n        let value_1 := calldataload(add(_3, 96))\n        validator_revert_address(value_1)\n        mstore(add(value, 96), value_1)\n        let offset_1 := calldataload(add(_3, 128))\n        if gt(offset_1, _2) { revert(0, 0) }\n        let _4 := add(_3, offset_1)\n        if iszero(slt(add(_4, 0x1f), dataEnd)) { revert(0, 0) }\n        let _5 := calldataload(_4)\n        if gt(_5, _2) { panic_error_0x41() }\n        let array := allocate_memory(add(and(add(_5, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), _1))\n        mstore(array, _5)\n        if gt(add(add(_4, _5), _1), dataEnd) { revert(0, 0) }\n        calldatacopy(add(array, _1), add(_4, _1), _5)\n        mstore(add(add(array, _5), _1), 0)\n        mstore(add(value, 128), array)\n        value1 := value\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_address(value_1)\n        value3 := value_1\n        value4 := calldataload(add(headStart, 128))\n        value5 := abi_decode_uint8(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n        value7 := calldataload(add(headStart, 224))\n    }\n    function abi_decode_tuple_t_addresst_struct$_ReserveConfigurationMap_$21318_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), 32) { revert(0, 0) }\n        value1 := add(headStart, 32)\n    }\n    function abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffff))\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_bool(value, pos)\n    {\n        mstore(pos, iszero(iszero(value)))\n    }\n    function abi_encode_uint8(value, pos)\n    { mstore(pos, and(value, 0xff)) }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteLiquidationCallParams_$21398_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 416)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), mload(value4))\n        mstore(add(headStart, 160), mload(add(value4, 32)))\n        let memberValue0 := mload(add(value4, 64))\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 192), and(memberValue0, _1))\n        mstore(add(headStart, 224), and(mload(add(value4, 96)), _1))\n        let memberValue0_1 := mload(add(value4, 128))\n        let _2 := 256\n        abi_encode_address(memberValue0_1, add(headStart, _2))\n        let memberValue0_2 := mload(add(value4, 160))\n        abi_encode_bool(memberValue0_2, add(headStart, 288))\n        let memberValue0_3 := mload(add(value4, 192))\n        abi_encode_address(memberValue0_3, add(headStart, 320))\n        let memberValue0_4 := mload(add(value4, 224))\n        abi_encode_uint8(memberValue0_4, add(headStart, 352))\n        let memberValue0_5 := mload(add(value4, _2))\n        abi_encode_address(memberValue0_5, add(headStart, 384))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xff))\n        mstore(add(headStart, 160), value5)\n        mstore(add(headStart, 192), value6)\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteSupplyParams_$21407_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSupplyParams_$21407_memory_ptr__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 96), and(mload(value3), _1))\n        mstore(add(headStart, 128), mload(add(value3, 32)))\n        mstore(add(headStart, 160), and(mload(add(value3, 64)), _1))\n        mstore(add(headStart, 192), and(mload(add(value3, 96)), 0xffff))\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_mapping$_t_address_$_t_uint8_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteSetUserEModeParams_$21465_memory_ptr__fromStack_library_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 256)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), mload(value5))\n        mstore(add(headStart, 192), and(mload(add(value5, 32)), 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 224), and(mload(add(value5, 64)), 0xff))\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_enum_InterestRateMode(value, pos)\n    {\n        if iszero(lt(value, 3))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x21)\n            revert(0, 0x24)\n        }\n        mstore(pos, value)\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteRepayParams_$21445_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteRepayParams_$21445_memory_ptr__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 256)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 96), and(mload(value3), _1))\n        mstore(add(headStart, 128), mload(add(value3, 32)))\n        let memberValue0 := mload(add(value3, 64))\n        abi_encode_enum_InterestRateMode(memberValue0, add(headStart, 160))\n        mstore(add(headStart, 192), and(mload(add(value3, 96)), _1))\n        mstore(add(headStart, 224), iszero(iszero(mload(add(value3, 128)))))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$21315_storage_t_struct$_FlashloanSimpleParams_$21531_memory_ptr__to_t_uint256_t_struct$_FlashloanSimpleParams_$21531_memory_ptr__fromStack_library_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), 64)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 64), and(mload(value1), _1))\n        mstore(add(headStart, 96), and(mload(add(value1, 32)), _1))\n        mstore(add(headStart, 128), mload(add(value1, 64)))\n        let memberValue0 := mload(add(value1, 96))\n        mstore(add(headStart, 160), 0xe0)\n        let tail_1 := abi_encode_string(memberValue0, add(headStart, 288))\n        mstore(add(headStart, 192), and(mload(add(value1, 128)), 0xffff))\n        mstore(add(headStart, 0xe0), mload(add(value1, 160)))\n        mstore(add(headStart, 256), mload(add(value1, 192)))\n        tail := tail_1\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_t_address_t_bool_t_uint16_t_address_t_uint8__to_t_uint256_t_uint256_t_uint256_t_uint256_t_address_t_bool_t_uint256_t_address_t_uint8__fromStack_library_reversed(headStart, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 288)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 128), and(value4, _1))\n        mstore(add(headStart, 160), iszero(iszero(value5)))\n        mstore(add(headStart, 192), and(value6, 0xffff))\n        mstore(add(headStart, 224), and(value7, _1))\n        mstore(add(headStart, 256), and(value8, 0xff))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_address__to_t_uint256_t_uint256_t_address__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteWithdrawParams_$21458_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteWithdrawParams_$21458_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 320)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 128), and(mload(value4), _1))\n        mstore(add(headStart, 160), mload(add(value4, 32)))\n        mstore(add(headStart, 192), and(mload(add(value4, 64)), _1))\n        mstore(add(headStart, 224), mload(add(value4, 96)))\n        mstore(add(headStart, 256), and(mload(add(value4, 128)), _1))\n        mstore(add(headStart, 288), and(mload(add(value4, 160)), 0xff))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_t_address_t_uint256_t_address_t_uint16__to_t_uint256_t_uint256_t_uint256_t_address_t_uint256_t_address_t_uint16__fromStack_library_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 96), and(value3, _1))\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), and(value5, _1))\n        mstore(add(headStart, 192), and(value6, 0xffff))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_struct$_InitReserveParams_$21632_memory_ptr__to_t_uint256_t_uint256_t_struct$_InitReserveParams_$21632_memory_ptr__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 288)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 64), and(mload(value2), _1))\n        mstore(add(headStart, 96), and(mload(add(value2, 32)), _1))\n        mstore(add(headStart, 128), and(mload(add(value2, 64)), _1))\n        mstore(add(headStart, 160), and(mload(add(value2, 96)), _1))\n        mstore(add(headStart, 192), and(mload(add(value2, 128)), _1))\n        let memberValue0 := mload(add(value2, 160))\n        abi_encode_uint16(memberValue0, add(headStart, 224))\n        let memberValue0_1 := mload(add(value2, 192))\n        abi_encode_uint16(memberValue0_1, add(headStart, 256))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function increment_t_uint16(value) -> ret\n    {\n        let _1 := 0xffff\n        let value_1 := and(value, _1)\n        if eq(value_1, _1) { panic_error_0x11() }\n        ret := add(value_1, 1)\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$21315_storage_t_struct$_UserConfigurationMap_$21322_storage_t_address_t_enum$_InterestRateMode_$21337__to_t_uint256_t_uint256_t_address_t_uint8__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffffffffffff))\n        abi_encode_enum_InterestRateMode(value3, add(headStart, 96))\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_array$_t_address_$dyn_calldata_ptr__to_t_uint256_t_array$_t_address_$dyn_memory_ptr__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 64)\n        mstore(headStart, value0)\n        let _1 := 32\n        mstore(add(headStart, _1), 64)\n        let pos := tail_1\n        mstore(tail_1, value2)\n        pos := add(headStart, 96)\n        let srcPtr := value1\n        let i := 0\n        for { } lt(i, value2) { i := add(i, 1) }\n        {\n            let value := calldataload(srcPtr)\n            validator_revert_address(value)\n            mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_ExecuteBorrowParams_$21433_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_ExecuteBorrowParams_$21433_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 512)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        abi_encode_address(mload(value4), add(headStart, 128))\n        let memberValue0 := mload(add(value4, 32))\n        abi_encode_address(memberValue0, add(headStart, 160))\n        let memberValue0_1 := mload(add(value4, 64))\n        abi_encode_address(memberValue0_1, add(headStart, 192))\n        mstore(add(headStart, 224), mload(add(value4, 96)))\n        let memberValue0_2 := mload(add(value4, 128))\n        let _1 := 256\n        abi_encode_enum_InterestRateMode(memberValue0_2, add(headStart, _1))\n        let memberValue0_3 := mload(add(value4, 160))\n        let _2 := 288\n        abi_encode_uint16(memberValue0_3, add(headStart, _2))\n        let memberValue0_4 := mload(add(value4, 192))\n        let _3 := 320\n        abi_encode_bool(memberValue0_4, add(headStart, _3))\n        let _4 := mload(add(value4, 224))\n        let _5 := 352\n        mstore(add(headStart, _5), _4)\n        mstore(add(headStart, 384), mload(add(value4, _1)))\n        let memberValue0_5 := mload(add(value4, _2))\n        abi_encode_address(memberValue0_5, add(headStart, 416))\n        let memberValue0_6 := mload(add(value4, _3))\n        abi_encode_uint8(memberValue0_6, add(headStart, 448))\n        let memberValue0_7 := mload(add(value4, _5))\n        abi_encode_address(memberValue0_7, add(headStart, 480))\n    }\n    function abi_encode_array_address_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_array_uint256_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_UserConfigurationMap_$21322_storage_t_struct$_FlashloanParams_$21516_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FlashloanParams_$21516_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), 160)\n        abi_encode_address(mload(value4), add(headStart, 160))\n        let memberValue0 := mload(add(value4, 32))\n        let _1 := 0x01c0\n        mstore(add(headStart, 192), _1)\n        let tail_1 := abi_encode_array_address_dyn(memberValue0, add(headStart, 608))\n        let memberValue0_1 := mload(add(value4, 64))\n        let _2 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60\n        mstore(add(headStart, 224), add(sub(tail_1, headStart), _2))\n        let tail_2 := abi_encode_array_uint256_dyn(memberValue0_1, tail_1)\n        let memberValue0_2 := mload(add(value4, 96))\n        let _3 := 256\n        mstore(add(headStart, _3), add(sub(tail_2, headStart), _2))\n        let tail_3 := abi_encode_array_uint256_dyn(memberValue0_2, tail_2)\n        let memberValue0_3 := mload(add(value4, 128))\n        let _4 := 288\n        abi_encode_address(memberValue0_3, add(headStart, _4))\n        let memberValue0_4 := mload(add(value4, 160))\n        let _5 := 320\n        mstore(add(headStart, _5), add(sub(tail_3, headStart), _2))\n        let tail_4 := abi_encode_string(memberValue0_4, tail_3)\n        let memberValue0_5 := mload(add(value4, 192))\n        let _6 := 352\n        abi_encode_uint16(memberValue0_5, add(headStart, _6))\n        let _7 := mload(add(value4, 224))\n        let _8 := 384\n        mstore(add(headStart, _8), _7)\n        let _9 := mload(add(value4, _3))\n        let _10 := 416\n        mstore(add(headStart, _10), _9)\n        mstore(add(headStart, _1), mload(add(value4, _4)))\n        mstore(add(headStart, 480), mload(add(value4, _5)))\n        let memberValue0_6 := mload(add(value4, _6))\n        abi_encode_address(memberValue0_6, add(headStart, 512))\n        let memberValue0_7 := mload(add(value4, _8))\n        abi_encode_uint8(memberValue0_7, add(headStart, 544))\n        let memberValue0_8 := mload(add(value4, _10))\n        abi_encode_bool(memberValue0_8, add(headStart, 576))\n        tail := tail_4\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_struct$_CalculateUserAccountDataParams_$21556_memory_ptr__fromStack_library_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 256)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), mload(mload(value3)))\n        mstore(add(headStart, 128), mload(add(value3, 32)))\n        let memberValue0 := mload(add(value3, 64))\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 160), and(memberValue0, _1))\n        mstore(add(headStart, 192), and(mload(add(value3, 96)), _1))\n        mstore(add(headStart, 224), and(mload(add(value3, 128)), 0xff))\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        value3 := mload(add(headStart, 96))\n        value4 := mload(add(headStart, 128))\n        value5 := mload(add(headStart, 160))\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$21315_storage_t_address_t_address__to_t_uint256_t_address_t_address__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_library_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_mapping$_t_uint256_$_t_address_$_t_mapping$_t_uint8_$_t_struct$_EModeCategory_$21333_storage_$_t_mapping$_t_address_$_t_struct$_UserConfigurationMap_$21322_storage_$_t_struct$_FinalizeTransferParams_$21484_memory_ptr__to_t_uint256_t_uint256_t_uint256_t_uint256_t_struct$_FinalizeTransferParams_$21484_memory_ptr__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 416)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 128), and(mload(value4), _1))\n        mstore(add(headStart, 160), and(mload(add(value4, 32)), _1))\n        let memberValue0 := mload(add(value4, 64))\n        abi_encode_address(memberValue0, add(headStart, 192))\n        mstore(add(headStart, 224), mload(add(value4, 96)))\n        let _2 := mload(add(value4, 128))\n        let _3 := 256\n        mstore(add(headStart, _3), _2)\n        mstore(add(headStart, 288), mload(add(value4, 160)))\n        mstore(add(headStart, 320), mload(add(value4, 192)))\n        let memberValue0_1 := mload(add(value4, 224))\n        abi_encode_address(memberValue0_1, add(headStart, 352))\n        let memberValue0_2 := mload(add(value4, _3))\n        abi_encode_uint8(memberValue0_2, add(headStart, 384))\n    }\n    function abi_encode_tuple_t_struct$_ReserveData_$21315_storage_t_address_t_uint256_t_uint256_t_uint256__to_t_uint256_t_address_t_uint256_t_uint256_t_uint256__fromStack_library_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_t_mapping$_t_address_$_t_struct$_ReserveData_$21315_storage_$_t_address__to_t_uint256_t_address__fromStack_library_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function update_storage_value_offset_0t_struct$_ReserveConfigurationMap_$21318_calldata_ptr_to_t_struct$_ReserveConfigurationMap_$21318_storage(slot, value)\n    {\n        sstore(slot, calldataload(value))\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"22244":[{"length":32,"start":854},{"length":32,"start":2521},{"length":32,"start":2737},{"length":32,"start":3903},{"length":32,"start":5266},{"length":32,"start":6096},{"length":32,"start":7697},{"length":32,"start":7893},{"length":32,"start":8436},{"length":32,"start":9160},{"length":32,"start":9754},{"length":32,"start":11227},{"length":32,"start":12604},{"length":32,"start":13001},{"length":32,"start":13372}]},"linkReferences":{"@aave/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol":{"BorrowLogic":[{"length":20,"start":4211},{"length":20,"start":4887},{"length":20,"start":7247},{"length":20,"start":7410},{"length":20,"start":10102},{"length":20,"start":12075}]},"@aave/core-v3/contracts/protocol/libraries/logic/BridgeLogic.sol":{"BridgeLogic":[{"length":20,"start":6541},{"length":20,"start":11626}]},"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol":{"EModeLogic":[{"length":20,"start":3795}]},"@aave/core-v3/contracts/protocol/libraries/logic/FlashLoanLogic.sol":{"FlashLoanLogic":[{"length":20,"start":4786},{"length":20,"start":8822}]},"@aave/core-v3/contracts/protocol/libraries/logic/LiquidationLogic.sol":{"LiquidationLogic":[{"length":20,"start":2390}]},"@aave/core-v3/contracts/protocol/libraries/logic/PoolLogic.sol":{"PoolLogic":[{"length":20,"start":5916},{"length":20,"start":6886},{"length":20,"start":7363},{"length":20,"start":9118},{"length":20,"start":10214},{"length":20,"start":11730}]},"@aave/core-v3/contracts/protocol/libraries/logic/SupplyLogic.sol":{"SupplyLogic":[{"length":20,"start":3264},{"length":20,"start":5178},{"length":20,"start":5755},{"length":20,"start":5954},{"length":20,"start":11092}]}},"object":"608060405234801561001057600080fd5b50600436106103095760003560e01c80637a708e921161019c578063d15e0053116100ee578063e82fec2f11610097578063ee3e210b11610071578063ee3e210b1461091f578063f51e435b14610932578063f8119d511461094557600080fd5b8063e82fec2f146108e1578063e8eda9df146106a6578063eddf1b79146108f357600080fd5b8063d5ed3933116100c8578063d5ed3933146108a8578063d65dc7a1146108bb578063e43e88a1146108ce57600080fd5b8063d15e00531461086d578063d1946dbc14610880578063d579ea7d1461089557600080fd5b8063bcb6e52211610150578063c4d66de81161012a578063c4d66de814610834578063cd11238214610847578063cea9d26f1461085a57600080fd5b8063bcb6e5221461079f578063bf92857c146107b2578063c44b11f7146107f257600080fd5b80639cd19996116101815780639cd1999614610766578063a415bcad14610779578063ab9c4b5d1461078c57600080fd5b80637a708e921461074057806394ba89a21461075357600080fd5b8063386497fd11610260578063617ba0371161020957806369a933a5116101e357806369a933a5146106df5780636a99c036146106f25780636c6f6ae11461072057600080fd5b8063617ba037146106a657806363c9b860146106b957806369328dec146106cc57600080fd5b8063527517971161023a5780635275179714610653578063573ade81146106805780635a3b74b91461069357600080fd5b8063386497fd146105dc57806342b0b77c146105ef5780634417a5831461060257600080fd5b80631d2118f9116102c25780632dad97d41161029c5780632dad97d4146103f55780633036b4391461040857806335ea6a751461041b57600080fd5b80631d2118f9146103c7578063272d9072146103da57806328530a47146103e257600080fd5b806302c205f0116102f357806302c205f01461033e5780630542975c14610351578063074b2e431461039057600080fd5b8062a718a91461030e5780630148170e14610323575b600080fd5b61032161031c3660046138ed565b610954565b005b61032b600181565b6040519081526020015b60405180910390f35b61032161034c366004613978565b610b81565b6103787f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610335565b603a546fffffffffffffffffffffffffffffffff165b6040516fffffffffffffffffffffffffffffffff9091168152602001610335565b6103216103d53660046139f7565b610d17565b60395461032b565b6103216103f0366004613a30565b610ed1565b61032b610403366004613a4b565b61106f565b610321610416366004613a80565b61118c565b6105cf610429366004613a99565b604080516102008101825260006101e08201818152825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c0810191909152506001600160a01b0390811660009081526034602090815260409182902082516102008101845281546101e08201908152815260018201546fffffffffffffffffffffffffffffffff80821694830194909452700100000000000000000000000000000000908190048416948201949094526002820154808416606083015284900483166080820152600382015480841660a083015284810464ffffffffff1660c08301527501000000000000000000000000000000000000000000900461ffff1660e0820152600482015485166101008201526005820154851661012082015260068201548516610140820152600782015490941661016085015260088101548083166101808601529290920481166101a0840152600990910154166101c082015290565b6040516103359190613ab6565b61032b6105ea366004613a99565b611199565b6103216105fd366004613c6f565b6111c0565b610644610610366004613a99565b60408051602080820183526000918290526001600160a01b0393909316815260358352819020815192830190915254815290565b60405190518152602001610335565b610378610661366004613cf1565b61ffff166000908152603660205260409020546001600160a01b031690565b61032b61068e366004613d0c565b611313565b6103216106a1366004613d56565b611438565b6103216106b4366004613d84565b6115d9565b6103216106c7366004613a99565b6116cf565b61032b6106da366004613dd5565b61173e565b6103216106ed366004613d84565b61190f565b603a5470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff166103a6565b61073361072e366004613a30565b6119af565b6040516103359190613e82565b61032161074e366004613ed8565b611adc565b610321610761366004613f3b565b611c27565b610321610774366004613fac565b611c9b565b610321610787366004613fee565b611cf0565b61032161079a36600461402d565b611f6e565b6103216107ad366004614147565b6122e6565b6107c56107c0366004613a99565b61231d565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610335565b610644610800366004613a99565b60408051602080820183526000918290526001600160a01b0393909316815260348352819020815192830190915254815290565b610321610842366004613a99565b612532565b6103216108553660046139f7565b61271c565b61032161086836600461417a565b612798565b61032b61087b366004613a99565b612838565b610888612859565b60405161033591906141bb565b6103216108a33660046142af565b612961565b6103216108b63660046143e7565b612ac0565b61032b6108c9366004613a4b565b612cf9565b6103216108dc366004613a99565b612d8c565b603b5467ffffffffffffffff1661032b565b61032b610901366004613a99565b6001600160a01b031660009081526038602052604090205460ff1690565b61032b61092d36600461444c565b612df4565b610321610940366004614492565b612fa8565b60405160808152602001610335565b73__$4ae75c1292a38b6fb7c763c6480b4a24e8$__6383c1087d6034603660356037604051806101200160405280603b60089054906101000a900461ffff1661ffff1681526020018981526020018c6001600160a01b031681526020018b6001600160a01b031681526020018a6001600160a01b0316815260200188151581526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5991906144f1565b6001600160a01b0390811682528b81166000908152603860209081526040918290205460ff168185015281517f5eb88d3d000000000000000000000000000000000000000000000000000000008152825192909401937f000000000000000000000000000000000000000000000000000000000000000090931692635eb88d3d92600480830193928290030181865afa158015610afa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1e91906144f1565b6001600160a01b03168152506040518663ffffffff1660e01b8152600401610b4a95949392919061450e565b60006040518083038186803b158015610b6257600080fd5b505af4158015610b76573d6000803e3d6000fd5b505050505050505050565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c481018290526001600160a01b0389169063d505accf9060e401600060405180830381600087803b158015610c0657600080fd5b505af1158015610c1a573d6000803e3d6000fd5b505050506001600160a01b0386811660008181526035602090815260409182902082516080810184528d861681529182018c815282840194855261ffff8b81166060850190815294517f1913f16100000000000000000000000000000000000000000000000000000000815260346004820152603660248201526044810193909352925186166064830152516084820152925190931660a48301525190911660c482015273__$e9229d51100a3938db7663133e6dc5ffcb$__90631913f1619060e40160006040518083038186803b158015610cf557600080fd5b505af4158015610d09573d6000803e3d6000fd5b505050505050505050505050565b610d1f613130565b60408051808201909152600281527f373700000000000000000000000000000000000000000000000000000000000060208201526001600160a01b038316610d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9491906145c8565b60405180910390fd5b506001600160a01b0382166000908152603460205260409020600301547501000000000000000000000000000000000000000000900461ffff16151580610e1957506000805260366020527f4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e00546001600160a01b038381169116145b6040518060400160405280600281526020017f383200000000000000000000000000000000000000000000000000000000000081525090610e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9491906145c8565b506001600160a01b03918216600090815260346020526040902060070180547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73__$5a3f4c3d06a1537986751467788655cb94$__635d5dc313603460366037603860356000336001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405280603b60089054906101000a900461ffff1661ffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbf91906144f1565b6001600160a01b031681526020018960ff168152506040518763ffffffff1660e01b815260040161103c9695949392919095865260208087019590955260408087019490945260608601929092526080850152805160a0850152918201516001600160a01b031660c0840152015160ff1660e08201526101000190565b60006040518083038186803b15801561105457600080fd5b505af4158015611068573d6000803e3d6000fd5b5050505050565b600073__$f250b95a8491f1e84f401ed6d1693cd837$__6340e95de66034603660356000336001600160a01b03166001600160a01b031681526020019081526020016000206040518060a001604052808a6001600160a01b031681526020018981526020018860028111156110e6576110e66145db565b60028111156110f7576110f76145db565b81523360208201526001604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526111419493929190600401614645565b602060405180830381865af415801561115e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118291906146ab565b90505b9392505050565b611194613130565b603955565b6001600160a01b03811660009081526034602052604081206111ba90613237565b92915050565b60006040518060e00160405280886001600160a01b03168152602001876001600160a01b0316815260200186815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505061ffff8516602080840191909152603a546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008204811660408087019190915291166060909401939093526001600160a01b038a1682526034905281902090517fa1fe0e8d00000000000000000000000000000000000000000000000000000000815291925073__$3cafd0a079d9bba6279cd462d6f4920444$__9163a1fe0e8d916112da9185906004016146c4565b60006040518083038186803b1580156112f257600080fd5b505af4158015611306573d6000803e3d6000fd5b5050505050505050505050565b600073__$f250b95a8491f1e84f401ed6d1693cd837$__6340e95de66034603660356000876001600160a01b03166001600160a01b031681526020019081526020016000206040518060a001604052808b6001600160a01b031681526020018a815260200189600281111561138a5761138a6145db565b600281111561139b5761139b6145db565b81526001600160a01b03891660208201526000604091820152517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526113ee9493929190600401614645565b602060405180830381865af415801561140b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142f91906146ab565b95945050505050565b73__$e9229d51100a3938db7663133e6dc5ffcb$__63bf697a2660346036603760356000336001600160a01b03166001600160a01b031681526020019081526020016000208787603b60089054906101000a900461ffff167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151291906144f1565b336000908152603860205260409081902054905160e08b901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260048101999099526024890197909752604488019590955260648701939093526001600160a01b039182166084870152151560a486015261ffff90911660c48501521660e483015260ff16610104820152610124015b60006040518083038186803b1580156115bd57600080fd5b505af41580156115d1573d6000803e3d6000fd5b505050505050565b6001600160a01b038281166000818152603560209081526040918290208251608081018452898616815291820188815282840194855261ffff8781166060850190815294517f1913f16100000000000000000000000000000000000000000000000000000000815260346004820152603660248201526044810193909352925186166064830152516084820152925190931660a48301525190911660c482015273__$e9229d51100a3938db7663133e6dc5ffcb$__90631913f1619060e4015b60006040518083038186803b1580156116b157600080fd5b505af41580156116c5573d6000803e3d6000fd5b5050505050505050565b6116d7613130565b6040517f9cf5702300000000000000000000000000000000000000000000000000000000815260346004820152603660248201526001600160a01b038216604482015273__$370dc613f77da7345d5cfe489611ba2a28$__90639cf570239060640161103c565b600073__$e9229d51100a3938db7663133e6dc5ffcb$__63186dea4460346036603760356000336001600160a01b03166001600160a01b031681526020019081526020016000206040518060c001604052808b6001600160a01b031681526020018a8152602001896001600160a01b03168152602001603b60089054906101000a900461ffff1661ffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561182c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185091906144f1565b6001600160a01b039081168252336000908152603860209081526040918290205460ff90811694820194909452815160e08b901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260048101999099526024890197909752604488019590955260648701939093528151831660848701529381015160a486015291820151811660c4850152606082015160e485015260808201511661010484015260a001511661012482015261014401611141565b6119176132c7565b6001600160a01b038281166000818152603560205260409081902090517f0413c86f0000000000000000000000000000000000000000000000000000000081526034600482015260366024820152604481019190915291861660648301526084820185905260a482015261ffff821660c482015273__$d21c6b38ea0f6668c62b5e103f4ea47254$__90630413c86f9060e401611699565b6040805160a081018252600080825260208201819052918101829052606080820192909252608081019190915260ff8216600090815260376020908152604091829020825160a081018452815461ffff808216835262010000820481169483019490945264010000000081049093169381019390935266010000000000009091046001600160a01b03166060830152600181018054608084019190611a5390614742565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7f90614742565b8015611acc5780601f10611aa157610100808354040283529160200191611acc565b820191906000526020600020905b815481529060010190602001808311611aaf57829003601f168201915b5050505050815250509050919050565b611ae4613130565b73__$370dc613f77da7345d5cfe489611ba2a28$__6369fc1bdf603460366040518060e001604052808a6001600160a01b03168152602001896001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b03168152602001603b60089054906101000a900461ffff1661ffff168152602001611b7a608090565b61ffff168152506040518463ffffffff1660e01b8152600401611b9f93929190614790565b602060405180830381865af4158015611bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be09190614813565b1561106857603b805468010000000000000000900461ffff16906008611c058361485f565b91906101000a81548161ffff021916908361ffff160217905550505050505050565b6001600160a01b0382166000908152603460209081526040808320338452603590925290912073__$f250b95a8491f1e84f401ed6d1693cd837$__9163eac4d7039185856002811115611c7c57611c7c6145db565b6040518563ffffffff1660e01b81526004016115a59493929190614881565b6040517f48c2ca8c00000000000000000000000000000000000000000000000000000000815273__$370dc613f77da7345d5cfe489611ba2a28$__906348c2ca8c906115a590603490869086906004016148ab565b73__$f250b95a8491f1e84f401ed6d1693cd837$__631e6473f960346036603760356000876001600160a01b03166001600160a01b031681526020019081526020016000206040518061018001604052808c6001600160a01b03168152602001336001600160a01b03168152602001886001600160a01b031681526020018b81526020018a6002811115611d8657611d866145db565b6002811115611d9757611d976145db565b815261ffff808b166020808401919091526001604080850191909152603b5467ffffffffffffffff81166060860152680100000000000000009004909216608084015281517ffca513a8000000000000000000000000000000000000000000000000000000008152915160a0909301926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263fca513a89260048083019391928290030181865afa158015611e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7d91906144f1565b6001600160a01b0390811682528981166000908152603860209081526040918290205460ff168185015281517f5eb88d3d000000000000000000000000000000000000000000000000000000008152825192909401937f000000000000000000000000000000000000000000000000000000000000000090931692635eb88d3d92600480830193928290030181865afa158015611f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4291906144f1565b6001600160a01b03168152506040518663ffffffff1660e01b8152600401610b4a959493929190614903565b6000604051806101c001604052808d6001600160a01b031681526020018c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208c810282810182019093528c82529283019290918d918d9182918501908490808284376000920191909152505050908252506040805160208a810282810182019093528a82529283019290918b918b9182918501908490808284376000920191909152505050908252506001600160a01b03871660208083019190915260408051601f88018390048302810183018252878152920191908790879081908401838280828437600092018290525093855250505061ffff808616602080850191909152603a546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008204811660408088019190915291166060860152603b5467ffffffffffffffff8116608087015268010000000000000000900490921660a08501526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660c08601819052908b16845260388252928290205460ff1660e085015281517f707cd71600000000000000000000000000000000000000000000000000000000815291516101009094019363707cd7169260048082019392918290030181865afa158015612187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ab91906144f1565b6040517ffa50f2970000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03919091169063fa50f29790602401602060405180830381865afa15801561220a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222e9190614813565b151590526001600160a01b0386166000908152603560205260409081902090517f2e7263ea00000000000000000000000000000000000000000000000000000000815291925073__$3cafd0a079d9bba6279cd462d6f4920444$__91632e7263ea916122a891603491603691603791908890600401614a6b565b60006040518083038186803b1580156122c057600080fd5b505af41580156122d4573d6000803e3d6000fd5b50505050505050505050505050505050565b6122ee613130565b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617603a55565b604080516001600160a01b0383811660008181526035602090815285822060c0860187525460a086019081528552603b5468010000000000000000900461ffff16818601528486019290925284517ffca513a8000000000000000000000000000000000000000000000000000000008152945190948594859485948594859473__$370dc613f77da7345d5cfe489611ba2a28$__946326ec273f9460349460369460379460608501937f0000000000000000000000000000000000000000000000000000000000000000169263fca513a8926004808401938290030181865afa15801561240e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243291906144f1565b6001600160a01b0390811682528e81166000908152603860209081526040918290205460ff90811694820194909452815160e08a901b7fffffffff00000000000000000000000000000000000000000000000000000000168152600481019890985260248801969096526044870194909452825151606487015293820151608486015291810151831660a4850152606081015190921660c48401526080909101511660e48201526101040160c060405180830381865af41580156124fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251e9190614bea565b949c939b5091995097509550909350915050565b6001805460ff16806125435750303b155b8061254f575060005481115b6125db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610d94565b60015460ff1615801561261857600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146040518060400160405280600281526020017f3132000000000000000000000000000000000000000000000000000000000000815250906126bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9491906145c8565b50603b80547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166109c4179055801561271757600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050565b6001600160a01b038281166000818152603460205260409081902090517f6973f74400000000000000000000000000000000000000000000000000000000815260048101919091526024810191909152908216604482015273__$f250b95a8491f1e84f401ed6d1693cd837$__90636973f744906064016115a5565b6127a061343a565b6040517f87b322b20000000000000000000000000000000000000000000000000000000081526001600160a01b038085166004830152831660248201526044810182905273__$370dc613f77da7345d5cfe489611ba2a28$__906387b322b29060640160006040518083038186803b15801561281b57600080fd5b505af415801561282f573d6000803e3d6000fd5b50505050505050565b6001600160a01b03811660009081526034602052604081206111ba906135ad565b603b5460609068010000000000000000900461ffff166000808267ffffffffffffffff81111561288b5761288b614208565b6040519080825280602002602001820160405280156128b4578160200160208202803683370190505b50905060005b83811015612957576000818152603660205260409020546001600160a01b031615612937576000818152603660205260409020546001600160a01b0316826129028584614c34565b8151811061291257612912614c4b565b60200260200101906001600160a01b031690816001600160a01b031681525050612945565b8261294181614c7a565b9350505b8061294f81614c7a565b9150506128ba565b5091038152919050565b612969613130565b60408051808201909152600281527f3136000000000000000000000000000000000000000000000000000000000000602082015260ff83166129d8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9491906145c8565b5060ff821660009081526037602090815260409182902083518154838601519486015160608701516001600160a01b03166601000000000000027fffffffffffff0000000000000000000000000000000000000000ffffffffffff61ffff92831664010000000002167fffffffffffff00000000000000000000000000000000000000000000ffffffff97831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909416929094169190911791909117949094161792909217825560808301518051849392611068926001850192910190613821565b6001600160a01b03868116600090815260346020908152604091829020600401548251808401909352600283527f3131000000000000000000000000000000000000000000000000000000000000918301919091529091163314612b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9491906145c8565b5073__$e9229d51100a3938db7663133e6dc5ffcb$__638a5dadd160346036603760356040518061012001604052808d6001600160a01b031681526020018c6001600160a01b031681526020018b6001600160a01b031681526020018a8152602001898152602001888152602001603b60089054906101000a900461ffff1661ffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5b91906144f1565b6001600160a01b0390811682528d166000908152603860209081526040918290205460ff16920191909152517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b168152612cc1959493929190600401614cb3565b60006040518083038186803b158015612cd957600080fd5b505af4158015612ced573d6000803e3d6000fd5b50505050505050505050565b6000612d036132c7565b6001600160a01b0384166000818152603460205260409081902060395491517f8e743248000000000000000000000000000000000000000000000000000000008152600481019190915260248101929092526044820185905260648201849052608482015273__$d21c6b38ea0f6668c62b5e103f4ea47254$__90638e7432489060a401611141565b612d94613130565b6040517f1e3b4145000000000000000000000000000000000000000000000000000000008152603460048201526001600160a01b038216602482015273__$370dc613f77da7345d5cfe489611ba2a28$__90631e3b41459060440161103c565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c481018290526000906001600160a01b038a169063d505accf9060e401600060405180830381600087803b158015612e7c57600080fd5b505af1158015612e90573d6000803e3d6000fd5b5050505060006040518060a001604052808b6001600160a01b031681526020018a8152602001896002811115612ec857612ec86145db565b6002811115612ed957612ed96145db565b81526001600160a01b0389166020808301829052600060409384018190529182526035905281902090517f40e95de600000000000000000000000000000000000000000000000000000000815291925073__$f250b95a8491f1e84f401ed6d1693cd837$__916340e95de691612f59916034916036918790600401614645565b602060405180830381865af4158015612f76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9a91906146ab565b9a9950505050505050505050565b612fb0613130565b60408051808201909152600281527f373700000000000000000000000000000000000000000000000000000000000060208201526001600160a01b038316613025576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9491906145c8565b506001600160a01b0382166000908152603460205260409020600301547501000000000000000000000000000000000000000000900461ffff161515806130a157506000805260366020527f4cb2b152c1b54ce671907a93c300fd5aa72383a9d4ec19a81e3333632ae92e00546001600160a01b038381169116145b6040518060400160405280600281526020017f38320000000000000000000000000000000000000000000000000000000000008152509061310f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9491906145c8565b506001600160a01b0391909116600090815260346020526040902090359055565b336001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663631adfca6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131bc91906144f1565b6001600160a01b0316146040518060400160405280600281526020017f313000000000000000000000000000000000000000000000000000000000000081525090613234576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9491906145c8565b50565b6003810154600090700100000000000000000000000000000000900464ffffffffff164281141561327d575050600201546fffffffffffffffffffffffffffffffff1690565b6002830154611185906fffffffffffffffffffffffffffffffff808216916132bb917001000000000000000000000000000000009091041684613631565b9061363e565b50919050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015613325573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061334991906144f1565b6040517f726600ce0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03919091169063726600ce90602401602060405180830381865afa1580156133a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133cc9190614813565b6040518060400160405280600181526020017f360000000000000000000000000000000000000000000000000000000000000081525090613234576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9491906145c8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015613498573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134bc91906144f1565b6040517f7be53ca10000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039190911690637be53ca190602401602060405180830381865afa15801561351b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353f9190614813565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090613234576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9491906145c8565b6003810154600090700100000000000000000000000000000000900464ffffffffff16428114156135f3575050600101546fffffffffffffffffffffffffffffffff1690565b6001830154611185906fffffffffffffffffffffffffffffffff808216916132bb917001000000000000000000000000000000009091041684613695565b60006111858383426136da565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761367357600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b6000806136a964ffffffffff841642614c34565b6136b39085614d68565b6301e13380900490506136d2816b033b2e3c9fd0803ce8000000614dd4565b949350505050565b6000806136ee64ffffffffff851684614c34565b90508061370a576b033b2e3c9fd0803ce8000000915050611185565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511613740576000613745565b600285035b925066038882915c40006137598a8061363e565b8161376657613766614da5565b0491506301e13380613778838b61363e565b8161378557613785614da5565b0490506000826137958688614d68565b61379f9190614d68565b600290049050600082856137b3888a614d68565b6137bd9190614d68565b6137c79190614d68565b60069004905080826301e133806137de8a8f614d68565b6137e89190614dec565b6137fe906b033b2e3c9fd0803ce8000000614dd4565b6138089190614dd4565b6138129190614dd4565b9b9a5050505050505050505050565b82805461382d90614742565b90600052602060002090601f01602090048101928261384f5760008555613895565b82601f1061386857805160ff1916838001178555613895565b82800160010185558215613895579182015b8281111561389557825182559160200191906001019061387a565b506138a19291506138a5565b5090565b5b808211156138a157600081556001016138a6565b6001600160a01b038116811461323457600080fd5b80356138da816138ba565b919050565b801515811461323457600080fd5b600080600080600060a0868803121561390557600080fd5b8535613910816138ba565b94506020860135613920816138ba565b93506040860135613930816138ba565b9250606086013591506080860135613947816138df565b809150509295509295909350565b803561ffff811681146138da57600080fd5b803560ff811681146138da57600080fd5b600080600080600080600080610100898b03121561399557600080fd5b88356139a0816138ba565b97506020890135965060408901356139b7816138ba565b95506139c560608a01613955565b9450608089013593506139da60a08a01613967565b925060c0890135915060e089013590509295985092959890939650565b60008060408385031215613a0a57600080fd5b8235613a15816138ba565b91506020830135613a25816138ba565b809150509250929050565b600060208284031215613a4257600080fd5b61118582613967565b600080600060608486031215613a6057600080fd5b8335613a6b816138ba565b95602085013595506040909401359392505050565b600060208284031215613a9257600080fd5b5035919050565b600060208284031215613aab57600080fd5b8135611185816138ba565b81515181526101e081016020830151613ae360208401826fffffffffffffffffffffffffffffffff169052565b506040830151613b0760408401826fffffffffffffffffffffffffffffffff169052565b506060830151613b2b60608401826fffffffffffffffffffffffffffffffff169052565b506080830151613b4f60808401826fffffffffffffffffffffffffffffffff169052565b5060a0830151613b7360a08401826fffffffffffffffffffffffffffffffff169052565b5060c0830151613b8c60c084018264ffffffffff169052565b5060e0830151613ba260e084018261ffff169052565b50610100838101516001600160a01b039081169184019190915261012080850151821690840152610140808501518216908401526101608085015190911690830152610180808401516fffffffffffffffffffffffffffffffff908116918401919091526101a0808501518216908401526101c09384015116929091019190915290565b60008083601f840112613c3857600080fd5b50813567ffffffffffffffff811115613c5057600080fd5b602083019150836020828501011115613c6857600080fd5b9250929050565b60008060008060008060a08789031215613c8857600080fd5b8635613c93816138ba565b95506020870135613ca3816138ba565b945060408701359350606087013567ffffffffffffffff811115613cc657600080fd5b613cd289828a01613c26565b9094509250613ce5905060808801613955565b90509295509295509295565b600060208284031215613d0357600080fd5b61118582613955565b60008060008060808587031215613d2257600080fd5b8435613d2d816138ba565b935060208501359250604085013591506060850135613d4b816138ba565b939692955090935050565b60008060408385031215613d6957600080fd5b8235613d74816138ba565b91506020830135613a25816138df565b60008060008060808587031215613d9a57600080fd5b8435613da5816138ba565b9350602085013592506040850135613dbc816138ba565b9150613dca60608601613955565b905092959194509250565b600080600060608486031215613dea57600080fd5b8335613df5816138ba565b9250602084013591506040840135613e0c816138ba565b809150509250925092565b6000815180845260005b81811015613e3d57602081850181015186830182015201613e21565b81811115613e4f576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061ffff808451166020840152806020850151166040840152806040850151166060840152506001600160a01b036060840151166080830152608083015160a0808401526136d260c0840182613e17565b600080600080600060a08688031215613ef057600080fd5b8535613efb816138ba565b94506020860135613f0b816138ba565b93506040860135613f1b816138ba565b92506060860135613f2b816138ba565b91506080860135613947816138ba565b60008060408385031215613f4e57600080fd5b8235613f59816138ba565b946020939093013593505050565b60008083601f840112613f7957600080fd5b50813567ffffffffffffffff811115613f9157600080fd5b6020830191508360208260051b8501011115613c6857600080fd5b60008060208385031215613fbf57600080fd5b823567ffffffffffffffff811115613fd657600080fd5b613fe285828601613f67565b90969095509350505050565b600080600080600060a0868803121561400657600080fd5b8535614011816138ba565b94506020860135935060408601359250613f2b60608701613955565b600080600080600080600080600080600060e08c8e03121561404e57600080fd5b6140578c6138cf565b9a5067ffffffffffffffff8060208e0135111561407357600080fd5b6140838e60208f01358f01613f67565b909b50995060408d013581101561409957600080fd5b6140a98e60408f01358f01613f67565b909950975060608d01358110156140bf57600080fd5b6140cf8e60608f01358f01613f67565b90975095506140e060808e016138cf565b94508060a08e013511156140f357600080fd5b506141048d60a08e01358e01613c26565b909350915061411560c08d01613955565b90509295989b509295989b9093969950565b80356fffffffffffffffffffffffffffffffff811681146138da57600080fd5b6000806040838503121561415a57600080fd5b61416383614127565b915061417160208401614127565b90509250929050565b60008060006060848603121561418f57600080fd5b833561419a816138ba565b925060208401356141aa816138ba565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b818110156141fc5783516001600160a01b0316835292840192918401916001016141d7565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561425a5761425a614208565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156142a7576142a7614208565b604052919050565b600080604083850312156142c257600080fd5b6142cb83613967565b915060208084013567ffffffffffffffff808211156142e957600080fd5b9085019060a082880312156142fd57600080fd5b614305614237565b61430e83613955565b815261431b848401613955565b8482015261432b60408401613955565b6040820152606083013561433e816138ba565b606082015260808301358281111561435557600080fd5b80840193505087601f84011261436a57600080fd5b82358281111561437c5761437c614208565b6143ac857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614260565b925080835288858286010111156143c257600080fd5b8085850186850137600085828501015250816080820152809450505050509250929050565b60008060008060008060c0878903121561440057600080fd5b863561440b816138ba565b9550602087013561441b816138ba565b9450604087013561442b816138ba565b959894975094956060810135955060808101359460a0909101359350915050565b600080600080600080600080610100898b03121561446957600080fd5b8835614474816138ba565b9750602089013596506040890135955060608901356139c5816138ba565b60008082840360408112156144a657600080fd5b83356144b1816138ba565b925060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820112156144e357600080fd5b506020830190509250929050565b60006020828403121561450357600080fd5b8151611185816138ba565b60006101a08201905086825285602083015284604083015283606083015282516080830152602083015160a083015260408301516001600160a01b0380821660c08501528060608601511660e08501525050608083015161010061457c818501836001600160a01b03169052565b60a0850151151561012085015260c08501516001600160a01b0390811661014086015260e086015160ff166101608601529085015190811661018085015290505b509695505050505050565b6020815260006111856020830184613e17565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110614641577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b6000610100820190508582528460208301528360408301526001600160a01b0380845116606084015260208401516080840152604084015161468a60a085018261460a565b5060608401511660c0830152608090920151151560e0909101529392505050565b6000602082840312156146bd57600080fd5b5051919050565b8281526040602082015260006001600160a01b038084511660408401528060208501511660608401525060408301516080830152606083015160e060a0840152614712610120840182613e17565b905061ffff60808501511660c084015260a084015160e084015260c0840151610100840152809150509392505050565b600181811c9082168061475657607f821691505b602082108114156132c1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000610120820190508482528360208301526001600160a01b038084511660408401528060208501511660608401528060408501511660808401528060608501511660a08401528060808501511660c08401525060a08301516147f960e084018261ffff169052565b5060c083015161ffff811661010084015250949350505050565b60006020828403121561482557600080fd5b8151611185816138df565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168181141561487757614877614830565b6001019392505050565b848152602081018490526001600160a01b03831660408201526080810161142f606083018461460a565b83815260406020808301829052908201839052600090849060608401835b868110156148f75783356148dc816138ba565b6001600160a01b0316825292820192908201906001016148c9565b50979650505050505050565b85815260208101859052604081018490526060810183905281516001600160a01b03166080820152610200810160208301516001600160a01b03811660a08401525060408301516001600160a01b03811660c084015250606083015160e083015260808301516101006149788185018361460a565b60a085015191506101206149918186018461ffff169052565b60c086015192506101406149a88187018515159052565b60e08701516101608781019190915292870151610180870152908601516001600160a01b039081166101a08701529086015160ff166101c0860152908501519081166101e085015290506145bd565b600081518084526020808501945080840160005b83811015614a305781516001600160a01b031687529582019590820190600101614a0b565b509495945050505050565b600081518084526020808501945080840160005b83811015614a3057815187529582019590820190600101614a4f565b85815284602082015283604082015282606082015260a06080820152614a9d60a0820183516001600160a01b03169052565b600060208301516101c08060c0850152614abb6102608501836149f7565b915060408501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60808685030160e0870152614af78483614a3b565b935060608701519150610100818786030181880152614b168584614a3b565b945060808801519250610120614b36818901856001600160a01b03169052565b60a089015193506101408389880301818a0152614b538786613e17565b965060c08a015194506101609350614b70848a018661ffff169052565b60e08a0151945061018085818b0152838b015195506101a0935085848b0152828b0151878b0152818b01516101e08b0152848b01519650614bbd6102008b01886001600160a01b03169052565b8a015160ff81166102208b01529550614bd4915050565b87015180151561024088015292506148f7915050565b60008060008060008060c08789031215614c0357600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b600082821015614c4657614c46614830565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614cac57614cac614830565b5060010190565b60006101a0820190508682528560208301528460408301528360608301526001600160a01b038084511660808401528060208501511660a0840152506040830151614d0960c08401826001600160a01b03169052565b50606083015160e08301526080830151610100818185015260a085015161012085015260c085015161014085015260e08501519150614d546101608501836001600160a01b03169052565b84015160ff811661018085015290506145bd565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614da057614da0614830565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008219821115614de757614de7614830565b500190565b600082614e22577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212200419be14b009a01de63659f143e2a2572aeeeafafb6d79b08b2f7c1faa5810b664736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x309 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7A708E92 GT PUSH2 0x19C JUMPI DUP1 PUSH4 0xD15E0053 GT PUSH2 0xEE JUMPI DUP1 PUSH4 0xE82FEC2F GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xEE3E210B GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xEE3E210B EQ PUSH2 0x91F JUMPI DUP1 PUSH4 0xF51E435B EQ PUSH2 0x932 JUMPI DUP1 PUSH4 0xF8119D51 EQ PUSH2 0x945 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE82FEC2F EQ PUSH2 0x8E1 JUMPI DUP1 PUSH4 0xE8EDA9DF EQ PUSH2 0x6A6 JUMPI DUP1 PUSH4 0xEDDF1B79 EQ PUSH2 0x8F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD5ED3933 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0xD5ED3933 EQ PUSH2 0x8A8 JUMPI DUP1 PUSH4 0xD65DC7A1 EQ PUSH2 0x8BB JUMPI DUP1 PUSH4 0xE43E88A1 EQ PUSH2 0x8CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD15E0053 EQ PUSH2 0x86D JUMPI DUP1 PUSH4 0xD1946DBC EQ PUSH2 0x880 JUMPI DUP1 PUSH4 0xD579EA7D EQ PUSH2 0x895 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCB6E522 GT PUSH2 0x150 JUMPI DUP1 PUSH4 0xC4D66DE8 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x834 JUMPI DUP1 PUSH4 0xCD112382 EQ PUSH2 0x847 JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0x85A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBCB6E522 EQ PUSH2 0x79F JUMPI DUP1 PUSH4 0xBF92857C EQ PUSH2 0x7B2 JUMPI DUP1 PUSH4 0xC44B11F7 EQ PUSH2 0x7F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9CD19996 GT PUSH2 0x181 JUMPI DUP1 PUSH4 0x9CD19996 EQ PUSH2 0x766 JUMPI DUP1 PUSH4 0xA415BCAD EQ PUSH2 0x779 JUMPI DUP1 PUSH4 0xAB9C4B5D EQ PUSH2 0x78C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7A708E92 EQ PUSH2 0x740 JUMPI DUP1 PUSH4 0x94BA89A2 EQ PUSH2 0x753 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x386497FD GT PUSH2 0x260 JUMPI DUP1 PUSH4 0x617BA037 GT PUSH2 0x209 JUMPI DUP1 PUSH4 0x69A933A5 GT PUSH2 0x1E3 JUMPI DUP1 PUSH4 0x69A933A5 EQ PUSH2 0x6DF JUMPI DUP1 PUSH4 0x6A99C036 EQ PUSH2 0x6F2 JUMPI DUP1 PUSH4 0x6C6F6AE1 EQ PUSH2 0x720 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x617BA037 EQ PUSH2 0x6A6 JUMPI DUP1 PUSH4 0x63C9B860 EQ PUSH2 0x6B9 JUMPI DUP1 PUSH4 0x69328DEC EQ PUSH2 0x6CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x52751797 GT PUSH2 0x23A JUMPI DUP1 PUSH4 0x52751797 EQ PUSH2 0x653 JUMPI DUP1 PUSH4 0x573ADE81 EQ PUSH2 0x680 JUMPI DUP1 PUSH4 0x5A3B74B9 EQ PUSH2 0x693 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x386497FD EQ PUSH2 0x5DC JUMPI DUP1 PUSH4 0x42B0B77C EQ PUSH2 0x5EF JUMPI DUP1 PUSH4 0x4417A583 EQ PUSH2 0x602 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1D2118F9 GT PUSH2 0x2C2 JUMPI DUP1 PUSH4 0x2DAD97D4 GT PUSH2 0x29C JUMPI DUP1 PUSH4 0x2DAD97D4 EQ PUSH2 0x3F5 JUMPI DUP1 PUSH4 0x3036B439 EQ PUSH2 0x408 JUMPI DUP1 PUSH4 0x35EA6A75 EQ PUSH2 0x41B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1D2118F9 EQ PUSH2 0x3C7 JUMPI DUP1 PUSH4 0x272D9072 EQ PUSH2 0x3DA JUMPI DUP1 PUSH4 0x28530A47 EQ PUSH2 0x3E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2C205F0 GT PUSH2 0x2F3 JUMPI DUP1 PUSH4 0x2C205F0 EQ PUSH2 0x33E JUMPI DUP1 PUSH4 0x542975C EQ PUSH2 0x351 JUMPI DUP1 PUSH4 0x74B2E43 EQ PUSH2 0x390 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH3 0xA718A9 EQ PUSH2 0x30E JUMPI DUP1 PUSH4 0x148170E EQ PUSH2 0x323 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x321 PUSH2 0x31C CALLDATASIZE PUSH1 0x4 PUSH2 0x38ED JUMP JUMPDEST PUSH2 0x954 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x32B PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x321 PUSH2 0x34C CALLDATASIZE PUSH1 0x4 PUSH2 0x3978 JUMP JUMPDEST PUSH2 0xB81 JUMP JUMPDEST PUSH2 0x378 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x335 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x335 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x3D5 CALLDATASIZE PUSH1 0x4 PUSH2 0x39F7 JUMP JUMPDEST PUSH2 0xD17 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x32B JUMP JUMPDEST PUSH2 0x321 PUSH2 0x3F0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A30 JUMP JUMPDEST PUSH2 0xED1 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x403 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A4B JUMP JUMPDEST PUSH2 0x106F JUMP JUMPDEST PUSH2 0x321 PUSH2 0x416 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A80 JUMP JUMPDEST PUSH2 0x118C JUMP JUMPDEST PUSH2 0x5CF PUSH2 0x429 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A99 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x200 DUP2 ADD DUP3 MSTORE PUSH1 0x0 PUSH2 0x1E0 DUP3 ADD DUP2 DUP2 MSTORE DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1A0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x200 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH2 0x1E0 DUP3 ADD SWAP1 DUP2 MSTORE DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH17 0x100000000000000000000000000000000 SWAP1 DUP2 SWAP1 DIV DUP5 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x2 DUP3 ADD SLOAD DUP1 DUP5 AND PUSH1 0x60 DUP4 ADD MSTORE DUP5 SWAP1 DIV DUP4 AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x3 DUP3 ADD SLOAD DUP1 DUP5 AND PUSH1 0xA0 DUP4 ADD MSTORE DUP5 DUP2 DIV PUSH5 0xFFFFFFFFFF AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x4 DUP3 ADD SLOAD DUP6 AND PUSH2 0x100 DUP3 ADD MSTORE PUSH1 0x5 DUP3 ADD SLOAD DUP6 AND PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD DUP6 AND PUSH2 0x140 DUP3 ADD MSTORE PUSH1 0x7 DUP3 ADD SLOAD SWAP1 SWAP5 AND PUSH2 0x160 DUP6 ADD MSTORE PUSH1 0x8 DUP2 ADD SLOAD DUP1 DUP4 AND PUSH2 0x180 DUP7 ADD MSTORE SWAP3 SWAP1 SWAP3 DIV DUP2 AND PUSH2 0x1A0 DUP5 ADD MSTORE PUSH1 0x9 SWAP1 SWAP2 ADD SLOAD AND PUSH2 0x1C0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x335 SWAP2 SWAP1 PUSH2 0x3AB6 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x5EA CALLDATASIZE PUSH1 0x4 PUSH2 0x3A99 JUMP JUMPDEST PUSH2 0x1199 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x5FD CALLDATASIZE PUSH1 0x4 PUSH2 0x3C6F JUMP JUMPDEST PUSH2 0x11C0 JUMP JUMPDEST PUSH2 0x644 PUSH2 0x610 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A99 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND DUP2 MSTORE PUSH1 0x35 DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 MLOAD DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x335 JUMP JUMPDEST PUSH2 0x378 PUSH2 0x661 CALLDATASIZE PUSH1 0x4 PUSH2 0x3CF1 JUMP JUMPDEST PUSH2 0xFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x68E CALLDATASIZE PUSH1 0x4 PUSH2 0x3D0C JUMP JUMPDEST PUSH2 0x1313 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x6A1 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D56 JUMP JUMPDEST PUSH2 0x1438 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x6B4 CALLDATASIZE PUSH1 0x4 PUSH2 0x3D84 JUMP JUMPDEST PUSH2 0x15D9 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x6C7 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A99 JUMP JUMPDEST PUSH2 0x16CF JUMP JUMPDEST PUSH2 0x32B PUSH2 0x6DA CALLDATASIZE PUSH1 0x4 PUSH2 0x3DD5 JUMP JUMPDEST PUSH2 0x173E JUMP JUMPDEST PUSH2 0x321 PUSH2 0x6ED CALLDATASIZE PUSH1 0x4 PUSH2 0x3D84 JUMP JUMPDEST PUSH2 0x190F JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3A6 JUMP JUMPDEST PUSH2 0x733 PUSH2 0x72E CALLDATASIZE PUSH1 0x4 PUSH2 0x3A30 JUMP JUMPDEST PUSH2 0x19AF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x335 SWAP2 SWAP1 PUSH2 0x3E82 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x74E CALLDATASIZE PUSH1 0x4 PUSH2 0x3ED8 JUMP JUMPDEST PUSH2 0x1ADC JUMP JUMPDEST PUSH2 0x321 PUSH2 0x761 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F3B JUMP JUMPDEST PUSH2 0x1C27 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x774 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FAC JUMP JUMPDEST PUSH2 0x1C9B JUMP JUMPDEST PUSH2 0x321 PUSH2 0x787 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FEE JUMP JUMPDEST PUSH2 0x1CF0 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x79A CALLDATASIZE PUSH1 0x4 PUSH2 0x402D JUMP JUMPDEST PUSH2 0x1F6E JUMP JUMPDEST PUSH2 0x321 PUSH2 0x7AD CALLDATASIZE PUSH1 0x4 PUSH2 0x4147 JUMP JUMPDEST PUSH2 0x22E6 JUMP JUMPDEST PUSH2 0x7C5 PUSH2 0x7C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A99 JUMP JUMPDEST PUSH2 0x231D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP7 DUP8 MSTORE PUSH1 0x20 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP6 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH2 0x335 JUMP JUMPDEST PUSH2 0x644 PUSH2 0x800 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A99 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND DUP2 MSTORE PUSH1 0x34 DUP4 MSTORE DUP2 SWAP1 KECCAK256 DUP2 MLOAD SWAP3 DUP4 ADD SWAP1 SWAP2 MSTORE SLOAD DUP2 MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x842 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A99 JUMP JUMPDEST PUSH2 0x2532 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x855 CALLDATASIZE PUSH1 0x4 PUSH2 0x39F7 JUMP JUMPDEST PUSH2 0x271C JUMP JUMPDEST PUSH2 0x321 PUSH2 0x868 CALLDATASIZE PUSH1 0x4 PUSH2 0x417A JUMP JUMPDEST PUSH2 0x2798 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x87B CALLDATASIZE PUSH1 0x4 PUSH2 0x3A99 JUMP JUMPDEST PUSH2 0x2838 JUMP JUMPDEST PUSH2 0x888 PUSH2 0x2859 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x335 SWAP2 SWAP1 PUSH2 0x41BB JUMP JUMPDEST PUSH2 0x321 PUSH2 0x8A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x42AF JUMP JUMPDEST PUSH2 0x2961 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x8B6 CALLDATASIZE PUSH1 0x4 PUSH2 0x43E7 JUMP JUMPDEST PUSH2 0x2AC0 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x8C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A4B JUMP JUMPDEST PUSH2 0x2CF9 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x8DC CALLDATASIZE PUSH1 0x4 PUSH2 0x3A99 JUMP JUMPDEST PUSH2 0x2D8C JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0x32B JUMP JUMPDEST PUSH2 0x32B PUSH2 0x901 CALLDATASIZE PUSH1 0x4 PUSH2 0x3A99 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x92D CALLDATASIZE PUSH1 0x4 PUSH2 0x444C JUMP JUMPDEST PUSH2 0x2DF4 JUMP JUMPDEST PUSH2 0x321 PUSH2 0x940 CALLDATASIZE PUSH1 0x4 PUSH2 0x4492 JUMP JUMPDEST PUSH2 0x2FA8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x80 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x335 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x83C1087D PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x37 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA35 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA59 SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP12 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x5EB88D3D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP5 ADD SWAP4 PUSH32 0x0 SWAP1 SWAP4 AND SWAP3 PUSH4 0x5EB88D3D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAFA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB1E SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xB4A SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x450E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xB62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xB76 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC1A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP14 DUP7 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP13 DUP2 MSTORE DUP3 DUP5 ADD SWAP5 DUP6 MSTORE PUSH2 0xFFFF DUP12 DUP2 AND PUSH1 0x60 DUP6 ADD SWAP1 DUP2 MSTORE SWAP5 MLOAD PUSH32 0x1913F16100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 MLOAD DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE MLOAD PUSH1 0x84 DUP3 ADD MSTORE SWAP3 MLOAD SWAP1 SWAP4 AND PUSH1 0xA4 DUP4 ADD MSTORE MLOAD SWAP1 SWAP2 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1913F161 SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xCF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0xD09 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xD1F PUSH2 0x3130 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0xD9D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD94 SWAP2 SWAP1 PUSH2 0x45C8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0xE19 JUMPI POP PUSH1 0x0 DUP1 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH32 0x4CB2B152C1B54CE671907A93C300FD5AA72383A9D4EC19A81E3333632AE92E00 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xE87 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD94 SWAP2 SWAP1 PUSH2 0x45C8 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP2 SWAP1 SWAP3 AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0x0 PUSH4 0x5D5DC313 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x38 PUSH1 0x35 PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF9B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xFBF SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0xFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP8 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x103C SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 SWAP6 DUP7 MSTORE PUSH1 0x20 DUP1 DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x40 DUP1 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x60 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP6 ADD MSTORE DUP1 MLOAD PUSH1 0xA0 DUP6 ADD MSTORE SWAP2 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xC0 DUP5 ADD MSTORE ADD MLOAD PUSH1 0xFF AND PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1054 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1068 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x40E95DE6 PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x10E6 JUMPI PUSH2 0x10E6 PUSH2 0x45DB JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x10F7 JUMPI PUSH2 0x10F7 PUSH2 0x45DB JUMP JUMPDEST DUP2 MSTORE CALLER PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x40 SWAP2 DUP3 ADD MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x1141 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x4645 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x115E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1182 SWAP2 SWAP1 PUSH2 0x46AB JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1194 PUSH2 0x3130 JUMP JUMPDEST PUSH1 0x39 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x11BA SWAP1 PUSH2 0x3237 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP6 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 DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH2 0xFFFF DUP6 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV DUP2 AND PUSH1 0x40 DUP1 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x60 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND DUP3 MSTORE PUSH1 0x34 SWAP1 MSTORE DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0xA1FE0E8D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0xA1FE0E8D SWAP2 PUSH2 0x12DA SWAP2 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x46C4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1306 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x40E95DE6 PUSH1 0x34 PUSH1 0x36 PUSH1 0x35 PUSH1 0x0 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x138A JUMPI PUSH2 0x138A PUSH2 0x45DB JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x139B JUMPI PUSH2 0x139B PUSH2 0x45DB JUMP JUMPDEST DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x40 SWAP2 DUP3 ADD MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP8 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x13EE SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x4645 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x140B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x142F SWAP2 SWAP1 PUSH2 0x46AB JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH20 0x0 PUSH4 0xBF697A26 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP8 DUP8 PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14EE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1512 SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH1 0xE0 DUP12 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP10 SWAP1 SWAP10 MSTORE PUSH1 0x24 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x44 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x64 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x84 DUP8 ADD MSTORE ISZERO ISZERO PUSH1 0xA4 DUP7 ADD MSTORE PUSH2 0xFFFF SWAP1 SWAP2 AND PUSH1 0xC4 DUP6 ADD MSTORE AND PUSH1 0xE4 DUP4 ADD MSTORE PUSH1 0xFF AND PUSH2 0x104 DUP3 ADD MSTORE PUSH2 0x124 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x15BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x15D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x80 DUP2 ADD DUP5 MSTORE DUP10 DUP7 AND DUP2 MSTORE SWAP2 DUP3 ADD DUP9 DUP2 MSTORE DUP3 DUP5 ADD SWAP5 DUP6 MSTORE PUSH2 0xFFFF DUP8 DUP2 AND PUSH1 0x60 DUP6 ADD SWAP1 DUP2 MSTORE SWAP5 MLOAD PUSH32 0x1913F16100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 MLOAD DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE MLOAD PUSH1 0x84 DUP3 ADD MSTORE SWAP3 MLOAD SWAP1 SWAP4 AND PUSH1 0xA4 DUP4 ADD MSTORE MLOAD SWAP1 SWAP2 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1913F161 SWAP1 PUSH1 0xE4 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x16C5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x16D7 PUSH2 0x3130 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x9CF5702300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x9CF57023 SWAP1 PUSH1 0x64 ADD PUSH2 0x103C JUMP JUMPDEST PUSH1 0x0 PUSH20 0x0 PUSH4 0x186DEA44 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x182C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1850 SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP12 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP10 SWAP1 SWAP10 MSTORE PUSH1 0x24 DUP10 ADD SWAP8 SWAP1 SWAP8 MSTORE PUSH1 0x44 DUP9 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x64 DUP8 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP2 MLOAD DUP4 AND PUSH1 0x84 DUP8 ADD MSTORE SWAP4 DUP2 ADD MLOAD PUSH1 0xA4 DUP7 ADD MSTORE SWAP2 DUP3 ADD MLOAD DUP2 AND PUSH1 0xC4 DUP6 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0xE4 DUP6 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD AND PUSH2 0x104 DUP5 ADD MSTORE PUSH1 0xA0 ADD MLOAD AND PUSH2 0x124 DUP3 ADD MSTORE PUSH2 0x144 ADD PUSH2 0x1141 JUMP JUMPDEST PUSH2 0x1917 PUSH2 0x32C7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x413C86F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 AND PUSH1 0xC4 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x413C86F SWAP1 PUSH1 0xE4 ADD PUSH2 0x1699 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xA0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0xA0 DUP2 ADD DUP5 MSTORE DUP2 SLOAD PUSH2 0xFFFF DUP1 DUP3 AND DUP4 MSTORE PUSH3 0x10000 DUP3 DIV DUP2 AND SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH5 0x100000000 DUP2 DIV SWAP1 SWAP4 AND SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH7 0x1000000000000 SWAP1 SWAP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 DUP2 ADD DUP1 SLOAD PUSH1 0x80 DUP5 ADD SWAP2 SWAP1 PUSH2 0x1A53 SWAP1 PUSH2 0x4742 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1A7F SWAP1 PUSH2 0x4742 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1ACC JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1AA1 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1ACC 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 0x1AAF JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 MSTORE POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1AE4 PUSH2 0x3130 JUMP JUMPDEST PUSH20 0x0 PUSH4 0x69FC1BDF PUSH1 0x34 PUSH1 0x36 PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1B7A PUSH1 0x80 SWAP1 JUMP JUMPDEST PUSH2 0xFFFF AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1B9F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4790 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1BBC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1BE0 SWAP2 SWAP1 PUSH2 0x4813 JUMP JUMPDEST ISZERO PUSH2 0x1068 JUMPI PUSH1 0x3B DUP1 SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND SWAP1 PUSH1 0x8 PUSH2 0x1C05 DUP4 PUSH2 0x485F JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH2 0xFFFF MUL NOT AND SWAP1 DUP4 PUSH2 0xFFFF AND MUL OR SWAP1 SSTORE POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE PUSH1 0x35 SWAP1 SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 PUSH20 0x0 SWAP2 PUSH4 0xEAC4D703 SWAP2 DUP6 DUP6 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1C7C JUMPI PUSH2 0x1C7C PUSH2 0x45DB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x15A5 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4881 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x48C2CA8C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x48C2CA8C SWAP1 PUSH2 0x15A5 SWAP1 PUSH1 0x34 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x48AB JUMP JUMPDEST PUSH20 0x0 PUSH4 0x1E6473F9 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x0 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1D86 JUMPI PUSH2 0x1D86 PUSH2 0x45DB JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1D97 JUMPI PUSH2 0x1D97 PUSH2 0x45DB JUMP JUMPDEST DUP2 MSTORE PUSH2 0xFFFF DUP1 DUP12 AND PUSH1 0x20 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x40 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH9 0x10000000000000000 SWAP1 DIV SWAP1 SWAP3 AND PUSH1 0x80 DUP5 ADD MSTORE DUP2 MLOAD PUSH32 0xFCA513A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 MLOAD PUSH1 0xA0 SWAP1 SWAP4 ADD SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP3 PUSH4 0xFCA513A8 SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP2 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E59 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E7D SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP10 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x5EB88D3D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 MLOAD SWAP3 SWAP1 SWAP5 ADD SWAP4 PUSH32 0x0 SWAP1 SWAP4 AND SWAP3 PUSH4 0x5EB88D3D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F1E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F42 SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xB4A SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x4903 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1C0 ADD PUSH1 0x40 MSTORE DUP1 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 DUP13 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP13 DUP2 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP13 DUP3 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 DUP14 SWAP2 DUP14 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP11 DUP2 MUL DUP3 DUP2 ADD DUP3 ADD SWAP1 SWAP4 MSTORE DUP11 DUP3 MSTORE SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 DUP12 SWAP2 DUP12 SWAP2 DUP3 SWAP2 DUP6 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP POP POP SWAP1 DUP3 MSTORE POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F DUP9 ADD DUP4 SWAP1 DIV DUP4 MUL DUP2 ADD DUP4 ADD DUP3 MSTORE DUP8 DUP2 MSTORE SWAP3 ADD SWAP2 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP2 SWAP1 DUP5 ADD DUP4 DUP3 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP4 DUP6 MSTORE POP POP POP PUSH2 0xFFFF DUP1 DUP7 AND PUSH1 0x20 DUP1 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV DUP2 AND PUSH1 0x40 DUP1 DUP9 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x3B SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x80 DUP8 ADD MSTORE PUSH9 0x10000000000000000 SWAP1 DIV SWAP1 SWAP3 AND PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 AND PUSH1 0xC0 DUP7 ADD DUP2 SWAP1 MSTORE SWAP1 DUP12 AND DUP5 MSTORE PUSH1 0x38 DUP3 MSTORE SWAP3 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH1 0xE0 DUP6 ADD MSTORE DUP2 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 MLOAD PUSH2 0x100 SWAP1 SWAP5 ADD SWAP4 PUSH4 0x707CD716 SWAP3 PUSH1 0x4 DUP1 DUP3 ADD SWAP4 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2187 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x21AB SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFA50F29700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xFA50F297 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x220A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x222E SWAP2 SWAP1 PUSH2 0x4813 JUMP JUMPDEST ISZERO ISZERO SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x2E7263EA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x2E7263EA SWAP2 PUSH2 0x22A8 SWAP2 PUSH1 0x34 SWAP2 PUSH1 0x36 SWAP2 PUSH1 0x37 SWAP2 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x4A6B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x22C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x22D4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x22EE PUSH2 0x3130 JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP2 AND OR PUSH1 0x3A SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE DUP6 DUP3 KECCAK256 PUSH1 0xC0 DUP7 ADD DUP8 MSTORE SLOAD PUSH1 0xA0 DUP7 ADD SWAP1 DUP2 MSTORE DUP6 MSTORE PUSH1 0x3B SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND DUP2 DUP7 ADD MSTORE DUP5 DUP7 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP5 MLOAD PUSH32 0xFCA513A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP5 MLOAD SWAP1 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 DUP6 SWAP5 PUSH20 0x0 SWAP5 PUSH4 0x26EC273F SWAP5 PUSH1 0x34 SWAP5 PUSH1 0x36 SWAP5 PUSH1 0x37 SWAP5 PUSH1 0x60 DUP6 ADD SWAP4 PUSH32 0x0 AND SWAP3 PUSH4 0xFCA513A8 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x240E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2432 SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP15 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP5 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD PUSH1 0xE0 DUP11 SWAP1 SHL PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH1 0x24 DUP9 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x44 DUP8 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP3 MLOAD MLOAD PUSH1 0x64 DUP8 ADD MSTORE SWAP4 DUP3 ADD MLOAD PUSH1 0x84 DUP7 ADD MSTORE SWAP2 DUP2 ADD MLOAD DUP4 AND PUSH1 0xA4 DUP6 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD SWAP1 SWAP3 AND PUSH1 0xC4 DUP5 ADD MSTORE PUSH1 0x80 SWAP1 SWAP2 ADD MLOAD AND PUSH1 0xE4 DUP3 ADD MSTORE PUSH2 0x104 ADD PUSH1 0xC0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x24FA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x251E SWAP2 SWAP1 PUSH2 0x4BEA JUMP JUMPDEST SWAP5 SWAP13 SWAP4 SWAP12 POP SWAP2 SWAP10 POP SWAP8 POP SWAP6 POP SWAP1 SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x2543 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x254F JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x25DB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xD94 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x2618 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3132000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x26BB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD94 SWAP2 SWAP1 PUSH2 0x45C8 JUMP JUMPDEST POP PUSH1 0x3B DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH2 0x9C4 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x2717 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x6973F74400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x6973F744 SWAP1 PUSH1 0x64 ADD PUSH2 0x15A5 JUMP JUMPDEST PUSH2 0x27A0 PUSH2 0x343A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x87B322B200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0x0 SWAP1 PUSH4 0x87B322B2 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x281B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x282F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH2 0x11BA SWAP1 PUSH2 0x35AD JUMP JUMPDEST PUSH1 0x3B SLOAD PUSH1 0x60 SWAP1 PUSH9 0x10000000000000000 SWAP1 DIV PUSH2 0xFFFF AND PUSH1 0x0 DUP1 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x288B JUMPI PUSH2 0x288B PUSH2 0x4208 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x28B4 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2957 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO PUSH2 0x2937 JUMPI PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH2 0x2902 DUP6 DUP5 PUSH2 0x4C34 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x2912 JUMPI PUSH2 0x2912 PUSH2 0x4C4B JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH2 0x2945 JUMP JUMPDEST DUP3 PUSH2 0x2941 DUP2 PUSH2 0x4C7A JUMP JUMPDEST SWAP4 POP POP JUMPDEST DUP1 PUSH2 0x294F DUP2 PUSH2 0x4C7A JUMP JUMPDEST SWAP2 POP POP PUSH2 0x28BA JUMP JUMPDEST POP SWAP2 SUB DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2969 PUSH2 0x3130 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3136000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP4 AND PUSH2 0x29D8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD94 SWAP2 SWAP1 PUSH2 0x45C8 JUMP JUMPDEST POP PUSH1 0xFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x37 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD DUP2 SLOAD DUP4 DUP7 ADD MLOAD SWAP5 DUP7 ADD MLOAD PUSH1 0x60 DUP8 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH7 0x1000000000000 MUL PUSH32 0xFFFFFFFFFFFF0000000000000000000000000000000000000000FFFFFFFFFFFF PUSH2 0xFFFF SWAP3 DUP4 AND PUSH5 0x100000000 MUL AND PUSH32 0xFFFFFFFFFFFF00000000000000000000000000000000000000000000FFFFFFFF SWAP8 DUP4 AND PUSH3 0x10000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 SWAP1 SWAP5 AND SWAP3 SWAP1 SWAP5 AND SWAP2 SWAP1 SWAP2 OR SWAP2 SWAP1 SWAP2 OR SWAP5 SWAP1 SWAP5 AND OR SWAP3 SWAP1 SWAP3 OR DUP3 SSTORE PUSH1 0x80 DUP4 ADD MLOAD DUP1 MLOAD DUP5 SWAP4 SWAP3 PUSH2 0x1068 SWAP3 PUSH1 0x1 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x3821 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x4 ADD SLOAD DUP3 MLOAD DUP1 DUP5 ADD SWAP1 SWAP4 MSTORE PUSH1 0x2 DUP4 MSTORE PUSH32 0x3131000000000000000000000000000000000000000000000000000000000000 SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP2 AND CALLER EQ PUSH2 0x2B51 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD94 SWAP2 SWAP1 PUSH2 0x45C8 JUMP JUMPDEST POP PUSH20 0x0 PUSH4 0x8A5DADD1 PUSH1 0x34 PUSH1 0x36 PUSH1 0x37 PUSH1 0x35 PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x3B PUSH1 0x8 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C37 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2C5B SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP3 MSTORE DUP14 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP9 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x2CC1 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x4CB3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2CD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2CED JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D03 PUSH2 0x32C7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 PUSH1 0x39 SLOAD SWAP2 MLOAD PUSH32 0x8E74324800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x44 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0x64 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x8E743248 SWAP1 PUSH1 0xA4 ADD PUSH2 0x1141 JUMP JUMPDEST PUSH2 0x2D94 PUSH2 0x3130 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x1E3B414500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x34 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0x0 SWAP1 PUSH4 0x1E3B4145 SWAP1 PUSH1 0x44 ADD PUSH2 0x103C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E7C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2E90 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2EC8 JUMPI PUSH2 0x2EC8 PUSH2 0x45DB JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2ED9 JUMPI PUSH2 0x2ED9 PUSH2 0x45DB JUMP JUMPDEST DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x0 PUSH1 0x40 SWAP4 DUP5 ADD DUP2 SWAP1 MSTORE SWAP2 DUP3 MSTORE PUSH1 0x35 SWAP1 MSTORE DUP2 SWAP1 KECCAK256 SWAP1 MLOAD PUSH32 0x40E95DE600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 SWAP3 POP PUSH20 0x0 SWAP2 PUSH4 0x40E95DE6 SWAP2 PUSH2 0x2F59 SWAP2 PUSH1 0x34 SWAP2 PUSH1 0x36 SWAP2 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x4645 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2F76 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F9A SWAP2 SWAP1 PUSH2 0x46AB JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x2FB0 PUSH2 0x3130 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x3025 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD94 SWAP2 SWAP1 PUSH2 0x45C8 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH22 0x1000000000000000000000000000000000000000000 SWAP1 DIV PUSH2 0xFFFF AND ISZERO ISZERO DUP1 PUSH2 0x30A1 JUMPI POP PUSH1 0x0 DUP1 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH32 0x4CB2B152C1B54CE671907A93C300FD5AA72383A9D4EC19A81E3333632AE92E00 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND SWAP2 AND EQ JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3832000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x310F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD94 SWAP2 SWAP1 PUSH2 0x45C8 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 CALLDATALOAD SWAP1 SSTORE JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x631ADFCA PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3198 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x31BC SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3130000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3234 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD94 SWAP2 SWAP1 PUSH2 0x45C8 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x327D JUMPI POP POP PUSH1 0x2 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP4 ADD SLOAD PUSH2 0x1185 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x32BB SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x3631 JUMP JUMPDEST SWAP1 PUSH2 0x363E JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3325 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3349 SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x726600CE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x726600CE SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x33A8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x33CC SWAP2 SWAP1 PUSH2 0x4813 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3600000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3234 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD94 SWAP2 SWAP1 PUSH2 0x45C8 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3498 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x34BC SWAP2 SWAP1 PUSH2 0x44F1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x351B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x353F SWAP2 SWAP1 PUSH2 0x4813 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3234 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD94 SWAP2 SWAP1 PUSH2 0x45C8 JUMP JUMPDEST PUSH1 0x3 DUP2 ADD SLOAD PUSH1 0x0 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND TIMESTAMP DUP2 EQ ISZERO PUSH2 0x35F3 JUMPI POP POP PUSH1 0x1 ADD SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD PUSH2 0x1185 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH2 0x32BB SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP5 PUSH2 0x3695 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1185 DUP4 DUP4 TIMESTAMP PUSH2 0x36DA JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x3673 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x36A9 PUSH5 0xFFFFFFFFFF DUP5 AND TIMESTAMP PUSH2 0x4C34 JUMP JUMPDEST PUSH2 0x36B3 SWAP1 DUP6 PUSH2 0x4D68 JUMP JUMPDEST PUSH4 0x1E13380 SWAP1 DIV SWAP1 POP PUSH2 0x36D2 DUP2 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x4DD4 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x36EE PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x4C34 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x370A JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x1185 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x3740 JUMPI PUSH1 0x0 PUSH2 0x3745 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x3759 DUP11 DUP1 PUSH2 0x363E JUMP JUMPDEST DUP2 PUSH2 0x3766 JUMPI PUSH2 0x3766 PUSH2 0x4DA5 JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x3778 DUP4 DUP12 PUSH2 0x363E JUMP JUMPDEST DUP2 PUSH2 0x3785 JUMPI PUSH2 0x3785 PUSH2 0x4DA5 JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x3795 DUP7 DUP9 PUSH2 0x4D68 JUMP JUMPDEST PUSH2 0x379F SWAP2 SWAP1 PUSH2 0x4D68 JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x37B3 DUP9 DUP11 PUSH2 0x4D68 JUMP JUMPDEST PUSH2 0x37BD SWAP2 SWAP1 PUSH2 0x4D68 JUMP JUMPDEST PUSH2 0x37C7 SWAP2 SWAP1 PUSH2 0x4D68 JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x37DE DUP11 DUP16 PUSH2 0x4D68 JUMP JUMPDEST PUSH2 0x37E8 SWAP2 SWAP1 PUSH2 0x4DEC JUMP JUMPDEST PUSH2 0x37FE SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x4DD4 JUMP JUMPDEST PUSH2 0x3808 SWAP2 SWAP1 PUSH2 0x4DD4 JUMP JUMPDEST PUSH2 0x3812 SWAP2 SWAP1 PUSH2 0x4DD4 JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x382D SWAP1 PUSH2 0x4742 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x384F JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x3895 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x3868 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x3895 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x3895 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x3895 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x387A JUMP JUMPDEST POP PUSH2 0x38A1 SWAP3 SWAP2 POP PUSH2 0x38A5 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x38A1 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x38A6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3234 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x38DA DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3234 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3905 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x3910 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x3920 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x3930 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x3947 DUP2 PUSH2 0x38DF JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x38DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x38DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x3995 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x39A0 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH2 0x39B7 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP6 POP PUSH2 0x39C5 PUSH1 0x60 DUP11 ADD PUSH2 0x3955 JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD SWAP4 POP PUSH2 0x39DA PUSH1 0xA0 DUP11 ADD PUSH2 0x3967 JUMP JUMPDEST SWAP3 POP PUSH1 0xC0 DUP10 ADD CALLDATALOAD SWAP2 POP PUSH1 0xE0 DUP10 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 SWAP1 SWAP4 SWAP7 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3A0A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3A15 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3A25 DUP2 PUSH2 0x38BA JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3A42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1185 DUP3 PUSH2 0x3967 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3A60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3A6B DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3A92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3AAB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1185 DUP2 PUSH2 0x38BA JUMP JUMPDEST DUP2 MLOAD MLOAD DUP2 MSTORE PUSH2 0x1E0 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x3AE3 PUSH1 0x20 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x3B07 PUSH1 0x40 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x3B2B PUSH1 0x60 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x3B4F PUSH1 0x80 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x3B73 PUSH1 0xA0 DUP5 ADD DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0x3B8C PUSH1 0xC0 DUP5 ADD DUP3 PUSH5 0xFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xE0 DUP4 ADD MLOAD PUSH2 0x3BA2 PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH2 0x100 DUP4 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x120 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x140 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x160 DUP1 DUP6 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE PUSH2 0x180 DUP1 DUP5 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1A0 DUP1 DUP6 ADD MLOAD DUP3 AND SWAP1 DUP5 ADD MSTORE PUSH2 0x1C0 SWAP4 DUP5 ADD MLOAD AND SWAP3 SWAP1 SWAP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x3C38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3C50 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x3C68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x3C88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x3C93 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x3CA3 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3CC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3CD2 DUP10 DUP3 DUP11 ADD PUSH2 0x3C26 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0x3CE5 SWAP1 POP PUSH1 0x80 DUP9 ADD PUSH2 0x3955 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3D03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1185 DUP3 PUSH2 0x3955 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3D22 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x3D2D DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x3D4B DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3D69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3D74 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3A25 DUP2 PUSH2 0x38DF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3D9A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x3DA5 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x3DBC DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP2 POP PUSH2 0x3DCA PUSH1 0x60 DUP7 ADD PUSH2 0x3955 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3DEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3DF5 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x3E0C DUP2 PUSH2 0x38BA JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3E3D JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x3E21 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x3E4F JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP5 MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0xA0 DUP1 DUP5 ADD MSTORE PUSH2 0x36D2 PUSH1 0xC0 DUP5 ADD DUP3 PUSH2 0x3E17 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3EF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x3EFB DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x3F0B DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x3F1B DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x3F2B DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH2 0x3947 DUP2 PUSH2 0x38BA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3F4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3F59 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x3F79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3F91 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x3C68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3FBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3FD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3FE2 DUP6 DUP3 DUP7 ADD PUSH2 0x3F67 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x4006 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4011 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH2 0x3F2B PUSH1 0x60 DUP8 ADD PUSH2 0x3955 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x404E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4057 DUP13 PUSH2 0x38CF JUMP JUMPDEST SWAP11 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0x20 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x4073 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4083 DUP15 PUSH1 0x20 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x3F67 JUMP JUMPDEST SWAP1 SWAP12 POP SWAP10 POP PUSH1 0x40 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x4099 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x40A9 DUP15 PUSH1 0x40 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x3F67 JUMP JUMPDEST SWAP1 SWAP10 POP SWAP8 POP PUSH1 0x60 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x40BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x40CF DUP15 PUSH1 0x60 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x3F67 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH2 0x40E0 PUSH1 0x80 DUP15 ADD PUSH2 0x38CF JUMP JUMPDEST SWAP5 POP DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x40F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4104 DUP14 PUSH1 0xA0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x3C26 JUMP JUMPDEST SWAP1 SWAP4 POP SWAP2 POP PUSH2 0x4115 PUSH1 0xC0 DUP14 ADD PUSH2 0x3955 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x38DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x415A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4163 DUP4 PUSH2 0x4127 JUMP JUMPDEST SWAP2 POP PUSH2 0x4171 PUSH1 0x20 DUP5 ADD PUSH2 0x4127 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x418F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x419A DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x41AA DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD 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 0x41FC JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x41D7 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x425A JUMPI PUSH2 0x425A PUSH2 0x4208 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x42A7 JUMPI PUSH2 0x42A7 PUSH2 0x4208 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x42C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x42CB DUP4 PUSH2 0x3967 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP1 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x42E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP6 ADD SWAP1 PUSH1 0xA0 DUP3 DUP9 SUB SLT ISZERO PUSH2 0x42FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4305 PUSH2 0x4237 JUMP JUMPDEST PUSH2 0x430E DUP4 PUSH2 0x3955 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x431B DUP5 DUP5 ADD PUSH2 0x3955 JUMP JUMPDEST DUP5 DUP3 ADD MSTORE PUSH2 0x432B PUSH1 0x40 DUP5 ADD PUSH2 0x3955 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH2 0x433E DUP2 PUSH2 0x38BA JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x4355 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP5 ADD SWAP4 POP POP DUP8 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x436A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD DUP3 DUP2 GT ISZERO PUSH2 0x437C JUMPI PUSH2 0x437C PUSH2 0x4208 JUMP JUMPDEST PUSH2 0x43AC DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x4260 JUMP JUMPDEST SWAP3 POP DUP1 DUP4 MSTORE DUP9 DUP6 DUP3 DUP7 ADD ADD GT ISZERO PUSH2 0x43C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP6 DUP6 ADD DUP7 DUP6 ADD CALLDATACOPY PUSH1 0x0 DUP6 DUP3 DUP6 ADD ADD MSTORE POP DUP2 PUSH1 0x80 DUP3 ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x4400 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x440B DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0x441B DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0x442B DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP5 SWAP6 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP6 POP PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP5 PUSH1 0xA0 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x4469 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x4474 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD SWAP6 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD PUSH2 0x39C5 DUP2 PUSH2 0x38BA JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 SUB PUSH1 0x40 DUP2 SLT ISZERO PUSH2 0x44A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x44B1 DUP2 PUSH2 0x38BA JUMP JUMPDEST SWAP3 POP PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP3 ADD SLT ISZERO PUSH2 0x44E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 DUP4 ADD SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4503 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1185 DUP2 PUSH2 0x38BA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 ADD SWAP1 POP DUP7 DUP3 MSTORE DUP6 PUSH1 0x20 DUP4 ADD MSTORE DUP5 PUSH1 0x40 DUP4 ADD MSTORE DUP4 PUSH1 0x60 DUP4 ADD MSTORE DUP3 MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH1 0xC0 DUP6 ADD MSTORE DUP1 PUSH1 0x60 DUP7 ADD MLOAD AND PUSH1 0xE0 DUP6 ADD MSTORE POP POP PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x457C DUP2 DUP6 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD ISZERO ISZERO PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0xC0 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH2 0x140 DUP7 ADD MSTORE PUSH1 0xE0 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x160 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x180 DUP6 ADD MSTORE SWAP1 POP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1185 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3E17 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x4641 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x100 DUP3 ADD SWAP1 POP DUP6 DUP3 MSTORE DUP5 PUSH1 0x20 DUP4 ADD MSTORE DUP4 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x468A PUSH1 0xA0 DUP6 ADD DUP3 PUSH2 0x460A JUMP JUMPDEST POP PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0x80 SWAP1 SWAP3 ADD MLOAD ISZERO ISZERO PUSH1 0xE0 SWAP1 SWAP2 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x46BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x4712 PUSH2 0x120 DUP5 ADD DUP3 PUSH2 0x3E17 JUMP JUMPDEST SWAP1 POP PUSH2 0xFFFF PUSH1 0x80 DUP6 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xA0 DUP5 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0xC0 DUP5 ADD MLOAD PUSH2 0x100 DUP5 ADD MSTORE DUP1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x4756 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x32C1 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x120 DUP3 ADD SWAP1 POP DUP5 DUP3 MSTORE DUP4 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0x60 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE DUP1 PUSH1 0x80 DUP6 ADD MLOAD AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0xA0 DUP4 ADD MLOAD PUSH2 0x47F9 PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0xC0 DUP4 ADD MLOAD PUSH2 0xFFFF DUP2 AND PUSH2 0x100 DUP5 ADD MSTORE POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4825 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1185 DUP2 PUSH2 0x38DF JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x4877 JUMPI PUSH2 0x4877 PUSH2 0x4830 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD PUSH2 0x142F PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x460A JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE SWAP1 DUP3 ADD DUP4 SWAP1 MSTORE PUSH1 0x0 SWAP1 DUP5 SWAP1 PUSH1 0x60 DUP5 ADD DUP4 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x48F7 JUMPI DUP4 CALLDATALOAD PUSH2 0x48DC DUP2 PUSH2 0x38BA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x48C9 JUMP JUMPDEST POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x40 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x200 DUP2 ADD PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0xC0 DUP5 ADD MSTORE POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 PUSH2 0x4978 DUP2 DUP6 ADD DUP4 PUSH2 0x460A JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x120 PUSH2 0x4991 DUP2 DUP7 ADD DUP5 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xC0 DUP7 ADD MLOAD SWAP3 POP PUSH2 0x140 PUSH2 0x49A8 DUP2 DUP8 ADD DUP6 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MLOAD PUSH2 0x160 DUP8 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP3 DUP8 ADD MLOAD PUSH2 0x180 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH2 0x1A0 DUP8 ADD MSTORE SWAP1 DUP7 ADD MLOAD PUSH1 0xFF AND PUSH2 0x1C0 DUP7 ADD MSTORE SWAP1 DUP6 ADD MLOAD SWAP1 DUP2 AND PUSH2 0x1E0 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x45BD JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4A30 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x4A0B JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4A30 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x4A4F JUMP JUMPDEST DUP6 DUP2 MSTORE DUP5 PUSH1 0x20 DUP3 ADD MSTORE DUP4 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x4A9D PUSH1 0xA0 DUP3 ADD DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x1C0 DUP1 PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x4ABB PUSH2 0x260 DUP6 ADD DUP4 PUSH2 0x49F7 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP6 ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 DUP1 DUP7 DUP6 SUB ADD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x4AF7 DUP5 DUP4 PUSH2 0x4A3B JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP2 POP PUSH2 0x100 DUP2 DUP8 DUP7 SUB ADD DUP2 DUP9 ADD MSTORE PUSH2 0x4B16 DUP6 DUP5 PUSH2 0x4A3B JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP9 ADD MLOAD SWAP3 POP PUSH2 0x120 PUSH2 0x4B36 DUP2 DUP10 ADD DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP10 ADD MLOAD SWAP4 POP PUSH2 0x140 DUP4 DUP10 DUP9 SUB ADD DUP2 DUP11 ADD MSTORE PUSH2 0x4B53 DUP8 DUP7 PUSH2 0x3E17 JUMP JUMPDEST SWAP7 POP PUSH1 0xC0 DUP11 ADD MLOAD SWAP5 POP PUSH2 0x160 SWAP4 POP PUSH2 0x4B70 DUP5 DUP11 ADD DUP7 PUSH2 0xFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP11 ADD MLOAD SWAP5 POP PUSH2 0x180 DUP6 DUP2 DUP12 ADD MSTORE DUP4 DUP12 ADD MLOAD SWAP6 POP PUSH2 0x1A0 SWAP4 POP DUP6 DUP5 DUP12 ADD MSTORE DUP3 DUP12 ADD MLOAD DUP8 DUP12 ADD MSTORE DUP2 DUP12 ADD MLOAD PUSH2 0x1E0 DUP12 ADD MSTORE DUP5 DUP12 ADD MLOAD SWAP7 POP PUSH2 0x4BBD PUSH2 0x200 DUP12 ADD DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP11 ADD MLOAD PUSH1 0xFF DUP2 AND PUSH2 0x220 DUP12 ADD MSTORE SWAP6 POP PUSH2 0x4BD4 SWAP2 POP POP JUMP JUMPDEST DUP8 ADD MLOAD DUP1 ISZERO ISZERO PUSH2 0x240 DUP9 ADD MSTORE SWAP3 POP PUSH2 0x48F7 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x4C03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 MLOAD SWAP6 POP PUSH1 0x20 DUP8 ADD MLOAD SWAP5 POP PUSH1 0x40 DUP8 ADD MLOAD SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP3 POP PUSH1 0x80 DUP8 ADD MLOAD SWAP2 POP PUSH1 0xA0 DUP8 ADD MLOAD SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x4C46 JUMPI PUSH2 0x4C46 PUSH2 0x4830 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x4CAC JUMPI PUSH2 0x4CAC PUSH2 0x4830 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A0 DUP3 ADD SWAP1 POP DUP7 DUP3 MSTORE DUP6 PUSH1 0x20 DUP4 ADD MSTORE DUP5 PUSH1 0x40 DUP4 ADD MSTORE DUP4 PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x4D09 PUSH1 0xC0 DUP5 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST POP PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x100 DUP2 DUP2 DUP6 ADD MSTORE PUSH1 0xA0 DUP6 ADD MLOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0xC0 DUP6 ADD MLOAD PUSH2 0x140 DUP6 ADD MSTORE PUSH1 0xE0 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x4D54 PUSH2 0x160 DUP6 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP5 ADD MLOAD PUSH1 0xFF DUP2 AND PUSH2 0x180 DUP6 ADD MSTORE SWAP1 POP PUSH2 0x45BD JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x4DA0 JUMPI PUSH2 0x4DA0 PUSH2 0x4830 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x4DE7 JUMPI PUSH2 0x4DE7 PUSH2 0x4830 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x4E22 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DIV NOT 0xBE EQ 0xB0 MULMOD LOG0 SAR 0xE6 CALLDATASIZE MSIZE CALL NUMBER 0xE2 LOG2 JUMPI 0x2A 0xEE 0xEA STATICCALL 0xFB PUSH14 0x79B08B2F7C1FAA5810B664736F6C PUSH4 0x4300080A STOP CALLER ","sourceMap":"1828:19453:94:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10083:755;;;;;;:::i;:::-;;:::i;:::-;;1941:43;;1981:3;1941:43;;;;;1320:25:201;;;1308:2;1293:18;1941:43:94;;;;;;;;5034:654;;;;;;:::i;:::-;;:::i;1988:58::-;;;;;;;;-1:-1:-1;;;;;2688:55:201;;;2670:74;;2658:2;2643:18;1988:58:94;2493:257:201;15738:122:94;15833:22;;;;15738:122;;;3055:34:201;3043:47;;;3025:66;;3013:2;2998:18;15738:122:94;2879:218:201;17958:385:94;;;;;;:::i;:::-;;:::i;15596:114::-;15687:18;;15596:114;;19799:411;;;;;;:::i;:::-;;:::i;8616:509::-;;;;;;:::i;:::-;;:::i;18772:152::-;;;;;;:::i;:::-;;:::i;12875:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13005:16:94;;;;;;;:9;:16;;;;;;;;;12998:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12998:23:94;;;;;;;;;-1:-1:-1;12998:23:94;;;;;;;;;-1:-1:-1;12998:23:94;;;;;;;;;;-1:-1:-1;12998:23:94;;;;;;;;;;-1:-1:-1;12998:23:94;;;;;;;;;-1:-1:-1;12998:23:94;;;;;;;;;-1:-1:-1;12998:23:94;;;;12875:151;;;;;;;;:::i;14397:168::-;;;;;;:::i;:::-;;:::i;12077:604::-;;;;;;:::i;:::-;;:::i;14010:167::-;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;14154:18:94;;;;;;:12;:18;;;;;14147:25;;;;;;;;;;;;14010:167;;;;8476:13:201;;8458:32;;8446:2;8431:18;14010:167:94;8234:262:201;15288:109:94;;;;;;:::i;:::-;15375:17;;15353:7;15375:17;;;:13;:17;;;;;;-1:-1:-1;;;;;15375:17:94;;15288:109;7220:523;;;;;;:::i;:::-;;:::i;9651:404::-;;;;;;:::i;:::-;;:::i;4601:405::-;;;;;;:::i;:::-;;:::i;17775:155::-;;;;;;:::i;:::-;;:::i;5716:559::-;;;;;;:::i;:::-;;:::i;3961:334::-;;;;;;:::i;:::-;;:::i;15888:133::-;15989:27;;;;;;;15888:133;;19613:158;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;17013:734::-;;;;;;:::i;:::-;;:::i;9153:268::-;;;;;;:::i;:::-;;:::i;12709:138::-;;;;;;:::i;:::-;;:::i;6303:889::-;;;;;;:::i;:::-;;:::i;10866:1183::-;;;;;;:::i;:::-;;:::i;18952:278::-;;;;;;:::i;:::-;;:::i;13054:721::-;;;;;;:::i;:::-;;:::i;:::-;;;;16946:25:201;;;17002:2;16987:18;;16980:34;;;;17030:18;;;17023:34;;;;17088:2;17073:18;;17066:34;17131:3;17116:19;;17109:35;17175:3;17160:19;;17153:35;16933:3;16918:19;13054:721:94;16659:535:201;13803:179:94;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;13947:16:94;;;;;;:9;:16;;;;;13940:37;;;;;;;;;;;;13803:179;3720:213;;;;;;:::i;:::-;;:::i;9449:174::-;;;;;;:::i;:::-;;:::i;20602:180::-;;;;;;:::i;:::-;;:::i;14205:164::-;;;;;;:::i;:::-;;:::i;14593:667::-;;;:::i;:::-;;;;;;;:::i;19258:327::-;;;;;;:::i;:::-;;:::i;16211:774::-;;;;;;:::i;:::-;;:::i;4323:250::-;;;;;;:::i;:::-;;:::i;20394:180::-;;;;;;:::i;:::-;;:::i;15425:143::-;15532:31;;;;15425:143;;20238:128;;;;;;:::i;:::-;-1:-1:-1;;;;;20336:25:94;20314:7;20336:25;;;:19;:25;;;;;;;;;20238:128;7771:817;;;;;;:::i;:::-;;:::i;18371:373::-;;;;;;:::i;:::-;;:::i;16049:134::-;;;5284:3:72;23358:38:201;;23346:2;23331:18;16049:134:94;23214:188:201;10083:755:94;10261:16;:39;10308:9;10325:13;10346:12;10366:16;10390:437;;;;;;;;10454:14;;;;;;;;;;;10390:437;;;;;;10491:11;10390:437;;;;10529:15;-1:-1:-1;;;;;10390:437:94;;;;;10565:9;-1:-1:-1;;;;;10390:437:94;;;;;10590:4;-1:-1:-1;;;;;10390:437:94;;;;;10619:13;10390:437;;;;;;10655:18;-1:-1:-1;;;;;10655:33:94;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10390:437:94;;;;;10719:25;;;;;;;:19;10390:437;10719:25;;;;;;;;;;;10390:437;;;;10775:43;;;;;;;10390:437;;;;;10775:18;:41;;;;;;:43;;;;;10390:437;10775:43;;;;;:41;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10390:437:94;;;;10261:572;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10083:755;;;;;:::o;5034:654::-;5265:150;;;;;5303:10;5265:150;;;25883:34:201;5329:4:94;25933:18:201;;;25926:43;25985:18;;;25978:34;;;26028:18;;;26021:34;;;26104:4;26092:17;;26071:19;;;26064:46;26126:19;;;26119:35;;;26170:19;;;26163:35;;;-1:-1:-1;;;;;5265:30:94;;;;;25794:19:201;;5265:150:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;5492:24:94;;;;;;;:12;:24;;;;;;;;;5524:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5421:262;;;;;5454:9;5421:262;;;26637:25:201;5471:13:94;26678:18:201;;;26671:34;26721:18;;;26714:34;;;;26849:13;;26845:22;;26825:18;;;26818:50;26905:22;26884:19;;;26877:51;26969:22;;26965:31;;;26944:19;;;26937:60;27038:22;27034:35;;;27013:19;;;27006:64;5421:11:94;;:25;;26609:19:201;;5421:262:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5034:654;;;;;;;;:::o;17958:385::-;2178:23;:21;:23::i;:::-;18143:29:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;-1:-1:-1;;;;;18122:19:94;::::1;18114:59;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1::0;;;;;;18187:16:94;::::1;;::::0;;;:9:::1;:16;::::0;;;;:19:::1;;::::0;;;::::1;;;:24:::0;::::1;::::0;:53:::1;;-1:-1:-1::0;18215:16:94::1;::::0;;:13:::1;:16;::::0;;;-1:-1:-1;;;;;18215:25:94;;::::1;:16:::0;::::1;:25;18187:53;18242:23;;;;;;;;;;;;;;;;::::0;18179:87:::1;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;18272:16:94;;::::1;;::::0;;;:9:::1;:16;::::0;;;;:44:::1;;:66:::0;;;::::1;::::0;;;::::1;;::::0;;17958:385::o;19799:411::-;19871:10;:30;19909:9;19926:13;19947:16;19971:19;19998:12;:24;20011:10;-1:-1:-1;;;;;19998:24:94;-1:-1:-1;;;;;19998:24:94;;;;;;;;;;;;20030:169;;;;;;;;20091:14;;;;;;;;;;;20030:169;;;;;;20123:18;-1:-1:-1;;;;;20123:33:94;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20030:169:94;;;;;20180:10;20030:169;;;;;19871:334;;;;;;;;;;;;;;;;;;;27877:25:201;;;27933:2;27918:18;;;27911:34;;;;27976:2;27961:18;;;27954:34;;;;28019:2;28004:18;;27997:34;;;;28062:3;28047:19;;28040:35;28112:13;;28106:3;28091:19;;28084:42;28173:15;;;28167:22;-1:-1:-1;;;;;28163:71:201;28157:3;28142:19;;28135:100;28282:15;28276:22;28300:4;28272:33;28266:3;28251:19;;28244:62;27864:3;27849:19;;27306:1006;19871:334:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19799:411;:::o;8616:509::-;8748:7;8776:11;:24;8810:9;8829:13;8852:12;:24;8865:10;-1:-1:-1;;;;;8852:24:94;-1:-1:-1;;;;;8852:24:94;;;;;;;;;;;;8886:226;;;;;;;;8934:5;-1:-1:-1;;;;;8886:226:94;;;;;8959:6;8886:226;;;;9022:16;8995:44;;;;;;;;:::i;:::-;8886:226;;;;;;;;:::i;:::-;;;9063:10;8886:226;;;;9097:4;8886:226;;;;;8776:344;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8763:357;;8616:509;;;;;;:::o;18772:152::-;2178:23;:21;:23::i;:::-;18887:18:::1;:32:::0;18772:152::o;14397:168::-;-1:-1:-1;;;;;14524:16:94;;14502:7;14524:16;;;:9;:16;;;;;:36;;:34;:36::i;:::-;14517:43;14397:168;-1:-1:-1;;14397:168:94:o;12077:604::-;12256:50;12309:293;;;;;;;;12366:15;-1:-1:-1;;;;;12309:293:94;;;;;12396:5;-1:-1:-1;;;;;12309:293:94;;;;;12417:6;12309:293;;;;12439:6;;12309:293;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12309:293:94;;;-1:-1:-1;;;12309:293:94;;;;;;;;;;;12515:27;;;;;;;;12309:293;;;;;;;;12573:22;;12309:293;;;;;;;;-1:-1:-1;;;;;12646:16:94;;;;:9;:16;;;;;12608:68;;;;;12256:346;;-1:-1:-1;12608:14:94;;:37;;:68;;12256:346;;12608:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12250:431;12077:604;;;;;;:::o;7220:523::-;7365:7;7393:11;:24;7427:9;7446:13;7469:12;:24;7482:10;-1:-1:-1;;;;;7469:24:94;-1:-1:-1;;;;;7469:24:94;;;;;;;;;;;;7503:227;;;;;;;;7551:5;-1:-1:-1;;;;;7503:227:94;;;;;7576:6;7503:227;;;;7639:16;7612:44;;;;;;;;:::i;:::-;7503:227;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;7503:227:94;;;;;;-1:-1:-1;7503:227:94;;;;;7393:345;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7380:358;7220:523;-1:-1:-1;;;;;7220:523:94:o;9651:404::-;9769:11;:41;9818:9;9835:13;9856:16;9880:12;:24;9893:10;-1:-1:-1;;;;;9880:24:94;-1:-1:-1;;;;;9880:24:94;;;;;;;;;;;;9912:5;9925:15;9948:14;;;;;;;;;;;9970:18;-1:-1:-1;;;;;9970:33:94;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10033:10;10013:31;;;;:19;:31;;;;;;;;9769:281;;;;;;;;;;;;;31500:25:201;;;;31541:18;;;31534:34;;;;31584:18;;;31577:34;;;;31627:18;;;31620:34;;;;-1:-1:-1;;;;;31752:15:201;;;31731:19;;;31724:44;31812:14;31805:22;31784:19;;;31777:51;31877:6;31865:19;;;31844;;;31837:48;31922:15;31901:19;;;31894:44;10013:31:94;;31954:19:201;;;31947:46;31472:19;;9769:281:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9651:404;;:::o;4601:405::-;-1:-1:-1;;;;;4810:24:94;;;;;;;:12;:24;;;;;;;;;4842:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4739:262;;;;;4772:9;4739:262;;;26637:25:201;4789:13:94;26678:18:201;;;26671:34;26721:18;;;26714:34;;;;26849:13;;26845:22;;26825:18;;;26818:50;26905:22;26884:19;;;26877:51;26969:22;;26965:31;;;26944:19;;;26937:60;27038:22;27034:35;;;27013:19;;;27006:64;4739:11:94;;:25;;26609:19:201;;4739:262:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4601:405;;;;:::o;17775:155::-;2178:23;:21;:23::i;:::-;17864:61:::1;::::0;;;;17893:9:::1;17864:61;::::0;::::1;32291:25:201::0;17904:13:94::1;32332:18:201::0;;;32325:34;-1:-1:-1;;;;;32395:55:201;;32375:18;;;32368:83;17864:9:94::1;::::0;:28:::1;::::0;32264:18:201;;17864:61:94::1;32004:453:201::0;5716:559:94;5826:7;5854:11;:27;5891:9;5910:13;5933:16;5959:12;:24;5972:10;-1:-1:-1;;;;;5959:24:94;-1:-1:-1;;;;;5959:24:94;;;;;;;;;;;;5993:269;;;;;;;;6044:5;-1:-1:-1;;;;;5993:269:94;;;;;6069:6;5993:269;;;;6091:2;-1:-1:-1;;;;;5993:269:94;;;;;6120:14;;;;;;;;;;;5993:269;;;;;;6154:18;-1:-1:-1;;;;;6154:33:94;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5993:269:94;;;;;6240:10;6220:31;;;;:19;5993:269;6220:31;;;;;;;;;;;;;5993:269;;;;;;;5854:416;;;;;;;;;;;;;32974:25:201;;;;33015:18;;;33008:34;;;;33058:18;;;33051:34;;;;33101:18;;;33094:34;;;;33230:13;;33226:22;;33205:19;;;33198:51;33292:15;;;33286:22;33265:19;;;33258:51;33356:15;;;33350:22;33346:31;;33325:19;;;33318:60;33116:2;33421:15;;33415:22;33394:19;;;33387:51;33220:3;33485:16;;33479:23;33475:32;33454:19;;;33447:61;33280:3;33555:16;33549:23;33545:34;33524:19;;;33517:63;32946:19;;5854:416:94;32462:1124:201;3961:334:94;2468:13;:11;:13::i;:::-;-1:-1:-1;;;;;4195:24:94;;::::1;;::::0;;;:12:::1;:24;::::0;;;;;;4118:172;;;;;4157:9:::1;4118:172;::::0;::::1;34025:25:201::0;4174:13:94::1;34066:18:201::0;;;34059:34;34109:18;;;34102:34;;;;34233:15;;;34213:18;;;34206:43;34265:19;;;34258:35;;;34309:19;;;34302:44;34395:6;34383:19;;34362;;;34355:48;4118:11:94::1;::::0;:31:::1;::::0;33997:19:201;;4118:172:94::1;33591:818:201::0;19613:158:94;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19746:20:94;;;;;;;:16;:20;;;;;;;;;19739:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19739:27:94;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19613:158;;;:::o;17013:734::-;2178:23;:21;:23::i;:::-;17253:9:::1;:28;17291:9;17310:13;17333:364;;;;;;;;17380:5;-1:-1:-1::0;;;;;17333:364:94::1;;;;;17412:13;-1:-1:-1::0;;;;;17333:364:94::1;;;;;17456:17;-1:-1:-1::0;;;;;17333:364:94::1;;;;;17506:19;-1:-1:-1::0;;;;;17333:364:94::1;;;;;17566:27;-1:-1:-1::0;;;;;17333:364:94::1;;;;;17620:14;;;;;;;;;;;17333:364;;;;;;17665:21;5284:3:72::0;;16049:134:94;17665:21:::1;17333:364;;;;::::0;17253:452:::1;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17242:501;;;17720:14;:16:::0;;;;::::1;;;::::0;:14:::1;:16;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;17013:734:::0;;;;;:::o;9153:268::-;-1:-1:-1;;;;;9297:16:94;;;;;;:9;:16;;;;;;;;9334:10;9321:24;;:12;:24;;;;;;9252:11;;:37;;9307:5;9393:16;9366:44;;;;;;;;:::i;:::-;9252:164;;;;;;;;;;;;;;;;;;:::i;12709:138::-;12792:50;;;;;:9;;:31;;:50;;12824:9;;12835:6;;;;12792:50;;;:::i;6303:889::-;6471:11;:25;6504:9;6521:13;6542:16;6566:12;:24;6579:10;-1:-1:-1;;;;;6566:24:94;-1:-1:-1;;;;;6566:24:94;;;;;;;;;;;;6598:583;;;;;;;;6645:5;-1:-1:-1;;;;;6598:583:94;;;;;6666:10;-1:-1:-1;;;;;6598:583:94;;;;;6698:10;-1:-1:-1;;;;;6598:583:94;;;;;6726:6;6598:583;;;;6787:16;6760:44;;;;;;;;:::i;:::-;6598:583;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;6869:4;6598:583;;;;;;;;6915:31;;;;;6598:583;;;;6971:14;;;;;;6598:583;;;;7003:35;;;;;;;6598:583;;;;;-1:-1:-1;;;;;7003:18:94;:33;;;;:35;;;;;6598:583;;7003:35;;;;;:33;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6598:583:94;;;;;7067:31;;;;;;;:19;6598:583;7067:31;;;;;;;;;;;6598:583;;;;7129:43;;;;;;;6598:583;;;;;7129:18;:41;;;;;;:43;;;;;6598:583;7129:43;;;;;:41;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6598:583:94;;;;6471:716;;;;;;;;;;;;;;;;;;;:::i;10866:1183::-;11129:44;11176:711;;;;;;;;11227:15;-1:-1:-1;;;;;11176:711:94;;;;;11258:6;;11176:711;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11176:711:94;;;-1:-1:-1;11176:711:94;;;;;;;;;;;;;;;;;;;;;;;;11281:7;;;;;;11176:711;;;11281:7;;11176:711;11281:7;11176:711;;;;;;;;;-1:-1:-1;;;11176:711:94;;;-1:-1:-1;11176:711:94;;;;;;;;;;;;;;;;;;;;;;;;11315:17;;;;;;11176:711;;;11315:17;;11176:711;11315:17;11176:711;;;;;;;;;-1:-1:-1;;;11176:711:94;;;-1:-1:-1;;;;;;11176:711:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11378:6;;;;;;11176:711;;11378:6;;;;11176:711;;;;;;;;-1:-1:-1;11176:711:94;;;-1:-1:-1;;;11176:711:94;;;;;;;;;;;;11454:27;;;;;;;;11176:711;;;;;;;;11512:22;;11176:711;;;;11574:31;;;;;11176:711;;;;11628:14;;;;;;11176:711;;;;-1:-1:-1;;;;;11677:18:94;11176:711;;;;;;;;11723:31;;;;;:19;:31;;;;;;;;;11176:711;;;;11801:34;;;;;;;11454:27;11176:711;;;;11801:32;;:34;;;;;11176:711;11801:34;;;;;;11176:711;11801:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11789:91;;;;;11862:10;11789:91;;;2670:74:201;-1:-1:-1;;;;;11789:63:94;;;;;;;2643:18:201;;11789:91:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11176:711;;;;-1:-1:-1;;;;;11995:24:94;;;;;;:12;:24;;;;;;;11894:150;;;;;11129:758;;-1:-1:-1;11894:14:94;;:31;;:150;;11933:9;;11950:13;;11971:16;;11995:24;11129:758;;11894:150;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11123:926;10866:1183;;;;;;;;;;;:::o;18952:278::-;2178:23;:21;:23::i;:::-;19117:46:::1;19169:56:::0;;::::1;::::0;::::1;19117:46:::0;::::1;19169:56;19117:22;19169:56:::0;18952:278::o;13054:721::-;13494:268;;;-1:-1:-1;;;;;13559:18:94;;;13171:27;13559:18;;;:12;:18;;;;;;;13494:268;;;;;;;;;;;;;;13604:14;;;;;;;13494:268;;;;;;;;;;;13660:35;;;;;;;13171:27;;;;;;;;;;;;13381:9;;:35;;13426:9;;13445:13;;13468:16;;-1:-1:-1;13494:268:94;;;13660:18;:33;;;;:35;;;;;;;;;;:33;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13494:268:94;;;;;13726:25;;;;;;;:19;13494:268;13726:25;;;;;;;;;;;;;13494:268;;;;;;;13381:389;;;;;;;;;;;;;43964:25:201;;;;44005:18;;;43998:34;;;;44048:18;;;44041:34;;;;44117:13;;44111:20;44091:18;;;44084:48;44175:15;;;44169:22;44148:19;;;44141:51;44227:15;;;44221:22;44341:21;;44320:19;;;44313:50;44106:2;44410:15;;44404:22;44400:31;;;44379:19;;;44372:60;44163:3;44479:16;;;44473:23;44469:34;44448:19;;;44441:63;43936:19;;13381:389:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13368:402;;;;-1:-1:-1;13368:402:94;;-1:-1:-1;13368:402:94;-1:-1:-1;13368:402:94;-1:-1:-1;13368:402:94;;-1:-1:-1;13054:721:94;-1:-1:-1;;13054:721:94:o;3720:213::-;1981:3;1217:12:71;;;;;:31;;-1:-1:-1;2436:9:71;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;45214:2:201;1202:146:71;;;45196:21:201;45253:2;45233:18;;;45226:30;45292:34;45272:18;;;45265:62;45363:16;45343:18;;;45336:44;45397:19;;1202:146:71;45012:410:201;1202:146:71;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;3828:18:94::1;-1:-1:-1::0;;;;;3816:30:94::1;:8;-1:-1:-1::0;;;;;3816:30:94::1;;3848:33;;;;;;;;;;;;;;;;::::0;3808:74:::1;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;3888:31:94::1;:40:::0;;;::::1;3922:6;3888:40;::::0;;1506:55:71;;;;1534:12;:20;;;;;;1506:55;1158:407;;3720:213:94;:::o;9449:174::-;-1:-1:-1;;;;;9588:16:94;;;;;;;:9;:16;;;;;;;9543:75;;;;;;;;45664:25:201;;;;45766:18;;;45759:43;;;;45838:15;;;45818:18;;;45811:43;9543:11:94;;:44;;45637:18:201;;9543:75:94;45427:433:201;20602:180:94;2330:16;:14;:16::i;:::-;20729:48:::1;::::0;;;;-1:-1:-1;;;;;46154:15:201;;;20729:48:94::1;::::0;::::1;46136:34:201::0;46206:15;;46186:18;;;46179:43;46238:18;;;46231:34;;;20729:9:94::1;::::0;:29:::1;::::0;46048:18:201;;20729:48:94::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20602:180:::0;;;:::o;14205:164::-;-1:-1:-1;;;;;14326:16:94;;14304:7;14326:16;;;:9;:16;;;;;:38;;:36;:38::i;14593:667::-;14712:14;;14660:16;;14712:14;;;;;14684:25;;14712:14;14802:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14802:32:94;;14770:64;;14846:9;14841:221;14865:17;14861:1;:21;14841:221;;;14929:1;14901:16;;;:13;:16;;;;;;-1:-1:-1;;;;;14901:16:94;:30;14897:159;;14984:16;;;;:13;:16;;;;;;-1:-1:-1;;;;;14984:16:94;14943:12;14956:24;14960:20;14998:1;14956:24;:::i;:::-;14943:38;;;;;;;;:::i;:::-;;;;;;:57;-1:-1:-1;;;;;14943:57:94;;;-1:-1:-1;;;;;14943:57:94;;;;;14897:159;;;15025:22;;;;:::i;:::-;;;;14897:159;14884:3;;;;:::i;:::-;;;;14841:221;;;-1:-1:-1;15180:44:94;;15159:66;;15166:12;14593:667;-1:-1:-1;14593:667:94:o;19258:327::-;2178:23;:21;:23::i;:::-;19512:30:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;19503:7:::1;::::0;::::1;19495:48;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;19549:20:94::1;::::0;::::1;;::::0;;;:16:::1;:20;::::0;;;;;;;;:31;;;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;19549:31:94::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;19572:8;;19549:20;:31:::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;16211:774::-:0;-1:-1:-1;;;;;16428:16:94;;;;;;;:9;:16;;;;;;;;;:30;;;16460:24;;;;;;;;;;;;;;;;;;;;;16428:30;16414:10;:44;16406:79;;;;;;;;;;;;;:::i;:::-;;16491:11;:35;16534:9;16551:13;16572:16;16596:12;16616:358;;;;;;;;16666:5;-1:-1:-1;;;;;16616:358:94;;;;;16687:4;-1:-1:-1;;;;;16616:358:94;;;;;16705:2;-1:-1:-1;;;;;16616:358:94;;;;;16725:6;16616:358;;;;16760:17;16616:358;;;;16804:15;16616:358;;;;16844:14;;;;;;;;;;;16616:358;;;;;;16876:18;-1:-1:-1;;;;;16876:33:94;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16616:358:94;;;;;16940:25;;;;;;:19;16616:358;16940:25;;;;;;;;;;;16616:358;;;;;;16491:489;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16211:774;;;;;;:::o;4323:250::-;4451:7;2468:13;:11;:13::i;:::-;-1:-1:-1;;;;;4511:16:94;::::1;;::::0;;;:9:::1;:16;::::0;;;;;;4549:18:::1;::::0;4479:89;;;;;::::1;::::0;::::1;48614:25:201::0;;;;48655:18;;;48648:83;;;;48747:18;;;48740:34;;;48790:18;;;48783:34;;;48833:19;;;48826:35;4479:11:94::1;::::0;:31:::1;::::0;48586:19:201;;4479:89:94::1;48320:547:201::0;20394:180:94;2178:23;:21;:23::i;:::-;20507:62:::1;::::0;;;;20552:9:::1;20507:62;::::0;::::1;49106:25:201::0;-1:-1:-1;;;;;49167:55:201;;49147:18;;;49140:83;20507:9:94::1;::::0;:44:::1;::::0;49079:18:201;;20507:62:94::1;48872:357:201::0;7771:817:94;8032:166;;;;;8072:10;8032:166;;;25883:34:201;8100:4:94;25933:18:201;;;25926:43;25985:18;;;25978:34;;;26028:18;;;26021:34;;;26104:4;26092:17;;26071:19;;;26064:46;26126:19;;;26119:35;;;26170:19;;;26163:35;;;8009:7:94;;-1:-1:-1;;;;;8032:30:94;;;;;25794:19:201;;8032:166:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8218:42;8263:215;;;;;;;;8309:5;-1:-1:-1;;;;;8263:215:94;;;;;8332:6;8263:215;;;;8393:16;8366:44;;;;;;;;:::i;:::-;8263:215;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;8263:215:94;;;;;;;;;-1:-1:-1;8263:215:94;;;;;;;8544:24;;;:12;:24;;;;;8493:84;;;;;8218:260;;-1:-1:-1;8493:11:94;;:24;;:84;;8518:9;;8529:13;;8218:260;;8493:84;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8486:91;7771:817;-1:-1:-1;;;;;;;;;;7771:817:94:o;18371:373::-;2178:23;:21;:23::i;:::-;18564:29:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;-1:-1:-1;;;;;18543:19:94;::::1;18535:59;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;18608:16:94;::::1;;::::0;;;:9:::1;:16;::::0;;;;:19:::1;;::::0;;;::::1;;;:24:::0;::::1;::::0;:53:::1;;-1:-1:-1::0;18636:16:94::1;::::0;;:13:::1;:16;::::0;;;-1:-1:-1;;;;;18636:25:94;;::::1;:16:::0;::::1;:25;18608:53;18663:23;;;;;;;;;;;;;;;;::::0;18600:87:::1;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;18693:16:94;;;::::1;;::::0;;;:9:::1;:16;::::0;;;;49418:19:201;;49405:33;;18371:373:94:o;2497:184::-;2617:10;-1:-1:-1;;;;;2573:54:94;:18;-1:-1:-1;;;;;2573:38:94;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2573:54:94;;2635:35;;;;;;;;;;;;;;;;;2558:118;;;;;;;;;;;;;;:::i;:::-;;2497:184::o;2809:545:85:-;2940:27;;;;2906:7;;2940:27;;;;;3022:15;3009:28;;3005:345;;;-1:-1:-1;;3141:27:85;;;;;;2809:545::o;3005:345::-;3306:27;;;;3204:139;;3306:27;;;;;3204:83;;3242:33;;;;;3277:9;3204:37;:83::i;:::-;:90;;:139::i;3005:345::-;2915:439;2809:545;;;:::o;2876:177:94:-;2954:18;-1:-1:-1;;;;;2954:32:94;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2942:68;;;;;2999:10;2942:68;;;2670:74:201;-1:-1:-1;;;;;2942:56:94;;;;;;;2643:18:201;;2942:68:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3018:24;;;;;;;;;;;;;;;;;2927:121;;;;;;;;;;;;;;:::i;2685:187::-;2766:18;-1:-1:-1;;;;;2766:32:94;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2754:71;;;;;2814:10;2754:71;;;2670:74:201;-1:-1:-1;;;;;2754:59:94;;;;;;;2643:18:201;;2754:71:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2833:28;;;;;;;;;;;;;;;;;2739:128;;;;;;;;;;;;;;:::i;1895:528:85:-;2028:27;;;;1994:7;;2028:27;;;;;2110:15;2097:28;;2093:326;;;-1:-1:-1;;2229:22:85;;;;;;1895:528::o;2093:326::-;2380:22;;;;2287:125;;2380:22;;;;;2287:74;;2321:28;;;;;2351:9;2287:33;:74::i;3142:212:88:-;3256:7;3278:71;3306:4;3312:19;3333:15;3278:27;:71::i;2253:319:90:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:90;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;700:334:88:-;810:7;;881:46;899:28;;;881:15;:46;:::i;:::-;873:55;;:4;:55;:::i;:::-;376:8;961:25;;;-1:-1:-1;1006:23:88;961:25;704:4:90;1006:23:88;:::i;:::-;999:30;700:334;-1:-1:-1;;;;700:334:88:o;1780:972::-;1924:7;;1984:47;2003:28;;;1984:16;:47;:::i;:::-;1970:61;-1:-1:-1;2042:8:88;2038:50;;704:4:90;2060:21:88;;;;;2038:50;2230:7;;;2094:19;;;2266:1;2260:7;;:21;;2280:1;2260:21;;;2276:1;2270:3;:7;2260:21;2246:35;-1:-1:-1;2326:35:88;2305:17;2317:4;;2305:11;:17::i;:::-;:57;;;;;:::i;:::-;;;-1:-1:-1;376:8:88;2387:25;2305:57;2407:4;2387:19;:25::i;:::-;:44;;;;;:::i;:::-;;;-1:-1:-1;2444:18:88;2485:12;2465:17;2471:11;2465:3;:17;:::i;:::-;:32;;;;:::i;:::-;2535:1;2521:15;;;-1:-1:-1;2548:17:88;2602:14;2588:11;2568:17;2574:11;2568:3;:17;:::i;:::-;:31;;;;:::i;:::-;:48;;;;:::i;:::-;2653:1;2640:14;;;-1:-1:-1;2640:14:88;2725:10;376:8;2692:10;2699:3;2692:4;:10;:::i;:::-;2691:31;;;;:::i;:::-;2674:48;;704:4:90;2674:48:88;:::i;:::-;:61;;;;:::i;:::-;:73;;;;:::i;:::-;2667:80;1780:972;-1:-1:-1;;;;;;;;;;;1780:972:88:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:154:201;-1:-1:-1;;;;;93:5:201;89:54;82:5;79:65;69:93;;158:1;155;148:12;173:134;241:20;;270:31;241:20;270:31;:::i;:::-;173:134;;;:::o;312:118::-;398:5;391:13;384:21;377:5;374:32;364:60;;420:1;417;410:12;435:734;527:6;535;543;551;559;612:3;600:9;591:7;587:23;583:33;580:53;;;629:1;626;619:12;580:53;668:9;655:23;687:31;712:5;687:31;:::i;:::-;737:5;-1:-1:-1;794:2:201;779:18;;766:32;807:33;766:32;807:33;:::i;:::-;859:7;-1:-1:-1;918:2:201;903:18;;890:32;931:33;890:32;931:33;:::i;:::-;983:7;-1:-1:-1;1037:2:201;1022:18;;1009:32;;-1:-1:-1;1093:3:201;1078:19;;1065:33;1107:30;1065:33;1107:30;:::i;:::-;1156:7;1146:17;;;435:734;;;;;;;;:::o;1356:159::-;1423:20;;1483:6;1472:18;;1462:29;;1452:57;;1505:1;1502;1495:12;1520:156;1586:20;;1646:4;1635:16;;1625:27;;1615:55;;1666:1;1663;1656:12;1681:807;1800:6;1808;1816;1824;1832;1840;1848;1856;1909:3;1897:9;1888:7;1884:23;1880:33;1877:53;;;1926:1;1923;1916:12;1877:53;1965:9;1952:23;1984:31;2009:5;1984:31;:::i;:::-;2034:5;-1:-1:-1;2086:2:201;2071:18;;2058:32;;-1:-1:-1;2142:2:201;2127:18;;2114:32;2155:33;2114:32;2155:33;:::i;:::-;2207:7;-1:-1:-1;2233:37:201;2266:2;2251:18;;2233:37;:::i;:::-;2223:47;;2317:3;2306:9;2302:19;2289:33;2279:43;;2341:37;2373:3;2362:9;2358:19;2341:37;:::i;:::-;2331:47;;2425:3;2414:9;2410:19;2397:33;2387:43;;2477:3;2466:9;2462:19;2449:33;2439:43;;1681:807;;;;;;;;;;;:::o;3102:388::-;3170:6;3178;3231:2;3219:9;3210:7;3206:23;3202:32;3199:52;;;3247:1;3244;3237:12;3199:52;3286:9;3273:23;3305:31;3330:5;3305:31;:::i;:::-;3355:5;-1:-1:-1;3412:2:201;3397:18;;3384:32;3425:33;3384:32;3425:33;:::i;:::-;3477:7;3467:17;;;3102:388;;;;;:::o;3495:182::-;3552:6;3605:2;3593:9;3584:7;3580:23;3576:32;3573:52;;;3621:1;3618;3611:12;3573:52;3644:27;3661:9;3644:27;:::i;3682:383::-;3759:6;3767;3775;3828:2;3816:9;3807:7;3803:23;3799:32;3796:52;;;3844:1;3841;3834:12;3796:52;3883:9;3870:23;3902:31;3927:5;3902:31;:::i;:::-;3952:5;4004:2;3989:18;;3976:32;;-1:-1:-1;4055:2:201;4040:18;;;4027:32;;3682:383;-1:-1:-1;;;3682:383:201:o;4070:180::-;4129:6;4182:2;4170:9;4161:7;4157:23;4153:32;4150:52;;;4198:1;4195;4188:12;4150:52;-1:-1:-1;4221:23:201;;4070:180;-1:-1:-1;4070:180:201:o;4255:247::-;4314:6;4367:2;4355:9;4346:7;4342:23;4338:32;4335:52;;;4383:1;4380;4373:12;4335:52;4422:9;4409:23;4441:31;4466:5;4441:31;:::i;4936:2109::-;5185:13;;4588:12;4576:25;;5130:3;5115:19;;5257:4;5249:6;5245:17;5239:24;5272:54;5320:4;5309:9;5305:20;5291:12;2832:34;2821:46;2809:59;;2755:119;5272:54;;5375:4;5367:6;5363:17;5357:24;5390:56;5440:4;5429:9;5425:20;5409:14;2832:34;2821:46;2809:59;;2755:119;5390:56;;5495:4;5487:6;5483:17;5477:24;5510:56;5560:4;5549:9;5545:20;5529:14;2832:34;2821:46;2809:59;;2755:119;5510:56;;5615:4;5607:6;5603:17;5597:24;5630:56;5680:4;5669:9;5665:20;5649:14;2832:34;2821:46;2809:59;;2755:119;5630:56;;5735:4;5727:6;5723:17;5717:24;5750:56;5800:4;5789:9;5785:20;5769:14;2832:34;2821:46;2809:59;;2755:119;5750:56;;5855:4;5847:6;5843:17;5837:24;5870:55;5919:4;5908:9;5904:20;5888:14;4684:12;4673:24;4661:37;;4608:96;5870:55;;5974:4;5966:6;5962:17;5956:24;5989:55;6038:4;6027:9;6023:20;6007:14;4785:6;4774:18;4762:31;;4709:90;5989:55;-1:-1:-1;6063:6:201;6106:15;;;6100:22;-1:-1:-1;;;;;4870:54:201;;;6166:18;;;4858:67;;;;6204:6;6247:15;;;6241:22;4870:54;;6307:18;;;4858:67;6345:6;6388:15;;;6382:22;4870:54;;6448:18;;;4858:67;6486:6;6530:15;;;6524:22;4870:54;;;6591:18;;;4858:67;6629:6;6673:15;;;6667:22;2832:34;2821:46;;;6734:18;;;2809:59;;;;6772:6;6816:15;;;6810:22;2821:46;;6877:18;;;2809:59;6915:6;6959:15;;;6953:22;2821:46;7020:18;;;;2809:59;;;;4936:2109;:::o;7050:347::-;7101:8;7111:6;7165:3;7158:4;7150:6;7146:17;7142:27;7132:55;;7183:1;7180;7173:12;7132:55;-1:-1:-1;7206:20:201;;7249:18;7238:30;;7235:50;;;7281:1;7278;7271:12;7235:50;7318:4;7310:6;7306:17;7294:29;;7370:3;7363:4;7354:6;7346;7342:19;7338:30;7335:39;7332:59;;;7387:1;7384;7377:12;7332:59;7050:347;;;;;:::o;7402:827::-;7507:6;7515;7523;7531;7539;7547;7600:3;7588:9;7579:7;7575:23;7571:33;7568:53;;;7617:1;7614;7607:12;7568:53;7656:9;7643:23;7675:31;7700:5;7675:31;:::i;:::-;7725:5;-1:-1:-1;7782:2:201;7767:18;;7754:32;7795:33;7754:32;7795:33;:::i;:::-;7847:7;-1:-1:-1;7901:2:201;7886:18;;7873:32;;-1:-1:-1;7956:2:201;7941:18;;7928:32;7983:18;7972:30;;7969:50;;;8015:1;8012;8005:12;7969:50;8054:58;8104:7;8095:6;8084:9;8080:22;8054:58;:::i;:::-;8131:8;;-1:-1:-1;8028:84:201;-1:-1:-1;8185:38:201;;-1:-1:-1;8218:3:201;8203:19;;8185:38;:::i;:::-;8175:48;;7402:827;;;;;;;;:::o;8501:184::-;8559:6;8612:2;8600:9;8591:7;8587:23;8583:32;8580:52;;;8628:1;8625;8618:12;8580:52;8651:28;8669:9;8651:28;:::i;8921:525::-;9007:6;9015;9023;9031;9084:3;9072:9;9063:7;9059:23;9055:33;9052:53;;;9101:1;9098;9091:12;9052:53;9140:9;9127:23;9159:31;9184:5;9159:31;:::i;:::-;9209:5;-1:-1:-1;9261:2:201;9246:18;;9233:32;;-1:-1:-1;9312:2:201;9297:18;;9284:32;;-1:-1:-1;9368:2:201;9353:18;;9340:32;9381:33;9340:32;9381:33;:::i;:::-;8921:525;;;;-1:-1:-1;8921:525:201;;-1:-1:-1;;8921:525:201:o;9451:382::-;9516:6;9524;9577:2;9565:9;9556:7;9552:23;9548:32;9545:52;;;9593:1;9590;9583:12;9545:52;9632:9;9619:23;9651:31;9676:5;9651:31;:::i;:::-;9701:5;-1:-1:-1;9758:2:201;9743:18;;9730:32;9771:30;9730:32;9771:30;:::i;9838:529::-;9923:6;9931;9939;9947;10000:3;9988:9;9979:7;9975:23;9971:33;9968:53;;;10017:1;10014;10007:12;9968:53;10056:9;10043:23;10075:31;10100:5;10075:31;:::i;:::-;10125:5;-1:-1:-1;10177:2:201;10162:18;;10149:32;;-1:-1:-1;10233:2:201;10218:18;;10205:32;10246:33;10205:32;10246:33;:::i;:::-;10298:7;-1:-1:-1;10324:37:201;10357:2;10342:18;;10324:37;:::i;:::-;10314:47;;9838:529;;;;;;;:::o;10372:456::-;10449:6;10457;10465;10518:2;10506:9;10497:7;10493:23;10489:32;10486:52;;;10534:1;10531;10524:12;10486:52;10573:9;10560:23;10592:31;10617:5;10592:31;:::i;:::-;10642:5;-1:-1:-1;10694:2:201;10679:18;;10666:32;;-1:-1:-1;10750:2:201;10735:18;;10722:32;10763:33;10722:32;10763:33;:::i;:::-;10815:7;10805:17;;;10372:456;;;;;:::o;10833:531::-;10875:3;10913:5;10907:12;10940:6;10935:3;10928:19;10965:1;10975:162;10989:6;10986:1;10983:13;10975:162;;;11051:4;11107:13;;;11103:22;;11097:29;11079:11;;;11075:20;;11068:59;11004:12;10975:162;;;11155:6;11152:1;11149:13;11146:87;;;11221:1;11214:4;11205:6;11200:3;11196:16;11192:27;11185:38;11146:87;-1:-1:-1;11278:2:201;11266:15;11283:66;11262:88;11253:98;;;;11353:4;11249:109;;10833:531;-1:-1:-1;;10833:531:201:o;11369:695::-;11562:2;11551:9;11544:21;11525:4;11584:6;11645:2;11636:6;11630:13;11626:22;11621:2;11610:9;11606:18;11599:50;11713:2;11707;11699:6;11695:15;11689:22;11685:31;11680:2;11669:9;11665:18;11658:59;11781:2;11775;11767:6;11763:15;11757:22;11753:31;11748:2;11737:9;11733:18;11726:59;;-1:-1:-1;;;;;11844:2:201;11836:6;11832:15;11826:22;11822:71;11816:3;11805:9;11801:19;11794:100;11941:3;11933:6;11929:16;11923:23;11984:4;11977;11966:9;11962:20;11955:34;12006:52;12053:3;12042:9;12038:19;12024:12;12006:52;:::i;12069:813::-;12164:6;12172;12180;12188;12196;12249:3;12237:9;12228:7;12224:23;12220:33;12217:53;;;12266:1;12263;12256:12;12217:53;12305:9;12292:23;12324:31;12349:5;12324:31;:::i;:::-;12374:5;-1:-1:-1;12431:2:201;12416:18;;12403:32;12444:33;12403:32;12444:33;:::i;:::-;12496:7;-1:-1:-1;12555:2:201;12540:18;;12527:32;12568:33;12527:32;12568:33;:::i;:::-;12620:7;-1:-1:-1;12679:2:201;12664:18;;12651:32;12692:33;12651:32;12692:33;:::i;:::-;12744:7;-1:-1:-1;12803:3:201;12788:19;;12775:33;12817;12775;12817;:::i;12887:315::-;12955:6;12963;13016:2;13004:9;12995:7;12991:23;12987:32;12984:52;;;13032:1;13029;13022:12;12984:52;13071:9;13058:23;13090:31;13115:5;13090:31;:::i;:::-;13140:5;13192:2;13177:18;;;;13164:32;;-1:-1:-1;;;12887:315:201:o;13207:367::-;13270:8;13280:6;13334:3;13327:4;13319:6;13315:17;13311:27;13301:55;;13352:1;13349;13342:12;13301:55;-1:-1:-1;13375:20:201;;13418:18;13407:30;;13404:50;;;13450:1;13447;13440:12;13404:50;13487:4;13479:6;13475:17;13463:29;;13547:3;13540:4;13530:6;13527:1;13523:14;13515:6;13511:27;13507:38;13504:47;13501:67;;;13564:1;13561;13554:12;13579:437;13665:6;13673;13726:2;13714:9;13705:7;13701:23;13697:32;13694:52;;;13742:1;13739;13732:12;13694:52;13782:9;13769:23;13815:18;13807:6;13804:30;13801:50;;;13847:1;13844;13837:12;13801:50;13886:70;13948:7;13939:6;13928:9;13924:22;13886:70;:::i;:::-;13975:8;;13860:96;;-1:-1:-1;13579:437:201;-1:-1:-1;;;;13579:437:201:o;14021:598::-;14115:6;14123;14131;14139;14147;14200:3;14188:9;14179:7;14175:23;14171:33;14168:53;;;14217:1;14214;14207:12;14168:53;14256:9;14243:23;14275:31;14300:5;14275:31;:::i;:::-;14325:5;-1:-1:-1;14377:2:201;14362:18;;14349:32;;-1:-1:-1;14428:2:201;14413:18;;14400:32;;-1:-1:-1;14451:37:201;14484:2;14469:18;;14451:37;:::i;14624:1572::-;14828:6;14836;14844;14852;14860;14868;14876;14884;14892;14900;14908:7;14962:3;14950:9;14941:7;14937:23;14933:33;14930:53;;;14979:1;14976;14969:12;14930:53;15002:29;15021:9;15002:29;:::i;:::-;14992:39;;15050:18;15117:2;15111;15100:9;15096:18;15083:32;15080:40;15077:60;;;15133:1;15130;15123:12;15077:60;15172:96;15260:7;15253:2;15242:9;15238:18;15225:32;15214:9;15210:48;15172:96;:::i;:::-;15287:8;;-1:-1:-1;15314:8:201;-1:-1:-1;15365:2:201;15350:18;;15337:32;15334:40;-1:-1:-1;15331:60:201;;;15387:1;15384;15377:12;15331:60;15426:96;15514:7;15507:2;15496:9;15492:18;15479:32;15468:9;15464:48;15426:96;:::i;:::-;15541:8;;-1:-1:-1;15568:8:201;-1:-1:-1;15619:2:201;15604:18;;15591:32;15588:40;-1:-1:-1;15585:60:201;;;15641:1;15638;15631:12;15585:60;15680:96;15768:7;15761:2;15750:9;15746:18;15733:32;15722:9;15718:48;15680:96;:::i;:::-;15795:8;;-1:-1:-1;15822:8:201;-1:-1:-1;15849:39:201;15883:3;15868:19;;15849:39;:::i;:::-;15839:49;;15938:2;15931:3;15920:9;15916:19;15903:33;15900:41;15897:61;;;15954:1;15951;15944:12;15897:61;;15993:85;16070:7;16062:3;16051:9;16047:19;16034:33;16023:9;16019:49;15993:85;:::i;:::-;16097:8;;-1:-1:-1;16124:8:201;-1:-1:-1;16152:38:201;16185:3;16170:19;;16152:38;:::i;:::-;16141:49;;14624:1572;;;;;;;;;;;;;;:::o;16201:188::-;16269:20;;16329:34;16318:46;;16308:57;;16298:85;;16379:1;16376;16369:12;16394:260;16462:6;16470;16523:2;16511:9;16502:7;16498:23;16494:32;16491:52;;;16539:1;16536;16529:12;16491:52;16562:29;16581:9;16562:29;:::i;:::-;16552:39;;16610:38;16644:2;16633:9;16629:18;16610:38;:::i;:::-;16600:48;;16394:260;;;;;:::o;17755:456::-;17832:6;17840;17848;17901:2;17889:9;17880:7;17876:23;17872:32;17869:52;;;17917:1;17914;17907:12;17869:52;17956:9;17943:23;17975:31;18000:5;17975:31;:::i;:::-;18025:5;-1:-1:-1;18082:2:201;18067:18;;18054:32;18095:33;18054:32;18095:33;:::i;:::-;17755:456;;18147:7;;-1:-1:-1;;;18201:2:201;18186:18;;;;18173:32;;17755:456::o;18216:681::-;18387:2;18439:21;;;18509:13;;18412:18;;;18531:22;;;18358:4;;18387:2;18610:15;;;;18584:2;18569:18;;;18358:4;18653:218;18667:6;18664:1;18661:13;18653:218;;;18732:13;;-1:-1:-1;;;;;18728:62:201;18716:75;;18846:15;;;;18811:12;;;;18689:1;18682:9;18653:218;;;-1:-1:-1;18888:3:201;;18216:681;-1:-1:-1;;;;;;18216:681:201:o;18902:184::-;18954:77;18951:1;18944:88;19051:4;19048:1;19041:15;19075:4;19072:1;19065:15;19091:253;19163:2;19157:9;19205:4;19193:17;;19240:18;19225:34;;19261:22;;;19222:62;19219:88;;;19287:18;;:::i;:::-;19323:2;19316:22;19091:253;:::o;19349:334::-;19420:2;19414:9;19476:2;19466:13;;19481:66;19462:86;19450:99;;19579:18;19564:34;;19600:22;;;19561:62;19558:88;;;19626:18;;:::i;:::-;19662:2;19655:22;19349:334;;-1:-1:-1;19349:334:201:o;19688:1488::-;19786:6;19794;19847:2;19835:9;19826:7;19822:23;19818:32;19815:52;;;19863:1;19860;19853:12;19815:52;19886:27;19903:9;19886:27;:::i;:::-;19876:37;;19932:2;19985;19974:9;19970:18;19957:32;20008:18;20049:2;20041:6;20038:14;20035:34;;;20065:1;20062;20055:12;20035:34;20088:22;;;;20144:4;20126:16;;;20122:27;20119:47;;;20162:1;20159;20152:12;20119:47;20188:22;;:::i;:::-;20233:21;20251:2;20233:21;:::i;:::-;20226:5;20219:36;20287:30;20313:2;20309;20305:11;20287:30;:::i;:::-;20282:2;20275:5;20271:14;20264:54;20350:30;20376:2;20372;20368:11;20350:30;:::i;:::-;20345:2;20338:5;20334:14;20327:54;20426:2;20422;20418:11;20405:25;20439:33;20464:7;20439:33;:::i;:::-;20499:2;20488:14;;20481:31;20558:3;20550:12;;20537:26;20575:16;;;20572:36;;;20604:1;20601;20594:12;20572:36;20635:8;20631:2;20627:17;20617:27;;;20682:7;20675:4;20671:2;20667:13;20663:27;20653:55;;20704:1;20701;20694:12;20653:55;20740:2;20727:16;20762:2;20758;20755:10;20752:36;;;20768:18;;:::i;:::-;20810:112;20918:2;20849:66;20842:4;20838:2;20834:13;20830:86;20826:95;20810:112;:::i;:::-;20797:125;;20945:2;20938:5;20931:17;20985:7;20980:2;20975;20971;20967:11;20963:20;20960:33;20957:53;;;21006:1;21003;20996:12;20957:53;21061:2;21056;21052;21048:11;21043:2;21036:5;21032:14;21019:45;21105:1;21100:2;21095;21088:5;21084:14;21080:23;21073:34;;21140:5;21134:3;21127:5;21123:15;21116:30;21165:5;21155:15;;;;;;19688:1488;;;;;:::o;21181:736::-;21285:6;21293;21301;21309;21317;21325;21378:3;21366:9;21357:7;21353:23;21349:33;21346:53;;;21395:1;21392;21385:12;21346:53;21434:9;21421:23;21453:31;21478:5;21453:31;:::i;:::-;21503:5;-1:-1:-1;21560:2:201;21545:18;;21532:32;21573:33;21532:32;21573:33;:::i;:::-;21625:7;-1:-1:-1;21684:2:201;21669:18;;21656:32;21697:33;21656:32;21697:33;:::i;:::-;21181:736;;;;-1:-1:-1;21749:7:201;;21803:2;21788:18;;21775:32;;-1:-1:-1;21854:3:201;21839:19;;21826:33;;21906:3;21891:19;;;21878:33;;-1:-1:-1;21181:736:201;-1:-1:-1;;21181:736:201:o;21922:803::-;22042:6;22050;22058;22066;22074;22082;22090;22098;22151:3;22139:9;22130:7;22126:23;22122:33;22119:53;;;22168:1;22165;22158:12;22119:53;22207:9;22194:23;22226:31;22251:5;22226:31;:::i;:::-;22276:5;-1:-1:-1;22328:2:201;22313:18;;22300:32;;-1:-1:-1;22379:2:201;22364:18;;22351:32;;-1:-1:-1;22435:2:201;22420:18;;22407:32;22448:33;22407:32;22448:33;:::i;22730:479::-;22842:6;22850;22894:9;22885:7;22881:23;22924:2;22920;22916:11;22913:31;;;22940:1;22937;22930:12;22913:31;22979:9;22966:23;22998:31;23023:5;22998:31;:::i;:::-;23048:5;-1:-1:-1;23146:2:201;23077:66;23069:75;;23065:84;23062:104;;;23162:1;23159;23152:12;23062:104;;23200:2;23189:9;23185:18;23175:28;;22730:479;;;;;:::o;23407:251::-;23477:6;23530:2;23518:9;23509:7;23505:23;23501:32;23498:52;;;23546:1;23543;23536:12;23498:52;23578:9;23572:16;23597:31;23622:5;23597:31;:::i;23839:1667::-;24335:4;24377:3;24366:9;24362:19;24354:27;;24408:6;24397:9;24390:25;24451:6;24446:2;24435:9;24431:18;24424:34;24494:6;24489:2;24478:9;24474:18;24467:34;24537:6;24532:2;24521:9;24517:18;24510:34;24587:6;24581:13;24575:3;24564:9;24560:19;24553:42;24650:2;24642:6;24638:15;24632:22;24626:3;24615:9;24611:19;24604:51;24702:2;24694:6;24690:15;24684:22;-1:-1:-1;;;;;24822:2:201;24808:12;24804:21;24798:3;24787:9;24783:19;24776:50;24891:2;24885;24877:6;24873:15;24867:22;24863:31;24857:3;24846:9;24842:19;24835:60;;;24944:3;24936:6;24932:16;24926:23;24968:3;24980:54;25030:2;25019:9;25015:18;24999:14;-1:-1:-1;;;;;4870:54:201;4858:67;;4804:127;24980:54;25083:3;25071:16;;25065:23;23733:13;23726:21;25144:3;25129:19;;23714:34;25198:3;25186:16;;25180:23;-1:-1:-1;;;;;4870:54:201;;;25262:3;25247:19;;4858:67;25316:3;25304:16;;25298:23;23826:4;23815:16;25378:3;25363:19;;23803:29;25420:15;;;25414:22;4870:54;;;25495:3;25480:19;;4858:67;25414:22;-1:-1:-1;25445:55:201;;23839:1667;;;;;;;;:::o;27081:220::-;27230:2;27219:9;27212:21;27193:4;27250:45;27291:2;27280:9;27276:18;27268:6;27250:45;:::i;28317:184::-;28369:77;28366:1;28359:88;28466:4;28463:1;28456:15;28490:4;28487:1;28480:15;28506:301;28594:1;28587:5;28584:12;28574:200;;28630:77;28627:1;28620:88;28731:4;28728:1;28721:15;28759:4;28756:1;28749:15;28574:200;28783:18;;28506:301::o;28812:996::-;29183:4;29225:3;29214:9;29210:19;29202:27;;29256:6;29245:9;29238:25;29299:6;29294:2;29283:9;29279:18;29272:34;29342:6;29337:2;29326:9;29322:18;29315:34;-1:-1:-1;;;;;29465:2:201;29456:6;29450:13;29446:22;29441:2;29430:9;29426:18;29419:50;29524:2;29516:6;29512:15;29506:22;29500:3;29489:9;29485:19;29478:51;29576:2;29568:6;29564:15;29558:22;29589:67;29651:3;29640:9;29636:19;29622:12;29589:67;:::i;:::-;-1:-1:-1;29715:2:201;29703:15;;29697:22;29693:31;29687:3;29672:19;;29665:60;29794:3;29782:16;;;29776:23;29769:31;29762:39;29756:3;29741:19;;;29734:68;28812:996;;-1:-1:-1;;;28812:996:201:o;29813:184::-;29883:6;29936:2;29924:9;29915:7;29911:23;29907:32;29904:52;;;29952:1;29949;29942:12;29904:52;-1:-1:-1;29975:16:201;;29813:184;-1:-1:-1;29813:184:201:o;30002:960::-;30274:6;30263:9;30256:25;30317:2;30312;30301:9;30297:18;30290:30;30237:4;-1:-1:-1;;;;;30436:2:201;30427:6;30421:13;30417:22;30412:2;30401:9;30397:18;30390:50;30504:2;30498;30490:6;30486:15;30480:22;30476:31;30471:2;30460:9;30456:18;30449:59;;30563:2;30555:6;30551:15;30545:22;30539:3;30528:9;30524:19;30517:51;30615:2;30607:6;30603:15;30597:22;30656:4;30650:3;30639:9;30635:19;30628:33;30684:52;30731:3;30720:9;30716:19;30702:12;30684:52;:::i;:::-;30670:66;;30802:6;30795:3;30787:6;30783:16;30777:23;30773:36;30767:3;30756:9;30752:19;30745:65;30866:3;30858:6;30854:16;30848:23;30841:4;30830:9;30826:20;30819:53;30927:3;30919:6;30915:16;30909:23;30903:3;30892:9;30888:19;30881:52;30950:6;30942:14;;;30002:960;;;;;:::o;34414:437::-;34493:1;34489:12;;;;34536;;;34557:61;;34611:4;34603:6;34599:17;34589:27;;34557:61;34664:2;34656:6;34653:14;34633:18;34630:38;34627:218;;;34701:77;34698:1;34691:88;34802:4;34799:1;34792:15;34830:4;34827:1;34820:15;34856:1060;35161:4;35203:3;35192:9;35188:19;35180:27;;35234:6;35223:9;35216:25;35277:6;35272:2;35261:9;35257:18;35250:34;-1:-1:-1;;;;;35400:2:201;35391:6;35385:13;35381:22;35376:2;35365:9;35361:18;35354:50;35468:2;35462;35454:6;35450:15;35444:22;35440:31;35435:2;35424:9;35420:18;35413:59;35537:2;35531;35523:6;35519:15;35513:22;35509:31;35503:3;35492:9;35488:19;35481:60;35606:2;35600;35592:6;35588:15;35582:22;35578:31;35572:3;35561:9;35557:19;35550:60;35676:2;35669:3;35661:6;35657:16;35651:23;35647:32;35641:3;35630:9;35626:19;35619:61;;35727:3;35719:6;35715:16;35709:23;35741:52;35788:3;35777:9;35773:19;35759:12;4785:6;4774:18;4762:31;;4709:90;35741:52;-1:-1:-1;35842:3:201;35830:16;;35824:23;4785:6;4774:18;;35905:3;35890:19;;4762:31;35856:54;34856:1060;;;;;;:::o;35921:245::-;35988:6;36041:2;36029:9;36020:7;36016:23;36012:32;36009:52;;;36057:1;36054;36047:12;36009:52;36089:9;36083:16;36108:28;36130:5;36108:28;:::i;36171:184::-;36223:77;36220:1;36213:88;36320:4;36317:1;36310:15;36344:4;36341:1;36334:15;36360:197;36398:3;36426:6;36467:2;36460:5;36456:14;36494:2;36485:7;36482:15;36479:41;;;36500:18;;:::i;:::-;36549:1;36536:15;;36360:197;-1:-1:-1;;;36360:197:201:o;36562:557::-;36884:25;;;36940:2;36925:18;;36918:34;;;-1:-1:-1;;;;;36988:55:201;;36983:2;36968:18;;36961:83;36871:3;36856:19;;37053:60;37109:2;37094:18;;37086:6;37053:60;:::i;37124:859::-;37424:25;;;37412:2;37468;37486:18;;;37479:30;;;37397:18;;;37544:22;;;37364:4;;37623:6;;37597:2;37582:18;;37364:4;37657:300;37671:6;37668:1;37665:13;37657:300;;;37746:6;37733:20;37766:31;37791:5;37766:31;:::i;:::-;-1:-1:-1;;;;;37822:54:201;37810:67;;37932:15;;;;37897:12;;;;37693:1;37686:9;37657:300;;;-1:-1:-1;37974:3:201;37124:859;-1:-1:-1;;;;;;;37124:859:201:o;37988:1960::-;38496:25;;;38552:2;38537:18;;38530:34;;;38595:2;38580:18;;38573:34;;;38638:2;38623:18;;38616:34;;;38678:13;;-1:-1:-1;;;;;4870:54:201;38708:3;38693:19;;4858:67;38483:3;38468:19;;38760:2;38748:15;;38742:22;-1:-1:-1;;;;;4870:54:201;;38821:3;38806:19;;4858:67;-1:-1:-1;38875:2:201;38863:15;;38857:22;-1:-1:-1;;;;;4870:54:201;;38938:3;38923:19;;4858:67;38888:55;38998:2;38990:6;38986:15;38980:22;38974:3;38963:9;38959:19;38952:51;39052:3;39044:6;39040:16;39034:23;39076:3;39088:68;39152:2;39141:9;39137:18;39121:14;39088:68;:::i;:::-;39205:3;39197:6;39193:16;39187:23;39165:45;;39229:3;39241:53;39290:2;39279:9;39275:18;39259:14;4785:6;4774:18;4762:31;;4709:90;39241:53;39343:3;39335:6;39331:16;39325:23;39303:45;;39367:3;39379:51;39426:2;39415:9;39411:18;39395:14;23733:13;23726:21;23714:34;;23663:91;39379:51;39467:3;39455:16;;39449:23;39491:3;39510:18;;;39503:30;;;;39576:15;;;39570:22;39564:3;39549:19;;39542:51;39630:15;;;39624:22;-1:-1:-1;;;;;4870:54:201;;;39705:3;39690:19;;4858:67;39747:15;;;39741:22;23826:4;23815:16;39820:3;39805:19;;23803:29;39862:15;;;39856:22;4870:54;;;39937:3;39922:19;;4858:67;39856:22;-1:-1:-1;39887:55:201;4804:127;39953:484;40006:3;40044:5;40038:12;40071:6;40066:3;40059:19;40097:4;40126:2;40121:3;40117:12;40110:19;;40163:2;40156:5;40152:14;40184:1;40194:218;40208:6;40205:1;40202:13;40194:218;;;40273:13;;-1:-1:-1;;;;;40269:62:201;40257:75;;40352:12;;;;40387:15;;;;40230:1;40223:9;40194:218;;;-1:-1:-1;40428:3:201;;39953:484;-1:-1:-1;;;;;39953:484:201:o;40442:435::-;40495:3;40533:5;40527:12;40560:6;40555:3;40548:19;40586:4;40615:2;40610:3;40606:12;40599:19;;40652:2;40645:5;40641:14;40673:1;40683:169;40697:6;40694:1;40691:13;40683:169;;;40758:13;;40746:26;;40792:12;;;;40827:15;;;;40719:1;40712:9;40683:169;;40882:2611;41364:6;41353:9;41346:25;41407:6;41402:2;41391:9;41387:18;41380:34;41450:6;41445:2;41434:9;41430:18;41423:34;41493:6;41488:2;41477:9;41473:18;41466:34;41537:3;41531;41520:9;41516:19;41509:32;41550:54;41599:3;41588:9;41584:19;41575:6;41569:13;-1:-1:-1;;;;;4870:54:201;4858:67;;4804:127;41550:54;41327:4;41651:2;41643:6;41639:15;41633:22;41674:6;41717:2;41711:3;41700:9;41696:19;41689:31;41743:63;41801:3;41790:9;41786:19;41772:12;41743:63;:::i;:::-;41729:77;;41855:2;41847:6;41843:15;41837:22;41878:66;42009:2;41997:9;41989:6;41985:22;41981:31;41975:3;41964:9;41960:19;41953:60;42036:52;42081:6;42065:14;42036:52;:::i;:::-;42022:66;;42137:2;42129:6;42125:15;42119:22;42097:44;;42160:3;42227:2;42215:9;42207:6;42203:22;42199:31;42194:2;42183:9;42179:18;42172:59;42254:52;42299:6;42283:14;42254:52;:::i;:::-;42240:66;;42355:3;42347:6;42343:16;42337:23;42315:45;;42379:3;42391:54;42441:2;42430:9;42426:18;42410:14;-1:-1:-1;;;;;4870:54:201;4858:67;;4804:127;42391:54;42494:3;42486:6;42482:16;42476:23;42454:45;;42518:3;42585:2;42573:9;42565:6;42561:22;42557:31;42552:2;42541:9;42537:18;42530:59;42612:41;42646:6;42630:14;42612:41;:::i;:::-;42598:55;;42702:3;42694:6;42690:16;42684:23;42662:45;;42726:3;42716:13;;42738:53;42787:2;42776:9;42772:18;42756:14;4785:6;4774:18;4762:31;;4709:90;42738:53;42828:3;42820:6;42816:16;42810:23;42800:33;;42852:3;42891:2;42886;42875:9;42871:18;42864:30;42931:2;42923:6;42919:15;42913:22;42903:32;;42955:3;42944:14;;42995:2;42989:3;42978:9;42974:19;42967:31;43052:2;43044:6;43040:15;43034:22;43029:2;43018:9;43014:18;43007:50;43112:2;43104:6;43100:15;43094:22;43088:3;43077:9;43073:19;43066:51;43166:2;43158:6;43154:15;43148:22;43126:44;;43179:55;43229:3;43218:9;43214:19;43198:14;-1:-1:-1;;;;;4870:54:201;4858:67;;4804:127;43179:55;43271:15;;43265:22;23826:4;23815:16;;43344:3;43329:19;;23803:29;43265:22;-1:-1:-1;43296:53:201;;-1:-1:-1;;23759:75:201;43296:53;43386:16;;43380:23;23733:13;;23726:21;43459:3;43444:19;;23714:34;43380:23;-1:-1:-1;43412:52:201;;-1:-1:-1;;23663:91:201;44515:492;44630:6;44638;44646;44654;44662;44670;44723:3;44711:9;44702:7;44698:23;44694:33;44691:53;;;44740:1;44737;44730:12;44691:53;44769:9;44763:16;44753:26;;44819:2;44808:9;44804:18;44798:25;44788:35;;44863:2;44852:9;44848:18;44842:25;44832:35;;44907:2;44896:9;44892:18;44886:25;44876:35;;44951:3;44940:9;44936:19;44930:26;44920:36;;44996:3;44985:9;44981:19;44975:26;44965:36;;44515:492;;;;;;;;:::o;46276:125::-;46316:4;46344:1;46341;46338:8;46335:34;;;46349:18;;:::i;:::-;-1:-1:-1;46386:9:201;;46276:125::o;46406:184::-;46458:77;46455:1;46448:88;46555:4;46552:1;46545:15;46579:4;46576:1;46569:15;46595:195;46634:3;46665:66;46658:5;46655:77;46652:103;;;46735:18;;:::i;:::-;-1:-1:-1;46782:1:201;46771:13;;46595:195::o;46795:1520::-;47279:4;47321:3;47310:9;47306:19;47298:27;;47352:6;47341:9;47334:25;47395:6;47390:2;47379:9;47375:18;47368:34;47438:6;47433:2;47422:9;47418:18;47411:34;47481:6;47476:2;47465:9;47461:18;47454:34;-1:-1:-1;;;;;47605:2:201;47596:6;47590:13;47586:22;47580:3;47569:9;47565:19;47558:51;47674:2;47668;47660:6;47656:15;47650:22;47646:31;47640:3;47629:9;47625:19;47618:60;;47725:2;47717:6;47713:15;47707:22;47738:53;47786:3;47775:9;47771:19;47757:12;-1:-1:-1;;;;;4870:54:201;4858:67;;4804:127;47738:53;;47846:2;47838:6;47834:15;47828:22;47822:3;47811:9;47807:19;47800:51;47888:3;47880:6;47876:16;47870:23;47912:3;47951:2;47946;47935:9;47931:18;47924:30;48009:3;48001:6;47997:16;47991:23;47985:3;47974:9;47970:19;47963:52;48070:3;48062:6;48058:16;48052:23;48046:3;48035:9;48031:19;48024:52;48125:3;48117:6;48113:16;48107:23;48085:45;;48139:55;48189:3;48178:9;48174:19;48158:14;-1:-1:-1;;;;;4870:54:201;4858:67;;4804:127;48139:55;48231:15;;48225:22;23826:4;23815:16;;48304:3;48289:19;;23803:29;48225:22;-1:-1:-1;48256:53:201;23759:75;49449:228;49489:7;49615:1;49547:66;49543:74;49540:1;49537:81;49532:1;49525:9;49518:17;49514:105;49511:131;;;49622:18;;:::i;:::-;-1:-1:-1;49662:9:201;;49449:228::o;49682:184::-;49734:77;49731:1;49724:88;49831:4;49828:1;49821:15;49855:4;49852:1;49845:15;49871:128;49911:3;49942:1;49938:6;49935:1;49932:13;49929:39;;;49948:18;;:::i;:::-;-1:-1:-1;49984:9:201;;49871:128::o;50004:274::-;50044:1;50070;50060:189;;50105:77;50102:1;50095:88;50206:4;50203:1;50196:15;50234:4;50231:1;50224:15;50060:189;-1:-1:-1;50263:9:201;;50004:274::o"},"gasEstimates":{"creation":{"codeDepositCost":"4012200","executionCost":"infinite","totalCost":"infinite"},"external":{"ADDRESSES_PROVIDER()":"infinite","BRIDGE_PROTOCOL_FEE()":"2372","FLASHLOAN_PREMIUM_TOTAL()":"2409","FLASHLOAN_PREMIUM_TO_PROTOCOL()":"2407","MAX_NUMBER_RESERVES()":"287","MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":"2354","POOL_REVISION()":"276","backUnbacked(address,uint256,uint256)":"infinite","borrow(address,uint256,uint256,uint16,address)":"infinite","configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":"infinite","deposit(address,uint256,address,uint16)":"infinite","dropReserve(address)":"infinite","finalizeTransfer(address,address,address,uint256,uint256,uint256)":"infinite","flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":"infinite","flashLoanSimple(address,address,uint256,bytes,uint16)":"infinite","getConfiguration(address)":"2727","getEModeCategoryData(uint8)":"infinite","getReserveAddressById(uint16)":"2620","getReserveData(address)":"23158","getReserveNormalizedIncome(address)":"infinite","getReserveNormalizedVariableDebt(address)":"infinite","getReservesList()":"infinite","getUserAccountData(address)":"infinite","getUserConfiguration(address)":"2728","getUserEMode(address)":"2637","initReserve(address,address,address,address,address)":"infinite","initialize(address)":"infinite","liquidationCall(address,address,address,uint256,bool)":"infinite","mintToTreasury(address[])":"infinite","mintUnbacked(address,uint256,address,uint16)":"infinite","rebalanceStableBorrowRate(address,address)":"infinite","repay(address,uint256,uint256,address)":"infinite","repayWithATokens(address,uint256,uint256)":"infinite","repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":"infinite","rescueTokens(address,address,uint256)":"infinite","resetIsolationModeTotalDebt(address)":"infinite","setConfiguration(address,(uint256))":"infinite","setReserveInterestRateStrategyAddress(address,address)":"infinite","setUserEMode(uint8)":"infinite","setUserUseReserveAsCollateral(address,bool)":"infinite","supply(address,uint256,address,uint16)":"infinite","supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":"infinite","swapBorrowRateMode(address,uint256)":"infinite","updateBridgeProtocolFee(uint256)":"infinite","updateFlashloanPremiums(uint128,uint128)":"infinite","withdraw(address,uint256,address)":"infinite"},"internal":{"_onlyBridge()":"infinite","_onlyPoolAdmin()":"infinite","_onlyPoolConfigurator()":"infinite","getRevision()":"infinite"}},"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","BRIDGE_PROTOCOL_FEE()":"272d9072","FLASHLOAN_PREMIUM_TOTAL()":"074b2e43","FLASHLOAN_PREMIUM_TO_PROTOCOL()":"6a99c036","MAX_NUMBER_RESERVES()":"f8119d51","MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":"e82fec2f","POOL_REVISION()":"0148170e","backUnbacked(address,uint256,uint256)":"d65dc7a1","borrow(address,uint256,uint256,uint16,address)":"a415bcad","configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":"d579ea7d","deposit(address,uint256,address,uint16)":"e8eda9df","dropReserve(address)":"63c9b860","finalizeTransfer(address,address,address,uint256,uint256,uint256)":"d5ed3933","flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":"ab9c4b5d","flashLoanSimple(address,address,uint256,bytes,uint16)":"42b0b77c","getConfiguration(address)":"c44b11f7","getEModeCategoryData(uint8)":"6c6f6ae1","getReserveAddressById(uint16)":"52751797","getReserveData(address)":"35ea6a75","getReserveNormalizedIncome(address)":"d15e0053","getReserveNormalizedVariableDebt(address)":"386497fd","getReservesList()":"d1946dbc","getUserAccountData(address)":"bf92857c","getUserConfiguration(address)":"4417a583","getUserEMode(address)":"eddf1b79","initReserve(address,address,address,address,address)":"7a708e92","initialize(address)":"c4d66de8","liquidationCall(address,address,address,uint256,bool)":"00a718a9","mintToTreasury(address[])":"9cd19996","mintUnbacked(address,uint256,address,uint16)":"69a933a5","rebalanceStableBorrowRate(address,address)":"cd112382","repay(address,uint256,uint256,address)":"573ade81","repayWithATokens(address,uint256,uint256)":"2dad97d4","repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":"ee3e210b","rescueTokens(address,address,uint256)":"cea9d26f","resetIsolationModeTotalDebt(address)":"e43e88a1","setConfiguration(address,(uint256))":"f51e435b","setReserveInterestRateStrategyAddress(address,address)":"1d2118f9","setUserEMode(uint8)":"28530a47","setUserUseReserveAsCollateral(address,bool)":"5a3b74b9","supply(address,uint256,address,uint16)":"617ba037","supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":"02c205f0","swapBorrowRateMode(address,uint256)":"94ba89a2","updateBridgeProtocolFee(uint256)":"3036b439","updateFlashloanPremiums(uint128,uint128)":"bcb6e522","withdraw(address,uint256,address)":"69328dec"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"backer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"BackUnbacked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"borrowRate\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"Borrow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"premium\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"FlashLoan\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalDebt\",\"type\":\"uint256\"}],\"name\":\"IsolationModeTotalDebtUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"collateralAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"debtAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"debtToCover\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidatedCollateralAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"receiveAToken\",\"type\":\"bool\"}],\"name\":\"LiquidationCall\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"MintUnbacked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountMinted\",\"type\":\"uint256\"}],\"name\":\"MintedToTreasury\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"RebalanceStableBorrowRate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"repayer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"useATokens\",\"type\":\"bool\"}],\"name\":\"Repay\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidityRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stableBorrowRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"variableBorrowRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidityIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"variableBorrowIndex\",\"type\":\"uint256\"}],\"name\":\"ReserveDataUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ReserveUsedAsCollateralEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"Supply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"enum DataTypes.InterestRateMode\",\"name\":\"interestRateMode\",\"type\":\"uint8\"}],\"name\":\"SwapBorrowRateMode\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"}],\"name\":\"UserEModeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserve\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BRIDGE_PROTOCOL_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FLASHLOAN_PREMIUM_TOTAL\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FLASHLOAN_PREMIUM_TO_PROTOCOL\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_NUMBER_RESERVES\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_STABLE_RATE_BORROW_SIZE_PERCENT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"backUnbacked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"borrow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"id\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"uint16\",\"name\":\"ltv\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationBonus\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"priceSource\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"internalType\":\"struct DataTypes.EModeCategory\",\"name\":\"category\",\"type\":\"tuple\"}],\"name\":\"configureEModeCategory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"dropReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceFromBefore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceToBefore\",\"type\":\"uint256\"}],\"name\":\"finalizeTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiverAddress\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"interestRateModes\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"flashLoan\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiverAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"flashLoanSimple\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getConfiguration\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"id\",\"type\":\"uint8\"}],\"name\":\"getEModeCategoryData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint16\",\"name\":\"ltv\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationBonus\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"priceSource\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"internalType\":\"struct DataTypes.EModeCategory\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"id\",\"type\":\"uint16\"}],\"name\":\"getReserveAddressById\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveData\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"configuration\",\"type\":\"tuple\"},{\"internalType\":\"uint128\",\"name\":\"liquidityIndex\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentLiquidityRate\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"variableBorrowIndex\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentVariableBorrowRate\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"currentStableBorrowRate\",\"type\":\"uint128\"},{\"internalType\":\"uint40\",\"name\":\"lastUpdateTimestamp\",\"type\":\"uint40\"},{\"internalType\":\"uint16\",\"name\":\"id\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"aTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"},{\"internalType\":\"uint128\",\"name\":\"accruedToTreasury\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"unbacked\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"isolationModeTotalDebt\",\"type\":\"uint128\"}],\"internalType\":\"struct DataTypes.ReserveData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveNormalizedIncome\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getReserveNormalizedVariableDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReservesList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserAccountData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalCollateralBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalDebtBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"availableBorrowsBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentLiquidationThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"healthFactor\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserConfiguration\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.UserConfigurationMap\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserEMode\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"aTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"}],\"name\":\"initReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collateralAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"debtAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"debtToCover\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"receiveAToken\",\"type\":\"bool\"}],\"name\":\"liquidationCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"}],\"name\":\"mintToTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"mintUnbacked\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"rebalanceStableBorrowRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"repay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"}],\"name\":\"repayWithATokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"permitV\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"permitR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"permitS\",\"type\":\"bytes32\"}],\"name\":\"repayWithPermit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"rescueTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"resetIsolationModeTotalDebt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"data\",\"type\":\"uint256\"}],\"internalType\":\"struct DataTypes.ReserveConfigurationMap\",\"name\":\"configuration\",\"type\":\"tuple\"}],\"name\":\"setConfiguration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rateStrategyAddress\",\"type\":\"address\"}],\"name\":\"setReserveInterestRateStrategyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"}],\"name\":\"setUserEMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"useAsCollateral\",\"type\":\"bool\"}],\"name\":\"setUserUseReserveAsCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"supply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"permitV\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"permitR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"permitS\",\"type\":\"bytes32\"}],\"name\":\"supplyWithPermit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"}],\"name\":\"swapBorrowRateMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFee\",\"type\":\"uint256\"}],\"name\":\"updateBridgeProtocolFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"flashLoanPremiumTotal\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"flashLoanPremiumToProtocol\",\"type\":\"uint128\"}],\"name\":\"updateFlashloanPremiums\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"To be covered by a proxy contract, owned by the PoolAddressesProvider of the specific marketAll admin functions are callable by the PoolConfigurator contract defined also in the   PoolAddressesProvider\",\"kind\":\"dev\",\"methods\":{\"BRIDGE_PROTOCOL_FEE()\":{\"returns\":{\"_0\":\"The bridge fee sent to the protocol treasury\"}},\"FLASHLOAN_PREMIUM_TOTAL()\":{\"returns\":{\"_0\":\"The total fee on flashloans\"}},\"FLASHLOAN_PREMIUM_TO_PROTOCOL()\":{\"returns\":{\"_0\":\"The flashloan fee sent to the protocol treasury\"}},\"MAX_NUMBER_RESERVES()\":{\"returns\":{\"_0\":\"The maximum number of reserves supported\"}},\"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()\":{\"returns\":{\"_0\":\"The percentage of available liquidity to borrow, expressed in bps\"}},\"backUnbacked(address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount to back\",\"asset\":\"The address of the underlying asset to back\",\"fee\":\"The amount paid in fees\"},\"returns\":{\"_0\":\"The backed amount\"}},\"borrow(address,uint256,uint256,uint16,address)\":{\"params\":{\"amount\":\"The amount to be borrowed\",\"asset\":\"The address of the underlying asset to borrow\",\"interestRateMode\":\"The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"The address of the user who will receive the debt. Should be the address of the borrower itself calling the function if he wants to borrow against his own collateral, or the address of the credit delegator if he has been given credit delegation allowance\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))\":{\"details\":\"In eMode, the protocol allows very high borrowing power to borrow assets of the same category. The category 0 is reserved as it's the default for volatile assets\",\"params\":{\"config\":\"The configuration of the category\",\"id\":\"The id of the category\"}},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"provider\":\"The address of the PoolAddressesProvider contract\"}},\"deposit(address,uint256,address,uint16)\":{\"details\":\"Deprecated: maintained for compatibility purposes\",\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"dropReserve(address)\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"}},\"finalizeTransfer(address,address,address,uint256,uint256,uint256)\":{\"details\":\"Only callable by the overlying aToken of the `asset`\",\"params\":{\"amount\":\"The amount being transferred/withdrawn\",\"asset\":\"The address of the underlying asset of the aToken\",\"balanceFromBefore\":\"The aToken balance of the `from` user before the transfer\",\"balanceToBefore\":\"The aToken balance of the `to` user before the transfer\",\"from\":\"The user from which the aTokens are transferred\",\"to\":\"The user receiving the aTokens\"}},\"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)\":{\"details\":\"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/\",\"params\":{\"amounts\":\"The amounts of the assets being flash-borrowed\",\"assets\":\"The addresses of the assets being flash-borrowed\",\"interestRateModes\":\"Types of the debt to open if the flash loan is not returned:   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\",\"onBehalfOf\":\"The address  that will receive the debt in the case of using on `modes` 1 or 2\",\"params\":\"Variadic packed params to pass to the receiver as extra information\",\"receiverAddress\":\"The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"flashLoanSimple(address,address,uint256,bytes,uint16)\":{\"details\":\"IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. For further details please visit https://docs.aave.com/developers/\",\"params\":{\"amount\":\"The amount of the asset being flash-borrowed\",\"asset\":\"The address of the asset being flash-borrowed\",\"params\":\"Variadic packed params to pass to the receiver as extra information\",\"receiverAddress\":\"The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\",\"referralCode\":\"The code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"getConfiguration(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The configuration of the reserve\"}},\"getEModeCategoryData(uint8)\":{\"params\":{\"id\":\"The id of the category\"},\"returns\":{\"_0\":\"The configuration data of the category\"}},\"getReserveAddressById(uint16)\":{\"params\":{\"id\":\"The id of the reserve as stored in the DataTypes.ReserveData struct\"},\"returns\":{\"_0\":\"The address of the reserve associated with id\"}},\"getReserveData(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The state and configuration data of the reserve\"}},\"getReserveNormalizedIncome(address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The reserve's normalized income\"}},\"getReserveNormalizedVariableDebt(address)\":{\"details\":\"WARNING: This function is intended to be used primarily by the protocol itself to get a \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current moment (approx. a borrower would get if opening a position). This means that is always used in combination with variable debt supply/balances. If using this function externally, consider that is possible to have an increasing normalized variable debt that is not equivalent to how the variable debt index would be updated in storage (e.g. only updates with non-zero variable debt supply)\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\"},\"returns\":{\"_0\":\"The reserve normalized variable debt\"}},\"getReservesList()\":{\"details\":\"It does not include dropped reserves\",\"returns\":{\"_0\":\"The addresses of the underlying assets of the initialized reserves\"}},\"getUserAccountData(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"availableBorrowsBase\":\"The borrowing power left of the user in the base currency used by the price feed\",\"currentLiquidationThreshold\":\"The liquidation threshold of the user\",\"healthFactor\":\"The current health factor of the user\",\"ltv\":\"The loan to value of The user\",\"totalCollateralBase\":\"The total collateral of the user in the base currency used by the price feed\",\"totalDebtBase\":\"The total debt of the user in the base currency used by the price feed\"}},\"getUserConfiguration(address)\":{\"params\":{\"user\":\"The user address\"},\"returns\":{\"_0\":\"The configuration of the user\"}},\"getUserEMode(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The eMode id\"}},\"initReserve(address,address,address,address,address)\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"aTokenAddress\":\"The address of the aToken that will be assigned to the reserve\",\"asset\":\"The address of the underlying asset of the reserve\",\"interestRateStrategyAddress\":\"The address of the interest rate strategy contract\",\"stableDebtAddress\":\"The address of the StableDebtToken that will be assigned to the reserve\",\"variableDebtAddress\":\"The address of the VariableDebtToken that will be assigned to the reserve\"}},\"initialize(address)\":{\"details\":\"Function is invoked by the proxy contract when the Pool contract is added to the PoolAddressesProvider of the market.Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations\",\"params\":{\"provider\":\"The address of the PoolAddressesProvider\"}},\"liquidationCall(address,address,address,uint256,bool)\":{\"params\":{\"collateralAsset\":\"The address of the underlying asset used as collateral, to receive as result of the liquidation\",\"debtAsset\":\"The address of the underlying borrowed asset to be repaid with the liquidation\",\"debtToCover\":\"The debt amount of borrowed `asset` the liquidator wants to cover\",\"receiveAToken\":\"True if the liquidators wants to receive the collateral aTokens, `false` if he wants to receive the underlying collateral asset directly\",\"user\":\"The address of the borrower getting liquidated\"}},\"mintToTreasury(address[])\":{\"params\":{\"assets\":\"The list of reserves for which the minting needs to be executed\"}},\"mintUnbacked(address,uint256,address,uint16)\":{\"params\":{\"amount\":\"The amount to mint\",\"asset\":\"The address of the underlying asset to mint\",\"onBehalfOf\":\"The address that will receive the aTokens\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"rebalanceStableBorrowRate(address,address)\":{\"params\":{\"asset\":\"The address of the underlying asset borrowed\",\"user\":\"The address of the user to be rebalanced\"}},\"repay(address,uint256,uint256,address)\":{\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"The address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"repayWithATokens(address,uint256,uint256)\":{\"details\":\"Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken balance is not enough to cover the whole debt\",\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"amount\":\"The amount to repay - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\",\"asset\":\"The address of the borrowed underlying asset previously borrowed\",\"deadline\":\"The deadline timestamp that the permit is valid\",\"interestRateMode\":\"The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\",\"onBehalfOf\":\"Address of the user who will get his debt reduced/removed. Should be the address of the user calling the function if he wants to reduce/remove his own debt, or the address of any other other borrower whose debt should be removed\",\"permitR\":\"The R parameter of ERC712 permit sig\",\"permitS\":\"The S parameter of ERC712 permit sig\",\"permitV\":\"The V parameter of ERC712 permit sig\"},\"returns\":{\"_0\":\"The final amount repaid\"}},\"rescueTokens(address,address,uint256)\":{\"params\":{\"amount\":\"The amount of token to transfer\",\"to\":\"The address of the recipient\",\"token\":\"The address of the token\"}},\"resetIsolationModeTotalDebt(address)\":{\"details\":\"It requires the given asset has zero debt ceiling\",\"params\":{\"asset\":\"The address of the underlying asset to reset the isolationModeTotalDebt\"}},\"setConfiguration(address,(uint256))\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"configuration\":\"The new configuration bitmap\"}},\"setReserveInterestRateStrategyAddress(address,address)\":{\"details\":\"Only callable by the PoolConfigurator contract\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"rateStrategyAddress\":\"The address of the interest rate strategy contract\"}},\"setUserEMode(uint8)\":{\"params\":{\"categoryId\":\"The id of the category\"}},\"setUserUseReserveAsCollateral(address,bool)\":{\"params\":{\"asset\":\"The address of the underlying asset supplied\",\"useAsCollateral\":\"True if the user wants to use the supply as collateral, false otherwise\"}},\"supply(address,uint256,address,uint16)\":{\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"amount\":\"The amount to be supplied\",\"asset\":\"The address of the underlying asset to supply\",\"deadline\":\"The deadline timestamp that the permit is valid\",\"onBehalfOf\":\"The address that will receive the aTokens, same as msg.sender if the user   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens   is a different wallet\",\"permitR\":\"The R parameter of ERC712 permit sig\",\"permitS\":\"The S parameter of ERC712 permit sig\",\"permitV\":\"The V parameter of ERC712 permit sig\",\"referralCode\":\"Code used to register the integrator originating the operation, for potential rewards.   0 if the action is executed directly by the user, without any middle-man\"}},\"swapBorrowRateMode(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset borrowed\",\"interestRateMode\":\"The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\"}},\"updateBridgeProtocolFee(uint256)\":{\"params\":{\"bridgeProtocolFee\":\"The part of the premium sent to the protocol treasury\"}},\"updateFlashloanPremiums(uint128,uint128)\":{\"details\":\"The total premium is calculated on the total borrowed amountThe premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`Only callable by the PoolConfigurator contract\",\"params\":{\"flashLoanPremiumToProtocol\":\"The part of the premium sent to the protocol treasury, expressed in bps\",\"flashLoanPremiumTotal\":\"The total premium, expressed in bps\"}},\"withdraw(address,uint256,address)\":{\"params\":{\"amount\":\"The underlying amount to be withdrawn   - Send the value type(uint256).max in order to withdraw the whole aToken balance\",\"asset\":\"The address of the underlying asset to withdraw\",\"to\":\"The address that will receive the underlying, same as msg.sender if the user   wants to receive it on his own wallet, or a different address if the beneficiary is a   different wallet\"},\"returns\":{\"_0\":\"The final amount withdrawn\"}}},\"stateVariables\":{\"ADDRESSES_PROVIDER\":{\"return\":\"The address of the PoolAddressesProvider\",\"returns\":{\"_0\":\"The address of the PoolAddressesProvider\"}}},\"title\":\"Pool contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"ADDRESSES_PROVIDER()\":{\"notice\":\"Returns the PoolAddressesProvider connected to this contract\"},\"BRIDGE_PROTOCOL_FEE()\":{\"notice\":\"Returns the part of the bridge fees sent to protocol\"},\"FLASHLOAN_PREMIUM_TOTAL()\":{\"notice\":\"Returns the total fee on flash loans\"},\"FLASHLOAN_PREMIUM_TO_PROTOCOL()\":{\"notice\":\"Returns the part of the flashloan fees sent to protocol\"},\"MAX_NUMBER_RESERVES()\":{\"notice\":\"Returns the maximum number of reserves supported to be listed in this Pool\"},\"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()\":{\"notice\":\"Returns the percentage of available liquidity that can be borrowed at once at stable rate\"},\"backUnbacked(address,uint256,uint256)\":{\"notice\":\"Back the current unbacked underlying with `amount` and pay `fee`.\"},\"borrow(address,uint256,uint256,uint16,address)\":{\"notice\":\"Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower already supplied enough collateral, or he was given enough allowance by a credit delegator on the corresponding debt token (StableDebtToken or VariableDebtToken) - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet   and 100 stable/variable debt tokens, depending on the `interestRateMode`\"},\"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))\":{\"notice\":\"Configures a new category for the eMode.\"},\"deposit(address,uint256,address,uint16)\":{\"notice\":\"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC\"},\"dropReserve(address)\":{\"notice\":\"Drop a reserve\"},\"finalizeTransfer(address,address,address,uint256,uint256,uint256)\":{\"notice\":\"Validates and finalizes an aToken transfer\"},\"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)\":{\"notice\":\"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned.\"},\"flashLoanSimple(address,address,uint256,bytes,uint16)\":{\"notice\":\"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned.\"},\"getConfiguration(address)\":{\"notice\":\"Returns the configuration of the reserve\"},\"getEModeCategoryData(uint8)\":{\"notice\":\"Returns the data of an eMode category\"},\"getReserveAddressById(uint16)\":{\"notice\":\"Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\"},\"getReserveData(address)\":{\"notice\":\"Returns the state and configuration of the reserve\"},\"getReserveNormalizedIncome(address)\":{\"notice\":\"Returns the normalized income of the reserve\"},\"getReserveNormalizedVariableDebt(address)\":{\"notice\":\"Returns the normalized variable debt per unit of asset\"},\"getReservesList()\":{\"notice\":\"Returns the list of the underlying assets of all the initialized reserves\"},\"getUserAccountData(address)\":{\"notice\":\"Returns the user account data across all the reserves\"},\"getUserConfiguration(address)\":{\"notice\":\"Returns the configuration of the user across all the reserves\"},\"getUserEMode(address)\":{\"notice\":\"Returns the eMode the user is using\"},\"initReserve(address,address,address,address,address)\":{\"notice\":\"Initializes a reserve, activating it, assigning an aToken and debt tokens and an interest rate strategy\"},\"initialize(address)\":{\"notice\":\"Initializes the Pool.\"},\"liquidationCall(address,address,address,uint256,bool)\":{\"notice\":\"Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1 - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\"},\"mintToTreasury(address[])\":{\"notice\":\"Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\"},\"mintUnbacked(address,uint256,address,uint16)\":{\"notice\":\"Mints an `amount` of aTokens to the `onBehalfOf`\"},\"rebalanceStableBorrowRate(address,address)\":{\"notice\":\"Rebalances the stable interest rate of a user to the current stable rate defined on the reserve. - Users can be rebalanced if the following conditions are satisfied:     1. Usage ratio is above 95%     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too        much has been borrowed at a stable rate and suppliers are not earning enough\"},\"repay(address,uint256,uint256,address)\":{\"notice\":\"Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\"},\"repayWithATokens(address,uint256,uint256)\":{\"notice\":\"Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the equivalent debt tokens - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\"},\"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Repay with transfer approval of asset to be repaid done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\"},\"rescueTokens(address,address,uint256)\":{\"notice\":\"Rescue and transfer tokens locked in this contract\"},\"resetIsolationModeTotalDebt(address)\":{\"notice\":\"Resets the isolation mode total debt of the given asset to zero\"},\"setConfiguration(address,(uint256))\":{\"notice\":\"Sets the configuration bitmap of the reserve as a whole\"},\"setReserveInterestRateStrategyAddress(address,address)\":{\"notice\":\"Updates the address of the interest rate strategy contract\"},\"setUserEMode(uint8)\":{\"notice\":\"Allows a user to use the protocol in eMode\"},\"setUserUseReserveAsCollateral(address,bool)\":{\"notice\":\"Allows suppliers to enable/disable a specific supplied asset as collateral\"},\"supply(address,uint256,address,uint16)\":{\"notice\":\"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC\"},\"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Supply with transfer approval of asset to be supplied done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\"},\"swapBorrowRateMode(address,uint256)\":{\"notice\":\"Allows a borrower to swap his debt between stable and variable mode, or vice versa\"},\"updateBridgeProtocolFee(uint256)\":{\"notice\":\"Updates the protocol fee on the bridging\"},\"updateFlashloanPremiums(uint128,uint128)\":{\"notice\":\"Updates flash loan premiums. Flash loan premium consists of two parts: - A part is sent to aToken holders as extra, one time accumulated interest - A part is collected by the protocol treasury\"},\"withdraw(address,uint256,address)\":{\"notice\":\"Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\"}},\"notice\":\"Main point of interaction with an Aave protocol's market - Users can:   # Supply   # Withdraw   # Borrow   # Repay   # Swap their loans between variable and stable rate   # Enable/disable their supplied assets as collateral rebalance stable rate borrow positions   # Liquidate positions   # Execute Flash Loans\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/pool/Pool.sol\":\"Pool\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\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(\\n    bytes32 indexed role,\\n    bytes32 indexed previousAdminRole,\\n    bytes32 indexed newAdminRole\\n  );\\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 {AccessControl-_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) external view returns (bool);\\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 {AccessControl-_setRoleAdmin}.\\n   */\\n  function getRoleAdmin(bytes32 role) external view returns (bytes32);\\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) external;\\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) external;\\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) external;\\n}\\n\",\"keccak256\":\"0x1ddad2e02b925fbb2c3cd9cc38685699acd8d23bce9dd971e219d846569830ab\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed assets\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param assets The addresses of the flash-borrowed assets\\n   * @param amounts The amounts of the flash-borrowed assets\\n   * @param premiums The fee of each flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata premiums,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0x0c7446b978d8044330dea7a491768498ac4052e2b3ca02d1b86ce32ea63b3810\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanSimpleReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanSimpleReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed asset\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param asset The address of the flash-borrowed asset\\n   * @param amount The amount of the flash-borrowed asset\\n   * @param premium The fee of the flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0xba50a7834ddfdca3e3cfac09043f72699be42ff88925641ac30950a434b2b2ff\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleSentinel.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPriceOracleSentinel\\n * @author Aave\\n * @notice Defines the basic interface for the PriceOracleSentinel\\n */\\ninterface IPriceOracleSentinel {\\n  /**\\n   * @dev Emitted after the sequencer oracle is updated\\n   * @param newSequencerOracle The new sequencer oracle\\n   */\\n  event SequencerOracleUpdated(address newSequencerOracle);\\n\\n  /**\\n   * @dev Emitted after the grace period is updated\\n   * @param newGracePeriod The new grace period value\\n   */\\n  event GracePeriodUpdated(uint256 newGracePeriod);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns true if the `borrow` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `borrow` operation is allowed, false otherwise.\\n   */\\n  function isBorrowAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Returns true if the `liquidation` operation is allowed.\\n   * @dev Operation not allowed when PriceOracle is down or grace period not passed.\\n   * @return True if the `liquidation` operation is allowed, false otherwise.\\n   */\\n  function isLiquidationAllowed() external view returns (bool);\\n\\n  /**\\n   * @notice Updates the address of the sequencer oracle\\n   * @param newSequencerOracle The address of the new Sequencer Oracle to use\\n   */\\n  function setSequencerOracle(address newSequencerOracle) external;\\n\\n  /**\\n   * @notice Updates the duration of the grace period\\n   * @param newGracePeriod The value of the new grace period duration\\n   */\\n  function setGracePeriod(uint256 newGracePeriod) external;\\n\\n  /**\\n   * @notice Returns the SequencerOracle\\n   * @return The address of the sequencer oracle contract\\n   */\\n  function getSequencerOracle() external view returns (address);\\n\\n  /**\\n   * @notice Returns the grace period\\n   * @return The duration of the grace period\\n   */\\n  function getGracePeriod() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x6ebde76426a4217475ae05a284c37a6de80ff72b18ed969e6922b06b4504a92f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title Helpers library\\n * @author Aave\\n */\\nlibrary Helpers {\\n  /**\\n   * @notice Fetches the user current stable and variable debt balances\\n   * @param user The user address\\n   * @param reserveCache The reserve cache data object\\n   * @return The stable debt balance\\n   * @return The variable debt balance\\n   */\\n  function getUserCurrentDebt(\\n    address user,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal view returns (uint256, uint256) {\\n    return (\\n      IERC20(reserveCache.stableDebtTokenAddress).balanceOf(user),\\n      IERC20(reserveCache.variableDebtTokenAddress).balanceOf(user)\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x7e0c79cab4c30d9fadd227dcdecb51046e01d74ed34e5e8597f928f7f3a97640\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/BorrowLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Helpers} from '../helpers/Helpers.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\\n\\n/**\\n * @title BorrowLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to borrowing\\n */\\nlibrary BorrowLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice Implements the borrow feature. Borrowing allows users that provided collateral to draw liquidity from the\\n   * Aave protocol proportionally to their collateralization power. For isolated positions, it also increases the\\n   * isolated debt.\\n   * @dev  Emits the `Borrow()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the borrow function\\n   */\\n  function executeBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteBorrowParams memory params\\n  ) public {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    (\\n      bool isolationModeActive,\\n      address isolationModeCollateralAddress,\\n      uint256 isolationModeDebtCeiling\\n    ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    ValidationLogic.validateBorrow(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.ValidateBorrowParams({\\n        reserveCache: reserveCache,\\n        userConfig: userConfig,\\n        asset: params.asset,\\n        userAddress: params.onBehalfOf,\\n        amount: params.amount,\\n        interestRateMode: params.interestRateMode,\\n        maxStableLoanPercent: params.maxStableRateBorrowSizePercent,\\n        reservesCount: params.reservesCount,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory,\\n        priceOracleSentinel: params.priceOracleSentinel,\\n        isolationModeActive: isolationModeActive,\\n        isolationModeCollateralAddress: isolationModeCollateralAddress,\\n        isolationModeDebtCeiling: isolationModeDebtCeiling\\n      })\\n    );\\n\\n    uint256 currentStableRate = 0;\\n    bool isFirstBorrowing = false;\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      currentStableRate = reserve.currentStableBorrowRate;\\n\\n      (\\n        isFirstBorrowing,\\n        reserveCache.nextTotalStableDebt,\\n        reserveCache.nextAvgStableBorrowRate\\n      ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).mint(\\n        params.user,\\n        params.onBehalfOf,\\n        params.amount,\\n        currentStableRate\\n      );\\n    } else {\\n      (isFirstBorrowing, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).mint(params.user, params.onBehalfOf, params.amount, reserveCache.nextVariableBorrowIndex);\\n    }\\n\\n    if (isFirstBorrowing) {\\n      userConfig.setBorrowing(reserve.id, true);\\n    }\\n\\n    if (isolationModeActive) {\\n      uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt += (params.amount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n      emit IsolationModeTotalDebtUpdated(\\n        isolationModeCollateralAddress,\\n        nextIsolationModeTotalDebt\\n      );\\n    }\\n\\n    reserve.updateInterestRates(\\n      reserveCache,\\n      params.asset,\\n      0,\\n      params.releaseUnderlying ? params.amount : 0\\n    );\\n\\n    if (params.releaseUnderlying) {\\n      IAToken(reserveCache.aTokenAddress).transferUnderlyingTo(params.user, params.amount);\\n    }\\n\\n    emit Borrow(\\n      params.asset,\\n      params.user,\\n      params.onBehalfOf,\\n      params.amount,\\n      params.interestRateMode,\\n      params.interestRateMode == DataTypes.InterestRateMode.STABLE\\n        ? currentStableRate\\n        : reserve.currentVariableBorrowRate,\\n      params.referralCode\\n    );\\n  }\\n\\n  /**\\n   * @notice Implements the repay feature. Repaying transfers the underlying back to the aToken and clears the\\n   * equivalent amount of debt for the user by burning the corresponding debt token. For isolated positions, it also\\n   * reduces the isolated debt.\\n   * @dev  Emits the `Repay()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the repay function\\n   * @return The actual amount being repaid\\n   */\\n  function executeRepay(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteRepayParams memory params\\n  ) external returns (uint256) {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n\\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\\n      params.onBehalfOf,\\n      reserveCache\\n    );\\n\\n    ValidationLogic.validateRepay(\\n      reserveCache,\\n      params.amount,\\n      params.interestRateMode,\\n      params.onBehalfOf,\\n      stableDebt,\\n      variableDebt\\n    );\\n\\n    uint256 paybackAmount = params.interestRateMode == DataTypes.InterestRateMode.STABLE\\n      ? stableDebt\\n      : variableDebt;\\n\\n    // Allows a user to repay with aTokens without leaving dust from interest.\\n    if (params.useATokens && params.amount == type(uint256).max) {\\n      params.amount = IAToken(reserveCache.aTokenAddress).balanceOf(msg.sender);\\n    }\\n\\n    if (params.amount < paybackAmount) {\\n      paybackAmount = params.amount;\\n    }\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).burn(params.onBehalfOf, paybackAmount);\\n    } else {\\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).burn(params.onBehalfOf, paybackAmount, reserveCache.nextVariableBorrowIndex);\\n    }\\n\\n    reserve.updateInterestRates(\\n      reserveCache,\\n      params.asset,\\n      params.useATokens ? 0 : paybackAmount,\\n      0\\n    );\\n\\n    if (stableDebt + variableDebt - paybackAmount == 0) {\\n      userConfig.setBorrowing(reserve.id, false);\\n    }\\n\\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\\n      reservesData,\\n      reservesList,\\n      userConfig,\\n      reserveCache,\\n      paybackAmount\\n    );\\n\\n    if (params.useATokens) {\\n      IAToken(reserveCache.aTokenAddress).burn(\\n        msg.sender,\\n        reserveCache.aTokenAddress,\\n        paybackAmount,\\n        reserveCache.nextLiquidityIndex\\n      );\\n    } else {\\n      IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, paybackAmount);\\n      IAToken(reserveCache.aTokenAddress).handleRepayment(\\n        msg.sender,\\n        params.onBehalfOf,\\n        paybackAmount\\n      );\\n    }\\n\\n    emit Repay(params.asset, params.onBehalfOf, msg.sender, paybackAmount, params.useATokens);\\n\\n    return paybackAmount;\\n  }\\n\\n  /**\\n   * @notice Implements the rebalance stable borrow rate feature. In case of liquidity crunches on the protocol, stable\\n   * rate borrows might need to be rebalanced to bring back equilibrium between the borrow and supply APYs.\\n   * @dev The rules that define if a position can be rebalanced are implemented in `ValidationLogic.validateRebalanceStableBorrowRate()`\\n   * @dev Emits the `RebalanceStableBorrowRate()` event\\n   * @param reserve The state of the reserve of the asset being repaid\\n   * @param asset The asset of the position being rebalanced\\n   * @param user The user being rebalanced\\n   */\\n  function executeRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    address asset,\\n    address user\\n  ) external {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateRebalanceStableBorrowRate(reserve, reserveCache, asset);\\n\\n    IStableDebtToken stableDebtToken = IStableDebtToken(reserveCache.stableDebtTokenAddress);\\n    uint256 stableDebt = IERC20(address(stableDebtToken)).balanceOf(user);\\n\\n    stableDebtToken.burn(user, stableDebt);\\n\\n    (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = stableDebtToken\\n      .mint(user, user, stableDebt, reserve.currentStableBorrowRate);\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    emit RebalanceStableBorrowRate(asset, user);\\n  }\\n\\n  /**\\n   * @notice Implements the swap borrow rate feature. Borrowers can swap from variable to stable positions at any time.\\n   * @dev Emits the `Swap()` event\\n   * @param reserve The of the reserve of the asset being repaid\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param asset The asset of the position being swapped\\n   * @param interestRateMode The current interest rate mode of the position being swapped\\n   */\\n  function executeSwapBorrowRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    DataTypes.InterestRateMode interestRateMode\\n  ) external {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    (uint256 stableDebt, uint256 variableDebt) = Helpers.getUserCurrentDebt(\\n      msg.sender,\\n      reserveCache\\n    );\\n\\n    ValidationLogic.validateSwapRateMode(\\n      reserve,\\n      reserveCache,\\n      userConfig,\\n      stableDebt,\\n      variableDebt,\\n      interestRateMode\\n    );\\n\\n    if (interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      (reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).burn(msg.sender, stableDebt);\\n\\n      (, reserveCache.nextScaledVariableDebt) = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).mint(msg.sender, msg.sender, stableDebt, reserveCache.nextVariableBorrowIndex);\\n    } else {\\n      reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        reserveCache.variableDebtTokenAddress\\n      ).burn(msg.sender, variableDebt, reserveCache.nextVariableBorrowIndex);\\n\\n      (, reserveCache.nextTotalStableDebt, reserveCache.nextAvgStableBorrowRate) = IStableDebtToken(\\n        reserveCache.stableDebtTokenAddress\\n      ).mint(msg.sender, msg.sender, variableDebt, reserve.currentStableBorrowRate);\\n    }\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    emit SwapBorrowRateMode(asset, msg.sender, interestRateMode);\\n  }\\n}\\n\",\"keccak256\":\"0xf3d4fcd846149f0414db46d23cee241831b3c04c375477e84bdb5a95bd3ccac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/BridgeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\nlibrary BridgeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @notice Mint unbacked aTokens to a user and updates the unbacked for the reserve.\\n   * @dev Essentially a supply without transferring the underlying.\\n   * @dev Emits the `MintUnbacked` event\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled` if asset is set as collateral\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param asset The address of the underlying asset to mint aTokens of\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function executeMintUnbacked(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateSupply(reserveCache, reserve, amount);\\n\\n    uint256 unbackedMintCap = reserveCache.reserveConfiguration.getUnbackedMintCap();\\n    uint256 reserveDecimals = reserveCache.reserveConfiguration.getDecimals();\\n\\n    uint256 unbacked = reserve.unbacked += amount.toUint128();\\n\\n    require(\\n      unbacked <= unbackedMintCap * (10 ** reserveDecimals),\\n      Errors.UNBACKED_MINT_CAP_EXCEEDED\\n    );\\n\\n    reserve.updateInterestRates(reserveCache, asset, 0, 0);\\n\\n    bool isFirstSupply = IAToken(reserveCache.aTokenAddress).mint(\\n      msg.sender,\\n      onBehalfOf,\\n      amount,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isFirstSupply) {\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration,\\n          reserveCache.aTokenAddress\\n        )\\n      ) {\\n        userConfig.setUsingAsCollateral(reserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(asset, onBehalfOf);\\n      }\\n    }\\n\\n    emit MintUnbacked(asset, msg.sender, onBehalfOf, amount, referralCode);\\n  }\\n\\n  /**\\n   * @notice Back the current unbacked with `amount` and pay `fee`.\\n   * @dev It is not possible to back more than the existing unbacked amount of the reserve\\n   * @dev Emits the `BackUnbacked` event\\n   * @param reserve The reserve to back unbacked for\\n   * @param asset The address of the underlying asset to repay\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @param protocolFeeBps The fraction of fees in basis points paid to the protocol\\n   * @return The backed amount\\n   */\\n  function executeBackUnbacked(\\n    DataTypes.ReserveData storage reserve,\\n    address asset,\\n    uint256 amount,\\n    uint256 fee,\\n    uint256 protocolFeeBps\\n  ) external returns (uint256) {\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    uint256 backingAmount = (amount < reserve.unbacked) ? amount : reserve.unbacked;\\n\\n    uint256 feeToProtocol = fee.percentMul(protocolFeeBps);\\n    uint256 feeToLP = fee - feeToProtocol;\\n    uint256 added = backingAmount + fee;\\n\\n    reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex(\\n      IERC20(reserveCache.aTokenAddress).totalSupply() +\\n        uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex),\\n      feeToLP\\n    );\\n\\n    reserve.accruedToTreasury += feeToProtocol.rayDiv(reserveCache.nextLiquidityIndex).toUint128();\\n\\n    reserve.unbacked -= backingAmount.toUint128();\\n    reserve.updateInterestRates(reserveCache, asset, added, 0);\\n\\n    IERC20(asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, added);\\n\\n    emit BackUnbacked(asset, msg.sender, backingAmount, fee);\\n\\n    return backingAmount;\\n  }\\n}\\n\",\"keccak256\":\"0x71e1204a0ee1e4b9cdf787b1949c219845e5099671dd07639c4fa23995379edd\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/EModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title EModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for all the actions related to the eMode\\n */\\nlibrary EModeLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @notice Updates the user efficiency mode category\\n   * @dev Will revert if user is borrowing non-compatible asset or change will drop HF < HEALTH_FACTOR_LIQUIDATION_THRESHOLD\\n   * @dev Emits the `UserEModeSet` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersEModeCategory The state of all users efficiency mode category\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the setUserEMode function\\n   */\\n  function executeSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => uint8) storage usersEModeCategory,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSetUserEModeParams memory params\\n  ) external {\\n    ValidationLogic.validateSetUserEMode(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      params.reservesCount,\\n      params.categoryId\\n    );\\n\\n    uint8 prevCategoryId = usersEModeCategory[msg.sender];\\n    usersEModeCategory[msg.sender] = params.categoryId;\\n\\n    if (prevCategoryId != 0) {\\n      ValidationLogic.validateHealthFactor(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        msg.sender,\\n        params.categoryId,\\n        params.reservesCount,\\n        params.oracle\\n      );\\n    }\\n    emit UserEModeSet(msg.sender, params.categoryId);\\n  }\\n\\n  /**\\n   * @notice Gets the eMode configuration and calculates the eMode asset price if a custom oracle is configured\\n   * @dev The eMode asset price returned is 0 if no oracle is specified\\n   * @param category The user eMode category\\n   * @param oracle The price oracle\\n   * @return The eMode ltv\\n   * @return The eMode liquidation threshold\\n   * @return The eMode asset price\\n   */\\n  function getEModeConfiguration(\\n    DataTypes.EModeCategory storage category,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 eModeAssetPrice = 0;\\n    address eModePriceSource = category.priceSource;\\n\\n    if (eModePriceSource != address(0)) {\\n      eModeAssetPrice = oracle.getAssetPrice(eModePriceSource);\\n    }\\n\\n    return (category.ltv, category.liquidationThreshold, eModeAssetPrice);\\n  }\\n\\n  /**\\n   * @notice Checks if eMode is active for a user and if yes, if the asset belongs to the eMode category chosen\\n   * @param eModeUserCategory The user eMode category\\n   * @param eModeAssetCategory The asset eMode category\\n   * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise\\n   */\\n  function isInEModeCategory(\\n    uint256 eModeUserCategory,\\n    uint256 eModeAssetCategory\\n  ) internal pure returns (bool) {\\n    return (eModeUserCategory != 0 && eModeAssetCategory == eModeUserCategory);\\n  }\\n}\\n\",\"keccak256\":\"0xc6f5fa12e295e17ff7c468a2aa2f73f29e9059e82474c9a4efef4a9b576a6598\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/FlashLoanLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IFlashLoanReceiver} from '../../../flashloan/interfaces/IFlashLoanReceiver.sol';\\nimport {IFlashLoanSimpleReceiver} from '../../../flashloan/interfaces/IFlashLoanSimpleReceiver.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {BorrowLogic} from './BorrowLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\n\\n/**\\n * @title FlashLoanLogic library\\n * @author Aave\\n * @notice Implements the logic for the flash loans\\n */\\nlibrary FlashLoanLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  // Helper struct for internal variables used in the `executeFlashLoan` function\\n  struct FlashLoanLocalVars {\\n    IFlashLoanReceiver receiver;\\n    uint256 i;\\n    address currentAsset;\\n    uint256 currentAmount;\\n    uint256[] totalPremiums;\\n    uint256 flashloanPremiumTotal;\\n    uint256 flashloanPremiumToProtocol;\\n  }\\n\\n  /**\\n   * @notice Implements the flashloan feature that allow users to access liquidity of the pool for one transaction\\n   * as long as the amount taken plus fee is returned or debt is opened.\\n   * @dev For authorized flashborrowers the fee is waived\\n   * @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\\n   * if the receiver have not approved the pool the transaction will revert.\\n   * @dev Emits the `FlashLoan()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the flashloan function\\n   */\\n  function executeFlashLoan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.FlashloanParams memory params\\n  ) external {\\n    // The usual action flow (cache -> updateState -> validation -> changeState -> updateRates)\\n    // is altered to (validation -> user payload -> cache -> updateState -> changeState -> updateRates) for flashloans.\\n    // This is done to protect against reentrance and rate manipulation within the user specified payload.\\n\\n    ValidationLogic.validateFlashloan(reservesData, params.assets, params.amounts);\\n\\n    FlashLoanLocalVars memory vars;\\n\\n    vars.totalPremiums = new uint256[](params.assets.length);\\n\\n    vars.receiver = IFlashLoanReceiver(params.receiverAddress);\\n    (vars.flashloanPremiumTotal, vars.flashloanPremiumToProtocol) = params.isAuthorizedFlashBorrower\\n      ? (0, 0)\\n      : (params.flashLoanPremiumTotal, params.flashLoanPremiumToProtocol);\\n\\n    for (vars.i = 0; vars.i < params.assets.length; vars.i++) {\\n      vars.currentAmount = params.amounts[vars.i];\\n      vars.totalPremiums[vars.i] = DataTypes.InterestRateMode(params.interestRateModes[vars.i]) ==\\n        DataTypes.InterestRateMode.NONE\\n        ? vars.currentAmount.percentMul(vars.flashloanPremiumTotal)\\n        : 0;\\n      IAToken(reservesData[params.assets[vars.i]].aTokenAddress).transferUnderlyingTo(\\n        params.receiverAddress,\\n        vars.currentAmount\\n      );\\n    }\\n\\n    require(\\n      vars.receiver.executeOperation(\\n        params.assets,\\n        params.amounts,\\n        vars.totalPremiums,\\n        msg.sender,\\n        params.params\\n      ),\\n      Errors.INVALID_FLASHLOAN_EXECUTOR_RETURN\\n    );\\n\\n    for (vars.i = 0; vars.i < params.assets.length; vars.i++) {\\n      vars.currentAsset = params.assets[vars.i];\\n      vars.currentAmount = params.amounts[vars.i];\\n\\n      if (\\n        DataTypes.InterestRateMode(params.interestRateModes[vars.i]) ==\\n        DataTypes.InterestRateMode.NONE\\n      ) {\\n        _handleFlashLoanRepayment(\\n          reservesData[vars.currentAsset],\\n          DataTypes.FlashLoanRepaymentParams({\\n            asset: vars.currentAsset,\\n            receiverAddress: params.receiverAddress,\\n            amount: vars.currentAmount,\\n            totalPremium: vars.totalPremiums[vars.i],\\n            flashLoanPremiumToProtocol: vars.flashloanPremiumToProtocol,\\n            referralCode: params.referralCode\\n          })\\n        );\\n      } else {\\n        // If the user chose to not return the funds, the system checks if there is enough collateral and\\n        // eventually opens a debt position\\n        BorrowLogic.executeBorrow(\\n          reservesData,\\n          reservesList,\\n          eModeCategories,\\n          userConfig,\\n          DataTypes.ExecuteBorrowParams({\\n            asset: vars.currentAsset,\\n            user: msg.sender,\\n            onBehalfOf: params.onBehalfOf,\\n            amount: vars.currentAmount,\\n            interestRateMode: DataTypes.InterestRateMode(params.interestRateModes[vars.i]),\\n            referralCode: params.referralCode,\\n            releaseUnderlying: false,\\n            maxStableRateBorrowSizePercent: params.maxStableRateBorrowSizePercent,\\n            reservesCount: params.reservesCount,\\n            oracle: IPoolAddressesProvider(params.addressesProvider).getPriceOracle(),\\n            userEModeCategory: params.userEModeCategory,\\n            priceOracleSentinel: IPoolAddressesProvider(params.addressesProvider)\\n              .getPriceOracleSentinel()\\n          })\\n        );\\n        // no premium is paid when taking on the flashloan as debt\\n        emit FlashLoan(\\n          params.receiverAddress,\\n          msg.sender,\\n          vars.currentAsset,\\n          vars.currentAmount,\\n          DataTypes.InterestRateMode(params.interestRateModes[vars.i]),\\n          0,\\n          params.referralCode\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Implements the simple flashloan feature that allow users to access liquidity of ONE reserve for one\\n   * transaction as long as the amount taken plus fee is returned.\\n   * @dev Does not waive fee for approved flashborrowers nor allow taking on debt instead of repaying to save gas\\n   * @dev At the end of the transaction the pool will pull amount borrowed + fee from the receiver,\\n   * if the receiver have not approved the pool the transaction will revert.\\n   * @dev Emits the `FlashLoan()` event\\n   * @param reserve The state of the flashloaned reserve\\n   * @param params The additional parameters needed to execute the simple flashloan function\\n   */\\n  function executeFlashLoanSimple(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.FlashloanSimpleParams memory params\\n  ) external {\\n    // The usual action flow (cache -> updateState -> validation -> changeState -> updateRates)\\n    // is altered to (validation -> user payload -> cache -> updateState -> changeState -> updateRates) for flashloans.\\n    // This is done to protect against reentrance and rate manipulation within the user specified payload.\\n\\n    ValidationLogic.validateFlashloanSimple(reserve);\\n\\n    IFlashLoanSimpleReceiver receiver = IFlashLoanSimpleReceiver(params.receiverAddress);\\n    uint256 totalPremium = params.amount.percentMul(params.flashLoanPremiumTotal);\\n    IAToken(reserve.aTokenAddress).transferUnderlyingTo(params.receiverAddress, params.amount);\\n\\n    require(\\n      receiver.executeOperation(\\n        params.asset,\\n        params.amount,\\n        totalPremium,\\n        msg.sender,\\n        params.params\\n      ),\\n      Errors.INVALID_FLASHLOAN_EXECUTOR_RETURN\\n    );\\n\\n    _handleFlashLoanRepayment(\\n      reserve,\\n      DataTypes.FlashLoanRepaymentParams({\\n        asset: params.asset,\\n        receiverAddress: params.receiverAddress,\\n        amount: params.amount,\\n        totalPremium: totalPremium,\\n        flashLoanPremiumToProtocol: params.flashLoanPremiumToProtocol,\\n        referralCode: params.referralCode\\n      })\\n    );\\n  }\\n\\n  /**\\n   * @notice Handles repayment of flashloaned assets + premium\\n   * @dev Will pull the amount + premium from the receiver, so must have approved pool\\n   * @param reserve The state of the flashloaned reserve\\n   * @param params The additional parameters needed to execute the repayment function\\n   */\\n  function _handleFlashLoanRepayment(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.FlashLoanRepaymentParams memory params\\n  ) internal {\\n    uint256 premiumToProtocol = params.totalPremium.percentMul(params.flashLoanPremiumToProtocol);\\n    uint256 premiumToLP = params.totalPremium - premiumToProtocol;\\n    uint256 amountPlusPremium = params.amount + params.totalPremium;\\n\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n    reserve.updateState(reserveCache);\\n    reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex(\\n      IERC20(reserveCache.aTokenAddress).totalSupply() +\\n        uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex),\\n      premiumToLP\\n    );\\n\\n    reserve.accruedToTreasury += premiumToProtocol\\n      .rayDiv(reserveCache.nextLiquidityIndex)\\n      .toUint128();\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, amountPlusPremium, 0);\\n\\n    IERC20(params.asset).safeTransferFrom(\\n      params.receiverAddress,\\n      reserveCache.aTokenAddress,\\n      amountPlusPremium\\n    );\\n\\n    IAToken(reserveCache.aTokenAddress).handleRepayment(\\n      params.receiverAddress,\\n      params.receiverAddress,\\n      amountPlusPremium\\n    );\\n\\n    emit FlashLoan(\\n      params.receiverAddress,\\n      msg.sender,\\n      params.asset,\\n      params.amount,\\n      DataTypes.InterestRateMode(0),\\n      params.totalPremium,\\n      params.referralCode\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x086859964ddcf0b39d0ee5498f2c9baf211bcecd18d36864848ed33bd6396a3b\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/GenericLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\n\\n/**\\n * @title GenericLogic library\\n * @author Aave\\n * @notice Implements protocol-level logic to calculate and validate the state of a user\\n */\\nlibrary GenericLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  struct CalculateUserAccountDataVars {\\n    uint256 assetPrice;\\n    uint256 assetUnit;\\n    uint256 userBalanceInBaseCurrency;\\n    uint256 decimals;\\n    uint256 ltv;\\n    uint256 liquidationThreshold;\\n    uint256 i;\\n    uint256 healthFactor;\\n    uint256 totalCollateralInBaseCurrency;\\n    uint256 totalDebtInBaseCurrency;\\n    uint256 avgLtv;\\n    uint256 avgLiquidationThreshold;\\n    uint256 eModeAssetPrice;\\n    uint256 eModeLtv;\\n    uint256 eModeLiqThreshold;\\n    uint256 eModeAssetCategory;\\n    address currentReserveAddress;\\n    bool hasZeroLtvCollateral;\\n    bool isInEModeCategory;\\n  }\\n\\n  /**\\n   * @notice Calculates the user data across the reserves.\\n   * @dev It includes the total liquidity/collateral/borrow balances in the base currency used by the price feed,\\n   * the average Loan To Value, the average Liquidation Ratio, and the Health factor.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional parameters needed for the calculation\\n   * @return The total collateral of the user in the base currency used by the price feed\\n   * @return The total debt of the user in the base currency used by the price feed\\n   * @return The average ltv of the user\\n   * @return The average liquidation threshold of the user\\n   * @return The health factor of the user\\n   * @return True if the ltv is zero, false otherwise\\n   */\\n  function calculateUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  ) internal view returns (uint256, uint256, uint256, uint256, uint256, bool) {\\n    if (params.userConfig.isEmpty()) {\\n      return (0, 0, 0, 0, type(uint256).max, false);\\n    }\\n\\n    CalculateUserAccountDataVars memory vars;\\n\\n    if (params.userEModeCategory != 0) {\\n      (vars.eModeLtv, vars.eModeLiqThreshold, vars.eModeAssetPrice) = EModeLogic\\n        .getEModeConfiguration(\\n          eModeCategories[params.userEModeCategory],\\n          IPriceOracleGetter(params.oracle)\\n        );\\n    }\\n\\n    while (vars.i < params.reservesCount) {\\n      if (!params.userConfig.isUsingAsCollateralOrBorrowing(vars.i)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      vars.currentReserveAddress = reservesList[vars.i];\\n\\n      if (vars.currentReserveAddress == address(0)) {\\n        unchecked {\\n          ++vars.i;\\n        }\\n        continue;\\n      }\\n\\n      DataTypes.ReserveData storage currentReserve = reservesData[vars.currentReserveAddress];\\n\\n      (\\n        vars.ltv,\\n        vars.liquidationThreshold,\\n        ,\\n        vars.decimals,\\n        ,\\n        vars.eModeAssetCategory\\n      ) = currentReserve.configuration.getParams();\\n\\n      unchecked {\\n        vars.assetUnit = 10 ** vars.decimals;\\n      }\\n\\n      vars.assetPrice = vars.eModeAssetPrice != 0 &&\\n        params.userEModeCategory == vars.eModeAssetCategory\\n        ? vars.eModeAssetPrice\\n        : IPriceOracleGetter(params.oracle).getAssetPrice(vars.currentReserveAddress);\\n\\n      if (vars.liquidationThreshold != 0 && params.userConfig.isUsingAsCollateral(vars.i)) {\\n        vars.userBalanceInBaseCurrency = _getUserBalanceInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n\\n        vars.totalCollateralInBaseCurrency += vars.userBalanceInBaseCurrency;\\n\\n        vars.isInEModeCategory = EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          vars.eModeAssetCategory\\n        );\\n\\n        if (vars.ltv != 0) {\\n          vars.avgLtv +=\\n            vars.userBalanceInBaseCurrency *\\n            (vars.isInEModeCategory ? vars.eModeLtv : vars.ltv);\\n        } else {\\n          vars.hasZeroLtvCollateral = true;\\n        }\\n\\n        vars.avgLiquidationThreshold +=\\n          vars.userBalanceInBaseCurrency *\\n          (vars.isInEModeCategory ? vars.eModeLiqThreshold : vars.liquidationThreshold);\\n      }\\n\\n      if (params.userConfig.isBorrowing(vars.i)) {\\n        vars.totalDebtInBaseCurrency += _getUserDebtInBaseCurrency(\\n          params.user,\\n          currentReserve,\\n          vars.assetPrice,\\n          vars.assetUnit\\n        );\\n      }\\n\\n      unchecked {\\n        ++vars.i;\\n      }\\n    }\\n\\n    unchecked {\\n      vars.avgLtv = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLtv / vars.totalCollateralInBaseCurrency\\n        : 0;\\n      vars.avgLiquidationThreshold = vars.totalCollateralInBaseCurrency != 0\\n        ? vars.avgLiquidationThreshold / vars.totalCollateralInBaseCurrency\\n        : 0;\\n    }\\n\\n    vars.healthFactor = (vars.totalDebtInBaseCurrency == 0)\\n      ? type(uint256).max\\n      : (vars.totalCollateralInBaseCurrency.percentMul(vars.avgLiquidationThreshold)).wadDiv(\\n        vars.totalDebtInBaseCurrency\\n      );\\n    return (\\n      vars.totalCollateralInBaseCurrency,\\n      vars.totalDebtInBaseCurrency,\\n      vars.avgLtv,\\n      vars.avgLiquidationThreshold,\\n      vars.healthFactor,\\n      vars.hasZeroLtvCollateral\\n    );\\n  }\\n\\n  /**\\n   * @notice Calculates the maximum amount that can be borrowed depending on the available collateral, the total debt\\n   * and the average Loan To Value\\n   * @param totalCollateralInBaseCurrency The total collateral in the base currency used by the price feed\\n   * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed\\n   * @param ltv The average loan to value\\n   * @return The amount available to borrow in the base currency of the used by the price feed\\n   */\\n  function calculateAvailableBorrows(\\n    uint256 totalCollateralInBaseCurrency,\\n    uint256 totalDebtInBaseCurrency,\\n    uint256 ltv\\n  ) internal pure returns (uint256) {\\n    uint256 availableBorrowsInBaseCurrency = totalCollateralInBaseCurrency.percentMul(ltv);\\n\\n    if (availableBorrowsInBaseCurrency < totalDebtInBaseCurrency) {\\n      return 0;\\n    }\\n\\n    availableBorrowsInBaseCurrency = availableBorrowsInBaseCurrency - totalDebtInBaseCurrency;\\n    return availableBorrowsInBaseCurrency;\\n  }\\n\\n  /**\\n   * @notice Calculates total debt of the user in the based currency used to normalize the values of the assets\\n   * @dev This fetches the `balanceOf` of the stable and variable debt tokens for the user. For gas reasons, the\\n   * variable debt balance is calculated by fetching `scaledBalancesOf` normalized debt, which is cheaper than\\n   * fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total debt of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total debt of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total debt of the user normalized to the base currency\\n   */\\n  function _getUserDebtInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    // fetching variable debt\\n    uint256 userTotalDebt = IScaledBalanceToken(reserve.variableDebtTokenAddress).scaledBalanceOf(\\n      user\\n    );\\n    if (userTotalDebt != 0) {\\n      userTotalDebt = userTotalDebt.rayMul(reserve.getNormalizedDebt());\\n    }\\n\\n    userTotalDebt = userTotalDebt + IERC20(reserve.stableDebtTokenAddress).balanceOf(user);\\n\\n    userTotalDebt = assetPrice * userTotalDebt;\\n\\n    unchecked {\\n      return userTotalDebt / assetUnit;\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates total aToken balance of the user in the based currency used by the price oracle\\n   * @dev For gas reasons, the aToken balance is calculated by fetching `scaledBalancesOf` normalized debt, which\\n   * is cheaper than fetching `balanceOf`\\n   * @param user The address of the user\\n   * @param reserve The data of the reserve for which the total aToken balance of the user is being calculated\\n   * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated\\n   * @param assetUnit The value representing one full unit of the asset (10^decimals)\\n   * @return The total aToken balance of the user normalized to the base currency of the price oracle\\n   */\\n  function _getUserBalanceInBaseCurrency(\\n    address user,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 assetPrice,\\n    uint256 assetUnit\\n  ) private view returns (uint256) {\\n    uint256 normalizedIncome = reserve.getNormalizedIncome();\\n    uint256 balance = (\\n      IScaledBalanceToken(reserve.aTokenAddress).scaledBalanceOf(user).rayMul(normalizedIncome)\\n    ) * assetPrice;\\n\\n    unchecked {\\n      return balance / assetUnit;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xcb00ce7f02964c4f26001999ea41fee3078b71a5ed27358211f09a5e9c7a72f3\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/IsolationModeLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title IsolationModeLogic library\\n * @author Aave\\n * @notice Implements the base logic for handling repayments for assets borrowed in isolation mode\\n */\\nlibrary IsolationModeLogic {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using SafeCast for uint256;\\n\\n  // See `IPool` for descriptions\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice updated the isolated debt whenever a position collateralized by an isolated asset is repaid or liquidated\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping\\n   * @param reserveCache The cached data of the reserve\\n   * @param repayAmount The amount being repaid\\n   */\\n  function updateIsolatedDebtIfIsolated(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 repayAmount\\n  ) internal {\\n    (bool isolationModeActive, address isolationModeCollateralAddress, ) = userConfig\\n      .getIsolationModeState(reservesData, reservesList);\\n\\n    if (isolationModeActive) {\\n      uint128 isolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n        .isolationModeTotalDebt;\\n\\n      uint128 isolatedDebtRepaid = (repayAmount /\\n        10 **\\n          (reserveCache.reserveConfiguration.getDecimals() -\\n            ReserveConfiguration.DEBT_CEILING_DECIMALS)).toUint128();\\n\\n      // since the debt ceiling does not take into account the interest accrued, it might happen that amount\\n      // repaid > debt in isolation mode\\n      if (isolationModeTotalDebt <= isolatedDebtRepaid) {\\n        reservesData[isolationModeCollateralAddress].isolationModeTotalDebt = 0;\\n        emit IsolationModeTotalDebtUpdated(isolationModeCollateralAddress, 0);\\n      } else {\\n        uint256 nextIsolationModeTotalDebt = reservesData[isolationModeCollateralAddress]\\n          .isolationModeTotalDebt = isolationModeTotalDebt - isolatedDebtRepaid;\\n        emit IsolationModeTotalDebtUpdated(\\n          isolationModeCollateralAddress,\\n          nextIsolationModeTotalDebt\\n        );\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xf96e7a7bb1d0d62c233462fcb86954361ef2d7be03bf444017ce8a443d0b6cc1\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/LiquidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts//IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {PercentageMath} from '../../libraries/math/PercentageMath.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Helpers} from '../../libraries/helpers/Helpers.sol';\\nimport {DataTypes} from '../../libraries/types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {IsolationModeLogic} from './IsolationModeLogic.sol';\\nimport {EModeLogic} from './EModeLogic.sol';\\nimport {UserConfiguration} from '../../libraries/configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../../libraries/configuration/ReserveConfiguration.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\n\\n/**\\n * @title LiquidationLogic library\\n * @author Aave\\n * @notice Implements actions involving management of collateral in the protocol, the main one being the liquidations\\n */\\nlibrary LiquidationLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Default percentage of borrower's debt to be repaid in a liquidation.\\n   * @dev Percentage applied when the users health factor is above `CLOSE_FACTOR_HF_THRESHOLD`\\n   * Expressed in bps, a value of 0.5e4 results in 50.00%\\n   */\\n  uint256 internal constant DEFAULT_LIQUIDATION_CLOSE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @dev Maximum percentage of borrower's debt to be repaid in a liquidation\\n   * @dev Percentage applied when the users health factor is below `CLOSE_FACTOR_HF_THRESHOLD`\\n   * Expressed in bps, a value of 1e4 results in 100.00%\\n   */\\n  uint256 public constant MAX_LIQUIDATION_CLOSE_FACTOR = 1e4;\\n\\n  /**\\n   * @dev This constant represents below which health factor value it is possible to liquidate\\n   * an amount of debt corresponding to `MAX_LIQUIDATION_CLOSE_FACTOR`.\\n   * A value of 0.95e18 results in 0.95\\n   */\\n  uint256 public constant CLOSE_FACTOR_HF_THRESHOLD = 0.95e18;\\n\\n  struct LiquidationCallLocalVars {\\n    uint256 userCollateralBalance;\\n    uint256 userVariableDebt;\\n    uint256 userTotalDebt;\\n    uint256 actualDebtToLiquidate;\\n    uint256 actualCollateralToLiquidate;\\n    uint256 liquidationBonus;\\n    uint256 healthFactor;\\n    uint256 liquidationProtocolFeeAmount;\\n    address collateralPriceSource;\\n    address debtPriceSource;\\n    IAToken collateralAToken;\\n    DataTypes.ReserveCache debtReserveCache;\\n  }\\n\\n  /**\\n   * @notice Function to liquidate a position if its Health Factor drops below 1. The caller (liquidator)\\n   * covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   * a proportional amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @dev Emits the `LiquidationCall()` event\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params The additional parameters needed to execute the liquidation function\\n   */\\n  function executeLiquidationCall(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ExecuteLiquidationCallParams memory params\\n  ) external {\\n    LiquidationCallLocalVars memory vars;\\n\\n    DataTypes.ReserveData storage collateralReserve = reservesData[params.collateralAsset];\\n    DataTypes.ReserveData storage debtReserve = reservesData[params.debtAsset];\\n    DataTypes.UserConfigurationMap storage userConfig = usersConfig[params.user];\\n    vars.debtReserveCache = debtReserve.cache();\\n    debtReserve.updateState(vars.debtReserveCache);\\n\\n    (, , , , vars.healthFactor, ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.user,\\n        oracle: params.priceOracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    (vars.userVariableDebt, vars.userTotalDebt, vars.actualDebtToLiquidate) = _calculateDebt(\\n      vars.debtReserveCache,\\n      params,\\n      vars.healthFactor\\n    );\\n\\n    ValidationLogic.validateLiquidationCall(\\n      userConfig,\\n      collateralReserve,\\n      DataTypes.ValidateLiquidationCallParams({\\n        debtReserveCache: vars.debtReserveCache,\\n        totalDebt: vars.userTotalDebt,\\n        healthFactor: vars.healthFactor,\\n        priceOracleSentinel: params.priceOracleSentinel\\n      })\\n    );\\n\\n    (\\n      vars.collateralAToken,\\n      vars.collateralPriceSource,\\n      vars.debtPriceSource,\\n      vars.liquidationBonus\\n    ) = _getConfigurationData(eModeCategories, collateralReserve, params);\\n\\n    vars.userCollateralBalance = vars.collateralAToken.balanceOf(params.user);\\n\\n    (\\n      vars.actualCollateralToLiquidate,\\n      vars.actualDebtToLiquidate,\\n      vars.liquidationProtocolFeeAmount\\n    ) = _calculateAvailableCollateralToLiquidate(\\n      collateralReserve,\\n      vars.debtReserveCache,\\n      vars.collateralPriceSource,\\n      vars.debtPriceSource,\\n      vars.actualDebtToLiquidate,\\n      vars.userCollateralBalance,\\n      vars.liquidationBonus,\\n      IPriceOracleGetter(params.priceOracle)\\n    );\\n\\n    if (vars.userTotalDebt == vars.actualDebtToLiquidate) {\\n      userConfig.setBorrowing(debtReserve.id, false);\\n    }\\n\\n    // If the collateral being liquidated is equal to the user balance,\\n    // we set the currency as not being used as collateral anymore\\n    if (\\n      vars.actualCollateralToLiquidate + vars.liquidationProtocolFeeAmount ==\\n      vars.userCollateralBalance\\n    ) {\\n      userConfig.setUsingAsCollateral(collateralReserve.id, false);\\n      emit ReserveUsedAsCollateralDisabled(params.collateralAsset, params.user);\\n    }\\n\\n    _burnDebtTokens(params, vars);\\n\\n    debtReserve.updateInterestRates(\\n      vars.debtReserveCache,\\n      params.debtAsset,\\n      vars.actualDebtToLiquidate,\\n      0\\n    );\\n\\n    IsolationModeLogic.updateIsolatedDebtIfIsolated(\\n      reservesData,\\n      reservesList,\\n      userConfig,\\n      vars.debtReserveCache,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    if (params.receiveAToken) {\\n      _liquidateATokens(reservesData, reservesList, usersConfig, collateralReserve, params, vars);\\n    } else {\\n      _burnCollateralATokens(collateralReserve, params, vars);\\n    }\\n\\n    // Transfer fee to treasury if it is non-zero\\n    if (vars.liquidationProtocolFeeAmount != 0) {\\n      uint256 liquidityIndex = collateralReserve.getNormalizedIncome();\\n      uint256 scaledDownLiquidationProtocolFee = vars.liquidationProtocolFeeAmount.rayDiv(\\n        liquidityIndex\\n      );\\n      uint256 scaledDownUserBalance = vars.collateralAToken.scaledBalanceOf(params.user);\\n      // To avoid trying to send more aTokens than available on balance, due to 1 wei imprecision\\n      if (scaledDownLiquidationProtocolFee > scaledDownUserBalance) {\\n        vars.liquidationProtocolFeeAmount = scaledDownUserBalance.rayMul(liquidityIndex);\\n      }\\n      vars.collateralAToken.transferOnLiquidation(\\n        params.user,\\n        vars.collateralAToken.RESERVE_TREASURY_ADDRESS(),\\n        vars.liquidationProtocolFeeAmount\\n      );\\n    }\\n\\n    // Transfers the debt asset being repaid to the aToken, where the liquidity is kept\\n    IERC20(params.debtAsset).safeTransferFrom(\\n      msg.sender,\\n      vars.debtReserveCache.aTokenAddress,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    IAToken(vars.debtReserveCache.aTokenAddress).handleRepayment(\\n      msg.sender,\\n      params.user,\\n      vars.actualDebtToLiquidate\\n    );\\n\\n    emit LiquidationCall(\\n      params.collateralAsset,\\n      params.debtAsset,\\n      params.user,\\n      vars.actualDebtToLiquidate,\\n      vars.actualCollateralToLiquidate,\\n      msg.sender,\\n      params.receiveAToken\\n    );\\n  }\\n\\n  /**\\n   * @notice Burns the collateral aTokens and transfers the underlying to the liquidator.\\n   * @dev   The function also updates the state and the interest rate of the collateral reserve.\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars The executeLiquidationCall() function local vars\\n   */\\n  function _burnCollateralATokens(\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    DataTypes.ReserveCache memory collateralReserveCache = collateralReserve.cache();\\n    collateralReserve.updateState(collateralReserveCache);\\n    collateralReserve.updateInterestRates(\\n      collateralReserveCache,\\n      params.collateralAsset,\\n      0,\\n      vars.actualCollateralToLiquidate\\n    );\\n\\n    // Burn the equivalent amount of aToken, sending the underlying to the liquidator\\n    vars.collateralAToken.burn(\\n      params.user,\\n      msg.sender,\\n      vars.actualCollateralToLiquidate,\\n      collateralReserveCache.nextLiquidityIndex\\n    );\\n  }\\n\\n  /**\\n   * @notice Liquidates the user aTokens by transferring them to the liquidator.\\n   * @dev   The function also checks the state of the liquidator and activates the aToken as collateral\\n   *        as in standard transfers if the isolation mode constraints are respected.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars The executeLiquidationCall() function local vars\\n   */\\n  function _liquidateATokens(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    uint256 liquidatorPreviousATokenBalance = IERC20(vars.collateralAToken).balanceOf(msg.sender);\\n    vars.collateralAToken.transferOnLiquidation(\\n      params.user,\\n      msg.sender,\\n      vars.actualCollateralToLiquidate\\n    );\\n\\n    if (liquidatorPreviousATokenBalance == 0) {\\n      DataTypes.UserConfigurationMap storage liquidatorConfig = usersConfig[msg.sender];\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          liquidatorConfig,\\n          collateralReserve.configuration,\\n          collateralReserve.aTokenAddress\\n        )\\n      ) {\\n        liquidatorConfig.setUsingAsCollateral(collateralReserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(params.collateralAsset, msg.sender);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns the debt tokens of the user up to the amount being repaid by the liquidator.\\n   * @dev The function alters the `debtReserveCache` state in `vars` to update the debt related data.\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param vars the executeLiquidationCall() function local vars\\n   */\\n  function _burnDebtTokens(\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    LiquidationCallLocalVars memory vars\\n  ) internal {\\n    if (vars.userVariableDebt >= vars.actualDebtToLiquidate) {\\n      vars.debtReserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n        vars.debtReserveCache.variableDebtTokenAddress\\n      ).burn(\\n          params.user,\\n          vars.actualDebtToLiquidate,\\n          vars.debtReserveCache.nextVariableBorrowIndex\\n        );\\n    } else {\\n      // If the user doesn't have variable debt, no need to try to burn variable debt tokens\\n      if (vars.userVariableDebt != 0) {\\n        vars.debtReserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n          vars.debtReserveCache.variableDebtTokenAddress\\n        ).burn(params.user, vars.userVariableDebt, vars.debtReserveCache.nextVariableBorrowIndex);\\n      }\\n      (\\n        vars.debtReserveCache.nextTotalStableDebt,\\n        vars.debtReserveCache.nextAvgStableBorrowRate\\n      ) = IStableDebtToken(vars.debtReserveCache.stableDebtTokenAddress).burn(\\n        params.user,\\n        vars.actualDebtToLiquidate - vars.userVariableDebt\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @notice Calculates the total debt of the user and the actual amount to liquidate depending on the health factor\\n   * and corresponding close factor.\\n   * @dev If the Health Factor is below CLOSE_FACTOR_HF_THRESHOLD, the close factor is increased to MAX_LIQUIDATION_CLOSE_FACTOR\\n   * @param debtReserveCache The reserve cache data object of the debt reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @param healthFactor The health factor of the position\\n   * @return The variable debt of the user\\n   * @return The total debt of the user\\n   * @return The actual debt to liquidate as a function of the closeFactor\\n   */\\n  function _calculateDebt(\\n    DataTypes.ReserveCache memory debtReserveCache,\\n    DataTypes.ExecuteLiquidationCallParams memory params,\\n    uint256 healthFactor\\n  ) internal view returns (uint256, uint256, uint256) {\\n    (uint256 userStableDebt, uint256 userVariableDebt) = Helpers.getUserCurrentDebt(\\n      params.user,\\n      debtReserveCache\\n    );\\n\\n    uint256 userTotalDebt = userStableDebt + userVariableDebt;\\n\\n    uint256 closeFactor = healthFactor > CLOSE_FACTOR_HF_THRESHOLD\\n      ? DEFAULT_LIQUIDATION_CLOSE_FACTOR\\n      : MAX_LIQUIDATION_CLOSE_FACTOR;\\n\\n    uint256 maxLiquidatableDebt = userTotalDebt.percentMul(closeFactor);\\n\\n    uint256 actualDebtToLiquidate = params.debtToCover > maxLiquidatableDebt\\n      ? maxLiquidatableDebt\\n      : params.debtToCover;\\n\\n    return (userVariableDebt, userTotalDebt, actualDebtToLiquidate);\\n  }\\n\\n  /**\\n   * @notice Returns the configuration data for the debt and the collateral reserves.\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param params The additional parameters needed to execute the liquidation function\\n   * @return The collateral aToken\\n   * @return The address to use as price source for the collateral\\n   * @return The address to use as price source for the debt\\n   * @return The liquidation bonus to apply to the collateral\\n   */\\n  function _getConfigurationData(\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ExecuteLiquidationCallParams memory params\\n  ) internal view returns (IAToken, address, address, uint256) {\\n    IAToken collateralAToken = IAToken(collateralReserve.aTokenAddress);\\n    uint256 liquidationBonus = collateralReserve.configuration.getLiquidationBonus();\\n\\n    address collateralPriceSource = params.collateralAsset;\\n    address debtPriceSource = params.debtAsset;\\n\\n    if (params.userEModeCategory != 0) {\\n      address eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n\\n      if (\\n        EModeLogic.isInEModeCategory(\\n          params.userEModeCategory,\\n          collateralReserve.configuration.getEModeCategory()\\n        )\\n      ) {\\n        liquidationBonus = eModeCategories[params.userEModeCategory].liquidationBonus;\\n\\n        if (eModePriceSource != address(0)) {\\n          collateralPriceSource = eModePriceSource;\\n        }\\n      }\\n\\n      // when in eMode, debt will always be in the same eMode category, can skip matching category check\\n      if (eModePriceSource != address(0)) {\\n        debtPriceSource = eModePriceSource;\\n      }\\n    }\\n\\n    return (collateralAToken, collateralPriceSource, debtPriceSource, liquidationBonus);\\n  }\\n\\n  struct AvailableCollateralToLiquidateLocalVars {\\n    uint256 collateralPrice;\\n    uint256 debtAssetPrice;\\n    uint256 maxCollateralToLiquidate;\\n    uint256 baseCollateral;\\n    uint256 bonusCollateral;\\n    uint256 debtAssetDecimals;\\n    uint256 collateralDecimals;\\n    uint256 collateralAssetUnit;\\n    uint256 debtAssetUnit;\\n    uint256 collateralAmount;\\n    uint256 debtAmountNeeded;\\n    uint256 liquidationProtocolFeePercentage;\\n    uint256 liquidationProtocolFee;\\n  }\\n\\n  /**\\n   * @notice Calculates how much of a specific collateral can be liquidated, given\\n   * a certain amount of debt asset.\\n   * @dev This function needs to be called after all the checks to validate the liquidation have been performed,\\n   *   otherwise it might fail.\\n   * @param collateralReserve The data of the collateral reserve\\n   * @param debtReserveCache The cached data of the debt reserve\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param userCollateralBalance The collateral balance for the specific `collateralAsset` of the user being liquidated\\n   * @param liquidationBonus The collateral bonus percentage to receive as result of the liquidation\\n   * @return The maximum amount that is possible to liquidate given all the liquidation constraints (user balance, close factor)\\n   * @return The amount to repay with the liquidation\\n   * @return The fee taken from the liquidation bonus amount to be paid to the protocol\\n   */\\n  function _calculateAvailableCollateralToLiquidate(\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ReserveCache memory debtReserveCache,\\n    address collateralAsset,\\n    address debtAsset,\\n    uint256 debtToCover,\\n    uint256 userCollateralBalance,\\n    uint256 liquidationBonus,\\n    IPriceOracleGetter oracle\\n  ) internal view returns (uint256, uint256, uint256) {\\n    AvailableCollateralToLiquidateLocalVars memory vars;\\n\\n    vars.collateralPrice = oracle.getAssetPrice(collateralAsset);\\n    vars.debtAssetPrice = oracle.getAssetPrice(debtAsset);\\n\\n    vars.collateralDecimals = collateralReserve.configuration.getDecimals();\\n    vars.debtAssetDecimals = debtReserveCache.reserveConfiguration.getDecimals();\\n\\n    unchecked {\\n      vars.collateralAssetUnit = 10 ** vars.collateralDecimals;\\n      vars.debtAssetUnit = 10 ** vars.debtAssetDecimals;\\n    }\\n\\n    vars.liquidationProtocolFeePercentage = collateralReserve\\n      .configuration\\n      .getLiquidationProtocolFee();\\n\\n    // This is the base collateral to liquidate based on the given debt to cover\\n    vars.baseCollateral =\\n      ((vars.debtAssetPrice * debtToCover * vars.collateralAssetUnit)) /\\n      (vars.collateralPrice * vars.debtAssetUnit);\\n\\n    vars.maxCollateralToLiquidate = vars.baseCollateral.percentMul(liquidationBonus);\\n\\n    if (vars.maxCollateralToLiquidate > userCollateralBalance) {\\n      vars.collateralAmount = userCollateralBalance;\\n      vars.debtAmountNeeded = ((vars.collateralPrice * vars.collateralAmount * vars.debtAssetUnit) /\\n        (vars.debtAssetPrice * vars.collateralAssetUnit)).percentDiv(liquidationBonus);\\n    } else {\\n      vars.collateralAmount = vars.maxCollateralToLiquidate;\\n      vars.debtAmountNeeded = debtToCover;\\n    }\\n\\n    if (vars.liquidationProtocolFeePercentage != 0) {\\n      vars.bonusCollateral =\\n        vars.collateralAmount -\\n        vars.collateralAmount.percentDiv(liquidationBonus);\\n\\n      vars.liquidationProtocolFee = vars.bonusCollateral.percentMul(\\n        vars.liquidationProtocolFeePercentage\\n      );\\n\\n      return (\\n        vars.collateralAmount - vars.liquidationProtocolFee,\\n        vars.debtAmountNeeded,\\n        vars.liquidationProtocolFee\\n      );\\n    } else {\\n      return (vars.collateralAmount, vars.debtAmountNeeded, 0);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xde6eb6f7c1e21dfee970b2f5abe014ed4c422164c505a5dbbe1191bd59cd85ec\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/PoolLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\n\\n/**\\n * @title PoolLogic library\\n * @author Aave\\n * @notice Implements the logic for Pool specific functions\\n */\\nlibrary PoolLogic {\\n  using GPv2SafeERC20 for IERC20;\\n  using WadRayMath for uint256;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @notice Initialize an asset reserve and add the reserve to the list of reserves\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param params Additional parameters needed for initiation\\n   * @return true if appended, false if inserted at existing empty spot\\n   */\\n  function executeInitReserve(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.InitReserveParams memory params\\n  ) external returns (bool) {\\n    require(Address.isContract(params.asset), Errors.NOT_CONTRACT);\\n    reservesData[params.asset].init(\\n      params.aTokenAddress,\\n      params.stableDebtAddress,\\n      params.variableDebtAddress,\\n      params.interestRateStrategyAddress\\n    );\\n\\n    bool reserveAlreadyAdded = reservesData[params.asset].id != 0 ||\\n      reservesList[0] == params.asset;\\n    require(!reserveAlreadyAdded, Errors.RESERVE_ALREADY_ADDED);\\n\\n    for (uint16 i = 0; i < params.reservesCount; i++) {\\n      if (reservesList[i] == address(0)) {\\n        reservesData[params.asset].id = i;\\n        reservesList[i] = params.asset;\\n        return false;\\n      }\\n    }\\n\\n    require(params.reservesCount < params.maxNumberReserves, Errors.NO_MORE_RESERVES_ALLOWED);\\n    reservesData[params.asset].id = params.reservesCount;\\n    reservesList[params.reservesCount] = params.asset;\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function executeRescueTokens(address token, address to, uint256 amount) external {\\n    IERC20(token).safeTransfer(to, amount);\\n  }\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param reservesData The state of all the reserves\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function executeMintToTreasury(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] calldata assets\\n  ) external {\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      address assetAddress = assets[i];\\n\\n      DataTypes.ReserveData storage reserve = reservesData[assetAddress];\\n\\n      // this cover both inactive reserves and invalid reserves since the flag will be 0 for both\\n      if (!reserve.configuration.getActive()) {\\n        continue;\\n      }\\n\\n      uint256 accruedToTreasury = reserve.accruedToTreasury;\\n\\n      if (accruedToTreasury != 0) {\\n        reserve.accruedToTreasury = 0;\\n        uint256 normalizedIncome = reserve.getNormalizedIncome();\\n        uint256 amountToMint = accruedToTreasury.rayMul(normalizedIncome);\\n        IAToken(reserve.aTokenAddress).mintToTreasury(amountToMint, normalizedIncome);\\n\\n        emit MintedToTreasury(assetAddress, amountToMint);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param reservesData The state of all the reserves\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function executeResetIsolationModeTotalDebt(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address asset\\n  ) external {\\n    require(reservesData[asset].configuration.getDebtCeiling() == 0, Errors.DEBT_CEILING_NOT_ZERO);\\n    reservesData[asset].isolationModeTotalDebt = 0;\\n    emit IsolationModeTotalDebtUpdated(asset, 0);\\n  }\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function executeDropReserve(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    address asset\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    ValidationLogic.validateDropReserve(reservesList, reserve, asset);\\n    reservesList[reservesData[asset].id] = address(0);\\n    delete reservesData[asset];\\n  }\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the calculation\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function executeGetUserAccountData(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.CalculateUserAccountDataParams memory params\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    )\\n  {\\n    (\\n      totalCollateralBase,\\n      totalDebtBase,\\n      ltv,\\n      currentLiquidationThreshold,\\n      healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(reservesData, reservesList, eModeCategories, params);\\n\\n    availableBorrowsBase = GenericLogic.calculateAvailableBorrows(\\n      totalCollateralBase,\\n      totalDebtBase,\\n      ltv\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x87d386100fb287b49ef144b0ea2269d2842998b426ba5c018dce9f1bc09f1913\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/SupplyLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {ValidationLogic} from './ValidationLogic.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\n\\n/**\\n * @title SupplyLogic library\\n * @author Aave\\n * @notice Implements the base logic for supply/withdraw\\n */\\nlibrary SupplyLogic {\\n  using ReserveLogic for DataTypes.ReserveCache;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using GPv2SafeERC20 for IERC20;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  // See `IPool` for descriptions\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @notice Implements the supply feature. Through `supply()`, users supply assets to the Aave protocol.\\n   * @dev Emits the `Supply()` event.\\n   * @dev In the first supply action, `ReserveUsedAsCollateralEnabled()` is emitted, if the asset can be enabled as\\n   * collateral.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the supply function\\n   */\\n  function executeSupply(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteSupplyParams memory params\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    ValidationLogic.validateSupply(reserveCache, reserve, params.amount);\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, params.amount, 0);\\n\\n    IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, params.amount);\\n\\n    bool isFirstSupply = IAToken(reserveCache.aTokenAddress).mint(\\n      msg.sender,\\n      params.onBehalfOf,\\n      params.amount,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isFirstSupply) {\\n      if (\\n        ValidationLogic.validateAutomaticUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration,\\n          reserveCache.aTokenAddress\\n        )\\n      ) {\\n        userConfig.setUsingAsCollateral(reserve.id, true);\\n        emit ReserveUsedAsCollateralEnabled(params.asset, params.onBehalfOf);\\n      }\\n    }\\n\\n    emit Supply(params.asset, msg.sender, params.onBehalfOf, params.amount, params.referralCode);\\n  }\\n\\n  /**\\n   * @notice Implements the withdraw feature. Through `withdraw()`, users redeem their aTokens for the underlying asset\\n   * previously supplied in the Aave protocol.\\n   * @dev Emits the `Withdraw()` event.\\n   * @dev If the user withdraws everything, `ReserveUsedAsCollateralDisabled()` is emitted.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The user configuration mapping that tracks the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the withdraw function\\n   * @return The actual amount withdrawn\\n   */\\n  function executeWithdraw(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ExecuteWithdrawParams memory params\\n  ) external returns (uint256) {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    reserve.updateState(reserveCache);\\n\\n    uint256 userBalance = IAToken(reserveCache.aTokenAddress).scaledBalanceOf(msg.sender).rayMul(\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    uint256 amountToWithdraw = params.amount;\\n\\n    if (params.amount == type(uint256).max) {\\n      amountToWithdraw = userBalance;\\n    }\\n\\n    ValidationLogic.validateWithdraw(reserveCache, amountToWithdraw, userBalance);\\n\\n    reserve.updateInterestRates(reserveCache, params.asset, 0, amountToWithdraw);\\n\\n    bool isCollateral = userConfig.isUsingAsCollateral(reserve.id);\\n\\n    if (isCollateral && amountToWithdraw == userBalance) {\\n      userConfig.setUsingAsCollateral(reserve.id, false);\\n      emit ReserveUsedAsCollateralDisabled(params.asset, msg.sender);\\n    }\\n\\n    IAToken(reserveCache.aTokenAddress).burn(\\n      msg.sender,\\n      params.to,\\n      amountToWithdraw,\\n      reserveCache.nextLiquidityIndex\\n    );\\n\\n    if (isCollateral && userConfig.isBorrowingAny()) {\\n      ValidationLogic.validateHFAndLtv(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        params.asset,\\n        msg.sender,\\n        params.reservesCount,\\n        params.oracle,\\n        params.userEModeCategory\\n      );\\n    }\\n\\n    emit Withdraw(params.asset, msg.sender, params.to, amountToWithdraw);\\n\\n    return amountToWithdraw;\\n  }\\n\\n  /**\\n   * @notice Validates a transfer of aTokens. The sender is subjected to health factor validation to avoid\\n   * collateralization constraints violation.\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled()` event for the `to` account, if the asset is being activated as\\n   * collateral.\\n   * @dev In case the `from` user transfers everything, `ReserveUsedAsCollateralDisabled()` is emitted for `from`.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param usersConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param params The additional parameters needed to execute the finalizeTransfer function\\n   */\\n  function executeFinalizeTransfer(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    mapping(address => DataTypes.UserConfigurationMap) storage usersConfig,\\n    DataTypes.FinalizeTransferParams memory params\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[params.asset];\\n\\n    ValidationLogic.validateTransfer(reserve);\\n\\n    uint256 reserveId = reserve.id;\\n\\n    if (params.from != params.to && params.amount != 0) {\\n      DataTypes.UserConfigurationMap storage fromConfig = usersConfig[params.from];\\n\\n      if (fromConfig.isUsingAsCollateral(reserveId)) {\\n        if (fromConfig.isBorrowingAny()) {\\n          ValidationLogic.validateHFAndLtv(\\n            reservesData,\\n            reservesList,\\n            eModeCategories,\\n            usersConfig[params.from],\\n            params.asset,\\n            params.from,\\n            params.reservesCount,\\n            params.oracle,\\n            params.fromEModeCategory\\n          );\\n        }\\n        if (params.balanceFromBefore == params.amount) {\\n          fromConfig.setUsingAsCollateral(reserveId, false);\\n          emit ReserveUsedAsCollateralDisabled(params.asset, params.from);\\n        }\\n      }\\n\\n      if (params.balanceToBefore == 0) {\\n        DataTypes.UserConfigurationMap storage toConfig = usersConfig[params.to];\\n        if (\\n          ValidationLogic.validateAutomaticUseAsCollateral(\\n            reservesData,\\n            reservesList,\\n            toConfig,\\n            reserve.configuration,\\n            reserve.aTokenAddress\\n          )\\n        ) {\\n          toConfig.setUsingAsCollateral(reserveId, true);\\n          emit ReserveUsedAsCollateralEnabled(params.asset, params.to);\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes the 'set as collateral' feature. A user can choose to activate or deactivate an asset as\\n   * collateral at any point in time. Deactivating an asset as collateral is subjected to the usual health factor\\n   * checks to ensure collateralization.\\n   * @dev Emits the `ReserveUsedAsCollateralEnabled()` event if the asset can be activated as collateral.\\n   * @dev In case the asset is being deactivated as collateral, `ReserveUsedAsCollateralDisabled()` is emitted.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The users configuration mapping that track the supplied/borrowed assets\\n   * @param asset The address of the asset being configured as collateral\\n   * @param useAsCollateral True if the user wants to set the asset as collateral, false otherwise\\n   * @param reservesCount The number of initialized reserves\\n   * @param priceOracle The address of the price oracle\\n   * @param userEModeCategory The eMode category chosen by the user\\n   */\\n  function executeUseReserveAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    address asset,\\n    bool useAsCollateral,\\n    uint256 reservesCount,\\n    address priceOracle,\\n    uint8 userEModeCategory\\n  ) external {\\n    DataTypes.ReserveData storage reserve = reservesData[asset];\\n    DataTypes.ReserveCache memory reserveCache = reserve.cache();\\n\\n    uint256 userBalance = IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender);\\n\\n    ValidationLogic.validateSetUseReserveAsCollateral(reserveCache, userBalance);\\n\\n    if (useAsCollateral == userConfig.isUsingAsCollateral(reserve.id)) return;\\n\\n    if (useAsCollateral) {\\n      require(\\n        ValidationLogic.validateUseAsCollateral(\\n          reservesData,\\n          reservesList,\\n          userConfig,\\n          reserveCache.reserveConfiguration\\n        ),\\n        Errors.USER_IN_ISOLATION_MODE_OR_LTV_ZERO\\n      );\\n\\n      userConfig.setUsingAsCollateral(reserve.id, true);\\n      emit ReserveUsedAsCollateralEnabled(asset, msg.sender);\\n    } else {\\n      userConfig.setUsingAsCollateral(reserve.id, false);\\n      ValidationLogic.validateHFAndLtv(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        userConfig,\\n        asset,\\n        msg.sender,\\n        reservesCount,\\n        priceOracle,\\n        userEModeCategory\\n      );\\n\\n      emit ReserveUsedAsCollateralDisabled(asset, msg.sender);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xff4b3ad4e13b9b7df4158d33ee6b63370e4137be02e043827c4244432cf38588\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ValidationLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from '../../../dependencies/openzeppelin/contracts/Address.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol';\\nimport {IAToken} from '../../../interfaces/IAToken.sol';\\nimport {IPriceOracleSentinel} from '../../../interfaces/IPriceOracleSentinel.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IAccessControl} from '../../../dependencies/openzeppelin/contracts/IAccessControl.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../configuration/UserConfiguration.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveLogic} from './ReserveLogic.sol';\\nimport {GenericLogic} from './GenericLogic.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IncentivizedERC20} from '../../tokenization/base/IncentivizedERC20.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements functions to validate the different actions of the protocol\\n */\\nlibrary ValidationLogic {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using Address for address;\\n\\n  // Factor to apply to \\\"only-variable-debt\\\" liquidity rate to get threshold for rebalancing, expressed in bps\\n  // A value of 0.9e4 results in 90%\\n  uint256 public constant REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD = 0.9e4;\\n\\n  // Minimum health factor allowed under any circumstance\\n  // A value of 0.95e18 results in 0.95\\n  uint256 public constant MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 0.95e18;\\n\\n  /**\\n   * @dev Minimum health factor to consider a user position healthy\\n   * A value of 1e18 results in 1\\n   */\\n  uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;\\n\\n  /**\\n   * @dev Role identifier for the role allowed to supply isolated reserves as collateral\\n   */\\n  bytes32 public constant ISOLATED_COLLATERAL_SUPPLIER_ROLE =\\n    keccak256('ISOLATED_COLLATERAL_SUPPLIER');\\n\\n  /**\\n   * @notice Validates a supply action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be supplied\\n   */\\n  function validateSupply(\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.ReserveData storage reserve,\\n    uint256 amount\\n  ) internal view {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n\\n    (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap();\\n    require(\\n      supplyCap == 0 ||\\n        ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() +\\n          uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <=\\n        supplyCap * (10 ** reserveCache.reserveConfiguration.getDecimals()),\\n      Errors.SUPPLY_CAP_EXCEEDED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a withdraw action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amount The amount to be withdrawn\\n   * @param userBalance The balance of the user\\n   */\\n  function validateWithdraw(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amount,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(amount != 0, Errors.INVALID_AMOUNT);\\n    require(amount <= userBalance, Errors.NOT_ENOUGH_AVAILABLE_USER_BALANCE);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  struct ValidateBorrowLocalVars {\\n    uint256 currentLtv;\\n    uint256 collateralNeededInBaseCurrency;\\n    uint256 userCollateralInBaseCurrency;\\n    uint256 userDebtInBaseCurrency;\\n    uint256 availableLiquidity;\\n    uint256 healthFactor;\\n    uint256 totalDebt;\\n    uint256 totalSupplyVariableDebt;\\n    uint256 reserveDecimals;\\n    uint256 borrowCap;\\n    uint256 amountInBaseCurrency;\\n    uint256 assetUnit;\\n    address eModePriceSource;\\n    address siloedBorrowingAddress;\\n    bool isActive;\\n    bool isFrozen;\\n    bool isPaused;\\n    bool borrowingEnabled;\\n    bool stableRateBorrowingEnabled;\\n    bool siloedBorrowingEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates a borrow action.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param params Additional params needed for the validation\\n   */\\n  function validateBorrow(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.ValidateBorrowParams memory params\\n  ) internal view {\\n    require(params.amount != 0, Errors.INVALID_AMOUNT);\\n\\n    ValidateBorrowLocalVars memory vars;\\n\\n    (\\n      vars.isActive,\\n      vars.isFrozen,\\n      vars.borrowingEnabled,\\n      vars.stableRateBorrowingEnabled,\\n      vars.isPaused\\n    ) = params.reserveCache.reserveConfiguration.getFlags();\\n\\n    require(vars.isActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.isPaused, Errors.RESERVE_PAUSED);\\n    require(!vars.isFrozen, Errors.RESERVE_FROZEN);\\n    require(vars.borrowingEnabled, Errors.BORROWING_NOT_ENABLED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isBorrowAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    //validate interest rate mode\\n    require(\\n      params.interestRateMode == DataTypes.InterestRateMode.VARIABLE ||\\n        params.interestRateMode == DataTypes.InterestRateMode.STABLE,\\n      Errors.INVALID_INTEREST_RATE_MODE_SELECTED\\n    );\\n\\n    vars.reserveDecimals = params.reserveCache.reserveConfiguration.getDecimals();\\n    vars.borrowCap = params.reserveCache.reserveConfiguration.getBorrowCap();\\n    unchecked {\\n      vars.assetUnit = 10 ** vars.reserveDecimals;\\n    }\\n\\n    if (vars.borrowCap != 0) {\\n      vars.totalSupplyVariableDebt = params.reserveCache.currScaledVariableDebt.rayMul(\\n        params.reserveCache.nextVariableBorrowIndex\\n      );\\n\\n      vars.totalDebt =\\n        params.reserveCache.currTotalStableDebt +\\n        vars.totalSupplyVariableDebt +\\n        params.amount;\\n\\n      unchecked {\\n        require(vars.totalDebt <= vars.borrowCap * vars.assetUnit, Errors.BORROW_CAP_EXCEEDED);\\n      }\\n    }\\n\\n    if (params.isolationModeActive) {\\n      // check that the asset being borrowed is borrowable in isolation mode AND\\n      // the total exposure is no bigger than the collateral debt ceiling\\n      require(\\n        params.reserveCache.reserveConfiguration.getBorrowableInIsolation(),\\n        Errors.ASSET_NOT_BORROWABLE_IN_ISOLATION\\n      );\\n\\n      require(\\n        reservesData[params.isolationModeCollateralAddress].isolationModeTotalDebt +\\n          (params.amount /\\n            10 ** (vars.reserveDecimals - ReserveConfiguration.DEBT_CEILING_DECIMALS))\\n            .toUint128() <=\\n          params.isolationModeDebtCeiling,\\n        Errors.DEBT_CEILING_EXCEEDED\\n      );\\n    }\\n\\n    if (params.userEModeCategory != 0) {\\n      require(\\n        params.reserveCache.reserveConfiguration.getEModeCategory() == params.userEModeCategory,\\n        Errors.INCONSISTENT_EMODE_CATEGORY\\n      );\\n      vars.eModePriceSource = eModeCategories[params.userEModeCategory].priceSource;\\n    }\\n\\n    (\\n      vars.userCollateralInBaseCurrency,\\n      vars.userDebtInBaseCurrency,\\n      vars.currentLtv,\\n      ,\\n      vars.healthFactor,\\n\\n    ) = GenericLogic.calculateUserAccountData(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      DataTypes.CalculateUserAccountDataParams({\\n        userConfig: params.userConfig,\\n        reservesCount: params.reservesCount,\\n        user: params.userAddress,\\n        oracle: params.oracle,\\n        userEModeCategory: params.userEModeCategory\\n      })\\n    );\\n\\n    require(vars.userCollateralInBaseCurrency != 0, Errors.COLLATERAL_BALANCE_IS_ZERO);\\n    require(vars.currentLtv != 0, Errors.LTV_VALIDATION_FAILED);\\n\\n    require(\\n      vars.healthFactor > HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    vars.amountInBaseCurrency =\\n      IPriceOracleGetter(params.oracle).getAssetPrice(\\n        vars.eModePriceSource != address(0) ? vars.eModePriceSource : params.asset\\n      ) *\\n      params.amount;\\n    unchecked {\\n      vars.amountInBaseCurrency /= vars.assetUnit;\\n    }\\n\\n    //add the current already borrowed amount to the amount requested to calculate the total collateral needed.\\n    vars.collateralNeededInBaseCurrency = (vars.userDebtInBaseCurrency + vars.amountInBaseCurrency)\\n      .percentDiv(vars.currentLtv); //LTV is calculated in percentage\\n\\n    require(\\n      vars.collateralNeededInBaseCurrency <= vars.userCollateralInBaseCurrency,\\n      Errors.COLLATERAL_CANNOT_COVER_NEW_BORROW\\n    );\\n\\n    /**\\n     * Following conditions need to be met if the user is borrowing at a stable rate:\\n     * 1. Reserve must be enabled for stable rate borrowing\\n     * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency\\n     *    they are borrowing, to prevent abuses.\\n     * 3. Users will be able to borrow only a portion of the total available liquidity\\n     */\\n\\n    if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) {\\n      //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve\\n\\n      require(vars.stableRateBorrowingEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !params.userConfig.isUsingAsCollateral(reservesData[params.asset].id) ||\\n          params.reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          params.amount > IERC20(params.reserveCache.aTokenAddress).balanceOf(params.userAddress),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n\\n      vars.availableLiquidity = IERC20(params.asset).balanceOf(params.reserveCache.aTokenAddress);\\n\\n      //calculate the max available loan size in stable rate mode as a percentage of the\\n      //available liquidity\\n      uint256 maxLoanSizeStable = vars.availableLiquidity.percentMul(params.maxStableLoanPercent);\\n\\n      require(params.amount <= maxLoanSizeStable, Errors.AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE);\\n    }\\n\\n    if (params.userConfig.isBorrowingAny()) {\\n      (vars.siloedBorrowingEnabled, vars.siloedBorrowingAddress) = params\\n        .userConfig\\n        .getSiloedBorrowingState(reservesData, reservesList);\\n\\n      if (vars.siloedBorrowingEnabled) {\\n        require(vars.siloedBorrowingAddress == params.asset, Errors.SILOED_BORROWING_VIOLATION);\\n      } else {\\n        require(\\n          !params.reserveCache.reserveConfiguration.getSiloedBorrowing(),\\n          Errors.SILOED_BORROWING_VIOLATION\\n        );\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a repay action.\\n   * @param reserveCache The cached data of the reserve\\n   * @param amountSent The amount sent for the repayment. Can be an actual value or uint(-1)\\n   * @param interestRateMode The interest rate mode of the debt being repaid\\n   * @param onBehalfOf The address of the user msg.sender is repaying for\\n   * @param stableDebt The borrow balance of the user\\n   * @param variableDebt The borrow balance of the user\\n   */\\n  function validateRepay(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 amountSent,\\n    DataTypes.InterestRateMode interestRateMode,\\n    address onBehalfOf,\\n    uint256 stableDebt,\\n    uint256 variableDebt\\n  ) internal view {\\n    require(amountSent != 0, Errors.INVALID_AMOUNT);\\n    require(\\n      amountSent != type(uint256).max || msg.sender == onBehalfOf,\\n      Errors.NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF\\n    );\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) ||\\n        (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE),\\n      Errors.NO_DEBT_OF_SELECTED_TYPE\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a swap of borrow rate mode.\\n   * @param reserve The reserve state on which the user is swapping the rate\\n   * @param reserveCache The cached data of the reserve\\n   * @param userConfig The user reserves configuration\\n   * @param stableDebt The stable debt of the user\\n   * @param variableDebt The variable debt of the user\\n   * @param currentRateMode The rate mode of the debt being swapped\\n   */\\n  function validateSwapRateMode(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    uint256 stableDebt,\\n    uint256 variableDebt,\\n    DataTypes.InterestRateMode currentRateMode\\n  ) internal view {\\n    (bool isActive, bool isFrozen, , bool stableRateEnabled, bool isPaused) = reserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n    require(!isFrozen, Errors.RESERVE_FROZEN);\\n\\n    if (currentRateMode == DataTypes.InterestRateMode.STABLE) {\\n      require(stableDebt != 0, Errors.NO_OUTSTANDING_STABLE_DEBT);\\n    } else if (currentRateMode == DataTypes.InterestRateMode.VARIABLE) {\\n      require(variableDebt != 0, Errors.NO_OUTSTANDING_VARIABLE_DEBT);\\n      /**\\n       * user wants to swap to stable, before swapping we need to ensure that\\n       * 1. stable borrow rate is enabled on the reserve\\n       * 2. user is not trying to abuse the reserve by supplying\\n       * more collateral than he is borrowing, artificially lowering\\n       * the interest rate, borrowing at variable, and switching to stable\\n       */\\n      require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED);\\n\\n      require(\\n        !userConfig.isUsingAsCollateral(reserve.id) ||\\n          reserveCache.reserveConfiguration.getLtv() == 0 ||\\n          stableDebt + variableDebt > IERC20(reserveCache.aTokenAddress).balanceOf(msg.sender),\\n        Errors.COLLATERAL_SAME_AS_BORROWING_CURRENCY\\n      );\\n    } else {\\n      revert(Errors.INVALID_INTEREST_RATE_MODE_SELECTED);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a stable borrow rate rebalance action.\\n   * @dev Rebalancing is accepted when depositors are earning <= 90% of their earnings in pure supply/demand market (variable rate only)\\n   * For this to be the case, there has to be quite large stable debt with an interest rate below the current variable rate.\\n   * @param reserve The reserve state on which the user is getting rebalanced\\n   * @param reserveCache The cached state of the reserve\\n   * @param reserveAddress The address of the reserve\\n   */\\n  function validateRebalanceStableBorrowRate(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress\\n  ) internal view {\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n\\n    uint256 totalDebt = IERC20(reserveCache.stableDebtTokenAddress).totalSupply() +\\n      IERC20(reserveCache.variableDebtTokenAddress).totalSupply();\\n\\n    (uint256 liquidityRateVariableDebtOnly, , ) = IReserveInterestRateStrategy(\\n      reserve.interestRateStrategyAddress\\n    ).calculateInterestRates(\\n        DataTypes.CalculateInterestRatesParams({\\n          unbacked: reserve.unbacked,\\n          liquidityAdded: 0,\\n          liquidityTaken: 0,\\n          totalStableDebt: 0,\\n          totalVariableDebt: totalDebt,\\n          averageStableBorrowRate: 0,\\n          reserveFactor: reserveCache.reserveFactor,\\n          reserve: reserveAddress,\\n          aToken: reserveCache.aTokenAddress\\n        })\\n      );\\n\\n    require(\\n      reserveCache.currLiquidityRate <=\\n        liquidityRateVariableDebtOnly.percentMul(REBALANCE_UP_LIQUIDITY_RATE_THRESHOLD),\\n      Errors.INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting an asset as collateral.\\n   * @param reserveCache The cached data of the reserve\\n   * @param userBalance The balance of the user\\n   */\\n  function validateSetUseReserveAsCollateral(\\n    DataTypes.ReserveCache memory reserveCache,\\n    uint256 userBalance\\n  ) internal pure {\\n    require(userBalance != 0, Errors.UNDERLYING_BALANCE_ZERO);\\n\\n    (bool isActive, , , , bool isPaused) = reserveCache.reserveConfiguration.getFlags();\\n    require(isActive, Errors.RESERVE_INACTIVE);\\n    require(!isPaused, Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reservesData The state of all the reserves\\n   * @param assets The assets being flash-borrowed\\n   * @param amounts The amounts for each asset being borrowed\\n   */\\n  function validateFlashloan(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    address[] memory assets,\\n    uint256[] memory amounts\\n  ) internal view {\\n    require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      validateFlashloanSimple(reservesData[assets[i]]);\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates a flashloan action.\\n   * @param reserve The state of the reserve\\n   */\\n  function validateFlashloanSimple(DataTypes.ReserveData storage reserve) internal view {\\n    DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration;\\n    require(!configuration.getPaused(), Errors.RESERVE_PAUSED);\\n    require(configuration.getActive(), Errors.RESERVE_INACTIVE);\\n    require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED);\\n  }\\n\\n  struct ValidateLiquidationCallLocalVars {\\n    bool collateralReserveActive;\\n    bool collateralReservePaused;\\n    bool principalReserveActive;\\n    bool principalReservePaused;\\n    bool isCollateralEnabled;\\n  }\\n\\n  /**\\n   * @notice Validates the liquidation action.\\n   * @param userConfig The user configuration mapping\\n   * @param collateralReserve The reserve data of the collateral\\n   * @param params Additional parameters needed for the validation\\n   */\\n  function validateLiquidationCall(\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveData storage collateralReserve,\\n    DataTypes.ValidateLiquidationCallParams memory params\\n  ) internal view {\\n    ValidateLiquidationCallLocalVars memory vars;\\n\\n    (vars.collateralReserveActive, , , , vars.collateralReservePaused) = collateralReserve\\n      .configuration\\n      .getFlags();\\n\\n    (vars.principalReserveActive, , , , vars.principalReservePaused) = params\\n      .debtReserveCache\\n      .reserveConfiguration\\n      .getFlags();\\n\\n    require(vars.collateralReserveActive && vars.principalReserveActive, Errors.RESERVE_INACTIVE);\\n    require(!vars.collateralReservePaused && !vars.principalReservePaused, Errors.RESERVE_PAUSED);\\n\\n    require(\\n      params.priceOracleSentinel == address(0) ||\\n        params.healthFactor < MINIMUM_HEALTH_FACTOR_LIQUIDATION_THRESHOLD ||\\n        IPriceOracleSentinel(params.priceOracleSentinel).isLiquidationAllowed(),\\n      Errors.PRICE_ORACLE_SENTINEL_CHECK_FAILED\\n    );\\n\\n    require(\\n      params.healthFactor < HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_NOT_BELOW_THRESHOLD\\n    );\\n\\n    vars.isCollateralEnabled =\\n      collateralReserve.configuration.getLiquidationThreshold() != 0 &&\\n      userConfig.isUsingAsCollateral(collateralReserve.id);\\n\\n    //if collateral isn't enabled as collateral by user, it cannot be liquidated\\n    require(vars.isCollateralEnabled, Errors.COLLATERAL_CANNOT_BE_LIQUIDATED);\\n    require(params.totalDebt != 0, Errors.SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param user The user to validate health factor of\\n   * @param userEModeCategory The users active efficiency mode category\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   */\\n  function validateHealthFactor(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address user,\\n    uint8 userEModeCategory,\\n    uint256 reservesCount,\\n    address oracle\\n  ) internal view returns (uint256, bool) {\\n    (, , , , uint256 healthFactor, bool hasZeroLtvCollateral) = GenericLogic\\n      .calculateUserAccountData(\\n        reservesData,\\n        reservesList,\\n        eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: userConfig,\\n          reservesCount: reservesCount,\\n          user: user,\\n          oracle: oracle,\\n          userEModeCategory: userEModeCategory\\n        })\\n      );\\n\\n    require(\\n      healthFactor >= HEALTH_FACTOR_LIQUIDATION_THRESHOLD,\\n      Errors.HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD\\n    );\\n\\n    return (healthFactor, hasZeroLtvCollateral);\\n  }\\n\\n  /**\\n   * @notice Validates the health factor of a user and the ltv of the asset being withdrawn.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories The configuration of all the efficiency mode categories\\n   * @param userConfig The state of the user for the specific reserve\\n   * @param asset The asset for which the ltv will be validated\\n   * @param from The user from which the aTokens are being transferred\\n   * @param reservesCount The number of available reserves\\n   * @param oracle The price oracle\\n   * @param userEModeCategory The users active efficiency mode category\\n   */\\n  function validateHFAndLtv(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    address asset,\\n    address from,\\n    uint256 reservesCount,\\n    address oracle,\\n    uint8 userEModeCategory\\n  ) internal view {\\n    DataTypes.ReserveData memory reserve = reservesData[asset];\\n\\n    (, bool hasZeroLtvCollateral) = validateHealthFactor(\\n      reservesData,\\n      reservesList,\\n      eModeCategories,\\n      userConfig,\\n      from,\\n      userEModeCategory,\\n      reservesCount,\\n      oracle\\n    );\\n\\n    require(\\n      !hasZeroLtvCollateral || reserve.configuration.getLtv() == 0,\\n      Errors.LTV_VALIDATION_FAILED\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates a transfer action.\\n   * @param reserve The reserve object\\n   */\\n  function validateTransfer(DataTypes.ReserveData storage reserve) internal view {\\n    require(!reserve.configuration.getPaused(), Errors.RESERVE_PAUSED);\\n  }\\n\\n  /**\\n   * @notice Validates a drop reserve action.\\n   * @param reservesList The addresses of all the active reserves\\n   * @param reserve The reserve object\\n   * @param asset The address of the reserve's underlying asset\\n   */\\n  function validateDropReserve(\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.ReserveData storage reserve,\\n    address asset\\n  ) internal view {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(reserve.id != 0 || reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    require(IERC20(reserve.stableDebtTokenAddress).totalSupply() == 0, Errors.STABLE_DEBT_NOT_ZERO);\\n    require(\\n      IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0,\\n      Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO\\n    );\\n    require(\\n      IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0,\\n      Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO\\n    );\\n  }\\n\\n  /**\\n   * @notice Validates the action of setting efficiency mode.\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param eModeCategories a mapping storing configurations for all efficiency mode categories\\n   * @param userConfig the user configuration\\n   * @param reservesCount The total number of valid reserves\\n   * @param categoryId The id of the category\\n   */\\n  function validateSetUserEMode(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    mapping(uint8 => DataTypes.EModeCategory) storage eModeCategories,\\n    DataTypes.UserConfigurationMap memory userConfig,\\n    uint256 reservesCount,\\n    uint8 categoryId\\n  ) internal view {\\n    // category is invalid if the liq threshold is not set\\n    require(\\n      categoryId == 0 || eModeCategories[categoryId].liquidationThreshold != 0,\\n      Errors.INCONSISTENT_EMODE_CATEGORY\\n    );\\n\\n    // eMode can always be enabled if the user hasn't supplied anything\\n    if (userConfig.isEmpty()) {\\n      return;\\n    }\\n\\n    // if user is trying to set another category than default we require that\\n    // either the user is not borrowing, or it's borrowing assets of categoryId\\n    if (categoryId != 0) {\\n      unchecked {\\n        for (uint256 i = 0; i < reservesCount; i++) {\\n          if (userConfig.isBorrowing(i)) {\\n            DataTypes.ReserveConfigurationMap memory configuration = reservesData[reservesList[i]]\\n              .configuration;\\n            require(\\n              configuration.getEModeCategory() == categoryId,\\n              Errors.INCONSISTENT_EMODE_CATEGORY\\n            );\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Validates the action of activating the asset as collateral.\\n   * @dev Only possible if the asset has non-zero LTV and the user is not in isolation mode\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getLtv() == 0) {\\n      return false;\\n    }\\n    if (!userConfig.isUsingAsCollateralAny()) {\\n      return true;\\n    }\\n    (bool isolationModeActive, , ) = userConfig.getIsolationModeState(reservesData, reservesList);\\n\\n    return (!isolationModeActive && reserveConfig.getDebtCeiling() == 0);\\n  }\\n\\n  /**\\n   * @notice Validates if an asset should be automatically activated as collateral in the following actions: supply,\\n   * transfer, mint unbacked, and liquidate\\n   * @dev This is used to ensure that isolated assets are not enabled as collateral automatically\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @param userConfig the user configuration\\n   * @param reserveConfig The reserve configuration\\n   * @return True if the asset can be activated as collateral, false otherwise\\n   */\\n  function validateAutomaticUseAsCollateral(\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList,\\n    DataTypes.UserConfigurationMap storage userConfig,\\n    DataTypes.ReserveConfigurationMap memory reserveConfig,\\n    address aTokenAddress\\n  ) internal view returns (bool) {\\n    if (reserveConfig.getDebtCeiling() != 0) {\\n      // ensures only the ISOLATED_COLLATERAL_SUPPLIER_ROLE can enable collateral as side-effect of an action\\n      IPoolAddressesProvider addressesProvider = IncentivizedERC20(aTokenAddress)\\n        .POOL()\\n        .ADDRESSES_PROVIDER();\\n      if (\\n        !IAccessControl(addressesProvider.getACLManager()).hasRole(\\n          ISOLATED_COLLATERAL_SUPPLIER_ROLE,\\n          msg.sender\\n        )\\n      ) return false;\\n    }\\n    return validateUseAsCollateral(reservesData, reservesList, userConfig, reserveConfig);\\n  }\\n}\\n\",\"keccak256\":\"0x673716456f256404938f32b4afd8ba2dfc8d048806ae9d08be0d5849b9ecc0ca\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/pool/Pool.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\\nimport {PoolLogic} from '../libraries/logic/PoolLogic.sol';\\nimport {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';\\nimport {EModeLogic} from '../libraries/logic/EModeLogic.sol';\\nimport {SupplyLogic} from '../libraries/logic/SupplyLogic.sol';\\nimport {FlashLoanLogic} from '../libraries/logic/FlashLoanLogic.sol';\\nimport {BorrowLogic} from '../libraries/logic/BorrowLogic.sol';\\nimport {LiquidationLogic} from '../libraries/logic/LiquidationLogic.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\nimport {BridgeLogic} from '../libraries/logic/BridgeLogic.sol';\\nimport {IERC20WithPermit} from '../../interfaces/IERC20WithPermit.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../interfaces/IACLManager.sol';\\nimport {PoolStorage} from './PoolStorage.sol';\\n\\n/**\\n * @title Pool contract\\n * @author Aave\\n * @notice Main point of interaction with an Aave protocol's market\\n * - Users can:\\n *   # Supply\\n *   # Withdraw\\n *   # Borrow\\n *   # Repay\\n *   # Swap their loans between variable and stable rate\\n *   # Enable/disable their supplied assets as collateral rebalance stable rate borrow positions\\n *   # Liquidate positions\\n *   # Execute Flash Loans\\n * @dev To be covered by a proxy contract, owned by the PoolAddressesProvider of the specific market\\n * @dev All admin functions are callable by the PoolConfigurator contract defined also in the\\n *   PoolAddressesProvider\\n */\\ncontract Pool is VersionedInitializable, PoolStorage, IPool {\\n  using ReserveLogic for DataTypes.ReserveData;\\n\\n  uint256 public constant POOL_REVISION = 0x1;\\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\\n\\n  /**\\n   * @dev Only pool configurator can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolConfigurator() {\\n    _onlyPoolConfigurator();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    _onlyPoolAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only bridge can call functions marked by this modifier.\\n   */\\n  modifier onlyBridge() {\\n    _onlyBridge();\\n    _;\\n  }\\n\\n  function _onlyPoolConfigurator() internal view virtual {\\n    require(\\n      ADDRESSES_PROVIDER.getPoolConfigurator() == msg.sender,\\n      Errors.CALLER_NOT_POOL_CONFIGURATOR\\n    );\\n  }\\n\\n  function _onlyPoolAdmin() internal view virtual {\\n    require(\\n      IACLManager(ADDRESSES_PROVIDER.getACLManager()).isPoolAdmin(msg.sender),\\n      Errors.CALLER_NOT_POOL_ADMIN\\n    );\\n  }\\n\\n  function _onlyBridge() internal view virtual {\\n    require(\\n      IACLManager(ADDRESSES_PROVIDER.getACLManager()).isBridge(msg.sender),\\n      Errors.CALLER_NOT_BRIDGE\\n    );\\n  }\\n\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return POOL_REVISION;\\n  }\\n\\n  /**\\n   * @dev Constructor.\\n   * @param provider The address of the PoolAddressesProvider contract\\n   */\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n  }\\n\\n  /**\\n   * @notice Initializes the Pool.\\n   * @dev Function is invoked by the proxy contract when the Pool contract is added to the\\n   * PoolAddressesProvider of the market.\\n   * @dev Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations\\n   * @param provider The address of the PoolAddressesProvider\\n   */\\n  function initialize(IPoolAddressesProvider provider) external virtual initializer {\\n    require(provider == ADDRESSES_PROVIDER, Errors.INVALID_ADDRESSES_PROVIDER);\\n    _maxStableRateBorrowSizePercent = 0.25e4;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external virtual override onlyBridge {\\n    BridgeLogic.executeMintUnbacked(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      asset,\\n      amount,\\n      onBehalfOf,\\n      referralCode\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function backUnbacked(\\n    address asset,\\n    uint256 amount,\\n    uint256 fee\\n  ) external virtual override onlyBridge returns (uint256) {\\n    return\\n      BridgeLogic.executeBackUnbacked(_reserves[asset], asset, amount, fee, _bridgeProtocolFee);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function supply(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) public virtual override {\\n    SupplyLogic.executeSupply(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteSupplyParams({\\n        asset: asset,\\n        amount: amount,\\n        onBehalfOf: onBehalfOf,\\n        referralCode: referralCode\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) public virtual override {\\n    IERC20WithPermit(asset).permit(\\n      msg.sender,\\n      address(this),\\n      amount,\\n      deadline,\\n      permitV,\\n      permitR,\\n      permitS\\n    );\\n    SupplyLogic.executeSupply(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteSupplyParams({\\n        asset: asset,\\n        amount: amount,\\n        onBehalfOf: onBehalfOf,\\n        referralCode: referralCode\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function withdraw(\\n    address asset,\\n    uint256 amount,\\n    address to\\n  ) public virtual override returns (uint256) {\\n    return\\n      SupplyLogic.executeWithdraw(\\n        _reserves,\\n        _reservesList,\\n        _eModeCategories,\\n        _usersConfig[msg.sender],\\n        DataTypes.ExecuteWithdrawParams({\\n          asset: asset,\\n          amount: amount,\\n          to: to,\\n          reservesCount: _reservesCount,\\n          oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n          userEModeCategory: _usersEModeCategory[msg.sender]\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) public virtual override {\\n    BorrowLogic.executeBorrow(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteBorrowParams({\\n        asset: asset,\\n        user: msg.sender,\\n        onBehalfOf: onBehalfOf,\\n        amount: amount,\\n        interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n        referralCode: referralCode,\\n        releaseUnderlying: true,\\n        maxStableRateBorrowSizePercent: _maxStableRateBorrowSizePercent,\\n        reservesCount: _reservesCount,\\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        userEModeCategory: _usersEModeCategory[onBehalfOf],\\n        priceOracleSentinel: ADDRESSES_PROVIDER.getPriceOracleSentinel()\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) public virtual override returns (uint256) {\\n    return\\n      BorrowLogic.executeRepay(\\n        _reserves,\\n        _reservesList,\\n        _usersConfig[onBehalfOf],\\n        DataTypes.ExecuteRepayParams({\\n          asset: asset,\\n          amount: amount,\\n          interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n          onBehalfOf: onBehalfOf,\\n          useATokens: false\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) public virtual override returns (uint256) {\\n    {\\n      IERC20WithPermit(asset).permit(\\n        msg.sender,\\n        address(this),\\n        amount,\\n        deadline,\\n        permitV,\\n        permitR,\\n        permitS\\n      );\\n    }\\n    {\\n      DataTypes.ExecuteRepayParams memory params = DataTypes.ExecuteRepayParams({\\n        asset: asset,\\n        amount: amount,\\n        interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n        onBehalfOf: onBehalfOf,\\n        useATokens: false\\n      });\\n      return BorrowLogic.executeRepay(_reserves, _reservesList, _usersConfig[onBehalfOf], params);\\n    }\\n  }\\n\\n  /// @inheritdoc IPool\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) public virtual override returns (uint256) {\\n    return\\n      BorrowLogic.executeRepay(\\n        _reserves,\\n        _reservesList,\\n        _usersConfig[msg.sender],\\n        DataTypes.ExecuteRepayParams({\\n          asset: asset,\\n          amount: amount,\\n          interestRateMode: DataTypes.InterestRateMode(interestRateMode),\\n          onBehalfOf: msg.sender,\\n          useATokens: true\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) public virtual override {\\n    BorrowLogic.executeSwapBorrowRateMode(\\n      _reserves[asset],\\n      _usersConfig[msg.sender],\\n      asset,\\n      DataTypes.InterestRateMode(interestRateMode)\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function rebalanceStableBorrowRate(address asset, address user) public virtual override {\\n    BorrowLogic.executeRebalanceStableBorrowRate(_reserves[asset], asset, user);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setUserUseReserveAsCollateral(\\n    address asset,\\n    bool useAsCollateral\\n  ) public virtual override {\\n    SupplyLogic.executeUseReserveAsCollateral(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig[msg.sender],\\n      asset,\\n      useAsCollateral,\\n      _reservesCount,\\n      ADDRESSES_PROVIDER.getPriceOracle(),\\n      _usersEModeCategory[msg.sender]\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) public virtual override {\\n    LiquidationLogic.executeLiquidationCall(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig,\\n      _eModeCategories,\\n      DataTypes.ExecuteLiquidationCallParams({\\n        reservesCount: _reservesCount,\\n        debtToCover: debtToCover,\\n        collateralAsset: collateralAsset,\\n        debtAsset: debtAsset,\\n        user: user,\\n        receiveAToken: receiveAToken,\\n        priceOracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        userEModeCategory: _usersEModeCategory[user],\\n        priceOracleSentinel: ADDRESSES_PROVIDER.getPriceOracleSentinel()\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) public virtual override {\\n    DataTypes.FlashloanParams memory flashParams = DataTypes.FlashloanParams({\\n      receiverAddress: receiverAddress,\\n      assets: assets,\\n      amounts: amounts,\\n      interestRateModes: interestRateModes,\\n      onBehalfOf: onBehalfOf,\\n      params: params,\\n      referralCode: referralCode,\\n      flashLoanPremiumToProtocol: _flashLoanPremiumToProtocol,\\n      flashLoanPremiumTotal: _flashLoanPremiumTotal,\\n      maxStableRateBorrowSizePercent: _maxStableRateBorrowSizePercent,\\n      reservesCount: _reservesCount,\\n      addressesProvider: address(ADDRESSES_PROVIDER),\\n      userEModeCategory: _usersEModeCategory[onBehalfOf],\\n      isAuthorizedFlashBorrower: IACLManager(ADDRESSES_PROVIDER.getACLManager()).isFlashBorrower(\\n        msg.sender\\n      )\\n    });\\n\\n    FlashLoanLogic.executeFlashLoan(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig[onBehalfOf],\\n      flashParams\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) public virtual override {\\n    DataTypes.FlashloanSimpleParams memory flashParams = DataTypes.FlashloanSimpleParams({\\n      receiverAddress: receiverAddress,\\n      asset: asset,\\n      amount: amount,\\n      params: params,\\n      referralCode: referralCode,\\n      flashLoanPremiumToProtocol: _flashLoanPremiumToProtocol,\\n      flashLoanPremiumTotal: _flashLoanPremiumTotal\\n    });\\n    FlashLoanLogic.executeFlashLoanSimple(_reserves[asset], flashParams);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function mintToTreasury(address[] calldata assets) external virtual override {\\n    PoolLogic.executeMintToTreasury(_reserves, assets);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveData(\\n    address asset\\n  ) external view virtual override returns (DataTypes.ReserveData memory) {\\n    return _reserves[asset];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    virtual\\n    override\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    )\\n  {\\n    return\\n      PoolLogic.executeGetUserAccountData(\\n        _reserves,\\n        _reservesList,\\n        _eModeCategories,\\n        DataTypes.CalculateUserAccountDataParams({\\n          userConfig: _usersConfig[user],\\n          reservesCount: _reservesCount,\\n          user: user,\\n          oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n          userEModeCategory: _usersEModeCategory[user]\\n        })\\n      );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getConfiguration(\\n    address asset\\n  ) external view virtual override returns (DataTypes.ReserveConfigurationMap memory) {\\n    return _reserves[asset].configuration;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getUserConfiguration(\\n    address user\\n  ) external view virtual override returns (DataTypes.UserConfigurationMap memory) {\\n    return _usersConfig[user];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveNormalizedIncome(\\n    address asset\\n  ) external view virtual override returns (uint256) {\\n    return _reserves[asset].getNormalizedIncome();\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveNormalizedVariableDebt(\\n    address asset\\n  ) external view virtual override returns (uint256) {\\n    return _reserves[asset].getNormalizedDebt();\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReservesList() external view virtual override returns (address[] memory) {\\n    uint256 reservesListCount = _reservesCount;\\n    uint256 droppedReservesCount = 0;\\n    address[] memory reservesList = new address[](reservesListCount);\\n\\n    for (uint256 i = 0; i < reservesListCount; i++) {\\n      if (_reservesList[i] != address(0)) {\\n        reservesList[i - droppedReservesCount] = _reservesList[i];\\n      } else {\\n        droppedReservesCount++;\\n      }\\n    }\\n\\n    // Reduces the length of the reserves array by `droppedReservesCount`\\n    assembly {\\n      mstore(reservesList, sub(reservesListCount, droppedReservesCount))\\n    }\\n    return reservesList;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getReserveAddressById(uint16 id) external view returns (address) {\\n    return _reservesList[id];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() public view virtual override returns (uint256) {\\n    return _maxStableRateBorrowSizePercent;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function BRIDGE_PROTOCOL_FEE() public view virtual override returns (uint256) {\\n    return _bridgeProtocolFee;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function FLASHLOAN_PREMIUM_TOTAL() public view virtual override returns (uint128) {\\n    return _flashLoanPremiumTotal;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() public view virtual override returns (uint128) {\\n    return _flashLoanPremiumToProtocol;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function MAX_NUMBER_RESERVES() public view virtual override returns (uint16) {\\n    return ReserveConfiguration.MAX_RESERVES_COUNT;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external virtual override {\\n    require(msg.sender == _reserves[asset].aTokenAddress, Errors.CALLER_NOT_ATOKEN);\\n    SupplyLogic.executeFinalizeTransfer(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersConfig,\\n      DataTypes.FinalizeTransferParams({\\n        asset: asset,\\n        from: from,\\n        to: to,\\n        amount: amount,\\n        balanceFromBefore: balanceFromBefore,\\n        balanceToBefore: balanceToBefore,\\n        reservesCount: _reservesCount,\\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        fromEModeCategory: _usersEModeCategory[from]\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external virtual override onlyPoolConfigurator {\\n    if (\\n      PoolLogic.executeInitReserve(\\n        _reserves,\\n        _reservesList,\\n        DataTypes.InitReserveParams({\\n          asset: asset,\\n          aTokenAddress: aTokenAddress,\\n          stableDebtAddress: stableDebtAddress,\\n          variableDebtAddress: variableDebtAddress,\\n          interestRateStrategyAddress: interestRateStrategyAddress,\\n          reservesCount: _reservesCount,\\n          maxNumberReserves: MAX_NUMBER_RESERVES()\\n        })\\n      )\\n    ) {\\n      _reservesCount++;\\n    }\\n  }\\n\\n  /// @inheritdoc IPool\\n  function dropReserve(address asset) external virtual override onlyPoolConfigurator {\\n    PoolLogic.executeDropReserve(_reserves, _reservesList, asset);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external virtual override onlyPoolConfigurator {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(_reserves[asset].id != 0 || _reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    _reserves[asset].interestRateStrategyAddress = rateStrategyAddress;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external virtual override onlyPoolConfigurator {\\n    require(asset != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    require(_reserves[asset].id != 0 || _reservesList[0] == asset, Errors.ASSET_NOT_LISTED);\\n    _reserves[asset].configuration = configuration;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function updateBridgeProtocolFee(\\n    uint256 protocolFee\\n  ) external virtual override onlyPoolConfigurator {\\n    _bridgeProtocolFee = protocolFee;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external virtual override onlyPoolConfigurator {\\n    _flashLoanPremiumTotal = flashLoanPremiumTotal;\\n    _flashLoanPremiumToProtocol = flashLoanPremiumToProtocol;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function configureEModeCategory(\\n    uint8 id,\\n    DataTypes.EModeCategory memory category\\n  ) external virtual override onlyPoolConfigurator {\\n    // category 0 is reserved for volatile heterogeneous assets and it's always disabled\\n    require(id != 0, Errors.EMODE_CATEGORY_RESERVED);\\n    _eModeCategories[id] = category;\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getEModeCategoryData(\\n    uint8 id\\n  ) external view virtual override returns (DataTypes.EModeCategory memory) {\\n    return _eModeCategories[id];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function setUserEMode(uint8 categoryId) external virtual override {\\n    EModeLogic.executeSetUserEMode(\\n      _reserves,\\n      _reservesList,\\n      _eModeCategories,\\n      _usersEModeCategory,\\n      _usersConfig[msg.sender],\\n      DataTypes.ExecuteSetUserEModeParams({\\n        reservesCount: _reservesCount,\\n        oracle: ADDRESSES_PROVIDER.getPriceOracle(),\\n        categoryId: categoryId\\n      })\\n    );\\n  }\\n\\n  /// @inheritdoc IPool\\n  function getUserEMode(address user) external view virtual override returns (uint256) {\\n    return _usersEModeCategory[user];\\n  }\\n\\n  /// @inheritdoc IPool\\n  function resetIsolationModeTotalDebt(\\n    address asset\\n  ) external virtual override onlyPoolConfigurator {\\n    PoolLogic.executeResetIsolationModeTotalDebt(_reserves, asset);\\n  }\\n\\n  /// @inheritdoc IPool\\n  function rescueTokens(\\n    address token,\\n    address to,\\n    uint256 amount\\n  ) external virtual override onlyPoolAdmin {\\n    PoolLogic.executeRescueTokens(token, to, amount);\\n  }\\n\\n  /// @inheritdoc IPool\\n  /// @dev Deprecated: maintained for compatibility purposes\\n  function deposit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external virtual override {\\n    SupplyLogic.executeSupply(\\n      _reserves,\\n      _reservesList,\\n      _usersConfig[onBehalfOf],\\n      DataTypes.ExecuteSupplyParams({\\n        asset: asset,\\n        amount: amount,\\n        onBehalfOf: onBehalfOf,\\n        referralCode: referralCode\\n      })\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x3eeaa96fc9df64e0f7e85e48849549957d528ed005ebce43de9c277d662b1d37\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\\nimport {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\n\\n/**\\n * @title PoolStorage\\n * @author Aave\\n * @notice Contract used as storage of the Pool contract.\\n * @dev It defines the storage layout of the Pool contract.\\n */\\ncontract PoolStorage {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  // Map of reserves and their data (underlyingAssetOfReserve => reserveData)\\n  mapping(address => DataTypes.ReserveData) internal _reserves;\\n\\n  // Map of users address and their configuration data (userAddress => userConfiguration)\\n  mapping(address => DataTypes.UserConfigurationMap) internal _usersConfig;\\n\\n  // List of reserves as a map (reserveId => reserve).\\n  // It is structured as a mapping for gas savings reasons, using the reserve id as index\\n  mapping(uint256 => address) internal _reservesList;\\n\\n  // List of eMode categories as a map (eModeCategoryId => eModeCategory).\\n  // It is structured as a mapping for gas savings reasons, using the eModeCategoryId as index\\n  mapping(uint8 => DataTypes.EModeCategory) internal _eModeCategories;\\n\\n  // Map of users address and their eMode category (userAddress => eModeCategoryId)\\n  mapping(address => uint8) internal _usersEModeCategory;\\n\\n  // Fee of the protocol bridge, expressed in bps\\n  uint256 internal _bridgeProtocolFee;\\n\\n  // Total FlashLoan Premium, expressed in bps\\n  uint128 internal _flashLoanPremiumTotal;\\n\\n  // FlashLoan premium paid to protocol treasury, expressed in bps\\n  uint128 internal _flashLoanPremiumToProtocol;\\n\\n  // Available liquidity that can be borrowed at once at stable rate, expressed in bps\\n  uint64 internal _maxStableRateBorrowSizePercent;\\n\\n  // Maximum number of active reserves there have been in the protocol. It is the upper bound of the reserves list\\n  uint16 internal _reservesCount;\\n}\\n\",\"keccak256\":\"0xb67317c6e6e5a5c776d404b5675555b8e2141187dcacca63d15eb77ba50e8d03\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":10499,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":10502,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":10572,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":25306,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"_reserves","offset":0,"slot":"52","type":"t_mapping(t_address,t_struct(ReserveData)21315_storage)"},{"astId":25311,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"_usersConfig","offset":0,"slot":"53","type":"t_mapping(t_address,t_struct(UserConfigurationMap)21322_storage)"},{"astId":25315,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"_reservesList","offset":0,"slot":"54","type":"t_mapping(t_uint256,t_address)"},{"astId":25320,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"_eModeCategories","offset":0,"slot":"55","type":"t_mapping(t_uint8,t_struct(EModeCategory)21333_storage)"},{"astId":25324,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"_usersEModeCategory","offset":0,"slot":"56","type":"t_mapping(t_address,t_uint8)"},{"astId":25326,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"_bridgeProtocolFee","offset":0,"slot":"57","type":"t_uint256"},{"astId":25328,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"_flashLoanPremiumTotal","offset":0,"slot":"58","type":"t_uint128"},{"astId":25330,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"_flashLoanPremiumToProtocol","offset":16,"slot":"58","type":"t_uint128"},{"astId":25332,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"_maxStableRateBorrowSizePercent","offset":0,"slot":"59","type":"t_uint64"},{"astId":25334,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"_reservesCount","offset":8,"slot":"59","type":"t_uint16"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_mapping(t_address,t_struct(ReserveData)21315_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct DataTypes.ReserveData)","numberOfBytes":"32","value":"t_struct(ReserveData)21315_storage"},"t_mapping(t_address,t_struct(UserConfigurationMap)21322_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct DataTypes.UserConfigurationMap)","numberOfBytes":"32","value":"t_struct(UserConfigurationMap)21322_storage"},"t_mapping(t_address,t_uint8)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint8)","numberOfBytes":"32","value":"t_uint8"},"t_mapping(t_uint256,t_address)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_uint8,t_struct(EModeCategory)21333_storage)":{"encoding":"mapping","key":"t_uint8","label":"mapping(uint8 => struct DataTypes.EModeCategory)","numberOfBytes":"32","value":"t_struct(EModeCategory)21333_storage"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(EModeCategory)21333_storage":{"encoding":"inplace","label":"struct DataTypes.EModeCategory","members":[{"astId":21324,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"ltv","offset":0,"slot":"0","type":"t_uint16"},{"astId":21326,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"liquidationThreshold","offset":2,"slot":"0","type":"t_uint16"},{"astId":21328,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"liquidationBonus","offset":4,"slot":"0","type":"t_uint16"},{"astId":21330,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"priceSource","offset":6,"slot":"0","type":"t_address"},{"astId":21332,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"label","offset":0,"slot":"1","type":"t_string_storage"}],"numberOfBytes":"64"},"t_struct(ReserveConfigurationMap)21318_storage":{"encoding":"inplace","label":"struct DataTypes.ReserveConfigurationMap","members":[{"astId":21317,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"data","offset":0,"slot":"0","type":"t_uint256"}],"numberOfBytes":"32"},"t_struct(ReserveData)21315_storage":{"encoding":"inplace","label":"struct DataTypes.ReserveData","members":[{"astId":21286,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"configuration","offset":0,"slot":"0","type":"t_struct(ReserveConfigurationMap)21318_storage"},{"astId":21288,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"liquidityIndex","offset":0,"slot":"1","type":"t_uint128"},{"astId":21290,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"currentLiquidityRate","offset":16,"slot":"1","type":"t_uint128"},{"astId":21292,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"variableBorrowIndex","offset":0,"slot":"2","type":"t_uint128"},{"astId":21294,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"currentVariableBorrowRate","offset":16,"slot":"2","type":"t_uint128"},{"astId":21296,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"currentStableBorrowRate","offset":0,"slot":"3","type":"t_uint128"},{"astId":21298,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"lastUpdateTimestamp","offset":16,"slot":"3","type":"t_uint40"},{"astId":21300,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"id","offset":21,"slot":"3","type":"t_uint16"},{"astId":21302,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"aTokenAddress","offset":0,"slot":"4","type":"t_address"},{"astId":21304,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"stableDebtTokenAddress","offset":0,"slot":"5","type":"t_address"},{"astId":21306,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"variableDebtTokenAddress","offset":0,"slot":"6","type":"t_address"},{"astId":21308,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"interestRateStrategyAddress","offset":0,"slot":"7","type":"t_address"},{"astId":21310,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"accruedToTreasury","offset":0,"slot":"8","type":"t_uint128"},{"astId":21312,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"unbacked","offset":16,"slot":"8","type":"t_uint128"},{"astId":21314,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"isolationModeTotalDebt","offset":0,"slot":"9","type":"t_uint128"}],"numberOfBytes":"320"},"t_struct(UserConfigurationMap)21322_storage":{"encoding":"inplace","label":"struct DataTypes.UserConfigurationMap","members":[{"astId":21321,"contract":"@aave/core-v3/contracts/protocol/pool/Pool.sol:Pool","label":"data","offset":0,"slot":"0","type":"t_uint256"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint16":{"encoding":"inplace","label":"uint16","numberOfBytes":"2"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint40":{"encoding":"inplace","label":"uint40","numberOfBytes":"5"},"t_uint64":{"encoding":"inplace","label":"uint64","numberOfBytes":"8"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"ADDRESSES_PROVIDER()":{"notice":"Returns the PoolAddressesProvider connected to this contract"},"BRIDGE_PROTOCOL_FEE()":{"notice":"Returns the part of the bridge fees sent to protocol"},"FLASHLOAN_PREMIUM_TOTAL()":{"notice":"Returns the total fee on flash loans"},"FLASHLOAN_PREMIUM_TO_PROTOCOL()":{"notice":"Returns the part of the flashloan fees sent to protocol"},"MAX_NUMBER_RESERVES()":{"notice":"Returns the maximum number of reserves supported to be listed in this Pool"},"MAX_STABLE_RATE_BORROW_SIZE_PERCENT()":{"notice":"Returns the percentage of available liquidity that can be borrowed at once at stable rate"},"backUnbacked(address,uint256,uint256)":{"notice":"Back the current unbacked underlying with `amount` and pay `fee`."},"borrow(address,uint256,uint256,uint16,address)":{"notice":"Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower already supplied enough collateral, or he was given enough allowance by a credit delegator on the corresponding debt token (StableDebtToken or VariableDebtToken) - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet   and 100 stable/variable debt tokens, depending on the `interestRateMode`"},"configureEModeCategory(uint8,(uint16,uint16,uint16,address,string))":{"notice":"Configures a new category for the eMode."},"deposit(address,uint256,address,uint16)":{"notice":"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC"},"dropReserve(address)":{"notice":"Drop a reserve"},"finalizeTransfer(address,address,address,uint256,uint256,uint256)":{"notice":"Validates and finalizes an aToken transfer"},"flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)":{"notice":"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned."},"flashLoanSimple(address,address,uint256,bytes,uint16)":{"notice":"Allows smartcontracts to access the liquidity of the pool within one transaction, as long as the amount taken plus a fee is returned."},"getConfiguration(address)":{"notice":"Returns the configuration of the reserve"},"getEModeCategoryData(uint8)":{"notice":"Returns the data of an eMode category"},"getReserveAddressById(uint16)":{"notice":"Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct"},"getReserveData(address)":{"notice":"Returns the state and configuration of the reserve"},"getReserveNormalizedIncome(address)":{"notice":"Returns the normalized income of the reserve"},"getReserveNormalizedVariableDebt(address)":{"notice":"Returns the normalized variable debt per unit of asset"},"getReservesList()":{"notice":"Returns the list of the underlying assets of all the initialized reserves"},"getUserAccountData(address)":{"notice":"Returns the user account data across all the reserves"},"getUserConfiguration(address)":{"notice":"Returns the configuration of the user across all the reserves"},"getUserEMode(address)":{"notice":"Returns the eMode the user is using"},"initReserve(address,address,address,address,address)":{"notice":"Initializes a reserve, activating it, assigning an aToken and debt tokens and an interest rate strategy"},"initialize(address)":{"notice":"Initializes the Pool."},"liquidationCall(address,address,address,uint256,bool)":{"notice":"Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1 - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk"},"mintToTreasury(address[])":{"notice":"Mints the assets accrued through the reserve factor to the treasury in the form of aTokens"},"mintUnbacked(address,uint256,address,uint16)":{"notice":"Mints an `amount` of aTokens to the `onBehalfOf`"},"rebalanceStableBorrowRate(address,address)":{"notice":"Rebalances the stable interest rate of a user to the current stable rate defined on the reserve. - Users can be rebalanced if the following conditions are satisfied:     1. Usage ratio is above 95%     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too        much has been borrowed at a stable rate and suppliers are not earning enough"},"repay(address,uint256,uint256,address)":{"notice":"Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address"},"repayWithATokens(address,uint256,uint256)":{"notice":"Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the equivalent debt tokens - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens"},"repayWithPermit(address,uint256,uint256,address,uint256,uint8,bytes32,bytes32)":{"notice":"Repay with transfer approval of asset to be repaid done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713"},"rescueTokens(address,address,uint256)":{"notice":"Rescue and transfer tokens locked in this contract"},"resetIsolationModeTotalDebt(address)":{"notice":"Resets the isolation mode total debt of the given asset to zero"},"setConfiguration(address,(uint256))":{"notice":"Sets the configuration bitmap of the reserve as a whole"},"setReserveInterestRateStrategyAddress(address,address)":{"notice":"Updates the address of the interest rate strategy contract"},"setUserEMode(uint8)":{"notice":"Allows a user to use the protocol in eMode"},"setUserUseReserveAsCollateral(address,bool)":{"notice":"Allows suppliers to enable/disable a specific supplied asset as collateral"},"supply(address,uint256,address,uint16)":{"notice":"Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. - E.g. User supplies 100 USDC and gets in return 100 aUSDC"},"supplyWithPermit(address,uint256,address,uint16,uint256,uint8,bytes32,bytes32)":{"notice":"Supply with transfer approval of asset to be supplied done via permit function see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713"},"swapBorrowRateMode(address,uint256)":{"notice":"Allows a borrower to swap his debt between stable and variable mode, or vice versa"},"updateBridgeProtocolFee(uint256)":{"notice":"Updates the protocol fee on the bridging"},"updateFlashloanPremiums(uint128,uint128)":{"notice":"Updates flash loan premiums. Flash loan premium consists of two parts: - A part is sent to aToken holders as extra, one time accumulated interest - A part is collected by the protocol treasury"},"withdraw(address,uint256,address)":{"notice":"Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC"}},"notice":"Main point of interaction with an Aave protocol's market - Users can:   # Supply   # Withdraw   # Borrow   # Repay   # Swap their loans between variable and stable rate   # Enable/disable their supplied assets as collateral rebalance stable rate borrow positions   # Liquidate positions   # Execute Flash Loans","version":1}}},"@aave/core-v3/contracts/protocol/pool/PoolConfigurator.sol":{"PoolConfigurator":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"ATokenUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldBorrowCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBorrowCap","type":"uint256"}],"name":"BorrowCapChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"borrowable","type":"bool"}],"name":"BorrowableInIsolationChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldBridgeProtocolFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBridgeProtocolFee","type":"uint256"}],"name":"BridgeProtocolFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"ltv","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidationThreshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidationBonus","type":"uint256"}],"name":"CollateralConfigurationChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldDebtCeiling","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDebtCeiling","type":"uint256"}],"name":"DebtCeilingChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint8","name":"oldCategoryId","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"newCategoryId","type":"uint8"}],"name":"EModeAssetCategoryChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"categoryId","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"ltv","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidationThreshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidationBonus","type":"uint256"},{"indexed":false,"internalType":"address","name":"oracle","type":"address"},{"indexed":false,"internalType":"string","name":"label","type":"string"}],"name":"EModeCategoryAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint128","name":"oldFlashloanPremiumToProtocol","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"newFlashloanPremiumToProtocol","type":"uint128"}],"name":"FlashloanPremiumToProtocolUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint128","name":"oldFlashloanPremiumTotal","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"newFlashloanPremiumTotal","type":"uint128"}],"name":"FlashloanPremiumTotalUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"LiquidationProtocolFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"active","type":"bool"}],"name":"ReserveActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ReserveBorrowing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"}],"name":"ReserveDropped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldReserveFactor","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newReserveFactor","type":"uint256"}],"name":"ReserveFactorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ReserveFlashLoaning","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"frozen","type":"bool"}],"name":"ReserveFrozen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"aToken","type":"address"},{"indexed":false,"internalType":"address","name":"stableDebtToken","type":"address"},{"indexed":false,"internalType":"address","name":"variableDebtToken","type":"address"},{"indexed":false,"internalType":"address","name":"interestRateStrategyAddress","type":"address"}],"name":"ReserveInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"address","name":"oldStrategy","type":"address"},{"indexed":false,"internalType":"address","name":"newStrategy","type":"address"}],"name":"ReserveInterestRateStrategyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"ReservePaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ReserveStableRateBorrowing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"bool","name":"oldState","type":"bool"},{"indexed":false,"internalType":"bool","name":"newState","type":"bool"}],"name":"SiloedBorrowingChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"StableDebtTokenUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldSupplyCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSupplyCap","type":"uint256"}],"name":"SupplyCapChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldUnbackedMintCap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newUnbackedMintCap","type":"uint256"}],"name":"UnbackedMintCapChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"VariableDebtTokenUpgraded","type":"event"},{"inputs":[],"name":"CONFIGURATOR_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"ltv","type":"uint256"},{"internalType":"uint256","name":"liquidationThreshold","type":"uint256"},{"internalType":"uint256","name":"liquidationBonus","type":"uint256"}],"name":"configureReserveAsCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"dropReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"aTokenImpl","type":"address"},{"internalType":"address","name":"stableDebtTokenImpl","type":"address"},{"internalType":"address","name":"variableDebtTokenImpl","type":"address"},{"internalType":"uint8","name":"underlyingAssetDecimals","type":"uint8"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"address","name":"treasury","type":"address"},{"internalType":"address","name":"incentivesController","type":"address"},{"internalType":"string","name":"aTokenName","type":"string"},{"internalType":"string","name":"aTokenSymbol","type":"string"},{"internalType":"string","name":"variableDebtTokenName","type":"string"},{"internalType":"string","name":"variableDebtTokenSymbol","type":"string"},{"internalType":"string","name":"stableDebtTokenName","type":"string"},{"internalType":"string","name":"stableDebtTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct ConfiguratorInputTypes.InitReserveInput[]","name":"input","type":"tuple[]"}],"name":"initReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint8","name":"newCategoryId","type":"uint8"}],"name":"setAssetEModeCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newBorrowCap","type":"uint256"}],"name":"setBorrowCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"borrowable","type":"bool"}],"name":"setBorrowableInIsolation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newDebtCeiling","type":"uint256"}],"name":"setDebtCeiling","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"categoryId","type":"uint8"},{"internalType":"uint16","name":"ltv","type":"uint16"},{"internalType":"uint16","name":"liquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"liquidationBonus","type":"uint16"},{"internalType":"address","name":"oracle","type":"address"},{"internalType":"string","name":"label","type":"string"}],"name":"setEModeCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"setLiquidationProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused","type":"bool"}],"name":"setPoolPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"active","type":"bool"}],"name":"setReserveActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setReserveBorrowing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newReserveFactor","type":"uint256"}],"name":"setReserveFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setReserveFlashLoaning","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"freeze","type":"bool"}],"name":"setReserveFreeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"newRateStrategyAddress","type":"address"}],"name":"setReserveInterestRateStrategyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"paused","type":"bool"}],"name":"setReservePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setReserveStableRateBorrowing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"newSiloed","type":"bool"}],"name":"setSiloedBorrowing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newSupplyCap","type":"uint256"}],"name":"setSupplyCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"newUnbackedMintCap","type":"uint256"}],"name":"setUnbackedMintCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"treasury","type":"address"},{"internalType":"address","name":"incentivesController","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct ConfiguratorInputTypes.UpdateATokenInput","name":"input","type":"tuple"}],"name":"updateAToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBridgeProtocolFee","type":"uint256"}],"name":"updateBridgeProtocolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newFlashloanPremiumToProtocol","type":"uint128"}],"name":"updateFlashloanPremiumToProtocol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newFlashloanPremiumTotal","type":"uint128"}],"name":"updateFlashloanPremiumTotal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"incentivesController","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct ConfiguratorInputTypes.UpdateDebtTokenInput","name":"input","type":"tuple"}],"name":"updateStableDebtToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"incentivesController","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"internalType":"struct ConfiguratorInputTypes.UpdateDebtTokenInput","name":"input","type":"tuple"}],"name":"updateVariableDebtToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","details":"Implements the configuration methods for the Aave protocol","kind":"dev","methods":{"configureReserveAsCollateral(address,uint256,uint256,uint256)":{"details":"All the values are expressed in bps. A value of 10000, results in 100.00%The `liquidationBonus` is always above 100%. A value of 105% means the liquidator will receive a 5% bonus","params":{"asset":"The address of the underlying asset of the reserve","liquidationBonus":"The bonus liquidators receive to liquidate this asset","liquidationThreshold":"The threshold at which loans using this asset as collateral will be considered undercollateralized","ltv":"The loan to value of the asset when used as collateral"}},"dropReserve(address)":{"params":{"asset":"The address of the reserve to drop"}},"initReserves((address,address,address,uint8,address,address,address,address,string,string,string,string,string,string,bytes)[])":{"params":{"input":"The array of initialization parameters"}},"setAssetEModeCategory(address,uint8)":{"params":{"asset":"The address of the underlying asset of the reserve","newCategoryId":"The new category id of the asset"}},"setBorrowCap(address,uint256)":{"params":{"asset":"The address of the underlying asset of the reserve","newBorrowCap":"The new borrow cap of the reserve"}},"setBorrowableInIsolation(address,bool)":{"details":"When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed amount will be accumulated in the isolated collateral's total debt exposureOnly assets of the same family (e.g. USD stablecoins) should be borrowable in isolation mode to keep consistency in the debt ceiling calculations","params":{"asset":"The address of the underlying asset of the reserve","borrowable":"True if the asset should be borrowable in isolation, false otherwise"}},"setDebtCeiling(address,uint256)":{"params":{"newDebtCeiling":"The new debt ceiling"}},"setEModeCategory(uint8,uint16,uint16,uint16,address,string)":{"details":"If zero is provided as oracle address, the default asset oracles will be used to compute the overall debt and overcollateralization of the users using this category.The new ltv and liquidation threshold must be greater than the base ltvs and liquidation thresholds of all assets within the eMode category","params":{"categoryId":"The id of the category to be configured","label":"A label identifying the category","liquidationBonus":"The liquidation bonus associated with the category","liquidationThreshold":"The liquidation threshold associated with the category","ltv":"The ltv associated with the category","oracle":"The oracle associated with the category"}},"setLiquidationProtocolFee(address,uint256)":{"params":{"asset":"The address of the underlying asset of the reserve","newFee":"The new liquidation protocol fee of the reserve, expressed in bps"}},"setPoolPause(bool)":{"params":{"paused":"True if protocol needs to be paused, false otherwise"}},"setReserveActive(address,bool)":{"params":{"active":"True if the reserve needs to be active, false otherwise","asset":"The address of the underlying asset of the reserve"}},"setReserveBorrowing(address,bool)":{"details":"Can only be disabled (set to false) if stable borrowing is disabled","params":{"asset":"The address of the underlying asset of the reserve","enabled":"True if borrowing needs to be enabled, false otherwise"}},"setReserveFactor(address,uint256)":{"params":{"asset":"The address of the underlying asset of the reserve","newReserveFactor":"The new reserve factor of the reserve"}},"setReserveFlashLoaning(address,bool)":{"params":{"asset":"The address of the underlying asset of the reserve","enabled":"True if flashloans need to be enabled, false otherwise"}},"setReserveFreeze(address,bool)":{"params":{"asset":"The address of the underlying asset of the reserve","freeze":"True if the reserve needs to be frozen, false otherwise"}},"setReserveInterestRateStrategyAddress(address,address)":{"params":{"asset":"The address of the underlying asset of the reserve","newRateStrategyAddress":"The address of the new interest strategy contract"}},"setReservePause(address,bool)":{"params":{"asset":"The address of the underlying asset of the reserve","paused":"True if pausing the reserve, false if unpausing"}},"setReserveStableRateBorrowing(address,bool)":{"details":"Can only be enabled (set to true) if borrowing is enabled","params":{"asset":"The address of the underlying asset of the reserve","enabled":"True if stable rate borrowing needs to be enabled, false otherwise"}},"setSiloedBorrowing(address,bool)":{"params":{"siloed":"The new siloed borrowing state"}},"setSupplyCap(address,uint256)":{"params":{"asset":"The address of the underlying asset of the reserve","newSupplyCap":"The new supply cap of the reserve"}},"setUnbackedMintCap(address,uint256)":{"params":{"asset":"The address of the underlying asset of the reserve","newUnbackedMintCap":"The new unbacked mint cap of the reserve"}},"updateAToken((address,address,address,string,string,address,bytes))":{"details":"Updates the aToken implementation for the reserve.","params":{"input":"The aToken update parameters"}},"updateBridgeProtocolFee(uint256)":{"params":{"newBridgeProtocolFee":"The part of the fee sent to the protocol treasury, expressed in bps"}},"updateFlashloanPremiumToProtocol(uint128)":{"details":"Expressed in bpsThe premium to protocol is calculated on the total flashloan premium","params":{"newFlashloanPremiumToProtocol":"The part of the flashloan premium sent to the protocol treasury"}},"updateFlashloanPremiumTotal(uint128)":{"details":"Expressed in bpsThe premium is calculated on the total amount borrowed","params":{"newFlashloanPremiumTotal":"The total flashloan premium"}},"updateStableDebtToken((address,address,string,string,address,bytes))":{"params":{"input":"The stableDebtToken update parameters"}},"updateVariableDebtToken((address,address,string,string,address,bytes))":{"params":{"input":"The variableDebtToken update parameters"}}},"title":"PoolConfigurator","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{"@aave/core-v3/contracts/protocol/libraries/logic/ConfiguratorLogic.sol":{"ConfiguratorLogic":[{"length":20,"start":1111},{"length":20,"start":6053},{"length":20,"start":9284},{"length":20,"start":10352}]}},"object":"60806040526000805534801561001457600080fd5b50615b0980620000256000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637af635a611610104578063aeb4fcc1116100a2578063c4d66de811610071578063c4d66de8146103b8578063d14a0983146103cb578063d4fe3f99146103de578063f213ef0e146103f157600080fd5b8063aeb4fcc11461036c578063b736aaeb1461037f578063bb01c37c14610392578063c19d61e4146103a557600080fd5b80638a751a60116100de5780638a751a601461032057806396e957c414610333578063a7fa83b714610346578063ad4e64321461035957600080fd5b80637af635a6146102e05780637c4e560b146102fa5780638a4936761461030d57600080fd5b806348d9fba91161017157806363c9b8601161014b57806363c9b86014610294578063682cf264146102a75780637626cde3146102ba5780637641f3d9146102cd57600080fd5b806348d9fba91461025b5780634b4e67531461026e578063571f03e51461028157600080fd5b80631df970bd116101ad5780631df970bd1461020f57806326d2cec2146102225780633036b4391461023557806338ae0cc31461024857600080fd5b806302fb45e6146101d4578063145f5892146101e95780631d2118f9146101fc575b600080fd5b6101e76101e2366004614a01565b610404565b005b6101e76101f7366004614aab565b6104d5565b6101e761020a366004614ad7565b61066f565b6101e761021d366004614b2e565b6107f4565b6101e7610230366004614aab565b610a76565b6101e7610243366004614b52565b610c5b565b6101e7610256366004614b79565b610e0b565b6101e7610269366004614b79565b610f96565b6101e761027c366004614aab565b611122565b6101e761028f366004614aab565b611307565b6101e76102a2366004614ba7565b611497565b6101e76102b5366004614b79565b611568565b6101e76102c8366004614bc4565b61174d565b6101e76102db366004614bff565b6117f2565b6102e8600181565b60405190815260200160405180910390f35b6101e7610308366004614c1c565b611944565b6101e761031b366004614b2e565b611c66565b6101e761032e366004614b79565b611ed7565b6101e7610341366004614b79565b6120c0565b6101e7610354366004614b79565b61223f565b6101e7610367366004614bc4565b6123ec565b6101e761037a366004614aab565b61245e565b6101e761038d366004614b79565b61268b565b6101e76103a0366004614c57565b612818565b6101e76103b3366004614cb3565b61288a565b6101e76103c6366004614ba7565b612e48565b6101e76103d9366004614aab565b613047565b6101e76103ec366004614d81565b6131d7565b6101e76103ff366004614b79565b61349c565b61040c61361b565b60355473ffffffffffffffffffffffffffffffffffffffff1660005b828110156104cf5773__$4d6b0a3647b069121a3bb78d2db920912c$__63df59b8b28386868581811061045d5761045d614db6565b905060200281019061046f9190614de5565b6040518363ffffffff1660e01b815260040161048c929190614ed7565b60006040518083038186803b1580156104a457600080fd5b505af41580156104b8573d6000803e3d6000fd5b5050505080806104c790615186565b915050610428565b50505050565b6104dd61382c565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa15801561054e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057291906152f3565b805190915060b01c640fffffffff1661058b8284613a39565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b1580156105ff57600080fd5b505af1158015610613573d6000803e3d6000fd5b5050604080518481526020810187905273ffffffffffffffffffffffffffffffffffffffff881693507f09808b1fc5abde94edf02fdde393bea0d2e4795999ba31695472848638b5c29f9250015b60405180910390a250505050565b61067761382c565b6035546040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260009216906335ea6a75906024016101e060405180830381865afa1580156106e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070d9190615345565b6101608101516035546040517f1d2118f900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152868116602483015293945091921690631d2118f990604401600060405180830381600087803b15801561078b57600080fd5b505af115801561079f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff85811682528781166020830152881693507fdb8dada53709ce4988154324196790c2e4a60c377e1256790946f83b87db3c33925001610661565b6107fc613ac3565b60408051808201909152600281527f313900000000000000000000000000000000000000000000000000000000000060208201526127106fffffffffffffffffffffffffffffffff8316111561086e5760405162461bcd60e51b815260040161086591906154de565b60405180910390fd5b50603554604080517f6a99c036000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691636a99c0369160048083019260209291908290030181865afa1580156108df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090391906154f1565b603554604080517f074b2e43000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff9091169163bcb6e52291839163074b2e43916004808201926020929091908290030181865afa15801561097e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a291906154f1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526fffffffffffffffffffffffffffffffff91821660048201529085166024820152604401600060405180830381600087803b158015610a0c57600080fd5b505af1158015610a20573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8086168252861660208201527fe7e0c75e1fc2d0bd83dc85d59f085b3e763107c392fb368e85572b292f1f557693500190505b60405180910390a15050565b610a7e61382c565b60408051808201909152600281527f37300000000000000000000000000000000000000000000000000000000000006020820152612710821115610ad55760405162461bcd60e51b815260040161086591906154de565b506035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015610b47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6b91906152f3565b805190915060981c61ffff16610b818284613c3c565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b158015610bf557600080fd5b505af1158015610c09573d6000803e3d6000fd5b5050604080518481526020810187905273ffffffffffffffffffffffffffffffffffffffff881693507fb5b0a963825337808b6e3154de8e98027595a5cad4219bb3a9bc55b192f4b391925001610661565b610c63613ac3565b60408051808201909152600281527f32320000000000000000000000000000000000000000000000000000000000006020820152612710821115610cba5760405162461bcd60e51b815260040161086591906154de565b50603554604080517f272d9072000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163272d90729160048083019260209291908290030181865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f919061550e565b6035546040517f3036b4390000000000000000000000000000000000000000000000000000000081526004810185905291925073ffffffffffffffffffffffffffffffffffffffff1690633036b43990602401600060405180830381600087803b158015610dbc57600080fd5b505af1158015610dd0573d6000803e3d6000fd5b505060408051848152602081018690527f30b17cb587a89089d003457c432f73e22aeee93de425e92224ba01080260ecd99350019050610a6a565b610e1361382c565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015610e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea891906152f3565b9050610eb48183613cc3565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b158015610f2857600080fd5b505af1158015610f3c573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8716815285151560208201527f74adf6aaf58c08bc4f993640385e136522375ea3d1589a10d02adbb906c67d1c935001905060405180910390a1505050565b610f9e613d08565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103391906152f3565b905061103f8183613f15565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b1580156110b357600080fd5b505af11580156110c7573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167fe188d542a5f11925d3a3af33703cdd30a43cb3e8066a3cf68b1b57f61a5a94b583604051611115911515815260200190565b60405180910390a2505050565b61112a61382c565b60408051808201909152600281527f363700000000000000000000000000000000000000000000000000000000000060208201526127108211156111815760405162461bcd60e51b815260040161086591906154de565b506035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa1580156111f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121791906152f3565b805190915060401c61ffff1661122d8284613f5a565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b1580156112a157600080fd5b505af11580156112b5573d6000803e3d6000fd5b5050604080518481526020810187905273ffffffffffffffffffffffffffffffffffffffff881693507fb46e2b82b0c2cf3d7d9dece53635e165c53e0eaa7a44f904d61a2b7174826aef925001610661565b61130f61382c565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a491906152f3565b805190915060741c640fffffffff166113bd8284613fe1565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b15801561143157600080fd5b505af1158015611445573d6000803e3d6000fd5b5050604080518481526020810187905273ffffffffffffffffffffffffffffffffffffffff881693507f0263602682188540a2d633561c0b4453b7d8566285e99f9f6018b8ef2facef49925001610661565b61149f613ac3565b6035546040517f63c9b86000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152909116906363c9b86090602401600060405180830381600087803b15801561150c57600080fd5b505af1158015611520573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507feeec4c06f7adad215cbdb4d2960896c83c26aedce02dde76d36fa28588d62da49150600090a250565b61157061382c565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa1580156115e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160591906152f3565b90508161166d57805160408051808201909152600281527f3838000000000000000000000000000000000000000000000000000000000000602082015290670800000000000000161561166b5760405162461bcd60e51b815260040161086591906154de565b505b611677818361406b565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b1580156116eb57600080fd5b505af11580156116ff573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f2443ba28e8d1d88d531a3d90b981816a4f3b3c7f1fd4085c6029e81d1b7a570d83604051611115911515815260200190565b611755613ac3565b6035546040517ff5b50e7000000000000000000000000000000000000000000000000000000000815273__$4d6b0a3647b069121a3bb78d2db920912c$__9163f5b50e70916117bf9173ffffffffffffffffffffffffffffffffffffffff16908590600401615527565b60006040518083038186803b1580156117d757600080fd5b505af41580156117eb573d6000803e3d6000fd5b5050505050565b6117fa6140b0565b603554604080517fd1946dbc000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163d1946dbc91600480830192869291908290030181865afa158015611869573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526118af919081019061562c565b905060005b815181101561193f57600073ffffffffffffffffffffffffffffffffffffffff168282815181106118e7576118e7614db6565b602002602001015173ffffffffffffffffffffffffffffffffffffffff161461192d5761192d82828151811061191f5761191f614db6565b602002602001015184610f96565b8061193781615186565b9150506118b4565b505050565b61194c61382c565b60408051808201909152600281527f32300000000000000000000000000000000000000000000000000000000000006020820152828411156119a15760405162461bcd60e51b815260040161086591906154de565b506035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600092169063c44b11f790602401602060405180830381865afa158015611a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3791906152f3565b90508215611aff5760408051808201909152600281527f323000000000000000000000000000000000000000000000000000000000000060208201526127108311611a955760405162461bcd60e51b815260040161086591906154de565b50612710611aa38484614229565b11156040518060400160405280600281526020017f323000000000000000000000000000000000000000000000000000000000000081525090611af95760405162461bcd60e51b815260040161086591906154de565b50611b5c565b60408051808201909152600281527f323000000000000000000000000000000000000000000000000000000000000060208201528215611b525760405162461bcd60e51b815260040161086591906154de565b50611b5c8561426c565b611b668185614403565b611b708184614484565b611b7a818361450b565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b158015611bee57600080fd5b505af1158015611c02573d6000803e3d6000fd5b5050604080518781526020810187905290810185905273ffffffffffffffffffffffffffffffffffffffff881692507f637febbda9275aea2e85c0ff690444c8d87eb2e8339bbede9715abcc89cb0995915060600160405180910390a25050505050565b611c6e613ac3565b60408051808201909152600281527f313900000000000000000000000000000000000000000000000000000000000060208201526127106fffffffffffffffffffffffffffffffff83161115611cd75760405162461bcd60e51b815260040161086591906154de565b50603554604080517f074b2e43000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163074b2e439160048083019260209291908290030181865afa158015611d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6c91906154f1565b603554604080517f6a99c036000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff9091169163bcb6e5229185918491636a99c0369160048083019260209291908290030181865afa158015611de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0c91906154f1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526fffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015611e7557600080fd5b505af1158015611e89573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8086168252861660208201527f71aba182c9d0529b516de7a78bed74d49c207ef7e152f52f7ea5d8730138f6439350019050610a6a565b611edf61382c565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015611f50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7491906152f3565b90508115611fe05780516704000000000000001615156040518060400160405280600281526020017f333000000000000000000000000000000000000000000000000000000000000081525090611fde5760405162461bcd60e51b815260040161086591906154de565b505b611fea8183614592565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b15801561205e57600080fd5b505af1158015612072573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f0b64d0941719acd363f1a6be3d8525d8ec9d71738f7445aabcd88d7939b472e783604051611115911515815260200190565b6120c861382c565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015612139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215d91906152f3565b905061216981836145d7565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b1580156121dd57600080fd5b505af11580156121f1573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f0c4443d258a350d27dc50c378b2ebf165e6469725f786d21b30cab16823f558783604051611115911515815260200190565b61224761382c565b8015612256576122568261461c565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa1580156122c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122eb91906152f3565b90506000612303825167400000000000000016151590565b905061230f8284614798565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b15801561238357600080fd5b505af1158015612397573d6000803e3d6000fd5b5050604080518415158152861515602082015273ffffffffffffffffffffffffffffffffffffffff881693507f842a280b07e8e502a9101f32a3b768ebaba3655556dd674f0831900861fc674b925001610661565b6123f4613ac3565b6035546040517fb0f0935500000000000000000000000000000000000000000000000000000000815273__$4d6b0a3647b069121a3bb78d2db920912c$__9163b0f09355916117bf9173ffffffffffffffffffffffffffffffffffffffff16908590600401615527565b61246661382c565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa1580156124d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124fb91906152f3565b805190915060d41c64ffffffffff1680612518576125188461426c565b61252282846147dd565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b15801561259657600080fd5b505af11580156125aa573d6000803e3d6000fd5b50505050826000141561263d576035546040517fe43e88a100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529091169063e43e88a190602401600060405180830381600087803b15801561262457600080fd5b505af1158015612638573d6000803e3d6000fd5b505050505b604080518281526020810185905273ffffffffffffffffffffffffffffffffffffffff8616917f6824a6c7fbc10d2979b1f1ccf2dd4ed0436541679a661dedb5c10bd4be8306829101610661565b612693613ac3565b806126a1576126a18261426c565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015612712573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273691906152f3565b90506127428183614867565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b1580156127b657600080fd5b505af11580156127ca573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167fc36c7d11ba01a5869d52aa4a3781939dab851cbc9ee6e7fdcedc7d58898a3f1e83604051611115911515815260200190565b612820613ac3565b6035546040517fb13c96a800000000000000000000000000000000000000000000000000000000815273__$4d6b0a3647b069121a3bb78d2db920912c$__9163b13c96a8916117bf9173ffffffffffffffffffffffffffffffffffffffff169085906004016156de565b61289261382c565b60408051808201909152600281527f3231000000000000000000000000000000000000000000000000000000000000602082015261ffff87166128e85760405162461bcd60e51b815260040161086591906154de565b5060408051808201909152600281527f3231000000000000000000000000000000000000000000000000000000000000602082015261ffff861661293f5760405162461bcd60e51b815260040161086591906154de565b508461ffff168661ffff1611156040518060400160405280600281526020017f3231000000000000000000000000000000000000000000000000000000000000815250906129a05760405162461bcd60e51b815260040161086591906154de565b5060408051808201909152600281527f3231000000000000000000000000000000000000000000000000000000000000602082015261271061ffff8616116129fb5760405162461bcd60e51b815260040161086591906154de565b50612710612a1061ffff878116908716614229565b11156040518060400160405280600281526020017f323100000000000000000000000000000000000000000000000000000000000081525090612a665760405162461bcd60e51b815260040161086591906154de565b50603554604080517fd1946dbc000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163d1946dbc91600480830192869291908290030181865afa158015612ad6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612b1c919081019061562c565b905060005b8151811015612cd057603554825160009173ffffffffffffffffffffffffffffffffffffffff169063c44b11f790859085908110612b6157612b61614db6565b60200260200101516040518263ffffffff1660e01b8152600401612ba1919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015612bbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be291906152f3565b805190915060a81c60ff168a60ff161415612cbd57805161ffff168961ffff16116040518060400160405280600281526020017f323100000000000000000000000000000000000000000000000000000000000081525090612c575760405162461bcd60e51b815260040161086591906154de565b50805160101c61ffff168861ffff16116040518060400160405280600281526020017f323100000000000000000000000000000000000000000000000000000000000081525090612cbb5760405162461bcd60e51b815260040161086591906154de565b505b5080612cc881615186565b915050612b21565b50603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d579ea7d896040518060a001604052808b61ffff1681526020018a61ffff1681526020018961ffff1681526020018873ffffffffffffffffffffffffffffffffffffffff16815260200187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152506040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152612dc792919060040161581d565b600060405180830381600087803b158015612de157600080fd5b505af1158015612df5573d6000803e3d6000fd5b505050508760ff167f0acf8b4a3cace10779798a89a206a0ae73a71b63acdd3be2801d39c2ef7ab3cb888888888888604051612e3696959493929190615893565b60405180910390a25050505050505050565b6001805460ff1680612e595750303b155b80612e65575060005481115b612ed75760405162461bcd60e51b815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610865565b60015460ff16158015612f1457600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b603480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8516908117909155604080517f026b1d5f000000000000000000000000000000000000000000000000000000008152905163026b1d5f916004808201926020929091908290030181865afa158015612fab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fcf91906158df565b603580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055801561193f57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055505050565b61304f61382c565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa1580156130c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e491906152f3565b805190915060501c640fffffffff166130fd82846148ac565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b15801561317157600080fd5b505af1158015613185573d6000803e3d6000fd5b5050604080518481526020810187905273ffffffffffffffffffffffffffffffffffffffff881693507fc51aca575985d521c5072ad11549bad77013bb786d57f30f94b40ed8f8dc9bc4925001610661565b6131df61382c565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015613250573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327491906152f3565b905060ff8216156133a4576035546040517f6c6f6ae100000000000000000000000000000000000000000000000000000000815260ff8416600482015260009173ffffffffffffffffffffffffffffffffffffffff1690636c6f6ae190602401600060405180830381865afa1580156132f1573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261333791908101906158fc565b825190915060101c61ffff16816020015161ffff16116040518060400160405280600281526020017f3137000000000000000000000000000000000000000000000000000000000000815250906133a15760405162461bcd60e51b815260040161086591906154de565b50505b805160009060a81c60ff1690506133be8260ff8516614936565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b15801561343257600080fd5b505af1158015613446573d6000803e3d6000fd5b50506040805160ff80861682528716602082015273ffffffffffffffffffffffffffffffffffffffff881693507f5bb69795b6a2ea222d73a5f8939c23471a1f85a99c7ca43c207f1b71f10c6264925001610661565b6134a461382c565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015613515573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353991906152f3565b905061354581836149bc565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b1580156135b957600080fd5b505af11580156135cd573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167fc8ff3cc5b0fddaa3e6ebbbd7438f43393e4ea30e88b80ad016c1bc094655034d83604051611115911515815260200190565b603454604080517f707cd716000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163707cd7169160048083019260209291908290030181865afa15801561368b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136af91906158df565b6040517f13ee32e000000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff8216906313ee32e090602401602060405180830381865afa15801561371c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137409190615a27565b806137d457506040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156137b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137d49190615a27565b6040518060400160405280600181526020017f3500000000000000000000000000000000000000000000000000000000000000815250906138285760405162461bcd60e51b815260040161086591906154de565b5050565b603454604080517f707cd716000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163707cd7169160048083019260209291908290030181865afa15801561389c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c091906158df565b6040517f674b5e4d00000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff82169063674b5e4d90602401602060405180830381865afa15801561392d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139519190615a27565b806139e557506040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156139c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139e59190615a27565b6040518060400160405280600181526020017f3400000000000000000000000000000000000000000000000000000000000000815250906138285760405162461bcd60e51b815260040161086591906154de565b60408051808201909152600281527f37320000000000000000000000000000000000000000000000000000000000006020820152640fffffffff821115613a935760405162461bcd60e51b815260040161086591906154de565b5081517ffffffffffff000000000ffffffffffffffffffffffffffffffffffffffffffff1660b09190911b179052565b603454604080517f707cd716000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163707cd7169160048083019260209291908290030181865afa158015613b33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b5791906158df565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015613bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613be89190615a27565b6040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250906138285760405162461bcd60e51b815260040161086591906154de565b60408051808201909152600281527f3730000000000000000000000000000000000000000000000000000000000000602082015261ffff821115613c935760405162461bcd60e51b815260040161086591906154de565b5081517fffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff1660989190911b179052565b603d81613cd1576000613cd4565b60015b83517fffffffffffffffffffffffffffffffffffffffffffffffffdfffffffffffffff1660ff9190911690911b1790915250565b603454604080517f707cd716000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163707cd7169160048083019260209291908290030181865afa158015613d78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d9c91906158df565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015613e09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e2d9190615a27565b80613ec157506040517f2500f2b600000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff821690632500f2b690602401602060405180830381865afa158015613e9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec19190615a27565b6040518060400160405280600181526020017f3300000000000000000000000000000000000000000000000000000000000000815250906138285760405162461bcd60e51b815260040161086591906154de565b603c81613f23576000613f26565b60015b83517fffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffff1660ff9190911690911b1790915250565b60408051808201909152600281527f3637000000000000000000000000000000000000000000000000000000000000602082015261ffff821115613fb15760405162461bcd60e51b815260040161086591906154de565b5081517fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff1660409190911b179052565b60408051808201909152600281527f36390000000000000000000000000000000000000000000000000000000000006020820152640fffffffff82111561403b5760405162461bcd60e51b815260040161086591906154de565b5081517fffffffffffffffffffffffffff000000000fffffffffffffffffffffffffffff1660749190911b179052565b603a8161407957600061407c565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffffffff1660ff9190911690911b1790915250565b603454604080517f707cd716000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163707cd7169160048083019260209291908290030181865afa158015614120573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061414491906158df565b6040517f2500f2b600000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690632500f2b690602401602060405180830381865afa1580156141b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141d59190615a27565b6040518060400160405280600181526020017f3200000000000000000000000000000000000000000000000000000000000000815250906138285760405162461bcd60e51b815260040161086591906154de565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec778390048411151761425e57600080fd5b506127109102611388010490565b600080603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e860accb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061430091906158df565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291909116906335ea6a759060240161018060405180830381865afa15801561436f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143939190615a44565b50505050505050505092509250508060001480156143af575081155b6040518060400160405280600281526020017f3138000000000000000000000000000000000000000000000000000000000000815250906104cf5760405162461bcd60e51b815260040161086591906154de565b60408051808201909152600281527f3633000000000000000000000000000000000000000000000000000000000000602082015261ffff82111561445a5760405162461bcd60e51b815260040161086591906154de565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016179052565b60408051808201909152600281527f3634000000000000000000000000000000000000000000000000000000000000602082015261ffff8211156144db5760405162461bcd60e51b815260040161086591906154de565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff1660109190911b179052565b60408051808201909152600281527f3635000000000000000000000000000000000000000000000000000000000000602082015261ffff8211156145625760405162461bcd60e51b815260040161086591906154de565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff1660209190911b179052565b603b816145a05760006145a3565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffff1660ff9190911690911b1790915250565b6039816145e55760006145e8565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff1660ff9190911690911b1790915250565b603454604080517fe860accb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163e860accb9160048083019260209291908290030181865afa15801561468c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146b091906158df565b6040517f4d44ac4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529190911690634d44ac4f90602401602060405180830381865afa15801561471e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614742919061550e565b60408051808201909152600281527f39300000000000000000000000000000000000000000000000000000000000006020820152909150811561193f5760405162461bcd60e51b815260040161086591906154de565b603e816147a65760006147a9565b60015b83517fffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffff1660ff9190911690911b1790915250565b60408051808201909152600281527f3733000000000000000000000000000000000000000000000000000000000000602082015264ffffffffff8211156148375760405162461bcd60e51b815260040161086591906154de565b5081517ff0000000000fffffffffffffffffffffffffffffffffffffffffffffffffffff1660d49190911b179052565b603881614875576000614878565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffff1660ff9190911690911b1790915250565b60408051808201909152600281527f36380000000000000000000000000000000000000000000000000000000000006020820152640fffffffff8211156149065760405162461bcd60e51b815260040161086591906154de565b5081517ffffffffffffffffffffffffffffffffffff000000000ffffffffffffffffffff1660509190911b179052565b60408051808201909152600281527f3731000000000000000000000000000000000000000000000000000000000000602082015260ff82111561498c5760405162461bcd60e51b815260040161086591906154de565b5081517fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1660a89190911b179052565b603f816149ca5760006149cd565b60015b83517fffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffff1660ff9190911690911b1790915250565b60008060208385031215614a1457600080fd5b823567ffffffffffffffff80821115614a2c57600080fd5b818501915085601f830112614a4057600080fd5b813581811115614a4f57600080fd5b8660208260051b8501011115614a6457600080fd5b60209290920196919550909350505050565b73ffffffffffffffffffffffffffffffffffffffff81168114614a9857600080fd5b50565b8035614aa681614a76565b919050565b60008060408385031215614abe57600080fd5b8235614ac981614a76565b946020939093013593505050565b60008060408385031215614aea57600080fd5b8235614af581614a76565b91506020830135614b0581614a76565b809150509250929050565b6fffffffffffffffffffffffffffffffff81168114614a9857600080fd5b600060208284031215614b4057600080fd5b8135614b4b81614b10565b9392505050565b600060208284031215614b6457600080fd5b5035919050565b8015158114614a9857600080fd5b60008060408385031215614b8c57600080fd5b8235614b9781614a76565b91506020830135614b0581614b6b565b600060208284031215614bb957600080fd5b8135614b4b81614a76565b600060208284031215614bd657600080fd5b813567ffffffffffffffff811115614bed57600080fd5b820160c08185031215614b4b57600080fd5b600060208284031215614c1157600080fd5b8135614b4b81614b6b565b60008060008060808587031215614c3257600080fd5b8435614c3d81614a76565b966020860135965060408601359560600135945092505050565b600060208284031215614c6957600080fd5b813567ffffffffffffffff811115614c8057600080fd5b820160e08185031215614b4b57600080fd5b803560ff81168114614aa657600080fd5b61ffff81168114614a9857600080fd5b600080600080600080600060c0888a031215614cce57600080fd5b614cd788614c92565b96506020880135614ce781614ca3565b95506040880135614cf781614ca3565b94506060880135614d0781614ca3565b93506080880135614d1781614a76565b925060a088013567ffffffffffffffff80821115614d3457600080fd5b818a0191508a601f830112614d4857600080fd5b813581811115614d5757600080fd5b8b6020828501011115614d6957600080fd5b60208301945080935050505092959891949750929550565b60008060408385031215614d9457600080fd5b8235614d9f81614a76565b9150614dad60208401614c92565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe21833603018112614e1957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614e5857600080fd5b830160208101925035905067ffffffffffffffff811115614e7857600080fd5b803603831315614e8757600080fd5b9250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152614f2160408201614f0784614a9b565b73ffffffffffffffffffffffffffffffffffffffff169052565b6000614f2f60208401614a9b565b73ffffffffffffffffffffffffffffffffffffffff166060830152614f5660408401614a9b565b73ffffffffffffffffffffffffffffffffffffffff166080830152614f7d60608401614c92565b60ff1660a0830152614f9160808401614a9b565b73ffffffffffffffffffffffffffffffffffffffff1660c0830152614fb860a08401614a9b565b73ffffffffffffffffffffffffffffffffffffffff1660e0830152614fdf60c08401614a9b565b6101006150038185018373ffffffffffffffffffffffffffffffffffffffff169052565b61500f60e08601614a9b565b91506101206150358186018473ffffffffffffffffffffffffffffffffffffffff169052565b61504182870187614e23565b935091506101e0610140818188015261505f61022088018686614e8e565b945061506d83890189614e23565b945092507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06101608189880301818a01526150a9878787614e8e565b96506150b7838b018b614e23565b9650945061018092508189880301838a01526150d4878787614e8e565b96506150e2818b018b614e23565b96509450506101a08189880301818a01526150fe878787614e8e565b965061510c838b018b614e23565b965094506101c092508189880301838a0152615129878787614e8e565b9650615137818b018b614e23565b9650945050808887030183890152615150868686614e8e565b955061515e828a018a614e23565b95509350808887030161020089015250505061517b838383614e8e565b979650505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151df577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff81118282101715615239576152396151e6565b60405290565b60405160a0810167ffffffffffffffff81118282101715615239576152396151e6565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152a9576152a96151e6565b604052919050565b6000602082840312156152c357600080fd5b6040516020810181811067ffffffffffffffff821117156152e6576152e66151e6565b6040529151825250919050565b60006020828403121561530557600080fd5b614b4b83836152b1565b8051614aa681614b10565b805164ffffffffff81168114614aa657600080fd5b8051614aa681614ca3565b8051614aa681614a76565b60006101e0828403121561535857600080fd5b615360615215565b61536a84846152b1565b81526153786020840161530f565b60208201526153896040840161530f565b604082015261539a6060840161530f565b60608201526153ab6080840161530f565b60808201526153bc60a0840161530f565b60a08201526153cd60c0840161531a565b60c08201526153de60e0840161532f565b60e08201526101006153f181850161533a565b9082015261012061540384820161533a565b9082015261014061541584820161533a565b9082015261016061542784820161533a565b9082015261018061543984820161530f565b908201526101a061544b84820161530f565b908201526101c061545d84820161530f565b908201529392505050565b60005b8381101561548357818101518382015260200161546b565b838111156104cf5750506000910152565b600081518084526154ac816020860160208601615468565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000614b4b6020830184615494565b60006020828403121561550357600080fd5b8151614b4b81614b10565b60006020828403121561552057600080fd5b5051919050565b600073ffffffffffffffffffffffffffffffffffffffff808516835260406020840152833561555581614a76565b81166040840152602084013561556a81614a76565b16606083015261557d6040840184614e23565b60c0608085015261559361010085018284614e8e565b9150506155a36060850185614e23565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0808685030160a08701526155d9848385614e8e565b93506155e760808801614a9b565b73ffffffffffffffffffffffffffffffffffffffff811660c0880152925061561260a0880188614e23565b93509150808685030160e08701525061517b838383614e8e565b6000602080838503121561563f57600080fd5b825167ffffffffffffffff8082111561565757600080fd5b818501915085601f83011261566b57600080fd5b81518181111561567d5761567d6151e6565b8060051b915061568e848301615262565b81815291830184019184810190888411156156a857600080fd5b938501935b838510156156d257845192506156c283614a76565b82825293850193908501906156ad565b98975050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808516835260406020840152833561570c81614a76565b16604083015261571e60208401614a9b565b73ffffffffffffffffffffffffffffffffffffffff16606083015261574560408401614a9b565b73ffffffffffffffffffffffffffffffffffffffff16608083015261576d6060840184614e23565b60e060a085015261578361012085018284614e8e565b9150506157936080850185614e23565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0808685030160c08701526157c9848385614e8e565b93506157d760a08801614a9b565b73ffffffffffffffffffffffffffffffffffffffff811660e0880152925061580260c0880188614e23565b9350915080868503016101008701525061517b838383614e8e565b60ff8316815260406020820152600061ffff8084511660408401528060208501511660608401528060408501511660808401525073ffffffffffffffffffffffffffffffffffffffff60608401511660a0830152608083015160a060c084015261588a60e0840182615494565b95945050505050565b600061ffff8089168352808816602084015280871660408401525073ffffffffffffffffffffffffffffffffffffffff8516606083015260a060808301526156d260a083018486614e8e565b6000602082840312156158f157600080fd5b8151614b4b81614a76565b6000602080838503121561590f57600080fd5b825167ffffffffffffffff8082111561592757600080fd5b9084019060a0828703121561593b57600080fd5b61594361523f565b825161594e81614ca3565b81528284015161595d81614ca3565b81850152604083015161596f81614ca3565b6040820152606083015161598281614a76565b606082015260808301518281111561599957600080fd5b80840193505086601f8401126159ae57600080fd5b8251828111156159c0576159c06151e6565b6159f0857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615262565b92508083528785828601011115615a0657600080fd5b615a1581868501878701615468565b50608081019190915295945050505050565b600060208284031215615a3957600080fd5b8151614b4b81614b6b565b6000806000806000806000806000806000806101808d8f031215615a6757600080fd5b8c519b5060208d01519a5060408d0151995060608d0151985060808d0151975060a08d0151965060c08d0151955060e08d015194506101008d015193506101208d015192506101408d01519150615ac16101608e0161531a565b90509295989b509295989b509295989b56fea264697066735822122097bdda619e2cb8a4b59592b2108978d2ac3aef06488831f165d7ac68a2baac0764736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5B09 DUP1 PUSH3 0x25 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 0x1CF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7AF635A6 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xAEB4FCC1 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xC4D66DE8 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x3B8 JUMPI DUP1 PUSH4 0xD14A0983 EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0xD4FE3F99 EQ PUSH2 0x3DE JUMPI DUP1 PUSH4 0xF213EF0E EQ PUSH2 0x3F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xAEB4FCC1 EQ PUSH2 0x36C JUMPI DUP1 PUSH4 0xB736AAEB EQ PUSH2 0x37F JUMPI DUP1 PUSH4 0xBB01C37C EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xC19D61E4 EQ PUSH2 0x3A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8A751A60 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x8A751A60 EQ PUSH2 0x320 JUMPI DUP1 PUSH4 0x96E957C4 EQ PUSH2 0x333 JUMPI DUP1 PUSH4 0xA7FA83B7 EQ PUSH2 0x346 JUMPI DUP1 PUSH4 0xAD4E6432 EQ PUSH2 0x359 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7AF635A6 EQ PUSH2 0x2E0 JUMPI DUP1 PUSH4 0x7C4E560B EQ PUSH2 0x2FA JUMPI DUP1 PUSH4 0x8A493676 EQ PUSH2 0x30D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x48D9FBA9 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x63C9B860 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x63C9B860 EQ PUSH2 0x294 JUMPI DUP1 PUSH4 0x682CF264 EQ PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x7626CDE3 EQ PUSH2 0x2BA JUMPI DUP1 PUSH4 0x7641F3D9 EQ PUSH2 0x2CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x48D9FBA9 EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0x4B4E6753 EQ PUSH2 0x26E JUMPI DUP1 PUSH4 0x571F03E5 EQ PUSH2 0x281 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1DF970BD GT PUSH2 0x1AD JUMPI DUP1 PUSH4 0x1DF970BD EQ PUSH2 0x20F JUMPI DUP1 PUSH4 0x26D2CEC2 EQ PUSH2 0x222 JUMPI DUP1 PUSH4 0x3036B439 EQ PUSH2 0x235 JUMPI DUP1 PUSH4 0x38AE0CC3 EQ PUSH2 0x248 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2FB45E6 EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x145F5892 EQ PUSH2 0x1E9 JUMPI DUP1 PUSH4 0x1D2118F9 EQ PUSH2 0x1FC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E7 PUSH2 0x1E2 CALLDATASIZE PUSH1 0x4 PUSH2 0x4A01 JUMP JUMPDEST PUSH2 0x404 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1E7 PUSH2 0x1F7 CALLDATASIZE PUSH1 0x4 PUSH2 0x4AAB JUMP JUMPDEST PUSH2 0x4D5 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x20A CALLDATASIZE PUSH1 0x4 PUSH2 0x4AD7 JUMP JUMPDEST PUSH2 0x66F JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x21D CALLDATASIZE PUSH1 0x4 PUSH2 0x4B2E JUMP JUMPDEST PUSH2 0x7F4 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x230 CALLDATASIZE PUSH1 0x4 PUSH2 0x4AAB JUMP JUMPDEST PUSH2 0xA76 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x243 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B52 JUMP JUMPDEST PUSH2 0xC5B JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x256 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B79 JUMP JUMPDEST PUSH2 0xE0B JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x269 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B79 JUMP JUMPDEST PUSH2 0xF96 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x27C CALLDATASIZE PUSH1 0x4 PUSH2 0x4AAB JUMP JUMPDEST PUSH2 0x1122 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x28F CALLDATASIZE PUSH1 0x4 PUSH2 0x4AAB JUMP JUMPDEST PUSH2 0x1307 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x2A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x4BA7 JUMP JUMPDEST PUSH2 0x1497 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x2B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B79 JUMP JUMPDEST PUSH2 0x1568 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x2C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x174D JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x2DB CALLDATASIZE PUSH1 0x4 PUSH2 0x4BFF JUMP JUMPDEST PUSH2 0x17F2 JUMP JUMPDEST PUSH2 0x2E8 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1E7 PUSH2 0x308 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x1944 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x31B CALLDATASIZE PUSH1 0x4 PUSH2 0x4B2E JUMP JUMPDEST PUSH2 0x1C66 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x32E CALLDATASIZE PUSH1 0x4 PUSH2 0x4B79 JUMP JUMPDEST PUSH2 0x1ED7 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x341 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B79 JUMP JUMPDEST PUSH2 0x20C0 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x354 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B79 JUMP JUMPDEST PUSH2 0x223F JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x367 CALLDATASIZE PUSH1 0x4 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x23EC JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x37A CALLDATASIZE PUSH1 0x4 PUSH2 0x4AAB JUMP JUMPDEST PUSH2 0x245E JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x38D CALLDATASIZE PUSH1 0x4 PUSH2 0x4B79 JUMP JUMPDEST PUSH2 0x268B JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x3A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C57 JUMP JUMPDEST PUSH2 0x2818 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x3B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB3 JUMP JUMPDEST PUSH2 0x288A JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x3C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4BA7 JUMP JUMPDEST PUSH2 0x2E48 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x3D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x4AAB JUMP JUMPDEST PUSH2 0x3047 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x3EC CALLDATASIZE PUSH1 0x4 PUSH2 0x4D81 JUMP JUMPDEST PUSH2 0x31D7 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x3FF CALLDATASIZE PUSH1 0x4 PUSH2 0x4B79 JUMP JUMPDEST PUSH2 0x349C JUMP JUMPDEST PUSH2 0x40C PUSH2 0x361B JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x4CF JUMPI PUSH20 0x0 PUSH4 0xDF59B8B2 DUP4 DUP7 DUP7 DUP6 DUP2 DUP2 LT PUSH2 0x45D JUMPI PUSH2 0x45D PUSH2 0x4DB6 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0x46F SWAP2 SWAP1 PUSH2 0x4DE5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x48C SWAP3 SWAP2 SWAP1 PUSH2 0x4ED7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x4B8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 DUP1 PUSH2 0x4C7 SWAP1 PUSH2 0x5186 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x428 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x4DD PUSH2 0x382C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x54E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x572 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0xB0 SHR PUSH5 0xFFFFFFFFF AND PUSH2 0x58B DUP3 DUP5 PUSH2 0x3A39 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x613 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0x9808B1FC5ABDE94EDF02FDDE393BEA0D2E4795999BA31695472848638B5C29F SWAP3 POP ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP JUMP JUMPDEST PUSH2 0x677 PUSH2 0x382C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6E9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x70D SWAP2 SWAP1 PUSH2 0x5345 JUMP JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0x1D2118F900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP4 SWAP5 POP SWAP2 SWAP3 AND SWAP1 PUSH4 0x1D2118F9 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x78B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x79F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE DUP9 AND SWAP4 POP PUSH32 0xDB8DADA53709CE4988154324196790C2E4A60C377E1256790946F83B87DB3C33 SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x7FC PUSH2 0x3AC3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3139000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND GT ISZERO PUSH2 0x86E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x6A99C03600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x6A99C036 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x903 SWAP2 SWAP1 PUSH2 0x54F1 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x74B2E4300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 PUSH4 0xBCB6E522 SWAP2 DUP4 SWAP2 PUSH4 0x74B2E43 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x97E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9A2 SWAP2 SWAP1 PUSH2 0x54F1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP6 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA20 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND DUP3 MSTORE DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0xE7E0C75E1FC2D0BD83DC85D59F085B3E763107C392FB368E85572B292F1F5576 SWAP4 POP ADD SWAP1 POP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH2 0xA7E PUSH2 0x382C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3730000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 DUP3 GT ISZERO PUSH2 0xAD5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB47 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB6B SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x98 SHR PUSH2 0xFFFF AND PUSH2 0xB81 DUP3 DUP5 PUSH2 0x3C3C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC09 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0xB5B0A963825337808B6E3154DE8E98027595A5CAD4219BB3A9BC55B192F4B391 SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0xC63 PUSH2 0x3AC3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3232000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 DUP3 GT ISZERO PUSH2 0xCBA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x272D907200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x272D9072 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD2B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD4F SWAP2 SWAP1 PUSH2 0x550E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0x3036B43900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE SWAP2 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0x3036B439 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDBC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xDD0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 SWAP1 MSTORE PUSH32 0x30B17CB587A89089D003457C432F73E22AEEE93DE425E92224BA01080260ECD9 SWAP4 POP ADD SWAP1 POP PUSH2 0xA6A JUMP JUMPDEST PUSH2 0xE13 PUSH2 0x382C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE84 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEA8 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST SWAP1 POP PUSH2 0xEB4 DUP2 DUP4 PUSH2 0x3CC3 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF28 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF3C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP2 MSTORE DUP6 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x74ADF6AAF58C08BC4F993640385E136522375EA3D1589A10D02ADBB906C67D1C SWAP4 POP ADD SWAP1 POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH2 0xF9E PUSH2 0x3D08 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x100F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1033 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST SWAP1 POP PUSH2 0x103F DUP2 DUP4 PUSH2 0x3F15 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x10B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xE188D542A5F11925D3A3AF33703CDD30A43CB3E8066A3CF68B1B57F61A5A94B5 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1115 SWAP2 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH2 0x112A PUSH2 0x382C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3637000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 DUP3 GT ISZERO PUSH2 0x1181 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11F3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1217 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x40 SHR PUSH2 0xFFFF AND PUSH2 0x122D DUP3 DUP5 PUSH2 0x3F5A JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x12B5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0xB46E2B82B0C2CF3D7D9DECE53635E165C53E0EAA7A44F904D61A2B7174826AEF SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x130F PUSH2 0x382C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1380 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13A4 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x74 SHR PUSH5 0xFFFFFFFFF AND PUSH2 0x13BD DUP3 DUP5 PUSH2 0x3FE1 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1431 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1445 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0x263602682188540A2D633561C0B4453B7D8566285E99F9F6018B8EF2FACEF49 SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x149F PUSH2 0x3AC3 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0x63C9B86000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x63C9B860 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x150C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1520 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP3 POP PUSH32 0xEEEC4C06F7ADAD215CBDB4D2960896C83C26AEDCE02DDE76D36FA28588D62DA4 SWAP2 POP PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x1570 PUSH2 0x382C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15E1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1605 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST SWAP1 POP DUP2 PUSH2 0x166D JUMPI DUP1 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3838000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH8 0x800000000000000 AND ISZERO PUSH2 0x166B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP JUMPDEST PUSH2 0x1677 DUP2 DUP4 PUSH2 0x406B JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16FF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x2443BA28E8D1D88D531A3D90B981816A4F3B3C7F1FD4085C6029E81D1B7A570D DUP4 PUSH1 0x40 MLOAD PUSH2 0x1115 SWAP2 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x1755 PUSH2 0x3AC3 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF5B50E7000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0x0 SWAP2 PUSH4 0xF5B50E70 SWAP2 PUSH2 0x17BF SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x5527 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x17D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x17EB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x17FA PUSH2 0x40B0 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xD1946DBC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0xD1946DBC SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 DUP7 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1869 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 0x18AF SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x562C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x193F JUMPI PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x18E7 JUMPI PUSH2 0x18E7 PUSH2 0x4DB6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x192D JUMPI PUSH2 0x192D DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x191F JUMPI PUSH2 0x191F PUSH2 0x4DB6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 PUSH2 0xF96 JUMP JUMPDEST DUP1 PUSH2 0x1937 DUP2 PUSH2 0x5186 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x18B4 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x194C PUSH2 0x382C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3230000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP3 DUP5 GT ISZERO PUSH2 0x19A1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A13 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A37 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST SWAP1 POP DUP3 ISZERO PUSH2 0x1AFF JUMPI PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3230000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 DUP4 GT PUSH2 0x1A95 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP PUSH2 0x2710 PUSH2 0x1AA3 DUP5 DUP5 PUSH2 0x4229 JUMP JUMPDEST GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3230000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1AF9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP PUSH2 0x1B5C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3230000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP3 ISZERO PUSH2 0x1B52 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP PUSH2 0x1B5C DUP6 PUSH2 0x426C JUMP JUMPDEST PUSH2 0x1B66 DUP2 DUP6 PUSH2 0x4403 JUMP JUMPDEST PUSH2 0x1B70 DUP2 DUP5 PUSH2 0x4484 JUMP JUMPDEST PUSH2 0x1B7A DUP2 DUP4 PUSH2 0x450B JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1C02 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP8 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE SWAP1 DUP2 ADD DUP6 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP3 POP PUSH32 0x637FEBBDA9275AEA2E85C0FF690444C8D87EB2E8339BBEDE9715ABCC89CB0995 SWAP2 POP PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1C6E PUSH2 0x3AC3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3139000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND GT ISZERO PUSH2 0x1CD7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x74B2E4300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x74B2E43 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D48 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D6C SWAP2 SWAP1 PUSH2 0x54F1 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x6A99C03600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 PUSH4 0xBCB6E522 SWAP2 DUP6 SWAP2 DUP5 SWAP2 PUSH4 0x6A99C036 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DE8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E0C SWAP2 SWAP1 PUSH2 0x54F1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1E75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1E89 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND DUP3 MSTORE DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x71ABA182C9D0529B516DE7A78BED74D49C207EF7E152F52F7EA5D8730138F643 SWAP4 POP ADD SWAP1 POP PUSH2 0xA6A JUMP JUMPDEST PUSH2 0x1EDF PUSH2 0x382C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F50 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F74 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST SWAP1 POP DUP2 ISZERO PUSH2 0x1FE0 JUMPI DUP1 MLOAD PUSH8 0x400000000000000 AND ISZERO ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3330000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1FDE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP JUMPDEST PUSH2 0x1FEA DUP2 DUP4 PUSH2 0x4592 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x205E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2072 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xB64D0941719ACD363F1A6BE3D8525D8EC9D71738F7445AABCD88D7939B472E7 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1115 SWAP2 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x20C8 PUSH2 0x382C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2139 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x215D SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST SWAP1 POP PUSH2 0x2169 DUP2 DUP4 PUSH2 0x45D7 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x21DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x21F1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xC4443D258A350D27DC50C378B2EBF165E6469725F786D21B30CAB16823F5587 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1115 SWAP2 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x2247 PUSH2 0x382C JUMP JUMPDEST DUP1 ISZERO PUSH2 0x2256 JUMPI PUSH2 0x2256 DUP3 PUSH2 0x461C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x22EB SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2303 DUP3 MLOAD PUSH8 0x4000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x230F DUP3 DUP5 PUSH2 0x4798 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2383 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2397 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 ISZERO ISZERO DUP2 MSTORE DUP7 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0x842A280B07E8E502A9101F32A3B768EBABA3655556DD674F0831900861FC674B SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x23F4 PUSH2 0x3AC3 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xB0F0935500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0x0 SWAP2 PUSH4 0xB0F09355 SWAP2 PUSH2 0x17BF SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x5527 JUMP JUMPDEST PUSH2 0x2466 PUSH2 0x382C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x24FB SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND DUP1 PUSH2 0x2518 JUMPI PUSH2 0x2518 DUP5 PUSH2 0x426C JUMP JUMPDEST PUSH2 0x2522 DUP3 DUP5 PUSH2 0x47DD JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2596 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x25AA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH1 0x0 EQ ISZERO PUSH2 0x263D JUMPI PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xE43E88A100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xE43E88A1 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2624 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2638 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP2 PUSH32 0x6824A6C7FBC10D2979B1F1CCF2DD4ED0436541679A661DEDB5C10BD4BE830682 SWAP2 ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x2693 PUSH2 0x3AC3 JUMP JUMPDEST DUP1 PUSH2 0x26A1 JUMPI PUSH2 0x26A1 DUP3 PUSH2 0x426C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2712 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2736 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST SWAP1 POP PUSH2 0x2742 DUP2 DUP4 PUSH2 0x4867 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x27B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x27CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xC36C7D11BA01A5869D52AA4A3781939DAB851CBC9EE6E7FDCEDC7D58898A3F1E DUP4 PUSH1 0x40 MLOAD PUSH2 0x1115 SWAP2 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x2820 PUSH2 0x3AC3 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xB13C96A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0x0 SWAP2 PUSH4 0xB13C96A8 SWAP2 PUSH2 0x17BF SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x56DE JUMP JUMPDEST PUSH2 0x2892 PUSH2 0x382C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP8 AND PUSH2 0x28E8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP7 AND PUSH2 0x293F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP DUP5 PUSH2 0xFFFF AND DUP7 PUSH2 0xFFFF AND GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x29A0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 PUSH2 0xFFFF DUP7 AND GT PUSH2 0x29FB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP PUSH2 0x2710 PUSH2 0x2A10 PUSH2 0xFFFF DUP8 DUP2 AND SWAP1 DUP8 AND PUSH2 0x4229 JUMP JUMPDEST GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2A66 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xD1946DBC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0xD1946DBC SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 DUP7 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2AD6 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 0x2B1C SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x562C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x2CD0 JUMPI PUSH1 0x35 SLOAD DUP3 MLOAD PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0xC44B11F7 SWAP1 DUP6 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0x2B61 JUMPI PUSH2 0x2B61 PUSH2 0x4DB6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2BA1 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2BBE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2BE2 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0xA8 SHR PUSH1 0xFF AND DUP11 PUSH1 0xFF AND EQ ISZERO PUSH2 0x2CBD JUMPI DUP1 MLOAD PUSH2 0xFFFF AND DUP10 PUSH2 0xFFFF AND GT PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2C57 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP DUP1 MLOAD PUSH1 0x10 SHR PUSH2 0xFFFF AND DUP9 PUSH2 0xFFFF AND GT PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2CBB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP JUMPDEST POP DUP1 PUSH2 0x2CC8 DUP2 PUSH2 0x5186 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2B21 JUMP JUMPDEST POP PUSH1 0x35 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD579EA7D DUP10 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP8 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 SWAP2 MSTORE POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x2DC7 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x581D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2DE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2DF5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP8 PUSH1 0xFF AND PUSH32 0xACF8B4A3CACE10779798A89A206A0AE73A71B63ACDD3BE2801D39C2EF7AB3CB DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH1 0x40 MLOAD PUSH2 0x2E36 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5893 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x2E59 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x2E65 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x2ED7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x865 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x2F14 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x34 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0x26B1D5F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0x26B1D5F SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2FAB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2FCF SWAP2 SWAP1 PUSH2 0x58DF JUMP JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x193F JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH2 0x304F PUSH2 0x382C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x30C0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x30E4 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x50 SHR PUSH5 0xFFFFFFFFF AND PUSH2 0x30FD DUP3 DUP5 PUSH2 0x48AC JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3171 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3185 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0xC51ACA575985D521C5072AD11549BAD77013BB786D57F30F94B40ED8F8DC9BC4 SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x31DF PUSH2 0x382C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3250 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3274 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST SWAP1 POP PUSH1 0xFF DUP3 AND ISZERO PUSH2 0x33A4 JUMPI PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0x6C6F6AE100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0x6C6F6AE1 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x32F1 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 0x3337 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x58FC JUMP JUMPDEST DUP3 MLOAD SWAP1 SWAP2 POP PUSH1 0x10 SHR PUSH2 0xFFFF AND DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0xFFFF AND GT PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3137000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x33A1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP POP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xA8 SHR PUSH1 0xFF AND SWAP1 POP PUSH2 0x33BE DUP3 PUSH1 0xFF DUP6 AND PUSH2 0x4936 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3432 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3446 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF DUP1 DUP7 AND DUP3 MSTORE DUP8 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0x5BB69795B6A2EA222D73A5F8939C23471A1F85A99C7CA43C207F1B71F10C6264 SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x34A4 PUSH2 0x382C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3515 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3539 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST SWAP1 POP PUSH2 0x3545 DUP2 DUP4 PUSH2 0x49BC JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x35B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x35CD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xC8FF3CC5B0FDDAA3E6EBBBD7438F43393E4EA30E88B80AD016C1BC094655034D DUP4 PUSH1 0x40 MLOAD PUSH2 0x1115 SWAP2 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x707CD716 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x368B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x36AF SWAP2 SWAP1 PUSH2 0x58DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x13EE32E000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x13EE32E0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x371C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3740 SWAP2 SWAP1 PUSH2 0x5A27 JUMP JUMPDEST DUP1 PUSH2 0x37D4 JUMPI POP PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x37B0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x37D4 SWAP2 SWAP1 PUSH2 0x5A27 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3500000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3828 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x707CD716 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x389C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x38C0 SWAP2 SWAP1 PUSH2 0x58DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x674B5E4D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x674B5E4D SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x392D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3951 SWAP2 SWAP1 PUSH2 0x5A27 JUMP JUMPDEST DUP1 PUSH2 0x39E5 JUMPI POP PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x39C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x39E5 SWAP2 SWAP1 PUSH2 0x5A27 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3400000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3828 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3732000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFF DUP3 GT ISZERO PUSH2 0x3A93 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xB0 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x707CD716 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3B33 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3B57 SWAP2 SWAP1 PUSH2 0x58DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3BC4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3BE8 SWAP2 SWAP1 PUSH2 0x5A27 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3828 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3730000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x3C93 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x98 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3D DUP2 PUSH2 0x3CD1 JUMPI PUSH1 0x0 PUSH2 0x3CD4 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x707CD716 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3D78 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3D9C SWAP2 SWAP1 PUSH2 0x58DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3E09 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3E2D SWAP2 SWAP1 PUSH2 0x5A27 JUMP JUMPDEST DUP1 PUSH2 0x3EC1 JUMPI POP PUSH1 0x40 MLOAD PUSH32 0x2500F2B600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x2500F2B6 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3E9D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3EC1 SWAP2 SWAP1 PUSH2 0x5A27 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3300000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3828 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST PUSH1 0x3C DUP2 PUSH2 0x3F23 JUMPI PUSH1 0x0 PUSH2 0x3F26 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3637000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x3FB1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF AND PUSH1 0x40 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3639000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFF DUP3 GT ISZERO PUSH2 0x403B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x74 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3A DUP2 PUSH2 0x4079 JUMPI PUSH1 0x0 PUSH2 0x407C JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x707CD716 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4120 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4144 SWAP2 SWAP1 PUSH2 0x58DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x2500F2B600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x2500F2B6 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x41B1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x41D5 SWAP2 SWAP1 PUSH2 0x5A27 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3200000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3828 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x425E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x34 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xE860ACCB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x42DC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4300 SWAP2 SWAP1 PUSH2 0x58DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x180 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x436F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4393 SWAP2 SWAP1 PUSH2 0x5A44 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP SWAP3 POP SWAP3 POP POP DUP1 PUSH1 0x0 EQ DUP1 ISZERO PUSH2 0x43AF JUMPI POP DUP2 ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3138000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x4CF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3633000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x445A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 AND OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3634000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x44DB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF AND PUSH1 0x10 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3635000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x4562 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF AND PUSH1 0x20 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3B DUP2 PUSH2 0x45A0 JUMPI PUSH1 0x0 PUSH2 0x45A3 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x39 DUP2 PUSH2 0x45E5 JUMPI PUSH1 0x0 PUSH2 0x45E8 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xE860ACCB00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0xE860ACCB SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x468C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x46B0 SWAP2 SWAP1 PUSH2 0x58DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4D44AC4F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x4D44AC4F SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x471E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4742 SWAP2 SWAP1 PUSH2 0x550E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3930000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 ISZERO PUSH2 0x193F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST PUSH1 0x3E DUP2 PUSH2 0x47A6 JUMPI PUSH1 0x0 PUSH2 0x47A9 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3733000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x4837 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xD4 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x38 DUP2 PUSH2 0x4875 JUMPI PUSH1 0x0 PUSH2 0x4878 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3638000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFF DUP3 GT ISZERO PUSH2 0x4906 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF AND PUSH1 0x50 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3731000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP3 GT ISZERO PUSH2 0x498C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xA8 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3F DUP2 PUSH2 0x49CA JUMPI PUSH1 0x0 PUSH2 0x49CD JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4A14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x4A2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4A40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x4A4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x4A64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 SWAP1 SWAP3 ADD SWAP7 SWAP2 SWAP6 POP SWAP1 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4A98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x4AA6 DUP2 PUSH2 0x4A76 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4ABE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4AC9 DUP2 PUSH2 0x4A76 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4AEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4AF5 DUP2 PUSH2 0x4A76 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4B05 DUP2 PUSH2 0x4A76 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4A98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4B40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4B4B DUP2 PUSH2 0x4B10 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4B64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x4A98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4B8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4B97 DUP2 PUSH2 0x4A76 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4B05 DUP2 PUSH2 0x4B6B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4BB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4B4B DUP2 PUSH2 0x4A76 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4BD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4BED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0xC0 DUP2 DUP6 SUB SLT ISZERO PUSH2 0x4B4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4C11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4B4B DUP2 PUSH2 0x4B6B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4C32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x4C3D DUP2 PUSH2 0x4A76 JUMP JUMPDEST SWAP7 PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP6 PUSH1 0x60 ADD CALLDATALOAD SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4C69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4C80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0xE0 DUP2 DUP6 SUB SLT ISZERO PUSH2 0x4B4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x4AA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x4A98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xC0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x4CCE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4CD7 DUP9 PUSH2 0x4C92 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x4CE7 DUP2 PUSH2 0x4CA3 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH2 0x4CF7 DUP2 PUSH2 0x4CA3 JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH2 0x4D07 DUP2 PUSH2 0x4CA3 JUMP JUMPDEST SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH2 0x4D17 DUP2 PUSH2 0x4A76 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x4D34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP11 ADD SWAP2 POP DUP11 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4D48 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x4D57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP12 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x4D69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4D94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4D9F DUP2 PUSH2 0x4A76 JUMP JUMPDEST SWAP2 POP PUSH2 0x4DAD PUSH1 0x20 DUP5 ADD PUSH2 0x4C92 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE21 DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x4E19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x4E58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4E78 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATASIZE SUB DUP4 SGT ISZERO PUSH2 0x4E87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 ADD ADD MSTORE PUSH1 0x0 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP5 ADD ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x4F21 PUSH1 0x40 DUP3 ADD PUSH2 0x4F07 DUP5 PUSH2 0x4A9B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4F2F PUSH1 0x20 DUP5 ADD PUSH2 0x4A9B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x4F56 PUSH1 0x40 DUP5 ADD PUSH2 0x4A9B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x4F7D PUSH1 0x60 DUP5 ADD PUSH2 0x4C92 JUMP JUMPDEST PUSH1 0xFF AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x4F91 PUSH1 0x80 DUP5 ADD PUSH2 0x4A9B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x4FB8 PUSH1 0xA0 DUP5 ADD PUSH2 0x4A9B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x4FDF PUSH1 0xC0 DUP5 ADD PUSH2 0x4A9B JUMP JUMPDEST PUSH2 0x100 PUSH2 0x5003 DUP2 DUP6 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x500F PUSH1 0xE0 DUP7 ADD PUSH2 0x4A9B JUMP JUMPDEST SWAP2 POP PUSH2 0x120 PUSH2 0x5035 DUP2 DUP7 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x5041 DUP3 DUP8 ADD DUP8 PUSH2 0x4E23 JUMP JUMPDEST SWAP4 POP SWAP2 POP PUSH2 0x1E0 PUSH2 0x140 DUP2 DUP2 DUP9 ADD MSTORE PUSH2 0x505F PUSH2 0x220 DUP9 ADD DUP7 DUP7 PUSH2 0x4E8E JUMP JUMPDEST SWAP5 POP PUSH2 0x506D DUP4 DUP10 ADD DUP10 PUSH2 0x4E23 JUMP JUMPDEST SWAP5 POP SWAP3 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 PUSH2 0x160 DUP2 DUP10 DUP9 SUB ADD DUP2 DUP11 ADD MSTORE PUSH2 0x50A9 DUP8 DUP8 DUP8 PUSH2 0x4E8E JUMP JUMPDEST SWAP7 POP PUSH2 0x50B7 DUP4 DUP12 ADD DUP12 PUSH2 0x4E23 JUMP JUMPDEST SWAP7 POP SWAP5 POP PUSH2 0x180 SWAP3 POP DUP2 DUP10 DUP9 SUB ADD DUP4 DUP11 ADD MSTORE PUSH2 0x50D4 DUP8 DUP8 DUP8 PUSH2 0x4E8E JUMP JUMPDEST SWAP7 POP PUSH2 0x50E2 DUP2 DUP12 ADD DUP12 PUSH2 0x4E23 JUMP JUMPDEST SWAP7 POP SWAP5 POP POP PUSH2 0x1A0 DUP2 DUP10 DUP9 SUB ADD DUP2 DUP11 ADD MSTORE PUSH2 0x50FE DUP8 DUP8 DUP8 PUSH2 0x4E8E JUMP JUMPDEST SWAP7 POP PUSH2 0x510C DUP4 DUP12 ADD DUP12 PUSH2 0x4E23 JUMP JUMPDEST SWAP7 POP SWAP5 POP PUSH2 0x1C0 SWAP3 POP DUP2 DUP10 DUP9 SUB ADD DUP4 DUP11 ADD MSTORE PUSH2 0x5129 DUP8 DUP8 DUP8 PUSH2 0x4E8E JUMP JUMPDEST SWAP7 POP PUSH2 0x5137 DUP2 DUP12 ADD DUP12 PUSH2 0x4E23 JUMP JUMPDEST SWAP7 POP SWAP5 POP POP DUP1 DUP9 DUP8 SUB ADD DUP4 DUP10 ADD MSTORE PUSH2 0x5150 DUP7 DUP7 DUP7 PUSH2 0x4E8E JUMP JUMPDEST SWAP6 POP PUSH2 0x515E DUP3 DUP11 ADD DUP11 PUSH2 0x4E23 JUMP JUMPDEST SWAP6 POP SWAP4 POP DUP1 DUP9 DUP8 SUB ADD PUSH2 0x200 DUP10 ADD MSTORE POP POP POP PUSH2 0x517B DUP4 DUP4 DUP4 PUSH2 0x4E8E JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x51DF JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5239 JUMPI PUSH2 0x5239 PUSH2 0x51E6 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5239 JUMPI PUSH2 0x5239 PUSH2 0x51E6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x52A9 JUMPI PUSH2 0x52A9 PUSH2 0x51E6 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x52E6 JUMPI PUSH2 0x52E6 PUSH2 0x51E6 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5305 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4B4B DUP4 DUP4 PUSH2 0x52B1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x4AA6 DUP2 PUSH2 0x4B10 JUMP JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4AA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x4AA6 DUP2 PUSH2 0x4CA3 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x4AA6 DUP2 PUSH2 0x4A76 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5358 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5360 PUSH2 0x5215 JUMP JUMPDEST PUSH2 0x536A DUP5 DUP5 PUSH2 0x52B1 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x5378 PUSH1 0x20 DUP5 ADD PUSH2 0x530F JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x5389 PUSH1 0x40 DUP5 ADD PUSH2 0x530F JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x539A PUSH1 0x60 DUP5 ADD PUSH2 0x530F JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x53AB PUSH1 0x80 DUP5 ADD PUSH2 0x530F JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x53BC PUSH1 0xA0 DUP5 ADD PUSH2 0x530F JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x53CD PUSH1 0xC0 DUP5 ADD PUSH2 0x531A JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x53DE PUSH1 0xE0 DUP5 ADD PUSH2 0x532F JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x53F1 DUP2 DUP6 ADD PUSH2 0x533A JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x5403 DUP5 DUP3 ADD PUSH2 0x533A JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x5415 DUP5 DUP3 ADD PUSH2 0x533A JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x5427 DUP5 DUP3 ADD PUSH2 0x533A JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x5439 DUP5 DUP3 ADD PUSH2 0x530F JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x544B DUP5 DUP3 ADD PUSH2 0x530F JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x545D DUP5 DUP3 ADD PUSH2 0x530F JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5483 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x546B JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x4CF JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x54AC DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x5468 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x4B4B PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5494 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5503 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x4B4B DUP2 PUSH2 0x4B10 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5520 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD MSTORE DUP4 CALLDATALOAD PUSH2 0x5555 DUP2 PUSH2 0x4A76 JUMP JUMPDEST DUP2 AND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x556A DUP2 PUSH2 0x4A76 JUMP JUMPDEST AND PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x557D PUSH1 0x40 DUP5 ADD DUP5 PUSH2 0x4E23 JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x5593 PUSH2 0x100 DUP6 ADD DUP3 DUP5 PUSH2 0x4E8E JUMP JUMPDEST SWAP2 POP POP PUSH2 0x55A3 PUSH1 0x60 DUP6 ADD DUP6 PUSH2 0x4E23 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP1 DUP7 DUP6 SUB ADD PUSH1 0xA0 DUP8 ADD MSTORE PUSH2 0x55D9 DUP5 DUP4 DUP6 PUSH2 0x4E8E JUMP JUMPDEST SWAP4 POP PUSH2 0x55E7 PUSH1 0x80 DUP9 ADD PUSH2 0x4A9B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xC0 DUP9 ADD MSTORE SWAP3 POP PUSH2 0x5612 PUSH1 0xA0 DUP9 ADD DUP9 PUSH2 0x4E23 JUMP JUMPDEST SWAP4 POP SWAP2 POP DUP1 DUP7 DUP6 SUB ADD PUSH1 0xE0 DUP8 ADD MSTORE POP PUSH2 0x517B DUP4 DUP4 DUP4 PUSH2 0x4E8E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x563F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5657 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x566B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x567D JUMPI PUSH2 0x567D PUSH2 0x51E6 JUMP JUMPDEST DUP1 PUSH1 0x5 SHL SWAP2 POP PUSH2 0x568E DUP5 DUP4 ADD PUSH2 0x5262 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 DUP4 ADD DUP5 ADD SWAP2 DUP5 DUP2 ADD SWAP1 DUP9 DUP5 GT ISZERO PUSH2 0x56A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP4 DUP6 LT ISZERO PUSH2 0x56D2 JUMPI DUP5 MLOAD SWAP3 POP PUSH2 0x56C2 DUP4 PUSH2 0x4A76 JUMP JUMPDEST DUP3 DUP3 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP1 DUP6 ADD SWAP1 PUSH2 0x56AD JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD MSTORE DUP4 CALLDATALOAD PUSH2 0x570C DUP2 PUSH2 0x4A76 JUMP JUMPDEST AND PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x571E PUSH1 0x20 DUP5 ADD PUSH2 0x4A9B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x5745 PUSH1 0x40 DUP5 ADD PUSH2 0x4A9B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x576D PUSH1 0x60 DUP5 ADD DUP5 PUSH2 0x4E23 JUMP JUMPDEST PUSH1 0xE0 PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x5783 PUSH2 0x120 DUP6 ADD DUP3 DUP5 PUSH2 0x4E8E JUMP JUMPDEST SWAP2 POP POP PUSH2 0x5793 PUSH1 0x80 DUP6 ADD DUP6 PUSH2 0x4E23 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP1 DUP7 DUP6 SUB ADD PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x57C9 DUP5 DUP4 DUP6 PUSH2 0x4E8E JUMP JUMPDEST SWAP4 POP PUSH2 0x57D7 PUSH1 0xA0 DUP9 ADD PUSH2 0x4A9B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xE0 DUP9 ADD MSTORE SWAP3 POP PUSH2 0x5802 PUSH1 0xC0 DUP9 ADD DUP9 PUSH2 0x4E23 JUMP JUMPDEST SWAP4 POP SWAP2 POP DUP1 DUP7 DUP6 SUB ADD PUSH2 0x100 DUP8 ADD MSTORE POP PUSH2 0x517B DUP4 DUP4 DUP4 PUSH2 0x4E8E JUMP JUMPDEST PUSH1 0xFF DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0xA0 PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x588A PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0x5494 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP10 AND DUP4 MSTORE DUP1 DUP9 AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 DUP8 AND PUSH1 0x40 DUP5 ADD MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xA0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x56D2 PUSH1 0xA0 DUP4 ADD DUP5 DUP7 PUSH2 0x4E8E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x58F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x4B4B DUP2 PUSH2 0x4A76 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x590F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5927 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP5 ADD SWAP1 PUSH1 0xA0 DUP3 DUP8 SUB SLT ISZERO PUSH2 0x593B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5943 PUSH2 0x523F JUMP JUMPDEST DUP3 MLOAD PUSH2 0x594E DUP2 PUSH2 0x4CA3 JUMP JUMPDEST DUP2 MSTORE DUP3 DUP5 ADD MLOAD PUSH2 0x595D DUP2 PUSH2 0x4CA3 JUMP JUMPDEST DUP2 DUP6 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x596F DUP2 PUSH2 0x4CA3 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x5982 DUP2 PUSH2 0x4A76 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH2 0x5999 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP5 ADD SWAP4 POP POP DUP7 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x59AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP3 DUP2 GT ISZERO PUSH2 0x59C0 JUMPI PUSH2 0x59C0 PUSH2 0x51E6 JUMP JUMPDEST PUSH2 0x59F0 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x5262 JUMP JUMPDEST SWAP3 POP DUP1 DUP4 MSTORE DUP8 DUP6 DUP3 DUP7 ADD ADD GT ISZERO PUSH2 0x5A06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5A15 DUP2 DUP7 DUP6 ADD DUP8 DUP8 ADD PUSH2 0x5468 JUMP JUMPDEST POP PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5A39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x4B4B DUP2 PUSH2 0x4B6B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x180 DUP14 DUP16 SUB SLT ISZERO PUSH2 0x5A67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP13 MLOAD SWAP12 POP PUSH1 0x20 DUP14 ADD MLOAD SWAP11 POP PUSH1 0x40 DUP14 ADD MLOAD SWAP10 POP PUSH1 0x60 DUP14 ADD MLOAD SWAP9 POP PUSH1 0x80 DUP14 ADD MLOAD SWAP8 POP PUSH1 0xA0 DUP14 ADD MLOAD SWAP7 POP PUSH1 0xC0 DUP14 ADD MLOAD SWAP6 POP PUSH1 0xE0 DUP14 ADD MLOAD SWAP5 POP PUSH2 0x100 DUP14 ADD MLOAD SWAP4 POP PUSH2 0x120 DUP14 ADD MLOAD SWAP3 POP PUSH2 0x140 DUP14 ADD MLOAD SWAP2 POP PUSH2 0x5AC1 PUSH2 0x160 DUP15 ADD PUSH2 0x531A JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP8 0xBD 0xDA PUSH2 0x9E2C 0xB8 LOG4 0xB5 SWAP6 SWAP3 0xB2 LT DUP10 PUSH25 0xD2AC3AEF06488831F165D7AC68A2BAAC0764736F6C63430008 EXP STOP CALLER ","sourceMap":"1063:18368:95:-:0;;;928:1:71;886:43;;1063:18368:95;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@CONFIGURATOR_REVISION_23723":{"entryPoint":null,"id":23723,"parameterSlots":0,"returnSlots":0},"@_checkNoBorrowers_25144":{"entryPoint":17948,"id":25144,"parameterSlots":1,"returnSlots":0},"@_checkNoSuppliers_25119":{"entryPoint":17004,"id":25119,"parameterSlots":1,"returnSlots":0},"@_onlyAssetListingOrPoolAdmins_25248":{"entryPoint":13851,"id":25248,"parameterSlots":0,"returnSlots":0},"@_onlyEmergencyAdmin_25190":{"entryPoint":16560,"id":25190,"parameterSlots":0,"returnSlots":0},"@_onlyPoolAdmin_25167":{"entryPoint":15043,"id":25167,"parameterSlots":0,"returnSlots":0},"@_onlyPoolOrEmergencyAdmin_25219":{"entryPoint":15624,"id":25219,"parameterSlots":0,"returnSlots":0},"@_onlyRiskOrPoolAdmins_25277":{"entryPoint":14380,"id":25277,"parameterSlots":0,"returnSlots":0},"@configureReserveAsCollateral_24025":{"entryPoint":6468,"id":24025,"parameterSlots":4,"returnSlots":0},"@dropReserve_23813":{"entryPoint":5271,"id":23813,"parameterSlots":1,"returnSlots":0},"@getBorrowCap_11387":{"entryPoint":null,"id":11387,"parameterSlots":1,"returnSlots":1},"@getBorrowingEnabled_11233":{"entryPoint":null,"id":11233,"parameterSlots":1,"returnSlots":1},"@getDebtCeiling_11491":{"entryPoint":null,"id":11491,"parameterSlots":1,"returnSlots":1},"@getEModeCategory_11647":{"entryPoint":null,"id":11647,"parameterSlots":1,"returnSlots":1},"@getLiquidationProtocolFee_11543":{"entryPoint":null,"id":11543,"parameterSlots":1,"returnSlots":1},"@getLiquidationThreshold_10829":{"entryPoint":null,"id":10829,"parameterSlots":1,"returnSlots":1},"@getLtv_10777":{"entryPoint":null,"id":10777,"parameterSlots":1,"returnSlots":1},"@getReserveFactor_11335":{"entryPoint":null,"id":11335,"parameterSlots":1,"returnSlots":1},"@getRevision_23733":{"entryPoint":null,"id":23733,"parameterSlots":0,"returnSlots":1},"@getSiloedBorrowing_11183":{"entryPoint":null,"id":11183,"parameterSlots":1,"returnSlots":1},"@getStableRateBorrowingEnabled_11283":{"entryPoint":null,"id":11283,"parameterSlots":1,"returnSlots":1},"@getSupplyCap_11439":{"entryPoint":null,"id":11439,"parameterSlots":1,"returnSlots":1},"@getUnbackedMintCap_11595":{"entryPoint":null,"id":11595,"parameterSlots":1,"returnSlots":1},"@initReserves_23793":{"entryPoint":1028,"id":23793,"parameterSlots":2,"returnSlots":0},"@initialize_23754":{"entryPoint":11848,"id":23754,"parameterSlots":1,"returnSlots":0},"@isConstructor_10568":{"entryPoint":null,"id":10568,"parameterSlots":0,"returnSlots":1},"@percentMul_21119":{"entryPoint":16937,"id":21119,"parameterSlots":2,"returnSlots":1},"@setActive_10964":{"entryPoint":18535,"id":10964,"parameterSlots":2,"returnSlots":0},"@setAssetEModeCategory_24838":{"entryPoint":12759,"id":24838,"parameterSlots":2,"returnSlots":0},"@setBorrowCap_11368":{"entryPoint":18604,"id":11368,"parameterSlots":2,"returnSlots":0},"@setBorrowCap_24507":{"entryPoint":12359,"id":24507,"parameterSlots":2,"returnSlots":0},"@setBorrowableInIsolation_11114":{"entryPoint":15555,"id":11114,"parameterSlots":2,"returnSlots":0},"@setBorrowableInIsolation_24243":{"entryPoint":3595,"id":24243,"parameterSlots":2,"returnSlots":0},"@setBorrowingEnabled_11214":{"entryPoint":16491,"id":11214,"parameterSlots":2,"returnSlots":0},"@setDebtCeiling_11472":{"entryPoint":18397,"id":11472,"parameterSlots":2,"returnSlots":0},"@setDebtCeiling_24406":{"entryPoint":9310,"id":24406,"parameterSlots":2,"returnSlots":0},"@setEModeCategory_11628":{"entryPoint":18742,"id":11628,"parameterSlots":2,"returnSlots":0},"@setEModeCategory_24762":{"entryPoint":10378,"id":24762,"parameterSlots":7,"returnSlots":0},"@setFlashLoanEnabled_11678":{"entryPoint":18876,"id":11678,"parameterSlots":2,"returnSlots":0},"@setFrozen_11014":{"entryPoint":17879,"id":11014,"parameterSlots":2,"returnSlots":0},"@setLiquidationBonus_10862":{"entryPoint":17675,"id":10862,"parameterSlots":2,"returnSlots":0},"@setLiquidationProtocolFee_11524":{"entryPoint":15420,"id":11524,"parameterSlots":2,"returnSlots":0},"@setLiquidationProtocolFee_24610":{"entryPoint":2678,"id":24610,"parameterSlots":2,"returnSlots":0},"@setLiquidationThreshold_10810":{"entryPoint":17540,"id":10810,"parameterSlots":2,"returnSlots":0},"@setLtv_10761":{"entryPoint":17411,"id":10761,"parameterSlots":2,"returnSlots":0},"@setPaused_11064":{"entryPoint":16149,"id":11064,"parameterSlots":2,"returnSlots":0},"@setPoolPause_24974":{"entryPoint":6130,"id":24974,"parameterSlots":1,"returnSlots":0},"@setReserveActive_24163":{"entryPoint":9867,"id":24163,"parameterSlots":2,"returnSlots":0},"@setReserveBorrowing_23920":{"entryPoint":5480,"id":23920,"parameterSlots":2,"returnSlots":0},"@setReserveFactor_11316":{"entryPoint":16218,"id":11316,"parameterSlots":2,"returnSlots":0},"@setReserveFactor_24339":{"entryPoint":4386,"id":24339,"parameterSlots":2,"returnSlots":0},"@setReserveFlashLoaning_24116":{"entryPoint":13468,"id":24116,"parameterSlots":2,"returnSlots":0},"@setReserveFreeze_24203":{"entryPoint":8384,"id":24203,"parameterSlots":2,"returnSlots":0},"@setReserveInterestRateStrategyAddress_24925":{"entryPoint":1647,"id":24925,"parameterSlots":2,"returnSlots":0},"@setReservePause_24283":{"entryPoint":3990,"id":24283,"parameterSlots":2,"returnSlots":0},"@setReserveStableRateBorrowing_24076":{"entryPoint":7895,"id":24076,"parameterSlots":2,"returnSlots":0},"@setSiloedBorrowing_11164":{"entryPoint":18328,"id":11164,"parameterSlots":2,"returnSlots":0},"@setSiloedBorrowing_24460":{"entryPoint":8767,"id":24460,"parameterSlots":2,"returnSlots":0},"@setStableRateBorrowingEnabled_11264":{"entryPoint":17810,"id":11264,"parameterSlots":2,"returnSlots":0},"@setSupplyCap_11420":{"entryPoint":16353,"id":11420,"parameterSlots":2,"returnSlots":0},"@setSupplyCap_24554":{"entryPoint":4871,"id":24554,"parameterSlots":2,"returnSlots":0},"@setUnbackedMintCap_11576":{"entryPoint":14905,"id":11576,"parameterSlots":2,"returnSlots":0},"@setUnbackedMintCap_24885":{"entryPoint":1237,"id":24885,"parameterSlots":2,"returnSlots":0},"@updateAToken_23831":{"entryPoint":10264,"id":23831,"parameterSlots":1,"returnSlots":0},"@updateBridgeProtocolFee_25010":{"entryPoint":3163,"id":25010,"parameterSlots":1,"returnSlots":0},"@updateFlashloanPremiumToProtocol_25088":{"entryPoint":2036,"id":25088,"parameterSlots":1,"returnSlots":0},"@updateFlashloanPremiumTotal_25049":{"entryPoint":7270,"id":25049,"parameterSlots":1,"returnSlots":0},"@updateStableDebtToken_23849":{"entryPoint":5965,"id":23849,"parameterSlots":1,"returnSlots":0},"@updateVariableDebtToken_23867":{"entryPoint":9196,"id":23867,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":19099,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":21306,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_ReserveConfigurationMap_fromMemory":{"entryPoint":21169,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":19367,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":22751,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":19159,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_bool":{"entryPoint":19321,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":19115,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256t_uint256t_uint256":{"entryPoint":19484,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_uint8":{"entryPoint":19841,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr_fromMemory":{"entryPoint":22060,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_array$_t_struct$_InitReserveInput_$21252_calldata_ptr_$dyn_calldata_ptr":{"entryPoint":18945,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool":{"entryPoint":19455,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":23079,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_EModeCategory_$21333_memory_ptr_fromMemory":{"entryPoint":22780,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_fromMemory":{"entryPoint":21235,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory":{"entryPoint":21317,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_UpdateATokenInput_$21267_calldata_ptr":{"entryPoint":19543,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr":{"entryPoint":19396,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint128":{"entryPoint":19246,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint128_fromMemory":{"entryPoint":21745,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":19282,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":21774,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint40_fromMemory":{"entryPoint":23108,"id":null,"parameterSlots":2,"returnSlots":12},"abi_decode_tuple_t_uint8t_uint16t_uint16t_uint16t_addresst_string_calldata_ptr":{"entryPoint":19635,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_uint128_fromMemory":{"entryPoint":21263,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint16_fromMemory":{"entryPoint":21295,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint40_fromMemory":{"entryPoint":21274,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint8":{"entryPoint":19602,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_string":{"entryPoint":21652,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string_calldata":{"entryPoint":20110,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_struct$_ReserveConfigurationMap_$21318_memory_ptr__to_t_address_t_struct$_ReserveConfigurationMap_$21318_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool_t_bool__to_t_bool_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$4860_t_struct$_InitReserveInput_$21252_calldata_ptr__to_t_address_t_struct$_InitReserveInput_$21252_memory_ptr__fromStack_library_reversed":{"entryPoint":20183,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$4860_t_struct$_UpdateATokenInput_$21267_calldata_ptr__to_t_address_t_struct$_UpdateATokenInput_$21267_memory_ptr__fromStack_library_reversed":{"entryPoint":22238,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$4860_t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr__to_t_address_t_struct$_UpdateDebtTokenInput_$21280_memory_ptr__fromStack_library_reversed":{"entryPoint":21799,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":21726,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint128_t_uint128__to_t_uint128_t_uint128__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint16_t_uint16_t_uint16_t_address_t_string_calldata_ptr__to_t_uint256_t_uint256_t_uint256_t_address_t_string_memory_ptr__fromStack_reversed":{"entryPoint":22675,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8_t_struct$_EModeCategory_$21333_memory_ptr__to_t_uint8_t_struct$_EModeCategory_$21333_memory_ptr__fromStack_reversed":{"entryPoint":22557,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint8_t_uint8__to_t_uint8_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_uint8":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"access_calldata_tail_t_struct$_InitReserveInput_$21252_calldata_ptr":{"entryPoint":19941,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":21090,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_3396":{"entryPoint":21013,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_3398":{"entryPoint":21055,"id":null,"parameterSlots":0,"returnSlots":1},"calldata_access_string_calldata":{"entryPoint":20003,"id":null,"parameterSlots":2,"returnSlots":2},"copy_memory_to_memory":{"entryPoint":21608,"id":null,"parameterSlots":3,"returnSlots":0},"increment_t_uint256":{"entryPoint":20870,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x32":{"entryPoint":19894,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":20966,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":19062,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_bool":{"entryPoint":19307,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_uint128":{"entryPoint":19216,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_uint16":{"entryPoint":19619,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:29837:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"156:510:201","statements":[{"body":{"nodeType":"YulBlock","src":"202:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"211:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"214:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"204:6:201"},"nodeType":"YulFunctionCall","src":"204:12:201"},"nodeType":"YulExpressionStatement","src":"204:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"177:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"186:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"173:3:201"},"nodeType":"YulFunctionCall","src":"173:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"198:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"169:3:201"},"nodeType":"YulFunctionCall","src":"169:32:201"},"nodeType":"YulIf","src":"166:52:201"},{"nodeType":"YulVariableDeclaration","src":"227:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"254:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"241:12:201"},"nodeType":"YulFunctionCall","src":"241:23:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"231:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"273:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"283:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"277:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"328:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"337:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"340:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"330:6:201"},"nodeType":"YulFunctionCall","src":"330:12:201"},"nodeType":"YulExpressionStatement","src":"330:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"316:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"324:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"313:2:201"},"nodeType":"YulFunctionCall","src":"313:14:201"},"nodeType":"YulIf","src":"310:34:201"},{"nodeType":"YulVariableDeclaration","src":"353:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"367:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"378:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"363:3:201"},"nodeType":"YulFunctionCall","src":"363:22:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"357:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"433:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"442:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"445:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"435:6:201"},"nodeType":"YulFunctionCall","src":"435:12:201"},"nodeType":"YulExpressionStatement","src":"435:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"412:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"416:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"408:3:201"},"nodeType":"YulFunctionCall","src":"408:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"423:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"404:3:201"},"nodeType":"YulFunctionCall","src":"404:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"397:6:201"},"nodeType":"YulFunctionCall","src":"397:35:201"},"nodeType":"YulIf","src":"394:55:201"},{"nodeType":"YulVariableDeclaration","src":"458:30:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"485:2:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"472:12:201"},"nodeType":"YulFunctionCall","src":"472:16:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"462:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"515:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"524:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"527:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"517:6:201"},"nodeType":"YulFunctionCall","src":"517:12:201"},"nodeType":"YulExpressionStatement","src":"517:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"503:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"511:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"500:2:201"},"nodeType":"YulFunctionCall","src":"500:14:201"},"nodeType":"YulIf","src":"497:34:201"},{"body":{"nodeType":"YulBlock","src":"589:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"598:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"601:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"591:6:201"},"nodeType":"YulFunctionCall","src":"591:12:201"},"nodeType":"YulExpressionStatement","src":"591:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"554:2:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"562:1:201","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"565:6:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"558:3:201"},"nodeType":"YulFunctionCall","src":"558:14:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"550:3:201"},"nodeType":"YulFunctionCall","src":"550:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"575:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"546:3:201"},"nodeType":"YulFunctionCall","src":"546:32:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"580:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"543:2:201"},"nodeType":"YulFunctionCall","src":"543:45:201"},"nodeType":"YulIf","src":"540:65:201"},{"nodeType":"YulAssignment","src":"614:21:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"628:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"632:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"624:3:201"},"nodeType":"YulFunctionCall","src":"624:11:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"614:6:201"}]},{"nodeType":"YulAssignment","src":"644:16:201","value":{"name":"length","nodeType":"YulIdentifier","src":"654:6:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"644:6:201"}]}]},"name":"abi_decode_tuple_t_array$_t_struct$_InitReserveInput_$21252_calldata_ptr_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"114:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"125:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"137:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"145:6:201","type":""}],"src":"14:652:201"},{"body":{"nodeType":"YulBlock","src":"716:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"803:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"812:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"815:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"805:6:201"},"nodeType":"YulFunctionCall","src":"805:12:201"},"nodeType":"YulExpressionStatement","src":"805:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"739:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"750:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"757:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"746:3:201"},"nodeType":"YulFunctionCall","src":"746:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"736:2:201"},"nodeType":"YulFunctionCall","src":"736:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"729:6:201"},"nodeType":"YulFunctionCall","src":"729:73:201"},"nodeType":"YulIf","src":"726:93:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"705:5:201","type":""}],"src":"671:154:201"},{"body":{"nodeType":"YulBlock","src":"879:85:201","statements":[{"nodeType":"YulAssignment","src":"889:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"911:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"898:12:201"},"nodeType":"YulFunctionCall","src":"898:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"889:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"952:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"927:24:201"},"nodeType":"YulFunctionCall","src":"927:31:201"},"nodeType":"YulExpressionStatement","src":"927:31:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"858:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"869:5:201","type":""}],"src":"830:134:201"},{"body":{"nodeType":"YulBlock","src":"1056:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"1102:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1111:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1114:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1104:6:201"},"nodeType":"YulFunctionCall","src":"1104:12:201"},"nodeType":"YulExpressionStatement","src":"1104:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1077:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1086:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1073:3:201"},"nodeType":"YulFunctionCall","src":"1073:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1098:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1069:3:201"},"nodeType":"YulFunctionCall","src":"1069:32:201"},"nodeType":"YulIf","src":"1066:52:201"},{"nodeType":"YulVariableDeclaration","src":"1127:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1153:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1140:12:201"},"nodeType":"YulFunctionCall","src":"1140:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1131:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1197:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1172:24:201"},"nodeType":"YulFunctionCall","src":"1172:31:201"},"nodeType":"YulExpressionStatement","src":"1172:31:201"},{"nodeType":"YulAssignment","src":"1212:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1222:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1212:6:201"}]},{"nodeType":"YulAssignment","src":"1236:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1263:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1274:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1259:3:201"},"nodeType":"YulFunctionCall","src":"1259:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1246:12:201"},"nodeType":"YulFunctionCall","src":"1246:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1236:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1014:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1025:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1037:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1045:6:201","type":""}],"src":"969:315:201"},{"body":{"nodeType":"YulBlock","src":"1376:301:201","statements":[{"body":{"nodeType":"YulBlock","src":"1422:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1431:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1434:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1424:6:201"},"nodeType":"YulFunctionCall","src":"1424:12:201"},"nodeType":"YulExpressionStatement","src":"1424:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1397:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1406:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1393:3:201"},"nodeType":"YulFunctionCall","src":"1393:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1418:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1389:3:201"},"nodeType":"YulFunctionCall","src":"1389:32:201"},"nodeType":"YulIf","src":"1386:52:201"},{"nodeType":"YulVariableDeclaration","src":"1447:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1473:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1460:12:201"},"nodeType":"YulFunctionCall","src":"1460:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1451:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1517:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1492:24:201"},"nodeType":"YulFunctionCall","src":"1492:31:201"},"nodeType":"YulExpressionStatement","src":"1492:31:201"},{"nodeType":"YulAssignment","src":"1532:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1542:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1532:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1556:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1588:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1599:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1584:3:201"},"nodeType":"YulFunctionCall","src":"1584:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1571:12:201"},"nodeType":"YulFunctionCall","src":"1571:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"1560:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1637:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1612:24:201"},"nodeType":"YulFunctionCall","src":"1612:33:201"},"nodeType":"YulExpressionStatement","src":"1612:33:201"},{"nodeType":"YulAssignment","src":"1654:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"1664:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1654:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1334:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1345:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1357:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1365:6:201","type":""}],"src":"1289:388:201"},{"body":{"nodeType":"YulBlock","src":"1727:101:201","statements":[{"body":{"nodeType":"YulBlock","src":"1806:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1815:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1818:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1808:6:201"},"nodeType":"YulFunctionCall","src":"1808:12:201"},"nodeType":"YulExpressionStatement","src":"1808:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1750:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1761:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1768:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1757:3:201"},"nodeType":"YulFunctionCall","src":"1757:46:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1747:2:201"},"nodeType":"YulFunctionCall","src":"1747:57:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1740:6:201"},"nodeType":"YulFunctionCall","src":"1740:65:201"},"nodeType":"YulIf","src":"1737:85:201"}]},"name":"validator_revert_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1716:5:201","type":""}],"src":"1682:146:201"},{"body":{"nodeType":"YulBlock","src":"1903:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"1949:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1958:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1961:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1951:6:201"},"nodeType":"YulFunctionCall","src":"1951:12:201"},"nodeType":"YulExpressionStatement","src":"1951:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1924:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1933:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1920:3:201"},"nodeType":"YulFunctionCall","src":"1920:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1945:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1916:3:201"},"nodeType":"YulFunctionCall","src":"1916:32:201"},"nodeType":"YulIf","src":"1913:52:201"},{"nodeType":"YulVariableDeclaration","src":"1974:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2000:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1987:12:201"},"nodeType":"YulFunctionCall","src":"1987:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1978:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2044:5:201"}],"functionName":{"name":"validator_revert_uint128","nodeType":"YulIdentifier","src":"2019:24:201"},"nodeType":"YulFunctionCall","src":"2019:31:201"},"nodeType":"YulExpressionStatement","src":"2019:31:201"},{"nodeType":"YulAssignment","src":"2059:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"2069:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2059:6:201"}]}]},"name":"abi_decode_tuple_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1869:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1880:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1892:6:201","type":""}],"src":"1833:247:201"},{"body":{"nodeType":"YulBlock","src":"2155:110:201","statements":[{"body":{"nodeType":"YulBlock","src":"2201:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2210:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2213:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2203:6:201"},"nodeType":"YulFunctionCall","src":"2203:12:201"},"nodeType":"YulExpressionStatement","src":"2203:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2176:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2185:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2172:3:201"},"nodeType":"YulFunctionCall","src":"2172:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2197:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2168:3:201"},"nodeType":"YulFunctionCall","src":"2168:32:201"},"nodeType":"YulIf","src":"2165:52:201"},{"nodeType":"YulAssignment","src":"2226:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2249:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2236:12:201"},"nodeType":"YulFunctionCall","src":"2236:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2226:6:201"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2121:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2132:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2144:6:201","type":""}],"src":"2085:180:201"},{"body":{"nodeType":"YulBlock","src":"2312:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"2366:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2375:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2378:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2368:6:201"},"nodeType":"YulFunctionCall","src":"2368:12:201"},"nodeType":"YulExpressionStatement","src":"2368:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2335:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2356:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2349:6:201"},"nodeType":"YulFunctionCall","src":"2349:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2342:6:201"},"nodeType":"YulFunctionCall","src":"2342:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2332:2:201"},"nodeType":"YulFunctionCall","src":"2332:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2325:6:201"},"nodeType":"YulFunctionCall","src":"2325:40:201"},"nodeType":"YulIf","src":"2322:60:201"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"2301:5:201","type":""}],"src":"2270:118:201"},{"body":{"nodeType":"YulBlock","src":"2477:298:201","statements":[{"body":{"nodeType":"YulBlock","src":"2523:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2532:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2535:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2525:6:201"},"nodeType":"YulFunctionCall","src":"2525:12:201"},"nodeType":"YulExpressionStatement","src":"2525:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2498:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2507:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2494:3:201"},"nodeType":"YulFunctionCall","src":"2494:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2519:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2490:3:201"},"nodeType":"YulFunctionCall","src":"2490:32:201"},"nodeType":"YulIf","src":"2487:52:201"},{"nodeType":"YulVariableDeclaration","src":"2548:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2574:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2561:12:201"},"nodeType":"YulFunctionCall","src":"2561:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2552:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2618:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2593:24:201"},"nodeType":"YulFunctionCall","src":"2593:31:201"},"nodeType":"YulExpressionStatement","src":"2593:31:201"},{"nodeType":"YulAssignment","src":"2633:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"2643:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2633:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2657:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2689:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2700:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2685:3:201"},"nodeType":"YulFunctionCall","src":"2685:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2672:12:201"},"nodeType":"YulFunctionCall","src":"2672:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2661:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2735:7:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"2713:21:201"},"nodeType":"YulFunctionCall","src":"2713:30:201"},"nodeType":"YulExpressionStatement","src":"2713:30:201"},{"nodeType":"YulAssignment","src":"2752:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"2762:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2752:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2435:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2446:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2458:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2466:6:201","type":""}],"src":"2393:382:201"},{"body":{"nodeType":"YulBlock","src":"2850:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"2896:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2905:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2908:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2898:6:201"},"nodeType":"YulFunctionCall","src":"2898:12:201"},"nodeType":"YulExpressionStatement","src":"2898:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2871:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2880:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2867:3:201"},"nodeType":"YulFunctionCall","src":"2867:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2892:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2863:3:201"},"nodeType":"YulFunctionCall","src":"2863:32:201"},"nodeType":"YulIf","src":"2860:52:201"},{"nodeType":"YulVariableDeclaration","src":"2921:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2947:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2934:12:201"},"nodeType":"YulFunctionCall","src":"2934:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2925:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2991:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2966:24:201"},"nodeType":"YulFunctionCall","src":"2966:31:201"},"nodeType":"YulExpressionStatement","src":"2966:31:201"},{"nodeType":"YulAssignment","src":"3006:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3016:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3006:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2816:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2827:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2839:6:201","type":""}],"src":"2780:247:201"},{"body":{"nodeType":"YulBlock","src":"3143:290:201","statements":[{"body":{"nodeType":"YulBlock","src":"3189:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3198:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3201:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3191:6:201"},"nodeType":"YulFunctionCall","src":"3191:12:201"},"nodeType":"YulExpressionStatement","src":"3191:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3164:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3173:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3160:3:201"},"nodeType":"YulFunctionCall","src":"3160:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3185:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3156:3:201"},"nodeType":"YulFunctionCall","src":"3156:32:201"},"nodeType":"YulIf","src":"3153:52:201"},{"nodeType":"YulVariableDeclaration","src":"3214:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3241:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3228:12:201"},"nodeType":"YulFunctionCall","src":"3228:23:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"3218:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3294:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3303:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3306:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3296:6:201"},"nodeType":"YulFunctionCall","src":"3296:12:201"},"nodeType":"YulExpressionStatement","src":"3296:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3266:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3274:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3263:2:201"},"nodeType":"YulFunctionCall","src":"3263:30:201"},"nodeType":"YulIf","src":"3260:50:201"},{"nodeType":"YulVariableDeclaration","src":"3319:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3333:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"3344:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3329:3:201"},"nodeType":"YulFunctionCall","src":"3329:22:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3323:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3390:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3399:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3402:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3392:6:201"},"nodeType":"YulFunctionCall","src":"3392:12:201"},"nodeType":"YulExpressionStatement","src":"3392:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3371:7:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3380:2:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3367:3:201"},"nodeType":"YulFunctionCall","src":"3367:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"3385:3:201","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3363:3:201"},"nodeType":"YulFunctionCall","src":"3363:26:201"},"nodeType":"YulIf","src":"3360:46:201"},{"nodeType":"YulAssignment","src":"3415:12:201","value":{"name":"_1","nodeType":"YulIdentifier","src":"3425:2:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3415:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3109:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3120:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3132:6:201","type":""}],"src":"3032:401:201"},{"body":{"nodeType":"YulBlock","src":"3505:174:201","statements":[{"body":{"nodeType":"YulBlock","src":"3551:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3560:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3563:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3553:6:201"},"nodeType":"YulFunctionCall","src":"3553:12:201"},"nodeType":"YulExpressionStatement","src":"3553:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3526:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3535:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3522:3:201"},"nodeType":"YulFunctionCall","src":"3522:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3547:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3518:3:201"},"nodeType":"YulFunctionCall","src":"3518:32:201"},"nodeType":"YulIf","src":"3515:52:201"},{"nodeType":"YulVariableDeclaration","src":"3576:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3602:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3589:12:201"},"nodeType":"YulFunctionCall","src":"3589:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3580:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3643:5:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"3621:21:201"},"nodeType":"YulFunctionCall","src":"3621:28:201"},"nodeType":"YulExpressionStatement","src":"3621:28:201"},{"nodeType":"YulAssignment","src":"3658:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3668:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3658:6:201"}]}]},"name":"abi_decode_tuple_t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3471:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3482:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3494:6:201","type":""}],"src":"3438:241:201"},{"body":{"nodeType":"YulBlock","src":"3785:76:201","statements":[{"nodeType":"YulAssignment","src":"3795:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3807:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3818:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3803:3:201"},"nodeType":"YulFunctionCall","src":"3803:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3795:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3837:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"3848:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3830:6:201"},"nodeType":"YulFunctionCall","src":"3830:25:201"},"nodeType":"YulExpressionStatement","src":"3830:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3754:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3765:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3776:4:201","type":""}],"src":"3684:177:201"},{"body":{"nodeType":"YulBlock","src":"3987:331:201","statements":[{"body":{"nodeType":"YulBlock","src":"4034:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4043:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4046:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4036:6:201"},"nodeType":"YulFunctionCall","src":"4036:12:201"},"nodeType":"YulExpressionStatement","src":"4036:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4008:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4017:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4004:3:201"},"nodeType":"YulFunctionCall","src":"4004:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4029:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4000:3:201"},"nodeType":"YulFunctionCall","src":"4000:33:201"},"nodeType":"YulIf","src":"3997:53:201"},{"nodeType":"YulVariableDeclaration","src":"4059:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4085:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4072:12:201"},"nodeType":"YulFunctionCall","src":"4072:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4063:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4129:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4104:24:201"},"nodeType":"YulFunctionCall","src":"4104:31:201"},"nodeType":"YulExpressionStatement","src":"4104:31:201"},{"nodeType":"YulAssignment","src":"4144:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"4154:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4144:6:201"}]},{"nodeType":"YulAssignment","src":"4168:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4195:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4206:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4191:3:201"},"nodeType":"YulFunctionCall","src":"4191:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4178:12:201"},"nodeType":"YulFunctionCall","src":"4178:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4168:6:201"}]},{"nodeType":"YulAssignment","src":"4219:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4246:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4257:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4242:3:201"},"nodeType":"YulFunctionCall","src":"4242:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4229:12:201"},"nodeType":"YulFunctionCall","src":"4229:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4219:6:201"}]},{"nodeType":"YulAssignment","src":"4270:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4297:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4308:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4293:3:201"},"nodeType":"YulFunctionCall","src":"4293:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4280:12:201"},"nodeType":"YulFunctionCall","src":"4280:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"4270:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3929:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3940:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3952:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3960:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3968:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3976:6:201","type":""}],"src":"3866:452:201"},{"body":{"nodeType":"YulBlock","src":"4431:290:201","statements":[{"body":{"nodeType":"YulBlock","src":"4477:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4486:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4489:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4479:6:201"},"nodeType":"YulFunctionCall","src":"4479:12:201"},"nodeType":"YulExpressionStatement","src":"4479:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4452:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4461:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4448:3:201"},"nodeType":"YulFunctionCall","src":"4448:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4473:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4444:3:201"},"nodeType":"YulFunctionCall","src":"4444:32:201"},"nodeType":"YulIf","src":"4441:52:201"},{"nodeType":"YulVariableDeclaration","src":"4502:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4529:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4516:12:201"},"nodeType":"YulFunctionCall","src":"4516:23:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"4506:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4582:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4591:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4594:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4584:6:201"},"nodeType":"YulFunctionCall","src":"4584:12:201"},"nodeType":"YulExpressionStatement","src":"4584:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4554:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4562:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4551:2:201"},"nodeType":"YulFunctionCall","src":"4551:30:201"},"nodeType":"YulIf","src":"4548:50:201"},{"nodeType":"YulVariableDeclaration","src":"4607:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4621:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"4632:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4617:3:201"},"nodeType":"YulFunctionCall","src":"4617:22:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4611:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4678:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4687:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4690:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4680:6:201"},"nodeType":"YulFunctionCall","src":"4680:12:201"},"nodeType":"YulExpressionStatement","src":"4680:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4659:7:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4668:2:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4655:3:201"},"nodeType":"YulFunctionCall","src":"4655:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"4673:3:201","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4651:3:201"},"nodeType":"YulFunctionCall","src":"4651:26:201"},"nodeType":"YulIf","src":"4648:46:201"},{"nodeType":"YulAssignment","src":"4703:12:201","value":{"name":"_1","nodeType":"YulIdentifier","src":"4713:2:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4703:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_UpdateATokenInput_$21267_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4397:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4408:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4420:6:201","type":""}],"src":"4323:398:201"},{"body":{"nodeType":"YulBlock","src":"4773:109:201","statements":[{"nodeType":"YulAssignment","src":"4783:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4805:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4792:12:201"},"nodeType":"YulFunctionCall","src":"4792:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"4783:5:201"}]},{"body":{"nodeType":"YulBlock","src":"4860:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4869:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4872:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4862:6:201"},"nodeType":"YulFunctionCall","src":"4862:12:201"},"nodeType":"YulExpressionStatement","src":"4862:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4834:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4845:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"4852:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4841:3:201"},"nodeType":"YulFunctionCall","src":"4841:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4831:2:201"},"nodeType":"YulFunctionCall","src":"4831:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4824:6:201"},"nodeType":"YulFunctionCall","src":"4824:35:201"},"nodeType":"YulIf","src":"4821:55:201"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"4752:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"4763:5:201","type":""}],"src":"4726:156:201"},{"body":{"nodeType":"YulBlock","src":"4931:73:201","statements":[{"body":{"nodeType":"YulBlock","src":"4982:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4991:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4994:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4984:6:201"},"nodeType":"YulFunctionCall","src":"4984:12:201"},"nodeType":"YulExpressionStatement","src":"4984:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4954:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4965:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"4972:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4961:3:201"},"nodeType":"YulFunctionCall","src":"4961:18:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4951:2:201"},"nodeType":"YulFunctionCall","src":"4951:29:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4944:6:201"},"nodeType":"YulFunctionCall","src":"4944:37:201"},"nodeType":"YulIf","src":"4941:57:201"}]},"name":"validator_revert_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4920:5:201","type":""}],"src":"4887:117:201"},{"body":{"nodeType":"YulBlock","src":"5179:1047:201","statements":[{"body":{"nodeType":"YulBlock","src":"5226:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5235:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5238:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5228:6:201"},"nodeType":"YulFunctionCall","src":"5228:12:201"},"nodeType":"YulExpressionStatement","src":"5228:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5200:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"5209:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5196:3:201"},"nodeType":"YulFunctionCall","src":"5196:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"5221:3:201","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5192:3:201"},"nodeType":"YulFunctionCall","src":"5192:33:201"},"nodeType":"YulIf","src":"5189:53:201"},{"nodeType":"YulAssignment","src":"5251:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5278:9:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"5261:16:201"},"nodeType":"YulFunctionCall","src":"5261:27:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5251:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"5297:45:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5327:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5338:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5323:3:201"},"nodeType":"YulFunctionCall","src":"5323:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5310:12:201"},"nodeType":"YulFunctionCall","src":"5310:32:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5301:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5375:5:201"}],"functionName":{"name":"validator_revert_uint16","nodeType":"YulIdentifier","src":"5351:23:201"},"nodeType":"YulFunctionCall","src":"5351:30:201"},"nodeType":"YulExpressionStatement","src":"5351:30:201"},{"nodeType":"YulAssignment","src":"5390:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"5400:5:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5390:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"5414:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5446:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5457:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5442:3:201"},"nodeType":"YulFunctionCall","src":"5442:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5429:12:201"},"nodeType":"YulFunctionCall","src":"5429:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"5418:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"5494:7:201"}],"functionName":{"name":"validator_revert_uint16","nodeType":"YulIdentifier","src":"5470:23:201"},"nodeType":"YulFunctionCall","src":"5470:32:201"},"nodeType":"YulExpressionStatement","src":"5470:32:201"},{"nodeType":"YulAssignment","src":"5511:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"5521:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5511:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"5537:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5569:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5580:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5565:3:201"},"nodeType":"YulFunctionCall","src":"5565:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5552:12:201"},"nodeType":"YulFunctionCall","src":"5552:32:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"5541:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"5617:7:201"}],"functionName":{"name":"validator_revert_uint16","nodeType":"YulIdentifier","src":"5593:23:201"},"nodeType":"YulFunctionCall","src":"5593:32:201"},"nodeType":"YulExpressionStatement","src":"5593:32:201"},{"nodeType":"YulAssignment","src":"5634:17:201","value":{"name":"value_2","nodeType":"YulIdentifier","src":"5644:7:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"5634:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"5660:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5692:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5703:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5688:3:201"},"nodeType":"YulFunctionCall","src":"5688:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5675:12:201"},"nodeType":"YulFunctionCall","src":"5675:33:201"},"variables":[{"name":"value_3","nodeType":"YulTypedName","src":"5664:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_3","nodeType":"YulIdentifier","src":"5742:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"5717:24:201"},"nodeType":"YulFunctionCall","src":"5717:33:201"},"nodeType":"YulExpressionStatement","src":"5717:33:201"},{"nodeType":"YulAssignment","src":"5759:17:201","value":{"name":"value_3","nodeType":"YulIdentifier","src":"5769:7:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"5759:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"5785:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5816:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5827:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5812:3:201"},"nodeType":"YulFunctionCall","src":"5812:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5799:12:201"},"nodeType":"YulFunctionCall","src":"5799:33:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"5789:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5841:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5851:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5845:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"5896:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5905:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5908:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5898:6:201"},"nodeType":"YulFunctionCall","src":"5898:12:201"},"nodeType":"YulExpressionStatement","src":"5898:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5884:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5892:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5881:2:201"},"nodeType":"YulFunctionCall","src":"5881:14:201"},"nodeType":"YulIf","src":"5878:34:201"},{"nodeType":"YulVariableDeclaration","src":"5921:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5935:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"5946:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5931:3:201"},"nodeType":"YulFunctionCall","src":"5931:22:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"5925:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"6001:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6010:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6013:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6003:6:201"},"nodeType":"YulFunctionCall","src":"6003:12:201"},"nodeType":"YulExpressionStatement","src":"6003:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"5980:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"5984:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5976:3:201"},"nodeType":"YulFunctionCall","src":"5976:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5991:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5972:3:201"},"nodeType":"YulFunctionCall","src":"5972:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5965:6:201"},"nodeType":"YulFunctionCall","src":"5965:35:201"},"nodeType":"YulIf","src":"5962:55:201"},{"nodeType":"YulVariableDeclaration","src":"6026:30:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6053:2:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6040:12:201"},"nodeType":"YulFunctionCall","src":"6040:16:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"6030:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"6083:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6092:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6095:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6085:6:201"},"nodeType":"YulFunctionCall","src":"6085:12:201"},"nodeType":"YulExpressionStatement","src":"6085:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"6071:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6079:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6068:2:201"},"nodeType":"YulFunctionCall","src":"6068:14:201"},"nodeType":"YulIf","src":"6065:34:201"},{"body":{"nodeType":"YulBlock","src":"6149:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6158:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6161:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6151:6:201"},"nodeType":"YulFunctionCall","src":"6151:12:201"},"nodeType":"YulExpressionStatement","src":"6151:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6122:2:201"},{"name":"length","nodeType":"YulIdentifier","src":"6126:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6118:3:201"},"nodeType":"YulFunctionCall","src":"6118:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"6135:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6114:3:201"},"nodeType":"YulFunctionCall","src":"6114:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"6140:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6111:2:201"},"nodeType":"YulFunctionCall","src":"6111:37:201"},"nodeType":"YulIf","src":"6108:57:201"},{"nodeType":"YulAssignment","src":"6174:21:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"6188:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"6192:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6184:3:201"},"nodeType":"YulFunctionCall","src":"6184:11:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"6174:6:201"}]},{"nodeType":"YulAssignment","src":"6204:16:201","value":{"name":"length","nodeType":"YulIdentifier","src":"6214:6:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"6204:6:201"}]}]},"name":"abi_decode_tuple_t_uint8t_uint16t_uint16t_uint16t_addresst_string_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5097:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5108:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5120:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5128:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5136:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5144:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"5152:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"5160:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"5168:6:201","type":""}],"src":"5009:1217:201"},{"body":{"nodeType":"YulBlock","src":"6332:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"6378:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6387:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6390:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6380:6:201"},"nodeType":"YulFunctionCall","src":"6380:12:201"},"nodeType":"YulExpressionStatement","src":"6380:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6353:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6362:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6349:3:201"},"nodeType":"YulFunctionCall","src":"6349:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"6374:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6345:3:201"},"nodeType":"YulFunctionCall","src":"6345:32:201"},"nodeType":"YulIf","src":"6342:52:201"},{"nodeType":"YulVariableDeclaration","src":"6403:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6429:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6416:12:201"},"nodeType":"YulFunctionCall","src":"6416:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6407:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6473:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6448:24:201"},"nodeType":"YulFunctionCall","src":"6448:31:201"},"nodeType":"YulExpressionStatement","src":"6448:31:201"},{"nodeType":"YulAssignment","src":"6488:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"6498:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6488:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6298:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6309:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6321:6:201","type":""}],"src":"6231:278:201"},{"body":{"nodeType":"YulBlock","src":"6599:232:201","statements":[{"body":{"nodeType":"YulBlock","src":"6645:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6654:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6657:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6647:6:201"},"nodeType":"YulFunctionCall","src":"6647:12:201"},"nodeType":"YulExpressionStatement","src":"6647:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6620:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6629:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6616:3:201"},"nodeType":"YulFunctionCall","src":"6616:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"6641:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6612:3:201"},"nodeType":"YulFunctionCall","src":"6612:32:201"},"nodeType":"YulIf","src":"6609:52:201"},{"nodeType":"YulVariableDeclaration","src":"6670:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6696:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6683:12:201"},"nodeType":"YulFunctionCall","src":"6683:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6674:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6740:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6715:24:201"},"nodeType":"YulFunctionCall","src":"6715:31:201"},"nodeType":"YulExpressionStatement","src":"6715:31:201"},{"nodeType":"YulAssignment","src":"6755:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"6765:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6755:6:201"}]},{"nodeType":"YulAssignment","src":"6779:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6810:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6821:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6806:3:201"},"nodeType":"YulFunctionCall","src":"6806:18:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"6789:16:201"},"nodeType":"YulFunctionCall","src":"6789:36:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6779:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6557:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6568:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6580:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6588:6:201","type":""}],"src":"6514:317:201"},{"body":{"nodeType":"YulBlock","src":"6868:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6885:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6888:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6878:6:201"},"nodeType":"YulFunctionCall","src":"6878:88:201"},"nodeType":"YulExpressionStatement","src":"6878:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6982:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6985:4:201","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6975:6:201"},"nodeType":"YulFunctionCall","src":"6975:15:201"},"nodeType":"YulExpressionStatement","src":"6975:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7006:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7009:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6999:6:201"},"nodeType":"YulFunctionCall","src":"6999:15:201"},"nodeType":"YulExpressionStatement","src":"6999:15:201"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"6836:184:201"},{"body":{"nodeType":"YulBlock","src":"7137:281:201","statements":[{"nodeType":"YulVariableDeclaration","src":"7147:51:201","value":{"arguments":[{"name":"ptr_to_tail","nodeType":"YulIdentifier","src":"7186:11:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7173:12:201"},"nodeType":"YulFunctionCall","src":"7173:25:201"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"7151:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"7346:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7355:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7358:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7348:6:201"},"nodeType":"YulFunctionCall","src":"7348:12:201"},"nodeType":"YulExpressionStatement","src":"7348:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"7221:18:201"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"7249:12:201"},"nodeType":"YulFunctionCall","src":"7249:14:201"},{"name":"base_ref","nodeType":"YulIdentifier","src":"7265:8:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7245:3:201"},"nodeType":"YulFunctionCall","src":"7245:29:201"},{"kind":"number","nodeType":"YulLiteral","src":"7276:66:201","type":"","value":"0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe21"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7241:3:201"},"nodeType":"YulFunctionCall","src":"7241:102:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7217:3:201"},"nodeType":"YulFunctionCall","src":"7217:127:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7210:6:201"},"nodeType":"YulFunctionCall","src":"7210:135:201"},"nodeType":"YulIf","src":"7207:155:201"},{"nodeType":"YulAssignment","src":"7371:41:201","value":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"7383:8:201"},{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"7393:18:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7379:3:201"},"nodeType":"YulFunctionCall","src":"7379:33:201"},"variableNames":[{"name":"addr","nodeType":"YulIdentifier","src":"7371:4:201"}]}]},"name":"access_calldata_tail_t_struct$_InitReserveInput_$21252_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"7102:8:201","type":""},{"name":"ptr_to_tail","nodeType":"YulTypedName","src":"7112:11:201","type":""}],"returnVariables":[{"name":"addr","nodeType":"YulTypedName","src":"7128:4:201","type":""}],"src":"7025:393:201"},{"body":{"nodeType":"YulBlock","src":"7467:83:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7484:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7493:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"7500:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7489:3:201"},"nodeType":"YulFunctionCall","src":"7489:54:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7477:6:201"},"nodeType":"YulFunctionCall","src":"7477:67:201"},"nodeType":"YulExpressionStatement","src":"7477:67:201"}]},"name":"abi_encode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"7451:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"7458:3:201","type":""}],"src":"7423:127:201"},{"body":{"nodeType":"YulBlock","src":"7597:33:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7606:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7615:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"7622:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7611:3:201"},"nodeType":"YulFunctionCall","src":"7611:16:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7599:6:201"},"nodeType":"YulFunctionCall","src":"7599:29:201"},"nodeType":"YulExpressionStatement","src":"7599:29:201"}]},"name":"abi_encode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"7581:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"7588:3:201","type":""}],"src":"7555:75:201"},{"body":{"nodeType":"YulBlock","src":"7712:486:201","statements":[{"nodeType":"YulVariableDeclaration","src":"7722:43:201","value":{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"7761:3:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7748:12:201"},"nodeType":"YulFunctionCall","src":"7748:17:201"},"variables":[{"name":"rel_offset_of_tail","nodeType":"YulTypedName","src":"7726:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"7913:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7922:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7925:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7915:6:201"},"nodeType":"YulFunctionCall","src":"7915:12:201"},"nodeType":"YulExpressionStatement","src":"7915:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"7788:18:201"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"7816:12:201"},"nodeType":"YulFunctionCall","src":"7816:14:201"},{"name":"base_ref","nodeType":"YulIdentifier","src":"7832:8:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7812:3:201"},"nodeType":"YulFunctionCall","src":"7812:29:201"},{"kind":"number","nodeType":"YulLiteral","src":"7843:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7808:3:201"},"nodeType":"YulFunctionCall","src":"7808:102:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7784:3:201"},"nodeType":"YulFunctionCall","src":"7784:127:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7777:6:201"},"nodeType":"YulFunctionCall","src":"7777:135:201"},"nodeType":"YulIf","src":"7774:155:201"},{"nodeType":"YulVariableDeclaration","src":"7938:48:201","value":{"arguments":[{"name":"rel_offset_of_tail","nodeType":"YulIdentifier","src":"7957:18:201"},{"name":"base_ref","nodeType":"YulIdentifier","src":"7977:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7953:3:201"},"nodeType":"YulFunctionCall","src":"7953:33:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7942:7:201","type":""}]},{"nodeType":"YulAssignment","src":"7995:31:201","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"8018:7:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8005:12:201"},"nodeType":"YulFunctionCall","src":"8005:21:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"7995:6:201"}]},{"nodeType":"YulAssignment","src":"8035:27:201","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"8048:7:201"},{"kind":"number","nodeType":"YulLiteral","src":"8057:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8044:3:201"},"nodeType":"YulFunctionCall","src":"8044:18:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"8035:5:201"}]},{"body":{"nodeType":"YulBlock","src":"8105:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8114:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8117:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8107:6:201"},"nodeType":"YulFunctionCall","src":"8107:12:201"},"nodeType":"YulExpressionStatement","src":"8107:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8077:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8085:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8074:2:201"},"nodeType":"YulFunctionCall","src":"8074:30:201"},"nodeType":"YulIf","src":"8071:50:201"},{"body":{"nodeType":"YulBlock","src":"8176:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8185:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8188:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8178:6:201"},"nodeType":"YulFunctionCall","src":"8178:12:201"},"nodeType":"YulExpressionStatement","src":"8178:12:201"}]},"condition":{"arguments":[{"name":"base_ref","nodeType":"YulIdentifier","src":"8137:8:201"},{"arguments":[{"arguments":[],"functionName":{"name":"calldatasize","nodeType":"YulIdentifier","src":"8151:12:201"},"nodeType":"YulFunctionCall","src":"8151:14:201"},{"name":"length","nodeType":"YulIdentifier","src":"8167:6:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8147:3:201"},"nodeType":"YulFunctionCall","src":"8147:27:201"}],"functionName":{"name":"sgt","nodeType":"YulIdentifier","src":"8133:3:201"},"nodeType":"YulFunctionCall","src":"8133:42:201"},"nodeType":"YulIf","src":"8130:62:201"}]},"name":"calldata_access_string_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"base_ref","nodeType":"YulTypedName","src":"7676:8:201","type":""},{"name":"ptr","nodeType":"YulTypedName","src":"7686:3:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"7694:5:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"7701:6:201","type":""}],"src":"7635:563:201"},{"body":{"nodeType":"YulBlock","src":"8270:259:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8287:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"8292:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8280:6:201"},"nodeType":"YulFunctionCall","src":"8280:19:201"},"nodeType":"YulExpressionStatement","src":"8280:19:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8325:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"8330:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8321:3:201"},"nodeType":"YulFunctionCall","src":"8321:14:201"},{"name":"start","nodeType":"YulIdentifier","src":"8337:5:201"},{"name":"length","nodeType":"YulIdentifier","src":"8344:6:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"8308:12:201"},"nodeType":"YulFunctionCall","src":"8308:43:201"},"nodeType":"YulExpressionStatement","src":"8308:43:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8375:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"8380:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8371:3:201"},"nodeType":"YulFunctionCall","src":"8371:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"8389:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8367:3:201"},"nodeType":"YulFunctionCall","src":"8367:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"8396:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8360:6:201"},"nodeType":"YulFunctionCall","src":"8360:38:201"},"nodeType":"YulExpressionStatement","src":"8360:38:201"},{"nodeType":"YulAssignment","src":"8407:116:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8422:3:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8435:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8443:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8431:3:201"},"nodeType":"YulFunctionCall","src":"8431:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"8448:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8427:3:201"},"nodeType":"YulFunctionCall","src":"8427:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8418:3:201"},"nodeType":"YulFunctionCall","src":"8418:98:201"},{"kind":"number","nodeType":"YulLiteral","src":"8518:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8414:3:201"},"nodeType":"YulFunctionCall","src":"8414:109:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"8407:3:201"}]}]},"name":"abi_encode_string_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"start","nodeType":"YulTypedName","src":"8239:5:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"8246:6:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"8254:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"8262:3:201","type":""}],"src":"8203:326:201"},{"body":{"nodeType":"YulBlock","src":"8757:3174:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8774:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8789:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8797:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8785:3:201"},"nodeType":"YulFunctionCall","src":"8785:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8767:6:201"},"nodeType":"YulFunctionCall","src":"8767:74:201"},"nodeType":"YulExpressionStatement","src":"8767:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8861:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8872:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8857:3:201"},"nodeType":"YulFunctionCall","src":"8857:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"8877:2:201","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8850:6:201"},"nodeType":"YulFunctionCall","src":"8850:30:201"},"nodeType":"YulExpressionStatement","src":"8850:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"8927:6:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"8908:18:201"},"nodeType":"YulFunctionCall","src":"8908:26:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8940:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8951:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8936:3:201"},"nodeType":"YulFunctionCall","src":"8936:18:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"8889:18:201"},"nodeType":"YulFunctionCall","src":"8889:66:201"},"nodeType":"YulExpressionStatement","src":"8889:66:201"},{"nodeType":"YulVariableDeclaration","src":"8964:55:201","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9007:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"9015:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9003:3:201"},"nodeType":"YulFunctionCall","src":"9003:15:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"8984:18:201"},"nodeType":"YulFunctionCall","src":"8984:35:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"8968:12:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"9047:12:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9065:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9076:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9061:3:201"},"nodeType":"YulFunctionCall","src":"9061:18:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"9028:18:201"},"nodeType":"YulFunctionCall","src":"9028:52:201"},"nodeType":"YulExpressionStatement","src":"9028:52:201"},{"nodeType":"YulVariableDeclaration","src":"9089:57:201","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9134:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"9142:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9130:3:201"},"nodeType":"YulFunctionCall","src":"9130:15:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"9111:18:201"},"nodeType":"YulFunctionCall","src":"9111:35:201"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"9093:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"9174:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9194:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9205:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9190:3:201"},"nodeType":"YulFunctionCall","src":"9190:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"9155:18:201"},"nodeType":"YulFunctionCall","src":"9155:55:201"},"nodeType":"YulExpressionStatement","src":"9155:55:201"},{"nodeType":"YulVariableDeclaration","src":"9219:55:201","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9262:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"9270:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9258:3:201"},"nodeType":"YulFunctionCall","src":"9258:15:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"9241:16:201"},"nodeType":"YulFunctionCall","src":"9241:33:201"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"9223:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"9300:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9320:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9331:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9316:3:201"},"nodeType":"YulFunctionCall","src":"9316:19:201"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"9283:16:201"},"nodeType":"YulFunctionCall","src":"9283:53:201"},"nodeType":"YulExpressionStatement","src":"9283:53:201"},{"nodeType":"YulVariableDeclaration","src":"9345:58:201","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9390:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"9398:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9386:3:201"},"nodeType":"YulFunctionCall","src":"9386:16:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"9367:18:201"},"nodeType":"YulFunctionCall","src":"9367:36:201"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"9349:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"9431:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9451:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9462:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9447:3:201"},"nodeType":"YulFunctionCall","src":"9447:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"9412:18:201"},"nodeType":"YulFunctionCall","src":"9412:55:201"},"nodeType":"YulExpressionStatement","src":"9412:55:201"},{"nodeType":"YulVariableDeclaration","src":"9476:58:201","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9521:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"9529:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9517:3:201"},"nodeType":"YulFunctionCall","src":"9517:16:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"9498:18:201"},"nodeType":"YulFunctionCall","src":"9498:36:201"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"9480:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"9562:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9582:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9593:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9578:3:201"},"nodeType":"YulFunctionCall","src":"9578:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"9543:18:201"},"nodeType":"YulFunctionCall","src":"9543:55:201"},"nodeType":"YulExpressionStatement","src":"9543:55:201"},{"nodeType":"YulVariableDeclaration","src":"9607:58:201","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9652:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"9660:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9648:3:201"},"nodeType":"YulFunctionCall","src":"9648:16:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"9629:18:201"},"nodeType":"YulFunctionCall","src":"9629:36:201"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"9611:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9674:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9684:3:201","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9678:2:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"9715:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9735:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9746:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9731:3:201"},"nodeType":"YulFunctionCall","src":"9731:18:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"9696:18:201"},"nodeType":"YulFunctionCall","src":"9696:54:201"},"nodeType":"YulExpressionStatement","src":"9696:54:201"},{"nodeType":"YulVariableDeclaration","src":"9759:58:201","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9804:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"9812:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9800:3:201"},"nodeType":"YulFunctionCall","src":"9800:16:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"9781:18:201"},"nodeType":"YulFunctionCall","src":"9781:36:201"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"9763:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9826:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9836:3:201","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"9830:2:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"9867:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9887:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"9898:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9883:3:201"},"nodeType":"YulFunctionCall","src":"9883:18:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"9848:18:201"},"nodeType":"YulFunctionCall","src":"9848:54:201"},"nodeType":"YulExpressionStatement","src":"9848:54:201"},{"nodeType":"YulVariableDeclaration","src":"9911:92:201","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9979:6:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"9991:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9999:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9987:3:201"},"nodeType":"YulFunctionCall","src":"9987:15:201"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"9947:31:201"},"nodeType":"YulFunctionCall","src":"9947:56:201"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"9915:14:201","type":""},{"name":"memberValue1","nodeType":"YulTypedName","src":"9931:12:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10012:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10022:6:201","type":"","value":"0x01e0"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"10016:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10037:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10047:3:201","type":"","value":"320"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"10041:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10070:9:201"},{"name":"_4","nodeType":"YulIdentifier","src":"10081:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10066:3:201"},"nodeType":"YulFunctionCall","src":"10066:18:201"},{"name":"_3","nodeType":"YulIdentifier","src":"10086:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10059:6:201"},"nodeType":"YulFunctionCall","src":"10059:30:201"},"nodeType":"YulExpressionStatement","src":"10059:30:201"},{"nodeType":"YulVariableDeclaration","src":"10098:91:201","value":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"10139:14:201"},{"name":"memberValue1","nodeType":"YulIdentifier","src":"10155:12:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10173:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10184:3:201","type":"","value":"544"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10169:3:201"},"nodeType":"YulFunctionCall","src":"10169:19:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10112:26:201"},"nodeType":"YulFunctionCall","src":"10112:77:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"10102:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10198:94:201","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10268:6:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10280:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"10288:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10276:3:201"},"nodeType":"YulFunctionCall","src":"10276:15:201"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"10236:31:201"},"nodeType":"YulFunctionCall","src":"10236:56:201"},"variables":[{"name":"memberValue0_8","nodeType":"YulTypedName","src":"10202:14:201","type":""},{"name":"memberValue1_1","nodeType":"YulTypedName","src":"10218:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10301:76:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10311:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"10305:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10386:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10396:3:201","type":"","value":"352"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"10390:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10419:9:201"},{"name":"_6","nodeType":"YulIdentifier","src":"10430:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10415:3:201"},"nodeType":"YulFunctionCall","src":"10415:18:201"},{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"10443:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"10451:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10439:3:201"},"nodeType":"YulFunctionCall","src":"10439:22:201"},{"name":"_5","nodeType":"YulIdentifier","src":"10463:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10435:3:201"},"nodeType":"YulFunctionCall","src":"10435:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10408:6:201"},"nodeType":"YulFunctionCall","src":"10408:59:201"},"nodeType":"YulExpressionStatement","src":"10408:59:201"},{"nodeType":"YulVariableDeclaration","src":"10476:80:201","value":{"arguments":[{"name":"memberValue0_8","nodeType":"YulIdentifier","src":"10517:14:201"},{"name":"memberValue1_1","nodeType":"YulIdentifier","src":"10533:14:201"},{"name":"tail_1","nodeType":"YulIdentifier","src":"10549:6:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10490:26:201"},"nodeType":"YulFunctionCall","src":"10490:66:201"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"10480:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10565:94:201","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10635:6:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10647:6:201"},{"name":"_4","nodeType":"YulIdentifier","src":"10655:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10643:3:201"},"nodeType":"YulFunctionCall","src":"10643:15:201"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"10603:31:201"},"nodeType":"YulFunctionCall","src":"10603:56:201"},"variables":[{"name":"memberValue0_9","nodeType":"YulTypedName","src":"10569:14:201","type":""},{"name":"memberValue1_2","nodeType":"YulTypedName","src":"10585:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10668:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10678:3:201","type":"","value":"384"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"10672:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10701:9:201"},{"name":"_7","nodeType":"YulIdentifier","src":"10712:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10697:3:201"},"nodeType":"YulFunctionCall","src":"10697:18:201"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"10725:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"10733:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10721:3:201"},"nodeType":"YulFunctionCall","src":"10721:22:201"},{"name":"_5","nodeType":"YulIdentifier","src":"10745:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10717:3:201"},"nodeType":"YulFunctionCall","src":"10717:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10690:6:201"},"nodeType":"YulFunctionCall","src":"10690:59:201"},"nodeType":"YulExpressionStatement","src":"10690:59:201"},{"nodeType":"YulVariableDeclaration","src":"10758:80:201","value":{"arguments":[{"name":"memberValue0_9","nodeType":"YulIdentifier","src":"10799:14:201"},{"name":"memberValue1_2","nodeType":"YulIdentifier","src":"10815:14:201"},{"name":"tail_2","nodeType":"YulIdentifier","src":"10831:6:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10772:26:201"},"nodeType":"YulFunctionCall","src":"10772:66:201"},"variables":[{"name":"tail_3","nodeType":"YulTypedName","src":"10762:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10847:95:201","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10918:6:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10930:6:201"},{"name":"_6","nodeType":"YulIdentifier","src":"10938:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10926:3:201"},"nodeType":"YulFunctionCall","src":"10926:15:201"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"10886:31:201"},"nodeType":"YulFunctionCall","src":"10886:56:201"},"variables":[{"name":"memberValue0_10","nodeType":"YulTypedName","src":"10851:15:201","type":""},{"name":"memberValue1_3","nodeType":"YulTypedName","src":"10868:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10951:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10961:3:201","type":"","value":"416"},"variables":[{"name":"_8","nodeType":"YulTypedName","src":"10955:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10984:9:201"},{"name":"_8","nodeType":"YulIdentifier","src":"10995:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10980:3:201"},"nodeType":"YulFunctionCall","src":"10980:18:201"},{"arguments":[{"arguments":[{"name":"tail_3","nodeType":"YulIdentifier","src":"11008:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"11016:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11004:3:201"},"nodeType":"YulFunctionCall","src":"11004:22:201"},{"name":"_5","nodeType":"YulIdentifier","src":"11028:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11000:3:201"},"nodeType":"YulFunctionCall","src":"11000:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10973:6:201"},"nodeType":"YulFunctionCall","src":"10973:59:201"},"nodeType":"YulExpressionStatement","src":"10973:59:201"},{"nodeType":"YulVariableDeclaration","src":"11041:81:201","value":{"arguments":[{"name":"memberValue0_10","nodeType":"YulIdentifier","src":"11082:15:201"},{"name":"memberValue1_3","nodeType":"YulIdentifier","src":"11099:14:201"},{"name":"tail_3","nodeType":"YulIdentifier","src":"11115:6:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"11055:26:201"},"nodeType":"YulFunctionCall","src":"11055:67:201"},"variables":[{"name":"tail_4","nodeType":"YulTypedName","src":"11045:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11131:95:201","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11202:6:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11214:6:201"},{"name":"_7","nodeType":"YulIdentifier","src":"11222:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11210:3:201"},"nodeType":"YulFunctionCall","src":"11210:15:201"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"11170:31:201"},"nodeType":"YulFunctionCall","src":"11170:56:201"},"variables":[{"name":"memberValue0_11","nodeType":"YulTypedName","src":"11135:15:201","type":""},{"name":"memberValue1_4","nodeType":"YulTypedName","src":"11152:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11235:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11245:3:201","type":"","value":"448"},"variables":[{"name":"_9","nodeType":"YulTypedName","src":"11239:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11268:9:201"},{"name":"_9","nodeType":"YulIdentifier","src":"11279:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11264:3:201"},"nodeType":"YulFunctionCall","src":"11264:18:201"},{"arguments":[{"arguments":[{"name":"tail_4","nodeType":"YulIdentifier","src":"11292:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"11300:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11288:3:201"},"nodeType":"YulFunctionCall","src":"11288:22:201"},{"name":"_5","nodeType":"YulIdentifier","src":"11312:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11284:3:201"},"nodeType":"YulFunctionCall","src":"11284:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11257:6:201"},"nodeType":"YulFunctionCall","src":"11257:59:201"},"nodeType":"YulExpressionStatement","src":"11257:59:201"},{"nodeType":"YulVariableDeclaration","src":"11325:81:201","value":{"arguments":[{"name":"memberValue0_11","nodeType":"YulIdentifier","src":"11366:15:201"},{"name":"memberValue1_4","nodeType":"YulIdentifier","src":"11383:14:201"},{"name":"tail_4","nodeType":"YulIdentifier","src":"11399:6:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"11339:26:201"},"nodeType":"YulFunctionCall","src":"11339:67:201"},"variables":[{"name":"tail_5","nodeType":"YulTypedName","src":"11329:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11415:95:201","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11486:6:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11498:6:201"},{"name":"_8","nodeType":"YulIdentifier","src":"11506:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11494:3:201"},"nodeType":"YulFunctionCall","src":"11494:15:201"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"11454:31:201"},"nodeType":"YulFunctionCall","src":"11454:56:201"},"variables":[{"name":"memberValue0_12","nodeType":"YulTypedName","src":"11419:15:201","type":""},{"name":"memberValue1_5","nodeType":"YulTypedName","src":"11436:14:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11530:9:201"},{"name":"_3","nodeType":"YulIdentifier","src":"11541:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11526:3:201"},"nodeType":"YulFunctionCall","src":"11526:18:201"},{"arguments":[{"arguments":[{"name":"tail_5","nodeType":"YulIdentifier","src":"11554:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"11562:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11550:3:201"},"nodeType":"YulFunctionCall","src":"11550:22:201"},{"name":"_5","nodeType":"YulIdentifier","src":"11574:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11546:3:201"},"nodeType":"YulFunctionCall","src":"11546:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11519:6:201"},"nodeType":"YulFunctionCall","src":"11519:59:201"},"nodeType":"YulExpressionStatement","src":"11519:59:201"},{"nodeType":"YulVariableDeclaration","src":"11587:81:201","value":{"arguments":[{"name":"memberValue0_12","nodeType":"YulIdentifier","src":"11628:15:201"},{"name":"memberValue1_5","nodeType":"YulIdentifier","src":"11645:14:201"},{"name":"tail_5","nodeType":"YulIdentifier","src":"11661:6:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"11601:26:201"},"nodeType":"YulFunctionCall","src":"11601:67:201"},"variables":[{"name":"tail_6","nodeType":"YulTypedName","src":"11591:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11677:95:201","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11748:6:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11760:6:201"},{"name":"_9","nodeType":"YulIdentifier","src":"11768:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11756:3:201"},"nodeType":"YulFunctionCall","src":"11756:15:201"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"11716:31:201"},"nodeType":"YulFunctionCall","src":"11716:56:201"},"variables":[{"name":"memberValue0_13","nodeType":"YulTypedName","src":"11681:15:201","type":""},{"name":"memberValue1_6","nodeType":"YulTypedName","src":"11698:14:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11792:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11803:3:201","type":"","value":"512"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11788:3:201"},"nodeType":"YulFunctionCall","src":"11788:19:201"},{"arguments":[{"arguments":[{"name":"tail_6","nodeType":"YulIdentifier","src":"11817:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"11825:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11813:3:201"},"nodeType":"YulFunctionCall","src":"11813:22:201"},{"name":"_5","nodeType":"YulIdentifier","src":"11837:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11809:3:201"},"nodeType":"YulFunctionCall","src":"11809:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11781:6:201"},"nodeType":"YulFunctionCall","src":"11781:60:201"},"nodeType":"YulExpressionStatement","src":"11781:60:201"},{"nodeType":"YulAssignment","src":"11850:75:201","value":{"arguments":[{"name":"memberValue0_13","nodeType":"YulIdentifier","src":"11885:15:201"},{"name":"memberValue1_6","nodeType":"YulIdentifier","src":"11902:14:201"},{"name":"tail_6","nodeType":"YulIdentifier","src":"11918:6:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"11858:26:201"},"nodeType":"YulFunctionCall","src":"11858:67:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11850:4:201"}]}]},"name":"abi_encode_tuple_t_contract$_IPool_$4860_t_struct$_InitReserveInput_$21252_calldata_ptr__to_t_address_t_struct$_InitReserveInput_$21252_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8718:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8729:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8737:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8748:4:201","type":""}],"src":"8534:3397:201"},{"body":{"nodeType":"YulBlock","src":"11983:302:201","statements":[{"body":{"nodeType":"YulBlock","src":"12082:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12103:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12106:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12096:6:201"},"nodeType":"YulFunctionCall","src":"12096:88:201"},"nodeType":"YulExpressionStatement","src":"12096:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12204:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"12207:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12197:6:201"},"nodeType":"YulFunctionCall","src":"12197:15:201"},"nodeType":"YulExpressionStatement","src":"12197:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12232:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12235:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12225:6:201"},"nodeType":"YulFunctionCall","src":"12225:15:201"},"nodeType":"YulExpressionStatement","src":"12225:15:201"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11999:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"12006:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"11996:2:201"},"nodeType":"YulFunctionCall","src":"11996:77:201"},"nodeType":"YulIf","src":"11993:257:201"},{"nodeType":"YulAssignment","src":"12259:20:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12270:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"12277:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12266:3:201"},"nodeType":"YulFunctionCall","src":"12266:13:201"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"12259:3:201"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"11965:5:201","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"11975:3:201","type":""}],"src":"11936:349:201"},{"body":{"nodeType":"YulBlock","src":"12391:125:201","statements":[{"nodeType":"YulAssignment","src":"12401:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12413:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12424:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12409:3:201"},"nodeType":"YulFunctionCall","src":"12409:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12401:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12443:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12458:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"12466:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12454:3:201"},"nodeType":"YulFunctionCall","src":"12454:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12436:6:201"},"nodeType":"YulFunctionCall","src":"12436:74:201"},"nodeType":"YulExpressionStatement","src":"12436:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12360:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12371:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12382:4:201","type":""}],"src":"12290:226:201"},{"body":{"nodeType":"YulBlock","src":"12553:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12570:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12573:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12563:6:201"},"nodeType":"YulFunctionCall","src":"12563:88:201"},"nodeType":"YulExpressionStatement","src":"12563:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12667:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"12670:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12660:6:201"},"nodeType":"YulFunctionCall","src":"12660:15:201"},"nodeType":"YulExpressionStatement","src":"12660:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12691:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12694:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12684:6:201"},"nodeType":"YulFunctionCall","src":"12684:15:201"},"nodeType":"YulExpressionStatement","src":"12684:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"12521:184:201"},{"body":{"nodeType":"YulBlock","src":"12756:206:201","statements":[{"nodeType":"YulAssignment","src":"12766:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12782:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12776:5:201"},"nodeType":"YulFunctionCall","src":"12776:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"12766:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"12794:34:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"12816:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"12824:3:201","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12812:3:201"},"nodeType":"YulFunctionCall","src":"12812:16:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"12798:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"12903:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"12905:16:201"},"nodeType":"YulFunctionCall","src":"12905:18:201"},"nodeType":"YulExpressionStatement","src":"12905:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"12846:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"12858:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12843:2:201"},"nodeType":"YulFunctionCall","src":"12843:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"12882:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"12894:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"12879:2:201"},"nodeType":"YulFunctionCall","src":"12879:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"12840:2:201"},"nodeType":"YulFunctionCall","src":"12840:62:201"},"nodeType":"YulIf","src":"12837:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12941:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"12945:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12934:6:201"},"nodeType":"YulFunctionCall","src":"12934:22:201"},"nodeType":"YulExpressionStatement","src":"12934:22:201"}]},"name":"allocate_memory_3396","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"12745:6:201","type":""}],"src":"12710:252:201"},{"body":{"nodeType":"YulBlock","src":"13013:207:201","statements":[{"nodeType":"YulAssignment","src":"13023:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13039:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13033:5:201"},"nodeType":"YulFunctionCall","src":"13033:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"13023:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"13051:35:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"13073:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13081:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13069:3:201"},"nodeType":"YulFunctionCall","src":"13069:17:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"13055:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"13161:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"13163:16:201"},"nodeType":"YulFunctionCall","src":"13163:18:201"},"nodeType":"YulExpressionStatement","src":"13163:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"13104:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"13116:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13101:2:201"},"nodeType":"YulFunctionCall","src":"13101:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"13140:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"13152:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"13137:2:201"},"nodeType":"YulFunctionCall","src":"13137:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"13098:2:201"},"nodeType":"YulFunctionCall","src":"13098:62:201"},"nodeType":"YulIf","src":"13095:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13199:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"13203:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13192:6:201"},"nodeType":"YulFunctionCall","src":"13192:22:201"},"nodeType":"YulExpressionStatement","src":"13192:22:201"}]},"name":"allocate_memory_3398","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"13002:6:201","type":""}],"src":"12967:253:201"},{"body":{"nodeType":"YulBlock","src":"13270:289:201","statements":[{"nodeType":"YulAssignment","src":"13280:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13296:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13290:5:201"},"nodeType":"YulFunctionCall","src":"13290:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"13280:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"13308:117:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"13330:6:201"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"13346:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"13352:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13342:3:201"},"nodeType":"YulFunctionCall","src":"13342:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"13357:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13338:3:201"},"nodeType":"YulFunctionCall","src":"13338:86:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13326:3:201"},"nodeType":"YulFunctionCall","src":"13326:99:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"13312:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"13500:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"13502:16:201"},"nodeType":"YulFunctionCall","src":"13502:18:201"},"nodeType":"YulExpressionStatement","src":"13502:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"13443:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"13455:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13440:2:201"},"nodeType":"YulFunctionCall","src":"13440:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"13479:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"13491:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"13476:2:201"},"nodeType":"YulFunctionCall","src":"13476:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"13437:2:201"},"nodeType":"YulFunctionCall","src":"13437:62:201"},"nodeType":"YulIf","src":"13434:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13538:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"13542:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13531:6:201"},"nodeType":"YulFunctionCall","src":"13531:22:201"},"nodeType":"YulExpressionStatement","src":"13531:22:201"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"13250:4:201","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"13259:6:201","type":""}],"src":"13225:334:201"},{"body":{"nodeType":"YulBlock","src":"13655:335:201","statements":[{"body":{"nodeType":"YulBlock","src":"13699:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13708:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13711:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13701:6:201"},"nodeType":"YulFunctionCall","src":"13701:12:201"},"nodeType":"YulExpressionStatement","src":"13701:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"13676:3:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"13681:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13672:3:201"},"nodeType":"YulFunctionCall","src":"13672:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"13693:4:201","type":"","value":"0x20"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13668:3:201"},"nodeType":"YulFunctionCall","src":"13668:30:201"},"nodeType":"YulIf","src":"13665:50:201"},{"nodeType":"YulVariableDeclaration","src":"13724:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13744:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13738:5:201"},"nodeType":"YulFunctionCall","src":"13738:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"13728:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13756:35:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"13778:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13786:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13774:3:201"},"nodeType":"YulFunctionCall","src":"13774:17:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"13760:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"13866:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"13868:16:201"},"nodeType":"YulFunctionCall","src":"13868:18:201"},"nodeType":"YulExpressionStatement","src":"13868:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"13809:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"13821:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13806:2:201"},"nodeType":"YulFunctionCall","src":"13806:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"13845:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"13857:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"13842:2:201"},"nodeType":"YulFunctionCall","src":"13842:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"13803:2:201"},"nodeType":"YulFunctionCall","src":"13803:62:201"},"nodeType":"YulIf","src":"13800:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13904:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"13908:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13897:6:201"},"nodeType":"YulFunctionCall","src":"13897:22:201"},"nodeType":"YulExpressionStatement","src":"13897:22:201"},{"nodeType":"YulAssignment","src":"13928:15:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"13937:6:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"13928:5:201"}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"13959:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13973:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13967:5:201"},"nodeType":"YulFunctionCall","src":"13967:16:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13952:6:201"},"nodeType":"YulFunctionCall","src":"13952:32:201"},"nodeType":"YulExpressionStatement","src":"13952:32:201"}]},"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13626:9:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"13637:3:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"13645:5:201","type":""}],"src":"13564:426:201"},{"body":{"nodeType":"YulBlock","src":"14118:159:201","statements":[{"body":{"nodeType":"YulBlock","src":"14164:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14173:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14176:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14166:6:201"},"nodeType":"YulFunctionCall","src":"14166:12:201"},"nodeType":"YulExpressionStatement","src":"14166:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14139:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"14148:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14135:3:201"},"nodeType":"YulFunctionCall","src":"14135:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"14160:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14131:3:201"},"nodeType":"YulFunctionCall","src":"14131:32:201"},"nodeType":"YulIf","src":"14128:52:201"},{"nodeType":"YulAssignment","src":"14189:82:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14252:9:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"14263:7:201"}],"functionName":{"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulIdentifier","src":"14199:52:201"},"nodeType":"YulFunctionCall","src":"14199:72:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14189:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14084:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14095:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14107:6:201","type":""}],"src":"13995:282:201"},{"body":{"nodeType":"YulBlock","src":"14495:175:201","statements":[{"nodeType":"YulAssignment","src":"14505:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14517:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14528:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14513:3:201"},"nodeType":"YulFunctionCall","src":"14513:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14505:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14547:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14562:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"14570:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14558:3:201"},"nodeType":"YulFunctionCall","src":"14558:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14540:6:201"},"nodeType":"YulFunctionCall","src":"14540:74:201"},"nodeType":"YulExpressionStatement","src":"14540:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14634:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14645:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14630:3:201"},"nodeType":"YulFunctionCall","src":"14630:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"14656:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14650:5:201"},"nodeType":"YulFunctionCall","src":"14650:13:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14623:6:201"},"nodeType":"YulFunctionCall","src":"14623:41:201"},"nodeType":"YulExpressionStatement","src":"14623:41:201"}]},"name":"abi_encode_tuple_t_address_t_struct$_ReserveConfigurationMap_$21318_memory_ptr__to_t_address_t_struct$_ReserveConfigurationMap_$21318_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14456:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14467:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14475:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14486:4:201","type":""}],"src":"14282:388:201"},{"body":{"nodeType":"YulBlock","src":"14804:119:201","statements":[{"nodeType":"YulAssignment","src":"14814:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14826:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14837:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14822:3:201"},"nodeType":"YulFunctionCall","src":"14822:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14814:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14856:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"14867:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14849:6:201"},"nodeType":"YulFunctionCall","src":"14849:25:201"},"nodeType":"YulExpressionStatement","src":"14849:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14894:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14905:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14890:3:201"},"nodeType":"YulFunctionCall","src":"14890:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"14910:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14883:6:201"},"nodeType":"YulFunctionCall","src":"14883:34:201"},"nodeType":"YulExpressionStatement","src":"14883:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14765:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14776:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14784:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14795:4:201","type":""}],"src":"14675:248:201"},{"body":{"nodeType":"YulBlock","src":"14988:78:201","statements":[{"nodeType":"YulAssignment","src":"14998:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"15013:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15007:5:201"},"nodeType":"YulFunctionCall","src":"15007:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"14998:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15054:5:201"}],"functionName":{"name":"validator_revert_uint128","nodeType":"YulIdentifier","src":"15029:24:201"},"nodeType":"YulFunctionCall","src":"15029:31:201"},"nodeType":"YulExpressionStatement","src":"15029:31:201"}]},"name":"abi_decode_uint128_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"14967:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"14978:5:201","type":""}],"src":"14928:138:201"},{"body":{"nodeType":"YulBlock","src":"15130:110:201","statements":[{"nodeType":"YulAssignment","src":"15140:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"15155:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15149:5:201"},"nodeType":"YulFunctionCall","src":"15149:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"15140:5:201"}]},{"body":{"nodeType":"YulBlock","src":"15218:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15227:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15230:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15220:6:201"},"nodeType":"YulFunctionCall","src":"15220:12:201"},"nodeType":"YulExpressionStatement","src":"15220:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15184:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15195:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"15202:12:201","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15191:3:201"},"nodeType":"YulFunctionCall","src":"15191:24:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"15181:2:201"},"nodeType":"YulFunctionCall","src":"15181:35:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"15174:6:201"},"nodeType":"YulFunctionCall","src":"15174:43:201"},"nodeType":"YulIf","src":"15171:63:201"}]},"name":"abi_decode_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"15109:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"15120:5:201","type":""}],"src":"15071:169:201"},{"body":{"nodeType":"YulBlock","src":"15304:77:201","statements":[{"nodeType":"YulAssignment","src":"15314:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"15329:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15323:5:201"},"nodeType":"YulFunctionCall","src":"15323:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"15314:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15369:5:201"}],"functionName":{"name":"validator_revert_uint16","nodeType":"YulIdentifier","src":"15345:23:201"},"nodeType":"YulFunctionCall","src":"15345:30:201"},"nodeType":"YulExpressionStatement","src":"15345:30:201"}]},"name":"abi_decode_uint16_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"15283:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"15294:5:201","type":""}],"src":"15245:136:201"},{"body":{"nodeType":"YulBlock","src":"15446:78:201","statements":[{"nodeType":"YulAssignment","src":"15456:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"15471:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15465:5:201"},"nodeType":"YulFunctionCall","src":"15465:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"15456:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15512:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"15487:24:201"},"nodeType":"YulFunctionCall","src":"15487:31:201"},"nodeType":"YulExpressionStatement","src":"15487:31:201"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"15425:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"15436:5:201","type":""}],"src":"15386:138:201"},{"body":{"nodeType":"YulBlock","src":"15640:1541:201","statements":[{"body":{"nodeType":"YulBlock","src":"15687:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15696:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15699:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15689:6:201"},"nodeType":"YulFunctionCall","src":"15689:12:201"},"nodeType":"YulExpressionStatement","src":"15689:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"15661:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"15670:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15657:3:201"},"nodeType":"YulFunctionCall","src":"15657:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"15682:3:201","type":"","value":"480"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"15653:3:201"},"nodeType":"YulFunctionCall","src":"15653:33:201"},"nodeType":"YulIf","src":"15650:53:201"},{"nodeType":"YulVariableDeclaration","src":"15712:35:201","value":{"arguments":[],"functionName":{"name":"allocate_memory_3396","nodeType":"YulIdentifier","src":"15725:20:201"},"nodeType":"YulFunctionCall","src":"15725:22:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"15716:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15763:5:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15823:9:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15834:7:201"}],"functionName":{"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulIdentifier","src":"15770:52:201"},"nodeType":"YulFunctionCall","src":"15770:72:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15756:6:201"},"nodeType":"YulFunctionCall","src":"15756:87:201"},"nodeType":"YulExpressionStatement","src":"15756:87:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15863:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"15870:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15859:3:201"},"nodeType":"YulFunctionCall","src":"15859:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15909:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15920:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15905:3:201"},"nodeType":"YulFunctionCall","src":"15905:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"15875:29:201"},"nodeType":"YulFunctionCall","src":"15875:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15852:6:201"},"nodeType":"YulFunctionCall","src":"15852:73:201"},"nodeType":"YulExpressionStatement","src":"15852:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15945:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"15952:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15941:3:201"},"nodeType":"YulFunctionCall","src":"15941:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15991:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16002:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15987:3:201"},"nodeType":"YulFunctionCall","src":"15987:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"15957:29:201"},"nodeType":"YulFunctionCall","src":"15957:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15934:6:201"},"nodeType":"YulFunctionCall","src":"15934:73:201"},"nodeType":"YulExpressionStatement","src":"15934:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16027:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"16034:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16023:3:201"},"nodeType":"YulFunctionCall","src":"16023:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16073:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16084:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16069:3:201"},"nodeType":"YulFunctionCall","src":"16069:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"16039:29:201"},"nodeType":"YulFunctionCall","src":"16039:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16016:6:201"},"nodeType":"YulFunctionCall","src":"16016:73:201"},"nodeType":"YulExpressionStatement","src":"16016:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16109:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"16116:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16105:3:201"},"nodeType":"YulFunctionCall","src":"16105:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16156:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16167:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16152:3:201"},"nodeType":"YulFunctionCall","src":"16152:19:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"16122:29:201"},"nodeType":"YulFunctionCall","src":"16122:50:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16098:6:201"},"nodeType":"YulFunctionCall","src":"16098:75:201"},"nodeType":"YulExpressionStatement","src":"16098:75:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16193:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"16200:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16189:3:201"},"nodeType":"YulFunctionCall","src":"16189:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16240:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16251:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16236:3:201"},"nodeType":"YulFunctionCall","src":"16236:19:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"16206:29:201"},"nodeType":"YulFunctionCall","src":"16206:50:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16182:6:201"},"nodeType":"YulFunctionCall","src":"16182:75:201"},"nodeType":"YulExpressionStatement","src":"16182:75:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16277:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"16284:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16273:3:201"},"nodeType":"YulFunctionCall","src":"16273:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16323:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16334:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16319:3:201"},"nodeType":"YulFunctionCall","src":"16319:19:201"}],"functionName":{"name":"abi_decode_uint40_fromMemory","nodeType":"YulIdentifier","src":"16290:28:201"},"nodeType":"YulFunctionCall","src":"16290:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16266:6:201"},"nodeType":"YulFunctionCall","src":"16266:74:201"},"nodeType":"YulExpressionStatement","src":"16266:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16360:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"16367:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16356:3:201"},"nodeType":"YulFunctionCall","src":"16356:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16406:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16417:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16402:3:201"},"nodeType":"YulFunctionCall","src":"16402:19:201"}],"functionName":{"name":"abi_decode_uint16_fromMemory","nodeType":"YulIdentifier","src":"16373:28:201"},"nodeType":"YulFunctionCall","src":"16373:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16349:6:201"},"nodeType":"YulFunctionCall","src":"16349:74:201"},"nodeType":"YulExpressionStatement","src":"16349:74:201"},{"nodeType":"YulVariableDeclaration","src":"16432:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"16442:3:201","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"16436:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16465:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16472:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16461:3:201"},"nodeType":"YulFunctionCall","src":"16461:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16511:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16522:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16507:3:201"},"nodeType":"YulFunctionCall","src":"16507:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"16477:29:201"},"nodeType":"YulFunctionCall","src":"16477:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16454:6:201"},"nodeType":"YulFunctionCall","src":"16454:73:201"},"nodeType":"YulExpressionStatement","src":"16454:73:201"},{"nodeType":"YulVariableDeclaration","src":"16536:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"16546:3:201","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"16540:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16569:5:201"},{"name":"_2","nodeType":"YulIdentifier","src":"16576:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16565:3:201"},"nodeType":"YulFunctionCall","src":"16565:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16615:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"16626:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16611:3:201"},"nodeType":"YulFunctionCall","src":"16611:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"16581:29:201"},"nodeType":"YulFunctionCall","src":"16581:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16558:6:201"},"nodeType":"YulFunctionCall","src":"16558:73:201"},"nodeType":"YulExpressionStatement","src":"16558:73:201"},{"nodeType":"YulVariableDeclaration","src":"16640:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"16650:3:201","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"16644:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16673:5:201"},{"name":"_3","nodeType":"YulIdentifier","src":"16680:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16669:3:201"},"nodeType":"YulFunctionCall","src":"16669:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16719:9:201"},{"name":"_3","nodeType":"YulIdentifier","src":"16730:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16715:3:201"},"nodeType":"YulFunctionCall","src":"16715:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"16685:29:201"},"nodeType":"YulFunctionCall","src":"16685:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16662:6:201"},"nodeType":"YulFunctionCall","src":"16662:73:201"},"nodeType":"YulExpressionStatement","src":"16662:73:201"},{"nodeType":"YulVariableDeclaration","src":"16744:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"16754:3:201","type":"","value":"352"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"16748:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16777:5:201"},{"name":"_4","nodeType":"YulIdentifier","src":"16784:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16773:3:201"},"nodeType":"YulFunctionCall","src":"16773:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16823:9:201"},{"name":"_4","nodeType":"YulIdentifier","src":"16834:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16819:3:201"},"nodeType":"YulFunctionCall","src":"16819:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"16789:29:201"},"nodeType":"YulFunctionCall","src":"16789:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16766:6:201"},"nodeType":"YulFunctionCall","src":"16766:73:201"},"nodeType":"YulExpressionStatement","src":"16766:73:201"},{"nodeType":"YulVariableDeclaration","src":"16848:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"16858:3:201","type":"","value":"384"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"16852:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16881:5:201"},{"name":"_5","nodeType":"YulIdentifier","src":"16888:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16877:3:201"},"nodeType":"YulFunctionCall","src":"16877:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16927:9:201"},{"name":"_5","nodeType":"YulIdentifier","src":"16938:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16923:3:201"},"nodeType":"YulFunctionCall","src":"16923:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"16893:29:201"},"nodeType":"YulFunctionCall","src":"16893:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16870:6:201"},"nodeType":"YulFunctionCall","src":"16870:73:201"},"nodeType":"YulExpressionStatement","src":"16870:73:201"},{"nodeType":"YulVariableDeclaration","src":"16952:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"16962:3:201","type":"","value":"416"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"16956:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16985:5:201"},{"name":"_6","nodeType":"YulIdentifier","src":"16992:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16981:3:201"},"nodeType":"YulFunctionCall","src":"16981:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17031:9:201"},{"name":"_6","nodeType":"YulIdentifier","src":"17042:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17027:3:201"},"nodeType":"YulFunctionCall","src":"17027:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"16997:29:201"},"nodeType":"YulFunctionCall","src":"16997:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16974:6:201"},"nodeType":"YulFunctionCall","src":"16974:73:201"},"nodeType":"YulExpressionStatement","src":"16974:73:201"},{"nodeType":"YulVariableDeclaration","src":"17056:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"17066:3:201","type":"","value":"448"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"17060:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17089:5:201"},{"name":"_7","nodeType":"YulIdentifier","src":"17096:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17085:3:201"},"nodeType":"YulFunctionCall","src":"17085:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17135:9:201"},{"name":"_7","nodeType":"YulIdentifier","src":"17146:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17131:3:201"},"nodeType":"YulFunctionCall","src":"17131:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"17101:29:201"},"nodeType":"YulFunctionCall","src":"17101:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17078:6:201"},"nodeType":"YulFunctionCall","src":"17078:73:201"},"nodeType":"YulExpressionStatement","src":"17078:73:201"},{"nodeType":"YulAssignment","src":"17160:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"17170:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"17160:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15606:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"15617:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"15629:6:201","type":""}],"src":"15529:1652:201"},{"body":{"nodeType":"YulBlock","src":"17315:198:201","statements":[{"nodeType":"YulAssignment","src":"17325:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17337:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17348:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17333:3:201"},"nodeType":"YulFunctionCall","src":"17333:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17325:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"17360:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"17370:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"17364:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17428:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"17443:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"17451:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17439:3:201"},"nodeType":"YulFunctionCall","src":"17439:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17421:6:201"},"nodeType":"YulFunctionCall","src":"17421:34:201"},"nodeType":"YulExpressionStatement","src":"17421:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17475:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17486:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17471:3:201"},"nodeType":"YulFunctionCall","src":"17471:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"17495:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"17503:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17491:3:201"},"nodeType":"YulFunctionCall","src":"17491:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17464:6:201"},"nodeType":"YulFunctionCall","src":"17464:43:201"},"nodeType":"YulExpressionStatement","src":"17464:43:201"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17276:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"17287:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17295:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17306:4:201","type":""}],"src":"17186:327:201"},{"body":{"nodeType":"YulBlock","src":"17571:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"17581:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"17590:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"17585:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"17650:63:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"17675:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"17680:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17671:3:201"},"nodeType":"YulFunctionCall","src":"17671:11:201"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"17694:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"17699:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17690:3:201"},"nodeType":"YulFunctionCall","src":"17690:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17684:5:201"},"nodeType":"YulFunctionCall","src":"17684:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17664:6:201"},"nodeType":"YulFunctionCall","src":"17664:39:201"},"nodeType":"YulExpressionStatement","src":"17664:39:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"17611:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"17614:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17608:2:201"},"nodeType":"YulFunctionCall","src":"17608:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"17622:19:201","statements":[{"nodeType":"YulAssignment","src":"17624:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"17633:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"17636:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17629:3:201"},"nodeType":"YulFunctionCall","src":"17629:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"17624:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"17604:3:201","statements":[]},"src":"17600:113:201"},{"body":{"nodeType":"YulBlock","src":"17739:31:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"17752:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"17757:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17748:3:201"},"nodeType":"YulFunctionCall","src":"17748:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"17766:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17741:6:201"},"nodeType":"YulFunctionCall","src":"17741:27:201"},"nodeType":"YulExpressionStatement","src":"17741:27:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"17728:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"17731:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"17725:2:201"},"nodeType":"YulFunctionCall","src":"17725:13:201"},"nodeType":"YulIf","src":"17722:48:201"}]},"name":"copy_memory_to_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"17549:3:201","type":""},{"name":"dst","nodeType":"YulTypedName","src":"17554:3:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"17559:6:201","type":""}],"src":"17518:258:201"},{"body":{"nodeType":"YulBlock","src":"17831:267:201","statements":[{"nodeType":"YulVariableDeclaration","src":"17841:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17861:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17855:5:201"},"nodeType":"YulFunctionCall","src":"17855:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"17845:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17883:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"17888:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17876:6:201"},"nodeType":"YulFunctionCall","src":"17876:19:201"},"nodeType":"YulExpressionStatement","src":"17876:19:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17930:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"17937:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17926:3:201"},"nodeType":"YulFunctionCall","src":"17926:16:201"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17948:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"17953:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17944:3:201"},"nodeType":"YulFunctionCall","src":"17944:14:201"},{"name":"length","nodeType":"YulIdentifier","src":"17960:6:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"17904:21:201"},"nodeType":"YulFunctionCall","src":"17904:63:201"},"nodeType":"YulExpressionStatement","src":"17904:63:201"},{"nodeType":"YulAssignment","src":"17976:116:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17991:3:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"18004:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"18012:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18000:3:201"},"nodeType":"YulFunctionCall","src":"18000:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"18017:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17996:3:201"},"nodeType":"YulFunctionCall","src":"17996:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17987:3:201"},"nodeType":"YulFunctionCall","src":"17987:98:201"},{"kind":"number","nodeType":"YulLiteral","src":"18087:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17983:3:201"},"nodeType":"YulFunctionCall","src":"17983:109:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"17976:3:201"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"17808:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"17815:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"17823:3:201","type":""}],"src":"17781:317:201"},{"body":{"nodeType":"YulBlock","src":"18224:99:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18241:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18252:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18234:6:201"},"nodeType":"YulFunctionCall","src":"18234:21:201"},"nodeType":"YulExpressionStatement","src":"18234:21:201"},{"nodeType":"YulAssignment","src":"18264:53:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18290:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18302:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18313:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18298:3:201"},"nodeType":"YulFunctionCall","src":"18298:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"18272:17:201"},"nodeType":"YulFunctionCall","src":"18272:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18264:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18193:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18204:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18215:4:201","type":""}],"src":"18103:220:201"},{"body":{"nodeType":"YulBlock","src":"18409:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"18455:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18464:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"18467:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"18457:6:201"},"nodeType":"YulFunctionCall","src":"18457:12:201"},"nodeType":"YulExpressionStatement","src":"18457:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"18430:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"18439:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"18426:3:201"},"nodeType":"YulFunctionCall","src":"18426:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"18451:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"18422:3:201"},"nodeType":"YulFunctionCall","src":"18422:32:201"},"nodeType":"YulIf","src":"18419:52:201"},{"nodeType":"YulVariableDeclaration","src":"18480:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18499:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18493:5:201"},"nodeType":"YulFunctionCall","src":"18493:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"18484:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18543:5:201"}],"functionName":{"name":"validator_revert_uint128","nodeType":"YulIdentifier","src":"18518:24:201"},"nodeType":"YulFunctionCall","src":"18518:31:201"},"nodeType":"YulExpressionStatement","src":"18518:31:201"},{"nodeType":"YulAssignment","src":"18558:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"18568:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"18558:6:201"}]}]},"name":"abi_decode_tuple_t_uint128_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18375:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"18386:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"18398:6:201","type":""}],"src":"18328:251:201"},{"body":{"nodeType":"YulBlock","src":"18713:190:201","statements":[{"nodeType":"YulAssignment","src":"18723:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18735:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18746:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18731:3:201"},"nodeType":"YulFunctionCall","src":"18731:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18723:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"18758:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"18768:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"18762:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18818:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18833:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"18841:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18829:3:201"},"nodeType":"YulFunctionCall","src":"18829:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18811:6:201"},"nodeType":"YulFunctionCall","src":"18811:34:201"},"nodeType":"YulExpressionStatement","src":"18811:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18865:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18876:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18861:3:201"},"nodeType":"YulFunctionCall","src":"18861:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"18885:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"18893:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18881:3:201"},"nodeType":"YulFunctionCall","src":"18881:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18854:6:201"},"nodeType":"YulFunctionCall","src":"18854:43:201"},"nodeType":"YulExpressionStatement","src":"18854:43:201"}]},"name":"abi_encode_tuple_t_uint128_t_uint128__to_t_uint128_t_uint128__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18674:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"18685:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18693:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18704:4:201","type":""}],"src":"18584:319:201"},{"body":{"nodeType":"YulBlock","src":"18989:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"19035:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19044:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19047:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19037:6:201"},"nodeType":"YulFunctionCall","src":"19037:12:201"},"nodeType":"YulExpressionStatement","src":"19037:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"19010:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"19019:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19006:3:201"},"nodeType":"YulFunctionCall","src":"19006:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"19031:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"19002:3:201"},"nodeType":"YulFunctionCall","src":"19002:32:201"},"nodeType":"YulIf","src":"18999:52:201"},{"nodeType":"YulAssignment","src":"19060:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19076:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19070:5:201"},"nodeType":"YulFunctionCall","src":"19070:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"19060:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18955:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"18966:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"18978:6:201","type":""}],"src":"18908:184:201"},{"body":{"nodeType":"YulBlock","src":"19220:184:201","statements":[{"nodeType":"YulAssignment","src":"19230:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19242:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19253:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19238:3:201"},"nodeType":"YulFunctionCall","src":"19238:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19230:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19272:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"19287:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"19295:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19283:3:201"},"nodeType":"YulFunctionCall","src":"19283:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19265:6:201"},"nodeType":"YulFunctionCall","src":"19265:74:201"},"nodeType":"YulExpressionStatement","src":"19265:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19359:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19370:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19355:3:201"},"nodeType":"YulFunctionCall","src":"19355:18:201"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"19389:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"19382:6:201"},"nodeType":"YulFunctionCall","src":"19382:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"19375:6:201"},"nodeType":"YulFunctionCall","src":"19375:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19348:6:201"},"nodeType":"YulFunctionCall","src":"19348:50:201"},"nodeType":"YulExpressionStatement","src":"19348:50:201"}]},"name":"abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19181:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"19192:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"19200:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19211:4:201","type":""}],"src":"19097:307:201"},{"body":{"nodeType":"YulBlock","src":"19504:92:201","statements":[{"nodeType":"YulAssignment","src":"19514:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19526:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19537:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19522:3:201"},"nodeType":"YulFunctionCall","src":"19522:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19514:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19556:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"19581:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"19574:6:201"},"nodeType":"YulFunctionCall","src":"19574:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"19567:6:201"},"nodeType":"YulFunctionCall","src":"19567:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19549:6:201"},"nodeType":"YulFunctionCall","src":"19549:41:201"},"nodeType":"YulExpressionStatement","src":"19549:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19473:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"19484:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19495:4:201","type":""}],"src":"19409:187:201"},{"body":{"nodeType":"YulBlock","src":"19832:1404:201","statements":[{"nodeType":"YulVariableDeclaration","src":"19842:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"19852:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"19846:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19910:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"19925:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"19933:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19921:3:201"},"nodeType":"YulFunctionCall","src":"19921:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19903:6:201"},"nodeType":"YulFunctionCall","src":"19903:34:201"},"nodeType":"YulExpressionStatement","src":"19903:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19957:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19968:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19953:3:201"},"nodeType":"YulFunctionCall","src":"19953:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"19973:2:201","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19946:6:201"},"nodeType":"YulFunctionCall","src":"19946:30:201"},"nodeType":"YulExpressionStatement","src":"19946:30:201"},{"nodeType":"YulVariableDeclaration","src":"19985:33:201","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"20011:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"19998:12:201"},"nodeType":"YulFunctionCall","src":"19998:20:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"19989:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20052:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"20027:24:201"},"nodeType":"YulFunctionCall","src":"20027:31:201"},"nodeType":"YulExpressionStatement","src":"20027:31:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20078:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20089:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20074:3:201"},"nodeType":"YulFunctionCall","src":"20074:18:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20098:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"20105:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20094:3:201"},"nodeType":"YulFunctionCall","src":"20094:14:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20067:6:201"},"nodeType":"YulFunctionCall","src":"20067:42:201"},"nodeType":"YulExpressionStatement","src":"20067:42:201"},{"nodeType":"YulVariableDeclaration","src":"20118:44:201","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"20150:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"20158:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20146:3:201"},"nodeType":"YulFunctionCall","src":"20146:15:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"20133:12:201"},"nodeType":"YulFunctionCall","src":"20133:29:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"20122:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"20196:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"20171:24:201"},"nodeType":"YulFunctionCall","src":"20171:33:201"},"nodeType":"YulExpressionStatement","src":"20171:33:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20224:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20235:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20220:3:201"},"nodeType":"YulFunctionCall","src":"20220:18:201"},{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"20244:7:201"},{"name":"_1","nodeType":"YulIdentifier","src":"20253:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20240:3:201"},"nodeType":"YulFunctionCall","src":"20240:16:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20213:6:201"},"nodeType":"YulFunctionCall","src":"20213:44:201"},"nodeType":"YulExpressionStatement","src":"20213:44:201"},{"nodeType":"YulVariableDeclaration","src":"20266:90:201","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"20332:6:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"20344:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"20352:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20340:3:201"},"nodeType":"YulFunctionCall","src":"20340:15:201"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"20300:31:201"},"nodeType":"YulFunctionCall","src":"20300:56:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"20270:12:201","type":""},{"name":"memberValue1","nodeType":"YulTypedName","src":"20284:12:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20376:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20387:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20372:3:201"},"nodeType":"YulFunctionCall","src":"20372:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"20393:4:201","type":"","value":"0xc0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20365:6:201"},"nodeType":"YulFunctionCall","src":"20365:33:201"},"nodeType":"YulExpressionStatement","src":"20365:33:201"},{"nodeType":"YulVariableDeclaration","src":"20407:89:201","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"20448:12:201"},{"name":"memberValue1","nodeType":"YulIdentifier","src":"20462:12:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20480:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20491:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20476:3:201"},"nodeType":"YulFunctionCall","src":"20476:19:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"20421:26:201"},"nodeType":"YulFunctionCall","src":"20421:75:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"20411:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"20505:94:201","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"20575:6:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"20587:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"20595:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20583:3:201"},"nodeType":"YulFunctionCall","src":"20583:15:201"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"20543:31:201"},"nodeType":"YulFunctionCall","src":"20543:56:201"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"20509:14:201","type":""},{"name":"memberValue1_1","nodeType":"YulTypedName","src":"20525:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"20608:76:201","value":{"kind":"number","nodeType":"YulLiteral","src":"20618:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"20612:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20704:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20715:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20700:3:201"},"nodeType":"YulFunctionCall","src":"20700:19:201"},{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"20729:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"20737:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"20725:3:201"},"nodeType":"YulFunctionCall","src":"20725:22:201"},{"name":"_2","nodeType":"YulIdentifier","src":"20749:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20721:3:201"},"nodeType":"YulFunctionCall","src":"20721:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20693:6:201"},"nodeType":"YulFunctionCall","src":"20693:60:201"},"nodeType":"YulExpressionStatement","src":"20693:60:201"},{"nodeType":"YulVariableDeclaration","src":"20762:80:201","value":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"20803:14:201"},{"name":"memberValue1_1","nodeType":"YulIdentifier","src":"20819:14:201"},{"name":"tail_1","nodeType":"YulIdentifier","src":"20835:6:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"20776:26:201"},"nodeType":"YulFunctionCall","src":"20776:66:201"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"20766:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"20851:58:201","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"20896:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"20904:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20892:3:201"},"nodeType":"YulFunctionCall","src":"20892:16:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"20873:18:201"},"nodeType":"YulFunctionCall","src":"20873:36:201"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"20855:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"20937:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20957:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20968:4:201","type":"","value":"0xc0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20953:3:201"},"nodeType":"YulFunctionCall","src":"20953:20:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"20918:18:201"},"nodeType":"YulFunctionCall","src":"20918:56:201"},"nodeType":"YulExpressionStatement","src":"20918:56:201"},{"nodeType":"YulVariableDeclaration","src":"20983:95:201","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"21053:6:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"21065:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"21073:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21061:3:201"},"nodeType":"YulFunctionCall","src":"21061:16:201"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"21021:31:201"},"nodeType":"YulFunctionCall","src":"21021:57:201"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"20987:14:201","type":""},{"name":"memberValue1_2","nodeType":"YulTypedName","src":"21003:14:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21098:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21109:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21094:3:201"},"nodeType":"YulFunctionCall","src":"21094:19:201"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"21123:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"21131:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21119:3:201"},"nodeType":"YulFunctionCall","src":"21119:22:201"},{"name":"_2","nodeType":"YulIdentifier","src":"21143:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21115:3:201"},"nodeType":"YulFunctionCall","src":"21115:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21087:6:201"},"nodeType":"YulFunctionCall","src":"21087:60:201"},"nodeType":"YulExpressionStatement","src":"21087:60:201"},{"nodeType":"YulAssignment","src":"21156:74:201","value":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"21191:14:201"},{"name":"memberValue1_2","nodeType":"YulIdentifier","src":"21207:14:201"},{"name":"tail_2","nodeType":"YulIdentifier","src":"21223:6:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"21164:26:201"},"nodeType":"YulFunctionCall","src":"21164:66:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21156:4:201"}]}]},"name":"abi_encode_tuple_t_contract$_IPool_$4860_t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr__to_t_address_t_struct$_UpdateDebtTokenInput_$21280_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19793:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"19804:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"19812:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19823:4:201","type":""}],"src":"19601:1635:201"},{"body":{"nodeType":"YulBlock","src":"21347:905:201","statements":[{"nodeType":"YulVariableDeclaration","src":"21357:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"21367:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"21361:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"21414:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21423:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21426:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21416:6:201"},"nodeType":"YulFunctionCall","src":"21416:12:201"},"nodeType":"YulExpressionStatement","src":"21416:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"21389:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"21398:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21385:3:201"},"nodeType":"YulFunctionCall","src":"21385:23:201"},{"name":"_1","nodeType":"YulIdentifier","src":"21410:2:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"21381:3:201"},"nodeType":"YulFunctionCall","src":"21381:32:201"},"nodeType":"YulIf","src":"21378:52:201"},{"nodeType":"YulVariableDeclaration","src":"21439:30:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21459:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"21453:5:201"},"nodeType":"YulFunctionCall","src":"21453:16:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"21443:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"21478:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"21488:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"21482:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"21533:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21542:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21545:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21535:6:201"},"nodeType":"YulFunctionCall","src":"21535:12:201"},"nodeType":"YulExpressionStatement","src":"21535:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"21521:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"21529:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"21518:2:201"},"nodeType":"YulFunctionCall","src":"21518:14:201"},"nodeType":"YulIf","src":"21515:34:201"},{"nodeType":"YulVariableDeclaration","src":"21558:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21572:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"21583:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21568:3:201"},"nodeType":"YulFunctionCall","src":"21568:22:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"21562:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"21638:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21647:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21650:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21640:6:201"},"nodeType":"YulFunctionCall","src":"21640:12:201"},"nodeType":"YulExpressionStatement","src":"21640:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"21617:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"21621:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21613:3:201"},"nodeType":"YulFunctionCall","src":"21613:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"21628:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"21609:3:201"},"nodeType":"YulFunctionCall","src":"21609:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"21602:6:201"},"nodeType":"YulFunctionCall","src":"21602:35:201"},"nodeType":"YulIf","src":"21599:55:201"},{"nodeType":"YulVariableDeclaration","src":"21663:19:201","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"21679:2:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"21673:5:201"},"nodeType":"YulFunctionCall","src":"21673:9:201"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"21667:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"21705:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"21707:16:201"},"nodeType":"YulFunctionCall","src":"21707:18:201"},"nodeType":"YulExpressionStatement","src":"21707:18:201"}]},"condition":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"21697:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"21701:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"21694:2:201"},"nodeType":"YulFunctionCall","src":"21694:10:201"},"nodeType":"YulIf","src":"21691:36:201"},{"nodeType":"YulVariableDeclaration","src":"21736:20:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21750:1:201","type":"","value":"5"},{"name":"_4","nodeType":"YulIdentifier","src":"21753:2:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"21746:3:201"},"nodeType":"YulFunctionCall","src":"21746:10:201"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"21740:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"21765:39:201","value":{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"21796:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"21800:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21792:3:201"},"nodeType":"YulFunctionCall","src":"21792:11:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"21776:15:201"},"nodeType":"YulFunctionCall","src":"21776:28:201"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"21769:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"21813:16:201","value":{"name":"dst","nodeType":"YulIdentifier","src":"21826:3:201"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"21817:5:201","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"21845:3:201"},{"name":"_4","nodeType":"YulIdentifier","src":"21850:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21838:6:201"},"nodeType":"YulFunctionCall","src":"21838:15:201"},"nodeType":"YulExpressionStatement","src":"21838:15:201"},{"nodeType":"YulAssignment","src":"21862:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"21873:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"21878:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21869:3:201"},"nodeType":"YulFunctionCall","src":"21869:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"21862:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"21890:34:201","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"21912:2:201"},{"name":"_5","nodeType":"YulIdentifier","src":"21916:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21908:3:201"},"nodeType":"YulFunctionCall","src":"21908:11:201"},{"name":"_1","nodeType":"YulIdentifier","src":"21921:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21904:3:201"},"nodeType":"YulFunctionCall","src":"21904:20:201"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"21894:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"21956:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21965:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21968:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21958:6:201"},"nodeType":"YulFunctionCall","src":"21958:12:201"},"nodeType":"YulExpressionStatement","src":"21958:12:201"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"21939:6:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"21947:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"21936:2:201"},"nodeType":"YulFunctionCall","src":"21936:19:201"},"nodeType":"YulIf","src":"21933:39:201"},{"nodeType":"YulVariableDeclaration","src":"21981:22:201","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"21996:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"22000:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21992:3:201"},"nodeType":"YulFunctionCall","src":"21992:11:201"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"21985:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"22068:154:201","statements":[{"nodeType":"YulVariableDeclaration","src":"22082:23:201","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"22101:3:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"22095:5:201"},"nodeType":"YulFunctionCall","src":"22095:10:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"22086:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"22143:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"22118:24:201"},"nodeType":"YulFunctionCall","src":"22118:31:201"},"nodeType":"YulExpressionStatement","src":"22118:31:201"},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"22169:3:201"},{"name":"value","nodeType":"YulIdentifier","src":"22174:5:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22162:6:201"},"nodeType":"YulFunctionCall","src":"22162:18:201"},"nodeType":"YulExpressionStatement","src":"22162:18:201"},{"nodeType":"YulAssignment","src":"22193:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"22204:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"22209:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22200:3:201"},"nodeType":"YulFunctionCall","src":"22200:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"22193:3:201"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"22023:3:201"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"22028:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"22020:2:201"},"nodeType":"YulFunctionCall","src":"22020:15:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"22036:23:201","statements":[{"nodeType":"YulAssignment","src":"22038:19:201","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"22049:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"22054:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22045:3:201"},"nodeType":"YulFunctionCall","src":"22045:12:201"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"22038:3:201"}]}]},"pre":{"nodeType":"YulBlock","src":"22016:3:201","statements":[]},"src":"22012:210:201"},{"nodeType":"YulAssignment","src":"22231:15:201","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"22241:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"22231:6:201"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21313:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"21324:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"21336:6:201","type":""}],"src":"21241:1011:201"},{"body":{"nodeType":"YulBlock","src":"22414:162:201","statements":[{"nodeType":"YulAssignment","src":"22424:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22436:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22447:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22432:3:201"},"nodeType":"YulFunctionCall","src":"22432:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22424:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22466:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"22477:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22459:6:201"},"nodeType":"YulFunctionCall","src":"22459:25:201"},"nodeType":"YulExpressionStatement","src":"22459:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22504:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22515:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22500:3:201"},"nodeType":"YulFunctionCall","src":"22500:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"22520:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22493:6:201"},"nodeType":"YulFunctionCall","src":"22493:34:201"},"nodeType":"YulExpressionStatement","src":"22493:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22547:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22558:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22543:3:201"},"nodeType":"YulFunctionCall","src":"22543:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"22563:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22536:6:201"},"nodeType":"YulFunctionCall","src":"22536:34:201"},"nodeType":"YulExpressionStatement","src":"22536:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22367:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"22378:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"22386:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"22394:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22405:4:201","type":""}],"src":"22257:319:201"},{"body":{"nodeType":"YulBlock","src":"22698:151:201","statements":[{"nodeType":"YulAssignment","src":"22708:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22720:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22731:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22716:3:201"},"nodeType":"YulFunctionCall","src":"22716:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22708:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22750:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"22775:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"22768:6:201"},"nodeType":"YulFunctionCall","src":"22768:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"22761:6:201"},"nodeType":"YulFunctionCall","src":"22761:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22743:6:201"},"nodeType":"YulFunctionCall","src":"22743:41:201"},"nodeType":"YulExpressionStatement","src":"22743:41:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22804:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22815:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22800:3:201"},"nodeType":"YulFunctionCall","src":"22800:18:201"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"22834:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"22827:6:201"},"nodeType":"YulFunctionCall","src":"22827:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"22820:6:201"},"nodeType":"YulFunctionCall","src":"22820:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22793:6:201"},"nodeType":"YulFunctionCall","src":"22793:50:201"},"nodeType":"YulExpressionStatement","src":"22793:50:201"}]},"name":"abi_encode_tuple_t_bool_t_bool__to_t_bool_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22659:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"22670:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"22678:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22689:4:201","type":""}],"src":"22581:268:201"},{"body":{"nodeType":"YulBlock","src":"23079:1516:201","statements":[{"nodeType":"YulVariableDeclaration","src":"23089:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"23099:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"23093:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23157:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"23172:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"23180:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23168:3:201"},"nodeType":"YulFunctionCall","src":"23168:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23150:6:201"},"nodeType":"YulFunctionCall","src":"23150:34:201"},"nodeType":"YulExpressionStatement","src":"23150:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23204:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23215:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23200:3:201"},"nodeType":"YulFunctionCall","src":"23200:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"23220:2:201","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23193:6:201"},"nodeType":"YulFunctionCall","src":"23193:30:201"},"nodeType":"YulExpressionStatement","src":"23193:30:201"},{"nodeType":"YulVariableDeclaration","src":"23232:33:201","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"23258:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"23245:12:201"},"nodeType":"YulFunctionCall","src":"23245:20:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"23236:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23299:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"23274:24:201"},"nodeType":"YulFunctionCall","src":"23274:31:201"},"nodeType":"YulExpressionStatement","src":"23274:31:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23325:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23336:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23321:3:201"},"nodeType":"YulFunctionCall","src":"23321:18:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23345:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"23352:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23341:3:201"},"nodeType":"YulFunctionCall","src":"23341:14:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23314:6:201"},"nodeType":"YulFunctionCall","src":"23314:42:201"},"nodeType":"YulExpressionStatement","src":"23314:42:201"},{"nodeType":"YulVariableDeclaration","src":"23365:55:201","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"23408:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"23416:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23404:3:201"},"nodeType":"YulFunctionCall","src":"23404:15:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"23385:18:201"},"nodeType":"YulFunctionCall","src":"23385:35:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"23369:12:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"23448:12:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23466:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23477:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23462:3:201"},"nodeType":"YulFunctionCall","src":"23462:18:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"23429:18:201"},"nodeType":"YulFunctionCall","src":"23429:52:201"},"nodeType":"YulExpressionStatement","src":"23429:52:201"},{"nodeType":"YulVariableDeclaration","src":"23490:57:201","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"23535:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"23543:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23531:3:201"},"nodeType":"YulFunctionCall","src":"23531:15:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"23512:18:201"},"nodeType":"YulFunctionCall","src":"23512:35:201"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"23494:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"23575:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23595:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23606:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23591:3:201"},"nodeType":"YulFunctionCall","src":"23591:19:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"23556:18:201"},"nodeType":"YulFunctionCall","src":"23556:55:201"},"nodeType":"YulExpressionStatement","src":"23556:55:201"},{"nodeType":"YulVariableDeclaration","src":"23620:92:201","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"23688:6:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"23700:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"23708:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23696:3:201"},"nodeType":"YulFunctionCall","src":"23696:15:201"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"23656:31:201"},"nodeType":"YulFunctionCall","src":"23656:56:201"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"23624:14:201","type":""},{"name":"memberValue1","nodeType":"YulTypedName","src":"23640:12:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23732:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23743:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23728:3:201"},"nodeType":"YulFunctionCall","src":"23728:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"23749:4:201","type":"","value":"0xe0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23721:6:201"},"nodeType":"YulFunctionCall","src":"23721:33:201"},"nodeType":"YulExpressionStatement","src":"23721:33:201"},{"nodeType":"YulVariableDeclaration","src":"23763:91:201","value":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"23804:14:201"},{"name":"memberValue1","nodeType":"YulIdentifier","src":"23820:12:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23838:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23849:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23834:3:201"},"nodeType":"YulFunctionCall","src":"23834:19:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"23777:26:201"},"nodeType":"YulFunctionCall","src":"23777:77:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"23767:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"23863:95:201","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"23933:6:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"23945:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"23953:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23941:3:201"},"nodeType":"YulFunctionCall","src":"23941:16:201"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"23901:31:201"},"nodeType":"YulFunctionCall","src":"23901:57:201"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"23867:14:201","type":""},{"name":"memberValue1_1","nodeType":"YulTypedName","src":"23883:14:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"23967:76:201","value":{"kind":"number","nodeType":"YulLiteral","src":"23977:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"23971:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24063:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24074:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24059:3:201"},"nodeType":"YulFunctionCall","src":"24059:19:201"},{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"24088:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"24096:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"24084:3:201"},"nodeType":"YulFunctionCall","src":"24084:22:201"},{"name":"_2","nodeType":"YulIdentifier","src":"24108:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24080:3:201"},"nodeType":"YulFunctionCall","src":"24080:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24052:6:201"},"nodeType":"YulFunctionCall","src":"24052:60:201"},"nodeType":"YulExpressionStatement","src":"24052:60:201"},{"nodeType":"YulVariableDeclaration","src":"24121:80:201","value":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"24162:14:201"},{"name":"memberValue1_1","nodeType":"YulIdentifier","src":"24178:14:201"},{"name":"tail_1","nodeType":"YulIdentifier","src":"24194:6:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"24135:26:201"},"nodeType":"YulFunctionCall","src":"24135:66:201"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"24125:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"24210:58:201","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"24255:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"24263:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24251:3:201"},"nodeType":"YulFunctionCall","src":"24251:16:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"24232:18:201"},"nodeType":"YulFunctionCall","src":"24232:36:201"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"24214:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"24296:14:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24316:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24327:4:201","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24312:3:201"},"nodeType":"YulFunctionCall","src":"24312:20:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"24277:18:201"},"nodeType":"YulFunctionCall","src":"24277:56:201"},"nodeType":"YulExpressionStatement","src":"24277:56:201"},{"nodeType":"YulVariableDeclaration","src":"24342:95:201","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"24412:6:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"24424:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"24432:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24420:3:201"},"nodeType":"YulFunctionCall","src":"24420:16:201"}],"functionName":{"name":"calldata_access_string_calldata","nodeType":"YulIdentifier","src":"24380:31:201"},"nodeType":"YulFunctionCall","src":"24380:57:201"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"24346:14:201","type":""},{"name":"memberValue1_2","nodeType":"YulTypedName","src":"24362:14:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24457:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24468:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24453:3:201"},"nodeType":"YulFunctionCall","src":"24453:19:201"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"24482:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"24490:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"24478:3:201"},"nodeType":"YulFunctionCall","src":"24478:22:201"},{"name":"_2","nodeType":"YulIdentifier","src":"24502:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24474:3:201"},"nodeType":"YulFunctionCall","src":"24474:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24446:6:201"},"nodeType":"YulFunctionCall","src":"24446:60:201"},"nodeType":"YulExpressionStatement","src":"24446:60:201"},{"nodeType":"YulAssignment","src":"24515:74:201","value":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"24550:14:201"},{"name":"memberValue1_2","nodeType":"YulIdentifier","src":"24566:14:201"},{"name":"tail_2","nodeType":"YulIdentifier","src":"24582:6:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"24523:26:201"},"nodeType":"YulFunctionCall","src":"24523:66:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24515:4:201"}]}]},"name":"abi_encode_tuple_t_contract$_IPool_$4860_t_struct$_UpdateATokenInput_$21267_calldata_ptr__to_t_address_t_struct$_UpdateATokenInput_$21267_memory_ptr__fromStack_library_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23040:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"23051:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"23059:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23070:4:201","type":""}],"src":"22854:1741:201"},{"body":{"nodeType":"YulBlock","src":"24789:585:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24806:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"24821:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"24829:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24817:3:201"},"nodeType":"YulFunctionCall","src":"24817:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24799:6:201"},"nodeType":"YulFunctionCall","src":"24799:36:201"},"nodeType":"YulExpressionStatement","src":"24799:36:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24855:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24866:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24851:3:201"},"nodeType":"YulFunctionCall","src":"24851:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"24871:2:201","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24844:6:201"},"nodeType":"YulFunctionCall","src":"24844:30:201"},"nodeType":"YulExpressionStatement","src":"24844:30:201"},{"nodeType":"YulVariableDeclaration","src":"24883:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"24893:6:201","type":"","value":"0xffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"24887:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24919:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24930:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24915:3:201"},"nodeType":"YulFunctionCall","src":"24915:18:201"},{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"24945:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24939:5:201"},"nodeType":"YulFunctionCall","src":"24939:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"24954:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24935:3:201"},"nodeType":"YulFunctionCall","src":"24935:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24908:6:201"},"nodeType":"YulFunctionCall","src":"24908:50:201"},"nodeType":"YulExpressionStatement","src":"24908:50:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24978:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24989:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24974:3:201"},"nodeType":"YulFunctionCall","src":"24974:18:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"25008:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"25016:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25004:3:201"},"nodeType":"YulFunctionCall","src":"25004:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24998:5:201"},"nodeType":"YulFunctionCall","src":"24998:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"25022:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24994:3:201"},"nodeType":"YulFunctionCall","src":"24994:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24967:6:201"},"nodeType":"YulFunctionCall","src":"24967:59:201"},"nodeType":"YulExpressionStatement","src":"24967:59:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25046:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25057:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25042:3:201"},"nodeType":"YulFunctionCall","src":"25042:19:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"25077:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"25085:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25073:3:201"},"nodeType":"YulFunctionCall","src":"25073:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25067:5:201"},"nodeType":"YulFunctionCall","src":"25067:22:201"},{"name":"_1","nodeType":"YulIdentifier","src":"25091:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25063:3:201"},"nodeType":"YulFunctionCall","src":"25063:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25035:6:201"},"nodeType":"YulFunctionCall","src":"25035:60:201"},"nodeType":"YulExpressionStatement","src":"25035:60:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25115:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25126:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25111:3:201"},"nodeType":"YulFunctionCall","src":"25111:20:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"25147:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"25155:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25143:3:201"},"nodeType":"YulFunctionCall","src":"25143:15:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25137:5:201"},"nodeType":"YulFunctionCall","src":"25137:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"25161:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25133:3:201"},"nodeType":"YulFunctionCall","src":"25133:71:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25104:6:201"},"nodeType":"YulFunctionCall","src":"25104:101:201"},"nodeType":"YulExpressionStatement","src":"25104:101:201"},{"nodeType":"YulVariableDeclaration","src":"25214:43:201","value":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"25244:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"25252:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25240:3:201"},"nodeType":"YulFunctionCall","src":"25240:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25234:5:201"},"nodeType":"YulFunctionCall","src":"25234:23:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"25218:12:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25277:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25288:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25273:3:201"},"nodeType":"YulFunctionCall","src":"25273:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"25294:4:201","type":"","value":"0xa0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25266:6:201"},"nodeType":"YulFunctionCall","src":"25266:33:201"},"nodeType":"YulExpressionStatement","src":"25266:33:201"},{"nodeType":"YulAssignment","src":"25308:60:201","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"25334:12:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25352:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25363:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25348:3:201"},"nodeType":"YulFunctionCall","src":"25348:19:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"25316:17:201"},"nodeType":"YulFunctionCall","src":"25316:52:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25308:4:201"}]}]},"name":"abi_encode_tuple_t_uint8_t_struct$_EModeCategory_$21333_memory_ptr__to_t_uint8_t_struct$_EModeCategory_$21333_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24750:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"24761:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"24769:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24780:4:201","type":""}],"src":"24600:774:201"},{"body":{"nodeType":"YulBlock","src":"25619:392:201","statements":[{"nodeType":"YulVariableDeclaration","src":"25629:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"25639:6:201","type":"","value":"0xffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"25633:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25661:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"25676:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"25684:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25672:3:201"},"nodeType":"YulFunctionCall","src":"25672:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25654:6:201"},"nodeType":"YulFunctionCall","src":"25654:34:201"},"nodeType":"YulExpressionStatement","src":"25654:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25708:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25719:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25704:3:201"},"nodeType":"YulFunctionCall","src":"25704:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"25728:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"25736:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25724:3:201"},"nodeType":"YulFunctionCall","src":"25724:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25697:6:201"},"nodeType":"YulFunctionCall","src":"25697:43:201"},"nodeType":"YulExpressionStatement","src":"25697:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25760:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25771:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25756:3:201"},"nodeType":"YulFunctionCall","src":"25756:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"25780:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"25788:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25776:3:201"},"nodeType":"YulFunctionCall","src":"25776:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25749:6:201"},"nodeType":"YulFunctionCall","src":"25749:43:201"},"nodeType":"YulExpressionStatement","src":"25749:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25812:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25823:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25808:3:201"},"nodeType":"YulFunctionCall","src":"25808:18:201"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"25832:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"25840:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25828:3:201"},"nodeType":"YulFunctionCall","src":"25828:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25801:6:201"},"nodeType":"YulFunctionCall","src":"25801:83:201"},"nodeType":"YulExpressionStatement","src":"25801:83:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25904:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25915:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25900:3:201"},"nodeType":"YulFunctionCall","src":"25900:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"25921:3:201","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25893:6:201"},"nodeType":"YulFunctionCall","src":"25893:32:201"},"nodeType":"YulExpressionStatement","src":"25893:32:201"},{"nodeType":"YulAssignment","src":"25934:71:201","value":{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"25969:6:201"},{"name":"value5","nodeType":"YulIdentifier","src":"25977:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25989:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26000:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25985:3:201"},"nodeType":"YulFunctionCall","src":"25985:19:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"25942:26:201"},"nodeType":"YulFunctionCall","src":"25942:63:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25934:4:201"}]}]},"name":"abi_encode_tuple_t_uint16_t_uint16_t_uint16_t_address_t_string_calldata_ptr__to_t_uint256_t_uint256_t_uint256_t_address_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25548:9:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"25559:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"25567:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"25575:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"25583:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"25591:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"25599:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25610:4:201","type":""}],"src":"25379:632:201"},{"body":{"nodeType":"YulBlock","src":"26190:236:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26207:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26218:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26200:6:201"},"nodeType":"YulFunctionCall","src":"26200:21:201"},"nodeType":"YulExpressionStatement","src":"26200:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26241:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26252:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26237:3:201"},"nodeType":"YulFunctionCall","src":"26237:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"26257:2:201","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26230:6:201"},"nodeType":"YulFunctionCall","src":"26230:30:201"},"nodeType":"YulExpressionStatement","src":"26230:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26280:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26291:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26276:3:201"},"nodeType":"YulFunctionCall","src":"26276:18:201"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"26296:34:201","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26269:6:201"},"nodeType":"YulFunctionCall","src":"26269:62:201"},"nodeType":"YulExpressionStatement","src":"26269:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26351:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26362:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26347:3:201"},"nodeType":"YulFunctionCall","src":"26347:18:201"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"26367:16:201","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26340:6:201"},"nodeType":"YulFunctionCall","src":"26340:44:201"},"nodeType":"YulExpressionStatement","src":"26340:44:201"},{"nodeType":"YulAssignment","src":"26393:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26405:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26416:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26401:3:201"},"nodeType":"YulFunctionCall","src":"26401:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26393:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26167:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26181:4:201","type":""}],"src":"26016:410:201"},{"body":{"nodeType":"YulBlock","src":"26512:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"26558:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"26567:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"26570:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"26560:6:201"},"nodeType":"YulFunctionCall","src":"26560:12:201"},"nodeType":"YulExpressionStatement","src":"26560:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"26533:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"26542:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"26529:3:201"},"nodeType":"YulFunctionCall","src":"26529:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"26554:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"26525:3:201"},"nodeType":"YulFunctionCall","src":"26525:32:201"},"nodeType":"YulIf","src":"26522:52:201"},{"nodeType":"YulVariableDeclaration","src":"26583:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26602:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26596:5:201"},"nodeType":"YulFunctionCall","src":"26596:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"26587:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"26646:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"26621:24:201"},"nodeType":"YulFunctionCall","src":"26621:31:201"},"nodeType":"YulExpressionStatement","src":"26621:31:201"},{"nodeType":"YulAssignment","src":"26661:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"26671:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"26661:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26478:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"26489:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"26501:6:201","type":""}],"src":"26431:251:201"},{"body":{"nodeType":"YulBlock","src":"26784:87:201","statements":[{"nodeType":"YulAssignment","src":"26794:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26806:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26817:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26802:3:201"},"nodeType":"YulFunctionCall","src":"26802:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26794:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26836:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"26851:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"26859:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26847:3:201"},"nodeType":"YulFunctionCall","src":"26847:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26829:6:201"},"nodeType":"YulFunctionCall","src":"26829:36:201"},"nodeType":"YulExpressionStatement","src":"26829:36:201"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26753:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"26764:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26775:4:201","type":""}],"src":"26687:184:201"},{"body":{"nodeType":"YulBlock","src":"26989:1434:201","statements":[{"nodeType":"YulVariableDeclaration","src":"26999:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"27009:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"27003:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"27056:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27065:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"27068:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"27058:6:201"},"nodeType":"YulFunctionCall","src":"27058:12:201"},"nodeType":"YulExpressionStatement","src":"27058:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"27031:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"27040:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"27027:3:201"},"nodeType":"YulFunctionCall","src":"27027:23:201"},{"name":"_1","nodeType":"YulIdentifier","src":"27052:2:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"27023:3:201"},"nodeType":"YulFunctionCall","src":"27023:32:201"},"nodeType":"YulIf","src":"27020:52:201"},{"nodeType":"YulVariableDeclaration","src":"27081:30:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27101:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27095:5:201"},"nodeType":"YulFunctionCall","src":"27095:16:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"27085:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"27120:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"27130:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"27124:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"27175:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27184:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"27187:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"27177:6:201"},"nodeType":"YulFunctionCall","src":"27177:12:201"},"nodeType":"YulExpressionStatement","src":"27177:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"27163:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"27171:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"27160:2:201"},"nodeType":"YulFunctionCall","src":"27160:14:201"},"nodeType":"YulIf","src":"27157:34:201"},{"nodeType":"YulVariableDeclaration","src":"27200:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"27214:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"27225:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27210:3:201"},"nodeType":"YulFunctionCall","src":"27210:22:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"27204:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"27272:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27281:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"27284:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"27274:6:201"},"nodeType":"YulFunctionCall","src":"27274:12:201"},"nodeType":"YulExpressionStatement","src":"27274:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"27252:7:201"},{"name":"_3","nodeType":"YulIdentifier","src":"27261:2:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"27248:3:201"},"nodeType":"YulFunctionCall","src":"27248:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"27266:4:201","type":"","value":"0xa0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"27244:3:201"},"nodeType":"YulFunctionCall","src":"27244:27:201"},"nodeType":"YulIf","src":"27241:47:201"},{"nodeType":"YulVariableDeclaration","src":"27297:35:201","value":{"arguments":[],"functionName":{"name":"allocate_memory_3398","nodeType":"YulIdentifier","src":"27310:20:201"},"nodeType":"YulFunctionCall","src":"27310:22:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"27301:5:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"27341:24:201","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"27362:2:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27356:5:201"},"nodeType":"YulFunctionCall","src":"27356:9:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"27345:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"27398:7:201"}],"functionName":{"name":"validator_revert_uint16","nodeType":"YulIdentifier","src":"27374:23:201"},"nodeType":"YulFunctionCall","src":"27374:32:201"},"nodeType":"YulExpressionStatement","src":"27374:32:201"},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"27422:5:201"},{"name":"value_1","nodeType":"YulIdentifier","src":"27429:7:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27415:6:201"},"nodeType":"YulFunctionCall","src":"27415:22:201"},"nodeType":"YulExpressionStatement","src":"27415:22:201"},{"nodeType":"YulVariableDeclaration","src":"27446:33:201","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"27471:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"27475:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27467:3:201"},"nodeType":"YulFunctionCall","src":"27467:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27461:5:201"},"nodeType":"YulFunctionCall","src":"27461:18:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"27450:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"27512:7:201"}],"functionName":{"name":"validator_revert_uint16","nodeType":"YulIdentifier","src":"27488:23:201"},"nodeType":"YulFunctionCall","src":"27488:32:201"},"nodeType":"YulExpressionStatement","src":"27488:32:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"27540:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"27547:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27536:3:201"},"nodeType":"YulFunctionCall","src":"27536:14:201"},{"name":"value_2","nodeType":"YulIdentifier","src":"27552:7:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27529:6:201"},"nodeType":"YulFunctionCall","src":"27529:31:201"},"nodeType":"YulExpressionStatement","src":"27529:31:201"},{"nodeType":"YulVariableDeclaration","src":"27569:33:201","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"27594:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"27598:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27590:3:201"},"nodeType":"YulFunctionCall","src":"27590:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27584:5:201"},"nodeType":"YulFunctionCall","src":"27584:18:201"},"variables":[{"name":"value_3","nodeType":"YulTypedName","src":"27573:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_3","nodeType":"YulIdentifier","src":"27635:7:201"}],"functionName":{"name":"validator_revert_uint16","nodeType":"YulIdentifier","src":"27611:23:201"},"nodeType":"YulFunctionCall","src":"27611:32:201"},"nodeType":"YulExpressionStatement","src":"27611:32:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"27663:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"27670:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27659:3:201"},"nodeType":"YulFunctionCall","src":"27659:14:201"},{"name":"value_3","nodeType":"YulIdentifier","src":"27675:7:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27652:6:201"},"nodeType":"YulFunctionCall","src":"27652:31:201"},"nodeType":"YulExpressionStatement","src":"27652:31:201"},{"nodeType":"YulVariableDeclaration","src":"27692:33:201","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"27717:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"27721:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27713:3:201"},"nodeType":"YulFunctionCall","src":"27713:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27707:5:201"},"nodeType":"YulFunctionCall","src":"27707:18:201"},"variables":[{"name":"value_4","nodeType":"YulTypedName","src":"27696:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_4","nodeType":"YulIdentifier","src":"27759:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"27734:24:201"},"nodeType":"YulFunctionCall","src":"27734:33:201"},"nodeType":"YulExpressionStatement","src":"27734:33:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"27787:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"27794:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27783:3:201"},"nodeType":"YulFunctionCall","src":"27783:14:201"},{"name":"value_4","nodeType":"YulIdentifier","src":"27799:7:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"27776:6:201"},"nodeType":"YulFunctionCall","src":"27776:31:201"},"nodeType":"YulExpressionStatement","src":"27776:31:201"},{"nodeType":"YulVariableDeclaration","src":"27816:35:201","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"27842:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"27846:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27838:3:201"},"nodeType":"YulFunctionCall","src":"27838:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"27832:5:201"},"nodeType":"YulFunctionCall","src":"27832:19:201"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"27820:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"27880:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27889:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"27892:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"27882:6:201"},"nodeType":"YulFunctionCall","src":"27882:12:201"},"nodeType":"YulExpressionStatement","src":"27882:12:201"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"27866:8:201"},{"name":"_2","nodeType":"YulIdentifier","src":"27876:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"27863:2:201"},"nodeType":"YulFunctionCall","src":"27863:16:201"},"nodeType":"YulIf","src":"27860:36:201"},{"nodeType":"YulVariableDeclaration","src":"27905:27:201","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"27919:2:201"},{"name":"offset_1","nodeType":"YulIdentifier","src":"27923:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27915:3:201"},"nodeType":"YulFunctionCall","src":"27915:17:201"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"27909:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"27980:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"27989:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"27992:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"27982:6:201"},"nodeType":"YulFunctionCall","src":"27982:12:201"},"nodeType":"YulExpressionStatement","src":"27982:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"27959:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"27963:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"27955:3:201"},"nodeType":"YulFunctionCall","src":"27955:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"27970:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"27951:3:201"},"nodeType":"YulFunctionCall","src":"27951:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"27944:6:201"},"nodeType":"YulFunctionCall","src":"27944:35:201"},"nodeType":"YulIf","src":"27941:55:201"},{"nodeType":"YulVariableDeclaration","src":"28005:19:201","value":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"28021:2:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28015:5:201"},"nodeType":"YulFunctionCall","src":"28015:9:201"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"28009:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"28047:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"28049:16:201"},"nodeType":"YulFunctionCall","src":"28049:18:201"},"nodeType":"YulExpressionStatement","src":"28049:18:201"}]},"condition":{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"28039:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"28043:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"28036:2:201"},"nodeType":"YulFunctionCall","src":"28036:10:201"},"nodeType":"YulIf","src":"28033:36:201"},{"nodeType":"YulVariableDeclaration","src":"28078:125:201","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"28119:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"28123:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28115:3:201"},"nodeType":"YulFunctionCall","src":"28115:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"28130:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"28111:3:201"},"nodeType":"YulFunctionCall","src":"28111:86:201"},{"name":"_1","nodeType":"YulIdentifier","src":"28199:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28107:3:201"},"nodeType":"YulFunctionCall","src":"28107:95:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"28091:15:201"},"nodeType":"YulFunctionCall","src":"28091:112:201"},"variables":[{"name":"array","nodeType":"YulTypedName","src":"28082:5:201","type":""}]},{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"28219:5:201"},{"name":"_5","nodeType":"YulIdentifier","src":"28226:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28212:6:201"},"nodeType":"YulFunctionCall","src":"28212:17:201"},"nodeType":"YulExpressionStatement","src":"28212:17:201"},{"body":{"nodeType":"YulBlock","src":"28275:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28284:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28287:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"28277:6:201"},"nodeType":"YulFunctionCall","src":"28277:12:201"},"nodeType":"YulExpressionStatement","src":"28277:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"28252:2:201"},{"name":"_5","nodeType":"YulIdentifier","src":"28256:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28248:3:201"},"nodeType":"YulFunctionCall","src":"28248:11:201"},{"name":"_1","nodeType":"YulIdentifier","src":"28261:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28244:3:201"},"nodeType":"YulFunctionCall","src":"28244:20:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"28266:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"28241:2:201"},"nodeType":"YulFunctionCall","src":"28241:33:201"},"nodeType":"YulIf","src":"28238:53:201"},{"expression":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"28326:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"28330:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28322:3:201"},"nodeType":"YulFunctionCall","src":"28322:11:201"},{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"28339:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"28346:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28335:3:201"},"nodeType":"YulFunctionCall","src":"28335:14:201"},{"name":"_5","nodeType":"YulIdentifier","src":"28351:2:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"28300:21:201"},"nodeType":"YulFunctionCall","src":"28300:54:201"},"nodeType":"YulExpressionStatement","src":"28300:54:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"28374:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"28381:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28370:3:201"},"nodeType":"YulFunctionCall","src":"28370:15:201"},{"name":"array","nodeType":"YulIdentifier","src":"28387:5:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28363:6:201"},"nodeType":"YulFunctionCall","src":"28363:30:201"},"nodeType":"YulExpressionStatement","src":"28363:30:201"},{"nodeType":"YulAssignment","src":"28402:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"28412:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"28402:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_EModeCategory_$21333_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26955:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"26966:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"26978:6:201","type":""}],"src":"26876:1547:201"},{"body":{"nodeType":"YulBlock","src":"28549:141:201","statements":[{"nodeType":"YulAssignment","src":"28559:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28571:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"28582:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28567:3:201"},"nodeType":"YulFunctionCall","src":"28567:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"28559:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28601:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"28616:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"28624:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"28612:3:201"},"nodeType":"YulFunctionCall","src":"28612:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28594:6:201"},"nodeType":"YulFunctionCall","src":"28594:36:201"},"nodeType":"YulExpressionStatement","src":"28594:36:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28650:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"28661:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"28646:3:201"},"nodeType":"YulFunctionCall","src":"28646:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"28670:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"28678:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"28666:3:201"},"nodeType":"YulFunctionCall","src":"28666:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"28639:6:201"},"nodeType":"YulFunctionCall","src":"28639:45:201"},"nodeType":"YulExpressionStatement","src":"28639:45:201"}]},"name":"abi_encode_tuple_t_uint8_t_uint8__to_t_uint8_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"28510:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"28521:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"28529:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"28540:4:201","type":""}],"src":"28428:262:201"},{"body":{"nodeType":"YulBlock","src":"28773:167:201","statements":[{"body":{"nodeType":"YulBlock","src":"28819:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"28828:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"28831:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"28821:6:201"},"nodeType":"YulFunctionCall","src":"28821:12:201"},"nodeType":"YulExpressionStatement","src":"28821:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"28794:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"28803:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"28790:3:201"},"nodeType":"YulFunctionCall","src":"28790:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"28815:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"28786:3:201"},"nodeType":"YulFunctionCall","src":"28786:32:201"},"nodeType":"YulIf","src":"28783:52:201"},{"nodeType":"YulVariableDeclaration","src":"28844:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"28863:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"28857:5:201"},"nodeType":"YulFunctionCall","src":"28857:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"28848:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"28904:5:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"28882:21:201"},"nodeType":"YulFunctionCall","src":"28882:28:201"},"nodeType":"YulExpressionStatement","src":"28882:28:201"},{"nodeType":"YulAssignment","src":"28919:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"28929:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"28919:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"28739:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"28750:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"28762:6:201","type":""}],"src":"28695:245:201"},{"body":{"nodeType":"YulBlock","src":"29214:621:201","statements":[{"body":{"nodeType":"YulBlock","src":"29261:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"29270:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"29273:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"29263:6:201"},"nodeType":"YulFunctionCall","src":"29263:12:201"},"nodeType":"YulExpressionStatement","src":"29263:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"29235:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"29244:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"29231:3:201"},"nodeType":"YulFunctionCall","src":"29231:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"29256:3:201","type":"","value":"384"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"29227:3:201"},"nodeType":"YulFunctionCall","src":"29227:33:201"},"nodeType":"YulIf","src":"29224:53:201"},{"nodeType":"YulAssignment","src":"29286:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29302:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29296:5:201"},"nodeType":"YulFunctionCall","src":"29296:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"29286:6:201"}]},{"nodeType":"YulAssignment","src":"29321:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29341:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29352:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29337:3:201"},"nodeType":"YulFunctionCall","src":"29337:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29331:5:201"},"nodeType":"YulFunctionCall","src":"29331:25:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"29321:6:201"}]},{"nodeType":"YulAssignment","src":"29365:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29385:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29396:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29381:3:201"},"nodeType":"YulFunctionCall","src":"29381:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29375:5:201"},"nodeType":"YulFunctionCall","src":"29375:25:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"29365:6:201"}]},{"nodeType":"YulAssignment","src":"29409:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29429:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29440:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29425:3:201"},"nodeType":"YulFunctionCall","src":"29425:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29419:5:201"},"nodeType":"YulFunctionCall","src":"29419:25:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"29409:6:201"}]},{"nodeType":"YulAssignment","src":"29453:36:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29473:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29484:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29469:3:201"},"nodeType":"YulFunctionCall","src":"29469:19:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29463:5:201"},"nodeType":"YulFunctionCall","src":"29463:26:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"29453:6:201"}]},{"nodeType":"YulAssignment","src":"29498:36:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29518:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29529:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29514:3:201"},"nodeType":"YulFunctionCall","src":"29514:19:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29508:5:201"},"nodeType":"YulFunctionCall","src":"29508:26:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"29498:6:201"}]},{"nodeType":"YulAssignment","src":"29543:36:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29563:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29574:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29559:3:201"},"nodeType":"YulFunctionCall","src":"29559:19:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29553:5:201"},"nodeType":"YulFunctionCall","src":"29553:26:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"29543:6:201"}]},{"nodeType":"YulAssignment","src":"29588:36:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29608:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29619:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29604:3:201"},"nodeType":"YulFunctionCall","src":"29604:19:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29598:5:201"},"nodeType":"YulFunctionCall","src":"29598:26:201"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"29588:6:201"}]},{"nodeType":"YulAssignment","src":"29633:36:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29653:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29664:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29649:3:201"},"nodeType":"YulFunctionCall","src":"29649:19:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29643:5:201"},"nodeType":"YulFunctionCall","src":"29643:26:201"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"29633:6:201"}]},{"nodeType":"YulAssignment","src":"29678:36:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29698:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29709:3:201","type":"","value":"288"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29694:3:201"},"nodeType":"YulFunctionCall","src":"29694:19:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29688:5:201"},"nodeType":"YulFunctionCall","src":"29688:26:201"},"variableNames":[{"name":"value9","nodeType":"YulIdentifier","src":"29678:6:201"}]},{"nodeType":"YulAssignment","src":"29723:37:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29744:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29755:3:201","type":"","value":"320"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29740:3:201"},"nodeType":"YulFunctionCall","src":"29740:19:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"29734:5:201"},"nodeType":"YulFunctionCall","src":"29734:26:201"},"variableNames":[{"name":"value10","nodeType":"YulIdentifier","src":"29723:7:201"}]},{"nodeType":"YulAssignment","src":"29769:60:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"29813:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"29824:3:201","type":"","value":"352"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"29809:3:201"},"nodeType":"YulFunctionCall","src":"29809:19:201"}],"functionName":{"name":"abi_decode_uint40_fromMemory","nodeType":"YulIdentifier","src":"29780:28:201"},"nodeType":"YulFunctionCall","src":"29780:49:201"},"variableNames":[{"name":"value11","nodeType":"YulIdentifier","src":"29769:7:201"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"29090:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"29101:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"29113:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"29121:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"29129:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"29137:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"29145:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"29153:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"29161:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"29169:6:201","type":""},{"name":"value8","nodeType":"YulTypedName","src":"29177:6:201","type":""},{"name":"value9","nodeType":"YulTypedName","src":"29185:6:201","type":""},{"name":"value10","nodeType":"YulTypedName","src":"29193:7:201","type":""},{"name":"value11","nodeType":"YulTypedName","src":"29202:7:201","type":""}],"src":"28945:890:201"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_array$_t_struct$_InitReserveInput_$21252_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, shl(5, length)), 32), dataEnd) { revert(0, 0) }\n        value0 := add(_2, 32)\n        value1 := length\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function validator_revert_uint128(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint128(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_uint128(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_bool(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if slt(sub(dataEnd, _1), 192) { revert(0, 0) }\n        value0 := _1\n    }\n    function abi_decode_tuple_t_bool(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_struct$_UpdateATokenInput_$21267_calldata_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if slt(sub(dataEnd, _1), 224) { revert(0, 0) }\n        value0 := _1\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function validator_revert_uint16(value)\n    {\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint8t_uint16t_uint16t_uint16t_addresst_string_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        value0 := abi_decode_uint8(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_uint16(value)\n        value1 := value\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_uint16(value_1)\n        value2 := value_1\n        let value_2 := calldataload(add(headStart, 96))\n        validator_revert_uint16(value_2)\n        value3 := value_2\n        let value_3 := calldataload(add(headStart, 128))\n        validator_revert_address(value_3)\n        value4 := value_3\n        let offset := calldataload(add(headStart, 160))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n        value5 := add(_2, 32)\n        value6 := length\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_uint8(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := abi_decode_uint8(add(headStart, 32))\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function access_calldata_tail_t_struct$_InitReserveInput_$21252_calldata_ptr(base_ref, ptr_to_tail) -> addr\n    {\n        let rel_offset_of_tail := calldataload(ptr_to_tail)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe21))) { revert(0, 0) }\n        addr := add(base_ref, rel_offset_of_tail)\n    }\n    function abi_encode_address(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_uint8(value, pos)\n    { mstore(pos, and(value, 0xff)) }\n    function calldata_access_string_calldata(base_ref, ptr) -> value, length\n    {\n        let rel_offset_of_tail := calldataload(ptr)\n        if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1))) { revert(0, 0) }\n        let value_1 := add(rel_offset_of_tail, base_ref)\n        length := calldataload(value_1)\n        value := add(value_1, 0x20)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        if sgt(base_ref, sub(calldatasize(), length)) { revert(0, 0) }\n    }\n    function abi_encode_string_calldata(start, length, pos) -> end\n    {\n        mstore(pos, length)\n        calldatacopy(add(pos, 0x20), start, length)\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_contract$_IPool_$4860_t_struct$_InitReserveInput_$21252_calldata_ptr__to_t_address_t_struct$_InitReserveInput_$21252_memory_ptr__fromStack_library_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), 64)\n        abi_encode_address(abi_decode_address(value1), add(headStart, 64))\n        let memberValue0 := abi_decode_address(add(value1, 32))\n        abi_encode_address(memberValue0, add(headStart, 96))\n        let memberValue0_1 := abi_decode_address(add(value1, 64))\n        abi_encode_address(memberValue0_1, add(headStart, 128))\n        let memberValue0_2 := abi_decode_uint8(add(value1, 96))\n        abi_encode_uint8(memberValue0_2, add(headStart, 160))\n        let memberValue0_3 := abi_decode_address(add(value1, 128))\n        abi_encode_address(memberValue0_3, add(headStart, 192))\n        let memberValue0_4 := abi_decode_address(add(value1, 160))\n        abi_encode_address(memberValue0_4, add(headStart, 224))\n        let memberValue0_5 := abi_decode_address(add(value1, 192))\n        let _1 := 256\n        abi_encode_address(memberValue0_5, add(headStart, _1))\n        let memberValue0_6 := abi_decode_address(add(value1, 224))\n        let _2 := 288\n        abi_encode_address(memberValue0_6, add(headStart, _2))\n        let memberValue0_7, memberValue1 := calldata_access_string_calldata(value1, add(value1, _1))\n        let _3 := 0x01e0\n        let _4 := 320\n        mstore(add(headStart, _4), _3)\n        let tail_1 := abi_encode_string_calldata(memberValue0_7, memberValue1, add(headStart, 544))\n        let memberValue0_8, memberValue1_1 := calldata_access_string_calldata(value1, add(value1, _2))\n        let _5 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0\n        let _6 := 352\n        mstore(add(headStart, _6), add(sub(tail_1, headStart), _5))\n        let tail_2 := abi_encode_string_calldata(memberValue0_8, memberValue1_1, tail_1)\n        let memberValue0_9, memberValue1_2 := calldata_access_string_calldata(value1, add(value1, _4))\n        let _7 := 384\n        mstore(add(headStart, _7), add(sub(tail_2, headStart), _5))\n        let tail_3 := abi_encode_string_calldata(memberValue0_9, memberValue1_2, tail_2)\n        let memberValue0_10, memberValue1_3 := calldata_access_string_calldata(value1, add(value1, _6))\n        let _8 := 416\n        mstore(add(headStart, _8), add(sub(tail_3, headStart), _5))\n        let tail_4 := abi_encode_string_calldata(memberValue0_10, memberValue1_3, tail_3)\n        let memberValue0_11, memberValue1_4 := calldata_access_string_calldata(value1, add(value1, _7))\n        let _9 := 448\n        mstore(add(headStart, _9), add(sub(tail_4, headStart), _5))\n        let tail_5 := abi_encode_string_calldata(memberValue0_11, memberValue1_4, tail_4)\n        let memberValue0_12, memberValue1_5 := calldata_access_string_calldata(value1, add(value1, _8))\n        mstore(add(headStart, _3), add(sub(tail_5, headStart), _5))\n        let tail_6 := abi_encode_string_calldata(memberValue0_12, memberValue1_5, tail_5)\n        let memberValue0_13, memberValue1_6 := calldata_access_string_calldata(value1, add(value1, _9))\n        mstore(add(headStart, 512), add(sub(tail_6, headStart), _5))\n        tail := abi_encode_string_calldata(memberValue0_13, memberValue1_6, tail_6)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_3396() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 480)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory_3398() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xa0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x20) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x20)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        value := memPtr\n        mstore(memPtr, mload(headStart))\n    }\n    function abi_decode_tuple_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, dataEnd)\n    }\n    function abi_encode_tuple_t_address_t_struct$_ReserveConfigurationMap_$21318_memory_ptr__to_t_address_t_struct$_ReserveConfigurationMap_$21318_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), mload(value1))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_uint128_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        validator_revert_uint128(value)\n    }\n    function abi_decode_uint40_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint16_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        validator_revert_uint16(value)\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 480) { revert(0, 0) }\n        let value := allocate_memory_3396()\n        mstore(value, abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, dataEnd))\n        mstore(add(value, 32), abi_decode_uint128_fromMemory(add(headStart, 32)))\n        mstore(add(value, 64), abi_decode_uint128_fromMemory(add(headStart, 64)))\n        mstore(add(value, 96), abi_decode_uint128_fromMemory(add(headStart, 96)))\n        mstore(add(value, 128), abi_decode_uint128_fromMemory(add(headStart, 128)))\n        mstore(add(value, 160), abi_decode_uint128_fromMemory(add(headStart, 160)))\n        mstore(add(value, 192), abi_decode_uint40_fromMemory(add(headStart, 192)))\n        mstore(add(value, 224), abi_decode_uint16_fromMemory(add(headStart, 224)))\n        let _1 := 256\n        mstore(add(value, _1), abi_decode_address_fromMemory(add(headStart, _1)))\n        let _2 := 288\n        mstore(add(value, _2), abi_decode_address_fromMemory(add(headStart, _2)))\n        let _3 := 320\n        mstore(add(value, _3), abi_decode_address_fromMemory(add(headStart, _3)))\n        let _4 := 352\n        mstore(add(value, _4), abi_decode_address_fromMemory(add(headStart, _4)))\n        let _5 := 384\n        mstore(add(value, _5), abi_decode_uint128_fromMemory(add(headStart, _5)))\n        let _6 := 416\n        mstore(add(value, _6), abi_decode_uint128_fromMemory(add(headStart, _6)))\n        let _7 := 448\n        mstore(add(value, _7), abi_decode_uint128_fromMemory(add(headStart, _7)))\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_uint128_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_uint128(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint128_t_uint128__to_t_uint128_t_uint128__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_address_t_bool__to_t_address_t_bool__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_contract$_IPool_$4860_t_struct$_UpdateDebtTokenInput_$21280_calldata_ptr__to_t_address_t_struct$_UpdateDebtTokenInput_$21280_memory_ptr__fromStack_library_reversed(headStart, value1, value0) -> tail\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), 64)\n        let value := calldataload(value1)\n        validator_revert_address(value)\n        mstore(add(headStart, 64), and(value, _1))\n        let value_1 := calldataload(add(value1, 32))\n        validator_revert_address(value_1)\n        mstore(add(headStart, 96), and(value_1, _1))\n        let memberValue0, memberValue1 := calldata_access_string_calldata(value1, add(value1, 64))\n        mstore(add(headStart, 128), 0xc0)\n        let tail_1 := abi_encode_string_calldata(memberValue0, memberValue1, add(headStart, 256))\n        let memberValue0_1, memberValue1_1 := calldata_access_string_calldata(value1, add(value1, 96))\n        let _2 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0\n        mstore(add(headStart, 160), add(sub(tail_1, headStart), _2))\n        let tail_2 := abi_encode_string_calldata(memberValue0_1, memberValue1_1, tail_1)\n        let memberValue0_2 := abi_decode_address(add(value1, 128))\n        abi_encode_address(memberValue0_2, add(headStart, 0xc0))\n        let memberValue0_3, memberValue1_2 := calldata_access_string_calldata(value1, add(value1, 160))\n        mstore(add(headStart, 224), add(sub(tail_2, headStart), _2))\n        tail := abi_encode_string_calldata(memberValue0_3, memberValue1_2, tail_2)\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        let _1 := 32\n        if slt(sub(dataEnd, headStart), _1) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n        let _4 := mload(_3)\n        if gt(_4, _2) { panic_error_0x41() }\n        let _5 := shl(5, _4)\n        let dst := allocate_memory(add(_5, _1))\n        let dst_1 := dst\n        mstore(dst, _4)\n        dst := add(dst, _1)\n        let srcEnd := add(add(_3, _5), _1)\n        if gt(srcEnd, dataEnd) { revert(0, 0) }\n        let src := add(_3, _1)\n        for { } lt(src, srcEnd) { src := add(src, _1) }\n        {\n            let value := mload(src)\n            validator_revert_address(value)\n            mstore(dst, value)\n            dst := add(dst, _1)\n        }\n        value0 := dst_1\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_bool_t_bool__to_t_bool_t_bool__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, iszero(iszero(value0)))\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n    }\n    function abi_encode_tuple_t_contract$_IPool_$4860_t_struct$_UpdateATokenInput_$21267_calldata_ptr__to_t_address_t_struct$_UpdateATokenInput_$21267_memory_ptr__fromStack_library_reversed(headStart, value1, value0) -> tail\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), 64)\n        let value := calldataload(value1)\n        validator_revert_address(value)\n        mstore(add(headStart, 64), and(value, _1))\n        let memberValue0 := abi_decode_address(add(value1, 32))\n        abi_encode_address(memberValue0, add(headStart, 96))\n        let memberValue0_1 := abi_decode_address(add(value1, 64))\n        abi_encode_address(memberValue0_1, add(headStart, 128))\n        let memberValue0_2, memberValue1 := calldata_access_string_calldata(value1, add(value1, 96))\n        mstore(add(headStart, 160), 0xe0)\n        let tail_1 := abi_encode_string_calldata(memberValue0_2, memberValue1, add(headStart, 288))\n        let memberValue0_3, memberValue1_1 := calldata_access_string_calldata(value1, add(value1, 128))\n        let _2 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0\n        mstore(add(headStart, 192), add(sub(tail_1, headStart), _2))\n        let tail_2 := abi_encode_string_calldata(memberValue0_3, memberValue1_1, tail_1)\n        let memberValue0_4 := abi_decode_address(add(value1, 160))\n        abi_encode_address(memberValue0_4, add(headStart, 0xe0))\n        let memberValue0_5, memberValue1_2 := calldata_access_string_calldata(value1, add(value1, 192))\n        mstore(add(headStart, 256), add(sub(tail_2, headStart), _2))\n        tail := abi_encode_string_calldata(memberValue0_5, memberValue1_2, tail_2)\n    }\n    function abi_encode_tuple_t_uint8_t_struct$_EModeCategory_$21333_memory_ptr__to_t_uint8_t_struct$_EModeCategory_$21333_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, 0xff))\n        mstore(add(headStart, 32), 64)\n        let _1 := 0xffff\n        mstore(add(headStart, 64), and(mload(value1), _1))\n        mstore(add(headStart, 96), and(mload(add(value1, 32)), _1))\n        mstore(add(headStart, 128), and(mload(add(value1, 64)), _1))\n        mstore(add(headStart, 0xa0), and(mload(add(value1, 96)), 0xffffffffffffffffffffffffffffffffffffffff))\n        let memberValue0 := mload(add(value1, 128))\n        mstore(add(headStart, 192), 0xa0)\n        tail := abi_encode_string(memberValue0, add(headStart, 224))\n    }\n    function abi_encode_tuple_t_uint16_t_uint16_t_uint16_t_address_t_string_calldata_ptr__to_t_uint256_t_uint256_t_uint256_t_address_t_string_memory_ptr__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), and(value3, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 128), 160)\n        tail := abi_encode_string_calldata(value4, value5, add(headStart, 160))\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_decode_tuple_t_struct$_EModeCategory_$21333_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        let _1 := 32\n        if slt(sub(dataEnd, headStart), _1) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if slt(sub(dataEnd, _3), 0xa0) { revert(0, 0) }\n        let value := allocate_memory_3398()\n        let value_1 := mload(_3)\n        validator_revert_uint16(value_1)\n        mstore(value, value_1)\n        let value_2 := mload(add(_3, _1))\n        validator_revert_uint16(value_2)\n        mstore(add(value, _1), value_2)\n        let value_3 := mload(add(_3, 64))\n        validator_revert_uint16(value_3)\n        mstore(add(value, 64), value_3)\n        let value_4 := mload(add(_3, 96))\n        validator_revert_address(value_4)\n        mstore(add(value, 96), value_4)\n        let offset_1 := mload(add(_3, 128))\n        if gt(offset_1, _2) { revert(0, 0) }\n        let _4 := add(_3, offset_1)\n        if iszero(slt(add(_4, 0x1f), dataEnd)) { revert(0, 0) }\n        let _5 := mload(_4)\n        if gt(_5, _2) { panic_error_0x41() }\n        let array := allocate_memory(add(and(add(_5, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), _1))\n        mstore(array, _5)\n        if gt(add(add(_4, _5), _1), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory(add(_4, _1), add(array, _1), _5)\n        mstore(add(value, 128), array)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint8_t_uint8__to_t_uint8_t_uint8__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xff))\n        mstore(add(headStart, 32), and(value1, 0xff))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint256t_uint40_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11\n    {\n        if slt(sub(dataEnd, headStart), 384) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        value3 := mload(add(headStart, 96))\n        value4 := mload(add(headStart, 128))\n        value5 := mload(add(headStart, 160))\n        value6 := mload(add(headStart, 192))\n        value7 := mload(add(headStart, 224))\n        value8 := mload(add(headStart, 256))\n        value9 := mload(add(headStart, 288))\n        value10 := mload(add(headStart, 320))\n        value11 := abi_decode_uint40_fromMemory(add(headStart, 352))\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{"@aave/core-v3/contracts/protocol/libraries/logic/ConfiguratorLogic.sol":{"ConfiguratorLogic":[{"length":20,"start":1074},{"length":20,"start":6016},{"length":20,"start":9247},{"length":20,"start":10315}]}},"object":"608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637af635a611610104578063aeb4fcc1116100a2578063c4d66de811610071578063c4d66de8146103b8578063d14a0983146103cb578063d4fe3f99146103de578063f213ef0e146103f157600080fd5b8063aeb4fcc11461036c578063b736aaeb1461037f578063bb01c37c14610392578063c19d61e4146103a557600080fd5b80638a751a60116100de5780638a751a601461032057806396e957c414610333578063a7fa83b714610346578063ad4e64321461035957600080fd5b80637af635a6146102e05780637c4e560b146102fa5780638a4936761461030d57600080fd5b806348d9fba91161017157806363c9b8601161014b57806363c9b86014610294578063682cf264146102a75780637626cde3146102ba5780637641f3d9146102cd57600080fd5b806348d9fba91461025b5780634b4e67531461026e578063571f03e51461028157600080fd5b80631df970bd116101ad5780631df970bd1461020f57806326d2cec2146102225780633036b4391461023557806338ae0cc31461024857600080fd5b806302fb45e6146101d4578063145f5892146101e95780631d2118f9146101fc575b600080fd5b6101e76101e2366004614a01565b610404565b005b6101e76101f7366004614aab565b6104d5565b6101e761020a366004614ad7565b61066f565b6101e761021d366004614b2e565b6107f4565b6101e7610230366004614aab565b610a76565b6101e7610243366004614b52565b610c5b565b6101e7610256366004614b79565b610e0b565b6101e7610269366004614b79565b610f96565b6101e761027c366004614aab565b611122565b6101e761028f366004614aab565b611307565b6101e76102a2366004614ba7565b611497565b6101e76102b5366004614b79565b611568565b6101e76102c8366004614bc4565b61174d565b6101e76102db366004614bff565b6117f2565b6102e8600181565b60405190815260200160405180910390f35b6101e7610308366004614c1c565b611944565b6101e761031b366004614b2e565b611c66565b6101e761032e366004614b79565b611ed7565b6101e7610341366004614b79565b6120c0565b6101e7610354366004614b79565b61223f565b6101e7610367366004614bc4565b6123ec565b6101e761037a366004614aab565b61245e565b6101e761038d366004614b79565b61268b565b6101e76103a0366004614c57565b612818565b6101e76103b3366004614cb3565b61288a565b6101e76103c6366004614ba7565b612e48565b6101e76103d9366004614aab565b613047565b6101e76103ec366004614d81565b6131d7565b6101e76103ff366004614b79565b61349c565b61040c61361b565b60355473ffffffffffffffffffffffffffffffffffffffff1660005b828110156104cf5773__$4d6b0a3647b069121a3bb78d2db920912c$__63df59b8b28386868581811061045d5761045d614db6565b905060200281019061046f9190614de5565b6040518363ffffffff1660e01b815260040161048c929190614ed7565b60006040518083038186803b1580156104a457600080fd5b505af41580156104b8573d6000803e3d6000fd5b5050505080806104c790615186565b915050610428565b50505050565b6104dd61382c565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa15801561054e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057291906152f3565b805190915060b01c640fffffffff1661058b8284613a39565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b1580156105ff57600080fd5b505af1158015610613573d6000803e3d6000fd5b5050604080518481526020810187905273ffffffffffffffffffffffffffffffffffffffff881693507f09808b1fc5abde94edf02fdde393bea0d2e4795999ba31695472848638b5c29f9250015b60405180910390a250505050565b61067761382c565b6035546040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260009216906335ea6a75906024016101e060405180830381865afa1580156106e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070d9190615345565b6101608101516035546040517f1d2118f900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152868116602483015293945091921690631d2118f990604401600060405180830381600087803b15801561078b57600080fd5b505af115801561079f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff85811682528781166020830152881693507fdb8dada53709ce4988154324196790c2e4a60c377e1256790946f83b87db3c33925001610661565b6107fc613ac3565b60408051808201909152600281527f313900000000000000000000000000000000000000000000000000000000000060208201526127106fffffffffffffffffffffffffffffffff8316111561086e5760405162461bcd60e51b815260040161086591906154de565b60405180910390fd5b50603554604080517f6a99c036000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691636a99c0369160048083019260209291908290030181865afa1580156108df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090391906154f1565b603554604080517f074b2e43000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff9091169163bcb6e52291839163074b2e43916004808201926020929091908290030181865afa15801561097e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a291906154f1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526fffffffffffffffffffffffffffffffff91821660048201529085166024820152604401600060405180830381600087803b158015610a0c57600080fd5b505af1158015610a20573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8086168252861660208201527fe7e0c75e1fc2d0bd83dc85d59f085b3e763107c392fb368e85572b292f1f557693500190505b60405180910390a15050565b610a7e61382c565b60408051808201909152600281527f37300000000000000000000000000000000000000000000000000000000000006020820152612710821115610ad55760405162461bcd60e51b815260040161086591906154de565b506035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015610b47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6b91906152f3565b805190915060981c61ffff16610b818284613c3c565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b158015610bf557600080fd5b505af1158015610c09573d6000803e3d6000fd5b5050604080518481526020810187905273ffffffffffffffffffffffffffffffffffffffff881693507fb5b0a963825337808b6e3154de8e98027595a5cad4219bb3a9bc55b192f4b391925001610661565b610c63613ac3565b60408051808201909152600281527f32320000000000000000000000000000000000000000000000000000000000006020820152612710821115610cba5760405162461bcd60e51b815260040161086591906154de565b50603554604080517f272d9072000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163272d90729160048083019260209291908290030181865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f919061550e565b6035546040517f3036b4390000000000000000000000000000000000000000000000000000000081526004810185905291925073ffffffffffffffffffffffffffffffffffffffff1690633036b43990602401600060405180830381600087803b158015610dbc57600080fd5b505af1158015610dd0573d6000803e3d6000fd5b505060408051848152602081018690527f30b17cb587a89089d003457c432f73e22aeee93de425e92224ba01080260ecd99350019050610a6a565b610e1361382c565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015610e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea891906152f3565b9050610eb48183613cc3565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b158015610f2857600080fd5b505af1158015610f3c573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8716815285151560208201527f74adf6aaf58c08bc4f993640385e136522375ea3d1589a10d02adbb906c67d1c935001905060405180910390a1505050565b610f9e613d08565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103391906152f3565b905061103f8183613f15565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b1580156110b357600080fd5b505af11580156110c7573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167fe188d542a5f11925d3a3af33703cdd30a43cb3e8066a3cf68b1b57f61a5a94b583604051611115911515815260200190565b60405180910390a2505050565b61112a61382c565b60408051808201909152600281527f363700000000000000000000000000000000000000000000000000000000000060208201526127108211156111815760405162461bcd60e51b815260040161086591906154de565b506035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa1580156111f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121791906152f3565b805190915060401c61ffff1661122d8284613f5a565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b1580156112a157600080fd5b505af11580156112b5573d6000803e3d6000fd5b5050604080518481526020810187905273ffffffffffffffffffffffffffffffffffffffff881693507fb46e2b82b0c2cf3d7d9dece53635e165c53e0eaa7a44f904d61a2b7174826aef925001610661565b61130f61382c565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015611380573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a491906152f3565b805190915060741c640fffffffff166113bd8284613fe1565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b15801561143157600080fd5b505af1158015611445573d6000803e3d6000fd5b5050604080518481526020810187905273ffffffffffffffffffffffffffffffffffffffff881693507f0263602682188540a2d633561c0b4453b7d8566285e99f9f6018b8ef2facef49925001610661565b61149f613ac3565b6035546040517f63c9b86000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152909116906363c9b86090602401600060405180830381600087803b15801561150c57600080fd5b505af1158015611520573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507feeec4c06f7adad215cbdb4d2960896c83c26aedce02dde76d36fa28588d62da49150600090a250565b61157061382c565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa1580156115e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160591906152f3565b90508161166d57805160408051808201909152600281527f3838000000000000000000000000000000000000000000000000000000000000602082015290670800000000000000161561166b5760405162461bcd60e51b815260040161086591906154de565b505b611677818361406b565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b1580156116eb57600080fd5b505af11580156116ff573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f2443ba28e8d1d88d531a3d90b981816a4f3b3c7f1fd4085c6029e81d1b7a570d83604051611115911515815260200190565b611755613ac3565b6035546040517ff5b50e7000000000000000000000000000000000000000000000000000000000815273__$4d6b0a3647b069121a3bb78d2db920912c$__9163f5b50e70916117bf9173ffffffffffffffffffffffffffffffffffffffff16908590600401615527565b60006040518083038186803b1580156117d757600080fd5b505af41580156117eb573d6000803e3d6000fd5b5050505050565b6117fa6140b0565b603554604080517fd1946dbc000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163d1946dbc91600480830192869291908290030181865afa158015611869573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526118af919081019061562c565b905060005b815181101561193f57600073ffffffffffffffffffffffffffffffffffffffff168282815181106118e7576118e7614db6565b602002602001015173ffffffffffffffffffffffffffffffffffffffff161461192d5761192d82828151811061191f5761191f614db6565b602002602001015184610f96565b8061193781615186565b9150506118b4565b505050565b61194c61382c565b60408051808201909152600281527f32300000000000000000000000000000000000000000000000000000000000006020820152828411156119a15760405162461bcd60e51b815260040161086591906154de565b506035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600092169063c44b11f790602401602060405180830381865afa158015611a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3791906152f3565b90508215611aff5760408051808201909152600281527f323000000000000000000000000000000000000000000000000000000000000060208201526127108311611a955760405162461bcd60e51b815260040161086591906154de565b50612710611aa38484614229565b11156040518060400160405280600281526020017f323000000000000000000000000000000000000000000000000000000000000081525090611af95760405162461bcd60e51b815260040161086591906154de565b50611b5c565b60408051808201909152600281527f323000000000000000000000000000000000000000000000000000000000000060208201528215611b525760405162461bcd60e51b815260040161086591906154de565b50611b5c8561426c565b611b668185614403565b611b708184614484565b611b7a818361450b565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b158015611bee57600080fd5b505af1158015611c02573d6000803e3d6000fd5b5050604080518781526020810187905290810185905273ffffffffffffffffffffffffffffffffffffffff881692507f637febbda9275aea2e85c0ff690444c8d87eb2e8339bbede9715abcc89cb0995915060600160405180910390a25050505050565b611c6e613ac3565b60408051808201909152600281527f313900000000000000000000000000000000000000000000000000000000000060208201526127106fffffffffffffffffffffffffffffffff83161115611cd75760405162461bcd60e51b815260040161086591906154de565b50603554604080517f074b2e43000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163074b2e439160048083019260209291908290030181865afa158015611d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6c91906154f1565b603554604080517f6a99c036000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff9091169163bcb6e5229185918491636a99c0369160048083019260209291908290030181865afa158015611de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0c91906154f1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526fffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015611e7557600080fd5b505af1158015611e89573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8086168252861660208201527f71aba182c9d0529b516de7a78bed74d49c207ef7e152f52f7ea5d8730138f6439350019050610a6a565b611edf61382c565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015611f50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7491906152f3565b90508115611fe05780516704000000000000001615156040518060400160405280600281526020017f333000000000000000000000000000000000000000000000000000000000000081525090611fde5760405162461bcd60e51b815260040161086591906154de565b505b611fea8183614592565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b15801561205e57600080fd5b505af1158015612072573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f0b64d0941719acd363f1a6be3d8525d8ec9d71738f7445aabcd88d7939b472e783604051611115911515815260200190565b6120c861382c565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015612139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215d91906152f3565b905061216981836145d7565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b1580156121dd57600080fd5b505af11580156121f1573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f0c4443d258a350d27dc50c378b2ebf165e6469725f786d21b30cab16823f558783604051611115911515815260200190565b61224761382c565b8015612256576122568261461c565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa1580156122c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122eb91906152f3565b90506000612303825167400000000000000016151590565b905061230f8284614798565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b15801561238357600080fd5b505af1158015612397573d6000803e3d6000fd5b5050604080518415158152861515602082015273ffffffffffffffffffffffffffffffffffffffff881693507f842a280b07e8e502a9101f32a3b768ebaba3655556dd674f0831900861fc674b925001610661565b6123f4613ac3565b6035546040517fb0f0935500000000000000000000000000000000000000000000000000000000815273__$4d6b0a3647b069121a3bb78d2db920912c$__9163b0f09355916117bf9173ffffffffffffffffffffffffffffffffffffffff16908590600401615527565b61246661382c565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa1580156124d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124fb91906152f3565b805190915060d41c64ffffffffff1680612518576125188461426c565b61252282846147dd565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b15801561259657600080fd5b505af11580156125aa573d6000803e3d6000fd5b50505050826000141561263d576035546040517fe43e88a100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529091169063e43e88a190602401600060405180830381600087803b15801561262457600080fd5b505af1158015612638573d6000803e3d6000fd5b505050505b604080518281526020810185905273ffffffffffffffffffffffffffffffffffffffff8616917f6824a6c7fbc10d2979b1f1ccf2dd4ed0436541679a661dedb5c10bd4be8306829101610661565b612693613ac3565b806126a1576126a18261426c565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015612712573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273691906152f3565b90506127428183614867565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b1580156127b657600080fd5b505af11580156127ca573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167fc36c7d11ba01a5869d52aa4a3781939dab851cbc9ee6e7fdcedc7d58898a3f1e83604051611115911515815260200190565b612820613ac3565b6035546040517fb13c96a800000000000000000000000000000000000000000000000000000000815273__$4d6b0a3647b069121a3bb78d2db920912c$__9163b13c96a8916117bf9173ffffffffffffffffffffffffffffffffffffffff169085906004016156de565b61289261382c565b60408051808201909152600281527f3231000000000000000000000000000000000000000000000000000000000000602082015261ffff87166128e85760405162461bcd60e51b815260040161086591906154de565b5060408051808201909152600281527f3231000000000000000000000000000000000000000000000000000000000000602082015261ffff861661293f5760405162461bcd60e51b815260040161086591906154de565b508461ffff168661ffff1611156040518060400160405280600281526020017f3231000000000000000000000000000000000000000000000000000000000000815250906129a05760405162461bcd60e51b815260040161086591906154de565b5060408051808201909152600281527f3231000000000000000000000000000000000000000000000000000000000000602082015261271061ffff8616116129fb5760405162461bcd60e51b815260040161086591906154de565b50612710612a1061ffff878116908716614229565b11156040518060400160405280600281526020017f323100000000000000000000000000000000000000000000000000000000000081525090612a665760405162461bcd60e51b815260040161086591906154de565b50603554604080517fd1946dbc000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163d1946dbc91600480830192869291908290030181865afa158015612ad6573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612b1c919081019061562c565b905060005b8151811015612cd057603554825160009173ffffffffffffffffffffffffffffffffffffffff169063c44b11f790859085908110612b6157612b61614db6565b60200260200101516040518263ffffffff1660e01b8152600401612ba1919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015612bbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be291906152f3565b805190915060a81c60ff168a60ff161415612cbd57805161ffff168961ffff16116040518060400160405280600281526020017f323100000000000000000000000000000000000000000000000000000000000081525090612c575760405162461bcd60e51b815260040161086591906154de565b50805160101c61ffff168861ffff16116040518060400160405280600281526020017f323100000000000000000000000000000000000000000000000000000000000081525090612cbb5760405162461bcd60e51b815260040161086591906154de565b505b5080612cc881615186565b915050612b21565b50603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d579ea7d896040518060a001604052808b61ffff1681526020018a61ffff1681526020018961ffff1681526020018873ffffffffffffffffffffffffffffffffffffffff16815260200187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152506040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152612dc792919060040161581d565b600060405180830381600087803b158015612de157600080fd5b505af1158015612df5573d6000803e3d6000fd5b505050508760ff167f0acf8b4a3cace10779798a89a206a0ae73a71b63acdd3be2801d39c2ef7ab3cb888888888888604051612e3696959493929190615893565b60405180910390a25050505050505050565b6001805460ff1680612e595750303b155b80612e65575060005481115b612ed75760405162461bcd60e51b815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610865565b60015460ff16158015612f1457600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b603480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8516908117909155604080517f026b1d5f000000000000000000000000000000000000000000000000000000008152905163026b1d5f916004808201926020929091908290030181865afa158015612fab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fcf91906158df565b603580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055801561193f57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055505050565b61304f61382c565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa1580156130c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e491906152f3565b805190915060501c640fffffffff166130fd82846148ac565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b15801561317157600080fd5b505af1158015613185573d6000803e3d6000fd5b5050604080518481526020810187905273ffffffffffffffffffffffffffffffffffffffff881693507fc51aca575985d521c5072ad11549bad77013bb786d57f30f94b40ed8f8dc9bc4925001610661565b6131df61382c565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015613250573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327491906152f3565b905060ff8216156133a4576035546040517f6c6f6ae100000000000000000000000000000000000000000000000000000000815260ff8416600482015260009173ffffffffffffffffffffffffffffffffffffffff1690636c6f6ae190602401600060405180830381865afa1580156132f1573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261333791908101906158fc565b825190915060101c61ffff16816020015161ffff16116040518060400160405280600281526020017f3137000000000000000000000000000000000000000000000000000000000000815250906133a15760405162461bcd60e51b815260040161086591906154de565b50505b805160009060a81c60ff1690506133be8260ff8516614936565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152845160248301529091169063f51e435b90604401600060405180830381600087803b15801561343257600080fd5b505af1158015613446573d6000803e3d6000fd5b50506040805160ff80861682528716602082015273ffffffffffffffffffffffffffffffffffffffff881693507f5bb69795b6a2ea222d73a5f8939c23471a1f85a99c7ca43c207f1b71f10c6264925001610661565b6134a461382c565b6035546040517fc44b11f700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063c44b11f790602401602060405180830381865afa158015613515573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353991906152f3565b905061354581836149bc565b6035546040517ff51e435b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152835160248301529091169063f51e435b90604401600060405180830381600087803b1580156135b957600080fd5b505af11580156135cd573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167fc8ff3cc5b0fddaa3e6ebbbd7438f43393e4ea30e88b80ad016c1bc094655034d83604051611115911515815260200190565b603454604080517f707cd716000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163707cd7169160048083019260209291908290030181865afa15801561368b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136af91906158df565b6040517f13ee32e000000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff8216906313ee32e090602401602060405180830381865afa15801561371c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137409190615a27565b806137d457506040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156137b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137d49190615a27565b6040518060400160405280600181526020017f3500000000000000000000000000000000000000000000000000000000000000815250906138285760405162461bcd60e51b815260040161086591906154de565b5050565b603454604080517f707cd716000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163707cd7169160048083019260209291908290030181865afa15801561389c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c091906158df565b6040517f674b5e4d00000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff82169063674b5e4d90602401602060405180830381865afa15801561392d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139519190615a27565b806139e557506040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156139c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139e59190615a27565b6040518060400160405280600181526020017f3400000000000000000000000000000000000000000000000000000000000000815250906138285760405162461bcd60e51b815260040161086591906154de565b60408051808201909152600281527f37320000000000000000000000000000000000000000000000000000000000006020820152640fffffffff821115613a935760405162461bcd60e51b815260040161086591906154de565b5081517ffffffffffff000000000ffffffffffffffffffffffffffffffffffffffffffff1660b09190911b179052565b603454604080517f707cd716000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163707cd7169160048083019260209291908290030181865afa158015613b33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b5791906158df565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015613bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613be89190615a27565b6040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250906138285760405162461bcd60e51b815260040161086591906154de565b60408051808201909152600281527f3730000000000000000000000000000000000000000000000000000000000000602082015261ffff821115613c935760405162461bcd60e51b815260040161086591906154de565b5081517fffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffff1660989190911b179052565b603d81613cd1576000613cd4565b60015b83517fffffffffffffffffffffffffffffffffffffffffffffffffdfffffffffffffff1660ff9190911690911b1790915250565b603454604080517f707cd716000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163707cd7169160048083019260209291908290030181865afa158015613d78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d9c91906158df565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015613e09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e2d9190615a27565b80613ec157506040517f2500f2b600000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff821690632500f2b690602401602060405180830381865afa158015613e9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec19190615a27565b6040518060400160405280600181526020017f3300000000000000000000000000000000000000000000000000000000000000815250906138285760405162461bcd60e51b815260040161086591906154de565b603c81613f23576000613f26565b60015b83517fffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffffff1660ff9190911690911b1790915250565b60408051808201909152600281527f3637000000000000000000000000000000000000000000000000000000000000602082015261ffff821115613fb15760405162461bcd60e51b815260040161086591906154de565b5081517fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff1660409190911b179052565b60408051808201909152600281527f36390000000000000000000000000000000000000000000000000000000000006020820152640fffffffff82111561403b5760405162461bcd60e51b815260040161086591906154de565b5081517fffffffffffffffffffffffffff000000000fffffffffffffffffffffffffffff1660749190911b179052565b603a8161407957600061407c565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffffffff1660ff9190911690911b1790915250565b603454604080517f707cd716000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163707cd7169160048083019260209291908290030181865afa158015614120573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061414491906158df565b6040517f2500f2b600000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690632500f2b690602401602060405180830381865afa1580156141b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141d59190615a27565b6040518060400160405280600181526020017f3200000000000000000000000000000000000000000000000000000000000000815250906138285760405162461bcd60e51b815260040161086591906154de565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec778390048411151761425e57600080fd5b506127109102611388010490565b600080603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e860accb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061430091906158df565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291909116906335ea6a759060240161018060405180830381865afa15801561436f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143939190615a44565b50505050505050505092509250508060001480156143af575081155b6040518060400160405280600281526020017f3138000000000000000000000000000000000000000000000000000000000000815250906104cf5760405162461bcd60e51b815260040161086591906154de565b60408051808201909152600281527f3633000000000000000000000000000000000000000000000000000000000000602082015261ffff82111561445a5760405162461bcd60e51b815260040161086591906154de565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016179052565b60408051808201909152600281527f3634000000000000000000000000000000000000000000000000000000000000602082015261ffff8211156144db5760405162461bcd60e51b815260040161086591906154de565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff1660109190911b179052565b60408051808201909152600281527f3635000000000000000000000000000000000000000000000000000000000000602082015261ffff8211156145625760405162461bcd60e51b815260040161086591906154de565b5081517fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff1660209190911b179052565b603b816145a05760006145a3565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffff1660ff9190911690911b1790915250565b6039816145e55760006145e8565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffff1660ff9190911690911b1790915250565b603454604080517fe860accb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163e860accb9160048083019260209291908290030181865afa15801561468c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146b091906158df565b6040517f4d44ac4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529190911690634d44ac4f90602401602060405180830381865afa15801561471e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614742919061550e565b60408051808201909152600281527f39300000000000000000000000000000000000000000000000000000000000006020820152909150811561193f5760405162461bcd60e51b815260040161086591906154de565b603e816147a65760006147a9565b60015b83517fffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffffff1660ff9190911690911b1790915250565b60408051808201909152600281527f3733000000000000000000000000000000000000000000000000000000000000602082015264ffffffffff8211156148375760405162461bcd60e51b815260040161086591906154de565b5081517ff0000000000fffffffffffffffffffffffffffffffffffffffffffffffffffff1660d49190911b179052565b603881614875576000614878565b60015b83517ffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffff1660ff9190911690911b1790915250565b60408051808201909152600281527f36380000000000000000000000000000000000000000000000000000000000006020820152640fffffffff8211156149065760405162461bcd60e51b815260040161086591906154de565b5081517ffffffffffffffffffffffffffffffffffff000000000ffffffffffffffffffff1660509190911b179052565b60408051808201909152600281527f3731000000000000000000000000000000000000000000000000000000000000602082015260ff82111561498c5760405162461bcd60e51b815260040161086591906154de565b5081517fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1660a89190911b179052565b603f816149ca5760006149cd565b60015b83517fffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffff1660ff9190911690911b1790915250565b60008060208385031215614a1457600080fd5b823567ffffffffffffffff80821115614a2c57600080fd5b818501915085601f830112614a4057600080fd5b813581811115614a4f57600080fd5b8660208260051b8501011115614a6457600080fd5b60209290920196919550909350505050565b73ffffffffffffffffffffffffffffffffffffffff81168114614a9857600080fd5b50565b8035614aa681614a76565b919050565b60008060408385031215614abe57600080fd5b8235614ac981614a76565b946020939093013593505050565b60008060408385031215614aea57600080fd5b8235614af581614a76565b91506020830135614b0581614a76565b809150509250929050565b6fffffffffffffffffffffffffffffffff81168114614a9857600080fd5b600060208284031215614b4057600080fd5b8135614b4b81614b10565b9392505050565b600060208284031215614b6457600080fd5b5035919050565b8015158114614a9857600080fd5b60008060408385031215614b8c57600080fd5b8235614b9781614a76565b91506020830135614b0581614b6b565b600060208284031215614bb957600080fd5b8135614b4b81614a76565b600060208284031215614bd657600080fd5b813567ffffffffffffffff811115614bed57600080fd5b820160c08185031215614b4b57600080fd5b600060208284031215614c1157600080fd5b8135614b4b81614b6b565b60008060008060808587031215614c3257600080fd5b8435614c3d81614a76565b966020860135965060408601359560600135945092505050565b600060208284031215614c6957600080fd5b813567ffffffffffffffff811115614c8057600080fd5b820160e08185031215614b4b57600080fd5b803560ff81168114614aa657600080fd5b61ffff81168114614a9857600080fd5b600080600080600080600060c0888a031215614cce57600080fd5b614cd788614c92565b96506020880135614ce781614ca3565b95506040880135614cf781614ca3565b94506060880135614d0781614ca3565b93506080880135614d1781614a76565b925060a088013567ffffffffffffffff80821115614d3457600080fd5b818a0191508a601f830112614d4857600080fd5b813581811115614d5757600080fd5b8b6020828501011115614d6957600080fd5b60208301945080935050505092959891949750929550565b60008060408385031215614d9457600080fd5b8235614d9f81614a76565b9150614dad60208401614c92565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe21833603018112614e1957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614e5857600080fd5b830160208101925035905067ffffffffffffffff811115614e7857600080fd5b803603831315614e8757600080fd5b9250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152614f2160408201614f0784614a9b565b73ffffffffffffffffffffffffffffffffffffffff169052565b6000614f2f60208401614a9b565b73ffffffffffffffffffffffffffffffffffffffff166060830152614f5660408401614a9b565b73ffffffffffffffffffffffffffffffffffffffff166080830152614f7d60608401614c92565b60ff1660a0830152614f9160808401614a9b565b73ffffffffffffffffffffffffffffffffffffffff1660c0830152614fb860a08401614a9b565b73ffffffffffffffffffffffffffffffffffffffff1660e0830152614fdf60c08401614a9b565b6101006150038185018373ffffffffffffffffffffffffffffffffffffffff169052565b61500f60e08601614a9b565b91506101206150358186018473ffffffffffffffffffffffffffffffffffffffff169052565b61504182870187614e23565b935091506101e0610140818188015261505f61022088018686614e8e565b945061506d83890189614e23565b945092507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06101608189880301818a01526150a9878787614e8e565b96506150b7838b018b614e23565b9650945061018092508189880301838a01526150d4878787614e8e565b96506150e2818b018b614e23565b96509450506101a08189880301818a01526150fe878787614e8e565b965061510c838b018b614e23565b965094506101c092508189880301838a0152615129878787614e8e565b9650615137818b018b614e23565b9650945050808887030183890152615150868686614e8e565b955061515e828a018a614e23565b95509350808887030161020089015250505061517b838383614e8e565b979650505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151df577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff81118282101715615239576152396151e6565b60405290565b60405160a0810167ffffffffffffffff81118282101715615239576152396151e6565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152a9576152a96151e6565b604052919050565b6000602082840312156152c357600080fd5b6040516020810181811067ffffffffffffffff821117156152e6576152e66151e6565b6040529151825250919050565b60006020828403121561530557600080fd5b614b4b83836152b1565b8051614aa681614b10565b805164ffffffffff81168114614aa657600080fd5b8051614aa681614ca3565b8051614aa681614a76565b60006101e0828403121561535857600080fd5b615360615215565b61536a84846152b1565b81526153786020840161530f565b60208201526153896040840161530f565b604082015261539a6060840161530f565b60608201526153ab6080840161530f565b60808201526153bc60a0840161530f565b60a08201526153cd60c0840161531a565b60c08201526153de60e0840161532f565b60e08201526101006153f181850161533a565b9082015261012061540384820161533a565b9082015261014061541584820161533a565b9082015261016061542784820161533a565b9082015261018061543984820161530f565b908201526101a061544b84820161530f565b908201526101c061545d84820161530f565b908201529392505050565b60005b8381101561548357818101518382015260200161546b565b838111156104cf5750506000910152565b600081518084526154ac816020860160208601615468565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000614b4b6020830184615494565b60006020828403121561550357600080fd5b8151614b4b81614b10565b60006020828403121561552057600080fd5b5051919050565b600073ffffffffffffffffffffffffffffffffffffffff808516835260406020840152833561555581614a76565b81166040840152602084013561556a81614a76565b16606083015261557d6040840184614e23565b60c0608085015261559361010085018284614e8e565b9150506155a36060850185614e23565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0808685030160a08701526155d9848385614e8e565b93506155e760808801614a9b565b73ffffffffffffffffffffffffffffffffffffffff811660c0880152925061561260a0880188614e23565b93509150808685030160e08701525061517b838383614e8e565b6000602080838503121561563f57600080fd5b825167ffffffffffffffff8082111561565757600080fd5b818501915085601f83011261566b57600080fd5b81518181111561567d5761567d6151e6565b8060051b915061568e848301615262565b81815291830184019184810190888411156156a857600080fd5b938501935b838510156156d257845192506156c283614a76565b82825293850193908501906156ad565b98975050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808516835260406020840152833561570c81614a76565b16604083015261571e60208401614a9b565b73ffffffffffffffffffffffffffffffffffffffff16606083015261574560408401614a9b565b73ffffffffffffffffffffffffffffffffffffffff16608083015261576d6060840184614e23565b60e060a085015261578361012085018284614e8e565b9150506157936080850185614e23565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0808685030160c08701526157c9848385614e8e565b93506157d760a08801614a9b565b73ffffffffffffffffffffffffffffffffffffffff811660e0880152925061580260c0880188614e23565b9350915080868503016101008701525061517b838383614e8e565b60ff8316815260406020820152600061ffff8084511660408401528060208501511660608401528060408501511660808401525073ffffffffffffffffffffffffffffffffffffffff60608401511660a0830152608083015160a060c084015261588a60e0840182615494565b95945050505050565b600061ffff8089168352808816602084015280871660408401525073ffffffffffffffffffffffffffffffffffffffff8516606083015260a060808301526156d260a083018486614e8e565b6000602082840312156158f157600080fd5b8151614b4b81614a76565b6000602080838503121561590f57600080fd5b825167ffffffffffffffff8082111561592757600080fd5b9084019060a0828703121561593b57600080fd5b61594361523f565b825161594e81614ca3565b81528284015161595d81614ca3565b81850152604083015161596f81614ca3565b6040820152606083015161598281614a76565b606082015260808301518281111561599957600080fd5b80840193505086601f8401126159ae57600080fd5b8251828111156159c0576159c06151e6565b6159f0857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615262565b92508083528785828601011115615a0657600080fd5b615a1581868501878701615468565b50608081019190915295945050505050565b600060208284031215615a3957600080fd5b8151614b4b81614b6b565b6000806000806000806000806000806000806101808d8f031215615a6757600080fd5b8c519b5060208d01519a5060408d0151995060608d0151985060808d0151975060a08d0151965060c08d0151955060e08d015194506101008d015193506101208d015192506101408d01519150615ac16101608e0161531a565b90509295989b509295989b509295989b56fea264697066735822122097bdda619e2cb8a4b59592b2108978d2ac3aef06488831f165d7ac68a2baac0764736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1CF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7AF635A6 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xAEB4FCC1 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xC4D66DE8 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x3B8 JUMPI DUP1 PUSH4 0xD14A0983 EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0xD4FE3F99 EQ PUSH2 0x3DE JUMPI DUP1 PUSH4 0xF213EF0E EQ PUSH2 0x3F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xAEB4FCC1 EQ PUSH2 0x36C JUMPI DUP1 PUSH4 0xB736AAEB EQ PUSH2 0x37F JUMPI DUP1 PUSH4 0xBB01C37C EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xC19D61E4 EQ PUSH2 0x3A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8A751A60 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x8A751A60 EQ PUSH2 0x320 JUMPI DUP1 PUSH4 0x96E957C4 EQ PUSH2 0x333 JUMPI DUP1 PUSH4 0xA7FA83B7 EQ PUSH2 0x346 JUMPI DUP1 PUSH4 0xAD4E6432 EQ PUSH2 0x359 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7AF635A6 EQ PUSH2 0x2E0 JUMPI DUP1 PUSH4 0x7C4E560B EQ PUSH2 0x2FA JUMPI DUP1 PUSH4 0x8A493676 EQ PUSH2 0x30D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x48D9FBA9 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x63C9B860 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x63C9B860 EQ PUSH2 0x294 JUMPI DUP1 PUSH4 0x682CF264 EQ PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x7626CDE3 EQ PUSH2 0x2BA JUMPI DUP1 PUSH4 0x7641F3D9 EQ PUSH2 0x2CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x48D9FBA9 EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0x4B4E6753 EQ PUSH2 0x26E JUMPI DUP1 PUSH4 0x571F03E5 EQ PUSH2 0x281 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1DF970BD GT PUSH2 0x1AD JUMPI DUP1 PUSH4 0x1DF970BD EQ PUSH2 0x20F JUMPI DUP1 PUSH4 0x26D2CEC2 EQ PUSH2 0x222 JUMPI DUP1 PUSH4 0x3036B439 EQ PUSH2 0x235 JUMPI DUP1 PUSH4 0x38AE0CC3 EQ PUSH2 0x248 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2FB45E6 EQ PUSH2 0x1D4 JUMPI DUP1 PUSH4 0x145F5892 EQ PUSH2 0x1E9 JUMPI DUP1 PUSH4 0x1D2118F9 EQ PUSH2 0x1FC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E7 PUSH2 0x1E2 CALLDATASIZE PUSH1 0x4 PUSH2 0x4A01 JUMP JUMPDEST PUSH2 0x404 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1E7 PUSH2 0x1F7 CALLDATASIZE PUSH1 0x4 PUSH2 0x4AAB JUMP JUMPDEST PUSH2 0x4D5 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x20A CALLDATASIZE PUSH1 0x4 PUSH2 0x4AD7 JUMP JUMPDEST PUSH2 0x66F JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x21D CALLDATASIZE PUSH1 0x4 PUSH2 0x4B2E JUMP JUMPDEST PUSH2 0x7F4 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x230 CALLDATASIZE PUSH1 0x4 PUSH2 0x4AAB JUMP JUMPDEST PUSH2 0xA76 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x243 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B52 JUMP JUMPDEST PUSH2 0xC5B JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x256 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B79 JUMP JUMPDEST PUSH2 0xE0B JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x269 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B79 JUMP JUMPDEST PUSH2 0xF96 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x27C CALLDATASIZE PUSH1 0x4 PUSH2 0x4AAB JUMP JUMPDEST PUSH2 0x1122 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x28F CALLDATASIZE PUSH1 0x4 PUSH2 0x4AAB JUMP JUMPDEST PUSH2 0x1307 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x2A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x4BA7 JUMP JUMPDEST PUSH2 0x1497 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x2B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B79 JUMP JUMPDEST PUSH2 0x1568 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x2C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x174D JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x2DB CALLDATASIZE PUSH1 0x4 PUSH2 0x4BFF JUMP JUMPDEST PUSH2 0x17F2 JUMP JUMPDEST PUSH2 0x2E8 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1E7 PUSH2 0x308 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1C JUMP JUMPDEST PUSH2 0x1944 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x31B CALLDATASIZE PUSH1 0x4 PUSH2 0x4B2E JUMP JUMPDEST PUSH2 0x1C66 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x32E CALLDATASIZE PUSH1 0x4 PUSH2 0x4B79 JUMP JUMPDEST PUSH2 0x1ED7 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x341 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B79 JUMP JUMPDEST PUSH2 0x20C0 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x354 CALLDATASIZE PUSH1 0x4 PUSH2 0x4B79 JUMP JUMPDEST PUSH2 0x223F JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x367 CALLDATASIZE PUSH1 0x4 PUSH2 0x4BC4 JUMP JUMPDEST PUSH2 0x23EC JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x37A CALLDATASIZE PUSH1 0x4 PUSH2 0x4AAB JUMP JUMPDEST PUSH2 0x245E JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x38D CALLDATASIZE PUSH1 0x4 PUSH2 0x4B79 JUMP JUMPDEST PUSH2 0x268B JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x3A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x4C57 JUMP JUMPDEST PUSH2 0x2818 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x3B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x4CB3 JUMP JUMPDEST PUSH2 0x288A JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x3C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x4BA7 JUMP JUMPDEST PUSH2 0x2E48 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x3D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x4AAB JUMP JUMPDEST PUSH2 0x3047 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x3EC CALLDATASIZE PUSH1 0x4 PUSH2 0x4D81 JUMP JUMPDEST PUSH2 0x31D7 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0x3FF CALLDATASIZE PUSH1 0x4 PUSH2 0x4B79 JUMP JUMPDEST PUSH2 0x349C JUMP JUMPDEST PUSH2 0x40C PUSH2 0x361B JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x4CF JUMPI PUSH20 0x0 PUSH4 0xDF59B8B2 DUP4 DUP7 DUP7 DUP6 DUP2 DUP2 LT PUSH2 0x45D JUMPI PUSH2 0x45D PUSH2 0x4DB6 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0x46F SWAP2 SWAP1 PUSH2 0x4DE5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x48C SWAP3 SWAP2 SWAP1 PUSH2 0x4ED7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x4B8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 DUP1 PUSH2 0x4C7 SWAP1 PUSH2 0x5186 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x428 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x4DD PUSH2 0x382C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x54E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x572 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0xB0 SHR PUSH5 0xFFFFFFFFF AND PUSH2 0x58B DUP3 DUP5 PUSH2 0x3A39 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x613 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0x9808B1FC5ABDE94EDF02FDDE393BEA0D2E4795999BA31695472848638B5C29F SWAP3 POP ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP JUMP JUMPDEST PUSH2 0x677 PUSH2 0x382C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6E9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x70D SWAP2 SWAP1 PUSH2 0x5345 JUMP JUMPDEST PUSH2 0x160 DUP2 ADD MLOAD PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0x1D2118F900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP7 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP4 SWAP5 POP SWAP2 SWAP3 AND SWAP1 PUSH4 0x1D2118F9 SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x78B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x79F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND DUP3 MSTORE DUP8 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE DUP9 AND SWAP4 POP PUSH32 0xDB8DADA53709CE4988154324196790C2E4A60C377E1256790946F83B87DB3C33 SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x7FC PUSH2 0x3AC3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3139000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND GT ISZERO PUSH2 0x86E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x6A99C03600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x6A99C036 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x903 SWAP2 SWAP1 PUSH2 0x54F1 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x74B2E4300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 PUSH4 0xBCB6E522 SWAP2 DUP4 SWAP2 PUSH4 0x74B2E43 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x97E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9A2 SWAP2 SWAP1 PUSH2 0x54F1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP5 SWAP1 SHL AND DUP2 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP6 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xA0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA20 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND DUP3 MSTORE DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0xE7E0C75E1FC2D0BD83DC85D59F085B3E763107C392FB368E85572B292F1F5576 SWAP4 POP ADD SWAP1 POP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH2 0xA7E PUSH2 0x382C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3730000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 DUP3 GT ISZERO PUSH2 0xAD5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB47 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB6B SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x98 SHR PUSH2 0xFFFF AND PUSH2 0xB81 DUP3 DUP5 PUSH2 0x3C3C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC09 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0xB5B0A963825337808B6E3154DE8E98027595A5CAD4219BB3A9BC55B192F4B391 SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0xC63 PUSH2 0x3AC3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3232000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 DUP3 GT ISZERO PUSH2 0xCBA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x272D907200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x272D9072 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD2B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD4F SWAP2 SWAP1 PUSH2 0x550E JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0x3036B43900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE SWAP2 SWAP3 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0x3036B439 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDBC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xDD0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP7 SWAP1 MSTORE PUSH32 0x30B17CB587A89089D003457C432F73E22AEEE93DE425E92224BA01080260ECD9 SWAP4 POP ADD SWAP1 POP PUSH2 0xA6A JUMP JUMPDEST PUSH2 0xE13 PUSH2 0x382C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE84 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEA8 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST SWAP1 POP PUSH2 0xEB4 DUP2 DUP4 PUSH2 0x3CC3 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF28 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF3C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP2 MSTORE DUP6 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x74ADF6AAF58C08BC4F993640385E136522375EA3D1589A10D02ADBB906C67D1C SWAP4 POP ADD SWAP1 POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP JUMP JUMPDEST PUSH2 0xF9E PUSH2 0x3D08 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x100F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1033 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST SWAP1 POP PUSH2 0x103F DUP2 DUP4 PUSH2 0x3F15 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x10B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xE188D542A5F11925D3A3AF33703CDD30A43CB3E8066A3CF68B1B57F61A5A94B5 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1115 SWAP2 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH2 0x112A PUSH2 0x382C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3637000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 DUP3 GT ISZERO PUSH2 0x1181 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11F3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1217 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x40 SHR PUSH2 0xFFFF AND PUSH2 0x122D DUP3 DUP5 PUSH2 0x3F5A JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x12B5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0xB46E2B82B0C2CF3D7D9DECE53635E165C53E0EAA7A44F904D61A2B7174826AEF SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x130F PUSH2 0x382C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1380 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13A4 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x74 SHR PUSH5 0xFFFFFFFFF AND PUSH2 0x13BD DUP3 DUP5 PUSH2 0x3FE1 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1431 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1445 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0x263602682188540A2D633561C0B4453B7D8566285E99F9F6018B8EF2FACEF49 SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x149F PUSH2 0x3AC3 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0x63C9B86000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x63C9B860 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x150C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1520 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP3 POP PUSH32 0xEEEC4C06F7ADAD215CBDB4D2960896C83C26AEDCE02DDE76D36FA28588D62DA4 SWAP2 POP PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH2 0x1570 PUSH2 0x382C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15E1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1605 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST SWAP1 POP DUP2 PUSH2 0x166D JUMPI DUP1 MLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3838000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH8 0x800000000000000 AND ISZERO PUSH2 0x166B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP JUMPDEST PUSH2 0x1677 DUP2 DUP4 PUSH2 0x406B JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16FF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x2443BA28E8D1D88D531A3D90B981816A4F3B3C7F1FD4085C6029E81D1B7A570D DUP4 PUSH1 0x40 MLOAD PUSH2 0x1115 SWAP2 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x1755 PUSH2 0x3AC3 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF5B50E7000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0x0 SWAP2 PUSH4 0xF5B50E70 SWAP2 PUSH2 0x17BF SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x5527 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x17D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x17EB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x17FA PUSH2 0x40B0 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xD1946DBC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0xD1946DBC SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 DUP7 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1869 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 0x18AF SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x562C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x193F JUMPI PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x18E7 JUMPI PUSH2 0x18E7 PUSH2 0x4DB6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x192D JUMPI PUSH2 0x192D DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x191F JUMPI PUSH2 0x191F PUSH2 0x4DB6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 PUSH2 0xF96 JUMP JUMPDEST DUP1 PUSH2 0x1937 DUP2 PUSH2 0x5186 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x18B4 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x194C PUSH2 0x382C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3230000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP3 DUP5 GT ISZERO PUSH2 0x19A1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A13 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A37 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST SWAP1 POP DUP3 ISZERO PUSH2 0x1AFF JUMPI PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3230000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 DUP4 GT PUSH2 0x1A95 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP PUSH2 0x2710 PUSH2 0x1AA3 DUP5 DUP5 PUSH2 0x4229 JUMP JUMPDEST GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3230000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1AF9 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP PUSH2 0x1B5C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3230000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE DUP3 ISZERO PUSH2 0x1B52 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP PUSH2 0x1B5C DUP6 PUSH2 0x426C JUMP JUMPDEST PUSH2 0x1B66 DUP2 DUP6 PUSH2 0x4403 JUMP JUMPDEST PUSH2 0x1B70 DUP2 DUP5 PUSH2 0x4484 JUMP JUMPDEST PUSH2 0x1B7A DUP2 DUP4 PUSH2 0x450B JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1C02 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP8 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE SWAP1 DUP2 ADD DUP6 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP3 POP PUSH32 0x637FEBBDA9275AEA2E85C0FF690444C8D87EB2E8339BBEDE9715ABCC89CB0995 SWAP2 POP PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1C6E PUSH2 0x3AC3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3139000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND GT ISZERO PUSH2 0x1CD7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x74B2E4300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x74B2E43 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D48 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D6C SWAP2 SWAP1 PUSH2 0x54F1 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x6A99C03600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD SWAP3 SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 PUSH4 0xBCB6E522 SWAP2 DUP6 SWAP2 DUP5 SWAP2 PUSH4 0x6A99C036 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DE8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E0C SWAP2 SWAP1 PUSH2 0x54F1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1E75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1E89 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND DUP3 MSTORE DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x71ABA182C9D0529B516DE7A78BED74D49C207EF7E152F52F7EA5D8730138F643 SWAP4 POP ADD SWAP1 POP PUSH2 0xA6A JUMP JUMPDEST PUSH2 0x1EDF PUSH2 0x382C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F50 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F74 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST SWAP1 POP DUP2 ISZERO PUSH2 0x1FE0 JUMPI DUP1 MLOAD PUSH8 0x400000000000000 AND ISZERO ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3330000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1FDE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP JUMPDEST PUSH2 0x1FEA DUP2 DUP4 PUSH2 0x4592 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x205E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2072 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xB64D0941719ACD363F1A6BE3D8525D8EC9D71738F7445AABCD88D7939B472E7 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1115 SWAP2 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x20C8 PUSH2 0x382C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2139 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x215D SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST SWAP1 POP PUSH2 0x2169 DUP2 DUP4 PUSH2 0x45D7 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x21DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x21F1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xC4443D258A350D27DC50C378B2EBF165E6469725F786D21B30CAB16823F5587 DUP4 PUSH1 0x40 MLOAD PUSH2 0x1115 SWAP2 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x2247 PUSH2 0x382C JUMP JUMPDEST DUP1 ISZERO PUSH2 0x2256 JUMPI PUSH2 0x2256 DUP3 PUSH2 0x461C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x22EB SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2303 DUP3 MLOAD PUSH8 0x4000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x230F DUP3 DUP5 PUSH2 0x4798 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2383 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2397 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 ISZERO ISZERO DUP2 MSTORE DUP7 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0x842A280B07E8E502A9101F32A3B768EBABA3655556DD674F0831900861FC674B SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x23F4 PUSH2 0x3AC3 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xB0F0935500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0x0 SWAP2 PUSH4 0xB0F09355 SWAP2 PUSH2 0x17BF SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x5527 JUMP JUMPDEST PUSH2 0x2466 PUSH2 0x382C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x24FB SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND DUP1 PUSH2 0x2518 JUMPI PUSH2 0x2518 DUP5 PUSH2 0x426C JUMP JUMPDEST PUSH2 0x2522 DUP3 DUP5 PUSH2 0x47DD JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2596 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x25AA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH1 0x0 EQ ISZERO PUSH2 0x263D JUMPI PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xE43E88A100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xE43E88A1 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2624 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2638 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP2 PUSH32 0x6824A6C7FBC10D2979B1F1CCF2DD4ED0436541679A661DEDB5C10BD4BE830682 SWAP2 ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x2693 PUSH2 0x3AC3 JUMP JUMPDEST DUP1 PUSH2 0x26A1 JUMPI PUSH2 0x26A1 DUP3 PUSH2 0x426C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2712 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2736 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST SWAP1 POP PUSH2 0x2742 DUP2 DUP4 PUSH2 0x4867 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x27B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x27CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xC36C7D11BA01A5869D52AA4A3781939DAB851CBC9EE6E7FDCEDC7D58898A3F1E DUP4 PUSH1 0x40 MLOAD PUSH2 0x1115 SWAP2 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x2820 PUSH2 0x3AC3 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xB13C96A800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0x0 SWAP2 PUSH4 0xB13C96A8 SWAP2 PUSH2 0x17BF SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x56DE JUMP JUMPDEST PUSH2 0x2892 PUSH2 0x382C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP8 AND PUSH2 0x28E8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP7 AND PUSH2 0x293F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP DUP5 PUSH2 0xFFFF AND DUP7 PUSH2 0xFFFF AND GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x29A0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2710 PUSH2 0xFFFF DUP7 AND GT PUSH2 0x29FB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP PUSH2 0x2710 PUSH2 0x2A10 PUSH2 0xFFFF DUP8 DUP2 AND SWAP1 DUP8 AND PUSH2 0x4229 JUMP JUMPDEST GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2A66 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP PUSH1 0x35 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xD1946DBC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0xD1946DBC SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 DUP7 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2AD6 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 0x2B1C SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x562C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x2CD0 JUMPI PUSH1 0x35 SLOAD DUP3 MLOAD PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0xC44B11F7 SWAP1 DUP6 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0x2B61 JUMPI PUSH2 0x2B61 PUSH2 0x4DB6 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2BA1 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2BBE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2BE2 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0xA8 SHR PUSH1 0xFF AND DUP11 PUSH1 0xFF AND EQ ISZERO PUSH2 0x2CBD JUMPI DUP1 MLOAD PUSH2 0xFFFF AND DUP10 PUSH2 0xFFFF AND GT PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2C57 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP DUP1 MLOAD PUSH1 0x10 SHR PUSH2 0xFFFF AND DUP9 PUSH2 0xFFFF AND GT PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3231000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x2CBB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP JUMPDEST POP DUP1 PUSH2 0x2CC8 DUP2 PUSH2 0x5186 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2B21 JUMP JUMPDEST POP PUSH1 0x35 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD579EA7D DUP10 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP11 PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP8 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 SWAP2 MSTORE POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0xE0 DUP6 SWAP1 SHL AND DUP2 MSTORE PUSH2 0x2DC7 SWAP3 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x581D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2DE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2DF5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP8 PUSH1 0xFF AND PUSH32 0xACF8B4A3CACE10779798A89A206A0AE73A71B63ACDD3BE2801D39C2EF7AB3CB DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH1 0x40 MLOAD PUSH2 0x2E36 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5893 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x2E59 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x2E65 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x2ED7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x865 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x2F14 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH1 0x34 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0x26B1D5F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0x26B1D5F SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2FAB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2FCF SWAP2 SWAP1 PUSH2 0x58DF JUMP JUMPDEST PUSH1 0x35 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x193F JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH2 0x304F PUSH2 0x382C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x30C0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x30E4 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x50 SHR PUSH5 0xFFFFFFFFF AND PUSH2 0x30FD DUP3 DUP5 PUSH2 0x48AC JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3171 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3185 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0xC51ACA575985D521C5072AD11549BAD77013BB786D57F30F94B40ED8F8DC9BC4 SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x31DF PUSH2 0x382C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3250 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3274 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST SWAP1 POP PUSH1 0xFF DUP3 AND ISZERO PUSH2 0x33A4 JUMPI PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0x6C6F6AE100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0xFF DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0x6C6F6AE1 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x32F1 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 0x3337 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x58FC JUMP JUMPDEST DUP3 MLOAD SWAP1 SWAP2 POP PUSH1 0x10 SHR PUSH2 0xFFFF AND DUP2 PUSH1 0x20 ADD MLOAD PUSH2 0xFFFF AND GT PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3137000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x33A1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP POP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0xA8 SHR PUSH1 0xFF AND SWAP1 POP PUSH2 0x33BE DUP3 PUSH1 0xFF DUP6 AND PUSH2 0x4936 JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3432 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3446 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF DUP1 DUP7 AND DUP3 MSTORE DUP8 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP4 POP PUSH32 0x5BB69795B6A2EA222D73A5F8939C23471A1F85A99C7CA43C207F1B71F10C6264 SWAP3 POP ADD PUSH2 0x661 JUMP JUMPDEST PUSH2 0x34A4 PUSH2 0x382C JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC44B11F700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 AND SWAP1 PUSH4 0xC44B11F7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3515 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3539 SWAP2 SWAP1 PUSH2 0x52F3 JUMP JUMPDEST SWAP1 POP PUSH2 0x3545 DUP2 DUP4 PUSH2 0x49BC JUMP JUMPDEST PUSH1 0x35 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF51E435B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 MLOAD PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF51E435B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x35B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x35CD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xC8FF3CC5B0FDDAA3E6EBBBD7438F43393E4EA30E88B80AD016C1BC094655034D DUP4 PUSH1 0x40 MLOAD PUSH2 0x1115 SWAP2 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x707CD716 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x368B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x36AF SWAP2 SWAP1 PUSH2 0x58DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x13EE32E000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x13EE32E0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x371C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3740 SWAP2 SWAP1 PUSH2 0x5A27 JUMP JUMPDEST DUP1 PUSH2 0x37D4 JUMPI POP PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x37B0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x37D4 SWAP2 SWAP1 PUSH2 0x5A27 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3500000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3828 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x707CD716 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x389C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x38C0 SWAP2 SWAP1 PUSH2 0x58DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x674B5E4D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x674B5E4D SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x392D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3951 SWAP2 SWAP1 PUSH2 0x5A27 JUMP JUMPDEST DUP1 PUSH2 0x39E5 JUMPI POP PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x39C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x39E5 SWAP2 SWAP1 PUSH2 0x5A27 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3400000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3828 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3732000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFF DUP3 GT ISZERO PUSH2 0x3A93 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xB0 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x707CD716 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3B33 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3B57 SWAP2 SWAP1 PUSH2 0x58DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3BC4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3BE8 SWAP2 SWAP1 PUSH2 0x5A27 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3828 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3730000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x3C93 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x98 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3D DUP2 PUSH2 0x3CD1 JUMPI PUSH1 0x0 PUSH2 0x3CD4 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x707CD716 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3D78 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3D9C SWAP2 SWAP1 PUSH2 0x58DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3E09 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3E2D SWAP2 SWAP1 PUSH2 0x5A27 JUMP JUMPDEST DUP1 PUSH2 0x3EC1 JUMPI POP PUSH1 0x40 MLOAD PUSH32 0x2500F2B600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x2500F2B6 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3E9D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3EC1 SWAP2 SWAP1 PUSH2 0x5A27 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3300000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3828 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST PUSH1 0x3C DUP2 PUSH2 0x3F23 JUMPI PUSH1 0x0 PUSH2 0x3F26 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3637000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x3FB1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF AND PUSH1 0x40 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3639000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFF DUP3 GT ISZERO PUSH2 0x403B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x74 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3A DUP2 PUSH2 0x4079 JUMPI PUSH1 0x0 PUSH2 0x407C JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x707CD71600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0x707CD716 SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4120 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4144 SWAP2 SWAP1 PUSH2 0x58DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x2500F2B600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x2500F2B6 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x41B1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x41D5 SWAP2 SWAP1 PUSH2 0x5A27 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3200000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x3828 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x425E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x34 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xE860ACCB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x42DC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4300 SWAP2 SWAP1 PUSH2 0x58DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x180 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x436F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4393 SWAP2 SWAP1 PUSH2 0x5A44 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP SWAP3 POP SWAP3 POP POP DUP1 PUSH1 0x0 EQ DUP1 ISZERO PUSH2 0x43AF JUMPI POP DUP2 ISZERO JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3138000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x4CF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3633000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x445A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 AND OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3634000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x44DB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF AND PUSH1 0x10 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3635000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP3 GT ISZERO PUSH2 0x4562 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF AND PUSH1 0x20 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3B DUP2 PUSH2 0x45A0 JUMPI PUSH1 0x0 PUSH2 0x45A3 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x39 DUP2 PUSH2 0x45E5 JUMPI PUSH1 0x0 PUSH2 0x45E8 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xE860ACCB00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH4 0xE860ACCB SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x468C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x46B0 SWAP2 SWAP1 PUSH2 0x58DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4D44AC4F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x4D44AC4F SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x471E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4742 SWAP2 SWAP1 PUSH2 0x550E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3930000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 ISZERO PUSH2 0x193F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST PUSH1 0x3E DUP2 PUSH2 0x47A6 JUMPI PUSH1 0x0 PUSH2 0x47A9 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3733000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x4837 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xD4 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x38 DUP2 PUSH2 0x4875 JUMPI PUSH1 0x0 PUSH2 0x4878 JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3638000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH5 0xFFFFFFFFF DUP3 GT ISZERO PUSH2 0x4906 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF AND PUSH1 0x50 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3731000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xFF DUP3 GT ISZERO PUSH2 0x498C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x865 SWAP2 SWAP1 PUSH2 0x54DE JUMP JUMPDEST POP DUP2 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xA8 SWAP2 SWAP1 SWAP2 SHL OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x3F DUP2 PUSH2 0x49CA JUMPI PUSH1 0x0 PUSH2 0x49CD JUMP JUMPDEST PUSH1 0x1 JUMPDEST DUP4 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF AND PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP1 SWAP2 SHL OR SWAP1 SWAP2 MSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4A14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x4A2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4A40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x4A4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x4A64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 SWAP1 SWAP3 ADD SWAP7 SWAP2 SWAP6 POP SWAP1 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4A98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x4AA6 DUP2 PUSH2 0x4A76 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4ABE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4AC9 DUP2 PUSH2 0x4A76 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4AEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4AF5 DUP2 PUSH2 0x4A76 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4B05 DUP2 PUSH2 0x4A76 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4A98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4B40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4B4B DUP2 PUSH2 0x4B10 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4B64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x4A98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4B8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4B97 DUP2 PUSH2 0x4A76 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x4B05 DUP2 PUSH2 0x4B6B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4BB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4B4B DUP2 PUSH2 0x4A76 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4BD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4BED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0xC0 DUP2 DUP6 SUB SLT ISZERO PUSH2 0x4B4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4C11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x4B4B DUP2 PUSH2 0x4B6B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4C32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x4C3D DUP2 PUSH2 0x4A76 JUMP JUMPDEST SWAP7 PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD SWAP6 PUSH1 0x60 ADD CALLDATALOAD SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4C69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4C80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0xE0 DUP2 DUP6 SUB SLT ISZERO PUSH2 0x4B4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x4AA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x4A98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xC0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x4CCE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4CD7 DUP9 PUSH2 0x4C92 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x4CE7 DUP2 PUSH2 0x4CA3 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH2 0x4CF7 DUP2 PUSH2 0x4CA3 JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH2 0x4D07 DUP2 PUSH2 0x4CA3 JUMP JUMPDEST SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH2 0x4D17 DUP2 PUSH2 0x4A76 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x4D34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP11 ADD SWAP2 POP DUP11 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4D48 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x4D57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP12 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x4D69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4D94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x4D9F DUP2 PUSH2 0x4A76 JUMP JUMPDEST SWAP2 POP PUSH2 0x4DAD PUSH1 0x20 DUP5 ADD PUSH2 0x4C92 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE21 DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x4E19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x4E58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x20 DUP2 ADD SWAP3 POP CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4E78 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATASIZE SUB DUP4 SGT ISZERO PUSH2 0x4E87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 ADD ADD MSTORE PUSH1 0x0 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP5 ADD ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x4F21 PUSH1 0x40 DUP3 ADD PUSH2 0x4F07 DUP5 PUSH2 0x4A9B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4F2F PUSH1 0x20 DUP5 ADD PUSH2 0x4A9B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x4F56 PUSH1 0x40 DUP5 ADD PUSH2 0x4A9B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x4F7D PUSH1 0x60 DUP5 ADD PUSH2 0x4C92 JUMP JUMPDEST PUSH1 0xFF AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x4F91 PUSH1 0x80 DUP5 ADD PUSH2 0x4A9B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x4FB8 PUSH1 0xA0 DUP5 ADD PUSH2 0x4A9B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x4FDF PUSH1 0xC0 DUP5 ADD PUSH2 0x4A9B JUMP JUMPDEST PUSH2 0x100 PUSH2 0x5003 DUP2 DUP6 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x500F PUSH1 0xE0 DUP7 ADD PUSH2 0x4A9B JUMP JUMPDEST SWAP2 POP PUSH2 0x120 PUSH2 0x5035 DUP2 DUP7 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x5041 DUP3 DUP8 ADD DUP8 PUSH2 0x4E23 JUMP JUMPDEST SWAP4 POP SWAP2 POP PUSH2 0x1E0 PUSH2 0x140 DUP2 DUP2 DUP9 ADD MSTORE PUSH2 0x505F PUSH2 0x220 DUP9 ADD DUP7 DUP7 PUSH2 0x4E8E JUMP JUMPDEST SWAP5 POP PUSH2 0x506D DUP4 DUP10 ADD DUP10 PUSH2 0x4E23 JUMP JUMPDEST SWAP5 POP SWAP3 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 PUSH2 0x160 DUP2 DUP10 DUP9 SUB ADD DUP2 DUP11 ADD MSTORE PUSH2 0x50A9 DUP8 DUP8 DUP8 PUSH2 0x4E8E JUMP JUMPDEST SWAP7 POP PUSH2 0x50B7 DUP4 DUP12 ADD DUP12 PUSH2 0x4E23 JUMP JUMPDEST SWAP7 POP SWAP5 POP PUSH2 0x180 SWAP3 POP DUP2 DUP10 DUP9 SUB ADD DUP4 DUP11 ADD MSTORE PUSH2 0x50D4 DUP8 DUP8 DUP8 PUSH2 0x4E8E JUMP JUMPDEST SWAP7 POP PUSH2 0x50E2 DUP2 DUP12 ADD DUP12 PUSH2 0x4E23 JUMP JUMPDEST SWAP7 POP SWAP5 POP POP PUSH2 0x1A0 DUP2 DUP10 DUP9 SUB ADD DUP2 DUP11 ADD MSTORE PUSH2 0x50FE DUP8 DUP8 DUP8 PUSH2 0x4E8E JUMP JUMPDEST SWAP7 POP PUSH2 0x510C DUP4 DUP12 ADD DUP12 PUSH2 0x4E23 JUMP JUMPDEST SWAP7 POP SWAP5 POP PUSH2 0x1C0 SWAP3 POP DUP2 DUP10 DUP9 SUB ADD DUP4 DUP11 ADD MSTORE PUSH2 0x5129 DUP8 DUP8 DUP8 PUSH2 0x4E8E JUMP JUMPDEST SWAP7 POP PUSH2 0x5137 DUP2 DUP12 ADD DUP12 PUSH2 0x4E23 JUMP JUMPDEST SWAP7 POP SWAP5 POP POP DUP1 DUP9 DUP8 SUB ADD DUP4 DUP10 ADD MSTORE PUSH2 0x5150 DUP7 DUP7 DUP7 PUSH2 0x4E8E JUMP JUMPDEST SWAP6 POP PUSH2 0x515E DUP3 DUP11 ADD DUP11 PUSH2 0x4E23 JUMP JUMPDEST SWAP6 POP SWAP4 POP DUP1 DUP9 DUP8 SUB ADD PUSH2 0x200 DUP10 ADD MSTORE POP POP POP PUSH2 0x517B DUP4 DUP4 DUP4 PUSH2 0x4E8E JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x51DF JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5239 JUMPI PUSH2 0x5239 PUSH2 0x51E6 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5239 JUMPI PUSH2 0x5239 PUSH2 0x51E6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x52A9 JUMPI PUSH2 0x52A9 PUSH2 0x51E6 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x52E6 JUMPI PUSH2 0x52E6 PUSH2 0x51E6 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5305 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4B4B DUP4 DUP4 PUSH2 0x52B1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x4AA6 DUP2 PUSH2 0x4B10 JUMP JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4AA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x4AA6 DUP2 PUSH2 0x4CA3 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x4AA6 DUP2 PUSH2 0x4A76 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5358 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5360 PUSH2 0x5215 JUMP JUMPDEST PUSH2 0x536A DUP5 DUP5 PUSH2 0x52B1 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x5378 PUSH1 0x20 DUP5 ADD PUSH2 0x530F JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x5389 PUSH1 0x40 DUP5 ADD PUSH2 0x530F JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x539A PUSH1 0x60 DUP5 ADD PUSH2 0x530F JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x53AB PUSH1 0x80 DUP5 ADD PUSH2 0x530F JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x53BC PUSH1 0xA0 DUP5 ADD PUSH2 0x530F JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x53CD PUSH1 0xC0 DUP5 ADD PUSH2 0x531A JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x53DE PUSH1 0xE0 DUP5 ADD PUSH2 0x532F JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x53F1 DUP2 DUP6 ADD PUSH2 0x533A JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x5403 DUP5 DUP3 ADD PUSH2 0x533A JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x5415 DUP5 DUP3 ADD PUSH2 0x533A JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x5427 DUP5 DUP3 ADD PUSH2 0x533A JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x5439 DUP5 DUP3 ADD PUSH2 0x530F JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x544B DUP5 DUP3 ADD PUSH2 0x530F JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x545D DUP5 DUP3 ADD PUSH2 0x530F JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5483 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x546B JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x4CF JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x54AC DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x5468 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x4B4B PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5494 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5503 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x4B4B DUP2 PUSH2 0x4B10 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5520 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD MSTORE DUP4 CALLDATALOAD PUSH2 0x5555 DUP2 PUSH2 0x4A76 JUMP JUMPDEST DUP2 AND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x556A DUP2 PUSH2 0x4A76 JUMP JUMPDEST AND PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x557D PUSH1 0x40 DUP5 ADD DUP5 PUSH2 0x4E23 JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x5593 PUSH2 0x100 DUP6 ADD DUP3 DUP5 PUSH2 0x4E8E JUMP JUMPDEST SWAP2 POP POP PUSH2 0x55A3 PUSH1 0x60 DUP6 ADD DUP6 PUSH2 0x4E23 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP1 DUP7 DUP6 SUB ADD PUSH1 0xA0 DUP8 ADD MSTORE PUSH2 0x55D9 DUP5 DUP4 DUP6 PUSH2 0x4E8E JUMP JUMPDEST SWAP4 POP PUSH2 0x55E7 PUSH1 0x80 DUP9 ADD PUSH2 0x4A9B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xC0 DUP9 ADD MSTORE SWAP3 POP PUSH2 0x5612 PUSH1 0xA0 DUP9 ADD DUP9 PUSH2 0x4E23 JUMP JUMPDEST SWAP4 POP SWAP2 POP DUP1 DUP7 DUP6 SUB ADD PUSH1 0xE0 DUP8 ADD MSTORE POP PUSH2 0x517B DUP4 DUP4 DUP4 PUSH2 0x4E8E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x563F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5657 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x566B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x567D JUMPI PUSH2 0x567D PUSH2 0x51E6 JUMP JUMPDEST DUP1 PUSH1 0x5 SHL SWAP2 POP PUSH2 0x568E DUP5 DUP4 ADD PUSH2 0x5262 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 DUP4 ADD DUP5 ADD SWAP2 DUP5 DUP2 ADD SWAP1 DUP9 DUP5 GT ISZERO PUSH2 0x56A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP4 DUP6 LT ISZERO PUSH2 0x56D2 JUMPI DUP5 MLOAD SWAP3 POP PUSH2 0x56C2 DUP4 PUSH2 0x4A76 JUMP JUMPDEST DUP3 DUP3 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP1 DUP6 ADD SWAP1 PUSH2 0x56AD JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD MSTORE DUP4 CALLDATALOAD PUSH2 0x570C DUP2 PUSH2 0x4A76 JUMP JUMPDEST AND PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x571E PUSH1 0x20 DUP5 ADD PUSH2 0x4A9B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x5745 PUSH1 0x40 DUP5 ADD PUSH2 0x4A9B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x576D PUSH1 0x60 DUP5 ADD DUP5 PUSH2 0x4E23 JUMP JUMPDEST PUSH1 0xE0 PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x5783 PUSH2 0x120 DUP6 ADD DUP3 DUP5 PUSH2 0x4E8E JUMP JUMPDEST SWAP2 POP POP PUSH2 0x5793 PUSH1 0x80 DUP6 ADD DUP6 PUSH2 0x4E23 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP1 DUP7 DUP6 SUB ADD PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x57C9 DUP5 DUP4 DUP6 PUSH2 0x4E8E JUMP JUMPDEST SWAP4 POP PUSH2 0x57D7 PUSH1 0xA0 DUP9 ADD PUSH2 0x4A9B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0xE0 DUP9 ADD MSTORE SWAP3 POP PUSH2 0x5802 PUSH1 0xC0 DUP9 ADD DUP9 PUSH2 0x4E23 JUMP JUMPDEST SWAP4 POP SWAP2 POP DUP1 DUP7 DUP6 SUB ADD PUSH2 0x100 DUP8 ADD MSTORE POP PUSH2 0x517B DUP4 DUP4 DUP4 PUSH2 0x4E8E JUMP JUMPDEST PUSH1 0xFF DUP4 AND DUP2 MSTORE PUSH1 0x40 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP5 MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE DUP1 PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE DUP1 PUSH1 0x40 DUP6 ADD MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x60 DUP5 ADD MLOAD AND PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0xA0 PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x588A PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0x5494 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP1 DUP10 AND DUP4 MSTORE DUP1 DUP9 AND PUSH1 0x20 DUP5 ADD MSTORE DUP1 DUP8 AND PUSH1 0x40 DUP5 ADD MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xA0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x56D2 PUSH1 0xA0 DUP4 ADD DUP5 DUP7 PUSH2 0x4E8E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x58F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x4B4B DUP2 PUSH2 0x4A76 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x590F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5927 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP5 ADD SWAP1 PUSH1 0xA0 DUP3 DUP8 SUB SLT ISZERO PUSH2 0x593B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5943 PUSH2 0x523F JUMP JUMPDEST DUP3 MLOAD PUSH2 0x594E DUP2 PUSH2 0x4CA3 JUMP JUMPDEST DUP2 MSTORE DUP3 DUP5 ADD MLOAD PUSH2 0x595D DUP2 PUSH2 0x4CA3 JUMP JUMPDEST DUP2 DUP6 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x596F DUP2 PUSH2 0x4CA3 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x5982 DUP2 PUSH2 0x4A76 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH2 0x5999 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP5 ADD SWAP4 POP POP DUP7 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x59AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP3 DUP2 GT ISZERO PUSH2 0x59C0 JUMPI PUSH2 0x59C0 PUSH2 0x51E6 JUMP JUMPDEST PUSH2 0x59F0 DUP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x5262 JUMP JUMPDEST SWAP3 POP DUP1 DUP4 MSTORE DUP8 DUP6 DUP3 DUP7 ADD ADD GT ISZERO PUSH2 0x5A06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5A15 DUP2 DUP7 DUP6 ADD DUP8 DUP8 ADD PUSH2 0x5468 JUMP JUMPDEST POP PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5A39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x4B4B DUP2 PUSH2 0x4B6B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x180 DUP14 DUP16 SUB SLT ISZERO PUSH2 0x5A67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP13 MLOAD SWAP12 POP PUSH1 0x20 DUP14 ADD MLOAD SWAP11 POP PUSH1 0x40 DUP14 ADD MLOAD SWAP10 POP PUSH1 0x60 DUP14 ADD MLOAD SWAP9 POP PUSH1 0x80 DUP14 ADD MLOAD SWAP8 POP PUSH1 0xA0 DUP14 ADD MLOAD SWAP7 POP PUSH1 0xC0 DUP14 ADD MLOAD SWAP6 POP PUSH1 0xE0 DUP14 ADD MLOAD SWAP5 POP PUSH2 0x100 DUP14 ADD MLOAD SWAP4 POP PUSH2 0x120 DUP14 ADD MLOAD SWAP3 POP PUSH2 0x140 DUP14 ADD MLOAD SWAP2 POP PUSH2 0x5AC1 PUSH2 0x160 DUP15 ADD PUSH2 0x531A JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP8 0xBD 0xDA PUSH2 0x9E2C 0xB8 LOG4 0xB5 SWAP6 SWAP3 0xB2 LT DUP10 PUSH25 0xD2AC3AEF06488831F165D7AC68A2BAAC0764736F6C63430008 EXP STOP CALLER ","sourceMap":"1063:18368:95:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2579:291;;;;;;:::i;:::-;;:::i;:::-;;14628:476;;;;;;:::i;:::-;;:::i;15144:::-;;;;;;:::i;:::-;;:::i;16997:564::-;;;;;;:::i;:::-;;:::i;11219:542::-;;;;;;:::i;:::-;;:::i;15986:425::-;;;;;;:::i;:::-;;:::i;7759:378::-;;;;;;:::i;:::-;;:::i;8177:317::-;;;;;;:::i;:::-;;:::i;8534:556::-;;;;;;:::i;:::-;;:::i;10757:422::-;;;;;;:::i;:::-;;:::i;2910:135::-;;;;;;:::i;:::-;;:::i;3794:457::-;;;;;;:::i;:::-;;:::i;3306:202::-;;;;;;:::i;:::-;;:::i;15660:286::-;;;;;;:::i;:::-;;:::i;2166:51::-;;2214:3;2166:51;;;;;3830:25:201;;;3818:2;3803:18;2166:51:95;;;;;;;4291:1762;;;;;;:::i;:::-;;:::i;16451:506::-;;;;;;:::i;:::-;;:::i;6093:484::-;;;;;;:::i;:::-;;:::i;7403:316::-;;;;;;:::i;:::-;;:::i;9767:488::-;;;;;;:::i;:::-;;:::i;3548:206::-;;;;;;:::i;:::-;;:::i;9130:597::-;;;;;;:::i;:::-;;:::i;7011:352::-;;;;;;:::i;:::-;;:::i;3085:181::-;;;;;;:::i;:::-;;:::i;11801:1999::-;;;;;;:::i;:::-;;:::i;2378:161::-;;;;;;:::i;:::-;;:::i;10295:422::-;;;;;;:::i;:::-;;:::i;13840:748::-;;;;;;:::i;:::-;;:::i;6617:354::-;;;;;;:::i;:::-;;:::i;2579:291::-;1952:31;:29;:31::i;:::-;2739:5:::1;::::0;::::1;;2720:16;2750:116;2770:16:::0;;::::1;2750:116;;;2801:17;:36;2838:10;2850:5;;2856:1;2850:8;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;2801:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2788:3;;;;;:::i;:::-;;;;2750:116;;;;2714:156;2579:291:::0;;:::o;14628:476::-;2127:23;:21;:23::i;:::-;14813:5:::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:201::0;;;14813:29:95::1;::::0;::::1;12436:74:201::0;14756:54:95::1;::::0;14813:5:::1;::::0;:22:::1;::::0;12409:18:201;;14813:29:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19491:9:72::0;;;;-1:-1:-1;4411:3:72;19490:77;;;14917:52:95::1;19491:9:72::0;14950:18:95;14917:32:::1;:52::i;:::-;14975:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:201::0;;;14975:44:95::1;::::0;::::1;14540:74:201::0;14650:13;;14630:18;;;14623:41;14975:5:95;;::::1;::::0;:22:::1;::::0;14513:18:201;;14975:44:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;15030:69:95::1;::::0;;14849:25:201;;;14905:2;14890:18;;14883:34;;;15030:69:95::1;::::0;::::1;::::0;-1:-1:-1;15030:69:95::1;::::0;-1:-1:-1;14822:18:201;15030:69:95::1;;;;;;;;14750:354;;14628:476:::0;;:::o;15144:::-;2127:23;:21;:23::i;:::-;15334:5:::1;::::0;:27:::1;::::0;;;;:5:::1;12454:55:201::0;;;15334:27:95::1;::::0;::::1;12436:74:201::0;15295:36:95::1;::::0;15334:5:::1;::::0;:20:::1;::::0;12409:18:201;;15334:27:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15400:35;::::0;::::1;::::0;15441:5:::1;::::0;:74:::1;::::0;;;;:5:::1;17439:15:201::0;;;15441:74:95::1;::::0;::::1;17421:34:201::0;17491:15;;;17471:18;;;17464:43;15400:35:95;;-1:-1:-1;15400:35:95;;15441:5:::1;::::0;:43:::1;::::0;17333:18:201;;15441:74:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;15526:89:95::1;::::0;;::::1;17439:15:201::0;;;17421:34;;17491:15;;;17486:2;17471:18;;17464:43;15526:89:95;::::1;::::0;-1:-1:-1;15526:89:95::1;::::0;-1:-1:-1;17333:18:201;15526:89:95::1;17186:327:201::0;16997:564:95;1435:16;:14;:16::i;:::-;17212:32:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;524:3:89::1;17139:65:95;::::0;::::1;;;17124:126;;;;-1:-1:-1::0;;;17124:126:95::1;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1::0;17296:5:95::1;::::0;:37:::1;::::0;;;;;;;17256::::1;::::0;17296:5:::1;;::::0;:35:::1;::::0;:37:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:5;:37:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17339:5;::::0;17369:31:::1;::::0;;;;;;;17256:77;;-1:-1:-1;17339:5:95::1;::::0;;::::1;::::0;:29:::1;::::0;:5;;17369:29:::1;::::0;:31:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;17339:5;17369:31:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17339:93;::::0;;::::1;::::0;;;;;;18768:34:201;18829:15;;;17339:93:95::1;::::0;::::1;18811:34:201::0;18881:15;;;18861:18;;;18854:43;18731:18;;17339:93:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;17443:113:95::1;::::0;;18768:34:201;18829:15;;;18811:34;;18881:15;;18876:2;18861:18;;18854:43;17443:113:95::1;::::0;-1:-1:-1;18731:18:201;;-1:-1:-1;17443:113:95::1;;;;;;;;17118:443;16997:564:::0;:::o;11219:542::-;2127:23;:21;:23::i;:::-;11394:39:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;524:3:89::1;11350:42:95::0;::::1;;11342:92;;;;-1:-1:-1::0;;;11342:92:95::1;;;;;;;;:::i;:::-;-1:-1:-1::0;11497:5:95::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:201::0;;;11497:29:95::1;::::0;::::1;12436:74:201::0;11440:54:95::1;::::0;11497:5:::1;::::0;:22:::1;::::0;12409:18:201;;11497:29:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18604:9:72::0;;;;-1:-1:-1;4270:3:72;18603:91;;;11596:47:95::1;18604:9:72::0;11636:6:95;11596:39:::1;:47::i;:::-;11649:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:201::0;;;11649:44:95::1;::::0;::::1;14540:74:201::0;14650:13;;14630:18;;;14623:41;11649:5:95;;::::1;::::0;:22:::1;::::0;14513:18:201;;11649:44:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;11704:52:95::1;::::0;;14849:25:201;;;14905:2;14890:18;;14883:34;;;11704:52:95::1;::::0;::::1;::::0;-1:-1:-1;11704:52:95::1;::::0;-1:-1:-1;14822:18:201;11704:52:95::1;14675:248:201::0;15986:425:95;1435:16;:14;:16::i;:::-;16166:34:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;524:3:89::1;16102:56:95::0;::::1;;16087:119;;;;-1:-1:-1::0;;;16087:119:95::1;;;;;;;;:::i;:::-;-1:-1:-1::0;16243:5:95::1;::::0;:27:::1;::::0;;;;;;;16212:28:::1;::::0;16243:5:::1;;::::0;:25:::1;::::0;:27:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:5;:27:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16276:5;::::0;:51:::1;::::0;;;;::::1;::::0;::::1;3830:25:201::0;;;16212:58:95;;-1:-1:-1;16276:5:95::1;;::::0;:29:::1;::::0;3803:18:201;;16276:51:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;16338:68:95::1;::::0;;14849:25:201;;;14905:2;14890:18;;14883:34;;;16338:68:95::1;::::0;-1:-1:-1;14822:18:201;;-1:-1:-1;16338:68:95::1;14675:248:201::0;7759:378:95;2127:23;:21;:23::i;:::-;7939:5:::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:201::0;;;7939:29:95::1;::::0;::::1;12436:74:201::0;7882:54:95::1;::::0;7939:5:::1;::::0;:22:::1;::::0;12409:18:201;;7939:29:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7882:86:::0;-1:-1:-1;7974:50:95::1;7882:86:::0;8013:10;7974:38:::1;:50::i;:::-;8030:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:201::0;;;8030:44:95::1;::::0;::::1;14540:74:201::0;14650:13;;14630:18;;;14623:41;8030:5:95;;::::1;::::0;:22:::1;::::0;14513:18:201;;8030:44:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;8085:47:95::1;::::0;;19295:42:201;19283:55;;19265:74;;19382:14;;19375:22;19370:2;19355:18;;19348:50;8085:47:95::1;::::0;-1:-1:-1;19238:18:201;;-1:-1:-1;8085:47:95::1;;;;;;;7876:261;7759:378:::0;;:::o;8177:317::-;1764:27;:25;:27::i;:::-;8334:5:::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:201::0;;;8334:29:95::1;::::0;::::1;12436:74:201::0;8277:54:95::1;::::0;8334:5:::1;::::0;:22:::1;::::0;12409:18:201;;8334:29:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8277:86:::0;-1:-1:-1;8369:31:95::1;8277:86:::0;8393:6;8369:23:::1;:31::i;:::-;8406:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:201::0;;;8406:44:95::1;::::0;::::1;14540:74:201::0;14650:13;;14630:18;;;14623:41;8406:5:95;;::::1;::::0;:22:::1;::::0;14513:18:201;;8406:44:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;8475:5;8461:28;;;8482:6;8461:28;;;;19574:14:201::0;19567:22;19549:41;;19537:2;19522:18;;19409:187;8461:28:95::1;;;;;;;;8271:223;8177:317:::0;;:::o;8534:556::-;2127:23;:21;:23::i;:::-;8720:29:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;524:3:89::1;8666:52:95::0;::::1;;8658:92;;;;-1:-1:-1::0;;;8658:92:95::1;;;;;;;;:::i;:::-;-1:-1:-1::0;8813:5:95::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:201::0;;;8813:29:95::1;::::0;::::1;12436:74:201::0;8756:54:95::1;::::0;8813:5:::1;::::0;:22:::1;::::0;12409:18:201;;8813:29:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15238:9:72::0;;;;-1:-1:-1;4063:2:72;15237:71;;;8913:48:95::1;15238:9:72::0;8944:16:95;8913:30:::1;:48::i;:::-;8967:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:201::0;;;8967:44:95::1;::::0;::::1;14540:74:201::0;14650:13;;14630:18;;;14623:41;8967:5:95;;::::1;::::0;:22:::1;::::0;14513:18:201;;8967:44:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;9022:63:95::1;::::0;;14849:25:201;;;14905:2;14890:18;;14883:34;;;9022:63:95::1;::::0;::::1;::::0;-1:-1:-1;9022:63:95::1;::::0;-1:-1:-1;14822:18:201;9022:63:95::1;14675:248:201::0;10757:422:95;2127:23;:21;:23::i;:::-;10930:5:::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:201::0;;;10930:29:95::1;::::0;::::1;12436:74:201::0;10873:54:95::1;::::0;10930:5:::1;::::0;:22:::1;::::0;12409:18:201;;10930:29:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16762:9:72::0;;;;-1:-1:-1;4191:3:72;16761:63;;;11022:40:95::1;16762:9:72::0;11049:12:95;11022:26:::1;:40::i;:::-;11068:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:201::0;;;11068:44:95::1;::::0;::::1;14540:74:201::0;14650:13;;14630:18;;;14623:41;11068:5:95;;::::1;::::0;:22:::1;::::0;14513:18:201;;11068:44:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;11123:51:95::1;::::0;;14849:25:201;;;14905:2;14890:18;;14883:34;;;11123:51:95::1;::::0;::::1;::::0;-1:-1:-1;11123:51:95::1;::::0;-1:-1:-1;14822:18:201;11123:51:95::1;14675:248:201::0;2910:135:95;1435:16;:14;:16::i;:::-;2984:5:::1;::::0;:24:::1;::::0;;;;:5:::1;12454:55:201::0;;;2984:24:95::1;::::0;::::1;12436:74:201::0;2984:5:95;;::::1;::::0;:17:::1;::::0;12409:18:201;;2984:24:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;3019:21:95::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;3019:21:95::1;::::0;-1:-1:-1;3019:21:95;;::::1;2910:135:::0;:::o;3794:457::-;2127:23;:21;:23::i;:::-;3954:5:::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:201::0;;;3954:29:95::1;::::0;::::1;12436:74:201::0;3897:54:95::1;::::0;3954:5:::1;::::0;:22:::1;::::0;12409:18:201;;3954:29:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3897:86;;3994:7;3989:117;;14434:9:72::0;;4067:31:95::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;;14446:22:72;14434:34;14433:41;4011:88:95::1;;;;-1:-1:-1::0;;;4011:88:95::1;;;;;;;;:::i;:::-;;3989:117;4111:42;:13:::0;4145:7;4111:33:::1;:42::i;:::-;4159:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:201::0;;;4159:44:95::1;::::0;::::1;14540:74:201::0;14650:13;;14630:18;;;14623:41;4159:5:95;;::::1;::::0;:22:::1;::::0;14513:18:201;;4159:44:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;4231:5;4214:32;;;4238:7;4214:32;;;;19574:14:201::0;19567:22;19549:41;;19537:2;19522:18;;19409:187;3306:202:95;1435:16;:14;:16::i;:::-;3490:5:::1;::::0;3443:60:::1;::::0;;;;:17:::1;::::0;:46:::1;::::0;:60:::1;::::0;3490:5:::1;;::::0;3497;;3443:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3306:202:::0;:::o;15660:286::-;1590:21;:19;:21::i;:::-;15766:5:::1;::::0;:23:::1;::::0;;;;;;;15738:25:::1;::::0;15766:5:::1;;::::0;:21:::1;::::0;:23:::1;::::0;;::::1;::::0;15738:25;;15766:23;;;;;;;:5;:23:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;15738:51;;15801:9;15796:146;15820:8;:15;15816:1;:19;15796:146;;;15877:1;15854:25;;:8;15863:1;15854:11;;;;;;;;:::i;:::-;;;;;;;:25;;;15850:86;;15891:36;15907:8;15916:1;15907:11;;;;;;;;:::i;:::-;;;;;;;15920:6;15891:15;:36::i;:::-;15837:3:::0;::::1;::::0;::::1;:::i;:::-;;;;15796:146;;;;15732:214;15660:286:::0;:::o;4291:1762::-;2127:23;:21;:23::i;:::-;4704:29:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;4675:27;;::::1;;4667:67;;;;-1:-1:-1::0;;;4667:67:95::1;;;;;;;;:::i;:::-;-1:-1:-1::0;4798:5:95::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:201::0;;;4798:29:95::1;::::0;::::1;12436:74:201::0;4741:54:95::1;::::0;4798:5:::1;::::0;:22:::1;::::0;12409:18:201;;4798:29:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4741:86:::0;-1:-1:-1;4838:25:95;;4834:916:::1;;5082:29;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;524:3:89::1;5029:51:95::0;::::1;5021:91;;;;-1:-1:-1::0;;;5021:91:95::1;;;;;;;;:::i;:::-;-1:-1:-1::0;524:3:89::1;5326:49:95;:20:::0;5358:16;5326:31:::1;:49::i;:::-;:85;;5421:29;;;;;;;;;;;;;;;;::::0;5309:149:::1;;;;;-1:-1:-1::0;;;5309:149:95::1;;;;;;;;:::i;:::-;;4834:916;;;5510:29;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;5487:21;;5479:61:::1;;;;-1:-1:-1::0;;;5479:61:95::1;;;;;;;;:::i;:::-;;5719:24;5737:5;5719:17;:24::i;:::-;5756:25;:13:::0;5777:3;5756:20:::1;:25::i;:::-;5787:59;:13:::0;5825:20;5787:37:::1;:59::i;:::-;5852:51;:13:::0;5886:16;5852:33:::1;:51::i;:::-;5910:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:201::0;;;5910:44:95::1;::::0;::::1;14540:74:201::0;14650:13;;14630:18;;;14623:41;5910:5:95;;::::1;::::0;:22:::1;::::0;14513:18:201;;5910:44:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;5966:82:95::1;::::0;;22459:25:201;;;22515:2;22500:18;;22493:34;;;22543:18;;;22536:34;;;5966:82:95::1;::::0;::::1;::::0;-1:-1:-1;5966:82:95::1;::::0;-1:-1:-1;22447:2:201;22432:18;5966:82:95::1;;;;;;;4472:1581;4291:1762:::0;;;;:::o;16451:506::-;1435:16;:14;:16::i;:::-;16651:32:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;524:3:89::1;16583:60:95;::::0;::::1;;;16568:121;;;;-1:-1:-1::0;;;16568:121:95::1;;;;;;;;:::i;:::-;-1:-1:-1::0;16730:5:95::1;::::0;:31:::1;::::0;;;;;;;16695:32:::1;::::0;16730:5:::1;;::::0;:29:::1;::::0;:31:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:5;:31:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16767:5;::::0;16823:37:::1;::::0;;;;;;;16695:66;;-1:-1:-1;16767:5:95::1;::::0;;::::1;::::0;:29:::1;::::0;16797:24;;16767:5;;16823:35:::1;::::0;:37:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;16767:5;16823:37:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16767:94;::::0;;::::1;::::0;;;;;;18768:34:201;18829:15;;;16767:94:95::1;::::0;::::1;18811:34:201::0;18881:15;;18861:18;;;18854:43;18731:18;;16767:94:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;16872:80:95::1;::::0;;18768:34:201;18829:15;;;18811:34;;18881:15;;18876:2;18861:18;;18854:43;16872:80:95::1;::::0;-1:-1:-1;18731:18:201;;-1:-1:-1;16872:80:95::1;18584:319:201::0;6093:484:95;2127:23;:21;:23::i;:::-;6275:5:::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:201::0;;;6275:29:95::1;::::0;::::1;12436:74:201::0;6218:54:95::1;::::0;6275:5:::1;::::0;:22:::1;::::0;12409:18:201;;6275:29:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6218:86;;6314:7;6310:102;;;13598:9:72::0;;13610:15;13598:27;13597:34;;6376:28:95::1;;;;;;;;;;;;;;;;::::0;6331:74:::1;;;;;-1:-1:-1::0;;;6331:74:95::1;;;;;;;;:::i;:::-;;6310:102;6417:52;:13:::0;6461:7;6417:43:::1;:52::i;:::-;6475:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:201::0;;;6475:44:95::1;::::0;::::1;14540:74:201::0;14650:13;;14630:18;;;14623:41;6475:5:95;;::::1;::::0;:22:::1;::::0;14513:18:201;;6475:44:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6557:5;6530:42;;;6564:7;6530:42;;;;19574:14:201::0;19567:22;19549:41;;19537:2;19522:18;;19409:187;7403:316:95;2127:23;:21;:23::i;:::-;7559:5:::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:201::0;;;7559:29:95::1;::::0;::::1;12436:74:201::0;7502:54:95::1;::::0;7559:5:::1;::::0;:22:::1;::::0;12409:18:201;;7559:29:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7502:86:::0;-1:-1:-1;7594:31:95::1;7502:86:::0;7618:6;7594:23:::1;:31::i;:::-;7631:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:201::0;;;7631:44:95::1;::::0;::::1;14540:74:201::0;14650:13;;14630:18;;;14623:41;7631:5:95;;::::1;::::0;:22:::1;::::0;14513:18:201;;7631:44:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7700:5;7686:28;;;7707:6;7686:28;;;;19574:14:201::0;19567:22;19549:41;;19537:2;19522:18;;19409:187;9767:488:95;2127:23;:21;:23::i;:::-;9887:9:::1;9883:54;;;9906:24;9924:5;9906:17;:24::i;:::-;9999:5;::::0;:29:::1;::::0;;;;:5:::1;12454:55:201::0;;;9999:29:95::1;::::0;::::1;12436:74:201::0;9942:54:95::1;::::0;9999:5:::1;::::0;:22:::1;::::0;12409:18:201;;9999:29:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9942:86;;10035:14;10052:34;:13;12837:9:72::0;12849:22;12837:34;12836:41;;;12711:171;10052:34:95::1;10035:51:::0;-1:-1:-1;10093:43:95::1;:13:::0;10126:9;10093:32:::1;:43::i;:::-;10143:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:201::0;;;10143:44:95::1;::::0;::::1;14540:74:201::0;14650:13;;14630:18;;;14623:41;10143:5:95;;::::1;::::0;:22:::1;::::0;14513:18:201;;10143:44:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;10199:51:95::1;::::0;;22768:14:201;;22761:22;22743:41;;22827:14;;22820:22;22815:2;22800:18;;22793:50;10199:51:95::1;::::0;::::1;::::0;-1:-1:-1;10199:51:95::1;::::0;-1:-1:-1;22716:18:201;10199:51:95::1;22581:268:201::0;3548:206:95;1435:16;:14;:16::i;:::-;3736:5:::1;::::0;3687:62:::1;::::0;;;;:17:::1;::::0;:48:::1;::::0;:62:::1;::::0;3736:5:::1;;::::0;3743;;3687:62:::1;;;:::i;9130:597::-:0;2127:23;:21;:23::i;:::-;9307:5:::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:201::0;;;9307:29:95::1;::::0;::::1;12436:74:201::0;9250:54:95::1;::::0;9307:5:::1;::::0;:22:::1;::::0;12409:18:201;;9307:29:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17634:9:72::0;;;;-1:-1:-1;4478:3:72;17633:67;;;;9404:64:95::1;;9437:24;9455:5;9437:17;:24::i;:::-;9473:44;:13:::0;9502:14;9473:28:::1;:44::i;:::-;9523:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:201::0;;;9523:44:95::1;::::0;::::1;14540:74:201::0;14650:13;;14630:18;;;14623:41;9523:5:95;;::::1;::::0;:22:::1;::::0;14513:18:201;;9523:44:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;9578:14;9596:1;9578:19;9574:80;;;9607:5;::::0;:40:::1;::::0;;;;:5:::1;12454:55:201::0;;;9607:40:95::1;::::0;::::1;12436:74:201::0;9607:5:95;;::::1;::::0;:33:::1;::::0;12409:18:201;;9607:40:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;9574:80;9665:57;::::0;;14849:25:201;;;14905:2;14890:18;;14883:34;;;9665:57:95::1;::::0;::::1;::::0;::::1;::::0;14822:18:201;9665:57:95::1;14675:248:201::0;7011:352:95;1435:16;:14;:16::i;:::-;7108:6:::1;7103:37;;7116:24;7134:5;7116:17;:24::i;:::-;7203:5;::::0;:29:::1;::::0;;;;:5:::1;12454:55:201::0;;;7203:29:95::1;::::0;::::1;12436:74:201::0;7146:54:95::1;::::0;7203:5:::1;::::0;:22:::1;::::0;12409:18:201;;7203:29:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7146:86:::0;-1:-1:-1;7238:31:95::1;7146:86:::0;7262:6;7238:23:::1;:31::i;:::-;7275:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:201::0;;;7275:44:95::1;::::0;::::1;14540:74:201::0;14650:13;;14630:18;;;14623:41;7275:5:95;;::::1;::::0;:22:::1;::::0;14513:18:201;;7275:44:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7344:5;7330:28;;;7351:6;7330:28;;;;19574:14:201::0;19567:22;19549:41;;19537:2;19522:18;;19409:187;3085:181:95;1435:16;:14;:16::i;:::-;3248:5:::1;::::0;3210:51:::1;::::0;;;;:17:::1;::::0;:37:::1;::::0;:51:::1;::::0;3248:5:::1;;::::0;3255;;3210:51:::1;;;:::i;11801:1999::-:0;2127:23;:21;:23::i;:::-;12041:36:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;12031:8:::1;::::0;::::1;12023:55;;;;-1:-1:-1::0;;;12023:55:95::1;;;;;;;;:::i;:::-;-1:-1:-1::0;12119:36:95::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;12092:25:::1;::::0;::::1;12084:72;;;;-1:-1:-1::0;;;12084:72:95::1;;;;;;;;:::i;:::-;;12370:20;12363:27;;:3;:27;;;;12392:36;;;;;;;;;;;;;;;;::::0;12355:74:::1;;;;;-1:-1:-1::0;;;12355:74:95::1;;;;;;;;:::i;:::-;-1:-1:-1::0;12509:36:95::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;524:3:89::1;12450:51:95;::::0;::::1;;12435:116;;;;-1:-1:-1::0;;;12435:116:95::1;;;;;;;;:::i;:::-;-1:-1:-1::0;524:3:89::1;12759:58:95;;:29:::0;;::::1;::::0;:58;::::1;:40;:58::i;:::-;:102;;12869:36;;;;;;;;;;;;;;;;::::0;12744:167:::1;;;;;-1:-1:-1::0;;;12744:167:95::1;;;;;;;;:::i;:::-;-1:-1:-1::0;12946:5:95::1;::::0;:23:::1;::::0;;;;;;;12918:25:::1;::::0;12946:5:::1;;::::0;:21:::1;::::0;:23:::1;::::0;;::::1;::::0;12918:25;;12946:23;;;;;;;:5;:23:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;12918:51;;12980:9;12975:455;12999:8;:15;12995:1;:19;12975:455;;;13086:5;::::0;13109:11;;13029:54:::1;::::0;13086:5:::1;;::::0;:22:::1;::::0;13109:8;;13118:1;;13109:11;::::1;;;;;:::i;:::-;;;;;;;13086:35;;;;;;;;;;;;;;12466:42:201::0;12454:55;;;;12436:74;;12424:2;12409:18;;12290:226;13086:35:95::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20324:9:72::0;;13029:92:95;;-1:-1:-1;4339:3:72;20323:71;;;13133:10:95::1;:46;;;13129:295;;;5872:9:72::0;;5884;5872:21;13199:3:95::1;:28;;;13229:36;;;;;;;;;;;;;;;;::::0;13191:75:::1;;;;;-1:-1:-1::0;;;13191:75:95::1;;;;;;;;:::i;:::-;-1:-1:-1::0;6707:9:72;;3298:2;6706:85;;;13295:20:95::1;:62;;;13369:36;;;;;;;;;;;;;;;;::::0;13276:139:::1;;;;;-1:-1:-1::0;;;13276:139:95::1;;;;;;;;:::i;:::-;;13129:295;-1:-1:-1::0;13016:3:95;::::1;::::0;::::1;:::i;:::-;;;;12975:455;;;;13436:5;;;;;;;;;;;:28;;;13472:10;13490:198;;;;;;;;13529:3;13490:198;;;;;;13564:20;13490:198;;;;;;13612:16;13490:198;;;;;;13651:6;13490:198;;;;;;13674:5;;13490:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;;13490:198:95;;-1:-1:-1;13436:258:95::1;::::0;;::::1;::::0;;;;;;::::1;::::0;;;::::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13724:10;13705:90;;;13736:3;13741:20;13763:16;13781:6;13789:5;;13705:90;;;;;;;;;;;:::i;:::-;;;;;;;;12017:1783;11801:1999:::0;;;;;;;:::o;2378:161::-;2214:3;1217:12:71;;;;;:31;;-1:-1:-1;2436:9:71;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;-1:-1:-1;;;1202:146:71;;26218:2:201;1202:146:71;;;26200:21:201;26257:2;26237:18;;;26230:30;26296:34;26276:18;;;26269:62;26367:16;26347:18;;;26340:44;26401:19;;1202:146:71;26016:410:201;1202:146:71;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;2456:18:95::1;:29:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;2505:28:::1;::::0;;;;;;;:26:::1;::::0;:28:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;2456:29;2505:28:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2491:5;:43:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1506:55:71;;;;1534:12;:20;;;;;;1158:407;;2378:161:95;:::o;10295:422::-;2127:23;:21;:23::i;:::-;10468:5:::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:201::0;;;10468:29:95::1;::::0;::::1;12436:74:201::0;10411:54:95::1;::::0;10468:5:::1;::::0;:22:::1;::::0;12409:18:201;;10468:29:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16004:9:72::0;;;;-1:-1:-1;4127:2:72;16003:63;;;10560:40:95::1;16004:9:72::0;10587:12:95;10560:26:::1;:40::i;:::-;10606:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:201::0;;;10606:44:95::1;::::0;::::1;14540:74:201::0;14650:13;;14630:18;;;14623:41;10606:5:95;;::::1;::::0;:22:::1;::::0;14513:18:201;;10606:44:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;10661:51:95::1;::::0;;14849:25:201;;;14905:2;14890:18;;14883:34;;;10661:51:95::1;::::0;::::1;::::0;-1:-1:-1;10661:51:95::1;::::0;-1:-1:-1;14822:18:201;10661:51:95::1;14675:248:201::0;13840:748:95;2127:23;:21;:23::i;:::-;14021:5:::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:201::0;;;14021:29:95::1;::::0;::::1;12436:74:201::0;13964:54:95::1;::::0;14021:5:::1;::::0;:22:::1;::::0;12409:18:201;;14021:29:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13964:86:::0;-1:-1:-1;14061:18:95::1;::::0;::::1;::::0;14057:284:::1;;14135:5;::::0;:41:::1;::::0;;;;26859:4:201;26847:17;;14135:41:95::1;::::0;::::1;26829:36:201::0;14089:43:95::1;::::0;14135:5:::1;;::::0;:26:::1;::::0;26802:18:201;;14135:41:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;6707:9:72::0;;14089:87:95;;-1:-1:-1;3298:2:72;6706:85;;;14201:12:95::1;:33;;;:75;;;14286:40;;;;;;;;;;;;;;;;::::0;14184:150:::1;;;;;-1:-1:-1::0;;;14184:150:95::1;;;;;;;;:::i;:::-;;14081:260;14057:284;20324:9:72::0;;14346:21:95::1;::::0;4339:3:72;20323:71;;;14346:56:95;-1:-1:-1;14408:45:95::1;:13:::0;:45:::1;::::0;::::1;:30;:45::i;:::-;14459:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:201::0;;;14459:44:95::1;::::0;::::1;14540:74:201::0;14650:13;;14630:18;;;14623:41;14459:5:95;;::::1;::::0;:22:::1;::::0;14513:18:201;;14459:44:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;14514:69:95::1;::::0;;28624:4:201;28612:17;;;28594:36;;28666:17;;28661:2;28646:18;;28639:45;14514:69:95::1;::::0;::::1;::::0;-1:-1:-1;14514:69:95::1;::::0;-1:-1:-1;28567:18:201;14514:69:95::1;28428:262:201::0;6617:354:95;2127:23;:21;:23::i;:::-;6792:5:::1;::::0;:29:::1;::::0;;;;:5:::1;12454:55:201::0;;;6792:29:95::1;::::0;::::1;12436:74:201::0;6735:54:95::1;::::0;6792:5:::1;::::0;:22:::1;::::0;12409:18:201;;6792:29:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6735:86:::0;-1:-1:-1;6828:42:95::1;6735:86:::0;6862:7;6828:33:::1;:42::i;:::-;6876:5;::::0;:44:::1;::::0;;;;:5:::1;14558:55:201::0;;;6876:44:95::1;::::0;::::1;14540:74:201::0;14650:13;;14630:18;;;14623:41;6876:5:95;;::::1;::::0;:22:::1;::::0;14513:18:201;;6876:44:95::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6951:5;6931:35;;;6958:7;6931:35;;;;19574:14:201::0;19567:22;19549:41;;19537:2;19522:18;;19409:187;18854:298:95;18952:18;;:34;;;;;;;;18915:22;;18952:18;;;:32;;:34;;;;;;;;;;;;;;:18;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19008:42;;;;;19039:10;19008:42;;;12436:74:201;18915:72:95;;-1:-1:-1;19008:30:95;;;;;;12409:18:201;;19008:42:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:80;;;-1:-1:-1;19054:34:95;;;;;19077:10;19054:34;;;12436:74:201;19054:22:95;;;;;;12409:18:201;;19054:34:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19096:45;;;;;;;;;;;;;;;;;18993:154;;;;;-1:-1:-1;;;18993:154:95;;;;;;;;:::i;:::-;;18909:243;18854:298::o;19156:273::-;19246:18;;:34;;;;;;;;19209:22;;19246:18;;;:32;;:34;;;;;;;;;;;;;;:18;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19302;;;;;19325:10;19302:34;;;12436:74:201;19209:72:95;;-1:-1:-1;19302:22:95;;;;;;12409:18:201;;19302:34:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:72;;;-1:-1:-1;19340:34:95;;;;;19363:10;19340:34;;;12436:74:201;19340:22:95;;;;;;12409:18:201;;19340:34:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19382:36;;;;;;;;;;;;;;;;;19287:137;;;;;-1:-1:-1;;;19287:137:95;;;;;;;;:::i;18863:353:72:-;19051:32;;;;;;;;;;;;;;;;;5103:11;19003:46;;;18995:89;;;;-1:-1:-1;;;18995:89:72;;;;;;;;:::i;:::-;-1:-1:-1;19110:9:72;;2905:66;19110:34;4411:3;19155:55;;;;19109:102;19091:120;;18863:353::o;18136:202:95:-;18219:18;;:34;;;;;;;;18182:22;;18219:18;;;:32;;:34;;;;;;;;;;;;;;:18;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18268;;;;;18291:10;18268:34;;;12436:74:201;18182:72:95;;-1:-1:-1;18268:22:95;;;;;;12409:18:201;;18268:34:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18304:28;;;;;;;;;;;;;;;;;18260:73;;;;;-1:-1:-1;;;18260:73:95;;;;;;;;:::i;17890:427:72:-;18119:39;;;;;;;;;;;;;;;;;4978:5;18051:60;;;18036:128;;;;-1:-1:-1;;;18036:128:72;;;;;;;;:::i;:::-;-1:-1:-1;18190:9:72;;2609:66;18190:41;4270:3;18242:69;;;;18189:123;18171:141;;17890:427::o;10902:279::-;3854:2;11110:10;:18;;11127:1;11110:18;;;11123:1;11110:18;11051:9;;1721:66;11051:40;11102:27;;;;;:73;;;11050:126;11032:144;;;-1:-1:-1;10902:279:72:o;18563:287:95:-;18657:18;;:34;;;;;;;;18620:22;;18657:18;;;:32;;:34;;;;;;;;;;;;;;:18;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18713;;;;;18736:10;18713:34;;;12436:74:201;18620:72:95;;-1:-1:-1;18713:22:95;;;;;;12409:18:201;;18713:34:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:77;;;-1:-1:-1;18751:39:95;;;;;18779:10;18751:39;;;12436:74:201;18751:27:95;;;;;;12409:18:201;;18751:39:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18798:41;;;;;;;;;;;;;;;;;18698:147;;;;;-1:-1:-1;;;18698:147:95;;;;;;;;:::i;9866:213:72:-;3777:2;10026:6;:14;;10039:1;10026:14;;;10035:1;10026:14;9984:9;;1573:66;9984:23;10018;;;;;:55;;;9983:91;9965:109;;;-1:-1:-1;9866:213:72:o;14635:333::-;14814:29;;;;;;;;;;;;;;;;;4778:5;14771:41;;;14763:81;;;;-1:-1:-1;;;14763:81:72;;;;;;;;:::i;:::-;-1:-1:-1;14870:9:72;;2165:66;14870:31;4063:2;14912:50;;;;14869:94;14851:112;;14635:333::o;16215:289::-;16378:25;;;;;;;;;;;;;;;;;4900:11;16343:33;;;16335:69;;;;-1:-1:-1;;;16335:69:72;;;;;;;;:::i;:::-;-1:-1:-1;16424:9:72;;2461:66;16424:27;4191:3;16456:42;;;;16423:76;16411:88;;16215:289::o;13078:248::-;3636:2;13264:7;:15;;13278:1;13264:15;;;13274:1;13264:15;13219:9;;1277:66;13219:26;13256:24;;;;;:64;;;13218:103;13200:121;;;-1:-1:-1;13078:248:72:o;18342:217:95:-;18430:18;;:34;;;;;;;;18393:22;;18430:18;;;:32;;:34;;;;;;;;;;;;;;:18;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18479:39;;;;;18507:10;18479:39;;;12436:74:201;18393:72:95;;-1:-1:-1;18479:27:95;;;;;;12409:18:201;;18479:39:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18520:33;;;;;;;;;;;;;;;;;18471:83;;;;;-1:-1:-1;;;18471:83:95;;;;;;;;:::i;1005:496:89:-;1083:14;1248:18;;1299:35;1295:52;;;1285:63;;1278:71;1234:125;1215:183;;1388:1;1385;1378:12;1215:183;-1:-1:-1;1473:17:89;1424:22;;1448;1420:51;1416:75;;1005:496::o;17565:326:95:-;17630:25;17657:20;17724:18;;;;;;;;;;;:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17699:93;;;;;:86;12454:55:201;;;17699:93:95;;;12436:74:201;17699:86:95;;;;;;;12409:18:201;;17699:93:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17627:165;;;;;;;;;;;;;;17807:12;17823:1;17807:17;:43;;;;-1:-1:-1;17828:22:95;;17807:43;17852:33;;;;;;;;;;;;;;;;;17799:87;;;;;-1:-1:-1;;;17799:87:95;;;;;;;;:::i;5426:197:72:-;5552:18;;;;;;;;;;;;;;;;;4528:5;5530:20;;;5522:49;;;;-1:-1:-1;;;5522:49:72;;;;;;;;:::i;:::-;-1:-1:-1;5591:9:72;;389:66;5591:20;5590:28;5578:40;;5426:197::o;6068:348::-;6253:28;;;;;;;;;;;;;;;;;4597:5;6207:44;;;6199:83;;;;-1:-1:-1;;;6199:83:72;;;;;;;;:::i;:::-;-1:-1:-1;6308:9:72;;537:66;6308:38;3298:2;6357:53;;;;6307:104;6289:122;;6068:348::o;6954:316::-;7123:24;;;;;;;;;;;;;;;;;4662:5;7085:36;;;7077:71;;;;-1:-1:-1;;;7077:71:72;;;;;;;;:::i;:::-;-1:-1:-1;7174:9:72;;685:66;7174:34;3369:2;7219:45;;;;7173:92;7155:110;;6954:316::o;13856:272::-;3714:2;14059:7;:15;;14073:1;14059:15;;;14069:1;14059:15;14007:9;;1425:66;14007:33;14051:24;;;;;:71;;;14006:117;13988:135;;;-1:-1:-1;13856:272:72:o;9225:213::-;3565:2;9385:6;:14;;9398:1;9385:14;;;9394:1;9385:14;9343:9;;1129:66;9343:23;9377;;;;;:55;;;9342:91;9324:109;;;-1:-1:-1;9225:213:72:o;17895:237:95:-;17995:18;;:40;;;;;;;;17957:17;;17995:18;;;:38;;:40;;;;;;;;;;;;;;:18;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17977:91;;;;;:72;12454:55:201;;;17977:91:95;;;12436:74:201;17977:72:95;;;;;;;12409:18:201;;17977:91:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18098:28;;;;;;;;;;;;;;;;;17957:111;;-1:-1:-1;18082:14:95;;18074:53;;;;-1:-1:-1;;;18074:53:95;;;;;;;;:::i;12186:251:72:-;3924:2;12377:6;:14;;12390:1;12377:14;;;12386:1;12377:14;12325:9;;1869:66;12325:33;12369:23;;;;;:62;;;12324:108;12306:126;;;-1:-1:-1;12186:251:72:o;17014:293::-;17177:27;;;;;;;;;;;;;;;;;5169:13;17142:33;;;17134:71;;;;-1:-1:-1;;;17134:71:72;;;;;;;;:::i;:::-;-1:-1:-1;17225:9:72;;3053:66;17225:29;4478:3;17259:42;;;;17224:78;17212:90;;17014:293::o;8584:213::-;3502:2;8744:6;:14;;8757:1;8744:14;;;8753:1;8744:14;8702:9;;981:66;8702:23;8736;;;;;:55;;;8701:91;8683:109;;;-1:-1:-1;8584:213:72:o;15457:289::-;15620:25;;;;;;;;;;;;;;;;;4836:11;15585:33;;;15577:69;;;;-1:-1:-1;;;15577:69:72;;;;;;;;:::i;:::-;-1:-1:-1;15666:9:72;;2313:66;15666:27;4127:2;15698:42;;;;15665:76;15653:88;;15457:289::o;19746:306::-;19915:29;;;;;;;;;;;;;;;;;5040:3;19877:36;;;19869:76;;;;-1:-1:-1;;;19869:76:72;;;;;;;;:::i;:::-;-1:-1:-1;19965:9:72;;2757:66;19965:31;4339:3;20001:45;;;;19964:83;19952:95;;19746:306::o;20596:274::-;3995:2;20799:16;:24;;20822:1;20799:24;;;20818:1;20799:24;20746:9;;2017:66;20746:34;20791:33;;;;;:73;;;20745:120;20727:138;;;-1:-1:-1;20596:274:72:o;14:652:201:-;137:6;145;198:2;186:9;177:7;173:23;169:32;166:52;;;214:1;211;204:12;166:52;254:9;241:23;283:18;324:2;316:6;313:14;310:34;;;340:1;337;330:12;310:34;378:6;367:9;363:22;353:32;;423:7;416:4;412:2;408:13;404:27;394:55;;445:1;442;435:12;394:55;485:2;472:16;511:2;503:6;500:14;497:34;;;527:1;524;517:12;497:34;580:7;575:2;565:6;562:1;558:14;554:2;550:23;546:32;543:45;540:65;;;601:1;598;591:12;540:65;632:2;624:11;;;;;654:6;;-1:-1:-1;14:652:201;;-1:-1:-1;;;;14:652:201:o;671:154::-;757:42;750:5;746:54;739:5;736:65;726:93;;815:1;812;805:12;726:93;671:154;:::o;830:134::-;898:20;;927:31;898:20;927:31;:::i;:::-;830:134;;;:::o;969:315::-;1037:6;1045;1098:2;1086:9;1077:7;1073:23;1069:32;1066:52;;;1114:1;1111;1104:12;1066:52;1153:9;1140:23;1172:31;1197:5;1172:31;:::i;:::-;1222:5;1274:2;1259:18;;;;1246:32;;-1:-1:-1;;;969:315:201:o;1289:388::-;1357:6;1365;1418:2;1406:9;1397:7;1393:23;1389:32;1386:52;;;1434:1;1431;1424:12;1386:52;1473:9;1460:23;1492:31;1517:5;1492:31;:::i;:::-;1542:5;-1:-1:-1;1599:2:201;1584:18;;1571:32;1612:33;1571:32;1612:33;:::i;:::-;1664:7;1654:17;;;1289:388;;;;;:::o;1682:146::-;1768:34;1761:5;1757:46;1750:5;1747:57;1737:85;;1818:1;1815;1808:12;1833:247;1892:6;1945:2;1933:9;1924:7;1920:23;1916:32;1913:52;;;1961:1;1958;1951:12;1913:52;2000:9;1987:23;2019:31;2044:5;2019:31;:::i;:::-;2069:5;1833:247;-1:-1:-1;;;1833:247:201:o;2085:180::-;2144:6;2197:2;2185:9;2176:7;2172:23;2168:32;2165:52;;;2213:1;2210;2203:12;2165:52;-1:-1:-1;2236:23:201;;2085:180;-1:-1:-1;2085:180:201:o;2270:118::-;2356:5;2349:13;2342:21;2335:5;2332:32;2322:60;;2378:1;2375;2368:12;2393:382;2458:6;2466;2519:2;2507:9;2498:7;2494:23;2490:32;2487:52;;;2535:1;2532;2525:12;2487:52;2574:9;2561:23;2593:31;2618:5;2593:31;:::i;:::-;2643:5;-1:-1:-1;2700:2:201;2685:18;;2672:32;2713:30;2672:32;2713:30;:::i;2780:247::-;2839:6;2892:2;2880:9;2871:7;2867:23;2863:32;2860:52;;;2908:1;2905;2898:12;2860:52;2947:9;2934:23;2966:31;2991:5;2966:31;:::i;3032:401::-;3132:6;3185:2;3173:9;3164:7;3160:23;3156:32;3153:52;;;3201:1;3198;3191:12;3153:52;3241:9;3228:23;3274:18;3266:6;3263:30;3260:50;;;3306:1;3303;3296:12;3260:50;3329:22;;3385:3;3367:16;;;3363:26;3360:46;;;3402:1;3399;3392:12;3438:241;3494:6;3547:2;3535:9;3526:7;3522:23;3518:32;3515:52;;;3563:1;3560;3553:12;3515:52;3602:9;3589:23;3621:28;3643:5;3621:28;:::i;3866:452::-;3952:6;3960;3968;3976;4029:3;4017:9;4008:7;4004:23;4000:33;3997:53;;;4046:1;4043;4036:12;3997:53;4085:9;4072:23;4104:31;4129:5;4104:31;:::i;:::-;4154:5;4206:2;4191:18;;4178:32;;-1:-1:-1;4257:2:201;4242:18;;4229:32;;4308:2;4293:18;4280:32;;-1:-1:-1;3866:452:201;-1:-1:-1;;;3866:452:201:o;4323:398::-;4420:6;4473:2;4461:9;4452:7;4448:23;4444:32;4441:52;;;4489:1;4486;4479:12;4441:52;4529:9;4516:23;4562:18;4554:6;4551:30;4548:50;;;4594:1;4591;4584:12;4548:50;4617:22;;4673:3;4655:16;;;4651:26;4648:46;;;4690:1;4687;4680:12;4726:156;4792:20;;4852:4;4841:16;;4831:27;;4821:55;;4872:1;4869;4862:12;4887:117;4972:6;4965:5;4961:18;4954:5;4951:29;4941:57;;4994:1;4991;4984:12;5009:1217;5120:6;5128;5136;5144;5152;5160;5168;5221:3;5209:9;5200:7;5196:23;5192:33;5189:53;;;5238:1;5235;5228:12;5189:53;5261:27;5278:9;5261:27;:::i;:::-;5251:37;;5338:2;5327:9;5323:18;5310:32;5351:30;5375:5;5351:30;:::i;:::-;5400:5;-1:-1:-1;5457:2:201;5442:18;;5429:32;5470;5429;5470;:::i;:::-;5521:7;-1:-1:-1;5580:2:201;5565:18;;5552:32;5593;5552;5593;:::i;:::-;5644:7;-1:-1:-1;5703:3:201;5688:19;;5675:33;5717;5675;5717;:::i;:::-;5769:7;-1:-1:-1;5827:3:201;5812:19;;5799:33;5851:18;5881:14;;;5878:34;;;5908:1;5905;5898:12;5878:34;5946:6;5935:9;5931:22;5921:32;;5991:7;5984:4;5980:2;5976:13;5972:27;5962:55;;6013:1;6010;6003:12;5962:55;6053:2;6040:16;6079:2;6071:6;6068:14;6065:34;;;6095:1;6092;6085:12;6065:34;6140:7;6135:2;6126:6;6122:2;6118:15;6114:24;6111:37;6108:57;;;6161:1;6158;6151:12;6108:57;6192:2;6188;6184:11;6174:21;;6214:6;6204:16;;;;;5009:1217;;;;;;;;;;:::o;6514:317::-;6580:6;6588;6641:2;6629:9;6620:7;6616:23;6612:32;6609:52;;;6657:1;6654;6647:12;6609:52;6696:9;6683:23;6715:31;6740:5;6715:31;:::i;:::-;6765:5;-1:-1:-1;6789:36:201;6821:2;6806:18;;6789:36;:::i;:::-;6779:46;;6514:317;;;;;:::o;6836:184::-;6888:77;6885:1;6878:88;6985:4;6982:1;6975:15;7009:4;7006:1;6999:15;7025:393;7128:4;7186:11;7173:25;7276:66;7265:8;7249:14;7245:29;7241:102;7221:18;7217:127;7207:155;;7358:1;7355;7348:12;7207:155;7379:33;;;;;7025:393;-1:-1:-1;;7025:393:201:o;7635:563::-;7694:5;7701:6;7761:3;7748:17;7843:66;7832:8;7816:14;7812:29;7808:102;7788:18;7784:127;7774:155;;7925:1;7922;7915:12;7774:155;7953:33;;8057:4;8044:18;;;-1:-1:-1;8005:21:201;;-1:-1:-1;8085:18:201;8074:30;;8071:50;;;8117:1;8114;8107:12;8071:50;8167:6;8151:14;8147:27;8137:8;8133:42;8130:62;;;8188:1;8185;8178:12;8130:62;7635:563;;;;;:::o;8203:326::-;8292:6;8287:3;8280:19;8344:6;8337:5;8330:4;8325:3;8321:14;8308:43;;8396:1;8389:4;8380:6;8375:3;8371:16;8367:27;8360:38;8262:3;8518:4;8448:66;8443:2;8435:6;8431:15;8427:88;8422:3;8418:98;8414:109;8407:116;;8203:326;;;;:::o;8534:3397::-;8797:42;8789:6;8785:55;8774:9;8767:74;8877:2;8872;8861:9;8857:18;8850:30;8889:66;8951:2;8940:9;8936:18;8908:26;8927:6;8908:26;:::i;:::-;7500:42;7489:54;7477:67;;7423:127;8889:66;8748:4;8984:35;9015:2;9007:6;9003:15;8984:35;:::i;:::-;7500:42;7489:54;9076:2;9061:18;;7477:67;9111:35;9142:2;9130:15;;9111:35;:::i;:::-;7500:42;7489:54;9205:3;9190:19;;7477:67;9241:33;9270:2;9258:15;;9241:33;:::i;:::-;7622:4;7611:16;9331:3;9316:19;;7599:29;9367:36;9398:3;9386:16;;9367:36;:::i;:::-;7500:42;7489:54;9462:3;9447:19;;7477:67;9498:36;9529:3;9517:16;;9498:36;:::i;:::-;7500:42;7489:54;9593:3;9578:19;;7477:67;9629:36;9660:3;9648:16;;9629:36;:::i;:::-;9684:3;9696:54;9746:2;9735:9;9731:18;9715:14;7500:42;7489:54;7477:67;;7423:127;9696:54;9781:36;9812:3;9804:6;9800:16;9781:36;:::i;:::-;9759:58;;9836:3;9848:54;9898:2;9887:9;9883:18;9867:14;7500:42;7489:54;7477:67;;7423:127;9848:54;9947:56;9999:2;9991:6;9987:15;9979:6;9947:56;:::i;:::-;9911:92;;;;10022:6;10047:3;10086:2;10081;10070:9;10066:18;10059:30;10112:77;10184:3;10173:9;10169:19;10155:12;10139:14;10112:77;:::i;:::-;10098:91;;10236:56;10288:2;10280:6;10276:15;10268:6;10236:56;:::i;:::-;10198:94;;;;10311:66;10396:3;10463:2;10451:9;10443:6;10439:22;10435:31;10430:2;10419:9;10415:18;10408:59;10490:66;10549:6;10533:14;10517;10490:66;:::i;:::-;10476:80;;10603:56;10655:2;10647:6;10643:15;10635:6;10603:56;:::i;:::-;10565:94;;;;10678:3;10668:13;;10745:2;10733:9;10725:6;10721:22;10717:31;10712:2;10701:9;10697:18;10690:59;10772:66;10831:6;10815:14;10799;10772:66;:::i;:::-;10758:80;;10886:56;10938:2;10930:6;10926:15;10918:6;10886:56;:::i;:::-;10847:95;;;;;10961:3;11028:2;11016:9;11008:6;11004:22;11000:31;10995:2;10984:9;10980:18;10973:59;11055:67;11115:6;11099:14;11082:15;11055:67;:::i;:::-;11041:81;;11170:56;11222:2;11214:6;11210:15;11202:6;11170:56;:::i;:::-;11131:95;;;;11245:3;11235:13;;11312:2;11300:9;11292:6;11288:22;11284:31;11279:2;11268:9;11264:18;11257:59;11339:67;11399:6;11383:14;11366:15;11339:67;:::i;:::-;11325:81;;11454:56;11506:2;11498:6;11494:15;11486:6;11454:56;:::i;:::-;11415:95;;;;;11574:2;11562:9;11554:6;11550:22;11546:31;11541:2;11530:9;11526:18;11519:59;11601:67;11661:6;11645:14;11628:15;11601:67;:::i;:::-;11587:81;;11716:56;11768:2;11760:6;11756:15;11748:6;11716:56;:::i;:::-;11677:95;;;;11837:2;11825:9;11817:6;11813:22;11809:31;11803:3;11792:9;11788:19;11781:60;;;;11858:67;11918:6;11902:14;11885:15;11858:67;:::i;:::-;11850:75;8534:3397;-1:-1:-1;;;;;;;8534:3397:201:o;11936:349::-;11975:3;12006:66;11999:5;11996:77;11993:257;;;12106:77;12103:1;12096:88;12207:4;12204:1;12197:15;12235:4;12232:1;12225:15;11993:257;-1:-1:-1;12277:1:201;12266:13;;11936:349::o;12521:184::-;12573:77;12570:1;12563:88;12670:4;12667:1;12660:15;12694:4;12691:1;12684:15;12710:252;12782:2;12776:9;12824:3;12812:16;;12858:18;12843:34;;12879:22;;;12840:62;12837:88;;;12905:18;;:::i;:::-;12941:2;12934:22;12710:252;:::o;12967:253::-;13039:2;13033:9;13081:4;13069:17;;13116:18;13101:34;;13137:22;;;13098:62;13095:88;;;13163:18;;:::i;13225:334::-;13296:2;13290:9;13352:2;13342:13;;13357:66;13338:86;13326:99;;13455:18;13440:34;;13476:22;;;13437:62;13434:88;;;13502:18;;:::i;:::-;13538:2;13531:22;13225:334;;-1:-1:-1;13225:334:201:o;13564:426::-;13645:5;13693:4;13681:9;13676:3;13672:19;13668:30;13665:50;;;13711:1;13708;13701:12;13665:50;13744:2;13738:9;13786:4;13778:6;13774:17;13857:6;13845:10;13842:22;13821:18;13809:10;13806:34;13803:62;13800:88;;;13868:18;;:::i;:::-;13904:2;13897:22;13967:16;;13952:32;;-1:-1:-1;13937:6:201;13564:426;-1:-1:-1;13564:426:201:o;13995:282::-;14107:6;14160:2;14148:9;14139:7;14135:23;14131:32;14128:52;;;14176:1;14173;14166:12;14128:52;14199:72;14263:7;14252:9;14199:72;:::i;14928:138::-;15007:13;;15029:31;15007:13;15029:31;:::i;15071:169::-;15149:13;;15202:12;15191:24;;15181:35;;15171:63;;15230:1;15227;15220:12;15245:136;15323:13;;15345:30;15323:13;15345:30;:::i;15386:138::-;15465:13;;15487:31;15465:13;15487:31;:::i;15529:1652::-;15629:6;15682:3;15670:9;15661:7;15657:23;15653:33;15650:53;;;15699:1;15696;15689:12;15650:53;15725:22;;:::i;:::-;15770:72;15834:7;15823:9;15770:72;:::i;:::-;15763:5;15756:87;15875:49;15920:2;15909:9;15905:18;15875:49;:::i;:::-;15870:2;15863:5;15859:14;15852:73;15957:49;16002:2;15991:9;15987:18;15957:49;:::i;:::-;15952:2;15945:5;15941:14;15934:73;16039:49;16084:2;16073:9;16069:18;16039:49;:::i;:::-;16034:2;16027:5;16023:14;16016:73;16122:50;16167:3;16156:9;16152:19;16122:50;:::i;:::-;16116:3;16109:5;16105:15;16098:75;16206:50;16251:3;16240:9;16236:19;16206:50;:::i;:::-;16200:3;16193:5;16189:15;16182:75;16290:49;16334:3;16323:9;16319:19;16290:49;:::i;:::-;16284:3;16277:5;16273:15;16266:74;16373:49;16417:3;16406:9;16402:19;16373:49;:::i;:::-;16367:3;16360:5;16356:15;16349:74;16442:3;16477:49;16522:2;16511:9;16507:18;16477:49;:::i;:::-;16461:14;;;16454:73;16546:3;16581:49;16611:18;;;16581:49;:::i;:::-;16565:14;;;16558:73;16650:3;16685:49;16715:18;;;16685:49;:::i;:::-;16669:14;;;16662:73;16754:3;16789:49;16819:18;;;16789:49;:::i;:::-;16773:14;;;16766:73;16858:3;16893:49;16923:18;;;16893:49;:::i;:::-;16877:14;;;16870:73;16962:3;16997:49;17027:18;;;16997:49;:::i;:::-;16981:14;;;16974:73;17066:3;17101:49;17131:18;;;17101:49;:::i;:::-;17085:14;;;17078:73;17089:5;15529:1652;-1:-1:-1;;;15529:1652:201:o;17518:258::-;17590:1;17600:113;17614:6;17611:1;17608:13;17600:113;;;17690:11;;;17684:18;17671:11;;;17664:39;17636:2;17629:10;17600:113;;;17731:6;17728:1;17725:13;17722:48;;;-1:-1:-1;;17766:1:201;17748:16;;17741:27;17518:258::o;17781:317::-;17823:3;17861:5;17855:12;17888:6;17883:3;17876:19;17904:63;17960:6;17953:4;17948:3;17944:14;17937:4;17930:5;17926:16;17904:63;:::i;:::-;18012:2;18000:15;18017:66;17996:88;17987:98;;;;18087:4;17983:109;;17781:317;-1:-1:-1;;17781:317:201:o;18103:220::-;18252:2;18241:9;18234:21;18215:4;18272:45;18313:2;18302:9;18298:18;18290:6;18272:45;:::i;18328:251::-;18398:6;18451:2;18439:9;18430:7;18426:23;18422:32;18419:52;;;18467:1;18464;18457:12;18419:52;18499:9;18493:16;18518:31;18543:5;18518:31;:::i;18908:184::-;18978:6;19031:2;19019:9;19010:7;19006:23;19002:32;18999:52;;;19047:1;19044;19037:12;18999:52;-1:-1:-1;19070:16:201;;18908:184;-1:-1:-1;18908:184:201:o;19601:1635::-;19823:4;19852:42;19933:2;19925:6;19921:15;19910:9;19903:34;19973:2;19968;19957:9;19953:18;19946:30;20011:6;19998:20;20027:31;20052:5;20027:31;:::i;:::-;20094:14;;20089:2;20074:18;;20067:42;20158:2;20146:15;;20133:29;20171:33;20133:29;20171:33;:::i;:::-;20240:16;20235:2;20220:18;;20213:44;20300:56;20352:2;20340:15;;20344:6;20300:56;:::i;:::-;20393:4;20387:3;20376:9;20372:19;20365:33;20421:75;20491:3;20480:9;20476:19;20462:12;20448;20421:75;:::i;:::-;20407:89;;;20543:56;20595:2;20587:6;20583:15;20575:6;20543:56;:::i;:::-;20618:66;20749:2;20737:9;20729:6;20725:22;20721:31;20715:3;20704:9;20700:19;20693:60;20776:66;20835:6;20819:14;20803;20776:66;:::i;:::-;20762:80;;20873:36;20904:3;20896:6;20892:16;20873:36;:::i;:::-;7500:42;7489:54;;20968:4;20953:20;;7477:67;20851:58;-1:-1:-1;21021:57:201;21073:3;21065:6;21061:16;21053:6;21021:57;:::i;:::-;20983:95;;;;21143:2;21131:9;21123:6;21119:22;21115:31;21109:3;21098:9;21094:19;21087:60;;21164:66;21223:6;21207:14;21191;21164:66;:::i;21241:1011::-;21336:6;21367:2;21410;21398:9;21389:7;21385:23;21381:32;21378:52;;;21426:1;21423;21416:12;21378:52;21459:9;21453:16;21488:18;21529:2;21521:6;21518:14;21515:34;;;21545:1;21542;21535:12;21515:34;21583:6;21572:9;21568:22;21558:32;;21628:7;21621:4;21617:2;21613:13;21609:27;21599:55;;21650:1;21647;21640:12;21599:55;21679:2;21673:9;21701:2;21697;21694:10;21691:36;;;21707:18;;:::i;:::-;21753:2;21750:1;21746:10;21736:20;;21776:28;21800:2;21796;21792:11;21776:28;:::i;:::-;21838:15;;;21908:11;;;21904:20;;;21869:12;;;;21936:19;;;21933:39;;;21968:1;21965;21958:12;21933:39;21992:11;;;;22012:210;22028:6;22023:3;22020:15;22012:210;;;22101:3;22095:10;22082:23;;22118:31;22143:5;22118:31;:::i;:::-;22162:18;;;22045:12;;;;22200;;;;22012:210;;;22241:5;21241:1011;-1:-1:-1;;;;;;;;21241:1011:201:o;22854:1741::-;23070:4;23099:42;23180:2;23172:6;23168:15;23157:9;23150:34;23220:2;23215;23204:9;23200:18;23193:30;23258:6;23245:20;23274:31;23299:5;23274:31;:::i;:::-;23341:14;23336:2;23321:18;;23314:42;23385:35;23416:2;23404:15;;23385:35;:::i;:::-;7500:42;7489:54;23477:2;23462:18;;7477:67;23512:35;23543:2;23531:15;;23512:35;:::i;:::-;7500:42;7489:54;23606:3;23591:19;;7477:67;23656:56;23708:2;23696:15;;23700:6;23656:56;:::i;:::-;23749:4;23743:3;23732:9;23728:19;23721:33;23777:77;23849:3;23838:9;23834:19;23820:12;23804:14;23777:77;:::i;:::-;23763:91;;;23901:57;23953:3;23945:6;23941:16;23933:6;23901:57;:::i;:::-;23977:66;24108:2;24096:9;24088:6;24084:22;24080:31;24074:3;24063:9;24059:19;24052:60;24135:66;24194:6;24178:14;24162;24135:66;:::i;:::-;24121:80;;24232:36;24263:3;24255:6;24251:16;24232:36;:::i;:::-;7500:42;7489:54;;24327:4;24312:20;;7477:67;24210:58;-1:-1:-1;24380:57:201;24432:3;24424:6;24420:16;24412:6;24380:57;:::i;:::-;24342:95;;;;24502:2;24490:9;24482:6;24478:22;24474:31;24468:3;24457:9;24453:19;24446:60;;24523:66;24582:6;24566:14;24550;24523:66;:::i;24600:774::-;24829:4;24821:6;24817:17;24806:9;24799:36;24871:2;24866;24855:9;24851:18;24844:30;24780:4;24893:6;24954:2;24945:6;24939:13;24935:22;24930:2;24919:9;24915:18;24908:50;25022:2;25016;25008:6;25004:15;24998:22;24994:31;24989:2;24978:9;24974:18;24967:59;25091:2;25085;25077:6;25073:15;25067:22;25063:31;25057:3;25046:9;25042:19;25035:60;;25161:42;25155:2;25147:6;25143:15;25137:22;25133:71;25126:4;25115:9;25111:20;25104:101;25252:3;25244:6;25240:16;25234:23;25294:4;25288:3;25277:9;25273:19;25266:33;25316:52;25363:3;25352:9;25348:19;25334:12;25316:52;:::i;:::-;25308:60;24600:774;-1:-1:-1;;;;;24600:774:201:o;25379:632::-;25610:4;25639:6;25684:2;25676:6;25672:15;25661:9;25654:34;25736:2;25728:6;25724:15;25719:2;25708:9;25704:18;25697:43;25788:2;25780:6;25776:15;25771:2;25760:9;25756:18;25749:43;;25840:42;25832:6;25828:55;25823:2;25812:9;25808:18;25801:83;25921:3;25915;25904:9;25900:19;25893:32;25942:63;26000:3;25989:9;25985:19;25977:6;25969;25942:63;:::i;26431:251::-;26501:6;26554:2;26542:9;26533:7;26529:23;26525:32;26522:52;;;26570:1;26567;26560:12;26522:52;26602:9;26596:16;26621:31;26646:5;26621:31;:::i;26876:1547::-;26978:6;27009:2;27052;27040:9;27031:7;27027:23;27023:32;27020:52;;;27068:1;27065;27058:12;27020:52;27101:9;27095:16;27130:18;27171:2;27163:6;27160:14;27157:34;;;27187:1;27184;27177:12;27157:34;27210:22;;;;27266:4;27248:16;;;27244:27;27241:47;;;27284:1;27281;27274:12;27241:47;27310:22;;:::i;:::-;27362:2;27356:9;27374:32;27398:7;27374:32;:::i;:::-;27415:22;;27467:11;;;27461:18;27488:32;27461:18;27488:32;:::i;:::-;27536:14;;;27529:31;27598:2;27590:11;;27584:18;27611:32;27584:18;27611:32;:::i;:::-;27670:2;27659:14;;27652:31;27721:2;27713:11;;27707:18;27734:33;27707:18;27734:33;:::i;:::-;27794:2;27783:14;;27776:31;27846:3;27838:12;;27832:19;27863:16;;;27860:36;;;27892:1;27889;27882:12;27860:36;27923:8;27919:2;27915:17;27905:27;;;27970:7;27963:4;27959:2;27955:13;27951:27;27941:55;;27992:1;27989;27982:12;27941:55;28021:2;28015:9;28043:2;28039;28036:10;28033:36;;;28049:18;;:::i;:::-;28091:112;28199:2;28130:66;28123:4;28119:2;28115:13;28111:86;28107:95;28091:112;:::i;:::-;28078:125;;28226:2;28219:5;28212:17;28266:7;28261:2;28256;28252;28248:11;28244:20;28241:33;28238:53;;;28287:1;28284;28277:12;28238:53;28300:54;28351:2;28346;28339:5;28335:14;28330:2;28326;28322:11;28300:54;:::i;:::-;-1:-1:-1;28381:3:201;28370:15;;28363:30;;;;28374:5;26876:1547;-1:-1:-1;;;;;26876:1547:201:o;28695:245::-;28762:6;28815:2;28803:9;28794:7;28790:23;28786:32;28783:52;;;28831:1;28828;28821:12;28783:52;28863:9;28857:16;28882:28;28904:5;28882:28;:::i;28945:890::-;29113:6;29121;29129;29137;29145;29153;29161;29169;29177;29185;29193:7;29202;29256:3;29244:9;29235:7;29231:23;29227:33;29224:53;;;29273:1;29270;29263:12;29224:53;29302:9;29296:16;29286:26;;29352:2;29341:9;29337:18;29331:25;29321:35;;29396:2;29385:9;29381:18;29375:25;29365:35;;29440:2;29429:9;29425:18;29419:25;29409:35;;29484:3;29473:9;29469:19;29463:26;29453:36;;29529:3;29518:9;29514:19;29508:26;29498:36;;29574:3;29563:9;29559:19;29553:26;29543:36;;29619:3;29608:9;29604:19;29598:26;29588:36;;29664:3;29653:9;29649:19;29643:26;29633:36;;29709:3;29698:9;29694:19;29688:26;29678:36;;29755:3;29744:9;29740:19;29734:26;29723:37;;29780:49;29824:3;29813:9;29809:19;29780:49;:::i;:::-;29769:60;;28945:890;;;;;;;;;;;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"4661000","executionCost":"10468","totalCost":"4671468"},"external":{"CONFIGURATOR_REVISION()":"229","configureReserveAsCollateral(address,uint256,uint256,uint256)":"infinite","dropReserve(address)":"infinite","initReserves((address,address,address,uint8,address,address,address,address,string,string,string,string,string,string,bytes)[])":"infinite","initialize(address)":"infinite","setAssetEModeCategory(address,uint8)":"infinite","setBorrowCap(address,uint256)":"infinite","setBorrowableInIsolation(address,bool)":"infinite","setDebtCeiling(address,uint256)":"infinite","setEModeCategory(uint8,uint16,uint16,uint16,address,string)":"infinite","setLiquidationProtocolFee(address,uint256)":"infinite","setPoolPause(bool)":"infinite","setReserveActive(address,bool)":"infinite","setReserveBorrowing(address,bool)":"infinite","setReserveFactor(address,uint256)":"infinite","setReserveFlashLoaning(address,bool)":"infinite","setReserveFreeze(address,bool)":"infinite","setReserveInterestRateStrategyAddress(address,address)":"infinite","setReservePause(address,bool)":"infinite","setReserveStableRateBorrowing(address,bool)":"infinite","setSiloedBorrowing(address,bool)":"infinite","setSupplyCap(address,uint256)":"infinite","setUnbackedMintCap(address,uint256)":"infinite","updateAToken((address,address,address,string,string,address,bytes))":"infinite","updateBridgeProtocolFee(uint256)":"infinite","updateFlashloanPremiumToProtocol(uint128)":"infinite","updateFlashloanPremiumTotal(uint128)":"infinite","updateStableDebtToken((address,address,string,string,address,bytes))":"infinite","updateVariableDebtToken((address,address,string,string,address,bytes))":"infinite"},"internal":{"_checkNoBorrowers(address)":"infinite","_checkNoSuppliers(address)":"infinite","_onlyAssetListingOrPoolAdmins()":"infinite","_onlyEmergencyAdmin()":"infinite","_onlyPoolAdmin()":"infinite","_onlyPoolOrEmergencyAdmin()":"infinite","_onlyRiskOrPoolAdmins()":"infinite","getRevision()":"infinite"}},"methodIdentifiers":{"CONFIGURATOR_REVISION()":"7af635a6","configureReserveAsCollateral(address,uint256,uint256,uint256)":"7c4e560b","dropReserve(address)":"63c9b860","initReserves((address,address,address,uint8,address,address,address,address,string,string,string,string,string,string,bytes)[])":"02fb45e6","initialize(address)":"c4d66de8","setAssetEModeCategory(address,uint8)":"d4fe3f99","setBorrowCap(address,uint256)":"d14a0983","setBorrowableInIsolation(address,bool)":"38ae0cc3","setDebtCeiling(address,uint256)":"aeb4fcc1","setEModeCategory(uint8,uint16,uint16,uint16,address,string)":"c19d61e4","setLiquidationProtocolFee(address,uint256)":"26d2cec2","setPoolPause(bool)":"7641f3d9","setReserveActive(address,bool)":"b736aaeb","setReserveBorrowing(address,bool)":"682cf264","setReserveFactor(address,uint256)":"4b4e6753","setReserveFlashLoaning(address,bool)":"f213ef0e","setReserveFreeze(address,bool)":"96e957c4","setReserveInterestRateStrategyAddress(address,address)":"1d2118f9","setReservePause(address,bool)":"48d9fba9","setReserveStableRateBorrowing(address,bool)":"8a751a60","setSiloedBorrowing(address,bool)":"a7fa83b7","setSupplyCap(address,uint256)":"571f03e5","setUnbackedMintCap(address,uint256)":"145f5892","updateAToken((address,address,address,string,string,address,bytes))":"bb01c37c","updateBridgeProtocolFee(uint256)":"3036b439","updateFlashloanPremiumToProtocol(uint128)":"1df970bd","updateFlashloanPremiumTotal(uint128)":"8a493676","updateStableDebtToken((address,address,string,string,address,bytes))":"7626cde3","updateVariableDebtToken((address,address,string,string,address,bytes))":"ad4e6432"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ATokenUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldBorrowCap\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBorrowCap\",\"type\":\"uint256\"}],\"name\":\"BorrowCapChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"borrowable\",\"type\":\"bool\"}],\"name\":\"BorrowableInIsolationChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldBridgeProtocolFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBridgeProtocolFee\",\"type\":\"uint256\"}],\"name\":\"BridgeProtocolFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidationThreshold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidationBonus\",\"type\":\"uint256\"}],\"name\":\"CollateralConfigurationChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldDebtCeiling\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newDebtCeiling\",\"type\":\"uint256\"}],\"name\":\"DebtCeilingChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"oldCategoryId\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"newCategoryId\",\"type\":\"uint8\"}],\"name\":\"EModeAssetCategoryChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidationThreshold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidationBonus\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"name\":\"EModeCategoryAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"oldFlashloanPremiumToProtocol\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"newFlashloanPremiumToProtocol\",\"type\":\"uint128\"}],\"name\":\"FlashloanPremiumToProtocolUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"oldFlashloanPremiumTotal\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"newFlashloanPremiumTotal\",\"type\":\"uint128\"}],\"name\":\"FlashloanPremiumTotalUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newFee\",\"type\":\"uint256\"}],\"name\":\"LiquidationProtocolFeeChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"}],\"name\":\"ReserveActive\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"ReserveBorrowing\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"ReserveDropped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldReserveFactor\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newReserveFactor\",\"type\":\"uint256\"}],\"name\":\"ReserveFactorChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"ReserveFlashLoaning\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"frozen\",\"type\":\"bool\"}],\"name\":\"ReserveFrozen\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"aToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"stableDebtToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"variableDebtToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"}],\"name\":\"ReserveInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldStrategy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newStrategy\",\"type\":\"address\"}],\"name\":\"ReserveInterestRateStrategyChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"ReservePaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"ReserveStableRateBorrowing\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"oldState\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"newState\",\"type\":\"bool\"}],\"name\":\"SiloedBorrowingChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"StableDebtTokenUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldSupplyCap\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newSupplyCap\",\"type\":\"uint256\"}],\"name\":\"SupplyCapChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldUnbackedMintCap\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newUnbackedMintCap\",\"type\":\"uint256\"}],\"name\":\"UnbackedMintCapChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"VariableDebtTokenUpgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CONFIGURATOR_REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"ltv\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationBonus\",\"type\":\"uint256\"}],\"name\":\"configureReserveAsCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"dropReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"aTokenImpl\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtTokenImpl\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtTokenImpl\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"underlyingAssetDecimals\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"variableDebtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"variableDebtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"stableDebtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"stableDebtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"internalType\":\"struct ConfiguratorInputTypes.InitReserveInput[]\",\"name\":\"input\",\"type\":\"tuple[]\"}],\"name\":\"initReserves\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"newCategoryId\",\"type\":\"uint8\"}],\"name\":\"setAssetEModeCategory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newBorrowCap\",\"type\":\"uint256\"}],\"name\":\"setBorrowCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"borrowable\",\"type\":\"bool\"}],\"name\":\"setBorrowableInIsolation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newDebtCeiling\",\"type\":\"uint256\"}],\"name\":\"setDebtCeiling\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"categoryId\",\"type\":\"uint8\"},{\"internalType\":\"uint16\",\"name\":\"ltv\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"liquidationBonus\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"name\":\"setEModeCategory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newFee\",\"type\":\"uint256\"}],\"name\":\"setLiquidationProtocolFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"setPoolPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"}],\"name\":\"setReserveActive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setReserveBorrowing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newReserveFactor\",\"type\":\"uint256\"}],\"name\":\"setReserveFactor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setReserveFlashLoaning\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"freeze\",\"type\":\"bool\"}],\"name\":\"setReserveFreeze\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newRateStrategyAddress\",\"type\":\"address\"}],\"name\":\"setReserveInterestRateStrategyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"setReservePause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setReserveStableRateBorrowing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"newSiloed\",\"type\":\"bool\"}],\"name\":\"setSiloedBorrowing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newSupplyCap\",\"type\":\"uint256\"}],\"name\":\"setSupplyCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newUnbackedMintCap\",\"type\":\"uint256\"}],\"name\":\"setUnbackedMintCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"internalType\":\"struct ConfiguratorInputTypes.UpdateATokenInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"updateAToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newBridgeProtocolFee\",\"type\":\"uint256\"}],\"name\":\"updateBridgeProtocolFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"newFlashloanPremiumToProtocol\",\"type\":\"uint128\"}],\"name\":\"updateFlashloanPremiumToProtocol\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"newFlashloanPremiumTotal\",\"type\":\"uint128\"}],\"name\":\"updateFlashloanPremiumTotal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"internalType\":\"struct ConfiguratorInputTypes.UpdateDebtTokenInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"updateStableDebtToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"internalType\":\"struct ConfiguratorInputTypes.UpdateDebtTokenInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"updateVariableDebtToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"Implements the configuration methods for the Aave protocol\",\"kind\":\"dev\",\"methods\":{\"configureReserveAsCollateral(address,uint256,uint256,uint256)\":{\"details\":\"All the values are expressed in bps. A value of 10000, results in 100.00%The `liquidationBonus` is always above 100%. A value of 105% means the liquidator will receive a 5% bonus\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"liquidationBonus\":\"The bonus liquidators receive to liquidate this asset\",\"liquidationThreshold\":\"The threshold at which loans using this asset as collateral will be considered undercollateralized\",\"ltv\":\"The loan to value of the asset when used as collateral\"}},\"dropReserve(address)\":{\"params\":{\"asset\":\"The address of the reserve to drop\"}},\"initReserves((address,address,address,uint8,address,address,address,address,string,string,string,string,string,string,bytes)[])\":{\"params\":{\"input\":\"The array of initialization parameters\"}},\"setAssetEModeCategory(address,uint8)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newCategoryId\":\"The new category id of the asset\"}},\"setBorrowCap(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newBorrowCap\":\"The new borrow cap of the reserve\"}},\"setBorrowableInIsolation(address,bool)\":{\"details\":\"When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed amount will be accumulated in the isolated collateral's total debt exposureOnly assets of the same family (e.g. USD stablecoins) should be borrowable in isolation mode to keep consistency in the debt ceiling calculations\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"borrowable\":\"True if the asset should be borrowable in isolation, false otherwise\"}},\"setDebtCeiling(address,uint256)\":{\"params\":{\"newDebtCeiling\":\"The new debt ceiling\"}},\"setEModeCategory(uint8,uint16,uint16,uint16,address,string)\":{\"details\":\"If zero is provided as oracle address, the default asset oracles will be used to compute the overall debt and overcollateralization of the users using this category.The new ltv and liquidation threshold must be greater than the base ltvs and liquidation thresholds of all assets within the eMode category\",\"params\":{\"categoryId\":\"The id of the category to be configured\",\"label\":\"A label identifying the category\",\"liquidationBonus\":\"The liquidation bonus associated with the category\",\"liquidationThreshold\":\"The liquidation threshold associated with the category\",\"ltv\":\"The ltv associated with the category\",\"oracle\":\"The oracle associated with the category\"}},\"setLiquidationProtocolFee(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newFee\":\"The new liquidation protocol fee of the reserve, expressed in bps\"}},\"setPoolPause(bool)\":{\"params\":{\"paused\":\"True if protocol needs to be paused, false otherwise\"}},\"setReserveActive(address,bool)\":{\"params\":{\"active\":\"True if the reserve needs to be active, false otherwise\",\"asset\":\"The address of the underlying asset of the reserve\"}},\"setReserveBorrowing(address,bool)\":{\"details\":\"Can only be disabled (set to false) if stable borrowing is disabled\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"enabled\":\"True if borrowing needs to be enabled, false otherwise\"}},\"setReserveFactor(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newReserveFactor\":\"The new reserve factor of the reserve\"}},\"setReserveFlashLoaning(address,bool)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"enabled\":\"True if flashloans need to be enabled, false otherwise\"}},\"setReserveFreeze(address,bool)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"freeze\":\"True if the reserve needs to be frozen, false otherwise\"}},\"setReserveInterestRateStrategyAddress(address,address)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newRateStrategyAddress\":\"The address of the new interest strategy contract\"}},\"setReservePause(address,bool)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"paused\":\"True if pausing the reserve, false if unpausing\"}},\"setReserveStableRateBorrowing(address,bool)\":{\"details\":\"Can only be enabled (set to true) if borrowing is enabled\",\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"enabled\":\"True if stable rate borrowing needs to be enabled, false otherwise\"}},\"setSiloedBorrowing(address,bool)\":{\"params\":{\"siloed\":\"The new siloed borrowing state\"}},\"setSupplyCap(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newSupplyCap\":\"The new supply cap of the reserve\"}},\"setUnbackedMintCap(address,uint256)\":{\"params\":{\"asset\":\"The address of the underlying asset of the reserve\",\"newUnbackedMintCap\":\"The new unbacked mint cap of the reserve\"}},\"updateAToken((address,address,address,string,string,address,bytes))\":{\"details\":\"Updates the aToken implementation for the reserve.\",\"params\":{\"input\":\"The aToken update parameters\"}},\"updateBridgeProtocolFee(uint256)\":{\"params\":{\"newBridgeProtocolFee\":\"The part of the fee sent to the protocol treasury, expressed in bps\"}},\"updateFlashloanPremiumToProtocol(uint128)\":{\"details\":\"Expressed in bpsThe premium to protocol is calculated on the total flashloan premium\",\"params\":{\"newFlashloanPremiumToProtocol\":\"The part of the flashloan premium sent to the protocol treasury\"}},\"updateFlashloanPremiumTotal(uint128)\":{\"details\":\"Expressed in bpsThe premium is calculated on the total amount borrowed\",\"params\":{\"newFlashloanPremiumTotal\":\"The total flashloan premium\"}},\"updateStableDebtToken((address,address,string,string,address,bytes))\":{\"params\":{\"input\":\"The stableDebtToken update parameters\"}},\"updateVariableDebtToken((address,address,string,string,address,bytes))\":{\"params\":{\"input\":\"The variableDebtToken update parameters\"}}},\"title\":\"PoolConfigurator\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"configureReserveAsCollateral(address,uint256,uint256,uint256)\":{\"notice\":\"Configures the reserve collateralization parameters.\"},\"dropReserve(address)\":{\"notice\":\"Drops a reserve entirely.\"},\"initReserves((address,address,address,uint8,address,address,address,address,string,string,string,string,string,string,bytes)[])\":{\"notice\":\"Initializes multiple reserves.\"},\"setAssetEModeCategory(address,uint8)\":{\"notice\":\"Assign an efficiency mode (eMode) category to asset.\"},\"setBorrowCap(address,uint256)\":{\"notice\":\"Updates the borrow cap of a reserve.\"},\"setBorrowableInIsolation(address,bool)\":{\"notice\":\"Sets the borrowable in isolation flag for the reserve.\"},\"setDebtCeiling(address,uint256)\":{\"notice\":\"Sets the debt ceiling for an asset.\"},\"setEModeCategory(uint8,uint16,uint16,uint16,address,string)\":{\"notice\":\"Adds a new efficiency mode (eMode) category.\"},\"setLiquidationProtocolFee(address,uint256)\":{\"notice\":\"Updates the liquidation protocol fee of reserve.\"},\"setPoolPause(bool)\":{\"notice\":\"Pauses or unpauses all the protocol reserves. In the paused state all the protocol interactions are suspended.\"},\"setReserveActive(address,bool)\":{\"notice\":\"Activate or deactivate a reserve\"},\"setReserveBorrowing(address,bool)\":{\"notice\":\"Configures borrowing on a reserve.\"},\"setReserveFactor(address,uint256)\":{\"notice\":\"Updates the reserve factor of a reserve.\"},\"setReserveFlashLoaning(address,bool)\":{\"notice\":\"Enable or disable flashloans on a reserve\"},\"setReserveFreeze(address,bool)\":{\"notice\":\"Freeze or unfreeze a reserve. A frozen reserve doesn't allow any new supply, borrow or rate swap but allows repayments, liquidations, rate rebalances and withdrawals.\"},\"setReserveInterestRateStrategyAddress(address,address)\":{\"notice\":\"Sets the interest rate strategy of a reserve.\"},\"setReservePause(address,bool)\":{\"notice\":\"Pauses a reserve. A paused reserve does not allow any interaction (supply, borrow, repay, swap interest rate, liquidate, atoken transfers).\"},\"setReserveStableRateBorrowing(address,bool)\":{\"notice\":\"Enable or disable stable rate borrowing on a reserve.\"},\"setSiloedBorrowing(address,bool)\":{\"notice\":\"Sets siloed borrowing for an asset\"},\"setSupplyCap(address,uint256)\":{\"notice\":\"Updates the supply cap of a reserve.\"},\"setUnbackedMintCap(address,uint256)\":{\"notice\":\"Updates the unbacked mint cap of reserve.\"},\"updateBridgeProtocolFee(uint256)\":{\"notice\":\"Updates the bridge fee collected by the protocol reserves.\"},\"updateFlashloanPremiumToProtocol(uint128)\":{\"notice\":\"Updates the flash loan premium collected by protocol reserves\"},\"updateFlashloanPremiumTotal(uint128)\":{\"notice\":\"Updates the total flash loan premium. Total flash loan premium consists of two parts: - A part is sent to aToken holders as extra balance - A part is collected by the protocol reserves\"},\"updateStableDebtToken((address,address,string,string,address,bytes))\":{\"notice\":\"Updates the stable debt token implementation for the reserve.\"},\"updateVariableDebtToken((address,address,string,string,address,bytes))\":{\"notice\":\"Updates the variable debt token implementation for the asset.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/pool/PoolConfigurator.sol\":\"PoolConfigurator\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './Proxy.sol';\\nimport '../contracts/Address.sol';\\n\\n/**\\n * @title BaseUpgradeabilityProxy\\n * @dev This contract implements a proxy that allows to change the\\n * implementation address to which it will delegate.\\n * Such a change is called an implementation upgrade.\\n */\\ncontract BaseUpgradeabilityProxy is Proxy {\\n  /**\\n   * @dev Emitted when the implementation is upgraded.\\n   * @param implementation Address of the new implementation.\\n   */\\n  event Upgraded(address indexed implementation);\\n\\n  /**\\n   * @dev Storage slot with the address of the current implementation.\\n   * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n   * validated in the constructor.\\n   */\\n  bytes32 internal constant IMPLEMENTATION_SLOT =\\n    0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n  /**\\n   * @dev Returns the current implementation.\\n   * @return impl Address of the current implementation\\n   */\\n  function _implementation() internal view override returns (address impl) {\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n    //solium-disable-next-line\\n    assembly {\\n      impl := sload(slot)\\n    }\\n  }\\n\\n  /**\\n   * @dev Upgrades the proxy to a new implementation.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _upgradeTo(address newImplementation) internal {\\n    _setImplementation(newImplementation);\\n    emit Upgraded(newImplementation);\\n  }\\n\\n  /**\\n   * @dev Sets the implementation address of the proxy.\\n   * @param newImplementation Address of the new implementation.\\n   */\\n  function _setImplementation(address newImplementation) internal {\\n    require(\\n      Address.isContract(newImplementation),\\n      'Cannot set a proxy implementation to a non-contract address'\\n    );\\n\\n    bytes32 slot = IMPLEMENTATION_SLOT;\\n\\n    //solium-disable-next-line\\n    assembly {\\n      sstore(slot, newImplementation)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xe47eb278267d31f096fc643c2a322c72066abfa6ba07f6386c266fe7cbd15013\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport './BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableUpgradeabilityProxy\\n * @dev Extends BaseUpgradeabilityProxy with an initializer for initializing\\n * implementation and init data.\\n */\\ncontract InitializableUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  /**\\n   * @dev Contract initializer.\\n   * @param _logic Address of the initial implementation.\\n   * @param _data Data to send as msg.data to the implementation to initialize the proxied contract.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   * This parameter is optional, if no data is given the initialization call to proxied contract will be skipped.\\n   */\\n  function initialize(address _logic, bytes memory _data) public payable {\\n    require(_implementation() == address(0));\\n    assert(IMPLEMENTATION_SLOT == bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1));\\n    _setImplementation(_logic);\\n    if (_data.length > 0) {\\n      (bool success, ) = _logic.delegatecall(_data);\\n      require(success);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x8a1e927b97f5da20f4640ba4d2588666910dfa89f5a2b0a37440d27e5a47ee08\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Proxy\\n * @dev Implements delegation of calls to other contracts, with proper\\n * forwarding of return values and bubbling of failures.\\n * It defines a fallback function that delegates all calls to the address\\n * returned by the abstract _implementation() internal function.\\n */\\nabstract contract Proxy {\\n  /**\\n   * @dev Fallback function.\\n   * Will run if no other function in the contract matches the call data.\\n   * Implemented entirely in `_fallback`.\\n   */\\n  fallback() external payable {\\n    _fallback();\\n  }\\n\\n  /**\\n   * @return The Address of the implementation.\\n   */\\n  function _implementation() internal view virtual returns (address);\\n\\n  /**\\n   * @dev Delegates execution to an implementation contract.\\n   * This is a low level function that doesn't return to its internal call site.\\n   * It will return to the external caller whatever the implementation returns.\\n   * @param implementation Address to delegate.\\n   */\\n  function _delegate(address implementation) internal {\\n    //solium-disable-next-line\\n    assembly {\\n      // Copy msg.data. We take full control of memory in this inline assembly\\n      // block because it will not return to Solidity code. We overwrite the\\n      // Solidity scratch pad at memory position 0.\\n      calldatacopy(0, 0, calldatasize())\\n\\n      // Call the implementation.\\n      // out and outsize are 0 because we don't know the size yet.\\n      let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n      // Copy the returned data.\\n      returndatacopy(0, 0, returndatasize())\\n\\n      switch result\\n      // delegatecall returns 0 on error.\\n      case 0 {\\n        revert(0, returndatasize())\\n      }\\n      default {\\n        return(0, returndatasize())\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Function that is run as the first thing in the fallback function.\\n   * Can be redefined in derived contracts to add functionality.\\n   * Redefinitions must call super._willFallback().\\n   */\\n  function _willFallback() internal virtual {}\\n\\n  /**\\n   * @dev fallback implementation.\\n   * Extracted to enable manual triggering.\\n   */\\n  function _fallback() internal {\\n    _willFallback();\\n    _delegate(_implementation());\\n  }\\n}\\n\",\"keccak256\":\"0x7b643f46118c949c65385044807890d836dedfb8cd8417a07a4036325130d8e6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolConfigurator.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {ConfiguratorInputTypes} from '../protocol/libraries/types/ConfiguratorInputTypes.sol';\\n\\n/**\\n * @title IPoolConfigurator\\n * @author Aave\\n * @notice Defines the basic interface for a Pool configurator.\\n */\\ninterface IPoolConfigurator {\\n  /**\\n   * @dev Emitted when a reserve is initialized.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aToken The address of the associated aToken contract\\n   * @param stableDebtToken The address of the associated stable rate debt token\\n   * @param variableDebtToken The address of the associated variable rate debt token\\n   * @param interestRateStrategyAddress The address of the interest rate strategy for the reserve\\n   */\\n  event ReserveInitialized(\\n    address indexed asset,\\n    address indexed aToken,\\n    address stableDebtToken,\\n    address variableDebtToken,\\n    address interestRateStrategyAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when borrowing is enabled or disabled on a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if borrowing is enabled, false otherwise\\n   */\\n  event ReserveBorrowing(address indexed asset, bool enabled);\\n\\n  /**\\n   * @dev Emitted when flashloans are enabled or disabled on a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if flashloans are enabled, false otherwise\\n   */\\n  event ReserveFlashLoaning(address indexed asset, bool enabled);\\n\\n  /**\\n   * @dev Emitted when the collateralization risk parameters for the specified asset are updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param ltv The loan to value of the asset when used as collateral\\n   * @param liquidationThreshold The threshold at which loans using this asset as collateral will be considered undercollateralized\\n   * @param liquidationBonus The bonus liquidators receive to liquidate this asset\\n   */\\n  event CollateralConfigurationChanged(\\n    address indexed asset,\\n    uint256 ltv,\\n    uint256 liquidationThreshold,\\n    uint256 liquidationBonus\\n  );\\n\\n  /**\\n   * @dev Emitted when stable rate borrowing is enabled or disabled on a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if stable rate borrowing is enabled, false otherwise\\n   */\\n  event ReserveStableRateBorrowing(address indexed asset, bool enabled);\\n\\n  /**\\n   * @dev Emitted when a reserve is activated or deactivated\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param active True if reserve is active, false otherwise\\n   */\\n  event ReserveActive(address indexed asset, bool active);\\n\\n  /**\\n   * @dev Emitted when a reserve is frozen or unfrozen\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param frozen True if reserve is frozen, false otherwise\\n   */\\n  event ReserveFrozen(address indexed asset, bool frozen);\\n\\n  /**\\n   * @dev Emitted when a reserve is paused or unpaused\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param paused True if reserve is paused, false otherwise\\n   */\\n  event ReservePaused(address indexed asset, bool paused);\\n\\n  /**\\n   * @dev Emitted when a reserve is dropped.\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  event ReserveDropped(address indexed asset);\\n\\n  /**\\n   * @dev Emitted when a reserve factor is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldReserveFactor The old reserve factor, expressed in bps\\n   * @param newReserveFactor The new reserve factor, expressed in bps\\n   */\\n  event ReserveFactorChanged(\\n    address indexed asset,\\n    uint256 oldReserveFactor,\\n    uint256 newReserveFactor\\n  );\\n\\n  /**\\n   * @dev Emitted when the borrow cap of a reserve is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldBorrowCap The old borrow cap\\n   * @param newBorrowCap The new borrow cap\\n   */\\n  event BorrowCapChanged(address indexed asset, uint256 oldBorrowCap, uint256 newBorrowCap);\\n\\n  /**\\n   * @dev Emitted when the supply cap of a reserve is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldSupplyCap The old supply cap\\n   * @param newSupplyCap The new supply cap\\n   */\\n  event SupplyCapChanged(address indexed asset, uint256 oldSupplyCap, uint256 newSupplyCap);\\n\\n  /**\\n   * @dev Emitted when the liquidation protocol fee of a reserve is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldFee The old liquidation protocol fee, expressed in bps\\n   * @param newFee The new liquidation protocol fee, expressed in bps\\n   */\\n  event LiquidationProtocolFeeChanged(address indexed asset, uint256 oldFee, uint256 newFee);\\n\\n  /**\\n   * @dev Emitted when the unbacked mint cap of a reserve is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldUnbackedMintCap The old unbacked mint cap\\n   * @param newUnbackedMintCap The new unbacked mint cap\\n   */\\n  event UnbackedMintCapChanged(\\n    address indexed asset,\\n    uint256 oldUnbackedMintCap,\\n    uint256 newUnbackedMintCap\\n  );\\n\\n  /**\\n   * @dev Emitted when the category of an asset in eMode is changed.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldCategoryId The old eMode asset category\\n   * @param newCategoryId The new eMode asset category\\n   */\\n  event EModeAssetCategoryChanged(address indexed asset, uint8 oldCategoryId, uint8 newCategoryId);\\n\\n  /**\\n   * @dev Emitted when a new eMode category is added.\\n   * @param categoryId The new eMode category id\\n   * @param ltv The ltv for the asset category in eMode\\n   * @param liquidationThreshold The liquidationThreshold for the asset category in eMode\\n   * @param liquidationBonus The liquidationBonus for the asset category in eMode\\n   * @param oracle The optional address of the price oracle specific for this category\\n   * @param label A human readable identifier for the category\\n   */\\n  event EModeCategoryAdded(\\n    uint8 indexed categoryId,\\n    uint256 ltv,\\n    uint256 liquidationThreshold,\\n    uint256 liquidationBonus,\\n    address oracle,\\n    string label\\n  );\\n\\n  /**\\n   * @dev Emitted when a reserve interest strategy contract is updated.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldStrategy The address of the old interest strategy contract\\n   * @param newStrategy The address of the new interest strategy contract\\n   */\\n  event ReserveInterestRateStrategyChanged(\\n    address indexed asset,\\n    address oldStrategy,\\n    address newStrategy\\n  );\\n\\n  /**\\n   * @dev Emitted when an aToken implementation is upgraded.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param proxy The aToken proxy address\\n   * @param implementation The new aToken implementation\\n   */\\n  event ATokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n\\n  /**\\n   * @dev Emitted when the implementation of a stable debt token is upgraded.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param proxy The stable debt token proxy address\\n   * @param implementation The new aToken implementation\\n   */\\n  event StableDebtTokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n\\n  /**\\n   * @dev Emitted when the implementation of a variable debt token is upgraded.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param proxy The variable debt token proxy address\\n   * @param implementation The new aToken implementation\\n   */\\n  event VariableDebtTokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n\\n  /**\\n   * @dev Emitted when the debt ceiling of an asset is set.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldDebtCeiling The old debt ceiling\\n   * @param newDebtCeiling The new debt ceiling\\n   */\\n  event DebtCeilingChanged(address indexed asset, uint256 oldDebtCeiling, uint256 newDebtCeiling);\\n\\n  /**\\n   * @dev Emitted when the the siloed borrowing state for an asset is changed.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param oldState The old siloed borrowing state\\n   * @param newState The new siloed borrowing state\\n   */\\n  event SiloedBorrowingChanged(address indexed asset, bool oldState, bool newState);\\n\\n  /**\\n   * @dev Emitted when the bridge protocol fee is updated.\\n   * @param oldBridgeProtocolFee The old protocol fee, expressed in bps\\n   * @param newBridgeProtocolFee The new protocol fee, expressed in bps\\n   */\\n  event BridgeProtocolFeeUpdated(uint256 oldBridgeProtocolFee, uint256 newBridgeProtocolFee);\\n\\n  /**\\n   * @dev Emitted when the total premium on flashloans is updated.\\n   * @param oldFlashloanPremiumTotal The old premium, expressed in bps\\n   * @param newFlashloanPremiumTotal The new premium, expressed in bps\\n   */\\n  event FlashloanPremiumTotalUpdated(\\n    uint128 oldFlashloanPremiumTotal,\\n    uint128 newFlashloanPremiumTotal\\n  );\\n\\n  /**\\n   * @dev Emitted when the part of the premium that goes to protocol is updated.\\n   * @param oldFlashloanPremiumToProtocol The old premium, expressed in bps\\n   * @param newFlashloanPremiumToProtocol The new premium, expressed in bps\\n   */\\n  event FlashloanPremiumToProtocolUpdated(\\n    uint128 oldFlashloanPremiumToProtocol,\\n    uint128 newFlashloanPremiumToProtocol\\n  );\\n\\n  /**\\n   * @dev Emitted when the reserve is set as borrowable/non borrowable in isolation mode.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param borrowable True if the reserve is borrowable in isolation, false otherwise\\n   */\\n  event BorrowableInIsolationChanged(address asset, bool borrowable);\\n\\n  /**\\n   * @notice Initializes multiple reserves.\\n   * @param input The array of initialization parameters\\n   */\\n  function initReserves(ConfiguratorInputTypes.InitReserveInput[] calldata input) external;\\n\\n  /**\\n   * @dev Updates the aToken implementation for the reserve.\\n   * @param input The aToken update parameters\\n   */\\n  function updateAToken(ConfiguratorInputTypes.UpdateATokenInput calldata input) external;\\n\\n  /**\\n   * @notice Updates the stable debt token implementation for the reserve.\\n   * @param input The stableDebtToken update parameters\\n   */\\n  function updateStableDebtToken(\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) external;\\n\\n  /**\\n   * @notice Updates the variable debt token implementation for the asset.\\n   * @param input The variableDebtToken update parameters\\n   */\\n  function updateVariableDebtToken(\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) external;\\n\\n  /**\\n   * @notice Configures borrowing on a reserve.\\n   * @dev Can only be disabled (set to false) if stable borrowing is disabled\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if borrowing needs to be enabled, false otherwise\\n   */\\n  function setReserveBorrowing(address asset, bool enabled) external;\\n\\n  /**\\n   * @notice Configures the reserve collateralization parameters.\\n   * @dev All the values are expressed in bps. A value of 10000, results in 100.00%\\n   * @dev The `liquidationBonus` is always above 100%. A value of 105% means the liquidator will receive a 5% bonus\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param ltv The loan to value of the asset when used as collateral\\n   * @param liquidationThreshold The threshold at which loans using this asset as collateral will be considered undercollateralized\\n   * @param liquidationBonus The bonus liquidators receive to liquidate this asset\\n   */\\n  function configureReserveAsCollateral(\\n    address asset,\\n    uint256 ltv,\\n    uint256 liquidationThreshold,\\n    uint256 liquidationBonus\\n  ) external;\\n\\n  /**\\n   * @notice Enable or disable stable rate borrowing on a reserve.\\n   * @dev Can only be enabled (set to true) if borrowing is enabled\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setReserveStableRateBorrowing(address asset, bool enabled) external;\\n\\n  /**\\n   * @notice Enable or disable flashloans on a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param enabled True if flashloans need to be enabled, false otherwise\\n   */\\n  function setReserveFlashLoaning(address asset, bool enabled) external;\\n\\n  /**\\n   * @notice Activate or deactivate a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param active True if the reserve needs to be active, false otherwise\\n   */\\n  function setReserveActive(address asset, bool active) external;\\n\\n  /**\\n   * @notice Freeze or unfreeze a reserve. A frozen reserve doesn't allow any new supply, borrow\\n   * or rate swap but allows repayments, liquidations, rate rebalances and withdrawals.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param freeze True if the reserve needs to be frozen, false otherwise\\n   */\\n  function setReserveFreeze(address asset, bool freeze) external;\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the\\n   * borrowed amount will be accumulated in the isolated collateral's total debt exposure\\n   * @dev Only assets of the same family (e.g. USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param borrowable True if the asset should be borrowable in isolation, false otherwise\\n   */\\n  function setBorrowableInIsolation(address asset, bool borrowable) external;\\n\\n  /**\\n   * @notice Pauses a reserve. A paused reserve does not allow any interaction (supply, borrow, repay,\\n   * swap interest rate, liquidate, atoken transfers).\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param paused True if pausing the reserve, false if unpausing\\n   */\\n  function setReservePause(address asset, bool paused) external;\\n\\n  /**\\n   * @notice Updates the reserve factor of a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newReserveFactor The new reserve factor of the reserve\\n   */\\n  function setReserveFactor(address asset, uint256 newReserveFactor) external;\\n\\n  /**\\n   * @notice Sets the interest rate strategy of a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newRateStrategyAddress The address of the new interest strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address newRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Pauses or unpauses all the protocol reserves. In the paused state all the protocol interactions\\n   * are suspended.\\n   * @param paused True if protocol needs to be paused, false otherwise\\n   */\\n  function setPoolPause(bool paused) external;\\n\\n  /**\\n   * @notice Updates the borrow cap of a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newBorrowCap The new borrow cap of the reserve\\n   */\\n  function setBorrowCap(address asset, uint256 newBorrowCap) external;\\n\\n  /**\\n   * @notice Updates the supply cap of a reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newSupplyCap The new supply cap of the reserve\\n   */\\n  function setSupplyCap(address asset, uint256 newSupplyCap) external;\\n\\n  /**\\n   * @notice Updates the liquidation protocol fee of reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newFee The new liquidation protocol fee of the reserve, expressed in bps\\n   */\\n  function setLiquidationProtocolFee(address asset, uint256 newFee) external;\\n\\n  /**\\n   * @notice Updates the unbacked mint cap of reserve.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newUnbackedMintCap The new unbacked mint cap of the reserve\\n   */\\n  function setUnbackedMintCap(address asset, uint256 newUnbackedMintCap) external;\\n\\n  /**\\n   * @notice Assign an efficiency mode (eMode) category to asset.\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param newCategoryId The new category id of the asset\\n   */\\n  function setAssetEModeCategory(address asset, uint8 newCategoryId) external;\\n\\n  /**\\n   * @notice Adds a new efficiency mode (eMode) category.\\n   * @dev If zero is provided as oracle address, the default asset oracles will be used to compute the overall debt and\\n   * overcollateralization of the users using this category.\\n   * @dev The new ltv and liquidation threshold must be greater than the base\\n   * ltvs and liquidation thresholds of all assets within the eMode category\\n   * @param categoryId The id of the category to be configured\\n   * @param ltv The ltv associated with the category\\n   * @param liquidationThreshold The liquidation threshold associated with the category\\n   * @param liquidationBonus The liquidation bonus associated with the category\\n   * @param oracle The oracle associated with the category\\n   * @param label A label identifying the category\\n   */\\n  function setEModeCategory(\\n    uint8 categoryId,\\n    uint16 ltv,\\n    uint16 liquidationThreshold,\\n    uint16 liquidationBonus,\\n    address oracle,\\n    string calldata label\\n  ) external;\\n\\n  /**\\n   * @notice Drops a reserve entirely.\\n   * @param asset The address of the reserve to drop\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the bridge fee collected by the protocol reserves.\\n   * @param newBridgeProtocolFee The part of the fee sent to the protocol treasury, expressed in bps\\n   */\\n  function updateBridgeProtocolFee(uint256 newBridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates the total flash loan premium.\\n   * Total flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra balance\\n   * - A part is collected by the protocol reserves\\n   * @dev Expressed in bps\\n   * @dev The premium is calculated on the total amount borrowed\\n   * @param newFlashloanPremiumTotal The total flashloan premium\\n   */\\n  function updateFlashloanPremiumTotal(uint128 newFlashloanPremiumTotal) external;\\n\\n  /**\\n   * @notice Updates the flash loan premium collected by protocol reserves\\n   * @dev Expressed in bps\\n   * @dev The premium to protocol is calculated on the total flashloan premium\\n   * @param newFlashloanPremiumToProtocol The part of the flashloan premium sent to the protocol treasury\\n   */\\n  function updateFlashloanPremiumToProtocol(uint128 newFlashloanPremiumToProtocol) external;\\n\\n  /**\\n   * @notice Sets the debt ceiling for an asset.\\n   * @param newDebtCeiling The new debt ceiling\\n   */\\n  function setDebtCeiling(address asset, uint256 newDebtCeiling) external;\\n\\n  /**\\n   * @notice Sets siloed borrowing for an asset\\n   * @param siloed The new siloed borrowing state\\n   */\\n  function setSiloedBorrowing(address asset, bool siloed) external;\\n}\\n\",\"keccak256\":\"0xd9083035ef01cdab5f60a04f817f3449814f37d5ade136a3d4734447ede04d71\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolDataProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPoolDataProvider\\n * @author Aave\\n * @notice Defines the basic interface of a PoolDataProvider\\n */\\ninterface IPoolDataProvider {\\n  struct TokenData {\\n    string symbol;\\n    address tokenAddress;\\n  }\\n\\n  /**\\n   * @notice Returns the address for the PoolAddressesProvider contract.\\n   * @return The address for the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the list of the existing reserves in the pool.\\n   * @dev Handling MKR and ETH in a different way since they do not have standard `symbol` functions.\\n   * @return The list of reserves, pairs of symbols and addresses\\n   */\\n  function getAllReservesTokens() external view returns (TokenData[] memory);\\n\\n  /**\\n   * @notice Returns the list of the existing ATokens in the pool.\\n   * @return The list of ATokens, pairs of symbols and addresses\\n   */\\n  function getAllATokens() external view returns (TokenData[] memory);\\n\\n  /**\\n   * @notice Returns the configuration data of the reserve\\n   * @dev Not returning borrow and supply caps for compatibility, nor pause flag\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return decimals The number of decimals of the reserve\\n   * @return ltv The ltv of the reserve\\n   * @return liquidationThreshold The liquidationThreshold of the reserve\\n   * @return liquidationBonus The liquidationBonus of the reserve\\n   * @return reserveFactor The reserveFactor of the reserve\\n   * @return usageAsCollateralEnabled True if the usage as collateral is enabled, false otherwise\\n   * @return borrowingEnabled True if borrowing is enabled, false otherwise\\n   * @return stableBorrowRateEnabled True if stable rate borrowing is enabled, false otherwise\\n   * @return isActive True if it is active, false otherwise\\n   * @return isFrozen True if it is frozen, false otherwise\\n   */\\n  function getReserveConfigurationData(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 decimals,\\n      uint256 ltv,\\n      uint256 liquidationThreshold,\\n      uint256 liquidationBonus,\\n      uint256 reserveFactor,\\n      bool usageAsCollateralEnabled,\\n      bool borrowingEnabled,\\n      bool stableBorrowRateEnabled,\\n      bool isActive,\\n      bool isFrozen\\n    );\\n\\n  /**\\n   * @notice Returns the efficiency mode category of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The eMode id of the reserve\\n   */\\n  function getReserveEModeCategory(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the caps parameters of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return borrowCap The borrow cap of the reserve\\n   * @return supplyCap The supply cap of the reserve\\n   */\\n  function getReserveCaps(\\n    address asset\\n  ) external view returns (uint256 borrowCap, uint256 supplyCap);\\n\\n  /**\\n   * @notice Returns if the pool is paused\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return isPaused True if the pool is paused, false otherwise\\n   */\\n  function getPaused(address asset) external view returns (bool isPaused);\\n\\n  /**\\n   * @notice Returns the siloed borrowing flag\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return True if the asset is siloed for borrowing\\n   */\\n  function getSiloedBorrowing(address asset) external view returns (bool);\\n\\n  /**\\n   * @notice Returns the protocol fee on the liquidation bonus\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The protocol fee on liquidation\\n   */\\n  function getLiquidationProtocolFee(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the unbacked mint cap of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The unbacked mint cap of the reserve\\n   */\\n  function getUnbackedMintCap(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the debt ceiling of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getDebtCeiling(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the debt ceiling decimals\\n   * @return The debt ceiling decimals\\n   */\\n  function getDebtCeilingDecimals() external pure returns (uint256);\\n\\n  /**\\n   * @notice Returns the reserve data\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return unbacked The amount of unbacked tokens\\n   * @return accruedToTreasuryScaled The scaled amount of tokens accrued to treasury that is to be minted\\n   * @return totalAToken The total supply of the aToken\\n   * @return totalStableDebt The total stable debt of the reserve\\n   * @return totalVariableDebt The total variable debt of the reserve\\n   * @return liquidityRate The liquidity rate of the reserve\\n   * @return variableBorrowRate The variable borrow rate of the reserve\\n   * @return stableBorrowRate The stable borrow rate of the reserve\\n   * @return averageStableBorrowRate The average stable borrow rate of the reserve\\n   * @return liquidityIndex The liquidity index of the reserve\\n   * @return variableBorrowIndex The variable borrow index of the reserve\\n   * @return lastUpdateTimestamp The timestamp of the last update of the reserve\\n   */\\n  function getReserveData(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 unbacked,\\n      uint256 accruedToTreasuryScaled,\\n      uint256 totalAToken,\\n      uint256 totalStableDebt,\\n      uint256 totalVariableDebt,\\n      uint256 liquidityRate,\\n      uint256 variableBorrowRate,\\n      uint256 stableBorrowRate,\\n      uint256 averageStableBorrowRate,\\n      uint256 liquidityIndex,\\n      uint256 variableBorrowIndex,\\n      uint40 lastUpdateTimestamp\\n    );\\n\\n  /**\\n   * @notice Returns the total supply of aTokens for a given asset\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The total supply of the aToken\\n   */\\n  function getATokenTotalSupply(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total debt for a given asset\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The total debt for asset\\n   */\\n  function getTotalDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the user data in a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param user The address of the user\\n   * @return currentATokenBalance The current AToken balance of the user\\n   * @return currentStableDebt The current stable debt of the user\\n   * @return currentVariableDebt The current variable debt of the user\\n   * @return principalStableDebt The principal stable debt of the user\\n   * @return scaledVariableDebt The scaled variable debt of the user\\n   * @return stableBorrowRate The stable borrow rate of the user\\n   * @return liquidityRate The liquidity rate of the reserve\\n   * @return stableRateLastUpdated The timestamp of the last update of the user stable rate\\n   * @return usageAsCollateralEnabled True if the user is using the asset as collateral, false\\n   *         otherwise\\n   */\\n  function getUserReserveData(\\n    address asset,\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 currentATokenBalance,\\n      uint256 currentStableDebt,\\n      uint256 currentVariableDebt,\\n      uint256 principalStableDebt,\\n      uint256 scaledVariableDebt,\\n      uint256 stableBorrowRate,\\n      uint256 liquidityRate,\\n      uint40 stableRateLastUpdated,\\n      bool usageAsCollateralEnabled\\n    );\\n\\n  /**\\n   * @notice Returns the token addresses of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return aTokenAddress The AToken address of the reserve\\n   * @return stableDebtTokenAddress The StableDebtToken address of the reserve\\n   * @return variableDebtTokenAddress The VariableDebtToken address of the reserve\\n   */\\n  function getReserveTokensAddresses(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      address aTokenAddress,\\n      address stableDebtTokenAddress,\\n      address variableDebtTokenAddress\\n    );\\n\\n  /**\\n   * @notice Returns the address of the Interest Rate strategy\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return irStrategyAddress The address of the Interest Rate strategy\\n   */\\n  function getInterestRateStrategyAddress(\\n    address asset\\n  ) external view returns (address irStrategyAddress);\\n\\n  /**\\n   * @notice Returns whether the reserve has FlashLoans enabled or disabled\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return True if FlashLoans are enabled, false otherwise\\n   */\\n  function getFlashLoanEnabled(address asset) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xeb42959448d545d6ee49985e4212f54d01fe3c653f6f65cfc4061983df39bf1e\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/BaseImmutableAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {BaseUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol';\\n\\n/**\\n * @title BaseImmutableAdminUpgradeabilityProxy\\n * @author Aave, inspired by the OpenZeppelin upgradeability proxy pattern\\n * @notice This contract combines an upgradeability proxy with an authorization\\n * mechanism for administrative tasks.\\n * @dev The admin role is stored in an immutable, which helps saving transactions costs\\n * All external functions in this contract must be guarded by the\\n * `ifAdmin` modifier. See ethereum/solidity#3864 for a Solidity\\n * feature proposal that would enable this to be done automatically.\\n */\\ncontract BaseImmutableAdminUpgradeabilityProxy is BaseUpgradeabilityProxy {\\n  address internal immutable _admin;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param admin The address of the admin\\n   */\\n  constructor(address admin) {\\n    _admin = admin;\\n  }\\n\\n  modifier ifAdmin() {\\n    if (msg.sender == _admin) {\\n      _;\\n    } else {\\n      _fallback();\\n    }\\n  }\\n\\n  /**\\n   * @notice Return the admin address\\n   * @return The address of the proxy admin.\\n   */\\n  function admin() external ifAdmin returns (address) {\\n    return _admin;\\n  }\\n\\n  /**\\n   * @notice Return the implementation address\\n   * @return The address of the implementation.\\n   */\\n  function implementation() external ifAdmin returns (address) {\\n    return _implementation();\\n  }\\n\\n  /**\\n   * @notice Upgrade the backing implementation of the proxy.\\n   * @dev Only the admin can call this function.\\n   * @param newImplementation The address of the new implementation.\\n   */\\n  function upgradeTo(address newImplementation) external ifAdmin {\\n    _upgradeTo(newImplementation);\\n  }\\n\\n  /**\\n   * @notice Upgrade the backing implementation of the proxy and call a function\\n   * on the new implementation.\\n   * @dev This is useful to initialize the proxied contract.\\n   * @param newImplementation The address of the new implementation.\\n   * @param data Data to send as msg.data in the low level call.\\n   * It should include the signature and the parameters of the function to be called, as described in\\n   * https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.\\n   */\\n  function upgradeToAndCall(\\n    address newImplementation,\\n    bytes calldata data\\n  ) external payable ifAdmin {\\n    _upgradeTo(newImplementation);\\n    (bool success, ) = newImplementation.delegatecall(data);\\n    require(success);\\n  }\\n\\n  /**\\n   * @notice Only fall back when the sender is not the admin.\\n   */\\n  function _willFallback() internal virtual override {\\n    require(msg.sender != _admin, 'Cannot call fallback function from the proxy admin');\\n    super._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0x11d0bbbcb776fc3519b79af975016fa342115cff9e70d982acfe3b7f86683674\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {InitializableUpgradeabilityProxy} from '../../../dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol';\\nimport {Proxy} from '../../../dependencies/openzeppelin/upgradeability/Proxy.sol';\\nimport {BaseImmutableAdminUpgradeabilityProxy} from './BaseImmutableAdminUpgradeabilityProxy.sol';\\n\\n/**\\n * @title InitializableAdminUpgradeabilityProxy\\n * @author Aave\\n * @dev Extends BaseAdminUpgradeabilityProxy with an initializer function\\n */\\ncontract InitializableImmutableAdminUpgradeabilityProxy is\\n  BaseImmutableAdminUpgradeabilityProxy,\\n  InitializableUpgradeabilityProxy\\n{\\n  /**\\n   * @dev Constructor.\\n   * @param admin The address of the admin\\n   */\\n  constructor(address admin) BaseImmutableAdminUpgradeabilityProxy(admin) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc BaseImmutableAdminUpgradeabilityProxy\\n  function _willFallback() internal override(BaseImmutableAdminUpgradeabilityProxy, Proxy) {\\n    BaseImmutableAdminUpgradeabilityProxy._willFallback();\\n  }\\n}\\n\",\"keccak256\":\"0xea2a329a627687f51e7f1240a05406efb208b036054dc6ed5aca217cdc0020f0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ConfiguratorLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IInitializableAToken} from '../../../interfaces/IInitializableAToken.sol';\\nimport {IInitializableDebtToken} from '../../../interfaces/IInitializableDebtToken.sol';\\nimport {InitializableImmutableAdminUpgradeabilityProxy} from '../aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ConfiguratorInputTypes} from '../types/ConfiguratorInputTypes.sol';\\n\\n/**\\n * @title ConfiguratorLogic library\\n * @author Aave\\n * @notice Implements the functions to initialize reserves and update aTokens and debtTokens\\n */\\nlibrary ConfiguratorLogic {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPoolConfigurator` for descriptions\\n  event ReserveInitialized(\\n    address indexed asset,\\n    address indexed aToken,\\n    address stableDebtToken,\\n    address variableDebtToken,\\n    address interestRateStrategyAddress\\n  );\\n  event ATokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n  event StableDebtTokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n  event VariableDebtTokenUpgraded(\\n    address indexed asset,\\n    address indexed proxy,\\n    address indexed implementation\\n  );\\n\\n  /**\\n   * @notice Initialize a reserve by creating and initializing aToken, stable debt token and variable debt token\\n   * @dev Emits the `ReserveInitialized` event\\n   * @param pool The Pool in which the reserve will be initialized\\n   * @param input The needed parameters for the initialization\\n   */\\n  function executeInitReserve(\\n    IPool pool,\\n    ConfiguratorInputTypes.InitReserveInput calldata input\\n  ) public {\\n    address aTokenProxyAddress = _initTokenWithProxy(\\n      input.aTokenImpl,\\n      abi.encodeWithSelector(\\n        IInitializableAToken.initialize.selector,\\n        pool,\\n        input.treasury,\\n        input.underlyingAsset,\\n        input.incentivesController,\\n        input.underlyingAssetDecimals,\\n        input.aTokenName,\\n        input.aTokenSymbol,\\n        input.params\\n      )\\n    );\\n\\n    address stableDebtTokenProxyAddress = _initTokenWithProxy(\\n      input.stableDebtTokenImpl,\\n      abi.encodeWithSelector(\\n        IInitializableDebtToken.initialize.selector,\\n        pool,\\n        input.underlyingAsset,\\n        input.incentivesController,\\n        input.underlyingAssetDecimals,\\n        input.stableDebtTokenName,\\n        input.stableDebtTokenSymbol,\\n        input.params\\n      )\\n    );\\n\\n    address variableDebtTokenProxyAddress = _initTokenWithProxy(\\n      input.variableDebtTokenImpl,\\n      abi.encodeWithSelector(\\n        IInitializableDebtToken.initialize.selector,\\n        pool,\\n        input.underlyingAsset,\\n        input.incentivesController,\\n        input.underlyingAssetDecimals,\\n        input.variableDebtTokenName,\\n        input.variableDebtTokenSymbol,\\n        input.params\\n      )\\n    );\\n\\n    pool.initReserve(\\n      input.underlyingAsset,\\n      aTokenProxyAddress,\\n      stableDebtTokenProxyAddress,\\n      variableDebtTokenProxyAddress,\\n      input.interestRateStrategyAddress\\n    );\\n\\n    DataTypes.ReserveConfigurationMap memory currentConfig = DataTypes.ReserveConfigurationMap(0);\\n\\n    currentConfig.setDecimals(input.underlyingAssetDecimals);\\n\\n    currentConfig.setActive(true);\\n    currentConfig.setPaused(false);\\n    currentConfig.setFrozen(false);\\n\\n    pool.setConfiguration(input.underlyingAsset, currentConfig);\\n\\n    emit ReserveInitialized(\\n      input.underlyingAsset,\\n      aTokenProxyAddress,\\n      stableDebtTokenProxyAddress,\\n      variableDebtTokenProxyAddress,\\n      input.interestRateStrategyAddress\\n    );\\n  }\\n\\n  /**\\n   * @notice Updates the aToken implementation and initializes it\\n   * @dev Emits the `ATokenUpgraded` event\\n   * @param cachedPool The Pool containing the reserve with the aToken\\n   * @param input The parameters needed for the initialize call\\n   */\\n  function executeUpdateAToken(\\n    IPool cachedPool,\\n    ConfiguratorInputTypes.UpdateATokenInput calldata input\\n  ) public {\\n    DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);\\n\\n    (, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();\\n\\n    bytes memory encodedCall = abi.encodeWithSelector(\\n      IInitializableAToken.initialize.selector,\\n      cachedPool,\\n      input.treasury,\\n      input.asset,\\n      input.incentivesController,\\n      decimals,\\n      input.name,\\n      input.symbol,\\n      input.params\\n    );\\n\\n    _upgradeTokenImplementation(reserveData.aTokenAddress, input.implementation, encodedCall);\\n\\n    emit ATokenUpgraded(input.asset, reserveData.aTokenAddress, input.implementation);\\n  }\\n\\n  /**\\n   * @notice Updates the stable debt token implementation and initializes it\\n   * @dev Emits the `StableDebtTokenUpgraded` event\\n   * @param cachedPool The Pool containing the reserve with the stable debt token\\n   * @param input The parameters needed for the initialize call\\n   */\\n  function executeUpdateStableDebtToken(\\n    IPool cachedPool,\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) public {\\n    DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);\\n\\n    (, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();\\n\\n    bytes memory encodedCall = abi.encodeWithSelector(\\n      IInitializableDebtToken.initialize.selector,\\n      cachedPool,\\n      input.asset,\\n      input.incentivesController,\\n      decimals,\\n      input.name,\\n      input.symbol,\\n      input.params\\n    );\\n\\n    _upgradeTokenImplementation(\\n      reserveData.stableDebtTokenAddress,\\n      input.implementation,\\n      encodedCall\\n    );\\n\\n    emit StableDebtTokenUpgraded(\\n      input.asset,\\n      reserveData.stableDebtTokenAddress,\\n      input.implementation\\n    );\\n  }\\n\\n  /**\\n   * @notice Updates the variable debt token implementation and initializes it\\n   * @dev Emits the `VariableDebtTokenUpgraded` event\\n   * @param cachedPool The Pool containing the reserve with the variable debt token\\n   * @param input The parameters needed for the initialize call\\n   */\\n  function executeUpdateVariableDebtToken(\\n    IPool cachedPool,\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) public {\\n    DataTypes.ReserveData memory reserveData = cachedPool.getReserveData(input.asset);\\n\\n    (, , , uint256 decimals, , ) = cachedPool.getConfiguration(input.asset).getParams();\\n\\n    bytes memory encodedCall = abi.encodeWithSelector(\\n      IInitializableDebtToken.initialize.selector,\\n      cachedPool,\\n      input.asset,\\n      input.incentivesController,\\n      decimals,\\n      input.name,\\n      input.symbol,\\n      input.params\\n    );\\n\\n    _upgradeTokenImplementation(\\n      reserveData.variableDebtTokenAddress,\\n      input.implementation,\\n      encodedCall\\n    );\\n\\n    emit VariableDebtTokenUpgraded(\\n      input.asset,\\n      reserveData.variableDebtTokenAddress,\\n      input.implementation\\n    );\\n  }\\n\\n  /**\\n   * @notice Creates a new proxy and initializes the implementation\\n   * @param implementation The address of the implementation\\n   * @param initParams The parameters that is passed to the implementation to initialize\\n   * @return The address of initialized proxy\\n   */\\n  function _initTokenWithProxy(\\n    address implementation,\\n    bytes memory initParams\\n  ) internal returns (address) {\\n    InitializableImmutableAdminUpgradeabilityProxy proxy = new InitializableImmutableAdminUpgradeabilityProxy(\\n        address(this)\\n      );\\n\\n    proxy.initialize(implementation, initParams);\\n\\n    return address(proxy);\\n  }\\n\\n  /**\\n   * @notice Upgrades the implementation and makes call to the proxy\\n   * @dev The call is used to initialize the new implementation.\\n   * @param proxyAddress The address of the proxy\\n   * @param implementation The address of the new implementation\\n   * @param  initParams The parameters to the call after the upgrade\\n   */\\n  function _upgradeTokenImplementation(\\n    address proxyAddress,\\n    address implementation,\\n    bytes memory initParams\\n  ) internal {\\n    InitializableImmutableAdminUpgradeabilityProxy proxy = InitializableImmutableAdminUpgradeabilityProxy(\\n        payable(proxyAddress)\\n      );\\n\\n    proxy.upgradeToAndCall(implementation, initParams);\\n  }\\n}\\n\",\"keccak256\":\"0xfbf8cf6a8cbfb4c0624f76f1607ec76a58b7320e662309806ee79d6728b78fb7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/ConfiguratorInputTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary ConfiguratorInputTypes {\\n  struct InitReserveInput {\\n    address aTokenImpl;\\n    address stableDebtTokenImpl;\\n    address variableDebtTokenImpl;\\n    uint8 underlyingAssetDecimals;\\n    address interestRateStrategyAddress;\\n    address underlyingAsset;\\n    address treasury;\\n    address incentivesController;\\n    string aTokenName;\\n    string aTokenSymbol;\\n    string variableDebtTokenName;\\n    string variableDebtTokenSymbol;\\n    string stableDebtTokenName;\\n    string stableDebtTokenSymbol;\\n    bytes params;\\n  }\\n\\n  struct UpdateATokenInput {\\n    address asset;\\n    address treasury;\\n    address incentivesController;\\n    string name;\\n    string symbol;\\n    address implementation;\\n    bytes params;\\n  }\\n\\n  struct UpdateDebtTokenInput {\\n    address asset;\\n    address incentivesController;\\n    string name;\\n    string symbol;\\n    address implementation;\\n    bytes params;\\n  }\\n}\\n\",\"keccak256\":\"0x1fb622bd7b4f68289b727a824c92ab4c05b06f4aa8308c7d2b0ccb0f9ae63b0b\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/pool/PoolConfigurator.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {PercentageMath} from '../libraries/math/PercentageMath.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\nimport {ConfiguratorLogic} from '../libraries/logic/ConfiguratorLogic.sol';\\nimport {ConfiguratorInputTypes} from '../libraries/types/ConfiguratorInputTypes.sol';\\nimport {IPoolConfigurator} from '../../interfaces/IPoolConfigurator.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../interfaces/IACLManager.sol';\\nimport {IPoolDataProvider} from '../../interfaces/IPoolDataProvider.sol';\\n\\n/**\\n * @title PoolConfigurator\\n * @author Aave\\n * @dev Implements the configuration methods for the Aave protocol\\n */\\ncontract PoolConfigurator is VersionedInitializable, IPoolConfigurator {\\n  using PercentageMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  IPoolAddressesProvider internal _addressesProvider;\\n  IPool internal _pool;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    _onlyPoolAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only emergency admin can call functions marked by this modifier.\\n   */\\n  modifier onlyEmergencyAdmin() {\\n    _onlyEmergencyAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only emergency or pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyEmergencyOrPoolAdmin() {\\n    _onlyPoolOrEmergencyAdmin();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only asset listing or pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyAssetListingOrPoolAdmins() {\\n    _onlyAssetListingOrPoolAdmins();\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only risk or pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyRiskOrPoolAdmins() {\\n    _onlyRiskOrPoolAdmins();\\n    _;\\n  }\\n\\n  uint256 public constant CONFIGURATOR_REVISION = 0x1;\\n\\n  /// @inheritdoc VersionedInitializable\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return CONFIGURATOR_REVISION;\\n  }\\n\\n  function initialize(IPoolAddressesProvider provider) public initializer {\\n    _addressesProvider = provider;\\n    _pool = IPool(_addressesProvider.getPool());\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function initReserves(\\n    ConfiguratorInputTypes.InitReserveInput[] calldata input\\n  ) external override onlyAssetListingOrPoolAdmins {\\n    IPool cachedPool = _pool;\\n    for (uint256 i = 0; i < input.length; i++) {\\n      ConfiguratorLogic.executeInitReserve(cachedPool, input[i]);\\n    }\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function dropReserve(address asset) external override onlyPoolAdmin {\\n    _pool.dropReserve(asset);\\n    emit ReserveDropped(asset);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function updateAToken(\\n    ConfiguratorInputTypes.UpdateATokenInput calldata input\\n  ) external override onlyPoolAdmin {\\n    ConfiguratorLogic.executeUpdateAToken(_pool, input);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function updateStableDebtToken(\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) external override onlyPoolAdmin {\\n    ConfiguratorLogic.executeUpdateStableDebtToken(_pool, input);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function updateVariableDebtToken(\\n    ConfiguratorInputTypes.UpdateDebtTokenInput calldata input\\n  ) external override onlyPoolAdmin {\\n    ConfiguratorLogic.executeUpdateVariableDebtToken(_pool, input);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveBorrowing(address asset, bool enabled) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    if (!enabled) {\\n      require(!currentConfig.getStableRateBorrowingEnabled(), Errors.STABLE_BORROWING_ENABLED);\\n    }\\n    currentConfig.setBorrowingEnabled(enabled);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReserveBorrowing(asset, enabled);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function configureReserveAsCollateral(\\n    address asset,\\n    uint256 ltv,\\n    uint256 liquidationThreshold,\\n    uint256 liquidationBonus\\n  ) external override onlyRiskOrPoolAdmins {\\n    //validation of the parameters: the LTV can\\n    //only be lower or equal than the liquidation threshold\\n    //(otherwise a loan against the asset would cause instantaneous liquidation)\\n    require(ltv <= liquidationThreshold, Errors.INVALID_RESERVE_PARAMS);\\n\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n\\n    if (liquidationThreshold != 0) {\\n      //liquidation bonus must be bigger than 100.00%, otherwise the liquidator would receive less\\n      //collateral than needed to cover the debt\\n      require(liquidationBonus > PercentageMath.PERCENTAGE_FACTOR, Errors.INVALID_RESERVE_PARAMS);\\n\\n      //if threshold * bonus is less than PERCENTAGE_FACTOR, it's guaranteed that at the moment\\n      //a loan is taken there is enough collateral available to cover the liquidation bonus\\n      require(\\n        liquidationThreshold.percentMul(liquidationBonus) <= PercentageMath.PERCENTAGE_FACTOR,\\n        Errors.INVALID_RESERVE_PARAMS\\n      );\\n    } else {\\n      require(liquidationBonus == 0, Errors.INVALID_RESERVE_PARAMS);\\n      //if the liquidation threshold is being set to 0,\\n      // the reserve is being disabled as collateral. To do so,\\n      //we need to ensure no liquidity is supplied\\n      _checkNoSuppliers(asset);\\n    }\\n\\n    currentConfig.setLtv(ltv);\\n    currentConfig.setLiquidationThreshold(liquidationThreshold);\\n    currentConfig.setLiquidationBonus(liquidationBonus);\\n\\n    _pool.setConfiguration(asset, currentConfig);\\n\\n    emit CollateralConfigurationChanged(asset, ltv, liquidationThreshold, liquidationBonus);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveStableRateBorrowing(\\n    address asset,\\n    bool enabled\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    if (enabled) {\\n      require(currentConfig.getBorrowingEnabled(), Errors.BORROWING_NOT_ENABLED);\\n    }\\n    currentConfig.setStableRateBorrowingEnabled(enabled);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReserveStableRateBorrowing(asset, enabled);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveFlashLoaning(\\n    address asset,\\n    bool enabled\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n\\n    currentConfig.setFlashLoanEnabled(enabled);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReserveFlashLoaning(asset, enabled);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveActive(address asset, bool active) external override onlyPoolAdmin {\\n    if (!active) _checkNoSuppliers(asset);\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    currentConfig.setActive(active);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReserveActive(asset, active);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveFreeze(address asset, bool freeze) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    currentConfig.setFrozen(freeze);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReserveFrozen(asset, freeze);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setBorrowableInIsolation(\\n    address asset,\\n    bool borrowable\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    currentConfig.setBorrowableInIsolation(borrowable);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit BorrowableInIsolationChanged(asset, borrowable);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReservePause(address asset, bool paused) public override onlyEmergencyOrPoolAdmin {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    currentConfig.setPaused(paused);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReservePaused(asset, paused);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveFactor(\\n    address asset,\\n    uint256 newReserveFactor\\n  ) external override onlyRiskOrPoolAdmins {\\n    require(newReserveFactor <= PercentageMath.PERCENTAGE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    uint256 oldReserveFactor = currentConfig.getReserveFactor();\\n    currentConfig.setReserveFactor(newReserveFactor);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit ReserveFactorChanged(asset, oldReserveFactor, newReserveFactor);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setDebtCeiling(\\n    address asset,\\n    uint256 newDebtCeiling\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n\\n    uint256 oldDebtCeiling = currentConfig.getDebtCeiling();\\n    if (oldDebtCeiling == 0) {\\n      _checkNoSuppliers(asset);\\n    }\\n    currentConfig.setDebtCeiling(newDebtCeiling);\\n    _pool.setConfiguration(asset, currentConfig);\\n\\n    if (newDebtCeiling == 0) {\\n      _pool.resetIsolationModeTotalDebt(asset);\\n    }\\n\\n    emit DebtCeilingChanged(asset, oldDebtCeiling, newDebtCeiling);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setSiloedBorrowing(\\n    address asset,\\n    bool newSiloed\\n  ) external override onlyRiskOrPoolAdmins {\\n    if (newSiloed) {\\n      _checkNoBorrowers(asset);\\n    }\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n\\n    bool oldSiloed = currentConfig.getSiloedBorrowing();\\n\\n    currentConfig.setSiloedBorrowing(newSiloed);\\n\\n    _pool.setConfiguration(asset, currentConfig);\\n\\n    emit SiloedBorrowingChanged(asset, oldSiloed, newSiloed);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setBorrowCap(\\n    address asset,\\n    uint256 newBorrowCap\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    uint256 oldBorrowCap = currentConfig.getBorrowCap();\\n    currentConfig.setBorrowCap(newBorrowCap);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit BorrowCapChanged(asset, oldBorrowCap, newBorrowCap);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setSupplyCap(\\n    address asset,\\n    uint256 newSupplyCap\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    uint256 oldSupplyCap = currentConfig.getSupplyCap();\\n    currentConfig.setSupplyCap(newSupplyCap);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit SupplyCapChanged(asset, oldSupplyCap, newSupplyCap);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setLiquidationProtocolFee(\\n    address asset,\\n    uint256 newFee\\n  ) external override onlyRiskOrPoolAdmins {\\n    require(newFee <= PercentageMath.PERCENTAGE_FACTOR, Errors.INVALID_LIQUIDATION_PROTOCOL_FEE);\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    uint256 oldFee = currentConfig.getLiquidationProtocolFee();\\n    currentConfig.setLiquidationProtocolFee(newFee);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit LiquidationProtocolFeeChanged(asset, oldFee, newFee);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setEModeCategory(\\n    uint8 categoryId,\\n    uint16 ltv,\\n    uint16 liquidationThreshold,\\n    uint16 liquidationBonus,\\n    address oracle,\\n    string calldata label\\n  ) external override onlyRiskOrPoolAdmins {\\n    require(ltv != 0, Errors.INVALID_EMODE_CATEGORY_PARAMS);\\n    require(liquidationThreshold != 0, Errors.INVALID_EMODE_CATEGORY_PARAMS);\\n\\n    // validation of the parameters: the LTV can\\n    // only be lower or equal than the liquidation threshold\\n    // (otherwise a loan against the asset would cause instantaneous liquidation)\\n    require(ltv <= liquidationThreshold, Errors.INVALID_EMODE_CATEGORY_PARAMS);\\n    require(\\n      liquidationBonus > PercentageMath.PERCENTAGE_FACTOR,\\n      Errors.INVALID_EMODE_CATEGORY_PARAMS\\n    );\\n\\n    // if threshold * bonus is less than PERCENTAGE_FACTOR, it's guaranteed that at the moment\\n    // a loan is taken there is enough collateral available to cover the liquidation bonus\\n    require(\\n      uint256(liquidationThreshold).percentMul(liquidationBonus) <=\\n        PercentageMath.PERCENTAGE_FACTOR,\\n      Errors.INVALID_EMODE_CATEGORY_PARAMS\\n    );\\n\\n    address[] memory reserves = _pool.getReservesList();\\n    for (uint256 i = 0; i < reserves.length; i++) {\\n      DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(reserves[i]);\\n      if (categoryId == currentConfig.getEModeCategory()) {\\n        require(ltv > currentConfig.getLtv(), Errors.INVALID_EMODE_CATEGORY_PARAMS);\\n        require(\\n          liquidationThreshold > currentConfig.getLiquidationThreshold(),\\n          Errors.INVALID_EMODE_CATEGORY_PARAMS\\n        );\\n      }\\n    }\\n\\n    _pool.configureEModeCategory(\\n      categoryId,\\n      DataTypes.EModeCategory({\\n        ltv: ltv,\\n        liquidationThreshold: liquidationThreshold,\\n        liquidationBonus: liquidationBonus,\\n        priceSource: oracle,\\n        label: label\\n      })\\n    );\\n    emit EModeCategoryAdded(categoryId, ltv, liquidationThreshold, liquidationBonus, oracle, label);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setAssetEModeCategory(\\n    address asset,\\n    uint8 newCategoryId\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n\\n    if (newCategoryId != 0) {\\n      DataTypes.EModeCategory memory categoryData = _pool.getEModeCategoryData(newCategoryId);\\n      require(\\n        categoryData.liquidationThreshold > currentConfig.getLiquidationThreshold(),\\n        Errors.INVALID_EMODE_CATEGORY_ASSIGNMENT\\n      );\\n    }\\n    uint256 oldCategoryId = currentConfig.getEModeCategory();\\n    currentConfig.setEModeCategory(newCategoryId);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit EModeAssetCategoryChanged(asset, uint8(oldCategoryId), newCategoryId);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setUnbackedMintCap(\\n    address asset,\\n    uint256 newUnbackedMintCap\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset);\\n    uint256 oldUnbackedMintCap = currentConfig.getUnbackedMintCap();\\n    currentConfig.setUnbackedMintCap(newUnbackedMintCap);\\n    _pool.setConfiguration(asset, currentConfig);\\n    emit UnbackedMintCapChanged(asset, oldUnbackedMintCap, newUnbackedMintCap);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address newRateStrategyAddress\\n  ) external override onlyRiskOrPoolAdmins {\\n    DataTypes.ReserveData memory reserve = _pool.getReserveData(asset);\\n    address oldRateStrategyAddress = reserve.interestRateStrategyAddress;\\n    _pool.setReserveInterestRateStrategyAddress(asset, newRateStrategyAddress);\\n    emit ReserveInterestRateStrategyChanged(asset, oldRateStrategyAddress, newRateStrategyAddress);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function setPoolPause(bool paused) external override onlyEmergencyAdmin {\\n    address[] memory reserves = _pool.getReservesList();\\n\\n    for (uint256 i = 0; i < reserves.length; i++) {\\n      if (reserves[i] != address(0)) {\\n        setReservePause(reserves[i], paused);\\n      }\\n    }\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function updateBridgeProtocolFee(uint256 newBridgeProtocolFee) external override onlyPoolAdmin {\\n    require(\\n      newBridgeProtocolFee <= PercentageMath.PERCENTAGE_FACTOR,\\n      Errors.BRIDGE_PROTOCOL_FEE_INVALID\\n    );\\n    uint256 oldBridgeProtocolFee = _pool.BRIDGE_PROTOCOL_FEE();\\n    _pool.updateBridgeProtocolFee(newBridgeProtocolFee);\\n    emit BridgeProtocolFeeUpdated(oldBridgeProtocolFee, newBridgeProtocolFee);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function updateFlashloanPremiumTotal(\\n    uint128 newFlashloanPremiumTotal\\n  ) external override onlyPoolAdmin {\\n    require(\\n      newFlashloanPremiumTotal <= PercentageMath.PERCENTAGE_FACTOR,\\n      Errors.FLASHLOAN_PREMIUM_INVALID\\n    );\\n    uint128 oldFlashloanPremiumTotal = _pool.FLASHLOAN_PREMIUM_TOTAL();\\n    _pool.updateFlashloanPremiums(newFlashloanPremiumTotal, _pool.FLASHLOAN_PREMIUM_TO_PROTOCOL());\\n    emit FlashloanPremiumTotalUpdated(oldFlashloanPremiumTotal, newFlashloanPremiumTotal);\\n  }\\n\\n  /// @inheritdoc IPoolConfigurator\\n  function updateFlashloanPremiumToProtocol(\\n    uint128 newFlashloanPremiumToProtocol\\n  ) external override onlyPoolAdmin {\\n    require(\\n      newFlashloanPremiumToProtocol <= PercentageMath.PERCENTAGE_FACTOR,\\n      Errors.FLASHLOAN_PREMIUM_INVALID\\n    );\\n    uint128 oldFlashloanPremiumToProtocol = _pool.FLASHLOAN_PREMIUM_TO_PROTOCOL();\\n    _pool.updateFlashloanPremiums(_pool.FLASHLOAN_PREMIUM_TOTAL(), newFlashloanPremiumToProtocol);\\n    emit FlashloanPremiumToProtocolUpdated(\\n      oldFlashloanPremiumToProtocol,\\n      newFlashloanPremiumToProtocol\\n    );\\n  }\\n\\n  function _checkNoSuppliers(address asset) internal view {\\n    (, uint256 accruedToTreasury, uint256 totalATokens, , , , , , , , , ) = IPoolDataProvider(\\n      _addressesProvider.getPoolDataProvider()\\n    ).getReserveData(asset);\\n\\n    require(totalATokens == 0 && accruedToTreasury == 0, Errors.RESERVE_LIQUIDITY_NOT_ZERO);\\n  }\\n\\n  function _checkNoBorrowers(address asset) internal view {\\n    uint256 totalDebt = IPoolDataProvider(_addressesProvider.getPoolDataProvider()).getTotalDebt(\\n      asset\\n    );\\n    require(totalDebt == 0, Errors.RESERVE_DEBT_NOT_ZERO);\\n  }\\n\\n  function _onlyPoolAdmin() internal view {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n  }\\n\\n  function _onlyEmergencyAdmin() internal view {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isEmergencyAdmin(msg.sender), Errors.CALLER_NOT_EMERGENCY_ADMIN);\\n  }\\n\\n  function _onlyPoolOrEmergencyAdmin() internal view {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(\\n      aclManager.isPoolAdmin(msg.sender) || aclManager.isEmergencyAdmin(msg.sender),\\n      Errors.CALLER_NOT_POOL_OR_EMERGENCY_ADMIN\\n    );\\n  }\\n\\n  function _onlyAssetListingOrPoolAdmins() internal view {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(\\n      aclManager.isAssetListingAdmin(msg.sender) || aclManager.isPoolAdmin(msg.sender),\\n      Errors.CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN\\n    );\\n  }\\n\\n  function _onlyRiskOrPoolAdmins() internal view {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(\\n      aclManager.isRiskAdmin(msg.sender) || aclManager.isPoolAdmin(msg.sender),\\n      Errors.CALLER_NOT_RISK_OR_POOL_ADMIN\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x1842366a68e5295a64ff36326bf6055647749bedcd219ca9e385c90c09488edd\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":10499,"contract":"@aave/core-v3/contracts/protocol/pool/PoolConfigurator.sol:PoolConfigurator","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":10502,"contract":"@aave/core-v3/contracts/protocol/pool/PoolConfigurator.sol:PoolConfigurator","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":10572,"contract":"@aave/core-v3/contracts/protocol/pool/PoolConfigurator.sol:PoolConfigurator","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":23677,"contract":"@aave/core-v3/contracts/protocol/pool/PoolConfigurator.sol:PoolConfigurator","label":"_addressesProvider","offset":0,"slot":"52","type":"t_contract(IPoolAddressesProvider)5069"},{"astId":23680,"contract":"@aave/core-v3/contracts/protocol/pool/PoolConfigurator.sol:PoolConfigurator","label":"_pool","offset":0,"slot":"53","type":"t_contract(IPool)4860"}],"types":{"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(IPool)4860":{"encoding":"inplace","label":"contract IPool","numberOfBytes":"20"},"t_contract(IPoolAddressesProvider)5069":{"encoding":"inplace","label":"contract IPoolAddressesProvider","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"configureReserveAsCollateral(address,uint256,uint256,uint256)":{"notice":"Configures the reserve collateralization parameters."},"dropReserve(address)":{"notice":"Drops a reserve entirely."},"initReserves((address,address,address,uint8,address,address,address,address,string,string,string,string,string,string,bytes)[])":{"notice":"Initializes multiple reserves."},"setAssetEModeCategory(address,uint8)":{"notice":"Assign an efficiency mode (eMode) category to asset."},"setBorrowCap(address,uint256)":{"notice":"Updates the borrow cap of a reserve."},"setBorrowableInIsolation(address,bool)":{"notice":"Sets the borrowable in isolation flag for the reserve."},"setDebtCeiling(address,uint256)":{"notice":"Sets the debt ceiling for an asset."},"setEModeCategory(uint8,uint16,uint16,uint16,address,string)":{"notice":"Adds a new efficiency mode (eMode) category."},"setLiquidationProtocolFee(address,uint256)":{"notice":"Updates the liquidation protocol fee of reserve."},"setPoolPause(bool)":{"notice":"Pauses or unpauses all the protocol reserves. In the paused state all the protocol interactions are suspended."},"setReserveActive(address,bool)":{"notice":"Activate or deactivate a reserve"},"setReserveBorrowing(address,bool)":{"notice":"Configures borrowing on a reserve."},"setReserveFactor(address,uint256)":{"notice":"Updates the reserve factor of a reserve."},"setReserveFlashLoaning(address,bool)":{"notice":"Enable or disable flashloans on a reserve"},"setReserveFreeze(address,bool)":{"notice":"Freeze or unfreeze a reserve. A frozen reserve doesn't allow any new supply, borrow or rate swap but allows repayments, liquidations, rate rebalances and withdrawals."},"setReserveInterestRateStrategyAddress(address,address)":{"notice":"Sets the interest rate strategy of a reserve."},"setReservePause(address,bool)":{"notice":"Pauses a reserve. A paused reserve does not allow any interaction (supply, borrow, repay, swap interest rate, liquidate, atoken transfers)."},"setReserveStableRateBorrowing(address,bool)":{"notice":"Enable or disable stable rate borrowing on a reserve."},"setSiloedBorrowing(address,bool)":{"notice":"Sets siloed borrowing for an asset"},"setSupplyCap(address,uint256)":{"notice":"Updates the supply cap of a reserve."},"setUnbackedMintCap(address,uint256)":{"notice":"Updates the unbacked mint cap of reserve."},"updateBridgeProtocolFee(uint256)":{"notice":"Updates the bridge fee collected by the protocol reserves."},"updateFlashloanPremiumToProtocol(uint128)":{"notice":"Updates the flash loan premium collected by protocol reserves"},"updateFlashloanPremiumTotal(uint128)":{"notice":"Updates the total flash loan premium. Total flash loan premium consists of two parts: - A part is sent to aToken holders as extra balance - A part is collected by the protocol reserves"},"updateStableDebtToken((address,address,string,string,address,bytes))":{"notice":"Updates the stable debt token implementation for the reserve."},"updateVariableDebtToken((address,address,string,string,address,bytes))":{"notice":"Updates the variable debt token implementation for the asset."}},"version":1}}},"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol":{"PoolStorage":{"abi":[],"devdoc":{"author":"Aave","details":"It defines the storage layout of the Pool contract.","kind":"dev","methods":{},"title":"PoolStorage","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220bc8ee2b6fcdda0f17922ed8ee4d71cef467621112e06f62d90d57affce05cb0764736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3F DUP1 PUSH1 0x1D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBC DUP15 0xE2 0xB6 0xFC 0xDD LOG0 CALL PUSH26 0x22ED8EE4D71CEF467621112E06F62D90D57AFFCE05CB0764736F PUSH13 0x634300080A0033000000000000 ","sourceMap":"528:1683:96:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600080fdfea2646970667358221220bc8ee2b6fcdda0f17922ed8ee4d71cef467621112e06f62d90d57affce05cb0764736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBC DUP15 0xE2 0xB6 0xFC 0xDD LOG0 CALL PUSH26 0x22ED8EE4D71CEF467621112E06F62D90D57AFFCE05CB0764736F PUSH13 0x634300080A0033000000000000 ","sourceMap":"528:1683:96:-:0;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"12600","executionCost":"66","totalCost":"12666"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Aave\",\"details\":\"It defines the storage layout of the Pool contract.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"PoolStorage\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Contract used as storage of the Pool contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol\":\"PoolStorage\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/logic/ReserveLogic.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IStableDebtToken} from '../../../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../../interfaces/IVariableDebtToken.sol';\\nimport {IReserveInterestRateStrategy} from '../../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol';\\nimport {MathUtils} from '../math/MathUtils.sol';\\nimport {WadRayMath} from '../math/WadRayMath.sol';\\nimport {PercentageMath} from '../math/PercentageMath.sol';\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title ReserveLogic library\\n * @author Aave\\n * @notice Implements the logic to update the reserves state\\n */\\nlibrary ReserveLogic {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  // See `IPool` for descriptions\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @notice Returns the ongoing normalized income for the reserve.\\n   * @dev A value of 1e27 means there is no income. As time passes, the income is accrued\\n   * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued\\n   * @param reserve The reserve object\\n   * @return The normalized income, expressed in ray\\n   */\\n  function getNormalizedIncome(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.liquidityIndex;\\n    } else {\\n      return\\n        MathUtils.calculateLinearInterest(reserve.currentLiquidityRate, timestamp).rayMul(\\n          reserve.liquidityIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the ongoing normalized variable debt for the reserve.\\n   * @dev A value of 1e27 means there is no debt. As time passes, the debt is accrued\\n   * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated\\n   * @param reserve The reserve object\\n   * @return The normalized variable debt, expressed in ray\\n   */\\n  function getNormalizedDebt(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (uint256) {\\n    uint40 timestamp = reserve.lastUpdateTimestamp;\\n\\n    //solium-disable-next-line\\n    if (timestamp == block.timestamp) {\\n      //if the index was updated in the same block, no need to perform any calculation\\n      return reserve.variableBorrowIndex;\\n    } else {\\n      return\\n        MathUtils.calculateCompoundedInterest(reserve.currentVariableBorrowRate, timestamp).rayMul(\\n          reserve.variableBorrowIndex\\n        );\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the liquidity cumulative index and the variable borrow index.\\n   * @param reserve The reserve object\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function updateState(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // If time didn't pass since last stored timestamp, skip state update\\n    //solium-disable-next-line\\n    if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) {\\n      return;\\n    }\\n\\n    _updateIndexes(reserve, reserveCache);\\n    _accrueToTreasury(reserve, reserveCache);\\n\\n    //solium-disable-next-line\\n    reserve.lastUpdateTimestamp = uint40(block.timestamp);\\n  }\\n\\n  /**\\n   * @notice Accumulates a predefined amount of asset to the reserve as a fixed, instantaneous income. Used for example\\n   * to accumulate the flashloan fee to the reserve, and spread it between all the suppliers.\\n   * @param reserve The reserve object\\n   * @param totalLiquidity The total liquidity available in the reserve\\n   * @param amount The amount to accumulate\\n   * @return The next liquidity index of the reserve\\n   */\\n  function cumulateToLiquidityIndex(\\n    DataTypes.ReserveData storage reserve,\\n    uint256 totalLiquidity,\\n    uint256 amount\\n  ) internal returns (uint256) {\\n    //next liquidity index is calculated this way: `((amount / totalLiquidity) + 1) * liquidityIndex`\\n    //division `amount / totalLiquidity` done in ray for precision\\n    uint256 result = (amount.wadToRay().rayDiv(totalLiquidity.wadToRay()) + WadRayMath.RAY).rayMul(\\n      reserve.liquidityIndex\\n    );\\n    reserve.liquidityIndex = result.toUint128();\\n    return result;\\n  }\\n\\n  /**\\n   * @notice Initializes a reserve.\\n   * @param reserve The reserve object\\n   * @param aTokenAddress The address of the overlying atoken contract\\n   * @param stableDebtTokenAddress The address of the overlying stable debt token contract\\n   * @param variableDebtTokenAddress The address of the overlying variable debt token contract\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function init(\\n    DataTypes.ReserveData storage reserve,\\n    address aTokenAddress,\\n    address stableDebtTokenAddress,\\n    address variableDebtTokenAddress,\\n    address interestRateStrategyAddress\\n  ) internal {\\n    require(reserve.aTokenAddress == address(0), Errors.RESERVE_ALREADY_INITIALIZED);\\n\\n    reserve.liquidityIndex = uint128(WadRayMath.RAY);\\n    reserve.variableBorrowIndex = uint128(WadRayMath.RAY);\\n    reserve.aTokenAddress = aTokenAddress;\\n    reserve.stableDebtTokenAddress = stableDebtTokenAddress;\\n    reserve.variableDebtTokenAddress = variableDebtTokenAddress;\\n    reserve.interestRateStrategyAddress = interestRateStrategyAddress;\\n  }\\n\\n  struct UpdateInterestRatesLocalVars {\\n    uint256 nextLiquidityRate;\\n    uint256 nextStableRate;\\n    uint256 nextVariableRate;\\n    uint256 totalVariableDebt;\\n  }\\n\\n  /**\\n   * @notice Updates the reserve current stable borrow rate, the current variable borrow rate and the current liquidity rate.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   * @param reserveAddress The address of the reserve to be updated\\n   * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action\\n   * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow)\\n   */\\n  function updateInterestRates(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache,\\n    address reserveAddress,\\n    uint256 liquidityAdded,\\n    uint256 liquidityTaken\\n  ) internal {\\n    UpdateInterestRatesLocalVars memory vars;\\n\\n    vars.totalVariableDebt = reserveCache.nextScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    (\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate\\n    ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates(\\n      DataTypes.CalculateInterestRatesParams({\\n        unbacked: reserve.unbacked,\\n        liquidityAdded: liquidityAdded,\\n        liquidityTaken: liquidityTaken,\\n        totalStableDebt: reserveCache.nextTotalStableDebt,\\n        totalVariableDebt: vars.totalVariableDebt,\\n        averageStableBorrowRate: reserveCache.nextAvgStableBorrowRate,\\n        reserveFactor: reserveCache.reserveFactor,\\n        reserve: reserveAddress,\\n        aToken: reserveCache.aTokenAddress\\n      })\\n    );\\n\\n    reserve.currentLiquidityRate = vars.nextLiquidityRate.toUint128();\\n    reserve.currentStableBorrowRate = vars.nextStableRate.toUint128();\\n    reserve.currentVariableBorrowRate = vars.nextVariableRate.toUint128();\\n\\n    emit ReserveDataUpdated(\\n      reserveAddress,\\n      vars.nextLiquidityRate,\\n      vars.nextStableRate,\\n      vars.nextVariableRate,\\n      reserveCache.nextLiquidityIndex,\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n  }\\n\\n  struct AccrueToTreasuryLocalVars {\\n    uint256 prevTotalStableDebt;\\n    uint256 prevTotalVariableDebt;\\n    uint256 currTotalVariableDebt;\\n    uint256 cumulatedStableInterest;\\n    uint256 totalDebtAccrued;\\n    uint256 amountToMint;\\n  }\\n\\n  /**\\n   * @notice Mints part of the repaid interest to the reserve treasury as a function of the reserve factor for the\\n   * specific asset.\\n   * @param reserve The reserve to be updated\\n   * @param reserveCache The caching layer for the reserve data\\n   */\\n  function _accrueToTreasury(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    AccrueToTreasuryLocalVars memory vars;\\n\\n    if (reserveCache.reserveFactor == 0) {\\n      return;\\n    }\\n\\n    //calculate the total variable debt at moment of the last interaction\\n    vars.prevTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.currVariableBorrowIndex\\n    );\\n\\n    //calculate the new total variable debt after accumulation of the interest on the index\\n    vars.currTotalVariableDebt = reserveCache.currScaledVariableDebt.rayMul(\\n      reserveCache.nextVariableBorrowIndex\\n    );\\n\\n    //calculate the stable debt until the last timestamp update\\n    vars.cumulatedStableInterest = MathUtils.calculateCompoundedInterest(\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp,\\n      reserveCache.reserveLastUpdateTimestamp\\n    );\\n\\n    vars.prevTotalStableDebt = reserveCache.currPrincipalStableDebt.rayMul(\\n      vars.cumulatedStableInterest\\n    );\\n\\n    //debt accrued is the sum of the current debt minus the sum of the debt at the last update\\n    vars.totalDebtAccrued =\\n      vars.currTotalVariableDebt +\\n      reserveCache.currTotalStableDebt -\\n      vars.prevTotalVariableDebt -\\n      vars.prevTotalStableDebt;\\n\\n    vars.amountToMint = vars.totalDebtAccrued.percentMul(reserveCache.reserveFactor);\\n\\n    if (vars.amountToMint != 0) {\\n      reserve.accruedToTreasury += vars\\n        .amountToMint\\n        .rayDiv(reserveCache.nextLiquidityIndex)\\n        .toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Updates the reserve indexes and the timestamp of the update.\\n   * @param reserve The reserve reserve to be updated\\n   * @param reserveCache The cache layer holding the cached protocol data\\n   */\\n  function _updateIndexes(\\n    DataTypes.ReserveData storage reserve,\\n    DataTypes.ReserveCache memory reserveCache\\n  ) internal {\\n    // Only cumulating on the supply side if there is any income being produced\\n    // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0),\\n    // as liquidity index should not be updated\\n    if (reserveCache.currLiquidityRate != 0) {\\n      uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest(\\n        reserveCache.currLiquidityRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextLiquidityIndex = cumulatedLiquidityInterest.rayMul(\\n        reserveCache.currLiquidityIndex\\n      );\\n      reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128();\\n    }\\n\\n    // Variable borrow index only gets updated if there is any variable debt.\\n    // reserveCache.currVariableBorrowRate != 0 is not a correct validation,\\n    // because a positive base variable rate can be stored on\\n    // reserveCache.currVariableBorrowRate, but the index should not increase\\n    if (reserveCache.currScaledVariableDebt != 0) {\\n      uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest(\\n        reserveCache.currVariableBorrowRate,\\n        reserveCache.reserveLastUpdateTimestamp\\n      );\\n      reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul(\\n        reserveCache.currVariableBorrowIndex\\n      );\\n      reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128();\\n    }\\n  }\\n\\n  /**\\n   * @notice Creates a cache object to avoid repeated storage reads and external contract calls when updating state and\\n   * interest rates.\\n   * @param reserve The reserve object for which the cache will be filled\\n   * @return The cache object\\n   */\\n  function cache(\\n    DataTypes.ReserveData storage reserve\\n  ) internal view returns (DataTypes.ReserveCache memory) {\\n    DataTypes.ReserveCache memory reserveCache;\\n\\n    reserveCache.reserveConfiguration = reserve.configuration;\\n    reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor();\\n    reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex;\\n    reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve\\n      .variableBorrowIndex;\\n    reserveCache.currLiquidityRate = reserve.currentLiquidityRate;\\n    reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate;\\n\\n    reserveCache.aTokenAddress = reserve.aTokenAddress;\\n    reserveCache.stableDebtTokenAddress = reserve.stableDebtTokenAddress;\\n    reserveCache.variableDebtTokenAddress = reserve.variableDebtTokenAddress;\\n\\n    reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp;\\n\\n    reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken(\\n      reserveCache.variableDebtTokenAddress\\n    ).scaledTotalSupply();\\n\\n    (\\n      reserveCache.currPrincipalStableDebt,\\n      reserveCache.currTotalStableDebt,\\n      reserveCache.currAvgStableBorrowRate,\\n      reserveCache.stableDebtLastUpdateTimestamp\\n    ) = IStableDebtToken(reserveCache.stableDebtTokenAddress).getSupplyData();\\n\\n    // by default the actions are considered as not affecting the debt balances.\\n    // if the action involves mint/burn of debt, the cache needs to be updated\\n    reserveCache.nextTotalStableDebt = reserveCache.currTotalStableDebt;\\n    reserveCache.nextAvgStableBorrowRate = reserveCache.currAvgStableBorrowRate;\\n\\n    return reserveCache;\\n  }\\n}\\n\",\"keccak256\":\"0xec6e0fc2cd270f2e1156b3304839fb08b78a4ef66f99acbde3063ce4e22112a9\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {UserConfiguration} from '../libraries/configuration/UserConfiguration.sol';\\nimport {ReserveConfiguration} from '../libraries/configuration/ReserveConfiguration.sol';\\nimport {ReserveLogic} from '../libraries/logic/ReserveLogic.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\n\\n/**\\n * @title PoolStorage\\n * @author Aave\\n * @notice Contract used as storage of the Pool contract.\\n * @dev It defines the storage layout of the Pool contract.\\n */\\ncontract PoolStorage {\\n  using ReserveLogic for DataTypes.ReserveData;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  // Map of reserves and their data (underlyingAssetOfReserve => reserveData)\\n  mapping(address => DataTypes.ReserveData) internal _reserves;\\n\\n  // Map of users address and their configuration data (userAddress => userConfiguration)\\n  mapping(address => DataTypes.UserConfigurationMap) internal _usersConfig;\\n\\n  // List of reserves as a map (reserveId => reserve).\\n  // It is structured as a mapping for gas savings reasons, using the reserve id as index\\n  mapping(uint256 => address) internal _reservesList;\\n\\n  // List of eMode categories as a map (eModeCategoryId => eModeCategory).\\n  // It is structured as a mapping for gas savings reasons, using the eModeCategoryId as index\\n  mapping(uint8 => DataTypes.EModeCategory) internal _eModeCategories;\\n\\n  // Map of users address and their eMode category (userAddress => eModeCategoryId)\\n  mapping(address => uint8) internal _usersEModeCategory;\\n\\n  // Fee of the protocol bridge, expressed in bps\\n  uint256 internal _bridgeProtocolFee;\\n\\n  // Total FlashLoan Premium, expressed in bps\\n  uint128 internal _flashLoanPremiumTotal;\\n\\n  // FlashLoan premium paid to protocol treasury, expressed in bps\\n  uint128 internal _flashLoanPremiumToProtocol;\\n\\n  // Available liquidity that can be borrowed at once at stable rate, expressed in bps\\n  uint64 internal _maxStableRateBorrowSizePercent;\\n\\n  // Maximum number of active reserves there have been in the protocol. It is the upper bound of the reserves list\\n  uint16 internal _reservesCount;\\n}\\n\",\"keccak256\":\"0xb67317c6e6e5a5c776d404b5675555b8e2141187dcacca63d15eb77ba50e8d03\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":25306,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"_reserves","offset":0,"slot":"0","type":"t_mapping(t_address,t_struct(ReserveData)21315_storage)"},{"astId":25311,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"_usersConfig","offset":0,"slot":"1","type":"t_mapping(t_address,t_struct(UserConfigurationMap)21322_storage)"},{"astId":25315,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"_reservesList","offset":0,"slot":"2","type":"t_mapping(t_uint256,t_address)"},{"astId":25320,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"_eModeCategories","offset":0,"slot":"3","type":"t_mapping(t_uint8,t_struct(EModeCategory)21333_storage)"},{"astId":25324,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"_usersEModeCategory","offset":0,"slot":"4","type":"t_mapping(t_address,t_uint8)"},{"astId":25326,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"_bridgeProtocolFee","offset":0,"slot":"5","type":"t_uint256"},{"astId":25328,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"_flashLoanPremiumTotal","offset":0,"slot":"6","type":"t_uint128"},{"astId":25330,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"_flashLoanPremiumToProtocol","offset":16,"slot":"6","type":"t_uint128"},{"astId":25332,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"_maxStableRateBorrowSizePercent","offset":0,"slot":"7","type":"t_uint64"},{"astId":25334,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"_reservesCount","offset":8,"slot":"7","type":"t_uint16"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_mapping(t_address,t_struct(ReserveData)21315_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct DataTypes.ReserveData)","numberOfBytes":"32","value":"t_struct(ReserveData)21315_storage"},"t_mapping(t_address,t_struct(UserConfigurationMap)21322_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct DataTypes.UserConfigurationMap)","numberOfBytes":"32","value":"t_struct(UserConfigurationMap)21322_storage"},"t_mapping(t_address,t_uint8)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint8)","numberOfBytes":"32","value":"t_uint8"},"t_mapping(t_uint256,t_address)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_uint8,t_struct(EModeCategory)21333_storage)":{"encoding":"mapping","key":"t_uint8","label":"mapping(uint8 => struct DataTypes.EModeCategory)","numberOfBytes":"32","value":"t_struct(EModeCategory)21333_storage"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(EModeCategory)21333_storage":{"encoding":"inplace","label":"struct DataTypes.EModeCategory","members":[{"astId":21324,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"ltv","offset":0,"slot":"0","type":"t_uint16"},{"astId":21326,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"liquidationThreshold","offset":2,"slot":"0","type":"t_uint16"},{"astId":21328,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"liquidationBonus","offset":4,"slot":"0","type":"t_uint16"},{"astId":21330,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"priceSource","offset":6,"slot":"0","type":"t_address"},{"astId":21332,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"label","offset":0,"slot":"1","type":"t_string_storage"}],"numberOfBytes":"64"},"t_struct(ReserveConfigurationMap)21318_storage":{"encoding":"inplace","label":"struct DataTypes.ReserveConfigurationMap","members":[{"astId":21317,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"data","offset":0,"slot":"0","type":"t_uint256"}],"numberOfBytes":"32"},"t_struct(ReserveData)21315_storage":{"encoding":"inplace","label":"struct DataTypes.ReserveData","members":[{"astId":21286,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"configuration","offset":0,"slot":"0","type":"t_struct(ReserveConfigurationMap)21318_storage"},{"astId":21288,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"liquidityIndex","offset":0,"slot":"1","type":"t_uint128"},{"astId":21290,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"currentLiquidityRate","offset":16,"slot":"1","type":"t_uint128"},{"astId":21292,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"variableBorrowIndex","offset":0,"slot":"2","type":"t_uint128"},{"astId":21294,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"currentVariableBorrowRate","offset":16,"slot":"2","type":"t_uint128"},{"astId":21296,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"currentStableBorrowRate","offset":0,"slot":"3","type":"t_uint128"},{"astId":21298,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"lastUpdateTimestamp","offset":16,"slot":"3","type":"t_uint40"},{"astId":21300,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"id","offset":21,"slot":"3","type":"t_uint16"},{"astId":21302,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"aTokenAddress","offset":0,"slot":"4","type":"t_address"},{"astId":21304,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"stableDebtTokenAddress","offset":0,"slot":"5","type":"t_address"},{"astId":21306,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"variableDebtTokenAddress","offset":0,"slot":"6","type":"t_address"},{"astId":21308,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"interestRateStrategyAddress","offset":0,"slot":"7","type":"t_address"},{"astId":21310,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"accruedToTreasury","offset":0,"slot":"8","type":"t_uint128"},{"astId":21312,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"unbacked","offset":16,"slot":"8","type":"t_uint128"},{"astId":21314,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"isolationModeTotalDebt","offset":0,"slot":"9","type":"t_uint128"}],"numberOfBytes":"320"},"t_struct(UserConfigurationMap)21322_storage":{"encoding":"inplace","label":"struct DataTypes.UserConfigurationMap","members":[{"astId":21321,"contract":"@aave/core-v3/contracts/protocol/pool/PoolStorage.sol:PoolStorage","label":"data","offset":0,"slot":"0","type":"t_uint256"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint16":{"encoding":"inplace","label":"uint16","numberOfBytes":"2"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint40":{"encoding":"inplace","label":"uint40","numberOfBytes":"5"},"t_uint64":{"encoding":"inplace","label":"uint64","numberOfBytes":"8"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"notice":"Contract used as storage of the Pool contract.","version":1}}},"@aave/core-v3/contracts/protocol/tokenization/AToken.sol":{"AToken":{"abi":[{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"}],"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"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"BalanceTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"treasury","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"aTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"aTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"aTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Mint","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":"ATOKEN_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EIP712_REVISION","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_TREASURY_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNDERLYING_ASSET_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"receiverOfUnderlying","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"contract IAaveIncentivesController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getPreviousIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getScaledUserBalanceAndSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"handleRepayment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"initializingPool","type":"address"},{"internalType":"address","name":"treasury","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"aTokenDecimals","type":"uint8"},{"internalType":"string","name":"aTokenName","type":"string"},{"internalType":"string","name":"aTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"mintToTreasury","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":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"scaledBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scaledTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IAaveIncentivesController","name":"controller","type":"address"}],"name":"setIncentivesController","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"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferOnLiquidation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferUnderlyingTo","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Overrides the base function to fully implement IATokensee `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation"},"RESERVE_TREASURY_ADDRESS()":{"returns":{"_0":"Address of the Aave treasury"}},"UNDERLYING_ASSET_ADDRESS()":{"returns":{"_0":"The address of the underlying asset"}},"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`."},"burn(address,address,uint256,uint256)":{"details":"In some instances, the mint event could be emitted from a burn transaction if the amount to burn is less than the interest that the user accrued","params":{"amount":"The amount being burned","from":"The address from which the aTokens will be burned","index":"The next liquidity index of the reserve","receiverOfUnderlying":"The address that will receive the underlying"}},"constructor":{"details":"Constructor.","params":{"pool":"The address of the Pool contract"}},"decreaseAllowance(address,uint256)":{"params":{"spender":"The user allowed to spend on behalf of _msgSender()","subtractedValue":"The amount being subtracted to the allowance"},"returns":{"_0":"`true`"}},"getIncentivesController()":{"returns":{"_0":"The address of the Incentives Controller"}},"getPreviousIndex(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The last index interest was accrued to the user's balance, expressed in ray"}},"getScaledUserBalanceAndSupply(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The scaled balance of the user","_1":"The scaled total supply"}},"handleRepayment(address,address,uint256)":{"details":"The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.","params":{"amount":"The amount getting repaid","onBehalfOf":"The address of the user who will get his debt reduced/removed","user":"The user executing the repayment"}},"increaseAllowance(address,uint256)":{"params":{"addedValue":"The amount being added to the allowance","spender":"The user allowed to spend on behalf of _msgSender()"},"returns":{"_0":"`true`"}},"initialize(address,address,address,address,uint8,string,string,bytes)":{"params":{"aTokenDecimals":"The decimals of the aToken, same as the underlying asset's","aTokenName":"The name of the aToken","aTokenSymbol":"The symbol of the aToken","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","treasury":"The address of the Aave treasury, receiving the fees on this aToken","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}},"mint(address,address,uint256,uint256)":{"params":{"amount":"The amount of tokens getting minted","caller":"The address performing the mint","index":"The next liquidity index of the reserve","onBehalfOf":"The address of the user that will receive the minted aTokens"},"returns":{"_0":"`true` if the the previous balance of the user was 0"}},"mintToTreasury(uint256,uint256)":{"params":{"amount":"The amount of tokens getting minted","index":"The next liquidity index of the reserve"}},"nonces(address)":{"details":"Overrides the base function to fully implement IATokensee `EIP712Base.nonces()` for more detailed documentation"},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md","params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","owner":"The owner of the funds","r":"Signature param","s":"Signature param","spender":"The spender","v":"Signature param","value":"The amount"}},"rescueTokens(address,address,uint256)":{"params":{"amount":"The amount of token to transfer","to":"The address of the recipient","token":"The address of the token"}},"scaledBalanceOf(address)":{"details":"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update","params":{"user":"The user whose balance is calculated"},"returns":{"_0":"The scaled balance of the user"}},"scaledTotalSupply()":{"returns":{"_0":"The scaled total supply"}},"setIncentivesController(address)":{"params":{"controller":"the new Incentives controller"}},"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."},"transferOnLiquidation(address,address,uint256)":{"params":{"from":"The address getting liquidated, current owner of the aTokens","to":"The recipient","value":"The amount of tokens getting transferred"}},"transferUnderlyingTo(address,uint256)":{"details":"Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()","params":{"amount":"The amount getting transferred","target":"The recipient of the underlying"}}},"title":"Aave ERC20 AToken","version":1},"evm":{"bytecode":{"functionDebugData":{"@_25420":{"entryPoint":null,"id":25420,"parameterSlots":1,"returnSlots":0},"@_27754":{"entryPoint":null,"id":27754,"parameterSlots":0,"returnSlots":0},"@_27965":{"entryPoint":null,"id":27965,"parameterSlots":4,"returnSlots":0},"@_28380":{"entryPoint":null,"id":28380,"parameterSlots":4,"returnSlots":0},"@_28544":{"entryPoint":null,"id":28544,"parameterSlots":4,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$4860_fromMemory":{"entryPoint":541,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":580,"id":null,"parameterSlots":1,"returnSlots":1},"validator_revert_contract_IPool":{"entryPoint":516,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1110:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"66:86:201","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:201"},"nodeType":"YulFunctionCall","src":"132:12:201"},"nodeType":"YulExpressionStatement","src":"132:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"89:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"100:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"115:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"120:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"111:3:201"},"nodeType":"YulFunctionCall","src":"111:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"124:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"107:3:201"},"nodeType":"YulFunctionCall","src":"107:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"96:3:201"},"nodeType":"YulFunctionCall","src":"96:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"86:2:201"},"nodeType":"YulFunctionCall","src":"86:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"79:6:201"},"nodeType":"YulFunctionCall","src":"79:50:201"},"nodeType":"YulIf","src":"76:70:201"}]},"name":"validator_revert_contract_IPool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"55:5:201","type":""}],"src":"14:138:201"},{"body":{"nodeType":"YulBlock","src":"252:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"298:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"307:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"310:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"300:6:201"},"nodeType":"YulFunctionCall","src":"300:12:201"},"nodeType":"YulExpressionStatement","src":"300:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"273:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"282:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"269:3:201"},"nodeType":"YulFunctionCall","src":"269:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"294:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"265:3:201"},"nodeType":"YulFunctionCall","src":"265:32:201"},"nodeType":"YulIf","src":"262:52:201"},{"nodeType":"YulVariableDeclaration","src":"323:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"342:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"336:5:201"},"nodeType":"YulFunctionCall","src":"336:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"327:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"393:5:201"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"361:31:201"},"nodeType":"YulFunctionCall","src":"361:38:201"},"nodeType":"YulExpressionStatement","src":"361:38:201"},{"nodeType":"YulAssignment","src":"408:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"418:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"408:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$4860_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"218:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"229:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"241:6:201","type":""}],"src":"157:272:201"},{"body":{"nodeType":"YulBlock","src":"546:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"592:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"601:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"604:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"594:6:201"},"nodeType":"YulFunctionCall","src":"594:12:201"},"nodeType":"YulExpressionStatement","src":"594:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"567:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"576:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"563:3:201"},"nodeType":"YulFunctionCall","src":"563:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"588:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"559:3:201"},"nodeType":"YulFunctionCall","src":"559:32:201"},"nodeType":"YulIf","src":"556:52:201"},{"nodeType":"YulVariableDeclaration","src":"617:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"636:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"630:5:201"},"nodeType":"YulFunctionCall","src":"630:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"621:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"687:5:201"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"655:31:201"},"nodeType":"YulFunctionCall","src":"655:38:201"},"nodeType":"YulExpressionStatement","src":"655:38:201"},{"nodeType":"YulAssignment","src":"702:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"712:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"702:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"512:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"523:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"535:6:201","type":""}],"src":"434:289:201"},{"body":{"nodeType":"YulBlock","src":"783:325:201","statements":[{"nodeType":"YulAssignment","src":"793:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"807:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"810:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"803:3:201"},"nodeType":"YulFunctionCall","src":"803:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"793:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"824:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"854:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"860:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:201"},"nodeType":"YulFunctionCall","src":"850:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"828:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"901:31:201","statements":[{"nodeType":"YulAssignment","src":"903:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"917:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"925:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"913:3:201"},"nodeType":"YulFunctionCall","src":"913:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"903:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"881:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"874:6:201"},"nodeType":"YulFunctionCall","src":"874:26:201"},"nodeType":"YulIf","src":"871:61:201"},{"body":{"nodeType":"YulBlock","src":"991:111:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1012:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1019:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1024:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1015:3:201"},"nodeType":"YulFunctionCall","src":"1015:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1005:6:201"},"nodeType":"YulFunctionCall","src":"1005:31:201"},"nodeType":"YulExpressionStatement","src":"1005:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1056:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1059:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1049:6:201"},"nodeType":"YulFunctionCall","src":"1049:15:201"},"nodeType":"YulExpressionStatement","src":"1049:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1084:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1087:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1077:6:201"},"nodeType":"YulFunctionCall","src":"1077:15:201"},"nodeType":"YulExpressionStatement","src":"1077:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"947:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"970:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"978:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"967:2:201"},"nodeType":"YulFunctionCall","src":"967:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"944:2:201"},"nodeType":"YulFunctionCall","src":"944:38:201"},"nodeType":"YulIf","src":"941:161:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"763:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"772:6:201","type":""}],"src":"728:380:201"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPool(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$4860_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60e0604052600080553480156200001557600080fd5b50604051620038ea380380620038ea83398101604081905262000038916200021d565b806040518060400160405280600b81526020016a105513d2d15397d253541360aa1b8152506040518060400160405280600b81526020016a105513d2d15397d253541360aa1b81525060008383838383838383836001600160a01b0316630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f091906200021d565b6001600160a01b03166080528251620001119060379060208601906200015e565b508151620001279060389060208501906200015e565b506039805460ff191660ff9290921691909117905550506001600160a01b031660a05250504660c052506200028195505050505050565b8280546200016c9062000244565b90600052602060002090601f016020900481019282620001905760008555620001db565b82601f10620001ab57805160ff1916838001178555620001db565b82800160010185558215620001db579182015b82811115620001db578251825591602001919060010190620001be565b50620001e9929150620001ed565b5090565b5b80821115620001e95760008155600101620001ee565b6001600160a01b03811681146200021a57600080fd5b50565b6000602082840312156200023057600080fd5b81516200023d8162000204565b9392505050565b600181811c908216806200025957607f821691505b602082108114156200027b57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c0516135d7620003136000396000611ccb0152600081816103bc0152818161071d0152818161088201528181610a8101528181610c9b01528181610d6801528181610e2a01528181610f0d01528181610f8d015281816110b501528181611707015281816119d70152818161238001526124f701526000818161113c01526117c601526135d76000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c8063781603761161012a578063b1bf962d116100bd578063d7020d0a1161008c578063e075398611610071578063e07539861461058c578063e655dbd8146105e8578063f866c319146105fb57600080fd5b8063d7020d0a14610533578063dd62ed3e1461054657600080fd5b8063b1bf962d146104f2578063b3f1c93d146104fa578063cea9d26f1461050d578063d505accf1461052057600080fd5b8063a457c2d7116100f9578063a457c2d714610490578063a9059cbb146104a3578063ae167335146104b6578063b16a19de146104d457600080fd5b806378160376146104265780637df5bd3b146104625780637ecebe001461047557806395d89b411461048857600080fd5b806330adf81f116101bd5780634efecaa51161018c57806370a082311161017157806370a08231146103a45780637535d246146103b757806375d264131461040357600080fd5b80634efecaa51461037e5780636fd976761461039157600080fd5b806330adf81f14610327578063313ce5671461034e5780633644e51514610363578063395093511461036b57600080fd5b806318160ddd116101f957806318160ddd146102e4578063183fb413146102ec5780631da24f3e1461030157806323b872dd1461031457600080fd5b806306fdde031461022b578063095ea7b3146102495780630afbcdc91461026c5780630bd7ad3b146102ce575b600080fd5b61023361060e565b604051610240919061303e565b60405180910390f35b61025c61025736600461308d565b6106a0565b6040519015158152602001610240565b6102b961027a3660046130b9565b73ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546036546fffffffffffffffffffffffffffffffff90911691565b60408051928352602083019190915201610240565b6102d6600181565b604051908152602001610240565b6102d66106b6565b6102ff6102fa366004613130565b610795565b005b6102d661030f3660046130b9565b610b52565b61025c610322366004613224565b610b91565b6102d67f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60395460405160ff9091168152602001610240565b6102d6610c11565b61025c61037936600461308d565b610c20565b6102ff61038c36600461308d565b610c64565b6102ff61039f366004613224565b610d31565b6102d66103b23660046130b9565b610ddb565b6103de7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610240565b603954610100900473ffffffffffffffffffffffffffffffffffffffff166103de565b6102336040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6102ff610470366004613265565b610ed6565b6102d66104833660046130b9565b610fcf565b610233610ffa565b61025c61049e36600461308d565b611009565b61025c6104b136600461308d565b61104d565b603c5473ffffffffffffffffffffffffffffffffffffffff166103de565b603d5473ffffffffffffffffffffffffffffffffffffffff166103de565b6102d6611070565b61025c610508366004613287565b61107b565b6102ff61051b366004613224565b611138565b6102ff61052e3660046132cd565b611376565b6102ff610541366004613287565b6116d0565b6102d661055436600461333b565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260356020908152604080832093909416825291909152205490565b6102d661059a3660046130b9565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b6102ff6105f63660046130b9565b6117c2565b6102ff610609366004613224565b6119a0565b60606037805461061d90613374565b80601f016020809104026020016040519081016040528092919081815260200182805461064990613374565b80156106965780601f1061066b57610100808354040283529160200191610696565b820191906000526020600020905b81548152906001019060200180831161067957829003601f168201915b5050505050905090565b60006106ad338484611a52565b50600192915050565b6000806106c260365490565b9050806106d157600091505090565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261078f917f0000000000000000000000000000000000000000000000000000000000000000169063d15e005390602401602060405180830381865afa158015610764573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078891906133c2565b8290611ac0565b91505090565b6001805460ff16806107a65750303b155b806107b2575060005481115b610843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b60015460ff1615801561088057600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f38370000000000000000000000000000000000000000000000000000000000008152509061093d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5061097d88888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b1792505050565b6109bc86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b2a92505050565b603980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8b16179055603c805473ffffffffffffffffffffffffffffffffffffffff808f167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603d80548e8416921691909117905560398054918c16610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055610a79611b3d565b603b819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb19e051f8af41150ccccb3fc2c2d8d15f4a4cf434f32a559ba75fe73d6eea20b8e8d8d8d8d8d8d8d8d604051610b0c99989796959493929190613424565b60405180910390a38015610b4357600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603460205260408120546fffffffffffffffffffffffffffffffff165b92915050565b600080610b9d83611c02565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260356020908152604080832033808552925290912054919250610bfb91879190610bf6906fffffffffffffffffffffffffffffffff8616906134ce565b611a52565b610c06858583611ca8565b506001949350505050565b6000610c1b611cc7565b905090565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106ad918590610bf69086906134e5565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50603d54610d2d9073ffffffffffffffffffffffffffffffffffffffff168383611d00565b5050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091610b8b917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa158015610e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9791906133c2565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260409020546fffffffffffffffffffffffffffffffff165b90611ac0565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610f7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5081610f84575050565b603c54610fca907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff168484611dd3565b505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603a6020526040812054610b8b565b60606038805461061d90613374565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106ad918590610bf69086906134ce565b60008061105983611c02565b9050611066338583611ca8565b5060019392505050565b6000610c1b60365490565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152600090337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5061112f85858585611dd3565b95945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c991906134fd565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015611236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125a919061351a565b6040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250906112c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50603d5460408051808201909152600281527f383500000000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff86811691161415611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50610dd573ffffffffffffffffffffffffffffffffffffffff85168484611d00565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff88166113f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50834211156040518060400160405280600281526020017f37380000000000000000000000000000000000000000000000000000000000008152509061146b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5073ffffffffffffffffffffffffffffffffffffffff87166000908152603a60205260408120549061149b610c11565b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9602082015273ffffffffffffffffffffffffffffffffffffffff808d1692820192909252908a1660608201526080810189905260a0810184905260c0810188905260e0016040516020818303038152906040528051906020012060405160200161155c9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa1580156115e2573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f373900000000000000000000000000000000000000000000000000000000000081525090611688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b506116948260016134e5565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603a60205260409020556116c5898989611a52565b505050505050505050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5061178184848484612014565b73ffffffffffffffffffffffffffffffffffffffff83163014610dd557603d54610dd59073ffffffffffffffffffffffffffffffffffffffff168484611d00565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa15801561182f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185391906134fd565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156118c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e4919061351a565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50506039805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611a44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50610fca8383836000612332565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526035602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517611af557600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b8051610d2d906037906020840190612f43565b8051610d2d906038906020840190612f43565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611b686125ae565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60006fffffffffffffffffffffffffffffffff821115611ca4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f3238206269747300000000000000000000000000000000000000000000000000606482015260840161083a565b5090565b610fca8383836fffffffffffffffffffffffffffffffff166001612332565b60007f0000000000000000000000000000000000000000000000000000000000000000461415611cf85750603b5490565b610c1b611b3d565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1611d63573d6000803e3d6000fd5b50611d6d846125b8565b610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e736665720000000000000000000000604482015260640161083a565b600080611de08484612684565b60408051808201909152600281527f3234000000000000000000000000000000000000000000000000000000000000602082015290915081611e4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291611eac918491700100000000000000000000000000000000900416611ac0565b611eb68387611ac0565b611ec091906134ce565b9050611ecb85611c02565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055611f3387611f2e85611c02565b6126c3565b6000611f3f82886134e5565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611fa191815260200190565b60405180910390a3604080518281526020810184905290810187905273ffffffffffffffffffffffffffffffffffffffff808a1691908b16907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35050159695505050505050565b60006120208383612684565b60408051808201909152600281527f323500000000000000000000000000000000000000000000000000000000000060208201529091508161208f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff80821692916120ec918491700100000000000000000000000000000000900416611ac0565b6120f68386611ac0565b61210091906134ce565b905061210b84611c02565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556121738761216e85611c02565b61283f565b8481111561225257600061218786836134ce565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121e991815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff89169081907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a350612329565b600061225e82876134ce565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122c091815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff80891691908a16907f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f90906060015b60405180910390a3505b50505050505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201819052916000917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa1580156123c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ed91906133c2565b9050600061243382610ed08973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b9050600061247983610ed08973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b9050612487888888866128a3565b8415612554576040517fd5ed393300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015289811660248301528881166044830152606482018890526084820184905260a482018390527f0000000000000000000000000000000000000000000000000000000000000000169063d5ed39339060c401600060405180830381600087803b15801561253b57600080fd5b505af115801561254f573d6000803e3d6000fd5b505050505b73ffffffffffffffffffffffffffffffffffffffff8088169089167f4beccb90f994c31aced7a23b5611020728a23d8ec5cddd1a3e9d97b96fda866661259a8987612684565b60408051918252602082018890520161231f565b6060610c1b61060e565b60006125f8565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156126375760208114612671576126327f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f6125bf565b61267e565b823b612668576126687f475076323a206e6f74206120636f6e747261637400000000000000000000000060146125bf565b6001915061267e565b3d6000803e600051151591505b50919050565b600081156b033b2e3c9fd0803ce8000000600284041904841117156126a857600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b6036546126e26fffffffffffffffffffffffffffffffff8316826134e5565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff16612727838261353c565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff93909316929092179091556039546101009004168015612838576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590526fffffffffffffffffffffffffffffffff841660448301528216906331873e2e90606401600060405180830381600087803b15801561282457600080fd5b505af11580156116c5573d6000803e3d6000fd5b5050505050565b60365461285e6fffffffffffffffffffffffffffffffff8316826134ce565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff166127278382613570565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260408120546fffffffffffffffffffffffffffffffff80821692916128ff918491700100000000000000000000000000000000900416611ac0565b6129098385611ac0565b61291391906134ce565b905060006129558673ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260346020526040812054919250906129b090839070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16611ac0565b6129ba8387611ac0565b6129c491906134ce565b90506129cf85611c02565b73ffffffffffffffffffffffffffffffffffffffff8916600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612a2e85611c02565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612aa08888612a9b612a968a8a612684565b611c02565b612c98565b8215612b4f5760405183815273ffffffffffffffffffffffffffffffffffffffff8916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805184815260208101859052808201879052905173ffffffffffffffffffffffffffffffffffffffff8a169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015612b8b5750600081115b15612c395760405181815273ffffffffffffffffffffffffffffffffffffffff8816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101839052808201879052905173ffffffffffffffffffffffffffffffffffffffff89169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8860405161231f91815260200190565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff16612cda8282613570565b73ffffffffffffffffffffffffffffffffffffffff85811660009081526034602052604080822080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9586161790559186168152205416612d4e838261353c565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff93909316929092179091556039546101009004168015612f3b576036546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018390526fffffffffffffffffffffffffffffffff861660448301528316906331873e2e90606401600060405180830381600087803b158015612e4e57600080fd5b505af1158015612e62573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614612329576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018390526fffffffffffffffffffffffffffffffff851660448301528316906331873e2e90606401600060405180830381600087803b158015612f2157600080fd5b505af1158015612f35573d6000803e3d6000fd5b50505050505b505050505050565b828054612f4f90613374565b90600052602060002090601f016020900481019282612f715760008555612fb7565b82601f10612f8a57805160ff1916838001178555612fb7565b82800160010185558215612fb7579182015b82811115612fb7578251825591602001919060010190612f9c565b50611ca49291505b80821115611ca45760008155600101612fbf565b6000815180845260005b81811015612ff957602081850181015186830182015201612fdd565b8181111561300b576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006130516020830184612fd3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461307a57600080fd5b50565b803561308881613058565b919050565b600080604083850312156130a057600080fd5b82356130ab81613058565b946020939093013593505050565b6000602082840312156130cb57600080fd5b813561305181613058565b803560ff8116811461308857600080fd5b60008083601f8401126130f957600080fd5b50813567ffffffffffffffff81111561311157600080fd5b60208301915083602082850101111561312957600080fd5b9250929050565b60008060008060008060008060008060006101008c8e03121561315257600080fd5b61315b8c61307d565b9a5061316960208d0161307d565b995061317760408d0161307d565b985061318560608d0161307d565b975061319360808d016130d6565b965067ffffffffffffffff8060a08e013511156131af57600080fd5b6131bf8e60a08f01358f016130e7565b909750955060c08d01358110156131d557600080fd5b6131e58e60c08f01358f016130e7565b909550935060e08d01358110156131fb57600080fd5b5061320c8d60e08e01358e016130e7565b81935080925050509295989b509295989b9093969950565b60008060006060848603121561323957600080fd5b833561324481613058565b9250602084013561325481613058565b929592945050506040919091013590565b6000806040838503121561327857600080fd5b50508035926020909101359150565b6000806000806080858703121561329d57600080fd5b84356132a881613058565b935060208501356132b881613058565b93969395505050506040820135916060013590565b600080600080600080600060e0888a0312156132e857600080fd5b87356132f381613058565b9650602088013561330381613058565b9550604088013594506060880135935061331f608089016130d6565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561334e57600080fd5b823561335981613058565b9150602083013561336981613058565b809150509250929050565b600181811c9082168061338857607f821691505b6020821081141561267e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000602082840312156133d457600080fd5b5051919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808c168352808b1660208401525060ff8916604083015260c0606083015261346760c08301888a6133db565b828103608084015261347a8187896133db565b905082810360a084015261348f8185876133db565b9c9b505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156134e0576134e061349f565b500390565b600082198211156134f8576134f861349f565b500190565b60006020828403121561350f57600080fd5b815161305181613058565b60006020828403121561352c57600080fd5b8151801515811461305157600080fd5b60006fffffffffffffffffffffffffffffffff8083168185168083038211156135675761356761349f565b01949350505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156135995761359961349f565b03939250505056fea2646970667358221220947b353f2b79a7b3a16a5b804ba76e14e887d09283449695dce558b4c816ae9f64736f6c634300080a0033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x38EA CODESIZE SUB DUP1 PUSH3 0x38EA DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x38 SWAP2 PUSH3 0x21D JUMP JUMPDEST DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xB DUP2 MSTORE PUSH1 0x20 ADD PUSH11 0x105513D2D15397D2535413 PUSH1 0xAA SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xB DUP2 MSTORE PUSH1 0x20 ADD PUSH11 0x105513D2D15397D2535413 PUSH1 0xAA SHL DUP2 MSTORE POP PUSH1 0x0 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xCA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0xF0 SWAP2 SWAP1 PUSH3 0x21D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE DUP3 MLOAD PUSH3 0x111 SWAP1 PUSH1 0x37 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH3 0x15E JUMP JUMPDEST POP DUP2 MLOAD PUSH3 0x127 SWAP1 PUSH1 0x38 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x15E JUMP JUMPDEST POP PUSH1 0x39 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE POP POP CHAINID PUSH1 0xC0 MSTORE POP PUSH3 0x281 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x16C SWAP1 PUSH3 0x244 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x190 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x1DB JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x1AB JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x1DB JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x1DB JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x1DB JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x1BE JUMP JUMPDEST POP PUSH3 0x1E9 SWAP3 SWAP2 POP PUSH3 0x1ED JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x1E9 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x1EE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x21A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x230 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x23D DUP2 PUSH3 0x204 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x259 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x27B JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x35D7 PUSH3 0x313 PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH2 0x1CCB ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x3BC ADD MSTORE DUP2 DUP2 PUSH2 0x71D ADD MSTORE DUP2 DUP2 PUSH2 0x882 ADD MSTORE DUP2 DUP2 PUSH2 0xA81 ADD MSTORE DUP2 DUP2 PUSH2 0xC9B ADD MSTORE DUP2 DUP2 PUSH2 0xD68 ADD MSTORE DUP2 DUP2 PUSH2 0xE2A ADD MSTORE DUP2 DUP2 PUSH2 0xF0D ADD MSTORE DUP2 DUP2 PUSH2 0xF8D ADD MSTORE DUP2 DUP2 PUSH2 0x10B5 ADD MSTORE DUP2 DUP2 PUSH2 0x1707 ADD MSTORE DUP2 DUP2 PUSH2 0x19D7 ADD MSTORE DUP2 DUP2 PUSH2 0x2380 ADD MSTORE PUSH2 0x24F7 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x113C ADD MSTORE PUSH2 0x17C6 ADD MSTORE PUSH2 0x35D7 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 0x226 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x78160376 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xB1BF962D GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xD7020D0A GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xE0753986 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE0753986 EQ PUSH2 0x58C JUMPI DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x5E8 JUMPI DUP1 PUSH4 0xF866C319 EQ PUSH2 0x5FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD7020D0A EQ PUSH2 0x533 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB1BF962D EQ PUSH2 0x4F2 JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x4FA JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0x50D JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x520 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA457C2D7 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x490 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0xAE167335 EQ PUSH2 0x4B6 JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x4D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x78160376 EQ PUSH2 0x426 JUMPI DUP1 PUSH4 0x7DF5BD3B EQ PUSH2 0x462 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x475 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x1BD JUMPI DUP1 PUSH4 0x4EFECAA5 GT PUSH2 0x18C JUMPI DUP1 PUSH4 0x70A08231 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3A4 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x3B7 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x403 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4EFECAA5 EQ PUSH2 0x37E JUMPI DUP1 PUSH4 0x6FD97676 EQ PUSH2 0x391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x327 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x34E JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x363 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x36B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0x1F9 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2E4 JUMPI DUP1 PUSH4 0x183FB413 EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0x1DA24F3E EQ PUSH2 0x301 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x314 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x249 JUMPI DUP1 PUSH4 0xAFBCDC9 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0xBD7AD3B EQ PUSH2 0x2CE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x233 PUSH2 0x60E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x240 SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x25C PUSH2 0x257 CALLDATASIZE PUSH1 0x4 PUSH2 0x308D JUMP JUMPDEST PUSH2 0x6A0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2B9 PUSH2 0x27A CALLDATASIZE PUSH1 0x4 PUSH2 0x30B9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x36 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x6B6 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x2FA CALLDATASIZE PUSH1 0x4 PUSH2 0x3130 JUMP JUMPDEST PUSH2 0x795 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2D6 PUSH2 0x30F CALLDATASIZE PUSH1 0x4 PUSH2 0x30B9 JUMP JUMPDEST PUSH2 0xB52 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x322 CALLDATASIZE PUSH1 0x4 PUSH2 0x3224 JUMP JUMPDEST PUSH2 0xB91 JUMP JUMPDEST PUSH2 0x2D6 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0xC11 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x379 CALLDATASIZE PUSH1 0x4 PUSH2 0x308D JUMP JUMPDEST PUSH2 0xC20 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x38C CALLDATASIZE PUSH1 0x4 PUSH2 0x308D JUMP JUMPDEST PUSH2 0xC64 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x39F CALLDATASIZE PUSH1 0x4 PUSH2 0x3224 JUMP JUMPDEST PUSH2 0xD31 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x3B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x30B9 JUMP JUMPDEST PUSH2 0xDDB JUMP JUMPDEST PUSH2 0x3DE PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x233 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x470 CALLDATASIZE PUSH1 0x4 PUSH2 0x3265 JUMP JUMPDEST PUSH2 0xED6 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x483 CALLDATASIZE PUSH1 0x4 PUSH2 0x30B9 JUMP JUMPDEST PUSH2 0xFCF JUMP JUMPDEST PUSH2 0x233 PUSH2 0xFFA JUMP JUMPDEST PUSH2 0x25C PUSH2 0x49E CALLDATASIZE PUSH1 0x4 PUSH2 0x308D JUMP JUMPDEST PUSH2 0x1009 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x4B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x308D JUMP JUMPDEST PUSH2 0x104D JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x1070 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x508 CALLDATASIZE PUSH1 0x4 PUSH2 0x3287 JUMP JUMPDEST PUSH2 0x107B JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x51B CALLDATASIZE PUSH1 0x4 PUSH2 0x3224 JUMP JUMPDEST PUSH2 0x1138 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x52E CALLDATASIZE PUSH1 0x4 PUSH2 0x32CD JUMP JUMPDEST PUSH2 0x1376 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x541 CALLDATASIZE PUSH1 0x4 PUSH2 0x3287 JUMP JUMPDEST PUSH2 0x16D0 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x554 CALLDATASIZE PUSH1 0x4 PUSH2 0x333B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x59A CALLDATASIZE PUSH1 0x4 PUSH2 0x30B9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x5F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x30B9 JUMP JUMPDEST PUSH2 0x17C2 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x609 CALLDATASIZE PUSH1 0x4 PUSH2 0x3224 JUMP JUMPDEST PUSH2 0x19A0 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0x61D SWAP1 PUSH2 0x3374 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x649 SWAP1 PUSH2 0x3374 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x696 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x66B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x696 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 0x679 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6AD CALLER DUP5 DUP5 PUSH2 0x1A52 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6C2 PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x6D1 JUMPI PUSH1 0x0 SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x78F SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x764 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x788 SWAP2 SWAP1 PUSH2 0x33C2 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1AC0 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x7A6 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x7B2 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x843 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x880 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x93D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH2 0x97D DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1B17 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x9BC DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1B2A SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x39 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0xFF DUP12 AND OR SWAP1 SSTORE PUSH1 0x3C DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP16 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x3D DUP1 SLOAD DUP15 DUP5 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x39 DUP1 SLOAD SWAP2 DUP13 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0xA79 PUSH2 0x1B3D JUMP JUMPDEST PUSH1 0x3B DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xB19E051F8AF41150CCCCB3FC2C2D8D15F4A4CF434F32A559BA75FE73D6EEA20B DUP15 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 PUSH1 0x40 MLOAD PUSH2 0xB0C SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3424 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0xB43 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB9D DUP4 PUSH2 0x1C02 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0xBFB SWAP2 DUP8 SWAP2 SWAP1 PUSH2 0xBF6 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 PUSH2 0x34CE JUMP JUMPDEST PUSH2 0x1A52 JUMP JUMPDEST PUSH2 0xC06 DUP6 DUP6 DUP4 PUSH2 0x1CA8 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1B PUSH2 0x1CC7 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 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 0x6AD SWAP2 DUP6 SWAP1 PUSH2 0xBF6 SWAP1 DUP7 SWAP1 PUSH2 0x34E5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xD08 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH2 0xD2D SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH2 0x1D00 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xDD5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH2 0xB8B SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE73 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE97 SWAP2 SWAP1 PUSH2 0x33C2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 PUSH2 0x1AC0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xF7A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP DUP2 PUSH2 0xF84 JUMPI POP POP JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH2 0xFCA SWAP1 PUSH32 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1DD3 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xB8B JUMP JUMPDEST PUSH1 0x60 PUSH1 0x38 DUP1 SLOAD PUSH2 0x61D SWAP1 PUSH2 0x3374 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 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 0x6AD SWAP2 DUP6 SWAP1 PUSH2 0xBF6 SWAP1 DUP7 SWAP1 PUSH2 0x34CE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1059 DUP4 PUSH2 0x1C02 JUMP JUMPDEST SWAP1 POP PUSH2 0x1066 CALLER DUP6 DUP4 PUSH2 0x1CA8 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1B PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1122 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH2 0x112F DUP6 DUP6 DUP6 DUP6 PUSH2 0x1DD3 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11C9 SWAP2 SWAP1 PUSH2 0x34FD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1236 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x125A SWAP2 SWAP1 PUSH2 0x351A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x12C8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3835000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1354 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH2 0xDD5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 DUP5 PUSH2 0x1D00 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x13F8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x146B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x149B PUSH2 0xC11 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP11 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x155C SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15E2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1688 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH2 0x1694 DUP3 PUSH1 0x1 PUSH2 0x34E5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x16C5 DUP10 DUP10 DUP10 PUSH2 0x1A52 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1774 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH2 0x1781 DUP5 DUP5 DUP5 DUP5 PUSH2 0x2014 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ADDRESS EQ PUSH2 0xDD5 JUMPI PUSH1 0x3D SLOAD PUSH2 0xDD5 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1D00 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x182F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1853 SWAP2 SWAP1 PUSH2 0x34FD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18C0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18E4 SWAP2 SWAP1 PUSH2 0x351A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1952 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP POP PUSH1 0x39 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1A44 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH2 0xFCA DUP4 DUP4 DUP4 PUSH1 0x0 PUSH2 0x2332 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1AF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD2D SWAP1 PUSH1 0x37 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2F43 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD2D SWAP1 PUSH1 0x38 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2F43 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x1B68 PUSH2 0x25AE JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1CA4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x83A JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0xFCA DUP4 DUP4 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH2 0x2332 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0x1CF8 JUMPI POP PUSH1 0x3B SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xC1B PUSH2 0x1B3D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x1D63 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1D6D DUP5 PUSH2 0x25B8 JUMP JUMPDEST PUSH2 0xDD5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x83A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1DE0 DUP5 DUP5 PUSH2 0x2684 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x1E4F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x1EAC SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x1EB6 DUP4 DUP8 PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x1EC0 SWAP2 SWAP1 PUSH2 0x34CE JUMP JUMPDEST SWAP1 POP PUSH2 0x1ECB DUP6 PUSH2 0x1C02 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1F33 DUP8 PUSH2 0x1F2E DUP6 PUSH2 0x1C02 JUMP JUMPDEST PUSH2 0x26C3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F3F DUP3 DUP9 PUSH2 0x34E5 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1FA1 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 AND SWAP2 SWAP1 DUP12 AND SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP ISZERO SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2020 DUP4 DUP4 PUSH2 0x2684 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x208F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x20EC SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x20F6 DUP4 DUP7 PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x2100 SWAP2 SWAP1 PUSH2 0x34CE JUMP JUMPDEST SWAP1 POP PUSH2 0x210B DUP5 PUSH2 0x1C02 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2173 DUP8 PUSH2 0x216E DUP6 PUSH2 0x1C02 JUMP JUMPDEST PUSH2 0x283F JUMP JUMPDEST DUP5 DUP2 GT ISZERO PUSH2 0x2252 JUMPI PUSH1 0x0 PUSH2 0x2187 DUP7 DUP4 PUSH2 0x34CE JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x21E9 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 DUP2 SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x2329 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x225E DUP3 DUP8 PUSH2 0x34CE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x22C0 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP2 SWAP1 DUP11 AND SWAP1 PUSH32 0x4CF25BC1D991C17529C25213D3CC0CDA295EEAAD5F13F361969B12EA48015F90 SWAP1 PUSH1 0x60 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23C9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x23ED SWAP2 SWAP1 PUSH2 0x33C2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2433 DUP3 PUSH2 0xED0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2479 DUP4 PUSH2 0xED0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x2487 DUP9 DUP9 DUP9 DUP7 PUSH2 0x28A3 JUMP JUMPDEST DUP5 ISZERO PUSH2 0x2554 JUMPI PUSH1 0x40 MLOAD PUSH32 0xD5ED393300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP10 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP9 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xD5ED3933 SWAP1 PUSH1 0xC4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x253B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x254F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND SWAP1 DUP10 AND PUSH32 0x4BECCB90F994C31ACED7A23B5611020728A23D8EC5CDDD1A3E9D97B96FDA8666 PUSH2 0x259A DUP10 DUP8 PUSH2 0x2684 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP9 SWAP1 MSTORE ADD PUSH2 0x231F JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC1B PUSH2 0x60E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25F8 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x2637 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x2671 JUMPI PUSH2 0x2632 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x25BF JUMP JUMPDEST PUSH2 0x267E JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x2668 JUMPI PUSH2 0x2668 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x25BF JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x267E JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x26A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x26E2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x34E5 JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2727 DUP4 DUP3 PUSH2 0x353C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x2838 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2824 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16C5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x285E PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x34CE JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2727 DUP4 DUP3 PUSH2 0x3570 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x28FF SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x2909 DUP4 DUP6 PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x2913 SWAP2 SWAP1 PUSH2 0x34CE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2955 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x29B0 SWAP1 DUP4 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x29BA DUP4 DUP8 PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x29C4 SWAP2 SWAP1 PUSH2 0x34CE JUMP JUMPDEST SWAP1 POP PUSH2 0x29CF DUP6 PUSH2 0x1C02 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2A2E DUP6 PUSH2 0x1C02 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2AA0 DUP9 DUP9 PUSH2 0x2A9B PUSH2 0x2A96 DUP11 DUP11 PUSH2 0x2684 JUMP JUMPDEST PUSH2 0x1C02 JUMP JUMPDEST PUSH2 0x2C98 JUMP JUMPDEST DUP3 ISZERO PUSH2 0x2B4F JUMPI PUSH1 0x40 MLOAD DUP4 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x2B8B JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST ISZERO PUSH2 0x2C39 JUMPI PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP9 PUSH1 0x40 MLOAD PUSH2 0x231F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2CDA DUP3 DUP3 PUSH2 0x3570 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 AND OR SWAP1 SSTORE SWAP2 DUP7 AND DUP2 MSTORE KECCAK256 SLOAD AND PUSH2 0x2D4E DUP4 DUP3 PUSH2 0x353C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x2F3B JUMPI PUSH1 0x36 SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2E62 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x2329 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2F35 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x2F4F SWAP1 PUSH2 0x3374 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x2F71 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x2FB7 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x2F8A JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x2FB7 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x2FB7 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x2FB7 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2F9C JUMP JUMPDEST POP PUSH2 0x1CA4 SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1CA4 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2FBF JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2FF9 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x2FDD JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x300B JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3051 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2FD3 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x307A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3088 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x30A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x30AB DUP2 PUSH2 0x3058 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 0x30CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3051 DUP2 PUSH2 0x3058 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3088 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x30F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3111 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x3129 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x100 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x3152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x315B DUP13 PUSH2 0x307D JUMP JUMPDEST SWAP11 POP PUSH2 0x3169 PUSH1 0x20 DUP14 ADD PUSH2 0x307D JUMP JUMPDEST SWAP10 POP PUSH2 0x3177 PUSH1 0x40 DUP14 ADD PUSH2 0x307D JUMP JUMPDEST SWAP9 POP PUSH2 0x3185 PUSH1 0x60 DUP14 ADD PUSH2 0x307D JUMP JUMPDEST SWAP8 POP PUSH2 0x3193 PUSH1 0x80 DUP14 ADD PUSH2 0x30D6 JUMP JUMPDEST SWAP7 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x31AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31BF DUP15 PUSH1 0xA0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x30E7 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0xC0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x31D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31E5 DUP15 PUSH1 0xC0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x30E7 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP PUSH1 0xE0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x31FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x320C DUP14 PUSH1 0xE0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x30E7 JUMP JUMPDEST DUP2 SWAP4 POP DUP1 SWAP3 POP POP POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3239 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3244 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x3254 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x329D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x32A8 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x32B8 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x32E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x32F3 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x3303 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x331F PUSH1 0x80 DUP10 ADD PUSH2 0x30D6 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x334E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3359 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3369 DUP2 PUSH2 0x3058 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x3388 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x267E JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x33D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 ADD ADD MSTORE PUSH1 0x0 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP5 ADD ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND DUP4 MSTORE DUP1 DUP12 AND PUSH1 0x20 DUP5 ADD MSTORE POP PUSH1 0xFF DUP10 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xC0 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x3467 PUSH1 0xC0 DUP4 ADD DUP9 DUP11 PUSH2 0x33DB JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x347A DUP2 DUP8 DUP10 PUSH2 0x33DB JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x348F DUP2 DUP6 DUP8 PUSH2 0x33DB JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x34E0 JUMPI PUSH2 0x34E0 PUSH2 0x349F JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x34F8 JUMPI PUSH2 0x34F8 PUSH2 0x349F JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x350F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x3051 DUP2 PUSH2 0x3058 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x352C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3051 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x3567 JUMPI PUSH2 0x3567 PUSH2 0x349F JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x3599 JUMPI PUSH2 0x3599 PUSH2 0x349F JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP5 PUSH28 0x353F2B79A7B3A16A5B804BA76E14E887D09283449695DCE558B4C816 0xAE SWAP16 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"1116:7178:97:-:0;;;928:1:71;886:43;;1803:144:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1858:4;988:195:105;;;;;;;;;;;;;-1:-1:-1;;;988:195:105;;;;;;;;;;;;;;;;-1:-1:-1;;;988:195:105;;;1894:1:97;1116:4:105;1122;1128:6;1136:8;817:4:104;823;829:6;837:8;2780:4:103;-1:-1:-1;;;;;2780:23:103;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2759:46:103;;;2811:12;;;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;2829:16:103;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;2851:9:103;:20;;-1:-1:-1;;2851:20:103;;;;;;;;;;;;-1:-1:-1;;;;;;;2877:11:103;;;-1:-1:-1;;630:13:102;619:24;;-1:-1:-1;1116:7178:97;;-1:-1:-1;;;;;;1116:7178:97;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1116:7178:97;;;-1:-1:-1;1116:7178:97;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:138:201;-1:-1:-1;;;;;96:31:201;;86:42;;76:70;;142:1;139;132:12;76:70;14:138;:::o;157:272::-;241:6;294:2;282:9;273:7;269:23;265:32;262:52;;;310:1;307;300:12;262:52;342:9;336:16;361:38;393:5;361:38;:::i;:::-;418:5;157:272;-1:-1:-1;;;157:272:201:o;728:380::-;807:1;803:12;;;;850;;;871:61;;925:4;917:6;913:17;903:27;;871:61;978:2;970:6;967:14;947:18;944:38;941:161;;;1024:10;1019:3;1015:20;1012:1;1005:31;1059:4;1056:1;1049:15;1087:4;1084:1;1077:15;941:161;;728:380;;;:::o;:::-;1116:7178:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ATOKEN_REVISION_25390":{"entryPoint":null,"id":25390,"parameterSlots":0,"returnSlots":0},"@DOMAIN_SEPARATOR_25926":{"entryPoint":3089,"id":25926,"parameterSlots":0,"returnSlots":1},"@DOMAIN_SEPARATOR_27772":{"entryPoint":7367,"id":27772,"parameterSlots":0,"returnSlots":1},"@EIP712_REVISION_27731":{"entryPoint":null,"id":27731,"parameterSlots":0,"returnSlots":0},"@PERMIT_TYPEHASH_25387":{"entryPoint":null,"id":25387,"parameterSlots":0,"returnSlots":0},"@POOL_27929":{"entryPoint":null,"id":27929,"parameterSlots":0,"returnSlots":0},"@RESERVE_TREASURY_ADDRESS_25677":{"entryPoint":null,"id":25677,"parameterSlots":0,"returnSlots":1},"@UNDERLYING_ASSET_ADDRESS_25687":{"entryPoint":null,"id":25687,"parameterSlots":0,"returnSlots":1},"@_EIP712BaseId_25954":{"entryPoint":9646,"id":25954,"parameterSlots":0,"returnSlots":1},"@_approve_28315":{"entryPoint":6738,"id":28315,"parameterSlots":3,"returnSlots":0},"@_burnScaled_28821":{"entryPoint":8212,"id":28821,"parameterSlots":4,"returnSlots":0},"@_burn_28498":{"entryPoint":10303,"id":28498,"parameterSlots":2,"returnSlots":0},"@_calculateDomainSeparator_27815":{"entryPoint":6973,"id":27815,"parameterSlots":0,"returnSlots":1},"@_mintScaled_28703":{"entryPoint":7635,"id":28703,"parameterSlots":4,"returnSlots":1},"@_mint_28439":{"entryPoint":9923,"id":28439,"parameterSlots":2,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_setDecimals_28348":{"entryPoint":null,"id":28348,"parameterSlots":1,"returnSlots":0},"@_setName_28326":{"entryPoint":6935,"id":28326,"parameterSlots":1,"returnSlots":0},"@_setSymbol_28337":{"entryPoint":6954,"id":28337,"parameterSlots":1,"returnSlots":0},"@_transfer_25893":{"entryPoint":9010,"id":25893,"parameterSlots":4,"returnSlots":0},"@_transfer_25912":{"entryPoint":7336,"id":25912,"parameterSlots":3,"returnSlots":0},"@_transfer_28290":{"entryPoint":11416,"id":28290,"parameterSlots":3,"returnSlots":0},"@_transfer_28965":{"entryPoint":10403,"id":28965,"parameterSlots":4,"returnSlots":0},"@allowance_28089":{"entryPoint":null,"id":28089,"parameterSlots":2,"returnSlots":1},"@approve_28110":{"entryPoint":1696,"id":28110,"parameterSlots":2,"returnSlots":1},"@balanceOf_25636":{"entryPoint":3547,"id":25636,"parameterSlots":1,"returnSlots":1},"@balanceOf_28020":{"entryPoint":null,"id":28020,"parameterSlots":1,"returnSlots":1},"@burn_25564":{"entryPoint":5840,"id":25564,"parameterSlots":4,"returnSlots":0},"@decimals_27995":{"entryPoint":null,"id":27995,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_28206":{"entryPoint":4105,"id":28206,"parameterSlots":2,"returnSlots":1},"@getIncentivesController_28030":{"entryPoint":null,"id":28030,"parameterSlots":0,"returnSlots":1},"@getLastTransferResult_117":{"entryPoint":9656,"id":117,"parameterSlots":1,"returnSlots":1},"@getPreviousIndex_28607":{"entryPoint":null,"id":28607,"parameterSlots":1,"returnSlots":1},"@getRevision_25404":{"entryPoint":null,"id":25404,"parameterSlots":0,"returnSlots":1},"@getScaledUserBalanceAndSupply_28580":{"entryPoint":null,"id":28580,"parameterSlots":1,"returnSlots":2},"@handleRepayment_25721":{"entryPoint":3377,"id":25721,"parameterSlots":3,"returnSlots":0},"@increaseAllowance_28179":{"entryPoint":3104,"id":28179,"parameterSlots":2,"returnSlots":1},"@initialize_25500":{"entryPoint":1941,"id":25500,"parameterSlots":11,"returnSlots":0},"@isConstructor_10568":{"entryPoint":null,"id":10568,"parameterSlots":0,"returnSlots":1},"@mintToTreasury_25592":{"entryPoint":3798,"id":25592,"parameterSlots":2,"returnSlots":0},"@mint_25525":{"entryPoint":4219,"id":25525,"parameterSlots":4,"returnSlots":1},"@name_27975":{"entryPoint":1550,"id":27975,"parameterSlots":0,"returnSlots":1},"@nonces_25943":{"entryPoint":4047,"id":25943,"parameterSlots":1,"returnSlots":1},"@nonces_27785":{"entryPoint":null,"id":27785,"parameterSlots":1,"returnSlots":1},"@permit_25816":{"entryPoint":4982,"id":25816,"parameterSlots":7,"returnSlots":0},"@rayDiv_21198":{"entryPoint":9860,"id":21198,"parameterSlots":2,"returnSlots":1},"@rayMul_21186":{"entryPoint":6848,"id":21186,"parameterSlots":2,"returnSlots":1},"@rescueTokens_25984":{"entryPoint":4408,"id":25984,"parameterSlots":3,"returnSlots":0},"@safeTransfer_78":{"entryPoint":7424,"id":78,"parameterSlots":3,"returnSlots":0},"@scaledBalanceOf_28559":{"entryPoint":2898,"id":28559,"parameterSlots":1,"returnSlots":1},"@scaledTotalSupply_28592":{"entryPoint":4208,"id":28592,"parameterSlots":0,"returnSlots":1},"@setIncentivesController_28044":{"entryPoint":6082,"id":28044,"parameterSlots":1,"returnSlots":0},"@symbol_27985":{"entryPoint":4090,"id":27985,"parameterSlots":0,"returnSlots":1},"@toUint128_1626":{"entryPoint":7170,"id":1626,"parameterSlots":1,"returnSlots":1},"@totalSupply_25667":{"entryPoint":1718,"id":25667,"parameterSlots":0,"returnSlots":1},"@totalSupply_28005":{"entryPoint":null,"id":28005,"parameterSlots":0,"returnSlots":1},"@transferFrom_28152":{"entryPoint":2961,"id":28152,"parameterSlots":3,"returnSlots":1},"@transferOnLiquidation_25613":{"entryPoint":6560,"id":25613,"parameterSlots":3,"returnSlots":0},"@transferUnderlyingTo_25707":{"entryPoint":3172,"id":25707,"parameterSlots":2,"returnSlots":0},"@transfer_28071":{"entryPoint":4173,"id":28071,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":12413,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_string_calldata":{"entryPoint":12519,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":12473,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":13565,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":13115,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":12836,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256":{"entryPoint":12935,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":13005,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":12429,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":13594,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IAaveIncentivesController_$3875":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$4860t_addresst_addresst_contract$_IAaveIncentivesController_$3875t_uint8t_string_calldata_ptrt_string_calldata_ptrt_bytes_calldata_ptr":{"entryPoint":12592,"id":null,"parameterSlots":2,"returnSlots":11},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":13250,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256":{"entryPoint":12901,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_uint8":{"entryPoint":12502,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_string":{"entryPoint":12243,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string_calldata":{"entryPoint":13275,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13348,"id":null,"parameterSlots":10,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IAaveIncentivesController_$3875__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":12350,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":13628,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":13541,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint128":{"entryPoint":13680,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":13518,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":13172,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":13471,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":12376,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:16120:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"64:481:201","statements":[{"nodeType":"YulVariableDeclaration","src":"74:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"94:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"88:5:201"},"nodeType":"YulFunctionCall","src":"88:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"78:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"116:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"121:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"109:6:201"},"nodeType":"YulFunctionCall","src":"109:19:201"},"nodeType":"YulExpressionStatement","src":"109:19:201"},{"nodeType":"YulVariableDeclaration","src":"137:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"146:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"141:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"208:110:201","statements":[{"nodeType":"YulVariableDeclaration","src":"222:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"232:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"226:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"264:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"269:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"260:3:201"},"nodeType":"YulFunctionCall","src":"260:11:201"},{"name":"_1","nodeType":"YulIdentifier","src":"273:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"256:3:201"},"nodeType":"YulFunctionCall","src":"256:20:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"292:5:201"},{"name":"i","nodeType":"YulIdentifier","src":"299:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"288:3:201"},"nodeType":"YulFunctionCall","src":"288:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"303:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"284:3:201"},"nodeType":"YulFunctionCall","src":"284:22:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"278:5:201"},"nodeType":"YulFunctionCall","src":"278:29:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"249:6:201"},"nodeType":"YulFunctionCall","src":"249:59:201"},"nodeType":"YulExpressionStatement","src":"249:59:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"167:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"170:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"164:2:201"},"nodeType":"YulFunctionCall","src":"164:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"178:21:201","statements":[{"nodeType":"YulAssignment","src":"180:17:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"189:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"192:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"185:3:201"},"nodeType":"YulFunctionCall","src":"185:12:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"180:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"160:3:201","statements":[]},"src":"156:162:201"},{"body":{"nodeType":"YulBlock","src":"352:62:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"381:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"386:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"377:3:201"},"nodeType":"YulFunctionCall","src":"377:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"395:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"373:3:201"},"nodeType":"YulFunctionCall","src":"373:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"402:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"366:6:201"},"nodeType":"YulFunctionCall","src":"366:38:201"},"nodeType":"YulExpressionStatement","src":"366:38:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"333:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"336:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"330:2:201"},"nodeType":"YulFunctionCall","src":"330:13:201"},"nodeType":"YulIf","src":"327:87:201"},{"nodeType":"YulAssignment","src":"423:116:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"438:3:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"451:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"459:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"447:3:201"},"nodeType":"YulFunctionCall","src":"447:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"464:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"443:3:201"},"nodeType":"YulFunctionCall","src":"443:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"434:3:201"},"nodeType":"YulFunctionCall","src":"434:98:201"},{"kind":"number","nodeType":"YulLiteral","src":"534:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"430:3:201"},"nodeType":"YulFunctionCall","src":"430:109:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"423:3:201"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"41:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"48:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"56:3:201","type":""}],"src":"14:531:201"},{"body":{"nodeType":"YulBlock","src":"671:99:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"688:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"699:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"681:6:201"},"nodeType":"YulFunctionCall","src":"681:21:201"},"nodeType":"YulExpressionStatement","src":"681:21:201"},{"nodeType":"YulAssignment","src":"711:53:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"737:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"749:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"760:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"745:3:201"},"nodeType":"YulFunctionCall","src":"745:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"719:17:201"},"nodeType":"YulFunctionCall","src":"719:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"711:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"640:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"651:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"662:4:201","type":""}],"src":"550:220:201"},{"body":{"nodeType":"YulBlock","src":"820:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"907:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"916:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"919:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"909:6:201"},"nodeType":"YulFunctionCall","src":"909:12:201"},"nodeType":"YulExpressionStatement","src":"909:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"843:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"854:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"861:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:201"},"nodeType":"YulFunctionCall","src":"850:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"840:2:201"},"nodeType":"YulFunctionCall","src":"840:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"833:6:201"},"nodeType":"YulFunctionCall","src":"833:73:201"},"nodeType":"YulIf","src":"830:93:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"809:5:201","type":""}],"src":"775:154:201"},{"body":{"nodeType":"YulBlock","src":"983:85:201","statements":[{"nodeType":"YulAssignment","src":"993:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1015:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1002:12:201"},"nodeType":"YulFunctionCall","src":"1002:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"993:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1056:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1031:24:201"},"nodeType":"YulFunctionCall","src":"1031:31:201"},"nodeType":"YulExpressionStatement","src":"1031:31:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"962:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"973:5:201","type":""}],"src":"934:134:201"},{"body":{"nodeType":"YulBlock","src":"1160:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"1206:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1215:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1218:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1208:6:201"},"nodeType":"YulFunctionCall","src":"1208:12:201"},"nodeType":"YulExpressionStatement","src":"1208:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1181:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1190:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1177:3:201"},"nodeType":"YulFunctionCall","src":"1177:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1202:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1173:3:201"},"nodeType":"YulFunctionCall","src":"1173:32:201"},"nodeType":"YulIf","src":"1170:52:201"},{"nodeType":"YulVariableDeclaration","src":"1231:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1257:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1244:12:201"},"nodeType":"YulFunctionCall","src":"1244:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1235:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1301:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1276:24:201"},"nodeType":"YulFunctionCall","src":"1276:31:201"},"nodeType":"YulExpressionStatement","src":"1276:31:201"},{"nodeType":"YulAssignment","src":"1316:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1326:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1316:6:201"}]},{"nodeType":"YulAssignment","src":"1340:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1367:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1378:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1363:3:201"},"nodeType":"YulFunctionCall","src":"1363:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1350:12:201"},"nodeType":"YulFunctionCall","src":"1350:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1340:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1118:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1129:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1141:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1149:6:201","type":""}],"src":"1073:315:201"},{"body":{"nodeType":"YulBlock","src":"1488:92:201","statements":[{"nodeType":"YulAssignment","src":"1498:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1510:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1521:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1506:3:201"},"nodeType":"YulFunctionCall","src":"1506:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1498:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1540:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1565:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1558:6:201"},"nodeType":"YulFunctionCall","src":"1558:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1551:6:201"},"nodeType":"YulFunctionCall","src":"1551:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1533:6:201"},"nodeType":"YulFunctionCall","src":"1533:41:201"},"nodeType":"YulExpressionStatement","src":"1533:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1457:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1468:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1479:4:201","type":""}],"src":"1393:187:201"},{"body":{"nodeType":"YulBlock","src":"1655:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"1701:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1710:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1713:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1703:6:201"},"nodeType":"YulFunctionCall","src":"1703:12:201"},"nodeType":"YulExpressionStatement","src":"1703:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1676:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1685:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1672:3:201"},"nodeType":"YulFunctionCall","src":"1672:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1697:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1668:3:201"},"nodeType":"YulFunctionCall","src":"1668:32:201"},"nodeType":"YulIf","src":"1665:52:201"},{"nodeType":"YulVariableDeclaration","src":"1726:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1752:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1739:12:201"},"nodeType":"YulFunctionCall","src":"1739:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1730:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1796:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1771:24:201"},"nodeType":"YulFunctionCall","src":"1771:31:201"},"nodeType":"YulExpressionStatement","src":"1771:31:201"},{"nodeType":"YulAssignment","src":"1811:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1821:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1811:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1621:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1632:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1644:6:201","type":""}],"src":"1585:247:201"},{"body":{"nodeType":"YulBlock","src":"1966:119:201","statements":[{"nodeType":"YulAssignment","src":"1976:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1988:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1999:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1984:3:201"},"nodeType":"YulFunctionCall","src":"1984:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1976:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2018:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"2029:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2011:6:201"},"nodeType":"YulFunctionCall","src":"2011:25:201"},"nodeType":"YulExpressionStatement","src":"2011:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2056:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2067:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2052:3:201"},"nodeType":"YulFunctionCall","src":"2052:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"2072:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2045:6:201"},"nodeType":"YulFunctionCall","src":"2045:34:201"},"nodeType":"YulExpressionStatement","src":"2045:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1927:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1938:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1946:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1957:4:201","type":""}],"src":"1837:248:201"},{"body":{"nodeType":"YulBlock","src":"2191:76:201","statements":[{"nodeType":"YulAssignment","src":"2201:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2213:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2224:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2209:3:201"},"nodeType":"YulFunctionCall","src":"2209:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2201:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2243:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"2254:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2236:6:201"},"nodeType":"YulFunctionCall","src":"2236:25:201"},"nodeType":"YulExpressionStatement","src":"2236:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2160:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2171:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2182:4:201","type":""}],"src":"2090:177:201"},{"body":{"nodeType":"YulBlock","src":"2319:109:201","statements":[{"nodeType":"YulAssignment","src":"2329:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2351:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2338:12:201"},"nodeType":"YulFunctionCall","src":"2338:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"2329:5:201"}]},{"body":{"nodeType":"YulBlock","src":"2406:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2415:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2418:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2408:6:201"},"nodeType":"YulFunctionCall","src":"2408:12:201"},"nodeType":"YulExpressionStatement","src":"2408:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2380:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2391:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2398:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2387:3:201"},"nodeType":"YulFunctionCall","src":"2387:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2377:2:201"},"nodeType":"YulFunctionCall","src":"2377:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2370:6:201"},"nodeType":"YulFunctionCall","src":"2370:35:201"},"nodeType":"YulIf","src":"2367:55:201"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2298:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"2309:5:201","type":""}],"src":"2272:156:201"},{"body":{"nodeType":"YulBlock","src":"2506:275:201","statements":[{"body":{"nodeType":"YulBlock","src":"2555:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2564:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2567:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2557:6:201"},"nodeType":"YulFunctionCall","src":"2557:12:201"},"nodeType":"YulExpressionStatement","src":"2557:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2534:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2542:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2530:3:201"},"nodeType":"YulFunctionCall","src":"2530:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"2549:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2526:3:201"},"nodeType":"YulFunctionCall","src":"2526:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2519:6:201"},"nodeType":"YulFunctionCall","src":"2519:35:201"},"nodeType":"YulIf","src":"2516:55:201"},{"nodeType":"YulAssignment","src":"2580:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2603:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2590:12:201"},"nodeType":"YulFunctionCall","src":"2590:20:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2580:6:201"}]},{"body":{"nodeType":"YulBlock","src":"2653:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2662:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2665:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2655:6:201"},"nodeType":"YulFunctionCall","src":"2655:12:201"},"nodeType":"YulExpressionStatement","src":"2655:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2625:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2633:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2622:2:201"},"nodeType":"YulFunctionCall","src":"2622:30:201"},"nodeType":"YulIf","src":"2619:50:201"},{"nodeType":"YulAssignment","src":"2678:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2694:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2702:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2690:3:201"},"nodeType":"YulFunctionCall","src":"2690:17:201"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"2678:8:201"}]},{"body":{"nodeType":"YulBlock","src":"2759:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2768:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2771:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2761:6:201"},"nodeType":"YulFunctionCall","src":"2761:12:201"},"nodeType":"YulExpressionStatement","src":"2761:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2730:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"2738:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2726:3:201"},"nodeType":"YulFunctionCall","src":"2726:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"2747:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2722:3:201"},"nodeType":"YulFunctionCall","src":"2722:30:201"},{"name":"end","nodeType":"YulIdentifier","src":"2754:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2719:2:201"},"nodeType":"YulFunctionCall","src":"2719:39:201"},"nodeType":"YulIf","src":"2716:59:201"}]},"name":"abi_decode_string_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2469:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"2477:3:201","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"2485:8:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"2495:6:201","type":""}],"src":"2433:348:201"},{"body":{"nodeType":"YulBlock","src":"3081:1119:201","statements":[{"body":{"nodeType":"YulBlock","src":"3128:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3137:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3140:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3130:6:201"},"nodeType":"YulFunctionCall","src":"3130:12:201"},"nodeType":"YulExpressionStatement","src":"3130:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3102:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3111:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3098:3:201"},"nodeType":"YulFunctionCall","src":"3098:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3123:3:201","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3094:3:201"},"nodeType":"YulFunctionCall","src":"3094:33:201"},"nodeType":"YulIf","src":"3091:53:201"},{"nodeType":"YulAssignment","src":"3153:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3182:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3163:18:201"},"nodeType":"YulFunctionCall","src":"3163:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3153:6:201"}]},{"nodeType":"YulAssignment","src":"3201:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3234:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3245:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3230:3:201"},"nodeType":"YulFunctionCall","src":"3230:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3211:18:201"},"nodeType":"YulFunctionCall","src":"3211:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3201:6:201"}]},{"nodeType":"YulAssignment","src":"3258:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3291:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3302:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3287:3:201"},"nodeType":"YulFunctionCall","src":"3287:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3268:18:201"},"nodeType":"YulFunctionCall","src":"3268:38:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3258:6:201"}]},{"nodeType":"YulAssignment","src":"3315:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3348:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3359:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3344:3:201"},"nodeType":"YulFunctionCall","src":"3344:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3325:18:201"},"nodeType":"YulFunctionCall","src":"3325:38:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3315:6:201"}]},{"nodeType":"YulAssignment","src":"3372:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3403:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3414:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3399:3:201"},"nodeType":"YulFunctionCall","src":"3399:19:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"3382:16:201"},"nodeType":"YulFunctionCall","src":"3382:37:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3372:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3428:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3438:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3432:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3510:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3519:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3522:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3512:6:201"},"nodeType":"YulFunctionCall","src":"3512:12:201"},"nodeType":"YulExpressionStatement","src":"3512:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3488:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3499:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3484:3:201"},"nodeType":"YulFunctionCall","src":"3484:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3471:12:201"},"nodeType":"YulFunctionCall","src":"3471:33:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3506:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3468:2:201"},"nodeType":"YulFunctionCall","src":"3468:41:201"},"nodeType":"YulIf","src":"3465:61:201"},{"nodeType":"YulVariableDeclaration","src":"3535:112:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3592:9:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3620:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3631:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3616:3:201"},"nodeType":"YulFunctionCall","src":"3616:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3603:12:201"},"nodeType":"YulFunctionCall","src":"3603:33:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3588:3:201"},"nodeType":"YulFunctionCall","src":"3588:49:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3639:7:201"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"3561:26:201"},"nodeType":"YulFunctionCall","src":"3561:86:201"},"variables":[{"name":"value5_1","nodeType":"YulTypedName","src":"3539:8:201","type":""},{"name":"value6_1","nodeType":"YulTypedName","src":"3549:8:201","type":""}]},{"nodeType":"YulAssignment","src":"3656:18:201","value":{"name":"value5_1","nodeType":"YulIdentifier","src":"3666:8:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"3656:6:201"}]},{"nodeType":"YulAssignment","src":"3683:18:201","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"3693:8:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"3683:6:201"}]},{"body":{"nodeType":"YulBlock","src":"3755:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3764:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3767:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3757:6:201"},"nodeType":"YulFunctionCall","src":"3757:12:201"},"nodeType":"YulExpressionStatement","src":"3757:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3733:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3744:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3729:3:201"},"nodeType":"YulFunctionCall","src":"3729:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3716:12:201"},"nodeType":"YulFunctionCall","src":"3716:33:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3751:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3713:2:201"},"nodeType":"YulFunctionCall","src":"3713:41:201"},"nodeType":"YulIf","src":"3710:61:201"},{"nodeType":"YulVariableDeclaration","src":"3780:112:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3837:9:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3865:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3876:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3861:3:201"},"nodeType":"YulFunctionCall","src":"3861:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3848:12:201"},"nodeType":"YulFunctionCall","src":"3848:33:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3833:3:201"},"nodeType":"YulFunctionCall","src":"3833:49:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3884:7:201"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"3806:26:201"},"nodeType":"YulFunctionCall","src":"3806:86:201"},"variables":[{"name":"value7_1","nodeType":"YulTypedName","src":"3784:8:201","type":""},{"name":"value8_1","nodeType":"YulTypedName","src":"3794:8:201","type":""}]},{"nodeType":"YulAssignment","src":"3901:18:201","value":{"name":"value7_1","nodeType":"YulIdentifier","src":"3911:8:201"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"3901:6:201"}]},{"nodeType":"YulAssignment","src":"3928:18:201","value":{"name":"value8_1","nodeType":"YulIdentifier","src":"3938:8:201"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"3928:6:201"}]},{"body":{"nodeType":"YulBlock","src":"4000:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4009:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4012:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4002:6:201"},"nodeType":"YulFunctionCall","src":"4002:12:201"},"nodeType":"YulExpressionStatement","src":"4002:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3978:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3989:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3974:3:201"},"nodeType":"YulFunctionCall","src":"3974:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3961:12:201"},"nodeType":"YulFunctionCall","src":"3961:33:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3996:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3958:2:201"},"nodeType":"YulFunctionCall","src":"3958:41:201"},"nodeType":"YulIf","src":"3955:61:201"},{"nodeType":"YulVariableDeclaration","src":"4025:113:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4083:9:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4111:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4122:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4107:3:201"},"nodeType":"YulFunctionCall","src":"4107:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4094:12:201"},"nodeType":"YulFunctionCall","src":"4094:33:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4079:3:201"},"nodeType":"YulFunctionCall","src":"4079:49:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4130:7:201"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"4052:26:201"},"nodeType":"YulFunctionCall","src":"4052:86:201"},"variables":[{"name":"value9_1","nodeType":"YulTypedName","src":"4029:8:201","type":""},{"name":"value10_1","nodeType":"YulTypedName","src":"4039:9:201","type":""}]},{"nodeType":"YulAssignment","src":"4147:18:201","value":{"name":"value9_1","nodeType":"YulIdentifier","src":"4157:8:201"},"variableNames":[{"name":"value9","nodeType":"YulIdentifier","src":"4147:6:201"}]},{"nodeType":"YulAssignment","src":"4174:20:201","value":{"name":"value10_1","nodeType":"YulIdentifier","src":"4185:9:201"},"variableNames":[{"name":"value10","nodeType":"YulIdentifier","src":"4174:7:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$4860t_addresst_addresst_contract$_IAaveIncentivesController_$3875t_uint8t_string_calldata_ptrt_string_calldata_ptrt_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2966:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2977:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2989:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2997:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3005:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3013:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3021:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"3029:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"3037:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"3045:6:201","type":""},{"name":"value8","nodeType":"YulTypedName","src":"3053:6:201","type":""},{"name":"value9","nodeType":"YulTypedName","src":"3061:6:201","type":""},{"name":"value10","nodeType":"YulTypedName","src":"3069:7:201","type":""}],"src":"2786:1414:201"},{"body":{"nodeType":"YulBlock","src":"4309:352:201","statements":[{"body":{"nodeType":"YulBlock","src":"4355:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4364:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4367:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4357:6:201"},"nodeType":"YulFunctionCall","src":"4357:12:201"},"nodeType":"YulExpressionStatement","src":"4357:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4330:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4339:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4326:3:201"},"nodeType":"YulFunctionCall","src":"4326:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4351:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4322:3:201"},"nodeType":"YulFunctionCall","src":"4322:32:201"},"nodeType":"YulIf","src":"4319:52:201"},{"nodeType":"YulVariableDeclaration","src":"4380:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4406:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4393:12:201"},"nodeType":"YulFunctionCall","src":"4393:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4384:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4450:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4425:24:201"},"nodeType":"YulFunctionCall","src":"4425:31:201"},"nodeType":"YulExpressionStatement","src":"4425:31:201"},{"nodeType":"YulAssignment","src":"4465:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"4475:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4465:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"4489:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4521:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4532:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4517:3:201"},"nodeType":"YulFunctionCall","src":"4517:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4504:12:201"},"nodeType":"YulFunctionCall","src":"4504:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"4493:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"4570:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4545:24:201"},"nodeType":"YulFunctionCall","src":"4545:33:201"},"nodeType":"YulExpressionStatement","src":"4545:33:201"},{"nodeType":"YulAssignment","src":"4587:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"4597:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4587:6:201"}]},{"nodeType":"YulAssignment","src":"4613:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4640:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4651:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4636:3:201"},"nodeType":"YulFunctionCall","src":"4636:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4623:12:201"},"nodeType":"YulFunctionCall","src":"4623:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4613:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4259:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4270:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4282:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4290:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4298:6:201","type":""}],"src":"4205:456:201"},{"body":{"nodeType":"YulBlock","src":"4767:76:201","statements":[{"nodeType":"YulAssignment","src":"4777:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4789:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4800:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4785:3:201"},"nodeType":"YulFunctionCall","src":"4785:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4777:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4819:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"4830:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4812:6:201"},"nodeType":"YulFunctionCall","src":"4812:25:201"},"nodeType":"YulExpressionStatement","src":"4812:25:201"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4736:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4747:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4758:4:201","type":""}],"src":"4666:177:201"},{"body":{"nodeType":"YulBlock","src":"4945:87:201","statements":[{"nodeType":"YulAssignment","src":"4955:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4967:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4978:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4963:3:201"},"nodeType":"YulFunctionCall","src":"4963:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4955:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4997:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5012:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5020:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5008:3:201"},"nodeType":"YulFunctionCall","src":"5008:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4990:6:201"},"nodeType":"YulFunctionCall","src":"4990:36:201"},"nodeType":"YulExpressionStatement","src":"4990:36:201"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4914:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4925:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4936:4:201","type":""}],"src":"4848:184:201"},{"body":{"nodeType":"YulBlock","src":"5152:125:201","statements":[{"nodeType":"YulAssignment","src":"5162:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5174:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5185:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5170:3:201"},"nodeType":"YulFunctionCall","src":"5170:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5162:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5204:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5219:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5227:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5215:3:201"},"nodeType":"YulFunctionCall","src":"5215:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5197:6:201"},"nodeType":"YulFunctionCall","src":"5197:74:201"},"nodeType":"YulExpressionStatement","src":"5197:74:201"}]},"name":"abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5121:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5132:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5143:4:201","type":""}],"src":"5037:240:201"},{"body":{"nodeType":"YulBlock","src":"5417:125:201","statements":[{"nodeType":"YulAssignment","src":"5427:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5439:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5450:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5435:3:201"},"nodeType":"YulFunctionCall","src":"5435:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5427:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5469:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5484:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5492:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5480:3:201"},"nodeType":"YulFunctionCall","src":"5480:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5462:6:201"},"nodeType":"YulFunctionCall","src":"5462:74:201"},"nodeType":"YulExpressionStatement","src":"5462:74:201"}]},"name":"abi_encode_tuple_t_contract$_IAaveIncentivesController_$3875__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5386:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5397:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5408:4:201","type":""}],"src":"5282:260:201"},{"body":{"nodeType":"YulBlock","src":"5666:99:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5683:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5694:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5676:6:201"},"nodeType":"YulFunctionCall","src":"5676:21:201"},"nodeType":"YulExpressionStatement","src":"5676:21:201"},{"nodeType":"YulAssignment","src":"5706:53:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5732:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5744:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5755:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5740:3:201"},"nodeType":"YulFunctionCall","src":"5740:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"5714:17:201"},"nodeType":"YulFunctionCall","src":"5714:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5706:4:201"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5635:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5646:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5657:4:201","type":""}],"src":"5547:218:201"},{"body":{"nodeType":"YulBlock","src":"5857:161:201","statements":[{"body":{"nodeType":"YulBlock","src":"5903:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5912:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5915:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5905:6:201"},"nodeType":"YulFunctionCall","src":"5905:12:201"},"nodeType":"YulExpressionStatement","src":"5905:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5878:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"5887:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5874:3:201"},"nodeType":"YulFunctionCall","src":"5874:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"5899:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5870:3:201"},"nodeType":"YulFunctionCall","src":"5870:32:201"},"nodeType":"YulIf","src":"5867:52:201"},{"nodeType":"YulAssignment","src":"5928:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5951:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5938:12:201"},"nodeType":"YulFunctionCall","src":"5938:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5928:6:201"}]},{"nodeType":"YulAssignment","src":"5970:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5997:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6008:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5993:3:201"},"nodeType":"YulFunctionCall","src":"5993:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5980:12:201"},"nodeType":"YulFunctionCall","src":"5980:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5970:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5815:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5826:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5838:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5846:6:201","type":""}],"src":"5770:248:201"},{"body":{"nodeType":"YulBlock","src":"6124:125:201","statements":[{"nodeType":"YulAssignment","src":"6134:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6146:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6157:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6142:3:201"},"nodeType":"YulFunctionCall","src":"6142:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6134:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6176:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6191:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"6199:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6187:3:201"},"nodeType":"YulFunctionCall","src":"6187:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6169:6:201"},"nodeType":"YulFunctionCall","src":"6169:74:201"},"nodeType":"YulExpressionStatement","src":"6169:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6093:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6104:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6115:4:201","type":""}],"src":"6023:226:201"},{"body":{"nodeType":"YulBlock","src":"6375:404:201","statements":[{"body":{"nodeType":"YulBlock","src":"6422:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6431:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6434:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6424:6:201"},"nodeType":"YulFunctionCall","src":"6424:12:201"},"nodeType":"YulExpressionStatement","src":"6424:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6396:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6405:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6392:3:201"},"nodeType":"YulFunctionCall","src":"6392:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"6417:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6388:3:201"},"nodeType":"YulFunctionCall","src":"6388:33:201"},"nodeType":"YulIf","src":"6385:53:201"},{"nodeType":"YulVariableDeclaration","src":"6447:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6473:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6460:12:201"},"nodeType":"YulFunctionCall","src":"6460:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6451:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6517:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6492:24:201"},"nodeType":"YulFunctionCall","src":"6492:31:201"},"nodeType":"YulExpressionStatement","src":"6492:31:201"},{"nodeType":"YulAssignment","src":"6532:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"6542:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6532:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"6556:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6588:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6599:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6584:3:201"},"nodeType":"YulFunctionCall","src":"6584:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6571:12:201"},"nodeType":"YulFunctionCall","src":"6571:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"6560:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"6637:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6612:24:201"},"nodeType":"YulFunctionCall","src":"6612:33:201"},"nodeType":"YulExpressionStatement","src":"6612:33:201"},{"nodeType":"YulAssignment","src":"6654:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"6664:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6654:6:201"}]},{"nodeType":"YulAssignment","src":"6680:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6707:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6718:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6703:3:201"},"nodeType":"YulFunctionCall","src":"6703:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6690:12:201"},"nodeType":"YulFunctionCall","src":"6690:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6680:6:201"}]},{"nodeType":"YulAssignment","src":"6731:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6758:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6769:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6754:3:201"},"nodeType":"YulFunctionCall","src":"6754:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6741:12:201"},"nodeType":"YulFunctionCall","src":"6741:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"6731:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6317:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6328:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6340:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6348:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6356:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6364:6:201","type":""}],"src":"6254:525:201"},{"body":{"nodeType":"YulBlock","src":"6954:564:201","statements":[{"body":{"nodeType":"YulBlock","src":"7001:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7010:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7013:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7003:6:201"},"nodeType":"YulFunctionCall","src":"7003:12:201"},"nodeType":"YulExpressionStatement","src":"7003:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6975:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6984:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6971:3:201"},"nodeType":"YulFunctionCall","src":"6971:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"6996:3:201","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6967:3:201"},"nodeType":"YulFunctionCall","src":"6967:33:201"},"nodeType":"YulIf","src":"6964:53:201"},{"nodeType":"YulVariableDeclaration","src":"7026:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7052:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7039:12:201"},"nodeType":"YulFunctionCall","src":"7039:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7030:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7096:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7071:24:201"},"nodeType":"YulFunctionCall","src":"7071:31:201"},"nodeType":"YulExpressionStatement","src":"7071:31:201"},{"nodeType":"YulAssignment","src":"7111:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"7121:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7111:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"7135:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7167:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7178:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7163:3:201"},"nodeType":"YulFunctionCall","src":"7163:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7150:12:201"},"nodeType":"YulFunctionCall","src":"7150:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7139:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7216:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7191:24:201"},"nodeType":"YulFunctionCall","src":"7191:33:201"},"nodeType":"YulExpressionStatement","src":"7191:33:201"},{"nodeType":"YulAssignment","src":"7233:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"7243:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7233:6:201"}]},{"nodeType":"YulAssignment","src":"7259:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7286:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7297:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7282:3:201"},"nodeType":"YulFunctionCall","src":"7282:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7269:12:201"},"nodeType":"YulFunctionCall","src":"7269:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"7259:6:201"}]},{"nodeType":"YulAssignment","src":"7310:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7337:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7348:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7333:3:201"},"nodeType":"YulFunctionCall","src":"7333:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7320:12:201"},"nodeType":"YulFunctionCall","src":"7320:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"7310:6:201"}]},{"nodeType":"YulAssignment","src":"7361:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7392:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7403:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7388:3:201"},"nodeType":"YulFunctionCall","src":"7388:19:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"7371:16:201"},"nodeType":"YulFunctionCall","src":"7371:37:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"7361:6:201"}]},{"nodeType":"YulAssignment","src":"7417:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7444:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7455:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7440:3:201"},"nodeType":"YulFunctionCall","src":"7440:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7427:12:201"},"nodeType":"YulFunctionCall","src":"7427:33:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"7417:6:201"}]},{"nodeType":"YulAssignment","src":"7469:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7496:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7507:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7492:3:201"},"nodeType":"YulFunctionCall","src":"7492:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7479:12:201"},"nodeType":"YulFunctionCall","src":"7479:33:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"7469:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6872:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6883:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6895:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6903:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6911:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6919:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"6927:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"6935:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"6943:6:201","type":""}],"src":"6784:734:201"},{"body":{"nodeType":"YulBlock","src":"7610:301:201","statements":[{"body":{"nodeType":"YulBlock","src":"7656:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7665:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7668:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7658:6:201"},"nodeType":"YulFunctionCall","src":"7658:12:201"},"nodeType":"YulExpressionStatement","src":"7658:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7631:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"7640:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7627:3:201"},"nodeType":"YulFunctionCall","src":"7627:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"7652:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7623:3:201"},"nodeType":"YulFunctionCall","src":"7623:32:201"},"nodeType":"YulIf","src":"7620:52:201"},{"nodeType":"YulVariableDeclaration","src":"7681:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7707:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7694:12:201"},"nodeType":"YulFunctionCall","src":"7694:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7685:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7751:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7726:24:201"},"nodeType":"YulFunctionCall","src":"7726:31:201"},"nodeType":"YulExpressionStatement","src":"7726:31:201"},{"nodeType":"YulAssignment","src":"7766:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"7776:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7766:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"7790:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7822:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7833:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7818:3:201"},"nodeType":"YulFunctionCall","src":"7818:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7805:12:201"},"nodeType":"YulFunctionCall","src":"7805:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7794:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7871:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7846:24:201"},"nodeType":"YulFunctionCall","src":"7846:33:201"},"nodeType":"YulExpressionStatement","src":"7846:33:201"},{"nodeType":"YulAssignment","src":"7888:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"7898:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7888:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7568:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7579:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7591:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7599:6:201","type":""}],"src":"7523:388:201"},{"body":{"nodeType":"YulBlock","src":"8020:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"8066:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8075:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8078:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8068:6:201"},"nodeType":"YulFunctionCall","src":"8068:12:201"},"nodeType":"YulExpressionStatement","src":"8068:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8041:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"8050:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8037:3:201"},"nodeType":"YulFunctionCall","src":"8037:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"8062:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8033:3:201"},"nodeType":"YulFunctionCall","src":"8033:32:201"},"nodeType":"YulIf","src":"8030:52:201"},{"nodeType":"YulVariableDeclaration","src":"8091:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8117:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8104:12:201"},"nodeType":"YulFunctionCall","src":"8104:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"8095:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8161:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"8136:24:201"},"nodeType":"YulFunctionCall","src":"8136:31:201"},"nodeType":"YulExpressionStatement","src":"8136:31:201"},{"nodeType":"YulAssignment","src":"8176:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"8186:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8176:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IAaveIncentivesController_$3875","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7986:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7997:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8009:6:201","type":""}],"src":"7916:281:201"},{"body":{"nodeType":"YulBlock","src":"8257:382:201","statements":[{"nodeType":"YulAssignment","src":"8267:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8281:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"8284:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"8277:3:201"},"nodeType":"YulFunctionCall","src":"8277:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"8267:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"8298:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"8328:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"8334:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8324:3:201"},"nodeType":"YulFunctionCall","src":"8324:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"8302:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"8375:31:201","statements":[{"nodeType":"YulAssignment","src":"8377:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8391:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8399:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8387:3:201"},"nodeType":"YulFunctionCall","src":"8387:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"8377:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"8355:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8348:6:201"},"nodeType":"YulFunctionCall","src":"8348:26:201"},"nodeType":"YulIf","src":"8345:61:201"},{"body":{"nodeType":"YulBlock","src":"8465:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8486:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8489:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8479:6:201"},"nodeType":"YulFunctionCall","src":"8479:88:201"},"nodeType":"YulExpressionStatement","src":"8479:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8587:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"8590:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8580:6:201"},"nodeType":"YulFunctionCall","src":"8580:15:201"},"nodeType":"YulExpressionStatement","src":"8580:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8615:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8618:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8608:6:201"},"nodeType":"YulFunctionCall","src":"8608:15:201"},"nodeType":"YulExpressionStatement","src":"8608:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"8421:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8444:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8452:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8441:2:201"},"nodeType":"YulFunctionCall","src":"8441:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8418:2:201"},"nodeType":"YulFunctionCall","src":"8418:38:201"},"nodeType":"YulIf","src":"8415:218:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"8237:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"8246:6:201","type":""}],"src":"8202:437:201"},{"body":{"nodeType":"YulBlock","src":"8725:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"8771:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8780:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8783:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8773:6:201"},"nodeType":"YulFunctionCall","src":"8773:12:201"},"nodeType":"YulExpressionStatement","src":"8773:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8746:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"8755:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8742:3:201"},"nodeType":"YulFunctionCall","src":"8742:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"8767:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8738:3:201"},"nodeType":"YulFunctionCall","src":"8738:32:201"},"nodeType":"YulIf","src":"8735:52:201"},{"nodeType":"YulAssignment","src":"8796:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8812:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8806:5:201"},"nodeType":"YulFunctionCall","src":"8806:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8796:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8691:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8702:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8714:6:201","type":""}],"src":"8644:184:201"},{"body":{"nodeType":"YulBlock","src":"9007:236:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9024:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9035:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9017:6:201"},"nodeType":"YulFunctionCall","src":"9017:21:201"},"nodeType":"YulExpressionStatement","src":"9017:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9058:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9069:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9054:3:201"},"nodeType":"YulFunctionCall","src":"9054:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"9074:2:201","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9047:6:201"},"nodeType":"YulFunctionCall","src":"9047:30:201"},"nodeType":"YulExpressionStatement","src":"9047:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9097:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9108:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9093:3:201"},"nodeType":"YulFunctionCall","src":"9093:18:201"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"9113:34:201","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9086:6:201"},"nodeType":"YulFunctionCall","src":"9086:62:201"},"nodeType":"YulExpressionStatement","src":"9086:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9168:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9179:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9164:3:201"},"nodeType":"YulFunctionCall","src":"9164:18:201"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"9184:16:201","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9157:6:201"},"nodeType":"YulFunctionCall","src":"9157:44:201"},"nodeType":"YulExpressionStatement","src":"9157:44:201"},{"nodeType":"YulAssignment","src":"9210:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9222:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9233:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9218:3:201"},"nodeType":"YulFunctionCall","src":"9218:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9210:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8984:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8998:4:201","type":""}],"src":"8833:410:201"},{"body":{"nodeType":"YulBlock","src":"9315:259:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9332:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"9337:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9325:6:201"},"nodeType":"YulFunctionCall","src":"9325:19:201"},"nodeType":"YulExpressionStatement","src":"9325:19:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9370:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"9375:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9366:3:201"},"nodeType":"YulFunctionCall","src":"9366:14:201"},{"name":"start","nodeType":"YulIdentifier","src":"9382:5:201"},{"name":"length","nodeType":"YulIdentifier","src":"9389:6:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"9353:12:201"},"nodeType":"YulFunctionCall","src":"9353:43:201"},"nodeType":"YulExpressionStatement","src":"9353:43:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9420:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"9425:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9416:3:201"},"nodeType":"YulFunctionCall","src":"9416:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"9434:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9412:3:201"},"nodeType":"YulFunctionCall","src":"9412:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"9441:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9405:6:201"},"nodeType":"YulFunctionCall","src":"9405:38:201"},"nodeType":"YulExpressionStatement","src":"9405:38:201"},{"nodeType":"YulAssignment","src":"9452:116:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9467:3:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9480:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"9488:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9476:3:201"},"nodeType":"YulFunctionCall","src":"9476:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"9493:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9472:3:201"},"nodeType":"YulFunctionCall","src":"9472:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9463:3:201"},"nodeType":"YulFunctionCall","src":"9463:98:201"},{"kind":"number","nodeType":"YulLiteral","src":"9563:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9459:3:201"},"nodeType":"YulFunctionCall","src":"9459:109:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"9452:3:201"}]}]},"name":"abi_encode_string_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"start","nodeType":"YulTypedName","src":"9284:5:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"9291:6:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"9299:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"9307:3:201","type":""}],"src":"9248:326:201"},{"body":{"nodeType":"YulBlock","src":"9904:603:201","statements":[{"nodeType":"YulVariableDeclaration","src":"9914:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9924:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9918:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9982:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9997:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10005:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9993:3:201"},"nodeType":"YulFunctionCall","src":"9993:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9975:6:201"},"nodeType":"YulFunctionCall","src":"9975:34:201"},"nodeType":"YulExpressionStatement","src":"9975:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10029:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10040:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10025:3:201"},"nodeType":"YulFunctionCall","src":"10025:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10049:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10057:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10045:3:201"},"nodeType":"YulFunctionCall","src":"10045:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10018:6:201"},"nodeType":"YulFunctionCall","src":"10018:43:201"},"nodeType":"YulExpressionStatement","src":"10018:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10081:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10092:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10077:3:201"},"nodeType":"YulFunctionCall","src":"10077:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"10101:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10109:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10097:3:201"},"nodeType":"YulFunctionCall","src":"10097:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10070:6:201"},"nodeType":"YulFunctionCall","src":"10070:45:201"},"nodeType":"YulExpressionStatement","src":"10070:45:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10135:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10146:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10131:3:201"},"nodeType":"YulFunctionCall","src":"10131:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"10151:3:201","type":"","value":"192"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10124:6:201"},"nodeType":"YulFunctionCall","src":"10124:31:201"},"nodeType":"YulExpressionStatement","src":"10124:31:201"},{"nodeType":"YulVariableDeclaration","src":"10164:77:201","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"10205:6:201"},{"name":"value4","nodeType":"YulIdentifier","src":"10213:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10225:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10236:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10221:3:201"},"nodeType":"YulFunctionCall","src":"10221:19:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10178:26:201"},"nodeType":"YulFunctionCall","src":"10178:63:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"10168:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10261:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10272:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10257:3:201"},"nodeType":"YulFunctionCall","src":"10257:19:201"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"10282:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"10290:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10278:3:201"},"nodeType":"YulFunctionCall","src":"10278:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10250:6:201"},"nodeType":"YulFunctionCall","src":"10250:51:201"},"nodeType":"YulExpressionStatement","src":"10250:51:201"},{"nodeType":"YulVariableDeclaration","src":"10310:64:201","value":{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"10351:6:201"},{"name":"value6","nodeType":"YulIdentifier","src":"10359:6:201"},{"name":"tail_1","nodeType":"YulIdentifier","src":"10367:6:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10324:26:201"},"nodeType":"YulFunctionCall","src":"10324:50:201"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"10314:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10394:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10405:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10390:3:201"},"nodeType":"YulFunctionCall","src":"10390:19:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"10415:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"10423:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10411:3:201"},"nodeType":"YulFunctionCall","src":"10411:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10383:6:201"},"nodeType":"YulFunctionCall","src":"10383:51:201"},"nodeType":"YulExpressionStatement","src":"10383:51:201"},{"nodeType":"YulAssignment","src":"10443:58:201","value":{"arguments":[{"name":"value7","nodeType":"YulIdentifier","src":"10478:6:201"},{"name":"value8","nodeType":"YulIdentifier","src":"10486:6:201"},{"name":"tail_2","nodeType":"YulIdentifier","src":"10494:6:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10451:26:201"},"nodeType":"YulFunctionCall","src":"10451:50:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10443:4:201"}]}]},"name":"abi_encode_tuple_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9809:9:201","type":""},{"name":"value8","nodeType":"YulTypedName","src":"9820:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"9828:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"9836:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"9844:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"9852:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9860:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9868:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9876:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9884:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9895:4:201","type":""}],"src":"9579:928:201"},{"body":{"nodeType":"YulBlock","src":"10544:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10561:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10564:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10554:6:201"},"nodeType":"YulFunctionCall","src":"10554:88:201"},"nodeType":"YulExpressionStatement","src":"10554:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10658:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10661:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10651:6:201"},"nodeType":"YulFunctionCall","src":"10651:15:201"},"nodeType":"YulExpressionStatement","src":"10651:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10682:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10685:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10675:6:201"},"nodeType":"YulFunctionCall","src":"10675:15:201"},"nodeType":"YulExpressionStatement","src":"10675:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"10512:184:201"},{"body":{"nodeType":"YulBlock","src":"10750:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"10772:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"10774:16:201"},"nodeType":"YulFunctionCall","src":"10774:18:201"},"nodeType":"YulExpressionStatement","src":"10774:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10766:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"10769:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10763:2:201"},"nodeType":"YulFunctionCall","src":"10763:8:201"},"nodeType":"YulIf","src":"10760:34:201"},{"nodeType":"YulAssignment","src":"10803:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10815:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"10818:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10811:3:201"},"nodeType":"YulFunctionCall","src":"10811:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"10803:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"10732:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"10735:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"10741:4:201","type":""}],"src":"10701:125:201"},{"body":{"nodeType":"YulBlock","src":"10879:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"10906:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"10908:16:201"},"nodeType":"YulFunctionCall","src":"10908:18:201"},"nodeType":"YulExpressionStatement","src":"10908:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10895:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"10902:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"10898:3:201"},"nodeType":"YulFunctionCall","src":"10898:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10892:2:201"},"nodeType":"YulFunctionCall","src":"10892:13:201"},"nodeType":"YulIf","src":"10889:39:201"},{"nodeType":"YulAssignment","src":"10937:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10948:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"10951:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10944:3:201"},"nodeType":"YulFunctionCall","src":"10944:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"10937:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"10862:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"10865:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"10871:3:201","type":""}],"src":"10831:128:201"},{"body":{"nodeType":"YulBlock","src":"11045:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"11091:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11100:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11103:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11093:6:201"},"nodeType":"YulFunctionCall","src":"11093:12:201"},"nodeType":"YulExpressionStatement","src":"11093:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11066:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"11075:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11062:3:201"},"nodeType":"YulFunctionCall","src":"11062:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"11087:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11058:3:201"},"nodeType":"YulFunctionCall","src":"11058:32:201"},"nodeType":"YulIf","src":"11055:52:201"},{"nodeType":"YulVariableDeclaration","src":"11116:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11135:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11129:5:201"},"nodeType":"YulFunctionCall","src":"11129:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11120:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11179:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"11154:24:201"},"nodeType":"YulFunctionCall","src":"11154:31:201"},"nodeType":"YulExpressionStatement","src":"11154:31:201"},{"nodeType":"YulAssignment","src":"11194:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"11204:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11194:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11011:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11022:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11034:6:201","type":""}],"src":"10964:251:201"},{"body":{"nodeType":"YulBlock","src":"11298:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"11344:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11353:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11356:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11346:6:201"},"nodeType":"YulFunctionCall","src":"11346:12:201"},"nodeType":"YulExpressionStatement","src":"11346:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11319:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"11328:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11315:3:201"},"nodeType":"YulFunctionCall","src":"11315:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"11340:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11311:3:201"},"nodeType":"YulFunctionCall","src":"11311:32:201"},"nodeType":"YulIf","src":"11308:52:201"},{"nodeType":"YulVariableDeclaration","src":"11369:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11388:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11382:5:201"},"nodeType":"YulFunctionCall","src":"11382:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11373:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"11451:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11460:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11463:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11453:6:201"},"nodeType":"YulFunctionCall","src":"11453:12:201"},"nodeType":"YulExpressionStatement","src":"11453:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11420:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11441:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11434:6:201"},"nodeType":"YulFunctionCall","src":"11434:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11427:6:201"},"nodeType":"YulFunctionCall","src":"11427:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"11417:2:201"},"nodeType":"YulFunctionCall","src":"11417:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11410:6:201"},"nodeType":"YulFunctionCall","src":"11410:40:201"},"nodeType":"YulIf","src":"11407:60:201"},{"nodeType":"YulAssignment","src":"11476:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"11486:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11476:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11264:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11275:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11287:6:201","type":""}],"src":"11220:277:201"},{"body":{"nodeType":"YulBlock","src":"11743:373:201","statements":[{"nodeType":"YulAssignment","src":"11753:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11765:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11776:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11761:3:201"},"nodeType":"YulFunctionCall","src":"11761:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11753:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11796:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"11807:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11789:6:201"},"nodeType":"YulFunctionCall","src":"11789:25:201"},"nodeType":"YulExpressionStatement","src":"11789:25:201"},{"nodeType":"YulVariableDeclaration","src":"11823:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11833:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11827:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11895:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11906:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11891:3:201"},"nodeType":"YulFunctionCall","src":"11891:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11915:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11923:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11911:3:201"},"nodeType":"YulFunctionCall","src":"11911:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11884:6:201"},"nodeType":"YulFunctionCall","src":"11884:43:201"},"nodeType":"YulExpressionStatement","src":"11884:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11947:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11958:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11943:3:201"},"nodeType":"YulFunctionCall","src":"11943:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"11967:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11975:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11963:3:201"},"nodeType":"YulFunctionCall","src":"11963:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11936:6:201"},"nodeType":"YulFunctionCall","src":"11936:43:201"},"nodeType":"YulExpressionStatement","src":"11936:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11999:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12010:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11995:3:201"},"nodeType":"YulFunctionCall","src":"11995:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"12015:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11988:6:201"},"nodeType":"YulFunctionCall","src":"11988:34:201"},"nodeType":"YulExpressionStatement","src":"11988:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12042:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12053:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12038:3:201"},"nodeType":"YulFunctionCall","src":"12038:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"12059:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12031:6:201"},"nodeType":"YulFunctionCall","src":"12031:35:201"},"nodeType":"YulExpressionStatement","src":"12031:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12086:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12097:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12082:3:201"},"nodeType":"YulFunctionCall","src":"12082:19:201"},{"name":"value5","nodeType":"YulIdentifier","src":"12103:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12075:6:201"},"nodeType":"YulFunctionCall","src":"12075:35:201"},"nodeType":"YulExpressionStatement","src":"12075:35:201"}]},"name":"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11672:9:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"11683:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"11691:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11699:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11707:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11715:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11723:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11734:4:201","type":""}],"src":"11502:614:201"},{"body":{"nodeType":"YulBlock","src":"12369:196:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12386:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"12391:66:201","type":"","value":"0x1901000000000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12379:6:201"},"nodeType":"YulFunctionCall","src":"12379:79:201"},"nodeType":"YulExpressionStatement","src":"12379:79:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12478:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"12483:1:201","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12474:3:201"},"nodeType":"YulFunctionCall","src":"12474:11:201"},{"name":"value0","nodeType":"YulIdentifier","src":"12487:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12467:6:201"},"nodeType":"YulFunctionCall","src":"12467:27:201"},"nodeType":"YulExpressionStatement","src":"12467:27:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12514:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"12519:2:201","type":"","value":"34"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12510:3:201"},"nodeType":"YulFunctionCall","src":"12510:12:201"},{"name":"value1","nodeType":"YulIdentifier","src":"12524:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12503:6:201"},"nodeType":"YulFunctionCall","src":"12503:28:201"},"nodeType":"YulExpressionStatement","src":"12503:28:201"},{"nodeType":"YulAssignment","src":"12540:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12551:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"12556:2:201","type":"","value":"66"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12547:3:201"},"nodeType":"YulFunctionCall","src":"12547:12:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"12540:3:201"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"12337:3:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12342:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12350:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"12361:3:201","type":""}],"src":"12121:444:201"},{"body":{"nodeType":"YulBlock","src":"12751:217:201","statements":[{"nodeType":"YulAssignment","src":"12761:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12773:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12784:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12769:3:201"},"nodeType":"YulFunctionCall","src":"12769:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12761:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12804:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"12815:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12797:6:201"},"nodeType":"YulFunctionCall","src":"12797:25:201"},"nodeType":"YulExpressionStatement","src":"12797:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12842:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12853:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12838:3:201"},"nodeType":"YulFunctionCall","src":"12838:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12862:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"12870:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12858:3:201"},"nodeType":"YulFunctionCall","src":"12858:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12831:6:201"},"nodeType":"YulFunctionCall","src":"12831:45:201"},"nodeType":"YulExpressionStatement","src":"12831:45:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12896:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12907:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12892:3:201"},"nodeType":"YulFunctionCall","src":"12892:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"12912:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12885:6:201"},"nodeType":"YulFunctionCall","src":"12885:34:201"},"nodeType":"YulExpressionStatement","src":"12885:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12939:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12950:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12935:3:201"},"nodeType":"YulFunctionCall","src":"12935:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"12955:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12928:6:201"},"nodeType":"YulFunctionCall","src":"12928:34:201"},"nodeType":"YulExpressionStatement","src":"12928:34:201"}]},"name":"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12696:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12707:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12715:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12723:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12731:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12742:4:201","type":""}],"src":"12570:398:201"},{"body":{"nodeType":"YulBlock","src":"13186:299:201","statements":[{"nodeType":"YulAssignment","src":"13196:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13208:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13219:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13204:3:201"},"nodeType":"YulFunctionCall","src":"13204:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13196:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13239:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"13250:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13232:6:201"},"nodeType":"YulFunctionCall","src":"13232:25:201"},"nodeType":"YulExpressionStatement","src":"13232:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13277:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13288:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13273:3:201"},"nodeType":"YulFunctionCall","src":"13273:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"13293:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13266:6:201"},"nodeType":"YulFunctionCall","src":"13266:34:201"},"nodeType":"YulExpressionStatement","src":"13266:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13320:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13331:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13316:3:201"},"nodeType":"YulFunctionCall","src":"13316:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"13336:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13309:6:201"},"nodeType":"YulFunctionCall","src":"13309:34:201"},"nodeType":"YulExpressionStatement","src":"13309:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13363:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13374:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13359:3:201"},"nodeType":"YulFunctionCall","src":"13359:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"13379:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13352:6:201"},"nodeType":"YulFunctionCall","src":"13352:34:201"},"nodeType":"YulExpressionStatement","src":"13352:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13406:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13417:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13402:3:201"},"nodeType":"YulFunctionCall","src":"13402:19:201"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"13427:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13435:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13423:3:201"},"nodeType":"YulFunctionCall","src":"13423:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13395:6:201"},"nodeType":"YulFunctionCall","src":"13395:84:201"},"nodeType":"YulExpressionStatement","src":"13395:84:201"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13123:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"13134:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13142:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13150:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13158:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13166:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13177:4:201","type":""}],"src":"12973:512:201"},{"body":{"nodeType":"YulBlock","src":"13664:229:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13681:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13692:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13674:6:201"},"nodeType":"YulFunctionCall","src":"13674:21:201"},"nodeType":"YulExpressionStatement","src":"13674:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13715:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13726:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13711:3:201"},"nodeType":"YulFunctionCall","src":"13711:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"13731:2:201","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13704:6:201"},"nodeType":"YulFunctionCall","src":"13704:30:201"},"nodeType":"YulExpressionStatement","src":"13704:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13754:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13765:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13750:3:201"},"nodeType":"YulFunctionCall","src":"13750:18:201"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"13770:34:201","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13743:6:201"},"nodeType":"YulFunctionCall","src":"13743:62:201"},"nodeType":"YulExpressionStatement","src":"13743:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13825:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13836:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13821:3:201"},"nodeType":"YulFunctionCall","src":"13821:18:201"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"13841:9:201","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13814:6:201"},"nodeType":"YulFunctionCall","src":"13814:37:201"},"nodeType":"YulExpressionStatement","src":"13814:37:201"},{"nodeType":"YulAssignment","src":"13860:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13872:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13883:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13868:3:201"},"nodeType":"YulFunctionCall","src":"13868:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13860:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13641:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13655:4:201","type":""}],"src":"13490:403:201"},{"body":{"nodeType":"YulBlock","src":"14072:171:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14089:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14100:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14082:6:201"},"nodeType":"YulFunctionCall","src":"14082:21:201"},"nodeType":"YulExpressionStatement","src":"14082:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14123:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14134:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14119:3:201"},"nodeType":"YulFunctionCall","src":"14119:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"14139:2:201","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14112:6:201"},"nodeType":"YulFunctionCall","src":"14112:30:201"},"nodeType":"YulExpressionStatement","src":"14112:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14162:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14173:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14158:3:201"},"nodeType":"YulFunctionCall","src":"14158:18:201"},{"hexValue":"475076323a206661696c6564207472616e73666572","kind":"string","nodeType":"YulLiteral","src":"14178:23:201","type":"","value":"GPv2: failed transfer"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14151:6:201"},"nodeType":"YulFunctionCall","src":"14151:51:201"},"nodeType":"YulExpressionStatement","src":"14151:51:201"},{"nodeType":"YulAssignment","src":"14211:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14223:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14234:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14219:3:201"},"nodeType":"YulFunctionCall","src":"14219:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14211:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14049:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14063:4:201","type":""}],"src":"13898:345:201"},{"body":{"nodeType":"YulBlock","src":"14405:162:201","statements":[{"nodeType":"YulAssignment","src":"14415:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14427:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14438:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14423:3:201"},"nodeType":"YulFunctionCall","src":"14423:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14415:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14457:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"14468:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14450:6:201"},"nodeType":"YulFunctionCall","src":"14450:25:201"},"nodeType":"YulExpressionStatement","src":"14450:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14495:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14506:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14491:3:201"},"nodeType":"YulFunctionCall","src":"14491:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"14511:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14484:6:201"},"nodeType":"YulFunctionCall","src":"14484:34:201"},"nodeType":"YulExpressionStatement","src":"14484:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14538:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14549:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14534:3:201"},"nodeType":"YulFunctionCall","src":"14534:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"14554:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14527:6:201"},"nodeType":"YulFunctionCall","src":"14527:34:201"},"nodeType":"YulExpressionStatement","src":"14527:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14358:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14369:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14377:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14385:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14396:4:201","type":""}],"src":"14248:319:201"},{"body":{"nodeType":"YulBlock","src":"14813:382:201","statements":[{"nodeType":"YulAssignment","src":"14823:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14835:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14846:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14831:3:201"},"nodeType":"YulFunctionCall","src":"14831:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14823:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"14859:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14869:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"14863:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14927:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14942:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"14950:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14938:3:201"},"nodeType":"YulFunctionCall","src":"14938:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14920:6:201"},"nodeType":"YulFunctionCall","src":"14920:34:201"},"nodeType":"YulExpressionStatement","src":"14920:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14974:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14985:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14970:3:201"},"nodeType":"YulFunctionCall","src":"14970:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"14994:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15002:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14990:3:201"},"nodeType":"YulFunctionCall","src":"14990:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14963:6:201"},"nodeType":"YulFunctionCall","src":"14963:43:201"},"nodeType":"YulExpressionStatement","src":"14963:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15026:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15037:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15022:3:201"},"nodeType":"YulFunctionCall","src":"15022:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"15046:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15054:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15042:3:201"},"nodeType":"YulFunctionCall","src":"15042:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15015:6:201"},"nodeType":"YulFunctionCall","src":"15015:43:201"},"nodeType":"YulExpressionStatement","src":"15015:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15078:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15089:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15074:3:201"},"nodeType":"YulFunctionCall","src":"15074:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"15094:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15067:6:201"},"nodeType":"YulFunctionCall","src":"15067:34:201"},"nodeType":"YulExpressionStatement","src":"15067:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15121:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15132:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15117:3:201"},"nodeType":"YulFunctionCall","src":"15117:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"15138:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15110:6:201"},"nodeType":"YulFunctionCall","src":"15110:35:201"},"nodeType":"YulExpressionStatement","src":"15110:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15165:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15176:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15161:3:201"},"nodeType":"YulFunctionCall","src":"15161:19:201"},{"name":"value5","nodeType":"YulIdentifier","src":"15182:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15154:6:201"},"nodeType":"YulFunctionCall","src":"15154:35:201"},"nodeType":"YulExpressionStatement","src":"15154:35:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14742:9:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"14753:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"14761:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14769:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14777:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14785:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14793:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14804:4:201","type":""}],"src":"14572:623:201"},{"body":{"nodeType":"YulBlock","src":"15248:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"15258:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"15268:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15262:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15311:21:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15326:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15329:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15322:3:201"},"nodeType":"YulFunctionCall","src":"15322:10:201"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15315:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15341:21:201","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"15356:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15359:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15352:3:201"},"nodeType":"YulFunctionCall","src":"15352:10:201"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"15345:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"15396:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15398:16:201"},"nodeType":"YulFunctionCall","src":"15398:18:201"},"nodeType":"YulExpressionStatement","src":"15398:18:201"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15377:3:201"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"15386:2:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"15390:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15382:3:201"},"nodeType":"YulFunctionCall","src":"15382:12:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15374:2:201"},"nodeType":"YulFunctionCall","src":"15374:21:201"},"nodeType":"YulIf","src":"15371:47:201"},{"nodeType":"YulAssignment","src":"15427:20:201","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15438:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"15443:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15434:3:201"},"nodeType":"YulFunctionCall","src":"15434:13:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"15427:3:201"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15231:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"15234:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"15240:3:201","type":""}],"src":"15200:253:201"},{"body":{"nodeType":"YulBlock","src":"15615:252:201","statements":[{"nodeType":"YulAssignment","src":"15625:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15637:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15648:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15633:3:201"},"nodeType":"YulFunctionCall","src":"15633:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15625:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15667:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15682:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"15690:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15678:3:201"},"nodeType":"YulFunctionCall","src":"15678:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15660:6:201"},"nodeType":"YulFunctionCall","src":"15660:74:201"},"nodeType":"YulExpressionStatement","src":"15660:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15754:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15765:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15750:3:201"},"nodeType":"YulFunctionCall","src":"15750:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"15770:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15743:6:201"},"nodeType":"YulFunctionCall","src":"15743:34:201"},"nodeType":"YulExpressionStatement","src":"15743:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15797:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15808:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15793:3:201"},"nodeType":"YulFunctionCall","src":"15793:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"15817:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"15825:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15813:3:201"},"nodeType":"YulFunctionCall","src":"15813:47:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15786:6:201"},"nodeType":"YulFunctionCall","src":"15786:75:201"},"nodeType":"YulExpressionStatement","src":"15786:75:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15568:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15579:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15587:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15595:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15606:4:201","type":""}],"src":"15458:409:201"},{"body":{"nodeType":"YulBlock","src":"15921:197:201","statements":[{"nodeType":"YulVariableDeclaration","src":"15931:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"15941:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15935:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15984:21:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15999:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16002:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15995:3:201"},"nodeType":"YulFunctionCall","src":"15995:10:201"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15988:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16014:21:201","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"16029:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16032:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16025:3:201"},"nodeType":"YulFunctionCall","src":"16025:10:201"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"16018:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"16060:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"16062:16:201"},"nodeType":"YulFunctionCall","src":"16062:18:201"},"nodeType":"YulExpressionStatement","src":"16062:18:201"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16050:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"16055:3:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16047:2:201"},"nodeType":"YulFunctionCall","src":"16047:12:201"},"nodeType":"YulIf","src":"16044:38:201"},{"nodeType":"YulAssignment","src":"16091:21:201","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16103:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"16108:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16099:3:201"},"nodeType":"YulFunctionCall","src":"16099:13:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"16091:4:201"}]}]},"name":"checked_sub_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15903:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"15906:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"15912:4:201","type":""}],"src":"15872:246:201"}]},"contents":"{\n    { }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_string_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$4860t_addresst_addresst_contract$_IAaveIncentivesController_$3875t_uint8t_string_calldata_ptrt_string_calldata_ptrt_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := abi_decode_address(add(headStart, 64))\n        value3 := abi_decode_address(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        let _1 := 0xffffffffffffffff\n        if gt(calldataload(add(headStart, 160)), _1) { revert(0, 0) }\n        let value5_1, value6_1 := abi_decode_string_calldata(add(headStart, calldataload(add(headStart, 160))), dataEnd)\n        value5 := value5_1\n        value6 := value6_1\n        if gt(calldataload(add(headStart, 192)), _1) { revert(0, 0) }\n        let value7_1, value8_1 := abi_decode_string_calldata(add(headStart, calldataload(add(headStart, 192))), dataEnd)\n        value7 := value7_1\n        value8 := value8_1\n        if gt(calldataload(add(headStart, 224)), _1) { revert(0, 0) }\n        let value9_1, value10_1 := abi_decode_string_calldata(add(headStart, calldataload(add(headStart, 224))), dataEnd)\n        value9 := value9_1\n        value10 := value10_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_contract$_IAaveIncentivesController_$3875__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_contract$_IAaveIncentivesController_$3875(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_string_calldata(start, length, pos) -> end\n    {\n        mstore(pos, length)\n        calldatacopy(add(pos, 0x20), start, length)\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, 0xff))\n        mstore(add(headStart, 96), 192)\n        let tail_1 := abi_encode_string_calldata(value3, value4, add(headStart, 192))\n        mstore(add(headStart, 128), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string_calldata(value5, value6, tail_1)\n        mstore(add(headStart, 160), sub(tail_2, headStart))\n        tail := abi_encode_string_calldata(value7, value8, tail_2)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, 0x1901000000000000000000000000000000000000000000000000000000000000)\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"GPv2: failed transfer\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffff))\n    }\n    function checked_sub_t_uint128(x, y) -> diff\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"27744":[{"length":32,"start":7371}],"27926":[{"length":32,"start":4412},{"length":32,"start":6086}],"27929":[{"length":32,"start":956},{"length":32,"start":1821},{"length":32,"start":2178},{"length":32,"start":2689},{"length":32,"start":3227},{"length":32,"start":3432},{"length":32,"start":3626},{"length":32,"start":3853},{"length":32,"start":3981},{"length":32,"start":4277},{"length":32,"start":5895},{"length":32,"start":6615},{"length":32,"start":9088},{"length":32,"start":9463}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106102265760003560e01c8063781603761161012a578063b1bf962d116100bd578063d7020d0a1161008c578063e075398611610071578063e07539861461058c578063e655dbd8146105e8578063f866c319146105fb57600080fd5b8063d7020d0a14610533578063dd62ed3e1461054657600080fd5b8063b1bf962d146104f2578063b3f1c93d146104fa578063cea9d26f1461050d578063d505accf1461052057600080fd5b8063a457c2d7116100f9578063a457c2d714610490578063a9059cbb146104a3578063ae167335146104b6578063b16a19de146104d457600080fd5b806378160376146104265780637df5bd3b146104625780637ecebe001461047557806395d89b411461048857600080fd5b806330adf81f116101bd5780634efecaa51161018c57806370a082311161017157806370a08231146103a45780637535d246146103b757806375d264131461040357600080fd5b80634efecaa51461037e5780636fd976761461039157600080fd5b806330adf81f14610327578063313ce5671461034e5780633644e51514610363578063395093511461036b57600080fd5b806318160ddd116101f957806318160ddd146102e4578063183fb413146102ec5780631da24f3e1461030157806323b872dd1461031457600080fd5b806306fdde031461022b578063095ea7b3146102495780630afbcdc91461026c5780630bd7ad3b146102ce575b600080fd5b61023361060e565b604051610240919061303e565b60405180910390f35b61025c61025736600461308d565b6106a0565b6040519015158152602001610240565b6102b961027a3660046130b9565b73ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546036546fffffffffffffffffffffffffffffffff90911691565b60408051928352602083019190915201610240565b6102d6600181565b604051908152602001610240565b6102d66106b6565b6102ff6102fa366004613130565b610795565b005b6102d661030f3660046130b9565b610b52565b61025c610322366004613224565b610b91565b6102d67f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60395460405160ff9091168152602001610240565b6102d6610c11565b61025c61037936600461308d565b610c20565b6102ff61038c36600461308d565b610c64565b6102ff61039f366004613224565b610d31565b6102d66103b23660046130b9565b610ddb565b6103de7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610240565b603954610100900473ffffffffffffffffffffffffffffffffffffffff166103de565b6102336040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6102ff610470366004613265565b610ed6565b6102d66104833660046130b9565b610fcf565b610233610ffa565b61025c61049e36600461308d565b611009565b61025c6104b136600461308d565b61104d565b603c5473ffffffffffffffffffffffffffffffffffffffff166103de565b603d5473ffffffffffffffffffffffffffffffffffffffff166103de565b6102d6611070565b61025c610508366004613287565b61107b565b6102ff61051b366004613224565b611138565b6102ff61052e3660046132cd565b611376565b6102ff610541366004613287565b6116d0565b6102d661055436600461333b565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260356020908152604080832093909416825291909152205490565b6102d661059a3660046130b9565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b6102ff6105f63660046130b9565b6117c2565b6102ff610609366004613224565b6119a0565b60606037805461061d90613374565b80601f016020809104026020016040519081016040528092919081815260200182805461064990613374565b80156106965780601f1061066b57610100808354040283529160200191610696565b820191906000526020600020905b81548152906001019060200180831161067957829003601f168201915b5050505050905090565b60006106ad338484611a52565b50600192915050565b6000806106c260365490565b9050806106d157600091505090565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261078f917f0000000000000000000000000000000000000000000000000000000000000000169063d15e005390602401602060405180830381865afa158015610764573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078891906133c2565b8290611ac0565b91505090565b6001805460ff16806107a65750303b155b806107b2575060005481115b610843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b60015460ff1615801561088057600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f38370000000000000000000000000000000000000000000000000000000000008152509061093d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5061097d88888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b1792505050565b6109bc86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b2a92505050565b603980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8b16179055603c805473ffffffffffffffffffffffffffffffffffffffff808f167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603d80548e8416921691909117905560398054918c16610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055610a79611b3d565b603b819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb19e051f8af41150ccccb3fc2c2d8d15f4a4cf434f32a559ba75fe73d6eea20b8e8d8d8d8d8d8d8d8d604051610b0c99989796959493929190613424565b60405180910390a38015610b4357600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603460205260408120546fffffffffffffffffffffffffffffffff165b92915050565b600080610b9d83611c02565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260356020908152604080832033808552925290912054919250610bfb91879190610bf6906fffffffffffffffffffffffffffffffff8616906134ce565b611a52565b610c06858583611ca8565b506001949350505050565b6000610c1b611cc7565b905090565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106ad918590610bf69086906134e5565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50603d54610d2d9073ffffffffffffffffffffffffffffffffffffffff168383611d00565b5050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091610b8b917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa158015610e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9791906133c2565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260409020546fffffffffffffffffffffffffffffffff165b90611ac0565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610f7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5081610f84575050565b603c54610fca907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff168484611dd3565b505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603a6020526040812054610b8b565b60606038805461061d90613374565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106ad918590610bf69086906134ce565b60008061105983611c02565b9050611066338583611ca8565b5060019392505050565b6000610c1b60365490565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152600090337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5061112f85858585611dd3565b95945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c991906134fd565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015611236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125a919061351a565b6040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250906112c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50603d5460408051808201909152600281527f383500000000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff86811691161415611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50610dd573ffffffffffffffffffffffffffffffffffffffff85168484611d00565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff88166113f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50834211156040518060400160405280600281526020017f37380000000000000000000000000000000000000000000000000000000000008152509061146b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5073ffffffffffffffffffffffffffffffffffffffff87166000908152603a60205260408120549061149b610c11565b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9602082015273ffffffffffffffffffffffffffffffffffffffff808d1692820192909252908a1660608201526080810189905260a0810184905260c0810188905260e0016040516020818303038152906040528051906020012060405160200161155c9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa1580156115e2573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f373900000000000000000000000000000000000000000000000000000000000081525090611688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b506116948260016134e5565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603a60205260409020556116c5898989611a52565b505050505050505050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5061178184848484612014565b73ffffffffffffffffffffffffffffffffffffffff83163014610dd557603d54610dd59073ffffffffffffffffffffffffffffffffffffffff168484611d00565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa15801561182f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185391906134fd565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156118c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e4919061351a565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611952576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50506039805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611a44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b50610fca8383836000612332565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526035602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517611af557600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b8051610d2d906037906020840190612f43565b8051610d2d906038906020840190612f43565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611b686125ae565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60006fffffffffffffffffffffffffffffffff821115611ca4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f3238206269747300000000000000000000000000000000000000000000000000606482015260840161083a565b5090565b610fca8383836fffffffffffffffffffffffffffffffff166001612332565b60007f0000000000000000000000000000000000000000000000000000000000000000461415611cf85750603b5490565b610c1b611b3d565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1611d63573d6000803e3d6000fd5b50611d6d846125b8565b610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e736665720000000000000000000000604482015260640161083a565b600080611de08484612684565b60408051808201909152600281527f3234000000000000000000000000000000000000000000000000000000000000602082015290915081611e4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291611eac918491700100000000000000000000000000000000900416611ac0565b611eb68387611ac0565b611ec091906134ce565b9050611ecb85611c02565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055611f3387611f2e85611c02565b6126c3565b6000611f3f82886134e5565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611fa191815260200190565b60405180910390a3604080518281526020810184905290810187905273ffffffffffffffffffffffffffffffffffffffff808a1691908b16907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35050159695505050505050565b60006120208383612684565b60408051808201909152600281527f323500000000000000000000000000000000000000000000000000000000000060208201529091508161208f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a919061303e565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff80821692916120ec918491700100000000000000000000000000000000900416611ac0565b6120f68386611ac0565b61210091906134ce565b905061210b84611c02565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556121738761216e85611c02565b61283f565b8481111561225257600061218786836134ce565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121e991815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff89169081907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a350612329565b600061225e82876134ce565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122c091815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff80891691908a16907f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f90906060015b60405180910390a3505b50505050505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201819052916000917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa1580156123c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ed91906133c2565b9050600061243382610ed08973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b9050600061247983610ed08973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b9050612487888888866128a3565b8415612554576040517fd5ed393300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015289811660248301528881166044830152606482018890526084820184905260a482018390527f0000000000000000000000000000000000000000000000000000000000000000169063d5ed39339060c401600060405180830381600087803b15801561253b57600080fd5b505af115801561254f573d6000803e3d6000fd5b505050505b73ffffffffffffffffffffffffffffffffffffffff8088169089167f4beccb90f994c31aced7a23b5611020728a23d8ec5cddd1a3e9d97b96fda866661259a8987612684565b60408051918252602082018890520161231f565b6060610c1b61060e565b60006125f8565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156126375760208114612671576126327f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f6125bf565b61267e565b823b612668576126687f475076323a206e6f74206120636f6e747261637400000000000000000000000060146125bf565b6001915061267e565b3d6000803e600051151591505b50919050565b600081156b033b2e3c9fd0803ce8000000600284041904841117156126a857600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b6036546126e26fffffffffffffffffffffffffffffffff8316826134e5565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff16612727838261353c565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff93909316929092179091556039546101009004168015612838576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590526fffffffffffffffffffffffffffffffff841660448301528216906331873e2e90606401600060405180830381600087803b15801561282457600080fd5b505af11580156116c5573d6000803e3d6000fd5b5050505050565b60365461285e6fffffffffffffffffffffffffffffffff8316826134ce565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff166127278382613570565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260408120546fffffffffffffffffffffffffffffffff80821692916128ff918491700100000000000000000000000000000000900416611ac0565b6129098385611ac0565b61291391906134ce565b905060006129558673ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260346020526040812054919250906129b090839070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16611ac0565b6129ba8387611ac0565b6129c491906134ce565b90506129cf85611c02565b73ffffffffffffffffffffffffffffffffffffffff8916600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612a2e85611c02565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612aa08888612a9b612a968a8a612684565b611c02565b612c98565b8215612b4f5760405183815273ffffffffffffffffffffffffffffffffffffffff8916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805184815260208101859052808201879052905173ffffffffffffffffffffffffffffffffffffffff8a169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015612b8b5750600081115b15612c395760405181815273ffffffffffffffffffffffffffffffffffffffff8816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101839052808201879052905173ffffffffffffffffffffffffffffffffffffffff89169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8860405161231f91815260200190565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff16612cda8282613570565b73ffffffffffffffffffffffffffffffffffffffff85811660009081526034602052604080822080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9586161790559186168152205416612d4e838261353c565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff93909316929092179091556039546101009004168015612f3b576036546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018390526fffffffffffffffffffffffffffffffff861660448301528316906331873e2e90606401600060405180830381600087803b158015612e4e57600080fd5b505af1158015612e62573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614612329576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018390526fffffffffffffffffffffffffffffffff851660448301528316906331873e2e90606401600060405180830381600087803b158015612f2157600080fd5b505af1158015612f35573d6000803e3d6000fd5b50505050505b505050505050565b828054612f4f90613374565b90600052602060002090601f016020900481019282612f715760008555612fb7565b82601f10612f8a57805160ff1916838001178555612fb7565b82800160010185558215612fb7579182015b82811115612fb7578251825591602001919060010190612f9c565b50611ca49291505b80821115611ca45760008155600101612fbf565b6000815180845260005b81811015612ff957602081850181015186830182015201612fdd565b8181111561300b576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006130516020830184612fd3565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461307a57600080fd5b50565b803561308881613058565b919050565b600080604083850312156130a057600080fd5b82356130ab81613058565b946020939093013593505050565b6000602082840312156130cb57600080fd5b813561305181613058565b803560ff8116811461308857600080fd5b60008083601f8401126130f957600080fd5b50813567ffffffffffffffff81111561311157600080fd5b60208301915083602082850101111561312957600080fd5b9250929050565b60008060008060008060008060008060006101008c8e03121561315257600080fd5b61315b8c61307d565b9a5061316960208d0161307d565b995061317760408d0161307d565b985061318560608d0161307d565b975061319360808d016130d6565b965067ffffffffffffffff8060a08e013511156131af57600080fd5b6131bf8e60a08f01358f016130e7565b909750955060c08d01358110156131d557600080fd5b6131e58e60c08f01358f016130e7565b909550935060e08d01358110156131fb57600080fd5b5061320c8d60e08e01358e016130e7565b81935080925050509295989b509295989b9093969950565b60008060006060848603121561323957600080fd5b833561324481613058565b9250602084013561325481613058565b929592945050506040919091013590565b6000806040838503121561327857600080fd5b50508035926020909101359150565b6000806000806080858703121561329d57600080fd5b84356132a881613058565b935060208501356132b881613058565b93969395505050506040820135916060013590565b600080600080600080600060e0888a0312156132e857600080fd5b87356132f381613058565b9650602088013561330381613058565b9550604088013594506060880135935061331f608089016130d6565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561334e57600080fd5b823561335981613058565b9150602083013561336981613058565b809150509250929050565b600181811c9082168061338857607f821691505b6020821081141561267e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000602082840312156133d457600080fd5b5051919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808c168352808b1660208401525060ff8916604083015260c0606083015261346760c08301888a6133db565b828103608084015261347a8187896133db565b905082810360a084015261348f8185876133db565b9c9b505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156134e0576134e061349f565b500390565b600082198211156134f8576134f861349f565b500190565b60006020828403121561350f57600080fd5b815161305181613058565b60006020828403121561352c57600080fd5b8151801515811461305157600080fd5b60006fffffffffffffffffffffffffffffffff8083168185168083038211156135675761356761349f565b01949350505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156135995761359961349f565b03939250505056fea2646970667358221220947b353f2b79a7b3a16a5b804ba76e14e887d09283449695dce558b4c816ae9f64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x226 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x78160376 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xB1BF962D GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xD7020D0A GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xE0753986 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE0753986 EQ PUSH2 0x58C JUMPI DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x5E8 JUMPI DUP1 PUSH4 0xF866C319 EQ PUSH2 0x5FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD7020D0A EQ PUSH2 0x533 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB1BF962D EQ PUSH2 0x4F2 JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x4FA JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0x50D JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x520 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA457C2D7 GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x490 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x4A3 JUMPI DUP1 PUSH4 0xAE167335 EQ PUSH2 0x4B6 JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x4D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x78160376 EQ PUSH2 0x426 JUMPI DUP1 PUSH4 0x7DF5BD3B EQ PUSH2 0x462 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x475 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x1BD JUMPI DUP1 PUSH4 0x4EFECAA5 GT PUSH2 0x18C JUMPI DUP1 PUSH4 0x70A08231 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3A4 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x3B7 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x403 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x4EFECAA5 EQ PUSH2 0x37E JUMPI DUP1 PUSH4 0x6FD97676 EQ PUSH2 0x391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x327 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x34E JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x363 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x36B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0x1F9 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2E4 JUMPI DUP1 PUSH4 0x183FB413 EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0x1DA24F3E EQ PUSH2 0x301 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x314 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x249 JUMPI DUP1 PUSH4 0xAFBCDC9 EQ PUSH2 0x26C JUMPI DUP1 PUSH4 0xBD7AD3B EQ PUSH2 0x2CE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x233 PUSH2 0x60E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x240 SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x25C PUSH2 0x257 CALLDATASIZE PUSH1 0x4 PUSH2 0x308D JUMP JUMPDEST PUSH2 0x6A0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2B9 PUSH2 0x27A CALLDATASIZE PUSH1 0x4 PUSH2 0x30B9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x36 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x6B6 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x2FA CALLDATASIZE PUSH1 0x4 PUSH2 0x3130 JUMP JUMPDEST PUSH2 0x795 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2D6 PUSH2 0x30F CALLDATASIZE PUSH1 0x4 PUSH2 0x30B9 JUMP JUMPDEST PUSH2 0xB52 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x322 CALLDATASIZE PUSH1 0x4 PUSH2 0x3224 JUMP JUMPDEST PUSH2 0xB91 JUMP JUMPDEST PUSH2 0x2D6 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0xC11 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x379 CALLDATASIZE PUSH1 0x4 PUSH2 0x308D JUMP JUMPDEST PUSH2 0xC20 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x38C CALLDATASIZE PUSH1 0x4 PUSH2 0x308D JUMP JUMPDEST PUSH2 0xC64 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x39F CALLDATASIZE PUSH1 0x4 PUSH2 0x3224 JUMP JUMPDEST PUSH2 0xD31 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x3B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x30B9 JUMP JUMPDEST PUSH2 0xDDB JUMP JUMPDEST PUSH2 0x3DE PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x240 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x233 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x470 CALLDATASIZE PUSH1 0x4 PUSH2 0x3265 JUMP JUMPDEST PUSH2 0xED6 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x483 CALLDATASIZE PUSH1 0x4 PUSH2 0x30B9 JUMP JUMPDEST PUSH2 0xFCF JUMP JUMPDEST PUSH2 0x233 PUSH2 0xFFA JUMP JUMPDEST PUSH2 0x25C PUSH2 0x49E CALLDATASIZE PUSH1 0x4 PUSH2 0x308D JUMP JUMPDEST PUSH2 0x1009 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x4B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x308D JUMP JUMPDEST PUSH2 0x104D JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3DE JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x1070 JUMP JUMPDEST PUSH2 0x25C PUSH2 0x508 CALLDATASIZE PUSH1 0x4 PUSH2 0x3287 JUMP JUMPDEST PUSH2 0x107B JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x51B CALLDATASIZE PUSH1 0x4 PUSH2 0x3224 JUMP JUMPDEST PUSH2 0x1138 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x52E CALLDATASIZE PUSH1 0x4 PUSH2 0x32CD JUMP JUMPDEST PUSH2 0x1376 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x541 CALLDATASIZE PUSH1 0x4 PUSH2 0x3287 JUMP JUMPDEST PUSH2 0x16D0 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x554 CALLDATASIZE PUSH1 0x4 PUSH2 0x333B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2D6 PUSH2 0x59A CALLDATASIZE PUSH1 0x4 PUSH2 0x30B9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x5F6 CALLDATASIZE PUSH1 0x4 PUSH2 0x30B9 JUMP JUMPDEST PUSH2 0x17C2 JUMP JUMPDEST PUSH2 0x2FF PUSH2 0x609 CALLDATASIZE PUSH1 0x4 PUSH2 0x3224 JUMP JUMPDEST PUSH2 0x19A0 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0x61D SWAP1 PUSH2 0x3374 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x649 SWAP1 PUSH2 0x3374 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x696 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x66B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x696 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 0x679 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6AD CALLER DUP5 DUP5 PUSH2 0x1A52 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6C2 PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x6D1 JUMPI PUSH1 0x0 SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x78F SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x764 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x788 SWAP2 SWAP1 PUSH2 0x33C2 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1AC0 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x7A6 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x7B2 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x843 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x880 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x93D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH2 0x97D DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1B17 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x9BC DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1B2A SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x39 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0xFF DUP12 AND OR SWAP1 SSTORE PUSH1 0x3C DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP16 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x3D DUP1 SLOAD DUP15 DUP5 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x39 DUP1 SLOAD SWAP2 DUP13 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0xA79 PUSH2 0x1B3D JUMP JUMPDEST PUSH1 0x3B DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xB19E051F8AF41150CCCCB3FC2C2D8D15F4A4CF434F32A559BA75FE73D6EEA20B DUP15 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 PUSH1 0x40 MLOAD PUSH2 0xB0C SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3424 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0xB43 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB9D DUP4 PUSH2 0x1C02 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0xBFB SWAP2 DUP8 SWAP2 SWAP1 PUSH2 0xBF6 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 PUSH2 0x34CE JUMP JUMPDEST PUSH2 0x1A52 JUMP JUMPDEST PUSH2 0xC06 DUP6 DUP6 DUP4 PUSH2 0x1CA8 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1B PUSH2 0x1CC7 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 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 0x6AD SWAP2 DUP6 SWAP1 PUSH2 0xBF6 SWAP1 DUP7 SWAP1 PUSH2 0x34E5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xD08 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH2 0xD2D SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH2 0x1D00 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xDD5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH2 0xB8B SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE73 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE97 SWAP2 SWAP1 PUSH2 0x33C2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 PUSH2 0x1AC0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xF7A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP DUP2 PUSH2 0xF84 JUMPI POP POP JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH2 0xFCA SWAP1 PUSH32 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1DD3 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xB8B JUMP JUMPDEST PUSH1 0x60 PUSH1 0x38 DUP1 SLOAD PUSH2 0x61D SWAP1 PUSH2 0x3374 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 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 0x6AD SWAP2 DUP6 SWAP1 PUSH2 0xBF6 SWAP1 DUP7 SWAP1 PUSH2 0x34CE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1059 DUP4 PUSH2 0x1C02 JUMP JUMPDEST SWAP1 POP PUSH2 0x1066 CALLER DUP6 DUP4 PUSH2 0x1CA8 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1B PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1122 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH2 0x112F DUP6 DUP6 DUP6 DUP6 PUSH2 0x1DD3 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11C9 SWAP2 SWAP1 PUSH2 0x34FD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1236 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x125A SWAP2 SWAP1 PUSH2 0x351A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x12C8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3835000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x1354 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH2 0xDD5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 DUP5 PUSH2 0x1D00 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x13F8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x146B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x149B PUSH2 0xC11 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP11 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x155C SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15E2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1688 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH2 0x1694 DUP3 PUSH1 0x1 PUSH2 0x34E5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x16C5 DUP10 DUP10 DUP10 PUSH2 0x1A52 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1774 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH2 0x1781 DUP5 DUP5 DUP5 DUP5 PUSH2 0x2014 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ADDRESS EQ PUSH2 0xDD5 JUMPI PUSH1 0x3D SLOAD PUSH2 0xDD5 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1D00 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x182F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1853 SWAP2 SWAP1 PUSH2 0x34FD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18C0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18E4 SWAP2 SWAP1 PUSH2 0x351A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1952 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP POP PUSH1 0x39 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1A44 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH2 0xFCA DUP4 DUP4 DUP4 PUSH1 0x0 PUSH2 0x2332 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1AF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD2D SWAP1 PUSH1 0x37 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2F43 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD2D SWAP1 PUSH1 0x38 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2F43 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x1B68 PUSH2 0x25AE JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1CA4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x83A JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0xFCA DUP4 DUP4 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH2 0x2332 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0x1CF8 JUMPI POP PUSH1 0x3B SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xC1B PUSH2 0x1B3D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x1D63 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1D6D DUP5 PUSH2 0x25B8 JUMP JUMPDEST PUSH2 0xDD5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x83A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1DE0 DUP5 DUP5 PUSH2 0x2684 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x1E4F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x1EAC SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x1EB6 DUP4 DUP8 PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x1EC0 SWAP2 SWAP1 PUSH2 0x34CE JUMP JUMPDEST SWAP1 POP PUSH2 0x1ECB DUP6 PUSH2 0x1C02 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1F33 DUP8 PUSH2 0x1F2E DUP6 PUSH2 0x1C02 JUMP JUMPDEST PUSH2 0x26C3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F3F DUP3 DUP9 PUSH2 0x34E5 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1FA1 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 AND SWAP2 SWAP1 DUP12 AND SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP ISZERO SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2020 DUP4 DUP4 PUSH2 0x2684 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x208F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x83A SWAP2 SWAP1 PUSH2 0x303E JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x20EC SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x20F6 DUP4 DUP7 PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x2100 SWAP2 SWAP1 PUSH2 0x34CE JUMP JUMPDEST SWAP1 POP PUSH2 0x210B DUP5 PUSH2 0x1C02 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2173 DUP8 PUSH2 0x216E DUP6 PUSH2 0x1C02 JUMP JUMPDEST PUSH2 0x283F JUMP JUMPDEST DUP5 DUP2 GT ISZERO PUSH2 0x2252 JUMPI PUSH1 0x0 PUSH2 0x2187 DUP7 DUP4 PUSH2 0x34CE JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x21E9 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 DUP2 SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x2329 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x225E DUP3 DUP8 PUSH2 0x34CE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x22C0 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP2 SWAP1 DUP11 AND SWAP1 PUSH32 0x4CF25BC1D991C17529C25213D3CC0CDA295EEAAD5F13F361969B12EA48015F90 SWAP1 PUSH1 0x60 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23C9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x23ED SWAP2 SWAP1 PUSH2 0x33C2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2433 DUP3 PUSH2 0xED0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2479 DUP4 PUSH2 0xED0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x2487 DUP9 DUP9 DUP9 DUP7 PUSH2 0x28A3 JUMP JUMPDEST DUP5 ISZERO PUSH2 0x2554 JUMPI PUSH1 0x40 MLOAD PUSH32 0xD5ED393300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP10 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP9 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xD5ED3933 SWAP1 PUSH1 0xC4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x253B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x254F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND SWAP1 DUP10 AND PUSH32 0x4BECCB90F994C31ACED7A23B5611020728A23D8EC5CDDD1A3E9D97B96FDA8666 PUSH2 0x259A DUP10 DUP8 PUSH2 0x2684 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP9 SWAP1 MSTORE ADD PUSH2 0x231F JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC1B PUSH2 0x60E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25F8 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x2637 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x2671 JUMPI PUSH2 0x2632 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x25BF JUMP JUMPDEST PUSH2 0x267E JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x2668 JUMPI PUSH2 0x2668 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x25BF JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x267E JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x26A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x26E2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x34E5 JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2727 DUP4 DUP3 PUSH2 0x353C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x2838 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2824 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16C5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x285E PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x34CE JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2727 DUP4 DUP3 PUSH2 0x3570 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x28FF SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x2909 DUP4 DUP6 PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x2913 SWAP2 SWAP1 PUSH2 0x34CE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2955 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x29B0 SWAP1 DUP4 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x29BA DUP4 DUP8 PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x29C4 SWAP2 SWAP1 PUSH2 0x34CE JUMP JUMPDEST SWAP1 POP PUSH2 0x29CF DUP6 PUSH2 0x1C02 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2A2E DUP6 PUSH2 0x1C02 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2AA0 DUP9 DUP9 PUSH2 0x2A9B PUSH2 0x2A96 DUP11 DUP11 PUSH2 0x2684 JUMP JUMPDEST PUSH2 0x1C02 JUMP JUMPDEST PUSH2 0x2C98 JUMP JUMPDEST DUP3 ISZERO PUSH2 0x2B4F JUMPI PUSH1 0x40 MLOAD DUP4 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x2B8B JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST ISZERO PUSH2 0x2C39 JUMPI PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP9 PUSH1 0x40 MLOAD PUSH2 0x231F SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2CDA DUP3 DUP3 PUSH2 0x3570 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 AND OR SWAP1 SSTORE SWAP2 DUP7 AND DUP2 MSTORE KECCAK256 SLOAD AND PUSH2 0x2D4E DUP4 DUP3 PUSH2 0x353C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x2F3B JUMPI PUSH1 0x36 SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2E4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2E62 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x2329 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2F35 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x2F4F SWAP1 PUSH2 0x3374 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x2F71 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x2FB7 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x2F8A JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x2FB7 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x2FB7 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x2FB7 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2F9C JUMP JUMPDEST POP PUSH2 0x1CA4 SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1CA4 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2FBF JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2FF9 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x2FDD JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x300B JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3051 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2FD3 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x307A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3088 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x30A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x30AB DUP2 PUSH2 0x3058 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 0x30CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3051 DUP2 PUSH2 0x3058 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3088 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x30F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3111 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x3129 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x100 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x3152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x315B DUP13 PUSH2 0x307D JUMP JUMPDEST SWAP11 POP PUSH2 0x3169 PUSH1 0x20 DUP14 ADD PUSH2 0x307D JUMP JUMPDEST SWAP10 POP PUSH2 0x3177 PUSH1 0x40 DUP14 ADD PUSH2 0x307D JUMP JUMPDEST SWAP9 POP PUSH2 0x3185 PUSH1 0x60 DUP14 ADD PUSH2 0x307D JUMP JUMPDEST SWAP8 POP PUSH2 0x3193 PUSH1 0x80 DUP14 ADD PUSH2 0x30D6 JUMP JUMPDEST SWAP7 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x31AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31BF DUP15 PUSH1 0xA0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x30E7 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0xC0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x31D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31E5 DUP15 PUSH1 0xC0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x30E7 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP PUSH1 0xE0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x31FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x320C DUP14 PUSH1 0xE0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x30E7 JUMP JUMPDEST DUP2 SWAP4 POP DUP1 SWAP3 POP POP POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3239 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3244 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x3254 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x329D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x32A8 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x32B8 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x32E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x32F3 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x3303 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x331F PUSH1 0x80 DUP10 ADD PUSH2 0x30D6 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x334E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3359 DUP2 PUSH2 0x3058 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3369 DUP2 PUSH2 0x3058 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x3388 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x267E JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x33D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 ADD ADD MSTORE PUSH1 0x0 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP5 ADD ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND DUP4 MSTORE DUP1 DUP12 AND PUSH1 0x20 DUP5 ADD MSTORE POP PUSH1 0xFF DUP10 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xC0 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x3467 PUSH1 0xC0 DUP4 ADD DUP9 DUP11 PUSH2 0x33DB JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x347A DUP2 DUP8 DUP10 PUSH2 0x33DB JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x348F DUP2 DUP6 DUP8 PUSH2 0x33DB JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x34E0 JUMPI PUSH2 0x34E0 PUSH2 0x349F JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x34F8 JUMPI PUSH2 0x34F8 PUSH2 0x349F JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x350F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x3051 DUP2 PUSH2 0x3058 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x352C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3051 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x3567 JUMPI PUSH2 0x3567 PUSH2 0x349F JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x3599 JUMPI PUSH2 0x3599 PUSH2 0x349F JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP5 PUSH28 0x353F2B79A7B3A16A5B804BA76E14E887D09283449695DCE558B4C816 0xAE SWAP16 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"1116:7178:97:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84:103;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4534:158;;;;;;:::i;:::-;;:::i;:::-;;;1558:14:201;;1551:22;1533:41;;1521:2;1506:18;4534:158:103;1393:187:201;1386:173:105;;;;;;:::i;:::-;3518:19:103;;1479:7:105;3518:19:103;;;:10;:19;;;;;:27;3376:12;;3518:27;;;;;1386:173:105;;;;;2011:25:201;;;2067:2;2052:18;;2045:34;;;;1984:18;1386:173:105;1837:248:201;1450:45:97;;1492:3;1450:45;;;;;2236:25:201;;;2224:2;2209:18;1450:45:97;2090:177:201;4276:307:97;;;:::i;1990:850::-;;;;;;:::i;:::-;;:::i;:::-;;1225:119:105;;;;;;:::i;:::-;;:::i;4721:327:103:-;;;;;;:::i;:::-;;:::i;1304:141:97:-;;1350:95;1304:141;;3178:86:103;3250:9;;3178:86;;3250:9;;;;4990:36:201;;4978:2;4963:18;3178:86:103;4848:184:201;7503:130:97;;;:::i;5296:204:103:-;;;;;;:::i;:::-;;:::i;4888:161:97:-;;;;;;:::i;:::-;;:::i;5079:163::-;;;;;;:::i;:::-;;:::i;4035:212::-;;;;;;:::i;:::-;;:::i;2408:27:103:-;;;;;;;;5227:42:201;5215:55;;;5197:74;;5185:2;5170:18;2408:27:103;5037:240:201;3691:132:103;3797:21;;;;;;;3691:132;;192:50:102;;232:10;;;;;;;;;;;;;;;;;192:50;;3484:196:97;;;;;;:::i;:::-;;:::i;7782:128::-;;;;;;:::i;:::-;;:::i;3051:90:103:-;;;:::i;5758:226::-;;;;;;:::i;:::-;;:::i;4106:213::-;;;;;;:::i;:::-;;:::i;4613:104:97:-;4703:9;;;;4613:104;;4747:111;4837:16;;;;4747:111;;1601:113:105;;;:::i;2870:215:97:-;;;;;;:::i;:::-;;:::i;8069:223::-;;;;;;:::i;:::-;;:::i;5272:755::-;;;;;;:::i;:::-;;:::i;3115:339::-;;;;;;:::i;:::-;;:::i;4348:157:103:-;;;;;;:::i;:::-;4473:18;;;;4451:7;4473:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4348:157;1756:138:105;;;;;;:::i;:::-;1858:16;;1836:7;1858:16;;;:10;:16;;;;;:31;;;;;;;1756:138;3938:139:103;;;;;;:::i;:::-;;:::i;3710:296:97:-;;;;;;:::i;:::-;;:::i;2930:84:103:-;2976:13;3004:5;2997:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84;:::o;4534:158::-;4619:4;4631:39;678:10:4;4654:7:103;4663:6;4631:8;:39::i;:::-;-1:-1:-1;4683:4:103;4534:158;;;;:::o;4276:307:97:-;4364:7;4379:27;4409:19;3376:12:103;;;3293:100;4409:19:97;4379:49;-1:-1:-1;4439:24:97;4435:53;;4480:1;4473:8;;;4276:307;:::o;4435:53::-;4560:16;;4528:49;;;;;:31;4560:16;;;4528:49;;;5197:74:201;4501:77:97;;4528:4;:31;;;;5170:18:201;;4528:49:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4501:19;;:26;:77::i;:::-;4494:84;;;4276:307;:::o;1990:850::-;1492:3;1217:12:71;;;;;:31;;-1:-1:-1;2436:9:71;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;9035:2:201;1202:146:71;;;9017:21:201;9074:2;9054:18;;;9047:30;9113:34;9093:18;;;9086:62;9184:16;9164:18;;;9157:44;9218:19;;1202:146:71;;;;;;;;;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;2334:4:97::1;2314:24;;:16;:24;;;2340:34;;;;;;;;;;;;;;;;::::0;2306:69:::1;;;;;;;;;;;;;;:::i;:::-;;2381:20;2390:10;;2381:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;2381:8:97::1;::::0;-1:-1:-1;;;2381:20:97:i:1;:::-;2407:24;2418:12;;2407:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;2407:10:97::1;::::0;-1:-1:-1;;;2407:24:97:i:1;:::-;7979:9:103::0;:23;;;;;;;;;;2472:9:97::1;:20:::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;;;2498:16:::1;:34:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;2538:21:::1;:44:::0;;;;::::1;2472:20;2538:44;::::0;;;::::1;::::0;;;::::1;::::0;;2608:27:::1;:25;:27::i;:::-;2589:16;:46;;;;2697:4;2647:188;;2666:15;2647:188;;;2710:8;2734:20;2763:14;2785:10;;2803:12;;2823:6;;2647:188;;;;;;;;;;;;;;:::i;:::-;;;;;;;;1510:14:71::0;1506:55;;;1534:12;:20;;;;;;1506:55;1158:407;;1990:850:97;;;;;;;;;;;:::o;1225:119:105:-;3518:19:103;;;1296:7:105;3518:19:103;;;:10;:19;;;;;:27;;;1318:21:105;1311:28;1225:119;-1:-1:-1;;1225:119:105:o;4721:327:103:-;4845:4;4857:18;4878;:6;:16;:18::i;:::-;4933:19;;;;;;;:11;:19;;;;;;;;678:10:4;4933:33:103;;;;;;;;;4857:39;;-1:-1:-1;4902:78:103;;4911:6;;678:10:4;4933:46:103;;;;;;;:::i;:::-;4902:8;:78::i;:::-;4986:40;4996:6;5004:9;5015:10;4986:9;:40::i;:::-;-1:-1:-1;5039:4:103;;4721:327;-1:-1:-1;;;;4721:327:103:o;7503:130:97:-;7582:7;7604:24;:22;:24::i;:::-;7597:31;;7503:130;:::o;5296:204:103:-;678:10:4;5386:4:103;5430:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;5386:4;;5398:80;;5421:7;;5430:47;;5467:10;;5430:47;:::i;4888:161:97:-;1519:26:103;;;;;;;;;;;;;;;;;678:10:4;1512:4:103;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4998:16:97::1;::::0;4991:53:::1;::::0;4998:16:::1;;5029:6:::0;5037;4991:37:::1;:53::i;:::-;4888:161:::0;;:::o;5079:163::-;1519:26:103;;;;;;;;;;;;;;;;;678:10:4;1512:4:103;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;5079:163:97;;;:::o;4035:212::-;4224:16;;4192:49;;;;;:31;4224:16;;;4192:49;;;5197:74:201;4141:7:97;;4163:79;;4192:4;:31;;;;;;5170:18:201;;4192:49:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3518:19:103;;;3496:7;3518:19;;;:10;:19;;;;;:27;;;4163:21:97;:28;;:79::i;3484:196::-;1519:26:103;;;;;;;;;;;;;;;;;678:10:4;1512:4:103;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3584:11:97;3580:38:::1;;4888:161:::0;;:::o;3580:38::-:1;3650:9;::::0;3623:52:::1;::::0;3643:4:::1;::::0;3650:9:::1;;3661:6:::0;3669:5;3623:11:::1;:52::i;:::-;;3484:196:::0;;:::o;7782:128::-;1342:14:102;;;7864:7:97;1342:14:102;;;:7;:14;;;;;;7886:19:97;1260:101:102;3051:90:103;3101:13;3129:7;3122:14;;;;;:::i;5758:226::-;678:10:4;5865:4:103;5909:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;5865:4;;5877:85;;5900:7;;5909:52;;5946:15;;5909:52;:::i;4106:213::-;4194:4;4206:18;4227;:6;:16;:18::i;:::-;4206:39;-1:-1:-1;4251:46:103;678:10:4;4275:9:103;4286:10;4251:9;:46::i;:::-;-1:-1:-1;4310:4:103;;4106:213;-1:-1:-1;;;4106:213:103:o;1601:113:105:-;1668:7;1690:19;3376:12:103;;;3293:100;2870:215:97;1519:26:103;;;;;;;;;;;;;;;;;3015:4:97;;678:10:4;1512:4:103;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3034:46:97::1;3046:6;3054:10;3066:6;3074:5;3034:11;:46::i;:::-;3027:53:::0;2870:215;-1:-1:-1;;;;;2870:215:97:o;8069:223::-;1211:22:103;1248:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1297;;;;;1320:10;1297:34;;;5197:74:201;1211:72:103;;-1:-1:-1;1297:22:103;;;;;;5170:18:201;;1297:34:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1333:28;;;;;;;;;;;;;;;;;1289:73;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;8189:16:97::1;::::0;8207:35:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;;8189:16:::1;8180:25:::0;;::::1;8189:16:::0;::::1;8180:25;;8172:71;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;8249:38:97::1;:26;::::0;::::1;8276:2:::0;8280:6;8249:26:::1;:38::i;5272:755::-:0;5469:29;;;;;;;;;;;;;;;;;5448:19;;;5440:59;;;;;;;;;;;;;:::i;:::-;;5563:8;5544:15;:27;;5573:25;;;;;;;;;;;;;;;;;5536:63;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5633:14:97;;;5605:25;5633:14;;;:7;:14;;;;;;;5733:18;:16;:18::i;:::-;5771:79;;;1350:95;5771:79;;;11789:25:201;11833:42;11911:15;;;11891:18;;;11884:43;;;;11963:15;;;11943:18;;;11936:43;11995:18;;;11988:34;;;12038:19;;;12031:35;;;12082:19;;;12075:35;;;11761:19;;5771:79:97;;;;;;;;;;;;5761:90;;;;;;5687:172;;;;;;;;12391:66:201;12379:79;;12483:1;12474:11;;12467:27;;;;12519:2;12510:12;;12503:28;12556:2;12547:12;;12121:444;5687:172:97;;;;;;;;;;;;;;5670:195;;5687:172;5670:195;;;;5888:26;;;;;;;;;12797:25:201;;;12870:4;12858:17;;12838:18;;;12831:45;;;;12892:18;;;12885:34;;;12935:18;;;12928:34;;;5670:195:97;-1:-1:-1;5888:26:97;;12769:19:201;;5888:26:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5879:35;;:5;:35;;;5916:24;;;;;;;;;;;;;;;;;5871:70;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5964:21:97;:17;5984:1;5964:21;:::i;:::-;5947:14;;;;;;;:7;:14;;;;;:38;5991:31;5955:5;6007:7;6016:5;5991:8;:31::i;:::-;5434:593;;5272:755;;;;;;;:::o;3115:339::-;1519:26:103;;;;;;;;;;;;;;;;;678:10:4;1512:4:103;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3265:54:97::1;3277:4;3283:20;3305:6;3313:5;3265:11;:54::i;:::-;3329:37;::::0;::::1;3361:4;3329:37;3325:125;;3383:16;::::0;3376:67:::1;::::0;3383:16:::1;;3414:20:::0;3436:6;3376:37:::1;:67::i;3938:139:103:-:0;1211:22;1248:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1297;;;;;1320:10;1297:34;;;5197:74:201;1211:72:103;;-1:-1:-1;1297:22:103;;;;;;5170:18:201;;1297:34:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1333:28;;;;;;;;;;;;;;;;;1289:73;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;4038:21:103::1;:34:::0;;::::1;::::0;;::::1;;;::::0;;;::::1;::::0;;;::::1;::::0;;3938:139::o;3710:296:97:-;1519:26:103;;;;;;;;;;;;;;;;;678:10:4;1512:4:103;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3968:33:97::1;3978:4;3984:2;3988:5;3995;3968:9;:33::i;7235:173:103:-:0;7324:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7371:32;;2236:25:201;;;7371:32:103;;2209:18:201;7371:32:103;;;;;;;7235:173;;;:::o;2253:319:90:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:90;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;7513:76:103:-;7569:15;;;;:5;;:15;;;;;:::i;7701:84::-;7761:19;;;;:7;;:19;;;;;:::i;1475:298:102:-;1535:7;292:95;1645:15;:13;:15::i;:::-;1629:33;;;;;;;232:10;;;;;;;;;;;;;;;;1582:178;;;;;13232:25:201;;;;13273:18;;;13266:34;;;;1674:26:102;13316:18:201;;;13309:34;1712:13:102;13359:18:201;;;13352:34;1745:4:102;13402:19:201;;;13395:84;13204:19;;1582:178:102;;;;;;;;;;;;1563:205;;;;;;1550:218;;1475:298;:::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;13692:2:201;1635:78:12;;;13674:21:201;13731:2;13711:18;;;13704:30;13770:34;13750:18;;;13743:62;13841:9;13821:18;;;13814:37;13868:19;;1635:78:12;13490:403:201;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;7213:131:97:-;7306:33;7316:4;7322:2;7326:6;7306:33;;7334:4;7306:9;:33::i;867:185:102:-;924:7;960:8;943:13;:25;939:69;;;-1:-1:-1;985:16:102;;;867:185::o;939:69::-;1020:27;:25;:27::i;441:657:1:-;668:4;662:11;538:23;680:36;;;765:42;757:51;;753:1;730:25;;723:86;846:2;823:26;;816:41;;;538:23;519:16;;916:2;662:11;519:16;887:5;880;875:50;865:154;;958:16;955:1;952;937:38;994:16;991:1;984:27;865:154;;1039:28;1061:5;1039:21;:28::i;:::-;1031:62;;;;;;;14100:2:201;1031:62:1;;;14082:21:201;14139:2;14119:18;;;14112:30;14178:23;14158:18;;;14151:51;14219:18;;1031:62:1;13898:345:201;2295:763:105;2421:4;;2456:20;:6;2470:5;2456:13;:20::i;:::-;2509:26;;;;;;;;;;;;;;;;;2433:43;;-1:-1:-1;2490:17:105;2482:54;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3518:19:103;;;2543:21:105;3518:19:103;;;:10;:19;;;;;:27;;;;;;2543:21:105;2662:59;;3518:27:103;;2683:37:105;;;;2662:20;:59::i;:::-;2626:27;:13;2647:5;2626:20;:27::i;:::-;:95;;;;:::i;:::-;2600:121;;2768:17;:5;:15;:17::i;:::-;2728:22;;;;;;;:10;:22;;;;;:57;;;;;;;;;;;;;;;;2792:43;2739:10;2810:24;:12;:22;:24::i;:::-;2792:5;:43::i;:::-;2842:20;2865:24;2874:15;2865:6;:24;:::i;:::-;2842:47;;2921:10;2900:46;;2917:1;2900:46;;;2933:12;2900:46;;;;2236:25:201;;2224:2;2209:18;;2090:177;2900:46:105;;;;;;;;2957:62;;;14450:25:201;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;2957:62:105;;;;;;;;;;;14438:2:201;14423:18;2957:62:105;;;;;;;-1:-1:-1;;3034:18:105;;2295:763;-1:-1:-1;;;;;;2295:763:105:o;3512:888::-;3609:20;3632;:6;3646:5;3632:13;:20::i;:::-;3685:26;;;;;;;;;;;;;;;;;3609:43;;-1:-1:-1;3666:17:105;3658:54;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3518:19:103;;;3719:21:105;3518:19:103;;;:10;:19;;;;;:27;;;;;;3719:21:105;3832:53;;3518:27:103;;3853:31:105;;;;3832:20;:53::i;:::-;3796:27;:13;3817:5;3796:20;:27::i;:::-;:89;;;;:::i;:::-;3770:115;;3926:17;:5;:15;:17::i;:::-;3892:16;;;;;;;:10;:16;;;;;:51;;;;;;;;;;;;;;;;3950:37;3903:4;3962:24;:12;:22;:24::i;:::-;3950:5;:37::i;:::-;4016:6;3998:15;:24;3994:402;;;4032:20;4055:24;4073:6;4055:15;:24;:::i;:::-;4032:47;;4113:4;4092:40;;4109:1;4092:40;;;4119:12;4092:40;;;;2236:25:201;;2224:2;2209:18;;2090:177;4092:40:105;;;;;;;;4145:54;;;14450:25:201;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;4145:54:105;;;;;;;;14438:2:201;14423:18;4145:54:105;;;;;;;4024:182;3994:402;;;4220:20;4243:24;4252:15;4243:6;:24;:::i;:::-;4220:47;;4303:1;4280:40;;4289:4;4280:40;;;4307:12;4280:40;;;;2236:25:201;;2224:2;2209:18;;2090:177;4280:40:105;;;;;;;;4333:56;;;14450:25:201;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;4333:56:105;;;;;;;;;;;14438:2:201;14423:18;4333:56:105;;;;;;;;4212:184;3994:402;3603:797;;;3512:888;;;;:::o;6387:592:97:-;6512:16;;6551:48;;;;;6512:16;;;;6551:48;;;5197:74:201;;;6512:16:97;6486:23;;6551:4;:31;;;;;;5170:18:201;;6551:48:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6535:64;;6606:25;6634:35;6663:5;6634:21;6650:4;3518:19:103;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;6634:35:97;6606:63;;6675:23;6701:33;6728:5;6701:19;6717:2;3518:19:103;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;6701:33:97;6675:59;;6741:40;6757:4;6763:2;6767:6;6775:5;6741:15;:40::i;:::-;6792:8;6788:121;;;6810:92;;;;;:21;14938:15:201;;;6810:92:97;;;14920:34:201;14990:15;;;14970:18;;;14963:43;15042:15;;;15022:18;;;15015:43;15074:18;;;15067:34;;;15117:19;;;15110:35;;;15161:19;;;15154:35;;;6810:4:97;:21;;;;14831:19:201;;6810:92:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6788:121;6920:54;;;;;;;;6946:20;:6;6960:5;6946:13;:20::i;:::-;6920:54;;;2011:25:201;;;2067:2;2052:18;;2045:34;;;1984:18;6920:54:97;1837:248:201;7943:96:97;8000:13;8028:6;:4;:6::i;2198:2524:1:-;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;4611:1;4605:8;4598:16;4591:24;4580:35;;3538:1174;;2198:2524;;;:::o;2840:322:90:-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:90;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;1069:519:104:-;1165:12;;1198:23;;;;1165:12;1198:23;:::i;:::-;1183:12;:38;1256:19;;;1228:25;1256:19;;;:10;:19;;;;;:27;;;1319:26;1339:6;1256:27;1319:26;:::i;:::-;1289:19;;;;;;;;:10;:19;;;;;:56;;;;;;;;;;;;;;;;1406:21;;1289:56;1406:21;;;1437:48;;1433:151;;1495:82;;;;;:38;15678:55:201;;;1495:82:104;;;15660:74:201;15750:18;;;15743:34;;;15825;15813:47;;15793:18;;;15786:75;1495:38:104;;;;;15633:18:201;;1495:82:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1433:151;1134:454;;;1069:519;;:::o;1781:520::-;1877:12;;1910:23;;;;1877:12;1910:23;:::i;:::-;1895:12;:38;1968:19;;;1940:25;1968:19;;;:10;:19;;;;;:27;;;2031:26;2051:6;1968:27;2031:26;:::i;4767:1203:105:-;3518:19:103;;;4867:27:105;3518:19:103;;;:10;:19;;;;;:27;;;;;;4867::105;5000:61;;3518:27:103;;5027:33:105;;;;5000:26;:61::i;:::-;4958:33;:19;4985:5;4958:26;:33::i;:::-;:103;;;;:::i;:::-;4926:135;;5068:30;5101:26;5117:9;3518:19:103;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;5101:26:105;5243:21;;;5133:32;5243:21;;;:10;:21;;;;;:36;5068:59;;-1:-1:-1;5133:32:105;5213:67;;5068:59;;5243:36;;;;;5213:29;:67::i;:::-;5168:36;:22;5198:5;5168:29;:36::i;:::-;:112;;;;:::i;:::-;5133:147;;5323:17;:5;:15;:17::i;:::-;5287:18;;;;;;;:10;:18;;;;;:53;;;;;;;;;;;;;;;;5385:17;:5;:15;:17::i;:::-;5346:21;;;;;;;:10;:21;;;;;:56;;;;;;;;;;;;;;;;5409:68;5425:6;5357:9;5444:32;:20;:6;5458:5;5444:13;:20::i;:::-;:30;:32::i;:::-;5409:15;:68::i;:::-;5488:25;;5484:194;;5528:51;;2236:25:201;;;5528:51:105;;;;5545:1;;5528:51;;2224:2:201;2209:18;5528:51:105;;;;;;;5592:79;;;14450:25:201;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;5592:79:105;;;;;;678:10:4;;5592:79:105;;;;;14438:2:201;5592:79:105;;;5484:194;5698:9;5688:19;;:6;:19;;;;:51;;;;;5738:1;5711:24;:28;5688:51;5684:235;;;5754:57;;2236:25:201;;;5754:57:105;;;;5771:1;;5754:57;;2224:2:201;2209:18;5754:57:105;;;;;;;5824:88;;;14450:25:201;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;5824:88:105;;;;;;678:10:4;;5824:88:105;;;;;14438:2:201;5824:88:105;;;5684:235;5947:9;5930:35;;5939:6;5930:35;;;5958:6;5930:35;;;;2236:25:201;;2224:2;2209:18;;2090:177;6215:772:103;6335:18;;;6308:24;6335:18;;;:10;:18;;;;;:26;;;6396:25;6415:6;6335:26;6396:25;:::i;:::-;6367:18;;;;;;;;:10;:18;;;;;;:54;;;;;;;;;;;6457:21;;;;;;:29;;6524:28;6546:6;6457:29;6524:28;:::i;:::-;6492:21;;;;;;;;:10;:21;;;;;:60;;;;;;;;;;;;;;;;6613:21;;6492:60;6613:21;;;6644:48;;6640:343;;6731:12;;6751:84;;;;;:38;15678:55:201;;;6751:84:103;;;15660:74:201;15750:18;;;15743:34;;;15825;15813:47;;15793:18;;;15786:75;6751:38:103;;;;;15633:18:201;;6751:84:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6857:9;6847:19;;:6;:19;;;6843:134;;6878:90;;;;;:38;15678:55:201;;;6878:90:103;;;15660:74:201;15750:18;;;15743:34;;;15825;15813:47;;15793:18;;;15786:75;6878:38:103;;;;;15633:18:201;;6878:90:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6694:289;6640:343;6302:685;;;6215:772;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:531:201;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;336:6;333:1;330:13;327:87;;;402:1;395:4;386:6;381:3;377:16;373:27;366:38;327:87;-1:-1:-1;459:2:201;447:15;464:66;443:88;434:98;;;;534:4;430:109;;14:531;-1:-1:-1;;14:531:201:o;550:220::-;699:2;688:9;681:21;662:4;719:45;760:2;749:9;745:18;737:6;719:45;:::i;:::-;711:53;550:220;-1:-1:-1;;;550:220:201:o;775:154::-;861:42;854:5;850:54;843:5;840:65;830:93;;919:1;916;909:12;830:93;775:154;:::o;934:134::-;1002:20;;1031:31;1002:20;1031:31;:::i;:::-;934:134;;;:::o;1073:315::-;1141:6;1149;1202:2;1190:9;1181:7;1177:23;1173:32;1170:52;;;1218:1;1215;1208:12;1170:52;1257:9;1244:23;1276:31;1301:5;1276:31;:::i;:::-;1326:5;1378:2;1363:18;;;;1350:32;;-1:-1:-1;;;1073:315:201:o;1585:247::-;1644:6;1697:2;1685:9;1676:7;1672:23;1668:32;1665:52;;;1713:1;1710;1703:12;1665:52;1752:9;1739:23;1771:31;1796:5;1771:31;:::i;2272:156::-;2338:20;;2398:4;2387:16;;2377:27;;2367:55;;2418:1;2415;2408:12;2433:348;2485:8;2495:6;2549:3;2542:4;2534:6;2530:17;2526:27;2516:55;;2567:1;2564;2557:12;2516:55;-1:-1:-1;2590:20:201;;2633:18;2622:30;;2619:50;;;2665:1;2662;2655:12;2619:50;2702:4;2694:6;2690:17;2678:29;;2754:3;2747:4;2738:6;2730;2726:19;2722:30;2719:39;2716:59;;;2771:1;2768;2761:12;2716:59;2433:348;;;;;:::o;2786:1414::-;2989:6;2997;3005;3013;3021;3029;3037;3045;3053;3061;3069:7;3123:3;3111:9;3102:7;3098:23;3094:33;3091:53;;;3140:1;3137;3130:12;3091:53;3163:29;3182:9;3163:29;:::i;:::-;3153:39;;3211:38;3245:2;3234:9;3230:18;3211:38;:::i;:::-;3201:48;;3268:38;3302:2;3291:9;3287:18;3268:38;:::i;:::-;3258:48;;3325:38;3359:2;3348:9;3344:18;3325:38;:::i;:::-;3315:48;;3382:37;3414:3;3403:9;3399:19;3382:37;:::i;:::-;3372:47;;3438:18;3506:2;3499:3;3488:9;3484:19;3471:33;3468:41;3465:61;;;3522:1;3519;3512:12;3465:61;3561:86;3639:7;3631:3;3620:9;3616:19;3603:33;3592:9;3588:49;3561:86;:::i;:::-;3666:8;;-1:-1:-1;3693:8:201;-1:-1:-1;3744:3:201;3729:19;;3716:33;3713:41;-1:-1:-1;3710:61:201;;;3767:1;3764;3757:12;3710:61;3806:86;3884:7;3876:3;3865:9;3861:19;3848:33;3837:9;3833:49;3806:86;:::i;:::-;3911:8;;-1:-1:-1;3938:8:201;-1:-1:-1;3989:3:201;3974:19;;3961:33;3958:41;-1:-1:-1;3955:61:201;;;4012:1;4009;4002:12;3955:61;;4052:86;4130:7;4122:3;4111:9;4107:19;4094:33;4083:9;4079:49;4052:86;:::i;:::-;4157:8;4147:18;;4185:9;4174:20;;;;2786:1414;;;;;;;;;;;;;;:::o;4205:456::-;4282:6;4290;4298;4351:2;4339:9;4330:7;4326:23;4322:32;4319:52;;;4367:1;4364;4357:12;4319:52;4406:9;4393:23;4425:31;4450:5;4425:31;:::i;:::-;4475:5;-1:-1:-1;4532:2:201;4517:18;;4504:32;4545:33;4504:32;4545:33;:::i;:::-;4205:456;;4597:7;;-1:-1:-1;;;4651:2:201;4636:18;;;;4623:32;;4205:456::o;5770:248::-;5838:6;5846;5899:2;5887:9;5878:7;5874:23;5870:32;5867:52;;;5915:1;5912;5905:12;5867:52;-1:-1:-1;;5938:23:201;;;6008:2;5993:18;;;5980:32;;-1:-1:-1;5770:248:201:o;6254:525::-;6340:6;6348;6356;6364;6417:3;6405:9;6396:7;6392:23;6388:33;6385:53;;;6434:1;6431;6424:12;6385:53;6473:9;6460:23;6492:31;6517:5;6492:31;:::i;:::-;6542:5;-1:-1:-1;6599:2:201;6584:18;;6571:32;6612:33;6571:32;6612:33;:::i;:::-;6254:525;;6664:7;;-1:-1:-1;;;;6718:2:201;6703:18;;6690:32;;6769:2;6754:18;6741:32;;6254:525::o;6784:734::-;6895:6;6903;6911;6919;6927;6935;6943;6996:3;6984:9;6975:7;6971:23;6967:33;6964:53;;;7013:1;7010;7003:12;6964:53;7052:9;7039:23;7071:31;7096:5;7071:31;:::i;:::-;7121:5;-1:-1:-1;7178:2:201;7163:18;;7150:32;7191:33;7150:32;7191:33;:::i;:::-;7243:7;-1:-1:-1;7297:2:201;7282:18;;7269:32;;-1:-1:-1;7348:2:201;7333:18;;7320:32;;-1:-1:-1;7371:37:201;7403:3;7388:19;;7371:37;:::i;:::-;7361:47;;7455:3;7444:9;7440:19;7427:33;7417:43;;7507:3;7496:9;7492:19;7479:33;7469:43;;6784:734;;;;;;;;;;:::o;7523:388::-;7591:6;7599;7652:2;7640:9;7631:7;7627:23;7623:32;7620:52;;;7668:1;7665;7658:12;7620:52;7707:9;7694:23;7726:31;7751:5;7726:31;:::i;:::-;7776:5;-1:-1:-1;7833:2:201;7818:18;;7805:32;7846:33;7805:32;7846:33;:::i;:::-;7898:7;7888:17;;;7523:388;;;;;:::o;8202:437::-;8281:1;8277:12;;;;8324;;;8345:61;;8399:4;8391:6;8387:17;8377:27;;8345:61;8452:2;8444:6;8441:14;8421:18;8418:38;8415:218;;;8489:77;8486:1;8479:88;8590:4;8587:1;8580:15;8618:4;8615:1;8608:15;8644:184;8714:6;8767:2;8755:9;8746:7;8742:23;8738:32;8735:52;;;8783:1;8780;8773:12;8735:52;-1:-1:-1;8806:16:201;;8644:184;-1:-1:-1;8644:184:201:o;9248:326::-;9337:6;9332:3;9325:19;9389:6;9382:5;9375:4;9370:3;9366:14;9353:43;;9441:1;9434:4;9425:6;9420:3;9416:16;9412:27;9405:38;9307:3;9563:4;9493:66;9488:2;9480:6;9476:15;9472:88;9467:3;9463:98;9459:109;9452:116;;9248:326;;;;:::o;9579:928::-;9895:4;9924:42;10005:2;9997:6;9993:15;9982:9;9975:34;10057:2;10049:6;10045:15;10040:2;10029:9;10025:18;10018:43;;10109:4;10101:6;10097:17;10092:2;10081:9;10077:18;10070:45;10151:3;10146:2;10135:9;10131:18;10124:31;10178:63;10236:3;10225:9;10221:19;10213:6;10205;10178:63;:::i;:::-;10290:9;10282:6;10278:22;10272:3;10261:9;10257:19;10250:51;10324:50;10367:6;10359;10351;10324:50;:::i;:::-;10310:64;;10423:9;10415:6;10411:22;10405:3;10394:9;10390:19;10383:51;10451:50;10494:6;10486;10478;10451:50;:::i;:::-;10443:58;9579:928;-1:-1:-1;;;;;;;;;;;;9579:928:201:o;10512:184::-;10564:77;10561:1;10554:88;10661:4;10658:1;10651:15;10685:4;10682:1;10675:15;10701:125;10741:4;10769:1;10766;10763:8;10760:34;;;10774:18;;:::i;:::-;-1:-1:-1;10811:9:201;;10701:125::o;10831:128::-;10871:3;10902:1;10898:6;10895:1;10892:13;10889:39;;;10908:18;;:::i;:::-;-1:-1:-1;10944:9:201;;10831:128::o;10964:251::-;11034:6;11087:2;11075:9;11066:7;11062:23;11058:32;11055:52;;;11103:1;11100;11093:12;11055:52;11135:9;11129:16;11154:31;11179:5;11154:31;:::i;11220:277::-;11287:6;11340:2;11328:9;11319:7;11315:23;11311:32;11308:52;;;11356:1;11353;11346:12;11308:52;11388:9;11382:16;11441:5;11434:13;11427:21;11420:5;11417:32;11407:60;;11463:1;11460;11453:12;15200:253;15240:3;15268:34;15329:2;15326:1;15322:10;15359:2;15356:1;15352:10;15390:3;15386:2;15382:12;15377:3;15374:21;15371:47;;;15398:18;;:::i;:::-;15434:13;;15200:253;-1:-1:-1;;;;15200:253:201:o;15872:246::-;15912:4;15941:34;16025:10;;;;15995;;16047:12;;;16044:38;;;16062:18;;:::i;:::-;16099:13;;15872:246;-1:-1:-1;;;15872:246:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"2756600","executionCost":"infinite","totalCost":"infinite"},"external":{"ATOKEN_REVISION()":"308","DOMAIN_SEPARATOR()":"infinite","EIP712_REVISION()":"infinite","PERMIT_TYPEHASH()":"241","POOL()":"infinite","RESERVE_TREASURY_ADDRESS()":"2396","UNDERLYING_ASSET_ADDRESS()":"2418","allowance(address,address)":"infinite","approve(address,uint256)":"24565","balanceOf(address)":"infinite","burn(address,address,uint256,uint256)":"infinite","decimals()":"2357","decreaseAllowance(address,uint256)":"26864","getIncentivesController()":"2429","getPreviousIndex(address)":"2590","getScaledUserBalanceAndSupply(address)":"4737","handleRepayment(address,address,uint256)":"infinite","increaseAllowance(address,uint256)":"26934","initialize(address,address,address,address,uint8,string,string,bytes)":"infinite","mint(address,address,uint256,uint256)":"infinite","mintToTreasury(uint256,uint256)":"infinite","name()":"infinite","nonces(address)":"2631","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"infinite","rescueTokens(address,address,uint256)":"infinite","scaledBalanceOf(address)":"2626","scaledTotalSupply()":"2375","setIncentivesController(address)":"infinite","symbol()":"infinite","totalSupply()":"infinite","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite","transferOnLiquidation(address,address,uint256)":"infinite","transferUnderlyingTo(address,uint256)":"infinite"},"internal":{"_EIP712BaseId()":"infinite","_transfer(address,address,uint128)":"infinite","_transfer(address,address,uint256,bool)":"infinite","getRevision()":"infinite"}},"methodIdentifiers":{"ATOKEN_REVISION()":"0bd7ad3b","DOMAIN_SEPARATOR()":"3644e515","EIP712_REVISION()":"78160376","PERMIT_TYPEHASH()":"30adf81f","POOL()":"7535d246","RESERVE_TREASURY_ADDRESS()":"ae167335","UNDERLYING_ASSET_ADDRESS()":"b16a19de","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(address,address,uint256,uint256)":"d7020d0a","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","getIncentivesController()":"75d26413","getPreviousIndex(address)":"e0753986","getScaledUserBalanceAndSupply(address)":"0afbcdc9","handleRepayment(address,address,uint256)":"6fd97676","increaseAllowance(address,uint256)":"39509351","initialize(address,address,address,address,uint8,string,string,bytes)":"183fb413","mint(address,address,uint256,uint256)":"b3f1c93d","mintToTreasury(uint256,uint256)":"7df5bd3b","name()":"06fdde03","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","rescueTokens(address,address,uint256)":"cea9d26f","scaledBalanceOf(address)":"1da24f3e","scaledTotalSupply()":"b1bf962d","setIncentivesController(address)":"e655dbd8","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOnLiquidation(address,address,uint256)":"f866c319","transferUnderlyingTo(address,uint256)":"4efecaa5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"}],\"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\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"BalanceTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"aTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"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\":\"ATOKEN_REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EIP712_REVISION\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_TREASURY_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"user\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiverOfUnderlying\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getPreviousIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getScaledUserBalanceAndSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"handleRepayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"initializingPool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"aTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mintToTreasury\",\"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\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"rescueTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"scaledBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scaledTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setIncentivesController\",\"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\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferOnLiquidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferUnderlyingTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Overrides the base function to fully implement IATokensee `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation\"},\"RESERVE_TREASURY_ADDRESS()\":{\"returns\":{\"_0\":\"Address of the Aave treasury\"}},\"UNDERLYING_ASSET_ADDRESS()\":{\"returns\":{\"_0\":\"The address of the underlying asset\"}},\"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`.\"},\"burn(address,address,uint256,uint256)\":{\"details\":\"In some instances, the mint event could be emitted from a burn transaction if the amount to burn is less than the interest that the user accrued\",\"params\":{\"amount\":\"The amount being burned\",\"from\":\"The address from which the aTokens will be burned\",\"index\":\"The next liquidity index of the reserve\",\"receiverOfUnderlying\":\"The address that will receive the underlying\"}},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"pool\":\"The address of the Pool contract\"}},\"decreaseAllowance(address,uint256)\":{\"params\":{\"spender\":\"The user allowed to spend on behalf of _msgSender()\",\"subtractedValue\":\"The amount being subtracted to the allowance\"},\"returns\":{\"_0\":\"`true`\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"The address of the Incentives Controller\"}},\"getPreviousIndex(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The last index interest was accrued to the user's balance, expressed in ray\"}},\"getScaledUserBalanceAndSupply(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The scaled balance of the user\",\"_1\":\"The scaled total supply\"}},\"handleRepayment(address,address,uint256)\":{\"details\":\"The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\",\"params\":{\"amount\":\"The amount getting repaid\",\"onBehalfOf\":\"The address of the user who will get his debt reduced/removed\",\"user\":\"The user executing the repayment\"}},\"increaseAllowance(address,uint256)\":{\"params\":{\"addedValue\":\"The amount being added to the allowance\",\"spender\":\"The user allowed to spend on behalf of _msgSender()\"},\"returns\":{\"_0\":\"`true`\"}},\"initialize(address,address,address,address,uint8,string,string,bytes)\":{\"params\":{\"aTokenDecimals\":\"The decimals of the aToken, same as the underlying asset's\",\"aTokenName\":\"The name of the aToken\",\"aTokenSymbol\":\"The symbol of the aToken\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"treasury\":\"The address of the Aave treasury, receiving the fees on this aToken\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}},\"mint(address,address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of tokens getting minted\",\"caller\":\"The address performing the mint\",\"index\":\"The next liquidity index of the reserve\",\"onBehalfOf\":\"The address of the user that will receive the minted aTokens\"},\"returns\":{\"_0\":\"`true` if the the previous balance of the user was 0\"}},\"mintToTreasury(uint256,uint256)\":{\"params\":{\"amount\":\"The amount of tokens getting minted\",\"index\":\"The next liquidity index of the reserve\"}},\"nonces(address)\":{\"details\":\"Overrides the base function to fully implement IATokensee `EIP712Base.nonces()` for more detailed documentation\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\",\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"owner\":\"The owner of the funds\",\"r\":\"Signature param\",\"s\":\"Signature param\",\"spender\":\"The spender\",\"v\":\"Signature param\",\"value\":\"The amount\"}},\"rescueTokens(address,address,uint256)\":{\"params\":{\"amount\":\"The amount of token to transfer\",\"to\":\"The address of the recipient\",\"token\":\"The address of the token\"}},\"scaledBalanceOf(address)\":{\"details\":\"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update\",\"params\":{\"user\":\"The user whose balance is calculated\"},\"returns\":{\"_0\":\"The scaled balance of the user\"}},\"scaledTotalSupply()\":{\"returns\":{\"_0\":\"The scaled total supply\"}},\"setIncentivesController(address)\":{\"params\":{\"controller\":\"the new Incentives controller\"}},\"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.\"},\"transferOnLiquidation(address,address,uint256)\":{\"params\":{\"from\":\"The address getting liquidated, current owner of the aTokens\",\"to\":\"The recipient\",\"value\":\"The amount of tokens getting transferred\"}},\"transferUnderlyingTo(address,uint256)\":{\"details\":\"Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\",\"params\":{\"amount\":\"The amount getting transferred\",\"target\":\"The recipient of the underlying\"}}},\"title\":\"Aave ERC20 AToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"RESERVE_TREASURY_ADDRESS()\":{\"notice\":\"Returns the address of the Aave treasury, receiving the fees on this aToken.\"},\"UNDERLYING_ASSET_ADDRESS()\":{\"notice\":\"Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\"},\"burn(address,address,uint256,uint256)\":{\"notice\":\"Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\"},\"decreaseAllowance(address,uint256)\":{\"notice\":\"Decreases the allowance of spender to spend _msgSender() tokens\"},\"getIncentivesController()\":{\"notice\":\"Returns the address of the Incentives Controller contract\"},\"getPreviousIndex(address)\":{\"notice\":\"Returns last index interest was accrued to the user's balance\"},\"getScaledUserBalanceAndSupply(address)\":{\"notice\":\"Returns the scaled balance of the user and the scaled total supply.\"},\"handleRepayment(address,address,uint256)\":{\"notice\":\"Handles the underlying received by the aToken after the transfer has been completed.\"},\"increaseAllowance(address,uint256)\":{\"notice\":\"Increases the allowance of spender to spend _msgSender() tokens\"},\"initialize(address,address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the aToken\"},\"mint(address,address,uint256,uint256)\":{\"notice\":\"Mints `amount` aTokens to `user`\"},\"mintToTreasury(uint256,uint256)\":{\"notice\":\"Mints aTokens to the reserve treasury\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Allow passing a signed message to approve spending\"},\"rescueTokens(address,address,uint256)\":{\"notice\":\"Rescue and transfer tokens locked in this contract\"},\"scaledBalanceOf(address)\":{\"notice\":\"Returns the scaled balance of the user.\"},\"scaledTotalSupply()\":{\"notice\":\"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\"},\"setIncentivesController(address)\":{\"notice\":\"Sets a new Incentives Controller\"},\"transferOnLiquidation(address,address,uint256)\":{\"notice\":\"Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\"},\"transferUnderlyingTo(address,uint256)\":{\"notice\":\"Transfers the underlying asset to `target`.\"}},\"notice\":\"Implementation of the interest bearing token for the Aave protocol\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/tokenization/AToken.sol\":\"AToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/AToken.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IAToken} from '../../interfaces/IAToken.sol';\\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\\nimport {IInitializableAToken} from '../../interfaces/IInitializableAToken.sol';\\nimport {ScaledBalanceTokenBase} from './base/ScaledBalanceTokenBase.sol';\\nimport {IncentivizedERC20} from './base/IncentivizedERC20.sol';\\nimport {EIP712Base} from './base/EIP712Base.sol';\\n\\n/**\\n * @title Aave ERC20 AToken\\n * @author Aave\\n * @notice Implementation of the interest bearing token for the Aave protocol\\n */\\ncontract AToken is VersionedInitializable, ScaledBalanceTokenBase, EIP712Base, IAToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  bytes32 public constant PERMIT_TYPEHASH =\\n    keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  uint256 public constant ATOKEN_REVISION = 0x1;\\n\\n  address internal _treasury;\\n  address internal _underlyingAsset;\\n\\n  /// @inheritdoc VersionedInitializable\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return ATOKEN_REVISION;\\n  }\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The address of the Pool contract\\n   */\\n  constructor(\\n    IPool pool\\n  ) ScaledBalanceTokenBase(pool, 'ATOKEN_IMPL', 'ATOKEN_IMPL', 0) EIP712Base() {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IInitializableAToken\\n  function initialize(\\n    IPool initializingPool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) public virtual override initializer {\\n    require(initializingPool == POOL, Errors.POOL_ADDRESSES_DO_NOT_MATCH);\\n    _setName(aTokenName);\\n    _setSymbol(aTokenSymbol);\\n    _setDecimals(aTokenDecimals);\\n\\n    _treasury = treasury;\\n    _underlyingAsset = underlyingAsset;\\n    _incentivesController = incentivesController;\\n\\n    _domainSeparator = _calculateDomainSeparator();\\n\\n    emit Initialized(\\n      underlyingAsset,\\n      address(POOL),\\n      treasury,\\n      address(incentivesController),\\n      aTokenDecimals,\\n      aTokenName,\\n      aTokenSymbol,\\n      params\\n    );\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external virtual override onlyPool returns (bool) {\\n    return _mintScaled(caller, onBehalfOf, amount, index);\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function burn(\\n    address from,\\n    address receiverOfUnderlying,\\n    uint256 amount,\\n    uint256 index\\n  ) external virtual override onlyPool {\\n    _burnScaled(from, receiverOfUnderlying, amount, index);\\n    if (receiverOfUnderlying != address(this)) {\\n      IERC20(_underlyingAsset).safeTransfer(receiverOfUnderlying, amount);\\n    }\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function mintToTreasury(uint256 amount, uint256 index) external virtual override onlyPool {\\n    if (amount == 0) {\\n      return;\\n    }\\n    _mintScaled(address(POOL), _treasury, amount, index);\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function transferOnLiquidation(\\n    address from,\\n    address to,\\n    uint256 value\\n  ) external virtual override onlyPool {\\n    // Being a normal transfer, the Transfer() and BalanceTransfer() are emitted\\n    // so no need to emit a specific event here\\n    _transfer(from, to, value, false);\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(\\n    address user\\n  ) public view virtual override(IncentivizedERC20, IERC20) returns (uint256) {\\n    return super.balanceOf(user).rayMul(POOL.getReserveNormalizedIncome(_underlyingAsset));\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override(IncentivizedERC20, IERC20) returns (uint256) {\\n    uint256 currentSupplyScaled = super.totalSupply();\\n\\n    if (currentSupplyScaled == 0) {\\n      return 0;\\n    }\\n\\n    return currentSupplyScaled.rayMul(POOL.getReserveNormalizedIncome(_underlyingAsset));\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function RESERVE_TREASURY_ADDRESS() external view override returns (address) {\\n    return _treasury;\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function UNDERLYING_ASSET_ADDRESS() external view override returns (address) {\\n    return _underlyingAsset;\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function transferUnderlyingTo(address target, uint256 amount) external virtual override onlyPool {\\n    IERC20(_underlyingAsset).safeTransfer(target, amount);\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function handleRepayment(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount\\n  ) external virtual override onlyPool {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IAToken\\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 override {\\n    require(owner != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, Errors.INVALID_EXPIRATION);\\n    uint256 currentValidNonce = _nonces[owner];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR(),\\n        keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, currentValidNonce, deadline))\\n      )\\n    );\\n    require(owner == ecrecover(digest, v, r, s), Errors.INVALID_SIGNATURE);\\n    _nonces[owner] = currentValidNonce + 1;\\n    _approve(owner, spender, value);\\n  }\\n\\n  /**\\n   * @notice Transfers the aTokens between two users. Validates the transfer\\n   * (ie checks for valid HF after the transfer) if required\\n   * @param from The source address\\n   * @param to The destination address\\n   * @param amount The amount getting transferred\\n   * @param validate True if the transfer needs to be validated, false otherwise\\n   */\\n  function _transfer(address from, address to, uint256 amount, bool validate) internal virtual {\\n    address underlyingAsset = _underlyingAsset;\\n\\n    uint256 index = POOL.getReserveNormalizedIncome(underlyingAsset);\\n\\n    uint256 fromBalanceBefore = super.balanceOf(from).rayMul(index);\\n    uint256 toBalanceBefore = super.balanceOf(to).rayMul(index);\\n\\n    super._transfer(from, to, amount, index);\\n\\n    if (validate) {\\n      POOL.finalizeTransfer(underlyingAsset, from, to, amount, fromBalanceBefore, toBalanceBefore);\\n    }\\n\\n    emit BalanceTransfer(from, to, amount.rayDiv(index), index);\\n  }\\n\\n  /**\\n   * @notice Overrides the parent _transfer to force validated transfer() and transferFrom()\\n   * @param from The source address\\n   * @param to The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address from, address to, uint128 amount) internal virtual override {\\n    _transfer(from, to, amount, true);\\n  }\\n\\n  /**\\n   * @dev Overrides the base function to fully implement IAToken\\n   * @dev see `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation\\n   */\\n  function DOMAIN_SEPARATOR() public view override(IAToken, EIP712Base) returns (bytes32) {\\n    return super.DOMAIN_SEPARATOR();\\n  }\\n\\n  /**\\n   * @dev Overrides the base function to fully implement IAToken\\n   * @dev see `EIP712Base.nonces()` for more detailed documentation\\n   */\\n  function nonces(address owner) public view override(IAToken, EIP712Base) returns (uint256) {\\n    return super.nonces(owner);\\n  }\\n\\n  /// @inheritdoc EIP712Base\\n  function _EIP712BaseId() internal view override returns (string memory) {\\n    return name();\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function rescueTokens(address token, address to, uint256 amount) external override onlyPoolAdmin {\\n    require(token != _underlyingAsset, Errors.UNDERLYING_CANNOT_BE_RESCUED);\\n    IERC20(token).safeTransfer(to, amount);\\n  }\\n}\\n\",\"keccak256\":\"0x2bebbe5c8078e3d300b67d27ed2ac6695f9d17d7c52f0f22879a04353a5c7db1\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/EIP712Base.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title EIP712Base\\n * @author Aave\\n * @notice Base contract implementation of EIP712.\\n */\\nabstract contract EIP712Base {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 internal _domainSeparator;\\n  uint256 internal immutable _chainId;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() {\\n    _chainId = block.chainid;\\n  }\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\\n    if (block.chainid == _chainId) {\\n      return _domainSeparator;\\n    }\\n    return _calculateDomainSeparator();\\n  }\\n\\n  /**\\n   * @notice Returns the nonce value for address specified as parameter\\n   * @param owner The address for which the nonce is being returned\\n   * @return The nonce value for the input address`\\n   */\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n\\n  /**\\n   * @notice Compute the current domain separator\\n   * @return The domain separator for the token\\n   */\\n  function _calculateDomainSeparator() internal view returns (bytes32) {\\n    return\\n      keccak256(\\n        abi.encode(\\n          EIP712_DOMAIN,\\n          keccak256(bytes(_EIP712BaseId())),\\n          keccak256(EIP712_REVISION),\\n          block.chainid,\\n          address(this)\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Returns the user readable name of signing domain (e.g. token name)\\n   * @return The name of the signing domain\\n   */\\n  function _EIP712BaseId() internal view virtual returns (string memory);\\n}\\n\",\"keccak256\":\"0xd4ed5763068be0ffb08219fc2f9f3c87487578cd0617dae06db26018054b89cd\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IncentivizedERC20} from './IncentivizedERC20.sol';\\n\\n/**\\n * @title MintableIncentivizedERC20\\n * @author Aave\\n * @notice Implements mint and burn functions for IncentivizedERC20\\n */\\nabstract contract MintableIncentivizedERC20 is IncentivizedERC20 {\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) IncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /**\\n   * @notice Mints tokens to an account and apply incentives if defined\\n   * @param account The address receiving tokens\\n   * @param amount The amount of tokens to mint\\n   */\\n  function _mint(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply + amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns tokens from an account and apply incentives if defined\\n   * @param account The account whose tokens are burnt\\n   * @param amount The amount of tokens to burn\\n   */\\n  function _burn(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply - amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance - amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xc24b3d20923fd55a160698a594e47247c2fb0b1e0c795e47f89ddd2da2918824\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {MintableIncentivizedERC20} from './MintableIncentivizedERC20.sol';\\n\\n/**\\n * @title ScaledBalanceTokenBase\\n * @author Aave\\n * @notice Basic ERC20 implementation of scaled balance token\\n */\\nabstract contract ScaledBalanceTokenBase is MintableIncentivizedERC20, IScaledBalanceToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) MintableIncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledBalanceOf(address user) external view override returns (uint256) {\\n    return super.balanceOf(user);\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getScaledUserBalanceAndSupply(\\n    address user\\n  ) external view override returns (uint256, uint256) {\\n    return (super.balanceOf(user), super.totalSupply());\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledTotalSupply() public view virtual override returns (uint256) {\\n    return super.totalSupply();\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getPreviousIndex(address user) external view virtual override returns (uint256) {\\n    return _userState[user].additionalData;\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to mint a scaled balance token.\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the scaled tokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function _mintScaled(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) internal returns (bool) {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_MINT_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(onBehalfOf);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[onBehalfOf].additionalData);\\n\\n    _userState[onBehalfOf].additionalData = index.toUint128();\\n\\n    _mint(onBehalfOf, amountScaled.toUint128());\\n\\n    uint256 amountToMint = amount + balanceIncrease;\\n    emit Transfer(address(0), onBehalfOf, amountToMint);\\n    emit Mint(caller, onBehalfOf, amountToMint, balanceIncrease, index);\\n\\n    return (scaledBalance == 0);\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to burn a scaled balance token.\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param user The user which debt is burnt\\n   * @param target The address that will receive the underlying, if any\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   */\\n  function _burnScaled(address user, address target, uint256 amount, uint256 index) internal {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_BURN_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(user);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[user].additionalData);\\n\\n    _userState[user].additionalData = index.toUint128();\\n\\n    _burn(user, amountScaled.toUint128());\\n\\n    if (balanceIncrease > amount) {\\n      uint256 amountToMint = balanceIncrease - amount;\\n      emit Transfer(address(0), user, amountToMint);\\n      emit Mint(user, user, amountToMint, balanceIncrease, index);\\n    } else {\\n      uint256 amountToBurn = amount - balanceIncrease;\\n      emit Transfer(user, address(0), amountToBurn);\\n      emit Burn(user, target, amountToBurn, balanceIncrease, index);\\n    }\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to transfer scaled balance tokens between two users\\n   * @dev It emits a mint event with the interest accrued per user\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount, uint256 index) internal {\\n    uint256 senderScaledBalance = super.balanceOf(sender);\\n    uint256 senderBalanceIncrease = senderScaledBalance.rayMul(index) -\\n      senderScaledBalance.rayMul(_userState[sender].additionalData);\\n\\n    uint256 recipientScaledBalance = super.balanceOf(recipient);\\n    uint256 recipientBalanceIncrease = recipientScaledBalance.rayMul(index) -\\n      recipientScaledBalance.rayMul(_userState[recipient].additionalData);\\n\\n    _userState[sender].additionalData = index.toUint128();\\n    _userState[recipient].additionalData = index.toUint128();\\n\\n    super._transfer(sender, recipient, amount.rayDiv(index).toUint128());\\n\\n    if (senderBalanceIncrease > 0) {\\n      emit Transfer(address(0), sender, senderBalanceIncrease);\\n      emit Mint(_msgSender(), sender, senderBalanceIncrease, senderBalanceIncrease, index);\\n    }\\n\\n    if (sender != recipient && recipientBalanceIncrease > 0) {\\n      emit Transfer(address(0), recipient, recipientBalanceIncrease);\\n      emit Mint(_msgSender(), recipient, recipientBalanceIncrease, recipientBalanceIncrease, index);\\n    }\\n\\n    emit Transfer(sender, recipient, amount);\\n  }\\n}\\n\",\"keccak256\":\"0xbd3f86bbb655838646ea5f7c306bc8c572a9d272f54632f369908bb5420021dd\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":10499,"contract":"@aave/core-v3/contracts/protocol/tokenization/AToken.sol:AToken","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":10502,"contract":"@aave/core-v3/contracts/protocol/tokenization/AToken.sol:AToken","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":10572,"contract":"@aave/core-v3/contracts/protocol/tokenization/AToken.sol:AToken","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":27906,"contract":"@aave/core-v3/contracts/protocol/tokenization/AToken.sol:AToken","label":"_userState","offset":0,"slot":"52","type":"t_mapping(t_address,t_struct(UserState)27901_storage)"},{"astId":27912,"contract":"@aave/core-v3/contracts/protocol/tokenization/AToken.sol:AToken","label":"_allowances","offset":0,"slot":"53","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":27914,"contract":"@aave/core-v3/contracts/protocol/tokenization/AToken.sol:AToken","label":"_totalSupply","offset":0,"slot":"54","type":"t_uint256"},{"astId":27916,"contract":"@aave/core-v3/contracts/protocol/tokenization/AToken.sol:AToken","label":"_name","offset":0,"slot":"55","type":"t_string_storage"},{"astId":27918,"contract":"@aave/core-v3/contracts/protocol/tokenization/AToken.sol:AToken","label":"_symbol","offset":0,"slot":"56","type":"t_string_storage"},{"astId":27920,"contract":"@aave/core-v3/contracts/protocol/tokenization/AToken.sol:AToken","label":"_decimals","offset":0,"slot":"57","type":"t_uint8"},{"astId":27923,"contract":"@aave/core-v3/contracts/protocol/tokenization/AToken.sol:AToken","label":"_incentivesController","offset":1,"slot":"57","type":"t_contract(IAaveIncentivesController)3875"},{"astId":27740,"contract":"@aave/core-v3/contracts/protocol/tokenization/AToken.sol:AToken","label":"_nonces","offset":0,"slot":"58","type":"t_mapping(t_address,t_uint256)"},{"astId":27742,"contract":"@aave/core-v3/contracts/protocol/tokenization/AToken.sol:AToken","label":"_domainSeparator","offset":0,"slot":"59","type":"t_bytes32"},{"astId":25392,"contract":"@aave/core-v3/contracts/protocol/tokenization/AToken.sol:AToken","label":"_treasury","offset":0,"slot":"60","type":"t_address"},{"astId":25394,"contract":"@aave/core-v3/contracts/protocol/tokenization/AToken.sol:AToken","label":"_underlyingAsset","offset":0,"slot":"61","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IAaveIncentivesController)3875":{"encoding":"inplace","label":"contract IAaveIncentivesController","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(UserState)27901_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct IncentivizedERC20.UserState)","numberOfBytes":"32","value":"t_struct(UserState)27901_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(UserState)27901_storage":{"encoding":"inplace","label":"struct IncentivizedERC20.UserState","members":[{"astId":27898,"contract":"@aave/core-v3/contracts/protocol/tokenization/AToken.sol:AToken","label":"balance","offset":0,"slot":"0","type":"t_uint128"},{"astId":27900,"contract":"@aave/core-v3/contracts/protocol/tokenization/AToken.sol:AToken","label":"additionalData","offset":16,"slot":"0","type":"t_uint128"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"RESERVE_TREASURY_ADDRESS()":{"notice":"Returns the address of the Aave treasury, receiving the fees on this aToken."},"UNDERLYING_ASSET_ADDRESS()":{"notice":"Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)"},"burn(address,address,uint256,uint256)":{"notice":"Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`"},"decreaseAllowance(address,uint256)":{"notice":"Decreases the allowance of spender to spend _msgSender() tokens"},"getIncentivesController()":{"notice":"Returns the address of the Incentives Controller contract"},"getPreviousIndex(address)":{"notice":"Returns last index interest was accrued to the user's balance"},"getScaledUserBalanceAndSupply(address)":{"notice":"Returns the scaled balance of the user and the scaled total supply."},"handleRepayment(address,address,uint256)":{"notice":"Handles the underlying received by the aToken after the transfer has been completed."},"increaseAllowance(address,uint256)":{"notice":"Increases the allowance of spender to spend _msgSender() tokens"},"initialize(address,address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the aToken"},"mint(address,address,uint256,uint256)":{"notice":"Mints `amount` aTokens to `user`"},"mintToTreasury(uint256,uint256)":{"notice":"Mints aTokens to the reserve treasury"},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Allow passing a signed message to approve spending"},"rescueTokens(address,address,uint256)":{"notice":"Rescue and transfer tokens locked in this contract"},"scaledBalanceOf(address)":{"notice":"Returns the scaled balance of the user."},"scaledTotalSupply()":{"notice":"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)"},"setIncentivesController(address)":{"notice":"Sets a new Incentives Controller"},"transferOnLiquidation(address,address,uint256)":{"notice":"Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken"},"transferUnderlyingTo(address,uint256)":{"notice":"Transfers the underlying asset to `target`."}},"notice":"Implementation of the interest bearing token for the Aave protocol","version":1}}},"@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol":{"DelegationAwareAToken":{"abi":[{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"}],"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"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"BalanceTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegatee","type":"address"}],"name":"DelegateUnderlyingTo","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"treasury","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"aTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"aTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"aTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Mint","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":"ATOKEN_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EIP712_REVISION","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVE_TREASURY_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNDERLYING_ASSET_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"receiverOfUnderlying","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegateUnderlyingTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"contract IAaveIncentivesController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getPreviousIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getScaledUserBalanceAndSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"handleRepayment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"initializingPool","type":"address"},{"internalType":"address","name":"treasury","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"aTokenDecimals","type":"uint8"},{"internalType":"string","name":"aTokenName","type":"string"},{"internalType":"string","name":"aTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"mintToTreasury","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":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"scaledBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scaledTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IAaveIncentivesController","name":"controller","type":"address"}],"name":"setIncentivesController","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"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferOnLiquidation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferUnderlyingTo","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","details":"The underlying asset needs to be compatible with the COMP delegation interface","events":{"DelegateUnderlyingTo(address)":{"details":"Emitted when underlying voting power is delegated","params":{"delegatee":"The address of the delegatee"}}},"kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Overrides the base function to fully implement IATokensee `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation"},"RESERVE_TREASURY_ADDRESS()":{"returns":{"_0":"Address of the Aave treasury"}},"UNDERLYING_ASSET_ADDRESS()":{"returns":{"_0":"The address of the underlying asset"}},"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`."},"burn(address,address,uint256,uint256)":{"details":"In some instances, the mint event could be emitted from a burn transaction if the amount to burn is less than the interest that the user accrued","params":{"amount":"The amount being burned","from":"The address from which the aTokens will be burned","index":"The next liquidity index of the reserve","receiverOfUnderlying":"The address that will receive the underlying"}},"constructor":{"details":"Constructor.","params":{"pool":"The address of the Pool contract"}},"decreaseAllowance(address,uint256)":{"params":{"spender":"The user allowed to spend on behalf of _msgSender()","subtractedValue":"The amount being subtracted to the allowance"},"returns":{"_0":"`true`"}},"delegateUnderlyingTo(address)":{"params":{"delegatee":"The address that will receive the delegation"}},"getIncentivesController()":{"returns":{"_0":"The address of the Incentives Controller"}},"getPreviousIndex(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The last index interest was accrued to the user's balance, expressed in ray"}},"getScaledUserBalanceAndSupply(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The scaled balance of the user","_1":"The scaled total supply"}},"handleRepayment(address,address,uint256)":{"details":"The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.","params":{"amount":"The amount getting repaid","onBehalfOf":"The address of the user who will get his debt reduced/removed","user":"The user executing the repayment"}},"increaseAllowance(address,uint256)":{"params":{"addedValue":"The amount being added to the allowance","spender":"The user allowed to spend on behalf of _msgSender()"},"returns":{"_0":"`true`"}},"initialize(address,address,address,address,uint8,string,string,bytes)":{"params":{"aTokenDecimals":"The decimals of the aToken, same as the underlying asset's","aTokenName":"The name of the aToken","aTokenSymbol":"The symbol of the aToken","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","treasury":"The address of the Aave treasury, receiving the fees on this aToken","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}},"mint(address,address,uint256,uint256)":{"params":{"amount":"The amount of tokens getting minted","caller":"The address performing the mint","index":"The next liquidity index of the reserve","onBehalfOf":"The address of the user that will receive the minted aTokens"},"returns":{"_0":"`true` if the the previous balance of the user was 0"}},"mintToTreasury(uint256,uint256)":{"params":{"amount":"The amount of tokens getting minted","index":"The next liquidity index of the reserve"}},"nonces(address)":{"details":"Overrides the base function to fully implement IATokensee `EIP712Base.nonces()` for more detailed documentation"},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md","params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","owner":"The owner of the funds","r":"Signature param","s":"Signature param","spender":"The spender","v":"Signature param","value":"The amount"}},"rescueTokens(address,address,uint256)":{"params":{"amount":"The amount of token to transfer","to":"The address of the recipient","token":"The address of the token"}},"scaledBalanceOf(address)":{"details":"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update","params":{"user":"The user whose balance is calculated"},"returns":{"_0":"The scaled balance of the user"}},"scaledTotalSupply()":{"returns":{"_0":"The scaled total supply"}},"setIncentivesController(address)":{"params":{"controller":"the new Incentives controller"}},"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."},"transferOnLiquidation(address,address,uint256)":{"params":{"from":"The address getting liquidated, current owner of the aTokens","to":"The recipient","value":"The amount of tokens getting transferred"}},"transferUnderlyingTo(address,uint256)":{"details":"Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()","params":{"amount":"The amount getting transferred","target":"The recipient of the underlying"}}},"title":"DelegationAwareAToken","version":1},"evm":{"bytecode":{"functionDebugData":{"@_25420":{"entryPoint":null,"id":25420,"parameterSlots":1,"returnSlots":0},"@_26012":{"entryPoint":null,"id":26012,"parameterSlots":1,"returnSlots":0},"@_27754":{"entryPoint":null,"id":27754,"parameterSlots":0,"returnSlots":0},"@_27965":{"entryPoint":null,"id":27965,"parameterSlots":4,"returnSlots":0},"@_28380":{"entryPoint":null,"id":28380,"parameterSlots":4,"returnSlots":0},"@_28544":{"entryPoint":null,"id":28544,"parameterSlots":4,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$4860_fromMemory":{"entryPoint":543,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":582,"id":null,"parameterSlots":1,"returnSlots":1},"validator_revert_contract_IPool":{"entryPoint":518,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1110:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"66:86:201","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:201"},"nodeType":"YulFunctionCall","src":"132:12:201"},"nodeType":"YulExpressionStatement","src":"132:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"89:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"100:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"115:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"120:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"111:3:201"},"nodeType":"YulFunctionCall","src":"111:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"124:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"107:3:201"},"nodeType":"YulFunctionCall","src":"107:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"96:3:201"},"nodeType":"YulFunctionCall","src":"96:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"86:2:201"},"nodeType":"YulFunctionCall","src":"86:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"79:6:201"},"nodeType":"YulFunctionCall","src":"79:50:201"},"nodeType":"YulIf","src":"76:70:201"}]},"name":"validator_revert_contract_IPool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"55:5:201","type":""}],"src":"14:138:201"},{"body":{"nodeType":"YulBlock","src":"252:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"298:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"307:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"310:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"300:6:201"},"nodeType":"YulFunctionCall","src":"300:12:201"},"nodeType":"YulExpressionStatement","src":"300:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"273:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"282:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"269:3:201"},"nodeType":"YulFunctionCall","src":"269:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"294:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"265:3:201"},"nodeType":"YulFunctionCall","src":"265:32:201"},"nodeType":"YulIf","src":"262:52:201"},{"nodeType":"YulVariableDeclaration","src":"323:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"342:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"336:5:201"},"nodeType":"YulFunctionCall","src":"336:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"327:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"393:5:201"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"361:31:201"},"nodeType":"YulFunctionCall","src":"361:38:201"},"nodeType":"YulExpressionStatement","src":"361:38:201"},{"nodeType":"YulAssignment","src":"408:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"418:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"408:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$4860_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"218:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"229:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"241:6:201","type":""}],"src":"157:272:201"},{"body":{"nodeType":"YulBlock","src":"546:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"592:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"601:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"604:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"594:6:201"},"nodeType":"YulFunctionCall","src":"594:12:201"},"nodeType":"YulExpressionStatement","src":"594:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"567:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"576:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"563:3:201"},"nodeType":"YulFunctionCall","src":"563:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"588:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"559:3:201"},"nodeType":"YulFunctionCall","src":"559:32:201"},"nodeType":"YulIf","src":"556:52:201"},{"nodeType":"YulVariableDeclaration","src":"617:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"636:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"630:5:201"},"nodeType":"YulFunctionCall","src":"630:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"621:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"687:5:201"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"655:31:201"},"nodeType":"YulFunctionCall","src":"655:38:201"},"nodeType":"YulExpressionStatement","src":"655:38:201"},{"nodeType":"YulAssignment","src":"702:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"712:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"702:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"512:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"523:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"535:6:201","type":""}],"src":"434:289:201"},{"body":{"nodeType":"YulBlock","src":"783:325:201","statements":[{"nodeType":"YulAssignment","src":"793:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"807:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"810:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"803:3:201"},"nodeType":"YulFunctionCall","src":"803:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"793:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"824:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"854:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"860:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:201"},"nodeType":"YulFunctionCall","src":"850:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"828:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"901:31:201","statements":[{"nodeType":"YulAssignment","src":"903:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"917:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"925:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"913:3:201"},"nodeType":"YulFunctionCall","src":"913:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"903:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"881:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"874:6:201"},"nodeType":"YulFunctionCall","src":"874:26:201"},"nodeType":"YulIf","src":"871:61:201"},{"body":{"nodeType":"YulBlock","src":"991:111:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1012:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1019:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1024:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1015:3:201"},"nodeType":"YulFunctionCall","src":"1015:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1005:6:201"},"nodeType":"YulFunctionCall","src":"1005:31:201"},"nodeType":"YulExpressionStatement","src":"1005:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1056:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1059:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1049:6:201"},"nodeType":"YulFunctionCall","src":"1049:15:201"},"nodeType":"YulExpressionStatement","src":"1049:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1084:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1087:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1077:6:201"},"nodeType":"YulFunctionCall","src":"1077:15:201"},"nodeType":"YulExpressionStatement","src":"1077:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"947:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"970:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"978:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"967:2:201"},"nodeType":"YulFunctionCall","src":"967:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"944:2:201"},"nodeType":"YulFunctionCall","src":"944:38:201"},"nodeType":"YulIf","src":"941:161:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"763:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"772:6:201","type":""}],"src":"728:380:201"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPool(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$4860_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60e0604052600080553480156200001557600080fd5b5060405162003b7c38038062003b7c83398101604081905262000038916200021f565b80806040518060400160405280600b81526020016a105513d2d15397d253541360aa1b8152506040518060400160405280600b81526020016a105513d2d15397d253541360aa1b81525060008383838383838383836001600160a01b0316630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f191906200021f565b6001600160a01b031660805282516200011290603790602086019062000160565b5081516200012890603890602085019062000160565b506039805460ff191660ff9290921691909117905550506001600160a01b031660a05250504660c05250620002839650505050505050565b8280546200016e9062000246565b90600052602060002090601f016020900481019282620001925760008555620001dd565b82601f10620001ad57805160ff1916838001178555620001dd565b82800160010185558215620001dd579182015b82811115620001dd578251825591602001919060010190620001c0565b50620001eb929150620001ef565b5090565b5b80821115620001eb5760008155600101620001f0565b6001600160a01b03811681146200021c57600080fd5b50565b6000602082840312156200023257600080fd5b81516200023f8162000206565b9392505050565b600181811c908216806200025b57607f821691505b602082108114156200027d57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c0516138606200031c6000396000611f540152600081816103ea0152818161074b015281816108b001528181610aaf01528181610f2401528181610ff1015281816110b301528181611196015281816112160152818161133e0152818161199001528181611c60015281816126090152612780015260008181610c43015281816113c50152611a4f01526138606000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c806375d2641311610145578063b1bf962d116100bd578063d7020d0a1161008c578063e075398611610071578063e0753986146105ba578063e655dbd814610616578063f866c3191461062957600080fd5b8063d7020d0a14610561578063dd62ed3e1461057457600080fd5b8063b1bf962d14610520578063b3f1c93d14610528578063cea9d26f1461053b578063d505accf1461054e57600080fd5b806395d89b4111610114578063a9059cbb116100f9578063a9059cbb146104d1578063ae167335146104e4578063b16a19de1461050257600080fd5b806395d89b41146104b6578063a457c2d7146104be57600080fd5b806375d264131461043157806378160376146104545780637df5bd3b146104905780637ecebe00146104a357600080fd5b80632f114618116101d857806339509351116101a75780636fd976761161018c5780636fd97676146103bf57806370a08231146103d25780637535d246146103e557600080fd5b806339509351146103995780634efecaa5146103ac57600080fd5b80632f1146181461034257806330adf81f14610355578063313ce5671461037c5780633644e5151461039157600080fd5b806318160ddd1161021457806318160ddd146102ff578063183fb413146103075780631da24f3e1461031c57806323b872dd1461032f57600080fd5b806306fdde0314610246578063095ea7b3146102645780630afbcdc9146102875780630bd7ad3b146102e9575b600080fd5b61024e61063c565b60405161025b91906132c7565b60405180910390f35b610277610272366004613316565b6106ce565b604051901515815260200161025b565b6102d4610295366004613342565b73ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546036546fffffffffffffffffffffffffffffffff90911691565b6040805192835260208301919091520161025b565b6102f1600181565b60405190815260200161025b565b6102f16106e4565b61031a6103153660046133b9565b6107c3565b005b6102f161032a366004613342565b610b80565b61027761033d3660046134ad565b610bbf565b61031a610350366004613342565b610c3f565b6102f17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60395460405160ff909116815260200161025b565b6102f1610e9a565b6102776103a7366004613316565b610ea9565b61031a6103ba366004613316565b610eed565b61031a6103cd3660046134ad565b610fba565b6102f16103e0366004613342565b611064565b61040c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161025b565b603954610100900473ffffffffffffffffffffffffffffffffffffffff1661040c565b61024e6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b61031a61049e3660046134ee565b61115f565b6102f16104b1366004613342565b611258565b61024e611283565b6102776104cc366004613316565b611292565b6102776104df366004613316565b6112d6565b603c5473ffffffffffffffffffffffffffffffffffffffff1661040c565b603d5473ffffffffffffffffffffffffffffffffffffffff1661040c565b6102f16112f9565b610277610536366004613510565b611304565b61031a6105493660046134ad565b6113c1565b61031a61055c366004613556565b6115ff565b61031a61056f366004613510565b611959565b6102f16105823660046135c4565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260356020908152604080832093909416825291909152205490565b6102f16105c8366004613342565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b61031a610624366004613342565b611a4b565b61031a6106373660046134ad565b611c29565b60606037805461064b906135fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610677906135fd565b80156106c45780601f10610699576101008083540402835291602001916106c4565b820191906000526020600020905b8154815290600101906020018083116106a757829003601f168201915b5050505050905090565b60006106db338484611cdb565b50600192915050565b6000806106f060365490565b9050806106ff57600091505090565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526107bd917f0000000000000000000000000000000000000000000000000000000000000000169063d15e005390602401602060405180830381865afa158015610792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b6919061364b565b8290611d49565b91505090565b6001805460ff16806107d45750303b155b806107e0575060005481115b610871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b60015460ff161580156108ae57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f38370000000000000000000000000000000000000000000000000000000000008152509061096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b506109ab88888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611da092505050565b6109ea86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611db392505050565b603980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8b16179055603c805473ffffffffffffffffffffffffffffffffffffffff808f167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603d80548e8416921691909117905560398054918c16610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055610aa7611dc6565b603b819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb19e051f8af41150ccccb3fc2c2d8d15f4a4cf434f32a559ba75fe73d6eea20b8e8d8d8d8d8d8d8d8d604051610b3a999897969594939291906136ad565b60405180910390a38015610b7157600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603460205260408120546fffffffffffffffffffffffffffffffff165b92915050565b600080610bcb83611e8b565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260356020908152604080832033808552925290912054919250610c2991879190610c24906fffffffffffffffffffffffffffffffff861690613757565b611cdb565b610c34858583611f31565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd0919061376e565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015610d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d61919061378b565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090610dcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50603d546040517f5c19a95c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015290911690635c19a95c90602401600060405180830381600087803b158015610e3d57600080fd5b505af1158015610e51573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff851692507fc7a5523bfd09724fd56950e708e523ad6a61ab165b8e997a31d42357a77f0e0f9150600090a25050565b6000610ea4611f50565b905090565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106db918590610c249086906137ad565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610f91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50603d54610fb69073ffffffffffffffffffffffffffffffffffffffff168383611f89565b5050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461105e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091610bb9917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa1580156110fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611120919061364b565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260409020546fffffffffffffffffffffffffffffffff165b90611d49565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611203576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b508161120d575050565b603c54611253907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16848461205c565b505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603a6020526040812054610bb9565b60606038805461064b906135fd565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106db918590610c24908690613757565b6000806112e283611e8b565b90506112ef338583611f31565b5060019392505050565b6000610ea460365490565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152600090337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146113ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b506113b88585858561205c565b95945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa15801561142e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611452919061376e565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156114bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e3919061378b565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50603d5460408051808201909152600281527f383500000000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff868116911614156115dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b5061105e73ffffffffffffffffffffffffffffffffffffffff85168484611f89565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8816611681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50834211156040518060400160405280600281526020017f3738000000000000000000000000000000000000000000000000000000000000815250906116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b5073ffffffffffffffffffffffffffffffffffffffff87166000908152603a602052604081205490611724610e9a565b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9602082015273ffffffffffffffffffffffffffffffffffffffff808d1692820192909252908a1660608201526080810189905260a0810184905260c0810188905260e001604051602081830303815290604052805190602001206040516020016117e59291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa15801561186b573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f373900000000000000000000000000000000000000000000000000000000000081525090611911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b5061191d8260016137ad565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603a602052604090205561194e898989611cdb565b505050505050505050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146119fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50611a0a8484848461229d565b73ffffffffffffffffffffffffffffffffffffffff8316301461105e57603d5461105e9073ffffffffffffffffffffffffffffffffffffffff168484611f89565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611adc919061376e565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015611b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6d919061378b565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611bdb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50506039805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b5061125383838360006125bb565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526035602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517611d7e57600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b8051610fb69060379060208401906131cc565b8051610fb69060389060208401906131cc565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611df1612837565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60006fffffffffffffffffffffffffffffffff821115611f2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610868565b5090565b6112538383836fffffffffffffffffffffffffffffffff1660016125bb565b60007f0000000000000000000000000000000000000000000000000000000000000000461415611f815750603b5490565b610ea4611dc6565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1611fec573d6000803e3d6000fd5b50611ff684612841565b61105e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e7366657200000000000000000000006044820152606401610868565b600080612069848461290d565b60408051808201909152600281527f32340000000000000000000000000000000000000000000000000000000000006020820152909150816120d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291612135918491700100000000000000000000000000000000900416611d49565b61213f8387611d49565b6121499190613757565b905061215485611e8b565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556121bc876121b785611e8b565b61294c565b60006121c882886137ad565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161222a91815260200190565b60405180910390a3604080518281526020810184905290810187905273ffffffffffffffffffffffffffffffffffffffff808a1691908b16907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35050159695505050505050565b60006122a9838361290d565b60408051808201909152600281527f3235000000000000000000000000000000000000000000000000000000000000602082015290915081612318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291612375918491700100000000000000000000000000000000900416611d49565b61237f8386611d49565b6123899190613757565b905061239484611e8b565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556123fc876123f785611e8b565b612ac8565b848111156124db5760006124108683613757565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161247291815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff89169081907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a3506125b2565b60006124e78287613757565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161254991815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff80891691908a16907f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f90906060015b60405180910390a3505b50505050505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201819052916000917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa158015612652573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612676919061364b565b905060006126bc826111598973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b90506000612702836111598973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b905061271088888886612b2c565b84156127dd576040517fd5ed393300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015289811660248301528881166044830152606482018890526084820184905260a482018390527f0000000000000000000000000000000000000000000000000000000000000000169063d5ed39339060c401600060405180830381600087803b1580156127c457600080fd5b505af11580156127d8573d6000803e3d6000fd5b505050505b73ffffffffffffffffffffffffffffffffffffffff8088169089167f4beccb90f994c31aced7a23b5611020728a23d8ec5cddd1a3e9d97b96fda8666612823898761290d565b6040805191825260208201889052016125a8565b6060610ea461063c565b6000612881565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156128c057602081146128fa576128bb7f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f612848565b612907565b823b6128f1576128f17f475076323a206e6f74206120636f6e74726163740000000000000000000000006014612848565b60019150612907565b3d6000803e600051151591505b50919050565b600081156b033b2e3c9fd0803ce80000006002840419048411171561293157600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b60365461296b6fffffffffffffffffffffffffffffffff8316826137ad565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff166129b083826137c5565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff93909316929092179091556039546101009004168015612ac1576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590526fffffffffffffffffffffffffffffffff841660448301528216906331873e2e90606401600060405180830381600087803b158015612aad57600080fd5b505af115801561194e573d6000803e3d6000fd5b5050505050565b603654612ae76fffffffffffffffffffffffffffffffff831682613757565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff166129b083826137f9565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291612b88918491700100000000000000000000000000000000900416611d49565b612b928385611d49565b612b9c9190613757565b90506000612bde8673ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff871660009081526034602052604081205491925090612c3990839070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16611d49565b612c438387611d49565b612c4d9190613757565b9050612c5885611e8b565b73ffffffffffffffffffffffffffffffffffffffff8916600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612cb785611e8b565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612d298888612d24612d1f8a8a61290d565b611e8b565b612f21565b8215612dd85760405183815273ffffffffffffffffffffffffffffffffffffffff8916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805184815260208101859052808201879052905173ffffffffffffffffffffffffffffffffffffffff8a169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015612e145750600081115b15612ec25760405181815273ffffffffffffffffffffffffffffffffffffffff8816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101839052808201879052905173ffffffffffffffffffffffffffffffffffffffff89169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516125a891815260200190565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff16612f6382826137f9565b73ffffffffffffffffffffffffffffffffffffffff85811660009081526034602052604080822080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9586161790559186168152205416612fd783826137c5565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff939093169290921790915560395461010090041680156131c4576036546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018390526fffffffffffffffffffffffffffffffff861660448301528316906331873e2e90606401600060405180830381600087803b1580156130d757600080fd5b505af11580156130eb573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16146125b2576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018390526fffffffffffffffffffffffffffffffff851660448301528316906331873e2e90606401600060405180830381600087803b1580156131aa57600080fd5b505af11580156131be573d6000803e3d6000fd5b50505050505b505050505050565b8280546131d8906135fd565b90600052602060002090601f0160209004810192826131fa5760008555613240565b82601f1061321357805160ff1916838001178555613240565b82800160010185558215613240579182015b82811115613240578251825591602001919060010190613225565b50611f2d9291505b80821115611f2d5760008155600101613248565b6000815180845260005b8181101561328257602081850181015186830182015201613266565b81811115613294576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006132da602083018461325c565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461330357600080fd5b50565b8035613311816132e1565b919050565b6000806040838503121561332957600080fd5b8235613334816132e1565b946020939093013593505050565b60006020828403121561335457600080fd5b81356132da816132e1565b803560ff8116811461331157600080fd5b60008083601f84011261338257600080fd5b50813567ffffffffffffffff81111561339a57600080fd5b6020830191508360208285010111156133b257600080fd5b9250929050565b60008060008060008060008060008060006101008c8e0312156133db57600080fd5b6133e48c613306565b9a506133f260208d01613306565b995061340060408d01613306565b985061340e60608d01613306565b975061341c60808d0161335f565b965067ffffffffffffffff8060a08e0135111561343857600080fd5b6134488e60a08f01358f01613370565b909750955060c08d013581101561345e57600080fd5b61346e8e60c08f01358f01613370565b909550935060e08d013581101561348457600080fd5b506134958d60e08e01358e01613370565b81935080925050509295989b509295989b9093969950565b6000806000606084860312156134c257600080fd5b83356134cd816132e1565b925060208401356134dd816132e1565b929592945050506040919091013590565b6000806040838503121561350157600080fd5b50508035926020909101359150565b6000806000806080858703121561352657600080fd5b8435613531816132e1565b93506020850135613541816132e1565b93969395505050506040820135916060013590565b600080600080600080600060e0888a03121561357157600080fd5b873561357c816132e1565b9650602088013561358c816132e1565b955060408801359450606088013593506135a86080890161335f565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156135d757600080fd5b82356135e2816132e1565b915060208301356135f2816132e1565b809150509250929050565b600181811c9082168061361157607f821691505b60208210811415612907577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561365d57600080fd5b5051919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808c168352808b1660208401525060ff8916604083015260c060608301526136f060c08301888a613664565b8281036080840152613703818789613664565b905082810360a0840152613718818587613664565b9c9b505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561376957613769613728565b500390565b60006020828403121561378057600080fd5b81516132da816132e1565b60006020828403121561379d57600080fd5b815180151581146132da57600080fd5b600082198211156137c0576137c0613728565b500190565b60006fffffffffffffffffffffffffffffffff8083168185168083038211156137f0576137f0613728565b01949350505050565b60006fffffffffffffffffffffffffffffffff8381169083168181101561382257613822613728565b03939250505056fea2646970667358221220fc681d3012cfffb9497068f8162f8010ee20de480cb3e07cde9ef58002ca545b64736f6c634300080a0033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x3B7C CODESIZE SUB DUP1 PUSH3 0x3B7C DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x38 SWAP2 PUSH3 0x21F JUMP JUMPDEST DUP1 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xB DUP2 MSTORE PUSH1 0x20 ADD PUSH11 0x105513D2D15397D2535413 PUSH1 0xAA SHL DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xB DUP2 MSTORE PUSH1 0x20 ADD PUSH11 0x105513D2D15397D2535413 PUSH1 0xAA SHL DUP2 MSTORE POP PUSH1 0x0 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xCB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0xF1 SWAP2 SWAP1 PUSH3 0x21F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE DUP3 MLOAD PUSH3 0x112 SWAP1 PUSH1 0x37 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH3 0x160 JUMP JUMPDEST POP DUP2 MLOAD PUSH3 0x128 SWAP1 PUSH1 0x38 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x160 JUMP JUMPDEST POP PUSH1 0x39 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE POP POP CHAINID PUSH1 0xC0 MSTORE POP PUSH3 0x283 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x16E SWAP1 PUSH3 0x246 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x192 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x1DD JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x1AD JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x1DD JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x1DD JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x1DD JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x1C0 JUMP JUMPDEST POP PUSH3 0x1EB SWAP3 SWAP2 POP PUSH3 0x1EF JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x1EB JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x1F0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x21C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x232 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x23F DUP2 PUSH3 0x206 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x25B JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x27D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x3860 PUSH3 0x31C PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH2 0x1F54 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x3EA ADD MSTORE DUP2 DUP2 PUSH2 0x74B ADD MSTORE DUP2 DUP2 PUSH2 0x8B0 ADD MSTORE DUP2 DUP2 PUSH2 0xAAF ADD MSTORE DUP2 DUP2 PUSH2 0xF24 ADD MSTORE DUP2 DUP2 PUSH2 0xFF1 ADD MSTORE DUP2 DUP2 PUSH2 0x10B3 ADD MSTORE DUP2 DUP2 PUSH2 0x1196 ADD MSTORE DUP2 DUP2 PUSH2 0x1216 ADD MSTORE DUP2 DUP2 PUSH2 0x133E ADD MSTORE DUP2 DUP2 PUSH2 0x1990 ADD MSTORE DUP2 DUP2 PUSH2 0x1C60 ADD MSTORE DUP2 DUP2 PUSH2 0x2609 ADD MSTORE PUSH2 0x2780 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0xC43 ADD MSTORE DUP2 DUP2 PUSH2 0x13C5 ADD MSTORE PUSH2 0x1A4F ADD MSTORE PUSH2 0x3860 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 0x241 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x75D26413 GT PUSH2 0x145 JUMPI DUP1 PUSH4 0xB1BF962D GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xD7020D0A GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xE0753986 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE0753986 EQ PUSH2 0x5BA JUMPI DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x616 JUMPI DUP1 PUSH4 0xF866C319 EQ PUSH2 0x629 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD7020D0A EQ PUSH2 0x561 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x574 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB1BF962D EQ PUSH2 0x520 JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x528 JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0x53B JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x54E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95D89B41 GT PUSH2 0x114 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x4D1 JUMPI DUP1 PUSH4 0xAE167335 EQ PUSH2 0x4E4 JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x502 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x4B6 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x4BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x75D26413 EQ PUSH2 0x431 JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x454 JUMPI DUP1 PUSH4 0x7DF5BD3B EQ PUSH2 0x490 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x4A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2F114618 GT PUSH2 0x1D8 JUMPI DUP1 PUSH4 0x39509351 GT PUSH2 0x1A7 JUMPI DUP1 PUSH4 0x6FD97676 GT PUSH2 0x18C JUMPI DUP1 PUSH4 0x6FD97676 EQ PUSH2 0x3BF JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3D2 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x3E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x39509351 EQ PUSH2 0x399 JUMPI DUP1 PUSH4 0x4EFECAA5 EQ PUSH2 0x3AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2F114618 EQ PUSH2 0x342 JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x355 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x37C JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0x214 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2FF JUMPI DUP1 PUSH4 0x183FB413 EQ PUSH2 0x307 JUMPI DUP1 PUSH4 0x1DA24F3E EQ PUSH2 0x31C JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x32F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x246 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x264 JUMPI DUP1 PUSH4 0xAFBCDC9 EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0xBD7AD3B EQ PUSH2 0x2E9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x24E PUSH2 0x63C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x25B SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x277 PUSH2 0x272 CALLDATASIZE PUSH1 0x4 PUSH2 0x3316 JUMP JUMPDEST PUSH2 0x6CE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x2D4 PUSH2 0x295 CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x36 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x2F1 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0x6E4 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x315 CALLDATASIZE PUSH1 0x4 PUSH2 0x33B9 JUMP JUMPDEST PUSH2 0x7C3 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2F1 PUSH2 0x32A CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0xB80 JUMP JUMPDEST PUSH2 0x277 PUSH2 0x33D CALLDATASIZE PUSH1 0x4 PUSH2 0x34AD JUMP JUMPDEST PUSH2 0xBBF JUMP JUMPDEST PUSH2 0x31A PUSH2 0x350 CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0xC3F JUMP JUMPDEST PUSH2 0x2F1 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0xE9A JUMP JUMPDEST PUSH2 0x277 PUSH2 0x3A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x3316 JUMP JUMPDEST PUSH2 0xEA9 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x3BA CALLDATASIZE PUSH1 0x4 PUSH2 0x3316 JUMP JUMPDEST PUSH2 0xEED JUMP JUMPDEST PUSH2 0x31A PUSH2 0x3CD CALLDATASIZE PUSH1 0x4 PUSH2 0x34AD JUMP JUMPDEST PUSH2 0xFBA JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0x3E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0x1064 JUMP JUMPDEST PUSH2 0x40C PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25B JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x40C JUMP JUMPDEST PUSH2 0x24E PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x49E CALLDATASIZE PUSH1 0x4 PUSH2 0x34EE JUMP JUMPDEST PUSH2 0x115F JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0x4B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0x1258 JUMP JUMPDEST PUSH2 0x24E PUSH2 0x1283 JUMP JUMPDEST PUSH2 0x277 PUSH2 0x4CC CALLDATASIZE PUSH1 0x4 PUSH2 0x3316 JUMP JUMPDEST PUSH2 0x1292 JUMP JUMPDEST PUSH2 0x277 PUSH2 0x4DF CALLDATASIZE PUSH1 0x4 PUSH2 0x3316 JUMP JUMPDEST PUSH2 0x12D6 JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x40C JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x40C JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0x12F9 JUMP JUMPDEST PUSH2 0x277 PUSH2 0x536 CALLDATASIZE PUSH1 0x4 PUSH2 0x3510 JUMP JUMPDEST PUSH2 0x1304 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x549 CALLDATASIZE PUSH1 0x4 PUSH2 0x34AD JUMP JUMPDEST PUSH2 0x13C1 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x55C CALLDATASIZE PUSH1 0x4 PUSH2 0x3556 JUMP JUMPDEST PUSH2 0x15FF JUMP JUMPDEST PUSH2 0x31A PUSH2 0x56F CALLDATASIZE PUSH1 0x4 PUSH2 0x3510 JUMP JUMPDEST PUSH2 0x1959 JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0x582 CALLDATASIZE PUSH1 0x4 PUSH2 0x35C4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0x5C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x624 CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0x1A4B JUMP JUMPDEST PUSH2 0x31A PUSH2 0x637 CALLDATASIZE PUSH1 0x4 PUSH2 0x34AD JUMP JUMPDEST PUSH2 0x1C29 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0x64B SWAP1 PUSH2 0x35FD JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x677 SWAP1 PUSH2 0x35FD JUMP JUMPDEST DUP1 ISZERO PUSH2 0x6C4 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x699 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6C4 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 0x6A7 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6DB CALLER DUP5 DUP5 PUSH2 0x1CDB JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6F0 PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x6FF JUMPI PUSH1 0x0 SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x7BD SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x792 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7B6 SWAP2 SWAP1 PUSH2 0x364B JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1D49 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x7D4 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x7E0 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x871 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x8AE JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x96B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH2 0x9AB DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1DA0 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x9EA DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1DB3 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x39 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0xFF DUP12 AND OR SWAP1 SSTORE PUSH1 0x3C DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP16 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x3D DUP1 SLOAD DUP15 DUP5 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x39 DUP1 SLOAD SWAP2 DUP13 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0xAA7 PUSH2 0x1DC6 JUMP JUMPDEST PUSH1 0x3B DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xB19E051F8AF41150CCCCB3FC2C2D8D15F4A4CF434F32A559BA75FE73D6EEA20B DUP15 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 PUSH1 0x40 MLOAD PUSH2 0xB3A SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x36AD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0xB71 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xBCB DUP4 PUSH2 0x1E8B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0xC29 SWAP2 DUP8 SWAP2 SWAP1 PUSH2 0xC24 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 PUSH2 0x3757 JUMP JUMPDEST PUSH2 0x1CDB JUMP JUMPDEST PUSH2 0xC34 DUP6 DUP6 DUP4 PUSH2 0x1F31 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCAC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCD0 SWAP2 SWAP1 PUSH2 0x376E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD3D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD61 SWAP2 SWAP1 PUSH2 0x378B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xDCF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0x5C19A95C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x5C19A95C SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE51 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP3 POP PUSH32 0xC7A5523BFD09724FD56950E708E523AD6A61AB165B8E997A31D42357A77F0E0F SWAP2 POP PUSH1 0x0 SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEA4 PUSH2 0x1F50 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 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 0x6DB SWAP2 DUP6 SWAP1 PUSH2 0xC24 SWAP1 DUP7 SWAP1 PUSH2 0x37AD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xF91 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH2 0xFB6 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH2 0x1F89 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x105E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH2 0xBB9 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1120 SWAP2 SWAP1 PUSH2 0x364B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1203 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP DUP2 PUSH2 0x120D JUMPI POP POP JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH2 0x1253 SWAP1 PUSH32 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x205C JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xBB9 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x38 DUP1 SLOAD PUSH2 0x64B SWAP1 PUSH2 0x35FD JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 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 0x6DB SWAP2 DUP6 SWAP1 PUSH2 0xC24 SWAP1 DUP7 SWAP1 PUSH2 0x3757 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x12E2 DUP4 PUSH2 0x1E8B JUMP JUMPDEST SWAP1 POP PUSH2 0x12EF CALLER DUP6 DUP4 PUSH2 0x1F31 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEA4 PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x13AB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH2 0x13B8 DUP6 DUP6 DUP6 DUP6 PUSH2 0x205C JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x142E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1452 SWAP2 SWAP1 PUSH2 0x376E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14E3 SWAP2 SWAP1 PUSH2 0x378B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1551 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3835000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x15DD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH2 0x105E PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 DUP5 PUSH2 0x1F89 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x1681 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x16F4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x1724 PUSH2 0xE9A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP11 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x17E5 SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x186B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1911 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH2 0x191D DUP3 PUSH1 0x1 PUSH2 0x37AD JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x194E DUP10 DUP10 DUP10 PUSH2 0x1CDB JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x19FD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH2 0x1A0A DUP5 DUP5 DUP5 DUP5 PUSH2 0x229D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ADDRESS EQ PUSH2 0x105E JUMPI PUSH1 0x3D SLOAD PUSH2 0x105E SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1F89 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AB8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1ADC SWAP2 SWAP1 PUSH2 0x376E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B49 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B6D SWAP2 SWAP1 PUSH2 0x378B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1BDB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP POP PUSH1 0x39 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1CCD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH2 0x1253 DUP4 DUP4 DUP4 PUSH1 0x0 PUSH2 0x25BB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1D7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xFB6 SWAP1 PUSH1 0x37 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x31CC JUMP JUMPDEST DUP1 MLOAD PUSH2 0xFB6 SWAP1 PUSH1 0x38 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x31CC JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x1DF1 PUSH2 0x2837 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1F2D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x868 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x1253 DUP4 DUP4 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH2 0x25BB JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0x1F81 JUMPI POP PUSH1 0x3B SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xEA4 PUSH2 0x1DC6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x1FEC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1FF6 DUP5 PUSH2 0x2841 JUMP JUMPDEST PUSH2 0x105E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x868 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2069 DUP5 DUP5 PUSH2 0x290D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x20D8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x2135 SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x213F DUP4 DUP8 PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x2149 SWAP2 SWAP1 PUSH2 0x3757 JUMP JUMPDEST SWAP1 POP PUSH2 0x2154 DUP6 PUSH2 0x1E8B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x21BC DUP8 PUSH2 0x21B7 DUP6 PUSH2 0x1E8B JUMP JUMPDEST PUSH2 0x294C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x21C8 DUP3 DUP9 PUSH2 0x37AD JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x222A SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 AND SWAP2 SWAP1 DUP12 AND SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP ISZERO SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22A9 DUP4 DUP4 PUSH2 0x290D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x2318 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x2375 SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x237F DUP4 DUP7 PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x2389 SWAP2 SWAP1 PUSH2 0x3757 JUMP JUMPDEST SWAP1 POP PUSH2 0x2394 DUP5 PUSH2 0x1E8B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x23FC DUP8 PUSH2 0x23F7 DUP6 PUSH2 0x1E8B JUMP JUMPDEST PUSH2 0x2AC8 JUMP JUMPDEST DUP5 DUP2 GT ISZERO PUSH2 0x24DB JUMPI PUSH1 0x0 PUSH2 0x2410 DUP7 DUP4 PUSH2 0x3757 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x2472 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 DUP2 SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x25B2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x24E7 DUP3 DUP8 PUSH2 0x3757 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x2549 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP2 SWAP1 DUP11 AND SWAP1 PUSH32 0x4CF25BC1D991C17529C25213D3CC0CDA295EEAAD5F13F361969B12EA48015F90 SWAP1 PUSH1 0x60 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2652 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2676 SWAP2 SWAP1 PUSH2 0x364B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x26BC DUP3 PUSH2 0x1159 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2702 DUP4 PUSH2 0x1159 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x2710 DUP9 DUP9 DUP9 DUP7 PUSH2 0x2B2C JUMP JUMPDEST DUP5 ISZERO PUSH2 0x27DD JUMPI PUSH1 0x40 MLOAD PUSH32 0xD5ED393300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP10 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP9 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xD5ED3933 SWAP1 PUSH1 0xC4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x27C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x27D8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND SWAP1 DUP10 AND PUSH32 0x4BECCB90F994C31ACED7A23B5611020728A23D8EC5CDDD1A3E9D97B96FDA8666 PUSH2 0x2823 DUP10 DUP8 PUSH2 0x290D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP9 SWAP1 MSTORE ADD PUSH2 0x25A8 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xEA4 PUSH2 0x63C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2881 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x28C0 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x28FA JUMPI PUSH2 0x28BB PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x2848 JUMP JUMPDEST PUSH2 0x2907 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x28F1 JUMPI PUSH2 0x28F1 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x2848 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x2907 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x2931 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x296B PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x37AD JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x29B0 DUP4 DUP3 PUSH2 0x37C5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x2AC1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x194E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x2AE7 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x3757 JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x29B0 DUP4 DUP3 PUSH2 0x37F9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x2B88 SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x2B92 DUP4 DUP6 PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x2B9C SWAP2 SWAP1 PUSH2 0x3757 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2BDE DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x2C39 SWAP1 DUP4 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x2C43 DUP4 DUP8 PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x2C4D SWAP2 SWAP1 PUSH2 0x3757 JUMP JUMPDEST SWAP1 POP PUSH2 0x2C58 DUP6 PUSH2 0x1E8B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2CB7 DUP6 PUSH2 0x1E8B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2D29 DUP9 DUP9 PUSH2 0x2D24 PUSH2 0x2D1F DUP11 DUP11 PUSH2 0x290D JUMP JUMPDEST PUSH2 0x1E8B JUMP JUMPDEST PUSH2 0x2F21 JUMP JUMPDEST DUP3 ISZERO PUSH2 0x2DD8 JUMPI PUSH1 0x40 MLOAD DUP4 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x2E14 JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST ISZERO PUSH2 0x2EC2 JUMPI PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP9 PUSH1 0x40 MLOAD PUSH2 0x25A8 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2F63 DUP3 DUP3 PUSH2 0x37F9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 AND OR SWAP1 SSTORE SWAP2 DUP7 AND DUP2 MSTORE KECCAK256 SLOAD AND PUSH2 0x2FD7 DUP4 DUP3 PUSH2 0x37C5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x31C4 JUMPI PUSH1 0x36 SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x30D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x30EB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x25B2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x31AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x31BE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x31D8 SWAP1 PUSH2 0x35FD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x31FA JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x3240 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x3213 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x3240 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x3240 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x3240 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x3225 JUMP JUMPDEST POP PUSH2 0x1F2D SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1F2D JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x3248 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3282 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x3266 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x3294 JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x32DA PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x325C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3303 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3311 DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3329 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3334 DUP2 PUSH2 0x32E1 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 0x3354 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x32DA DUP2 PUSH2 0x32E1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3311 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x3382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x339A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x33B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x100 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x33DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x33E4 DUP13 PUSH2 0x3306 JUMP JUMPDEST SWAP11 POP PUSH2 0x33F2 PUSH1 0x20 DUP14 ADD PUSH2 0x3306 JUMP JUMPDEST SWAP10 POP PUSH2 0x3400 PUSH1 0x40 DUP14 ADD PUSH2 0x3306 JUMP JUMPDEST SWAP9 POP PUSH2 0x340E PUSH1 0x60 DUP14 ADD PUSH2 0x3306 JUMP JUMPDEST SWAP8 POP PUSH2 0x341C PUSH1 0x80 DUP14 ADD PUSH2 0x335F JUMP JUMPDEST SWAP7 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x3438 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3448 DUP15 PUSH1 0xA0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x3370 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0xC0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x345E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x346E DUP15 PUSH1 0xC0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x3370 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP PUSH1 0xE0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x3484 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3495 DUP14 PUSH1 0xE0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x3370 JUMP JUMPDEST DUP2 SWAP4 POP DUP1 SWAP3 POP POP POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x34C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x34CD DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x34DD DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3501 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3526 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x3531 DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x3541 DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x3571 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x357C DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x358C DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x35A8 PUSH1 0x80 DUP10 ADD PUSH2 0x335F JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x35D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x35E2 DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x35F2 DUP2 PUSH2 0x32E1 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x3611 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x2907 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x365D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 ADD ADD MSTORE PUSH1 0x0 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP5 ADD ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND DUP4 MSTORE DUP1 DUP12 AND PUSH1 0x20 DUP5 ADD MSTORE POP PUSH1 0xFF DUP10 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xC0 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x36F0 PUSH1 0xC0 DUP4 ADD DUP9 DUP11 PUSH2 0x3664 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x3703 DUP2 DUP8 DUP10 PUSH2 0x3664 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x3718 DUP2 DUP6 DUP8 PUSH2 0x3664 JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x3769 JUMPI PUSH2 0x3769 PUSH2 0x3728 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3780 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x32DA DUP2 PUSH2 0x32E1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x379D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x32DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x37C0 JUMPI PUSH2 0x37C0 PUSH2 0x3728 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x37F0 JUMPI PUSH2 0x37F0 PUSH2 0x3728 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x3822 JUMPI PUSH2 0x3822 PUSH2 0x3728 JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xFC PUSH9 0x1D3012CFFFB9497068 0xF8 AND 0x2F DUP1 LT 0xEE KECCAK256 0xDE BASEFEE 0xC 0xB3 0xE0 PUSH29 0xDE9EF58002CA545B64736F6C634300080A003300000000000000000000 ","sourceMap":"464:734:98:-:0;;;928:1:71;886:43;;775:74:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;806:4;1858::97;988:195:105;;;;;;;;;;;;;-1:-1:-1;;;988:195:105;;;;;;;;;;;;;;;;-1:-1:-1;;;988:195:105;;;1894:1:97;1116:4:105;1122;1128:6;1136:8;817:4:104;823;829:6;837:8;2780:4:103;-1:-1:-1;;;;;2780:23:103;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2759:46:103;;;2811:12;;;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;2829:16:103;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;2851:9:103;:20;;-1:-1:-1;;2851:20:103;;;;;;;;;;;;-1:-1:-1;;;;;;;2877:11:103;;;-1:-1:-1;;630:13:102;619:24;;-1:-1:-1;464:734:98;;-1:-1:-1;;;;;;;464:734:98;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;464:734:98;;;-1:-1:-1;464:734:98;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:138:201;-1:-1:-1;;;;;96:31:201;;86:42;;76:70;;142:1;139;132:12;76:70;14:138;:::o;157:272::-;241:6;294:2;282:9;273:7;269:23;265:32;262:52;;;310:1;307;300:12;262:52;342:9;336:16;361:38;393:5;361:38;:::i;:::-;418:5;157:272;-1:-1:-1;;;157:272:201:o;728:380::-;807:1;803:12;;;;850;;;871:61;;925:4;917:6;913:17;903:27;;871:61;978:2;970:6;967:14;947:18;944:38;941:161;;;1024:10;1019:3;1015:20;1012:1;1005:31;1059:4;1056:1;1049:15;1087:4;1084:1;1077:15;941:161;;728:380;;;:::o;:::-;464:734:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ATOKEN_REVISION_25390":{"entryPoint":null,"id":25390,"parameterSlots":0,"returnSlots":0},"@DOMAIN_SEPARATOR_25926":{"entryPoint":3738,"id":25926,"parameterSlots":0,"returnSlots":1},"@DOMAIN_SEPARATOR_27772":{"entryPoint":8016,"id":27772,"parameterSlots":0,"returnSlots":1},"@EIP712_REVISION_27731":{"entryPoint":null,"id":27731,"parameterSlots":0,"returnSlots":0},"@PERMIT_TYPEHASH_25387":{"entryPoint":null,"id":25387,"parameterSlots":0,"returnSlots":0},"@POOL_27929":{"entryPoint":null,"id":27929,"parameterSlots":0,"returnSlots":0},"@RESERVE_TREASURY_ADDRESS_25677":{"entryPoint":null,"id":25677,"parameterSlots":0,"returnSlots":1},"@UNDERLYING_ASSET_ADDRESS_25687":{"entryPoint":null,"id":25687,"parameterSlots":0,"returnSlots":1},"@_EIP712BaseId_25954":{"entryPoint":10295,"id":25954,"parameterSlots":0,"returnSlots":1},"@_approve_28315":{"entryPoint":7387,"id":28315,"parameterSlots":3,"returnSlots":0},"@_burnScaled_28821":{"entryPoint":8861,"id":28821,"parameterSlots":4,"returnSlots":0},"@_burn_28498":{"entryPoint":10952,"id":28498,"parameterSlots":2,"returnSlots":0},"@_calculateDomainSeparator_27815":{"entryPoint":7622,"id":27815,"parameterSlots":0,"returnSlots":1},"@_mintScaled_28703":{"entryPoint":8284,"id":28703,"parameterSlots":4,"returnSlots":1},"@_mint_28439":{"entryPoint":10572,"id":28439,"parameterSlots":2,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_setDecimals_28348":{"entryPoint":null,"id":28348,"parameterSlots":1,"returnSlots":0},"@_setName_28326":{"entryPoint":7584,"id":28326,"parameterSlots":1,"returnSlots":0},"@_setSymbol_28337":{"entryPoint":7603,"id":28337,"parameterSlots":1,"returnSlots":0},"@_transfer_25893":{"entryPoint":9659,"id":25893,"parameterSlots":4,"returnSlots":0},"@_transfer_25912":{"entryPoint":7985,"id":25912,"parameterSlots":3,"returnSlots":0},"@_transfer_28290":{"entryPoint":12065,"id":28290,"parameterSlots":3,"returnSlots":0},"@_transfer_28965":{"entryPoint":11052,"id":28965,"parameterSlots":4,"returnSlots":0},"@allowance_28089":{"entryPoint":null,"id":28089,"parameterSlots":2,"returnSlots":1},"@approve_28110":{"entryPoint":1742,"id":28110,"parameterSlots":2,"returnSlots":1},"@balanceOf_25636":{"entryPoint":4196,"id":25636,"parameterSlots":1,"returnSlots":1},"@balanceOf_28020":{"entryPoint":null,"id":28020,"parameterSlots":1,"returnSlots":1},"@burn_25564":{"entryPoint":6489,"id":25564,"parameterSlots":4,"returnSlots":0},"@decimals_27995":{"entryPoint":null,"id":27995,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_28206":{"entryPoint":4754,"id":28206,"parameterSlots":2,"returnSlots":1},"@delegateUnderlyingTo_26032":{"entryPoint":3135,"id":26032,"parameterSlots":1,"returnSlots":0},"@getIncentivesController_28030":{"entryPoint":null,"id":28030,"parameterSlots":0,"returnSlots":1},"@getLastTransferResult_117":{"entryPoint":10305,"id":117,"parameterSlots":1,"returnSlots":1},"@getPreviousIndex_28607":{"entryPoint":null,"id":28607,"parameterSlots":1,"returnSlots":1},"@getRevision_25404":{"entryPoint":null,"id":25404,"parameterSlots":0,"returnSlots":1},"@getScaledUserBalanceAndSupply_28580":{"entryPoint":null,"id":28580,"parameterSlots":1,"returnSlots":2},"@handleRepayment_25721":{"entryPoint":4026,"id":25721,"parameterSlots":3,"returnSlots":0},"@increaseAllowance_28179":{"entryPoint":3753,"id":28179,"parameterSlots":2,"returnSlots":1},"@initialize_25500":{"entryPoint":1987,"id":25500,"parameterSlots":11,"returnSlots":0},"@isConstructor_10568":{"entryPoint":null,"id":10568,"parameterSlots":0,"returnSlots":1},"@mintToTreasury_25592":{"entryPoint":4447,"id":25592,"parameterSlots":2,"returnSlots":0},"@mint_25525":{"entryPoint":4868,"id":25525,"parameterSlots":4,"returnSlots":1},"@name_27975":{"entryPoint":1596,"id":27975,"parameterSlots":0,"returnSlots":1},"@nonces_25943":{"entryPoint":4696,"id":25943,"parameterSlots":1,"returnSlots":1},"@nonces_27785":{"entryPoint":null,"id":27785,"parameterSlots":1,"returnSlots":1},"@permit_25816":{"entryPoint":5631,"id":25816,"parameterSlots":7,"returnSlots":0},"@rayDiv_21198":{"entryPoint":10509,"id":21198,"parameterSlots":2,"returnSlots":1},"@rayMul_21186":{"entryPoint":7497,"id":21186,"parameterSlots":2,"returnSlots":1},"@rescueTokens_25984":{"entryPoint":5057,"id":25984,"parameterSlots":3,"returnSlots":0},"@safeTransfer_78":{"entryPoint":8073,"id":78,"parameterSlots":3,"returnSlots":0},"@scaledBalanceOf_28559":{"entryPoint":2944,"id":28559,"parameterSlots":1,"returnSlots":1},"@scaledTotalSupply_28592":{"entryPoint":4857,"id":28592,"parameterSlots":0,"returnSlots":1},"@setIncentivesController_28044":{"entryPoint":6731,"id":28044,"parameterSlots":1,"returnSlots":0},"@symbol_27985":{"entryPoint":4739,"id":27985,"parameterSlots":0,"returnSlots":1},"@toUint128_1626":{"entryPoint":7819,"id":1626,"parameterSlots":1,"returnSlots":1},"@totalSupply_25667":{"entryPoint":1764,"id":25667,"parameterSlots":0,"returnSlots":1},"@totalSupply_28005":{"entryPoint":null,"id":28005,"parameterSlots":0,"returnSlots":1},"@transferFrom_28152":{"entryPoint":3007,"id":28152,"parameterSlots":3,"returnSlots":1},"@transferOnLiquidation_25613":{"entryPoint":7209,"id":25613,"parameterSlots":3,"returnSlots":0},"@transferUnderlyingTo_25707":{"entryPoint":3821,"id":25707,"parameterSlots":2,"returnSlots":0},"@transfer_28071":{"entryPoint":4822,"id":28071,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":13062,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_string_calldata":{"entryPoint":13168,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":13122,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":14190,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":13764,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":13485,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256":{"entryPoint":13584,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":13654,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":13078,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":14219,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IAaveIncentivesController_$3875":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$4860t_addresst_addresst_contract$_IAaveIncentivesController_$3875t_uint8t_string_calldata_ptrt_string_calldata_ptrt_bytes_calldata_ptr":{"entryPoint":13241,"id":null,"parameterSlots":2,"returnSlots":11},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":13899,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256":{"entryPoint":13550,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_uint8":{"entryPoint":13151,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_string":{"entryPoint":12892,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string_calldata":{"entryPoint":13924,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":13997,"id":null,"parameterSlots":10,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IAaveIncentivesController_$3875__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":12999,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":14277,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":14253,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint128":{"entryPoint":14329,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":14167,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":13821,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":14120,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":13025,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:16120:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"64:481:201","statements":[{"nodeType":"YulVariableDeclaration","src":"74:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"94:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"88:5:201"},"nodeType":"YulFunctionCall","src":"88:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"78:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"116:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"121:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"109:6:201"},"nodeType":"YulFunctionCall","src":"109:19:201"},"nodeType":"YulExpressionStatement","src":"109:19:201"},{"nodeType":"YulVariableDeclaration","src":"137:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"146:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"141:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"208:110:201","statements":[{"nodeType":"YulVariableDeclaration","src":"222:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"232:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"226:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"264:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"269:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"260:3:201"},"nodeType":"YulFunctionCall","src":"260:11:201"},{"name":"_1","nodeType":"YulIdentifier","src":"273:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"256:3:201"},"nodeType":"YulFunctionCall","src":"256:20:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"292:5:201"},{"name":"i","nodeType":"YulIdentifier","src":"299:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"288:3:201"},"nodeType":"YulFunctionCall","src":"288:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"303:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"284:3:201"},"nodeType":"YulFunctionCall","src":"284:22:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"278:5:201"},"nodeType":"YulFunctionCall","src":"278:29:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"249:6:201"},"nodeType":"YulFunctionCall","src":"249:59:201"},"nodeType":"YulExpressionStatement","src":"249:59:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"167:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"170:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"164:2:201"},"nodeType":"YulFunctionCall","src":"164:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"178:21:201","statements":[{"nodeType":"YulAssignment","src":"180:17:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"189:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"192:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"185:3:201"},"nodeType":"YulFunctionCall","src":"185:12:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"180:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"160:3:201","statements":[]},"src":"156:162:201"},{"body":{"nodeType":"YulBlock","src":"352:62:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"381:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"386:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"377:3:201"},"nodeType":"YulFunctionCall","src":"377:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"395:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"373:3:201"},"nodeType":"YulFunctionCall","src":"373:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"402:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"366:6:201"},"nodeType":"YulFunctionCall","src":"366:38:201"},"nodeType":"YulExpressionStatement","src":"366:38:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"333:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"336:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"330:2:201"},"nodeType":"YulFunctionCall","src":"330:13:201"},"nodeType":"YulIf","src":"327:87:201"},{"nodeType":"YulAssignment","src":"423:116:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"438:3:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"451:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"459:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"447:3:201"},"nodeType":"YulFunctionCall","src":"447:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"464:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"443:3:201"},"nodeType":"YulFunctionCall","src":"443:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"434:3:201"},"nodeType":"YulFunctionCall","src":"434:98:201"},{"kind":"number","nodeType":"YulLiteral","src":"534:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"430:3:201"},"nodeType":"YulFunctionCall","src":"430:109:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"423:3:201"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"41:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"48:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"56:3:201","type":""}],"src":"14:531:201"},{"body":{"nodeType":"YulBlock","src":"671:99:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"688:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"699:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"681:6:201"},"nodeType":"YulFunctionCall","src":"681:21:201"},"nodeType":"YulExpressionStatement","src":"681:21:201"},{"nodeType":"YulAssignment","src":"711:53:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"737:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"749:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"760:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"745:3:201"},"nodeType":"YulFunctionCall","src":"745:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"719:17:201"},"nodeType":"YulFunctionCall","src":"719:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"711:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"640:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"651:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"662:4:201","type":""}],"src":"550:220:201"},{"body":{"nodeType":"YulBlock","src":"820:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"907:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"916:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"919:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"909:6:201"},"nodeType":"YulFunctionCall","src":"909:12:201"},"nodeType":"YulExpressionStatement","src":"909:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"843:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"854:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"861:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:201"},"nodeType":"YulFunctionCall","src":"850:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"840:2:201"},"nodeType":"YulFunctionCall","src":"840:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"833:6:201"},"nodeType":"YulFunctionCall","src":"833:73:201"},"nodeType":"YulIf","src":"830:93:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"809:5:201","type":""}],"src":"775:154:201"},{"body":{"nodeType":"YulBlock","src":"983:85:201","statements":[{"nodeType":"YulAssignment","src":"993:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1015:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1002:12:201"},"nodeType":"YulFunctionCall","src":"1002:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"993:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1056:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1031:24:201"},"nodeType":"YulFunctionCall","src":"1031:31:201"},"nodeType":"YulExpressionStatement","src":"1031:31:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"962:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"973:5:201","type":""}],"src":"934:134:201"},{"body":{"nodeType":"YulBlock","src":"1160:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"1206:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1215:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1218:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1208:6:201"},"nodeType":"YulFunctionCall","src":"1208:12:201"},"nodeType":"YulExpressionStatement","src":"1208:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1181:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1190:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1177:3:201"},"nodeType":"YulFunctionCall","src":"1177:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1202:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1173:3:201"},"nodeType":"YulFunctionCall","src":"1173:32:201"},"nodeType":"YulIf","src":"1170:52:201"},{"nodeType":"YulVariableDeclaration","src":"1231:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1257:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1244:12:201"},"nodeType":"YulFunctionCall","src":"1244:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1235:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1301:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1276:24:201"},"nodeType":"YulFunctionCall","src":"1276:31:201"},"nodeType":"YulExpressionStatement","src":"1276:31:201"},{"nodeType":"YulAssignment","src":"1316:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1326:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1316:6:201"}]},{"nodeType":"YulAssignment","src":"1340:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1367:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1378:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1363:3:201"},"nodeType":"YulFunctionCall","src":"1363:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1350:12:201"},"nodeType":"YulFunctionCall","src":"1350:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1340:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1118:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1129:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1141:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1149:6:201","type":""}],"src":"1073:315:201"},{"body":{"nodeType":"YulBlock","src":"1488:92:201","statements":[{"nodeType":"YulAssignment","src":"1498:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1510:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1521:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1506:3:201"},"nodeType":"YulFunctionCall","src":"1506:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1498:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1540:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1565:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1558:6:201"},"nodeType":"YulFunctionCall","src":"1558:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1551:6:201"},"nodeType":"YulFunctionCall","src":"1551:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1533:6:201"},"nodeType":"YulFunctionCall","src":"1533:41:201"},"nodeType":"YulExpressionStatement","src":"1533:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1457:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1468:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1479:4:201","type":""}],"src":"1393:187:201"},{"body":{"nodeType":"YulBlock","src":"1655:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"1701:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1710:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1713:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1703:6:201"},"nodeType":"YulFunctionCall","src":"1703:12:201"},"nodeType":"YulExpressionStatement","src":"1703:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1676:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1685:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1672:3:201"},"nodeType":"YulFunctionCall","src":"1672:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1697:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1668:3:201"},"nodeType":"YulFunctionCall","src":"1668:32:201"},"nodeType":"YulIf","src":"1665:52:201"},{"nodeType":"YulVariableDeclaration","src":"1726:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1752:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1739:12:201"},"nodeType":"YulFunctionCall","src":"1739:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1730:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1796:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1771:24:201"},"nodeType":"YulFunctionCall","src":"1771:31:201"},"nodeType":"YulExpressionStatement","src":"1771:31:201"},{"nodeType":"YulAssignment","src":"1811:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1821:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1811:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1621:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1632:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1644:6:201","type":""}],"src":"1585:247:201"},{"body":{"nodeType":"YulBlock","src":"1966:119:201","statements":[{"nodeType":"YulAssignment","src":"1976:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1988:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1999:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1984:3:201"},"nodeType":"YulFunctionCall","src":"1984:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1976:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2018:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"2029:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2011:6:201"},"nodeType":"YulFunctionCall","src":"2011:25:201"},"nodeType":"YulExpressionStatement","src":"2011:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2056:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2067:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2052:3:201"},"nodeType":"YulFunctionCall","src":"2052:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"2072:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2045:6:201"},"nodeType":"YulFunctionCall","src":"2045:34:201"},"nodeType":"YulExpressionStatement","src":"2045:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1927:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1938:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1946:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1957:4:201","type":""}],"src":"1837:248:201"},{"body":{"nodeType":"YulBlock","src":"2191:76:201","statements":[{"nodeType":"YulAssignment","src":"2201:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2213:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2224:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2209:3:201"},"nodeType":"YulFunctionCall","src":"2209:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2201:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2243:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"2254:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2236:6:201"},"nodeType":"YulFunctionCall","src":"2236:25:201"},"nodeType":"YulExpressionStatement","src":"2236:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2160:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2171:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2182:4:201","type":""}],"src":"2090:177:201"},{"body":{"nodeType":"YulBlock","src":"2319:109:201","statements":[{"nodeType":"YulAssignment","src":"2329:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2351:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2338:12:201"},"nodeType":"YulFunctionCall","src":"2338:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"2329:5:201"}]},{"body":{"nodeType":"YulBlock","src":"2406:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2415:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2418:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2408:6:201"},"nodeType":"YulFunctionCall","src":"2408:12:201"},"nodeType":"YulExpressionStatement","src":"2408:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2380:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2391:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2398:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2387:3:201"},"nodeType":"YulFunctionCall","src":"2387:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2377:2:201"},"nodeType":"YulFunctionCall","src":"2377:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2370:6:201"},"nodeType":"YulFunctionCall","src":"2370:35:201"},"nodeType":"YulIf","src":"2367:55:201"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2298:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"2309:5:201","type":""}],"src":"2272:156:201"},{"body":{"nodeType":"YulBlock","src":"2506:275:201","statements":[{"body":{"nodeType":"YulBlock","src":"2555:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2564:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2567:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2557:6:201"},"nodeType":"YulFunctionCall","src":"2557:12:201"},"nodeType":"YulExpressionStatement","src":"2557:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2534:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2542:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2530:3:201"},"nodeType":"YulFunctionCall","src":"2530:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"2549:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2526:3:201"},"nodeType":"YulFunctionCall","src":"2526:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2519:6:201"},"nodeType":"YulFunctionCall","src":"2519:35:201"},"nodeType":"YulIf","src":"2516:55:201"},{"nodeType":"YulAssignment","src":"2580:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2603:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2590:12:201"},"nodeType":"YulFunctionCall","src":"2590:20:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2580:6:201"}]},{"body":{"nodeType":"YulBlock","src":"2653:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2662:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2665:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2655:6:201"},"nodeType":"YulFunctionCall","src":"2655:12:201"},"nodeType":"YulExpressionStatement","src":"2655:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2625:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2633:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2622:2:201"},"nodeType":"YulFunctionCall","src":"2622:30:201"},"nodeType":"YulIf","src":"2619:50:201"},{"nodeType":"YulAssignment","src":"2678:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2694:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2702:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2690:3:201"},"nodeType":"YulFunctionCall","src":"2690:17:201"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"2678:8:201"}]},{"body":{"nodeType":"YulBlock","src":"2759:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2768:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2771:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2761:6:201"},"nodeType":"YulFunctionCall","src":"2761:12:201"},"nodeType":"YulExpressionStatement","src":"2761:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2730:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"2738:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2726:3:201"},"nodeType":"YulFunctionCall","src":"2726:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"2747:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2722:3:201"},"nodeType":"YulFunctionCall","src":"2722:30:201"},{"name":"end","nodeType":"YulIdentifier","src":"2754:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2719:2:201"},"nodeType":"YulFunctionCall","src":"2719:39:201"},"nodeType":"YulIf","src":"2716:59:201"}]},"name":"abi_decode_string_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2469:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"2477:3:201","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"2485:8:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"2495:6:201","type":""}],"src":"2433:348:201"},{"body":{"nodeType":"YulBlock","src":"3081:1119:201","statements":[{"body":{"nodeType":"YulBlock","src":"3128:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3137:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3140:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3130:6:201"},"nodeType":"YulFunctionCall","src":"3130:12:201"},"nodeType":"YulExpressionStatement","src":"3130:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3102:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3111:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3098:3:201"},"nodeType":"YulFunctionCall","src":"3098:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3123:3:201","type":"","value":"256"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3094:3:201"},"nodeType":"YulFunctionCall","src":"3094:33:201"},"nodeType":"YulIf","src":"3091:53:201"},{"nodeType":"YulAssignment","src":"3153:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3182:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3163:18:201"},"nodeType":"YulFunctionCall","src":"3163:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3153:6:201"}]},{"nodeType":"YulAssignment","src":"3201:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3234:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3245:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3230:3:201"},"nodeType":"YulFunctionCall","src":"3230:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3211:18:201"},"nodeType":"YulFunctionCall","src":"3211:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3201:6:201"}]},{"nodeType":"YulAssignment","src":"3258:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3291:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3302:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3287:3:201"},"nodeType":"YulFunctionCall","src":"3287:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3268:18:201"},"nodeType":"YulFunctionCall","src":"3268:38:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3258:6:201"}]},{"nodeType":"YulAssignment","src":"3315:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3348:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3359:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3344:3:201"},"nodeType":"YulFunctionCall","src":"3344:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3325:18:201"},"nodeType":"YulFunctionCall","src":"3325:38:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3315:6:201"}]},{"nodeType":"YulAssignment","src":"3372:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3403:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3414:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3399:3:201"},"nodeType":"YulFunctionCall","src":"3399:19:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"3382:16:201"},"nodeType":"YulFunctionCall","src":"3382:37:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3372:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3428:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3438:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3432:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3510:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3519:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3522:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3512:6:201"},"nodeType":"YulFunctionCall","src":"3512:12:201"},"nodeType":"YulExpressionStatement","src":"3512:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3488:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3499:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3484:3:201"},"nodeType":"YulFunctionCall","src":"3484:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3471:12:201"},"nodeType":"YulFunctionCall","src":"3471:33:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3506:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3468:2:201"},"nodeType":"YulFunctionCall","src":"3468:41:201"},"nodeType":"YulIf","src":"3465:61:201"},{"nodeType":"YulVariableDeclaration","src":"3535:112:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3592:9:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3620:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3631:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3616:3:201"},"nodeType":"YulFunctionCall","src":"3616:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3603:12:201"},"nodeType":"YulFunctionCall","src":"3603:33:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3588:3:201"},"nodeType":"YulFunctionCall","src":"3588:49:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3639:7:201"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"3561:26:201"},"nodeType":"YulFunctionCall","src":"3561:86:201"},"variables":[{"name":"value5_1","nodeType":"YulTypedName","src":"3539:8:201","type":""},{"name":"value6_1","nodeType":"YulTypedName","src":"3549:8:201","type":""}]},{"nodeType":"YulAssignment","src":"3656:18:201","value":{"name":"value5_1","nodeType":"YulIdentifier","src":"3666:8:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"3656:6:201"}]},{"nodeType":"YulAssignment","src":"3683:18:201","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"3693:8:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"3683:6:201"}]},{"body":{"nodeType":"YulBlock","src":"3755:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3764:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3767:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3757:6:201"},"nodeType":"YulFunctionCall","src":"3757:12:201"},"nodeType":"YulExpressionStatement","src":"3757:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3733:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3744:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3729:3:201"},"nodeType":"YulFunctionCall","src":"3729:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3716:12:201"},"nodeType":"YulFunctionCall","src":"3716:33:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3751:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3713:2:201"},"nodeType":"YulFunctionCall","src":"3713:41:201"},"nodeType":"YulIf","src":"3710:61:201"},{"nodeType":"YulVariableDeclaration","src":"3780:112:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3837:9:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3865:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3876:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3861:3:201"},"nodeType":"YulFunctionCall","src":"3861:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3848:12:201"},"nodeType":"YulFunctionCall","src":"3848:33:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3833:3:201"},"nodeType":"YulFunctionCall","src":"3833:49:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3884:7:201"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"3806:26:201"},"nodeType":"YulFunctionCall","src":"3806:86:201"},"variables":[{"name":"value7_1","nodeType":"YulTypedName","src":"3784:8:201","type":""},{"name":"value8_1","nodeType":"YulTypedName","src":"3794:8:201","type":""}]},{"nodeType":"YulAssignment","src":"3901:18:201","value":{"name":"value7_1","nodeType":"YulIdentifier","src":"3911:8:201"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"3901:6:201"}]},{"nodeType":"YulAssignment","src":"3928:18:201","value":{"name":"value8_1","nodeType":"YulIdentifier","src":"3938:8:201"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"3928:6:201"}]},{"body":{"nodeType":"YulBlock","src":"4000:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4009:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4012:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4002:6:201"},"nodeType":"YulFunctionCall","src":"4002:12:201"},"nodeType":"YulExpressionStatement","src":"4002:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3978:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3989:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3974:3:201"},"nodeType":"YulFunctionCall","src":"3974:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3961:12:201"},"nodeType":"YulFunctionCall","src":"3961:33:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3996:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3958:2:201"},"nodeType":"YulFunctionCall","src":"3958:41:201"},"nodeType":"YulIf","src":"3955:61:201"},{"nodeType":"YulVariableDeclaration","src":"4025:113:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4083:9:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4111:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4122:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4107:3:201"},"nodeType":"YulFunctionCall","src":"4107:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4094:12:201"},"nodeType":"YulFunctionCall","src":"4094:33:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4079:3:201"},"nodeType":"YulFunctionCall","src":"4079:49:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4130:7:201"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"4052:26:201"},"nodeType":"YulFunctionCall","src":"4052:86:201"},"variables":[{"name":"value9_1","nodeType":"YulTypedName","src":"4029:8:201","type":""},{"name":"value10_1","nodeType":"YulTypedName","src":"4039:9:201","type":""}]},{"nodeType":"YulAssignment","src":"4147:18:201","value":{"name":"value9_1","nodeType":"YulIdentifier","src":"4157:8:201"},"variableNames":[{"name":"value9","nodeType":"YulIdentifier","src":"4147:6:201"}]},{"nodeType":"YulAssignment","src":"4174:20:201","value":{"name":"value10_1","nodeType":"YulIdentifier","src":"4185:9:201"},"variableNames":[{"name":"value10","nodeType":"YulIdentifier","src":"4174:7:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$4860t_addresst_addresst_contract$_IAaveIncentivesController_$3875t_uint8t_string_calldata_ptrt_string_calldata_ptrt_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2966:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2977:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2989:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2997:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3005:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3013:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3021:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"3029:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"3037:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"3045:6:201","type":""},{"name":"value8","nodeType":"YulTypedName","src":"3053:6:201","type":""},{"name":"value9","nodeType":"YulTypedName","src":"3061:6:201","type":""},{"name":"value10","nodeType":"YulTypedName","src":"3069:7:201","type":""}],"src":"2786:1414:201"},{"body":{"nodeType":"YulBlock","src":"4309:352:201","statements":[{"body":{"nodeType":"YulBlock","src":"4355:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4364:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4367:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4357:6:201"},"nodeType":"YulFunctionCall","src":"4357:12:201"},"nodeType":"YulExpressionStatement","src":"4357:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4330:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4339:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4326:3:201"},"nodeType":"YulFunctionCall","src":"4326:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4351:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4322:3:201"},"nodeType":"YulFunctionCall","src":"4322:32:201"},"nodeType":"YulIf","src":"4319:52:201"},{"nodeType":"YulVariableDeclaration","src":"4380:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4406:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4393:12:201"},"nodeType":"YulFunctionCall","src":"4393:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4384:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4450:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4425:24:201"},"nodeType":"YulFunctionCall","src":"4425:31:201"},"nodeType":"YulExpressionStatement","src":"4425:31:201"},{"nodeType":"YulAssignment","src":"4465:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"4475:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4465:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"4489:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4521:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4532:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4517:3:201"},"nodeType":"YulFunctionCall","src":"4517:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4504:12:201"},"nodeType":"YulFunctionCall","src":"4504:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"4493:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"4570:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4545:24:201"},"nodeType":"YulFunctionCall","src":"4545:33:201"},"nodeType":"YulExpressionStatement","src":"4545:33:201"},{"nodeType":"YulAssignment","src":"4587:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"4597:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4587:6:201"}]},{"nodeType":"YulAssignment","src":"4613:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4640:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4651:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4636:3:201"},"nodeType":"YulFunctionCall","src":"4636:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4623:12:201"},"nodeType":"YulFunctionCall","src":"4623:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4613:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4259:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4270:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4282:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4290:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4298:6:201","type":""}],"src":"4205:456:201"},{"body":{"nodeType":"YulBlock","src":"4767:76:201","statements":[{"nodeType":"YulAssignment","src":"4777:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4789:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4800:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4785:3:201"},"nodeType":"YulFunctionCall","src":"4785:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4777:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4819:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"4830:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4812:6:201"},"nodeType":"YulFunctionCall","src":"4812:25:201"},"nodeType":"YulExpressionStatement","src":"4812:25:201"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4736:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4747:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4758:4:201","type":""}],"src":"4666:177:201"},{"body":{"nodeType":"YulBlock","src":"4945:87:201","statements":[{"nodeType":"YulAssignment","src":"4955:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4967:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4978:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4963:3:201"},"nodeType":"YulFunctionCall","src":"4963:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4955:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4997:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5012:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5020:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5008:3:201"},"nodeType":"YulFunctionCall","src":"5008:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4990:6:201"},"nodeType":"YulFunctionCall","src":"4990:36:201"},"nodeType":"YulExpressionStatement","src":"4990:36:201"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4914:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4925:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4936:4:201","type":""}],"src":"4848:184:201"},{"body":{"nodeType":"YulBlock","src":"5152:125:201","statements":[{"nodeType":"YulAssignment","src":"5162:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5174:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5185:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5170:3:201"},"nodeType":"YulFunctionCall","src":"5170:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5162:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5204:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5219:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5227:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5215:3:201"},"nodeType":"YulFunctionCall","src":"5215:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5197:6:201"},"nodeType":"YulFunctionCall","src":"5197:74:201"},"nodeType":"YulExpressionStatement","src":"5197:74:201"}]},"name":"abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5121:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5132:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5143:4:201","type":""}],"src":"5037:240:201"},{"body":{"nodeType":"YulBlock","src":"5417:125:201","statements":[{"nodeType":"YulAssignment","src":"5427:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5439:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5450:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5435:3:201"},"nodeType":"YulFunctionCall","src":"5435:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5427:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5469:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5484:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5492:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5480:3:201"},"nodeType":"YulFunctionCall","src":"5480:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5462:6:201"},"nodeType":"YulFunctionCall","src":"5462:74:201"},"nodeType":"YulExpressionStatement","src":"5462:74:201"}]},"name":"abi_encode_tuple_t_contract$_IAaveIncentivesController_$3875__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5386:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5397:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5408:4:201","type":""}],"src":"5282:260:201"},{"body":{"nodeType":"YulBlock","src":"5666:99:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5683:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5694:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5676:6:201"},"nodeType":"YulFunctionCall","src":"5676:21:201"},"nodeType":"YulExpressionStatement","src":"5676:21:201"},{"nodeType":"YulAssignment","src":"5706:53:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5732:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5744:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5755:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5740:3:201"},"nodeType":"YulFunctionCall","src":"5740:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"5714:17:201"},"nodeType":"YulFunctionCall","src":"5714:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5706:4:201"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5635:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5646:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5657:4:201","type":""}],"src":"5547:218:201"},{"body":{"nodeType":"YulBlock","src":"5857:161:201","statements":[{"body":{"nodeType":"YulBlock","src":"5903:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5912:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5915:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5905:6:201"},"nodeType":"YulFunctionCall","src":"5905:12:201"},"nodeType":"YulExpressionStatement","src":"5905:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5878:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"5887:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5874:3:201"},"nodeType":"YulFunctionCall","src":"5874:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"5899:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5870:3:201"},"nodeType":"YulFunctionCall","src":"5870:32:201"},"nodeType":"YulIf","src":"5867:52:201"},{"nodeType":"YulAssignment","src":"5928:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5951:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5938:12:201"},"nodeType":"YulFunctionCall","src":"5938:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5928:6:201"}]},{"nodeType":"YulAssignment","src":"5970:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5997:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6008:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5993:3:201"},"nodeType":"YulFunctionCall","src":"5993:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5980:12:201"},"nodeType":"YulFunctionCall","src":"5980:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5970:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5815:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5826:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5838:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5846:6:201","type":""}],"src":"5770:248:201"},{"body":{"nodeType":"YulBlock","src":"6124:125:201","statements":[{"nodeType":"YulAssignment","src":"6134:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6146:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6157:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6142:3:201"},"nodeType":"YulFunctionCall","src":"6142:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6134:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6176:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6191:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"6199:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6187:3:201"},"nodeType":"YulFunctionCall","src":"6187:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6169:6:201"},"nodeType":"YulFunctionCall","src":"6169:74:201"},"nodeType":"YulExpressionStatement","src":"6169:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6093:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6104:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6115:4:201","type":""}],"src":"6023:226:201"},{"body":{"nodeType":"YulBlock","src":"6375:404:201","statements":[{"body":{"nodeType":"YulBlock","src":"6422:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6431:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6434:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6424:6:201"},"nodeType":"YulFunctionCall","src":"6424:12:201"},"nodeType":"YulExpressionStatement","src":"6424:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6396:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6405:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6392:3:201"},"nodeType":"YulFunctionCall","src":"6392:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"6417:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6388:3:201"},"nodeType":"YulFunctionCall","src":"6388:33:201"},"nodeType":"YulIf","src":"6385:53:201"},{"nodeType":"YulVariableDeclaration","src":"6447:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6473:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6460:12:201"},"nodeType":"YulFunctionCall","src":"6460:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6451:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6517:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6492:24:201"},"nodeType":"YulFunctionCall","src":"6492:31:201"},"nodeType":"YulExpressionStatement","src":"6492:31:201"},{"nodeType":"YulAssignment","src":"6532:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"6542:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6532:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"6556:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6588:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6599:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6584:3:201"},"nodeType":"YulFunctionCall","src":"6584:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6571:12:201"},"nodeType":"YulFunctionCall","src":"6571:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"6560:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"6637:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6612:24:201"},"nodeType":"YulFunctionCall","src":"6612:33:201"},"nodeType":"YulExpressionStatement","src":"6612:33:201"},{"nodeType":"YulAssignment","src":"6654:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"6664:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6654:6:201"}]},{"nodeType":"YulAssignment","src":"6680:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6707:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6718:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6703:3:201"},"nodeType":"YulFunctionCall","src":"6703:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6690:12:201"},"nodeType":"YulFunctionCall","src":"6690:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6680:6:201"}]},{"nodeType":"YulAssignment","src":"6731:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6758:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6769:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6754:3:201"},"nodeType":"YulFunctionCall","src":"6754:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6741:12:201"},"nodeType":"YulFunctionCall","src":"6741:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"6731:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6317:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6328:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6340:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6348:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6356:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6364:6:201","type":""}],"src":"6254:525:201"},{"body":{"nodeType":"YulBlock","src":"6954:564:201","statements":[{"body":{"nodeType":"YulBlock","src":"7001:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7010:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7013:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7003:6:201"},"nodeType":"YulFunctionCall","src":"7003:12:201"},"nodeType":"YulExpressionStatement","src":"7003:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6975:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6984:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6971:3:201"},"nodeType":"YulFunctionCall","src":"6971:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"6996:3:201","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6967:3:201"},"nodeType":"YulFunctionCall","src":"6967:33:201"},"nodeType":"YulIf","src":"6964:53:201"},{"nodeType":"YulVariableDeclaration","src":"7026:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7052:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7039:12:201"},"nodeType":"YulFunctionCall","src":"7039:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7030:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7096:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7071:24:201"},"nodeType":"YulFunctionCall","src":"7071:31:201"},"nodeType":"YulExpressionStatement","src":"7071:31:201"},{"nodeType":"YulAssignment","src":"7111:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"7121:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7111:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"7135:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7167:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7178:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7163:3:201"},"nodeType":"YulFunctionCall","src":"7163:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7150:12:201"},"nodeType":"YulFunctionCall","src":"7150:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7139:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7216:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7191:24:201"},"nodeType":"YulFunctionCall","src":"7191:33:201"},"nodeType":"YulExpressionStatement","src":"7191:33:201"},{"nodeType":"YulAssignment","src":"7233:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"7243:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7233:6:201"}]},{"nodeType":"YulAssignment","src":"7259:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7286:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7297:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7282:3:201"},"nodeType":"YulFunctionCall","src":"7282:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7269:12:201"},"nodeType":"YulFunctionCall","src":"7269:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"7259:6:201"}]},{"nodeType":"YulAssignment","src":"7310:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7337:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7348:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7333:3:201"},"nodeType":"YulFunctionCall","src":"7333:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7320:12:201"},"nodeType":"YulFunctionCall","src":"7320:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"7310:6:201"}]},{"nodeType":"YulAssignment","src":"7361:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7392:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7403:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7388:3:201"},"nodeType":"YulFunctionCall","src":"7388:19:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"7371:16:201"},"nodeType":"YulFunctionCall","src":"7371:37:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"7361:6:201"}]},{"nodeType":"YulAssignment","src":"7417:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7444:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7455:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7440:3:201"},"nodeType":"YulFunctionCall","src":"7440:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7427:12:201"},"nodeType":"YulFunctionCall","src":"7427:33:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"7417:6:201"}]},{"nodeType":"YulAssignment","src":"7469:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7496:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7507:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7492:3:201"},"nodeType":"YulFunctionCall","src":"7492:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7479:12:201"},"nodeType":"YulFunctionCall","src":"7479:33:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"7469:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6872:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6883:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6895:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6903:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6911:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6919:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"6927:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"6935:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"6943:6:201","type":""}],"src":"6784:734:201"},{"body":{"nodeType":"YulBlock","src":"7610:301:201","statements":[{"body":{"nodeType":"YulBlock","src":"7656:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7665:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7668:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7658:6:201"},"nodeType":"YulFunctionCall","src":"7658:12:201"},"nodeType":"YulExpressionStatement","src":"7658:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7631:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"7640:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7627:3:201"},"nodeType":"YulFunctionCall","src":"7627:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"7652:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7623:3:201"},"nodeType":"YulFunctionCall","src":"7623:32:201"},"nodeType":"YulIf","src":"7620:52:201"},{"nodeType":"YulVariableDeclaration","src":"7681:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7707:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7694:12:201"},"nodeType":"YulFunctionCall","src":"7694:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7685:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7751:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7726:24:201"},"nodeType":"YulFunctionCall","src":"7726:31:201"},"nodeType":"YulExpressionStatement","src":"7726:31:201"},{"nodeType":"YulAssignment","src":"7766:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"7776:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7766:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"7790:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7822:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7833:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7818:3:201"},"nodeType":"YulFunctionCall","src":"7818:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7805:12:201"},"nodeType":"YulFunctionCall","src":"7805:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7794:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7871:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7846:24:201"},"nodeType":"YulFunctionCall","src":"7846:33:201"},"nodeType":"YulExpressionStatement","src":"7846:33:201"},{"nodeType":"YulAssignment","src":"7888:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"7898:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7888:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7568:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7579:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7591:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7599:6:201","type":""}],"src":"7523:388:201"},{"body":{"nodeType":"YulBlock","src":"8020:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"8066:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8075:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8078:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8068:6:201"},"nodeType":"YulFunctionCall","src":"8068:12:201"},"nodeType":"YulExpressionStatement","src":"8068:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8041:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"8050:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8037:3:201"},"nodeType":"YulFunctionCall","src":"8037:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"8062:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8033:3:201"},"nodeType":"YulFunctionCall","src":"8033:32:201"},"nodeType":"YulIf","src":"8030:52:201"},{"nodeType":"YulVariableDeclaration","src":"8091:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8117:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8104:12:201"},"nodeType":"YulFunctionCall","src":"8104:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"8095:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8161:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"8136:24:201"},"nodeType":"YulFunctionCall","src":"8136:31:201"},"nodeType":"YulExpressionStatement","src":"8136:31:201"},{"nodeType":"YulAssignment","src":"8176:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"8186:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8176:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IAaveIncentivesController_$3875","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7986:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7997:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8009:6:201","type":""}],"src":"7916:281:201"},{"body":{"nodeType":"YulBlock","src":"8257:382:201","statements":[{"nodeType":"YulAssignment","src":"8267:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8281:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"8284:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"8277:3:201"},"nodeType":"YulFunctionCall","src":"8277:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"8267:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"8298:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"8328:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"8334:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8324:3:201"},"nodeType":"YulFunctionCall","src":"8324:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"8302:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"8375:31:201","statements":[{"nodeType":"YulAssignment","src":"8377:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8391:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8399:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8387:3:201"},"nodeType":"YulFunctionCall","src":"8387:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"8377:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"8355:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8348:6:201"},"nodeType":"YulFunctionCall","src":"8348:26:201"},"nodeType":"YulIf","src":"8345:61:201"},{"body":{"nodeType":"YulBlock","src":"8465:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8486:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8489:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8479:6:201"},"nodeType":"YulFunctionCall","src":"8479:88:201"},"nodeType":"YulExpressionStatement","src":"8479:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8587:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"8590:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8580:6:201"},"nodeType":"YulFunctionCall","src":"8580:15:201"},"nodeType":"YulExpressionStatement","src":"8580:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8615:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8618:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8608:6:201"},"nodeType":"YulFunctionCall","src":"8608:15:201"},"nodeType":"YulExpressionStatement","src":"8608:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"8421:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8444:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8452:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8441:2:201"},"nodeType":"YulFunctionCall","src":"8441:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8418:2:201"},"nodeType":"YulFunctionCall","src":"8418:38:201"},"nodeType":"YulIf","src":"8415:218:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"8237:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"8246:6:201","type":""}],"src":"8202:437:201"},{"body":{"nodeType":"YulBlock","src":"8725:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"8771:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8780:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8783:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8773:6:201"},"nodeType":"YulFunctionCall","src":"8773:12:201"},"nodeType":"YulExpressionStatement","src":"8773:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8746:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"8755:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8742:3:201"},"nodeType":"YulFunctionCall","src":"8742:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"8767:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8738:3:201"},"nodeType":"YulFunctionCall","src":"8738:32:201"},"nodeType":"YulIf","src":"8735:52:201"},{"nodeType":"YulAssignment","src":"8796:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8812:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8806:5:201"},"nodeType":"YulFunctionCall","src":"8806:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8796:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8691:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8702:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8714:6:201","type":""}],"src":"8644:184:201"},{"body":{"nodeType":"YulBlock","src":"9007:236:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9024:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9035:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9017:6:201"},"nodeType":"YulFunctionCall","src":"9017:21:201"},"nodeType":"YulExpressionStatement","src":"9017:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9058:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9069:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9054:3:201"},"nodeType":"YulFunctionCall","src":"9054:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"9074:2:201","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9047:6:201"},"nodeType":"YulFunctionCall","src":"9047:30:201"},"nodeType":"YulExpressionStatement","src":"9047:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9097:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9108:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9093:3:201"},"nodeType":"YulFunctionCall","src":"9093:18:201"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"9113:34:201","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9086:6:201"},"nodeType":"YulFunctionCall","src":"9086:62:201"},"nodeType":"YulExpressionStatement","src":"9086:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9168:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9179:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9164:3:201"},"nodeType":"YulFunctionCall","src":"9164:18:201"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"9184:16:201","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9157:6:201"},"nodeType":"YulFunctionCall","src":"9157:44:201"},"nodeType":"YulExpressionStatement","src":"9157:44:201"},{"nodeType":"YulAssignment","src":"9210:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9222:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9233:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9218:3:201"},"nodeType":"YulFunctionCall","src":"9218:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9210:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8984:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8998:4:201","type":""}],"src":"8833:410:201"},{"body":{"nodeType":"YulBlock","src":"9315:259:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9332:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"9337:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9325:6:201"},"nodeType":"YulFunctionCall","src":"9325:19:201"},"nodeType":"YulExpressionStatement","src":"9325:19:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9370:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"9375:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9366:3:201"},"nodeType":"YulFunctionCall","src":"9366:14:201"},{"name":"start","nodeType":"YulIdentifier","src":"9382:5:201"},{"name":"length","nodeType":"YulIdentifier","src":"9389:6:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"9353:12:201"},"nodeType":"YulFunctionCall","src":"9353:43:201"},"nodeType":"YulExpressionStatement","src":"9353:43:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9420:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"9425:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9416:3:201"},"nodeType":"YulFunctionCall","src":"9416:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"9434:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9412:3:201"},"nodeType":"YulFunctionCall","src":"9412:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"9441:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9405:6:201"},"nodeType":"YulFunctionCall","src":"9405:38:201"},"nodeType":"YulExpressionStatement","src":"9405:38:201"},{"nodeType":"YulAssignment","src":"9452:116:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9467:3:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9480:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"9488:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9476:3:201"},"nodeType":"YulFunctionCall","src":"9476:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"9493:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9472:3:201"},"nodeType":"YulFunctionCall","src":"9472:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9463:3:201"},"nodeType":"YulFunctionCall","src":"9463:98:201"},{"kind":"number","nodeType":"YulLiteral","src":"9563:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9459:3:201"},"nodeType":"YulFunctionCall","src":"9459:109:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"9452:3:201"}]}]},"name":"abi_encode_string_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"start","nodeType":"YulTypedName","src":"9284:5:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"9291:6:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"9299:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"9307:3:201","type":""}],"src":"9248:326:201"},{"body":{"nodeType":"YulBlock","src":"9904:603:201","statements":[{"nodeType":"YulVariableDeclaration","src":"9914:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9924:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9918:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9982:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9997:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10005:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9993:3:201"},"nodeType":"YulFunctionCall","src":"9993:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9975:6:201"},"nodeType":"YulFunctionCall","src":"9975:34:201"},"nodeType":"YulExpressionStatement","src":"9975:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10029:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10040:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10025:3:201"},"nodeType":"YulFunctionCall","src":"10025:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10049:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10057:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10045:3:201"},"nodeType":"YulFunctionCall","src":"10045:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10018:6:201"},"nodeType":"YulFunctionCall","src":"10018:43:201"},"nodeType":"YulExpressionStatement","src":"10018:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10081:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10092:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10077:3:201"},"nodeType":"YulFunctionCall","src":"10077:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"10101:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10109:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10097:3:201"},"nodeType":"YulFunctionCall","src":"10097:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10070:6:201"},"nodeType":"YulFunctionCall","src":"10070:45:201"},"nodeType":"YulExpressionStatement","src":"10070:45:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10135:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10146:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10131:3:201"},"nodeType":"YulFunctionCall","src":"10131:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"10151:3:201","type":"","value":"192"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10124:6:201"},"nodeType":"YulFunctionCall","src":"10124:31:201"},"nodeType":"YulExpressionStatement","src":"10124:31:201"},{"nodeType":"YulVariableDeclaration","src":"10164:77:201","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"10205:6:201"},{"name":"value4","nodeType":"YulIdentifier","src":"10213:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10225:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10236:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10221:3:201"},"nodeType":"YulFunctionCall","src":"10221:19:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10178:26:201"},"nodeType":"YulFunctionCall","src":"10178:63:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"10168:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10261:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10272:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10257:3:201"},"nodeType":"YulFunctionCall","src":"10257:19:201"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"10282:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"10290:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10278:3:201"},"nodeType":"YulFunctionCall","src":"10278:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10250:6:201"},"nodeType":"YulFunctionCall","src":"10250:51:201"},"nodeType":"YulExpressionStatement","src":"10250:51:201"},{"nodeType":"YulVariableDeclaration","src":"10310:64:201","value":{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"10351:6:201"},{"name":"value6","nodeType":"YulIdentifier","src":"10359:6:201"},{"name":"tail_1","nodeType":"YulIdentifier","src":"10367:6:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10324:26:201"},"nodeType":"YulFunctionCall","src":"10324:50:201"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"10314:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10394:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10405:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10390:3:201"},"nodeType":"YulFunctionCall","src":"10390:19:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"10415:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"10423:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10411:3:201"},"nodeType":"YulFunctionCall","src":"10411:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10383:6:201"},"nodeType":"YulFunctionCall","src":"10383:51:201"},"nodeType":"YulExpressionStatement","src":"10383:51:201"},{"nodeType":"YulAssignment","src":"10443:58:201","value":{"arguments":[{"name":"value7","nodeType":"YulIdentifier","src":"10478:6:201"},{"name":"value8","nodeType":"YulIdentifier","src":"10486:6:201"},{"name":"tail_2","nodeType":"YulIdentifier","src":"10494:6:201"}],"functionName":{"name":"abi_encode_string_calldata","nodeType":"YulIdentifier","src":"10451:26:201"},"nodeType":"YulFunctionCall","src":"10451:50:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10443:4:201"}]}]},"name":"abi_encode_tuple_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9809:9:201","type":""},{"name":"value8","nodeType":"YulTypedName","src":"9820:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"9828:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"9836:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"9844:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"9852:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9860:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9868:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9876:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9884:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9895:4:201","type":""}],"src":"9579:928:201"},{"body":{"nodeType":"YulBlock","src":"10544:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10561:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10564:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10554:6:201"},"nodeType":"YulFunctionCall","src":"10554:88:201"},"nodeType":"YulExpressionStatement","src":"10554:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10658:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10661:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10651:6:201"},"nodeType":"YulFunctionCall","src":"10651:15:201"},"nodeType":"YulExpressionStatement","src":"10651:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10682:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10685:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10675:6:201"},"nodeType":"YulFunctionCall","src":"10675:15:201"},"nodeType":"YulExpressionStatement","src":"10675:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"10512:184:201"},{"body":{"nodeType":"YulBlock","src":"10750:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"10772:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"10774:16:201"},"nodeType":"YulFunctionCall","src":"10774:18:201"},"nodeType":"YulExpressionStatement","src":"10774:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10766:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"10769:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10763:2:201"},"nodeType":"YulFunctionCall","src":"10763:8:201"},"nodeType":"YulIf","src":"10760:34:201"},{"nodeType":"YulAssignment","src":"10803:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10815:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"10818:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10811:3:201"},"nodeType":"YulFunctionCall","src":"10811:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"10803:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"10732:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"10735:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"10741:4:201","type":""}],"src":"10701:125:201"},{"body":{"nodeType":"YulBlock","src":"10912:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"10958:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10967:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10970:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10960:6:201"},"nodeType":"YulFunctionCall","src":"10960:12:201"},"nodeType":"YulExpressionStatement","src":"10960:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"10933:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"10942:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10929:3:201"},"nodeType":"YulFunctionCall","src":"10929:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"10954:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10925:3:201"},"nodeType":"YulFunctionCall","src":"10925:32:201"},"nodeType":"YulIf","src":"10922:52:201"},{"nodeType":"YulVariableDeclaration","src":"10983:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11002:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10996:5:201"},"nodeType":"YulFunctionCall","src":"10996:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"10987:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11046:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"11021:24:201"},"nodeType":"YulFunctionCall","src":"11021:31:201"},"nodeType":"YulExpressionStatement","src":"11021:31:201"},{"nodeType":"YulAssignment","src":"11061:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"11071:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11061:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10878:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"10889:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"10901:6:201","type":""}],"src":"10831:251:201"},{"body":{"nodeType":"YulBlock","src":"11165:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"11211:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11220:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11223:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11213:6:201"},"nodeType":"YulFunctionCall","src":"11213:12:201"},"nodeType":"YulExpressionStatement","src":"11213:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11186:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"11195:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11182:3:201"},"nodeType":"YulFunctionCall","src":"11182:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"11207:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11178:3:201"},"nodeType":"YulFunctionCall","src":"11178:32:201"},"nodeType":"YulIf","src":"11175:52:201"},{"nodeType":"YulVariableDeclaration","src":"11236:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11255:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11249:5:201"},"nodeType":"YulFunctionCall","src":"11249:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"11240:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"11318:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11327:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11330:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11320:6:201"},"nodeType":"YulFunctionCall","src":"11320:12:201"},"nodeType":"YulExpressionStatement","src":"11320:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11287:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11308:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11301:6:201"},"nodeType":"YulFunctionCall","src":"11301:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11294:6:201"},"nodeType":"YulFunctionCall","src":"11294:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"11284:2:201"},"nodeType":"YulFunctionCall","src":"11284:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11277:6:201"},"nodeType":"YulFunctionCall","src":"11277:40:201"},"nodeType":"YulIf","src":"11274:60:201"},{"nodeType":"YulAssignment","src":"11343:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"11353:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11343:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11131:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11142:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11154:6:201","type":""}],"src":"11087:277:201"},{"body":{"nodeType":"YulBlock","src":"11417:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"11444:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11446:16:201"},"nodeType":"YulFunctionCall","src":"11446:18:201"},"nodeType":"YulExpressionStatement","src":"11446:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11433:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"11440:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"11436:3:201"},"nodeType":"YulFunctionCall","src":"11436:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11430:2:201"},"nodeType":"YulFunctionCall","src":"11430:13:201"},"nodeType":"YulIf","src":"11427:39:201"},{"nodeType":"YulAssignment","src":"11475:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11486:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"11489:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11482:3:201"},"nodeType":"YulFunctionCall","src":"11482:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"11475:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11400:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"11403:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"11409:3:201","type":""}],"src":"11369:128:201"},{"body":{"nodeType":"YulBlock","src":"11743:373:201","statements":[{"nodeType":"YulAssignment","src":"11753:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11765:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11776:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11761:3:201"},"nodeType":"YulFunctionCall","src":"11761:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11753:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11796:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"11807:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11789:6:201"},"nodeType":"YulFunctionCall","src":"11789:25:201"},"nodeType":"YulExpressionStatement","src":"11789:25:201"},{"nodeType":"YulVariableDeclaration","src":"11823:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11833:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11827:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11895:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11906:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11891:3:201"},"nodeType":"YulFunctionCall","src":"11891:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11915:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11923:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11911:3:201"},"nodeType":"YulFunctionCall","src":"11911:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11884:6:201"},"nodeType":"YulFunctionCall","src":"11884:43:201"},"nodeType":"YulExpressionStatement","src":"11884:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11947:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11958:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11943:3:201"},"nodeType":"YulFunctionCall","src":"11943:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"11967:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11975:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11963:3:201"},"nodeType":"YulFunctionCall","src":"11963:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11936:6:201"},"nodeType":"YulFunctionCall","src":"11936:43:201"},"nodeType":"YulExpressionStatement","src":"11936:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11999:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12010:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11995:3:201"},"nodeType":"YulFunctionCall","src":"11995:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"12015:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11988:6:201"},"nodeType":"YulFunctionCall","src":"11988:34:201"},"nodeType":"YulExpressionStatement","src":"11988:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12042:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12053:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12038:3:201"},"nodeType":"YulFunctionCall","src":"12038:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"12059:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12031:6:201"},"nodeType":"YulFunctionCall","src":"12031:35:201"},"nodeType":"YulExpressionStatement","src":"12031:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12086:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12097:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12082:3:201"},"nodeType":"YulFunctionCall","src":"12082:19:201"},{"name":"value5","nodeType":"YulIdentifier","src":"12103:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12075:6:201"},"nodeType":"YulFunctionCall","src":"12075:35:201"},"nodeType":"YulExpressionStatement","src":"12075:35:201"}]},"name":"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11672:9:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"11683:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"11691:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11699:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11707:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11715:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11723:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11734:4:201","type":""}],"src":"11502:614:201"},{"body":{"nodeType":"YulBlock","src":"12369:196:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12386:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"12391:66:201","type":"","value":"0x1901000000000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12379:6:201"},"nodeType":"YulFunctionCall","src":"12379:79:201"},"nodeType":"YulExpressionStatement","src":"12379:79:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12478:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"12483:1:201","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12474:3:201"},"nodeType":"YulFunctionCall","src":"12474:11:201"},{"name":"value0","nodeType":"YulIdentifier","src":"12487:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12467:6:201"},"nodeType":"YulFunctionCall","src":"12467:27:201"},"nodeType":"YulExpressionStatement","src":"12467:27:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12514:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"12519:2:201","type":"","value":"34"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12510:3:201"},"nodeType":"YulFunctionCall","src":"12510:12:201"},{"name":"value1","nodeType":"YulIdentifier","src":"12524:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12503:6:201"},"nodeType":"YulFunctionCall","src":"12503:28:201"},"nodeType":"YulExpressionStatement","src":"12503:28:201"},{"nodeType":"YulAssignment","src":"12540:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12551:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"12556:2:201","type":"","value":"66"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12547:3:201"},"nodeType":"YulFunctionCall","src":"12547:12:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"12540:3:201"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"12337:3:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12342:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12350:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"12361:3:201","type":""}],"src":"12121:444:201"},{"body":{"nodeType":"YulBlock","src":"12751:217:201","statements":[{"nodeType":"YulAssignment","src":"12761:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12773:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12784:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12769:3:201"},"nodeType":"YulFunctionCall","src":"12769:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12761:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12804:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"12815:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12797:6:201"},"nodeType":"YulFunctionCall","src":"12797:25:201"},"nodeType":"YulExpressionStatement","src":"12797:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12842:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12853:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12838:3:201"},"nodeType":"YulFunctionCall","src":"12838:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12862:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"12870:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12858:3:201"},"nodeType":"YulFunctionCall","src":"12858:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12831:6:201"},"nodeType":"YulFunctionCall","src":"12831:45:201"},"nodeType":"YulExpressionStatement","src":"12831:45:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12896:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12907:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12892:3:201"},"nodeType":"YulFunctionCall","src":"12892:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"12912:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12885:6:201"},"nodeType":"YulFunctionCall","src":"12885:34:201"},"nodeType":"YulExpressionStatement","src":"12885:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12939:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12950:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12935:3:201"},"nodeType":"YulFunctionCall","src":"12935:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"12955:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12928:6:201"},"nodeType":"YulFunctionCall","src":"12928:34:201"},"nodeType":"YulExpressionStatement","src":"12928:34:201"}]},"name":"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12696:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12707:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12715:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12723:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12731:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12742:4:201","type":""}],"src":"12570:398:201"},{"body":{"nodeType":"YulBlock","src":"13186:299:201","statements":[{"nodeType":"YulAssignment","src":"13196:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13208:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13219:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13204:3:201"},"nodeType":"YulFunctionCall","src":"13204:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13196:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13239:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"13250:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13232:6:201"},"nodeType":"YulFunctionCall","src":"13232:25:201"},"nodeType":"YulExpressionStatement","src":"13232:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13277:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13288:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13273:3:201"},"nodeType":"YulFunctionCall","src":"13273:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"13293:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13266:6:201"},"nodeType":"YulFunctionCall","src":"13266:34:201"},"nodeType":"YulExpressionStatement","src":"13266:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13320:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13331:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13316:3:201"},"nodeType":"YulFunctionCall","src":"13316:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"13336:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13309:6:201"},"nodeType":"YulFunctionCall","src":"13309:34:201"},"nodeType":"YulExpressionStatement","src":"13309:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13363:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13374:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13359:3:201"},"nodeType":"YulFunctionCall","src":"13359:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"13379:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13352:6:201"},"nodeType":"YulFunctionCall","src":"13352:34:201"},"nodeType":"YulExpressionStatement","src":"13352:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13406:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13417:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13402:3:201"},"nodeType":"YulFunctionCall","src":"13402:19:201"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"13427:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13435:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13423:3:201"},"nodeType":"YulFunctionCall","src":"13423:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13395:6:201"},"nodeType":"YulFunctionCall","src":"13395:84:201"},"nodeType":"YulExpressionStatement","src":"13395:84:201"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13123:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"13134:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13142:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13150:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13158:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13166:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13177:4:201","type":""}],"src":"12973:512:201"},{"body":{"nodeType":"YulBlock","src":"13664:229:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13681:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13692:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13674:6:201"},"nodeType":"YulFunctionCall","src":"13674:21:201"},"nodeType":"YulExpressionStatement","src":"13674:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13715:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13726:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13711:3:201"},"nodeType":"YulFunctionCall","src":"13711:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"13731:2:201","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13704:6:201"},"nodeType":"YulFunctionCall","src":"13704:30:201"},"nodeType":"YulExpressionStatement","src":"13704:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13754:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13765:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13750:3:201"},"nodeType":"YulFunctionCall","src":"13750:18:201"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"13770:34:201","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13743:6:201"},"nodeType":"YulFunctionCall","src":"13743:62:201"},"nodeType":"YulExpressionStatement","src":"13743:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13825:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13836:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13821:3:201"},"nodeType":"YulFunctionCall","src":"13821:18:201"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"13841:9:201","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13814:6:201"},"nodeType":"YulFunctionCall","src":"13814:37:201"},"nodeType":"YulExpressionStatement","src":"13814:37:201"},{"nodeType":"YulAssignment","src":"13860:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13872:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13883:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13868:3:201"},"nodeType":"YulFunctionCall","src":"13868:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13860:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13641:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13655:4:201","type":""}],"src":"13490:403:201"},{"body":{"nodeType":"YulBlock","src":"14072:171:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14089:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14100:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14082:6:201"},"nodeType":"YulFunctionCall","src":"14082:21:201"},"nodeType":"YulExpressionStatement","src":"14082:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14123:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14134:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14119:3:201"},"nodeType":"YulFunctionCall","src":"14119:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"14139:2:201","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14112:6:201"},"nodeType":"YulFunctionCall","src":"14112:30:201"},"nodeType":"YulExpressionStatement","src":"14112:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14162:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14173:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14158:3:201"},"nodeType":"YulFunctionCall","src":"14158:18:201"},{"hexValue":"475076323a206661696c6564207472616e73666572","kind":"string","nodeType":"YulLiteral","src":"14178:23:201","type":"","value":"GPv2: failed transfer"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14151:6:201"},"nodeType":"YulFunctionCall","src":"14151:51:201"},"nodeType":"YulExpressionStatement","src":"14151:51:201"},{"nodeType":"YulAssignment","src":"14211:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14223:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14234:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14219:3:201"},"nodeType":"YulFunctionCall","src":"14219:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14211:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14049:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14063:4:201","type":""}],"src":"13898:345:201"},{"body":{"nodeType":"YulBlock","src":"14405:162:201","statements":[{"nodeType":"YulAssignment","src":"14415:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14427:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14438:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14423:3:201"},"nodeType":"YulFunctionCall","src":"14423:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14415:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14457:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"14468:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14450:6:201"},"nodeType":"YulFunctionCall","src":"14450:25:201"},"nodeType":"YulExpressionStatement","src":"14450:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14495:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14506:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14491:3:201"},"nodeType":"YulFunctionCall","src":"14491:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"14511:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14484:6:201"},"nodeType":"YulFunctionCall","src":"14484:34:201"},"nodeType":"YulExpressionStatement","src":"14484:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14538:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14549:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14534:3:201"},"nodeType":"YulFunctionCall","src":"14534:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"14554:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14527:6:201"},"nodeType":"YulFunctionCall","src":"14527:34:201"},"nodeType":"YulExpressionStatement","src":"14527:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14358:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14369:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14377:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14385:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14396:4:201","type":""}],"src":"14248:319:201"},{"body":{"nodeType":"YulBlock","src":"14813:382:201","statements":[{"nodeType":"YulAssignment","src":"14823:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14835:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14846:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14831:3:201"},"nodeType":"YulFunctionCall","src":"14831:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14823:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"14859:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14869:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"14863:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14927:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14942:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"14950:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14938:3:201"},"nodeType":"YulFunctionCall","src":"14938:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14920:6:201"},"nodeType":"YulFunctionCall","src":"14920:34:201"},"nodeType":"YulExpressionStatement","src":"14920:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14974:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14985:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14970:3:201"},"nodeType":"YulFunctionCall","src":"14970:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"14994:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15002:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14990:3:201"},"nodeType":"YulFunctionCall","src":"14990:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14963:6:201"},"nodeType":"YulFunctionCall","src":"14963:43:201"},"nodeType":"YulExpressionStatement","src":"14963:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15026:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15037:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15022:3:201"},"nodeType":"YulFunctionCall","src":"15022:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"15046:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15054:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15042:3:201"},"nodeType":"YulFunctionCall","src":"15042:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15015:6:201"},"nodeType":"YulFunctionCall","src":"15015:43:201"},"nodeType":"YulExpressionStatement","src":"15015:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15078:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15089:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15074:3:201"},"nodeType":"YulFunctionCall","src":"15074:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"15094:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15067:6:201"},"nodeType":"YulFunctionCall","src":"15067:34:201"},"nodeType":"YulExpressionStatement","src":"15067:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15121:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15132:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15117:3:201"},"nodeType":"YulFunctionCall","src":"15117:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"15138:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15110:6:201"},"nodeType":"YulFunctionCall","src":"15110:35:201"},"nodeType":"YulExpressionStatement","src":"15110:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15165:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15176:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15161:3:201"},"nodeType":"YulFunctionCall","src":"15161:19:201"},{"name":"value5","nodeType":"YulIdentifier","src":"15182:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15154:6:201"},"nodeType":"YulFunctionCall","src":"15154:35:201"},"nodeType":"YulExpressionStatement","src":"15154:35:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14742:9:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"14753:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"14761:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14769:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14777:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14785:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14793:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14804:4:201","type":""}],"src":"14572:623:201"},{"body":{"nodeType":"YulBlock","src":"15248:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"15258:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"15268:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15262:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15311:21:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15326:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15329:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15322:3:201"},"nodeType":"YulFunctionCall","src":"15322:10:201"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15315:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15341:21:201","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"15356:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15359:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15352:3:201"},"nodeType":"YulFunctionCall","src":"15352:10:201"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"15345:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"15396:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15398:16:201"},"nodeType":"YulFunctionCall","src":"15398:18:201"},"nodeType":"YulExpressionStatement","src":"15398:18:201"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15377:3:201"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"15386:2:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"15390:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15382:3:201"},"nodeType":"YulFunctionCall","src":"15382:12:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15374:2:201"},"nodeType":"YulFunctionCall","src":"15374:21:201"},"nodeType":"YulIf","src":"15371:47:201"},{"nodeType":"YulAssignment","src":"15427:20:201","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15438:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"15443:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15434:3:201"},"nodeType":"YulFunctionCall","src":"15434:13:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"15427:3:201"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15231:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"15234:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"15240:3:201","type":""}],"src":"15200:253:201"},{"body":{"nodeType":"YulBlock","src":"15615:252:201","statements":[{"nodeType":"YulAssignment","src":"15625:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15637:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15648:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15633:3:201"},"nodeType":"YulFunctionCall","src":"15633:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15625:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15667:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15682:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"15690:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15678:3:201"},"nodeType":"YulFunctionCall","src":"15678:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15660:6:201"},"nodeType":"YulFunctionCall","src":"15660:74:201"},"nodeType":"YulExpressionStatement","src":"15660:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15754:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15765:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15750:3:201"},"nodeType":"YulFunctionCall","src":"15750:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"15770:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15743:6:201"},"nodeType":"YulFunctionCall","src":"15743:34:201"},"nodeType":"YulExpressionStatement","src":"15743:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15797:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15808:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15793:3:201"},"nodeType":"YulFunctionCall","src":"15793:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"15817:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"15825:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15813:3:201"},"nodeType":"YulFunctionCall","src":"15813:47:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15786:6:201"},"nodeType":"YulFunctionCall","src":"15786:75:201"},"nodeType":"YulExpressionStatement","src":"15786:75:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15568:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15579:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15587:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15595:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15606:4:201","type":""}],"src":"15458:409:201"},{"body":{"nodeType":"YulBlock","src":"15921:197:201","statements":[{"nodeType":"YulVariableDeclaration","src":"15931:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"15941:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15935:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15984:21:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15999:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16002:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15995:3:201"},"nodeType":"YulFunctionCall","src":"15995:10:201"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15988:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16014:21:201","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"16029:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16032:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16025:3:201"},"nodeType":"YulFunctionCall","src":"16025:10:201"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"16018:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"16060:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"16062:16:201"},"nodeType":"YulFunctionCall","src":"16062:18:201"},"nodeType":"YulExpressionStatement","src":"16062:18:201"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16050:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"16055:3:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16047:2:201"},"nodeType":"YulFunctionCall","src":"16047:12:201"},"nodeType":"YulIf","src":"16044:38:201"},{"nodeType":"YulAssignment","src":"16091:21:201","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16103:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"16108:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16099:3:201"},"nodeType":"YulFunctionCall","src":"16099:13:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"16091:4:201"}]}]},"name":"checked_sub_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15903:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"15906:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"15912:4:201","type":""}],"src":"15872:246:201"}]},"contents":"{\n    { }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_string_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$4860t_addresst_addresst_contract$_IAaveIncentivesController_$3875t_uint8t_string_calldata_ptrt_string_calldata_ptrt_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10\n    {\n        if slt(sub(dataEnd, headStart), 256) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := abi_decode_address(add(headStart, 64))\n        value3 := abi_decode_address(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        let _1 := 0xffffffffffffffff\n        if gt(calldataload(add(headStart, 160)), _1) { revert(0, 0) }\n        let value5_1, value6_1 := abi_decode_string_calldata(add(headStart, calldataload(add(headStart, 160))), dataEnd)\n        value5 := value5_1\n        value6 := value6_1\n        if gt(calldataload(add(headStart, 192)), _1) { revert(0, 0) }\n        let value7_1, value8_1 := abi_decode_string_calldata(add(headStart, calldataload(add(headStart, 192))), dataEnd)\n        value7 := value7_1\n        value8 := value8_1\n        if gt(calldataload(add(headStart, 224)), _1) { revert(0, 0) }\n        let value9_1, value10_1 := abi_decode_string_calldata(add(headStart, calldataload(add(headStart, 224))), dataEnd)\n        value9 := value9_1\n        value10 := value10_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_contract$_IAaveIncentivesController_$3875__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_contract$_IAaveIncentivesController_$3875(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_string_calldata(start, length, pos) -> end\n    {\n        mstore(pos, length)\n        calldatacopy(add(pos, 0x20), start, length)\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint8_t_string_calldata_ptr_t_string_calldata_ptr_t_bytes_calldata_ptr__to_t_address_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, 0xff))\n        mstore(add(headStart, 96), 192)\n        let tail_1 := abi_encode_string_calldata(value3, value4, add(headStart, 192))\n        mstore(add(headStart, 128), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string_calldata(value5, value6, tail_1)\n        mstore(add(headStart, 160), sub(tail_2, headStart))\n        tail := abi_encode_string_calldata(value7, value8, tail_2)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, 0x1901000000000000000000000000000000000000000000000000000000000000)\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"GPv2: failed transfer\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffff))\n    }\n    function checked_sub_t_uint128(x, y) -> diff\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"27744":[{"length":32,"start":8020}],"27926":[{"length":32,"start":3139},{"length":32,"start":5061},{"length":32,"start":6735}],"27929":[{"length":32,"start":1002},{"length":32,"start":1867},{"length":32,"start":2224},{"length":32,"start":2735},{"length":32,"start":3876},{"length":32,"start":4081},{"length":32,"start":4275},{"length":32,"start":4502},{"length":32,"start":4630},{"length":32,"start":4926},{"length":32,"start":6544},{"length":32,"start":7264},{"length":32,"start":9737},{"length":32,"start":10112}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106102415760003560e01c806375d2641311610145578063b1bf962d116100bd578063d7020d0a1161008c578063e075398611610071578063e0753986146105ba578063e655dbd814610616578063f866c3191461062957600080fd5b8063d7020d0a14610561578063dd62ed3e1461057457600080fd5b8063b1bf962d14610520578063b3f1c93d14610528578063cea9d26f1461053b578063d505accf1461054e57600080fd5b806395d89b4111610114578063a9059cbb116100f9578063a9059cbb146104d1578063ae167335146104e4578063b16a19de1461050257600080fd5b806395d89b41146104b6578063a457c2d7146104be57600080fd5b806375d264131461043157806378160376146104545780637df5bd3b146104905780637ecebe00146104a357600080fd5b80632f114618116101d857806339509351116101a75780636fd976761161018c5780636fd97676146103bf57806370a08231146103d25780637535d246146103e557600080fd5b806339509351146103995780634efecaa5146103ac57600080fd5b80632f1146181461034257806330adf81f14610355578063313ce5671461037c5780633644e5151461039157600080fd5b806318160ddd1161021457806318160ddd146102ff578063183fb413146103075780631da24f3e1461031c57806323b872dd1461032f57600080fd5b806306fdde0314610246578063095ea7b3146102645780630afbcdc9146102875780630bd7ad3b146102e9575b600080fd5b61024e61063c565b60405161025b91906132c7565b60405180910390f35b610277610272366004613316565b6106ce565b604051901515815260200161025b565b6102d4610295366004613342565b73ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546036546fffffffffffffffffffffffffffffffff90911691565b6040805192835260208301919091520161025b565b6102f1600181565b60405190815260200161025b565b6102f16106e4565b61031a6103153660046133b9565b6107c3565b005b6102f161032a366004613342565b610b80565b61027761033d3660046134ad565b610bbf565b61031a610350366004613342565b610c3f565b6102f17f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60395460405160ff909116815260200161025b565b6102f1610e9a565b6102776103a7366004613316565b610ea9565b61031a6103ba366004613316565b610eed565b61031a6103cd3660046134ad565b610fba565b6102f16103e0366004613342565b611064565b61040c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161025b565b603954610100900473ffffffffffffffffffffffffffffffffffffffff1661040c565b61024e6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b61031a61049e3660046134ee565b61115f565b6102f16104b1366004613342565b611258565b61024e611283565b6102776104cc366004613316565b611292565b6102776104df366004613316565b6112d6565b603c5473ffffffffffffffffffffffffffffffffffffffff1661040c565b603d5473ffffffffffffffffffffffffffffffffffffffff1661040c565b6102f16112f9565b610277610536366004613510565b611304565b61031a6105493660046134ad565b6113c1565b61031a61055c366004613556565b6115ff565b61031a61056f366004613510565b611959565b6102f16105823660046135c4565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260356020908152604080832093909416825291909152205490565b6102f16105c8366004613342565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b61031a610624366004613342565b611a4b565b61031a6106373660046134ad565b611c29565b60606037805461064b906135fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610677906135fd565b80156106c45780601f10610699576101008083540402835291602001916106c4565b820191906000526020600020905b8154815290600101906020018083116106a757829003601f168201915b5050505050905090565b60006106db338484611cdb565b50600192915050565b6000806106f060365490565b9050806106ff57600091505090565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526107bd917f0000000000000000000000000000000000000000000000000000000000000000169063d15e005390602401602060405180830381865afa158015610792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b6919061364b565b8290611d49565b91505090565b6001805460ff16806107d45750303b155b806107e0575060005481115b610871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b60015460ff161580156108ae57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f38370000000000000000000000000000000000000000000000000000000000008152509061096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b506109ab88888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611da092505050565b6109ea86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611db392505050565b603980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8b16179055603c805473ffffffffffffffffffffffffffffffffffffffff808f167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603d80548e8416921691909117905560398054918c16610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055610aa7611dc6565b603b819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fb19e051f8af41150ccccb3fc2c2d8d15f4a4cf434f32a559ba75fe73d6eea20b8e8d8d8d8d8d8d8d8d604051610b3a999897969594939291906136ad565b60405180910390a38015610b7157600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603460205260408120546fffffffffffffffffffffffffffffffff165b92915050565b600080610bcb83611e8b565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260356020908152604080832033808552925290912054919250610c2991879190610c24906fffffffffffffffffffffffffffffffff861690613757565b611cdb565b610c34858583611f31565b506001949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd0919061376e565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015610d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d61919061378b565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090610dcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50603d546040517f5c19a95c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015290911690635c19a95c90602401600060405180830381600087803b158015610e3d57600080fd5b505af1158015610e51573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff851692507fc7a5523bfd09724fd56950e708e523ad6a61ab165b8e997a31d42357a77f0e0f9150600090a25050565b6000610ea4611f50565b905090565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106db918590610c249086906137ad565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610f91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50603d54610fb69073ffffffffffffffffffffffffffffffffffffffff168383611f89565b5050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461105e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091610bb9917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa1580156110fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611120919061364b565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260409020546fffffffffffffffffffffffffffffffff165b90611d49565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611203576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b508161120d575050565b603c54611253907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff16848461205c565b505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603a6020526040812054610bb9565b60606038805461064b906135fd565b33600081815260356020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106db918590610c24908690613757565b6000806112e283611e8b565b90506112ef338583611f31565b5060019392505050565b6000610ea460365490565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152600090337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146113ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b506113b88585858561205c565b95945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa15801561142e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611452919061376e565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156114bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e3919061378b565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50603d5460408051808201909152600281527f383500000000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff868116911614156115dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b5061105e73ffffffffffffffffffffffffffffffffffffffff85168484611f89565b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8816611681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50834211156040518060400160405280600281526020017f3738000000000000000000000000000000000000000000000000000000000000815250906116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b5073ffffffffffffffffffffffffffffffffffffffff87166000908152603a602052604081205490611724610e9a565b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9602082015273ffffffffffffffffffffffffffffffffffffffff808d1692820192909252908a1660608201526080810189905260a0810184905260c0810188905260e001604051602081830303815290604052805190602001206040516020016117e59291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa15801561186b573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f373900000000000000000000000000000000000000000000000000000000000081525090611911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b5061191d8260016137ad565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603a602052604090205561194e898989611cdb565b505050505050505050565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146119fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50611a0a8484848461229d565b73ffffffffffffffffffffffffffffffffffffffff8316301461105e57603d5461105e9073ffffffffffffffffffffffffffffffffffffffff168484611f89565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611adc919061376e565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015611b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6d919061378b565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611bdb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b50506039805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b5061125383838360006125bb565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526035602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517611d7e57600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b8051610fb69060379060208401906131cc565b8051610fb69060389060208401906131cc565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611df1612837565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60006fffffffffffffffffffffffffffffffff821115611f2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610868565b5090565b6112538383836fffffffffffffffffffffffffffffffff1660016125bb565b60007f0000000000000000000000000000000000000000000000000000000000000000461415611f815750603b5490565b610ea4611dc6565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1611fec573d6000803e3d6000fd5b50611ff684612841565b61105e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e7366657200000000000000000000006044820152606401610868565b600080612069848461290d565b60408051808201909152600281527f32340000000000000000000000000000000000000000000000000000000000006020820152909150816120d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291612135918491700100000000000000000000000000000000900416611d49565b61213f8387611d49565b6121499190613757565b905061215485611e8b565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556121bc876121b785611e8b565b61294c565b60006121c882886137ad565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161222a91815260200190565b60405180910390a3604080518281526020810184905290810187905273ffffffffffffffffffffffffffffffffffffffff808a1691908b16907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35050159695505050505050565b60006122a9838361290d565b60408051808201909152600281527f3235000000000000000000000000000000000000000000000000000000000000602082015290915081612318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086891906132c7565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291612375918491700100000000000000000000000000000000900416611d49565b61237f8386611d49565b6123899190613757565b905061239484611e8b565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556123fc876123f785611e8b565b612ac8565b848111156124db5760006124108683613757565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161247291815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff89169081907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a3506125b2565b60006124e78287613757565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161254991815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff80891691908a16907f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f90906060015b60405180910390a3505b50505050505050565b603d546040517fd15e005300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201819052916000917f00000000000000000000000000000000000000000000000000000000000000009091169063d15e005390602401602060405180830381865afa158015612652573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612676919061364b565b905060006126bc826111598973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b90506000612702836111598973ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b905061271088888886612b2c565b84156127dd576040517fd5ed393300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015289811660248301528881166044830152606482018890526084820184905260a482018390527f0000000000000000000000000000000000000000000000000000000000000000169063d5ed39339060c401600060405180830381600087803b1580156127c457600080fd5b505af11580156127d8573d6000803e3d6000fd5b505050505b73ffffffffffffffffffffffffffffffffffffffff8088169089167f4beccb90f994c31aced7a23b5611020728a23d8ec5cddd1a3e9d97b96fda8666612823898761290d565b6040805191825260208201889052016125a8565b6060610ea461063c565b6000612881565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156128c057602081146128fa576128bb7f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f612848565b612907565b823b6128f1576128f17f475076323a206e6f74206120636f6e74726163740000000000000000000000006014612848565b60019150612907565b3d6000803e600051151591505b50919050565b600081156b033b2e3c9fd0803ce80000006002840419048411171561293157600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b60365461296b6fffffffffffffffffffffffffffffffff8316826137ad565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff166129b083826137c5565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff93909316929092179091556039546101009004168015612ac1576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590526fffffffffffffffffffffffffffffffff841660448301528216906331873e2e90606401600060405180830381600087803b158015612aad57600080fd5b505af115801561194e573d6000803e3d6000fd5b5050505050565b603654612ae76fffffffffffffffffffffffffffffffff831682613757565b60365573ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff166129b083826137f9565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603460205260408120546fffffffffffffffffffffffffffffffff8082169291612b88918491700100000000000000000000000000000000900416611d49565b612b928385611d49565b612b9c9190613757565b90506000612bde8673ffffffffffffffffffffffffffffffffffffffff166000908152603460205260409020546fffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff871660009081526034602052604081205491925090612c3990839070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16611d49565b612c438387611d49565b612c4d9190613757565b9050612c5885611e8b565b73ffffffffffffffffffffffffffffffffffffffff8916600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612cb785611e8b565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260346020526040902080546fffffffffffffffffffffffffffffffff928316700100000000000000000000000000000000029216919091179055612d298888612d24612d1f8a8a61290d565b611e8b565b612f21565b8215612dd85760405183815273ffffffffffffffffffffffffffffffffffffffff8916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805184815260208101859052808201879052905173ffffffffffffffffffffffffffffffffffffffff8a169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015612e145750600081115b15612ec25760405181815273ffffffffffffffffffffffffffffffffffffffff8816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101839052808201879052905173ffffffffffffffffffffffffffffffffffffffff89169133917f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969181900360600190a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516125a891815260200190565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603460205260409020546fffffffffffffffffffffffffffffffff16612f6382826137f9565b73ffffffffffffffffffffffffffffffffffffffff85811660009081526034602052604080822080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9586161790559186168152205416612fd783826137c5565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260346020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff939093169290921790915560395461010090041680156131c4576036546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152602482018390526fffffffffffffffffffffffffffffffff861660448301528316906331873e2e90606401600060405180830381600087803b1580156130d757600080fd5b505af11580156130eb573d6000803e3d6000fd5b505050508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16146125b2576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018390526fffffffffffffffffffffffffffffffff851660448301528316906331873e2e90606401600060405180830381600087803b1580156131aa57600080fd5b505af11580156131be573d6000803e3d6000fd5b50505050505b505050505050565b8280546131d8906135fd565b90600052602060002090601f0160209004810192826131fa5760008555613240565b82601f1061321357805160ff1916838001178555613240565b82800160010185558215613240579182015b82811115613240578251825591602001919060010190613225565b50611f2d9291505b80821115611f2d5760008155600101613248565b6000815180845260005b8181101561328257602081850181015186830182015201613266565b81811115613294576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006132da602083018461325c565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461330357600080fd5b50565b8035613311816132e1565b919050565b6000806040838503121561332957600080fd5b8235613334816132e1565b946020939093013593505050565b60006020828403121561335457600080fd5b81356132da816132e1565b803560ff8116811461331157600080fd5b60008083601f84011261338257600080fd5b50813567ffffffffffffffff81111561339a57600080fd5b6020830191508360208285010111156133b257600080fd5b9250929050565b60008060008060008060008060008060006101008c8e0312156133db57600080fd5b6133e48c613306565b9a506133f260208d01613306565b995061340060408d01613306565b985061340e60608d01613306565b975061341c60808d0161335f565b965067ffffffffffffffff8060a08e0135111561343857600080fd5b6134488e60a08f01358f01613370565b909750955060c08d013581101561345e57600080fd5b61346e8e60c08f01358f01613370565b909550935060e08d013581101561348457600080fd5b506134958d60e08e01358e01613370565b81935080925050509295989b509295989b9093969950565b6000806000606084860312156134c257600080fd5b83356134cd816132e1565b925060208401356134dd816132e1565b929592945050506040919091013590565b6000806040838503121561350157600080fd5b50508035926020909101359150565b6000806000806080858703121561352657600080fd5b8435613531816132e1565b93506020850135613541816132e1565b93969395505050506040820135916060013590565b600080600080600080600060e0888a03121561357157600080fd5b873561357c816132e1565b9650602088013561358c816132e1565b955060408801359450606088013593506135a86080890161335f565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156135d757600080fd5b82356135e2816132e1565b915060208301356135f2816132e1565b809150509250929050565b600181811c9082168061361157607f821691505b60208210811415612907577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006020828403121561365d57600080fd5b5051919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600073ffffffffffffffffffffffffffffffffffffffff808c168352808b1660208401525060ff8916604083015260c060608301526136f060c08301888a613664565b8281036080840152613703818789613664565b905082810360a0840152613718818587613664565b9c9b505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561376957613769613728565b500390565b60006020828403121561378057600080fd5b81516132da816132e1565b60006020828403121561379d57600080fd5b815180151581146132da57600080fd5b600082198211156137c0576137c0613728565b500190565b60006fffffffffffffffffffffffffffffffff8083168185168083038211156137f0576137f0613728565b01949350505050565b60006fffffffffffffffffffffffffffffffff8381169083168181101561382257613822613728565b03939250505056fea2646970667358221220fc681d3012cfffb9497068f8162f8010ee20de480cb3e07cde9ef58002ca545b64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x241 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x75D26413 GT PUSH2 0x145 JUMPI DUP1 PUSH4 0xB1BF962D GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xD7020D0A GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xE0753986 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE0753986 EQ PUSH2 0x5BA JUMPI DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x616 JUMPI DUP1 PUSH4 0xF866C319 EQ PUSH2 0x629 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xD7020D0A EQ PUSH2 0x561 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x574 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB1BF962D EQ PUSH2 0x520 JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x528 JUMPI DUP1 PUSH4 0xCEA9D26F EQ PUSH2 0x53B JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x54E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95D89B41 GT PUSH2 0x114 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x4D1 JUMPI DUP1 PUSH4 0xAE167335 EQ PUSH2 0x4E4 JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x502 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x4B6 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x4BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x75D26413 EQ PUSH2 0x431 JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x454 JUMPI DUP1 PUSH4 0x7DF5BD3B EQ PUSH2 0x490 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x4A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2F114618 GT PUSH2 0x1D8 JUMPI DUP1 PUSH4 0x39509351 GT PUSH2 0x1A7 JUMPI DUP1 PUSH4 0x6FD97676 GT PUSH2 0x18C JUMPI DUP1 PUSH4 0x6FD97676 EQ PUSH2 0x3BF JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x3D2 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x3E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x39509351 EQ PUSH2 0x399 JUMPI DUP1 PUSH4 0x4EFECAA5 EQ PUSH2 0x3AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2F114618 EQ PUSH2 0x342 JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x355 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x37C JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x391 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0x214 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2FF JUMPI DUP1 PUSH4 0x183FB413 EQ PUSH2 0x307 JUMPI DUP1 PUSH4 0x1DA24F3E EQ PUSH2 0x31C JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x32F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x246 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x264 JUMPI DUP1 PUSH4 0xAFBCDC9 EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0xBD7AD3B EQ PUSH2 0x2E9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x24E PUSH2 0x63C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x25B SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x277 PUSH2 0x272 CALLDATASIZE PUSH1 0x4 PUSH2 0x3316 JUMP JUMPDEST PUSH2 0x6CE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x2D4 PUSH2 0x295 CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x36 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x2F1 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0x6E4 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x315 CALLDATASIZE PUSH1 0x4 PUSH2 0x33B9 JUMP JUMPDEST PUSH2 0x7C3 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2F1 PUSH2 0x32A CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0xB80 JUMP JUMPDEST PUSH2 0x277 PUSH2 0x33D CALLDATASIZE PUSH1 0x4 PUSH2 0x34AD JUMP JUMPDEST PUSH2 0xBBF JUMP JUMPDEST PUSH2 0x31A PUSH2 0x350 CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0xC3F JUMP JUMPDEST PUSH2 0x2F1 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25B JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0xE9A JUMP JUMPDEST PUSH2 0x277 PUSH2 0x3A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x3316 JUMP JUMPDEST PUSH2 0xEA9 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x3BA CALLDATASIZE PUSH1 0x4 PUSH2 0x3316 JUMP JUMPDEST PUSH2 0xEED JUMP JUMPDEST PUSH2 0x31A PUSH2 0x3CD CALLDATASIZE PUSH1 0x4 PUSH2 0x34AD JUMP JUMPDEST PUSH2 0xFBA JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0x3E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0x1064 JUMP JUMPDEST PUSH2 0x40C PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x25B JUMP JUMPDEST PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x40C JUMP JUMPDEST PUSH2 0x24E PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x49E CALLDATASIZE PUSH1 0x4 PUSH2 0x34EE JUMP JUMPDEST PUSH2 0x115F JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0x4B1 CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0x1258 JUMP JUMPDEST PUSH2 0x24E PUSH2 0x1283 JUMP JUMPDEST PUSH2 0x277 PUSH2 0x4CC CALLDATASIZE PUSH1 0x4 PUSH2 0x3316 JUMP JUMPDEST PUSH2 0x1292 JUMP JUMPDEST PUSH2 0x277 PUSH2 0x4DF CALLDATASIZE PUSH1 0x4 PUSH2 0x3316 JUMP JUMPDEST PUSH2 0x12D6 JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x40C JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x40C JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0x12F9 JUMP JUMPDEST PUSH2 0x277 PUSH2 0x536 CALLDATASIZE PUSH1 0x4 PUSH2 0x3510 JUMP JUMPDEST PUSH2 0x1304 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x549 CALLDATASIZE PUSH1 0x4 PUSH2 0x34AD JUMP JUMPDEST PUSH2 0x13C1 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x55C CALLDATASIZE PUSH1 0x4 PUSH2 0x3556 JUMP JUMPDEST PUSH2 0x15FF JUMP JUMPDEST PUSH2 0x31A PUSH2 0x56F CALLDATASIZE PUSH1 0x4 PUSH2 0x3510 JUMP JUMPDEST PUSH2 0x1959 JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0x582 CALLDATASIZE PUSH1 0x4 PUSH2 0x35C4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2F1 PUSH2 0x5C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x31A PUSH2 0x624 CALLDATASIZE PUSH1 0x4 PUSH2 0x3342 JUMP JUMPDEST PUSH2 0x1A4B JUMP JUMPDEST PUSH2 0x31A PUSH2 0x637 CALLDATASIZE PUSH1 0x4 PUSH2 0x34AD JUMP JUMPDEST PUSH2 0x1C29 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x37 DUP1 SLOAD PUSH2 0x64B SWAP1 PUSH2 0x35FD JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x677 SWAP1 PUSH2 0x35FD JUMP JUMPDEST DUP1 ISZERO PUSH2 0x6C4 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x699 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6C4 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 0x6A7 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6DB CALLER DUP5 DUP5 PUSH2 0x1CDB JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x6F0 PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x6FF JUMPI PUSH1 0x0 SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x7BD SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x792 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7B6 SWAP2 SWAP1 PUSH2 0x364B JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1D49 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x7D4 JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x7E0 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x871 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x8AE JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x96B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH2 0x9AB DUP9 DUP9 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1DA0 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x9EA DUP7 DUP7 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1DB3 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x39 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0xFF DUP12 AND OR SWAP1 SSTORE PUSH1 0x3C DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP16 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x3D DUP1 SLOAD DUP15 DUP5 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x39 DUP1 SLOAD SWAP2 DUP13 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0xAA7 PUSH2 0x1DC6 JUMP JUMPDEST PUSH1 0x3B DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xB19E051F8AF41150CCCCB3FC2C2D8D15F4A4CF434F32A559BA75FE73D6EEA20B DUP15 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 DUP14 PUSH1 0x40 MLOAD PUSH2 0xB3A SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x36AD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0xB71 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xBCB DUP4 PUSH2 0x1E8B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH2 0xC29 SWAP2 DUP8 SWAP2 SWAP1 PUSH2 0xC24 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP1 PUSH2 0x3757 JUMP JUMPDEST PUSH2 0x1CDB JUMP JUMPDEST PUSH2 0xC34 DUP6 DUP6 DUP4 PUSH2 0x1F31 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCAC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCD0 SWAP2 SWAP1 PUSH2 0x376E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD3D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD61 SWAP2 SWAP1 PUSH2 0x378B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xDCF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0x5C19A95C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x5C19A95C SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE51 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP3 POP PUSH32 0xC7A5523BFD09724FD56950E708E523AD6A61AB165B8E997A31D42357A77F0E0F SWAP2 POP PUSH1 0x0 SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEA4 PUSH2 0x1F50 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 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 0x6DB SWAP2 DUP6 SWAP1 PUSH2 0xC24 SWAP1 DUP7 SWAP1 PUSH2 0x37AD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xF91 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH2 0xFB6 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 DUP4 PUSH2 0x1F89 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x105E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH2 0xBB9 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1120 SWAP2 SWAP1 PUSH2 0x364B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1203 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP DUP2 PUSH2 0x120D JUMPI POP POP JUMP JUMPDEST PUSH1 0x3C SLOAD PUSH2 0x1253 SWAP1 PUSH32 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x205C JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xBB9 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x38 DUP1 SLOAD PUSH2 0x64B SWAP1 PUSH2 0x35FD JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 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 0x6DB SWAP2 DUP6 SWAP1 PUSH2 0xC24 SWAP1 DUP7 SWAP1 PUSH2 0x3757 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x12E2 DUP4 PUSH2 0x1E8B JUMP JUMPDEST SWAP1 POP PUSH2 0x12EF CALLER DUP6 DUP4 PUSH2 0x1F31 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xEA4 PUSH1 0x36 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x13AB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH2 0x13B8 DUP6 DUP6 DUP6 DUP6 PUSH2 0x205C JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x142E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1452 SWAP2 SWAP1 PUSH2 0x376E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14E3 SWAP2 SWAP1 PUSH2 0x378B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1551 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH1 0x3D SLOAD PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3835000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND SWAP2 AND EQ ISZERO PUSH2 0x15DD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH2 0x105E PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 DUP5 PUSH2 0x1F89 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x1681 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x16F4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x1724 PUSH2 0xE9A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP14 AND SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP11 AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xE0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x17E5 SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x186B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1911 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH2 0x191D DUP3 PUSH1 0x1 PUSH2 0x37AD JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x194E DUP10 DUP10 DUP10 PUSH2 0x1CDB JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x19FD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH2 0x1A0A DUP5 DUP5 DUP5 DUP5 PUSH2 0x229D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ADDRESS EQ PUSH2 0x105E JUMPI PUSH1 0x3D SLOAD PUSH2 0x105E SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP5 PUSH2 0x1F89 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AB8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1ADC SWAP2 SWAP1 PUSH2 0x376E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B49 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B6D SWAP2 SWAP1 PUSH2 0x378B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1BDB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP POP PUSH1 0x39 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1CCD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH2 0x1253 DUP4 DUP4 DUP4 PUSH1 0x0 PUSH2 0x25BB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x35 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1D7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH2 0xFB6 SWAP1 PUSH1 0x37 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x31CC JUMP JUMPDEST DUP1 MLOAD PUSH2 0xFB6 SWAP1 PUSH1 0x38 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x31CC JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x1DF1 PUSH2 0x2837 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1F2D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x868 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x1253 DUP4 DUP4 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH2 0x25BB JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0x1F81 JUMPI POP PUSH1 0x3B SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xEA4 PUSH2 0x1DC6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x1FEC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1FF6 DUP5 PUSH2 0x2841 JUMP JUMPDEST PUSH2 0x105E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x868 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2069 DUP5 DUP5 PUSH2 0x290D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x20D8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x2135 SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x213F DUP4 DUP8 PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x2149 SWAP2 SWAP1 PUSH2 0x3757 JUMP JUMPDEST SWAP1 POP PUSH2 0x2154 DUP6 PUSH2 0x1E8B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x21BC DUP8 PUSH2 0x21B7 DUP6 PUSH2 0x1E8B JUMP JUMPDEST PUSH2 0x294C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x21C8 DUP3 DUP9 PUSH2 0x37AD JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x222A SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 AND SWAP2 SWAP1 DUP12 AND SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP ISZERO SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22A9 DUP4 DUP4 PUSH2 0x290D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x2318 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x868 SWAP2 SWAP1 PUSH2 0x32C7 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x2375 SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x237F DUP4 DUP7 PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x2389 SWAP2 SWAP1 PUSH2 0x3757 JUMP JUMPDEST SWAP1 POP PUSH2 0x2394 DUP5 PUSH2 0x1E8B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x23FC DUP8 PUSH2 0x23F7 DUP6 PUSH2 0x1E8B JUMP JUMPDEST PUSH2 0x2AC8 JUMP JUMPDEST DUP5 DUP2 GT ISZERO PUSH2 0x24DB JUMPI PUSH1 0x0 PUSH2 0x2410 DUP7 DUP4 PUSH2 0x3757 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x2472 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 DUP2 SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x25B2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x24E7 DUP3 DUP8 PUSH2 0x3757 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x2549 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP2 SWAP1 DUP11 AND SWAP1 PUSH32 0x4CF25BC1D991C17529C25213D3CC0CDA295EEAAD5F13F361969B12EA48015F90 SWAP1 PUSH1 0x60 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0xD15E005300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xD15E0053 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2652 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2676 SWAP2 SWAP1 PUSH2 0x364B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x26BC DUP3 PUSH2 0x1159 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2702 DUP4 PUSH2 0x1159 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x2710 DUP9 DUP9 DUP9 DUP7 PUSH2 0x2B2C JUMP JUMPDEST DUP5 ISZERO PUSH2 0x27DD JUMPI PUSH1 0x40 MLOAD PUSH32 0xD5ED393300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP10 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP9 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0xA4 DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xD5ED3933 SWAP1 PUSH1 0xC4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x27C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x27D8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND SWAP1 DUP10 AND PUSH32 0x4BECCB90F994C31ACED7A23B5611020728A23D8EC5CDDD1A3E9D97B96FDA8666 PUSH2 0x2823 DUP10 DUP8 PUSH2 0x290D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP9 SWAP1 MSTORE ADD PUSH2 0x25A8 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xEA4 PUSH2 0x63C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2881 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x28C0 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x28FA JUMPI PUSH2 0x28BB PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x2848 JUMP JUMPDEST PUSH2 0x2907 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x28F1 JUMPI PUSH2 0x28F1 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x2848 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x2907 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x2931 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x296B PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x37AD JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x29B0 DUP4 DUP3 PUSH2 0x37C5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x2AC1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x194E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x36 SLOAD PUSH2 0x2AE7 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x3757 JUMP JUMPDEST PUSH1 0x36 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x29B0 DUP4 DUP3 PUSH2 0x37F9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x2B88 SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x2B92 DUP4 DUP6 PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x2B9C SWAP2 SWAP1 PUSH2 0x3757 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2BDE DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x2C39 SWAP1 DUP4 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x2C43 DUP4 DUP8 PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0x2C4D SWAP2 SWAP1 PUSH2 0x3757 JUMP JUMPDEST SWAP1 POP PUSH2 0x2C58 DUP6 PUSH2 0x1E8B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2CB7 DUP6 PUSH2 0x1E8B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x2D29 DUP9 DUP9 PUSH2 0x2D24 PUSH2 0x2D1F DUP11 DUP11 PUSH2 0x290D JUMP JUMPDEST PUSH2 0x1E8B JUMP JUMPDEST PUSH2 0x2F21 JUMP JUMPDEST DUP3 ISZERO PUSH2 0x2DD8 JUMPI PUSH1 0x40 MLOAD DUP4 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x2E14 JUMPI POP PUSH1 0x0 DUP2 GT JUMPDEST ISZERO PUSH2 0x2EC2 JUMPI PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP4 SWAP1 MSTORE DUP1 DUP3 ADD DUP8 SWAP1 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP2 CALLER SWAP2 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG3 JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP9 PUSH1 0x40 MLOAD PUSH2 0x25A8 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2F63 DUP3 DUP3 PUSH2 0x37F9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 AND OR SWAP1 SSTORE SWAP2 DUP7 AND DUP2 MSTORE KECCAK256 SLOAD AND PUSH2 0x2FD7 DUP4 DUP3 PUSH2 0x37C5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x39 SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x31C4 JUMPI PUSH1 0x36 SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x30D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x30EB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x25B2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x31AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x31BE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x31D8 SWAP1 PUSH2 0x35FD JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x31FA JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x3240 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x3213 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x3240 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x3240 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x3240 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x3225 JUMP JUMPDEST POP PUSH2 0x1F2D SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1F2D JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x3248 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3282 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x3266 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x3294 JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x32DA PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x325C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3303 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x3311 DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3329 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3334 DUP2 PUSH2 0x32E1 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 0x3354 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x32DA DUP2 PUSH2 0x32E1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3311 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x3382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x339A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x33B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x100 DUP13 DUP15 SUB SLT ISZERO PUSH2 0x33DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x33E4 DUP13 PUSH2 0x3306 JUMP JUMPDEST SWAP11 POP PUSH2 0x33F2 PUSH1 0x20 DUP14 ADD PUSH2 0x3306 JUMP JUMPDEST SWAP10 POP PUSH2 0x3400 PUSH1 0x40 DUP14 ADD PUSH2 0x3306 JUMP JUMPDEST SWAP9 POP PUSH2 0x340E PUSH1 0x60 DUP14 ADD PUSH2 0x3306 JUMP JUMPDEST SWAP8 POP PUSH2 0x341C PUSH1 0x80 DUP14 ADD PUSH2 0x335F JUMP JUMPDEST SWAP7 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP1 PUSH1 0xA0 DUP15 ADD CALLDATALOAD GT ISZERO PUSH2 0x3438 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3448 DUP15 PUSH1 0xA0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x3370 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0xC0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x345E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x346E DUP15 PUSH1 0xC0 DUP16 ADD CALLDATALOAD DUP16 ADD PUSH2 0x3370 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP PUSH1 0xE0 DUP14 ADD CALLDATALOAD DUP2 LT ISZERO PUSH2 0x3484 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3495 DUP14 PUSH1 0xE0 DUP15 ADD CALLDATALOAD DUP15 ADD PUSH2 0x3370 JUMP JUMPDEST DUP2 SWAP4 POP DUP1 SWAP3 POP POP POP SWAP3 SWAP6 SWAP9 SWAP12 POP SWAP3 SWAP6 SWAP9 SWAP12 SWAP1 SWAP4 SWAP7 SWAP10 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x34C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x34CD DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x34DD DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3501 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3526 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x3531 DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x3541 DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x3571 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x357C DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x358C DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x35A8 PUSH1 0x80 DUP10 ADD PUSH2 0x335F JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x35D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x35E2 DUP2 PUSH2 0x32E1 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x35F2 DUP2 PUSH2 0x32E1 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x3611 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x2907 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x365D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 ADD ADD MSTORE PUSH1 0x0 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND DUP5 ADD ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND DUP4 MSTORE DUP1 DUP12 AND PUSH1 0x20 DUP5 ADD MSTORE POP PUSH1 0xFF DUP10 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xC0 PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x36F0 PUSH1 0xC0 DUP4 ADD DUP9 DUP11 PUSH2 0x3664 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x3703 DUP2 DUP8 DUP10 PUSH2 0x3664 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x3718 DUP2 DUP6 DUP8 PUSH2 0x3664 JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x3769 JUMPI PUSH2 0x3769 PUSH2 0x3728 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3780 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x32DA DUP2 PUSH2 0x32E1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x379D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x32DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x37C0 JUMPI PUSH2 0x37C0 PUSH2 0x3728 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x37F0 JUMPI PUSH2 0x37F0 PUSH2 0x3728 JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x3822 JUMPI PUSH2 0x3822 PUSH2 0x3728 JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xFC PUSH9 0x1D3012CFFFB9497068 0xF8 AND 0x2F DUP1 LT 0xEE KECCAK256 0xDE BASEFEE 0xC 0xB3 0xE0 PUSH29 0xDE9EF58002CA545B64736F6C634300080A003300000000000000000000 ","sourceMap":"464:734:98:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84:103;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4534:158;;;;;;:::i;:::-;;:::i;:::-;;;1558:14:201;;1551:22;1533:41;;1521:2;1506:18;4534:158:103;1393:187:201;1386:173:105;;;;;;:::i;:::-;3518:19:103;;1479:7:105;3518:19:103;;;:10;:19;;;;;:27;3376:12;;3518:27;;;;;1386:173:105;;;;;2011:25:201;;;2067:2;2052:18;;2045:34;;;;1984:18;1386:173:105;1837:248:201;1450:45:97;;1492:3;1450:45;;;;;2236:25:201;;;2224:2;2209:18;1450:45:97;2090:177:201;4276:307:97;;;:::i;1990:850::-;;;;;;:::i;:::-;;:::i;:::-;;1225:119:105;;;;;;:::i;:::-;;:::i;4721:327:103:-;;;;;;:::i;:::-;;:::i;1017:179:98:-;;;;;;:::i;:::-;;:::i;1304:141:97:-;;1350:95;1304:141;;3178:86:103;3250:9;;3178:86;;3250:9;;;;4990:36:201;;4978:2;4963:18;3178:86:103;4848:184:201;7503:130:97;;;:::i;5296:204:103:-;;;;;;:::i;:::-;;:::i;4888:161:97:-;;;;;;:::i;:::-;;:::i;5079:163::-;;;;;;:::i;:::-;;:::i;4035:212::-;;;;;;:::i;:::-;;:::i;2408:27:103:-;;;;;;;;5227:42:201;5215:55;;;5197:74;;5185:2;5170:18;2408:27:103;5037:240:201;3691:132:103;3797:21;;;;;;;3691:132;;192:50:102;;232:10;;;;;;;;;;;;;;;;;192:50;;3484:196:97;;;;;;:::i;:::-;;:::i;7782:128::-;;;;;;:::i;:::-;;:::i;3051:90:103:-;;;:::i;5758:226::-;;;;;;:::i;:::-;;:::i;4106:213::-;;;;;;:::i;:::-;;:::i;4613:104:97:-;4703:9;;;;4613:104;;4747:111;4837:16;;;;4747:111;;1601:113:105;;;:::i;2870:215:97:-;;;;;;:::i;:::-;;:::i;8069:223::-;;;;;;:::i;:::-;;:::i;5272:755::-;;;;;;:::i;:::-;;:::i;3115:339::-;;;;;;:::i;:::-;;:::i;4348:157:103:-;;;;;;:::i;:::-;4473:18;;;;4451:7;4473:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4348:157;1756:138:105;;;;;;:::i;:::-;1858:16;;1836:7;1858:16;;;:10;:16;;;;;:31;;;;;;;1756:138;3938:139:103;;;;;;:::i;:::-;;:::i;3710:296:97:-;;;;;;:::i;:::-;;:::i;2930:84:103:-;2976:13;3004:5;2997:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84;:::o;4534:158::-;4619:4;4631:39;678:10:4;4654:7:103;4663:6;4631:8;:39::i;:::-;-1:-1:-1;4683:4:103;4534:158;;;;:::o;4276:307:97:-;4364:7;4379:27;4409:19;3376:12:103;;;3293:100;4409:19:97;4379:49;-1:-1:-1;4439:24:97;4435:53;;4480:1;4473:8;;;4276:307;:::o;4435:53::-;4560:16;;4528:49;;;;;:31;4560:16;;;4528:49;;;5197:74:201;4501:77:97;;4528:4;:31;;;;5170:18:201;;4528:49:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4501:19;;:26;:77::i;:::-;4494:84;;;4276:307;:::o;1990:850::-;1492:3;1217:12:71;;;;;:31;;-1:-1:-1;2436:9:71;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;9035:2:201;1202:146:71;;;9017:21:201;9074:2;9054:18;;;9047:30;9113:34;9093:18;;;9086:62;9184:16;9164:18;;;9157:44;9218:19;;1202:146:71;;;;;;;;;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;2334:4:97::1;2314:24;;:16;:24;;;2340:34;;;;;;;;;;;;;;;;::::0;2306:69:::1;;;;;;;;;;;;;;:::i;:::-;;2381:20;2390:10;;2381:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;2381:8:97::1;::::0;-1:-1:-1;;;2381:20:97:i:1;:::-;2407:24;2418:12;;2407:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;2407:10:97::1;::::0;-1:-1:-1;;;2407:24:97:i:1;:::-;7979:9:103::0;:23;;;;;;;;;;2472:9:97::1;:20:::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;;;2498:16:::1;:34:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;2538:21:::1;:44:::0;;;;::::1;2472:20;2538:44;::::0;;;::::1;::::0;;;::::1;::::0;;2608:27:::1;:25;:27::i;:::-;2589:16;:46;;;;2697:4;2647:188;;2666:15;2647:188;;;2710:8;2734:20;2763:14;2785:10;;2803:12;;2823:6;;2647:188;;;;;;;;;;;;;;:::i;:::-;;;;;;;;1510:14:71::0;1506:55;;;1534:12;:20;;;;;;1506:55;1158:407;;1990:850:97;;;;;;;;;;;:::o;1225:119:105:-;3518:19:103;;;1296:7:105;3518:19:103;;;:10;:19;;;;;:27;;;1318:21:105;1311:28;1225:119;-1:-1:-1;;1225:119:105:o;4721:327:103:-;4845:4;4857:18;4878;:6;:16;:18::i;:::-;4933:19;;;;;;;:11;:19;;;;;;;;678:10:4;4933:33:103;;;;;;;;;4857:39;;-1:-1:-1;4902:78:103;;4911:6;;678:10:4;4933:46:103;;;;;;;:::i;:::-;4902:8;:78::i;:::-;4986:40;4996:6;5004:9;5015:10;4986:9;:40::i;:::-;-1:-1:-1;5039:4:103;;4721:327;-1:-1:-1;;;;4721:327:103:o;1017:179:98:-;1211:22:103;1248:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1297;;;;;1320:10;1297:34;;;5197:74:201;1211:72:103;;-1:-1:-1;1297:22:103;;;;;;5170:18:201;;1297:34:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1333:28;;;;;;;;;;;;;;;;;1289:73;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1112:16:98::1;::::0;1095:54:::1;::::0;;;;1112:16:::1;5215:55:201::0;;;1095:54:98::1;::::0;::::1;5197:74:201::0;1112:16:98;;::::1;::::0;1095:43:::1;::::0;5170:18:201;;1095:54:98::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;1160:31:98::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;1160:31:98::1;::::0;-1:-1:-1;1160:31:98;;::::1;1205:169:103::0;1017:179:98;:::o;7503:130:97:-;7582:7;7604:24;:22;:24::i;:::-;7597:31;;7503:130;:::o;5296:204:103:-;678:10:4;5386:4:103;5430:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;5386:4;;5398:80;;5421:7;;5430:47;;5467:10;;5430:47;:::i;4888:161:97:-;1519:26:103;;;;;;;;;;;;;;;;;678:10:4;1512:4:103;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4998:16:97::1;::::0;4991:53:::1;::::0;4998:16:::1;;5029:6:::0;5037;4991:37:::1;:53::i;:::-;4888:161:::0;;:::o;5079:163::-;1519:26:103;;;;;;;;;;;;;;;;;678:10:4;1512:4:103;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;5079:163:97;;;:::o;4035:212::-;4224:16;;4192:49;;;;;:31;4224:16;;;4192:49;;;5197:74:201;4141:7:97;;4163:79;;4192:4;:31;;;;;;5170:18:201;;4192:49:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3518:19:103;;;3496:7;3518:19;;;:10;:19;;;;;:27;;;4163:21:97;:28;;:79::i;3484:196::-;1519:26:103;;;;;;;;;;;;;;;;;678:10:4;1512:4:103;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3584:11:97;3580:38:::1;;4888:161:::0;;:::o;3580:38::-:1;3650:9;::::0;3623:52:::1;::::0;3643:4:::1;::::0;3650:9:::1;;3661:6:::0;3669:5;3623:11:::1;:52::i;:::-;;3484:196:::0;;:::o;7782:128::-;1342:14:102;;;7864:7:97;1342:14:102;;;:7;:14;;;;;;7886:19:97;1260:101:102;3051:90:103;3101:13;3129:7;3122:14;;;;;:::i;5758:226::-;678:10:4;5865:4:103;5909:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;5865:4;;5877:85;;5900:7;;5909:52;;5946:15;;5909:52;:::i;4106:213::-;4194:4;4206:18;4227;:6;:16;:18::i;:::-;4206:39;-1:-1:-1;4251:46:103;678:10:4;4275:9:103;4286:10;4251:9;:46::i;:::-;-1:-1:-1;4310:4:103;;4106:213;-1:-1:-1;;;4106:213:103:o;1601:113:105:-;1668:7;1690:19;3376:12:103;;;3293:100;2870:215:97;1519:26:103;;;;;;;;;;;;;;;;;3015:4:97;;678:10:4;1512:4:103;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3034:46:97::1;3046:6;3054:10;3066:6;3074:5;3034:11;:46::i;:::-;3027:53:::0;2870:215;-1:-1:-1;;;;;2870:215:97:o;8069:223::-;1211:22:103;1248:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1297;;;;;1320:10;1297:34;;;5197:74:201;1211:72:103;;-1:-1:-1;1297:22:103;;;;;;5170:18:201;;1297:34:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1333:28;;;;;;;;;;;;;;;;;1289:73;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;8189:16:97::1;::::0;8207:35:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;;8189:16:::1;8180:25:::0;;::::1;8189:16:::0;::::1;8180:25;;8172:71;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;8249:38:97::1;:26;::::0;::::1;8276:2:::0;8280:6;8249:26:::1;:38::i;5272:755::-:0;5469:29;;;;;;;;;;;;;;;;;5448:19;;;5440:59;;;;;;;;;;;;;:::i;:::-;;5563:8;5544:15;:27;;5573:25;;;;;;;;;;;;;;;;;5536:63;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5633:14:97;;;5605:25;5633:14;;;:7;:14;;;;;;;5733:18;:16;:18::i;:::-;5771:79;;;1350:95;5771:79;;;11789:25:201;11833:42;11911:15;;;11891:18;;;11884:43;;;;11963:15;;;11943:18;;;11936:43;11995:18;;;11988:34;;;12038:19;;;12031:35;;;12082:19;;;12075:35;;;11761:19;;5771:79:97;;;;;;;;;;;;5761:90;;;;;;5687:172;;;;;;;;12391:66:201;12379:79;;12483:1;12474:11;;12467:27;;;;12519:2;12510:12;;12503:28;12556:2;12547:12;;12121:444;5687:172:97;;;;;;;;;;;;;;5670:195;;5687:172;5670:195;;;;5888:26;;;;;;;;;12797:25:201;;;12870:4;12858:17;;12838:18;;;12831:45;;;;12892:18;;;12885:34;;;12935:18;;;12928:34;;;5670:195:97;-1:-1:-1;5888:26:97;;12769:19:201;;5888:26:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5879:35;;:5;:35;;;5916:24;;;;;;;;;;;;;;;;;5871:70;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5964:21:97;:17;5984:1;5964:21;:::i;:::-;5947:14;;;;;;;:7;:14;;;;;:38;5991:31;5955:5;6007:7;6016:5;5991:8;:31::i;:::-;5434:593;;5272:755;;;;;;;:::o;3115:339::-;1519:26:103;;;;;;;;;;;;;;;;;678:10:4;1512:4:103;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3265:54:97::1;3277:4;3283:20;3305:6;3313:5;3265:11;:54::i;:::-;3329:37;::::0;::::1;3361:4;3329:37;3325:125;;3383:16;::::0;3376:67:::1;::::0;3383:16:::1;;3414:20:::0;3436:6;3376:37:::1;:67::i;3938:139:103:-:0;1211:22;1248:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1297;;;;;1320:10;1297:34;;;5197:74:201;1211:72:103;;-1:-1:-1;1297:22:103;;;;;;5170:18:201;;1297:34:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1333:28;;;;;;;;;;;;;;;;;1289:73;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;4038:21:103::1;:34:::0;;::::1;::::0;;::::1;;;::::0;;;::::1;::::0;;;::::1;::::0;;3938:139::o;3710:296:97:-;1519:26:103;;;;;;;;;;;;;;;;;678:10:4;1512:4:103;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3968:33:97::1;3978:4;3984:2;3988:5;3995;3968:9;:33::i;7235:173:103:-:0;7324:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7371:32;;2236:25:201;;;7371:32:103;;2209:18:201;7371:32:103;;;;;;;7235:173;;;:::o;2253:319:90:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:90;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;7513:76:103:-;7569:15;;;;:5;;:15;;;;;:::i;7701:84::-;7761:19;;;;:7;;:19;;;;;:::i;1475:298:102:-;1535:7;292:95;1645:15;:13;:15::i;:::-;1629:33;;;;;;;232:10;;;;;;;;;;;;;;;;1582:178;;;;;13232:25:201;;;;13273:18;;;13266:34;;;;1674:26:102;13316:18:201;;;13309:34;1712:13:102;13359:18:201;;;13352:34;1745:4:102;13402:19:201;;;13395:84;13204:19;;1582:178:102;;;;;;;;;;;;1563:205;;;;;;1550:218;;1475:298;:::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;13692:2:201;1635:78:12;;;13674:21:201;13731:2;13711:18;;;13704:30;13770:34;13750:18;;;13743:62;13841:9;13821:18;;;13814:37;13868:19;;1635:78:12;13490:403:201;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;7213:131:97:-;7306:33;7316:4;7322:2;7326:6;7306:33;;7334:4;7306:9;:33::i;867:185:102:-;924:7;960:8;943:13;:25;939:69;;;-1:-1:-1;985:16:102;;;867:185::o;939:69::-;1020:27;:25;:27::i;441:657:1:-;668:4;662:11;538:23;680:36;;;765:42;757:51;;753:1;730:25;;723:86;846:2;823:26;;816:41;;;538:23;519:16;;916:2;662:11;519:16;887:5;880;875:50;865:154;;958:16;955:1;952;937:38;994:16;991:1;984:27;865:154;;1039:28;1061:5;1039:21;:28::i;:::-;1031:62;;;;;;;14100:2:201;1031:62:1;;;14082:21:201;14139:2;14119:18;;;14112:30;14178:23;14158:18;;;14151:51;14219:18;;1031:62:1;13898:345:201;2295:763:105;2421:4;;2456:20;:6;2470:5;2456:13;:20::i;:::-;2509:26;;;;;;;;;;;;;;;;;2433:43;;-1:-1:-1;2490:17:105;2482:54;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3518:19:103;;;2543:21:105;3518:19:103;;;:10;:19;;;;;:27;;;;;;2543:21:105;2662:59;;3518:27:103;;2683:37:105;;;;2662:20;:59::i;:::-;2626:27;:13;2647:5;2626:20;:27::i;:::-;:95;;;;:::i;:::-;2600:121;;2768:17;:5;:15;:17::i;:::-;2728:22;;;;;;;:10;:22;;;;;:57;;;;;;;;;;;;;;;;2792:43;2739:10;2810:24;:12;:22;:24::i;:::-;2792:5;:43::i;:::-;2842:20;2865:24;2874:15;2865:6;:24;:::i;:::-;2842:47;;2921:10;2900:46;;2917:1;2900:46;;;2933:12;2900:46;;;;2236:25:201;;2224:2;2209:18;;2090:177;2900:46:105;;;;;;;;2957:62;;;14450:25:201;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;2957:62:105;;;;;;;;;;;14438:2:201;14423:18;2957:62:105;;;;;;;-1:-1:-1;;3034:18:105;;2295:763;-1:-1:-1;;;;;;2295:763:105:o;3512:888::-;3609:20;3632;:6;3646:5;3632:13;:20::i;:::-;3685:26;;;;;;;;;;;;;;;;;3609:43;;-1:-1:-1;3666:17:105;3658:54;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3518:19:103;;;3719:21:105;3518:19:103;;;:10;:19;;;;;:27;;;;;;3719:21:105;3832:53;;3518:27:103;;3853:31:105;;;;3832:20;:53::i;:::-;3796:27;:13;3817:5;3796:20;:27::i;:::-;:89;;;;:::i;:::-;3770:115;;3926:17;:5;:15;:17::i;:::-;3892:16;;;;;;;:10;:16;;;;;:51;;;;;;;;;;;;;;;;3950:37;3903:4;3962:24;:12;:22;:24::i;:::-;3950:5;:37::i;:::-;4016:6;3998:15;:24;3994:402;;;4032:20;4055:24;4073:6;4055:15;:24;:::i;:::-;4032:47;;4113:4;4092:40;;4109:1;4092:40;;;4119:12;4092:40;;;;2236:25:201;;2224:2;2209:18;;2090:177;4092:40:105;;;;;;;;4145:54;;;14450:25:201;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;4145:54:105;;;;;;;;14438:2:201;14423:18;4145:54:105;;;;;;;4024:182;3994:402;;;4220:20;4243:24;4252:15;4243:6;:24;:::i;:::-;4220:47;;4303:1;4280:40;;4289:4;4280:40;;;4307:12;4280:40;;;;2236:25:201;;2224:2;2209:18;;2090:177;4280:40:105;;;;;;;;4333:56;;;14450:25:201;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;4333:56:105;;;;;;;;;;;14438:2:201;14423:18;4333:56:105;;;;;;;;4212:184;3994:402;3603:797;;;3512:888;;;;:::o;6387:592:97:-;6512:16;;6551:48;;;;;6512:16;;;;6551:48;;;5197:74:201;;;6512:16:97;6486:23;;6551:4;:31;;;;;;5170:18:201;;6551:48:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6535:64;;6606:25;6634:35;6663:5;6634:21;6650:4;3518:19:103;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;6634:35:97;6606:63;;6675:23;6701:33;6728:5;6701:19;6717:2;3518:19:103;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;6701:33:97;6675:59;;6741:40;6757:4;6763:2;6767:6;6775:5;6741:15;:40::i;:::-;6792:8;6788:121;;;6810:92;;;;;:21;14938:15:201;;;6810:92:97;;;14920:34:201;14990:15;;;14970:18;;;14963:43;15042:15;;;15022:18;;;15015:43;15074:18;;;15067:34;;;15117:19;;;15110:35;;;15161:19;;;15154:35;;;6810:4:97;:21;;;;14831:19:201;;6810:92:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6788:121;6920:54;;;;;;;;6946:20;:6;6960:5;6946:13;:20::i;:::-;6920:54;;;2011:25:201;;;2067:2;2052:18;;2045:34;;;1984:18;6920:54:97;1837:248:201;7943:96:97;8000:13;8028:6;:4;:6::i;2198:2524:1:-;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;4611:1;4605:8;4598:16;4591:24;4580:35;;3538:1174;;2198:2524;;;:::o;2840:322:90:-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:90;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;1069:519:104:-;1165:12;;1198:23;;;;1165:12;1198:23;:::i;:::-;1183:12;:38;1256:19;;;1228:25;1256:19;;;:10;:19;;;;;:27;;;1319:26;1339:6;1256:27;1319:26;:::i;:::-;1289:19;;;;;;;;:10;:19;;;;;:56;;;;;;;;;;;;;;;;1406:21;;1289:56;1406:21;;;1437:48;;1433:151;;1495:82;;;;;:38;15678:55:201;;;1495:82:104;;;15660:74:201;15750:18;;;15743:34;;;15825;15813:47;;15793:18;;;15786:75;1495:38:104;;;;;15633:18:201;;1495:82:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1433:151;1134:454;;;1069:519;;:::o;1781:520::-;1877:12;;1910:23;;;;1877:12;1910:23;:::i;:::-;1895:12;:38;1968:19;;;1940:25;1968:19;;;:10;:19;;;;;:27;;;2031:26;2051:6;1968:27;2031:26;:::i;4767:1203:105:-;3518:19:103;;;4867:27:105;3518:19:103;;;:10;:19;;;;;:27;;;;;;4867::105;5000:61;;3518:27:103;;5027:33:105;;;;5000:26;:61::i;:::-;4958:33;:19;4985:5;4958:26;:33::i;:::-;:103;;;;:::i;:::-;4926:135;;5068:30;5101:26;5117:9;3518:19:103;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;5101:26:105;5243:21;;;5133:32;5243:21;;;:10;:21;;;;;:36;5068:59;;-1:-1:-1;5133:32:105;5213:67;;5068:59;;5243:36;;;;;5213:29;:67::i;:::-;5168:36;:22;5198:5;5168:29;:36::i;:::-;:112;;;;:::i;:::-;5133:147;;5323:17;:5;:15;:17::i;:::-;5287:18;;;;;;;:10;:18;;;;;:53;;;;;;;;;;;;;;;;5385:17;:5;:15;:17::i;:::-;5346:21;;;;;;;:10;:21;;;;;:56;;;;;;;;;;;;;;;;5409:68;5425:6;5357:9;5444:32;:20;:6;5458:5;5444:13;:20::i;:::-;:30;:32::i;:::-;5409:15;:68::i;:::-;5488:25;;5484:194;;5528:51;;2236:25:201;;;5528:51:105;;;;5545:1;;5528:51;;2224:2:201;2209:18;5528:51:105;;;;;;;5592:79;;;14450:25:201;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;5592:79:105;;;;;;678:10:4;;5592:79:105;;;;;14438:2:201;5592:79:105;;;5484:194;5698:9;5688:19;;:6;:19;;;;:51;;;;;5738:1;5711:24;:28;5688:51;5684:235;;;5754:57;;2236:25:201;;;5754:57:105;;;;5771:1;;5754:57;;2224:2:201;2209:18;5754:57:105;;;;;;;5824:88;;;14450:25:201;;;14506:2;14491:18;;14484:34;;;14534:18;;;14527:34;;;5824:88:105;;;;;;678:10:4;;5824:88:105;;;;;14438:2:201;5824:88:105;;;5684:235;5947:9;5930:35;;5939:6;5930:35;;;5958:6;5930:35;;;;2236:25:201;;2224:2;2209:18;;2090:177;6215:772:103;6335:18;;;6308:24;6335:18;;;:10;:18;;;;;:26;;;6396:25;6415:6;6335:26;6396:25;:::i;:::-;6367:18;;;;;;;;:10;:18;;;;;;:54;;;;;;;;;;;6457:21;;;;;;:29;;6524:28;6546:6;6457:29;6524:28;:::i;:::-;6492:21;;;;;;;;:10;:21;;;;;:60;;;;;;;;;;;;;;;;6613:21;;6492:60;6613:21;;;6644:48;;6640:343;;6731:12;;6751:84;;;;;:38;15678:55:201;;;6751:84:103;;;15660:74:201;15750:18;;;15743:34;;;15825;15813:47;;15793:18;;;15786:75;6751:38:103;;;;;15633:18:201;;6751:84:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6857:9;6847:19;;:6;:19;;;6843:134;;6878:90;;;;;:38;15678:55:201;;;6878:90:103;;;15660:74:201;15750:18;;;15743:34;;;15825;15813:47;;15793:18;;;15786:75;6878:38:103;;;;;15633:18:201;;6878:90:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6694:289;6640:343;6302:685;;;6215:772;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:531:201;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;336:6;333:1;330:13;327:87;;;402:1;395:4;386:6;381:3;377:16;373:27;366:38;327:87;-1:-1:-1;459:2:201;447:15;464:66;443:88;434:98;;;;534:4;430:109;;14:531;-1:-1:-1;;14:531:201:o;550:220::-;699:2;688:9;681:21;662:4;719:45;760:2;749:9;745:18;737:6;719:45;:::i;:::-;711:53;550:220;-1:-1:-1;;;550:220:201:o;775:154::-;861:42;854:5;850:54;843:5;840:65;830:93;;919:1;916;909:12;830:93;775:154;:::o;934:134::-;1002:20;;1031:31;1002:20;1031:31;:::i;:::-;934:134;;;:::o;1073:315::-;1141:6;1149;1202:2;1190:9;1181:7;1177:23;1173:32;1170:52;;;1218:1;1215;1208:12;1170:52;1257:9;1244:23;1276:31;1301:5;1276:31;:::i;:::-;1326:5;1378:2;1363:18;;;;1350:32;;-1:-1:-1;;;1073:315:201:o;1585:247::-;1644:6;1697:2;1685:9;1676:7;1672:23;1668:32;1665:52;;;1713:1;1710;1703:12;1665:52;1752:9;1739:23;1771:31;1796:5;1771:31;:::i;2272:156::-;2338:20;;2398:4;2387:16;;2377:27;;2367:55;;2418:1;2415;2408:12;2433:348;2485:8;2495:6;2549:3;2542:4;2534:6;2530:17;2526:27;2516:55;;2567:1;2564;2557:12;2516:55;-1:-1:-1;2590:20:201;;2633:18;2622:30;;2619:50;;;2665:1;2662;2655:12;2619:50;2702:4;2694:6;2690:17;2678:29;;2754:3;2747:4;2738:6;2730;2726:19;2722:30;2719:39;2716:59;;;2771:1;2768;2761:12;2716:59;2433:348;;;;;:::o;2786:1414::-;2989:6;2997;3005;3013;3021;3029;3037;3045;3053;3061;3069:7;3123:3;3111:9;3102:7;3098:23;3094:33;3091:53;;;3140:1;3137;3130:12;3091:53;3163:29;3182:9;3163:29;:::i;:::-;3153:39;;3211:38;3245:2;3234:9;3230:18;3211:38;:::i;:::-;3201:48;;3268:38;3302:2;3291:9;3287:18;3268:38;:::i;:::-;3258:48;;3325:38;3359:2;3348:9;3344:18;3325:38;:::i;:::-;3315:48;;3382:37;3414:3;3403:9;3399:19;3382:37;:::i;:::-;3372:47;;3438:18;3506:2;3499:3;3488:9;3484:19;3471:33;3468:41;3465:61;;;3522:1;3519;3512:12;3465:61;3561:86;3639:7;3631:3;3620:9;3616:19;3603:33;3592:9;3588:49;3561:86;:::i;:::-;3666:8;;-1:-1:-1;3693:8:201;-1:-1:-1;3744:3:201;3729:19;;3716:33;3713:41;-1:-1:-1;3710:61:201;;;3767:1;3764;3757:12;3710:61;3806:86;3884:7;3876:3;3865:9;3861:19;3848:33;3837:9;3833:49;3806:86;:::i;:::-;3911:8;;-1:-1:-1;3938:8:201;-1:-1:-1;3989:3:201;3974:19;;3961:33;3958:41;-1:-1:-1;3955:61:201;;;4012:1;4009;4002:12;3955:61;;4052:86;4130:7;4122:3;4111:9;4107:19;4094:33;4083:9;4079:49;4052:86;:::i;:::-;4157:8;4147:18;;4185:9;4174:20;;;;2786:1414;;;;;;;;;;;;;;:::o;4205:456::-;4282:6;4290;4298;4351:2;4339:9;4330:7;4326:23;4322:32;4319:52;;;4367:1;4364;4357:12;4319:52;4406:9;4393:23;4425:31;4450:5;4425:31;:::i;:::-;4475:5;-1:-1:-1;4532:2:201;4517:18;;4504:32;4545:33;4504:32;4545:33;:::i;:::-;4205:456;;4597:7;;-1:-1:-1;;;4651:2:201;4636:18;;;;4623:32;;4205:456::o;5770:248::-;5838:6;5846;5899:2;5887:9;5878:7;5874:23;5870:32;5867:52;;;5915:1;5912;5905:12;5867:52;-1:-1:-1;;5938:23:201;;;6008:2;5993:18;;;5980:32;;-1:-1:-1;5770:248:201:o;6254:525::-;6340:6;6348;6356;6364;6417:3;6405:9;6396:7;6392:23;6388:33;6385:53;;;6434:1;6431;6424:12;6385:53;6473:9;6460:23;6492:31;6517:5;6492:31;:::i;:::-;6542:5;-1:-1:-1;6599:2:201;6584:18;;6571:32;6612:33;6571:32;6612:33;:::i;:::-;6254:525;;6664:7;;-1:-1:-1;;;;6718:2:201;6703:18;;6690:32;;6769:2;6754:18;6741:32;;6254:525::o;6784:734::-;6895:6;6903;6911;6919;6927;6935;6943;6996:3;6984:9;6975:7;6971:23;6967:33;6964:53;;;7013:1;7010;7003:12;6964:53;7052:9;7039:23;7071:31;7096:5;7071:31;:::i;:::-;7121:5;-1:-1:-1;7178:2:201;7163:18;;7150:32;7191:33;7150:32;7191:33;:::i;:::-;7243:7;-1:-1:-1;7297:2:201;7282:18;;7269:32;;-1:-1:-1;7348:2:201;7333:18;;7320:32;;-1:-1:-1;7371:37:201;7403:3;7388:19;;7371:37;:::i;:::-;7361:47;;7455:3;7444:9;7440:19;7427:33;7417:43;;7507:3;7496:9;7492:19;7479:33;7469:43;;6784:734;;;;;;;;;;:::o;7523:388::-;7591:6;7599;7652:2;7640:9;7631:7;7627:23;7623:32;7620:52;;;7668:1;7665;7658:12;7620:52;7707:9;7694:23;7726:31;7751:5;7726:31;:::i;:::-;7776:5;-1:-1:-1;7833:2:201;7818:18;;7805:32;7846:33;7805:32;7846:33;:::i;:::-;7898:7;7888:17;;;7523:388;;;;;:::o;8202:437::-;8281:1;8277:12;;;;8324;;;8345:61;;8399:4;8391:6;8387:17;8377:27;;8345:61;8452:2;8444:6;8441:14;8421:18;8418:38;8415:218;;;8489:77;8486:1;8479:88;8590:4;8587:1;8580:15;8618:4;8615:1;8608:15;8644:184;8714:6;8767:2;8755:9;8746:7;8742:23;8738:32;8735:52;;;8783:1;8780;8773:12;8735:52;-1:-1:-1;8806:16:201;;8644:184;-1:-1:-1;8644:184:201:o;9248:326::-;9337:6;9332:3;9325:19;9389:6;9382:5;9375:4;9370:3;9366:14;9353:43;;9441:1;9434:4;9425:6;9420:3;9416:16;9412:27;9405:38;9307:3;9563:4;9493:66;9488:2;9480:6;9476:15;9472:88;9467:3;9463:98;9459:109;9452:116;;9248:326;;;;:::o;9579:928::-;9895:4;9924:42;10005:2;9997:6;9993:15;9982:9;9975:34;10057:2;10049:6;10045:15;10040:2;10029:9;10025:18;10018:43;;10109:4;10101:6;10097:17;10092:2;10081:9;10077:18;10070:45;10151:3;10146:2;10135:9;10131:18;10124:31;10178:63;10236:3;10225:9;10221:19;10213:6;10205;10178:63;:::i;:::-;10290:9;10282:6;10278:22;10272:3;10261:9;10257:19;10250:51;10324:50;10367:6;10359;10351;10324:50;:::i;:::-;10310:64;;10423:9;10415:6;10411:22;10405:3;10394:9;10390:19;10383:51;10451:50;10494:6;10486;10478;10451:50;:::i;:::-;10443:58;9579:928;-1:-1:-1;;;;;;;;;;;;9579:928:201:o;10512:184::-;10564:77;10561:1;10554:88;10661:4;10658:1;10651:15;10685:4;10682:1;10675:15;10701:125;10741:4;10769:1;10766;10763:8;10760:34;;;10774:18;;:::i;:::-;-1:-1:-1;10811:9:201;;10701:125::o;10831:251::-;10901:6;10954:2;10942:9;10933:7;10929:23;10925:32;10922:52;;;10970:1;10967;10960:12;10922:52;11002:9;10996:16;11021:31;11046:5;11021:31;:::i;11087:277::-;11154:6;11207:2;11195:9;11186:7;11182:23;11178:32;11175:52;;;11223:1;11220;11213:12;11175:52;11255:9;11249:16;11308:5;11301:13;11294:21;11287:5;11284:32;11274:60;;11330:1;11327;11320:12;11369:128;11409:3;11440:1;11436:6;11433:1;11430:13;11427:39;;;11446:18;;:::i;:::-;-1:-1:-1;11482:9:201;;11369:128::o;15200:253::-;15240:3;15268:34;15329:2;15326:1;15322:10;15359:2;15356:1;15352:10;15390:3;15386:2;15382:12;15377:3;15374:21;15371:47;;;15398:18;;:::i;:::-;15434:13;;15200:253;-1:-1:-1;;;;15200:253:201:o;15872:246::-;15912:4;15941:34;16025:10;;;;15995;;16047:12;;;16044:38;;;16062:18;;:::i;:::-;16099:13;;15872:246;-1:-1:-1;;;15872:246:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"2886400","executionCost":"infinite","totalCost":"infinite"},"external":{"ATOKEN_REVISION()":"308","DOMAIN_SEPARATOR()":"infinite","EIP712_REVISION()":"infinite","PERMIT_TYPEHASH()":"263","POOL()":"infinite","RESERVE_TREASURY_ADDRESS()":"2396","UNDERLYING_ASSET_ADDRESS()":"2418","allowance(address,address)":"infinite","approve(address,uint256)":"24565","balanceOf(address)":"infinite","burn(address,address,uint256,uint256)":"infinite","decimals()":"2379","decreaseAllowance(address,uint256)":"26909","delegateUnderlyingTo(address)":"infinite","getIncentivesController()":"2364","getPreviousIndex(address)":"2590","getScaledUserBalanceAndSupply(address)":"4737","handleRepayment(address,address,uint256)":"infinite","increaseAllowance(address,uint256)":"26890","initialize(address,address,address,address,uint8,string,string,bytes)":"infinite","mint(address,address,uint256,uint256)":"infinite","mintToTreasury(uint256,uint256)":"infinite","name()":"infinite","nonces(address)":"2653","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"infinite","rescueTokens(address,address,uint256)":"infinite","scaledBalanceOf(address)":"2626","scaledTotalSupply()":"2375","setIncentivesController(address)":"infinite","symbol()":"infinite","totalSupply()":"infinite","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite","transferOnLiquidation(address,address,uint256)":"infinite","transferUnderlyingTo(address,uint256)":"infinite"}},"methodIdentifiers":{"ATOKEN_REVISION()":"0bd7ad3b","DOMAIN_SEPARATOR()":"3644e515","EIP712_REVISION()":"78160376","PERMIT_TYPEHASH()":"30adf81f","POOL()":"7535d246","RESERVE_TREASURY_ADDRESS()":"ae167335","UNDERLYING_ASSET_ADDRESS()":"b16a19de","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","burn(address,address,uint256,uint256)":"d7020d0a","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","delegateUnderlyingTo(address)":"2f114618","getIncentivesController()":"75d26413","getPreviousIndex(address)":"e0753986","getScaledUserBalanceAndSupply(address)":"0afbcdc9","handleRepayment(address,address,uint256)":"6fd97676","increaseAllowance(address,uint256)":"39509351","initialize(address,address,address,address,uint8,string,string,bytes)":"183fb413","mint(address,address,uint256,uint256)":"b3f1c93d","mintToTreasury(uint256,uint256)":"7df5bd3b","name()":"06fdde03","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","rescueTokens(address,address,uint256)":"cea9d26f","scaledBalanceOf(address)":"1da24f3e","scaledTotalSupply()":"b1bf962d","setIncentivesController(address)":"e655dbd8","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOnLiquidation(address,address,uint256)":"f866c319","transferUnderlyingTo(address,uint256)":"4efecaa5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"}],\"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\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"BalanceTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"}],\"name\":\"DelegateUnderlyingTo\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"aTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"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\":\"ATOKEN_REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EIP712_REVISION\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_TREASURY_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"user\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiverOfUnderlying\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"}],\"name\":\"delegateUnderlyingTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getPreviousIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getScaledUserBalanceAndSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"handleRepayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"initializingPool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"aTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"aTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"aTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mintToTreasury\",\"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\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"rescueTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"scaledBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scaledTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setIncentivesController\",\"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\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferOnLiquidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferUnderlyingTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"The underlying asset needs to be compatible with the COMP delegation interface\",\"events\":{\"DelegateUnderlyingTo(address)\":{\"details\":\"Emitted when underlying voting power is delegated\",\"params\":{\"delegatee\":\"The address of the delegatee\"}}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Overrides the base function to fully implement IATokensee `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation\"},\"RESERVE_TREASURY_ADDRESS()\":{\"returns\":{\"_0\":\"Address of the Aave treasury\"}},\"UNDERLYING_ASSET_ADDRESS()\":{\"returns\":{\"_0\":\"The address of the underlying asset\"}},\"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`.\"},\"burn(address,address,uint256,uint256)\":{\"details\":\"In some instances, the mint event could be emitted from a burn transaction if the amount to burn is less than the interest that the user accrued\",\"params\":{\"amount\":\"The amount being burned\",\"from\":\"The address from which the aTokens will be burned\",\"index\":\"The next liquidity index of the reserve\",\"receiverOfUnderlying\":\"The address that will receive the underlying\"}},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"pool\":\"The address of the Pool contract\"}},\"decreaseAllowance(address,uint256)\":{\"params\":{\"spender\":\"The user allowed to spend on behalf of _msgSender()\",\"subtractedValue\":\"The amount being subtracted to the allowance\"},\"returns\":{\"_0\":\"`true`\"}},\"delegateUnderlyingTo(address)\":{\"params\":{\"delegatee\":\"The address that will receive the delegation\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"The address of the Incentives Controller\"}},\"getPreviousIndex(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The last index interest was accrued to the user's balance, expressed in ray\"}},\"getScaledUserBalanceAndSupply(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The scaled balance of the user\",\"_1\":\"The scaled total supply\"}},\"handleRepayment(address,address,uint256)\":{\"details\":\"The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\",\"params\":{\"amount\":\"The amount getting repaid\",\"onBehalfOf\":\"The address of the user who will get his debt reduced/removed\",\"user\":\"The user executing the repayment\"}},\"increaseAllowance(address,uint256)\":{\"params\":{\"addedValue\":\"The amount being added to the allowance\",\"spender\":\"The user allowed to spend on behalf of _msgSender()\"},\"returns\":{\"_0\":\"`true`\"}},\"initialize(address,address,address,address,uint8,string,string,bytes)\":{\"params\":{\"aTokenDecimals\":\"The decimals of the aToken, same as the underlying asset's\",\"aTokenName\":\"The name of the aToken\",\"aTokenSymbol\":\"The symbol of the aToken\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"treasury\":\"The address of the Aave treasury, receiving the fees on this aToken\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}},\"mint(address,address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of tokens getting minted\",\"caller\":\"The address performing the mint\",\"index\":\"The next liquidity index of the reserve\",\"onBehalfOf\":\"The address of the user that will receive the minted aTokens\"},\"returns\":{\"_0\":\"`true` if the the previous balance of the user was 0\"}},\"mintToTreasury(uint256,uint256)\":{\"params\":{\"amount\":\"The amount of tokens getting minted\",\"index\":\"The next liquidity index of the reserve\"}},\"nonces(address)\":{\"details\":\"Overrides the base function to fully implement IATokensee `EIP712Base.nonces()` for more detailed documentation\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\",\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"owner\":\"The owner of the funds\",\"r\":\"Signature param\",\"s\":\"Signature param\",\"spender\":\"The spender\",\"v\":\"Signature param\",\"value\":\"The amount\"}},\"rescueTokens(address,address,uint256)\":{\"params\":{\"amount\":\"The amount of token to transfer\",\"to\":\"The address of the recipient\",\"token\":\"The address of the token\"}},\"scaledBalanceOf(address)\":{\"details\":\"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update\",\"params\":{\"user\":\"The user whose balance is calculated\"},\"returns\":{\"_0\":\"The scaled balance of the user\"}},\"scaledTotalSupply()\":{\"returns\":{\"_0\":\"The scaled total supply\"}},\"setIncentivesController(address)\":{\"params\":{\"controller\":\"the new Incentives controller\"}},\"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.\"},\"transferOnLiquidation(address,address,uint256)\":{\"params\":{\"from\":\"The address getting liquidated, current owner of the aTokens\",\"to\":\"The recipient\",\"value\":\"The amount of tokens getting transferred\"}},\"transferUnderlyingTo(address,uint256)\":{\"details\":\"Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\",\"params\":{\"amount\":\"The amount getting transferred\",\"target\":\"The recipient of the underlying\"}}},\"title\":\"DelegationAwareAToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"RESERVE_TREASURY_ADDRESS()\":{\"notice\":\"Returns the address of the Aave treasury, receiving the fees on this aToken.\"},\"UNDERLYING_ASSET_ADDRESS()\":{\"notice\":\"Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\"},\"burn(address,address,uint256,uint256)\":{\"notice\":\"Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\"},\"decreaseAllowance(address,uint256)\":{\"notice\":\"Decreases the allowance of spender to spend _msgSender() tokens\"},\"delegateUnderlyingTo(address)\":{\"notice\":\"Delegates voting power of the underlying asset to a `delegatee` address\"},\"getIncentivesController()\":{\"notice\":\"Returns the address of the Incentives Controller contract\"},\"getPreviousIndex(address)\":{\"notice\":\"Returns last index interest was accrued to the user's balance\"},\"getScaledUserBalanceAndSupply(address)\":{\"notice\":\"Returns the scaled balance of the user and the scaled total supply.\"},\"handleRepayment(address,address,uint256)\":{\"notice\":\"Handles the underlying received by the aToken after the transfer has been completed.\"},\"increaseAllowance(address,uint256)\":{\"notice\":\"Increases the allowance of spender to spend _msgSender() tokens\"},\"initialize(address,address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the aToken\"},\"mint(address,address,uint256,uint256)\":{\"notice\":\"Mints `amount` aTokens to `user`\"},\"mintToTreasury(uint256,uint256)\":{\"notice\":\"Mints aTokens to the reserve treasury\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Allow passing a signed message to approve spending\"},\"rescueTokens(address,address,uint256)\":{\"notice\":\"Rescue and transfer tokens locked in this contract\"},\"scaledBalanceOf(address)\":{\"notice\":\"Returns the scaled balance of the user.\"},\"scaledTotalSupply()\":{\"notice\":\"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\"},\"setIncentivesController(address)\":{\"notice\":\"Sets a new Incentives Controller\"},\"transferOnLiquidation(address,address,uint256)\":{\"notice\":\"Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\"},\"transferUnderlyingTo(address,uint256)\":{\"notice\":\"Transfers the underlying asset to `target`.\"}},\"notice\":\"AToken enabled to delegate voting power of the underlying asset to a different address\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol\":\"DelegationAwareAToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IDelegationToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IDelegationToken\\n * @author Aave\\n * @notice Implements an interface for tokens with delegation COMP/UNI compatible\\n */\\ninterface IDelegationToken {\\n  /**\\n   * @notice Delegate voting power to a delegatee\\n   * @param delegatee The address of the delegatee\\n   */\\n  function delegate(address delegatee) external;\\n}\\n\",\"keccak256\":\"0xefaf5afc40d517357085677322396a6864a28d9bdbd664643a7a4723a45e4427\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/AToken.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '../../dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {SafeCast} from '../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IAToken} from '../../interfaces/IAToken.sol';\\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\\nimport {IInitializableAToken} from '../../interfaces/IInitializableAToken.sol';\\nimport {ScaledBalanceTokenBase} from './base/ScaledBalanceTokenBase.sol';\\nimport {IncentivizedERC20} from './base/IncentivizedERC20.sol';\\nimport {EIP712Base} from './base/EIP712Base.sol';\\n\\n/**\\n * @title Aave ERC20 AToken\\n * @author Aave\\n * @notice Implementation of the interest bearing token for the Aave protocol\\n */\\ncontract AToken is VersionedInitializable, ScaledBalanceTokenBase, EIP712Base, IAToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  bytes32 public constant PERMIT_TYPEHASH =\\n    keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  uint256 public constant ATOKEN_REVISION = 0x1;\\n\\n  address internal _treasury;\\n  address internal _underlyingAsset;\\n\\n  /// @inheritdoc VersionedInitializable\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return ATOKEN_REVISION;\\n  }\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The address of the Pool contract\\n   */\\n  constructor(\\n    IPool pool\\n  ) ScaledBalanceTokenBase(pool, 'ATOKEN_IMPL', 'ATOKEN_IMPL', 0) EIP712Base() {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IInitializableAToken\\n  function initialize(\\n    IPool initializingPool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) public virtual override initializer {\\n    require(initializingPool == POOL, Errors.POOL_ADDRESSES_DO_NOT_MATCH);\\n    _setName(aTokenName);\\n    _setSymbol(aTokenSymbol);\\n    _setDecimals(aTokenDecimals);\\n\\n    _treasury = treasury;\\n    _underlyingAsset = underlyingAsset;\\n    _incentivesController = incentivesController;\\n\\n    _domainSeparator = _calculateDomainSeparator();\\n\\n    emit Initialized(\\n      underlyingAsset,\\n      address(POOL),\\n      treasury,\\n      address(incentivesController),\\n      aTokenDecimals,\\n      aTokenName,\\n      aTokenSymbol,\\n      params\\n    );\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external virtual override onlyPool returns (bool) {\\n    return _mintScaled(caller, onBehalfOf, amount, index);\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function burn(\\n    address from,\\n    address receiverOfUnderlying,\\n    uint256 amount,\\n    uint256 index\\n  ) external virtual override onlyPool {\\n    _burnScaled(from, receiverOfUnderlying, amount, index);\\n    if (receiverOfUnderlying != address(this)) {\\n      IERC20(_underlyingAsset).safeTransfer(receiverOfUnderlying, amount);\\n    }\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function mintToTreasury(uint256 amount, uint256 index) external virtual override onlyPool {\\n    if (amount == 0) {\\n      return;\\n    }\\n    _mintScaled(address(POOL), _treasury, amount, index);\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function transferOnLiquidation(\\n    address from,\\n    address to,\\n    uint256 value\\n  ) external virtual override onlyPool {\\n    // Being a normal transfer, the Transfer() and BalanceTransfer() are emitted\\n    // so no need to emit a specific event here\\n    _transfer(from, to, value, false);\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(\\n    address user\\n  ) public view virtual override(IncentivizedERC20, IERC20) returns (uint256) {\\n    return super.balanceOf(user).rayMul(POOL.getReserveNormalizedIncome(_underlyingAsset));\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override(IncentivizedERC20, IERC20) returns (uint256) {\\n    uint256 currentSupplyScaled = super.totalSupply();\\n\\n    if (currentSupplyScaled == 0) {\\n      return 0;\\n    }\\n\\n    return currentSupplyScaled.rayMul(POOL.getReserveNormalizedIncome(_underlyingAsset));\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function RESERVE_TREASURY_ADDRESS() external view override returns (address) {\\n    return _treasury;\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function UNDERLYING_ASSET_ADDRESS() external view override returns (address) {\\n    return _underlyingAsset;\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function transferUnderlyingTo(address target, uint256 amount) external virtual override onlyPool {\\n    IERC20(_underlyingAsset).safeTransfer(target, amount);\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function handleRepayment(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount\\n  ) external virtual override onlyPool {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IAToken\\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 override {\\n    require(owner != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, Errors.INVALID_EXPIRATION);\\n    uint256 currentValidNonce = _nonces[owner];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR(),\\n        keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, currentValidNonce, deadline))\\n      )\\n    );\\n    require(owner == ecrecover(digest, v, r, s), Errors.INVALID_SIGNATURE);\\n    _nonces[owner] = currentValidNonce + 1;\\n    _approve(owner, spender, value);\\n  }\\n\\n  /**\\n   * @notice Transfers the aTokens between two users. Validates the transfer\\n   * (ie checks for valid HF after the transfer) if required\\n   * @param from The source address\\n   * @param to The destination address\\n   * @param amount The amount getting transferred\\n   * @param validate True if the transfer needs to be validated, false otherwise\\n   */\\n  function _transfer(address from, address to, uint256 amount, bool validate) internal virtual {\\n    address underlyingAsset = _underlyingAsset;\\n\\n    uint256 index = POOL.getReserveNormalizedIncome(underlyingAsset);\\n\\n    uint256 fromBalanceBefore = super.balanceOf(from).rayMul(index);\\n    uint256 toBalanceBefore = super.balanceOf(to).rayMul(index);\\n\\n    super._transfer(from, to, amount, index);\\n\\n    if (validate) {\\n      POOL.finalizeTransfer(underlyingAsset, from, to, amount, fromBalanceBefore, toBalanceBefore);\\n    }\\n\\n    emit BalanceTransfer(from, to, amount.rayDiv(index), index);\\n  }\\n\\n  /**\\n   * @notice Overrides the parent _transfer to force validated transfer() and transferFrom()\\n   * @param from The source address\\n   * @param to The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address from, address to, uint128 amount) internal virtual override {\\n    _transfer(from, to, amount, true);\\n  }\\n\\n  /**\\n   * @dev Overrides the base function to fully implement IAToken\\n   * @dev see `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation\\n   */\\n  function DOMAIN_SEPARATOR() public view override(IAToken, EIP712Base) returns (bytes32) {\\n    return super.DOMAIN_SEPARATOR();\\n  }\\n\\n  /**\\n   * @dev Overrides the base function to fully implement IAToken\\n   * @dev see `EIP712Base.nonces()` for more detailed documentation\\n   */\\n  function nonces(address owner) public view override(IAToken, EIP712Base) returns (uint256) {\\n    return super.nonces(owner);\\n  }\\n\\n  /// @inheritdoc EIP712Base\\n  function _EIP712BaseId() internal view override returns (string memory) {\\n    return name();\\n  }\\n\\n  /// @inheritdoc IAToken\\n  function rescueTokens(address token, address to, uint256 amount) external override onlyPoolAdmin {\\n    require(token != _underlyingAsset, Errors.UNDERLYING_CANNOT_BE_RESCUED);\\n    IERC20(token).safeTransfer(to, amount);\\n  }\\n}\\n\",\"keccak256\":\"0x2bebbe5c8078e3d300b67d27ed2ac6695f9d17d7c52f0f22879a04353a5c7db1\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IDelegationToken} from '../../interfaces/IDelegationToken.sol';\\nimport {AToken} from './AToken.sol';\\n\\n/**\\n * @title DelegationAwareAToken\\n * @author Aave\\n * @notice AToken enabled to delegate voting power of the underlying asset to a different address\\n * @dev The underlying asset needs to be compatible with the COMP delegation interface\\n */\\ncontract DelegationAwareAToken is AToken {\\n  /**\\n   * @dev Emitted when underlying voting power is delegated\\n   * @param delegatee The address of the delegatee\\n   */\\n  event DelegateUnderlyingTo(address indexed delegatee);\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The address of the Pool contract\\n   */\\n  constructor(IPool pool) AToken(pool) {\\n    // Intentionally left blank\\n  }\\n\\n  /**\\n   * @notice Delegates voting power of the underlying asset to a `delegatee` address\\n   * @param delegatee The address that will receive the delegation\\n   */\\n  function delegateUnderlyingTo(address delegatee) external onlyPoolAdmin {\\n    IDelegationToken(_underlyingAsset).delegate(delegatee);\\n    emit DelegateUnderlyingTo(delegatee);\\n  }\\n}\\n\",\"keccak256\":\"0xacd4f7046b3feee80c89e87adfd994762f720df4e36f4320330005c2082bb061\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/EIP712Base.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title EIP712Base\\n * @author Aave\\n * @notice Base contract implementation of EIP712.\\n */\\nabstract contract EIP712Base {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 internal _domainSeparator;\\n  uint256 internal immutable _chainId;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() {\\n    _chainId = block.chainid;\\n  }\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\\n    if (block.chainid == _chainId) {\\n      return _domainSeparator;\\n    }\\n    return _calculateDomainSeparator();\\n  }\\n\\n  /**\\n   * @notice Returns the nonce value for address specified as parameter\\n   * @param owner The address for which the nonce is being returned\\n   * @return The nonce value for the input address`\\n   */\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n\\n  /**\\n   * @notice Compute the current domain separator\\n   * @return The domain separator for the token\\n   */\\n  function _calculateDomainSeparator() internal view returns (bytes32) {\\n    return\\n      keccak256(\\n        abi.encode(\\n          EIP712_DOMAIN,\\n          keccak256(bytes(_EIP712BaseId())),\\n          keccak256(EIP712_REVISION),\\n          block.chainid,\\n          address(this)\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Returns the user readable name of signing domain (e.g. token name)\\n   * @return The name of the signing domain\\n   */\\n  function _EIP712BaseId() internal view virtual returns (string memory);\\n}\\n\",\"keccak256\":\"0xd4ed5763068be0ffb08219fc2f9f3c87487578cd0617dae06db26018054b89cd\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IncentivizedERC20} from './IncentivizedERC20.sol';\\n\\n/**\\n * @title MintableIncentivizedERC20\\n * @author Aave\\n * @notice Implements mint and burn functions for IncentivizedERC20\\n */\\nabstract contract MintableIncentivizedERC20 is IncentivizedERC20 {\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) IncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /**\\n   * @notice Mints tokens to an account and apply incentives if defined\\n   * @param account The address receiving tokens\\n   * @param amount The amount of tokens to mint\\n   */\\n  function _mint(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply + amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns tokens from an account and apply incentives if defined\\n   * @param account The account whose tokens are burnt\\n   * @param amount The amount of tokens to burn\\n   */\\n  function _burn(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply - amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance - amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xc24b3d20923fd55a160698a594e47247c2fb0b1e0c795e47f89ddd2da2918824\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {MintableIncentivizedERC20} from './MintableIncentivizedERC20.sol';\\n\\n/**\\n * @title ScaledBalanceTokenBase\\n * @author Aave\\n * @notice Basic ERC20 implementation of scaled balance token\\n */\\nabstract contract ScaledBalanceTokenBase is MintableIncentivizedERC20, IScaledBalanceToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) MintableIncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledBalanceOf(address user) external view override returns (uint256) {\\n    return super.balanceOf(user);\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getScaledUserBalanceAndSupply(\\n    address user\\n  ) external view override returns (uint256, uint256) {\\n    return (super.balanceOf(user), super.totalSupply());\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledTotalSupply() public view virtual override returns (uint256) {\\n    return super.totalSupply();\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getPreviousIndex(address user) external view virtual override returns (uint256) {\\n    return _userState[user].additionalData;\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to mint a scaled balance token.\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the scaled tokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function _mintScaled(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) internal returns (bool) {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_MINT_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(onBehalfOf);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[onBehalfOf].additionalData);\\n\\n    _userState[onBehalfOf].additionalData = index.toUint128();\\n\\n    _mint(onBehalfOf, amountScaled.toUint128());\\n\\n    uint256 amountToMint = amount + balanceIncrease;\\n    emit Transfer(address(0), onBehalfOf, amountToMint);\\n    emit Mint(caller, onBehalfOf, amountToMint, balanceIncrease, index);\\n\\n    return (scaledBalance == 0);\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to burn a scaled balance token.\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param user The user which debt is burnt\\n   * @param target The address that will receive the underlying, if any\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   */\\n  function _burnScaled(address user, address target, uint256 amount, uint256 index) internal {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_BURN_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(user);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[user].additionalData);\\n\\n    _userState[user].additionalData = index.toUint128();\\n\\n    _burn(user, amountScaled.toUint128());\\n\\n    if (balanceIncrease > amount) {\\n      uint256 amountToMint = balanceIncrease - amount;\\n      emit Transfer(address(0), user, amountToMint);\\n      emit Mint(user, user, amountToMint, balanceIncrease, index);\\n    } else {\\n      uint256 amountToBurn = amount - balanceIncrease;\\n      emit Transfer(user, address(0), amountToBurn);\\n      emit Burn(user, target, amountToBurn, balanceIncrease, index);\\n    }\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to transfer scaled balance tokens between two users\\n   * @dev It emits a mint event with the interest accrued per user\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount, uint256 index) internal {\\n    uint256 senderScaledBalance = super.balanceOf(sender);\\n    uint256 senderBalanceIncrease = senderScaledBalance.rayMul(index) -\\n      senderScaledBalance.rayMul(_userState[sender].additionalData);\\n\\n    uint256 recipientScaledBalance = super.balanceOf(recipient);\\n    uint256 recipientBalanceIncrease = recipientScaledBalance.rayMul(index) -\\n      recipientScaledBalance.rayMul(_userState[recipient].additionalData);\\n\\n    _userState[sender].additionalData = index.toUint128();\\n    _userState[recipient].additionalData = index.toUint128();\\n\\n    super._transfer(sender, recipient, amount.rayDiv(index).toUint128());\\n\\n    if (senderBalanceIncrease > 0) {\\n      emit Transfer(address(0), sender, senderBalanceIncrease);\\n      emit Mint(_msgSender(), sender, senderBalanceIncrease, senderBalanceIncrease, index);\\n    }\\n\\n    if (sender != recipient && recipientBalanceIncrease > 0) {\\n      emit Transfer(address(0), recipient, recipientBalanceIncrease);\\n      emit Mint(_msgSender(), recipient, recipientBalanceIncrease, recipientBalanceIncrease, index);\\n    }\\n\\n    emit Transfer(sender, recipient, amount);\\n  }\\n}\\n\",\"keccak256\":\"0xbd3f86bbb655838646ea5f7c306bc8c572a9d272f54632f369908bb5420021dd\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":10499,"contract":"@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":10502,"contract":"@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":10572,"contract":"@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":27906,"contract":"@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"_userState","offset":0,"slot":"52","type":"t_mapping(t_address,t_struct(UserState)27901_storage)"},{"astId":27912,"contract":"@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"_allowances","offset":0,"slot":"53","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":27914,"contract":"@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"_totalSupply","offset":0,"slot":"54","type":"t_uint256"},{"astId":27916,"contract":"@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"_name","offset":0,"slot":"55","type":"t_string_storage"},{"astId":27918,"contract":"@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"_symbol","offset":0,"slot":"56","type":"t_string_storage"},{"astId":27920,"contract":"@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"_decimals","offset":0,"slot":"57","type":"t_uint8"},{"astId":27923,"contract":"@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"_incentivesController","offset":1,"slot":"57","type":"t_contract(IAaveIncentivesController)3875"},{"astId":27740,"contract":"@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"_nonces","offset":0,"slot":"58","type":"t_mapping(t_address,t_uint256)"},{"astId":27742,"contract":"@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"_domainSeparator","offset":0,"slot":"59","type":"t_bytes32"},{"astId":25392,"contract":"@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"_treasury","offset":0,"slot":"60","type":"t_address"},{"astId":25394,"contract":"@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"_underlyingAsset","offset":0,"slot":"61","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IAaveIncentivesController)3875":{"encoding":"inplace","label":"contract IAaveIncentivesController","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(UserState)27901_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct IncentivizedERC20.UserState)","numberOfBytes":"32","value":"t_struct(UserState)27901_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(UserState)27901_storage":{"encoding":"inplace","label":"struct IncentivizedERC20.UserState","members":[{"astId":27898,"contract":"@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"balance","offset":0,"slot":"0","type":"t_uint128"},{"astId":27900,"contract":"@aave/core-v3/contracts/protocol/tokenization/DelegationAwareAToken.sol:DelegationAwareAToken","label":"additionalData","offset":16,"slot":"0","type":"t_uint128"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"RESERVE_TREASURY_ADDRESS()":{"notice":"Returns the address of the Aave treasury, receiving the fees on this aToken."},"UNDERLYING_ASSET_ADDRESS()":{"notice":"Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)"},"burn(address,address,uint256,uint256)":{"notice":"Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`"},"decreaseAllowance(address,uint256)":{"notice":"Decreases the allowance of spender to spend _msgSender() tokens"},"delegateUnderlyingTo(address)":{"notice":"Delegates voting power of the underlying asset to a `delegatee` address"},"getIncentivesController()":{"notice":"Returns the address of the Incentives Controller contract"},"getPreviousIndex(address)":{"notice":"Returns last index interest was accrued to the user's balance"},"getScaledUserBalanceAndSupply(address)":{"notice":"Returns the scaled balance of the user and the scaled total supply."},"handleRepayment(address,address,uint256)":{"notice":"Handles the underlying received by the aToken after the transfer has been completed."},"increaseAllowance(address,uint256)":{"notice":"Increases the allowance of spender to spend _msgSender() tokens"},"initialize(address,address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the aToken"},"mint(address,address,uint256,uint256)":{"notice":"Mints `amount` aTokens to `user`"},"mintToTreasury(uint256,uint256)":{"notice":"Mints aTokens to the reserve treasury"},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Allow passing a signed message to approve spending"},"rescueTokens(address,address,uint256)":{"notice":"Rescue and transfer tokens locked in this contract"},"scaledBalanceOf(address)":{"notice":"Returns the scaled balance of the user."},"scaledTotalSupply()":{"notice":"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)"},"setIncentivesController(address)":{"notice":"Sets a new Incentives Controller"},"transferOnLiquidation(address,address,uint256)":{"notice":"Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken"},"transferUnderlyingTo(address,uint256)":{"notice":"Transfers the underlying asset to `target`."}},"notice":"AToken enabled to delegate voting power of the underlying asset to a different address","version":1}}},"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol":{"StableDebtToken":{"abi":[{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"}],"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":"fromUser","type":"address"},{"indexed":true,"internalType":"address","name":"toUser","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BorrowAllowanceDelegated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currentBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"avgStableRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalSupply","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"debtTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"debtTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currentBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"avgStableRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalSupply","type":"uint256"}],"name":"Mint","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":"DEBT_TOKEN_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DELEGATION_WITH_SIG_TYPEHASH","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":"EIP712_REVISION","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNDERLYING_ASSET_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approveDelegation","outputs":[],"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":"fromUser","type":"address"},{"internalType":"address","name":"toUser","type":"address"}],"name":"borrowAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"},{"internalType":"address","name":"delegatee","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":"delegationWithSig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAverageStableRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"contract IAaveIncentivesController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSupplyData","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSupplyAndAvgRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSupplyLastUpdated","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserLastUpdated","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserStableRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"initializingPool","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"internalType":"string","name":"debtTokenName","type":"string"},{"internalType":"string","name":"debtTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"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":"user","type":"address"}],"name":"principalBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IAaveIncentivesController","name":"controller","type":"address"}],"name":"setIncentivesController","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":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","details":"Transfer and approve functionalities are disabled since its a non-transferable token","kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Return cached value if chainId matches cache, otherwise recomputes separator","returns":{"_0":"The domain separator of the token at current chain"}},"UNDERLYING_ASSET_ADDRESS()":{"returns":{"_0":"The address of the underlying asset"}},"approveDelegation(address,uint256)":{"params":{"amount":"The maximum amount being delegated.","delegatee":"The address receiving the delegated borrowing power"}},"balanceOf(address)":{"details":"Returns the amount of tokens owned by `account`."},"borrowAllowance(address,address)":{"params":{"fromUser":"The user to giving allowance","toUser":"The user to give allowance to"},"returns":{"_0":"The current allowance of `toUser`"}},"burn(address,uint256)":{"details":"The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debtIn some instances, a burn transaction will emit a mint event if the amount to burn is less than the interest the user earned","params":{"amount":"The amount of debt tokens getting burned","from":"The address from which the debt will be burned"},"returns":{"_0":"The total stable debt","_1":"The average stable borrow rate"}},"constructor":{"details":"Constructor.","params":{"pool":"The address of the Pool contract"}},"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","delegatee":"The delegatee that can use the credit","delegator":"The delegator of the credit","r":"The R signature param","s":"The S signature param","v":"The V signature param","value":"The amount to be delegated"}},"getAverageStableRate()":{"returns":{"_0":"The average stable rate"}},"getIncentivesController()":{"returns":{"_0":"The address of the Incentives Controller"}},"getSupplyData()":{"returns":{"_0":"The principal","_1":"The total supply","_2":"The average stable rate","_3":"The timestamp of the last update"}},"getTotalSupplyAndAvgRate()":{"returns":{"_0":"The total supply","_1":"The average rate"}},"getTotalSupplyLastUpdated()":{"returns":{"_0":"The timestamp"}},"getUserLastUpdated(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The timestamp"}},"getUserStableRate(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The stable rate of the user"}},"initialize(address,address,address,uint8,string,string,bytes)":{"params":{"debtTokenDecimals":"The decimals of the debtToken, same as the underlying asset's","debtTokenName":"The name of the token","debtTokenSymbol":"The symbol of the token","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}},"mint(address,address,uint256,uint256)":{"details":"The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debt","params":{"amount":"The amount of debt tokens to mint","onBehalfOf":"The address receiving the debt tokens","rate":"The rate of the debt being minted","user":"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise"},"returns":{"_0":"True if it is the first borrow, false otherwise","_1":"The total stable debt","_2":"The average stable borrow rate"}},"nonces(address)":{"params":{"owner":"The address for which the nonce is being returned"},"returns":{"_0":"The nonce value for the input address`"}},"principalBalanceOf(address)":{"returns":{"_0":"The debt balance of the user since the last burn/mint action"}},"setIncentivesController(address)":{"params":{"controller":"the new Incentives controller"}},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Being non transferrable, the debt token does not implement any of the standard ERC20 functions for transfer and allowance."}},"title":"StableDebtToken","version":1},"evm":{"bytecode":{"functionDebugData":{"@_26101":{"entryPoint":null,"id":26101,"parameterSlots":1,"returnSlots":0},"@_27531":{"entryPoint":null,"id":27531,"parameterSlots":0,"returnSlots":0},"@_27754":{"entryPoint":null,"id":27754,"parameterSlots":0,"returnSlots":0},"@_27965":{"entryPoint":null,"id":27965,"parameterSlots":4,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$4860_fromMemory":{"entryPoint":564,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":603,"id":null,"parameterSlots":1,"returnSlots":1},"validator_revert_contract_IPool":{"entryPoint":539,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1110:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"66:86:201","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:201"},"nodeType":"YulFunctionCall","src":"132:12:201"},"nodeType":"YulExpressionStatement","src":"132:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"89:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"100:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"115:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"120:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"111:3:201"},"nodeType":"YulFunctionCall","src":"111:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"124:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"107:3:201"},"nodeType":"YulFunctionCall","src":"107:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"96:3:201"},"nodeType":"YulFunctionCall","src":"96:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"86:2:201"},"nodeType":"YulFunctionCall","src":"86:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"79:6:201"},"nodeType":"YulFunctionCall","src":"79:50:201"},"nodeType":"YulIf","src":"76:70:201"}]},"name":"validator_revert_contract_IPool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"55:5:201","type":""}],"src":"14:138:201"},{"body":{"nodeType":"YulBlock","src":"252:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"298:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"307:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"310:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"300:6:201"},"nodeType":"YulFunctionCall","src":"300:12:201"},"nodeType":"YulExpressionStatement","src":"300:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"273:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"282:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"269:3:201"},"nodeType":"YulFunctionCall","src":"269:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"294:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"265:3:201"},"nodeType":"YulFunctionCall","src":"265:32:201"},"nodeType":"YulIf","src":"262:52:201"},{"nodeType":"YulVariableDeclaration","src":"323:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"342:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"336:5:201"},"nodeType":"YulFunctionCall","src":"336:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"327:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"393:5:201"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"361:31:201"},"nodeType":"YulFunctionCall","src":"361:38:201"},"nodeType":"YulExpressionStatement","src":"361:38:201"},{"nodeType":"YulAssignment","src":"408:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"418:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"408:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$4860_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"218:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"229:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"241:6:201","type":""}],"src":"157:272:201"},{"body":{"nodeType":"YulBlock","src":"546:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"592:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"601:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"604:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"594:6:201"},"nodeType":"YulFunctionCall","src":"594:12:201"},"nodeType":"YulExpressionStatement","src":"594:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"567:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"576:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"563:3:201"},"nodeType":"YulFunctionCall","src":"563:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"588:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"559:3:201"},"nodeType":"YulFunctionCall","src":"559:32:201"},"nodeType":"YulIf","src":"556:52:201"},{"nodeType":"YulVariableDeclaration","src":"617:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"636:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"630:5:201"},"nodeType":"YulFunctionCall","src":"630:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"621:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"687:5:201"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"655:31:201"},"nodeType":"YulFunctionCall","src":"655:38:201"},"nodeType":"YulExpressionStatement","src":"655:38:201"},{"nodeType":"YulAssignment","src":"702:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"712:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"702:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"512:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"523:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"535:6:201","type":""}],"src":"434:289:201"},{"body":{"nodeType":"YulBlock","src":"783:325:201","statements":[{"nodeType":"YulAssignment","src":"793:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"807:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"810:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"803:3:201"},"nodeType":"YulFunctionCall","src":"803:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"793:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"824:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"854:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"860:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:201"},"nodeType":"YulFunctionCall","src":"850:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"828:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"901:31:201","statements":[{"nodeType":"YulAssignment","src":"903:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"917:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"925:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"913:3:201"},"nodeType":"YulFunctionCall","src":"913:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"903:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"881:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"874:6:201"},"nodeType":"YulFunctionCall","src":"874:26:201"},"nodeType":"YulIf","src":"871:61:201"},{"body":{"nodeType":"YulBlock","src":"991:111:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1012:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1019:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1024:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1015:3:201"},"nodeType":"YulFunctionCall","src":"1015:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1005:6:201"},"nodeType":"YulFunctionCall","src":"1005:31:201"},"nodeType":"YulExpressionStatement","src":"1005:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1056:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1059:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1049:6:201"},"nodeType":"YulFunctionCall","src":"1049:15:201"},"nodeType":"YulExpressionStatement","src":"1049:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1084:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1087:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1077:6:201"},"nodeType":"YulFunctionCall","src":"1077:15:201"},"nodeType":"YulExpressionStatement","src":"1077:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"947:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"970:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"978:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"967:2:201"},"nodeType":"YulFunctionCall","src":"967:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"944:2:201"},"nodeType":"YulFunctionCall","src":"944:38:201"},"nodeType":"YulIf","src":"941:161:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"763:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"772:6:201","type":""}],"src":"728:380:201"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPool(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$4860_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60e0604052600080553480156200001557600080fd5b5060405162002caf38038062002caf833981016040819052620000389162000234565b806040518060400160405280601681526020017f535441424c455f444542545f544f4b454e5f494d504c000000000000000000008152506040518060400160405280601681526020017f535441424c455f444542545f544f4b454e5f494d504c0000000000000000000081525060004660808181525050836001600160a01b0316630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000114919062000234565b6001600160a01b031660a05282516200013590603b90602086019062000175565b5081516200014b90603c90602085019062000175565b50603d805460ff191660ff9290921691909117905550506001600160a01b031660c0525062000298565b82805462000183906200025b565b90600052602060002090601f016020900481019282620001a75760008555620001f2565b82601f10620001c257805160ff1916838001178555620001f2565b82800160010185558215620001f2579182015b82811115620001f2578251825591602001919060010190620001d5565b506200020092915062000204565b5090565b5b8082111562000200576000815560010162000205565b6001600160a01b03811681146200023157600080fd5b50565b6000602082840312156200024757600080fd5b815162000254816200021b565b9392505050565b600181811c908216806200027057607f821691505b602082108114156200029257634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c0516129cb620002e46000396000818161030501528181610c4501528181611144015281816116a201526117fd015260006118c901526000610abd01526129cb6000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c806390f6fcf21161012a578063c04a8a10116100bd578063e655dbd81161008c578063e78c9b3b11610071578063e78c9b3b146105b5578063f3bfc73814610611578063f731e9be1461063857600080fd5b8063e655dbd81461057f578063e74848901461059257600080fd5b8063c04a8a1014610503578063c222ec8a14610516578063c634dfaa14610529578063dd62ed3e1461057157600080fd5b8063a9059cbb116100f9578063a9059cbb1461022e578063b16a19de146104ad578063b3f1c93d146104cb578063b9a7b622146104fb57600080fd5b806390f6fcf21461046357806395d89b411461047d5780639dc29fac14610485578063a457c2d71461022e57600080fd5b80636bd76d24116101a25780637816037611610171578063781603761461036f57806379774338146103ab57806379ce6b8c146103da5780637ecebe001461042d57600080fd5b80636bd76d24146102a757806370a08231146102ed5780637535d2461461030057806375d264131461034c57600080fd5b806323b872dd116101de57806323b872dd1461027c578063313ce5671461028a5780633644e5151461029f578063395093511461022e57600080fd5b806306fdde0314610210578063095ea7b31461022e5780630b52d5581461025157806318160ddd14610266575b600080fd5b610218610640565b604051610225919061233c565b60405180910390f35b61024161023c36600461237f565b6106d2565b6040519015158152602001610225565b61026461025f3660046123bc565b610742565b005b61026e610a93565b604051908152602001610225565b61024161023c36600461242a565b603d5460405160ff9091168152602001610225565b61026e610ab9565b61026e6102b536600461246b565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260366020908152604080832093909416825291909152205490565b61026e6102fb3660046124a4565b610af2565b6103277f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610225565b603d54610100900473ffffffffffffffffffffffffffffffffffffffff16610327565b6102186040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6103b3610b9e565b6040805194855260208501939093529183015264ffffffffff166060820152608001610225565b6104176103e83660046124a4565b73ffffffffffffffffffffffffffffffffffffffff166000908152603e602052604090205464ffffffffff1690565b60405164ffffffffff9091168152602001610225565b61026e61043b3660046124a4565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205490565b603f546fffffffffffffffffffffffffffffffff1661026e565b610218610bfa565b61049861049336600461237f565b610c09565b60408051928352602083019190915201610225565b60375473ffffffffffffffffffffffffffffffffffffffff16610327565b6104de6104d93660046124c1565b611129565b604080519315158452602084019290925290820152606001610225565b61026e600181565b61026461051136600461237f565b6115ab565b610264610524366004612623565b6115ba565b61026e6105373660046124a4565b73ffffffffffffffffffffffffffffffffffffffff166000908152603860205260409020546fffffffffffffffffffffffffffffffff1690565b61026e61023c36600461246b565b61026461058d3660046124a4565b6118c5565b603f54700100000000000000000000000000000000900464ffffffffff16610417565b61026e6105c33660046124a4565b73ffffffffffffffffffffffffffffffffffffffff1660009081526038602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b61026e7f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa081565b610498611aa3565b6060603b805461064f906126f8565b80601f016020809104026020016040519081016040528092919081815260200182805461067b906126f8565b80156106c85780601f1061069d576101008083540402835291602001916106c8565b820191906000526020600020905b8154815290600101906020018083116106ab57829003601f168201915b5050505050905090565b604080518082018252600281527f3830000000000000000000000000000000000000000000000000000000000000602082015290517f08c379a00000000000000000000000000000000000000000000000000000000081526000916107399160040161233c565b60405180910390fd5b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff88166107c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b50834211156040518060400160405280600281526020017f373800000000000000000000000000000000000000000000000000000000000081525090610837576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b5073ffffffffffffffffffffffffffffffffffffffff871660009081526034602052604081205490610867610ab9565b604080517f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa0602082015273ffffffffffffffffffffffffffffffffffffffff8b1691810191909152606081018990526080810184905260a0810188905260c0016040516020818303038152906040528051906020012060405160200161091f9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa1580156109a5573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f373900000000000000000000000000000000000000000000000000000000000081525090610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b50610a5782600161277b565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260346020526040902055610a88898989611ace565b505050505050505050565b603f54600090610ab4906fffffffffffffffffffffffffffffffff16611b45565b905090565b60007f0000000000000000000000000000000000000000000000000000000000000000461415610aea575060355490565b610ab4611b94565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603860205260408120546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041681610b51575060009392505050565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603e6020526040812054610b8990839064ffffffffff16611c59565b9050610b958382611c6d565b95945050505050565b603f546000908190819081906fffffffffffffffffffffffffffffffff16610bc5603a5490565b610bce82611b45565b603f549197909650919450700100000000000000000000000000000000900464ffffffffff1692509050565b6060603c805461064f906126f8565b60408051808201909152600281527f323300000000000000000000000000000000000000000000000000000000000060208201526000908190337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b50600080610cbf86611cc4565b92509250506000610cce610a93565b73ffffffffffffffffffffffffffffffffffffffff881660009081526038602052604081205491925090819070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16888411610d5957603f80547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690556000603a55610e53565b610d638985612793565b603a81905591506000610d93610d7886611d49565b603f546fffffffffffffffffffffffffffffffff1690611c6d565b90506000610daa610da38c611d49565b8490611c6d565b9050818110610de957603f80547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690556000603a8190559450610e50565b610e0d610e08610df886611d49565b610e028486612793565b90611d64565b611da3565b603f80547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216918217905594505b50505b85891415610ecb5773ffffffffffffffffffffffffffffffffffffffff8a16600090815260386020908152604080832080546fffffffffffffffffffffffffffffffff169055603e909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000169055610f20565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603e6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff161790555b603f80547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff160217905588851115611049576000610f788a87612793565b9050610f858b8287611e49565b60405181815273ffffffffffffffffffffffffffffffffffffffff8c16906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101899052908101879052606081018390526080810185905260a0810184905273ffffffffffffffffffffffffffffffffffffffff8c169081907fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f9060c00160405180910390a350611119565b6000611055868b612793565b90506110628b8287611fba565b60405181815260009073ffffffffffffffffffffffffffffffffffffffff8d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101899052908101879052606081018590526080810184905273ffffffffffffffffffffffffffffffffffffffff8c16907f44bd20a79e993bdcc7cbedf54a3b4d19fb78490124b6b90d04fe3242eea579e89060a00160405180910390a2505b50955093505050505b9250929050565b6000808073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f3233000000000000000000000000000000000000000000000000000000000000815250906111ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b506112246040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146112625761126287898861200a565b60008061126e89611cc4565b925092505061127b610a93565b808452603f546fffffffffffffffffffffffffffffffff1660a08501526112a390899061277b565b603a81905560208401526112b688611d49565b60408481019190915273ffffffffffffffffffffffffffffffffffffffff8a1660009081526038602052205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16606084015261135261132261131d8a8561277b565b611d49565b6040850151611331908a611c6d565b61134861133d86611d49565b606088015190611c6d565b610e02919061277b565b6080840181905261136290611da3565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260386020908152604080832080546fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000969091168602179055603e825290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff16908117909155603f80547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff16919093021790915583015161146190610e089061143690611d49565b6040860151611446908b90611c6d565b6113486114568860000151611d49565b60a089015190611c6d565b603f80547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216918217905560a084015260006114b2828a61277b565b90506114c38a828660000151611e49565b60405181815273ffffffffffffffffffffffffffffffffffffffff8b16906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360808085015160a080870151602080890151604080518881529283018a9052820188905260608201949094529384015282015273ffffffffffffffffffffffffffffffffffffffff808c1691908d16907fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f9060c00160405180910390a35050602082015160a0909201519015999198509650945050505050565b6115b6338383611ace565b5050565b6001805460ff16806115cb5750303b155b806115d7575060005481115b611663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610739565b60015460ff161580156116a057600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f38370000000000000000000000000000000000000000000000000000000000008152509061175d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b50611767866120ca565b611770856120dd565b603d80546037805473ffffffffffffffffffffffffffffffffffffffff8d81167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179091558a16610100027fffffffffffffffffffffff00000000000000000000000000000000000000000090911660ff8a16171790556117f5611b94565b6035819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f40251fbfb6656cfa65a00d7879029fec1fad21d28fdcff2f4f68f52795b74f2c8a8a8a8a8a8a604051611882969594939291906127aa565b60405180910390a380156118b957600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611932573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611956919061284a565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156119c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e79190612867565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b5050603d805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b603f5460009081906fffffffffffffffffffffffffffffffff16611ac681611b45565b939092509050565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526036602090815260408083208786168085529083529281902086905560375490518681529416939192917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1910160405180910390a4505050565b600080611b51603a5490565b905080611b615750600092915050565b6000611b8084603f60109054906101000a900464ffffffffff16611c59565b9050611b8c8282611c6d565b949350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611bbf6120f0565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000611c668383426120fa565b9392505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517611ca257600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b600080600080611d088573ffffffffffffffffffffffffffffffffffffffff166000908152603860205260409020546fffffffffffffffffffffffffffffffff1690565b905080611d2057600080600093509350935050611d42565b6000611d2b86610af2565b90508181611d398282612793565b94509450945050505b9193909250565b633b9aca008181029081048214611d5f57600080fd5b919050565b600081156b033b2e3c9fd0803ce800000060028404190484111715611d8857600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b60006fffffffffffffffffffffffffffffffff821115611e45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610739565b5090565b6000611e5483611da3565b73ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260409020549091506fffffffffffffffffffffffffffffffff16611e998282612889565b73ffffffffffffffffffffffffffffffffffffffff868116600090815260386020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9390931692909217909155603d5461010090041615611fb357603d546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018690526fffffffffffffffffffffffffffffffff84166044830152610100909204909116906331873e2e90606401600060405180830381600087803b158015611f9f57600080fd5b505af1158015610a88573d6000803e3d6000fd5b5050505050565b6000611fc583611da3565b73ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260409020549091506fffffffffffffffffffffffffffffffff16611e9982826128bd565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260366020908152604080832093861683529290529081205461204a908390612793565b73ffffffffffffffffffffffffffffffffffffffff808616600081815260366020908152604080832089861680855292529182902085905560375491519495509216927fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1906120bc9086815260200190565b60405180910390a450505050565b80516115b690603b906020840190612241565b80516115b690603c906020840190612241565b6060610ab4610640565b60008061210e64ffffffffff851684612793565b90508061212a576b033b2e3c9fd0803ce8000000915050611c66565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511612160576000612165565b600285035b925066038882915c40006121798a80611c6d565b81612186576121866128ee565b0491506301e13380612198838b611c6d565b816121a5576121a56128ee565b0490506000826121b5868861291d565b6121bf919061291d565b600290049050600082856121d3888a61291d565b6121dd919061291d565b6121e7919061291d565b60069004905080826301e133806121fe8a8f61291d565b612208919061295a565b61221e906b033b2e3c9fd0803ce800000061277b565b612228919061277b565b612232919061277b565b9b9a5050505050505050505050565b82805461224d906126f8565b90600052602060002090601f01602090048101928261226f57600085556122b5565b82601f1061228857805160ff19168380011785556122b5565b828001600101855582156122b5579182015b828111156122b557825182559160200191906001019061229a565b50611e459291505b80821115611e4557600081556001016122bd565b6000815180845260005b818110156122f7576020818501810151868301820152016122db565b81811115612309576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611c6660208301846122d1565b73ffffffffffffffffffffffffffffffffffffffff8116811461237157600080fd5b50565b8035611d5f8161234f565b6000806040838503121561239257600080fd5b823561239d8161234f565b946020939093013593505050565b803560ff81168114611d5f57600080fd5b600080600080600080600060e0888a0312156123d757600080fd5b87356123e28161234f565b965060208801356123f28161234f565b9550604088013594506060880135935061240e608089016123ab565b925060a0880135915060c0880135905092959891949750929550565b60008060006060848603121561243f57600080fd5b833561244a8161234f565b9250602084013561245a8161234f565b929592945050506040919091013590565b6000806040838503121561247e57600080fd5b82356124898161234f565b915060208301356124998161234f565b809150509250929050565b6000602082840312156124b657600080fd5b8135611c668161234f565b600080600080608085870312156124d757600080fd5b84356124e28161234f565b935060208501356124f28161234f565b93969395505050506040820135916060013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261254757600080fd5b813567ffffffffffffffff8082111561256257612562612507565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156125a8576125a8612507565b816040528381528660208588010111156125c157600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008083601f8401126125f357600080fd5b50813567ffffffffffffffff81111561260b57600080fd5b60208301915083602082850101111561112257600080fd5b60008060008060008060008060e0898b03121561263f57600080fd5b883561264a8161234f565b9750602089013561265a8161234f565b965061266860408a01612374565b955061267660608a016123ab565b9450608089013567ffffffffffffffff8082111561269357600080fd5b61269f8c838d01612536565b955060a08b01359150808211156126b557600080fd5b6126c18c838d01612536565b945060c08b01359150808211156126d757600080fd5b506126e48b828c016125e1565b999c989b5096995094979396929594505050565b600181811c9082168061270c57607f821691505b60208210811415612746577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561278e5761278e61274c565b500190565b6000828210156127a5576127a561274c565b500390565b73ffffffffffffffffffffffffffffffffffffffff8716815260ff8616602082015260a0604082015260006127e260a08301876122d1565b82810360608401526127f481876122d1565b905082810360808401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050979650505050505050565b60006020828403121561285c57600080fd5b8151611c668161234f565b60006020828403121561287957600080fd5b81518015158114611c6657600080fd5b60006fffffffffffffffffffffffffffffffff8083168185168083038211156128b4576128b461274c565b01949350505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156128e6576128e661274c565b039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156129555761295561274c565b500290565b600082612990577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220c2d6bd735bf076ca6d0fedf2150af4ea0e2f14eeed887b3fba7f3a62e0639ff164736f6c634300080a0033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2CAF CODESIZE SUB DUP1 PUSH3 0x2CAF DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x38 SWAP2 PUSH3 0x234 JUMP JUMPDEST DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x16 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x535441424C455F444542545F544F4B454E5F494D504C00000000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x16 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x535441424C455F444542545F544F4B454E5F494D504C00000000000000000000 DUP2 MSTORE POP PUSH1 0x0 CHAINID PUSH1 0x80 DUP2 DUP2 MSTORE POP POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xEE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x114 SWAP2 SWAP1 PUSH3 0x234 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE DUP3 MLOAD PUSH3 0x135 SWAP1 PUSH1 0x3B SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH3 0x175 JUMP JUMPDEST POP DUP2 MLOAD PUSH3 0x14B SWAP1 PUSH1 0x3C SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x175 JUMP JUMPDEST POP PUSH1 0x3D DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xC0 MSTORE POP PUSH3 0x298 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x183 SWAP1 PUSH3 0x25B JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x1A7 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x1F2 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x1C2 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x1F2 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x1F2 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x1F2 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x1D5 JUMP JUMPDEST POP PUSH3 0x200 SWAP3 SWAP2 POP PUSH3 0x204 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x200 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x205 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x231 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x247 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x254 DUP2 PUSH3 0x21B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x270 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x292 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x29CB PUSH3 0x2E4 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x305 ADD MSTORE DUP2 DUP2 PUSH2 0xC45 ADD MSTORE DUP2 DUP2 PUSH2 0x1144 ADD MSTORE DUP2 DUP2 PUSH2 0x16A2 ADD MSTORE PUSH2 0x17FD ADD MSTORE PUSH1 0x0 PUSH2 0x18C9 ADD MSTORE PUSH1 0x0 PUSH2 0xABD ADD MSTORE PUSH2 0x29CB 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 0x20B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x90F6FCF2 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xC04A8A10 GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xE655DBD8 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xE78C9B3B GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE78C9B3B EQ PUSH2 0x5B5 JUMPI DUP1 PUSH4 0xF3BFC738 EQ PUSH2 0x611 JUMPI DUP1 PUSH4 0xF731E9BE EQ PUSH2 0x638 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x57F JUMPI DUP1 PUSH4 0xE7484890 EQ PUSH2 0x592 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC04A8A10 EQ PUSH2 0x503 JUMPI DUP1 PUSH4 0xC222EC8A EQ PUSH2 0x516 JUMPI DUP1 PUSH4 0xC634DFAA EQ PUSH2 0x529 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x571 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA9059CBB GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x4AD JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x4CB JUMPI DUP1 PUSH4 0xB9A7B622 EQ PUSH2 0x4FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x90F6FCF2 EQ PUSH2 0x463 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x47D JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x485 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6BD76D24 GT PUSH2 0x1A2 JUMPI DUP1 PUSH4 0x78160376 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x36F JUMPI DUP1 PUSH4 0x79774338 EQ PUSH2 0x3AB JUMPI DUP1 PUSH4 0x79CE6B8C EQ PUSH2 0x3DA JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x42D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6BD76D24 EQ PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x2ED JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x300 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x34C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0x1DE JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x27C JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x28A JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x29F JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0xB52D558 EQ PUSH2 0x251 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x266 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x218 PUSH2 0x640 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x225 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x241 PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x237F JUMP JUMPDEST PUSH2 0x6D2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x264 PUSH2 0x25F CALLDATASIZE PUSH1 0x4 PUSH2 0x23BC JUMP JUMPDEST PUSH2 0x742 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x26E PUSH2 0xA93 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x241 PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x242A JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x26E PUSH2 0xAB9 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x2B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x246B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x2FB CALLDATASIZE PUSH1 0x4 PUSH2 0x24A4 JUMP JUMPDEST PUSH2 0xAF2 JUMP JUMPDEST PUSH2 0x327 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x327 JUMP JUMPDEST PUSH2 0x218 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0xB9E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP4 ADD MSTORE PUSH5 0xFFFFFFFFFF AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x417 PUSH2 0x3E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x24A4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3E PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH5 0xFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH5 0xFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x43B CALLDATASIZE PUSH1 0x4 PUSH2 0x24A4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x26E JUMP JUMPDEST PUSH2 0x218 PUSH2 0xBFA JUMP JUMPDEST PUSH2 0x498 PUSH2 0x493 CALLDATASIZE PUSH1 0x4 PUSH2 0x237F JUMP JUMPDEST PUSH2 0xC09 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x225 JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x327 JUMP JUMPDEST PUSH2 0x4DE PUSH2 0x4D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x24C1 JUMP JUMPDEST PUSH2 0x1129 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x26E PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH2 0x264 PUSH2 0x511 CALLDATASIZE PUSH1 0x4 PUSH2 0x237F JUMP JUMPDEST PUSH2 0x15AB JUMP JUMPDEST PUSH2 0x264 PUSH2 0x524 CALLDATASIZE PUSH1 0x4 PUSH2 0x2623 JUMP JUMPDEST PUSH2 0x15BA JUMP JUMPDEST PUSH2 0x26E PUSH2 0x537 CALLDATASIZE PUSH1 0x4 PUSH2 0x24A4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x246B JUMP JUMPDEST PUSH2 0x264 PUSH2 0x58D CALLDATASIZE PUSH1 0x4 PUSH2 0x24A4 JUMP JUMPDEST PUSH2 0x18C5 JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x417 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x5C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x24A4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x26E PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x1AA3 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3B DUP1 SLOAD PUSH2 0x64F SWAP1 PUSH2 0x26F8 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x67B SWAP1 PUSH2 0x26F8 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x6C8 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x69D JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6C8 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 0x6AB JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3830000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x739 SWAP2 PUSH1 0x4 ADD PUSH2 0x233C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x7C4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x837 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x867 PUSH2 0xAB9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x91F SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xA4B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP PUSH2 0xA57 DUP3 PUSH1 0x1 PUSH2 0x277B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0xA88 DUP10 DUP10 DUP10 PUSH2 0x1ACE JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0x0 SWAP1 PUSH2 0xAB4 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1B45 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0xAEA JUMPI POP PUSH1 0x35 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xAB4 PUSH2 0x1B94 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND DUP2 PUSH2 0xB51 JUMPI POP PUSH1 0x0 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3E PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xB89 SWAP1 DUP4 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x1C59 JUMP JUMPDEST SWAP1 POP PUSH2 0xB95 DUP4 DUP3 PUSH2 0x1C6D JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xBC5 PUSH1 0x3A SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xBCE DUP3 PUSH2 0x1B45 JUMP JUMPDEST PUSH1 0x3F SLOAD SWAP2 SWAP8 SWAP1 SWAP7 POP SWAP2 SWAP5 POP PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3C DUP1 SLOAD PUSH2 0x64F SWAP1 PUSH2 0x26F8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCB2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH2 0xCBF DUP7 PUSH2 0x1CC4 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP PUSH1 0x0 PUSH2 0xCCE PUSH2 0xA93 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 DUP2 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 DUP5 GT PUSH2 0xD59 JUMPI PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x0 PUSH1 0x3A SSTORE PUSH2 0xE53 JUMP JUMPDEST PUSH2 0xD63 DUP10 DUP6 PUSH2 0x2793 JUMP JUMPDEST PUSH1 0x3A DUP2 SWAP1 SSTORE SWAP2 POP PUSH1 0x0 PUSH2 0xD93 PUSH2 0xD78 DUP7 PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0x1C6D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xDAA PUSH2 0xDA3 DUP13 PUSH2 0x1D49 JUMP JUMPDEST DUP5 SWAP1 PUSH2 0x1C6D JUMP JUMPDEST SWAP1 POP DUP2 DUP2 LT PUSH2 0xDE9 JUMPI PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x0 PUSH1 0x3A DUP2 SWAP1 SSTORE SWAP5 POP PUSH2 0xE50 JUMP JUMPDEST PUSH2 0xE0D PUSH2 0xE08 PUSH2 0xDF8 DUP7 PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0xE02 DUP5 DUP7 PUSH2 0x2793 JUMP JUMPDEST SWAP1 PUSH2 0x1D64 JUMP JUMPDEST PUSH2 0x1DA3 JUMP JUMPDEST PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 DUP3 OR SWAP1 SSTORE SWAP5 POP JUMPDEST POP POP JUMPDEST DUP6 DUP10 EQ ISZERO PUSH2 0xECB JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 SSTORE PUSH1 0x3E SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 AND SWAP1 SSTORE PUSH2 0xF20 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3E PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 AND TIMESTAMP PUSH5 0xFFFFFFFFFF AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE DUP9 DUP6 GT ISZERO PUSH2 0x1049 JUMPI PUSH1 0x0 PUSH2 0xF78 DUP11 DUP8 PUSH2 0x2793 JUMP JUMPDEST SWAP1 POP PUSH2 0xF85 DUP12 DUP3 DUP8 PUSH2 0x1E49 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP10 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 DUP2 SWAP1 PUSH32 0xC16F4E4CA34D790DE4C656C72FD015C667D688F20BE64EEA360618545C4C530F SWAP1 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x1119 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1055 DUP7 DUP12 PUSH2 0x2793 JUMP JUMPDEST SWAP1 POP PUSH2 0x1062 DUP12 DUP3 DUP8 PUSH2 0x1FBA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP10 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 PUSH32 0x44BD20A79E993BDCC7CBEDF54A3B4D19FB78490124B6B90D04FE3242EEA579E8 SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMPDEST POP SWAP6 POP SWAP4 POP POP POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x11EA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP PUSH2 0x1224 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1262 JUMPI PUSH2 0x1262 DUP8 DUP10 DUP9 PUSH2 0x200A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x126E DUP10 PUSH2 0x1CC4 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP PUSH2 0x127B PUSH2 0xA93 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x3F SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x12A3 SWAP1 DUP10 SWAP1 PUSH2 0x277B JUMP JUMPDEST PUSH1 0x3A DUP2 SWAP1 SSTORE PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x12B6 DUP9 PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0x40 DUP5 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x1352 PUSH2 0x1322 PUSH2 0x131D DUP11 DUP6 PUSH2 0x277B JUMP JUMPDEST PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD PUSH2 0x1331 SWAP1 DUP11 PUSH2 0x1C6D JUMP JUMPDEST PUSH2 0x1348 PUSH2 0x133D DUP7 PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0x60 DUP9 ADD MLOAD SWAP1 PUSH2 0x1C6D JUMP JUMPDEST PUSH2 0xE02 SWAP2 SWAP1 PUSH2 0x277B JUMP JUMPDEST PUSH1 0x80 DUP5 ADD DUP2 SWAP1 MSTORE PUSH2 0x1362 SWAP1 PUSH2 0x1DA3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP7 SWAP1 SWAP2 AND DUP7 MUL OR SWAP1 SSTORE PUSH1 0x3E DUP3 MSTORE SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 AND TIMESTAMP PUSH5 0xFFFFFFFFFF AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 SWAP1 SWAP4 MUL OR SWAP1 SWAP2 SSTORE DUP4 ADD MLOAD PUSH2 0x1461 SWAP1 PUSH2 0xE08 SWAP1 PUSH2 0x1436 SWAP1 PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD PUSH2 0x1446 SWAP1 DUP12 SWAP1 PUSH2 0x1C6D JUMP JUMPDEST PUSH2 0x1348 PUSH2 0x1456 DUP9 PUSH1 0x0 ADD MLOAD PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0xA0 DUP10 ADD MLOAD SWAP1 PUSH2 0x1C6D JUMP JUMPDEST PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 DUP3 OR SWAP1 SSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x0 PUSH2 0x14B2 DUP3 DUP11 PUSH2 0x277B JUMP JUMPDEST SWAP1 POP PUSH2 0x14C3 DUP11 DUP3 DUP7 PUSH1 0x0 ADD MLOAD PUSH2 0x1E49 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x80 DUP1 DUP6 ADD MLOAD PUSH1 0xA0 DUP1 DUP8 ADD MLOAD PUSH1 0x20 DUP1 DUP10 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP9 DUP2 MSTORE SWAP3 DUP4 ADD DUP11 SWAP1 MSTORE DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 DUP5 ADD MSTORE DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND SWAP2 SWAP1 DUP14 AND SWAP1 PUSH32 0xC16F4E4CA34D790DE4C656C72FD015C667D688F20BE64EEA360618545C4C530F SWAP1 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0xA0 SWAP1 SWAP3 ADD MLOAD SWAP1 ISZERO SWAP10 SWAP2 SWAP9 POP SWAP7 POP SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x15B6 CALLER DUP4 DUP4 PUSH2 0x1ACE JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x15CB JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x15D7 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x1663 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x739 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x16A0 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x175D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP PUSH2 0x1767 DUP7 PUSH2 0x20CA JUMP JUMPDEST PUSH2 0x1770 DUP6 PUSH2 0x20DD JUMP JUMPDEST PUSH1 0x3D DUP1 SLOAD PUSH1 0x37 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE DUP11 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH1 0xFF DUP11 AND OR OR SWAP1 SSTORE PUSH2 0x17F5 PUSH2 0x1B94 JUMP JUMPDEST PUSH1 0x35 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x40251FBFB6656CFA65A00D7879029FEC1FAD21D28FDCFF2F4F68F52795B74F2C DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH1 0x40 MLOAD PUSH2 0x1882 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x27AA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0x18B9 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1932 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1956 SWAP2 SWAP1 PUSH2 0x284A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19C3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19E7 SWAP2 SWAP1 PUSH2 0x2867 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1A55 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP POP PUSH1 0x3D DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1AC6 DUP2 PUSH2 0x1B45 JUMP JUMPDEST SWAP4 SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP7 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP7 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP1 MLOAD DUP7 DUP2 MSTORE SWAP5 AND SWAP4 SWAP2 SWAP3 SWAP2 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1B51 PUSH1 0x3A SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1B61 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B80 DUP5 PUSH1 0x3F PUSH1 0x10 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x1C59 JUMP JUMPDEST SWAP1 POP PUSH2 0x1B8C DUP3 DUP3 PUSH2 0x1C6D JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x1BBF PUSH2 0x20F0 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C66 DUP4 DUP4 TIMESTAMP PUSH2 0x20FA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1CA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x1D08 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1D20 JUMPI PUSH1 0x0 DUP1 PUSH1 0x0 SWAP4 POP SWAP4 POP SWAP4 POP POP PUSH2 0x1D42 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D2B DUP7 PUSH2 0xAF2 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 PUSH2 0x1D39 DUP3 DUP3 PUSH2 0x2793 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP POP POP JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH4 0x3B9ACA00 DUP2 DUP2 MUL SWAP1 DUP2 DIV DUP3 EQ PUSH2 0x1D5F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1D88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1E45 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x739 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E54 DUP4 PUSH2 0x1DA3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E99 DUP3 DUP3 PUSH2 0x2889 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV AND ISZERO PUSH2 0x1FB3 JUMPI PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP7 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH2 0x100 SWAP1 SWAP3 DIV SWAP1 SWAP2 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA88 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1FC5 DUP4 PUSH2 0x1DA3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E99 DUP3 DUP3 PUSH2 0x28BD JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x204A SWAP1 DUP4 SWAP1 PUSH2 0x2793 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP7 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP2 MLOAD SWAP5 SWAP6 POP SWAP3 AND SWAP3 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP1 PUSH2 0x20BC SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x15B6 SWAP1 PUSH1 0x3B SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2241 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x15B6 SWAP1 PUSH1 0x3C SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2241 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xAB4 PUSH2 0x640 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x210E PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x2793 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x212A JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x1C66 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x2160 JUMPI PUSH1 0x0 PUSH2 0x2165 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x2179 DUP11 DUP1 PUSH2 0x1C6D JUMP JUMPDEST DUP2 PUSH2 0x2186 JUMPI PUSH2 0x2186 PUSH2 0x28EE JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x2198 DUP4 DUP12 PUSH2 0x1C6D JUMP JUMPDEST DUP2 PUSH2 0x21A5 JUMPI PUSH2 0x21A5 PUSH2 0x28EE JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x21B5 DUP7 DUP9 PUSH2 0x291D JUMP JUMPDEST PUSH2 0x21BF SWAP2 SWAP1 PUSH2 0x291D JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x21D3 DUP9 DUP11 PUSH2 0x291D JUMP JUMPDEST PUSH2 0x21DD SWAP2 SWAP1 PUSH2 0x291D JUMP JUMPDEST PUSH2 0x21E7 SWAP2 SWAP1 PUSH2 0x291D JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x21FE DUP11 DUP16 PUSH2 0x291D JUMP JUMPDEST PUSH2 0x2208 SWAP2 SWAP1 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x221E SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x277B JUMP JUMPDEST PUSH2 0x2228 SWAP2 SWAP1 PUSH2 0x277B JUMP JUMPDEST PUSH2 0x2232 SWAP2 SWAP1 PUSH2 0x277B JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x224D SWAP1 PUSH2 0x26F8 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x226F JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x22B5 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x2288 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x22B5 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x22B5 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x22B5 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x229A JUMP JUMPDEST POP PUSH2 0x1E45 SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1E45 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x22BD JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x22F7 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x22DB JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x2309 JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1C66 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x22D1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2371 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1D5F DUP2 PUSH2 0x234F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2392 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x239D DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1D5F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x23D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x23E2 DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x23F2 DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x240E PUSH1 0x80 DUP10 ADD PUSH2 0x23AB JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x243F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x244A DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x245A DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x247E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2489 DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x2499 DUP2 PUSH2 0x234F JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x24B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1C66 DUP2 PUSH2 0x234F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x24D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x24E2 DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x24F2 DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2547 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2562 JUMPI PUSH2 0x2562 PUSH2 0x2507 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x25A8 JUMPI PUSH2 0x25A8 PUSH2 0x2507 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x25C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x25F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x260B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x1122 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xE0 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x263F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x264A DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x265A DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP7 POP PUSH2 0x2668 PUSH1 0x40 DUP11 ADD PUSH2 0x2374 JUMP JUMPDEST SWAP6 POP PUSH2 0x2676 PUSH1 0x60 DUP11 ADD PUSH2 0x23AB JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2693 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x269F DUP13 DUP4 DUP14 ADD PUSH2 0x2536 JUMP JUMPDEST SWAP6 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26C1 DUP13 DUP4 DUP14 ADD PUSH2 0x2536 JUMP JUMPDEST SWAP5 POP PUSH1 0xC0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26E4 DUP12 DUP3 DUP13 ADD PUSH2 0x25E1 JUMP JUMPDEST SWAP10 SWAP13 SWAP9 SWAP12 POP SWAP7 SWAP10 POP SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x270C JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x2746 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x278E JUMPI PUSH2 0x278E PUSH2 0x274C JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x27A5 JUMPI PUSH2 0x27A5 PUSH2 0x274C JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP2 MSTORE PUSH1 0xFF DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x27E2 PUSH1 0xA0 DUP4 ADD DUP8 PUSH2 0x22D1 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x27F4 DUP2 DUP8 PUSH2 0x22D1 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE DUP4 DUP2 MSTORE DUP4 DUP6 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND DUP3 ADD ADD SWAP2 POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x285C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C66 DUP2 PUSH2 0x234F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2879 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1C66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x28B4 JUMPI PUSH2 0x28B4 PUSH2 0x274C JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x28E6 JUMPI PUSH2 0x28E6 PUSH2 0x274C JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2955 JUMPI PUSH2 0x2955 PUSH2 0x274C JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2990 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC2 0xD6 0xBD PUSH20 0x5BF076CA6D0FEDF2150AF4EA0E2F14EEED887B3F 0xBA PUSH32 0x3A62E0639FF164736F6C634300080A0033000000000000000000000000000000 ","sourceMap":"1216:11978:99:-:0;;;928:1:71;886:43;;1787:164:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1853:4;2671:222:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1911:1:99;630:13:102;619:24;;;;;;2780:4:103;-1:-1:-1;;;;;2780:23:103;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2759:46:103;;;2811:12;;;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;2829:16:103;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;2851:9:103;:20;;-1:-1:-1;;2851:20:103;;;;;;;;;;;;-1:-1:-1;;;;;;;2877:11:103;;;-1:-1:-1;1216:11978:99;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1216:11978:99;;;-1:-1:-1;1216:11978:99;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:138:201;-1:-1:-1;;;;;96:31:201;;86:42;;76:70;;142:1;139;132:12;76:70;14:138;:::o;157:272::-;241:6;294:2;282:9;273:7;269:23;265:32;262:52;;;310:1;307;300:12;262:52;342:9;336:16;361:38;393:5;361:38;:::i;:::-;418:5;157:272;-1:-1:-1;;;157:272:201:o;728:380::-;807:1;803:12;;;;850;;;871:61;;925:4;917:6;913:17;903:27;;871:61;978:2;970:6;967:14;947:18;944:38;941:161;;;1024:10;1019:3;1015:20;1012:1;1005:31;1059:4;1056:1;1049:15;1087:4;1084:1;1077:15;941:161;;728:380;;;:::o;:::-;1216:11978:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@DEBT_TOKEN_REVISION_26077":{"entryPoint":null,"id":26077,"parameterSlots":0,"returnSlots":0},"@DELEGATION_WITH_SIG_TYPEHASH_27522":{"entryPoint":null,"id":27522,"parameterSlots":0,"returnSlots":0},"@DOMAIN_SEPARATOR_27772":{"entryPoint":2745,"id":27772,"parameterSlots":0,"returnSlots":1},"@EIP712_REVISION_27731":{"entryPoint":null,"id":27731,"parameterSlots":0,"returnSlots":0},"@POOL_27929":{"entryPoint":null,"id":27929,"parameterSlots":0,"returnSlots":0},"@UNDERLYING_ASSET_ADDRESS_26858":{"entryPoint":null,"id":26858,"parameterSlots":0,"returnSlots":1},"@_EIP712BaseId_27008":{"entryPoint":8432,"id":27008,"parameterSlots":0,"returnSlots":1},"@_approveDelegation_27685":{"entryPoint":6862,"id":27685,"parameterSlots":3,"returnSlots":0},"@_burn_26997":{"entryPoint":8122,"id":26997,"parameterSlots":3,"returnSlots":0},"@_calcTotalSupply_26893":{"entryPoint":6981,"id":26893,"parameterSlots":1,"returnSlots":1},"@_calculateBalanceIncrease_26763":{"entryPoint":7364,"id":26763,"parameterSlots":1,"returnSlots":3},"@_calculateDomainSeparator_27815":{"entryPoint":7060,"id":27815,"parameterSlots":0,"returnSlots":1},"@_decreaseBorrowAllowance_27721":{"entryPoint":8202,"id":27721,"parameterSlots":3,"returnSlots":0},"@_mint_26945":{"entryPoint":7753,"id":26945,"parameterSlots":3,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_setDecimals_28348":{"entryPoint":null,"id":28348,"parameterSlots":1,"returnSlots":0},"@_setName_28326":{"entryPoint":8394,"id":28326,"parameterSlots":1,"returnSlots":0},"@_setSymbol_28337":{"entryPoint":8413,"id":28337,"parameterSlots":1,"returnSlots":0},"@allowance_27041":{"entryPoint":null,"id":27041,"parameterSlots":2,"returnSlots":1},"@approveDelegation_27548":{"entryPoint":5547,"id":27548,"parameterSlots":2,"returnSlots":0},"@approve_27057":{"entryPoint":1746,"id":27057,"parameterSlots":2,"returnSlots":1},"@balanceOf_26269":{"entryPoint":2802,"id":26269,"parameterSlots":1,"returnSlots":1},"@balanceOf_28020":{"entryPoint":null,"id":28020,"parameterSlots":1,"returnSlots":1},"@borrowAllowance_27659":{"entryPoint":null,"id":27659,"parameterSlots":2,"returnSlots":1},"@burn_26720":{"entryPoint":3081,"id":26720,"parameterSlots":2,"returnSlots":2},"@calculateCompoundedInterest_21079":{"entryPoint":8442,"id":21079,"parameterSlots":3,"returnSlots":1},"@calculateCompoundedInterest_21097":{"entryPoint":7257,"id":21097,"parameterSlots":2,"returnSlots":1},"@decimals_27995":{"entryPoint":null,"id":27995,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_27107":{"entryPoint":null,"id":27107,"parameterSlots":2,"returnSlots":1},"@delegationWithSig_27641":{"entryPoint":1858,"id":27641,"parameterSlots":7,"returnSlots":0},"@getAverageStableRate_26194":{"entryPoint":null,"id":26194,"parameterSlots":0,"returnSlots":1},"@getIncentivesController_28030":{"entryPoint":null,"id":28030,"parameterSlots":0,"returnSlots":1},"@getRevision_26184":{"entryPoint":null,"id":26184,"parameterSlots":0,"returnSlots":1},"@getSupplyData_26791":{"entryPoint":2974,"id":26791,"parameterSlots":0,"returnSlots":4},"@getTotalSupplyAndAvgRate_26811":{"entryPoint":6819,"id":26811,"parameterSlots":0,"returnSlots":2},"@getTotalSupplyLastUpdated_26833":{"entryPoint":null,"id":26833,"parameterSlots":0,"returnSlots":1},"@getUserLastUpdated_26208":{"entryPoint":null,"id":26208,"parameterSlots":1,"returnSlots":1},"@getUserStableRate_26223":{"entryPoint":null,"id":26223,"parameterSlots":1,"returnSlots":1},"@increaseAllowance_27091":{"entryPoint":null,"id":27091,"parameterSlots":2,"returnSlots":1},"@initialize_26174":{"entryPoint":5562,"id":26174,"parameterSlots":8,"returnSlots":0},"@isConstructor_10568":{"entryPoint":null,"id":10568,"parameterSlots":0,"returnSlots":1},"@mint_26493":{"entryPoint":4393,"id":26493,"parameterSlots":4,"returnSlots":3},"@name_27975":{"entryPoint":1600,"id":27975,"parameterSlots":0,"returnSlots":1},"@nonces_27785":{"entryPoint":null,"id":27785,"parameterSlots":1,"returnSlots":1},"@principalBalanceOf_26848":{"entryPoint":null,"id":26848,"parameterSlots":1,"returnSlots":1},"@rayDiv_21198":{"entryPoint":7524,"id":21198,"parameterSlots":2,"returnSlots":1},"@rayMul_21186":{"entryPoint":7277,"id":21186,"parameterSlots":2,"returnSlots":1},"@setIncentivesController_28044":{"entryPoint":6341,"id":28044,"parameterSlots":1,"returnSlots":0},"@symbol_27985":{"entryPoint":3066,"id":27985,"parameterSlots":0,"returnSlots":1},"@toUint128_1626":{"entryPoint":7587,"id":1626,"parameterSlots":1,"returnSlots":1},"@totalSupply_26823":{"entryPoint":2707,"id":26823,"parameterSlots":0,"returnSlots":1},"@totalSupply_28005":{"entryPoint":null,"id":28005,"parameterSlots":0,"returnSlots":1},"@transferFrom_27075":{"entryPoint":null,"id":27075,"parameterSlots":3,"returnSlots":1},"@transfer_27025":{"entryPoint":null,"id":27025,"parameterSlots":2,"returnSlots":1},"@wadToRay_21218":{"entryPoint":7497,"id":21218,"parameterSlots":1,"returnSlots":1},"abi_decode_address":{"entryPoint":9076,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":9697,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_string":{"entryPoint":9526,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":9380,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":10314,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":9323,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":9258,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256":{"entryPoint":9409,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":9148,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":9087,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":10343,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IAaveIncentivesController_$3875":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$4860t_addresst_contract$_IAaveIncentivesController_$3875t_uint8t_string_memory_ptrt_string_memory_ptrt_bytes_calldata_ptr":{"entryPoint":9763,"id":null,"parameterSlots":2,"returnSlots":8},"abi_decode_uint8":{"entryPoint":9131,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_string":{"entryPoint":8913,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":10154,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool_t_uint256_t_uint256__to_t_bool_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IAaveIncentivesController_$3875__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":9020,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint40__to_t_uint256_t_uint256_t_uint256_t_uint40__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_uint40__to_t_uint40__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":10377,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":10107,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":10586,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":10525,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint128":{"entryPoint":10429,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":10131,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":9976,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":10060,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":10478,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":9479,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":9039,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:17494:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"64:481:201","statements":[{"nodeType":"YulVariableDeclaration","src":"74:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"94:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"88:5:201"},"nodeType":"YulFunctionCall","src":"88:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"78:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"116:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"121:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"109:6:201"},"nodeType":"YulFunctionCall","src":"109:19:201"},"nodeType":"YulExpressionStatement","src":"109:19:201"},{"nodeType":"YulVariableDeclaration","src":"137:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"146:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"141:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"208:110:201","statements":[{"nodeType":"YulVariableDeclaration","src":"222:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"232:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"226:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"264:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"269:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"260:3:201"},"nodeType":"YulFunctionCall","src":"260:11:201"},{"name":"_1","nodeType":"YulIdentifier","src":"273:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"256:3:201"},"nodeType":"YulFunctionCall","src":"256:20:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"292:5:201"},{"name":"i","nodeType":"YulIdentifier","src":"299:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"288:3:201"},"nodeType":"YulFunctionCall","src":"288:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"303:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"284:3:201"},"nodeType":"YulFunctionCall","src":"284:22:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"278:5:201"},"nodeType":"YulFunctionCall","src":"278:29:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"249:6:201"},"nodeType":"YulFunctionCall","src":"249:59:201"},"nodeType":"YulExpressionStatement","src":"249:59:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"167:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"170:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"164:2:201"},"nodeType":"YulFunctionCall","src":"164:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"178:21:201","statements":[{"nodeType":"YulAssignment","src":"180:17:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"189:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"192:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"185:3:201"},"nodeType":"YulFunctionCall","src":"185:12:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"180:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"160:3:201","statements":[]},"src":"156:162:201"},{"body":{"nodeType":"YulBlock","src":"352:62:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"381:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"386:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"377:3:201"},"nodeType":"YulFunctionCall","src":"377:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"395:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"373:3:201"},"nodeType":"YulFunctionCall","src":"373:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"402:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"366:6:201"},"nodeType":"YulFunctionCall","src":"366:38:201"},"nodeType":"YulExpressionStatement","src":"366:38:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"333:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"336:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"330:2:201"},"nodeType":"YulFunctionCall","src":"330:13:201"},"nodeType":"YulIf","src":"327:87:201"},{"nodeType":"YulAssignment","src":"423:116:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"438:3:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"451:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"459:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"447:3:201"},"nodeType":"YulFunctionCall","src":"447:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"464:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"443:3:201"},"nodeType":"YulFunctionCall","src":"443:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"434:3:201"},"nodeType":"YulFunctionCall","src":"434:98:201"},{"kind":"number","nodeType":"YulLiteral","src":"534:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"430:3:201"},"nodeType":"YulFunctionCall","src":"430:109:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"423:3:201"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"41:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"48:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"56:3:201","type":""}],"src":"14:531:201"},{"body":{"nodeType":"YulBlock","src":"671:99:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"688:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"699:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"681:6:201"},"nodeType":"YulFunctionCall","src":"681:21:201"},"nodeType":"YulExpressionStatement","src":"681:21:201"},{"nodeType":"YulAssignment","src":"711:53:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"737:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"749:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"760:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"745:3:201"},"nodeType":"YulFunctionCall","src":"745:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"719:17:201"},"nodeType":"YulFunctionCall","src":"719:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"711:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"640:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"651:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"662:4:201","type":""}],"src":"550:220:201"},{"body":{"nodeType":"YulBlock","src":"820:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"907:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"916:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"919:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"909:6:201"},"nodeType":"YulFunctionCall","src":"909:12:201"},"nodeType":"YulExpressionStatement","src":"909:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"843:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"854:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"861:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:201"},"nodeType":"YulFunctionCall","src":"850:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"840:2:201"},"nodeType":"YulFunctionCall","src":"840:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"833:6:201"},"nodeType":"YulFunctionCall","src":"833:73:201"},"nodeType":"YulIf","src":"830:93:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"809:5:201","type":""}],"src":"775:154:201"},{"body":{"nodeType":"YulBlock","src":"983:85:201","statements":[{"nodeType":"YulAssignment","src":"993:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1015:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1002:12:201"},"nodeType":"YulFunctionCall","src":"1002:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"993:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1056:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1031:24:201"},"nodeType":"YulFunctionCall","src":"1031:31:201"},"nodeType":"YulExpressionStatement","src":"1031:31:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"962:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"973:5:201","type":""}],"src":"934:134:201"},{"body":{"nodeType":"YulBlock","src":"1160:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"1206:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1215:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1218:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1208:6:201"},"nodeType":"YulFunctionCall","src":"1208:12:201"},"nodeType":"YulExpressionStatement","src":"1208:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1181:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1190:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1177:3:201"},"nodeType":"YulFunctionCall","src":"1177:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1202:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1173:3:201"},"nodeType":"YulFunctionCall","src":"1173:32:201"},"nodeType":"YulIf","src":"1170:52:201"},{"nodeType":"YulVariableDeclaration","src":"1231:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1257:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1244:12:201"},"nodeType":"YulFunctionCall","src":"1244:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1235:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1301:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1276:24:201"},"nodeType":"YulFunctionCall","src":"1276:31:201"},"nodeType":"YulExpressionStatement","src":"1276:31:201"},{"nodeType":"YulAssignment","src":"1316:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1326:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1316:6:201"}]},{"nodeType":"YulAssignment","src":"1340:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1367:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1378:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1363:3:201"},"nodeType":"YulFunctionCall","src":"1363:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1350:12:201"},"nodeType":"YulFunctionCall","src":"1350:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1340:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1118:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1129:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1141:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1149:6:201","type":""}],"src":"1073:315:201"},{"body":{"nodeType":"YulBlock","src":"1488:92:201","statements":[{"nodeType":"YulAssignment","src":"1498:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1510:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1521:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1506:3:201"},"nodeType":"YulFunctionCall","src":"1506:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1498:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1540:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1565:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1558:6:201"},"nodeType":"YulFunctionCall","src":"1558:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1551:6:201"},"nodeType":"YulFunctionCall","src":"1551:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1533:6:201"},"nodeType":"YulFunctionCall","src":"1533:41:201"},"nodeType":"YulExpressionStatement","src":"1533:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1457:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1468:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1479:4:201","type":""}],"src":"1393:187:201"},{"body":{"nodeType":"YulBlock","src":"1632:109:201","statements":[{"nodeType":"YulAssignment","src":"1642:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1664:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1651:12:201"},"nodeType":"YulFunctionCall","src":"1651:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"1642:5:201"}]},{"body":{"nodeType":"YulBlock","src":"1719:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1728:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1731:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1721:6:201"},"nodeType":"YulFunctionCall","src":"1721:12:201"},"nodeType":"YulExpressionStatement","src":"1721:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1693:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1704:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1711:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1700:3:201"},"nodeType":"YulFunctionCall","src":"1700:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1690:2:201"},"nodeType":"YulFunctionCall","src":"1690:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1683:6:201"},"nodeType":"YulFunctionCall","src":"1683:35:201"},"nodeType":"YulIf","src":"1680:55:201"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1611:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"1622:5:201","type":""}],"src":"1585:156:201"},{"body":{"nodeType":"YulBlock","src":"1916:564:201","statements":[{"body":{"nodeType":"YulBlock","src":"1963:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1972:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1975:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1965:6:201"},"nodeType":"YulFunctionCall","src":"1965:12:201"},"nodeType":"YulExpressionStatement","src":"1965:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1937:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1946:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1933:3:201"},"nodeType":"YulFunctionCall","src":"1933:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1958:3:201","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1929:3:201"},"nodeType":"YulFunctionCall","src":"1929:33:201"},"nodeType":"YulIf","src":"1926:53:201"},{"nodeType":"YulVariableDeclaration","src":"1988:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2014:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2001:12:201"},"nodeType":"YulFunctionCall","src":"2001:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1992:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2058:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2033:24:201"},"nodeType":"YulFunctionCall","src":"2033:31:201"},"nodeType":"YulExpressionStatement","src":"2033:31:201"},{"nodeType":"YulAssignment","src":"2073:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"2083:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2073:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2097:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2129:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2140:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2125:3:201"},"nodeType":"YulFunctionCall","src":"2125:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2112:12:201"},"nodeType":"YulFunctionCall","src":"2112:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2101:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2178:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2153:24:201"},"nodeType":"YulFunctionCall","src":"2153:33:201"},"nodeType":"YulExpressionStatement","src":"2153:33:201"},{"nodeType":"YulAssignment","src":"2195:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"2205:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2195:6:201"}]},{"nodeType":"YulAssignment","src":"2221:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2248:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2259:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2244:3:201"},"nodeType":"YulFunctionCall","src":"2244:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2231:12:201"},"nodeType":"YulFunctionCall","src":"2231:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2221:6:201"}]},{"nodeType":"YulAssignment","src":"2272:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2299:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2310:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2295:3:201"},"nodeType":"YulFunctionCall","src":"2295:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2282:12:201"},"nodeType":"YulFunctionCall","src":"2282:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2272:6:201"}]},{"nodeType":"YulAssignment","src":"2323:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2354:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2365:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2350:3:201"},"nodeType":"YulFunctionCall","src":"2350:19:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"2333:16:201"},"nodeType":"YulFunctionCall","src":"2333:37:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"2323:6:201"}]},{"nodeType":"YulAssignment","src":"2379:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2406:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2417:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2402:3:201"},"nodeType":"YulFunctionCall","src":"2402:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2389:12:201"},"nodeType":"YulFunctionCall","src":"2389:33:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"2379:6:201"}]},{"nodeType":"YulAssignment","src":"2431:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2458:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2469:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2454:3:201"},"nodeType":"YulFunctionCall","src":"2454:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2441:12:201"},"nodeType":"YulFunctionCall","src":"2441:33:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"2431:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1834:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1845:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1857:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1865:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1873:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1881:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1889:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"1897:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"1905:6:201","type":""}],"src":"1746:734:201"},{"body":{"nodeType":"YulBlock","src":"2586:76:201","statements":[{"nodeType":"YulAssignment","src":"2596:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2608:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2619:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2604:3:201"},"nodeType":"YulFunctionCall","src":"2604:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2596:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2638:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"2649:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2631:6:201"},"nodeType":"YulFunctionCall","src":"2631:25:201"},"nodeType":"YulExpressionStatement","src":"2631:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2555:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2566:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2577:4:201","type":""}],"src":"2485:177:201"},{"body":{"nodeType":"YulBlock","src":"2771:352:201","statements":[{"body":{"nodeType":"YulBlock","src":"2817:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2826:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2829:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2819:6:201"},"nodeType":"YulFunctionCall","src":"2819:12:201"},"nodeType":"YulExpressionStatement","src":"2819:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2792:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2801:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2788:3:201"},"nodeType":"YulFunctionCall","src":"2788:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2813:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2784:3:201"},"nodeType":"YulFunctionCall","src":"2784:32:201"},"nodeType":"YulIf","src":"2781:52:201"},{"nodeType":"YulVariableDeclaration","src":"2842:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2868:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2855:12:201"},"nodeType":"YulFunctionCall","src":"2855:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2846:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2912:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2887:24:201"},"nodeType":"YulFunctionCall","src":"2887:31:201"},"nodeType":"YulExpressionStatement","src":"2887:31:201"},{"nodeType":"YulAssignment","src":"2927:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"2937:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2927:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2951:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2983:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2994:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2979:3:201"},"nodeType":"YulFunctionCall","src":"2979:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2966:12:201"},"nodeType":"YulFunctionCall","src":"2966:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2955:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3032:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3007:24:201"},"nodeType":"YulFunctionCall","src":"3007:33:201"},"nodeType":"YulExpressionStatement","src":"3007:33:201"},{"nodeType":"YulAssignment","src":"3049:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3059:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3049:6:201"}]},{"nodeType":"YulAssignment","src":"3075:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3102:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3113:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3098:3:201"},"nodeType":"YulFunctionCall","src":"3098:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3085:12:201"},"nodeType":"YulFunctionCall","src":"3085:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3075:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2721:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2732:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2744:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2752:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2760:6:201","type":""}],"src":"2667:456:201"},{"body":{"nodeType":"YulBlock","src":"3225:87:201","statements":[{"nodeType":"YulAssignment","src":"3235:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3247:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3258:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3243:3:201"},"nodeType":"YulFunctionCall","src":"3243:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3235:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3277:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3292:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3300:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3288:3:201"},"nodeType":"YulFunctionCall","src":"3288:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3270:6:201"},"nodeType":"YulFunctionCall","src":"3270:36:201"},"nodeType":"YulExpressionStatement","src":"3270:36:201"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3194:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3205:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3216:4:201","type":""}],"src":"3128:184:201"},{"body":{"nodeType":"YulBlock","src":"3418:76:201","statements":[{"nodeType":"YulAssignment","src":"3428:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3440:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3451:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3436:3:201"},"nodeType":"YulFunctionCall","src":"3436:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3428:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3470:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"3481:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3463:6:201"},"nodeType":"YulFunctionCall","src":"3463:25:201"},"nodeType":"YulExpressionStatement","src":"3463:25:201"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3387:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3398:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3409:4:201","type":""}],"src":"3317:177:201"},{"body":{"nodeType":"YulBlock","src":"3586:301:201","statements":[{"body":{"nodeType":"YulBlock","src":"3632:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3641:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3644:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3634:6:201"},"nodeType":"YulFunctionCall","src":"3634:12:201"},"nodeType":"YulExpressionStatement","src":"3634:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3607:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3616:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3603:3:201"},"nodeType":"YulFunctionCall","src":"3603:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3628:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3599:3:201"},"nodeType":"YulFunctionCall","src":"3599:32:201"},"nodeType":"YulIf","src":"3596:52:201"},{"nodeType":"YulVariableDeclaration","src":"3657:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3683:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3670:12:201"},"nodeType":"YulFunctionCall","src":"3670:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3661:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3727:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3702:24:201"},"nodeType":"YulFunctionCall","src":"3702:31:201"},"nodeType":"YulExpressionStatement","src":"3702:31:201"},{"nodeType":"YulAssignment","src":"3742:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3752:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3742:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3766:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3798:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3809:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3794:3:201"},"nodeType":"YulFunctionCall","src":"3794:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3781:12:201"},"nodeType":"YulFunctionCall","src":"3781:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"3770:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3847:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3822:24:201"},"nodeType":"YulFunctionCall","src":"3822:33:201"},"nodeType":"YulExpressionStatement","src":"3822:33:201"},{"nodeType":"YulAssignment","src":"3864:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3874:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3864:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3544:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3555:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3567:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3575:6:201","type":""}],"src":"3499:388:201"},{"body":{"nodeType":"YulBlock","src":"3962:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"4008:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4017:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4020:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4010:6:201"},"nodeType":"YulFunctionCall","src":"4010:12:201"},"nodeType":"YulExpressionStatement","src":"4010:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3983:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3992:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3979:3:201"},"nodeType":"YulFunctionCall","src":"3979:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4004:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3975:3:201"},"nodeType":"YulFunctionCall","src":"3975:32:201"},"nodeType":"YulIf","src":"3972:52:201"},{"nodeType":"YulVariableDeclaration","src":"4033:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4059:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4046:12:201"},"nodeType":"YulFunctionCall","src":"4046:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4037:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4103:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4078:24:201"},"nodeType":"YulFunctionCall","src":"4078:31:201"},"nodeType":"YulExpressionStatement","src":"4078:31:201"},{"nodeType":"YulAssignment","src":"4118:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"4128:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4118:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3928:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3939:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3951:6:201","type":""}],"src":"3892:247:201"},{"body":{"nodeType":"YulBlock","src":"4259:125:201","statements":[{"nodeType":"YulAssignment","src":"4269:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4281:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4292:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4277:3:201"},"nodeType":"YulFunctionCall","src":"4277:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4269:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4311:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4326:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4334:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4322:3:201"},"nodeType":"YulFunctionCall","src":"4322:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4304:6:201"},"nodeType":"YulFunctionCall","src":"4304:74:201"},"nodeType":"YulExpressionStatement","src":"4304:74:201"}]},"name":"abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4228:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4239:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4250:4:201","type":""}],"src":"4144:240:201"},{"body":{"nodeType":"YulBlock","src":"4524:125:201","statements":[{"nodeType":"YulAssignment","src":"4534:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4546:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4557:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4542:3:201"},"nodeType":"YulFunctionCall","src":"4542:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4534:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4576:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4591:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4599:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4587:3:201"},"nodeType":"YulFunctionCall","src":"4587:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4569:6:201"},"nodeType":"YulFunctionCall","src":"4569:74:201"},"nodeType":"YulExpressionStatement","src":"4569:74:201"}]},"name":"abi_encode_tuple_t_contract$_IAaveIncentivesController_$3875__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4493:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4504:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4515:4:201","type":""}],"src":"4389:260:201"},{"body":{"nodeType":"YulBlock","src":"4773:99:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4790:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4801:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4783:6:201"},"nodeType":"YulFunctionCall","src":"4783:21:201"},"nodeType":"YulExpressionStatement","src":"4783:21:201"},{"nodeType":"YulAssignment","src":"4813:53:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4839:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4851:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4862:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4847:3:201"},"nodeType":"YulFunctionCall","src":"4847:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"4821:17:201"},"nodeType":"YulFunctionCall","src":"4821:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4813:4:201"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4742:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4753:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4764:4:201","type":""}],"src":"4654:218:201"},{"body":{"nodeType":"YulBlock","src":"5060:225:201","statements":[{"nodeType":"YulAssignment","src":"5070:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5082:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5093:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5078:3:201"},"nodeType":"YulFunctionCall","src":"5078:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5070:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5113:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"5124:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5106:6:201"},"nodeType":"YulFunctionCall","src":"5106:25:201"},"nodeType":"YulExpressionStatement","src":"5106:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5151:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5162:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5147:3:201"},"nodeType":"YulFunctionCall","src":"5147:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"5167:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5140:6:201"},"nodeType":"YulFunctionCall","src":"5140:34:201"},"nodeType":"YulExpressionStatement","src":"5140:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5194:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5205:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5190:3:201"},"nodeType":"YulFunctionCall","src":"5190:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"5210:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5183:6:201"},"nodeType":"YulFunctionCall","src":"5183:34:201"},"nodeType":"YulExpressionStatement","src":"5183:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5237:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5248:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5233:3:201"},"nodeType":"YulFunctionCall","src":"5233:18:201"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"5257:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5265:12:201","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5253:3:201"},"nodeType":"YulFunctionCall","src":"5253:25:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5226:6:201"},"nodeType":"YulFunctionCall","src":"5226:53:201"},"nodeType":"YulExpressionStatement","src":"5226:53:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint40__to_t_uint256_t_uint256_t_uint256_t_uint40__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5005:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5016:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5024:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5032:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5040:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5051:4:201","type":""}],"src":"4877:408:201"},{"body":{"nodeType":"YulBlock","src":"5389:95:201","statements":[{"nodeType":"YulAssignment","src":"5399:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5411:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5422:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5407:3:201"},"nodeType":"YulFunctionCall","src":"5407:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5399:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5441:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5456:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5464:12:201","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5452:3:201"},"nodeType":"YulFunctionCall","src":"5452:25:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5434:6:201"},"nodeType":"YulFunctionCall","src":"5434:44:201"},"nodeType":"YulExpressionStatement","src":"5434:44:201"}]},"name":"abi_encode_tuple_t_uint40__to_t_uint40__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5358:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5369:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5380:4:201","type":""}],"src":"5290:194:201"},{"body":{"nodeType":"YulBlock","src":"5618:119:201","statements":[{"nodeType":"YulAssignment","src":"5628:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5640:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5651:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5636:3:201"},"nodeType":"YulFunctionCall","src":"5636:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5628:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5670:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"5681:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5663:6:201"},"nodeType":"YulFunctionCall","src":"5663:25:201"},"nodeType":"YulExpressionStatement","src":"5663:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5708:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5719:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5704:3:201"},"nodeType":"YulFunctionCall","src":"5704:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"5724:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5697:6:201"},"nodeType":"YulFunctionCall","src":"5697:34:201"},"nodeType":"YulExpressionStatement","src":"5697:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5579:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5590:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5598:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5609:4:201","type":""}],"src":"5489:248:201"},{"body":{"nodeType":"YulBlock","src":"5843:125:201","statements":[{"nodeType":"YulAssignment","src":"5853:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5865:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5876:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5861:3:201"},"nodeType":"YulFunctionCall","src":"5861:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5853:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5895:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5910:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5918:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5906:3:201"},"nodeType":"YulFunctionCall","src":"5906:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5888:6:201"},"nodeType":"YulFunctionCall","src":"5888:74:201"},"nodeType":"YulExpressionStatement","src":"5888:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5812:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5823:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5834:4:201","type":""}],"src":"5742:226:201"},{"body":{"nodeType":"YulBlock","src":"6094:404:201","statements":[{"body":{"nodeType":"YulBlock","src":"6141:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6150:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6153:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6143:6:201"},"nodeType":"YulFunctionCall","src":"6143:12:201"},"nodeType":"YulExpressionStatement","src":"6143:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6115:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6124:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6111:3:201"},"nodeType":"YulFunctionCall","src":"6111:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"6136:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6107:3:201"},"nodeType":"YulFunctionCall","src":"6107:33:201"},"nodeType":"YulIf","src":"6104:53:201"},{"nodeType":"YulVariableDeclaration","src":"6166:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6192:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6179:12:201"},"nodeType":"YulFunctionCall","src":"6179:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6170:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6236:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6211:24:201"},"nodeType":"YulFunctionCall","src":"6211:31:201"},"nodeType":"YulExpressionStatement","src":"6211:31:201"},{"nodeType":"YulAssignment","src":"6251:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"6261:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6251:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"6275:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6307:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6318:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6303:3:201"},"nodeType":"YulFunctionCall","src":"6303:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6290:12:201"},"nodeType":"YulFunctionCall","src":"6290:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"6279:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"6356:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6331:24:201"},"nodeType":"YulFunctionCall","src":"6331:33:201"},"nodeType":"YulExpressionStatement","src":"6331:33:201"},{"nodeType":"YulAssignment","src":"6373:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"6383:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6373:6:201"}]},{"nodeType":"YulAssignment","src":"6399:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6426:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6437:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6422:3:201"},"nodeType":"YulFunctionCall","src":"6422:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6409:12:201"},"nodeType":"YulFunctionCall","src":"6409:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6399:6:201"}]},{"nodeType":"YulAssignment","src":"6450:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6477:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6488:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6473:3:201"},"nodeType":"YulFunctionCall","src":"6473:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6460:12:201"},"nodeType":"YulFunctionCall","src":"6460:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"6450:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6036:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6047:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6059:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6067:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6075:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6083:6:201","type":""}],"src":"5973:525:201"},{"body":{"nodeType":"YulBlock","src":"6654:178:201","statements":[{"nodeType":"YulAssignment","src":"6664:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6676:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6687:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6672:3:201"},"nodeType":"YulFunctionCall","src":"6672:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6664:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6706:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6731:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6724:6:201"},"nodeType":"YulFunctionCall","src":"6724:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6717:6:201"},"nodeType":"YulFunctionCall","src":"6717:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6699:6:201"},"nodeType":"YulFunctionCall","src":"6699:41:201"},"nodeType":"YulExpressionStatement","src":"6699:41:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6760:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6771:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6756:3:201"},"nodeType":"YulFunctionCall","src":"6756:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"6776:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6749:6:201"},"nodeType":"YulFunctionCall","src":"6749:34:201"},"nodeType":"YulExpressionStatement","src":"6749:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6803:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6814:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6799:3:201"},"nodeType":"YulFunctionCall","src":"6799:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"6819:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6792:6:201"},"nodeType":"YulFunctionCall","src":"6792:34:201"},"nodeType":"YulExpressionStatement","src":"6792:34:201"}]},"name":"abi_encode_tuple_t_bool_t_uint256_t_uint256__to_t_bool_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6607:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6618:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6626:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6634:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6645:4:201","type":""}],"src":"6503:329:201"},{"body":{"nodeType":"YulBlock","src":"6869:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6886:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6889:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6879:6:201"},"nodeType":"YulFunctionCall","src":"6879:88:201"},"nodeType":"YulExpressionStatement","src":"6879:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6983:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6986:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6976:6:201"},"nodeType":"YulFunctionCall","src":"6976:15:201"},"nodeType":"YulExpressionStatement","src":"6976:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7007:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7010:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7000:6:201"},"nodeType":"YulFunctionCall","src":"7000:15:201"},"nodeType":"YulExpressionStatement","src":"7000:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"6837:184:201"},{"body":{"nodeType":"YulBlock","src":"7079:725:201","statements":[{"body":{"nodeType":"YulBlock","src":"7128:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7137:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7140:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7130:6:201"},"nodeType":"YulFunctionCall","src":"7130:12:201"},"nodeType":"YulExpressionStatement","src":"7130:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7107:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7115:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7103:3:201"},"nodeType":"YulFunctionCall","src":"7103:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"7122:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7099:3:201"},"nodeType":"YulFunctionCall","src":"7099:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7092:6:201"},"nodeType":"YulFunctionCall","src":"7092:35:201"},"nodeType":"YulIf","src":"7089:55:201"},{"nodeType":"YulVariableDeclaration","src":"7153:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7176:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7163:12:201"},"nodeType":"YulFunctionCall","src":"7163:20:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"7157:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7192:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"7202:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"7196:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"7243:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"7245:16:201"},"nodeType":"YulFunctionCall","src":"7245:18:201"},"nodeType":"YulExpressionStatement","src":"7245:18:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"7235:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"7239:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7232:2:201"},"nodeType":"YulFunctionCall","src":"7232:10:201"},"nodeType":"YulIf","src":"7229:36:201"},{"nodeType":"YulVariableDeclaration","src":"7274:76:201","value":{"kind":"number","nodeType":"YulLiteral","src":"7284:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"7278:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7359:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7379:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7373:5:201"},"nodeType":"YulFunctionCall","src":"7373:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"7363:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7391:71:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7413:6:201"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"7437:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"7441:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7433:3:201"},"nodeType":"YulFunctionCall","src":"7433:13:201"},{"name":"_3","nodeType":"YulIdentifier","src":"7448:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7429:3:201"},"nodeType":"YulFunctionCall","src":"7429:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"7453:2:201","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7425:3:201"},"nodeType":"YulFunctionCall","src":"7425:31:201"},{"name":"_3","nodeType":"YulIdentifier","src":"7458:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7421:3:201"},"nodeType":"YulFunctionCall","src":"7421:40:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7409:3:201"},"nodeType":"YulFunctionCall","src":"7409:53:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"7395:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"7521:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"7523:16:201"},"nodeType":"YulFunctionCall","src":"7523:18:201"},"nodeType":"YulExpressionStatement","src":"7523:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7480:10:201"},{"name":"_2","nodeType":"YulIdentifier","src":"7492:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7477:2:201"},"nodeType":"YulFunctionCall","src":"7477:18:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7500:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"7512:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7497:2:201"},"nodeType":"YulFunctionCall","src":"7497:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"7474:2:201"},"nodeType":"YulFunctionCall","src":"7474:46:201"},"nodeType":"YulIf","src":"7471:72:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7559:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7563:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7552:6:201"},"nodeType":"YulFunctionCall","src":"7552:22:201"},"nodeType":"YulExpressionStatement","src":"7552:22:201"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7590:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7598:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7583:6:201"},"nodeType":"YulFunctionCall","src":"7583:18:201"},"nodeType":"YulExpressionStatement","src":"7583:18:201"},{"body":{"nodeType":"YulBlock","src":"7649:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7658:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7661:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7651:6:201"},"nodeType":"YulFunctionCall","src":"7651:12:201"},"nodeType":"YulExpressionStatement","src":"7651:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7624:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7632:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7620:3:201"},"nodeType":"YulFunctionCall","src":"7620:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"7637:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7616:3:201"},"nodeType":"YulFunctionCall","src":"7616:26:201"},{"name":"end","nodeType":"YulIdentifier","src":"7644:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7613:2:201"},"nodeType":"YulFunctionCall","src":"7613:35:201"},"nodeType":"YulIf","src":"7610:55:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7691:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7699:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7687:3:201"},"nodeType":"YulFunctionCall","src":"7687:17:201"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7710:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7718:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7706:3:201"},"nodeType":"YulFunctionCall","src":"7706:17:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7725:2:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"7674:12:201"},"nodeType":"YulFunctionCall","src":"7674:54:201"},"nodeType":"YulExpressionStatement","src":"7674:54:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7752:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7760:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7748:3:201"},"nodeType":"YulFunctionCall","src":"7748:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"7765:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7744:3:201"},"nodeType":"YulFunctionCall","src":"7744:26:201"},{"kind":"number","nodeType":"YulLiteral","src":"7772:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7737:6:201"},"nodeType":"YulFunctionCall","src":"7737:37:201"},"nodeType":"YulExpressionStatement","src":"7737:37:201"},{"nodeType":"YulAssignment","src":"7783:15:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"7792:6:201"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"7783:5:201"}]}]},"name":"abi_decode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7053:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"7061:3:201","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"7069:5:201","type":""}],"src":"7026:778:201"},{"body":{"nodeType":"YulBlock","src":"7881:275:201","statements":[{"body":{"nodeType":"YulBlock","src":"7930:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7939:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7942:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7932:6:201"},"nodeType":"YulFunctionCall","src":"7932:12:201"},"nodeType":"YulExpressionStatement","src":"7932:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7909:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7917:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7905:3:201"},"nodeType":"YulFunctionCall","src":"7905:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"7924:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7901:3:201"},"nodeType":"YulFunctionCall","src":"7901:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7894:6:201"},"nodeType":"YulFunctionCall","src":"7894:35:201"},"nodeType":"YulIf","src":"7891:55:201"},{"nodeType":"YulAssignment","src":"7955:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7978:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7965:12:201"},"nodeType":"YulFunctionCall","src":"7965:20:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"7955:6:201"}]},{"body":{"nodeType":"YulBlock","src":"8028:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8037:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8040:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8030:6:201"},"nodeType":"YulFunctionCall","src":"8030:12:201"},"nodeType":"YulExpressionStatement","src":"8030:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"8000:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8008:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7997:2:201"},"nodeType":"YulFunctionCall","src":"7997:30:201"},"nodeType":"YulIf","src":"7994:50:201"},{"nodeType":"YulAssignment","src":"8053:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8069:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8077:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8065:3:201"},"nodeType":"YulFunctionCall","src":"8065:17:201"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"8053:8:201"}]},{"body":{"nodeType":"YulBlock","src":"8134:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8143:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8146:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8136:6:201"},"nodeType":"YulFunctionCall","src":"8136:12:201"},"nodeType":"YulExpressionStatement","src":"8136:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8105:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"8113:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8101:3:201"},"nodeType":"YulFunctionCall","src":"8101:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"8122:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8097:3:201"},"nodeType":"YulFunctionCall","src":"8097:30:201"},{"name":"end","nodeType":"YulIdentifier","src":"8129:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8094:2:201"},"nodeType":"YulFunctionCall","src":"8094:39:201"},"nodeType":"YulIf","src":"8091:59:201"}]},"name":"abi_decode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7844:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"7852:3:201","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"7860:8:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"7870:6:201","type":""}],"src":"7809:347:201"},{"body":{"nodeType":"YulBlock","src":"8418:1045:201","statements":[{"body":{"nodeType":"YulBlock","src":"8465:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8474:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8477:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8467:6:201"},"nodeType":"YulFunctionCall","src":"8467:12:201"},"nodeType":"YulExpressionStatement","src":"8467:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8439:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"8448:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8435:3:201"},"nodeType":"YulFunctionCall","src":"8435:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"8460:3:201","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8431:3:201"},"nodeType":"YulFunctionCall","src":"8431:33:201"},"nodeType":"YulIf","src":"8428:53:201"},{"nodeType":"YulVariableDeclaration","src":"8490:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8516:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8503:12:201"},"nodeType":"YulFunctionCall","src":"8503:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"8494:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8560:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"8535:24:201"},"nodeType":"YulFunctionCall","src":"8535:31:201"},"nodeType":"YulExpressionStatement","src":"8535:31:201"},{"nodeType":"YulAssignment","src":"8575:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"8585:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8575:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"8599:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8631:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8642:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8627:3:201"},"nodeType":"YulFunctionCall","src":"8627:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8614:12:201"},"nodeType":"YulFunctionCall","src":"8614:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"8603:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"8680:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"8655:24:201"},"nodeType":"YulFunctionCall","src":"8655:33:201"},"nodeType":"YulExpressionStatement","src":"8655:33:201"},{"nodeType":"YulAssignment","src":"8697:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"8707:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"8697:6:201"}]},{"nodeType":"YulAssignment","src":"8723:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8756:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8767:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8752:3:201"},"nodeType":"YulFunctionCall","src":"8752:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"8733:18:201"},"nodeType":"YulFunctionCall","src":"8733:38:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"8723:6:201"}]},{"nodeType":"YulAssignment","src":"8780:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8811:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8822:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8807:3:201"},"nodeType":"YulFunctionCall","src":"8807:18:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"8790:16:201"},"nodeType":"YulFunctionCall","src":"8790:36:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"8780:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"8835:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8866:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8877:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8862:3:201"},"nodeType":"YulFunctionCall","src":"8862:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8849:12:201"},"nodeType":"YulFunctionCall","src":"8849:33:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"8839:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8891:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8901:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8895:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"8946:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8955:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8958:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8948:6:201"},"nodeType":"YulFunctionCall","src":"8948:12:201"},"nodeType":"YulExpressionStatement","src":"8948:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8934:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"8942:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8931:2:201"},"nodeType":"YulFunctionCall","src":"8931:14:201"},"nodeType":"YulIf","src":"8928:34:201"},{"nodeType":"YulAssignment","src":"8971:60:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9003:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"9014:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8999:3:201"},"nodeType":"YulFunctionCall","src":"8999:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"9023:7:201"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"8981:17:201"},"nodeType":"YulFunctionCall","src":"8981:50:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"8971:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"9040:49:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9073:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9084:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9069:3:201"},"nodeType":"YulFunctionCall","src":"9069:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9056:12:201"},"nodeType":"YulFunctionCall","src":"9056:33:201"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"9044:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"9118:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9127:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9130:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9120:6:201"},"nodeType":"YulFunctionCall","src":"9120:12:201"},"nodeType":"YulExpressionStatement","src":"9120:12:201"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"9104:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9114:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9101:2:201"},"nodeType":"YulFunctionCall","src":"9101:16:201"},"nodeType":"YulIf","src":"9098:36:201"},{"nodeType":"YulAssignment","src":"9143:62:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9175:9:201"},{"name":"offset_1","nodeType":"YulIdentifier","src":"9186:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9171:3:201"},"nodeType":"YulFunctionCall","src":"9171:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"9197:7:201"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"9153:17:201"},"nodeType":"YulFunctionCall","src":"9153:52:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"9143:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"9214:49:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9247:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9258:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9243:3:201"},"nodeType":"YulFunctionCall","src":"9243:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9230:12:201"},"nodeType":"YulFunctionCall","src":"9230:33:201"},"variables":[{"name":"offset_2","nodeType":"YulTypedName","src":"9218:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"9292:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9301:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9304:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9294:6:201"},"nodeType":"YulFunctionCall","src":"9294:12:201"},"nodeType":"YulExpressionStatement","src":"9294:12:201"}]},"condition":{"arguments":[{"name":"offset_2","nodeType":"YulIdentifier","src":"9278:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9288:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9275:2:201"},"nodeType":"YulFunctionCall","src":"9275:16:201"},"nodeType":"YulIf","src":"9272:36:201"},{"nodeType":"YulVariableDeclaration","src":"9317:86:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9373:9:201"},{"name":"offset_2","nodeType":"YulIdentifier","src":"9384:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9369:3:201"},"nodeType":"YulFunctionCall","src":"9369:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"9395:7:201"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"9343:25:201"},"nodeType":"YulFunctionCall","src":"9343:60:201"},"variables":[{"name":"value6_1","nodeType":"YulTypedName","src":"9321:8:201","type":""},{"name":"value7_1","nodeType":"YulTypedName","src":"9331:8:201","type":""}]},{"nodeType":"YulAssignment","src":"9412:18:201","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"9422:8:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"9412:6:201"}]},{"nodeType":"YulAssignment","src":"9439:18:201","value":{"name":"value7_1","nodeType":"YulIdentifier","src":"9449:8:201"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"9439:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$4860t_addresst_contract$_IAaveIncentivesController_$3875t_uint8t_string_memory_ptrt_string_memory_ptrt_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8328:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8339:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8351:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8359:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8367:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"8375:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"8383:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"8391:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"8399:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"8407:6:201","type":""}],"src":"8161:1302:201"},{"body":{"nodeType":"YulBlock","src":"9572:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"9618:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9627:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9630:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9620:6:201"},"nodeType":"YulFunctionCall","src":"9620:12:201"},"nodeType":"YulExpressionStatement","src":"9620:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9593:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"9602:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9589:3:201"},"nodeType":"YulFunctionCall","src":"9589:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"9614:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9585:3:201"},"nodeType":"YulFunctionCall","src":"9585:32:201"},"nodeType":"YulIf","src":"9582:52:201"},{"nodeType":"YulVariableDeclaration","src":"9643:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9669:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9656:12:201"},"nodeType":"YulFunctionCall","src":"9656:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9647:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9713:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9688:24:201"},"nodeType":"YulFunctionCall","src":"9688:31:201"},"nodeType":"YulExpressionStatement","src":"9688:31:201"},{"nodeType":"YulAssignment","src":"9728:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"9738:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9728:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IAaveIncentivesController_$3875","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9538:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9549:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9561:6:201","type":""}],"src":"9468:281:201"},{"body":{"nodeType":"YulBlock","src":"9809:382:201","statements":[{"nodeType":"YulAssignment","src":"9819:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9833:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"9836:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"9829:3:201"},"nodeType":"YulFunctionCall","src":"9829:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"9819:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"9850:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"9880:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"9886:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9876:3:201"},"nodeType":"YulFunctionCall","src":"9876:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"9854:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"9927:31:201","statements":[{"nodeType":"YulAssignment","src":"9929:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9943:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"9951:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9939:3:201"},"nodeType":"YulFunctionCall","src":"9939:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"9929:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"9907:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9900:6:201"},"nodeType":"YulFunctionCall","src":"9900:26:201"},"nodeType":"YulIf","src":"9897:61:201"},{"body":{"nodeType":"YulBlock","src":"10017:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10038:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10041:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10031:6:201"},"nodeType":"YulFunctionCall","src":"10031:88:201"},"nodeType":"YulExpressionStatement","src":"10031:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10139:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10142:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10132:6:201"},"nodeType":"YulFunctionCall","src":"10132:15:201"},"nodeType":"YulExpressionStatement","src":"10132:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10167:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10170:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10160:6:201"},"nodeType":"YulFunctionCall","src":"10160:15:201"},"nodeType":"YulExpressionStatement","src":"10160:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"9973:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9996:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10004:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9993:2:201"},"nodeType":"YulFunctionCall","src":"9993:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"9970:2:201"},"nodeType":"YulFunctionCall","src":"9970:38:201"},"nodeType":"YulIf","src":"9967:218:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"9789:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"9798:6:201","type":""}],"src":"9754:437:201"},{"body":{"nodeType":"YulBlock","src":"10409:299:201","statements":[{"nodeType":"YulAssignment","src":"10419:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10431:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10442:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10427:3:201"},"nodeType":"YulFunctionCall","src":"10427:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10419:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10462:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"10473:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10455:6:201"},"nodeType":"YulFunctionCall","src":"10455:25:201"},"nodeType":"YulExpressionStatement","src":"10455:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10500:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10511:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10496:3:201"},"nodeType":"YulFunctionCall","src":"10496:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10520:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10528:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10516:3:201"},"nodeType":"YulFunctionCall","src":"10516:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10489:6:201"},"nodeType":"YulFunctionCall","src":"10489:83:201"},"nodeType":"YulExpressionStatement","src":"10489:83:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10592:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10603:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10588:3:201"},"nodeType":"YulFunctionCall","src":"10588:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"10608:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10581:6:201"},"nodeType":"YulFunctionCall","src":"10581:34:201"},"nodeType":"YulExpressionStatement","src":"10581:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10635:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10646:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10631:3:201"},"nodeType":"YulFunctionCall","src":"10631:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"10651:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10624:6:201"},"nodeType":"YulFunctionCall","src":"10624:34:201"},"nodeType":"YulExpressionStatement","src":"10624:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10678:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10689:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10674:3:201"},"nodeType":"YulFunctionCall","src":"10674:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"10695:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10667:6:201"},"nodeType":"YulFunctionCall","src":"10667:35:201"},"nodeType":"YulExpressionStatement","src":"10667:35:201"}]},"name":"abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10346:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"10357:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"10365:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10373:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10381:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10389:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10400:4:201","type":""}],"src":"10196:512:201"},{"body":{"nodeType":"YulBlock","src":"10961:196:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10978:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"10983:66:201","type":"","value":"0x1901000000000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10971:6:201"},"nodeType":"YulFunctionCall","src":"10971:79:201"},"nodeType":"YulExpressionStatement","src":"10971:79:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11070:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"11075:1:201","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11066:3:201"},"nodeType":"YulFunctionCall","src":"11066:11:201"},{"name":"value0","nodeType":"YulIdentifier","src":"11079:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11059:6:201"},"nodeType":"YulFunctionCall","src":"11059:27:201"},"nodeType":"YulExpressionStatement","src":"11059:27:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11106:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"11111:2:201","type":"","value":"34"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11102:3:201"},"nodeType":"YulFunctionCall","src":"11102:12:201"},{"name":"value1","nodeType":"YulIdentifier","src":"11116:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11095:6:201"},"nodeType":"YulFunctionCall","src":"11095:28:201"},"nodeType":"YulExpressionStatement","src":"11095:28:201"},{"nodeType":"YulAssignment","src":"11132:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"11143:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"11148:2:201","type":"","value":"66"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11139:3:201"},"nodeType":"YulFunctionCall","src":"11139:12:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"11132:3:201"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"10929:3:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10934:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10942:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"10953:3:201","type":""}],"src":"10713:444:201"},{"body":{"nodeType":"YulBlock","src":"11343:217:201","statements":[{"nodeType":"YulAssignment","src":"11353:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11365:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11376:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11361:3:201"},"nodeType":"YulFunctionCall","src":"11361:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11353:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11396:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"11407:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11389:6:201"},"nodeType":"YulFunctionCall","src":"11389:25:201"},"nodeType":"YulExpressionStatement","src":"11389:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11434:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11445:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11430:3:201"},"nodeType":"YulFunctionCall","src":"11430:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11454:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"11462:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11450:3:201"},"nodeType":"YulFunctionCall","src":"11450:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11423:6:201"},"nodeType":"YulFunctionCall","src":"11423:45:201"},"nodeType":"YulExpressionStatement","src":"11423:45:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11488:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11499:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11484:3:201"},"nodeType":"YulFunctionCall","src":"11484:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"11504:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11477:6:201"},"nodeType":"YulFunctionCall","src":"11477:34:201"},"nodeType":"YulExpressionStatement","src":"11477:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11531:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11542:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11527:3:201"},"nodeType":"YulFunctionCall","src":"11527:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"11547:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11520:6:201"},"nodeType":"YulFunctionCall","src":"11520:34:201"},"nodeType":"YulExpressionStatement","src":"11520:34:201"}]},"name":"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11288:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11299:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11307:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11315:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11323:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11334:4:201","type":""}],"src":"11162:398:201"},{"body":{"nodeType":"YulBlock","src":"11597:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11614:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11617:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11607:6:201"},"nodeType":"YulFunctionCall","src":"11607:88:201"},"nodeType":"YulExpressionStatement","src":"11607:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11711:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"11714:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11704:6:201"},"nodeType":"YulFunctionCall","src":"11704:15:201"},"nodeType":"YulExpressionStatement","src":"11704:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11735:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11738:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11728:6:201"},"nodeType":"YulFunctionCall","src":"11728:15:201"},"nodeType":"YulExpressionStatement","src":"11728:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"11565:184:201"},{"body":{"nodeType":"YulBlock","src":"11802:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"11829:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11831:16:201"},"nodeType":"YulFunctionCall","src":"11831:18:201"},"nodeType":"YulExpressionStatement","src":"11831:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11818:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"11825:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"11821:3:201"},"nodeType":"YulFunctionCall","src":"11821:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11815:2:201"},"nodeType":"YulFunctionCall","src":"11815:13:201"},"nodeType":"YulIf","src":"11812:39:201"},{"nodeType":"YulAssignment","src":"11860:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11871:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"11874:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11867:3:201"},"nodeType":"YulFunctionCall","src":"11867:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"11860:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11785:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"11788:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"11794:3:201","type":""}],"src":"11754:128:201"},{"body":{"nodeType":"YulBlock","src":"11936:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"11958:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11960:16:201"},"nodeType":"YulFunctionCall","src":"11960:18:201"},"nodeType":"YulExpressionStatement","src":"11960:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11952:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"11955:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"11949:2:201"},"nodeType":"YulFunctionCall","src":"11949:8:201"},"nodeType":"YulIf","src":"11946:34:201"},{"nodeType":"YulAssignment","src":"11989:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"12001:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"12004:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11997:3:201"},"nodeType":"YulFunctionCall","src":"11997:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"11989:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11918:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"11921:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"11927:4:201","type":""}],"src":"11887:125:201"},{"body":{"nodeType":"YulBlock","src":"12258:294:201","statements":[{"nodeType":"YulAssignment","src":"12268:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12280:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12291:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12276:3:201"},"nodeType":"YulFunctionCall","src":"12276:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12268:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12311:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"12322:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12304:6:201"},"nodeType":"YulFunctionCall","src":"12304:25:201"},"nodeType":"YulExpressionStatement","src":"12304:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12349:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12360:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12345:3:201"},"nodeType":"YulFunctionCall","src":"12345:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"12365:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12338:6:201"},"nodeType":"YulFunctionCall","src":"12338:34:201"},"nodeType":"YulExpressionStatement","src":"12338:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12392:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12403:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12388:3:201"},"nodeType":"YulFunctionCall","src":"12388:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"12408:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12381:6:201"},"nodeType":"YulFunctionCall","src":"12381:34:201"},"nodeType":"YulExpressionStatement","src":"12381:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12435:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12446:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12431:3:201"},"nodeType":"YulFunctionCall","src":"12431:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"12451:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12424:6:201"},"nodeType":"YulFunctionCall","src":"12424:34:201"},"nodeType":"YulExpressionStatement","src":"12424:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12478:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12489:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12474:3:201"},"nodeType":"YulFunctionCall","src":"12474:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"12495:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12467:6:201"},"nodeType":"YulFunctionCall","src":"12467:35:201"},"nodeType":"YulExpressionStatement","src":"12467:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12522:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12533:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12518:3:201"},"nodeType":"YulFunctionCall","src":"12518:19:201"},{"name":"value5","nodeType":"YulIdentifier","src":"12539:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12511:6:201"},"nodeType":"YulFunctionCall","src":"12511:35:201"},"nodeType":"YulExpressionStatement","src":"12511:35:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12187:9:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"12198:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12206:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12214:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12222:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12230:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12238:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12249:4:201","type":""}],"src":"12017:535:201"},{"body":{"nodeType":"YulBlock","src":"12770:250:201","statements":[{"nodeType":"YulAssignment","src":"12780:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12792:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12803:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12788:3:201"},"nodeType":"YulFunctionCall","src":"12788:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12780:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12823:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"12834:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12816:6:201"},"nodeType":"YulFunctionCall","src":"12816:25:201"},"nodeType":"YulExpressionStatement","src":"12816:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12861:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12872:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12857:3:201"},"nodeType":"YulFunctionCall","src":"12857:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"12877:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12850:6:201"},"nodeType":"YulFunctionCall","src":"12850:34:201"},"nodeType":"YulExpressionStatement","src":"12850:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12904:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12915:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12900:3:201"},"nodeType":"YulFunctionCall","src":"12900:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"12920:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12893:6:201"},"nodeType":"YulFunctionCall","src":"12893:34:201"},"nodeType":"YulExpressionStatement","src":"12893:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12947:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12958:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12943:3:201"},"nodeType":"YulFunctionCall","src":"12943:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"12963:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12936:6:201"},"nodeType":"YulFunctionCall","src":"12936:34:201"},"nodeType":"YulExpressionStatement","src":"12936:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12990:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13001:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12986:3:201"},"nodeType":"YulFunctionCall","src":"12986:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"13007:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12979:6:201"},"nodeType":"YulFunctionCall","src":"12979:35:201"},"nodeType":"YulExpressionStatement","src":"12979:35:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12707:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12718:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12726:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12734:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12742:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12750:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12761:4:201","type":""}],"src":"12557:463:201"},{"body":{"nodeType":"YulBlock","src":"13199:236:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13216:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13227:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13209:6:201"},"nodeType":"YulFunctionCall","src":"13209:21:201"},"nodeType":"YulExpressionStatement","src":"13209:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13250:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13261:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13246:3:201"},"nodeType":"YulFunctionCall","src":"13246:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"13266:2:201","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13239:6:201"},"nodeType":"YulFunctionCall","src":"13239:30:201"},"nodeType":"YulExpressionStatement","src":"13239:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13289:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13300:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13285:3:201"},"nodeType":"YulFunctionCall","src":"13285:18:201"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"13305:34:201","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13278:6:201"},"nodeType":"YulFunctionCall","src":"13278:62:201"},"nodeType":"YulExpressionStatement","src":"13278:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13360:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13371:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13356:3:201"},"nodeType":"YulFunctionCall","src":"13356:18:201"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"13376:16:201","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13349:6:201"},"nodeType":"YulFunctionCall","src":"13349:44:201"},"nodeType":"YulExpressionStatement","src":"13349:44:201"},{"nodeType":"YulAssignment","src":"13402:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13414:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13425:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13410:3:201"},"nodeType":"YulFunctionCall","src":"13410:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13402:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13176:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13190:4:201","type":""}],"src":"13025:410:201"},{"body":{"nodeType":"YulBlock","src":"13717:688:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13734:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13749:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13757:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13745:3:201"},"nodeType":"YulFunctionCall","src":"13745:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13727:6:201"},"nodeType":"YulFunctionCall","src":"13727:74:201"},"nodeType":"YulExpressionStatement","src":"13727:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13821:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13832:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13817:3:201"},"nodeType":"YulFunctionCall","src":"13817:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"13841:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13849:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13837:3:201"},"nodeType":"YulFunctionCall","src":"13837:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13810:6:201"},"nodeType":"YulFunctionCall","src":"13810:45:201"},"nodeType":"YulExpressionStatement","src":"13810:45:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13875:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13886:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13871:3:201"},"nodeType":"YulFunctionCall","src":"13871:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"13891:3:201","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13864:6:201"},"nodeType":"YulFunctionCall","src":"13864:31:201"},"nodeType":"YulExpressionStatement","src":"13864:31:201"},{"nodeType":"YulVariableDeclaration","src":"13904:60:201","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"13936:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13948:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13959:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13944:3:201"},"nodeType":"YulFunctionCall","src":"13944:19:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"13918:17:201"},"nodeType":"YulFunctionCall","src":"13918:46:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"13908:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13984:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13995:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13980:3:201"},"nodeType":"YulFunctionCall","src":"13980:18:201"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"14004:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"14012:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14000:3:201"},"nodeType":"YulFunctionCall","src":"14000:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13973:6:201"},"nodeType":"YulFunctionCall","src":"13973:50:201"},"nodeType":"YulExpressionStatement","src":"13973:50:201"},{"nodeType":"YulVariableDeclaration","src":"14032:47:201","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"14064:6:201"},{"name":"tail_1","nodeType":"YulIdentifier","src":"14072:6:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"14046:17:201"},"nodeType":"YulFunctionCall","src":"14046:33:201"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"14036:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14099:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14110:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14095:3:201"},"nodeType":"YulFunctionCall","src":"14095:19:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"14120:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"14128:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14116:3:201"},"nodeType":"YulFunctionCall","src":"14116:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14088:6:201"},"nodeType":"YulFunctionCall","src":"14088:51:201"},"nodeType":"YulExpressionStatement","src":"14088:51:201"},{"expression":{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"14155:6:201"},{"name":"value5","nodeType":"YulIdentifier","src":"14163:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14148:6:201"},"nodeType":"YulFunctionCall","src":"14148:22:201"},"nodeType":"YulExpressionStatement","src":"14148:22:201"},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"14196:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"14204:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14192:3:201"},"nodeType":"YulFunctionCall","src":"14192:15:201"},{"name":"value4","nodeType":"YulIdentifier","src":"14209:6:201"},{"name":"value5","nodeType":"YulIdentifier","src":"14217:6:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"14179:12:201"},"nodeType":"YulFunctionCall","src":"14179:45:201"},"nodeType":"YulExpressionStatement","src":"14179:45:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"14248:6:201"},{"name":"value5","nodeType":"YulIdentifier","src":"14256:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14244:3:201"},"nodeType":"YulFunctionCall","src":"14244:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"14265:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14240:3:201"},"nodeType":"YulFunctionCall","src":"14240:28:201"},{"kind":"number","nodeType":"YulLiteral","src":"14270:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14233:6:201"},"nodeType":"YulFunctionCall","src":"14233:39:201"},"nodeType":"YulExpressionStatement","src":"14233:39:201"},{"nodeType":"YulAssignment","src":"14281:118:201","value":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"14297:6:201"},{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"14313:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"14321:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14309:3:201"},"nodeType":"YulFunctionCall","src":"14309:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"14326:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14305:3:201"},"nodeType":"YulFunctionCall","src":"14305:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14293:3:201"},"nodeType":"YulFunctionCall","src":"14293:101:201"},{"kind":"number","nodeType":"YulLiteral","src":"14396:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14289:3:201"},"nodeType":"YulFunctionCall","src":"14289:110:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14281:4:201"}]}]},"name":"abi_encode_tuple_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13646:9:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"13657:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"13665:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13673:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13681:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13689:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13697:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13708:4:201","type":""}],"src":"13440:965:201"},{"body":{"nodeType":"YulBlock","src":"14491:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"14537:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14546:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14549:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14539:6:201"},"nodeType":"YulFunctionCall","src":"14539:12:201"},"nodeType":"YulExpressionStatement","src":"14539:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14512:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"14521:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14508:3:201"},"nodeType":"YulFunctionCall","src":"14508:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"14533:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14504:3:201"},"nodeType":"YulFunctionCall","src":"14504:32:201"},"nodeType":"YulIf","src":"14501:52:201"},{"nodeType":"YulVariableDeclaration","src":"14562:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14581:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14575:5:201"},"nodeType":"YulFunctionCall","src":"14575:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"14566:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14625:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"14600:24:201"},"nodeType":"YulFunctionCall","src":"14600:31:201"},"nodeType":"YulExpressionStatement","src":"14600:31:201"},{"nodeType":"YulAssignment","src":"14640:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"14650:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14640:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14457:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14468:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14480:6:201","type":""}],"src":"14410:251:201"},{"body":{"nodeType":"YulBlock","src":"14744:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"14790:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14799:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14802:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14792:6:201"},"nodeType":"YulFunctionCall","src":"14792:12:201"},"nodeType":"YulExpressionStatement","src":"14792:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"14765:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"14774:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14761:3:201"},"nodeType":"YulFunctionCall","src":"14761:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"14786:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"14757:3:201"},"nodeType":"YulFunctionCall","src":"14757:32:201"},"nodeType":"YulIf","src":"14754:52:201"},{"nodeType":"YulVariableDeclaration","src":"14815:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14834:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14828:5:201"},"nodeType":"YulFunctionCall","src":"14828:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"14819:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"14897:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14906:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14909:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14899:6:201"},"nodeType":"YulFunctionCall","src":"14899:12:201"},"nodeType":"YulExpressionStatement","src":"14899:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14866:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14887:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"14880:6:201"},"nodeType":"YulFunctionCall","src":"14880:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"14873:6:201"},"nodeType":"YulFunctionCall","src":"14873:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"14863:2:201"},"nodeType":"YulFunctionCall","src":"14863:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"14856:6:201"},"nodeType":"YulFunctionCall","src":"14856:40:201"},"nodeType":"YulIf","src":"14853:60:201"},{"nodeType":"YulAssignment","src":"14922:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"14932:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14922:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14710:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14721:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14733:6:201","type":""}],"src":"14666:277:201"},{"body":{"nodeType":"YulBlock","src":"15161:299:201","statements":[{"nodeType":"YulAssignment","src":"15171:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15183:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15194:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15179:3:201"},"nodeType":"YulFunctionCall","src":"15179:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15171:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15214:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"15225:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15207:6:201"},"nodeType":"YulFunctionCall","src":"15207:25:201"},"nodeType":"YulExpressionStatement","src":"15207:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15252:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15263:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15248:3:201"},"nodeType":"YulFunctionCall","src":"15248:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"15268:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15241:6:201"},"nodeType":"YulFunctionCall","src":"15241:34:201"},"nodeType":"YulExpressionStatement","src":"15241:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15295:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15306:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15291:3:201"},"nodeType":"YulFunctionCall","src":"15291:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"15311:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15284:6:201"},"nodeType":"YulFunctionCall","src":"15284:34:201"},"nodeType":"YulExpressionStatement","src":"15284:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15338:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15349:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15334:3:201"},"nodeType":"YulFunctionCall","src":"15334:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"15354:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15327:6:201"},"nodeType":"YulFunctionCall","src":"15327:34:201"},"nodeType":"YulExpressionStatement","src":"15327:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15381:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15392:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15377:3:201"},"nodeType":"YulFunctionCall","src":"15377:19:201"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"15402:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"15410:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15398:3:201"},"nodeType":"YulFunctionCall","src":"15398:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15370:6:201"},"nodeType":"YulFunctionCall","src":"15370:84:201"},"nodeType":"YulExpressionStatement","src":"15370:84:201"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15098:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"15109:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"15117:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15125:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15133:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15141:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15152:4:201","type":""}],"src":"14948:512:201"},{"body":{"nodeType":"YulBlock","src":"15639:229:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15656:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15667:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15649:6:201"},"nodeType":"YulFunctionCall","src":"15649:21:201"},"nodeType":"YulExpressionStatement","src":"15649:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15690:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15701:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15686:3:201"},"nodeType":"YulFunctionCall","src":"15686:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"15706:2:201","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15679:6:201"},"nodeType":"YulFunctionCall","src":"15679:30:201"},"nodeType":"YulExpressionStatement","src":"15679:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15729:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15740:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15725:3:201"},"nodeType":"YulFunctionCall","src":"15725:18:201"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"15745:34:201","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15718:6:201"},"nodeType":"YulFunctionCall","src":"15718:62:201"},"nodeType":"YulExpressionStatement","src":"15718:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15800:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15811:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15796:3:201"},"nodeType":"YulFunctionCall","src":"15796:18:201"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"15816:9:201","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15789:6:201"},"nodeType":"YulFunctionCall","src":"15789:37:201"},"nodeType":"YulExpressionStatement","src":"15789:37:201"},{"nodeType":"YulAssignment","src":"15835:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15847:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15858:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15843:3:201"},"nodeType":"YulFunctionCall","src":"15843:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15835:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15616:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15630:4:201","type":""}],"src":"15465:403:201"},{"body":{"nodeType":"YulBlock","src":"15921:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"15931:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"15941:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15935:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15984:21:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15999:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16002:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15995:3:201"},"nodeType":"YulFunctionCall","src":"15995:10:201"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15988:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16014:21:201","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"16029:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16032:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16025:3:201"},"nodeType":"YulFunctionCall","src":"16025:10:201"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"16018:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"16069:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"16071:16:201"},"nodeType":"YulFunctionCall","src":"16071:18:201"},"nodeType":"YulExpressionStatement","src":"16071:18:201"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16050:3:201"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"16059:2:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"16063:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16055:3:201"},"nodeType":"YulFunctionCall","src":"16055:12:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"16047:2:201"},"nodeType":"YulFunctionCall","src":"16047:21:201"},"nodeType":"YulIf","src":"16044:47:201"},{"nodeType":"YulAssignment","src":"16100:20:201","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16111:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"16116:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16107:3:201"},"nodeType":"YulFunctionCall","src":"16107:13:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"16100:3:201"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15904:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"15907:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"15913:3:201","type":""}],"src":"15873:253:201"},{"body":{"nodeType":"YulBlock","src":"16288:252:201","statements":[{"nodeType":"YulAssignment","src":"16298:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16310:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16321:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16306:3:201"},"nodeType":"YulFunctionCall","src":"16306:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16298:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16340:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"16355:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"16363:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16351:3:201"},"nodeType":"YulFunctionCall","src":"16351:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16333:6:201"},"nodeType":"YulFunctionCall","src":"16333:74:201"},"nodeType":"YulExpressionStatement","src":"16333:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16427:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16438:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16423:3:201"},"nodeType":"YulFunctionCall","src":"16423:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"16443:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16416:6:201"},"nodeType":"YulFunctionCall","src":"16416:34:201"},"nodeType":"YulExpressionStatement","src":"16416:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16470:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16481:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16466:3:201"},"nodeType":"YulFunctionCall","src":"16466:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"16490:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"16498:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16486:3:201"},"nodeType":"YulFunctionCall","src":"16486:47:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16459:6:201"},"nodeType":"YulFunctionCall","src":"16459:75:201"},"nodeType":"YulExpressionStatement","src":"16459:75:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16241:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"16252:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16260:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"16268:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16279:4:201","type":""}],"src":"16131:409:201"},{"body":{"nodeType":"YulBlock","src":"16594:197:201","statements":[{"nodeType":"YulVariableDeclaration","src":"16604:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"16614:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"16608:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16657:21:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"16672:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16675:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16668:3:201"},"nodeType":"YulFunctionCall","src":"16668:10:201"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"16661:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16687:21:201","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"16702:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16705:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16698:3:201"},"nodeType":"YulFunctionCall","src":"16698:10:201"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"16691:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"16733:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"16735:16:201"},"nodeType":"YulFunctionCall","src":"16735:18:201"},"nodeType":"YulExpressionStatement","src":"16735:18:201"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16723:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"16728:3:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16720:2:201"},"nodeType":"YulFunctionCall","src":"16720:12:201"},"nodeType":"YulIf","src":"16717:38:201"},{"nodeType":"YulAssignment","src":"16764:21:201","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"16776:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"16781:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16772:3:201"},"nodeType":"YulFunctionCall","src":"16772:13:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"16764:4:201"}]}]},"name":"checked_sub_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"16576:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"16579:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"16585:4:201","type":""}],"src":"16545:246:201"},{"body":{"nodeType":"YulBlock","src":"16828:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16845:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16848:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16838:6:201"},"nodeType":"YulFunctionCall","src":"16838:88:201"},"nodeType":"YulExpressionStatement","src":"16838:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16942:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"16945:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16935:6:201"},"nodeType":"YulFunctionCall","src":"16935:15:201"},"nodeType":"YulExpressionStatement","src":"16935:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16966:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16969:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16959:6:201"},"nodeType":"YulFunctionCall","src":"16959:15:201"},"nodeType":"YulExpressionStatement","src":"16959:15:201"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"16796:184:201"},{"body":{"nodeType":"YulBlock","src":"17037:176:201","statements":[{"body":{"nodeType":"YulBlock","src":"17156:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"17158:16:201"},"nodeType":"YulFunctionCall","src":"17158:18:201"},"nodeType":"YulExpressionStatement","src":"17158:18:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"17068:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17061:6:201"},"nodeType":"YulFunctionCall","src":"17061:9:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17054:6:201"},"nodeType":"YulFunctionCall","src":"17054:17:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"17076:1:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17083:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"17151:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"17079:3:201"},"nodeType":"YulFunctionCall","src":"17079:74:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"17073:2:201"},"nodeType":"YulFunctionCall","src":"17073:81:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17050:3:201"},"nodeType":"YulFunctionCall","src":"17050:105:201"},"nodeType":"YulIf","src":"17047:131:201"},{"nodeType":"YulAssignment","src":"17187:20:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"17202:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"17205:1:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"17198:3:201"},"nodeType":"YulFunctionCall","src":"17198:9:201"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"17187:7:201"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"17016:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"17019:1:201","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"17025:7:201","type":""}],"src":"16985:228:201"},{"body":{"nodeType":"YulBlock","src":"17264:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"17295:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17316:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17319:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17309:6:201"},"nodeType":"YulFunctionCall","src":"17309:88:201"},"nodeType":"YulExpressionStatement","src":"17309:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17417:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"17420:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17410:6:201"},"nodeType":"YulFunctionCall","src":"17410:15:201"},"nodeType":"YulExpressionStatement","src":"17410:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17445:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17448:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17438:6:201"},"nodeType":"YulFunctionCall","src":"17438:15:201"},"nodeType":"YulExpressionStatement","src":"17438:15:201"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"17284:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17277:6:201"},"nodeType":"YulFunctionCall","src":"17277:9:201"},"nodeType":"YulIf","src":"17274:189:201"},{"nodeType":"YulAssignment","src":"17472:14:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"17481:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"17484:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"17477:3:201"},"nodeType":"YulFunctionCall","src":"17477:9:201"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"17472:1:201"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"17249:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"17252:1:201","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"17258:1:201","type":""}],"src":"17218:274:201"}]},"contents":"{\n    { }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_contract$_IAaveIncentivesController_$3875__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint40__to_t_uint256_t_uint256_t_uint256_t_uint40__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, 0xffffffffff))\n    }\n    function abi_encode_tuple_t_uint40__to_t_uint40__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffff))\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_encode_tuple_t_bool_t_uint256_t_uint256__to_t_bool_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, iszero(iszero(value0)))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_string(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$4860t_addresst_contract$_IAaveIncentivesController_$3875t_uint8t_string_memory_ptrt_string_memory_ptrt_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := abi_decode_address(add(headStart, 64))\n        value3 := abi_decode_uint8(add(headStart, 96))\n        let offset := calldataload(add(headStart, 128))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        value4 := abi_decode_string(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 160))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value5 := abi_decode_string(add(headStart, offset_1), dataEnd)\n        let offset_2 := calldataload(add(headStart, 192))\n        if gt(offset_2, _1) { revert(0, 0) }\n        let value6_1, value7_1 := abi_decode_bytes_calldata(add(headStart, offset_2), dataEnd)\n        value6 := value6_1\n        value7 := value7_1\n    }\n    function abi_decode_tuple_t_contract$_IAaveIncentivesController_$3875(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, 0x1901000000000000000000000000000000000000000000000000000000000000)\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), 160)\n        let tail_1 := abi_encode_string(value2, add(headStart, 160))\n        mstore(add(headStart, 96), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string(value3, tail_1)\n        mstore(add(headStart, 128), sub(tail_2, headStart))\n        mstore(tail_2, value5)\n        calldatacopy(add(tail_2, 32), value4, value5)\n        mstore(add(add(tail_2, value5), 32), 0)\n        tail := add(add(tail_2, and(add(value5, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 32)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffff))\n    }\n    function checked_sub_t_uint128(x, y) -> diff\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"27744":[{"length":32,"start":2749}],"27926":[{"length":32,"start":6345}],"27929":[{"length":32,"start":773},{"length":32,"start":3141},{"length":32,"start":4420},{"length":32,"start":5794},{"length":32,"start":6141}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061020b5760003560e01c806390f6fcf21161012a578063c04a8a10116100bd578063e655dbd81161008c578063e78c9b3b11610071578063e78c9b3b146105b5578063f3bfc73814610611578063f731e9be1461063857600080fd5b8063e655dbd81461057f578063e74848901461059257600080fd5b8063c04a8a1014610503578063c222ec8a14610516578063c634dfaa14610529578063dd62ed3e1461057157600080fd5b8063a9059cbb116100f9578063a9059cbb1461022e578063b16a19de146104ad578063b3f1c93d146104cb578063b9a7b622146104fb57600080fd5b806390f6fcf21461046357806395d89b411461047d5780639dc29fac14610485578063a457c2d71461022e57600080fd5b80636bd76d24116101a25780637816037611610171578063781603761461036f57806379774338146103ab57806379ce6b8c146103da5780637ecebe001461042d57600080fd5b80636bd76d24146102a757806370a08231146102ed5780637535d2461461030057806375d264131461034c57600080fd5b806323b872dd116101de57806323b872dd1461027c578063313ce5671461028a5780633644e5151461029f578063395093511461022e57600080fd5b806306fdde0314610210578063095ea7b31461022e5780630b52d5581461025157806318160ddd14610266575b600080fd5b610218610640565b604051610225919061233c565b60405180910390f35b61024161023c36600461237f565b6106d2565b6040519015158152602001610225565b61026461025f3660046123bc565b610742565b005b61026e610a93565b604051908152602001610225565b61024161023c36600461242a565b603d5460405160ff9091168152602001610225565b61026e610ab9565b61026e6102b536600461246b565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260366020908152604080832093909416825291909152205490565b61026e6102fb3660046124a4565b610af2565b6103277f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610225565b603d54610100900473ffffffffffffffffffffffffffffffffffffffff16610327565b6102186040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6103b3610b9e565b6040805194855260208501939093529183015264ffffffffff166060820152608001610225565b6104176103e83660046124a4565b73ffffffffffffffffffffffffffffffffffffffff166000908152603e602052604090205464ffffffffff1690565b60405164ffffffffff9091168152602001610225565b61026e61043b3660046124a4565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205490565b603f546fffffffffffffffffffffffffffffffff1661026e565b610218610bfa565b61049861049336600461237f565b610c09565b60408051928352602083019190915201610225565b60375473ffffffffffffffffffffffffffffffffffffffff16610327565b6104de6104d93660046124c1565b611129565b604080519315158452602084019290925290820152606001610225565b61026e600181565b61026461051136600461237f565b6115ab565b610264610524366004612623565b6115ba565b61026e6105373660046124a4565b73ffffffffffffffffffffffffffffffffffffffff166000908152603860205260409020546fffffffffffffffffffffffffffffffff1690565b61026e61023c36600461246b565b61026461058d3660046124a4565b6118c5565b603f54700100000000000000000000000000000000900464ffffffffff16610417565b61026e6105c33660046124a4565b73ffffffffffffffffffffffffffffffffffffffff1660009081526038602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b61026e7f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa081565b610498611aa3565b6060603b805461064f906126f8565b80601f016020809104026020016040519081016040528092919081815260200182805461067b906126f8565b80156106c85780601f1061069d576101008083540402835291602001916106c8565b820191906000526020600020905b8154815290600101906020018083116106ab57829003601f168201915b5050505050905090565b604080518082018252600281527f3830000000000000000000000000000000000000000000000000000000000000602082015290517f08c379a00000000000000000000000000000000000000000000000000000000081526000916107399160040161233c565b60405180910390fd5b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff88166107c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b50834211156040518060400160405280600281526020017f373800000000000000000000000000000000000000000000000000000000000081525090610837576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b5073ffffffffffffffffffffffffffffffffffffffff871660009081526034602052604081205490610867610ab9565b604080517f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa0602082015273ffffffffffffffffffffffffffffffffffffffff8b1691810191909152606081018990526080810184905260a0810188905260c0016040516020818303038152906040528051906020012060405160200161091f9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa1580156109a5573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f373900000000000000000000000000000000000000000000000000000000000081525090610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b50610a5782600161277b565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260346020526040902055610a88898989611ace565b505050505050505050565b603f54600090610ab4906fffffffffffffffffffffffffffffffff16611b45565b905090565b60007f0000000000000000000000000000000000000000000000000000000000000000461415610aea575060355490565b610ab4611b94565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603860205260408120546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041681610b51575060009392505050565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603e6020526040812054610b8990839064ffffffffff16611c59565b9050610b958382611c6d565b95945050505050565b603f546000908190819081906fffffffffffffffffffffffffffffffff16610bc5603a5490565b610bce82611b45565b603f549197909650919450700100000000000000000000000000000000900464ffffffffff1692509050565b6060603c805461064f906126f8565b60408051808201909152600281527f323300000000000000000000000000000000000000000000000000000000000060208201526000908190337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b50600080610cbf86611cc4565b92509250506000610cce610a93565b73ffffffffffffffffffffffffffffffffffffffff881660009081526038602052604081205491925090819070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16888411610d5957603f80547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690556000603a55610e53565b610d638985612793565b603a81905591506000610d93610d7886611d49565b603f546fffffffffffffffffffffffffffffffff1690611c6d565b90506000610daa610da38c611d49565b8490611c6d565b9050818110610de957603f80547fffffffffffffffffffffffffffffffff000000000000000000000000000000001690556000603a8190559450610e50565b610e0d610e08610df886611d49565b610e028486612793565b90611d64565b611da3565b603f80547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216918217905594505b50505b85891415610ecb5773ffffffffffffffffffffffffffffffffffffffff8a16600090815260386020908152604080832080546fffffffffffffffffffffffffffffffff169055603e909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000169055610f20565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603e6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff161790555b603f80547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004264ffffffffff160217905588851115611049576000610f788a87612793565b9050610f858b8287611e49565b60405181815273ffffffffffffffffffffffffffffffffffffffff8c16906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101899052908101879052606081018390526080810185905260a0810184905273ffffffffffffffffffffffffffffffffffffffff8c169081907fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f9060c00160405180910390a350611119565b6000611055868b612793565b90506110628b8287611fba565b60405181815260009073ffffffffffffffffffffffffffffffffffffffff8d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36040805182815260208101899052908101879052606081018590526080810184905273ffffffffffffffffffffffffffffffffffffffff8c16907f44bd20a79e993bdcc7cbedf54a3b4d19fb78490124b6b90d04fe3242eea579e89060a00160405180910390a2505b50955093505050505b9250929050565b6000808073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f3233000000000000000000000000000000000000000000000000000000000000815250906111ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b506112246040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146112625761126287898861200a565b60008061126e89611cc4565b925092505061127b610a93565b808452603f546fffffffffffffffffffffffffffffffff1660a08501526112a390899061277b565b603a81905560208401526112b688611d49565b60408481019190915273ffffffffffffffffffffffffffffffffffffffff8a1660009081526038602052205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16606084015261135261132261131d8a8561277b565b611d49565b6040850151611331908a611c6d565b61134861133d86611d49565b606088015190611c6d565b610e02919061277b565b6080840181905261136290611da3565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260386020908152604080832080546fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000969091168602179055603e825290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff16908117909155603f80547fffffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffff16919093021790915583015161146190610e089061143690611d49565b6040860151611446908b90611c6d565b6113486114568860000151611d49565b60a089015190611c6d565b603f80547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216918217905560a084015260006114b2828a61277b565b90506114c38a828660000151611e49565b60405181815273ffffffffffffffffffffffffffffffffffffffff8b16906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360808085015160a080870151602080890151604080518881529283018a9052820188905260608201949094529384015282015273ffffffffffffffffffffffffffffffffffffffff808c1691908d16907fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f9060c00160405180910390a35050602082015160a0909201519015999198509650945050505050565b6115b6338383611ace565b5050565b6001805460ff16806115cb5750303b155b806115d7575060005481115b611663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610739565b60015460ff161580156116a057600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f38370000000000000000000000000000000000000000000000000000000000008152509061175d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b50611767866120ca565b611770856120dd565b603d80546037805473ffffffffffffffffffffffffffffffffffffffff8d81167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179091558a16610100027fffffffffffffffffffffff00000000000000000000000000000000000000000090911660ff8a16171790556117f5611b94565b6035819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f40251fbfb6656cfa65a00d7879029fec1fad21d28fdcff2f4f68f52795b74f2c8a8a8a8a8a8a604051611882969594939291906127aa565b60405180910390a380156118b957600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa158015611932573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611956919061284a565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa1580156119c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e79190612867565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090611a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610739919061233c565b5050603d805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b603f5460009081906fffffffffffffffffffffffffffffffff16611ac681611b45565b939092509050565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526036602090815260408083208786168085529083529281902086905560375490518681529416939192917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1910160405180910390a4505050565b600080611b51603a5490565b905080611b615750600092915050565b6000611b8084603f60109054906101000a900464ffffffffff16611c59565b9050611b8c8282611c6d565b949350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611bbf6120f0565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000611c668383426120fa565b9392505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff83900484111517611ca257600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b600080600080611d088573ffffffffffffffffffffffffffffffffffffffff166000908152603860205260409020546fffffffffffffffffffffffffffffffff1690565b905080611d2057600080600093509350935050611d42565b6000611d2b86610af2565b90508181611d398282612793565b94509450945050505b9193909250565b633b9aca008181029081048214611d5f57600080fd5b919050565b600081156b033b2e3c9fd0803ce800000060028404190484111715611d8857600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b60006fffffffffffffffffffffffffffffffff821115611e45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610739565b5090565b6000611e5483611da3565b73ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260409020549091506fffffffffffffffffffffffffffffffff16611e998282612889565b73ffffffffffffffffffffffffffffffffffffffff868116600090815260386020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9390931692909217909155603d5461010090041615611fb357603d546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018690526fffffffffffffffffffffffffffffffff84166044830152610100909204909116906331873e2e90606401600060405180830381600087803b158015611f9f57600080fd5b505af1158015610a88573d6000803e3d6000fd5b5050505050565b6000611fc583611da3565b73ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260409020549091506fffffffffffffffffffffffffffffffff16611e9982826128bd565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260366020908152604080832093861683529290529081205461204a908390612793565b73ffffffffffffffffffffffffffffffffffffffff808616600081815260366020908152604080832089861680855292529182902085905560375491519495509216927fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1906120bc9086815260200190565b60405180910390a450505050565b80516115b690603b906020840190612241565b80516115b690603c906020840190612241565b6060610ab4610640565b60008061210e64ffffffffff851684612793565b90508061212a576b033b2e3c9fd0803ce8000000915050611c66565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016000808060028511612160576000612165565b600285035b925066038882915c40006121798a80611c6d565b81612186576121866128ee565b0491506301e13380612198838b611c6d565b816121a5576121a56128ee565b0490506000826121b5868861291d565b6121bf919061291d565b600290049050600082856121d3888a61291d565b6121dd919061291d565b6121e7919061291d565b60069004905080826301e133806121fe8a8f61291d565b612208919061295a565b61221e906b033b2e3c9fd0803ce800000061277b565b612228919061277b565b612232919061277b565b9b9a5050505050505050505050565b82805461224d906126f8565b90600052602060002090601f01602090048101928261226f57600085556122b5565b82601f1061228857805160ff19168380011785556122b5565b828001600101855582156122b5579182015b828111156122b557825182559160200191906001019061229a565b50611e459291505b80821115611e4557600081556001016122bd565b6000815180845260005b818110156122f7576020818501810151868301820152016122db565b81811115612309576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611c6660208301846122d1565b73ffffffffffffffffffffffffffffffffffffffff8116811461237157600080fd5b50565b8035611d5f8161234f565b6000806040838503121561239257600080fd5b823561239d8161234f565b946020939093013593505050565b803560ff81168114611d5f57600080fd5b600080600080600080600060e0888a0312156123d757600080fd5b87356123e28161234f565b965060208801356123f28161234f565b9550604088013594506060880135935061240e608089016123ab565b925060a0880135915060c0880135905092959891949750929550565b60008060006060848603121561243f57600080fd5b833561244a8161234f565b9250602084013561245a8161234f565b929592945050506040919091013590565b6000806040838503121561247e57600080fd5b82356124898161234f565b915060208301356124998161234f565b809150509250929050565b6000602082840312156124b657600080fd5b8135611c668161234f565b600080600080608085870312156124d757600080fd5b84356124e28161234f565b935060208501356124f28161234f565b93969395505050506040820135916060013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261254757600080fd5b813567ffffffffffffffff8082111561256257612562612507565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156125a8576125a8612507565b816040528381528660208588010111156125c157600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008083601f8401126125f357600080fd5b50813567ffffffffffffffff81111561260b57600080fd5b60208301915083602082850101111561112257600080fd5b60008060008060008060008060e0898b03121561263f57600080fd5b883561264a8161234f565b9750602089013561265a8161234f565b965061266860408a01612374565b955061267660608a016123ab565b9450608089013567ffffffffffffffff8082111561269357600080fd5b61269f8c838d01612536565b955060a08b01359150808211156126b557600080fd5b6126c18c838d01612536565b945060c08b01359150808211156126d757600080fd5b506126e48b828c016125e1565b999c989b5096995094979396929594505050565b600181811c9082168061270c57607f821691505b60208210811415612746577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561278e5761278e61274c565b500190565b6000828210156127a5576127a561274c565b500390565b73ffffffffffffffffffffffffffffffffffffffff8716815260ff8616602082015260a0604082015260006127e260a08301876122d1565b82810360608401526127f481876122d1565b905082810360808401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050979650505050505050565b60006020828403121561285c57600080fd5b8151611c668161234f565b60006020828403121561287957600080fd5b81518015158114611c6657600080fd5b60006fffffffffffffffffffffffffffffffff8083168185168083038211156128b4576128b461274c565b01949350505050565b60006fffffffffffffffffffffffffffffffff838116908316818110156128e6576128e661274c565b039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156129555761295561274c565b500290565b600082612990577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220c2d6bd735bf076ca6d0fedf2150af4ea0e2f14eeed887b3fba7f3a62e0639ff164736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x20B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x90F6FCF2 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xC04A8A10 GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xE655DBD8 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xE78C9B3B GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE78C9B3B EQ PUSH2 0x5B5 JUMPI DUP1 PUSH4 0xF3BFC738 EQ PUSH2 0x611 JUMPI DUP1 PUSH4 0xF731E9BE EQ PUSH2 0x638 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x57F JUMPI DUP1 PUSH4 0xE7484890 EQ PUSH2 0x592 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC04A8A10 EQ PUSH2 0x503 JUMPI DUP1 PUSH4 0xC222EC8A EQ PUSH2 0x516 JUMPI DUP1 PUSH4 0xC634DFAA EQ PUSH2 0x529 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x571 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA9059CBB GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x4AD JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x4CB JUMPI DUP1 PUSH4 0xB9A7B622 EQ PUSH2 0x4FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x90F6FCF2 EQ PUSH2 0x463 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x47D JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x485 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6BD76D24 GT PUSH2 0x1A2 JUMPI DUP1 PUSH4 0x78160376 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x36F JUMPI DUP1 PUSH4 0x79774338 EQ PUSH2 0x3AB JUMPI DUP1 PUSH4 0x79CE6B8C EQ PUSH2 0x3DA JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x42D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6BD76D24 EQ PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x2ED JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x300 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x34C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0x1DE JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x27C JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x28A JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x29F JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x210 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0xB52D558 EQ PUSH2 0x251 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x266 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x218 PUSH2 0x640 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x225 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x241 PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x237F JUMP JUMPDEST PUSH2 0x6D2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x264 PUSH2 0x25F CALLDATASIZE PUSH1 0x4 PUSH2 0x23BC JUMP JUMPDEST PUSH2 0x742 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x26E PUSH2 0xA93 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x241 PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x242A JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x26E PUSH2 0xAB9 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x2B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x246B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x2FB CALLDATASIZE PUSH1 0x4 PUSH2 0x24A4 JUMP JUMPDEST PUSH2 0xAF2 JUMP JUMPDEST PUSH2 0x327 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x327 JUMP JUMPDEST PUSH2 0x218 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0xB9E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP4 ADD MSTORE PUSH5 0xFFFFFFFFFF AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x417 PUSH2 0x3E8 CALLDATASIZE PUSH1 0x4 PUSH2 0x24A4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3E PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH5 0xFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH5 0xFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x43B CALLDATASIZE PUSH1 0x4 PUSH2 0x24A4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x26E JUMP JUMPDEST PUSH2 0x218 PUSH2 0xBFA JUMP JUMPDEST PUSH2 0x498 PUSH2 0x493 CALLDATASIZE PUSH1 0x4 PUSH2 0x237F JUMP JUMPDEST PUSH2 0xC09 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x225 JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x327 JUMP JUMPDEST PUSH2 0x4DE PUSH2 0x4D9 CALLDATASIZE PUSH1 0x4 PUSH2 0x24C1 JUMP JUMPDEST PUSH2 0x1129 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE PUSH1 0x60 ADD PUSH2 0x225 JUMP JUMPDEST PUSH2 0x26E PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH2 0x264 PUSH2 0x511 CALLDATASIZE PUSH1 0x4 PUSH2 0x237F JUMP JUMPDEST PUSH2 0x15AB JUMP JUMPDEST PUSH2 0x264 PUSH2 0x524 CALLDATASIZE PUSH1 0x4 PUSH2 0x2623 JUMP JUMPDEST PUSH2 0x15BA JUMP JUMPDEST PUSH2 0x26E PUSH2 0x537 CALLDATASIZE PUSH1 0x4 PUSH2 0x24A4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x23C CALLDATASIZE PUSH1 0x4 PUSH2 0x246B JUMP JUMPDEST PUSH2 0x264 PUSH2 0x58D CALLDATASIZE PUSH1 0x4 PUSH2 0x24A4 JUMP JUMPDEST PUSH2 0x18C5 JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x417 JUMP JUMPDEST PUSH2 0x26E PUSH2 0x5C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x24A4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x26E PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 DUP2 JUMP JUMPDEST PUSH2 0x498 PUSH2 0x1AA3 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3B DUP1 SLOAD PUSH2 0x64F SWAP1 PUSH2 0x26F8 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x67B SWAP1 PUSH2 0x26F8 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x6C8 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x69D JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x6C8 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 0x6AB JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3830000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x739 SWAP2 PUSH1 0x4 ADD PUSH2 0x233C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x7C4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x837 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x867 PUSH2 0xAB9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x91F SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xA4B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP PUSH2 0xA57 DUP3 PUSH1 0x1 PUSH2 0x277B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0xA88 DUP10 DUP10 DUP10 PUSH2 0x1ACE JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0x0 SWAP1 PUSH2 0xAB4 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1B45 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0xAEA JUMPI POP PUSH1 0x35 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xAB4 PUSH2 0x1B94 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND DUP2 PUSH2 0xB51 JUMPI POP PUSH1 0x0 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3E PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xB89 SWAP1 DUP4 SWAP1 PUSH5 0xFFFFFFFFFF AND PUSH2 0x1C59 JUMP JUMPDEST SWAP1 POP PUSH2 0xB95 DUP4 DUP3 PUSH2 0x1C6D JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 SWAP1 DUP2 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xBC5 PUSH1 0x3A SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xBCE DUP3 PUSH2 0x1B45 JUMP JUMPDEST PUSH1 0x3F SLOAD SWAP2 SWAP8 SWAP1 SWAP7 POP SWAP2 SWAP5 POP PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH5 0xFFFFFFFFFF AND SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3C DUP1 SLOAD PUSH2 0x64F SWAP1 PUSH2 0x26F8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCB2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP PUSH1 0x0 DUP1 PUSH2 0xCBF DUP7 PUSH2 0x1CC4 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP PUSH1 0x0 PUSH2 0xCCE PUSH2 0xA93 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 SWAP3 POP SWAP1 DUP2 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 DUP5 GT PUSH2 0xD59 JUMPI PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x0 PUSH1 0x3A SSTORE PUSH2 0xE53 JUMP JUMPDEST PUSH2 0xD63 DUP10 DUP6 PUSH2 0x2793 JUMP JUMPDEST PUSH1 0x3A DUP2 SWAP1 SSTORE SWAP2 POP PUSH1 0x0 PUSH2 0xD93 PUSH2 0xD78 DUP7 PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0x1C6D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xDAA PUSH2 0xDA3 DUP13 PUSH2 0x1D49 JUMP JUMPDEST DUP5 SWAP1 PUSH2 0x1C6D JUMP JUMPDEST SWAP1 POP DUP2 DUP2 LT PUSH2 0xDE9 JUMPI PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x0 PUSH1 0x3A DUP2 SWAP1 SSTORE SWAP5 POP PUSH2 0xE50 JUMP JUMPDEST PUSH2 0xE0D PUSH2 0xE08 PUSH2 0xDF8 DUP7 PUSH2 0x1D49 JUMP JUMPDEST PUSH2 0xE02 DUP5 DUP7 PUSH2 0x2793 JUMP JUMPDEST SWAP1 PUSH2 0x1D64 JUMP JUMPDEST PUSH2 0x1DA3 JUMP JUMPDEST PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 DUP3 OR SWAP1 SSTORE SWAP5 POP JUMPDEST POP POP JUMPDEST DUP6 DUP10 EQ ISZERO PUSH2 0xECB JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 SSTORE PUSH1 0x3E SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 AND SWAP1 SSTORE PUSH2 0xF20 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3E PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 AND TIMESTAMP PUSH5 0xFFFFFFFFFF AND OR SWAP1 SSTORE JUMPDEST PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH17 0x100000000000000000000000000000000 TIMESTAMP PUSH5 0xFFFFFFFFFF AND MUL OR SWAP1 SSTORE DUP9 DUP6 GT ISZERO PUSH2 0x1049 JUMPI PUSH1 0x0 PUSH2 0xF78 DUP11 DUP8 PUSH2 0x2793 JUMP JUMPDEST SWAP1 POP PUSH2 0xF85 DUP12 DUP3 DUP8 PUSH2 0x1E49 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP10 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 DUP2 SWAP1 PUSH32 0xC16F4E4CA34D790DE4C656C72FD015C667D688F20BE64EEA360618545C4C530F SWAP1 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x1119 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1055 DUP7 DUP12 PUSH2 0x2793 JUMP JUMPDEST SWAP1 POP PUSH2 0x1062 DUP12 DUP3 DUP8 PUSH2 0x1FBA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP10 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND SWAP1 PUSH32 0x44BD20A79E993BDCC7CBEDF54A3B4D19FB78490124B6B90D04FE3242EEA579E8 SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMPDEST POP SWAP6 POP SWAP4 POP POP POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x11EA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP PUSH2 0x1224 PUSH1 0x40 MLOAD DUP1 PUSH1 0xC0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1262 JUMPI PUSH2 0x1262 DUP8 DUP10 DUP9 PUSH2 0x200A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x126E DUP10 PUSH2 0x1CC4 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP PUSH2 0x127B PUSH2 0xA93 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x3F SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x12A3 SWAP1 DUP10 SWAP1 PUSH2 0x277B JUMP JUMPDEST PUSH1 0x3A DUP2 SWAP1 SSTORE PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x12B6 DUP9 PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0x40 DUP5 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x1352 PUSH2 0x1322 PUSH2 0x131D DUP11 DUP6 PUSH2 0x277B JUMP JUMPDEST PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD PUSH2 0x1331 SWAP1 DUP11 PUSH2 0x1C6D JUMP JUMPDEST PUSH2 0x1348 PUSH2 0x133D DUP7 PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0x60 DUP9 ADD MLOAD SWAP1 PUSH2 0x1C6D JUMP JUMPDEST PUSH2 0xE02 SWAP2 SWAP1 PUSH2 0x277B JUMP JUMPDEST PUSH1 0x80 DUP5 ADD DUP2 SWAP1 MSTORE PUSH2 0x1362 SWAP1 PUSH2 0x1DA3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH17 0x100000000000000000000000000000000 SWAP7 SWAP1 SWAP2 AND DUP7 MUL OR SWAP1 SSTORE PUSH1 0x3E DUP3 MSTORE SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 AND TIMESTAMP PUSH5 0xFFFFFFFFFF AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 SWAP1 SWAP4 MUL OR SWAP1 SWAP2 SSTORE DUP4 ADD MLOAD PUSH2 0x1461 SWAP1 PUSH2 0xE08 SWAP1 PUSH2 0x1436 SWAP1 PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD PUSH2 0x1446 SWAP1 DUP12 SWAP1 PUSH2 0x1C6D JUMP JUMPDEST PUSH2 0x1348 PUSH2 0x1456 DUP9 PUSH1 0x0 ADD MLOAD PUSH2 0x1D49 JUMP JUMPDEST PUSH1 0xA0 DUP10 ADD MLOAD SWAP1 PUSH2 0x1C6D JUMP JUMPDEST PUSH1 0x3F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 DUP3 OR SWAP1 SSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x0 PUSH2 0x14B2 DUP3 DUP11 PUSH2 0x277B JUMP JUMPDEST SWAP1 POP PUSH2 0x14C3 DUP11 DUP3 DUP7 PUSH1 0x0 ADD MLOAD PUSH2 0x1E49 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x80 DUP1 DUP6 ADD MLOAD PUSH1 0xA0 DUP1 DUP8 ADD MLOAD PUSH1 0x20 DUP1 DUP10 ADD MLOAD PUSH1 0x40 DUP1 MLOAD DUP9 DUP2 MSTORE SWAP3 DUP4 ADD DUP11 SWAP1 MSTORE DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE SWAP4 DUP5 ADD MSTORE DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP13 AND SWAP2 SWAP1 DUP14 AND SWAP1 PUSH32 0xC16F4E4CA34D790DE4C656C72FD015C667D688F20BE64EEA360618545C4C530F SWAP1 PUSH1 0xC0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0xA0 SWAP1 SWAP3 ADD MLOAD SWAP1 ISZERO SWAP10 SWAP2 SWAP9 POP SWAP7 POP SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x15B6 CALLER DUP4 DUP4 PUSH2 0x1ACE JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x15CB JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x15D7 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x1663 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x739 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x16A0 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x175D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP PUSH2 0x1767 DUP7 PUSH2 0x20CA JUMP JUMPDEST PUSH2 0x1770 DUP6 PUSH2 0x20DD JUMP JUMPDEST PUSH1 0x3D DUP1 SLOAD PUSH1 0x37 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE DUP11 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH1 0xFF DUP11 AND OR OR SWAP1 SSTORE PUSH2 0x17F5 PUSH2 0x1B94 JUMP JUMPDEST PUSH1 0x35 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x40251FBFB6656CFA65A00D7879029FEC1FAD21D28FDCFF2F4F68F52795B74F2C DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH1 0x40 MLOAD PUSH2 0x1882 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x27AA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0x18B9 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1932 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1956 SWAP2 SWAP1 PUSH2 0x284A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x19C3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19E7 SWAP2 SWAP1 PUSH2 0x2867 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x1A55 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x739 SWAP2 SWAP1 PUSH2 0x233C JUMP JUMPDEST POP POP PUSH1 0x3D DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3F SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1AC6 DUP2 PUSH2 0x1B45 JUMP JUMPDEST SWAP4 SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP7 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP7 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP1 MLOAD DUP7 DUP2 MSTORE SWAP5 AND SWAP4 SWAP2 SWAP3 SWAP2 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1B51 PUSH1 0x3A SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1B61 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B80 DUP5 PUSH1 0x3F PUSH1 0x10 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH5 0xFFFFFFFFFF AND PUSH2 0x1C59 JUMP JUMPDEST SWAP1 POP PUSH2 0x1B8C DUP3 DUP3 PUSH2 0x1C6D JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x1BBF PUSH2 0x20F0 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C66 DUP4 DUP4 TIMESTAMP PUSH2 0x20FA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1CA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x1D08 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x1D20 JUMPI PUSH1 0x0 DUP1 PUSH1 0x0 SWAP4 POP SWAP4 POP SWAP4 POP POP PUSH2 0x1D42 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D2B DUP7 PUSH2 0xAF2 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 PUSH2 0x1D39 DUP3 DUP3 PUSH2 0x2793 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP POP POP JUMPDEST SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH4 0x3B9ACA00 DUP2 DUP2 MUL SWAP1 DUP2 DIV DUP3 EQ PUSH2 0x1D5F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1D88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1E45 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x739 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E54 DUP4 PUSH2 0x1DA3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E99 DUP3 DUP3 PUSH2 0x2889 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV AND ISZERO PUSH2 0x1FB3 JUMPI PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP7 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH2 0x100 SWAP1 SWAP3 DIV SWAP1 SWAP2 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA88 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1FC5 DUP4 PUSH2 0x1DA3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1E99 DUP3 DUP3 PUSH2 0x28BD JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x204A SWAP1 DUP4 SWAP1 PUSH2 0x2793 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP7 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP2 MLOAD SWAP5 SWAP6 POP SWAP3 AND SWAP3 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP1 PUSH2 0x20BC SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x15B6 SWAP1 PUSH1 0x3B SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2241 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x15B6 SWAP1 PUSH1 0x3C SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x2241 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xAB4 PUSH2 0x640 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x210E PUSH5 0xFFFFFFFFFF DUP6 AND DUP5 PUSH2 0x2793 JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0x212A JUMPI PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 POP POP PUSH2 0x1C66 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD PUSH1 0x0 DUP1 DUP1 PUSH1 0x2 DUP6 GT PUSH2 0x2160 JUMPI PUSH1 0x0 PUSH2 0x2165 JUMP JUMPDEST PUSH1 0x2 DUP6 SUB JUMPDEST SWAP3 POP PUSH7 0x38882915C4000 PUSH2 0x2179 DUP11 DUP1 PUSH2 0x1C6D JUMP JUMPDEST DUP2 PUSH2 0x2186 JUMPI PUSH2 0x2186 PUSH2 0x28EE JUMP JUMPDEST DIV SWAP2 POP PUSH4 0x1E13380 PUSH2 0x2198 DUP4 DUP12 PUSH2 0x1C6D JUMP JUMPDEST DUP2 PUSH2 0x21A5 JUMPI PUSH2 0x21A5 PUSH2 0x28EE JUMP JUMPDEST DIV SWAP1 POP PUSH1 0x0 DUP3 PUSH2 0x21B5 DUP7 DUP9 PUSH2 0x291D JUMP JUMPDEST PUSH2 0x21BF SWAP2 SWAP1 PUSH2 0x291D JUMP JUMPDEST PUSH1 0x2 SWAP1 DIV SWAP1 POP PUSH1 0x0 DUP3 DUP6 PUSH2 0x21D3 DUP9 DUP11 PUSH2 0x291D JUMP JUMPDEST PUSH2 0x21DD SWAP2 SWAP1 PUSH2 0x291D JUMP JUMPDEST PUSH2 0x21E7 SWAP2 SWAP1 PUSH2 0x291D JUMP JUMPDEST PUSH1 0x6 SWAP1 DIV SWAP1 POP DUP1 DUP3 PUSH4 0x1E13380 PUSH2 0x21FE DUP11 DUP16 PUSH2 0x291D JUMP JUMPDEST PUSH2 0x2208 SWAP2 SWAP1 PUSH2 0x295A JUMP JUMPDEST PUSH2 0x221E SWAP1 PUSH12 0x33B2E3C9FD0803CE8000000 PUSH2 0x277B JUMP JUMPDEST PUSH2 0x2228 SWAP2 SWAP1 PUSH2 0x277B JUMP JUMPDEST PUSH2 0x2232 SWAP2 SWAP1 PUSH2 0x277B JUMP JUMPDEST SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x224D SWAP1 PUSH2 0x26F8 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x226F JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x22B5 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x2288 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x22B5 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x22B5 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x22B5 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x229A JUMP JUMPDEST POP PUSH2 0x1E45 SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1E45 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x22BD JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x22F7 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x22DB JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x2309 JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1C66 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x22D1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2371 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1D5F DUP2 PUSH2 0x234F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2392 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x239D DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1D5F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x23D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x23E2 DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x23F2 DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x240E PUSH1 0x80 DUP10 ADD PUSH2 0x23AB JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x243F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x244A DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x245A DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x247E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2489 DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x2499 DUP2 PUSH2 0x234F JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x24B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1C66 DUP2 PUSH2 0x234F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x24D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x24E2 DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x24F2 DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2547 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2562 JUMPI PUSH2 0x2562 PUSH2 0x2507 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x25A8 JUMPI PUSH2 0x25A8 PUSH2 0x2507 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x25C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x25F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x260B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x1122 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xE0 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x263F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x264A DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x265A DUP2 PUSH2 0x234F JUMP JUMPDEST SWAP7 POP PUSH2 0x2668 PUSH1 0x40 DUP11 ADD PUSH2 0x2374 JUMP JUMPDEST SWAP6 POP PUSH2 0x2676 PUSH1 0x60 DUP11 ADD PUSH2 0x23AB JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2693 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x269F DUP13 DUP4 DUP14 ADD PUSH2 0x2536 JUMP JUMPDEST SWAP6 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x26C1 DUP13 DUP4 DUP14 ADD PUSH2 0x2536 JUMP JUMPDEST SWAP5 POP PUSH1 0xC0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x26D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26E4 DUP12 DUP3 DUP13 ADD PUSH2 0x25E1 JUMP JUMPDEST SWAP10 SWAP13 SWAP9 SWAP12 POP SWAP7 SWAP10 POP SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x270C JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x2746 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x278E JUMPI PUSH2 0x278E PUSH2 0x274C JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x27A5 JUMPI PUSH2 0x27A5 PUSH2 0x274C JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP2 MSTORE PUSH1 0xFF DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x27E2 PUSH1 0xA0 DUP4 ADD DUP8 PUSH2 0x22D1 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x27F4 DUP2 DUP8 PUSH2 0x22D1 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE DUP4 DUP2 MSTORE DUP4 DUP6 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND DUP3 ADD ADD SWAP2 POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x285C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1C66 DUP2 PUSH2 0x234F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2879 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1C66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x28B4 JUMPI PUSH2 0x28B4 PUSH2 0x274C JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x28E6 JUMPI PUSH2 0x28E6 PUSH2 0x274C JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2955 JUMPI PUSH2 0x2955 PUSH2 0x274C JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2990 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC2 0xD6 0xBD PUSH20 0x5BF076CA6D0FEDF2150AF4EA0E2F14EEED887B3F 0xBA PUSH32 0x3A62E0639FF164736F6C634300080A0033000000000000000000000000000000 ","sourceMap":"1216:11978:99:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84:103;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12646:125:99;;;;;;:::i;:::-;;:::i;:::-;;;1558:14:201;;1551:22;1533:41;;1521:2;1506:18;12646:125:99;1393:187:201;1424:823:101;;;;;;:::i;:::-;;:::i;:::-;;9656:120:99;;;:::i;:::-;;;2631:25:201;;;2619:2;2604:18;9656:120:99;2485:177:201;12775:139:99;;;;;;:::i;3178:86:103:-;3250:9;;3178:86;;3250:9;;;;3270:36:201;;3258:2;3243:18;3178:86:103;3128:184:201;867:185:102;;;:::i;2292:165:101:-;;;;;;:::i;:::-;2417:27;;;;2395:7;2417:27;;;:17;:27;;;;;;;;:35;;;;;;;;;;;;;2292:165;3477:433:99;;;;;;:::i;:::-;;:::i;2408:27:103:-;;;;;;;;4334:42:201;4322:55;;;4304:74;;4292:2;4277:18;2408:27:103;4144:240:201;3691:132:103;3797:21;;;;;;;3691:132;;192:50:102;;232:10;;;;;;;;;;;;;;;;;192:50;;9182:228:99;;;:::i;:::-;;;;5106:25:201;;;5162:2;5147:18;;5140:34;;;;5190:18;;;5183:34;5265:12;5253:25;5248:2;5233:18;;5226:53;5093:3;5078:19;9182:228:99;4877:408:201;3145:125:99;;;;;;:::i;:::-;3248:17;;3227:6;3248:17;;;:11;:17;;;;;;;;;3145:125;;;;5464:12:201;5452:25;;;5434:44;;5422:2;5407:18;3145:125:99;5290:194:201;1260:101:102;;;;;;:::i;:::-;1342:14;;1320:7;1342:14;;;:7;:14;;;;;;;1260:101;2993:113:99;3087:14;;;;2993:113;;3051:90:103;;;:::i;5927:2487:99:-;;;;;;:::i;:::-;;:::i;:::-;;;;5663:25:201;;;5719:2;5704:18;;5697:34;;;;5636:18;5927:2487:99;5489:248:201;10139:111:99;10229:16;;;;10139:111;;4149:1739;;;;;;:::i;:::-;;:::i;:::-;;;;6724:14:201;;6717:22;6699:41;;6771:2;6756:18;;6749:34;;;;6799:18;;;6792:34;6687:2;6672:18;4149:1739:99;6503:329:201;1362:49:99;;1408:3;1362:49;;1237:142:101;;;;;;:::i;:::-;;:::i;1997:803:99:-;;;;;;:::i;:::-;;:::i;9970:130::-;;;;;;:::i;:::-;3518:19:103;;10052:7:99;3518:19:103;;;:10;:19;;;;;:27;;;;9970:130:99;12507:135;;;;;;:::i;3938:139:103:-;;;;;;:::i;:::-;;:::i;9815:116:99:-;9905:21;;;;;;;9815:116;;3309:139;;;;;;:::i;:::-;3412:16;;3390:7;3412:16;;;:10;:16;;;;;:31;;;;;;;3309:139;897:153:101;;956:94;897:153;;9449:178:99;;;:::i;2930:84:103:-;2976:13;3004:5;2997:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84;:::o;12646:125:99:-;12735:30;;;;;;;;;;;;;;;;12728:38;;;;;12716:4;;12728:38;;;;;:::i;:::-;;;;;;;;1424:823:101;1633:29;;;;;;;;;;;;;;;;;1608:23;;;1600:63;;;;;;;;;;;;;:::i;:::-;;1727:8;1708:15;:27;;1737:25;;;;;;;;;;;;;;;;;1700:63;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1797:18:101;;;1769:25;1797:18;;;:7;:18;;;;;;;1901;:16;:18::i;:::-;1950:87;;;956:94;1950:87;;;10455:25:201;10528:42;10516:55;;10496:18;;;10489:83;;;;10588:18;;;10581:34;;;10631:18;;;10624:34;;;10674:19;;;10667:35;;;10427:19;;1950:87:101;;;;;;;;;;;;1929:118;;;;;;1855:200;;;;;;;;10983:66:201;10971:79;;11075:1;11066:11;;11059:27;;;;11111:2;11102:12;;11095:28;11148:2;11139:12;;10713:444;1855:200:101;;;;;;;;;;;;;;1838:223;;1855:200;1838:223;;;;2088:26;;;;;;;;;11389:25:201;;;11462:4;11450:17;;11430:18;;;11423:45;;;;11484:18;;;11477:34;;;11527:18;;;11520:34;;;1838:223:101;-1:-1:-1;2088:26:101;;11361:19:201;;2088:26:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2075:39;;:9;:39;;;2116:24;;;;;;;;;;;;;;;;;2067:74;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2168:21:101;:17;2188:1;2168:21;:::i;:::-;2147:18;;;;;;;:7;:18;;;;;:42;2195:47;2155:9;2225;2236:5;2195:18;:47::i;:::-;1594:653;;1424:823;;;;;;;:::o;9656:120:99:-;9756:14;;9717:7;;9739:32;;9756:14;;9739:16;:32::i;:::-;9732:39;;9656:120;:::o;867:185:102:-;924:7;960:8;943:13;:25;939:69;;;-1:-1:-1;985:16:102;;;867:185::o;939:69::-;1020:27;:25;:27::i;3477:433:99:-;3518:19:103;;;3551:7:99;3518:19:103;;;:10;:19;;;;;:27;;;;;;3642:34:99;;;;3518:27:103;3682:48:99;;-1:-1:-1;3722:1:99;;3477:433;-1:-1:-1;;;3477:433:99:o;3682:48::-;3826:20;;;3735:25;3826:20;;;:11;:20;;;;;;3763:89;;3808:10;;3826:20;;3763:37;:89::i;:::-;3735:117;-1:-1:-1;3865:40:99;:14;3735:117;3865:21;:40::i;:::-;3858:47;3477:433;-1:-1:-1;;;;;3477:433:99:o;9182:228::-;9298:14;;9239:7;;;;;;;;9298:14;;9326:19;3376:12:103;;;3293:100;9326:19:99;9347:25;9364:7;9347:16;:25::i;:::-;9383:21;;9318:87;;;;-1:-1:-1;9374:7:99;;-1:-1:-1;9383:21:99;;;;;;-1:-1:-1;9182:228:99;-1:-1:-1;9182:228:99:o;3051:90:103:-;3101:13;3129:7;3122:14;;;;;:::i;5927:2487:99:-;1519:26:103;;;;;;;;;;;;;;;;;6027:7:99;;;;678:10:4;1512:4:103;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;6054:22:99::1;6078:23:::0;6105:31:::1;6131:4;6105:25;:31::i;:::-;6051:85;;;;;6143:22;6168:13;:11;:13::i;:::-;6275:16;::::0;::::1;6187:25;6275:16:::0;;;:10:::1;:16;::::0;;;;:31;6143:38;;-1:-1:-1;6187:25:99;;;6275:31;;::::1;;;6621:24:::0;;::::1;6617:786;;6655:14;:18:::0;;;::::1;::::0;;6672:1:::1;6681:12;:16:::0;6617:786:::1;;;6746:23;6763:6:::0;6746:14;:23:::1;:::i;:::-;6731:12;:38;;;6718:51;;6777:17;6797:57;6828:25;:14;:23;:25::i;:::-;6805:14;::::0;::::1;;::::0;6797:30:::1;:57::i;:::-;6777:77;;6862:18;6883:40;6905:17;:6;:15;:17::i;:::-;6883:14:::0;;:21:::1;:40::i;:::-;6862:61;;7164:9;7150:10;:23;7146:251;;7220:14;:18:::0;;;::::1;::::0;;7237:1:::1;7205:12;:33:::0;;;7237:1;-1:-1:-1;7146:251:99::1;;;7300:88;7312:54;7344:21;:10;:19;:21::i;:::-;7313:22;7325:10:::0;7313:9;:22:::1;:::i;:::-;7312:31:::0;::::1;:54::i;:::-;7300:86;:88::i;:::-;7283:14;:105:::0;;;::::1;;::::0;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;7146:251:99::1;6710:693;;6617:786;7423:14;7413:6;:24;7409:206;;;7447:16;::::0;::::1;7481:1;7447:16:::0;;;:10:::1;:16;::::0;;;;;;;:35;;::::1;;::::0;;7490:11:::1;:17:::0;;;;;:21;;;::::1;::::0;;7409:206:::1;;;7565:17;::::0;::::1;;::::0;;;:11:::1;:17;::::0;;;;:43;;;::::1;7592:15;7565:43;;;::::0;;7409:206:::1;7651:21;:47:::0;;;::::1;::::0;7682:15:::1;7651:47;;;;::::0;;7709:24;;::::1;7705:660;;;7743:20;7766:24;7784:6:::0;7766:15;:24:::1;:::i;:::-;7743:47;;7798:41;7804:4;7810:12;7824:14;7798:5;:41::i;:::-;7852:40;::::0;2631:25:201;;;7852:40:99::1;::::0;::::1;::::0;7869:1:::1;::::0;7852:40:::1;::::0;2619:2:201;2604:18;7852:40:99::1;;;;;;;7905:182;::::0;;12304:25:201;;;12360:2;12345:18;;12338:34;;;12388:18;;;12381:34;;;12446:2;12431:18;;12424:34;;;12489:3;12474:19;;12467:35;;;12533:3;12518:19;;12511:35;;;7905:182:99::1;::::0;::::1;::::0;;;::::1;::::0;12291:3:201;12276:19;7905:182:99::1;;;;;;;7735:359;7705:660;;;8108:20;8131:24;8140:15:::0;8131:6;:24:::1;:::i;:::-;8108:47;;8163:41;8169:4;8175:12;8189:14;8163:5;:41::i;:::-;8217:40;::::0;2631:25:201;;;8240:1:99::1;::::0;8217:40:::1;::::0;::::1;::::0;::::1;::::0;2619:2:201;2604:18;8217:40:99::1;;;;;;;8270:88;::::0;;12816:25:201;;;12872:2;12857:18;;12850:34;;;12900:18;;;12893:34;;;12958:2;12943:18;;12936:34;;;13001:3;12986:19;;12979:35;;;8270:88:99::1;::::0;::::1;::::0;::::1;::::0;12803:3:201;12788:19;8270:88:99::1;;;;;;;8100:265;7705:660;-1:-1:-1::0;8379:10:99;-1:-1:-1;8391:17:99;-1:-1:-1;;;;1552:1:103::1;5927:2487:99::0;;;;;:::o;4149:1739::-;4291:4;;;1488:29:103;1512:4;1488:29;678:10:4;1488:29:103;;;1519:26;;;;;;;;;;;;;;;;;1480:66;;;;;;;;;;;;;;:::i;:::-;;4321:25:99::1;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4321:25:99::1;4365:10;4357:18;;:4;:18;;;4353:89;;4385:50;4410:10;4422:4;4428:6;4385:24;:50::i;:::-;4451:22;4475:23:::0;4502:37:::1;4528:10;4502:25;:37::i;:::-;4448:91;;;;;4568:13;:11;:13::i;:::-;4546:35:::0;;;4615:14:::1;::::0;::::1;;4587:25;::::0;::::1;:42:::0;4668:28:::1;::::0;4690:6;;4668:28:::1;:::i;:::-;4653:12;:43:::0;;;4635:15:::1;::::0;::::1;:61:::0;4722:17:::1;:6:::0;:15:::1;:17::i;:::-;4703:16;::::0;;::::1;:36:::0;;;;4771:22:::1;::::0;::::1;;::::0;;;:10:::1;:22;::::0;;:37;;;::::1;;;4746:22;::::0;::::1;:62:::0;4836:141:::1;4940:36;4941:23;4958:6:::0;4941:14;:23:::1;:::i;:::-;4940:34;:36::i;:::-;4902:16;::::0;::::1;::::0;:29:::1;::::0;4926:4;4902:23:::1;:29::i;:::-;4837:56;4867:25;:14;:23;:25::i;:::-;4837:22;::::0;::::1;::::0;;:29:::1;:56::i;:::-;:94;;;;:::i;4836:141::-;4814:19;::::0;::::1;:163:::0;;;5024:31:::1;::::0;:29:::1;:31::i;:::-;4984:22;::::0;::::1;;::::0;;;:10:::1;:22;::::0;;;;;;;:71;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;;5117:11:::1;:23:::0;;;;;:49;;;::::1;5150:15;5117:49;;::::0;;::::1;::::0;;;5093:21:::1;:73:::0;;;::::1;::::0;;;::::1;;::::0;;;5390:15;::::1;::::0;5268:167:::1;::::0;5276:141:::1;::::0;5390:26:::1;::::0;:24:::1;:26::i;:::-;5364:16;::::0;::::1;::::0;5352:29:::1;::::0;:4;;:11:::1;:29::i;:::-;5277:64;5310:30;:4;:19;;;:28;:30::i;:::-;5277:25;::::0;::::1;::::0;;:32:::1;:64::i;5268:167::-;5251:14;:184:::0;;;::::1;;::::0;;;::::1;::::0;;::::1;::::0;;5223:25:::1;::::0;::::1;:212:::0;-1:-1:-1;5465:24:99::1;5474:15:::0;5465:6;:24:::1;:::i;:::-;5442:47;;5495:52;5501:10;5513:12;5527:4;:19;;;5495:5;:52::i;:::-;5559:46;::::0;2631:25:201;;;5559:46:99::1;::::0;::::1;::::0;5576:1:::1;::::0;5559:46:::1;::::0;2619:2:201;2604:18;5559:46:99::1;;;;;;;5723:19;::::0;;::::1;::::0;5750:25:::1;::::0;;::::1;::::0;5783:15:::1;::::0;;::::1;::::0;5616:188:::1;::::0;;12304:25:201;;;12345:18;;;12338:34;;;12388:18;;12381:34;;;12446:2;12431:18;;12424:34;;;;12474:19;;;12467:35;12518:19;;12511:35;5616:188:99::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;12291:3:201;12276:19;5616:188:99::1;;;;;;;-1:-1:-1::0;;5840:15:99::1;::::0;::::1;::::0;5857:25:::1;::::0;;::::1;::::0;5819:19;;;5840:15;;-1:-1:-1;5857:25:99;-1:-1:-1;4149:1739:99;-1:-1:-1;;;;;4149:1739:99:o;1237:142:101:-;1323:51;678:10:4;1356:9:101;1367:6;1323:18;:51::i;:::-;1237:142;;:::o;1997:803:99:-;1408:3;1217:12:71;;;;;:31;;-1:-1:-1;2436:9:71;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;13227:2:201;1202:146:71;;;13209:21:201;13266:2;13246:18;;;13239:30;13305:34;13285:18;;;13278:62;13376:16;13356:18;;;13349:44;13410:19;;1202:146:71;13025:410:201;1202:146:71;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;2318:4:99::1;2298:24;;:16;:24;;;2324:34;;;;;;;;;;;;;;;;::::0;2290:69:::1;;;;;;;;;;;;;;:::i;:::-;;2365:23;2374:13;2365:8;:23::i;:::-;2394:27;2405:15;2394:10;:27::i;:::-;7979:9:103::0;:23;;2465:16:99::1;:34:::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;2505:44;::::1;2465:34;2505:44;::::0;;;;7979:23:103;;;2505:44:99;::::1;::::0;;2575:27:::1;:25;:27::i;:::-;2556:16;:46;;;;2664:4;2614:181;;2633:15;2614:181;;;2685:20;2714:17;2739:13;2760:15;2783:6;;2614:181;;;;;;;;;;;:::i;:::-;;;;;;;;1510:14:71::0;1506:55;;;1534:12;:20;;;;;;1506:55;1158:407;;1997:803:99;;;;;;;;:::o;3938:139:103:-;1211:22;1248:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1297;;;;;1320:10;1297:34;;;4304:74:201;1211:72:103;;-1:-1:-1;1297:22:103;;;;;;4277:18:201;;1297:34:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1333:28;;;;;;;;;;;;;;;;;1289:73;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;4038:21:103::1;:34:::0;;::::1;::::0;;::::1;;;::::0;;;::::1;::::0;;;::::1;::::0;;3938:139::o;9449:178:99:-;9559:14;;9517:7;;;;9559:14;;9587:25;9559:14;9587:16;:25::i;:::-;9579:43;9614:7;;-1:-1:-1;9449:178:99;-1:-1:-1;9449:178:99:o;2749:233:101:-;2846:28;;;;;;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;;:48;;;2952:16;;2905:72;;2631:25:201;;;2952:16:101;;;2846:39;;:28;2905:72;;2604:18:201;2905:72:101;;;;;;;2749:233;;;:::o;10454:363:99:-;10520:7;10535:23;10561:19;3376:12:103;;;3293:100;10561:19:99;10535:45;-1:-1:-1;10591:20:99;10587:49;;-1:-1:-1;10628:1:99;;10454:363;-1:-1:-1;;10454:363:99:o;10587:49::-;10642:25;10670:87;10715:7;10730:21;;;;;;;;;;;10670:37;:87::i;:::-;10642:115;-1:-1:-1;10771:41:99;:15;10642:115;10771:22;:41::i;:::-;10764:48;10454:363;-1:-1:-1;;;;10454:363:99:o;1475:298:102:-;1535:7;292:95;1645:15;:13;:15::i;:::-;1629:33;;;;;;;232:10;;;;;;;;;;;;;;;;1582:178;;;;;15207:25:201;;;;15248:18;;;15241:34;;;;1674:26:102;15291:18:201;;;15284:34;1712:13:102;15334:18:201;;;15327:34;1745:4:102;15377:19:201;;;15370:84;15179:19;;1582:178:102;;;;;;;;;;;;1563:205;;;;;;1550:218;;1475:298;:::o;3142:212:88:-;3256:7;3278:71;3306:4;3312:19;3333:15;3278:27;:71::i;:::-;3271:78;3142:212;-1:-1:-1;;;3142:212:88:o;2253:319:90:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:90;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;8712:431:99:-;8792:7;8801;8810;8825:32;8860:21;8876:4;3518:19:103;;3496:7;3518:19;;;:10;:19;;;;;:27;;;;3422:128;8860:21:99;8825:56;-1:-1:-1;8892:29:99;8888:66;;8939:1;8942;8945;8931:16;;;;;;;;;8888:66;8960:27;8990:15;9000:4;8990:9;:15::i;:::-;8960:45;-1:-1:-1;9027:24:99;8960:45;9086:46;9027:24;8960:45;9086:46;:::i;:::-;9012:126;;;;;;;;8712:431;;;;;;:::o;3901:247:90:-;4046:13;4039:21;;;;4081;;4078:28;;4068:70;;4128:1;4125;4118:12;4068:70;3901:247;;;:::o;2840:322::-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:90;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;15667:2:201;1635:78:12;;;15649:21:201;15706:2;15686:18;;;15679:30;15745:34;15725:18;;;15718:62;15816:9;15796:18;;;15789:37;15843:19;;1635:78:12;15465:403:201;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;11051:407:99:-;11138:18;11159;:6;:16;:18::i;:::-;11211:19;;;11183:25;11211:19;;;:10;:19;;;;;:27;11138:39;;-1:-1:-1;11211:27:99;;11274:30;11138:39;11211:27;11274:30;:::i;:::-;11244:19;;;;;;;;:10;:19;;;;;:60;;;;;;;;;;;;;;;;11323:21;;11244:60;11323:21;;;11315:44;11311:143;;11369:21;;:78;;;;;:21;16351:55:201;;;11369:78:99;;;16333:74:201;16423:18;;;16416:34;;;16498;16486:47;;16466:18;;;16459:75;11369:21:99;;;;;;;;:34;;16306:18:201;;11369:78:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11311:143;11132:326;;11051:407;;;:::o;11687:::-;11774:18;11795;:6;:16;:18::i;:::-;11847:19;;;11819:25;11847:19;;;:10;:19;;;;;:27;11774:39;;-1:-1:-1;11847:27:99;;11910:30;11774:39;11847:27;11910:30;:::i;3288:330:101:-;3414:28;;;;3391:20;3414:28;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;:48;;3456:6;;3414:48;:::i;:::-;3469:28;;;;;;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;:54;;;3582:16;;3535:78;;3391:71;;-1:-1:-1;3582:16:101;;;3535:78;;;;3391:71;2631:25:201;;2619:2;2604:18;;2485:177;3535:78:101;;;;;;;;3385:233;3288:330;;;:::o;7513:76:103:-;7569:15;;;;:5;;:15;;;;;:::i;7701:84::-;7761:19;;;;:7;;:19;;;;;:::i;12127:96:99:-;12184:13;12212:6;:4;:6::i;1780:972:88:-;1924:7;;1984:47;2003:28;;;1984:16;:47;:::i;:::-;1970:61;-1:-1:-1;2042:8:88;2038:50;;704:4:90;2060:21:88;;;;;2038:50;2230:7;;;2094:19;;;2266:1;2260:7;;:21;;2280:1;2260:21;;;2276:1;2270:3;:7;2260:21;2246:35;-1:-1:-1;2326:35:88;2305:17;2317:4;;2305:11;:17::i;:::-;:57;;;;;:::i;:::-;;;-1:-1:-1;376:8:88;2387:25;2305:57;2407:4;2387:19;:25::i;:::-;:44;;;;;:::i;:::-;;;-1:-1:-1;2444:18:88;2485:12;2465:17;2471:11;2465:3;:17;:::i;:::-;:32;;;;:::i;:::-;2535:1;2521:15;;;-1:-1:-1;2548:17:88;2602:14;2588:11;2568:17;2574:11;2568:3;:17;:::i;:::-;:31;;;;:::i;:::-;:48;;;;:::i;:::-;2653:1;2640:14;;;-1:-1:-1;2640:14:88;2725:10;376:8;2692:10;2699:3;2692:4;:10;:::i;:::-;2691:31;;;;:::i;:::-;2674:48;;704:4:90;2674:48:88;:::i;:::-;:61;;;;:::i;:::-;:73;;;;:::i;:::-;2667:80;1780:972;-1:-1:-1;;;;;;;;;;;1780:972:88:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:531:201;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;336:6;333:1;330:13;327:87;;;402:1;395:4;386:6;381:3;377:16;373:27;366:38;327:87;-1:-1:-1;459:2:201;447:15;464:66;443:88;434:98;;;;534:4;430:109;;14:531;-1:-1:-1;;14:531:201:o;550:220::-;699:2;688:9;681:21;662:4;719:45;760:2;749:9;745:18;737:6;719:45;:::i;775:154::-;861:42;854:5;850:54;843:5;840:65;830:93;;919:1;916;909:12;830:93;775:154;:::o;934:134::-;1002:20;;1031:31;1002:20;1031:31;:::i;1073:315::-;1141:6;1149;1202:2;1190:9;1181:7;1177:23;1173:32;1170:52;;;1218:1;1215;1208:12;1170:52;1257:9;1244:23;1276:31;1301:5;1276:31;:::i;:::-;1326:5;1378:2;1363:18;;;;1350:32;;-1:-1:-1;;;1073:315:201:o;1585:156::-;1651:20;;1711:4;1700:16;;1690:27;;1680:55;;1731:1;1728;1721:12;1746:734;1857:6;1865;1873;1881;1889;1897;1905;1958:3;1946:9;1937:7;1933:23;1929:33;1926:53;;;1975:1;1972;1965:12;1926:53;2014:9;2001:23;2033:31;2058:5;2033:31;:::i;:::-;2083:5;-1:-1:-1;2140:2:201;2125:18;;2112:32;2153:33;2112:32;2153:33;:::i;:::-;2205:7;-1:-1:-1;2259:2:201;2244:18;;2231:32;;-1:-1:-1;2310:2:201;2295:18;;2282:32;;-1:-1:-1;2333:37:201;2365:3;2350:19;;2333:37;:::i;:::-;2323:47;;2417:3;2406:9;2402:19;2389:33;2379:43;;2469:3;2458:9;2454:19;2441:33;2431:43;;1746:734;;;;;;;;;;:::o;2667:456::-;2744:6;2752;2760;2813:2;2801:9;2792:7;2788:23;2784:32;2781:52;;;2829:1;2826;2819:12;2781:52;2868:9;2855:23;2887:31;2912:5;2887:31;:::i;:::-;2937:5;-1:-1:-1;2994:2:201;2979:18;;2966:32;3007:33;2966:32;3007:33;:::i;:::-;2667:456;;3059:7;;-1:-1:-1;;;3113:2:201;3098:18;;;;3085:32;;2667:456::o;3499:388::-;3567:6;3575;3628:2;3616:9;3607:7;3603:23;3599:32;3596:52;;;3644:1;3641;3634:12;3596:52;3683:9;3670:23;3702:31;3727:5;3702:31;:::i;:::-;3752:5;-1:-1:-1;3809:2:201;3794:18;;3781:32;3822:33;3781:32;3822:33;:::i;:::-;3874:7;3864:17;;;3499:388;;;;;:::o;3892:247::-;3951:6;4004:2;3992:9;3983:7;3979:23;3975:32;3972:52;;;4020:1;4017;4010:12;3972:52;4059:9;4046:23;4078:31;4103:5;4078:31;:::i;5973:525::-;6059:6;6067;6075;6083;6136:3;6124:9;6115:7;6111:23;6107:33;6104:53;;;6153:1;6150;6143:12;6104:53;6192:9;6179:23;6211:31;6236:5;6211:31;:::i;:::-;6261:5;-1:-1:-1;6318:2:201;6303:18;;6290:32;6331:33;6290:32;6331:33;:::i;:::-;5973:525;;6383:7;;-1:-1:-1;;;;6437:2:201;6422:18;;6409:32;;6488:2;6473:18;6460:32;;5973:525::o;6837:184::-;6889:77;6886:1;6879:88;6986:4;6983:1;6976:15;7010:4;7007:1;7000:15;7026:778;7069:5;7122:3;7115:4;7107:6;7103:17;7099:27;7089:55;;7140:1;7137;7130:12;7089:55;7176:6;7163:20;7202:18;7239:2;7235;7232:10;7229:36;;;7245:18;;:::i;:::-;7379:2;7373:9;7441:4;7433:13;;7284:66;7429:22;;;7453:2;7425:31;7421:40;7409:53;;;7477:18;;;7497:22;;;7474:46;7471:72;;;7523:18;;:::i;:::-;7563:10;7559:2;7552:22;7598:2;7590:6;7583:18;7644:3;7637:4;7632:2;7624:6;7620:15;7616:26;7613:35;7610:55;;;7661:1;7658;7651:12;7610:55;7725:2;7718:4;7710:6;7706:17;7699:4;7691:6;7687:17;7674:54;7772:1;7765:4;7760:2;7752:6;7748:15;7744:26;7737:37;7792:6;7783:15;;;;;;7026:778;;;;:::o;7809:347::-;7860:8;7870:6;7924:3;7917:4;7909:6;7905:17;7901:27;7891:55;;7942:1;7939;7932:12;7891:55;-1:-1:-1;7965:20:201;;8008:18;7997:30;;7994:50;;;8040:1;8037;8030:12;7994:50;8077:4;8069:6;8065:17;8053:29;;8129:3;8122:4;8113:6;8105;8101:19;8097:30;8094:39;8091:59;;;8146:1;8143;8136:12;8161:1302;8351:6;8359;8367;8375;8383;8391;8399;8407;8460:3;8448:9;8439:7;8435:23;8431:33;8428:53;;;8477:1;8474;8467:12;8428:53;8516:9;8503:23;8535:31;8560:5;8535:31;:::i;:::-;8585:5;-1:-1:-1;8642:2:201;8627:18;;8614:32;8655:33;8614:32;8655:33;:::i;:::-;8707:7;-1:-1:-1;8733:38:201;8767:2;8752:18;;8733:38;:::i;:::-;8723:48;;8790:36;8822:2;8811:9;8807:18;8790:36;:::i;:::-;8780:46;;8877:3;8866:9;8862:19;8849:33;8901:18;8942:2;8934:6;8931:14;8928:34;;;8958:1;8955;8948:12;8928:34;8981:50;9023:7;9014:6;9003:9;8999:22;8981:50;:::i;:::-;8971:60;;9084:3;9073:9;9069:19;9056:33;9040:49;;9114:2;9104:8;9101:16;9098:36;;;9130:1;9127;9120:12;9098:36;9153:52;9197:7;9186:8;9175:9;9171:24;9153:52;:::i;:::-;9143:62;;9258:3;9247:9;9243:19;9230:33;9214:49;;9288:2;9278:8;9275:16;9272:36;;;9304:1;9301;9294:12;9272:36;;9343:60;9395:7;9384:8;9373:9;9369:24;9343:60;:::i;:::-;8161:1302;;;;-1:-1:-1;8161:1302:201;;-1:-1:-1;8161:1302:201;;;;;;9422:8;-1:-1:-1;;;8161:1302:201:o;9754:437::-;9833:1;9829:12;;;;9876;;;9897:61;;9951:4;9943:6;9939:17;9929:27;;9897:61;10004:2;9996:6;9993:14;9973:18;9970:38;9967:218;;;10041:77;10038:1;10031:88;10142:4;10139:1;10132:15;10170:4;10167:1;10160:15;9967:218;;9754:437;;;:::o;11565:184::-;11617:77;11614:1;11607:88;11714:4;11711:1;11704:15;11738:4;11735:1;11728:15;11754:128;11794:3;11825:1;11821:6;11818:1;11815:13;11812:39;;;11831:18;;:::i;:::-;-1:-1:-1;11867:9:201;;11754:128::o;11887:125::-;11927:4;11955:1;11952;11949:8;11946:34;;;11960:18;;:::i;:::-;-1:-1:-1;11997:9:201;;11887:125::o;13440:965::-;13757:42;13749:6;13745:55;13734:9;13727:74;13849:4;13841:6;13837:17;13832:2;13821:9;13817:18;13810:45;13891:3;13886:2;13875:9;13871:18;13864:31;13708:4;13918:46;13959:3;13948:9;13944:19;13936:6;13918:46;:::i;:::-;14012:9;14004:6;14000:22;13995:2;13984:9;13980:18;13973:50;14046:33;14072:6;14064;14046:33;:::i;:::-;14032:47;;14128:9;14120:6;14116:22;14110:3;14099:9;14095:19;14088:51;14163:6;14155;14148:22;14217:6;14209;14204:2;14196:6;14192:15;14179:45;14270:1;14265:2;14256:6;14248;14244:19;14240:28;14233:39;14396:2;14326:66;14321:2;14313:6;14309:15;14305:88;14297:6;14293:101;14289:110;14281:118;;;13440:965;;;;;;;;;:::o;14410:251::-;14480:6;14533:2;14521:9;14512:7;14508:23;14504:32;14501:52;;;14549:1;14546;14539:12;14501:52;14581:9;14575:16;14600:31;14625:5;14600:31;:::i;14666:277::-;14733:6;14786:2;14774:9;14765:7;14761:23;14757:32;14754:52;;;14802:1;14799;14792:12;14754:52;14834:9;14828:16;14887:5;14880:13;14873:21;14866:5;14863:32;14853:60;;14909:1;14906;14899:12;15873:253;15913:3;15941:34;16002:2;15999:1;15995:10;16032:2;16029:1;16025:10;16063:3;16059:2;16055:12;16050:3;16047:21;16044:47;;;16071:18;;:::i;:::-;16107:13;;15873:253;-1:-1:-1;;;;15873:253:201:o;16545:246::-;16585:4;16614:34;16698:10;;;;16668;;16720:12;;;16717:38;;;16735:18;;:::i;:::-;16772:13;;16545:246;-1:-1:-1;;;16545:246:201:o;16796:184::-;16848:77;16845:1;16838:88;16945:4;16942:1;16935:15;16969:4;16966:1;16959:15;16985:228;17025:7;17151:1;17083:66;17079:74;17076:1;17073:81;17068:1;17061:9;17054:17;17050:105;17047:131;;;17158:18;;:::i;:::-;-1:-1:-1;17198:9:201;;16985:228::o;17218:274::-;17258:1;17284;17274:189;;17319:77;17316:1;17309:88;17420:4;17417:1;17410:15;17448:4;17445:1;17438:15;17274:189;-1:-1:-1;17477:9:201;;17218:274::o"},"gasEstimates":{"creation":{"codeDepositCost":"2139800","executionCost":"infinite","totalCost":"infinite"},"external":{"DEBT_TOKEN_REVISION()":"306","DELEGATION_WITH_SIG_TYPEHASH()":"283","DOMAIN_SEPARATOR()":"infinite","EIP712_REVISION()":"infinite","POOL()":"infinite","UNDERLYING_ASSET_ADDRESS()":"2374","allowance(address,address)":"infinite","approve(address,uint256)":"infinite","approveDelegation(address,uint256)":"26966","balanceOf(address)":"infinite","borrowAllowance(address,address)":"infinite","burn(address,uint256)":"infinite","decimals()":"2357","decreaseAllowance(address,uint256)":"infinite","delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":"infinite","getAverageStableRate()":"2344","getIncentivesController()":"2430","getSupplyData()":"infinite","getTotalSupplyAndAvgRate()":"infinite","getTotalSupplyLastUpdated()":"2407","getUserLastUpdated(address)":"2611","getUserStableRate(address)":"2590","increaseAllowance(address,uint256)":"infinite","initialize(address,address,address,uint8,string,string,bytes)":"infinite","mint(address,address,uint256,uint256)":"infinite","name()":"infinite","nonces(address)":"2618","principalBalanceOf(address)":"2602","setIncentivesController(address)":"infinite","symbol()":"infinite","totalSupply()":"infinite","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite"},"internal":{"_EIP712BaseId()":"infinite","_burn(address,uint256,uint256)":"infinite","_calcTotalSupply(uint256)":"infinite","_calculateBalanceIncrease(address)":"infinite","_mint(address,uint256,uint256)":"infinite","getRevision()":"infinite"}},"methodIdentifiers":{"DEBT_TOKEN_REVISION()":"b9a7b622","DELEGATION_WITH_SIG_TYPEHASH()":"f3bfc738","DOMAIN_SEPARATOR()":"3644e515","EIP712_REVISION()":"78160376","POOL()":"7535d246","UNDERLYING_ASSET_ADDRESS()":"b16a19de","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","approveDelegation(address,uint256)":"c04a8a10","balanceOf(address)":"70a08231","borrowAllowance(address,address)":"6bd76d24","burn(address,uint256)":"9dc29fac","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":"0b52d558","getAverageStableRate()":"90f6fcf2","getIncentivesController()":"75d26413","getSupplyData()":"79774338","getTotalSupplyAndAvgRate()":"f731e9be","getTotalSupplyLastUpdated()":"e7484890","getUserLastUpdated(address)":"79ce6b8c","getUserStableRate(address)":"e78c9b3b","increaseAllowance(address,uint256)":"39509351","initialize(address,address,address,uint8,string,string,bytes)":"c222ec8a","mint(address,address,uint256,uint256)":"b3f1c93d","name()":"06fdde03","nonces(address)":"7ecebe00","principalBalanceOf(address)":"c634dfaa","setIncentivesController(address)":"e655dbd8","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"}],\"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\":\"fromUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BorrowAllowanceDelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"avgStableRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalSupply\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"avgStableRate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTotalSupply\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"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\":\"DEBT_TOKEN_REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DELEGATION_WITH_SIG_TYPEHASH\",\"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\":\"EIP712_REVISION\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approveDelegation\",\"outputs\":[],\"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\":\"fromUser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"}],\"name\":\"borrowAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatee\",\"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\":\"delegationWithSig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAverageStableRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupplyData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalSupplyAndAvgRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalSupplyLastUpdated\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserLastUpdated\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserStableRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"initializingPool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"user\",\"type\":\"address\"}],\"name\":\"principalBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setIncentivesController\",\"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\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"Transfer and approve functionalities are disabled since its a non-transferable token\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Return cached value if chainId matches cache, otherwise recomputes separator\",\"returns\":{\"_0\":\"The domain separator of the token at current chain\"}},\"UNDERLYING_ASSET_ADDRESS()\":{\"returns\":{\"_0\":\"The address of the underlying asset\"}},\"approveDelegation(address,uint256)\":{\"params\":{\"amount\":\"The maximum amount being delegated.\",\"delegatee\":\"The address receiving the delegated borrowing power\"}},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"borrowAllowance(address,address)\":{\"params\":{\"fromUser\":\"The user to giving allowance\",\"toUser\":\"The user to give allowance to\"},\"returns\":{\"_0\":\"The current allowance of `toUser`\"}},\"burn(address,uint256)\":{\"details\":\"The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debtIn some instances, a burn transaction will emit a mint event if the amount to burn is less than the interest the user earned\",\"params\":{\"amount\":\"The amount of debt tokens getting burned\",\"from\":\"The address from which the debt will be burned\"},\"returns\":{\"_0\":\"The total stable debt\",\"_1\":\"The average stable borrow rate\"}},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"pool\":\"The address of the Pool contract\"}},\"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"delegatee\":\"The delegatee that can use the credit\",\"delegator\":\"The delegator of the credit\",\"r\":\"The R signature param\",\"s\":\"The S signature param\",\"v\":\"The V signature param\",\"value\":\"The amount to be delegated\"}},\"getAverageStableRate()\":{\"returns\":{\"_0\":\"The average stable rate\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"The address of the Incentives Controller\"}},\"getSupplyData()\":{\"returns\":{\"_0\":\"The principal\",\"_1\":\"The total supply\",\"_2\":\"The average stable rate\",\"_3\":\"The timestamp of the last update\"}},\"getTotalSupplyAndAvgRate()\":{\"returns\":{\"_0\":\"The total supply\",\"_1\":\"The average rate\"}},\"getTotalSupplyLastUpdated()\":{\"returns\":{\"_0\":\"The timestamp\"}},\"getUserLastUpdated(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The timestamp\"}},\"getUserStableRate(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The stable rate of the user\"}},\"initialize(address,address,address,uint8,string,string,bytes)\":{\"params\":{\"debtTokenDecimals\":\"The decimals of the debtToken, same as the underlying asset's\",\"debtTokenName\":\"The name of the token\",\"debtTokenSymbol\":\"The symbol of the token\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}},\"mint(address,address,uint256,uint256)\":{\"details\":\"The resulting rate is the weighted average between the rate of the new debt and the rate of the previous debt\",\"params\":{\"amount\":\"The amount of debt tokens to mint\",\"onBehalfOf\":\"The address receiving the debt tokens\",\"rate\":\"The rate of the debt being minted\",\"user\":\"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise\"},\"returns\":{\"_0\":\"True if it is the first borrow, false otherwise\",\"_1\":\"The total stable debt\",\"_2\":\"The average stable borrow rate\"}},\"nonces(address)\":{\"params\":{\"owner\":\"The address for which the nonce is being returned\"},\"returns\":{\"_0\":\"The nonce value for the input address`\"}},\"principalBalanceOf(address)\":{\"returns\":{\"_0\":\"The debt balance of the user since the last burn/mint action\"}},\"setIncentivesController(address)\":{\"params\":{\"controller\":\"the new Incentives controller\"}},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Being non transferrable, the debt token does not implement any of the standard ERC20 functions for transfer and allowance.\"}},\"title\":\"StableDebtToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"notice\":\"Get the domain separator for the token\"},\"UNDERLYING_ASSET_ADDRESS()\":{\"notice\":\"Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\"},\"approveDelegation(address,uint256)\":{\"notice\":\"Delegates borrowing power to a user on the specific debt token. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)\"},\"borrowAllowance(address,address)\":{\"notice\":\"Returns the borrow allowance of the user\"},\"burn(address,uint256)\":{\"notice\":\"Burns debt of `user`\"},\"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Delegates borrowing power to a user on the specific debt token via ERC712 signature\"},\"getAverageStableRate()\":{\"notice\":\"Returns the average rate of all the stable rate loans.\"},\"getIncentivesController()\":{\"notice\":\"Returns the address of the Incentives Controller contract\"},\"getSupplyData()\":{\"notice\":\"Returns the principal, the total supply, the average stable rate and the timestamp for the last update\"},\"getTotalSupplyAndAvgRate()\":{\"notice\":\"Returns the total supply and the average stable rate\"},\"getTotalSupplyLastUpdated()\":{\"notice\":\"Returns the timestamp of the last update of the total supply\"},\"getUserLastUpdated(address)\":{\"notice\":\"Returns the timestamp of the last update of the user\"},\"getUserStableRate(address)\":{\"notice\":\"Returns the stable rate of the user debt\"},\"initialize(address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the debt token.\"},\"mint(address,address,uint256,uint256)\":{\"notice\":\"Mints debt token to the `onBehalfOf` address.\"},\"nonces(address)\":{\"notice\":\"Returns the nonce value for address specified as parameter\"},\"principalBalanceOf(address)\":{\"notice\":\"Returns the principal debt balance of the user\"},\"setIncentivesController(address)\":{\"notice\":\"Sets a new Incentives Controller\"}},\"notice\":\"Implements a stable debt token to track the borrowing positions of users at stable rate mode\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol\":\"StableDebtToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/ICreditDelegationToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ICreditDelegationToken\\n * @author Aave\\n * @notice Defines the basic interface for a token supporting credit delegation.\\n */\\ninterface ICreditDelegationToken {\\n  /**\\n   * @dev Emitted on `approveDelegation` and `borrowAllowance\\n   * @param fromUser The address of the delegator\\n   * @param toUser The address of the delegatee\\n   * @param asset The address of the delegated asset\\n   * @param amount The amount being delegated\\n   */\\n  event BorrowAllowanceDelegated(\\n    address indexed fromUser,\\n    address indexed toUser,\\n    address indexed asset,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @notice Delegates borrowing power to a user on the specific debt token.\\n   * Delegation will still respect the liquidation constraints (even if delegated, a\\n   * delegatee cannot force a delegator HF to go below 1)\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The maximum amount being delegated.\\n   */\\n  function approveDelegation(address delegatee, uint256 amount) external;\\n\\n  /**\\n   * @notice Returns the borrow allowance of the user\\n   * @param fromUser The user to giving allowance\\n   * @param toUser The user to give allowance to\\n   * @return The current allowance of `toUser`\\n   */\\n  function borrowAllowance(address fromUser, address toUser) external view returns (uint256);\\n\\n  /**\\n   * @notice Delegates borrowing power to a user on the specific debt token via ERC712 signature\\n   * @param delegator The delegator of the credit\\n   * @param delegatee The delegatee that can use the credit\\n   * @param value The amount to be delegated\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v The V signature param\\n   * @param s The S signature param\\n   * @param r The R signature param\\n   */\\n  function delegationWithSig(\\n    address delegator,\\n    address delegatee,\\n    uint256 value,\\n    uint256 deadline,\\n    uint8 v,\\n    bytes32 r,\\n    bytes32 s\\n  ) external;\\n}\\n\",\"keccak256\":\"0xab2789bbbf54af9609fbd7fa93595a514866728b3096ede6b69952f98290c997\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WadRayMath} from './WadRayMath.sol';\\n\\n/**\\n * @title MathUtils library\\n * @author Aave\\n * @notice Provides functions to perform linear and compounded interest calculations\\n */\\nlibrary MathUtils {\\n  using WadRayMath for uint256;\\n\\n  /// @dev Ignoring leap years\\n  uint256 internal constant SECONDS_PER_YEAR = 365 days;\\n\\n  /**\\n   * @dev Function to calculate the interest accumulated using a linear interest rate formula\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate linearly accumulated during the timeDelta, in ray\\n   */\\n  function calculateLinearInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 result = rate * (block.timestamp - uint256(lastUpdateTimestamp));\\n    unchecked {\\n      result = result / SECONDS_PER_YEAR;\\n    }\\n\\n    return WadRayMath.RAY + result;\\n  }\\n\\n  /**\\n   * @dev Function to calculate the interest using a compounded interest rate formula\\n   * To avoid expensive exponentiation, the calculation is performed using a binomial approximation:\\n   *\\n   *  (1+x)^n = 1+n*x+[n/2*(n-1)]*x^2+[n/6*(n-1)*(n-2)*x^3...\\n   *\\n   * The approximation slightly underpays liquidity providers and undercharges borrowers, with the advantage of great\\n   * gas cost reductions. The whitepaper contains reference to the approximation and a table showing the margin of\\n   * error per different time periods\\n   *\\n   * @param rate The interest rate, in ray\\n   * @param lastUpdateTimestamp The timestamp of the last update of the interest\\n   * @return The interest rate compounded during the timeDelta, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp,\\n    uint256 currentTimestamp\\n  ) internal pure returns (uint256) {\\n    //solium-disable-next-line\\n    uint256 exp = currentTimestamp - uint256(lastUpdateTimestamp);\\n\\n    if (exp == 0) {\\n      return WadRayMath.RAY;\\n    }\\n\\n    uint256 expMinusOne;\\n    uint256 expMinusTwo;\\n    uint256 basePowerTwo;\\n    uint256 basePowerThree;\\n    unchecked {\\n      expMinusOne = exp - 1;\\n\\n      expMinusTwo = exp > 2 ? exp - 2 : 0;\\n\\n      basePowerTwo = rate.rayMul(rate) / (SECONDS_PER_YEAR * SECONDS_PER_YEAR);\\n      basePowerThree = basePowerTwo.rayMul(rate) / SECONDS_PER_YEAR;\\n    }\\n\\n    uint256 secondTerm = exp * expMinusOne * basePowerTwo;\\n    unchecked {\\n      secondTerm /= 2;\\n    }\\n    uint256 thirdTerm = exp * expMinusOne * expMinusTwo * basePowerThree;\\n    unchecked {\\n      thirdTerm /= 6;\\n    }\\n\\n    return WadRayMath.RAY + (rate * exp) / SECONDS_PER_YEAR + secondTerm + thirdTerm;\\n  }\\n\\n  /**\\n   * @dev Calculates the compounded interest between the timestamp of the last update and the current block timestamp\\n   * @param rate The interest rate (in ray)\\n   * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated\\n   * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray\\n   */\\n  function calculateCompoundedInterest(\\n    uint256 rate,\\n    uint40 lastUpdateTimestamp\\n  ) internal view returns (uint256) {\\n    return calculateCompoundedInterest(rate, lastUpdateTimestamp, block.timestamp);\\n  }\\n}\\n\",\"keccak256\":\"0xb94b501d3f13553e3ccb0614d50cb8f449cce5ca2aa80391ce53fe57f4aee74d\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {MathUtils} from '../libraries/math/MathUtils.sol';\\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\\nimport {IInitializableDebtToken} from '../../interfaces/IInitializableDebtToken.sol';\\nimport {IStableDebtToken} from '../../interfaces/IStableDebtToken.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {EIP712Base} from './base/EIP712Base.sol';\\nimport {DebtTokenBase} from './base/DebtTokenBase.sol';\\nimport {IncentivizedERC20} from './base/IncentivizedERC20.sol';\\nimport {SafeCast} from '../../dependencies/openzeppelin/contracts/SafeCast.sol';\\n\\n/**\\n * @title StableDebtToken\\n * @author Aave\\n * @notice Implements a stable debt token to track the borrowing positions of users\\n * at stable rate mode\\n * @dev Transfer and approve functionalities are disabled since its a non-transferable token\\n */\\ncontract StableDebtToken is DebtTokenBase, IncentivizedERC20, IStableDebtToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  uint256 public constant DEBT_TOKEN_REVISION = 0x1;\\n\\n  // Map of users address and the timestamp of their last update (userAddress => lastUpdateTimestamp)\\n  mapping(address => uint40) internal _timestamps;\\n\\n  uint128 internal _avgStableRate;\\n\\n  // Timestamp of the last update of the total supply\\n  uint40 internal _totalSupplyTimestamp;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The address of the Pool contract\\n   */\\n  constructor(\\n    IPool pool\\n  ) DebtTokenBase() IncentivizedERC20(pool, 'STABLE_DEBT_TOKEN_IMPL', 'STABLE_DEBT_TOKEN_IMPL', 0) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IInitializableDebtToken\\n  function initialize(\\n    IPool initializingPool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external override initializer {\\n    require(initializingPool == POOL, Errors.POOL_ADDRESSES_DO_NOT_MATCH);\\n    _setName(debtTokenName);\\n    _setSymbol(debtTokenSymbol);\\n    _setDecimals(debtTokenDecimals);\\n\\n    _underlyingAsset = underlyingAsset;\\n    _incentivesController = incentivesController;\\n\\n    _domainSeparator = _calculateDomainSeparator();\\n\\n    emit Initialized(\\n      underlyingAsset,\\n      address(POOL),\\n      address(incentivesController),\\n      debtTokenDecimals,\\n      debtTokenName,\\n      debtTokenSymbol,\\n      params\\n    );\\n  }\\n\\n  /// @inheritdoc VersionedInitializable\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return DEBT_TOKEN_REVISION;\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function getAverageStableRate() external view virtual override returns (uint256) {\\n    return _avgStableRate;\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function getUserLastUpdated(address user) external view virtual override returns (uint40) {\\n    return _timestamps[user];\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function getUserStableRate(address user) external view virtual override returns (uint256) {\\n    return _userState[user].additionalData;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    uint256 accountBalance = super.balanceOf(account);\\n    uint256 stableRate = _userState[account].additionalData;\\n    if (accountBalance == 0) {\\n      return 0;\\n    }\\n    uint256 cumulatedInterest = MathUtils.calculateCompoundedInterest(\\n      stableRate,\\n      _timestamps[account]\\n    );\\n    return accountBalance.rayMul(cumulatedInterest);\\n  }\\n\\n  struct MintLocalVars {\\n    uint256 previousSupply;\\n    uint256 nextSupply;\\n    uint256 amountInRay;\\n    uint256 currentStableRate;\\n    uint256 nextStableRate;\\n    uint256 currentAvgStableRate;\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external virtual override onlyPool returns (bool, uint256, uint256) {\\n    MintLocalVars memory vars;\\n\\n    if (user != onBehalfOf) {\\n      _decreaseBorrowAllowance(onBehalfOf, user, amount);\\n    }\\n\\n    (, uint256 currentBalance, uint256 balanceIncrease) = _calculateBalanceIncrease(onBehalfOf);\\n\\n    vars.previousSupply = totalSupply();\\n    vars.currentAvgStableRate = _avgStableRate;\\n    vars.nextSupply = _totalSupply = vars.previousSupply + amount;\\n\\n    vars.amountInRay = amount.wadToRay();\\n\\n    vars.currentStableRate = _userState[onBehalfOf].additionalData;\\n    vars.nextStableRate = (vars.currentStableRate.rayMul(currentBalance.wadToRay()) +\\n      vars.amountInRay.rayMul(rate)).rayDiv((currentBalance + amount).wadToRay());\\n\\n    _userState[onBehalfOf].additionalData = vars.nextStableRate.toUint128();\\n\\n    //solium-disable-next-line\\n    _totalSupplyTimestamp = _timestamps[onBehalfOf] = uint40(block.timestamp);\\n\\n    // Calculates the updated average stable rate\\n    vars.currentAvgStableRate = _avgStableRate = (\\n      (vars.currentAvgStableRate.rayMul(vars.previousSupply.wadToRay()) +\\n        rate.rayMul(vars.amountInRay)).rayDiv(vars.nextSupply.wadToRay())\\n    ).toUint128();\\n\\n    uint256 amountToMint = amount + balanceIncrease;\\n    _mint(onBehalfOf, amountToMint, vars.previousSupply);\\n\\n    emit Transfer(address(0), onBehalfOf, amountToMint);\\n    emit Mint(\\n      user,\\n      onBehalfOf,\\n      amountToMint,\\n      currentBalance,\\n      balanceIncrease,\\n      vars.nextStableRate,\\n      vars.currentAvgStableRate,\\n      vars.nextSupply\\n    );\\n\\n    return (currentBalance == 0, vars.nextSupply, vars.currentAvgStableRate);\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function burn(\\n    address from,\\n    uint256 amount\\n  ) external virtual override onlyPool returns (uint256, uint256) {\\n    (, uint256 currentBalance, uint256 balanceIncrease) = _calculateBalanceIncrease(from);\\n\\n    uint256 previousSupply = totalSupply();\\n    uint256 nextAvgStableRate = 0;\\n    uint256 nextSupply = 0;\\n    uint256 userStableRate = _userState[from].additionalData;\\n\\n    // Since the total supply and each single user debt accrue separately,\\n    // there might be accumulation errors so that the last borrower repaying\\n    // might actually try to repay more than the available debt supply.\\n    // In this case we simply set the total supply and the avg stable rate to 0\\n    if (previousSupply <= amount) {\\n      _avgStableRate = 0;\\n      _totalSupply = 0;\\n    } else {\\n      nextSupply = _totalSupply = previousSupply - amount;\\n      uint256 firstTerm = uint256(_avgStableRate).rayMul(previousSupply.wadToRay());\\n      uint256 secondTerm = userStableRate.rayMul(amount.wadToRay());\\n\\n      // For the same reason described above, when the last user is repaying it might\\n      // happen that user rate * user balance > avg rate * total supply. In that case,\\n      // we simply set the avg rate to 0\\n      if (secondTerm >= firstTerm) {\\n        nextAvgStableRate = _totalSupply = _avgStableRate = 0;\\n      } else {\\n        nextAvgStableRate = _avgStableRate = (\\n          (firstTerm - secondTerm).rayDiv(nextSupply.wadToRay())\\n        ).toUint128();\\n      }\\n    }\\n\\n    if (amount == currentBalance) {\\n      _userState[from].additionalData = 0;\\n      _timestamps[from] = 0;\\n    } else {\\n      //solium-disable-next-line\\n      _timestamps[from] = uint40(block.timestamp);\\n    }\\n    //solium-disable-next-line\\n    _totalSupplyTimestamp = uint40(block.timestamp);\\n\\n    if (balanceIncrease > amount) {\\n      uint256 amountToMint = balanceIncrease - amount;\\n      _mint(from, amountToMint, previousSupply);\\n      emit Transfer(address(0), from, amountToMint);\\n      emit Mint(\\n        from,\\n        from,\\n        amountToMint,\\n        currentBalance,\\n        balanceIncrease,\\n        userStableRate,\\n        nextAvgStableRate,\\n        nextSupply\\n      );\\n    } else {\\n      uint256 amountToBurn = amount - balanceIncrease;\\n      _burn(from, amountToBurn, previousSupply);\\n      emit Transfer(from, address(0), amountToBurn);\\n      emit Burn(from, amountToBurn, currentBalance, balanceIncrease, nextAvgStableRate, nextSupply);\\n    }\\n\\n    return (nextSupply, nextAvgStableRate);\\n  }\\n\\n  /**\\n   * @notice Calculates the increase in balance since the last user interaction\\n   * @param user The address of the user for which the interest is being accumulated\\n   * @return The previous principal balance\\n   * @return The new principal balance\\n   * @return The balance increase\\n   */\\n  function _calculateBalanceIncrease(\\n    address user\\n  ) internal view returns (uint256, uint256, uint256) {\\n    uint256 previousPrincipalBalance = super.balanceOf(user);\\n\\n    if (previousPrincipalBalance == 0) {\\n      return (0, 0, 0);\\n    }\\n\\n    uint256 newPrincipalBalance = balanceOf(user);\\n\\n    return (\\n      previousPrincipalBalance,\\n      newPrincipalBalance,\\n      newPrincipalBalance - previousPrincipalBalance\\n    );\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function getSupplyData() external view override returns (uint256, uint256, uint256, uint40) {\\n    uint256 avgRate = _avgStableRate;\\n    return (super.totalSupply(), _calcTotalSupply(avgRate), avgRate, _totalSupplyTimestamp);\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function getTotalSupplyAndAvgRate() external view override returns (uint256, uint256) {\\n    uint256 avgRate = _avgStableRate;\\n    return (_calcTotalSupply(avgRate), avgRate);\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _calcTotalSupply(_avgStableRate);\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function getTotalSupplyLastUpdated() external view override returns (uint40) {\\n    return _totalSupplyTimestamp;\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function principalBalanceOf(address user) external view virtual override returns (uint256) {\\n    return super.balanceOf(user);\\n  }\\n\\n  /// @inheritdoc IStableDebtToken\\n  function UNDERLYING_ASSET_ADDRESS() external view override returns (address) {\\n    return _underlyingAsset;\\n  }\\n\\n  /**\\n   * @notice Calculates the total supply\\n   * @param avgRate The average rate at which the total supply increases\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function _calcTotalSupply(uint256 avgRate) internal view returns (uint256) {\\n    uint256 principalSupply = super.totalSupply();\\n\\n    if (principalSupply == 0) {\\n      return 0;\\n    }\\n\\n    uint256 cumulatedInterest = MathUtils.calculateCompoundedInterest(\\n      avgRate,\\n      _totalSupplyTimestamp\\n    );\\n\\n    return principalSupply.rayMul(cumulatedInterest);\\n  }\\n\\n  /**\\n   * @notice Mints stable debt tokens to a user\\n   * @param account The account receiving the debt tokens\\n   * @param amount The amount being minted\\n   * @param oldTotalSupply The total supply before the minting event\\n   */\\n  function _mint(address account, uint256 amount, uint256 oldTotalSupply) internal {\\n    uint128 castAmount = amount.toUint128();\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance + castAmount;\\n\\n    if (address(_incentivesController) != address(0)) {\\n      _incentivesController.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns stable debt tokens of a user\\n   * @param account The user getting his debt burned\\n   * @param amount The amount being burned\\n   * @param oldTotalSupply The total supply before the burning event\\n   */\\n  function _burn(address account, uint256 amount, uint256 oldTotalSupply) internal {\\n    uint128 castAmount = amount.toUint128();\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance - castAmount;\\n\\n    if (address(_incentivesController) != address(0)) {\\n      _incentivesController.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n\\n  /// @inheritdoc EIP712Base\\n  function _EIP712BaseId() internal view override returns (string memory) {\\n    return name();\\n  }\\n\\n  /**\\n   * @dev Being non transferrable, the debt token does not implement any of the\\n   * standard ERC20 functions for transfer and allowance.\\n   */\\n  function transfer(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function allowance(address, address) external view virtual override returns (uint256) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function approve(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function transferFrom(address, address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function increaseAllowance(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function decreaseAllowance(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n}\\n\",\"keccak256\":\"0xe27a3879a8d414bbe000b6e392458abc521550db3649b4bf63f9ba23fe42b180\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/DebtTokenBase.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {VersionedInitializable} from '../../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {ICreditDelegationToken} from '../../../interfaces/ICreditDelegationToken.sol';\\nimport {EIP712Base} from './EIP712Base.sol';\\n\\n/**\\n * @title DebtTokenBase\\n * @author Aave\\n * @notice Base contract for different types of debt tokens, like StableDebtToken or VariableDebtToken\\n */\\nabstract contract DebtTokenBase is\\n  VersionedInitializable,\\n  EIP712Base,\\n  Context,\\n  ICreditDelegationToken\\n{\\n  // Map of borrow allowances (delegator => delegatee => borrowAllowanceAmount)\\n  mapping(address => mapping(address => uint256)) internal _borrowAllowances;\\n\\n  // Credit Delegation Typehash\\n  bytes32 public constant DELEGATION_WITH_SIG_TYPEHASH =\\n    keccak256('DelegationWithSig(address delegatee,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  address internal _underlyingAsset;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() EIP712Base() {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function approveDelegation(address delegatee, uint256 amount) external override {\\n    _approveDelegation(_msgSender(), delegatee, amount);\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function delegationWithSig(\\n    address delegator,\\n    address delegatee,\\n    uint256 value,\\n    uint256 deadline,\\n    uint8 v,\\n    bytes32 r,\\n    bytes32 s\\n  ) external {\\n    require(delegator != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, Errors.INVALID_EXPIRATION);\\n    uint256 currentValidNonce = _nonces[delegator];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR(),\\n        keccak256(\\n          abi.encode(DELEGATION_WITH_SIG_TYPEHASH, delegatee, value, currentValidNonce, deadline)\\n        )\\n      )\\n    );\\n    require(delegator == ecrecover(digest, v, r, s), Errors.INVALID_SIGNATURE);\\n    _nonces[delegator] = currentValidNonce + 1;\\n    _approveDelegation(delegator, delegatee, value);\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function borrowAllowance(\\n    address fromUser,\\n    address toUser\\n  ) external view override returns (uint256) {\\n    return _borrowAllowances[fromUser][toUser];\\n  }\\n\\n  /**\\n   * @notice Updates the borrow allowance of a user on the specific debt token.\\n   * @param delegator The address delegating the borrowing power\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The allowance amount being delegated.\\n   */\\n  function _approveDelegation(address delegator, address delegatee, uint256 amount) internal {\\n    _borrowAllowances[delegator][delegatee] = amount;\\n    emit BorrowAllowanceDelegated(delegator, delegatee, _underlyingAsset, amount);\\n  }\\n\\n  /**\\n   * @notice Decreases the borrow allowance of a user on the specific debt token.\\n   * @param delegator The address delegating the borrowing power\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The amount to subtract from the current allowance\\n   */\\n  function _decreaseBorrowAllowance(address delegator, address delegatee, uint256 amount) internal {\\n    uint256 newAllowance = _borrowAllowances[delegator][delegatee] - amount;\\n\\n    _borrowAllowances[delegator][delegatee] = newAllowance;\\n\\n    emit BorrowAllowanceDelegated(delegator, delegatee, _underlyingAsset, newAllowance);\\n  }\\n}\\n\",\"keccak256\":\"0xf2f4490b59813b0372edfa3eca4b74bb2eb3be386c109201ddc08b97e1bff9fd\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/EIP712Base.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title EIP712Base\\n * @author Aave\\n * @notice Base contract implementation of EIP712.\\n */\\nabstract contract EIP712Base {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 internal _domainSeparator;\\n  uint256 internal immutable _chainId;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() {\\n    _chainId = block.chainid;\\n  }\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\\n    if (block.chainid == _chainId) {\\n      return _domainSeparator;\\n    }\\n    return _calculateDomainSeparator();\\n  }\\n\\n  /**\\n   * @notice Returns the nonce value for address specified as parameter\\n   * @param owner The address for which the nonce is being returned\\n   * @return The nonce value for the input address`\\n   */\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n\\n  /**\\n   * @notice Compute the current domain separator\\n   * @return The domain separator for the token\\n   */\\n  function _calculateDomainSeparator() internal view returns (bytes32) {\\n    return\\n      keccak256(\\n        abi.encode(\\n          EIP712_DOMAIN,\\n          keccak256(bytes(_EIP712BaseId())),\\n          keccak256(EIP712_REVISION),\\n          block.chainid,\\n          address(this)\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Returns the user readable name of signing domain (e.g. token name)\\n   * @return The name of the signing domain\\n   */\\n  function _EIP712BaseId() internal view virtual returns (string memory);\\n}\\n\",\"keccak256\":\"0xd4ed5763068be0ffb08219fc2f9f3c87487578cd0617dae06db26018054b89cd\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":10499,"contract":"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":10502,"contract":"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":10572,"contract":"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":27740,"contract":"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_nonces","offset":0,"slot":"52","type":"t_mapping(t_address,t_uint256)"},{"astId":27742,"contract":"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_domainSeparator","offset":0,"slot":"53","type":"t_bytes32"},{"astId":27517,"contract":"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_borrowAllowances","offset":0,"slot":"54","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":27524,"contract":"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_underlyingAsset","offset":0,"slot":"55","type":"t_address"},{"astId":27906,"contract":"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_userState","offset":0,"slot":"56","type":"t_mapping(t_address,t_struct(UserState)27901_storage)"},{"astId":27912,"contract":"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_allowances","offset":0,"slot":"57","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":27914,"contract":"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_totalSupply","offset":0,"slot":"58","type":"t_uint256"},{"astId":27916,"contract":"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_name","offset":0,"slot":"59","type":"t_string_storage"},{"astId":27918,"contract":"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_symbol","offset":0,"slot":"60","type":"t_string_storage"},{"astId":27920,"contract":"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_decimals","offset":0,"slot":"61","type":"t_uint8"},{"astId":27923,"contract":"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_incentivesController","offset":1,"slot":"61","type":"t_contract(IAaveIncentivesController)3875"},{"astId":26081,"contract":"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_timestamps","offset":0,"slot":"62","type":"t_mapping(t_address,t_uint40)"},{"astId":26083,"contract":"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_avgStableRate","offset":0,"slot":"63","type":"t_uint128"},{"astId":26085,"contract":"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"_totalSupplyTimestamp","offset":16,"slot":"63","type":"t_uint40"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IAaveIncentivesController)3875":{"encoding":"inplace","label":"contract IAaveIncentivesController","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(UserState)27901_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct IncentivizedERC20.UserState)","numberOfBytes":"32","value":"t_struct(UserState)27901_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_address,t_uint40)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint40)","numberOfBytes":"32","value":"t_uint40"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(UserState)27901_storage":{"encoding":"inplace","label":"struct IncentivizedERC20.UserState","members":[{"astId":27898,"contract":"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"balance","offset":0,"slot":"0","type":"t_uint128"},{"astId":27900,"contract":"@aave/core-v3/contracts/protocol/tokenization/StableDebtToken.sol:StableDebtToken","label":"additionalData","offset":16,"slot":"0","type":"t_uint128"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint40":{"encoding":"inplace","label":"uint40","numberOfBytes":"5"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"DOMAIN_SEPARATOR()":{"notice":"Get the domain separator for the token"},"UNDERLYING_ASSET_ADDRESS()":{"notice":"Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)"},"approveDelegation(address,uint256)":{"notice":"Delegates borrowing power to a user on the specific debt token. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)"},"borrowAllowance(address,address)":{"notice":"Returns the borrow allowance of the user"},"burn(address,uint256)":{"notice":"Burns debt of `user`"},"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Delegates borrowing power to a user on the specific debt token via ERC712 signature"},"getAverageStableRate()":{"notice":"Returns the average rate of all the stable rate loans."},"getIncentivesController()":{"notice":"Returns the address of the Incentives Controller contract"},"getSupplyData()":{"notice":"Returns the principal, the total supply, the average stable rate and the timestamp for the last update"},"getTotalSupplyAndAvgRate()":{"notice":"Returns the total supply and the average stable rate"},"getTotalSupplyLastUpdated()":{"notice":"Returns the timestamp of the last update of the total supply"},"getUserLastUpdated(address)":{"notice":"Returns the timestamp of the last update of the user"},"getUserStableRate(address)":{"notice":"Returns the stable rate of the user debt"},"initialize(address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the debt token."},"mint(address,address,uint256,uint256)":{"notice":"Mints debt token to the `onBehalfOf` address."},"nonces(address)":{"notice":"Returns the nonce value for address specified as parameter"},"principalBalanceOf(address)":{"notice":"Returns the principal debt balance of the user"},"setIncentivesController(address)":{"notice":"Sets a new Incentives Controller"}},"notice":"Implements a stable debt token to track the borrowing positions of users at stable rate mode","version":1}}},"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol":{"VariableDebtToken":{"abi":[{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"}],"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":"fromUser","type":"address"},{"indexed":true,"internalType":"address","name":"toUser","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BorrowAllowanceDelegated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"underlyingAsset","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"address","name":"incentivesController","type":"address"},{"indexed":false,"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"debtTokenName","type":"string"},{"indexed":false,"internalType":"string","name":"debtTokenSymbol","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Mint","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":"DEBT_TOKEN_REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DELEGATION_WITH_SIG_TYPEHASH","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":"EIP712_REVISION","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNDERLYING_ASSET_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approveDelegation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fromUser","type":"address"},{"internalType":"address","name":"toUser","type":"address"}],"name":"borrowAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"burn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"},{"internalType":"address","name":"delegatee","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":"delegationWithSig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"contract IAaveIncentivesController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getPreviousIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getScaledUserBalanceAndSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"initializingPool","type":"address"},{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"contract IAaveIncentivesController","name":"incentivesController","type":"address"},{"internalType":"uint8","name":"debtTokenDecimals","type":"uint8"},{"internalType":"string","name":"debtTokenName","type":"string"},{"internalType":"string","name":"debtTokenSymbol","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"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":"user","type":"address"}],"name":"scaledBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scaledTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IAaveIncentivesController","name":"controller","type":"address"}],"name":"setIncentivesController","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":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","details":"Transfer and approve functionalities are disabled since its a non-transferable token","kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Return cached value if chainId matches cache, otherwise recomputes separator","returns":{"_0":"The domain separator of the token at current chain"}},"UNDERLYING_ASSET_ADDRESS()":{"returns":{"_0":"The address of the underlying asset"}},"approveDelegation(address,uint256)":{"params":{"amount":"The maximum amount being delegated.","delegatee":"The address receiving the delegated borrowing power"}},"balanceOf(address)":{"details":"Returns the amount of tokens owned by `account`."},"borrowAllowance(address,address)":{"params":{"fromUser":"The user to giving allowance","toUser":"The user to give allowance to"},"returns":{"_0":"The current allowance of `toUser`"}},"burn(address,uint256,uint256)":{"details":"In some instances, a burn transaction will emit a mint event if the amount to burn is less than the interest that the user accrued","params":{"amount":"The amount getting burned","from":"The address from which the debt will be burned","index":"The variable debt index of the reserve"},"returns":{"_0":"The scaled total debt of the reserve"}},"constructor":{"details":"Constructor.","params":{"pool":"The address of the Pool contract"}},"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","delegatee":"The delegatee that can use the credit","delegator":"The delegator of the credit","r":"The R signature param","s":"The S signature param","v":"The V signature param","value":"The amount to be delegated"}},"getIncentivesController()":{"returns":{"_0":"The address of the Incentives Controller"}},"getPreviousIndex(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The last index interest was accrued to the user's balance, expressed in ray"}},"getScaledUserBalanceAndSupply(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The scaled balance of the user","_1":"The scaled total supply"}},"initialize(address,address,address,uint8,string,string,bytes)":{"params":{"debtTokenDecimals":"The decimals of the debtToken, same as the underlying asset's","debtTokenName":"The name of the token","debtTokenSymbol":"The symbol of the token","incentivesController":"The smart contract managing potential incentives distribution","params":"A set of encoded parameters for additional initialization","pool":"The pool contract that is initializing this contract","underlyingAsset":"The address of the underlying asset of this aToken (E.g. WETH for aWETH)"}},"mint(address,address,uint256,uint256)":{"params":{"amount":"The amount of debt being minted","index":"The variable debt index of the reserve","onBehalfOf":"The address receiving the debt tokens","user":"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise"},"returns":{"_0":"True if the previous balance of the user is 0, false otherwise","_1":"The scaled total debt of the reserve"}},"nonces(address)":{"params":{"owner":"The address for which the nonce is being returned"},"returns":{"_0":"The nonce value for the input address`"}},"scaledBalanceOf(address)":{"details":"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update","params":{"user":"The user whose balance is calculated"},"returns":{"_0":"The scaled balance of the user"}},"scaledTotalSupply()":{"returns":{"_0":"The scaled total supply"}},"setIncentivesController(address)":{"params":{"controller":"the new Incentives controller"}},"totalSupply()":{"details":"Returns the amount of tokens in existence."},"transfer(address,uint256)":{"details":"Being non transferrable, the debt token does not implement any of the standard ERC20 functions for transfer and allowance."}},"title":"VariableDebtToken","version":1},"evm":{"bytecode":{"functionDebugData":{"@_27166":{"entryPoint":null,"id":27166,"parameterSlots":1,"returnSlots":0},"@_27531":{"entryPoint":null,"id":27531,"parameterSlots":0,"returnSlots":0},"@_27754":{"entryPoint":null,"id":27754,"parameterSlots":0,"returnSlots":0},"@_27965":{"entryPoint":null,"id":27965,"parameterSlots":4,"returnSlots":0},"@_28380":{"entryPoint":null,"id":28380,"parameterSlots":4,"returnSlots":0},"@_28544":{"entryPoint":null,"id":28544,"parameterSlots":4,"returnSlots":0},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$4860_fromMemory":{"entryPoint":581,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":620,"id":null,"parameterSlots":1,"returnSlots":1},"validator_revert_contract_IPool":{"entryPoint":556,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1110:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"66:86:201","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:201"},"nodeType":"YulFunctionCall","src":"132:12:201"},"nodeType":"YulExpressionStatement","src":"132:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"89:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"100:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"115:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"120:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"111:3:201"},"nodeType":"YulFunctionCall","src":"111:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"124:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"107:3:201"},"nodeType":"YulFunctionCall","src":"107:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"96:3:201"},"nodeType":"YulFunctionCall","src":"96:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"86:2:201"},"nodeType":"YulFunctionCall","src":"86:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"79:6:201"},"nodeType":"YulFunctionCall","src":"79:50:201"},"nodeType":"YulIf","src":"76:70:201"}]},"name":"validator_revert_contract_IPool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"55:5:201","type":""}],"src":"14:138:201"},{"body":{"nodeType":"YulBlock","src":"252:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"298:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"307:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"310:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"300:6:201"},"nodeType":"YulFunctionCall","src":"300:12:201"},"nodeType":"YulExpressionStatement","src":"300:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"273:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"282:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"269:3:201"},"nodeType":"YulFunctionCall","src":"269:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"294:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"265:3:201"},"nodeType":"YulFunctionCall","src":"265:32:201"},"nodeType":"YulIf","src":"262:52:201"},{"nodeType":"YulVariableDeclaration","src":"323:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"342:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"336:5:201"},"nodeType":"YulFunctionCall","src":"336:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"327:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"393:5:201"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"361:31:201"},"nodeType":"YulFunctionCall","src":"361:38:201"},"nodeType":"YulExpressionStatement","src":"361:38:201"},{"nodeType":"YulAssignment","src":"408:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"418:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"408:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$4860_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"218:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"229:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"241:6:201","type":""}],"src":"157:272:201"},{"body":{"nodeType":"YulBlock","src":"546:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"592:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"601:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"604:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"594:6:201"},"nodeType":"YulFunctionCall","src":"594:12:201"},"nodeType":"YulExpressionStatement","src":"594:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"567:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"576:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"563:3:201"},"nodeType":"YulFunctionCall","src":"563:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"588:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"559:3:201"},"nodeType":"YulFunctionCall","src":"559:32:201"},"nodeType":"YulIf","src":"556:52:201"},{"nodeType":"YulVariableDeclaration","src":"617:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"636:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"630:5:201"},"nodeType":"YulFunctionCall","src":"630:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"621:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"687:5:201"}],"functionName":{"name":"validator_revert_contract_IPool","nodeType":"YulIdentifier","src":"655:31:201"},"nodeType":"YulFunctionCall","src":"655:38:201"},"nodeType":"YulExpressionStatement","src":"655:38:201"},{"nodeType":"YulAssignment","src":"702:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"712:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"702:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"512:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"523:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"535:6:201","type":""}],"src":"434:289:201"},{"body":{"nodeType":"YulBlock","src":"783:325:201","statements":[{"nodeType":"YulAssignment","src":"793:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"807:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"810:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"803:3:201"},"nodeType":"YulFunctionCall","src":"803:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"793:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"824:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"854:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"860:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:201"},"nodeType":"YulFunctionCall","src":"850:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"828:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"901:31:201","statements":[{"nodeType":"YulAssignment","src":"903:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"917:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"925:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"913:3:201"},"nodeType":"YulFunctionCall","src":"913:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"903:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"881:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"874:6:201"},"nodeType":"YulFunctionCall","src":"874:26:201"},"nodeType":"YulIf","src":"871:61:201"},{"body":{"nodeType":"YulBlock","src":"991:111:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1012:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1019:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"1024:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1015:3:201"},"nodeType":"YulFunctionCall","src":"1015:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1005:6:201"},"nodeType":"YulFunctionCall","src":"1005:31:201"},"nodeType":"YulExpressionStatement","src":"1005:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1056:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1059:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1049:6:201"},"nodeType":"YulFunctionCall","src":"1049:15:201"},"nodeType":"YulExpressionStatement","src":"1049:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1084:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1087:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1077:6:201"},"nodeType":"YulFunctionCall","src":"1077:15:201"},"nodeType":"YulExpressionStatement","src":"1077:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"947:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"970:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"978:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"967:2:201"},"nodeType":"YulFunctionCall","src":"967:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"944:2:201"},"nodeType":"YulFunctionCall","src":"944:38:201"},"nodeType":"YulIf","src":"941:161:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"763:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"772:6:201","type":""}],"src":"728:380:201"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPool(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$4860_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPool(value)\n        value0 := value\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60e0604052600080553480156200001557600080fd5b50604051620027be380380620027be833981016040819052620000389162000245565b806040518060400160405280601881526020017f5641524941424c455f444542545f544f4b454e5f494d504c00000000000000008152506040518060400160405280601881526020017f5641524941424c455f444542545f544f4b454e5f494d504c0000000000000000815250600083838383838383834660808181525050836001600160a01b0316630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200011c919062000245565b6001600160a01b031660a05282516200013d90603b90602086019062000186565b5081516200015390603c90602085019062000186565b50603d805460ff191660ff9290921691909117905550506001600160a01b031660c05250620002a9975050505050505050565b82805462000194906200026c565b90600052602060002090601f016020900481019282620001b8576000855562000203565b82601f10620001d357805160ff191683800117855562000203565b8280016001018555821562000203579182015b8281111562000203578251825591602001919060010190620001e6565b506200021192915062000215565b5090565b5b8082111562000211576000815560010162000216565b6001600160a01b03811681146200024257600080fd5b50565b6000602082840312156200025857600080fd5b815162000265816200022c565b9392505050565b600181811c908216806200028157607f821691505b60208210811415620002a357634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c0516124bb620003036000396000818161037e01528181610a3901528181610b7f01528181610c4e01528181610e1201528181610f6d015261124d0152600061103901526000610ab801526124bb6000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80637ecebe0011610104578063b9a7b622116100a2578063e075398611610071578063e0753986146104ee578063e655dbd81461054a578063f3bfc7381461055d578063f5298aca1461058457600080fd5b8063b9a7b622146104b2578063c04a8a10146104ba578063c222ec8a146104cd578063dd62ed3e146104e057600080fd5b8063a9059cbb116100de578063a9059cbb146101fd578063b16a19de14610462578063b1bf962d14610480578063b3f1c93d1461048857600080fd5b80637ecebe001461042457806395d89b411461045a578063a457c2d7146101fd57600080fd5b8063313ce5671161017c57806370a082311161014b57806370a08231146103665780637535d2461461037957806375d26413146103c557806378160376146103e857600080fd5b8063313ce567146103035780633644e5151461031857806339509351146101fd5780636bd76d241461032057600080fd5b80630b52d558116101b85780630b52d5581461028257806318160ddd146102975780631da24f3e146102ad57806323b872dd146102f557600080fd5b806306fdde03146101df578063095ea7b3146101fd5780630afbcdc914610220575b600080fd5b6101e7610597565b6040516101f49190611e79565b60405180910390f35b61021061020b366004611ec1565b610629565b60405190151581526020016101f4565b61026d61022e366004611eed565b73ffffffffffffffffffffffffffffffffffffffff16600090815260386020526040902054603a546fffffffffffffffffffffffffffffffff90911691565b604080519283526020830191909152016101f4565b610295610290366004611f1b565b610699565b005b61029f6109ea565b6040519081526020016101f4565b61029f6102bb366004611eed565b73ffffffffffffffffffffffffffffffffffffffff166000908152603860205260409020546fffffffffffffffffffffffffffffffff1690565b61021061020b366004611f89565b603d5460405160ff90911681526020016101f4565b61029f610ab4565b61029f61032e366004611fca565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260366020908152604080832093909416825291909152205490565b61029f610374366004611eed565b610aed565b6103a07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b603d54610100900473ffffffffffffffffffffffffffffffffffffffff166103a0565b6101e76040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b61029f610432366004611eed565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205490565b6101e7610bf8565b60375473ffffffffffffffffffffffffffffffffffffffff166103a0565b61029f610c07565b61049b610496366004612003565b610c12565b6040805192151583526020830191909152016101f4565b61029f600181565b6102956104c8366004611ec1565b610d1b565b6102956104db36600461216c565b610d2a565b61029f61020b366004611fca565b61029f6104fc366004611eed565b73ffffffffffffffffffffffffffffffffffffffff1660009081526038602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b610295610558366004611eed565b611035565b61029f7f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa081565b61029f610592366004612241565b611213565b6060603b80546105a690612276565b80601f01602080910402602001604051908101604052809291908181526020018280546105d290612276565b801561061f5780601f106105f45761010080835404028352916020019161061f565b820191906000526020600020905b81548152906001019060200180831161060257829003601f168201915b5050505050905090565b604080518082018252600281527f3830000000000000000000000000000000000000000000000000000000000000602082015290517f08c379a000000000000000000000000000000000000000000000000000000000815260009161069091600401611e79565b60405180910390fd5b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff881661071b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b50834211156040518060400160405280600281526020017f37380000000000000000000000000000000000000000000000000000000000008152509061078e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b5073ffffffffffffffffffffffffffffffffffffffff8716600090815260346020526040812054906107be610ab4565b604080517f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa0602082015273ffffffffffffffffffffffffffffffffffffffff8b1691810191909152606081018990526080810184905260a0810188905260c001604051602081830303815290604052805190602001206040516020016108769291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa1580156108fc573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f3739000000000000000000000000000000000000000000000000000000000000815250906109a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b506109ae8260016122f9565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603460205260409020556109df8989896112d8565b505050505050505050565b6037546040517f386497fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091610aaf917f00000000000000000000000000000000000000000000000000000000000000009091169063386497fd90602401602060405180830381865afa158015610a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa69190612311565b603a549061134f565b905090565b60007f0000000000000000000000000000000000000000000000000000000000000000461415610ae5575060355490565b610aaf6113a6565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603860205260408120546fffffffffffffffffffffffffffffffff1680610b335750600092915050565b6037546040517f386497fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152610bf1917f0000000000000000000000000000000000000000000000000000000000000000169063386497fd90602401602060405180830381865afa158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190612311565b829061134f565b9392505050565b6060603c80546105a690612276565b6000610aaf603a5490565b60408051808201909152600281527f323300000000000000000000000000000000000000000000000000000000000060208201526000908190337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610cbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610cfa57610cfa85878661146b565b610d068686868661152b565b610d0e610c07565b9150915094509492505050565b610d263383836112d8565b5050565b6001805460ff1680610d3b5750303b155b80610d47575060005481115b610dd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610690565b60015460ff16158015610e1057600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f383700000000000000000000000000000000000000000000000000000000000081525090610ecd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b50610ed78661176c565b610ee08561177f565b603d80546037805473ffffffffffffffffffffffffffffffffffffffff8d81167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179091558a16610100027fffffffffffffffffffffff00000000000000000000000000000000000000000090911660ff8a1617179055610f656113a6565b6035819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f40251fbfb6656cfa65a00d7879029fec1fad21d28fdcff2f4f68f52795b74f2c8a8a8a8a8a8a604051610ff29695949392919061232a565b60405180910390a3801561102957600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c691906123ca565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015611133573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115791906123e7565b6040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250906111c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b5050603d805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152600090337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b506112c88460008585611792565b6112d0610c07565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526036602090815260408083208786168085529083529281902086905560375490518681529416939192917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1910160405180910390a4505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761138457600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6113d1611aaf565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff80841660009081526036602090815260408083209386168352929052908120546114ab908390612409565b73ffffffffffffffffffffffffffffffffffffffff808616600081815260366020908152604080832089861680855292529182902085905560375491519495509216927fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e19061151d9086815260200190565b60405180910390a450505050565b6000806115388484611ab9565b60408051808201909152600281527f32340000000000000000000000000000000000000000000000000000000000006020820152909150816115a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260408120546fffffffffffffffffffffffffffffffff808216929161160491849170010000000000000000000000000000000090041661134f565b61160e838761134f565b6116189190612409565b905061162385611af8565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260386020526040902080546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905561168b8761168685611af8565b611b9e565b600061169782886122f9565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116f991815260200190565b60405180910390a3604080518281526020810184905290810187905273ffffffffffffffffffffffffffffffffffffffff808a1691908b16907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35050159695505050505050565b8051610d2690603b906020840190611d7e565b8051610d2690603c906020840190611d7e565b600061179e8383611ab9565b60408051808201909152600281527f323500000000000000000000000000000000000000000000000000000000000060208201529091508161180d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260408120546fffffffffffffffffffffffffffffffff808216929161186a91849170010000000000000000000000000000000090041661134f565b611874838661134f565b61187e9190612409565b905061188984611af8565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260386020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556118f1876118ec85611af8565b611d1a565b848111156119d05760006119058683612409565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161196791815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff89169081907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a350611aa6565b60006119dc8287612409565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a3e91815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff80891691908a16907f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f909060600160405180910390a3505b50505050505050565b6060610aaf610597565b600081156b033b2e3c9fd0803ce800000060028404190484111715611add57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b60006fffffffffffffffffffffffffffffffff821115611b9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610690565b5090565b603a54611bbd6fffffffffffffffffffffffffffffffff8316826122f9565b603a5573ffffffffffffffffffffffffffffffffffffffff83166000908152603860205260409020546fffffffffffffffffffffffffffffffff16611c028382612420565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260386020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9390931692909217909155603d546101009004168015611d13576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590526fffffffffffffffffffffffffffffffff841660448301528216906331873e2e90606401600060405180830381600087803b158015611cff57600080fd5b505af11580156109df573d6000803e3d6000fd5b5050505050565b603a54611d396fffffffffffffffffffffffffffffffff831682612409565b603a5573ffffffffffffffffffffffffffffffffffffffff83166000908152603860205260409020546fffffffffffffffffffffffffffffffff16611c028382612454565b828054611d8a90612276565b90600052602060002090601f016020900481019282611dac5760008555611df2565b82601f10611dc557805160ff1916838001178555611df2565b82800160010185558215611df2579182015b82811115611df2578251825591602001919060010190611dd7565b50611b9a9291505b80821115611b9a5760008155600101611dfa565b6000815180845260005b81811015611e3457602081850181015186830182015201611e18565b81811115611e46576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bf16020830184611e0e565b73ffffffffffffffffffffffffffffffffffffffff81168114611eae57600080fd5b50565b8035611ebc81611e8c565b919050565b60008060408385031215611ed457600080fd5b8235611edf81611e8c565b946020939093013593505050565b600060208284031215611eff57600080fd5b8135610bf181611e8c565b803560ff81168114611ebc57600080fd5b600080600080600080600060e0888a031215611f3657600080fd5b8735611f4181611e8c565b96506020880135611f5181611e8c565b95506040880135945060608801359350611f6d60808901611f0a565b925060a0880135915060c0880135905092959891949750929550565b600080600060608486031215611f9e57600080fd5b8335611fa981611e8c565b92506020840135611fb981611e8c565b929592945050506040919091013590565b60008060408385031215611fdd57600080fd5b8235611fe881611e8c565b91506020830135611ff881611e8c565b809150509250929050565b6000806000806080858703121561201957600080fd5b843561202481611e8c565b9350602085013561203481611e8c565b93969395505050506040820135916060013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261208957600080fd5b813567ffffffffffffffff808211156120a4576120a4612049565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156120ea576120ea612049565b8160405283815286602085880101111561210357600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008083601f84011261213557600080fd5b50813567ffffffffffffffff81111561214d57600080fd5b60208301915083602082850101111561216557600080fd5b9250929050565b60008060008060008060008060e0898b03121561218857600080fd5b883561219381611e8c565b975060208901356121a381611e8c565b96506121b160408a01611eb1565b95506121bf60608a01611f0a565b9450608089013567ffffffffffffffff808211156121dc57600080fd5b6121e88c838d01612078565b955060a08b01359150808211156121fe57600080fd5b61220a8c838d01612078565b945060c08b013591508082111561222057600080fd5b5061222d8b828c01612123565b999c989b5096995094979396929594505050565b60008060006060848603121561225657600080fd5b833561226181611e8c565b95602085013595506040909401359392505050565b600181811c9082168061228a57607f821691505b602082108114156122c4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561230c5761230c6122ca565b500190565b60006020828403121561232357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8716815260ff8616602082015260a06040820152600061236260a0830187611e0e565b82810360608401526123748187611e0e565b905082810360808401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050979650505050505050565b6000602082840312156123dc57600080fd5b8151610bf181611e8c565b6000602082840312156123f957600080fd5b81518015158114610bf157600080fd5b60008282101561241b5761241b6122ca565b500390565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561244b5761244b6122ca565b01949350505050565b60006fffffffffffffffffffffffffffffffff8381169083168181101561247d5761247d6122ca565b03939250505056fea2646970667358221220b1279939b1b057f25f5dfb0d25b91b649eef1f52cc4f5f5e2b3bf5744770f10a64736f6c634300080a0033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x27BE CODESIZE SUB DUP1 PUSH3 0x27BE DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x38 SWAP2 PUSH3 0x245 JUMP JUMPDEST DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x18 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5641524941424C455F444542545F544F4B454E5F494D504C0000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x18 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5641524941424C455F444542545F544F4B454E5F494D504C0000000000000000 DUP2 MSTORE POP PUSH1 0x0 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 CHAINID PUSH1 0x80 DUP2 DUP2 MSTORE POP POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x542975C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xF6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x11C SWAP2 SWAP1 PUSH3 0x245 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE DUP3 MLOAD PUSH3 0x13D SWAP1 PUSH1 0x3B SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH3 0x186 JUMP JUMPDEST POP DUP2 MLOAD PUSH3 0x153 SWAP1 PUSH1 0x3C SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x186 JUMP JUMPDEST POP PUSH1 0x3D DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xC0 MSTORE POP PUSH3 0x2A9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x194 SWAP1 PUSH3 0x26C JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x1B8 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x203 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x1D3 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x203 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x203 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x203 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x1E6 JUMP JUMPDEST POP PUSH3 0x211 SWAP3 SWAP2 POP PUSH3 0x215 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x211 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x216 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x242 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x258 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x265 DUP2 PUSH3 0x22C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x281 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x2A3 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x24BB PUSH3 0x303 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x37E ADD MSTORE DUP2 DUP2 PUSH2 0xA39 ADD MSTORE DUP2 DUP2 PUSH2 0xB7F ADD MSTORE DUP2 DUP2 PUSH2 0xC4E ADD MSTORE DUP2 DUP2 PUSH2 0xE12 ADD MSTORE DUP2 DUP2 PUSH2 0xF6D ADD MSTORE PUSH2 0x124D ADD MSTORE PUSH1 0x0 PUSH2 0x1039 ADD MSTORE PUSH1 0x0 PUSH2 0xAB8 ADD MSTORE PUSH2 0x24BB 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 0x1DA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xB9A7B622 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xE0753986 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE0753986 EQ PUSH2 0x4EE JUMPI DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x54A JUMPI DUP1 PUSH4 0xF3BFC738 EQ PUSH2 0x55D JUMPI DUP1 PUSH4 0xF5298ACA EQ PUSH2 0x584 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB9A7B622 EQ PUSH2 0x4B2 JUMPI DUP1 PUSH4 0xC04A8A10 EQ PUSH2 0x4BA JUMPI DUP1 PUSH4 0xC222EC8A EQ PUSH2 0x4CD JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x4E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA9059CBB GT PUSH2 0xDE JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x462 JUMPI DUP1 PUSH4 0xB1BF962D EQ PUSH2 0x480 JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x424 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x45A JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0x17C JUMPI DUP1 PUSH4 0x70A08231 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x366 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x379 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x3C5 JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x3E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 EQ PUSH2 0x303 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x318 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0x6BD76D24 EQ PUSH2 0x320 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB52D558 GT PUSH2 0x1B8 JUMPI DUP1 PUSH4 0xB52D558 EQ PUSH2 0x282 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x297 JUMPI DUP1 PUSH4 0x1DA24F3E EQ PUSH2 0x2AD JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1DF JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0xAFBCDC9 EQ PUSH2 0x220 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E7 PUSH2 0x597 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F4 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x210 PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1EC1 JUMP JUMPDEST PUSH2 0x629 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x26D PUSH2 0x22E CALLDATASIZE PUSH1 0x4 PUSH2 0x1EED JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x295 PUSH2 0x290 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F1B JUMP JUMPDEST PUSH2 0x699 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x29F PUSH2 0x9EA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x2BB CALLDATASIZE PUSH1 0x4 PUSH2 0x1EED JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x210 PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1F89 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x29F PUSH2 0xAB4 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x32E CALLDATASIZE PUSH1 0x4 PUSH2 0x1FCA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x374 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EED JUMP JUMPDEST PUSH2 0xAED JUMP JUMPDEST PUSH2 0x3A0 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3A0 JUMP JUMPDEST PUSH2 0x1E7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x432 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EED JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0xBF8 JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3A0 JUMP JUMPDEST PUSH2 0x29F PUSH2 0xC07 JUMP JUMPDEST PUSH2 0x49B PUSH2 0x496 CALLDATASIZE PUSH1 0x4 PUSH2 0x2003 JUMP JUMPDEST PUSH2 0xC12 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x29F PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH2 0x295 PUSH2 0x4C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EC1 JUMP JUMPDEST PUSH2 0xD1B JUMP JUMPDEST PUSH2 0x295 PUSH2 0x4DB CALLDATASIZE PUSH1 0x4 PUSH2 0x216C JUMP JUMPDEST PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x29F PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1FCA JUMP JUMPDEST PUSH2 0x29F PUSH2 0x4FC CALLDATASIZE PUSH1 0x4 PUSH2 0x1EED JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x295 PUSH2 0x558 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EED JUMP JUMPDEST PUSH2 0x1035 JUMP JUMPDEST PUSH2 0x29F PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 DUP2 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x592 CALLDATASIZE PUSH1 0x4 PUSH2 0x2241 JUMP JUMPDEST PUSH2 0x1213 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3B DUP1 SLOAD PUSH2 0x5A6 SWAP1 PUSH2 0x2276 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x5D2 SWAP1 PUSH2 0x2276 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x61F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5F4 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x61F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x602 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3830000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x690 SWAP2 PUSH1 0x4 ADD PUSH2 0x1E79 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x71B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x78E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x7BE PUSH2 0xAB4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x876 SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x9A2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP PUSH2 0x9AE DUP3 PUSH1 0x1 PUSH2 0x22F9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x9DF DUP10 DUP10 DUP10 PUSH2 0x12D8 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH1 0x40 MLOAD PUSH32 0x386497FD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH2 0xAAF SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x386497FD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA82 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAA6 SWAP2 SWAP1 PUSH2 0x2311 JUMP JUMPDEST PUSH1 0x3A SLOAD SWAP1 PUSH2 0x134F JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0xAE5 JUMPI POP PUSH1 0x35 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xAAF PUSH2 0x13A6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 PUSH2 0xB33 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH1 0x40 MLOAD PUSH32 0x386497FD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0xBF1 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x386497FD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBC6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBEA SWAP2 SWAP1 PUSH2 0x2311 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x134F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3C DUP1 SLOAD PUSH2 0x5A6 SWAP1 PUSH2 0x2276 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAAF PUSH1 0x3A SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCBB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCFA JUMPI PUSH2 0xCFA DUP6 DUP8 DUP7 PUSH2 0x146B JUMP JUMPDEST PUSH2 0xD06 DUP7 DUP7 DUP7 DUP7 PUSH2 0x152B JUMP JUMPDEST PUSH2 0xD0E PUSH2 0xC07 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xD26 CALLER DUP4 DUP4 PUSH2 0x12D8 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0xD3B JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0xD47 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0xDD3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x690 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xE10 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xECD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP PUSH2 0xED7 DUP7 PUSH2 0x176C JUMP JUMPDEST PUSH2 0xEE0 DUP6 PUSH2 0x177F JUMP JUMPDEST PUSH1 0x3D DUP1 SLOAD PUSH1 0x37 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE DUP11 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH1 0xFF DUP11 AND OR OR SWAP1 SSTORE PUSH2 0xF65 PUSH2 0x13A6 JUMP JUMPDEST PUSH1 0x35 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x40251FBFB6656CFA65A00D7879029FEC1FAD21D28FDCFF2F4F68F52795B74F2C DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH1 0x40 MLOAD PUSH2 0xFF2 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x232A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0x1029 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10A2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10C6 SWAP2 SWAP1 PUSH2 0x23CA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1133 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1157 SWAP2 SWAP1 PUSH2 0x23E7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x11C5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP POP PUSH1 0x3D DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x12BA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP PUSH2 0x12C8 DUP5 PUSH1 0x0 DUP6 DUP6 PUSH2 0x1792 JUMP JUMPDEST PUSH2 0x12D0 PUSH2 0xC07 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP7 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP7 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP1 MLOAD DUP7 DUP2 MSTORE SWAP5 AND SWAP4 SWAP2 SWAP3 SWAP2 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1384 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x13D1 PUSH2 0x1AAF JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x14AB SWAP1 DUP4 SWAP1 PUSH2 0x2409 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP7 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP2 MLOAD SWAP5 SWAP6 POP SWAP3 AND SWAP3 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP1 PUSH2 0x151D SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1538 DUP5 DUP5 PUSH2 0x1AB9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x15A7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x1604 SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x134F JUMP JUMPDEST PUSH2 0x160E DUP4 DUP8 PUSH2 0x134F JUMP JUMPDEST PUSH2 0x1618 SWAP2 SWAP1 PUSH2 0x2409 JUMP JUMPDEST SWAP1 POP PUSH2 0x1623 DUP6 PUSH2 0x1AF8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x168B DUP8 PUSH2 0x1686 DUP6 PUSH2 0x1AF8 JUMP JUMPDEST PUSH2 0x1B9E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1697 DUP3 DUP9 PUSH2 0x22F9 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x16F9 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 AND SWAP2 SWAP1 DUP12 AND SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP ISZERO SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD26 SWAP1 PUSH1 0x3B SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x1D7E JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD26 SWAP1 PUSH1 0x3C SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x1D7E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x179E DUP4 DUP4 PUSH2 0x1AB9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x180D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x186A SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x134F JUMP JUMPDEST PUSH2 0x1874 DUP4 DUP7 PUSH2 0x134F JUMP JUMPDEST PUSH2 0x187E SWAP2 SWAP1 PUSH2 0x2409 JUMP JUMPDEST SWAP1 POP PUSH2 0x1889 DUP5 PUSH2 0x1AF8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x18F1 DUP8 PUSH2 0x18EC DUP6 PUSH2 0x1AF8 JUMP JUMPDEST PUSH2 0x1D1A JUMP JUMPDEST DUP5 DUP2 GT ISZERO PUSH2 0x19D0 JUMPI PUSH1 0x0 PUSH2 0x1905 DUP7 DUP4 PUSH2 0x2409 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1967 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 DUP2 SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x1AA6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19DC DUP3 DUP8 PUSH2 0x2409 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1A3E SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP2 SWAP1 DUP11 AND SWAP1 PUSH32 0x4CF25BC1D991C17529C25213D3CC0CDA295EEAAD5F13F361969B12EA48015F90 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xAAF PUSH2 0x597 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1ADD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1B9A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x690 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x1BBD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x22F9 JUMP JUMPDEST PUSH1 0x3A SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1C02 DUP4 DUP3 PUSH2 0x2420 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x1D13 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1CFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x1D39 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x2409 JUMP JUMPDEST PUSH1 0x3A SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1C02 DUP4 DUP3 PUSH2 0x2454 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x1D8A SWAP1 PUSH2 0x2276 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x1DAC JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x1DF2 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x1DC5 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x1DF2 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x1DF2 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1DF2 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1DD7 JUMP JUMPDEST POP PUSH2 0x1B9A SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1B9A JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1DFA JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1E34 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x1E18 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x1E46 JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xBF1 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1E0E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1EAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1EBC DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1ED4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1EDF DUP2 PUSH2 0x1E8C 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 0x1EFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xBF1 DUP2 PUSH2 0x1E8C JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1EBC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1F36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x1F41 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x1F51 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x1F6D PUSH1 0x80 DUP10 ADD PUSH2 0x1F0A JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1F9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1FA9 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1FB9 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1FDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1FE8 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1FF8 DUP2 PUSH2 0x1E8C JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2019 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x2024 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x2034 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2089 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x20A4 JUMPI PUSH2 0x20A4 PUSH2 0x2049 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x20EA JUMPI PUSH2 0x20EA PUSH2 0x2049 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x2103 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2135 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x214D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x2165 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xE0 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x2188 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x2193 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x21A3 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP7 POP PUSH2 0x21B1 PUSH1 0x40 DUP11 ADD PUSH2 0x1EB1 JUMP JUMPDEST SWAP6 POP PUSH2 0x21BF PUSH1 0x60 DUP11 ADD PUSH2 0x1F0A JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x21DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x21E8 DUP13 DUP4 DUP14 ADD PUSH2 0x2078 JUMP JUMPDEST SWAP6 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x21FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x220A DUP13 DUP4 DUP14 ADD PUSH2 0x2078 JUMP JUMPDEST SWAP5 POP PUSH1 0xC0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x222D DUP12 DUP3 DUP13 ADD PUSH2 0x2123 JUMP JUMPDEST SWAP10 SWAP13 SWAP9 SWAP12 POP SWAP7 SWAP10 POP SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x2261 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x228A JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x22C4 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x230C JUMPI PUSH2 0x230C PUSH2 0x22CA JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2323 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP2 MSTORE PUSH1 0xFF DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2362 PUSH1 0xA0 DUP4 ADD DUP8 PUSH2 0x1E0E JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x2374 DUP2 DUP8 PUSH2 0x1E0E JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE DUP4 DUP2 MSTORE DUP4 DUP6 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND DUP3 ADD ADD SWAP2 POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x23DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xBF1 DUP2 PUSH2 0x1E8C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x23F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xBF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x241B JUMPI PUSH2 0x241B PUSH2 0x22CA JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x244B JUMPI PUSH2 0x244B PUSH2 0x22CA JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x247D JUMPI PUSH2 0x247D PUSH2 0x22CA JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB1 0x27 SWAP10 CODECOPY 0xB1 0xB0 JUMPI CALLCODE 0x5F 0x5D 0xFB 0xD 0x25 0xB9 SHL PUSH5 0x9EEF1F52CC 0x4F 0x5F 0x5E 0x2B EXTCODESIZE CREATE2 PUSH21 0x4770F10A64736F6C634300080A0033000000000000 ","sourceMap":"1177:3875:100:-:0;;;928:1:71;886:43;;1471:183:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1550:4;988:195:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1612:1:100;1116:4:105;1122;1128:6;1136:8;817:4:104;823;829:6;837:8;630:13:102;619:24;;;;;;2780:4:103;-1:-1:-1;;;;;2780:23:103;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2759:46:103;;;2811:12;;;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;2829:16:103;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;2851:9:103;:20;;-1:-1:-1;;2851:20:103;;;;;;;;;;;;-1:-1:-1;;;;;;;2877:11:103;;;-1:-1:-1;1177:3875:100;;-1:-1:-1;;;;;;;;1177:3875:100;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1177:3875:100;;;-1:-1:-1;1177:3875:100;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:138:201;-1:-1:-1;;;;;96:31:201;;86:42;;76:70;;142:1;139;132:12;76:70;14:138;:::o;157:272::-;241:6;294:2;282:9;273:7;269:23;265:32;262:52;;;310:1;307;300:12;262:52;342:9;336:16;361:38;393:5;361:38;:::i;:::-;418:5;157:272;-1:-1:-1;;;157:272:201:o;728:380::-;807:1;803:12;;;;850;;;871:61;;925:4;917:6;913:17;903:27;;871:61;978:2;970:6;967:14;947:18;944:38;941:161;;;1024:10;1019:3;1015:20;1012:1;1005:31;1059:4;1056:1;1049:15;1087:4;1084:1;1077:15;941:161;;728:380;;;:::o;:::-;1177:3875:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@DEBT_TOKEN_REVISION_27150":{"entryPoint":null,"id":27150,"parameterSlots":0,"returnSlots":0},"@DELEGATION_WITH_SIG_TYPEHASH_27522":{"entryPoint":null,"id":27522,"parameterSlots":0,"returnSlots":0},"@DOMAIN_SEPARATOR_27772":{"entryPoint":2740,"id":27772,"parameterSlots":0,"returnSlots":1},"@EIP712_REVISION_27731":{"entryPoint":null,"id":27731,"parameterSlots":0,"returnSlots":0},"@POOL_27929":{"entryPoint":null,"id":27929,"parameterSlots":0,"returnSlots":0},"@UNDERLYING_ASSET_ADDRESS_27489":{"entryPoint":null,"id":27489,"parameterSlots":0,"returnSlots":1},"@_EIP712BaseId_27380":{"entryPoint":6831,"id":27380,"parameterSlots":0,"returnSlots":1},"@_approveDelegation_27685":{"entryPoint":4824,"id":27685,"parameterSlots":3,"returnSlots":0},"@_burnScaled_28821":{"entryPoint":6034,"id":28821,"parameterSlots":4,"returnSlots":0},"@_burn_28498":{"entryPoint":7450,"id":28498,"parameterSlots":2,"returnSlots":0},"@_calculateDomainSeparator_27815":{"entryPoint":5030,"id":27815,"parameterSlots":0,"returnSlots":1},"@_decreaseBorrowAllowance_27721":{"entryPoint":5227,"id":27721,"parameterSlots":3,"returnSlots":0},"@_mintScaled_28703":{"entryPoint":5419,"id":28703,"parameterSlots":4,"returnSlots":1},"@_mint_28439":{"entryPoint":7070,"id":28439,"parameterSlots":2,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_setDecimals_28348":{"entryPoint":null,"id":28348,"parameterSlots":1,"returnSlots":0},"@_setName_28326":{"entryPoint":5996,"id":28326,"parameterSlots":1,"returnSlots":0},"@_setSymbol_28337":{"entryPoint":6015,"id":28337,"parameterSlots":1,"returnSlots":0},"@allowance_27413":{"entryPoint":null,"id":27413,"parameterSlots":2,"returnSlots":1},"@approveDelegation_27548":{"entryPoint":3355,"id":27548,"parameterSlots":2,"returnSlots":0},"@approve_27429":{"entryPoint":1577,"id":27429,"parameterSlots":2,"returnSlots":1},"@balanceOf_27281":{"entryPoint":2797,"id":27281,"parameterSlots":1,"returnSlots":1},"@balanceOf_28020":{"entryPoint":null,"id":28020,"parameterSlots":1,"returnSlots":1},"@borrowAllowance_27659":{"entryPoint":null,"id":27659,"parameterSlots":2,"returnSlots":1},"@burn_27351":{"entryPoint":4627,"id":27351,"parameterSlots":3,"returnSlots":1},"@decimals_27995":{"entryPoint":null,"id":27995,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_27479":{"entryPoint":null,"id":27479,"parameterSlots":2,"returnSlots":1},"@delegationWithSig_27641":{"entryPoint":1689,"id":27641,"parameterSlots":7,"returnSlots":0},"@getIncentivesController_28030":{"entryPoint":null,"id":28030,"parameterSlots":0,"returnSlots":1},"@getPreviousIndex_28607":{"entryPoint":null,"id":28607,"parameterSlots":1,"returnSlots":1},"@getRevision_27249":{"entryPoint":null,"id":27249,"parameterSlots":0,"returnSlots":1},"@getScaledUserBalanceAndSupply_28580":{"entryPoint":null,"id":28580,"parameterSlots":1,"returnSlots":2},"@increaseAllowance_27463":{"entryPoint":null,"id":27463,"parameterSlots":2,"returnSlots":1},"@initialize_27239":{"entryPoint":3370,"id":27239,"parameterSlots":8,"returnSlots":0},"@isConstructor_10568":{"entryPoint":null,"id":10568,"parameterSlots":0,"returnSlots":1},"@mint_27322":{"entryPoint":3090,"id":27322,"parameterSlots":4,"returnSlots":2},"@name_27975":{"entryPoint":1431,"id":27975,"parameterSlots":0,"returnSlots":1},"@nonces_27785":{"entryPoint":null,"id":27785,"parameterSlots":1,"returnSlots":1},"@rayDiv_21198":{"entryPoint":6841,"id":21198,"parameterSlots":2,"returnSlots":1},"@rayMul_21186":{"entryPoint":4943,"id":21186,"parameterSlots":2,"returnSlots":1},"@scaledBalanceOf_28559":{"entryPoint":null,"id":28559,"parameterSlots":1,"returnSlots":1},"@scaledTotalSupply_28592":{"entryPoint":3079,"id":28592,"parameterSlots":0,"returnSlots":1},"@setIncentivesController_28044":{"entryPoint":4149,"id":28044,"parameterSlots":1,"returnSlots":0},"@symbol_27985":{"entryPoint":3064,"id":27985,"parameterSlots":0,"returnSlots":1},"@toUint128_1626":{"entryPoint":6904,"id":1626,"parameterSlots":1,"returnSlots":1},"@totalSupply_27369":{"entryPoint":2538,"id":27369,"parameterSlots":0,"returnSlots":1},"@totalSupply_28005":{"entryPoint":null,"id":28005,"parameterSlots":0,"returnSlots":1},"@transferFrom_27447":{"entryPoint":null,"id":27447,"parameterSlots":3,"returnSlots":1},"@transfer_27397":{"entryPoint":null,"id":27397,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":7857,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":8483,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_string":{"entryPoint":8312,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":7917,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":9162,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":8138,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":8073,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256":{"entryPoint":8195,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":7963,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":7873,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256t_uint256":{"entryPoint":8769,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":9191,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IAaveIncentivesController_$3875":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPool_$4860t_addresst_contract$_IAaveIncentivesController_$3875t_uint8t_string_memory_ptrt_string_memory_ptrt_bytes_calldata_ptr":{"entryPoint":8556,"id":null,"parameterSlots":2,"returnSlots":8},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":8977,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint8":{"entryPoint":7946,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_string":{"entryPoint":7694,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":9002,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool_t_uint256__to_t_bool_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IAaveIncentivesController_$3875__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":7801,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":9248,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":8953,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint128":{"entryPoint":9300,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":9225,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":8822,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":8906,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":8265,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":7820,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:16003:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"64:481:201","statements":[{"nodeType":"YulVariableDeclaration","src":"74:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"94:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"88:5:201"},"nodeType":"YulFunctionCall","src":"88:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"78:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"116:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"121:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"109:6:201"},"nodeType":"YulFunctionCall","src":"109:19:201"},"nodeType":"YulExpressionStatement","src":"109:19:201"},{"nodeType":"YulVariableDeclaration","src":"137:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"146:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"141:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"208:110:201","statements":[{"nodeType":"YulVariableDeclaration","src":"222:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"232:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"226:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"264:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"269:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"260:3:201"},"nodeType":"YulFunctionCall","src":"260:11:201"},{"name":"_1","nodeType":"YulIdentifier","src":"273:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"256:3:201"},"nodeType":"YulFunctionCall","src":"256:20:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"292:5:201"},{"name":"i","nodeType":"YulIdentifier","src":"299:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"288:3:201"},"nodeType":"YulFunctionCall","src":"288:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"303:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"284:3:201"},"nodeType":"YulFunctionCall","src":"284:22:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"278:5:201"},"nodeType":"YulFunctionCall","src":"278:29:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"249:6:201"},"nodeType":"YulFunctionCall","src":"249:59:201"},"nodeType":"YulExpressionStatement","src":"249:59:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"167:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"170:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"164:2:201"},"nodeType":"YulFunctionCall","src":"164:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"178:21:201","statements":[{"nodeType":"YulAssignment","src":"180:17:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"189:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"192:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"185:3:201"},"nodeType":"YulFunctionCall","src":"185:12:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"180:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"160:3:201","statements":[]},"src":"156:162:201"},{"body":{"nodeType":"YulBlock","src":"352:62:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"381:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"386:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"377:3:201"},"nodeType":"YulFunctionCall","src":"377:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"395:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"373:3:201"},"nodeType":"YulFunctionCall","src":"373:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"402:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"366:6:201"},"nodeType":"YulFunctionCall","src":"366:38:201"},"nodeType":"YulExpressionStatement","src":"366:38:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"333:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"336:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"330:2:201"},"nodeType":"YulFunctionCall","src":"330:13:201"},"nodeType":"YulIf","src":"327:87:201"},{"nodeType":"YulAssignment","src":"423:116:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"438:3:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"451:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"459:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"447:3:201"},"nodeType":"YulFunctionCall","src":"447:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"464:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"443:3:201"},"nodeType":"YulFunctionCall","src":"443:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"434:3:201"},"nodeType":"YulFunctionCall","src":"434:98:201"},{"kind":"number","nodeType":"YulLiteral","src":"534:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"430:3:201"},"nodeType":"YulFunctionCall","src":"430:109:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"423:3:201"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"41:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"48:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"56:3:201","type":""}],"src":"14:531:201"},{"body":{"nodeType":"YulBlock","src":"671:99:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"688:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"699:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"681:6:201"},"nodeType":"YulFunctionCall","src":"681:21:201"},"nodeType":"YulExpressionStatement","src":"681:21:201"},{"nodeType":"YulAssignment","src":"711:53:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"737:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"749:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"760:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"745:3:201"},"nodeType":"YulFunctionCall","src":"745:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"719:17:201"},"nodeType":"YulFunctionCall","src":"719:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"711:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"640:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"651:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"662:4:201","type":""}],"src":"550:220:201"},{"body":{"nodeType":"YulBlock","src":"820:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"907:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"916:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"919:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"909:6:201"},"nodeType":"YulFunctionCall","src":"909:12:201"},"nodeType":"YulExpressionStatement","src":"909:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"843:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"854:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"861:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"850:3:201"},"nodeType":"YulFunctionCall","src":"850:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"840:2:201"},"nodeType":"YulFunctionCall","src":"840:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"833:6:201"},"nodeType":"YulFunctionCall","src":"833:73:201"},"nodeType":"YulIf","src":"830:93:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"809:5:201","type":""}],"src":"775:154:201"},{"body":{"nodeType":"YulBlock","src":"983:85:201","statements":[{"nodeType":"YulAssignment","src":"993:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1015:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1002:12:201"},"nodeType":"YulFunctionCall","src":"1002:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"993:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1056:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1031:24:201"},"nodeType":"YulFunctionCall","src":"1031:31:201"},"nodeType":"YulExpressionStatement","src":"1031:31:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"962:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"973:5:201","type":""}],"src":"934:134:201"},{"body":{"nodeType":"YulBlock","src":"1160:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"1206:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1215:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1218:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1208:6:201"},"nodeType":"YulFunctionCall","src":"1208:12:201"},"nodeType":"YulExpressionStatement","src":"1208:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1181:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1190:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1177:3:201"},"nodeType":"YulFunctionCall","src":"1177:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1202:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1173:3:201"},"nodeType":"YulFunctionCall","src":"1173:32:201"},"nodeType":"YulIf","src":"1170:52:201"},{"nodeType":"YulVariableDeclaration","src":"1231:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1257:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1244:12:201"},"nodeType":"YulFunctionCall","src":"1244:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1235:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1301:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1276:24:201"},"nodeType":"YulFunctionCall","src":"1276:31:201"},"nodeType":"YulExpressionStatement","src":"1276:31:201"},{"nodeType":"YulAssignment","src":"1316:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1326:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1316:6:201"}]},{"nodeType":"YulAssignment","src":"1340:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1367:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1378:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1363:3:201"},"nodeType":"YulFunctionCall","src":"1363:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1350:12:201"},"nodeType":"YulFunctionCall","src":"1350:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1340:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1118:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1129:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1141:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1149:6:201","type":""}],"src":"1073:315:201"},{"body":{"nodeType":"YulBlock","src":"1488:92:201","statements":[{"nodeType":"YulAssignment","src":"1498:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1510:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1521:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1506:3:201"},"nodeType":"YulFunctionCall","src":"1506:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1498:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1540:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1565:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1558:6:201"},"nodeType":"YulFunctionCall","src":"1558:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1551:6:201"},"nodeType":"YulFunctionCall","src":"1551:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1533:6:201"},"nodeType":"YulFunctionCall","src":"1533:41:201"},"nodeType":"YulExpressionStatement","src":"1533:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1457:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1468:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1479:4:201","type":""}],"src":"1393:187:201"},{"body":{"nodeType":"YulBlock","src":"1655:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"1701:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1710:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1713:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1703:6:201"},"nodeType":"YulFunctionCall","src":"1703:12:201"},"nodeType":"YulExpressionStatement","src":"1703:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1676:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1685:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1672:3:201"},"nodeType":"YulFunctionCall","src":"1672:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1697:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1668:3:201"},"nodeType":"YulFunctionCall","src":"1668:32:201"},"nodeType":"YulIf","src":"1665:52:201"},{"nodeType":"YulVariableDeclaration","src":"1726:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1752:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1739:12:201"},"nodeType":"YulFunctionCall","src":"1739:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1730:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1796:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1771:24:201"},"nodeType":"YulFunctionCall","src":"1771:31:201"},"nodeType":"YulExpressionStatement","src":"1771:31:201"},{"nodeType":"YulAssignment","src":"1811:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1821:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1811:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1621:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1632:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1644:6:201","type":""}],"src":"1585:247:201"},{"body":{"nodeType":"YulBlock","src":"1966:119:201","statements":[{"nodeType":"YulAssignment","src":"1976:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1988:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1999:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1984:3:201"},"nodeType":"YulFunctionCall","src":"1984:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1976:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2018:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"2029:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2011:6:201"},"nodeType":"YulFunctionCall","src":"2011:25:201"},"nodeType":"YulExpressionStatement","src":"2011:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2056:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2067:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2052:3:201"},"nodeType":"YulFunctionCall","src":"2052:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"2072:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2045:6:201"},"nodeType":"YulFunctionCall","src":"2045:34:201"},"nodeType":"YulExpressionStatement","src":"2045:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1927:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1938:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1946:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1957:4:201","type":""}],"src":"1837:248:201"},{"body":{"nodeType":"YulBlock","src":"2137:109:201","statements":[{"nodeType":"YulAssignment","src":"2147:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2169:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2156:12:201"},"nodeType":"YulFunctionCall","src":"2156:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"2147:5:201"}]},{"body":{"nodeType":"YulBlock","src":"2224:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2233:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2236:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2226:6:201"},"nodeType":"YulFunctionCall","src":"2226:12:201"},"nodeType":"YulExpressionStatement","src":"2226:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2198:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2209:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2216:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2205:3:201"},"nodeType":"YulFunctionCall","src":"2205:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2195:2:201"},"nodeType":"YulFunctionCall","src":"2195:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2188:6:201"},"nodeType":"YulFunctionCall","src":"2188:35:201"},"nodeType":"YulIf","src":"2185:55:201"}]},"name":"abi_decode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2116:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"2127:5:201","type":""}],"src":"2090:156:201"},{"body":{"nodeType":"YulBlock","src":"2421:564:201","statements":[{"body":{"nodeType":"YulBlock","src":"2468:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2477:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2480:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2470:6:201"},"nodeType":"YulFunctionCall","src":"2470:12:201"},"nodeType":"YulExpressionStatement","src":"2470:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2442:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2451:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2438:3:201"},"nodeType":"YulFunctionCall","src":"2438:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2463:3:201","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2434:3:201"},"nodeType":"YulFunctionCall","src":"2434:33:201"},"nodeType":"YulIf","src":"2431:53:201"},{"nodeType":"YulVariableDeclaration","src":"2493:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2519:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2506:12:201"},"nodeType":"YulFunctionCall","src":"2506:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2497:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2563:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2538:24:201"},"nodeType":"YulFunctionCall","src":"2538:31:201"},"nodeType":"YulExpressionStatement","src":"2538:31:201"},{"nodeType":"YulAssignment","src":"2578:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"2588:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2578:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2602:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2634:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2645:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2630:3:201"},"nodeType":"YulFunctionCall","src":"2630:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2617:12:201"},"nodeType":"YulFunctionCall","src":"2617:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2606:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2683:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2658:24:201"},"nodeType":"YulFunctionCall","src":"2658:33:201"},"nodeType":"YulExpressionStatement","src":"2658:33:201"},{"nodeType":"YulAssignment","src":"2700:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"2710:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2700:6:201"}]},{"nodeType":"YulAssignment","src":"2726:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2753:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2764:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2749:3:201"},"nodeType":"YulFunctionCall","src":"2749:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2736:12:201"},"nodeType":"YulFunctionCall","src":"2736:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2726:6:201"}]},{"nodeType":"YulAssignment","src":"2777:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2804:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2815:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2800:3:201"},"nodeType":"YulFunctionCall","src":"2800:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2787:12:201"},"nodeType":"YulFunctionCall","src":"2787:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2777:6:201"}]},{"nodeType":"YulAssignment","src":"2828:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2859:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2870:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2855:3:201"},"nodeType":"YulFunctionCall","src":"2855:19:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"2838:16:201"},"nodeType":"YulFunctionCall","src":"2838:37:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"2828:6:201"}]},{"nodeType":"YulAssignment","src":"2884:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2911:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2922:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2907:3:201"},"nodeType":"YulFunctionCall","src":"2907:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2894:12:201"},"nodeType":"YulFunctionCall","src":"2894:33:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"2884:6:201"}]},{"nodeType":"YulAssignment","src":"2936:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2963:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2974:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2959:3:201"},"nodeType":"YulFunctionCall","src":"2959:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2946:12:201"},"nodeType":"YulFunctionCall","src":"2946:33:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"2936:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2339:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2350:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2362:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2370:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2378:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2386:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"2394:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"2402:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"2410:6:201","type":""}],"src":"2251:734:201"},{"body":{"nodeType":"YulBlock","src":"3091:76:201","statements":[{"nodeType":"YulAssignment","src":"3101:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3113:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3124:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3109:3:201"},"nodeType":"YulFunctionCall","src":"3109:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3101:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3143:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"3154:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3136:6:201"},"nodeType":"YulFunctionCall","src":"3136:25:201"},"nodeType":"YulExpressionStatement","src":"3136:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3060:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3071:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3082:4:201","type":""}],"src":"2990:177:201"},{"body":{"nodeType":"YulBlock","src":"3276:352:201","statements":[{"body":{"nodeType":"YulBlock","src":"3322:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3331:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3334:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3324:6:201"},"nodeType":"YulFunctionCall","src":"3324:12:201"},"nodeType":"YulExpressionStatement","src":"3324:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3297:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3306:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3293:3:201"},"nodeType":"YulFunctionCall","src":"3293:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3318:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3289:3:201"},"nodeType":"YulFunctionCall","src":"3289:32:201"},"nodeType":"YulIf","src":"3286:52:201"},{"nodeType":"YulVariableDeclaration","src":"3347:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3373:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3360:12:201"},"nodeType":"YulFunctionCall","src":"3360:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3351:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3417:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3392:24:201"},"nodeType":"YulFunctionCall","src":"3392:31:201"},"nodeType":"YulExpressionStatement","src":"3392:31:201"},{"nodeType":"YulAssignment","src":"3432:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3442:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3432:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3456:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3488:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3499:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3484:3:201"},"nodeType":"YulFunctionCall","src":"3484:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3471:12:201"},"nodeType":"YulFunctionCall","src":"3471:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"3460:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3537:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3512:24:201"},"nodeType":"YulFunctionCall","src":"3512:33:201"},"nodeType":"YulExpressionStatement","src":"3512:33:201"},{"nodeType":"YulAssignment","src":"3554:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3564:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3554:6:201"}]},{"nodeType":"YulAssignment","src":"3580:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3607:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3618:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3603:3:201"},"nodeType":"YulFunctionCall","src":"3603:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3590:12:201"},"nodeType":"YulFunctionCall","src":"3590:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3580:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3226:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3237:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3249:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3257:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3265:6:201","type":""}],"src":"3172:456:201"},{"body":{"nodeType":"YulBlock","src":"3730:87:201","statements":[{"nodeType":"YulAssignment","src":"3740:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3752:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3763:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3748:3:201"},"nodeType":"YulFunctionCall","src":"3748:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3740:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3782:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3797:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3805:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3793:3:201"},"nodeType":"YulFunctionCall","src":"3793:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3775:6:201"},"nodeType":"YulFunctionCall","src":"3775:36:201"},"nodeType":"YulExpressionStatement","src":"3775:36:201"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3699:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3710:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3721:4:201","type":""}],"src":"3633:184:201"},{"body":{"nodeType":"YulBlock","src":"3923:76:201","statements":[{"nodeType":"YulAssignment","src":"3933:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3945:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3956:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3941:3:201"},"nodeType":"YulFunctionCall","src":"3941:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3933:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3975:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"3986:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3968:6:201"},"nodeType":"YulFunctionCall","src":"3968:25:201"},"nodeType":"YulExpressionStatement","src":"3968:25:201"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3892:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3903:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3914:4:201","type":""}],"src":"3822:177:201"},{"body":{"nodeType":"YulBlock","src":"4091:301:201","statements":[{"body":{"nodeType":"YulBlock","src":"4137:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4146:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4149:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4139:6:201"},"nodeType":"YulFunctionCall","src":"4139:12:201"},"nodeType":"YulExpressionStatement","src":"4139:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4112:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4121:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4108:3:201"},"nodeType":"YulFunctionCall","src":"4108:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4133:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4104:3:201"},"nodeType":"YulFunctionCall","src":"4104:32:201"},"nodeType":"YulIf","src":"4101:52:201"},{"nodeType":"YulVariableDeclaration","src":"4162:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4188:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4175:12:201"},"nodeType":"YulFunctionCall","src":"4175:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4166:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4232:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4207:24:201"},"nodeType":"YulFunctionCall","src":"4207:31:201"},"nodeType":"YulExpressionStatement","src":"4207:31:201"},{"nodeType":"YulAssignment","src":"4247:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"4257:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4247:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"4271:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4303:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4314:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4299:3:201"},"nodeType":"YulFunctionCall","src":"4299:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4286:12:201"},"nodeType":"YulFunctionCall","src":"4286:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"4275:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"4352:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4327:24:201"},"nodeType":"YulFunctionCall","src":"4327:33:201"},"nodeType":"YulExpressionStatement","src":"4327:33:201"},{"nodeType":"YulAssignment","src":"4369:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"4379:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4369:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4049:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4060:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4072:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4080:6:201","type":""}],"src":"4004:388:201"},{"body":{"nodeType":"YulBlock","src":"4512:125:201","statements":[{"nodeType":"YulAssignment","src":"4522:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4534:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4545:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4530:3:201"},"nodeType":"YulFunctionCall","src":"4530:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4522:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4564:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4579:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4587:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4575:3:201"},"nodeType":"YulFunctionCall","src":"4575:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4557:6:201"},"nodeType":"YulFunctionCall","src":"4557:74:201"},"nodeType":"YulExpressionStatement","src":"4557:74:201"}]},"name":"abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4481:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4492:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4503:4:201","type":""}],"src":"4397:240:201"},{"body":{"nodeType":"YulBlock","src":"4777:125:201","statements":[{"nodeType":"YulAssignment","src":"4787:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4799:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4810:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4795:3:201"},"nodeType":"YulFunctionCall","src":"4795:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4787:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4829:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4844:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4852:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4840:3:201"},"nodeType":"YulFunctionCall","src":"4840:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4822:6:201"},"nodeType":"YulFunctionCall","src":"4822:74:201"},"nodeType":"YulExpressionStatement","src":"4822:74:201"}]},"name":"abi_encode_tuple_t_contract$_IAaveIncentivesController_$3875__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4746:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4757:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4768:4:201","type":""}],"src":"4642:260:201"},{"body":{"nodeType":"YulBlock","src":"5026:99:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5043:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5054:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5036:6:201"},"nodeType":"YulFunctionCall","src":"5036:21:201"},"nodeType":"YulExpressionStatement","src":"5036:21:201"},{"nodeType":"YulAssignment","src":"5066:53:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5092:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5104:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5115:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5100:3:201"},"nodeType":"YulFunctionCall","src":"5100:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"5074:17:201"},"nodeType":"YulFunctionCall","src":"5074:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5066:4:201"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4995:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5006:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5017:4:201","type":""}],"src":"4907:218:201"},{"body":{"nodeType":"YulBlock","src":"5231:125:201","statements":[{"nodeType":"YulAssignment","src":"5241:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5253:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5264:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5249:3:201"},"nodeType":"YulFunctionCall","src":"5249:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5241:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5283:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5298:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5306:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5294:3:201"},"nodeType":"YulFunctionCall","src":"5294:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5276:6:201"},"nodeType":"YulFunctionCall","src":"5276:74:201"},"nodeType":"YulExpressionStatement","src":"5276:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5200:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5211:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5222:4:201","type":""}],"src":"5130:226:201"},{"body":{"nodeType":"YulBlock","src":"5482:404:201","statements":[{"body":{"nodeType":"YulBlock","src":"5529:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5538:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5541:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5531:6:201"},"nodeType":"YulFunctionCall","src":"5531:12:201"},"nodeType":"YulExpressionStatement","src":"5531:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5503:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"5512:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5499:3:201"},"nodeType":"YulFunctionCall","src":"5499:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"5524:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5495:3:201"},"nodeType":"YulFunctionCall","src":"5495:33:201"},"nodeType":"YulIf","src":"5492:53:201"},{"nodeType":"YulVariableDeclaration","src":"5554:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5580:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5567:12:201"},"nodeType":"YulFunctionCall","src":"5567:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5558:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5624:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"5599:24:201"},"nodeType":"YulFunctionCall","src":"5599:31:201"},"nodeType":"YulExpressionStatement","src":"5599:31:201"},{"nodeType":"YulAssignment","src":"5639:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"5649:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5639:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"5663:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5695:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5706:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5691:3:201"},"nodeType":"YulFunctionCall","src":"5691:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5678:12:201"},"nodeType":"YulFunctionCall","src":"5678:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"5667:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"5744:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"5719:24:201"},"nodeType":"YulFunctionCall","src":"5719:33:201"},"nodeType":"YulExpressionStatement","src":"5719:33:201"},{"nodeType":"YulAssignment","src":"5761:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"5771:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5761:6:201"}]},{"nodeType":"YulAssignment","src":"5787:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5814:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5825:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5810:3:201"},"nodeType":"YulFunctionCall","src":"5810:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5797:12:201"},"nodeType":"YulFunctionCall","src":"5797:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"5787:6:201"}]},{"nodeType":"YulAssignment","src":"5838:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5865:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5876:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5861:3:201"},"nodeType":"YulFunctionCall","src":"5861:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5848:12:201"},"nodeType":"YulFunctionCall","src":"5848:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"5838:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5424:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5435:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5447:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5455:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5463:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5471:6:201","type":""}],"src":"5361:525:201"},{"body":{"nodeType":"YulBlock","src":"6014:135:201","statements":[{"nodeType":"YulAssignment","src":"6024:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6036:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6047:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6032:3:201"},"nodeType":"YulFunctionCall","src":"6032:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6024:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6066:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6091:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6084:6:201"},"nodeType":"YulFunctionCall","src":"6084:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6077:6:201"},"nodeType":"YulFunctionCall","src":"6077:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6059:6:201"},"nodeType":"YulFunctionCall","src":"6059:41:201"},"nodeType":"YulExpressionStatement","src":"6059:41:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6120:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6131:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6116:3:201"},"nodeType":"YulFunctionCall","src":"6116:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"6136:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6109:6:201"},"nodeType":"YulFunctionCall","src":"6109:34:201"},"nodeType":"YulExpressionStatement","src":"6109:34:201"}]},"name":"abi_encode_tuple_t_bool_t_uint256__to_t_bool_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5975:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5986:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5994:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6005:4:201","type":""}],"src":"5891:258:201"},{"body":{"nodeType":"YulBlock","src":"6186:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6203:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6206:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6196:6:201"},"nodeType":"YulFunctionCall","src":"6196:88:201"},"nodeType":"YulExpressionStatement","src":"6196:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6300:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6303:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6293:6:201"},"nodeType":"YulFunctionCall","src":"6293:15:201"},"nodeType":"YulExpressionStatement","src":"6293:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6324:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6327:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6317:6:201"},"nodeType":"YulFunctionCall","src":"6317:15:201"},"nodeType":"YulExpressionStatement","src":"6317:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"6154:184:201"},{"body":{"nodeType":"YulBlock","src":"6396:725:201","statements":[{"body":{"nodeType":"YulBlock","src":"6445:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6454:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6457:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6447:6:201"},"nodeType":"YulFunctionCall","src":"6447:12:201"},"nodeType":"YulExpressionStatement","src":"6447:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6424:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"6432:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6420:3:201"},"nodeType":"YulFunctionCall","src":"6420:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"6439:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6416:3:201"},"nodeType":"YulFunctionCall","src":"6416:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6409:6:201"},"nodeType":"YulFunctionCall","src":"6409:35:201"},"nodeType":"YulIf","src":"6406:55:201"},{"nodeType":"YulVariableDeclaration","src":"6470:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6493:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6480:12:201"},"nodeType":"YulFunctionCall","src":"6480:20:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6474:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6509:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6519:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"6513:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"6560:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"6562:16:201"},"nodeType":"YulFunctionCall","src":"6562:18:201"},"nodeType":"YulExpressionStatement","src":"6562:18:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"6552:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"6556:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6549:2:201"},"nodeType":"YulFunctionCall","src":"6549:10:201"},"nodeType":"YulIf","src":"6546:36:201"},{"nodeType":"YulVariableDeclaration","src":"6591:76:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6601:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"6595:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6676:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6696:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6690:5:201"},"nodeType":"YulFunctionCall","src":"6690:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"6680:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6708:71:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6730:6:201"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"6754:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"6758:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6750:3:201"},"nodeType":"YulFunctionCall","src":"6750:13:201"},{"name":"_3","nodeType":"YulIdentifier","src":"6765:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6746:3:201"},"nodeType":"YulFunctionCall","src":"6746:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"6770:2:201","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6742:3:201"},"nodeType":"YulFunctionCall","src":"6742:31:201"},{"name":"_3","nodeType":"YulIdentifier","src":"6775:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6738:3:201"},"nodeType":"YulFunctionCall","src":"6738:40:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6726:3:201"},"nodeType":"YulFunctionCall","src":"6726:53:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"6712:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"6838:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"6840:16:201"},"nodeType":"YulFunctionCall","src":"6840:18:201"},"nodeType":"YulExpressionStatement","src":"6840:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6797:10:201"},{"name":"_2","nodeType":"YulIdentifier","src":"6809:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6794:2:201"},"nodeType":"YulFunctionCall","src":"6794:18:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6817:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"6829:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6814:2:201"},"nodeType":"YulFunctionCall","src":"6814:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"6791:2:201"},"nodeType":"YulFunctionCall","src":"6791:46:201"},"nodeType":"YulIf","src":"6788:72:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6876:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6880:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6869:6:201"},"nodeType":"YulFunctionCall","src":"6869:22:201"},"nodeType":"YulExpressionStatement","src":"6869:22:201"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6907:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6915:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6900:6:201"},"nodeType":"YulFunctionCall","src":"6900:18:201"},"nodeType":"YulExpressionStatement","src":"6900:18:201"},{"body":{"nodeType":"YulBlock","src":"6966:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6975:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6978:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6968:6:201"},"nodeType":"YulFunctionCall","src":"6968:12:201"},"nodeType":"YulExpressionStatement","src":"6968:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6941:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6949:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6937:3:201"},"nodeType":"YulFunctionCall","src":"6937:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"6954:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6933:3:201"},"nodeType":"YulFunctionCall","src":"6933:26:201"},{"name":"end","nodeType":"YulIdentifier","src":"6961:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6930:2:201"},"nodeType":"YulFunctionCall","src":"6930:35:201"},"nodeType":"YulIf","src":"6927:55:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7008:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7016:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7004:3:201"},"nodeType":"YulFunctionCall","src":"7004:17:201"},{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7027:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7035:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7023:3:201"},"nodeType":"YulFunctionCall","src":"7023:17:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7042:2:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"6991:12:201"},"nodeType":"YulFunctionCall","src":"6991:54:201"},"nodeType":"YulExpressionStatement","src":"6991:54:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7069:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7077:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7065:3:201"},"nodeType":"YulFunctionCall","src":"7065:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"7082:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7061:3:201"},"nodeType":"YulFunctionCall","src":"7061:26:201"},{"kind":"number","nodeType":"YulLiteral","src":"7089:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7054:6:201"},"nodeType":"YulFunctionCall","src":"7054:37:201"},"nodeType":"YulExpressionStatement","src":"7054:37:201"},{"nodeType":"YulAssignment","src":"7100:15:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"7109:6:201"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"7100:5:201"}]}]},"name":"abi_decode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"6370:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"6378:3:201","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"6386:5:201","type":""}],"src":"6343:778:201"},{"body":{"nodeType":"YulBlock","src":"7198:275:201","statements":[{"body":{"nodeType":"YulBlock","src":"7247:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7256:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7259:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7249:6:201"},"nodeType":"YulFunctionCall","src":"7249:12:201"},"nodeType":"YulExpressionStatement","src":"7249:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7226:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7234:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7222:3:201"},"nodeType":"YulFunctionCall","src":"7222:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"7241:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7218:3:201"},"nodeType":"YulFunctionCall","src":"7218:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7211:6:201"},"nodeType":"YulFunctionCall","src":"7211:35:201"},"nodeType":"YulIf","src":"7208:55:201"},{"nodeType":"YulAssignment","src":"7272:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7295:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7282:12:201"},"nodeType":"YulFunctionCall","src":"7282:20:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"7272:6:201"}]},{"body":{"nodeType":"YulBlock","src":"7345:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7354:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7357:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7347:6:201"},"nodeType":"YulFunctionCall","src":"7347:12:201"},"nodeType":"YulExpressionStatement","src":"7347:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"7317:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7325:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7314:2:201"},"nodeType":"YulFunctionCall","src":"7314:30:201"},"nodeType":"YulIf","src":"7311:50:201"},{"nodeType":"YulAssignment","src":"7370:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7386:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7394:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7382:3:201"},"nodeType":"YulFunctionCall","src":"7382:17:201"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"7370:8:201"}]},{"body":{"nodeType":"YulBlock","src":"7451:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7460:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7463:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7453:6:201"},"nodeType":"YulFunctionCall","src":"7453:12:201"},"nodeType":"YulExpressionStatement","src":"7453:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7422:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"7430:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7418:3:201"},"nodeType":"YulFunctionCall","src":"7418:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"7439:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7414:3:201"},"nodeType":"YulFunctionCall","src":"7414:30:201"},{"name":"end","nodeType":"YulIdentifier","src":"7446:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7411:2:201"},"nodeType":"YulFunctionCall","src":"7411:39:201"},"nodeType":"YulIf","src":"7408:59:201"}]},"name":"abi_decode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"7161:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"7169:3:201","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"7177:8:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"7187:6:201","type":""}],"src":"7126:347:201"},{"body":{"nodeType":"YulBlock","src":"7735:1045:201","statements":[{"body":{"nodeType":"YulBlock","src":"7782:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7791:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7794:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7784:6:201"},"nodeType":"YulFunctionCall","src":"7784:12:201"},"nodeType":"YulExpressionStatement","src":"7784:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7756:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"7765:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7752:3:201"},"nodeType":"YulFunctionCall","src":"7752:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"7777:3:201","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7748:3:201"},"nodeType":"YulFunctionCall","src":"7748:33:201"},"nodeType":"YulIf","src":"7745:53:201"},{"nodeType":"YulVariableDeclaration","src":"7807:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7833:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7820:12:201"},"nodeType":"YulFunctionCall","src":"7820:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7811:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7877:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7852:24:201"},"nodeType":"YulFunctionCall","src":"7852:31:201"},"nodeType":"YulExpressionStatement","src":"7852:31:201"},{"nodeType":"YulAssignment","src":"7892:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"7902:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7892:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"7916:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7948:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7959:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7944:3:201"},"nodeType":"YulFunctionCall","src":"7944:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7931:12:201"},"nodeType":"YulFunctionCall","src":"7931:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7920:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7997:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7972:24:201"},"nodeType":"YulFunctionCall","src":"7972:33:201"},"nodeType":"YulExpressionStatement","src":"7972:33:201"},{"nodeType":"YulAssignment","src":"8014:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"8024:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"8014:6:201"}]},{"nodeType":"YulAssignment","src":"8040:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8073:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8084:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8069:3:201"},"nodeType":"YulFunctionCall","src":"8069:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"8050:18:201"},"nodeType":"YulFunctionCall","src":"8050:38:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"8040:6:201"}]},{"nodeType":"YulAssignment","src":"8097:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8128:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8139:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8124:3:201"},"nodeType":"YulFunctionCall","src":"8124:18:201"}],"functionName":{"name":"abi_decode_uint8","nodeType":"YulIdentifier","src":"8107:16:201"},"nodeType":"YulFunctionCall","src":"8107:36:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"8097:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"8152:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8183:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8194:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8179:3:201"},"nodeType":"YulFunctionCall","src":"8179:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8166:12:201"},"nodeType":"YulFunctionCall","src":"8166:33:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"8156:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8208:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8218:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8212:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"8263:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8272:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8275:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8265:6:201"},"nodeType":"YulFunctionCall","src":"8265:12:201"},"nodeType":"YulExpressionStatement","src":"8265:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8251:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"8259:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8248:2:201"},"nodeType":"YulFunctionCall","src":"8248:14:201"},"nodeType":"YulIf","src":"8245:34:201"},{"nodeType":"YulAssignment","src":"8288:60:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8320:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"8331:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8316:3:201"},"nodeType":"YulFunctionCall","src":"8316:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"8340:7:201"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"8298:17:201"},"nodeType":"YulFunctionCall","src":"8298:50:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"8288:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"8357:49:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8390:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8401:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8386:3:201"},"nodeType":"YulFunctionCall","src":"8386:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8373:12:201"},"nodeType":"YulFunctionCall","src":"8373:33:201"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"8361:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"8435:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8444:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8447:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8437:6:201"},"nodeType":"YulFunctionCall","src":"8437:12:201"},"nodeType":"YulExpressionStatement","src":"8437:12:201"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"8421:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"8431:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8418:2:201"},"nodeType":"YulFunctionCall","src":"8418:16:201"},"nodeType":"YulIf","src":"8415:36:201"},{"nodeType":"YulAssignment","src":"8460:62:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8492:9:201"},{"name":"offset_1","nodeType":"YulIdentifier","src":"8503:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8488:3:201"},"nodeType":"YulFunctionCall","src":"8488:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"8514:7:201"}],"functionName":{"name":"abi_decode_string","nodeType":"YulIdentifier","src":"8470:17:201"},"nodeType":"YulFunctionCall","src":"8470:52:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"8460:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"8531:49:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8564:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8575:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8560:3:201"},"nodeType":"YulFunctionCall","src":"8560:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8547:12:201"},"nodeType":"YulFunctionCall","src":"8547:33:201"},"variables":[{"name":"offset_2","nodeType":"YulTypedName","src":"8535:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"8609:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8618:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8621:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8611:6:201"},"nodeType":"YulFunctionCall","src":"8611:12:201"},"nodeType":"YulExpressionStatement","src":"8611:12:201"}]},"condition":{"arguments":[{"name":"offset_2","nodeType":"YulIdentifier","src":"8595:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"8605:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8592:2:201"},"nodeType":"YulFunctionCall","src":"8592:16:201"},"nodeType":"YulIf","src":"8589:36:201"},{"nodeType":"YulVariableDeclaration","src":"8634:86:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8690:9:201"},{"name":"offset_2","nodeType":"YulIdentifier","src":"8701:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8686:3:201"},"nodeType":"YulFunctionCall","src":"8686:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"8712:7:201"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"8660:25:201"},"nodeType":"YulFunctionCall","src":"8660:60:201"},"variables":[{"name":"value6_1","nodeType":"YulTypedName","src":"8638:8:201","type":""},{"name":"value7_1","nodeType":"YulTypedName","src":"8648:8:201","type":""}]},{"nodeType":"YulAssignment","src":"8729:18:201","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"8739:8:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"8729:6:201"}]},{"nodeType":"YulAssignment","src":"8756:18:201","value":{"name":"value7_1","nodeType":"YulIdentifier","src":"8766:8:201"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"8756:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPool_$4860t_addresst_contract$_IAaveIncentivesController_$3875t_uint8t_string_memory_ptrt_string_memory_ptrt_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7645:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7656:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7668:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7676:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7684:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"7692:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"7700:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"7708:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"7716:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"7724:6:201","type":""}],"src":"7478:1302:201"},{"body":{"nodeType":"YulBlock","src":"8889:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"8935:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8944:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8947:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8937:6:201"},"nodeType":"YulFunctionCall","src":"8937:12:201"},"nodeType":"YulExpressionStatement","src":"8937:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8910:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"8919:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8906:3:201"},"nodeType":"YulFunctionCall","src":"8906:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"8931:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8902:3:201"},"nodeType":"YulFunctionCall","src":"8902:32:201"},"nodeType":"YulIf","src":"8899:52:201"},{"nodeType":"YulVariableDeclaration","src":"8960:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8986:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8973:12:201"},"nodeType":"YulFunctionCall","src":"8973:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"8964:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9030:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9005:24:201"},"nodeType":"YulFunctionCall","src":"9005:31:201"},"nodeType":"YulExpressionStatement","src":"9005:31:201"},{"nodeType":"YulAssignment","src":"9045:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"9055:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9045:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IAaveIncentivesController_$3875","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8855:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8866:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8878:6:201","type":""}],"src":"8785:281:201"},{"body":{"nodeType":"YulBlock","src":"9175:279:201","statements":[{"body":{"nodeType":"YulBlock","src":"9221:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9230:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9233:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9223:6:201"},"nodeType":"YulFunctionCall","src":"9223:12:201"},"nodeType":"YulExpressionStatement","src":"9223:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9196:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"9205:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9192:3:201"},"nodeType":"YulFunctionCall","src":"9192:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"9217:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9188:3:201"},"nodeType":"YulFunctionCall","src":"9188:32:201"},"nodeType":"YulIf","src":"9185:52:201"},{"nodeType":"YulVariableDeclaration","src":"9246:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9272:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9259:12:201"},"nodeType":"YulFunctionCall","src":"9259:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9250:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9316:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"9291:24:201"},"nodeType":"YulFunctionCall","src":"9291:31:201"},"nodeType":"YulExpressionStatement","src":"9291:31:201"},{"nodeType":"YulAssignment","src":"9331:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"9341:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9331:6:201"}]},{"nodeType":"YulAssignment","src":"9355:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9382:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9393:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9378:3:201"},"nodeType":"YulFunctionCall","src":"9378:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9365:12:201"},"nodeType":"YulFunctionCall","src":"9365:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"9355:6:201"}]},{"nodeType":"YulAssignment","src":"9406:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9433:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9444:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9429:3:201"},"nodeType":"YulFunctionCall","src":"9429:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9416:12:201"},"nodeType":"YulFunctionCall","src":"9416:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"9406:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9125:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9136:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9148:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9156:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9164:6:201","type":""}],"src":"9071:383:201"},{"body":{"nodeType":"YulBlock","src":"9514:382:201","statements":[{"nodeType":"YulAssignment","src":"9524:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9538:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"9541:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"9534:3:201"},"nodeType":"YulFunctionCall","src":"9534:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"9524:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"9555:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"9585:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"9591:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9581:3:201"},"nodeType":"YulFunctionCall","src":"9581:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"9559:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"9632:31:201","statements":[{"nodeType":"YulAssignment","src":"9634:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9648:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"9656:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9644:3:201"},"nodeType":"YulFunctionCall","src":"9644:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"9634:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"9612:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9605:6:201"},"nodeType":"YulFunctionCall","src":"9605:26:201"},"nodeType":"YulIf","src":"9602:61:201"},{"body":{"nodeType":"YulBlock","src":"9722:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9743:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9746:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9736:6:201"},"nodeType":"YulFunctionCall","src":"9736:88:201"},"nodeType":"YulExpressionStatement","src":"9736:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9844:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"9847:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9837:6:201"},"nodeType":"YulFunctionCall","src":"9837:15:201"},"nodeType":"YulExpressionStatement","src":"9837:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9872:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9875:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9865:6:201"},"nodeType":"YulFunctionCall","src":"9865:15:201"},"nodeType":"YulExpressionStatement","src":"9865:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"9678:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"9701:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"9709:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9698:2:201"},"nodeType":"YulFunctionCall","src":"9698:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"9675:2:201"},"nodeType":"YulFunctionCall","src":"9675:38:201"},"nodeType":"YulIf","src":"9672:218:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"9494:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"9503:6:201","type":""}],"src":"9459:437:201"},{"body":{"nodeType":"YulBlock","src":"10114:299:201","statements":[{"nodeType":"YulAssignment","src":"10124:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10136:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10147:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10132:3:201"},"nodeType":"YulFunctionCall","src":"10132:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10124:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10167:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"10178:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10160:6:201"},"nodeType":"YulFunctionCall","src":"10160:25:201"},"nodeType":"YulExpressionStatement","src":"10160:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10205:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10216:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10201:3:201"},"nodeType":"YulFunctionCall","src":"10201:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10225:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10233:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10221:3:201"},"nodeType":"YulFunctionCall","src":"10221:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10194:6:201"},"nodeType":"YulFunctionCall","src":"10194:83:201"},"nodeType":"YulExpressionStatement","src":"10194:83:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10297:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10308:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10293:3:201"},"nodeType":"YulFunctionCall","src":"10293:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"10313:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10286:6:201"},"nodeType":"YulFunctionCall","src":"10286:34:201"},"nodeType":"YulExpressionStatement","src":"10286:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10340:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10351:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10336:3:201"},"nodeType":"YulFunctionCall","src":"10336:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"10356:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10329:6:201"},"nodeType":"YulFunctionCall","src":"10329:34:201"},"nodeType":"YulExpressionStatement","src":"10329:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10383:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10394:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10379:3:201"},"nodeType":"YulFunctionCall","src":"10379:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"10400:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10372:6:201"},"nodeType":"YulFunctionCall","src":"10372:35:201"},"nodeType":"YulExpressionStatement","src":"10372:35:201"}]},"name":"abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10051:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"10062:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"10070:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10078:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10086:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10094:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10105:4:201","type":""}],"src":"9901:512:201"},{"body":{"nodeType":"YulBlock","src":"10666:196:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10683:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"10688:66:201","type":"","value":"0x1901000000000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10676:6:201"},"nodeType":"YulFunctionCall","src":"10676:79:201"},"nodeType":"YulExpressionStatement","src":"10676:79:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10775:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"10780:1:201","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10771:3:201"},"nodeType":"YulFunctionCall","src":"10771:11:201"},{"name":"value0","nodeType":"YulIdentifier","src":"10784:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10764:6:201"},"nodeType":"YulFunctionCall","src":"10764:27:201"},"nodeType":"YulExpressionStatement","src":"10764:27:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10811:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"10816:2:201","type":"","value":"34"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10807:3:201"},"nodeType":"YulFunctionCall","src":"10807:12:201"},{"name":"value1","nodeType":"YulIdentifier","src":"10821:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10800:6:201"},"nodeType":"YulFunctionCall","src":"10800:28:201"},"nodeType":"YulExpressionStatement","src":"10800:28:201"},{"nodeType":"YulAssignment","src":"10837:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10848:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"10853:2:201","type":"","value":"66"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10844:3:201"},"nodeType":"YulFunctionCall","src":"10844:12:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"10837:3:201"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"10634:3:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10639:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10647:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"10658:3:201","type":""}],"src":"10418:444:201"},{"body":{"nodeType":"YulBlock","src":"11048:217:201","statements":[{"nodeType":"YulAssignment","src":"11058:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11070:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11081:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11066:3:201"},"nodeType":"YulFunctionCall","src":"11066:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11058:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11101:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"11112:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11094:6:201"},"nodeType":"YulFunctionCall","src":"11094:25:201"},"nodeType":"YulExpressionStatement","src":"11094:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11139:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11150:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11135:3:201"},"nodeType":"YulFunctionCall","src":"11135:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11159:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"11167:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11155:3:201"},"nodeType":"YulFunctionCall","src":"11155:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11128:6:201"},"nodeType":"YulFunctionCall","src":"11128:45:201"},"nodeType":"YulExpressionStatement","src":"11128:45:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11193:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11204:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11189:3:201"},"nodeType":"YulFunctionCall","src":"11189:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"11209:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11182:6:201"},"nodeType":"YulFunctionCall","src":"11182:34:201"},"nodeType":"YulExpressionStatement","src":"11182:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11236:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11247:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11232:3:201"},"nodeType":"YulFunctionCall","src":"11232:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"11252:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11225:6:201"},"nodeType":"YulFunctionCall","src":"11225:34:201"},"nodeType":"YulExpressionStatement","src":"11225:34:201"}]},"name":"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10993:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11004:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11012:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11020:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11028:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11039:4:201","type":""}],"src":"10867:398:201"},{"body":{"nodeType":"YulBlock","src":"11302:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11319:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11322:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11312:6:201"},"nodeType":"YulFunctionCall","src":"11312:88:201"},"nodeType":"YulExpressionStatement","src":"11312:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11416:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"11419:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11409:6:201"},"nodeType":"YulFunctionCall","src":"11409:15:201"},"nodeType":"YulExpressionStatement","src":"11409:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11440:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11443:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11433:6:201"},"nodeType":"YulFunctionCall","src":"11433:15:201"},"nodeType":"YulExpressionStatement","src":"11433:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"11270:184:201"},{"body":{"nodeType":"YulBlock","src":"11507:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"11534:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"11536:16:201"},"nodeType":"YulFunctionCall","src":"11536:18:201"},"nodeType":"YulExpressionStatement","src":"11536:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11523:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"11530:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"11526:3:201"},"nodeType":"YulFunctionCall","src":"11526:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11520:2:201"},"nodeType":"YulFunctionCall","src":"11520:13:201"},"nodeType":"YulIf","src":"11517:39:201"},{"nodeType":"YulAssignment","src":"11565:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"11576:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"11579:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11572:3:201"},"nodeType":"YulFunctionCall","src":"11572:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"11565:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"11490:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"11493:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"11499:3:201","type":""}],"src":"11459:128:201"},{"body":{"nodeType":"YulBlock","src":"11673:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"11719:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11728:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11731:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11721:6:201"},"nodeType":"YulFunctionCall","src":"11721:12:201"},"nodeType":"YulExpressionStatement","src":"11721:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11694:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"11703:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11690:3:201"},"nodeType":"YulFunctionCall","src":"11690:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"11715:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11686:3:201"},"nodeType":"YulFunctionCall","src":"11686:32:201"},"nodeType":"YulIf","src":"11683:52:201"},{"nodeType":"YulAssignment","src":"11744:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11760:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11754:5:201"},"nodeType":"YulFunctionCall","src":"11754:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11744:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11639:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11650:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11662:6:201","type":""}],"src":"11592:184:201"},{"body":{"nodeType":"YulBlock","src":"11955:236:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11972:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11983:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11965:6:201"},"nodeType":"YulFunctionCall","src":"11965:21:201"},"nodeType":"YulExpressionStatement","src":"11965:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12006:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12017:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12002:3:201"},"nodeType":"YulFunctionCall","src":"12002:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"12022:2:201","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11995:6:201"},"nodeType":"YulFunctionCall","src":"11995:30:201"},"nodeType":"YulExpressionStatement","src":"11995:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12045:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12056:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12041:3:201"},"nodeType":"YulFunctionCall","src":"12041:18:201"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"12061:34:201","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12034:6:201"},"nodeType":"YulFunctionCall","src":"12034:62:201"},"nodeType":"YulExpressionStatement","src":"12034:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12116:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12127:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12112:3:201"},"nodeType":"YulFunctionCall","src":"12112:18:201"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"12132:16:201","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12105:6:201"},"nodeType":"YulFunctionCall","src":"12105:44:201"},"nodeType":"YulExpressionStatement","src":"12105:44:201"},{"nodeType":"YulAssignment","src":"12158:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12170:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12181:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12166:3:201"},"nodeType":"YulFunctionCall","src":"12166:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12158:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11932:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11946:4:201","type":""}],"src":"11781:410:201"},{"body":{"nodeType":"YulBlock","src":"12473:688:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12490:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12505:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"12513:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12501:3:201"},"nodeType":"YulFunctionCall","src":"12501:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12483:6:201"},"nodeType":"YulFunctionCall","src":"12483:74:201"},"nodeType":"YulExpressionStatement","src":"12483:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12577:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12588:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12573:3:201"},"nodeType":"YulFunctionCall","src":"12573:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12597:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"12605:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12593:3:201"},"nodeType":"YulFunctionCall","src":"12593:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12566:6:201"},"nodeType":"YulFunctionCall","src":"12566:45:201"},"nodeType":"YulExpressionStatement","src":"12566:45:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12631:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12642:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12627:3:201"},"nodeType":"YulFunctionCall","src":"12627:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"12647:3:201","type":"","value":"160"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12620:6:201"},"nodeType":"YulFunctionCall","src":"12620:31:201"},"nodeType":"YulExpressionStatement","src":"12620:31:201"},{"nodeType":"YulVariableDeclaration","src":"12660:60:201","value":{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"12692:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12704:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12715:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12700:3:201"},"nodeType":"YulFunctionCall","src":"12700:19:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"12674:17:201"},"nodeType":"YulFunctionCall","src":"12674:46:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"12664:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12740:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12751:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12736:3:201"},"nodeType":"YulFunctionCall","src":"12736:18:201"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"12760:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"12768:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12756:3:201"},"nodeType":"YulFunctionCall","src":"12756:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12729:6:201"},"nodeType":"YulFunctionCall","src":"12729:50:201"},"nodeType":"YulExpressionStatement","src":"12729:50:201"},{"nodeType":"YulVariableDeclaration","src":"12788:47:201","value":{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"12820:6:201"},{"name":"tail_1","nodeType":"YulIdentifier","src":"12828:6:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"12802:17:201"},"nodeType":"YulFunctionCall","src":"12802:33:201"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"12792:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12855:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12866:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12851:3:201"},"nodeType":"YulFunctionCall","src":"12851:19:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"12876:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"12884:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12872:3:201"},"nodeType":"YulFunctionCall","src":"12872:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12844:6:201"},"nodeType":"YulFunctionCall","src":"12844:51:201"},"nodeType":"YulExpressionStatement","src":"12844:51:201"},{"expression":{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"12911:6:201"},{"name":"value5","nodeType":"YulIdentifier","src":"12919:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12904:6:201"},"nodeType":"YulFunctionCall","src":"12904:22:201"},"nodeType":"YulExpressionStatement","src":"12904:22:201"},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"12952:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"12960:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12948:3:201"},"nodeType":"YulFunctionCall","src":"12948:15:201"},{"name":"value4","nodeType":"YulIdentifier","src":"12965:6:201"},{"name":"value5","nodeType":"YulIdentifier","src":"12973:6:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"12935:12:201"},"nodeType":"YulFunctionCall","src":"12935:45:201"},"nodeType":"YulExpressionStatement","src":"12935:45:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"13004:6:201"},{"name":"value5","nodeType":"YulIdentifier","src":"13012:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13000:3:201"},"nodeType":"YulFunctionCall","src":"13000:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"13021:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12996:3:201"},"nodeType":"YulFunctionCall","src":"12996:28:201"},{"kind":"number","nodeType":"YulLiteral","src":"13026:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12989:6:201"},"nodeType":"YulFunctionCall","src":"12989:39:201"},"nodeType":"YulExpressionStatement","src":"12989:39:201"},{"nodeType":"YulAssignment","src":"13037:118:201","value":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"13053:6:201"},{"arguments":[{"arguments":[{"name":"value5","nodeType":"YulIdentifier","src":"13069:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13077:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13065:3:201"},"nodeType":"YulFunctionCall","src":"13065:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"13082:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13061:3:201"},"nodeType":"YulFunctionCall","src":"13061:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13049:3:201"},"nodeType":"YulFunctionCall","src":"13049:101:201"},{"kind":"number","nodeType":"YulLiteral","src":"13152:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13045:3:201"},"nodeType":"YulFunctionCall","src":"13045:110:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13037:4:201"}]}]},"name":"abi_encode_tuple_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12402:9:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"12413:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"12421:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"12429:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12437:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12445:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12453:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12464:4:201","type":""}],"src":"12196:965:201"},{"body":{"nodeType":"YulBlock","src":"13247:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"13293:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13302:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13305:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13295:6:201"},"nodeType":"YulFunctionCall","src":"13295:12:201"},"nodeType":"YulExpressionStatement","src":"13295:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13268:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"13277:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13264:3:201"},"nodeType":"YulFunctionCall","src":"13264:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"13289:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13260:3:201"},"nodeType":"YulFunctionCall","src":"13260:32:201"},"nodeType":"YulIf","src":"13257:52:201"},{"nodeType":"YulVariableDeclaration","src":"13318:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13337:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13331:5:201"},"nodeType":"YulFunctionCall","src":"13331:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13322:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13381:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"13356:24:201"},"nodeType":"YulFunctionCall","src":"13356:31:201"},"nodeType":"YulExpressionStatement","src":"13356:31:201"},{"nodeType":"YulAssignment","src":"13396:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"13406:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13396:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13213:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13224:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13236:6:201","type":""}],"src":"13166:251:201"},{"body":{"nodeType":"YulBlock","src":"13500:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"13546:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13555:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13558:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13548:6:201"},"nodeType":"YulFunctionCall","src":"13548:12:201"},"nodeType":"YulExpressionStatement","src":"13548:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13521:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"13530:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13517:3:201"},"nodeType":"YulFunctionCall","src":"13517:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"13542:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13513:3:201"},"nodeType":"YulFunctionCall","src":"13513:32:201"},"nodeType":"YulIf","src":"13510:52:201"},{"nodeType":"YulVariableDeclaration","src":"13571:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13590:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13584:5:201"},"nodeType":"YulFunctionCall","src":"13584:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13575:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"13653:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13662:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13665:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13655:6:201"},"nodeType":"YulFunctionCall","src":"13655:12:201"},"nodeType":"YulExpressionStatement","src":"13655:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13622:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13643:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13636:6:201"},"nodeType":"YulFunctionCall","src":"13636:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13629:6:201"},"nodeType":"YulFunctionCall","src":"13629:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"13619:2:201"},"nodeType":"YulFunctionCall","src":"13619:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13612:6:201"},"nodeType":"YulFunctionCall","src":"13612:40:201"},"nodeType":"YulIf","src":"13609:60:201"},{"nodeType":"YulAssignment","src":"13678:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"13688:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13678:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13466:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13477:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13489:6:201","type":""}],"src":"13422:277:201"},{"body":{"nodeType":"YulBlock","src":"13917:299:201","statements":[{"nodeType":"YulAssignment","src":"13927:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13939:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13950:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13935:3:201"},"nodeType":"YulFunctionCall","src":"13935:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13927:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13970:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"13981:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13963:6:201"},"nodeType":"YulFunctionCall","src":"13963:25:201"},"nodeType":"YulExpressionStatement","src":"13963:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14008:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14019:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14004:3:201"},"nodeType":"YulFunctionCall","src":"14004:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"14024:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13997:6:201"},"nodeType":"YulFunctionCall","src":"13997:34:201"},"nodeType":"YulExpressionStatement","src":"13997:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14051:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14062:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14047:3:201"},"nodeType":"YulFunctionCall","src":"14047:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"14067:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14040:6:201"},"nodeType":"YulFunctionCall","src":"14040:34:201"},"nodeType":"YulExpressionStatement","src":"14040:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14094:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14105:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14090:3:201"},"nodeType":"YulFunctionCall","src":"14090:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"14110:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14083:6:201"},"nodeType":"YulFunctionCall","src":"14083:34:201"},"nodeType":"YulExpressionStatement","src":"14083:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14137:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14148:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14133:3:201"},"nodeType":"YulFunctionCall","src":"14133:19:201"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"14158:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"14166:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14154:3:201"},"nodeType":"YulFunctionCall","src":"14154:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14126:6:201"},"nodeType":"YulFunctionCall","src":"14126:84:201"},"nodeType":"YulExpressionStatement","src":"14126:84:201"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13854:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"13865:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13873:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13881:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13889:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13897:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13908:4:201","type":""}],"src":"13704:512:201"},{"body":{"nodeType":"YulBlock","src":"14270:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"14292:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"14294:16:201"},"nodeType":"YulFunctionCall","src":"14294:18:201"},"nodeType":"YulExpressionStatement","src":"14294:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"14286:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"14289:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"14283:2:201"},"nodeType":"YulFunctionCall","src":"14283:8:201"},"nodeType":"YulIf","src":"14280:34:201"},{"nodeType":"YulAssignment","src":"14323:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"14335:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"14338:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14331:3:201"},"nodeType":"YulFunctionCall","src":"14331:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"14323:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"14252:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"14255:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"14261:4:201","type":""}],"src":"14221:125:201"},{"body":{"nodeType":"YulBlock","src":"14508:162:201","statements":[{"nodeType":"YulAssignment","src":"14518:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14530:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14541:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14526:3:201"},"nodeType":"YulFunctionCall","src":"14526:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14518:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14560:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"14571:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14553:6:201"},"nodeType":"YulFunctionCall","src":"14553:25:201"},"nodeType":"YulExpressionStatement","src":"14553:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14598:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14609:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14594:3:201"},"nodeType":"YulFunctionCall","src":"14594:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"14614:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14587:6:201"},"nodeType":"YulFunctionCall","src":"14587:34:201"},"nodeType":"YulExpressionStatement","src":"14587:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14641:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14652:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14637:3:201"},"nodeType":"YulFunctionCall","src":"14637:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"14657:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14630:6:201"},"nodeType":"YulFunctionCall","src":"14630:34:201"},"nodeType":"YulExpressionStatement","src":"14630:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14461:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14472:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14480:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14488:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14499:4:201","type":""}],"src":"14351:319:201"},{"body":{"nodeType":"YulBlock","src":"14849:229:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14866:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14877:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14859:6:201"},"nodeType":"YulFunctionCall","src":"14859:21:201"},"nodeType":"YulExpressionStatement","src":"14859:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14900:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14911:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14896:3:201"},"nodeType":"YulFunctionCall","src":"14896:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"14916:2:201","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14889:6:201"},"nodeType":"YulFunctionCall","src":"14889:30:201"},"nodeType":"YulExpressionStatement","src":"14889:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14939:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14950:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14935:3:201"},"nodeType":"YulFunctionCall","src":"14935:18:201"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"14955:34:201","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14928:6:201"},"nodeType":"YulFunctionCall","src":"14928:62:201"},"nodeType":"YulExpressionStatement","src":"14928:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15010:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15021:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15006:3:201"},"nodeType":"YulFunctionCall","src":"15006:18:201"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"15026:9:201","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14999:6:201"},"nodeType":"YulFunctionCall","src":"14999:37:201"},"nodeType":"YulExpressionStatement","src":"14999:37:201"},{"nodeType":"YulAssignment","src":"15045:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15057:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15068:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15053:3:201"},"nodeType":"YulFunctionCall","src":"15053:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15045:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14826:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14840:4:201","type":""}],"src":"14675:403:201"},{"body":{"nodeType":"YulBlock","src":"15131:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"15141:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"15151:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15145:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15194:21:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15209:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15212:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15205:3:201"},"nodeType":"YulFunctionCall","src":"15205:10:201"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15198:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15224:21:201","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"15239:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15242:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15235:3:201"},"nodeType":"YulFunctionCall","src":"15235:10:201"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"15228:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"15279:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15281:16:201"},"nodeType":"YulFunctionCall","src":"15281:18:201"},"nodeType":"YulExpressionStatement","src":"15281:18:201"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15260:3:201"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"15269:2:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"15273:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15265:3:201"},"nodeType":"YulFunctionCall","src":"15265:12:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15257:2:201"},"nodeType":"YulFunctionCall","src":"15257:21:201"},"nodeType":"YulIf","src":"15254:47:201"},{"nodeType":"YulAssignment","src":"15310:20:201","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15321:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"15326:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15317:3:201"},"nodeType":"YulFunctionCall","src":"15317:13:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"15310:3:201"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15114:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"15117:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"15123:3:201","type":""}],"src":"15083:253:201"},{"body":{"nodeType":"YulBlock","src":"15498:252:201","statements":[{"nodeType":"YulAssignment","src":"15508:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15520:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15531:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15516:3:201"},"nodeType":"YulFunctionCall","src":"15516:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15508:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15550:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15565:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"15573:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15561:3:201"},"nodeType":"YulFunctionCall","src":"15561:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15543:6:201"},"nodeType":"YulFunctionCall","src":"15543:74:201"},"nodeType":"YulExpressionStatement","src":"15543:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15637:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15648:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15633:3:201"},"nodeType":"YulFunctionCall","src":"15633:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"15653:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15626:6:201"},"nodeType":"YulFunctionCall","src":"15626:34:201"},"nodeType":"YulExpressionStatement","src":"15626:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15680:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15691:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15676:3:201"},"nodeType":"YulFunctionCall","src":"15676:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"15700:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"15708:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15696:3:201"},"nodeType":"YulFunctionCall","src":"15696:47:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15669:6:201"},"nodeType":"YulFunctionCall","src":"15669:75:201"},"nodeType":"YulExpressionStatement","src":"15669:75:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15451:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15462:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15470:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15478:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15489:4:201","type":""}],"src":"15341:409:201"},{"body":{"nodeType":"YulBlock","src":"15804:197:201","statements":[{"nodeType":"YulVariableDeclaration","src":"15814:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"15824:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15818:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15867:21:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15882:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15885:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15878:3:201"},"nodeType":"YulFunctionCall","src":"15878:10:201"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"15871:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15897:21:201","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"15912:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15915:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15908:3:201"},"nodeType":"YulFunctionCall","src":"15908:10:201"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"15901:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"15943:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15945:16:201"},"nodeType":"YulFunctionCall","src":"15945:18:201"},"nodeType":"YulExpressionStatement","src":"15945:18:201"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15933:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"15938:3:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15930:2:201"},"nodeType":"YulFunctionCall","src":"15930:12:201"},"nodeType":"YulIf","src":"15927:38:201"},{"nodeType":"YulAssignment","src":"15974:21:201","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"15986:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"15991:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15982:3:201"},"nodeType":"YulFunctionCall","src":"15982:13:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"15974:4:201"}]}]},"name":"checked_sub_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15786:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"15789:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"15795:4:201","type":""}],"src":"15755:246:201"}]},"contents":"{\n    { }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_uint8(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := abi_decode_uint8(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_contract$_IAaveIncentivesController_$3875__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_encode_tuple_t_bool_t_uint256__to_t_bool_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, iszero(iszero(value0)))\n        mstore(add(headStart, 32), value1)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_string(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPool_$4860t_addresst_contract$_IAaveIncentivesController_$3875t_uint8t_string_memory_ptrt_string_memory_ptrt_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := abi_decode_address(add(headStart, 64))\n        value3 := abi_decode_uint8(add(headStart, 96))\n        let offset := calldataload(add(headStart, 128))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        value4 := abi_decode_string(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 160))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value5 := abi_decode_string(add(headStart, offset_1), dataEnd)\n        let offset_2 := calldataload(add(headStart, 192))\n        if gt(offset_2, _1) { revert(0, 0) }\n        let value6_1, value7_1 := abi_decode_bytes_calldata(add(headStart, offset_2), dataEnd)\n        value6 := value6_1\n        value7 := value7_1\n    }\n    function abi_decode_tuple_t_contract$_IAaveIncentivesController_$3875(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, 0x1901000000000000000000000000000000000000000000000000000000000000)\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_calldata_ptr__to_t_address_t_uint8_t_string_memory_ptr_t_string_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), 160)\n        let tail_1 := abi_encode_string(value2, add(headStart, 160))\n        mstore(add(headStart, 96), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string(value3, tail_1)\n        mstore(add(headStart, 128), sub(tail_2, headStart))\n        mstore(tail_2, value5)\n        calldatacopy(add(tail_2, 32), value4, value5)\n        mstore(add(add(tail_2, value5), 32), 0)\n        tail := add(add(tail_2, and(add(value5, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 32)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint128__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, 0xffffffffffffffffffffffffffffffff))\n    }\n    function checked_sub_t_uint128(x, y) -> diff\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if lt(x_1, y_1) { panic_error_0x11() }\n        diff := sub(x_1, y_1)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"27744":[{"length":32,"start":2744}],"27926":[{"length":32,"start":4153}],"27929":[{"length":32,"start":894},{"length":32,"start":2617},{"length":32,"start":2943},{"length":32,"start":3150},{"length":32,"start":3602},{"length":32,"start":3949},{"length":32,"start":4685}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106101da5760003560e01c80637ecebe0011610104578063b9a7b622116100a2578063e075398611610071578063e0753986146104ee578063e655dbd81461054a578063f3bfc7381461055d578063f5298aca1461058457600080fd5b8063b9a7b622146104b2578063c04a8a10146104ba578063c222ec8a146104cd578063dd62ed3e146104e057600080fd5b8063a9059cbb116100de578063a9059cbb146101fd578063b16a19de14610462578063b1bf962d14610480578063b3f1c93d1461048857600080fd5b80637ecebe001461042457806395d89b411461045a578063a457c2d7146101fd57600080fd5b8063313ce5671161017c57806370a082311161014b57806370a08231146103665780637535d2461461037957806375d26413146103c557806378160376146103e857600080fd5b8063313ce567146103035780633644e5151461031857806339509351146101fd5780636bd76d241461032057600080fd5b80630b52d558116101b85780630b52d5581461028257806318160ddd146102975780631da24f3e146102ad57806323b872dd146102f557600080fd5b806306fdde03146101df578063095ea7b3146101fd5780630afbcdc914610220575b600080fd5b6101e7610597565b6040516101f49190611e79565b60405180910390f35b61021061020b366004611ec1565b610629565b60405190151581526020016101f4565b61026d61022e366004611eed565b73ffffffffffffffffffffffffffffffffffffffff16600090815260386020526040902054603a546fffffffffffffffffffffffffffffffff90911691565b604080519283526020830191909152016101f4565b610295610290366004611f1b565b610699565b005b61029f6109ea565b6040519081526020016101f4565b61029f6102bb366004611eed565b73ffffffffffffffffffffffffffffffffffffffff166000908152603860205260409020546fffffffffffffffffffffffffffffffff1690565b61021061020b366004611f89565b603d5460405160ff90911681526020016101f4565b61029f610ab4565b61029f61032e366004611fca565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260366020908152604080832093909416825291909152205490565b61029f610374366004611eed565b610aed565b6103a07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f4565b603d54610100900473ffffffffffffffffffffffffffffffffffffffff166103a0565b6101e76040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b61029f610432366004611eed565b73ffffffffffffffffffffffffffffffffffffffff1660009081526034602052604090205490565b6101e7610bf8565b60375473ffffffffffffffffffffffffffffffffffffffff166103a0565b61029f610c07565b61049b610496366004612003565b610c12565b6040805192151583526020830191909152016101f4565b61029f600181565b6102956104c8366004611ec1565b610d1b565b6102956104db36600461216c565b610d2a565b61029f61020b366004611fca565b61029f6104fc366004611eed565b73ffffffffffffffffffffffffffffffffffffffff1660009081526038602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b610295610558366004611eed565b611035565b61029f7f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa081565b61029f610592366004612241565b611213565b6060603b80546105a690612276565b80601f01602080910402602001604051908101604052809291908181526020018280546105d290612276565b801561061f5780601f106105f45761010080835404028352916020019161061f565b820191906000526020600020905b81548152906001019060200180831161060257829003601f168201915b5050505050905090565b604080518082018252600281527f3830000000000000000000000000000000000000000000000000000000000000602082015290517f08c379a000000000000000000000000000000000000000000000000000000000815260009161069091600401611e79565b60405180910390fd5b60408051808201909152600281527f3737000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff881661071b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b50834211156040518060400160405280600281526020017f37380000000000000000000000000000000000000000000000000000000000008152509061078e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b5073ffffffffffffffffffffffffffffffffffffffff8716600090815260346020526040812054906107be610ab4565b604080517f323db0410fecc107e39e2af5908671f4c8d106123b35a51501bb805c5fa36aa0602082015273ffffffffffffffffffffffffffffffffffffffff8b1691810191909152606081018990526080810184905260a0810188905260c001604051602081830303815290604052805190602001206040516020016108769291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa1580156108fc573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f3739000000000000000000000000000000000000000000000000000000000000815250906109a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b506109ae8260016122f9565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152603460205260409020556109df8989896112d8565b505050505050505050565b6037546040517f386497fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091610aaf917f00000000000000000000000000000000000000000000000000000000000000009091169063386497fd90602401602060405180830381865afa158015610a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa69190612311565b603a549061134f565b905090565b60007f0000000000000000000000000000000000000000000000000000000000000000461415610ae5575060355490565b610aaf6113a6565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603860205260408120546fffffffffffffffffffffffffffffffff1680610b335750600092915050565b6037546040517f386497fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152610bf1917f0000000000000000000000000000000000000000000000000000000000000000169063386497fd90602401602060405180830381865afa158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea9190612311565b829061134f565b9392505050565b6060603c80546105a690612276565b6000610aaf603a5490565b60408051808201909152600281527f323300000000000000000000000000000000000000000000000000000000000060208201526000908190337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610cbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614610cfa57610cfa85878661146b565b610d068686868661152b565b610d0e610c07565b9150915094509492505050565b610d263383836112d8565b5050565b6001805460ff1680610d3b5750303b155b80610d47575060005481115b610dd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610690565b60015460ff16158015610e1057600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600281526020017f383700000000000000000000000000000000000000000000000000000000000081525090610ecd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b50610ed78661176c565b610ee08561177f565b603d80546037805473ffffffffffffffffffffffffffffffffffffffff8d81167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179091558a16610100027fffffffffffffffffffffff00000000000000000000000000000000000000000090911660ff8a1617179055610f656113a6565b6035819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167f40251fbfb6656cfa65a00d7879029fec1fad21d28fdcff2f4f68f52795b74f2c8a8a8a8a8a8a604051610ff29695949392919061232a565b60405180910390a3801561102957600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663707cd7166040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c691906123ca565b6040517f7be53ca100000000000000000000000000000000000000000000000000000000815233600482015290915073ffffffffffffffffffffffffffffffffffffffff821690637be53ca190602401602060405180830381865afa158015611133573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115791906123e7565b6040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250906111c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b5050603d805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b60408051808201909152600281527f32330000000000000000000000000000000000000000000000000000000000006020820152600090337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b506112c88460008585611792565b6112d0610c07565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526036602090815260408083208786168085529083529281902086905560375490518681529416939192917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1910160405180910390a4505050565b600081157ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8390048411151761138457600080fd5b506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6113d1611aaf565b8051602091820120604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000090840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b73ffffffffffffffffffffffffffffffffffffffff80841660009081526036602090815260408083209386168352929052908120546114ab908390612409565b73ffffffffffffffffffffffffffffffffffffffff808616600081815260366020908152604080832089861680855292529182902085905560375491519495509216927fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e19061151d9086815260200190565b60405180910390a450505050565b6000806115388484611ab9565b60408051808201909152600281527f32340000000000000000000000000000000000000000000000000000000000006020820152909150816115a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260408120546fffffffffffffffffffffffffffffffff808216929161160491849170010000000000000000000000000000000090041661134f565b61160e838761134f565b6116189190612409565b905061162385611af8565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260386020526040902080546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905561168b8761168685611af8565b611b9e565b600061169782886122f9565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116f991815260200190565b60405180910390a3604080518281526020810184905290810187905273ffffffffffffffffffffffffffffffffffffffff808a1691908b16907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a35050159695505050505050565b8051610d2690603b906020840190611d7e565b8051610d2690603c906020840190611d7e565b600061179e8383611ab9565b60408051808201909152600281527f323500000000000000000000000000000000000000000000000000000000000060208201529091508161180d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106909190611e79565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603860205260408120546fffffffffffffffffffffffffffffffff808216929161186a91849170010000000000000000000000000000000090041661134f565b611874838661134f565b61187e9190612409565b905061188984611af8565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260386020526040902080546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790556118f1876118ec85611af8565b611d1a565b848111156119d05760006119058683612409565b90508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161196791815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff89169081907f458f5fa412d0f69b08dd84872b0215675cc67bc1d5b6fd93300a1c3878b861969060600160405180910390a350611aa6565b60006119dc8287612409565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a3e91815260200190565b60405180910390a3604080518281526020810184905290810186905273ffffffffffffffffffffffffffffffffffffffff80891691908a16907f4cf25bc1d991c17529c25213d3cc0cda295eeaad5f13f361969b12ea48015f909060600160405180910390a3505b50505050505050565b6060610aaf610597565b600081156b033b2e3c9fd0803ce800000060028404190484111715611add57600080fd5b506b033b2e3c9fd0803ce80000009190910260028204010490565b60006fffffffffffffffffffffffffffffffff821115611b9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610690565b5090565b603a54611bbd6fffffffffffffffffffffffffffffffff8316826122f9565b603a5573ffffffffffffffffffffffffffffffffffffffff83166000908152603860205260409020546fffffffffffffffffffffffffffffffff16611c028382612420565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260386020526040902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9390931692909217909155603d546101009004168015611d13576040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590526fffffffffffffffffffffffffffffffff841660448301528216906331873e2e90606401600060405180830381600087803b158015611cff57600080fd5b505af11580156109df573d6000803e3d6000fd5b5050505050565b603a54611d396fffffffffffffffffffffffffffffffff831682612409565b603a5573ffffffffffffffffffffffffffffffffffffffff83166000908152603860205260409020546fffffffffffffffffffffffffffffffff16611c028382612454565b828054611d8a90612276565b90600052602060002090601f016020900481019282611dac5760008555611df2565b82601f10611dc557805160ff1916838001178555611df2565b82800160010185558215611df2579182015b82811115611df2578251825591602001919060010190611dd7565b50611b9a9291505b80821115611b9a5760008155600101611dfa565b6000815180845260005b81811015611e3457602081850181015186830182015201611e18565b81811115611e46576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610bf16020830184611e0e565b73ffffffffffffffffffffffffffffffffffffffff81168114611eae57600080fd5b50565b8035611ebc81611e8c565b919050565b60008060408385031215611ed457600080fd5b8235611edf81611e8c565b946020939093013593505050565b600060208284031215611eff57600080fd5b8135610bf181611e8c565b803560ff81168114611ebc57600080fd5b600080600080600080600060e0888a031215611f3657600080fd5b8735611f4181611e8c565b96506020880135611f5181611e8c565b95506040880135945060608801359350611f6d60808901611f0a565b925060a0880135915060c0880135905092959891949750929550565b600080600060608486031215611f9e57600080fd5b8335611fa981611e8c565b92506020840135611fb981611e8c565b929592945050506040919091013590565b60008060408385031215611fdd57600080fd5b8235611fe881611e8c565b91506020830135611ff881611e8c565b809150509250929050565b6000806000806080858703121561201957600080fd5b843561202481611e8c565b9350602085013561203481611e8c565b93969395505050506040820135916060013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261208957600080fd5b813567ffffffffffffffff808211156120a4576120a4612049565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156120ea576120ea612049565b8160405283815286602085880101111561210357600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008083601f84011261213557600080fd5b50813567ffffffffffffffff81111561214d57600080fd5b60208301915083602082850101111561216557600080fd5b9250929050565b60008060008060008060008060e0898b03121561218857600080fd5b883561219381611e8c565b975060208901356121a381611e8c565b96506121b160408a01611eb1565b95506121bf60608a01611f0a565b9450608089013567ffffffffffffffff808211156121dc57600080fd5b6121e88c838d01612078565b955060a08b01359150808211156121fe57600080fd5b61220a8c838d01612078565b945060c08b013591508082111561222057600080fd5b5061222d8b828c01612123565b999c989b5096995094979396929594505050565b60008060006060848603121561225657600080fd5b833561226181611e8c565b95602085013595506040909401359392505050565b600181811c9082168061228a57607f821691505b602082108114156122c4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561230c5761230c6122ca565b500190565b60006020828403121561232357600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8716815260ff8616602082015260a06040820152600061236260a0830187611e0e565b82810360608401526123748187611e0e565b905082810360808401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116820101915050979650505050505050565b6000602082840312156123dc57600080fd5b8151610bf181611e8c565b6000602082840312156123f957600080fd5b81518015158114610bf157600080fd5b60008282101561241b5761241b6122ca565b500390565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561244b5761244b6122ca565b01949350505050565b60006fffffffffffffffffffffffffffffffff8381169083168181101561247d5761247d6122ca565b03939250505056fea2646970667358221220b1279939b1b057f25f5dfb0d25b91b649eef1f52cc4f5f5e2b3bf5744770f10a64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1DA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xB9A7B622 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xE0753986 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xE0753986 EQ PUSH2 0x4EE JUMPI DUP1 PUSH4 0xE655DBD8 EQ PUSH2 0x54A JUMPI DUP1 PUSH4 0xF3BFC738 EQ PUSH2 0x55D JUMPI DUP1 PUSH4 0xF5298ACA EQ PUSH2 0x584 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB9A7B622 EQ PUSH2 0x4B2 JUMPI DUP1 PUSH4 0xC04A8A10 EQ PUSH2 0x4BA JUMPI DUP1 PUSH4 0xC222EC8A EQ PUSH2 0x4CD JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x4E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA9059CBB GT PUSH2 0xDE JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0xB16A19DE EQ PUSH2 0x462 JUMPI DUP1 PUSH4 0xB1BF962D EQ PUSH2 0x480 JUMPI DUP1 PUSH4 0xB3F1C93D EQ PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x424 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x45A JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0x17C JUMPI DUP1 PUSH4 0x70A08231 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x366 JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x379 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x3C5 JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x3E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x313CE567 EQ PUSH2 0x303 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x318 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0x6BD76D24 EQ PUSH2 0x320 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xB52D558 GT PUSH2 0x1B8 JUMPI DUP1 PUSH4 0xB52D558 EQ PUSH2 0x282 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x297 JUMPI DUP1 PUSH4 0x1DA24F3E EQ PUSH2 0x2AD JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1DF JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0xAFBCDC9 EQ PUSH2 0x220 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E7 PUSH2 0x597 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1F4 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x210 PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1EC1 JUMP JUMPDEST PUSH2 0x629 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x26D PUSH2 0x22E CALLDATASIZE PUSH1 0x4 PUSH2 0x1EED JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x3A SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x295 PUSH2 0x290 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F1B JUMP JUMPDEST PUSH2 0x699 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x29F PUSH2 0x9EA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x2BB CALLDATASIZE PUSH1 0x4 PUSH2 0x1EED JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x210 PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1F89 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x29F PUSH2 0xAB4 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x32E CALLDATASIZE PUSH1 0x4 PUSH2 0x1FCA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x374 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EED JUMP JUMPDEST PUSH2 0xAED JUMP JUMPDEST PUSH2 0x3A0 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3A0 JUMP JUMPDEST PUSH2 0x1E7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x432 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EED JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1E7 PUSH2 0xBF8 JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x3A0 JUMP JUMPDEST PUSH2 0x29F PUSH2 0xC07 JUMP JUMPDEST PUSH2 0x49B PUSH2 0x496 CALLDATASIZE PUSH1 0x4 PUSH2 0x2003 JUMP JUMPDEST PUSH2 0xC12 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1F4 JUMP JUMPDEST PUSH2 0x29F PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH2 0x295 PUSH2 0x4C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EC1 JUMP JUMPDEST PUSH2 0xD1B JUMP JUMPDEST PUSH2 0x295 PUSH2 0x4DB CALLDATASIZE PUSH1 0x4 PUSH2 0x216C JUMP JUMPDEST PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x29F PUSH2 0x20B CALLDATASIZE PUSH1 0x4 PUSH2 0x1FCA JUMP JUMPDEST PUSH2 0x29F PUSH2 0x4FC CALLDATASIZE PUSH1 0x4 PUSH2 0x1EED JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x295 PUSH2 0x558 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EED JUMP JUMPDEST PUSH2 0x1035 JUMP JUMPDEST PUSH2 0x29F PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 DUP2 JUMP JUMPDEST PUSH2 0x29F PUSH2 0x592 CALLDATASIZE PUSH1 0x4 PUSH2 0x2241 JUMP JUMPDEST PUSH2 0x1213 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3B DUP1 SLOAD PUSH2 0x5A6 SWAP1 PUSH2 0x2276 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x5D2 SWAP1 PUSH2 0x2276 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x61F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x5F4 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x61F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x602 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3830000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH2 0x690 SWAP2 PUSH1 0x4 ADD PUSH2 0x1E79 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3737000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x71B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP DUP4 TIMESTAMP GT ISZERO PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3738000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x78E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 PUSH2 0x7BE PUSH2 0xAB4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x323DB0410FECC107E39E2AF5908671F4C8D106123B35A51501BB805C5FA36AA0 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP2 ADD DUP10 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x876 SWAP3 SWAP2 SWAP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3739000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x9A2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP PUSH2 0x9AE DUP3 PUSH1 0x1 PUSH2 0x22F9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x34 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x9DF DUP10 DUP10 DUP10 PUSH2 0x12D8 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH1 0x40 MLOAD PUSH32 0x386497FD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 PUSH2 0xAAF SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x386497FD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA82 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xAA6 SWAP2 SWAP1 PUSH2 0x2311 JUMP JUMPDEST PUSH1 0x3A SLOAD SWAP1 PUSH2 0x134F JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 CHAINID EQ ISZERO PUSH2 0xAE5 JUMPI POP PUSH1 0x35 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xAAF PUSH2 0x13A6 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 PUSH2 0xB33 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x37 SLOAD PUSH1 0x40 MLOAD PUSH32 0x386497FD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0xBF1 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x386497FD SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBC6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBEA SWAP2 SWAP1 PUSH2 0x2311 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x134F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3C DUP1 SLOAD PUSH2 0x5A6 SWAP1 PUSH2 0x2276 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAAF PUSH1 0x3A SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 DUP2 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCBB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xCFA JUMPI PUSH2 0xCFA DUP6 DUP8 DUP7 PUSH2 0x146B JUMP JUMPDEST PUSH2 0xD06 DUP7 DUP7 DUP7 DUP7 PUSH2 0x152B JUMP JUMPDEST PUSH2 0xD0E PUSH2 0xC07 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xD26 CALLER DUP4 DUP4 PUSH2 0x12D8 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0xD3B JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0xD47 JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0xDD3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x690 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0xE10 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3837000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0xECD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP PUSH2 0xED7 DUP7 PUSH2 0x176C JUMP JUMPDEST PUSH2 0xEE0 DUP6 PUSH2 0x177F JUMP JUMPDEST PUSH1 0x3D DUP1 SLOAD PUSH1 0x37 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE DUP11 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH1 0xFF DUP11 AND OR OR SWAP1 SSTORE PUSH2 0xF65 PUSH2 0x13A6 JUMP JUMPDEST PUSH1 0x35 DUP2 SWAP1 SSTORE POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x40251FBFB6656CFA65A00D7879029FEC1FAD21D28FDCFF2F4F68F52795B74F2C DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH1 0x40 MLOAD PUSH2 0xFF2 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x232A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 ISZERO PUSH2 0x1029 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x707CD716 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10A2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10C6 SWAP2 SWAP1 PUSH2 0x23CA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7BE53CA100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x7BE53CA1 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1133 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1157 SWAP2 SWAP1 PUSH2 0x23E7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 PUSH2 0x11C5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP POP PUSH1 0x3D DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3233000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 CALLER PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x12BA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP PUSH2 0x12C8 DUP5 PUSH1 0x0 DUP6 DUP6 PUSH2 0x1792 JUMP JUMPDEST PUSH2 0x12D0 PUSH2 0xC07 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP7 AND DUP1 DUP6 MSTORE SWAP1 DUP4 MSTORE SWAP3 DUP2 SWAP1 KECCAK256 DUP7 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP1 MLOAD DUP7 DUP2 MSTORE SWAP5 AND SWAP4 SWAP2 SWAP3 SWAP2 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6268E1B017BFE18BFFFFFF DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x1384 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 MUL PUSH12 0x19D971E4FE8401E74000000 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH2 0x13D1 PUSH2 0x1AAF JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 SWAP1 DUP5 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE SWAP1 DUP2 KECCAK256 SLOAD PUSH2 0x14AB SWAP1 DUP4 SWAP1 PUSH2 0x2409 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP10 DUP7 AND DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE PUSH1 0x37 SLOAD SWAP2 MLOAD SWAP5 SWAP6 POP SWAP3 AND SWAP3 PUSH32 0xDA919360433220E13B51E8C211E490D148E61A3BD53DE8C097194E458B97F3E1 SWAP1 PUSH2 0x151D SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1538 DUP5 DUP5 PUSH2 0x1AB9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3234000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x15A7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x1604 SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x134F JUMP JUMPDEST PUSH2 0x160E DUP4 DUP8 PUSH2 0x134F JUMP JUMPDEST PUSH2 0x1618 SWAP2 SWAP1 PUSH2 0x2409 JUMP JUMPDEST SWAP1 POP PUSH2 0x1623 DUP6 PUSH2 0x1AF8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x168B DUP8 PUSH2 0x1686 DUP6 PUSH2 0x1AF8 JUMP JUMPDEST PUSH2 0x1B9E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1697 DUP3 DUP9 PUSH2 0x22F9 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x16F9 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP8 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP11 AND SWAP2 SWAP1 DUP12 AND SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP ISZERO SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD26 SWAP1 PUSH1 0x3B SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x1D7E JUMP JUMPDEST DUP1 MLOAD PUSH2 0xD26 SWAP1 PUSH1 0x3C SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x1D7E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x179E DUP4 DUP4 PUSH2 0x1AB9 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3235000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 POP DUP2 PUSH2 0x180D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x690 SWAP2 SWAP1 PUSH2 0x1E79 JUMP JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND SWAP3 SWAP2 PUSH2 0x186A SWAP2 DUP5 SWAP2 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV AND PUSH2 0x134F JUMP JUMPDEST PUSH2 0x1874 DUP4 DUP7 PUSH2 0x134F JUMP JUMPDEST PUSH2 0x187E SWAP2 SWAP1 PUSH2 0x2409 JUMP JUMPDEST SWAP1 POP PUSH2 0x1889 DUP5 PUSH2 0x1AF8 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH17 0x100000000000000000000000000000000 MUL SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x18F1 DUP8 PUSH2 0x18EC DUP6 PUSH2 0x1AF8 JUMP JUMPDEST PUSH2 0x1D1A JUMP JUMPDEST DUP5 DUP2 GT ISZERO PUSH2 0x19D0 JUMPI PUSH1 0x0 PUSH2 0x1905 DUP7 DUP4 PUSH2 0x2409 JUMP JUMPDEST SWAP1 POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1967 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 DUP2 SWAP1 PUSH32 0x458F5FA412D0F69B08DD84872B0215675CC67BC1D5B6FD93300A1C3878B86196 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH2 0x1AA6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19DC DUP3 DUP8 PUSH2 0x2409 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1A3E SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD DUP7 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP10 AND SWAP2 SWAP1 DUP11 AND SWAP1 PUSH32 0x4CF25BC1D991C17529C25213D3CC0CDA295EEAAD5F13F361969B12EA48015F90 SWAP1 PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xAAF PUSH2 0x597 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH12 0x33B2E3C9FD0803CE8000000 PUSH1 0x2 DUP5 DIV NOT DIV DUP5 GT OR ISZERO PUSH2 0x1ADD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH12 0x33B2E3C9FD0803CE8000000 SWAP2 SWAP1 SWAP2 MUL PUSH1 0x2 DUP3 DIV ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1B9A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x690 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x1BBD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x22F9 JUMP JUMPDEST PUSH1 0x3A SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1C02 DUP4 DUP3 PUSH2 0x2420 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x3D SLOAD PUSH2 0x100 SWAP1 DIV AND DUP1 ISZERO PUSH2 0x1D13 JUMPI PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x44 DUP4 ADD MSTORE DUP3 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1CFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3A SLOAD PUSH2 0x1D39 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x2409 JUMP JUMPDEST PUSH1 0x3A SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x38 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1C02 DUP4 DUP3 PUSH2 0x2454 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH2 0x1D8A SWAP1 PUSH2 0x2276 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH2 0x1DAC JUMPI PUSH1 0x0 DUP6 SSTORE PUSH2 0x1DF2 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH2 0x1DC5 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x1DF2 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x1DF2 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x1DF2 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x1DD7 JUMP JUMPDEST POP PUSH2 0x1B9A SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1B9A JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x1DFA JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1E34 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x1E18 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x1E46 JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xBF1 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1E0E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1EAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x1EBC DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1ED4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1EDF DUP2 PUSH2 0x1E8C 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 0x1EFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xBF1 DUP2 PUSH2 0x1E8C JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1EBC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1F36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x1F41 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x1F51 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH2 0x1F6D PUSH1 0x80 DUP10 ADD PUSH2 0x1F0A JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 DUP9 ADD CALLDATALOAD SWAP2 POP PUSH1 0xC0 DUP9 ADD CALLDATALOAD SWAP1 POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1F9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1FA9 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1FB9 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1FDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1FE8 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1FF8 DUP2 PUSH2 0x1E8C JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2019 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x2024 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x2034 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP4 SWAP7 SWAP4 SWAP6 POP POP POP POP PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x60 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2089 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x20A4 JUMPI PUSH2 0x20A4 PUSH2 0x2049 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x20EA JUMPI PUSH2 0x20EA PUSH2 0x2049 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH2 0x2103 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 PUSH1 0x20 DUP8 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2135 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x214D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x2165 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xE0 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x2188 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x2193 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x21A3 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP7 POP PUSH2 0x21B1 PUSH1 0x40 DUP11 ADD PUSH2 0x1EB1 JUMP JUMPDEST SWAP6 POP PUSH2 0x21BF PUSH1 0x60 DUP11 ADD PUSH2 0x1F0A JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x21DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x21E8 DUP13 DUP4 DUP14 ADD PUSH2 0x2078 JUMP JUMPDEST SWAP6 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x21FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x220A DUP13 DUP4 DUP14 ADD PUSH2 0x2078 JUMP JUMPDEST SWAP5 POP PUSH1 0xC0 DUP12 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x222D DUP12 DUP3 DUP13 ADD PUSH2 0x2123 JUMP JUMPDEST SWAP10 SWAP13 SWAP9 SWAP12 POP SWAP7 SWAP10 POP SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x2261 DUP2 PUSH2 0x1E8C JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x228A JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x22C4 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x230C JUMPI PUSH2 0x230C PUSH2 0x22CA JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2323 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP2 MSTORE PUSH1 0xFF DUP7 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0x2362 PUSH1 0xA0 DUP4 ADD DUP8 PUSH2 0x1E0E JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x2374 DUP2 DUP8 PUSH2 0x1E0E JUMP JUMPDEST SWAP1 POP DUP3 DUP2 SUB PUSH1 0x80 DUP5 ADD MSTORE DUP4 DUP2 MSTORE DUP4 DUP6 PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND DUP3 ADD ADD SWAP2 POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x23DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xBF1 DUP2 PUSH2 0x1E8C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x23F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xBF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x241B JUMPI PUSH2 0x241B PUSH2 0x22CA JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x244B JUMPI PUSH2 0x244B PUSH2 0x22CA JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND SWAP1 DUP4 AND DUP2 DUP2 LT ISZERO PUSH2 0x247D JUMPI PUSH2 0x247D PUSH2 0x22CA JUMP JUMPDEST SUB SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB1 0x27 SWAP10 CODECOPY 0xB1 0xB0 JUMPI CALLCODE 0x5F 0x5D 0xFB 0xD 0x25 0xB9 SHL PUSH5 0x9EEF1F52CC 0x4F 0x5F 0x5E 0x2B EXTCODESIZE CREATE2 PUSH21 0x4770F10A64736F6C634300080A0033000000000000 ","sourceMap":"1177:3875:100:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84:103;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4352:125:100;;;;;;:::i;:::-;;:::i;:::-;;;1558:14:201;;1551:22;1533:41;;1521:2;1506:18;4352:125:100;1393:187:201;1386:173:105;;;;;;:::i;:::-;3518:19:103;;1479:7:105;3518:19:103;;;:10;:19;;;;;:27;3376:12;;3518:27;;;;;1386:173:105;;;;;2011:25:201;;;2067:2;2052:18;;2045:34;;;;1984:18;1386:173:105;1837:248:201;1424:823:101;;;;;;:::i;:::-;;:::i;:::-;;3629:171:100;;;:::i;:::-;;;3136:25:201;;;3124:2;3109:18;3629:171:100;2990:177:201;1225:119:105;;;;;;:::i;:::-;3518:19:103;;1296:7:105;3518:19:103;;;:10;:19;;;;;:27;;;;1225:119:105;4481:139:100;;;;;;:::i;3178:86:103:-;3250:9;;3178:86;;3250:9;;;;3775:36:201;;3763:2;3748:18;3178:86:103;3633:184:201;867:185:102;;;:::i;2292:165:101:-;;;;;;:::i;:::-;2417:27;;;;2395:7;2417:27;;;:17;:27;;;;;;;;:35;;;;;;;;;;;;;2292:165;2686:280:100;;;;;;:::i;:::-;;:::i;2408:27:103:-;;;;;;;;4587:42:201;4575:55;;;4557:74;;4545:2;4530:18;2408:27:103;4397:240:201;3691:132:103;3797:21;;;;;;;3691:132;;192:50:102;;232:10;;;;;;;;;;;;;;;;;192:50;;1260:101;;;;;;:::i;:::-;1342:14;;1320:7;1342:14;;;:7;:14;;;;;;;1260:101;3051:90:103;;;:::i;4939:111:100:-;5029:16;;;;4939:111;;1601:113:105;;;:::i;3007:337:100:-;;;;;;:::i;:::-;;:::i;:::-;;;;6084:14:201;;6077:22;6059:41;;6131:2;6116:18;;6109:34;;;;6032:18;3007:337:100;5891:258:201;1332:49:100;;1378:3;1332:49;;1237:142:101;;;;;;:::i;:::-;;:::i;1700:803:100:-;;;;;;:::i;:::-;;:::i;4213:135::-;;;;;;:::i;1756:138:105:-;;;;;;:::i;:::-;1858:16;;1836:7;1858:16;;;:10;:16;;;;;:31;;;;;;;1756:138;3938:139:103;;;;;;:::i;:::-;;:::i;897:153:101:-;;956:94;897:153;;3385:215:100;;;;;;:::i;:::-;;:::i;2930:84:103:-;2976:13;3004:5;2997:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2930:84;:::o;4352:125:100:-;4441:30;;;;;;;;;;;;;;;;4434:38;;;;;4422:4;;4434:38;;;;;:::i;:::-;;;;;;;;1424:823:101;1633:29;;;;;;;;;;;;;;;;;1608:23;;;1600:63;;;;;;;;;;;;;:::i;:::-;;1727:8;1708:15;:27;;1737:25;;;;;;;;;;;;;;;;;1700:63;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1797:18:101;;;1769:25;1797:18;;;:7;:18;;;;;;;1901;:16;:18::i;:::-;1950:87;;;956:94;1950:87;;;10160:25:201;10233:42;10221:55;;10201:18;;;10194:83;;;;10293:18;;;10286:34;;;10336:18;;;10329:34;;;10379:19;;;10372:35;;;10132:19;;1950:87:101;;;;;;;;;;;;1929:118;;;;;;1855:200;;;;;;;;10688:66:201;10676:79;;10780:1;10771:11;;10764:27;;;;10816:2;10807:12;;10800:28;10853:2;10844:12;;10418:444;1855:200:101;;;;;;;;;;;;;;1838:223;;1855:200;1838:223;;;;2088:26;;;;;;;;;11094:25:201;;;11167:4;11155:17;;11135:18;;;11128:45;;;;11189:18;;;11182:34;;;11232:18;;;11225:34;;;1838:223:101;-1:-1:-1;2088:26:101;;11066:19:201;;2088:26:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2075:39;;:9;:39;;;2116:24;;;;;;;;;;;;;;;;;2067:74;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2168:21:101;:17;2188:1;2168:21;:::i;:::-;2147:18;;;;;;;:7;:18;;;;;:42;2195:47;2155:9;2225;2236:5;2195:18;:47::i;:::-;1594:653;;1424:823;;;;;;;:::o;3629:171:100:-;3777:16;;3739:55;;;;;:37;3777:16;;;3739:55;;;4557:74:201;3690:7:100;;3712:83;;3739:4;:37;;;;;;4530:18:201;;3739:55:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3376:12:103;;3712:26:100;;:83::i;:::-;3705:90;;3629:171;:::o;867:185:102:-;924:7;960:8;943:13;:25;939:69;;;-1:-1:-1;985:16:102;;;867:185::o;939:69::-;1020:27;:25;:27::i;2686:280:100:-;3518:19:103;;;2757:7:100;3518:19:103;;;:10;:19;;;;;:27;;;;2824:47:100;;-1:-1:-1;2863:1:100;;2686:280;-1:-1:-1;;2686:280:100:o;2824:47::-;2943:16;;2905:55;;;;;:37;2943:16;;;2905:55;;;4557:74:201;2884:77:100;;2905:4;:37;;;;4530:18:201;;2905:55:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2884:13;;:20;:77::i;:::-;2877:84;2686:280;-1:-1:-1;;;2686:280:100:o;3051:90:103:-;3101:13;3129:7;3122:14;;;;;:::i;1601:113:105:-;1668:7;1690:19;3376:12:103;;;3293:100;3007:337:100;1519:26:103;;;;;;;;;;;;;;;;;3150:4:100;;;;678:10:4;1512:4:103;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3183:10:100::1;3175:18;;:4;:18;;;3171:89;;3203:50;3228:10;3240:4;3246:6;3203:24;:50::i;:::-;3273:44;3285:4;3291:10;3303:6;3311:5;3273:11;:44::i;:::-;3319:19;:17;:19::i;:::-;3265:74;;;;3007:337:::0;;;;;;;:::o;1237:142:101:-;1323:51;678:10:4;1356:9:101;1367:6;1323:18;:51::i;:::-;1237:142;;:::o;1700:803:100:-;1378:3;1217:12:71;;;;;:31;;-1:-1:-1;2436:9:71;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;11983:2:201;1202:146:71;;;11965:21:201;12022:2;12002:18;;;11995:30;12061:34;12041:18;;;12034:62;12132:16;12112:18;;;12105:44;12166:19;;1202:146:71;11781:410:201;1202:146:71;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;2021:4:100::1;2001:24;;:16;:24;;;2027:34;;;;;;;;;;;;;;;;::::0;1993:69:::1;;;;;;;;;;;;;;:::i;:::-;;2068:23;2077:13;2068:8;:23::i;:::-;2097:27;2108:15;2097:10;:27::i;:::-;7979:9:103::0;:23;;2168:16:100::1;:34:::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;2208:44;::::1;2168:34;2208:44;::::0;;;;7979:23:103;;;2208:44:100;::::1;::::0;;2278:27:::1;:25;:27::i;:::-;2259:16;:46;;;;2367:4;2317:181;;2336:15;2317:181;;;2388:20;2417:17;2442:13;2463:15;2486:6;;2317:181;;;;;;;;;;;:::i;:::-;;;;;;;;1510:14:71::0;1506:55;;;1534:12;:20;;;;;;1506:55;1158:407;;1700:803:100;;;;;;;;:::o;3938:139:103:-;1211:22;1248:18;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1297;;;;;1320:10;1297:34;;;4557:74:201;1211:72:103;;-1:-1:-1;1297:22:103;;;;;;4530:18:201;;1297:34:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1333:28;;;;;;;;;;;;;;;;;1289:73;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;4038:21:103::1;:34:::0;;::::1;::::0;;::::1;;;::::0;;;::::1;::::0;;;::::1;::::0;;3938:139::o;3385:215:100:-;1519:26:103;;;;;;;;;;;;;;;;;3504:7:100;;678:10:4;1512:4:103;1488:29;;;1480:66;;;;;;;;;;;;;:::i;:::-;;3519:44:100::1;3531:4;3545:1;3549:6;3557:5;3519:11;:44::i;:::-;3576:19;:17;:19::i;:::-;3569:26:::0;3385:215;-1:-1:-1;;;;3385:215:100:o;2749:233:101:-;2846:28;;;;;;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;;:48;;;2952:16;;2905:72;;3136:25:201;;;2952:16:101;;;2846:39;;:28;2905:72;;3109:18:201;2905:72:101;;;;;;;2749:233;;;:::o;2253:319:90:-;2314:9;2427;;2455:21;2451:29;;;2445:36;;2438:44;2424:59;2414:101;;2505:1;2502;2495:12;2414:101;-1:-1:-1;2558:3:90;2536:9;;2547:8;2532:24;2528:34;;2253:319::o;1475:298:102:-;1535:7;292:95;1645:15;:13;:15::i;:::-;1629:33;;;;;;;232:10;;;;;;;;;;;;;;;;1582:178;;;;;13963:25:201;;;;14004:18;;;13997:34;;;;1674:26:102;14047:18:201;;;14040:34;1712:13:102;14090:18:201;;;14083:34;1745:4:102;14133:19:201;;;14126:84;13935:19;;1582:178:102;;;;;;;;;;;;1563:205;;;;;;1550:218;;1475:298;:::o;3288:330:101:-;3414:28;;;;3391:20;3414:28;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;:48;;3456:6;;3414:48;:::i;:::-;3469:28;;;;;;;;:17;:28;;;;;;;;:39;;;;;;;;;;;;:54;;;3582:16;;3535:78;;3391:71;;-1:-1:-1;3582:16:101;;;3535:78;;;;3391:71;3136:25:201;;3124:2;3109:18;;2990:177;3535:78:101;;;;;;;;3385:233;3288:330;;;:::o;2295:763:105:-;2421:4;;2456:20;:6;2470:5;2456:13;:20::i;:::-;2509:26;;;;;;;;;;;;;;;;;2433:43;;-1:-1:-1;2490:17:105;2482:54;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3518:19:103;;;2543:21:105;3518:19:103;;;:10;:19;;;;;:27;;;;;;2543:21:105;2662:59;;3518:27:103;;2683:37:105;;;;2662:20;:59::i;:::-;2626:27;:13;2647:5;2626:20;:27::i;:::-;:95;;;;:::i;:::-;2600:121;;2768:17;:5;:15;:17::i;:::-;2728:22;;;;;;;:10;:22;;;;;:57;;;;;;;;;;;;;;;;2792:43;2739:10;2810:24;:12;:22;:24::i;:::-;2792:5;:43::i;:::-;2842:20;2865:24;2874:15;2865:6;:24;:::i;:::-;2842:47;;2921:10;2900:46;;2917:1;2900:46;;;2933:12;2900:46;;;;3136:25:201;;3124:2;3109:18;;2990:177;2900:46:105;;;;;;;;2957:62;;;14553:25:201;;;14609:2;14594:18;;14587:34;;;14637:18;;;14630:34;;;2957:62:105;;;;;;;;;;;14541:2:201;14526:18;2957:62:105;;;;;;;-1:-1:-1;;3034:18:105;;2295:763;-1:-1:-1;;;;;;2295:763:105:o;7513:76:103:-;7569:15;;;;:5;;:15;;;;;:::i;7701:84::-;7761:19;;;;:7;;:19;;;;;:::i;3512:888:105:-;3609:20;3632;:6;3646:5;3632:13;:20::i;:::-;3685:26;;;;;;;;;;;;;;;;;3609:43;;-1:-1:-1;3666:17:105;3658:54;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3518:19:103;;;3719:21:105;3518:19:103;;;:10;:19;;;;;:27;;;;;;3719:21:105;3832:53;;3518:27:103;;3853:31:105;;;;3832:20;:53::i;:::-;3796:27;:13;3817:5;3796:20;:27::i;:::-;:89;;;;:::i;:::-;3770:115;;3926:17;:5;:15;:17::i;:::-;3892:16;;;;;;;:10;:16;;;;;:51;;;;;;;;;;;;;;;;3950:37;3903:4;3962:24;:12;:22;:24::i;:::-;3950:5;:37::i;:::-;4016:6;3998:15;:24;3994:402;;;4032:20;4055:24;4073:6;4055:15;:24;:::i;:::-;4032:47;;4113:4;4092:40;;4109:1;4092:40;;;4119:12;4092:40;;;;3136:25:201;;3124:2;3109:18;;2990:177;4092:40:105;;;;;;;;4145:54;;;14553:25:201;;;14609:2;14594:18;;14587:34;;;14637:18;;;14630:34;;;4145:54:105;;;;;;;;14541:2:201;14526:18;4145:54:105;;;;;;;4024:182;3994:402;;;4220:20;4243:24;4252:15;4243:6;:24;:::i;:::-;4220:47;;4303:1;4280:40;;4289:4;4280:40;;;4307:12;4280:40;;;;3136:25:201;;3124:2;3109:18;;2990:177;4280:40:105;;;;;;;;4333:56;;;14553:25:201;;;14609:2;14594:18;;14587:34;;;14637:18;;;14630:34;;;4333:56:105;;;;;;;;;;;14541:2:201;14526:18;4333:56:105;;;;;;;4212:184;3994:402;3603:797;;;3512:888;;;;:::o;3833:96:100:-;3890:13;3918:6;:4;:6::i;2840:322:90:-;2901:9;3006;;3065:3;3060:1;3053:9;;3041:22;3037:32;3031:39;;3003:70;3000:104;;;3094:1;3091;3084:12;3000:104;-1:-1:-1;3132:3:90;3125:11;;;;3145:1;3138:9;;3121:27;3117:35;;2840:322::o;1563:182:12:-;1620:7;1652:17;1643:26;;;1635:78;;;;;;;14877:2:201;1635:78:12;;;14859:21:201;14916:2;14896:18;;;14889:30;14955:34;14935:18;;;14928:62;15026:9;15006:18;;;14999:37;15053:19;;1635:78:12;14675:403:201;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;1069:519:104:-;1165:12;;1198:23;;;;1165:12;1198:23;:::i;:::-;1183:12;:38;1256:19;;;1228:25;1256:19;;;:10;:19;;;;;:27;;;1319:26;1339:6;1256:27;1319:26;:::i;:::-;1289:19;;;;;;;;:10;:19;;;;;:56;;;;;;;;;;;;;;;;1406:21;;1289:56;1406:21;;;1437:48;;1433:151;;1495:82;;;;;:38;15561:55:201;;;1495:82:104;;;15543:74:201;15633:18;;;15626:34;;;15708;15696:47;;15676:18;;;15669:75;1495:38:104;;;;;15516:18:201;;1495:82:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1433:151;1134:454;;;1069:519;;:::o;1781:520::-;1877:12;;1910:23;;;;1877:12;1910:23;:::i;:::-;1895:12;:38;1968:19;;;1940:25;1968:19;;;:10;:19;;;;;:27;;;2031:26;2051:6;1968:27;2031:26;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:531:201;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;336:6;333:1;330:13;327:87;;;402:1;395:4;386:6;381:3;377:16;373:27;366:38;327:87;-1:-1:-1;459:2:201;447:15;464:66;443:88;434:98;;;;534:4;430:109;;14:531;-1:-1:-1;;14:531:201:o;550:220::-;699:2;688:9;681:21;662:4;719:45;760:2;749:9;745:18;737:6;719:45;:::i;775:154::-;861:42;854:5;850:54;843:5;840:65;830:93;;919:1;916;909:12;830:93;775:154;:::o;934:134::-;1002:20;;1031:31;1002:20;1031:31;:::i;:::-;934:134;;;:::o;1073:315::-;1141:6;1149;1202:2;1190:9;1181:7;1177:23;1173:32;1170:52;;;1218:1;1215;1208:12;1170:52;1257:9;1244:23;1276:31;1301:5;1276:31;:::i;:::-;1326:5;1378:2;1363:18;;;;1350:32;;-1:-1:-1;;;1073:315:201:o;1585:247::-;1644:6;1697:2;1685:9;1676:7;1672:23;1668:32;1665:52;;;1713:1;1710;1703:12;1665:52;1752:9;1739:23;1771:31;1796:5;1771:31;:::i;2090:156::-;2156:20;;2216:4;2205:16;;2195:27;;2185:55;;2236:1;2233;2226:12;2251:734;2362:6;2370;2378;2386;2394;2402;2410;2463:3;2451:9;2442:7;2438:23;2434:33;2431:53;;;2480:1;2477;2470:12;2431:53;2519:9;2506:23;2538:31;2563:5;2538:31;:::i;:::-;2588:5;-1:-1:-1;2645:2:201;2630:18;;2617:32;2658:33;2617:32;2658:33;:::i;:::-;2710:7;-1:-1:-1;2764:2:201;2749:18;;2736:32;;-1:-1:-1;2815:2:201;2800:18;;2787:32;;-1:-1:-1;2838:37:201;2870:3;2855:19;;2838:37;:::i;:::-;2828:47;;2922:3;2911:9;2907:19;2894:33;2884:43;;2974:3;2963:9;2959:19;2946:33;2936:43;;2251:734;;;;;;;;;;:::o;3172:456::-;3249:6;3257;3265;3318:2;3306:9;3297:7;3293:23;3289:32;3286:52;;;3334:1;3331;3324:12;3286:52;3373:9;3360:23;3392:31;3417:5;3392:31;:::i;:::-;3442:5;-1:-1:-1;3499:2:201;3484:18;;3471:32;3512:33;3471:32;3512:33;:::i;:::-;3172:456;;3564:7;;-1:-1:-1;;;3618:2:201;3603:18;;;;3590:32;;3172:456::o;4004:388::-;4072:6;4080;4133:2;4121:9;4112:7;4108:23;4104:32;4101:52;;;4149:1;4146;4139:12;4101:52;4188:9;4175:23;4207:31;4232:5;4207:31;:::i;:::-;4257:5;-1:-1:-1;4314:2:201;4299:18;;4286:32;4327:33;4286:32;4327:33;:::i;:::-;4379:7;4369:17;;;4004:388;;;;;:::o;5361:525::-;5447:6;5455;5463;5471;5524:3;5512:9;5503:7;5499:23;5495:33;5492:53;;;5541:1;5538;5531:12;5492:53;5580:9;5567:23;5599:31;5624:5;5599:31;:::i;:::-;5649:5;-1:-1:-1;5706:2:201;5691:18;;5678:32;5719:33;5678:32;5719:33;:::i;:::-;5361:525;;5771:7;;-1:-1:-1;;;;5825:2:201;5810:18;;5797:32;;5876:2;5861:18;5848:32;;5361:525::o;6154:184::-;6206:77;6203:1;6196:88;6303:4;6300:1;6293:15;6327:4;6324:1;6317:15;6343:778;6386:5;6439:3;6432:4;6424:6;6420:17;6416:27;6406:55;;6457:1;6454;6447:12;6406:55;6493:6;6480:20;6519:18;6556:2;6552;6549:10;6546:36;;;6562:18;;:::i;:::-;6696:2;6690:9;6758:4;6750:13;;6601:66;6746:22;;;6770:2;6742:31;6738:40;6726:53;;;6794:18;;;6814:22;;;6791:46;6788:72;;;6840:18;;:::i;:::-;6880:10;6876:2;6869:22;6915:2;6907:6;6900:18;6961:3;6954:4;6949:2;6941:6;6937:15;6933:26;6930:35;6927:55;;;6978:1;6975;6968:12;6927:55;7042:2;7035:4;7027:6;7023:17;7016:4;7008:6;7004:17;6991:54;7089:1;7082:4;7077:2;7069:6;7065:15;7061:26;7054:37;7109:6;7100:15;;;;;;6343:778;;;;:::o;7126:347::-;7177:8;7187:6;7241:3;7234:4;7226:6;7222:17;7218:27;7208:55;;7259:1;7256;7249:12;7208:55;-1:-1:-1;7282:20:201;;7325:18;7314:30;;7311:50;;;7357:1;7354;7347:12;7311:50;7394:4;7386:6;7382:17;7370:29;;7446:3;7439:4;7430:6;7422;7418:19;7414:30;7411:39;7408:59;;;7463:1;7460;7453:12;7408:59;7126:347;;;;;:::o;7478:1302::-;7668:6;7676;7684;7692;7700;7708;7716;7724;7777:3;7765:9;7756:7;7752:23;7748:33;7745:53;;;7794:1;7791;7784:12;7745:53;7833:9;7820:23;7852:31;7877:5;7852:31;:::i;:::-;7902:5;-1:-1:-1;7959:2:201;7944:18;;7931:32;7972:33;7931:32;7972:33;:::i;:::-;8024:7;-1:-1:-1;8050:38:201;8084:2;8069:18;;8050:38;:::i;:::-;8040:48;;8107:36;8139:2;8128:9;8124:18;8107:36;:::i;:::-;8097:46;;8194:3;8183:9;8179:19;8166:33;8218:18;8259:2;8251:6;8248:14;8245:34;;;8275:1;8272;8265:12;8245:34;8298:50;8340:7;8331:6;8320:9;8316:22;8298:50;:::i;:::-;8288:60;;8401:3;8390:9;8386:19;8373:33;8357:49;;8431:2;8421:8;8418:16;8415:36;;;8447:1;8444;8437:12;8415:36;8470:52;8514:7;8503:8;8492:9;8488:24;8470:52;:::i;:::-;8460:62;;8575:3;8564:9;8560:19;8547:33;8531:49;;8605:2;8595:8;8592:16;8589:36;;;8621:1;8618;8611:12;8589:36;;8660:60;8712:7;8701:8;8690:9;8686:24;8660:60;:::i;:::-;7478:1302;;;;-1:-1:-1;7478:1302:201;;-1:-1:-1;7478:1302:201;;;;;;8739:8;-1:-1:-1;;;7478:1302:201:o;9071:383::-;9148:6;9156;9164;9217:2;9205:9;9196:7;9192:23;9188:32;9185:52;;;9233:1;9230;9223:12;9185:52;9272:9;9259:23;9291:31;9316:5;9291:31;:::i;:::-;9341:5;9393:2;9378:18;;9365:32;;-1:-1:-1;9444:2:201;9429:18;;;9416:32;;9071:383;-1:-1:-1;;;9071:383:201:o;9459:437::-;9538:1;9534:12;;;;9581;;;9602:61;;9656:4;9648:6;9644:17;9634:27;;9602:61;9709:2;9701:6;9698:14;9678:18;9675:38;9672:218;;;9746:77;9743:1;9736:88;9847:4;9844:1;9837:15;9875:4;9872:1;9865:15;9672:218;;9459:437;;;:::o;11270:184::-;11322:77;11319:1;11312:88;11419:4;11416:1;11409:15;11443:4;11440:1;11433:15;11459:128;11499:3;11530:1;11526:6;11523:1;11520:13;11517:39;;;11536:18;;:::i;:::-;-1:-1:-1;11572:9:201;;11459:128::o;11592:184::-;11662:6;11715:2;11703:9;11694:7;11690:23;11686:32;11683:52;;;11731:1;11728;11721:12;11683:52;-1:-1:-1;11754:16:201;;11592:184;-1:-1:-1;11592:184:201:o;12196:965::-;12513:42;12505:6;12501:55;12490:9;12483:74;12605:4;12597:6;12593:17;12588:2;12577:9;12573:18;12566:45;12647:3;12642:2;12631:9;12627:18;12620:31;12464:4;12674:46;12715:3;12704:9;12700:19;12692:6;12674:46;:::i;:::-;12768:9;12760:6;12756:22;12751:2;12740:9;12736:18;12729:50;12802:33;12828:6;12820;12802:33;:::i;:::-;12788:47;;12884:9;12876:6;12872:22;12866:3;12855:9;12851:19;12844:51;12919:6;12911;12904:22;12973:6;12965;12960:2;12952:6;12948:15;12935:45;13026:1;13021:2;13012:6;13004;13000:19;12996:28;12989:39;13152:2;13082:66;13077:2;13069:6;13065:15;13061:88;13053:6;13049:101;13045:110;13037:118;;;12196:965;;;;;;;;;:::o;13166:251::-;13236:6;13289:2;13277:9;13268:7;13264:23;13260:32;13257:52;;;13305:1;13302;13295:12;13257:52;13337:9;13331:16;13356:31;13381:5;13356:31;:::i;13422:277::-;13489:6;13542:2;13530:9;13521:7;13517:23;13513:32;13510:52;;;13558:1;13555;13548:12;13510:52;13590:9;13584:16;13643:5;13636:13;13629:21;13622:5;13619:32;13609:60;;13665:1;13662;13655:12;14221:125;14261:4;14289:1;14286;14283:8;14280:34;;;14294:18;;:::i;:::-;-1:-1:-1;14331:9:201;;14221:125::o;15083:253::-;15123:3;15151:34;15212:2;15209:1;15205:10;15242:2;15239:1;15235:10;15273:3;15269:2;15265:12;15260:3;15257:21;15254:47;;;15281:18;;:::i;:::-;15317:13;;15083:253;-1:-1:-1;;;;15083:253:201:o;15755:246::-;15795:4;15824:34;15908:10;;;;15878;;15930:12;;;15927:38;;;15945:18;;:::i;:::-;15982:13;;15755:246;-1:-1:-1;;;15755:246:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"1880600","executionCost":"infinite","totalCost":"infinite"},"external":{"DEBT_TOKEN_REVISION()":"240","DELEGATION_WITH_SIG_TYPEHASH()":"283","DOMAIN_SEPARATOR()":"infinite","EIP712_REVISION()":"infinite","POOL()":"infinite","UNDERLYING_ASSET_ADDRESS()":"2374","allowance(address,address)":"infinite","approve(address,uint256)":"infinite","approveDelegation(address,uint256)":"26988","balanceOf(address)":"infinite","borrowAllowance(address,address)":"infinite","burn(address,uint256,uint256)":"infinite","decimals()":"2335","decreaseAllowance(address,uint256)":"infinite","delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":"infinite","getIncentivesController()":"2407","getPreviousIndex(address)":"2568","getScaledUserBalanceAndSupply(address)":"4737","increaseAllowance(address,uint256)":"infinite","initialize(address,address,address,uint8,string,string,bytes)":"infinite","mint(address,address,uint256,uint256)":"infinite","name()":"infinite","nonces(address)":"2553","scaledBalanceOf(address)":"2603","scaledTotalSupply()":"2419","setIncentivesController(address)":"infinite","symbol()":"infinite","totalSupply()":"infinite","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite"},"internal":{"_EIP712BaseId()":"infinite","getRevision()":"infinite"}},"methodIdentifiers":{"DEBT_TOKEN_REVISION()":"b9a7b622","DELEGATION_WITH_SIG_TYPEHASH()":"f3bfc738","DOMAIN_SEPARATOR()":"3644e515","EIP712_REVISION()":"78160376","POOL()":"7535d246","UNDERLYING_ASSET_ADDRESS()":"b16a19de","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","approveDelegation(address,uint256)":"c04a8a10","balanceOf(address)":"70a08231","borrowAllowance(address,address)":"6bd76d24","burn(address,uint256,uint256)":"f5298aca","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":"0b52d558","getIncentivesController()":"75d26413","getPreviousIndex(address)":"e0753986","getScaledUserBalanceAndSupply(address)":"0afbcdc9","increaseAllowance(address,uint256)":"39509351","initialize(address,address,address,uint8,string,string,bytes)":"c222ec8a","mint(address,address,uint256,uint256)":"b3f1c93d","name()":"06fdde03","nonces(address)":"7ecebe00","scaledBalanceOf(address)":"1da24f3e","scaledTotalSupply()":"b1bf962d","setIncentivesController(address)":"e655dbd8","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"}],\"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\":\"fromUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BorrowAllowanceDelegated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"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\":\"DEBT_TOKEN_REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DELEGATION_WITH_SIG_TYPEHASH\",\"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\":\"EIP712_REVISION\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNDERLYING_ASSET_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approveDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromUser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"}],\"name\":\"borrowAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatee\",\"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\":\"delegationWithSig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getPreviousIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getScaledUserBalanceAndSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPool\",\"name\":\"initializingPool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"debtTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"debtTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"debtTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"user\",\"type\":\"address\"}],\"name\":\"scaledBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scaledTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setIncentivesController\",\"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\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"details\":\"Transfer and approve functionalities are disabled since its a non-transferable token\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Return cached value if chainId matches cache, otherwise recomputes separator\",\"returns\":{\"_0\":\"The domain separator of the token at current chain\"}},\"UNDERLYING_ASSET_ADDRESS()\":{\"returns\":{\"_0\":\"The address of the underlying asset\"}},\"approveDelegation(address,uint256)\":{\"params\":{\"amount\":\"The maximum amount being delegated.\",\"delegatee\":\"The address receiving the delegated borrowing power\"}},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"borrowAllowance(address,address)\":{\"params\":{\"fromUser\":\"The user to giving allowance\",\"toUser\":\"The user to give allowance to\"},\"returns\":{\"_0\":\"The current allowance of `toUser`\"}},\"burn(address,uint256,uint256)\":{\"details\":\"In some instances, a burn transaction will emit a mint event if the amount to burn is less than the interest that the user accrued\",\"params\":{\"amount\":\"The amount getting burned\",\"from\":\"The address from which the debt will be burned\",\"index\":\"The variable debt index of the reserve\"},\"returns\":{\"_0\":\"The scaled total debt of the reserve\"}},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"pool\":\"The address of the Pool contract\"}},\"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"delegatee\":\"The delegatee that can use the credit\",\"delegator\":\"The delegator of the credit\",\"r\":\"The R signature param\",\"s\":\"The S signature param\",\"v\":\"The V signature param\",\"value\":\"The amount to be delegated\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"The address of the Incentives Controller\"}},\"getPreviousIndex(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The last index interest was accrued to the user's balance, expressed in ray\"}},\"getScaledUserBalanceAndSupply(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The scaled balance of the user\",\"_1\":\"The scaled total supply\"}},\"initialize(address,address,address,uint8,string,string,bytes)\":{\"params\":{\"debtTokenDecimals\":\"The decimals of the debtToken, same as the underlying asset's\",\"debtTokenName\":\"The name of the token\",\"debtTokenSymbol\":\"The symbol of the token\",\"incentivesController\":\"The smart contract managing potential incentives distribution\",\"params\":\"A set of encoded parameters for additional initialization\",\"pool\":\"The pool contract that is initializing this contract\",\"underlyingAsset\":\"The address of the underlying asset of this aToken (E.g. WETH for aWETH)\"}},\"mint(address,address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of debt being minted\",\"index\":\"The variable debt index of the reserve\",\"onBehalfOf\":\"The address receiving the debt tokens\",\"user\":\"The address receiving the borrowed underlying, being the delegatee in case of credit delegate, or same as `onBehalfOf` otherwise\"},\"returns\":{\"_0\":\"True if the previous balance of the user is 0, false otherwise\",\"_1\":\"The scaled total debt of the reserve\"}},\"nonces(address)\":{\"params\":{\"owner\":\"The address for which the nonce is being returned\"},\"returns\":{\"_0\":\"The nonce value for the input address`\"}},\"scaledBalanceOf(address)\":{\"details\":\"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update\",\"params\":{\"user\":\"The user whose balance is calculated\"},\"returns\":{\"_0\":\"The scaled balance of the user\"}},\"scaledTotalSupply()\":{\"returns\":{\"_0\":\"The scaled total supply\"}},\"setIncentivesController(address)\":{\"params\":{\"controller\":\"the new Incentives controller\"}},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Being non transferrable, the debt token does not implement any of the standard ERC20 functions for transfer and allowance.\"}},\"title\":\"VariableDebtToken\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"notice\":\"Get the domain separator for the token\"},\"UNDERLYING_ASSET_ADDRESS()\":{\"notice\":\"Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\"},\"approveDelegation(address,uint256)\":{\"notice\":\"Delegates borrowing power to a user on the specific debt token. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)\"},\"borrowAllowance(address,address)\":{\"notice\":\"Returns the borrow allowance of the user\"},\"burn(address,uint256,uint256)\":{\"notice\":\"Burns user variable debt\"},\"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Delegates borrowing power to a user on the specific debt token via ERC712 signature\"},\"getIncentivesController()\":{\"notice\":\"Returns the address of the Incentives Controller contract\"},\"getPreviousIndex(address)\":{\"notice\":\"Returns last index interest was accrued to the user's balance\"},\"getScaledUserBalanceAndSupply(address)\":{\"notice\":\"Returns the scaled balance of the user and the scaled total supply.\"},\"initialize(address,address,address,uint8,string,string,bytes)\":{\"notice\":\"Initializes the debt token.\"},\"mint(address,address,uint256,uint256)\":{\"notice\":\"Mints debt token to the `onBehalfOf` address\"},\"nonces(address)\":{\"notice\":\"Returns the nonce value for address specified as parameter\"},\"scaledBalanceOf(address)\":{\"notice\":\"Returns the scaled balance of the user.\"},\"scaledTotalSupply()\":{\"notice\":\"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\"},\"setIncentivesController(address)\":{\"notice\":\"Sets a new Incentives Controller\"}},\"notice\":\"Implements a variable debt token to track the borrowing positions of users at variable rate mode\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol\":\"VariableDebtToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/ICreditDelegationToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ICreditDelegationToken\\n * @author Aave\\n * @notice Defines the basic interface for a token supporting credit delegation.\\n */\\ninterface ICreditDelegationToken {\\n  /**\\n   * @dev Emitted on `approveDelegation` and `borrowAllowance\\n   * @param fromUser The address of the delegator\\n   * @param toUser The address of the delegatee\\n   * @param asset The address of the delegated asset\\n   * @param amount The amount being delegated\\n   */\\n  event BorrowAllowanceDelegated(\\n    address indexed fromUser,\\n    address indexed toUser,\\n    address indexed asset,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @notice Delegates borrowing power to a user on the specific debt token.\\n   * Delegation will still respect the liquidation constraints (even if delegated, a\\n   * delegatee cannot force a delegator HF to go below 1)\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The maximum amount being delegated.\\n   */\\n  function approveDelegation(address delegatee, uint256 amount) external;\\n\\n  /**\\n   * @notice Returns the borrow allowance of the user\\n   * @param fromUser The user to giving allowance\\n   * @param toUser The user to give allowance to\\n   * @return The current allowance of `toUser`\\n   */\\n  function borrowAllowance(address fromUser, address toUser) external view returns (uint256);\\n\\n  /**\\n   * @notice Delegates borrowing power to a user on the specific debt token via ERC712 signature\\n   * @param delegator The delegator of the credit\\n   * @param delegatee The delegatee that can use the credit\\n   * @param value The amount to be delegated\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v The V signature param\\n   * @param s The S signature param\\n   * @param r The R signature param\\n   */\\n  function delegationWithSig(\\n    address delegator,\\n    address delegatee,\\n    uint256 value,\\n    uint256 deadline,\\n    uint8 v,\\n    bytes32 r,\\n    bytes32 s\\n  ) external;\\n}\\n\",\"keccak256\":\"0xab2789bbbf54af9609fbd7fa93595a514866728b3096ede6b69952f98290c997\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {SafeCast} from '../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {VersionedInitializable} from '../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\nimport {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';\\nimport {IInitializableDebtToken} from '../../interfaces/IInitializableDebtToken.sol';\\nimport {IVariableDebtToken} from '../../interfaces/IVariableDebtToken.sol';\\nimport {EIP712Base} from './base/EIP712Base.sol';\\nimport {DebtTokenBase} from './base/DebtTokenBase.sol';\\nimport {ScaledBalanceTokenBase} from './base/ScaledBalanceTokenBase.sol';\\n\\n/**\\n * @title VariableDebtToken\\n * @author Aave\\n * @notice Implements a variable debt token to track the borrowing positions of users\\n * at variable rate mode\\n * @dev Transfer and approve functionalities are disabled since its a non-transferable token\\n */\\ncontract VariableDebtToken is DebtTokenBase, ScaledBalanceTokenBase, IVariableDebtToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  uint256 public constant DEBT_TOKEN_REVISION = 0x1;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The address of the Pool contract\\n   */\\n  constructor(\\n    IPool pool\\n  )\\n    DebtTokenBase()\\n    ScaledBalanceTokenBase(pool, 'VARIABLE_DEBT_TOKEN_IMPL', 'VARIABLE_DEBT_TOKEN_IMPL', 0)\\n  {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IInitializableDebtToken\\n  function initialize(\\n    IPool initializingPool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external override initializer {\\n    require(initializingPool == POOL, Errors.POOL_ADDRESSES_DO_NOT_MATCH);\\n    _setName(debtTokenName);\\n    _setSymbol(debtTokenSymbol);\\n    _setDecimals(debtTokenDecimals);\\n\\n    _underlyingAsset = underlyingAsset;\\n    _incentivesController = incentivesController;\\n\\n    _domainSeparator = _calculateDomainSeparator();\\n\\n    emit Initialized(\\n      underlyingAsset,\\n      address(POOL),\\n      address(incentivesController),\\n      debtTokenDecimals,\\n      debtTokenName,\\n      debtTokenSymbol,\\n      params\\n    );\\n  }\\n\\n  /// @inheritdoc VersionedInitializable\\n  function getRevision() internal pure virtual override returns (uint256) {\\n    return DEBT_TOKEN_REVISION;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address user) public view virtual override returns (uint256) {\\n    uint256 scaledBalance = super.balanceOf(user);\\n\\n    if (scaledBalance == 0) {\\n      return 0;\\n    }\\n\\n    return scaledBalance.rayMul(POOL.getReserveNormalizedVariableDebt(_underlyingAsset));\\n  }\\n\\n  /// @inheritdoc IVariableDebtToken\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external virtual override onlyPool returns (bool, uint256) {\\n    if (user != onBehalfOf) {\\n      _decreaseBorrowAllowance(onBehalfOf, user, amount);\\n    }\\n    return (_mintScaled(user, onBehalfOf, amount, index), scaledTotalSupply());\\n  }\\n\\n  /// @inheritdoc IVariableDebtToken\\n  function burn(\\n    address from,\\n    uint256 amount,\\n    uint256 index\\n  ) external virtual override onlyPool returns (uint256) {\\n    _burnScaled(from, address(0), amount, index);\\n    return scaledTotalSupply();\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return super.totalSupply().rayMul(POOL.getReserveNormalizedVariableDebt(_underlyingAsset));\\n  }\\n\\n  /// @inheritdoc EIP712Base\\n  function _EIP712BaseId() internal view override returns (string memory) {\\n    return name();\\n  }\\n\\n  /**\\n   * @dev Being non transferrable, the debt token does not implement any of the\\n   * standard ERC20 functions for transfer and allowance.\\n   */\\n  function transfer(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function allowance(address, address) external view virtual override returns (uint256) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function approve(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function transferFrom(address, address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function increaseAllowance(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  function decreaseAllowance(address, uint256) external virtual override returns (bool) {\\n    revert(Errors.OPERATION_NOT_SUPPORTED);\\n  }\\n\\n  /// @inheritdoc IVariableDebtToken\\n  function UNDERLYING_ASSET_ADDRESS() external view override returns (address) {\\n    return _underlyingAsset;\\n  }\\n}\\n\",\"keccak256\":\"0xd86b1ee620cb0fb2d3db1926f31660cd94c055e17103102e2b13f84c7a65191d\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/DebtTokenBase.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {VersionedInitializable} from '../../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {ICreditDelegationToken} from '../../../interfaces/ICreditDelegationToken.sol';\\nimport {EIP712Base} from './EIP712Base.sol';\\n\\n/**\\n * @title DebtTokenBase\\n * @author Aave\\n * @notice Base contract for different types of debt tokens, like StableDebtToken or VariableDebtToken\\n */\\nabstract contract DebtTokenBase is\\n  VersionedInitializable,\\n  EIP712Base,\\n  Context,\\n  ICreditDelegationToken\\n{\\n  // Map of borrow allowances (delegator => delegatee => borrowAllowanceAmount)\\n  mapping(address => mapping(address => uint256)) internal _borrowAllowances;\\n\\n  // Credit Delegation Typehash\\n  bytes32 public constant DELEGATION_WITH_SIG_TYPEHASH =\\n    keccak256('DelegationWithSig(address delegatee,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  address internal _underlyingAsset;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() EIP712Base() {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function approveDelegation(address delegatee, uint256 amount) external override {\\n    _approveDelegation(_msgSender(), delegatee, amount);\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function delegationWithSig(\\n    address delegator,\\n    address delegatee,\\n    uint256 value,\\n    uint256 deadline,\\n    uint8 v,\\n    bytes32 r,\\n    bytes32 s\\n  ) external {\\n    require(delegator != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, Errors.INVALID_EXPIRATION);\\n    uint256 currentValidNonce = _nonces[delegator];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR(),\\n        keccak256(\\n          abi.encode(DELEGATION_WITH_SIG_TYPEHASH, delegatee, value, currentValidNonce, deadline)\\n        )\\n      )\\n    );\\n    require(delegator == ecrecover(digest, v, r, s), Errors.INVALID_SIGNATURE);\\n    _nonces[delegator] = currentValidNonce + 1;\\n    _approveDelegation(delegator, delegatee, value);\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function borrowAllowance(\\n    address fromUser,\\n    address toUser\\n  ) external view override returns (uint256) {\\n    return _borrowAllowances[fromUser][toUser];\\n  }\\n\\n  /**\\n   * @notice Updates the borrow allowance of a user on the specific debt token.\\n   * @param delegator The address delegating the borrowing power\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The allowance amount being delegated.\\n   */\\n  function _approveDelegation(address delegator, address delegatee, uint256 amount) internal {\\n    _borrowAllowances[delegator][delegatee] = amount;\\n    emit BorrowAllowanceDelegated(delegator, delegatee, _underlyingAsset, amount);\\n  }\\n\\n  /**\\n   * @notice Decreases the borrow allowance of a user on the specific debt token.\\n   * @param delegator The address delegating the borrowing power\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The amount to subtract from the current allowance\\n   */\\n  function _decreaseBorrowAllowance(address delegator, address delegatee, uint256 amount) internal {\\n    uint256 newAllowance = _borrowAllowances[delegator][delegatee] - amount;\\n\\n    _borrowAllowances[delegator][delegatee] = newAllowance;\\n\\n    emit BorrowAllowanceDelegated(delegator, delegatee, _underlyingAsset, newAllowance);\\n  }\\n}\\n\",\"keccak256\":\"0xf2f4490b59813b0372edfa3eca4b74bb2eb3be386c109201ddc08b97e1bff9fd\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/EIP712Base.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title EIP712Base\\n * @author Aave\\n * @notice Base contract implementation of EIP712.\\n */\\nabstract contract EIP712Base {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 internal _domainSeparator;\\n  uint256 internal immutable _chainId;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() {\\n    _chainId = block.chainid;\\n  }\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\\n    if (block.chainid == _chainId) {\\n      return _domainSeparator;\\n    }\\n    return _calculateDomainSeparator();\\n  }\\n\\n  /**\\n   * @notice Returns the nonce value for address specified as parameter\\n   * @param owner The address for which the nonce is being returned\\n   * @return The nonce value for the input address`\\n   */\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n\\n  /**\\n   * @notice Compute the current domain separator\\n   * @return The domain separator for the token\\n   */\\n  function _calculateDomainSeparator() internal view returns (bytes32) {\\n    return\\n      keccak256(\\n        abi.encode(\\n          EIP712_DOMAIN,\\n          keccak256(bytes(_EIP712BaseId())),\\n          keccak256(EIP712_REVISION),\\n          block.chainid,\\n          address(this)\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Returns the user readable name of signing domain (e.g. token name)\\n   * @return The name of the signing domain\\n   */\\n  function _EIP712BaseId() internal view virtual returns (string memory);\\n}\\n\",\"keccak256\":\"0xd4ed5763068be0ffb08219fc2f9f3c87487578cd0617dae06db26018054b89cd\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IncentivizedERC20} from './IncentivizedERC20.sol';\\n\\n/**\\n * @title MintableIncentivizedERC20\\n * @author Aave\\n * @notice Implements mint and burn functions for IncentivizedERC20\\n */\\nabstract contract MintableIncentivizedERC20 is IncentivizedERC20 {\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) IncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /**\\n   * @notice Mints tokens to an account and apply incentives if defined\\n   * @param account The address receiving tokens\\n   * @param amount The amount of tokens to mint\\n   */\\n  function _mint(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply + amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns tokens from an account and apply incentives if defined\\n   * @param account The account whose tokens are burnt\\n   * @param amount The amount of tokens to burn\\n   */\\n  function _burn(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply - amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance - amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xc24b3d20923fd55a160698a594e47247c2fb0b1e0c795e47f89ddd2da2918824\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {MintableIncentivizedERC20} from './MintableIncentivizedERC20.sol';\\n\\n/**\\n * @title ScaledBalanceTokenBase\\n * @author Aave\\n * @notice Basic ERC20 implementation of scaled balance token\\n */\\nabstract contract ScaledBalanceTokenBase is MintableIncentivizedERC20, IScaledBalanceToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) MintableIncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledBalanceOf(address user) external view override returns (uint256) {\\n    return super.balanceOf(user);\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getScaledUserBalanceAndSupply(\\n    address user\\n  ) external view override returns (uint256, uint256) {\\n    return (super.balanceOf(user), super.totalSupply());\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledTotalSupply() public view virtual override returns (uint256) {\\n    return super.totalSupply();\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getPreviousIndex(address user) external view virtual override returns (uint256) {\\n    return _userState[user].additionalData;\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to mint a scaled balance token.\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the scaled tokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function _mintScaled(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) internal returns (bool) {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_MINT_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(onBehalfOf);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[onBehalfOf].additionalData);\\n\\n    _userState[onBehalfOf].additionalData = index.toUint128();\\n\\n    _mint(onBehalfOf, amountScaled.toUint128());\\n\\n    uint256 amountToMint = amount + balanceIncrease;\\n    emit Transfer(address(0), onBehalfOf, amountToMint);\\n    emit Mint(caller, onBehalfOf, amountToMint, balanceIncrease, index);\\n\\n    return (scaledBalance == 0);\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to burn a scaled balance token.\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param user The user which debt is burnt\\n   * @param target The address that will receive the underlying, if any\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   */\\n  function _burnScaled(address user, address target, uint256 amount, uint256 index) internal {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_BURN_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(user);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[user].additionalData);\\n\\n    _userState[user].additionalData = index.toUint128();\\n\\n    _burn(user, amountScaled.toUint128());\\n\\n    if (balanceIncrease > amount) {\\n      uint256 amountToMint = balanceIncrease - amount;\\n      emit Transfer(address(0), user, amountToMint);\\n      emit Mint(user, user, amountToMint, balanceIncrease, index);\\n    } else {\\n      uint256 amountToBurn = amount - balanceIncrease;\\n      emit Transfer(user, address(0), amountToBurn);\\n      emit Burn(user, target, amountToBurn, balanceIncrease, index);\\n    }\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to transfer scaled balance tokens between two users\\n   * @dev It emits a mint event with the interest accrued per user\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount, uint256 index) internal {\\n    uint256 senderScaledBalance = super.balanceOf(sender);\\n    uint256 senderBalanceIncrease = senderScaledBalance.rayMul(index) -\\n      senderScaledBalance.rayMul(_userState[sender].additionalData);\\n\\n    uint256 recipientScaledBalance = super.balanceOf(recipient);\\n    uint256 recipientBalanceIncrease = recipientScaledBalance.rayMul(index) -\\n      recipientScaledBalance.rayMul(_userState[recipient].additionalData);\\n\\n    _userState[sender].additionalData = index.toUint128();\\n    _userState[recipient].additionalData = index.toUint128();\\n\\n    super._transfer(sender, recipient, amount.rayDiv(index).toUint128());\\n\\n    if (senderBalanceIncrease > 0) {\\n      emit Transfer(address(0), sender, senderBalanceIncrease);\\n      emit Mint(_msgSender(), sender, senderBalanceIncrease, senderBalanceIncrease, index);\\n    }\\n\\n    if (sender != recipient && recipientBalanceIncrease > 0) {\\n      emit Transfer(address(0), recipient, recipientBalanceIncrease);\\n      emit Mint(_msgSender(), recipient, recipientBalanceIncrease, recipientBalanceIncrease, index);\\n    }\\n\\n    emit Transfer(sender, recipient, amount);\\n  }\\n}\\n\",\"keccak256\":\"0xbd3f86bbb655838646ea5f7c306bc8c572a9d272f54632f369908bb5420021dd\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":10499,"contract":"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":10502,"contract":"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":10572,"contract":"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":27740,"contract":"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"_nonces","offset":0,"slot":"52","type":"t_mapping(t_address,t_uint256)"},{"astId":27742,"contract":"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"_domainSeparator","offset":0,"slot":"53","type":"t_bytes32"},{"astId":27517,"contract":"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"_borrowAllowances","offset":0,"slot":"54","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":27524,"contract":"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"_underlyingAsset","offset":0,"slot":"55","type":"t_address"},{"astId":27906,"contract":"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"_userState","offset":0,"slot":"56","type":"t_mapping(t_address,t_struct(UserState)27901_storage)"},{"astId":27912,"contract":"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"_allowances","offset":0,"slot":"57","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":27914,"contract":"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"_totalSupply","offset":0,"slot":"58","type":"t_uint256"},{"astId":27916,"contract":"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"_name","offset":0,"slot":"59","type":"t_string_storage"},{"astId":27918,"contract":"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"_symbol","offset":0,"slot":"60","type":"t_string_storage"},{"astId":27920,"contract":"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"_decimals","offset":0,"slot":"61","type":"t_uint8"},{"astId":27923,"contract":"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"_incentivesController","offset":1,"slot":"61","type":"t_contract(IAaveIncentivesController)3875"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IAaveIncentivesController)3875":{"encoding":"inplace","label":"contract IAaveIncentivesController","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(UserState)27901_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct IncentivizedERC20.UserState)","numberOfBytes":"32","value":"t_struct(UserState)27901_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(UserState)27901_storage":{"encoding":"inplace","label":"struct IncentivizedERC20.UserState","members":[{"astId":27898,"contract":"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"balance","offset":0,"slot":"0","type":"t_uint128"},{"astId":27900,"contract":"@aave/core-v3/contracts/protocol/tokenization/VariableDebtToken.sol:VariableDebtToken","label":"additionalData","offset":16,"slot":"0","type":"t_uint128"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"DOMAIN_SEPARATOR()":{"notice":"Get the domain separator for the token"},"UNDERLYING_ASSET_ADDRESS()":{"notice":"Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)"},"approveDelegation(address,uint256)":{"notice":"Delegates borrowing power to a user on the specific debt token. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)"},"borrowAllowance(address,address)":{"notice":"Returns the borrow allowance of the user"},"burn(address,uint256,uint256)":{"notice":"Burns user variable debt"},"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Delegates borrowing power to a user on the specific debt token via ERC712 signature"},"getIncentivesController()":{"notice":"Returns the address of the Incentives Controller contract"},"getPreviousIndex(address)":{"notice":"Returns last index interest was accrued to the user's balance"},"getScaledUserBalanceAndSupply(address)":{"notice":"Returns the scaled balance of the user and the scaled total supply."},"initialize(address,address,address,uint8,string,string,bytes)":{"notice":"Initializes the debt token."},"mint(address,address,uint256,uint256)":{"notice":"Mints debt token to the `onBehalfOf` address"},"nonces(address)":{"notice":"Returns the nonce value for address specified as parameter"},"scaledBalanceOf(address)":{"notice":"Returns the scaled balance of the user."},"scaledTotalSupply()":{"notice":"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)"},"setIncentivesController(address)":{"notice":"Sets a new Incentives Controller"}},"notice":"Implements a variable debt token to track the borrowing positions of users at variable rate mode","version":1}}},"@aave/core-v3/contracts/protocol/tokenization/base/DebtTokenBase.sol":{"DebtTokenBase":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fromUser","type":"address"},{"indexed":true,"internalType":"address","name":"toUser","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BorrowAllowanceDelegated","type":"event"},{"inputs":[],"name":"DELEGATION_WITH_SIG_TYPEHASH","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":"EIP712_REVISION","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approveDelegation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromUser","type":"address"},{"internalType":"address","name":"toUser","type":"address"}],"name":"borrowAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"},{"internalType":"address","name":"delegatee","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":"delegationWithSig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Return cached value if chainId matches cache, otherwise recomputes separator","returns":{"_0":"The domain separator of the token at current chain"}},"approveDelegation(address,uint256)":{"params":{"amount":"The maximum amount being delegated.","delegatee":"The address receiving the delegated borrowing power"}},"borrowAllowance(address,address)":{"params":{"fromUser":"The user to giving allowance","toUser":"The user to give allowance to"},"returns":{"_0":"The current allowance of `toUser`"}},"constructor":{"details":"Constructor."},"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","delegatee":"The delegatee that can use the credit","delegator":"The delegator of the credit","r":"The R signature param","s":"The S signature param","v":"The V signature param","value":"The amount to be delegated"}},"nonces(address)":{"params":{"owner":"The address for which the nonce is being returned"},"returns":{"_0":"The nonce value for the input address`"}}},"title":"DebtTokenBase","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"DELEGATION_WITH_SIG_TYPEHASH()":"f3bfc738","DOMAIN_SEPARATOR()":"3644e515","EIP712_REVISION()":"78160376","approveDelegation(address,uint256)":"c04a8a10","borrowAllowance(address,address)":"6bd76d24","delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":"0b52d558","nonces(address)":"7ecebe00"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BorrowAllowanceDelegated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DELEGATION_WITH_SIG_TYPEHASH\",\"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\":\"EIP712_REVISION\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approveDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromUser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toUser\",\"type\":\"address\"}],\"name\":\"borrowAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegatee\",\"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\":\"delegationWithSig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Return cached value if chainId matches cache, otherwise recomputes separator\",\"returns\":{\"_0\":\"The domain separator of the token at current chain\"}},\"approveDelegation(address,uint256)\":{\"params\":{\"amount\":\"The maximum amount being delegated.\",\"delegatee\":\"The address receiving the delegated borrowing power\"}},\"borrowAllowance(address,address)\":{\"params\":{\"fromUser\":\"The user to giving allowance\",\"toUser\":\"The user to give allowance to\"},\"returns\":{\"_0\":\"The current allowance of `toUser`\"}},\"constructor\":{\"details\":\"Constructor.\"},\"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"delegatee\":\"The delegatee that can use the credit\",\"delegator\":\"The delegator of the credit\",\"r\":\"The R signature param\",\"s\":\"The S signature param\",\"v\":\"The V signature param\",\"value\":\"The amount to be delegated\"}},\"nonces(address)\":{\"params\":{\"owner\":\"The address for which the nonce is being returned\"},\"returns\":{\"_0\":\"The nonce value for the input address`\"}}},\"title\":\"DebtTokenBase\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"notice\":\"Get the domain separator for the token\"},\"approveDelegation(address,uint256)\":{\"notice\":\"Delegates borrowing power to a user on the specific debt token. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)\"},\"borrowAllowance(address,address)\":{\"notice\":\"Returns the borrow allowance of the user\"},\"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Delegates borrowing power to a user on the specific debt token via ERC712 signature\"},\"nonces(address)\":{\"notice\":\"Returns the nonce value for address specified as parameter\"}},\"notice\":\"Base contract for different types of debt tokens, like StableDebtToken or VariableDebtToken\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/tokenization/base/DebtTokenBase.sol\":\"DebtTokenBase\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/ICreditDelegationToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ICreditDelegationToken\\n * @author Aave\\n * @notice Defines the basic interface for a token supporting credit delegation.\\n */\\ninterface ICreditDelegationToken {\\n  /**\\n   * @dev Emitted on `approveDelegation` and `borrowAllowance\\n   * @param fromUser The address of the delegator\\n   * @param toUser The address of the delegatee\\n   * @param asset The address of the delegated asset\\n   * @param amount The amount being delegated\\n   */\\n  event BorrowAllowanceDelegated(\\n    address indexed fromUser,\\n    address indexed toUser,\\n    address indexed asset,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @notice Delegates borrowing power to a user on the specific debt token.\\n   * Delegation will still respect the liquidation constraints (even if delegated, a\\n   * delegatee cannot force a delegator HF to go below 1)\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The maximum amount being delegated.\\n   */\\n  function approveDelegation(address delegatee, uint256 amount) external;\\n\\n  /**\\n   * @notice Returns the borrow allowance of the user\\n   * @param fromUser The user to giving allowance\\n   * @param toUser The user to give allowance to\\n   * @return The current allowance of `toUser`\\n   */\\n  function borrowAllowance(address fromUser, address toUser) external view returns (uint256);\\n\\n  /**\\n   * @notice Delegates borrowing power to a user on the specific debt token via ERC712 signature\\n   * @param delegator The delegator of the credit\\n   * @param delegatee The delegatee that can use the credit\\n   * @param value The amount to be delegated\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v The V signature param\\n   * @param s The S signature param\\n   * @param r The R signature param\\n   */\\n  function delegationWithSig(\\n    address delegator,\\n    address delegatee,\\n    uint256 value,\\n    uint256 deadline,\\n    uint8 v,\\n    bytes32 r,\\n    bytes32 s\\n  ) external;\\n}\\n\",\"keccak256\":\"0xab2789bbbf54af9609fbd7fa93595a514866728b3096ede6b69952f98290c997\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/DebtTokenBase.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {VersionedInitializable} from '../../libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {ICreditDelegationToken} from '../../../interfaces/ICreditDelegationToken.sol';\\nimport {EIP712Base} from './EIP712Base.sol';\\n\\n/**\\n * @title DebtTokenBase\\n * @author Aave\\n * @notice Base contract for different types of debt tokens, like StableDebtToken or VariableDebtToken\\n */\\nabstract contract DebtTokenBase is\\n  VersionedInitializable,\\n  EIP712Base,\\n  Context,\\n  ICreditDelegationToken\\n{\\n  // Map of borrow allowances (delegator => delegatee => borrowAllowanceAmount)\\n  mapping(address => mapping(address => uint256)) internal _borrowAllowances;\\n\\n  // Credit Delegation Typehash\\n  bytes32 public constant DELEGATION_WITH_SIG_TYPEHASH =\\n    keccak256('DelegationWithSig(address delegatee,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  address internal _underlyingAsset;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() EIP712Base() {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function approveDelegation(address delegatee, uint256 amount) external override {\\n    _approveDelegation(_msgSender(), delegatee, amount);\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function delegationWithSig(\\n    address delegator,\\n    address delegatee,\\n    uint256 value,\\n    uint256 deadline,\\n    uint8 v,\\n    bytes32 r,\\n    bytes32 s\\n  ) external {\\n    require(delegator != address(0), Errors.ZERO_ADDRESS_NOT_VALID);\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, Errors.INVALID_EXPIRATION);\\n    uint256 currentValidNonce = _nonces[delegator];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR(),\\n        keccak256(\\n          abi.encode(DELEGATION_WITH_SIG_TYPEHASH, delegatee, value, currentValidNonce, deadline)\\n        )\\n      )\\n    );\\n    require(delegator == ecrecover(digest, v, r, s), Errors.INVALID_SIGNATURE);\\n    _nonces[delegator] = currentValidNonce + 1;\\n    _approveDelegation(delegator, delegatee, value);\\n  }\\n\\n  /// @inheritdoc ICreditDelegationToken\\n  function borrowAllowance(\\n    address fromUser,\\n    address toUser\\n  ) external view override returns (uint256) {\\n    return _borrowAllowances[fromUser][toUser];\\n  }\\n\\n  /**\\n   * @notice Updates the borrow allowance of a user on the specific debt token.\\n   * @param delegator The address delegating the borrowing power\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The allowance amount being delegated.\\n   */\\n  function _approveDelegation(address delegator, address delegatee, uint256 amount) internal {\\n    _borrowAllowances[delegator][delegatee] = amount;\\n    emit BorrowAllowanceDelegated(delegator, delegatee, _underlyingAsset, amount);\\n  }\\n\\n  /**\\n   * @notice Decreases the borrow allowance of a user on the specific debt token.\\n   * @param delegator The address delegating the borrowing power\\n   * @param delegatee The address receiving the delegated borrowing power\\n   * @param amount The amount to subtract from the current allowance\\n   */\\n  function _decreaseBorrowAllowance(address delegator, address delegatee, uint256 amount) internal {\\n    uint256 newAllowance = _borrowAllowances[delegator][delegatee] - amount;\\n\\n    _borrowAllowances[delegator][delegatee] = newAllowance;\\n\\n    emit BorrowAllowanceDelegated(delegator, delegatee, _underlyingAsset, newAllowance);\\n  }\\n}\\n\",\"keccak256\":\"0xf2f4490b59813b0372edfa3eca4b74bb2eb3be386c109201ddc08b97e1bff9fd\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/EIP712Base.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title EIP712Base\\n * @author Aave\\n * @notice Base contract implementation of EIP712.\\n */\\nabstract contract EIP712Base {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 internal _domainSeparator;\\n  uint256 internal immutable _chainId;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() {\\n    _chainId = block.chainid;\\n  }\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\\n    if (block.chainid == _chainId) {\\n      return _domainSeparator;\\n    }\\n    return _calculateDomainSeparator();\\n  }\\n\\n  /**\\n   * @notice Returns the nonce value for address specified as parameter\\n   * @param owner The address for which the nonce is being returned\\n   * @return The nonce value for the input address`\\n   */\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n\\n  /**\\n   * @notice Compute the current domain separator\\n   * @return The domain separator for the token\\n   */\\n  function _calculateDomainSeparator() internal view returns (bytes32) {\\n    return\\n      keccak256(\\n        abi.encode(\\n          EIP712_DOMAIN,\\n          keccak256(bytes(_EIP712BaseId())),\\n          keccak256(EIP712_REVISION),\\n          block.chainid,\\n          address(this)\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Returns the user readable name of signing domain (e.g. token name)\\n   * @return The name of the signing domain\\n   */\\n  function _EIP712BaseId() internal view virtual returns (string memory);\\n}\\n\",\"keccak256\":\"0xd4ed5763068be0ffb08219fc2f9f3c87487578cd0617dae06db26018054b89cd\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":10499,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/DebtTokenBase.sol:DebtTokenBase","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":10502,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/DebtTokenBase.sol:DebtTokenBase","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":10572,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/DebtTokenBase.sol:DebtTokenBase","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":27740,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/DebtTokenBase.sol:DebtTokenBase","label":"_nonces","offset":0,"slot":"52","type":"t_mapping(t_address,t_uint256)"},{"astId":27742,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/DebtTokenBase.sol:DebtTokenBase","label":"_domainSeparator","offset":0,"slot":"53","type":"t_bytes32"},{"astId":27517,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/DebtTokenBase.sol:DebtTokenBase","label":"_borrowAllowances","offset":0,"slot":"54","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":27524,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/DebtTokenBase.sol:DebtTokenBase","label":"_underlyingAsset","offset":0,"slot":"55","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"DOMAIN_SEPARATOR()":{"notice":"Get the domain separator for the token"},"approveDelegation(address,uint256)":{"notice":"Delegates borrowing power to a user on the specific debt token. Delegation will still respect the liquidation constraints (even if delegated, a delegatee cannot force a delegator HF to go below 1)"},"borrowAllowance(address,address)":{"notice":"Returns the borrow allowance of the user"},"delegationWithSig(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Delegates borrowing power to a user on the specific debt token via ERC712 signature"},"nonces(address)":{"notice":"Returns the nonce value for address specified as parameter"}},"notice":"Base contract for different types of debt tokens, like StableDebtToken or VariableDebtToken","version":1}}},"@aave/core-v3/contracts/protocol/tokenization/base/EIP712Base.sol":{"EIP712Base":{"abi":[{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EIP712_REVISION","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"DOMAIN_SEPARATOR()":{"details":"Return cached value if chainId matches cache, otherwise recomputes separator","returns":{"_0":"The domain separator of the token at current chain"}},"constructor":{"details":"Constructor."},"nonces(address)":{"params":{"owner":"The address for which the nonce is being returned"},"returns":{"_0":"The nonce value for the input address`"}}},"title":"EIP712Base","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","EIP712_REVISION()":"78160376","nonces(address)":"7ecebe00"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EIP712_REVISION\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Return cached value if chainId matches cache, otherwise recomputes separator\",\"returns\":{\"_0\":\"The domain separator of the token at current chain\"}},\"constructor\":{\"details\":\"Constructor.\"},\"nonces(address)\":{\"params\":{\"owner\":\"The address for which the nonce is being returned\"},\"returns\":{\"_0\":\"The nonce value for the input address`\"}}},\"title\":\"EIP712Base\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"notice\":\"Get the domain separator for the token\"},\"nonces(address)\":{\"notice\":\"Returns the nonce value for address specified as parameter\"}},\"notice\":\"Base contract implementation of EIP712.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/tokenization/base/EIP712Base.sol\":\"EIP712Base\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/protocol/tokenization/base/EIP712Base.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title EIP712Base\\n * @author Aave\\n * @notice Base contract implementation of EIP712.\\n */\\nabstract contract EIP712Base {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 internal _domainSeparator;\\n  uint256 internal immutable _chainId;\\n\\n  /**\\n   * @dev Constructor.\\n   */\\n  constructor() {\\n    _chainId = block.chainid;\\n  }\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {\\n    if (block.chainid == _chainId) {\\n      return _domainSeparator;\\n    }\\n    return _calculateDomainSeparator();\\n  }\\n\\n  /**\\n   * @notice Returns the nonce value for address specified as parameter\\n   * @param owner The address for which the nonce is being returned\\n   * @return The nonce value for the input address`\\n   */\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n\\n  /**\\n   * @notice Compute the current domain separator\\n   * @return The domain separator for the token\\n   */\\n  function _calculateDomainSeparator() internal view returns (bytes32) {\\n    return\\n      keccak256(\\n        abi.encode(\\n          EIP712_DOMAIN,\\n          keccak256(bytes(_EIP712BaseId())),\\n          keccak256(EIP712_REVISION),\\n          block.chainid,\\n          address(this)\\n        )\\n      );\\n  }\\n\\n  /**\\n   * @notice Returns the user readable name of signing domain (e.g. token name)\\n   * @return The name of the signing domain\\n   */\\n  function _EIP712BaseId() internal view virtual returns (string memory);\\n}\\n\",\"keccak256\":\"0xd4ed5763068be0ffb08219fc2f9f3c87487578cd0617dae06db26018054b89cd\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":27740,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/EIP712Base.sol:EIP712Base","label":"_nonces","offset":0,"slot":"0","type":"t_mapping(t_address,t_uint256)"},{"astId":27742,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/EIP712Base.sol:EIP712Base","label":"_domainSeparator","offset":0,"slot":"1","type":"t_bytes32"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"DOMAIN_SEPARATOR()":{"notice":"Get the domain separator for the token"},"nonces(address)":{"notice":"Returns the nonce value for address specified as parameter"}},"notice":"Base contract implementation of EIP712.","version":1}}},"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol":{"IncentivizedERC20":{"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":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"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":[],"name":"getIncentivesController","outputs":[{"internalType":"contract IAaveIncentivesController","name":"","type":"address"}],"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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IAaveIncentivesController","name":"controller","type":"address"}],"name":"setIncentivesController","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":{"author":"Aave, inspired by the Openzeppelin ERC20 implementation","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`."},"constructor":{"details":"Constructor.","params":{"decimals":"The number of decimals of the token","name":"The name of the token","pool":"The reference to the main Pool contract","symbol":"The symbol of the token"}},"decreaseAllowance(address,uint256)":{"params":{"spender":"The user allowed to spend on behalf of _msgSender()","subtractedValue":"The amount being subtracted to the allowance"},"returns":{"_0":"`true`"}},"getIncentivesController()":{"returns":{"_0":"The address of the Incentives Controller"}},"increaseAllowance(address,uint256)":{"params":{"addedValue":"The amount being added to the allowance","spender":"The user allowed to spend on behalf of _msgSender()"},"returns":{"_0":"`true`"}},"setIncentivesController(address)":{"params":{"controller":"the new Incentives controller"}},"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."}},"title":"IncentivizedERC20","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"POOL()":"7535d246","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","getIncentivesController()":"75d26413","increaseAllowance(address,uint256)":"39509351","name()":"06fdde03","setIncentivesController(address)":"e655dbd8","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"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\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"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\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"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\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setIncentivesController\",\"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\":{\"author\":\"Aave, inspired by the Openzeppelin ERC20 implementation\",\"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`.\"},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"decimals\":\"The number of decimals of the token\",\"name\":\"The name of the token\",\"pool\":\"The reference to the main Pool contract\",\"symbol\":\"The symbol of the token\"}},\"decreaseAllowance(address,uint256)\":{\"params\":{\"spender\":\"The user allowed to spend on behalf of _msgSender()\",\"subtractedValue\":\"The amount being subtracted to the allowance\"},\"returns\":{\"_0\":\"`true`\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"The address of the Incentives Controller\"}},\"increaseAllowance(address,uint256)\":{\"params\":{\"addedValue\":\"The amount being added to the allowance\",\"spender\":\"The user allowed to spend on behalf of _msgSender()\"},\"returns\":{\"_0\":\"`true`\"}},\"setIncentivesController(address)\":{\"params\":{\"controller\":\"the new Incentives controller\"}},\"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.\"}},\"title\":\"IncentivizedERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"decreaseAllowance(address,uint256)\":{\"notice\":\"Decreases the allowance of spender to spend _msgSender() tokens\"},\"getIncentivesController()\":{\"notice\":\"Returns the address of the Incentives Controller contract\"},\"increaseAllowance(address,uint256)\":{\"notice\":\"Increases the allowance of spender to spend _msgSender() tokens\"},\"setIncentivesController(address)\":{\"notice\":\"Sets a new Incentives Controller\"}},\"notice\":\"Basic ERC20 implementation\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol\":\"IncentivizedERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":27906,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol:IncentivizedERC20","label":"_userState","offset":0,"slot":"0","type":"t_mapping(t_address,t_struct(UserState)27901_storage)"},{"astId":27912,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol:IncentivizedERC20","label":"_allowances","offset":0,"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":27914,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol:IncentivizedERC20","label":"_totalSupply","offset":0,"slot":"2","type":"t_uint256"},{"astId":27916,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol:IncentivizedERC20","label":"_name","offset":0,"slot":"3","type":"t_string_storage"},{"astId":27918,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol:IncentivizedERC20","label":"_symbol","offset":0,"slot":"4","type":"t_string_storage"},{"astId":27920,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol:IncentivizedERC20","label":"_decimals","offset":0,"slot":"5","type":"t_uint8"},{"astId":27923,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol:IncentivizedERC20","label":"_incentivesController","offset":1,"slot":"5","type":"t_contract(IAaveIncentivesController)3875"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_contract(IAaveIncentivesController)3875":{"encoding":"inplace","label":"contract IAaveIncentivesController","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(UserState)27901_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct IncentivizedERC20.UserState)","numberOfBytes":"32","value":"t_struct(UserState)27901_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(UserState)27901_storage":{"encoding":"inplace","label":"struct IncentivizedERC20.UserState","members":[{"astId":27898,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol:IncentivizedERC20","label":"balance","offset":0,"slot":"0","type":"t_uint128"},{"astId":27900,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol:IncentivizedERC20","label":"additionalData","offset":16,"slot":"0","type":"t_uint128"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"decreaseAllowance(address,uint256)":{"notice":"Decreases the allowance of spender to spend _msgSender() tokens"},"getIncentivesController()":{"notice":"Returns the address of the Incentives Controller contract"},"increaseAllowance(address,uint256)":{"notice":"Increases the allowance of spender to spend _msgSender() tokens"},"setIncentivesController(address)":{"notice":"Sets a new Incentives Controller"}},"notice":"Basic ERC20 implementation","version":1}}},"@aave/core-v3/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol":{"MintableIncentivizedERC20":{"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":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"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":[],"name":"getIncentivesController","outputs":[{"internalType":"contract IAaveIncentivesController","name":"","type":"address"}],"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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IAaveIncentivesController","name":"controller","type":"address"}],"name":"setIncentivesController","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":{"author":"Aave","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`."},"constructor":{"details":"Constructor.","params":{"decimals":"The number of decimals of the token","name":"The name of the token","pool":"The reference to the main Pool contract","symbol":"The symbol of the token"}},"decreaseAllowance(address,uint256)":{"params":{"spender":"The user allowed to spend on behalf of _msgSender()","subtractedValue":"The amount being subtracted to the allowance"},"returns":{"_0":"`true`"}},"getIncentivesController()":{"returns":{"_0":"The address of the Incentives Controller"}},"increaseAllowance(address,uint256)":{"params":{"addedValue":"The amount being added to the allowance","spender":"The user allowed to spend on behalf of _msgSender()"},"returns":{"_0":"`true`"}},"setIncentivesController(address)":{"params":{"controller":"the new Incentives controller"}},"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."}},"title":"MintableIncentivizedERC20","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"POOL()":"7535d246","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","getIncentivesController()":"75d26413","increaseAllowance(address,uint256)":"39509351","name()":"06fdde03","setIncentivesController(address)":"e655dbd8","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"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\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"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\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"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\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setIncentivesController\",\"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\":{\"author\":\"Aave\",\"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`.\"},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"decimals\":\"The number of decimals of the token\",\"name\":\"The name of the token\",\"pool\":\"The reference to the main Pool contract\",\"symbol\":\"The symbol of the token\"}},\"decreaseAllowance(address,uint256)\":{\"params\":{\"spender\":\"The user allowed to spend on behalf of _msgSender()\",\"subtractedValue\":\"The amount being subtracted to the allowance\"},\"returns\":{\"_0\":\"`true`\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"The address of the Incentives Controller\"}},\"increaseAllowance(address,uint256)\":{\"params\":{\"addedValue\":\"The amount being added to the allowance\",\"spender\":\"The user allowed to spend on behalf of _msgSender()\"},\"returns\":{\"_0\":\"`true`\"}},\"setIncentivesController(address)\":{\"params\":{\"controller\":\"the new Incentives controller\"}},\"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.\"}},\"title\":\"MintableIncentivizedERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"decreaseAllowance(address,uint256)\":{\"notice\":\"Decreases the allowance of spender to spend _msgSender() tokens\"},\"getIncentivesController()\":{\"notice\":\"Returns the address of the Incentives Controller contract\"},\"increaseAllowance(address,uint256)\":{\"notice\":\"Increases the allowance of spender to spend _msgSender() tokens\"},\"setIncentivesController(address)\":{\"notice\":\"Sets a new Incentives Controller\"}},\"notice\":\"Implements mint and burn functions for IncentivizedERC20\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol\":\"MintableIncentivizedERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IncentivizedERC20} from './IncentivizedERC20.sol';\\n\\n/**\\n * @title MintableIncentivizedERC20\\n * @author Aave\\n * @notice Implements mint and burn functions for IncentivizedERC20\\n */\\nabstract contract MintableIncentivizedERC20 is IncentivizedERC20 {\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) IncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /**\\n   * @notice Mints tokens to an account and apply incentives if defined\\n   * @param account The address receiving tokens\\n   * @param amount The amount of tokens to mint\\n   */\\n  function _mint(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply + amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns tokens from an account and apply incentives if defined\\n   * @param account The account whose tokens are burnt\\n   * @param amount The amount of tokens to burn\\n   */\\n  function _burn(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply - amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance - amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xc24b3d20923fd55a160698a594e47247c2fb0b1e0c795e47f89ddd2da2918824\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":27906,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol:MintableIncentivizedERC20","label":"_userState","offset":0,"slot":"0","type":"t_mapping(t_address,t_struct(UserState)27901_storage)"},{"astId":27912,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol:MintableIncentivizedERC20","label":"_allowances","offset":0,"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":27914,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol:MintableIncentivizedERC20","label":"_totalSupply","offset":0,"slot":"2","type":"t_uint256"},{"astId":27916,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol:MintableIncentivizedERC20","label":"_name","offset":0,"slot":"3","type":"t_string_storage"},{"astId":27918,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol:MintableIncentivizedERC20","label":"_symbol","offset":0,"slot":"4","type":"t_string_storage"},{"astId":27920,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol:MintableIncentivizedERC20","label":"_decimals","offset":0,"slot":"5","type":"t_uint8"},{"astId":27923,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol:MintableIncentivizedERC20","label":"_incentivesController","offset":1,"slot":"5","type":"t_contract(IAaveIncentivesController)3875"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_contract(IAaveIncentivesController)3875":{"encoding":"inplace","label":"contract IAaveIncentivesController","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(UserState)27901_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct IncentivizedERC20.UserState)","numberOfBytes":"32","value":"t_struct(UserState)27901_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(UserState)27901_storage":{"encoding":"inplace","label":"struct IncentivizedERC20.UserState","members":[{"astId":27898,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol:MintableIncentivizedERC20","label":"balance","offset":0,"slot":"0","type":"t_uint128"},{"astId":27900,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol:MintableIncentivizedERC20","label":"additionalData","offset":16,"slot":"0","type":"t_uint128"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"decreaseAllowance(address,uint256)":{"notice":"Decreases the allowance of spender to spend _msgSender() tokens"},"getIncentivesController()":{"notice":"Returns the address of the Incentives Controller contract"},"increaseAllowance(address,uint256)":{"notice":"Increases the allowance of spender to spend _msgSender() tokens"},"setIncentivesController(address)":{"notice":"Sets a new Incentives Controller"}},"notice":"Implements mint and burn functions for IncentivizedERC20","version":1}}},"@aave/core-v3/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol":{"ScaledBalanceTokenBase":{"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":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"onBehalfOf","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balanceIncrease","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"Mint","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":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"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":[],"name":"getIncentivesController","outputs":[{"internalType":"contract IAaveIncentivesController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getPreviousIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getScaledUserBalanceAndSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"scaledBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scaledTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IAaveIncentivesController","name":"controller","type":"address"}],"name":"setIncentivesController","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":{"author":"Aave","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`."},"constructor":{"details":"Constructor.","params":{"decimals":"The number of decimals of the token","name":"The name of the token","pool":"The reference to the main Pool contract","symbol":"The symbol of the token"}},"decreaseAllowance(address,uint256)":{"params":{"spender":"The user allowed to spend on behalf of _msgSender()","subtractedValue":"The amount being subtracted to the allowance"},"returns":{"_0":"`true`"}},"getIncentivesController()":{"returns":{"_0":"The address of the Incentives Controller"}},"getPreviousIndex(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The last index interest was accrued to the user's balance, expressed in ray"}},"getScaledUserBalanceAndSupply(address)":{"params":{"user":"The address of the user"},"returns":{"_0":"The scaled balance of the user","_1":"The scaled total supply"}},"increaseAllowance(address,uint256)":{"params":{"addedValue":"The amount being added to the allowance","spender":"The user allowed to spend on behalf of _msgSender()"},"returns":{"_0":"`true`"}},"scaledBalanceOf(address)":{"details":"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update","params":{"user":"The user whose balance is calculated"},"returns":{"_0":"The scaled balance of the user"}},"scaledTotalSupply()":{"returns":{"_0":"The scaled total supply"}},"setIncentivesController(address)":{"params":{"controller":"the new Incentives controller"}},"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."}},"title":"ScaledBalanceTokenBase","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"POOL()":"7535d246","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","getIncentivesController()":"75d26413","getPreviousIndex(address)":"e0753986","getScaledUserBalanceAndSupply(address)":"0afbcdc9","increaseAllowance(address,uint256)":"39509351","name()":"06fdde03","scaledBalanceOf(address)":"1da24f3e","scaledTotalSupply()":"b1bf962d","setIncentivesController(address)":"e655dbd8","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"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\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balanceIncrease\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"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\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"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\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getPreviousIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getScaledUserBalanceAndSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"scaledBalanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scaledTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAaveIncentivesController\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setIncentivesController\",\"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\":{\"author\":\"Aave\",\"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`.\"},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"decimals\":\"The number of decimals of the token\",\"name\":\"The name of the token\",\"pool\":\"The reference to the main Pool contract\",\"symbol\":\"The symbol of the token\"}},\"decreaseAllowance(address,uint256)\":{\"params\":{\"spender\":\"The user allowed to spend on behalf of _msgSender()\",\"subtractedValue\":\"The amount being subtracted to the allowance\"},\"returns\":{\"_0\":\"`true`\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"The address of the Incentives Controller\"}},\"getPreviousIndex(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The last index interest was accrued to the user's balance, expressed in ray\"}},\"getScaledUserBalanceAndSupply(address)\":{\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The scaled balance of the user\",\"_1\":\"The scaled total supply\"}},\"increaseAllowance(address,uint256)\":{\"params\":{\"addedValue\":\"The amount being added to the allowance\",\"spender\":\"The user allowed to spend on behalf of _msgSender()\"},\"returns\":{\"_0\":\"`true`\"}},\"scaledBalanceOf(address)\":{\"details\":\"The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index at the moment of the update\",\"params\":{\"user\":\"The user whose balance is calculated\"},\"returns\":{\"_0\":\"The scaled balance of the user\"}},\"scaledTotalSupply()\":{\"returns\":{\"_0\":\"The scaled total supply\"}},\"setIncentivesController(address)\":{\"params\":{\"controller\":\"the new Incentives controller\"}},\"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.\"}},\"title\":\"ScaledBalanceTokenBase\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"decreaseAllowance(address,uint256)\":{\"notice\":\"Decreases the allowance of spender to spend _msgSender() tokens\"},\"getIncentivesController()\":{\"notice\":\"Returns the address of the Incentives Controller contract\"},\"getPreviousIndex(address)\":{\"notice\":\"Returns last index interest was accrued to the user's balance\"},\"getScaledUserBalanceAndSupply(address)\":{\"notice\":\"Returns the scaled balance of the user and the scaled total supply.\"},\"increaseAllowance(address,uint256)\":{\"notice\":\"Increases the allowance of spender to spend _msgSender() tokens\"},\"scaledBalanceOf(address)\":{\"notice\":\"Returns the scaled balance of the user.\"},\"scaledTotalSupply()\":{\"notice\":\"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\"},\"setIncentivesController(address)\":{\"notice\":\"Sets a new Incentives Controller\"}},\"notice\":\"Basic ERC20 implementation of scaled balance token\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@aave/core-v3/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol\":\"ScaledBalanceTokenBase\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IncentivizedERC20} from './IncentivizedERC20.sol';\\n\\n/**\\n * @title MintableIncentivizedERC20\\n * @author Aave\\n * @notice Implements mint and burn functions for IncentivizedERC20\\n */\\nabstract contract MintableIncentivizedERC20 is IncentivizedERC20 {\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) IncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /**\\n   * @notice Mints tokens to an account and apply incentives if defined\\n   * @param account The address receiving tokens\\n   * @param amount The amount of tokens to mint\\n   */\\n  function _mint(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply + amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n\\n  /**\\n   * @notice Burns tokens from an account and apply incentives if defined\\n   * @param account The account whose tokens are burnt\\n   * @param amount The amount of tokens to burn\\n   */\\n  function _burn(address account, uint128 amount) internal virtual {\\n    uint256 oldTotalSupply = _totalSupply;\\n    _totalSupply = oldTotalSupply - amount;\\n\\n    uint128 oldAccountBalance = _userState[account].balance;\\n    _userState[account].balance = oldAccountBalance - amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      incentivesControllerLocal.handleAction(account, oldTotalSupply, oldAccountBalance);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xc24b3d20923fd55a160698a594e47247c2fb0b1e0c795e47f89ddd2da2918824\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IScaledBalanceToken} from '../../../interfaces/IScaledBalanceToken.sol';\\nimport {MintableIncentivizedERC20} from './MintableIncentivizedERC20.sol';\\n\\n/**\\n * @title ScaledBalanceTokenBase\\n * @author Aave\\n * @notice Basic ERC20 implementation of scaled balance token\\n */\\nabstract contract ScaledBalanceTokenBase is MintableIncentivizedERC20, IScaledBalanceToken {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(\\n    IPool pool,\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals\\n  ) MintableIncentivizedERC20(pool, name, symbol, decimals) {\\n    // Intentionally left blank\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledBalanceOf(address user) external view override returns (uint256) {\\n    return super.balanceOf(user);\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getScaledUserBalanceAndSupply(\\n    address user\\n  ) external view override returns (uint256, uint256) {\\n    return (super.balanceOf(user), super.totalSupply());\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function scaledTotalSupply() public view virtual override returns (uint256) {\\n    return super.totalSupply();\\n  }\\n\\n  /// @inheritdoc IScaledBalanceToken\\n  function getPreviousIndex(address user) external view virtual override returns (uint256) {\\n    return _userState[user].additionalData;\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to mint a scaled balance token.\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the scaled tokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function _mintScaled(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) internal returns (bool) {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_MINT_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(onBehalfOf);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[onBehalfOf].additionalData);\\n\\n    _userState[onBehalfOf].additionalData = index.toUint128();\\n\\n    _mint(onBehalfOf, amountScaled.toUint128());\\n\\n    uint256 amountToMint = amount + balanceIncrease;\\n    emit Transfer(address(0), onBehalfOf, amountToMint);\\n    emit Mint(caller, onBehalfOf, amountToMint, balanceIncrease, index);\\n\\n    return (scaledBalance == 0);\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to burn a scaled balance token.\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param user The user which debt is burnt\\n   * @param target The address that will receive the underlying, if any\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   */\\n  function _burnScaled(address user, address target, uint256 amount, uint256 index) internal {\\n    uint256 amountScaled = amount.rayDiv(index);\\n    require(amountScaled != 0, Errors.INVALID_BURN_AMOUNT);\\n\\n    uint256 scaledBalance = super.balanceOf(user);\\n    uint256 balanceIncrease = scaledBalance.rayMul(index) -\\n      scaledBalance.rayMul(_userState[user].additionalData);\\n\\n    _userState[user].additionalData = index.toUint128();\\n\\n    _burn(user, amountScaled.toUint128());\\n\\n    if (balanceIncrease > amount) {\\n      uint256 amountToMint = balanceIncrease - amount;\\n      emit Transfer(address(0), user, amountToMint);\\n      emit Mint(user, user, amountToMint, balanceIncrease, index);\\n    } else {\\n      uint256 amountToBurn = amount - balanceIncrease;\\n      emit Transfer(user, address(0), amountToBurn);\\n      emit Burn(user, target, amountToBurn, balanceIncrease, index);\\n    }\\n  }\\n\\n  /**\\n   * @notice Implements the basic logic to transfer scaled balance tokens between two users\\n   * @dev It emits a mint event with the interest accrued per user\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount, uint256 index) internal {\\n    uint256 senderScaledBalance = super.balanceOf(sender);\\n    uint256 senderBalanceIncrease = senderScaledBalance.rayMul(index) -\\n      senderScaledBalance.rayMul(_userState[sender].additionalData);\\n\\n    uint256 recipientScaledBalance = super.balanceOf(recipient);\\n    uint256 recipientBalanceIncrease = recipientScaledBalance.rayMul(index) -\\n      recipientScaledBalance.rayMul(_userState[recipient].additionalData);\\n\\n    _userState[sender].additionalData = index.toUint128();\\n    _userState[recipient].additionalData = index.toUint128();\\n\\n    super._transfer(sender, recipient, amount.rayDiv(index).toUint128());\\n\\n    if (senderBalanceIncrease > 0) {\\n      emit Transfer(address(0), sender, senderBalanceIncrease);\\n      emit Mint(_msgSender(), sender, senderBalanceIncrease, senderBalanceIncrease, index);\\n    }\\n\\n    if (sender != recipient && recipientBalanceIncrease > 0) {\\n      emit Transfer(address(0), recipient, recipientBalanceIncrease);\\n      emit Mint(_msgSender(), recipient, recipientBalanceIncrease, recipientBalanceIncrease, index);\\n    }\\n\\n    emit Transfer(sender, recipient, amount);\\n  }\\n}\\n\",\"keccak256\":\"0xbd3f86bbb655838646ea5f7c306bc8c572a9d272f54632f369908bb5420021dd\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":27906,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol:ScaledBalanceTokenBase","label":"_userState","offset":0,"slot":"0","type":"t_mapping(t_address,t_struct(UserState)27901_storage)"},{"astId":27912,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol:ScaledBalanceTokenBase","label":"_allowances","offset":0,"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":27914,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol:ScaledBalanceTokenBase","label":"_totalSupply","offset":0,"slot":"2","type":"t_uint256"},{"astId":27916,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol:ScaledBalanceTokenBase","label":"_name","offset":0,"slot":"3","type":"t_string_storage"},{"astId":27918,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol:ScaledBalanceTokenBase","label":"_symbol","offset":0,"slot":"4","type":"t_string_storage"},{"astId":27920,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol:ScaledBalanceTokenBase","label":"_decimals","offset":0,"slot":"5","type":"t_uint8"},{"astId":27923,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol:ScaledBalanceTokenBase","label":"_incentivesController","offset":1,"slot":"5","type":"t_contract(IAaveIncentivesController)3875"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_contract(IAaveIncentivesController)3875":{"encoding":"inplace","label":"contract IAaveIncentivesController","numberOfBytes":"20"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_struct(UserState)27901_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct IncentivizedERC20.UserState)","numberOfBytes":"32","value":"t_struct(UserState)27901_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_struct(UserState)27901_storage":{"encoding":"inplace","label":"struct IncentivizedERC20.UserState","members":[{"astId":27898,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol:ScaledBalanceTokenBase","label":"balance","offset":0,"slot":"0","type":"t_uint128"},{"astId":27900,"contract":"@aave/core-v3/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol:ScaledBalanceTokenBase","label":"additionalData","offset":16,"slot":"0","type":"t_uint128"}],"numberOfBytes":"32"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"decreaseAllowance(address,uint256)":{"notice":"Decreases the allowance of spender to spend _msgSender() tokens"},"getIncentivesController()":{"notice":"Returns the address of the Incentives Controller contract"},"getPreviousIndex(address)":{"notice":"Returns last index interest was accrued to the user's balance"},"getScaledUserBalanceAndSupply(address)":{"notice":"Returns the scaled balance of the user and the scaled total supply."},"increaseAllowance(address,uint256)":{"notice":"Increases the allowance of spender to spend _msgSender() tokens"},"scaledBalanceOf(address)":{"notice":"Returns the scaled balance of the user."},"scaledTotalSupply()":{"notice":"Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)"},"setIncentivesController(address)":{"notice":"Sets a new Incentives Controller"}},"notice":"Basic ERC20 implementation of scaled balance token","version":1}}},"contracts/adapters/paraswap/BaseParaSwapAdapter.sol":{"BaseParaSwapAdapter":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fromAsset","type":"address"},{"indexed":true,"internalType":"address","name":"toAsset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountSold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"receivedAmount","type":"uint256"}],"name":"Bought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fromAsset","type":"address"},{"indexed":true,"internalType":"address","name":"toAsset","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"receivedAmount","type":"uint256"}],"name":"Swapped","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SLIPPAGE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ORACLE","outputs":[{"internalType":"contract IPriceOracleGetter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"premium","type":"uint256"},{"internalType":"address","name":"initiator","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"executeOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Jason Raymond Bell","kind":"dev","methods":{"executeOperation(address,uint256,uint256,address,bytes)":{"details":"Ensure that the contract can return the debt + premium, e.g., has      enough funds to repay and has approved the Pool to pull the total amount","params":{"amount":"The amount of the flash-borrowed asset","asset":"The address of the flash-borrowed asset","initiator":"The address of the flashloan initiator","params":"The byte-encoded params passed when initiating the flashloan","premium":"The fee of the flash-borrowed asset"},"returns":{"_0":"True if the execution of the operation succeeds, false otherwise"}},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"rescueTokens(address)":{"details":"Emergency rescue for token stucked on this contract, as failsafe mechanism - Funds should never remain in this contract more time than during transactions - Only callable by the owner"},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"title":"BaseParaSwapAdapter","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","MAX_SLIPPAGE_PERCENT()":"32e4b286","ORACLE()":"38013f02","POOL()":"7535d246","executeOperation(address,uint256,uint256,address,bytes)":"1b11d0ff","owner()":"8da5cb5b","renounceOwnership()":"715018a6","rescueTokens(address)":"00ae3bf8","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAsset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"receivedAmount\",\"type\":\"uint256\"}],\"name\":\"Bought\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAsset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fromAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"receivedAmount\",\"type\":\"uint256\"}],\"name\":\"Swapped\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_SLIPPAGE_PERCENT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ORACLE\",\"outputs\":[{\"internalType\":\"contract IPriceOracleGetter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"premium\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"executeOperation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"rescueTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Jason Raymond Bell\",\"kind\":\"dev\",\"methods\":{\"executeOperation(address,uint256,uint256,address,bytes)\":{\"details\":\"Ensure that the contract can return the debt + premium, e.g., has      enough funds to repay and has approved the Pool to pull the total amount\",\"params\":{\"amount\":\"The amount of the flash-borrowed asset\",\"asset\":\"The address of the flash-borrowed asset\",\"initiator\":\"The address of the flashloan initiator\",\"params\":\"The byte-encoded params passed when initiating the flashloan\",\"premium\":\"The fee of the flash-borrowed asset\"},\"returns\":{\"_0\":\"True if the execution of the operation succeeds, false otherwise\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"rescueTokens(address)\":{\"details\":\"Emergency rescue for token stucked on this contract, as failsafe mechanism - Funds should never remain in this contract more time than during transactions - Only callable by the owner\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"BaseParaSwapAdapter\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeOperation(address,uint256,uint256,address,bytes)\":{\"notice\":\"Executes an operation after receiving the flash-borrowed asset\"}},\"notice\":\"Utility functions for adapters using ParaSwap\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/adapters/paraswap/BaseParaSwapAdapter.sol\":\"BaseParaSwapAdapter\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable is Context {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial owner.\\n   */\\n  constructor() {\\n    address msgSender = _msgSender();\\n    _owner = msgSender;\\n    emit OwnershipTransferred(address(0), msgSender);\\n  }\\n\\n  /**\\n   * @dev Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Leaves the contract without owner. It will not be possible to call\\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\\n   *\\n   * NOTE: Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public virtual onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = address(0);\\n  }\\n\\n  /**\\n   * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function transferOwnership(address newOwner) public virtual onlyOwner {\\n    require(newOwner != address(0), 'Ownable: new owner is the zero address');\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\",\"keccak256\":\"0x3ce185c4f579e32006f8893dbfdc1b5d878c0e2cafd1508f7ceb081698bc81f9\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/// @title Optimized overflow and underflow safe math operations\\n/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\\nlibrary SafeMath {\\n  /// @notice Returns x + y, reverts if sum overflows uint256\\n  /// @param x The augend\\n  /// @param y The addend\\n  /// @return z The sum of x and y\\n  function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x + y) >= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @param message The error msg\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y, string memory message) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x, message);\\n    }\\n  }\\n\\n  /// @notice Returns x * y, reverts if overflows\\n  /// @param x The multiplicand\\n  /// @param y The multiplier\\n  /// @return z The product of x and y\\n  function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require(x == 0 || (z = x * y) / x == y);\\n    }\\n  }\\n\\n  /// @notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\\n  /// @param x The numerator\\n  /// @param y The denominator\\n  /// @return z The product of x and y\\n  function div(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    return x / y;\\n  }\\n}\\n\",\"keccak256\":\"0xf1c5d8ba70a5fc3e20dbbc2aa2a2278d2535a57bc1e9abf1228ebc3068a045f0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IFlashLoanSimpleReceiver} from '../interfaces/IFlashLoanSimpleReceiver.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title FlashLoanSimpleReceiverBase\\n * @author Aave\\n * @notice Base contract to develop a flashloan-receiver contract.\\n */\\nabstract contract FlashLoanSimpleReceiverBase is IFlashLoanSimpleReceiver {\\n  IPoolAddressesProvider public immutable override ADDRESSES_PROVIDER;\\n  IPool public immutable override POOL;\\n\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n    POOL = IPool(provider.getPool());\\n  }\\n}\\n\",\"keccak256\":\"0x3a04fc046c4f04c71ff230eba56e56bb718be41e4317f0c938bd287d81e384b1\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanSimpleReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanSimpleReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed asset\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param asset The address of the flash-borrowed asset\\n   * @param amount The amount of the flash-borrowed asset\\n   * @param premium The fee of the flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0xba50a7834ddfdca3e3cfac09043f72699be42ff88925641ac30950a434b2b2ff\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/adapters/paraswap/BaseParaSwapAdapter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {DataTypes} from '@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol';\\nimport {FlashLoanSimpleReceiverBase} from '@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol';\\nimport {GPv2SafeERC20} from '@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {IERC20WithPermit} from '@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol';\\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\\nimport {IPriceOracleGetter} from '@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol';\\nimport {SafeMath} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol';\\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\\n\\n/**\\n * @title BaseParaSwapAdapter\\n * @notice Utility functions for adapters using ParaSwap\\n * @author Jason Raymond Bell\\n */\\nabstract contract BaseParaSwapAdapter is FlashLoanSimpleReceiverBase, Ownable {\\n  using SafeMath for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using GPv2SafeERC20 for IERC20Detailed;\\n  using GPv2SafeERC20 for IERC20WithPermit;\\n\\n  struct PermitSignature {\\n    uint256 amount;\\n    uint256 deadline;\\n    uint8 v;\\n    bytes32 r;\\n    bytes32 s;\\n  }\\n\\n  // Max slippage percent allowed\\n  uint256 public constant MAX_SLIPPAGE_PERCENT = 3000; // 30%\\n\\n  IPriceOracleGetter public immutable ORACLE;\\n\\n  event Swapped(\\n    address indexed fromAsset,\\n    address indexed toAsset,\\n    uint256 fromAmount,\\n    uint256 receivedAmount\\n  );\\n  event Bought(\\n    address indexed fromAsset,\\n    address indexed toAsset,\\n    uint256 amountSold,\\n    uint256 receivedAmount\\n  );\\n\\n  constructor(\\n    IPoolAddressesProvider addressesProvider\\n  ) FlashLoanSimpleReceiverBase(addressesProvider) {\\n    ORACLE = IPriceOracleGetter(addressesProvider.getPriceOracle());\\n  }\\n\\n  /**\\n   * @dev Get the price of the asset from the oracle denominated in eth\\n   * @param asset address\\n   * @return eth price for the asset\\n   */\\n  function _getPrice(address asset) internal view returns (uint256) {\\n    return ORACLE.getAssetPrice(asset);\\n  }\\n\\n  /**\\n   * @dev Get the decimals of an asset\\n   * @return number of decimals of the asset\\n   */\\n  function _getDecimals(IERC20Detailed asset) internal view returns (uint8) {\\n    uint8 decimals = asset.decimals();\\n    // Ensure 10**decimals won't overflow a uint256\\n    require(decimals <= 77, 'TOO_MANY_DECIMALS_ON_TOKEN');\\n    return decimals;\\n  }\\n\\n  /**\\n   * @dev Get the aToken associated to the asset\\n   * @return address of the aToken\\n   */\\n  function _getReserveData(address asset) internal view returns (DataTypes.ReserveData memory) {\\n    return POOL.getReserveData(asset);\\n  }\\n\\n  function _pullATokenAndWithdraw(\\n    address reserve,\\n    address user,\\n    uint256 amount,\\n    PermitSignature memory permitSignature\\n  ) internal {\\n    IERC20WithPermit reserveAToken = IERC20WithPermit(\\n      _getReserveData(address(reserve)).aTokenAddress\\n    );\\n    _pullATokenAndWithdraw(reserve, reserveAToken, user, amount, permitSignature);\\n  }\\n\\n  /**\\n   * @dev Pull the ATokens from the user\\n   * @param reserve address of the asset\\n   * @param reserveAToken address of the aToken of the reserve\\n   * @param user address\\n   * @param amount of tokens to be transferred to the contract\\n   * @param permitSignature struct containing the permit signature\\n   */\\n  function _pullATokenAndWithdraw(\\n    address reserve,\\n    IERC20WithPermit reserveAToken,\\n    address user,\\n    uint256 amount,\\n    PermitSignature memory permitSignature\\n  ) internal {\\n    // If deadline is set to zero, assume there is no signature for permit\\n    if (permitSignature.deadline != 0) {\\n      reserveAToken.permit(\\n        user,\\n        address(this),\\n        permitSignature.amount,\\n        permitSignature.deadline,\\n        permitSignature.v,\\n        permitSignature.r,\\n        permitSignature.s\\n      );\\n    }\\n\\n    // transfer from user to adapter\\n    reserveAToken.safeTransferFrom(user, address(this), amount);\\n\\n    // withdraw reserve\\n    require(POOL.withdraw(reserve, amount, address(this)) == amount, 'UNEXPECTED_AMOUNT_WITHDRAWN');\\n  }\\n\\n  /**\\n   * @dev Emergency rescue for token stucked on this contract, as failsafe mechanism\\n   * - Funds should never remain in this contract more time than during transactions\\n   * - Only callable by the owner\\n   */\\n  function rescueTokens(IERC20 token) external onlyOwner {\\n    token.safeTransfer(owner(), token.balanceOf(address(this)));\\n  }\\n}\\n\",\"keccak256\":\"0xcd12294fd39d7cc5879af5570f55b6bb65200dfeb44c85d16225591127c58491\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1472,"contract":"contracts/adapters/paraswap/BaseParaSwapAdapter.sol:BaseParaSwapAdapter","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{"executeOperation(address,uint256,uint256,address,bytes)":{"notice":"Executes an operation after receiving the flash-borrowed asset"}},"notice":"Utility functions for adapters using ParaSwap","version":1}}},"contracts/adapters/paraswap/BaseParaSwapBuyAdapter.sol":{"BaseParaSwapBuyAdapter":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fromAsset","type":"address"},{"indexed":true,"internalType":"address","name":"toAsset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountSold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"receivedAmount","type":"uint256"}],"name":"Bought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fromAsset","type":"address"},{"indexed":true,"internalType":"address","name":"toAsset","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"receivedAmount","type":"uint256"}],"name":"Swapped","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AUGUSTUS_REGISTRY","outputs":[{"internalType":"contract IParaSwapAugustusRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SLIPPAGE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ORACLE","outputs":[{"internalType":"contract IPriceOracleGetter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"premium","type":"uint256"},{"internalType":"address","name":"initiator","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"executeOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"executeOperation(address,uint256,uint256,address,bytes)":{"details":"Ensure that the contract can return the debt + premium, e.g., has      enough funds to repay and has approved the Pool to pull the total amount","params":{"amount":"The amount of the flash-borrowed asset","asset":"The address of the flash-borrowed asset","initiator":"The address of the flashloan initiator","params":"The byte-encoded params passed when initiating the flashloan","premium":"The fee of the flash-borrowed asset"},"returns":{"_0":"True if the execution of the operation succeeds, false otherwise"}},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"rescueTokens(address)":{"details":"Emergency rescue for token stucked on this contract, as failsafe mechanism - Funds should never remain in this contract more time than during transactions - Only callable by the owner"},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"title":"BaseParaSwapBuyAdapter","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","AUGUSTUS_REGISTRY()":"3a829867","MAX_SLIPPAGE_PERCENT()":"32e4b286","ORACLE()":"38013f02","POOL()":"7535d246","executeOperation(address,uint256,uint256,address,bytes)":"1b11d0ff","owner()":"8da5cb5b","renounceOwnership()":"715018a6","rescueTokens(address)":"00ae3bf8","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAsset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"receivedAmount\",\"type\":\"uint256\"}],\"name\":\"Bought\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAsset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fromAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"receivedAmount\",\"type\":\"uint256\"}],\"name\":\"Swapped\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AUGUSTUS_REGISTRY\",\"outputs\":[{\"internalType\":\"contract IParaSwapAugustusRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_SLIPPAGE_PERCENT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ORACLE\",\"outputs\":[{\"internalType\":\"contract IPriceOracleGetter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"premium\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"executeOperation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"rescueTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"executeOperation(address,uint256,uint256,address,bytes)\":{\"details\":\"Ensure that the contract can return the debt + premium, e.g., has      enough funds to repay and has approved the Pool to pull the total amount\",\"params\":{\"amount\":\"The amount of the flash-borrowed asset\",\"asset\":\"The address of the flash-borrowed asset\",\"initiator\":\"The address of the flashloan initiator\",\"params\":\"The byte-encoded params passed when initiating the flashloan\",\"premium\":\"The fee of the flash-borrowed asset\"},\"returns\":{\"_0\":\"True if the execution of the operation succeeds, false otherwise\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"rescueTokens(address)\":{\"details\":\"Emergency rescue for token stucked on this contract, as failsafe mechanism - Funds should never remain in this contract more time than during transactions - Only callable by the owner\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"BaseParaSwapBuyAdapter\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeOperation(address,uint256,uint256,address,bytes)\":{\"notice\":\"Executes an operation after receiving the flash-borrowed asset\"}},\"notice\":\"Implements the logic for buying tokens on ParaSwap\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/adapters/paraswap/BaseParaSwapBuyAdapter.sol\":\"BaseParaSwapBuyAdapter\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable is Context {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial owner.\\n   */\\n  constructor() {\\n    address msgSender = _msgSender();\\n    _owner = msgSender;\\n    emit OwnershipTransferred(address(0), msgSender);\\n  }\\n\\n  /**\\n   * @dev Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Leaves the contract without owner. It will not be possible to call\\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\\n   *\\n   * NOTE: Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public virtual onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = address(0);\\n  }\\n\\n  /**\\n   * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function transferOwnership(address newOwner) public virtual onlyOwner {\\n    require(newOwner != address(0), 'Ownable: new owner is the zero address');\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\",\"keccak256\":\"0x3ce185c4f579e32006f8893dbfdc1b5d878c0e2cafd1508f7ceb081698bc81f9\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport './IERC20.sol';\\nimport './Address.sol';\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n  using Address for address;\\n\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n  }\\n\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    _callOptionalReturn(\\n      token,\\n      abi.encodeWithSelector(token.transferFrom.selector, from, to, value)\\n    );\\n  }\\n\\n  /**\\n   * @dev Deprecated. This function has issues similar to the ones found in\\n   * {IERC20-approve}, and its usage is discouraged.\\n   *\\n   * Whenever possible, use {safeIncreaseAllowance} and\\n   * {safeDecreaseAllowance} instead.\\n   */\\n  function safeApprove(IERC20 token, address spender, uint256 value) internal {\\n    // safeApprove should only be called when setting an initial allowance,\\n    // or when resetting it to zero. To increase and decrease it, use\\n    // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n    require(\\n      (value == 0) || (token.allowance(address(this), spender) == 0),\\n      'SafeERC20: approve from non-zero to non-zero allowance'\\n    );\\n    _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n  }\\n\\n  function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n    uint256 newAllowance = token.allowance(address(this), spender) + value;\\n    _callOptionalReturn(\\n      token,\\n      abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\\n    );\\n  }\\n\\n  function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n    unchecked {\\n      uint256 oldAllowance = token.allowance(address(this), spender);\\n      require(oldAllowance >= value, 'SafeERC20: decreased allowance below zero');\\n      uint256 newAllowance = oldAllowance - value;\\n      _callOptionalReturn(\\n        token,\\n        abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n   * on the return value: the return value is optional (but if data is returned, it must not be false).\\n   * @param token The token targeted by the call.\\n   * @param data The call data (encoded using abi.encode or one of its variants).\\n   */\\n  function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n    // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n    // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n    // the target address contains contract code and also asserts for success in the low-level call.\\n\\n    bytes memory returndata = address(token).functionCall(data, 'SafeERC20: low-level call failed');\\n    if (returndata.length > 0) {\\n      // Return data is optional\\n      require(abi.decode(returndata, (bool)), 'SafeERC20: ERC20 operation did not succeed');\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x9ada5448c24f34f934122c0e11d1a89bf9a31b7ade0dcb935bd7dcb339ef7f32\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/// @title Optimized overflow and underflow safe math operations\\n/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\\nlibrary SafeMath {\\n  /// @notice Returns x + y, reverts if sum overflows uint256\\n  /// @param x The augend\\n  /// @param y The addend\\n  /// @return z The sum of x and y\\n  function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x + y) >= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @param message The error msg\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y, string memory message) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x, message);\\n    }\\n  }\\n\\n  /// @notice Returns x * y, reverts if overflows\\n  /// @param x The multiplicand\\n  /// @param y The multiplier\\n  /// @return z The product of x and y\\n  function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require(x == 0 || (z = x * y) / x == y);\\n    }\\n  }\\n\\n  /// @notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\\n  /// @param x The numerator\\n  /// @param y The denominator\\n  /// @return z The product of x and y\\n  function div(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    return x / y;\\n  }\\n}\\n\",\"keccak256\":\"0xf1c5d8ba70a5fc3e20dbbc2aa2a2278d2535a57bc1e9abf1228ebc3068a045f0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IFlashLoanSimpleReceiver} from '../interfaces/IFlashLoanSimpleReceiver.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title FlashLoanSimpleReceiverBase\\n * @author Aave\\n * @notice Base contract to develop a flashloan-receiver contract.\\n */\\nabstract contract FlashLoanSimpleReceiverBase is IFlashLoanSimpleReceiver {\\n  IPoolAddressesProvider public immutable override ADDRESSES_PROVIDER;\\n  IPool public immutable override POOL;\\n\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n    POOL = IPool(provider.getPool());\\n  }\\n}\\n\",\"keccak256\":\"0x3a04fc046c4f04c71ff230eba56e56bb718be41e4317f0c938bd287d81e384b1\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanSimpleReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanSimpleReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed asset\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param asset The address of the flash-borrowed asset\\n   * @param amount The amount of the flash-borrowed asset\\n   * @param premium The fee of the flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0xba50a7834ddfdca3e3cfac09043f72699be42ff88925641ac30950a434b2b2ff\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/adapters/paraswap/BaseParaSwapAdapter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {DataTypes} from '@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol';\\nimport {FlashLoanSimpleReceiverBase} from '@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol';\\nimport {GPv2SafeERC20} from '@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {IERC20WithPermit} from '@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol';\\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\\nimport {IPriceOracleGetter} from '@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol';\\nimport {SafeMath} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol';\\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\\n\\n/**\\n * @title BaseParaSwapAdapter\\n * @notice Utility functions for adapters using ParaSwap\\n * @author Jason Raymond Bell\\n */\\nabstract contract BaseParaSwapAdapter is FlashLoanSimpleReceiverBase, Ownable {\\n  using SafeMath for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using GPv2SafeERC20 for IERC20Detailed;\\n  using GPv2SafeERC20 for IERC20WithPermit;\\n\\n  struct PermitSignature {\\n    uint256 amount;\\n    uint256 deadline;\\n    uint8 v;\\n    bytes32 r;\\n    bytes32 s;\\n  }\\n\\n  // Max slippage percent allowed\\n  uint256 public constant MAX_SLIPPAGE_PERCENT = 3000; // 30%\\n\\n  IPriceOracleGetter public immutable ORACLE;\\n\\n  event Swapped(\\n    address indexed fromAsset,\\n    address indexed toAsset,\\n    uint256 fromAmount,\\n    uint256 receivedAmount\\n  );\\n  event Bought(\\n    address indexed fromAsset,\\n    address indexed toAsset,\\n    uint256 amountSold,\\n    uint256 receivedAmount\\n  );\\n\\n  constructor(\\n    IPoolAddressesProvider addressesProvider\\n  ) FlashLoanSimpleReceiverBase(addressesProvider) {\\n    ORACLE = IPriceOracleGetter(addressesProvider.getPriceOracle());\\n  }\\n\\n  /**\\n   * @dev Get the price of the asset from the oracle denominated in eth\\n   * @param asset address\\n   * @return eth price for the asset\\n   */\\n  function _getPrice(address asset) internal view returns (uint256) {\\n    return ORACLE.getAssetPrice(asset);\\n  }\\n\\n  /**\\n   * @dev Get the decimals of an asset\\n   * @return number of decimals of the asset\\n   */\\n  function _getDecimals(IERC20Detailed asset) internal view returns (uint8) {\\n    uint8 decimals = asset.decimals();\\n    // Ensure 10**decimals won't overflow a uint256\\n    require(decimals <= 77, 'TOO_MANY_DECIMALS_ON_TOKEN');\\n    return decimals;\\n  }\\n\\n  /**\\n   * @dev Get the aToken associated to the asset\\n   * @return address of the aToken\\n   */\\n  function _getReserveData(address asset) internal view returns (DataTypes.ReserveData memory) {\\n    return POOL.getReserveData(asset);\\n  }\\n\\n  function _pullATokenAndWithdraw(\\n    address reserve,\\n    address user,\\n    uint256 amount,\\n    PermitSignature memory permitSignature\\n  ) internal {\\n    IERC20WithPermit reserveAToken = IERC20WithPermit(\\n      _getReserveData(address(reserve)).aTokenAddress\\n    );\\n    _pullATokenAndWithdraw(reserve, reserveAToken, user, amount, permitSignature);\\n  }\\n\\n  /**\\n   * @dev Pull the ATokens from the user\\n   * @param reserve address of the asset\\n   * @param reserveAToken address of the aToken of the reserve\\n   * @param user address\\n   * @param amount of tokens to be transferred to the contract\\n   * @param permitSignature struct containing the permit signature\\n   */\\n  function _pullATokenAndWithdraw(\\n    address reserve,\\n    IERC20WithPermit reserveAToken,\\n    address user,\\n    uint256 amount,\\n    PermitSignature memory permitSignature\\n  ) internal {\\n    // If deadline is set to zero, assume there is no signature for permit\\n    if (permitSignature.deadline != 0) {\\n      reserveAToken.permit(\\n        user,\\n        address(this),\\n        permitSignature.amount,\\n        permitSignature.deadline,\\n        permitSignature.v,\\n        permitSignature.r,\\n        permitSignature.s\\n      );\\n    }\\n\\n    // transfer from user to adapter\\n    reserveAToken.safeTransferFrom(user, address(this), amount);\\n\\n    // withdraw reserve\\n    require(POOL.withdraw(reserve, amount, address(this)) == amount, 'UNEXPECTED_AMOUNT_WITHDRAWN');\\n  }\\n\\n  /**\\n   * @dev Emergency rescue for token stucked on this contract, as failsafe mechanism\\n   * - Funds should never remain in this contract more time than during transactions\\n   * - Only callable by the owner\\n   */\\n  function rescueTokens(IERC20 token) external onlyOwner {\\n    token.safeTransfer(owner(), token.balanceOf(address(this)));\\n  }\\n}\\n\",\"keccak256\":\"0xcd12294fd39d7cc5879af5570f55b6bb65200dfeb44c85d16225591127c58491\",\"license\":\"AGPL-3.0\"},\"contracts/adapters/paraswap/BaseParaSwapBuyAdapter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {SafeERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol';\\nimport {SafeMath} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol';\\nimport {PercentageMath} from '@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol';\\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {IParaSwapAugustus} from './interfaces/IParaSwapAugustus.sol';\\nimport {IParaSwapAugustusRegistry} from './interfaces/IParaSwapAugustusRegistry.sol';\\nimport {BaseParaSwapAdapter} from './BaseParaSwapAdapter.sol';\\n\\n/**\\n * @title BaseParaSwapBuyAdapter\\n * @notice Implements the logic for buying tokens on ParaSwap\\n */\\nabstract contract BaseParaSwapBuyAdapter is BaseParaSwapAdapter {\\n  using PercentageMath for uint256;\\n  using SafeMath for uint256;\\n  using SafeERC20 for IERC20Detailed;\\n\\n  IParaSwapAugustusRegistry public immutable AUGUSTUS_REGISTRY;\\n\\n  constructor(\\n    IPoolAddressesProvider addressesProvider,\\n    IParaSwapAugustusRegistry augustusRegistry\\n  ) BaseParaSwapAdapter(addressesProvider) {\\n    // Do something on Augustus registry to check the right contract was passed\\n    require(!augustusRegistry.isValidAugustus(address(0)), 'Not a valid Augustus address');\\n    AUGUSTUS_REGISTRY = augustusRegistry;\\n  }\\n\\n  /**\\n   * @dev Swaps a token for another using ParaSwap\\n   * @param toAmountOffset Offset of toAmount in Augustus calldata if it should be overwritten, otherwise 0\\n   * @param paraswapData Data for Paraswap Adapter\\n   * @param assetToSwapFrom Address of the asset to be swapped from\\n   * @param assetToSwapTo Address of the asset to be swapped to\\n   * @param maxAmountToSwap Max amount to be swapped\\n   * @param amountToReceive Amount to be received from the swap\\n   * @return amountSold The amount sold during the swap\\n   */\\n  function _buyOnParaSwap(\\n    uint256 toAmountOffset,\\n    bytes memory paraswapData,\\n    IERC20Detailed assetToSwapFrom,\\n    IERC20Detailed assetToSwapTo,\\n    uint256 maxAmountToSwap,\\n    uint256 amountToReceive\\n  ) internal returns (uint256 amountSold) {\\n    (bytes memory buyCalldata, IParaSwapAugustus augustus) = abi.decode(\\n      paraswapData,\\n      (bytes, IParaSwapAugustus)\\n    );\\n\\n    require(AUGUSTUS_REGISTRY.isValidAugustus(address(augustus)), 'INVALID_AUGUSTUS');\\n\\n    {\\n      uint256 fromAssetDecimals = _getDecimals(assetToSwapFrom);\\n      uint256 toAssetDecimals = _getDecimals(assetToSwapTo);\\n\\n      uint256 fromAssetPrice = _getPrice(address(assetToSwapFrom));\\n      uint256 toAssetPrice = _getPrice(address(assetToSwapTo));\\n\\n      uint256 expectedMaxAmountToSwap = amountToReceive\\n        .mul(toAssetPrice.mul(10 ** fromAssetDecimals))\\n        .div(fromAssetPrice.mul(10 ** toAssetDecimals))\\n        .percentMul(PercentageMath.PERCENTAGE_FACTOR.add(MAX_SLIPPAGE_PERCENT));\\n\\n      require(maxAmountToSwap <= expectedMaxAmountToSwap, 'maxAmountToSwap exceed max slippage');\\n    }\\n\\n    uint256 balanceBeforeAssetFrom = assetToSwapFrom.balanceOf(address(this));\\n    require(balanceBeforeAssetFrom >= maxAmountToSwap, 'INSUFFICIENT_BALANCE_BEFORE_SWAP');\\n    uint256 balanceBeforeAssetTo = assetToSwapTo.balanceOf(address(this));\\n\\n    address tokenTransferProxy = augustus.getTokenTransferProxy();\\n    assetToSwapFrom.safeApprove(tokenTransferProxy, 0);\\n    assetToSwapFrom.safeApprove(tokenTransferProxy, maxAmountToSwap);\\n\\n    if (toAmountOffset != 0) {\\n      // Ensure 256 bit (32 bytes) toAmountOffset value is within bounds of the\\n      // calldata, not overlapping with the first 4 bytes (function selector).\\n      require(\\n        toAmountOffset >= 4 && toAmountOffset <= buyCalldata.length.sub(32),\\n        'TO_AMOUNT_OFFSET_OUT_OF_RANGE'\\n      );\\n      // Overwrite the toAmount with the correct amount for the buy.\\n      // In memory, buyCalldata consists of a 256 bit length field, followed by\\n      // the actual bytes data, that is why 32 is added to the byte offset.\\n      assembly {\\n        mstore(add(buyCalldata, add(toAmountOffset, 32)), amountToReceive)\\n      }\\n    }\\n    (bool success, ) = address(augustus).call(buyCalldata);\\n    if (!success) {\\n      // Copy revert reason from call\\n      assembly {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    uint256 balanceAfterAssetFrom = assetToSwapFrom.balanceOf(address(this));\\n    amountSold = balanceBeforeAssetFrom - balanceAfterAssetFrom;\\n    require(amountSold <= maxAmountToSwap, 'WRONG_BALANCE_AFTER_SWAP');\\n    uint256 amountReceived = assetToSwapTo.balanceOf(address(this)).sub(balanceBeforeAssetTo);\\n    require(amountReceived >= amountToReceive, 'INSUFFICIENT_AMOUNT_RECEIVED');\\n\\n    emit Bought(address(assetToSwapFrom), address(assetToSwapTo), amountSold, amountReceived);\\n  }\\n}\\n\",\"keccak256\":\"0xe008aba472373c4ed645d6da5506b410d8b93d083da042288562656f1f69d8ca\",\"license\":\"AGPL-3.0\"},\"contracts/adapters/paraswap/interfaces/IParaSwapAugustus.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IParaSwapAugustus {\\n  function getTokenTransferProxy() external view returns (address);\\n}\\n\",\"keccak256\":\"0x8feda4c8f1710f2365681625e9feada9cc9d129ac045645b2c893e06c817815b\",\"license\":\"AGPL-3.0\"},\"contracts/adapters/paraswap/interfaces/IParaSwapAugustusRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IParaSwapAugustusRegistry {\\n  function isValidAugustus(address augustus) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xd5e1e2b15318733975a6dd1aa3ff16842a88f2638458538e1a55ee37a4f3dddc\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1472,"contract":"contracts/adapters/paraswap/BaseParaSwapBuyAdapter.sol:BaseParaSwapBuyAdapter","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{"executeOperation(address,uint256,uint256,address,bytes)":{"notice":"Executes an operation after receiving the flash-borrowed asset"}},"notice":"Implements the logic for buying tokens on ParaSwap","version":1}}},"contracts/adapters/paraswap/BaseParaSwapSellAdapter.sol":{"BaseParaSwapSellAdapter":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fromAsset","type":"address"},{"indexed":true,"internalType":"address","name":"toAsset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountSold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"receivedAmount","type":"uint256"}],"name":"Bought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fromAsset","type":"address"},{"indexed":true,"internalType":"address","name":"toAsset","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"receivedAmount","type":"uint256"}],"name":"Swapped","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AUGUSTUS_REGISTRY","outputs":[{"internalType":"contract IParaSwapAugustusRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SLIPPAGE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ORACLE","outputs":[{"internalType":"contract IPriceOracleGetter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"premium","type":"uint256"},{"internalType":"address","name":"initiator","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"executeOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Jason Raymond Bell","kind":"dev","methods":{"executeOperation(address,uint256,uint256,address,bytes)":{"details":"Ensure that the contract can return the debt + premium, e.g., has      enough funds to repay and has approved the Pool to pull the total amount","params":{"amount":"The amount of the flash-borrowed asset","asset":"The address of the flash-borrowed asset","initiator":"The address of the flashloan initiator","params":"The byte-encoded params passed when initiating the flashloan","premium":"The fee of the flash-borrowed asset"},"returns":{"_0":"True if the execution of the operation succeeds, false otherwise"}},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"rescueTokens(address)":{"details":"Emergency rescue for token stucked on this contract, as failsafe mechanism - Funds should never remain in this contract more time than during transactions - Only callable by the owner"},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"title":"BaseParaSwapSellAdapter","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","AUGUSTUS_REGISTRY()":"3a829867","MAX_SLIPPAGE_PERCENT()":"32e4b286","ORACLE()":"38013f02","POOL()":"7535d246","executeOperation(address,uint256,uint256,address,bytes)":"1b11d0ff","owner()":"8da5cb5b","renounceOwnership()":"715018a6","rescueTokens(address)":"00ae3bf8","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAsset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"receivedAmount\",\"type\":\"uint256\"}],\"name\":\"Bought\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAsset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fromAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"receivedAmount\",\"type\":\"uint256\"}],\"name\":\"Swapped\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AUGUSTUS_REGISTRY\",\"outputs\":[{\"internalType\":\"contract IParaSwapAugustusRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_SLIPPAGE_PERCENT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ORACLE\",\"outputs\":[{\"internalType\":\"contract IPriceOracleGetter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"premium\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"executeOperation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"rescueTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Jason Raymond Bell\",\"kind\":\"dev\",\"methods\":{\"executeOperation(address,uint256,uint256,address,bytes)\":{\"details\":\"Ensure that the contract can return the debt + premium, e.g., has      enough funds to repay and has approved the Pool to pull the total amount\",\"params\":{\"amount\":\"The amount of the flash-borrowed asset\",\"asset\":\"The address of the flash-borrowed asset\",\"initiator\":\"The address of the flashloan initiator\",\"params\":\"The byte-encoded params passed when initiating the flashloan\",\"premium\":\"The fee of the flash-borrowed asset\"},\"returns\":{\"_0\":\"True if the execution of the operation succeeds, false otherwise\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"rescueTokens(address)\":{\"details\":\"Emergency rescue for token stucked on this contract, as failsafe mechanism - Funds should never remain in this contract more time than during transactions - Only callable by the owner\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"BaseParaSwapSellAdapter\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"executeOperation(address,uint256,uint256,address,bytes)\":{\"notice\":\"Executes an operation after receiving the flash-borrowed asset\"}},\"notice\":\"Implements the logic for selling tokens on ParaSwap\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/adapters/paraswap/BaseParaSwapSellAdapter.sol\":\"BaseParaSwapSellAdapter\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable is Context {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial owner.\\n   */\\n  constructor() {\\n    address msgSender = _msgSender();\\n    _owner = msgSender;\\n    emit OwnershipTransferred(address(0), msgSender);\\n  }\\n\\n  /**\\n   * @dev Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Leaves the contract without owner. It will not be possible to call\\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\\n   *\\n   * NOTE: Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public virtual onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = address(0);\\n  }\\n\\n  /**\\n   * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function transferOwnership(address newOwner) public virtual onlyOwner {\\n    require(newOwner != address(0), 'Ownable: new owner is the zero address');\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\",\"keccak256\":\"0x3ce185c4f579e32006f8893dbfdc1b5d878c0e2cafd1508f7ceb081698bc81f9\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport './IERC20.sol';\\nimport './Address.sol';\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n  using Address for address;\\n\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n  }\\n\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    _callOptionalReturn(\\n      token,\\n      abi.encodeWithSelector(token.transferFrom.selector, from, to, value)\\n    );\\n  }\\n\\n  /**\\n   * @dev Deprecated. This function has issues similar to the ones found in\\n   * {IERC20-approve}, and its usage is discouraged.\\n   *\\n   * Whenever possible, use {safeIncreaseAllowance} and\\n   * {safeDecreaseAllowance} instead.\\n   */\\n  function safeApprove(IERC20 token, address spender, uint256 value) internal {\\n    // safeApprove should only be called when setting an initial allowance,\\n    // or when resetting it to zero. To increase and decrease it, use\\n    // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n    require(\\n      (value == 0) || (token.allowance(address(this), spender) == 0),\\n      'SafeERC20: approve from non-zero to non-zero allowance'\\n    );\\n    _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n  }\\n\\n  function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n    uint256 newAllowance = token.allowance(address(this), spender) + value;\\n    _callOptionalReturn(\\n      token,\\n      abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\\n    );\\n  }\\n\\n  function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n    unchecked {\\n      uint256 oldAllowance = token.allowance(address(this), spender);\\n      require(oldAllowance >= value, 'SafeERC20: decreased allowance below zero');\\n      uint256 newAllowance = oldAllowance - value;\\n      _callOptionalReturn(\\n        token,\\n        abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n   * on the return value: the return value is optional (but if data is returned, it must not be false).\\n   * @param token The token targeted by the call.\\n   * @param data The call data (encoded using abi.encode or one of its variants).\\n   */\\n  function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n    // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n    // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n    // the target address contains contract code and also asserts for success in the low-level call.\\n\\n    bytes memory returndata = address(token).functionCall(data, 'SafeERC20: low-level call failed');\\n    if (returndata.length > 0) {\\n      // Return data is optional\\n      require(abi.decode(returndata, (bool)), 'SafeERC20: ERC20 operation did not succeed');\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x9ada5448c24f34f934122c0e11d1a89bf9a31b7ade0dcb935bd7dcb339ef7f32\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/// @title Optimized overflow and underflow safe math operations\\n/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\\nlibrary SafeMath {\\n  /// @notice Returns x + y, reverts if sum overflows uint256\\n  /// @param x The augend\\n  /// @param y The addend\\n  /// @return z The sum of x and y\\n  function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x + y) >= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @param message The error msg\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y, string memory message) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x, message);\\n    }\\n  }\\n\\n  /// @notice Returns x * y, reverts if overflows\\n  /// @param x The multiplicand\\n  /// @param y The multiplier\\n  /// @return z The product of x and y\\n  function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require(x == 0 || (z = x * y) / x == y);\\n    }\\n  }\\n\\n  /// @notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\\n  /// @param x The numerator\\n  /// @param y The denominator\\n  /// @return z The product of x and y\\n  function div(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    return x / y;\\n  }\\n}\\n\",\"keccak256\":\"0xf1c5d8ba70a5fc3e20dbbc2aa2a2278d2535a57bc1e9abf1228ebc3068a045f0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IFlashLoanSimpleReceiver} from '../interfaces/IFlashLoanSimpleReceiver.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title FlashLoanSimpleReceiverBase\\n * @author Aave\\n * @notice Base contract to develop a flashloan-receiver contract.\\n */\\nabstract contract FlashLoanSimpleReceiverBase is IFlashLoanSimpleReceiver {\\n  IPoolAddressesProvider public immutable override ADDRESSES_PROVIDER;\\n  IPool public immutable override POOL;\\n\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n    POOL = IPool(provider.getPool());\\n  }\\n}\\n\",\"keccak256\":\"0x3a04fc046c4f04c71ff230eba56e56bb718be41e4317f0c938bd287d81e384b1\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanSimpleReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanSimpleReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed asset\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param asset The address of the flash-borrowed asset\\n   * @param amount The amount of the flash-borrowed asset\\n   * @param premium The fee of the flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0xba50a7834ddfdca3e3cfac09043f72699be42ff88925641ac30950a434b2b2ff\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/adapters/paraswap/BaseParaSwapAdapter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {DataTypes} from '@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol';\\nimport {FlashLoanSimpleReceiverBase} from '@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol';\\nimport {GPv2SafeERC20} from '@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {IERC20WithPermit} from '@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol';\\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\\nimport {IPriceOracleGetter} from '@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol';\\nimport {SafeMath} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol';\\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\\n\\n/**\\n * @title BaseParaSwapAdapter\\n * @notice Utility functions for adapters using ParaSwap\\n * @author Jason Raymond Bell\\n */\\nabstract contract BaseParaSwapAdapter is FlashLoanSimpleReceiverBase, Ownable {\\n  using SafeMath for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using GPv2SafeERC20 for IERC20Detailed;\\n  using GPv2SafeERC20 for IERC20WithPermit;\\n\\n  struct PermitSignature {\\n    uint256 amount;\\n    uint256 deadline;\\n    uint8 v;\\n    bytes32 r;\\n    bytes32 s;\\n  }\\n\\n  // Max slippage percent allowed\\n  uint256 public constant MAX_SLIPPAGE_PERCENT = 3000; // 30%\\n\\n  IPriceOracleGetter public immutable ORACLE;\\n\\n  event Swapped(\\n    address indexed fromAsset,\\n    address indexed toAsset,\\n    uint256 fromAmount,\\n    uint256 receivedAmount\\n  );\\n  event Bought(\\n    address indexed fromAsset,\\n    address indexed toAsset,\\n    uint256 amountSold,\\n    uint256 receivedAmount\\n  );\\n\\n  constructor(\\n    IPoolAddressesProvider addressesProvider\\n  ) FlashLoanSimpleReceiverBase(addressesProvider) {\\n    ORACLE = IPriceOracleGetter(addressesProvider.getPriceOracle());\\n  }\\n\\n  /**\\n   * @dev Get the price of the asset from the oracle denominated in eth\\n   * @param asset address\\n   * @return eth price for the asset\\n   */\\n  function _getPrice(address asset) internal view returns (uint256) {\\n    return ORACLE.getAssetPrice(asset);\\n  }\\n\\n  /**\\n   * @dev Get the decimals of an asset\\n   * @return number of decimals of the asset\\n   */\\n  function _getDecimals(IERC20Detailed asset) internal view returns (uint8) {\\n    uint8 decimals = asset.decimals();\\n    // Ensure 10**decimals won't overflow a uint256\\n    require(decimals <= 77, 'TOO_MANY_DECIMALS_ON_TOKEN');\\n    return decimals;\\n  }\\n\\n  /**\\n   * @dev Get the aToken associated to the asset\\n   * @return address of the aToken\\n   */\\n  function _getReserveData(address asset) internal view returns (DataTypes.ReserveData memory) {\\n    return POOL.getReserveData(asset);\\n  }\\n\\n  function _pullATokenAndWithdraw(\\n    address reserve,\\n    address user,\\n    uint256 amount,\\n    PermitSignature memory permitSignature\\n  ) internal {\\n    IERC20WithPermit reserveAToken = IERC20WithPermit(\\n      _getReserveData(address(reserve)).aTokenAddress\\n    );\\n    _pullATokenAndWithdraw(reserve, reserveAToken, user, amount, permitSignature);\\n  }\\n\\n  /**\\n   * @dev Pull the ATokens from the user\\n   * @param reserve address of the asset\\n   * @param reserveAToken address of the aToken of the reserve\\n   * @param user address\\n   * @param amount of tokens to be transferred to the contract\\n   * @param permitSignature struct containing the permit signature\\n   */\\n  function _pullATokenAndWithdraw(\\n    address reserve,\\n    IERC20WithPermit reserveAToken,\\n    address user,\\n    uint256 amount,\\n    PermitSignature memory permitSignature\\n  ) internal {\\n    // If deadline is set to zero, assume there is no signature for permit\\n    if (permitSignature.deadline != 0) {\\n      reserveAToken.permit(\\n        user,\\n        address(this),\\n        permitSignature.amount,\\n        permitSignature.deadline,\\n        permitSignature.v,\\n        permitSignature.r,\\n        permitSignature.s\\n      );\\n    }\\n\\n    // transfer from user to adapter\\n    reserveAToken.safeTransferFrom(user, address(this), amount);\\n\\n    // withdraw reserve\\n    require(POOL.withdraw(reserve, amount, address(this)) == amount, 'UNEXPECTED_AMOUNT_WITHDRAWN');\\n  }\\n\\n  /**\\n   * @dev Emergency rescue for token stucked on this contract, as failsafe mechanism\\n   * - Funds should never remain in this contract more time than during transactions\\n   * - Only callable by the owner\\n   */\\n  function rescueTokens(IERC20 token) external onlyOwner {\\n    token.safeTransfer(owner(), token.balanceOf(address(this)));\\n  }\\n}\\n\",\"keccak256\":\"0xcd12294fd39d7cc5879af5570f55b6bb65200dfeb44c85d16225591127c58491\",\"license\":\"AGPL-3.0\"},\"contracts/adapters/paraswap/BaseParaSwapSellAdapter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {SafeERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol';\\nimport {SafeMath} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol';\\nimport {PercentageMath} from '@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol';\\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {IParaSwapAugustus} from './interfaces/IParaSwapAugustus.sol';\\nimport {IParaSwapAugustusRegistry} from './interfaces/IParaSwapAugustusRegistry.sol';\\nimport {BaseParaSwapAdapter} from './BaseParaSwapAdapter.sol';\\n\\n/**\\n * @title BaseParaSwapSellAdapter\\n * @notice Implements the logic for selling tokens on ParaSwap\\n * @author Jason Raymond Bell\\n */\\nabstract contract BaseParaSwapSellAdapter is BaseParaSwapAdapter {\\n  using PercentageMath for uint256;\\n  using SafeMath for uint256;\\n  using SafeERC20 for IERC20Detailed;\\n\\n  IParaSwapAugustusRegistry public immutable AUGUSTUS_REGISTRY;\\n\\n  constructor(\\n    IPoolAddressesProvider addressesProvider,\\n    IParaSwapAugustusRegistry augustusRegistry\\n  ) BaseParaSwapAdapter(addressesProvider) {\\n    // Do something on Augustus registry to check the right contract was passed\\n    require(!augustusRegistry.isValidAugustus(address(0)));\\n    AUGUSTUS_REGISTRY = augustusRegistry;\\n  }\\n\\n  /**\\n   * @dev Swaps a token for another using ParaSwap\\n   * @param fromAmountOffset Offset of fromAmount in Augustus calldata if it should be overwritten, otherwise 0\\n   * @param swapCalldata Calldata for ParaSwap's AugustusSwapper contract\\n   * @param augustus Address of ParaSwap's AugustusSwapper contract\\n   * @param assetToSwapFrom Address of the asset to be swapped from\\n   * @param assetToSwapTo Address of the asset to be swapped to\\n   * @param amountToSwap Amount to be swapped\\n   * @param minAmountToReceive Minimum amount to be received from the swap\\n   * @return amountReceived The amount received from the swap\\n   */\\n  function _sellOnParaSwap(\\n    uint256 fromAmountOffset,\\n    bytes memory swapCalldata,\\n    IParaSwapAugustus augustus,\\n    IERC20Detailed assetToSwapFrom,\\n    IERC20Detailed assetToSwapTo,\\n    uint256 amountToSwap,\\n    uint256 minAmountToReceive\\n  ) internal returns (uint256 amountReceived) {\\n    require(AUGUSTUS_REGISTRY.isValidAugustus(address(augustus)), 'INVALID_AUGUSTUS');\\n\\n    {\\n      uint256 fromAssetDecimals = _getDecimals(assetToSwapFrom);\\n      uint256 toAssetDecimals = _getDecimals(assetToSwapTo);\\n\\n      uint256 fromAssetPrice = _getPrice(address(assetToSwapFrom));\\n      uint256 toAssetPrice = _getPrice(address(assetToSwapTo));\\n\\n      uint256 expectedMinAmountOut = amountToSwap\\n        .mul(fromAssetPrice.mul(10 ** toAssetDecimals))\\n        .div(toAssetPrice.mul(10 ** fromAssetDecimals))\\n        .percentMul(PercentageMath.PERCENTAGE_FACTOR - MAX_SLIPPAGE_PERCENT);\\n\\n      require(expectedMinAmountOut <= minAmountToReceive, 'MIN_AMOUNT_EXCEEDS_MAX_SLIPPAGE');\\n    }\\n\\n    uint256 balanceBeforeAssetFrom = assetToSwapFrom.balanceOf(address(this));\\n    require(balanceBeforeAssetFrom >= amountToSwap, 'INSUFFICIENT_BALANCE_BEFORE_SWAP');\\n    uint256 balanceBeforeAssetTo = assetToSwapTo.balanceOf(address(this));\\n\\n    address tokenTransferProxy = augustus.getTokenTransferProxy();\\n    assetToSwapFrom.safeApprove(tokenTransferProxy, 0);\\n    assetToSwapFrom.safeApprove(tokenTransferProxy, amountToSwap);\\n\\n    if (fromAmountOffset != 0) {\\n      // Ensure 256 bit (32 bytes) fromAmount value is within bounds of the\\n      // calldata, not overlapping with the first 4 bytes (function selector).\\n      require(\\n        fromAmountOffset >= 4 && fromAmountOffset <= swapCalldata.length.sub(32),\\n        'FROM_AMOUNT_OFFSET_OUT_OF_RANGE'\\n      );\\n      // Overwrite the fromAmount with the correct amount for the swap.\\n      // In memory, swapCalldata consists of a 256 bit length field, followed by\\n      // the actual bytes data, that is why 32 is added to the byte offset.\\n      assembly {\\n        mstore(add(swapCalldata, add(fromAmountOffset, 32)), amountToSwap)\\n      }\\n    }\\n    (bool success, ) = address(augustus).call(swapCalldata);\\n    if (!success) {\\n      // Copy revert reason from call\\n      assembly {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n    require(\\n      assetToSwapFrom.balanceOf(address(this)) == balanceBeforeAssetFrom - amountToSwap,\\n      'WRONG_BALANCE_AFTER_SWAP'\\n    );\\n    amountReceived = assetToSwapTo.balanceOf(address(this)).sub(balanceBeforeAssetTo);\\n    require(amountReceived >= minAmountToReceive, 'INSUFFICIENT_AMOUNT_RECEIVED');\\n\\n    emit Swapped(address(assetToSwapFrom), address(assetToSwapTo), amountToSwap, amountReceived);\\n  }\\n}\\n\",\"keccak256\":\"0x8397250619e16fbe40ecb9ecd319eecccbc76bf0893ba053b9c96291c173005b\",\"license\":\"AGPL-3.0\"},\"contracts/adapters/paraswap/interfaces/IParaSwapAugustus.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IParaSwapAugustus {\\n  function getTokenTransferProxy() external view returns (address);\\n}\\n\",\"keccak256\":\"0x8feda4c8f1710f2365681625e9feada9cc9d129ac045645b2c893e06c817815b\",\"license\":\"AGPL-3.0\"},\"contracts/adapters/paraswap/interfaces/IParaSwapAugustusRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IParaSwapAugustusRegistry {\\n  function isValidAugustus(address augustus) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xd5e1e2b15318733975a6dd1aa3ff16842a88f2638458538e1a55ee37a4f3dddc\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1472,"contract":"contracts/adapters/paraswap/BaseParaSwapSellAdapter.sol:BaseParaSwapSellAdapter","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{"executeOperation(address,uint256,uint256,address,bytes)":{"notice":"Executes an operation after receiving the flash-borrowed asset"}},"notice":"Implements the logic for selling tokens on ParaSwap","version":1}}},"contracts/adapters/paraswap/ParaSwapLiquiditySwapAdapter.sol":{"ParaSwapLiquiditySwapAdapter":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"addressesProvider","type":"address"},{"internalType":"contract IParaSwapAugustusRegistry","name":"augustusRegistry","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fromAsset","type":"address"},{"indexed":true,"internalType":"address","name":"toAsset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountSold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"receivedAmount","type":"uint256"}],"name":"Bought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fromAsset","type":"address"},{"indexed":true,"internalType":"address","name":"toAsset","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"receivedAmount","type":"uint256"}],"name":"Swapped","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AUGUSTUS_REGISTRY","outputs":[{"internalType":"contract IParaSwapAugustusRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SLIPPAGE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ORACLE","outputs":[{"internalType":"contract IPriceOracleGetter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"premium","type":"uint256"},{"internalType":"address","name":"initiator","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"executeOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20Detailed","name":"assetToSwapFrom","type":"address"},{"internalType":"contract IERC20Detailed","name":"assetToSwapTo","type":"address"},{"internalType":"uint256","name":"amountToSwap","type":"uint256"},{"internalType":"uint256","name":"minAmountToReceive","type":"uint256"},{"internalType":"uint256","name":"swapAllBalanceOffset","type":"uint256"},{"internalType":"bytes","name":"swapCalldata","type":"bytes"},{"internalType":"contract IParaSwapAugustus","name":"augustus","type":"address"},{"components":[{"internalType":"uint256","name":"amount","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"}],"internalType":"struct BaseParaSwapAdapter.PermitSignature","name":"permitParams","type":"tuple"}],"name":"swapAndDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Jason Raymond Bell","kind":"dev","methods":{"executeOperation(address,uint256,uint256,address,bytes)":{"details":"Swaps the received reserve amount from the flash loan into the asset specified in the params. The received funds from the swap are then deposited into the protocol on behalf of the user. The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset and repay the flash loan.","params":{"amount":"The amount of the flash-borrowed asset","asset":"The address of the flash-borrowed asset","initiator":"The address of the flashloan initiator","params":"The byte-encoded params passed when initiating the flashloan","premium":"The fee of the flash-borrowed asset"},"returns":{"_0":"True if the execution of the operation succeeds, false otherwise   address assetToSwapTo Address of the underlying asset to be swapped to and deposited   uint256 minAmountToReceive Min amount to be received from the swap   uint256 swapAllBalanceOffset Set to offset of fromAmount in Augustus calldata if wanting to swap all balance, otherwise 0   bytes swapCalldata Calldata for ParaSwap's AugustusSwapper contract   address augustus Address of ParaSwap's AugustusSwapper contract   PermitSignature permitParams Struct containing the permit signatures, set to all zeroes if not used"}},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"rescueTokens(address)":{"details":"Emergency rescue for token stucked on this contract, as failsafe mechanism - Funds should never remain in this contract more time than during transactions - Only callable by the owner"},"swapAndDeposit(address,address,uint256,uint256,uint256,bytes,address,(uint256,uint256,uint8,bytes32,bytes32))":{"details":"Swaps an amount of an asset to another and deposits the new asset amount on behalf of the user without using a flash loan. This method can be used when the temporary transfer of the collateral asset to this contract does not affect the user position. The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset and perform the swap.","params":{"amountToSwap":"Amount to be swapped, or maximum amount when swapping all balance","assetToSwapFrom":"Address of the underlying asset to be swapped from","assetToSwapTo":"Address of the underlying asset to be swapped to and deposited","augustus":"Address of ParaSwap's AugustusSwapper contract","minAmountToReceive":"Minimum amount to be received from the swap","permitParams":"Struct containing the permit signatures, set to all zeroes if not used","swapAllBalanceOffset":"Set to offset of fromAmount in Augustus calldata if wanting to swap all balance, otherwise 0","swapCalldata":"Calldata for ParaSwap's AugustusSwapper contract"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"title":"ParaSwapLiquiditySwapAdapter","version":1},"evm":{"bytecode":{"functionDebugData":{"@_1500":{"entryPoint":null,"id":1500,"parameterSlots":0,"returnSlots":0},"@_29063":{"entryPoint":null,"id":29063,"parameterSlots":1,"returnSlots":0},"@_29621":{"entryPoint":null,"id":29621,"parameterSlots":2,"returnSlots":0},"@_29904":{"entryPoint":null,"id":29904,"parameterSlots":3,"returnSlots":0},"@_30980":{"entryPoint":null,"id":30980,"parameterSlots":0,"returnSlots":0},"@_3465":{"entryPoint":null,"id":3465,"parameterSlots":1,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@transferOwnership_1572":{"entryPoint":510,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":892,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":931,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069t_contract$_IParaSwapAugustusRegistry_$30961t_address_fromMemory":{"entryPoint":808,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"validator_revert_contract_IPoolAddressesProvider":{"entryPoint":783,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2371:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"83:86:201","statements":[{"body":{"nodeType":"YulBlock","src":"147:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"156:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"149:6:201"},"nodeType":"YulFunctionCall","src":"149:12:201"},"nodeType":"YulExpressionStatement","src":"149:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"106:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"117:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"132:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"137:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"128:3:201"},"nodeType":"YulFunctionCall","src":"128:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"141:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"124:3:201"},"nodeType":"YulFunctionCall","src":"124:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"113:3:201"},"nodeType":"YulFunctionCall","src":"113:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"103:2:201"},"nodeType":"YulFunctionCall","src":"103:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"96:6:201"},"nodeType":"YulFunctionCall","src":"96:50:201"},"nodeType":"YulIf","src":"93:70:201"}]},"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"72:5:201","type":""}],"src":"14:155:201"},{"body":{"nodeType":"YulBlock","src":"355:476:201","statements":[{"body":{"nodeType":"YulBlock","src":"401:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"410:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"413:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"403:6:201"},"nodeType":"YulFunctionCall","src":"403:12:201"},"nodeType":"YulExpressionStatement","src":"403:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"376:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"385:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"372:3:201"},"nodeType":"YulFunctionCall","src":"372:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"397:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"368:3:201"},"nodeType":"YulFunctionCall","src":"368:32:201"},"nodeType":"YulIf","src":"365:52:201"},{"nodeType":"YulVariableDeclaration","src":"426:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"445:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"439:5:201"},"nodeType":"YulFunctionCall","src":"439:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"430:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"513:5:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"464:48:201"},"nodeType":"YulFunctionCall","src":"464:55:201"},"nodeType":"YulExpressionStatement","src":"464:55:201"},{"nodeType":"YulAssignment","src":"528:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"538:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"528:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"552:40:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"577:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"588:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"573:3:201"},"nodeType":"YulFunctionCall","src":"573:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"567:5:201"},"nodeType":"YulFunctionCall","src":"567:25:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"556:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"650:7:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"601:48:201"},"nodeType":"YulFunctionCall","src":"601:57:201"},"nodeType":"YulExpressionStatement","src":"601:57:201"},{"nodeType":"YulAssignment","src":"667:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"677:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"667:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"693:40:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"718:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"729:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"714:3:201"},"nodeType":"YulFunctionCall","src":"714:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"708:5:201"},"nodeType":"YulFunctionCall","src":"708:25:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"697:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"791:7:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"742:48:201"},"nodeType":"YulFunctionCall","src":"742:57:201"},"nodeType":"YulExpressionStatement","src":"742:57:201"},{"nodeType":"YulAssignment","src":"808:17:201","value":{"name":"value_2","nodeType":"YulIdentifier","src":"818:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"808:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069t_contract$_IParaSwapAugustusRegistry_$30961t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"305:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"316:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"328:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"336:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"344:6:201","type":""}],"src":"174:657:201"},{"body":{"nodeType":"YulBlock","src":"917:194:201","statements":[{"body":{"nodeType":"YulBlock","src":"963:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"972:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"975:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"965:6:201"},"nodeType":"YulFunctionCall","src":"965:12:201"},"nodeType":"YulExpressionStatement","src":"965:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"938:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"947:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"934:3:201"},"nodeType":"YulFunctionCall","src":"934:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"959:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"930:3:201"},"nodeType":"YulFunctionCall","src":"930:32:201"},"nodeType":"YulIf","src":"927:52:201"},{"nodeType":"YulVariableDeclaration","src":"988:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1007:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1001:5:201"},"nodeType":"YulFunctionCall","src":"1001:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"992:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1075:5:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"1026:48:201"},"nodeType":"YulFunctionCall","src":"1026:55:201"},"nodeType":"YulExpressionStatement","src":"1026:55:201"},{"nodeType":"YulAssignment","src":"1090:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1100:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1090:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"883:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"894:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"906:6:201","type":""}],"src":"836:275:201"},{"body":{"nodeType":"YulBlock","src":"1217:102:201","statements":[{"nodeType":"YulAssignment","src":"1227:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1239:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1250:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1235:3:201"},"nodeType":"YulFunctionCall","src":"1235:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1227:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1269:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1284:6:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1300:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1305:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1296:3:201"},"nodeType":"YulFunctionCall","src":"1296:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"1309:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1292:3:201"},"nodeType":"YulFunctionCall","src":"1292:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1280:3:201"},"nodeType":"YulFunctionCall","src":"1280:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1262:6:201"},"nodeType":"YulFunctionCall","src":"1262:51:201"},"nodeType":"YulExpressionStatement","src":"1262:51:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1186:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1197:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1208:4:201","type":""}],"src":"1116:203:201"},{"body":{"nodeType":"YulBlock","src":"1402:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"1448:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1457:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1460:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1450:6:201"},"nodeType":"YulFunctionCall","src":"1450:12:201"},"nodeType":"YulExpressionStatement","src":"1450:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1423:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1432:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1419:3:201"},"nodeType":"YulFunctionCall","src":"1419:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1444:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1415:3:201"},"nodeType":"YulFunctionCall","src":"1415:32:201"},"nodeType":"YulIf","src":"1412:52:201"},{"nodeType":"YulVariableDeclaration","src":"1473:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1492:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1486:5:201"},"nodeType":"YulFunctionCall","src":"1486:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1477:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1555:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1564:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1567:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1557:6:201"},"nodeType":"YulFunctionCall","src":"1557:12:201"},"nodeType":"YulExpressionStatement","src":"1557:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1524:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1545:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1538:6:201"},"nodeType":"YulFunctionCall","src":"1538:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1531:6:201"},"nodeType":"YulFunctionCall","src":"1531:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1521:2:201"},"nodeType":"YulFunctionCall","src":"1521:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1514:6:201"},"nodeType":"YulFunctionCall","src":"1514:40:201"},"nodeType":"YulIf","src":"1511:60:201"},{"nodeType":"YulAssignment","src":"1580:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1590:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1580:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1368:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1379:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1391:6:201","type":""}],"src":"1324:277:201"},{"body":{"nodeType":"YulBlock","src":"1780:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1797:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1808:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1790:6:201"},"nodeType":"YulFunctionCall","src":"1790:21:201"},"nodeType":"YulExpressionStatement","src":"1790:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1831:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1842:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1827:3:201"},"nodeType":"YulFunctionCall","src":"1827:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"1847:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1820:6:201"},"nodeType":"YulFunctionCall","src":"1820:30:201"},"nodeType":"YulExpressionStatement","src":"1820:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1870:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1881:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1866:3:201"},"nodeType":"YulFunctionCall","src":"1866:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"1886:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1859:6:201"},"nodeType":"YulFunctionCall","src":"1859:62:201"},"nodeType":"YulExpressionStatement","src":"1859:62:201"},{"nodeType":"YulAssignment","src":"1930:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1942:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1953:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1938:3:201"},"nodeType":"YulFunctionCall","src":"1938:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1930:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1757:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1771:4:201","type":""}],"src":"1606:356:201"},{"body":{"nodeType":"YulBlock","src":"2141:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2158:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2169:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2151:6:201"},"nodeType":"YulFunctionCall","src":"2151:21:201"},"nodeType":"YulExpressionStatement","src":"2151:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2192:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2203:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2188:3:201"},"nodeType":"YulFunctionCall","src":"2188:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2208:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2181:6:201"},"nodeType":"YulFunctionCall","src":"2181:30:201"},"nodeType":"YulExpressionStatement","src":"2181:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2231:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2242:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2227:3:201"},"nodeType":"YulFunctionCall","src":"2227:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"2247:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2220:6:201"},"nodeType":"YulFunctionCall","src":"2220:62:201"},"nodeType":"YulExpressionStatement","src":"2220:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2302:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2313:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2298:3:201"},"nodeType":"YulFunctionCall","src":"2298:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"2318:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2291:6:201"},"nodeType":"YulFunctionCall","src":"2291:36:201"},"nodeType":"YulExpressionStatement","src":"2291:36:201"},{"nodeType":"YulAssignment","src":"2336:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2348:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2359:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2344:3:201"},"nodeType":"YulFunctionCall","src":"2344:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2336:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2118:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2132:4:201","type":""}],"src":"1967:402:201"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPoolAddressesProvider(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069t_contract$_IParaSwapAugustusRegistry_$30961t_address_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        validator_revert_contract_IPoolAddressesProvider(value_1)\n        value1 := value_1\n        let value_2 := mload(add(headStart, 64))\n        validator_revert_contract_IPoolAddressesProvider(value_2)\n        value2 := value_2\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"6101006040523480156200001257600080fd5b50604051620030b1380380620030b1833981016040819052620000359162000328565b82828180806001600160a01b03166080816001600160a01b031681525050806001600160a01b031663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000092573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b891906200037c565b6001600160a01b031660a05250600080546001600160a01b0319163390811782556040519091829160008051602062003091833981519152908290a350806001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015a91906200037c565b6001600160a01b0390811660c05260405163fb04e17b60e01b815260006004820152908316915063fb04e17b90602401602060405180830381865afa158015620001a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ce9190620003a3565b15620001d957600080fd5b6001600160a01b031660e0525060018055620001f581620001fe565b505050620003c7565b6000546001600160a01b031633146200025e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b038116620002c55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000255565b600080546040516001600160a01b03808516939216916000805160206200309183398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811681146200032557600080fd5b50565b6000806000606084860312156200033e57600080fd5b83516200034b816200030f565b60208501519093506200035e816200030f565b604085015190925062000371816200030f565b809150509250925092565b6000602082840312156200038f57600080fd5b81516200039c816200030f565b9392505050565b600060208284031215620003b657600080fd5b815180151581146200039c57600080fd5b60805160a05160c05160e051612c366200045b6000396000818161019901526112f20152600081816101720152611f4d0152600081816101c801528181610411015281816107ef01528181610831015281816108af01528181610d7801528181610dba01528181610e3a01528181610ed101528181610efc0152818161101801526111cd0152600060e70152612c366000f3fe608060405234801561001057600080fd5b50600436106100c85760003560e01c80633a829867116100815780638da5cb5b1161005b5780638da5cb5b146101ea578063d3454a3514610208578063f2fde38b1461021b57600080fd5b80633a82986714610194578063715018a6146101bb5780637535d246146101c357600080fd5b80631b11d0ff116100b25780631b11d0ff1461013357806332e4b2861461015657806338013f021461016d57600080fd5b8062ae3bf8146100cd5780630542975c146100e2575b600080fd5b6100e06100db366004612352565b61022e565b005b6101097f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101466101413660046123b8565b610385565b604051901515815260200161012a565b61015f610bb881565b60405190815260200161012a565b6101097f000000000000000000000000000000000000000000000000000000000000000081565b6101097f000000000000000000000000000000000000000000000000000000000000000081565b6100e06104e7565b6101097f000000000000000000000000000000000000000000000000000000000000000081565b60005473ffffffffffffffffffffffffffffffffffffffff16610109565b6100e0610216366004612444565b6105d7565b6100e0610229366004612352565b61091c565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6103826102d660005473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610340573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103649190612516565b73ffffffffffffffffffffffffffffffffffffffff84169190610acd565b50565b6000600260015414156103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102ab565b60026001553373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f43414c4c45525f4d5553545f42455f504f4f4c0000000000000000000000000060448201526064016102ab565b85858589600080808080806104af8c8e018e612661565b9550955095509550955095506104cd848484848e8e8e8e8e8e610ba6565b505060018080559f9e505050505050505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102ab565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60026001541415610644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102ab565b600260015560006106548a610f53565b610100015190508515610761576040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa1580156106ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f29190612516565b90508881111561075e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f494e53554646494349454e545f414d4f554e545f544f5f53574150000000000060448201526064016102ab565b97505b61077c8a82338b6107773688900388018861275c565b61108a565b60006107d18787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050868e8e8e8e6112aa565b905061081573ffffffffffffffffffffffffffffffffffffffff8b167f00000000000000000000000000000000000000000000000000000000000000006000611a9e565b61085673ffffffffffffffffffffffffffffffffffffffff8b167f000000000000000000000000000000000000000000000000000000000000000083611a9e565b6040517fe8eda9df00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015260248201839052336044830152600060648301527f0000000000000000000000000000000000000000000000000000000000000000169063e8eda9df90608401600060405180830381600087803b1580156108f357600080fd5b505af1158015610907573d6000803e3d6000fd5b50506001805550505050505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461099d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102ab565b73ffffffffffffffffffffffffffffffffffffffff8116610a40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102ab565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1610b30573d6000803e3d6000fd5b50610b3a84611c5c565b610ba0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e73666572000000000000000000000060448201526064016102ab565b50505050565b6000610bb184610f53565b61010001516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529192508891600091908416906370a0823190602401602060405180830381865afa158015610c2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4f9190612516565b90508c15610cd6576000610c63828a611d28565b905082811115610ccf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f494e53554646494349454e545f414d4f554e545f544f5f53574150000000000060448201526064016102ab565b9150610d49565b610ce08289611d38565b811015610d49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f494e53554646494349454e545f41544f4b454e5f42414c414e4345000000000060448201526064016102ab565b6000610d5a8e8e8e8a8a888b6112aa565b9050610d9e73ffffffffffffffffffffffffffffffffffffffff87167f00000000000000000000000000000000000000000000000000000000000000006000611a9e565b610ddf73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000083611a9e565b6040517fe8eda9df00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018390528981166044830152600060648301527f0000000000000000000000000000000000000000000000000000000000000000169063e8eda9df90608401600060405180830381600087803b158015610e7e57600080fd5b505af1158015610e92573d6000803e3d6000fd5b50505050610eb587858a610eaf8d88611d3890919063ffffffff16565b8f61108a565b610ef773ffffffffffffffffffffffffffffffffffffffff88167f00000000000000000000000000000000000000000000000000000000000000006000611a9e565b610f437f0000000000000000000000000000000000000000000000000000000000000000610f258c8c611d38565b73ffffffffffffffffffffffffffffffffffffffff8a169190611a9e565b5050505050505050505050505050565b604080516102008101825260006101e08201818152825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c08101919091526040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa158015611060573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611084919061280c565b92915050565b60208101511561115757805160208201516040808401516060850151608086015192517fd505accf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301523060248301526044820196909652606481019490945260ff909116608484015260a483015260c48201529085169063d505accf9060e401600060405180830381600087803b15801561113e57600080fd5b505af1158015611152573d6000803e3d6000fd5b505050505b61117973ffffffffffffffffffffffffffffffffffffffff8516843085611d48565b6040517f69328dec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820184905230604483015283917f0000000000000000000000000000000000000000000000000000000000000000909116906369328dec906064016020604051808303816000875af1158015611218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123c9190612516565b146112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f554e45585045435445445f414d4f554e545f57495448445241574e000000000060448201526064016102ab565b5050505050565b6040517ffb04e17b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063fb04e17b90602401602060405180830381865afa15801561133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135f919061292f565b6113c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f494e56414c49445f41554755535455530000000000000000000000000000000060448201526064016102ab565b60006113d086611e23565b60ff16905060006113e086611e23565b60ff16905060006113f088611f05565b905060006113fd88611f05565b90506000611455611412610bb8612710612980565b61144f61142a61142389600a612ab7565b8690611fba565b61144961144261143b8a600a612ab7565b8990611fba565b8d90611fba565b90611fe4565b90611ff7565b9050868111156114c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4d494e5f414d4f554e545f455843454544535f4d41585f534c4950504147450060448201526064016102ab565b50506040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000935073ffffffffffffffffffffffffffffffffffffffff891692506370a082319150602401602060405180830381865afa158015611533573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115579190612516565b9050838110156115c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f494e53554646494349454e545f42414c414e43455f4245464f52455f5357415060448201526064016102ab565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8716906370a0823190602401602060405180830381865afa158015611630573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116549190612516565b905060008873ffffffffffffffffffffffffffffffffffffffff1663d2c4b5986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c79190612ac3565b90506116eb73ffffffffffffffffffffffffffffffffffffffff8916826000611a9e565b61170c73ffffffffffffffffffffffffffffffffffffffff89168288611a9e565b8a1561179e5760048b1015801561172f5750895161172b906020611d28565b8b11155b611795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f46524f4d5f414d4f554e545f4f46465345545f4f55545f4f465f52414e47450060448201526064016102ab565b8560208c018b01525b60008973ffffffffffffffffffffffffffffffffffffffff168b6040516117c59190612b0c565b6000604051808303816000865af19150503d8060008114611802576040519150601f19603f3d011682016040523d82523d6000602084013e611807565b606091505b505090508061181a573d6000803e3d6000fd5b6118248785612980565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8b16906370a0823190602401602060405180830381865afa15801561188e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b29190612516565b14611919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f57524f4e475f42414c414e43455f41465445525f53574150000000000000000060448201526064016102ab565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526119b390849073ffffffffffffffffffffffffffffffffffffffff8b16906370a0823190602401602060405180830381865afa158015611989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ad9190612516565b90611d28565b945085851015611a1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f494e53554646494349454e545f414d4f554e545f52454345495645440000000060448201526064016102ab565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fa078c4190abe07940190effc1846be0ccf03ad6007bc9e93f9697d0b460befbb8988604051611a87929190918252602082015260400190565b60405180910390a350505050979650505050505050565b801580611b3e57506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611b18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3c9190612516565b155b611bca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016102ab565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052611c5790849061203a565b505050565b6000611c9c565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d8015611cdb5760208114611d1557611cd67f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f611c63565b611d22565b823b611d0c57611d0c7f475076323a206e6f74206120636f6e74726163740000000000000000000000006014611c63565b60019150611d22565b3d6000803e600051151591505b50919050565b8082038281111561108457600080fd5b8082018281101561108457600080fd5b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af1611db3573d6000803e3d6000fd5b50611dbd85611c5c565b6112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d0000000000000060448201526064016102ab565b6000808273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e959190612b28565b9050604d8160ff161115611084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f544f4f5f4d414e595f444543494d414c535f4f4e5f544f4b454e00000000000060448201526064016102ab565b6040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063b3596f0790602401602060405180830381865afa158015611f96573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110849190612516565b6000821580611fdb57505081810281838281611fd857611fd8612b45565b04145b61108457600080fd5b6000611ff08284612b74565b9392505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec778390048411151761202c57600080fd5b506127109102611388010490565b600061209c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166121469092919063ffffffff16565b805190915015611c5757808060200190518101906120ba919061292f565b611c57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016102ab565b6060612155848460008561215d565b949350505050565b6060824710156121ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016102ab565b843b612257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102ab565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516122809190612b0c565b60006040518083038185875af1925050503d80600081146122bd576040519150601f19603f3d011682016040523d82523d6000602084013e6122c2565b606091505b50915091506122d28282866122dd565b979650505050505050565b606083156122ec575081611ff0565b8251156122fc5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ab9190612baf565b73ffffffffffffffffffffffffffffffffffffffff8116811461038257600080fd5b60006020828403121561236457600080fd5b8135611ff081612330565b60008083601f84011261238157600080fd5b50813567ffffffffffffffff81111561239957600080fd5b6020830191508360208285010111156123b157600080fd5b9250929050565b60008060008060008060a087890312156123d157600080fd5b86356123dc81612330565b9550602087013594506040870135935060608701356123fa81612330565b9250608087013567ffffffffffffffff81111561241657600080fd5b61242289828a0161236f565b979a9699509497509295939492505050565b803561243f81612330565b919050565b6000806000806000806000806000898b0361018081121561246457600080fd5b8a3561246f81612330565b995060208b013561247f81612330565b985060408b0135975060608b0135965060808b0135955060a08b013567ffffffffffffffff8111156124b057600080fd5b6124bc8d828e0161236f565b90965094505060c08b01356124d081612330565b925060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff208201121561250257600080fd5b5060e08a0190509295985092959850929598565b60006020828403121561252857600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff811182821017156125825761258261252f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156125cf576125cf61252f565b604052919050565b60ff8116811461038257600080fd5b600060a082840312156125f857600080fd5b60405160a0810181811067ffffffffffffffff8211171561261b5761261b61252f565b80604052508091508235815260208301356020820152604083013561263f816125d7565b8060408301525060608301356060820152608083013560808201525092915050565b600080600080600080610140878903121561267b57600080fd5b863561268681612330565b9550602087810135955060408801359450606088013567ffffffffffffffff808211156126b257600080fd5b818a0191508a601f8301126126c657600080fd5b8135818111156126d8576126d861252f565b612708847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612588565b91508082528b8482850101111561271e57600080fd5b808484018584013760008482840101525080955050505061274160808801612434565b91506127508860a089016125e6565b90509295509295509295565b600060a0828403121561276e57600080fd5b611ff083836125e6565b60006020828403121561278a57600080fd5b6040516020810181811067ffffffffffffffff821117156127ad576127ad61252f565b6040529151825250919050565b80516fffffffffffffffffffffffffffffffff8116811461243f57600080fd5b805164ffffffffff8116811461243f57600080fd5b805161ffff8116811461243f57600080fd5b805161243f81612330565b60006101e0828403121561281f57600080fd5b61282761255e565b6128318484612778565b815261283f602084016127ba565b6020820152612850604084016127ba565b6040820152612861606084016127ba565b6060820152612872608084016127ba565b608082015261288360a084016127ba565b60a082015261289460c084016127da565b60c08201526128a560e084016127ef565b60e08201526101006128b8818501612801565b908201526101206128ca848201612801565b908201526101406128dc848201612801565b908201526101606128ee848201612801565b908201526101806129008482016127ba565b908201526101a06129128482016127ba565b908201526101c06129248482016127ba565b908201529392505050565b60006020828403121561294157600080fd5b81518015158114611ff057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561299257612992612951565b500390565b600181815b808511156129f057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156129d6576129d6612951565b808516156129e357918102915b93841c939080029061299c565b509250929050565b600082612a0757506001611084565b81612a1457506000611084565b8160018114612a2a5760028114612a3457612a50565b6001915050611084565b60ff841115612a4557612a45612951565b50506001821b611084565b5060208310610133831016604e8410600b8410161715612a73575081810a611084565b612a7d8383612997565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612aaf57612aaf612951565b029392505050565b6000611ff083836129f8565b600060208284031215612ad557600080fd5b8151611ff081612330565b60005b83811015612afb578181015183820152602001612ae3565b83811115610ba05750506000910152565b60008251612b1e818460208701612ae0565b9190910192915050565b600060208284031215612b3a57600080fd5b8151611ff0816125d7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612baa577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6020815260008251806020840152612bce816040850160208701612ae0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220d742a96723f1970e9be4e635661c51fc280b36297aa324d0112f594d85ef64d164736f6c634300080a00338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","opcodes":"PUSH2 0x100 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x30B1 CODESIZE SUB DUP1 PUSH3 0x30B1 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0x328 JUMP JUMPDEST DUP3 DUP3 DUP2 DUP1 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x92 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0xB8 SWAP2 SWAP1 PUSH3 0x37C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE POP PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 DUP3 SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x3091 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 DUP3 SWAP1 LOG3 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x134 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x15A SWAP2 SWAP1 PUSH3 0x37C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0xC0 MSTORE PUSH1 0x40 MLOAD PUSH4 0xFB04E17B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP4 AND SWAP2 POP PUSH4 0xFB04E17B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 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 PUSH3 0x1CE SWAP2 SWAP1 PUSH3 0x3A3 JUMP JUMPDEST ISZERO PUSH3 0x1D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xE0 MSTORE POP PUSH1 0x1 DUP1 SSTORE PUSH3 0x1F5 DUP2 PUSH3 0x1FE JUMP JUMPDEST POP POP POP PUSH3 0x3C7 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH3 0x25E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x2C5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x255 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x3091 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 LOG3 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 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x325 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x33E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH3 0x34B DUP2 PUSH3 0x30F JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP4 POP PUSH3 0x35E DUP2 PUSH3 0x30F JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP3 POP PUSH3 0x371 DUP2 PUSH3 0x30F JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x38F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x39C DUP2 PUSH3 0x30F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x3B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x39C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x2C36 PUSH3 0x45B PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x199 ADD MSTORE PUSH2 0x12F2 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x172 ADD MSTORE PUSH2 0x1F4D ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x1C8 ADD MSTORE DUP2 DUP2 PUSH2 0x411 ADD MSTORE DUP2 DUP2 PUSH2 0x7EF ADD MSTORE DUP2 DUP2 PUSH2 0x831 ADD MSTORE DUP2 DUP2 PUSH2 0x8AF ADD MSTORE DUP2 DUP2 PUSH2 0xD78 ADD MSTORE DUP2 DUP2 PUSH2 0xDBA ADD MSTORE DUP2 DUP2 PUSH2 0xE3A ADD MSTORE DUP2 DUP2 PUSH2 0xED1 ADD MSTORE DUP2 DUP2 PUSH2 0xEFC ADD MSTORE DUP2 DUP2 PUSH2 0x1018 ADD MSTORE PUSH2 0x11CD ADD MSTORE PUSH1 0x0 PUSH1 0xE7 ADD MSTORE PUSH2 0x2C36 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 0xC8 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3A829867 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0xD3454A35 EQ PUSH2 0x208 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3A829867 EQ PUSH2 0x194 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1BB JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x1C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1B11D0FF GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x1B11D0FF EQ PUSH2 0x133 JUMPI DUP1 PUSH4 0x32E4B286 EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0x38013F02 EQ PUSH2 0x16D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH3 0xAE3BF8 EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0x542975C EQ PUSH2 0xE2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE0 PUSH2 0xDB CALLDATASIZE PUSH1 0x4 PUSH2 0x2352 JUMP JUMPDEST PUSH2 0x22E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x109 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x146 PUSH2 0x141 CALLDATASIZE PUSH1 0x4 PUSH2 0x23B8 JUMP JUMPDEST PUSH2 0x385 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12A JUMP JUMPDEST PUSH2 0x15F PUSH2 0xBB8 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12A JUMP JUMPDEST PUSH2 0x109 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x109 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0xE0 PUSH2 0x4E7 JUMP JUMPDEST PUSH2 0x109 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x109 JUMP JUMPDEST PUSH2 0xE0 PUSH2 0x216 CALLDATASIZE PUSH1 0x4 PUSH2 0x2444 JUMP JUMPDEST PUSH2 0x5D7 JUMP JUMPDEST PUSH2 0xE0 PUSH2 0x229 CALLDATASIZE PUSH1 0x4 PUSH2 0x2352 JUMP JUMPDEST PUSH2 0x91C JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x2B4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x382 PUSH2 0x2D6 PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x340 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x364 SWAP2 SWAP1 PUSH2 0x2516 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP2 SWAP1 PUSH2 0xACD JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 PUSH1 0x1 SLOAD EQ ISZERO PUSH2 0x3F4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x2 PUSH1 0x1 SSTORE CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x498 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43414C4C45525F4D5553545F42455F504F4F4C00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST DUP6 DUP6 DUP6 DUP10 PUSH1 0x0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x4AF DUP13 DUP15 ADD DUP15 PUSH2 0x2661 JUMP JUMPDEST SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP PUSH2 0x4CD DUP5 DUP5 DUP5 DUP5 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 PUSH2 0xBA6 JUMP JUMPDEST POP POP PUSH1 0x1 DUP1 DUP1 SSTORE SWAP16 SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x568 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 PUSH1 0x1 SLOAD EQ ISZERO PUSH2 0x644 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x2 PUSH1 0x1 SSTORE PUSH1 0x0 PUSH2 0x654 DUP11 PUSH2 0xF53 JUMP JUMPDEST PUSH2 0x100 ADD MLOAD SWAP1 POP DUP6 ISZERO PUSH2 0x761 JUMPI PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6F2 SWAP2 SWAP1 PUSH2 0x2516 JUMP JUMPDEST SWAP1 POP DUP9 DUP2 GT ISZERO PUSH2 0x75E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F414D4F554E545F544F5F535741500000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST SWAP8 POP JUMPDEST PUSH2 0x77C DUP11 DUP3 CALLER DUP12 PUSH2 0x777 CALLDATASIZE DUP9 SWAP1 SUB DUP9 ADD DUP9 PUSH2 0x275C JUMP JUMPDEST PUSH2 0x108A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7D1 DUP8 DUP8 DUP8 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP7 DUP15 DUP15 DUP15 DUP15 PUSH2 0x12AA JUMP JUMPDEST SWAP1 POP PUSH2 0x815 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND PUSH32 0x0 PUSH1 0x0 PUSH2 0x1A9E JUMP JUMPDEST PUSH2 0x856 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND PUSH32 0x0 DUP4 PUSH2 0x1A9E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE8EDA9DF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE CALLER PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x64 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xE8EDA9DF SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x907 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 DUP1 SSTORE POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x99D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xA40 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0xB30 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0xB3A DUP5 PUSH2 0x1C5C JUMP JUMPDEST PUSH2 0xBA0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBB1 DUP5 PUSH2 0xF53 JUMP JUMPDEST PUSH2 0x100 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP3 POP DUP9 SWAP2 PUSH1 0x0 SWAP2 SWAP1 DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC2B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC4F SWAP2 SWAP1 PUSH2 0x2516 JUMP JUMPDEST SWAP1 POP DUP13 ISZERO PUSH2 0xCD6 JUMPI PUSH1 0x0 PUSH2 0xC63 DUP3 DUP11 PUSH2 0x1D28 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 GT ISZERO PUSH2 0xCCF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F414D4F554E545F544F5F535741500000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST SWAP2 POP PUSH2 0xD49 JUMP JUMPDEST PUSH2 0xCE0 DUP3 DUP10 PUSH2 0x1D38 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0xD49 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F41544F4B454E5F42414C414E43450000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD5A DUP15 DUP15 DUP15 DUP11 DUP11 DUP9 DUP12 PUSH2 0x12AA JUMP JUMPDEST SWAP1 POP PUSH2 0xD9E PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH32 0x0 PUSH1 0x0 PUSH2 0x1A9E JUMP JUMPDEST PUSH2 0xDDF PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH32 0x0 DUP4 PUSH2 0x1A9E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE8EDA9DF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE DUP10 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x64 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xE8EDA9DF SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE92 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0xEB5 DUP8 DUP6 DUP11 PUSH2 0xEAF DUP14 DUP9 PUSH2 0x1D38 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP16 PUSH2 0x108A JUMP JUMPDEST PUSH2 0xEF7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH32 0x0 PUSH1 0x0 PUSH2 0x1A9E JUMP JUMPDEST PUSH2 0xF43 PUSH32 0x0 PUSH2 0xF25 DUP13 DUP13 PUSH2 0x1D38 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP2 SWAP1 PUSH2 0x1A9E JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x200 DUP2 ADD DUP3 MSTORE PUSH1 0x0 PUSH2 0x1E0 DUP3 ADD DUP2 DUP2 MSTORE DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1A0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1060 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1084 SWAP2 SWAP1 PUSH2 0x280C JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD ISZERO PUSH2 0x1157 JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP1 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x80 DUP7 ADD MLOAD SWAP3 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x64 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0xFF SWAP1 SWAP2 AND PUSH1 0x84 DUP5 ADD MSTORE PUSH1 0xA4 DUP4 ADD MSTORE PUSH1 0xC4 DUP3 ADD MSTORE SWAP1 DUP6 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x113E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1152 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0x1179 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 ADDRESS DUP6 PUSH2 0x1D48 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x69328DEC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP5 SWAP1 MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE DUP4 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x69328DEC SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1218 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x123C SWAP2 SWAP1 PUSH2 0x2516 JUMP JUMPDEST EQ PUSH2 0x12A3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x554E45585045435445445F414D4F554E545F57495448445241574E0000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFB04E17B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xFB04E17B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x133B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x135F SWAP2 SWAP1 PUSH2 0x292F JUMP JUMPDEST PUSH2 0x13C5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F415547555354555300000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x13D0 DUP7 PUSH2 0x1E23 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH1 0x0 PUSH2 0x13E0 DUP7 PUSH2 0x1E23 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH1 0x0 PUSH2 0x13F0 DUP9 PUSH2 0x1F05 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x13FD DUP9 PUSH2 0x1F05 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1455 PUSH2 0x1412 PUSH2 0xBB8 PUSH2 0x2710 PUSH2 0x2980 JUMP JUMPDEST PUSH2 0x144F PUSH2 0x142A PUSH2 0x1423 DUP10 PUSH1 0xA PUSH2 0x2AB7 JUMP JUMPDEST DUP7 SWAP1 PUSH2 0x1FBA JUMP JUMPDEST PUSH2 0x1449 PUSH2 0x1442 PUSH2 0x143B DUP11 PUSH1 0xA PUSH2 0x2AB7 JUMP JUMPDEST DUP10 SWAP1 PUSH2 0x1FBA JUMP JUMPDEST DUP14 SWAP1 PUSH2 0x1FBA JUMP JUMPDEST SWAP1 PUSH2 0x1FE4 JUMP JUMPDEST SWAP1 PUSH2 0x1FF7 JUMP JUMPDEST SWAP1 POP DUP7 DUP2 GT ISZERO PUSH2 0x14C1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D494E5F414D4F554E545F455843454544535F4D41585F534C49505041474500 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP3 POP PUSH4 0x70A08231 SWAP2 POP PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1533 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1557 SWAP2 SWAP1 PUSH2 0x2516 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0x15C3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F42414C414E43455F4245464F52455F53574150 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1630 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1654 SWAP2 SWAP1 PUSH2 0x2516 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD2C4B598 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16A3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16C7 SWAP2 SWAP1 PUSH2 0x2AC3 JUMP JUMPDEST SWAP1 POP PUSH2 0x16EB PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP3 PUSH1 0x0 PUSH2 0x1A9E JUMP JUMPDEST PUSH2 0x170C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP3 DUP9 PUSH2 0x1A9E JUMP JUMPDEST DUP11 ISZERO PUSH2 0x179E JUMPI PUSH1 0x4 DUP12 LT ISZERO DUP1 ISZERO PUSH2 0x172F JUMPI POP DUP10 MLOAD PUSH2 0x172B SWAP1 PUSH1 0x20 PUSH2 0x1D28 JUMP JUMPDEST DUP12 GT ISZERO JUMPDEST PUSH2 0x1795 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46524F4D5F414D4F554E545F4F46465345545F4F55545F4F465F52414E474500 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST DUP6 PUSH1 0x20 DUP13 ADD DUP12 ADD MSTORE JUMPDEST PUSH1 0x0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH1 0x40 MLOAD PUSH2 0x17C5 SWAP2 SWAP1 PUSH2 0x2B0C 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 0x1802 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 0x1807 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x181A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x1824 DUP8 DUP6 PUSH2 0x2980 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x188E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18B2 SWAP2 SWAP1 PUSH2 0x2516 JUMP JUMPDEST EQ PUSH2 0x1919 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x57524F4E475F42414C414E43455F41465445525F535741500000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x19B3 SWAP1 DUP5 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1989 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19AD SWAP2 SWAP1 PUSH2 0x2516 JUMP JUMPDEST SWAP1 PUSH2 0x1D28 JUMP JUMPDEST SWAP5 POP DUP6 DUP6 LT ISZERO PUSH2 0x1A1F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F414D4F554E545F524543454956454400000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xA078C4190ABE07940190EFFC1846BE0CCF03AD6007BC9E93F9697D0B460BEFBB DUP10 DUP9 PUSH1 0x40 MLOAD PUSH2 0x1A87 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x1B3E JUMPI POP PUSH1 0x40 MLOAD PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B18 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B3C SWAP2 SWAP1 PUSH2 0x2516 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x1BCA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x20746F206E6F6E2D7A65726F20616C6C6F77616E636500000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB 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 0x95EA7B300000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x1C57 SWAP1 DUP5 SWAP1 PUSH2 0x203A JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C9C JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x1CDB JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x1D15 JUMPI PUSH2 0x1CD6 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x1C63 JUMP JUMPDEST PUSH2 0x1D22 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x1D0C JUMPI PUSH2 0x1D0C PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x1C63 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x1D22 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0x1084 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x1084 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x1DB3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1DBD DUP6 PUSH2 0x1C5C JUMP JUMPDEST PUSH2 0x12A3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E71 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E95 SWAP2 SWAP1 PUSH2 0x2B28 JUMP JUMPDEST SWAP1 POP PUSH1 0x4D DUP2 PUSH1 0xFF AND GT ISZERO PUSH2 0x1084 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x544F4F5F4D414E595F444543494D414C535F4F4E5F544F4B454E000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F96 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1084 SWAP2 SWAP1 PUSH2 0x2516 JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 PUSH2 0x1FDB JUMPI POP POP DUP2 DUP2 MUL DUP2 DUP4 DUP3 DUP2 PUSH2 0x1FD8 JUMPI PUSH2 0x1FD8 PUSH2 0x2B45 JUMP JUMPDEST DIV EQ JUMPDEST PUSH2 0x1084 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1FF0 DUP3 DUP5 PUSH2 0x2B74 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x202C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x209C DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2146 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1C57 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x20BA SWAP2 SWAP1 PUSH2 0x292F JUMP JUMPDEST PUSH2 0x1C57 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F74207375636365656400000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x60 PUSH2 0x2155 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x215D JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x21EF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x722063616C6C0000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB JUMP JUMPDEST DUP5 EXTCODESIZE PUSH2 0x2257 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x2280 SWAP2 SWAP1 PUSH2 0x2B0C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x22BD 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 0x22C2 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x22D2 DUP3 DUP3 DUP7 PUSH2 0x22DD JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x22EC JUMPI POP DUP2 PUSH2 0x1FF0 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x22FC JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2AB SWAP2 SWAP1 PUSH2 0x2BAF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2364 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1FF0 DUP2 PUSH2 0x2330 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2381 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2399 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x23B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x23D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x23DC DUP2 PUSH2 0x2330 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0x23FA DUP2 PUSH2 0x2330 JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2416 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2422 DUP10 DUP3 DUP11 ADD PUSH2 0x236F JUMP JUMPDEST SWAP8 SWAP11 SWAP7 SWAP10 POP SWAP5 SWAP8 POP SWAP3 SWAP6 SWAP4 SWAP5 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x243F DUP2 PUSH2 0x2330 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP10 DUP12 SUB PUSH2 0x180 DUP2 SLT ISZERO PUSH2 0x2464 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP11 CALLDATALOAD PUSH2 0x246F DUP2 PUSH2 0x2330 JUMP JUMPDEST SWAP10 POP PUSH1 0x20 DUP12 ADD CALLDATALOAD PUSH2 0x247F DUP2 PUSH2 0x2330 JUMP JUMPDEST SWAP9 POP PUSH1 0x40 DUP12 ADD CALLDATALOAD SWAP8 POP PUSH1 0x60 DUP12 ADD CALLDATALOAD SWAP7 POP PUSH1 0x80 DUP12 ADD CALLDATALOAD SWAP6 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x24B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x24BC DUP14 DUP3 DUP15 ADD PUSH2 0x236F JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP POP PUSH1 0xC0 DUP12 ADD CALLDATALOAD PUSH2 0x24D0 DUP2 PUSH2 0x2330 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 DUP3 ADD SLT ISZERO PUSH2 0x2502 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xE0 DUP11 ADD SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2528 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2582 JUMPI PUSH2 0x2582 PUSH2 0x252F JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x25CF JUMPI PUSH2 0x25CF PUSH2 0x252F JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x25F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x261B JUMPI PUSH2 0x261B PUSH2 0x252F JUMP JUMPDEST DUP1 PUSH1 0x40 MSTORE POP DUP1 SWAP2 POP DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD PUSH2 0x263F DUP2 PUSH2 0x25D7 JUMP JUMPDEST DUP1 PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x140 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x267B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x2686 DUP2 PUSH2 0x2330 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 DUP2 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x26B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP11 ADD SWAP2 POP DUP11 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x26C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x26D8 JUMPI PUSH2 0x26D8 PUSH2 0x252F JUMP JUMPDEST PUSH2 0x2708 DUP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x2588 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP12 DUP5 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x271E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP5 DUP5 ADD DUP6 DUP5 ADD CALLDATACOPY PUSH1 0x0 DUP5 DUP3 DUP5 ADD ADD MSTORE POP DUP1 SWAP6 POP POP POP POP PUSH2 0x2741 PUSH1 0x80 DUP9 ADD PUSH2 0x2434 JUMP JUMPDEST SWAP2 POP PUSH2 0x2750 DUP9 PUSH1 0xA0 DUP10 ADD PUSH2 0x25E6 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x276E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1FF0 DUP4 DUP4 PUSH2 0x25E6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x278A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x27AD JUMPI PUSH2 0x27AD PUSH2 0x252F JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x243F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x243F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x243F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x243F DUP2 PUSH2 0x2330 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x281F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2827 PUSH2 0x255E JUMP JUMPDEST PUSH2 0x2831 DUP5 DUP5 PUSH2 0x2778 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x283F PUSH1 0x20 DUP5 ADD PUSH2 0x27BA JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2850 PUSH1 0x40 DUP5 ADD PUSH2 0x27BA JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x2861 PUSH1 0x60 DUP5 ADD PUSH2 0x27BA JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x2872 PUSH1 0x80 DUP5 ADD PUSH2 0x27BA JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x2883 PUSH1 0xA0 DUP5 ADD PUSH2 0x27BA JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x2894 PUSH1 0xC0 DUP5 ADD PUSH2 0x27DA JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x28A5 PUSH1 0xE0 DUP5 ADD PUSH2 0x27EF JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x28B8 DUP2 DUP6 ADD PUSH2 0x2801 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x28CA DUP5 DUP3 ADD PUSH2 0x2801 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x28DC DUP5 DUP3 ADD PUSH2 0x2801 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x28EE DUP5 DUP3 ADD PUSH2 0x2801 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x2900 DUP5 DUP3 ADD PUSH2 0x27BA JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x2912 DUP5 DUP3 ADD PUSH2 0x27BA JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x2924 DUP5 DUP3 ADD PUSH2 0x27BA JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2941 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1FF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x2992 JUMPI PUSH2 0x2992 PUSH2 0x2951 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x29F0 JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x29D6 JUMPI PUSH2 0x29D6 PUSH2 0x2951 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x29E3 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x299C JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2A07 JUMPI POP PUSH1 0x1 PUSH2 0x1084 JUMP JUMPDEST DUP2 PUSH2 0x2A14 JUMPI POP PUSH1 0x0 PUSH2 0x1084 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x2A2A JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x2A34 JUMPI PUSH2 0x2A50 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x1084 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x2A45 JUMPI PUSH2 0x2A45 PUSH2 0x2951 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x1084 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x2A73 JUMPI POP DUP2 DUP2 EXP PUSH2 0x1084 JUMP JUMPDEST PUSH2 0x2A7D DUP4 DUP4 PUSH2 0x2997 JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x2AAF JUMPI PUSH2 0x2AAF PUSH2 0x2951 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1FF0 DUP4 DUP4 PUSH2 0x29F8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2AD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1FF0 DUP2 PUSH2 0x2330 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2AFB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2AE3 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xBA0 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x2B1E DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x2AE0 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2B3A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1FF0 DUP2 PUSH2 0x25D7 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2BAA JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x2BCE DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x2AE0 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD7 TIMESTAMP 0xA9 PUSH8 0x23F1970E9BE4E635 PUSH7 0x1C51FC280B3629 PUSH27 0xA324D0112F594D85EF64D164736F6C634300080A00338BE0079C53 AND MSIZE EQ SGT DIFFICULTY 0xCD 0x1F 0xD0 LOG4 CALLCODE DUP5 NOT 0x49 PUSH32 0x9722A3DAAFE3B4186F6B6457E000000000000000000000000000000000000000 ","sourceMap":"1009:7481:109:-:0;;;1164:225;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1317:17;1336:16;1299:17:108;2036::106;673:8:25;-1:-1:-1;;;;;652:29:25;;;-1:-1:-1;;;;;652:29:25;;;;;700:8;-1:-1:-1;;;;;700:16:25;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;687:32:25;;;-1:-1:-1;835:17:11;873:18;;-1:-1:-1;;;;;;873:18:11;678:10:4;873:18:11;;;;;902:43;;678:10:4;;;;-1:-1:-1;;;;;;;;;;;902:43:11;835:17;;902:43;829:121;2089:17:106::1;-1:-1:-1::0;;;;;2089:32:106::1;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2061:63:106;;::::1;;::::0;1413:44:108::1;::::0;-1:-1:-1;;;1413:44:108;;1454:1:::1;1413:44;::::0;::::1;1262:51:201::0;1413:32:108;;::::1;::::0;-1:-1:-1;1413:32:108::1;::::0;1235:18:201;;1413:44:108::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1412:45;1404:54;;;::::0;::::1;;-1:-1:-1::0;;;;;1464:36:108::1;;::::0;-1:-1:-1;1616:1:114;1711:22;;1360:24:109::1;1378:5:::0;1360:17:::1;:24::i;:::-;1164:225:::0;;;1009:7481;;1875:226:11;1204:6;;-1:-1:-1;;;;;1204:6:11;678:10:4;1204:22:11;1196:67;;;;-1:-1:-1;;;1196:67:11;;1808:2:201;1196:67:11;;;1790:21:201;;;1827:18;;;1820:30;1886:34;1866:18;;;1859:62;1938:18;;1196:67:11;;;;;;;;;-1:-1:-1;;;;;1959:22:11;::::1;1951:73;;;::::0;-1:-1:-1;;;1951:73:11;;2169:2:201;1951:73:11::1;::::0;::::1;2151:21:201::0;2208:2;2188:18;;;2181:30;2247:34;2227:18;;;2220:62;-1:-1:-1;;;2298:18:201;;;2291:36;2344:19;;1951:73:11::1;1967:402:201::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;-1:-1:-1;;;;;2035:38:11;;::::1;::::0;2056:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;2035:38:11;::::1;2079:6;:17:::0;;-1:-1:-1;;;;;;2079:17:11::1;-1:-1:-1::0;;;;;2079:17:11;;;::::1;::::0;;;::::1;::::0;;1875:226::o;14:155:201:-;-1:-1:-1;;;;;113:31:201;;103:42;;93:70;;159:1;156;149:12;93:70;14:155;:::o;174:657::-;328:6;336;344;397:2;385:9;376:7;372:23;368:32;365:52;;;413:1;410;403:12;365:52;445:9;439:16;464:55;513:5;464:55;:::i;:::-;588:2;573:18;;567:25;538:5;;-1:-1:-1;601:57:201;567:25;601:57;:::i;:::-;729:2;714:18;;708:25;677:7;;-1:-1:-1;742:57:201;708:25;742:57;:::i;:::-;818:7;808:17;;;174:657;;;;;:::o;836:275::-;906:6;959:2;947:9;938:7;934:23;930:32;927:52;;;975:1;972;965:12;927:52;1007:9;1001:16;1026:55;1075:5;1026:55;:::i;:::-;1100:5;836:275;-1:-1:-1;;;836:275:201:o;1324:277::-;1391:6;1444:2;1432:9;1423:7;1419:23;1415:32;1412:52;;;1460:1;1457;1450:12;1412:52;1492:9;1486:16;1545:5;1538:13;1531:21;1524:5;1521:32;1511:60;;1567:1;1564;1557:12;1967:402;1009:7481:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ADDRESSES_PROVIDER_3442":{"entryPoint":null,"id":3442,"parameterSlots":0,"returnSlots":0},"@AUGUSTUS_REGISTRY_29593":{"entryPoint":null,"id":29593,"parameterSlots":0,"returnSlots":0},"@MAX_SLIPPAGE_PERCENT_29022":{"entryPoint":null,"id":29022,"parameterSlots":0,"returnSlots":0},"@ORACLE_29025":{"entryPoint":null,"id":29025,"parameterSlots":0,"returnSlots":0},"@POOL_3446":{"entryPoint":null,"id":3446,"parameterSlots":0,"returnSlots":0},"@_callOptionalReturn_2189":{"entryPoint":8250,"id":2189,"parameterSlots":2,"returnSlots":0},"@_getDecimals_29102":{"entryPoint":7715,"id":29102,"parameterSlots":1,"returnSlots":1},"@_getPrice_29077":{"entryPoint":7941,"id":29077,"parameterSlots":1,"returnSlots":1},"@_getReserveData_29117":{"entryPoint":3923,"id":29117,"parameterSlots":1,"returnSlots":1},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_pullATokenAndWithdraw_29220":{"entryPoint":4234,"id":29220,"parameterSlots":5,"returnSlots":0},"@_sellOnParaSwap_29851":{"entryPoint":4778,"id":29851,"parameterSlots":7,"returnSlots":1},"@_swapLiquidity_30288":{"entryPoint":2982,"id":30288,"parameterSlots":10,"returnSlots":0},"@add_2216":{"entryPoint":7480,"id":2216,"parameterSlots":2,"returnSlots":1},"@div_2309":{"entryPoint":8164,"id":2309,"parameterSlots":2,"returnSlots":1},"@executeOperation_29999":{"entryPoint":901,"id":29999,"parameterSlots":6,"returnSlots":1},"@functionCallWithValue_586":{"entryPoint":8541,"id":586,"parameterSlots":4,"returnSlots":1},"@functionCall_516":{"entryPoint":8518,"id":516,"parameterSlots":3,"returnSlots":1},"@getLastTransferResult_117":{"entryPoint":7260,"id":117,"parameterSlots":1,"returnSlots":1},"@isContract_445":{"entryPoint":null,"id":445,"parameterSlots":1,"returnSlots":1},"@mul_2294":{"entryPoint":8122,"id":2294,"parameterSlots":2,"returnSlots":1},"@owner_1509":{"entryPoint":null,"id":1509,"parameterSlots":0,"returnSlots":1},"@percentMul_21119":{"entryPoint":8183,"id":21119,"parameterSlots":2,"returnSlots":1},"@renounceOwnership_1544":{"entryPoint":1255,"id":1544,"parameterSlots":0,"returnSlots":0},"@rescueTokens_29244":{"entryPoint":558,"id":29244,"parameterSlots":1,"returnSlots":0},"@safeApprove_2067":{"entryPoint":6814,"id":2067,"parameterSlots":3,"returnSlots":0},"@safeTransferFrom_106":{"entryPoint":7496,"id":106,"parameterSlots":4,"returnSlots":0},"@safeTransfer_78":{"entryPoint":2765,"id":78,"parameterSlots":3,"returnSlots":0},"@sub_2239":{"entryPoint":7464,"id":2239,"parameterSlots":2,"returnSlots":1},"@swapAndDeposit_30120":{"entryPoint":1495,"id":30120,"parameterSlots":9,"returnSlots":0},"@transferOwnership_1572":{"entryPoint":2332,"id":1572,"parameterSlots":1,"returnSlots":0},"@verifyCallResult_721":{"entryPoint":8925,"id":721,"parameterSlots":3,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":10241,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":9071,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_contract_IParaSwapAugustus":{"entryPoint":9268,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_PermitSignature":{"entryPoint":9702,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_ReserveConfigurationMap_fromMemory":{"entryPoint":10104,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":10947,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_bytes_calldata_ptr":{"entryPoint":9144,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":10543,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IERC20Detailed_$1464t_contract$_IERC20Detailed_$1464t_uint256t_uint256t_uint256t_bytes_calldata_ptrt_contract$_IParaSwapAugustus_$30951t_struct$_PermitSignature_$29019_calldata_ptr":{"entryPoint":9284,"id":null,"parameterSlots":2,"returnSlots":9},"abi_decode_tuple_t_contract$_IERC20Detailed_$1464t_uint256t_uint256t_bytes_memory_ptrt_contract$_IParaSwapAugustus_$30951t_struct$_PermitSignature_$29019_memory_ptr":{"entryPoint":9825,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_contract$_IERC20_$1442":{"entryPoint":9042,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_PermitSignature_$29019_memory_ptr":{"entryPoint":10076,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory":{"entryPoint":10252,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":9494,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint8_fromMemory":{"entryPoint":11048,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint128_fromMemory":{"entryPoint":10170,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint16_fromMemory":{"entryPoint":10223,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint40_fromMemory":{"entryPoint":10202,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":11020,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_address_t_rational_0_by_1__to_t_address_t_uint256_t_address_t_uint16__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IParaSwapAugustusRegistry_$30961__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPriceOracleGetter_$5835__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":11183,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_022eae30fcc9137c0a8a102622bef17a0e0924cb859bf7da56a882760f0b9317__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3202e1fc4f78abbce03a97de69392b3f69ebba48c41588ffb32a1c8b97349f74__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_51fc4946c16284910827fc38bc7611d60d4dd1f7d8fefa0da6f8642035c3c48b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_74fc5696336325aeb54c5d19133ed01308c8174de21fc66f38ac28668f995bc7__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8333172953304c474b0cfe8eccb09fd2b08c1198c3d73a3ed0388645fb84d24e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_85a045c7862eb0e81d59fe8dfd2ed8c824917ce215328caf39199676e5939f87__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9bfa76b9c2e298d52f58639e051d7d21997f6c435f534dfd0c2e6c351c64a39a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f253c60ca7289769121ceb7e8a55d2372f327bb2c0c90e8e3ba6b77e057d495e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f73db277b52b12832d4a33a7ef8ea973b58412dbb6a626efd61c48d6a6304661__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f920786e74a0af1b51a64ca021265d328aab062025c81f249165aca83960cff7__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_fc5915f8715e0da4bd5e6487e67e57e89850a48fc18d4e921a811a8c928ad119__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"allocate_memory":{"entryPoint":9608,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_3071":{"entryPoint":9566,"id":null,"parameterSlots":0,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":11124,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":10647,"id":null,"parameterSlots":2,"returnSlots":2},"checked_exp_t_uint256_t_uint256":{"entryPoint":10935,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":10744,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":10624,"id":null,"parameterSlots":2,"returnSlots":1},"copy_memory_to_memory":{"entryPoint":10976,"id":null,"parameterSlots":3,"returnSlots":0},"panic_error_0x11":{"entryPoint":10577,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":11077,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":9519,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_contract_IERC20":{"entryPoint":9008,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_uint8":{"entryPoint":9687,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:25223:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"67:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"154:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"163:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"166:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"156:6:201"},"nodeType":"YulFunctionCall","src":"156:12:201"},"nodeType":"YulExpressionStatement","src":"156:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"90:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"101:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"108:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"97:3:201"},"nodeType":"YulFunctionCall","src":"97:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"87:2:201"},"nodeType":"YulFunctionCall","src":"87:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"80:6:201"},"nodeType":"YulFunctionCall","src":"80:73:201"},"nodeType":"YulIf","src":"77:93:201"}]},"name":"validator_revert_contract_IERC20","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"56:5:201","type":""}],"src":"14:162:201"},{"body":{"nodeType":"YulBlock","src":"266:185:201","statements":[{"body":{"nodeType":"YulBlock","src":"312:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"321:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"324:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"314:6:201"},"nodeType":"YulFunctionCall","src":"314:12:201"},"nodeType":"YulExpressionStatement","src":"314:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"287:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"296:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"283:3:201"},"nodeType":"YulFunctionCall","src":"283:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"308:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"279:3:201"},"nodeType":"YulFunctionCall","src":"279:32:201"},"nodeType":"YulIf","src":"276:52:201"},{"nodeType":"YulVariableDeclaration","src":"337:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"363:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"350:12:201"},"nodeType":"YulFunctionCall","src":"350:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"341:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"415:5:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"382:32:201"},"nodeType":"YulFunctionCall","src":"382:39:201"},"nodeType":"YulExpressionStatement","src":"382:39:201"},{"nodeType":"YulAssignment","src":"430:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"440:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"430:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IERC20_$1442","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"232:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"243:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"255:6:201","type":""}],"src":"181:270:201"},{"body":{"nodeType":"YulBlock","src":"588:125:201","statements":[{"nodeType":"YulAssignment","src":"598:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"610:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"621:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"606:3:201"},"nodeType":"YulFunctionCall","src":"606:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"598:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"640:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"655:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"663:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"651:3:201"},"nodeType":"YulFunctionCall","src":"651:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"633:6:201"},"nodeType":"YulFunctionCall","src":"633:74:201"},"nodeType":"YulExpressionStatement","src":"633:74:201"}]},"name":"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"557:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"568:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"579:4:201","type":""}],"src":"456:257:201"},{"body":{"nodeType":"YulBlock","src":"790:275:201","statements":[{"body":{"nodeType":"YulBlock","src":"839:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"848:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"851:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"841:6:201"},"nodeType":"YulFunctionCall","src":"841:12:201"},"nodeType":"YulExpressionStatement","src":"841:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"818:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"826:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"814:3:201"},"nodeType":"YulFunctionCall","src":"814:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"833:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"810:3:201"},"nodeType":"YulFunctionCall","src":"810:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"803:6:201"},"nodeType":"YulFunctionCall","src":"803:35:201"},"nodeType":"YulIf","src":"800:55:201"},{"nodeType":"YulAssignment","src":"864:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"887:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"874:12:201"},"nodeType":"YulFunctionCall","src":"874:20:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"864:6:201"}]},{"body":{"nodeType":"YulBlock","src":"937:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"946:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"949:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"939:6:201"},"nodeType":"YulFunctionCall","src":"939:12:201"},"nodeType":"YulExpressionStatement","src":"939:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"909:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"917:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"906:2:201"},"nodeType":"YulFunctionCall","src":"906:30:201"},"nodeType":"YulIf","src":"903:50:201"},{"nodeType":"YulAssignment","src":"962:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"978:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"986:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"974:3:201"},"nodeType":"YulFunctionCall","src":"974:17:201"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"962:8:201"}]},{"body":{"nodeType":"YulBlock","src":"1043:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1052:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1055:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1045:6:201"},"nodeType":"YulFunctionCall","src":"1045:12:201"},"nodeType":"YulExpressionStatement","src":"1045:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1014:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"1022:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1010:3:201"},"nodeType":"YulFunctionCall","src":"1010:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"1031:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1006:3:201"},"nodeType":"YulFunctionCall","src":"1006:30:201"},{"name":"end","nodeType":"YulIdentifier","src":"1038:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1003:2:201"},"nodeType":"YulFunctionCall","src":"1003:39:201"},"nodeType":"YulIf","src":"1000:59:201"}]},"name":"abi_decode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"753:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"761:3:201","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"769:8:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"779:6:201","type":""}],"src":"718:347:201"},{"body":{"nodeType":"YulBlock","src":"1227:682:201","statements":[{"body":{"nodeType":"YulBlock","src":"1274:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1283:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1286:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1276:6:201"},"nodeType":"YulFunctionCall","src":"1276:12:201"},"nodeType":"YulExpressionStatement","src":"1276:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1248:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1257:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1244:3:201"},"nodeType":"YulFunctionCall","src":"1244:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1269:3:201","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1240:3:201"},"nodeType":"YulFunctionCall","src":"1240:33:201"},"nodeType":"YulIf","src":"1237:53:201"},{"nodeType":"YulVariableDeclaration","src":"1299:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1325:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1312:12:201"},"nodeType":"YulFunctionCall","src":"1312:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1303:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1377:5:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"1344:32:201"},"nodeType":"YulFunctionCall","src":"1344:39:201"},"nodeType":"YulExpressionStatement","src":"1344:39:201"},{"nodeType":"YulAssignment","src":"1392:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1402:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1392:6:201"}]},{"nodeType":"YulAssignment","src":"1416:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1443:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1454:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1439:3:201"},"nodeType":"YulFunctionCall","src":"1439:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1426:12:201"},"nodeType":"YulFunctionCall","src":"1426:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1416:6:201"}]},{"nodeType":"YulAssignment","src":"1467:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1494:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1505:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1490:3:201"},"nodeType":"YulFunctionCall","src":"1490:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1477:12:201"},"nodeType":"YulFunctionCall","src":"1477:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1467:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1518:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1550:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1561:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1546:3:201"},"nodeType":"YulFunctionCall","src":"1546:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1533:12:201"},"nodeType":"YulFunctionCall","src":"1533:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"1522:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1607:7:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"1574:32:201"},"nodeType":"YulFunctionCall","src":"1574:41:201"},"nodeType":"YulExpressionStatement","src":"1574:41:201"},{"nodeType":"YulAssignment","src":"1624:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"1634:7:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1624:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1650:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1681:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1692:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1677:3:201"},"nodeType":"YulFunctionCall","src":"1677:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1664:12:201"},"nodeType":"YulFunctionCall","src":"1664:33:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1654:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1740:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1749:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1752:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1742:6:201"},"nodeType":"YulFunctionCall","src":"1742:12:201"},"nodeType":"YulExpressionStatement","src":"1742:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1712:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1720:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1709:2:201"},"nodeType":"YulFunctionCall","src":"1709:30:201"},"nodeType":"YulIf","src":"1706:50:201"},{"nodeType":"YulVariableDeclaration","src":"1765:84:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1821:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"1832:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1817:3:201"},"nodeType":"YulFunctionCall","src":"1817:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1841:7:201"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"1791:25:201"},"nodeType":"YulFunctionCall","src":"1791:58:201"},"variables":[{"name":"value4_1","nodeType":"YulTypedName","src":"1769:8:201","type":""},{"name":"value5_1","nodeType":"YulTypedName","src":"1779:8:201","type":""}]},{"nodeType":"YulAssignment","src":"1858:18:201","value":{"name":"value4_1","nodeType":"YulIdentifier","src":"1868:8:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"1858:6:201"}]},{"nodeType":"YulAssignment","src":"1885:18:201","value":{"name":"value5_1","nodeType":"YulIdentifier","src":"1895:8:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"1885:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1153:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1164:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1176:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1184:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1192:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1200:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1208:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"1216:6:201","type":""}],"src":"1070:839:201"},{"body":{"nodeType":"YulBlock","src":"2009:92:201","statements":[{"nodeType":"YulAssignment","src":"2019:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2031:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2042:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2027:3:201"},"nodeType":"YulFunctionCall","src":"2027:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2019:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2061:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2086:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2079:6:201"},"nodeType":"YulFunctionCall","src":"2079:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2072:6:201"},"nodeType":"YulFunctionCall","src":"2072:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2054:6:201"},"nodeType":"YulFunctionCall","src":"2054:41:201"},"nodeType":"YulExpressionStatement","src":"2054:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1978:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1989:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2000:4:201","type":""}],"src":"1914:187:201"},{"body":{"nodeType":"YulBlock","src":"2207:76:201","statements":[{"nodeType":"YulAssignment","src":"2217:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2229:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2240:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2225:3:201"},"nodeType":"YulFunctionCall","src":"2225:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2217:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2259:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"2270:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2252:6:201"},"nodeType":"YulFunctionCall","src":"2252:25:201"},"nodeType":"YulExpressionStatement","src":"2252:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2176:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2187:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2198:4:201","type":""}],"src":"2106:177:201"},{"body":{"nodeType":"YulBlock","src":"2416:125:201","statements":[{"nodeType":"YulAssignment","src":"2426:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2438:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2449:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2434:3:201"},"nodeType":"YulFunctionCall","src":"2434:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2426:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2468:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2483:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2491:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2479:3:201"},"nodeType":"YulFunctionCall","src":"2479:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2461:6:201"},"nodeType":"YulFunctionCall","src":"2461:74:201"},"nodeType":"YulExpressionStatement","src":"2461:74:201"}]},"name":"abi_encode_tuple_t_contract$_IPriceOracleGetter_$5835__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2385:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2396:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2407:4:201","type":""}],"src":"2288:253:201"},{"body":{"nodeType":"YulBlock","src":"2682:125:201","statements":[{"nodeType":"YulAssignment","src":"2692:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2704:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2715:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2700:3:201"},"nodeType":"YulFunctionCall","src":"2700:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2692:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2734:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2749:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2757:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2745:3:201"},"nodeType":"YulFunctionCall","src":"2745:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2727:6:201"},"nodeType":"YulFunctionCall","src":"2727:74:201"},"nodeType":"YulExpressionStatement","src":"2727:74:201"}]},"name":"abi_encode_tuple_t_contract$_IParaSwapAugustusRegistry_$30961__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2651:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2662:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2673:4:201","type":""}],"src":"2546:261:201"},{"body":{"nodeType":"YulBlock","src":"2927:125:201","statements":[{"nodeType":"YulAssignment","src":"2937:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2949:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2960:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2945:3:201"},"nodeType":"YulFunctionCall","src":"2945:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2937:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2979:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2994:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3002:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2990:3:201"},"nodeType":"YulFunctionCall","src":"2990:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2972:6:201"},"nodeType":"YulFunctionCall","src":"2972:74:201"},"nodeType":"YulExpressionStatement","src":"2972:74:201"}]},"name":"abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2896:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2907:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2918:4:201","type":""}],"src":"2812:240:201"},{"body":{"nodeType":"YulBlock","src":"3158:125:201","statements":[{"nodeType":"YulAssignment","src":"3168:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3180:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3191:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3176:3:201"},"nodeType":"YulFunctionCall","src":"3176:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3168:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3210:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3225:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3233:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3221:3:201"},"nodeType":"YulFunctionCall","src":"3221:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3203:6:201"},"nodeType":"YulFunctionCall","src":"3203:74:201"},"nodeType":"YulExpressionStatement","src":"3203:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3127:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3138:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3149:4:201","type":""}],"src":"3057:226:201"},{"body":{"nodeType":"YulBlock","src":"3356:93:201","statements":[{"nodeType":"YulAssignment","src":"3366:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3388:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3375:12:201"},"nodeType":"YulFunctionCall","src":"3375:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"3366:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3437:5:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"3404:32:201"},"nodeType":"YulFunctionCall","src":"3404:39:201"},"nodeType":"YulExpressionStatement","src":"3404:39:201"}]},"name":"abi_decode_contract_IParaSwapAugustus","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"3335:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"3346:5:201","type":""}],"src":"3288:161:201"},{"body":{"nodeType":"YulBlock","src":"3771:1040:201","statements":[{"nodeType":"YulVariableDeclaration","src":"3781:33:201","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3795:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3804:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3791:3:201"},"nodeType":"YulFunctionCall","src":"3791:23:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3785:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3839:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3848:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3851:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3841:6:201"},"nodeType":"YulFunctionCall","src":"3841:12:201"},"nodeType":"YulExpressionStatement","src":"3841:12:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3830:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"3834:3:201","type":"","value":"384"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3826:3:201"},"nodeType":"YulFunctionCall","src":"3826:12:201"},"nodeType":"YulIf","src":"3823:32:201"},{"nodeType":"YulVariableDeclaration","src":"3864:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3890:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3877:12:201"},"nodeType":"YulFunctionCall","src":"3877:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3868:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3942:5:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"3909:32:201"},"nodeType":"YulFunctionCall","src":"3909:39:201"},"nodeType":"YulExpressionStatement","src":"3909:39:201"},{"nodeType":"YulAssignment","src":"3957:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3967:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3957:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3981:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4013:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4024:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4009:3:201"},"nodeType":"YulFunctionCall","src":"4009:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3996:12:201"},"nodeType":"YulFunctionCall","src":"3996:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"3985:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"4070:7:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"4037:32:201"},"nodeType":"YulFunctionCall","src":"4037:41:201"},"nodeType":"YulExpressionStatement","src":"4037:41:201"},{"nodeType":"YulAssignment","src":"4087:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"4097:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4087:6:201"}]},{"nodeType":"YulAssignment","src":"4113:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4140:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4151:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4136:3:201"},"nodeType":"YulFunctionCall","src":"4136:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4123:12:201"},"nodeType":"YulFunctionCall","src":"4123:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4113:6:201"}]},{"nodeType":"YulAssignment","src":"4164:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4191:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4202:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4187:3:201"},"nodeType":"YulFunctionCall","src":"4187:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4174:12:201"},"nodeType":"YulFunctionCall","src":"4174:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"4164:6:201"}]},{"nodeType":"YulAssignment","src":"4215:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4242:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4253:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4238:3:201"},"nodeType":"YulFunctionCall","src":"4238:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4225:12:201"},"nodeType":"YulFunctionCall","src":"4225:33:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"4215:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"4267:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4298:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4309:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4294:3:201"},"nodeType":"YulFunctionCall","src":"4294:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4281:12:201"},"nodeType":"YulFunctionCall","src":"4281:33:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"4271:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4357:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4366:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4369:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4359:6:201"},"nodeType":"YulFunctionCall","src":"4359:12:201"},"nodeType":"YulExpressionStatement","src":"4359:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4329:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4337:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4326:2:201"},"nodeType":"YulFunctionCall","src":"4326:30:201"},"nodeType":"YulIf","src":"4323:50:201"},{"nodeType":"YulVariableDeclaration","src":"4382:84:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4438:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"4449:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4434:3:201"},"nodeType":"YulFunctionCall","src":"4434:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4458:7:201"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"4408:25:201"},"nodeType":"YulFunctionCall","src":"4408:58:201"},"variables":[{"name":"value5_1","nodeType":"YulTypedName","src":"4386:8:201","type":""},{"name":"value6_1","nodeType":"YulTypedName","src":"4396:8:201","type":""}]},{"nodeType":"YulAssignment","src":"4475:18:201","value":{"name":"value5_1","nodeType":"YulIdentifier","src":"4485:8:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"4475:6:201"}]},{"nodeType":"YulAssignment","src":"4502:18:201","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"4512:8:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"4502:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"4529:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4561:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4572:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4557:3:201"},"nodeType":"YulFunctionCall","src":"4557:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4544:12:201"},"nodeType":"YulFunctionCall","src":"4544:33:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"4533:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"4619:7:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"4586:32:201"},"nodeType":"YulFunctionCall","src":"4586:41:201"},"nodeType":"YulExpressionStatement","src":"4586:41:201"},{"nodeType":"YulAssignment","src":"4636:17:201","value":{"name":"value_2","nodeType":"YulIdentifier","src":"4646:7:201"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"4636:6:201"}]},{"body":{"nodeType":"YulBlock","src":"4751:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4760:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4763:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4753:6:201"},"nodeType":"YulFunctionCall","src":"4753:12:201"},"nodeType":"YulExpressionStatement","src":"4753:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"4673:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"4677:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4669:3:201"},"nodeType":"YulFunctionCall","src":"4669:75:201"},{"kind":"number","nodeType":"YulLiteral","src":"4746:3:201","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4665:3:201"},"nodeType":"YulFunctionCall","src":"4665:85:201"},"nodeType":"YulIf","src":"4662:105:201"},{"nodeType":"YulAssignment","src":"4776:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4790:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4801:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4786:3:201"},"nodeType":"YulFunctionCall","src":"4786:19:201"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"4776:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IERC20Detailed_$1464t_contract$_IERC20Detailed_$1464t_uint256t_uint256t_uint256t_bytes_calldata_ptrt_contract$_IParaSwapAugustus_$30951t_struct$_PermitSignature_$29019_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3673:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3684:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3696:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3704:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3712:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3720:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3728:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"3736:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"3744:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"3752:6:201","type":""},{"name":"value8","nodeType":"YulTypedName","src":"3760:6:201","type":""}],"src":"3454:1357:201"},{"body":{"nodeType":"YulBlock","src":"4886:185:201","statements":[{"body":{"nodeType":"YulBlock","src":"4932:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4941:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4944:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4934:6:201"},"nodeType":"YulFunctionCall","src":"4934:12:201"},"nodeType":"YulExpressionStatement","src":"4934:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4907:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4916:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4903:3:201"},"nodeType":"YulFunctionCall","src":"4903:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4928:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4899:3:201"},"nodeType":"YulFunctionCall","src":"4899:32:201"},"nodeType":"YulIf","src":"4896:52:201"},{"nodeType":"YulVariableDeclaration","src":"4957:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4983:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4970:12:201"},"nodeType":"YulFunctionCall","src":"4970:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4961:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5035:5:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"5002:32:201"},"nodeType":"YulFunctionCall","src":"5002:39:201"},"nodeType":"YulExpressionStatement","src":"5002:39:201"},{"nodeType":"YulAssignment","src":"5050:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"5060:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5050:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4852:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4863:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4875:6:201","type":""}],"src":"4816:255:201"},{"body":{"nodeType":"YulBlock","src":"5250:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5267:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5278:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5260:6:201"},"nodeType":"YulFunctionCall","src":"5260:21:201"},"nodeType":"YulExpressionStatement","src":"5260:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5301:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5312:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5297:3:201"},"nodeType":"YulFunctionCall","src":"5297:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"5317:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5290:6:201"},"nodeType":"YulFunctionCall","src":"5290:30:201"},"nodeType":"YulExpressionStatement","src":"5290:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5340:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5351:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5336:3:201"},"nodeType":"YulFunctionCall","src":"5336:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"5356:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5329:6:201"},"nodeType":"YulFunctionCall","src":"5329:62:201"},"nodeType":"YulExpressionStatement","src":"5329:62:201"},{"nodeType":"YulAssignment","src":"5400:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5412:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5423:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5408:3:201"},"nodeType":"YulFunctionCall","src":"5408:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5400:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5227:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5241:4:201","type":""}],"src":"5076:356:201"},{"body":{"nodeType":"YulBlock","src":"5518:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"5564:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5573:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5576:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5566:6:201"},"nodeType":"YulFunctionCall","src":"5566:12:201"},"nodeType":"YulExpressionStatement","src":"5566:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5539:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"5548:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5535:3:201"},"nodeType":"YulFunctionCall","src":"5535:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"5560:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5531:3:201"},"nodeType":"YulFunctionCall","src":"5531:32:201"},"nodeType":"YulIf","src":"5528:52:201"},{"nodeType":"YulAssignment","src":"5589:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5605:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5599:5:201"},"nodeType":"YulFunctionCall","src":"5599:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5589:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5484:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5495:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5507:6:201","type":""}],"src":"5437:184:201"},{"body":{"nodeType":"YulBlock","src":"5800:181:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5817:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5828:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5810:6:201"},"nodeType":"YulFunctionCall","src":"5810:21:201"},"nodeType":"YulExpressionStatement","src":"5810:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5851:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5862:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5847:3:201"},"nodeType":"YulFunctionCall","src":"5847:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"5867:2:201","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5840:6:201"},"nodeType":"YulFunctionCall","src":"5840:30:201"},"nodeType":"YulExpressionStatement","src":"5840:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5890:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5901:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5886:3:201"},"nodeType":"YulFunctionCall","src":"5886:18:201"},{"hexValue":"5265656e7472616e637947756172643a207265656e7472616e742063616c6c","kind":"string","nodeType":"YulLiteral","src":"5906:33:201","type":"","value":"ReentrancyGuard: reentrant call"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5879:6:201"},"nodeType":"YulFunctionCall","src":"5879:61:201"},"nodeType":"YulExpressionStatement","src":"5879:61:201"},{"nodeType":"YulAssignment","src":"5949:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5961:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5972:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5957:3:201"},"nodeType":"YulFunctionCall","src":"5957:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5949:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5777:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5791:4:201","type":""}],"src":"5626:355:201"},{"body":{"nodeType":"YulBlock","src":"6160:169:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6177:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6188:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6170:6:201"},"nodeType":"YulFunctionCall","src":"6170:21:201"},"nodeType":"YulExpressionStatement","src":"6170:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6211:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6222:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6207:3:201"},"nodeType":"YulFunctionCall","src":"6207:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"6227:2:201","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6200:6:201"},"nodeType":"YulFunctionCall","src":"6200:30:201"},"nodeType":"YulExpressionStatement","src":"6200:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6250:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6261:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6246:3:201"},"nodeType":"YulFunctionCall","src":"6246:18:201"},{"hexValue":"43414c4c45525f4d5553545f42455f504f4f4c","kind":"string","nodeType":"YulLiteral","src":"6266:21:201","type":"","value":"CALLER_MUST_BE_POOL"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6239:6:201"},"nodeType":"YulFunctionCall","src":"6239:49:201"},"nodeType":"YulExpressionStatement","src":"6239:49:201"},{"nodeType":"YulAssignment","src":"6297:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6309:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6320:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6305:3:201"},"nodeType":"YulFunctionCall","src":"6305:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6297:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_f253c60ca7289769121ceb7e8a55d2372f327bb2c0c90e8e3ba6b77e057d495e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6137:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6151:4:201","type":""}],"src":"5986:343:201"},{"body":{"nodeType":"YulBlock","src":"6366:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6383:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6386:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6376:6:201"},"nodeType":"YulFunctionCall","src":"6376:88:201"},"nodeType":"YulExpressionStatement","src":"6376:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6480:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6483:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6473:6:201"},"nodeType":"YulFunctionCall","src":"6473:15:201"},"nodeType":"YulExpressionStatement","src":"6473:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6504:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6507:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6497:6:201"},"nodeType":"YulFunctionCall","src":"6497:15:201"},"nodeType":"YulExpressionStatement","src":"6497:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"6334:184:201"},{"body":{"nodeType":"YulBlock","src":"6569:206:201","statements":[{"nodeType":"YulAssignment","src":"6579:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6595:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6589:5:201"},"nodeType":"YulFunctionCall","src":"6589:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6579:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"6607:34:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6629:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"6637:3:201","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6625:3:201"},"nodeType":"YulFunctionCall","src":"6625:16:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"6611:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"6716:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"6718:16:201"},"nodeType":"YulFunctionCall","src":"6718:18:201"},"nodeType":"YulExpressionStatement","src":"6718:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6659:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"6671:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6656:2:201"},"nodeType":"YulFunctionCall","src":"6656:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6695:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"6707:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6692:2:201"},"nodeType":"YulFunctionCall","src":"6692:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"6653:2:201"},"nodeType":"YulFunctionCall","src":"6653:62:201"},"nodeType":"YulIf","src":"6650:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6754:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6758:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6747:6:201"},"nodeType":"YulFunctionCall","src":"6747:22:201"},"nodeType":"YulExpressionStatement","src":"6747:22:201"}]},"name":"allocate_memory_3071","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"6558:6:201","type":""}],"src":"6523:252:201"},{"body":{"nodeType":"YulBlock","src":"6825:289:201","statements":[{"nodeType":"YulAssignment","src":"6835:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6851:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6845:5:201"},"nodeType":"YulFunctionCall","src":"6845:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6835:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"6863:117:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6885:6:201"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"6901:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"6907:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6897:3:201"},"nodeType":"YulFunctionCall","src":"6897:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"6912:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6893:3:201"},"nodeType":"YulFunctionCall","src":"6893:86:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6881:3:201"},"nodeType":"YulFunctionCall","src":"6881:99:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"6867:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"7055:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"7057:16:201"},"nodeType":"YulFunctionCall","src":"7057:18:201"},"nodeType":"YulExpressionStatement","src":"7057:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6998:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"7010:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6995:2:201"},"nodeType":"YulFunctionCall","src":"6995:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7034:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"7046:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7031:2:201"},"nodeType":"YulFunctionCall","src":"7031:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"6992:2:201"},"nodeType":"YulFunctionCall","src":"6992:62:201"},"nodeType":"YulIf","src":"6989:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7093:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7097:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7086:6:201"},"nodeType":"YulFunctionCall","src":"7086:22:201"},"nodeType":"YulExpressionStatement","src":"7086:22:201"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"6805:4:201","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"6814:6:201","type":""}],"src":"6780:334:201"},{"body":{"nodeType":"YulBlock","src":"7162:71:201","statements":[{"body":{"nodeType":"YulBlock","src":"7211:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7220:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7223:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7213:6:201"},"nodeType":"YulFunctionCall","src":"7213:12:201"},"nodeType":"YulExpressionStatement","src":"7213:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7185:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7196:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"7203:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7192:3:201"},"nodeType":"YulFunctionCall","src":"7192:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"7182:2:201"},"nodeType":"YulFunctionCall","src":"7182:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7175:6:201"},"nodeType":"YulFunctionCall","src":"7175:35:201"},"nodeType":"YulIf","src":"7172:55:201"}]},"name":"validator_revert_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"7151:5:201","type":""}],"src":"7119:114:201"},{"body":{"nodeType":"YulBlock","src":"7310:679:201","statements":[{"body":{"nodeType":"YulBlock","src":"7354:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7363:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7366:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7356:6:201"},"nodeType":"YulFunctionCall","src":"7356:12:201"},"nodeType":"YulExpressionStatement","src":"7356:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"7331:3:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"7336:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7327:3:201"},"nodeType":"YulFunctionCall","src":"7327:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"7348:4:201","type":"","value":"0xa0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7323:3:201"},"nodeType":"YulFunctionCall","src":"7323:30:201"},"nodeType":"YulIf","src":"7320:50:201"},{"nodeType":"YulVariableDeclaration","src":"7379:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7399:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7393:5:201"},"nodeType":"YulFunctionCall","src":"7393:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"7383:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7411:35:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7433:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7441:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7429:3:201"},"nodeType":"YulFunctionCall","src":"7429:17:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"7415:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"7521:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"7523:16:201"},"nodeType":"YulFunctionCall","src":"7523:18:201"},"nodeType":"YulExpressionStatement","src":"7523:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7464:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"7476:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7461:2:201"},"nodeType":"YulFunctionCall","src":"7461:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7500:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"7512:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7497:2:201"},"nodeType":"YulFunctionCall","src":"7497:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"7458:2:201"},"nodeType":"YulFunctionCall","src":"7458:62:201"},"nodeType":"YulIf","src":"7455:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7559:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7563:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7552:6:201"},"nodeType":"YulFunctionCall","src":"7552:22:201"},"nodeType":"YulExpressionStatement","src":"7552:22:201"},{"nodeType":"YulAssignment","src":"7583:15:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"7592:6:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"7583:5:201"}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7614:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7635:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7622:12:201"},"nodeType":"YulFunctionCall","src":"7622:23:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7607:6:201"},"nodeType":"YulFunctionCall","src":"7607:39:201"},"nodeType":"YulExpressionStatement","src":"7607:39:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7666:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7674:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7662:3:201"},"nodeType":"YulFunctionCall","src":"7662:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7696:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7707:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7692:3:201"},"nodeType":"YulFunctionCall","src":"7692:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7679:12:201"},"nodeType":"YulFunctionCall","src":"7679:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7655:6:201"},"nodeType":"YulFunctionCall","src":"7655:57:201"},"nodeType":"YulExpressionStatement","src":"7655:57:201"},{"nodeType":"YulVariableDeclaration","src":"7721:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7753:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7764:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7749:3:201"},"nodeType":"YulFunctionCall","src":"7749:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7736:12:201"},"nodeType":"YulFunctionCall","src":"7736:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7725:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7800:7:201"}],"functionName":{"name":"validator_revert_uint8","nodeType":"YulIdentifier","src":"7777:22:201"},"nodeType":"YulFunctionCall","src":"7777:31:201"},"nodeType":"YulExpressionStatement","src":"7777:31:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7828:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7836:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7824:3:201"},"nodeType":"YulFunctionCall","src":"7824:15:201"},{"name":"value_1","nodeType":"YulIdentifier","src":"7841:7:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7817:6:201"},"nodeType":"YulFunctionCall","src":"7817:32:201"},"nodeType":"YulExpressionStatement","src":"7817:32:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7869:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7877:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7865:3:201"},"nodeType":"YulFunctionCall","src":"7865:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7899:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7910:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7895:3:201"},"nodeType":"YulFunctionCall","src":"7895:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7882:12:201"},"nodeType":"YulFunctionCall","src":"7882:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7858:6:201"},"nodeType":"YulFunctionCall","src":"7858:57:201"},"nodeType":"YulExpressionStatement","src":"7858:57:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7935:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7943:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7931:3:201"},"nodeType":"YulFunctionCall","src":"7931:16:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7966:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7977:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7962:3:201"},"nodeType":"YulFunctionCall","src":"7962:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7949:12:201"},"nodeType":"YulFunctionCall","src":"7949:33:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7924:6:201"},"nodeType":"YulFunctionCall","src":"7924:59:201"},"nodeType":"YulExpressionStatement","src":"7924:59:201"}]},"name":"abi_decode_struct_PermitSignature","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7281:9:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"7292:3:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"7300:5:201","type":""}],"src":"7238:751:201"},{"body":{"nodeType":"YulBlock","src":"8242:1131:201","statements":[{"body":{"nodeType":"YulBlock","src":"8289:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8298:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8301:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8291:6:201"},"nodeType":"YulFunctionCall","src":"8291:12:201"},"nodeType":"YulExpressionStatement","src":"8291:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"8263:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"8272:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8259:3:201"},"nodeType":"YulFunctionCall","src":"8259:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"8284:3:201","type":"","value":"320"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8255:3:201"},"nodeType":"YulFunctionCall","src":"8255:33:201"},"nodeType":"YulIf","src":"8252:53:201"},{"nodeType":"YulVariableDeclaration","src":"8314:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8340:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8327:12:201"},"nodeType":"YulFunctionCall","src":"8327:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"8318:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8392:5:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"8359:32:201"},"nodeType":"YulFunctionCall","src":"8359:39:201"},"nodeType":"YulExpressionStatement","src":"8359:39:201"},{"nodeType":"YulAssignment","src":"8407:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"8417:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8407:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"8431:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8441:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8435:2:201","type":""}]},{"nodeType":"YulAssignment","src":"8452:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8479:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"8490:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8475:3:201"},"nodeType":"YulFunctionCall","src":"8475:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8462:12:201"},"nodeType":"YulFunctionCall","src":"8462:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"8452:6:201"}]},{"nodeType":"YulAssignment","src":"8503:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8530:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8541:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8526:3:201"},"nodeType":"YulFunctionCall","src":"8526:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8513:12:201"},"nodeType":"YulFunctionCall","src":"8513:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"8503:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"8554:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8585:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8596:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8581:3:201"},"nodeType":"YulFunctionCall","src":"8581:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8568:12:201"},"nodeType":"YulFunctionCall","src":"8568:32:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"8558:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8609:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8619:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"8613:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"8664:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8673:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8676:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8666:6:201"},"nodeType":"YulFunctionCall","src":"8666:12:201"},"nodeType":"YulExpressionStatement","src":"8666:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"8652:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"8660:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8649:2:201"},"nodeType":"YulFunctionCall","src":"8649:14:201"},"nodeType":"YulIf","src":"8646:34:201"},{"nodeType":"YulVariableDeclaration","src":"8689:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8703:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"8714:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8699:3:201"},"nodeType":"YulFunctionCall","src":"8699:22:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"8693:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"8769:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8778:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8781:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8771:6:201"},"nodeType":"YulFunctionCall","src":"8771:12:201"},"nodeType":"YulExpressionStatement","src":"8771:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"8748:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"8752:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8744:3:201"},"nodeType":"YulFunctionCall","src":"8744:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"8759:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8740:3:201"},"nodeType":"YulFunctionCall","src":"8740:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"8733:6:201"},"nodeType":"YulFunctionCall","src":"8733:35:201"},"nodeType":"YulIf","src":"8730:55:201"},{"nodeType":"YulVariableDeclaration","src":"8794:26:201","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"8817:2:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8804:12:201"},"nodeType":"YulFunctionCall","src":"8804:16:201"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"8798:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"8843:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"8845:16:201"},"nodeType":"YulFunctionCall","src":"8845:18:201"},"nodeType":"YulExpressionStatement","src":"8845:18:201"}]},"condition":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"8835:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"8839:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8832:2:201"},"nodeType":"YulFunctionCall","src":"8832:10:201"},"nodeType":"YulIf","src":"8829:36:201"},{"nodeType":"YulVariableDeclaration","src":"8874:125:201","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"8915:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"8919:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8911:3:201"},"nodeType":"YulFunctionCall","src":"8911:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"8926:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8907:3:201"},"nodeType":"YulFunctionCall","src":"8907:86:201"},{"name":"_1","nodeType":"YulIdentifier","src":"8995:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8903:3:201"},"nodeType":"YulFunctionCall","src":"8903:95:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"8887:15:201"},"nodeType":"YulFunctionCall","src":"8887:112:201"},"variables":[{"name":"array","nodeType":"YulTypedName","src":"8878:5:201","type":""}]},{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"9015:5:201"},{"name":"_4","nodeType":"YulIdentifier","src":"9022:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9008:6:201"},"nodeType":"YulFunctionCall","src":"9008:17:201"},"nodeType":"YulExpressionStatement","src":"9008:17:201"},{"body":{"nodeType":"YulBlock","src":"9071:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9080:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9083:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9073:6:201"},"nodeType":"YulFunctionCall","src":"9073:12:201"},"nodeType":"YulExpressionStatement","src":"9073:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"9048:2:201"},{"name":"_4","nodeType":"YulIdentifier","src":"9052:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9044:3:201"},"nodeType":"YulFunctionCall","src":"9044:11:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9057:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9040:3:201"},"nodeType":"YulFunctionCall","src":"9040:20:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"9062:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9037:2:201"},"nodeType":"YulFunctionCall","src":"9037:33:201"},"nodeType":"YulIf","src":"9034:53:201"},{"expression":{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"9113:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9120:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9109:3:201"},"nodeType":"YulFunctionCall","src":"9109:14:201"},{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"9129:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9133:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9125:3:201"},"nodeType":"YulFunctionCall","src":"9125:11:201"},{"name":"_4","nodeType":"YulIdentifier","src":"9138:2:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"9096:12:201"},"nodeType":"YulFunctionCall","src":"9096:45:201"},"nodeType":"YulExpressionStatement","src":"9096:45:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"9165:5:201"},{"name":"_4","nodeType":"YulIdentifier","src":"9172:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9161:3:201"},"nodeType":"YulFunctionCall","src":"9161:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9177:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9157:3:201"},"nodeType":"YulFunctionCall","src":"9157:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"9182:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9150:6:201"},"nodeType":"YulFunctionCall","src":"9150:34:201"},"nodeType":"YulExpressionStatement","src":"9150:34:201"},{"nodeType":"YulAssignment","src":"9193:15:201","value":{"name":"array","nodeType":"YulIdentifier","src":"9203:5:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"9193:6:201"}]},{"nodeType":"YulAssignment","src":"9217:68:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9269:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9280:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9265:3:201"},"nodeType":"YulFunctionCall","src":"9265:19:201"}],"functionName":{"name":"abi_decode_contract_IParaSwapAugustus","nodeType":"YulIdentifier","src":"9227:37:201"},"nodeType":"YulFunctionCall","src":"9227:58:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"9217:6:201"}]},{"nodeType":"YulAssignment","src":"9294:73:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9342:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9353:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9338:3:201"},"nodeType":"YulFunctionCall","src":"9338:19:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"9359:7:201"}],"functionName":{"name":"abi_decode_struct_PermitSignature","nodeType":"YulIdentifier","src":"9304:33:201"},"nodeType":"YulFunctionCall","src":"9304:63:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"9294:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IERC20Detailed_$1464t_uint256t_uint256t_bytes_memory_ptrt_contract$_IParaSwapAugustus_$30951t_struct$_PermitSignature_$29019_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8168:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"8179:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"8191:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8199:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8207:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"8215:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"8223:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"8231:6:201","type":""}],"src":"7994:1379:201"},{"body":{"nodeType":"YulBlock","src":"9552:177:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9569:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9580:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9562:6:201"},"nodeType":"YulFunctionCall","src":"9562:21:201"},"nodeType":"YulExpressionStatement","src":"9562:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9603:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9614:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9599:3:201"},"nodeType":"YulFunctionCall","src":"9599:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"9619:2:201","type":"","value":"27"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9592:6:201"},"nodeType":"YulFunctionCall","src":"9592:30:201"},"nodeType":"YulExpressionStatement","src":"9592:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9642:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9653:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9638:3:201"},"nodeType":"YulFunctionCall","src":"9638:18:201"},{"hexValue":"494e53554646494349454e545f414d4f554e545f544f5f53574150","kind":"string","nodeType":"YulLiteral","src":"9658:29:201","type":"","value":"INSUFFICIENT_AMOUNT_TO_SWAP"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9631:6:201"},"nodeType":"YulFunctionCall","src":"9631:57:201"},"nodeType":"YulExpressionStatement","src":"9631:57:201"},{"nodeType":"YulAssignment","src":"9697:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9709:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9720:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9705:3:201"},"nodeType":"YulFunctionCall","src":"9705:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9697:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_f73db277b52b12832d4a33a7ef8ea973b58412dbb6a626efd61c48d6a6304661__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9529:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9543:4:201","type":""}],"src":"9378:351:201"},{"body":{"nodeType":"YulBlock","src":"9838:141:201","statements":[{"body":{"nodeType":"YulBlock","src":"9885:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9894:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9897:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9887:6:201"},"nodeType":"YulFunctionCall","src":"9887:12:201"},"nodeType":"YulExpressionStatement","src":"9887:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9859:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"9868:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9855:3:201"},"nodeType":"YulFunctionCall","src":"9855:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"9880:3:201","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9851:3:201"},"nodeType":"YulFunctionCall","src":"9851:33:201"},"nodeType":"YulIf","src":"9848:53:201"},{"nodeType":"YulAssignment","src":"9910:63:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9954:9:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"9965:7:201"}],"functionName":{"name":"abi_decode_struct_PermitSignature","nodeType":"YulIdentifier","src":"9920:33:201"},"nodeType":"YulFunctionCall","src":"9920:53:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9910:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_PermitSignature_$29019_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9804:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9815:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9827:6:201","type":""}],"src":"9734:245:201"},{"body":{"nodeType":"YulBlock","src":"10176:298:201","statements":[{"nodeType":"YulAssignment","src":"10186:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10198:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10209:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10194:3:201"},"nodeType":"YulFunctionCall","src":"10194:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10186:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"10222:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10232:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10226:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10290:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10305:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10313:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10301:3:201"},"nodeType":"YulFunctionCall","src":"10301:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10283:6:201"},"nodeType":"YulFunctionCall","src":"10283:34:201"},"nodeType":"YulExpressionStatement","src":"10283:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10337:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10348:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10333:3:201"},"nodeType":"YulFunctionCall","src":"10333:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"10353:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10326:6:201"},"nodeType":"YulFunctionCall","src":"10326:34:201"},"nodeType":"YulExpressionStatement","src":"10326:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10380:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10391:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10376:3:201"},"nodeType":"YulFunctionCall","src":"10376:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"10400:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10408:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10396:3:201"},"nodeType":"YulFunctionCall","src":"10396:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10369:6:201"},"nodeType":"YulFunctionCall","src":"10369:43:201"},"nodeType":"YulExpressionStatement","src":"10369:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10432:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10443:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10428:3:201"},"nodeType":"YulFunctionCall","src":"10428:18:201"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"10452:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10460:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10448:3:201"},"nodeType":"YulFunctionCall","src":"10448:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10421:6:201"},"nodeType":"YulFunctionCall","src":"10421:47:201"},"nodeType":"YulExpressionStatement","src":"10421:47:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_address_t_rational_0_by_1__to_t_address_t_uint256_t_address_t_uint16__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10121:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"10132:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10140:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10148:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10156:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10167:4:201","type":""}],"src":"9984:490:201"},{"body":{"nodeType":"YulBlock","src":"10653:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10670:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10681:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10663:6:201"},"nodeType":"YulFunctionCall","src":"10663:21:201"},"nodeType":"YulExpressionStatement","src":"10663:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10704:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10715:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10700:3:201"},"nodeType":"YulFunctionCall","src":"10700:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"10720:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10693:6:201"},"nodeType":"YulFunctionCall","src":"10693:30:201"},"nodeType":"YulExpressionStatement","src":"10693:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10743:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10754:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10739:3:201"},"nodeType":"YulFunctionCall","src":"10739:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"10759:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10732:6:201"},"nodeType":"YulFunctionCall","src":"10732:62:201"},"nodeType":"YulExpressionStatement","src":"10732:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10814:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10825:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10810:3:201"},"nodeType":"YulFunctionCall","src":"10810:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"10830:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10803:6:201"},"nodeType":"YulFunctionCall","src":"10803:36:201"},"nodeType":"YulExpressionStatement","src":"10803:36:201"},{"nodeType":"YulAssignment","src":"10848:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10860:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10871:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10856:3:201"},"nodeType":"YulFunctionCall","src":"10856:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10848:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10630:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10644:4:201","type":""}],"src":"10479:402:201"},{"body":{"nodeType":"YulBlock","src":"11060:171:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11077:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11088:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11070:6:201"},"nodeType":"YulFunctionCall","src":"11070:21:201"},"nodeType":"YulExpressionStatement","src":"11070:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11111:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11122:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11107:3:201"},"nodeType":"YulFunctionCall","src":"11107:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"11127:2:201","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11100:6:201"},"nodeType":"YulFunctionCall","src":"11100:30:201"},"nodeType":"YulExpressionStatement","src":"11100:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11150:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11161:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11146:3:201"},"nodeType":"YulFunctionCall","src":"11146:18:201"},{"hexValue":"475076323a206661696c6564207472616e73666572","kind":"string","nodeType":"YulLiteral","src":"11166:23:201","type":"","value":"GPv2: failed transfer"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11139:6:201"},"nodeType":"YulFunctionCall","src":"11139:51:201"},"nodeType":"YulExpressionStatement","src":"11139:51:201"},{"nodeType":"YulAssignment","src":"11199:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11211:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11222:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11207:3:201"},"nodeType":"YulFunctionCall","src":"11207:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11199:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11037:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11051:4:201","type":""}],"src":"10886:345:201"},{"body":{"nodeType":"YulBlock","src":"11410:177:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11427:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11438:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11420:6:201"},"nodeType":"YulFunctionCall","src":"11420:21:201"},"nodeType":"YulExpressionStatement","src":"11420:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11461:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11472:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11457:3:201"},"nodeType":"YulFunctionCall","src":"11457:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"11477:2:201","type":"","value":"27"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11450:6:201"},"nodeType":"YulFunctionCall","src":"11450:30:201"},"nodeType":"YulExpressionStatement","src":"11450:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11500:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11511:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11496:3:201"},"nodeType":"YulFunctionCall","src":"11496:18:201"},{"hexValue":"494e53554646494349454e545f41544f4b454e5f42414c414e4345","kind":"string","nodeType":"YulLiteral","src":"11516:29:201","type":"","value":"INSUFFICIENT_ATOKEN_BALANCE"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11489:6:201"},"nodeType":"YulFunctionCall","src":"11489:57:201"},"nodeType":"YulExpressionStatement","src":"11489:57:201"},{"nodeType":"YulAssignment","src":"11555:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11567:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11578:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11563:3:201"},"nodeType":"YulFunctionCall","src":"11563:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11555:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_022eae30fcc9137c0a8a102622bef17a0e0924cb859bf7da56a882760f0b9317__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11387:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11401:4:201","type":""}],"src":"11236:351:201"},{"body":{"nodeType":"YulBlock","src":"11683:335:201","statements":[{"body":{"nodeType":"YulBlock","src":"11727:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11736:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11739:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11729:6:201"},"nodeType":"YulFunctionCall","src":"11729:12:201"},"nodeType":"YulExpressionStatement","src":"11729:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"11704:3:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"11709:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11700:3:201"},"nodeType":"YulFunctionCall","src":"11700:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"11721:4:201","type":"","value":"0x20"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11696:3:201"},"nodeType":"YulFunctionCall","src":"11696:30:201"},"nodeType":"YulIf","src":"11693:50:201"},{"nodeType":"YulVariableDeclaration","src":"11752:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11772:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11766:5:201"},"nodeType":"YulFunctionCall","src":"11766:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"11756:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11784:35:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"11806:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"11814:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11802:3:201"},"nodeType":"YulFunctionCall","src":"11802:17:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"11788:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"11894:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"11896:16:201"},"nodeType":"YulFunctionCall","src":"11896:18:201"},"nodeType":"YulExpressionStatement","src":"11896:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"11837:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"11849:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11834:2:201"},"nodeType":"YulFunctionCall","src":"11834:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"11873:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"11885:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"11870:2:201"},"nodeType":"YulFunctionCall","src":"11870:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"11831:2:201"},"nodeType":"YulFunctionCall","src":"11831:62:201"},"nodeType":"YulIf","src":"11828:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11932:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"11936:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11925:6:201"},"nodeType":"YulFunctionCall","src":"11925:22:201"},"nodeType":"YulExpressionStatement","src":"11925:22:201"},{"nodeType":"YulAssignment","src":"11956:15:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"11965:6:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"11956:5:201"}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"11987:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12001:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11995:5:201"},"nodeType":"YulFunctionCall","src":"11995:16:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11980:6:201"},"nodeType":"YulFunctionCall","src":"11980:32:201"},"nodeType":"YulExpressionStatement","src":"11980:32:201"}]},"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11654:9:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"11665:3:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"11673:5:201","type":""}],"src":"11592:426:201"},{"body":{"nodeType":"YulBlock","src":"12083:132:201","statements":[{"nodeType":"YulAssignment","src":"12093:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"12108:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12102:5:201"},"nodeType":"YulFunctionCall","src":"12102:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"12093:5:201"}]},{"body":{"nodeType":"YulBlock","src":"12193:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12202:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12205:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12195:6:201"},"nodeType":"YulFunctionCall","src":"12195:12:201"},"nodeType":"YulExpressionStatement","src":"12195:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12137:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12148:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"12155:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12144:3:201"},"nodeType":"YulFunctionCall","src":"12144:46:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"12134:2:201"},"nodeType":"YulFunctionCall","src":"12134:57:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12127:6:201"},"nodeType":"YulFunctionCall","src":"12127:65:201"},"nodeType":"YulIf","src":"12124:85:201"}]},"name":"abi_decode_uint128_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"12062:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"12073:5:201","type":""}],"src":"12023:192:201"},{"body":{"nodeType":"YulBlock","src":"12279:110:201","statements":[{"nodeType":"YulAssignment","src":"12289:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"12304:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12298:5:201"},"nodeType":"YulFunctionCall","src":"12298:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"12289:5:201"}]},{"body":{"nodeType":"YulBlock","src":"12367:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12376:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12379:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12369:6:201"},"nodeType":"YulFunctionCall","src":"12369:12:201"},"nodeType":"YulExpressionStatement","src":"12369:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12333:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12344:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"12351:12:201","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12340:3:201"},"nodeType":"YulFunctionCall","src":"12340:24:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"12330:2:201"},"nodeType":"YulFunctionCall","src":"12330:35:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12323:6:201"},"nodeType":"YulFunctionCall","src":"12323:43:201"},"nodeType":"YulIf","src":"12320:63:201"}]},"name":"abi_decode_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"12258:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"12269:5:201","type":""}],"src":"12220:169:201"},{"body":{"nodeType":"YulBlock","src":"12453:104:201","statements":[{"nodeType":"YulAssignment","src":"12463:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"12478:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12472:5:201"},"nodeType":"YulFunctionCall","src":"12472:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"12463:5:201"}]},{"body":{"nodeType":"YulBlock","src":"12535:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12544:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12547:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12537:6:201"},"nodeType":"YulFunctionCall","src":"12537:12:201"},"nodeType":"YulExpressionStatement","src":"12537:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12507:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12518:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"12525:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12514:3:201"},"nodeType":"YulFunctionCall","src":"12514:18:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"12504:2:201"},"nodeType":"YulFunctionCall","src":"12504:29:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12497:6:201"},"nodeType":"YulFunctionCall","src":"12497:37:201"},"nodeType":"YulIf","src":"12494:57:201"}]},"name":"abi_decode_uint16_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"12432:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"12443:5:201","type":""}],"src":"12394:163:201"},{"body":{"nodeType":"YulBlock","src":"12622:86:201","statements":[{"nodeType":"YulAssignment","src":"12632:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"12647:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12641:5:201"},"nodeType":"YulFunctionCall","src":"12641:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"12632:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12696:5:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"12663:32:201"},"nodeType":"YulFunctionCall","src":"12663:39:201"},"nodeType":"YulExpressionStatement","src":"12663:39:201"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"12601:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"12612:5:201","type":""}],"src":"12562:146:201"},{"body":{"nodeType":"YulBlock","src":"12824:1541:201","statements":[{"body":{"nodeType":"YulBlock","src":"12871:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12880:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12883:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12873:6:201"},"nodeType":"YulFunctionCall","src":"12873:12:201"},"nodeType":"YulExpressionStatement","src":"12873:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"12845:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"12854:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12841:3:201"},"nodeType":"YulFunctionCall","src":"12841:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"12866:3:201","type":"","value":"480"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12837:3:201"},"nodeType":"YulFunctionCall","src":"12837:33:201"},"nodeType":"YulIf","src":"12834:53:201"},{"nodeType":"YulVariableDeclaration","src":"12896:35:201","value":{"arguments":[],"functionName":{"name":"allocate_memory_3071","nodeType":"YulIdentifier","src":"12909:20:201"},"nodeType":"YulFunctionCall","src":"12909:22:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"12900:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12947:5:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13007:9:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"13018:7:201"}],"functionName":{"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulIdentifier","src":"12954:52:201"},"nodeType":"YulFunctionCall","src":"12954:72:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12940:6:201"},"nodeType":"YulFunctionCall","src":"12940:87:201"},"nodeType":"YulExpressionStatement","src":"12940:87:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13047:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"13054:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13043:3:201"},"nodeType":"YulFunctionCall","src":"13043:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13093:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13104:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13089:3:201"},"nodeType":"YulFunctionCall","src":"13089:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"13059:29:201"},"nodeType":"YulFunctionCall","src":"13059:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13036:6:201"},"nodeType":"YulFunctionCall","src":"13036:73:201"},"nodeType":"YulExpressionStatement","src":"13036:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13129:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"13136:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13125:3:201"},"nodeType":"YulFunctionCall","src":"13125:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13175:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13186:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13171:3:201"},"nodeType":"YulFunctionCall","src":"13171:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"13141:29:201"},"nodeType":"YulFunctionCall","src":"13141:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13118:6:201"},"nodeType":"YulFunctionCall","src":"13118:73:201"},"nodeType":"YulExpressionStatement","src":"13118:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13211:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"13218:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13207:3:201"},"nodeType":"YulFunctionCall","src":"13207:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13257:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13268:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13253:3:201"},"nodeType":"YulFunctionCall","src":"13253:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"13223:29:201"},"nodeType":"YulFunctionCall","src":"13223:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13200:6:201"},"nodeType":"YulFunctionCall","src":"13200:73:201"},"nodeType":"YulExpressionStatement","src":"13200:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13293:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"13300:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13289:3:201"},"nodeType":"YulFunctionCall","src":"13289:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13340:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13351:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13336:3:201"},"nodeType":"YulFunctionCall","src":"13336:19:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"13306:29:201"},"nodeType":"YulFunctionCall","src":"13306:50:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13282:6:201"},"nodeType":"YulFunctionCall","src":"13282:75:201"},"nodeType":"YulExpressionStatement","src":"13282:75:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13377:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"13384:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13373:3:201"},"nodeType":"YulFunctionCall","src":"13373:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13424:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13435:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13420:3:201"},"nodeType":"YulFunctionCall","src":"13420:19:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"13390:29:201"},"nodeType":"YulFunctionCall","src":"13390:50:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13366:6:201"},"nodeType":"YulFunctionCall","src":"13366:75:201"},"nodeType":"YulExpressionStatement","src":"13366:75:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13461:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"13468:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13457:3:201"},"nodeType":"YulFunctionCall","src":"13457:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13507:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13518:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13503:3:201"},"nodeType":"YulFunctionCall","src":"13503:19:201"}],"functionName":{"name":"abi_decode_uint40_fromMemory","nodeType":"YulIdentifier","src":"13474:28:201"},"nodeType":"YulFunctionCall","src":"13474:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13450:6:201"},"nodeType":"YulFunctionCall","src":"13450:74:201"},"nodeType":"YulExpressionStatement","src":"13450:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13544:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"13551:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13540:3:201"},"nodeType":"YulFunctionCall","src":"13540:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13590:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13601:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13586:3:201"},"nodeType":"YulFunctionCall","src":"13586:19:201"}],"functionName":{"name":"abi_decode_uint16_fromMemory","nodeType":"YulIdentifier","src":"13557:28:201"},"nodeType":"YulFunctionCall","src":"13557:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13533:6:201"},"nodeType":"YulFunctionCall","src":"13533:74:201"},"nodeType":"YulExpressionStatement","src":"13533:74:201"},{"nodeType":"YulVariableDeclaration","src":"13616:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"13626:3:201","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"13620:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13649:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"13656:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13645:3:201"},"nodeType":"YulFunctionCall","src":"13645:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13695:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"13706:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13691:3:201"},"nodeType":"YulFunctionCall","src":"13691:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"13661:29:201"},"nodeType":"YulFunctionCall","src":"13661:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13638:6:201"},"nodeType":"YulFunctionCall","src":"13638:73:201"},"nodeType":"YulExpressionStatement","src":"13638:73:201"},{"nodeType":"YulVariableDeclaration","src":"13720:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"13730:3:201","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"13724:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13753:5:201"},{"name":"_2","nodeType":"YulIdentifier","src":"13760:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13749:3:201"},"nodeType":"YulFunctionCall","src":"13749:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13799:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"13810:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13795:3:201"},"nodeType":"YulFunctionCall","src":"13795:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"13765:29:201"},"nodeType":"YulFunctionCall","src":"13765:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13742:6:201"},"nodeType":"YulFunctionCall","src":"13742:73:201"},"nodeType":"YulExpressionStatement","src":"13742:73:201"},{"nodeType":"YulVariableDeclaration","src":"13824:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"13834:3:201","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"13828:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13857:5:201"},{"name":"_3","nodeType":"YulIdentifier","src":"13864:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13853:3:201"},"nodeType":"YulFunctionCall","src":"13853:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13903:9:201"},{"name":"_3","nodeType":"YulIdentifier","src":"13914:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13899:3:201"},"nodeType":"YulFunctionCall","src":"13899:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"13869:29:201"},"nodeType":"YulFunctionCall","src":"13869:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13846:6:201"},"nodeType":"YulFunctionCall","src":"13846:73:201"},"nodeType":"YulExpressionStatement","src":"13846:73:201"},{"nodeType":"YulVariableDeclaration","src":"13928:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"13938:3:201","type":"","value":"352"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"13932:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13961:5:201"},{"name":"_4","nodeType":"YulIdentifier","src":"13968:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13957:3:201"},"nodeType":"YulFunctionCall","src":"13957:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14007:9:201"},{"name":"_4","nodeType":"YulIdentifier","src":"14018:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14003:3:201"},"nodeType":"YulFunctionCall","src":"14003:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"13973:29:201"},"nodeType":"YulFunctionCall","src":"13973:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13950:6:201"},"nodeType":"YulFunctionCall","src":"13950:73:201"},"nodeType":"YulExpressionStatement","src":"13950:73:201"},{"nodeType":"YulVariableDeclaration","src":"14032:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14042:3:201","type":"","value":"384"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"14036:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14065:5:201"},{"name":"_5","nodeType":"YulIdentifier","src":"14072:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14061:3:201"},"nodeType":"YulFunctionCall","src":"14061:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14111:9:201"},{"name":"_5","nodeType":"YulIdentifier","src":"14122:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14107:3:201"},"nodeType":"YulFunctionCall","src":"14107:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"14077:29:201"},"nodeType":"YulFunctionCall","src":"14077:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14054:6:201"},"nodeType":"YulFunctionCall","src":"14054:73:201"},"nodeType":"YulExpressionStatement","src":"14054:73:201"},{"nodeType":"YulVariableDeclaration","src":"14136:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14146:3:201","type":"","value":"416"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"14140:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14169:5:201"},{"name":"_6","nodeType":"YulIdentifier","src":"14176:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14165:3:201"},"nodeType":"YulFunctionCall","src":"14165:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14215:9:201"},{"name":"_6","nodeType":"YulIdentifier","src":"14226:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14211:3:201"},"nodeType":"YulFunctionCall","src":"14211:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"14181:29:201"},"nodeType":"YulFunctionCall","src":"14181:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14158:6:201"},"nodeType":"YulFunctionCall","src":"14158:73:201"},"nodeType":"YulExpressionStatement","src":"14158:73:201"},{"nodeType":"YulVariableDeclaration","src":"14240:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14250:3:201","type":"","value":"448"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"14244:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14273:5:201"},{"name":"_7","nodeType":"YulIdentifier","src":"14280:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14269:3:201"},"nodeType":"YulFunctionCall","src":"14269:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14319:9:201"},{"name":"_7","nodeType":"YulIdentifier","src":"14330:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14315:3:201"},"nodeType":"YulFunctionCall","src":"14315:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"14285:29:201"},"nodeType":"YulFunctionCall","src":"14285:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14262:6:201"},"nodeType":"YulFunctionCall","src":"14262:73:201"},"nodeType":"YulExpressionStatement","src":"14262:73:201"},{"nodeType":"YulAssignment","src":"14344:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"14354:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"14344:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12790:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"12801:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"12813:6:201","type":""}],"src":"12713:1652:201"},{"body":{"nodeType":"YulBlock","src":"14635:428:201","statements":[{"nodeType":"YulAssignment","src":"14645:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14657:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14668:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14653:3:201"},"nodeType":"YulFunctionCall","src":"14653:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14645:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"14681:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14691:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"14685:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14749:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14764:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"14772:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14760:3:201"},"nodeType":"YulFunctionCall","src":"14760:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14742:6:201"},"nodeType":"YulFunctionCall","src":"14742:34:201"},"nodeType":"YulExpressionStatement","src":"14742:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14796:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14807:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14792:3:201"},"nodeType":"YulFunctionCall","src":"14792:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"14816:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"14824:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14812:3:201"},"nodeType":"YulFunctionCall","src":"14812:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14785:6:201"},"nodeType":"YulFunctionCall","src":"14785:43:201"},"nodeType":"YulExpressionStatement","src":"14785:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14848:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14859:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14844:3:201"},"nodeType":"YulFunctionCall","src":"14844:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"14864:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14837:6:201"},"nodeType":"YulFunctionCall","src":"14837:34:201"},"nodeType":"YulExpressionStatement","src":"14837:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14891:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14902:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14887:3:201"},"nodeType":"YulFunctionCall","src":"14887:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"14907:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14880:6:201"},"nodeType":"YulFunctionCall","src":"14880:34:201"},"nodeType":"YulExpressionStatement","src":"14880:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14934:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14945:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14930:3:201"},"nodeType":"YulFunctionCall","src":"14930:19:201"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"14955:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"14963:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14951:3:201"},"nodeType":"YulFunctionCall","src":"14951:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14923:6:201"},"nodeType":"YulFunctionCall","src":"14923:46:201"},"nodeType":"YulExpressionStatement","src":"14923:46:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14989:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15000:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14985:3:201"},"nodeType":"YulFunctionCall","src":"14985:19:201"},{"name":"value5","nodeType":"YulIdentifier","src":"15006:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14978:6:201"},"nodeType":"YulFunctionCall","src":"14978:35:201"},"nodeType":"YulExpressionStatement","src":"14978:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15033:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15044:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15029:3:201"},"nodeType":"YulFunctionCall","src":"15029:19:201"},{"name":"value6","nodeType":"YulIdentifier","src":"15050:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15022:6:201"},"nodeType":"YulFunctionCall","src":"15022:35:201"},"nodeType":"YulExpressionStatement","src":"15022:35:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14556:9:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"14567:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"14575:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"14583:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"14591:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"14599:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"14607:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14615:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14626:4:201","type":""}],"src":"14370:693:201"},{"body":{"nodeType":"YulBlock","src":"15225:241:201","statements":[{"nodeType":"YulAssignment","src":"15235:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15247:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15258:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15243:3:201"},"nodeType":"YulFunctionCall","src":"15243:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15235:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"15270:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"15280:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15274:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15338:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15353:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15361:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15349:3:201"},"nodeType":"YulFunctionCall","src":"15349:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15331:6:201"},"nodeType":"YulFunctionCall","src":"15331:34:201"},"nodeType":"YulExpressionStatement","src":"15331:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15385:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15396:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15381:3:201"},"nodeType":"YulFunctionCall","src":"15381:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"15401:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15374:6:201"},"nodeType":"YulFunctionCall","src":"15374:34:201"},"nodeType":"YulExpressionStatement","src":"15374:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15428:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15439:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15424:3:201"},"nodeType":"YulFunctionCall","src":"15424:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"15448:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15456:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15444:3:201"},"nodeType":"YulFunctionCall","src":"15444:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15417:6:201"},"nodeType":"YulFunctionCall","src":"15417:43:201"},"nodeType":"YulExpressionStatement","src":"15417:43:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15178:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"15189:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15197:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15205:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15216:4:201","type":""}],"src":"15068:398:201"},{"body":{"nodeType":"YulBlock","src":"15645:177:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15662:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15673:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15655:6:201"},"nodeType":"YulFunctionCall","src":"15655:21:201"},"nodeType":"YulExpressionStatement","src":"15655:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15696:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15707:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15692:3:201"},"nodeType":"YulFunctionCall","src":"15692:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"15712:2:201","type":"","value":"27"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15685:6:201"},"nodeType":"YulFunctionCall","src":"15685:30:201"},"nodeType":"YulExpressionStatement","src":"15685:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15735:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15746:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15731:3:201"},"nodeType":"YulFunctionCall","src":"15731:18:201"},{"hexValue":"554e45585045435445445f414d4f554e545f57495448445241574e","kind":"string","nodeType":"YulLiteral","src":"15751:29:201","type":"","value":"UNEXPECTED_AMOUNT_WITHDRAWN"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15724:6:201"},"nodeType":"YulFunctionCall","src":"15724:57:201"},"nodeType":"YulExpressionStatement","src":"15724:57:201"},{"nodeType":"YulAssignment","src":"15790:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15802:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15813:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15798:3:201"},"nodeType":"YulFunctionCall","src":"15798:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15790:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_85a045c7862eb0e81d59fe8dfd2ed8c824917ce215328caf39199676e5939f87__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15622:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15636:4:201","type":""}],"src":"15471:351:201"},{"body":{"nodeType":"YulBlock","src":"15905:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"15951:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15960:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15963:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15953:6:201"},"nodeType":"YulFunctionCall","src":"15953:12:201"},"nodeType":"YulExpressionStatement","src":"15953:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"15926:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"15935:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15922:3:201"},"nodeType":"YulFunctionCall","src":"15922:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"15947:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"15918:3:201"},"nodeType":"YulFunctionCall","src":"15918:32:201"},"nodeType":"YulIf","src":"15915:52:201"},{"nodeType":"YulVariableDeclaration","src":"15976:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15995:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15989:5:201"},"nodeType":"YulFunctionCall","src":"15989:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"15980:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"16058:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16067:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16070:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16060:6:201"},"nodeType":"YulFunctionCall","src":"16060:12:201"},"nodeType":"YulExpressionStatement","src":"16060:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16027:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16048:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"16041:6:201"},"nodeType":"YulFunctionCall","src":"16041:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"16034:6:201"},"nodeType":"YulFunctionCall","src":"16034:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"16024:2:201"},"nodeType":"YulFunctionCall","src":"16024:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"16017:6:201"},"nodeType":"YulFunctionCall","src":"16017:40:201"},"nodeType":"YulIf","src":"16014:60:201"},{"nodeType":"YulAssignment","src":"16083:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"16093:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"16083:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15871:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"15882:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"15894:6:201","type":""}],"src":"15827:277:201"},{"body":{"nodeType":"YulBlock","src":"16283:166:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16300:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16311:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16293:6:201"},"nodeType":"YulFunctionCall","src":"16293:21:201"},"nodeType":"YulExpressionStatement","src":"16293:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16334:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16345:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16330:3:201"},"nodeType":"YulFunctionCall","src":"16330:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"16350:2:201","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16323:6:201"},"nodeType":"YulFunctionCall","src":"16323:30:201"},"nodeType":"YulExpressionStatement","src":"16323:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16373:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16384:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16369:3:201"},"nodeType":"YulFunctionCall","src":"16369:18:201"},{"hexValue":"494e56414c49445f4155475553545553","kind":"string","nodeType":"YulLiteral","src":"16389:18:201","type":"","value":"INVALID_AUGUSTUS"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16362:6:201"},"nodeType":"YulFunctionCall","src":"16362:46:201"},"nodeType":"YulExpressionStatement","src":"16362:46:201"},{"nodeType":"YulAssignment","src":"16417:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16429:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16440:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16425:3:201"},"nodeType":"YulFunctionCall","src":"16425:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16417:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_3202e1fc4f78abbce03a97de69392b3f69ebba48c41588ffb32a1c8b97349f74__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16260:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16274:4:201","type":""}],"src":"16109:340:201"},{"body":{"nodeType":"YulBlock","src":"16486:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16503:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16506:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16496:6:201"},"nodeType":"YulFunctionCall","src":"16496:88:201"},"nodeType":"YulExpressionStatement","src":"16496:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16600:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"16603:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16593:6:201"},"nodeType":"YulFunctionCall","src":"16593:15:201"},"nodeType":"YulExpressionStatement","src":"16593:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16624:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16627:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16617:6:201"},"nodeType":"YulFunctionCall","src":"16617:15:201"},"nodeType":"YulExpressionStatement","src":"16617:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"16454:184:201"},{"body":{"nodeType":"YulBlock","src":"16692:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"16714:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"16716:16:201"},"nodeType":"YulFunctionCall","src":"16716:18:201"},"nodeType":"YulExpressionStatement","src":"16716:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"16708:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"16711:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16705:2:201"},"nodeType":"YulFunctionCall","src":"16705:8:201"},"nodeType":"YulIf","src":"16702:34:201"},{"nodeType":"YulAssignment","src":"16745:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"16757:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"16760:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16753:3:201"},"nodeType":"YulFunctionCall","src":"16753:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"16745:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"16674:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"16677:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"16683:4:201","type":""}],"src":"16643:125:201"},{"body":{"nodeType":"YulBlock","src":"16837:418:201","statements":[{"nodeType":"YulVariableDeclaration","src":"16847:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"16862:1:201","type":"","value":"1"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"16851:7:201","type":""}]},{"nodeType":"YulAssignment","src":"16872:16:201","value":{"name":"power_1","nodeType":"YulIdentifier","src":"16881:7:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"16872:5:201"}]},{"nodeType":"YulAssignment","src":"16897:13:201","value":{"name":"_base","nodeType":"YulIdentifier","src":"16905:5:201"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"16897:4:201"}]},{"body":{"nodeType":"YulBlock","src":"16961:288:201","statements":[{"body":{"nodeType":"YulBlock","src":"17066:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"17068:16:201"},"nodeType":"YulFunctionCall","src":"17068:18:201"},"nodeType":"YulExpressionStatement","src":"17068:18:201"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"16981:4:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16991:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base","nodeType":"YulIdentifier","src":"17059:4:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"16987:3:201"},"nodeType":"YulFunctionCall","src":"16987:77:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"16978:2:201"},"nodeType":"YulFunctionCall","src":"16978:87:201"},"nodeType":"YulIf","src":"16975:113:201"},{"body":{"nodeType":"YulBlock","src":"17127:29:201","statements":[{"nodeType":"YulAssignment","src":"17129:25:201","value":{"arguments":[{"name":"power","nodeType":"YulIdentifier","src":"17142:5:201"},{"name":"base","nodeType":"YulIdentifier","src":"17149:4:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"17138:3:201"},"nodeType":"YulFunctionCall","src":"17138:16:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"17129:5:201"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"17108:8:201"},{"name":"power_1","nodeType":"YulIdentifier","src":"17118:7:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17104:3:201"},"nodeType":"YulFunctionCall","src":"17104:22:201"},"nodeType":"YulIf","src":"17101:55:201"},{"nodeType":"YulAssignment","src":"17169:23:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"17181:4:201"},{"name":"base","nodeType":"YulIdentifier","src":"17187:4:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"17177:3:201"},"nodeType":"YulFunctionCall","src":"17177:15:201"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"17169:4:201"}]},{"nodeType":"YulAssignment","src":"17205:34:201","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"17221:7:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"17230:8:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"17217:3:201"},"nodeType":"YulFunctionCall","src":"17217:22:201"},"variableNames":[{"name":"exponent","nodeType":"YulIdentifier","src":"17205:8:201"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"16930:8:201"},{"name":"power_1","nodeType":"YulIdentifier","src":"16940:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"16927:2:201"},"nodeType":"YulFunctionCall","src":"16927:21:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"16949:3:201","statements":[]},"pre":{"nodeType":"YulBlock","src":"16923:3:201","statements":[]},"src":"16919:330:201"}]},"name":"checked_exp_helper","nodeType":"YulFunctionDefinition","parameters":[{"name":"_base","nodeType":"YulTypedName","src":"16801:5:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"16808:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"16821:5:201","type":""},{"name":"base","nodeType":"YulTypedName","src":"16828:4:201","type":""}],"src":"16773:482:201"},{"body":{"nodeType":"YulBlock","src":"17319:807:201","statements":[{"body":{"nodeType":"YulBlock","src":"17357:52:201","statements":[{"nodeType":"YulAssignment","src":"17371:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"17380:1:201","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"17371:5:201"}]},{"nodeType":"YulLeave","src":"17394:5:201"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"17339:8:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17332:6:201"},"nodeType":"YulFunctionCall","src":"17332:16:201"},"nodeType":"YulIf","src":"17329:80:201"},{"body":{"nodeType":"YulBlock","src":"17442:52:201","statements":[{"nodeType":"YulAssignment","src":"17456:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"17465:1:201","type":"","value":"0"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"17456:5:201"}]},{"nodeType":"YulLeave","src":"17479:5:201"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"17428:4:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17421:6:201"},"nodeType":"YulFunctionCall","src":"17421:12:201"},"nodeType":"YulIf","src":"17418:76:201"},{"cases":[{"body":{"nodeType":"YulBlock","src":"17530:52:201","statements":[{"nodeType":"YulAssignment","src":"17544:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"17553:1:201","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"17544:5:201"}]},{"nodeType":"YulLeave","src":"17567:5:201"}]},"nodeType":"YulCase","src":"17523:59:201","value":{"kind":"number","nodeType":"YulLiteral","src":"17528:1:201","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"17598:123:201","statements":[{"body":{"nodeType":"YulBlock","src":"17633:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"17635:16:201"},"nodeType":"YulFunctionCall","src":"17635:18:201"},"nodeType":"YulExpressionStatement","src":"17635:18:201"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"17618:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"17628:3:201","type":"","value":"255"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"17615:2:201"},"nodeType":"YulFunctionCall","src":"17615:17:201"},"nodeType":"YulIf","src":"17612:43:201"},{"nodeType":"YulAssignment","src":"17668:25:201","value":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"17681:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"17691:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"17677:3:201"},"nodeType":"YulFunctionCall","src":"17677:16:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"17668:5:201"}]},{"nodeType":"YulLeave","src":"17706:5:201"}]},"nodeType":"YulCase","src":"17591:130:201","value":{"kind":"number","nodeType":"YulLiteral","src":"17596:1:201","type":"","value":"2"}}],"expression":{"name":"base","nodeType":"YulIdentifier","src":"17510:4:201"},"nodeType":"YulSwitch","src":"17503:218:201"},{"body":{"nodeType":"YulBlock","src":"17819:70:201","statements":[{"nodeType":"YulAssignment","src":"17833:28:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"17846:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"17852:8:201"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"17842:3:201"},"nodeType":"YulFunctionCall","src":"17842:19:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"17833:5:201"}]},{"nodeType":"YulLeave","src":"17874:5:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"17743:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"17749:2:201","type":"","value":"11"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17740:2:201"},"nodeType":"YulFunctionCall","src":"17740:12:201"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"17757:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"17767:2:201","type":"","value":"78"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17754:2:201"},"nodeType":"YulFunctionCall","src":"17754:16:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17736:3:201"},"nodeType":"YulFunctionCall","src":"17736:35:201"},{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"17780:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"17786:3:201","type":"","value":"307"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17777:2:201"},"nodeType":"YulFunctionCall","src":"17777:13:201"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"17795:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"17805:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17792:2:201"},"nodeType":"YulFunctionCall","src":"17792:16:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17773:3:201"},"nodeType":"YulFunctionCall","src":"17773:36:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"17733:2:201"},"nodeType":"YulFunctionCall","src":"17733:77:201"},"nodeType":"YulIf","src":"17730:159:201"},{"nodeType":"YulVariableDeclaration","src":"17898:57:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"17940:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"17946:8:201"}],"functionName":{"name":"checked_exp_helper","nodeType":"YulIdentifier","src":"17921:18:201"},"nodeType":"YulFunctionCall","src":"17921:34:201"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"17902:7:201","type":""},{"name":"base_1","nodeType":"YulTypedName","src":"17911:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"18060:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"18062:16:201"},"nodeType":"YulFunctionCall","src":"18062:18:201"},"nodeType":"YulExpressionStatement","src":"18062:18:201"}]},"condition":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"17970:7:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17983:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base_1","nodeType":"YulIdentifier","src":"18051:6:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"17979:3:201"},"nodeType":"YulFunctionCall","src":"17979:79:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"17967:2:201"},"nodeType":"YulFunctionCall","src":"17967:92:201"},"nodeType":"YulIf","src":"17964:118:201"},{"nodeType":"YulAssignment","src":"18091:29:201","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"18104:7:201"},{"name":"base_1","nodeType":"YulIdentifier","src":"18113:6:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"18100:3:201"},"nodeType":"YulFunctionCall","src":"18100:20:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"18091:5:201"}]}]},"name":"checked_exp_unsigned","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"17290:4:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"17296:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"17309:5:201","type":""}],"src":"17260:866:201"},{"body":{"nodeType":"YulBlock","src":"18201:61:201","statements":[{"nodeType":"YulAssignment","src":"18211:45:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"18241:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"18247:8:201"}],"functionName":{"name":"checked_exp_unsigned","nodeType":"YulIdentifier","src":"18220:20:201"},"nodeType":"YulFunctionCall","src":"18220:36:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"18211:5:201"}]}]},"name":"checked_exp_t_uint256_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"18172:4:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"18178:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"18191:5:201","type":""}],"src":"18131:131:201"},{"body":{"nodeType":"YulBlock","src":"18441:181:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18458:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18469:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18451:6:201"},"nodeType":"YulFunctionCall","src":"18451:21:201"},"nodeType":"YulExpressionStatement","src":"18451:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18492:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18503:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18488:3:201"},"nodeType":"YulFunctionCall","src":"18488:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"18508:2:201","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18481:6:201"},"nodeType":"YulFunctionCall","src":"18481:30:201"},"nodeType":"YulExpressionStatement","src":"18481:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18531:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18542:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18527:3:201"},"nodeType":"YulFunctionCall","src":"18527:18:201"},{"hexValue":"4d494e5f414d4f554e545f455843454544535f4d41585f534c495050414745","kind":"string","nodeType":"YulLiteral","src":"18547:33:201","type":"","value":"MIN_AMOUNT_EXCEEDS_MAX_SLIPPAGE"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18520:6:201"},"nodeType":"YulFunctionCall","src":"18520:61:201"},"nodeType":"YulExpressionStatement","src":"18520:61:201"},{"nodeType":"YulAssignment","src":"18590:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18602:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18613:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18598:3:201"},"nodeType":"YulFunctionCall","src":"18598:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18590:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_8333172953304c474b0cfe8eccb09fd2b08c1198c3d73a3ed0388645fb84d24e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18418:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18432:4:201","type":""}],"src":"18267:355:201"},{"body":{"nodeType":"YulBlock","src":"18801:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18818:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18829:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18811:6:201"},"nodeType":"YulFunctionCall","src":"18811:21:201"},"nodeType":"YulExpressionStatement","src":"18811:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18852:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18863:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18848:3:201"},"nodeType":"YulFunctionCall","src":"18848:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"18868:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18841:6:201"},"nodeType":"YulFunctionCall","src":"18841:30:201"},"nodeType":"YulExpressionStatement","src":"18841:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18891:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18902:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18887:3:201"},"nodeType":"YulFunctionCall","src":"18887:18:201"},{"hexValue":"494e53554646494349454e545f42414c414e43455f4245464f52455f53574150","kind":"string","nodeType":"YulLiteral","src":"18907:34:201","type":"","value":"INSUFFICIENT_BALANCE_BEFORE_SWAP"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18880:6:201"},"nodeType":"YulFunctionCall","src":"18880:62:201"},"nodeType":"YulExpressionStatement","src":"18880:62:201"},{"nodeType":"YulAssignment","src":"18951:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18963:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18974:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18959:3:201"},"nodeType":"YulFunctionCall","src":"18959:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18951:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_51fc4946c16284910827fc38bc7611d60d4dd1f7d8fefa0da6f8642035c3c48b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18778:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18792:4:201","type":""}],"src":"18627:356:201"},{"body":{"nodeType":"YulBlock","src":"19069:178:201","statements":[{"body":{"nodeType":"YulBlock","src":"19115:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19124:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19127:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19117:6:201"},"nodeType":"YulFunctionCall","src":"19117:12:201"},"nodeType":"YulExpressionStatement","src":"19117:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"19090:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"19099:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19086:3:201"},"nodeType":"YulFunctionCall","src":"19086:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"19111:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"19082:3:201"},"nodeType":"YulFunctionCall","src":"19082:32:201"},"nodeType":"YulIf","src":"19079:52:201"},{"nodeType":"YulVariableDeclaration","src":"19140:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19159:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19153:5:201"},"nodeType":"YulFunctionCall","src":"19153:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"19144:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"19211:5:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"19178:32:201"},"nodeType":"YulFunctionCall","src":"19178:39:201"},"nodeType":"YulExpressionStatement","src":"19178:39:201"},{"nodeType":"YulAssignment","src":"19226:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"19236:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"19226:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19035:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"19046:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"19058:6:201","type":""}],"src":"18988:259:201"},{"body":{"nodeType":"YulBlock","src":"19426:181:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19443:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19454:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19436:6:201"},"nodeType":"YulFunctionCall","src":"19436:21:201"},"nodeType":"YulExpressionStatement","src":"19436:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19477:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19488:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19473:3:201"},"nodeType":"YulFunctionCall","src":"19473:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"19493:2:201","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19466:6:201"},"nodeType":"YulFunctionCall","src":"19466:30:201"},"nodeType":"YulExpressionStatement","src":"19466:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19516:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19527:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19512:3:201"},"nodeType":"YulFunctionCall","src":"19512:18:201"},{"hexValue":"46524f4d5f414d4f554e545f4f46465345545f4f55545f4f465f52414e4745","kind":"string","nodeType":"YulLiteral","src":"19532:33:201","type":"","value":"FROM_AMOUNT_OFFSET_OUT_OF_RANGE"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19505:6:201"},"nodeType":"YulFunctionCall","src":"19505:61:201"},"nodeType":"YulExpressionStatement","src":"19505:61:201"},{"nodeType":"YulAssignment","src":"19575:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19587:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19598:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19583:3:201"},"nodeType":"YulFunctionCall","src":"19583:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19575:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_f920786e74a0af1b51a64ca021265d328aab062025c81f249165aca83960cff7__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19403:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19417:4:201","type":""}],"src":"19252:355:201"},{"body":{"nodeType":"YulBlock","src":"19665:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"19675:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"19684:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"19679:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"19744:63:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"19769:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"19774:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19765:3:201"},"nodeType":"YulFunctionCall","src":"19765:11:201"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"19788:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"19793:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19784:3:201"},"nodeType":"YulFunctionCall","src":"19784:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19778:5:201"},"nodeType":"YulFunctionCall","src":"19778:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19758:6:201"},"nodeType":"YulFunctionCall","src":"19758:39:201"},"nodeType":"YulExpressionStatement","src":"19758:39:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"19705:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"19708:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"19702:2:201"},"nodeType":"YulFunctionCall","src":"19702:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"19716:19:201","statements":[{"nodeType":"YulAssignment","src":"19718:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"19727:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"19730:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19723:3:201"},"nodeType":"YulFunctionCall","src":"19723:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"19718:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"19698:3:201","statements":[]},"src":"19694:113:201"},{"body":{"nodeType":"YulBlock","src":"19833:31:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"19846:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"19851:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19842:3:201"},"nodeType":"YulFunctionCall","src":"19842:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"19860:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19835:6:201"},"nodeType":"YulFunctionCall","src":"19835:27:201"},"nodeType":"YulExpressionStatement","src":"19835:27:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"19822:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"19825:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"19819:2:201"},"nodeType":"YulFunctionCall","src":"19819:13:201"},"nodeType":"YulIf","src":"19816:48:201"}]},"name":"copy_memory_to_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"19643:3:201","type":""},{"name":"dst","nodeType":"YulTypedName","src":"19648:3:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"19653:6:201","type":""}],"src":"19612:258:201"},{"body":{"nodeType":"YulBlock","src":"20012:137:201","statements":[{"nodeType":"YulVariableDeclaration","src":"20022:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"20042:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"20036:5:201"},"nodeType":"YulFunctionCall","src":"20036:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"20026:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"20084:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"20092:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20080:3:201"},"nodeType":"YulFunctionCall","src":"20080:17:201"},{"name":"pos","nodeType":"YulIdentifier","src":"20099:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"20104:6:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"20058:21:201"},"nodeType":"YulFunctionCall","src":"20058:53:201"},"nodeType":"YulExpressionStatement","src":"20058:53:201"},{"nodeType":"YulAssignment","src":"20120:23:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"20131:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"20136:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20127:3:201"},"nodeType":"YulFunctionCall","src":"20127:16:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"20120:3:201"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"19988:3:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"19993:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"20004:3:201","type":""}],"src":"19875:274:201"},{"body":{"nodeType":"YulBlock","src":"20328:174:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20345:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20356:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20338:6:201"},"nodeType":"YulFunctionCall","src":"20338:21:201"},"nodeType":"YulExpressionStatement","src":"20338:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20379:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20390:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20375:3:201"},"nodeType":"YulFunctionCall","src":"20375:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"20395:2:201","type":"","value":"24"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20368:6:201"},"nodeType":"YulFunctionCall","src":"20368:30:201"},"nodeType":"YulExpressionStatement","src":"20368:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20418:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20429:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20414:3:201"},"nodeType":"YulFunctionCall","src":"20414:18:201"},{"hexValue":"57524f4e475f42414c414e43455f41465445525f53574150","kind":"string","nodeType":"YulLiteral","src":"20434:26:201","type":"","value":"WRONG_BALANCE_AFTER_SWAP"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20407:6:201"},"nodeType":"YulFunctionCall","src":"20407:54:201"},"nodeType":"YulExpressionStatement","src":"20407:54:201"},{"nodeType":"YulAssignment","src":"20470:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20482:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20493:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20478:3:201"},"nodeType":"YulFunctionCall","src":"20478:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20470:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9bfa76b9c2e298d52f58639e051d7d21997f6c435f534dfd0c2e6c351c64a39a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20305:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20319:4:201","type":""}],"src":"20154:348:201"},{"body":{"nodeType":"YulBlock","src":"20681:178:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20698:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20709:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20691:6:201"},"nodeType":"YulFunctionCall","src":"20691:21:201"},"nodeType":"YulExpressionStatement","src":"20691:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20732:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20743:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20728:3:201"},"nodeType":"YulFunctionCall","src":"20728:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"20748:2:201","type":"","value":"28"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20721:6:201"},"nodeType":"YulFunctionCall","src":"20721:30:201"},"nodeType":"YulExpressionStatement","src":"20721:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20771:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20782:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20767:3:201"},"nodeType":"YulFunctionCall","src":"20767:18:201"},{"hexValue":"494e53554646494349454e545f414d4f554e545f5245434549564544","kind":"string","nodeType":"YulLiteral","src":"20787:30:201","type":"","value":"INSUFFICIENT_AMOUNT_RECEIVED"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20760:6:201"},"nodeType":"YulFunctionCall","src":"20760:58:201"},"nodeType":"YulExpressionStatement","src":"20760:58:201"},{"nodeType":"YulAssignment","src":"20827:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20839:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20850:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20835:3:201"},"nodeType":"YulFunctionCall","src":"20835:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20827:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_74fc5696336325aeb54c5d19133ed01308c8174de21fc66f38ac28668f995bc7__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20658:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20672:4:201","type":""}],"src":"20507:352:201"},{"body":{"nodeType":"YulBlock","src":"20993:119:201","statements":[{"nodeType":"YulAssignment","src":"21003:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21015:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21026:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21011:3:201"},"nodeType":"YulFunctionCall","src":"21011:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21003:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21045:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"21056:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21038:6:201"},"nodeType":"YulFunctionCall","src":"21038:25:201"},"nodeType":"YulExpressionStatement","src":"21038:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21083:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21094:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21079:3:201"},"nodeType":"YulFunctionCall","src":"21079:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"21099:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21072:6:201"},"nodeType":"YulFunctionCall","src":"21072:34:201"},"nodeType":"YulExpressionStatement","src":"21072:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20954:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"20965:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"20973:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20984:4:201","type":""}],"src":"20864:248:201"},{"body":{"nodeType":"YulBlock","src":"21246:198:201","statements":[{"nodeType":"YulAssignment","src":"21256:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21268:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21279:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21264:3:201"},"nodeType":"YulFunctionCall","src":"21264:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21256:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"21291:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"21301:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"21295:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21359:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"21374:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"21382:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21370:3:201"},"nodeType":"YulFunctionCall","src":"21370:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21352:6:201"},"nodeType":"YulFunctionCall","src":"21352:34:201"},"nodeType":"YulExpressionStatement","src":"21352:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21406:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21417:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21402:3:201"},"nodeType":"YulFunctionCall","src":"21402:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"21426:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"21434:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21422:3:201"},"nodeType":"YulFunctionCall","src":"21422:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21395:6:201"},"nodeType":"YulFunctionCall","src":"21395:43:201"},"nodeType":"YulExpressionStatement","src":"21395:43:201"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21207:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"21218:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"21226:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21237:4:201","type":""}],"src":"21117:327:201"},{"body":{"nodeType":"YulBlock","src":"21623:244:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21640:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21651:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21633:6:201"},"nodeType":"YulFunctionCall","src":"21633:21:201"},"nodeType":"YulExpressionStatement","src":"21633:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21674:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21685:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21670:3:201"},"nodeType":"YulFunctionCall","src":"21670:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"21690:2:201","type":"","value":"54"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21663:6:201"},"nodeType":"YulFunctionCall","src":"21663:30:201"},"nodeType":"YulExpressionStatement","src":"21663:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21713:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21724:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21709:3:201"},"nodeType":"YulFunctionCall","src":"21709:18:201"},{"hexValue":"5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f","kind":"string","nodeType":"YulLiteral","src":"21729:34:201","type":"","value":"SafeERC20: approve from non-zero"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21702:6:201"},"nodeType":"YulFunctionCall","src":"21702:62:201"},"nodeType":"YulExpressionStatement","src":"21702:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21784:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21795:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21780:3:201"},"nodeType":"YulFunctionCall","src":"21780:18:201"},{"hexValue":"20746f206e6f6e2d7a65726f20616c6c6f77616e6365","kind":"string","nodeType":"YulLiteral","src":"21800:24:201","type":"","value":" to non-zero allowance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21773:6:201"},"nodeType":"YulFunctionCall","src":"21773:52:201"},"nodeType":"YulExpressionStatement","src":"21773:52:201"},{"nodeType":"YulAssignment","src":"21834:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21846:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21857:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21842:3:201"},"nodeType":"YulFunctionCall","src":"21842:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21834:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21600:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21614:4:201","type":""}],"src":"21449:418:201"},{"body":{"nodeType":"YulBlock","src":"22001:168:201","statements":[{"nodeType":"YulAssignment","src":"22011:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22023:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22034:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22019:3:201"},"nodeType":"YulFunctionCall","src":"22019:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22011:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22053:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"22068:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"22076:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22064:3:201"},"nodeType":"YulFunctionCall","src":"22064:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22046:6:201"},"nodeType":"YulFunctionCall","src":"22046:74:201"},"nodeType":"YulExpressionStatement","src":"22046:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22140:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22151:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22136:3:201"},"nodeType":"YulFunctionCall","src":"22136:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"22156:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22129:6:201"},"nodeType":"YulFunctionCall","src":"22129:34:201"},"nodeType":"YulExpressionStatement","src":"22129:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21962:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"21973:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"21981:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21992:4:201","type":""}],"src":"21872:297:201"},{"body":{"nodeType":"YulBlock","src":"22348:175:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22365:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22376:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22358:6:201"},"nodeType":"YulFunctionCall","src":"22358:21:201"},"nodeType":"YulExpressionStatement","src":"22358:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22399:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22410:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22395:3:201"},"nodeType":"YulFunctionCall","src":"22395:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"22415:2:201","type":"","value":"25"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22388:6:201"},"nodeType":"YulFunctionCall","src":"22388:30:201"},"nodeType":"YulExpressionStatement","src":"22388:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22438:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22449:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22434:3:201"},"nodeType":"YulFunctionCall","src":"22434:18:201"},{"hexValue":"475076323a206661696c6564207472616e7366657246726f6d","kind":"string","nodeType":"YulLiteral","src":"22454:27:201","type":"","value":"GPv2: failed transferFrom"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22427:6:201"},"nodeType":"YulFunctionCall","src":"22427:55:201"},"nodeType":"YulExpressionStatement","src":"22427:55:201"},{"nodeType":"YulAssignment","src":"22491:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22503:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22514:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22499:3:201"},"nodeType":"YulFunctionCall","src":"22499:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22491:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22325:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22339:4:201","type":""}],"src":"22174:349:201"},{"body":{"nodeType":"YulBlock","src":"22607:168:201","statements":[{"body":{"nodeType":"YulBlock","src":"22653:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22662:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"22665:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"22655:6:201"},"nodeType":"YulFunctionCall","src":"22655:12:201"},"nodeType":"YulExpressionStatement","src":"22655:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"22628:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"22637:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22624:3:201"},"nodeType":"YulFunctionCall","src":"22624:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"22649:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"22620:3:201"},"nodeType":"YulFunctionCall","src":"22620:32:201"},"nodeType":"YulIf","src":"22617:52:201"},{"nodeType":"YulVariableDeclaration","src":"22678:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22697:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"22691:5:201"},"nodeType":"YulFunctionCall","src":"22691:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"22682:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"22739:5:201"}],"functionName":{"name":"validator_revert_uint8","nodeType":"YulIdentifier","src":"22716:22:201"},"nodeType":"YulFunctionCall","src":"22716:29:201"},"nodeType":"YulExpressionStatement","src":"22716:29:201"},{"nodeType":"YulAssignment","src":"22754:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"22764:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"22754:6:201"}]}]},"name":"abi_decode_tuple_t_uint8_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22573:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"22584:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"22596:6:201","type":""}],"src":"22528:247:201"},{"body":{"nodeType":"YulBlock","src":"22954:176:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22971:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22982:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22964:6:201"},"nodeType":"YulFunctionCall","src":"22964:21:201"},"nodeType":"YulExpressionStatement","src":"22964:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23005:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23016:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23001:3:201"},"nodeType":"YulFunctionCall","src":"23001:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"23021:2:201","type":"","value":"26"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22994:6:201"},"nodeType":"YulFunctionCall","src":"22994:30:201"},"nodeType":"YulExpressionStatement","src":"22994:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23044:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23055:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23040:3:201"},"nodeType":"YulFunctionCall","src":"23040:18:201"},{"hexValue":"544f4f5f4d414e595f444543494d414c535f4f4e5f544f4b454e","kind":"string","nodeType":"YulLiteral","src":"23060:28:201","type":"","value":"TOO_MANY_DECIMALS_ON_TOKEN"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23033:6:201"},"nodeType":"YulFunctionCall","src":"23033:56:201"},"nodeType":"YulExpressionStatement","src":"23033:56:201"},{"nodeType":"YulAssignment","src":"23098:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23110:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23121:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23106:3:201"},"nodeType":"YulFunctionCall","src":"23106:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23098:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_fc5915f8715e0da4bd5e6487e67e57e89850a48fc18d4e921a811a8c928ad119__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22931:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22945:4:201","type":""}],"src":"22780:350:201"},{"body":{"nodeType":"YulBlock","src":"23167:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23184:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"23187:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23177:6:201"},"nodeType":"YulFunctionCall","src":"23177:88:201"},"nodeType":"YulExpressionStatement","src":"23177:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23281:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"23284:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23274:6:201"},"nodeType":"YulFunctionCall","src":"23274:15:201"},"nodeType":"YulExpressionStatement","src":"23274:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23305:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"23308:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"23298:6:201"},"nodeType":"YulFunctionCall","src":"23298:15:201"},"nodeType":"YulExpressionStatement","src":"23298:15:201"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"23135:184:201"},{"body":{"nodeType":"YulBlock","src":"23370:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"23401:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23422:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"23425:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23415:6:201"},"nodeType":"YulFunctionCall","src":"23415:88:201"},"nodeType":"YulExpressionStatement","src":"23415:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23523:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"23526:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23516:6:201"},"nodeType":"YulFunctionCall","src":"23516:15:201"},"nodeType":"YulExpressionStatement","src":"23516:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23551:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"23554:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"23544:6:201"},"nodeType":"YulFunctionCall","src":"23544:15:201"},"nodeType":"YulExpressionStatement","src":"23544:15:201"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"23390:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"23383:6:201"},"nodeType":"YulFunctionCall","src":"23383:9:201"},"nodeType":"YulIf","src":"23380:189:201"},{"nodeType":"YulAssignment","src":"23578:14:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"23587:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"23590:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"23583:3:201"},"nodeType":"YulFunctionCall","src":"23583:9:201"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"23578:1:201"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"23355:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"23358:1:201","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"23364:1:201","type":""}],"src":"23324:274:201"},{"body":{"nodeType":"YulBlock","src":"23777:232:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23794:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23805:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23787:6:201"},"nodeType":"YulFunctionCall","src":"23787:21:201"},"nodeType":"YulExpressionStatement","src":"23787:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23828:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23839:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23824:3:201"},"nodeType":"YulFunctionCall","src":"23824:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"23844:2:201","type":"","value":"42"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23817:6:201"},"nodeType":"YulFunctionCall","src":"23817:30:201"},"nodeType":"YulExpressionStatement","src":"23817:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23867:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23878:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23863:3:201"},"nodeType":"YulFunctionCall","src":"23863:18:201"},{"hexValue":"5361666545524332303a204552433230206f7065726174696f6e20646964206e","kind":"string","nodeType":"YulLiteral","src":"23883:34:201","type":"","value":"SafeERC20: ERC20 operation did n"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23856:6:201"},"nodeType":"YulFunctionCall","src":"23856:62:201"},"nodeType":"YulExpressionStatement","src":"23856:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23938:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23949:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23934:3:201"},"nodeType":"YulFunctionCall","src":"23934:18:201"},{"hexValue":"6f742073756363656564","kind":"string","nodeType":"YulLiteral","src":"23954:12:201","type":"","value":"ot succeed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23927:6:201"},"nodeType":"YulFunctionCall","src":"23927:40:201"},"nodeType":"YulExpressionStatement","src":"23927:40:201"},{"nodeType":"YulAssignment","src":"23976:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23988:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23999:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23984:3:201"},"nodeType":"YulFunctionCall","src":"23984:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23976:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23754:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23768:4:201","type":""}],"src":"23603:406:201"},{"body":{"nodeType":"YulBlock","src":"24188:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24205:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24216:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24198:6:201"},"nodeType":"YulFunctionCall","src":"24198:21:201"},"nodeType":"YulExpressionStatement","src":"24198:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24239:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24250:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24235:3:201"},"nodeType":"YulFunctionCall","src":"24235:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"24255:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24228:6:201"},"nodeType":"YulFunctionCall","src":"24228:30:201"},"nodeType":"YulExpressionStatement","src":"24228:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24278:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24289:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24274:3:201"},"nodeType":"YulFunctionCall","src":"24274:18:201"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f","kind":"string","nodeType":"YulLiteral","src":"24294:34:201","type":"","value":"Address: insufficient balance fo"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24267:6:201"},"nodeType":"YulFunctionCall","src":"24267:62:201"},"nodeType":"YulExpressionStatement","src":"24267:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24349:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24360:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24345:3:201"},"nodeType":"YulFunctionCall","src":"24345:18:201"},{"hexValue":"722063616c6c","kind":"string","nodeType":"YulLiteral","src":"24365:8:201","type":"","value":"r call"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24338:6:201"},"nodeType":"YulFunctionCall","src":"24338:36:201"},"nodeType":"YulExpressionStatement","src":"24338:36:201"},{"nodeType":"YulAssignment","src":"24383:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24395:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24406:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24391:3:201"},"nodeType":"YulFunctionCall","src":"24391:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24383:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24165:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24179:4:201","type":""}],"src":"24014:402:201"},{"body":{"nodeType":"YulBlock","src":"24595:179:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24612:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24623:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24605:6:201"},"nodeType":"YulFunctionCall","src":"24605:21:201"},"nodeType":"YulExpressionStatement","src":"24605:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24646:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24657:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24642:3:201"},"nodeType":"YulFunctionCall","src":"24642:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"24662:2:201","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24635:6:201"},"nodeType":"YulFunctionCall","src":"24635:30:201"},"nodeType":"YulExpressionStatement","src":"24635:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24685:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24696:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24681:3:201"},"nodeType":"YulFunctionCall","src":"24681:18:201"},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"24701:31:201","type":"","value":"Address: call to non-contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24674:6:201"},"nodeType":"YulFunctionCall","src":"24674:59:201"},"nodeType":"YulExpressionStatement","src":"24674:59:201"},{"nodeType":"YulAssignment","src":"24742:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24754:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24765:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24750:3:201"},"nodeType":"YulFunctionCall","src":"24750:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24742:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24572:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24586:4:201","type":""}],"src":"24421:353:201"},{"body":{"nodeType":"YulBlock","src":"24900:321:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24917:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24928:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24910:6:201"},"nodeType":"YulFunctionCall","src":"24910:21:201"},"nodeType":"YulExpressionStatement","src":"24910:21:201"},{"nodeType":"YulVariableDeclaration","src":"24940:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"24960:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"24954:5:201"},"nodeType":"YulFunctionCall","src":"24954:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"24944:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24987:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24998:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24983:3:201"},"nodeType":"YulFunctionCall","src":"24983:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"25003:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24976:6:201"},"nodeType":"YulFunctionCall","src":"24976:34:201"},"nodeType":"YulExpressionStatement","src":"24976:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"25045:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"25053:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25041:3:201"},"nodeType":"YulFunctionCall","src":"25041:15:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25062:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25073:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25058:3:201"},"nodeType":"YulFunctionCall","src":"25058:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"25078:6:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"25019:21:201"},"nodeType":"YulFunctionCall","src":"25019:66:201"},"nodeType":"YulExpressionStatement","src":"25019:66:201"},{"nodeType":"YulAssignment","src":"25094:121:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25110:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"25129:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"25137:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25125:3:201"},"nodeType":"YulFunctionCall","src":"25125:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"25142:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25121:3:201"},"nodeType":"YulFunctionCall","src":"25121:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25106:3:201"},"nodeType":"YulFunctionCall","src":"25106:104:201"},{"kind":"number","nodeType":"YulLiteral","src":"25212:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25102:3:201"},"nodeType":"YulFunctionCall","src":"25102:113:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25094:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24869:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"24880:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24891:4:201","type":""}],"src":"24779:442:201"}]},"contents":"{\n    { }\n    function validator_revert_contract_IERC20(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IERC20_$1442(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IERC20(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IERC20(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_contract_IERC20(value_1)\n        value3 := value_1\n        let offset := calldataload(add(headStart, 128))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value4_1, value5_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n        value4 := value4_1\n        value5 := value5_1\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_contract$_IPriceOracleGetter_$5835__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_contract$_IParaSwapAugustusRegistry_$30961__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_contract_IParaSwapAugustus(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_contract_IERC20(value)\n    }\n    function abi_decode_tuple_t_contract$_IERC20Detailed_$1464t_contract$_IERC20Detailed_$1464t_uint256t_uint256t_uint256t_bytes_calldata_ptrt_contract$_IParaSwapAugustus_$30951t_struct$_PermitSignature_$29019_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 384) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IERC20(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_contract_IERC20(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n        let offset := calldataload(add(headStart, 160))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value5_1, value6_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n        value5 := value5_1\n        value6 := value6_1\n        let value_2 := calldataload(add(headStart, 192))\n        validator_revert_contract_IERC20(value_2)\n        value7 := value_2\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20), 160) { revert(0, 0) }\n        value8 := add(headStart, 224)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IERC20(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_f253c60ca7289769121ceb7e8a55d2372f327bb2c0c90e8e3ba6b77e057d495e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"CALLER_MUST_BE_POOL\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_3071() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 480)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function validator_revert_uint8(value)\n    {\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_struct_PermitSignature(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0xa0) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xa0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        value := memPtr\n        mstore(memPtr, calldataload(headStart))\n        mstore(add(memPtr, 32), calldataload(add(headStart, 32)))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_uint8(value_1)\n        mstore(add(memPtr, 64), value_1)\n        mstore(add(memPtr, 96), calldataload(add(headStart, 96)))\n        mstore(add(memPtr, 128), calldataload(add(headStart, 128)))\n    }\n    function abi_decode_tuple_t_contract$_IERC20Detailed_$1464t_uint256t_uint256t_bytes_memory_ptrt_contract$_IParaSwapAugustus_$30951t_struct$_PermitSignature_$29019_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 320) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IERC20(value)\n        value0 := value\n        let _1 := 32\n        value1 := calldataload(add(headStart, _1))\n        value2 := calldataload(add(headStart, 64))\n        let offset := calldataload(add(headStart, 96))\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n        let _4 := calldataload(_3)\n        if gt(_4, _2) { panic_error_0x41() }\n        let array := allocate_memory(add(and(add(_4, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), _1))\n        mstore(array, _4)\n        if gt(add(add(_3, _4), _1), dataEnd) { revert(0, 0) }\n        calldatacopy(add(array, _1), add(_3, _1), _4)\n        mstore(add(add(array, _4), _1), 0)\n        value3 := array\n        value4 := abi_decode_contract_IParaSwapAugustus(add(headStart, 128))\n        value5 := abi_decode_struct_PermitSignature(add(headStart, 160), dataEnd)\n    }\n    function abi_encode_tuple_t_stringliteral_f73db277b52b12832d4a33a7ef8ea973b58412dbb6a626efd61c48d6a6304661__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 27)\n        mstore(add(headStart, 64), \"INSUFFICIENT_AMOUNT_TO_SWAP\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_struct$_PermitSignature_$29019_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := abi_decode_struct_PermitSignature(headStart, dataEnd)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_address_t_rational_0_by_1__to_t_address_t_uint256_t_address_t_uint16__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), and(value3, 0xffff))\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"GPv2: failed transfer\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_022eae30fcc9137c0a8a102622bef17a0e0924cb859bf7da56a882760f0b9317__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 27)\n        mstore(add(headStart, 64), \"INSUFFICIENT_ATOKEN_BALANCE\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x20) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x20)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        value := memPtr\n        mstore(memPtr, mload(headStart))\n    }\n    function abi_decode_uint128_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint40_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint16_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        validator_revert_contract_IERC20(value)\n    }\n    function abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 480) { revert(0, 0) }\n        let value := allocate_memory_3071()\n        mstore(value, abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, dataEnd))\n        mstore(add(value, 32), abi_decode_uint128_fromMemory(add(headStart, 32)))\n        mstore(add(value, 64), abi_decode_uint128_fromMemory(add(headStart, 64)))\n        mstore(add(value, 96), abi_decode_uint128_fromMemory(add(headStart, 96)))\n        mstore(add(value, 128), abi_decode_uint128_fromMemory(add(headStart, 128)))\n        mstore(add(value, 160), abi_decode_uint128_fromMemory(add(headStart, 160)))\n        mstore(add(value, 192), abi_decode_uint40_fromMemory(add(headStart, 192)))\n        mstore(add(value, 224), abi_decode_uint16_fromMemory(add(headStart, 224)))\n        let _1 := 256\n        mstore(add(value, _1), abi_decode_address_fromMemory(add(headStart, _1)))\n        let _2 := 288\n        mstore(add(value, _2), abi_decode_address_fromMemory(add(headStart, _2)))\n        let _3 := 320\n        mstore(add(value, _3), abi_decode_address_fromMemory(add(headStart, _3)))\n        let _4 := 352\n        mstore(add(value, _4), abi_decode_address_fromMemory(add(headStart, _4)))\n        let _5 := 384\n        mstore(add(value, _5), abi_decode_uint128_fromMemory(add(headStart, _5)))\n        let _6 := 416\n        mstore(add(value, _6), abi_decode_uint128_fromMemory(add(headStart, _6)))\n        let _7 := 448\n        mstore(add(value, _7), abi_decode_uint128_fromMemory(add(headStart, _7)))\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xff))\n        mstore(add(headStart, 160), value5)\n        mstore(add(headStart, 192), value6)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_85a045c7862eb0e81d59fe8dfd2ed8c824917ce215328caf39199676e5939f87__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 27)\n        mstore(add(headStart, 64), \"UNEXPECTED_AMOUNT_WITHDRAWN\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_3202e1fc4f78abbce03a97de69392b3f69ebba48c41588ffb32a1c8b97349f74__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"INVALID_AUGUSTUS\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint256(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, exponent)\n    }\n    function abi_encode_tuple_t_stringliteral_8333172953304c474b0cfe8eccb09fd2b08c1198c3d73a3ed0388645fb84d24e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"MIN_AMOUNT_EXCEEDS_MAX_SLIPPAGE\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_51fc4946c16284910827fc38bc7611d60d4dd1f7d8fefa0da6f8642035c3c48b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"INSUFFICIENT_BALANCE_BEFORE_SWAP\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IERC20(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_f920786e74a0af1b51a64ca021265d328aab062025c81f249165aca83960cff7__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"FROM_AMOUNT_OFFSET_OUT_OF_RANGE\")\n        tail := add(headStart, 96)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_9bfa76b9c2e298d52f58639e051d7d21997f6c435f534dfd0c2e6c351c64a39a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 24)\n        mstore(add(headStart, 64), \"WRONG_BALANCE_AFTER_SWAP\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_74fc5696336325aeb54c5d19133ed01308c8174de21fc66f38ac28668f995bc7__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 28)\n        mstore(add(headStart, 64), \"INSUFFICIENT_AMOUNT_RECEIVED\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 54)\n        mstore(add(headStart, 64), \"SafeERC20: approve from non-zero\")\n        mstore(add(headStart, 96), \" to non-zero allowance\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"GPv2: failed transferFrom\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_uint8_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_uint8(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_fc5915f8715e0da4bd5e6487e67e57e89850a48fc18d4e921a811a8c928ad119__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 26)\n        mstore(add(headStart, 64), \"TOO_MANY_DECIMALS_ON_TOKEN\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n        mstore(add(headStart, 96), \"ot succeed\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n        mstore(add(headStart, 96), \"r call\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"3442":[{"length":32,"start":231}],"3446":[{"length":32,"start":456},{"length":32,"start":1041},{"length":32,"start":2031},{"length":32,"start":2097},{"length":32,"start":2223},{"length":32,"start":3448},{"length":32,"start":3514},{"length":32,"start":3642},{"length":32,"start":3793},{"length":32,"start":3836},{"length":32,"start":4120},{"length":32,"start":4557}],"29025":[{"length":32,"start":370},{"length":32,"start":8013}],"29593":[{"length":32,"start":409},{"length":32,"start":4850}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100c85760003560e01c80633a829867116100815780638da5cb5b1161005b5780638da5cb5b146101ea578063d3454a3514610208578063f2fde38b1461021b57600080fd5b80633a82986714610194578063715018a6146101bb5780637535d246146101c357600080fd5b80631b11d0ff116100b25780631b11d0ff1461013357806332e4b2861461015657806338013f021461016d57600080fd5b8062ae3bf8146100cd5780630542975c146100e2575b600080fd5b6100e06100db366004612352565b61022e565b005b6101097f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101466101413660046123b8565b610385565b604051901515815260200161012a565b61015f610bb881565b60405190815260200161012a565b6101097f000000000000000000000000000000000000000000000000000000000000000081565b6101097f000000000000000000000000000000000000000000000000000000000000000081565b6100e06104e7565b6101097f000000000000000000000000000000000000000000000000000000000000000081565b60005473ffffffffffffffffffffffffffffffffffffffff16610109565b6100e0610216366004612444565b6105d7565b6100e0610229366004612352565b61091c565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6103826102d660005473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610340573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103649190612516565b73ffffffffffffffffffffffffffffffffffffffff84169190610acd565b50565b6000600260015414156103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102ab565b60026001553373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f43414c4c45525f4d5553545f42455f504f4f4c0000000000000000000000000060448201526064016102ab565b85858589600080808080806104af8c8e018e612661565b9550955095509550955095506104cd848484848e8e8e8e8e8e610ba6565b505060018080559f9e505050505050505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102ab565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60026001541415610644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102ab565b600260015560006106548a610f53565b610100015190508515610761576040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa1580156106ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f29190612516565b90508881111561075e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f494e53554646494349454e545f414d4f554e545f544f5f53574150000000000060448201526064016102ab565b97505b61077c8a82338b6107773688900388018861275c565b61108a565b60006107d18787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050868e8e8e8e6112aa565b905061081573ffffffffffffffffffffffffffffffffffffffff8b167f00000000000000000000000000000000000000000000000000000000000000006000611a9e565b61085673ffffffffffffffffffffffffffffffffffffffff8b167f000000000000000000000000000000000000000000000000000000000000000083611a9e565b6040517fe8eda9df00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015260248201839052336044830152600060648301527f0000000000000000000000000000000000000000000000000000000000000000169063e8eda9df90608401600060405180830381600087803b1580156108f357600080fd5b505af1158015610907573d6000803e3d6000fd5b50506001805550505050505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461099d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102ab565b73ffffffffffffffffffffffffffffffffffffffff8116610a40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102ab565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1610b30573d6000803e3d6000fd5b50610b3a84611c5c565b610ba0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e73666572000000000000000000000060448201526064016102ab565b50505050565b6000610bb184610f53565b61010001516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529192508891600091908416906370a0823190602401602060405180830381865afa158015610c2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4f9190612516565b90508c15610cd6576000610c63828a611d28565b905082811115610ccf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f494e53554646494349454e545f414d4f554e545f544f5f53574150000000000060448201526064016102ab565b9150610d49565b610ce08289611d38565b811015610d49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f494e53554646494349454e545f41544f4b454e5f42414c414e4345000000000060448201526064016102ab565b6000610d5a8e8e8e8a8a888b6112aa565b9050610d9e73ffffffffffffffffffffffffffffffffffffffff87167f00000000000000000000000000000000000000000000000000000000000000006000611a9e565b610ddf73ffffffffffffffffffffffffffffffffffffffff87167f000000000000000000000000000000000000000000000000000000000000000083611a9e565b6040517fe8eda9df00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018390528981166044830152600060648301527f0000000000000000000000000000000000000000000000000000000000000000169063e8eda9df90608401600060405180830381600087803b158015610e7e57600080fd5b505af1158015610e92573d6000803e3d6000fd5b50505050610eb587858a610eaf8d88611d3890919063ffffffff16565b8f61108a565b610ef773ffffffffffffffffffffffffffffffffffffffff88167f00000000000000000000000000000000000000000000000000000000000000006000611a9e565b610f437f0000000000000000000000000000000000000000000000000000000000000000610f258c8c611d38565b73ffffffffffffffffffffffffffffffffffffffff8a169190611a9e565b5050505050505050505050505050565b604080516102008101825260006101e08201818152825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c08101919091526040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa158015611060573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611084919061280c565b92915050565b60208101511561115757805160208201516040808401516060850151608086015192517fd505accf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301523060248301526044820196909652606481019490945260ff909116608484015260a483015260c48201529085169063d505accf9060e401600060405180830381600087803b15801561113e57600080fd5b505af1158015611152573d6000803e3d6000fd5b505050505b61117973ffffffffffffffffffffffffffffffffffffffff8516843085611d48565b6040517f69328dec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820184905230604483015283917f0000000000000000000000000000000000000000000000000000000000000000909116906369328dec906064016020604051808303816000875af1158015611218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123c9190612516565b146112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f554e45585045435445445f414d4f554e545f57495448445241574e000000000060448201526064016102ab565b5050505050565b6040517ffb04e17b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063fb04e17b90602401602060405180830381865afa15801561133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135f919061292f565b6113c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f494e56414c49445f41554755535455530000000000000000000000000000000060448201526064016102ab565b60006113d086611e23565b60ff16905060006113e086611e23565b60ff16905060006113f088611f05565b905060006113fd88611f05565b90506000611455611412610bb8612710612980565b61144f61142a61142389600a612ab7565b8690611fba565b61144961144261143b8a600a612ab7565b8990611fba565b8d90611fba565b90611fe4565b90611ff7565b9050868111156114c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4d494e5f414d4f554e545f455843454544535f4d41585f534c4950504147450060448201526064016102ab565b50506040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000935073ffffffffffffffffffffffffffffffffffffffff891692506370a082319150602401602060405180830381865afa158015611533573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115579190612516565b9050838110156115c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f494e53554646494349454e545f42414c414e43455f4245464f52455f5357415060448201526064016102ab565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8716906370a0823190602401602060405180830381865afa158015611630573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116549190612516565b905060008873ffffffffffffffffffffffffffffffffffffffff1663d2c4b5986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c79190612ac3565b90506116eb73ffffffffffffffffffffffffffffffffffffffff8916826000611a9e565b61170c73ffffffffffffffffffffffffffffffffffffffff89168288611a9e565b8a1561179e5760048b1015801561172f5750895161172b906020611d28565b8b11155b611795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f46524f4d5f414d4f554e545f4f46465345545f4f55545f4f465f52414e47450060448201526064016102ab565b8560208c018b01525b60008973ffffffffffffffffffffffffffffffffffffffff168b6040516117c59190612b0c565b6000604051808303816000865af19150503d8060008114611802576040519150601f19603f3d011682016040523d82523d6000602084013e611807565b606091505b505090508061181a573d6000803e3d6000fd5b6118248785612980565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8b16906370a0823190602401602060405180830381865afa15801561188e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b29190612516565b14611919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f57524f4e475f42414c414e43455f41465445525f53574150000000000000000060448201526064016102ab565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526119b390849073ffffffffffffffffffffffffffffffffffffffff8b16906370a0823190602401602060405180830381865afa158015611989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ad9190612516565b90611d28565b945085851015611a1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f494e53554646494349454e545f414d4f554e545f52454345495645440000000060448201526064016102ab565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fa078c4190abe07940190effc1846be0ccf03ad6007bc9e93f9697d0b460befbb8988604051611a87929190918252602082015260400190565b60405180910390a350505050979650505050505050565b801580611b3e57506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611b18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3c9190612516565b155b611bca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016102ab565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052611c5790849061203a565b505050565b6000611c9c565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d8015611cdb5760208114611d1557611cd67f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f611c63565b611d22565b823b611d0c57611d0c7f475076323a206e6f74206120636f6e74726163740000000000000000000000006014611c63565b60019150611d22565b3d6000803e600051151591505b50919050565b8082038281111561108457600080fd5b8082018281101561108457600080fd5b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af1611db3573d6000803e3d6000fd5b50611dbd85611c5c565b6112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d0000000000000060448201526064016102ab565b6000808273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e959190612b28565b9050604d8160ff161115611084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f544f4f5f4d414e595f444543494d414c535f4f4e5f544f4b454e00000000000060448201526064016102ab565b6040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063b3596f0790602401602060405180830381865afa158015611f96573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110849190612516565b6000821580611fdb57505081810281838281611fd857611fd8612b45565b04145b61108457600080fd5b6000611ff08284612b74565b9392505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec778390048411151761202c57600080fd5b506127109102611388010490565b600061209c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166121469092919063ffffffff16565b805190915015611c5757808060200190518101906120ba919061292f565b611c57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016102ab565b6060612155848460008561215d565b949350505050565b6060824710156121ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016102ab565b843b612257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102ab565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516122809190612b0c565b60006040518083038185875af1925050503d80600081146122bd576040519150601f19603f3d011682016040523d82523d6000602084013e6122c2565b606091505b50915091506122d28282866122dd565b979650505050505050565b606083156122ec575081611ff0565b8251156122fc5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ab9190612baf565b73ffffffffffffffffffffffffffffffffffffffff8116811461038257600080fd5b60006020828403121561236457600080fd5b8135611ff081612330565b60008083601f84011261238157600080fd5b50813567ffffffffffffffff81111561239957600080fd5b6020830191508360208285010111156123b157600080fd5b9250929050565b60008060008060008060a087890312156123d157600080fd5b86356123dc81612330565b9550602087013594506040870135935060608701356123fa81612330565b9250608087013567ffffffffffffffff81111561241657600080fd5b61242289828a0161236f565b979a9699509497509295939492505050565b803561243f81612330565b919050565b6000806000806000806000806000898b0361018081121561246457600080fd5b8a3561246f81612330565b995060208b013561247f81612330565b985060408b0135975060608b0135965060808b0135955060a08b013567ffffffffffffffff8111156124b057600080fd5b6124bc8d828e0161236f565b90965094505060c08b01356124d081612330565b925060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff208201121561250257600080fd5b5060e08a0190509295985092959850929598565b60006020828403121561252857600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff811182821017156125825761258261252f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156125cf576125cf61252f565b604052919050565b60ff8116811461038257600080fd5b600060a082840312156125f857600080fd5b60405160a0810181811067ffffffffffffffff8211171561261b5761261b61252f565b80604052508091508235815260208301356020820152604083013561263f816125d7565b8060408301525060608301356060820152608083013560808201525092915050565b600080600080600080610140878903121561267b57600080fd5b863561268681612330565b9550602087810135955060408801359450606088013567ffffffffffffffff808211156126b257600080fd5b818a0191508a601f8301126126c657600080fd5b8135818111156126d8576126d861252f565b612708847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612588565b91508082528b8482850101111561271e57600080fd5b808484018584013760008482840101525080955050505061274160808801612434565b91506127508860a089016125e6565b90509295509295509295565b600060a0828403121561276e57600080fd5b611ff083836125e6565b60006020828403121561278a57600080fd5b6040516020810181811067ffffffffffffffff821117156127ad576127ad61252f565b6040529151825250919050565b80516fffffffffffffffffffffffffffffffff8116811461243f57600080fd5b805164ffffffffff8116811461243f57600080fd5b805161ffff8116811461243f57600080fd5b805161243f81612330565b60006101e0828403121561281f57600080fd5b61282761255e565b6128318484612778565b815261283f602084016127ba565b6020820152612850604084016127ba565b6040820152612861606084016127ba565b6060820152612872608084016127ba565b608082015261288360a084016127ba565b60a082015261289460c084016127da565b60c08201526128a560e084016127ef565b60e08201526101006128b8818501612801565b908201526101206128ca848201612801565b908201526101406128dc848201612801565b908201526101606128ee848201612801565b908201526101806129008482016127ba565b908201526101a06129128482016127ba565b908201526101c06129248482016127ba565b908201529392505050565b60006020828403121561294157600080fd5b81518015158114611ff057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561299257612992612951565b500390565b600181815b808511156129f057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156129d6576129d6612951565b808516156129e357918102915b93841c939080029061299c565b509250929050565b600082612a0757506001611084565b81612a1457506000611084565b8160018114612a2a5760028114612a3457612a50565b6001915050611084565b60ff841115612a4557612a45612951565b50506001821b611084565b5060208310610133831016604e8410600b8410161715612a73575081810a611084565b612a7d8383612997565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612aaf57612aaf612951565b029392505050565b6000611ff083836129f8565b600060208284031215612ad557600080fd5b8151611ff081612330565b60005b83811015612afb578181015183820152602001612ae3565b83811115610ba05750506000910152565b60008251612b1e818460208701612ae0565b9190910192915050565b600060208284031215612b3a57600080fd5b8151611ff0816125d7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612baa577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6020815260008251806020840152612bce816040850160208701612ae0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220d742a96723f1970e9be4e635661c51fc280b36297aa324d0112f594d85ef64d164736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC8 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3A829867 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0xD3454A35 EQ PUSH2 0x208 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3A829867 EQ PUSH2 0x194 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1BB JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x1C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1B11D0FF GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x1B11D0FF EQ PUSH2 0x133 JUMPI DUP1 PUSH4 0x32E4B286 EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0x38013F02 EQ PUSH2 0x16D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH3 0xAE3BF8 EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0x542975C EQ PUSH2 0xE2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE0 PUSH2 0xDB CALLDATASIZE PUSH1 0x4 PUSH2 0x2352 JUMP JUMPDEST PUSH2 0x22E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x109 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x146 PUSH2 0x141 CALLDATASIZE PUSH1 0x4 PUSH2 0x23B8 JUMP JUMPDEST PUSH2 0x385 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12A JUMP JUMPDEST PUSH2 0x15F PUSH2 0xBB8 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12A JUMP JUMPDEST PUSH2 0x109 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x109 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0xE0 PUSH2 0x4E7 JUMP JUMPDEST PUSH2 0x109 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x109 JUMP JUMPDEST PUSH2 0xE0 PUSH2 0x216 CALLDATASIZE PUSH1 0x4 PUSH2 0x2444 JUMP JUMPDEST PUSH2 0x5D7 JUMP JUMPDEST PUSH2 0xE0 PUSH2 0x229 CALLDATASIZE PUSH1 0x4 PUSH2 0x2352 JUMP JUMPDEST PUSH2 0x91C JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x2B4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x382 PUSH2 0x2D6 PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x340 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x364 SWAP2 SWAP1 PUSH2 0x2516 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP2 SWAP1 PUSH2 0xACD JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 PUSH1 0x1 SLOAD EQ ISZERO PUSH2 0x3F4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x2 PUSH1 0x1 SSTORE CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x498 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43414C4C45525F4D5553545F42455F504F4F4C00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST DUP6 DUP6 DUP6 DUP10 PUSH1 0x0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x4AF DUP13 DUP15 ADD DUP15 PUSH2 0x2661 JUMP JUMPDEST SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP PUSH2 0x4CD DUP5 DUP5 DUP5 DUP5 DUP15 DUP15 DUP15 DUP15 DUP15 DUP15 PUSH2 0xBA6 JUMP JUMPDEST POP POP PUSH1 0x1 DUP1 DUP1 SSTORE SWAP16 SWAP15 POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x568 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x2 PUSH1 0x1 SLOAD EQ ISZERO PUSH2 0x644 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x2 PUSH1 0x1 SSTORE PUSH1 0x0 PUSH2 0x654 DUP11 PUSH2 0xF53 JUMP JUMPDEST PUSH2 0x100 ADD MLOAD SWAP1 POP DUP6 ISZERO PUSH2 0x761 JUMPI PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6F2 SWAP2 SWAP1 PUSH2 0x2516 JUMP JUMPDEST SWAP1 POP DUP9 DUP2 GT ISZERO PUSH2 0x75E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F414D4F554E545F544F5F535741500000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST SWAP8 POP JUMPDEST PUSH2 0x77C DUP11 DUP3 CALLER DUP12 PUSH2 0x777 CALLDATASIZE DUP9 SWAP1 SUB DUP9 ADD DUP9 PUSH2 0x275C JUMP JUMPDEST PUSH2 0x108A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7D1 DUP8 DUP8 DUP8 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP7 DUP15 DUP15 DUP15 DUP15 PUSH2 0x12AA JUMP JUMPDEST SWAP1 POP PUSH2 0x815 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND PUSH32 0x0 PUSH1 0x0 PUSH2 0x1A9E JUMP JUMPDEST PUSH2 0x856 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND PUSH32 0x0 DUP4 PUSH2 0x1A9E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE8EDA9DF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE CALLER PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x64 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xE8EDA9DF SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x907 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x1 DUP1 SSTORE POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x99D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xA40 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0xB30 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0xB3A DUP5 PUSH2 0x1C5C JUMP JUMPDEST PUSH2 0xBA0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBB1 DUP5 PUSH2 0xF53 JUMP JUMPDEST PUSH2 0x100 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP3 POP DUP9 SWAP2 PUSH1 0x0 SWAP2 SWAP1 DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC2B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC4F SWAP2 SWAP1 PUSH2 0x2516 JUMP JUMPDEST SWAP1 POP DUP13 ISZERO PUSH2 0xCD6 JUMPI PUSH1 0x0 PUSH2 0xC63 DUP3 DUP11 PUSH2 0x1D28 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 GT ISZERO PUSH2 0xCCF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F414D4F554E545F544F5F535741500000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST SWAP2 POP PUSH2 0xD49 JUMP JUMPDEST PUSH2 0xCE0 DUP3 DUP10 PUSH2 0x1D38 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0xD49 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F41544F4B454E5F42414C414E43450000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD5A DUP15 DUP15 DUP15 DUP11 DUP11 DUP9 DUP12 PUSH2 0x12AA JUMP JUMPDEST SWAP1 POP PUSH2 0xD9E PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH32 0x0 PUSH1 0x0 PUSH2 0x1A9E JUMP JUMPDEST PUSH2 0xDDF PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH32 0x0 DUP4 PUSH2 0x1A9E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE8EDA9DF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE DUP10 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x64 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xE8EDA9DF SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE92 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0xEB5 DUP8 DUP6 DUP11 PUSH2 0xEAF DUP14 DUP9 PUSH2 0x1D38 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP16 PUSH2 0x108A JUMP JUMPDEST PUSH2 0xEF7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH32 0x0 PUSH1 0x0 PUSH2 0x1A9E JUMP JUMPDEST PUSH2 0xF43 PUSH32 0x0 PUSH2 0xF25 DUP13 DUP13 PUSH2 0x1D38 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP2 SWAP1 PUSH2 0x1A9E JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x200 DUP2 ADD DUP3 MSTORE PUSH1 0x0 PUSH2 0x1E0 DUP3 ADD DUP2 DUP2 MSTORE DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1A0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1060 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1084 SWAP2 SWAP1 PUSH2 0x280C JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD ISZERO PUSH2 0x1157 JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP1 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x80 DUP7 ADD MLOAD SWAP3 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x64 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0xFF SWAP1 SWAP2 AND PUSH1 0x84 DUP5 ADD MSTORE PUSH1 0xA4 DUP4 ADD MSTORE PUSH1 0xC4 DUP3 ADD MSTORE SWAP1 DUP6 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x113E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1152 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0x1179 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 ADDRESS DUP6 PUSH2 0x1D48 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x69328DEC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP5 SWAP1 MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE DUP4 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x69328DEC SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1218 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x123C SWAP2 SWAP1 PUSH2 0x2516 JUMP JUMPDEST EQ PUSH2 0x12A3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x554E45585045435445445F414D4F554E545F57495448445241574E0000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFB04E17B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xFB04E17B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x133B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x135F SWAP2 SWAP1 PUSH2 0x292F JUMP JUMPDEST PUSH2 0x13C5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F415547555354555300000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x13D0 DUP7 PUSH2 0x1E23 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH1 0x0 PUSH2 0x13E0 DUP7 PUSH2 0x1E23 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH1 0x0 PUSH2 0x13F0 DUP9 PUSH2 0x1F05 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x13FD DUP9 PUSH2 0x1F05 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1455 PUSH2 0x1412 PUSH2 0xBB8 PUSH2 0x2710 PUSH2 0x2980 JUMP JUMPDEST PUSH2 0x144F PUSH2 0x142A PUSH2 0x1423 DUP10 PUSH1 0xA PUSH2 0x2AB7 JUMP JUMPDEST DUP7 SWAP1 PUSH2 0x1FBA JUMP JUMPDEST PUSH2 0x1449 PUSH2 0x1442 PUSH2 0x143B DUP11 PUSH1 0xA PUSH2 0x2AB7 JUMP JUMPDEST DUP10 SWAP1 PUSH2 0x1FBA JUMP JUMPDEST DUP14 SWAP1 PUSH2 0x1FBA JUMP JUMPDEST SWAP1 PUSH2 0x1FE4 JUMP JUMPDEST SWAP1 PUSH2 0x1FF7 JUMP JUMPDEST SWAP1 POP DUP7 DUP2 GT ISZERO PUSH2 0x14C1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D494E5F414D4F554E545F455843454544535F4D41585F534C49505041474500 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP3 POP PUSH4 0x70A08231 SWAP2 POP PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1533 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1557 SWAP2 SWAP1 PUSH2 0x2516 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0x15C3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F42414C414E43455F4245464F52455F53574150 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1630 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1654 SWAP2 SWAP1 PUSH2 0x2516 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD2C4B598 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16A3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16C7 SWAP2 SWAP1 PUSH2 0x2AC3 JUMP JUMPDEST SWAP1 POP PUSH2 0x16EB PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP3 PUSH1 0x0 PUSH2 0x1A9E JUMP JUMPDEST PUSH2 0x170C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP3 DUP9 PUSH2 0x1A9E JUMP JUMPDEST DUP11 ISZERO PUSH2 0x179E JUMPI PUSH1 0x4 DUP12 LT ISZERO DUP1 ISZERO PUSH2 0x172F JUMPI POP DUP10 MLOAD PUSH2 0x172B SWAP1 PUSH1 0x20 PUSH2 0x1D28 JUMP JUMPDEST DUP12 GT ISZERO JUMPDEST PUSH2 0x1795 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46524F4D5F414D4F554E545F4F46465345545F4F55545F4F465F52414E474500 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST DUP6 PUSH1 0x20 DUP13 ADD DUP12 ADD MSTORE JUMPDEST PUSH1 0x0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH1 0x40 MLOAD PUSH2 0x17C5 SWAP2 SWAP1 PUSH2 0x2B0C 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 0x1802 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 0x1807 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x181A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x1824 DUP8 DUP6 PUSH2 0x2980 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x188E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18B2 SWAP2 SWAP1 PUSH2 0x2516 JUMP JUMPDEST EQ PUSH2 0x1919 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x57524F4E475F42414C414E43455F41465445525F535741500000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x19B3 SWAP1 DUP5 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1989 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19AD SWAP2 SWAP1 PUSH2 0x2516 JUMP JUMPDEST SWAP1 PUSH2 0x1D28 JUMP JUMPDEST SWAP5 POP DUP6 DUP6 LT ISZERO PUSH2 0x1A1F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F414D4F554E545F524543454956454400000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xA078C4190ABE07940190EFFC1846BE0CCF03AD6007BC9E93F9697D0B460BEFBB DUP10 DUP9 PUSH1 0x40 MLOAD PUSH2 0x1A87 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x1B3E JUMPI POP PUSH1 0x40 MLOAD PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B18 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B3C SWAP2 SWAP1 PUSH2 0x2516 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x1BCA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x20746F206E6F6E2D7A65726F20616C6C6F77616E636500000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB 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 0x95EA7B300000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x1C57 SWAP1 DUP5 SWAP1 PUSH2 0x203A JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C9C JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x1CDB JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x1D15 JUMPI PUSH2 0x1CD6 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x1C63 JUMP JUMPDEST PUSH2 0x1D22 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x1D0C JUMPI PUSH2 0x1D0C PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x1C63 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x1D22 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0x1084 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x1084 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x1DB3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1DBD DUP6 PUSH2 0x1C5C JUMP JUMPDEST PUSH2 0x12A3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E71 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E95 SWAP2 SWAP1 PUSH2 0x2B28 JUMP JUMPDEST SWAP1 POP PUSH1 0x4D DUP2 PUSH1 0xFF AND GT ISZERO PUSH2 0x1084 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x544F4F5F4D414E595F444543494D414C535F4F4E5F544F4B454E000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F96 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1084 SWAP2 SWAP1 PUSH2 0x2516 JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 PUSH2 0x1FDB JUMPI POP POP DUP2 DUP2 MUL DUP2 DUP4 DUP3 DUP2 PUSH2 0x1FD8 JUMPI PUSH2 0x1FD8 PUSH2 0x2B45 JUMP JUMPDEST DIV EQ JUMPDEST PUSH2 0x1084 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1FF0 DUP3 DUP5 PUSH2 0x2B74 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x202C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x209C DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x2146 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1C57 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x20BA SWAP2 SWAP1 PUSH2 0x292F JUMP JUMPDEST PUSH2 0x1C57 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F74207375636365656400000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x60 PUSH2 0x2155 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x215D JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x21EF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x722063616C6C0000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB JUMP JUMPDEST DUP5 EXTCODESIZE PUSH2 0x2257 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x2280 SWAP2 SWAP1 PUSH2 0x2B0C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x22BD 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 0x22C2 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x22D2 DUP3 DUP3 DUP7 PUSH2 0x22DD JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x22EC JUMPI POP DUP2 PUSH2 0x1FF0 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x22FC JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2AB SWAP2 SWAP1 PUSH2 0x2BAF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2364 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1FF0 DUP2 PUSH2 0x2330 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2381 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2399 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x23B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x23D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x23DC DUP2 PUSH2 0x2330 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0x23FA DUP2 PUSH2 0x2330 JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2416 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2422 DUP10 DUP3 DUP11 ADD PUSH2 0x236F JUMP JUMPDEST SWAP8 SWAP11 SWAP7 SWAP10 POP SWAP5 SWAP8 POP SWAP3 SWAP6 SWAP4 SWAP5 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x243F DUP2 PUSH2 0x2330 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP10 DUP12 SUB PUSH2 0x180 DUP2 SLT ISZERO PUSH2 0x2464 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP11 CALLDATALOAD PUSH2 0x246F DUP2 PUSH2 0x2330 JUMP JUMPDEST SWAP10 POP PUSH1 0x20 DUP12 ADD CALLDATALOAD PUSH2 0x247F DUP2 PUSH2 0x2330 JUMP JUMPDEST SWAP9 POP PUSH1 0x40 DUP12 ADD CALLDATALOAD SWAP8 POP PUSH1 0x60 DUP12 ADD CALLDATALOAD SWAP7 POP PUSH1 0x80 DUP12 ADD CALLDATALOAD SWAP6 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x24B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x24BC DUP14 DUP3 DUP15 ADD PUSH2 0x236F JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP POP PUSH1 0xC0 DUP12 ADD CALLDATALOAD PUSH2 0x24D0 DUP2 PUSH2 0x2330 JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 DUP3 ADD SLT ISZERO PUSH2 0x2502 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xE0 DUP11 ADD SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2528 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2582 JUMPI PUSH2 0x2582 PUSH2 0x252F JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x25CF JUMPI PUSH2 0x25CF PUSH2 0x252F JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x25F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x261B JUMPI PUSH2 0x261B PUSH2 0x252F JUMP JUMPDEST DUP1 PUSH1 0x40 MSTORE POP DUP1 SWAP2 POP DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD PUSH2 0x263F DUP2 PUSH2 0x25D7 JUMP JUMPDEST DUP1 PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x140 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x267B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x2686 DUP2 PUSH2 0x2330 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 DUP2 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x26B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP11 ADD SWAP2 POP DUP11 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x26C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x26D8 JUMPI PUSH2 0x26D8 PUSH2 0x252F JUMP JUMPDEST PUSH2 0x2708 DUP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x2588 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP12 DUP5 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x271E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP5 DUP5 ADD DUP6 DUP5 ADD CALLDATACOPY PUSH1 0x0 DUP5 DUP3 DUP5 ADD ADD MSTORE POP DUP1 SWAP6 POP POP POP POP PUSH2 0x2741 PUSH1 0x80 DUP9 ADD PUSH2 0x2434 JUMP JUMPDEST SWAP2 POP PUSH2 0x2750 DUP9 PUSH1 0xA0 DUP10 ADD PUSH2 0x25E6 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x276E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1FF0 DUP4 DUP4 PUSH2 0x25E6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x278A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x27AD JUMPI PUSH2 0x27AD PUSH2 0x252F JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x243F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x243F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x243F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x243F DUP2 PUSH2 0x2330 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x281F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2827 PUSH2 0x255E JUMP JUMPDEST PUSH2 0x2831 DUP5 DUP5 PUSH2 0x2778 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x283F PUSH1 0x20 DUP5 ADD PUSH2 0x27BA JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2850 PUSH1 0x40 DUP5 ADD PUSH2 0x27BA JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x2861 PUSH1 0x60 DUP5 ADD PUSH2 0x27BA JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x2872 PUSH1 0x80 DUP5 ADD PUSH2 0x27BA JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x2883 PUSH1 0xA0 DUP5 ADD PUSH2 0x27BA JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x2894 PUSH1 0xC0 DUP5 ADD PUSH2 0x27DA JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x28A5 PUSH1 0xE0 DUP5 ADD PUSH2 0x27EF JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x28B8 DUP2 DUP6 ADD PUSH2 0x2801 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x28CA DUP5 DUP3 ADD PUSH2 0x2801 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x28DC DUP5 DUP3 ADD PUSH2 0x2801 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x28EE DUP5 DUP3 ADD PUSH2 0x2801 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x2900 DUP5 DUP3 ADD PUSH2 0x27BA JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x2912 DUP5 DUP3 ADD PUSH2 0x27BA JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x2924 DUP5 DUP3 ADD PUSH2 0x27BA JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2941 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1FF0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x2992 JUMPI PUSH2 0x2992 PUSH2 0x2951 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x29F0 JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x29D6 JUMPI PUSH2 0x29D6 PUSH2 0x2951 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x29E3 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x299C JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2A07 JUMPI POP PUSH1 0x1 PUSH2 0x1084 JUMP JUMPDEST DUP2 PUSH2 0x2A14 JUMPI POP PUSH1 0x0 PUSH2 0x1084 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x2A2A JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x2A34 JUMPI PUSH2 0x2A50 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x1084 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x2A45 JUMPI PUSH2 0x2A45 PUSH2 0x2951 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x1084 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x2A73 JUMPI POP DUP2 DUP2 EXP PUSH2 0x1084 JUMP JUMPDEST PUSH2 0x2A7D DUP4 DUP4 PUSH2 0x2997 JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x2AAF JUMPI PUSH2 0x2AAF PUSH2 0x2951 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1FF0 DUP4 DUP4 PUSH2 0x29F8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2AD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1FF0 DUP2 PUSH2 0x2330 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2AFB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2AE3 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xBA0 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x2B1E DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x2AE0 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2B3A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1FF0 DUP2 PUSH2 0x25D7 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2BAA JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x2BCE DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x2AE0 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD7 TIMESTAMP 0xA9 PUSH8 0x23F1970E9BE4E635 PUSH7 0x1C51FC280B3629 PUSH27 0xA324D0112F594D85EF64D164736F6C634300080A00330000000000 ","sourceMap":"1009:7481:109:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4630:125:106;;;;;;:::i;:::-;;:::i;:::-;;489:67:25;;;;;;;;663:42:201;651:55;;;633:74;;621:2;606:18;489:67:25;;;;;;;;2684:1047:109;;;;;;:::i;:::-;;:::i;:::-;;;2079:14:201;;2072:22;2054:41;;2042:2;2027:18;2684:1047:109;1914:187:201;1570:51:106;;1617:4;1570:51;;;;;2252:25:201;;;2240:2;2225:18;1570:51:106;2106:177:201;1633:42:106;;;;;1104:60:108;;;;;1601:135:11;;;:::i;560:36:25:-;;;;;1018:71:11;1056:7;1078:6;;;1018:71;;4845:1172:109;;;;;;:::i;:::-;;:::i;1875:226:11:-;;;;;;:::i;:::-;;:::i;4630:125:106:-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;5278:2:201;1196:67:11;;;5260:21:201;;;5297:18;;;5290:30;5356:34;5336:18;;;5329:62;5408:18;;1196:67:11;;;;;;;;;4691:59:106::1;4710:7;1056::11::0;1078:6;;;;1018:71;4710:7:106::1;4719:30;::::0;;;;4743:4:::1;4719:30;::::0;::::1;633:74:201::0;4719:15:106::1;::::0;::::1;::::0;::::1;::::0;606:18:201;;4719:30:106::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4691:18;::::0;::::1;::::0;:59;:18:::1;:59::i;:::-;4630:125:::0;:::o;2684:1047:109:-;2864:4;1657:1:114;2202:7;;:19;;2194:63;;;;;;;5828:2:201;2194:63:114;;;5810:21:201;5867:2;5847:18;;;5840:30;5906:33;5886:18;;;5879:61;5957:18;;2194:63:114;5626:355:201;2194:63:114;1657:1;2324:7;:18;2884:10:109::1;:27;2906:4;2884:27;;2876:59;;;::::0;::::1;::::0;;6188:2:201;2876:59:109::1;::::0;::::1;6170:21:201::0;6227:2;6207:18;;;6200:30;6266:21;6246:18;;;6239:49;6305:18;;2876:59:109::1;5986:343:201::0;2876:59:109::1;2968:6:::0;3003:7;3041:9;3104:5;2942:23:::1;::::0;;;;;3341:121:::1;::::0;;::::1;3361:6:::0;3341:121:::1;:::i;:::-;3116:346;;;;;;;;;;;;3469:239;3491:20;3519:12;3539:8;3555:12;3575:15;3598:12;3618:14;3640:15;3663:13;3684:18;3469:14;:239::i;:::-;-1:-1:-1::0;;3722:4:109::1;2481:22:114::0;;;3722:4:109;2684:1047;-1:-1:-1;;;;;;;;;;;;;;;2684:1047:109:o;1601:135:11:-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;5278:2:201;1196:67:11;;;5260:21:201;;;5297:18;;;5290:30;5356:34;5336:18;;;5329:62;5408:18;;1196:67:11;5076:356:201;1196:67:11;1703:1:::1;1687:6:::0;;1666:40:::1;::::0;::::1;1687:6:::0;;::::1;::::0;1666:40:::1;::::0;1703:1;;1666:40:::1;1729:1;1712:19:::0;;;::::1;::::0;;1601:135::o;4845:1172:109:-;1657:1:114;2202:7;;:19;;2194:63;;;;;;;5828:2:201;2194:63:114;;;5810:21:201;5867:2;5847:18;;;5840:30;5906:33;5886:18;;;5879:61;5957:18;;2194:63:114;5626:355:201;2194:63:114;1657:1;2324:7;:18;5171:23:109::1;5221:41;5245:15:::0;5221::::1;:41::i;:::-;:55;;::::0;;-1:-1:-1;5293:25:109;;5289:193:::1;;5346:28;::::0;;;;5363:10:::1;5346:28;::::0;::::1;633:74:201::0;5328:15:109::1;::::0;5346:16:::1;::::0;::::1;::::0;::::1;::::0;606:18:201;;5346:28:109::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5328:46;;5401:12;5390:7;:23;;5382:63;;;::::0;::::1;::::0;;9580:2:201;5382:63:109::1;::::0;::::1;9562:21:201::0;9619:2;9599:18;;;9592:30;9658:29;9638:18;;;9631:57;9705:18;;5382:63:109::1;9378:351:201::0;5382:63:109::1;5468:7:::0;-1:-1:-1;5289:193:109::1;5488:132;5526:15:::0;5550:6;5564:10:::1;5582:12:::0;5488:132:::1;;::::0;;::::1;::::0;::::1;5602:12:::0;5488:132:::1;:::i;:::-;:22;:132::i;:::-;5627:22;5652:175;5675:20;5703:12;;5652:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5723:8;5739:15;5762:13;5783:12;5803:18;5652:15;:175::i;:::-;5627:200:::0;-1:-1:-1;5834:43:109::1;:25;::::0;::::1;5868:4;5875:1;5834:25;:43::i;:::-;5883:56;:25;::::0;::::1;5917:4;5924:14:::0;5883:25:::1;:56::i;:::-;5945:67;::::0;;;;:12:::1;10301:15:201::0;;;5945:67:109::1;::::0;::::1;10283:34:201::0;10333:18;;;10326:34;;;5998:10:109::1;10376:18:201::0;;;10369:43;6010:1:109::1;10428:18:201::0;;;10421:47;5945:4:109::1;:12;::::0;::::1;::::0;10194:19:201;;5945:67:109::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;1616:1:114;2481:22;;-1:-1:-1;;;;;;;;;;;;;4845:1172:109:o;1875:226:11:-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;5278:2:201;1196:67:11;;;5260:21:201;;;5297:18;;;5290:30;5356:34;5336:18;;;5329:62;5408:18;;1196:67:11;5076:356:201;1196:67:11;1959:22:::1;::::0;::::1;1951:73;;;::::0;::::1;::::0;;10681:2:201;1951:73:11::1;::::0;::::1;10663:21:201::0;10720:2;10700:18;;;10693:30;10759:34;10739:18;;;10732:62;10830:8;10810:18;;;10803:36;10856:19;;1951:73:11::1;10479:402:201::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;::::1;::::0;;::::1;::::0;2056:6;::::1;::::0;2035:38:::1;::::0;::::1;2079:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1875:226::o;441:657:1:-;668:4;662:11;538:23;680:36;;;765:42;757:51;;753:1;730:25;;723:86;846:2;823:26;;816:41;;;538:23;519:16;;916:2;662:11;519:16;887:5;880;875:50;865:154;;958:16;955:1;952;937:38;994:16;991:1;984:27;865:154;;1039:28;1061:5;1039:21;:28::i;:::-;1031:62;;;;;;;11088:2:201;1031:62:1;;;11070:21:201;11127:2;11107:18;;;11100:30;11166:23;11146:18;;;11139:51;11207:18;;1031:62:1;10886:345:201;1031:62:1;513:585;441:657;;;:::o;6919:1569:109:-;7275:23;7325:41;7349:15;7325;:41::i;:::-;:55;;;7455:27;;;;;:16;651:55:201;;;7455:27:109;;;633:74:201;7325:55:109;;-1:-1:-1;7415:15:109;;7392:20;;7455:16;;;;;;606:18:201;;7455:27:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7437:45;-1:-1:-1;7492:25:109;;7488:300;;7527:21;7551:20;:7;7563;7551:11;:20::i;:::-;7527:44;;7604:12;7587:13;:29;;7579:69;;;;;;;9580:2:201;7579:69:109;;;9562:21:201;9619:2;9599:18;;;9592:30;9658:29;9638:18;;;9631:57;9705:18;;7579:69:109;9378:351:201;7579:69:109;7671:13;-1:-1:-1;7488:300:109;;;7724:25;:12;7741:7;7724:16;:25::i;:::-;7713:7;:36;;7705:76;;;;;;;11438:2:201;7705:76:109;;;11420:21:201;11477:2;11457:18;;;11450:30;11516:29;11496:18;;;11489:57;11563:18;;7705:76:109;11236:351:201;7705:76:109;7794:22;7819:175;7842:20;7870:12;7890:8;7906:15;7929:13;7950:12;7970:18;7819:15;:175::i;:::-;7794:200;-1:-1:-1;8001:43:109;:25;;;8035:4;8042:1;8001:25;:43::i;:::-;8050:56;:25;;;8084:4;8091:14;8050:25;:56::i;:::-;8112:66;;;;;:12;10301:15:201;;;8112:66:109;;;10283:34:201;10333:18;;;10326:34;;;10396:15;;;10376:18;;;10369:43;8176:1:109;10428:18:201;;;10421:47;8112:4:109;:12;;;;10194:19:201;;8112:66:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8185:144;8223:15;8247:6;8261:9;8278:25;8295:7;8278:12;:16;;:25;;;;:::i;:::-;8311:12;8185:22;:144::i;:::-;8360:45;:27;;;8396:4;8403:1;8360:27;:45::i;:::-;8411:72;8447:4;8454:28;:15;8474:7;8454:19;:28::i;:::-;8411:27;;;;:72;:27;:72::i;:::-;7269:1219;;;;6919:1569;;;;;;;;;;:::o;2841:137:106:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2947:26:106;;;;;:19;651:55:201;;;2947:26:106;;;633:74:201;2947:4:106;:19;;;;606:18:201;;2947:26:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2940:33;2841:137;-1:-1:-1;;2841:137:106:o;3650:760::-;3919:24;;;;:29;3915:262;;4025:22;;4057:24;;;;4091:17;;;;;4118;;;;4145;;;;3958:212;;;;;:20;14760:15:201;;;3958:212:106;;;14742:34:201;4010:4:106;14792:18:201;;;14785:43;14844:18;;;14837:34;;;;14887:18;;;14880:34;;;;14963:4;14951:17;;;14930:19;;;14923:46;14985:19;;;14978:35;15029:19;;;15022:35;3958:20:106;;;;;;14653:19:201;;3958:212:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3915:262;4220:59;:30;;;4251:4;4265;4272:6;4220:30;:59::i;:::-;4318:45;;;;;:13;15349:15:201;;;4318:45:106;;;15331:34:201;15381:18;;;15374:34;;;4357:4:106;15424:18:201;;;15417:43;4367:6:106;;4318:4;:13;;;;;;15243:18:201;;4318:45:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;4310:95;;;;;;;15673:2:201;4310:95:106;;;15655:21:201;15712:2;15692:18;;;15685:30;15751:29;15731:18;;;15724:57;15798:18;;4310:95:106;15471:351:201;4310:95:106;3650:760;;;;;:::o;2141:2743:108:-;2447:52;;;;;:33;651:55:201;;;2447:52:108;;;633:74:201;2409:22:108;;2447:17;:33;;;;;;606:18:201;;2447:52:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2439:81;;;;;;;16311:2:201;2439:81:108;;;16293:21:201;16350:2;16330:18;;;16323:30;16389:18;16369;;;16362:46;16425:18;;2439:81:108;16109:340:201;2439:81:108;2535:25;2563:29;2576:15;2563:12;:29::i;:::-;2535:57;;;;2600:23;2626:27;2639:13;2626:12;:27::i;:::-;2600:53;;;;2662:22;2687:35;2705:15;2687:9;:35::i;:::-;2662:60;;2730:20;2753:33;2771:13;2753:9;:33::i;:::-;2730:56;-1:-1:-1;2795:28:108;2826:201;2971:55;1617:4:106;524:3:89;2971:55:108;:::i;:::-;2826:124;2908:41;2925:23;2931:17;2925:2;:23;:::i;:::-;2908:12;;:16;:41::i;:::-;2826:68;2852:41;2871:21;2877:15;2871:2;:21;:::i;:::-;2852:14;;:18;:41::i;:::-;2826:12;;:25;:68::i;:::-;:81;;:124::i;:::-;:144;;:201::i;:::-;2795:232;;3068:18;3044:20;:42;;3036:86;;;;;;;18469:2:201;3036:86:108;;;18451:21:201;18508:2;18488:18;;;18481:30;18547:33;18527:18;;;18520:61;18598:18;;3036:86:108;18267:355:201;3036:86:108;-1:-1:-1;;3168:40:108;;;;;3202:4;3168:40;;;633:74:201;3135:30:108;;-1:-1:-1;3168:25:108;;;;-1:-1:-1;3168:25:108;;-1:-1:-1;606:18:201;;3168:40:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3135:73;;3248:12;3222:22;:38;;3214:83;;;;;;;18829:2:201;3214:83:108;;;18811:21:201;;;18848:18;;;18841:30;18907:34;18887:18;;;18880:62;18959:18;;3214:83:108;18627:356:201;3214:83:108;3334:38;;;;;3366:4;3334:38;;;633:74:201;3303:28:108;;3334:23;;;;;;606:18:201;;3334:38:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3303:69;;3379:26;3408:8;:30;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3379:61;-1:-1:-1;3446:50:108;:27;;;3379:61;3494:1;3446:27;:50::i;:::-;3502:61;:27;;;3530:18;3550:12;3502:27;:61::i;:::-;3574:21;;3570:666;;3797:1;3777:16;:21;;:72;;;;-1:-1:-1;3822:19:108;;:27;;3846:2;3822:23;:27::i;:::-;3802:16;:47;;3777:72;3760:140;;;;;;;19454:2:201;3760:140:108;;;19436:21:201;19493:2;19473:18;;;19466:30;19532:33;19512:18;;;19505:61;19583:18;;3760:140:108;19252:355:201;3760:140:108;4209:12;4203:2;4185:16;4181:25;4167:12;4163:44;4156:66;3570:666;4242:12;4268:8;4260:22;;4283:12;4260:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4241:55;;;4307:7;4302:167;;4402:16;4399:1;;4381:38;4438:16;4399:1;4428:27;4302:167;4533:37;4558:12;4533:22;:37;:::i;:::-;4489:40;;;;;4523:4;4489:40;;;633:74:201;4489:25:108;;;;;;606:18:201;;4489:40:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:81;4474:136;;;;;;;20356:2:201;4474:136:108;;;20338:21:201;20395:2;20375:18;;;20368:30;20434:26;20414:18;;;20407:54;20478:18;;4474:136:108;20154:348:201;4474:136:108;4633:38;;;;;4665:4;4633:38;;;633:74:201;4633:64:108;;4676:20;;4633:23;;;;;;606:18:201;;4633:38:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;:64::i;:::-;4616:81;;4729:18;4711:14;:36;;4703:77;;;;;;;20709:2:201;4703:77:108;;;20691:21:201;20748:2;20728:18;;;20721:30;20787;20767:18;;;20760:58;20835:18;;4703:77:108;20507:352:201;4703:77:108;4834:13;4792:87;;4808:15;4792:87;;;4850:12;4864:14;4792:87;;;;;;21038:25:201;;;21094:2;21079:18;;21072:34;21026:2;21011:18;;20864:248;4792:87:108;;;;;;;;2433:2451;;;;2141:2743;;;;;;;;;:::o;1315:535:13:-;1618:10;;;1617:62;;-1:-1:-1;1634:39:13;;;;;1658:4;1634:39;;;21352:34:201;1634:15:13;21422::201;;;21402:18;;;21395:43;1634:15:13;;;;;21264:18:201;;1634:39:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;1617:62;1602:147;;;;;;;21651:2:201;1602:147:13;;;21633:21:201;21690:2;21670:18;;;21663:30;21729:34;21709:18;;;21702:62;21800:24;21780:18;;;21773:52;21842:19;;1602:147:13;21449:418:201;1602:147:13;1782:62;;;22076:42:201;22064:55;;1782:62:13;;;22046:74:201;22136:18;;;;22129:34;;;1782:62:13;;;;;;;;;;22019:18:201;;;;1782:62:13;;;;;;;;;;1805:22;1782:62;;;1755:90;;1775:5;;1755:19;:90::i;:::-;1315:535;;;:::o;2198:2524:1:-;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;4611:1;4605:8;4598:16;4591:24;4580:35;;3538:1174;;2198:2524;;;:::o;693:129:14:-;799:5;;;794:16;;;;786:25;;;;;410:129;516:5;;;511:16;;;;503:25;;;;;1228:780:1;1477:4;1471:11;1343:27;1489:36;;;1576:42;1566:53;;;1562:1;1539:25;;1532:88;1662:51;;1657:2;1634:26;;1627:87;1751:2;1728:26;;1721:41;;;1343:27;1324:16;;1821:3;1471:11;1324:16;1792:5;1785;1780:51;1770:155;;1864:16;1861:1;1858;1843:38;1900:16;1897:1;1890:27;1770:155;;1945:28;1967:5;1945:21;:28::i;:::-;1937:66;;;;;;;22376:2:201;1937:66:1;;;22358:21:201;22415:2;22395:18;;;22388:30;22454:27;22434:18;;;22427:55;22499:18;;1937:66:1;22174:349:201;2491:250:106;2558:5;2571:14;2588:5;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2571:33;;2682:2;2670:8;:14;;;;2662:53;;;;;;;22982:2:201;2662:53:106;;;22964:21:201;23021:2;23001:18;;;22994:30;23060:28;23040:18;;;23033:56;23106:18;;2662:53:106;22780:350:201;2280:111:106;2359:27;;;;;:20;651:55:201;;;2359:27:106;;;633:74:201;2337:7:106;;2359:6;:20;;;;;;606:18:201;;2359:27:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1327:143:14:-;1385:9;1428:6;;;:30;;-1:-1:-1;;1443:5:14;;;1457:1;1452;1443:5;1452:1;1438:15;;;;:::i;:::-;;:20;1428:30;1420:39;;;;;1678:92;1736:9;1760:5;1764:1;1760;:5;:::i;:::-;1753:12;1678:92;-1:-1:-1;;;1678:92:14:o;1005:496:89:-;1083:14;1248:18;;1299:35;1295:52;;;1285:63;;1278:71;1234:125;1215:183;;1388:1;1385;1378:12;1215:183;-1:-1:-1;1473:17:89;1424:22;;1448;1420:51;1416:75;;1005:496::o;2961:668:13:-;3364:23;3390:69;3418:4;3390:69;;;;;;;;;;;;;;;;;3398:5;3390:27;;;;:69;;;;;:::i;:::-;3469:17;;3364:95;;-1:-1:-1;3469:21:13;3465:160;;3552:10;3541:30;;;;;;;;;;;;:::i;:::-;3533:85;;;;;;;23805:2:201;3533:85:13;;;23787:21:201;23844:2;23824:18;;;23817:30;23883:34;23863:18;;;23856:62;23954:12;23934:18;;;23927:40;23984:19;;3533:85:13;23603:406:201;3336:203:3;3455:12;3482:52;3504:6;3512:4;3518:1;3521:12;3482:21;:52::i;:::-;3475:59;3336:203;-1:-1:-1;;;;3336:203:3:o;4345:463::-;4492:12;4545:5;4520:21;:30;;4512:81;;;;;;;24216:2:201;4512:81:3;;;24198:21:201;24255:2;24235:18;;;24228:30;24294:34;24274:18;;;24267:62;24365:8;24345:18;;;24338:36;24391:19;;4512:81:3;24014:402:201;4512:81:3;1025:20;;4599:60;;;;;;;24623:2:201;4599:60:3;;;24605:21:201;24662:2;24642:18;;;24635:30;24701:31;24681:18;;;24674:59;24750:18;;4599:60:3;24421:353:201;4599:60:3;4667:12;4681:23;4708:6;:11;;4727:5;4734:4;4708:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4666:73;;;;4752:51;4769:7;4778:10;4790:12;4752:16;:51::i;:::-;4745:58;4345:463;-1:-1:-1;;;;;;;4345:463:3:o;6796:582::-;6928:12;6952:7;6948:426;;;-1:-1:-1;6976:10:3;6969:17;;6948:426;7071:17;;:21;7067:301;;7239:10;7233:17;7289:15;7276:10;7272:2;7268:19;7261:44;7067:301;7346:12;7339:20;;;;;;;;;;;:::i;14:162:201:-;108:42;101:5;97:54;90:5;87:65;77:93;;166:1;163;156:12;181:270;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;363:9;350:23;382:39;415:5;382:39;:::i;718:347::-;769:8;779:6;833:3;826:4;818:6;814:17;810:27;800:55;;851:1;848;841:12;800:55;-1:-1:-1;874:20:201;;917:18;906:30;;903:50;;;949:1;946;939:12;903:50;986:4;978:6;974:17;962:29;;1038:3;1031:4;1022:6;1014;1010:19;1006:30;1003:39;1000:59;;;1055:1;1052;1045:12;1000:59;718:347;;;;;:::o;1070:839::-;1176:6;1184;1192;1200;1208;1216;1269:3;1257:9;1248:7;1244:23;1240:33;1237:53;;;1286:1;1283;1276:12;1237:53;1325:9;1312:23;1344:39;1377:5;1344:39;:::i;:::-;1402:5;-1:-1:-1;1454:2:201;1439:18;;1426:32;;-1:-1:-1;1505:2:201;1490:18;;1477:32;;-1:-1:-1;1561:2:201;1546:18;;1533:32;1574:41;1533:32;1574:41;:::i;:::-;1634:7;-1:-1:-1;1692:3:201;1677:19;;1664:33;1720:18;1709:30;;1706:50;;;1752:1;1749;1742:12;1706:50;1791:58;1841:7;1832:6;1821:9;1817:22;1791:58;:::i;:::-;1070:839;;;;-1:-1:-1;1070:839:201;;-1:-1:-1;1070:839:201;;1868:8;;1070:839;-1:-1:-1;;;1070:839:201:o;3288:161::-;3375:20;;3404:39;3375:20;3404:39;:::i;:::-;3288:161;;;:::o;3454:1357::-;3696:6;3704;3712;3720;3728;3736;3744;3752;3760;3804:9;3795:7;3791:23;3834:3;3830:2;3826:12;3823:32;;;3851:1;3848;3841:12;3823:32;3890:9;3877:23;3909:39;3942:5;3909:39;:::i;:::-;3967:5;-1:-1:-1;4024:2:201;4009:18;;3996:32;4037:41;3996:32;4037:41;:::i;:::-;4097:7;-1:-1:-1;4151:2:201;4136:18;;4123:32;;-1:-1:-1;4202:2:201;4187:18;;4174:32;;-1:-1:-1;4253:3:201;4238:19;;4225:33;;-1:-1:-1;4309:3:201;4294:19;;4281:33;4337:18;4326:30;;4323:50;;;4369:1;4366;4359:12;4323:50;4408:58;4458:7;4449:6;4438:9;4434:22;4408:58;:::i;:::-;4485:8;;-1:-1:-1;4382:84:201;-1:-1:-1;;4572:3:201;4557:19;;4544:33;4586:41;4544:33;4586:41;:::i;:::-;4646:7;-1:-1:-1;4746:3:201;4677:66;4669:75;;4665:85;4662:105;;;4763:1;4760;4753:12;4662:105;;4801:3;4790:9;4786:19;4776:29;;3454:1357;;;;;;;;;;;:::o;5437:184::-;5507:6;5560:2;5548:9;5539:7;5535:23;5531:32;5528:52;;;5576:1;5573;5566:12;5528:52;-1:-1:-1;5599:16:201;;5437:184;-1:-1:-1;5437:184:201:o;6334:::-;6386:77;6383:1;6376:88;6483:4;6480:1;6473:15;6507:4;6504:1;6497:15;6523:252;6595:2;6589:9;6637:3;6625:16;;6671:18;6656:34;;6692:22;;;6653:62;6650:88;;;6718:18;;:::i;:::-;6754:2;6747:22;6523:252;:::o;6780:334::-;6851:2;6845:9;6907:2;6897:13;;6912:66;6893:86;6881:99;;7010:18;6995:34;;7031:22;;;6992:62;6989:88;;;7057:18;;:::i;:::-;7093:2;7086:22;6780:334;;-1:-1:-1;6780:334:201:o;7119:114::-;7203:4;7196:5;7192:16;7185:5;7182:27;7172:55;;7223:1;7220;7213:12;7238:751;7300:5;7348:4;7336:9;7331:3;7327:19;7323:30;7320:50;;;7366:1;7363;7356:12;7320:50;7399:2;7393:9;7441:4;7433:6;7429:17;7512:6;7500:10;7497:22;7476:18;7464:10;7461:34;7458:62;7455:88;;;7523:18;;:::i;:::-;7563:10;7559:2;7552:22;;7592:6;7583:15;;7635:9;7622:23;7614:6;7607:39;7707:2;7696:9;7692:18;7679:32;7674:2;7666:6;7662:15;7655:57;7764:2;7753:9;7749:18;7736:32;7777:31;7800:7;7777:31;:::i;:::-;7841:7;7836:2;7828:6;7824:15;7817:32;;7910:2;7899:9;7895:18;7882:32;7877:2;7869:6;7865:15;7858:57;7977:3;7966:9;7962:19;7949:33;7943:3;7935:6;7931:16;7924:59;;7238:751;;;;:::o;7994:1379::-;8191:6;8199;8207;8215;8223;8231;8284:3;8272:9;8263:7;8259:23;8255:33;8252:53;;;8301:1;8298;8291:12;8252:53;8340:9;8327:23;8359:39;8392:5;8359:39;:::i;:::-;8417:5;-1:-1:-1;8441:2:201;8475:18;;;8462:32;;-1:-1:-1;8541:2:201;8526:18;;8513:32;;-1:-1:-1;8596:2:201;8581:18;;8568:32;8619:18;8649:14;;;8646:34;;;8676:1;8673;8666:12;8646:34;8714:6;8703:9;8699:22;8689:32;;8759:7;8752:4;8748:2;8744:13;8740:27;8730:55;;8781:1;8778;8771:12;8730:55;8817:2;8804:16;8839:2;8835;8832:10;8829:36;;;8845:18;;:::i;:::-;8887:112;8995:2;8926:66;8919:4;8915:2;8911:13;8907:86;8903:95;8887:112;:::i;:::-;8874:125;;9022:2;9015:5;9008:17;9062:7;9057:2;9052;9048;9044:11;9040:20;9037:33;9034:53;;;9083:1;9080;9073:12;9034:53;9138:2;9133;9129;9125:11;9120:2;9113:5;9109:14;9096:45;9182:1;9177:2;9172;9165:5;9161:14;9157:23;9150:34;;9203:5;9193:15;;;;;9227:58;9280:3;9269:9;9265:19;9227:58;:::i;:::-;9217:68;;9304:63;9359:7;9353:3;9342:9;9338:19;9304:63;:::i;:::-;9294:73;;7994:1379;;;;;;;;:::o;9734:245::-;9827:6;9880:3;9868:9;9859:7;9855:23;9851:33;9848:53;;;9897:1;9894;9887:12;9848:53;9920;9965:7;9954:9;9920:53;:::i;11592:426::-;11673:5;11721:4;11709:9;11704:3;11700:19;11696:30;11693:50;;;11739:1;11736;11729:12;11693:50;11772:2;11766:9;11814:4;11806:6;11802:17;11885:6;11873:10;11870:22;11849:18;11837:10;11834:34;11831:62;11828:88;;;11896:18;;:::i;:::-;11932:2;11925:22;11995:16;;11980:32;;-1:-1:-1;11965:6:201;11592:426;-1:-1:-1;11592:426:201:o;12023:192::-;12102:13;;12155:34;12144:46;;12134:57;;12124:85;;12205:1;12202;12195:12;12220:169;12298:13;;12351:12;12340:24;;12330:35;;12320:63;;12379:1;12376;12369:12;12394:163;12472:13;;12525:6;12514:18;;12504:29;;12494:57;;12547:1;12544;12537:12;12562:146;12641:13;;12663:39;12641:13;12663:39;:::i;12713:1652::-;12813:6;12866:3;12854:9;12845:7;12841:23;12837:33;12834:53;;;12883:1;12880;12873:12;12834:53;12909:22;;:::i;:::-;12954:72;13018:7;13007:9;12954:72;:::i;:::-;12947:5;12940:87;13059:49;13104:2;13093:9;13089:18;13059:49;:::i;:::-;13054:2;13047:5;13043:14;13036:73;13141:49;13186:2;13175:9;13171:18;13141:49;:::i;:::-;13136:2;13129:5;13125:14;13118:73;13223:49;13268:2;13257:9;13253:18;13223:49;:::i;:::-;13218:2;13211:5;13207:14;13200:73;13306:50;13351:3;13340:9;13336:19;13306:50;:::i;:::-;13300:3;13293:5;13289:15;13282:75;13390:50;13435:3;13424:9;13420:19;13390:50;:::i;:::-;13384:3;13377:5;13373:15;13366:75;13474:49;13518:3;13507:9;13503:19;13474:49;:::i;:::-;13468:3;13461:5;13457:15;13450:74;13557:49;13601:3;13590:9;13586:19;13557:49;:::i;:::-;13551:3;13544:5;13540:15;13533:74;13626:3;13661:49;13706:2;13695:9;13691:18;13661:49;:::i;:::-;13645:14;;;13638:73;13730:3;13765:49;13795:18;;;13765:49;:::i;:::-;13749:14;;;13742:73;13834:3;13869:49;13899:18;;;13869:49;:::i;:::-;13853:14;;;13846:73;13938:3;13973:49;14003:18;;;13973:49;:::i;:::-;13957:14;;;13950:73;14042:3;14077:49;14107:18;;;14077:49;:::i;:::-;14061:14;;;14054:73;14146:3;14181:49;14211:18;;;14181:49;:::i;:::-;14165:14;;;14158:73;14250:3;14285:49;14315:18;;;14285:49;:::i;:::-;14269:14;;;14262:73;14273:5;12713:1652;-1:-1:-1;;;12713:1652:201:o;15827:277::-;15894:6;15947:2;15935:9;15926:7;15922:23;15918:32;15915:52;;;15963:1;15960;15953:12;15915:52;15995:9;15989:16;16048:5;16041:13;16034:21;16027:5;16024:32;16014:60;;16070:1;16067;16060:12;16454:184;16506:77;16503:1;16496:88;16603:4;16600:1;16593:15;16627:4;16624:1;16617:15;16643:125;16683:4;16711:1;16708;16705:8;16702:34;;;16716:18;;:::i;:::-;-1:-1:-1;16753:9:201;;16643:125::o;16773:482::-;16862:1;16905:5;16862:1;16919:330;16940:7;16930:8;16927:21;16919:330;;;17059:4;16991:66;16987:77;16981:4;16978:87;16975:113;;;17068:18;;:::i;:::-;17118:7;17108:8;17104:22;17101:55;;;17138:16;;;;17101:55;17217:22;;;;17177:15;;;;16919:330;;;16923:3;16773:482;;;;;:::o;17260:866::-;17309:5;17339:8;17329:80;;-1:-1:-1;17380:1:201;17394:5;;17329:80;17428:4;17418:76;;-1:-1:-1;17465:1:201;17479:5;;17418:76;17510:4;17528:1;17523:59;;;;17596:1;17591:130;;;;17503:218;;17523:59;17553:1;17544:10;;17567:5;;;17591:130;17628:3;17618:8;17615:17;17612:43;;;17635:18;;:::i;:::-;-1:-1:-1;;17691:1:201;17677:16;;17706:5;;17503:218;;17805:2;17795:8;17792:16;17786:3;17780:4;17777:13;17773:36;17767:2;17757:8;17754:16;17749:2;17743:4;17740:12;17736:35;17733:77;17730:159;;;-1:-1:-1;17842:19:201;;;17874:5;;17730:159;17921:34;17946:8;17940:4;17921:34;:::i;:::-;18051:6;17983:66;17979:79;17970:7;17967:92;17964:118;;;18062:18;;:::i;:::-;18100:20;;17260:866;-1:-1:-1;;;17260:866:201:o;18131:131::-;18191:5;18220:36;18247:8;18241:4;18220:36;:::i;18988:259::-;19058:6;19111:2;19099:9;19090:7;19086:23;19082:32;19079:52;;;19127:1;19124;19117:12;19079:52;19159:9;19153:16;19178:39;19211:5;19178:39;:::i;19612:258::-;19684:1;19694:113;19708:6;19705:1;19702:13;19694:113;;;19784:11;;;19778:18;19765:11;;;19758:39;19730:2;19723:10;19694:113;;;19825:6;19822:1;19819:13;19816:48;;;-1:-1:-1;;19860:1:201;19842:16;;19835:27;19612:258::o;19875:274::-;20004:3;20042:6;20036:13;20058:53;20104:6;20099:3;20092:4;20084:6;20080:17;20058:53;:::i;:::-;20127:16;;;;;19875:274;-1:-1:-1;;19875:274:201:o;22528:247::-;22596:6;22649:2;22637:9;22628:7;22624:23;22620:32;22617:52;;;22665:1;22662;22655:12;22617:52;22697:9;22691:16;22716:29;22739:5;22716:29;:::i;23135:184::-;23187:77;23184:1;23177:88;23284:4;23281:1;23274:15;23308:4;23305:1;23298:15;23324:274;23364:1;23390;23380:189;;23425:77;23422:1;23415:88;23526:4;23523:1;23516:15;23554:4;23551:1;23544:15;23380:189;-1:-1:-1;23583:9:201;;23324:274::o;24779:442::-;24928:2;24917:9;24910:21;24891:4;24960:6;24954:13;25003:6;24998:2;24987:9;24983:18;24976:34;25019:66;25078:6;25073:2;25062:9;25058:18;25053:2;25045:6;25041:15;25019:66;:::i;:::-;25137:2;25125:15;25142:66;25121:88;25106:104;;;;25212:2;25102:113;;24779:442;-1:-1:-1;;24779:442:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"2263600","executionCost":"infinite","totalCost":"infinite"},"external":{"ADDRESSES_PROVIDER()":"infinite","AUGUSTUS_REGISTRY()":"infinite","MAX_SLIPPAGE_PERCENT()":"240","ORACLE()":"infinite","POOL()":"infinite","executeOperation(address,uint256,uint256,address,bytes)":"infinite","owner()":"2318","renounceOwnership()":"30171","rescueTokens(address)":"infinite","swapAndDeposit(address,address,uint256,uint256,uint256,bytes,address,(uint256,uint256,uint8,bytes32,bytes32))":"infinite","transferOwnership(address)":"30385"},"internal":{"_swapLiquidity(uint256,bytes memory,contract IParaSwapAugustus,struct BaseParaSwapAdapter.PermitSignature memory,uint256,uint256,address,contract IERC20Detailed,contract IERC20Detailed,uint256)":"infinite"}},"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","AUGUSTUS_REGISTRY()":"3a829867","MAX_SLIPPAGE_PERCENT()":"32e4b286","ORACLE()":"38013f02","POOL()":"7535d246","executeOperation(address,uint256,uint256,address,bytes)":"1b11d0ff","owner()":"8da5cb5b","renounceOwnership()":"715018a6","rescueTokens(address)":"00ae3bf8","swapAndDeposit(address,address,uint256,uint256,uint256,bytes,address,(uint256,uint256,uint8,bytes32,bytes32))":"d3454a35","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"addressesProvider\",\"type\":\"address\"},{\"internalType\":\"contract IParaSwapAugustusRegistry\",\"name\":\"augustusRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAsset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"receivedAmount\",\"type\":\"uint256\"}],\"name\":\"Bought\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAsset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fromAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"receivedAmount\",\"type\":\"uint256\"}],\"name\":\"Swapped\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AUGUSTUS_REGISTRY\",\"outputs\":[{\"internalType\":\"contract IParaSwapAugustusRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_SLIPPAGE_PERCENT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ORACLE\",\"outputs\":[{\"internalType\":\"contract IPriceOracleGetter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"premium\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"executeOperation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"rescueTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Detailed\",\"name\":\"assetToSwapFrom\",\"type\":\"address\"},{\"internalType\":\"contract IERC20Detailed\",\"name\":\"assetToSwapTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountToSwap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountToReceive\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapAllBalanceOffset\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"swapCalldata\",\"type\":\"bytes\"},{\"internalType\":\"contract IParaSwapAugustus\",\"name\":\"augustus\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"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\"}],\"internalType\":\"struct BaseParaSwapAdapter.PermitSignature\",\"name\":\"permitParams\",\"type\":\"tuple\"}],\"name\":\"swapAndDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Jason Raymond Bell\",\"kind\":\"dev\",\"methods\":{\"executeOperation(address,uint256,uint256,address,bytes)\":{\"details\":\"Swaps the received reserve amount from the flash loan into the asset specified in the params. The received funds from the swap are then deposited into the protocol on behalf of the user. The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset and repay the flash loan.\",\"params\":{\"amount\":\"The amount of the flash-borrowed asset\",\"asset\":\"The address of the flash-borrowed asset\",\"initiator\":\"The address of the flashloan initiator\",\"params\":\"The byte-encoded params passed when initiating the flashloan\",\"premium\":\"The fee of the flash-borrowed asset\"},\"returns\":{\"_0\":\"True if the execution of the operation succeeds, false otherwise   address assetToSwapTo Address of the underlying asset to be swapped to and deposited   uint256 minAmountToReceive Min amount to be received from the swap   uint256 swapAllBalanceOffset Set to offset of fromAmount in Augustus calldata if wanting to swap all balance, otherwise 0   bytes swapCalldata Calldata for ParaSwap's AugustusSwapper contract   address augustus Address of ParaSwap's AugustusSwapper contract   PermitSignature permitParams Struct containing the permit signatures, set to all zeroes if not used\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"rescueTokens(address)\":{\"details\":\"Emergency rescue for token stucked on this contract, as failsafe mechanism - Funds should never remain in this contract more time than during transactions - Only callable by the owner\"},\"swapAndDeposit(address,address,uint256,uint256,uint256,bytes,address,(uint256,uint256,uint8,bytes32,bytes32))\":{\"details\":\"Swaps an amount of an asset to another and deposits the new asset amount on behalf of the user without using a flash loan. This method can be used when the temporary transfer of the collateral asset to this contract does not affect the user position. The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset and perform the swap.\",\"params\":{\"amountToSwap\":\"Amount to be swapped, or maximum amount when swapping all balance\",\"assetToSwapFrom\":\"Address of the underlying asset to be swapped from\",\"assetToSwapTo\":\"Address of the underlying asset to be swapped to and deposited\",\"augustus\":\"Address of ParaSwap's AugustusSwapper contract\",\"minAmountToReceive\":\"Minimum amount to be received from the swap\",\"permitParams\":\"Struct containing the permit signatures, set to all zeroes if not used\",\"swapAllBalanceOffset\":\"Set to offset of fromAmount in Augustus calldata if wanting to swap all balance, otherwise 0\",\"swapCalldata\":\"Calldata for ParaSwap's AugustusSwapper contract\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"ParaSwapLiquiditySwapAdapter\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Adapter to swap liquidity using ParaSwap.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/adapters/paraswap/ParaSwapLiquiditySwapAdapter.sol\":\"ParaSwapLiquiditySwapAdapter\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable is Context {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial owner.\\n   */\\n  constructor() {\\n    address msgSender = _msgSender();\\n    _owner = msgSender;\\n    emit OwnershipTransferred(address(0), msgSender);\\n  }\\n\\n  /**\\n   * @dev Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Leaves the contract without owner. It will not be possible to call\\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\\n   *\\n   * NOTE: Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public virtual onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = address(0);\\n  }\\n\\n  /**\\n   * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function transferOwnership(address newOwner) public virtual onlyOwner {\\n    require(newOwner != address(0), 'Ownable: new owner is the zero address');\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\",\"keccak256\":\"0x3ce185c4f579e32006f8893dbfdc1b5d878c0e2cafd1508f7ceb081698bc81f9\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport './IERC20.sol';\\nimport './Address.sol';\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n  using Address for address;\\n\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n  }\\n\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    _callOptionalReturn(\\n      token,\\n      abi.encodeWithSelector(token.transferFrom.selector, from, to, value)\\n    );\\n  }\\n\\n  /**\\n   * @dev Deprecated. This function has issues similar to the ones found in\\n   * {IERC20-approve}, and its usage is discouraged.\\n   *\\n   * Whenever possible, use {safeIncreaseAllowance} and\\n   * {safeDecreaseAllowance} instead.\\n   */\\n  function safeApprove(IERC20 token, address spender, uint256 value) internal {\\n    // safeApprove should only be called when setting an initial allowance,\\n    // or when resetting it to zero. To increase and decrease it, use\\n    // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n    require(\\n      (value == 0) || (token.allowance(address(this), spender) == 0),\\n      'SafeERC20: approve from non-zero to non-zero allowance'\\n    );\\n    _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n  }\\n\\n  function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n    uint256 newAllowance = token.allowance(address(this), spender) + value;\\n    _callOptionalReturn(\\n      token,\\n      abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\\n    );\\n  }\\n\\n  function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n    unchecked {\\n      uint256 oldAllowance = token.allowance(address(this), spender);\\n      require(oldAllowance >= value, 'SafeERC20: decreased allowance below zero');\\n      uint256 newAllowance = oldAllowance - value;\\n      _callOptionalReturn(\\n        token,\\n        abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n   * on the return value: the return value is optional (but if data is returned, it must not be false).\\n   * @param token The token targeted by the call.\\n   * @param data The call data (encoded using abi.encode or one of its variants).\\n   */\\n  function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n    // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n    // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n    // the target address contains contract code and also asserts for success in the low-level call.\\n\\n    bytes memory returndata = address(token).functionCall(data, 'SafeERC20: low-level call failed');\\n    if (returndata.length > 0) {\\n      // Return data is optional\\n      require(abi.decode(returndata, (bool)), 'SafeERC20: ERC20 operation did not succeed');\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x9ada5448c24f34f934122c0e11d1a89bf9a31b7ade0dcb935bd7dcb339ef7f32\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/// @title Optimized overflow and underflow safe math operations\\n/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\\nlibrary SafeMath {\\n  /// @notice Returns x + y, reverts if sum overflows uint256\\n  /// @param x The augend\\n  /// @param y The addend\\n  /// @return z The sum of x and y\\n  function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x + y) >= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @param message The error msg\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y, string memory message) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x, message);\\n    }\\n  }\\n\\n  /// @notice Returns x * y, reverts if overflows\\n  /// @param x The multiplicand\\n  /// @param y The multiplier\\n  /// @return z The product of x and y\\n  function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require(x == 0 || (z = x * y) / x == y);\\n    }\\n  }\\n\\n  /// @notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\\n  /// @param x The numerator\\n  /// @param y The denominator\\n  /// @return z The product of x and y\\n  function div(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    return x / y;\\n  }\\n}\\n\",\"keccak256\":\"0xf1c5d8ba70a5fc3e20dbbc2aa2a2278d2535a57bc1e9abf1228ebc3068a045f0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IFlashLoanSimpleReceiver} from '../interfaces/IFlashLoanSimpleReceiver.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title FlashLoanSimpleReceiverBase\\n * @author Aave\\n * @notice Base contract to develop a flashloan-receiver contract.\\n */\\nabstract contract FlashLoanSimpleReceiverBase is IFlashLoanSimpleReceiver {\\n  IPoolAddressesProvider public immutable override ADDRESSES_PROVIDER;\\n  IPool public immutable override POOL;\\n\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n    POOL = IPool(provider.getPool());\\n  }\\n}\\n\",\"keccak256\":\"0x3a04fc046c4f04c71ff230eba56e56bb718be41e4317f0c938bd287d81e384b1\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanSimpleReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanSimpleReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed asset\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param asset The address of the flash-borrowed asset\\n   * @param amount The amount of the flash-borrowed asset\\n   * @param premium The fee of the flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0xba50a7834ddfdca3e3cfac09043f72699be42ff88925641ac30950a434b2b2ff\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/adapters/paraswap/BaseParaSwapAdapter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {DataTypes} from '@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol';\\nimport {FlashLoanSimpleReceiverBase} from '@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol';\\nimport {GPv2SafeERC20} from '@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {IERC20WithPermit} from '@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol';\\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\\nimport {IPriceOracleGetter} from '@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol';\\nimport {SafeMath} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol';\\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\\n\\n/**\\n * @title BaseParaSwapAdapter\\n * @notice Utility functions for adapters using ParaSwap\\n * @author Jason Raymond Bell\\n */\\nabstract contract BaseParaSwapAdapter is FlashLoanSimpleReceiverBase, Ownable {\\n  using SafeMath for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using GPv2SafeERC20 for IERC20Detailed;\\n  using GPv2SafeERC20 for IERC20WithPermit;\\n\\n  struct PermitSignature {\\n    uint256 amount;\\n    uint256 deadline;\\n    uint8 v;\\n    bytes32 r;\\n    bytes32 s;\\n  }\\n\\n  // Max slippage percent allowed\\n  uint256 public constant MAX_SLIPPAGE_PERCENT = 3000; // 30%\\n\\n  IPriceOracleGetter public immutable ORACLE;\\n\\n  event Swapped(\\n    address indexed fromAsset,\\n    address indexed toAsset,\\n    uint256 fromAmount,\\n    uint256 receivedAmount\\n  );\\n  event Bought(\\n    address indexed fromAsset,\\n    address indexed toAsset,\\n    uint256 amountSold,\\n    uint256 receivedAmount\\n  );\\n\\n  constructor(\\n    IPoolAddressesProvider addressesProvider\\n  ) FlashLoanSimpleReceiverBase(addressesProvider) {\\n    ORACLE = IPriceOracleGetter(addressesProvider.getPriceOracle());\\n  }\\n\\n  /**\\n   * @dev Get the price of the asset from the oracle denominated in eth\\n   * @param asset address\\n   * @return eth price for the asset\\n   */\\n  function _getPrice(address asset) internal view returns (uint256) {\\n    return ORACLE.getAssetPrice(asset);\\n  }\\n\\n  /**\\n   * @dev Get the decimals of an asset\\n   * @return number of decimals of the asset\\n   */\\n  function _getDecimals(IERC20Detailed asset) internal view returns (uint8) {\\n    uint8 decimals = asset.decimals();\\n    // Ensure 10**decimals won't overflow a uint256\\n    require(decimals <= 77, 'TOO_MANY_DECIMALS_ON_TOKEN');\\n    return decimals;\\n  }\\n\\n  /**\\n   * @dev Get the aToken associated to the asset\\n   * @return address of the aToken\\n   */\\n  function _getReserveData(address asset) internal view returns (DataTypes.ReserveData memory) {\\n    return POOL.getReserveData(asset);\\n  }\\n\\n  function _pullATokenAndWithdraw(\\n    address reserve,\\n    address user,\\n    uint256 amount,\\n    PermitSignature memory permitSignature\\n  ) internal {\\n    IERC20WithPermit reserveAToken = IERC20WithPermit(\\n      _getReserveData(address(reserve)).aTokenAddress\\n    );\\n    _pullATokenAndWithdraw(reserve, reserveAToken, user, amount, permitSignature);\\n  }\\n\\n  /**\\n   * @dev Pull the ATokens from the user\\n   * @param reserve address of the asset\\n   * @param reserveAToken address of the aToken of the reserve\\n   * @param user address\\n   * @param amount of tokens to be transferred to the contract\\n   * @param permitSignature struct containing the permit signature\\n   */\\n  function _pullATokenAndWithdraw(\\n    address reserve,\\n    IERC20WithPermit reserveAToken,\\n    address user,\\n    uint256 amount,\\n    PermitSignature memory permitSignature\\n  ) internal {\\n    // If deadline is set to zero, assume there is no signature for permit\\n    if (permitSignature.deadline != 0) {\\n      reserveAToken.permit(\\n        user,\\n        address(this),\\n        permitSignature.amount,\\n        permitSignature.deadline,\\n        permitSignature.v,\\n        permitSignature.r,\\n        permitSignature.s\\n      );\\n    }\\n\\n    // transfer from user to adapter\\n    reserveAToken.safeTransferFrom(user, address(this), amount);\\n\\n    // withdraw reserve\\n    require(POOL.withdraw(reserve, amount, address(this)) == amount, 'UNEXPECTED_AMOUNT_WITHDRAWN');\\n  }\\n\\n  /**\\n   * @dev Emergency rescue for token stucked on this contract, as failsafe mechanism\\n   * - Funds should never remain in this contract more time than during transactions\\n   * - Only callable by the owner\\n   */\\n  function rescueTokens(IERC20 token) external onlyOwner {\\n    token.safeTransfer(owner(), token.balanceOf(address(this)));\\n  }\\n}\\n\",\"keccak256\":\"0xcd12294fd39d7cc5879af5570f55b6bb65200dfeb44c85d16225591127c58491\",\"license\":\"AGPL-3.0\"},\"contracts/adapters/paraswap/BaseParaSwapSellAdapter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {SafeERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol';\\nimport {SafeMath} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol';\\nimport {PercentageMath} from '@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol';\\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {IParaSwapAugustus} from './interfaces/IParaSwapAugustus.sol';\\nimport {IParaSwapAugustusRegistry} from './interfaces/IParaSwapAugustusRegistry.sol';\\nimport {BaseParaSwapAdapter} from './BaseParaSwapAdapter.sol';\\n\\n/**\\n * @title BaseParaSwapSellAdapter\\n * @notice Implements the logic for selling tokens on ParaSwap\\n * @author Jason Raymond Bell\\n */\\nabstract contract BaseParaSwapSellAdapter is BaseParaSwapAdapter {\\n  using PercentageMath for uint256;\\n  using SafeMath for uint256;\\n  using SafeERC20 for IERC20Detailed;\\n\\n  IParaSwapAugustusRegistry public immutable AUGUSTUS_REGISTRY;\\n\\n  constructor(\\n    IPoolAddressesProvider addressesProvider,\\n    IParaSwapAugustusRegistry augustusRegistry\\n  ) BaseParaSwapAdapter(addressesProvider) {\\n    // Do something on Augustus registry to check the right contract was passed\\n    require(!augustusRegistry.isValidAugustus(address(0)));\\n    AUGUSTUS_REGISTRY = augustusRegistry;\\n  }\\n\\n  /**\\n   * @dev Swaps a token for another using ParaSwap\\n   * @param fromAmountOffset Offset of fromAmount in Augustus calldata if it should be overwritten, otherwise 0\\n   * @param swapCalldata Calldata for ParaSwap's AugustusSwapper contract\\n   * @param augustus Address of ParaSwap's AugustusSwapper contract\\n   * @param assetToSwapFrom Address of the asset to be swapped from\\n   * @param assetToSwapTo Address of the asset to be swapped to\\n   * @param amountToSwap Amount to be swapped\\n   * @param minAmountToReceive Minimum amount to be received from the swap\\n   * @return amountReceived The amount received from the swap\\n   */\\n  function _sellOnParaSwap(\\n    uint256 fromAmountOffset,\\n    bytes memory swapCalldata,\\n    IParaSwapAugustus augustus,\\n    IERC20Detailed assetToSwapFrom,\\n    IERC20Detailed assetToSwapTo,\\n    uint256 amountToSwap,\\n    uint256 minAmountToReceive\\n  ) internal returns (uint256 amountReceived) {\\n    require(AUGUSTUS_REGISTRY.isValidAugustus(address(augustus)), 'INVALID_AUGUSTUS');\\n\\n    {\\n      uint256 fromAssetDecimals = _getDecimals(assetToSwapFrom);\\n      uint256 toAssetDecimals = _getDecimals(assetToSwapTo);\\n\\n      uint256 fromAssetPrice = _getPrice(address(assetToSwapFrom));\\n      uint256 toAssetPrice = _getPrice(address(assetToSwapTo));\\n\\n      uint256 expectedMinAmountOut = amountToSwap\\n        .mul(fromAssetPrice.mul(10 ** toAssetDecimals))\\n        .div(toAssetPrice.mul(10 ** fromAssetDecimals))\\n        .percentMul(PercentageMath.PERCENTAGE_FACTOR - MAX_SLIPPAGE_PERCENT);\\n\\n      require(expectedMinAmountOut <= minAmountToReceive, 'MIN_AMOUNT_EXCEEDS_MAX_SLIPPAGE');\\n    }\\n\\n    uint256 balanceBeforeAssetFrom = assetToSwapFrom.balanceOf(address(this));\\n    require(balanceBeforeAssetFrom >= amountToSwap, 'INSUFFICIENT_BALANCE_BEFORE_SWAP');\\n    uint256 balanceBeforeAssetTo = assetToSwapTo.balanceOf(address(this));\\n\\n    address tokenTransferProxy = augustus.getTokenTransferProxy();\\n    assetToSwapFrom.safeApprove(tokenTransferProxy, 0);\\n    assetToSwapFrom.safeApprove(tokenTransferProxy, amountToSwap);\\n\\n    if (fromAmountOffset != 0) {\\n      // Ensure 256 bit (32 bytes) fromAmount value is within bounds of the\\n      // calldata, not overlapping with the first 4 bytes (function selector).\\n      require(\\n        fromAmountOffset >= 4 && fromAmountOffset <= swapCalldata.length.sub(32),\\n        'FROM_AMOUNT_OFFSET_OUT_OF_RANGE'\\n      );\\n      // Overwrite the fromAmount with the correct amount for the swap.\\n      // In memory, swapCalldata consists of a 256 bit length field, followed by\\n      // the actual bytes data, that is why 32 is added to the byte offset.\\n      assembly {\\n        mstore(add(swapCalldata, add(fromAmountOffset, 32)), amountToSwap)\\n      }\\n    }\\n    (bool success, ) = address(augustus).call(swapCalldata);\\n    if (!success) {\\n      // Copy revert reason from call\\n      assembly {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n    require(\\n      assetToSwapFrom.balanceOf(address(this)) == balanceBeforeAssetFrom - amountToSwap,\\n      'WRONG_BALANCE_AFTER_SWAP'\\n    );\\n    amountReceived = assetToSwapTo.balanceOf(address(this)).sub(balanceBeforeAssetTo);\\n    require(amountReceived >= minAmountToReceive, 'INSUFFICIENT_AMOUNT_RECEIVED');\\n\\n    emit Swapped(address(assetToSwapFrom), address(assetToSwapTo), amountToSwap, amountReceived);\\n  }\\n}\\n\",\"keccak256\":\"0x8397250619e16fbe40ecb9ecd319eecccbc76bf0893ba053b9c96291c173005b\",\"license\":\"AGPL-3.0\"},\"contracts/adapters/paraswap/ParaSwapLiquiditySwapAdapter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {IERC20WithPermit} from '@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol';\\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\\nimport {SafeERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol';\\nimport {SafeMath} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol';\\nimport {BaseParaSwapSellAdapter} from './BaseParaSwapSellAdapter.sol';\\nimport {IParaSwapAugustusRegistry} from './interfaces/IParaSwapAugustusRegistry.sol';\\nimport {IParaSwapAugustus} from './interfaces/IParaSwapAugustus.sol';\\nimport {ReentrancyGuard} from '../../dependencies/openzeppelin/ReentrancyGuard.sol';\\n\\n/**\\n * @title ParaSwapLiquiditySwapAdapter\\n * @notice Adapter to swap liquidity using ParaSwap.\\n * @author Jason Raymond Bell\\n */\\ncontract ParaSwapLiquiditySwapAdapter is BaseParaSwapSellAdapter, ReentrancyGuard {\\n  using SafeMath for uint256;\\n  using SafeERC20 for IERC20Detailed;\\n\\n  constructor(\\n    IPoolAddressesProvider addressesProvider,\\n    IParaSwapAugustusRegistry augustusRegistry,\\n    address owner\\n  ) BaseParaSwapSellAdapter(addressesProvider, augustusRegistry) {\\n    transferOwnership(owner);\\n  }\\n\\n  /**\\n   * @dev Swaps the received reserve amount from the flash loan into the asset specified in the params.\\n   * The received funds from the swap are then deposited into the protocol on behalf of the user.\\n   * The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset and repay the flash loan.\\n   * @param asset The address of the flash-borrowed asset\\n   * @param amount The amount of the flash-borrowed asset\\n   * @param premium The fee of the flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   *   address assetToSwapTo Address of the underlying asset to be swapped to and deposited\\n   *   uint256 minAmountToReceive Min amount to be received from the swap\\n   *   uint256 swapAllBalanceOffset Set to offset of fromAmount in Augustus calldata if wanting to swap all balance, otherwise 0\\n   *   bytes swapCalldata Calldata for ParaSwap's AugustusSwapper contract\\n   *   address augustus Address of ParaSwap's AugustusSwapper contract\\n   *   PermitSignature permitParams Struct containing the permit signatures, set to all zeroes if not used\\n   */\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address initiator,\\n    bytes calldata params\\n  ) external override nonReentrant returns (bool) {\\n    require(msg.sender == address(POOL), 'CALLER_MUST_BE_POOL');\\n\\n    uint256 flashLoanAmount = amount;\\n    uint256 premiumLocal = premium;\\n    address initiatorLocal = initiator;\\n    IERC20Detailed assetToSwapFrom = IERC20Detailed(asset);\\n    (\\n      IERC20Detailed assetToSwapTo,\\n      uint256 minAmountToReceive,\\n      uint256 swapAllBalanceOffset,\\n      bytes memory swapCalldata,\\n      IParaSwapAugustus augustus,\\n      PermitSignature memory permitParams\\n    ) = abi.decode(\\n        params,\\n        (IERC20Detailed, uint256, uint256, bytes, IParaSwapAugustus, PermitSignature)\\n      );\\n\\n    _swapLiquidity(\\n      swapAllBalanceOffset,\\n      swapCalldata,\\n      augustus,\\n      permitParams,\\n      flashLoanAmount,\\n      premiumLocal,\\n      initiatorLocal,\\n      assetToSwapFrom,\\n      assetToSwapTo,\\n      minAmountToReceive\\n    );\\n\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Swaps an amount of an asset to another and deposits the new asset amount on behalf of the user without using a flash loan.\\n   * This method can be used when the temporary transfer of the collateral asset to this contract does not affect the user position.\\n   * The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset and perform the swap.\\n   * @param assetToSwapFrom Address of the underlying asset to be swapped from\\n   * @param assetToSwapTo Address of the underlying asset to be swapped to and deposited\\n   * @param amountToSwap Amount to be swapped, or maximum amount when swapping all balance\\n   * @param minAmountToReceive Minimum amount to be received from the swap\\n   * @param swapAllBalanceOffset Set to offset of fromAmount in Augustus calldata if wanting to swap all balance, otherwise 0\\n   * @param swapCalldata Calldata for ParaSwap's AugustusSwapper contract\\n   * @param augustus Address of ParaSwap's AugustusSwapper contract\\n   * @param permitParams Struct containing the permit signatures, set to all zeroes if not used\\n   */\\n  function swapAndDeposit(\\n    IERC20Detailed assetToSwapFrom,\\n    IERC20Detailed assetToSwapTo,\\n    uint256 amountToSwap,\\n    uint256 minAmountToReceive,\\n    uint256 swapAllBalanceOffset,\\n    bytes calldata swapCalldata,\\n    IParaSwapAugustus augustus,\\n    PermitSignature calldata permitParams\\n  ) external nonReentrant {\\n    IERC20WithPermit aToken = IERC20WithPermit(\\n      _getReserveData(address(assetToSwapFrom)).aTokenAddress\\n    );\\n\\n    if (swapAllBalanceOffset != 0) {\\n      uint256 balance = aToken.balanceOf(msg.sender);\\n      require(balance <= amountToSwap, 'INSUFFICIENT_AMOUNT_TO_SWAP');\\n      amountToSwap = balance;\\n    }\\n\\n    _pullATokenAndWithdraw(\\n      address(assetToSwapFrom),\\n      aToken,\\n      msg.sender,\\n      amountToSwap,\\n      permitParams\\n    );\\n\\n    uint256 amountReceived = _sellOnParaSwap(\\n      swapAllBalanceOffset,\\n      swapCalldata,\\n      augustus,\\n      assetToSwapFrom,\\n      assetToSwapTo,\\n      amountToSwap,\\n      minAmountToReceive\\n    );\\n\\n    assetToSwapTo.safeApprove(address(POOL), 0);\\n    assetToSwapTo.safeApprove(address(POOL), amountReceived);\\n    POOL.deposit(address(assetToSwapTo), amountReceived, msg.sender, 0);\\n  }\\n\\n  /**\\n   * @dev Swaps an amount of an asset to another and deposits the funds on behalf of the initiator.\\n   * @param swapAllBalanceOffset Set to offset of fromAmount in Augustus calldata if wanting to swap all balance, otherwise 0\\n   * @param swapCalldata Calldata for ParaSwap's AugustusSwapper contract\\n   * @param augustus Address of ParaSwap's AugustusSwapper contract\\n   * @param permitParams Struct containing the permit signatures, set to all zeroes if not used\\n   * @param flashLoanAmount Amount of the flash loan i.e. maximum amount to swap\\n   * @param premium Fee of the flash loan\\n   * @param initiator Account that initiated the flash loan\\n   * @param assetToSwapFrom Address of the underyling asset to be swapped from\\n   * @param assetToSwapTo Address of the underlying asset to be swapped to and deposited\\n   * @param minAmountToReceive Min amount to be received from the swap\\n   */\\n  function _swapLiquidity(\\n    uint256 swapAllBalanceOffset,\\n    bytes memory swapCalldata,\\n    IParaSwapAugustus augustus,\\n    PermitSignature memory permitParams,\\n    uint256 flashLoanAmount,\\n    uint256 premium,\\n    address initiator,\\n    IERC20Detailed assetToSwapFrom,\\n    IERC20Detailed assetToSwapTo,\\n    uint256 minAmountToReceive\\n  ) internal {\\n    IERC20WithPermit aToken = IERC20WithPermit(\\n      _getReserveData(address(assetToSwapFrom)).aTokenAddress\\n    );\\n    uint256 amountToSwap = flashLoanAmount;\\n\\n    uint256 balance = aToken.balanceOf(initiator);\\n    if (swapAllBalanceOffset != 0) {\\n      uint256 balanceToSwap = balance.sub(premium);\\n      require(balanceToSwap <= amountToSwap, 'INSUFFICIENT_AMOUNT_TO_SWAP');\\n      amountToSwap = balanceToSwap;\\n    } else {\\n      require(balance >= amountToSwap.add(premium), 'INSUFFICIENT_ATOKEN_BALANCE');\\n    }\\n\\n    uint256 amountReceived = _sellOnParaSwap(\\n      swapAllBalanceOffset,\\n      swapCalldata,\\n      augustus,\\n      assetToSwapFrom,\\n      assetToSwapTo,\\n      amountToSwap,\\n      minAmountToReceive\\n    );\\n\\n    assetToSwapTo.safeApprove(address(POOL), 0);\\n    assetToSwapTo.safeApprove(address(POOL), amountReceived);\\n    POOL.deposit(address(assetToSwapTo), amountReceived, initiator, 0);\\n\\n    _pullATokenAndWithdraw(\\n      address(assetToSwapFrom),\\n      aToken,\\n      initiator,\\n      amountToSwap.add(premium),\\n      permitParams\\n    );\\n\\n    // Repay flash loan\\n    assetToSwapFrom.safeApprove(address(POOL), 0);\\n    assetToSwapFrom.safeApprove(address(POOL), flashLoanAmount.add(premium));\\n  }\\n}\\n\",\"keccak256\":\"0x35300b7364feb2ccb62847ac65711993db882c1871b5922a7974e28d2bfed7fd\",\"license\":\"AGPL-3.0\"},\"contracts/adapters/paraswap/interfaces/IParaSwapAugustus.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IParaSwapAugustus {\\n  function getTokenTransferProxy() external view returns (address);\\n}\\n\",\"keccak256\":\"0x8feda4c8f1710f2365681625e9feada9cc9d129ac045645b2c893e06c817815b\",\"license\":\"AGPL-3.0\"},\"contracts/adapters/paraswap/interfaces/IParaSwapAugustusRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IParaSwapAugustusRegistry {\\n  function isValidAugustus(address augustus) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xd5e1e2b15318733975a6dd1aa3ff16842a88f2638458538e1a55ee37a4f3dddc\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.10;\\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    // On the first call to nonReentrant, _notEntered will be true\\n    require(_status != _ENTERED, 'ReentrancyGuard: reentrant call');\\n\\n    // Any calls to nonReentrant after this point will fail\\n    _status = _ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    _status = _NOT_ENTERED;\\n  }\\n}\\n\",\"keccak256\":\"0xdd8ef14496c07389f4ac9e4a5e63ef92d1c7bfca2a5eb3d322934dcf50237577\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1472,"contract":"contracts/adapters/paraswap/ParaSwapLiquiditySwapAdapter.sol:ParaSwapLiquiditySwapAdapter","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":30972,"contract":"contracts/adapters/paraswap/ParaSwapLiquiditySwapAdapter.sol:ParaSwapLiquiditySwapAdapter","label":"_status","offset":0,"slot":"1","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"notice":"Adapter to swap liquidity using ParaSwap.","version":1}}},"contracts/adapters/paraswap/ParaSwapRepayAdapter.sol":{"ParaSwapRepayAdapter":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"addressesProvider","type":"address"},{"internalType":"contract IParaSwapAugustusRegistry","name":"augustusRegistry","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fromAsset","type":"address"},{"indexed":true,"internalType":"address","name":"toAsset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountSold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"receivedAmount","type":"uint256"}],"name":"Bought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fromAsset","type":"address"},{"indexed":true,"internalType":"address","name":"toAsset","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"receivedAmount","type":"uint256"}],"name":"Swapped","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AUGUSTUS_REGISTRY","outputs":[{"internalType":"contract IParaSwapAugustusRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SLIPPAGE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ORACLE","outputs":[{"internalType":"contract IPriceOracleGetter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"premium","type":"uint256"},{"internalType":"address","name":"initiator","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"executeOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20Detailed","name":"collateralAsset","type":"address"},{"internalType":"contract IERC20Detailed","name":"debtAsset","type":"address"},{"internalType":"uint256","name":"collateralAmount","type":"uint256"},{"internalType":"uint256","name":"debtRepayAmount","type":"uint256"},{"internalType":"uint256","name":"debtRateMode","type":"uint256"},{"internalType":"uint256","name":"buyAllBalanceOffset","type":"uint256"},{"internalType":"bytes","name":"paraswapData","type":"bytes"},{"components":[{"internalType":"uint256","name":"amount","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"}],"internalType":"struct BaseParaSwapAdapter.PermitSignature","name":"permitSignature","type":"tuple"}],"name":"swapAndRepay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave*","kind":"dev","methods":{"executeOperation(address,uint256,uint256,address,bytes)":{"details":"Uses the received funds from the flash loan to repay a debt on the protocol on behalf of the user. Then pulls the collateral from the user and swaps it to the debt asset to repay the flash loan. The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset, swap it and repay the flash loan. Supports only one asset on the flash loan.","params":{"amount":"The amount of the flash-borrowed asset","asset":"The address of the flash-borrowed asset","initiator":"The address of the flashloan initiator","params":"The byte-encoded params passed when initiating the flashloan","premium":"The fee of the flash-borrowed asset"},"returns":{"_0":"True if the execution of the operation succeeds, false otherwise   IERC20Detailed debtAsset Address of the debt asset   uint256 debtAmount Amount of debt to be repaid   uint256 rateMode Rate modes of the debt to be repaid   uint256 deadline Deadline for the permit signature   uint256 debtRateMode Rate mode of the debt to be repaid   bytes paraswapData Paraswap Data                    * bytes buyCallData Call data for augustus                    * IParaSwapAugustus augustus Address of Augustus Swapper   PermitSignature permitParams Struct containing the permit signatures, set to all zeroes if not used"}},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"rescueTokens(address)":{"details":"Emergency rescue for token stucked on this contract, as failsafe mechanism - Funds should never remain in this contract more time than during transactions - Only callable by the owner"},"swapAndRepay(address,address,uint256,uint256,uint256,uint256,bytes,(uint256,uint256,uint8,bytes32,bytes32))":{"details":"Swaps the user collateral for the debt asset and then repay the debt on the protocol on behalf of the user without using flash loans. This method can be used when the temporary transfer of the collateral asset to this contract does not affect the user position. The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset","params":{"buyAllBalanceOffset":"Set to offset of toAmount in Augustus calldata if wanting to pay entire debt, otherwise 0","collateralAmount":"max Amount of the collateral to be swapped","collateralAsset":"Address of asset to be swapped","debtAsset":"Address of debt asset","debtRateMode":"Rate mode of the debt to be repaid","debtRepayAmount":"Amount of the debt to be repaid, or maximum amount when repaying entire debt","paraswapData":"Data for Paraswap Adapter","permitSignature":"struct containing the permit signature"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"title":"ParaSwapRepayAdapter","version":1},"evm":{"bytecode":{"functionDebugData":{"@_1500":{"entryPoint":null,"id":1500,"parameterSlots":0,"returnSlots":0},"@_29063":{"entryPoint":null,"id":29063,"parameterSlots":1,"returnSlots":0},"@_29308":{"entryPoint":null,"id":29308,"parameterSlots":2,"returnSlots":0},"@_30357":{"entryPoint":null,"id":30357,"parameterSlots":3,"returnSlots":0},"@_30980":{"entryPoint":null,"id":30980,"parameterSlots":0,"returnSlots":0},"@_3465":{"entryPoint":null,"id":3465,"parameterSlots":1,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@transferOwnership_1572":{"entryPoint":582,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":960,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":999,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069t_contract$_IParaSwapAugustusRegistry_$30961t_address_fromMemory":{"entryPoint":876,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_db2797630a1d495c886e1a8a331a3e137a14592fc5c41e7f3fe6d0ad0c24dc7e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"validator_revert_contract_IPoolAddressesProvider":{"entryPoint":851,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2728:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"83:86:201","statements":[{"body":{"nodeType":"YulBlock","src":"147:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"156:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"149:6:201"},"nodeType":"YulFunctionCall","src":"149:12:201"},"nodeType":"YulExpressionStatement","src":"149:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"106:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"117:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"132:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"137:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"128:3:201"},"nodeType":"YulFunctionCall","src":"128:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"141:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"124:3:201"},"nodeType":"YulFunctionCall","src":"124:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"113:3:201"},"nodeType":"YulFunctionCall","src":"113:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"103:2:201"},"nodeType":"YulFunctionCall","src":"103:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"96:6:201"},"nodeType":"YulFunctionCall","src":"96:50:201"},"nodeType":"YulIf","src":"93:70:201"}]},"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"72:5:201","type":""}],"src":"14:155:201"},{"body":{"nodeType":"YulBlock","src":"355:476:201","statements":[{"body":{"nodeType":"YulBlock","src":"401:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"410:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"413:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"403:6:201"},"nodeType":"YulFunctionCall","src":"403:12:201"},"nodeType":"YulExpressionStatement","src":"403:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"376:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"385:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"372:3:201"},"nodeType":"YulFunctionCall","src":"372:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"397:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"368:3:201"},"nodeType":"YulFunctionCall","src":"368:32:201"},"nodeType":"YulIf","src":"365:52:201"},{"nodeType":"YulVariableDeclaration","src":"426:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"445:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"439:5:201"},"nodeType":"YulFunctionCall","src":"439:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"430:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"513:5:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"464:48:201"},"nodeType":"YulFunctionCall","src":"464:55:201"},"nodeType":"YulExpressionStatement","src":"464:55:201"},{"nodeType":"YulAssignment","src":"528:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"538:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"528:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"552:40:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"577:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"588:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"573:3:201"},"nodeType":"YulFunctionCall","src":"573:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"567:5:201"},"nodeType":"YulFunctionCall","src":"567:25:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"556:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"650:7:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"601:48:201"},"nodeType":"YulFunctionCall","src":"601:57:201"},"nodeType":"YulExpressionStatement","src":"601:57:201"},{"nodeType":"YulAssignment","src":"667:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"677:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"667:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"693:40:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"718:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"729:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"714:3:201"},"nodeType":"YulFunctionCall","src":"714:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"708:5:201"},"nodeType":"YulFunctionCall","src":"708:25:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"697:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"791:7:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"742:48:201"},"nodeType":"YulFunctionCall","src":"742:57:201"},"nodeType":"YulExpressionStatement","src":"742:57:201"},{"nodeType":"YulAssignment","src":"808:17:201","value":{"name":"value_2","nodeType":"YulIdentifier","src":"818:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"808:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069t_contract$_IParaSwapAugustusRegistry_$30961t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"305:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"316:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"328:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"336:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"344:6:201","type":""}],"src":"174:657:201"},{"body":{"nodeType":"YulBlock","src":"917:194:201","statements":[{"body":{"nodeType":"YulBlock","src":"963:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"972:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"975:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"965:6:201"},"nodeType":"YulFunctionCall","src":"965:12:201"},"nodeType":"YulExpressionStatement","src":"965:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"938:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"947:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"934:3:201"},"nodeType":"YulFunctionCall","src":"934:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"959:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"930:3:201"},"nodeType":"YulFunctionCall","src":"930:32:201"},"nodeType":"YulIf","src":"927:52:201"},{"nodeType":"YulVariableDeclaration","src":"988:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1007:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1001:5:201"},"nodeType":"YulFunctionCall","src":"1001:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"992:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1075:5:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"1026:48:201"},"nodeType":"YulFunctionCall","src":"1026:55:201"},"nodeType":"YulExpressionStatement","src":"1026:55:201"},{"nodeType":"YulAssignment","src":"1090:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1100:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1090:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"883:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"894:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"906:6:201","type":""}],"src":"836:275:201"},{"body":{"nodeType":"YulBlock","src":"1217:102:201","statements":[{"nodeType":"YulAssignment","src":"1227:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1239:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1250:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1235:3:201"},"nodeType":"YulFunctionCall","src":"1235:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1227:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1269:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1284:6:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1300:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1305:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1296:3:201"},"nodeType":"YulFunctionCall","src":"1296:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"1309:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1292:3:201"},"nodeType":"YulFunctionCall","src":"1292:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1280:3:201"},"nodeType":"YulFunctionCall","src":"1280:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1262:6:201"},"nodeType":"YulFunctionCall","src":"1262:51:201"},"nodeType":"YulExpressionStatement","src":"1262:51:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1186:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1197:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1208:4:201","type":""}],"src":"1116:203:201"},{"body":{"nodeType":"YulBlock","src":"1402:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"1448:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1457:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1460:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1450:6:201"},"nodeType":"YulFunctionCall","src":"1450:12:201"},"nodeType":"YulExpressionStatement","src":"1450:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1423:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1432:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1419:3:201"},"nodeType":"YulFunctionCall","src":"1419:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1444:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1415:3:201"},"nodeType":"YulFunctionCall","src":"1415:32:201"},"nodeType":"YulIf","src":"1412:52:201"},{"nodeType":"YulVariableDeclaration","src":"1473:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1492:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1486:5:201"},"nodeType":"YulFunctionCall","src":"1486:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1477:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1555:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1564:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1567:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1557:6:201"},"nodeType":"YulFunctionCall","src":"1557:12:201"},"nodeType":"YulExpressionStatement","src":"1557:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1524:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1545:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1538:6:201"},"nodeType":"YulFunctionCall","src":"1538:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1531:6:201"},"nodeType":"YulFunctionCall","src":"1531:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1521:2:201"},"nodeType":"YulFunctionCall","src":"1521:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1514:6:201"},"nodeType":"YulFunctionCall","src":"1514:40:201"},"nodeType":"YulIf","src":"1511:60:201"},{"nodeType":"YulAssignment","src":"1580:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1590:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1580:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1368:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1379:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1391:6:201","type":""}],"src":"1324:277:201"},{"body":{"nodeType":"YulBlock","src":"1780:178:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1797:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1808:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1790:6:201"},"nodeType":"YulFunctionCall","src":"1790:21:201"},"nodeType":"YulExpressionStatement","src":"1790:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1831:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1842:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1827:3:201"},"nodeType":"YulFunctionCall","src":"1827:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"1847:2:201","type":"","value":"28"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1820:6:201"},"nodeType":"YulFunctionCall","src":"1820:30:201"},"nodeType":"YulExpressionStatement","src":"1820:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1870:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1881:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1866:3:201"},"nodeType":"YulFunctionCall","src":"1866:18:201"},{"hexValue":"4e6f7420612076616c69642041756775737475732061646472657373","kind":"string","nodeType":"YulLiteral","src":"1886:30:201","type":"","value":"Not a valid Augustus address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1859:6:201"},"nodeType":"YulFunctionCall","src":"1859:58:201"},"nodeType":"YulExpressionStatement","src":"1859:58:201"},{"nodeType":"YulAssignment","src":"1926:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1938:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1949:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1934:3:201"},"nodeType":"YulFunctionCall","src":"1934:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1926:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_db2797630a1d495c886e1a8a331a3e137a14592fc5c41e7f3fe6d0ad0c24dc7e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1757:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1771:4:201","type":""}],"src":"1606:352:201"},{"body":{"nodeType":"YulBlock","src":"2137:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2154:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2165:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2147:6:201"},"nodeType":"YulFunctionCall","src":"2147:21:201"},"nodeType":"YulExpressionStatement","src":"2147:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2188:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2199:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2184:3:201"},"nodeType":"YulFunctionCall","src":"2184:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2204:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2177:6:201"},"nodeType":"YulFunctionCall","src":"2177:30:201"},"nodeType":"YulExpressionStatement","src":"2177:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2227:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2238:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2223:3:201"},"nodeType":"YulFunctionCall","src":"2223:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"2243:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2216:6:201"},"nodeType":"YulFunctionCall","src":"2216:62:201"},"nodeType":"YulExpressionStatement","src":"2216:62:201"},{"nodeType":"YulAssignment","src":"2287:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2299:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2310:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2295:3:201"},"nodeType":"YulFunctionCall","src":"2295:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2287:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2114:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2128:4:201","type":""}],"src":"1963:356:201"},{"body":{"nodeType":"YulBlock","src":"2498:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2515:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2526:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2508:6:201"},"nodeType":"YulFunctionCall","src":"2508:21:201"},"nodeType":"YulExpressionStatement","src":"2508:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2549:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2560:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2545:3:201"},"nodeType":"YulFunctionCall","src":"2545:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2565:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2538:6:201"},"nodeType":"YulFunctionCall","src":"2538:30:201"},"nodeType":"YulExpressionStatement","src":"2538:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2588:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2599:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2584:3:201"},"nodeType":"YulFunctionCall","src":"2584:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"2604:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2577:6:201"},"nodeType":"YulFunctionCall","src":"2577:62:201"},"nodeType":"YulExpressionStatement","src":"2577:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2659:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2670:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2655:3:201"},"nodeType":"YulFunctionCall","src":"2655:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"2675:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2648:6:201"},"nodeType":"YulFunctionCall","src":"2648:36:201"},"nodeType":"YulExpressionStatement","src":"2648:36:201"},{"nodeType":"YulAssignment","src":"2693:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2705:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2716:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2701:3:201"},"nodeType":"YulFunctionCall","src":"2701:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2693:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2475:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2489:4:201","type":""}],"src":"2324:402:201"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPoolAddressesProvider(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069t_contract$_IParaSwapAugustusRegistry_$30961t_address_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        validator_revert_contract_IPoolAddressesProvider(value_1)\n        value1 := value_1\n        let value_2 := mload(add(headStart, 64))\n        validator_revert_contract_IPoolAddressesProvider(value_2)\n        value2 := value_2\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_db2797630a1d495c886e1a8a331a3e137a14592fc5c41e7f3fe6d0ad0c24dc7e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 28)\n        mstore(add(headStart, 64), \"Not a valid Augustus address\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"6101006040523480156200001257600080fd5b50604051620032b7380380620032b783398101604081905262000035916200036c565b82828180806001600160a01b03166080816001600160a01b031681525050806001600160a01b031663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000092573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b89190620003c0565b6001600160a01b031660a05250600080546001600160a01b0319163390811782556040519091829160008051602062003297833981519152908290a350806001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015a9190620003c0565b6001600160a01b0390811660c05260405163fb04e17b60e01b815260006004820152908316915063fb04e17b90602401602060405180830381865afa158015620001a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ce9190620003e7565b15620002215760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420612076616c696420417567757374757320616464726573730000000060448201526064015b60405180910390fd5b6001600160a01b031660e05250600180556200023d8162000246565b5050506200040b565b6000546001600160a01b03163314620002a25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000218565b6001600160a01b038116620003095760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000218565b600080546040516001600160a01b03808516939216916000805160206200329783398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811681146200036957600080fd5b50565b6000806000606084860312156200038257600080fd5b83516200038f8162000353565b6020850151909350620003a28162000353565b6040850151909250620003b58162000353565b809150509250925092565b600060208284031215620003d357600080fd5b8151620003e08162000353565b9392505050565b600060208284031215620003fa57600080fd5b81518015158114620003e057600080fd5b60805160a05160c05160e051612de3620004b46000396000818161019901526110640152600081816101720152611f5a0152600081816101db01528181610411015281816105d101528181610613015281816106910152818161070a0152818161074c015281816107ca01528181610c1f01528181610c6101528181610ce101528181610d8501528181610db001528181611bab0152611d5a0152600060e70152612de36000f3fe608060405234801561001057600080fd5b50600436106100c85760003560e01c80633a829867116100815780637535d2461161005b5780637535d246146101d65780638da5cb5b146101fd578063f2fde38b1461021b57600080fd5b80633a829867146101945780634db9dc97146101bb578063715018a6146101ce57600080fd5b80631b11d0ff116100b25780631b11d0ff1461013357806332e4b2861461015657806338013f021461016d57600080fd5b8062ae3bf8146100cd5780630542975c146100e2575b600080fd5b6100e06100db36600461244a565b61022e565b005b6101097f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101466101413660046124b0565b610385565b604051901515815260200161012a565b61015f610bb881565b60405190815260200161012a565b6101097f000000000000000000000000000000000000000000000000000000000000000081565b6101097f000000000000000000000000000000000000000000000000000000000000000081565b6100e06101c936600461252c565b6104bc565b6100e0610849565b6101097f000000000000000000000000000000000000000000000000000000000000000081565b60005473ffffffffffffffffffffffffffffffffffffffff16610109565b6100e061022936600461244a565b610939565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6103826102d660005473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610340573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061036491906125f5565b73ffffffffffffffffffffffffffffffffffffffff84169190610aea565b50565b6000600260015414156103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102ab565b60026001553373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f43414c4c45525f4d5553545f42455f504f4f4c0000000000000000000000000060448201526064016102ab565b8584886104a986868a858588610bc3565b5050600180805598975050505050505050565b60026001541415610529576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102ab565b600260015561053b8886868933610e07565b955061055789338961055236869003860186612740565b610fda565b600061059f8585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92508e91508d90508c611000565b905060006105ad828a61278b565b905080156106ee576105f773ffffffffffffffffffffffffffffffffffffffff8c167f00000000000000000000000000000000000000000000000000000000000000006000611846565b61063873ffffffffffffffffffffffffffffffffffffffff8c167f000000000000000000000000000000000000000000000000000000000000000083611846565b6040517fe8eda9df00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015260248201839052336044830152600060648301527f0000000000000000000000000000000000000000000000000000000000000000169063e8eda9df90608401600060405180830381600087803b1580156106d557600080fd5b505af11580156106e9573d6000803e3d6000fd5b505050505b61073073ffffffffffffffffffffffffffffffffffffffff8b167f00000000000000000000000000000000000000000000000000000000000000006000611846565b61077173ffffffffffffffffffffffffffffffffffffffff8b167f00000000000000000000000000000000000000000000000000000000000000008a611846565b6040517f573ade8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152602482018a9052604482018990523360648301527f0000000000000000000000000000000000000000000000000000000000000000169063573ade81906084016020604051808303816000875af1158015610813573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083791906125f5565b50506001805550505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102ab565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102ab565b73ffffffffffffffffffffffffffffffffffffffff8116610a5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102ab565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1610b4d573d6000803e3d6000fd5b50610b5784611a04565b610bbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e73666572000000000000000000000060448201526064016102ab565b50505050565b60008080808080610bd68b8d018d6127e8565b955095509550955095509550610bef868486888d610e07565b94506000610c0185848b8a8c8b611000565b9050610c4573ffffffffffffffffffffffffffffffffffffffff88167f00000000000000000000000000000000000000000000000000000000000000006000611846565b610c8673ffffffffffffffffffffffffffffffffffffffff88167f000000000000000000000000000000000000000000000000000000000000000088611846565b6040517f573ade8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015260248201889052604482018690528b811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063573ade81906084016020604051808303816000875af1158015610d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4e91906125f5565b506000610d5b828d611ad0565b9050610d698a8c8386610fda565b610dab73ffffffffffffffffffffffffffffffffffffffff8b167f00000000000000000000000000000000000000000000000000000000000000006000611846565b610df77f0000000000000000000000000000000000000000000000000000000000000000610dd98b8f611ad0565b73ffffffffffffffffffffffffffffffffffffffff8d169190611846565b5050505050505050505050505050565b600080610e1387611ae6565b905060006001876002811115610e2b57610e2b6128a9565b6002811115610e3c57610e3c6128a9565b14610e4c57816101400151610e53565b8161012001515b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529192506000918316906370a0823190602401602060405180830381865afa158015610ec5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee991906125f5565b90508615610f635785811115610f5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f494e53554646494349454e545f414d4f554e545f544f5f52455041590000000060448201526064016102ab565b809550610fcd565b80861115610fcd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f494e56414c49445f444542545f52455041595f414d4f554e540000000000000060448201526064016102ab565b5093979650505050505050565b6000610fe585611ae6565b61010001519050610ff98582868686611c17565b5050505050565b6000806000878060200190518101906110199190612904565b6040517ffb04e17b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529294509092507f00000000000000000000000000000000000000000000000000000000000000009091169063fb04e17b90602401602060405180830381865afa1580156110ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d19190612992565b611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f494e56414c49445f41554755535455530000000000000000000000000000000060448201526064016102ab565b600061114288611e30565b60ff169050600061115288611e30565b60ff16905060006111628a611f12565b9050600061116f8a611f12565b905060006111c7611184612710610bb8611ad0565b6111c161119c61119588600a612ad4565b8790611fc7565b6111bb6111b46111ad8b600a612ad4565b8890611fc7565b8e90611fc7565b90611ff1565b90612004565b9050808a1115611259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f6d6178416d6f756e74546f5377617020657863656564206d617820736c69707060448201527f616765000000000000000000000000000000000000000000000000000000000060648201526084016102ab565b50506040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000935073ffffffffffffffffffffffffffffffffffffffff8b1692506370a082319150602401602060405180830381865afa1580156112cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ef91906125f5565b90508581101561135b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f494e53554646494349454e545f42414c414e43455f4245464f52455f5357415060448201526064016102ab565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8916906370a0823190602401602060405180830381865afa1580156113c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ec91906125f5565b905060008373ffffffffffffffffffffffffffffffffffffffff1663d2c4b5986040518163ffffffff1660e01b8152600401602060405180830381865afa15801561143b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145f9190612af0565b905061148373ffffffffffffffffffffffffffffffffffffffff8b16826000611846565b6114a473ffffffffffffffffffffffffffffffffffffffff8b16828a611846565b8b156115365760048c101580156114c7575084516114c3906020612047565b8c11155b61152d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f544f5f414d4f554e545f4f46465345545f4f55545f4f465f52414e474500000060448201526064016102ab565b8660208d018601525b60008473ffffffffffffffffffffffffffffffffffffffff168660405161155d9190612b0d565b6000604051808303816000865af19150503d806000811461159a576040519150601f19603f3d011682016040523d82523d6000602084013e61159f565b606091505b50509050806115b2573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8d16906370a0823190602401602060405180830381865afa15801561161f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164391906125f5565b905061164f818661278b565b9750898811156116bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f57524f4e475f42414c414e43455f41465445525f53574150000000000000000060448201526064016102ab565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009061175890869073ffffffffffffffffffffffffffffffffffffffff8f16906370a0823190602401602060405180830381865afa15801561172e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175291906125f5565b90612047565b9050898110156117c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f494e53554646494349454e545f414d4f554e545f52454345495645440000000060448201526064016102ab565b8b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167fbf77fd13a39d14dc0da779342c14105c38d9a5d0c60f2caa22f5fd1d5525416d8b8460405161182c929190918252602082015260400190565b60405180910390a350505050505050509695505050505050565b8015806118e657506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156118c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e491906125f5565b155b611972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016102ab565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b3000000000000000000000000000000000000000000000000000000001790526119ff908490612057565b505050565b6000611a44565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d8015611a835760208114611abd57611a7e7f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f611a0b565b611aca565b823b611ab457611ab47f475076323a206e6f74206120636f6e74726163740000000000000000000000006014611a0b565b60019150611aca565b3d6000803e600051151591505b50919050565b80820182811015611ae057600080fd5b92915050565b604080516102008101825260006101e08201818152825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c08101919091526040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa158015611bf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae09190612bb2565b602081015115611ce457805160208201516040808401516060850151608086015192517fd505accf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301523060248301526044820196909652606481019490945260ff909116608484015260a483015260c48201529085169063d505accf9060e401600060405180830381600087803b158015611ccb57600080fd5b505af1158015611cdf573d6000803e3d6000fd5b505050505b611d0673ffffffffffffffffffffffffffffffffffffffff8516843085612163565b6040517f69328dec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820184905230604483015283917f0000000000000000000000000000000000000000000000000000000000000000909116906369328dec906064016020604051808303816000875af1158015611da5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc991906125f5565b14610ff9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f554e45585045435445445f414d4f554e545f57495448445241574e000000000060448201526064016102ab565b6000808273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea29190612cd5565b9050604d8160ff161115611ae0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f544f4f5f4d414e595f444543494d414c535f4f4e5f544f4b454e00000000000060448201526064016102ab565b6040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063b3596f0790602401602060405180830381865afa158015611fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae091906125f5565b6000821580611fe857505081810281838281611fe557611fe5612cf2565b04145b611ae057600080fd5b6000611ffd8284612d21565b9392505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec778390048411151761203957600080fd5b506127109102611388010490565b80820382811115611ae057600080fd5b60006120b9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661223e9092919063ffffffff16565b8051909150156119ff57808060200190518101906120d79190612992565b6119ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016102ab565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af16121ce573d6000803e3d6000fd5b506121d885611a04565b610ff9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d0000000000000060448201526064016102ab565b606061224d8484600085612255565b949350505050565b6060824710156122e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016102ab565b843b61234f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102ab565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516123789190612b0d565b60006040518083038185875af1925050503d80600081146123b5576040519150601f19603f3d011682016040523d82523d6000602084013e6123ba565b606091505b50915091506123ca8282866123d5565b979650505050505050565b606083156123e4575081611ffd565b8251156123f45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ab9190612d5c565b73ffffffffffffffffffffffffffffffffffffffff8116811461038257600080fd5b60006020828403121561245c57600080fd5b8135611ffd81612428565b60008083601f84011261247957600080fd5b50813567ffffffffffffffff81111561249157600080fd5b6020830191508360208285010111156124a957600080fd5b9250929050565b60008060008060008060a087890312156124c957600080fd5b86356124d481612428565b9550602087013594506040870135935060608701356124f281612428565b9250608087013567ffffffffffffffff81111561250e57600080fd5b61251a89828a01612467565b979a9699509497509295939492505050565b6000806000806000806000806000898b0361018081121561254c57600080fd5b8a3561255781612428565b995060208b013561256781612428565b985060408b0135975060608b0135965060808b0135955060a08b0135945060c08b013567ffffffffffffffff81111561259f57600080fd5b6125ab8d828e01612467565b90955093505060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20820112156125e157600080fd5b5060e08a0190509295985092959850929598565b60006020828403121561260757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff811182821017156126615761266161260e565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156126ae576126ae61260e565b604052919050565b60ff8116811461038257600080fd5b600060a082840312156126d757600080fd5b60405160a0810181811067ffffffffffffffff821117156126fa576126fa61260e565b80604052508091508235815260208301356020820152604083013561271e816126b6565b8060408301525060608301356060820152608083013560808201525092915050565b600060a0828403121561275257600080fd5b611ffd83836126c5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561279d5761279d61275c565b500390565b600067ffffffffffffffff8211156127bc576127bc61260e565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600080600080610140878903121561280257600080fd5b863561280d81612428565b9550602087013594506040870135935060608701359250608087013567ffffffffffffffff81111561283e57600080fd5b8701601f8101891361284f57600080fd5b803561286261285d826127a2565b612667565b8181528a602083850101111561287757600080fd5b8160208401602083013760006020838301015280945050505061289d8860a089016126c5565b90509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60005b838110156128f35781810151838201526020016128db565b83811115610bbd5750506000910152565b6000806040838503121561291757600080fd5b825167ffffffffffffffff81111561292e57600080fd5b8301601f8101851361293f57600080fd5b805161294d61285d826127a2565b81815286602083850101111561296257600080fd5b6129738260208301602086016128d8565b809450505050602083015161298781612428565b809150509250929050565b6000602082840312156129a457600080fd5b81518015158114611ffd57600080fd5b600181815b80851115612a0d57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156129f3576129f361275c565b80851615612a0057918102915b93841c93908002906129b9565b509250929050565b600082612a2457506001611ae0565b81612a3157506000611ae0565b8160018114612a475760028114612a5157612a6d565b6001915050611ae0565b60ff841115612a6257612a6261275c565b50506001821b611ae0565b5060208310610133831016604e8410600b8410161715612a90575081810a611ae0565b612a9a83836129b4565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612acc57612acc61275c565b029392505050565b6000611ffd8383612a15565b8051612aeb81612428565b919050565b600060208284031215612b0257600080fd5b8151611ffd81612428565b60008251612b1f8184602087016128d8565b9190910192915050565b600060208284031215612b3b57600080fd5b6040516020810181811067ffffffffffffffff82111715612b5e57612b5e61260e565b6040529151825250919050565b80516fffffffffffffffffffffffffffffffff81168114612aeb57600080fd5b805164ffffffffff81168114612aeb57600080fd5b805161ffff81168114612aeb57600080fd5b60006101e08284031215612bc557600080fd5b612bcd61263d565b612bd78484612b29565b8152612be560208401612b6b565b6020820152612bf660408401612b6b565b6040820152612c0760608401612b6b565b6060820152612c1860808401612b6b565b6080820152612c2960a08401612b6b565b60a0820152612c3a60c08401612b8b565b60c0820152612c4b60e08401612ba0565b60e0820152610100612c5e818501612ae0565b90820152610120612c70848201612ae0565b90820152610140612c82848201612ae0565b90820152610160612c94848201612ae0565b90820152610180612ca6848201612b6b565b908201526101a0612cb8848201612b6b565b908201526101c0612cca848201612b6b565b908201529392505050565b600060208284031215612ce757600080fd5b8151611ffd816126b6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612d57577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6020815260008251806020840152612d7b8160408501602087016128d8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220677af4e44727fcdd95a1a0f6e9a16eba45ec182b71bcd51bcbec667f4e58d13764736f6c634300080a00338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","opcodes":"PUSH2 0x100 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x32B7 CODESIZE SUB DUP1 PUSH3 0x32B7 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0x36C JUMP JUMPDEST DUP3 DUP3 DUP2 DUP1 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x92 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0xB8 SWAP2 SWAP1 PUSH3 0x3C0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE POP PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 DUP3 SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x3297 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 DUP3 SWAP1 LOG3 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x134 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x15A SWAP2 SWAP1 PUSH3 0x3C0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0xC0 MSTORE PUSH1 0x40 MLOAD PUSH4 0xFB04E17B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP4 AND SWAP2 POP PUSH4 0xFB04E17B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 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 PUSH3 0x1CE SWAP2 SWAP1 PUSH3 0x3E7 JUMP JUMPDEST ISZERO PUSH3 0x221 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F7420612076616C6964204175677573747573206164647265737300000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xE0 MSTORE POP PUSH1 0x1 DUP1 SSTORE PUSH3 0x23D DUP2 PUSH3 0x246 JUMP JUMPDEST POP POP POP PUSH3 0x40B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH3 0x2A2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH3 0x218 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x309 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x218 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x3297 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 LOG3 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 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x369 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH3 0x38F DUP2 PUSH3 0x353 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP4 POP PUSH3 0x3A2 DUP2 PUSH3 0x353 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP3 POP PUSH3 0x3B5 DUP2 PUSH3 0x353 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x3D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x3E0 DUP2 PUSH3 0x353 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x3FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x3E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x2DE3 PUSH3 0x4B4 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x199 ADD MSTORE PUSH2 0x1064 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x172 ADD MSTORE PUSH2 0x1F5A ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x1DB ADD MSTORE DUP2 DUP2 PUSH2 0x411 ADD MSTORE DUP2 DUP2 PUSH2 0x5D1 ADD MSTORE DUP2 DUP2 PUSH2 0x613 ADD MSTORE DUP2 DUP2 PUSH2 0x691 ADD MSTORE DUP2 DUP2 PUSH2 0x70A ADD MSTORE DUP2 DUP2 PUSH2 0x74C ADD MSTORE DUP2 DUP2 PUSH2 0x7CA ADD MSTORE DUP2 DUP2 PUSH2 0xC1F ADD MSTORE DUP2 DUP2 PUSH2 0xC61 ADD MSTORE DUP2 DUP2 PUSH2 0xCE1 ADD MSTORE DUP2 DUP2 PUSH2 0xD85 ADD MSTORE DUP2 DUP2 PUSH2 0xDB0 ADD MSTORE DUP2 DUP2 PUSH2 0x1BAB ADD MSTORE PUSH2 0x1D5A ADD MSTORE PUSH1 0x0 PUSH1 0xE7 ADD MSTORE PUSH2 0x2DE3 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 0xC8 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3A829867 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0x7535D246 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x1D6 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3A829867 EQ PUSH2 0x194 JUMPI DUP1 PUSH4 0x4DB9DC97 EQ PUSH2 0x1BB JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1B11D0FF GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x1B11D0FF EQ PUSH2 0x133 JUMPI DUP1 PUSH4 0x32E4B286 EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0x38013F02 EQ PUSH2 0x16D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH3 0xAE3BF8 EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0x542975C EQ PUSH2 0xE2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE0 PUSH2 0xDB CALLDATASIZE PUSH1 0x4 PUSH2 0x244A JUMP JUMPDEST PUSH2 0x22E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x109 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x146 PUSH2 0x141 CALLDATASIZE PUSH1 0x4 PUSH2 0x24B0 JUMP JUMPDEST PUSH2 0x385 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12A JUMP JUMPDEST PUSH2 0x15F PUSH2 0xBB8 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12A JUMP JUMPDEST PUSH2 0x109 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x109 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0xE0 PUSH2 0x1C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x252C JUMP JUMPDEST PUSH2 0x4BC JUMP JUMPDEST PUSH2 0xE0 PUSH2 0x849 JUMP JUMPDEST PUSH2 0x109 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x109 JUMP JUMPDEST PUSH2 0xE0 PUSH2 0x229 CALLDATASIZE PUSH1 0x4 PUSH2 0x244A JUMP JUMPDEST PUSH2 0x939 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x2B4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x382 PUSH2 0x2D6 PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x340 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x364 SWAP2 SWAP1 PUSH2 0x25F5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP2 SWAP1 PUSH2 0xAEA JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 PUSH1 0x1 SLOAD EQ ISZERO PUSH2 0x3F4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x2 PUSH1 0x1 SSTORE CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x498 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43414C4C45525F4D5553545F42455F504F4F4C00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST DUP6 DUP5 DUP9 PUSH2 0x4A9 DUP7 DUP7 DUP11 DUP6 DUP6 DUP9 PUSH2 0xBC3 JUMP JUMPDEST POP POP PUSH1 0x1 DUP1 DUP1 SSTORE SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x1 SLOAD EQ ISZERO PUSH2 0x529 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x2 PUSH1 0x1 SSTORE PUSH2 0x53B DUP9 DUP7 DUP7 DUP10 CALLER PUSH2 0xE07 JUMP JUMPDEST SWAP6 POP PUSH2 0x557 DUP10 CALLER DUP10 PUSH2 0x552 CALLDATASIZE DUP7 SWAP1 SUB DUP7 ADD DUP7 PUSH2 0x2740 JUMP JUMPDEST PUSH2 0xFDA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x59F DUP6 DUP6 DUP6 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 DUP16 SWAP3 POP DUP15 SWAP2 POP DUP14 SWAP1 POP DUP13 PUSH2 0x1000 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x5AD DUP3 DUP11 PUSH2 0x278B JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x6EE JUMPI PUSH2 0x5F7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND PUSH32 0x0 PUSH1 0x0 PUSH2 0x1846 JUMP JUMPDEST PUSH2 0x638 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND PUSH32 0x0 DUP4 PUSH2 0x1846 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE8EDA9DF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE CALLER PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x64 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xE8EDA9DF SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6E9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0x730 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND PUSH32 0x0 PUSH1 0x0 PUSH2 0x1846 JUMP JUMPDEST PUSH2 0x771 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND PUSH32 0x0 DUP11 PUSH2 0x1846 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x573ADE8100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP11 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD DUP10 SWAP1 MSTORE CALLER PUSH1 0x64 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x573ADE81 SWAP1 PUSH1 0x84 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x813 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x837 SWAP2 SWAP1 PUSH2 0x25F5 JUMP JUMPDEST POP POP PUSH1 0x1 DUP1 SSTORE POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x8CA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x9BA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xA5D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0xB4D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0xB57 DUP5 PUSH2 0x1A04 JUMP JUMPDEST PUSH2 0xBBD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0xBD6 DUP12 DUP14 ADD DUP14 PUSH2 0x27E8 JUMP JUMPDEST SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP PUSH2 0xBEF DUP7 DUP5 DUP7 DUP9 DUP14 PUSH2 0xE07 JUMP JUMPDEST SWAP5 POP PUSH1 0x0 PUSH2 0xC01 DUP6 DUP5 DUP12 DUP11 DUP13 DUP12 PUSH2 0x1000 JUMP JUMPDEST SWAP1 POP PUSH2 0xC45 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH32 0x0 PUSH1 0x0 PUSH2 0x1846 JUMP JUMPDEST PUSH2 0xC86 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH32 0x0 DUP9 PUSH2 0x1846 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x573ADE8100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD DUP7 SWAP1 MSTORE DUP12 DUP2 AND PUSH1 0x64 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x573ADE81 SWAP1 PUSH1 0x84 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD2A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD4E SWAP2 SWAP1 PUSH2 0x25F5 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xD5B DUP3 DUP14 PUSH2 0x1AD0 JUMP JUMPDEST SWAP1 POP PUSH2 0xD69 DUP11 DUP13 DUP4 DUP7 PUSH2 0xFDA JUMP JUMPDEST PUSH2 0xDAB PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND PUSH32 0x0 PUSH1 0x0 PUSH2 0x1846 JUMP JUMPDEST PUSH2 0xDF7 PUSH32 0x0 PUSH2 0xDD9 DUP12 DUP16 PUSH2 0x1AD0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND SWAP2 SWAP1 PUSH2 0x1846 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xE13 DUP8 PUSH2 0x1AE6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP8 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xE2B JUMPI PUSH2 0xE2B PUSH2 0x28A9 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xE3C JUMPI PUSH2 0xE3C PUSH2 0x28A9 JUMP JUMPDEST EQ PUSH2 0xE4C JUMPI DUP2 PUSH2 0x140 ADD MLOAD PUSH2 0xE53 JUMP JUMPDEST DUP2 PUSH2 0x120 ADD MLOAD JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEC5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEE9 SWAP2 SWAP1 PUSH2 0x25F5 JUMP JUMPDEST SWAP1 POP DUP7 ISZERO PUSH2 0xF63 JUMPI DUP6 DUP2 GT ISZERO PUSH2 0xF5B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F414D4F554E545F544F5F524550415900000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST DUP1 SWAP6 POP PUSH2 0xFCD JUMP JUMPDEST DUP1 DUP7 GT ISZERO PUSH2 0xFCD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F444542545F52455041595F414D4F554E5400000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST POP SWAP4 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFE5 DUP6 PUSH2 0x1AE6 JUMP JUMPDEST PUSH2 0x100 ADD MLOAD SWAP1 POP PUSH2 0xFF9 DUP6 DUP3 DUP7 DUP7 DUP7 PUSH2 0x1C17 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP8 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1019 SWAP2 SWAP1 PUSH2 0x2904 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFB04E17B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP5 POP SWAP1 SWAP3 POP PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xFB04E17B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10AD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10D1 SWAP2 SWAP1 PUSH2 0x2992 JUMP JUMPDEST PUSH2 0x1137 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F415547555354555300000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1142 DUP9 PUSH2 0x1E30 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH1 0x0 PUSH2 0x1152 DUP9 PUSH2 0x1E30 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH1 0x0 PUSH2 0x1162 DUP11 PUSH2 0x1F12 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x116F DUP11 PUSH2 0x1F12 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x11C7 PUSH2 0x1184 PUSH2 0x2710 PUSH2 0xBB8 PUSH2 0x1AD0 JUMP JUMPDEST PUSH2 0x11C1 PUSH2 0x119C PUSH2 0x1195 DUP9 PUSH1 0xA PUSH2 0x2AD4 JUMP JUMPDEST DUP8 SWAP1 PUSH2 0x1FC7 JUMP JUMPDEST PUSH2 0x11BB PUSH2 0x11B4 PUSH2 0x11AD DUP12 PUSH1 0xA PUSH2 0x2AD4 JUMP JUMPDEST DUP9 SWAP1 PUSH2 0x1FC7 JUMP JUMPDEST DUP15 SWAP1 PUSH2 0x1FC7 JUMP JUMPDEST SWAP1 PUSH2 0x1FF1 JUMP JUMPDEST SWAP1 PUSH2 0x2004 JUMP JUMPDEST SWAP1 POP DUP1 DUP11 GT ISZERO PUSH2 0x1259 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6D6178416D6F756E74546F5377617020657863656564206D617820736C697070 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6167650000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB JUMP JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP3 POP PUSH4 0x70A08231 SWAP2 POP PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12EF SWAP2 SWAP1 PUSH2 0x25F5 JUMP JUMPDEST SWAP1 POP DUP6 DUP2 LT ISZERO PUSH2 0x135B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F42414C414E43455F4245464F52455F53574150 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13C8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13EC SWAP2 SWAP1 PUSH2 0x25F5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD2C4B598 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x143B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x145F SWAP2 SWAP1 PUSH2 0x2AF0 JUMP JUMPDEST SWAP1 POP PUSH2 0x1483 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND DUP3 PUSH1 0x0 PUSH2 0x1846 JUMP JUMPDEST PUSH2 0x14A4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND DUP3 DUP11 PUSH2 0x1846 JUMP JUMPDEST DUP12 ISZERO PUSH2 0x1536 JUMPI PUSH1 0x4 DUP13 LT ISZERO DUP1 ISZERO PUSH2 0x14C7 JUMPI POP DUP5 MLOAD PUSH2 0x14C3 SWAP1 PUSH1 0x20 PUSH2 0x2047 JUMP JUMPDEST DUP13 GT ISZERO JUMPDEST PUSH2 0x152D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x544F5F414D4F554E545F4F46465345545F4F55545F4F465F52414E4745000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST DUP7 PUSH1 0x20 DUP14 ADD DUP7 ADD MSTORE JUMPDEST PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH1 0x40 MLOAD PUSH2 0x155D SWAP2 SWAP1 PUSH2 0x2B0D 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 0x159A 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 0x159F JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x15B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x161F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1643 SWAP2 SWAP1 PUSH2 0x25F5 JUMP JUMPDEST SWAP1 POP PUSH2 0x164F DUP2 DUP7 PUSH2 0x278B JUMP JUMPDEST SWAP8 POP DUP10 DUP9 GT ISZERO PUSH2 0x16BB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x57524F4E475F42414C414E43455F41465445525F535741500000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH2 0x1758 SWAP1 DUP7 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x172E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1752 SWAP2 SWAP1 PUSH2 0x25F5 JUMP JUMPDEST SWAP1 PUSH2 0x2047 JUMP JUMPDEST SWAP1 POP DUP10 DUP2 LT ISZERO PUSH2 0x17C4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F414D4F554E545F524543454956454400000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xBF77FD13A39D14DC0DA779342C14105C38D9A5D0C60F2CAA22F5FD1D5525416D DUP12 DUP5 PUSH1 0x40 MLOAD PUSH2 0x182C SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x18E6 JUMPI POP PUSH1 0x40 MLOAD PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18C0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18E4 SWAP2 SWAP1 PUSH2 0x25F5 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x1972 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x20746F206E6F6E2D7A65726F20616C6C6F77616E636500000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB 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 0x95EA7B300000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x19FF SWAP1 DUP5 SWAP1 PUSH2 0x2057 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A44 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x1A83 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x1ABD JUMPI PUSH2 0x1A7E PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x1A0B JUMP JUMPDEST PUSH2 0x1ACA JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x1AB4 JUMPI PUSH2 0x1AB4 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x1A0B JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x1ACA JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x1AE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x200 DUP2 ADD DUP3 MSTORE PUSH1 0x0 PUSH2 0x1E0 DUP3 ADD DUP2 DUP2 MSTORE DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1A0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BF3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1AE0 SWAP2 SWAP1 PUSH2 0x2BB2 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD ISZERO PUSH2 0x1CE4 JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP1 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x80 DUP7 ADD MLOAD SWAP3 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x64 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0xFF SWAP1 SWAP2 AND PUSH1 0x84 DUP5 ADD MSTORE PUSH1 0xA4 DUP4 ADD MSTORE PUSH1 0xC4 DUP3 ADD MSTORE SWAP1 DUP6 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1CCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1CDF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0x1D06 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 ADDRESS DUP6 PUSH2 0x2163 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x69328DEC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP5 SWAP1 MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE DUP4 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x69328DEC SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1DA5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DC9 SWAP2 SWAP1 PUSH2 0x25F5 JUMP JUMPDEST EQ PUSH2 0xFF9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x554E45585045435445445F414D4F554E545F57495448445241574E0000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E7E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1EA2 SWAP2 SWAP1 PUSH2 0x2CD5 JUMP JUMPDEST SWAP1 POP PUSH1 0x4D DUP2 PUSH1 0xFF AND GT ISZERO PUSH2 0x1AE0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x544F4F5F4D414E595F444543494D414C535F4F4E5F544F4B454E000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1FA3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1AE0 SWAP2 SWAP1 PUSH2 0x25F5 JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 PUSH2 0x1FE8 JUMPI POP POP DUP2 DUP2 MUL DUP2 DUP4 DUP3 DUP2 PUSH2 0x1FE5 JUMPI PUSH2 0x1FE5 PUSH2 0x2CF2 JUMP JUMPDEST DIV EQ JUMPDEST PUSH2 0x1AE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1FFD DUP3 DUP5 PUSH2 0x2D21 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x2039 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0x1AE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x20B9 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x223E SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x19FF JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x20D7 SWAP2 SWAP1 PUSH2 0x2992 JUMP JUMPDEST PUSH2 0x19FF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F74207375636365656400000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x21CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x21D8 DUP6 PUSH2 0x1A04 JUMP JUMPDEST PUSH2 0xFF9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x60 PUSH2 0x224D DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x2255 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x22E7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x722063616C6C0000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB JUMP JUMPDEST DUP5 EXTCODESIZE PUSH2 0x234F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x2378 SWAP2 SWAP1 PUSH2 0x2B0D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x23B5 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 0x23BA JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x23CA DUP3 DUP3 DUP7 PUSH2 0x23D5 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x23E4 JUMPI POP DUP2 PUSH2 0x1FFD JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x23F4 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2AB SWAP2 SWAP1 PUSH2 0x2D5C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x245C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1FFD DUP2 PUSH2 0x2428 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2479 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2491 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x24A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x24C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x24D4 DUP2 PUSH2 0x2428 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0x24F2 DUP2 PUSH2 0x2428 JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x250E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x251A DUP10 DUP3 DUP11 ADD PUSH2 0x2467 JUMP JUMPDEST SWAP8 SWAP11 SWAP7 SWAP10 POP SWAP5 SWAP8 POP SWAP3 SWAP6 SWAP4 SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP10 DUP12 SUB PUSH2 0x180 DUP2 SLT ISZERO PUSH2 0x254C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP11 CALLDATALOAD PUSH2 0x2557 DUP2 PUSH2 0x2428 JUMP JUMPDEST SWAP10 POP PUSH1 0x20 DUP12 ADD CALLDATALOAD PUSH2 0x2567 DUP2 PUSH2 0x2428 JUMP JUMPDEST SWAP9 POP PUSH1 0x40 DUP12 ADD CALLDATALOAD SWAP8 POP PUSH1 0x60 DUP12 ADD CALLDATALOAD SWAP7 POP PUSH1 0x80 DUP12 ADD CALLDATALOAD SWAP6 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 DUP12 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x259F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x25AB DUP14 DUP3 DUP15 ADD PUSH2 0x2467 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP POP PUSH1 0xA0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 DUP3 ADD SLT ISZERO PUSH2 0x25E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xE0 DUP11 ADD SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2607 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2661 JUMPI PUSH2 0x2661 PUSH2 0x260E JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x26AE JUMPI PUSH2 0x26AE PUSH2 0x260E JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x26D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x26FA JUMPI PUSH2 0x26FA PUSH2 0x260E JUMP JUMPDEST DUP1 PUSH1 0x40 MSTORE POP DUP1 SWAP2 POP DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD PUSH2 0x271E DUP2 PUSH2 0x26B6 JUMP JUMPDEST DUP1 PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2752 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1FFD DUP4 DUP4 PUSH2 0x26C5 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x279D JUMPI PUSH2 0x279D PUSH2 0x275C JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x27BC JUMPI PUSH2 0x27BC PUSH2 0x260E JUMP JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x140 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x2802 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x280D DUP2 PUSH2 0x2428 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x283E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 ADD PUSH1 0x1F DUP2 ADD DUP10 SGT PUSH2 0x284F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x2862 PUSH2 0x285D DUP3 PUSH2 0x27A2 JUMP JUMPDEST PUSH2 0x2667 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP11 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x2877 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP4 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP PUSH2 0x289D DUP9 PUSH1 0xA0 DUP10 ADD PUSH2 0x26C5 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x28F3 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x28DB JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xBBD JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2917 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x292E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x1F DUP2 ADD DUP6 SGT PUSH2 0x293F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x294D PUSH2 0x285D DUP3 PUSH2 0x27A2 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP7 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x2962 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2973 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x28D8 JUMP JUMPDEST DUP1 SWAP5 POP POP POP POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x2987 DUP2 PUSH2 0x2428 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x29A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1FFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x2A0D JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x29F3 JUMPI PUSH2 0x29F3 PUSH2 0x275C JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x2A00 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x29B9 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2A24 JUMPI POP PUSH1 0x1 PUSH2 0x1AE0 JUMP JUMPDEST DUP2 PUSH2 0x2A31 JUMPI POP PUSH1 0x0 PUSH2 0x1AE0 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x2A47 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x2A51 JUMPI PUSH2 0x2A6D JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x1AE0 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x2A62 JUMPI PUSH2 0x2A62 PUSH2 0x275C JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x1AE0 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x2A90 JUMPI POP DUP2 DUP2 EXP PUSH2 0x1AE0 JUMP JUMPDEST PUSH2 0x2A9A DUP4 DUP4 PUSH2 0x29B4 JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x2ACC JUMPI PUSH2 0x2ACC PUSH2 0x275C JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1FFD DUP4 DUP4 PUSH2 0x2A15 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2AEB DUP2 PUSH2 0x2428 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2B02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1FFD DUP2 PUSH2 0x2428 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x2B1F DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x28D8 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2B3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x2B5E JUMPI PUSH2 0x2B5E PUSH2 0x260E JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2AEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2AEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x2AEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2BC5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2BCD PUSH2 0x263D JUMP JUMPDEST PUSH2 0x2BD7 DUP5 DUP5 PUSH2 0x2B29 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x2BE5 PUSH1 0x20 DUP5 ADD PUSH2 0x2B6B JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2BF6 PUSH1 0x40 DUP5 ADD PUSH2 0x2B6B JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x2C07 PUSH1 0x60 DUP5 ADD PUSH2 0x2B6B JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x2C18 PUSH1 0x80 DUP5 ADD PUSH2 0x2B6B JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x2C29 PUSH1 0xA0 DUP5 ADD PUSH2 0x2B6B JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x2C3A PUSH1 0xC0 DUP5 ADD PUSH2 0x2B8B JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x2C4B PUSH1 0xE0 DUP5 ADD PUSH2 0x2BA0 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x2C5E DUP2 DUP6 ADD PUSH2 0x2AE0 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x2C70 DUP5 DUP3 ADD PUSH2 0x2AE0 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x2C82 DUP5 DUP3 ADD PUSH2 0x2AE0 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x2C94 DUP5 DUP3 ADD PUSH2 0x2AE0 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x2CA6 DUP5 DUP3 ADD PUSH2 0x2B6B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x2CB8 DUP5 DUP3 ADD PUSH2 0x2B6B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x2CCA DUP5 DUP3 ADD PUSH2 0x2B6B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2CE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1FFD DUP2 PUSH2 0x26B6 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2D57 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x2D7B DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x28D8 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH8 0x7AF4E44727FCDD95 LOG1 LOG0 0xF6 0xE9 LOG1 PUSH15 0xBA45EC182B71BCD51BCBEC667F4E58 0xD1 CALLDATACOPY PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER DUP12 0xE0 SMOD SWAP13 MSTORE8 AND MSIZE EQ SGT DIFFICULTY 0xCD 0x1F 0xD0 LOG4 CALLCODE DUP5 NOT 0x49 PUSH32 0x9722A3DAAFE3B4186F6B6457E000000000000000000000000000000000000000 ","sourceMap":"1192:7775:110:-:0;;;1497:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1649:17;1668:16;1266:17:107;2036::106;673:8:25;-1:-1:-1;;;;;652:29:25;;;-1:-1:-1;;;;;652:29:25;;;;;700:8;-1:-1:-1;;;;;700:16:25;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;687:32:25;;;-1:-1:-1;835:17:11;873:18;;-1:-1:-1;;;;;;873:18:11;678:10:4;873:18:11;;;;;902:43;;678:10:4;;;;-1:-1:-1;;;;;;;;;;;902:43:11;835:17;;902:43;829:121;2089:17:106::1;-1:-1:-1::0;;;;;2089:32:106::1;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2061:63:106;;::::1;;::::0;1380:44:107::1;::::0;-1:-1:-1;;;1380:44:107;;1421:1:::1;1380:44;::::0;::::1;1262:51:201::0;1380:32:107;;::::1;::::0;-1:-1:-1;1380:32:107::1;::::0;1235:18:201;;1380:44:107::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1379:45;1371:86;;;::::0;-1:-1:-1;;;1371:86:107;;1808:2:201;1371:86:107::1;::::0;::::1;1790:21:201::0;1847:2;1827:18;;;1820:30;1886;1866:18;;;1859:58;1934:18;;1371:86:107::1;;;;;;;;;-1:-1:-1::0;;;;;1463:36:107::1;;::::0;-1:-1:-1;1616:1:114;1711:22;;1692:24:110::1;1710:5:::0;1692:17:::1;:24::i;:::-;1497:224:::0;;;1192:7775;;1875:226:11;1204:6;;-1:-1:-1;;;;;1204:6:11;678:10:4;1204:22:11;1196:67;;;;-1:-1:-1;;;1196:67:11;;2165:2:201;1196:67:11;;;2147:21:201;;;2184:18;;;2177:30;2243:34;2223:18;;;2216:62;2295:18;;1196:67:11;1963:356:201;1196:67:11;-1:-1:-1;;;;;1959:22:11;::::1;1951:73;;;::::0;-1:-1:-1;;;1951:73:11;;2526:2:201;1951:73:11::1;::::0;::::1;2508:21:201::0;2565:2;2545:18;;;2538:30;2604:34;2584:18;;;2577:62;-1:-1:-1;;;2655:18:201;;;2648:36;2701:19;;1951:73:11::1;2324:402:201::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;-1:-1:-1;;;;;2035:38:11;;::::1;::::0;2056:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;2035:38:11;::::1;2079:6;:17:::0;;-1:-1:-1;;;;;;2079:17:11::1;-1:-1:-1::0;;;;;2079:17:11;;;::::1;::::0;;;::::1;::::0;;1875:226::o;14:155:201:-;-1:-1:-1;;;;;113:31:201;;103:42;;93:70;;159:1;156;149:12;93:70;14:155;:::o;174:657::-;328:6;336;344;397:2;385:9;376:7;372:23;368:32;365:52;;;413:1;410;403:12;365:52;445:9;439:16;464:55;513:5;464:55;:::i;:::-;588:2;573:18;;567:25;538:5;;-1:-1:-1;601:57:201;567:25;601:57;:::i;:::-;729:2;714:18;;708:25;677:7;;-1:-1:-1;742:57:201;708:25;742:57;:::i;:::-;818:7;808:17;;;174:657;;;;;:::o;836:275::-;906:6;959:2;947:9;938:7;934:23;930:32;927:52;;;975:1;972;965:12;927:52;1007:9;1001:16;1026:55;1075:5;1026:55;:::i;:::-;1100:5;836:275;-1:-1:-1;;;836:275:201:o;1324:277::-;1391:6;1444:2;1432:9;1423:7;1419:23;1415:32;1412:52;;;1460:1;1457;1450:12;1412:52;1492:9;1486:16;1545:5;1538:13;1531:21;1524:5;1521:32;1511:60;;1567:1;1564;1557:12;2324:402;1192:7775:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ADDRESSES_PROVIDER_3442":{"entryPoint":null,"id":3442,"parameterSlots":0,"returnSlots":0},"@AUGUSTUS_REGISTRY_29279":{"entryPoint":null,"id":29279,"parameterSlots":0,"returnSlots":0},"@MAX_SLIPPAGE_PERCENT_29022":{"entryPoint":null,"id":29022,"parameterSlots":0,"returnSlots":0},"@ORACLE_29025":{"entryPoint":null,"id":29025,"parameterSlots":0,"returnSlots":0},"@POOL_3446":{"entryPoint":null,"id":3446,"parameterSlots":0,"returnSlots":0},"@_buyOnParaSwap_29558":{"entryPoint":4096,"id":29558,"parameterSlots":6,"returnSlots":1},"@_callOptionalReturn_2189":{"entryPoint":8279,"id":2189,"parameterSlots":2,"returnSlots":0},"@_getDecimals_29102":{"entryPoint":7728,"id":29102,"parameterSlots":1,"returnSlots":1},"@_getPrice_29077":{"entryPoint":7954,"id":29077,"parameterSlots":1,"returnSlots":1},"@_getReserveData_29117":{"entryPoint":6886,"id":29117,"parameterSlots":1,"returnSlots":1},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_pullATokenAndWithdraw_29151":{"entryPoint":4058,"id":29151,"parameterSlots":4,"returnSlots":0},"@_pullATokenAndWithdraw_29220":{"entryPoint":7191,"id":29220,"parameterSlots":5,"returnSlots":0},"@_swapAndRepay_30696":{"entryPoint":3011,"id":30696,"parameterSlots":6,"returnSlots":0},"@add_2216":{"entryPoint":6864,"id":2216,"parameterSlots":2,"returnSlots":1},"@div_2309":{"entryPoint":8177,"id":2309,"parameterSlots":2,"returnSlots":1},"@executeOperation_30413":{"entryPoint":901,"id":30413,"parameterSlots":6,"returnSlots":1},"@functionCallWithValue_586":{"entryPoint":8789,"id":586,"parameterSlots":4,"returnSlots":1},"@functionCall_516":{"entryPoint":8766,"id":516,"parameterSlots":3,"returnSlots":1},"@getDebtRepayAmount_30776":{"entryPoint":3591,"id":30776,"parameterSlots":5,"returnSlots":1},"@getLastTransferResult_117":{"entryPoint":6660,"id":117,"parameterSlots":1,"returnSlots":1},"@isContract_445":{"entryPoint":null,"id":445,"parameterSlots":1,"returnSlots":1},"@mul_2294":{"entryPoint":8135,"id":2294,"parameterSlots":2,"returnSlots":1},"@owner_1509":{"entryPoint":null,"id":1509,"parameterSlots":0,"returnSlots":1},"@percentMul_21119":{"entryPoint":8196,"id":21119,"parameterSlots":2,"returnSlots":1},"@renounceOwnership_1544":{"entryPoint":2121,"id":1544,"parameterSlots":0,"returnSlots":0},"@rescueTokens_29244":{"entryPoint":558,"id":29244,"parameterSlots":1,"returnSlots":0},"@safeApprove_2067":{"entryPoint":6214,"id":2067,"parameterSlots":3,"returnSlots":0},"@safeTransferFrom_106":{"entryPoint":8547,"id":106,"parameterSlots":4,"returnSlots":0},"@safeTransfer_78":{"entryPoint":2794,"id":78,"parameterSlots":3,"returnSlots":0},"@sub_2239":{"entryPoint":8263,"id":2239,"parameterSlots":2,"returnSlots":1},"@swapAndRepay_30553":{"entryPoint":1212,"id":30553,"parameterSlots":9,"returnSlots":0},"@transferOwnership_1572":{"entryPoint":2361,"id":1572,"parameterSlots":1,"returnSlots":0},"@verifyCallResult_721":{"entryPoint":9173,"id":721,"parameterSlots":3,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":10976,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":9319,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_struct_PermitSignature":{"entryPoint":9925,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_ReserveConfigurationMap_fromMemory":{"entryPoint":11049,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":10992,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_bytes_calldata_ptr":{"entryPoint":9392,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":10642,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes_memory_ptrt_contract$_IParaSwapAugustus_$30951_fromMemory":{"entryPoint":10500,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_contract$_IERC20Detailed_$1464t_contract$_IERC20Detailed_$1464t_uint256t_uint256t_uint256t_uint256t_bytes_calldata_ptrt_struct$_PermitSignature_$29019_calldata_ptr":{"entryPoint":9516,"id":null,"parameterSlots":2,"returnSlots":9},"abi_decode_tuple_t_contract$_IERC20Detailed_$1464t_uint256t_uint256t_uint256t_bytes_memory_ptrt_struct$_PermitSignature_$29019_memory_ptr":{"entryPoint":10216,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_contract$_IERC20_$1442":{"entryPoint":9290,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_PermitSignature_$29019_memory_ptr":{"entryPoint":10048,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory":{"entryPoint":11186,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":9717,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint8_fromMemory":{"entryPoint":11477,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint128_fromMemory":{"entryPoint":11115,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint16_fromMemory":{"entryPoint":11168,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint40_fromMemory":{"entryPoint":11147,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":11021,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_address_t_rational_0_by_1__to_t_address_t_uint256_t_address_t_uint16__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint256_t_address__to_t_address_t_uint256_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IParaSwapAugustusRegistry_$30961__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPriceOracleGetter_$5835__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":11612,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_170e863dc30648ef8ff66ea3f3e18e36ff4d45f0897cc6afd8a56e95f00a3d60__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3202e1fc4f78abbce03a97de69392b3f69ebba48c41588ffb32a1c8b97349f74__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4eedef4370592e3a8bf461b38c88567ca40f914461890c03d6ba3dcb2fd5ff46__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_51fc4946c16284910827fc38bc7611d60d4dd1f7d8fefa0da6f8642035c3c48b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_6e5d7e8ec1c44b1be662d5a482625181074d9516baace42f35250edc17de17e6__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_74fc5696336325aeb54c5d19133ed01308c8174de21fc66f38ac28668f995bc7__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_85a045c7862eb0e81d59fe8dfd2ed8c824917ce215328caf39199676e5939f87__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9bfa76b9c2e298d52f58639e051d7d21997f6c435f534dfd0c2e6c351c64a39a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_aaf54d652206a8d20544924cfa9c9432dfe69bab095c3b86a90e384e78ddb36d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f253c60ca7289769121ceb7e8a55d2372f327bb2c0c90e8e3ba6b77e057d495e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_fc5915f8715e0da4bd5e6487e67e57e89850a48fc18d4e921a811a8c928ad119__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"allocate_memory":{"entryPoint":9831,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_3199":{"entryPoint":9789,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":10146,"id":null,"parameterSlots":1,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":11553,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":10676,"id":null,"parameterSlots":2,"returnSlots":2},"checked_exp_t_uint256_t_uint256":{"entryPoint":10964,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":10773,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":10123,"id":null,"parameterSlots":2,"returnSlots":1},"copy_memory_to_memory":{"entryPoint":10456,"id":null,"parameterSlots":3,"returnSlots":0},"panic_error_0x11":{"entryPoint":10076,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":11506,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":10409,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":9742,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_contract_IERC20":{"entryPoint":9256,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_uint8":{"entryPoint":9910,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:26511:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"67:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"154:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"163:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"166:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"156:6:201"},"nodeType":"YulFunctionCall","src":"156:12:201"},"nodeType":"YulExpressionStatement","src":"156:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"90:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"101:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"108:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"97:3:201"},"nodeType":"YulFunctionCall","src":"97:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"87:2:201"},"nodeType":"YulFunctionCall","src":"87:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"80:6:201"},"nodeType":"YulFunctionCall","src":"80:73:201"},"nodeType":"YulIf","src":"77:93:201"}]},"name":"validator_revert_contract_IERC20","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"56:5:201","type":""}],"src":"14:162:201"},{"body":{"nodeType":"YulBlock","src":"266:185:201","statements":[{"body":{"nodeType":"YulBlock","src":"312:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"321:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"324:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"314:6:201"},"nodeType":"YulFunctionCall","src":"314:12:201"},"nodeType":"YulExpressionStatement","src":"314:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"287:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"296:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"283:3:201"},"nodeType":"YulFunctionCall","src":"283:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"308:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"279:3:201"},"nodeType":"YulFunctionCall","src":"279:32:201"},"nodeType":"YulIf","src":"276:52:201"},{"nodeType":"YulVariableDeclaration","src":"337:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"363:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"350:12:201"},"nodeType":"YulFunctionCall","src":"350:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"341:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"415:5:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"382:32:201"},"nodeType":"YulFunctionCall","src":"382:39:201"},"nodeType":"YulExpressionStatement","src":"382:39:201"},{"nodeType":"YulAssignment","src":"430:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"440:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"430:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IERC20_$1442","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"232:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"243:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"255:6:201","type":""}],"src":"181:270:201"},{"body":{"nodeType":"YulBlock","src":"588:125:201","statements":[{"nodeType":"YulAssignment","src":"598:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"610:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"621:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"606:3:201"},"nodeType":"YulFunctionCall","src":"606:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"598:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"640:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"655:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"663:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"651:3:201"},"nodeType":"YulFunctionCall","src":"651:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"633:6:201"},"nodeType":"YulFunctionCall","src":"633:74:201"},"nodeType":"YulExpressionStatement","src":"633:74:201"}]},"name":"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"557:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"568:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"579:4:201","type":""}],"src":"456:257:201"},{"body":{"nodeType":"YulBlock","src":"790:275:201","statements":[{"body":{"nodeType":"YulBlock","src":"839:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"848:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"851:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"841:6:201"},"nodeType":"YulFunctionCall","src":"841:12:201"},"nodeType":"YulExpressionStatement","src":"841:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"818:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"826:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"814:3:201"},"nodeType":"YulFunctionCall","src":"814:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"833:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"810:3:201"},"nodeType":"YulFunctionCall","src":"810:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"803:6:201"},"nodeType":"YulFunctionCall","src":"803:35:201"},"nodeType":"YulIf","src":"800:55:201"},{"nodeType":"YulAssignment","src":"864:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"887:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"874:12:201"},"nodeType":"YulFunctionCall","src":"874:20:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"864:6:201"}]},{"body":{"nodeType":"YulBlock","src":"937:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"946:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"949:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"939:6:201"},"nodeType":"YulFunctionCall","src":"939:12:201"},"nodeType":"YulExpressionStatement","src":"939:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"909:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"917:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"906:2:201"},"nodeType":"YulFunctionCall","src":"906:30:201"},"nodeType":"YulIf","src":"903:50:201"},{"nodeType":"YulAssignment","src":"962:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"978:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"986:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"974:3:201"},"nodeType":"YulFunctionCall","src":"974:17:201"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"962:8:201"}]},{"body":{"nodeType":"YulBlock","src":"1043:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1052:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1055:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1045:6:201"},"nodeType":"YulFunctionCall","src":"1045:12:201"},"nodeType":"YulExpressionStatement","src":"1045:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1014:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"1022:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1010:3:201"},"nodeType":"YulFunctionCall","src":"1010:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"1031:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1006:3:201"},"nodeType":"YulFunctionCall","src":"1006:30:201"},{"name":"end","nodeType":"YulIdentifier","src":"1038:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1003:2:201"},"nodeType":"YulFunctionCall","src":"1003:39:201"},"nodeType":"YulIf","src":"1000:59:201"}]},"name":"abi_decode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"753:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"761:3:201","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"769:8:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"779:6:201","type":""}],"src":"718:347:201"},{"body":{"nodeType":"YulBlock","src":"1227:682:201","statements":[{"body":{"nodeType":"YulBlock","src":"1274:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1283:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1286:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1276:6:201"},"nodeType":"YulFunctionCall","src":"1276:12:201"},"nodeType":"YulExpressionStatement","src":"1276:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1248:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1257:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1244:3:201"},"nodeType":"YulFunctionCall","src":"1244:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1269:3:201","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1240:3:201"},"nodeType":"YulFunctionCall","src":"1240:33:201"},"nodeType":"YulIf","src":"1237:53:201"},{"nodeType":"YulVariableDeclaration","src":"1299:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1325:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1312:12:201"},"nodeType":"YulFunctionCall","src":"1312:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1303:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1377:5:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"1344:32:201"},"nodeType":"YulFunctionCall","src":"1344:39:201"},"nodeType":"YulExpressionStatement","src":"1344:39:201"},{"nodeType":"YulAssignment","src":"1392:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1402:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1392:6:201"}]},{"nodeType":"YulAssignment","src":"1416:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1443:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1454:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1439:3:201"},"nodeType":"YulFunctionCall","src":"1439:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1426:12:201"},"nodeType":"YulFunctionCall","src":"1426:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1416:6:201"}]},{"nodeType":"YulAssignment","src":"1467:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1494:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1505:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1490:3:201"},"nodeType":"YulFunctionCall","src":"1490:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1477:12:201"},"nodeType":"YulFunctionCall","src":"1477:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1467:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1518:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1550:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1561:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1546:3:201"},"nodeType":"YulFunctionCall","src":"1546:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1533:12:201"},"nodeType":"YulFunctionCall","src":"1533:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"1522:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1607:7:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"1574:32:201"},"nodeType":"YulFunctionCall","src":"1574:41:201"},"nodeType":"YulExpressionStatement","src":"1574:41:201"},{"nodeType":"YulAssignment","src":"1624:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"1634:7:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1624:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1650:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1681:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1692:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1677:3:201"},"nodeType":"YulFunctionCall","src":"1677:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1664:12:201"},"nodeType":"YulFunctionCall","src":"1664:33:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1654:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1740:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1749:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1752:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1742:6:201"},"nodeType":"YulFunctionCall","src":"1742:12:201"},"nodeType":"YulExpressionStatement","src":"1742:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1712:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1720:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1709:2:201"},"nodeType":"YulFunctionCall","src":"1709:30:201"},"nodeType":"YulIf","src":"1706:50:201"},{"nodeType":"YulVariableDeclaration","src":"1765:84:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1821:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"1832:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1817:3:201"},"nodeType":"YulFunctionCall","src":"1817:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1841:7:201"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"1791:25:201"},"nodeType":"YulFunctionCall","src":"1791:58:201"},"variables":[{"name":"value4_1","nodeType":"YulTypedName","src":"1769:8:201","type":""},{"name":"value5_1","nodeType":"YulTypedName","src":"1779:8:201","type":""}]},{"nodeType":"YulAssignment","src":"1858:18:201","value":{"name":"value4_1","nodeType":"YulIdentifier","src":"1868:8:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"1858:6:201"}]},{"nodeType":"YulAssignment","src":"1885:18:201","value":{"name":"value5_1","nodeType":"YulIdentifier","src":"1895:8:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"1885:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1153:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1164:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1176:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1184:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1192:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1200:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1208:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"1216:6:201","type":""}],"src":"1070:839:201"},{"body":{"nodeType":"YulBlock","src":"2009:92:201","statements":[{"nodeType":"YulAssignment","src":"2019:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2031:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2042:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2027:3:201"},"nodeType":"YulFunctionCall","src":"2027:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2019:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2061:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2086:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2079:6:201"},"nodeType":"YulFunctionCall","src":"2079:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2072:6:201"},"nodeType":"YulFunctionCall","src":"2072:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2054:6:201"},"nodeType":"YulFunctionCall","src":"2054:41:201"},"nodeType":"YulExpressionStatement","src":"2054:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1978:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1989:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2000:4:201","type":""}],"src":"1914:187:201"},{"body":{"nodeType":"YulBlock","src":"2207:76:201","statements":[{"nodeType":"YulAssignment","src":"2217:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2229:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2240:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2225:3:201"},"nodeType":"YulFunctionCall","src":"2225:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2217:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2259:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"2270:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2252:6:201"},"nodeType":"YulFunctionCall","src":"2252:25:201"},"nodeType":"YulExpressionStatement","src":"2252:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2176:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2187:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2198:4:201","type":""}],"src":"2106:177:201"},{"body":{"nodeType":"YulBlock","src":"2416:125:201","statements":[{"nodeType":"YulAssignment","src":"2426:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2438:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2449:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2434:3:201"},"nodeType":"YulFunctionCall","src":"2434:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2426:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2468:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2483:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2491:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2479:3:201"},"nodeType":"YulFunctionCall","src":"2479:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2461:6:201"},"nodeType":"YulFunctionCall","src":"2461:74:201"},"nodeType":"YulExpressionStatement","src":"2461:74:201"}]},"name":"abi_encode_tuple_t_contract$_IPriceOracleGetter_$5835__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2385:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2396:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2407:4:201","type":""}],"src":"2288:253:201"},{"body":{"nodeType":"YulBlock","src":"2682:125:201","statements":[{"nodeType":"YulAssignment","src":"2692:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2704:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2715:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2700:3:201"},"nodeType":"YulFunctionCall","src":"2700:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2692:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2734:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2749:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2757:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2745:3:201"},"nodeType":"YulFunctionCall","src":"2745:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2727:6:201"},"nodeType":"YulFunctionCall","src":"2727:74:201"},"nodeType":"YulExpressionStatement","src":"2727:74:201"}]},"name":"abi_encode_tuple_t_contract$_IParaSwapAugustusRegistry_$30961__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2651:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2662:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2673:4:201","type":""}],"src":"2546:261:201"},{"body":{"nodeType":"YulBlock","src":"3102:959:201","statements":[{"nodeType":"YulVariableDeclaration","src":"3112:33:201","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3126:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3135:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3122:3:201"},"nodeType":"YulFunctionCall","src":"3122:23:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3116:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3170:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3179:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3182:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3172:6:201"},"nodeType":"YulFunctionCall","src":"3172:12:201"},"nodeType":"YulExpressionStatement","src":"3172:12:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3161:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"3165:3:201","type":"","value":"384"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3157:3:201"},"nodeType":"YulFunctionCall","src":"3157:12:201"},"nodeType":"YulIf","src":"3154:32:201"},{"nodeType":"YulVariableDeclaration","src":"3195:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3221:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3208:12:201"},"nodeType":"YulFunctionCall","src":"3208:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3199:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3273:5:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"3240:32:201"},"nodeType":"YulFunctionCall","src":"3240:39:201"},"nodeType":"YulExpressionStatement","src":"3240:39:201"},{"nodeType":"YulAssignment","src":"3288:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3298:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3288:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3312:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3344:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3355:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3340:3:201"},"nodeType":"YulFunctionCall","src":"3340:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3327:12:201"},"nodeType":"YulFunctionCall","src":"3327:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"3316:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3401:7:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"3368:32:201"},"nodeType":"YulFunctionCall","src":"3368:41:201"},"nodeType":"YulExpressionStatement","src":"3368:41:201"},{"nodeType":"YulAssignment","src":"3418:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3428:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3418:6:201"}]},{"nodeType":"YulAssignment","src":"3444:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3471:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3482:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3467:3:201"},"nodeType":"YulFunctionCall","src":"3467:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3454:12:201"},"nodeType":"YulFunctionCall","src":"3454:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3444:6:201"}]},{"nodeType":"YulAssignment","src":"3495:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3522:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3533:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3518:3:201"},"nodeType":"YulFunctionCall","src":"3518:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3505:12:201"},"nodeType":"YulFunctionCall","src":"3505:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3495:6:201"}]},{"nodeType":"YulAssignment","src":"3546:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3573:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3584:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3569:3:201"},"nodeType":"YulFunctionCall","src":"3569:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3556:12:201"},"nodeType":"YulFunctionCall","src":"3556:33:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3546:6:201"}]},{"nodeType":"YulAssignment","src":"3598:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3625:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3636:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3621:3:201"},"nodeType":"YulFunctionCall","src":"3621:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3608:12:201"},"nodeType":"YulFunctionCall","src":"3608:33:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"3598:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3650:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3681:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3692:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3677:3:201"},"nodeType":"YulFunctionCall","src":"3677:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3664:12:201"},"nodeType":"YulFunctionCall","src":"3664:33:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"3654:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3740:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3749:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3752:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3742:6:201"},"nodeType":"YulFunctionCall","src":"3742:12:201"},"nodeType":"YulExpressionStatement","src":"3742:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3712:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3720:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3709:2:201"},"nodeType":"YulFunctionCall","src":"3709:30:201"},"nodeType":"YulIf","src":"3706:50:201"},{"nodeType":"YulVariableDeclaration","src":"3765:84:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3821:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"3832:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3817:3:201"},"nodeType":"YulFunctionCall","src":"3817:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3841:7:201"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"3791:25:201"},"nodeType":"YulFunctionCall","src":"3791:58:201"},"variables":[{"name":"value6_1","nodeType":"YulTypedName","src":"3769:8:201","type":""},{"name":"value7_1","nodeType":"YulTypedName","src":"3779:8:201","type":""}]},{"nodeType":"YulAssignment","src":"3858:18:201","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"3868:8:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"3858:6:201"}]},{"nodeType":"YulAssignment","src":"3885:18:201","value":{"name":"value7_1","nodeType":"YulIdentifier","src":"3895:8:201"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"3885:6:201"}]},{"body":{"nodeType":"YulBlock","src":"4001:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4010:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4013:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4003:6:201"},"nodeType":"YulFunctionCall","src":"4003:12:201"},"nodeType":"YulExpressionStatement","src":"4003:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3923:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"3927:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3919:3:201"},"nodeType":"YulFunctionCall","src":"3919:75:201"},{"kind":"number","nodeType":"YulLiteral","src":"3996:3:201","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3915:3:201"},"nodeType":"YulFunctionCall","src":"3915:85:201"},"nodeType":"YulIf","src":"3912:105:201"},{"nodeType":"YulAssignment","src":"4026:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4040:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4051:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4036:3:201"},"nodeType":"YulFunctionCall","src":"4036:19:201"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"4026:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IERC20Detailed_$1464t_contract$_IERC20Detailed_$1464t_uint256t_uint256t_uint256t_uint256t_bytes_calldata_ptrt_struct$_PermitSignature_$29019_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3004:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3015:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3027:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3035:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3043:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3051:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3059:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"3067:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"3075:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"3083:6:201","type":""},{"name":"value8","nodeType":"YulTypedName","src":"3091:6:201","type":""}],"src":"2812:1249:201"},{"body":{"nodeType":"YulBlock","src":"4181:125:201","statements":[{"nodeType":"YulAssignment","src":"4191:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4203:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4214:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4199:3:201"},"nodeType":"YulFunctionCall","src":"4199:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4191:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4233:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4248:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4256:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4244:3:201"},"nodeType":"YulFunctionCall","src":"4244:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4226:6:201"},"nodeType":"YulFunctionCall","src":"4226:74:201"},"nodeType":"YulExpressionStatement","src":"4226:74:201"}]},"name":"abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4150:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4161:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4172:4:201","type":""}],"src":"4066:240:201"},{"body":{"nodeType":"YulBlock","src":"4412:125:201","statements":[{"nodeType":"YulAssignment","src":"4422:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4434:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4445:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4430:3:201"},"nodeType":"YulFunctionCall","src":"4430:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4422:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4464:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4479:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4487:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4475:3:201"},"nodeType":"YulFunctionCall","src":"4475:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4457:6:201"},"nodeType":"YulFunctionCall","src":"4457:74:201"},"nodeType":"YulExpressionStatement","src":"4457:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4381:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4392:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4403:4:201","type":""}],"src":"4311:226:201"},{"body":{"nodeType":"YulBlock","src":"4612:185:201","statements":[{"body":{"nodeType":"YulBlock","src":"4658:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4667:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4670:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4660:6:201"},"nodeType":"YulFunctionCall","src":"4660:12:201"},"nodeType":"YulExpressionStatement","src":"4660:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4633:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4642:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4629:3:201"},"nodeType":"YulFunctionCall","src":"4629:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4654:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4625:3:201"},"nodeType":"YulFunctionCall","src":"4625:32:201"},"nodeType":"YulIf","src":"4622:52:201"},{"nodeType":"YulVariableDeclaration","src":"4683:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4709:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4696:12:201"},"nodeType":"YulFunctionCall","src":"4696:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4687:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4761:5:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"4728:32:201"},"nodeType":"YulFunctionCall","src":"4728:39:201"},"nodeType":"YulExpressionStatement","src":"4728:39:201"},{"nodeType":"YulAssignment","src":"4776:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"4786:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4776:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4578:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4589:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4601:6:201","type":""}],"src":"4542:255:201"},{"body":{"nodeType":"YulBlock","src":"4976:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4993:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5004:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4986:6:201"},"nodeType":"YulFunctionCall","src":"4986:21:201"},"nodeType":"YulExpressionStatement","src":"4986:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5027:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5038:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5023:3:201"},"nodeType":"YulFunctionCall","src":"5023:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"5043:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5016:6:201"},"nodeType":"YulFunctionCall","src":"5016:30:201"},"nodeType":"YulExpressionStatement","src":"5016:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5066:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5077:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5062:3:201"},"nodeType":"YulFunctionCall","src":"5062:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"5082:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5055:6:201"},"nodeType":"YulFunctionCall","src":"5055:62:201"},"nodeType":"YulExpressionStatement","src":"5055:62:201"},{"nodeType":"YulAssignment","src":"5126:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5138:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5149:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5134:3:201"},"nodeType":"YulFunctionCall","src":"5134:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5126:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4953:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4967:4:201","type":""}],"src":"4802:356:201"},{"body":{"nodeType":"YulBlock","src":"5244:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"5290:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5299:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5302:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5292:6:201"},"nodeType":"YulFunctionCall","src":"5292:12:201"},"nodeType":"YulExpressionStatement","src":"5292:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5265:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"5274:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5261:3:201"},"nodeType":"YulFunctionCall","src":"5261:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"5286:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5257:3:201"},"nodeType":"YulFunctionCall","src":"5257:32:201"},"nodeType":"YulIf","src":"5254:52:201"},{"nodeType":"YulAssignment","src":"5315:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5331:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5325:5:201"},"nodeType":"YulFunctionCall","src":"5325:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5315:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5210:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5221:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5233:6:201","type":""}],"src":"5163:184:201"},{"body":{"nodeType":"YulBlock","src":"5526:181:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5543:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5554:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5536:6:201"},"nodeType":"YulFunctionCall","src":"5536:21:201"},"nodeType":"YulExpressionStatement","src":"5536:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5577:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5588:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5573:3:201"},"nodeType":"YulFunctionCall","src":"5573:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"5593:2:201","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5566:6:201"},"nodeType":"YulFunctionCall","src":"5566:30:201"},"nodeType":"YulExpressionStatement","src":"5566:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5616:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5627:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5612:3:201"},"nodeType":"YulFunctionCall","src":"5612:18:201"},{"hexValue":"5265656e7472616e637947756172643a207265656e7472616e742063616c6c","kind":"string","nodeType":"YulLiteral","src":"5632:33:201","type":"","value":"ReentrancyGuard: reentrant call"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5605:6:201"},"nodeType":"YulFunctionCall","src":"5605:61:201"},"nodeType":"YulExpressionStatement","src":"5605:61:201"},{"nodeType":"YulAssignment","src":"5675:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5687:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5698:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5683:3:201"},"nodeType":"YulFunctionCall","src":"5683:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5675:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5503:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5517:4:201","type":""}],"src":"5352:355:201"},{"body":{"nodeType":"YulBlock","src":"5886:169:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5903:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5914:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5896:6:201"},"nodeType":"YulFunctionCall","src":"5896:21:201"},"nodeType":"YulExpressionStatement","src":"5896:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5937:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5948:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5933:3:201"},"nodeType":"YulFunctionCall","src":"5933:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"5953:2:201","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5926:6:201"},"nodeType":"YulFunctionCall","src":"5926:30:201"},"nodeType":"YulExpressionStatement","src":"5926:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5976:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5987:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5972:3:201"},"nodeType":"YulFunctionCall","src":"5972:18:201"},{"hexValue":"43414c4c45525f4d5553545f42455f504f4f4c","kind":"string","nodeType":"YulLiteral","src":"5992:21:201","type":"","value":"CALLER_MUST_BE_POOL"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5965:6:201"},"nodeType":"YulFunctionCall","src":"5965:49:201"},"nodeType":"YulExpressionStatement","src":"5965:49:201"},{"nodeType":"YulAssignment","src":"6023:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6035:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6046:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6031:3:201"},"nodeType":"YulFunctionCall","src":"6031:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6023:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_f253c60ca7289769121ceb7e8a55d2372f327bb2c0c90e8e3ba6b77e057d495e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5863:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5877:4:201","type":""}],"src":"5712:343:201"},{"body":{"nodeType":"YulBlock","src":"6092:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6109:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6112:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6102:6:201"},"nodeType":"YulFunctionCall","src":"6102:88:201"},"nodeType":"YulExpressionStatement","src":"6102:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6206:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6209:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6199:6:201"},"nodeType":"YulFunctionCall","src":"6199:15:201"},"nodeType":"YulExpressionStatement","src":"6199:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6230:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6233:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6223:6:201"},"nodeType":"YulFunctionCall","src":"6223:15:201"},"nodeType":"YulExpressionStatement","src":"6223:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"6060:184:201"},{"body":{"nodeType":"YulBlock","src":"6295:206:201","statements":[{"nodeType":"YulAssignment","src":"6305:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6321:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6315:5:201"},"nodeType":"YulFunctionCall","src":"6315:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6305:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"6333:34:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6355:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"6363:3:201","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6351:3:201"},"nodeType":"YulFunctionCall","src":"6351:16:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"6337:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"6442:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"6444:16:201"},"nodeType":"YulFunctionCall","src":"6444:18:201"},"nodeType":"YulExpressionStatement","src":"6444:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6385:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"6397:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6382:2:201"},"nodeType":"YulFunctionCall","src":"6382:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6421:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"6433:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6418:2:201"},"nodeType":"YulFunctionCall","src":"6418:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"6379:2:201"},"nodeType":"YulFunctionCall","src":"6379:62:201"},"nodeType":"YulIf","src":"6376:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6480:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6484:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6473:6:201"},"nodeType":"YulFunctionCall","src":"6473:22:201"},"nodeType":"YulExpressionStatement","src":"6473:22:201"}]},"name":"allocate_memory_3199","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"6284:6:201","type":""}],"src":"6249:252:201"},{"body":{"nodeType":"YulBlock","src":"6551:289:201","statements":[{"nodeType":"YulAssignment","src":"6561:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6577:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6571:5:201"},"nodeType":"YulFunctionCall","src":"6571:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6561:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"6589:117:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6611:6:201"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"6627:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"6633:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6623:3:201"},"nodeType":"YulFunctionCall","src":"6623:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"6638:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6619:3:201"},"nodeType":"YulFunctionCall","src":"6619:86:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6607:3:201"},"nodeType":"YulFunctionCall","src":"6607:99:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"6593:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"6781:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"6783:16:201"},"nodeType":"YulFunctionCall","src":"6783:18:201"},"nodeType":"YulExpressionStatement","src":"6783:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6724:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"6736:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6721:2:201"},"nodeType":"YulFunctionCall","src":"6721:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6760:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"6772:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6757:2:201"},"nodeType":"YulFunctionCall","src":"6757:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"6718:2:201"},"nodeType":"YulFunctionCall","src":"6718:62:201"},"nodeType":"YulIf","src":"6715:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6819:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6823:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6812:6:201"},"nodeType":"YulFunctionCall","src":"6812:22:201"},"nodeType":"YulExpressionStatement","src":"6812:22:201"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"6531:4:201","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"6540:6:201","type":""}],"src":"6506:334:201"},{"body":{"nodeType":"YulBlock","src":"6888:71:201","statements":[{"body":{"nodeType":"YulBlock","src":"6937:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6946:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6949:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6939:6:201"},"nodeType":"YulFunctionCall","src":"6939:12:201"},"nodeType":"YulExpressionStatement","src":"6939:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6911:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6922:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"6929:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6918:3:201"},"nodeType":"YulFunctionCall","src":"6918:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"6908:2:201"},"nodeType":"YulFunctionCall","src":"6908:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6901:6:201"},"nodeType":"YulFunctionCall","src":"6901:35:201"},"nodeType":"YulIf","src":"6898:55:201"}]},"name":"validator_revert_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"6877:5:201","type":""}],"src":"6845:114:201"},{"body":{"nodeType":"YulBlock","src":"7036:679:201","statements":[{"body":{"nodeType":"YulBlock","src":"7080:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7089:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7092:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7082:6:201"},"nodeType":"YulFunctionCall","src":"7082:12:201"},"nodeType":"YulExpressionStatement","src":"7082:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"7057:3:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"7062:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7053:3:201"},"nodeType":"YulFunctionCall","src":"7053:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"7074:4:201","type":"","value":"0xa0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7049:3:201"},"nodeType":"YulFunctionCall","src":"7049:30:201"},"nodeType":"YulIf","src":"7046:50:201"},{"nodeType":"YulVariableDeclaration","src":"7105:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7125:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7119:5:201"},"nodeType":"YulFunctionCall","src":"7119:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"7109:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7137:35:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7159:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7167:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7155:3:201"},"nodeType":"YulFunctionCall","src":"7155:17:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"7141:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"7247:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"7249:16:201"},"nodeType":"YulFunctionCall","src":"7249:18:201"},"nodeType":"YulExpressionStatement","src":"7249:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7190:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"7202:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7187:2:201"},"nodeType":"YulFunctionCall","src":"7187:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7226:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"7238:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7223:2:201"},"nodeType":"YulFunctionCall","src":"7223:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"7184:2:201"},"nodeType":"YulFunctionCall","src":"7184:62:201"},"nodeType":"YulIf","src":"7181:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7285:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7289:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7278:6:201"},"nodeType":"YulFunctionCall","src":"7278:22:201"},"nodeType":"YulExpressionStatement","src":"7278:22:201"},{"nodeType":"YulAssignment","src":"7309:15:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"7318:6:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"7309:5:201"}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7340:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7361:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7348:12:201"},"nodeType":"YulFunctionCall","src":"7348:23:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7333:6:201"},"nodeType":"YulFunctionCall","src":"7333:39:201"},"nodeType":"YulExpressionStatement","src":"7333:39:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7392:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7400:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7388:3:201"},"nodeType":"YulFunctionCall","src":"7388:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7422:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7433:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7418:3:201"},"nodeType":"YulFunctionCall","src":"7418:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7405:12:201"},"nodeType":"YulFunctionCall","src":"7405:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7381:6:201"},"nodeType":"YulFunctionCall","src":"7381:57:201"},"nodeType":"YulExpressionStatement","src":"7381:57:201"},{"nodeType":"YulVariableDeclaration","src":"7447:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7479:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7490:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7475:3:201"},"nodeType":"YulFunctionCall","src":"7475:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7462:12:201"},"nodeType":"YulFunctionCall","src":"7462:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"7451:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"7526:7:201"}],"functionName":{"name":"validator_revert_uint8","nodeType":"YulIdentifier","src":"7503:22:201"},"nodeType":"YulFunctionCall","src":"7503:31:201"},"nodeType":"YulExpressionStatement","src":"7503:31:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7554:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7562:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7550:3:201"},"nodeType":"YulFunctionCall","src":"7550:15:201"},{"name":"value_1","nodeType":"YulIdentifier","src":"7567:7:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7543:6:201"},"nodeType":"YulFunctionCall","src":"7543:32:201"},"nodeType":"YulExpressionStatement","src":"7543:32:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7595:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7603:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7591:3:201"},"nodeType":"YulFunctionCall","src":"7591:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7625:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7636:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7621:3:201"},"nodeType":"YulFunctionCall","src":"7621:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7608:12:201"},"nodeType":"YulFunctionCall","src":"7608:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7584:6:201"},"nodeType":"YulFunctionCall","src":"7584:57:201"},"nodeType":"YulExpressionStatement","src":"7584:57:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7661:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7669:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7657:3:201"},"nodeType":"YulFunctionCall","src":"7657:16:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7692:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7703:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7688:3:201"},"nodeType":"YulFunctionCall","src":"7688:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7675:12:201"},"nodeType":"YulFunctionCall","src":"7675:33:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7650:6:201"},"nodeType":"YulFunctionCall","src":"7650:59:201"},"nodeType":"YulExpressionStatement","src":"7650:59:201"}]},"name":"abi_decode_struct_PermitSignature","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7007:9:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"7018:3:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"7026:5:201","type":""}],"src":"6964:751:201"},{"body":{"nodeType":"YulBlock","src":"7824:141:201","statements":[{"body":{"nodeType":"YulBlock","src":"7871:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7880:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7883:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7873:6:201"},"nodeType":"YulFunctionCall","src":"7873:12:201"},"nodeType":"YulExpressionStatement","src":"7873:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7845:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"7854:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7841:3:201"},"nodeType":"YulFunctionCall","src":"7841:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"7866:3:201","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7837:3:201"},"nodeType":"YulFunctionCall","src":"7837:33:201"},"nodeType":"YulIf","src":"7834:53:201"},{"nodeType":"YulAssignment","src":"7896:63:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7940:9:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"7951:7:201"}],"functionName":{"name":"abi_decode_struct_PermitSignature","nodeType":"YulIdentifier","src":"7906:33:201"},"nodeType":"YulFunctionCall","src":"7906:53:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7896:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_PermitSignature_$29019_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7790:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7801:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7813:6:201","type":""}],"src":"7720:245:201"},{"body":{"nodeType":"YulBlock","src":"8002:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8019:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8022:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8012:6:201"},"nodeType":"YulFunctionCall","src":"8012:88:201"},"nodeType":"YulExpressionStatement","src":"8012:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8116:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"8119:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8109:6:201"},"nodeType":"YulFunctionCall","src":"8109:15:201"},"nodeType":"YulExpressionStatement","src":"8109:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8140:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8143:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8133:6:201"},"nodeType":"YulFunctionCall","src":"8133:15:201"},"nodeType":"YulExpressionStatement","src":"8133:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"7970:184:201"},{"body":{"nodeType":"YulBlock","src":"8208:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"8230:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"8232:16:201"},"nodeType":"YulFunctionCall","src":"8232:18:201"},"nodeType":"YulExpressionStatement","src":"8232:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"8224:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"8227:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"8221:2:201"},"nodeType":"YulFunctionCall","src":"8221:8:201"},"nodeType":"YulIf","src":"8218:34:201"},{"nodeType":"YulAssignment","src":"8261:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"8273:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"8276:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8269:3:201"},"nodeType":"YulFunctionCall","src":"8269:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"8261:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"8190:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"8193:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"8199:4:201","type":""}],"src":"8159:125:201"},{"body":{"nodeType":"YulBlock","src":"8481:298:201","statements":[{"nodeType":"YulAssignment","src":"8491:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8503:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8514:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8499:3:201"},"nodeType":"YulFunctionCall","src":"8499:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8491:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"8527:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8537:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"8531:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8595:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8610:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"8618:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8606:3:201"},"nodeType":"YulFunctionCall","src":"8606:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8588:6:201"},"nodeType":"YulFunctionCall","src":"8588:34:201"},"nodeType":"YulExpressionStatement","src":"8588:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8642:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8653:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8638:3:201"},"nodeType":"YulFunctionCall","src":"8638:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"8658:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8631:6:201"},"nodeType":"YulFunctionCall","src":"8631:34:201"},"nodeType":"YulExpressionStatement","src":"8631:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8685:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8696:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8681:3:201"},"nodeType":"YulFunctionCall","src":"8681:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"8705:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"8713:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8701:3:201"},"nodeType":"YulFunctionCall","src":"8701:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8674:6:201"},"nodeType":"YulFunctionCall","src":"8674:43:201"},"nodeType":"YulExpressionStatement","src":"8674:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8737:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8748:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8733:3:201"},"nodeType":"YulFunctionCall","src":"8733:18:201"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"8757:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8765:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"8753:3:201"},"nodeType":"YulFunctionCall","src":"8753:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8726:6:201"},"nodeType":"YulFunctionCall","src":"8726:47:201"},"nodeType":"YulExpressionStatement","src":"8726:47:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_address_t_rational_0_by_1__to_t_address_t_uint256_t_address_t_uint16__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8426:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"8437:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8445:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8453:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8461:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8472:4:201","type":""}],"src":"8289:490:201"},{"body":{"nodeType":"YulBlock","src":"8969:285:201","statements":[{"nodeType":"YulAssignment","src":"8979:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8991:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9002:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8987:3:201"},"nodeType":"YulFunctionCall","src":"8987:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8979:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"9015:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9025:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9019:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9083:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9098:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9106:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9094:3:201"},"nodeType":"YulFunctionCall","src":"9094:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9076:6:201"},"nodeType":"YulFunctionCall","src":"9076:34:201"},"nodeType":"YulExpressionStatement","src":"9076:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9130:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9141:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9126:3:201"},"nodeType":"YulFunctionCall","src":"9126:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"9146:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9119:6:201"},"nodeType":"YulFunctionCall","src":"9119:34:201"},"nodeType":"YulExpressionStatement","src":"9119:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9173:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9184:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9169:3:201"},"nodeType":"YulFunctionCall","src":"9169:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"9189:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9162:6:201"},"nodeType":"YulFunctionCall","src":"9162:34:201"},"nodeType":"YulExpressionStatement","src":"9162:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9216:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9227:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9212:3:201"},"nodeType":"YulFunctionCall","src":"9212:18:201"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"9236:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9244:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9232:3:201"},"nodeType":"YulFunctionCall","src":"9232:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9205:6:201"},"nodeType":"YulFunctionCall","src":"9205:43:201"},"nodeType":"YulExpressionStatement","src":"9205:43:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint256_t_address__to_t_address_t_uint256_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8914:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"8925:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8933:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8941:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8949:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8960:4:201","type":""}],"src":"8784:470:201"},{"body":{"nodeType":"YulBlock","src":"9433:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9450:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9461:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9443:6:201"},"nodeType":"YulFunctionCall","src":"9443:21:201"},"nodeType":"YulExpressionStatement","src":"9443:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9484:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9495:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9480:3:201"},"nodeType":"YulFunctionCall","src":"9480:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"9500:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9473:6:201"},"nodeType":"YulFunctionCall","src":"9473:30:201"},"nodeType":"YulExpressionStatement","src":"9473:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9523:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9534:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9519:3:201"},"nodeType":"YulFunctionCall","src":"9519:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"9539:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9512:6:201"},"nodeType":"YulFunctionCall","src":"9512:62:201"},"nodeType":"YulExpressionStatement","src":"9512:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9594:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9605:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9590:3:201"},"nodeType":"YulFunctionCall","src":"9590:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"9610:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9583:6:201"},"nodeType":"YulFunctionCall","src":"9583:36:201"},"nodeType":"YulExpressionStatement","src":"9583:36:201"},{"nodeType":"YulAssignment","src":"9628:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9640:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9651:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9636:3:201"},"nodeType":"YulFunctionCall","src":"9636:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9628:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9410:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9424:4:201","type":""}],"src":"9259:402:201"},{"body":{"nodeType":"YulBlock","src":"9840:171:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9857:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9868:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9850:6:201"},"nodeType":"YulFunctionCall","src":"9850:21:201"},"nodeType":"YulExpressionStatement","src":"9850:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9891:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9902:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9887:3:201"},"nodeType":"YulFunctionCall","src":"9887:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"9907:2:201","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9880:6:201"},"nodeType":"YulFunctionCall","src":"9880:30:201"},"nodeType":"YulExpressionStatement","src":"9880:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9930:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9941:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9926:3:201"},"nodeType":"YulFunctionCall","src":"9926:18:201"},{"hexValue":"475076323a206661696c6564207472616e73666572","kind":"string","nodeType":"YulLiteral","src":"9946:23:201","type":"","value":"GPv2: failed transfer"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9919:6:201"},"nodeType":"YulFunctionCall","src":"9919:51:201"},"nodeType":"YulExpressionStatement","src":"9919:51:201"},{"nodeType":"YulAssignment","src":"9979:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9991:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10002:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9987:3:201"},"nodeType":"YulFunctionCall","src":"9987:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9979:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9817:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9831:4:201","type":""}],"src":"9666:345:201"},{"body":{"nodeType":"YulBlock","src":"10073:188:201","statements":[{"body":{"nodeType":"YulBlock","src":"10117:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"10119:16:201"},"nodeType":"YulFunctionCall","src":"10119:18:201"},"nodeType":"YulExpressionStatement","src":"10119:18:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"10089:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10097:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10086:2:201"},"nodeType":"YulFunctionCall","src":"10086:30:201"},"nodeType":"YulIf","src":"10083:56:201"},{"nodeType":"YulAssignment","src":"10148:107:201","value":{"arguments":[{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"10168:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10176:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10164:3:201"},"nodeType":"YulFunctionCall","src":"10164:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"10181:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10160:3:201"},"nodeType":"YulFunctionCall","src":"10160:88:201"},{"kind":"number","nodeType":"YulLiteral","src":"10250:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10156:3:201"},"nodeType":"YulFunctionCall","src":"10156:99:201"},"variableNames":[{"name":"size","nodeType":"YulIdentifier","src":"10148:4:201"}]}]},"name":"array_allocation_size_bytes","nodeType":"YulFunctionDefinition","parameters":[{"name":"length","nodeType":"YulTypedName","src":"10053:6:201","type":""}],"returnVariables":[{"name":"size","nodeType":"YulTypedName","src":"10064:4:201","type":""}],"src":"10016:245:201"},{"body":{"nodeType":"YulBlock","src":"10487:955:201","statements":[{"body":{"nodeType":"YulBlock","src":"10534:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10543:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10546:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10536:6:201"},"nodeType":"YulFunctionCall","src":"10536:12:201"},"nodeType":"YulExpressionStatement","src":"10536:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"10508:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"10517:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10504:3:201"},"nodeType":"YulFunctionCall","src":"10504:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"10529:3:201","type":"","value":"320"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10500:3:201"},"nodeType":"YulFunctionCall","src":"10500:33:201"},"nodeType":"YulIf","src":"10497:53:201"},{"nodeType":"YulVariableDeclaration","src":"10559:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10585:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10572:12:201"},"nodeType":"YulFunctionCall","src":"10572:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"10563:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10637:5:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"10604:32:201"},"nodeType":"YulFunctionCall","src":"10604:39:201"},"nodeType":"YulExpressionStatement","src":"10604:39:201"},{"nodeType":"YulAssignment","src":"10652:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"10662:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"10652:6:201"}]},{"nodeType":"YulAssignment","src":"10676:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10703:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10714:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10699:3:201"},"nodeType":"YulFunctionCall","src":"10699:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10686:12:201"},"nodeType":"YulFunctionCall","src":"10686:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"10676:6:201"}]},{"nodeType":"YulAssignment","src":"10727:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10754:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10765:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10750:3:201"},"nodeType":"YulFunctionCall","src":"10750:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10737:12:201"},"nodeType":"YulFunctionCall","src":"10737:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"10727:6:201"}]},{"nodeType":"YulAssignment","src":"10778:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10805:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10816:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10801:3:201"},"nodeType":"YulFunctionCall","src":"10801:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10788:12:201"},"nodeType":"YulFunctionCall","src":"10788:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"10778:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"10829:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10860:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10871:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10856:3:201"},"nodeType":"YulFunctionCall","src":"10856:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10843:12:201"},"nodeType":"YulFunctionCall","src":"10843:33:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"10833:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"10919:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10928:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10931:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10921:6:201"},"nodeType":"YulFunctionCall","src":"10921:12:201"},"nodeType":"YulExpressionStatement","src":"10921:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"10891:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10899:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10888:2:201"},"nodeType":"YulFunctionCall","src":"10888:30:201"},"nodeType":"YulIf","src":"10885:50:201"},{"nodeType":"YulVariableDeclaration","src":"10944:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10958:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"10969:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10954:3:201"},"nodeType":"YulFunctionCall","src":"10954:22:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10948:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"11024:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11033:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11036:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11026:6:201"},"nodeType":"YulFunctionCall","src":"11026:12:201"},"nodeType":"YulExpressionStatement","src":"11026:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"11003:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"11007:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10999:3:201"},"nodeType":"YulFunctionCall","src":"10999:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"11014:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10995:3:201"},"nodeType":"YulFunctionCall","src":"10995:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10988:6:201"},"nodeType":"YulFunctionCall","src":"10988:35:201"},"nodeType":"YulIf","src":"10985:55:201"},{"nodeType":"YulVariableDeclaration","src":"11049:26:201","value":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"11072:2:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"11059:12:201"},"nodeType":"YulFunctionCall","src":"11059:16:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"11053:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11084:61:201","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"11141:2:201"}],"functionName":{"name":"array_allocation_size_bytes","nodeType":"YulIdentifier","src":"11113:27:201"},"nodeType":"YulFunctionCall","src":"11113:31:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"11097:15:201"},"nodeType":"YulFunctionCall","src":"11097:48:201"},"variables":[{"name":"array","nodeType":"YulTypedName","src":"11088:5:201","type":""}]},{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"11161:5:201"},{"name":"_2","nodeType":"YulIdentifier","src":"11168:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11154:6:201"},"nodeType":"YulFunctionCall","src":"11154:17:201"},"nodeType":"YulExpressionStatement","src":"11154:17:201"},{"body":{"nodeType":"YulBlock","src":"11217:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11226:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11229:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11219:6:201"},"nodeType":"YulFunctionCall","src":"11219:12:201"},"nodeType":"YulExpressionStatement","src":"11219:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"11194:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"11198:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11190:3:201"},"nodeType":"YulFunctionCall","src":"11190:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"11203:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11186:3:201"},"nodeType":"YulFunctionCall","src":"11186:20:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"11208:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11183:2:201"},"nodeType":"YulFunctionCall","src":"11183:33:201"},"nodeType":"YulIf","src":"11180:53:201"},{"expression":{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"11259:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"11266:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11255:3:201"},"nodeType":"YulFunctionCall","src":"11255:14:201"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"11275:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"11279:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11271:3:201"},"nodeType":"YulFunctionCall","src":"11271:11:201"},{"name":"_2","nodeType":"YulIdentifier","src":"11284:2:201"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"11242:12:201"},"nodeType":"YulFunctionCall","src":"11242:45:201"},"nodeType":"YulExpressionStatement","src":"11242:45:201"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"11311:5:201"},{"name":"_2","nodeType":"YulIdentifier","src":"11318:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11307:3:201"},"nodeType":"YulFunctionCall","src":"11307:14:201"},{"kind":"number","nodeType":"YulLiteral","src":"11323:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11303:3:201"},"nodeType":"YulFunctionCall","src":"11303:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"11328:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11296:6:201"},"nodeType":"YulFunctionCall","src":"11296:34:201"},"nodeType":"YulExpressionStatement","src":"11296:34:201"},{"nodeType":"YulAssignment","src":"11339:15:201","value":{"name":"array","nodeType":"YulIdentifier","src":"11349:5:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"11339:6:201"}]},{"nodeType":"YulAssignment","src":"11363:73:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11411:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11422:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11407:3:201"},"nodeType":"YulFunctionCall","src":"11407:19:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"11428:7:201"}],"functionName":{"name":"abi_decode_struct_PermitSignature","nodeType":"YulIdentifier","src":"11373:33:201"},"nodeType":"YulFunctionCall","src":"11373:63:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"11363:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IERC20Detailed_$1464t_uint256t_uint256t_uint256t_bytes_memory_ptrt_struct$_PermitSignature_$29019_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10413:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"10424:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"10436:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10444:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10452:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"10460:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"10468:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"10476:6:201","type":""}],"src":"10266:1176:201"},{"body":{"nodeType":"YulBlock","src":"11479:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11496:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11499:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11489:6:201"},"nodeType":"YulFunctionCall","src":"11489:88:201"},"nodeType":"YulExpressionStatement","src":"11489:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11593:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"11596:4:201","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11586:6:201"},"nodeType":"YulFunctionCall","src":"11586:15:201"},"nodeType":"YulExpressionStatement","src":"11586:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11617:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11620:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11610:6:201"},"nodeType":"YulFunctionCall","src":"11610:15:201"},"nodeType":"YulExpressionStatement","src":"11610:15:201"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"11447:184:201"},{"body":{"nodeType":"YulBlock","src":"11810:178:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11827:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11838:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11820:6:201"},"nodeType":"YulFunctionCall","src":"11820:21:201"},"nodeType":"YulExpressionStatement","src":"11820:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11861:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11872:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11857:3:201"},"nodeType":"YulFunctionCall","src":"11857:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"11877:2:201","type":"","value":"28"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11850:6:201"},"nodeType":"YulFunctionCall","src":"11850:30:201"},"nodeType":"YulExpressionStatement","src":"11850:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11900:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11911:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11896:3:201"},"nodeType":"YulFunctionCall","src":"11896:18:201"},{"hexValue":"494e53554646494349454e545f414d4f554e545f544f5f5245504159","kind":"string","nodeType":"YulLiteral","src":"11916:30:201","type":"","value":"INSUFFICIENT_AMOUNT_TO_REPAY"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11889:6:201"},"nodeType":"YulFunctionCall","src":"11889:58:201"},"nodeType":"YulExpressionStatement","src":"11889:58:201"},{"nodeType":"YulAssignment","src":"11956:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11968:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11979:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11964:3:201"},"nodeType":"YulFunctionCall","src":"11964:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11956:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_170e863dc30648ef8ff66ea3f3e18e36ff4d45f0897cc6afd8a56e95f00a3d60__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11787:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11801:4:201","type":""}],"src":"11636:352:201"},{"body":{"nodeType":"YulBlock","src":"12167:175:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12184:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12195:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12177:6:201"},"nodeType":"YulFunctionCall","src":"12177:21:201"},"nodeType":"YulExpressionStatement","src":"12177:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12218:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12229:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12214:3:201"},"nodeType":"YulFunctionCall","src":"12214:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"12234:2:201","type":"","value":"25"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12207:6:201"},"nodeType":"YulFunctionCall","src":"12207:30:201"},"nodeType":"YulExpressionStatement","src":"12207:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12257:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12268:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12253:3:201"},"nodeType":"YulFunctionCall","src":"12253:18:201"},{"hexValue":"494e56414c49445f444542545f52455041595f414d4f554e54","kind":"string","nodeType":"YulLiteral","src":"12273:27:201","type":"","value":"INVALID_DEBT_REPAY_AMOUNT"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12246:6:201"},"nodeType":"YulFunctionCall","src":"12246:55:201"},"nodeType":"YulExpressionStatement","src":"12246:55:201"},{"nodeType":"YulAssignment","src":"12310:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12322:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12333:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12318:3:201"},"nodeType":"YulFunctionCall","src":"12318:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12310:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_aaf54d652206a8d20544924cfa9c9432dfe69bab095c3b86a90e384e78ddb36d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12144:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12158:4:201","type":""}],"src":"11993:349:201"},{"body":{"nodeType":"YulBlock","src":"12400:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"12410:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12419:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"12414:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"12479:63:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"12504:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"12509:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12500:3:201"},"nodeType":"YulFunctionCall","src":"12500:11:201"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"12523:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"12528:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12519:3:201"},"nodeType":"YulFunctionCall","src":"12519:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12513:5:201"},"nodeType":"YulFunctionCall","src":"12513:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12493:6:201"},"nodeType":"YulFunctionCall","src":"12493:39:201"},"nodeType":"YulExpressionStatement","src":"12493:39:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"12440:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"12443:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"12437:2:201"},"nodeType":"YulFunctionCall","src":"12437:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"12451:19:201","statements":[{"nodeType":"YulAssignment","src":"12453:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"12462:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"12465:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12458:3:201"},"nodeType":"YulFunctionCall","src":"12458:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"12453:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"12433:3:201","statements":[]},"src":"12429:113:201"},{"body":{"nodeType":"YulBlock","src":"12568:31:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"12581:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"12586:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12577:3:201"},"nodeType":"YulFunctionCall","src":"12577:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"12595:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12570:6:201"},"nodeType":"YulFunctionCall","src":"12570:27:201"},"nodeType":"YulExpressionStatement","src":"12570:27:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"12557:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"12560:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12554:2:201"},"nodeType":"YulFunctionCall","src":"12554:13:201"},"nodeType":"YulIf","src":"12551:48:201"}]},"name":"copy_memory_to_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"12378:3:201","type":""},{"name":"dst","nodeType":"YulTypedName","src":"12383:3:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"12388:6:201","type":""}],"src":"12347:258:201"},{"body":{"nodeType":"YulBlock","src":"12744:671:201","statements":[{"body":{"nodeType":"YulBlock","src":"12790:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12799:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12802:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12792:6:201"},"nodeType":"YulFunctionCall","src":"12792:12:201"},"nodeType":"YulExpressionStatement","src":"12792:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"12765:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"12774:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12761:3:201"},"nodeType":"YulFunctionCall","src":"12761:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"12786:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12757:3:201"},"nodeType":"YulFunctionCall","src":"12757:32:201"},"nodeType":"YulIf","src":"12754:52:201"},{"nodeType":"YulVariableDeclaration","src":"12815:30:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12835:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12829:5:201"},"nodeType":"YulFunctionCall","src":"12829:16:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"12819:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"12888:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12897:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12900:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12890:6:201"},"nodeType":"YulFunctionCall","src":"12890:12:201"},"nodeType":"YulExpressionStatement","src":"12890:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"12860:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"12868:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12857:2:201"},"nodeType":"YulFunctionCall","src":"12857:30:201"},"nodeType":"YulIf","src":"12854:50:201"},{"nodeType":"YulVariableDeclaration","src":"12913:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12927:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"12938:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12923:3:201"},"nodeType":"YulFunctionCall","src":"12923:22:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12917:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"12993:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13002:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13005:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12995:6:201"},"nodeType":"YulFunctionCall","src":"12995:12:201"},"nodeType":"YulExpressionStatement","src":"12995:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"12972:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"12976:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12968:3:201"},"nodeType":"YulFunctionCall","src":"12968:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"12983:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12964:3:201"},"nodeType":"YulFunctionCall","src":"12964:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12957:6:201"},"nodeType":"YulFunctionCall","src":"12957:35:201"},"nodeType":"YulIf","src":"12954:55:201"},{"nodeType":"YulVariableDeclaration","src":"13018:19:201","value":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"13034:2:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13028:5:201"},"nodeType":"YulFunctionCall","src":"13028:9:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"13022:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13046:61:201","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"13103:2:201"}],"functionName":{"name":"array_allocation_size_bytes","nodeType":"YulIdentifier","src":"13075:27:201"},"nodeType":"YulFunctionCall","src":"13075:31:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"13059:15:201"},"nodeType":"YulFunctionCall","src":"13059:48:201"},"variables":[{"name":"array","nodeType":"YulTypedName","src":"13050:5:201","type":""}]},{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"13123:5:201"},{"name":"_2","nodeType":"YulIdentifier","src":"13130:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13116:6:201"},"nodeType":"YulFunctionCall","src":"13116:17:201"},"nodeType":"YulExpressionStatement","src":"13116:17:201"},{"body":{"nodeType":"YulBlock","src":"13181:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13190:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13193:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13183:6:201"},"nodeType":"YulFunctionCall","src":"13183:12:201"},"nodeType":"YulExpressionStatement","src":"13183:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"13156:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"13160:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13152:3:201"},"nodeType":"YulFunctionCall","src":"13152:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"13165:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13148:3:201"},"nodeType":"YulFunctionCall","src":"13148:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"13172:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13145:2:201"},"nodeType":"YulFunctionCall","src":"13145:35:201"},"nodeType":"YulIf","src":"13142:55:201"},{"expression":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"13232:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"13236:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13228:3:201"},"nodeType":"YulFunctionCall","src":"13228:13:201"},{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"13247:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"13254:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13243:3:201"},"nodeType":"YulFunctionCall","src":"13243:16:201"},{"name":"_2","nodeType":"YulIdentifier","src":"13261:2:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"13206:21:201"},"nodeType":"YulFunctionCall","src":"13206:58:201"},"nodeType":"YulExpressionStatement","src":"13206:58:201"},{"nodeType":"YulAssignment","src":"13273:15:201","value":{"name":"array","nodeType":"YulIdentifier","src":"13283:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13273:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"13297:40:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13320:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13331:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13316:3:201"},"nodeType":"YulFunctionCall","src":"13316:20:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13310:5:201"},"nodeType":"YulFunctionCall","src":"13310:27:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13301:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13379:5:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"13346:32:201"},"nodeType":"YulFunctionCall","src":"13346:39:201"},"nodeType":"YulExpressionStatement","src":"13346:39:201"},{"nodeType":"YulAssignment","src":"13394:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"13404:5:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"13394:6:201"}]}]},"name":"abi_decode_tuple_t_bytes_memory_ptrt_contract$_IParaSwapAugustus_$30951_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12702:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"12713:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"12725:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12733:6:201","type":""}],"src":"12610:805:201"},{"body":{"nodeType":"YulBlock","src":"13498:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"13544:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13553:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13556:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13546:6:201"},"nodeType":"YulFunctionCall","src":"13546:12:201"},"nodeType":"YulExpressionStatement","src":"13546:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13519:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"13528:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13515:3:201"},"nodeType":"YulFunctionCall","src":"13515:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"13540:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13511:3:201"},"nodeType":"YulFunctionCall","src":"13511:32:201"},"nodeType":"YulIf","src":"13508:52:201"},{"nodeType":"YulVariableDeclaration","src":"13569:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13588:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13582:5:201"},"nodeType":"YulFunctionCall","src":"13582:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13573:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"13651:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13660:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13663:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13653:6:201"},"nodeType":"YulFunctionCall","src":"13653:12:201"},"nodeType":"YulExpressionStatement","src":"13653:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13620:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13641:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13634:6:201"},"nodeType":"YulFunctionCall","src":"13634:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13627:6:201"},"nodeType":"YulFunctionCall","src":"13627:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"13617:2:201"},"nodeType":"YulFunctionCall","src":"13617:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13610:6:201"},"nodeType":"YulFunctionCall","src":"13610:40:201"},"nodeType":"YulIf","src":"13607:60:201"},{"nodeType":"YulAssignment","src":"13676:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"13686:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13676:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13464:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13475:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13487:6:201","type":""}],"src":"13420:277:201"},{"body":{"nodeType":"YulBlock","src":"13876:166:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13893:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13904:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13886:6:201"},"nodeType":"YulFunctionCall","src":"13886:21:201"},"nodeType":"YulExpressionStatement","src":"13886:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13927:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13938:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13923:3:201"},"nodeType":"YulFunctionCall","src":"13923:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"13943:2:201","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13916:6:201"},"nodeType":"YulFunctionCall","src":"13916:30:201"},"nodeType":"YulExpressionStatement","src":"13916:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13966:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13977:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13962:3:201"},"nodeType":"YulFunctionCall","src":"13962:18:201"},{"hexValue":"494e56414c49445f4155475553545553","kind":"string","nodeType":"YulLiteral","src":"13982:18:201","type":"","value":"INVALID_AUGUSTUS"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13955:6:201"},"nodeType":"YulFunctionCall","src":"13955:46:201"},"nodeType":"YulExpressionStatement","src":"13955:46:201"},{"nodeType":"YulAssignment","src":"14010:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14022:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14033:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14018:3:201"},"nodeType":"YulFunctionCall","src":"14018:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14010:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_3202e1fc4f78abbce03a97de69392b3f69ebba48c41588ffb32a1c8b97349f74__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13853:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13867:4:201","type":""}],"src":"13702:340:201"},{"body":{"nodeType":"YulBlock","src":"14111:418:201","statements":[{"nodeType":"YulVariableDeclaration","src":"14121:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14136:1:201","type":"","value":"1"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"14125:7:201","type":""}]},{"nodeType":"YulAssignment","src":"14146:16:201","value":{"name":"power_1","nodeType":"YulIdentifier","src":"14155:7:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"14146:5:201"}]},{"nodeType":"YulAssignment","src":"14171:13:201","value":{"name":"_base","nodeType":"YulIdentifier","src":"14179:5:201"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"14171:4:201"}]},{"body":{"nodeType":"YulBlock","src":"14235:288:201","statements":[{"body":{"nodeType":"YulBlock","src":"14340:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"14342:16:201"},"nodeType":"YulFunctionCall","src":"14342:18:201"},"nodeType":"YulExpressionStatement","src":"14342:18:201"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"14255:4:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14265:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base","nodeType":"YulIdentifier","src":"14333:4:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"14261:3:201"},"nodeType":"YulFunctionCall","src":"14261:77:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14252:2:201"},"nodeType":"YulFunctionCall","src":"14252:87:201"},"nodeType":"YulIf","src":"14249:113:201"},{"body":{"nodeType":"YulBlock","src":"14401:29:201","statements":[{"nodeType":"YulAssignment","src":"14403:25:201","value":{"arguments":[{"name":"power","nodeType":"YulIdentifier","src":"14416:5:201"},{"name":"base","nodeType":"YulIdentifier","src":"14423:4:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"14412:3:201"},"nodeType":"YulFunctionCall","src":"14412:16:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"14403:5:201"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"14382:8:201"},{"name":"power_1","nodeType":"YulIdentifier","src":"14392:7:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14378:3:201"},"nodeType":"YulFunctionCall","src":"14378:22:201"},"nodeType":"YulIf","src":"14375:55:201"},{"nodeType":"YulAssignment","src":"14443:23:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"14455:4:201"},{"name":"base","nodeType":"YulIdentifier","src":"14461:4:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"14451:3:201"},"nodeType":"YulFunctionCall","src":"14451:15:201"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"14443:4:201"}]},{"nodeType":"YulAssignment","src":"14479:34:201","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"14495:7:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"14504:8:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"14491:3:201"},"nodeType":"YulFunctionCall","src":"14491:22:201"},"variableNames":[{"name":"exponent","nodeType":"YulIdentifier","src":"14479:8:201"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"14204:8:201"},{"name":"power_1","nodeType":"YulIdentifier","src":"14214:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14201:2:201"},"nodeType":"YulFunctionCall","src":"14201:21:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"14223:3:201","statements":[]},"pre":{"nodeType":"YulBlock","src":"14197:3:201","statements":[]},"src":"14193:330:201"}]},"name":"checked_exp_helper","nodeType":"YulFunctionDefinition","parameters":[{"name":"_base","nodeType":"YulTypedName","src":"14075:5:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"14082:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"14095:5:201","type":""},{"name":"base","nodeType":"YulTypedName","src":"14102:4:201","type":""}],"src":"14047:482:201"},{"body":{"nodeType":"YulBlock","src":"14593:807:201","statements":[{"body":{"nodeType":"YulBlock","src":"14631:52:201","statements":[{"nodeType":"YulAssignment","src":"14645:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14654:1:201","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"14645:5:201"}]},{"nodeType":"YulLeave","src":"14668:5:201"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"14613:8:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"14606:6:201"},"nodeType":"YulFunctionCall","src":"14606:16:201"},"nodeType":"YulIf","src":"14603:80:201"},{"body":{"nodeType":"YulBlock","src":"14716:52:201","statements":[{"nodeType":"YulAssignment","src":"14730:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14739:1:201","type":"","value":"0"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"14730:5:201"}]},{"nodeType":"YulLeave","src":"14753:5:201"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"14702:4:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"14695:6:201"},"nodeType":"YulFunctionCall","src":"14695:12:201"},"nodeType":"YulIf","src":"14692:76:201"},{"cases":[{"body":{"nodeType":"YulBlock","src":"14804:52:201","statements":[{"nodeType":"YulAssignment","src":"14818:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14827:1:201","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"14818:5:201"}]},{"nodeType":"YulLeave","src":"14841:5:201"}]},"nodeType":"YulCase","src":"14797:59:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14802:1:201","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"14872:123:201","statements":[{"body":{"nodeType":"YulBlock","src":"14907:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"14909:16:201"},"nodeType":"YulFunctionCall","src":"14909:18:201"},"nodeType":"YulExpressionStatement","src":"14909:18:201"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"14892:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"14902:3:201","type":"","value":"255"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14889:2:201"},"nodeType":"YulFunctionCall","src":"14889:17:201"},"nodeType":"YulIf","src":"14886:43:201"},{"nodeType":"YulAssignment","src":"14942:25:201","value":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"14955:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"14965:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"14951:3:201"},"nodeType":"YulFunctionCall","src":"14951:16:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"14942:5:201"}]},{"nodeType":"YulLeave","src":"14980:5:201"}]},"nodeType":"YulCase","src":"14865:130:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14870:1:201","type":"","value":"2"}}],"expression":{"name":"base","nodeType":"YulIdentifier","src":"14784:4:201"},"nodeType":"YulSwitch","src":"14777:218:201"},{"body":{"nodeType":"YulBlock","src":"15093:70:201","statements":[{"nodeType":"YulAssignment","src":"15107:28:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"15120:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"15126:8:201"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"15116:3:201"},"nodeType":"YulFunctionCall","src":"15116:19:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"15107:5:201"}]},{"nodeType":"YulLeave","src":"15148:5:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"15017:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"15023:2:201","type":"","value":"11"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15014:2:201"},"nodeType":"YulFunctionCall","src":"15014:12:201"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"15031:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"15041:2:201","type":"","value":"78"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15028:2:201"},"nodeType":"YulFunctionCall","src":"15028:16:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15010:3:201"},"nodeType":"YulFunctionCall","src":"15010:35:201"},{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"15054:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"15060:3:201","type":"","value":"307"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15051:2:201"},"nodeType":"YulFunctionCall","src":"15051:13:201"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"15069:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"15079:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15066:2:201"},"nodeType":"YulFunctionCall","src":"15066:16:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15047:3:201"},"nodeType":"YulFunctionCall","src":"15047:36:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"15007:2:201"},"nodeType":"YulFunctionCall","src":"15007:77:201"},"nodeType":"YulIf","src":"15004:159:201"},{"nodeType":"YulVariableDeclaration","src":"15172:57:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"15214:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"15220:8:201"}],"functionName":{"name":"checked_exp_helper","nodeType":"YulIdentifier","src":"15195:18:201"},"nodeType":"YulFunctionCall","src":"15195:34:201"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"15176:7:201","type":""},{"name":"base_1","nodeType":"YulTypedName","src":"15185:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"15334:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15336:16:201"},"nodeType":"YulFunctionCall","src":"15336:18:201"},"nodeType":"YulExpressionStatement","src":"15336:18:201"}]},"condition":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"15244:7:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15257:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base_1","nodeType":"YulIdentifier","src":"15325:6:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"15253:3:201"},"nodeType":"YulFunctionCall","src":"15253:79:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15241:2:201"},"nodeType":"YulFunctionCall","src":"15241:92:201"},"nodeType":"YulIf","src":"15238:118:201"},{"nodeType":"YulAssignment","src":"15365:29:201","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"15378:7:201"},{"name":"base_1","nodeType":"YulIdentifier","src":"15387:6:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"15374:3:201"},"nodeType":"YulFunctionCall","src":"15374:20:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"15365:5:201"}]}]},"name":"checked_exp_unsigned","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"14564:4:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"14570:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"14583:5:201","type":""}],"src":"14534:866:201"},{"body":{"nodeType":"YulBlock","src":"15475:61:201","statements":[{"nodeType":"YulAssignment","src":"15485:45:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"15515:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"15521:8:201"}],"functionName":{"name":"checked_exp_unsigned","nodeType":"YulIdentifier","src":"15494:20:201"},"nodeType":"YulFunctionCall","src":"15494:36:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"15485:5:201"}]}]},"name":"checked_exp_t_uint256_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"15446:4:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"15452:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"15465:5:201","type":""}],"src":"15405:131:201"},{"body":{"nodeType":"YulBlock","src":"15715:225:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15732:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15743:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15725:6:201"},"nodeType":"YulFunctionCall","src":"15725:21:201"},"nodeType":"YulExpressionStatement","src":"15725:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15766:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15777:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15762:3:201"},"nodeType":"YulFunctionCall","src":"15762:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"15782:2:201","type":"","value":"35"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15755:6:201"},"nodeType":"YulFunctionCall","src":"15755:30:201"},"nodeType":"YulExpressionStatement","src":"15755:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15805:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15816:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15801:3:201"},"nodeType":"YulFunctionCall","src":"15801:18:201"},{"hexValue":"6d6178416d6f756e74546f5377617020657863656564206d617820736c697070","kind":"string","nodeType":"YulLiteral","src":"15821:34:201","type":"","value":"maxAmountToSwap exceed max slipp"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15794:6:201"},"nodeType":"YulFunctionCall","src":"15794:62:201"},"nodeType":"YulExpressionStatement","src":"15794:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15876:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15887:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15872:3:201"},"nodeType":"YulFunctionCall","src":"15872:18:201"},{"hexValue":"616765","kind":"string","nodeType":"YulLiteral","src":"15892:5:201","type":"","value":"age"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15865:6:201"},"nodeType":"YulFunctionCall","src":"15865:33:201"},"nodeType":"YulExpressionStatement","src":"15865:33:201"},{"nodeType":"YulAssignment","src":"15907:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15919:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15930:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15915:3:201"},"nodeType":"YulFunctionCall","src":"15915:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15907:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_6e5d7e8ec1c44b1be662d5a482625181074d9516baace42f35250edc17de17e6__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15692:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15706:4:201","type":""}],"src":"15541:399:201"},{"body":{"nodeType":"YulBlock","src":"16119:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16136:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16147:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16129:6:201"},"nodeType":"YulFunctionCall","src":"16129:21:201"},"nodeType":"YulExpressionStatement","src":"16129:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16170:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16181:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16166:3:201"},"nodeType":"YulFunctionCall","src":"16166:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"16186:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16159:6:201"},"nodeType":"YulFunctionCall","src":"16159:30:201"},"nodeType":"YulExpressionStatement","src":"16159:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16209:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16220:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16205:3:201"},"nodeType":"YulFunctionCall","src":"16205:18:201"},{"hexValue":"494e53554646494349454e545f42414c414e43455f4245464f52455f53574150","kind":"string","nodeType":"YulLiteral","src":"16225:34:201","type":"","value":"INSUFFICIENT_BALANCE_BEFORE_SWAP"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16198:6:201"},"nodeType":"YulFunctionCall","src":"16198:62:201"},"nodeType":"YulExpressionStatement","src":"16198:62:201"},{"nodeType":"YulAssignment","src":"16269:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16281:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16292:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16277:3:201"},"nodeType":"YulFunctionCall","src":"16277:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16269:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_51fc4946c16284910827fc38bc7611d60d4dd1f7d8fefa0da6f8642035c3c48b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16096:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16110:4:201","type":""}],"src":"15945:356:201"},{"body":{"nodeType":"YulBlock","src":"16366:86:201","statements":[{"nodeType":"YulAssignment","src":"16376:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"16391:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16385:5:201"},"nodeType":"YulFunctionCall","src":"16385:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"16376:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16440:5:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"16407:32:201"},"nodeType":"YulFunctionCall","src":"16407:39:201"},"nodeType":"YulExpressionStatement","src":"16407:39:201"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"16345:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"16356:5:201","type":""}],"src":"16306:146:201"},{"body":{"nodeType":"YulBlock","src":"16538:178:201","statements":[{"body":{"nodeType":"YulBlock","src":"16584:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16593:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16596:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16586:6:201"},"nodeType":"YulFunctionCall","src":"16586:12:201"},"nodeType":"YulExpressionStatement","src":"16586:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"16559:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"16568:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16555:3:201"},"nodeType":"YulFunctionCall","src":"16555:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"16580:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"16551:3:201"},"nodeType":"YulFunctionCall","src":"16551:32:201"},"nodeType":"YulIf","src":"16548:52:201"},{"nodeType":"YulVariableDeclaration","src":"16609:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16628:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16622:5:201"},"nodeType":"YulFunctionCall","src":"16622:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"16613:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16680:5:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"16647:32:201"},"nodeType":"YulFunctionCall","src":"16647:39:201"},"nodeType":"YulExpressionStatement","src":"16647:39:201"},{"nodeType":"YulAssignment","src":"16695:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"16705:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"16695:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16504:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"16515:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"16527:6:201","type":""}],"src":"16457:259:201"},{"body":{"nodeType":"YulBlock","src":"16895:179:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16912:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16923:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16905:6:201"},"nodeType":"YulFunctionCall","src":"16905:21:201"},"nodeType":"YulExpressionStatement","src":"16905:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16946:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16957:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16942:3:201"},"nodeType":"YulFunctionCall","src":"16942:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"16962:2:201","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16935:6:201"},"nodeType":"YulFunctionCall","src":"16935:30:201"},"nodeType":"YulExpressionStatement","src":"16935:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16985:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16996:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16981:3:201"},"nodeType":"YulFunctionCall","src":"16981:18:201"},{"hexValue":"544f5f414d4f554e545f4f46465345545f4f55545f4f465f52414e4745","kind":"string","nodeType":"YulLiteral","src":"17001:31:201","type":"","value":"TO_AMOUNT_OFFSET_OUT_OF_RANGE"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16974:6:201"},"nodeType":"YulFunctionCall","src":"16974:59:201"},"nodeType":"YulExpressionStatement","src":"16974:59:201"},{"nodeType":"YulAssignment","src":"17042:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17054:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17065:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17050:3:201"},"nodeType":"YulFunctionCall","src":"17050:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17042:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_4eedef4370592e3a8bf461b38c88567ca40f914461890c03d6ba3dcb2fd5ff46__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16872:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16886:4:201","type":""}],"src":"16721:353:201"},{"body":{"nodeType":"YulBlock","src":"17216:137:201","statements":[{"nodeType":"YulVariableDeclaration","src":"17226:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"17246:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17240:5:201"},"nodeType":"YulFunctionCall","src":"17240:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"17230:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"17288:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"17296:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17284:3:201"},"nodeType":"YulFunctionCall","src":"17284:17:201"},{"name":"pos","nodeType":"YulIdentifier","src":"17303:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"17308:6:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"17262:21:201"},"nodeType":"YulFunctionCall","src":"17262:53:201"},"nodeType":"YulExpressionStatement","src":"17262:53:201"},{"nodeType":"YulAssignment","src":"17324:23:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17335:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"17340:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17331:3:201"},"nodeType":"YulFunctionCall","src":"17331:16:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"17324:3:201"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"17192:3:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17197:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"17208:3:201","type":""}],"src":"17079:274:201"},{"body":{"nodeType":"YulBlock","src":"17532:174:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17549:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17560:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17542:6:201"},"nodeType":"YulFunctionCall","src":"17542:21:201"},"nodeType":"YulExpressionStatement","src":"17542:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17583:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17594:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17579:3:201"},"nodeType":"YulFunctionCall","src":"17579:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"17599:2:201","type":"","value":"24"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17572:6:201"},"nodeType":"YulFunctionCall","src":"17572:30:201"},"nodeType":"YulExpressionStatement","src":"17572:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17622:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17633:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17618:3:201"},"nodeType":"YulFunctionCall","src":"17618:18:201"},{"hexValue":"57524f4e475f42414c414e43455f41465445525f53574150","kind":"string","nodeType":"YulLiteral","src":"17638:26:201","type":"","value":"WRONG_BALANCE_AFTER_SWAP"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17611:6:201"},"nodeType":"YulFunctionCall","src":"17611:54:201"},"nodeType":"YulExpressionStatement","src":"17611:54:201"},{"nodeType":"YulAssignment","src":"17674:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17686:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17697:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17682:3:201"},"nodeType":"YulFunctionCall","src":"17682:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17674:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9bfa76b9c2e298d52f58639e051d7d21997f6c435f534dfd0c2e6c351c64a39a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17509:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17523:4:201","type":""}],"src":"17358:348:201"},{"body":{"nodeType":"YulBlock","src":"17885:178:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17902:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17913:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17895:6:201"},"nodeType":"YulFunctionCall","src":"17895:21:201"},"nodeType":"YulExpressionStatement","src":"17895:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17936:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17947:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17932:3:201"},"nodeType":"YulFunctionCall","src":"17932:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"17952:2:201","type":"","value":"28"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17925:6:201"},"nodeType":"YulFunctionCall","src":"17925:30:201"},"nodeType":"YulExpressionStatement","src":"17925:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17975:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17986:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17971:3:201"},"nodeType":"YulFunctionCall","src":"17971:18:201"},{"hexValue":"494e53554646494349454e545f414d4f554e545f5245434549564544","kind":"string","nodeType":"YulLiteral","src":"17991:30:201","type":"","value":"INSUFFICIENT_AMOUNT_RECEIVED"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17964:6:201"},"nodeType":"YulFunctionCall","src":"17964:58:201"},"nodeType":"YulExpressionStatement","src":"17964:58:201"},{"nodeType":"YulAssignment","src":"18031:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18043:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18054:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18039:3:201"},"nodeType":"YulFunctionCall","src":"18039:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18031:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_74fc5696336325aeb54c5d19133ed01308c8174de21fc66f38ac28668f995bc7__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17862:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17876:4:201","type":""}],"src":"17711:352:201"},{"body":{"nodeType":"YulBlock","src":"18197:119:201","statements":[{"nodeType":"YulAssignment","src":"18207:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18219:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18230:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18215:3:201"},"nodeType":"YulFunctionCall","src":"18215:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18207:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18249:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"18260:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18242:6:201"},"nodeType":"YulFunctionCall","src":"18242:25:201"},"nodeType":"YulExpressionStatement","src":"18242:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18287:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18298:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18283:3:201"},"nodeType":"YulFunctionCall","src":"18283:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"18303:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18276:6:201"},"nodeType":"YulFunctionCall","src":"18276:34:201"},"nodeType":"YulExpressionStatement","src":"18276:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18158:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"18169:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18177:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18188:4:201","type":""}],"src":"18068:248:201"},{"body":{"nodeType":"YulBlock","src":"18450:198:201","statements":[{"nodeType":"YulAssignment","src":"18460:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18472:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18483:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18468:3:201"},"nodeType":"YulFunctionCall","src":"18468:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18460:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"18495:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"18505:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"18499:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18563:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18578:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"18586:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18574:3:201"},"nodeType":"YulFunctionCall","src":"18574:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18556:6:201"},"nodeType":"YulFunctionCall","src":"18556:34:201"},"nodeType":"YulExpressionStatement","src":"18556:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18610:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18621:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18606:3:201"},"nodeType":"YulFunctionCall","src":"18606:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"18630:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"18638:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18626:3:201"},"nodeType":"YulFunctionCall","src":"18626:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18599:6:201"},"nodeType":"YulFunctionCall","src":"18599:43:201"},"nodeType":"YulExpressionStatement","src":"18599:43:201"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18411:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"18422:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18430:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18441:4:201","type":""}],"src":"18321:327:201"},{"body":{"nodeType":"YulBlock","src":"18827:244:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18844:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18855:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18837:6:201"},"nodeType":"YulFunctionCall","src":"18837:21:201"},"nodeType":"YulExpressionStatement","src":"18837:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18878:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18889:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18874:3:201"},"nodeType":"YulFunctionCall","src":"18874:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"18894:2:201","type":"","value":"54"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18867:6:201"},"nodeType":"YulFunctionCall","src":"18867:30:201"},"nodeType":"YulExpressionStatement","src":"18867:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18917:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18928:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18913:3:201"},"nodeType":"YulFunctionCall","src":"18913:18:201"},{"hexValue":"5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f","kind":"string","nodeType":"YulLiteral","src":"18933:34:201","type":"","value":"SafeERC20: approve from non-zero"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18906:6:201"},"nodeType":"YulFunctionCall","src":"18906:62:201"},"nodeType":"YulExpressionStatement","src":"18906:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18988:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18999:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18984:3:201"},"nodeType":"YulFunctionCall","src":"18984:18:201"},{"hexValue":"20746f206e6f6e2d7a65726f20616c6c6f77616e6365","kind":"string","nodeType":"YulLiteral","src":"19004:24:201","type":"","value":" to non-zero allowance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18977:6:201"},"nodeType":"YulFunctionCall","src":"18977:52:201"},"nodeType":"YulExpressionStatement","src":"18977:52:201"},{"nodeType":"YulAssignment","src":"19038:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19050:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19061:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19046:3:201"},"nodeType":"YulFunctionCall","src":"19046:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19038:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18804:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18818:4:201","type":""}],"src":"18653:418:201"},{"body":{"nodeType":"YulBlock","src":"19205:168:201","statements":[{"nodeType":"YulAssignment","src":"19215:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19227:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19238:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19223:3:201"},"nodeType":"YulFunctionCall","src":"19223:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19215:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19257:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"19272:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"19280:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19268:3:201"},"nodeType":"YulFunctionCall","src":"19268:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19250:6:201"},"nodeType":"YulFunctionCall","src":"19250:74:201"},"nodeType":"YulExpressionStatement","src":"19250:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19344:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19355:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19340:3:201"},"nodeType":"YulFunctionCall","src":"19340:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"19360:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19333:6:201"},"nodeType":"YulFunctionCall","src":"19333:34:201"},"nodeType":"YulExpressionStatement","src":"19333:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19166:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"19177:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"19185:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19196:4:201","type":""}],"src":"19076:297:201"},{"body":{"nodeType":"YulBlock","src":"19469:335:201","statements":[{"body":{"nodeType":"YulBlock","src":"19513:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19522:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19525:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19515:6:201"},"nodeType":"YulFunctionCall","src":"19515:12:201"},"nodeType":"YulExpressionStatement","src":"19515:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"19490:3:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"19495:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19486:3:201"},"nodeType":"YulFunctionCall","src":"19486:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"19507:4:201","type":"","value":"0x20"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"19482:3:201"},"nodeType":"YulFunctionCall","src":"19482:30:201"},"nodeType":"YulIf","src":"19479:50:201"},{"nodeType":"YulVariableDeclaration","src":"19538:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19558:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19552:5:201"},"nodeType":"YulFunctionCall","src":"19552:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"19542:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"19570:35:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19592:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"19600:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19588:3:201"},"nodeType":"YulFunctionCall","src":"19588:17:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"19574:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"19680:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"19682:16:201"},"nodeType":"YulFunctionCall","src":"19682:18:201"},"nodeType":"YulExpressionStatement","src":"19682:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19623:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"19635:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"19620:2:201"},"nodeType":"YulFunctionCall","src":"19620:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19659:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"19671:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"19656:2:201"},"nodeType":"YulFunctionCall","src":"19656:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"19617:2:201"},"nodeType":"YulFunctionCall","src":"19617:62:201"},"nodeType":"YulIf","src":"19614:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19718:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"19722:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19711:6:201"},"nodeType":"YulFunctionCall","src":"19711:22:201"},"nodeType":"YulExpressionStatement","src":"19711:22:201"},{"nodeType":"YulAssignment","src":"19742:15:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"19751:6:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"19742:5:201"}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"19773:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19787:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19781:5:201"},"nodeType":"YulFunctionCall","src":"19781:16:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19766:6:201"},"nodeType":"YulFunctionCall","src":"19766:32:201"},"nodeType":"YulExpressionStatement","src":"19766:32:201"}]},"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19440:9:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"19451:3:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"19459:5:201","type":""}],"src":"19378:426:201"},{"body":{"nodeType":"YulBlock","src":"19869:132:201","statements":[{"nodeType":"YulAssignment","src":"19879:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"19894:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19888:5:201"},"nodeType":"YulFunctionCall","src":"19888:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"19879:5:201"}]},{"body":{"nodeType":"YulBlock","src":"19979:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19988:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19991:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19981:6:201"},"nodeType":"YulFunctionCall","src":"19981:12:201"},"nodeType":"YulExpressionStatement","src":"19981:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"19923:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"19934:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"19941:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19930:3:201"},"nodeType":"YulFunctionCall","src":"19930:46:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"19920:2:201"},"nodeType":"YulFunctionCall","src":"19920:57:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"19913:6:201"},"nodeType":"YulFunctionCall","src":"19913:65:201"},"nodeType":"YulIf","src":"19910:85:201"}]},"name":"abi_decode_uint128_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"19848:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"19859:5:201","type":""}],"src":"19809:192:201"},{"body":{"nodeType":"YulBlock","src":"20065:110:201","statements":[{"nodeType":"YulAssignment","src":"20075:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"20090:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"20084:5:201"},"nodeType":"YulFunctionCall","src":"20084:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"20075:5:201"}]},{"body":{"nodeType":"YulBlock","src":"20153:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20162:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20165:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20155:6:201"},"nodeType":"YulFunctionCall","src":"20155:12:201"},"nodeType":"YulExpressionStatement","src":"20155:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20119:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20130:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"20137:12:201","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20126:3:201"},"nodeType":"YulFunctionCall","src":"20126:24:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"20116:2:201"},"nodeType":"YulFunctionCall","src":"20116:35:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"20109:6:201"},"nodeType":"YulFunctionCall","src":"20109:43:201"},"nodeType":"YulIf","src":"20106:63:201"}]},"name":"abi_decode_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"20044:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"20055:5:201","type":""}],"src":"20006:169:201"},{"body":{"nodeType":"YulBlock","src":"20239:104:201","statements":[{"nodeType":"YulAssignment","src":"20249:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"20264:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"20258:5:201"},"nodeType":"YulFunctionCall","src":"20258:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"20249:5:201"}]},{"body":{"nodeType":"YulBlock","src":"20321:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20330:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20333:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20323:6:201"},"nodeType":"YulFunctionCall","src":"20323:12:201"},"nodeType":"YulExpressionStatement","src":"20323:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20293:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20304:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"20311:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20300:3:201"},"nodeType":"YulFunctionCall","src":"20300:18:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"20290:2:201"},"nodeType":"YulFunctionCall","src":"20290:29:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"20283:6:201"},"nodeType":"YulFunctionCall","src":"20283:37:201"},"nodeType":"YulIf","src":"20280:57:201"}]},"name":"abi_decode_uint16_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"20218:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"20229:5:201","type":""}],"src":"20180:163:201"},{"body":{"nodeType":"YulBlock","src":"20459:1541:201","statements":[{"body":{"nodeType":"YulBlock","src":"20506:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20515:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20518:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20508:6:201"},"nodeType":"YulFunctionCall","src":"20508:12:201"},"nodeType":"YulExpressionStatement","src":"20508:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"20480:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"20489:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"20476:3:201"},"nodeType":"YulFunctionCall","src":"20476:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"20501:3:201","type":"","value":"480"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"20472:3:201"},"nodeType":"YulFunctionCall","src":"20472:33:201"},"nodeType":"YulIf","src":"20469:53:201"},{"nodeType":"YulVariableDeclaration","src":"20531:35:201","value":{"arguments":[],"functionName":{"name":"allocate_memory_3199","nodeType":"YulIdentifier","src":"20544:20:201"},"nodeType":"YulFunctionCall","src":"20544:22:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"20535:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20582:5:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20642:9:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"20653:7:201"}],"functionName":{"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulIdentifier","src":"20589:52:201"},"nodeType":"YulFunctionCall","src":"20589:72:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20575:6:201"},"nodeType":"YulFunctionCall","src":"20575:87:201"},"nodeType":"YulExpressionStatement","src":"20575:87:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20682:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"20689:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20678:3:201"},"nodeType":"YulFunctionCall","src":"20678:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20728:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20739:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20724:3:201"},"nodeType":"YulFunctionCall","src":"20724:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"20694:29:201"},"nodeType":"YulFunctionCall","src":"20694:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20671:6:201"},"nodeType":"YulFunctionCall","src":"20671:73:201"},"nodeType":"YulExpressionStatement","src":"20671:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20764:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"20771:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20760:3:201"},"nodeType":"YulFunctionCall","src":"20760:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20810:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20821:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20806:3:201"},"nodeType":"YulFunctionCall","src":"20806:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"20776:29:201"},"nodeType":"YulFunctionCall","src":"20776:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20753:6:201"},"nodeType":"YulFunctionCall","src":"20753:73:201"},"nodeType":"YulExpressionStatement","src":"20753:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20846:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"20853:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20842:3:201"},"nodeType":"YulFunctionCall","src":"20842:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20892:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20903:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20888:3:201"},"nodeType":"YulFunctionCall","src":"20888:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"20858:29:201"},"nodeType":"YulFunctionCall","src":"20858:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20835:6:201"},"nodeType":"YulFunctionCall","src":"20835:73:201"},"nodeType":"YulExpressionStatement","src":"20835:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"20928:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"20935:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20924:3:201"},"nodeType":"YulFunctionCall","src":"20924:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20975:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20986:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20971:3:201"},"nodeType":"YulFunctionCall","src":"20971:19:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"20941:29:201"},"nodeType":"YulFunctionCall","src":"20941:50:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20917:6:201"},"nodeType":"YulFunctionCall","src":"20917:75:201"},"nodeType":"YulExpressionStatement","src":"20917:75:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21012:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"21019:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21008:3:201"},"nodeType":"YulFunctionCall","src":"21008:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21059:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21070:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21055:3:201"},"nodeType":"YulFunctionCall","src":"21055:19:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"21025:29:201"},"nodeType":"YulFunctionCall","src":"21025:50:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21001:6:201"},"nodeType":"YulFunctionCall","src":"21001:75:201"},"nodeType":"YulExpressionStatement","src":"21001:75:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21096:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"21103:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21092:3:201"},"nodeType":"YulFunctionCall","src":"21092:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21142:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21153:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21138:3:201"},"nodeType":"YulFunctionCall","src":"21138:19:201"}],"functionName":{"name":"abi_decode_uint40_fromMemory","nodeType":"YulIdentifier","src":"21109:28:201"},"nodeType":"YulFunctionCall","src":"21109:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21085:6:201"},"nodeType":"YulFunctionCall","src":"21085:74:201"},"nodeType":"YulExpressionStatement","src":"21085:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21179:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"21186:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21175:3:201"},"nodeType":"YulFunctionCall","src":"21175:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21225:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21236:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21221:3:201"},"nodeType":"YulFunctionCall","src":"21221:19:201"}],"functionName":{"name":"abi_decode_uint16_fromMemory","nodeType":"YulIdentifier","src":"21192:28:201"},"nodeType":"YulFunctionCall","src":"21192:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21168:6:201"},"nodeType":"YulFunctionCall","src":"21168:74:201"},"nodeType":"YulExpressionStatement","src":"21168:74:201"},{"nodeType":"YulVariableDeclaration","src":"21251:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"21261:3:201","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"21255:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21284:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"21291:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21280:3:201"},"nodeType":"YulFunctionCall","src":"21280:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21330:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"21341:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21326:3:201"},"nodeType":"YulFunctionCall","src":"21326:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"21296:29:201"},"nodeType":"YulFunctionCall","src":"21296:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21273:6:201"},"nodeType":"YulFunctionCall","src":"21273:73:201"},"nodeType":"YulExpressionStatement","src":"21273:73:201"},{"nodeType":"YulVariableDeclaration","src":"21355:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"21365:3:201","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"21359:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21388:5:201"},{"name":"_2","nodeType":"YulIdentifier","src":"21395:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21384:3:201"},"nodeType":"YulFunctionCall","src":"21384:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21434:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"21445:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21430:3:201"},"nodeType":"YulFunctionCall","src":"21430:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"21400:29:201"},"nodeType":"YulFunctionCall","src":"21400:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21377:6:201"},"nodeType":"YulFunctionCall","src":"21377:73:201"},"nodeType":"YulExpressionStatement","src":"21377:73:201"},{"nodeType":"YulVariableDeclaration","src":"21459:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"21469:3:201","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"21463:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21492:5:201"},{"name":"_3","nodeType":"YulIdentifier","src":"21499:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21488:3:201"},"nodeType":"YulFunctionCall","src":"21488:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21538:9:201"},{"name":"_3","nodeType":"YulIdentifier","src":"21549:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21534:3:201"},"nodeType":"YulFunctionCall","src":"21534:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"21504:29:201"},"nodeType":"YulFunctionCall","src":"21504:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21481:6:201"},"nodeType":"YulFunctionCall","src":"21481:73:201"},"nodeType":"YulExpressionStatement","src":"21481:73:201"},{"nodeType":"YulVariableDeclaration","src":"21563:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"21573:3:201","type":"","value":"352"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"21567:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21596:5:201"},{"name":"_4","nodeType":"YulIdentifier","src":"21603:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21592:3:201"},"nodeType":"YulFunctionCall","src":"21592:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21642:9:201"},{"name":"_4","nodeType":"YulIdentifier","src":"21653:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21638:3:201"},"nodeType":"YulFunctionCall","src":"21638:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"21608:29:201"},"nodeType":"YulFunctionCall","src":"21608:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21585:6:201"},"nodeType":"YulFunctionCall","src":"21585:73:201"},"nodeType":"YulExpressionStatement","src":"21585:73:201"},{"nodeType":"YulVariableDeclaration","src":"21667:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"21677:3:201","type":"","value":"384"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"21671:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21700:5:201"},{"name":"_5","nodeType":"YulIdentifier","src":"21707:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21696:3:201"},"nodeType":"YulFunctionCall","src":"21696:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21746:9:201"},{"name":"_5","nodeType":"YulIdentifier","src":"21757:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21742:3:201"},"nodeType":"YulFunctionCall","src":"21742:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"21712:29:201"},"nodeType":"YulFunctionCall","src":"21712:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21689:6:201"},"nodeType":"YulFunctionCall","src":"21689:73:201"},"nodeType":"YulExpressionStatement","src":"21689:73:201"},{"nodeType":"YulVariableDeclaration","src":"21771:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"21781:3:201","type":"","value":"416"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"21775:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21804:5:201"},{"name":"_6","nodeType":"YulIdentifier","src":"21811:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21800:3:201"},"nodeType":"YulFunctionCall","src":"21800:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21850:9:201"},{"name":"_6","nodeType":"YulIdentifier","src":"21861:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21846:3:201"},"nodeType":"YulFunctionCall","src":"21846:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"21816:29:201"},"nodeType":"YulFunctionCall","src":"21816:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21793:6:201"},"nodeType":"YulFunctionCall","src":"21793:73:201"},"nodeType":"YulExpressionStatement","src":"21793:73:201"},{"nodeType":"YulVariableDeclaration","src":"21875:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"21885:3:201","type":"","value":"448"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"21879:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21908:5:201"},{"name":"_7","nodeType":"YulIdentifier","src":"21915:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21904:3:201"},"nodeType":"YulFunctionCall","src":"21904:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21954:9:201"},{"name":"_7","nodeType":"YulIdentifier","src":"21965:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21950:3:201"},"nodeType":"YulFunctionCall","src":"21950:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"21920:29:201"},"nodeType":"YulFunctionCall","src":"21920:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21897:6:201"},"nodeType":"YulFunctionCall","src":"21897:73:201"},"nodeType":"YulExpressionStatement","src":"21897:73:201"},{"nodeType":"YulAssignment","src":"21979:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"21989:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"21979:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20425:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"20436:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"20448:6:201","type":""}],"src":"20348:1652:201"},{"body":{"nodeType":"YulBlock","src":"22270:428:201","statements":[{"nodeType":"YulAssignment","src":"22280:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22292:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22303:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22288:3:201"},"nodeType":"YulFunctionCall","src":"22288:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22280:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"22316:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"22326:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"22320:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22384:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"22399:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"22407:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22395:3:201"},"nodeType":"YulFunctionCall","src":"22395:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22377:6:201"},"nodeType":"YulFunctionCall","src":"22377:34:201"},"nodeType":"YulExpressionStatement","src":"22377:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22431:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22442:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22427:3:201"},"nodeType":"YulFunctionCall","src":"22427:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"22451:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"22459:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22447:3:201"},"nodeType":"YulFunctionCall","src":"22447:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22420:6:201"},"nodeType":"YulFunctionCall","src":"22420:43:201"},"nodeType":"YulExpressionStatement","src":"22420:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22483:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22494:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22479:3:201"},"nodeType":"YulFunctionCall","src":"22479:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"22499:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22472:6:201"},"nodeType":"YulFunctionCall","src":"22472:34:201"},"nodeType":"YulExpressionStatement","src":"22472:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22526:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22537:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22522:3:201"},"nodeType":"YulFunctionCall","src":"22522:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"22542:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22515:6:201"},"nodeType":"YulFunctionCall","src":"22515:34:201"},"nodeType":"YulExpressionStatement","src":"22515:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22569:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22580:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22565:3:201"},"nodeType":"YulFunctionCall","src":"22565:19:201"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"22590:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"22598:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22586:3:201"},"nodeType":"YulFunctionCall","src":"22586:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22558:6:201"},"nodeType":"YulFunctionCall","src":"22558:46:201"},"nodeType":"YulExpressionStatement","src":"22558:46:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22624:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22635:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22620:3:201"},"nodeType":"YulFunctionCall","src":"22620:19:201"},{"name":"value5","nodeType":"YulIdentifier","src":"22641:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22613:6:201"},"nodeType":"YulFunctionCall","src":"22613:35:201"},"nodeType":"YulExpressionStatement","src":"22613:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22668:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22679:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22664:3:201"},"nodeType":"YulFunctionCall","src":"22664:19:201"},{"name":"value6","nodeType":"YulIdentifier","src":"22685:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22657:6:201"},"nodeType":"YulFunctionCall","src":"22657:35:201"},"nodeType":"YulExpressionStatement","src":"22657:35:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22191:9:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"22202:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"22210:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"22218:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"22226:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"22234:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"22242:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"22250:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22261:4:201","type":""}],"src":"22005:693:201"},{"body":{"nodeType":"YulBlock","src":"22860:241:201","statements":[{"nodeType":"YulAssignment","src":"22870:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22882:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22893:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22878:3:201"},"nodeType":"YulFunctionCall","src":"22878:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22870:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"22905:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"22915:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"22909:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22973:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"22988:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"22996:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22984:3:201"},"nodeType":"YulFunctionCall","src":"22984:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22966:6:201"},"nodeType":"YulFunctionCall","src":"22966:34:201"},"nodeType":"YulExpressionStatement","src":"22966:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23020:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23031:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23016:3:201"},"nodeType":"YulFunctionCall","src":"23016:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"23036:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23009:6:201"},"nodeType":"YulFunctionCall","src":"23009:34:201"},"nodeType":"YulExpressionStatement","src":"23009:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23063:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23074:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23059:3:201"},"nodeType":"YulFunctionCall","src":"23059:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"23083:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"23091:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23079:3:201"},"nodeType":"YulFunctionCall","src":"23079:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23052:6:201"},"nodeType":"YulFunctionCall","src":"23052:43:201"},"nodeType":"YulExpressionStatement","src":"23052:43:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22813:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"22824:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"22832:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"22840:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22851:4:201","type":""}],"src":"22703:398:201"},{"body":{"nodeType":"YulBlock","src":"23280:177:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23297:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23308:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23290:6:201"},"nodeType":"YulFunctionCall","src":"23290:21:201"},"nodeType":"YulExpressionStatement","src":"23290:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23331:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23342:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23327:3:201"},"nodeType":"YulFunctionCall","src":"23327:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"23347:2:201","type":"","value":"27"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23320:6:201"},"nodeType":"YulFunctionCall","src":"23320:30:201"},"nodeType":"YulExpressionStatement","src":"23320:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23370:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23381:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23366:3:201"},"nodeType":"YulFunctionCall","src":"23366:18:201"},{"hexValue":"554e45585045435445445f414d4f554e545f57495448445241574e","kind":"string","nodeType":"YulLiteral","src":"23386:29:201","type":"","value":"UNEXPECTED_AMOUNT_WITHDRAWN"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23359:6:201"},"nodeType":"YulFunctionCall","src":"23359:57:201"},"nodeType":"YulExpressionStatement","src":"23359:57:201"},{"nodeType":"YulAssignment","src":"23425:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23437:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23448:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23433:3:201"},"nodeType":"YulFunctionCall","src":"23433:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23425:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_85a045c7862eb0e81d59fe8dfd2ed8c824917ce215328caf39199676e5939f87__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23257:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23271:4:201","type":""}],"src":"23106:351:201"},{"body":{"nodeType":"YulBlock","src":"23541:168:201","statements":[{"body":{"nodeType":"YulBlock","src":"23587:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23596:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"23599:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"23589:6:201"},"nodeType":"YulFunctionCall","src":"23589:12:201"},"nodeType":"YulExpressionStatement","src":"23589:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"23562:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"23571:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"23558:3:201"},"nodeType":"YulFunctionCall","src":"23558:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"23583:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"23554:3:201"},"nodeType":"YulFunctionCall","src":"23554:32:201"},"nodeType":"YulIf","src":"23551:52:201"},{"nodeType":"YulVariableDeclaration","src":"23612:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23631:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"23625:5:201"},"nodeType":"YulFunctionCall","src":"23625:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"23616:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23673:5:201"}],"functionName":{"name":"validator_revert_uint8","nodeType":"YulIdentifier","src":"23650:22:201"},"nodeType":"YulFunctionCall","src":"23650:29:201"},"nodeType":"YulExpressionStatement","src":"23650:29:201"},{"nodeType":"YulAssignment","src":"23688:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"23698:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"23688:6:201"}]}]},"name":"abi_decode_tuple_t_uint8_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23507:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"23518:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"23530:6:201","type":""}],"src":"23462:247:201"},{"body":{"nodeType":"YulBlock","src":"23888:176:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23905:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23916:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23898:6:201"},"nodeType":"YulFunctionCall","src":"23898:21:201"},"nodeType":"YulExpressionStatement","src":"23898:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23939:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23950:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23935:3:201"},"nodeType":"YulFunctionCall","src":"23935:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"23955:2:201","type":"","value":"26"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23928:6:201"},"nodeType":"YulFunctionCall","src":"23928:30:201"},"nodeType":"YulExpressionStatement","src":"23928:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23978:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23989:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23974:3:201"},"nodeType":"YulFunctionCall","src":"23974:18:201"},{"hexValue":"544f4f5f4d414e595f444543494d414c535f4f4e5f544f4b454e","kind":"string","nodeType":"YulLiteral","src":"23994:28:201","type":"","value":"TOO_MANY_DECIMALS_ON_TOKEN"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23967:6:201"},"nodeType":"YulFunctionCall","src":"23967:56:201"},"nodeType":"YulExpressionStatement","src":"23967:56:201"},{"nodeType":"YulAssignment","src":"24032:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24044:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24055:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24040:3:201"},"nodeType":"YulFunctionCall","src":"24040:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24032:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_fc5915f8715e0da4bd5e6487e67e57e89850a48fc18d4e921a811a8c928ad119__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23865:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23879:4:201","type":""}],"src":"23714:350:201"},{"body":{"nodeType":"YulBlock","src":"24101:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"24118:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"24121:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24111:6:201"},"nodeType":"YulFunctionCall","src":"24111:88:201"},"nodeType":"YulExpressionStatement","src":"24111:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"24215:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"24218:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24208:6:201"},"nodeType":"YulFunctionCall","src":"24208:15:201"},"nodeType":"YulExpressionStatement","src":"24208:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"24239:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"24242:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"24232:6:201"},"nodeType":"YulFunctionCall","src":"24232:15:201"},"nodeType":"YulExpressionStatement","src":"24232:15:201"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"24069:184:201"},{"body":{"nodeType":"YulBlock","src":"24304:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"24335:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"24356:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"24359:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24349:6:201"},"nodeType":"YulFunctionCall","src":"24349:88:201"},"nodeType":"YulExpressionStatement","src":"24349:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"24457:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"24460:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24450:6:201"},"nodeType":"YulFunctionCall","src":"24450:15:201"},"nodeType":"YulExpressionStatement","src":"24450:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"24485:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"24488:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"24478:6:201"},"nodeType":"YulFunctionCall","src":"24478:15:201"},"nodeType":"YulExpressionStatement","src":"24478:15:201"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"24324:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"24317:6:201"},"nodeType":"YulFunctionCall","src":"24317:9:201"},"nodeType":"YulIf","src":"24314:189:201"},{"nodeType":"YulAssignment","src":"24512:14:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"24521:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"24524:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"24517:3:201"},"nodeType":"YulFunctionCall","src":"24517:9:201"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"24512:1:201"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"24289:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"24292:1:201","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"24298:1:201","type":""}],"src":"24258:274:201"},{"body":{"nodeType":"YulBlock","src":"24711:232:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24728:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24739:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24721:6:201"},"nodeType":"YulFunctionCall","src":"24721:21:201"},"nodeType":"YulExpressionStatement","src":"24721:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24762:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24773:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24758:3:201"},"nodeType":"YulFunctionCall","src":"24758:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"24778:2:201","type":"","value":"42"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24751:6:201"},"nodeType":"YulFunctionCall","src":"24751:30:201"},"nodeType":"YulExpressionStatement","src":"24751:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24801:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24812:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24797:3:201"},"nodeType":"YulFunctionCall","src":"24797:18:201"},{"hexValue":"5361666545524332303a204552433230206f7065726174696f6e20646964206e","kind":"string","nodeType":"YulLiteral","src":"24817:34:201","type":"","value":"SafeERC20: ERC20 operation did n"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24790:6:201"},"nodeType":"YulFunctionCall","src":"24790:62:201"},"nodeType":"YulExpressionStatement","src":"24790:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24872:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24883:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24868:3:201"},"nodeType":"YulFunctionCall","src":"24868:18:201"},{"hexValue":"6f742073756363656564","kind":"string","nodeType":"YulLiteral","src":"24888:12:201","type":"","value":"ot succeed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24861:6:201"},"nodeType":"YulFunctionCall","src":"24861:40:201"},"nodeType":"YulExpressionStatement","src":"24861:40:201"},{"nodeType":"YulAssignment","src":"24910:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24922:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24933:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24918:3:201"},"nodeType":"YulFunctionCall","src":"24918:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24910:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24688:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24702:4:201","type":""}],"src":"24537:406:201"},{"body":{"nodeType":"YulBlock","src":"25122:175:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25139:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25150:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25132:6:201"},"nodeType":"YulFunctionCall","src":"25132:21:201"},"nodeType":"YulExpressionStatement","src":"25132:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25173:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25184:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25169:3:201"},"nodeType":"YulFunctionCall","src":"25169:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"25189:2:201","type":"","value":"25"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25162:6:201"},"nodeType":"YulFunctionCall","src":"25162:30:201"},"nodeType":"YulExpressionStatement","src":"25162:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25212:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25223:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25208:3:201"},"nodeType":"YulFunctionCall","src":"25208:18:201"},{"hexValue":"475076323a206661696c6564207472616e7366657246726f6d","kind":"string","nodeType":"YulLiteral","src":"25228:27:201","type":"","value":"GPv2: failed transferFrom"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25201:6:201"},"nodeType":"YulFunctionCall","src":"25201:55:201"},"nodeType":"YulExpressionStatement","src":"25201:55:201"},{"nodeType":"YulAssignment","src":"25265:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25277:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25288:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25273:3:201"},"nodeType":"YulFunctionCall","src":"25273:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25265:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25099:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25113:4:201","type":""}],"src":"24948:349:201"},{"body":{"nodeType":"YulBlock","src":"25476:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25493:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25504:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25486:6:201"},"nodeType":"YulFunctionCall","src":"25486:21:201"},"nodeType":"YulExpressionStatement","src":"25486:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25527:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25538:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25523:3:201"},"nodeType":"YulFunctionCall","src":"25523:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"25543:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25516:6:201"},"nodeType":"YulFunctionCall","src":"25516:30:201"},"nodeType":"YulExpressionStatement","src":"25516:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25566:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25577:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25562:3:201"},"nodeType":"YulFunctionCall","src":"25562:18:201"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f","kind":"string","nodeType":"YulLiteral","src":"25582:34:201","type":"","value":"Address: insufficient balance fo"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25555:6:201"},"nodeType":"YulFunctionCall","src":"25555:62:201"},"nodeType":"YulExpressionStatement","src":"25555:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25637:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25648:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25633:3:201"},"nodeType":"YulFunctionCall","src":"25633:18:201"},{"hexValue":"722063616c6c","kind":"string","nodeType":"YulLiteral","src":"25653:8:201","type":"","value":"r call"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25626:6:201"},"nodeType":"YulFunctionCall","src":"25626:36:201"},"nodeType":"YulExpressionStatement","src":"25626:36:201"},{"nodeType":"YulAssignment","src":"25671:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25683:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25694:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25679:3:201"},"nodeType":"YulFunctionCall","src":"25679:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25671:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25453:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25467:4:201","type":""}],"src":"25302:402:201"},{"body":{"nodeType":"YulBlock","src":"25883:179:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25900:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25911:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25893:6:201"},"nodeType":"YulFunctionCall","src":"25893:21:201"},"nodeType":"YulExpressionStatement","src":"25893:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25934:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25945:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25930:3:201"},"nodeType":"YulFunctionCall","src":"25930:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"25950:2:201","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25923:6:201"},"nodeType":"YulFunctionCall","src":"25923:30:201"},"nodeType":"YulExpressionStatement","src":"25923:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25973:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25984:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25969:3:201"},"nodeType":"YulFunctionCall","src":"25969:18:201"},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"25989:31:201","type":"","value":"Address: call to non-contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25962:6:201"},"nodeType":"YulFunctionCall","src":"25962:59:201"},"nodeType":"YulExpressionStatement","src":"25962:59:201"},{"nodeType":"YulAssignment","src":"26030:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26042:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26053:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26038:3:201"},"nodeType":"YulFunctionCall","src":"26038:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26030:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25860:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25874:4:201","type":""}],"src":"25709:353:201"},{"body":{"nodeType":"YulBlock","src":"26188:321:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26205:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26216:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26198:6:201"},"nodeType":"YulFunctionCall","src":"26198:21:201"},"nodeType":"YulExpressionStatement","src":"26198:21:201"},{"nodeType":"YulVariableDeclaration","src":"26228:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"26248:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"26242:5:201"},"nodeType":"YulFunctionCall","src":"26242:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"26232:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26275:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26286:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26271:3:201"},"nodeType":"YulFunctionCall","src":"26271:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"26291:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26264:6:201"},"nodeType":"YulFunctionCall","src":"26264:34:201"},"nodeType":"YulExpressionStatement","src":"26264:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"26333:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"26341:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26329:3:201"},"nodeType":"YulFunctionCall","src":"26329:15:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26350:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26361:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26346:3:201"},"nodeType":"YulFunctionCall","src":"26346:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"26366:6:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"26307:21:201"},"nodeType":"YulFunctionCall","src":"26307:66:201"},"nodeType":"YulExpressionStatement","src":"26307:66:201"},{"nodeType":"YulAssignment","src":"26382:121:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26398:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"26417:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"26425:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26413:3:201"},"nodeType":"YulFunctionCall","src":"26413:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"26430:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26409:3:201"},"nodeType":"YulFunctionCall","src":"26409:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26394:3:201"},"nodeType":"YulFunctionCall","src":"26394:104:201"},{"kind":"number","nodeType":"YulLiteral","src":"26500:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26390:3:201"},"nodeType":"YulFunctionCall","src":"26390:113:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26382:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26157:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"26168:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26179:4:201","type":""}],"src":"26067:442:201"}]},"contents":"{\n    { }\n    function validator_revert_contract_IERC20(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IERC20_$1442(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IERC20(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IERC20(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_contract_IERC20(value_1)\n        value3 := value_1\n        let offset := calldataload(add(headStart, 128))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value4_1, value5_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n        value4 := value4_1\n        value5 := value5_1\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_contract$_IPriceOracleGetter_$5835__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_contract$_IParaSwapAugustusRegistry_$30961__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_contract$_IERC20Detailed_$1464t_contract$_IERC20Detailed_$1464t_uint256t_uint256t_uint256t_uint256t_bytes_calldata_ptrt_struct$_PermitSignature_$29019_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 384) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IERC20(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_contract_IERC20(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n        let offset := calldataload(add(headStart, 192))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value6_1, value7_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n        value6 := value6_1\n        value7 := value7_1\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20), 160) { revert(0, 0) }\n        value8 := add(headStart, 224)\n    }\n    function abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IERC20(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_f253c60ca7289769121ceb7e8a55d2372f327bb2c0c90e8e3ba6b77e057d495e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"CALLER_MUST_BE_POOL\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_3199() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 480)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function validator_revert_uint8(value)\n    {\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_struct_PermitSignature(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0xa0) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xa0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        value := memPtr\n        mstore(memPtr, calldataload(headStart))\n        mstore(add(memPtr, 32), calldataload(add(headStart, 32)))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_uint8(value_1)\n        mstore(add(memPtr, 64), value_1)\n        mstore(add(memPtr, 96), calldataload(add(headStart, 96)))\n        mstore(add(memPtr, 128), calldataload(add(headStart, 128)))\n    }\n    function abi_decode_tuple_t_struct$_PermitSignature_$29019_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := abi_decode_struct_PermitSignature(headStart, dataEnd)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_address_t_rational_0_by_1__to_t_address_t_uint256_t_address_t_uint16__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), and(value3, 0xffff))\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint256_t_address__to_t_address_t_uint256_t_uint256_t_address__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"GPv2: failed transfer\")\n        tail := add(headStart, 96)\n    }\n    function array_allocation_size_bytes(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n        size := add(and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), 0x20)\n    }\n    function abi_decode_tuple_t_contract$_IERC20Detailed_$1464t_uint256t_uint256t_uint256t_bytes_memory_ptrt_struct$_PermitSignature_$29019_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 320) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IERC20(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        let offset := calldataload(add(headStart, 128))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n        let _2 := calldataload(_1)\n        let array := allocate_memory(array_allocation_size_bytes(_2))\n        mstore(array, _2)\n        if gt(add(add(_1, _2), 32), dataEnd) { revert(0, 0) }\n        calldatacopy(add(array, 32), add(_1, 32), _2)\n        mstore(add(add(array, _2), 32), 0)\n        value4 := array\n        value5 := abi_decode_struct_PermitSignature(add(headStart, 160), dataEnd)\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_stringliteral_170e863dc30648ef8ff66ea3f3e18e36ff4d45f0897cc6afd8a56e95f00a3d60__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 28)\n        mstore(add(headStart, 64), \"INSUFFICIENT_AMOUNT_TO_REPAY\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_aaf54d652206a8d20544924cfa9c9432dfe69bab095c3b86a90e384e78ddb36d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"INVALID_DEBT_REPAY_AMOUNT\")\n        tail := add(headStart, 96)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_decode_tuple_t_bytes_memory_ptrt_contract$_IParaSwapAugustus_$30951_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := mload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n        let _2 := mload(_1)\n        let array := allocate_memory(array_allocation_size_bytes(_2))\n        mstore(array, _2)\n        if gt(add(add(_1, _2), 0x20), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory(add(_1, 0x20), add(array, 0x20), _2)\n        value0 := array\n        let value := mload(add(headStart, 0x20))\n        validator_revert_contract_IERC20(value)\n        value1 := value\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_3202e1fc4f78abbce03a97de69392b3f69ebba48c41588ffb32a1c8b97349f74__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"INVALID_AUGUSTUS\")\n        tail := add(headStart, 96)\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint256(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, exponent)\n    }\n    function abi_encode_tuple_t_stringliteral_6e5d7e8ec1c44b1be662d5a482625181074d9516baace42f35250edc17de17e6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 35)\n        mstore(add(headStart, 64), \"maxAmountToSwap exceed max slipp\")\n        mstore(add(headStart, 96), \"age\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_51fc4946c16284910827fc38bc7611d60d4dd1f7d8fefa0da6f8642035c3c48b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"INSUFFICIENT_BALANCE_BEFORE_SWAP\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        validator_revert_contract_IERC20(value)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IERC20(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_4eedef4370592e3a8bf461b38c88567ca40f914461890c03d6ba3dcb2fd5ff46__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"TO_AMOUNT_OFFSET_OUT_OF_RANGE\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_9bfa76b9c2e298d52f58639e051d7d21997f6c435f534dfd0c2e6c351c64a39a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 24)\n        mstore(add(headStart, 64), \"WRONG_BALANCE_AFTER_SWAP\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_74fc5696336325aeb54c5d19133ed01308c8174de21fc66f38ac28668f995bc7__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 28)\n        mstore(add(headStart, 64), \"INSUFFICIENT_AMOUNT_RECEIVED\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 54)\n        mstore(add(headStart, 64), \"SafeERC20: approve from non-zero\")\n        mstore(add(headStart, 96), \" to non-zero allowance\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x20) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x20)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        value := memPtr\n        mstore(memPtr, mload(headStart))\n    }\n    function abi_decode_uint128_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint40_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint16_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 480) { revert(0, 0) }\n        let value := allocate_memory_3199()\n        mstore(value, abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, dataEnd))\n        mstore(add(value, 32), abi_decode_uint128_fromMemory(add(headStart, 32)))\n        mstore(add(value, 64), abi_decode_uint128_fromMemory(add(headStart, 64)))\n        mstore(add(value, 96), abi_decode_uint128_fromMemory(add(headStart, 96)))\n        mstore(add(value, 128), abi_decode_uint128_fromMemory(add(headStart, 128)))\n        mstore(add(value, 160), abi_decode_uint128_fromMemory(add(headStart, 160)))\n        mstore(add(value, 192), abi_decode_uint40_fromMemory(add(headStart, 192)))\n        mstore(add(value, 224), abi_decode_uint16_fromMemory(add(headStart, 224)))\n        let _1 := 256\n        mstore(add(value, _1), abi_decode_address_fromMemory(add(headStart, _1)))\n        let _2 := 288\n        mstore(add(value, _2), abi_decode_address_fromMemory(add(headStart, _2)))\n        let _3 := 320\n        mstore(add(value, _3), abi_decode_address_fromMemory(add(headStart, _3)))\n        let _4 := 352\n        mstore(add(value, _4), abi_decode_address_fromMemory(add(headStart, _4)))\n        let _5 := 384\n        mstore(add(value, _5), abi_decode_uint128_fromMemory(add(headStart, _5)))\n        let _6 := 416\n        mstore(add(value, _6), abi_decode_uint128_fromMemory(add(headStart, _6)))\n        let _7 := 448\n        mstore(add(value, _7), abi_decode_uint128_fromMemory(add(headStart, _7)))\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xff))\n        mstore(add(headStart, 160), value5)\n        mstore(add(headStart, 192), value6)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_85a045c7862eb0e81d59fe8dfd2ed8c824917ce215328caf39199676e5939f87__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 27)\n        mstore(add(headStart, 64), \"UNEXPECTED_AMOUNT_WITHDRAWN\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_uint8_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_uint8(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_fc5915f8715e0da4bd5e6487e67e57e89850a48fc18d4e921a811a8c928ad119__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 26)\n        mstore(add(headStart, 64), \"TOO_MANY_DECIMALS_ON_TOKEN\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n        mstore(add(headStart, 96), \"ot succeed\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"GPv2: failed transferFrom\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n        mstore(add(headStart, 96), \"r call\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"3442":[{"length":32,"start":231}],"3446":[{"length":32,"start":475},{"length":32,"start":1041},{"length":32,"start":1489},{"length":32,"start":1555},{"length":32,"start":1681},{"length":32,"start":1802},{"length":32,"start":1868},{"length":32,"start":1994},{"length":32,"start":3103},{"length":32,"start":3169},{"length":32,"start":3297},{"length":32,"start":3461},{"length":32,"start":3504},{"length":32,"start":7083},{"length":32,"start":7514}],"29025":[{"length":32,"start":370},{"length":32,"start":8026}],"29279":[{"length":32,"start":409},{"length":32,"start":4196}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100c85760003560e01c80633a829867116100815780637535d2461161005b5780637535d246146101d65780638da5cb5b146101fd578063f2fde38b1461021b57600080fd5b80633a829867146101945780634db9dc97146101bb578063715018a6146101ce57600080fd5b80631b11d0ff116100b25780631b11d0ff1461013357806332e4b2861461015657806338013f021461016d57600080fd5b8062ae3bf8146100cd5780630542975c146100e2575b600080fd5b6100e06100db36600461244a565b61022e565b005b6101097f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101466101413660046124b0565b610385565b604051901515815260200161012a565b61015f610bb881565b60405190815260200161012a565b6101097f000000000000000000000000000000000000000000000000000000000000000081565b6101097f000000000000000000000000000000000000000000000000000000000000000081565b6100e06101c936600461252c565b6104bc565b6100e0610849565b6101097f000000000000000000000000000000000000000000000000000000000000000081565b60005473ffffffffffffffffffffffffffffffffffffffff16610109565b6100e061022936600461244a565b610939565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6103826102d660005473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610340573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061036491906125f5565b73ffffffffffffffffffffffffffffffffffffffff84169190610aea565b50565b6000600260015414156103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102ab565b60026001553373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f43414c4c45525f4d5553545f42455f504f4f4c0000000000000000000000000060448201526064016102ab565b8584886104a986868a858588610bc3565b5050600180805598975050505050505050565b60026001541415610529576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102ab565b600260015561053b8886868933610e07565b955061055789338961055236869003860186612740565b610fda565b600061059f8585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92508e91508d90508c611000565b905060006105ad828a61278b565b905080156106ee576105f773ffffffffffffffffffffffffffffffffffffffff8c167f00000000000000000000000000000000000000000000000000000000000000006000611846565b61063873ffffffffffffffffffffffffffffffffffffffff8c167f000000000000000000000000000000000000000000000000000000000000000083611846565b6040517fe8eda9df00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015260248201839052336044830152600060648301527f0000000000000000000000000000000000000000000000000000000000000000169063e8eda9df90608401600060405180830381600087803b1580156106d557600080fd5b505af11580156106e9573d6000803e3d6000fd5b505050505b61073073ffffffffffffffffffffffffffffffffffffffff8b167f00000000000000000000000000000000000000000000000000000000000000006000611846565b61077173ffffffffffffffffffffffffffffffffffffffff8b167f00000000000000000000000000000000000000000000000000000000000000008a611846565b6040517f573ade8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152602482018a9052604482018990523360648301527f0000000000000000000000000000000000000000000000000000000000000000169063573ade81906084016020604051808303816000875af1158015610813573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083791906125f5565b50506001805550505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102ab565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102ab565b73ffffffffffffffffffffffffffffffffffffffff8116610a5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102ab565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1610b4d573d6000803e3d6000fd5b50610b5784611a04565b610bbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e73666572000000000000000000000060448201526064016102ab565b50505050565b60008080808080610bd68b8d018d6127e8565b955095509550955095509550610bef868486888d610e07565b94506000610c0185848b8a8c8b611000565b9050610c4573ffffffffffffffffffffffffffffffffffffffff88167f00000000000000000000000000000000000000000000000000000000000000006000611846565b610c8673ffffffffffffffffffffffffffffffffffffffff88167f000000000000000000000000000000000000000000000000000000000000000088611846565b6040517f573ade8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015260248201889052604482018690528b811660648301527f0000000000000000000000000000000000000000000000000000000000000000169063573ade81906084016020604051808303816000875af1158015610d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4e91906125f5565b506000610d5b828d611ad0565b9050610d698a8c8386610fda565b610dab73ffffffffffffffffffffffffffffffffffffffff8b167f00000000000000000000000000000000000000000000000000000000000000006000611846565b610df77f0000000000000000000000000000000000000000000000000000000000000000610dd98b8f611ad0565b73ffffffffffffffffffffffffffffffffffffffff8d169190611846565b5050505050505050505050505050565b600080610e1387611ae6565b905060006001876002811115610e2b57610e2b6128a9565b6002811115610e3c57610e3c6128a9565b14610e4c57816101400151610e53565b8161012001515b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529192506000918316906370a0823190602401602060405180830381865afa158015610ec5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee991906125f5565b90508615610f635785811115610f5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f494e53554646494349454e545f414d4f554e545f544f5f52455041590000000060448201526064016102ab565b809550610fcd565b80861115610fcd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f494e56414c49445f444542545f52455041595f414d4f554e540000000000000060448201526064016102ab565b5093979650505050505050565b6000610fe585611ae6565b61010001519050610ff98582868686611c17565b5050505050565b6000806000878060200190518101906110199190612904565b6040517ffb04e17b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529294509092507f00000000000000000000000000000000000000000000000000000000000000009091169063fb04e17b90602401602060405180830381865afa1580156110ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d19190612992565b611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f494e56414c49445f41554755535455530000000000000000000000000000000060448201526064016102ab565b600061114288611e30565b60ff169050600061115288611e30565b60ff16905060006111628a611f12565b9050600061116f8a611f12565b905060006111c7611184612710610bb8611ad0565b6111c161119c61119588600a612ad4565b8790611fc7565b6111bb6111b46111ad8b600a612ad4565b8890611fc7565b8e90611fc7565b90611ff1565b90612004565b9050808a1115611259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f6d6178416d6f756e74546f5377617020657863656564206d617820736c69707060448201527f616765000000000000000000000000000000000000000000000000000000000060648201526084016102ab565b50506040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000935073ffffffffffffffffffffffffffffffffffffffff8b1692506370a082319150602401602060405180830381865afa1580156112cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ef91906125f5565b90508581101561135b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f494e53554646494349454e545f42414c414e43455f4245464f52455f5357415060448201526064016102ab565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8916906370a0823190602401602060405180830381865afa1580156113c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ec91906125f5565b905060008373ffffffffffffffffffffffffffffffffffffffff1663d2c4b5986040518163ffffffff1660e01b8152600401602060405180830381865afa15801561143b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145f9190612af0565b905061148373ffffffffffffffffffffffffffffffffffffffff8b16826000611846565b6114a473ffffffffffffffffffffffffffffffffffffffff8b16828a611846565b8b156115365760048c101580156114c7575084516114c3906020612047565b8c11155b61152d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f544f5f414d4f554e545f4f46465345545f4f55545f4f465f52414e474500000060448201526064016102ab565b8660208d018601525b60008473ffffffffffffffffffffffffffffffffffffffff168660405161155d9190612b0d565b6000604051808303816000865af19150503d806000811461159a576040519150601f19603f3d011682016040523d82523d6000602084013e61159f565b606091505b50509050806115b2573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8d16906370a0823190602401602060405180830381865afa15801561161f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164391906125f5565b905061164f818661278b565b9750898811156116bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f57524f4e475f42414c414e43455f41465445525f53574150000000000000000060448201526064016102ab565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009061175890869073ffffffffffffffffffffffffffffffffffffffff8f16906370a0823190602401602060405180830381865afa15801561172e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175291906125f5565b90612047565b9050898110156117c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f494e53554646494349454e545f414d4f554e545f52454345495645440000000060448201526064016102ab565b8b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167fbf77fd13a39d14dc0da779342c14105c38d9a5d0c60f2caa22f5fd1d5525416d8b8460405161182c929190918252602082015260400190565b60405180910390a350505050505050509695505050505050565b8015806118e657506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156118c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e491906125f5565b155b611972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016102ab565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b3000000000000000000000000000000000000000000000000000000001790526119ff908490612057565b505050565b6000611a44565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d8015611a835760208114611abd57611a7e7f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f611a0b565b611aca565b823b611ab457611ab47f475076323a206e6f74206120636f6e74726163740000000000000000000000006014611a0b565b60019150611aca565b3d6000803e600051151591505b50919050565b80820182811015611ae057600080fd5b92915050565b604080516102008101825260006101e08201818152825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c08101919091526040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa158015611bf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae09190612bb2565b602081015115611ce457805160208201516040808401516060850151608086015192517fd505accf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301523060248301526044820196909652606481019490945260ff909116608484015260a483015260c48201529085169063d505accf9060e401600060405180830381600087803b158015611ccb57600080fd5b505af1158015611cdf573d6000803e3d6000fd5b505050505b611d0673ffffffffffffffffffffffffffffffffffffffff8516843085612163565b6040517f69328dec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820184905230604483015283917f0000000000000000000000000000000000000000000000000000000000000000909116906369328dec906064016020604051808303816000875af1158015611da5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc991906125f5565b14610ff9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f554e45585045435445445f414d4f554e545f57495448445241574e000000000060448201526064016102ab565b6000808273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea29190612cd5565b9050604d8160ff161115611ae0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f544f4f5f4d414e595f444543494d414c535f4f4e5f544f4b454e00000000000060448201526064016102ab565b6040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063b3596f0790602401602060405180830381865afa158015611fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae091906125f5565b6000821580611fe857505081810281838281611fe557611fe5612cf2565b04145b611ae057600080fd5b6000611ffd8284612d21565b9392505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec778390048411151761203957600080fd5b506127109102611388010490565b80820382811115611ae057600080fd5b60006120b9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661223e9092919063ffffffff16565b8051909150156119ff57808060200190518101906120d79190612992565b6119ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016102ab565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af16121ce573d6000803e3d6000fd5b506121d885611a04565b610ff9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d0000000000000060448201526064016102ab565b606061224d8484600085612255565b949350505050565b6060824710156122e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016102ab565b843b61234f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102ab565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516123789190612b0d565b60006040518083038185875af1925050503d80600081146123b5576040519150601f19603f3d011682016040523d82523d6000602084013e6123ba565b606091505b50915091506123ca8282866123d5565b979650505050505050565b606083156123e4575081611ffd565b8251156123f45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ab9190612d5c565b73ffffffffffffffffffffffffffffffffffffffff8116811461038257600080fd5b60006020828403121561245c57600080fd5b8135611ffd81612428565b60008083601f84011261247957600080fd5b50813567ffffffffffffffff81111561249157600080fd5b6020830191508360208285010111156124a957600080fd5b9250929050565b60008060008060008060a087890312156124c957600080fd5b86356124d481612428565b9550602087013594506040870135935060608701356124f281612428565b9250608087013567ffffffffffffffff81111561250e57600080fd5b61251a89828a01612467565b979a9699509497509295939492505050565b6000806000806000806000806000898b0361018081121561254c57600080fd5b8a3561255781612428565b995060208b013561256781612428565b985060408b0135975060608b0135965060808b0135955060a08b0135945060c08b013567ffffffffffffffff81111561259f57600080fd5b6125ab8d828e01612467565b90955093505060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20820112156125e157600080fd5b5060e08a0190509295985092959850929598565b60006020828403121561260757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff811182821017156126615761266161260e565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156126ae576126ae61260e565b604052919050565b60ff8116811461038257600080fd5b600060a082840312156126d757600080fd5b60405160a0810181811067ffffffffffffffff821117156126fa576126fa61260e565b80604052508091508235815260208301356020820152604083013561271e816126b6565b8060408301525060608301356060820152608083013560808201525092915050565b600060a0828403121561275257600080fd5b611ffd83836126c5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561279d5761279d61275c565b500390565b600067ffffffffffffffff8211156127bc576127bc61260e565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600080600080610140878903121561280257600080fd5b863561280d81612428565b9550602087013594506040870135935060608701359250608087013567ffffffffffffffff81111561283e57600080fd5b8701601f8101891361284f57600080fd5b803561286261285d826127a2565b612667565b8181528a602083850101111561287757600080fd5b8160208401602083013760006020838301015280945050505061289d8860a089016126c5565b90509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60005b838110156128f35781810151838201526020016128db565b83811115610bbd5750506000910152565b6000806040838503121561291757600080fd5b825167ffffffffffffffff81111561292e57600080fd5b8301601f8101851361293f57600080fd5b805161294d61285d826127a2565b81815286602083850101111561296257600080fd5b6129738260208301602086016128d8565b809450505050602083015161298781612428565b809150509250929050565b6000602082840312156129a457600080fd5b81518015158114611ffd57600080fd5b600181815b80851115612a0d57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156129f3576129f361275c565b80851615612a0057918102915b93841c93908002906129b9565b509250929050565b600082612a2457506001611ae0565b81612a3157506000611ae0565b8160018114612a475760028114612a5157612a6d565b6001915050611ae0565b60ff841115612a6257612a6261275c565b50506001821b611ae0565b5060208310610133831016604e8410600b8410161715612a90575081810a611ae0565b612a9a83836129b4565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612acc57612acc61275c565b029392505050565b6000611ffd8383612a15565b8051612aeb81612428565b919050565b600060208284031215612b0257600080fd5b8151611ffd81612428565b60008251612b1f8184602087016128d8565b9190910192915050565b600060208284031215612b3b57600080fd5b6040516020810181811067ffffffffffffffff82111715612b5e57612b5e61260e565b6040529151825250919050565b80516fffffffffffffffffffffffffffffffff81168114612aeb57600080fd5b805164ffffffffff81168114612aeb57600080fd5b805161ffff81168114612aeb57600080fd5b60006101e08284031215612bc557600080fd5b612bcd61263d565b612bd78484612b29565b8152612be560208401612b6b565b6020820152612bf660408401612b6b565b6040820152612c0760608401612b6b565b6060820152612c1860808401612b6b565b6080820152612c2960a08401612b6b565b60a0820152612c3a60c08401612b8b565b60c0820152612c4b60e08401612ba0565b60e0820152610100612c5e818501612ae0565b90820152610120612c70848201612ae0565b90820152610140612c82848201612ae0565b90820152610160612c94848201612ae0565b90820152610180612ca6848201612b6b565b908201526101a0612cb8848201612b6b565b908201526101c0612cca848201612b6b565b908201529392505050565b600060208284031215612ce757600080fd5b8151611ffd816126b6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612d57577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6020815260008251806020840152612d7b8160408501602087016128d8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220677af4e44727fcdd95a1a0f6e9a16eba45ec182b71bcd51bcbec667f4e58d13764736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC8 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3A829867 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0x7535D246 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x1D6 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3A829867 EQ PUSH2 0x194 JUMPI DUP1 PUSH4 0x4DB9DC97 EQ PUSH2 0x1BB JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1B11D0FF GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x1B11D0FF EQ PUSH2 0x133 JUMPI DUP1 PUSH4 0x32E4B286 EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0x38013F02 EQ PUSH2 0x16D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH3 0xAE3BF8 EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0x542975C EQ PUSH2 0xE2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE0 PUSH2 0xDB CALLDATASIZE PUSH1 0x4 PUSH2 0x244A JUMP JUMPDEST PUSH2 0x22E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x109 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x146 PUSH2 0x141 CALLDATASIZE PUSH1 0x4 PUSH2 0x24B0 JUMP JUMPDEST PUSH2 0x385 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12A JUMP JUMPDEST PUSH2 0x15F PUSH2 0xBB8 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12A JUMP JUMPDEST PUSH2 0x109 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x109 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0xE0 PUSH2 0x1C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x252C JUMP JUMPDEST PUSH2 0x4BC JUMP JUMPDEST PUSH2 0xE0 PUSH2 0x849 JUMP JUMPDEST PUSH2 0x109 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x109 JUMP JUMPDEST PUSH2 0xE0 PUSH2 0x229 CALLDATASIZE PUSH1 0x4 PUSH2 0x244A JUMP JUMPDEST PUSH2 0x939 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x2B4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x382 PUSH2 0x2D6 PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x340 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x364 SWAP2 SWAP1 PUSH2 0x25F5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP2 SWAP1 PUSH2 0xAEA JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 PUSH1 0x1 SLOAD EQ ISZERO PUSH2 0x3F4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x2 PUSH1 0x1 SSTORE CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x498 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43414C4C45525F4D5553545F42455F504F4F4C00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST DUP6 DUP5 DUP9 PUSH2 0x4A9 DUP7 DUP7 DUP11 DUP6 DUP6 DUP9 PUSH2 0xBC3 JUMP JUMPDEST POP POP PUSH1 0x1 DUP1 DUP1 SSTORE SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x1 SLOAD EQ ISZERO PUSH2 0x529 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x2 PUSH1 0x1 SSTORE PUSH2 0x53B DUP9 DUP7 DUP7 DUP10 CALLER PUSH2 0xE07 JUMP JUMPDEST SWAP6 POP PUSH2 0x557 DUP10 CALLER DUP10 PUSH2 0x552 CALLDATASIZE DUP7 SWAP1 SUB DUP7 ADD DUP7 PUSH2 0x2740 JUMP JUMPDEST PUSH2 0xFDA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x59F DUP6 DUP6 DUP6 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 DUP16 SWAP3 POP DUP15 SWAP2 POP DUP14 SWAP1 POP DUP13 PUSH2 0x1000 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x5AD DUP3 DUP11 PUSH2 0x278B JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x6EE JUMPI PUSH2 0x5F7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND PUSH32 0x0 PUSH1 0x0 PUSH2 0x1846 JUMP JUMPDEST PUSH2 0x638 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND PUSH32 0x0 DUP4 PUSH2 0x1846 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE8EDA9DF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE CALLER PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x64 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xE8EDA9DF SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x6E9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0x730 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND PUSH32 0x0 PUSH1 0x0 PUSH2 0x1846 JUMP JUMPDEST PUSH2 0x771 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND PUSH32 0x0 DUP11 PUSH2 0x1846 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x573ADE8100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP11 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD DUP10 SWAP1 MSTORE CALLER PUSH1 0x64 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x573ADE81 SWAP1 PUSH1 0x84 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x813 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x837 SWAP2 SWAP1 PUSH2 0x25F5 JUMP JUMPDEST POP POP PUSH1 0x1 DUP1 SSTORE POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x8CA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x9BA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xA5D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0xB4D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0xB57 DUP5 PUSH2 0x1A04 JUMP JUMPDEST PUSH2 0xBBD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0xBD6 DUP12 DUP14 ADD DUP14 PUSH2 0x27E8 JUMP JUMPDEST SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP SWAP6 POP PUSH2 0xBEF DUP7 DUP5 DUP7 DUP9 DUP14 PUSH2 0xE07 JUMP JUMPDEST SWAP5 POP PUSH1 0x0 PUSH2 0xC01 DUP6 DUP5 DUP12 DUP11 DUP13 DUP12 PUSH2 0x1000 JUMP JUMPDEST SWAP1 POP PUSH2 0xC45 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH32 0x0 PUSH1 0x0 PUSH2 0x1846 JUMP JUMPDEST PUSH2 0xC86 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH32 0x0 DUP9 PUSH2 0x1846 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x573ADE8100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP9 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD DUP7 SWAP1 MSTORE DUP12 DUP2 AND PUSH1 0x64 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x573ADE81 SWAP1 PUSH1 0x84 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD2A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD4E SWAP2 SWAP1 PUSH2 0x25F5 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xD5B DUP3 DUP14 PUSH2 0x1AD0 JUMP JUMPDEST SWAP1 POP PUSH2 0xD69 DUP11 DUP13 DUP4 DUP7 PUSH2 0xFDA JUMP JUMPDEST PUSH2 0xDAB PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND PUSH32 0x0 PUSH1 0x0 PUSH2 0x1846 JUMP JUMPDEST PUSH2 0xDF7 PUSH32 0x0 PUSH2 0xDD9 DUP12 DUP16 PUSH2 0x1AD0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND SWAP2 SWAP1 PUSH2 0x1846 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xE13 DUP8 PUSH2 0x1AE6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP8 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xE2B JUMPI PUSH2 0xE2B PUSH2 0x28A9 JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0xE3C JUMPI PUSH2 0xE3C PUSH2 0x28A9 JUMP JUMPDEST EQ PUSH2 0xE4C JUMPI DUP2 PUSH2 0x140 ADD MLOAD PUSH2 0xE53 JUMP JUMPDEST DUP2 PUSH2 0x120 ADD MLOAD JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEC5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xEE9 SWAP2 SWAP1 PUSH2 0x25F5 JUMP JUMPDEST SWAP1 POP DUP7 ISZERO PUSH2 0xF63 JUMPI DUP6 DUP2 GT ISZERO PUSH2 0xF5B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F414D4F554E545F544F5F524550415900000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST DUP1 SWAP6 POP PUSH2 0xFCD JUMP JUMPDEST DUP1 DUP7 GT ISZERO PUSH2 0xFCD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F444542545F52455041595F414D4F554E5400000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST POP SWAP4 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFE5 DUP6 PUSH2 0x1AE6 JUMP JUMPDEST PUSH2 0x100 ADD MLOAD SWAP1 POP PUSH2 0xFF9 DUP6 DUP3 DUP7 DUP7 DUP7 PUSH2 0x1C17 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP8 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1019 SWAP2 SWAP1 PUSH2 0x2904 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFB04E17B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP3 SWAP5 POP SWAP1 SWAP3 POP PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xFB04E17B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10AD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10D1 SWAP2 SWAP1 PUSH2 0x2992 JUMP JUMPDEST PUSH2 0x1137 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F415547555354555300000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1142 DUP9 PUSH2 0x1E30 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH1 0x0 PUSH2 0x1152 DUP9 PUSH2 0x1E30 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH1 0x0 PUSH2 0x1162 DUP11 PUSH2 0x1F12 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x116F DUP11 PUSH2 0x1F12 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x11C7 PUSH2 0x1184 PUSH2 0x2710 PUSH2 0xBB8 PUSH2 0x1AD0 JUMP JUMPDEST PUSH2 0x11C1 PUSH2 0x119C PUSH2 0x1195 DUP9 PUSH1 0xA PUSH2 0x2AD4 JUMP JUMPDEST DUP8 SWAP1 PUSH2 0x1FC7 JUMP JUMPDEST PUSH2 0x11BB PUSH2 0x11B4 PUSH2 0x11AD DUP12 PUSH1 0xA PUSH2 0x2AD4 JUMP JUMPDEST DUP9 SWAP1 PUSH2 0x1FC7 JUMP JUMPDEST DUP15 SWAP1 PUSH2 0x1FC7 JUMP JUMPDEST SWAP1 PUSH2 0x1FF1 JUMP JUMPDEST SWAP1 PUSH2 0x2004 JUMP JUMPDEST SWAP1 POP DUP1 DUP11 GT ISZERO PUSH2 0x1259 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6D6178416D6F756E74546F5377617020657863656564206D617820736C697070 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6167650000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB JUMP JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP3 POP PUSH4 0x70A08231 SWAP2 POP PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12EF SWAP2 SWAP1 PUSH2 0x25F5 JUMP JUMPDEST SWAP1 POP DUP6 DUP2 LT ISZERO PUSH2 0x135B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F42414C414E43455F4245464F52455F53574150 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13C8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13EC SWAP2 SWAP1 PUSH2 0x25F5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD2C4B598 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x143B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x145F SWAP2 SWAP1 PUSH2 0x2AF0 JUMP JUMPDEST SWAP1 POP PUSH2 0x1483 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND DUP3 PUSH1 0x0 PUSH2 0x1846 JUMP JUMPDEST PUSH2 0x14A4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND DUP3 DUP11 PUSH2 0x1846 JUMP JUMPDEST DUP12 ISZERO PUSH2 0x1536 JUMPI PUSH1 0x4 DUP13 LT ISZERO DUP1 ISZERO PUSH2 0x14C7 JUMPI POP DUP5 MLOAD PUSH2 0x14C3 SWAP1 PUSH1 0x20 PUSH2 0x2047 JUMP JUMPDEST DUP13 GT ISZERO JUMPDEST PUSH2 0x152D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x544F5F414D4F554E545F4F46465345545F4F55545F4F465F52414E4745000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST DUP7 PUSH1 0x20 DUP14 ADD DUP7 ADD MSTORE JUMPDEST PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH1 0x40 MLOAD PUSH2 0x155D SWAP2 SWAP1 PUSH2 0x2B0D 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 0x159A 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 0x159F JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x15B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x161F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1643 SWAP2 SWAP1 PUSH2 0x25F5 JUMP JUMPDEST SWAP1 POP PUSH2 0x164F DUP2 DUP7 PUSH2 0x278B JUMP JUMPDEST SWAP8 POP DUP10 DUP9 GT ISZERO PUSH2 0x16BB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x57524F4E475F42414C414E43455F41465445525F535741500000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH2 0x1758 SWAP1 DUP7 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x172E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1752 SWAP2 SWAP1 PUSH2 0x25F5 JUMP JUMPDEST SWAP1 PUSH2 0x2047 JUMP JUMPDEST SWAP1 POP DUP10 DUP2 LT ISZERO PUSH2 0x17C4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F414D4F554E545F524543454956454400000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xBF77FD13A39D14DC0DA779342C14105C38D9A5D0C60F2CAA22F5FD1D5525416D DUP12 DUP5 PUSH1 0x40 MLOAD PUSH2 0x182C SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x18E6 JUMPI POP PUSH1 0x40 MLOAD PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18C0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18E4 SWAP2 SWAP1 PUSH2 0x25F5 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x1972 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x20746F206E6F6E2D7A65726F20616C6C6F77616E636500000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB 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 0x95EA7B300000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE PUSH2 0x19FF SWAP1 DUP5 SWAP1 PUSH2 0x2057 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A44 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x1A83 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x1ABD JUMPI PUSH2 0x1A7E PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x1A0B JUMP JUMPDEST PUSH2 0x1ACA JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x1AB4 JUMPI PUSH2 0x1AB4 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x1A0B JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x1ACA JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x1AE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x200 DUP2 ADD DUP3 MSTORE PUSH1 0x0 PUSH2 0x1E0 DUP3 ADD DUP2 DUP2 MSTORE DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1A0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BF3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1AE0 SWAP2 SWAP1 PUSH2 0x2BB2 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD ISZERO PUSH2 0x1CE4 JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP1 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x80 DUP7 ADD MLOAD SWAP3 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x64 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0xFF SWAP1 SWAP2 AND PUSH1 0x84 DUP5 ADD MSTORE PUSH1 0xA4 DUP4 ADD MSTORE PUSH1 0xC4 DUP3 ADD MSTORE SWAP1 DUP6 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1CCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1CDF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0x1D06 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 ADDRESS DUP6 PUSH2 0x2163 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x69328DEC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP5 SWAP1 MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE DUP4 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x69328DEC SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1DA5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DC9 SWAP2 SWAP1 PUSH2 0x25F5 JUMP JUMPDEST EQ PUSH2 0xFF9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x554E45585045435445445F414D4F554E545F57495448445241574E0000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1E7E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1EA2 SWAP2 SWAP1 PUSH2 0x2CD5 JUMP JUMPDEST SWAP1 POP PUSH1 0x4D DUP2 PUSH1 0xFF AND GT ISZERO PUSH2 0x1AE0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x544F4F5F4D414E595F444543494D414C535F4F4E5F544F4B454E000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1FA3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1AE0 SWAP2 SWAP1 PUSH2 0x25F5 JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 PUSH2 0x1FE8 JUMPI POP POP DUP2 DUP2 MUL DUP2 DUP4 DUP3 DUP2 PUSH2 0x1FE5 JUMPI PUSH2 0x1FE5 PUSH2 0x2CF2 JUMP JUMPDEST DIV EQ JUMPDEST PUSH2 0x1AE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1FFD DUP3 DUP5 PUSH2 0x2D21 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x2039 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0x1AE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x20B9 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x223E SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x19FF JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x20D7 SWAP2 SWAP1 PUSH2 0x2992 JUMP JUMPDEST PUSH2 0x19FF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F74207375636365656400000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x21CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x21D8 DUP6 PUSH2 0x1A04 JUMP JUMPDEST PUSH2 0xFF9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x60 PUSH2 0x224D DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x2255 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x22E7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x722063616C6C0000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB JUMP JUMPDEST DUP5 EXTCODESIZE PUSH2 0x234F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x2378 SWAP2 SWAP1 PUSH2 0x2B0D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x23B5 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 0x23BA JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x23CA DUP3 DUP3 DUP7 PUSH2 0x23D5 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x23E4 JUMPI POP DUP2 PUSH2 0x1FFD JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x23F4 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2AB SWAP2 SWAP1 PUSH2 0x2D5C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x245C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1FFD DUP2 PUSH2 0x2428 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2479 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2491 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x24A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x24C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x24D4 DUP2 PUSH2 0x2428 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0x24F2 DUP2 PUSH2 0x2428 JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x250E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x251A DUP10 DUP3 DUP11 ADD PUSH2 0x2467 JUMP JUMPDEST SWAP8 SWAP11 SWAP7 SWAP10 POP SWAP5 SWAP8 POP SWAP3 SWAP6 SWAP4 SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP10 DUP12 SUB PUSH2 0x180 DUP2 SLT ISZERO PUSH2 0x254C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP11 CALLDATALOAD PUSH2 0x2557 DUP2 PUSH2 0x2428 JUMP JUMPDEST SWAP10 POP PUSH1 0x20 DUP12 ADD CALLDATALOAD PUSH2 0x2567 DUP2 PUSH2 0x2428 JUMP JUMPDEST SWAP9 POP PUSH1 0x40 DUP12 ADD CALLDATALOAD SWAP8 POP PUSH1 0x60 DUP12 ADD CALLDATALOAD SWAP7 POP PUSH1 0x80 DUP12 ADD CALLDATALOAD SWAP6 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 DUP12 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x259F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x25AB DUP14 DUP3 DUP15 ADD PUSH2 0x2467 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP POP PUSH1 0xA0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 DUP3 ADD SLT ISZERO PUSH2 0x25E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xE0 DUP11 ADD SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2607 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2661 JUMPI PUSH2 0x2661 PUSH2 0x260E JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x26AE JUMPI PUSH2 0x26AE PUSH2 0x260E JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x26D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x26FA JUMPI PUSH2 0x26FA PUSH2 0x260E JUMP JUMPDEST DUP1 PUSH1 0x40 MSTORE POP DUP1 SWAP2 POP DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD PUSH2 0x271E DUP2 PUSH2 0x26B6 JUMP JUMPDEST DUP1 PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2752 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1FFD DUP4 DUP4 PUSH2 0x26C5 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x279D JUMPI PUSH2 0x279D PUSH2 0x275C JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x27BC JUMPI PUSH2 0x27BC PUSH2 0x260E JUMP JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x140 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x2802 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x280D DUP2 PUSH2 0x2428 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x283E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 ADD PUSH1 0x1F DUP2 ADD DUP10 SGT PUSH2 0x284F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x2862 PUSH2 0x285D DUP3 PUSH2 0x27A2 JUMP JUMPDEST PUSH2 0x2667 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP11 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x2877 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP4 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP PUSH2 0x289D DUP9 PUSH1 0xA0 DUP10 ADD PUSH2 0x26C5 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x28F3 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x28DB JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xBBD JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2917 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x292E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD PUSH1 0x1F DUP2 ADD DUP6 SGT PUSH2 0x293F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x294D PUSH2 0x285D DUP3 PUSH2 0x27A2 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP7 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x2962 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2973 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x28D8 JUMP JUMPDEST DUP1 SWAP5 POP POP POP POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x2987 DUP2 PUSH2 0x2428 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x29A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1FFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x2A0D JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x29F3 JUMPI PUSH2 0x29F3 PUSH2 0x275C JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x2A00 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x29B9 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2A24 JUMPI POP PUSH1 0x1 PUSH2 0x1AE0 JUMP JUMPDEST DUP2 PUSH2 0x2A31 JUMPI POP PUSH1 0x0 PUSH2 0x1AE0 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x2A47 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x2A51 JUMPI PUSH2 0x2A6D JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x1AE0 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x2A62 JUMPI PUSH2 0x2A62 PUSH2 0x275C JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x1AE0 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x2A90 JUMPI POP DUP2 DUP2 EXP PUSH2 0x1AE0 JUMP JUMPDEST PUSH2 0x2A9A DUP4 DUP4 PUSH2 0x29B4 JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x2ACC JUMPI PUSH2 0x2ACC PUSH2 0x275C JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1FFD DUP4 DUP4 PUSH2 0x2A15 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2AEB DUP2 PUSH2 0x2428 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2B02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1FFD DUP2 PUSH2 0x2428 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x2B1F DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x28D8 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2B3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x2B5E JUMPI PUSH2 0x2B5E PUSH2 0x260E JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2AEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2AEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x2AEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2BC5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2BCD PUSH2 0x263D JUMP JUMPDEST PUSH2 0x2BD7 DUP5 DUP5 PUSH2 0x2B29 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x2BE5 PUSH1 0x20 DUP5 ADD PUSH2 0x2B6B JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2BF6 PUSH1 0x40 DUP5 ADD PUSH2 0x2B6B JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x2C07 PUSH1 0x60 DUP5 ADD PUSH2 0x2B6B JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x2C18 PUSH1 0x80 DUP5 ADD PUSH2 0x2B6B JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x2C29 PUSH1 0xA0 DUP5 ADD PUSH2 0x2B6B JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x2C3A PUSH1 0xC0 DUP5 ADD PUSH2 0x2B8B JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x2C4B PUSH1 0xE0 DUP5 ADD PUSH2 0x2BA0 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x2C5E DUP2 DUP6 ADD PUSH2 0x2AE0 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x2C70 DUP5 DUP3 ADD PUSH2 0x2AE0 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x2C82 DUP5 DUP3 ADD PUSH2 0x2AE0 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x2C94 DUP5 DUP3 ADD PUSH2 0x2AE0 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x2CA6 DUP5 DUP3 ADD PUSH2 0x2B6B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x2CB8 DUP5 DUP3 ADD PUSH2 0x2B6B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x2CCA DUP5 DUP3 ADD PUSH2 0x2B6B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2CE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1FFD DUP2 PUSH2 0x26B6 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2D57 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x2D7B DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x28D8 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH8 0x7AF4E44727FCDD95 LOG1 LOG0 0xF6 0xE9 LOG1 PUSH15 0xBA45EC182B71BCD51BCBEC667F4E58 0xD1 CALLDATACOPY PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"1192:7775:110:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4630:125:106;;;;;;:::i;:::-;;:::i;:::-;;489:67:25;;;;;;;;663:42:201;651:55;;;633:74;;621:2;606:18;489:67:25;;;;;;;;3126:503:110;;;;;;:::i;:::-;;:::i;:::-;;;2079:14:201;;2072:22;2054:41;;2042:2;2027:18;3126:503:110;1914:187:201;1570:51:106;;1617:4;1570:51;;;;;2252:25:201;;;2240:2;2225:18;1570:51:106;2106:177:201;1633:42:106;;;;;1071:60:107;;;;;4619:1543:110;;;;;;:::i;:::-;;:::i;1601:135:11:-;;;:::i;560:36:25:-;;;;;1018:71:11;1056:7;1078:6;;;1018:71;;1875:226;;;;;;:::i;:::-;;:::i;4630:125:106:-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;5004:2:201;1196:67:11;;;4986:21:201;;;5023:18;;;5016:30;5082:34;5062:18;;;5055:62;5134:18;;1196:67:11;;;;;;;;;4691:59:106::1;4710:7;1056::11::0;1078:6;;;;1018:71;4710:7:106::1;4719:30;::::0;;;;4743:4:::1;4719:30;::::0;::::1;633:74:201::0;4719:15:106::1;::::0;::::1;::::0;::::1;::::0;606:18:201;;4719:30:106::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4691:18;::::0;::::1;::::0;:59;:18:::1;:59::i;:::-;4630:125:::0;:::o;3126:503:110:-;3306:4;1657:1:114;2202:7;;:19;;2194:63;;;;;;;5554:2:201;2194:63:114;;;5536:21:201;5593:2;5573:18;;;5566:30;5632:33;5612:18;;;5605:61;5683:18;;2194:63:114;5352:355:201;2194:63:114;1657:1;2324:7;:18;3326:10:110::1;:27;3348:4;3326:27;;3318:59;;;::::0;::::1;::::0;;5914:2:201;3318:59:110::1;::::0;::::1;5896:21:201::0;5953:2;5933:18;;;5926:30;5992:21;5972:18;;;5965:49;6031:18;;3318:59:110::1;5712:343:201::0;3318:59:110::1;3411:6:::0;3448:9;3512:5;3525:81:::1;3539:6:::0;;3547:7;3448:9;3512:5;3411:6;3525:13:::1;:81::i;:::-;-1:-1:-1::0;;3620:4:110::1;2481:22:114::0;;;3620:4:110;3126:503;-1:-1:-1;;;;;;;;3126:503:110:o;4619:1543::-;1657:1:114;2202:7;;:19;;2194:63;;;;;;;5554:2:201;2194:63:114;;;5536:21:201;5593:2;5573:18;;;5566:30;5632:33;5612:18;;;5605:61;5683:18;;2194:63:114;5352:355:201;2194:63:114;1657:1;2324:7;:18;4954:129:110::1;4980:9:::0;4997:12;5017:19;5044:15;5067:10:::1;4954:18;:129::i;:::-;4936:147:::0;-1:-1:-1;5120:95:110::1;5151:15:::0;5169:10:::1;5181:16:::0;5120:95:::1;;::::0;;::::1;::::0;::::1;5199:15:::0;5120:95:::1;:::i;:::-;:22;:95::i;:::-;5265:18;5286:154;5308:19;5335:12;;5286:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;5355:15:110;;-1:-1:-1;5378:9:110;;-1:-1:-1;5395:16:110;;-1:-1:-1;5419:15:110;5286:14:::1;:154::i;:::-;5265:175:::0;-1:-1:-1;5447:29:110::1;5479;5265:175:::0;5479:16;:29:::1;:::i;:::-;5447:61:::0;-1:-1:-1;5590:25:110;;5586:264:::1;;5625:53;:35;::::0;::::1;5669:4;5676:1;5625:35;:53::i;:::-;5686:73;:35;::::0;::::1;5730:4;5737:21:::0;5686:35:::1;:73::i;:::-;5767:76;::::0;;;;:12:::1;8606:15:201::0;;;5767:76:110::1;::::0;::::1;8588:34:201::0;8638:18;;;8631:34;;;5829:10:110::1;8681:18:201::0;;;8674:43;5841:1:110::1;8733:18:201::0;;;8726:47;5767:4:110::1;:12;::::0;::::1;::::0;8499:19:201;;5767:76:110::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;5586:264;5964:47;:29;::::0;::::1;6002:4;6009:1;5964:29;:47::i;:::-;6017:61;:29;::::0;::::1;6055:4;6062:15:::0;6017:29:::1;:61::i;:::-;6084:73;::::0;;;;:10:::1;9094:15:201::0;;;6084:73:110::1;::::0;::::1;9076:34:201::0;9126:18;;;9119:34;;;9169:18;;;9162:34;;;6146:10:110::1;9212:18:201::0;;;9205:43;6084:4:110::1;:10;::::0;::::1;::::0;8987:19:201;;6084:73:110::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;1616:1:114;2481:22;;-1:-1:-1;;;;;;;;;;4619:1543:110:o;1601:135:11:-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;5004:2:201;1196:67:11;;;4986:21:201;;;5023:18;;;5016:30;5082:34;5062:18;;;5055:62;5134:18;;1196:67:11;4802:356:201;1196:67:11;1703:1:::1;1687:6:::0;;1666:40:::1;::::0;::::1;1687:6:::0;;::::1;::::0;1666:40:::1;::::0;1703:1;;1666:40:::1;1729:1;1712:19:::0;;;::::1;::::0;;1601:135::o;1875:226::-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;5004:2:201;1196:67:11;;;4986:21:201;;;5023:18;;;5016:30;5082:34;5062:18;;;5055:62;5134:18;;1196:67:11;4802:356:201;1196:67:11;1959:22:::1;::::0;::::1;1951:73;;;::::0;::::1;::::0;;9461:2:201;1951:73:11::1;::::0;::::1;9443:21:201::0;9500:2;9480:18;;;9473:30;9539:34;9519:18;;;9512:62;9610:8;9590:18;;;9583:36;9636:19;;1951:73:11::1;9259:402:201::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;::::1;::::0;;::::1;::::0;2056:6;::::1;::::0;2035:38:::1;::::0;::::1;2079:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1875:226::o;441:657:1:-;668:4;662:11;538:23;680:36;;;765:42;757:51;;753:1;730:25;;723:86;846:2;823:26;;816:41;;;538:23;519:16;;916:2;662:11;519:16;887:5;880;875:50;865:154;;958:16;955:1;952;937:38;994:16;991:1;984:27;865:154;;1039:28;1061:5;1039:21;:28::i;:::-;1031:62;;;;;;;9868:2:201;1031:62:1;;;9850:21:201;9907:2;9887:18;;;9880:30;9946:23;9926:18;;;9919:51;9987:18;;1031:62:1;9666:345:201;1031:62:1;513:585;441:657;;;:::o;6512:1616:110:-;6698:24;;;;;;6900:87;;;;6911:6;6900:87;:::i;:::-;6690:297;;;;;;;;;;;;7012:124;7038:9;7055:8;7071:19;7098:15;7121:9;7012:18;:124::i;:::-;6994:142;;7143:18;7164:154;7186:19;7213:12;7233:15;7256:9;7273:16;7297:15;7164:14;:154::i;:::-;7143:175;-1:-1:-1;7438:47:110;:29;;;7476:4;7483:1;7438:29;:47::i;:::-;7491:61;:29;;;7529:4;7536:15;7491:29;:61::i;:::-;7558:68;;;;;:10;9094:15:201;;;7558:68:110;;;9076:34:201;9126:18;;;9119:34;;;9169:18;;;9162:34;;;9232:15;;;9212:18;;;9205:43;7558:4:110;:10;;;;8987:19:201;;7558:68:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;7633:31:110;7667:23;:10;7682:7;7667:14;:23::i;:::-;7633:57;;7727:131;7765:15;7789:9;7806:23;7837:15;7727:22;:131::i;:::-;7983:53;:35;;;8027:4;8034:1;7983:35;:53::i;:::-;8042:81;8086:4;8093:29;:16;8114:7;8093:20;:29::i;:::-;8042:35;;;;:81;:35;:81::i;:::-;6684:1444;;;;;;;;6512:1616;;;;;;:::o;8132:833::-;8323:7;8338:44;8385:35;8409:9;8385:15;:35::i;:::-;8338:82;-1:-1:-1;8427:17:110;8487:33;8474:8;8447:36;;;;;;;;:::i;:::-;:73;;;;;;;;:::i;:::-;;:169;;8576:15;:40;;;8447:169;;;8529:15;:38;;;8447:169;8645:38;;;;;:27;651:55:201;;;8645:38:110;;;633:74:201;8427:189:110;;-1:-1:-1;8623:19:110;;8645:27;;;;;606:18:201;;8645:38:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8623:60;-1:-1:-1;8694:24:110;;8690:242;;8751:15;8736:11;:30;;8728:71;;;;;;;11838:2:201;8728:71:110;;;11820:21:201;11877:2;11857:18;;;11850:30;11916;11896:18;;;11889:58;11964:18;;8728:71:110;11636:352:201;8728:71:110;8825:11;8807:29;;8690:242;;;8884:11;8865:15;:30;;8857:68;;;;;;;12195:2:201;8857:68:110;;;12177:21:201;12234:2;12214:18;;;12207:30;12273:27;12253:18;;;12246:55;12318:18;;8857:68:110;11993:349:201;8857:68:110;-1:-1:-1;8945:15:110;;8132:833;-1:-1:-1;;;;;;;8132:833:110:o;2982:352:106:-;3136:30;3193:33;3217:7;3193:15;:33::i;:::-;:47;;;3136:110;;3252:77;3275:7;3284:13;3299:4;3305:6;3313:15;3252:22;:77::i;:::-;3130:204;2982:352;;;;:::o;2035:2923:107:-;2268:18;2295:24;2321:26;2369:12;2351:70;;;;;;;;;;;;:::i;:::-;2436:52;;;;;:33;651:55:201;;;2436:52:107;;;633:74:201;2294:127:107;;-1:-1:-1;2294:127:107;;-1:-1:-1;2436:17:107;:33;;;;;;606:18:201;;2436:52:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2428:81;;;;;;;13904:2:201;2428:81:107;;;13886:21:201;13943:2;13923:18;;;13916:30;13982:18;13962;;;13955:46;14018:18;;2428:81:107;13702:340:201;2428:81:107;2524:25;2552:29;2565:15;2552:12;:29::i;:::-;2524:57;;;;2589:23;2615:27;2628:13;2615:12;:27::i;:::-;2589:53;;;;2651:22;2676:35;2694:15;2676:9;:35::i;:::-;2651:60;;2719:20;2742:33;2760:13;2742:9;:33::i;:::-;2719:56;-1:-1:-1;2784:31:107;2818:207;2966:58;524:3:89;1617:4:106;2966:36:107;:58::i;:::-;2818:127;2903:41;2922:21;2928:15;2922:2;:21;:::i;:::-;2903:14;;:18;:41::i;:::-;2818:71;2847:41;2864:23;2870:17;2864:2;:23;:::i;:::-;2847:12;;:16;:41::i;:::-;2818:15;;:28;:71::i;:::-;:84;;:127::i;:::-;:147;;:207::i;:::-;2784:241;;3061:23;3042:15;:42;;3034:90;;;;;;;15743:2:201;3034:90:107;;;15725:21:201;15782:2;15762:18;;;15755:30;15821:34;15801:18;;;15794:62;15892:5;15872:18;;;15865:33;15915:19;;3034:90:107;15541:399:201;3034:90:107;-1:-1:-1;;3170:40:107;;;;;3204:4;3170:40;;;633:74:201;3137:30:107;;-1:-1:-1;3170:25:107;;;;-1:-1:-1;3170:25:107;;-1:-1:-1;606:18:201;;3170:40:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3137:73;;3250:15;3224:22;:41;;3216:86;;;;;;;16147:2:201;3216:86:107;;;16129:21:201;;;16166:18;;;16159:30;16225:34;16205:18;;;16198:62;16277:18;;3216:86:107;15945:356:201;3216:86:107;3339:38;;;;;3371:4;3339:38;;;633:74:201;3308:28:107;;3339:23;;;;;;606:18:201;;3339:38:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3308:69;;3384:26;3413:8;:30;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3384:61;-1:-1:-1;3451:50:107;:27;;;3384:61;3499:1;3451:27;:50::i;:::-;3507:64;:27;;;3535:18;3555:15;3507:27;:64::i;:::-;3582:19;;3578:657;;3805:1;3787:14;:19;;:67;;;;-1:-1:-1;3828:18:107;;:26;;3851:2;3828:22;:26::i;:::-;3810:14;:44;;3787:67;3770:133;;;;;;;16923:2:201;3770:133:107;;;16905:21:201;16962:2;16942:18;;;16935:30;17001:31;16981:18;;;16974:59;17050:18;;3770:133:107;16721:353:201;3770:133:107;4205:15;4199:2;4183:14;4179:23;4166:11;4162:41;4155:66;3578:657;4241:12;4267:8;4259:22;;4282:11;4259:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4240:54;;;4305:7;4300:167;;4400:16;4397:1;;4379:38;4436:16;4397:1;4426:27;4300:167;4505:40;;;;;4539:4;4505:40;;;633:74:201;4473:29:107;;4505:25;;;;;;606:18:201;;4505:40:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4473:72;-1:-1:-1;4564:46:107;4473:72;4564:22;:46;:::i;:::-;4551:59;;4638:15;4624:10;:29;;4616:66;;;;;;;17560:2:201;4616:66:107;;;17542:21:201;17599:2;17579:18;;;17572:30;17638:26;17618:18;;;17611:54;17682:18;;4616:66:107;17358:348:201;4616:66:107;4713:38;;;;;4745:4;4713:38;;;633:74:201;4688:22:107;;4713:64;;4756:20;;4713:23;;;;;;606:18:201;;4713:38:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;:64::i;:::-;4688:89;;4809:15;4791:14;:33;;4783:74;;;;;;;17913:2:201;4783:74:107;;;17895:21:201;17952:2;17932:18;;;17925:30;17991;17971:18;;;17964:58;18039:18;;4783:74:107;17711:352:201;4783:74:107;4910:13;4869:84;;4884:15;4869:84;;;4926:10;4938:14;4869:84;;;;;;18242:25:201;;;18298:2;18283:18;;18276:34;18230:2;18215:18;;18068:248;4869:84:107;;;;;;;;2288:2670;;;;;;;;2035:2923;;;;;;;;:::o;1315:535:13:-;1618:10;;;1617:62;;-1:-1:-1;1634:39:13;;;;;1658:4;1634:39;;;18556:34:201;1634:15:13;18626::201;;;18606:18;;;18599:43;1634:15:13;;;;;18468:18:201;;1634:39:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;1617:62;1602:147;;;;;;;18855:2:201;1602:147:13;;;18837:21:201;18894:2;18874:18;;;18867:30;18933:34;18913:18;;;18906:62;19004:24;18984:18;;;18977:52;19046:19;;1602:147:13;18653:418:201;1602:147:13;1782:62;;;19280:42:201;19268:55;;1782:62:13;;;19250:74:201;19340:18;;;;19333:34;;;1782:62:13;;;;;;;;;;19223:18:201;;;;1782:62:13;;;;;;;;;;1805:22;1782:62;;;1755:90;;1775:5;;1755:19;:90::i;:::-;1315:535;;;:::o;2198:2524:1:-;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;4611:1;4605:8;4598:16;4591:24;4580:35;;3538:1174;;2198:2524;;;:::o;410:129:14:-;516:5;;;511:16;;;;503:25;;;;;;410:129;;;;:::o;2841:137:106:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2947:26:106;;;;;:19;651:55:201;;;2947:26:106;;;633:74:201;2947:4:106;:19;;;;606:18:201;;2947:26:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3650:760::-;3919:24;;;;:29;3915:262;;4025:22;;4057:24;;;;4091:17;;;;;4118;;;;4145;;;;3958:212;;;;;:20;22395:15:201;;;3958:212:106;;;22377:34:201;4010:4:106;22427:18:201;;;22420:43;22479:18;;;22472:34;;;;22522:18;;;22515:34;;;;22598:4;22586:17;;;22565:19;;;22558:46;22620:19;;;22613:35;22664:19;;;22657:35;3958:20:106;;;;;;22288:19:201;;3958:212:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3915:262;4220:59;:30;;;4251:4;4265;4272:6;4220:30;:59::i;:::-;4318:45;;;;;:13;22984:15:201;;;4318:45:106;;;22966:34:201;23016:18;;;23009:34;;;4357:4:106;23059:18:201;;;23052:43;4367:6:106;;4318:4;:13;;;;;;22878:18:201;;4318:45:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;4310:95;;;;;;;23308:2:201;4310:95:106;;;23290:21:201;23347:2;23327:18;;;23320:30;23386:29;23366:18;;;23359:57;23433:18;;4310:95:106;23106:351:201;2491:250:106;2558:5;2571:14;2588:5;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2571:33;;2682:2;2670:8;:14;;;;2662:53;;;;;;;23916:2:201;2662:53:106;;;23898:21:201;23955:2;23935:18;;;23928:30;23994:28;23974:18;;;23967:56;24040:18;;2662:53:106;23714:350:201;2280:111:106;2359:27;;;;;:20;651:55:201;;;2359:27:106;;;633:74:201;2337:7:106;;2359:6;:20;;;;;;606:18:201;;2359:27:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1327:143:14:-;1385:9;1428:6;;;:30;;-1:-1:-1;;1443:5:14;;;1457:1;1452;1443:5;1452:1;1438:15;;;;:::i;:::-;;:20;1428:30;1420:39;;;;;1678:92;1736:9;1760:5;1764:1;1760;:5;:::i;:::-;1753:12;1678:92;-1:-1:-1;;;1678:92:14:o;1005:496:89:-;1083:14;1248:18;;1299:35;1295:52;;;1285:63;;1278:71;1234:125;1215:183;;1388:1;1385;1378:12;1215:183;-1:-1:-1;1473:17:89;1424:22;;1448;1420:51;1416:75;;1005:496::o;693:129:14:-;799:5;;;794:16;;;;786:25;;;;;2961:668:13;3364:23;3390:69;3418:4;3390:69;;;;;;;;;;;;;;;;;3398:5;3390:27;;;;:69;;;;;:::i;:::-;3469:17;;3364:95;;-1:-1:-1;3469:21:13;3465:160;;3552:10;3541:30;;;;;;;;;;;;:::i;:::-;3533:85;;;;;;;24739:2:201;3533:85:13;;;24721:21:201;24778:2;24758:18;;;24751:30;24817:34;24797:18;;;24790:62;24888:12;24868:18;;;24861:40;24918:19;;3533:85:13;24537:406:201;1228:780:1;1477:4;1471:11;1343:27;1489:36;;;1576:42;1566:53;;;1562:1;1539:25;;1532:88;1662:51;;1657:2;1634:26;;1627:87;1751:2;1728:26;;1721:41;;;1343:27;1324:16;;1821:3;1471:11;1324:16;1792:5;1785;1780:51;1770:155;;1864:16;1861:1;1858;1843:38;1900:16;1897:1;1890:27;1770:155;;1945:28;1967:5;1945:21;:28::i;:::-;1937:66;;;;;;;25150:2:201;1937:66:1;;;25132:21:201;25189:2;25169:18;;;25162:30;25228:27;25208:18;;;25201:55;25273:18;;1937:66:1;24948:349:201;3336:203:3;3455:12;3482:52;3504:6;3512:4;3518:1;3521:12;3482:21;:52::i;:::-;3475:59;3336:203;-1:-1:-1;;;;3336:203:3:o;4345:463::-;4492:12;4545:5;4520:21;:30;;4512:81;;;;;;;25504:2:201;4512:81:3;;;25486:21:201;25543:2;25523:18;;;25516:30;25582:34;25562:18;;;25555:62;25653:8;25633:18;;;25626:36;25679:19;;4512:81:3;25302:402:201;4512:81:3;1025:20;;4599:60;;;;;;;25911:2:201;4599:60:3;;;25893:21:201;25950:2;25930:18;;;25923:30;25989:31;25969:18;;;25962:59;26038:18;;4599:60:3;25709:353:201;4599:60:3;4667:12;4681:23;4708:6;:11;;4727:5;4734:4;4708:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4666:73;;;;4752:51;4769:7;4778:10;4790:12;4752:16;:51::i;:::-;4745:58;4345:463;-1:-1:-1;;;;;;;4345:463:3:o;6796:582::-;6928:12;6952:7;6948:426;;;-1:-1:-1;6976:10:3;6969:17;;6948:426;7071:17;;:21;7067:301;;7239:10;7233:17;7289:15;7276:10;7272:2;7268:19;7261:44;7067:301;7346:12;7339:20;;;;;;;;;;;:::i;14:162:201:-;108:42;101:5;97:54;90:5;87:65;77:93;;166:1;163;156:12;181:270;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;363:9;350:23;382:39;415:5;382:39;:::i;718:347::-;769:8;779:6;833:3;826:4;818:6;814:17;810:27;800:55;;851:1;848;841:12;800:55;-1:-1:-1;874:20:201;;917:18;906:30;;903:50;;;949:1;946;939:12;903:50;986:4;978:6;974:17;962:29;;1038:3;1031:4;1022:6;1014;1010:19;1006:30;1003:39;1000:59;;;1055:1;1052;1045:12;1000:59;718:347;;;;;:::o;1070:839::-;1176:6;1184;1192;1200;1208;1216;1269:3;1257:9;1248:7;1244:23;1240:33;1237:53;;;1286:1;1283;1276:12;1237:53;1325:9;1312:23;1344:39;1377:5;1344:39;:::i;:::-;1402:5;-1:-1:-1;1454:2:201;1439:18;;1426:32;;-1:-1:-1;1505:2:201;1490:18;;1477:32;;-1:-1:-1;1561:2:201;1546:18;;1533:32;1574:41;1533:32;1574:41;:::i;:::-;1634:7;-1:-1:-1;1692:3:201;1677:19;;1664:33;1720:18;1709:30;;1706:50;;;1752:1;1749;1742:12;1706:50;1791:58;1841:7;1832:6;1821:9;1817:22;1791:58;:::i;:::-;1070:839;;;;-1:-1:-1;1070:839:201;;-1:-1:-1;1070:839:201;;1868:8;;1070:839;-1:-1:-1;;;1070:839:201:o;2812:1249::-;3027:6;3035;3043;3051;3059;3067;3075;3083;3091;3135:9;3126:7;3122:23;3165:3;3161:2;3157:12;3154:32;;;3182:1;3179;3172:12;3154:32;3221:9;3208:23;3240:39;3273:5;3240:39;:::i;:::-;3298:5;-1:-1:-1;3355:2:201;3340:18;;3327:32;3368:41;3327:32;3368:41;:::i;:::-;3428:7;-1:-1:-1;3482:2:201;3467:18;;3454:32;;-1:-1:-1;3533:2:201;3518:18;;3505:32;;-1:-1:-1;3584:3:201;3569:19;;3556:33;;-1:-1:-1;3636:3:201;3621:19;;3608:33;;-1:-1:-1;3692:3:201;3677:19;;3664:33;3720:18;3709:30;;3706:50;;;3752:1;3749;3742:12;3706:50;3791:58;3841:7;3832:6;3821:9;3817:22;3791:58;:::i;:::-;3868:8;;-1:-1:-1;3765:84:201;-1:-1:-1;;3996:3:201;3927:66;3919:75;;3915:85;3912:105;;;4013:1;4010;4003:12;3912:105;;4051:3;4040:9;4036:19;4026:29;;2812:1249;;;;;;;;;;;:::o;5163:184::-;5233:6;5286:2;5274:9;5265:7;5261:23;5257:32;5254:52;;;5302:1;5299;5292:12;5254:52;-1:-1:-1;5325:16:201;;5163:184;-1:-1:-1;5163:184:201:o;6060:::-;6112:77;6109:1;6102:88;6209:4;6206:1;6199:15;6233:4;6230:1;6223:15;6249:252;6321:2;6315:9;6363:3;6351:16;;6397:18;6382:34;;6418:22;;;6379:62;6376:88;;;6444:18;;:::i;:::-;6480:2;6473:22;6249:252;:::o;6506:334::-;6577:2;6571:9;6633:2;6623:13;;6638:66;6619:86;6607:99;;6736:18;6721:34;;6757:22;;;6718:62;6715:88;;;6783:18;;:::i;:::-;6819:2;6812:22;6506:334;;-1:-1:-1;6506:334:201:o;6845:114::-;6929:4;6922:5;6918:16;6911:5;6908:27;6898:55;;6949:1;6946;6939:12;6964:751;7026:5;7074:4;7062:9;7057:3;7053:19;7049:30;7046:50;;;7092:1;7089;7082:12;7046:50;7125:2;7119:9;7167:4;7159:6;7155:17;7238:6;7226:10;7223:22;7202:18;7190:10;7187:34;7184:62;7181:88;;;7249:18;;:::i;:::-;7289:10;7285:2;7278:22;;7318:6;7309:15;;7361:9;7348:23;7340:6;7333:39;7433:2;7422:9;7418:18;7405:32;7400:2;7392:6;7388:15;7381:57;7490:2;7479:9;7475:18;7462:32;7503:31;7526:7;7503:31;:::i;:::-;7567:7;7562:2;7554:6;7550:15;7543:32;;7636:2;7625:9;7621:18;7608:32;7603:2;7595:6;7591:15;7584:57;7703:3;7692:9;7688:19;7675:33;7669:3;7661:6;7657:16;7650:59;;6964:751;;;;:::o;7720:245::-;7813:6;7866:3;7854:9;7845:7;7841:23;7837:33;7834:53;;;7883:1;7880;7873:12;7834:53;7906;7951:7;7940:9;7906:53;:::i;7970:184::-;8022:77;8019:1;8012:88;8119:4;8116:1;8109:15;8143:4;8140:1;8133:15;8159:125;8199:4;8227:1;8224;8221:8;8218:34;;;8232:18;;:::i;:::-;-1:-1:-1;8269:9:201;;8159:125::o;10016:245::-;10064:4;10097:18;10089:6;10086:30;10083:56;;;10119:18;;:::i;:::-;-1:-1:-1;10176:2:201;10164:15;10181:66;10160:88;10250:4;10156:99;;10016:245::o;10266:1176::-;10436:6;10444;10452;10460;10468;10476;10529:3;10517:9;10508:7;10504:23;10500:33;10497:53;;;10546:1;10543;10536:12;10497:53;10585:9;10572:23;10604:39;10637:5;10604:39;:::i;:::-;10662:5;-1:-1:-1;10714:2:201;10699:18;;10686:32;;-1:-1:-1;10765:2:201;10750:18;;10737:32;;-1:-1:-1;10816:2:201;10801:18;;10788:32;;-1:-1:-1;10871:3:201;10856:19;;10843:33;10899:18;10888:30;;10885:50;;;10931:1;10928;10921:12;10885:50;10954:22;;11007:4;10999:13;;10995:27;-1:-1:-1;10985:55:201;;11036:1;11033;11026:12;10985:55;11072:2;11059:16;11097:48;11113:31;11141:2;11113:31;:::i;:::-;11097:48;:::i;:::-;11168:2;11161:5;11154:17;11208:7;11203:2;11198;11194;11190:11;11186:20;11183:33;11180:53;;;11229:1;11226;11219:12;11180:53;11284:2;11279;11275;11271:11;11266:2;11259:5;11255:14;11242:45;11328:1;11323:2;11318;11311:5;11307:14;11303:23;11296:34;11349:5;11339:15;;;;;11373:63;11428:7;11422:3;11411:9;11407:19;11373:63;:::i;:::-;11363:73;;10266:1176;;;;;;;;:::o;11447:184::-;11499:77;11496:1;11489:88;11596:4;11593:1;11586:15;11620:4;11617:1;11610:15;12347:258;12419:1;12429:113;12443:6;12440:1;12437:13;12429:113;;;12519:11;;;12513:18;12500:11;;;12493:39;12465:2;12458:10;12429:113;;;12560:6;12557:1;12554:13;12551:48;;;-1:-1:-1;;12595:1:201;12577:16;;12570:27;12347:258::o;12610:805::-;12725:6;12733;12786:2;12774:9;12765:7;12761:23;12757:32;12754:52;;;12802:1;12799;12792:12;12754:52;12835:9;12829:16;12868:18;12860:6;12857:30;12854:50;;;12900:1;12897;12890:12;12854:50;12923:22;;12976:4;12968:13;;12964:27;-1:-1:-1;12954:55:201;;13005:1;13002;12995:12;12954:55;13034:2;13028:9;13059:48;13075:31;13103:2;13075:31;:::i;13059:48::-;13130:2;13123:5;13116:17;13172:7;13165:4;13160:2;13156;13152:11;13148:22;13145:35;13142:55;;;13193:1;13190;13183:12;13142:55;13206:58;13261:2;13254:4;13247:5;13243:16;13236:4;13232:2;13228:13;13206:58;:::i;:::-;13283:5;13273:15;;;;;13331:4;13320:9;13316:20;13310:27;13346:39;13379:5;13346:39;:::i;:::-;13404:5;13394:15;;;12610:805;;;;;:::o;13420:277::-;13487:6;13540:2;13528:9;13519:7;13515:23;13511:32;13508:52;;;13556:1;13553;13546:12;13508:52;13588:9;13582:16;13641:5;13634:13;13627:21;13620:5;13617:32;13607:60;;13663:1;13660;13653:12;14047:482;14136:1;14179:5;14136:1;14193:330;14214:7;14204:8;14201:21;14193:330;;;14333:4;14265:66;14261:77;14255:4;14252:87;14249:113;;;14342:18;;:::i;:::-;14392:7;14382:8;14378:22;14375:55;;;14412:16;;;;14375:55;14491:22;;;;14451:15;;;;14193:330;;;14197:3;14047:482;;;;;:::o;14534:866::-;14583:5;14613:8;14603:80;;-1:-1:-1;14654:1:201;14668:5;;14603:80;14702:4;14692:76;;-1:-1:-1;14739:1:201;14753:5;;14692:76;14784:4;14802:1;14797:59;;;;14870:1;14865:130;;;;14777:218;;14797:59;14827:1;14818:10;;14841:5;;;14865:130;14902:3;14892:8;14889:17;14886:43;;;14909:18;;:::i;:::-;-1:-1:-1;;14965:1:201;14951:16;;14980:5;;14777:218;;15079:2;15069:8;15066:16;15060:3;15054:4;15051:13;15047:36;15041:2;15031:8;15028:16;15023:2;15017:4;15014:12;15010:35;15007:77;15004:159;;;-1:-1:-1;15116:19:201;;;15148:5;;15004:159;15195:34;15220:8;15214:4;15195:34;:::i;:::-;15325:6;15257:66;15253:79;15244:7;15241:92;15238:118;;;15336:18;;:::i;:::-;15374:20;;14534:866;-1:-1:-1;;;14534:866:201:o;15405:131::-;15465:5;15494:36;15521:8;15515:4;15494:36;:::i;16306:146::-;16385:13;;16407:39;16385:13;16407:39;:::i;:::-;16306:146;;;:::o;16457:259::-;16527:6;16580:2;16568:9;16559:7;16555:23;16551:32;16548:52;;;16596:1;16593;16586:12;16548:52;16628:9;16622:16;16647:39;16680:5;16647:39;:::i;17079:274::-;17208:3;17246:6;17240:13;17262:53;17308:6;17303:3;17296:4;17288:6;17284:17;17262:53;:::i;:::-;17331:16;;;;;17079:274;-1:-1:-1;;17079:274:201:o;19378:426::-;19459:5;19507:4;19495:9;19490:3;19486:19;19482:30;19479:50;;;19525:1;19522;19515:12;19479:50;19558:2;19552:9;19600:4;19592:6;19588:17;19671:6;19659:10;19656:22;19635:18;19623:10;19620:34;19617:62;19614:88;;;19682:18;;:::i;:::-;19718:2;19711:22;19781:16;;19766:32;;-1:-1:-1;19751:6:201;19378:426;-1:-1:-1;19378:426:201:o;19809:192::-;19888:13;;19941:34;19930:46;;19920:57;;19910:85;;19991:1;19988;19981:12;20006:169;20084:13;;20137:12;20126:24;;20116:35;;20106:63;;20165:1;20162;20155:12;20180:163;20258:13;;20311:6;20300:18;;20290:29;;20280:57;;20333:1;20330;20323:12;20348:1652;20448:6;20501:3;20489:9;20480:7;20476:23;20472:33;20469:53;;;20518:1;20515;20508:12;20469:53;20544:22;;:::i;:::-;20589:72;20653:7;20642:9;20589:72;:::i;:::-;20582:5;20575:87;20694:49;20739:2;20728:9;20724:18;20694:49;:::i;:::-;20689:2;20682:5;20678:14;20671:73;20776:49;20821:2;20810:9;20806:18;20776:49;:::i;:::-;20771:2;20764:5;20760:14;20753:73;20858:49;20903:2;20892:9;20888:18;20858:49;:::i;:::-;20853:2;20846:5;20842:14;20835:73;20941:50;20986:3;20975:9;20971:19;20941:50;:::i;:::-;20935:3;20928:5;20924:15;20917:75;21025:50;21070:3;21059:9;21055:19;21025:50;:::i;:::-;21019:3;21012:5;21008:15;21001:75;21109:49;21153:3;21142:9;21138:19;21109:49;:::i;:::-;21103:3;21096:5;21092:15;21085:74;21192:49;21236:3;21225:9;21221:19;21192:49;:::i;:::-;21186:3;21179:5;21175:15;21168:74;21261:3;21296:49;21341:2;21330:9;21326:18;21296:49;:::i;:::-;21280:14;;;21273:73;21365:3;21400:49;21430:18;;;21400:49;:::i;:::-;21384:14;;;21377:73;21469:3;21504:49;21534:18;;;21504:49;:::i;:::-;21488:14;;;21481:73;21573:3;21608:49;21638:18;;;21608:49;:::i;:::-;21592:14;;;21585:73;21677:3;21712:49;21742:18;;;21712:49;:::i;:::-;21696:14;;;21689:73;21781:3;21816:49;21846:18;;;21816:49;:::i;:::-;21800:14;;;21793:73;21885:3;21920:49;21950:18;;;21920:49;:::i;:::-;21904:14;;;21897:73;21908:5;20348:1652;-1:-1:-1;;;20348:1652:201:o;23462:247::-;23530:6;23583:2;23571:9;23562:7;23558:23;23554:32;23551:52;;;23599:1;23596;23589:12;23551:52;23631:9;23625:16;23650:29;23673:5;23650:29;:::i;24069:184::-;24121:77;24118:1;24111:88;24218:4;24215:1;24208:15;24242:4;24239:1;24232:15;24258:274;24298:1;24324;24314:189;;24359:77;24356:1;24349:88;24460:4;24457:1;24450:15;24488:4;24485:1;24478:15;24314:189;-1:-1:-1;24517:9:201;;24258:274::o;26067:442::-;26216:2;26205:9;26198:21;26179:4;26248:6;26242:13;26291:6;26286:2;26275:9;26271:18;26264:34;26307:66;26366:6;26361:2;26350:9;26346:18;26341:2;26333:6;26329:15;26307:66;:::i;:::-;26425:2;26413:15;26430:66;26409:88;26394:104;;;;26500:2;26390:113;;26067:442;-1:-1:-1;;26067:442:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"2349400","executionCost":"infinite","totalCost":"infinite"},"external":{"ADDRESSES_PROVIDER()":"infinite","AUGUSTUS_REGISTRY()":"infinite","MAX_SLIPPAGE_PERCENT()":"240","ORACLE()":"infinite","POOL()":"infinite","executeOperation(address,uint256,uint256,address,bytes)":"infinite","owner()":"2340","renounceOwnership()":"30193","rescueTokens(address)":"infinite","swapAndRepay(address,address,uint256,uint256,uint256,uint256,bytes,(uint256,uint256,uint8,bytes32,bytes32))":"infinite","transferOwnership(address)":"30385"},"internal":{"_swapAndRepay(bytes calldata,uint256,address,contract IERC20Detailed,uint256)":"infinite","getDebtRepayAmount(contract IERC20Detailed,uint256,uint256,uint256,address)":"infinite"}},"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","AUGUSTUS_REGISTRY()":"3a829867","MAX_SLIPPAGE_PERCENT()":"32e4b286","ORACLE()":"38013f02","POOL()":"7535d246","executeOperation(address,uint256,uint256,address,bytes)":"1b11d0ff","owner()":"8da5cb5b","renounceOwnership()":"715018a6","rescueTokens(address)":"00ae3bf8","swapAndRepay(address,address,uint256,uint256,uint256,uint256,bytes,(uint256,uint256,uint8,bytes32,bytes32))":"4db9dc97","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"addressesProvider\",\"type\":\"address\"},{\"internalType\":\"contract IParaSwapAugustusRegistry\",\"name\":\"augustusRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAsset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"receivedAmount\",\"type\":\"uint256\"}],\"name\":\"Bought\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAsset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fromAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"receivedAmount\",\"type\":\"uint256\"}],\"name\":\"Swapped\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AUGUSTUS_REGISTRY\",\"outputs\":[{\"internalType\":\"contract IParaSwapAugustusRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_SLIPPAGE_PERCENT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ORACLE\",\"outputs\":[{\"internalType\":\"contract IPriceOracleGetter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"premium\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"initiator\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"params\",\"type\":\"bytes\"}],\"name\":\"executeOperation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"rescueTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Detailed\",\"name\":\"collateralAsset\",\"type\":\"address\"},{\"internalType\":\"contract IERC20Detailed\",\"name\":\"debtAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"collateralAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"debtRepayAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"debtRateMode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyAllBalanceOffset\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"paraswapData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"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\"}],\"internalType\":\"struct BaseParaSwapAdapter.PermitSignature\",\"name\":\"permitSignature\",\"type\":\"tuple\"}],\"name\":\"swapAndRepay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave*\",\"kind\":\"dev\",\"methods\":{\"executeOperation(address,uint256,uint256,address,bytes)\":{\"details\":\"Uses the received funds from the flash loan to repay a debt on the protocol on behalf of the user. Then pulls the collateral from the user and swaps it to the debt asset to repay the flash loan. The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset, swap it and repay the flash loan. Supports only one asset on the flash loan.\",\"params\":{\"amount\":\"The amount of the flash-borrowed asset\",\"asset\":\"The address of the flash-borrowed asset\",\"initiator\":\"The address of the flashloan initiator\",\"params\":\"The byte-encoded params passed when initiating the flashloan\",\"premium\":\"The fee of the flash-borrowed asset\"},\"returns\":{\"_0\":\"True if the execution of the operation succeeds, false otherwise   IERC20Detailed debtAsset Address of the debt asset   uint256 debtAmount Amount of debt to be repaid   uint256 rateMode Rate modes of the debt to be repaid   uint256 deadline Deadline for the permit signature   uint256 debtRateMode Rate mode of the debt to be repaid   bytes paraswapData Paraswap Data                    * bytes buyCallData Call data for augustus                    * IParaSwapAugustus augustus Address of Augustus Swapper   PermitSignature permitParams Struct containing the permit signatures, set to all zeroes if not used\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"rescueTokens(address)\":{\"details\":\"Emergency rescue for token stucked on this contract, as failsafe mechanism - Funds should never remain in this contract more time than during transactions - Only callable by the owner\"},\"swapAndRepay(address,address,uint256,uint256,uint256,uint256,bytes,(uint256,uint256,uint8,bytes32,bytes32))\":{\"details\":\"Swaps the user collateral for the debt asset and then repay the debt on the protocol on behalf of the user without using flash loans. This method can be used when the temporary transfer of the collateral asset to this contract does not affect the user position. The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset\",\"params\":{\"buyAllBalanceOffset\":\"Set to offset of toAmount in Augustus calldata if wanting to pay entire debt, otherwise 0\",\"collateralAmount\":\"max Amount of the collateral to be swapped\",\"collateralAsset\":\"Address of asset to be swapped\",\"debtAsset\":\"Address of debt asset\",\"debtRateMode\":\"Rate mode of the debt to be repaid\",\"debtRepayAmount\":\"Amount of the debt to be repaid, or maximum amount when repaying entire debt\",\"paraswapData\":\"Data for Paraswap Adapter\",\"permitSignature\":\"struct containing the permit signature\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"ParaSwapRepayAdapter\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"ParaSwap Adapter to perform a repay of a debt with collateral.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/adapters/paraswap/ParaSwapRepayAdapter.sol\":\"ParaSwapRepayAdapter\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable is Context {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial owner.\\n   */\\n  constructor() {\\n    address msgSender = _msgSender();\\n    _owner = msgSender;\\n    emit OwnershipTransferred(address(0), msgSender);\\n  }\\n\\n  /**\\n   * @dev Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Leaves the contract without owner. It will not be possible to call\\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\\n   *\\n   * NOTE: Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public virtual onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = address(0);\\n  }\\n\\n  /**\\n   * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function transferOwnership(address newOwner) public virtual onlyOwner {\\n    require(newOwner != address(0), 'Ownable: new owner is the zero address');\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\",\"keccak256\":\"0x3ce185c4f579e32006f8893dbfdc1b5d878c0e2cafd1508f7ceb081698bc81f9\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport './IERC20.sol';\\nimport './Address.sol';\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n  using Address for address;\\n\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n  }\\n\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    _callOptionalReturn(\\n      token,\\n      abi.encodeWithSelector(token.transferFrom.selector, from, to, value)\\n    );\\n  }\\n\\n  /**\\n   * @dev Deprecated. This function has issues similar to the ones found in\\n   * {IERC20-approve}, and its usage is discouraged.\\n   *\\n   * Whenever possible, use {safeIncreaseAllowance} and\\n   * {safeDecreaseAllowance} instead.\\n   */\\n  function safeApprove(IERC20 token, address spender, uint256 value) internal {\\n    // safeApprove should only be called when setting an initial allowance,\\n    // or when resetting it to zero. To increase and decrease it, use\\n    // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n    require(\\n      (value == 0) || (token.allowance(address(this), spender) == 0),\\n      'SafeERC20: approve from non-zero to non-zero allowance'\\n    );\\n    _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n  }\\n\\n  function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n    uint256 newAllowance = token.allowance(address(this), spender) + value;\\n    _callOptionalReturn(\\n      token,\\n      abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\\n    );\\n  }\\n\\n  function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n    unchecked {\\n      uint256 oldAllowance = token.allowance(address(this), spender);\\n      require(oldAllowance >= value, 'SafeERC20: decreased allowance below zero');\\n      uint256 newAllowance = oldAllowance - value;\\n      _callOptionalReturn(\\n        token,\\n        abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n   * on the return value: the return value is optional (but if data is returned, it must not be false).\\n   * @param token The token targeted by the call.\\n   * @param data The call data (encoded using abi.encode or one of its variants).\\n   */\\n  function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n    // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n    // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n    // the target address contains contract code and also asserts for success in the low-level call.\\n\\n    bytes memory returndata = address(token).functionCall(data, 'SafeERC20: low-level call failed');\\n    if (returndata.length > 0) {\\n      // Return data is optional\\n      require(abi.decode(returndata, (bool)), 'SafeERC20: ERC20 operation did not succeed');\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x9ada5448c24f34f934122c0e11d1a89bf9a31b7ade0dcb935bd7dcb339ef7f32\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/// @title Optimized overflow and underflow safe math operations\\n/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\\nlibrary SafeMath {\\n  /// @notice Returns x + y, reverts if sum overflows uint256\\n  /// @param x The augend\\n  /// @param y The addend\\n  /// @return z The sum of x and y\\n  function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x + y) >= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @param message The error msg\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y, string memory message) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x, message);\\n    }\\n  }\\n\\n  /// @notice Returns x * y, reverts if overflows\\n  /// @param x The multiplicand\\n  /// @param y The multiplier\\n  /// @return z The product of x and y\\n  function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require(x == 0 || (z = x * y) / x == y);\\n    }\\n  }\\n\\n  /// @notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\\n  /// @param x The numerator\\n  /// @param y The denominator\\n  /// @return z The product of x and y\\n  function div(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    return x / y;\\n  }\\n}\\n\",\"keccak256\":\"0xf1c5d8ba70a5fc3e20dbbc2aa2a2278d2535a57bc1e9abf1228ebc3068a045f0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IFlashLoanSimpleReceiver} from '../interfaces/IFlashLoanSimpleReceiver.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title FlashLoanSimpleReceiverBase\\n * @author Aave\\n * @notice Base contract to develop a flashloan-receiver contract.\\n */\\nabstract contract FlashLoanSimpleReceiverBase is IFlashLoanSimpleReceiver {\\n  IPoolAddressesProvider public immutable override ADDRESSES_PROVIDER;\\n  IPool public immutable override POOL;\\n\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n    POOL = IPool(provider.getPool());\\n  }\\n}\\n\",\"keccak256\":\"0x3a04fc046c4f04c71ff230eba56e56bb718be41e4317f0c938bd287d81e384b1\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanSimpleReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanSimpleReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed asset\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param asset The address of the flash-borrowed asset\\n   * @param amount The amount of the flash-borrowed asset\\n   * @param premium The fee of the flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0xba50a7834ddfdca3e3cfac09043f72699be42ff88925641ac30950a434b2b2ff\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/adapters/paraswap/BaseParaSwapAdapter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {DataTypes} from '@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol';\\nimport {FlashLoanSimpleReceiverBase} from '@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol';\\nimport {GPv2SafeERC20} from '@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {IERC20WithPermit} from '@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol';\\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\\nimport {IPriceOracleGetter} from '@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol';\\nimport {SafeMath} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol';\\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\\n\\n/**\\n * @title BaseParaSwapAdapter\\n * @notice Utility functions for adapters using ParaSwap\\n * @author Jason Raymond Bell\\n */\\nabstract contract BaseParaSwapAdapter is FlashLoanSimpleReceiverBase, Ownable {\\n  using SafeMath for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using GPv2SafeERC20 for IERC20Detailed;\\n  using GPv2SafeERC20 for IERC20WithPermit;\\n\\n  struct PermitSignature {\\n    uint256 amount;\\n    uint256 deadline;\\n    uint8 v;\\n    bytes32 r;\\n    bytes32 s;\\n  }\\n\\n  // Max slippage percent allowed\\n  uint256 public constant MAX_SLIPPAGE_PERCENT = 3000; // 30%\\n\\n  IPriceOracleGetter public immutable ORACLE;\\n\\n  event Swapped(\\n    address indexed fromAsset,\\n    address indexed toAsset,\\n    uint256 fromAmount,\\n    uint256 receivedAmount\\n  );\\n  event Bought(\\n    address indexed fromAsset,\\n    address indexed toAsset,\\n    uint256 amountSold,\\n    uint256 receivedAmount\\n  );\\n\\n  constructor(\\n    IPoolAddressesProvider addressesProvider\\n  ) FlashLoanSimpleReceiverBase(addressesProvider) {\\n    ORACLE = IPriceOracleGetter(addressesProvider.getPriceOracle());\\n  }\\n\\n  /**\\n   * @dev Get the price of the asset from the oracle denominated in eth\\n   * @param asset address\\n   * @return eth price for the asset\\n   */\\n  function _getPrice(address asset) internal view returns (uint256) {\\n    return ORACLE.getAssetPrice(asset);\\n  }\\n\\n  /**\\n   * @dev Get the decimals of an asset\\n   * @return number of decimals of the asset\\n   */\\n  function _getDecimals(IERC20Detailed asset) internal view returns (uint8) {\\n    uint8 decimals = asset.decimals();\\n    // Ensure 10**decimals won't overflow a uint256\\n    require(decimals <= 77, 'TOO_MANY_DECIMALS_ON_TOKEN');\\n    return decimals;\\n  }\\n\\n  /**\\n   * @dev Get the aToken associated to the asset\\n   * @return address of the aToken\\n   */\\n  function _getReserveData(address asset) internal view returns (DataTypes.ReserveData memory) {\\n    return POOL.getReserveData(asset);\\n  }\\n\\n  function _pullATokenAndWithdraw(\\n    address reserve,\\n    address user,\\n    uint256 amount,\\n    PermitSignature memory permitSignature\\n  ) internal {\\n    IERC20WithPermit reserveAToken = IERC20WithPermit(\\n      _getReserveData(address(reserve)).aTokenAddress\\n    );\\n    _pullATokenAndWithdraw(reserve, reserveAToken, user, amount, permitSignature);\\n  }\\n\\n  /**\\n   * @dev Pull the ATokens from the user\\n   * @param reserve address of the asset\\n   * @param reserveAToken address of the aToken of the reserve\\n   * @param user address\\n   * @param amount of tokens to be transferred to the contract\\n   * @param permitSignature struct containing the permit signature\\n   */\\n  function _pullATokenAndWithdraw(\\n    address reserve,\\n    IERC20WithPermit reserveAToken,\\n    address user,\\n    uint256 amount,\\n    PermitSignature memory permitSignature\\n  ) internal {\\n    // If deadline is set to zero, assume there is no signature for permit\\n    if (permitSignature.deadline != 0) {\\n      reserveAToken.permit(\\n        user,\\n        address(this),\\n        permitSignature.amount,\\n        permitSignature.deadline,\\n        permitSignature.v,\\n        permitSignature.r,\\n        permitSignature.s\\n      );\\n    }\\n\\n    // transfer from user to adapter\\n    reserveAToken.safeTransferFrom(user, address(this), amount);\\n\\n    // withdraw reserve\\n    require(POOL.withdraw(reserve, amount, address(this)) == amount, 'UNEXPECTED_AMOUNT_WITHDRAWN');\\n  }\\n\\n  /**\\n   * @dev Emergency rescue for token stucked on this contract, as failsafe mechanism\\n   * - Funds should never remain in this contract more time than during transactions\\n   * - Only callable by the owner\\n   */\\n  function rescueTokens(IERC20 token) external onlyOwner {\\n    token.safeTransfer(owner(), token.balanceOf(address(this)));\\n  }\\n}\\n\",\"keccak256\":\"0xcd12294fd39d7cc5879af5570f55b6bb65200dfeb44c85d16225591127c58491\",\"license\":\"AGPL-3.0\"},\"contracts/adapters/paraswap/BaseParaSwapBuyAdapter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {SafeERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol';\\nimport {SafeMath} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol';\\nimport {PercentageMath} from '@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol';\\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {IParaSwapAugustus} from './interfaces/IParaSwapAugustus.sol';\\nimport {IParaSwapAugustusRegistry} from './interfaces/IParaSwapAugustusRegistry.sol';\\nimport {BaseParaSwapAdapter} from './BaseParaSwapAdapter.sol';\\n\\n/**\\n * @title BaseParaSwapBuyAdapter\\n * @notice Implements the logic for buying tokens on ParaSwap\\n */\\nabstract contract BaseParaSwapBuyAdapter is BaseParaSwapAdapter {\\n  using PercentageMath for uint256;\\n  using SafeMath for uint256;\\n  using SafeERC20 for IERC20Detailed;\\n\\n  IParaSwapAugustusRegistry public immutable AUGUSTUS_REGISTRY;\\n\\n  constructor(\\n    IPoolAddressesProvider addressesProvider,\\n    IParaSwapAugustusRegistry augustusRegistry\\n  ) BaseParaSwapAdapter(addressesProvider) {\\n    // Do something on Augustus registry to check the right contract was passed\\n    require(!augustusRegistry.isValidAugustus(address(0)), 'Not a valid Augustus address');\\n    AUGUSTUS_REGISTRY = augustusRegistry;\\n  }\\n\\n  /**\\n   * @dev Swaps a token for another using ParaSwap\\n   * @param toAmountOffset Offset of toAmount in Augustus calldata if it should be overwritten, otherwise 0\\n   * @param paraswapData Data for Paraswap Adapter\\n   * @param assetToSwapFrom Address of the asset to be swapped from\\n   * @param assetToSwapTo Address of the asset to be swapped to\\n   * @param maxAmountToSwap Max amount to be swapped\\n   * @param amountToReceive Amount to be received from the swap\\n   * @return amountSold The amount sold during the swap\\n   */\\n  function _buyOnParaSwap(\\n    uint256 toAmountOffset,\\n    bytes memory paraswapData,\\n    IERC20Detailed assetToSwapFrom,\\n    IERC20Detailed assetToSwapTo,\\n    uint256 maxAmountToSwap,\\n    uint256 amountToReceive\\n  ) internal returns (uint256 amountSold) {\\n    (bytes memory buyCalldata, IParaSwapAugustus augustus) = abi.decode(\\n      paraswapData,\\n      (bytes, IParaSwapAugustus)\\n    );\\n\\n    require(AUGUSTUS_REGISTRY.isValidAugustus(address(augustus)), 'INVALID_AUGUSTUS');\\n\\n    {\\n      uint256 fromAssetDecimals = _getDecimals(assetToSwapFrom);\\n      uint256 toAssetDecimals = _getDecimals(assetToSwapTo);\\n\\n      uint256 fromAssetPrice = _getPrice(address(assetToSwapFrom));\\n      uint256 toAssetPrice = _getPrice(address(assetToSwapTo));\\n\\n      uint256 expectedMaxAmountToSwap = amountToReceive\\n        .mul(toAssetPrice.mul(10 ** fromAssetDecimals))\\n        .div(fromAssetPrice.mul(10 ** toAssetDecimals))\\n        .percentMul(PercentageMath.PERCENTAGE_FACTOR.add(MAX_SLIPPAGE_PERCENT));\\n\\n      require(maxAmountToSwap <= expectedMaxAmountToSwap, 'maxAmountToSwap exceed max slippage');\\n    }\\n\\n    uint256 balanceBeforeAssetFrom = assetToSwapFrom.balanceOf(address(this));\\n    require(balanceBeforeAssetFrom >= maxAmountToSwap, 'INSUFFICIENT_BALANCE_BEFORE_SWAP');\\n    uint256 balanceBeforeAssetTo = assetToSwapTo.balanceOf(address(this));\\n\\n    address tokenTransferProxy = augustus.getTokenTransferProxy();\\n    assetToSwapFrom.safeApprove(tokenTransferProxy, 0);\\n    assetToSwapFrom.safeApprove(tokenTransferProxy, maxAmountToSwap);\\n\\n    if (toAmountOffset != 0) {\\n      // Ensure 256 bit (32 bytes) toAmountOffset value is within bounds of the\\n      // calldata, not overlapping with the first 4 bytes (function selector).\\n      require(\\n        toAmountOffset >= 4 && toAmountOffset <= buyCalldata.length.sub(32),\\n        'TO_AMOUNT_OFFSET_OUT_OF_RANGE'\\n      );\\n      // Overwrite the toAmount with the correct amount for the buy.\\n      // In memory, buyCalldata consists of a 256 bit length field, followed by\\n      // the actual bytes data, that is why 32 is added to the byte offset.\\n      assembly {\\n        mstore(add(buyCalldata, add(toAmountOffset, 32)), amountToReceive)\\n      }\\n    }\\n    (bool success, ) = address(augustus).call(buyCalldata);\\n    if (!success) {\\n      // Copy revert reason from call\\n      assembly {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    uint256 balanceAfterAssetFrom = assetToSwapFrom.balanceOf(address(this));\\n    amountSold = balanceBeforeAssetFrom - balanceAfterAssetFrom;\\n    require(amountSold <= maxAmountToSwap, 'WRONG_BALANCE_AFTER_SWAP');\\n    uint256 amountReceived = assetToSwapTo.balanceOf(address(this)).sub(balanceBeforeAssetTo);\\n    require(amountReceived >= amountToReceive, 'INSUFFICIENT_AMOUNT_RECEIVED');\\n\\n    emit Bought(address(assetToSwapFrom), address(assetToSwapTo), amountSold, amountReceived);\\n  }\\n}\\n\",\"keccak256\":\"0xe008aba472373c4ed645d6da5506b410d8b93d083da042288562656f1f69d8ca\",\"license\":\"AGPL-3.0\"},\"contracts/adapters/paraswap/ParaSwapRepayAdapter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {DataTypes} from '@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol';\\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20WithPermit} from '@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol';\\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\\nimport {SafeERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol';\\nimport {SafeMath} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol';\\nimport {BaseParaSwapBuyAdapter} from './BaseParaSwapBuyAdapter.sol';\\nimport {IParaSwapAugustusRegistry} from './interfaces/IParaSwapAugustusRegistry.sol';\\nimport {IParaSwapAugustus} from './interfaces/IParaSwapAugustus.sol';\\nimport {ReentrancyGuard} from '../../dependencies/openzeppelin/ReentrancyGuard.sol';\\n\\n/**\\n * @title ParaSwapRepayAdapter\\n * @notice ParaSwap Adapter to perform a repay of a debt with collateral.\\n * @author Aave\\n **/\\ncontract ParaSwapRepayAdapter is BaseParaSwapBuyAdapter, ReentrancyGuard {\\n  using SafeMath for uint256;\\n  using SafeERC20 for IERC20;\\n\\n  struct RepayParams {\\n    address collateralAsset;\\n    uint256 collateralAmount;\\n    uint256 rateMode;\\n    PermitSignature permitSignature;\\n    bool useEthPath;\\n  }\\n\\n  constructor(\\n    IPoolAddressesProvider addressesProvider,\\n    IParaSwapAugustusRegistry augustusRegistry,\\n    address owner\\n  ) BaseParaSwapBuyAdapter(addressesProvider, augustusRegistry) {\\n    transferOwnership(owner);\\n  }\\n\\n  /**\\n   * @dev Uses the received funds from the flash loan to repay a debt on the protocol on behalf of the user. Then pulls\\n   * the collateral from the user and swaps it to the debt asset to repay the flash loan.\\n   * The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset, swap it\\n   * and repay the flash loan.\\n   * Supports only one asset on the flash loan.\\n   * @param asset The address of the flash-borrowed asset\\n   * @param amount The amount of the flash-borrowed asset\\n   * @param premium The fee of the flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   *   IERC20Detailed debtAsset Address of the debt asset\\n   *   uint256 debtAmount Amount of debt to be repaid\\n   *   uint256 rateMode Rate modes of the debt to be repaid\\n   *   uint256 deadline Deadline for the permit signature\\n   *   uint256 debtRateMode Rate mode of the debt to be repaid\\n   *   bytes paraswapData Paraswap Data\\n   *                    * bytes buyCallData Call data for augustus\\n   *                    * IParaSwapAugustus augustus Address of Augustus Swapper\\n   *   PermitSignature permitParams Struct containing the permit signatures, set to all zeroes if not used\\n   */\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address initiator,\\n    bytes calldata params\\n  ) external override nonReentrant returns (bool) {\\n    require(msg.sender == address(POOL), 'CALLER_MUST_BE_POOL');\\n\\n    uint256 collateralAmount = amount;\\n    address initiatorLocal = initiator;\\n\\n    IERC20Detailed collateralAsset = IERC20Detailed(asset);\\n\\n    _swapAndRepay(params, premium, initiatorLocal, collateralAsset, collateralAmount);\\n\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Swaps the user collateral for the debt asset and then repay the debt on the protocol on behalf of the user\\n   * without using flash loans. This method can be used when the temporary transfer of the collateral asset to this\\n   * contract does not affect the user position.\\n   * The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset\\n   * @param collateralAsset Address of asset to be swapped\\n   * @param debtAsset Address of debt asset\\n   * @param collateralAmount max Amount of the collateral to be swapped\\n   * @param debtRepayAmount Amount of the debt to be repaid, or maximum amount when repaying entire debt\\n   * @param debtRateMode Rate mode of the debt to be repaid\\n   * @param buyAllBalanceOffset Set to offset of toAmount in Augustus calldata if wanting to pay entire debt, otherwise 0\\n   * @param paraswapData Data for Paraswap Adapter\\n   * @param permitSignature struct containing the permit signature\\n   */\\n  function swapAndRepay(\\n    IERC20Detailed collateralAsset,\\n    IERC20Detailed debtAsset,\\n    uint256 collateralAmount,\\n    uint256 debtRepayAmount,\\n    uint256 debtRateMode,\\n    uint256 buyAllBalanceOffset,\\n    bytes calldata paraswapData,\\n    PermitSignature calldata permitSignature\\n  ) external nonReentrant {\\n    debtRepayAmount = getDebtRepayAmount(\\n      debtAsset,\\n      debtRateMode,\\n      buyAllBalanceOffset,\\n      debtRepayAmount,\\n      msg.sender\\n    );\\n\\n    // Pull aTokens from user\\n    _pullATokenAndWithdraw(address(collateralAsset), msg.sender, collateralAmount, permitSignature);\\n    //buy debt asset using collateral asset\\n    uint256 amountSold = _buyOnParaSwap(\\n      buyAllBalanceOffset,\\n      paraswapData,\\n      collateralAsset,\\n      debtAsset,\\n      collateralAmount,\\n      debtRepayAmount\\n    );\\n\\n    uint256 collateralBalanceLeft = collateralAmount - amountSold;\\n\\n    //deposit collateral back in the pool, if left after the swap(buy)\\n    if (collateralBalanceLeft > 0) {\\n      IERC20(collateralAsset).safeApprove(address(POOL), 0);\\n      IERC20(collateralAsset).safeApprove(address(POOL), collateralBalanceLeft);\\n      POOL.deposit(address(collateralAsset), collateralBalanceLeft, msg.sender, 0);\\n    }\\n\\n    // Repay debt. Approves 0 first to comply with tokens that implement the anti frontrunning approval fix\\n    IERC20(debtAsset).safeApprove(address(POOL), 0);\\n    IERC20(debtAsset).safeApprove(address(POOL), debtRepayAmount);\\n    POOL.repay(address(debtAsset), debtRepayAmount, debtRateMode, msg.sender);\\n  }\\n\\n  /**\\n   * @dev Perform the repay of the debt, pulls the initiator collateral and swaps to repay the flash loan\\n   * @param premium Fee of the flash loan\\n   * @param initiator Address of the user\\n   * @param collateralAsset Address of token to be swapped\\n   * @param collateralAmount Amount of the reserve to be swapped(flash loan amount)\\n   */\\n\\n  function _swapAndRepay(\\n    bytes calldata params,\\n    uint256 premium,\\n    address initiator,\\n    IERC20Detailed collateralAsset,\\n    uint256 collateralAmount\\n  ) private {\\n    (\\n      IERC20Detailed debtAsset,\\n      uint256 debtRepayAmount,\\n      uint256 buyAllBalanceOffset,\\n      uint256 rateMode,\\n      bytes memory paraswapData,\\n      PermitSignature memory permitSignature\\n    ) = abi.decode(params, (IERC20Detailed, uint256, uint256, uint256, bytes, PermitSignature));\\n\\n    debtRepayAmount = getDebtRepayAmount(\\n      debtAsset,\\n      rateMode,\\n      buyAllBalanceOffset,\\n      debtRepayAmount,\\n      initiator\\n    );\\n\\n    uint256 amountSold = _buyOnParaSwap(\\n      buyAllBalanceOffset,\\n      paraswapData,\\n      collateralAsset,\\n      debtAsset,\\n      collateralAmount,\\n      debtRepayAmount\\n    );\\n\\n    // Repay debt. Approves for 0 first to comply with tokens that implement the anti frontrunning approval fix.\\n    IERC20(debtAsset).safeApprove(address(POOL), 0);\\n    IERC20(debtAsset).safeApprove(address(POOL), debtRepayAmount);\\n    POOL.repay(address(debtAsset), debtRepayAmount, rateMode, initiator);\\n\\n    uint256 neededForFlashLoanRepay = amountSold.add(premium);\\n\\n    // Pull aTokens from user\\n    _pullATokenAndWithdraw(\\n      address(collateralAsset),\\n      initiator,\\n      neededForFlashLoanRepay,\\n      permitSignature\\n    );\\n\\n    // Repay flashloan. Approves for 0 first to comply with tokens that implement the anti frontrunning approval fix.\\n    IERC20(collateralAsset).safeApprove(address(POOL), 0);\\n    IERC20(collateralAsset).safeApprove(address(POOL), collateralAmount.add(premium));\\n  }\\n\\n  function getDebtRepayAmount(\\n    IERC20Detailed debtAsset,\\n    uint256 rateMode,\\n    uint256 buyAllBalanceOffset,\\n    uint256 debtRepayAmount,\\n    address initiator\\n  ) private view returns (uint256) {\\n    DataTypes.ReserveData memory debtReserveData = _getReserveData(address(debtAsset));\\n\\n    address debtToken = DataTypes.InterestRateMode(rateMode) == DataTypes.InterestRateMode.STABLE\\n      ? debtReserveData.stableDebtTokenAddress\\n      : debtReserveData.variableDebtTokenAddress;\\n\\n    uint256 currentDebt = IERC20(debtToken).balanceOf(initiator);\\n\\n    if (buyAllBalanceOffset != 0) {\\n      require(currentDebt <= debtRepayAmount, 'INSUFFICIENT_AMOUNT_TO_REPAY');\\n      debtRepayAmount = currentDebt;\\n    } else {\\n      require(debtRepayAmount <= currentDebt, 'INVALID_DEBT_REPAY_AMOUNT');\\n    }\\n\\n    return debtRepayAmount;\\n  }\\n}\\n\",\"keccak256\":\"0x89a8911672a229e3d6df9c11c6956a90cbcd6b90f9b56e79d1217d63f9e2ca7c\",\"license\":\"AGPL-3.0\"},\"contracts/adapters/paraswap/interfaces/IParaSwapAugustus.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IParaSwapAugustus {\\n  function getTokenTransferProxy() external view returns (address);\\n}\\n\",\"keccak256\":\"0x8feda4c8f1710f2365681625e9feada9cc9d129ac045645b2c893e06c817815b\",\"license\":\"AGPL-3.0\"},\"contracts/adapters/paraswap/interfaces/IParaSwapAugustusRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IParaSwapAugustusRegistry {\\n  function isValidAugustus(address augustus) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xd5e1e2b15318733975a6dd1aa3ff16842a88f2638458538e1a55ee37a4f3dddc\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.10;\\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    // On the first call to nonReentrant, _notEntered will be true\\n    require(_status != _ENTERED, 'ReentrancyGuard: reentrant call');\\n\\n    // Any calls to nonReentrant after this point will fail\\n    _status = _ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    _status = _NOT_ENTERED;\\n  }\\n}\\n\",\"keccak256\":\"0xdd8ef14496c07389f4ac9e4a5e63ef92d1c7bfca2a5eb3d322934dcf50237577\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1472,"contract":"contracts/adapters/paraswap/ParaSwapRepayAdapter.sol:ParaSwapRepayAdapter","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":30972,"contract":"contracts/adapters/paraswap/ParaSwapRepayAdapter.sol:ParaSwapRepayAdapter","label":"_status","offset":0,"slot":"1","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"notice":"ParaSwap Adapter to perform a repay of a debt with collateral.","version":1}}},"contracts/adapters/paraswap/ParaSwapWithdrawSwapAdapter.sol":{"ParaSwapWithdrawSwapAdapter":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"addressesProvider","type":"address"},{"internalType":"contract IParaSwapAugustusRegistry","name":"augustusRegistry","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fromAsset","type":"address"},{"indexed":true,"internalType":"address","name":"toAsset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountSold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"receivedAmount","type":"uint256"}],"name":"Bought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fromAsset","type":"address"},{"indexed":true,"internalType":"address","name":"toAsset","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"receivedAmount","type":"uint256"}],"name":"Swapped","type":"event"},{"inputs":[],"name":"ADDRESSES_PROVIDER","outputs":[{"internalType":"contract IPoolAddressesProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AUGUSTUS_REGISTRY","outputs":[{"internalType":"contract IParaSwapAugustusRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SLIPPAGE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ORACLE","outputs":[{"internalType":"contract IPriceOracleGetter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"executeOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20Detailed","name":"assetToSwapFrom","type":"address"},{"internalType":"contract IERC20Detailed","name":"assetToSwapTo","type":"address"},{"internalType":"uint256","name":"amountToSwap","type":"uint256"},{"internalType":"uint256","name":"minAmountToReceive","type":"uint256"},{"internalType":"uint256","name":"swapAllBalanceOffset","type":"uint256"},{"internalType":"bytes","name":"swapCalldata","type":"bytes"},{"internalType":"contract IParaSwapAugustus","name":"augustus","type":"address"},{"components":[{"internalType":"uint256","name":"amount","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"}],"internalType":"struct BaseParaSwapAdapter.PermitSignature","name":"permitParams","type":"tuple"}],"name":"withdrawAndSwap","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"rescueTokens(address)":{"details":"Emergency rescue for token stucked on this contract, as failsafe mechanism - Funds should never remain in this contract more time than during transactions - Only callable by the owner"},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"withdrawAndSwap(address,address,uint256,uint256,uint256,bytes,address,(uint256,uint256,uint8,bytes32,bytes32))":{"details":"Swaps an amount of an asset to another after a withdraw and transfers the new asset to the user. The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset and perform the swap.","params":{"amountToSwap":"Amount to be swapped, or maximum amount when swapping all balance","assetToSwapFrom":"Address of the underlying asset to be swapped from","assetToSwapTo":"Address of the underlying asset to be swapped to","augustus":"Address of ParaSwap's AugustusSwapper contract","minAmountToReceive":"Minimum amount to be received from the swap","permitParams":"Struct containing the permit signatures, set to all zeroes if not used","swapAllBalanceOffset":"Set to offset of fromAmount in Augustus calldata if wanting to swap all balance, otherwise 0","swapCalldata":"Calldata for ParaSwap's AugustusSwapper contract"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_1500":{"entryPoint":null,"id":1500,"parameterSlots":0,"returnSlots":0},"@_29063":{"entryPoint":null,"id":29063,"parameterSlots":1,"returnSlots":0},"@_29621":{"entryPoint":null,"id":29621,"parameterSlots":2,"returnSlots":0},"@_30823":{"entryPoint":null,"id":30823,"parameterSlots":3,"returnSlots":0},"@_30980":{"entryPoint":null,"id":30980,"parameterSlots":0,"returnSlots":0},"@_3465":{"entryPoint":null,"id":3465,"parameterSlots":1,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@transferOwnership_1572":{"entryPoint":510,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":892,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":931,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069t_contract$_IParaSwapAugustusRegistry_$30961t_address_fromMemory":{"entryPoint":808,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"validator_revert_contract_IPoolAddressesProvider":{"entryPoint":783,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2371:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"83:86:201","statements":[{"body":{"nodeType":"YulBlock","src":"147:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"156:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"149:6:201"},"nodeType":"YulFunctionCall","src":"149:12:201"},"nodeType":"YulExpressionStatement","src":"149:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"106:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"117:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"132:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"137:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"128:3:201"},"nodeType":"YulFunctionCall","src":"128:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"141:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"124:3:201"},"nodeType":"YulFunctionCall","src":"124:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"113:3:201"},"nodeType":"YulFunctionCall","src":"113:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"103:2:201"},"nodeType":"YulFunctionCall","src":"103:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"96:6:201"},"nodeType":"YulFunctionCall","src":"96:50:201"},"nodeType":"YulIf","src":"93:70:201"}]},"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"72:5:201","type":""}],"src":"14:155:201"},{"body":{"nodeType":"YulBlock","src":"355:476:201","statements":[{"body":{"nodeType":"YulBlock","src":"401:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"410:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"413:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"403:6:201"},"nodeType":"YulFunctionCall","src":"403:12:201"},"nodeType":"YulExpressionStatement","src":"403:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"376:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"385:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"372:3:201"},"nodeType":"YulFunctionCall","src":"372:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"397:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"368:3:201"},"nodeType":"YulFunctionCall","src":"368:32:201"},"nodeType":"YulIf","src":"365:52:201"},{"nodeType":"YulVariableDeclaration","src":"426:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"445:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"439:5:201"},"nodeType":"YulFunctionCall","src":"439:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"430:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"513:5:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"464:48:201"},"nodeType":"YulFunctionCall","src":"464:55:201"},"nodeType":"YulExpressionStatement","src":"464:55:201"},{"nodeType":"YulAssignment","src":"528:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"538:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"528:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"552:40:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"577:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"588:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"573:3:201"},"nodeType":"YulFunctionCall","src":"573:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"567:5:201"},"nodeType":"YulFunctionCall","src":"567:25:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"556:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"650:7:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"601:48:201"},"nodeType":"YulFunctionCall","src":"601:57:201"},"nodeType":"YulExpressionStatement","src":"601:57:201"},{"nodeType":"YulAssignment","src":"667:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"677:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"667:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"693:40:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"718:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"729:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"714:3:201"},"nodeType":"YulFunctionCall","src":"714:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"708:5:201"},"nodeType":"YulFunctionCall","src":"708:25:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"697:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"791:7:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"742:48:201"},"nodeType":"YulFunctionCall","src":"742:57:201"},"nodeType":"YulExpressionStatement","src":"742:57:201"},{"nodeType":"YulAssignment","src":"808:17:201","value":{"name":"value_2","nodeType":"YulIdentifier","src":"818:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"808:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069t_contract$_IParaSwapAugustusRegistry_$30961t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"305:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"316:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"328:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"336:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"344:6:201","type":""}],"src":"174:657:201"},{"body":{"nodeType":"YulBlock","src":"917:194:201","statements":[{"body":{"nodeType":"YulBlock","src":"963:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"972:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"975:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"965:6:201"},"nodeType":"YulFunctionCall","src":"965:12:201"},"nodeType":"YulExpressionStatement","src":"965:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"938:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"947:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"934:3:201"},"nodeType":"YulFunctionCall","src":"934:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"959:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"930:3:201"},"nodeType":"YulFunctionCall","src":"930:32:201"},"nodeType":"YulIf","src":"927:52:201"},{"nodeType":"YulVariableDeclaration","src":"988:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1007:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1001:5:201"},"nodeType":"YulFunctionCall","src":"1001:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"992:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1075:5:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"1026:48:201"},"nodeType":"YulFunctionCall","src":"1026:55:201"},"nodeType":"YulExpressionStatement","src":"1026:55:201"},{"nodeType":"YulAssignment","src":"1090:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1100:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1090:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"883:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"894:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"906:6:201","type":""}],"src":"836:275:201"},{"body":{"nodeType":"YulBlock","src":"1217:102:201","statements":[{"nodeType":"YulAssignment","src":"1227:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1239:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1250:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1235:3:201"},"nodeType":"YulFunctionCall","src":"1235:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1227:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1269:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1284:6:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1300:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1305:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1296:3:201"},"nodeType":"YulFunctionCall","src":"1296:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"1309:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1292:3:201"},"nodeType":"YulFunctionCall","src":"1292:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1280:3:201"},"nodeType":"YulFunctionCall","src":"1280:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1262:6:201"},"nodeType":"YulFunctionCall","src":"1262:51:201"},"nodeType":"YulExpressionStatement","src":"1262:51:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1186:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1197:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1208:4:201","type":""}],"src":"1116:203:201"},{"body":{"nodeType":"YulBlock","src":"1402:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"1448:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1457:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1460:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1450:6:201"},"nodeType":"YulFunctionCall","src":"1450:12:201"},"nodeType":"YulExpressionStatement","src":"1450:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1423:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1432:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1419:3:201"},"nodeType":"YulFunctionCall","src":"1419:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1444:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1415:3:201"},"nodeType":"YulFunctionCall","src":"1415:32:201"},"nodeType":"YulIf","src":"1412:52:201"},{"nodeType":"YulVariableDeclaration","src":"1473:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1492:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1486:5:201"},"nodeType":"YulFunctionCall","src":"1486:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1477:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1555:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1564:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1567:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1557:6:201"},"nodeType":"YulFunctionCall","src":"1557:12:201"},"nodeType":"YulExpressionStatement","src":"1557:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1524:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1545:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1538:6:201"},"nodeType":"YulFunctionCall","src":"1538:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1531:6:201"},"nodeType":"YulFunctionCall","src":"1531:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1521:2:201"},"nodeType":"YulFunctionCall","src":"1521:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1514:6:201"},"nodeType":"YulFunctionCall","src":"1514:40:201"},"nodeType":"YulIf","src":"1511:60:201"},{"nodeType":"YulAssignment","src":"1580:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1590:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1580:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1368:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1379:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1391:6:201","type":""}],"src":"1324:277:201"},{"body":{"nodeType":"YulBlock","src":"1780:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1797:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1808:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1790:6:201"},"nodeType":"YulFunctionCall","src":"1790:21:201"},"nodeType":"YulExpressionStatement","src":"1790:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1831:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1842:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1827:3:201"},"nodeType":"YulFunctionCall","src":"1827:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"1847:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1820:6:201"},"nodeType":"YulFunctionCall","src":"1820:30:201"},"nodeType":"YulExpressionStatement","src":"1820:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1870:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1881:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1866:3:201"},"nodeType":"YulFunctionCall","src":"1866:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"1886:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1859:6:201"},"nodeType":"YulFunctionCall","src":"1859:62:201"},"nodeType":"YulExpressionStatement","src":"1859:62:201"},{"nodeType":"YulAssignment","src":"1930:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1942:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1953:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1938:3:201"},"nodeType":"YulFunctionCall","src":"1938:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1930:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1757:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1771:4:201","type":""}],"src":"1606:356:201"},{"body":{"nodeType":"YulBlock","src":"2141:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2158:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2169:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2151:6:201"},"nodeType":"YulFunctionCall","src":"2151:21:201"},"nodeType":"YulExpressionStatement","src":"2151:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2192:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2203:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2188:3:201"},"nodeType":"YulFunctionCall","src":"2188:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2208:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2181:6:201"},"nodeType":"YulFunctionCall","src":"2181:30:201"},"nodeType":"YulExpressionStatement","src":"2181:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2231:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2242:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2227:3:201"},"nodeType":"YulFunctionCall","src":"2227:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"2247:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2220:6:201"},"nodeType":"YulFunctionCall","src":"2220:62:201"},"nodeType":"YulExpressionStatement","src":"2220:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2302:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2313:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2298:3:201"},"nodeType":"YulFunctionCall","src":"2298:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"2318:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2291:6:201"},"nodeType":"YulFunctionCall","src":"2291:36:201"},"nodeType":"YulExpressionStatement","src":"2291:36:201"},{"nodeType":"YulAssignment","src":"2336:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2348:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2359:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2344:3:201"},"nodeType":"YulFunctionCall","src":"2344:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2336:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2118:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2132:4:201","type":""}],"src":"1967:402:201"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPoolAddressesProvider(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069t_contract$_IParaSwapAugustusRegistry_$30961t_address_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        validator_revert_contract_IPoolAddressesProvider(value_1)\n        value1 := value_1\n        let value_2 := mload(add(headStart, 64))\n        validator_revert_contract_IPoolAddressesProvider(value_2)\n        value2 := value_2\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"6101006040523480156200001257600080fd5b5060405162002a8138038062002a81833981016040819052620000359162000328565b82828180806001600160a01b03166080816001600160a01b031681525050806001600160a01b031663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000092573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b891906200037c565b6001600160a01b031660a05250600080546001600160a01b0319163390811782556040519091829160008051602062002a61833981519152908290a350806001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015a91906200037c565b6001600160a01b0390811660c05260405163fb04e17b60e01b815260006004820152908316915063fb04e17b90602401602060405180830381865afa158015620001a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ce9190620003a3565b15620001d957600080fd5b6001600160a01b031660e0525060018055620001f581620001fe565b505050620003c7565b6000546001600160a01b031633146200025e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b038116620002c55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000255565b600080546040516001600160a01b038085169392169160008051602062002a6183398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811681146200032557600080fd5b50565b6000806000606084860312156200033e57600080fd5b83516200034b816200030f565b60208501519093506200035e816200030f565b604085015190925062000371816200030f565b809150509250925092565b6000602082840312156200038f57600080fd5b81516200039c816200030f565b9392505050565b600060208284031215620003b657600080fd5b815180151581146200039c57600080fd5b60805160a05160c05160e0516126456200041c600039600081816101990152610da201526000818161017201526118f80152600081816101db01528181610ac80152610c7d0152600060e701526126456000f3fe608060405234801561001057600080fd5b50600436106100c85760003560e01c80633a829867116100815780637535d2461161005b5780637535d246146101d65780638da5cb5b146101fd578063f2fde38b1461021b57600080fd5b80633a829867146101945780635fd73e07146101bb578063715018a6146101ce57600080fd5b80631b11d0ff116100b25780631b11d0ff1461013357806332e4b2861461015657806338013f021461016d57600080fd5b8062ae3bf8146100cd5780630542975c146100e2575b600080fd5b6100e06100db366004611e8f565b61022e565b005b6101097f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610146610141366004611ef5565b610385565b604051901515815260200161012a565b61015f610bb881565b60405190815260200161012a565b6101097f000000000000000000000000000000000000000000000000000000000000000081565b6101097f000000000000000000000000000000000000000000000000000000000000000081565b6100e06101c9366004611f71565b61045b565b6100e0610689565b6101097f000000000000000000000000000000000000000000000000000000000000000081565b60005473ffffffffffffffffffffffffffffffffffffffff16610109565b6100e0610229366004611e8f565b610779565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6103826102d660005473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610340573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103649190612043565b73ffffffffffffffffffffffffffffffffffffffff8416919061092a565b50565b6000600260015414156103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102ab565b60026001556040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4e4f545f535550504f525445440000000000000000000000000000000000000060448201526064016102ab565b600260015414156104c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102ab565b600260015560006104d88a610a03565b6101000151905085156105e5576040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610552573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105769190612043565b9050888111156105e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f494e53554646494349454e545f414d4f554e545f544f5f53574150000000000060448201526064016102ab565b97505b6106008a82338b6105fb368890038801886120bc565b610b3a565b60006106558787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050868e8e8e8e610d5a565b905061067873ffffffffffffffffffffffffffffffffffffffff8b16338361154e565b505060018055505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461070a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102ab565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102ab565b73ffffffffffffffffffffffffffffffffffffffff811661089d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102ab565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af161098d573d6000803e3d6000fd5b5061099784611627565b6109fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e73666572000000000000000000000060448201526064016102ab565b50505050565b604080516102008101825260006101e08201818152825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c08101919091526040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa158015610b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b34919061221b565b92915050565b602081015115610c0757805160208201516040808401516060850151608086015192517fd505accf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301523060248301526044820196909652606481019490945260ff909116608484015260a483015260c48201529085169063d505accf9060e401600060405180830381600087803b158015610bee57600080fd5b505af1158015610c02573d6000803e3d6000fd5b505050505b610c2973ffffffffffffffffffffffffffffffffffffffff85168430856116f3565b6040517f69328dec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820184905230604483015283917f0000000000000000000000000000000000000000000000000000000000000000909116906369328dec906064016020604051808303816000875af1158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec9190612043565b14610d53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f554e45585045435445445f414d4f554e545f57495448445241574e000000000060448201526064016102ab565b5050505050565b6040517ffb04e17b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063fb04e17b90602401602060405180830381865afa158015610deb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0f919061233e565b610e75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f494e56414c49445f41554755535455530000000000000000000000000000000060448201526064016102ab565b6000610e80866117ce565b60ff1690506000610e90866117ce565b60ff1690506000610ea0886118b0565b90506000610ead886118b0565b90506000610f05610ec2610bb861271061238f565b610eff610eda610ed389600a6124c6565b8690611965565b610ef9610ef2610eeb8a600a6124c6565b8990611965565b8d90611965565b9061198f565b906119a2565b905086811115610f71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4d494e5f414d4f554e545f455843454544535f4d41585f534c4950504147450060448201526064016102ab565b50506040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000935073ffffffffffffffffffffffffffffffffffffffff891692506370a082319150602401602060405180830381865afa158015610fe3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110079190612043565b905083811015611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f494e53554646494349454e545f42414c414e43455f4245464f52455f5357415060448201526064016102ab565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8716906370a0823190602401602060405180830381865afa1580156110e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111049190612043565b905060008873ffffffffffffffffffffffffffffffffffffffff1663d2c4b5986040518163ffffffff1660e01b8152600401602060405180830381865afa158015611153573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117791906124d2565b905061119b73ffffffffffffffffffffffffffffffffffffffff89168260006119e5565b6111bc73ffffffffffffffffffffffffffffffffffffffff891682886119e5565b8a1561124e5760048b101580156111df575089516111db906020611b67565b8b11155b611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f46524f4d5f414d4f554e545f4f46465345545f4f55545f4f465f52414e47450060448201526064016102ab565b8560208c018b01525b60008973ffffffffffffffffffffffffffffffffffffffff168b604051611275919061251b565b6000604051808303816000865af19150503d80600081146112b2576040519150601f19603f3d011682016040523d82523d6000602084013e6112b7565b606091505b50509050806112ca573d6000803e3d6000fd5b6112d4878561238f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8b16906370a0823190602401602060405180830381865afa15801561133e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113629190612043565b146113c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f57524f4e475f42414c414e43455f41465445525f53574150000000000000000060448201526064016102ab565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015261146390849073ffffffffffffffffffffffffffffffffffffffff8b16906370a0823190602401602060405180830381865afa158015611439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145d9190612043565b90611b67565b9450858510156114cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f494e53554646494349454e545f414d4f554e545f52454345495645440000000060448201526064016102ab565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fa078c4190abe07940190effc1846be0ccf03ad6007bc9e93f9697d0b460befbb8988604051611537929190918252602082015260400190565b60405180910390a350505050979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526116229084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611b77565b505050565b6000611667565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156116a657602081146116e0576116a17f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f61162e565b6116ed565b823b6116d7576116d77f475076323a206e6f74206120636f6e7472616374000000000000000000000000601461162e565b600191506116ed565b3d6000803e600051151591505b50919050565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af161175e573d6000803e3d6000fd5b5061176885611627565b610d53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d0000000000000060448201526064016102ab565b6000808273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561181c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118409190612537565b9050604d8160ff161115610b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f544f4f5f4d414e595f444543494d414c535f4f4e5f544f4b454e00000000000060448201526064016102ab565b6040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063b3596f0790602401602060405180830381865afa158015611941573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b349190612043565b60008215806119865750508181028183828161198357611983612554565b04145b610b3457600080fd5b600061199b8284612583565b9392505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec77839004841115176119d757600080fd5b506127109102611388010490565b801580611a8557506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611a5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a839190612043565b155b611b11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016102ab565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526116229084907f095ea7b300000000000000000000000000000000000000000000000000000000906064016115a0565b80820382811115610b3457600080fd5b6000611bd9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611c839092919063ffffffff16565b8051909150156116225780806020019051810190611bf7919061233e565b611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016102ab565b6060611c928484600085611c9a565b949350505050565b606082471015611d2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016102ab565b843b611d94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102ab565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611dbd919061251b565b60006040518083038185875af1925050503d8060008114611dfa576040519150601f19603f3d011682016040523d82523d6000602084013e611dff565b606091505b5091509150611e0f828286611e1a565b979650505050505050565b60608315611e2957508161199b565b825115611e395782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ab91906125be565b73ffffffffffffffffffffffffffffffffffffffff8116811461038257600080fd5b600060208284031215611ea157600080fd5b813561199b81611e6d565b60008083601f840112611ebe57600080fd5b50813567ffffffffffffffff811115611ed657600080fd5b602083019150836020828501011115611eee57600080fd5b9250929050565b60008060008060008060a08789031215611f0e57600080fd5b8635611f1981611e6d565b955060208701359450604087013593506060870135611f3781611e6d565b9250608087013567ffffffffffffffff811115611f5357600080fd5b611f5f89828a01611eac565b979a9699509497509295939492505050565b6000806000806000806000806000898b03610180811215611f9157600080fd5b8a35611f9c81611e6d565b995060208b0135611fac81611e6d565b985060408b0135975060608b0135965060808b0135955060a08b013567ffffffffffffffff811115611fdd57600080fd5b611fe98d828e01611eac565b90965094505060c08b0135611ffd81611e6d565b925060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff208201121561202f57600080fd5b5060e08a0190509295985092959850929598565b60006020828403121561205557600080fd5b5051919050565b6040516101e0810167ffffffffffffffff811182821017156120a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b60ff8116811461038257600080fd5b600060a082840312156120ce57600080fd5b60405160a0810181811067ffffffffffffffff82111715612118577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b806040525082358152602083013560208201526040830135612139816120ad565b6040820152606083810135908201526080928301359281019290925250919050565b60006020828403121561216d57600080fd5b6040516020810181811067ffffffffffffffff821117156121b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529151825250919050565b80516fffffffffffffffffffffffffffffffff811681146121e457600080fd5b919050565b805164ffffffffff811681146121e457600080fd5b805161ffff811681146121e457600080fd5b80516121e481611e6d565b60006101e0828403121561222e57600080fd5b61223661205c565b612240848461215b565b815261224e602084016121c4565b602082015261225f604084016121c4565b6040820152612270606084016121c4565b6060820152612281608084016121c4565b608082015261229260a084016121c4565b60a08201526122a360c084016121e9565b60c08201526122b460e084016121fe565b60e08201526101006122c7818501612210565b908201526101206122d9848201612210565b908201526101406122eb848201612210565b908201526101606122fd848201612210565b9082015261018061230f8482016121c4565b908201526101a06123218482016121c4565b908201526101c06123338482016121c4565b908201529392505050565b60006020828403121561235057600080fd5b8151801515811461199b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156123a1576123a1612360565b500390565b600181815b808511156123ff57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156123e5576123e5612360565b808516156123f257918102915b93841c93908002906123ab565b509250929050565b60008261241657506001610b34565b8161242357506000610b34565b816001811461243957600281146124435761245f565b6001915050610b34565b60ff84111561245457612454612360565b50506001821b610b34565b5060208310610133831016604e8410600b8410161715612482575081810a610b34565b61248c83836123a6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156124be576124be612360565b029392505050565b600061199b8383612407565b6000602082840312156124e457600080fd5b815161199b81611e6d565b60005b8381101561250a5781810151838201526020016124f2565b838111156109fd5750506000910152565b6000825161252d8184602087016124ef565b9190910192915050565b60006020828403121561254957600080fd5b815161199b816120ad565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826125b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60208152600082518060208401526125dd8160408501602087016124ef565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220de9c503cb8c4805a9c88ec16f3be2e1789d38b7fbe8620613d28ed61ab451cb964736f6c634300080a00338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","opcodes":"PUSH2 0x100 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2A81 CODESIZE SUB DUP1 PUSH3 0x2A81 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0x328 JUMP JUMPDEST DUP3 DUP3 DUP2 DUP1 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x92 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0xB8 SWAP2 SWAP1 PUSH3 0x37C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE POP PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 DUP3 SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x2A61 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 DUP3 SWAP1 LOG3 POP DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x134 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x15A SWAP2 SWAP1 PUSH3 0x37C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0xC0 MSTORE PUSH1 0x40 MLOAD PUSH4 0xFB04E17B PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP4 AND SWAP2 POP PUSH4 0xFB04E17B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 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 PUSH3 0x1CE SWAP2 SWAP1 PUSH3 0x3A3 JUMP JUMPDEST ISZERO PUSH3 0x1D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xE0 MSTORE POP PUSH1 0x1 DUP1 SSTORE PUSH3 0x1F5 DUP2 PUSH3 0x1FE JUMP JUMPDEST POP POP POP PUSH3 0x3C7 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH3 0x25E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x2C5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x255 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x2A61 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 LOG3 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 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x325 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x33E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH3 0x34B DUP2 PUSH3 0x30F JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP4 POP PUSH3 0x35E DUP2 PUSH3 0x30F JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP3 POP PUSH3 0x371 DUP2 PUSH3 0x30F JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x38F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x39C DUP2 PUSH3 0x30F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x3B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x39C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x2645 PUSH3 0x41C PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x199 ADD MSTORE PUSH2 0xDA2 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x172 ADD MSTORE PUSH2 0x18F8 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x1DB ADD MSTORE DUP2 DUP2 PUSH2 0xAC8 ADD MSTORE PUSH2 0xC7D ADD MSTORE PUSH1 0x0 PUSH1 0xE7 ADD MSTORE PUSH2 0x2645 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 0xC8 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3A829867 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0x7535D246 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x1D6 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3A829867 EQ PUSH2 0x194 JUMPI DUP1 PUSH4 0x5FD73E07 EQ PUSH2 0x1BB JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1B11D0FF GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x1B11D0FF EQ PUSH2 0x133 JUMPI DUP1 PUSH4 0x32E4B286 EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0x38013F02 EQ PUSH2 0x16D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH3 0xAE3BF8 EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0x542975C EQ PUSH2 0xE2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE0 PUSH2 0xDB CALLDATASIZE PUSH1 0x4 PUSH2 0x1E8F JUMP JUMPDEST PUSH2 0x22E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x109 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x146 PUSH2 0x141 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EF5 JUMP JUMPDEST PUSH2 0x385 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12A JUMP JUMPDEST PUSH2 0x15F PUSH2 0xBB8 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12A JUMP JUMPDEST PUSH2 0x109 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x109 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0xE0 PUSH2 0x1C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F71 JUMP JUMPDEST PUSH2 0x45B JUMP JUMPDEST PUSH2 0xE0 PUSH2 0x689 JUMP JUMPDEST PUSH2 0x109 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x109 JUMP JUMPDEST PUSH2 0xE0 PUSH2 0x229 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E8F JUMP JUMPDEST PUSH2 0x779 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x2B4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x382 PUSH2 0x2D6 PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x340 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x364 SWAP2 SWAP1 PUSH2 0x2043 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP2 SWAP1 PUSH2 0x92A JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 PUSH1 0x1 SLOAD EQ ISZERO PUSH2 0x3F4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x2 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F535550504F5254454400000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x2 PUSH1 0x1 SLOAD EQ ISZERO PUSH2 0x4C8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x2 PUSH1 0x1 SSTORE PUSH1 0x0 PUSH2 0x4D8 DUP11 PUSH2 0xA03 JUMP JUMPDEST PUSH2 0x100 ADD MLOAD SWAP1 POP DUP6 ISZERO PUSH2 0x5E5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x552 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x576 SWAP2 SWAP1 PUSH2 0x2043 JUMP JUMPDEST SWAP1 POP DUP9 DUP2 GT ISZERO PUSH2 0x5E2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F414D4F554E545F544F5F535741500000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST SWAP8 POP JUMPDEST PUSH2 0x600 DUP11 DUP3 CALLER DUP12 PUSH2 0x5FB CALLDATASIZE DUP9 SWAP1 SUB DUP9 ADD DUP9 PUSH2 0x20BC JUMP JUMPDEST PUSH2 0xB3A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x655 DUP8 DUP8 DUP8 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP7 DUP15 DUP15 DUP15 DUP15 PUSH2 0xD5A JUMP JUMPDEST SWAP1 POP PUSH2 0x678 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND CALLER DUP4 PUSH2 0x154E JUMP JUMPDEST POP POP PUSH1 0x1 DUP1 SSTORE POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x70A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x7FA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x89D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x98D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x997 DUP5 PUSH2 0x1627 JUMP JUMPDEST PUSH2 0x9FD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x200 DUP2 ADD DUP3 MSTORE PUSH1 0x0 PUSH2 0x1E0 DUP3 ADD DUP2 DUP2 MSTORE DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1A0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB10 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB34 SWAP2 SWAP1 PUSH2 0x221B JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD ISZERO PUSH2 0xC07 JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP1 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x80 DUP7 ADD MLOAD SWAP3 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x64 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0xFF SWAP1 SWAP2 AND PUSH1 0x84 DUP5 ADD MSTORE PUSH1 0xA4 DUP4 ADD MSTORE PUSH1 0xC4 DUP3 ADD MSTORE SWAP1 DUP6 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC02 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0xC29 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 ADDRESS DUP6 PUSH2 0x16F3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x69328DEC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP5 SWAP1 MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE DUP4 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x69328DEC SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xCC8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCEC SWAP2 SWAP1 PUSH2 0x2043 JUMP JUMPDEST EQ PUSH2 0xD53 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x554E45585045435445445F414D4F554E545F57495448445241574E0000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFB04E17B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xFB04E17B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDEB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE0F SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST PUSH2 0xE75 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F415547555354555300000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE80 DUP7 PUSH2 0x17CE JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH1 0x0 PUSH2 0xE90 DUP7 PUSH2 0x17CE JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH1 0x0 PUSH2 0xEA0 DUP9 PUSH2 0x18B0 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xEAD DUP9 PUSH2 0x18B0 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF05 PUSH2 0xEC2 PUSH2 0xBB8 PUSH2 0x2710 PUSH2 0x238F JUMP JUMPDEST PUSH2 0xEFF PUSH2 0xEDA PUSH2 0xED3 DUP10 PUSH1 0xA PUSH2 0x24C6 JUMP JUMPDEST DUP7 SWAP1 PUSH2 0x1965 JUMP JUMPDEST PUSH2 0xEF9 PUSH2 0xEF2 PUSH2 0xEEB DUP11 PUSH1 0xA PUSH2 0x24C6 JUMP JUMPDEST DUP10 SWAP1 PUSH2 0x1965 JUMP JUMPDEST DUP14 SWAP1 PUSH2 0x1965 JUMP JUMPDEST SWAP1 PUSH2 0x198F JUMP JUMPDEST SWAP1 PUSH2 0x19A2 JUMP JUMPDEST SWAP1 POP DUP7 DUP2 GT ISZERO PUSH2 0xF71 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D494E5F414D4F554E545F455843454544535F4D41585F534C49505041474500 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP3 POP PUSH4 0x70A08231 SWAP2 POP PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFE3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1007 SWAP2 SWAP1 PUSH2 0x2043 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0x1073 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F42414C414E43455F4245464F52455F53574150 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10E0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1104 SWAP2 SWAP1 PUSH2 0x2043 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD2C4B598 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1153 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1177 SWAP2 SWAP1 PUSH2 0x24D2 JUMP JUMPDEST SWAP1 POP PUSH2 0x119B PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP3 PUSH1 0x0 PUSH2 0x19E5 JUMP JUMPDEST PUSH2 0x11BC PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP3 DUP9 PUSH2 0x19E5 JUMP JUMPDEST DUP11 ISZERO PUSH2 0x124E JUMPI PUSH1 0x4 DUP12 LT ISZERO DUP1 ISZERO PUSH2 0x11DF JUMPI POP DUP10 MLOAD PUSH2 0x11DB SWAP1 PUSH1 0x20 PUSH2 0x1B67 JUMP JUMPDEST DUP12 GT ISZERO JUMPDEST PUSH2 0x1245 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46524F4D5F414D4F554E545F4F46465345545F4F55545F4F465F52414E474500 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST DUP6 PUSH1 0x20 DUP13 ADD DUP12 ADD MSTORE JUMPDEST PUSH1 0x0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH1 0x40 MLOAD PUSH2 0x1275 SWAP2 SWAP1 PUSH2 0x251B 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 0x12B2 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 0x12B7 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x12CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x12D4 DUP8 DUP6 PUSH2 0x238F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x133E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1362 SWAP2 SWAP1 PUSH2 0x2043 JUMP JUMPDEST EQ PUSH2 0x13C9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x57524F4E475F42414C414E43455F41465445525F535741500000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x1463 SWAP1 DUP5 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1439 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x145D SWAP2 SWAP1 PUSH2 0x2043 JUMP JUMPDEST SWAP1 PUSH2 0x1B67 JUMP JUMPDEST SWAP5 POP DUP6 DUP6 LT ISZERO PUSH2 0x14CF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F414D4F554E545F524543454956454400000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xA078C4190ABE07940190EFFC1846BE0CCF03AD6007BC9E93F9697D0B460BEFBB DUP10 DUP9 PUSH1 0x40 MLOAD PUSH2 0x1537 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1622 SWAP1 DUP5 SWAP1 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 SWAP1 PUSH1 0x64 ADD 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 0x1B77 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1667 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x16A6 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x16E0 JUMPI PUSH2 0x16A1 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x162E JUMP JUMPDEST PUSH2 0x16ED JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x16D7 JUMPI PUSH2 0x16D7 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x162E JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x16ED JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x175E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1768 DUP6 PUSH2 0x1627 JUMP JUMPDEST PUSH2 0xD53 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x181C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1840 SWAP2 SWAP1 PUSH2 0x2537 JUMP JUMPDEST SWAP1 POP PUSH1 0x4D DUP2 PUSH1 0xFF AND GT ISZERO PUSH2 0xB34 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x544F4F5F4D414E595F444543494D414C535F4F4E5F544F4B454E000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1941 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB34 SWAP2 SWAP1 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 PUSH2 0x1986 JUMPI POP POP DUP2 DUP2 MUL DUP2 DUP4 DUP3 DUP2 PUSH2 0x1983 JUMPI PUSH2 0x1983 PUSH2 0x2554 JUMP JUMPDEST DIV EQ JUMPDEST PUSH2 0xB34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x199B DUP3 DUP5 PUSH2 0x2583 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x19D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x1A85 JUMPI POP PUSH1 0x40 MLOAD PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A5F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A83 SWAP2 SWAP1 PUSH2 0x2043 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x1B11 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x20746F206E6F6E2D7A65726F20616C6C6F77616E636500000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1622 SWAP1 DUP5 SWAP1 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP1 PUSH1 0x64 ADD PUSH2 0x15A0 JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xB34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1BD9 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1C83 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1622 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1BF7 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST PUSH2 0x1622 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F74207375636365656400000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1C92 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x1C9A JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x1D2C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x722063616C6C0000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB JUMP JUMPDEST DUP5 EXTCODESIZE PUSH2 0x1D94 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x1DBD SWAP2 SWAP1 PUSH2 0x251B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1DFA 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 0x1DFF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x1E0F DUP3 DUP3 DUP7 PUSH2 0x1E1A JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x1E29 JUMPI POP DUP2 PUSH2 0x199B JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x1E39 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2AB SWAP2 SWAP1 PUSH2 0x25BE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1EA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x199B DUP2 PUSH2 0x1E6D JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x1EBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1ED6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x1EEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x1F0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x1F19 DUP2 PUSH2 0x1E6D JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0x1F37 DUP2 PUSH2 0x1E6D JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1F53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1F5F DUP10 DUP3 DUP11 ADD PUSH2 0x1EAC JUMP JUMPDEST SWAP8 SWAP11 SWAP7 SWAP10 POP SWAP5 SWAP8 POP SWAP3 SWAP6 SWAP4 SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP10 DUP12 SUB PUSH2 0x180 DUP2 SLT ISZERO PUSH2 0x1F91 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP11 CALLDATALOAD PUSH2 0x1F9C DUP2 PUSH2 0x1E6D JUMP JUMPDEST SWAP10 POP PUSH1 0x20 DUP12 ADD CALLDATALOAD PUSH2 0x1FAC DUP2 PUSH2 0x1E6D JUMP JUMPDEST SWAP9 POP PUSH1 0x40 DUP12 ADD CALLDATALOAD SWAP8 POP PUSH1 0x60 DUP12 ADD CALLDATALOAD SWAP7 POP PUSH1 0x80 DUP12 ADD CALLDATALOAD SWAP6 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1FDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1FE9 DUP14 DUP3 DUP15 ADD PUSH2 0x1EAC JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP POP PUSH1 0xC0 DUP12 ADD CALLDATALOAD PUSH2 0x1FFD DUP2 PUSH2 0x1E6D JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 DUP3 ADD SLT ISZERO PUSH2 0x202F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xE0 DUP11 ADD SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2055 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x20A7 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x20CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x2118 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 PUSH1 0x40 MSTORE POP DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD PUSH2 0x2139 DUP2 PUSH2 0x20AD JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 DUP2 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 SWAP3 DUP4 ADD CALLDATALOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x216D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x21B7 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x21E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x21E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x21E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x21E4 DUP2 PUSH2 0x1E6D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x222E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2236 PUSH2 0x205C JUMP JUMPDEST PUSH2 0x2240 DUP5 DUP5 PUSH2 0x215B JUMP JUMPDEST DUP2 MSTORE PUSH2 0x224E PUSH1 0x20 DUP5 ADD PUSH2 0x21C4 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x225F PUSH1 0x40 DUP5 ADD PUSH2 0x21C4 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x2270 PUSH1 0x60 DUP5 ADD PUSH2 0x21C4 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x2281 PUSH1 0x80 DUP5 ADD PUSH2 0x21C4 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x2292 PUSH1 0xA0 DUP5 ADD PUSH2 0x21C4 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x22A3 PUSH1 0xC0 DUP5 ADD PUSH2 0x21E9 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x22B4 PUSH1 0xE0 DUP5 ADD PUSH2 0x21FE JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x22C7 DUP2 DUP6 ADD PUSH2 0x2210 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x22D9 DUP5 DUP3 ADD PUSH2 0x2210 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x22EB DUP5 DUP3 ADD PUSH2 0x2210 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x22FD DUP5 DUP3 ADD PUSH2 0x2210 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x230F DUP5 DUP3 ADD PUSH2 0x21C4 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x2321 DUP5 DUP3 ADD PUSH2 0x21C4 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x2333 DUP5 DUP3 ADD PUSH2 0x21C4 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2350 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x199B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x23A1 JUMPI PUSH2 0x23A1 PUSH2 0x2360 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x23FF JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x23E5 JUMPI PUSH2 0x23E5 PUSH2 0x2360 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x23F2 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x23AB JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2416 JUMPI POP PUSH1 0x1 PUSH2 0xB34 JUMP JUMPDEST DUP2 PUSH2 0x2423 JUMPI POP PUSH1 0x0 PUSH2 0xB34 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x2439 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x2443 JUMPI PUSH2 0x245F JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0xB34 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x2454 JUMPI PUSH2 0x2454 PUSH2 0x2360 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0xB34 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x2482 JUMPI POP DUP2 DUP2 EXP PUSH2 0xB34 JUMP JUMPDEST PUSH2 0x248C DUP4 DUP4 PUSH2 0x23A6 JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x24BE JUMPI PUSH2 0x24BE PUSH2 0x2360 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x199B DUP4 DUP4 PUSH2 0x2407 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x24E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x199B DUP2 PUSH2 0x1E6D JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x250A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x24F2 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x9FD JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x252D DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x24EF JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2549 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x199B DUP2 PUSH2 0x20AD JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x25B9 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x25DD DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x24EF JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDE SWAP13 POP EXTCODECOPY 0xB8 0xC4 DUP1 GAS SWAP13 DUP9 0xEC AND RETURN 0xBE 0x2E OR DUP10 0xD3 DUP12 PUSH32 0xBE8620613D28ED61AB451CB964736F6C634300080A00338BE0079C5316591413 DIFFICULTY 0xCD 0x1F 0xD0 LOG4 CALLCODE DUP5 NOT 0x49 PUSH32 0x9722A3DAAFE3B4186F6B6457E000000000000000000000000000000000000000 ","sourceMap":"780:2527:111:-:0;;;904:225;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1057:17;1076:16;1299:17:108;2036::106;673:8:25;-1:-1:-1;;;;;652:29:25;;;-1:-1:-1;;;;;652:29:25;;;;;700:8;-1:-1:-1;;;;;700:16:25;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;687:32:25;;;-1:-1:-1;835:17:11;873:18;;-1:-1:-1;;;;;;873:18:11;678:10:4;873:18:11;;;;;902:43;;678:10:4;;;;-1:-1:-1;;;;;;;;;;;902:43:11;835:17;;902:43;829:121;2089:17:106::1;-1:-1:-1::0;;;;;2089:32:106::1;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2061:63:106;;::::1;;::::0;1413:44:108::1;::::0;-1:-1:-1;;;1413:44:108;;1454:1:::1;1413:44;::::0;::::1;1262:51:201::0;1413:32:108;;::::1;::::0;-1:-1:-1;1413:32:108::1;::::0;1235:18:201;;1413:44:108::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1412:45;1404:54;;;::::0;::::1;;-1:-1:-1::0;;;;;1464:36:108::1;;::::0;-1:-1:-1;1616:1:114;1711:22;;1100:24:111::1;1118:5:::0;1100:17:::1;:24::i;:::-;904:225:::0;;;780:2527;;1875:226:11;1204:6;;-1:-1:-1;;;;;1204:6:11;678:10:4;1204:22:11;1196:67;;;;-1:-1:-1;;;1196:67:11;;1808:2:201;1196:67:11;;;1790:21:201;;;1827:18;;;1820:30;1886:34;1866:18;;;1859:62;1938:18;;1196:67:11;;;;;;;;;-1:-1:-1;;;;;1959:22:11;::::1;1951:73;;;::::0;-1:-1:-1;;;1951:73:11;;2169:2:201;1951:73:11::1;::::0;::::1;2151:21:201::0;2208:2;2188:18;;;2181:30;2247:34;2227:18;;;2220:62;-1:-1:-1;;;2298:18:201;;;2291:36;2344:19;;1951:73:11::1;1967:402:201::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;-1:-1:-1;;;;;2035:38:11;;::::1;::::0;2056:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;2035:38:11;::::1;2079:6;:17:::0;;-1:-1:-1;;;;;;2079:17:11::1;-1:-1:-1::0;;;;;2079:17:11;;;::::1;::::0;;;::::1;::::0;;1875:226::o;14:155:201:-;-1:-1:-1;;;;;113:31:201;;103:42;;93:70;;159:1;156;149:12;93:70;14:155;:::o;174:657::-;328:6;336;344;397:2;385:9;376:7;372:23;368:32;365:52;;;413:1;410;403:12;365:52;445:9;439:16;464:55;513:5;464:55;:::i;:::-;588:2;573:18;;567:25;538:5;;-1:-1:-1;601:57:201;567:25;601:57;:::i;:::-;729:2;714:18;;708:25;677:7;;-1:-1:-1;742:57:201;708:25;742:57;:::i;:::-;818:7;808:17;;;174:657;;;;;:::o;836:275::-;906:6;959:2;947:9;938:7;934:23;930:32;927:52;;;975:1;972;965:12;927:52;1007:9;1001:16;1026:55;1075:5;1026:55;:::i;:::-;1100:5;836:275;-1:-1:-1;;;836:275:201:o;1324:277::-;1391:6;1444:2;1432:9;1423:7;1419:23;1415:32;1412:52;;;1460:1;1457;1450:12;1412:52;1492:9;1486:16;1545:5;1538:13;1531:21;1524:5;1521:32;1511:60;;1567:1;1564;1557:12;1967:402;780:2527:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ADDRESSES_PROVIDER_3442":{"entryPoint":null,"id":3442,"parameterSlots":0,"returnSlots":0},"@AUGUSTUS_REGISTRY_29593":{"entryPoint":null,"id":29593,"parameterSlots":0,"returnSlots":0},"@MAX_SLIPPAGE_PERCENT_29022":{"entryPoint":null,"id":29022,"parameterSlots":0,"returnSlots":0},"@ORACLE_29025":{"entryPoint":null,"id":29025,"parameterSlots":0,"returnSlots":0},"@POOL_3446":{"entryPoint":null,"id":3446,"parameterSlots":0,"returnSlots":0},"@_callOptionalReturn_2189":{"entryPoint":7031,"id":2189,"parameterSlots":2,"returnSlots":0},"@_getDecimals_29102":{"entryPoint":6094,"id":29102,"parameterSlots":1,"returnSlots":1},"@_getPrice_29077":{"entryPoint":6320,"id":29077,"parameterSlots":1,"returnSlots":1},"@_getReserveData_29117":{"entryPoint":2563,"id":29117,"parameterSlots":1,"returnSlots":1},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_pullATokenAndWithdraw_29220":{"entryPoint":2874,"id":29220,"parameterSlots":5,"returnSlots":0},"@_sellOnParaSwap_29851":{"entryPoint":3418,"id":29851,"parameterSlots":7,"returnSlots":1},"@div_2309":{"entryPoint":6543,"id":2309,"parameterSlots":2,"returnSlots":1},"@executeOperation_30846":{"entryPoint":901,"id":30846,"parameterSlots":6,"returnSlots":1},"@functionCallWithValue_586":{"entryPoint":7322,"id":586,"parameterSlots":4,"returnSlots":1},"@functionCall_516":{"entryPoint":7299,"id":516,"parameterSlots":3,"returnSlots":1},"@getLastTransferResult_117":{"entryPoint":5671,"id":117,"parameterSlots":1,"returnSlots":1},"@isContract_445":{"entryPoint":null,"id":445,"parameterSlots":1,"returnSlots":1},"@mul_2294":{"entryPoint":6501,"id":2294,"parameterSlots":2,"returnSlots":1},"@owner_1509":{"entryPoint":null,"id":1509,"parameterSlots":0,"returnSlots":1},"@percentMul_21119":{"entryPoint":6562,"id":21119,"parameterSlots":2,"returnSlots":1},"@renounceOwnership_1544":{"entryPoint":1673,"id":1544,"parameterSlots":0,"returnSlots":0},"@rescueTokens_29244":{"entryPoint":558,"id":29244,"parameterSlots":1,"returnSlots":0},"@safeApprove_2067":{"entryPoint":6629,"id":2067,"parameterSlots":3,"returnSlots":0},"@safeTransferFrom_106":{"entryPoint":5875,"id":106,"parameterSlots":4,"returnSlots":0},"@safeTransfer_1997":{"entryPoint":5454,"id":1997,"parameterSlots":3,"returnSlots":0},"@safeTransfer_78":{"entryPoint":2346,"id":78,"parameterSlots":3,"returnSlots":0},"@sub_2239":{"entryPoint":7015,"id":2239,"parameterSlots":2,"returnSlots":1},"@transferOwnership_1572":{"entryPoint":1913,"id":1572,"parameterSlots":1,"returnSlots":0},"@verifyCallResult_721":{"entryPoint":7706,"id":721,"parameterSlots":3,"returnSlots":1},"@withdrawAndSwap_30942":{"entryPoint":1115,"id":30942,"parameterSlots":9,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":8720,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":7852,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_struct_ReserveConfigurationMap_fromMemory":{"entryPoint":8539,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":9426,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_bytes_calldata_ptr":{"entryPoint":7925,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":9022,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IERC20Detailed_$1464t_contract$_IERC20Detailed_$1464t_uint256t_uint256t_uint256t_bytes_calldata_ptrt_contract$_IParaSwapAugustus_$30951t_struct$_PermitSignature_$29019_calldata_ptr":{"entryPoint":8049,"id":null,"parameterSlots":2,"returnSlots":9},"abi_decode_tuple_t_contract$_IERC20_$1442":{"entryPoint":7823,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_PermitSignature_$29019_memory_ptr":{"entryPoint":8380,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory":{"entryPoint":8731,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":8259,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint8_fromMemory":{"entryPoint":9527,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint128_fromMemory":{"entryPoint":8644,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint16_fromMemory":{"entryPoint":8702,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint40_fromMemory":{"entryPoint":8681,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":9499,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IParaSwapAugustusRegistry_$30961__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IPriceOracleGetter_$5835__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":9662,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3202e1fc4f78abbce03a97de69392b3f69ebba48c41588ffb32a1c8b97349f74__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_51fc4946c16284910827fc38bc7611d60d4dd1f7d8fefa0da6f8642035c3c48b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_74fc5696336325aeb54c5d19133ed01308c8174de21fc66f38ac28668f995bc7__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8333172953304c474b0cfe8eccb09fd2b08c1198c3d73a3ed0388645fb84d24e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_85a045c7862eb0e81d59fe8dfd2ed8c824917ce215328caf39199676e5939f87__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9bfa76b9c2e298d52f58639e051d7d21997f6c435f534dfd0c2e6c351c64a39a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e2a8e7139f3bc1b76f03a9ab4d7a5e5329d0cc7d7a0c99dcd453eb8f41b24b0b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f73db277b52b12832d4a33a7ef8ea973b58412dbb6a626efd61c48d6a6304661__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f920786e74a0af1b51a64ca021265d328aab062025c81f249165aca83960cff7__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_fc5915f8715e0da4bd5e6487e67e57e89850a48fc18d4e921a811a8c928ad119__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"allocate_memory":{"entryPoint":8284,"id":null,"parameterSlots":0,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":9603,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":9126,"id":null,"parameterSlots":2,"returnSlots":2},"checked_exp_t_uint256_t_uint256":{"entryPoint":9414,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":9223,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":9103,"id":null,"parameterSlots":2,"returnSlots":1},"copy_memory_to_memory":{"entryPoint":9455,"id":null,"parameterSlots":3,"returnSlots":0},"panic_error_0x11":{"entryPoint":9056,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":9556,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_contract_IERC20":{"entryPoint":7789,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_uint8":{"entryPoint":8365,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:22519:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"67:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"154:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"163:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"166:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"156:6:201"},"nodeType":"YulFunctionCall","src":"156:12:201"},"nodeType":"YulExpressionStatement","src":"156:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"90:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"101:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"108:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"97:3:201"},"nodeType":"YulFunctionCall","src":"97:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"87:2:201"},"nodeType":"YulFunctionCall","src":"87:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"80:6:201"},"nodeType":"YulFunctionCall","src":"80:73:201"},"nodeType":"YulIf","src":"77:93:201"}]},"name":"validator_revert_contract_IERC20","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"56:5:201","type":""}],"src":"14:162:201"},{"body":{"nodeType":"YulBlock","src":"266:185:201","statements":[{"body":{"nodeType":"YulBlock","src":"312:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"321:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"324:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"314:6:201"},"nodeType":"YulFunctionCall","src":"314:12:201"},"nodeType":"YulExpressionStatement","src":"314:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"287:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"296:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"283:3:201"},"nodeType":"YulFunctionCall","src":"283:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"308:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"279:3:201"},"nodeType":"YulFunctionCall","src":"279:32:201"},"nodeType":"YulIf","src":"276:52:201"},{"nodeType":"YulVariableDeclaration","src":"337:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"363:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"350:12:201"},"nodeType":"YulFunctionCall","src":"350:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"341:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"415:5:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"382:32:201"},"nodeType":"YulFunctionCall","src":"382:39:201"},"nodeType":"YulExpressionStatement","src":"382:39:201"},{"nodeType":"YulAssignment","src":"430:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"440:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"430:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IERC20_$1442","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"232:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"243:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"255:6:201","type":""}],"src":"181:270:201"},{"body":{"nodeType":"YulBlock","src":"588:125:201","statements":[{"nodeType":"YulAssignment","src":"598:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"610:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"621:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"606:3:201"},"nodeType":"YulFunctionCall","src":"606:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"598:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"640:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"655:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"663:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"651:3:201"},"nodeType":"YulFunctionCall","src":"651:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"633:6:201"},"nodeType":"YulFunctionCall","src":"633:74:201"},"nodeType":"YulExpressionStatement","src":"633:74:201"}]},"name":"abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"557:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"568:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"579:4:201","type":""}],"src":"456:257:201"},{"body":{"nodeType":"YulBlock","src":"790:275:201","statements":[{"body":{"nodeType":"YulBlock","src":"839:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"848:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"851:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"841:6:201"},"nodeType":"YulFunctionCall","src":"841:12:201"},"nodeType":"YulExpressionStatement","src":"841:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"818:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"826:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"814:3:201"},"nodeType":"YulFunctionCall","src":"814:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"833:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"810:3:201"},"nodeType":"YulFunctionCall","src":"810:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"803:6:201"},"nodeType":"YulFunctionCall","src":"803:35:201"},"nodeType":"YulIf","src":"800:55:201"},{"nodeType":"YulAssignment","src":"864:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"887:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"874:12:201"},"nodeType":"YulFunctionCall","src":"874:20:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"864:6:201"}]},{"body":{"nodeType":"YulBlock","src":"937:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"946:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"949:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"939:6:201"},"nodeType":"YulFunctionCall","src":"939:12:201"},"nodeType":"YulExpressionStatement","src":"939:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"909:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"917:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"906:2:201"},"nodeType":"YulFunctionCall","src":"906:30:201"},"nodeType":"YulIf","src":"903:50:201"},{"nodeType":"YulAssignment","src":"962:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"978:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"986:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"974:3:201"},"nodeType":"YulFunctionCall","src":"974:17:201"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"962:8:201"}]},{"body":{"nodeType":"YulBlock","src":"1043:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1052:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1055:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1045:6:201"},"nodeType":"YulFunctionCall","src":"1045:12:201"},"nodeType":"YulExpressionStatement","src":"1045:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1014:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"1022:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1010:3:201"},"nodeType":"YulFunctionCall","src":"1010:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"1031:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1006:3:201"},"nodeType":"YulFunctionCall","src":"1006:30:201"},{"name":"end","nodeType":"YulIdentifier","src":"1038:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1003:2:201"},"nodeType":"YulFunctionCall","src":"1003:39:201"},"nodeType":"YulIf","src":"1000:59:201"}]},"name":"abi_decode_bytes_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"753:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"761:3:201","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"769:8:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"779:6:201","type":""}],"src":"718:347:201"},{"body":{"nodeType":"YulBlock","src":"1227:682:201","statements":[{"body":{"nodeType":"YulBlock","src":"1274:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1283:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1286:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1276:6:201"},"nodeType":"YulFunctionCall","src":"1276:12:201"},"nodeType":"YulExpressionStatement","src":"1276:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1248:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1257:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1244:3:201"},"nodeType":"YulFunctionCall","src":"1244:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1269:3:201","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1240:3:201"},"nodeType":"YulFunctionCall","src":"1240:33:201"},"nodeType":"YulIf","src":"1237:53:201"},{"nodeType":"YulVariableDeclaration","src":"1299:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1325:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1312:12:201"},"nodeType":"YulFunctionCall","src":"1312:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1303:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1377:5:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"1344:32:201"},"nodeType":"YulFunctionCall","src":"1344:39:201"},"nodeType":"YulExpressionStatement","src":"1344:39:201"},{"nodeType":"YulAssignment","src":"1392:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1402:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1392:6:201"}]},{"nodeType":"YulAssignment","src":"1416:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1443:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1454:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1439:3:201"},"nodeType":"YulFunctionCall","src":"1439:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1426:12:201"},"nodeType":"YulFunctionCall","src":"1426:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1416:6:201"}]},{"nodeType":"YulAssignment","src":"1467:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1494:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1505:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1490:3:201"},"nodeType":"YulFunctionCall","src":"1490:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1477:12:201"},"nodeType":"YulFunctionCall","src":"1477:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1467:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1518:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1550:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1561:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1546:3:201"},"nodeType":"YulFunctionCall","src":"1546:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1533:12:201"},"nodeType":"YulFunctionCall","src":"1533:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"1522:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1607:7:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"1574:32:201"},"nodeType":"YulFunctionCall","src":"1574:41:201"},"nodeType":"YulExpressionStatement","src":"1574:41:201"},{"nodeType":"YulAssignment","src":"1624:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"1634:7:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1624:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1650:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1681:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1692:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1677:3:201"},"nodeType":"YulFunctionCall","src":"1677:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1664:12:201"},"nodeType":"YulFunctionCall","src":"1664:33:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1654:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1740:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1749:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1752:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1742:6:201"},"nodeType":"YulFunctionCall","src":"1742:12:201"},"nodeType":"YulExpressionStatement","src":"1742:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1712:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1720:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1709:2:201"},"nodeType":"YulFunctionCall","src":"1709:30:201"},"nodeType":"YulIf","src":"1706:50:201"},{"nodeType":"YulVariableDeclaration","src":"1765:84:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1821:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"1832:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1817:3:201"},"nodeType":"YulFunctionCall","src":"1817:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1841:7:201"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"1791:25:201"},"nodeType":"YulFunctionCall","src":"1791:58:201"},"variables":[{"name":"value4_1","nodeType":"YulTypedName","src":"1769:8:201","type":""},{"name":"value5_1","nodeType":"YulTypedName","src":"1779:8:201","type":""}]},{"nodeType":"YulAssignment","src":"1858:18:201","value":{"name":"value4_1","nodeType":"YulIdentifier","src":"1868:8:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"1858:6:201"}]},{"nodeType":"YulAssignment","src":"1885:18:201","value":{"name":"value5_1","nodeType":"YulIdentifier","src":"1895:8:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"1885:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_bytes_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1153:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1164:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1176:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1184:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1192:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1200:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1208:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"1216:6:201","type":""}],"src":"1070:839:201"},{"body":{"nodeType":"YulBlock","src":"2009:92:201","statements":[{"nodeType":"YulAssignment","src":"2019:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2031:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2042:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2027:3:201"},"nodeType":"YulFunctionCall","src":"2027:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2019:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2061:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2086:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2079:6:201"},"nodeType":"YulFunctionCall","src":"2079:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2072:6:201"},"nodeType":"YulFunctionCall","src":"2072:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2054:6:201"},"nodeType":"YulFunctionCall","src":"2054:41:201"},"nodeType":"YulExpressionStatement","src":"2054:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1978:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1989:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2000:4:201","type":""}],"src":"1914:187:201"},{"body":{"nodeType":"YulBlock","src":"2207:76:201","statements":[{"nodeType":"YulAssignment","src":"2217:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2229:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2240:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2225:3:201"},"nodeType":"YulFunctionCall","src":"2225:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2217:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2259:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"2270:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2252:6:201"},"nodeType":"YulFunctionCall","src":"2252:25:201"},"nodeType":"YulExpressionStatement","src":"2252:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2176:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2187:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2198:4:201","type":""}],"src":"2106:177:201"},{"body":{"nodeType":"YulBlock","src":"2416:125:201","statements":[{"nodeType":"YulAssignment","src":"2426:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2438:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2449:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2434:3:201"},"nodeType":"YulFunctionCall","src":"2434:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2426:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2468:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2483:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2491:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2479:3:201"},"nodeType":"YulFunctionCall","src":"2479:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2461:6:201"},"nodeType":"YulFunctionCall","src":"2461:74:201"},"nodeType":"YulExpressionStatement","src":"2461:74:201"}]},"name":"abi_encode_tuple_t_contract$_IPriceOracleGetter_$5835__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2385:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2396:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2407:4:201","type":""}],"src":"2288:253:201"},{"body":{"nodeType":"YulBlock","src":"2682:125:201","statements":[{"nodeType":"YulAssignment","src":"2692:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2704:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2715:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2700:3:201"},"nodeType":"YulFunctionCall","src":"2700:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2692:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2734:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2749:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2757:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2745:3:201"},"nodeType":"YulFunctionCall","src":"2745:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2727:6:201"},"nodeType":"YulFunctionCall","src":"2727:74:201"},"nodeType":"YulExpressionStatement","src":"2727:74:201"}]},"name":"abi_encode_tuple_t_contract$_IParaSwapAugustusRegistry_$30961__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2651:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2662:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2673:4:201","type":""}],"src":"2546:261:201"},{"body":{"nodeType":"YulBlock","src":"3129:1040:201","statements":[{"nodeType":"YulVariableDeclaration","src":"3139:33:201","value":{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3153:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3162:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3149:3:201"},"nodeType":"YulFunctionCall","src":"3149:23:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3143:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3197:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3206:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3209:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3199:6:201"},"nodeType":"YulFunctionCall","src":"3199:12:201"},"nodeType":"YulExpressionStatement","src":"3199:12:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3188:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"3192:3:201","type":"","value":"384"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3184:3:201"},"nodeType":"YulFunctionCall","src":"3184:12:201"},"nodeType":"YulIf","src":"3181:32:201"},{"nodeType":"YulVariableDeclaration","src":"3222:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3248:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3235:12:201"},"nodeType":"YulFunctionCall","src":"3235:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3226:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3300:5:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"3267:32:201"},"nodeType":"YulFunctionCall","src":"3267:39:201"},"nodeType":"YulExpressionStatement","src":"3267:39:201"},{"nodeType":"YulAssignment","src":"3315:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3325:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3315:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3339:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3371:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3382:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3367:3:201"},"nodeType":"YulFunctionCall","src":"3367:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3354:12:201"},"nodeType":"YulFunctionCall","src":"3354:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"3343:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3428:7:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"3395:32:201"},"nodeType":"YulFunctionCall","src":"3395:41:201"},"nodeType":"YulExpressionStatement","src":"3395:41:201"},{"nodeType":"YulAssignment","src":"3445:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3455:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3445:6:201"}]},{"nodeType":"YulAssignment","src":"3471:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3498:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3509:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3494:3:201"},"nodeType":"YulFunctionCall","src":"3494:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3481:12:201"},"nodeType":"YulFunctionCall","src":"3481:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3471:6:201"}]},{"nodeType":"YulAssignment","src":"3522:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3549:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3560:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3545:3:201"},"nodeType":"YulFunctionCall","src":"3545:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3532:12:201"},"nodeType":"YulFunctionCall","src":"3532:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3522:6:201"}]},{"nodeType":"YulAssignment","src":"3573:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3600:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3611:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3596:3:201"},"nodeType":"YulFunctionCall","src":"3596:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3583:12:201"},"nodeType":"YulFunctionCall","src":"3583:33:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3573:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3625:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3656:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3667:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3652:3:201"},"nodeType":"YulFunctionCall","src":"3652:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3639:12:201"},"nodeType":"YulFunctionCall","src":"3639:33:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"3629:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3715:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3724:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3727:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3717:6:201"},"nodeType":"YulFunctionCall","src":"3717:12:201"},"nodeType":"YulExpressionStatement","src":"3717:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3687:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3695:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3684:2:201"},"nodeType":"YulFunctionCall","src":"3684:30:201"},"nodeType":"YulIf","src":"3681:50:201"},{"nodeType":"YulVariableDeclaration","src":"3740:84:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3796:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"3807:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3792:3:201"},"nodeType":"YulFunctionCall","src":"3792:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3816:7:201"}],"functionName":{"name":"abi_decode_bytes_calldata","nodeType":"YulIdentifier","src":"3766:25:201"},"nodeType":"YulFunctionCall","src":"3766:58:201"},"variables":[{"name":"value5_1","nodeType":"YulTypedName","src":"3744:8:201","type":""},{"name":"value6_1","nodeType":"YulTypedName","src":"3754:8:201","type":""}]},{"nodeType":"YulAssignment","src":"3833:18:201","value":{"name":"value5_1","nodeType":"YulIdentifier","src":"3843:8:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"3833:6:201"}]},{"nodeType":"YulAssignment","src":"3860:18:201","value":{"name":"value6_1","nodeType":"YulIdentifier","src":"3870:8:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"3860:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3887:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3919:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3930:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3915:3:201"},"nodeType":"YulFunctionCall","src":"3915:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3902:12:201"},"nodeType":"YulFunctionCall","src":"3902:33:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"3891:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"3977:7:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"3944:32:201"},"nodeType":"YulFunctionCall","src":"3944:41:201"},"nodeType":"YulExpressionStatement","src":"3944:41:201"},{"nodeType":"YulAssignment","src":"3994:17:201","value":{"name":"value_2","nodeType":"YulIdentifier","src":"4004:7:201"},"variableNames":[{"name":"value7","nodeType":"YulIdentifier","src":"3994:6:201"}]},{"body":{"nodeType":"YulBlock","src":"4109:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4118:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4121:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4111:6:201"},"nodeType":"YulFunctionCall","src":"4111:12:201"},"nodeType":"YulExpressionStatement","src":"4111:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"4031:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"4035:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4027:3:201"},"nodeType":"YulFunctionCall","src":"4027:75:201"},{"kind":"number","nodeType":"YulLiteral","src":"4104:3:201","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4023:3:201"},"nodeType":"YulFunctionCall","src":"4023:85:201"},"nodeType":"YulIf","src":"4020:105:201"},{"nodeType":"YulAssignment","src":"4134:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4148:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4159:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4144:3:201"},"nodeType":"YulFunctionCall","src":"4144:19:201"},"variableNames":[{"name":"value8","nodeType":"YulIdentifier","src":"4134:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IERC20Detailed_$1464t_contract$_IERC20Detailed_$1464t_uint256t_uint256t_uint256t_bytes_calldata_ptrt_contract$_IParaSwapAugustus_$30951t_struct$_PermitSignature_$29019_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3031:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3042:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3054:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3062:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3070:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3078:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3086:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"3094:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"3102:6:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"3110:6:201","type":""},{"name":"value8","nodeType":"YulTypedName","src":"3118:6:201","type":""}],"src":"2812:1357:201"},{"body":{"nodeType":"YulBlock","src":"4289:125:201","statements":[{"nodeType":"YulAssignment","src":"4299:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4311:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4322:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4307:3:201"},"nodeType":"YulFunctionCall","src":"4307:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4299:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4341:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4356:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4364:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4352:3:201"},"nodeType":"YulFunctionCall","src":"4352:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4334:6:201"},"nodeType":"YulFunctionCall","src":"4334:74:201"},"nodeType":"YulExpressionStatement","src":"4334:74:201"}]},"name":"abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4258:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4269:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4280:4:201","type":""}],"src":"4174:240:201"},{"body":{"nodeType":"YulBlock","src":"4520:125:201","statements":[{"nodeType":"YulAssignment","src":"4530:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4542:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4553:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4538:3:201"},"nodeType":"YulFunctionCall","src":"4538:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4530:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4572:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4587:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4595:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4583:3:201"},"nodeType":"YulFunctionCall","src":"4583:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4565:6:201"},"nodeType":"YulFunctionCall","src":"4565:74:201"},"nodeType":"YulExpressionStatement","src":"4565:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4489:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4500:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4511:4:201","type":""}],"src":"4419:226:201"},{"body":{"nodeType":"YulBlock","src":"4720:185:201","statements":[{"body":{"nodeType":"YulBlock","src":"4766:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4775:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4778:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4768:6:201"},"nodeType":"YulFunctionCall","src":"4768:12:201"},"nodeType":"YulExpressionStatement","src":"4768:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4741:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4750:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4737:3:201"},"nodeType":"YulFunctionCall","src":"4737:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4762:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4733:3:201"},"nodeType":"YulFunctionCall","src":"4733:32:201"},"nodeType":"YulIf","src":"4730:52:201"},{"nodeType":"YulVariableDeclaration","src":"4791:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4817:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4804:12:201"},"nodeType":"YulFunctionCall","src":"4804:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4795:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4869:5:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"4836:32:201"},"nodeType":"YulFunctionCall","src":"4836:39:201"},"nodeType":"YulExpressionStatement","src":"4836:39:201"},{"nodeType":"YulAssignment","src":"4884:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"4894:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4884:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4686:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4697:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4709:6:201","type":""}],"src":"4650:255:201"},{"body":{"nodeType":"YulBlock","src":"5084:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5101:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5112:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5094:6:201"},"nodeType":"YulFunctionCall","src":"5094:21:201"},"nodeType":"YulExpressionStatement","src":"5094:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5135:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5146:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5131:3:201"},"nodeType":"YulFunctionCall","src":"5131:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"5151:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5124:6:201"},"nodeType":"YulFunctionCall","src":"5124:30:201"},"nodeType":"YulExpressionStatement","src":"5124:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5174:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5185:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5170:3:201"},"nodeType":"YulFunctionCall","src":"5170:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"5190:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5163:6:201"},"nodeType":"YulFunctionCall","src":"5163:62:201"},"nodeType":"YulExpressionStatement","src":"5163:62:201"},{"nodeType":"YulAssignment","src":"5234:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5246:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5257:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5242:3:201"},"nodeType":"YulFunctionCall","src":"5242:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5234:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5061:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5075:4:201","type":""}],"src":"4910:356:201"},{"body":{"nodeType":"YulBlock","src":"5352:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"5398:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5407:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5410:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5400:6:201"},"nodeType":"YulFunctionCall","src":"5400:12:201"},"nodeType":"YulExpressionStatement","src":"5400:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5373:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"5382:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5369:3:201"},"nodeType":"YulFunctionCall","src":"5369:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"5394:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5365:3:201"},"nodeType":"YulFunctionCall","src":"5365:32:201"},"nodeType":"YulIf","src":"5362:52:201"},{"nodeType":"YulAssignment","src":"5423:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5439:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5433:5:201"},"nodeType":"YulFunctionCall","src":"5433:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5423:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5318:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5329:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5341:6:201","type":""}],"src":"5271:184:201"},{"body":{"nodeType":"YulBlock","src":"5634:181:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5651:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5662:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5644:6:201"},"nodeType":"YulFunctionCall","src":"5644:21:201"},"nodeType":"YulExpressionStatement","src":"5644:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5685:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5696:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5681:3:201"},"nodeType":"YulFunctionCall","src":"5681:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"5701:2:201","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5674:6:201"},"nodeType":"YulFunctionCall","src":"5674:30:201"},"nodeType":"YulExpressionStatement","src":"5674:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5724:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5735:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5720:3:201"},"nodeType":"YulFunctionCall","src":"5720:18:201"},{"hexValue":"5265656e7472616e637947756172643a207265656e7472616e742063616c6c","kind":"string","nodeType":"YulLiteral","src":"5740:33:201","type":"","value":"ReentrancyGuard: reentrant call"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5713:6:201"},"nodeType":"YulFunctionCall","src":"5713:61:201"},"nodeType":"YulExpressionStatement","src":"5713:61:201"},{"nodeType":"YulAssignment","src":"5783:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5795:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5806:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5791:3:201"},"nodeType":"YulFunctionCall","src":"5791:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5783:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5611:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5625:4:201","type":""}],"src":"5460:355:201"},{"body":{"nodeType":"YulBlock","src":"5994:163:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6011:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6022:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6004:6:201"},"nodeType":"YulFunctionCall","src":"6004:21:201"},"nodeType":"YulExpressionStatement","src":"6004:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6045:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6056:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6041:3:201"},"nodeType":"YulFunctionCall","src":"6041:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"6061:2:201","type":"","value":"13"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6034:6:201"},"nodeType":"YulFunctionCall","src":"6034:30:201"},"nodeType":"YulExpressionStatement","src":"6034:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6084:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6095:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6080:3:201"},"nodeType":"YulFunctionCall","src":"6080:18:201"},{"hexValue":"4e4f545f535550504f52544544","kind":"string","nodeType":"YulLiteral","src":"6100:15:201","type":"","value":"NOT_SUPPORTED"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6073:6:201"},"nodeType":"YulFunctionCall","src":"6073:43:201"},"nodeType":"YulExpressionStatement","src":"6073:43:201"},{"nodeType":"YulAssignment","src":"6125:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6137:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6148:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6133:3:201"},"nodeType":"YulFunctionCall","src":"6133:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6125:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_e2a8e7139f3bc1b76f03a9ab4d7a5e5329d0cc7d7a0c99dcd453eb8f41b24b0b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5971:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5985:4:201","type":""}],"src":"5820:337:201"},{"body":{"nodeType":"YulBlock","src":"6336:177:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6353:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6364:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6346:6:201"},"nodeType":"YulFunctionCall","src":"6346:21:201"},"nodeType":"YulExpressionStatement","src":"6346:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6387:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6398:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6383:3:201"},"nodeType":"YulFunctionCall","src":"6383:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"6403:2:201","type":"","value":"27"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6376:6:201"},"nodeType":"YulFunctionCall","src":"6376:30:201"},"nodeType":"YulExpressionStatement","src":"6376:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6426:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6437:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6422:3:201"},"nodeType":"YulFunctionCall","src":"6422:18:201"},{"hexValue":"494e53554646494349454e545f414d4f554e545f544f5f53574150","kind":"string","nodeType":"YulLiteral","src":"6442:29:201","type":"","value":"INSUFFICIENT_AMOUNT_TO_SWAP"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6415:6:201"},"nodeType":"YulFunctionCall","src":"6415:57:201"},"nodeType":"YulExpressionStatement","src":"6415:57:201"},{"nodeType":"YulAssignment","src":"6481:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6493:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6504:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6489:3:201"},"nodeType":"YulFunctionCall","src":"6489:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6481:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_f73db277b52b12832d4a33a7ef8ea973b58412dbb6a626efd61c48d6a6304661__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6313:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6327:4:201","type":""}],"src":"6162:351:201"},{"body":{"nodeType":"YulBlock","src":"6559:360:201","statements":[{"nodeType":"YulAssignment","src":"6569:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6585:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6579:5:201"},"nodeType":"YulFunctionCall","src":"6579:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6569:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"6597:34:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6619:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"6627:3:201","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6615:3:201"},"nodeType":"YulFunctionCall","src":"6615:16:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"6601:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"6714:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6735:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6738:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6728:6:201"},"nodeType":"YulFunctionCall","src":"6728:88:201"},"nodeType":"YulExpressionStatement","src":"6728:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6836:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6839:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6829:6:201"},"nodeType":"YulFunctionCall","src":"6829:15:201"},"nodeType":"YulExpressionStatement","src":"6829:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6864:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6867:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6857:6:201"},"nodeType":"YulFunctionCall","src":"6857:15:201"},"nodeType":"YulExpressionStatement","src":"6857:15:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6649:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"6661:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6646:2:201"},"nodeType":"YulFunctionCall","src":"6646:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6685:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"6697:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6682:2:201"},"nodeType":"YulFunctionCall","src":"6682:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"6643:2:201"},"nodeType":"YulFunctionCall","src":"6643:62:201"},"nodeType":"YulIf","src":"6640:242:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6898:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6902:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6891:6:201"},"nodeType":"YulFunctionCall","src":"6891:22:201"},"nodeType":"YulExpressionStatement","src":"6891:22:201"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"6548:6:201","type":""}],"src":"6518:401:201"},{"body":{"nodeType":"YulBlock","src":"6967:71:201","statements":[{"body":{"nodeType":"YulBlock","src":"7016:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7025:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7028:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7018:6:201"},"nodeType":"YulFunctionCall","src":"7018:12:201"},"nodeType":"YulExpressionStatement","src":"7018:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6990:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7001:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"7008:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6997:3:201"},"nodeType":"YulFunctionCall","src":"6997:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"6987:2:201"},"nodeType":"YulFunctionCall","src":"6987:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6980:6:201"},"nodeType":"YulFunctionCall","src":"6980:35:201"},"nodeType":"YulIf","src":"6977:55:201"}]},"name":"validator_revert_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"6956:5:201","type":""}],"src":"6924:114:201"},{"body":{"nodeType":"YulBlock","src":"7147:830:201","statements":[{"body":{"nodeType":"YulBlock","src":"7194:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7203:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7206:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7196:6:201"},"nodeType":"YulFunctionCall","src":"7196:12:201"},"nodeType":"YulExpressionStatement","src":"7196:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7168:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"7177:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7164:3:201"},"nodeType":"YulFunctionCall","src":"7164:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"7189:3:201","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7160:3:201"},"nodeType":"YulFunctionCall","src":"7160:33:201"},"nodeType":"YulIf","src":"7157:53:201"},{"nodeType":"YulVariableDeclaration","src":"7219:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7239:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7233:5:201"},"nodeType":"YulFunctionCall","src":"7233:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"7223:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7251:34:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7273:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7281:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7269:3:201"},"nodeType":"YulFunctionCall","src":"7269:16:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"7255:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"7368:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7389:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7392:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7382:6:201"},"nodeType":"YulFunctionCall","src":"7382:88:201"},"nodeType":"YulExpressionStatement","src":"7382:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7490:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7493:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7483:6:201"},"nodeType":"YulFunctionCall","src":"7483:15:201"},"nodeType":"YulExpressionStatement","src":"7483:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7518:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7521:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7511:6:201"},"nodeType":"YulFunctionCall","src":"7511:15:201"},"nodeType":"YulExpressionStatement","src":"7511:15:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7303:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"7315:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7300:2:201"},"nodeType":"YulFunctionCall","src":"7300:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7339:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"7351:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7336:2:201"},"nodeType":"YulFunctionCall","src":"7336:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"7297:2:201"},"nodeType":"YulFunctionCall","src":"7297:62:201"},"nodeType":"YulIf","src":"7294:242:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7552:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"7556:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7545:6:201"},"nodeType":"YulFunctionCall","src":"7545:22:201"},"nodeType":"YulExpressionStatement","src":"7545:22:201"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7583:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7604:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7591:12:201"},"nodeType":"YulFunctionCall","src":"7591:23:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7576:6:201"},"nodeType":"YulFunctionCall","src":"7576:39:201"},"nodeType":"YulExpressionStatement","src":"7576:39:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7635:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7643:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7631:3:201"},"nodeType":"YulFunctionCall","src":"7631:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7665:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7676:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7661:3:201"},"nodeType":"YulFunctionCall","src":"7661:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7648:12:201"},"nodeType":"YulFunctionCall","src":"7648:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7624:6:201"},"nodeType":"YulFunctionCall","src":"7624:57:201"},"nodeType":"YulExpressionStatement","src":"7624:57:201"},{"nodeType":"YulVariableDeclaration","src":"7690:45:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7720:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7731:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7716:3:201"},"nodeType":"YulFunctionCall","src":"7716:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7703:12:201"},"nodeType":"YulFunctionCall","src":"7703:32:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7694:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7767:5:201"}],"functionName":{"name":"validator_revert_uint8","nodeType":"YulIdentifier","src":"7744:22:201"},"nodeType":"YulFunctionCall","src":"7744:29:201"},"nodeType":"YulExpressionStatement","src":"7744:29:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7793:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7801:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7789:3:201"},"nodeType":"YulFunctionCall","src":"7789:15:201"},{"name":"value","nodeType":"YulIdentifier","src":"7806:5:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7782:6:201"},"nodeType":"YulFunctionCall","src":"7782:30:201"},"nodeType":"YulExpressionStatement","src":"7782:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7832:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7840:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7828:3:201"},"nodeType":"YulFunctionCall","src":"7828:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7862:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7873:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7858:3:201"},"nodeType":"YulFunctionCall","src":"7858:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7845:12:201"},"nodeType":"YulFunctionCall","src":"7845:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7821:6:201"},"nodeType":"YulFunctionCall","src":"7821:57:201"},"nodeType":"YulExpressionStatement","src":"7821:57:201"},{"expression":{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"7898:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7906:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7894:3:201"},"nodeType":"YulFunctionCall","src":"7894:16:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7929:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7940:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7925:3:201"},"nodeType":"YulFunctionCall","src":"7925:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7912:12:201"},"nodeType":"YulFunctionCall","src":"7912:33:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7887:6:201"},"nodeType":"YulFunctionCall","src":"7887:59:201"},"nodeType":"YulExpressionStatement","src":"7887:59:201"},{"nodeType":"YulAssignment","src":"7955:16:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"7965:6:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7955:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_PermitSignature_$29019_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7113:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7124:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7136:6:201","type":""}],"src":"7043:934:201"},{"body":{"nodeType":"YulBlock","src":"8156:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8173:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8184:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8166:6:201"},"nodeType":"YulFunctionCall","src":"8166:21:201"},"nodeType":"YulExpressionStatement","src":"8166:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8207:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8218:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8203:3:201"},"nodeType":"YulFunctionCall","src":"8203:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"8223:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8196:6:201"},"nodeType":"YulFunctionCall","src":"8196:30:201"},"nodeType":"YulExpressionStatement","src":"8196:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8246:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8257:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8242:3:201"},"nodeType":"YulFunctionCall","src":"8242:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"8262:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8235:6:201"},"nodeType":"YulFunctionCall","src":"8235:62:201"},"nodeType":"YulExpressionStatement","src":"8235:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8317:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8328:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8313:3:201"},"nodeType":"YulFunctionCall","src":"8313:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"8333:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8306:6:201"},"nodeType":"YulFunctionCall","src":"8306:36:201"},"nodeType":"YulExpressionStatement","src":"8306:36:201"},{"nodeType":"YulAssignment","src":"8351:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8363:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8374:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8359:3:201"},"nodeType":"YulFunctionCall","src":"8359:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8351:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8133:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8147:4:201","type":""}],"src":"7982:402:201"},{"body":{"nodeType":"YulBlock","src":"8563:171:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8580:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8591:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8573:6:201"},"nodeType":"YulFunctionCall","src":"8573:21:201"},"nodeType":"YulExpressionStatement","src":"8573:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8614:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8625:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8610:3:201"},"nodeType":"YulFunctionCall","src":"8610:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"8630:2:201","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8603:6:201"},"nodeType":"YulFunctionCall","src":"8603:30:201"},"nodeType":"YulExpressionStatement","src":"8603:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8653:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8664:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8649:3:201"},"nodeType":"YulFunctionCall","src":"8649:18:201"},{"hexValue":"475076323a206661696c6564207472616e73666572","kind":"string","nodeType":"YulLiteral","src":"8669:23:201","type":"","value":"GPv2: failed transfer"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8642:6:201"},"nodeType":"YulFunctionCall","src":"8642:51:201"},"nodeType":"YulExpressionStatement","src":"8642:51:201"},{"nodeType":"YulAssignment","src":"8702:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8714:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8725:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8710:3:201"},"nodeType":"YulFunctionCall","src":"8710:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8702:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8540:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8554:4:201","type":""}],"src":"8389:345:201"},{"body":{"nodeType":"YulBlock","src":"8830:489:201","statements":[{"body":{"nodeType":"YulBlock","src":"8874:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8883:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8886:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8876:6:201"},"nodeType":"YulFunctionCall","src":"8876:12:201"},"nodeType":"YulExpressionStatement","src":"8876:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"8851:3:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"8856:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8847:3:201"},"nodeType":"YulFunctionCall","src":"8847:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"8868:4:201","type":"","value":"0x20"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"8843:3:201"},"nodeType":"YulFunctionCall","src":"8843:30:201"},"nodeType":"YulIf","src":"8840:50:201"},{"nodeType":"YulVariableDeclaration","src":"8899:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8919:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8913:5:201"},"nodeType":"YulFunctionCall","src":"8913:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"8903:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8931:35:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"8953:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"8961:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8949:3:201"},"nodeType":"YulFunctionCall","src":"8949:17:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"8935:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"9049:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9070:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9073:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9063:6:201"},"nodeType":"YulFunctionCall","src":"9063:88:201"},"nodeType":"YulExpressionStatement","src":"9063:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9171:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"9174:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9164:6:201"},"nodeType":"YulFunctionCall","src":"9164:15:201"},"nodeType":"YulExpressionStatement","src":"9164:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9199:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9202:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9192:6:201"},"nodeType":"YulFunctionCall","src":"9192:15:201"},"nodeType":"YulExpressionStatement","src":"9192:15:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"8984:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"8996:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"8981:2:201"},"nodeType":"YulFunctionCall","src":"8981:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"9020:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"9032:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9017:2:201"},"nodeType":"YulFunctionCall","src":"9017:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"8978:2:201"},"nodeType":"YulFunctionCall","src":"8978:62:201"},"nodeType":"YulIf","src":"8975:242:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9233:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"9237:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9226:6:201"},"nodeType":"YulFunctionCall","src":"9226:22:201"},"nodeType":"YulExpressionStatement","src":"9226:22:201"},{"nodeType":"YulAssignment","src":"9257:15:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"9266:6:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"9257:5:201"}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"9288:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9302:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9296:5:201"},"nodeType":"YulFunctionCall","src":"9296:16:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9281:6:201"},"nodeType":"YulFunctionCall","src":"9281:32:201"},"nodeType":"YulExpressionStatement","src":"9281:32:201"}]},"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8801:9:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"8812:3:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"8820:5:201","type":""}],"src":"8739:580:201"},{"body":{"nodeType":"YulBlock","src":"9384:132:201","statements":[{"nodeType":"YulAssignment","src":"9394:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"9409:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9403:5:201"},"nodeType":"YulFunctionCall","src":"9403:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"9394:5:201"}]},{"body":{"nodeType":"YulBlock","src":"9494:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9503:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9506:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9496:6:201"},"nodeType":"YulFunctionCall","src":"9496:12:201"},"nodeType":"YulExpressionStatement","src":"9496:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9438:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9449:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"9456:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9445:3:201"},"nodeType":"YulFunctionCall","src":"9445:46:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"9435:2:201"},"nodeType":"YulFunctionCall","src":"9435:57:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9428:6:201"},"nodeType":"YulFunctionCall","src":"9428:65:201"},"nodeType":"YulIf","src":"9425:85:201"}]},"name":"abi_decode_uint128_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"9363:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"9374:5:201","type":""}],"src":"9324:192:201"},{"body":{"nodeType":"YulBlock","src":"9580:110:201","statements":[{"nodeType":"YulAssignment","src":"9590:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"9605:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9599:5:201"},"nodeType":"YulFunctionCall","src":"9599:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"9590:5:201"}]},{"body":{"nodeType":"YulBlock","src":"9668:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9677:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9680:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9670:6:201"},"nodeType":"YulFunctionCall","src":"9670:12:201"},"nodeType":"YulExpressionStatement","src":"9670:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9634:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9645:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"9652:12:201","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9641:3:201"},"nodeType":"YulFunctionCall","src":"9641:24:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"9631:2:201"},"nodeType":"YulFunctionCall","src":"9631:35:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9624:6:201"},"nodeType":"YulFunctionCall","src":"9624:43:201"},"nodeType":"YulIf","src":"9621:63:201"}]},"name":"abi_decode_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"9559:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"9570:5:201","type":""}],"src":"9521:169:201"},{"body":{"nodeType":"YulBlock","src":"9754:104:201","statements":[{"nodeType":"YulAssignment","src":"9764:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"9779:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9773:5:201"},"nodeType":"YulFunctionCall","src":"9773:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"9764:5:201"}]},{"body":{"nodeType":"YulBlock","src":"9836:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9845:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9848:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9838:6:201"},"nodeType":"YulFunctionCall","src":"9838:12:201"},"nodeType":"YulExpressionStatement","src":"9838:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9808:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9819:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"9826:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9815:3:201"},"nodeType":"YulFunctionCall","src":"9815:18:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"9805:2:201"},"nodeType":"YulFunctionCall","src":"9805:29:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9798:6:201"},"nodeType":"YulFunctionCall","src":"9798:37:201"},"nodeType":"YulIf","src":"9795:57:201"}]},"name":"abi_decode_uint16_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"9733:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"9744:5:201","type":""}],"src":"9695:163:201"},{"body":{"nodeType":"YulBlock","src":"9923:86:201","statements":[{"nodeType":"YulAssignment","src":"9933:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"9948:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9942:5:201"},"nodeType":"YulFunctionCall","src":"9942:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"9933:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9997:5:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"9964:32:201"},"nodeType":"YulFunctionCall","src":"9964:39:201"},"nodeType":"YulExpressionStatement","src":"9964:39:201"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"9902:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"9913:5:201","type":""}],"src":"9863:146:201"},{"body":{"nodeType":"YulBlock","src":"10125:1536:201","statements":[{"body":{"nodeType":"YulBlock","src":"10172:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10181:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10184:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10174:6:201"},"nodeType":"YulFunctionCall","src":"10174:12:201"},"nodeType":"YulExpressionStatement","src":"10174:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"10146:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"10155:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10142:3:201"},"nodeType":"YulFunctionCall","src":"10142:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"10167:3:201","type":"","value":"480"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10138:3:201"},"nodeType":"YulFunctionCall","src":"10138:33:201"},"nodeType":"YulIf","src":"10135:53:201"},{"nodeType":"YulVariableDeclaration","src":"10197:30:201","value":{"arguments":[],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"10210:15:201"},"nodeType":"YulFunctionCall","src":"10210:17:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"10201:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10243:5:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10303:9:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"10314:7:201"}],"functionName":{"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulIdentifier","src":"10250:52:201"},"nodeType":"YulFunctionCall","src":"10250:72:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10236:6:201"},"nodeType":"YulFunctionCall","src":"10236:87:201"},"nodeType":"YulExpressionStatement","src":"10236:87:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10343:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"10350:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10339:3:201"},"nodeType":"YulFunctionCall","src":"10339:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10389:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10400:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10385:3:201"},"nodeType":"YulFunctionCall","src":"10385:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"10355:29:201"},"nodeType":"YulFunctionCall","src":"10355:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10332:6:201"},"nodeType":"YulFunctionCall","src":"10332:73:201"},"nodeType":"YulExpressionStatement","src":"10332:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10425:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"10432:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10421:3:201"},"nodeType":"YulFunctionCall","src":"10421:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10471:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10482:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10467:3:201"},"nodeType":"YulFunctionCall","src":"10467:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"10437:29:201"},"nodeType":"YulFunctionCall","src":"10437:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10414:6:201"},"nodeType":"YulFunctionCall","src":"10414:73:201"},"nodeType":"YulExpressionStatement","src":"10414:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10507:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"10514:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10503:3:201"},"nodeType":"YulFunctionCall","src":"10503:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10553:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10564:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10549:3:201"},"nodeType":"YulFunctionCall","src":"10549:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"10519:29:201"},"nodeType":"YulFunctionCall","src":"10519:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10496:6:201"},"nodeType":"YulFunctionCall","src":"10496:73:201"},"nodeType":"YulExpressionStatement","src":"10496:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10589:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"10596:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10585:3:201"},"nodeType":"YulFunctionCall","src":"10585:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10636:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10647:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10632:3:201"},"nodeType":"YulFunctionCall","src":"10632:19:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"10602:29:201"},"nodeType":"YulFunctionCall","src":"10602:50:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10578:6:201"},"nodeType":"YulFunctionCall","src":"10578:75:201"},"nodeType":"YulExpressionStatement","src":"10578:75:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10673:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"10680:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10669:3:201"},"nodeType":"YulFunctionCall","src":"10669:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10720:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10731:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10716:3:201"},"nodeType":"YulFunctionCall","src":"10716:19:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"10686:29:201"},"nodeType":"YulFunctionCall","src":"10686:50:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10662:6:201"},"nodeType":"YulFunctionCall","src":"10662:75:201"},"nodeType":"YulExpressionStatement","src":"10662:75:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10757:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"10764:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10753:3:201"},"nodeType":"YulFunctionCall","src":"10753:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10803:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10814:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10799:3:201"},"nodeType":"YulFunctionCall","src":"10799:19:201"}],"functionName":{"name":"abi_decode_uint40_fromMemory","nodeType":"YulIdentifier","src":"10770:28:201"},"nodeType":"YulFunctionCall","src":"10770:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10746:6:201"},"nodeType":"YulFunctionCall","src":"10746:74:201"},"nodeType":"YulExpressionStatement","src":"10746:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10840:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"10847:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10836:3:201"},"nodeType":"YulFunctionCall","src":"10836:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10886:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10897:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10882:3:201"},"nodeType":"YulFunctionCall","src":"10882:19:201"}],"functionName":{"name":"abi_decode_uint16_fromMemory","nodeType":"YulIdentifier","src":"10853:28:201"},"nodeType":"YulFunctionCall","src":"10853:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10829:6:201"},"nodeType":"YulFunctionCall","src":"10829:74:201"},"nodeType":"YulExpressionStatement","src":"10829:74:201"},{"nodeType":"YulVariableDeclaration","src":"10912:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10922:3:201","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10916:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10945:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10952:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10941:3:201"},"nodeType":"YulFunctionCall","src":"10941:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10991:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11002:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10987:3:201"},"nodeType":"YulFunctionCall","src":"10987:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"10957:29:201"},"nodeType":"YulFunctionCall","src":"10957:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10934:6:201"},"nodeType":"YulFunctionCall","src":"10934:73:201"},"nodeType":"YulExpressionStatement","src":"10934:73:201"},{"nodeType":"YulVariableDeclaration","src":"11016:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11026:3:201","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"11020:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11049:5:201"},{"name":"_2","nodeType":"YulIdentifier","src":"11056:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11045:3:201"},"nodeType":"YulFunctionCall","src":"11045:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11095:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"11106:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11091:3:201"},"nodeType":"YulFunctionCall","src":"11091:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"11061:29:201"},"nodeType":"YulFunctionCall","src":"11061:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11038:6:201"},"nodeType":"YulFunctionCall","src":"11038:73:201"},"nodeType":"YulExpressionStatement","src":"11038:73:201"},{"nodeType":"YulVariableDeclaration","src":"11120:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11130:3:201","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"11124:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11153:5:201"},{"name":"_3","nodeType":"YulIdentifier","src":"11160:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11149:3:201"},"nodeType":"YulFunctionCall","src":"11149:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11199:9:201"},{"name":"_3","nodeType":"YulIdentifier","src":"11210:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11195:3:201"},"nodeType":"YulFunctionCall","src":"11195:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"11165:29:201"},"nodeType":"YulFunctionCall","src":"11165:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11142:6:201"},"nodeType":"YulFunctionCall","src":"11142:73:201"},"nodeType":"YulExpressionStatement","src":"11142:73:201"},{"nodeType":"YulVariableDeclaration","src":"11224:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11234:3:201","type":"","value":"352"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"11228:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11257:5:201"},{"name":"_4","nodeType":"YulIdentifier","src":"11264:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11253:3:201"},"nodeType":"YulFunctionCall","src":"11253:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11303:9:201"},{"name":"_4","nodeType":"YulIdentifier","src":"11314:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11299:3:201"},"nodeType":"YulFunctionCall","src":"11299:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"11269:29:201"},"nodeType":"YulFunctionCall","src":"11269:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11246:6:201"},"nodeType":"YulFunctionCall","src":"11246:73:201"},"nodeType":"YulExpressionStatement","src":"11246:73:201"},{"nodeType":"YulVariableDeclaration","src":"11328:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11338:3:201","type":"","value":"384"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"11332:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11361:5:201"},{"name":"_5","nodeType":"YulIdentifier","src":"11368:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11357:3:201"},"nodeType":"YulFunctionCall","src":"11357:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11407:9:201"},{"name":"_5","nodeType":"YulIdentifier","src":"11418:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11403:3:201"},"nodeType":"YulFunctionCall","src":"11403:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"11373:29:201"},"nodeType":"YulFunctionCall","src":"11373:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11350:6:201"},"nodeType":"YulFunctionCall","src":"11350:73:201"},"nodeType":"YulExpressionStatement","src":"11350:73:201"},{"nodeType":"YulVariableDeclaration","src":"11432:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11442:3:201","type":"","value":"416"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"11436:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11465:5:201"},{"name":"_6","nodeType":"YulIdentifier","src":"11472:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11461:3:201"},"nodeType":"YulFunctionCall","src":"11461:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11511:9:201"},{"name":"_6","nodeType":"YulIdentifier","src":"11522:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11507:3:201"},"nodeType":"YulFunctionCall","src":"11507:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"11477:29:201"},"nodeType":"YulFunctionCall","src":"11477:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11454:6:201"},"nodeType":"YulFunctionCall","src":"11454:73:201"},"nodeType":"YulExpressionStatement","src":"11454:73:201"},{"nodeType":"YulVariableDeclaration","src":"11536:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11546:3:201","type":"","value":"448"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"11540:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11569:5:201"},{"name":"_7","nodeType":"YulIdentifier","src":"11576:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11565:3:201"},"nodeType":"YulFunctionCall","src":"11565:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11615:9:201"},{"name":"_7","nodeType":"YulIdentifier","src":"11626:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11611:3:201"},"nodeType":"YulFunctionCall","src":"11611:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"11581:29:201"},"nodeType":"YulFunctionCall","src":"11581:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11558:6:201"},"nodeType":"YulFunctionCall","src":"11558:73:201"},"nodeType":"YulExpressionStatement","src":"11558:73:201"},{"nodeType":"YulAssignment","src":"11640:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"11650:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11640:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10091:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"10102:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"10114:6:201","type":""}],"src":"10014:1647:201"},{"body":{"nodeType":"YulBlock","src":"11931:428:201","statements":[{"nodeType":"YulAssignment","src":"11941:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11953:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11964:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11949:3:201"},"nodeType":"YulFunctionCall","src":"11949:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11941:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"11977:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11987:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11981:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12045:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12060:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12068:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12056:3:201"},"nodeType":"YulFunctionCall","src":"12056:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12038:6:201"},"nodeType":"YulFunctionCall","src":"12038:34:201"},"nodeType":"YulExpressionStatement","src":"12038:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12092:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12103:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12088:3:201"},"nodeType":"YulFunctionCall","src":"12088:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12112:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12120:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12108:3:201"},"nodeType":"YulFunctionCall","src":"12108:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12081:6:201"},"nodeType":"YulFunctionCall","src":"12081:43:201"},"nodeType":"YulExpressionStatement","src":"12081:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12144:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12155:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12140:3:201"},"nodeType":"YulFunctionCall","src":"12140:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"12160:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12133:6:201"},"nodeType":"YulFunctionCall","src":"12133:34:201"},"nodeType":"YulExpressionStatement","src":"12133:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12187:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12198:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12183:3:201"},"nodeType":"YulFunctionCall","src":"12183:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"12203:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12176:6:201"},"nodeType":"YulFunctionCall","src":"12176:34:201"},"nodeType":"YulExpressionStatement","src":"12176:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12230:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12241:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12226:3:201"},"nodeType":"YulFunctionCall","src":"12226:19:201"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"12251:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"12259:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12247:3:201"},"nodeType":"YulFunctionCall","src":"12247:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12219:6:201"},"nodeType":"YulFunctionCall","src":"12219:46:201"},"nodeType":"YulExpressionStatement","src":"12219:46:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12285:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12296:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12281:3:201"},"nodeType":"YulFunctionCall","src":"12281:19:201"},{"name":"value5","nodeType":"YulIdentifier","src":"12302:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12274:6:201"},"nodeType":"YulFunctionCall","src":"12274:35:201"},"nodeType":"YulExpressionStatement","src":"12274:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12329:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12340:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12325:3:201"},"nodeType":"YulFunctionCall","src":"12325:19:201"},{"name":"value6","nodeType":"YulIdentifier","src":"12346:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12318:6:201"},"nodeType":"YulFunctionCall","src":"12318:35:201"},"nodeType":"YulExpressionStatement","src":"12318:35:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11852:9:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"11863:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"11871:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"11879:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11887:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11895:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11903:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11911:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11922:4:201","type":""}],"src":"11666:693:201"},{"body":{"nodeType":"YulBlock","src":"12521:241:201","statements":[{"nodeType":"YulAssignment","src":"12531:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12543:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12554:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12539:3:201"},"nodeType":"YulFunctionCall","src":"12539:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12531:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"12566:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12576:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12570:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12634:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12649:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12657:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12645:3:201"},"nodeType":"YulFunctionCall","src":"12645:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12627:6:201"},"nodeType":"YulFunctionCall","src":"12627:34:201"},"nodeType":"YulExpressionStatement","src":"12627:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12681:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12692:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12677:3:201"},"nodeType":"YulFunctionCall","src":"12677:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"12697:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12670:6:201"},"nodeType":"YulFunctionCall","src":"12670:34:201"},"nodeType":"YulExpressionStatement","src":"12670:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12724:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12735:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12720:3:201"},"nodeType":"YulFunctionCall","src":"12720:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"12744:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12752:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12740:3:201"},"nodeType":"YulFunctionCall","src":"12740:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12713:6:201"},"nodeType":"YulFunctionCall","src":"12713:43:201"},"nodeType":"YulExpressionStatement","src":"12713:43:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12474:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12485:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12493:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12501:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12512:4:201","type":""}],"src":"12364:398:201"},{"body":{"nodeType":"YulBlock","src":"12941:177:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12958:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12969:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12951:6:201"},"nodeType":"YulFunctionCall","src":"12951:21:201"},"nodeType":"YulExpressionStatement","src":"12951:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12992:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13003:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12988:3:201"},"nodeType":"YulFunctionCall","src":"12988:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"13008:2:201","type":"","value":"27"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12981:6:201"},"nodeType":"YulFunctionCall","src":"12981:30:201"},"nodeType":"YulExpressionStatement","src":"12981:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13031:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13042:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13027:3:201"},"nodeType":"YulFunctionCall","src":"13027:18:201"},{"hexValue":"554e45585045435445445f414d4f554e545f57495448445241574e","kind":"string","nodeType":"YulLiteral","src":"13047:29:201","type":"","value":"UNEXPECTED_AMOUNT_WITHDRAWN"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13020:6:201"},"nodeType":"YulFunctionCall","src":"13020:57:201"},"nodeType":"YulExpressionStatement","src":"13020:57:201"},{"nodeType":"YulAssignment","src":"13086:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13098:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13109:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13094:3:201"},"nodeType":"YulFunctionCall","src":"13094:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13086:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_85a045c7862eb0e81d59fe8dfd2ed8c824917ce215328caf39199676e5939f87__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12918:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12932:4:201","type":""}],"src":"12767:351:201"},{"body":{"nodeType":"YulBlock","src":"13201:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"13247:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13256:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13259:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13249:6:201"},"nodeType":"YulFunctionCall","src":"13249:12:201"},"nodeType":"YulExpressionStatement","src":"13249:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13222:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"13231:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13218:3:201"},"nodeType":"YulFunctionCall","src":"13218:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"13243:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13214:3:201"},"nodeType":"YulFunctionCall","src":"13214:32:201"},"nodeType":"YulIf","src":"13211:52:201"},{"nodeType":"YulVariableDeclaration","src":"13272:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13291:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13285:5:201"},"nodeType":"YulFunctionCall","src":"13285:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13276:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"13354:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13363:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13366:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13356:6:201"},"nodeType":"YulFunctionCall","src":"13356:12:201"},"nodeType":"YulExpressionStatement","src":"13356:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13323:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13344:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13337:6:201"},"nodeType":"YulFunctionCall","src":"13337:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13330:6:201"},"nodeType":"YulFunctionCall","src":"13330:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"13320:2:201"},"nodeType":"YulFunctionCall","src":"13320:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13313:6:201"},"nodeType":"YulFunctionCall","src":"13313:40:201"},"nodeType":"YulIf","src":"13310:60:201"},{"nodeType":"YulAssignment","src":"13379:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"13389:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13379:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13167:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13178:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13190:6:201","type":""}],"src":"13123:277:201"},{"body":{"nodeType":"YulBlock","src":"13579:166:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13596:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13607:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13589:6:201"},"nodeType":"YulFunctionCall","src":"13589:21:201"},"nodeType":"YulExpressionStatement","src":"13589:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13630:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13641:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13626:3:201"},"nodeType":"YulFunctionCall","src":"13626:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"13646:2:201","type":"","value":"16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13619:6:201"},"nodeType":"YulFunctionCall","src":"13619:30:201"},"nodeType":"YulExpressionStatement","src":"13619:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13669:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13680:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13665:3:201"},"nodeType":"YulFunctionCall","src":"13665:18:201"},{"hexValue":"494e56414c49445f4155475553545553","kind":"string","nodeType":"YulLiteral","src":"13685:18:201","type":"","value":"INVALID_AUGUSTUS"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13658:6:201"},"nodeType":"YulFunctionCall","src":"13658:46:201"},"nodeType":"YulExpressionStatement","src":"13658:46:201"},{"nodeType":"YulAssignment","src":"13713:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13725:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13736:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13721:3:201"},"nodeType":"YulFunctionCall","src":"13721:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13713:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_3202e1fc4f78abbce03a97de69392b3f69ebba48c41588ffb32a1c8b97349f74__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13556:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13570:4:201","type":""}],"src":"13405:340:201"},{"body":{"nodeType":"YulBlock","src":"13782:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13799:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13802:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13792:6:201"},"nodeType":"YulFunctionCall","src":"13792:88:201"},"nodeType":"YulExpressionStatement","src":"13792:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13896:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"13899:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13889:6:201"},"nodeType":"YulFunctionCall","src":"13889:15:201"},"nodeType":"YulExpressionStatement","src":"13889:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13920:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13923:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13913:6:201"},"nodeType":"YulFunctionCall","src":"13913:15:201"},"nodeType":"YulExpressionStatement","src":"13913:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"13750:184:201"},{"body":{"nodeType":"YulBlock","src":"13988:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"14010:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"14012:16:201"},"nodeType":"YulFunctionCall","src":"14012:18:201"},"nodeType":"YulExpressionStatement","src":"14012:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"14004:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"14007:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"14001:2:201"},"nodeType":"YulFunctionCall","src":"14001:8:201"},"nodeType":"YulIf","src":"13998:34:201"},{"nodeType":"YulAssignment","src":"14041:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"14053:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"14056:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"14049:3:201"},"nodeType":"YulFunctionCall","src":"14049:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"14041:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"13970:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"13973:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"13979:4:201","type":""}],"src":"13939:125:201"},{"body":{"nodeType":"YulBlock","src":"14133:418:201","statements":[{"nodeType":"YulVariableDeclaration","src":"14143:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14158:1:201","type":"","value":"1"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"14147:7:201","type":""}]},{"nodeType":"YulAssignment","src":"14168:16:201","value":{"name":"power_1","nodeType":"YulIdentifier","src":"14177:7:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"14168:5:201"}]},{"nodeType":"YulAssignment","src":"14193:13:201","value":{"name":"_base","nodeType":"YulIdentifier","src":"14201:5:201"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"14193:4:201"}]},{"body":{"nodeType":"YulBlock","src":"14257:288:201","statements":[{"body":{"nodeType":"YulBlock","src":"14362:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"14364:16:201"},"nodeType":"YulFunctionCall","src":"14364:18:201"},"nodeType":"YulExpressionStatement","src":"14364:18:201"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"14277:4:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14287:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base","nodeType":"YulIdentifier","src":"14355:4:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"14283:3:201"},"nodeType":"YulFunctionCall","src":"14283:77:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14274:2:201"},"nodeType":"YulFunctionCall","src":"14274:87:201"},"nodeType":"YulIf","src":"14271:113:201"},{"body":{"nodeType":"YulBlock","src":"14423:29:201","statements":[{"nodeType":"YulAssignment","src":"14425:25:201","value":{"arguments":[{"name":"power","nodeType":"YulIdentifier","src":"14438:5:201"},{"name":"base","nodeType":"YulIdentifier","src":"14445:4:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"14434:3:201"},"nodeType":"YulFunctionCall","src":"14434:16:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"14425:5:201"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"14404:8:201"},{"name":"power_1","nodeType":"YulIdentifier","src":"14414:7:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14400:3:201"},"nodeType":"YulFunctionCall","src":"14400:22:201"},"nodeType":"YulIf","src":"14397:55:201"},{"nodeType":"YulAssignment","src":"14465:23:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"14477:4:201"},{"name":"base","nodeType":"YulIdentifier","src":"14483:4:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"14473:3:201"},"nodeType":"YulFunctionCall","src":"14473:15:201"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"14465:4:201"}]},{"nodeType":"YulAssignment","src":"14501:34:201","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"14517:7:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"14526:8:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"14513:3:201"},"nodeType":"YulFunctionCall","src":"14513:22:201"},"variableNames":[{"name":"exponent","nodeType":"YulIdentifier","src":"14501:8:201"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"14226:8:201"},{"name":"power_1","nodeType":"YulIdentifier","src":"14236:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14223:2:201"},"nodeType":"YulFunctionCall","src":"14223:21:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"14245:3:201","statements":[]},"pre":{"nodeType":"YulBlock","src":"14219:3:201","statements":[]},"src":"14215:330:201"}]},"name":"checked_exp_helper","nodeType":"YulFunctionDefinition","parameters":[{"name":"_base","nodeType":"YulTypedName","src":"14097:5:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"14104:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"14117:5:201","type":""},{"name":"base","nodeType":"YulTypedName","src":"14124:4:201","type":""}],"src":"14069:482:201"},{"body":{"nodeType":"YulBlock","src":"14615:807:201","statements":[{"body":{"nodeType":"YulBlock","src":"14653:52:201","statements":[{"nodeType":"YulAssignment","src":"14667:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14676:1:201","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"14667:5:201"}]},{"nodeType":"YulLeave","src":"14690:5:201"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"14635:8:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"14628:6:201"},"nodeType":"YulFunctionCall","src":"14628:16:201"},"nodeType":"YulIf","src":"14625:80:201"},{"body":{"nodeType":"YulBlock","src":"14738:52:201","statements":[{"nodeType":"YulAssignment","src":"14752:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14761:1:201","type":"","value":"0"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"14752:5:201"}]},{"nodeType":"YulLeave","src":"14775:5:201"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"14724:4:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"14717:6:201"},"nodeType":"YulFunctionCall","src":"14717:12:201"},"nodeType":"YulIf","src":"14714:76:201"},{"cases":[{"body":{"nodeType":"YulBlock","src":"14826:52:201","statements":[{"nodeType":"YulAssignment","src":"14840:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14849:1:201","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"14840:5:201"}]},{"nodeType":"YulLeave","src":"14863:5:201"}]},"nodeType":"YulCase","src":"14819:59:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14824:1:201","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"14894:123:201","statements":[{"body":{"nodeType":"YulBlock","src":"14929:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"14931:16:201"},"nodeType":"YulFunctionCall","src":"14931:18:201"},"nodeType":"YulExpressionStatement","src":"14931:18:201"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"14914:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"14924:3:201","type":"","value":"255"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14911:2:201"},"nodeType":"YulFunctionCall","src":"14911:17:201"},"nodeType":"YulIf","src":"14908:43:201"},{"nodeType":"YulAssignment","src":"14964:25:201","value":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"14977:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"14987:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"14973:3:201"},"nodeType":"YulFunctionCall","src":"14973:16:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"14964:5:201"}]},{"nodeType":"YulLeave","src":"15002:5:201"}]},"nodeType":"YulCase","src":"14887:130:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14892:1:201","type":"","value":"2"}}],"expression":{"name":"base","nodeType":"YulIdentifier","src":"14806:4:201"},"nodeType":"YulSwitch","src":"14799:218:201"},{"body":{"nodeType":"YulBlock","src":"15115:70:201","statements":[{"nodeType":"YulAssignment","src":"15129:28:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"15142:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"15148:8:201"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"15138:3:201"},"nodeType":"YulFunctionCall","src":"15138:19:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"15129:5:201"}]},{"nodeType":"YulLeave","src":"15170:5:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"15039:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"15045:2:201","type":"","value":"11"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15036:2:201"},"nodeType":"YulFunctionCall","src":"15036:12:201"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"15053:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"15063:2:201","type":"","value":"78"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15050:2:201"},"nodeType":"YulFunctionCall","src":"15050:16:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15032:3:201"},"nodeType":"YulFunctionCall","src":"15032:35:201"},{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"15076:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"15082:3:201","type":"","value":"307"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15073:2:201"},"nodeType":"YulFunctionCall","src":"15073:13:201"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"15091:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"15101:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15088:2:201"},"nodeType":"YulFunctionCall","src":"15088:16:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15069:3:201"},"nodeType":"YulFunctionCall","src":"15069:36:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"15029:2:201"},"nodeType":"YulFunctionCall","src":"15029:77:201"},"nodeType":"YulIf","src":"15026:159:201"},{"nodeType":"YulVariableDeclaration","src":"15194:57:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"15236:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"15242:8:201"}],"functionName":{"name":"checked_exp_helper","nodeType":"YulIdentifier","src":"15217:18:201"},"nodeType":"YulFunctionCall","src":"15217:34:201"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"15198:7:201","type":""},{"name":"base_1","nodeType":"YulTypedName","src":"15207:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"15356:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15358:16:201"},"nodeType":"YulFunctionCall","src":"15358:18:201"},"nodeType":"YulExpressionStatement","src":"15358:18:201"}]},"condition":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"15266:7:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15279:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base_1","nodeType":"YulIdentifier","src":"15347:6:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"15275:3:201"},"nodeType":"YulFunctionCall","src":"15275:79:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15263:2:201"},"nodeType":"YulFunctionCall","src":"15263:92:201"},"nodeType":"YulIf","src":"15260:118:201"},{"nodeType":"YulAssignment","src":"15387:29:201","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"15400:7:201"},{"name":"base_1","nodeType":"YulIdentifier","src":"15409:6:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"15396:3:201"},"nodeType":"YulFunctionCall","src":"15396:20:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"15387:5:201"}]}]},"name":"checked_exp_unsigned","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"14586:4:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"14592:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"14605:5:201","type":""}],"src":"14556:866:201"},{"body":{"nodeType":"YulBlock","src":"15497:61:201","statements":[{"nodeType":"YulAssignment","src":"15507:45:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"15537:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"15543:8:201"}],"functionName":{"name":"checked_exp_unsigned","nodeType":"YulIdentifier","src":"15516:20:201"},"nodeType":"YulFunctionCall","src":"15516:36:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"15507:5:201"}]}]},"name":"checked_exp_t_uint256_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"15468:4:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"15474:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"15487:5:201","type":""}],"src":"15427:131:201"},{"body":{"nodeType":"YulBlock","src":"15737:181:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15754:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15765:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15747:6:201"},"nodeType":"YulFunctionCall","src":"15747:21:201"},"nodeType":"YulExpressionStatement","src":"15747:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15788:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15799:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15784:3:201"},"nodeType":"YulFunctionCall","src":"15784:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"15804:2:201","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15777:6:201"},"nodeType":"YulFunctionCall","src":"15777:30:201"},"nodeType":"YulExpressionStatement","src":"15777:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15827:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15838:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15823:3:201"},"nodeType":"YulFunctionCall","src":"15823:18:201"},{"hexValue":"4d494e5f414d4f554e545f455843454544535f4d41585f534c495050414745","kind":"string","nodeType":"YulLiteral","src":"15843:33:201","type":"","value":"MIN_AMOUNT_EXCEEDS_MAX_SLIPPAGE"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15816:6:201"},"nodeType":"YulFunctionCall","src":"15816:61:201"},"nodeType":"YulExpressionStatement","src":"15816:61:201"},{"nodeType":"YulAssignment","src":"15886:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15898:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15909:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15894:3:201"},"nodeType":"YulFunctionCall","src":"15894:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15886:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_8333172953304c474b0cfe8eccb09fd2b08c1198c3d73a3ed0388645fb84d24e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15714:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15728:4:201","type":""}],"src":"15563:355:201"},{"body":{"nodeType":"YulBlock","src":"16097:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16114:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16125:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16107:6:201"},"nodeType":"YulFunctionCall","src":"16107:21:201"},"nodeType":"YulExpressionStatement","src":"16107:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16148:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16159:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16144:3:201"},"nodeType":"YulFunctionCall","src":"16144:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"16164:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16137:6:201"},"nodeType":"YulFunctionCall","src":"16137:30:201"},"nodeType":"YulExpressionStatement","src":"16137:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16187:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16198:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16183:3:201"},"nodeType":"YulFunctionCall","src":"16183:18:201"},{"hexValue":"494e53554646494349454e545f42414c414e43455f4245464f52455f53574150","kind":"string","nodeType":"YulLiteral","src":"16203:34:201","type":"","value":"INSUFFICIENT_BALANCE_BEFORE_SWAP"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16176:6:201"},"nodeType":"YulFunctionCall","src":"16176:62:201"},"nodeType":"YulExpressionStatement","src":"16176:62:201"},{"nodeType":"YulAssignment","src":"16247:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16259:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16270:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16255:3:201"},"nodeType":"YulFunctionCall","src":"16255:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16247:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_51fc4946c16284910827fc38bc7611d60d4dd1f7d8fefa0da6f8642035c3c48b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16074:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16088:4:201","type":""}],"src":"15923:356:201"},{"body":{"nodeType":"YulBlock","src":"16365:178:201","statements":[{"body":{"nodeType":"YulBlock","src":"16411:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16420:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16423:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16413:6:201"},"nodeType":"YulFunctionCall","src":"16413:12:201"},"nodeType":"YulExpressionStatement","src":"16413:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"16386:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"16395:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16382:3:201"},"nodeType":"YulFunctionCall","src":"16382:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"16407:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"16378:3:201"},"nodeType":"YulFunctionCall","src":"16378:32:201"},"nodeType":"YulIf","src":"16375:52:201"},{"nodeType":"YulVariableDeclaration","src":"16436:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16455:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16449:5:201"},"nodeType":"YulFunctionCall","src":"16449:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"16440:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16507:5:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"16474:32:201"},"nodeType":"YulFunctionCall","src":"16474:39:201"},"nodeType":"YulExpressionStatement","src":"16474:39:201"},{"nodeType":"YulAssignment","src":"16522:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"16532:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"16522:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16331:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"16342:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"16354:6:201","type":""}],"src":"16284:259:201"},{"body":{"nodeType":"YulBlock","src":"16722:181:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16739:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16750:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16732:6:201"},"nodeType":"YulFunctionCall","src":"16732:21:201"},"nodeType":"YulExpressionStatement","src":"16732:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16773:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16784:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16769:3:201"},"nodeType":"YulFunctionCall","src":"16769:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"16789:2:201","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16762:6:201"},"nodeType":"YulFunctionCall","src":"16762:30:201"},"nodeType":"YulExpressionStatement","src":"16762:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16812:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16823:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16808:3:201"},"nodeType":"YulFunctionCall","src":"16808:18:201"},{"hexValue":"46524f4d5f414d4f554e545f4f46465345545f4f55545f4f465f52414e4745","kind":"string","nodeType":"YulLiteral","src":"16828:33:201","type":"","value":"FROM_AMOUNT_OFFSET_OUT_OF_RANGE"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16801:6:201"},"nodeType":"YulFunctionCall","src":"16801:61:201"},"nodeType":"YulExpressionStatement","src":"16801:61:201"},{"nodeType":"YulAssignment","src":"16871:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16883:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16894:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16879:3:201"},"nodeType":"YulFunctionCall","src":"16879:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16871:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_f920786e74a0af1b51a64ca021265d328aab062025c81f249165aca83960cff7__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16699:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16713:4:201","type":""}],"src":"16548:355:201"},{"body":{"nodeType":"YulBlock","src":"16961:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"16971:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"16980:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"16975:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"17040:63:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"17065:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"17070:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17061:3:201"},"nodeType":"YulFunctionCall","src":"17061:11:201"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"17084:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"17089:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17080:3:201"},"nodeType":"YulFunctionCall","src":"17080:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17074:5:201"},"nodeType":"YulFunctionCall","src":"17074:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17054:6:201"},"nodeType":"YulFunctionCall","src":"17054:39:201"},"nodeType":"YulExpressionStatement","src":"17054:39:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"17001:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"17004:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16998:2:201"},"nodeType":"YulFunctionCall","src":"16998:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"17012:19:201","statements":[{"nodeType":"YulAssignment","src":"17014:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"17023:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"17026:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17019:3:201"},"nodeType":"YulFunctionCall","src":"17019:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"17014:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"16994:3:201","statements":[]},"src":"16990:113:201"},{"body":{"nodeType":"YulBlock","src":"17129:31:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"17142:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"17147:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17138:3:201"},"nodeType":"YulFunctionCall","src":"17138:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"17156:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17131:6:201"},"nodeType":"YulFunctionCall","src":"17131:27:201"},"nodeType":"YulExpressionStatement","src":"17131:27:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"17118:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"17121:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"17115:2:201"},"nodeType":"YulFunctionCall","src":"17115:13:201"},"nodeType":"YulIf","src":"17112:48:201"}]},"name":"copy_memory_to_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"16939:3:201","type":""},{"name":"dst","nodeType":"YulTypedName","src":"16944:3:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"16949:6:201","type":""}],"src":"16908:258:201"},{"body":{"nodeType":"YulBlock","src":"17308:137:201","statements":[{"nodeType":"YulVariableDeclaration","src":"17318:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"17338:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17332:5:201"},"nodeType":"YulFunctionCall","src":"17332:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"17322:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"17380:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"17388:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17376:3:201"},"nodeType":"YulFunctionCall","src":"17376:17:201"},{"name":"pos","nodeType":"YulIdentifier","src":"17395:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"17400:6:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"17354:21:201"},"nodeType":"YulFunctionCall","src":"17354:53:201"},"nodeType":"YulExpressionStatement","src":"17354:53:201"},{"nodeType":"YulAssignment","src":"17416:23:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"17427:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"17432:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17423:3:201"},"nodeType":"YulFunctionCall","src":"17423:16:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"17416:3:201"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"17284:3:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"17289:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"17300:3:201","type":""}],"src":"17171:274:201"},{"body":{"nodeType":"YulBlock","src":"17624:174:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17641:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17652:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17634:6:201"},"nodeType":"YulFunctionCall","src":"17634:21:201"},"nodeType":"YulExpressionStatement","src":"17634:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17675:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17686:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17671:3:201"},"nodeType":"YulFunctionCall","src":"17671:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"17691:2:201","type":"","value":"24"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17664:6:201"},"nodeType":"YulFunctionCall","src":"17664:30:201"},"nodeType":"YulExpressionStatement","src":"17664:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17714:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17725:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17710:3:201"},"nodeType":"YulFunctionCall","src":"17710:18:201"},{"hexValue":"57524f4e475f42414c414e43455f41465445525f53574150","kind":"string","nodeType":"YulLiteral","src":"17730:26:201","type":"","value":"WRONG_BALANCE_AFTER_SWAP"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17703:6:201"},"nodeType":"YulFunctionCall","src":"17703:54:201"},"nodeType":"YulExpressionStatement","src":"17703:54:201"},{"nodeType":"YulAssignment","src":"17766:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17778:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17789:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17774:3:201"},"nodeType":"YulFunctionCall","src":"17774:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"17766:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9bfa76b9c2e298d52f58639e051d7d21997f6c435f534dfd0c2e6c351c64a39a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17601:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17615:4:201","type":""}],"src":"17450:348:201"},{"body":{"nodeType":"YulBlock","src":"17977:178:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17994:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18005:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17987:6:201"},"nodeType":"YulFunctionCall","src":"17987:21:201"},"nodeType":"YulExpressionStatement","src":"17987:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18028:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18039:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18024:3:201"},"nodeType":"YulFunctionCall","src":"18024:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"18044:2:201","type":"","value":"28"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18017:6:201"},"nodeType":"YulFunctionCall","src":"18017:30:201"},"nodeType":"YulExpressionStatement","src":"18017:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18067:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18078:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18063:3:201"},"nodeType":"YulFunctionCall","src":"18063:18:201"},{"hexValue":"494e53554646494349454e545f414d4f554e545f5245434549564544","kind":"string","nodeType":"YulLiteral","src":"18083:30:201","type":"","value":"INSUFFICIENT_AMOUNT_RECEIVED"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18056:6:201"},"nodeType":"YulFunctionCall","src":"18056:58:201"},"nodeType":"YulExpressionStatement","src":"18056:58:201"},{"nodeType":"YulAssignment","src":"18123:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18135:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18146:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18131:3:201"},"nodeType":"YulFunctionCall","src":"18131:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18123:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_74fc5696336325aeb54c5d19133ed01308c8174de21fc66f38ac28668f995bc7__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17954:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"17968:4:201","type":""}],"src":"17803:352:201"},{"body":{"nodeType":"YulBlock","src":"18289:119:201","statements":[{"nodeType":"YulAssignment","src":"18299:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18311:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18322:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18307:3:201"},"nodeType":"YulFunctionCall","src":"18307:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18299:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18341:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"18352:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18334:6:201"},"nodeType":"YulFunctionCall","src":"18334:25:201"},"nodeType":"YulExpressionStatement","src":"18334:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18379:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18390:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18375:3:201"},"nodeType":"YulFunctionCall","src":"18375:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"18395:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18368:6:201"},"nodeType":"YulFunctionCall","src":"18368:34:201"},"nodeType":"YulExpressionStatement","src":"18368:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18250:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"18261:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18269:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18280:4:201","type":""}],"src":"18160:248:201"},{"body":{"nodeType":"YulBlock","src":"18542:168:201","statements":[{"nodeType":"YulAssignment","src":"18552:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18564:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18575:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18560:3:201"},"nodeType":"YulFunctionCall","src":"18560:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18552:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18594:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18609:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"18617:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18605:3:201"},"nodeType":"YulFunctionCall","src":"18605:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18587:6:201"},"nodeType":"YulFunctionCall","src":"18587:74:201"},"nodeType":"YulExpressionStatement","src":"18587:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18681:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18692:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18677:3:201"},"nodeType":"YulFunctionCall","src":"18677:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"18697:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18670:6:201"},"nodeType":"YulFunctionCall","src":"18670:34:201"},"nodeType":"YulExpressionStatement","src":"18670:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18503:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"18514:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18522:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18533:4:201","type":""}],"src":"18413:297:201"},{"body":{"nodeType":"YulBlock","src":"18889:175:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18906:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18917:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18899:6:201"},"nodeType":"YulFunctionCall","src":"18899:21:201"},"nodeType":"YulExpressionStatement","src":"18899:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18940:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18951:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18936:3:201"},"nodeType":"YulFunctionCall","src":"18936:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"18956:2:201","type":"","value":"25"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18929:6:201"},"nodeType":"YulFunctionCall","src":"18929:30:201"},"nodeType":"YulExpressionStatement","src":"18929:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18979:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18990:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18975:3:201"},"nodeType":"YulFunctionCall","src":"18975:18:201"},{"hexValue":"475076323a206661696c6564207472616e7366657246726f6d","kind":"string","nodeType":"YulLiteral","src":"18995:27:201","type":"","value":"GPv2: failed transferFrom"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18968:6:201"},"nodeType":"YulFunctionCall","src":"18968:55:201"},"nodeType":"YulExpressionStatement","src":"18968:55:201"},{"nodeType":"YulAssignment","src":"19032:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19044:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19055:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19040:3:201"},"nodeType":"YulFunctionCall","src":"19040:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19032:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18866:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18880:4:201","type":""}],"src":"18715:349:201"},{"body":{"nodeType":"YulBlock","src":"19148:168:201","statements":[{"body":{"nodeType":"YulBlock","src":"19194:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19203:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19206:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19196:6:201"},"nodeType":"YulFunctionCall","src":"19196:12:201"},"nodeType":"YulExpressionStatement","src":"19196:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"19169:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"19178:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19165:3:201"},"nodeType":"YulFunctionCall","src":"19165:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"19190:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"19161:3:201"},"nodeType":"YulFunctionCall","src":"19161:32:201"},"nodeType":"YulIf","src":"19158:52:201"},{"nodeType":"YulVariableDeclaration","src":"19219:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19238:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"19232:5:201"},"nodeType":"YulFunctionCall","src":"19232:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"19223:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"19280:5:201"}],"functionName":{"name":"validator_revert_uint8","nodeType":"YulIdentifier","src":"19257:22:201"},"nodeType":"YulFunctionCall","src":"19257:29:201"},"nodeType":"YulExpressionStatement","src":"19257:29:201"},{"nodeType":"YulAssignment","src":"19295:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"19305:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"19295:6:201"}]}]},"name":"abi_decode_tuple_t_uint8_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19114:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"19125:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"19137:6:201","type":""}],"src":"19069:247:201"},{"body":{"nodeType":"YulBlock","src":"19495:176:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19512:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19523:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19505:6:201"},"nodeType":"YulFunctionCall","src":"19505:21:201"},"nodeType":"YulExpressionStatement","src":"19505:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19546:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19557:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19542:3:201"},"nodeType":"YulFunctionCall","src":"19542:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"19562:2:201","type":"","value":"26"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19535:6:201"},"nodeType":"YulFunctionCall","src":"19535:30:201"},"nodeType":"YulExpressionStatement","src":"19535:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19585:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19596:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19581:3:201"},"nodeType":"YulFunctionCall","src":"19581:18:201"},{"hexValue":"544f4f5f4d414e595f444543494d414c535f4f4e5f544f4b454e","kind":"string","nodeType":"YulLiteral","src":"19601:28:201","type":"","value":"TOO_MANY_DECIMALS_ON_TOKEN"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19574:6:201"},"nodeType":"YulFunctionCall","src":"19574:56:201"},"nodeType":"YulExpressionStatement","src":"19574:56:201"},{"nodeType":"YulAssignment","src":"19639:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19651:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19662:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19647:3:201"},"nodeType":"YulFunctionCall","src":"19647:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19639:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_fc5915f8715e0da4bd5e6487e67e57e89850a48fc18d4e921a811a8c928ad119__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19472:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19486:4:201","type":""}],"src":"19321:350:201"},{"body":{"nodeType":"YulBlock","src":"19708:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19725:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19728:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19718:6:201"},"nodeType":"YulFunctionCall","src":"19718:88:201"},"nodeType":"YulExpressionStatement","src":"19718:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19822:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"19825:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19815:6:201"},"nodeType":"YulFunctionCall","src":"19815:15:201"},"nodeType":"YulExpressionStatement","src":"19815:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19846:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19849:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19839:6:201"},"nodeType":"YulFunctionCall","src":"19839:15:201"},"nodeType":"YulExpressionStatement","src":"19839:15:201"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"19676:184:201"},{"body":{"nodeType":"YulBlock","src":"19911:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"19942:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19963:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19966:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19956:6:201"},"nodeType":"YulFunctionCall","src":"19956:88:201"},"nodeType":"YulExpressionStatement","src":"19956:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20064:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"20067:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20057:6:201"},"nodeType":"YulFunctionCall","src":"20057:15:201"},"nodeType":"YulExpressionStatement","src":"20057:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20092:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20095:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20085:6:201"},"nodeType":"YulFunctionCall","src":"20085:15:201"},"nodeType":"YulExpressionStatement","src":"20085:15:201"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"19931:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"19924:6:201"},"nodeType":"YulFunctionCall","src":"19924:9:201"},"nodeType":"YulIf","src":"19921:189:201"},{"nodeType":"YulAssignment","src":"20119:14:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"20128:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"20131:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"20124:3:201"},"nodeType":"YulFunctionCall","src":"20124:9:201"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"20119:1:201"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"19896:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"19899:1:201","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"19905:1:201","type":""}],"src":"19865:274:201"},{"body":{"nodeType":"YulBlock","src":"20273:198:201","statements":[{"nodeType":"YulAssignment","src":"20283:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20295:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20306:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20291:3:201"},"nodeType":"YulFunctionCall","src":"20291:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20283:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"20318:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"20328:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"20322:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20386:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"20401:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"20409:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20397:3:201"},"nodeType":"YulFunctionCall","src":"20397:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20379:6:201"},"nodeType":"YulFunctionCall","src":"20379:34:201"},"nodeType":"YulExpressionStatement","src":"20379:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20433:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20444:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20429:3:201"},"nodeType":"YulFunctionCall","src":"20429:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"20453:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"20461:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20449:3:201"},"nodeType":"YulFunctionCall","src":"20449:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20422:6:201"},"nodeType":"YulFunctionCall","src":"20422:43:201"},"nodeType":"YulExpressionStatement","src":"20422:43:201"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20234:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"20245:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"20253:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20264:4:201","type":""}],"src":"20144:327:201"},{"body":{"nodeType":"YulBlock","src":"20650:244:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20667:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20678:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20660:6:201"},"nodeType":"YulFunctionCall","src":"20660:21:201"},"nodeType":"YulExpressionStatement","src":"20660:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20701:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20712:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20697:3:201"},"nodeType":"YulFunctionCall","src":"20697:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"20717:2:201","type":"","value":"54"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20690:6:201"},"nodeType":"YulFunctionCall","src":"20690:30:201"},"nodeType":"YulExpressionStatement","src":"20690:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20740:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20751:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20736:3:201"},"nodeType":"YulFunctionCall","src":"20736:18:201"},{"hexValue":"5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f","kind":"string","nodeType":"YulLiteral","src":"20756:34:201","type":"","value":"SafeERC20: approve from non-zero"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20729:6:201"},"nodeType":"YulFunctionCall","src":"20729:62:201"},"nodeType":"YulExpressionStatement","src":"20729:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20811:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20822:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20807:3:201"},"nodeType":"YulFunctionCall","src":"20807:18:201"},{"hexValue":"20746f206e6f6e2d7a65726f20616c6c6f77616e6365","kind":"string","nodeType":"YulLiteral","src":"20827:24:201","type":"","value":" to non-zero allowance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20800:6:201"},"nodeType":"YulFunctionCall","src":"20800:52:201"},"nodeType":"YulExpressionStatement","src":"20800:52:201"},{"nodeType":"YulAssignment","src":"20861:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20873:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20884:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20869:3:201"},"nodeType":"YulFunctionCall","src":"20869:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20861:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20627:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20641:4:201","type":""}],"src":"20476:418:201"},{"body":{"nodeType":"YulBlock","src":"21073:232:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21090:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21101:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21083:6:201"},"nodeType":"YulFunctionCall","src":"21083:21:201"},"nodeType":"YulExpressionStatement","src":"21083:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21124:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21135:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21120:3:201"},"nodeType":"YulFunctionCall","src":"21120:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"21140:2:201","type":"","value":"42"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21113:6:201"},"nodeType":"YulFunctionCall","src":"21113:30:201"},"nodeType":"YulExpressionStatement","src":"21113:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21163:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21174:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21159:3:201"},"nodeType":"YulFunctionCall","src":"21159:18:201"},{"hexValue":"5361666545524332303a204552433230206f7065726174696f6e20646964206e","kind":"string","nodeType":"YulLiteral","src":"21179:34:201","type":"","value":"SafeERC20: ERC20 operation did n"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21152:6:201"},"nodeType":"YulFunctionCall","src":"21152:62:201"},"nodeType":"YulExpressionStatement","src":"21152:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21234:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21245:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21230:3:201"},"nodeType":"YulFunctionCall","src":"21230:18:201"},{"hexValue":"6f742073756363656564","kind":"string","nodeType":"YulLiteral","src":"21250:12:201","type":"","value":"ot succeed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21223:6:201"},"nodeType":"YulFunctionCall","src":"21223:40:201"},"nodeType":"YulExpressionStatement","src":"21223:40:201"},{"nodeType":"YulAssignment","src":"21272:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21284:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21295:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21280:3:201"},"nodeType":"YulFunctionCall","src":"21280:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21272:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21050:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21064:4:201","type":""}],"src":"20899:406:201"},{"body":{"nodeType":"YulBlock","src":"21484:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21501:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21512:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21494:6:201"},"nodeType":"YulFunctionCall","src":"21494:21:201"},"nodeType":"YulExpressionStatement","src":"21494:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21535:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21546:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21531:3:201"},"nodeType":"YulFunctionCall","src":"21531:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"21551:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21524:6:201"},"nodeType":"YulFunctionCall","src":"21524:30:201"},"nodeType":"YulExpressionStatement","src":"21524:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21574:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21585:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21570:3:201"},"nodeType":"YulFunctionCall","src":"21570:18:201"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f","kind":"string","nodeType":"YulLiteral","src":"21590:34:201","type":"","value":"Address: insufficient balance fo"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21563:6:201"},"nodeType":"YulFunctionCall","src":"21563:62:201"},"nodeType":"YulExpressionStatement","src":"21563:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21645:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21656:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21641:3:201"},"nodeType":"YulFunctionCall","src":"21641:18:201"},{"hexValue":"722063616c6c","kind":"string","nodeType":"YulLiteral","src":"21661:8:201","type":"","value":"r call"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21634:6:201"},"nodeType":"YulFunctionCall","src":"21634:36:201"},"nodeType":"YulExpressionStatement","src":"21634:36:201"},{"nodeType":"YulAssignment","src":"21679:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21691:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21702:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21687:3:201"},"nodeType":"YulFunctionCall","src":"21687:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21679:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21461:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21475:4:201","type":""}],"src":"21310:402:201"},{"body":{"nodeType":"YulBlock","src":"21891:179:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21908:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21919:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21901:6:201"},"nodeType":"YulFunctionCall","src":"21901:21:201"},"nodeType":"YulExpressionStatement","src":"21901:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21942:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21953:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21938:3:201"},"nodeType":"YulFunctionCall","src":"21938:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"21958:2:201","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21931:6:201"},"nodeType":"YulFunctionCall","src":"21931:30:201"},"nodeType":"YulExpressionStatement","src":"21931:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21981:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21992:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21977:3:201"},"nodeType":"YulFunctionCall","src":"21977:18:201"},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"21997:31:201","type":"","value":"Address: call to non-contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21970:6:201"},"nodeType":"YulFunctionCall","src":"21970:59:201"},"nodeType":"YulExpressionStatement","src":"21970:59:201"},{"nodeType":"YulAssignment","src":"22038:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22050:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22061:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22046:3:201"},"nodeType":"YulFunctionCall","src":"22046:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22038:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21868:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21882:4:201","type":""}],"src":"21717:353:201"},{"body":{"nodeType":"YulBlock","src":"22196:321:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22213:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22224:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22206:6:201"},"nodeType":"YulFunctionCall","src":"22206:21:201"},"nodeType":"YulExpressionStatement","src":"22206:21:201"},{"nodeType":"YulVariableDeclaration","src":"22236:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"22256:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"22250:5:201"},"nodeType":"YulFunctionCall","src":"22250:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"22240:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22283:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22294:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22279:3:201"},"nodeType":"YulFunctionCall","src":"22279:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"22299:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22272:6:201"},"nodeType":"YulFunctionCall","src":"22272:34:201"},"nodeType":"YulExpressionStatement","src":"22272:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"22341:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"22349:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22337:3:201"},"nodeType":"YulFunctionCall","src":"22337:15:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22358:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22369:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22354:3:201"},"nodeType":"YulFunctionCall","src":"22354:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"22374:6:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"22315:21:201"},"nodeType":"YulFunctionCall","src":"22315:66:201"},"nodeType":"YulExpressionStatement","src":"22315:66:201"},{"nodeType":"YulAssignment","src":"22390:121:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22406:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"22425:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"22433:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22421:3:201"},"nodeType":"YulFunctionCall","src":"22421:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"22438:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22417:3:201"},"nodeType":"YulFunctionCall","src":"22417:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22402:3:201"},"nodeType":"YulFunctionCall","src":"22402:104:201"},{"kind":"number","nodeType":"YulLiteral","src":"22508:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22398:3:201"},"nodeType":"YulFunctionCall","src":"22398:113:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22390:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22165:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"22176:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22187:4:201","type":""}],"src":"22075:442:201"}]},"contents":"{\n    { }\n    function validator_revert_contract_IERC20(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IERC20_$1442(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IERC20(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_contract$_IPoolAddressesProvider_$5069__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IERC20(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_contract_IERC20(value_1)\n        value3 := value_1\n        let offset := calldataload(add(headStart, 128))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value4_1, value5_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n        value4 := value4_1\n        value5 := value5_1\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_contract$_IPriceOracleGetter_$5835__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_contract$_IParaSwapAugustusRegistry_$30961__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_contract$_IERC20Detailed_$1464t_contract$_IERC20Detailed_$1464t_uint256t_uint256t_uint256t_bytes_calldata_ptrt_contract$_IParaSwapAugustus_$30951t_struct$_PermitSignature_$29019_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6, value7, value8\n    {\n        let _1 := sub(dataEnd, headStart)\n        if slt(_1, 384) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IERC20(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_contract_IERC20(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n        let offset := calldataload(add(headStart, 160))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value5_1, value6_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n        value5 := value5_1\n        value6 := value6_1\n        let value_2 := calldataload(add(headStart, 192))\n        validator_revert_contract_IERC20(value_2)\n        value7 := value_2\n        if slt(add(_1, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20), 160) { revert(0, 0) }\n        value8 := add(headStart, 224)\n    }\n    function abi_encode_tuple_t_contract$_IPool_$4860__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IERC20(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e2a8e7139f3bc1b76f03a9ab4d7a5e5329d0cc7d7a0c99dcd453eb8f41b24b0b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 13)\n        mstore(add(headStart, 64), \"NOT_SUPPORTED\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_f73db277b52b12832d4a33a7ef8ea973b58412dbb6a626efd61c48d6a6304661__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 27)\n        mstore(add(headStart, 64), \"INSUFFICIENT_AMOUNT_TO_SWAP\")\n        tail := add(headStart, 96)\n    }\n    function allocate_memory() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 480)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function validator_revert_uint8(value)\n    {\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_struct$_PermitSignature_$29019_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 160)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n        mstore(memPtr, calldataload(headStart))\n        mstore(add(memPtr, 32), calldataload(add(headStart, 32)))\n        let value := calldataload(add(headStart, 64))\n        validator_revert_uint8(value)\n        mstore(add(memPtr, 64), value)\n        mstore(add(memPtr, 96), calldataload(add(headStart, 96)))\n        mstore(add(memPtr, 128), calldataload(add(headStart, 128)))\n        value0 := memPtr\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"GPv2: failed transfer\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x20) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x20)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n        value := memPtr\n        mstore(memPtr, mload(headStart))\n    }\n    function abi_decode_uint128_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint40_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint16_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        validator_revert_contract_IERC20(value)\n    }\n    function abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 480) { revert(0, 0) }\n        let value := allocate_memory()\n        mstore(value, abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, dataEnd))\n        mstore(add(value, 32), abi_decode_uint128_fromMemory(add(headStart, 32)))\n        mstore(add(value, 64), abi_decode_uint128_fromMemory(add(headStart, 64)))\n        mstore(add(value, 96), abi_decode_uint128_fromMemory(add(headStart, 96)))\n        mstore(add(value, 128), abi_decode_uint128_fromMemory(add(headStart, 128)))\n        mstore(add(value, 160), abi_decode_uint128_fromMemory(add(headStart, 160)))\n        mstore(add(value, 192), abi_decode_uint40_fromMemory(add(headStart, 192)))\n        mstore(add(value, 224), abi_decode_uint16_fromMemory(add(headStart, 224)))\n        let _1 := 256\n        mstore(add(value, _1), abi_decode_address_fromMemory(add(headStart, _1)))\n        let _2 := 288\n        mstore(add(value, _2), abi_decode_address_fromMemory(add(headStart, _2)))\n        let _3 := 320\n        mstore(add(value, _3), abi_decode_address_fromMemory(add(headStart, _3)))\n        let _4 := 352\n        mstore(add(value, _4), abi_decode_address_fromMemory(add(headStart, _4)))\n        let _5 := 384\n        mstore(add(value, _5), abi_decode_uint128_fromMemory(add(headStart, _5)))\n        let _6 := 416\n        mstore(add(value, _6), abi_decode_uint128_fromMemory(add(headStart, _6)))\n        let _7 := 448\n        mstore(add(value, _7), abi_decode_uint128_fromMemory(add(headStart, _7)))\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xff))\n        mstore(add(headStart, 160), value5)\n        mstore(add(headStart, 192), value6)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_85a045c7862eb0e81d59fe8dfd2ed8c824917ce215328caf39199676e5939f87__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 27)\n        mstore(add(headStart, 64), \"UNEXPECTED_AMOUNT_WITHDRAWN\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_3202e1fc4f78abbce03a97de69392b3f69ebba48c41588ffb32a1c8b97349f74__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"INVALID_AUGUSTUS\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint256(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, exponent)\n    }\n    function abi_encode_tuple_t_stringliteral_8333172953304c474b0cfe8eccb09fd2b08c1198c3d73a3ed0388645fb84d24e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"MIN_AMOUNT_EXCEEDS_MAX_SLIPPAGE\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_51fc4946c16284910827fc38bc7611d60d4dd1f7d8fefa0da6f8642035c3c48b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"INSUFFICIENT_BALANCE_BEFORE_SWAP\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IERC20(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_f920786e74a0af1b51a64ca021265d328aab062025c81f249165aca83960cff7__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"FROM_AMOUNT_OFFSET_OUT_OF_RANGE\")\n        tail := add(headStart, 96)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_9bfa76b9c2e298d52f58639e051d7d21997f6c435f534dfd0c2e6c351c64a39a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 24)\n        mstore(add(headStart, 64), \"WRONG_BALANCE_AFTER_SWAP\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_74fc5696336325aeb54c5d19133ed01308c8174de21fc66f38ac28668f995bc7__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 28)\n        mstore(add(headStart, 64), \"INSUFFICIENT_AMOUNT_RECEIVED\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"GPv2: failed transferFrom\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_uint8_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_uint8(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_fc5915f8715e0da4bd5e6487e67e57e89850a48fc18d4e921a811a8c928ad119__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 26)\n        mstore(add(headStart, 64), \"TOO_MANY_DECIMALS_ON_TOKEN\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x12)\n            revert(0, 0x24)\n        }\n        r := div(x, y)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 54)\n        mstore(add(headStart, 64), \"SafeERC20: approve from non-zero\")\n        mstore(add(headStart, 96), \" to non-zero allowance\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n        mstore(add(headStart, 96), \"ot succeed\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n        mstore(add(headStart, 96), \"r call\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"3442":[{"length":32,"start":231}],"3446":[{"length":32,"start":475},{"length":32,"start":2760},{"length":32,"start":3197}],"29025":[{"length":32,"start":370},{"length":32,"start":6392}],"29593":[{"length":32,"start":409},{"length":32,"start":3490}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100c85760003560e01c80633a829867116100815780637535d2461161005b5780637535d246146101d65780638da5cb5b146101fd578063f2fde38b1461021b57600080fd5b80633a829867146101945780635fd73e07146101bb578063715018a6146101ce57600080fd5b80631b11d0ff116100b25780631b11d0ff1461013357806332e4b2861461015657806338013f021461016d57600080fd5b8062ae3bf8146100cd5780630542975c146100e2575b600080fd5b6100e06100db366004611e8f565b61022e565b005b6101097f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610146610141366004611ef5565b610385565b604051901515815260200161012a565b61015f610bb881565b60405190815260200161012a565b6101097f000000000000000000000000000000000000000000000000000000000000000081565b6101097f000000000000000000000000000000000000000000000000000000000000000081565b6100e06101c9366004611f71565b61045b565b6100e0610689565b6101097f000000000000000000000000000000000000000000000000000000000000000081565b60005473ffffffffffffffffffffffffffffffffffffffff16610109565b6100e0610229366004611e8f565b610779565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6103826102d660005473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610340573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103649190612043565b73ffffffffffffffffffffffffffffffffffffffff8416919061092a565b50565b6000600260015414156103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102ab565b60026001556040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4e4f545f535550504f525445440000000000000000000000000000000000000060448201526064016102ab565b600260015414156104c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102ab565b600260015560006104d88a610a03565b6101000151905085156105e5576040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610552573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105769190612043565b9050888111156105e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f494e53554646494349454e545f414d4f554e545f544f5f53574150000000000060448201526064016102ab565b97505b6106008a82338b6105fb368890038801886120bc565b610b3a565b60006106558787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050868e8e8e8e610d5a565b905061067873ffffffffffffffffffffffffffffffffffffffff8b16338361154e565b505060018055505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461070a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102ab565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102ab565b73ffffffffffffffffffffffffffffffffffffffff811661089d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102ab565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af161098d573d6000803e3d6000fd5b5061099784611627565b6109fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e73666572000000000000000000000060448201526064016102ab565b50505050565b604080516102008101825260006101e08201818152825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c08101919091526040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa158015610b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b34919061221b565b92915050565b602081015115610c0757805160208201516040808401516060850151608086015192517fd505accf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301523060248301526044820196909652606481019490945260ff909116608484015260a483015260c48201529085169063d505accf9060e401600060405180830381600087803b158015610bee57600080fd5b505af1158015610c02573d6000803e3d6000fd5b505050505b610c2973ffffffffffffffffffffffffffffffffffffffff85168430856116f3565b6040517f69328dec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820184905230604483015283917f0000000000000000000000000000000000000000000000000000000000000000909116906369328dec906064016020604051808303816000875af1158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec9190612043565b14610d53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f554e45585045435445445f414d4f554e545f57495448445241574e000000000060448201526064016102ab565b5050505050565b6040517ffb04e17b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063fb04e17b90602401602060405180830381865afa158015610deb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0f919061233e565b610e75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f494e56414c49445f41554755535455530000000000000000000000000000000060448201526064016102ab565b6000610e80866117ce565b60ff1690506000610e90866117ce565b60ff1690506000610ea0886118b0565b90506000610ead886118b0565b90506000610f05610ec2610bb861271061238f565b610eff610eda610ed389600a6124c6565b8690611965565b610ef9610ef2610eeb8a600a6124c6565b8990611965565b8d90611965565b9061198f565b906119a2565b905086811115610f71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4d494e5f414d4f554e545f455843454544535f4d41585f534c4950504147450060448201526064016102ab565b50506040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000935073ffffffffffffffffffffffffffffffffffffffff891692506370a082319150602401602060405180830381865afa158015610fe3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110079190612043565b905083811015611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f494e53554646494349454e545f42414c414e43455f4245464f52455f5357415060448201526064016102ab565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8716906370a0823190602401602060405180830381865afa1580156110e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111049190612043565b905060008873ffffffffffffffffffffffffffffffffffffffff1663d2c4b5986040518163ffffffff1660e01b8152600401602060405180830381865afa158015611153573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117791906124d2565b905061119b73ffffffffffffffffffffffffffffffffffffffff89168260006119e5565b6111bc73ffffffffffffffffffffffffffffffffffffffff891682886119e5565b8a1561124e5760048b101580156111df575089516111db906020611b67565b8b11155b611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f46524f4d5f414d4f554e545f4f46465345545f4f55545f4f465f52414e47450060448201526064016102ab565b8560208c018b01525b60008973ffffffffffffffffffffffffffffffffffffffff168b604051611275919061251b565b6000604051808303816000865af19150503d80600081146112b2576040519150601f19603f3d011682016040523d82523d6000602084013e6112b7565b606091505b50509050806112ca573d6000803e3d6000fd5b6112d4878561238f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8b16906370a0823190602401602060405180830381865afa15801561133e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113629190612043565b146113c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f57524f4e475f42414c414e43455f41465445525f53574150000000000000000060448201526064016102ab565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015261146390849073ffffffffffffffffffffffffffffffffffffffff8b16906370a0823190602401602060405180830381865afa158015611439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145d9190612043565b90611b67565b9450858510156114cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f494e53554646494349454e545f414d4f554e545f52454345495645440000000060448201526064016102ab565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fa078c4190abe07940190effc1846be0ccf03ad6007bc9e93f9697d0b460befbb8988604051611537929190918252602082015260400190565b60405180910390a350505050979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526116229084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611b77565b505050565b6000611667565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156116a657602081146116e0576116a17f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f61162e565b6116ed565b823b6116d7576116d77f475076323a206e6f74206120636f6e7472616374000000000000000000000000601461162e565b600191506116ed565b3d6000803e600051151591505b50919050565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af161175e573d6000803e3d6000fd5b5061176885611627565b610d53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d0000000000000060448201526064016102ab565b6000808273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561181c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118409190612537565b9050604d8160ff161115610b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f544f4f5f4d414e595f444543494d414c535f4f4e5f544f4b454e00000000000060448201526064016102ab565b6040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063b3596f0790602401602060405180830381865afa158015611941573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b349190612043565b60008215806119865750508181028183828161198357611983612554565b04145b610b3457600080fd5b600061199b8284612583565b9392505050565b600081157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec77839004841115176119d757600080fd5b506127109102611388010490565b801580611a8557506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611a5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a839190612043565b155b611b11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016102ab565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526116229084907f095ea7b300000000000000000000000000000000000000000000000000000000906064016115a0565b80820382811115610b3457600080fd5b6000611bd9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611c839092919063ffffffff16565b8051909150156116225780806020019051810190611bf7919061233e565b611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016102ab565b6060611c928484600085611c9a565b949350505050565b606082471015611d2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016102ab565b843b611d94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102ab565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611dbd919061251b565b60006040518083038185875af1925050503d8060008114611dfa576040519150601f19603f3d011682016040523d82523d6000602084013e611dff565b606091505b5091509150611e0f828286611e1a565b979650505050505050565b60608315611e2957508161199b565b825115611e395782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ab91906125be565b73ffffffffffffffffffffffffffffffffffffffff8116811461038257600080fd5b600060208284031215611ea157600080fd5b813561199b81611e6d565b60008083601f840112611ebe57600080fd5b50813567ffffffffffffffff811115611ed657600080fd5b602083019150836020828501011115611eee57600080fd5b9250929050565b60008060008060008060a08789031215611f0e57600080fd5b8635611f1981611e6d565b955060208701359450604087013593506060870135611f3781611e6d565b9250608087013567ffffffffffffffff811115611f5357600080fd5b611f5f89828a01611eac565b979a9699509497509295939492505050565b6000806000806000806000806000898b03610180811215611f9157600080fd5b8a35611f9c81611e6d565b995060208b0135611fac81611e6d565b985060408b0135975060608b0135965060808b0135955060a08b013567ffffffffffffffff811115611fdd57600080fd5b611fe98d828e01611eac565b90965094505060c08b0135611ffd81611e6d565b925060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff208201121561202f57600080fd5b5060e08a0190509295985092959850929598565b60006020828403121561205557600080fd5b5051919050565b6040516101e0810167ffffffffffffffff811182821017156120a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b60ff8116811461038257600080fd5b600060a082840312156120ce57600080fd5b60405160a0810181811067ffffffffffffffff82111715612118577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b806040525082358152602083013560208201526040830135612139816120ad565b6040820152606083810135908201526080928301359281019290925250919050565b60006020828403121561216d57600080fd5b6040516020810181811067ffffffffffffffff821117156121b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529151825250919050565b80516fffffffffffffffffffffffffffffffff811681146121e457600080fd5b919050565b805164ffffffffff811681146121e457600080fd5b805161ffff811681146121e457600080fd5b80516121e481611e6d565b60006101e0828403121561222e57600080fd5b61223661205c565b612240848461215b565b815261224e602084016121c4565b602082015261225f604084016121c4565b6040820152612270606084016121c4565b6060820152612281608084016121c4565b608082015261229260a084016121c4565b60a08201526122a360c084016121e9565b60c08201526122b460e084016121fe565b60e08201526101006122c7818501612210565b908201526101206122d9848201612210565b908201526101406122eb848201612210565b908201526101606122fd848201612210565b9082015261018061230f8482016121c4565b908201526101a06123218482016121c4565b908201526101c06123338482016121c4565b908201529392505050565b60006020828403121561235057600080fd5b8151801515811461199b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156123a1576123a1612360565b500390565b600181815b808511156123ff57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156123e5576123e5612360565b808516156123f257918102915b93841c93908002906123ab565b509250929050565b60008261241657506001610b34565b8161242357506000610b34565b816001811461243957600281146124435761245f565b6001915050610b34565b60ff84111561245457612454612360565b50506001821b610b34565b5060208310610133831016604e8410600b8410161715612482575081810a610b34565b61248c83836123a6565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156124be576124be612360565b029392505050565b600061199b8383612407565b6000602082840312156124e457600080fd5b815161199b81611e6d565b60005b8381101561250a5781810151838201526020016124f2565b838111156109fd5750506000910152565b6000825161252d8184602087016124ef565b9190910192915050565b60006020828403121561254957600080fd5b815161199b816120ad565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826125b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60208152600082518060208401526125dd8160408501602087016124ef565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220de9c503cb8c4805a9c88ec16f3be2e1789d38b7fbe8620613d28ed61ab451cb964736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC8 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3A829867 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0x7535D246 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x7535D246 EQ PUSH2 0x1D6 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3A829867 EQ PUSH2 0x194 JUMPI DUP1 PUSH4 0x5FD73E07 EQ PUSH2 0x1BB JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1B11D0FF GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x1B11D0FF EQ PUSH2 0x133 JUMPI DUP1 PUSH4 0x32E4B286 EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0x38013F02 EQ PUSH2 0x16D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH3 0xAE3BF8 EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0x542975C EQ PUSH2 0xE2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE0 PUSH2 0xDB CALLDATASIZE PUSH1 0x4 PUSH2 0x1E8F JUMP JUMPDEST PUSH2 0x22E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x109 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x146 PUSH2 0x141 CALLDATASIZE PUSH1 0x4 PUSH2 0x1EF5 JUMP JUMPDEST PUSH2 0x385 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12A JUMP JUMPDEST PUSH2 0x15F PUSH2 0xBB8 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12A JUMP JUMPDEST PUSH2 0x109 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x109 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0xE0 PUSH2 0x1C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F71 JUMP JUMPDEST PUSH2 0x45B JUMP JUMPDEST PUSH2 0xE0 PUSH2 0x689 JUMP JUMPDEST PUSH2 0x109 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x109 JUMP JUMPDEST PUSH2 0xE0 PUSH2 0x229 CALLDATASIZE PUSH1 0x4 PUSH2 0x1E8F JUMP JUMPDEST PUSH2 0x779 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x2B4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x382 PUSH2 0x2D6 PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x340 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x364 SWAP2 SWAP1 PUSH2 0x2043 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP2 SWAP1 PUSH2 0x92A JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 PUSH1 0x1 SLOAD EQ ISZERO PUSH2 0x3F4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x2 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F535550504F5254454400000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x2 PUSH1 0x1 SLOAD EQ ISZERO PUSH2 0x4C8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x2 PUSH1 0x1 SSTORE PUSH1 0x0 PUSH2 0x4D8 DUP11 PUSH2 0xA03 JUMP JUMPDEST PUSH2 0x100 ADD MLOAD SWAP1 POP DUP6 ISZERO PUSH2 0x5E5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x552 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x576 SWAP2 SWAP1 PUSH2 0x2043 JUMP JUMPDEST SWAP1 POP DUP9 DUP2 GT ISZERO PUSH2 0x5E2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F414D4F554E545F544F5F535741500000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST SWAP8 POP JUMPDEST PUSH2 0x600 DUP11 DUP3 CALLER DUP12 PUSH2 0x5FB CALLDATASIZE DUP9 SWAP1 SUB DUP9 ADD DUP9 PUSH2 0x20BC JUMP JUMPDEST PUSH2 0xB3A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x655 DUP8 DUP8 DUP8 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 DUP2 DUP5 ADD MSTORE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND SWAP1 POP DUP1 DUP4 ADD SWAP3 POP POP POP POP POP POP POP DUP7 DUP15 DUP15 DUP15 DUP15 PUSH2 0xD5A JUMP JUMPDEST SWAP1 POP PUSH2 0x678 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND CALLER DUP4 PUSH2 0x154E JUMP JUMPDEST POP POP PUSH1 0x1 DUP1 SSTORE POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x70A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x7FA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x89D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x98D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x997 DUP5 PUSH2 0x1627 JUMP JUMPDEST PUSH2 0x9FD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x200 DUP2 ADD DUP3 MSTORE PUSH1 0x0 PUSH2 0x1E0 DUP3 ADD DUP2 DUP2 MSTORE DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1A0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB10 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB34 SWAP2 SWAP1 PUSH2 0x221B JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD ISZERO PUSH2 0xC07 JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 DUP1 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x80 DUP7 ADD MLOAD SWAP3 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x64 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0xFF SWAP1 SWAP2 AND PUSH1 0x84 DUP5 ADD MSTORE PUSH1 0xA4 DUP4 ADD MSTORE PUSH1 0xC4 DUP3 ADD MSTORE SWAP1 DUP6 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xBEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC02 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0xC29 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 ADDRESS DUP6 PUSH2 0x16F3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x69328DEC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP5 SWAP1 MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE DUP4 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x69328DEC SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xCC8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCEC SWAP2 SWAP1 PUSH2 0x2043 JUMP JUMPDEST EQ PUSH2 0xD53 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x554E45585045435445445F414D4F554E545F57495448445241574E0000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFB04E17B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xFB04E17B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDEB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE0F SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST PUSH2 0xE75 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x10 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F415547555354555300000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE80 DUP7 PUSH2 0x17CE JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH1 0x0 PUSH2 0xE90 DUP7 PUSH2 0x17CE JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH1 0x0 PUSH2 0xEA0 DUP9 PUSH2 0x18B0 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xEAD DUP9 PUSH2 0x18B0 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xF05 PUSH2 0xEC2 PUSH2 0xBB8 PUSH2 0x2710 PUSH2 0x238F JUMP JUMPDEST PUSH2 0xEFF PUSH2 0xEDA PUSH2 0xED3 DUP10 PUSH1 0xA PUSH2 0x24C6 JUMP JUMPDEST DUP7 SWAP1 PUSH2 0x1965 JUMP JUMPDEST PUSH2 0xEF9 PUSH2 0xEF2 PUSH2 0xEEB DUP11 PUSH1 0xA PUSH2 0x24C6 JUMP JUMPDEST DUP10 SWAP1 PUSH2 0x1965 JUMP JUMPDEST DUP14 SWAP1 PUSH2 0x1965 JUMP JUMPDEST SWAP1 PUSH2 0x198F JUMP JUMPDEST SWAP1 PUSH2 0x19A2 JUMP JUMPDEST SWAP1 POP DUP7 DUP2 GT ISZERO PUSH2 0xF71 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D494E5F414D4F554E545F455843454544535F4D41585F534C49505041474500 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP4 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND SWAP3 POP PUSH4 0x70A08231 SWAP2 POP PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFE3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1007 SWAP2 SWAP1 PUSH2 0x2043 JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0x1073 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F42414C414E43455F4245464F52455F53574150 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10E0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1104 SWAP2 SWAP1 PUSH2 0x2043 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD2C4B598 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1153 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1177 SWAP2 SWAP1 PUSH2 0x24D2 JUMP JUMPDEST SWAP1 POP PUSH2 0x119B PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP3 PUSH1 0x0 PUSH2 0x19E5 JUMP JUMPDEST PUSH2 0x11BC PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP3 DUP9 PUSH2 0x19E5 JUMP JUMPDEST DUP11 ISZERO PUSH2 0x124E JUMPI PUSH1 0x4 DUP12 LT ISZERO DUP1 ISZERO PUSH2 0x11DF JUMPI POP DUP10 MLOAD PUSH2 0x11DB SWAP1 PUSH1 0x20 PUSH2 0x1B67 JUMP JUMPDEST DUP12 GT ISZERO JUMPDEST PUSH2 0x1245 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46524F4D5F414D4F554E545F4F46465345545F4F55545F4F465F52414E474500 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST DUP6 PUSH1 0x20 DUP13 ADD DUP12 ADD MSTORE JUMPDEST PUSH1 0x0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH1 0x40 MLOAD PUSH2 0x1275 SWAP2 SWAP1 PUSH2 0x251B 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 0x12B2 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 0x12B7 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x12CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x12D4 DUP8 DUP6 PUSH2 0x238F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x133E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1362 SWAP2 SWAP1 PUSH2 0x2043 JUMP JUMPDEST EQ PUSH2 0x13C9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x57524F4E475F42414C414E43455F41465445525F535741500000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x1463 SWAP1 DUP5 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1439 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x145D SWAP2 SWAP1 PUSH2 0x2043 JUMP JUMPDEST SWAP1 PUSH2 0x1B67 JUMP JUMPDEST SWAP5 POP DUP6 DUP6 LT ISZERO PUSH2 0x14CF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E53554646494349454E545F414D4F554E545F524543454956454400000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xA078C4190ABE07940190EFFC1846BE0CCF03AD6007BC9E93F9697D0B460BEFBB DUP10 DUP9 PUSH1 0x40 MLOAD PUSH2 0x1537 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1622 SWAP1 DUP5 SWAP1 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 SWAP1 PUSH1 0x64 ADD 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 0x1B77 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1667 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x16A6 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x16E0 JUMPI PUSH2 0x16A1 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x162E JUMP JUMPDEST PUSH2 0x16ED JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x16D7 JUMPI PUSH2 0x16D7 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x162E JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x16ED JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x175E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1768 DUP6 PUSH2 0x1627 JUMP JUMPDEST PUSH2 0xD53 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x181C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1840 SWAP2 SWAP1 PUSH2 0x2537 JUMP JUMPDEST SWAP1 POP PUSH1 0x4D DUP2 PUSH1 0xFF AND GT ISZERO PUSH2 0xB34 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x544F4F5F4D414E595F444543494D414C535F4F4E5F544F4B454E000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1941 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB34 SWAP2 SWAP1 PUSH2 0x2043 JUMP JUMPDEST PUSH1 0x0 DUP3 ISZERO DUP1 PUSH2 0x1986 JUMPI POP POP DUP2 DUP2 MUL DUP2 DUP4 DUP3 DUP2 PUSH2 0x1983 JUMPI PUSH2 0x1983 PUSH2 0x2554 JUMP JUMPDEST DIV EQ JUMPDEST PUSH2 0xB34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x199B DUP3 DUP5 PUSH2 0x2583 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC77 DUP4 SWAP1 DIV DUP5 GT ISZERO OR PUSH2 0x19D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2710 SWAP2 MUL PUSH2 0x1388 ADD DIV SWAP1 JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x1A85 JUMPI POP PUSH1 0x40 MLOAD PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A5F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A83 SWAP2 SWAP1 PUSH2 0x2043 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x1B11 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x20746F206E6F6E2D7A65726F20616C6C6F77616E636500000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x1622 SWAP1 DUP5 SWAP1 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP1 PUSH1 0x64 ADD PUSH2 0x15A0 JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xB34 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1BD9 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1C83 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1622 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1BF7 SWAP2 SWAP1 PUSH2 0x233E JUMP JUMPDEST PUSH2 0x1622 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F74207375636365656400000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1C92 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x1C9A JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x1D2C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x722063616C6C0000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2AB JUMP JUMPDEST DUP5 EXTCODESIZE PUSH2 0x1D94 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2AB JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x1DBD SWAP2 SWAP1 PUSH2 0x251B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1DFA 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 0x1DFF JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x1E0F DUP3 DUP3 DUP7 PUSH2 0x1E1A JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x1E29 JUMPI POP DUP2 PUSH2 0x199B JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x1E39 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2AB SWAP2 SWAP1 PUSH2 0x25BE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1EA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x199B DUP2 PUSH2 0x1E6D JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x1EBE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1ED6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x1EEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x1F0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0x1F19 DUP2 PUSH2 0x1E6D JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0x1F37 DUP2 PUSH2 0x1E6D JUMP JUMPDEST SWAP3 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1F53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1F5F DUP10 DUP3 DUP11 ADD PUSH2 0x1EAC JUMP JUMPDEST SWAP8 SWAP11 SWAP7 SWAP10 POP SWAP5 SWAP8 POP SWAP3 SWAP6 SWAP4 SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP10 DUP12 SUB PUSH2 0x180 DUP2 SLT ISZERO PUSH2 0x1F91 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP11 CALLDATALOAD PUSH2 0x1F9C DUP2 PUSH2 0x1E6D JUMP JUMPDEST SWAP10 POP PUSH1 0x20 DUP12 ADD CALLDATALOAD PUSH2 0x1FAC DUP2 PUSH2 0x1E6D JUMP JUMPDEST SWAP9 POP PUSH1 0x40 DUP12 ADD CALLDATALOAD SWAP8 POP PUSH1 0x60 DUP12 ADD CALLDATALOAD SWAP7 POP PUSH1 0x80 DUP12 ADD CALLDATALOAD SWAP6 POP PUSH1 0xA0 DUP12 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1FDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1FE9 DUP14 DUP3 DUP15 ADD PUSH2 0x1EAC JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP POP PUSH1 0xC0 DUP12 ADD CALLDATALOAD PUSH2 0x1FFD DUP2 PUSH2 0x1E6D JUMP JUMPDEST SWAP3 POP PUSH1 0xA0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 DUP3 ADD SLT ISZERO PUSH2 0x202F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xE0 DUP11 ADD SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2055 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x20A7 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x20CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x2118 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 PUSH1 0x40 MSTORE POP DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD PUSH2 0x2139 DUP2 PUSH2 0x20AD JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 DUP2 ADD CALLDATALOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x80 SWAP3 DUP4 ADD CALLDATALOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x216D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x21B7 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x21E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x21E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x21E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x21E4 DUP2 PUSH2 0x1E6D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x222E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2236 PUSH2 0x205C JUMP JUMPDEST PUSH2 0x2240 DUP5 DUP5 PUSH2 0x215B JUMP JUMPDEST DUP2 MSTORE PUSH2 0x224E PUSH1 0x20 DUP5 ADD PUSH2 0x21C4 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x225F PUSH1 0x40 DUP5 ADD PUSH2 0x21C4 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x2270 PUSH1 0x60 DUP5 ADD PUSH2 0x21C4 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x2281 PUSH1 0x80 DUP5 ADD PUSH2 0x21C4 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x2292 PUSH1 0xA0 DUP5 ADD PUSH2 0x21C4 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x22A3 PUSH1 0xC0 DUP5 ADD PUSH2 0x21E9 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x22B4 PUSH1 0xE0 DUP5 ADD PUSH2 0x21FE JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x22C7 DUP2 DUP6 ADD PUSH2 0x2210 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x22D9 DUP5 DUP3 ADD PUSH2 0x2210 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x22EB DUP5 DUP3 ADD PUSH2 0x2210 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x22FD DUP5 DUP3 ADD PUSH2 0x2210 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x230F DUP5 DUP3 ADD PUSH2 0x21C4 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x2321 DUP5 DUP3 ADD PUSH2 0x21C4 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x2333 DUP5 DUP3 ADD PUSH2 0x21C4 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2350 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x199B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x23A1 JUMPI PUSH2 0x23A1 PUSH2 0x2360 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x23FF JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x23E5 JUMPI PUSH2 0x23E5 PUSH2 0x2360 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x23F2 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x23AB JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2416 JUMPI POP PUSH1 0x1 PUSH2 0xB34 JUMP JUMPDEST DUP2 PUSH2 0x2423 JUMPI POP PUSH1 0x0 PUSH2 0xB34 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x2439 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x2443 JUMPI PUSH2 0x245F JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0xB34 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x2454 JUMPI PUSH2 0x2454 PUSH2 0x2360 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0xB34 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x2482 JUMPI POP DUP2 DUP2 EXP PUSH2 0xB34 JUMP JUMPDEST PUSH2 0x248C DUP4 DUP4 PUSH2 0x23A6 JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x24BE JUMPI PUSH2 0x24BE PUSH2 0x2360 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x199B DUP4 DUP4 PUSH2 0x2407 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x24E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x199B DUP2 PUSH2 0x1E6D JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x250A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x24F2 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x9FD JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x252D DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x24EF JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2549 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x199B DUP2 PUSH2 0x20AD JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x25B9 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x25DD DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x24EF JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDE SWAP13 POP EXTCODECOPY 0xB8 0xC4 DUP1 GAS SWAP13 DUP9 0xEC AND RETURN 0xBE 0x2E OR DUP10 0xD3 DUP12 PUSH32 0xBE8620613D28ED61AB451CB964736F6C634300080A0033000000000000000000 ","sourceMap":"780:2527:111:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4630:125:106;;;;;;:::i;:::-;;:::i;:::-;;489:67:25;;;;;;;;663:42:201;651:55;;;633:74;;621:2;606:18;489:67:25;;;;;;;;1133:182:111;;;;;;:::i;:::-;;:::i;:::-;;;2079:14:201;;2072:22;2054:41;;2042:2;2027:18;1133:182:111;1914:187:201;1570:51:106;;1617:4;1570:51;;;;;2252:25:201;;;2240:2;2225:18;1570:51:106;2106:177:201;1633:42:106;;;;;1104:60:108;;;;;2256:1049:111;;;;;;:::i;:::-;;:::i;1601:135:11:-;;;:::i;560:36:25:-;;;;;1018:71:11;1056:7;1078:6;;;1018:71;;1875:226;;;;;;:::i;:::-;;:::i;4630:125:106:-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;5112:2:201;1196:67:11;;;5094:21:201;;;5131:18;;;5124:30;5190:34;5170:18;;;5163:62;5242:18;;1196:67:11;;;;;;;;;4691:59:106::1;4710:7;1056::11::0;1078:6;;;;1018:71;4710:7:106::1;4719:30;::::0;;;;4743:4:::1;4719:30;::::0;::::1;633:74:201::0;4719:15:106::1;::::0;::::1;::::0;::::1;::::0;606:18:201;;4719:30:106::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4691:18;::::0;::::1;::::0;:59;:18:::1;:59::i;:::-;4630:125:::0;:::o;1133:182:111:-;1275:4;1657:1:114;2202:7;;:19;;2194:63;;;;;;;5662:2:201;2194:63:114;;;5644:21:201;5701:2;5681:18;;;5674:30;5740:33;5720:18;;;5713:61;5791:18;;2194:63:114;5460:355:201;2194:63:114;1657:1;2324:7;:18;1287:23:111::1;::::0;::::1;::::0;;6022:2:201;1287:23:111::1;::::0;::::1;6004:21:201::0;6061:2;6041:18;;;6034:30;6100:15;6080:18;;;6073:43;6133:18;;1287:23:111::1;5820:337:201::0;2256:1049:111;1657:1:114;2202:7;;:19;;2194:63;;;;;;;5662:2:201;2194:63:114;;;5644:21:201;5701:2;5681:18;;;5674:30;5740:33;5720:18;;;5713:61;5791:18;;2194:63:114;5460:355:201;2194:63:114;1657:1;2324:7;:18;2583:23:111::1;2633:41;2657:15:::0;2633::::1;:41::i;:::-;:55;;::::0;;-1:-1:-1;2705:25:111;;2701:193:::1;;2758:28;::::0;;;;2775:10:::1;2758:28;::::0;::::1;633:74:201::0;2740:15:111::1;::::0;2758:16:::1;::::0;::::1;::::0;::::1;::::0;606:18:201;;2758:28:111::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2740:46;;2813:12;2802:7;:23;;2794:63;;;::::0;::::1;::::0;;6364:2:201;2794:63:111::1;::::0;::::1;6346:21:201::0;6403:2;6383:18;;;6376:30;6442:29;6422:18;;;6415:57;6489:18;;2794:63:111::1;6162:351:201::0;2794:63:111::1;2880:7:::0;-1:-1:-1;2701:193:111::1;2900:132;2938:15:::0;2962:6;2976:10:::1;2994:12:::0;2900:132:::1;;::::0;;::::1;::::0;::::1;3014:12:::0;2900:132:::1;:::i;:::-;:22;:132::i;:::-;3039:22;3064:175;3087:20;3115:12;;3064:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3135:8;3151:15;3174:13;3195:12;3215:18;3064:15;:175::i;:::-;3039:200:::0;-1:-1:-1;3246:54:111::1;:26;::::0;::::1;3273:10;3039:200:::0;3246:26:::1;:54::i;:::-;-1:-1:-1::0;;1616:1:114;2481:22;;-1:-1:-1;;;;;;;;;2256:1049:111:o;1601:135:11:-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;5112:2:201;1196:67:11;;;5094:21:201;;;5131:18;;;5124:30;5190:34;5170:18;;;5163:62;5242:18;;1196:67:11;4910:356:201;1196:67:11;1703:1:::1;1687:6:::0;;1666:40:::1;::::0;::::1;1687:6:::0;;::::1;::::0;1666:40:::1;::::0;1703:1;;1666:40:::1;1729:1;1712:19:::0;;;::::1;::::0;;1601:135::o;1875:226::-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;5112:2:201;1196:67:11;;;5094:21:201;;;5131:18;;;5124:30;5190:34;5170:18;;;5163:62;5242:18;;1196:67:11;4910:356:201;1196:67:11;1959:22:::1;::::0;::::1;1951:73;;;::::0;::::1;::::0;;8184:2:201;1951:73:11::1;::::0;::::1;8166:21:201::0;8223:2;8203:18;;;8196:30;8262:34;8242:18;;;8235:62;8333:8;8313:18;;;8306:36;8359:19;;1951:73:11::1;7982:402:201::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;::::1;::::0;;::::1;::::0;2056:6;::::1;::::0;2035:38:::1;::::0;::::1;2079:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1875:226::o;441:657:1:-;668:4;662:11;538:23;680:36;;;765:42;757:51;;753:1;730:25;;723:86;846:2;823:26;;816:41;;;538:23;519:16;;916:2;662:11;519:16;887:5;880;875:50;865:154;;958:16;955:1;952;937:38;994:16;991:1;984:27;865:154;;1039:28;1061:5;1039:21;:28::i;:::-;1031:62;;;;;;;8591:2:201;1031:62:1;;;8573:21:201;8630:2;8610:18;;;8603:30;8669:23;8649:18;;;8642:51;8710:18;;1031:62:1;8389:345:201;1031:62:1;513:585;441:657;;;:::o;2841:137:106:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2947:26:106;;;;;:19;651:55:201;;;2947:26:106;;;633:74:201;2947:4:106;:19;;;;606:18:201;;2947:26:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2940:33;2841:137;-1:-1:-1;;2841:137:106:o;3650:760::-;3919:24;;;;:29;3915:262;;4025:22;;4057:24;;;;4091:17;;;;;4118;;;;4145;;;;3958:212;;;;;:20;12056:15:201;;;3958:212:106;;;12038:34:201;4010:4:106;12088:18:201;;;12081:43;12140:18;;;12133:34;;;;12183:18;;;12176:34;;;;12259:4;12247:17;;;12226:19;;;12219:46;12281:19;;;12274:35;12325:19;;;12318:35;3958:20:106;;;;;;11949:19:201;;3958:212:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3915:262;4220:59;:30;;;4251:4;4265;4272:6;4220:30;:59::i;:::-;4318:45;;;;;:13;12645:15:201;;;4318:45:106;;;12627:34:201;12677:18;;;12670:34;;;4357:4:106;12720:18:201;;;12713:43;4367:6:106;;4318:4;:13;;;;;;12539:18:201;;4318:45:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;4310:95;;;;;;;12969:2:201;4310:95:106;;;12951:21:201;13008:2;12988:18;;;12981:30;13047:29;13027:18;;;13020:57;13094:18;;4310:95:106;12767:351:201;4310:95:106;3650:760;;;;;:::o;2141:2743:108:-;2447:52;;;;;:33;651:55:201;;;2447:52:108;;;633:74:201;2409:22:108;;2447:17;:33;;;;;;606:18:201;;2447:52:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2439:81;;;;;;;13607:2:201;2439:81:108;;;13589:21:201;13646:2;13626:18;;;13619:30;13685:18;13665;;;13658:46;13721:18;;2439:81:108;13405:340:201;2439:81:108;2535:25;2563:29;2576:15;2563:12;:29::i;:::-;2535:57;;;;2600:23;2626:27;2639:13;2626:12;:27::i;:::-;2600:53;;;;2662:22;2687:35;2705:15;2687:9;:35::i;:::-;2662:60;;2730:20;2753:33;2771:13;2753:9;:33::i;:::-;2730:56;-1:-1:-1;2795:28:108;2826:201;2971:55;1617:4:106;524:3:89;2971:55:108;:::i;:::-;2826:124;2908:41;2925:23;2931:17;2925:2;:23;:::i;:::-;2908:12;;:16;:41::i;:::-;2826:68;2852:41;2871:21;2877:15;2871:2;:21;:::i;:::-;2852:14;;:18;:41::i;:::-;2826:12;;:25;:68::i;:::-;:81;;:124::i;:::-;:144;;:201::i;:::-;2795:232;;3068:18;3044:20;:42;;3036:86;;;;;;;15765:2:201;3036:86:108;;;15747:21:201;15804:2;15784:18;;;15777:30;15843:33;15823:18;;;15816:61;15894:18;;3036:86:108;15563:355:201;3036:86:108;-1:-1:-1;;3168:40:108;;;;;3202:4;3168:40;;;633:74:201;3135:30:108;;-1:-1:-1;3168:25:108;;;;-1:-1:-1;3168:25:108;;-1:-1:-1;606:18:201;;3168:40:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3135:73;;3248:12;3222:22;:38;;3214:83;;;;;;;16125:2:201;3214:83:108;;;16107:21:201;;;16144:18;;;16137:30;16203:34;16183:18;;;16176:62;16255:18;;3214:83:108;15923:356:201;3214:83:108;3334:38;;;;;3366:4;3334:38;;;633:74:201;3303:28:108;;3334:23;;;;;;606:18:201;;3334:38:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3303:69;;3379:26;3408:8;:30;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3379:61;-1:-1:-1;3446:50:108;:27;;;3379:61;3494:1;3446:27;:50::i;:::-;3502:61;:27;;;3530:18;3550:12;3502:27;:61::i;:::-;3574:21;;3570:666;;3797:1;3777:16;:21;;:72;;;;-1:-1:-1;3822:19:108;;:27;;3846:2;3822:23;:27::i;:::-;3802:16;:47;;3777:72;3760:140;;;;;;;16750:2:201;3760:140:108;;;16732:21:201;16789:2;16769:18;;;16762:30;16828:33;16808:18;;;16801:61;16879:18;;3760:140:108;16548:355:201;3760:140:108;4209:12;4203:2;4185:16;4181:25;4167:12;4163:44;4156:66;3570:666;4242:12;4268:8;4260:22;;4283:12;4260:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4241:55;;;4307:7;4302:167;;4402:16;4399:1;;4381:38;4438:16;4399:1;4428:27;4302:167;4533:37;4558:12;4533:22;:37;:::i;:::-;4489:40;;;;;4523:4;4489:40;;;633:74:201;4489:25:108;;;;;;606:18:201;;4489:40:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:81;4474:136;;;;;;;17652:2:201;4474:136:108;;;17634:21:201;17691:2;17671:18;;;17664:30;17730:26;17710:18;;;17703:54;17774:18;;4474:136:108;17450:348:201;4474:136:108;4633:38;;;;;4665:4;4633:38;;;633:74:201;4633:64:108;;4676:20;;4633:23;;;;;;606:18:201;;4633:38:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;:64::i;:::-;4616:81;;4729:18;4711:14;:36;;4703:77;;;;;;;18005:2:201;4703:77:108;;;17987:21:201;18044:2;18024:18;;;18017:30;18083;18063:18;;;18056:58;18131:18;;4703:77:108;17803:352:201;4703:77:108;4834:13;4792:87;;4808:15;4792:87;;;4850:12;4864:14;4792:87;;;;;;18334:25:201;;;18390:2;18375:18;;18368:34;18322:2;18307:18;;18160:248;4792:87:108;;;;;;;;2433:2451;;;;2141:2743;;;;;;;;;:::o;683:169:13:-;788:58;;18617:42:201;18605:55;;788:58:13;;;18587:74:201;18677:18;;;18670:34;;;761:86:13;;781:5;;811:23;;18560:18:201;;788:58:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;761:19;:86::i;:::-;683:169;;;:::o;2198:2524:1:-;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;4611:1;4605:8;4598:16;4591:24;4580:35;;3538:1174;;2198:2524;;;:::o;1228:780::-;1477:4;1471:11;1343:27;1489:36;;;1576:42;1566:53;;;1562:1;1539:25;;1532:88;1662:51;;1657:2;1634:26;;1627:87;1751:2;1728:26;;1721:41;;;1343:27;1324:16;;1821:3;1471:11;1324:16;1792:5;1785;1780:51;1770:155;;1864:16;1861:1;1858;1843:38;1900:16;1897:1;1890:27;1770:155;;1945:28;1967:5;1945:21;:28::i;:::-;1937:66;;;;;;;18917:2:201;1937:66:1;;;18899:21:201;18956:2;18936:18;;;18929:30;18995:27;18975:18;;;18968:55;19040:18;;1937:66:1;18715:349:201;2491:250:106;2558:5;2571:14;2588:5;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2571:33;;2682:2;2670:8;:14;;;;2662:53;;;;;;;19523:2:201;2662:53:106;;;19505:21:201;19562:2;19542:18;;;19535:30;19601:28;19581:18;;;19574:56;19647:18;;2662:53:106;19321:350:201;2280:111:106;2359:27;;;;;:20;651:55:201;;;2359:27:106;;;633:74:201;2337:7:106;;2359:6;:20;;;;;;606:18:201;;2359:27:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1327:143:14:-;1385:9;1428:6;;;:30;;-1:-1:-1;;1443:5:14;;;1457:1;1452;1443:5;1452:1;1438:15;;;;:::i;:::-;;:20;1428:30;1420:39;;;;;1678:92;1736:9;1760:5;1764:1;1760;:5;:::i;:::-;1753:12;1678:92;-1:-1:-1;;;1678:92:14:o;1005:496:89:-;1083:14;1248:18;;1299:35;1295:52;;;1285:63;;1278:71;1234:125;1215:183;;1388:1;1385;1378:12;1215:183;-1:-1:-1;1473:17:89;1424:22;;1448;1420:51;1416:75;;1005:496::o;1315:535:13:-;1618:10;;;1617:62;;-1:-1:-1;1634:39:13;;;;;1658:4;1634:39;;;20379:34:201;1634:15:13;20449::201;;;20429:18;;;20422:43;1634:15:13;;;;;20291:18:201;;1634:39:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;1617:62;1602:147;;;;;;;20678:2:201;1602:147:13;;;20660:21:201;20717:2;20697:18;;;20690:30;20756:34;20736:18;;;20729:62;20827:24;20807:18;;;20800:52;20869:19;;1602:147:13;20476:418:201;1602:147:13;1782:62;;18617:42:201;18605:55;;1782:62:13;;;18587:74:201;18677:18;;;18670:34;;;1755:90:13;;1775:5;;1805:22;;18560:18:201;;1782:62:13;18413:297:201;693:129:14;799:5;;;794:16;;;;786:25;;;;;2961:668:13;3364:23;3390:69;3418:4;3390:69;;;;;;;;;;;;;;;;;3398:5;3390:27;;;;:69;;;;;:::i;:::-;3469:17;;3364:95;;-1:-1:-1;3469:21:13;3465:160;;3552:10;3541:30;;;;;;;;;;;;:::i;:::-;3533:85;;;;;;;21101:2:201;3533:85:13;;;21083:21:201;21140:2;21120:18;;;21113:30;21179:34;21159:18;;;21152:62;21250:12;21230:18;;;21223:40;21280:19;;3533:85:13;20899:406:201;3336:203:3;3455:12;3482:52;3504:6;3512:4;3518:1;3521:12;3482:21;:52::i;:::-;3475:59;3336:203;-1:-1:-1;;;;3336:203:3:o;4345:463::-;4492:12;4545:5;4520:21;:30;;4512:81;;;;;;;21512:2:201;4512:81:3;;;21494:21:201;21551:2;21531:18;;;21524:30;21590:34;21570:18;;;21563:62;21661:8;21641:18;;;21634:36;21687:19;;4512:81:3;21310:402:201;4512:81:3;1025:20;;4599:60;;;;;;;21919:2:201;4599:60:3;;;21901:21:201;21958:2;21938:18;;;21931:30;21997:31;21977:18;;;21970:59;22046:18;;4599:60:3;21717:353:201;4599:60:3;4667:12;4681:23;4708:6;:11;;4727:5;4734:4;4708:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4666:73;;;;4752:51;4769:7;4778:10;4790:12;4752:16;:51::i;:::-;4745:58;4345:463;-1:-1:-1;;;;;;;4345:463:3:o;6796:582::-;6928:12;6952:7;6948:426;;;-1:-1:-1;6976:10:3;6969:17;;6948:426;7071:17;;:21;7067:301;;7239:10;7233:17;7289:15;7276:10;7272:2;7268:19;7261:44;7067:301;7346:12;7339:20;;;;;;;;;;;:::i;14:162:201:-;108:42;101:5;97:54;90:5;87:65;77:93;;166:1;163;156:12;181:270;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;363:9;350:23;382:39;415:5;382:39;:::i;718:347::-;769:8;779:6;833:3;826:4;818:6;814:17;810:27;800:55;;851:1;848;841:12;800:55;-1:-1:-1;874:20:201;;917:18;906:30;;903:50;;;949:1;946;939:12;903:50;986:4;978:6;974:17;962:29;;1038:3;1031:4;1022:6;1014;1010:19;1006:30;1003:39;1000:59;;;1055:1;1052;1045:12;1000:59;718:347;;;;;:::o;1070:839::-;1176:6;1184;1192;1200;1208;1216;1269:3;1257:9;1248:7;1244:23;1240:33;1237:53;;;1286:1;1283;1276:12;1237:53;1325:9;1312:23;1344:39;1377:5;1344:39;:::i;:::-;1402:5;-1:-1:-1;1454:2:201;1439:18;;1426:32;;-1:-1:-1;1505:2:201;1490:18;;1477:32;;-1:-1:-1;1561:2:201;1546:18;;1533:32;1574:41;1533:32;1574:41;:::i;:::-;1634:7;-1:-1:-1;1692:3:201;1677:19;;1664:33;1720:18;1709:30;;1706:50;;;1752:1;1749;1742:12;1706:50;1791:58;1841:7;1832:6;1821:9;1817:22;1791:58;:::i;:::-;1070:839;;;;-1:-1:-1;1070:839:201;;-1:-1:-1;1070:839:201;;1868:8;;1070:839;-1:-1:-1;;;1070:839:201:o;2812:1357::-;3054:6;3062;3070;3078;3086;3094;3102;3110;3118;3162:9;3153:7;3149:23;3192:3;3188:2;3184:12;3181:32;;;3209:1;3206;3199:12;3181:32;3248:9;3235:23;3267:39;3300:5;3267:39;:::i;:::-;3325:5;-1:-1:-1;3382:2:201;3367:18;;3354:32;3395:41;3354:32;3395:41;:::i;:::-;3455:7;-1:-1:-1;3509:2:201;3494:18;;3481:32;;-1:-1:-1;3560:2:201;3545:18;;3532:32;;-1:-1:-1;3611:3:201;3596:19;;3583:33;;-1:-1:-1;3667:3:201;3652:19;;3639:33;3695:18;3684:30;;3681:50;;;3727:1;3724;3717:12;3681:50;3766:58;3816:7;3807:6;3796:9;3792:22;3766:58;:::i;:::-;3843:8;;-1:-1:-1;3740:84:201;-1:-1:-1;;3930:3:201;3915:19;;3902:33;3944:41;3902:33;3944:41;:::i;:::-;4004:7;-1:-1:-1;4104:3:201;4035:66;4027:75;;4023:85;4020:105;;;4121:1;4118;4111:12;4020:105;;4159:3;4148:9;4144:19;4134:29;;2812:1357;;;;;;;;;;;:::o;5271:184::-;5341:6;5394:2;5382:9;5373:7;5369:23;5365:32;5362:52;;;5410:1;5407;5400:12;5362:52;-1:-1:-1;5433:16:201;;5271:184;-1:-1:-1;5271:184:201:o;6518:401::-;6585:2;6579:9;6627:3;6615:16;;6661:18;6646:34;;6682:22;;;6643:62;6640:242;;;6738:77;6735:1;6728:88;6839:4;6836:1;6829:15;6867:4;6864:1;6857:15;6640:242;6898:2;6891:22;6518:401;:::o;6924:114::-;7008:4;7001:5;6997:16;6990:5;6987:27;6977:55;;7028:1;7025;7018:12;7043:934;7136:6;7189:3;7177:9;7168:7;7164:23;7160:33;7157:53;;;7206:1;7203;7196:12;7157:53;7239:2;7233:9;7281:3;7273:6;7269:16;7351:6;7339:10;7336:22;7315:18;7303:10;7300:34;7297:62;7294:242;;;7392:77;7389:1;7382:88;7493:4;7490:1;7483:15;7521:4;7518:1;7511:15;7294:242;7556:10;7552:2;7545:22;;7604:9;7591:23;7583:6;7576:39;7676:2;7665:9;7661:18;7648:32;7643:2;7635:6;7631:15;7624:57;7731:2;7720:9;7716:18;7703:32;7744:29;7767:5;7744:29;:::i;:::-;7801:2;7789:15;;7782:30;7873:2;7858:18;;;7845:32;7828:15;;;7821:57;7940:3;7925:19;;;7912:33;7894:16;;;7887:59;;;;-1:-1:-1;7793:6:201;7043:934;-1:-1:-1;7043:934:201:o;8739:580::-;8820:5;8868:4;8856:9;8851:3;8847:19;8843:30;8840:50;;;8886:1;8883;8876:12;8840:50;8919:2;8913:9;8961:4;8953:6;8949:17;9032:6;9020:10;9017:22;8996:18;8984:10;8981:34;8978:62;8975:242;;;9073:77;9070:1;9063:88;9174:4;9171:1;9164:15;9202:4;9199:1;9192:15;8975:242;9233:2;9226:22;9296:16;;9281:32;;-1:-1:-1;9266:6:201;8739:580;-1:-1:-1;8739:580:201:o;9324:192::-;9403:13;;9456:34;9445:46;;9435:57;;9425:85;;9506:1;9503;9496:12;9425:85;9324:192;;;:::o;9521:169::-;9599:13;;9652:12;9641:24;;9631:35;;9621:63;;9680:1;9677;9670:12;9695:163;9773:13;;9826:6;9815:18;;9805:29;;9795:57;;9848:1;9845;9838:12;9863:146;9942:13;;9964:39;9942:13;9964:39;:::i;10014:1647::-;10114:6;10167:3;10155:9;10146:7;10142:23;10138:33;10135:53;;;10184:1;10181;10174:12;10135:53;10210:17;;:::i;:::-;10250:72;10314:7;10303:9;10250:72;:::i;:::-;10243:5;10236:87;10355:49;10400:2;10389:9;10385:18;10355:49;:::i;:::-;10350:2;10343:5;10339:14;10332:73;10437:49;10482:2;10471:9;10467:18;10437:49;:::i;:::-;10432:2;10425:5;10421:14;10414:73;10519:49;10564:2;10553:9;10549:18;10519:49;:::i;:::-;10514:2;10507:5;10503:14;10496:73;10602:50;10647:3;10636:9;10632:19;10602:50;:::i;:::-;10596:3;10589:5;10585:15;10578:75;10686:50;10731:3;10720:9;10716:19;10686:50;:::i;:::-;10680:3;10673:5;10669:15;10662:75;10770:49;10814:3;10803:9;10799:19;10770:49;:::i;:::-;10764:3;10757:5;10753:15;10746:74;10853:49;10897:3;10886:9;10882:19;10853:49;:::i;:::-;10847:3;10840:5;10836:15;10829:74;10922:3;10957:49;11002:2;10991:9;10987:18;10957:49;:::i;:::-;10941:14;;;10934:73;11026:3;11061:49;11091:18;;;11061:49;:::i;:::-;11045:14;;;11038:73;11130:3;11165:49;11195:18;;;11165:49;:::i;:::-;11149:14;;;11142:73;11234:3;11269:49;11299:18;;;11269:49;:::i;:::-;11253:14;;;11246:73;11338:3;11373:49;11403:18;;;11373:49;:::i;:::-;11357:14;;;11350:73;11442:3;11477:49;11507:18;;;11477:49;:::i;:::-;11461:14;;;11454:73;11546:3;11581:49;11611:18;;;11581:49;:::i;:::-;11565:14;;;11558:73;11569:5;10014:1647;-1:-1:-1;;;10014:1647:201:o;13123:277::-;13190:6;13243:2;13231:9;13222:7;13218:23;13214:32;13211:52;;;13259:1;13256;13249:12;13211:52;13291:9;13285:16;13344:5;13337:13;13330:21;13323:5;13320:32;13310:60;;13366:1;13363;13356:12;13750:184;13802:77;13799:1;13792:88;13899:4;13896:1;13889:15;13923:4;13920:1;13913:15;13939:125;13979:4;14007:1;14004;14001:8;13998:34;;;14012:18;;:::i;:::-;-1:-1:-1;14049:9:201;;13939:125::o;14069:482::-;14158:1;14201:5;14158:1;14215:330;14236:7;14226:8;14223:21;14215:330;;;14355:4;14287:66;14283:77;14277:4;14274:87;14271:113;;;14364:18;;:::i;:::-;14414:7;14404:8;14400:22;14397:55;;;14434:16;;;;14397:55;14513:22;;;;14473:15;;;;14215:330;;;14219:3;14069:482;;;;;:::o;14556:866::-;14605:5;14635:8;14625:80;;-1:-1:-1;14676:1:201;14690:5;;14625:80;14724:4;14714:76;;-1:-1:-1;14761:1:201;14775:5;;14714:76;14806:4;14824:1;14819:59;;;;14892:1;14887:130;;;;14799:218;;14819:59;14849:1;14840:10;;14863:5;;;14887:130;14924:3;14914:8;14911:17;14908:43;;;14931:18;;:::i;:::-;-1:-1:-1;;14987:1:201;14973:16;;15002:5;;14799:218;;15101:2;15091:8;15088:16;15082:3;15076:4;15073:13;15069:36;15063:2;15053:8;15050:16;15045:2;15039:4;15036:12;15032:35;15029:77;15026:159;;;-1:-1:-1;15138:19:201;;;15170:5;;15026:159;15217:34;15242:8;15236:4;15217:34;:::i;:::-;15347:6;15279:66;15275:79;15266:7;15263:92;15260:118;;;15358:18;;:::i;:::-;15396:20;;14556:866;-1:-1:-1;;;14556:866:201:o;15427:131::-;15487:5;15516:36;15543:8;15537:4;15516:36;:::i;16284:259::-;16354:6;16407:2;16395:9;16386:7;16382:23;16378:32;16375:52;;;16423:1;16420;16413:12;16375:52;16455:9;16449:16;16474:39;16507:5;16474:39;:::i;16908:258::-;16980:1;16990:113;17004:6;17001:1;16998:13;16990:113;;;17080:11;;;17074:18;17061:11;;;17054:39;17026:2;17019:10;16990:113;;;17121:6;17118:1;17115:13;17112:48;;;-1:-1:-1;;17156:1:201;17138:16;;17131:27;16908:258::o;17171:274::-;17300:3;17338:6;17332:13;17354:53;17400:6;17395:3;17388:4;17380:6;17376:17;17354:53;:::i;:::-;17423:16;;;;;17171:274;-1:-1:-1;;17171:274:201:o;19069:247::-;19137:6;19190:2;19178:9;19169:7;19165:23;19161:32;19158:52;;;19206:1;19203;19196:12;19158:52;19238:9;19232:16;19257:29;19280:5;19257:29;:::i;19676:184::-;19728:77;19725:1;19718:88;19825:4;19822:1;19815:15;19849:4;19846:1;19839:15;19865:274;19905:1;19931;19921:189;;19966:77;19963:1;19956:88;20067:4;20064:1;20057:15;20095:4;20092:1;20085:15;19921:189;-1:-1:-1;20124:9:201;;19865:274::o;22075:442::-;22224:2;22213:9;22206:21;22187:4;22256:6;22250:13;22299:6;22294:2;22283:9;22279:18;22272:34;22315:66;22374:6;22369:2;22358:9;22354:18;22349:2;22341:6;22337:15;22315:66;:::i;:::-;22433:2;22421:15;22438:66;22417:88;22402:104;;;;22508:2;22398:113;;22075:442;-1:-1:-1;;22075:442:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"1959400","executionCost":"infinite","totalCost":"infinite"},"external":{"ADDRESSES_PROVIDER()":"infinite","AUGUSTUS_REGISTRY()":"infinite","MAX_SLIPPAGE_PERCENT()":"240","ORACLE()":"infinite","POOL()":"infinite","executeOperation(address,uint256,uint256,address,bytes)":"infinite","owner()":"2340","renounceOwnership()":"30193","rescueTokens(address)":"infinite","transferOwnership(address)":"30385","withdrawAndSwap(address,address,uint256,uint256,uint256,bytes,address,(uint256,uint256,uint8,bytes32,bytes32))":"infinite"}},"methodIdentifiers":{"ADDRESSES_PROVIDER()":"0542975c","AUGUSTUS_REGISTRY()":"3a829867","MAX_SLIPPAGE_PERCENT()":"32e4b286","ORACLE()":"38013f02","POOL()":"7535d246","executeOperation(address,uint256,uint256,address,bytes)":"1b11d0ff","owner()":"8da5cb5b","renounceOwnership()":"715018a6","rescueTokens(address)":"00ae3bf8","transferOwnership(address)":"f2fde38b","withdrawAndSwap(address,address,uint256,uint256,uint256,bytes,address,(uint256,uint256,uint8,bytes32,bytes32))":"5fd73e07"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"addressesProvider\",\"type\":\"address\"},{\"internalType\":\"contract IParaSwapAugustusRegistry\",\"name\":\"augustusRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAsset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"receivedAmount\",\"type\":\"uint256\"}],\"name\":\"Bought\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAsset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAsset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fromAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"receivedAmount\",\"type\":\"uint256\"}],\"name\":\"Swapped\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESSES_PROVIDER\",\"outputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AUGUSTUS_REGISTRY\",\"outputs\":[{\"internalType\":\"contract IParaSwapAugustusRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_SLIPPAGE_PERCENT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ORACLE\",\"outputs\":[{\"internalType\":\"contract IPriceOracleGetter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL\",\"outputs\":[{\"internalType\":\"contract IPool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"executeOperation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"rescueTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Detailed\",\"name\":\"assetToSwapFrom\",\"type\":\"address\"},{\"internalType\":\"contract IERC20Detailed\",\"name\":\"assetToSwapTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountToSwap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountToReceive\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapAllBalanceOffset\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"swapCalldata\",\"type\":\"bytes\"},{\"internalType\":\"contract IParaSwapAugustus\",\"name\":\"augustus\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"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\"}],\"internalType\":\"struct BaseParaSwapAdapter.PermitSignature\",\"name\":\"permitParams\",\"type\":\"tuple\"}],\"name\":\"withdrawAndSwap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"rescueTokens(address)\":{\"details\":\"Emergency rescue for token stucked on this contract, as failsafe mechanism - Funds should never remain in this contract more time than during transactions - Only callable by the owner\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"withdrawAndSwap(address,address,uint256,uint256,uint256,bytes,address,(uint256,uint256,uint8,bytes32,bytes32))\":{\"details\":\"Swaps an amount of an asset to another after a withdraw and transfers the new asset to the user. The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset and perform the swap.\",\"params\":{\"amountToSwap\":\"Amount to be swapped, or maximum amount when swapping all balance\",\"assetToSwapFrom\":\"Address of the underlying asset to be swapped from\",\"assetToSwapTo\":\"Address of the underlying asset to be swapped to\",\"augustus\":\"Address of ParaSwap's AugustusSwapper contract\",\"minAmountToReceive\":\"Minimum amount to be received from the swap\",\"permitParams\":\"Struct containing the permit signatures, set to all zeroes if not used\",\"swapAllBalanceOffset\":\"Set to offset of fromAmount in Augustus calldata if wanting to swap all balance, otherwise 0\",\"swapCalldata\":\"Calldata for ParaSwap's AugustusSwapper contract\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/adapters/paraswap/ParaSwapWithdrawSwapAdapter.sol\":\"ParaSwapWithdrawSwapAdapter\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable is Context {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial owner.\\n   */\\n  constructor() {\\n    address msgSender = _msgSender();\\n    _owner = msgSender;\\n    emit OwnershipTransferred(address(0), msgSender);\\n  }\\n\\n  /**\\n   * @dev Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Leaves the contract without owner. It will not be possible to call\\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\\n   *\\n   * NOTE: Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public virtual onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = address(0);\\n  }\\n\\n  /**\\n   * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function transferOwnership(address newOwner) public virtual onlyOwner {\\n    require(newOwner != address(0), 'Ownable: new owner is the zero address');\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\",\"keccak256\":\"0x3ce185c4f579e32006f8893dbfdc1b5d878c0e2cafd1508f7ceb081698bc81f9\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport './IERC20.sol';\\nimport './Address.sol';\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n  using Address for address;\\n\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n  }\\n\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    _callOptionalReturn(\\n      token,\\n      abi.encodeWithSelector(token.transferFrom.selector, from, to, value)\\n    );\\n  }\\n\\n  /**\\n   * @dev Deprecated. This function has issues similar to the ones found in\\n   * {IERC20-approve}, and its usage is discouraged.\\n   *\\n   * Whenever possible, use {safeIncreaseAllowance} and\\n   * {safeDecreaseAllowance} instead.\\n   */\\n  function safeApprove(IERC20 token, address spender, uint256 value) internal {\\n    // safeApprove should only be called when setting an initial allowance,\\n    // or when resetting it to zero. To increase and decrease it, use\\n    // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n    require(\\n      (value == 0) || (token.allowance(address(this), spender) == 0),\\n      'SafeERC20: approve from non-zero to non-zero allowance'\\n    );\\n    _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n  }\\n\\n  function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n    uint256 newAllowance = token.allowance(address(this), spender) + value;\\n    _callOptionalReturn(\\n      token,\\n      abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\\n    );\\n  }\\n\\n  function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n    unchecked {\\n      uint256 oldAllowance = token.allowance(address(this), spender);\\n      require(oldAllowance >= value, 'SafeERC20: decreased allowance below zero');\\n      uint256 newAllowance = oldAllowance - value;\\n      _callOptionalReturn(\\n        token,\\n        abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n   * on the return value: the return value is optional (but if data is returned, it must not be false).\\n   * @param token The token targeted by the call.\\n   * @param data The call data (encoded using abi.encode or one of its variants).\\n   */\\n  function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n    // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n    // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n    // the target address contains contract code and also asserts for success in the low-level call.\\n\\n    bytes memory returndata = address(token).functionCall(data, 'SafeERC20: low-level call failed');\\n    if (returndata.length > 0) {\\n      // Return data is optional\\n      require(abi.decode(returndata, (bool)), 'SafeERC20: ERC20 operation did not succeed');\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x9ada5448c24f34f934122c0e11d1a89bf9a31b7ade0dcb935bd7dcb339ef7f32\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/// @title Optimized overflow and underflow safe math operations\\n/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\\nlibrary SafeMath {\\n  /// @notice Returns x + y, reverts if sum overflows uint256\\n  /// @param x The augend\\n  /// @param y The addend\\n  /// @return z The sum of x and y\\n  function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x + y) >= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @param message The error msg\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y, string memory message) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x, message);\\n    }\\n  }\\n\\n  /// @notice Returns x * y, reverts if overflows\\n  /// @param x The multiplicand\\n  /// @param y The multiplier\\n  /// @return z The product of x and y\\n  function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require(x == 0 || (z = x * y) / x == y);\\n    }\\n  }\\n\\n  /// @notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\\n  /// @param x The numerator\\n  /// @param y The denominator\\n  /// @return z The product of x and y\\n  function div(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    return x / y;\\n  }\\n}\\n\",\"keccak256\":\"0xf1c5d8ba70a5fc3e20dbbc2aa2a2278d2535a57bc1e9abf1228ebc3068a045f0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IFlashLoanSimpleReceiver} from '../interfaces/IFlashLoanSimpleReceiver.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title FlashLoanSimpleReceiverBase\\n * @author Aave\\n * @notice Base contract to develop a flashloan-receiver contract.\\n */\\nabstract contract FlashLoanSimpleReceiverBase is IFlashLoanSimpleReceiver {\\n  IPoolAddressesProvider public immutable override ADDRESSES_PROVIDER;\\n  IPool public immutable override POOL;\\n\\n  constructor(IPoolAddressesProvider provider) {\\n    ADDRESSES_PROVIDER = provider;\\n    POOL = IPool(provider.getPool());\\n  }\\n}\\n\",\"keccak256\":\"0x3a04fc046c4f04c71ff230eba56e56bb718be41e4317f0c938bd287d81e384b1\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../interfaces/IPool.sol';\\n\\n/**\\n * @title IFlashLoanSimpleReceiver\\n * @author Aave\\n * @notice Defines the basic interface of a flashloan-receiver contract.\\n * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract\\n */\\ninterface IFlashLoanSimpleReceiver {\\n  /**\\n   * @notice Executes an operation after receiving the flash-borrowed asset\\n   * @dev Ensure that the contract can return the debt + premium, e.g., has\\n   *      enough funds to repay and has approved the Pool to pull the total amount\\n   * @param asset The address of the flash-borrowed asset\\n   * @param amount The amount of the flash-borrowed asset\\n   * @param premium The fee of the flash-borrowed asset\\n   * @param initiator The address of the flashloan initiator\\n   * @param params The byte-encoded params passed when initiating the flashloan\\n   * @return True if the execution of the operation succeeds, false otherwise\\n   */\\n  function executeOperation(\\n    address asset,\\n    uint256 amount,\\n    uint256 premium,\\n    address initiator,\\n    bytes calldata params\\n  ) external returns (bool);\\n\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  function POOL() external view returns (IPool);\\n}\\n\",\"keccak256\":\"0xba50a7834ddfdca3e3cfac09043f72699be42ff88925641ac30950a434b2b2ff\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/adapters/paraswap/BaseParaSwapAdapter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {DataTypes} from '@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol';\\nimport {FlashLoanSimpleReceiverBase} from '@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol';\\nimport {GPv2SafeERC20} from '@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {IERC20WithPermit} from '@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol';\\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\\nimport {IPriceOracleGetter} from '@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol';\\nimport {SafeMath} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol';\\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\\n\\n/**\\n * @title BaseParaSwapAdapter\\n * @notice Utility functions for adapters using ParaSwap\\n * @author Jason Raymond Bell\\n */\\nabstract contract BaseParaSwapAdapter is FlashLoanSimpleReceiverBase, Ownable {\\n  using SafeMath for uint256;\\n  using GPv2SafeERC20 for IERC20;\\n  using GPv2SafeERC20 for IERC20Detailed;\\n  using GPv2SafeERC20 for IERC20WithPermit;\\n\\n  struct PermitSignature {\\n    uint256 amount;\\n    uint256 deadline;\\n    uint8 v;\\n    bytes32 r;\\n    bytes32 s;\\n  }\\n\\n  // Max slippage percent allowed\\n  uint256 public constant MAX_SLIPPAGE_PERCENT = 3000; // 30%\\n\\n  IPriceOracleGetter public immutable ORACLE;\\n\\n  event Swapped(\\n    address indexed fromAsset,\\n    address indexed toAsset,\\n    uint256 fromAmount,\\n    uint256 receivedAmount\\n  );\\n  event Bought(\\n    address indexed fromAsset,\\n    address indexed toAsset,\\n    uint256 amountSold,\\n    uint256 receivedAmount\\n  );\\n\\n  constructor(\\n    IPoolAddressesProvider addressesProvider\\n  ) FlashLoanSimpleReceiverBase(addressesProvider) {\\n    ORACLE = IPriceOracleGetter(addressesProvider.getPriceOracle());\\n  }\\n\\n  /**\\n   * @dev Get the price of the asset from the oracle denominated in eth\\n   * @param asset address\\n   * @return eth price for the asset\\n   */\\n  function _getPrice(address asset) internal view returns (uint256) {\\n    return ORACLE.getAssetPrice(asset);\\n  }\\n\\n  /**\\n   * @dev Get the decimals of an asset\\n   * @return number of decimals of the asset\\n   */\\n  function _getDecimals(IERC20Detailed asset) internal view returns (uint8) {\\n    uint8 decimals = asset.decimals();\\n    // Ensure 10**decimals won't overflow a uint256\\n    require(decimals <= 77, 'TOO_MANY_DECIMALS_ON_TOKEN');\\n    return decimals;\\n  }\\n\\n  /**\\n   * @dev Get the aToken associated to the asset\\n   * @return address of the aToken\\n   */\\n  function _getReserveData(address asset) internal view returns (DataTypes.ReserveData memory) {\\n    return POOL.getReserveData(asset);\\n  }\\n\\n  function _pullATokenAndWithdraw(\\n    address reserve,\\n    address user,\\n    uint256 amount,\\n    PermitSignature memory permitSignature\\n  ) internal {\\n    IERC20WithPermit reserveAToken = IERC20WithPermit(\\n      _getReserveData(address(reserve)).aTokenAddress\\n    );\\n    _pullATokenAndWithdraw(reserve, reserveAToken, user, amount, permitSignature);\\n  }\\n\\n  /**\\n   * @dev Pull the ATokens from the user\\n   * @param reserve address of the asset\\n   * @param reserveAToken address of the aToken of the reserve\\n   * @param user address\\n   * @param amount of tokens to be transferred to the contract\\n   * @param permitSignature struct containing the permit signature\\n   */\\n  function _pullATokenAndWithdraw(\\n    address reserve,\\n    IERC20WithPermit reserveAToken,\\n    address user,\\n    uint256 amount,\\n    PermitSignature memory permitSignature\\n  ) internal {\\n    // If deadline is set to zero, assume there is no signature for permit\\n    if (permitSignature.deadline != 0) {\\n      reserveAToken.permit(\\n        user,\\n        address(this),\\n        permitSignature.amount,\\n        permitSignature.deadline,\\n        permitSignature.v,\\n        permitSignature.r,\\n        permitSignature.s\\n      );\\n    }\\n\\n    // transfer from user to adapter\\n    reserveAToken.safeTransferFrom(user, address(this), amount);\\n\\n    // withdraw reserve\\n    require(POOL.withdraw(reserve, amount, address(this)) == amount, 'UNEXPECTED_AMOUNT_WITHDRAWN');\\n  }\\n\\n  /**\\n   * @dev Emergency rescue for token stucked on this contract, as failsafe mechanism\\n   * - Funds should never remain in this contract more time than during transactions\\n   * - Only callable by the owner\\n   */\\n  function rescueTokens(IERC20 token) external onlyOwner {\\n    token.safeTransfer(owner(), token.balanceOf(address(this)));\\n  }\\n}\\n\",\"keccak256\":\"0xcd12294fd39d7cc5879af5570f55b6bb65200dfeb44c85d16225591127c58491\",\"license\":\"AGPL-3.0\"},\"contracts/adapters/paraswap/BaseParaSwapSellAdapter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {SafeERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol';\\nimport {SafeMath} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol';\\nimport {PercentageMath} from '@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol';\\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {IParaSwapAugustus} from './interfaces/IParaSwapAugustus.sol';\\nimport {IParaSwapAugustusRegistry} from './interfaces/IParaSwapAugustusRegistry.sol';\\nimport {BaseParaSwapAdapter} from './BaseParaSwapAdapter.sol';\\n\\n/**\\n * @title BaseParaSwapSellAdapter\\n * @notice Implements the logic for selling tokens on ParaSwap\\n * @author Jason Raymond Bell\\n */\\nabstract contract BaseParaSwapSellAdapter is BaseParaSwapAdapter {\\n  using PercentageMath for uint256;\\n  using SafeMath for uint256;\\n  using SafeERC20 for IERC20Detailed;\\n\\n  IParaSwapAugustusRegistry public immutable AUGUSTUS_REGISTRY;\\n\\n  constructor(\\n    IPoolAddressesProvider addressesProvider,\\n    IParaSwapAugustusRegistry augustusRegistry\\n  ) BaseParaSwapAdapter(addressesProvider) {\\n    // Do something on Augustus registry to check the right contract was passed\\n    require(!augustusRegistry.isValidAugustus(address(0)));\\n    AUGUSTUS_REGISTRY = augustusRegistry;\\n  }\\n\\n  /**\\n   * @dev Swaps a token for another using ParaSwap\\n   * @param fromAmountOffset Offset of fromAmount in Augustus calldata if it should be overwritten, otherwise 0\\n   * @param swapCalldata Calldata for ParaSwap's AugustusSwapper contract\\n   * @param augustus Address of ParaSwap's AugustusSwapper contract\\n   * @param assetToSwapFrom Address of the asset to be swapped from\\n   * @param assetToSwapTo Address of the asset to be swapped to\\n   * @param amountToSwap Amount to be swapped\\n   * @param minAmountToReceive Minimum amount to be received from the swap\\n   * @return amountReceived The amount received from the swap\\n   */\\n  function _sellOnParaSwap(\\n    uint256 fromAmountOffset,\\n    bytes memory swapCalldata,\\n    IParaSwapAugustus augustus,\\n    IERC20Detailed assetToSwapFrom,\\n    IERC20Detailed assetToSwapTo,\\n    uint256 amountToSwap,\\n    uint256 minAmountToReceive\\n  ) internal returns (uint256 amountReceived) {\\n    require(AUGUSTUS_REGISTRY.isValidAugustus(address(augustus)), 'INVALID_AUGUSTUS');\\n\\n    {\\n      uint256 fromAssetDecimals = _getDecimals(assetToSwapFrom);\\n      uint256 toAssetDecimals = _getDecimals(assetToSwapTo);\\n\\n      uint256 fromAssetPrice = _getPrice(address(assetToSwapFrom));\\n      uint256 toAssetPrice = _getPrice(address(assetToSwapTo));\\n\\n      uint256 expectedMinAmountOut = amountToSwap\\n        .mul(fromAssetPrice.mul(10 ** toAssetDecimals))\\n        .div(toAssetPrice.mul(10 ** fromAssetDecimals))\\n        .percentMul(PercentageMath.PERCENTAGE_FACTOR - MAX_SLIPPAGE_PERCENT);\\n\\n      require(expectedMinAmountOut <= minAmountToReceive, 'MIN_AMOUNT_EXCEEDS_MAX_SLIPPAGE');\\n    }\\n\\n    uint256 balanceBeforeAssetFrom = assetToSwapFrom.balanceOf(address(this));\\n    require(balanceBeforeAssetFrom >= amountToSwap, 'INSUFFICIENT_BALANCE_BEFORE_SWAP');\\n    uint256 balanceBeforeAssetTo = assetToSwapTo.balanceOf(address(this));\\n\\n    address tokenTransferProxy = augustus.getTokenTransferProxy();\\n    assetToSwapFrom.safeApprove(tokenTransferProxy, 0);\\n    assetToSwapFrom.safeApprove(tokenTransferProxy, amountToSwap);\\n\\n    if (fromAmountOffset != 0) {\\n      // Ensure 256 bit (32 bytes) fromAmount value is within bounds of the\\n      // calldata, not overlapping with the first 4 bytes (function selector).\\n      require(\\n        fromAmountOffset >= 4 && fromAmountOffset <= swapCalldata.length.sub(32),\\n        'FROM_AMOUNT_OFFSET_OUT_OF_RANGE'\\n      );\\n      // Overwrite the fromAmount with the correct amount for the swap.\\n      // In memory, swapCalldata consists of a 256 bit length field, followed by\\n      // the actual bytes data, that is why 32 is added to the byte offset.\\n      assembly {\\n        mstore(add(swapCalldata, add(fromAmountOffset, 32)), amountToSwap)\\n      }\\n    }\\n    (bool success, ) = address(augustus).call(swapCalldata);\\n    if (!success) {\\n      // Copy revert reason from call\\n      assembly {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n    require(\\n      assetToSwapFrom.balanceOf(address(this)) == balanceBeforeAssetFrom - amountToSwap,\\n      'WRONG_BALANCE_AFTER_SWAP'\\n    );\\n    amountReceived = assetToSwapTo.balanceOf(address(this)).sub(balanceBeforeAssetTo);\\n    require(amountReceived >= minAmountToReceive, 'INSUFFICIENT_AMOUNT_RECEIVED');\\n\\n    emit Swapped(address(assetToSwapFrom), address(assetToSwapTo), amountToSwap, amountReceived);\\n  }\\n}\\n\",\"keccak256\":\"0x8397250619e16fbe40ecb9ecd319eecccbc76bf0893ba053b9c96291c173005b\",\"license\":\"AGPL-3.0\"},\"contracts/adapters/paraswap/ParaSwapWithdrawSwapAdapter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {IERC20WithPermit} from '@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol';\\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\\nimport {BaseParaSwapSellAdapter} from './BaseParaSwapSellAdapter.sol';\\nimport {IParaSwapAugustusRegistry} from './interfaces/IParaSwapAugustusRegistry.sol';\\nimport {SafeERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeERC20.sol';\\nimport {IParaSwapAugustus} from './interfaces/IParaSwapAugustus.sol';\\nimport {ReentrancyGuard} from '../../dependencies/openzeppelin/ReentrancyGuard.sol';\\n\\ncontract ParaSwapWithdrawSwapAdapter is BaseParaSwapSellAdapter, ReentrancyGuard {\\n  using SafeERC20 for IERC20Detailed;\\n\\n  constructor(\\n    IPoolAddressesProvider addressesProvider,\\n    IParaSwapAugustusRegistry augustusRegistry,\\n    address owner\\n  ) BaseParaSwapSellAdapter(addressesProvider, augustusRegistry) {\\n    transferOwnership(owner);\\n  }\\n\\n  function executeOperation(\\n    address,\\n    uint256,\\n    uint256,\\n    address,\\n    bytes calldata\\n  ) external override nonReentrant returns (bool) {\\n    revert('NOT_SUPPORTED');\\n  }\\n\\n  /**\\n   * @dev Swaps an amount of an asset to another after a withdraw and transfers the new asset to the user.\\n   * The user should give this contract allowance to pull the ATokens in order to withdraw the underlying asset and perform the swap.\\n   * @param assetToSwapFrom Address of the underlying asset to be swapped from\\n   * @param assetToSwapTo Address of the underlying asset to be swapped to\\n   * @param amountToSwap Amount to be swapped, or maximum amount when swapping all balance\\n   * @param minAmountToReceive Minimum amount to be received from the swap\\n   * @param swapAllBalanceOffset Set to offset of fromAmount in Augustus calldata if wanting to swap all balance, otherwise 0\\n   * @param swapCalldata Calldata for ParaSwap's AugustusSwapper contract\\n   * @param augustus Address of ParaSwap's AugustusSwapper contract\\n   * @param permitParams Struct containing the permit signatures, set to all zeroes if not used\\n   */\\n  function withdrawAndSwap(\\n    IERC20Detailed assetToSwapFrom,\\n    IERC20Detailed assetToSwapTo,\\n    uint256 amountToSwap,\\n    uint256 minAmountToReceive,\\n    uint256 swapAllBalanceOffset,\\n    bytes calldata swapCalldata,\\n    IParaSwapAugustus augustus,\\n    PermitSignature calldata permitParams\\n  ) external nonReentrant {\\n    IERC20WithPermit aToken = IERC20WithPermit(\\n      _getReserveData(address(assetToSwapFrom)).aTokenAddress\\n    );\\n\\n    if (swapAllBalanceOffset != 0) {\\n      uint256 balance = aToken.balanceOf(msg.sender);\\n      require(balance <= amountToSwap, 'INSUFFICIENT_AMOUNT_TO_SWAP');\\n      amountToSwap = balance;\\n    }\\n\\n    _pullATokenAndWithdraw(\\n      address(assetToSwapFrom),\\n      aToken,\\n      msg.sender,\\n      amountToSwap,\\n      permitParams\\n    );\\n\\n    uint256 amountReceived = _sellOnParaSwap(\\n      swapAllBalanceOffset,\\n      swapCalldata,\\n      augustus,\\n      assetToSwapFrom,\\n      assetToSwapTo,\\n      amountToSwap,\\n      minAmountToReceive\\n    );\\n\\n    assetToSwapTo.safeTransfer(msg.sender, amountReceived);\\n  }\\n}\",\"keccak256\":\"0x03076aac03c36de896de4e3064f5ed8625cf1953473463f38da20addc3c1cd6d\",\"license\":\"AGPL-3.0\"},\"contracts/adapters/paraswap/interfaces/IParaSwapAugustus.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IParaSwapAugustus {\\n  function getTokenTransferProxy() external view returns (address);\\n}\\n\",\"keccak256\":\"0x8feda4c8f1710f2365681625e9feada9cc9d129ac045645b2c893e06c817815b\",\"license\":\"AGPL-3.0\"},\"contracts/adapters/paraswap/interfaces/IParaSwapAugustusRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IParaSwapAugustusRegistry {\\n  function isValidAugustus(address augustus) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xd5e1e2b15318733975a6dd1aa3ff16842a88f2638458538e1a55ee37a4f3dddc\",\"license\":\"AGPL-3.0\"},\"contracts/dependencies/openzeppelin/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.10;\\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    // On the first call to nonReentrant, _notEntered will be true\\n    require(_status != _ENTERED, 'ReentrancyGuard: reentrant call');\\n\\n    // Any calls to nonReentrant after this point will fail\\n    _status = _ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    _status = _NOT_ENTERED;\\n  }\\n}\\n\",\"keccak256\":\"0xdd8ef14496c07389f4ac9e4a5e63ef92d1c7bfca2a5eb3d322934dcf50237577\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1472,"contract":"contracts/adapters/paraswap/ParaSwapWithdrawSwapAdapter.sol:ParaSwapWithdrawSwapAdapter","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":30972,"contract":"contracts/adapters/paraswap/ParaSwapWithdrawSwapAdapter.sol:ParaSwapWithdrawSwapAdapter","label":"_status","offset":0,"slot":"1","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/adapters/paraswap/interfaces/IParaSwapAugustus.sol":{"IParaSwapAugustus":{"abi":[{"inputs":[],"name":"getTokenTransferProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getTokenTransferProxy()":"d2c4b598"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getTokenTransferProxy\",\"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/adapters/paraswap/interfaces/IParaSwapAugustus.sol\":\"IParaSwapAugustus\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"contracts/adapters/paraswap/interfaces/IParaSwapAugustus.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IParaSwapAugustus {\\n  function getTokenTransferProxy() external view returns (address);\\n}\\n\",\"keccak256\":\"0x8feda4c8f1710f2365681625e9feada9cc9d129ac045645b2c893e06c817815b\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/adapters/paraswap/interfaces/IParaSwapAugustusRegistry.sol":{"IParaSwapAugustusRegistry":{"abi":[{"inputs":[{"internalType":"address","name":"augustus","type":"address"}],"name":"isValidAugustus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"isValidAugustus(address)":"fb04e17b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"augustus\",\"type\":\"address\"}],\"name\":\"isValidAugustus\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/adapters/paraswap/interfaces/IParaSwapAugustusRegistry.sol\":\"IParaSwapAugustusRegistry\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"contracts/adapters/paraswap/interfaces/IParaSwapAugustusRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IParaSwapAugustusRegistry {\\n  function isValidAugustus(address augustus) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xd5e1e2b15318733975a6dd1aa3ff16842a88f2638458538e1a55ee37a4f3dddc\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/dependencies/openzeppelin/ReentrancyGuard.sol":{"ReentrancyGuard":{"abi":[],"devdoc":{"details":"Contract module that helps prevent reentrant calls to a function. Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier available, which can be applied to functions to make sure there are no nested (reentrant) calls to them. Note that because there is a single `nonReentrant` guard, functions marked as `nonReentrant` may not call one another. This can be worked around by making those functions `private`, and then adding `external` `nonReentrant` entry points to them. TIP: If you would like to learn more about reentrancy and alternative ways to protect against it, check out our blog post https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"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\":{\"contracts/dependencies/openzeppelin/ReentrancyGuard.sol\":\"ReentrancyGuard\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"contracts/dependencies/openzeppelin/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.10;\\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    // On the first call to nonReentrant, _notEntered will be true\\n    require(_status != _ENTERED, 'ReentrancyGuard: reentrant call');\\n\\n    // Any calls to nonReentrant after this point will fail\\n    _status = _ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    _status = _NOT_ENTERED;\\n  }\\n}\\n\",\"keccak256\":\"0xdd8ef14496c07389f4ac9e4a5e63ef92d1c7bfca2a5eb3d322934dcf50237577\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":30972,"contract":"contracts/dependencies/openzeppelin/ReentrancyGuard.sol:ReentrancyGuard","label":"_status","offset":0,"slot":"0","type":"t_uint256"}],"types":{"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/libraries/DataTypesHelper.sol":{"DataTypesHelper":{"abi":[],"devdoc":{"author":"Aave","details":"Helper library to track user current debt balance, used by WrappedTokenGatewayV3","kind":"dev","methods":{},"title":"DataTypesHelper","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212207d9b0bfb70a469717d8dd03aac3ec204d44cc6117c4e7e19c3462c4957bdf8e964736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0x9B0BFB70A469717D8DD03AAC3EC204D44CC6117C4E7E19C3462C4957BDF8 0xE9 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"388:552:153:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;388:552:153;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212207d9b0bfb70a469717d8dd03aac3ec204d44cc6117c4e7e19c3462c4957bdf8e964736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0x9B0BFB70A469717D8DD03AAC3EC204D44CC6117C4E7E19C3462C4957BDF8 0xE9 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"388:552:153:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"getUserCurrentDebt(address,struct DataTypes.ReserveData memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Aave\",\"details\":\"Helper library to track user current debt balance, used by WrappedTokenGatewayV3\",\"kind\":\"dev\",\"methods\":{},\"title\":\"DataTypesHelper\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/DataTypesHelper.sol\":\"DataTypesHelper\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/libraries/DataTypesHelper.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {DataTypes} from '@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title DataTypesHelper\\n * @author Aave\\n * @dev Helper library to track user current debt balance, used by WrappedTokenGatewayV3\\n */\\nlibrary DataTypesHelper {\\n  /**\\n   * @notice Fetches the user current stable and variable debt balances\\n   * @param user The user address\\n   * @param reserve The reserve data object\\n   * @return The stable debt balance\\n   * @return The variable debt balance\\n   **/\\n  function getUserCurrentDebt(\\n    address user,\\n    DataTypes.ReserveData memory reserve\\n  ) internal view returns (uint256, uint256) {\\n    return (\\n      IERC20(reserve.stableDebtTokenAddress).balanceOf(user),\\n      IERC20(reserve.variableDebtTokenAddress).balanceOf(user)\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5b0f93b97472ab6d98e1502c71a8492862eb95f389a1b27a18bbe323fb66beae\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/misc/UiIncentiveDataProviderV3.sol":{"UiIncentiveDataProviderV3":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getFullReservesIncentiveData","outputs":[{"components":[{"internalType":"address","name":"underlyingAsset","type":"address"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"incentiveControllerAddress","type":"address"},{"components":[{"internalType":"string","name":"rewardTokenSymbol","type":"string"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"address","name":"rewardOracleAddress","type":"address"},{"internalType":"uint256","name":"emissionPerSecond","type":"uint256"},{"internalType":"uint256","name":"incentivesLastUpdateTimestamp","type":"uint256"},{"internalType":"uint256","name":"tokenIncentivesIndex","type":"uint256"},{"internalType":"uint256","name":"emissionEndTimestamp","type":"uint256"},{"internalType":"int256","name":"rewardPriceFeed","type":"int256"},{"internalType":"uint8","name":"rewardTokenDecimals","type":"uint8"},{"internalType":"uint8","name":"precision","type":"uint8"},{"internalType":"uint8","name":"priceFeedDecimals","type":"uint8"}],"internalType":"struct IUiIncentiveDataProviderV3.RewardInfo[]","name":"rewardsTokenInformation","type":"tuple[]"}],"internalType":"struct IUiIncentiveDataProviderV3.IncentiveData","name":"aIncentiveData","type":"tuple"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"incentiveControllerAddress","type":"address"},{"components":[{"internalType":"string","name":"rewardTokenSymbol","type":"string"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"address","name":"rewardOracleAddress","type":"address"},{"internalType":"uint256","name":"emissionPerSecond","type":"uint256"},{"internalType":"uint256","name":"incentivesLastUpdateTimestamp","type":"uint256"},{"internalType":"uint256","name":"tokenIncentivesIndex","type":"uint256"},{"internalType":"uint256","name":"emissionEndTimestamp","type":"uint256"},{"internalType":"int256","name":"rewardPriceFeed","type":"int256"},{"internalType":"uint8","name":"rewardTokenDecimals","type":"uint8"},{"internalType":"uint8","name":"precision","type":"uint8"},{"internalType":"uint8","name":"priceFeedDecimals","type":"uint8"}],"internalType":"struct IUiIncentiveDataProviderV3.RewardInfo[]","name":"rewardsTokenInformation","type":"tuple[]"}],"internalType":"struct IUiIncentiveDataProviderV3.IncentiveData","name":"vIncentiveData","type":"tuple"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"incentiveControllerAddress","type":"address"},{"components":[{"internalType":"string","name":"rewardTokenSymbol","type":"string"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"address","name":"rewardOracleAddress","type":"address"},{"internalType":"uint256","name":"emissionPerSecond","type":"uint256"},{"internalType":"uint256","name":"incentivesLastUpdateTimestamp","type":"uint256"},{"internalType":"uint256","name":"tokenIncentivesIndex","type":"uint256"},{"internalType":"uint256","name":"emissionEndTimestamp","type":"uint256"},{"internalType":"int256","name":"rewardPriceFeed","type":"int256"},{"internalType":"uint8","name":"rewardTokenDecimals","type":"uint8"},{"internalType":"uint8","name":"precision","type":"uint8"},{"internalType":"uint8","name":"priceFeedDecimals","type":"uint8"}],"internalType":"struct IUiIncentiveDataProviderV3.RewardInfo[]","name":"rewardsTokenInformation","type":"tuple[]"}],"internalType":"struct IUiIncentiveDataProviderV3.IncentiveData","name":"sIncentiveData","type":"tuple"}],"internalType":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData[]","name":"","type":"tuple[]"},{"components":[{"internalType":"address","name":"underlyingAsset","type":"address"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"incentiveControllerAddress","type":"address"},{"components":[{"internalType":"string","name":"rewardTokenSymbol","type":"string"},{"internalType":"address","name":"rewardOracleAddress","type":"address"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"uint256","name":"userUnclaimedRewards","type":"uint256"},{"internalType":"uint256","name":"tokenIncentivesUserIndex","type":"uint256"},{"internalType":"int256","name":"rewardPriceFeed","type":"int256"},{"internalType":"uint8","name":"priceFeedDecimals","type":"uint8"},{"internalType":"uint8","name":"rewardTokenDecimals","type":"uint8"}],"internalType":"struct IUiIncentiveDataProviderV3.UserRewardInfo[]","name":"userRewardsInformation","type":"tuple[]"}],"internalType":"struct IUiIncentiveDataProviderV3.UserIncentiveData","name":"aTokenIncentivesUserData","type":"tuple"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"incentiveControllerAddress","type":"address"},{"components":[{"internalType":"string","name":"rewardTokenSymbol","type":"string"},{"internalType":"address","name":"rewardOracleAddress","type":"address"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"uint256","name":"userUnclaimedRewards","type":"uint256"},{"internalType":"uint256","name":"tokenIncentivesUserIndex","type":"uint256"},{"internalType":"int256","name":"rewardPriceFeed","type":"int256"},{"internalType":"uint8","name":"priceFeedDecimals","type":"uint8"},{"internalType":"uint8","name":"rewardTokenDecimals","type":"uint8"}],"internalType":"struct IUiIncentiveDataProviderV3.UserRewardInfo[]","name":"userRewardsInformation","type":"tuple[]"}],"internalType":"struct IUiIncentiveDataProviderV3.UserIncentiveData","name":"vTokenIncentivesUserData","type":"tuple"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"incentiveControllerAddress","type":"address"},{"components":[{"internalType":"string","name":"rewardTokenSymbol","type":"string"},{"internalType":"address","name":"rewardOracleAddress","type":"address"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"uint256","name":"userUnclaimedRewards","type":"uint256"},{"internalType":"uint256","name":"tokenIncentivesUserIndex","type":"uint256"},{"internalType":"int256","name":"rewardPriceFeed","type":"int256"},{"internalType":"uint8","name":"priceFeedDecimals","type":"uint8"},{"internalType":"uint8","name":"rewardTokenDecimals","type":"uint8"}],"internalType":"struct IUiIncentiveDataProviderV3.UserRewardInfo[]","name":"userRewardsInformation","type":"tuple[]"}],"internalType":"struct IUiIncentiveDataProviderV3.UserIncentiveData","name":"sTokenIncentivesUserData","type":"tuple"}],"internalType":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"name":"getReservesIncentivesData","outputs":[{"components":[{"internalType":"address","name":"underlyingAsset","type":"address"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"incentiveControllerAddress","type":"address"},{"components":[{"internalType":"string","name":"rewardTokenSymbol","type":"string"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"address","name":"rewardOracleAddress","type":"address"},{"internalType":"uint256","name":"emissionPerSecond","type":"uint256"},{"internalType":"uint256","name":"incentivesLastUpdateTimestamp","type":"uint256"},{"internalType":"uint256","name":"tokenIncentivesIndex","type":"uint256"},{"internalType":"uint256","name":"emissionEndTimestamp","type":"uint256"},{"internalType":"int256","name":"rewardPriceFeed","type":"int256"},{"internalType":"uint8","name":"rewardTokenDecimals","type":"uint8"},{"internalType":"uint8","name":"precision","type":"uint8"},{"internalType":"uint8","name":"priceFeedDecimals","type":"uint8"}],"internalType":"struct IUiIncentiveDataProviderV3.RewardInfo[]","name":"rewardsTokenInformation","type":"tuple[]"}],"internalType":"struct IUiIncentiveDataProviderV3.IncentiveData","name":"aIncentiveData","type":"tuple"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"incentiveControllerAddress","type":"address"},{"components":[{"internalType":"string","name":"rewardTokenSymbol","type":"string"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"address","name":"rewardOracleAddress","type":"address"},{"internalType":"uint256","name":"emissionPerSecond","type":"uint256"},{"internalType":"uint256","name":"incentivesLastUpdateTimestamp","type":"uint256"},{"internalType":"uint256","name":"tokenIncentivesIndex","type":"uint256"},{"internalType":"uint256","name":"emissionEndTimestamp","type":"uint256"},{"internalType":"int256","name":"rewardPriceFeed","type":"int256"},{"internalType":"uint8","name":"rewardTokenDecimals","type":"uint8"},{"internalType":"uint8","name":"precision","type":"uint8"},{"internalType":"uint8","name":"priceFeedDecimals","type":"uint8"}],"internalType":"struct IUiIncentiveDataProviderV3.RewardInfo[]","name":"rewardsTokenInformation","type":"tuple[]"}],"internalType":"struct IUiIncentiveDataProviderV3.IncentiveData","name":"vIncentiveData","type":"tuple"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"incentiveControllerAddress","type":"address"},{"components":[{"internalType":"string","name":"rewardTokenSymbol","type":"string"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"address","name":"rewardOracleAddress","type":"address"},{"internalType":"uint256","name":"emissionPerSecond","type":"uint256"},{"internalType":"uint256","name":"incentivesLastUpdateTimestamp","type":"uint256"},{"internalType":"uint256","name":"tokenIncentivesIndex","type":"uint256"},{"internalType":"uint256","name":"emissionEndTimestamp","type":"uint256"},{"internalType":"int256","name":"rewardPriceFeed","type":"int256"},{"internalType":"uint8","name":"rewardTokenDecimals","type":"uint8"},{"internalType":"uint8","name":"precision","type":"uint8"},{"internalType":"uint8","name":"priceFeedDecimals","type":"uint8"}],"internalType":"struct IUiIncentiveDataProviderV3.RewardInfo[]","name":"rewardsTokenInformation","type":"tuple[]"}],"internalType":"struct IUiIncentiveDataProviderV3.IncentiveData","name":"sIncentiveData","type":"tuple"}],"internalType":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getUserReservesIncentivesData","outputs":[{"components":[{"internalType":"address","name":"underlyingAsset","type":"address"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"incentiveControllerAddress","type":"address"},{"components":[{"internalType":"string","name":"rewardTokenSymbol","type":"string"},{"internalType":"address","name":"rewardOracleAddress","type":"address"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"uint256","name":"userUnclaimedRewards","type":"uint256"},{"internalType":"uint256","name":"tokenIncentivesUserIndex","type":"uint256"},{"internalType":"int256","name":"rewardPriceFeed","type":"int256"},{"internalType":"uint8","name":"priceFeedDecimals","type":"uint8"},{"internalType":"uint8","name":"rewardTokenDecimals","type":"uint8"}],"internalType":"struct IUiIncentiveDataProviderV3.UserRewardInfo[]","name":"userRewardsInformation","type":"tuple[]"}],"internalType":"struct IUiIncentiveDataProviderV3.UserIncentiveData","name":"aTokenIncentivesUserData","type":"tuple"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"incentiveControllerAddress","type":"address"},{"components":[{"internalType":"string","name":"rewardTokenSymbol","type":"string"},{"internalType":"address","name":"rewardOracleAddress","type":"address"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"uint256","name":"userUnclaimedRewards","type":"uint256"},{"internalType":"uint256","name":"tokenIncentivesUserIndex","type":"uint256"},{"internalType":"int256","name":"rewardPriceFeed","type":"int256"},{"internalType":"uint8","name":"priceFeedDecimals","type":"uint8"},{"internalType":"uint8","name":"rewardTokenDecimals","type":"uint8"}],"internalType":"struct IUiIncentiveDataProviderV3.UserRewardInfo[]","name":"userRewardsInformation","type":"tuple[]"}],"internalType":"struct IUiIncentiveDataProviderV3.UserIncentiveData","name":"vTokenIncentivesUserData","type":"tuple"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"incentiveControllerAddress","type":"address"},{"components":[{"internalType":"string","name":"rewardTokenSymbol","type":"string"},{"internalType":"address","name":"rewardOracleAddress","type":"address"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"uint256","name":"userUnclaimedRewards","type":"uint256"},{"internalType":"uint256","name":"tokenIncentivesUserIndex","type":"uint256"},{"internalType":"int256","name":"rewardPriceFeed","type":"int256"},{"internalType":"uint8","name":"priceFeedDecimals","type":"uint8"},{"internalType":"uint8","name":"rewardTokenDecimals","type":"uint8"}],"internalType":"struct IUiIncentiveDataProviderV3.UserRewardInfo[]","name":"userRewardsInformation","type":"tuple[]"}],"internalType":"struct IUiIncentiveDataProviderV3.UserIncentiveData","name":"sTokenIncentivesUserData","type":"tuple"}],"internalType":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50613cff806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80634763753614610046578063799bdcf514610070578063976fafc514610090575b600080fd5b61005961005436600461334b565b6100b0565b6040516100679291906137b7565b60405180910390f35b61008361007e36600461334b565b6100d1565b60405161006791906137e5565b6100a361009e3660046137f8565b6100e4565b6040516100679190613815565b6060806100bc846100f5565b6100c68585611a1e565b915091509250929050565b60606100dd8383611a1e565b9392505050565b60606100ef826100f5565b92915050565b606060008273ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610144573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101689190613838565b905060008173ffffffffffffffffffffffffffffffffffffffff1663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101b7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101df91908101906138df565b90506000815167ffffffffffffffff8111156101fd576101fd613855565b60405190808252806020026020018201604052801561023657816020015b61022361326f565b81526020019060019003908161021b5790505b50905060005b8251811015611a1557600082828151811061025957610259613991565b6020026020010151905083828151811061027557610275613991565b6020026020010151816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060008573ffffffffffffffffffffffffffffffffffffffff166335ea6a758685815181106102e4576102e4613991565b60200260200101516040518263ffffffff1660e01b8152600401610324919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6101e060405180830381865afa158015610342573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103669190613a49565b9050600081610100015173ffffffffffffffffffffffffffffffffffffffff166375d264136040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103de9190613838565b9050606073ffffffffffffffffffffffffffffffffffffffff821615610a9a576101008301516040517f6657732f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091841690636657732f90602401600060405180830381865afa158015610473573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261049b91908101906138df565b9050805167ffffffffffffffff8111156104b7576104b7613855565b60405190808252806020026020018201604052801561057a57816020015b61056760405180610160016040528060608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff168152602001600060ff168152602001600060ff1681525090565b8152602001906001900390816104d55790505b50915060005b8151811015610a975761061b60405180610160016040528060608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff168152602001600060ff168152602001600060ff1681525090565b82828151811061062d5761062d613991565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff9081169183018290526101008801516040517f7eff4ba800000000000000000000000000000000000000000000000000000000815290821660048201526024810192909252861690637eff4ba890604401608060405180830381865afa1580156106bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e09190613b6c565b60c08501526080840152606083015260a08201526101008601516040517f9efd6f7200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015290861690639efd6f7290602401602060405180830381865afa158015610767573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078b9190613ba2565b60ff16610120820152602080820151604080517f313ce567000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169263313ce567926004808401938290030181865afa158015610801573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108259190613ba2565b81610100019060ff16908160ff1681525050806020015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610886573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108ae9190810190613bc5565b815260208101516040517f2a17bf6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015290861690632a17bf6090602401602060405180830381865afa158015610922573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109469190613838565b73ffffffffffffffffffffffffffffffffffffffff16604080830182905280517f313ce567000000000000000000000000000000000000000000000000000000008152905163313ce567916004808201926020929091908290030181865afa1580156109b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109da9190613ba2565b81610140019060ff16908160ff1681525050806040015173ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5f9190613c50565b60e082015283518190859084908110610a7a57610a7a613991565b60200260200101819052505080610a9090613c69565b9050610580565b50505b604051806060016040528084610100015173ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152508460200181905250600083610140015173ffffffffffffffffffffffffffffffffffffffff166375d264136040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b649190613838565b9050606073ffffffffffffffffffffffffffffffffffffffff821615611220576101408501516040517f6657732f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091841690636657732f90602401600060405180830381865afa158015610bf9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c2191908101906138df565b9050805167ffffffffffffffff811115610c3d57610c3d613855565b604051908082528060200260200182016040528015610d0057816020015b610ced60405180610160016040528060608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff168152602001600060ff168152602001600060ff1681525090565b815260200190600190039081610c5b5790505b50915060005b815181101561121d57610da160405180610160016040528060608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff168152602001600060ff168152602001600060ff1681525090565b828281518110610db357610db3613991565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff9081169183018290526101408a01516040517f7eff4ba800000000000000000000000000000000000000000000000000000000815290821660048201526024810192909252861690637eff4ba890604401608060405180830381865afa158015610e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e669190613b6c565b60c08501526080840152606083015260a08201526101408801516040517f9efd6f7200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015290861690639efd6f7290602401602060405180830381865afa158015610eed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f119190613ba2565b60ff16610120820152602080820151604080517f313ce567000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169263313ce567926004808401938290030181865afa158015610f87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fab9190613ba2565b81610100019060ff16908160ff1681525050806020015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561100c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110349190810190613bc5565b815260208101516040517f2a17bf6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015290861690632a17bf6090602401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc9190613838565b73ffffffffffffffffffffffffffffffffffffffff16604080830182905280517f313ce567000000000000000000000000000000000000000000000000000000008152905163313ce567916004808201926020929091908290030181865afa15801561113c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111609190613ba2565b81610140019060ff16908160ff1681525050806040015173ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e59190613c50565b60e08201528351819085908490811061120057611200613991565b6020026020010181905250508061121690613c69565b9050610d06565b50505b604051806060016040528086610140015173ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152508660400181905250600085610120015173ffffffffffffffffffffffffffffffffffffffff166375d264136040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ea9190613838565b9050606073ffffffffffffffffffffffffffffffffffffffff8216156119a6576101208701516040517f6657732f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091841690636657732f90602401600060405180830381865afa15801561137f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113a791908101906138df565b9050805167ffffffffffffffff8111156113c3576113c3613855565b60405190808252806020026020018201604052801561148657816020015b61147360405180610160016040528060608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff168152602001600060ff168152602001600060ff1681525090565b8152602001906001900390816113e15790505b50915060005b81518110156119a35761152760405180610160016040528060608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff168152602001600060ff168152602001600060ff1681525090565b82828151811061153957611539613991565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff9081169183018290526101208c01516040517f7eff4ba800000000000000000000000000000000000000000000000000000000815290821660048201526024810192909252861690637eff4ba890604401608060405180830381865afa1580156115c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ec9190613b6c565b60c08501526080840152606083015260a08201526101208a01516040517f9efd6f7200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015290861690639efd6f7290602401602060405180830381865afa158015611673573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116979190613ba2565b60ff16610120820152602080820151604080517f313ce567000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169263313ce567926004808401938290030181865afa15801561170d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117319190613ba2565b81610100019060ff16908160ff1681525050806020015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611792573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117ba9190810190613bc5565b815260208101516040517f2a17bf6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015290861690632a17bf6090602401602060405180830381865afa15801561182e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118529190613838565b73ffffffffffffffffffffffffffffffffffffffff16604080830182905280517f313ce567000000000000000000000000000000000000000000000000000000008152905163313ce567916004808201926020929091908290030181865afa1580156118c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e69190613ba2565b81610140019060ff16908160ff1681525050806040015173ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611947573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196b9190613c50565b60e08201528351819085908490811061198657611986613991565b6020026020010181905250508061199c90613c69565b905061148c565b50505b604051806060016040528088610120015173ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815250886060018190525050505050505050508080611a0d90613c69565b91505061023c565b50949350505050565b606060008373ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a919190613838565b905060008173ffffffffffffffffffffffffffffffffffffffff1663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611ae0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b0891908101906138df565b9050600073ffffffffffffffffffffffffffffffffffffffff8516611b2e576000611b31565b81515b67ffffffffffffffff811115611b4957611b49613855565b604051908082528060200260200182016040528015611b8257816020015b611b6f61326f565b815260200190600190039081611b675790505b50905060005b82518110156132655760008473ffffffffffffffffffffffffffffffffffffffff166335ea6a75858481518110611bc157611bc1613991565b60200260200101516040518263ffffffff1660e01b8152600401611c01919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6101e060405180830381865afa158015611c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c439190613a49565b9050838281518110611c5757611c57613991565b6020026020010151838381518110611c7157611c71613991565b60200260200101516000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600081610100015173ffffffffffffffffffffffffffffffffffffffff166375d264136040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d259190613838565b905073ffffffffffffffffffffffffffffffffffffffff8116156123be576101008201516040517f6657732f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091831690636657732f90602401600060405180830381865afa158015611db8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611de091908101906138df565b90506000815167ffffffffffffffff811115611dfe57611dfe613855565b604051908082528060200260200182016040528015611e8c57816020015b60408051610100810182526060808252600060208084018290529383018190529082018190526080820181905260a0820181905260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181611e1c5790505b50905060005b825181101561234d576040805161010081018252606080825260006020830181905292820183905281018290526080810182905260a0810182905260c0810182905260e0810191909152838281518110611eee57611eee613991565b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff908116604080840182905261010089015190517f533f542a0000000000000000000000000000000000000000000000000000000081528f84166004820152908316602482015260448101919091529086169063533f542a90606401602060405180830381865afa158015611f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611faa9190613c50565b608082015260408082015190517fb022418c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e8116600483015291821660248201529086169063b022418c90604401602060405180830381865afa158015612029573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204d9190613c50565b816060018181525050806040015173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c99190613ba2565b8160e0019060ff16908160ff1681525050806040015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612129573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121519190810190613bc5565b815260408082015190517f2a17bf6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015290861690632a17bf6090602401602060405180830381865afa1580156121c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e99190613838565b73ffffffffffffffffffffffffffffffffffffffff166020808301829052604080517f313ce567000000000000000000000000000000000000000000000000000000008152905163313ce567926004808401939192918290030181865afa158015612258573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227c9190613ba2565b60ff1660c0820152602080820151604080517f50d25bcd000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216926350d25bcd926004808401938290030181865afa1580156122f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123159190613c50565b60a08201528251819084908490811061233057612330613991565b6020026020010181905250508061234690613c69565b9050611e92565b50604051806060016040528085610100015173ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff168152602001828152508686815181106123ac576123ac613991565b60200260200101516020018190525050505b600082610140015173ffffffffffffffffffffffffffffffffffffffff166375d264136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612410573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124349190613838565b905073ffffffffffffffffffffffffffffffffffffffff811615612b02576101408301516040517f6657732f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091831690636657732f90602401600060405180830381865afa1580156124c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124ef91908101906138df565b90506000815167ffffffffffffffff81111561250d5761250d613855565b60405190808252806020026020018201604052801561259b57816020015b60408051610100810182526060808252600060208084018290529383018190529082018190526080820181905260a0820181905260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161252b5790505b50905060005b8251811015612a91576040805161010081018252606080825260006020830181905292820183905281018290526080810182905260a0810182905260c0810182905260e08101919091528382815181106125fd576125fd613991565b6020026020010151816040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663533f542a8e89610140015184604001516040518463ffffffff1660e01b81526004016126ad9392919073ffffffffffffffffffffffffffffffffffffffff93841681529183166020830152909116604082015260600190565b602060405180830381865afa1580156126ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ee9190613c50565b608082015260408082015190517fb022418c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f8116600483015291821660248201529086169063b022418c90604401602060405180830381865afa15801561276d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127919190613c50565b816060018181525050806040015173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280d9190613ba2565b8160e0019060ff16908160ff1681525050806040015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561286d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128959190810190613bc5565b815260408082015190517f2a17bf6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015290861690632a17bf6090602401602060405180830381865afa158015612909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292d9190613838565b73ffffffffffffffffffffffffffffffffffffffff166020808301829052604080517f313ce567000000000000000000000000000000000000000000000000000000008152905163313ce567926004808401939192918290030181865afa15801561299c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c09190613ba2565b60ff1660c0820152602080820151604080517f50d25bcd000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216926350d25bcd926004808401938290030181865afa158015612a35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a599190613c50565b60a082015282518190849084908110612a7457612a74613991565b60200260200101819052505080612a8a90613c69565b90506125a1565b50604051806060016040528086610140015173ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200182815250878781518110612af057612af0613991565b60200260200101516040018190525050505b600083610120015173ffffffffffffffffffffffffffffffffffffffff166375d264136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b789190613838565b905073ffffffffffffffffffffffffffffffffffffffff81161561324e576101208401516040517f6657732f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091831690636657732f90602401600060405180830381865afa158015612c0b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612c3391908101906138df565b90506000815167ffffffffffffffff811115612c5157612c51613855565b604051908082528060200260200182016040528015612cdf57816020015b60408051610100810182526060808252600060208084018290529383018190529082018190526080820181905260a0820181905260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181612c6f5790505b50905060005b82518110156131dd576040805161010081018252606080825260006020830181905292820183905281018290526080810182905260a0810182905260c0810182905260e0810191909152838281518110612d4157612d41613991565b6020026020010151816040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663533f542a8f8a610120015184604001516040518463ffffffff1660e01b8152600401612df19392919073ffffffffffffffffffffffffffffffffffffffff93841681529183166020830152909116604082015260600190565b602060405180830381865afa158015612e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e329190613c50565b8160800181815250508473ffffffffffffffffffffffffffffffffffffffff1663b022418c8f83604001516040518363ffffffff1660e01b8152600401612e9c92919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b602060405180830381865afa158015612eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edd9190613c50565b816060018181525050806040015173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f599190613ba2565b8160e0019060ff16908160ff1681525050806040015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612fb9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612fe19190810190613bc5565b815260408082015190517f2a17bf6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015290861690632a17bf6090602401602060405180830381865afa158015613055573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130799190613838565b73ffffffffffffffffffffffffffffffffffffffff166020808301829052604080517f313ce567000000000000000000000000000000000000000000000000000000008152905163313ce567926004808401939192918290030181865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c9190613ba2565b60ff1660c0820152602080820151604080517f50d25bcd000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216926350d25bcd926004808401938290030181865afa158015613181573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a59190613c50565b60a0820152825181908490849081106131c0576131c0613991565b602002602001018190525050806131d690613c69565b9050612ce5565b50604051806060016040528087610120015173ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018281525088888151811061323c5761323c613991565b60200260200101516060018190525050505b50505050808061325d90613c69565b915050611b88565b5095945050505050565b6040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016132e76040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b81526040805160608082018352600080835260208084018290528385018390528086019390935283518083018552818152928301528183015291015290565b73ffffffffffffffffffffffffffffffffffffffff8116811461334857600080fd5b50565b6000806040838503121561335e57600080fd5b823561336981613326565b9150602083013561337981613326565b809150509250929050565b60005b8381101561339f578181015183820152602001613387565b838111156133ae576000848401525b50505050565b600081518084526133cc816020860160208601613384565b601f01601f19169290920160200192915050565b6000606080840173ffffffffffffffffffffffffffffffffffffffff8085511686526020818187015116818801526040915081860151848389015283815180865260809550858a019150858160051b8b0101848401935060005b82811015613531577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808c83030184528451610160815181855261347f828601826133b4565b915050878201516134a78986018273ffffffffffffffffffffffffffffffffffffffff169052565b508882015173ffffffffffffffffffffffffffffffffffffffff16848a01528a8201518b850152898201518a85015260a0808301519085015260c0808301519085015260e080830151908501526101008083015160ff908116918601919091526101208084015182169086015261014092830151169190930152938501939285019260010161343a565b509a9950505050505050505050565b600081518084526020808501808196508360051b8101915082860160005b858110156135ea5782840389528151608073ffffffffffffffffffffffffffffffffffffffff825116865286820151818888015261359e828801826133e0565b915050604080830151878303828901526135b883826133e0565b92505050606080830151925086820381880152506135d681836133e0565b9a87019a955050509084019060010161355e565b5091979650505050505050565b6000606080840173ffffffffffffffffffffffffffffffffffffffff80855116865260208181870151168188015260408087015185828a015284815180875260809650868b019150868160051b8c0101858401935060005b828110156136fd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808d830301845284516101008151818552613694828601826133b4565b91505089898301511689850152898883015116888501528b8201518c8501528a8201518b85015260a080830151818601525060c0808301516136da8287018260ff169052565b505060e09182015160ff169390910192909252938601939286019260010161364f565b509b9a5050505050505050505050565b600081518084526020808501808196508360051b8101915082860160005b858110156135ea5782840389528151608073ffffffffffffffffffffffffffffffffffffffff825116865286820151818888015261376b828801826135f7565b9150506040808301518783038289015261378583826135f7565b92505050606080830151925086820381880152506137a381836135f7565b9a87019a955050509084019060010161372b565b6040815260006137ca6040830185613540565b82810360208401526137dc818561370d565b95945050505050565b6020815260006100dd602083018461370d565b60006020828403121561380a57600080fd5b81356100dd81613326565b6020815260006100dd6020830184613540565b805161383381613326565b919050565b60006020828403121561384a57600080fd5b81516100dd81613326565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff811182821017156138a8576138a8613855565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156138d7576138d7613855565b604052919050565b600060208083850312156138f257600080fd5b825167ffffffffffffffff8082111561390a57600080fd5b818501915085601f83011261391e57600080fd5b81518181111561393057613930613855565b8060051b91506139418483016138ae565b818152918301840191848101908884111561395b57600080fd5b938501935b83851015613985578451925061397583613326565b8282529385019390850190613960565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156139d257600080fd5b6040516020810181811067ffffffffffffffff821117156139f5576139f5613855565b6040529151825250919050565b80516fffffffffffffffffffffffffffffffff8116811461383357600080fd5b805164ffffffffff8116811461383357600080fd5b805161ffff8116811461383357600080fd5b60006101e08284031215613a5c57600080fd5b613a64613884565b613a6e84846139c0565b8152613a7c60208401613a02565b6020820152613a8d60408401613a02565b6040820152613a9e60608401613a02565b6060820152613aaf60808401613a02565b6080820152613ac060a08401613a02565b60a0820152613ad160c08401613a22565b60c0820152613ae260e08401613a37565b60e0820152610100613af5818501613828565b90820152610120613b07848201613828565b90820152610140613b19848201613828565b90820152610160613b2b848201613828565b90820152610180613b3d848201613a02565b908201526101a0613b4f848201613a02565b908201526101c0613b61848201613a02565b908201529392505050565b60008060008060808587031215613b8257600080fd5b505082516020840151604085015160609095015191969095509092509050565b600060208284031215613bb457600080fd5b815160ff811681146100dd57600080fd5b600060208284031215613bd757600080fd5b815167ffffffffffffffff80821115613bef57600080fd5b818401915084601f830112613c0357600080fd5b815181811115613c1557613c15613855565b613c286020601f19601f840116016138ae565b9150808252856020828501011115613c3f57600080fd5b611a15816020840160208601613384565b600060208284031215613c6257600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613cc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea2646970667358221220a00523f5abc47861f86aa555881b92b921d831c25c6946def5607da67bd85ca164736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3CFF 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 0x47637536 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0x799BDCF5 EQ PUSH2 0x70 JUMPI DUP1 PUSH4 0x976FAFC5 EQ PUSH2 0x90 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0x54 CALLDATASIZE PUSH1 0x4 PUSH2 0x334B JUMP JUMPDEST PUSH2 0xB0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x67 SWAP3 SWAP2 SWAP1 PUSH2 0x37B7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x83 PUSH2 0x7E CALLDATASIZE PUSH1 0x4 PUSH2 0x334B JUMP JUMPDEST PUSH2 0xD1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x67 SWAP2 SWAP1 PUSH2 0x37E5 JUMP JUMPDEST PUSH2 0xA3 PUSH2 0x9E CALLDATASIZE PUSH1 0x4 PUSH2 0x37F8 JUMP JUMPDEST PUSH2 0xE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x67 SWAP2 SWAP1 PUSH2 0x3815 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH2 0xBC DUP5 PUSH2 0xF5 JUMP JUMPDEST PUSH2 0xC6 DUP6 DUP6 PUSH2 0x1A1E JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xDD DUP4 DUP4 PUSH2 0x1A1E JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xEF DUP3 PUSH2 0xF5 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x144 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x168 SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD1946DBC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1DF SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x38DF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1FD JUMPI PUSH2 0x1FD PUSH2 0x3855 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x236 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x223 PUSH2 0x326F JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x21B JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x1A15 JUMPI PUSH1 0x0 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x259 JUMPI PUSH2 0x259 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x275 JUMPI PUSH2 0x275 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 PUSH1 0x0 ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x35EA6A75 DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x2E4 JUMPI PUSH2 0x2E4 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x324 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x342 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x366 SWAP2 SWAP1 PUSH2 0x3A49 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x75D26413 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3BA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3DE SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ISZERO PUSH2 0xA9A JUMPI PUSH2 0x100 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6657732F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 DUP5 AND SWAP1 PUSH4 0x6657732F SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x473 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x49B SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x38DF JUMP JUMPDEST SWAP1 POP DUP1 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4B7 JUMPI PUSH2 0x4B7 PUSH2 0x3855 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x57A JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x567 PUSH1 0x40 MLOAD DUP1 PUSH2 0x160 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD 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 PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x4D5 JUMPI SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xA97 JUMPI PUSH2 0x61B PUSH1 0x40 MLOAD DUP1 PUSH2 0x160 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD 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 PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x62D JUMPI PUSH2 0x62D PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP9 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x7EFF4BA800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP7 AND SWAP1 PUSH4 0x7EFF4BA8 SWAP1 PUSH1 0x44 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6E0 SWAP2 SWAP1 PUSH2 0x3B6C JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x100 DUP7 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x9EFD6F7200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0x9EFD6F72 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x767 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x78B SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x313CE56700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 PUSH4 0x313CE567 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x801 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x825 SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST DUP2 PUSH2 0x100 ADD SWAP1 PUSH1 0xFF AND SWAP1 DUP2 PUSH1 0xFF AND DUP2 MSTORE POP POP DUP1 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x886 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x8AE SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x3BC5 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x2A17BF6000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0x2A17BF60 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x922 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x946 SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE DUP1 MLOAD PUSH32 0x313CE56700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9DA SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST DUP2 PUSH2 0x140 ADD SWAP1 PUSH1 0xFF AND SWAP1 DUP2 PUSH1 0xFF AND DUP2 MSTORE POP POP DUP1 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x50D25BCD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA3B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA5F SWAP2 SWAP1 PUSH2 0x3C50 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE DUP4 MLOAD DUP2 SWAP1 DUP6 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0xA7A JUMPI PUSH2 0xA7A PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP POP DUP1 PUSH2 0xA90 SWAP1 PUSH2 0x3C69 JUMP JUMPDEST SWAP1 POP PUSH2 0x580 JUMP JUMPDEST POP POP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP5 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE POP DUP5 PUSH1 0x20 ADD DUP2 SWAP1 MSTORE POP PUSH1 0x0 DUP4 PUSH2 0x140 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x75D26413 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB40 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB64 SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ISZERO PUSH2 0x1220 JUMPI PUSH2 0x140 DUP6 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6657732F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 DUP5 AND SWAP1 PUSH4 0x6657732F SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBF9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xC21 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x38DF JUMP JUMPDEST SWAP1 POP DUP1 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC3D JUMPI PUSH2 0xC3D PUSH2 0x3855 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xD00 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0xCED PUSH1 0x40 MLOAD DUP1 PUSH2 0x160 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD 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 PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0xC5B JUMPI SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x121D JUMPI PUSH2 0xDA1 PUSH1 0x40 MLOAD DUP1 PUSH2 0x160 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD 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 PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xDB3 JUMPI PUSH2 0xDB3 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP11 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x7EFF4BA800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP7 AND SWAP1 PUSH4 0x7EFF4BA8 SWAP1 PUSH1 0x44 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE42 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE66 SWAP2 SWAP1 PUSH2 0x3B6C JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x140 DUP9 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x9EFD6F7200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0x9EFD6F72 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEED JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF11 SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x313CE56700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 PUSH4 0x313CE567 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF87 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xFAB SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST DUP2 PUSH2 0x100 ADD SWAP1 PUSH1 0xFF AND SWAP1 DUP2 PUSH1 0xFF AND DUP2 MSTORE POP POP DUP1 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x100C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1034 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x3BC5 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x2A17BF6000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0x2A17BF60 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10A8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10CC SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE DUP1 MLOAD PUSH32 0x313CE56700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x113C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1160 SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST DUP2 PUSH2 0x140 ADD SWAP1 PUSH1 0xFF AND SWAP1 DUP2 PUSH1 0xFF AND DUP2 MSTORE POP POP DUP1 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x50D25BCD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11E5 SWAP2 SWAP1 PUSH2 0x3C50 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE DUP4 MLOAD DUP2 SWAP1 DUP6 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x1200 JUMPI PUSH2 0x1200 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP POP DUP1 PUSH2 0x1216 SWAP1 PUSH2 0x3C69 JUMP JUMPDEST SWAP1 POP PUSH2 0xD06 JUMP JUMPDEST POP POP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP7 PUSH2 0x140 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE POP DUP7 PUSH1 0x40 ADD DUP2 SWAP1 MSTORE POP PUSH1 0x0 DUP6 PUSH2 0x120 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x75D26413 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12EA SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ISZERO PUSH2 0x19A6 JUMPI PUSH2 0x120 DUP8 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6657732F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 DUP5 AND SWAP1 PUSH4 0x6657732F SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x137F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x13A7 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x38DF JUMP JUMPDEST SWAP1 POP DUP1 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x13C3 JUMPI PUSH2 0x13C3 PUSH2 0x3855 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1486 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x1473 PUSH1 0x40 MLOAD DUP1 PUSH2 0x160 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD 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 PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x13E1 JUMPI SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x19A3 JUMPI PUSH2 0x1527 PUSH1 0x40 MLOAD DUP1 PUSH2 0x160 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD 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 PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1539 JUMPI PUSH2 0x1539 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP13 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x7EFF4BA800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP7 AND SWAP1 PUSH4 0x7EFF4BA8 SWAP1 PUSH1 0x44 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15C8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15EC SWAP2 SWAP1 PUSH2 0x3B6C JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x120 DUP11 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x9EFD6F7200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0x9EFD6F72 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1673 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1697 SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x313CE56700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 PUSH4 0x313CE567 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x170D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1731 SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST DUP2 PUSH2 0x100 ADD SWAP1 PUSH1 0xFF AND SWAP1 DUP2 PUSH1 0xFF AND DUP2 MSTORE POP POP DUP1 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1792 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x17BA SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x3BC5 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x2A17BF6000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0x2A17BF60 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x182E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1852 SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE DUP1 MLOAD PUSH32 0x313CE56700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18C2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18E6 SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST DUP2 PUSH2 0x140 ADD SWAP1 PUSH1 0xFF AND SWAP1 DUP2 PUSH1 0xFF AND DUP2 MSTORE POP POP DUP1 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x50D25BCD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1947 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x196B SWAP2 SWAP1 PUSH2 0x3C50 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE DUP4 MLOAD DUP2 SWAP1 DUP6 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x1986 JUMPI PUSH2 0x1986 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP POP DUP1 PUSH2 0x199C SWAP1 PUSH2 0x3C69 JUMP JUMPDEST SWAP1 POP PUSH2 0x148C JUMP JUMPDEST POP POP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH2 0x120 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE POP DUP9 PUSH1 0x60 ADD DUP2 SWAP1 MSTORE POP POP POP POP POP POP POP POP POP DUP1 DUP1 PUSH2 0x1A0D SWAP1 PUSH2 0x3C69 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x23C JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A6D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A91 SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD1946DBC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AE0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1B08 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x38DF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH2 0x1B2E JUMPI PUSH1 0x0 PUSH2 0x1B31 JUMP JUMPDEST DUP2 MLOAD JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1B49 JUMPI PUSH2 0x1B49 PUSH2 0x3855 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1B82 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x1B6F PUSH2 0x326F JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1B67 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x3265 JUMPI PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x35EA6A75 DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1BC1 JUMPI PUSH2 0x1BC1 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1C01 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C1F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C43 SWAP2 SWAP1 PUSH2 0x3A49 JUMP JUMPDEST SWAP1 POP DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1C57 JUMPI PUSH2 0x1C57 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1C71 JUMPI PUSH2 0x1C71 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x75D26413 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D01 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D25 SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x23BE JUMPI PUSH2 0x100 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6657732F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 DUP4 AND SWAP1 PUSH4 0x6657732F SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DB8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1DE0 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x38DF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1DFE JUMPI PUSH2 0x1DFE PUSH2 0x3855 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1E8C JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE PUSH1 0x60 DUP1 DUP3 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE SWAP4 DUP4 ADD DUP2 SWAP1 MSTORE SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP3 ADD MSTORE DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 ADD SWAP2 ADD DUP2 PUSH2 0x1E1C JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x234D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE PUSH1 0x60 DUP1 DUP3 MSTORE PUSH1 0x0 PUSH1 0x20 DUP4 ADD DUP2 SWAP1 MSTORE SWAP3 DUP3 ADD DUP4 SWAP1 MSTORE DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1EEE JUMPI PUSH2 0x1EEE PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x40 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP10 ADD MLOAD SWAP1 MLOAD PUSH32 0x533F542A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP16 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0x533F542A SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F86 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1FAA SWAP2 SWAP1 PUSH2 0x3C50 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP3 ADD MLOAD SWAP1 MLOAD PUSH32 0xB022418C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0xB022418C SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2029 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x204D SWAP2 SWAP1 PUSH2 0x3C50 JUMP JUMPDEST DUP2 PUSH1 0x60 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x20C9 SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST DUP2 PUSH1 0xE0 ADD SWAP1 PUSH1 0xFF AND SWAP1 DUP2 PUSH1 0xFF AND DUP2 MSTORE POP POP DUP1 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2129 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2151 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x3BC5 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x40 DUP1 DUP3 ADD MLOAD SWAP1 MLOAD PUSH32 0x2A17BF6000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0x2A17BF60 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21C5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x21E9 SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0x313CE56700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0x313CE567 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2258 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x227C SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST PUSH1 0xFF AND PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x50D25BCD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 PUSH4 0x50D25BCD SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22F1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2315 SWAP2 SWAP1 PUSH2 0x3C50 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE DUP3 MLOAD DUP2 SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x2330 JUMPI PUSH2 0x2330 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP POP DUP1 PUSH2 0x2346 SWAP1 PUSH2 0x3C69 JUMP JUMPDEST SWAP1 POP PUSH2 0x1E92 JUMP JUMPDEST POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP6 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE POP DUP7 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x23AC JUMPI PUSH2 0x23AC PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD DUP2 SWAP1 MSTORE POP POP POP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x140 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x75D26413 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2410 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2434 SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x2B02 JUMPI PUSH2 0x140 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6657732F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 DUP4 AND SWAP1 PUSH4 0x6657732F SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x24EF SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x38DF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x250D JUMPI PUSH2 0x250D PUSH2 0x3855 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x259B JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE PUSH1 0x60 DUP1 DUP3 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE SWAP4 DUP4 ADD DUP2 SWAP1 MSTORE SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP3 ADD MSTORE DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 ADD SWAP2 ADD DUP2 PUSH2 0x252B JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x2A91 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE PUSH1 0x60 DUP1 DUP3 MSTORE PUSH1 0x0 PUSH1 0x20 DUP4 ADD DUP2 SWAP1 MSTORE SWAP3 DUP3 ADD DUP4 SWAP1 MSTORE DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x25FD JUMPI PUSH2 0x25FD PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 PUSH1 0x40 ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x533F542A DUP15 DUP10 PUSH2 0x140 ADD MLOAD DUP5 PUSH1 0x40 ADD MLOAD PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x26AD SWAP4 SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 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 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x26EE SWAP2 SWAP1 PUSH2 0x3C50 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP3 ADD MLOAD SWAP1 MLOAD PUSH32 0xB022418C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0xB022418C SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x276D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2791 SWAP2 SWAP1 PUSH2 0x3C50 JUMP JUMPDEST DUP2 PUSH1 0x60 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x27E9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x280D SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST DUP2 PUSH1 0xE0 ADD SWAP1 PUSH1 0xFF AND SWAP1 DUP2 PUSH1 0xFF AND DUP2 MSTORE POP POP DUP1 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x286D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2895 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x3BC5 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x40 DUP1 DUP3 ADD MLOAD SWAP1 MLOAD PUSH32 0x2A17BF6000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0x2A17BF60 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2909 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x292D SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0x313CE56700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0x313CE567 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x299C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x29C0 SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST PUSH1 0xFF AND PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x50D25BCD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 PUSH4 0x50D25BCD SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A35 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2A59 SWAP2 SWAP1 PUSH2 0x3C50 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE DUP3 MLOAD DUP2 SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x2A74 JUMPI PUSH2 0x2A74 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP POP DUP1 PUSH2 0x2A8A SWAP1 PUSH2 0x3C69 JUMP JUMPDEST SWAP1 POP PUSH2 0x25A1 JUMP JUMPDEST POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP7 PUSH2 0x140 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE POP DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x2AF0 JUMPI PUSH2 0x2AF0 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD DUP2 SWAP1 MSTORE POP POP POP JUMPDEST PUSH1 0x0 DUP4 PUSH2 0x120 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x75D26413 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B54 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2B78 SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x324E JUMPI PUSH2 0x120 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6657732F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 DUP4 AND SWAP1 PUSH4 0x6657732F SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C0B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2C33 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x38DF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2C51 JUMPI PUSH2 0x2C51 PUSH2 0x3855 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2CDF JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE PUSH1 0x60 DUP1 DUP3 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE SWAP4 DUP4 ADD DUP2 SWAP1 MSTORE SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP3 ADD MSTORE DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 ADD SWAP2 ADD DUP2 PUSH2 0x2C6F JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x31DD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE PUSH1 0x60 DUP1 DUP3 MSTORE PUSH1 0x0 PUSH1 0x20 DUP4 ADD DUP2 SWAP1 MSTORE SWAP3 DUP3 ADD DUP4 SWAP1 MSTORE DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2D41 JUMPI PUSH2 0x2D41 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 PUSH1 0x40 ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x533F542A DUP16 DUP11 PUSH2 0x120 ADD MLOAD DUP5 PUSH1 0x40 ADD MLOAD PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2DF1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 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 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E0E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2E32 SWAP2 SWAP1 PUSH2 0x3C50 JUMP JUMPDEST DUP2 PUSH1 0x80 ADD DUP2 DUP2 MSTORE POP POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB022418C DUP16 DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2E9C SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2EB9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2EDD SWAP2 SWAP1 PUSH2 0x3C50 JUMP JUMPDEST DUP2 PUSH1 0x60 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F35 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F59 SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST DUP2 PUSH1 0xE0 ADD SWAP1 PUSH1 0xFF AND SWAP1 DUP2 PUSH1 0xFF AND DUP2 MSTORE POP POP DUP1 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2FB9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2FE1 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x3BC5 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x40 DUP1 DUP3 ADD MLOAD SWAP1 MLOAD PUSH32 0x2A17BF6000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0x2A17BF60 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3055 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3079 SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0x313CE56700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0x313CE567 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x30E8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x310C SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST PUSH1 0xFF AND PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x50D25BCD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 PUSH4 0x50D25BCD SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3181 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x31A5 SWAP2 SWAP1 PUSH2 0x3C50 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE DUP3 MLOAD DUP2 SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x31C0 JUMPI PUSH2 0x31C0 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP POP DUP1 PUSH2 0x31D6 SWAP1 PUSH2 0x3C69 JUMP JUMPDEST SWAP1 POP PUSH2 0x2CE5 JUMP JUMPDEST POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP8 PUSH2 0x120 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE POP DUP9 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x323C JUMPI PUSH2 0x323C PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x60 ADD DUP2 SWAP1 MSTORE POP POP POP JUMPDEST POP POP POP POP DUP1 DUP1 PUSH2 0x325D SWAP1 PUSH2 0x3C69 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1B88 JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x32E7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 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 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 DUP1 DUP4 MSTORE PUSH1 0x20 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE DUP4 DUP6 ADD DUP4 SWAP1 MSTORE DUP1 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP4 MLOAD DUP1 DUP4 ADD DUP6 MSTORE DUP2 DUP2 MSTORE SWAP3 DUP4 ADD MSTORE DUP2 DUP4 ADD MSTORE SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3348 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x335E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3369 DUP2 PUSH2 0x3326 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3379 DUP2 PUSH2 0x3326 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x339F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3387 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x33AE JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x33CC DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x3384 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 DUP5 ADD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 MLOAD AND DUP7 MSTORE PUSH1 0x20 DUP2 DUP2 DUP8 ADD MLOAD AND DUP2 DUP9 ADD MSTORE PUSH1 0x40 SWAP2 POP DUP2 DUP7 ADD MLOAD DUP5 DUP4 DUP10 ADD MSTORE DUP4 DUP2 MLOAD DUP1 DUP7 MSTORE PUSH1 0x80 SWAP6 POP DUP6 DUP11 ADD SWAP2 POP DUP6 DUP2 PUSH1 0x5 SHL DUP12 ADD ADD DUP5 DUP5 ADD SWAP4 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x3531 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP13 DUP4 SUB ADD DUP5 MSTORE DUP5 MLOAD PUSH2 0x160 DUP2 MLOAD DUP2 DUP6 MSTORE PUSH2 0x347F DUP3 DUP7 ADD DUP3 PUSH2 0x33B4 JUMP JUMPDEST SWAP2 POP POP DUP8 DUP3 ADD MLOAD PUSH2 0x34A7 DUP10 DUP7 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP DUP9 DUP3 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP11 ADD MSTORE DUP11 DUP3 ADD MLOAD DUP12 DUP6 ADD MSTORE DUP10 DUP3 ADD MLOAD DUP11 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP4 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH1 0xC0 DUP1 DUP4 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH1 0xE0 DUP1 DUP4 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x100 DUP1 DUP4 ADD MLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP2 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x120 DUP1 DUP5 ADD MLOAD DUP3 AND SWAP1 DUP7 ADD MSTORE PUSH2 0x140 SWAP3 DUP4 ADD MLOAD AND SWAP2 SWAP1 SWAP4 ADD MSTORE SWAP4 DUP6 ADD SWAP4 SWAP3 DUP6 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x343A JUMP JUMPDEST POP SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD DUP1 DUP2 SWAP7 POP DUP4 PUSH1 0x5 SHL DUP2 ADD SWAP2 POP DUP3 DUP7 ADD PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x35EA JUMPI DUP3 DUP5 SUB DUP10 MSTORE DUP2 MLOAD PUSH1 0x80 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD AND DUP7 MSTORE DUP7 DUP3 ADD MLOAD DUP2 DUP9 DUP9 ADD MSTORE PUSH2 0x359E DUP3 DUP9 ADD DUP3 PUSH2 0x33E0 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x40 DUP1 DUP4 ADD MLOAD DUP8 DUP4 SUB DUP3 DUP10 ADD MSTORE PUSH2 0x35B8 DUP4 DUP3 PUSH2 0x33E0 JUMP JUMPDEST SWAP3 POP POP POP PUSH1 0x60 DUP1 DUP4 ADD MLOAD SWAP3 POP DUP7 DUP3 SUB DUP2 DUP9 ADD MSTORE POP PUSH2 0x35D6 DUP2 DUP4 PUSH2 0x33E0 JUMP JUMPDEST SWAP11 DUP8 ADD SWAP11 SWAP6 POP POP POP SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x355E JUMP JUMPDEST POP SWAP2 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 DUP5 ADD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 MLOAD AND DUP7 MSTORE PUSH1 0x20 DUP2 DUP2 DUP8 ADD MLOAD AND DUP2 DUP9 ADD MSTORE PUSH1 0x40 DUP1 DUP8 ADD MLOAD DUP6 DUP3 DUP11 ADD MSTORE DUP5 DUP2 MLOAD DUP1 DUP8 MSTORE PUSH1 0x80 SWAP7 POP DUP7 DUP12 ADD SWAP2 POP DUP7 DUP2 PUSH1 0x5 SHL DUP13 ADD ADD DUP6 DUP5 ADD SWAP4 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x36FD JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP14 DUP4 SUB ADD DUP5 MSTORE DUP5 MLOAD PUSH2 0x100 DUP2 MLOAD DUP2 DUP6 MSTORE PUSH2 0x3694 DUP3 DUP7 ADD DUP3 PUSH2 0x33B4 JUMP JUMPDEST SWAP2 POP POP DUP10 DUP10 DUP4 ADD MLOAD AND DUP10 DUP6 ADD MSTORE DUP10 DUP9 DUP4 ADD MLOAD AND DUP9 DUP6 ADD MSTORE DUP12 DUP3 ADD MLOAD DUP13 DUP6 ADD MSTORE DUP11 DUP3 ADD MLOAD DUP12 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP4 ADD MLOAD DUP2 DUP7 ADD MSTORE POP PUSH1 0xC0 DUP1 DUP4 ADD MLOAD PUSH2 0x36DA DUP3 DUP8 ADD DUP3 PUSH1 0xFF AND SWAP1 MSTORE JUMP JUMPDEST POP POP PUSH1 0xE0 SWAP2 DUP3 ADD MLOAD PUSH1 0xFF AND SWAP4 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP4 DUP7 ADD SWAP4 SWAP3 DUP7 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x364F JUMP JUMPDEST POP SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD DUP1 DUP2 SWAP7 POP DUP4 PUSH1 0x5 SHL DUP2 ADD SWAP2 POP DUP3 DUP7 ADD PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x35EA JUMPI DUP3 DUP5 SUB DUP10 MSTORE DUP2 MLOAD PUSH1 0x80 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD AND DUP7 MSTORE DUP7 DUP3 ADD MLOAD DUP2 DUP9 DUP9 ADD MSTORE PUSH2 0x376B DUP3 DUP9 ADD DUP3 PUSH2 0x35F7 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x40 DUP1 DUP4 ADD MLOAD DUP8 DUP4 SUB DUP3 DUP10 ADD MSTORE PUSH2 0x3785 DUP4 DUP3 PUSH2 0x35F7 JUMP JUMPDEST SWAP3 POP POP POP PUSH1 0x60 DUP1 DUP4 ADD MLOAD SWAP3 POP DUP7 DUP3 SUB DUP2 DUP9 ADD MSTORE POP PUSH2 0x37A3 DUP2 DUP4 PUSH2 0x35F7 JUMP JUMPDEST SWAP11 DUP8 ADD SWAP11 SWAP6 POP POP POP SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x372B JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x37CA PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x3540 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x37DC DUP2 DUP6 PUSH2 0x370D JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xDD PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x370D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x380A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xDD DUP2 PUSH2 0x3326 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xDD PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3540 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x3833 DUP2 PUSH2 0x3326 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x384A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xDD DUP2 PUSH2 0x3326 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x38A8 JUMPI PUSH2 0x38A8 PUSH2 0x3855 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x38D7 JUMPI PUSH2 0x38D7 PUSH2 0x3855 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x38F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x390A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x391E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x3930 JUMPI PUSH2 0x3930 PUSH2 0x3855 JUMP JUMPDEST DUP1 PUSH1 0x5 SHL SWAP2 POP PUSH2 0x3941 DUP5 DUP4 ADD PUSH2 0x38AE JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 DUP4 ADD DUP5 ADD SWAP2 DUP5 DUP2 ADD SWAP1 DUP9 DUP5 GT ISZERO PUSH2 0x395B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP4 DUP6 LT ISZERO PUSH2 0x3985 JUMPI DUP5 MLOAD SWAP3 POP PUSH2 0x3975 DUP4 PUSH2 0x3326 JUMP JUMPDEST DUP3 DUP3 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP1 DUP6 ADD SWAP1 PUSH2 0x3960 JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x39D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x39F5 JUMPI PUSH2 0x39F5 PUSH2 0x3855 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3833 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3833 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x3833 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3A5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3A64 PUSH2 0x3884 JUMP JUMPDEST PUSH2 0x3A6E DUP5 DUP5 PUSH2 0x39C0 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x3A7C PUSH1 0x20 DUP5 ADD PUSH2 0x3A02 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x3A8D PUSH1 0x40 DUP5 ADD PUSH2 0x3A02 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x3A9E PUSH1 0x60 DUP5 ADD PUSH2 0x3A02 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x3AAF PUSH1 0x80 DUP5 ADD PUSH2 0x3A02 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x3AC0 PUSH1 0xA0 DUP5 ADD PUSH2 0x3A02 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x3AD1 PUSH1 0xC0 DUP5 ADD PUSH2 0x3A22 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x3AE2 PUSH1 0xE0 DUP5 ADD PUSH2 0x3A37 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x3AF5 DUP2 DUP6 ADD PUSH2 0x3828 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x3B07 DUP5 DUP3 ADD PUSH2 0x3828 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x3B19 DUP5 DUP3 ADD PUSH2 0x3828 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x3B2B DUP5 DUP3 ADD PUSH2 0x3828 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x3B3D DUP5 DUP3 ADD PUSH2 0x3A02 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x3B4F DUP5 DUP3 ADD PUSH2 0x3A02 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x3B61 DUP5 DUP3 ADD PUSH2 0x3A02 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3B82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP3 MLOAD PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x60 SWAP1 SWAP6 ADD MLOAD SWAP2 SWAP7 SWAP1 SWAP6 POP SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3BB4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3BD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x3BEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3C03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x3C15 JUMPI PUSH2 0x3C15 PUSH2 0x3855 JUMP JUMPDEST PUSH2 0x3C28 PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x38AE JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP6 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x3C3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1A15 DUP2 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x3384 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3C62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x3CC2 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG0 SDIV 0x23 CREATE2 0xAB 0xC4 PUSH25 0x61F86AA555881B92B921D831C25C6946DEF5607DA67BD85CA1 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"900:16332:154:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_getReservesIncentivesData_31850":{"entryPoint":245,"id":31850,"parameterSlots":1,"returnSlots":1},"@_getUserReservesIncentivesData_32480":{"entryPoint":6686,"id":32480,"parameterSlots":2,"returnSlots":1},"@getFullReservesIncentiveData_31206":{"entryPoint":176,"id":31206,"parameterSlots":2,"returnSlots":2},"@getReservesIncentivesData_31222":{"entryPoint":228,"id":31222,"parameterSlots":1,"returnSlots":1},"@getUserReservesIncentivesData_31869":{"entryPoint":209,"id":31869,"parameterSlots":2,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":14376,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_ReserveConfigurationMap_fromMemory":{"entryPoint":14784,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":14392,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr_fromMemory":{"entryPoint":14559,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IAaveIncentivesController_$3875_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069":{"entryPoint":14328,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069t_address":{"entryPoint":13131,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_int256_fromMemory":{"entryPoint":15440,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_string_memory_ptr_fromMemory":{"entryPoint":15301,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory":{"entryPoint":14921,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256_fromMemory":{"entryPoint":15212,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_uint8_fromMemory":{"entryPoint":15266,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint128_fromMemory":{"entryPoint":14850,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint16_fromMemory":{"entryPoint":14903,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint40_fromMemory":{"entryPoint":14882,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_array_struct_AggregatedReserveIncentiveData_dyn":{"entryPoint":13632,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_struct_UserReserveIncentiveData_dyn":{"entryPoint":14093,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string":{"entryPoint":13236,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_IncentiveData":{"entryPoint":13280,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_UserIncentiveData":{"entryPoint":13815,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":14357,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr_t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr_t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":14263,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":14309,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint8":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"allocate_memory":{"entryPoint":14510,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_3049":{"entryPoint":14468,"id":null,"parameterSlots":0,"returnSlots":1},"copy_memory_to_memory":{"entryPoint":13188,"id":null,"parameterSlots":3,"returnSlots":0},"increment_t_uint256":{"entryPoint":15465,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x32":{"entryPoint":14737,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":14421,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_contract_IPoolAddressesProvider":{"entryPoint":13094,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:18564:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"83:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"170:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"179:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"182:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"172:6:201"},"nodeType":"YulFunctionCall","src":"172:12:201"},"nodeType":"YulExpressionStatement","src":"172:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"106:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"117:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"124:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"113:3:201"},"nodeType":"YulFunctionCall","src":"113:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"103:2:201"},"nodeType":"YulFunctionCall","src":"103:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"96:6:201"},"nodeType":"YulFunctionCall","src":"96:73:201"},"nodeType":"YulIf","src":"93:93:201"}]},"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"72:5:201","type":""}],"src":"14:178:201"},{"body":{"nodeType":"YulBlock","src":"315:349:201","statements":[{"body":{"nodeType":"YulBlock","src":"361:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"370:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"373:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"363:6:201"},"nodeType":"YulFunctionCall","src":"363:12:201"},"nodeType":"YulExpressionStatement","src":"363:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"336:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"345:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"332:3:201"},"nodeType":"YulFunctionCall","src":"332:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"357:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"328:3:201"},"nodeType":"YulFunctionCall","src":"328:32:201"},"nodeType":"YulIf","src":"325:52:201"},{"nodeType":"YulVariableDeclaration","src":"386:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"412:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"399:12:201"},"nodeType":"YulFunctionCall","src":"399:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"390:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"480:5:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"431:48:201"},"nodeType":"YulFunctionCall","src":"431:55:201"},"nodeType":"YulExpressionStatement","src":"431:55:201"},{"nodeType":"YulAssignment","src":"495:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"505:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"495:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"519:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"551:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"562:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"547:3:201"},"nodeType":"YulFunctionCall","src":"547:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"534:12:201"},"nodeType":"YulFunctionCall","src":"534:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"523:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"624:7:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"575:48:201"},"nodeType":"YulFunctionCall","src":"575:57:201"},"nodeType":"YulExpressionStatement","src":"575:57:201"},{"nodeType":"YulAssignment","src":"641:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"651:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"641:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"273:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"284:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"296:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"304:6:201","type":""}],"src":"197:467:201"},{"body":{"nodeType":"YulBlock","src":"713:83:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"730:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"739:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"746:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"735:3:201"},"nodeType":"YulFunctionCall","src":"735:54:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"723:6:201"},"nodeType":"YulFunctionCall","src":"723:67:201"},"nodeType":"YulExpressionStatement","src":"723:67:201"}]},"name":"abi_encode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"697:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"704:3:201","type":""}],"src":"669:127:201"},{"body":{"nodeType":"YulBlock","src":"854:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"864:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"873:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"868:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"933:63:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"958:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"963:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"954:3:201"},"nodeType":"YulFunctionCall","src":"954:11:201"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"977:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"982:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"973:3:201"},"nodeType":"YulFunctionCall","src":"973:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"967:5:201"},"nodeType":"YulFunctionCall","src":"967:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"947:6:201"},"nodeType":"YulFunctionCall","src":"947:39:201"},"nodeType":"YulExpressionStatement","src":"947:39:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"894:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"897:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"891:2:201"},"nodeType":"YulFunctionCall","src":"891:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"905:19:201","statements":[{"nodeType":"YulAssignment","src":"907:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"916:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"919:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"912:3:201"},"nodeType":"YulFunctionCall","src":"912:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"907:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"887:3:201","statements":[]},"src":"883:113:201"},{"body":{"nodeType":"YulBlock","src":"1022:31:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"1035:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"1040:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1031:3:201"},"nodeType":"YulFunctionCall","src":"1031:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"1049:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1024:6:201"},"nodeType":"YulFunctionCall","src":"1024:27:201"},"nodeType":"YulExpressionStatement","src":"1024:27:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1011:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"1014:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1008:2:201"},"nodeType":"YulFunctionCall","src":"1008:13:201"},"nodeType":"YulIf","src":"1005:48:201"}]},"name":"copy_memory_to_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"832:3:201","type":""},{"name":"dst","nodeType":"YulTypedName","src":"837:3:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"842:6:201","type":""}],"src":"801:258:201"},{"body":{"nodeType":"YulBlock","src":"1114:267:201","statements":[{"nodeType":"YulVariableDeclaration","src":"1124:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1144:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1138:5:201"},"nodeType":"YulFunctionCall","src":"1138:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"1128:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1166:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"1171:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1159:6:201"},"nodeType":"YulFunctionCall","src":"1159:19:201"},"nodeType":"YulExpressionStatement","src":"1159:19:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1213:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1220:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1209:3:201"},"nodeType":"YulFunctionCall","src":"1209:16:201"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1231:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"1236:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1227:3:201"},"nodeType":"YulFunctionCall","src":"1227:14:201"},{"name":"length","nodeType":"YulIdentifier","src":"1243:6:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"1187:21:201"},"nodeType":"YulFunctionCall","src":"1187:63:201"},"nodeType":"YulExpressionStatement","src":"1187:63:201"},{"nodeType":"YulAssignment","src":"1259:116:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1274:3:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1287:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1295:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1283:3:201"},"nodeType":"YulFunctionCall","src":"1283:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"1300:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1279:3:201"},"nodeType":"YulFunctionCall","src":"1279:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1270:3:201"},"nodeType":"YulFunctionCall","src":"1270:98:201"},{"kind":"number","nodeType":"YulLiteral","src":"1370:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1266:3:201"},"nodeType":"YulFunctionCall","src":"1266:109:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"1259:3:201"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1091:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"1098:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"1106:3:201","type":""}],"src":"1064:317:201"},{"body":{"nodeType":"YulBlock","src":"1428:33:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1437:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1446:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1453:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1442:3:201"},"nodeType":"YulFunctionCall","src":"1442:16:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1430:6:201"},"nodeType":"YulFunctionCall","src":"1430:29:201"},"nodeType":"YulExpressionStatement","src":"1430:29:201"}]},"name":"abi_encode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1412:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"1419:3:201","type":""}],"src":"1386:75:201"},{"body":{"nodeType":"YulBlock","src":"1530:2192:201","statements":[{"nodeType":"YulVariableDeclaration","src":"1540:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1550:4:201","type":"","value":"0x60"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1544:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1563:24:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1579:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1584:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1575:3:201"},"nodeType":"YulFunctionCall","src":"1575:12:201"},"variables":[{"name":"tail","nodeType":"YulTypedName","src":"1567:4:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1596:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1606:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1600:2:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1664:3:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1679:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1673:5:201"},"nodeType":"YulFunctionCall","src":"1673:12:201"},{"name":"_2","nodeType":"YulIdentifier","src":"1687:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1669:3:201"},"nodeType":"YulFunctionCall","src":"1669:21:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1657:6:201"},"nodeType":"YulFunctionCall","src":"1657:34:201"},"nodeType":"YulExpressionStatement","src":"1657:34:201"},{"nodeType":"YulVariableDeclaration","src":"1700:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1710:4:201","type":"","value":"0x20"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"1704:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1734:3:201"},{"name":"_3","nodeType":"YulIdentifier","src":"1739:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1730:3:201"},"nodeType":"YulFunctionCall","src":"1730:12:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1758:5:201"},{"name":"_3","nodeType":"YulIdentifier","src":"1765:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1754:3:201"},"nodeType":"YulFunctionCall","src":"1754:14:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1748:5:201"},"nodeType":"YulFunctionCall","src":"1748:21:201"},{"name":"_2","nodeType":"YulIdentifier","src":"1771:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1744:3:201"},"nodeType":"YulFunctionCall","src":"1744:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1723:6:201"},"nodeType":"YulFunctionCall","src":"1723:52:201"},"nodeType":"YulExpressionStatement","src":"1723:52:201"},{"nodeType":"YulVariableDeclaration","src":"1784:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1794:4:201","type":"","value":"0x40"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"1788:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1807:41:201","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1837:5:201"},{"name":"_4","nodeType":"YulIdentifier","src":"1844:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1833:3:201"},"nodeType":"YulFunctionCall","src":"1833:14:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1827:5:201"},"nodeType":"YulFunctionCall","src":"1827:21:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"1811:12:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1868:3:201"},{"name":"_4","nodeType":"YulIdentifier","src":"1873:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1864:3:201"},"nodeType":"YulFunctionCall","src":"1864:12:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1878:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1857:6:201"},"nodeType":"YulFunctionCall","src":"1857:24:201"},"nodeType":"YulExpressionStatement","src":"1857:24:201"},{"nodeType":"YulVariableDeclaration","src":"1890:17:201","value":{"name":"tail","nodeType":"YulIdentifier","src":"1903:4:201"},"variables":[{"name":"pos_1","nodeType":"YulTypedName","src":"1894:5:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1916:33:201","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"1936:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1930:5:201"},"nodeType":"YulFunctionCall","src":"1930:19:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"1920:6:201","type":""}]},{"expression":{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"1965:4:201"},{"name":"length","nodeType":"YulIdentifier","src":"1971:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1958:6:201"},"nodeType":"YulFunctionCall","src":"1958:20:201"},"nodeType":"YulExpressionStatement","src":"1958:20:201"},{"nodeType":"YulVariableDeclaration","src":"1987:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1997:3:201","type":"","value":"128"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"1991:2:201","type":""}]},{"nodeType":"YulAssignment","src":"2009:21:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2022:3:201"},{"name":"_5","nodeType":"YulIdentifier","src":"2027:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2018:3:201"},"nodeType":"YulFunctionCall","src":"2018:12:201"},"variableNames":[{"name":"pos_1","nodeType":"YulIdentifier","src":"2009:5:201"}]},{"nodeType":"YulVariableDeclaration","src":"2039:47:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2061:3:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2070:1:201","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"2073:6:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2066:3:201"},"nodeType":"YulFunctionCall","src":"2066:14:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2057:3:201"},"nodeType":"YulFunctionCall","src":"2057:24:201"},{"name":"_5","nodeType":"YulIdentifier","src":"2083:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2053:3:201"},"nodeType":"YulFunctionCall","src":"2053:33:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"2043:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2095:35:201","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"2113:12:201"},{"name":"_3","nodeType":"YulIdentifier","src":"2127:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2109:3:201"},"nodeType":"YulFunctionCall","src":"2109:21:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"2099:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2139:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2148:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"2143:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2207:1487:201","statements":[{"expression":{"arguments":[{"name":"pos_1","nodeType":"YulIdentifier","src":"2228:5:201"},{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"2243:6:201"},{"name":"pos","nodeType":"YulIdentifier","src":"2251:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2239:3:201"},"nodeType":"YulFunctionCall","src":"2239:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"2257:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2235:3:201"},"nodeType":"YulFunctionCall","src":"2235:89:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2221:6:201"},"nodeType":"YulFunctionCall","src":"2221:104:201"},"nodeType":"YulExpressionStatement","src":"2221:104:201"},{"nodeType":"YulVariableDeclaration","src":"2338:23:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2354:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2348:5:201"},"nodeType":"YulFunctionCall","src":"2348:13:201"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"2342:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2374:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2384:6:201","type":"","value":"0x0160"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"2378:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2403:31:201","value":{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"2431:2:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2425:5:201"},"nodeType":"YulFunctionCall","src":"2425:9:201"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"2407:14:201","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"2454:6:201"},{"name":"_7","nodeType":"YulIdentifier","src":"2462:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2447:6:201"},"nodeType":"YulFunctionCall","src":"2447:18:201"},"nodeType":"YulExpressionStatement","src":"2447:18:201"},{"nodeType":"YulVariableDeclaration","src":"2478:64:201","value":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"2510:14:201"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"2530:6:201"},{"name":"_7","nodeType":"YulIdentifier","src":"2538:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2526:3:201"},"nodeType":"YulFunctionCall","src":"2526:15:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"2492:17:201"},"nodeType":"YulFunctionCall","src":"2492:50:201"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"2482:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2555:40:201","value":{"arguments":[{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"2587:2:201"},{"name":"_3","nodeType":"YulIdentifier","src":"2591:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2583:3:201"},"nodeType":"YulFunctionCall","src":"2583:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2577:5:201"},"nodeType":"YulFunctionCall","src":"2577:18:201"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"2559:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"2627:14:201"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"2647:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"2655:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2643:3:201"},"nodeType":"YulFunctionCall","src":"2643:15:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"2608:18:201"},"nodeType":"YulFunctionCall","src":"2608:51:201"},"nodeType":"YulExpressionStatement","src":"2608:51:201"},{"nodeType":"YulVariableDeclaration","src":"2672:40:201","value":{"arguments":[{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"2704:2:201"},{"name":"_4","nodeType":"YulIdentifier","src":"2708:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2700:3:201"},"nodeType":"YulFunctionCall","src":"2700:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2694:5:201"},"nodeType":"YulFunctionCall","src":"2694:18:201"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"2676:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"2744:14:201"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"2764:6:201"},{"name":"_4","nodeType":"YulIdentifier","src":"2772:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2760:3:201"},"nodeType":"YulFunctionCall","src":"2760:15:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"2725:18:201"},"nodeType":"YulFunctionCall","src":"2725:51:201"},"nodeType":"YulExpressionStatement","src":"2725:51:201"},{"expression":{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"2800:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2808:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2796:3:201"},"nodeType":"YulFunctionCall","src":"2796:15:201"},{"arguments":[{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"2823:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2827:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2819:3:201"},"nodeType":"YulFunctionCall","src":"2819:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2813:5:201"},"nodeType":"YulFunctionCall","src":"2813:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2789:6:201"},"nodeType":"YulFunctionCall","src":"2789:43:201"},"nodeType":"YulExpressionStatement","src":"2789:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"2856:6:201"},{"name":"_5","nodeType":"YulIdentifier","src":"2864:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2852:3:201"},"nodeType":"YulFunctionCall","src":"2852:15:201"},{"arguments":[{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"2879:2:201"},{"name":"_5","nodeType":"YulIdentifier","src":"2883:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2875:3:201"},"nodeType":"YulFunctionCall","src":"2875:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2869:5:201"},"nodeType":"YulFunctionCall","src":"2869:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2845:6:201"},"nodeType":"YulFunctionCall","src":"2845:43:201"},"nodeType":"YulExpressionStatement","src":"2845:43:201"},{"nodeType":"YulVariableDeclaration","src":"2901:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2911:4:201","type":"","value":"0xa0"},"variables":[{"name":"_8","nodeType":"YulTypedName","src":"2905:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"2939:6:201"},{"name":"_8","nodeType":"YulIdentifier","src":"2947:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2935:3:201"},"nodeType":"YulFunctionCall","src":"2935:15:201"},{"arguments":[{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"2962:2:201"},{"name":"_8","nodeType":"YulIdentifier","src":"2966:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2958:3:201"},"nodeType":"YulFunctionCall","src":"2958:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2952:5:201"},"nodeType":"YulFunctionCall","src":"2952:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2928:6:201"},"nodeType":"YulFunctionCall","src":"2928:43:201"},"nodeType":"YulExpressionStatement","src":"2928:43:201"},{"nodeType":"YulVariableDeclaration","src":"2984:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2994:4:201","type":"","value":"0xc0"},"variables":[{"name":"_9","nodeType":"YulTypedName","src":"2988:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"3022:6:201"},{"name":"_9","nodeType":"YulIdentifier","src":"3030:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3018:3:201"},"nodeType":"YulFunctionCall","src":"3018:15:201"},{"arguments":[{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"3045:2:201"},{"name":"_9","nodeType":"YulIdentifier","src":"3049:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3041:3:201"},"nodeType":"YulFunctionCall","src":"3041:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3035:5:201"},"nodeType":"YulFunctionCall","src":"3035:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3011:6:201"},"nodeType":"YulFunctionCall","src":"3011:43:201"},"nodeType":"YulExpressionStatement","src":"3011:43:201"},{"nodeType":"YulVariableDeclaration","src":"3067:15:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3078:4:201","type":"","value":"0xe0"},"variables":[{"name":"_10","nodeType":"YulTypedName","src":"3071:3:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"3106:6:201"},{"name":"_10","nodeType":"YulIdentifier","src":"3114:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3102:3:201"},"nodeType":"YulFunctionCall","src":"3102:16:201"},{"arguments":[{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"3130:2:201"},{"name":"_10","nodeType":"YulIdentifier","src":"3134:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3126:3:201"},"nodeType":"YulFunctionCall","src":"3126:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3120:5:201"},"nodeType":"YulFunctionCall","src":"3120:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3095:6:201"},"nodeType":"YulFunctionCall","src":"3095:45:201"},"nodeType":"YulExpressionStatement","src":"3095:45:201"},{"nodeType":"YulVariableDeclaration","src":"3153:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3164:6:201","type":"","value":"0x0100"},"variables":[{"name":"_11","nodeType":"YulTypedName","src":"3157:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3183:41:201","value":{"arguments":[{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"3215:2:201"},{"name":"_11","nodeType":"YulIdentifier","src":"3219:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3211:3:201"},"nodeType":"YulFunctionCall","src":"3211:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3205:5:201"},"nodeType":"YulFunctionCall","src":"3205:19:201"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"3187:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"3254:14:201"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"3274:6:201"},{"name":"_11","nodeType":"YulIdentifier","src":"3282:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3270:3:201"},"nodeType":"YulFunctionCall","src":"3270:16:201"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"3237:16:201"},"nodeType":"YulFunctionCall","src":"3237:50:201"},"nodeType":"YulExpressionStatement","src":"3237:50:201"},{"nodeType":"YulVariableDeclaration","src":"3300:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3311:6:201","type":"","value":"0x0120"},"variables":[{"name":"_12","nodeType":"YulTypedName","src":"3304:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3330:41:201","value":{"arguments":[{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"3362:2:201"},{"name":"_12","nodeType":"YulIdentifier","src":"3366:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3358:3:201"},"nodeType":"YulFunctionCall","src":"3358:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3352:5:201"},"nodeType":"YulFunctionCall","src":"3352:19:201"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"3334:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"3401:14:201"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"3421:6:201"},{"name":"_12","nodeType":"YulIdentifier","src":"3429:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3417:3:201"},"nodeType":"YulFunctionCall","src":"3417:16:201"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"3384:16:201"},"nodeType":"YulFunctionCall","src":"3384:50:201"},"nodeType":"YulExpressionStatement","src":"3384:50:201"},{"nodeType":"YulVariableDeclaration","src":"3447:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3458:6:201","type":"","value":"0x0140"},"variables":[{"name":"_13","nodeType":"YulTypedName","src":"3451:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3477:41:201","value":{"arguments":[{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"3509:2:201"},{"name":"_13","nodeType":"YulIdentifier","src":"3513:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3505:3:201"},"nodeType":"YulFunctionCall","src":"3505:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3499:5:201"},"nodeType":"YulFunctionCall","src":"3499:19:201"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"3481:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"3548:14:201"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"3568:6:201"},{"name":"_13","nodeType":"YulIdentifier","src":"3576:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3564:3:201"},"nodeType":"YulFunctionCall","src":"3564:16:201"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"3531:16:201"},"nodeType":"YulFunctionCall","src":"3531:50:201"},"nodeType":"YulExpressionStatement","src":"3531:50:201"},{"nodeType":"YulAssignment","src":"3594:16:201","value":{"name":"tail_2","nodeType":"YulIdentifier","src":"3604:6:201"},"variableNames":[{"name":"tail_1","nodeType":"YulIdentifier","src":"3594:6:201"}]},{"nodeType":"YulAssignment","src":"3623:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"3637:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"3645:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3633:3:201"},"nodeType":"YulFunctionCall","src":"3633:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"3623:6:201"}]},{"nodeType":"YulAssignment","src":"3661:23:201","value":{"arguments":[{"name":"pos_1","nodeType":"YulIdentifier","src":"3674:5:201"},{"name":"_3","nodeType":"YulIdentifier","src":"3681:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3670:3:201"},"nodeType":"YulFunctionCall","src":"3670:14:201"},"variableNames":[{"name":"pos_1","nodeType":"YulIdentifier","src":"3661:5:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2169:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"2172:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2166:2:201"},"nodeType":"YulFunctionCall","src":"2166:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2180:18:201","statements":[{"nodeType":"YulAssignment","src":"2182:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2191:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"2194:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2187:3:201"},"nodeType":"YulFunctionCall","src":"2187:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"2182:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"2162:3:201","statements":[]},"src":"2158:1536:201"},{"nodeType":"YulAssignment","src":"3703:13:201","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"3710:6:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"3703:3:201"}]}]},"name":"abi_encode_struct_IncentiveData","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1507:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"1514:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"1522:3:201","type":""}],"src":"1466:2256:201"},{"body":{"nodeType":"YulBlock","src":"3818:1245:201","statements":[{"nodeType":"YulVariableDeclaration","src":"3828:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3848:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3842:5:201"},"nodeType":"YulFunctionCall","src":"3842:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"3832:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3870:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"3875:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3863:6:201"},"nodeType":"YulFunctionCall","src":"3863:19:201"},"nodeType":"YulExpressionStatement","src":"3863:19:201"},{"nodeType":"YulVariableDeclaration","src":"3891:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3901:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3895:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3914:31:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3937:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3942:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3933:3:201"},"nodeType":"YulFunctionCall","src":"3933:12:201"},"variables":[{"name":"updated_pos","nodeType":"YulTypedName","src":"3918:11:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3954:24:201","value":{"name":"updated_pos","nodeType":"YulIdentifier","src":"3967:11:201"},"variables":[{"name":"pos_1","nodeType":"YulTypedName","src":"3958:5:201","type":""}]},{"nodeType":"YulAssignment","src":"3987:18:201","value":{"name":"updated_pos","nodeType":"YulIdentifier","src":"3994:11:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"3987:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"4014:38:201","value":{"arguments":[{"name":"pos_1","nodeType":"YulIdentifier","src":"4030:5:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4041:1:201","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"4044:6:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4037:3:201"},"nodeType":"YulFunctionCall","src":"4037:14:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4026:3:201"},"nodeType":"YulFunctionCall","src":"4026:26:201"},"variables":[{"name":"tail","nodeType":"YulTypedName","src":"4018:4:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4061:28:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4079:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4086:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4075:3:201"},"nodeType":"YulFunctionCall","src":"4075:14:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"4065:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4098:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"4107:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"4102:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4166:871:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4187:3:201"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"4196:4:201"},{"name":"pos_1","nodeType":"YulIdentifier","src":"4202:5:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4192:3:201"},"nodeType":"YulFunctionCall","src":"4192:16:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4180:6:201"},"nodeType":"YulFunctionCall","src":"4180:29:201"},"nodeType":"YulExpressionStatement","src":"4180:29:201"},{"nodeType":"YulVariableDeclaration","src":"4222:23:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"4238:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4232:5:201"},"nodeType":"YulFunctionCall","src":"4232:13:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"4226:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4258:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"4268:4:201","type":"","value":"0x80"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"4262:2:201","type":""}]},{"expression":{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"4292:4:201"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4308:2:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4302:5:201"},"nodeType":"YulFunctionCall","src":"4302:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4313:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4298:3:201"},"nodeType":"YulFunctionCall","src":"4298:58:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4285:6:201"},"nodeType":"YulFunctionCall","src":"4285:72:201"},"nodeType":"YulExpressionStatement","src":"4285:72:201"},{"nodeType":"YulVariableDeclaration","src":"4370:38:201","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4400:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4404:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4396:3:201"},"nodeType":"YulFunctionCall","src":"4396:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4390:5:201"},"nodeType":"YulFunctionCall","src":"4390:18:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"4374:12:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"4432:4:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4438:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4428:3:201"},"nodeType":"YulFunctionCall","src":"4428:13:201"},{"name":"_3","nodeType":"YulIdentifier","src":"4443:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4421:6:201"},"nodeType":"YulFunctionCall","src":"4421:25:201"},"nodeType":"YulExpressionStatement","src":"4421:25:201"},{"nodeType":"YulVariableDeclaration","src":"4459:74:201","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"4505:12:201"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"4523:4:201"},{"name":"_3","nodeType":"YulIdentifier","src":"4529:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4519:3:201"},"nodeType":"YulFunctionCall","src":"4519:13:201"}],"functionName":{"name":"abi_encode_struct_IncentiveData","nodeType":"YulIdentifier","src":"4473:31:201"},"nodeType":"YulFunctionCall","src":"4473:60:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"4463:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4546:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"4556:4:201","type":"","value":"0x40"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"4550:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4573:40:201","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4605:2:201"},{"name":"_4","nodeType":"YulIdentifier","src":"4609:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4601:3:201"},"nodeType":"YulFunctionCall","src":"4601:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4595:5:201"},"nodeType":"YulFunctionCall","src":"4595:18:201"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"4577:14:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"4637:4:201"},{"name":"_4","nodeType":"YulIdentifier","src":"4643:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4633:3:201"},"nodeType":"YulFunctionCall","src":"4633:13:201"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"4652:6:201"},{"name":"tail","nodeType":"YulIdentifier","src":"4660:4:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4648:3:201"},"nodeType":"YulFunctionCall","src":"4648:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4626:6:201"},"nodeType":"YulFunctionCall","src":"4626:40:201"},"nodeType":"YulExpressionStatement","src":"4626:40:201"},{"nodeType":"YulVariableDeclaration","src":"4679:69:201","value":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"4725:14:201"},{"name":"tail_1","nodeType":"YulIdentifier","src":"4741:6:201"}],"functionName":{"name":"abi_encode_struct_IncentiveData","nodeType":"YulIdentifier","src":"4693:31:201"},"nodeType":"YulFunctionCall","src":"4693:55:201"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"4683:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4761:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"4771:4:201","type":"","value":"0x60"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"4765:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4788:40:201","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"4820:2:201"},{"name":"_5","nodeType":"YulIdentifier","src":"4824:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4816:3:201"},"nodeType":"YulFunctionCall","src":"4816:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4810:5:201"},"nodeType":"YulFunctionCall","src":"4810:18:201"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"4792:14:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"4852:4:201"},{"name":"_5","nodeType":"YulIdentifier","src":"4858:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4848:3:201"},"nodeType":"YulFunctionCall","src":"4848:13:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"4867:6:201"},{"name":"tail","nodeType":"YulIdentifier","src":"4875:4:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4863:3:201"},"nodeType":"YulFunctionCall","src":"4863:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4841:6:201"},"nodeType":"YulFunctionCall","src":"4841:40:201"},"nodeType":"YulExpressionStatement","src":"4841:40:201"},{"nodeType":"YulAssignment","src":"4894:63:201","value":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"4934:14:201"},{"name":"tail_2","nodeType":"YulIdentifier","src":"4950:6:201"}],"functionName":{"name":"abi_encode_struct_IncentiveData","nodeType":"YulIdentifier","src":"4902:31:201"},"nodeType":"YulFunctionCall","src":"4902:55:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4894:4:201"}]},{"nodeType":"YulAssignment","src":"4970:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"4984:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4992:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4980:3:201"},"nodeType":"YulFunctionCall","src":"4980:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"4970:6:201"}]},{"nodeType":"YulAssignment","src":"5008:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5019:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5024:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5015:3:201"},"nodeType":"YulFunctionCall","src":"5015:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"5008:3:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4128:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"4131:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4125:2:201"},"nodeType":"YulFunctionCall","src":"4125:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"4139:18:201","statements":[{"nodeType":"YulAssignment","src":"4141:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4150:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"4153:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4146:3:201"},"nodeType":"YulFunctionCall","src":"4146:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"4141:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"4121:3:201","statements":[]},"src":"4117:920:201"},{"nodeType":"YulAssignment","src":"5046:11:201","value":{"name":"tail","nodeType":"YulIdentifier","src":"5053:4:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"5046:3:201"}]}]},"name":"abi_encode_array_struct_AggregatedReserveIncentiveData_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"3795:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"3802:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"3810:3:201","type":""}],"src":"3727:1336:201"},{"body":{"nodeType":"YulBlock","src":"5136:1765:201","statements":[{"nodeType":"YulVariableDeclaration","src":"5146:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5156:4:201","type":"","value":"0x60"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5150:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5169:24:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5185:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5190:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5181:3:201"},"nodeType":"YulFunctionCall","src":"5181:12:201"},"variables":[{"name":"tail","nodeType":"YulTypedName","src":"5173:4:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5202:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5212:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"5206:2:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5270:3:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5285:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5279:5:201"},"nodeType":"YulFunctionCall","src":"5279:12:201"},{"name":"_2","nodeType":"YulIdentifier","src":"5293:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5275:3:201"},"nodeType":"YulFunctionCall","src":"5275:21:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5263:6:201"},"nodeType":"YulFunctionCall","src":"5263:34:201"},"nodeType":"YulExpressionStatement","src":"5263:34:201"},{"nodeType":"YulVariableDeclaration","src":"5306:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5316:4:201","type":"","value":"0x20"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"5310:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5340:3:201"},{"name":"_3","nodeType":"YulIdentifier","src":"5345:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5336:3:201"},"nodeType":"YulFunctionCall","src":"5336:12:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5364:5:201"},{"name":"_3","nodeType":"YulIdentifier","src":"5371:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5360:3:201"},"nodeType":"YulFunctionCall","src":"5360:14:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5354:5:201"},"nodeType":"YulFunctionCall","src":"5354:21:201"},{"name":"_2","nodeType":"YulIdentifier","src":"5377:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5350:3:201"},"nodeType":"YulFunctionCall","src":"5350:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5329:6:201"},"nodeType":"YulFunctionCall","src":"5329:52:201"},"nodeType":"YulExpressionStatement","src":"5329:52:201"},{"nodeType":"YulVariableDeclaration","src":"5390:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5400:4:201","type":"","value":"0x40"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"5394:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5413:41:201","value":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5443:5:201"},{"name":"_4","nodeType":"YulIdentifier","src":"5450:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5439:3:201"},"nodeType":"YulFunctionCall","src":"5439:14:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5433:5:201"},"nodeType":"YulFunctionCall","src":"5433:21:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"5417:12:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5474:3:201"},{"name":"_4","nodeType":"YulIdentifier","src":"5479:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5470:3:201"},"nodeType":"YulFunctionCall","src":"5470:12:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5484:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5463:6:201"},"nodeType":"YulFunctionCall","src":"5463:24:201"},"nodeType":"YulExpressionStatement","src":"5463:24:201"},{"nodeType":"YulVariableDeclaration","src":"5496:17:201","value":{"name":"tail","nodeType":"YulIdentifier","src":"5509:4:201"},"variables":[{"name":"pos_1","nodeType":"YulTypedName","src":"5500:5:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5522:33:201","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"5542:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5536:5:201"},"nodeType":"YulFunctionCall","src":"5536:19:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"5526:6:201","type":""}]},{"expression":{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"5571:4:201"},{"name":"length","nodeType":"YulIdentifier","src":"5577:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5564:6:201"},"nodeType":"YulFunctionCall","src":"5564:20:201"},"nodeType":"YulExpressionStatement","src":"5564:20:201"},{"nodeType":"YulVariableDeclaration","src":"5593:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5603:3:201","type":"","value":"128"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"5597:2:201","type":""}]},{"nodeType":"YulAssignment","src":"5615:21:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5628:3:201"},{"name":"_5","nodeType":"YulIdentifier","src":"5633:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5624:3:201"},"nodeType":"YulFunctionCall","src":"5624:12:201"},"variableNames":[{"name":"pos_1","nodeType":"YulIdentifier","src":"5615:5:201"}]},{"nodeType":"YulVariableDeclaration","src":"5645:47:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5667:3:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5676:1:201","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"5679:6:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5672:3:201"},"nodeType":"YulFunctionCall","src":"5672:14:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5663:3:201"},"nodeType":"YulFunctionCall","src":"5663:24:201"},{"name":"_5","nodeType":"YulIdentifier","src":"5689:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5659:3:201"},"nodeType":"YulFunctionCall","src":"5659:33:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"5649:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5701:35:201","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"5719:12:201"},{"name":"_3","nodeType":"YulIdentifier","src":"5733:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5715:3:201"},"nodeType":"YulFunctionCall","src":"5715:21:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"5705:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5745:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5754:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"5749:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"5813:1060:201","statements":[{"expression":{"arguments":[{"name":"pos_1","nodeType":"YulIdentifier","src":"5834:5:201"},{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"5849:6:201"},{"name":"pos","nodeType":"YulIdentifier","src":"5857:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5845:3:201"},"nodeType":"YulFunctionCall","src":"5845:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"5863:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5841:3:201"},"nodeType":"YulFunctionCall","src":"5841:89:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5827:6:201"},"nodeType":"YulFunctionCall","src":"5827:104:201"},"nodeType":"YulExpressionStatement","src":"5827:104:201"},{"nodeType":"YulVariableDeclaration","src":"5944:23:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"5960:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5954:5:201"},"nodeType":"YulFunctionCall","src":"5954:13:201"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"5948:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5980:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5990:6:201","type":"","value":"0x0100"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"5984:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6009:31:201","value":{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"6037:2:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6031:5:201"},"nodeType":"YulFunctionCall","src":"6031:9:201"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"6013:14:201","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"6060:6:201"},{"name":"_7","nodeType":"YulIdentifier","src":"6068:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6053:6:201"},"nodeType":"YulFunctionCall","src":"6053:18:201"},"nodeType":"YulExpressionStatement","src":"6053:18:201"},{"nodeType":"YulVariableDeclaration","src":"6084:64:201","value":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"6116:14:201"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"6136:6:201"},{"name":"_7","nodeType":"YulIdentifier","src":"6144:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6132:3:201"},"nodeType":"YulFunctionCall","src":"6132:15:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"6098:17:201"},"nodeType":"YulFunctionCall","src":"6098:50:201"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"6088:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"6172:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"6180:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6168:3:201"},"nodeType":"YulFunctionCall","src":"6168:15:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"6199:2:201"},{"name":"_3","nodeType":"YulIdentifier","src":"6203:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6195:3:201"},"nodeType":"YulFunctionCall","src":"6195:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6189:5:201"},"nodeType":"YulFunctionCall","src":"6189:18:201"},{"name":"_2","nodeType":"YulIdentifier","src":"6209:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6185:3:201"},"nodeType":"YulFunctionCall","src":"6185:27:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6161:6:201"},"nodeType":"YulFunctionCall","src":"6161:52:201"},"nodeType":"YulExpressionStatement","src":"6161:52:201"},{"expression":{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"6237:6:201"},{"name":"_4","nodeType":"YulIdentifier","src":"6245:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6233:3:201"},"nodeType":"YulFunctionCall","src":"6233:15:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"6264:2:201"},{"name":"_4","nodeType":"YulIdentifier","src":"6268:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6260:3:201"},"nodeType":"YulFunctionCall","src":"6260:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6254:5:201"},"nodeType":"YulFunctionCall","src":"6254:18:201"},{"name":"_2","nodeType":"YulIdentifier","src":"6274:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6250:3:201"},"nodeType":"YulFunctionCall","src":"6250:27:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6226:6:201"},"nodeType":"YulFunctionCall","src":"6226:52:201"},"nodeType":"YulExpressionStatement","src":"6226:52:201"},{"expression":{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"6302:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6310:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6298:3:201"},"nodeType":"YulFunctionCall","src":"6298:15:201"},{"arguments":[{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"6325:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6329:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6321:3:201"},"nodeType":"YulFunctionCall","src":"6321:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6315:5:201"},"nodeType":"YulFunctionCall","src":"6315:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6291:6:201"},"nodeType":"YulFunctionCall","src":"6291:43:201"},"nodeType":"YulExpressionStatement","src":"6291:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"6358:6:201"},{"name":"_5","nodeType":"YulIdentifier","src":"6366:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6354:3:201"},"nodeType":"YulFunctionCall","src":"6354:15:201"},{"arguments":[{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"6381:2:201"},{"name":"_5","nodeType":"YulIdentifier","src":"6385:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6377:3:201"},"nodeType":"YulFunctionCall","src":"6377:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6371:5:201"},"nodeType":"YulFunctionCall","src":"6371:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6347:6:201"},"nodeType":"YulFunctionCall","src":"6347:43:201"},"nodeType":"YulExpressionStatement","src":"6347:43:201"},{"nodeType":"YulVariableDeclaration","src":"6403:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6413:4:201","type":"","value":"0xa0"},"variables":[{"name":"_8","nodeType":"YulTypedName","src":"6407:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"6441:6:201"},{"name":"_8","nodeType":"YulIdentifier","src":"6449:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6437:3:201"},"nodeType":"YulFunctionCall","src":"6437:15:201"},{"arguments":[{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"6464:2:201"},{"name":"_8","nodeType":"YulIdentifier","src":"6468:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6460:3:201"},"nodeType":"YulFunctionCall","src":"6460:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6454:5:201"},"nodeType":"YulFunctionCall","src":"6454:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6430:6:201"},"nodeType":"YulFunctionCall","src":"6430:43:201"},"nodeType":"YulExpressionStatement","src":"6430:43:201"},{"nodeType":"YulVariableDeclaration","src":"6486:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6496:4:201","type":"","value":"0xc0"},"variables":[{"name":"_9","nodeType":"YulTypedName","src":"6490:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6513:40:201","value":{"arguments":[{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"6545:2:201"},{"name":"_9","nodeType":"YulIdentifier","src":"6549:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6541:3:201"},"nodeType":"YulFunctionCall","src":"6541:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6535:5:201"},"nodeType":"YulFunctionCall","src":"6535:18:201"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"6517:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"6583:14:201"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"6603:6:201"},{"name":"_9","nodeType":"YulIdentifier","src":"6611:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6599:3:201"},"nodeType":"YulFunctionCall","src":"6599:15:201"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"6566:16:201"},"nodeType":"YulFunctionCall","src":"6566:49:201"},"nodeType":"YulExpressionStatement","src":"6566:49:201"},{"nodeType":"YulVariableDeclaration","src":"6628:15:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6639:4:201","type":"","value":"0xe0"},"variables":[{"name":"_10","nodeType":"YulTypedName","src":"6632:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6656:41:201","value":{"arguments":[{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"6688:2:201"},{"name":"_10","nodeType":"YulIdentifier","src":"6692:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6684:3:201"},"nodeType":"YulFunctionCall","src":"6684:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6678:5:201"},"nodeType":"YulFunctionCall","src":"6678:19:201"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"6660:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"6727:14:201"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"6747:6:201"},{"name":"_10","nodeType":"YulIdentifier","src":"6755:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6743:3:201"},"nodeType":"YulFunctionCall","src":"6743:16:201"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"6710:16:201"},"nodeType":"YulFunctionCall","src":"6710:50:201"},"nodeType":"YulExpressionStatement","src":"6710:50:201"},{"nodeType":"YulAssignment","src":"6773:16:201","value":{"name":"tail_2","nodeType":"YulIdentifier","src":"6783:6:201"},"variableNames":[{"name":"tail_1","nodeType":"YulIdentifier","src":"6773:6:201"}]},{"nodeType":"YulAssignment","src":"6802:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"6816:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"6824:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6812:3:201"},"nodeType":"YulFunctionCall","src":"6812:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"6802:6:201"}]},{"nodeType":"YulAssignment","src":"6840:23:201","value":{"arguments":[{"name":"pos_1","nodeType":"YulIdentifier","src":"6853:5:201"},{"name":"_3","nodeType":"YulIdentifier","src":"6860:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6849:3:201"},"nodeType":"YulFunctionCall","src":"6849:14:201"},"variableNames":[{"name":"pos_1","nodeType":"YulIdentifier","src":"6840:5:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5775:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"5778:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5772:2:201"},"nodeType":"YulFunctionCall","src":"5772:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5786:18:201","statements":[{"nodeType":"YulAssignment","src":"5788:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5797:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"5800:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5793:3:201"},"nodeType":"YulFunctionCall","src":"5793:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"5788:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"5768:3:201","statements":[]},"src":"5764:1109:201"},{"nodeType":"YulAssignment","src":"6882:13:201","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"6889:6:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"6882:3:201"}]}]},"name":"abi_encode_struct_UserIncentiveData","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"5113:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"5120:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"5128:3:201","type":""}],"src":"5068:1833:201"},{"body":{"nodeType":"YulBlock","src":"6991:1257:201","statements":[{"nodeType":"YulVariableDeclaration","src":"7001:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7021:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7015:5:201"},"nodeType":"YulFunctionCall","src":"7015:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"7005:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7043:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"7048:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7036:6:201"},"nodeType":"YulFunctionCall","src":"7036:19:201"},"nodeType":"YulExpressionStatement","src":"7036:19:201"},{"nodeType":"YulVariableDeclaration","src":"7064:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"7074:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"7068:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7087:31:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7110:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7115:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7106:3:201"},"nodeType":"YulFunctionCall","src":"7106:12:201"},"variables":[{"name":"updated_pos","nodeType":"YulTypedName","src":"7091:11:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7127:24:201","value":{"name":"updated_pos","nodeType":"YulIdentifier","src":"7140:11:201"},"variables":[{"name":"pos_1","nodeType":"YulTypedName","src":"7131:5:201","type":""}]},{"nodeType":"YulAssignment","src":"7160:18:201","value":{"name":"updated_pos","nodeType":"YulIdentifier","src":"7167:11:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"7160:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"7187:38:201","value":{"arguments":[{"name":"pos_1","nodeType":"YulIdentifier","src":"7203:5:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7214:1:201","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"7217:6:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"7210:3:201"},"nodeType":"YulFunctionCall","src":"7210:14:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7199:3:201"},"nodeType":"YulFunctionCall","src":"7199:26:201"},"variables":[{"name":"tail","nodeType":"YulTypedName","src":"7191:4:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7234:28:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7252:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7259:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7248:3:201"},"nodeType":"YulFunctionCall","src":"7248:14:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"7238:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7271:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"7280:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"7275:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"7339:883:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"7360:3:201"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"7369:4:201"},{"name":"pos_1","nodeType":"YulIdentifier","src":"7375:5:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7365:3:201"},"nodeType":"YulFunctionCall","src":"7365:16:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7353:6:201"},"nodeType":"YulFunctionCall","src":"7353:29:201"},"nodeType":"YulExpressionStatement","src":"7353:29:201"},{"nodeType":"YulVariableDeclaration","src":"7395:23:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"7411:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7405:5:201"},"nodeType":"YulFunctionCall","src":"7405:13:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"7399:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7431:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"7441:4:201","type":"","value":"0x80"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"7435:2:201","type":""}]},{"expression":{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"7465:4:201"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"7481:2:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7475:5:201"},"nodeType":"YulFunctionCall","src":"7475:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7486:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7471:3:201"},"nodeType":"YulFunctionCall","src":"7471:58:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7458:6:201"},"nodeType":"YulFunctionCall","src":"7458:72:201"},"nodeType":"YulExpressionStatement","src":"7458:72:201"},{"nodeType":"YulVariableDeclaration","src":"7543:38:201","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"7573:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7577:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7569:3:201"},"nodeType":"YulFunctionCall","src":"7569:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7563:5:201"},"nodeType":"YulFunctionCall","src":"7563:18:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"7547:12:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"7605:4:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7611:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7601:3:201"},"nodeType":"YulFunctionCall","src":"7601:13:201"},{"name":"_3","nodeType":"YulIdentifier","src":"7616:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7594:6:201"},"nodeType":"YulFunctionCall","src":"7594:25:201"},"nodeType":"YulExpressionStatement","src":"7594:25:201"},{"nodeType":"YulVariableDeclaration","src":"7632:78:201","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"7682:12:201"},{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"7700:4:201"},{"name":"_3","nodeType":"YulIdentifier","src":"7706:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7696:3:201"},"nodeType":"YulFunctionCall","src":"7696:13:201"}],"functionName":{"name":"abi_encode_struct_UserIncentiveData","nodeType":"YulIdentifier","src":"7646:35:201"},"nodeType":"YulFunctionCall","src":"7646:64:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"7636:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7723:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"7733:4:201","type":"","value":"0x40"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"7727:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7750:40:201","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"7782:2:201"},{"name":"_4","nodeType":"YulIdentifier","src":"7786:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7778:3:201"},"nodeType":"YulFunctionCall","src":"7778:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7772:5:201"},"nodeType":"YulFunctionCall","src":"7772:18:201"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"7754:14:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"7814:4:201"},{"name":"_4","nodeType":"YulIdentifier","src":"7820:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7810:3:201"},"nodeType":"YulFunctionCall","src":"7810:13:201"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"7829:6:201"},{"name":"tail","nodeType":"YulIdentifier","src":"7837:4:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7825:3:201"},"nodeType":"YulFunctionCall","src":"7825:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7803:6:201"},"nodeType":"YulFunctionCall","src":"7803:40:201"},"nodeType":"YulExpressionStatement","src":"7803:40:201"},{"nodeType":"YulVariableDeclaration","src":"7856:73:201","value":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"7906:14:201"},{"name":"tail_1","nodeType":"YulIdentifier","src":"7922:6:201"}],"functionName":{"name":"abi_encode_struct_UserIncentiveData","nodeType":"YulIdentifier","src":"7870:35:201"},"nodeType":"YulFunctionCall","src":"7870:59:201"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"7860:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7942:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"7952:4:201","type":"","value":"0x60"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"7946:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7969:40:201","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"8001:2:201"},{"name":"_5","nodeType":"YulIdentifier","src":"8005:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7997:3:201"},"nodeType":"YulFunctionCall","src":"7997:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7991:5:201"},"nodeType":"YulFunctionCall","src":"7991:18:201"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"7973:14:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail","nodeType":"YulIdentifier","src":"8033:4:201"},{"name":"_5","nodeType":"YulIdentifier","src":"8039:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8029:3:201"},"nodeType":"YulFunctionCall","src":"8029:13:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"8048:6:201"},{"name":"tail","nodeType":"YulIdentifier","src":"8056:4:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8044:3:201"},"nodeType":"YulFunctionCall","src":"8044:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8022:6:201"},"nodeType":"YulFunctionCall","src":"8022:40:201"},"nodeType":"YulExpressionStatement","src":"8022:40:201"},{"nodeType":"YulAssignment","src":"8075:67:201","value":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"8119:14:201"},{"name":"tail_2","nodeType":"YulIdentifier","src":"8135:6:201"}],"functionName":{"name":"abi_encode_struct_UserIncentiveData","nodeType":"YulIdentifier","src":"8083:35:201"},"nodeType":"YulFunctionCall","src":"8083:59:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8075:4:201"}]},{"nodeType":"YulAssignment","src":"8155:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"8169:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"8177:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8165:3:201"},"nodeType":"YulFunctionCall","src":"8165:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"8155:6:201"}]},{"nodeType":"YulAssignment","src":"8193:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"8204:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"8209:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8200:3:201"},"nodeType":"YulFunctionCall","src":"8200:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"8193:3:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"7301:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"7304:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"7298:2:201"},"nodeType":"YulFunctionCall","src":"7298:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"7312:18:201","statements":[{"nodeType":"YulAssignment","src":"7314:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"7323:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"7326:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7319:3:201"},"nodeType":"YulFunctionCall","src":"7319:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"7314:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"7294:3:201","statements":[]},"src":"7290:932:201"},{"nodeType":"YulAssignment","src":"8231:11:201","value":{"name":"tail","nodeType":"YulIdentifier","src":"8238:4:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"8231:3:201"}]}]},"name":"abi_encode_array_struct_UserReserveIncentiveData_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"6968:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"6975:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"6983:3:201","type":""}],"src":"6906:1342:201"},{"body":{"nodeType":"YulBlock","src":"8666:290:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8683:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8694:2:201","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8676:6:201"},"nodeType":"YulFunctionCall","src":"8676:21:201"},"nodeType":"YulExpressionStatement","src":"8676:21:201"},{"nodeType":"YulVariableDeclaration","src":"8706:100:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"8779:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8791:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8802:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8787:3:201"},"nodeType":"YulFunctionCall","src":"8787:18:201"}],"functionName":{"name":"abi_encode_array_struct_AggregatedReserveIncentiveData_dyn","nodeType":"YulIdentifier","src":"8720:58:201"},"nodeType":"YulFunctionCall","src":"8720:86:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"8710:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8826:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8837:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8822:3:201"},"nodeType":"YulFunctionCall","src":"8822:18:201"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"8846:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"8854:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"8842:3:201"},"nodeType":"YulFunctionCall","src":"8842:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8815:6:201"},"nodeType":"YulFunctionCall","src":"8815:50:201"},"nodeType":"YulExpressionStatement","src":"8815:50:201"},{"nodeType":"YulAssignment","src":"8874:76:201","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"8935:6:201"},{"name":"tail_1","nodeType":"YulIdentifier","src":"8943:6:201"}],"functionName":{"name":"abi_encode_array_struct_UserReserveIncentiveData_dyn","nodeType":"YulIdentifier","src":"8882:52:201"},"nodeType":"YulFunctionCall","src":"8882:68:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8874:4:201"}]}]},"name":"abi_encode_tuple_t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr_t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr_t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8627:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8638:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8646:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8657:4:201","type":""}],"src":"8253:703:201"},{"body":{"nodeType":"YulBlock","src":"9198:134:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9215:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9226:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9208:6:201"},"nodeType":"YulFunctionCall","src":"9208:21:201"},"nodeType":"YulExpressionStatement","src":"9208:21:201"},{"nodeType":"YulAssignment","src":"9238:88:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9299:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9311:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9322:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9307:3:201"},"nodeType":"YulFunctionCall","src":"9307:18:201"}],"functionName":{"name":"abi_encode_array_struct_UserReserveIncentiveData_dyn","nodeType":"YulIdentifier","src":"9246:52:201"},"nodeType":"YulFunctionCall","src":"9246:80:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9238:4:201"}]}]},"name":"abi_encode_tuple_t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9167:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9178:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9189:4:201","type":""}],"src":"8961:371:201"},{"body":{"nodeType":"YulBlock","src":"9438:201:201","statements":[{"body":{"nodeType":"YulBlock","src":"9484:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9493:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9496:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9486:6:201"},"nodeType":"YulFunctionCall","src":"9486:12:201"},"nodeType":"YulExpressionStatement","src":"9486:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9459:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"9468:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9455:3:201"},"nodeType":"YulFunctionCall","src":"9455:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"9480:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9451:3:201"},"nodeType":"YulFunctionCall","src":"9451:32:201"},"nodeType":"YulIf","src":"9448:52:201"},{"nodeType":"YulVariableDeclaration","src":"9509:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9535:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9522:12:201"},"nodeType":"YulFunctionCall","src":"9522:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"9513:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9603:5:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"9554:48:201"},"nodeType":"YulFunctionCall","src":"9554:55:201"},"nodeType":"YulExpressionStatement","src":"9554:55:201"},{"nodeType":"YulAssignment","src":"9618:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"9628:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9618:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9404:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9415:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9427:6:201","type":""}],"src":"9337:302:201"},{"body":{"nodeType":"YulBlock","src":"9893:140:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9910:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9921:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9903:6:201"},"nodeType":"YulFunctionCall","src":"9903:21:201"},"nodeType":"YulExpressionStatement","src":"9903:21:201"},{"nodeType":"YulAssignment","src":"9933:94:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10000:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10012:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10023:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10008:3:201"},"nodeType":"YulFunctionCall","src":"10008:18:201"}],"functionName":{"name":"abi_encode_array_struct_AggregatedReserveIncentiveData_dyn","nodeType":"YulIdentifier","src":"9941:58:201"},"nodeType":"YulFunctionCall","src":"9941:86:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9933:4:201"}]}]},"name":"abi_encode_tuple_t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9862:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9873:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9884:4:201","type":""}],"src":"9644:389:201"},{"body":{"nodeType":"YulBlock","src":"10098:102:201","statements":[{"nodeType":"YulAssignment","src":"10108:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"10123:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10117:5:201"},"nodeType":"YulFunctionCall","src":"10117:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"10108:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10188:5:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"10139:48:201"},"nodeType":"YulFunctionCall","src":"10139:55:201"},"nodeType":"YulExpressionStatement","src":"10139:55:201"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"10077:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"10088:5:201","type":""}],"src":"10038:162:201"},{"body":{"nodeType":"YulBlock","src":"10286:194:201","statements":[{"body":{"nodeType":"YulBlock","src":"10332:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10341:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10344:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10334:6:201"},"nodeType":"YulFunctionCall","src":"10334:12:201"},"nodeType":"YulExpressionStatement","src":"10334:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"10307:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"10316:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10303:3:201"},"nodeType":"YulFunctionCall","src":"10303:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"10328:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10299:3:201"},"nodeType":"YulFunctionCall","src":"10299:32:201"},"nodeType":"YulIf","src":"10296:52:201"},{"nodeType":"YulVariableDeclaration","src":"10357:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10376:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10370:5:201"},"nodeType":"YulFunctionCall","src":"10370:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"10361:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10444:5:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"10395:48:201"},"nodeType":"YulFunctionCall","src":"10395:55:201"},"nodeType":"YulExpressionStatement","src":"10395:55:201"},{"nodeType":"YulAssignment","src":"10459:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"10469:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"10459:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10252:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"10263:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"10275:6:201","type":""}],"src":"10205:275:201"},{"body":{"nodeType":"YulBlock","src":"10517:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10534:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10537:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10527:6:201"},"nodeType":"YulFunctionCall","src":"10527:88:201"},"nodeType":"YulExpressionStatement","src":"10527:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10631:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10634:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10624:6:201"},"nodeType":"YulFunctionCall","src":"10624:15:201"},"nodeType":"YulExpressionStatement","src":"10624:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10655:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10658:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10648:6:201"},"nodeType":"YulFunctionCall","src":"10648:15:201"},"nodeType":"YulExpressionStatement","src":"10648:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"10485:184:201"},{"body":{"nodeType":"YulBlock","src":"10720:206:201","statements":[{"nodeType":"YulAssignment","src":"10730:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10746:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10740:5:201"},"nodeType":"YulFunctionCall","src":"10740:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"10730:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"10758:34:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"10780:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10788:3:201","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10776:3:201"},"nodeType":"YulFunctionCall","src":"10776:16:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"10762:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"10867:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"10869:16:201"},"nodeType":"YulFunctionCall","src":"10869:18:201"},"nodeType":"YulExpressionStatement","src":"10869:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"10810:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"10822:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10807:2:201"},"nodeType":"YulFunctionCall","src":"10807:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"10846:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"10858:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10843:2:201"},"nodeType":"YulFunctionCall","src":"10843:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"10804:2:201"},"nodeType":"YulFunctionCall","src":"10804:62:201"},"nodeType":"YulIf","src":"10801:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10905:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"10909:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10898:6:201"},"nodeType":"YulFunctionCall","src":"10898:22:201"},"nodeType":"YulExpressionStatement","src":"10898:22:201"}]},"name":"allocate_memory_3049","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"10709:6:201","type":""}],"src":"10674:252:201"},{"body":{"nodeType":"YulBlock","src":"10976:289:201","statements":[{"nodeType":"YulAssignment","src":"10986:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11002:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10996:5:201"},"nodeType":"YulFunctionCall","src":"10996:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"10986:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"11014:117:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"11036:6:201"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"11052:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"11058:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11048:3:201"},"nodeType":"YulFunctionCall","src":"11048:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"11063:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11044:3:201"},"nodeType":"YulFunctionCall","src":"11044:86:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11032:3:201"},"nodeType":"YulFunctionCall","src":"11032:99:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"11018:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"11206:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"11208:16:201"},"nodeType":"YulFunctionCall","src":"11208:18:201"},"nodeType":"YulExpressionStatement","src":"11208:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"11149:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"11161:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11146:2:201"},"nodeType":"YulFunctionCall","src":"11146:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"11185:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"11197:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"11182:2:201"},"nodeType":"YulFunctionCall","src":"11182:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"11143:2:201"},"nodeType":"YulFunctionCall","src":"11143:62:201"},"nodeType":"YulIf","src":"11140:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11244:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"11248:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11237:6:201"},"nodeType":"YulFunctionCall","src":"11237:22:201"},"nodeType":"YulExpressionStatement","src":"11237:22:201"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"10956:4:201","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"10965:6:201","type":""}],"src":"10931:334:201"},{"body":{"nodeType":"YulBlock","src":"11376:929:201","statements":[{"nodeType":"YulVariableDeclaration","src":"11386:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11396:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11390:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"11443:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11452:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11455:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11445:6:201"},"nodeType":"YulFunctionCall","src":"11445:12:201"},"nodeType":"YulExpressionStatement","src":"11445:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"11418:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"11427:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"11414:3:201"},"nodeType":"YulFunctionCall","src":"11414:23:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11439:2:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11410:3:201"},"nodeType":"YulFunctionCall","src":"11410:32:201"},"nodeType":"YulIf","src":"11407:52:201"},{"nodeType":"YulVariableDeclaration","src":"11468:30:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11488:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11482:5:201"},"nodeType":"YulFunctionCall","src":"11482:16:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"11472:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11507:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11517:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"11511:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"11562:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11571:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11574:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11564:6:201"},"nodeType":"YulFunctionCall","src":"11564:12:201"},"nodeType":"YulExpressionStatement","src":"11564:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"11550:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"11558:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11547:2:201"},"nodeType":"YulFunctionCall","src":"11547:14:201"},"nodeType":"YulIf","src":"11544:34:201"},{"nodeType":"YulVariableDeclaration","src":"11587:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11601:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"11612:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11597:3:201"},"nodeType":"YulFunctionCall","src":"11597:22:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"11591:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"11667:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11676:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11679:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11669:6:201"},"nodeType":"YulFunctionCall","src":"11669:12:201"},"nodeType":"YulExpressionStatement","src":"11669:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"11646:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"11650:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11642:3:201"},"nodeType":"YulFunctionCall","src":"11642:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"11657:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"11638:3:201"},"nodeType":"YulFunctionCall","src":"11638:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"11631:6:201"},"nodeType":"YulFunctionCall","src":"11631:35:201"},"nodeType":"YulIf","src":"11628:55:201"},{"nodeType":"YulVariableDeclaration","src":"11692:19:201","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"11708:2:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11702:5:201"},"nodeType":"YulFunctionCall","src":"11702:9:201"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"11696:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"11734:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"11736:16:201"},"nodeType":"YulFunctionCall","src":"11736:18:201"},"nodeType":"YulExpressionStatement","src":"11736:18:201"}]},"condition":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"11726:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"11730:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11723:2:201"},"nodeType":"YulFunctionCall","src":"11723:10:201"},"nodeType":"YulIf","src":"11720:36:201"},{"nodeType":"YulVariableDeclaration","src":"11765:20:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11779:1:201","type":"","value":"5"},{"name":"_4","nodeType":"YulIdentifier","src":"11782:2:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"11775:3:201"},"nodeType":"YulFunctionCall","src":"11775:10:201"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"11769:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11794:39:201","value":{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"11825:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11829:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11821:3:201"},"nodeType":"YulFunctionCall","src":"11821:11:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"11805:15:201"},"nodeType":"YulFunctionCall","src":"11805:28:201"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"11798:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11842:16:201","value":{"name":"dst","nodeType":"YulIdentifier","src":"11855:3:201"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"11846:5:201","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"11874:3:201"},{"name":"_4","nodeType":"YulIdentifier","src":"11879:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11867:6:201"},"nodeType":"YulFunctionCall","src":"11867:15:201"},"nodeType":"YulExpressionStatement","src":"11867:15:201"},{"nodeType":"YulAssignment","src":"11891:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"11902:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11907:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11898:3:201"},"nodeType":"YulFunctionCall","src":"11898:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"11891:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"11919:34:201","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"11941:2:201"},{"name":"_5","nodeType":"YulIdentifier","src":"11945:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11937:3:201"},"nodeType":"YulFunctionCall","src":"11937:11:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11950:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11933:3:201"},"nodeType":"YulFunctionCall","src":"11933:20:201"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"11923:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"11985:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"11994:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"11997:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"11987:6:201"},"nodeType":"YulFunctionCall","src":"11987:12:201"},"nodeType":"YulExpressionStatement","src":"11987:12:201"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"11968:6:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"11976:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"11965:2:201"},"nodeType":"YulFunctionCall","src":"11965:19:201"},"nodeType":"YulIf","src":"11962:39:201"},{"nodeType":"YulVariableDeclaration","src":"12010:22:201","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"12025:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12029:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12021:3:201"},"nodeType":"YulFunctionCall","src":"12021:11:201"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"12014:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"12097:178:201","statements":[{"nodeType":"YulVariableDeclaration","src":"12111:23:201","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"12130:3:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12124:5:201"},"nodeType":"YulFunctionCall","src":"12124:10:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"12115:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12196:5:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"12147:48:201"},"nodeType":"YulFunctionCall","src":"12147:55:201"},"nodeType":"YulExpressionStatement","src":"12147:55:201"},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"12222:3:201"},{"name":"value","nodeType":"YulIdentifier","src":"12227:5:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12215:6:201"},"nodeType":"YulFunctionCall","src":"12215:18:201"},"nodeType":"YulExpressionStatement","src":"12215:18:201"},{"nodeType":"YulAssignment","src":"12246:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"12257:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12262:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12253:3:201"},"nodeType":"YulFunctionCall","src":"12253:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"12246:3:201"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"12052:3:201"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"12057:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"12049:2:201"},"nodeType":"YulFunctionCall","src":"12049:15:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"12065:23:201","statements":[{"nodeType":"YulAssignment","src":"12067:19:201","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"12078:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12083:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12074:3:201"},"nodeType":"YulFunctionCall","src":"12074:12:201"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"12067:3:201"}]}]},"pre":{"nodeType":"YulBlock","src":"12045:3:201","statements":[]},"src":"12041:234:201"},{"nodeType":"YulAssignment","src":"12284:15:201","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"12294:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"12284:6:201"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11342:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"11353:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"11365:6:201","type":""}],"src":"11270:1035:201"},{"body":{"nodeType":"YulBlock","src":"12342:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12359:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12362:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12352:6:201"},"nodeType":"YulFunctionCall","src":"12352:88:201"},"nodeType":"YulExpressionStatement","src":"12352:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12456:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"12459:4:201","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12449:6:201"},"nodeType":"YulFunctionCall","src":"12449:15:201"},"nodeType":"YulExpressionStatement","src":"12449:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12480:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12483:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12473:6:201"},"nodeType":"YulFunctionCall","src":"12473:15:201"},"nodeType":"YulExpressionStatement","src":"12473:15:201"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"12310:184:201"},{"body":{"nodeType":"YulBlock","src":"12600:125:201","statements":[{"nodeType":"YulAssignment","src":"12610:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12622:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12633:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12618:3:201"},"nodeType":"YulFunctionCall","src":"12618:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12610:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12652:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12667:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"12675:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12663:3:201"},"nodeType":"YulFunctionCall","src":"12663:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12645:6:201"},"nodeType":"YulFunctionCall","src":"12645:74:201"},"nodeType":"YulExpressionStatement","src":"12645:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12569:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12580:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12591:4:201","type":""}],"src":"12499:226:201"},{"body":{"nodeType":"YulBlock","src":"12821:335:201","statements":[{"body":{"nodeType":"YulBlock","src":"12865:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12874:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12877:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12867:6:201"},"nodeType":"YulFunctionCall","src":"12867:12:201"},"nodeType":"YulExpressionStatement","src":"12867:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"12842:3:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"12847:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12838:3:201"},"nodeType":"YulFunctionCall","src":"12838:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"12859:4:201","type":"","value":"0x20"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12834:3:201"},"nodeType":"YulFunctionCall","src":"12834:30:201"},"nodeType":"YulIf","src":"12831:50:201"},{"nodeType":"YulVariableDeclaration","src":"12890:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12910:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12904:5:201"},"nodeType":"YulFunctionCall","src":"12904:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"12894:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12922:35:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"12944:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"12952:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12940:3:201"},"nodeType":"YulFunctionCall","src":"12940:17:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"12926:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"13032:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"13034:16:201"},"nodeType":"YulFunctionCall","src":"13034:18:201"},"nodeType":"YulExpressionStatement","src":"13034:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"12975:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"12987:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12972:2:201"},"nodeType":"YulFunctionCall","src":"12972:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"13011:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"13023:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"13008:2:201"},"nodeType":"YulFunctionCall","src":"13008:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"12969:2:201"},"nodeType":"YulFunctionCall","src":"12969:62:201"},"nodeType":"YulIf","src":"12966:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13070:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"13074:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13063:6:201"},"nodeType":"YulFunctionCall","src":"13063:22:201"},"nodeType":"YulExpressionStatement","src":"13063:22:201"},{"nodeType":"YulAssignment","src":"13094:15:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"13103:6:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"13094:5:201"}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"13125:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13139:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13133:5:201"},"nodeType":"YulFunctionCall","src":"13133:16:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13118:6:201"},"nodeType":"YulFunctionCall","src":"13118:32:201"},"nodeType":"YulExpressionStatement","src":"13118:32:201"}]},"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12792:9:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"12803:3:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"12811:5:201","type":""}],"src":"12730:426:201"},{"body":{"nodeType":"YulBlock","src":"13221:132:201","statements":[{"nodeType":"YulAssignment","src":"13231:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13246:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13240:5:201"},"nodeType":"YulFunctionCall","src":"13240:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"13231:5:201"}]},{"body":{"nodeType":"YulBlock","src":"13331:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13340:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13343:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13333:6:201"},"nodeType":"YulFunctionCall","src":"13333:12:201"},"nodeType":"YulExpressionStatement","src":"13333:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13275:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13286:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"13293:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13282:3:201"},"nodeType":"YulFunctionCall","src":"13282:46:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"13272:2:201"},"nodeType":"YulFunctionCall","src":"13272:57:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13265:6:201"},"nodeType":"YulFunctionCall","src":"13265:65:201"},"nodeType":"YulIf","src":"13262:85:201"}]},"name":"abi_decode_uint128_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"13200:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"13211:5:201","type":""}],"src":"13161:192:201"},{"body":{"nodeType":"YulBlock","src":"13417:110:201","statements":[{"nodeType":"YulAssignment","src":"13427:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13442:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13436:5:201"},"nodeType":"YulFunctionCall","src":"13436:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"13427:5:201"}]},{"body":{"nodeType":"YulBlock","src":"13505:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13514:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13517:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13507:6:201"},"nodeType":"YulFunctionCall","src":"13507:12:201"},"nodeType":"YulExpressionStatement","src":"13507:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13471:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13482:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"13489:12:201","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13478:3:201"},"nodeType":"YulFunctionCall","src":"13478:24:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"13468:2:201"},"nodeType":"YulFunctionCall","src":"13468:35:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13461:6:201"},"nodeType":"YulFunctionCall","src":"13461:43:201"},"nodeType":"YulIf","src":"13458:63:201"}]},"name":"abi_decode_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"13396:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"13407:5:201","type":""}],"src":"13358:169:201"},{"body":{"nodeType":"YulBlock","src":"13591:104:201","statements":[{"nodeType":"YulAssignment","src":"13601:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13616:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13610:5:201"},"nodeType":"YulFunctionCall","src":"13610:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"13601:5:201"}]},{"body":{"nodeType":"YulBlock","src":"13673:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13682:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13685:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13675:6:201"},"nodeType":"YulFunctionCall","src":"13675:12:201"},"nodeType":"YulExpressionStatement","src":"13675:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13645:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13656:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"13663:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13652:3:201"},"nodeType":"YulFunctionCall","src":"13652:18:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"13642:2:201"},"nodeType":"YulFunctionCall","src":"13642:29:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13635:6:201"},"nodeType":"YulFunctionCall","src":"13635:37:201"},"nodeType":"YulIf","src":"13632:57:201"}]},"name":"abi_decode_uint16_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"13570:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"13581:5:201","type":""}],"src":"13532:163:201"},{"body":{"nodeType":"YulBlock","src":"13811:1541:201","statements":[{"body":{"nodeType":"YulBlock","src":"13858:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13867:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13870:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13860:6:201"},"nodeType":"YulFunctionCall","src":"13860:12:201"},"nodeType":"YulExpressionStatement","src":"13860:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13832:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"13841:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13828:3:201"},"nodeType":"YulFunctionCall","src":"13828:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"13853:3:201","type":"","value":"480"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13824:3:201"},"nodeType":"YulFunctionCall","src":"13824:33:201"},"nodeType":"YulIf","src":"13821:53:201"},{"nodeType":"YulVariableDeclaration","src":"13883:35:201","value":{"arguments":[],"functionName":{"name":"allocate_memory_3049","nodeType":"YulIdentifier","src":"13896:20:201"},"nodeType":"YulFunctionCall","src":"13896:22:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13887:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13934:5:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13994:9:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"14005:7:201"}],"functionName":{"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulIdentifier","src":"13941:52:201"},"nodeType":"YulFunctionCall","src":"13941:72:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13927:6:201"},"nodeType":"YulFunctionCall","src":"13927:87:201"},"nodeType":"YulExpressionStatement","src":"13927:87:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14034:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"14041:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14030:3:201"},"nodeType":"YulFunctionCall","src":"14030:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14080:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14091:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14076:3:201"},"nodeType":"YulFunctionCall","src":"14076:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"14046:29:201"},"nodeType":"YulFunctionCall","src":"14046:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14023:6:201"},"nodeType":"YulFunctionCall","src":"14023:73:201"},"nodeType":"YulExpressionStatement","src":"14023:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14116:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"14123:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14112:3:201"},"nodeType":"YulFunctionCall","src":"14112:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14162:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14173:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14158:3:201"},"nodeType":"YulFunctionCall","src":"14158:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"14128:29:201"},"nodeType":"YulFunctionCall","src":"14128:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14105:6:201"},"nodeType":"YulFunctionCall","src":"14105:73:201"},"nodeType":"YulExpressionStatement","src":"14105:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14198:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"14205:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14194:3:201"},"nodeType":"YulFunctionCall","src":"14194:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14244:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14255:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14240:3:201"},"nodeType":"YulFunctionCall","src":"14240:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"14210:29:201"},"nodeType":"YulFunctionCall","src":"14210:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14187:6:201"},"nodeType":"YulFunctionCall","src":"14187:73:201"},"nodeType":"YulExpressionStatement","src":"14187:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14280:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"14287:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14276:3:201"},"nodeType":"YulFunctionCall","src":"14276:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14327:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14338:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14323:3:201"},"nodeType":"YulFunctionCall","src":"14323:19:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"14293:29:201"},"nodeType":"YulFunctionCall","src":"14293:50:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14269:6:201"},"nodeType":"YulFunctionCall","src":"14269:75:201"},"nodeType":"YulExpressionStatement","src":"14269:75:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14364:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"14371:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14360:3:201"},"nodeType":"YulFunctionCall","src":"14360:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14411:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14422:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14407:3:201"},"nodeType":"YulFunctionCall","src":"14407:19:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"14377:29:201"},"nodeType":"YulFunctionCall","src":"14377:50:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14353:6:201"},"nodeType":"YulFunctionCall","src":"14353:75:201"},"nodeType":"YulExpressionStatement","src":"14353:75:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14448:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"14455:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14444:3:201"},"nodeType":"YulFunctionCall","src":"14444:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14494:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14505:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14490:3:201"},"nodeType":"YulFunctionCall","src":"14490:19:201"}],"functionName":{"name":"abi_decode_uint40_fromMemory","nodeType":"YulIdentifier","src":"14461:28:201"},"nodeType":"YulFunctionCall","src":"14461:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14437:6:201"},"nodeType":"YulFunctionCall","src":"14437:74:201"},"nodeType":"YulExpressionStatement","src":"14437:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14531:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"14538:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14527:3:201"},"nodeType":"YulFunctionCall","src":"14527:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14577:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14588:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14573:3:201"},"nodeType":"YulFunctionCall","src":"14573:19:201"}],"functionName":{"name":"abi_decode_uint16_fromMemory","nodeType":"YulIdentifier","src":"14544:28:201"},"nodeType":"YulFunctionCall","src":"14544:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14520:6:201"},"nodeType":"YulFunctionCall","src":"14520:74:201"},"nodeType":"YulExpressionStatement","src":"14520:74:201"},{"nodeType":"YulVariableDeclaration","src":"14603:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14613:3:201","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"14607:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14636:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"14643:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14632:3:201"},"nodeType":"YulFunctionCall","src":"14632:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14682:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"14693:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14678:3:201"},"nodeType":"YulFunctionCall","src":"14678:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"14648:29:201"},"nodeType":"YulFunctionCall","src":"14648:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14625:6:201"},"nodeType":"YulFunctionCall","src":"14625:73:201"},"nodeType":"YulExpressionStatement","src":"14625:73:201"},{"nodeType":"YulVariableDeclaration","src":"14707:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14717:3:201","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"14711:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14740:5:201"},{"name":"_2","nodeType":"YulIdentifier","src":"14747:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14736:3:201"},"nodeType":"YulFunctionCall","src":"14736:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14786:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"14797:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14782:3:201"},"nodeType":"YulFunctionCall","src":"14782:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"14752:29:201"},"nodeType":"YulFunctionCall","src":"14752:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14729:6:201"},"nodeType":"YulFunctionCall","src":"14729:73:201"},"nodeType":"YulExpressionStatement","src":"14729:73:201"},{"nodeType":"YulVariableDeclaration","src":"14811:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14821:3:201","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"14815:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14844:5:201"},{"name":"_3","nodeType":"YulIdentifier","src":"14851:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14840:3:201"},"nodeType":"YulFunctionCall","src":"14840:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14890:9:201"},{"name":"_3","nodeType":"YulIdentifier","src":"14901:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14886:3:201"},"nodeType":"YulFunctionCall","src":"14886:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"14856:29:201"},"nodeType":"YulFunctionCall","src":"14856:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14833:6:201"},"nodeType":"YulFunctionCall","src":"14833:73:201"},"nodeType":"YulExpressionStatement","src":"14833:73:201"},{"nodeType":"YulVariableDeclaration","src":"14915:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14925:3:201","type":"","value":"352"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"14919:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"14948:5:201"},{"name":"_4","nodeType":"YulIdentifier","src":"14955:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14944:3:201"},"nodeType":"YulFunctionCall","src":"14944:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14994:9:201"},{"name":"_4","nodeType":"YulIdentifier","src":"15005:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14990:3:201"},"nodeType":"YulFunctionCall","src":"14990:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"14960:29:201"},"nodeType":"YulFunctionCall","src":"14960:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14937:6:201"},"nodeType":"YulFunctionCall","src":"14937:73:201"},"nodeType":"YulExpressionStatement","src":"14937:73:201"},{"nodeType":"YulVariableDeclaration","src":"15019:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"15029:3:201","type":"","value":"384"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"15023:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15052:5:201"},{"name":"_5","nodeType":"YulIdentifier","src":"15059:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15048:3:201"},"nodeType":"YulFunctionCall","src":"15048:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15098:9:201"},{"name":"_5","nodeType":"YulIdentifier","src":"15109:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15094:3:201"},"nodeType":"YulFunctionCall","src":"15094:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"15064:29:201"},"nodeType":"YulFunctionCall","src":"15064:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15041:6:201"},"nodeType":"YulFunctionCall","src":"15041:73:201"},"nodeType":"YulExpressionStatement","src":"15041:73:201"},{"nodeType":"YulVariableDeclaration","src":"15123:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"15133:3:201","type":"","value":"416"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"15127:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15156:5:201"},{"name":"_6","nodeType":"YulIdentifier","src":"15163:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15152:3:201"},"nodeType":"YulFunctionCall","src":"15152:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15202:9:201"},{"name":"_6","nodeType":"YulIdentifier","src":"15213:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15198:3:201"},"nodeType":"YulFunctionCall","src":"15198:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"15168:29:201"},"nodeType":"YulFunctionCall","src":"15168:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15145:6:201"},"nodeType":"YulFunctionCall","src":"15145:73:201"},"nodeType":"YulExpressionStatement","src":"15145:73:201"},{"nodeType":"YulVariableDeclaration","src":"15227:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"15237:3:201","type":"","value":"448"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"15231:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15260:5:201"},{"name":"_7","nodeType":"YulIdentifier","src":"15267:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15256:3:201"},"nodeType":"YulFunctionCall","src":"15256:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15306:9:201"},{"name":"_7","nodeType":"YulIdentifier","src":"15317:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15302:3:201"},"nodeType":"YulFunctionCall","src":"15302:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"15272:29:201"},"nodeType":"YulFunctionCall","src":"15272:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15249:6:201"},"nodeType":"YulFunctionCall","src":"15249:73:201"},"nodeType":"YulExpressionStatement","src":"15249:73:201"},{"nodeType":"YulAssignment","src":"15331:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"15341:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"15331:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13777:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13788:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13800:6:201","type":""}],"src":"13700:1652:201"},{"body":{"nodeType":"YulBlock","src":"15472:194:201","statements":[{"body":{"nodeType":"YulBlock","src":"15518:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15527:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15530:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15520:6:201"},"nodeType":"YulFunctionCall","src":"15520:12:201"},"nodeType":"YulExpressionStatement","src":"15520:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"15493:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"15502:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15489:3:201"},"nodeType":"YulFunctionCall","src":"15489:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"15514:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"15485:3:201"},"nodeType":"YulFunctionCall","src":"15485:32:201"},"nodeType":"YulIf","src":"15482:52:201"},{"nodeType":"YulVariableDeclaration","src":"15543:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15562:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15556:5:201"},"nodeType":"YulFunctionCall","src":"15556:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"15547:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15630:5:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"15581:48:201"},"nodeType":"YulFunctionCall","src":"15581:55:201"},"nodeType":"YulExpressionStatement","src":"15581:55:201"},{"nodeType":"YulAssignment","src":"15645:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"15655:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"15645:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IAaveIncentivesController_$3875_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15438:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"15449:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"15461:6:201","type":""}],"src":"15357:309:201"},{"body":{"nodeType":"YulBlock","src":"15800:198:201","statements":[{"nodeType":"YulAssignment","src":"15810:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15822:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15833:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15818:3:201"},"nodeType":"YulFunctionCall","src":"15818:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15810:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"15845:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"15855:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15849:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15913:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15928:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15936:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15924:3:201"},"nodeType":"YulFunctionCall","src":"15924:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15906:6:201"},"nodeType":"YulFunctionCall","src":"15906:34:201"},"nodeType":"YulExpressionStatement","src":"15906:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15960:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15971:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15956:3:201"},"nodeType":"YulFunctionCall","src":"15956:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"15980:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15988:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"15976:3:201"},"nodeType":"YulFunctionCall","src":"15976:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15949:6:201"},"nodeType":"YulFunctionCall","src":"15949:43:201"},"nodeType":"YulExpressionStatement","src":"15949:43:201"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15761:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"15772:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15780:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15791:4:201","type":""}],"src":"15671:327:201"},{"body":{"nodeType":"YulBlock","src":"16135:236:201","statements":[{"body":{"nodeType":"YulBlock","src":"16182:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16191:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16194:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16184:6:201"},"nodeType":"YulFunctionCall","src":"16184:12:201"},"nodeType":"YulExpressionStatement","src":"16184:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"16156:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"16165:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16152:3:201"},"nodeType":"YulFunctionCall","src":"16152:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"16177:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"16148:3:201"},"nodeType":"YulFunctionCall","src":"16148:33:201"},"nodeType":"YulIf","src":"16145:53:201"},{"nodeType":"YulAssignment","src":"16207:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16223:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16217:5:201"},"nodeType":"YulFunctionCall","src":"16217:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"16207:6:201"}]},{"nodeType":"YulAssignment","src":"16242:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16262:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16273:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16258:3:201"},"nodeType":"YulFunctionCall","src":"16258:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16252:5:201"},"nodeType":"YulFunctionCall","src":"16252:25:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"16242:6:201"}]},{"nodeType":"YulAssignment","src":"16286:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16306:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16317:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16302:3:201"},"nodeType":"YulFunctionCall","src":"16302:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16296:5:201"},"nodeType":"YulFunctionCall","src":"16296:25:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"16286:6:201"}]},{"nodeType":"YulAssignment","src":"16330:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16350:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16361:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16346:3:201"},"nodeType":"YulFunctionCall","src":"16346:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16340:5:201"},"nodeType":"YulFunctionCall","src":"16340:25:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"16330:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16077:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"16088:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"16100:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"16108:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"16116:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"16124:6:201","type":""}],"src":"16003:368:201"},{"body":{"nodeType":"YulBlock","src":"16455:194:201","statements":[{"body":{"nodeType":"YulBlock","src":"16501:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16510:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16513:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16503:6:201"},"nodeType":"YulFunctionCall","src":"16503:12:201"},"nodeType":"YulExpressionStatement","src":"16503:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"16476:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"16485:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16472:3:201"},"nodeType":"YulFunctionCall","src":"16472:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"16497:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"16468:3:201"},"nodeType":"YulFunctionCall","src":"16468:32:201"},"nodeType":"YulIf","src":"16465:52:201"},{"nodeType":"YulVariableDeclaration","src":"16526:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16545:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16539:5:201"},"nodeType":"YulFunctionCall","src":"16539:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"16530:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"16603:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16612:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16615:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16605:6:201"},"nodeType":"YulFunctionCall","src":"16605:12:201"},"nodeType":"YulExpressionStatement","src":"16605:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16577:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16588:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"16595:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16584:3:201"},"nodeType":"YulFunctionCall","src":"16584:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"16574:2:201"},"nodeType":"YulFunctionCall","src":"16574:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"16567:6:201"},"nodeType":"YulFunctionCall","src":"16567:35:201"},"nodeType":"YulIf","src":"16564:55:201"},{"nodeType":"YulAssignment","src":"16628:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"16638:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"16628:6:201"}]}]},"name":"abi_decode_tuple_t_uint8_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16421:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"16432:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"16444:6:201","type":""}],"src":"16376:273:201"},{"body":{"nodeType":"YulBlock","src":"16745:674:201","statements":[{"body":{"nodeType":"YulBlock","src":"16791:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16800:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16803:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16793:6:201"},"nodeType":"YulFunctionCall","src":"16793:12:201"},"nodeType":"YulExpressionStatement","src":"16793:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"16766:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"16775:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16762:3:201"},"nodeType":"YulFunctionCall","src":"16762:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"16787:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"16758:3:201"},"nodeType":"YulFunctionCall","src":"16758:32:201"},"nodeType":"YulIf","src":"16755:52:201"},{"nodeType":"YulVariableDeclaration","src":"16816:30:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16836:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16830:5:201"},"nodeType":"YulFunctionCall","src":"16830:16:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"16820:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16855:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"16865:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"16859:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"16910:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16919:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16922:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16912:6:201"},"nodeType":"YulFunctionCall","src":"16912:12:201"},"nodeType":"YulExpressionStatement","src":"16912:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"16898:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16906:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"16895:2:201"},"nodeType":"YulFunctionCall","src":"16895:14:201"},"nodeType":"YulIf","src":"16892:34:201"},{"nodeType":"YulVariableDeclaration","src":"16935:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16949:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"16960:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16945:3:201"},"nodeType":"YulFunctionCall","src":"16945:22:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"16939:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"17015:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17024:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17027:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17017:6:201"},"nodeType":"YulFunctionCall","src":"17017:12:201"},"nodeType":"YulExpressionStatement","src":"17017:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"16994:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"16998:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16990:3:201"},"nodeType":"YulFunctionCall","src":"16990:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"17005:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"16986:3:201"},"nodeType":"YulFunctionCall","src":"16986:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"16979:6:201"},"nodeType":"YulFunctionCall","src":"16979:35:201"},"nodeType":"YulIf","src":"16976:55:201"},{"nodeType":"YulVariableDeclaration","src":"17040:19:201","value":{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"17056:2:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17050:5:201"},"nodeType":"YulFunctionCall","src":"17050:9:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"17044:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"17082:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"17084:16:201"},"nodeType":"YulFunctionCall","src":"17084:18:201"},"nodeType":"YulExpressionStatement","src":"17084:18:201"}]},"condition":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"17074:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"17078:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"17071:2:201"},"nodeType":"YulFunctionCall","src":"17071:10:201"},"nodeType":"YulIf","src":"17068:36:201"},{"nodeType":"YulVariableDeclaration","src":"17113:125:201","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"17154:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"17158:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17150:3:201"},"nodeType":"YulFunctionCall","src":"17150:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"17165:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17146:3:201"},"nodeType":"YulFunctionCall","src":"17146:86:201"},{"kind":"number","nodeType":"YulLiteral","src":"17234:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17142:3:201"},"nodeType":"YulFunctionCall","src":"17142:95:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"17126:15:201"},"nodeType":"YulFunctionCall","src":"17126:112:201"},"variables":[{"name":"array","nodeType":"YulTypedName","src":"17117:5:201","type":""}]},{"expression":{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"17254:5:201"},{"name":"_3","nodeType":"YulIdentifier","src":"17261:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17247:6:201"},"nodeType":"YulFunctionCall","src":"17247:17:201"},"nodeType":"YulExpressionStatement","src":"17247:17:201"},{"body":{"nodeType":"YulBlock","src":"17310:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17319:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17322:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17312:6:201"},"nodeType":"YulFunctionCall","src":"17312:12:201"},"nodeType":"YulExpressionStatement","src":"17312:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"17287:2:201"},{"name":"_3","nodeType":"YulIdentifier","src":"17291:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17283:3:201"},"nodeType":"YulFunctionCall","src":"17283:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"17296:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17279:3:201"},"nodeType":"YulFunctionCall","src":"17279:20:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"17301:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"17276:2:201"},"nodeType":"YulFunctionCall","src":"17276:33:201"},"nodeType":"YulIf","src":"17273:53:201"},{"expression":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"17361:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"17365:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17357:3:201"},"nodeType":"YulFunctionCall","src":"17357:11:201"},{"arguments":[{"name":"array","nodeType":"YulIdentifier","src":"17374:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"17381:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17370:3:201"},"nodeType":"YulFunctionCall","src":"17370:14:201"},{"name":"_3","nodeType":"YulIdentifier","src":"17386:2:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"17335:21:201"},"nodeType":"YulFunctionCall","src":"17335:54:201"},"nodeType":"YulExpressionStatement","src":"17335:54:201"},{"nodeType":"YulAssignment","src":"17398:15:201","value":{"name":"array","nodeType":"YulIdentifier","src":"17408:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"17398:6:201"}]}]},"name":"abi_decode_tuple_t_string_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16711:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"16722:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"16734:6:201","type":""}],"src":"16654:765:201"},{"body":{"nodeType":"YulBlock","src":"17504:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"17550:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17559:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17562:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17552:6:201"},"nodeType":"YulFunctionCall","src":"17552:12:201"},"nodeType":"YulExpressionStatement","src":"17552:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"17525:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"17534:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17521:3:201"},"nodeType":"YulFunctionCall","src":"17521:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"17546:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"17517:3:201"},"nodeType":"YulFunctionCall","src":"17517:32:201"},"nodeType":"YulIf","src":"17514:52:201"},{"nodeType":"YulAssignment","src":"17575:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17591:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17585:5:201"},"nodeType":"YulFunctionCall","src":"17585:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"17575:6:201"}]}]},"name":"abi_decode_tuple_t_int256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17470:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"17481:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"17493:6:201","type":""}],"src":"17424:183:201"},{"body":{"nodeType":"YulBlock","src":"17659:302:201","statements":[{"body":{"nodeType":"YulBlock","src":"17758:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17779:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17782:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17772:6:201"},"nodeType":"YulFunctionCall","src":"17772:88:201"},"nodeType":"YulExpressionStatement","src":"17772:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17880:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"17883:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17873:6:201"},"nodeType":"YulFunctionCall","src":"17873:15:201"},"nodeType":"YulExpressionStatement","src":"17873:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17908:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17911:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17901:6:201"},"nodeType":"YulFunctionCall","src":"17901:15:201"},"nodeType":"YulExpressionStatement","src":"17901:15:201"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17675:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"17682:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"17672:2:201"},"nodeType":"YulFunctionCall","src":"17672:77:201"},"nodeType":"YulIf","src":"17669:257:201"},{"nodeType":"YulAssignment","src":"17935:20:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17946:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"17953:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17942:3:201"},"nodeType":"YulFunctionCall","src":"17942:13:201"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"17935:3:201"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"17641:5:201","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"17651:3:201","type":""}],"src":"17612:349:201"},{"body":{"nodeType":"YulBlock","src":"18123:250:201","statements":[{"nodeType":"YulAssignment","src":"18133:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18145:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18156:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18141:3:201"},"nodeType":"YulFunctionCall","src":"18141:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18133:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"18168:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"18178:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"18172:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18236:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"18251:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"18259:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18247:3:201"},"nodeType":"YulFunctionCall","src":"18247:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18229:6:201"},"nodeType":"YulFunctionCall","src":"18229:34:201"},"nodeType":"YulExpressionStatement","src":"18229:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18283:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18294:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18279:3:201"},"nodeType":"YulFunctionCall","src":"18279:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"18303:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"18311:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18299:3:201"},"nodeType":"YulFunctionCall","src":"18299:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18272:6:201"},"nodeType":"YulFunctionCall","src":"18272:43:201"},"nodeType":"YulExpressionStatement","src":"18272:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18335:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18346:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18331:3:201"},"nodeType":"YulFunctionCall","src":"18331:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"18355:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"18363:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18351:3:201"},"nodeType":"YulFunctionCall","src":"18351:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18324:6:201"},"nodeType":"YulFunctionCall","src":"18324:43:201"},"nodeType":"YulExpressionStatement","src":"18324:43:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18076:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"18087:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"18095:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"18103:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18114:4:201","type":""}],"src":"17966:407:201"},{"body":{"nodeType":"YulBlock","src":"18459:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"18505:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18514:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"18517:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"18507:6:201"},"nodeType":"YulFunctionCall","src":"18507:12:201"},"nodeType":"YulExpressionStatement","src":"18507:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"18480:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"18489:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"18476:3:201"},"nodeType":"YulFunctionCall","src":"18476:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"18501:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"18472:3:201"},"nodeType":"YulFunctionCall","src":"18472:32:201"},"nodeType":"YulIf","src":"18469:52:201"},{"nodeType":"YulAssignment","src":"18530:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18546:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"18540:5:201"},"nodeType":"YulFunctionCall","src":"18540:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"18530:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18425:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"18436:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"18448:6:201","type":""}],"src":"18378:184:201"}]},"contents":"{\n    { }\n    function validator_revert_contract_IPoolAddressesProvider(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069t_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_contract_IPoolAddressesProvider(value_1)\n        value1 := value_1\n    }\n    function abi_encode_address(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_uint8(value, pos)\n    { mstore(pos, and(value, 0xff)) }\n    function abi_encode_struct_IncentiveData(value, pos) -> end\n    {\n        let _1 := 0x60\n        let tail := add(pos, _1)\n        let _2 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(pos, and(mload(value), _2))\n        let _3 := 0x20\n        mstore(add(pos, _3), and(mload(add(value, _3)), _2))\n        let _4 := 0x40\n        let memberValue0 := mload(add(value, _4))\n        mstore(add(pos, _4), _1)\n        let pos_1 := tail\n        let length := mload(memberValue0)\n        mstore(tail, length)\n        let _5 := 128\n        pos_1 := add(pos, _5)\n        let tail_1 := add(add(pos, shl(5, length)), _5)\n        let srcPtr := add(memberValue0, _3)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos_1, add(sub(tail_1, pos), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80))\n            let _6 := mload(srcPtr)\n            let _7 := 0x0160\n            let memberValue0_1 := mload(_6)\n            mstore(tail_1, _7)\n            let tail_2 := abi_encode_string(memberValue0_1, add(tail_1, _7))\n            let memberValue0_2 := mload(add(_6, _3))\n            abi_encode_address(memberValue0_2, add(tail_1, _3))\n            let memberValue0_3 := mload(add(_6, _4))\n            abi_encode_address(memberValue0_3, add(tail_1, _4))\n            mstore(add(tail_1, _1), mload(add(_6, _1)))\n            mstore(add(tail_1, _5), mload(add(_6, _5)))\n            let _8 := 0xa0\n            mstore(add(tail_1, _8), mload(add(_6, _8)))\n            let _9 := 0xc0\n            mstore(add(tail_1, _9), mload(add(_6, _9)))\n            let _10 := 0xe0\n            mstore(add(tail_1, _10), mload(add(_6, _10)))\n            let _11 := 0x0100\n            let memberValue0_4 := mload(add(_6, _11))\n            abi_encode_uint8(memberValue0_4, add(tail_1, _11))\n            let _12 := 0x0120\n            let memberValue0_5 := mload(add(_6, _12))\n            abi_encode_uint8(memberValue0_5, add(tail_1, _12))\n            let _13 := 0x0140\n            let memberValue0_6 := mload(add(_6, _13))\n            abi_encode_uint8(memberValue0_6, add(tail_1, _13))\n            tail_1 := tail_2\n            srcPtr := add(srcPtr, _3)\n            pos_1 := add(pos_1, _3)\n        }\n        end := tail_1\n    }\n    function abi_encode_array_struct_AggregatedReserveIncentiveData_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        let updated_pos := add(pos, _1)\n        let pos_1 := updated_pos\n        pos := updated_pos\n        let tail := add(pos_1, shl(5, length))\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, sub(tail, pos_1))\n            let _2 := mload(srcPtr)\n            let _3 := 0x80\n            mstore(tail, and(mload(_2), 0xffffffffffffffffffffffffffffffffffffffff))\n            let memberValue0 := mload(add(_2, _1))\n            mstore(add(tail, _1), _3)\n            let tail_1 := abi_encode_struct_IncentiveData(memberValue0, add(tail, _3))\n            let _4 := 0x40\n            let memberValue0_1 := mload(add(_2, _4))\n            mstore(add(tail, _4), sub(tail_1, tail))\n            let tail_2 := abi_encode_struct_IncentiveData(memberValue0_1, tail_1)\n            let _5 := 0x60\n            let memberValue0_2 := mload(add(_2, _5))\n            mstore(add(tail, _5), sub(tail_2, tail))\n            tail := abi_encode_struct_IncentiveData(memberValue0_2, tail_2)\n            srcPtr := add(srcPtr, _1)\n            pos := add(pos, _1)\n        }\n        end := tail\n    }\n    function abi_encode_struct_UserIncentiveData(value, pos) -> end\n    {\n        let _1 := 0x60\n        let tail := add(pos, _1)\n        let _2 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(pos, and(mload(value), _2))\n        let _3 := 0x20\n        mstore(add(pos, _3), and(mload(add(value, _3)), _2))\n        let _4 := 0x40\n        let memberValue0 := mload(add(value, _4))\n        mstore(add(pos, _4), _1)\n        let pos_1 := tail\n        let length := mload(memberValue0)\n        mstore(tail, length)\n        let _5 := 128\n        pos_1 := add(pos, _5)\n        let tail_1 := add(add(pos, shl(5, length)), _5)\n        let srcPtr := add(memberValue0, _3)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos_1, add(sub(tail_1, pos), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80))\n            let _6 := mload(srcPtr)\n            let _7 := 0x0100\n            let memberValue0_1 := mload(_6)\n            mstore(tail_1, _7)\n            let tail_2 := abi_encode_string(memberValue0_1, add(tail_1, _7))\n            mstore(add(tail_1, _3), and(mload(add(_6, _3)), _2))\n            mstore(add(tail_1, _4), and(mload(add(_6, _4)), _2))\n            mstore(add(tail_1, _1), mload(add(_6, _1)))\n            mstore(add(tail_1, _5), mload(add(_6, _5)))\n            let _8 := 0xa0\n            mstore(add(tail_1, _8), mload(add(_6, _8)))\n            let _9 := 0xc0\n            let memberValue0_2 := mload(add(_6, _9))\n            abi_encode_uint8(memberValue0_2, add(tail_1, _9))\n            let _10 := 0xe0\n            let memberValue0_3 := mload(add(_6, _10))\n            abi_encode_uint8(memberValue0_3, add(tail_1, _10))\n            tail_1 := tail_2\n            srcPtr := add(srcPtr, _3)\n            pos_1 := add(pos_1, _3)\n        }\n        end := tail_1\n    }\n    function abi_encode_array_struct_UserReserveIncentiveData_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        let updated_pos := add(pos, _1)\n        let pos_1 := updated_pos\n        pos := updated_pos\n        let tail := add(pos_1, shl(5, length))\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, sub(tail, pos_1))\n            let _2 := mload(srcPtr)\n            let _3 := 0x80\n            mstore(tail, and(mload(_2), 0xffffffffffffffffffffffffffffffffffffffff))\n            let memberValue0 := mload(add(_2, _1))\n            mstore(add(tail, _1), _3)\n            let tail_1 := abi_encode_struct_UserIncentiveData(memberValue0, add(tail, _3))\n            let _4 := 0x40\n            let memberValue0_1 := mload(add(_2, _4))\n            mstore(add(tail, _4), sub(tail_1, tail))\n            let tail_2 := abi_encode_struct_UserIncentiveData(memberValue0_1, tail_1)\n            let _5 := 0x60\n            let memberValue0_2 := mload(add(_2, _5))\n            mstore(add(tail, _5), sub(tail_2, tail))\n            tail := abi_encode_struct_UserIncentiveData(memberValue0_2, tail_2)\n            srcPtr := add(srcPtr, _1)\n            pos := add(pos, _1)\n        }\n        end := tail\n    }\n    function abi_encode_tuple_t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr_t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr_t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        let tail_1 := abi_encode_array_struct_AggregatedReserveIncentiveData_dyn(value0, add(headStart, 64))\n        mstore(add(headStart, 32), sub(tail_1, headStart))\n        tail := abi_encode_array_struct_UserReserveIncentiveData_dyn(value1, tail_1)\n    }\n    function abi_encode_tuple_t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_UserReserveIncentiveData_$34564_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_array_struct_UserReserveIncentiveData_dyn(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_AggregatedReserveIncentiveData_$34520_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_array_struct_AggregatedReserveIncentiveData_dyn(value0, add(headStart, 32))\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        validator_revert_contract_IPoolAddressesProvider(value)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_3049() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 480)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        let _1 := 32\n        if slt(sub(dataEnd, headStart), _1) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n        let _4 := mload(_3)\n        if gt(_4, _2) { panic_error_0x41() }\n        let _5 := shl(5, _4)\n        let dst := allocate_memory(add(_5, _1))\n        let dst_1 := dst\n        mstore(dst, _4)\n        dst := add(dst, _1)\n        let srcEnd := add(add(_3, _5), _1)\n        if gt(srcEnd, dataEnd) { revert(0, 0) }\n        let src := add(_3, _1)\n        for { } lt(src, srcEnd) { src := add(src, _1) }\n        {\n            let value := mload(src)\n            validator_revert_contract_IPoolAddressesProvider(value)\n            mstore(dst, value)\n            dst := add(dst, _1)\n        }\n        value0 := dst_1\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x20) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x20)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        value := memPtr\n        mstore(memPtr, mload(headStart))\n    }\n    function abi_decode_uint128_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint40_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint16_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 480) { revert(0, 0) }\n        let value := allocate_memory_3049()\n        mstore(value, abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, dataEnd))\n        mstore(add(value, 32), abi_decode_uint128_fromMemory(add(headStart, 32)))\n        mstore(add(value, 64), abi_decode_uint128_fromMemory(add(headStart, 64)))\n        mstore(add(value, 96), abi_decode_uint128_fromMemory(add(headStart, 96)))\n        mstore(add(value, 128), abi_decode_uint128_fromMemory(add(headStart, 128)))\n        mstore(add(value, 160), abi_decode_uint128_fromMemory(add(headStart, 160)))\n        mstore(add(value, 192), abi_decode_uint40_fromMemory(add(headStart, 192)))\n        mstore(add(value, 224), abi_decode_uint16_fromMemory(add(headStart, 224)))\n        let _1 := 256\n        mstore(add(value, _1), abi_decode_address_fromMemory(add(headStart, _1)))\n        let _2 := 288\n        mstore(add(value, _2), abi_decode_address_fromMemory(add(headStart, _2)))\n        let _3 := 320\n        mstore(add(value, _3), abi_decode_address_fromMemory(add(headStart, _3)))\n        let _4 := 352\n        mstore(add(value, _4), abi_decode_address_fromMemory(add(headStart, _4)))\n        let _5 := 384\n        mstore(add(value, _5), abi_decode_uint128_fromMemory(add(headStart, _5)))\n        let _6 := 416\n        mstore(add(value, _6), abi_decode_uint128_fromMemory(add(headStart, _6)))\n        let _7 := 448\n        mstore(add(value, _7), abi_decode_uint128_fromMemory(add(headStart, _7)))\n        value0 := value\n    }\n    function abi_decode_tuple_t_contract$_IAaveIncentivesController_$3875_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        value3 := mload(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_uint8_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_decode_tuple_t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let _3 := mload(_2)\n        if gt(_3, _1) { panic_error_0x41() }\n        let array := allocate_memory(add(and(add(_3, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), 32))\n        mstore(array, _3)\n        if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory(add(_2, 32), add(array, 32), _3)\n        value0 := array\n    }\n    function abi_decode_tuple_t_int256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100415760003560e01c80634763753614610046578063799bdcf514610070578063976fafc514610090575b600080fd5b61005961005436600461334b565b6100b0565b6040516100679291906137b7565b60405180910390f35b61008361007e36600461334b565b6100d1565b60405161006791906137e5565b6100a361009e3660046137f8565b6100e4565b6040516100679190613815565b6060806100bc846100f5565b6100c68585611a1e565b915091509250929050565b60606100dd8383611a1e565b9392505050565b60606100ef826100f5565b92915050565b606060008273ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610144573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101689190613838565b905060008173ffffffffffffffffffffffffffffffffffffffff1663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101b7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101df91908101906138df565b90506000815167ffffffffffffffff8111156101fd576101fd613855565b60405190808252806020026020018201604052801561023657816020015b61022361326f565b81526020019060019003908161021b5790505b50905060005b8251811015611a1557600082828151811061025957610259613991565b6020026020010151905083828151811061027557610275613991565b6020026020010151816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060008573ffffffffffffffffffffffffffffffffffffffff166335ea6a758685815181106102e4576102e4613991565b60200260200101516040518263ffffffff1660e01b8152600401610324919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6101e060405180830381865afa158015610342573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103669190613a49565b9050600081610100015173ffffffffffffffffffffffffffffffffffffffff166375d264136040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103de9190613838565b9050606073ffffffffffffffffffffffffffffffffffffffff821615610a9a576101008301516040517f6657732f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091841690636657732f90602401600060405180830381865afa158015610473573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261049b91908101906138df565b9050805167ffffffffffffffff8111156104b7576104b7613855565b60405190808252806020026020018201604052801561057a57816020015b61056760405180610160016040528060608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff168152602001600060ff168152602001600060ff1681525090565b8152602001906001900390816104d55790505b50915060005b8151811015610a975761061b60405180610160016040528060608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff168152602001600060ff168152602001600060ff1681525090565b82828151811061062d5761062d613991565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff9081169183018290526101008801516040517f7eff4ba800000000000000000000000000000000000000000000000000000000815290821660048201526024810192909252861690637eff4ba890604401608060405180830381865afa1580156106bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e09190613b6c565b60c08501526080840152606083015260a08201526101008601516040517f9efd6f7200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015290861690639efd6f7290602401602060405180830381865afa158015610767573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078b9190613ba2565b60ff16610120820152602080820151604080517f313ce567000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169263313ce567926004808401938290030181865afa158015610801573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108259190613ba2565b81610100019060ff16908160ff1681525050806020015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610886573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108ae9190810190613bc5565b815260208101516040517f2a17bf6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015290861690632a17bf6090602401602060405180830381865afa158015610922573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109469190613838565b73ffffffffffffffffffffffffffffffffffffffff16604080830182905280517f313ce567000000000000000000000000000000000000000000000000000000008152905163313ce567916004808201926020929091908290030181865afa1580156109b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109da9190613ba2565b81610140019060ff16908160ff1681525050806040015173ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5f9190613c50565b60e082015283518190859084908110610a7a57610a7a613991565b60200260200101819052505080610a9090613c69565b9050610580565b50505b604051806060016040528084610100015173ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152508460200181905250600083610140015173ffffffffffffffffffffffffffffffffffffffff166375d264136040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b649190613838565b9050606073ffffffffffffffffffffffffffffffffffffffff821615611220576101408501516040517f6657732f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091841690636657732f90602401600060405180830381865afa158015610bf9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c2191908101906138df565b9050805167ffffffffffffffff811115610c3d57610c3d613855565b604051908082528060200260200182016040528015610d0057816020015b610ced60405180610160016040528060608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff168152602001600060ff168152602001600060ff1681525090565b815260200190600190039081610c5b5790505b50915060005b815181101561121d57610da160405180610160016040528060608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff168152602001600060ff168152602001600060ff1681525090565b828281518110610db357610db3613991565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff9081169183018290526101408a01516040517f7eff4ba800000000000000000000000000000000000000000000000000000000815290821660048201526024810192909252861690637eff4ba890604401608060405180830381865afa158015610e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e669190613b6c565b60c08501526080840152606083015260a08201526101408801516040517f9efd6f7200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015290861690639efd6f7290602401602060405180830381865afa158015610eed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f119190613ba2565b60ff16610120820152602080820151604080517f313ce567000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169263313ce567926004808401938290030181865afa158015610f87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fab9190613ba2565b81610100019060ff16908160ff1681525050806020015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561100c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110349190810190613bc5565b815260208101516040517f2a17bf6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015290861690632a17bf6090602401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc9190613838565b73ffffffffffffffffffffffffffffffffffffffff16604080830182905280517f313ce567000000000000000000000000000000000000000000000000000000008152905163313ce567916004808201926020929091908290030181865afa15801561113c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111609190613ba2565b81610140019060ff16908160ff1681525050806040015173ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e59190613c50565b60e08201528351819085908490811061120057611200613991565b6020026020010181905250508061121690613c69565b9050610d06565b50505b604051806060016040528086610140015173ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152508660400181905250600085610120015173ffffffffffffffffffffffffffffffffffffffff166375d264136040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ea9190613838565b9050606073ffffffffffffffffffffffffffffffffffffffff8216156119a6576101208701516040517f6657732f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091841690636657732f90602401600060405180830381865afa15801561137f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113a791908101906138df565b9050805167ffffffffffffffff8111156113c3576113c3613855565b60405190808252806020026020018201604052801561148657816020015b61147360405180610160016040528060608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff168152602001600060ff168152602001600060ff1681525090565b8152602001906001900390816113e15790505b50915060005b81518110156119a35761152760405180610160016040528060608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff168152602001600060ff168152602001600060ff1681525090565b82828151811061153957611539613991565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff9081169183018290526101208c01516040517f7eff4ba800000000000000000000000000000000000000000000000000000000815290821660048201526024810192909252861690637eff4ba890604401608060405180830381865afa1580156115c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ec9190613b6c565b60c08501526080840152606083015260a08201526101208a01516040517f9efd6f7200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015290861690639efd6f7290602401602060405180830381865afa158015611673573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116979190613ba2565b60ff16610120820152602080820151604080517f313ce567000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169263313ce567926004808401938290030181865afa15801561170d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117319190613ba2565b81610100019060ff16908160ff1681525050806020015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611792573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117ba9190810190613bc5565b815260208101516040517f2a17bf6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015290861690632a17bf6090602401602060405180830381865afa15801561182e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118529190613838565b73ffffffffffffffffffffffffffffffffffffffff16604080830182905280517f313ce567000000000000000000000000000000000000000000000000000000008152905163313ce567916004808201926020929091908290030181865afa1580156118c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e69190613ba2565b81610140019060ff16908160ff1681525050806040015173ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611947573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196b9190613c50565b60e08201528351819085908490811061198657611986613991565b6020026020010181905250508061199c90613c69565b905061148c565b50505b604051806060016040528088610120015173ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815250886060018190525050505050505050508080611a0d90613c69565b91505061023c565b50949350505050565b606060008373ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a919190613838565b905060008173ffffffffffffffffffffffffffffffffffffffff1663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611ae0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b0891908101906138df565b9050600073ffffffffffffffffffffffffffffffffffffffff8516611b2e576000611b31565b81515b67ffffffffffffffff811115611b4957611b49613855565b604051908082528060200260200182016040528015611b8257816020015b611b6f61326f565b815260200190600190039081611b675790505b50905060005b82518110156132655760008473ffffffffffffffffffffffffffffffffffffffff166335ea6a75858481518110611bc157611bc1613991565b60200260200101516040518263ffffffff1660e01b8152600401611c01919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6101e060405180830381865afa158015611c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c439190613a49565b9050838281518110611c5757611c57613991565b6020026020010151838381518110611c7157611c71613991565b60200260200101516000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600081610100015173ffffffffffffffffffffffffffffffffffffffff166375d264136040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d259190613838565b905073ffffffffffffffffffffffffffffffffffffffff8116156123be576101008201516040517f6657732f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091831690636657732f90602401600060405180830381865afa158015611db8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611de091908101906138df565b90506000815167ffffffffffffffff811115611dfe57611dfe613855565b604051908082528060200260200182016040528015611e8c57816020015b60408051610100810182526060808252600060208084018290529383018190529082018190526080820181905260a0820181905260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181611e1c5790505b50905060005b825181101561234d576040805161010081018252606080825260006020830181905292820183905281018290526080810182905260a0810182905260c0810182905260e0810191909152838281518110611eee57611eee613991565b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff908116604080840182905261010089015190517f533f542a0000000000000000000000000000000000000000000000000000000081528f84166004820152908316602482015260448101919091529086169063533f542a90606401602060405180830381865afa158015611f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611faa9190613c50565b608082015260408082015190517fb022418c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e8116600483015291821660248201529086169063b022418c90604401602060405180830381865afa158015612029573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204d9190613c50565b816060018181525050806040015173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c99190613ba2565b8160e0019060ff16908160ff1681525050806040015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612129573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121519190810190613bc5565b815260408082015190517f2a17bf6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015290861690632a17bf6090602401602060405180830381865afa1580156121c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e99190613838565b73ffffffffffffffffffffffffffffffffffffffff166020808301829052604080517f313ce567000000000000000000000000000000000000000000000000000000008152905163313ce567926004808401939192918290030181865afa158015612258573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227c9190613ba2565b60ff1660c0820152602080820151604080517f50d25bcd000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216926350d25bcd926004808401938290030181865afa1580156122f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123159190613c50565b60a08201528251819084908490811061233057612330613991565b6020026020010181905250508061234690613c69565b9050611e92565b50604051806060016040528085610100015173ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff168152602001828152508686815181106123ac576123ac613991565b60200260200101516020018190525050505b600082610140015173ffffffffffffffffffffffffffffffffffffffff166375d264136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612410573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124349190613838565b905073ffffffffffffffffffffffffffffffffffffffff811615612b02576101408301516040517f6657732f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091831690636657732f90602401600060405180830381865afa1580156124c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124ef91908101906138df565b90506000815167ffffffffffffffff81111561250d5761250d613855565b60405190808252806020026020018201604052801561259b57816020015b60408051610100810182526060808252600060208084018290529383018190529082018190526080820181905260a0820181905260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191018161252b5790505b50905060005b8251811015612a91576040805161010081018252606080825260006020830181905292820183905281018290526080810182905260a0810182905260c0810182905260e08101919091528382815181106125fd576125fd613991565b6020026020010151816040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663533f542a8e89610140015184604001516040518463ffffffff1660e01b81526004016126ad9392919073ffffffffffffffffffffffffffffffffffffffff93841681529183166020830152909116604082015260600190565b602060405180830381865afa1580156126ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ee9190613c50565b608082015260408082015190517fb022418c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8f8116600483015291821660248201529086169063b022418c90604401602060405180830381865afa15801561276d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127919190613c50565b816060018181525050806040015173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280d9190613ba2565b8160e0019060ff16908160ff1681525050806040015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561286d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128959190810190613bc5565b815260408082015190517f2a17bf6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015290861690632a17bf6090602401602060405180830381865afa158015612909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292d9190613838565b73ffffffffffffffffffffffffffffffffffffffff166020808301829052604080517f313ce567000000000000000000000000000000000000000000000000000000008152905163313ce567926004808401939192918290030181865afa15801561299c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c09190613ba2565b60ff1660c0820152602080820151604080517f50d25bcd000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216926350d25bcd926004808401938290030181865afa158015612a35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a599190613c50565b60a082015282518190849084908110612a7457612a74613991565b60200260200101819052505080612a8a90613c69565b90506125a1565b50604051806060016040528086610140015173ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200182815250878781518110612af057612af0613991565b60200260200101516040018190525050505b600083610120015173ffffffffffffffffffffffffffffffffffffffff166375d264136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b789190613838565b905073ffffffffffffffffffffffffffffffffffffffff81161561324e576101208401516040517f6657732f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600091831690636657732f90602401600060405180830381865afa158015612c0b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612c3391908101906138df565b90506000815167ffffffffffffffff811115612c5157612c51613855565b604051908082528060200260200182016040528015612cdf57816020015b60408051610100810182526060808252600060208084018290529383018190529082018190526080820181905260a0820181905260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181612c6f5790505b50905060005b82518110156131dd576040805161010081018252606080825260006020830181905292820183905281018290526080810182905260a0810182905260c0810182905260e0810191909152838281518110612d4157612d41613991565b6020026020010151816040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663533f542a8f8a610120015184604001516040518463ffffffff1660e01b8152600401612df19392919073ffffffffffffffffffffffffffffffffffffffff93841681529183166020830152909116604082015260600190565b602060405180830381865afa158015612e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e329190613c50565b8160800181815250508473ffffffffffffffffffffffffffffffffffffffff1663b022418c8f83604001516040518363ffffffff1660e01b8152600401612e9c92919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b602060405180830381865afa158015612eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edd9190613c50565b816060018181525050806040015173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f599190613ba2565b8160e0019060ff16908160ff1681525050806040015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015612fb9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612fe19190810190613bc5565b815260408082015190517f2a17bf6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015290861690632a17bf6090602401602060405180830381865afa158015613055573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130799190613838565b73ffffffffffffffffffffffffffffffffffffffff166020808301829052604080517f313ce567000000000000000000000000000000000000000000000000000000008152905163313ce567926004808401939192918290030181865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c9190613ba2565b60ff1660c0820152602080820151604080517f50d25bcd000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216926350d25bcd926004808401938290030181865afa158015613181573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a59190613c50565b60a0820152825181908490849081106131c0576131c0613991565b602002602001018190525050806131d690613c69565b9050612ce5565b50604051806060016040528087610120015173ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018281525088888151811061323c5761323c613991565b60200260200101516060018190525050505b50505050808061325d90613c69565b915050611b88565b5095945050505050565b6040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016132e76040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b81526040805160608082018352600080835260208084018290528385018390528086019390935283518083018552818152928301528183015291015290565b73ffffffffffffffffffffffffffffffffffffffff8116811461334857600080fd5b50565b6000806040838503121561335e57600080fd5b823561336981613326565b9150602083013561337981613326565b809150509250929050565b60005b8381101561339f578181015183820152602001613387565b838111156133ae576000848401525b50505050565b600081518084526133cc816020860160208601613384565b601f01601f19169290920160200192915050565b6000606080840173ffffffffffffffffffffffffffffffffffffffff8085511686526020818187015116818801526040915081860151848389015283815180865260809550858a019150858160051b8b0101848401935060005b82811015613531577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808c83030184528451610160815181855261347f828601826133b4565b915050878201516134a78986018273ffffffffffffffffffffffffffffffffffffffff169052565b508882015173ffffffffffffffffffffffffffffffffffffffff16848a01528a8201518b850152898201518a85015260a0808301519085015260c0808301519085015260e080830151908501526101008083015160ff908116918601919091526101208084015182169086015261014092830151169190930152938501939285019260010161343a565b509a9950505050505050505050565b600081518084526020808501808196508360051b8101915082860160005b858110156135ea5782840389528151608073ffffffffffffffffffffffffffffffffffffffff825116865286820151818888015261359e828801826133e0565b915050604080830151878303828901526135b883826133e0565b92505050606080830151925086820381880152506135d681836133e0565b9a87019a955050509084019060010161355e565b5091979650505050505050565b6000606080840173ffffffffffffffffffffffffffffffffffffffff80855116865260208181870151168188015260408087015185828a015284815180875260809650868b019150868160051b8c0101858401935060005b828110156136fd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808d830301845284516101008151818552613694828601826133b4565b91505089898301511689850152898883015116888501528b8201518c8501528a8201518b85015260a080830151818601525060c0808301516136da8287018260ff169052565b505060e09182015160ff169390910192909252938601939286019260010161364f565b509b9a5050505050505050505050565b600081518084526020808501808196508360051b8101915082860160005b858110156135ea5782840389528151608073ffffffffffffffffffffffffffffffffffffffff825116865286820151818888015261376b828801826135f7565b9150506040808301518783038289015261378583826135f7565b92505050606080830151925086820381880152506137a381836135f7565b9a87019a955050509084019060010161372b565b6040815260006137ca6040830185613540565b82810360208401526137dc818561370d565b95945050505050565b6020815260006100dd602083018461370d565b60006020828403121561380a57600080fd5b81356100dd81613326565b6020815260006100dd6020830184613540565b805161383381613326565b919050565b60006020828403121561384a57600080fd5b81516100dd81613326565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff811182821017156138a8576138a8613855565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156138d7576138d7613855565b604052919050565b600060208083850312156138f257600080fd5b825167ffffffffffffffff8082111561390a57600080fd5b818501915085601f83011261391e57600080fd5b81518181111561393057613930613855565b8060051b91506139418483016138ae565b818152918301840191848101908884111561395b57600080fd5b938501935b83851015613985578451925061397583613326565b8282529385019390850190613960565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156139d257600080fd5b6040516020810181811067ffffffffffffffff821117156139f5576139f5613855565b6040529151825250919050565b80516fffffffffffffffffffffffffffffffff8116811461383357600080fd5b805164ffffffffff8116811461383357600080fd5b805161ffff8116811461383357600080fd5b60006101e08284031215613a5c57600080fd5b613a64613884565b613a6e84846139c0565b8152613a7c60208401613a02565b6020820152613a8d60408401613a02565b6040820152613a9e60608401613a02565b6060820152613aaf60808401613a02565b6080820152613ac060a08401613a02565b60a0820152613ad160c08401613a22565b60c0820152613ae260e08401613a37565b60e0820152610100613af5818501613828565b90820152610120613b07848201613828565b90820152610140613b19848201613828565b90820152610160613b2b848201613828565b90820152610180613b3d848201613a02565b908201526101a0613b4f848201613a02565b908201526101c0613b61848201613a02565b908201529392505050565b60008060008060808587031215613b8257600080fd5b505082516020840151604085015160609095015191969095509092509050565b600060208284031215613bb457600080fd5b815160ff811681146100dd57600080fd5b600060208284031215613bd757600080fd5b815167ffffffffffffffff80821115613bef57600080fd5b818401915084601f830112613c0357600080fd5b815181811115613c1557613c15613855565b613c286020601f19601f840116016138ae565b9150808252856020828501011115613c3f57600080fd5b611a15816020840160208601613384565b600060208284031215613c6257600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613cc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea2646970667358221220a00523f5abc47861f86aa555881b92b921d831c25c6946def5607da67bd85ca164736f6c634300080a0033","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 0x47637536 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0x799BDCF5 EQ PUSH2 0x70 JUMPI DUP1 PUSH4 0x976FAFC5 EQ PUSH2 0x90 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0x54 CALLDATASIZE PUSH1 0x4 PUSH2 0x334B JUMP JUMPDEST PUSH2 0xB0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x67 SWAP3 SWAP2 SWAP1 PUSH2 0x37B7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x83 PUSH2 0x7E CALLDATASIZE PUSH1 0x4 PUSH2 0x334B JUMP JUMPDEST PUSH2 0xD1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x67 SWAP2 SWAP1 PUSH2 0x37E5 JUMP JUMPDEST PUSH2 0xA3 PUSH2 0x9E CALLDATASIZE PUSH1 0x4 PUSH2 0x37F8 JUMP JUMPDEST PUSH2 0xE4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x67 SWAP2 SWAP1 PUSH2 0x3815 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH2 0xBC DUP5 PUSH2 0xF5 JUMP JUMPDEST PUSH2 0xC6 DUP6 DUP6 PUSH2 0x1A1E JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xDD DUP4 DUP4 PUSH2 0x1A1E JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0xEF DUP3 PUSH2 0xF5 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x144 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x168 SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD1946DBC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1DF SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x38DF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1FD JUMPI PUSH2 0x1FD PUSH2 0x3855 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x236 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x223 PUSH2 0x326F JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x21B JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x1A15 JUMPI PUSH1 0x0 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x259 JUMPI PUSH2 0x259 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x275 JUMPI PUSH2 0x275 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 PUSH1 0x0 ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x35EA6A75 DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x2E4 JUMPI PUSH2 0x2E4 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x324 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x342 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x366 SWAP2 SWAP1 PUSH2 0x3A49 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x75D26413 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3BA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3DE SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ISZERO PUSH2 0xA9A JUMPI PUSH2 0x100 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6657732F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 DUP5 AND SWAP1 PUSH4 0x6657732F SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x473 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x49B SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x38DF JUMP JUMPDEST SWAP1 POP DUP1 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4B7 JUMPI PUSH2 0x4B7 PUSH2 0x3855 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x57A JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x567 PUSH1 0x40 MLOAD DUP1 PUSH2 0x160 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD 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 PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x4D5 JUMPI SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xA97 JUMPI PUSH2 0x61B PUSH1 0x40 MLOAD DUP1 PUSH2 0x160 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD 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 PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x62D JUMPI PUSH2 0x62D PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP9 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x7EFF4BA800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP7 AND SWAP1 PUSH4 0x7EFF4BA8 SWAP1 PUSH1 0x44 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6E0 SWAP2 SWAP1 PUSH2 0x3B6C JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x100 DUP7 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x9EFD6F7200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0x9EFD6F72 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x767 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x78B SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x313CE56700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 PUSH4 0x313CE567 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x801 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x825 SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST DUP2 PUSH2 0x100 ADD SWAP1 PUSH1 0xFF AND SWAP1 DUP2 PUSH1 0xFF AND DUP2 MSTORE POP POP DUP1 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x886 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x8AE SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x3BC5 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x2A17BF6000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0x2A17BF60 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x922 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x946 SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE DUP1 MLOAD PUSH32 0x313CE56700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9DA SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST DUP2 PUSH2 0x140 ADD SWAP1 PUSH1 0xFF AND SWAP1 DUP2 PUSH1 0xFF AND DUP2 MSTORE POP POP DUP1 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x50D25BCD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA3B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA5F SWAP2 SWAP1 PUSH2 0x3C50 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE DUP4 MLOAD DUP2 SWAP1 DUP6 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0xA7A JUMPI PUSH2 0xA7A PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP POP DUP1 PUSH2 0xA90 SWAP1 PUSH2 0x3C69 JUMP JUMPDEST SWAP1 POP PUSH2 0x580 JUMP JUMPDEST POP POP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP5 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE POP DUP5 PUSH1 0x20 ADD DUP2 SWAP1 MSTORE POP PUSH1 0x0 DUP4 PUSH2 0x140 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x75D26413 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB40 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB64 SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ISZERO PUSH2 0x1220 JUMPI PUSH2 0x140 DUP6 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6657732F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 DUP5 AND SWAP1 PUSH4 0x6657732F SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBF9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xC21 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x38DF JUMP JUMPDEST SWAP1 POP DUP1 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC3D JUMPI PUSH2 0xC3D PUSH2 0x3855 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xD00 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0xCED PUSH1 0x40 MLOAD DUP1 PUSH2 0x160 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD 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 PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0xC5B JUMPI SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x121D JUMPI PUSH2 0xDA1 PUSH1 0x40 MLOAD DUP1 PUSH2 0x160 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD 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 PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xDB3 JUMPI PUSH2 0xDB3 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP11 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x7EFF4BA800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP7 AND SWAP1 PUSH4 0x7EFF4BA8 SWAP1 PUSH1 0x44 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE42 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xE66 SWAP2 SWAP1 PUSH2 0x3B6C JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x140 DUP9 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x9EFD6F7200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0x9EFD6F72 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xEED JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF11 SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x313CE56700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 PUSH4 0x313CE567 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF87 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xFAB SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST DUP2 PUSH2 0x100 ADD SWAP1 PUSH1 0xFF AND SWAP1 DUP2 PUSH1 0xFF AND DUP2 MSTORE POP POP DUP1 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x100C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1034 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x3BC5 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x2A17BF6000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0x2A17BF60 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10A8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10CC SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE DUP1 MLOAD PUSH32 0x313CE56700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x113C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1160 SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST DUP2 PUSH2 0x140 ADD SWAP1 PUSH1 0xFF AND SWAP1 DUP2 PUSH1 0xFF AND DUP2 MSTORE POP POP DUP1 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x50D25BCD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11E5 SWAP2 SWAP1 PUSH2 0x3C50 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE DUP4 MLOAD DUP2 SWAP1 DUP6 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x1200 JUMPI PUSH2 0x1200 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP POP DUP1 PUSH2 0x1216 SWAP1 PUSH2 0x3C69 JUMP JUMPDEST SWAP1 POP PUSH2 0xD06 JUMP JUMPDEST POP POP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP7 PUSH2 0x140 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE POP DUP7 PUSH1 0x40 ADD DUP2 SWAP1 MSTORE POP PUSH1 0x0 DUP6 PUSH2 0x120 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x75D26413 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12EA SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ISZERO PUSH2 0x19A6 JUMPI PUSH2 0x120 DUP8 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6657732F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 DUP5 AND SWAP1 PUSH4 0x6657732F SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x137F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x13A7 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x38DF JUMP JUMPDEST SWAP1 POP DUP1 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x13C3 JUMPI PUSH2 0x13C3 PUSH2 0x3855 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1486 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x1473 PUSH1 0x40 MLOAD DUP1 PUSH2 0x160 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD 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 PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x13E1 JUMPI SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x19A3 JUMPI PUSH2 0x1527 PUSH1 0x40 MLOAD DUP1 PUSH2 0x160 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD 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 PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1539 JUMPI PUSH2 0x1539 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP13 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x7EFF4BA800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP7 AND SWAP1 PUSH4 0x7EFF4BA8 SWAP1 PUSH1 0x44 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15C8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15EC SWAP2 SWAP1 PUSH2 0x3B6C JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x120 DUP11 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x9EFD6F7200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0x9EFD6F72 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1673 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1697 SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST PUSH1 0xFF AND PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x313CE56700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 PUSH4 0x313CE567 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x170D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1731 SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST DUP2 PUSH2 0x100 ADD SWAP1 PUSH1 0xFF AND SWAP1 DUP2 PUSH1 0xFF AND DUP2 MSTORE POP POP DUP1 PUSH1 0x20 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1792 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x17BA SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x3BC5 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x2A17BF6000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0x2A17BF60 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x182E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1852 SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE DUP1 MLOAD PUSH32 0x313CE56700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0x313CE567 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18C2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18E6 SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST DUP2 PUSH2 0x140 ADD SWAP1 PUSH1 0xFF AND SWAP1 DUP2 PUSH1 0xFF AND DUP2 MSTORE POP POP DUP1 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x50D25BCD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1947 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x196B SWAP2 SWAP1 PUSH2 0x3C50 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE DUP4 MLOAD DUP2 SWAP1 DUP6 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x1986 JUMPI PUSH2 0x1986 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP POP DUP1 PUSH2 0x199C SWAP1 PUSH2 0x3C69 JUMP JUMPDEST SWAP1 POP PUSH2 0x148C JUMP JUMPDEST POP POP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH2 0x120 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE POP DUP9 PUSH1 0x60 ADD DUP2 SWAP1 MSTORE POP POP POP POP POP POP POP POP POP DUP1 DUP1 PUSH2 0x1A0D SWAP1 PUSH2 0x3C69 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x23C JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1A6D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1A91 SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD1946DBC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AE0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1B08 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x38DF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH2 0x1B2E JUMPI PUSH1 0x0 PUSH2 0x1B31 JUMP JUMPDEST DUP2 MLOAD JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1B49 JUMPI PUSH2 0x1B49 PUSH2 0x3855 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1B82 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x1B6F PUSH2 0x326F JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x1B67 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x3265 JUMPI PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x35EA6A75 DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1BC1 JUMPI PUSH2 0x1BC1 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1C01 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C1F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C43 SWAP2 SWAP1 PUSH2 0x3A49 JUMP JUMPDEST SWAP1 POP DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1C57 JUMPI PUSH2 0x1C57 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1C71 JUMPI PUSH2 0x1C71 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x75D26413 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D01 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D25 SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x23BE JUMPI PUSH2 0x100 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6657732F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 DUP4 AND SWAP1 PUSH4 0x6657732F SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DB8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1DE0 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x38DF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1DFE JUMPI PUSH2 0x1DFE PUSH2 0x3855 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1E8C JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE PUSH1 0x60 DUP1 DUP3 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE SWAP4 DUP4 ADD DUP2 SWAP1 MSTORE SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP3 ADD MSTORE DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 ADD SWAP2 ADD DUP2 PUSH2 0x1E1C JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x234D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE PUSH1 0x60 DUP1 DUP3 MSTORE PUSH1 0x0 PUSH1 0x20 DUP4 ADD DUP2 SWAP1 MSTORE SWAP3 DUP3 ADD DUP4 SWAP1 MSTORE DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1EEE JUMPI PUSH2 0x1EEE PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x40 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP10 ADD MLOAD SWAP1 MLOAD PUSH32 0x533F542A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP16 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0x533F542A SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F86 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1FAA SWAP2 SWAP1 PUSH2 0x3C50 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP3 ADD MLOAD SWAP1 MLOAD PUSH32 0xB022418C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP15 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0xB022418C SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2029 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x204D SWAP2 SWAP1 PUSH2 0x3C50 JUMP JUMPDEST DUP2 PUSH1 0x60 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x20C9 SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST DUP2 PUSH1 0xE0 ADD SWAP1 PUSH1 0xFF AND SWAP1 DUP2 PUSH1 0xFF AND DUP2 MSTORE POP POP DUP1 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2129 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2151 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x3BC5 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x40 DUP1 DUP3 ADD MLOAD SWAP1 MLOAD PUSH32 0x2A17BF6000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0x2A17BF60 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x21C5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x21E9 SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0x313CE56700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0x313CE567 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2258 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x227C SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST PUSH1 0xFF AND PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x50D25BCD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 PUSH4 0x50D25BCD SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22F1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2315 SWAP2 SWAP1 PUSH2 0x3C50 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE DUP3 MLOAD DUP2 SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x2330 JUMPI PUSH2 0x2330 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP POP DUP1 PUSH2 0x2346 SWAP1 PUSH2 0x3C69 JUMP JUMPDEST SWAP1 POP PUSH2 0x1E92 JUMP JUMPDEST POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP6 PUSH2 0x100 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE POP DUP7 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x23AC JUMPI PUSH2 0x23AC PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD DUP2 SWAP1 MSTORE POP POP POP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x140 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x75D26413 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2410 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2434 SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x2B02 JUMPI PUSH2 0x140 DUP4 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6657732F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 DUP4 AND SWAP1 PUSH4 0x6657732F SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24C7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x24EF SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x38DF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x250D JUMPI PUSH2 0x250D PUSH2 0x3855 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x259B JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE PUSH1 0x60 DUP1 DUP3 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE SWAP4 DUP4 ADD DUP2 SWAP1 MSTORE SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP3 ADD MSTORE DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 ADD SWAP2 ADD DUP2 PUSH2 0x252B JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x2A91 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE PUSH1 0x60 DUP1 DUP3 MSTORE PUSH1 0x0 PUSH1 0x20 DUP4 ADD DUP2 SWAP1 MSTORE SWAP3 DUP3 ADD DUP4 SWAP1 MSTORE DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x25FD JUMPI PUSH2 0x25FD PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 PUSH1 0x40 ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x533F542A DUP15 DUP10 PUSH2 0x140 ADD MLOAD DUP5 PUSH1 0x40 ADD MLOAD PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x26AD SWAP4 SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 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 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x26EE SWAP2 SWAP1 PUSH2 0x3C50 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP3 ADD MLOAD SWAP1 MLOAD PUSH32 0xB022418C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP16 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0xB022418C SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x276D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2791 SWAP2 SWAP1 PUSH2 0x3C50 JUMP JUMPDEST DUP2 PUSH1 0x60 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x27E9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x280D SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST DUP2 PUSH1 0xE0 ADD SWAP1 PUSH1 0xFF AND SWAP1 DUP2 PUSH1 0xFF AND DUP2 MSTORE POP POP DUP1 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x286D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2895 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x3BC5 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x40 DUP1 DUP3 ADD MLOAD SWAP1 MLOAD PUSH32 0x2A17BF6000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0x2A17BF60 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2909 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x292D SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0x313CE56700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0x313CE567 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x299C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x29C0 SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST PUSH1 0xFF AND PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x50D25BCD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 PUSH4 0x50D25BCD SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A35 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2A59 SWAP2 SWAP1 PUSH2 0x3C50 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE DUP3 MLOAD DUP2 SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x2A74 JUMPI PUSH2 0x2A74 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP POP DUP1 PUSH2 0x2A8A SWAP1 PUSH2 0x3C69 JUMP JUMPDEST SWAP1 POP PUSH2 0x25A1 JUMP JUMPDEST POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP7 PUSH2 0x140 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE POP DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x2AF0 JUMPI PUSH2 0x2AF0 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD DUP2 SWAP1 MSTORE POP POP POP JUMPDEST PUSH1 0x0 DUP4 PUSH2 0x120 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x75D26413 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B54 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2B78 SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x324E JUMPI PUSH2 0x120 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6657732F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP2 DUP4 AND SWAP1 PUSH4 0x6657732F SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C0B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2C33 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x38DF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2C51 JUMPI PUSH2 0x2C51 PUSH2 0x3855 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2CDF JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE PUSH1 0x60 DUP1 DUP3 MSTORE PUSH1 0x0 PUSH1 0x20 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE SWAP4 DUP4 ADD DUP2 SWAP1 MSTORE SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xA0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0xE0 DUP3 ADD MSTORE DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 ADD SWAP2 ADD DUP2 PUSH2 0x2C6F JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x31DD JUMPI PUSH1 0x40 DUP1 MLOAD PUSH2 0x100 DUP2 ADD DUP3 MSTORE PUSH1 0x60 DUP1 DUP3 MSTORE PUSH1 0x0 PUSH1 0x20 DUP4 ADD DUP2 SWAP1 MSTORE SWAP3 DUP3 ADD DUP4 SWAP1 MSTORE DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2D41 JUMPI PUSH2 0x2D41 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP2 PUSH1 0x40 ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x533F542A DUP16 DUP11 PUSH2 0x120 ADD MLOAD DUP5 PUSH1 0x40 ADD MLOAD PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2DF1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 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 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2E0E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2E32 SWAP2 SWAP1 PUSH2 0x3C50 JUMP JUMPDEST DUP2 PUSH1 0x80 ADD DUP2 DUP2 MSTORE POP POP DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB022418C DUP16 DUP4 PUSH1 0x40 ADD MLOAD PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2E9C SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2EB9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2EDD SWAP2 SWAP1 PUSH2 0x3C50 JUMP JUMPDEST DUP2 PUSH1 0x60 ADD DUP2 DUP2 MSTORE POP POP DUP1 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2F35 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2F59 SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST DUP2 PUSH1 0xE0 ADD SWAP1 PUSH1 0xFF AND SWAP1 DUP2 PUSH1 0xFF AND DUP2 MSTORE POP POP DUP1 PUSH1 0x40 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2FB9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2FE1 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x3BC5 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x40 DUP1 DUP3 ADD MLOAD SWAP1 MLOAD PUSH32 0x2A17BF6000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP7 AND SWAP1 PUSH4 0x2A17BF60 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3055 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3079 SWAP2 SWAP1 PUSH2 0x3838 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0x313CE56700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH4 0x313CE567 SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 SWAP2 SWAP3 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x30E8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x310C SWAP2 SWAP1 PUSH2 0x3BA2 JUMP JUMPDEST PUSH1 0xFF AND PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x50D25BCD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 PUSH4 0x50D25BCD SWAP3 PUSH1 0x4 DUP1 DUP5 ADD SWAP4 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3181 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x31A5 SWAP2 SWAP1 PUSH2 0x3C50 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE DUP3 MLOAD DUP2 SWAP1 DUP5 SWAP1 DUP5 SWAP1 DUP2 LT PUSH2 0x31C0 JUMPI PUSH2 0x31C0 PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 SWAP1 MSTORE POP POP DUP1 PUSH2 0x31D6 SWAP1 PUSH2 0x3C69 JUMP JUMPDEST SWAP1 POP PUSH2 0x2CE5 JUMP JUMPDEST POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP8 PUSH2 0x120 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE POP DUP9 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x323C JUMPI PUSH2 0x323C PUSH2 0x3991 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x60 ADD DUP2 SWAP1 MSTORE POP POP POP JUMPDEST POP POP POP POP DUP1 DUP1 PUSH2 0x325D SWAP1 PUSH2 0x3C69 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1B88 JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x32E7 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 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 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP1 DUP3 ADD DUP4 MSTORE PUSH1 0x0 DUP1 DUP4 MSTORE PUSH1 0x20 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE DUP4 DUP6 ADD DUP4 SWAP1 MSTORE DUP1 DUP7 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP4 MLOAD DUP1 DUP4 ADD DUP6 MSTORE DUP2 DUP2 MSTORE SWAP3 DUP4 ADD MSTORE DUP2 DUP4 ADD MSTORE SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3348 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x335E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3369 DUP2 PUSH2 0x3326 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3379 DUP2 PUSH2 0x3326 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x339F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x3387 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x33AE JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x33CC DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x3384 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 DUP5 ADD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 MLOAD AND DUP7 MSTORE PUSH1 0x20 DUP2 DUP2 DUP8 ADD MLOAD AND DUP2 DUP9 ADD MSTORE PUSH1 0x40 SWAP2 POP DUP2 DUP7 ADD MLOAD DUP5 DUP4 DUP10 ADD MSTORE DUP4 DUP2 MLOAD DUP1 DUP7 MSTORE PUSH1 0x80 SWAP6 POP DUP6 DUP11 ADD SWAP2 POP DUP6 DUP2 PUSH1 0x5 SHL DUP12 ADD ADD DUP5 DUP5 ADD SWAP4 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x3531 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP13 DUP4 SUB ADD DUP5 MSTORE DUP5 MLOAD PUSH2 0x160 DUP2 MLOAD DUP2 DUP6 MSTORE PUSH2 0x347F DUP3 DUP7 ADD DUP3 PUSH2 0x33B4 JUMP JUMPDEST SWAP2 POP POP DUP8 DUP3 ADD MLOAD PUSH2 0x34A7 DUP10 DUP7 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST POP DUP9 DUP3 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP11 ADD MSTORE DUP11 DUP3 ADD MLOAD DUP12 DUP6 ADD MSTORE DUP10 DUP3 ADD MLOAD DUP11 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP4 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH1 0xC0 DUP1 DUP4 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH1 0xE0 DUP1 DUP4 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH2 0x100 DUP1 DUP4 ADD MLOAD PUSH1 0xFF SWAP1 DUP2 AND SWAP2 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x120 DUP1 DUP5 ADD MLOAD DUP3 AND SWAP1 DUP7 ADD MSTORE PUSH2 0x140 SWAP3 DUP4 ADD MLOAD AND SWAP2 SWAP1 SWAP4 ADD MSTORE SWAP4 DUP6 ADD SWAP4 SWAP3 DUP6 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x343A JUMP JUMPDEST POP SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD DUP1 DUP2 SWAP7 POP DUP4 PUSH1 0x5 SHL DUP2 ADD SWAP2 POP DUP3 DUP7 ADD PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x35EA JUMPI DUP3 DUP5 SUB DUP10 MSTORE DUP2 MLOAD PUSH1 0x80 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD AND DUP7 MSTORE DUP7 DUP3 ADD MLOAD DUP2 DUP9 DUP9 ADD MSTORE PUSH2 0x359E DUP3 DUP9 ADD DUP3 PUSH2 0x33E0 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x40 DUP1 DUP4 ADD MLOAD DUP8 DUP4 SUB DUP3 DUP10 ADD MSTORE PUSH2 0x35B8 DUP4 DUP3 PUSH2 0x33E0 JUMP JUMPDEST SWAP3 POP POP POP PUSH1 0x60 DUP1 DUP4 ADD MLOAD SWAP3 POP DUP7 DUP3 SUB DUP2 DUP9 ADD MSTORE POP PUSH2 0x35D6 DUP2 DUP4 PUSH2 0x33E0 JUMP JUMPDEST SWAP11 DUP8 ADD SWAP11 SWAP6 POP POP POP SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x355E JUMP JUMPDEST POP SWAP2 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 DUP5 ADD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 MLOAD AND DUP7 MSTORE PUSH1 0x20 DUP2 DUP2 DUP8 ADD MLOAD AND DUP2 DUP9 ADD MSTORE PUSH1 0x40 DUP1 DUP8 ADD MLOAD DUP6 DUP3 DUP11 ADD MSTORE DUP5 DUP2 MLOAD DUP1 DUP8 MSTORE PUSH1 0x80 SWAP7 POP DUP7 DUP12 ADD SWAP2 POP DUP7 DUP2 PUSH1 0x5 SHL DUP13 ADD ADD DUP6 DUP5 ADD SWAP4 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x36FD JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP14 DUP4 SUB ADD DUP5 MSTORE DUP5 MLOAD PUSH2 0x100 DUP2 MLOAD DUP2 DUP6 MSTORE PUSH2 0x3694 DUP3 DUP7 ADD DUP3 PUSH2 0x33B4 JUMP JUMPDEST SWAP2 POP POP DUP10 DUP10 DUP4 ADD MLOAD AND DUP10 DUP6 ADD MSTORE DUP10 DUP9 DUP4 ADD MLOAD AND DUP9 DUP6 ADD MSTORE DUP12 DUP3 ADD MLOAD DUP13 DUP6 ADD MSTORE DUP11 DUP3 ADD MLOAD DUP12 DUP6 ADD MSTORE PUSH1 0xA0 DUP1 DUP4 ADD MLOAD DUP2 DUP7 ADD MSTORE POP PUSH1 0xC0 DUP1 DUP4 ADD MLOAD PUSH2 0x36DA DUP3 DUP8 ADD DUP3 PUSH1 0xFF AND SWAP1 MSTORE JUMP JUMPDEST POP POP PUSH1 0xE0 SWAP2 DUP3 ADD MLOAD PUSH1 0xFF AND SWAP4 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP4 DUP7 ADD SWAP4 SWAP3 DUP7 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x364F JUMP JUMPDEST POP SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD DUP1 DUP2 SWAP7 POP DUP4 PUSH1 0x5 SHL DUP2 ADD SWAP2 POP DUP3 DUP7 ADD PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x35EA JUMPI DUP3 DUP5 SUB DUP10 MSTORE DUP2 MLOAD PUSH1 0x80 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD AND DUP7 MSTORE DUP7 DUP3 ADD MLOAD DUP2 DUP9 DUP9 ADD MSTORE PUSH2 0x376B DUP3 DUP9 ADD DUP3 PUSH2 0x35F7 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x40 DUP1 DUP4 ADD MLOAD DUP8 DUP4 SUB DUP3 DUP10 ADD MSTORE PUSH2 0x3785 DUP4 DUP3 PUSH2 0x35F7 JUMP JUMPDEST SWAP3 POP POP POP PUSH1 0x60 DUP1 DUP4 ADD MLOAD SWAP3 POP DUP7 DUP3 SUB DUP2 DUP9 ADD MSTORE POP PUSH2 0x37A3 DUP2 DUP4 PUSH2 0x35F7 JUMP JUMPDEST SWAP11 DUP8 ADD SWAP11 SWAP6 POP POP POP SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x372B JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x37CA PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x3540 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x37DC DUP2 DUP6 PUSH2 0x370D JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xDD PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x370D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x380A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xDD DUP2 PUSH2 0x3326 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xDD PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3540 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x3833 DUP2 PUSH2 0x3326 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x384A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xDD DUP2 PUSH2 0x3326 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x38A8 JUMPI PUSH2 0x38A8 PUSH2 0x3855 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x38D7 JUMPI PUSH2 0x38D7 PUSH2 0x3855 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x38F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x390A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x391E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x3930 JUMPI PUSH2 0x3930 PUSH2 0x3855 JUMP JUMPDEST DUP1 PUSH1 0x5 SHL SWAP2 POP PUSH2 0x3941 DUP5 DUP4 ADD PUSH2 0x38AE JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 DUP4 ADD DUP5 ADD SWAP2 DUP5 DUP2 ADD SWAP1 DUP9 DUP5 GT ISZERO PUSH2 0x395B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP4 DUP6 LT ISZERO PUSH2 0x3985 JUMPI DUP5 MLOAD SWAP3 POP PUSH2 0x3975 DUP4 PUSH2 0x3326 JUMP JUMPDEST DUP3 DUP3 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP1 DUP6 ADD SWAP1 PUSH2 0x3960 JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x39D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x39F5 JUMPI PUSH2 0x39F5 PUSH2 0x3855 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3833 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x3833 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x3833 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3A5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3A64 PUSH2 0x3884 JUMP JUMPDEST PUSH2 0x3A6E DUP5 DUP5 PUSH2 0x39C0 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x3A7C PUSH1 0x20 DUP5 ADD PUSH2 0x3A02 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x3A8D PUSH1 0x40 DUP5 ADD PUSH2 0x3A02 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x3A9E PUSH1 0x60 DUP5 ADD PUSH2 0x3A02 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x3AAF PUSH1 0x80 DUP5 ADD PUSH2 0x3A02 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x3AC0 PUSH1 0xA0 DUP5 ADD PUSH2 0x3A02 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x3AD1 PUSH1 0xC0 DUP5 ADD PUSH2 0x3A22 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x3AE2 PUSH1 0xE0 DUP5 ADD PUSH2 0x3A37 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x3AF5 DUP2 DUP6 ADD PUSH2 0x3828 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x3B07 DUP5 DUP3 ADD PUSH2 0x3828 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x3B19 DUP5 DUP3 ADD PUSH2 0x3828 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x3B2B DUP5 DUP3 ADD PUSH2 0x3828 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x3B3D DUP5 DUP3 ADD PUSH2 0x3A02 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x3B4F DUP5 DUP3 ADD PUSH2 0x3A02 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x3B61 DUP5 DUP3 ADD PUSH2 0x3A02 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x3B82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP3 MLOAD PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x60 SWAP1 SWAP6 ADD MLOAD SWAP2 SWAP7 SWAP1 SWAP6 POP SWAP1 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3BB4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3BD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x3BEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3C03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x3C15 JUMPI PUSH2 0x3C15 PUSH2 0x3855 JUMP JUMPDEST PUSH2 0x3C28 PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x38AE JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP6 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x3C3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1A15 DUP2 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x3384 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3C62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x3CC2 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG0 SDIV 0x23 CREATE2 0xAB 0xC4 PUSH25 0x61F86AA555881B92B921D831C25C6946DEF5607DA67BD85CA1 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"900:16332:154:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1032:327;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;9321:229;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1363:203::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1032:327::-;1177:39;1218:33;1269:36;1296:8;1269:26;:36::i;:::-;1307:46;1338:8;1348:4;1307:30;:46::i;:::-;1261:93;;;;1032:327;;;;;:::o;9321:229::-;9451:33;9499:46;9530:8;9540:4;9499:30;:46::i;:::-;9492:53;9321:229;-1:-1:-1;;;9321:229:154:o;1363:203::-;1471:39;1525:36;1552:8;1525:26;:36::i;:::-;1518:43;1363:203;-1:-1:-1;;1363:203:154:o;1570:7747::-;1669:39;1716:10;1735:8;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1716:38;;1760:25;1788:4;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1788:22:154;;;;;;;;;;;;:::i;:::-;1760:50;;1816:67;1923:8;:15;1886:53;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;1816:123;;2037:9;2032:7244;2056:8;:15;2052:1;:19;2032:7244;;;2086:58;2147:21;2169:1;2147:24;;;;;;;;:::i;:::-;;;;;;;2086:85;;2218:8;2227:1;2218:11;;;;;;;;:::i;:::-;;;;;;;2179:20;:36;;:50;;;;;;;;;;;2238:37;2278:4;:19;;;2298:8;2307:1;2298:11;;;;;;;;:::i;:::-;;;;;;;2278:32;;;;;;;;;;;;;;12675:42:201;12663:55;;;;12645:74;;12633:2;12618:18;;12499:226;2278:32:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2238:72;;2444:44;2545:8;:22;;;2527:65;;;:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2444:159;-1:-1:-1;2611:39:154;2662:48;;;;2658:1823;;2818:22;;;;2763:87;;;;;:43;12663:55:201;;;2763:87:154;;;12645:74:201;2722:38:154;;2763:43;;;;;12618:18:201;;2763:87:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2763:87:154;;;;;;;;;;;;:::i;:::-;2722:128;;2900:21;:28;2883:46;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2883:46:154;;;;;;;;;;;;;;;;;2861:68;;2944:9;2939:1534;2963:21;:28;2959:1;:32;2939:1534;;;3010:35;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3010:35:154;3096:21;3118:1;3096:24;;;;;;;;:::i;:::-;;;;;;;;;;;;3057:63;;;;:36;;;:63;;;3416:22;;;;3362:138;;;;;15924:15:201;;;3362:138:154;;;15906:34:201;15956:18;;;15949:43;;;;3362:40:154;;;;;15818:18:201;;3362:138:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3309:38;;;3133:367;3248:47;;;3133:367;3199:35;;;3133:367;3147:38;;;3133:367;3599:22;;;;-1:-1:-1;3543:90:154;;;;:42;12663:55:201;;;3543:90:154;;;12645:74:201;3543:42:154;;;;;;12618:18:201;;3543:90:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3513:120;;:27;;;:120;3713:36;;;;;3685:87;;;;;;;;:85;;;;;;;:87;;;;;;;;;;:85;:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3645:17;:37;;:127;;;;;;;;;;;3837:17;:36;;;3822:72;;;:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3822:74:154;;;;;;;;;;;;:::i;:::-;3784:112;;4071:36;;;;4016:103;;;;;:41;12663:55:201;;;4016:103:154;;;12645:74:201;4016:41:154;;;;;;12618:18:201;;4016:103:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3976:143;;:37;;;;:143;;;4169:93;;;;;;;:91;;:93;;;;;;;;;;;;;;;3976:143;4169:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4131:17;:35;;:131;;;;;;;;;;;4343:17;:37;;;4310:95;;;:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4274:33;;;:133;4420:22;;4274:17;;4420:19;;4440:1;;4420:22;;;;;;:::i;:::-;;;;;;:42;;;;2998:1475;2993:3;;;;:::i;:::-;;;2939:1534;;;;2712:1769;2658:1823;4527:126;;;;;;;;4550:8;:22;;;4527:126;;;;;;4590:25;4527:126;;;;;;4626:19;4527:126;;;4489:20;:35;;:164;;;;4703:44;4804:8;:33;;;4786:76;;;:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4703:170;-1:-1:-1;4881:39:154;4932:48;;;;4928:1855;;5088:33;;;;5033:98;;;;;:43;12663:55:201;;;5033:98:154;;;12645:74:201;4992:38:154;;5033:43;;;;;12618:18:201;;5033:98:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5033:98:154;;;;;;;;;;;;:::i;:::-;4992:139;;5180:21;:28;5163:46;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5163:46:154;;;;;;;;;;;;;;;;;5141:68;;5224:9;5219:1556;5243:21;:28;5239:1;:32;5219:1556;;;5290:35;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5290:35:154;5376:21;5398:1;5376:24;;;;;;;;:::i;:::-;;;;;;;;;;;;5337:63;;;;:36;;;:63;;;5696:33;;;;5642:149;;;;;15924:15:201;;;5642:149:154;;;15906:34:201;15956:18;;;15949:43;;;;5642:40:154;;;;;15818:18:201;;5642:149:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5589:38;;;5413:378;5528:47;;;5413:378;5479:35;;;5413:378;5427:38;;;5413:378;5890:33;;;;-1:-1:-1;5834:101:154;;;;:42;12663:55:201;;;5834:101:154;;;12645:74:201;5834:42:154;;;;;;12618:18:201;;5834:101:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5804:131;;:27;;;:131;6015:36;;;;;5987:87;;;;;;;;:85;;;;;;;:87;;;;;;;;;;:85;:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5947:17;:37;;:127;;;;;;;;;;;6139:17;:36;;;6124:72;;;:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6124:74:154;;;;;;;;;;;;:::i;:::-;6086:112;;6373:36;;;;6318:103;;;;;:41;12663:55:201;;;6318:103:154;;;12645:74:201;6318:41:154;;;;;;12618:18:201;;6318:103:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6278:143;;:37;;;;:143;;;6471:93;;;;;;;:91;;:93;;;;;;;;;;;;;;;6278:143;6471:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6433:17;:35;;:131;;;;;;;;;;;6645:17;:37;;;6612:95;;;:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6576:33;;;:133;6722:22;;6576:17;;6722:19;;6742:1;;6722:22;;;;;;:::i;:::-;;;;;;:42;;;;5278:1497;5273:3;;;;:::i;:::-;;;5219:1556;;;;4982:1801;4928:1855;6829:137;;;;;;;;6852:8;:33;;;6829:137;;;;;;6903:25;6829:137;;;;;;6939:19;6829:137;;;6791:20;:35;;:175;;;;7016:44;7117:8;:31;;;7099:74;;;:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7016:168;-1:-1:-1;7192:39:154;7243:48;;;;7239:1849;;7399:31;;;;7344:96;;;;;:43;12663:55:201;;;7344:96:154;;;12645:74:201;7303:38:154;;7344:43;;;;;12618:18:201;;7344:96:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7344:96:154;;;;;;;;;;;;:::i;:::-;7303:137;;7489:21;:28;7472:46;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7472:46:154;;;;;;;;;;;;;;;;;7450:68;;7533:9;7528:1552;7552:21;:28;7548:1;:32;7528:1552;;;7599:35;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7599:35:154;7685:21;7707:1;7685:24;;;;;;;;:::i;:::-;;;;;;;;;;;;7646:63;;;;:36;;;:63;;;8005:31;;;;7951:147;;;;;15924:15:201;;;7951:147:154;;;15906:34:201;15956:18;;;15949:43;;;;7951:40:154;;;;;15818:18:201;;7951:147:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7898:38;;;7722:376;7837:47;;;7722:376;7788:35;;;7722:376;7736:38;;;7722:376;8197:31;;;;-1:-1:-1;8141:99:154;;;;:42;12663:55:201;;;8141:99:154;;;12645:74:201;8141:42:154;;;;;;12618:18:201;;8141:99:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8111:129;;:27;;;:129;8320:36;;;;;8292:87;;;;;;;;:85;;;;;;;:87;;;;;;;;;;:85;:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8252:17;:37;;:127;;;;;;;;;;;8444:17;:36;;;8429:72;;;:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8429:74:154;;;;;;;;;;;;:::i;:::-;8391:112;;8678:36;;;;8623:103;;;;;:41;12663:55:201;;;8623:103:154;;;12645:74:201;8623:41:154;;;;;;12618:18:201;;8623:103:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8583:143;;:37;;;;:143;;;8776:93;;;;;;;:91;;:93;;;;;;;;;;;;;;;8583:143;8776:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8738:17;:35;;:131;;;;;;;;;;;8950:17;:37;;;8917:95;;;:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8881:33;;;:133;9027:22;;8881:17;;9027:19;;9047:1;;9027:22;;;;;;:::i;:::-;;;;;;:42;;;;7587:1493;7582:3;;;;:::i;:::-;;;7528:1552;;;;7293:1795;7239:1849;9134:135;;;;;;;;9157:8;:31;;;9134:135;;;;;;9206:25;9134:135;;;;;;9242:19;9134:135;;;9096:20;:35;;:173;;;;2078:7198;;;;;;;;2073:3;;;;;:::i;:::-;;;;2032:7244;;;-1:-1:-1;9290:21:154;1570:7747;-1:-1:-1;;;;1570:7747:154:o;9554:7676::-;9675:33;9716:10;9735:8;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9716:38;;9760:25;9788:4;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9788:22:154;;;;;;;;;;;;:::i;:::-;9760:50;-1:-1:-1;9817:60:154;9918:18;;;:40;;9957:1;9918:40;;;9939:8;:15;9918:40;9880:84;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;9817:147;;9976:9;9971:7213;9995:8;:15;9991:1;:19;9971:7213;;;10025:37;10065:4;:19;;;10085:8;10094:1;10085:11;;;;;;;;:::i;:::-;;;;;;;10065:32;;;;;;;;;;;;;;12675:42:201;12663:55;;;;12645:74;;12633:2;12618:18;;12499:226;10065:32:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10025:72;;10181:8;10190:1;10181:11;;;;;;;;:::i;:::-;;;;;;;10133:26;10160:1;10133:29;;;;;;;;:::i;:::-;;;;;;;:45;;:59;;;;;;;;;;;10201:44;10302:8;:22;;;10284:65;;;:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10201:159;-1:-1:-1;10372:48:154;;;;10368:2108;;10582:22;;;;10527:87;;;;;:43;12663:55:201;;;10527:87:154;;;12645:74:201;10486:38:154;;10527:43;;;;;12618:18:201;;10527:87:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10527:87:154;;;;;;;;;;;;:::i;:::-;10486:128;;10624:47;10706:21;:28;10674:70;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10674:70:154;;;;;;;;;;;;;;;10624:120;;10759:9;10754:1504;10778:21;:28;10774:1;:32;10754:1504;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10923:21:154;10945:1;10923:24;;;;;;;;:::i;:::-;;;;;;;;;;;10880:67;;;;:40;;;;:67;;;11101:22;;;;11009:184;;;;;18247:15:201;;;11009:184:154;;;18229:34:201;18299:15;;;18279:18;;;18272:43;18331:18;;;18324:43;;;;11009:56:154;;;;;;18141:18:201;;11009:184:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10960:46;;;:233;11318:40;;;;;11251:108;;;;;:60;15924:15:201;;;11251:108:154;;;15906:34:201;15976:15;;;15956:18;;;15949:43;11251:60:154;;;;;;15818:18:201;;11251:108:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11206:21;:42;;:153;;;;;11443:21;:40;;;11415:89;;;:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11371:21;:41;;:135;;;;;;;;;;;11588:21;:40;;;11560:87;;;:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11560:89:154;;;;;;;;;;;;:::i;:::-;11518:131;;11828:40;;;;;11773:107;;;;;:41;12663:55:201;;;11773:107:154;;;12645:74:201;11773:41:154;;;;;;12618:18:201;;11773:107:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11729:151;;:41;;;;:151;;;11934:97;;;;;;;;:95;;:97;;;;;11729:41;;11934:97;;;;;;11729:151;11934:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11892:139;;:39;;;:139;12116:41;;;;;12083:101;;;;;;;;:99;;;;;;;:101;;;;;;;;;;:99;:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12043:37;;;:141;12197:26;;12043:21;;12197:23;;12221:1;;12197:26;;;;;;:::i;:::-;;;;;;:50;;;;10813:1445;10808:3;;;;:::i;:::-;;;10754:1504;;;;12325:142;;;;;;;;12354:8;:22;;;12325:142;;;;;;12396:25;12325:142;;;;;;12434:23;12325:142;;;12268:26;12295:1;12268:29;;;;;;;;:::i;:::-;;;;;;;:54;;:199;;;;10422:2054;;10368:2108;12513:44;12614:8;:33;;;12596:76;;;:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12513:170;-1:-1:-1;12695:48:154;;;;12691:2141;;12905:33;;;;12850:98;;;;;:43;12663:55:201;;;12850:98:154;;;12645:74:201;12809:38:154;;12850:43;;;;;12618:18:201;;12850:98:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12850:98:154;;;;;;;;;;;;:::i;:::-;12809:139;;12958:47;13040:21;:28;13008:70;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13008:70:154;;;;;;;;;;;;;;;12958:120;;13093:9;13088:1515;13112:21;:28;13108:1;:32;13088:1515;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13257:21:154;13279:1;13257:24;;;;;;;;:::i;:::-;;;;;;;13214:21;:40;;:67;;;;;;;;;;;13343:25;:56;;;13415:4;13435:8;:33;;;13484:21;:40;;;13343:195;;;;;;;;;;;;;;;;18178:42:201;18247:15;;;18229:34;;18299:15;;;18294:2;18279:18;;18272:43;18351:15;;;18346:2;18331:18;;18324:43;18156:2;18141:18;;17966:407;13343:195:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13294:46;;;:244;13663:40;;;;;13596:108;;;;;:60;15924:15:201;;;13596:108:154;;;15906:34:201;15976:15;;;15956:18;;;15949:43;13596:60:154;;;;;;15818:18:201;;13596:108:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13551:21;:42;;:153;;;;;13788:21;:40;;;13760:89;;;:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13716:21;:41;;:135;;;;;;;;;;;13933:21;:40;;;13905:87;;;:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13905:89:154;;;;;;;;;;;;:::i;:::-;13863:131;;14173:40;;;;;14118:107;;;;;:41;12663:55:201;;;14118:107:154;;;12645:74:201;14118:41:154;;;;;;12618:18:201;;14118:107:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14074:151;;:41;;;;:151;;;14279:97;;;;;;;;:95;;:97;;;;;14074:41;;14279:97;;;;;;14074:151;14279:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14237:139;;:39;;;:139;14461:41;;;;;14428:101;;;;;;;;:99;;;;;;;:101;;;;;;;;;;:99;:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14388:37;;;:141;14542:26;;14388:21;;14542:23;;14566:1;;14542:26;;;;;;:::i;:::-;;;;;;:50;;;;13147:1456;13142:3;;;;:::i;:::-;;;13088:1515;;;;14670:153;;;;;;;;14699:8;:33;;;14670:153;;;;;;14752:25;14670:153;;;;;;14790:23;14670:153;;;14613:26;14640:1;14613:29;;;;;;;;:::i;:::-;;;;;;;:54;;:210;;;;12745:2087;;12691:2141;14867:44;14968:8;:31;;;14950:74;;;:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14867:168;-1:-1:-1;15047:48:154;;;;15043:2135;;15257:31;;;;15202:96;;;;;:43;12663:55:201;;;15202:96:154;;;12645:74:201;15161:38:154;;15202:43;;;;;12618:18:201;;15202:96:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15202:96:154;;;;;;;;;;;;:::i;:::-;15161:137;;15308:47;15390:21;:28;15358:70;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15358:70:154;;;;;;;;;;;;;;;15308:120;;15443:9;15438:1513;15462:21;:28;15458:1;:32;15438:1513;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15607:21:154;15629:1;15607:24;;;;;;;;:::i;:::-;;;;;;;15564:21;:40;;:67;;;;;;;;;;;15693:25;:56;;;15765:4;15785:8;:31;;;15832:21;:40;;;15693:193;;;;;;;;;;;;;;;;18178:42:201;18247:15;;;18229:34;;18299:15;;;18294:2;18279:18;;18272:43;18351:15;;;18346:2;18331:18;;18324:43;18156:2;18141:18;;17966:407;15693:193:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15644:21;:46;;:242;;;;;15944:25;:60;;;16005:4;16011:21;:40;;;15944:108;;;;;;;;;;;;;;;15855:42:201;15924:15;;;15906:34;;15976:15;;15971:2;15956:18;;15949:43;15833:2;15818:18;;15671:327;15944:108:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15899:21;:42;;:153;;;;;16136:21;:40;;;16108:89;;;:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16064:21;:41;;:135;;;;;;;;;;;16281:21;:40;;;16253:87;;;:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16253:89:154;;;;;;;;;;;;:::i;:::-;16211:131;;16521:40;;;;;16466:107;;;;;:41;12663:55:201;;;16466:107:154;;;12645:74:201;16466:41:154;;;;;;12618:18:201;;16466:107:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16422:151;;:41;;;;:151;;;16627:97;;;;;;;;:95;;:97;;;;;16422:41;;16627:97;;;;;;16422:151;16627:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16585:139;;:39;;;:139;16809:41;;;;;16776:101;;;;;;;;:99;;;;;;;:101;;;;;;;;;;:99;:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16736:37;;;:141;16890:26;;16736:21;;16890:23;;16914:1;;16890:26;;;;;;:::i;:::-;;;;;;:50;;;;15497:1454;15492:3;;;;:::i;:::-;;;15438:1513;;;;17018:151;;;;;;;;17047:8;:31;;;17018:151;;;;;;17098:25;17018:151;;;;;;17136:23;17018:151;;;16961:26;16988:1;16961:29;;;;;;;;:::i;:::-;;;;;;;:54;;:208;;;;15097:2081;;15043:2135;10017:7167;;;;10012:3;;;;;:::i;:::-;;;;9971:7213;;;-1:-1:-1;17198:26:154;9554:7676;-1:-1:-1;;;;;9554:7676:154:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:178:201:-;124:42;117:5;113:54;106:5;103:65;93:93;;182:1;179;172:12;93:93;14:178;:::o;197:467::-;296:6;304;357:2;345:9;336:7;332:23;328:32;325:52;;;373:1;370;363:12;325:52;412:9;399:23;431:55;480:5;431:55;:::i;:::-;505:5;-1:-1:-1;562:2:201;547:18;;534:32;575:57;534:32;575:57;:::i;:::-;651:7;641:17;;;197:467;;;;;:::o;801:258::-;873:1;883:113;897:6;894:1;891:13;883:113;;;973:11;;;967:18;954:11;;;947:39;919:2;912:10;883:113;;;1014:6;1011:1;1008:13;1005:48;;;1049:1;1040:6;1035:3;1031:16;1024:27;1005:48;;801:258;;;:::o;1064:317::-;1106:3;1144:5;1138:12;1171:6;1166:3;1159:19;1187:63;1243:6;1236:4;1231:3;1227:14;1220:4;1213:5;1209:16;1187:63;:::i;:::-;1295:2;1283:15;-1:-1:-1;;1279:88:201;1270:98;;;;1370:4;1266:109;;1064:317;-1:-1:-1;;1064:317:201:o;1466:2256::-;1522:3;1550:4;1584:2;1579:3;1575:12;1606:42;1687:2;1679:5;1673:12;1669:21;1664:3;1657:34;1710:4;1771:2;1765;1758:5;1754:14;1748:21;1744:30;1739:2;1734:3;1730:12;1723:52;1794:4;1784:14;;1844:2;1837:5;1833:14;1827:21;1878:2;1873;1868:3;1864:12;1857:24;1903:4;1936:12;1930:19;1971:6;1965:4;1958:20;1997:3;1987:13;;2027:2;2022:3;2018:12;2009:21;;2083:2;2073:6;2070:1;2066:14;2061:3;2057:24;2053:33;2127:2;2113:12;2109:21;2095:35;;2148:1;2158:1536;2172:6;2169:1;2166:13;2158:1536;;;2257:66;2251:3;2243:6;2239:16;2235:89;2228:5;2221:104;2354:6;2348:13;2384:6;2431:2;2425:9;2462:2;2454:6;2447:18;2492:50;2538:2;2530:6;2526:15;2510:14;2492:50;:::i;:::-;2478:64;;;2591:2;2587;2583:11;2577:18;2608:51;2655:2;2647:6;2643:15;2627:14;746:42;735:54;723:67;;669:127;2608:51;-1:-1:-1;2700:11:201;;;2694:18;746:42;735:54;2760:15;;;723:67;2819:11;;;2813:18;2796:15;;;2789:43;2875:11;;;2869:18;2852:15;;;2845:43;2911:4;2958:11;;;2952:18;2935:15;;;2928:43;2994:4;3041:11;;;3035:18;3018:15;;;3011:43;3078:4;3126:12;;;3120:19;3102:16;;;3095:45;3164:6;3211:12;;;3205:19;1453:4;1442:16;;;3270;;;1430:29;;;;3311:6;3358:12;;;3352:19;1442:16;;3417;;;1430:29;3458:6;3505:12;;;3499:19;1442:16;3564;;;;1430:29;3633:15;;;;3670:14;;;;2194:1;2187:9;2158:1536;;;-1:-1:-1;3710:6:201;1466:2256;-1:-1:-1;;;;;;;;;;1466:2256:201:o;3727:1336::-;3810:3;3848:5;3842:12;3875:6;3870:3;3863:19;3901:4;3942:2;3937:3;3933:12;3967:11;3994;3987:18;;4044:6;4041:1;4037:14;4030:5;4026:26;4014:38;;4086:2;4079:5;4075:14;4107:1;4117:920;4131:6;4128:1;4125:13;4117:920;;;4202:5;4196:4;4192:16;4187:3;4180:29;4238:6;4232:13;4268:4;4313:42;4308:2;4302:9;4298:58;4292:4;4285:72;4404:2;4400;4396:11;4390:18;4443:2;4438;4432:4;4428:13;4421:25;4473:60;4529:2;4523:4;4519:13;4505:12;4473:60;:::i;:::-;4459:74;;;4556:4;4609:2;4605;4601:11;4595:18;4660:4;4652:6;4648:17;4643:2;4637:4;4633:13;4626:40;4693:55;4741:6;4725:14;4693:55;:::i;:::-;4679:69;;;;4771:4;4824:2;4820;4816:11;4810:18;4788:40;;4875:4;4867:6;4863:17;4858:2;4852:4;4848:13;4841:40;;4902:55;4950:6;4934:14;4902:55;:::i;:::-;5015:12;;;;4894:63;-1:-1:-1;;;4980:15:201;;;;4153:1;4146:9;4117:920;;;-1:-1:-1;5053:4:201;;3727:1336;-1:-1:-1;;;;;;;3727:1336:201:o;5068:1833::-;5128:3;5156:4;5190:2;5185:3;5181:12;5212:42;5293:2;5285:5;5279:12;5275:21;5270:3;5263:34;5316:4;5377:2;5371;5364:5;5360:14;5354:21;5350:30;5345:2;5340:3;5336:12;5329:52;5400:4;5450:2;5443:5;5439:14;5433:21;5484:2;5479;5474:3;5470:12;5463:24;5509:4;5542:12;5536:19;5577:6;5571:4;5564:20;5603:3;5593:13;;5633:2;5628:3;5624:12;5615:21;;5689:2;5679:6;5676:1;5672:14;5667:3;5663:24;5659:33;5733:2;5719:12;5715:21;5701:35;;5754:1;5764:1109;5778:6;5775:1;5772:13;5764:1109;;;5863:66;5857:3;5849:6;5845:16;5841:89;5834:5;5827:104;5960:6;5954:13;5990:6;6037:2;6031:9;6068:2;6060:6;6053:18;6098:50;6144:2;6136:6;6132:15;6116:14;6098:50;:::i;:::-;6084:64;;;6209:2;6203;6199;6195:11;6189:18;6185:27;6180:2;6172:6;6168:15;6161:52;6274:2;6268;6264;6260:11;6254:18;6250:27;6245:2;6237:6;6233:15;6226:52;6329:2;6325;6321:11;6315:18;6310:2;6302:6;6298:15;6291:43;6385:2;6381;6377:11;6371:18;6366:2;6358:6;6354:15;6347:43;6413:4;6468:2;6464;6460:11;6454:18;6449:2;6441:6;6437:15;6430:43;;6496:4;6549:2;6545;6541:11;6535:18;6566:49;6611:2;6603:6;6599:15;6583:14;1453:4;1442:16;1430:29;;1386:75;6566:49;-1:-1:-1;;6639:4:201;6684:12;;;6678:19;1453:4;1442:16;6743;;;;1430:29;;;;6812:15;;;;6849:14;;;;5800:1;5793:9;5764:1109;;;-1:-1:-1;6889:6:201;5068:1833;-1:-1:-1;;;;;;;;;;;5068:1833:201:o;6906:1342::-;6983:3;7021:5;7015:12;7048:6;7043:3;7036:19;7074:4;7115:2;7110:3;7106:12;7140:11;7167;7160:18;;7217:6;7214:1;7210:14;7203:5;7199:26;7187:38;;7259:2;7252:5;7248:14;7280:1;7290:932;7304:6;7301:1;7298:13;7290:932;;;7375:5;7369:4;7365:16;7360:3;7353:29;7411:6;7405:13;7441:4;7486:42;7481:2;7475:9;7471:58;7465:4;7458:72;7577:2;7573;7569:11;7563:18;7616:2;7611;7605:4;7601:13;7594:25;7646:64;7706:2;7700:4;7696:13;7682:12;7646:64;:::i;:::-;7632:78;;;7733:4;7786:2;7782;7778:11;7772:18;7837:4;7829:6;7825:17;7820:2;7814:4;7810:13;7803:40;7870:59;7922:6;7906:14;7870:59;:::i;:::-;7856:73;;;;7952:4;8005:2;8001;7997:11;7991:18;7969:40;;8056:4;8048:6;8044:17;8039:2;8033:4;8029:13;8022:40;;8083:59;8135:6;8119:14;8083:59;:::i;:::-;8200:12;;;;8075:67;-1:-1:-1;;;8165:15:201;;;;7326:1;7319:9;7290:932;;8253:703;8694:2;8683:9;8676:21;8657:4;8720:86;8802:2;8791:9;8787:18;8779:6;8720:86;:::i;:::-;8854:9;8846:6;8842:22;8837:2;8826:9;8822:18;8815:50;8882:68;8943:6;8935;8882:68;:::i;:::-;8874:76;8253:703;-1:-1:-1;;;;;8253:703:201:o;8961:371::-;9226:2;9215:9;9208:21;9189:4;9246:80;9322:2;9311:9;9307:18;9299:6;9246:80;:::i;9337:302::-;9427:6;9480:2;9468:9;9459:7;9455:23;9451:32;9448:52;;;9496:1;9493;9486:12;9448:52;9535:9;9522:23;9554:55;9603:5;9554:55;:::i;9644:389::-;9921:2;9910:9;9903:21;9884:4;9941:86;10023:2;10012:9;10008:18;10000:6;9941:86;:::i;10038:162::-;10117:13;;10139:55;10117:13;10139:55;:::i;:::-;10038:162;;;:::o;10205:275::-;10275:6;10328:2;10316:9;10307:7;10303:23;10299:32;10296:52;;;10344:1;10341;10334:12;10296:52;10376:9;10370:16;10395:55;10444:5;10395:55;:::i;10485:184::-;10537:77;10534:1;10527:88;10634:4;10631:1;10624:15;10658:4;10655:1;10648:15;10674:252;10746:2;10740:9;10788:3;10776:16;;10822:18;10807:34;;10843:22;;;10804:62;10801:88;;;10869:18;;:::i;:::-;10905:2;10898:22;10674:252;:::o;10931:334::-;11002:2;10996:9;11058:2;11048:13;;-1:-1:-1;;11044:86:201;11032:99;;11161:18;11146:34;;11182:22;;;11143:62;11140:88;;;11208:18;;:::i;:::-;11244:2;11237:22;10931:334;;-1:-1:-1;10931:334:201:o;11270:1035::-;11365:6;11396:2;11439;11427:9;11418:7;11414:23;11410:32;11407:52;;;11455:1;11452;11445:12;11407:52;11488:9;11482:16;11517:18;11558:2;11550:6;11547:14;11544:34;;;11574:1;11571;11564:12;11544:34;11612:6;11601:9;11597:22;11587:32;;11657:7;11650:4;11646:2;11642:13;11638:27;11628:55;;11679:1;11676;11669:12;11628:55;11708:2;11702:9;11730:2;11726;11723:10;11720:36;;;11736:18;;:::i;:::-;11782:2;11779:1;11775:10;11765:20;;11805:28;11829:2;11825;11821:11;11805:28;:::i;:::-;11867:15;;;11937:11;;;11933:20;;;11898:12;;;;11965:19;;;11962:39;;;11997:1;11994;11987:12;11962:39;12021:11;;;;12041:234;12057:6;12052:3;12049:15;12041:234;;;12130:3;12124:10;12111:23;;12147:55;12196:5;12147:55;:::i;:::-;12215:18;;;12074:12;;;;12253;;;;12041:234;;;12294:5;11270:1035;-1:-1:-1;;;;;;;;11270:1035:201:o;12310:184::-;12362:77;12359:1;12352:88;12459:4;12456:1;12449:15;12483:4;12480:1;12473:15;12730:426;12811:5;12859:4;12847:9;12842:3;12838:19;12834:30;12831:50;;;12877:1;12874;12867:12;12831:50;12910:2;12904:9;12952:4;12944:6;12940:17;13023:6;13011:10;13008:22;12987:18;12975:10;12972:34;12969:62;12966:88;;;13034:18;;:::i;:::-;13070:2;13063:22;13133:16;;13118:32;;-1:-1:-1;13103:6:201;12730:426;-1:-1:-1;12730:426:201:o;13161:192::-;13240:13;;13293:34;13282:46;;13272:57;;13262:85;;13343:1;13340;13333:12;13358:169;13436:13;;13489:12;13478:24;;13468:35;;13458:63;;13517:1;13514;13507:12;13532:163;13610:13;;13663:6;13652:18;;13642:29;;13632:57;;13685:1;13682;13675:12;13700:1652;13800:6;13853:3;13841:9;13832:7;13828:23;13824:33;13821:53;;;13870:1;13867;13860:12;13821:53;13896:22;;:::i;:::-;13941:72;14005:7;13994:9;13941:72;:::i;:::-;13934:5;13927:87;14046:49;14091:2;14080:9;14076:18;14046:49;:::i;:::-;14041:2;14034:5;14030:14;14023:73;14128:49;14173:2;14162:9;14158:18;14128:49;:::i;:::-;14123:2;14116:5;14112:14;14105:73;14210:49;14255:2;14244:9;14240:18;14210:49;:::i;:::-;14205:2;14198:5;14194:14;14187:73;14293:50;14338:3;14327:9;14323:19;14293:50;:::i;:::-;14287:3;14280:5;14276:15;14269:75;14377:50;14422:3;14411:9;14407:19;14377:50;:::i;:::-;14371:3;14364:5;14360:15;14353:75;14461:49;14505:3;14494:9;14490:19;14461:49;:::i;:::-;14455:3;14448:5;14444:15;14437:74;14544:49;14588:3;14577:9;14573:19;14544:49;:::i;:::-;14538:3;14531:5;14527:15;14520:74;14613:3;14648:49;14693:2;14682:9;14678:18;14648:49;:::i;:::-;14632:14;;;14625:73;14717:3;14752:49;14782:18;;;14752:49;:::i;:::-;14736:14;;;14729:73;14821:3;14856:49;14886:18;;;14856:49;:::i;:::-;14840:14;;;14833:73;14925:3;14960:49;14990:18;;;14960:49;:::i;:::-;14944:14;;;14937:73;15029:3;15064:49;15094:18;;;15064:49;:::i;:::-;15048:14;;;15041:73;15133:3;15168:49;15198:18;;;15168:49;:::i;:::-;15152:14;;;15145:73;15237:3;15272:49;15302:18;;;15272:49;:::i;:::-;15256:14;;;15249:73;15260:5;13700:1652;-1:-1:-1;;;13700:1652:201:o;16003:368::-;16100:6;16108;16116;16124;16177:3;16165:9;16156:7;16152:23;16148:33;16145:53;;;16194:1;16191;16184:12;16145:53;-1:-1:-1;;16217:16:201;;16273:2;16258:18;;16252:25;16317:2;16302:18;;16296:25;16361:2;16346:18;;;16340:25;16217:16;;16252:25;;-1:-1:-1;16340:25:201;;-1:-1:-1;16003:368:201;-1:-1:-1;16003:368:201:o;16376:273::-;16444:6;16497:2;16485:9;16476:7;16472:23;16468:32;16465:52;;;16513:1;16510;16503:12;16465:52;16545:9;16539:16;16595:4;16588:5;16584:16;16577:5;16574:27;16564:55;;16615:1;16612;16605:12;16654:765;16734:6;16787:2;16775:9;16766:7;16762:23;16758:32;16755:52;;;16803:1;16800;16793:12;16755:52;16836:9;16830:16;16865:18;16906:2;16898:6;16895:14;16892:34;;;16922:1;16919;16912:12;16892:34;16960:6;16949:9;16945:22;16935:32;;17005:7;16998:4;16994:2;16990:13;16986:27;16976:55;;17027:1;17024;17017:12;16976:55;17056:2;17050:9;17078:2;17074;17071:10;17068:36;;;17084:18;;:::i;:::-;17126:112;17234:2;-1:-1:-1;;17158:4:201;17154:2;17150:13;17146:86;17142:95;17126:112;:::i;:::-;17113:125;;17261:2;17254:5;17247:17;17301:7;17296:2;17291;17287;17283:11;17279:20;17276:33;17273:53;;;17322:1;17319;17312:12;17273:53;17335:54;17386:2;17381;17374:5;17370:14;17365:2;17361;17357:11;17335:54;:::i;17424:183::-;17493:6;17546:2;17534:9;17525:7;17521:23;17517:32;17514:52;;;17562:1;17559;17552:12;17514:52;-1:-1:-1;17585:16:201;;17424:183;-1:-1:-1;17424:183:201:o;17612:349::-;17651:3;17682:66;17675:5;17672:77;17669:257;;;17782:77;17779:1;17772:88;17883:4;17880:1;17873:15;17911:4;17908:1;17901:15;17669:257;-1:-1:-1;17953:1:201;17942:13;;17612:349::o"},"gasEstimates":{"creation":{"codeDepositCost":"3123000","executionCost":"3444","totalCost":"3126444"},"external":{"getFullReservesIncentiveData(address,address)":"infinite","getReservesIncentivesData(address)":"infinite","getUserReservesIncentivesData(address,address)":"infinite"},"internal":{"_getReservesIncentivesData(contract IPoolAddressesProvider)":"infinite","_getUserReservesIncentivesData(contract IPoolAddressesProvider,address)":"infinite"}},"methodIdentifiers":{"getFullReservesIncentiveData(address,address)":"47637536","getReservesIncentivesData(address)":"976fafc5","getUserReservesIncentivesData(address,address)":"799bdcf5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getFullReservesIncentiveData\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentiveControllerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rewardTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"rewardTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardOracleAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"emissionPerSecond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"incentivesLastUpdateTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIncentivesIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"emissionEndTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardPriceFeed\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"rewardTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"priceFeedDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.RewardInfo[]\",\"name\":\"rewardsTokenInformation\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.IncentiveData\",\"name\":\"aIncentiveData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentiveControllerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rewardTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"rewardTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardOracleAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"emissionPerSecond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"incentivesLastUpdateTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIncentivesIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"emissionEndTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardPriceFeed\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"rewardTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"priceFeedDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.RewardInfo[]\",\"name\":\"rewardsTokenInformation\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.IncentiveData\",\"name\":\"vIncentiveData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentiveControllerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rewardTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"rewardTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardOracleAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"emissionPerSecond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"incentivesLastUpdateTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIncentivesIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"emissionEndTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardPriceFeed\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"rewardTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"priceFeedDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.RewardInfo[]\",\"name\":\"rewardsTokenInformation\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.IncentiveData\",\"name\":\"sIncentiveData\",\"type\":\"tuple\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentiveControllerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rewardTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"rewardOracleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"userUnclaimedRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIncentivesUserIndex\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardPriceFeed\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"priceFeedDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"rewardTokenDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserRewardInfo[]\",\"name\":\"userRewardsInformation\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserIncentiveData\",\"name\":\"aTokenIncentivesUserData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentiveControllerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rewardTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"rewardOracleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"userUnclaimedRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIncentivesUserIndex\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardPriceFeed\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"priceFeedDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"rewardTokenDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserRewardInfo[]\",\"name\":\"userRewardsInformation\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserIncentiveData\",\"name\":\"vTokenIncentivesUserData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentiveControllerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rewardTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"rewardOracleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"userUnclaimedRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIncentivesUserIndex\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardPriceFeed\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"priceFeedDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"rewardTokenDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserRewardInfo[]\",\"name\":\"userRewardsInformation\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserIncentiveData\",\"name\":\"sTokenIncentivesUserData\",\"type\":\"tuple\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"getReservesIncentivesData\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentiveControllerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rewardTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"rewardTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardOracleAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"emissionPerSecond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"incentivesLastUpdateTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIncentivesIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"emissionEndTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardPriceFeed\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"rewardTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"priceFeedDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.RewardInfo[]\",\"name\":\"rewardsTokenInformation\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.IncentiveData\",\"name\":\"aIncentiveData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentiveControllerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rewardTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"rewardTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardOracleAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"emissionPerSecond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"incentivesLastUpdateTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIncentivesIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"emissionEndTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardPriceFeed\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"rewardTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"priceFeedDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.RewardInfo[]\",\"name\":\"rewardsTokenInformation\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.IncentiveData\",\"name\":\"vIncentiveData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentiveControllerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rewardTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"rewardTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardOracleAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"emissionPerSecond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"incentivesLastUpdateTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIncentivesIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"emissionEndTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardPriceFeed\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"rewardTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"priceFeedDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.RewardInfo[]\",\"name\":\"rewardsTokenInformation\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.IncentiveData\",\"name\":\"sIncentiveData\",\"type\":\"tuple\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserReservesIncentivesData\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentiveControllerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rewardTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"rewardOracleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"userUnclaimedRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIncentivesUserIndex\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardPriceFeed\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"priceFeedDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"rewardTokenDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserRewardInfo[]\",\"name\":\"userRewardsInformation\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserIncentiveData\",\"name\":\"aTokenIncentivesUserData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentiveControllerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rewardTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"rewardOracleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"userUnclaimedRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIncentivesUserIndex\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardPriceFeed\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"priceFeedDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"rewardTokenDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserRewardInfo[]\",\"name\":\"userRewardsInformation\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserIncentiveData\",\"name\":\"vTokenIncentivesUserData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentiveControllerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rewardTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"rewardOracleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"userUnclaimedRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIncentivesUserIndex\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardPriceFeed\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"priceFeedDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"rewardTokenDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserRewardInfo[]\",\"name\":\"userRewardsInformation\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserIncentiveData\",\"name\":\"sTokenIncentivesUserData\",\"type\":\"tuple\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/misc/UiIncentiveDataProviderV3.sol\":\"UiIncentiveDataProviderV3\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IACLManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IACLManager\\n * @author Aave\\n * @notice Defines the basic interface for the ACL Manager\\n */\\ninterface IACLManager {\\n  /**\\n   * @notice Returns the contract address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the identifier of the PoolAdmin role\\n   * @return The id of the PoolAdmin role\\n   */\\n  function POOL_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the EmergencyAdmin role\\n   * @return The id of the EmergencyAdmin role\\n   */\\n  function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the RiskAdmin role\\n   * @return The id of the RiskAdmin role\\n   */\\n  function RISK_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the FlashBorrower role\\n   * @return The id of the FlashBorrower role\\n   */\\n  function FLASH_BORROWER_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the Bridge role\\n   * @return The id of the Bridge role\\n   */\\n  function BRIDGE_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the identifier of the AssetListingAdmin role\\n   * @return The id of the AssetListingAdmin role\\n   */\\n  function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);\\n\\n  /**\\n   * @notice Set the role as admin of a specific role.\\n   * @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.\\n   * @param role The role to be managed by the admin role\\n   * @param adminRole The admin role\\n   */\\n  function setRoleAdmin(bytes32 role, bytes32 adminRole) external;\\n\\n  /**\\n   * @notice Adds a new admin as PoolAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addPoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as PoolAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removePoolAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is PoolAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is PoolAdmin, false otherwise\\n   */\\n  function isPoolAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as EmergencyAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as EmergencyAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeEmergencyAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is EmergencyAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is EmergencyAdmin, false otherwise\\n   */\\n  function isEmergencyAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as RiskAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as RiskAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeRiskAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is RiskAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is RiskAdmin, false otherwise\\n   */\\n  function isRiskAdmin(address admin) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as FlashBorrower\\n   * @param borrower The address of the new FlashBorrower\\n   */\\n  function addFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Removes an address as FlashBorrower\\n   * @param borrower The address of the FlashBorrower to remove\\n   */\\n  function removeFlashBorrower(address borrower) external;\\n\\n  /**\\n   * @notice Returns true if the address is FlashBorrower, false otherwise\\n   * @param borrower The address to check\\n   * @return True if the given address is FlashBorrower, false otherwise\\n   */\\n  function isFlashBorrower(address borrower) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new address as Bridge\\n   * @param bridge The address of the new Bridge\\n   */\\n  function addBridge(address bridge) external;\\n\\n  /**\\n   * @notice Removes an address as Bridge\\n   * @param bridge The address of the bridge to remove\\n   */\\n  function removeBridge(address bridge) external;\\n\\n  /**\\n   * @notice Returns true if the address is Bridge, false otherwise\\n   * @param bridge The address to check\\n   * @return True if the given address is Bridge, false otherwise\\n   */\\n  function isBridge(address bridge) external view returns (bool);\\n\\n  /**\\n   * @notice Adds a new admin as AssetListingAdmin\\n   * @param admin The address of the new admin\\n   */\\n  function addAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Removes an admin as AssetListingAdmin\\n   * @param admin The address of the admin to remove\\n   */\\n  function removeAssetListingAdmin(address admin) external;\\n\\n  /**\\n   * @notice Returns true if the address is AssetListingAdmin, false otherwise\\n   * @param admin The address to check\\n   * @return True if the given address is AssetListingAdmin, false otherwise\\n   */\\n  function isAssetListingAdmin(address admin) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xe39a407a074d8ac950deb7d1d855b39d53e35a5a441a7074c3d26cddef10406b\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {Context} from '../../../dependencies/openzeppelin/contracts/Context.sol';\\nimport {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IERC20Detailed} from '../../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {WadRayMath} from '../../libraries/math/WadRayMath.sol';\\nimport {Errors} from '../../libraries/helpers/Errors.sol';\\nimport {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol';\\nimport {IPoolAddressesProvider} from '../../../interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '../../../interfaces/IPool.sol';\\nimport {IACLManager} from '../../../interfaces/IACLManager.sol';\\n\\n/**\\n * @title IncentivizedERC20\\n * @author Aave, inspired by the Openzeppelin ERC20 implementation\\n * @notice Basic ERC20 implementation\\n */\\nabstract contract IncentivizedERC20 is Context, IERC20Detailed {\\n  using WadRayMath for uint256;\\n  using SafeCast for uint256;\\n\\n  /**\\n   * @dev Only pool admin can call functions marked by this modifier.\\n   */\\n  modifier onlyPoolAdmin() {\\n    IACLManager aclManager = IACLManager(_addressesProvider.getACLManager());\\n    require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN);\\n    _;\\n  }\\n\\n  /**\\n   * @dev Only pool can call functions marked by this modifier.\\n   */\\n  modifier onlyPool() {\\n    require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL);\\n    _;\\n  }\\n\\n  /**\\n   * @dev UserState - additionalData is a flexible field.\\n   * ATokens and VariableDebtTokens use this field store the index of the\\n   * user's last supply/withdrawal/borrow/repayment. StableDebtTokens use\\n   * this field to store the user's stable rate.\\n   */\\n  struct UserState {\\n    uint128 balance;\\n    uint128 additionalData;\\n  }\\n  // Map of users address and their state data (userAddress => userStateData)\\n  mapping(address => UserState) internal _userState;\\n\\n  // Map of allowances (delegator => delegatee => allowanceAmount)\\n  mapping(address => mapping(address => uint256)) private _allowances;\\n\\n  uint256 internal _totalSupply;\\n  string private _name;\\n  string private _symbol;\\n  uint8 private _decimals;\\n  IAaveIncentivesController internal _incentivesController;\\n  IPoolAddressesProvider internal immutable _addressesProvider;\\n  IPool public immutable POOL;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param pool The reference to the main Pool contract\\n   * @param name The name of the token\\n   * @param symbol The symbol of the token\\n   * @param decimals The number of decimals of the token\\n   */\\n  constructor(IPool pool, string memory name, string memory symbol, uint8 decimals) {\\n    _addressesProvider = pool.ADDRESSES_PROVIDER();\\n    _name = name;\\n    _symbol = symbol;\\n    _decimals = decimals;\\n    POOL = pool;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function name() public view override returns (string memory) {\\n    return _name;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function symbol() external view override returns (string memory) {\\n    return _symbol;\\n  }\\n\\n  /// @inheritdoc IERC20Detailed\\n  function decimals() external view override returns (uint8) {\\n    return _decimals;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function totalSupply() public view virtual override returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function balanceOf(address account) public view virtual override returns (uint256) {\\n    return _userState[account].balance;\\n  }\\n\\n  /**\\n   * @notice Returns the address of the Incentives Controller contract\\n   * @return The address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view virtual returns (IAaveIncentivesController) {\\n    return _incentivesController;\\n  }\\n\\n  /**\\n   * @notice Sets a new Incentives Controller\\n   * @param controller the new Incentives controller\\n   */\\n  function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin {\\n    _incentivesController = controller;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transfer(address recipient, uint256 amount) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _transfer(_msgSender(), recipient, castAmount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) external view virtual override returns (uint256) {\\n    return _allowances[owner][spender];\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function approve(address spender, uint256 amount) external virtual override returns (bool) {\\n    _approve(_msgSender(), spender, amount);\\n    return true;\\n  }\\n\\n  /// @inheritdoc IERC20\\n  function transferFrom(\\n    address sender,\\n    address recipient,\\n    uint256 amount\\n  ) external virtual override returns (bool) {\\n    uint128 castAmount = amount.toUint128();\\n    _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - castAmount);\\n    _transfer(sender, recipient, castAmount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Increases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param addedValue The amount being added to the allowance\\n   * @return `true`\\n   */\\n  function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Decreases the allowance of spender to spend _msgSender() tokens\\n   * @param spender The user allowed to spend on behalf of _msgSender()\\n   * @param subtractedValue The amount being subtracted to the allowance\\n   * @return `true`\\n   */\\n  function decreaseAllowance(\\n    address spender,\\n    uint256 subtractedValue\\n  ) external virtual returns (bool) {\\n    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Transfers tokens between two users and apply incentives if defined.\\n   * @param sender The source address\\n   * @param recipient The destination address\\n   * @param amount The amount getting transferred\\n   */\\n  function _transfer(address sender, address recipient, uint128 amount) internal virtual {\\n    uint128 oldSenderBalance = _userState[sender].balance;\\n    _userState[sender].balance = oldSenderBalance - amount;\\n    uint128 oldRecipientBalance = _userState[recipient].balance;\\n    _userState[recipient].balance = oldRecipientBalance + amount;\\n\\n    IAaveIncentivesController incentivesControllerLocal = _incentivesController;\\n    if (address(incentivesControllerLocal) != address(0)) {\\n      uint256 currentTotalSupply = _totalSupply;\\n      incentivesControllerLocal.handleAction(sender, currentTotalSupply, oldSenderBalance);\\n      if (sender != recipient) {\\n        incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance);\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Approve `spender` to use `amount` of `owner`s balance\\n   * @param owner The address owning the tokens\\n   * @param spender The address approved for spending\\n   * @param amount The amount of tokens to approve spending of\\n   */\\n  function _approve(address owner, address spender, uint256 amount) internal virtual {\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @notice Update the name of the token\\n   * @param newName The new name for the token\\n   */\\n  function _setName(string memory newName) internal {\\n    _name = newName;\\n  }\\n\\n  /**\\n   * @notice Update the symbol for the token\\n   * @param newSymbol The new symbol for the token\\n   */\\n  function _setSymbol(string memory newSymbol) internal {\\n    _symbol = newSymbol;\\n  }\\n\\n  /**\\n   * @notice Update the number of decimals for the token\\n   * @param newDecimals The new number of decimals for the token\\n   */\\n  function _setDecimals(uint8 newDecimals) internal {\\n    _decimals = newDecimals;\\n  }\\n}\\n\",\"keccak256\":\"0x1b4b3836e861ddfdbac18e01184fbd88a06466a515db6518ca04fb28de02a950\",\"license\":\"BUSL-1.1\"},\"contracts/misc/UiIncentiveDataProviderV3.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '@aave/core-v3/contracts/interfaces/IPool.sol';\\nimport {IncentivizedERC20} from '@aave/core-v3/contracts/protocol/tokenization/base/IncentivizedERC20.sol';\\nimport {UserConfiguration} from '@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol';\\nimport {DataTypes} from '@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol';\\nimport {IRewardsController} from '../rewards/interfaces/IRewardsController.sol';\\nimport {IEACAggregatorProxy} from './interfaces/IEACAggregatorProxy.sol';\\nimport {IUiIncentiveDataProviderV3} from './interfaces/IUiIncentiveDataProviderV3.sol';\\n\\ncontract UiIncentiveDataProviderV3 is IUiIncentiveDataProviderV3 {\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  function getFullReservesIncentiveData(\\n    IPoolAddressesProvider provider,\\n    address user\\n  )\\n    external\\n    view\\n    override\\n    returns (AggregatedReserveIncentiveData[] memory, UserReserveIncentiveData[] memory)\\n  {\\n    return (_getReservesIncentivesData(provider), _getUserReservesIncentivesData(provider, user));\\n  }\\n\\n  function getReservesIncentivesData(\\n    IPoolAddressesProvider provider\\n  ) external view override returns (AggregatedReserveIncentiveData[] memory) {\\n    return _getReservesIncentivesData(provider);\\n  }\\n\\n  function _getReservesIncentivesData(\\n    IPoolAddressesProvider provider\\n  ) private view returns (AggregatedReserveIncentiveData[] memory) {\\n    IPool pool = IPool(provider.getPool());\\n    address[] memory reserves = pool.getReservesList();\\n    AggregatedReserveIncentiveData[]\\n      memory reservesIncentiveData = new AggregatedReserveIncentiveData[](reserves.length);\\n    // Iterate through the reserves to get all the information from the (a/s/v) Tokens\\n    for (uint256 i = 0; i < reserves.length; i++) {\\n      AggregatedReserveIncentiveData memory reserveIncentiveData = reservesIncentiveData[i];\\n      reserveIncentiveData.underlyingAsset = reserves[i];\\n\\n      DataTypes.ReserveData memory baseData = pool.getReserveData(reserves[i]);\\n\\n      // Get aTokens rewards information\\n      // TODO: check that this is deployed correctly on contract and remove casting\\n      IRewardsController aTokenIncentiveController = IRewardsController(\\n        address(IncentivizedERC20(baseData.aTokenAddress).getIncentivesController())\\n      );\\n      RewardInfo[] memory aRewardsInformation;\\n      if (address(aTokenIncentiveController) != address(0)) {\\n        address[] memory aTokenRewardAddresses = aTokenIncentiveController.getRewardsByAsset(\\n          baseData.aTokenAddress\\n        );\\n\\n        aRewardsInformation = new RewardInfo[](aTokenRewardAddresses.length);\\n        for (uint256 j = 0; j < aTokenRewardAddresses.length; ++j) {\\n          RewardInfo memory rewardInformation;\\n          rewardInformation.rewardTokenAddress = aTokenRewardAddresses[j];\\n\\n          (\\n            rewardInformation.tokenIncentivesIndex,\\n            rewardInformation.emissionPerSecond,\\n            rewardInformation.incentivesLastUpdateTimestamp,\\n            rewardInformation.emissionEndTimestamp\\n          ) = aTokenIncentiveController.getRewardsData(\\n            baseData.aTokenAddress,\\n            rewardInformation.rewardTokenAddress\\n          );\\n\\n          rewardInformation.precision = aTokenIncentiveController.getAssetDecimals(\\n            baseData.aTokenAddress\\n          );\\n          rewardInformation.rewardTokenDecimals = IERC20Detailed(\\n            rewardInformation.rewardTokenAddress\\n          ).decimals();\\n          rewardInformation.rewardTokenSymbol = IERC20Detailed(rewardInformation.rewardTokenAddress)\\n            .symbol();\\n\\n          // Get price of reward token from Chainlink Proxy Oracle\\n          rewardInformation.rewardOracleAddress = aTokenIncentiveController.getRewardOracle(\\n            rewardInformation.rewardTokenAddress\\n          );\\n          rewardInformation.priceFeedDecimals = IEACAggregatorProxy(\\n            rewardInformation.rewardOracleAddress\\n          ).decimals();\\n          rewardInformation.rewardPriceFeed = IEACAggregatorProxy(\\n            rewardInformation.rewardOracleAddress\\n          ).latestAnswer();\\n\\n          aRewardsInformation[j] = rewardInformation;\\n        }\\n      }\\n\\n      reserveIncentiveData.aIncentiveData = IncentiveData(\\n        baseData.aTokenAddress,\\n        address(aTokenIncentiveController),\\n        aRewardsInformation\\n      );\\n\\n      // Get vTokens rewards information\\n      IRewardsController vTokenIncentiveController = IRewardsController(\\n        address(IncentivizedERC20(baseData.variableDebtTokenAddress).getIncentivesController())\\n      );\\n      RewardInfo[] memory vRewardsInformation;\\n      if (address(vTokenIncentiveController) != address(0)) {\\n        address[] memory vTokenRewardAddresses = vTokenIncentiveController.getRewardsByAsset(\\n          baseData.variableDebtTokenAddress\\n        );\\n        vRewardsInformation = new RewardInfo[](vTokenRewardAddresses.length);\\n        for (uint256 j = 0; j < vTokenRewardAddresses.length; ++j) {\\n          RewardInfo memory rewardInformation;\\n          rewardInformation.rewardTokenAddress = vTokenRewardAddresses[j];\\n\\n          (\\n            rewardInformation.tokenIncentivesIndex,\\n            rewardInformation.emissionPerSecond,\\n            rewardInformation.incentivesLastUpdateTimestamp,\\n            rewardInformation.emissionEndTimestamp\\n          ) = vTokenIncentiveController.getRewardsData(\\n            baseData.variableDebtTokenAddress,\\n            rewardInformation.rewardTokenAddress\\n          );\\n\\n          rewardInformation.precision = vTokenIncentiveController.getAssetDecimals(\\n            baseData.variableDebtTokenAddress\\n          );\\n          rewardInformation.rewardTokenDecimals = IERC20Detailed(\\n            rewardInformation.rewardTokenAddress\\n          ).decimals();\\n          rewardInformation.rewardTokenSymbol = IERC20Detailed(rewardInformation.rewardTokenAddress)\\n            .symbol();\\n\\n          // Get price of reward token from Chainlink Proxy Oracle\\n          rewardInformation.rewardOracleAddress = vTokenIncentiveController.getRewardOracle(\\n            rewardInformation.rewardTokenAddress\\n          );\\n          rewardInformation.priceFeedDecimals = IEACAggregatorProxy(\\n            rewardInformation.rewardOracleAddress\\n          ).decimals();\\n          rewardInformation.rewardPriceFeed = IEACAggregatorProxy(\\n            rewardInformation.rewardOracleAddress\\n          ).latestAnswer();\\n\\n          vRewardsInformation[j] = rewardInformation;\\n        }\\n      }\\n\\n      reserveIncentiveData.vIncentiveData = IncentiveData(\\n        baseData.variableDebtTokenAddress,\\n        address(vTokenIncentiveController),\\n        vRewardsInformation\\n      );\\n\\n      // Get sTokens rewards information\\n      IRewardsController sTokenIncentiveController = IRewardsController(\\n        address(IncentivizedERC20(baseData.stableDebtTokenAddress).getIncentivesController())\\n      );\\n      RewardInfo[] memory sRewardsInformation;\\n      if (address(sTokenIncentiveController) != address(0)) {\\n        address[] memory sTokenRewardAddresses = sTokenIncentiveController.getRewardsByAsset(\\n          baseData.stableDebtTokenAddress\\n        );\\n        sRewardsInformation = new RewardInfo[](sTokenRewardAddresses.length);\\n        for (uint256 j = 0; j < sTokenRewardAddresses.length; ++j) {\\n          RewardInfo memory rewardInformation;\\n          rewardInformation.rewardTokenAddress = sTokenRewardAddresses[j];\\n\\n          (\\n            rewardInformation.tokenIncentivesIndex,\\n            rewardInformation.emissionPerSecond,\\n            rewardInformation.incentivesLastUpdateTimestamp,\\n            rewardInformation.emissionEndTimestamp\\n          ) = sTokenIncentiveController.getRewardsData(\\n            baseData.stableDebtTokenAddress,\\n            rewardInformation.rewardTokenAddress\\n          );\\n\\n          rewardInformation.precision = sTokenIncentiveController.getAssetDecimals(\\n            baseData.stableDebtTokenAddress\\n          );\\n          rewardInformation.rewardTokenDecimals = IERC20Detailed(\\n            rewardInformation.rewardTokenAddress\\n          ).decimals();\\n          rewardInformation.rewardTokenSymbol = IERC20Detailed(rewardInformation.rewardTokenAddress)\\n            .symbol();\\n\\n          // Get price of reward token from Chainlink Proxy Oracle\\n          rewardInformation.rewardOracleAddress = sTokenIncentiveController.getRewardOracle(\\n            rewardInformation.rewardTokenAddress\\n          );\\n          rewardInformation.priceFeedDecimals = IEACAggregatorProxy(\\n            rewardInformation.rewardOracleAddress\\n          ).decimals();\\n          rewardInformation.rewardPriceFeed = IEACAggregatorProxy(\\n            rewardInformation.rewardOracleAddress\\n          ).latestAnswer();\\n\\n          sRewardsInformation[j] = rewardInformation;\\n        }\\n      }\\n\\n      reserveIncentiveData.sIncentiveData = IncentiveData(\\n        baseData.stableDebtTokenAddress,\\n        address(sTokenIncentiveController),\\n        sRewardsInformation\\n      );\\n    }\\n\\n    return (reservesIncentiveData);\\n  }\\n\\n  function getUserReservesIncentivesData(\\n    IPoolAddressesProvider provider,\\n    address user\\n  ) external view override returns (UserReserveIncentiveData[] memory) {\\n    return _getUserReservesIncentivesData(provider, user);\\n  }\\n\\n  function _getUserReservesIncentivesData(\\n    IPoolAddressesProvider provider,\\n    address user\\n  ) private view returns (UserReserveIncentiveData[] memory) {\\n    IPool pool = IPool(provider.getPool());\\n    address[] memory reserves = pool.getReservesList();\\n\\n    UserReserveIncentiveData[] memory userReservesIncentivesData = new UserReserveIncentiveData[](\\n      user != address(0) ? reserves.length : 0\\n    );\\n\\n    for (uint256 i = 0; i < reserves.length; i++) {\\n      DataTypes.ReserveData memory baseData = pool.getReserveData(reserves[i]);\\n\\n      // user reserve data\\n      userReservesIncentivesData[i].underlyingAsset = reserves[i];\\n\\n      IRewardsController aTokenIncentiveController = IRewardsController(\\n        address(IncentivizedERC20(baseData.aTokenAddress).getIncentivesController())\\n      );\\n      if (address(aTokenIncentiveController) != address(0)) {\\n        // get all rewards information from the asset\\n        address[] memory aTokenRewardAddresses = aTokenIncentiveController.getRewardsByAsset(\\n          baseData.aTokenAddress\\n        );\\n        UserRewardInfo[] memory aUserRewardsInformation = new UserRewardInfo[](\\n          aTokenRewardAddresses.length\\n        );\\n        for (uint256 j = 0; j < aTokenRewardAddresses.length; ++j) {\\n          UserRewardInfo memory userRewardInformation;\\n          userRewardInformation.rewardTokenAddress = aTokenRewardAddresses[j];\\n\\n          userRewardInformation.tokenIncentivesUserIndex = aTokenIncentiveController\\n            .getUserAssetIndex(\\n              user,\\n              baseData.aTokenAddress,\\n              userRewardInformation.rewardTokenAddress\\n            );\\n\\n          userRewardInformation.userUnclaimedRewards = aTokenIncentiveController\\n            .getUserAccruedRewards(user, userRewardInformation.rewardTokenAddress);\\n          userRewardInformation.rewardTokenDecimals = IERC20Detailed(\\n            userRewardInformation.rewardTokenAddress\\n          ).decimals();\\n          userRewardInformation.rewardTokenSymbol = IERC20Detailed(\\n            userRewardInformation.rewardTokenAddress\\n          ).symbol();\\n\\n          // Get price of reward token from Chainlink Proxy Oracle\\n          userRewardInformation.rewardOracleAddress = aTokenIncentiveController.getRewardOracle(\\n            userRewardInformation.rewardTokenAddress\\n          );\\n          userRewardInformation.priceFeedDecimals = IEACAggregatorProxy(\\n            userRewardInformation.rewardOracleAddress\\n          ).decimals();\\n          userRewardInformation.rewardPriceFeed = IEACAggregatorProxy(\\n            userRewardInformation.rewardOracleAddress\\n          ).latestAnswer();\\n\\n          aUserRewardsInformation[j] = userRewardInformation;\\n        }\\n\\n        userReservesIncentivesData[i].aTokenIncentivesUserData = UserIncentiveData(\\n          baseData.aTokenAddress,\\n          address(aTokenIncentiveController),\\n          aUserRewardsInformation\\n        );\\n      }\\n\\n      // variable debt token\\n      IRewardsController vTokenIncentiveController = IRewardsController(\\n        address(IncentivizedERC20(baseData.variableDebtTokenAddress).getIncentivesController())\\n      );\\n      if (address(vTokenIncentiveController) != address(0)) {\\n        // get all rewards information from the asset\\n        address[] memory vTokenRewardAddresses = vTokenIncentiveController.getRewardsByAsset(\\n          baseData.variableDebtTokenAddress\\n        );\\n        UserRewardInfo[] memory vUserRewardsInformation = new UserRewardInfo[](\\n          vTokenRewardAddresses.length\\n        );\\n        for (uint256 j = 0; j < vTokenRewardAddresses.length; ++j) {\\n          UserRewardInfo memory userRewardInformation;\\n          userRewardInformation.rewardTokenAddress = vTokenRewardAddresses[j];\\n\\n          userRewardInformation.tokenIncentivesUserIndex = vTokenIncentiveController\\n            .getUserAssetIndex(\\n              user,\\n              baseData.variableDebtTokenAddress,\\n              userRewardInformation.rewardTokenAddress\\n            );\\n\\n          userRewardInformation.userUnclaimedRewards = vTokenIncentiveController\\n            .getUserAccruedRewards(user, userRewardInformation.rewardTokenAddress);\\n          userRewardInformation.rewardTokenDecimals = IERC20Detailed(\\n            userRewardInformation.rewardTokenAddress\\n          ).decimals();\\n          userRewardInformation.rewardTokenSymbol = IERC20Detailed(\\n            userRewardInformation.rewardTokenAddress\\n          ).symbol();\\n\\n          // Get price of reward token from Chainlink Proxy Oracle\\n          userRewardInformation.rewardOracleAddress = vTokenIncentiveController.getRewardOracle(\\n            userRewardInformation.rewardTokenAddress\\n          );\\n          userRewardInformation.priceFeedDecimals = IEACAggregatorProxy(\\n            userRewardInformation.rewardOracleAddress\\n          ).decimals();\\n          userRewardInformation.rewardPriceFeed = IEACAggregatorProxy(\\n            userRewardInformation.rewardOracleAddress\\n          ).latestAnswer();\\n\\n          vUserRewardsInformation[j] = userRewardInformation;\\n        }\\n\\n        userReservesIncentivesData[i].vTokenIncentivesUserData = UserIncentiveData(\\n          baseData.variableDebtTokenAddress,\\n          address(aTokenIncentiveController),\\n          vUserRewardsInformation\\n        );\\n      }\\n\\n      // stable debt token\\n      IRewardsController sTokenIncentiveController = IRewardsController(\\n        address(IncentivizedERC20(baseData.stableDebtTokenAddress).getIncentivesController())\\n      );\\n      if (address(sTokenIncentiveController) != address(0)) {\\n        // get all rewards information from the asset\\n        address[] memory sTokenRewardAddresses = sTokenIncentiveController.getRewardsByAsset(\\n          baseData.stableDebtTokenAddress\\n        );\\n        UserRewardInfo[] memory sUserRewardsInformation = new UserRewardInfo[](\\n          sTokenRewardAddresses.length\\n        );\\n        for (uint256 j = 0; j < sTokenRewardAddresses.length; ++j) {\\n          UserRewardInfo memory userRewardInformation;\\n          userRewardInformation.rewardTokenAddress = sTokenRewardAddresses[j];\\n\\n          userRewardInformation.tokenIncentivesUserIndex = sTokenIncentiveController\\n            .getUserAssetIndex(\\n              user,\\n              baseData.stableDebtTokenAddress,\\n              userRewardInformation.rewardTokenAddress\\n            );\\n\\n          userRewardInformation.userUnclaimedRewards = sTokenIncentiveController\\n            .getUserAccruedRewards(user, userRewardInformation.rewardTokenAddress);\\n          userRewardInformation.rewardTokenDecimals = IERC20Detailed(\\n            userRewardInformation.rewardTokenAddress\\n          ).decimals();\\n          userRewardInformation.rewardTokenSymbol = IERC20Detailed(\\n            userRewardInformation.rewardTokenAddress\\n          ).symbol();\\n\\n          // Get price of reward token from Chainlink Proxy Oracle\\n          userRewardInformation.rewardOracleAddress = sTokenIncentiveController.getRewardOracle(\\n            userRewardInformation.rewardTokenAddress\\n          );\\n          userRewardInformation.priceFeedDecimals = IEACAggregatorProxy(\\n            userRewardInformation.rewardOracleAddress\\n          ).decimals();\\n          userRewardInformation.rewardPriceFeed = IEACAggregatorProxy(\\n            userRewardInformation.rewardOracleAddress\\n          ).latestAnswer();\\n\\n          sUserRewardsInformation[j] = userRewardInformation;\\n        }\\n\\n        userReservesIncentivesData[i].sTokenIncentivesUserData = UserIncentiveData(\\n          baseData.stableDebtTokenAddress,\\n          address(aTokenIncentiveController),\\n          sUserRewardsInformation\\n        );\\n      }\\n    }\\n\\n    return (userReservesIncentivesData);\\n  }\\n}\\n\",\"keccak256\":\"0xbcb80570f7c344a242bcc23b3c0b918a0b2d3f90fc6ed39a3c6c0d8bac9932e4\",\"license\":\"AGPL-3.0\"},\"contracts/misc/interfaces/IEACAggregatorProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IEACAggregatorProxy {\\n  function decimals() external view returns (uint8);\\n\\n  function latestAnswer() external view returns (int256);\\n\\n  function latestTimestamp() external view returns (uint256);\\n\\n  function latestRound() external view returns (uint256);\\n\\n  function getAnswer(uint256 roundId) external view returns (int256);\\n\\n  function getTimestamp(uint256 roundId) external view returns (uint256);\\n\\n  event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 timestamp);\\n  event NewRound(uint256 indexed roundId, address indexed startedBy);\\n}\\n\",\"keccak256\":\"0x75bb34641419925730f87eeb122521b34cfd953b800212c362770ed1c7c5d719\",\"license\":\"AGPL-3.0\"},\"contracts/misc/interfaces/IUiIncentiveDataProviderV3.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\\n\\ninterface IUiIncentiveDataProviderV3 {\\n  struct AggregatedReserveIncentiveData {\\n    address underlyingAsset;\\n    IncentiveData aIncentiveData;\\n    IncentiveData vIncentiveData;\\n    IncentiveData sIncentiveData;\\n  }\\n\\n  struct IncentiveData {\\n    address tokenAddress;\\n    address incentiveControllerAddress;\\n    RewardInfo[] rewardsTokenInformation;\\n  }\\n\\n  struct RewardInfo {\\n    string rewardTokenSymbol;\\n    address rewardTokenAddress;\\n    address rewardOracleAddress;\\n    uint256 emissionPerSecond;\\n    uint256 incentivesLastUpdateTimestamp;\\n    uint256 tokenIncentivesIndex;\\n    uint256 emissionEndTimestamp;\\n    int256 rewardPriceFeed;\\n    uint8 rewardTokenDecimals;\\n    uint8 precision;\\n    uint8 priceFeedDecimals;\\n  }\\n\\n  struct UserReserveIncentiveData {\\n    address underlyingAsset;\\n    UserIncentiveData aTokenIncentivesUserData;\\n    UserIncentiveData vTokenIncentivesUserData;\\n    UserIncentiveData sTokenIncentivesUserData;\\n  }\\n\\n  struct UserIncentiveData {\\n    address tokenAddress;\\n    address incentiveControllerAddress;\\n    UserRewardInfo[] userRewardsInformation;\\n  }\\n\\n  struct UserRewardInfo {\\n    string rewardTokenSymbol;\\n    address rewardOracleAddress;\\n    address rewardTokenAddress;\\n    uint256 userUnclaimedRewards;\\n    uint256 tokenIncentivesUserIndex;\\n    int256 rewardPriceFeed;\\n    uint8 priceFeedDecimals;\\n    uint8 rewardTokenDecimals;\\n  }\\n\\n  function getReservesIncentivesData(\\n    IPoolAddressesProvider provider\\n  ) external view returns (AggregatedReserveIncentiveData[] memory);\\n\\n  function getUserReservesIncentivesData(\\n    IPoolAddressesProvider provider,\\n    address user\\n  ) external view returns (UserReserveIncentiveData[] memory);\\n\\n  // generic method with full data\\n  function getFullReservesIncentiveData(\\n    IPoolAddressesProvider provider,\\n    address user\\n  )\\n    external\\n    view\\n    returns (AggregatedReserveIncentiveData[] memory, UserReserveIncentiveData[] memory);\\n}\\n\",\"keccak256\":\"0xc8ff3f617c8ecd9b18a8ecc3530798e8034d9e0f6c5c5bcf92a055aec230cddc\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/IRewardsController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IRewardsDistributor} from './IRewardsDistributor.sol';\\nimport {ITransferStrategyBase} from './ITransferStrategyBase.sol';\\nimport {IEACAggregatorProxy} from '../../misc/interfaces/IEACAggregatorProxy.sol';\\nimport {RewardsDataTypes} from '../libraries/RewardsDataTypes.sol';\\n\\n/**\\n * @title IRewardsController\\n * @author Aave\\n * @notice Defines the basic interface for a Rewards Controller.\\n */\\ninterface IRewardsController is IRewardsDistributor {\\n  /**\\n   * @dev Emitted when a new address is whitelisted as claimer of rewards on behalf of a user\\n   * @param user The address of the user\\n   * @param claimer The address of the claimer\\n   */\\n  event ClaimerSet(address indexed user, address indexed claimer);\\n\\n  /**\\n   * @dev Emitted when rewards are claimed\\n   * @param user The address of the user rewards has been claimed on behalf of\\n   * @param reward The address of the token reward is claimed\\n   * @param to The address of the receiver of the rewards\\n   * @param claimer The address of the claimer\\n   * @param amount The amount of rewards claimed\\n   */\\n  event RewardsClaimed(\\n    address indexed user,\\n    address indexed reward,\\n    address indexed to,\\n    address claimer,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @dev Emitted when a transfer strategy is installed for the reward distribution\\n   * @param reward The address of the token reward\\n   * @param transferStrategy The address of TransferStrategy contract\\n   */\\n  event TransferStrategyInstalled(address indexed reward, address indexed transferStrategy);\\n\\n  /**\\n   * @dev Emitted when the reward oracle is updated\\n   * @param reward The address of the token reward\\n   * @param rewardOracle The address of oracle\\n   */\\n  event RewardOracleUpdated(address indexed reward, address indexed rewardOracle);\\n\\n  /**\\n   * @dev Whitelists an address to claim the rewards on behalf of another address\\n   * @param user The address of the user\\n   * @param claimer The address of the claimer\\n   */\\n  function setClaimer(address user, address claimer) external;\\n\\n  /**\\n   * @dev Sets a TransferStrategy logic contract that determines the logic of the rewards transfer\\n   * @param reward The address of the reward token\\n   * @param transferStrategy The address of the TransferStrategy logic contract\\n   */\\n  function setTransferStrategy(address reward, ITransferStrategyBase transferStrategy) external;\\n\\n  /**\\n   * @dev Sets an Aave Oracle contract to enforce rewards with a source of value.\\n   * @notice At the moment of reward configuration, the Incentives Controller performs\\n   * a check to see if the reward asset oracle is compatible with IEACAggregator proxy.\\n   * This check is enforced for integrators to be able to show incentives at\\n   * the current Aave UI without the need to setup an external price registry\\n   * @param reward The address of the reward to set the price aggregator\\n   * @param rewardOracle The address of price aggregator that follows IEACAggregatorProxy interface\\n   */\\n  function setRewardOracle(address reward, IEACAggregatorProxy rewardOracle) external;\\n\\n  /**\\n   * @dev Get the price aggregator oracle address\\n   * @param reward The address of the reward\\n   * @return The price oracle of the reward\\n   */\\n  function getRewardOracle(address reward) external view returns (address);\\n\\n  /**\\n   * @dev Returns the whitelisted claimer for a certain address (0x0 if not set)\\n   * @param user The address of the user\\n   * @return The claimer address\\n   */\\n  function getClaimer(address user) external view returns (address);\\n\\n  /**\\n   * @dev Returns the Transfer Strategy implementation contract address being used for a reward address\\n   * @param reward The address of the reward\\n   * @return The address of the TransferStrategy contract\\n   */\\n  function getTransferStrategy(address reward) external view returns (address);\\n\\n  /**\\n   * @dev Configure assets to incentivize with an emission of rewards per second until the end of distribution.\\n   * @param config The assets configuration input, the list of structs contains the following fields:\\n   *   uint104 emissionPerSecond: The emission per second following rewards unit decimals.\\n   *   uint256 totalSupply: The total supply of the asset to incentivize\\n   *   uint40 distributionEnd: The end of the distribution of the incentives for an asset\\n   *   address asset: The asset address to incentivize\\n   *   address reward: The reward token address\\n   *   ITransferStrategy transferStrategy: The TransferStrategy address with the install hook and claim logic.\\n   *   IEACAggregatorProxy rewardOracle: The Price Oracle of a reward to visualize the incentives at the UI Frontend.\\n   *                                     Must follow Chainlink Aggregator IEACAggregatorProxy interface to be compatible.\\n   */\\n  function configureAssets(RewardsDataTypes.RewardsConfigInput[] memory config) external;\\n\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   **/\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n\\n  /**\\n   * @dev Claims reward for a user to the desired address, on all the assets of the pool, accumulating the pending rewards\\n   * @param assets List of assets to check eligible distributions before claiming rewards\\n   * @param amount The amount of rewards to claim\\n   * @param to The address that will be receiving the rewards\\n   * @param reward The address of the reward token\\n   * @return The amount of rewards claimed\\n   **/\\n  function claimRewards(\\n    address[] calldata assets,\\n    uint256 amount,\\n    address to,\\n    address reward\\n  ) external returns (uint256);\\n\\n  /**\\n   * @dev Claims reward for a user on behalf, on all the assets of the pool, accumulating the pending rewards. The\\n   * caller must be whitelisted via \\\"allowClaimOnBehalf\\\" function by the RewardsAdmin role manager\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @param amount The amount of rewards to claim\\n   * @param user The address to check and claim rewards\\n   * @param to The address that will be receiving the rewards\\n   * @param reward The address of the reward token\\n   * @return The amount of rewards claimed\\n   **/\\n  function claimRewardsOnBehalf(\\n    address[] calldata assets,\\n    uint256 amount,\\n    address user,\\n    address to,\\n    address reward\\n  ) external returns (uint256);\\n\\n  /**\\n   * @dev Claims reward for msg.sender, on all the assets of the pool, accumulating the pending rewards\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @param amount The amount of rewards to claim\\n   * @param reward The address of the reward token\\n   * @return The amount of rewards claimed\\n   **/\\n  function claimRewardsToSelf(\\n    address[] calldata assets,\\n    uint256 amount,\\n    address reward\\n  ) external returns (uint256);\\n\\n  /**\\n   * @dev Claims all rewards for a user to the desired address, on all the assets of the pool, accumulating the pending rewards\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @param to The address that will be receiving the rewards\\n   * @return rewardsList List of addresses of the reward tokens\\n   * @return claimedAmounts List that contains the claimed amount per reward, following same order as \\\"rewardList\\\"\\n   **/\\n  function claimAllRewards(\\n    address[] calldata assets,\\n    address to\\n  ) external returns (address[] memory rewardsList, uint256[] memory claimedAmounts);\\n\\n  /**\\n   * @dev Claims all rewards for a user on behalf, on all the assets of the pool, accumulating the pending rewards. The caller must\\n   * be whitelisted via \\\"allowClaimOnBehalf\\\" function by the RewardsAdmin role manager\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @param user The address to check and claim rewards\\n   * @param to The address that will be receiving the rewards\\n   * @return rewardsList List of addresses of the reward tokens\\n   * @return claimedAmounts List that contains the claimed amount per reward, following same order as \\\"rewardsList\\\"\\n   **/\\n  function claimAllRewardsOnBehalf(\\n    address[] calldata assets,\\n    address user,\\n    address to\\n  ) external returns (address[] memory rewardsList, uint256[] memory claimedAmounts);\\n\\n  /**\\n   * @dev Claims all reward for msg.sender, on all the assets of the pool, accumulating the pending rewards\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @return rewardsList List of addresses of the reward tokens\\n   * @return claimedAmounts List that contains the claimed amount per reward, following same order as \\\"rewardsList\\\"\\n   **/\\n  function claimAllRewardsToSelf(\\n    address[] calldata assets\\n  ) external returns (address[] memory rewardsList, uint256[] memory claimedAmounts);\\n}\\n\",\"keccak256\":\"0xe8a4d4ea914cbbcd3f6a4e5420a34d01f1379b2d445bd98fc7f8004c69894f5d\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/IRewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title IRewardsDistributor\\n * @author Aave\\n * @notice Defines the basic interface for a Rewards Distributor.\\n */\\ninterface IRewardsDistributor {\\n  /**\\n   * @dev Emitted when the configuration of the rewards of an asset is updated.\\n   * @param asset The address of the incentivized asset\\n   * @param reward The address of the reward token\\n   * @param oldEmission The old emissions per second value of the reward distribution\\n   * @param newEmission The new emissions per second value of the reward distribution\\n   * @param oldDistributionEnd The old end timestamp of the reward distribution\\n   * @param newDistributionEnd The new end timestamp of the reward distribution\\n   * @param assetIndex The index of the asset distribution\\n   */\\n  event AssetConfigUpdated(\\n    address indexed asset,\\n    address indexed reward,\\n    uint256 oldEmission,\\n    uint256 newEmission,\\n    uint256 oldDistributionEnd,\\n    uint256 newDistributionEnd,\\n    uint256 assetIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when rewards of an asset are accrued on behalf of a user.\\n   * @param asset The address of the incentivized asset\\n   * @param reward The address of the reward token\\n   * @param user The address of the user that rewards are accrued on behalf of\\n   * @param assetIndex The index of the asset distribution\\n   * @param userIndex The index of the asset distribution on behalf of the user\\n   * @param rewardsAccrued The amount of rewards accrued\\n   */\\n  event Accrued(\\n    address indexed asset,\\n    address indexed reward,\\n    address indexed user,\\n    uint256 assetIndex,\\n    uint256 userIndex,\\n    uint256 rewardsAccrued\\n  );\\n\\n  /**\\n   * @dev Sets the end date for the distribution\\n   * @param asset The asset to incentivize\\n   * @param reward The reward token that incentives the asset\\n   * @param newDistributionEnd The end date of the incentivization, in unix time format\\n   **/\\n  function setDistributionEnd(address asset, address reward, uint32 newDistributionEnd) external;\\n\\n  /**\\n   * @dev Sets the emission per second of a set of reward distributions\\n   * @param asset The asset is being incentivized\\n   * @param rewards List of reward addresses are being distributed\\n   * @param newEmissionsPerSecond List of new reward emissions per second\\n   */\\n  function setEmissionPerSecond(\\n    address asset,\\n    address[] calldata rewards,\\n    uint88[] calldata newEmissionsPerSecond\\n  ) external;\\n\\n  /**\\n   * @dev Gets the end date for the distribution\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The timestamp with the end of the distribution, in unix time format\\n   **/\\n  function getDistributionEnd(address asset, address reward) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the index of a user on a reward distribution\\n   * @param user Address of the user\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The current user asset index, not including new distributions\\n   **/\\n  function getUserAssetIndex(\\n    address user,\\n    address asset,\\n    address reward\\n  ) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the configuration of the distribution reward for a certain asset\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The index of the asset distribution\\n   * @return The emission per second of the reward distribution\\n   * @return The timestamp of the last update of the index\\n   * @return The timestamp of the distribution end\\n   **/\\n  function getRewardsData(\\n    address asset,\\n    address reward\\n  ) external view returns (uint256, uint256, uint256, uint256);\\n\\n  /**\\n   * @dev Calculates the next value of an specific distribution index, with validations.\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The old index of the asset distribution\\n   * @return The new index of the asset distribution\\n   **/\\n  function getAssetIndex(address asset, address reward) external view returns (uint256, uint256);\\n\\n  /**\\n   * @dev Returns the list of available reward token addresses of an incentivized asset\\n   * @param asset The incentivized asset\\n   * @return List of rewards addresses of the input asset\\n   **/\\n  function getRewardsByAsset(address asset) external view returns (address[] memory);\\n\\n  /**\\n   * @dev Returns the list of available reward addresses\\n   * @return List of rewards supported in this contract\\n   **/\\n  function getRewardsList() external view returns (address[] memory);\\n\\n  /**\\n   * @dev Returns the accrued rewards balance of a user, not including virtually accrued rewards since last distribution.\\n   * @param user The address of the user\\n   * @param reward The address of the reward token\\n   * @return Unclaimed rewards, not including new distributions\\n   **/\\n  function getUserAccruedRewards(address user, address reward) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns a single rewards balance of a user, including virtually accrued and unrealized claimable rewards.\\n   * @param assets List of incentivized assets to check eligible distributions\\n   * @param user The address of the user\\n   * @param reward The address of the reward token\\n   * @return The rewards amount\\n   **/\\n  function getUserRewards(\\n    address[] calldata assets,\\n    address user,\\n    address reward\\n  ) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns a list all rewards of a user, including already accrued and unrealized claimable rewards\\n   * @param assets List of incentivized assets to check eligible distributions\\n   * @param user The address of the user\\n   * @return The list of reward addresses\\n   * @return The list of unclaimed amount of rewards\\n   **/\\n  function getAllUserRewards(\\n    address[] calldata assets,\\n    address user\\n  ) external view returns (address[] memory, uint256[] memory);\\n\\n  /**\\n   * @dev Returns the decimals of an asset to calculate the distribution delta\\n   * @param asset The address to retrieve decimals\\n   * @return The decimals of an underlying asset\\n   */\\n  function getAssetDecimals(address asset) external view returns (uint8);\\n\\n  /**\\n   * @dev Returns the address of the emission manager\\n   * @return The address of the EmissionManager\\n   */\\n  function EMISSION_MANAGER() external view returns (address);\\n\\n  /**\\n   * @dev Returns the address of the emission manager.\\n   * Deprecated: This getter is maintained for compatibility purposes. Use the `EMISSION_MANAGER()` function instead.\\n   * @return The address of the EmissionManager\\n   */\\n  function getEmissionManager() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd393efd85f696114f9ab69e6bfdcbf3a2bcf16ef5002516d56a0f0359e3d9bba\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/ITransferStrategyBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface ITransferStrategyBase {\\n  event EmergencyWithdrawal(\\n    address indexed caller,\\n    address indexed token,\\n    address indexed to,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @dev Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation\\n   * @param to Account to transfer rewards\\n   * @param reward Address of the reward token\\n   * @param amount Amount to transfer to the \\\"to\\\" address parameter\\n   * @return Returns true bool if transfer logic succeeds\\n   */\\n  function performTransfer(address to, address reward, uint256 amount) external returns (bool);\\n\\n  /**\\n   * @return Returns the address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view returns (address);\\n\\n  /**\\n   * @return Returns the address of the Rewards admin\\n   */\\n  function getRewardsAdmin() external view returns (address);\\n\\n  /**\\n   * @dev Perform an emergency token withdrawal only callable by the Rewards admin\\n   * @param token Address of the token to withdraw funds from this contract\\n   * @param to Address of the recipient of the withdrawal\\n   * @param amount Amount of the withdrawal\\n   */\\n  function emergencyWithdrawal(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0xa52a6dc237879acbed7325787ce58238a3afd626fa2ed827d4e321d2e4ef51ad\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/libraries/RewardsDataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {ITransferStrategyBase} from '../interfaces/ITransferStrategyBase.sol';\\nimport {IEACAggregatorProxy} from '../../misc/interfaces/IEACAggregatorProxy.sol';\\n\\nlibrary RewardsDataTypes {\\n  struct RewardsConfigInput {\\n    uint88 emissionPerSecond;\\n    uint256 totalSupply;\\n    uint32 distributionEnd;\\n    address asset;\\n    address reward;\\n    ITransferStrategyBase transferStrategy;\\n    IEACAggregatorProxy rewardOracle;\\n  }\\n\\n  struct UserAssetBalance {\\n    address asset;\\n    uint256 userBalance;\\n    uint256 totalSupply;\\n  }\\n\\n  struct UserData {\\n    // Liquidity index of the reward distribution for the user\\n    uint104 index;\\n    // Amount of accrued rewards for the user since last user index update\\n    uint128 accrued;\\n  }\\n\\n  struct RewardData {\\n    // Liquidity index of the reward distribution\\n    uint104 index;\\n    // Amount of reward tokens distributed per second\\n    uint88 emissionPerSecond;\\n    // Timestamp of the last reward index update\\n    uint32 lastUpdateTimestamp;\\n    // The end of the distribution of rewards (in seconds)\\n    uint32 distributionEnd;\\n    // Map of user addresses and their rewards data (userAddress => userData)\\n    mapping(address => UserData) usersData;\\n  }\\n\\n  struct AssetData {\\n    // Map of reward token addresses and their data (rewardTokenAddress => rewardData)\\n    mapping(address => RewardData) rewards;\\n    // List of reward token addresses for the asset\\n    mapping(uint128 => address) availableRewards;\\n    // Count of reward tokens for the asset\\n    uint128 availableRewardsCount;\\n    // Number of decimals of the asset\\n    uint8 decimals;\\n  }\\n}\\n\",\"keccak256\":\"0xaaa314b4e9f40878f4fd20e99075fe60309c9e223a5b8c244aaaeb7229d8c318\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/misc/UiPoolDataProviderV3.sol":{"UiPoolDataProviderV3":{"abi":[{"inputs":[{"internalType":"contract IEACAggregatorProxy","name":"_networkBaseTokenPriceInUsdProxyAggregator","type":"address"},{"internalType":"contract IEACAggregatorProxy","name":"_marketReferenceCurrencyPriceInUsdProxyAggregator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ETH_CURRENCY_UNIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MKR_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_bytes32","type":"bytes32"}],"name":"bytes32ToString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"name":"getReservesData","outputs":[{"components":[{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"uint256","name":"baseLTVasCollateral","type":"uint256"},{"internalType":"uint256","name":"reserveLiquidationThreshold","type":"uint256"},{"internalType":"uint256","name":"reserveLiquidationBonus","type":"uint256"},{"internalType":"uint256","name":"reserveFactor","type":"uint256"},{"internalType":"bool","name":"usageAsCollateralEnabled","type":"bool"},{"internalType":"bool","name":"borrowingEnabled","type":"bool"},{"internalType":"bool","name":"stableBorrowRateEnabled","type":"bool"},{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"bool","name":"isFrozen","type":"bool"},{"internalType":"uint128","name":"liquidityIndex","type":"uint128"},{"internalType":"uint128","name":"variableBorrowIndex","type":"uint128"},{"internalType":"uint128","name":"liquidityRate","type":"uint128"},{"internalType":"uint128","name":"variableBorrowRate","type":"uint128"},{"internalType":"uint128","name":"stableBorrowRate","type":"uint128"},{"internalType":"uint40","name":"lastUpdateTimestamp","type":"uint40"},{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtTokenAddress","type":"address"},{"internalType":"address","name":"variableDebtTokenAddress","type":"address"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"},{"internalType":"uint256","name":"availableLiquidity","type":"uint256"},{"internalType":"uint256","name":"totalPrincipalStableDebt","type":"uint256"},{"internalType":"uint256","name":"averageStableRate","type":"uint256"},{"internalType":"uint256","name":"stableDebtLastUpdateTimestamp","type":"uint256"},{"internalType":"uint256","name":"totalScaledVariableDebt","type":"uint256"},{"internalType":"uint256","name":"priceInMarketReferenceCurrency","type":"uint256"},{"internalType":"address","name":"priceOracle","type":"address"},{"internalType":"uint256","name":"variableRateSlope1","type":"uint256"},{"internalType":"uint256","name":"variableRateSlope2","type":"uint256"},{"internalType":"uint256","name":"stableRateSlope1","type":"uint256"},{"internalType":"uint256","name":"stableRateSlope2","type":"uint256"},{"internalType":"uint256","name":"baseStableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"baseVariableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"optimalUsageRatio","type":"uint256"},{"internalType":"bool","name":"isPaused","type":"bool"},{"internalType":"bool","name":"isSiloedBorrowing","type":"bool"},{"internalType":"uint128","name":"accruedToTreasury","type":"uint128"},{"internalType":"uint128","name":"unbacked","type":"uint128"},{"internalType":"uint128","name":"isolationModeTotalDebt","type":"uint128"},{"internalType":"bool","name":"flashLoanEnabled","type":"bool"},{"internalType":"uint256","name":"debtCeiling","type":"uint256"},{"internalType":"uint256","name":"debtCeilingDecimals","type":"uint256"},{"internalType":"uint8","name":"eModeCategoryId","type":"uint8"},{"internalType":"uint256","name":"borrowCap","type":"uint256"},{"internalType":"uint256","name":"supplyCap","type":"uint256"},{"internalType":"uint16","name":"eModeLtv","type":"uint16"},{"internalType":"uint16","name":"eModeLiquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"eModeLiquidationBonus","type":"uint16"},{"internalType":"address","name":"eModePriceSource","type":"address"},{"internalType":"string","name":"eModeLabel","type":"string"},{"internalType":"bool","name":"borrowableInIsolation","type":"bool"}],"internalType":"struct IUiPoolDataProviderV3.AggregatedReserveData[]","name":"","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"marketReferenceCurrencyUnit","type":"uint256"},{"internalType":"int256","name":"marketReferenceCurrencyPriceInUsd","type":"int256"},{"internalType":"int256","name":"networkBaseTokenPriceInUsd","type":"int256"},{"internalType":"uint8","name":"networkBaseTokenPriceDecimals","type":"uint8"}],"internalType":"struct IUiPoolDataProviderV3.BaseCurrencyInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"name":"getReservesList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getUserReservesData","outputs":[{"components":[{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"uint256","name":"scaledATokenBalance","type":"uint256"},{"internalType":"bool","name":"usageAsCollateralEnabledOnUser","type":"bool"},{"internalType":"uint256","name":"stableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"scaledVariableDebt","type":"uint256"},{"internalType":"uint256","name":"principalStableDebt","type":"uint256"},{"internalType":"uint256","name":"stableBorrowLastUpdateTimestamp","type":"uint256"}],"internalType":"struct IUiPoolDataProviderV3.UserReserveData[]","name":"","type":"tuple[]"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketReferenceCurrencyPriceInUsdProxyAggregator","outputs":[{"internalType":"contract IEACAggregatorProxy","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"networkBaseTokenPriceInUsdProxyAggregator","outputs":[{"internalType":"contract IEACAggregatorProxy","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_32558":{"entryPoint":null,"id":32558,"parameterSlots":2,"returnSlots":0},"abi_decode_contract_IEACAggregatorProxy_fromMemory":{"entryPoint":76,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_contract$_IEACAggregatorProxy_$34482t_contract$_IEACAggregatorProxy_$34482_fromMemory":{"entryPoint":105,"id":null,"parameterSlots":2,"returnSlots":2}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:612:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"95:117:201","statements":[{"nodeType":"YulAssignment","src":"105:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"120:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"114:5:201"},"nodeType":"YulFunctionCall","src":"114:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"105:5:201"}]},{"body":{"nodeType":"YulBlock","src":"190:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"199:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"202:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"192:6:201"},"nodeType":"YulFunctionCall","src":"192:12:201"},"nodeType":"YulExpressionStatement","src":"192:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"149:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"160:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"175:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"180:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"171:3:201"},"nodeType":"YulFunctionCall","src":"171:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"184:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"167:3:201"},"nodeType":"YulFunctionCall","src":"167:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"156:3:201"},"nodeType":"YulFunctionCall","src":"156:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"146:2:201"},"nodeType":"YulFunctionCall","src":"146:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"139:6:201"},"nodeType":"YulFunctionCall","src":"139:50:201"},"nodeType":"YulIf","src":"136:70:201"}]},"name":"abi_decode_contract_IEACAggregatorProxy_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"74:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"85:5:201","type":""}],"src":"14:198:201"},{"body":{"nodeType":"YulBlock","src":"373:237:201","statements":[{"body":{"nodeType":"YulBlock","src":"419:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"428:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"431:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"421:6:201"},"nodeType":"YulFunctionCall","src":"421:12:201"},"nodeType":"YulExpressionStatement","src":"421:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"394:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"403:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"390:3:201"},"nodeType":"YulFunctionCall","src":"390:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"415:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"386:3:201"},"nodeType":"YulFunctionCall","src":"386:32:201"},"nodeType":"YulIf","src":"383:52:201"},{"nodeType":"YulAssignment","src":"444:71:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"505:9:201"}],"functionName":{"name":"abi_decode_contract_IEACAggregatorProxy_fromMemory","nodeType":"YulIdentifier","src":"454:50:201"},"nodeType":"YulFunctionCall","src":"454:61:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"444:6:201"}]},{"nodeType":"YulAssignment","src":"524:80:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"589:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"600:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"585:3:201"},"nodeType":"YulFunctionCall","src":"585:18:201"}],"functionName":{"name":"abi_decode_contract_IEACAggregatorProxy_fromMemory","nodeType":"YulIdentifier","src":"534:50:201"},"nodeType":"YulFunctionCall","src":"534:70:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"524:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IEACAggregatorProxy_$34482t_contract$_IEACAggregatorProxy_$34482_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"331:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"342:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"354:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"362:6:201","type":""}],"src":"217:393:201"}]},"contents":"{\n    { }\n    function abi_decode_contract_IEACAggregatorProxy_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IEACAggregatorProxy_$34482t_contract$_IEACAggregatorProxy_$34482_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_contract_IEACAggregatorProxy_fromMemory(headStart)\n        value1 := abi_decode_contract_IEACAggregatorProxy_fromMemory(add(headStart, 32))\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60c06040523480156200001157600080fd5b5060405162002f2438038062002f24833981016040819052620000349162000069565b6001600160a01b039182166080521660a052620000a1565b80516001600160a01b03811681146200006457600080fd5b919050565b600080604083850312156200007d57600080fd5b62000088836200004c565b915062000098602084016200004c565b90509250929050565b60805160a051612e49620000db6000396000818161017c015261207701526000818160b401528181611e7b0152611f130152612e496000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063825ffd921161005b578063825ffd921461013c5780639201de5514610157578063d22cf68a14610177578063ec489c211461019e57600080fd5b80630496f53a1461008d5780633c1740ed146100af57806351974cc0146100fb578063586c14421461011c575b600080fd5b61009c670de0b6b3a764000081565b6040519081526020015b60405180910390f35b6100d67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a6565b61010e61010936600461225a565b6101bf565b6040516100a6929190612293565b61012f61012a36600461233f565b6109c4565b6040516100a6919061235c565b6100d6739f8f72aa9304c8b593d555f12ef6589cc3a579a281565b61016a6101653660046123b6565b610ab3565b6040516100a6919061242b565b6100d67f000000000000000000000000000000000000000000000000000000000000000081565b6101b16101ac36600461233f565b610c2b565b6040516100a692919061243e565b60606000808473ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561020f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610233919061280c565b905060008173ffffffffffffffffffffffffffffffffffffffff1663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610282573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102aa91908101906128d6565b6040517f4417a58300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152919250600091841690634417a58390602401602060405180830381865afa15801561031c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034091906129ca565b6040517feddf1b7900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015291925060009185169063eddf1b7990602401602060405180830381865afa1580156103b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d691906129e6565b9050600073ffffffffffffffffffffffffffffffffffffffff88166103fc5760006103ff565b83515b67ffffffffffffffff81111561041757610417612829565b6040519080825280602002602001820160405280156104a057816020015b61048d6040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600015158152602001600081526020016000815260200160008152602001600081525090565b8152602001906001900390816104355790505b50905060005b84518110156109b65760008673ffffffffffffffffffffffffffffffffffffffff166335ea6a758784815181106104df576104df6129ff565b60200260200101516040518263ffffffff1660e01b815260040161051f919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6101e060405180830381865afa15801561053d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105619190612a75565b9050858281518110610575576105756129ff565b602002602001015183838151811061058f5761058f6129ff565b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff91821690526101008201516040517f1da24f3e0000000000000000000000000000000000000000000000000000000081528c83166004820152911690631da24f3e90602401602060405180830381865afa158015610611573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063591906129e6565b838381518110610647576106476129ff565b602090810291909101810151015261065f8583612126565b838381518110610671576106716129ff565b602090810291909101015190151560409091015261068f85836121b3565b156109a3576101408101516040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015290911690631da24f3e90602401602060405180830381865afa158015610707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072b91906129e6565b83838151811061073d5761073d6129ff565b6020908102919091010151608001526101208101516040517fc634dfaa00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c811660048301529091169063c634dfaa90602401602060405180830381865afa1580156107bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e391906129e6565b8383815181106107f5576107f56129ff565b602002602001015160a0018181525050828281518110610817576108176129ff565b602002602001015160a001516000146109a3576101208101516040517fe78c9b3b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c811660048301529091169063e78c9b3b90602401602060405180830381865afa15801561089d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c191906129e6565b8383815181106108d3576108d36129ff565b6020908102919091010151606001526101208101516040517f79ce6b8c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c81166004830152909116906379ce6b8c90602401602060405180830381865afa158015610955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109799190612b98565b64ffffffffff16838381518110610992576109926129ff565b602002602001015160c00181815250505b50806109ae81612be2565b9150506104a6565b509890975095505050505050565b606060008273ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a37919061280c565b90508073ffffffffffffffffffffffffffffffffffffffff1663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610a84573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610aac91908101906128d6565b9392505050565b606060005b60208160ff16108015610b045750828160ff1660208110610adb57610adb6129ff565b1a60f81b7fff000000000000000000000000000000000000000000000000000000000000001615155b15610b1b5780610b1381612c1b565b915050610ab8565b60008160ff1667ffffffffffffffff811115610b3957610b39612829565b6040519080825280601f01601f191660200182016040528015610b63576020820181803683370190505b509050600091505b60208260ff16108015610bb75750838260ff1660208110610b8e57610b8e6129ff565b1a60f81b7fff000000000000000000000000000000000000000000000000000000000000001615155b15610aac57838260ff1660208110610bd157610bd16129ff565b1a60f81b818360ff1681518110610bea57610bea6129ff565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535081610c2381612c1b565b925050610b6b565b6060610c5b6040518060800160405280600081526020016000815260200160008152602001600060ff1681525090565b60008373ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ca8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccc919061280c565b905060008473ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f919061280c565b905060008573ffffffffffffffffffffffffffffffffffffffff1663e860accb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db2919061280c565b905060008273ffffffffffffffffffffffffffffffffffffffff1663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610e01573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e2991908101906128d6565b90506000815167ffffffffffffffff811115610e4757610e47612829565b60405190808252806020026020018201604052801561104357816020015b604080516106c0810182526000808252606060208084018290529383018190528083018290526080830182905260a0830182905260c0830182905260e08301829052610100830182905261012083018290526101408301829052610160830182905261018083018290526101a083018290526101c083018290526101e08301829052610200830182905261022083018290526102408301829052610260830182905261028083018290526102a083018290526102c083018290526102e08301829052610300830182905261032083018290526103408301829052610360830182905261038083018290526103a083018290526103c083018290526103e08301829052610400830182905261042083018290526104408301829052610460830182905261048083018290526104a083018290526104c083018290526104e08301829052610500830182905261052083018290526105408301829052610560830182905261058083018290526105a083018290526105c083018290526105e0830182905261060083018290526106208301829052610640830182905261066083018290526106808301526106a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610e655790505b50905060005b8251811015611e4a576000828281518110611066576110666129ff565b60200260200101519050838281518110611082576110826129ff565b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff9081168083526040517f35ea6a7500000000000000000000000000000000000000000000000000000000815260048101919091526000918816906335ea6a75906024016101e060405180830381865afa158015611103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111279190612a75565b60208101516fffffffffffffffffffffffffffffffff9081166101a0850152606082015181166101c085015260408083015182166101e08601526080830151821661020086015260a083015190911661022085015260c082015164ffffffffff1661024085015261010082015173ffffffffffffffffffffffffffffffffffffffff908116610260860152610120830151811661028086015261014083015181166102a086015261016083015181166102c0860152845191517fb3596f0700000000000000000000000000000000000000000000000000000000815291811660048301529192509089169063b3596f0790602401602060405180830381865afa158015611238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125c91906129e6565b61038083015281516040517f92bf2be000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908916906392bf2be090602401602060405180830381865afa1580156112d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f5919061280c565b73ffffffffffffffffffffffffffffffffffffffff9081166103a084015282516102608401516040517f70a0823100000000000000000000000000000000000000000000000000000000815290831660048201529116906370a0823190602401602060405180830381865afa158015611372573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139691906129e6565b826102e001818152505081610280015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa1580156113f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114149190612c3b565b64ffffffffff16610340860152610320850152506103008301526102a0820151604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169163b1bf962d916004808201926020929091908290030181865afa1580156114a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c591906129e6565b610360830152815173ffffffffffffffffffffffffffffffffffffffff16739f8f72aa9304c8b593d555f12ef6589cc3a579a21415611610576000826000015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401602060405180830381865afa15801561154f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157391906129e6565b90506000836000015173ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ea91906129e6565b90506115f582610ab3565b604085015261160381610ab3565b60208501525061170c9050565b816000015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561165f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116879190810190612ce6565b8260400181905250816000015173ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156116de573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117069190810190612ce6565b60208301525b8051805161ffff604082811c821660e087015260ff603084901c81166060880152602084811c841660c0890152601085901c841660a08901529284166080880181905215156101008801528451671000000000000000811615156104a08901526708000000000000008116151561014089015267040000000000000081161515610120890152670200000000000000811615156101808901526701000000000000001615156101608801526102c087015182517f0b3429a2000000000000000000000000000000000000000000000000000000008152925160a89590951c9091169373ffffffffffffffffffffffffffffffffffffffff90911692630b3429a292600480820193918290030181865afa925050508015611849575060408051601f3d908101601f19168201909252611846918101906129e6565b60015b61185257611859565b6103c08501525b836102c0015173ffffffffffffffffffffffffffffffffffffffff1663f42024096040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156118c5575060408051601f3d908101601f191682019092526118c2918101906129e6565b60015b6118ce576118d5565b6103e08501525b836102c0015173ffffffffffffffffffffffffffffffffffffffff1663d5cd73916040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611941575060408051601f3d908101601f1916820190925261193e918101906129e6565b60015b61194a57611951565b6104008501525b836102c0015173ffffffffffffffffffffffffffffffffffffffff166314e32da46040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156119bd575060408051601f3d908101601f191682019092526119ba918101906129e6565b60015b6119c6576119cd565b6104208501525b836102c0015173ffffffffffffffffffffffffffffffffffffffff1663acd786866040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a39575060408051601f3d908101601f19168201909252611a36918101906129e6565b60015b611a4257611a49565b6104408501525b836102c0015173ffffffffffffffffffffffffffffffffffffffff166334762ca56040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611ab5575060408051601f3d908101601f19168201909252611ab2918101906129e6565b60015b611abe57611ac5565b6104608501525b836102c0015173ffffffffffffffffffffffffffffffffffffffff166354c365c66040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611b31575060408051601f3d908101601f19168201909252611b2e918101906129e6565b60015b611b3a57611b41565b6104808501525b60ff81166105a0850152815160d41c64ffffffffff16846105600181815250508773ffffffffffffffffffffffffffffffffffffffff166369b169e16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd091906129e6565b6105808501528151640fffffffff605082901c81169160741c166105e08601526105c085015283516040517fd7ed3ef400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063d7ed3ef490602401602060405180830381865afa925050508015611c81575060408051601f3d908101601f19168201909252611c7e91810190612d1b565b60015b611cc3573d808015611caf576040519150601f19603f3d011682016040523d82523d6000602084013e611cb4565b606091505b50506001610540850152611ccc565b15156105408501525b815167400000000000000016151515156104c08501526101a08301516fffffffffffffffffffffffffffffffff9081166105008601526101c08401518116610520860152610180840151166104e08501526105a08401516040517f6c6f6ae100000000000000000000000000000000000000000000000000000000815260ff909116600482015260009073ffffffffffffffffffffffffffffffffffffffff8b1690636c6f6ae190602401600060405180830381865afa158015611d94573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dbc9190810190612d3d565b805161ffff90811661060088015260208201518116610620880152604082015116610640870152606081015173ffffffffffffffffffffffffffffffffffffffff1661066087015260808101516106808701529050611e25835167200000000000000016151590565b15156106a09095019490945250839250611e429150829050612be2565b915050611049565b50611e796040518060800160405280600081526020016000815260200160008152602001600060ff1681525090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ee4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0891906129e6565b8160400181815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa09190612df0565b60ff166060820152604080517f8c89b64f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691638c89b64f9160048083019260209291908290030181865afa92505050801561202f575060408051601f3d908101601f1916820190925261202c918101906129e6565b60015b61210f573d80801561205d576040519150601f19603f3d011682016040523d82523d6000602084013e612062565b606091505b50670de0b6b3a76400008260000181815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210491906129e6565b602083015250612118565b80825260208201525b909890975095505050505050565b60408051808201909152600281527f37340000000000000000000000000000000000000000000000000000000000006020820152600090608083106121a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612198919061242b565b60405180910390fd5b50509051600191821b82011c16151590565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612225576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612198919061242b565b50509051600191821b1c16151590565b73ffffffffffffffffffffffffffffffffffffffff8116811461225757600080fd5b50565b6000806040838503121561226d57600080fd5b823561227881612235565b9150602083013561228881612235565b809150509250929050565b6040808252835182820181905260009190606090818501906020808901865b83811015612320578151805173ffffffffffffffffffffffffffffffffffffffff16865283810151848701528781015115158887015286810151878701526080808201519087015260a0808201519087015260c0908101519086015260e090940193908201906001016122b2565b50508295506123338188018960ff169052565b50505050509392505050565b60006020828403121561235157600080fd5b8135610aac81612235565b6020808252825182820181905260009190848201906040850190845b818110156123aa57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101612378565b50909695505050505050565b6000602082840312156123c857600080fd5b5035919050565b60005b838110156123ea5781810151838201526020016123d2565b838111156123f9576000848401525b50505050565b600081518084526124178160208601602086016123cf565b601f01601f19169290920160200192915050565b602081526000610aac60208301846123ff565b600060a080830181845280865180835260c092508286019150828160051b8701016020808a0160005b848110156127ba578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff400186528151805173ffffffffffffffffffffffffffffffffffffffff1685526106c08482015181868801526124ca828801826123ff565b915050604080830151878303828901526124e483826123ff565b606085810151908a0152608080860151908a01528c8501518d8a01528b8501518c8a015260e080860151908a0152610100808601511515908a0152610120808601511515908a0152610140808601511515908a0152610160808601511515908a0152610180808601511515908a01526101a0808601516fffffffffffffffffffffffffffffffff908116918b01919091526101c0808701518216908b01526101e0808701518216908b0152610200808701518216908b0152610220808701518216908b01526102408087015164ffffffffff16908b01526102608087015173ffffffffffffffffffffffffffffffffffffffff908116918c0191909152610280808801518216908c01526102a0808801518216908c01526102c0808801518216908c01526102e080880151908c015261030080880151908c015261032080880151908c015261034080880151908c015261036080880151908c015261038080880151908c01526103a0808801518216908c01526103c080880151908c01526103e080880151908c015261040080880151908c015261042080880151908c015261044080880151908c015261046080880151908c015261048080880151908c01526104a0808801511515908c01526104c0808801511515908c01526104e0808801518316908c0152610500808801518316908c015261052080880151909216918b0191909152610540808701511515908b015261056080870151908b015261058080870151908b01526105a08087015160ff16908b01526105c080870151908b01526105e080870151908b01526106008087015161ffff908116918c0191909152610620808801518216908c015261064080880151909116908b015261066080870151909116908a0152610680808601518a8303828c01529194509250905061278c83826123ff565b925050506106a08083015192506127a68188018415159052565b509684019694505090820190600101612467565b50508196506127ef8189018a80518252602081015160208301526040810151604083015260ff60608201511660608301525050565b5050505050509392505050565b805161280781612235565b919050565b60006020828403121561281e57600080fd5b8151610aac81612235565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff8111828210171561287c5761287c612829565b60405290565b60405160a0810167ffffffffffffffff8111828210171561287c5761287c612829565b604051601f8201601f1916810167ffffffffffffffff811182821017156128ce576128ce612829565b604052919050565b600060208083850312156128e957600080fd5b825167ffffffffffffffff8082111561290157600080fd5b818501915085601f83011261291557600080fd5b81518181111561292757612927612829565b8060051b91506129388483016128a5565b818152918301840191848101908884111561295257600080fd5b938501935b8385101561297c578451925061296c83612235565b8282529385019390850190612957565b98975050505050505050565b60006020828403121561299a57600080fd5b6040516020810181811067ffffffffffffffff821117156129bd576129bd612829565b6040529151825250919050565b6000602082840312156129dc57600080fd5b610aac8383612988565b6000602082840312156129f857600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461280757600080fd5b805164ffffffffff8116811461280757600080fd5b805161ffff8116811461280757600080fd5b60006101e08284031215612a8857600080fd5b612a90612858565b612a9a8484612988565b8152612aa860208401612a2e565b6020820152612ab960408401612a2e565b6040820152612aca60608401612a2e565b6060820152612adb60808401612a2e565b6080820152612aec60a08401612a2e565b60a0820152612afd60c08401612a4e565b60c0820152612b0e60e08401612a63565b60e0820152610100612b218185016127fc565b90820152610120612b338482016127fc565b90820152610140612b458482016127fc565b90820152610160612b578482016127fc565b90820152610180612b69848201612a2e565b908201526101a0612b7b848201612a2e565b908201526101c0612b8d848201612a2e565b908201529392505050565b600060208284031215612baa57600080fd5b610aac82612a4e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612c1457612c14612bb3565b5060010190565b600060ff821660ff811415612c3257612c32612bb3565b60010192915050565b60008060008060808587031215612c5157600080fd5b845193506020850151925060408501519150612c6f60608601612a4e565b905092959194509250565b600082601f830112612c8b57600080fd5b815167ffffffffffffffff811115612ca557612ca5612829565b612cb86020601f19601f840116016128a5565b818152846020838601011115612ccd57600080fd5b612cde8260208301602087016123cf565b949350505050565b600060208284031215612cf857600080fd5b815167ffffffffffffffff811115612d0f57600080fd5b612cde84828501612c7a565b600060208284031215612d2d57600080fd5b81518015158114610aac57600080fd5b600060208284031215612d4f57600080fd5b815167ffffffffffffffff80821115612d6757600080fd5b9083019060a08286031215612d7b57600080fd5b612d83612882565b612d8c83612a63565b8152612d9a60208401612a63565b6020820152612dab60408401612a63565b60408201526060830151612dbe81612235565b6060820152608083015182811115612dd557600080fd5b612de187828601612c7a565b60808301525095945050505050565b600060208284031215612e0257600080fd5b815160ff81168114610aac57600080fdfea264697066735822122064141f2b3a8990922c5319ddf6e5b1729666732cfc5485969196ed880b91ed9664736f6c634300080a0033","opcodes":"PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2F24 CODESIZE SUB DUP1 PUSH3 0x2F24 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x69 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x80 MSTORE AND PUSH1 0xA0 MSTORE PUSH3 0xA1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x7D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x88 DUP4 PUSH3 0x4C JUMP JUMPDEST SWAP2 POP PUSH3 0x98 PUSH1 0x20 DUP5 ADD PUSH3 0x4C JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH2 0x2E49 PUSH3 0xDB PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x17C ADD MSTORE PUSH2 0x2077 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH1 0xB4 ADD MSTORE DUP2 DUP2 PUSH2 0x1E7B ADD MSTORE PUSH2 0x1F13 ADD MSTORE PUSH2 0x2E49 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 0x825FFD92 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x825FFD92 EQ PUSH2 0x13C JUMPI DUP1 PUSH4 0x9201DE55 EQ PUSH2 0x157 JUMPI DUP1 PUSH4 0xD22CF68A EQ PUSH2 0x177 JUMPI DUP1 PUSH4 0xEC489C21 EQ PUSH2 0x19E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x496F53A EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x3C1740ED EQ PUSH2 0xAF JUMPI DUP1 PUSH4 0x51974CC0 EQ PUSH2 0xFB JUMPI DUP1 PUSH4 0x586C1442 EQ PUSH2 0x11C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9C PUSH8 0xDE0B6B3A7640000 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xD6 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xA6 JUMP JUMPDEST PUSH2 0x10E PUSH2 0x109 CALLDATASIZE PUSH1 0x4 PUSH2 0x225A JUMP JUMPDEST PUSH2 0x1BF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA6 SWAP3 SWAP2 SWAP1 PUSH2 0x2293 JUMP JUMPDEST PUSH2 0x12F PUSH2 0x12A CALLDATASIZE PUSH1 0x4 PUSH2 0x233F JUMP JUMPDEST PUSH2 0x9C4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA6 SWAP2 SWAP1 PUSH2 0x235C JUMP JUMPDEST PUSH2 0xD6 PUSH20 0x9F8F72AA9304C8B593D555F12EF6589CC3A579A2 DUP2 JUMP JUMPDEST PUSH2 0x16A PUSH2 0x165 CALLDATASIZE PUSH1 0x4 PUSH2 0x23B6 JUMP JUMPDEST PUSH2 0xAB3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA6 SWAP2 SWAP1 PUSH2 0x242B JUMP JUMPDEST PUSH2 0xD6 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x1B1 PUSH2 0x1AC CALLDATASIZE PUSH1 0x4 PUSH2 0x233F JUMP JUMPDEST PUSH2 0xC2B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA6 SWAP3 SWAP2 SWAP1 PUSH2 0x243E JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x233 SWAP2 SWAP1 PUSH2 0x280C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD1946DBC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x282 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2AA SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x28D6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4417A58300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP5 AND SWAP1 PUSH4 0x4417A583 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x31C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x340 SWAP2 SWAP1 PUSH2 0x29CA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xEDDF1B7900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP6 AND SWAP1 PUSH4 0xEDDF1B79 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3D6 SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x3FC JUMPI PUSH1 0x0 PUSH2 0x3FF JUMP JUMPDEST DUP4 MLOAD JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x417 JUMPI PUSH2 0x417 PUSH2 0x2829 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4A0 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x48D PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO 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 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x435 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x9B6 JUMPI PUSH1 0x0 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x35EA6A75 DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x4DF JUMPI PUSH2 0x4DF PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x53D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x561 SWAP2 SWAP1 PUSH2 0x2A75 JUMP JUMPDEST SWAP1 POP DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x575 JUMPI PUSH2 0x575 PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x58F JUMPI PUSH2 0x58F PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP13 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x611 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x635 SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x647 JUMPI PUSH2 0x647 PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD ADD MSTORE PUSH2 0x65F DUP6 DUP4 PUSH2 0x2126 JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x671 JUMPI PUSH2 0x671 PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD SWAP1 ISZERO ISZERO PUSH1 0x40 SWAP1 SWAP2 ADD MSTORE PUSH2 0x68F DUP6 DUP4 PUSH2 0x21B3 JUMP JUMPDEST ISZERO PUSH2 0x9A3 JUMPI PUSH2 0x140 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x707 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x72B SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x73D JUMPI PUSH2 0x73D PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH1 0x80 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xC634DFAA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xC634DFAA SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7E3 SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x7F5 JUMPI PUSH2 0x7F5 PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0xA0 ADD DUP2 DUP2 MSTORE POP POP DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x817 JUMPI PUSH2 0x817 PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0xA0 ADD MLOAD PUSH1 0x0 EQ PUSH2 0x9A3 JUMPI PUSH2 0x120 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xE78C9B3B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xE78C9B3B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x89D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8C1 SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x8D3 JUMPI PUSH2 0x8D3 PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH1 0x60 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x79CE6B8C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x79CE6B8C SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x955 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x979 SWAP2 SWAP1 PUSH2 0x2B98 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x992 JUMPI PUSH2 0x992 PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0xC0 ADD DUP2 DUP2 MSTORE POP POP JUMPDEST POP DUP1 PUSH2 0x9AE DUP2 PUSH2 0x2BE2 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x4A6 JUMP JUMPDEST POP SWAP9 SWAP1 SWAP8 POP SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA13 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA37 SWAP2 SWAP1 PUSH2 0x280C JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD1946DBC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA84 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xAAC SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x28D6 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 JUMPDEST PUSH1 0x20 DUP2 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0xB04 JUMPI POP DUP3 DUP2 PUSH1 0xFF AND PUSH1 0x20 DUP2 LT PUSH2 0xADB JUMPI PUSH2 0xADB PUSH2 0x29FF JUMP JUMPDEST BYTE PUSH1 0xF8 SHL PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xB1B JUMPI DUP1 PUSH2 0xB13 DUP2 PUSH2 0x2C1B JUMP JUMPDEST SWAP2 POP POP PUSH2 0xAB8 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB39 JUMPI PUSH2 0xB39 PUSH2 0x2829 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB63 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0xBB7 JUMPI POP DUP4 DUP3 PUSH1 0xFF AND PUSH1 0x20 DUP2 LT PUSH2 0xB8E JUMPI PUSH2 0xB8E PUSH2 0x29FF JUMP JUMPDEST BYTE PUSH1 0xF8 SHL PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xAAC JUMPI DUP4 DUP3 PUSH1 0xFF AND PUSH1 0x20 DUP2 LT PUSH2 0xBD1 JUMPI PUSH2 0xBD1 PUSH2 0x29FF JUMP JUMPDEST BYTE PUSH1 0xF8 SHL DUP2 DUP4 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0xBEA JUMPI PUSH2 0xBEA PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP DUP2 PUSH2 0xC23 DUP2 PUSH2 0x2C1B JUMP JUMPDEST SWAP3 POP POP PUSH2 0xB6B JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC5B PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCA8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCCC SWAP2 SWAP1 PUSH2 0x280C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD1B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD3F SWAP2 SWAP1 PUSH2 0x280C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xE860ACCB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD8E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDB2 SWAP2 SWAP1 PUSH2 0x280C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD1946DBC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE01 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xE29 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x28D6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xE47 JUMPI PUSH2 0xE47 PUSH2 0x2829 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1043 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x6C0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x60 PUSH1 0x20 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE SWAP4 DUP4 ADD DUP2 SWAP1 MSTORE DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x1A0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x1E0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x200 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x220 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x240 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x260 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x280 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x2A0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x2C0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x2E0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x300 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x320 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x340 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x360 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x380 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x3A0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x3C0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x3E0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x400 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x420 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x440 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x460 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x480 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x4A0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x4C0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x4E0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x500 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x520 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x540 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x560 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x580 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x5A0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x5C0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x5E0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x600 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x620 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x640 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x660 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x680 DUP4 ADD MSTORE PUSH2 0x6A0 DUP3 ADD MSTORE DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 ADD SWAP2 ADD DUP2 PUSH2 0xE65 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x1E4A JUMPI PUSH1 0x0 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1066 JUMPI PUSH2 0x1066 PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1082 JUMPI PUSH2 0x1082 PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP1 DUP4 MSTORE PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x0 SWAP2 DUP9 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1103 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1127 SWAP2 SWAP1 PUSH2 0x2A75 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1A0 DUP6 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD DUP2 AND PUSH2 0x1C0 DUP6 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD MLOAD DUP3 AND PUSH2 0x1E0 DUP7 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD DUP3 AND PUSH2 0x200 DUP7 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD SWAP1 SWAP2 AND PUSH2 0x220 DUP6 ADD MSTORE PUSH1 0xC0 DUP3 ADD MLOAD PUSH5 0xFFFFFFFFFF AND PUSH2 0x240 DUP6 ADD MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x260 DUP7 ADD MSTORE PUSH2 0x120 DUP4 ADD MLOAD DUP2 AND PUSH2 0x280 DUP7 ADD MSTORE PUSH2 0x140 DUP4 ADD MLOAD DUP2 AND PUSH2 0x2A0 DUP7 ADD MSTORE PUSH2 0x160 DUP4 ADD MLOAD DUP2 AND PUSH2 0x2C0 DUP7 ADD MSTORE DUP5 MLOAD SWAP2 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP3 POP SWAP1 DUP10 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1238 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x125C SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST PUSH2 0x380 DUP4 ADD MSTORE DUP2 MLOAD PUSH1 0x40 MLOAD PUSH32 0x92BF2BE000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP10 AND SWAP1 PUSH4 0x92BF2BE0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12F5 SWAP2 SWAP1 PUSH2 0x280C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x3A0 DUP5 ADD MSTORE DUP3 MLOAD PUSH2 0x260 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1372 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1396 SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST DUP3 PUSH2 0x2E0 ADD DUP2 DUP2 MSTORE POP POP DUP2 PUSH2 0x280 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x79774338 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13F0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1414 SWAP2 SWAP1 PUSH2 0x2C3B JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH2 0x340 DUP7 ADD MSTORE PUSH2 0x320 DUP6 ADD MSTORE POP PUSH2 0x300 DUP4 ADD MSTORE PUSH2 0x2A0 DUP3 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xB1BF962D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 PUSH4 0xB1BF962D SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14A1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14C5 SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST PUSH2 0x360 DUP4 ADD MSTORE DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x9F8F72AA9304C8B593D555F12EF6589CC3A579A2 EQ ISZERO PUSH2 0x1610 JUMPI PUSH1 0x0 DUP3 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x154F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1573 SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x6FDDE03 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15EA SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST SWAP1 POP PUSH2 0x15F5 DUP3 PUSH2 0xAB3 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MSTORE PUSH2 0x1603 DUP2 PUSH2 0xAB3 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE POP PUSH2 0x170C SWAP1 POP JUMP JUMPDEST DUP2 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x165F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1687 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2CE6 JUMP JUMPDEST DUP3 PUSH1 0x40 ADD DUP2 SWAP1 MSTORE POP DUP2 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x6FDDE03 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16DE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1706 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2CE6 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE JUMPDEST DUP1 MLOAD DUP1 MLOAD PUSH2 0xFFFF PUSH1 0x40 DUP3 DUP2 SHR DUP3 AND PUSH1 0xE0 DUP8 ADD MSTORE PUSH1 0xFF PUSH1 0x30 DUP5 SWAP1 SHR DUP2 AND PUSH1 0x60 DUP9 ADD MSTORE PUSH1 0x20 DUP5 DUP2 SHR DUP5 AND PUSH1 0xC0 DUP10 ADD MSTORE PUSH1 0x10 DUP6 SWAP1 SHR DUP5 AND PUSH1 0xA0 DUP10 ADD MSTORE SWAP3 DUP5 AND PUSH1 0x80 DUP9 ADD DUP2 SWAP1 MSTORE ISZERO ISZERO PUSH2 0x100 DUP9 ADD MSTORE DUP5 MLOAD PUSH8 0x1000000000000000 DUP2 AND ISZERO ISZERO PUSH2 0x4A0 DUP10 ADD MSTORE PUSH8 0x800000000000000 DUP2 AND ISZERO ISZERO PUSH2 0x140 DUP10 ADD MSTORE PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO PUSH2 0x120 DUP10 ADD MSTORE PUSH8 0x200000000000000 DUP2 AND ISZERO ISZERO PUSH2 0x180 DUP10 ADD MSTORE PUSH8 0x100000000000000 AND ISZERO ISZERO PUSH2 0x160 DUP9 ADD MSTORE PUSH2 0x2C0 DUP8 ADD MLOAD DUP3 MLOAD PUSH32 0xB3429A200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP3 MLOAD PUSH1 0xA8 SWAP6 SWAP1 SWAP6 SHR SWAP1 SWAP2 AND SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP3 PUSH4 0xB3429A2 SWAP3 PUSH1 0x4 DUP1 DUP3 ADD SWAP4 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1849 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x1846 SWAP2 DUP2 ADD SWAP1 PUSH2 0x29E6 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x1852 JUMPI PUSH2 0x1859 JUMP JUMPDEST PUSH2 0x3C0 DUP6 ADD MSTORE JUMPDEST DUP4 PUSH2 0x2C0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF4202409 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x18C5 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x18C2 SWAP2 DUP2 ADD SWAP1 PUSH2 0x29E6 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x18CE JUMPI PUSH2 0x18D5 JUMP JUMPDEST PUSH2 0x3E0 DUP6 ADD MSTORE JUMPDEST DUP4 PUSH2 0x2C0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD5CD7391 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1941 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x193E SWAP2 DUP2 ADD SWAP1 PUSH2 0x29E6 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x194A JUMPI PUSH2 0x1951 JUMP JUMPDEST PUSH2 0x400 DUP6 ADD MSTORE JUMPDEST DUP4 PUSH2 0x2C0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x14E32DA4 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x19BD JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x19BA SWAP2 DUP2 ADD SWAP1 PUSH2 0x29E6 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x19C6 JUMPI PUSH2 0x19CD JUMP JUMPDEST PUSH2 0x420 DUP6 ADD MSTORE JUMPDEST DUP4 PUSH2 0x2C0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xACD78686 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1A39 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x1A36 SWAP2 DUP2 ADD SWAP1 PUSH2 0x29E6 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x1A42 JUMPI PUSH2 0x1A49 JUMP JUMPDEST PUSH2 0x440 DUP6 ADD MSTORE JUMPDEST DUP4 PUSH2 0x2C0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x34762CA5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1AB5 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x1AB2 SWAP2 DUP2 ADD SWAP1 PUSH2 0x29E6 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x1ABE JUMPI PUSH2 0x1AC5 JUMP JUMPDEST PUSH2 0x460 DUP6 ADD MSTORE JUMPDEST DUP4 PUSH2 0x2C0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x54C365C6 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1B31 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x1B2E SWAP2 DUP2 ADD SWAP1 PUSH2 0x29E6 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x1B3A JUMPI PUSH2 0x1B41 JUMP JUMPDEST PUSH2 0x480 DUP6 ADD MSTORE JUMPDEST PUSH1 0xFF DUP2 AND PUSH2 0x5A0 DUP6 ADD MSTORE DUP2 MLOAD PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND DUP5 PUSH2 0x560 ADD DUP2 DUP2 MSTORE POP POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x69B169E1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BAC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1BD0 SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST PUSH2 0x580 DUP6 ADD MSTORE DUP2 MLOAD PUSH5 0xFFFFFFFFF PUSH1 0x50 DUP3 SWAP1 SHR DUP2 AND SWAP2 PUSH1 0x74 SHR AND PUSH2 0x5E0 DUP7 ADD MSTORE PUSH2 0x5C0 DUP6 ADD MSTORE DUP4 MLOAD PUSH1 0x40 MLOAD PUSH32 0xD7ED3EF400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP10 AND SWAP1 PUSH4 0xD7ED3EF4 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1C81 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x1C7E SWAP2 DUP2 ADD SWAP1 PUSH2 0x2D1B JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x1CC3 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x1CAF 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 0x1CB4 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP PUSH1 0x1 PUSH2 0x540 DUP6 ADD MSTORE PUSH2 0x1CCC JUMP JUMPDEST ISZERO ISZERO PUSH2 0x540 DUP6 ADD MSTORE JUMPDEST DUP2 MLOAD PUSH8 0x4000000000000000 AND ISZERO ISZERO ISZERO ISZERO PUSH2 0x4C0 DUP6 ADD MSTORE PUSH2 0x1A0 DUP4 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x500 DUP7 ADD MSTORE PUSH2 0x1C0 DUP5 ADD MLOAD DUP2 AND PUSH2 0x520 DUP7 ADD MSTORE PUSH2 0x180 DUP5 ADD MLOAD AND PUSH2 0x4E0 DUP6 ADD MSTORE PUSH2 0x5A0 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6C6F6AE100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0xFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH4 0x6C6F6AE1 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D94 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1DBC SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2D3D JUMP JUMPDEST DUP1 MLOAD PUSH2 0xFFFF SWAP1 DUP2 AND PUSH2 0x600 DUP9 ADD MSTORE PUSH1 0x20 DUP3 ADD MLOAD DUP2 AND PUSH2 0x620 DUP9 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH2 0x640 DUP8 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x660 DUP8 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH2 0x680 DUP8 ADD MSTORE SWAP1 POP PUSH2 0x1E25 DUP4 MLOAD PUSH8 0x2000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x6A0 SWAP1 SWAP6 ADD SWAP5 SWAP1 SWAP5 MSTORE POP DUP4 SWAP3 POP PUSH2 0x1E42 SWAP2 POP DUP3 SWAP1 POP PUSH2 0x2BE2 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1049 JUMP JUMPDEST POP PUSH2 0x1E79 PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x50D25BCD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1EE4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F08 SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST DUP2 PUSH1 0x40 ADD DUP2 DUP2 MSTORE POP POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F7C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1FA0 SWAP2 SWAP1 PUSH2 0x2DF0 JUMP JUMPDEST PUSH1 0xFF AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C89B64F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP2 PUSH4 0x8C89B64F SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x202F JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x202C SWAP2 DUP2 ADD SWAP1 PUSH2 0x29E6 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x210F JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x205D 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 0x2062 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 DUP3 PUSH1 0x0 ADD DUP2 DUP2 MSTORE POP POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x50D25BCD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20E0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2104 SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH2 0x2118 JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE JUMPDEST SWAP1 SWAP9 SWAP1 SWAP8 POP SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x21A1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2198 SWAP2 SWAP1 PUSH2 0x242B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL DUP3 ADD SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x2225 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2198 SWAP2 SWAP1 PUSH2 0x242B JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2257 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x226D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2278 DUP2 PUSH2 0x2235 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x2288 DUP2 PUSH2 0x2235 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 DUP3 MSTORE DUP4 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x60 SWAP1 DUP2 DUP6 ADD SWAP1 PUSH1 0x20 DUP1 DUP10 ADD DUP7 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2320 JUMPI DUP2 MLOAD DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 MSTORE DUP4 DUP2 ADD MLOAD DUP5 DUP8 ADD MSTORE DUP8 DUP2 ADD MLOAD ISZERO ISZERO DUP9 DUP8 ADD MSTORE DUP7 DUP2 ADD MLOAD DUP8 DUP8 ADD MSTORE PUSH1 0x80 DUP1 DUP3 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH1 0xA0 DUP1 DUP3 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH1 0xC0 SWAP1 DUP2 ADD MLOAD SWAP1 DUP7 ADD MSTORE PUSH1 0xE0 SWAP1 SWAP5 ADD SWAP4 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x22B2 JUMP JUMPDEST POP POP DUP3 SWAP6 POP PUSH2 0x2333 DUP2 DUP9 ADD DUP10 PUSH1 0xFF AND SWAP1 MSTORE JUMP JUMPDEST POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xAAC DUP2 PUSH2 0x2235 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 0x23AA JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2378 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x23C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x23EA JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x23D2 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x23F9 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x2417 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x23CF JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xAAC PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x23FF JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP7 MLOAD DUP1 DUP4 MSTORE PUSH1 0xC0 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD PUSH1 0x20 DUP1 DUP11 ADD PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x27BA JUMPI DUP10 DUP5 SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 ADD DUP7 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE PUSH2 0x6C0 DUP5 DUP3 ADD MLOAD DUP2 DUP7 DUP9 ADD MSTORE PUSH2 0x24CA DUP3 DUP9 ADD DUP3 PUSH2 0x23FF JUMP JUMPDEST SWAP2 POP POP PUSH1 0x40 DUP1 DUP4 ADD MLOAD DUP8 DUP4 SUB DUP3 DUP10 ADD MSTORE PUSH2 0x24E4 DUP4 DUP3 PUSH2 0x23FF JUMP JUMPDEST PUSH1 0x60 DUP6 DUP2 ADD MLOAD SWAP1 DUP11 ADD MSTORE PUSH1 0x80 DUP1 DUP7 ADD MLOAD SWAP1 DUP11 ADD MSTORE DUP13 DUP6 ADD MLOAD DUP14 DUP11 ADD MSTORE DUP12 DUP6 ADD MLOAD DUP13 DUP11 ADD MSTORE PUSH1 0xE0 DUP1 DUP7 ADD MLOAD SWAP1 DUP11 ADD MSTORE PUSH2 0x100 DUP1 DUP7 ADD MLOAD ISZERO ISZERO SWAP1 DUP11 ADD MSTORE PUSH2 0x120 DUP1 DUP7 ADD MLOAD ISZERO ISZERO SWAP1 DUP11 ADD MSTORE PUSH2 0x140 DUP1 DUP7 ADD MLOAD ISZERO ISZERO SWAP1 DUP11 ADD MSTORE PUSH2 0x160 DUP1 DUP7 ADD MLOAD ISZERO ISZERO SWAP1 DUP11 ADD MSTORE PUSH2 0x180 DUP1 DUP7 ADD MLOAD ISZERO ISZERO SWAP1 DUP11 ADD MSTORE PUSH2 0x1A0 DUP1 DUP7 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP12 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1C0 DUP1 DUP8 ADD MLOAD DUP3 AND SWAP1 DUP12 ADD MSTORE PUSH2 0x1E0 DUP1 DUP8 ADD MLOAD DUP3 AND SWAP1 DUP12 ADD MSTORE PUSH2 0x200 DUP1 DUP8 ADD MLOAD DUP3 AND SWAP1 DUP12 ADD MSTORE PUSH2 0x220 DUP1 DUP8 ADD MLOAD DUP3 AND SWAP1 DUP12 ADD MSTORE PUSH2 0x240 DUP1 DUP8 ADD MLOAD PUSH5 0xFFFFFFFFFF AND SWAP1 DUP12 ADD MSTORE PUSH2 0x260 DUP1 DUP8 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP13 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x280 DUP1 DUP9 ADD MLOAD DUP3 AND SWAP1 DUP13 ADD MSTORE PUSH2 0x2A0 DUP1 DUP9 ADD MLOAD DUP3 AND SWAP1 DUP13 ADD MSTORE PUSH2 0x2C0 DUP1 DUP9 ADD MLOAD DUP3 AND SWAP1 DUP13 ADD MSTORE PUSH2 0x2E0 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x300 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x320 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x340 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x360 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x380 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x3A0 DUP1 DUP9 ADD MLOAD DUP3 AND SWAP1 DUP13 ADD MSTORE PUSH2 0x3C0 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x3E0 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x400 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x420 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x440 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x460 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x480 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x4A0 DUP1 DUP9 ADD MLOAD ISZERO ISZERO SWAP1 DUP13 ADD MSTORE PUSH2 0x4C0 DUP1 DUP9 ADD MLOAD ISZERO ISZERO SWAP1 DUP13 ADD MSTORE PUSH2 0x4E0 DUP1 DUP9 ADD MLOAD DUP4 AND SWAP1 DUP13 ADD MSTORE PUSH2 0x500 DUP1 DUP9 ADD MLOAD DUP4 AND SWAP1 DUP13 ADD MSTORE PUSH2 0x520 DUP1 DUP9 ADD MLOAD SWAP1 SWAP3 AND SWAP2 DUP12 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x540 DUP1 DUP8 ADD MLOAD ISZERO ISZERO SWAP1 DUP12 ADD MSTORE PUSH2 0x560 DUP1 DUP8 ADD MLOAD SWAP1 DUP12 ADD MSTORE PUSH2 0x580 DUP1 DUP8 ADD MLOAD SWAP1 DUP12 ADD MSTORE PUSH2 0x5A0 DUP1 DUP8 ADD MLOAD PUSH1 0xFF AND SWAP1 DUP12 ADD MSTORE PUSH2 0x5C0 DUP1 DUP8 ADD MLOAD SWAP1 DUP12 ADD MSTORE PUSH2 0x5E0 DUP1 DUP8 ADD MLOAD SWAP1 DUP12 ADD MSTORE PUSH2 0x600 DUP1 DUP8 ADD MLOAD PUSH2 0xFFFF SWAP1 DUP2 AND SWAP2 DUP13 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x620 DUP1 DUP9 ADD MLOAD DUP3 AND SWAP1 DUP13 ADD MSTORE PUSH2 0x640 DUP1 DUP9 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP12 ADD MSTORE PUSH2 0x660 DUP1 DUP8 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP11 ADD MSTORE PUSH2 0x680 DUP1 DUP7 ADD MLOAD DUP11 DUP4 SUB DUP3 DUP13 ADD MSTORE SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x278C DUP4 DUP3 PUSH2 0x23FF JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x6A0 DUP1 DUP4 ADD MLOAD SWAP3 POP PUSH2 0x27A6 DUP2 DUP9 ADD DUP5 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST POP SWAP7 DUP5 ADD SWAP7 SWAP5 POP POP SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2467 JUMP JUMPDEST POP POP DUP2 SWAP7 POP PUSH2 0x27EF DUP2 DUP10 ADD DUP11 DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xFF PUSH1 0x60 DUP3 ADD MLOAD AND PUSH1 0x60 DUP4 ADD MSTORE POP POP JUMP JUMPDEST POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2807 DUP2 PUSH2 0x2235 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x281E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xAAC DUP2 PUSH2 0x2235 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x287C JUMPI PUSH2 0x287C PUSH2 0x2829 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x287C JUMPI PUSH2 0x287C PUSH2 0x2829 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x28CE JUMPI PUSH2 0x28CE PUSH2 0x2829 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x28E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2901 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2915 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x2927 JUMPI PUSH2 0x2927 PUSH2 0x2829 JUMP JUMPDEST DUP1 PUSH1 0x5 SHL SWAP2 POP PUSH2 0x2938 DUP5 DUP4 ADD PUSH2 0x28A5 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 DUP4 ADD DUP5 ADD SWAP2 DUP5 DUP2 ADD SWAP1 DUP9 DUP5 GT ISZERO PUSH2 0x2952 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP4 DUP6 LT ISZERO PUSH2 0x297C JUMPI DUP5 MLOAD SWAP3 POP PUSH2 0x296C DUP4 PUSH2 0x2235 JUMP JUMPDEST DUP3 DUP3 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP1 DUP6 ADD SWAP1 PUSH2 0x2957 JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x299A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x29BD JUMPI PUSH2 0x29BD PUSH2 0x2829 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x29DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAAC DUP4 DUP4 PUSH2 0x2988 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x29F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2807 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2807 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x2807 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2A88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2A90 PUSH2 0x2858 JUMP JUMPDEST PUSH2 0x2A9A DUP5 DUP5 PUSH2 0x2988 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x2AA8 PUSH1 0x20 DUP5 ADD PUSH2 0x2A2E JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2AB9 PUSH1 0x40 DUP5 ADD PUSH2 0x2A2E JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x2ACA PUSH1 0x60 DUP5 ADD PUSH2 0x2A2E JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x2ADB PUSH1 0x80 DUP5 ADD PUSH2 0x2A2E JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x2AEC PUSH1 0xA0 DUP5 ADD PUSH2 0x2A2E JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x2AFD PUSH1 0xC0 DUP5 ADD PUSH2 0x2A4E JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x2B0E PUSH1 0xE0 DUP5 ADD PUSH2 0x2A63 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x2B21 DUP2 DUP6 ADD PUSH2 0x27FC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x2B33 DUP5 DUP3 ADD PUSH2 0x27FC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x2B45 DUP5 DUP3 ADD PUSH2 0x27FC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x2B57 DUP5 DUP3 ADD PUSH2 0x27FC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x2B69 DUP5 DUP3 ADD PUSH2 0x2A2E JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x2B7B DUP5 DUP3 ADD PUSH2 0x2A2E JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x2B8D DUP5 DUP3 ADD PUSH2 0x2A2E JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2BAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAAC DUP3 PUSH2 0x2A4E JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x2C14 JUMPI PUSH2 0x2C14 PUSH2 0x2BB3 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND PUSH1 0xFF DUP2 EQ ISZERO PUSH2 0x2C32 JUMPI PUSH2 0x2C32 PUSH2 0x2BB3 JUMP JUMPDEST PUSH1 0x1 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2C51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x2C6F PUSH1 0x60 DUP7 ADD PUSH2 0x2A4E JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2C8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2CA5 JUMPI PUSH2 0x2CA5 PUSH2 0x2829 JUMP JUMPDEST PUSH2 0x2CB8 PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x28A5 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x2CCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2CDE DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x23CF JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2CF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2D0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2CDE DUP5 DUP3 DUP6 ADD PUSH2 0x2C7A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D2D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xAAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2D67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0xA0 DUP3 DUP7 SUB SLT ISZERO PUSH2 0x2D7B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2D83 PUSH2 0x2882 JUMP JUMPDEST PUSH2 0x2D8C DUP4 PUSH2 0x2A63 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x2D9A PUSH1 0x20 DUP5 ADD PUSH2 0x2A63 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2DAB PUSH1 0x40 DUP5 ADD PUSH2 0x2A63 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x2DBE DUP2 PUSH2 0x2235 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH2 0x2DD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2DE1 DUP8 DUP3 DUP7 ADD PUSH2 0x2C7A JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2E02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xAAC JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH5 0x141F2B3A89 SWAP1 SWAP3 0x2C MSTORE8 NOT 0xDD 0xF6 0xE5 0xB1 PUSH19 0x9666732CFC5485969196ED880B91ED9664736F PUSH13 0x634300080A0033000000000000 ","sourceMap":"1551:11043:155:-:0;;;2084:362;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2249:86:155;;;;;2341:100;;;1551:11043;;14:198:201;114:13;;-1:-1:-1;;;;;156:31:201;;146:42;;136:70;;202:1;199;192:12;136:70;14:198;;;:::o;217:393::-;354:6;362;415:2;403:9;394:7;390:23;386:32;383:52;;;431:1;428;421:12;383:52;454:61;505:9;454:61;:::i;:::-;444:71;;534:70;600:2;589:9;585:18;534:70;:::i;:::-;524:80;;217:393;;;;;:::o;:::-;1551:11043:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ETH_CURRENCY_UNIT_32537":{"entryPoint":null,"id":32537,"parameterSlots":0,"returnSlots":0},"@MKR_ADDRESS_32540":{"entryPoint":null,"id":32540,"parameterSlots":0,"returnSlots":0},"@bytes32ToString_33559":{"entryPoint":2739,"id":33559,"parameterSlots":1,"returnSlots":1},"@getBorrowableInIsolation_11133":{"entryPoint":null,"id":11133,"parameterSlots":1,"returnSlots":1},"@getCaps_11856":{"entryPoint":null,"id":11856,"parameterSlots":1,"returnSlots":2},"@getDebtCeiling_11491":{"entryPoint":null,"id":11491,"parameterSlots":1,"returnSlots":1},"@getFlags_11757":{"entryPoint":null,"id":11757,"parameterSlots":1,"returnSlots":5},"@getParams_11823":{"entryPoint":null,"id":11823,"parameterSlots":1,"returnSlots":6},"@getReservesData_33293":{"entryPoint":3115,"id":33293,"parameterSlots":1,"returnSlots":2},"@getReservesList_32582":{"entryPoint":2500,"id":32582,"parameterSlots":1,"returnSlots":1},"@getSiloedBorrowing_11183":{"entryPoint":null,"id":11183,"parameterSlots":1,"returnSlots":1},"@getUserReservesData_33495":{"entryPoint":447,"id":33495,"parameterSlots":2,"returnSlots":2},"@isBorrowing_12045":{"entryPoint":8627,"id":12045,"parameterSlots":2,"returnSlots":1},"@isUsingAsCollateral_12083":{"entryPoint":8486,"id":12083,"parameterSlots":2,"returnSlots":1},"@marketReferenceCurrencyPriceInUsdProxyAggregator_32534":{"entryPoint":null,"id":32534,"parameterSlots":0,"returnSlots":0},"@networkBaseTokenPriceInUsdProxyAggregator_32531":{"entryPoint":null,"id":32531,"parameterSlots":0,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":10236,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_string_fromMemory":{"entryPoint":11386,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_UserConfigurationMap_fromMemory":{"entryPoint":10632,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":10252,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr_fromMemory":{"entryPoint":10454,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":11547,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32":{"entryPoint":9142,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069":{"entryPoint":9023,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069t_address":{"entryPoint":8794,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_int256_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_string_memory_ptr_fromMemory":{"entryPoint":11494,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_EModeCategory_$21333_memory_ptr_fromMemory":{"entryPoint":11581,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory":{"entryPoint":10869,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_UserConfigurationMap_$21322_memory_ptr_fromMemory":{"entryPoint":10698,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":10726,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory":{"entryPoint":11323,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_uint40_fromMemory":{"entryPoint":11160,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint8_fromMemory":{"entryPoint":11760,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint128_fromMemory":{"entryPoint":10798,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint16_fromMemory":{"entryPoint":10851,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint40_fromMemory":{"entryPoint":10830,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_string":{"entryPoint":9215,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_BaseCurrencyInfo":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":9052,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_struct$_AggregatedReserveData_$34757_memory_ptr_$dyn_memory_ptr_t_struct$_BaseCurrencyInfo_$34781_memory_ptr__to_t_array$_t_struct$_AggregatedReserveData_$34757_memory_ptr_$dyn_memory_ptr_t_struct$_BaseCurrencyInfo_$34781_memory_ptr__fromStack_reversed":{"entryPoint":9278,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_array$_t_struct$_UserReserveData_$34772_memory_ptr_$dyn_memory_ptr_t_uint8__to_t_array$_t_struct$_UserReserveData_$34772_memory_ptr_$dyn_memory_ptr_t_uint8__fromStack_reversed":{"entryPoint":8851,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_contract$_IEACAggregatorProxy_$34482__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":9259,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint128":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint16":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint40":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint8":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"allocate_memory":{"entryPoint":10405,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_4027":{"entryPoint":10328,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_4029":{"entryPoint":10370,"id":null,"parameterSlots":0,"returnSlots":1},"copy_memory_to_memory":{"entryPoint":9167,"id":null,"parameterSlots":3,"returnSlots":0},"increment_t_uint256":{"entryPoint":11234,"id":null,"parameterSlots":1,"returnSlots":1},"increment_t_uint8":{"entryPoint":11291,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":11187,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":10751,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":10281,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_contract_IPoolAddressesProvider":{"entryPoint":8757,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:23421:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"115:76:201","statements":[{"nodeType":"YulAssignment","src":"125:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"137:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"148:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"133:3:201"},"nodeType":"YulFunctionCall","src":"133:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"125:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"167:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"178:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"160:6:201"},"nodeType":"YulFunctionCall","src":"160:25:201"},"nodeType":"YulExpressionStatement","src":"160:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"84:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"95:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"106:4:201","type":""}],"src":"14:177:201"},{"body":{"nodeType":"YulBlock","src":"326:125:201","statements":[{"nodeType":"YulAssignment","src":"336:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"348:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"359:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"344:3:201"},"nodeType":"YulFunctionCall","src":"344:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"336:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"378:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"393:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"401:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"389:3:201"},"nodeType":"YulFunctionCall","src":"389:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"371:6:201"},"nodeType":"YulFunctionCall","src":"371:74:201"},"nodeType":"YulExpressionStatement","src":"371:74:201"}]},"name":"abi_encode_tuple_t_contract$_IEACAggregatorProxy_$34482__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"295:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"306:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"317:4:201","type":""}],"src":"196:255:201"},{"body":{"nodeType":"YulBlock","src":"525:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"612:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"621:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"624:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"614:6:201"},"nodeType":"YulFunctionCall","src":"614:12:201"},"nodeType":"YulExpressionStatement","src":"614:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"548:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"559:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"566:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"555:3:201"},"nodeType":"YulFunctionCall","src":"555:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"545:2:201"},"nodeType":"YulFunctionCall","src":"545:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"538:6:201"},"nodeType":"YulFunctionCall","src":"538:73:201"},"nodeType":"YulIf","src":"535:93:201"}]},"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"514:5:201","type":""}],"src":"456:178:201"},{"body":{"nodeType":"YulBlock","src":"757:349:201","statements":[{"body":{"nodeType":"YulBlock","src":"803:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"812:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"815:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"805:6:201"},"nodeType":"YulFunctionCall","src":"805:12:201"},"nodeType":"YulExpressionStatement","src":"805:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"778:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"787:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"774:3:201"},"nodeType":"YulFunctionCall","src":"774:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"799:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"770:3:201"},"nodeType":"YulFunctionCall","src":"770:32:201"},"nodeType":"YulIf","src":"767:52:201"},{"nodeType":"YulVariableDeclaration","src":"828:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"854:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"841:12:201"},"nodeType":"YulFunctionCall","src":"841:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"832:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"922:5:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"873:48:201"},"nodeType":"YulFunctionCall","src":"873:55:201"},"nodeType":"YulExpressionStatement","src":"873:55:201"},{"nodeType":"YulAssignment","src":"937:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"947:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"937:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"961:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"993:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1004:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"989:3:201"},"nodeType":"YulFunctionCall","src":"989:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"976:12:201"},"nodeType":"YulFunctionCall","src":"976:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"965:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1066:7:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"1017:48:201"},"nodeType":"YulFunctionCall","src":"1017:57:201"},"nodeType":"YulExpressionStatement","src":"1017:57:201"},{"nodeType":"YulAssignment","src":"1083:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"1093:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1083:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"715:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"726:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"738:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"746:6:201","type":""}],"src":"639:467:201"},{"body":{"nodeType":"YulBlock","src":"1155:83:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1172:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1181:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1188:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1177:3:201"},"nodeType":"YulFunctionCall","src":"1177:54:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1165:6:201"},"nodeType":"YulFunctionCall","src":"1165:67:201"},"nodeType":"YulExpressionStatement","src":"1165:67:201"}]},"name":"abi_encode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1139:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"1146:3:201","type":""}],"src":"1111:127:201"},{"body":{"nodeType":"YulBlock","src":"1284:50:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1301:3:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1320:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1313:6:201"},"nodeType":"YulFunctionCall","src":"1313:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1306:6:201"},"nodeType":"YulFunctionCall","src":"1306:21:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1294:6:201"},"nodeType":"YulFunctionCall","src":"1294:34:201"},"nodeType":"YulExpressionStatement","src":"1294:34:201"}]},"name":"abi_encode_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1268:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"1275:3:201","type":""}],"src":"1243:91:201"},{"body":{"nodeType":"YulBlock","src":"1381:33:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1390:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1399:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1406:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1395:3:201"},"nodeType":"YulFunctionCall","src":"1395:16:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1383:6:201"},"nodeType":"YulFunctionCall","src":"1383:29:201"},"nodeType":"YulExpressionStatement","src":"1383:29:201"}]},"name":"abi_encode_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1365:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"1372:3:201","type":""}],"src":"1339:75:201"},{"body":{"nodeType":"YulBlock","src":"1662:1076:201","statements":[{"nodeType":"YulVariableDeclaration","src":"1672:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1682:2:201","type":"","value":"64"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1676:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1693:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1711:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1722:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1707:3:201"},"nodeType":"YulFunctionCall","src":"1707:18:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"1697:6:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1741:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1752:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1734:6:201"},"nodeType":"YulFunctionCall","src":"1734:21:201"},"nodeType":"YulExpressionStatement","src":"1734:21:201"},{"nodeType":"YulVariableDeclaration","src":"1764:17:201","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"1775:6:201"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"1768:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1790:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1810:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1804:5:201"},"nodeType":"YulFunctionCall","src":"1804:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"1794:6:201","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"1833:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"1841:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1826:6:201"},"nodeType":"YulFunctionCall","src":"1826:22:201"},"nodeType":"YulExpressionStatement","src":"1826:22:201"},{"nodeType":"YulVariableDeclaration","src":"1857:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1867:2:201","type":"","value":"96"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"1861:2:201","type":""}]},{"nodeType":"YulAssignment","src":"1878:25:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1889:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"1900:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1885:3:201"},"nodeType":"YulFunctionCall","src":"1885:18:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"1878:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"1912:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1922:4:201","type":"","value":"0x20"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"1916:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1935:29:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1953:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"1961:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1949:3:201"},"nodeType":"YulFunctionCall","src":"1949:15:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"1939:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1973:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1982:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"1977:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2041:618:201","statements":[{"nodeType":"YulVariableDeclaration","src":"2055:23:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2071:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2065:5:201"},"nodeType":"YulFunctionCall","src":"2065:13:201"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"2059:2:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2098:3:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"2113:2:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2107:5:201"},"nodeType":"YulFunctionCall","src":"2107:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2118:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2103:3:201"},"nodeType":"YulFunctionCall","src":"2103:58:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2091:6:201"},"nodeType":"YulFunctionCall","src":"2091:71:201"},"nodeType":"YulExpressionStatement","src":"2091:71:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2186:3:201"},{"name":"_3","nodeType":"YulIdentifier","src":"2191:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2182:3:201"},"nodeType":"YulFunctionCall","src":"2182:12:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"2206:2:201"},{"name":"_3","nodeType":"YulIdentifier","src":"2210:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2202:3:201"},"nodeType":"YulFunctionCall","src":"2202:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2196:5:201"},"nodeType":"YulFunctionCall","src":"2196:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2175:6:201"},"nodeType":"YulFunctionCall","src":"2175:40:201"},"nodeType":"YulExpressionStatement","src":"2175:40:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2239:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2244:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2235:3:201"},"nodeType":"YulFunctionCall","src":"2235:12:201"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"2273:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2277:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2269:3:201"},"nodeType":"YulFunctionCall","src":"2269:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2263:5:201"},"nodeType":"YulFunctionCall","src":"2263:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2256:6:201"},"nodeType":"YulFunctionCall","src":"2256:26:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2249:6:201"},"nodeType":"YulFunctionCall","src":"2249:34:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2228:6:201"},"nodeType":"YulFunctionCall","src":"2228:56:201"},"nodeType":"YulExpressionStatement","src":"2228:56:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2308:3:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2313:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2304:3:201"},"nodeType":"YulFunctionCall","src":"2304:12:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"2328:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2332:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2324:3:201"},"nodeType":"YulFunctionCall","src":"2324:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2318:5:201"},"nodeType":"YulFunctionCall","src":"2318:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2297:6:201"},"nodeType":"YulFunctionCall","src":"2297:40:201"},"nodeType":"YulExpressionStatement","src":"2297:40:201"},{"nodeType":"YulVariableDeclaration","src":"2350:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2360:4:201","type":"","value":"0x80"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"2354:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2388:3:201"},{"name":"_5","nodeType":"YulIdentifier","src":"2393:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2384:3:201"},"nodeType":"YulFunctionCall","src":"2384:12:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"2408:2:201"},{"name":"_5","nodeType":"YulIdentifier","src":"2412:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2404:3:201"},"nodeType":"YulFunctionCall","src":"2404:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2398:5:201"},"nodeType":"YulFunctionCall","src":"2398:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2377:6:201"},"nodeType":"YulFunctionCall","src":"2377:40:201"},"nodeType":"YulExpressionStatement","src":"2377:40:201"},{"nodeType":"YulVariableDeclaration","src":"2430:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2440:4:201","type":"","value":"0xa0"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"2434:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2468:3:201"},{"name":"_6","nodeType":"YulIdentifier","src":"2473:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2464:3:201"},"nodeType":"YulFunctionCall","src":"2464:12:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"2488:2:201"},{"name":"_6","nodeType":"YulIdentifier","src":"2492:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2484:3:201"},"nodeType":"YulFunctionCall","src":"2484:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2478:5:201"},"nodeType":"YulFunctionCall","src":"2478:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2457:6:201"},"nodeType":"YulFunctionCall","src":"2457:40:201"},"nodeType":"YulExpressionStatement","src":"2457:40:201"},{"nodeType":"YulVariableDeclaration","src":"2510:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2520:4:201","type":"","value":"0xc0"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"2514:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2548:3:201"},{"name":"_7","nodeType":"YulIdentifier","src":"2553:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2544:3:201"},"nodeType":"YulFunctionCall","src":"2544:12:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"2568:2:201"},{"name":"_7","nodeType":"YulIdentifier","src":"2572:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2564:3:201"},"nodeType":"YulFunctionCall","src":"2564:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2558:5:201"},"nodeType":"YulFunctionCall","src":"2558:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2537:6:201"},"nodeType":"YulFunctionCall","src":"2537:40:201"},"nodeType":"YulExpressionStatement","src":"2537:40:201"},{"nodeType":"YulAssignment","src":"2590:21:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2601:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"2606:4:201","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2597:3:201"},"nodeType":"YulFunctionCall","src":"2597:14:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"2590:3:201"}]},{"nodeType":"YulAssignment","src":"2624:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2638:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"2646:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2634:3:201"},"nodeType":"YulFunctionCall","src":"2634:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2624:6:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2003:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"2006:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2000:2:201"},"nodeType":"YulFunctionCall","src":"2000:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"2014:18:201","statements":[{"nodeType":"YulAssignment","src":"2016:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"2025:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"2028:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2021:3:201"},"nodeType":"YulFunctionCall","src":"2021:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"2016:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"1996:3:201","statements":[]},"src":"1992:667:201"},{"nodeType":"YulAssignment","src":"2668:11:201","value":{"name":"pos","nodeType":"YulIdentifier","src":"2676:3:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2668:4:201"}]},{"expression":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2705:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2717:9:201"},{"name":"_3","nodeType":"YulIdentifier","src":"2728:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2713:3:201"},"nodeType":"YulFunctionCall","src":"2713:18:201"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"2688:16:201"},"nodeType":"YulFunctionCall","src":"2688:44:201"},"nodeType":"YulExpressionStatement","src":"2688:44:201"}]},"name":"abi_encode_tuple_t_array$_t_struct$_UserReserveData_$34772_memory_ptr_$dyn_memory_ptr_t_uint8__to_t_array$_t_struct$_UserReserveData_$34772_memory_ptr_$dyn_memory_ptr_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1623:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1634:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1642:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1653:4:201","type":""}],"src":"1419:1319:201"},{"body":{"nodeType":"YulBlock","src":"2844:201:201","statements":[{"body":{"nodeType":"YulBlock","src":"2890:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2899:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2902:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2892:6:201"},"nodeType":"YulFunctionCall","src":"2892:12:201"},"nodeType":"YulExpressionStatement","src":"2892:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2865:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2874:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2861:3:201"},"nodeType":"YulFunctionCall","src":"2861:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2886:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2857:3:201"},"nodeType":"YulFunctionCall","src":"2857:32:201"},"nodeType":"YulIf","src":"2854:52:201"},{"nodeType":"YulVariableDeclaration","src":"2915:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2941:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2928:12:201"},"nodeType":"YulFunctionCall","src":"2928:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2919:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3009:5:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"2960:48:201"},"nodeType":"YulFunctionCall","src":"2960:55:201"},"nodeType":"YulExpressionStatement","src":"2960:55:201"},{"nodeType":"YulAssignment","src":"3024:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3034:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3024:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2810:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2821:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2833:6:201","type":""}],"src":"2743:302:201"},{"body":{"nodeType":"YulBlock","src":"3201:530:201","statements":[{"nodeType":"YulVariableDeclaration","src":"3211:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3221:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3215:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3232:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3250:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3261:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3246:3:201"},"nodeType":"YulFunctionCall","src":"3246:18:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"3236:6:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3280:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3291:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3273:6:201"},"nodeType":"YulFunctionCall","src":"3273:21:201"},"nodeType":"YulExpressionStatement","src":"3273:21:201"},{"nodeType":"YulVariableDeclaration","src":"3303:17:201","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"3314:6:201"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"3307:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3329:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3349:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3343:5:201"},"nodeType":"YulFunctionCall","src":"3343:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"3333:6:201","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"3372:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"3380:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3365:6:201"},"nodeType":"YulFunctionCall","src":"3365:22:201"},"nodeType":"YulExpressionStatement","src":"3365:22:201"},{"nodeType":"YulAssignment","src":"3396:25:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3407:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3418:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3403:3:201"},"nodeType":"YulFunctionCall","src":"3403:18:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"3396:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"3430:29:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3448:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3456:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3444:3:201"},"nodeType":"YulFunctionCall","src":"3444:15:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"3434:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3468:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3477:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"3472:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3536:169:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3557:3:201"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"3572:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3566:5:201"},"nodeType":"YulFunctionCall","src":"3566:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"3581:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3562:3:201"},"nodeType":"YulFunctionCall","src":"3562:62:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3550:6:201"},"nodeType":"YulFunctionCall","src":"3550:75:201"},"nodeType":"YulExpressionStatement","src":"3550:75:201"},{"nodeType":"YulAssignment","src":"3638:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3649:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3654:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3645:3:201"},"nodeType":"YulFunctionCall","src":"3645:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"3638:3:201"}]},{"nodeType":"YulAssignment","src":"3670:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"3684:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3692:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3680:3:201"},"nodeType":"YulFunctionCall","src":"3680:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"3670:6:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3498:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"3501:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3495:2:201"},"nodeType":"YulFunctionCall","src":"3495:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"3509:18:201","statements":[{"nodeType":"YulAssignment","src":"3511:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"3520:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"3523:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3516:3:201"},"nodeType":"YulFunctionCall","src":"3516:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"3511:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"3491:3:201","statements":[]},"src":"3487:218:201"},{"nodeType":"YulAssignment","src":"3714:11:201","value":{"name":"pos","nodeType":"YulIdentifier","src":"3722:3:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3714:4:201"}]}]},"name":"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3170:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3181:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3192:4:201","type":""}],"src":"3050:681:201"},{"body":{"nodeType":"YulBlock","src":"3837:125:201","statements":[{"nodeType":"YulAssignment","src":"3847:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3859:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3870:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3855:3:201"},"nodeType":"YulFunctionCall","src":"3855:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3847:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3889:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3904:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3912:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3900:3:201"},"nodeType":"YulFunctionCall","src":"3900:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3882:6:201"},"nodeType":"YulFunctionCall","src":"3882:74:201"},"nodeType":"YulExpressionStatement","src":"3882:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3806:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3817:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3828:4:201","type":""}],"src":"3736:226:201"},{"body":{"nodeType":"YulBlock","src":"4037:110:201","statements":[{"body":{"nodeType":"YulBlock","src":"4083:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4092:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4095:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4085:6:201"},"nodeType":"YulFunctionCall","src":"4085:12:201"},"nodeType":"YulExpressionStatement","src":"4085:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4058:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4067:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4054:3:201"},"nodeType":"YulFunctionCall","src":"4054:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4079:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4050:3:201"},"nodeType":"YulFunctionCall","src":"4050:32:201"},"nodeType":"YulIf","src":"4047:52:201"},{"nodeType":"YulAssignment","src":"4108:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4131:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4118:12:201"},"nodeType":"YulFunctionCall","src":"4118:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4108:6:201"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4003:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4014:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4026:6:201","type":""}],"src":"3967:180:201"},{"body":{"nodeType":"YulBlock","src":"4205:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"4215:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"4224:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"4219:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4284:63:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4309:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"4314:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4305:3:201"},"nodeType":"YulFunctionCall","src":"4305:11:201"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4328:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"4333:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4324:3:201"},"nodeType":"YulFunctionCall","src":"4324:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4318:5:201"},"nodeType":"YulFunctionCall","src":"4318:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4298:6:201"},"nodeType":"YulFunctionCall","src":"4298:39:201"},"nodeType":"YulExpressionStatement","src":"4298:39:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4245:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"4248:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4242:2:201"},"nodeType":"YulFunctionCall","src":"4242:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"4256:19:201","statements":[{"nodeType":"YulAssignment","src":"4258:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4267:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"4270:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4263:3:201"},"nodeType":"YulFunctionCall","src":"4263:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"4258:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"4238:3:201","statements":[]},"src":"4234:113:201"},{"body":{"nodeType":"YulBlock","src":"4373:31:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4386:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"4391:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4382:3:201"},"nodeType":"YulFunctionCall","src":"4382:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"4400:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4375:6:201"},"nodeType":"YulFunctionCall","src":"4375:27:201"},"nodeType":"YulExpressionStatement","src":"4375:27:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4362:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"4365:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4359:2:201"},"nodeType":"YulFunctionCall","src":"4359:13:201"},"nodeType":"YulIf","src":"4356:48:201"}]},"name":"copy_memory_to_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"4183:3:201","type":""},{"name":"dst","nodeType":"YulTypedName","src":"4188:3:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"4193:6:201","type":""}],"src":"4152:258:201"},{"body":{"nodeType":"YulBlock","src":"4465:267:201","statements":[{"nodeType":"YulVariableDeclaration","src":"4475:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4495:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4489:5:201"},"nodeType":"YulFunctionCall","src":"4489:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"4479:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4517:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"4522:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4510:6:201"},"nodeType":"YulFunctionCall","src":"4510:19:201"},"nodeType":"YulExpressionStatement","src":"4510:19:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4564:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"4571:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4560:3:201"},"nodeType":"YulFunctionCall","src":"4560:16:201"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4582:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"4587:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4578:3:201"},"nodeType":"YulFunctionCall","src":"4578:14:201"},{"name":"length","nodeType":"YulIdentifier","src":"4594:6:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"4538:21:201"},"nodeType":"YulFunctionCall","src":"4538:63:201"},"nodeType":"YulExpressionStatement","src":"4538:63:201"},{"nodeType":"YulAssignment","src":"4610:116:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4625:3:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4638:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4646:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4634:3:201"},"nodeType":"YulFunctionCall","src":"4634:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"4651:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4630:3:201"},"nodeType":"YulFunctionCall","src":"4630:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4621:3:201"},"nodeType":"YulFunctionCall","src":"4621:98:201"},{"kind":"number","nodeType":"YulLiteral","src":"4721:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4617:3:201"},"nodeType":"YulFunctionCall","src":"4617:109:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"4610:3:201"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4442:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4449:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"4457:3:201","type":""}],"src":"4415:317:201"},{"body":{"nodeType":"YulBlock","src":"4858:99:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4875:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4886:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4868:6:201"},"nodeType":"YulFunctionCall","src":"4868:21:201"},"nodeType":"YulExpressionStatement","src":"4868:21:201"},{"nodeType":"YulAssignment","src":"4898:53:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4924:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4936:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4947:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4932:3:201"},"nodeType":"YulFunctionCall","src":"4932:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"4906:17:201"},"nodeType":"YulFunctionCall","src":"4906:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4898:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4827:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4838:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4849:4:201","type":""}],"src":"4737:220:201"},{"body":{"nodeType":"YulBlock","src":"5006:75:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5023:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5032:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5039:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5028:3:201"},"nodeType":"YulFunctionCall","src":"5028:46:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5016:6:201"},"nodeType":"YulFunctionCall","src":"5016:59:201"},"nodeType":"YulExpressionStatement","src":"5016:59:201"}]},"name":"abi_encode_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4990:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4997:3:201","type":""}],"src":"4962:119:201"},{"body":{"nodeType":"YulBlock","src":"5129:53:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5146:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5155:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5162:12:201","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5151:3:201"},"nodeType":"YulFunctionCall","src":"5151:24:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5139:6:201"},"nodeType":"YulFunctionCall","src":"5139:37:201"},"nodeType":"YulExpressionStatement","src":"5139:37:201"}]},"name":"abi_encode_uint40","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"5113:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"5120:3:201","type":""}],"src":"5086:96:201"},{"body":{"nodeType":"YulBlock","src":"5230:47:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5247:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5256:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5263:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5252:3:201"},"nodeType":"YulFunctionCall","src":"5252:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5240:6:201"},"nodeType":"YulFunctionCall","src":"5240:31:201"},"nodeType":"YulExpressionStatement","src":"5240:31:201"}]},"name":"abi_encode_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"5214:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"5221:3:201","type":""}],"src":"5187:90:201"},{"body":{"nodeType":"YulBlock","src":"5342:220:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5359:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5370:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5364:5:201"},"nodeType":"YulFunctionCall","src":"5364:12:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5352:6:201"},"nodeType":"YulFunctionCall","src":"5352:25:201"},"nodeType":"YulExpressionStatement","src":"5352:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5397:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"5402:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5393:3:201"},"nodeType":"YulFunctionCall","src":"5393:14:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5419:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5426:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5415:3:201"},"nodeType":"YulFunctionCall","src":"5415:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5409:5:201"},"nodeType":"YulFunctionCall","src":"5409:23:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5386:6:201"},"nodeType":"YulFunctionCall","src":"5386:47:201"},"nodeType":"YulExpressionStatement","src":"5386:47:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5453:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"5458:4:201","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5449:3:201"},"nodeType":"YulFunctionCall","src":"5449:14:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5475:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5482:4:201","type":"","value":"0x40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5471:3:201"},"nodeType":"YulFunctionCall","src":"5471:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5465:5:201"},"nodeType":"YulFunctionCall","src":"5465:23:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5442:6:201"},"nodeType":"YulFunctionCall","src":"5442:47:201"},"nodeType":"YulExpressionStatement","src":"5442:47:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5509:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"5514:4:201","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5505:3:201"},"nodeType":"YulFunctionCall","src":"5505:14:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5535:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5542:4:201","type":"","value":"0x60"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5531:3:201"},"nodeType":"YulFunctionCall","src":"5531:16:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5525:5:201"},"nodeType":"YulFunctionCall","src":"5525:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"5550:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5521:3:201"},"nodeType":"YulFunctionCall","src":"5521:34:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5498:6:201"},"nodeType":"YulFunctionCall","src":"5498:58:201"},"nodeType":"YulExpressionStatement","src":"5498:58:201"}]},"name":"abi_encode_struct_BaseCurrencyInfo","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"5326:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"5333:3:201","type":""}],"src":"5282:280:201"},{"body":{"nodeType":"YulBlock","src":"5896:7508:201","statements":[{"nodeType":"YulVariableDeclaration","src":"5906:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5916:3:201","type":"","value":"160"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5910:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5928:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5946:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5957:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5942:3:201"},"nodeType":"YulFunctionCall","src":"5942:18:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"5932:6:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5976:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5987:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5969:6:201"},"nodeType":"YulFunctionCall","src":"5969:21:201"},"nodeType":"YulExpressionStatement","src":"5969:21:201"},{"nodeType":"YulVariableDeclaration","src":"5999:17:201","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"6010:6:201"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"6003:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6025:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6045:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6039:5:201"},"nodeType":"YulFunctionCall","src":"6039:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"6029:6:201","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"6068:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"6076:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6061:6:201"},"nodeType":"YulFunctionCall","src":"6061:22:201"},"nodeType":"YulExpressionStatement","src":"6061:22:201"},{"nodeType":"YulVariableDeclaration","src":"6092:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6102:3:201","type":"","value":"192"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"6096:2:201","type":""}]},{"nodeType":"YulAssignment","src":"6114:25:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6125:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"6136:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6121:3:201"},"nodeType":"YulFunctionCall","src":"6121:18:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"6114:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"6148:53:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6170:9:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6185:1:201","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"6188:6:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6181:3:201"},"nodeType":"YulFunctionCall","src":"6181:14:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6166:3:201"},"nodeType":"YulFunctionCall","src":"6166:30:201"},{"name":"_2","nodeType":"YulIdentifier","src":"6198:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6162:3:201"},"nodeType":"YulFunctionCall","src":"6162:39:201"},"variables":[{"name":"tail_2","nodeType":"YulTypedName","src":"6152:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6210:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6220:4:201","type":"","value":"0x20"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"6214:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6233:29:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6251:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"6259:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6247:3:201"},"nodeType":"YulFunctionCall","src":"6247:15:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"6237:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6271:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6280:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"6275:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"6339:6965:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6360:3:201"},{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"6373:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6381:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6369:3:201"},"nodeType":"YulFunctionCall","src":"6369:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"6393:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6365:3:201"},"nodeType":"YulFunctionCall","src":"6365:95:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6353:6:201"},"nodeType":"YulFunctionCall","src":"6353:108:201"},"nodeType":"YulExpressionStatement","src":"6353:108:201"},{"nodeType":"YulVariableDeclaration","src":"6474:23:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"6490:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6484:5:201"},"nodeType":"YulFunctionCall","src":"6484:13:201"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"6478:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6510:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6520:6:201","type":"","value":"0x06c0"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"6514:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"6564:2:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6558:5:201"},"nodeType":"YulFunctionCall","src":"6558:9:201"},{"name":"tail_2","nodeType":"YulIdentifier","src":"6569:6:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"6539:18:201"},"nodeType":"YulFunctionCall","src":"6539:37:201"},"nodeType":"YulExpressionStatement","src":"6539:37:201"},{"nodeType":"YulVariableDeclaration","src":"6589:38:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"6619:2:201"},{"name":"_3","nodeType":"YulIdentifier","src":"6623:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6615:3:201"},"nodeType":"YulFunctionCall","src":"6615:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6609:5:201"},"nodeType":"YulFunctionCall","src":"6609:18:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"6593:12:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"6651:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"6659:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6647:3:201"},"nodeType":"YulFunctionCall","src":"6647:15:201"},{"name":"_5","nodeType":"YulIdentifier","src":"6664:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6640:6:201"},"nodeType":"YulFunctionCall","src":"6640:27:201"},"nodeType":"YulExpressionStatement","src":"6640:27:201"},{"nodeType":"YulVariableDeclaration","src":"6680:62:201","value":{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"6712:12:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"6730:6:201"},{"name":"_5","nodeType":"YulIdentifier","src":"6738:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6726:3:201"},"nodeType":"YulFunctionCall","src":"6726:15:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"6694:17:201"},"nodeType":"YulFunctionCall","src":"6694:48:201"},"variables":[{"name":"tail_3","nodeType":"YulTypedName","src":"6684:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6755:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6765:4:201","type":"","value":"0x40"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"6759:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6782:40:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"6814:2:201"},{"name":"_6","nodeType":"YulIdentifier","src":"6818:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6810:3:201"},"nodeType":"YulFunctionCall","src":"6810:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6804:5:201"},"nodeType":"YulFunctionCall","src":"6804:18:201"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"6786:14:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"6846:6:201"},{"name":"_6","nodeType":"YulIdentifier","src":"6854:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6842:3:201"},"nodeType":"YulFunctionCall","src":"6842:15:201"},{"arguments":[{"name":"tail_3","nodeType":"YulIdentifier","src":"6863:6:201"},{"name":"tail_2","nodeType":"YulIdentifier","src":"6871:6:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6859:3:201"},"nodeType":"YulFunctionCall","src":"6859:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6835:6:201"},"nodeType":"YulFunctionCall","src":"6835:44:201"},"nodeType":"YulExpressionStatement","src":"6835:44:201"},{"nodeType":"YulVariableDeclaration","src":"6892:55:201","value":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"6924:14:201"},{"name":"tail_3","nodeType":"YulIdentifier","src":"6940:6:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"6906:17:201"},"nodeType":"YulFunctionCall","src":"6906:41:201"},"variables":[{"name":"tail_4","nodeType":"YulTypedName","src":"6896:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6960:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6970:4:201","type":"","value":"0x60"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"6964:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"6998:6:201"},{"name":"_7","nodeType":"YulIdentifier","src":"7006:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6994:3:201"},"nodeType":"YulFunctionCall","src":"6994:15:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"7021:2:201"},{"name":"_7","nodeType":"YulIdentifier","src":"7025:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7017:3:201"},"nodeType":"YulFunctionCall","src":"7017:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7011:5:201"},"nodeType":"YulFunctionCall","src":"7011:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6987:6:201"},"nodeType":"YulFunctionCall","src":"6987:43:201"},"nodeType":"YulExpressionStatement","src":"6987:43:201"},{"nodeType":"YulVariableDeclaration","src":"7043:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"7053:4:201","type":"","value":"0x80"},"variables":[{"name":"_8","nodeType":"YulTypedName","src":"7047:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"7081:6:201"},{"name":"_8","nodeType":"YulIdentifier","src":"7089:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7077:3:201"},"nodeType":"YulFunctionCall","src":"7077:15:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"7104:2:201"},{"name":"_8","nodeType":"YulIdentifier","src":"7108:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7100:3:201"},"nodeType":"YulFunctionCall","src":"7100:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7094:5:201"},"nodeType":"YulFunctionCall","src":"7094:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7070:6:201"},"nodeType":"YulFunctionCall","src":"7070:43:201"},"nodeType":"YulExpressionStatement","src":"7070:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"7137:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7145:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7133:3:201"},"nodeType":"YulFunctionCall","src":"7133:15:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"7160:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7164:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7156:3:201"},"nodeType":"YulFunctionCall","src":"7156:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7150:5:201"},"nodeType":"YulFunctionCall","src":"7150:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7126:6:201"},"nodeType":"YulFunctionCall","src":"7126:43:201"},"nodeType":"YulExpressionStatement","src":"7126:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"7193:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"7201:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7189:3:201"},"nodeType":"YulFunctionCall","src":"7189:15:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"7216:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"7220:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7212:3:201"},"nodeType":"YulFunctionCall","src":"7212:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7206:5:201"},"nodeType":"YulFunctionCall","src":"7206:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7182:6:201"},"nodeType":"YulFunctionCall","src":"7182:43:201"},"nodeType":"YulExpressionStatement","src":"7182:43:201"},{"nodeType":"YulVariableDeclaration","src":"7238:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"7248:4:201","type":"","value":"0xe0"},"variables":[{"name":"_9","nodeType":"YulTypedName","src":"7242:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"7276:6:201"},{"name":"_9","nodeType":"YulIdentifier","src":"7284:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7272:3:201"},"nodeType":"YulFunctionCall","src":"7272:15:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"7299:2:201"},{"name":"_9","nodeType":"YulIdentifier","src":"7303:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7295:3:201"},"nodeType":"YulFunctionCall","src":"7295:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7289:5:201"},"nodeType":"YulFunctionCall","src":"7289:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7265:6:201"},"nodeType":"YulFunctionCall","src":"7265:43:201"},"nodeType":"YulExpressionStatement","src":"7265:43:201"},{"nodeType":"YulVariableDeclaration","src":"7321:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"7332:6:201","type":"","value":"0x0100"},"variables":[{"name":"_10","nodeType":"YulTypedName","src":"7325:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7351:41:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"7383:2:201"},{"name":"_10","nodeType":"YulIdentifier","src":"7387:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7379:3:201"},"nodeType":"YulFunctionCall","src":"7379:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7373:5:201"},"nodeType":"YulFunctionCall","src":"7373:19:201"},"variables":[{"name":"memberValue0_2","nodeType":"YulTypedName","src":"7355:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_2","nodeType":"YulIdentifier","src":"7421:14:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"7441:6:201"},{"name":"_10","nodeType":"YulIdentifier","src":"7449:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7437:3:201"},"nodeType":"YulFunctionCall","src":"7437:16:201"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"7405:15:201"},"nodeType":"YulFunctionCall","src":"7405:49:201"},"nodeType":"YulExpressionStatement","src":"7405:49:201"},{"nodeType":"YulVariableDeclaration","src":"7467:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"7478:6:201","type":"","value":"0x0120"},"variables":[{"name":"_11","nodeType":"YulTypedName","src":"7471:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7497:41:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"7529:2:201"},{"name":"_11","nodeType":"YulIdentifier","src":"7533:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7525:3:201"},"nodeType":"YulFunctionCall","src":"7525:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7519:5:201"},"nodeType":"YulFunctionCall","src":"7519:19:201"},"variables":[{"name":"memberValue0_3","nodeType":"YulTypedName","src":"7501:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_3","nodeType":"YulIdentifier","src":"7567:14:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"7587:6:201"},{"name":"_11","nodeType":"YulIdentifier","src":"7595:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7583:3:201"},"nodeType":"YulFunctionCall","src":"7583:16:201"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"7551:15:201"},"nodeType":"YulFunctionCall","src":"7551:49:201"},"nodeType":"YulExpressionStatement","src":"7551:49:201"},{"nodeType":"YulVariableDeclaration","src":"7613:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"7624:6:201","type":"","value":"0x0140"},"variables":[{"name":"_12","nodeType":"YulTypedName","src":"7617:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7643:41:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"7675:2:201"},{"name":"_12","nodeType":"YulIdentifier","src":"7679:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7671:3:201"},"nodeType":"YulFunctionCall","src":"7671:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7665:5:201"},"nodeType":"YulFunctionCall","src":"7665:19:201"},"variables":[{"name":"memberValue0_4","nodeType":"YulTypedName","src":"7647:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_4","nodeType":"YulIdentifier","src":"7713:14:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"7733:6:201"},{"name":"_12","nodeType":"YulIdentifier","src":"7741:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7729:3:201"},"nodeType":"YulFunctionCall","src":"7729:16:201"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"7697:15:201"},"nodeType":"YulFunctionCall","src":"7697:49:201"},"nodeType":"YulExpressionStatement","src":"7697:49:201"},{"nodeType":"YulVariableDeclaration","src":"7759:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"7770:6:201","type":"","value":"0x0160"},"variables":[{"name":"_13","nodeType":"YulTypedName","src":"7763:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7789:41:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"7821:2:201"},{"name":"_13","nodeType":"YulIdentifier","src":"7825:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7817:3:201"},"nodeType":"YulFunctionCall","src":"7817:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7811:5:201"},"nodeType":"YulFunctionCall","src":"7811:19:201"},"variables":[{"name":"memberValue0_5","nodeType":"YulTypedName","src":"7793:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_5","nodeType":"YulIdentifier","src":"7859:14:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"7879:6:201"},{"name":"_13","nodeType":"YulIdentifier","src":"7887:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7875:3:201"},"nodeType":"YulFunctionCall","src":"7875:16:201"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"7843:15:201"},"nodeType":"YulFunctionCall","src":"7843:49:201"},"nodeType":"YulExpressionStatement","src":"7843:49:201"},{"nodeType":"YulVariableDeclaration","src":"7905:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"7916:6:201","type":"","value":"0x0180"},"variables":[{"name":"_14","nodeType":"YulTypedName","src":"7909:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"7935:41:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"7967:2:201"},{"name":"_14","nodeType":"YulIdentifier","src":"7971:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7963:3:201"},"nodeType":"YulFunctionCall","src":"7963:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7957:5:201"},"nodeType":"YulFunctionCall","src":"7957:19:201"},"variables":[{"name":"memberValue0_6","nodeType":"YulTypedName","src":"7939:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_6","nodeType":"YulIdentifier","src":"8005:14:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"8025:6:201"},{"name":"_14","nodeType":"YulIdentifier","src":"8033:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8021:3:201"},"nodeType":"YulFunctionCall","src":"8021:16:201"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"7989:15:201"},"nodeType":"YulFunctionCall","src":"7989:49:201"},"nodeType":"YulExpressionStatement","src":"7989:49:201"},{"nodeType":"YulVariableDeclaration","src":"8051:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8062:6:201","type":"","value":"0x01a0"},"variables":[{"name":"_15","nodeType":"YulTypedName","src":"8055:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8081:41:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"8113:2:201"},{"name":"_15","nodeType":"YulIdentifier","src":"8117:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8109:3:201"},"nodeType":"YulFunctionCall","src":"8109:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8103:5:201"},"nodeType":"YulFunctionCall","src":"8103:19:201"},"variables":[{"name":"memberValue0_7","nodeType":"YulTypedName","src":"8085:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_7","nodeType":"YulIdentifier","src":"8154:14:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"8174:6:201"},{"name":"_15","nodeType":"YulIdentifier","src":"8182:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8170:3:201"},"nodeType":"YulFunctionCall","src":"8170:16:201"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"8135:18:201"},"nodeType":"YulFunctionCall","src":"8135:52:201"},"nodeType":"YulExpressionStatement","src":"8135:52:201"},{"nodeType":"YulVariableDeclaration","src":"8200:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8211:6:201","type":"","value":"0x01c0"},"variables":[{"name":"_16","nodeType":"YulTypedName","src":"8204:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8230:41:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"8262:2:201"},{"name":"_16","nodeType":"YulIdentifier","src":"8266:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8258:3:201"},"nodeType":"YulFunctionCall","src":"8258:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8252:5:201"},"nodeType":"YulFunctionCall","src":"8252:19:201"},"variables":[{"name":"memberValue0_8","nodeType":"YulTypedName","src":"8234:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_8","nodeType":"YulIdentifier","src":"8303:14:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"8323:6:201"},{"name":"_16","nodeType":"YulIdentifier","src":"8331:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8319:3:201"},"nodeType":"YulFunctionCall","src":"8319:16:201"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"8284:18:201"},"nodeType":"YulFunctionCall","src":"8284:52:201"},"nodeType":"YulExpressionStatement","src":"8284:52:201"},{"nodeType":"YulVariableDeclaration","src":"8349:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8360:6:201","type":"","value":"0x01e0"},"variables":[{"name":"_17","nodeType":"YulTypedName","src":"8353:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8379:41:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"8411:2:201"},{"name":"_17","nodeType":"YulIdentifier","src":"8415:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8407:3:201"},"nodeType":"YulFunctionCall","src":"8407:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8401:5:201"},"nodeType":"YulFunctionCall","src":"8401:19:201"},"variables":[{"name":"memberValue0_9","nodeType":"YulTypedName","src":"8383:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_9","nodeType":"YulIdentifier","src":"8452:14:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"8472:6:201"},{"name":"_17","nodeType":"YulIdentifier","src":"8480:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8468:3:201"},"nodeType":"YulFunctionCall","src":"8468:16:201"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"8433:18:201"},"nodeType":"YulFunctionCall","src":"8433:52:201"},"nodeType":"YulExpressionStatement","src":"8433:52:201"},{"nodeType":"YulVariableDeclaration","src":"8498:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8509:6:201","type":"","value":"0x0200"},"variables":[{"name":"_18","nodeType":"YulTypedName","src":"8502:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8528:42:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"8561:2:201"},{"name":"_18","nodeType":"YulIdentifier","src":"8565:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8557:3:201"},"nodeType":"YulFunctionCall","src":"8557:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8551:5:201"},"nodeType":"YulFunctionCall","src":"8551:19:201"},"variables":[{"name":"memberValue0_10","nodeType":"YulTypedName","src":"8532:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_10","nodeType":"YulIdentifier","src":"8602:15:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"8623:6:201"},{"name":"_18","nodeType":"YulIdentifier","src":"8631:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8619:3:201"},"nodeType":"YulFunctionCall","src":"8619:16:201"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"8583:18:201"},"nodeType":"YulFunctionCall","src":"8583:53:201"},"nodeType":"YulExpressionStatement","src":"8583:53:201"},{"nodeType":"YulVariableDeclaration","src":"8649:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8660:6:201","type":"","value":"0x0220"},"variables":[{"name":"_19","nodeType":"YulTypedName","src":"8653:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8679:42:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"8712:2:201"},{"name":"_19","nodeType":"YulIdentifier","src":"8716:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8708:3:201"},"nodeType":"YulFunctionCall","src":"8708:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8702:5:201"},"nodeType":"YulFunctionCall","src":"8702:19:201"},"variables":[{"name":"memberValue0_11","nodeType":"YulTypedName","src":"8683:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_11","nodeType":"YulIdentifier","src":"8753:15:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"8774:6:201"},{"name":"_19","nodeType":"YulIdentifier","src":"8782:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8770:3:201"},"nodeType":"YulFunctionCall","src":"8770:16:201"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"8734:18:201"},"nodeType":"YulFunctionCall","src":"8734:53:201"},"nodeType":"YulExpressionStatement","src":"8734:53:201"},{"nodeType":"YulVariableDeclaration","src":"8800:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8811:6:201","type":"","value":"0x0240"},"variables":[{"name":"_20","nodeType":"YulTypedName","src":"8804:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8830:42:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"8863:2:201"},{"name":"_20","nodeType":"YulIdentifier","src":"8867:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8859:3:201"},"nodeType":"YulFunctionCall","src":"8859:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8853:5:201"},"nodeType":"YulFunctionCall","src":"8853:19:201"},"variables":[{"name":"memberValue0_12","nodeType":"YulTypedName","src":"8834:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_12","nodeType":"YulIdentifier","src":"8903:15:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"8924:6:201"},{"name":"_20","nodeType":"YulIdentifier","src":"8932:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8920:3:201"},"nodeType":"YulFunctionCall","src":"8920:16:201"}],"functionName":{"name":"abi_encode_uint40","nodeType":"YulIdentifier","src":"8885:17:201"},"nodeType":"YulFunctionCall","src":"8885:52:201"},"nodeType":"YulExpressionStatement","src":"8885:52:201"},{"nodeType":"YulVariableDeclaration","src":"8950:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8961:6:201","type":"","value":"0x0260"},"variables":[{"name":"_21","nodeType":"YulTypedName","src":"8954:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"8980:42:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"9013:2:201"},{"name":"_21","nodeType":"YulIdentifier","src":"9017:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9009:3:201"},"nodeType":"YulFunctionCall","src":"9009:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9003:5:201"},"nodeType":"YulFunctionCall","src":"9003:19:201"},"variables":[{"name":"memberValue0_13","nodeType":"YulTypedName","src":"8984:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_13","nodeType":"YulIdentifier","src":"9054:15:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"9075:6:201"},{"name":"_21","nodeType":"YulIdentifier","src":"9083:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9071:3:201"},"nodeType":"YulFunctionCall","src":"9071:16:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"9035:18:201"},"nodeType":"YulFunctionCall","src":"9035:53:201"},"nodeType":"YulExpressionStatement","src":"9035:53:201"},{"nodeType":"YulVariableDeclaration","src":"9101:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9112:6:201","type":"","value":"0x0280"},"variables":[{"name":"_22","nodeType":"YulTypedName","src":"9105:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9131:42:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"9164:2:201"},{"name":"_22","nodeType":"YulIdentifier","src":"9168:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9160:3:201"},"nodeType":"YulFunctionCall","src":"9160:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9154:5:201"},"nodeType":"YulFunctionCall","src":"9154:19:201"},"variables":[{"name":"memberValue0_14","nodeType":"YulTypedName","src":"9135:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_14","nodeType":"YulIdentifier","src":"9205:15:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"9226:6:201"},{"name":"_22","nodeType":"YulIdentifier","src":"9234:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9222:3:201"},"nodeType":"YulFunctionCall","src":"9222:16:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"9186:18:201"},"nodeType":"YulFunctionCall","src":"9186:53:201"},"nodeType":"YulExpressionStatement","src":"9186:53:201"},{"nodeType":"YulVariableDeclaration","src":"9252:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9263:6:201","type":"","value":"0x02a0"},"variables":[{"name":"_23","nodeType":"YulTypedName","src":"9256:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9282:42:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"9315:2:201"},{"name":"_23","nodeType":"YulIdentifier","src":"9319:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9311:3:201"},"nodeType":"YulFunctionCall","src":"9311:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9305:5:201"},"nodeType":"YulFunctionCall","src":"9305:19:201"},"variables":[{"name":"memberValue0_15","nodeType":"YulTypedName","src":"9286:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_15","nodeType":"YulIdentifier","src":"9356:15:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"9377:6:201"},{"name":"_23","nodeType":"YulIdentifier","src":"9385:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9373:3:201"},"nodeType":"YulFunctionCall","src":"9373:16:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"9337:18:201"},"nodeType":"YulFunctionCall","src":"9337:53:201"},"nodeType":"YulExpressionStatement","src":"9337:53:201"},{"nodeType":"YulVariableDeclaration","src":"9403:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9414:6:201","type":"","value":"0x02c0"},"variables":[{"name":"_24","nodeType":"YulTypedName","src":"9407:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9433:42:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"9466:2:201"},{"name":"_24","nodeType":"YulIdentifier","src":"9470:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9462:3:201"},"nodeType":"YulFunctionCall","src":"9462:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9456:5:201"},"nodeType":"YulFunctionCall","src":"9456:19:201"},"variables":[{"name":"memberValue0_16","nodeType":"YulTypedName","src":"9437:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_16","nodeType":"YulIdentifier","src":"9507:15:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"9528:6:201"},{"name":"_24","nodeType":"YulIdentifier","src":"9536:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9524:3:201"},"nodeType":"YulFunctionCall","src":"9524:16:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"9488:18:201"},"nodeType":"YulFunctionCall","src":"9488:53:201"},"nodeType":"YulExpressionStatement","src":"9488:53:201"},{"nodeType":"YulVariableDeclaration","src":"9554:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9565:6:201","type":"","value":"0x02e0"},"variables":[{"name":"_25","nodeType":"YulTypedName","src":"9558:3:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"9595:6:201"},{"name":"_25","nodeType":"YulIdentifier","src":"9603:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9591:3:201"},"nodeType":"YulFunctionCall","src":"9591:16:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"9619:2:201"},{"name":"_25","nodeType":"YulIdentifier","src":"9623:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9615:3:201"},"nodeType":"YulFunctionCall","src":"9615:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9609:5:201"},"nodeType":"YulFunctionCall","src":"9609:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9584:6:201"},"nodeType":"YulFunctionCall","src":"9584:45:201"},"nodeType":"YulExpressionStatement","src":"9584:45:201"},{"nodeType":"YulVariableDeclaration","src":"9642:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9653:6:201","type":"","value":"0x0300"},"variables":[{"name":"_26","nodeType":"YulTypedName","src":"9646:3:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"9683:6:201"},{"name":"_26","nodeType":"YulIdentifier","src":"9691:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9679:3:201"},"nodeType":"YulFunctionCall","src":"9679:16:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"9707:2:201"},{"name":"_26","nodeType":"YulIdentifier","src":"9711:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9703:3:201"},"nodeType":"YulFunctionCall","src":"9703:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9697:5:201"},"nodeType":"YulFunctionCall","src":"9697:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9672:6:201"},"nodeType":"YulFunctionCall","src":"9672:45:201"},"nodeType":"YulExpressionStatement","src":"9672:45:201"},{"nodeType":"YulVariableDeclaration","src":"9730:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9741:6:201","type":"","value":"0x0320"},"variables":[{"name":"_27","nodeType":"YulTypedName","src":"9734:3:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"9771:6:201"},{"name":"_27","nodeType":"YulIdentifier","src":"9779:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9767:3:201"},"nodeType":"YulFunctionCall","src":"9767:16:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"9795:2:201"},{"name":"_27","nodeType":"YulIdentifier","src":"9799:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9791:3:201"},"nodeType":"YulFunctionCall","src":"9791:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9785:5:201"},"nodeType":"YulFunctionCall","src":"9785:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9760:6:201"},"nodeType":"YulFunctionCall","src":"9760:45:201"},"nodeType":"YulExpressionStatement","src":"9760:45:201"},{"nodeType":"YulVariableDeclaration","src":"9818:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9829:6:201","type":"","value":"0x0340"},"variables":[{"name":"_28","nodeType":"YulTypedName","src":"9822:3:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"9859:6:201"},{"name":"_28","nodeType":"YulIdentifier","src":"9867:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9855:3:201"},"nodeType":"YulFunctionCall","src":"9855:16:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"9883:2:201"},{"name":"_28","nodeType":"YulIdentifier","src":"9887:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9879:3:201"},"nodeType":"YulFunctionCall","src":"9879:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9873:5:201"},"nodeType":"YulFunctionCall","src":"9873:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9848:6:201"},"nodeType":"YulFunctionCall","src":"9848:45:201"},"nodeType":"YulExpressionStatement","src":"9848:45:201"},{"nodeType":"YulVariableDeclaration","src":"9906:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9917:6:201","type":"","value":"0x0360"},"variables":[{"name":"_29","nodeType":"YulTypedName","src":"9910:3:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"9947:6:201"},{"name":"_29","nodeType":"YulIdentifier","src":"9955:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9943:3:201"},"nodeType":"YulFunctionCall","src":"9943:16:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"9971:2:201"},{"name":"_29","nodeType":"YulIdentifier","src":"9975:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9967:3:201"},"nodeType":"YulFunctionCall","src":"9967:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9961:5:201"},"nodeType":"YulFunctionCall","src":"9961:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9936:6:201"},"nodeType":"YulFunctionCall","src":"9936:45:201"},"nodeType":"YulExpressionStatement","src":"9936:45:201"},{"nodeType":"YulVariableDeclaration","src":"9994:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10005:6:201","type":"","value":"0x0380"},"variables":[{"name":"_30","nodeType":"YulTypedName","src":"9998:3:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"10035:6:201"},{"name":"_30","nodeType":"YulIdentifier","src":"10043:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10031:3:201"},"nodeType":"YulFunctionCall","src":"10031:16:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"10059:2:201"},{"name":"_30","nodeType":"YulIdentifier","src":"10063:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10055:3:201"},"nodeType":"YulFunctionCall","src":"10055:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10049:5:201"},"nodeType":"YulFunctionCall","src":"10049:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10024:6:201"},"nodeType":"YulFunctionCall","src":"10024:45:201"},"nodeType":"YulExpressionStatement","src":"10024:45:201"},{"nodeType":"YulVariableDeclaration","src":"10082:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10093:6:201","type":"","value":"0x03a0"},"variables":[{"name":"_31","nodeType":"YulTypedName","src":"10086:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10112:42:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"10145:2:201"},{"name":"_31","nodeType":"YulIdentifier","src":"10149:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10141:3:201"},"nodeType":"YulFunctionCall","src":"10141:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10135:5:201"},"nodeType":"YulFunctionCall","src":"10135:19:201"},"variables":[{"name":"memberValue0_17","nodeType":"YulTypedName","src":"10116:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_17","nodeType":"YulIdentifier","src":"10186:15:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"10207:6:201"},{"name":"_31","nodeType":"YulIdentifier","src":"10215:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10203:3:201"},"nodeType":"YulFunctionCall","src":"10203:16:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"10167:18:201"},"nodeType":"YulFunctionCall","src":"10167:53:201"},"nodeType":"YulExpressionStatement","src":"10167:53:201"},{"nodeType":"YulVariableDeclaration","src":"10233:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10244:6:201","type":"","value":"0x03c0"},"variables":[{"name":"_32","nodeType":"YulTypedName","src":"10237:3:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"10274:6:201"},{"name":"_32","nodeType":"YulIdentifier","src":"10282:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10270:3:201"},"nodeType":"YulFunctionCall","src":"10270:16:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"10298:2:201"},{"name":"_32","nodeType":"YulIdentifier","src":"10302:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10294:3:201"},"nodeType":"YulFunctionCall","src":"10294:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10288:5:201"},"nodeType":"YulFunctionCall","src":"10288:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10263:6:201"},"nodeType":"YulFunctionCall","src":"10263:45:201"},"nodeType":"YulExpressionStatement","src":"10263:45:201"},{"nodeType":"YulVariableDeclaration","src":"10321:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10332:6:201","type":"","value":"0x03e0"},"variables":[{"name":"_33","nodeType":"YulTypedName","src":"10325:3:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"10362:6:201"},{"name":"_33","nodeType":"YulIdentifier","src":"10370:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10358:3:201"},"nodeType":"YulFunctionCall","src":"10358:16:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"10386:2:201"},{"name":"_33","nodeType":"YulIdentifier","src":"10390:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10382:3:201"},"nodeType":"YulFunctionCall","src":"10382:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10376:5:201"},"nodeType":"YulFunctionCall","src":"10376:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10351:6:201"},"nodeType":"YulFunctionCall","src":"10351:45:201"},"nodeType":"YulExpressionStatement","src":"10351:45:201"},{"nodeType":"YulVariableDeclaration","src":"10409:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10420:6:201","type":"","value":"0x0400"},"variables":[{"name":"_34","nodeType":"YulTypedName","src":"10413:3:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"10450:6:201"},{"name":"_34","nodeType":"YulIdentifier","src":"10458:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10446:3:201"},"nodeType":"YulFunctionCall","src":"10446:16:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"10474:2:201"},{"name":"_34","nodeType":"YulIdentifier","src":"10478:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10470:3:201"},"nodeType":"YulFunctionCall","src":"10470:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10464:5:201"},"nodeType":"YulFunctionCall","src":"10464:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10439:6:201"},"nodeType":"YulFunctionCall","src":"10439:45:201"},"nodeType":"YulExpressionStatement","src":"10439:45:201"},{"nodeType":"YulVariableDeclaration","src":"10497:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10508:6:201","type":"","value":"0x0420"},"variables":[{"name":"_35","nodeType":"YulTypedName","src":"10501:3:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"10538:6:201"},{"name":"_35","nodeType":"YulIdentifier","src":"10546:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10534:3:201"},"nodeType":"YulFunctionCall","src":"10534:16:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"10562:2:201"},{"name":"_35","nodeType":"YulIdentifier","src":"10566:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10558:3:201"},"nodeType":"YulFunctionCall","src":"10558:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10552:5:201"},"nodeType":"YulFunctionCall","src":"10552:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10527:6:201"},"nodeType":"YulFunctionCall","src":"10527:45:201"},"nodeType":"YulExpressionStatement","src":"10527:45:201"},{"nodeType":"YulVariableDeclaration","src":"10585:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10596:6:201","type":"","value":"0x0440"},"variables":[{"name":"_36","nodeType":"YulTypedName","src":"10589:3:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"10626:6:201"},{"name":"_36","nodeType":"YulIdentifier","src":"10634:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10622:3:201"},"nodeType":"YulFunctionCall","src":"10622:16:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"10650:2:201"},{"name":"_36","nodeType":"YulIdentifier","src":"10654:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10646:3:201"},"nodeType":"YulFunctionCall","src":"10646:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10640:5:201"},"nodeType":"YulFunctionCall","src":"10640:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10615:6:201"},"nodeType":"YulFunctionCall","src":"10615:45:201"},"nodeType":"YulExpressionStatement","src":"10615:45:201"},{"nodeType":"YulVariableDeclaration","src":"10673:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10684:6:201","type":"","value":"0x0460"},"variables":[{"name":"_37","nodeType":"YulTypedName","src":"10677:3:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"10714:6:201"},{"name":"_37","nodeType":"YulIdentifier","src":"10722:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10710:3:201"},"nodeType":"YulFunctionCall","src":"10710:16:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"10738:2:201"},{"name":"_37","nodeType":"YulIdentifier","src":"10742:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10734:3:201"},"nodeType":"YulFunctionCall","src":"10734:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10728:5:201"},"nodeType":"YulFunctionCall","src":"10728:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10703:6:201"},"nodeType":"YulFunctionCall","src":"10703:45:201"},"nodeType":"YulExpressionStatement","src":"10703:45:201"},{"nodeType":"YulVariableDeclaration","src":"10761:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10772:6:201","type":"","value":"0x0480"},"variables":[{"name":"_38","nodeType":"YulTypedName","src":"10765:3:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"10802:6:201"},{"name":"_38","nodeType":"YulIdentifier","src":"10810:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10798:3:201"},"nodeType":"YulFunctionCall","src":"10798:16:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"10826:2:201"},{"name":"_38","nodeType":"YulIdentifier","src":"10830:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10822:3:201"},"nodeType":"YulFunctionCall","src":"10822:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10816:5:201"},"nodeType":"YulFunctionCall","src":"10816:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10791:6:201"},"nodeType":"YulFunctionCall","src":"10791:45:201"},"nodeType":"YulExpressionStatement","src":"10791:45:201"},{"nodeType":"YulVariableDeclaration","src":"10849:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10860:6:201","type":"","value":"0x04a0"},"variables":[{"name":"_39","nodeType":"YulTypedName","src":"10853:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10879:42:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"10912:2:201"},{"name":"_39","nodeType":"YulIdentifier","src":"10916:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10908:3:201"},"nodeType":"YulFunctionCall","src":"10908:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10902:5:201"},"nodeType":"YulFunctionCall","src":"10902:19:201"},"variables":[{"name":"memberValue0_18","nodeType":"YulTypedName","src":"10883:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_18","nodeType":"YulIdentifier","src":"10950:15:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"10971:6:201"},{"name":"_39","nodeType":"YulIdentifier","src":"10979:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10967:3:201"},"nodeType":"YulFunctionCall","src":"10967:16:201"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"10934:15:201"},"nodeType":"YulFunctionCall","src":"10934:50:201"},"nodeType":"YulExpressionStatement","src":"10934:50:201"},{"nodeType":"YulVariableDeclaration","src":"10997:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11008:6:201","type":"","value":"0x04c0"},"variables":[{"name":"_40","nodeType":"YulTypedName","src":"11001:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11027:42:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"11060:2:201"},{"name":"_40","nodeType":"YulIdentifier","src":"11064:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11056:3:201"},"nodeType":"YulFunctionCall","src":"11056:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11050:5:201"},"nodeType":"YulFunctionCall","src":"11050:19:201"},"variables":[{"name":"memberValue0_19","nodeType":"YulTypedName","src":"11031:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_19","nodeType":"YulIdentifier","src":"11098:15:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"11119:6:201"},{"name":"_40","nodeType":"YulIdentifier","src":"11127:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11115:3:201"},"nodeType":"YulFunctionCall","src":"11115:16:201"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"11082:15:201"},"nodeType":"YulFunctionCall","src":"11082:50:201"},"nodeType":"YulExpressionStatement","src":"11082:50:201"},{"nodeType":"YulVariableDeclaration","src":"11145:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11156:6:201","type":"","value":"0x04e0"},"variables":[{"name":"_41","nodeType":"YulTypedName","src":"11149:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11175:42:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"11208:2:201"},{"name":"_41","nodeType":"YulIdentifier","src":"11212:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11204:3:201"},"nodeType":"YulFunctionCall","src":"11204:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11198:5:201"},"nodeType":"YulFunctionCall","src":"11198:19:201"},"variables":[{"name":"memberValue0_20","nodeType":"YulTypedName","src":"11179:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_20","nodeType":"YulIdentifier","src":"11249:15:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"11270:6:201"},{"name":"_41","nodeType":"YulIdentifier","src":"11278:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11266:3:201"},"nodeType":"YulFunctionCall","src":"11266:16:201"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"11230:18:201"},"nodeType":"YulFunctionCall","src":"11230:53:201"},"nodeType":"YulExpressionStatement","src":"11230:53:201"},{"nodeType":"YulVariableDeclaration","src":"11296:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11307:6:201","type":"","value":"0x0500"},"variables":[{"name":"_42","nodeType":"YulTypedName","src":"11300:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11326:42:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"11359:2:201"},{"name":"_42","nodeType":"YulIdentifier","src":"11363:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11355:3:201"},"nodeType":"YulFunctionCall","src":"11355:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11349:5:201"},"nodeType":"YulFunctionCall","src":"11349:19:201"},"variables":[{"name":"memberValue0_21","nodeType":"YulTypedName","src":"11330:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_21","nodeType":"YulIdentifier","src":"11400:15:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"11421:6:201"},{"name":"_42","nodeType":"YulIdentifier","src":"11429:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11417:3:201"},"nodeType":"YulFunctionCall","src":"11417:16:201"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"11381:18:201"},"nodeType":"YulFunctionCall","src":"11381:53:201"},"nodeType":"YulExpressionStatement","src":"11381:53:201"},{"nodeType":"YulVariableDeclaration","src":"11447:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11458:6:201","type":"","value":"0x0520"},"variables":[{"name":"_43","nodeType":"YulTypedName","src":"11451:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11477:42:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"11510:2:201"},{"name":"_43","nodeType":"YulIdentifier","src":"11514:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11506:3:201"},"nodeType":"YulFunctionCall","src":"11506:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11500:5:201"},"nodeType":"YulFunctionCall","src":"11500:19:201"},"variables":[{"name":"memberValue0_22","nodeType":"YulTypedName","src":"11481:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_22","nodeType":"YulIdentifier","src":"11551:15:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"11572:6:201"},{"name":"_43","nodeType":"YulIdentifier","src":"11580:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11568:3:201"},"nodeType":"YulFunctionCall","src":"11568:16:201"}],"functionName":{"name":"abi_encode_uint128","nodeType":"YulIdentifier","src":"11532:18:201"},"nodeType":"YulFunctionCall","src":"11532:53:201"},"nodeType":"YulExpressionStatement","src":"11532:53:201"},{"nodeType":"YulVariableDeclaration","src":"11598:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11609:6:201","type":"","value":"0x0540"},"variables":[{"name":"_44","nodeType":"YulTypedName","src":"11602:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11628:42:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"11661:2:201"},{"name":"_44","nodeType":"YulIdentifier","src":"11665:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11657:3:201"},"nodeType":"YulFunctionCall","src":"11657:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11651:5:201"},"nodeType":"YulFunctionCall","src":"11651:19:201"},"variables":[{"name":"memberValue0_23","nodeType":"YulTypedName","src":"11632:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_23","nodeType":"YulIdentifier","src":"11699:15:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"11720:6:201"},{"name":"_44","nodeType":"YulIdentifier","src":"11728:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11716:3:201"},"nodeType":"YulFunctionCall","src":"11716:16:201"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"11683:15:201"},"nodeType":"YulFunctionCall","src":"11683:50:201"},"nodeType":"YulExpressionStatement","src":"11683:50:201"},{"nodeType":"YulVariableDeclaration","src":"11746:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11757:6:201","type":"","value":"0x0560"},"variables":[{"name":"_45","nodeType":"YulTypedName","src":"11750:3:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"11787:6:201"},{"name":"_45","nodeType":"YulIdentifier","src":"11795:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11783:3:201"},"nodeType":"YulFunctionCall","src":"11783:16:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"11811:2:201"},{"name":"_45","nodeType":"YulIdentifier","src":"11815:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11807:3:201"},"nodeType":"YulFunctionCall","src":"11807:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11801:5:201"},"nodeType":"YulFunctionCall","src":"11801:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11776:6:201"},"nodeType":"YulFunctionCall","src":"11776:45:201"},"nodeType":"YulExpressionStatement","src":"11776:45:201"},{"nodeType":"YulVariableDeclaration","src":"11834:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11845:6:201","type":"","value":"0x0580"},"variables":[{"name":"_46","nodeType":"YulTypedName","src":"11838:3:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"11875:6:201"},{"name":"_46","nodeType":"YulIdentifier","src":"11883:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11871:3:201"},"nodeType":"YulFunctionCall","src":"11871:16:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"11899:2:201"},{"name":"_46","nodeType":"YulIdentifier","src":"11903:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11895:3:201"},"nodeType":"YulFunctionCall","src":"11895:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11889:5:201"},"nodeType":"YulFunctionCall","src":"11889:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11864:6:201"},"nodeType":"YulFunctionCall","src":"11864:45:201"},"nodeType":"YulExpressionStatement","src":"11864:45:201"},{"nodeType":"YulVariableDeclaration","src":"11922:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11933:6:201","type":"","value":"0x05a0"},"variables":[{"name":"_47","nodeType":"YulTypedName","src":"11926:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11952:42:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"11985:2:201"},{"name":"_47","nodeType":"YulIdentifier","src":"11989:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11981:3:201"},"nodeType":"YulFunctionCall","src":"11981:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"11975:5:201"},"nodeType":"YulFunctionCall","src":"11975:19:201"},"variables":[{"name":"memberValue0_24","nodeType":"YulTypedName","src":"11956:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_24","nodeType":"YulIdentifier","src":"12024:15:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"12045:6:201"},{"name":"_47","nodeType":"YulIdentifier","src":"12053:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12041:3:201"},"nodeType":"YulFunctionCall","src":"12041:16:201"}],"functionName":{"name":"abi_encode_uint8","nodeType":"YulIdentifier","src":"12007:16:201"},"nodeType":"YulFunctionCall","src":"12007:51:201"},"nodeType":"YulExpressionStatement","src":"12007:51:201"},{"nodeType":"YulVariableDeclaration","src":"12071:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12082:6:201","type":"","value":"0x05c0"},"variables":[{"name":"_48","nodeType":"YulTypedName","src":"12075:3:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"12112:6:201"},{"name":"_48","nodeType":"YulIdentifier","src":"12120:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12108:3:201"},"nodeType":"YulFunctionCall","src":"12108:16:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"12136:2:201"},{"name":"_48","nodeType":"YulIdentifier","src":"12140:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12132:3:201"},"nodeType":"YulFunctionCall","src":"12132:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12126:5:201"},"nodeType":"YulFunctionCall","src":"12126:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12101:6:201"},"nodeType":"YulFunctionCall","src":"12101:45:201"},"nodeType":"YulExpressionStatement","src":"12101:45:201"},{"nodeType":"YulVariableDeclaration","src":"12159:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12170:6:201","type":"","value":"0x05e0"},"variables":[{"name":"_49","nodeType":"YulTypedName","src":"12163:3:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"12200:6:201"},{"name":"_49","nodeType":"YulIdentifier","src":"12208:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12196:3:201"},"nodeType":"YulFunctionCall","src":"12196:16:201"},{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"12224:2:201"},{"name":"_49","nodeType":"YulIdentifier","src":"12228:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12220:3:201"},"nodeType":"YulFunctionCall","src":"12220:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12214:5:201"},"nodeType":"YulFunctionCall","src":"12214:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12189:6:201"},"nodeType":"YulFunctionCall","src":"12189:45:201"},"nodeType":"YulExpressionStatement","src":"12189:45:201"},{"nodeType":"YulVariableDeclaration","src":"12247:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12258:6:201","type":"","value":"0x0600"},"variables":[{"name":"_50","nodeType":"YulTypedName","src":"12251:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12277:42:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"12310:2:201"},{"name":"_50","nodeType":"YulIdentifier","src":"12314:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12306:3:201"},"nodeType":"YulFunctionCall","src":"12306:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12300:5:201"},"nodeType":"YulFunctionCall","src":"12300:19:201"},"variables":[{"name":"memberValue0_25","nodeType":"YulTypedName","src":"12281:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_25","nodeType":"YulIdentifier","src":"12350:15:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"12371:6:201"},{"name":"_50","nodeType":"YulIdentifier","src":"12379:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12367:3:201"},"nodeType":"YulFunctionCall","src":"12367:16:201"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"12332:17:201"},"nodeType":"YulFunctionCall","src":"12332:52:201"},"nodeType":"YulExpressionStatement","src":"12332:52:201"},{"nodeType":"YulVariableDeclaration","src":"12397:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12408:6:201","type":"","value":"0x0620"},"variables":[{"name":"_51","nodeType":"YulTypedName","src":"12401:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12427:42:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"12460:2:201"},{"name":"_51","nodeType":"YulIdentifier","src":"12464:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12456:3:201"},"nodeType":"YulFunctionCall","src":"12456:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12450:5:201"},"nodeType":"YulFunctionCall","src":"12450:19:201"},"variables":[{"name":"memberValue0_26","nodeType":"YulTypedName","src":"12431:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_26","nodeType":"YulIdentifier","src":"12500:15:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"12521:6:201"},{"name":"_51","nodeType":"YulIdentifier","src":"12529:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12517:3:201"},"nodeType":"YulFunctionCall","src":"12517:16:201"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"12482:17:201"},"nodeType":"YulFunctionCall","src":"12482:52:201"},"nodeType":"YulExpressionStatement","src":"12482:52:201"},{"nodeType":"YulVariableDeclaration","src":"12547:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12558:6:201","type":"","value":"0x0640"},"variables":[{"name":"_52","nodeType":"YulTypedName","src":"12551:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12577:42:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"12610:2:201"},{"name":"_52","nodeType":"YulIdentifier","src":"12614:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12606:3:201"},"nodeType":"YulFunctionCall","src":"12606:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12600:5:201"},"nodeType":"YulFunctionCall","src":"12600:19:201"},"variables":[{"name":"memberValue0_27","nodeType":"YulTypedName","src":"12581:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_27","nodeType":"YulIdentifier","src":"12650:15:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"12671:6:201"},{"name":"_52","nodeType":"YulIdentifier","src":"12679:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12667:3:201"},"nodeType":"YulFunctionCall","src":"12667:16:201"}],"functionName":{"name":"abi_encode_uint16","nodeType":"YulIdentifier","src":"12632:17:201"},"nodeType":"YulFunctionCall","src":"12632:52:201"},"nodeType":"YulExpressionStatement","src":"12632:52:201"},{"nodeType":"YulVariableDeclaration","src":"12697:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12708:6:201","type":"","value":"0x0660"},"variables":[{"name":"_53","nodeType":"YulTypedName","src":"12701:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12727:42:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"12760:2:201"},{"name":"_53","nodeType":"YulIdentifier","src":"12764:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12756:3:201"},"nodeType":"YulFunctionCall","src":"12756:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12750:5:201"},"nodeType":"YulFunctionCall","src":"12750:19:201"},"variables":[{"name":"memberValue0_28","nodeType":"YulTypedName","src":"12731:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_28","nodeType":"YulIdentifier","src":"12801:15:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"12822:6:201"},{"name":"_53","nodeType":"YulIdentifier","src":"12830:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12818:3:201"},"nodeType":"YulFunctionCall","src":"12818:16:201"}],"functionName":{"name":"abi_encode_address","nodeType":"YulIdentifier","src":"12782:18:201"},"nodeType":"YulFunctionCall","src":"12782:53:201"},"nodeType":"YulExpressionStatement","src":"12782:53:201"},{"nodeType":"YulVariableDeclaration","src":"12848:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12859:6:201","type":"","value":"0x0680"},"variables":[{"name":"_54","nodeType":"YulTypedName","src":"12852:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12878:42:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"12911:2:201"},{"name":"_54","nodeType":"YulIdentifier","src":"12915:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12907:3:201"},"nodeType":"YulFunctionCall","src":"12907:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12901:5:201"},"nodeType":"YulFunctionCall","src":"12901:19:201"},"variables":[{"name":"memberValue0_29","nodeType":"YulTypedName","src":"12882:15:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"12944:6:201"},{"name":"_54","nodeType":"YulIdentifier","src":"12952:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12940:3:201"},"nodeType":"YulFunctionCall","src":"12940:16:201"},{"arguments":[{"name":"tail_4","nodeType":"YulIdentifier","src":"12962:6:201"},{"name":"tail_2","nodeType":"YulIdentifier","src":"12970:6:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12958:3:201"},"nodeType":"YulFunctionCall","src":"12958:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12933:6:201"},"nodeType":"YulFunctionCall","src":"12933:45:201"},"nodeType":"YulExpressionStatement","src":"12933:45:201"},{"nodeType":"YulVariableDeclaration","src":"12991:56:201","value":{"arguments":[{"name":"memberValue0_29","nodeType":"YulIdentifier","src":"13023:15:201"},{"name":"tail_4","nodeType":"YulIdentifier","src":"13040:6:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"13005:17:201"},"nodeType":"YulFunctionCall","src":"13005:42:201"},"variables":[{"name":"tail_5","nodeType":"YulTypedName","src":"12995:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13060:17:201","value":{"kind":"number","nodeType":"YulLiteral","src":"13071:6:201","type":"","value":"0x06a0"},"variables":[{"name":"_55","nodeType":"YulTypedName","src":"13064:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13090:42:201","value":{"arguments":[{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"13123:2:201"},{"name":"_55","nodeType":"YulIdentifier","src":"13127:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13119:3:201"},"nodeType":"YulFunctionCall","src":"13119:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13113:5:201"},"nodeType":"YulFunctionCall","src":"13113:19:201"},"variables":[{"name":"memberValue0_30","nodeType":"YulTypedName","src":"13094:15:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_30","nodeType":"YulIdentifier","src":"13161:15:201"},{"arguments":[{"name":"tail_2","nodeType":"YulIdentifier","src":"13182:6:201"},{"name":"_55","nodeType":"YulIdentifier","src":"13190:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13178:3:201"},"nodeType":"YulFunctionCall","src":"13178:16:201"}],"functionName":{"name":"abi_encode_bool","nodeType":"YulIdentifier","src":"13145:15:201"},"nodeType":"YulFunctionCall","src":"13145:50:201"},"nodeType":"YulExpressionStatement","src":"13145:50:201"},{"nodeType":"YulAssignment","src":"13208:16:201","value":{"name":"tail_5","nodeType":"YulIdentifier","src":"13218:6:201"},"variableNames":[{"name":"tail_2","nodeType":"YulIdentifier","src":"13208:6:201"}]},{"nodeType":"YulAssignment","src":"13237:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"13251:6:201"},{"name":"_3","nodeType":"YulIdentifier","src":"13259:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13247:3:201"},"nodeType":"YulFunctionCall","src":"13247:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"13237:6:201"}]},{"nodeType":"YulAssignment","src":"13275:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"13286:3:201"},{"name":"_3","nodeType":"YulIdentifier","src":"13291:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13282:3:201"},"nodeType":"YulFunctionCall","src":"13282:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"13275:3:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6301:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"6304:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6298:2:201"},"nodeType":"YulFunctionCall","src":"6298:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"6312:18:201","statements":[{"nodeType":"YulAssignment","src":"6314:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"6323:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"6326:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6319:3:201"},"nodeType":"YulFunctionCall","src":"6319:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"6314:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"6294:3:201","statements":[]},"src":"6290:7014:201"},{"nodeType":"YulAssignment","src":"13313:14:201","value":{"name":"tail_2","nodeType":"YulIdentifier","src":"13321:6:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13313:4:201"}]},{"expression":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"13371:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13383:9:201"},{"name":"_3","nodeType":"YulIdentifier","src":"13394:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13379:3:201"},"nodeType":"YulFunctionCall","src":"13379:18:201"}],"functionName":{"name":"abi_encode_struct_BaseCurrencyInfo","nodeType":"YulIdentifier","src":"13336:34:201"},"nodeType":"YulFunctionCall","src":"13336:62:201"},"nodeType":"YulExpressionStatement","src":"13336:62:201"}]},"name":"abi_encode_tuple_t_array$_t_struct$_AggregatedReserveData_$34757_memory_ptr_$dyn_memory_ptr_t_struct$_BaseCurrencyInfo_$34781_memory_ptr__to_t_array$_t_struct$_AggregatedReserveData_$34757_memory_ptr_$dyn_memory_ptr_t_struct$_BaseCurrencyInfo_$34781_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5857:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5868:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5876:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5887:4:201","type":""}],"src":"5567:7837:201"},{"body":{"nodeType":"YulBlock","src":"13469:102:201","statements":[{"nodeType":"YulAssignment","src":"13479:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13494:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13488:5:201"},"nodeType":"YulFunctionCall","src":"13488:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"13479:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13559:5:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"13510:48:201"},"nodeType":"YulFunctionCall","src":"13510:55:201"},"nodeType":"YulExpressionStatement","src":"13510:55:201"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"13448:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"13459:5:201","type":""}],"src":"13409:162:201"},{"body":{"nodeType":"YulBlock","src":"13657:194:201","statements":[{"body":{"nodeType":"YulBlock","src":"13703:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13712:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13715:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13705:6:201"},"nodeType":"YulFunctionCall","src":"13705:12:201"},"nodeType":"YulExpressionStatement","src":"13705:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13678:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"13687:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13674:3:201"},"nodeType":"YulFunctionCall","src":"13674:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"13699:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13670:3:201"},"nodeType":"YulFunctionCall","src":"13670:32:201"},"nodeType":"YulIf","src":"13667:52:201"},{"nodeType":"YulVariableDeclaration","src":"13728:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13747:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13741:5:201"},"nodeType":"YulFunctionCall","src":"13741:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13732:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13815:5:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"13766:48:201"},"nodeType":"YulFunctionCall","src":"13766:55:201"},"nodeType":"YulExpressionStatement","src":"13766:55:201"},{"nodeType":"YulAssignment","src":"13830:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"13840:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13830:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13623:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13634:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13646:6:201","type":""}],"src":"13576:275:201"},{"body":{"nodeType":"YulBlock","src":"13888:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13905:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13908:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13898:6:201"},"nodeType":"YulFunctionCall","src":"13898:88:201"},"nodeType":"YulExpressionStatement","src":"13898:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14002:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"14005:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13995:6:201"},"nodeType":"YulFunctionCall","src":"13995:15:201"},"nodeType":"YulExpressionStatement","src":"13995:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14026:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14029:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14019:6:201"},"nodeType":"YulFunctionCall","src":"14019:15:201"},"nodeType":"YulExpressionStatement","src":"14019:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"13856:184:201"},{"body":{"nodeType":"YulBlock","src":"14091:206:201","statements":[{"nodeType":"YulAssignment","src":"14101:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14117:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14111:5:201"},"nodeType":"YulFunctionCall","src":"14111:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"14101:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"14129:34:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"14151:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"14159:3:201","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14147:3:201"},"nodeType":"YulFunctionCall","src":"14147:16:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"14133:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"14238:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"14240:16:201"},"nodeType":"YulFunctionCall","src":"14240:18:201"},"nodeType":"YulExpressionStatement","src":"14240:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"14181:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"14193:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14178:2:201"},"nodeType":"YulFunctionCall","src":"14178:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"14217:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"14229:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"14214:2:201"},"nodeType":"YulFunctionCall","src":"14214:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"14175:2:201"},"nodeType":"YulFunctionCall","src":"14175:62:201"},"nodeType":"YulIf","src":"14172:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14276:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"14280:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14269:6:201"},"nodeType":"YulFunctionCall","src":"14269:22:201"},"nodeType":"YulExpressionStatement","src":"14269:22:201"}]},"name":"allocate_memory_4027","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"14080:6:201","type":""}],"src":"14045:252:201"},{"body":{"nodeType":"YulBlock","src":"14348:207:201","statements":[{"nodeType":"YulAssignment","src":"14358:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14374:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14368:5:201"},"nodeType":"YulFunctionCall","src":"14368:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"14358:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"14386:35:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"14408:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"14416:4:201","type":"","value":"0xa0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14404:3:201"},"nodeType":"YulFunctionCall","src":"14404:17:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"14390:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"14496:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"14498:16:201"},"nodeType":"YulFunctionCall","src":"14498:18:201"},"nodeType":"YulExpressionStatement","src":"14498:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"14439:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"14451:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14436:2:201"},"nodeType":"YulFunctionCall","src":"14436:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"14475:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"14487:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"14472:2:201"},"nodeType":"YulFunctionCall","src":"14472:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"14433:2:201"},"nodeType":"YulFunctionCall","src":"14433:62:201"},"nodeType":"YulIf","src":"14430:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14534:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"14538:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14527:6:201"},"nodeType":"YulFunctionCall","src":"14527:22:201"},"nodeType":"YulExpressionStatement","src":"14527:22:201"}]},"name":"allocate_memory_4029","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"14337:6:201","type":""}],"src":"14302:253:201"},{"body":{"nodeType":"YulBlock","src":"14605:289:201","statements":[{"nodeType":"YulAssignment","src":"14615:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14631:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14625:5:201"},"nodeType":"YulFunctionCall","src":"14625:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"14615:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"14643:117:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"14665:6:201"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"14681:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"14687:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14677:3:201"},"nodeType":"YulFunctionCall","src":"14677:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"14692:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"14673:3:201"},"nodeType":"YulFunctionCall","src":"14673:86:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14661:3:201"},"nodeType":"YulFunctionCall","src":"14661:99:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"14647:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"14835:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"14837:16:201"},"nodeType":"YulFunctionCall","src":"14837:18:201"},"nodeType":"YulExpressionStatement","src":"14837:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"14778:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"14790:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14775:2:201"},"nodeType":"YulFunctionCall","src":"14775:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"14814:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"14826:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"14811:2:201"},"nodeType":"YulFunctionCall","src":"14811:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"14772:2:201"},"nodeType":"YulFunctionCall","src":"14772:62:201"},"nodeType":"YulIf","src":"14769:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14873:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"14877:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14866:6:201"},"nodeType":"YulFunctionCall","src":"14866:22:201"},"nodeType":"YulExpressionStatement","src":"14866:22:201"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"14585:4:201","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"14594:6:201","type":""}],"src":"14560:334:201"},{"body":{"nodeType":"YulBlock","src":"15005:929:201","statements":[{"nodeType":"YulVariableDeclaration","src":"15015:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"15025:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"15019:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"15072:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15081:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15084:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15074:6:201"},"nodeType":"YulFunctionCall","src":"15074:12:201"},"nodeType":"YulExpressionStatement","src":"15074:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"15047:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"15056:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"15043:3:201"},"nodeType":"YulFunctionCall","src":"15043:23:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15068:2:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"15039:3:201"},"nodeType":"YulFunctionCall","src":"15039:32:201"},"nodeType":"YulIf","src":"15036:52:201"},{"nodeType":"YulVariableDeclaration","src":"15097:30:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15117:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15111:5:201"},"nodeType":"YulFunctionCall","src":"15111:16:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"15101:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15136:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"15146:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"15140:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"15191:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15200:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15203:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15193:6:201"},"nodeType":"YulFunctionCall","src":"15193:12:201"},"nodeType":"YulExpressionStatement","src":"15193:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"15179:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"15187:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15176:2:201"},"nodeType":"YulFunctionCall","src":"15176:14:201"},"nodeType":"YulIf","src":"15173:34:201"},{"nodeType":"YulVariableDeclaration","src":"15216:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15230:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"15241:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15226:3:201"},"nodeType":"YulFunctionCall","src":"15226:22:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"15220:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"15296:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15305:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15308:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15298:6:201"},"nodeType":"YulFunctionCall","src":"15298:12:201"},"nodeType":"YulExpressionStatement","src":"15298:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"15275:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"15279:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15271:3:201"},"nodeType":"YulFunctionCall","src":"15271:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15286:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"15267:3:201"},"nodeType":"YulFunctionCall","src":"15267:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"15260:6:201"},"nodeType":"YulFunctionCall","src":"15260:35:201"},"nodeType":"YulIf","src":"15257:55:201"},{"nodeType":"YulVariableDeclaration","src":"15321:19:201","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"15337:2:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15331:5:201"},"nodeType":"YulFunctionCall","src":"15331:9:201"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"15325:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"15363:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"15365:16:201"},"nodeType":"YulFunctionCall","src":"15365:18:201"},"nodeType":"YulExpressionStatement","src":"15365:18:201"}]},"condition":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"15355:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"15359:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15352:2:201"},"nodeType":"YulFunctionCall","src":"15352:10:201"},"nodeType":"YulIf","src":"15349:36:201"},{"nodeType":"YulVariableDeclaration","src":"15394:20:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15408:1:201","type":"","value":"5"},{"name":"_4","nodeType":"YulIdentifier","src":"15411:2:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"15404:3:201"},"nodeType":"YulFunctionCall","src":"15404:10:201"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"15398:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15423:39:201","value":{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"15454:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15458:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15450:3:201"},"nodeType":"YulFunctionCall","src":"15450:11:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"15434:15:201"},"nodeType":"YulFunctionCall","src":"15434:28:201"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"15427:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"15471:16:201","value":{"name":"dst","nodeType":"YulIdentifier","src":"15484:3:201"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"15475:5:201","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"15503:3:201"},{"name":"_4","nodeType":"YulIdentifier","src":"15508:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15496:6:201"},"nodeType":"YulFunctionCall","src":"15496:15:201"},"nodeType":"YulExpressionStatement","src":"15496:15:201"},{"nodeType":"YulAssignment","src":"15520:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"15531:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15536:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15527:3:201"},"nodeType":"YulFunctionCall","src":"15527:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"15520:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"15548:34:201","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"15570:2:201"},{"name":"_5","nodeType":"YulIdentifier","src":"15574:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15566:3:201"},"nodeType":"YulFunctionCall","src":"15566:11:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15579:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15562:3:201"},"nodeType":"YulFunctionCall","src":"15562:20:201"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"15552:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"15614:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15623:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15626:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15616:6:201"},"nodeType":"YulFunctionCall","src":"15616:12:201"},"nodeType":"YulExpressionStatement","src":"15616:12:201"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"15597:6:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"15605:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15594:2:201"},"nodeType":"YulFunctionCall","src":"15594:19:201"},"nodeType":"YulIf","src":"15591:39:201"},{"nodeType":"YulVariableDeclaration","src":"15639:22:201","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"15654:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15658:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15650:3:201"},"nodeType":"YulFunctionCall","src":"15650:11:201"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"15643:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"15726:178:201","statements":[{"nodeType":"YulVariableDeclaration","src":"15740:23:201","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"15759:3:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15753:5:201"},"nodeType":"YulFunctionCall","src":"15753:10:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"15744:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"15825:5:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"15776:48:201"},"nodeType":"YulFunctionCall","src":"15776:55:201"},"nodeType":"YulExpressionStatement","src":"15776:55:201"},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"15851:3:201"},{"name":"value","nodeType":"YulIdentifier","src":"15856:5:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15844:6:201"},"nodeType":"YulFunctionCall","src":"15844:18:201"},"nodeType":"YulExpressionStatement","src":"15844:18:201"},{"nodeType":"YulAssignment","src":"15875:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"15886:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15891:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15882:3:201"},"nodeType":"YulFunctionCall","src":"15882:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"15875:3:201"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"15681:3:201"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"15686:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15678:2:201"},"nodeType":"YulFunctionCall","src":"15678:15:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"15694:23:201","statements":[{"nodeType":"YulAssignment","src":"15696:19:201","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"15707:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"15712:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15703:3:201"},"nodeType":"YulFunctionCall","src":"15703:12:201"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"15696:3:201"}]}]},"pre":{"nodeType":"YulBlock","src":"15674:3:201","statements":[]},"src":"15670:234:201"},{"nodeType":"YulAssignment","src":"15913:15:201","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"15923:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"15913:6:201"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14971:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"14982:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"14994:6:201","type":""}],"src":"14899:1035:201"},{"body":{"nodeType":"YulBlock","src":"16027:335:201","statements":[{"body":{"nodeType":"YulBlock","src":"16071:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16080:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16083:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16073:6:201"},"nodeType":"YulFunctionCall","src":"16073:12:201"},"nodeType":"YulExpressionStatement","src":"16073:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"16048:3:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"16053:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16044:3:201"},"nodeType":"YulFunctionCall","src":"16044:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"16065:4:201","type":"","value":"0x20"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"16040:3:201"},"nodeType":"YulFunctionCall","src":"16040:30:201"},"nodeType":"YulIf","src":"16037:50:201"},{"nodeType":"YulVariableDeclaration","src":"16096:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16116:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16110:5:201"},"nodeType":"YulFunctionCall","src":"16110:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"16100:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16128:35:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"16150:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"16158:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16146:3:201"},"nodeType":"YulFunctionCall","src":"16146:17:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"16132:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"16238:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"16240:16:201"},"nodeType":"YulFunctionCall","src":"16240:18:201"},"nodeType":"YulExpressionStatement","src":"16240:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"16181:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"16193:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"16178:2:201"},"nodeType":"YulFunctionCall","src":"16178:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"16217:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"16229:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"16214:2:201"},"nodeType":"YulFunctionCall","src":"16214:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"16175:2:201"},"nodeType":"YulFunctionCall","src":"16175:62:201"},"nodeType":"YulIf","src":"16172:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16276:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"16280:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16269:6:201"},"nodeType":"YulFunctionCall","src":"16269:22:201"},"nodeType":"YulExpressionStatement","src":"16269:22:201"},{"nodeType":"YulAssignment","src":"16300:15:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"16309:6:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"16300:5:201"}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"16331:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16345:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16339:5:201"},"nodeType":"YulFunctionCall","src":"16339:16:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16324:6:201"},"nodeType":"YulFunctionCall","src":"16324:32:201"},"nodeType":"YulExpressionStatement","src":"16324:32:201"}]},"name":"abi_decode_struct_UserConfigurationMap_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15998:9:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"16009:3:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"16017:5:201","type":""}],"src":"15939:423:201"},{"body":{"nodeType":"YulBlock","src":"16487:156:201","statements":[{"body":{"nodeType":"YulBlock","src":"16533:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16542:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16545:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16535:6:201"},"nodeType":"YulFunctionCall","src":"16535:12:201"},"nodeType":"YulExpressionStatement","src":"16535:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"16508:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"16517:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16504:3:201"},"nodeType":"YulFunctionCall","src":"16504:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"16529:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"16500:3:201"},"nodeType":"YulFunctionCall","src":"16500:32:201"},"nodeType":"YulIf","src":"16497:52:201"},{"nodeType":"YulAssignment","src":"16558:79:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16618:9:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"16629:7:201"}],"functionName":{"name":"abi_decode_struct_UserConfigurationMap_fromMemory","nodeType":"YulIdentifier","src":"16568:49:201"},"nodeType":"YulFunctionCall","src":"16568:69:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"16558:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_UserConfigurationMap_$21322_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16453:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"16464:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"16476:6:201","type":""}],"src":"16367:276:201"},{"body":{"nodeType":"YulBlock","src":"16729:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"16775:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16784:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16787:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16777:6:201"},"nodeType":"YulFunctionCall","src":"16777:12:201"},"nodeType":"YulExpressionStatement","src":"16777:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"16750:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"16759:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16746:3:201"},"nodeType":"YulFunctionCall","src":"16746:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"16771:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"16742:3:201"},"nodeType":"YulFunctionCall","src":"16742:32:201"},"nodeType":"YulIf","src":"16739:52:201"},{"nodeType":"YulAssignment","src":"16800:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16816:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16810:5:201"},"nodeType":"YulFunctionCall","src":"16810:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"16800:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16695:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"16706:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"16718:6:201","type":""}],"src":"16648:184:201"},{"body":{"nodeType":"YulBlock","src":"16869:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16886:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16889:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16879:6:201"},"nodeType":"YulFunctionCall","src":"16879:88:201"},"nodeType":"YulExpressionStatement","src":"16879:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16983:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"16986:4:201","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16976:6:201"},"nodeType":"YulFunctionCall","src":"16976:15:201"},"nodeType":"YulExpressionStatement","src":"16976:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17007:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17010:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17000:6:201"},"nodeType":"YulFunctionCall","src":"17000:15:201"},"nodeType":"YulExpressionStatement","src":"17000:15:201"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"16837:184:201"},{"body":{"nodeType":"YulBlock","src":"17086:132:201","statements":[{"nodeType":"YulAssignment","src":"17096:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"17111:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17105:5:201"},"nodeType":"YulFunctionCall","src":"17105:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"17096:5:201"}]},{"body":{"nodeType":"YulBlock","src":"17196:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17205:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17208:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17198:6:201"},"nodeType":"YulFunctionCall","src":"17198:12:201"},"nodeType":"YulExpressionStatement","src":"17198:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17140:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17151:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"17158:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17147:3:201"},"nodeType":"YulFunctionCall","src":"17147:46:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"17137:2:201"},"nodeType":"YulFunctionCall","src":"17137:57:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17130:6:201"},"nodeType":"YulFunctionCall","src":"17130:65:201"},"nodeType":"YulIf","src":"17127:85:201"}]},"name":"abi_decode_uint128_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"17065:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"17076:5:201","type":""}],"src":"17026:192:201"},{"body":{"nodeType":"YulBlock","src":"17282:110:201","statements":[{"nodeType":"YulAssignment","src":"17292:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"17307:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17301:5:201"},"nodeType":"YulFunctionCall","src":"17301:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"17292:5:201"}]},{"body":{"nodeType":"YulBlock","src":"17370:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17379:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17382:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17372:6:201"},"nodeType":"YulFunctionCall","src":"17372:12:201"},"nodeType":"YulExpressionStatement","src":"17372:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17336:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17347:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"17354:12:201","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17343:3:201"},"nodeType":"YulFunctionCall","src":"17343:24:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"17333:2:201"},"nodeType":"YulFunctionCall","src":"17333:35:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17326:6:201"},"nodeType":"YulFunctionCall","src":"17326:43:201"},"nodeType":"YulIf","src":"17323:63:201"}]},"name":"abi_decode_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"17261:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"17272:5:201","type":""}],"src":"17223:169:201"},{"body":{"nodeType":"YulBlock","src":"17456:104:201","statements":[{"nodeType":"YulAssignment","src":"17466:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"17481:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"17475:5:201"},"nodeType":"YulFunctionCall","src":"17475:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"17466:5:201"}]},{"body":{"nodeType":"YulBlock","src":"17538:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17547:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17550:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17540:6:201"},"nodeType":"YulFunctionCall","src":"17540:12:201"},"nodeType":"YulExpressionStatement","src":"17540:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17510:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17521:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"17528:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17517:3:201"},"nodeType":"YulFunctionCall","src":"17517:18:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"17507:2:201"},"nodeType":"YulFunctionCall","src":"17507:29:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17500:6:201"},"nodeType":"YulFunctionCall","src":"17500:37:201"},"nodeType":"YulIf","src":"17497:57:201"}]},"name":"abi_decode_uint16_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"17435:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"17446:5:201","type":""}],"src":"17397:163:201"},{"body":{"nodeType":"YulBlock","src":"17676:1538:201","statements":[{"body":{"nodeType":"YulBlock","src":"17723:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17732:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"17735:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"17725:6:201"},"nodeType":"YulFunctionCall","src":"17725:12:201"},"nodeType":"YulExpressionStatement","src":"17725:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"17697:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"17706:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"17693:3:201"},"nodeType":"YulFunctionCall","src":"17693:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"17718:3:201","type":"","value":"480"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"17689:3:201"},"nodeType":"YulFunctionCall","src":"17689:33:201"},"nodeType":"YulIf","src":"17686:53:201"},{"nodeType":"YulVariableDeclaration","src":"17748:35:201","value":{"arguments":[],"functionName":{"name":"allocate_memory_4027","nodeType":"YulIdentifier","src":"17761:20:201"},"nodeType":"YulFunctionCall","src":"17761:22:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"17752:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17799:5:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17856:9:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"17867:7:201"}],"functionName":{"name":"abi_decode_struct_UserConfigurationMap_fromMemory","nodeType":"YulIdentifier","src":"17806:49:201"},"nodeType":"YulFunctionCall","src":"17806:69:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17792:6:201"},"nodeType":"YulFunctionCall","src":"17792:84:201"},"nodeType":"YulExpressionStatement","src":"17792:84:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17896:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"17903:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17892:3:201"},"nodeType":"YulFunctionCall","src":"17892:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"17942:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"17953:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17938:3:201"},"nodeType":"YulFunctionCall","src":"17938:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"17908:29:201"},"nodeType":"YulFunctionCall","src":"17908:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17885:6:201"},"nodeType":"YulFunctionCall","src":"17885:73:201"},"nodeType":"YulExpressionStatement","src":"17885:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"17978:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"17985:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"17974:3:201"},"nodeType":"YulFunctionCall","src":"17974:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18024:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18035:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18020:3:201"},"nodeType":"YulFunctionCall","src":"18020:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"17990:29:201"},"nodeType":"YulFunctionCall","src":"17990:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"17967:6:201"},"nodeType":"YulFunctionCall","src":"17967:73:201"},"nodeType":"YulExpressionStatement","src":"17967:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18060:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"18067:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18056:3:201"},"nodeType":"YulFunctionCall","src":"18056:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18106:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18117:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18102:3:201"},"nodeType":"YulFunctionCall","src":"18102:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"18072:29:201"},"nodeType":"YulFunctionCall","src":"18072:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18049:6:201"},"nodeType":"YulFunctionCall","src":"18049:73:201"},"nodeType":"YulExpressionStatement","src":"18049:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18142:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"18149:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18138:3:201"},"nodeType":"YulFunctionCall","src":"18138:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18189:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18200:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18185:3:201"},"nodeType":"YulFunctionCall","src":"18185:19:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"18155:29:201"},"nodeType":"YulFunctionCall","src":"18155:50:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18131:6:201"},"nodeType":"YulFunctionCall","src":"18131:75:201"},"nodeType":"YulExpressionStatement","src":"18131:75:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18226:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"18233:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18222:3:201"},"nodeType":"YulFunctionCall","src":"18222:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18273:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18284:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18269:3:201"},"nodeType":"YulFunctionCall","src":"18269:19:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"18239:29:201"},"nodeType":"YulFunctionCall","src":"18239:50:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18215:6:201"},"nodeType":"YulFunctionCall","src":"18215:75:201"},"nodeType":"YulExpressionStatement","src":"18215:75:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18310:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"18317:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18306:3:201"},"nodeType":"YulFunctionCall","src":"18306:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18356:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18367:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18352:3:201"},"nodeType":"YulFunctionCall","src":"18352:19:201"}],"functionName":{"name":"abi_decode_uint40_fromMemory","nodeType":"YulIdentifier","src":"18323:28:201"},"nodeType":"YulFunctionCall","src":"18323:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18299:6:201"},"nodeType":"YulFunctionCall","src":"18299:74:201"},"nodeType":"YulExpressionStatement","src":"18299:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18393:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"18400:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18389:3:201"},"nodeType":"YulFunctionCall","src":"18389:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18439:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18450:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18435:3:201"},"nodeType":"YulFunctionCall","src":"18435:19:201"}],"functionName":{"name":"abi_decode_uint16_fromMemory","nodeType":"YulIdentifier","src":"18406:28:201"},"nodeType":"YulFunctionCall","src":"18406:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18382:6:201"},"nodeType":"YulFunctionCall","src":"18382:74:201"},"nodeType":"YulExpressionStatement","src":"18382:74:201"},{"nodeType":"YulVariableDeclaration","src":"18465:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"18475:3:201","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"18469:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18498:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"18505:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18494:3:201"},"nodeType":"YulFunctionCall","src":"18494:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18544:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"18555:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18540:3:201"},"nodeType":"YulFunctionCall","src":"18540:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"18510:29:201"},"nodeType":"YulFunctionCall","src":"18510:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18487:6:201"},"nodeType":"YulFunctionCall","src":"18487:73:201"},"nodeType":"YulExpressionStatement","src":"18487:73:201"},{"nodeType":"YulVariableDeclaration","src":"18569:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"18579:3:201","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"18573:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18602:5:201"},{"name":"_2","nodeType":"YulIdentifier","src":"18609:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18598:3:201"},"nodeType":"YulFunctionCall","src":"18598:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18648:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"18659:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18644:3:201"},"nodeType":"YulFunctionCall","src":"18644:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"18614:29:201"},"nodeType":"YulFunctionCall","src":"18614:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18591:6:201"},"nodeType":"YulFunctionCall","src":"18591:73:201"},"nodeType":"YulExpressionStatement","src":"18591:73:201"},{"nodeType":"YulVariableDeclaration","src":"18673:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"18683:3:201","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"18677:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18706:5:201"},{"name":"_3","nodeType":"YulIdentifier","src":"18713:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18702:3:201"},"nodeType":"YulFunctionCall","src":"18702:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18752:9:201"},{"name":"_3","nodeType":"YulIdentifier","src":"18763:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18748:3:201"},"nodeType":"YulFunctionCall","src":"18748:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"18718:29:201"},"nodeType":"YulFunctionCall","src":"18718:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18695:6:201"},"nodeType":"YulFunctionCall","src":"18695:73:201"},"nodeType":"YulExpressionStatement","src":"18695:73:201"},{"nodeType":"YulVariableDeclaration","src":"18777:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"18787:3:201","type":"","value":"352"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"18781:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18810:5:201"},{"name":"_4","nodeType":"YulIdentifier","src":"18817:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18806:3:201"},"nodeType":"YulFunctionCall","src":"18806:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18856:9:201"},{"name":"_4","nodeType":"YulIdentifier","src":"18867:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18852:3:201"},"nodeType":"YulFunctionCall","src":"18852:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"18822:29:201"},"nodeType":"YulFunctionCall","src":"18822:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18799:6:201"},"nodeType":"YulFunctionCall","src":"18799:73:201"},"nodeType":"YulExpressionStatement","src":"18799:73:201"},{"nodeType":"YulVariableDeclaration","src":"18881:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"18891:3:201","type":"","value":"384"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"18885:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"18914:5:201"},{"name":"_5","nodeType":"YulIdentifier","src":"18921:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18910:3:201"},"nodeType":"YulFunctionCall","src":"18910:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18960:9:201"},{"name":"_5","nodeType":"YulIdentifier","src":"18971:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18956:3:201"},"nodeType":"YulFunctionCall","src":"18956:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"18926:29:201"},"nodeType":"YulFunctionCall","src":"18926:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18903:6:201"},"nodeType":"YulFunctionCall","src":"18903:73:201"},"nodeType":"YulExpressionStatement","src":"18903:73:201"},{"nodeType":"YulVariableDeclaration","src":"18985:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"18995:3:201","type":"","value":"416"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"18989:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"19018:5:201"},{"name":"_6","nodeType":"YulIdentifier","src":"19025:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19014:3:201"},"nodeType":"YulFunctionCall","src":"19014:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19064:9:201"},{"name":"_6","nodeType":"YulIdentifier","src":"19075:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19060:3:201"},"nodeType":"YulFunctionCall","src":"19060:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"19030:29:201"},"nodeType":"YulFunctionCall","src":"19030:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19007:6:201"},"nodeType":"YulFunctionCall","src":"19007:73:201"},"nodeType":"YulExpressionStatement","src":"19007:73:201"},{"nodeType":"YulVariableDeclaration","src":"19089:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"19099:3:201","type":"","value":"448"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"19093:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"19122:5:201"},{"name":"_7","nodeType":"YulIdentifier","src":"19129:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19118:3:201"},"nodeType":"YulFunctionCall","src":"19118:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19168:9:201"},{"name":"_7","nodeType":"YulIdentifier","src":"19179:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19164:3:201"},"nodeType":"YulFunctionCall","src":"19164:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"19134:29:201"},"nodeType":"YulFunctionCall","src":"19134:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19111:6:201"},"nodeType":"YulFunctionCall","src":"19111:73:201"},"nodeType":"YulExpressionStatement","src":"19111:73:201"},{"nodeType":"YulAssignment","src":"19193:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"19203:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"19193:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"17642:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"17653:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"17665:6:201","type":""}],"src":"17565:1649:201"},{"body":{"nodeType":"YulBlock","src":"19299:126:201","statements":[{"body":{"nodeType":"YulBlock","src":"19345:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19354:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19357:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19347:6:201"},"nodeType":"YulFunctionCall","src":"19347:12:201"},"nodeType":"YulExpressionStatement","src":"19347:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"19320:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"19329:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"19316:3:201"},"nodeType":"YulFunctionCall","src":"19316:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"19341:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"19312:3:201"},"nodeType":"YulFunctionCall","src":"19312:32:201"},"nodeType":"YulIf","src":"19309:52:201"},{"nodeType":"YulAssignment","src":"19370:49:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19409:9:201"}],"functionName":{"name":"abi_decode_uint40_fromMemory","nodeType":"YulIdentifier","src":"19380:28:201"},"nodeType":"YulFunctionCall","src":"19380:39:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"19370:6:201"}]}]},"name":"abi_decode_tuple_t_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19265:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"19276:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"19288:6:201","type":""}],"src":"19219:206:201"},{"body":{"nodeType":"YulBlock","src":"19462:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19479:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19482:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19472:6:201"},"nodeType":"YulFunctionCall","src":"19472:88:201"},"nodeType":"YulExpressionStatement","src":"19472:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19576:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"19579:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19569:6:201"},"nodeType":"YulFunctionCall","src":"19569:15:201"},"nodeType":"YulExpressionStatement","src":"19569:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"19600:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"19603:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"19593:6:201"},"nodeType":"YulFunctionCall","src":"19593:15:201"},"nodeType":"YulExpressionStatement","src":"19593:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"19430:184:201"},{"body":{"nodeType":"YulBlock","src":"19666:148:201","statements":[{"body":{"nodeType":"YulBlock","src":"19757:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"19759:16:201"},"nodeType":"YulFunctionCall","src":"19759:18:201"},"nodeType":"YulExpressionStatement","src":"19759:18:201"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"19682:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"19689:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"19679:2:201"},"nodeType":"YulFunctionCall","src":"19679:77:201"},"nodeType":"YulIf","src":"19676:103:201"},{"nodeType":"YulAssignment","src":"19788:20:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"19799:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"19806:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19795:3:201"},"nodeType":"YulFunctionCall","src":"19795:13:201"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"19788:3:201"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"19648:5:201","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"19658:3:201","type":""}],"src":"19619:195:201"},{"body":{"nodeType":"YulBlock","src":"19864:130:201","statements":[{"nodeType":"YulVariableDeclaration","src":"19874:31:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"19893:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"19900:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19889:3:201"},"nodeType":"YulFunctionCall","src":"19889:16:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"19878:7:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"19935:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"19937:16:201"},"nodeType":"YulFunctionCall","src":"19937:18:201"},"nodeType":"YulExpressionStatement","src":"19937:18:201"}]},"condition":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"19920:7:201"},{"kind":"number","nodeType":"YulLiteral","src":"19929:4:201","type":"","value":"0xff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"19917:2:201"},"nodeType":"YulFunctionCall","src":"19917:17:201"},"nodeType":"YulIf","src":"19914:43:201"},{"nodeType":"YulAssignment","src":"19966:22:201","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"19977:7:201"},{"kind":"number","nodeType":"YulLiteral","src":"19986:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19973:3:201"},"nodeType":"YulFunctionCall","src":"19973:15:201"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"19966:3:201"}]}]},"name":"increment_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"19846:5:201","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"19856:3:201","type":""}],"src":"19819:175:201"},{"body":{"nodeType":"YulBlock","src":"20130:259:201","statements":[{"body":{"nodeType":"YulBlock","src":"20177:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20186:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20189:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20179:6:201"},"nodeType":"YulFunctionCall","src":"20179:12:201"},"nodeType":"YulExpressionStatement","src":"20179:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"20151:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"20160:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"20147:3:201"},"nodeType":"YulFunctionCall","src":"20147:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"20172:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"20143:3:201"},"nodeType":"YulFunctionCall","src":"20143:33:201"},"nodeType":"YulIf","src":"20140:53:201"},{"nodeType":"YulAssignment","src":"20202:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20218:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"20212:5:201"},"nodeType":"YulFunctionCall","src":"20212:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"20202:6:201"}]},{"nodeType":"YulAssignment","src":"20237:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20257:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20268:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20253:3:201"},"nodeType":"YulFunctionCall","src":"20253:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"20247:5:201"},"nodeType":"YulFunctionCall","src":"20247:25:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"20237:6:201"}]},{"nodeType":"YulAssignment","src":"20281:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20301:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20312:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20297:3:201"},"nodeType":"YulFunctionCall","src":"20297:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"20291:5:201"},"nodeType":"YulFunctionCall","src":"20291:25:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"20281:6:201"}]},{"nodeType":"YulAssignment","src":"20325:58:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20368:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20379:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20364:3:201"},"nodeType":"YulFunctionCall","src":"20364:18:201"}],"functionName":{"name":"abi_decode_uint40_fromMemory","nodeType":"YulIdentifier","src":"20335:28:201"},"nodeType":"YulFunctionCall","src":"20335:48:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"20325:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20072:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"20083:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"20095:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"20103:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"20111:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"20119:6:201","type":""}],"src":"19999:390:201"},{"body":{"nodeType":"YulBlock","src":"20475:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"20521:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20530:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20533:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20523:6:201"},"nodeType":"YulFunctionCall","src":"20523:12:201"},"nodeType":"YulExpressionStatement","src":"20523:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"20496:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"20505:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"20492:3:201"},"nodeType":"YulFunctionCall","src":"20492:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"20517:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"20488:3:201"},"nodeType":"YulFunctionCall","src":"20488:32:201"},"nodeType":"YulIf","src":"20485:52:201"},{"nodeType":"YulAssignment","src":"20546:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20562:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"20556:5:201"},"nodeType":"YulFunctionCall","src":"20556:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"20546:6:201"}]}]},"name":"abi_decode_tuple_t_bytes32_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20441:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"20452:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"20464:6:201","type":""}],"src":"20394:184:201"},{"body":{"nodeType":"YulBlock","src":"20647:492:201","statements":[{"body":{"nodeType":"YulBlock","src":"20696:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20705:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20708:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20698:6:201"},"nodeType":"YulFunctionCall","src":"20698:12:201"},"nodeType":"YulExpressionStatement","src":"20698:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"20675:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"20683:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20671:3:201"},"nodeType":"YulFunctionCall","src":"20671:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"20690:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"20667:3:201"},"nodeType":"YulFunctionCall","src":"20667:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"20660:6:201"},"nodeType":"YulFunctionCall","src":"20660:35:201"},"nodeType":"YulIf","src":"20657:55:201"},{"nodeType":"YulVariableDeclaration","src":"20721:23:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"20737:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"20731:5:201"},"nodeType":"YulFunctionCall","src":"20731:13:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"20725:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"20783:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"20785:16:201"},"nodeType":"YulFunctionCall","src":"20785:18:201"},"nodeType":"YulExpressionStatement","src":"20785:18:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"20759:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"20763:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20756:2:201"},"nodeType":"YulFunctionCall","src":"20756:26:201"},"nodeType":"YulIf","src":"20753:52:201"},{"nodeType":"YulVariableDeclaration","src":"20814:129:201","value":{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"20857:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"20861:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20853:3:201"},"nodeType":"YulFunctionCall","src":"20853:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"20868:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20849:3:201"},"nodeType":"YulFunctionCall","src":"20849:86:201"},{"kind":"number","nodeType":"YulLiteral","src":"20937:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20845:3:201"},"nodeType":"YulFunctionCall","src":"20845:97:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"20829:15:201"},"nodeType":"YulFunctionCall","src":"20829:114:201"},"variables":[{"name":"array_1","nodeType":"YulTypedName","src":"20818:7:201","type":""}]},{"expression":{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"20959:7:201"},{"name":"_1","nodeType":"YulIdentifier","src":"20968:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20952:6:201"},"nodeType":"YulFunctionCall","src":"20952:19:201"},"nodeType":"YulExpressionStatement","src":"20952:19:201"},{"body":{"nodeType":"YulBlock","src":"21019:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21028:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21031:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21021:6:201"},"nodeType":"YulFunctionCall","src":"21021:12:201"},"nodeType":"YulExpressionStatement","src":"21021:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"20994:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"21002:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20990:3:201"},"nodeType":"YulFunctionCall","src":"20990:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"21007:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20986:3:201"},"nodeType":"YulFunctionCall","src":"20986:26:201"},{"name":"end","nodeType":"YulIdentifier","src":"21014:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"20983:2:201"},"nodeType":"YulFunctionCall","src":"20983:35:201"},"nodeType":"YulIf","src":"20980:55:201"},{"expression":{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"21070:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"21078:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21066:3:201"},"nodeType":"YulFunctionCall","src":"21066:17:201"},{"arguments":[{"name":"array_1","nodeType":"YulIdentifier","src":"21089:7:201"},{"kind":"number","nodeType":"YulLiteral","src":"21098:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21085:3:201"},"nodeType":"YulFunctionCall","src":"21085:18:201"},{"name":"_1","nodeType":"YulIdentifier","src":"21105:2:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"21044:21:201"},"nodeType":"YulFunctionCall","src":"21044:64:201"},"nodeType":"YulExpressionStatement","src":"21044:64:201"},{"nodeType":"YulAssignment","src":"21117:16:201","value":{"name":"array_1","nodeType":"YulIdentifier","src":"21126:7:201"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"21117:5:201"}]}]},"name":"abi_decode_string_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"20621:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"20629:3:201","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"20637:5:201","type":""}],"src":"20583:556:201"},{"body":{"nodeType":"YulBlock","src":"21235:246:201","statements":[{"body":{"nodeType":"YulBlock","src":"21281:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21290:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21293:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21283:6:201"},"nodeType":"YulFunctionCall","src":"21283:12:201"},"nodeType":"YulExpressionStatement","src":"21283:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"21256:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"21265:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21252:3:201"},"nodeType":"YulFunctionCall","src":"21252:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"21277:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"21248:3:201"},"nodeType":"YulFunctionCall","src":"21248:32:201"},"nodeType":"YulIf","src":"21245:52:201"},{"nodeType":"YulVariableDeclaration","src":"21306:30:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21326:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"21320:5:201"},"nodeType":"YulFunctionCall","src":"21320:16:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"21310:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"21379:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21388:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21391:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21381:6:201"},"nodeType":"YulFunctionCall","src":"21381:12:201"},"nodeType":"YulExpressionStatement","src":"21381:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"21351:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"21359:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"21348:2:201"},"nodeType":"YulFunctionCall","src":"21348:30:201"},"nodeType":"YulIf","src":"21345:50:201"},{"nodeType":"YulAssignment","src":"21404:71:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21447:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"21458:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21443:3:201"},"nodeType":"YulFunctionCall","src":"21443:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"21467:7:201"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"21414:28:201"},"nodeType":"YulFunctionCall","src":"21414:61:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"21404:6:201"}]}]},"name":"abi_decode_tuple_t_string_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21201:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"21212:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"21224:6:201","type":""}],"src":"21144:337:201"},{"body":{"nodeType":"YulBlock","src":"21564:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"21610:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21619:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21622:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21612:6:201"},"nodeType":"YulFunctionCall","src":"21612:12:201"},"nodeType":"YulExpressionStatement","src":"21612:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"21585:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"21594:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21581:3:201"},"nodeType":"YulFunctionCall","src":"21581:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"21606:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"21577:3:201"},"nodeType":"YulFunctionCall","src":"21577:32:201"},"nodeType":"YulIf","src":"21574:52:201"},{"nodeType":"YulVariableDeclaration","src":"21635:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21654:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"21648:5:201"},"nodeType":"YulFunctionCall","src":"21648:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"21639:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"21717:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21726:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21729:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21719:6:201"},"nodeType":"YulFunctionCall","src":"21719:12:201"},"nodeType":"YulExpressionStatement","src":"21719:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21686:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"21707:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"21700:6:201"},"nodeType":"YulFunctionCall","src":"21700:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"21693:6:201"},"nodeType":"YulFunctionCall","src":"21693:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"21683:2:201"},"nodeType":"YulFunctionCall","src":"21683:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"21676:6:201"},"nodeType":"YulFunctionCall","src":"21676:40:201"},"nodeType":"YulIf","src":"21673:60:201"},{"nodeType":"YulAssignment","src":"21742:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"21752:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"21742:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21530:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"21541:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"21553:6:201","type":""}],"src":"21486:277:201"},{"body":{"nodeType":"YulBlock","src":"21865:87:201","statements":[{"nodeType":"YulAssignment","src":"21875:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21887:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21898:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21883:3:201"},"nodeType":"YulFunctionCall","src":"21883:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21875:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21917:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"21932:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"21940:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21928:3:201"},"nodeType":"YulFunctionCall","src":"21928:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21910:6:201"},"nodeType":"YulFunctionCall","src":"21910:36:201"},"nodeType":"YulExpressionStatement","src":"21910:36:201"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21834:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"21845:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21856:4:201","type":""}],"src":"21768:184:201"},{"body":{"nodeType":"YulBlock","src":"22070:883:201","statements":[{"body":{"nodeType":"YulBlock","src":"22116:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22125:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"22128:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"22118:6:201"},"nodeType":"YulFunctionCall","src":"22118:12:201"},"nodeType":"YulExpressionStatement","src":"22118:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"22091:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"22100:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22087:3:201"},"nodeType":"YulFunctionCall","src":"22087:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"22112:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"22083:3:201"},"nodeType":"YulFunctionCall","src":"22083:32:201"},"nodeType":"YulIf","src":"22080:52:201"},{"nodeType":"YulVariableDeclaration","src":"22141:30:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22161:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"22155:5:201"},"nodeType":"YulFunctionCall","src":"22155:16:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"22145:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"22180:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"22190:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"22184:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"22235:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22244:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"22247:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"22237:6:201"},"nodeType":"YulFunctionCall","src":"22237:12:201"},"nodeType":"YulExpressionStatement","src":"22237:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"22223:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"22231:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"22220:2:201"},"nodeType":"YulFunctionCall","src":"22220:14:201"},"nodeType":"YulIf","src":"22217:34:201"},{"nodeType":"YulVariableDeclaration","src":"22260:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22274:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"22285:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22270:3:201"},"nodeType":"YulFunctionCall","src":"22270:22:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"22264:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"22332:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22341:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"22344:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"22334:6:201"},"nodeType":"YulFunctionCall","src":"22334:12:201"},"nodeType":"YulExpressionStatement","src":"22334:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"22312:7:201"},{"name":"_2","nodeType":"YulIdentifier","src":"22321:2:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22308:3:201"},"nodeType":"YulFunctionCall","src":"22308:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"22326:4:201","type":"","value":"0xa0"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"22304:3:201"},"nodeType":"YulFunctionCall","src":"22304:27:201"},"nodeType":"YulIf","src":"22301:47:201"},{"nodeType":"YulVariableDeclaration","src":"22357:35:201","value":{"arguments":[],"functionName":{"name":"allocate_memory_4029","nodeType":"YulIdentifier","src":"22370:20:201"},"nodeType":"YulFunctionCall","src":"22370:22:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"22361:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"22408:5:201"},{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"22444:2:201"}],"functionName":{"name":"abi_decode_uint16_fromMemory","nodeType":"YulIdentifier","src":"22415:28:201"},"nodeType":"YulFunctionCall","src":"22415:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22401:6:201"},"nodeType":"YulFunctionCall","src":"22401:47:201"},"nodeType":"YulExpressionStatement","src":"22401:47:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"22468:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"22475:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22464:3:201"},"nodeType":"YulFunctionCall","src":"22464:14:201"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"22513:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"22517:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22509:3:201"},"nodeType":"YulFunctionCall","src":"22509:11:201"}],"functionName":{"name":"abi_decode_uint16_fromMemory","nodeType":"YulIdentifier","src":"22480:28:201"},"nodeType":"YulFunctionCall","src":"22480:41:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22457:6:201"},"nodeType":"YulFunctionCall","src":"22457:65:201"},"nodeType":"YulExpressionStatement","src":"22457:65:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"22542:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"22549:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22538:3:201"},"nodeType":"YulFunctionCall","src":"22538:14:201"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"22587:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"22591:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22583:3:201"},"nodeType":"YulFunctionCall","src":"22583:11:201"}],"functionName":{"name":"abi_decode_uint16_fromMemory","nodeType":"YulIdentifier","src":"22554:28:201"},"nodeType":"YulFunctionCall","src":"22554:41:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22531:6:201"},"nodeType":"YulFunctionCall","src":"22531:65:201"},"nodeType":"YulExpressionStatement","src":"22531:65:201"},{"nodeType":"YulVariableDeclaration","src":"22605:33:201","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"22630:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"22634:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22626:3:201"},"nodeType":"YulFunctionCall","src":"22626:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"22620:5:201"},"nodeType":"YulFunctionCall","src":"22620:18:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"22609:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"22696:7:201"}],"functionName":{"name":"validator_revert_contract_IPoolAddressesProvider","nodeType":"YulIdentifier","src":"22647:48:201"},"nodeType":"YulFunctionCall","src":"22647:57:201"},"nodeType":"YulExpressionStatement","src":"22647:57:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"22724:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"22731:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22720:3:201"},"nodeType":"YulFunctionCall","src":"22720:14:201"},{"name":"value_1","nodeType":"YulIdentifier","src":"22736:7:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22713:6:201"},"nodeType":"YulFunctionCall","src":"22713:31:201"},"nodeType":"YulExpressionStatement","src":"22713:31:201"},{"nodeType":"YulVariableDeclaration","src":"22753:35:201","value":{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"22779:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"22783:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22775:3:201"},"nodeType":"YulFunctionCall","src":"22775:12:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"22769:5:201"},"nodeType":"YulFunctionCall","src":"22769:19:201"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"22757:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"22817:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22826:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"22829:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"22819:6:201"},"nodeType":"YulFunctionCall","src":"22819:12:201"},"nodeType":"YulExpressionStatement","src":"22819:12:201"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"22803:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"22813:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"22800:2:201"},"nodeType":"YulFunctionCall","src":"22800:16:201"},"nodeType":"YulIf","src":"22797:36:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"22853:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"22860:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22849:3:201"},"nodeType":"YulFunctionCall","src":"22849:15:201"},{"arguments":[{"arguments":[{"name":"_2","nodeType":"YulIdentifier","src":"22899:2:201"},{"name":"offset_1","nodeType":"YulIdentifier","src":"22903:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22895:3:201"},"nodeType":"YulFunctionCall","src":"22895:17:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"22914:7:201"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"22866:28:201"},"nodeType":"YulFunctionCall","src":"22866:56:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22842:6:201"},"nodeType":"YulFunctionCall","src":"22842:81:201"},"nodeType":"YulExpressionStatement","src":"22842:81:201"},{"nodeType":"YulAssignment","src":"22932:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"22942:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"22932:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_EModeCategory_$21333_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22036:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"22047:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"22059:6:201","type":""}],"src":"21957:996:201"},{"body":{"nodeType":"YulBlock","src":"23038:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"23084:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23093:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"23096:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"23086:6:201"},"nodeType":"YulFunctionCall","src":"23086:12:201"},"nodeType":"YulExpressionStatement","src":"23086:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"23059:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"23068:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"23055:3:201"},"nodeType":"YulFunctionCall","src":"23055:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"23080:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"23051:3:201"},"nodeType":"YulFunctionCall","src":"23051:32:201"},"nodeType":"YulIf","src":"23048:52:201"},{"nodeType":"YulAssignment","src":"23109:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23125:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"23119:5:201"},"nodeType":"YulFunctionCall","src":"23119:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"23109:6:201"}]}]},"name":"abi_decode_tuple_t_int256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23004:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"23015:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"23027:6:201","type":""}],"src":"22958:183:201"},{"body":{"nodeType":"YulBlock","src":"23225:194:201","statements":[{"body":{"nodeType":"YulBlock","src":"23271:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23280:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"23283:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"23273:6:201"},"nodeType":"YulFunctionCall","src":"23273:12:201"},"nodeType":"YulExpressionStatement","src":"23273:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"23246:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"23255:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"23242:3:201"},"nodeType":"YulFunctionCall","src":"23242:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"23267:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"23238:3:201"},"nodeType":"YulFunctionCall","src":"23238:32:201"},"nodeType":"YulIf","src":"23235:52:201"},{"nodeType":"YulVariableDeclaration","src":"23296:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23315:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"23309:5:201"},"nodeType":"YulFunctionCall","src":"23309:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"23300:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"23373:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23382:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"23385:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"23375:6:201"},"nodeType":"YulFunctionCall","src":"23375:12:201"},"nodeType":"YulExpressionStatement","src":"23375:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23347:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23358:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"23365:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23354:3:201"},"nodeType":"YulFunctionCall","src":"23354:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"23344:2:201"},"nodeType":"YulFunctionCall","src":"23344:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"23337:6:201"},"nodeType":"YulFunctionCall","src":"23337:35:201"},"nodeType":"YulIf","src":"23334:55:201"},{"nodeType":"YulAssignment","src":"23398:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"23408:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"23398:6:201"}]}]},"name":"abi_decode_tuple_t_uint8_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23191:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"23202:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"23214:6:201","type":""}],"src":"23146:273:201"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_contract$_IEACAggregatorProxy_$34482__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function validator_revert_contract_IPoolAddressesProvider(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069t_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_contract_IPoolAddressesProvider(value_1)\n        value1 := value_1\n    }\n    function abi_encode_address(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_bool(value, pos)\n    {\n        mstore(pos, iszero(iszero(value)))\n    }\n    function abi_encode_uint8(value, pos)\n    { mstore(pos, and(value, 0xff)) }\n    function abi_encode_tuple_t_array$_t_struct$_UserReserveData_$34772_memory_ptr_$dyn_memory_ptr_t_uint8__to_t_array$_t_struct$_UserReserveData_$34772_memory_ptr_$dyn_memory_ptr_t_uint8__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        let _1 := 64\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        let _2 := 96\n        pos := add(headStart, _2)\n        let _3 := 0x20\n        let srcPtr := add(value0, _3)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            let _4 := mload(srcPtr)\n            mstore(pos, and(mload(_4), 0xffffffffffffffffffffffffffffffffffffffff))\n            mstore(add(pos, _3), mload(add(_4, _3)))\n            mstore(add(pos, _1), iszero(iszero(mload(add(_4, _1)))))\n            mstore(add(pos, _2), mload(add(_4, _2)))\n            let _5 := 0x80\n            mstore(add(pos, _5), mload(add(_4, _5)))\n            let _6 := 0xa0\n            mstore(add(pos, _6), mload(add(_4, _6)))\n            let _7 := 0xc0\n            mstore(add(pos, _7), mload(add(_4, _7)))\n            pos := add(pos, 0xe0)\n            srcPtr := add(srcPtr, _3)\n        }\n        tail := pos\n        abi_encode_uint8(value1, add(headStart, _3))\n    }\n    function abi_decode_tuple_t_contract$_IPoolAddressesProvider_$5069(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 64)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_encode_uint128(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_uint40(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffff))\n    }\n    function abi_encode_uint16(value, pos)\n    {\n        mstore(pos, and(value, 0xffff))\n    }\n    function abi_encode_struct_BaseCurrencyInfo(value, pos)\n    {\n        mstore(pos, mload(value))\n        mstore(add(pos, 0x20), mload(add(value, 0x20)))\n        mstore(add(pos, 0x40), mload(add(value, 0x40)))\n        mstore(add(pos, 0x60), and(mload(add(value, 0x60)), 0xff))\n    }\n    function abi_encode_tuple_t_array$_t_struct$_AggregatedReserveData_$34757_memory_ptr_$dyn_memory_ptr_t_struct$_BaseCurrencyInfo_$34781_memory_ptr__to_t_array$_t_struct$_AggregatedReserveData_$34757_memory_ptr_$dyn_memory_ptr_t_struct$_BaseCurrencyInfo_$34781_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        let _1 := 160\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        let _2 := 192\n        pos := add(headStart, _2)\n        let tail_2 := add(add(headStart, shl(5, length)), _2)\n        let _3 := 0x20\n        let srcPtr := add(value0, _3)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, add(sub(tail_2, headStart), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40))\n            let _4 := mload(srcPtr)\n            let _5 := 0x06c0\n            abi_encode_address(mload(_4), tail_2)\n            let memberValue0 := mload(add(_4, _3))\n            mstore(add(tail_2, _3), _5)\n            let tail_3 := abi_encode_string(memberValue0, add(tail_2, _5))\n            let _6 := 0x40\n            let memberValue0_1 := mload(add(_4, _6))\n            mstore(add(tail_2, _6), sub(tail_3, tail_2))\n            let tail_4 := abi_encode_string(memberValue0_1, tail_3)\n            let _7 := 0x60\n            mstore(add(tail_2, _7), mload(add(_4, _7)))\n            let _8 := 0x80\n            mstore(add(tail_2, _8), mload(add(_4, _8)))\n            mstore(add(tail_2, _1), mload(add(_4, _1)))\n            mstore(add(tail_2, _2), mload(add(_4, _2)))\n            let _9 := 0xe0\n            mstore(add(tail_2, _9), mload(add(_4, _9)))\n            let _10 := 0x0100\n            let memberValue0_2 := mload(add(_4, _10))\n            abi_encode_bool(memberValue0_2, add(tail_2, _10))\n            let _11 := 0x0120\n            let memberValue0_3 := mload(add(_4, _11))\n            abi_encode_bool(memberValue0_3, add(tail_2, _11))\n            let _12 := 0x0140\n            let memberValue0_4 := mload(add(_4, _12))\n            abi_encode_bool(memberValue0_4, add(tail_2, _12))\n            let _13 := 0x0160\n            let memberValue0_5 := mload(add(_4, _13))\n            abi_encode_bool(memberValue0_5, add(tail_2, _13))\n            let _14 := 0x0180\n            let memberValue0_6 := mload(add(_4, _14))\n            abi_encode_bool(memberValue0_6, add(tail_2, _14))\n            let _15 := 0x01a0\n            let memberValue0_7 := mload(add(_4, _15))\n            abi_encode_uint128(memberValue0_7, add(tail_2, _15))\n            let _16 := 0x01c0\n            let memberValue0_8 := mload(add(_4, _16))\n            abi_encode_uint128(memberValue0_8, add(tail_2, _16))\n            let _17 := 0x01e0\n            let memberValue0_9 := mload(add(_4, _17))\n            abi_encode_uint128(memberValue0_9, add(tail_2, _17))\n            let _18 := 0x0200\n            let memberValue0_10 := mload(add(_4, _18))\n            abi_encode_uint128(memberValue0_10, add(tail_2, _18))\n            let _19 := 0x0220\n            let memberValue0_11 := mload(add(_4, _19))\n            abi_encode_uint128(memberValue0_11, add(tail_2, _19))\n            let _20 := 0x0240\n            let memberValue0_12 := mload(add(_4, _20))\n            abi_encode_uint40(memberValue0_12, add(tail_2, _20))\n            let _21 := 0x0260\n            let memberValue0_13 := mload(add(_4, _21))\n            abi_encode_address(memberValue0_13, add(tail_2, _21))\n            let _22 := 0x0280\n            let memberValue0_14 := mload(add(_4, _22))\n            abi_encode_address(memberValue0_14, add(tail_2, _22))\n            let _23 := 0x02a0\n            let memberValue0_15 := mload(add(_4, _23))\n            abi_encode_address(memberValue0_15, add(tail_2, _23))\n            let _24 := 0x02c0\n            let memberValue0_16 := mload(add(_4, _24))\n            abi_encode_address(memberValue0_16, add(tail_2, _24))\n            let _25 := 0x02e0\n            mstore(add(tail_2, _25), mload(add(_4, _25)))\n            let _26 := 0x0300\n            mstore(add(tail_2, _26), mload(add(_4, _26)))\n            let _27 := 0x0320\n            mstore(add(tail_2, _27), mload(add(_4, _27)))\n            let _28 := 0x0340\n            mstore(add(tail_2, _28), mload(add(_4, _28)))\n            let _29 := 0x0360\n            mstore(add(tail_2, _29), mload(add(_4, _29)))\n            let _30 := 0x0380\n            mstore(add(tail_2, _30), mload(add(_4, _30)))\n            let _31 := 0x03a0\n            let memberValue0_17 := mload(add(_4, _31))\n            abi_encode_address(memberValue0_17, add(tail_2, _31))\n            let _32 := 0x03c0\n            mstore(add(tail_2, _32), mload(add(_4, _32)))\n            let _33 := 0x03e0\n            mstore(add(tail_2, _33), mload(add(_4, _33)))\n            let _34 := 0x0400\n            mstore(add(tail_2, _34), mload(add(_4, _34)))\n            let _35 := 0x0420\n            mstore(add(tail_2, _35), mload(add(_4, _35)))\n            let _36 := 0x0440\n            mstore(add(tail_2, _36), mload(add(_4, _36)))\n            let _37 := 0x0460\n            mstore(add(tail_2, _37), mload(add(_4, _37)))\n            let _38 := 0x0480\n            mstore(add(tail_2, _38), mload(add(_4, _38)))\n            let _39 := 0x04a0\n            let memberValue0_18 := mload(add(_4, _39))\n            abi_encode_bool(memberValue0_18, add(tail_2, _39))\n            let _40 := 0x04c0\n            let memberValue0_19 := mload(add(_4, _40))\n            abi_encode_bool(memberValue0_19, add(tail_2, _40))\n            let _41 := 0x04e0\n            let memberValue0_20 := mload(add(_4, _41))\n            abi_encode_uint128(memberValue0_20, add(tail_2, _41))\n            let _42 := 0x0500\n            let memberValue0_21 := mload(add(_4, _42))\n            abi_encode_uint128(memberValue0_21, add(tail_2, _42))\n            let _43 := 0x0520\n            let memberValue0_22 := mload(add(_4, _43))\n            abi_encode_uint128(memberValue0_22, add(tail_2, _43))\n            let _44 := 0x0540\n            let memberValue0_23 := mload(add(_4, _44))\n            abi_encode_bool(memberValue0_23, add(tail_2, _44))\n            let _45 := 0x0560\n            mstore(add(tail_2, _45), mload(add(_4, _45)))\n            let _46 := 0x0580\n            mstore(add(tail_2, _46), mload(add(_4, _46)))\n            let _47 := 0x05a0\n            let memberValue0_24 := mload(add(_4, _47))\n            abi_encode_uint8(memberValue0_24, add(tail_2, _47))\n            let _48 := 0x05c0\n            mstore(add(tail_2, _48), mload(add(_4, _48)))\n            let _49 := 0x05e0\n            mstore(add(tail_2, _49), mload(add(_4, _49)))\n            let _50 := 0x0600\n            let memberValue0_25 := mload(add(_4, _50))\n            abi_encode_uint16(memberValue0_25, add(tail_2, _50))\n            let _51 := 0x0620\n            let memberValue0_26 := mload(add(_4, _51))\n            abi_encode_uint16(memberValue0_26, add(tail_2, _51))\n            let _52 := 0x0640\n            let memberValue0_27 := mload(add(_4, _52))\n            abi_encode_uint16(memberValue0_27, add(tail_2, _52))\n            let _53 := 0x0660\n            let memberValue0_28 := mload(add(_4, _53))\n            abi_encode_address(memberValue0_28, add(tail_2, _53))\n            let _54 := 0x0680\n            let memberValue0_29 := mload(add(_4, _54))\n            mstore(add(tail_2, _54), sub(tail_4, tail_2))\n            let tail_5 := abi_encode_string(memberValue0_29, tail_4)\n            let _55 := 0x06a0\n            let memberValue0_30 := mload(add(_4, _55))\n            abi_encode_bool(memberValue0_30, add(tail_2, _55))\n            tail_2 := tail_5\n            srcPtr := add(srcPtr, _3)\n            pos := add(pos, _3)\n        }\n        tail := tail_2\n        abi_encode_struct_BaseCurrencyInfo(value1, add(headStart, _3))\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        validator_revert_contract_IPoolAddressesProvider(value)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_contract_IPoolAddressesProvider(value)\n        value0 := value\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_4027() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 480)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory_4029() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xa0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        let _1 := 32\n        if slt(sub(dataEnd, headStart), _1) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n        let _4 := mload(_3)\n        if gt(_4, _2) { panic_error_0x41() }\n        let _5 := shl(5, _4)\n        let dst := allocate_memory(add(_5, _1))\n        let dst_1 := dst\n        mstore(dst, _4)\n        dst := add(dst, _1)\n        let srcEnd := add(add(_3, _5), _1)\n        if gt(srcEnd, dataEnd) { revert(0, 0) }\n        let src := add(_3, _1)\n        for { } lt(src, srcEnd) { src := add(src, _1) }\n        {\n            let value := mload(src)\n            validator_revert_contract_IPoolAddressesProvider(value)\n            mstore(dst, value)\n            dst := add(dst, _1)\n        }\n        value0 := dst_1\n    }\n    function abi_decode_struct_UserConfigurationMap_fromMemory(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x20) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x20)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        value := memPtr\n        mstore(memPtr, mload(headStart))\n    }\n    function abi_decode_tuple_t_struct$_UserConfigurationMap_$21322_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_struct_UserConfigurationMap_fromMemory(headStart, dataEnd)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_decode_uint128_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint40_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint16_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 480) { revert(0, 0) }\n        let value := allocate_memory_4027()\n        mstore(value, abi_decode_struct_UserConfigurationMap_fromMemory(headStart, dataEnd))\n        mstore(add(value, 32), abi_decode_uint128_fromMemory(add(headStart, 32)))\n        mstore(add(value, 64), abi_decode_uint128_fromMemory(add(headStart, 64)))\n        mstore(add(value, 96), abi_decode_uint128_fromMemory(add(headStart, 96)))\n        mstore(add(value, 128), abi_decode_uint128_fromMemory(add(headStart, 128)))\n        mstore(add(value, 160), abi_decode_uint128_fromMemory(add(headStart, 160)))\n        mstore(add(value, 192), abi_decode_uint40_fromMemory(add(headStart, 192)))\n        mstore(add(value, 224), abi_decode_uint16_fromMemory(add(headStart, 224)))\n        let _1 := 256\n        mstore(add(value, _1), abi_decode_address_fromMemory(add(headStart, _1)))\n        let _2 := 288\n        mstore(add(value, _2), abi_decode_address_fromMemory(add(headStart, _2)))\n        let _3 := 320\n        mstore(add(value, _3), abi_decode_address_fromMemory(add(headStart, _3)))\n        let _4 := 352\n        mstore(add(value, _4), abi_decode_address_fromMemory(add(headStart, _4)))\n        let _5 := 384\n        mstore(add(value, _5), abi_decode_uint128_fromMemory(add(headStart, _5)))\n        let _6 := 416\n        mstore(add(value, _6), abi_decode_uint128_fromMemory(add(headStart, _6)))\n        let _7 := 448\n        mstore(add(value, _7), abi_decode_uint128_fromMemory(add(headStart, _7)))\n        value0 := value\n    }\n    function abi_decode_tuple_t_uint40_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint40_fromMemory(headStart)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function increment_t_uint8(value) -> ret\n    {\n        let value_1 := and(value, 0xff)\n        if eq(value_1, 0xff) { panic_error_0x11() }\n        ret := add(value_1, 1)\n    }\n    function abi_decode_tuple_t_uint256t_uint256t_uint256t_uint40_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n        value2 := mload(add(headStart, 64))\n        value3 := abi_decode_uint40_fromMemory(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_bytes32_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_decode_string_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := mload(offset)\n        if gt(_1, 0xffffffffffffffff) { panic_error_0x41() }\n        let array_1 := allocate_memory(add(and(add(_1, 0x1f), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0), 0x20))\n        mstore(array_1, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        copy_memory_to_memory(add(offset, 0x20), add(array_1, 0x20), _1)\n        array := array_1\n    }\n    function abi_decode_tuple_t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := mload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_string_fromMemory(add(headStart, offset), dataEnd)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_decode_tuple_t_struct$_EModeCategory_$21333_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if slt(sub(dataEnd, _2), 0xa0) { revert(0, 0) }\n        let value := allocate_memory_4029()\n        mstore(value, abi_decode_uint16_fromMemory(_2))\n        mstore(add(value, 32), abi_decode_uint16_fromMemory(add(_2, 32)))\n        mstore(add(value, 64), abi_decode_uint16_fromMemory(add(_2, 64)))\n        let value_1 := mload(add(_2, 96))\n        validator_revert_contract_IPoolAddressesProvider(value_1)\n        mstore(add(value, 96), value_1)\n        let offset_1 := mload(add(_2, 128))\n        if gt(offset_1, _1) { revert(0, 0) }\n        mstore(add(value, 128), abi_decode_string_fromMemory(add(_2, offset_1), dataEnd))\n        value0 := value\n    }\n    function abi_decode_tuple_t_int256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_decode_tuple_t_uint8_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value0 := value\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"32531":[{"length":32,"start":180},{"length":32,"start":7803},{"length":32,"start":7955}],"32534":[{"length":32,"start":380},{"length":32,"start":8311}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100885760003560e01c8063825ffd921161005b578063825ffd921461013c5780639201de5514610157578063d22cf68a14610177578063ec489c211461019e57600080fd5b80630496f53a1461008d5780633c1740ed146100af57806351974cc0146100fb578063586c14421461011c575b600080fd5b61009c670de0b6b3a764000081565b6040519081526020015b60405180910390f35b6100d67f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a6565b61010e61010936600461225a565b6101bf565b6040516100a6929190612293565b61012f61012a36600461233f565b6109c4565b6040516100a6919061235c565b6100d6739f8f72aa9304c8b593d555f12ef6589cc3a579a281565b61016a6101653660046123b6565b610ab3565b6040516100a6919061242b565b6100d67f000000000000000000000000000000000000000000000000000000000000000081565b6101b16101ac36600461233f565b610c2b565b6040516100a692919061243e565b60606000808473ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561020f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610233919061280c565b905060008173ffffffffffffffffffffffffffffffffffffffff1663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610282573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102aa91908101906128d6565b6040517f4417a58300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152919250600091841690634417a58390602401602060405180830381865afa15801561031c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034091906129ca565b6040517feddf1b7900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015291925060009185169063eddf1b7990602401602060405180830381865afa1580156103b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d691906129e6565b9050600073ffffffffffffffffffffffffffffffffffffffff88166103fc5760006103ff565b83515b67ffffffffffffffff81111561041757610417612829565b6040519080825280602002602001820160405280156104a057816020015b61048d6040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600015158152602001600081526020016000815260200160008152602001600081525090565b8152602001906001900390816104355790505b50905060005b84518110156109b65760008673ffffffffffffffffffffffffffffffffffffffff166335ea6a758784815181106104df576104df6129ff565b60200260200101516040518263ffffffff1660e01b815260040161051f919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6101e060405180830381865afa15801561053d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105619190612a75565b9050858281518110610575576105756129ff565b602002602001015183838151811061058f5761058f6129ff565b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff91821690526101008201516040517f1da24f3e0000000000000000000000000000000000000000000000000000000081528c83166004820152911690631da24f3e90602401602060405180830381865afa158015610611573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063591906129e6565b838381518110610647576106476129ff565b602090810291909101810151015261065f8583612126565b838381518110610671576106716129ff565b602090810291909101015190151560409091015261068f85836121b3565b156109a3576101408101516040517f1da24f3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015290911690631da24f3e90602401602060405180830381865afa158015610707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072b91906129e6565b83838151811061073d5761073d6129ff565b6020908102919091010151608001526101208101516040517fc634dfaa00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c811660048301529091169063c634dfaa90602401602060405180830381865afa1580156107bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e391906129e6565b8383815181106107f5576107f56129ff565b602002602001015160a0018181525050828281518110610817576108176129ff565b602002602001015160a001516000146109a3576101208101516040517fe78c9b3b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c811660048301529091169063e78c9b3b90602401602060405180830381865afa15801561089d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c191906129e6565b8383815181106108d3576108d36129ff565b6020908102919091010151606001526101208101516040517f79ce6b8c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c81166004830152909116906379ce6b8c90602401602060405180830381865afa158015610955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109799190612b98565b64ffffffffff16838381518110610992576109926129ff565b602002602001015160c00181815250505b50806109ae81612be2565b9150506104a6565b509890975095505050505050565b606060008273ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a37919061280c565b90508073ffffffffffffffffffffffffffffffffffffffff1663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610a84573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610aac91908101906128d6565b9392505050565b606060005b60208160ff16108015610b045750828160ff1660208110610adb57610adb6129ff565b1a60f81b7fff000000000000000000000000000000000000000000000000000000000000001615155b15610b1b5780610b1381612c1b565b915050610ab8565b60008160ff1667ffffffffffffffff811115610b3957610b39612829565b6040519080825280601f01601f191660200182016040528015610b63576020820181803683370190505b509050600091505b60208260ff16108015610bb75750838260ff1660208110610b8e57610b8e6129ff565b1a60f81b7fff000000000000000000000000000000000000000000000000000000000000001615155b15610aac57838260ff1660208110610bd157610bd16129ff565b1a60f81b818360ff1681518110610bea57610bea6129ff565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535081610c2381612c1b565b925050610b6b565b6060610c5b6040518060800160405280600081526020016000815260200160008152602001600060ff1681525090565b60008373ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ca8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccc919061280c565b905060008473ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f919061280c565b905060008573ffffffffffffffffffffffffffffffffffffffff1663e860accb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db2919061280c565b905060008273ffffffffffffffffffffffffffffffffffffffff1663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610e01573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e2991908101906128d6565b90506000815167ffffffffffffffff811115610e4757610e47612829565b60405190808252806020026020018201604052801561104357816020015b604080516106c0810182526000808252606060208084018290529383018190528083018290526080830182905260a0830182905260c0830182905260e08301829052610100830182905261012083018290526101408301829052610160830182905261018083018290526101a083018290526101c083018290526101e08301829052610200830182905261022083018290526102408301829052610260830182905261028083018290526102a083018290526102c083018290526102e08301829052610300830182905261032083018290526103408301829052610360830182905261038083018290526103a083018290526103c083018290526103e08301829052610400830182905261042083018290526104408301829052610460830182905261048083018290526104a083018290526104c083018290526104e08301829052610500830182905261052083018290526105408301829052610560830182905261058083018290526105a083018290526105c083018290526105e0830182905261060083018290526106208301829052610640830182905261066083018290526106808301526106a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610e655790505b50905060005b8251811015611e4a576000828281518110611066576110666129ff565b60200260200101519050838281518110611082576110826129ff565b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff9081168083526040517f35ea6a7500000000000000000000000000000000000000000000000000000000815260048101919091526000918816906335ea6a75906024016101e060405180830381865afa158015611103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111279190612a75565b60208101516fffffffffffffffffffffffffffffffff9081166101a0850152606082015181166101c085015260408083015182166101e08601526080830151821661020086015260a083015190911661022085015260c082015164ffffffffff1661024085015261010082015173ffffffffffffffffffffffffffffffffffffffff908116610260860152610120830151811661028086015261014083015181166102a086015261016083015181166102c0860152845191517fb3596f0700000000000000000000000000000000000000000000000000000000815291811660048301529192509089169063b3596f0790602401602060405180830381865afa158015611238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125c91906129e6565b61038083015281516040517f92bf2be000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908916906392bf2be090602401602060405180830381865afa1580156112d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f5919061280c565b73ffffffffffffffffffffffffffffffffffffffff9081166103a084015282516102608401516040517f70a0823100000000000000000000000000000000000000000000000000000000815290831660048201529116906370a0823190602401602060405180830381865afa158015611372573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139691906129e6565b826102e001818152505081610280015173ffffffffffffffffffffffffffffffffffffffff1663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa1580156113f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114149190612c3b565b64ffffffffff16610340860152610320850152506103008301526102a0820151604080517fb1bf962d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169163b1bf962d916004808201926020929091908290030181865afa1580156114a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c591906129e6565b610360830152815173ffffffffffffffffffffffffffffffffffffffff16739f8f72aa9304c8b593d555f12ef6589cc3a579a21415611610576000826000015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401602060405180830381865afa15801561154f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157391906129e6565b90506000836000015173ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ea91906129e6565b90506115f582610ab3565b604085015261160381610ab3565b60208501525061170c9050565b816000015173ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561165f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116879190810190612ce6565b8260400181905250816000015173ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156116de573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117069190810190612ce6565b60208301525b8051805161ffff604082811c821660e087015260ff603084901c81166060880152602084811c841660c0890152601085901c841660a08901529284166080880181905215156101008801528451671000000000000000811615156104a08901526708000000000000008116151561014089015267040000000000000081161515610120890152670200000000000000811615156101808901526701000000000000001615156101608801526102c087015182517f0b3429a2000000000000000000000000000000000000000000000000000000008152925160a89590951c9091169373ffffffffffffffffffffffffffffffffffffffff90911692630b3429a292600480820193918290030181865afa925050508015611849575060408051601f3d908101601f19168201909252611846918101906129e6565b60015b61185257611859565b6103c08501525b836102c0015173ffffffffffffffffffffffffffffffffffffffff1663f42024096040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156118c5575060408051601f3d908101601f191682019092526118c2918101906129e6565b60015b6118ce576118d5565b6103e08501525b836102c0015173ffffffffffffffffffffffffffffffffffffffff1663d5cd73916040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611941575060408051601f3d908101601f1916820190925261193e918101906129e6565b60015b61194a57611951565b6104008501525b836102c0015173ffffffffffffffffffffffffffffffffffffffff166314e32da46040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156119bd575060408051601f3d908101601f191682019092526119ba918101906129e6565b60015b6119c6576119cd565b6104208501525b836102c0015173ffffffffffffffffffffffffffffffffffffffff1663acd786866040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a39575060408051601f3d908101601f19168201909252611a36918101906129e6565b60015b611a4257611a49565b6104408501525b836102c0015173ffffffffffffffffffffffffffffffffffffffff166334762ca56040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611ab5575060408051601f3d908101601f19168201909252611ab2918101906129e6565b60015b611abe57611ac5565b6104608501525b836102c0015173ffffffffffffffffffffffffffffffffffffffff166354c365c66040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611b31575060408051601f3d908101601f19168201909252611b2e918101906129e6565b60015b611b3a57611b41565b6104808501525b60ff81166105a0850152815160d41c64ffffffffff16846105600181815250508773ffffffffffffffffffffffffffffffffffffffff166369b169e16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd091906129e6565b6105808501528151640fffffffff605082901c81169160741c166105e08601526105c085015283516040517fd7ed3ef400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063d7ed3ef490602401602060405180830381865afa925050508015611c81575060408051601f3d908101601f19168201909252611c7e91810190612d1b565b60015b611cc3573d808015611caf576040519150601f19603f3d011682016040523d82523d6000602084013e611cb4565b606091505b50506001610540850152611ccc565b15156105408501525b815167400000000000000016151515156104c08501526101a08301516fffffffffffffffffffffffffffffffff9081166105008601526101c08401518116610520860152610180840151166104e08501526105a08401516040517f6c6f6ae100000000000000000000000000000000000000000000000000000000815260ff909116600482015260009073ffffffffffffffffffffffffffffffffffffffff8b1690636c6f6ae190602401600060405180830381865afa158015611d94573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dbc9190810190612d3d565b805161ffff90811661060088015260208201518116610620880152604082015116610640870152606081015173ffffffffffffffffffffffffffffffffffffffff1661066087015260808101516106808701529050611e25835167200000000000000016151590565b15156106a09095019490945250839250611e429150829050612be2565b915050611049565b50611e796040518060800160405280600081526020016000815260200160008152602001600060ff1681525090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ee4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0891906129e6565b8160400181815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa09190612df0565b60ff166060820152604080517f8c89b64f000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691638c89b64f9160048083019260209291908290030181865afa92505050801561202f575060408051601f3d908101601f1916820190925261202c918101906129e6565b60015b61210f573d80801561205d576040519150601f19603f3d011682016040523d82523d6000602084013e612062565b606091505b50670de0b6b3a76400008260000181815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210491906129e6565b602083015250612118565b80825260208201525b909890975095505050505050565b60408051808201909152600281527f37340000000000000000000000000000000000000000000000000000000000006020820152600090608083106121a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612198919061242b565b60405180910390fd5b50509051600191821b82011c16151590565b60408051808201909152600281527f3734000000000000000000000000000000000000000000000000000000000000602082015260009060808310612225576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612198919061242b565b50509051600191821b1c16151590565b73ffffffffffffffffffffffffffffffffffffffff8116811461225757600080fd5b50565b6000806040838503121561226d57600080fd5b823561227881612235565b9150602083013561228881612235565b809150509250929050565b6040808252835182820181905260009190606090818501906020808901865b83811015612320578151805173ffffffffffffffffffffffffffffffffffffffff16865283810151848701528781015115158887015286810151878701526080808201519087015260a0808201519087015260c0908101519086015260e090940193908201906001016122b2565b50508295506123338188018960ff169052565b50505050509392505050565b60006020828403121561235157600080fd5b8135610aac81612235565b6020808252825182820181905260009190848201906040850190845b818110156123aa57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101612378565b50909695505050505050565b6000602082840312156123c857600080fd5b5035919050565b60005b838110156123ea5781810151838201526020016123d2565b838111156123f9576000848401525b50505050565b600081518084526124178160208601602086016123cf565b601f01601f19169290920160200192915050565b602081526000610aac60208301846123ff565b600060a080830181845280865180835260c092508286019150828160051b8701016020808a0160005b848110156127ba578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff400186528151805173ffffffffffffffffffffffffffffffffffffffff1685526106c08482015181868801526124ca828801826123ff565b915050604080830151878303828901526124e483826123ff565b606085810151908a0152608080860151908a01528c8501518d8a01528b8501518c8a015260e080860151908a0152610100808601511515908a0152610120808601511515908a0152610140808601511515908a0152610160808601511515908a0152610180808601511515908a01526101a0808601516fffffffffffffffffffffffffffffffff908116918b01919091526101c0808701518216908b01526101e0808701518216908b0152610200808701518216908b0152610220808701518216908b01526102408087015164ffffffffff16908b01526102608087015173ffffffffffffffffffffffffffffffffffffffff908116918c0191909152610280808801518216908c01526102a0808801518216908c01526102c0808801518216908c01526102e080880151908c015261030080880151908c015261032080880151908c015261034080880151908c015261036080880151908c015261038080880151908c01526103a0808801518216908c01526103c080880151908c01526103e080880151908c015261040080880151908c015261042080880151908c015261044080880151908c015261046080880151908c015261048080880151908c01526104a0808801511515908c01526104c0808801511515908c01526104e0808801518316908c0152610500808801518316908c015261052080880151909216918b0191909152610540808701511515908b015261056080870151908b015261058080870151908b01526105a08087015160ff16908b01526105c080870151908b01526105e080870151908b01526106008087015161ffff908116918c0191909152610620808801518216908c015261064080880151909116908b015261066080870151909116908a0152610680808601518a8303828c01529194509250905061278c83826123ff565b925050506106a08083015192506127a68188018415159052565b509684019694505090820190600101612467565b50508196506127ef8189018a80518252602081015160208301526040810151604083015260ff60608201511660608301525050565b5050505050509392505050565b805161280781612235565b919050565b60006020828403121561281e57600080fd5b8151610aac81612235565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516101e0810167ffffffffffffffff8111828210171561287c5761287c612829565b60405290565b60405160a0810167ffffffffffffffff8111828210171561287c5761287c612829565b604051601f8201601f1916810167ffffffffffffffff811182821017156128ce576128ce612829565b604052919050565b600060208083850312156128e957600080fd5b825167ffffffffffffffff8082111561290157600080fd5b818501915085601f83011261291557600080fd5b81518181111561292757612927612829565b8060051b91506129388483016128a5565b818152918301840191848101908884111561295257600080fd5b938501935b8385101561297c578451925061296c83612235565b8282529385019390850190612957565b98975050505050505050565b60006020828403121561299a57600080fd5b6040516020810181811067ffffffffffffffff821117156129bd576129bd612829565b6040529151825250919050565b6000602082840312156129dc57600080fd5b610aac8383612988565b6000602082840312156129f857600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80516fffffffffffffffffffffffffffffffff8116811461280757600080fd5b805164ffffffffff8116811461280757600080fd5b805161ffff8116811461280757600080fd5b60006101e08284031215612a8857600080fd5b612a90612858565b612a9a8484612988565b8152612aa860208401612a2e565b6020820152612ab960408401612a2e565b6040820152612aca60608401612a2e565b6060820152612adb60808401612a2e565b6080820152612aec60a08401612a2e565b60a0820152612afd60c08401612a4e565b60c0820152612b0e60e08401612a63565b60e0820152610100612b218185016127fc565b90820152610120612b338482016127fc565b90820152610140612b458482016127fc565b90820152610160612b578482016127fc565b90820152610180612b69848201612a2e565b908201526101a0612b7b848201612a2e565b908201526101c0612b8d848201612a2e565b908201529392505050565b600060208284031215612baa57600080fd5b610aac82612a4e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612c1457612c14612bb3565b5060010190565b600060ff821660ff811415612c3257612c32612bb3565b60010192915050565b60008060008060808587031215612c5157600080fd5b845193506020850151925060408501519150612c6f60608601612a4e565b905092959194509250565b600082601f830112612c8b57600080fd5b815167ffffffffffffffff811115612ca557612ca5612829565b612cb86020601f19601f840116016128a5565b818152846020838601011115612ccd57600080fd5b612cde8260208301602087016123cf565b949350505050565b600060208284031215612cf857600080fd5b815167ffffffffffffffff811115612d0f57600080fd5b612cde84828501612c7a565b600060208284031215612d2d57600080fd5b81518015158114610aac57600080fd5b600060208284031215612d4f57600080fd5b815167ffffffffffffffff80821115612d6757600080fd5b9083019060a08286031215612d7b57600080fd5b612d83612882565b612d8c83612a63565b8152612d9a60208401612a63565b6020820152612dab60408401612a63565b60408201526060830151612dbe81612235565b6060820152608083015182811115612dd557600080fd5b612de187828601612c7a565b60808301525095945050505050565b600060208284031215612e0257600080fd5b815160ff81168114610aac57600080fdfea264697066735822122064141f2b3a8990922c5319ddf6e5b1729666732cfc5485969196ed880b91ed9664736f6c634300080a0033","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 0x825FFD92 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x825FFD92 EQ PUSH2 0x13C JUMPI DUP1 PUSH4 0x9201DE55 EQ PUSH2 0x157 JUMPI DUP1 PUSH4 0xD22CF68A EQ PUSH2 0x177 JUMPI DUP1 PUSH4 0xEC489C21 EQ PUSH2 0x19E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x496F53A EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x3C1740ED EQ PUSH2 0xAF JUMPI DUP1 PUSH4 0x51974CC0 EQ PUSH2 0xFB JUMPI DUP1 PUSH4 0x586C1442 EQ PUSH2 0x11C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9C PUSH8 0xDE0B6B3A7640000 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xD6 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xA6 JUMP JUMPDEST PUSH2 0x10E PUSH2 0x109 CALLDATASIZE PUSH1 0x4 PUSH2 0x225A JUMP JUMPDEST PUSH2 0x1BF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA6 SWAP3 SWAP2 SWAP1 PUSH2 0x2293 JUMP JUMPDEST PUSH2 0x12F PUSH2 0x12A CALLDATASIZE PUSH1 0x4 PUSH2 0x233F JUMP JUMPDEST PUSH2 0x9C4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA6 SWAP2 SWAP1 PUSH2 0x235C JUMP JUMPDEST PUSH2 0xD6 PUSH20 0x9F8F72AA9304C8B593D555F12EF6589CC3A579A2 DUP2 JUMP JUMPDEST PUSH2 0x16A PUSH2 0x165 CALLDATASIZE PUSH1 0x4 PUSH2 0x23B6 JUMP JUMPDEST PUSH2 0xAB3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA6 SWAP2 SWAP1 PUSH2 0x242B JUMP JUMPDEST PUSH2 0xD6 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x1B1 PUSH2 0x1AC CALLDATASIZE PUSH1 0x4 PUSH2 0x233F JUMP JUMPDEST PUSH2 0xC2B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xA6 SWAP3 SWAP2 SWAP1 PUSH2 0x243E JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x233 SWAP2 SWAP1 PUSH2 0x280C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD1946DBC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x282 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2AA SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x28D6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4417A58300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP5 AND SWAP1 PUSH4 0x4417A583 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x31C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x340 SWAP2 SWAP1 PUSH2 0x29CA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xEDDF1B7900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP3 POP PUSH1 0x0 SWAP2 DUP6 AND SWAP1 PUSH4 0xEDDF1B79 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3B2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3D6 SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH2 0x3FC JUMPI PUSH1 0x0 PUSH2 0x3FF JUMP JUMPDEST DUP4 MLOAD JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x417 JUMPI PUSH2 0x417 PUSH2 0x2829 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4A0 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x48D PUSH1 0x40 MLOAD DUP1 PUSH1 0xE0 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 ISZERO ISZERO 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 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x435 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x9B6 JUMPI PUSH1 0x0 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x35EA6A75 DUP8 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x4DF JUMPI PUSH2 0x4DF PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x51F SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x53D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x561 SWAP2 SWAP1 PUSH2 0x2A75 JUMP JUMPDEST SWAP1 POP DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x575 JUMPI PUSH2 0x575 PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x58F JUMPI PUSH2 0x58F PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND SWAP1 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP13 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x611 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x635 SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x647 JUMPI PUSH2 0x647 PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD ADD MSTORE PUSH2 0x65F DUP6 DUP4 PUSH2 0x2126 JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x671 JUMPI PUSH2 0x671 PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD SWAP1 ISZERO ISZERO PUSH1 0x40 SWAP1 SWAP2 ADD MSTORE PUSH2 0x68F DUP6 DUP4 PUSH2 0x21B3 JUMP JUMPDEST ISZERO PUSH2 0x9A3 JUMPI PUSH2 0x140 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x1DA24F3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x1DA24F3E SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x707 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x72B SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x73D JUMPI PUSH2 0x73D PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH1 0x80 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xC634DFAA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xC634DFAA SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7E3 SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x7F5 JUMPI PUSH2 0x7F5 PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0xA0 ADD DUP2 DUP2 MSTORE POP POP DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x817 JUMPI PUSH2 0x817 PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0xA0 ADD MLOAD PUSH1 0x0 EQ PUSH2 0x9A3 JUMPI PUSH2 0x120 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0xE78C9B3B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xE78C9B3B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x89D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8C1 SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x8D3 JUMPI PUSH2 0x8D3 PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH1 0x60 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x79CE6B8C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP13 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x79CE6B8C SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x955 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x979 SWAP2 SWAP1 PUSH2 0x2B98 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x992 JUMPI PUSH2 0x992 PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0xC0 ADD DUP2 DUP2 MSTORE POP POP JUMPDEST POP DUP1 PUSH2 0x9AE DUP2 PUSH2 0x2BE2 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x4A6 JUMP JUMPDEST POP SWAP9 SWAP1 SWAP8 POP SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA13 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA37 SWAP2 SWAP1 PUSH2 0x280C JUMP JUMPDEST SWAP1 POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD1946DBC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA84 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xAAC SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x28D6 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 JUMPDEST PUSH1 0x20 DUP2 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0xB04 JUMPI POP DUP3 DUP2 PUSH1 0xFF AND PUSH1 0x20 DUP2 LT PUSH2 0xADB JUMPI PUSH2 0xADB PUSH2 0x29FF JUMP JUMPDEST BYTE PUSH1 0xF8 SHL PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xB1B JUMPI DUP1 PUSH2 0xB13 DUP2 PUSH2 0x2C1B JUMP JUMPDEST SWAP2 POP POP PUSH2 0xAB8 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xFF AND PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB39 JUMPI PUSH2 0xB39 PUSH2 0x2829 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xB63 JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0xBB7 JUMPI POP DUP4 DUP3 PUSH1 0xFF AND PUSH1 0x20 DUP2 LT PUSH2 0xB8E JUMPI PUSH2 0xB8E PUSH2 0x29FF JUMP JUMPDEST BYTE PUSH1 0xF8 SHL PUSH32 0xFF00000000000000000000000000000000000000000000000000000000000000 AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xAAC JUMPI DUP4 DUP3 PUSH1 0xFF AND PUSH1 0x20 DUP2 LT PUSH2 0xBD1 JUMPI PUSH2 0xBD1 PUSH2 0x29FF JUMP JUMPDEST BYTE PUSH1 0xF8 SHL DUP2 DUP4 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0xBEA JUMPI PUSH2 0xBEA PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP DUP2 PUSH2 0xC23 DUP2 PUSH2 0x2C1B JUMP JUMPDEST SWAP3 POP POP PUSH2 0xB6B JUMP JUMPDEST PUSH1 0x60 PUSH2 0xC5B PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFCA513A8 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCA8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCCC SWAP2 SWAP1 PUSH2 0x280C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD1B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD3F SWAP2 SWAP1 PUSH2 0x280C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xE860ACCB PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xD8E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xDB2 SWAP2 SWAP1 PUSH2 0x280C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD1946DBC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xE01 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xE29 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x28D6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xE47 JUMPI PUSH2 0xE47 PUSH2 0x2829 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1043 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH2 0x6C0 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x60 PUSH1 0x20 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE SWAP4 DUP4 ADD DUP2 SWAP1 MSTORE DUP1 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0x80 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0xA0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0xC0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH1 0xE0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x100 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x120 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x140 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x160 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x180 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x1A0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x1C0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x1E0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x200 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x220 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x240 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x260 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x280 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x2A0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x2C0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x2E0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x300 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x320 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x340 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x360 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x380 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x3A0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x3C0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x3E0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x400 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x420 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x440 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x460 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x480 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x4A0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x4C0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x4E0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x500 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x520 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x540 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x560 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x580 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x5A0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x5C0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x5E0 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x600 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x620 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x640 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x660 DUP4 ADD DUP3 SWAP1 MSTORE PUSH2 0x680 DUP4 ADD MSTORE PUSH2 0x6A0 DUP3 ADD MSTORE DUP3 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 ADD SWAP2 ADD DUP2 PUSH2 0xE65 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x1E4A JUMPI PUSH1 0x0 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1066 JUMPI PUSH2 0x1066 PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1082 JUMPI PUSH2 0x1082 PUSH2 0x29FF JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP1 DUP4 MSTORE PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x0 SWAP2 DUP9 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1103 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1127 SWAP2 SWAP1 PUSH2 0x2A75 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x1A0 DUP6 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD DUP2 AND PUSH2 0x1C0 DUP6 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD MLOAD DUP3 AND PUSH2 0x1E0 DUP7 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD DUP3 AND PUSH2 0x200 DUP7 ADD MSTORE PUSH1 0xA0 DUP4 ADD MLOAD SWAP1 SWAP2 AND PUSH2 0x220 DUP6 ADD MSTORE PUSH1 0xC0 DUP3 ADD MLOAD PUSH5 0xFFFFFFFFFF AND PUSH2 0x240 DUP6 ADD MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x260 DUP7 ADD MSTORE PUSH2 0x120 DUP4 ADD MLOAD DUP2 AND PUSH2 0x280 DUP7 ADD MSTORE PUSH2 0x140 DUP4 ADD MLOAD DUP2 AND PUSH2 0x2A0 DUP7 ADD MSTORE PUSH2 0x160 DUP4 ADD MLOAD DUP2 AND PUSH2 0x2C0 DUP7 ADD MSTORE DUP5 MLOAD SWAP2 MLOAD PUSH32 0xB3596F0700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP3 POP SWAP1 DUP10 AND SWAP1 PUSH4 0xB3596F07 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1238 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x125C SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST PUSH2 0x380 DUP4 ADD MSTORE DUP2 MLOAD PUSH1 0x40 MLOAD PUSH32 0x92BF2BE000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP10 AND SWAP1 PUSH4 0x92BF2BE0 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x12D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12F5 SWAP2 SWAP1 PUSH2 0x280C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x3A0 DUP5 ADD MSTORE DUP3 MLOAD PUSH2 0x260 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1372 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1396 SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST DUP3 PUSH2 0x2E0 ADD DUP2 DUP2 MSTORE POP POP DUP2 PUSH2 0x280 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x79774338 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13F0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1414 SWAP2 SWAP1 PUSH2 0x2C3B JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND PUSH2 0x340 DUP7 ADD MSTORE PUSH2 0x320 DUP6 ADD MSTORE POP PUSH2 0x300 DUP4 ADD MSTORE PUSH2 0x2A0 DUP3 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0xB1BF962D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 PUSH4 0xB1BF962D SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x14A1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x14C5 SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST PUSH2 0x360 DUP4 ADD MSTORE DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x9F8F72AA9304C8B593D555F12EF6589CC3A579A2 EQ ISZERO PUSH2 0x1610 JUMPI PUSH1 0x0 DUP3 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x154F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1573 SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x6FDDE03 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15C6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15EA SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST SWAP1 POP PUSH2 0x15F5 DUP3 PUSH2 0xAB3 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MSTORE PUSH2 0x1603 DUP2 PUSH2 0xAB3 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE POP PUSH2 0x170C SWAP1 POP JUMP JUMPDEST DUP2 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x165F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1687 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2CE6 JUMP JUMPDEST DUP3 PUSH1 0x40 ADD DUP2 SWAP1 MSTORE POP DUP2 PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x6FDDE03 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16DE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1706 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2CE6 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE JUMPDEST DUP1 MLOAD DUP1 MLOAD PUSH2 0xFFFF PUSH1 0x40 DUP3 DUP2 SHR DUP3 AND PUSH1 0xE0 DUP8 ADD MSTORE PUSH1 0xFF PUSH1 0x30 DUP5 SWAP1 SHR DUP2 AND PUSH1 0x60 DUP9 ADD MSTORE PUSH1 0x20 DUP5 DUP2 SHR DUP5 AND PUSH1 0xC0 DUP10 ADD MSTORE PUSH1 0x10 DUP6 SWAP1 SHR DUP5 AND PUSH1 0xA0 DUP10 ADD MSTORE SWAP3 DUP5 AND PUSH1 0x80 DUP9 ADD DUP2 SWAP1 MSTORE ISZERO ISZERO PUSH2 0x100 DUP9 ADD MSTORE DUP5 MLOAD PUSH8 0x1000000000000000 DUP2 AND ISZERO ISZERO PUSH2 0x4A0 DUP10 ADD MSTORE PUSH8 0x800000000000000 DUP2 AND ISZERO ISZERO PUSH2 0x140 DUP10 ADD MSTORE PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO PUSH2 0x120 DUP10 ADD MSTORE PUSH8 0x200000000000000 DUP2 AND ISZERO ISZERO PUSH2 0x180 DUP10 ADD MSTORE PUSH8 0x100000000000000 AND ISZERO ISZERO PUSH2 0x160 DUP9 ADD MSTORE PUSH2 0x2C0 DUP8 ADD MLOAD DUP3 MLOAD PUSH32 0xB3429A200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP3 MLOAD PUSH1 0xA8 SWAP6 SWAP1 SWAP6 SHR SWAP1 SWAP2 AND SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP3 PUSH4 0xB3429A2 SWAP3 PUSH1 0x4 DUP1 DUP3 ADD SWAP4 SWAP2 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1849 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x1846 SWAP2 DUP2 ADD SWAP1 PUSH2 0x29E6 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x1852 JUMPI PUSH2 0x1859 JUMP JUMPDEST PUSH2 0x3C0 DUP6 ADD MSTORE JUMPDEST DUP4 PUSH2 0x2C0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF4202409 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x18C5 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x18C2 SWAP2 DUP2 ADD SWAP1 PUSH2 0x29E6 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x18CE JUMPI PUSH2 0x18D5 JUMP JUMPDEST PUSH2 0x3E0 DUP6 ADD MSTORE JUMPDEST DUP4 PUSH2 0x2C0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD5CD7391 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1941 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x193E SWAP2 DUP2 ADD SWAP1 PUSH2 0x29E6 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x194A JUMPI PUSH2 0x1951 JUMP JUMPDEST PUSH2 0x400 DUP6 ADD MSTORE JUMPDEST DUP4 PUSH2 0x2C0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x14E32DA4 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x19BD JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x19BA SWAP2 DUP2 ADD SWAP1 PUSH2 0x29E6 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x19C6 JUMPI PUSH2 0x19CD JUMP JUMPDEST PUSH2 0x420 DUP6 ADD MSTORE JUMPDEST DUP4 PUSH2 0x2C0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xACD78686 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1A39 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x1A36 SWAP2 DUP2 ADD SWAP1 PUSH2 0x29E6 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x1A42 JUMPI PUSH2 0x1A49 JUMP JUMPDEST PUSH2 0x440 DUP6 ADD MSTORE JUMPDEST DUP4 PUSH2 0x2C0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x34762CA5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1AB5 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x1AB2 SWAP2 DUP2 ADD SWAP1 PUSH2 0x29E6 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x1ABE JUMPI PUSH2 0x1AC5 JUMP JUMPDEST PUSH2 0x460 DUP6 ADD MSTORE JUMPDEST DUP4 PUSH2 0x2C0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x54C365C6 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1B31 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x1B2E SWAP2 DUP2 ADD SWAP1 PUSH2 0x29E6 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x1B3A JUMPI PUSH2 0x1B41 JUMP JUMPDEST PUSH2 0x480 DUP6 ADD MSTORE JUMPDEST PUSH1 0xFF DUP2 AND PUSH2 0x5A0 DUP6 ADD MSTORE DUP2 MLOAD PUSH1 0xD4 SHR PUSH5 0xFFFFFFFFFF AND DUP5 PUSH2 0x560 ADD DUP2 DUP2 MSTORE POP POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x69B169E1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1BAC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1BD0 SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST PUSH2 0x580 DUP6 ADD MSTORE DUP2 MLOAD PUSH5 0xFFFFFFFFF PUSH1 0x50 DUP3 SWAP1 SHR DUP2 AND SWAP2 PUSH1 0x74 SHR AND PUSH2 0x5E0 DUP7 ADD MSTORE PUSH2 0x5C0 DUP6 ADD MSTORE DUP4 MLOAD PUSH1 0x40 MLOAD PUSH32 0xD7ED3EF400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP10 AND SWAP1 PUSH4 0xD7ED3EF4 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1C81 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x1C7E SWAP2 DUP2 ADD SWAP1 PUSH2 0x2D1B JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x1CC3 JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x1CAF 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 0x1CB4 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP PUSH1 0x1 PUSH2 0x540 DUP6 ADD MSTORE PUSH2 0x1CCC JUMP JUMPDEST ISZERO ISZERO PUSH2 0x540 DUP6 ADD MSTORE JUMPDEST DUP2 MLOAD PUSH8 0x4000000000000000 AND ISZERO ISZERO ISZERO ISZERO PUSH2 0x4C0 DUP6 ADD MSTORE PUSH2 0x1A0 DUP4 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH2 0x500 DUP7 ADD MSTORE PUSH2 0x1C0 DUP5 ADD MLOAD DUP2 AND PUSH2 0x520 DUP7 ADD MSTORE PUSH2 0x180 DUP5 ADD MLOAD AND PUSH2 0x4E0 DUP6 ADD MSTORE PUSH2 0x5A0 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x6C6F6AE100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0xFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND SWAP1 PUSH4 0x6C6F6AE1 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D94 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1DBC SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2D3D JUMP JUMPDEST DUP1 MLOAD PUSH2 0xFFFF SWAP1 DUP2 AND PUSH2 0x600 DUP9 ADD MSTORE PUSH1 0x20 DUP3 ADD MLOAD DUP2 AND PUSH2 0x620 DUP9 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD AND PUSH2 0x640 DUP8 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x660 DUP8 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH2 0x680 DUP8 ADD MSTORE SWAP1 POP PUSH2 0x1E25 DUP4 MLOAD PUSH8 0x2000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO ISZERO PUSH2 0x6A0 SWAP1 SWAP6 ADD SWAP5 SWAP1 SWAP5 MSTORE POP DUP4 SWAP3 POP PUSH2 0x1E42 SWAP2 POP DUP3 SWAP1 POP PUSH2 0x2BE2 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1049 JUMP JUMPDEST POP PUSH2 0x1E79 PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0xFF AND DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x50D25BCD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1EE4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F08 SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST DUP2 PUSH1 0x40 ADD DUP2 DUP2 MSTORE POP POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F7C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1FA0 SWAP2 SWAP1 PUSH2 0x2DF0 JUMP JUMPDEST PUSH1 0xFF AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C89B64F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND SWAP2 PUSH4 0x8C89B64F SWAP2 PUSH1 0x4 DUP1 DUP4 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x202F JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x202C SWAP2 DUP2 ADD SWAP1 PUSH2 0x29E6 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x210F JUMPI RETURNDATASIZE DUP1 DUP1 ISZERO PUSH2 0x205D 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 0x2062 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 DUP3 PUSH1 0x0 ADD DUP2 DUP2 MSTORE POP POP PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x50D25BCD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x20E0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2104 SWAP2 SWAP1 PUSH2 0x29E6 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP PUSH2 0x2118 JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE JUMPDEST SWAP1 SWAP9 SWAP1 SWAP8 POP SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x21A1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2198 SWAP2 SWAP1 PUSH2 0x242B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL DUP3 ADD SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH32 0x3734000000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 SWAP1 PUSH1 0x80 DUP4 LT PUSH2 0x2225 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2198 SWAP2 SWAP1 PUSH2 0x242B JUMP JUMPDEST POP POP SWAP1 MLOAD PUSH1 0x1 SWAP2 DUP3 SHL SHR AND ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2257 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x226D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2278 DUP2 PUSH2 0x2235 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x2288 DUP2 PUSH2 0x2235 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 DUP3 MSTORE DUP4 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x60 SWAP1 DUP2 DUP6 ADD SWAP1 PUSH1 0x20 DUP1 DUP10 ADD DUP7 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2320 JUMPI DUP2 MLOAD DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 MSTORE DUP4 DUP2 ADD MLOAD DUP5 DUP8 ADD MSTORE DUP8 DUP2 ADD MLOAD ISZERO ISZERO DUP9 DUP8 ADD MSTORE DUP7 DUP2 ADD MLOAD DUP8 DUP8 ADD MSTORE PUSH1 0x80 DUP1 DUP3 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH1 0xA0 DUP1 DUP3 ADD MLOAD SWAP1 DUP8 ADD MSTORE PUSH1 0xC0 SWAP1 DUP2 ADD MLOAD SWAP1 DUP7 ADD MSTORE PUSH1 0xE0 SWAP1 SWAP5 ADD SWAP4 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x22B2 JUMP JUMPDEST POP POP DUP3 SWAP6 POP PUSH2 0x2333 DUP2 DUP9 ADD DUP10 PUSH1 0xFF AND SWAP1 MSTORE JUMP JUMPDEST POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xAAC DUP2 PUSH2 0x2235 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 0x23AA JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2378 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x23C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x23EA JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x23D2 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x23F9 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x2417 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x23CF JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xAAC PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x23FF JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP7 MLOAD DUP1 DUP4 MSTORE PUSH1 0xC0 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD PUSH1 0x20 DUP1 DUP11 ADD PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x27BA JUMPI DUP10 DUP5 SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40 ADD DUP7 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE PUSH2 0x6C0 DUP5 DUP3 ADD MLOAD DUP2 DUP7 DUP9 ADD MSTORE PUSH2 0x24CA DUP3 DUP9 ADD DUP3 PUSH2 0x23FF JUMP JUMPDEST SWAP2 POP POP PUSH1 0x40 DUP1 DUP4 ADD MLOAD DUP8 DUP4 SUB DUP3 DUP10 ADD MSTORE PUSH2 0x24E4 DUP4 DUP3 PUSH2 0x23FF JUMP JUMPDEST PUSH1 0x60 DUP6 DUP2 ADD MLOAD SWAP1 DUP11 ADD MSTORE PUSH1 0x80 DUP1 DUP7 ADD MLOAD SWAP1 DUP11 ADD MSTORE DUP13 DUP6 ADD MLOAD DUP14 DUP11 ADD MSTORE DUP12 DUP6 ADD MLOAD DUP13 DUP11 ADD MSTORE PUSH1 0xE0 DUP1 DUP7 ADD MLOAD SWAP1 DUP11 ADD MSTORE PUSH2 0x100 DUP1 DUP7 ADD MLOAD ISZERO ISZERO SWAP1 DUP11 ADD MSTORE PUSH2 0x120 DUP1 DUP7 ADD MLOAD ISZERO ISZERO SWAP1 DUP11 ADD MSTORE PUSH2 0x140 DUP1 DUP7 ADD MLOAD ISZERO ISZERO SWAP1 DUP11 ADD MSTORE PUSH2 0x160 DUP1 DUP7 ADD MLOAD ISZERO ISZERO SWAP1 DUP11 ADD MSTORE PUSH2 0x180 DUP1 DUP7 ADD MLOAD ISZERO ISZERO SWAP1 DUP11 ADD MSTORE PUSH2 0x1A0 DUP1 DUP7 ADD MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP12 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x1C0 DUP1 DUP8 ADD MLOAD DUP3 AND SWAP1 DUP12 ADD MSTORE PUSH2 0x1E0 DUP1 DUP8 ADD MLOAD DUP3 AND SWAP1 DUP12 ADD MSTORE PUSH2 0x200 DUP1 DUP8 ADD MLOAD DUP3 AND SWAP1 DUP12 ADD MSTORE PUSH2 0x220 DUP1 DUP8 ADD MLOAD DUP3 AND SWAP1 DUP12 ADD MSTORE PUSH2 0x240 DUP1 DUP8 ADD MLOAD PUSH5 0xFFFFFFFFFF AND SWAP1 DUP12 ADD MSTORE PUSH2 0x260 DUP1 DUP8 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP13 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x280 DUP1 DUP9 ADD MLOAD DUP3 AND SWAP1 DUP13 ADD MSTORE PUSH2 0x2A0 DUP1 DUP9 ADD MLOAD DUP3 AND SWAP1 DUP13 ADD MSTORE PUSH2 0x2C0 DUP1 DUP9 ADD MLOAD DUP3 AND SWAP1 DUP13 ADD MSTORE PUSH2 0x2E0 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x300 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x320 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x340 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x360 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x380 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x3A0 DUP1 DUP9 ADD MLOAD DUP3 AND SWAP1 DUP13 ADD MSTORE PUSH2 0x3C0 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x3E0 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x400 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x420 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x440 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x460 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x480 DUP1 DUP9 ADD MLOAD SWAP1 DUP13 ADD MSTORE PUSH2 0x4A0 DUP1 DUP9 ADD MLOAD ISZERO ISZERO SWAP1 DUP13 ADD MSTORE PUSH2 0x4C0 DUP1 DUP9 ADD MLOAD ISZERO ISZERO SWAP1 DUP13 ADD MSTORE PUSH2 0x4E0 DUP1 DUP9 ADD MLOAD DUP4 AND SWAP1 DUP13 ADD MSTORE PUSH2 0x500 DUP1 DUP9 ADD MLOAD DUP4 AND SWAP1 DUP13 ADD MSTORE PUSH2 0x520 DUP1 DUP9 ADD MLOAD SWAP1 SWAP3 AND SWAP2 DUP12 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x540 DUP1 DUP8 ADD MLOAD ISZERO ISZERO SWAP1 DUP12 ADD MSTORE PUSH2 0x560 DUP1 DUP8 ADD MLOAD SWAP1 DUP12 ADD MSTORE PUSH2 0x580 DUP1 DUP8 ADD MLOAD SWAP1 DUP12 ADD MSTORE PUSH2 0x5A0 DUP1 DUP8 ADD MLOAD PUSH1 0xFF AND SWAP1 DUP12 ADD MSTORE PUSH2 0x5C0 DUP1 DUP8 ADD MLOAD SWAP1 DUP12 ADD MSTORE PUSH2 0x5E0 DUP1 DUP8 ADD MLOAD SWAP1 DUP12 ADD MSTORE PUSH2 0x600 DUP1 DUP8 ADD MLOAD PUSH2 0xFFFF SWAP1 DUP2 AND SWAP2 DUP13 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x620 DUP1 DUP9 ADD MLOAD DUP3 AND SWAP1 DUP13 ADD MSTORE PUSH2 0x640 DUP1 DUP9 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP12 ADD MSTORE PUSH2 0x660 DUP1 DUP8 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP11 ADD MSTORE PUSH2 0x680 DUP1 DUP7 ADD MLOAD DUP11 DUP4 SUB DUP3 DUP13 ADD MSTORE SWAP2 SWAP5 POP SWAP3 POP SWAP1 POP PUSH2 0x278C DUP4 DUP3 PUSH2 0x23FF JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x6A0 DUP1 DUP4 ADD MLOAD SWAP3 POP PUSH2 0x27A6 DUP2 DUP9 ADD DUP5 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST POP SWAP7 DUP5 ADD SWAP7 SWAP5 POP POP SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2467 JUMP JUMPDEST POP POP DUP2 SWAP7 POP PUSH2 0x27EF DUP2 DUP10 ADD DUP11 DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xFF PUSH1 0x60 DUP3 ADD MLOAD AND PUSH1 0x60 DUP4 ADD MSTORE POP POP JUMP JUMPDEST POP POP POP POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH2 0x2807 DUP2 PUSH2 0x2235 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x281E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xAAC DUP2 PUSH2 0x2235 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x287C JUMPI PUSH2 0x287C PUSH2 0x2829 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x287C JUMPI PUSH2 0x287C PUSH2 0x2829 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x28CE JUMPI PUSH2 0x28CE PUSH2 0x2829 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x28E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2901 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2915 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x2927 JUMPI PUSH2 0x2927 PUSH2 0x2829 JUMP JUMPDEST DUP1 PUSH1 0x5 SHL SWAP2 POP PUSH2 0x2938 DUP5 DUP4 ADD PUSH2 0x28A5 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 DUP4 ADD DUP5 ADD SWAP2 DUP5 DUP2 ADD SWAP1 DUP9 DUP5 GT ISZERO PUSH2 0x2952 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP4 DUP6 LT ISZERO PUSH2 0x297C JUMPI DUP5 MLOAD SWAP3 POP PUSH2 0x296C DUP4 PUSH2 0x2235 JUMP JUMPDEST DUP3 DUP3 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP1 DUP6 ADD SWAP1 PUSH2 0x2957 JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x299A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x29BD JUMPI PUSH2 0x29BD PUSH2 0x2829 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x29DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAAC DUP4 DUP4 PUSH2 0x2988 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x29F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2807 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2807 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x2807 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2A88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2A90 PUSH2 0x2858 JUMP JUMPDEST PUSH2 0x2A9A DUP5 DUP5 PUSH2 0x2988 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x2AA8 PUSH1 0x20 DUP5 ADD PUSH2 0x2A2E JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2AB9 PUSH1 0x40 DUP5 ADD PUSH2 0x2A2E JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x2ACA PUSH1 0x60 DUP5 ADD PUSH2 0x2A2E JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x2ADB PUSH1 0x80 DUP5 ADD PUSH2 0x2A2E JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x2AEC PUSH1 0xA0 DUP5 ADD PUSH2 0x2A2E JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x2AFD PUSH1 0xC0 DUP5 ADD PUSH2 0x2A4E JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x2B0E PUSH1 0xE0 DUP5 ADD PUSH2 0x2A63 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x2B21 DUP2 DUP6 ADD PUSH2 0x27FC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x2B33 DUP5 DUP3 ADD PUSH2 0x27FC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x2B45 DUP5 DUP3 ADD PUSH2 0x27FC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x2B57 DUP5 DUP3 ADD PUSH2 0x27FC JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x2B69 DUP5 DUP3 ADD PUSH2 0x2A2E JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x2B7B DUP5 DUP3 ADD PUSH2 0x2A2E JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x2B8D DUP5 DUP3 ADD PUSH2 0x2A2E JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2BAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAAC DUP3 PUSH2 0x2A4E JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x2C14 JUMPI PUSH2 0x2C14 PUSH2 0x2BB3 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND PUSH1 0xFF DUP2 EQ ISZERO PUSH2 0x2C32 JUMPI PUSH2 0x2C32 PUSH2 0x2BB3 JUMP JUMPDEST PUSH1 0x1 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2C51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH2 0x2C6F PUSH1 0x60 DUP7 ADD PUSH2 0x2A4E JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x2C8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2CA5 JUMPI PUSH2 0x2CA5 PUSH2 0x2829 JUMP JUMPDEST PUSH2 0x2CB8 PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x28A5 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 PUSH1 0x20 DUP4 DUP7 ADD ADD GT ISZERO PUSH2 0x2CCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2CDE DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x23CF JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2CF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2D0F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2CDE DUP5 DUP3 DUP6 ADD PUSH2 0x2C7A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D2D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xAAC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D4F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2D67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0xA0 DUP3 DUP7 SUB SLT ISZERO PUSH2 0x2D7B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2D83 PUSH2 0x2882 JUMP JUMPDEST PUSH2 0x2D8C DUP4 PUSH2 0x2A63 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x2D9A PUSH1 0x20 DUP5 ADD PUSH2 0x2A63 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2DAB PUSH1 0x40 DUP5 ADD PUSH2 0x2A63 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x2DBE DUP2 PUSH2 0x2235 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH2 0x2DD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2DE1 DUP8 DUP3 DUP7 ADD PUSH2 0x2C7A JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2E02 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xAAC JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH5 0x141F2B3A89 SWAP1 SWAP3 0x2C MSTORE8 NOT 0xDD 0xF6 0xE5 0xB1 PUSH19 0x9666732CFC5485969196ED880B91ED9664736F PUSH13 0x634300080A0033000000000000 ","sourceMap":"1551:11043:155:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1944:51;;1988:7;1944:51;;;;;160:25:201;;;148:2;133:18;1944:51:155;;;;;;;;1773:78;;;;;;;;401:42:201;389:55;;;371:74;;359:2;344:18;1773:78:155;196:255:201;10533:1729:155;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;2450:198::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1999:80::-;;2037:42;1999:80;;12266:326;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1855:85::-;;;;;2652:7877;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;10533:1729::-;10653:24;10679:5;10692:10;10711:8;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10692:38;;10736:25;10764:4;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10764:22:155;;;;;;;;;;;;:::i;:::-;10843:31;;;;;:25;389:55:201;;;10843:31:155;;;371:74:201;10736:50:155;;-1:-1:-1;10792:48:155;;10843:25;;;;;344:18:201;;10843:31:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10915:23;;;;;:17;389:55:201;;;10915:23:155;;;371:74:201;10792:82:155;;-1:-1:-1;10881:25:155;;10915:17;;;;;344:18:201;;10915:23:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10881:58;-1:-1:-1;10946:41:155;11019:18;;;:40;;11058:1;11019:40;;;11040:8;:15;11019:40;10990:75;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10990:75:155;;;;;;;;;;;;;;;;;10946:119;;11077:9;11072:1133;11096:8;:15;11092:1;:19;11072:1133;;;11126:37;11166:4;:19;;;11186:8;11195:1;11186:11;;;;;;;;:::i;:::-;;;;;;;11166:32;;;;;;;;;;;;;;401:42:201;389:55;;;;371:74;;359:2;344:18;;196:255;11166:32:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11126:72;;11272:8;11281:1;11272:11;;;;;;;;:::i;:::-;;;;;;;11234:16;11251:1;11234:19;;;;;;;;:::i;:::-;;;;;;;;;;;:49;;;;;;11341:22;;;;11333:69;;;;;389:55:201;;;11333:69:155;;;371:74:201;11333:47:155;;;;;344:18:201;;11333:69:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11291:16;11308:1;11291:19;;;;;;;;:::i;:::-;;;;;;;;;;;;:39;:111;11463:33;:10;11494:1;11463:30;:33::i;:::-;11410:16;11427:1;11410:19;;;;;;;;:::i;:::-;;;;;;;;;;;:86;;;:50;;;;:86;11509:25;:10;11532:1;11509:22;:25::i;:::-;11505:694;;;11617:33;;;;11587:95;;;;;:89;389:55:201;;;11587:95:155;;;371:74:201;11587:89:155;;;;;;344:18:201;;11587:95:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11546:16;11563:1;11546:19;;;;;;;;:::i;:::-;;;;;;;;;;;:38;;:136;11751:31;;;;11734:85;;;;;:79;389:55:201;;;11734:85:155;;;371:74:201;11734:79:155;;;;;;344:18:201;;11734:85:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11692:16;11709:1;11692:19;;;;;;;;:::i;:::-;;;;;;;:39;;:127;;;;;11833:16;11850:1;11833:19;;;;;;;;:::i;:::-;;;;;;;:39;;;11876:1;11833:44;11829:362;;11947:31;;;;11930:86;;;;;:80;389:55:201;;;11930:86:155;;;371:74:201;11930:80:155;;;;;;344:18:201;;11930:86:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11891:16;11908:1;11891:19;;;;;;;;:::i;:::-;;;;;;;;;;;:36;;:125;12112:31;;;;12082:98;;;;;:92;389:55:201;;;12082:98:155;;;371:74:201;12082:92:155;;;;;;344:18:201;;12082:98:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12028:152;;:16;12045:1;12028:19;;;;;;;;:::i;:::-;;;;;;;:51;;:152;;;;;11829:362;-1:-1:-1;11113:3:155;;;;:::i;:::-;;;;11072:1133;;;-1:-1:-1;12219:16:155;12237:19;;-1:-1:-1;10533:1729:155;-1:-1:-1;;;;;;10533:1729:155:o;2450:198::-;2546:16;2570:10;2589:8;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2570:38;;2621:4;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2621:22:155;;;;;;;;;;;;:::i;:::-;2614:29;2450:198;-1:-1:-1;;;2450:198:155:o;12266:326::-;12330:13;12351:7;12368:53;12379:2;12375:1;:6;;;:26;;;;;12385:8;12394:1;12385:11;;;;;;;;;:::i;:::-;;;;:16;;;;12375:26;12368:53;;;12411:3;;;;:::i;:::-;;;;12368:53;;;12426:23;12462:1;12452:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12452:12:155;;12426:38;;12479:1;12475:5;;12470:87;12486:2;12482:1;:6;;;:26;;;;;12492:8;12501:1;12492:11;;;;;;;;;:::i;:::-;;;;:16;;;;12482:26;12470:87;;;12539:8;12548:1;12539:11;;;;;;;;;:::i;:::-;;;;12523:10;12534:1;12523:13;;;;;;;;;;:::i;:::-;;;;:27;;;;;;;;;;-1:-1:-1;12510:3:155;;;;:::i;:::-;;;;12470:87;;2652:7877;2748:30;2780:23;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2780:23:155;2811:18;2844:8;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2811:59;;2876:10;2895:8;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2876:38;;2920:41;2996:8;:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2920:112;;3039:25;3067:4;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3067:22:155;;;;;;;;;;;;:::i;:::-;3039:50;;3095:43;3169:8;:15;3141:44;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3141:44:155;;;;;;;;;;;;;;;3095:90;;3197:9;3192:6515;3216:8;:15;3212:1;:19;3192:6515;;;3246:40;3289:12;3302:1;3289:15;;;;;;;;:::i;:::-;;;;;;;3246:58;;3342:8;3351:1;3342:11;;;;;;;;:::i;:::-;;;;;;;;;;;3312:41;;;;;;;3433:48;;;;;;;;371:74:201;;;;3312:27:155;;3433:19;;;;;344:18:201;;3433:48:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3564:23;;;;3535:52;;;;:26;;;:52;3677:28;;;;3643:62;;:31;;;:62;3791:29;;;;;3763:57;;:25;;;:57;3920:34;;;;3887:67;;:30;;;:67;4050:32;;;;4019:63;;;:28;;;:63;4124:28;;;;4090:62;;:31;;;:62;4188:22;;;;4160:50;;;;:25;;;:50;4255:31;;;;4218:68;;:34;;;:68;4333:33;;;;4294:72;;:36;;;:72;4462:36;;;;4420:78;;:39;;;:78;4581:27;;4551:65;;;;;389:55:201;;;4551:65:155;;;371:74:201;3564:23:155;;-1:-1:-1;4551:20:155;;;;;;344:18:201;;4551:65:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4506:42;;;:110;4674:27;;4650:52;;;;;:23;389:55:201;;;4650:52:155;;;371:74:201;4650:23:155;;;;;;344:18:201;;4650:52:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4624:78;;;;:23;;;:78;4758:27;;4806:25;;;;4743:96;;;;;389:55:201;;;4743:96:155;;;371:74:201;4743:53:155;;;;;344:18:201;;4743:96:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4710:11;:30;;:129;;;;;5021:11;:34;;;5004:66;;;:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4847:225;;4952:41;;;4847:225;4913:29;;;4847:225;-1:-1:-1;4857:36:155;;;4847:225;5137:36;;;;-1:-1:-1;5118:85:155;;;;;;;:83;;;;;;;:85;;;;;-1:-1:-1;;5118:85:155;;;;;;;;:83;:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5080:35;;;:123;5338:27;;5330:60;;2037:42;5330:60;5326:520;;;5402:14;5439:11;:27;;;5419:55;;;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5402:74;;5486:12;5521:11;:27;;;5501:53;;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5486:70;;5587:23;5603:6;5587:15;:23::i;:::-;5566:18;;;:44;5639:21;5655:4;5639:15;:21::i;:::-;5620:16;;;:40;-1:-1:-1;5326:520:155;;-1:-1:-1;5326:520:155;;5721:11;:27;;;5706:50;;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5706:52:155;;;;;;;;;;;;:::i;:::-;5685:11;:18;;:73;;;;5802:11;:27;;;5787:48;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5787:50:155;;;;;;;;;;;;:::i;:::-;5768:16;;;:69;5326:520;5962:22;;22631:9:72;;22674;4063:2;22944:71;;;;;6198:25:155;;;6023:271;22869:67:72;3439:2;22869:67;;;;;6168:20:155;;;6023:271;3369:2:72;22784:77;;;;;6123:35:155;;;6023:271;3298:2:72;22691:85;;;;;6074:39:155;;;6023:271;22662:21:72;;;-1:-1:-1;6033:31:155;;6023:271;;;6341:36;;6302;;;:75;21735:9:72;;21948:12;21936:24;;21935:31;;6539:20:155;;;6386:218;21899:22:72;21887:34;;21886:41;;6494:35:155;;;6386:218;21857:15:72;21845:27;;21844:34;;6456:28:155;;;6386:218;21818:12:72;21806:24;;21805:31;;6426:20:155;;;6386:218;21779:12:72;21767:24;21766:31;;6396:20:155;;;6386:218;6684:39;;;;6649:110;;;;;;;4339:3:72;23023:71;;;;;;;;6649:108:155;;;;;;;:110;;;;;;;;;;;:108;:110;;;;;;;;;;-1:-1:-1;6649:110:155;;;;;;;;-1:-1:-1;;6649:110:155;;;;;;;;;;;;:::i;:::-;;;6637:215;;;;;6798:30;;;:36;6637:215;6906:11;:39;;;6871:108;;;:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6871:110:155;;;;;;;;-1:-1:-1;;6871:110:155;;;;;;;;;;;;:::i;:::-;;;6859:215;;;;;7020:30;;;:36;6859:215;7128:11;:39;;;7093:106;;;:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7093:108:155;;;;;;;;-1:-1:-1;;7093:108:155;;;;;;;;;;;;:::i;:::-;;;7081:211;;;;;7240:28;;;:34;7081:211;7346:11;:39;;;7311:106;;;:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7311:108:155;;;;;;;;-1:-1:-1;;7311:108:155;;;;;;;;;;;;:::i;:::-;;;7299:211;;;;;7458:28;;;:34;7299:211;7564:11;:39;;;7529:110;;;:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7529:112:155;;;;;;;;-1:-1:-1;;7529:112:155;;;;;;;;;;;;:::i;:::-;;;7517:219;;;;;7680:32;;;:38;7517:219;7790:11;:39;;;7755:112;;;:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7755:114:155;;;;;;;;-1:-1:-1;;7755:114:155;;;;;;;;;;;;:::i;:::-;;;7743:223;;;;;7908:34;;;:40;7743:223;8020:11;:39;;;7985:106;;;:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7985:108:155;;;;;;;;-1:-1:-1;;7985:108:155;;;;;;;;;;;;:::i;:::-;;;7973:212;;;;;8132:29;;;:35;7973:212;8210:52;;;:27;;;:52;17634:9:72;;4478:3;17633:67;;;8270:11:155;:23;;:66;;;;;8378:16;:39;;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8344:31;;;:75;23476:9:72;;23507:63;4127:2;23507:63;;;;;;4191:3;23578:63;;8451:21:155;;;8427:82;8428:21;;;8427:82;8559:27;;8522:65;;;;;:36;389:55:201;;;8522:65:155;;;371:74:201;8522:36:155;;;;;;344:18:201;;8522:65:155;;;;;;;;;;;;;;;;;;-1:-1:-1;8522:65:155;;;;;;;;-1:-1:-1;;8522:65:155;;;;;;;;;;;;:::i;:::-;;;8518:260;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8765:4:155;8734:28;;;:35;8518:260;;;8646:47;;:28;;;:47;8518:260;12837:9:72;;12849:22;12837:34;12836:41;;8786:76:155;;:29;;;:76;8893:17;;;;8870:40;;;;:20;;;:40;8955:31;;;;8918:68;;:34;;;:68;9026:26;;;;8994:58;:29;;;:58;9142:27;;;;-1:-1:-1;9107:70:155;;;;21940:4:201;21928:17;;;9107:70:155;;;21910:36:201;-1:-1:-1;;9107:25:155;;;;;;21883:18:201;;9107:70:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9107:70:155;;;;;;;;;;;;:::i;:::-;9208:16;;9185:39;;;;:20;;;:39;9272:33;;;;9232:73;;:37;;;:73;9349:29;;;;9313:65;:33;;;:65;9530:24;;;;9499:55;;:28;;;:55;9587:18;;;;9562:22;;;:43;9061:116;-1:-1:-1;9650:50:155;:23;11852:9:72;11864:29;11852:41;11851:48;;;11720:184;9650:50:155;9614:86;;:33;;;;:86;;;;-1:-1:-1;3233:3:155;;-1:-1:-1;3233:3:155;;-1:-1:-1;3233:3:155;;-1:-1:-1;3233:3:155;:::i;:::-;;;;3192:6515;;;;9713:40;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9713:40:155;9805:41;:61;;;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9759:16;:43;;:109;;;;;9923:41;:57;;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9874:108;;:46;;;:108;9993:27;;;;;;;;:25;;;;;;:27;;;;;;;;;;;;;;:25;:27;;;;;;;;;;-1:-1:-1;9993:27:155;;;;;;;;-1:-1:-1;;9993:27:155;;;;;;;;;;;;:::i;:::-;;;9989:490;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1988:7;10266:16;:44;;:64;;;;;10400:48;:70;;;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10338:59;;;:134;-1:-1:-1;9989:490:155;;;10064:63;;;10135:50;;;:77;9989:490;10493:12;;10507:16;;-1:-1:-1;2652:7877:155;-1:-1:-1;;;;;;2652:7877:155:o;3638:328:73:-;3862:28;;;;;;;;;;;;;;;;;3768:4;;5284:3:72;3806:54:73;;3798:93;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;3907:9:73;;3938:1;3922:17;;;3921:23;;3907:38;3906:44;:49;;;3638:328::o;3046:314::-;3262:28;;;;;;;;;;;;;;;;;3168:4;;5284:3:72;3206:54:73;;3198:93;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3307:9:73;;3337:1;3321:17;;;3307:32;3306:38;:43;;;3046:314::o;456:178:201:-;566:42;559:5;555:54;548:5;545:65;535:93;;624:1;621;614:12;535:93;456:178;:::o;639:467::-;738:6;746;799:2;787:9;778:7;774:23;770:32;767:52;;;815:1;812;805:12;767:52;854:9;841:23;873:55;922:5;873:55;:::i;:::-;947:5;-1:-1:-1;1004:2:201;989:18;;976:32;1017:57;976:32;1017:57;:::i;:::-;1093:7;1083:17;;;639:467;;;;;:::o;1419:1319::-;1682:2;1734:21;;;1804:13;;1707:18;;;1826:22;;;1653:4;;1682:2;1867;;1885:18;;;;1922:4;1949:15;;;1653:4;1992:667;2006:6;2003:1;2000:13;1992:667;;;2065:13;;2107:9;;2118:42;2103:58;2091:71;;2202:11;;;2196:18;2182:12;;;2175:40;2269:11;;;2263:18;2256:26;2249:34;2235:12;;;2228:56;2324:11;;;2318:18;2304:12;;;2297:40;2360:4;2404:11;;;2398:18;2384:12;;;2377:40;2440:4;2484:11;;;2478:18;2464:12;;;2457:40;2520:4;2564:11;;;2558:18;2544:12;;;2537:40;2606:4;2597:14;;;;2634:15;;;;2028:1;2021:9;1992:667;;;1996:3;;2676;2668:11;;2688:44;2728:2;2717:9;2713:18;2705:6;1406:4;1395:16;1383:29;;1339:75;2688:44;;;;;;1419:1319;;;;;:::o;2743:302::-;2833:6;2886:2;2874:9;2865:7;2861:23;2857:32;2854:52;;;2902:1;2899;2892:12;2854:52;2941:9;2928:23;2960:55;3009:5;2960:55;:::i;3050:681::-;3221:2;3273:21;;;3343:13;;3246:18;;;3365:22;;;3192:4;;3221:2;3444:15;;;;3418:2;3403:18;;;3192:4;3487:218;3501:6;3498:1;3495:13;3487:218;;;3566:13;;3581:42;3562:62;3550:75;;3680:15;;;;3645:12;;;;3523:1;3516:9;3487:218;;;-1:-1:-1;3722:3:201;;3050:681;-1:-1:-1;;;;;;3050:681:201:o;3967:180::-;4026:6;4079:2;4067:9;4058:7;4054:23;4050:32;4047:52;;;4095:1;4092;4085:12;4047:52;-1:-1:-1;4118:23:201;;3967:180;-1:-1:-1;3967:180:201:o;4152:258::-;4224:1;4234:113;4248:6;4245:1;4242:13;4234:113;;;4324:11;;;4318:18;4305:11;;;4298:39;4270:2;4263:10;4234:113;;;4365:6;4362:1;4359:13;4356:48;;;4400:1;4391:6;4386:3;4382:16;4375:27;4356:48;;4152:258;;;:::o;4415:317::-;4457:3;4495:5;4489:12;4522:6;4517:3;4510:19;4538:63;4594:6;4587:4;4582:3;4578:14;4571:4;4564:5;4560:16;4538:63;:::i;:::-;4646:2;4634:15;-1:-1:-1;;4630:88:201;4621:98;;;;4721:4;4617:109;;4415:317;-1:-1:-1;;4415:317:201:o;4737:220::-;4886:2;4875:9;4868:21;4849:4;4906:45;4947:2;4936:9;4932:18;4924:6;4906:45;:::i;5567:7837::-;5887:4;5916:3;5957:2;5946:9;5942:18;5987:2;5976:9;5969:21;6010:6;6045;6039:13;6076:6;6068;6061:22;6102:3;6092:13;;6136:2;6125:9;6121:18;6114:25;;6198:2;6188:6;6185:1;6181:14;6170:9;6166:30;6162:39;6220:4;6259:2;6251:6;6247:15;6280:1;6290:7014;6304:6;6301:1;6298:13;6290:7014;;;6369:22;;;6393:66;6365:95;6353:108;;6484:13;;6558:9;;1188:42;1177:54;1165:67;;6520:6;6623:2;6619;6615:11;6609:18;6664:2;6659;6651:6;6647:15;6640:27;6694:48;6738:2;6730:6;6726:15;6712:12;6694:48;:::i;:::-;6680:62;;;6765:4;6818:2;6814;6810:11;6804:18;6871:6;6863;6859:19;6854:2;6846:6;6842:15;6835:44;6906:41;6940:6;6924:14;6906:41;:::i;:::-;6970:4;7017:11;;;7011:18;6994:15;;;6987:43;7053:4;7100:11;;;7094:18;7077:15;;;7070:43;7156:11;;;7150:18;7133:15;;;7126:43;7212:11;;;7206:18;7189:15;;;7182:43;7248:4;7295:11;;;7289:18;7272:15;;;7265:43;7332:6;7379:12;;;7373:19;1313:13;1306:21;7437:16;;;1294:34;7478:6;7525:12;;;7519:19;1313:13;1306:21;7583:16;;;1294:34;7624:6;7671:12;;;7665:19;1313:13;1306:21;7729:16;;;1294:34;7770:6;7817:12;;;7811:19;1313:13;1306:21;7875:16;;;1294:34;7916:6;7963:12;;;7957:19;1313:13;1306:21;8021:16;;;1294:34;8062:6;8109:12;;;8103:19;5039:34;5028:46;;;8170:16;;;5016:59;;;;8211:6;8258:12;;;8252:19;5028:46;;8319:16;;;5016:59;8360:6;8407:12;;;8401:19;5028:46;;8468:16;;;5016:59;8509:6;8557:12;;;8551:19;5028:46;;8619:16;;;5016:59;8660:6;8708:12;;;8702:19;5028:46;;8770:16;;;5016:59;8811:6;8859:12;;;8853:19;5162:12;5151:24;8920:16;;;5139:37;8961:6;9009:12;;;9003:19;1188:42;1177:54;;;9071:16;;;1165:67;;;;9112:6;9160:12;;;9154:19;1177:54;;9222:16;;;1165:67;9263:6;9311:12;;;9305:19;1177:54;;9373:16;;;1165:67;9414:6;9462:12;;;9456:19;1177:54;;9524:16;;;1165:67;9565:6;9615:12;;;9609:19;9591:16;;;9584:45;9653:6;9703:12;;;9697:19;9679:16;;;9672:45;9741:6;9791:12;;;9785:19;9767:16;;;9760:45;9829:6;9879:12;;;9873:19;9855:16;;;9848:45;9917:6;9967:12;;;9961:19;9943:16;;;9936:45;10005:6;10055:12;;;10049:19;10031:16;;;10024:45;10093:6;10141:12;;;10135:19;1177:54;;10203:16;;;1165:67;10244:6;10294:12;;;10288:19;10270:16;;;10263:45;10332:6;10382:12;;;10376:19;10358:16;;;10351:45;10420:6;10470:12;;;10464:19;10446:16;;;10439:45;10508:6;10558:12;;;10552:19;10534:16;;;10527:45;10596:6;10646:12;;;10640:19;10622:16;;;10615:45;10684:6;10734:12;;;10728:19;10710:16;;;10703:45;10772:6;10822:12;;;10816:19;10798:16;;;10791:45;10860:6;10908:12;;;10902:19;1313:13;1306:21;10967:16;;;1294:34;11008:6;11056:12;;;11050:19;1313:13;1306:21;11115:16;;;1294:34;11156:6;11204:12;;;11198:19;5028:46;;11266:16;;;5016:59;11307:6;11355:12;;;11349:19;5028:46;;11417:16;;;5016:59;11458:6;11506:12;;;11500:19;5028:46;;;11568:16;;;5016:59;;;;11609:6;11657:12;;;11651:19;1313:13;1306:21;11716:16;;;1294:34;11757:6;11807:12;;;11801:19;11783:16;;;11776:45;11845:6;11895:12;;;11889:19;11871:16;;;11864:45;11933:6;11981:12;;;11975:19;1406:4;1395:16;12041;;;1383:29;12082:6;12132:12;;;12126:19;12108:16;;;12101:45;12170:6;12220:12;;;12214:19;12196:16;;;12189:45;12258:6;12306:12;;;12300:19;5263:6;5252:18;;;12367:16;;;5240:31;;;;12408:6;12456:12;;;12450:19;5252:18;;12517:16;;;5240:31;12558:6;12606:12;;;12600:19;5252:18;;;12667:16;;;5240:31;12708:6;12756:12;;;12750:19;1177:54;;;12818:16;;;1165:67;12859:6;12907:12;;;12901:19;12958;;;12940:16;;;12933:45;6892:55;;-1:-1:-1;12859:6:201;-1:-1:-1;12901:19:201;-1:-1:-1;13005:42:201;6892:55;12901:19;13005:42;:::i;:::-;12991:56;;;;13071:6;13127:3;13123:2;13119:12;13113:19;13090:42;;13145:50;13190:3;13182:6;13178:16;13161:15;1313:13;1306:21;1294:34;;1243:91;13145:50;-1:-1:-1;13282:12:201;;;;13218:6;-1:-1:-1;;13247:15:201;;;;6326:1;6319:9;6290:7014;;;6294:3;;13321:6;13313:14;;13336:62;13394:2;13383:9;13379:18;13371:6;5370:5;5364:12;5359:3;5352:25;5426:4;5419:5;5415:16;5409:23;5402:4;5397:3;5393:14;5386:47;5482:4;5475:5;5471:16;5465:23;5458:4;5453:3;5449:14;5442:47;5550:4;5542;5535:5;5531:16;5525:23;5521:34;5514:4;5509:3;5505:14;5498:58;;;5282:280;13336:62;;;;;;;5567:7837;;;;;:::o;13409:162::-;13488:13;;13510:55;13488:13;13510:55;:::i;:::-;13409:162;;;:::o;13576:275::-;13646:6;13699:2;13687:9;13678:7;13674:23;13670:32;13667:52;;;13715:1;13712;13705:12;13667:52;13747:9;13741:16;13766:55;13815:5;13766:55;:::i;13856:184::-;13908:77;13905:1;13898:88;14005:4;14002:1;13995:15;14029:4;14026:1;14019:15;14045:252;14117:2;14111:9;14159:3;14147:16;;14193:18;14178:34;;14214:22;;;14175:62;14172:88;;;14240:18;;:::i;:::-;14276:2;14269:22;14045:252;:::o;14302:253::-;14374:2;14368:9;14416:4;14404:17;;14451:18;14436:34;;14472:22;;;14433:62;14430:88;;;14498:18;;:::i;14560:334::-;14631:2;14625:9;14687:2;14677:13;;-1:-1:-1;;14673:86:201;14661:99;;14790:18;14775:34;;14811:22;;;14772:62;14769:88;;;14837:18;;:::i;:::-;14873:2;14866:22;14560:334;;-1:-1:-1;14560:334:201:o;14899:1035::-;14994:6;15025:2;15068;15056:9;15047:7;15043:23;15039:32;15036:52;;;15084:1;15081;15074:12;15036:52;15117:9;15111:16;15146:18;15187:2;15179:6;15176:14;15173:34;;;15203:1;15200;15193:12;15173:34;15241:6;15230:9;15226:22;15216:32;;15286:7;15279:4;15275:2;15271:13;15267:27;15257:55;;15308:1;15305;15298:12;15257:55;15337:2;15331:9;15359:2;15355;15352:10;15349:36;;;15365:18;;:::i;:::-;15411:2;15408:1;15404:10;15394:20;;15434:28;15458:2;15454;15450:11;15434:28;:::i;:::-;15496:15;;;15566:11;;;15562:20;;;15527:12;;;;15594:19;;;15591:39;;;15626:1;15623;15616:12;15591:39;15650:11;;;;15670:234;15686:6;15681:3;15678:15;15670:234;;;15759:3;15753:10;15740:23;;15776:55;15825:5;15776:55;:::i;:::-;15844:18;;;15703:12;;;;15882;;;;15670:234;;;15923:5;14899:1035;-1:-1:-1;;;;;;;;14899:1035:201:o;15939:423::-;16017:5;16065:4;16053:9;16048:3;16044:19;16040:30;16037:50;;;16083:1;16080;16073:12;16037:50;16116:2;16110:9;16158:4;16150:6;16146:17;16229:6;16217:10;16214:22;16193:18;16181:10;16178:34;16175:62;16172:88;;;16240:18;;:::i;:::-;16276:2;16269:22;16339:16;;16324:32;;-1:-1:-1;16309:6:201;15939:423;-1:-1:-1;15939:423:201:o;16367:276::-;16476:6;16529:2;16517:9;16508:7;16504:23;16500:32;16497:52;;;16545:1;16542;16535:12;16497:52;16568:69;16629:7;16618:9;16568:69;:::i;16648:184::-;16718:6;16771:2;16759:9;16750:7;16746:23;16742:32;16739:52;;;16787:1;16784;16777:12;16739:52;-1:-1:-1;16810:16:201;;16648:184;-1:-1:-1;16648:184:201:o;16837:::-;16889:77;16886:1;16879:88;16986:4;16983:1;16976:15;17010:4;17007:1;17000:15;17026:192;17105:13;;17158:34;17147:46;;17137:57;;17127:85;;17208:1;17205;17198:12;17223:169;17301:13;;17354:12;17343:24;;17333:35;;17323:63;;17382:1;17379;17372:12;17397:163;17475:13;;17528:6;17517:18;;17507:29;;17497:57;;17550:1;17547;17540:12;17565:1649;17665:6;17718:3;17706:9;17697:7;17693:23;17689:33;17686:53;;;17735:1;17732;17725:12;17686:53;17761:22;;:::i;:::-;17806:69;17867:7;17856:9;17806:69;:::i;:::-;17799:5;17792:84;17908:49;17953:2;17942:9;17938:18;17908:49;:::i;:::-;17903:2;17896:5;17892:14;17885:73;17990:49;18035:2;18024:9;18020:18;17990:49;:::i;:::-;17985:2;17978:5;17974:14;17967:73;18072:49;18117:2;18106:9;18102:18;18072:49;:::i;:::-;18067:2;18060:5;18056:14;18049:73;18155:50;18200:3;18189:9;18185:19;18155:50;:::i;:::-;18149:3;18142:5;18138:15;18131:75;18239:50;18284:3;18273:9;18269:19;18239:50;:::i;:::-;18233:3;18226:5;18222:15;18215:75;18323:49;18367:3;18356:9;18352:19;18323:49;:::i;:::-;18317:3;18310:5;18306:15;18299:74;18406:49;18450:3;18439:9;18435:19;18406:49;:::i;:::-;18400:3;18393:5;18389:15;18382:74;18475:3;18510:49;18555:2;18544:9;18540:18;18510:49;:::i;:::-;18494:14;;;18487:73;18579:3;18614:49;18644:18;;;18614:49;:::i;:::-;18598:14;;;18591:73;18683:3;18718:49;18748:18;;;18718:49;:::i;:::-;18702:14;;;18695:73;18787:3;18822:49;18852:18;;;18822:49;:::i;:::-;18806:14;;;18799:73;18891:3;18926:49;18956:18;;;18926:49;:::i;:::-;18910:14;;;18903:73;18995:3;19030:49;19060:18;;;19030:49;:::i;:::-;19014:14;;;19007:73;19099:3;19134:49;19164:18;;;19134:49;:::i;:::-;19118:14;;;19111:73;19122:5;17565:1649;-1:-1:-1;;;17565:1649:201:o;19219:206::-;19288:6;19341:2;19329:9;19320:7;19316:23;19312:32;19309:52;;;19357:1;19354;19347:12;19309:52;19380:39;19409:9;19380:39;:::i;19430:184::-;19482:77;19479:1;19472:88;19579:4;19576:1;19569:15;19603:4;19600:1;19593:15;19619:195;19658:3;19689:66;19682:5;19679:77;19676:103;;;19759:18;;:::i;:::-;-1:-1:-1;19806:1:201;19795:13;;19619:195::o;19819:175::-;19856:3;19900:4;19893:5;19889:16;19929:4;19920:7;19917:17;19914:43;;;19937:18;;:::i;:::-;19986:1;19973:15;;19819:175;-1:-1:-1;;19819:175:201:o;19999:390::-;20095:6;20103;20111;20119;20172:3;20160:9;20151:7;20147:23;20143:33;20140:53;;;20189:1;20186;20179:12;20140:53;20218:9;20212:16;20202:26;;20268:2;20257:9;20253:18;20247:25;20237:35;;20312:2;20301:9;20297:18;20291:25;20281:35;;20335:48;20379:2;20368:9;20364:18;20335:48;:::i;:::-;20325:58;;19999:390;;;;;;;:::o;20583:556::-;20637:5;20690:3;20683:4;20675:6;20671:17;20667:27;20657:55;;20708:1;20705;20698:12;20657:55;20737:6;20731:13;20763:18;20759:2;20756:26;20753:52;;;20785:18;;:::i;:::-;20829:114;20937:4;-1:-1:-1;;20861:4:201;20857:2;20853:13;20849:86;20845:97;20829:114;:::i;:::-;20968:2;20959:7;20952:19;21014:3;21007:4;21002:2;20994:6;20990:15;20986:26;20983:35;20980:55;;;21031:1;21028;21021:12;20980:55;21044:64;21105:2;21098:4;21089:7;21085:18;21078:4;21070:6;21066:17;21044:64;:::i;:::-;21126:7;20583:556;-1:-1:-1;;;;20583:556:201:o;21144:337::-;21224:6;21277:2;21265:9;21256:7;21252:23;21248:32;21245:52;;;21293:1;21290;21283:12;21245:52;21326:9;21320:16;21359:18;21351:6;21348:30;21345:50;;;21391:1;21388;21381:12;21345:50;21414:61;21467:7;21458:6;21447:9;21443:22;21414:61;:::i;21486:277::-;21553:6;21606:2;21594:9;21585:7;21581:23;21577:32;21574:52;;;21622:1;21619;21612:12;21574:52;21654:9;21648:16;21707:5;21700:13;21693:21;21686:5;21683:32;21673:60;;21729:1;21726;21719:12;21957:996;22059:6;22112:2;22100:9;22091:7;22087:23;22083:32;22080:52;;;22128:1;22125;22118:12;22080:52;22161:9;22155:16;22190:18;22231:2;22223:6;22220:14;22217:34;;;22247:1;22244;22237:12;22217:34;22270:22;;;;22326:4;22308:16;;;22304:27;22301:47;;;22344:1;22341;22334:12;22301:47;22370:22;;:::i;:::-;22415:32;22444:2;22415:32;:::i;:::-;22408:5;22401:47;22480:41;22517:2;22513;22509:11;22480:41;:::i;:::-;22475:2;22468:5;22464:14;22457:65;22554:41;22591:2;22587;22583:11;22554:41;:::i;:::-;22549:2;22542:5;22538:14;22531:65;22634:2;22630;22626:11;22620:18;22647:57;22696:7;22647:57;:::i;:::-;22731:2;22720:14;;22713:31;22783:3;22775:12;;22769:19;22800:16;;;22797:36;;;22829:1;22826;22819:12;22797:36;22866:56;22914:7;22903:8;22899:2;22895:17;22866:56;:::i;:::-;22860:3;22849:15;;22842:81;-1:-1:-1;22853:5:201;21957:996;-1:-1:-1;;;;;21957:996:201:o;23146:273::-;23214:6;23267:2;23255:9;23246:7;23242:23;23238:32;23235:52;;;23283:1;23280;23273:12;23235:52;23315:9;23309:16;23365:4;23358:5;23354:16;23347:5;23344:27;23334:55;;23385:1;23382;23375:12"},"gasEstimates":{"creation":{"codeDepositCost":"2369800","executionCost":"infinite","totalCost":"infinite"},"external":{"ETH_CURRENCY_UNIT()":"185","MKR_ADDRESS()":"204","bytes32ToString(bytes32)":"infinite","getReservesData(address)":"infinite","getReservesList(address)":"infinite","getUserReservesData(address,address)":"infinite","marketReferenceCurrencyPriceInUsdProxyAggregator()":"infinite","networkBaseTokenPriceInUsdProxyAggregator()":"infinite"}},"methodIdentifiers":{"ETH_CURRENCY_UNIT()":"0496f53a","MKR_ADDRESS()":"825ffd92","bytes32ToString(bytes32)":"9201de55","getReservesData(address)":"ec489c21","getReservesList(address)":"586c1442","getUserReservesData(address,address)":"51974cc0","marketReferenceCurrencyPriceInUsdProxyAggregator()":"d22cf68a","networkBaseTokenPriceInUsdProxyAggregator()":"3c1740ed"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IEACAggregatorProxy\",\"name\":\"_networkBaseTokenPriceInUsdProxyAggregator\",\"type\":\"address\"},{\"internalType\":\"contract IEACAggregatorProxy\",\"name\":\"_marketReferenceCurrencyPriceInUsdProxyAggregator\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ETH_CURRENCY_UNIT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MKR_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_bytes32\",\"type\":\"bytes32\"}],\"name\":\"bytes32ToString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"getReservesData\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseLTVasCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveLiquidationThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveLiquidationBonus\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"usageAsCollateralEnabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"borrowingEnabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"stableBorrowRateEnabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isFrozen\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"liquidityIndex\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"variableBorrowIndex\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"liquidityRate\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"variableBorrowRate\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"stableBorrowRate\",\"type\":\"uint128\"},{\"internalType\":\"uint40\",\"name\":\"lastUpdateTimestamp\",\"type\":\"uint40\"},{\"internalType\":\"address\",\"name\":\"aTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"availableLiquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalPrincipalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"averageStableRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableDebtLastUpdateTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalScaledVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"priceInMarketReferenceCurrency\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"priceOracle\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"variableRateSlope1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableRateSlope2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateSlope1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateSlope2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseStableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseVariableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"optimalUsageRatio\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isSiloedBorrowing\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"accruedToTreasury\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"unbacked\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"isolationModeTotalDebt\",\"type\":\"uint128\"},{\"internalType\":\"bool\",\"name\":\"flashLoanEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"debtCeiling\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"debtCeilingDecimals\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"eModeCategoryId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"borrowCap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyCap\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"eModeLtv\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"eModeLiquidationThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"eModeLiquidationBonus\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"eModePriceSource\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"eModeLabel\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"borrowableInIsolation\",\"type\":\"bool\"}],\"internalType\":\"struct IUiPoolDataProviderV3.AggregatedReserveData[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"marketReferenceCurrencyUnit\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"marketReferenceCurrencyPriceInUsd\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"networkBaseTokenPriceInUsd\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"networkBaseTokenPriceDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiPoolDataProviderV3.BaseCurrencyInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"getReservesList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserReservesData\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"scaledATokenBalance\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"usageAsCollateralEnabledOnUser\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"stableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"scaledVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"principalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableBorrowLastUpdateTimestamp\",\"type\":\"uint256\"}],\"internalType\":\"struct IUiPoolDataProviderV3.UserReserveData[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"marketReferenceCurrencyPriceInUsdProxyAggregator\",\"outputs\":[{\"internalType\":\"contract IEACAggregatorProxy\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"networkBaseTokenPriceInUsdProxyAggregator\",\"outputs\":[{\"internalType\":\"contract IEACAggregatorProxy\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/misc/UiPoolDataProviderV3.sol\":\"UiPoolDataProviderV3\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveOracle.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPriceOracleGetter} from './IPriceOracleGetter.sol';\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IAaveOracle\\n * @author Aave\\n * @notice Defines the basic interface for the Aave Oracle\\n */\\ninterface IAaveOracle is IPriceOracleGetter {\\n  /**\\n   * @dev Emitted after the base currency is set\\n   * @param baseCurrency The base currency of used for price quotes\\n   * @param baseCurrencyUnit The unit of the base currency\\n   */\\n  event BaseCurrencySet(address indexed baseCurrency, uint256 baseCurrencyUnit);\\n\\n  /**\\n   * @dev Emitted after the price source of an asset is updated\\n   * @param asset The address of the asset\\n   * @param source The price source of the asset\\n   */\\n  event AssetSourceUpdated(address indexed asset, address indexed source);\\n\\n  /**\\n   * @dev Emitted after the address of fallback oracle is updated\\n   * @param fallbackOracle The address of the fallback oracle\\n   */\\n  event FallbackOracleUpdated(address indexed fallbackOracle);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Sets or replaces price sources of assets\\n   * @param assets The addresses of the assets\\n   * @param sources The addresses of the price sources\\n   */\\n  function setAssetSources(address[] calldata assets, address[] calldata sources) external;\\n\\n  /**\\n   * @notice Sets the fallback oracle\\n   * @param fallbackOracle The address of the fallback oracle\\n   */\\n  function setFallbackOracle(address fallbackOracle) external;\\n\\n  /**\\n   * @notice Returns a list of prices from a list of assets addresses\\n   * @param assets The list of assets addresses\\n   * @return The prices of the given assets\\n   */\\n  function getAssetsPrices(address[] calldata assets) external view returns (uint256[] memory);\\n\\n  /**\\n   * @notice Returns the address of the source for an asset address\\n   * @param asset The address of the asset\\n   * @return The address of the source\\n   */\\n  function getSourceOfAsset(address asset) external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the fallback oracle\\n   * @return The address of the fallback oracle\\n   */\\n  function getFallbackOracle() external view returns (address);\\n}\\n\",\"keccak256\":\"0x15942c0df4ce9f50a9cf172c9ed0efa0abbf841cd8560fbd0da3d6a7dea69a96\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IDefaultInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IReserveInterestRateStrategy} from './IReserveInterestRateStrategy.sol';\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IDefaultInterestRateStrategy\\n * @author Aave\\n * @notice Defines the basic interface of the DefaultReserveInterestRateStrategy\\n */\\ninterface IDefaultInterestRateStrategy is IReserveInterestRateStrategy {\\n  /**\\n   * @notice Returns the usage ratio at which the pool aims to obtain most competitive borrow rates.\\n   * @return The optimal usage ratio, expressed in ray.\\n   */\\n  function OPTIMAL_USAGE_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the optimal stable to total debt ratio of the reserve.\\n   * @return The optimal stable to total debt ratio, expressed in ray.\\n   */\\n  function OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the excess usage ratio above the optimal.\\n   * @dev It's always equal to 1-optimal usage ratio (added as constant for gas optimizations)\\n   * @return The max excess usage ratio, expressed in ray.\\n   */\\n  function MAX_EXCESS_USAGE_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the excess stable debt ratio above the optimal.\\n   * @dev It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations)\\n   * @return The max excess stable to total debt ratio, expressed in ray.\\n   */\\n  function MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the PoolAddressesProvider\\n   * @return The address of the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the variable rate slope below optimal usage ratio\\n   * @dev It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\\n   * @return The variable rate slope, expressed in ray\\n   */\\n  function getVariableRateSlope1() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the variable rate slope above optimal usage ratio\\n   * @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\\n   * @return The variable rate slope, expressed in ray\\n   */\\n  function getVariableRateSlope2() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate slope below optimal usage ratio\\n   * @dev It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO\\n   * @return The stable rate slope, expressed in ray\\n   */\\n  function getStableRateSlope1() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate slope above optimal usage ratio\\n   * @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO\\n   * @return The stable rate slope, expressed in ray\\n   */\\n  function getStableRateSlope2() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate excess offset\\n   * @dev It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\\n   * @return The stable rate excess offset, expressed in ray\\n   */\\n  function getStableRateExcessOffset() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the base stable borrow rate\\n   * @return The base stable borrow rate, expressed in ray\\n   */\\n  function getBaseStableBorrowRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the base variable borrow rate\\n   * @return The base variable borrow rate, expressed in ray\\n   */\\n  function getBaseVariableBorrowRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the maximum variable borrow rate\\n   * @return The maximum variable borrow rate, expressed in ray\\n   */\\n  function getMaxVariableBorrowRate() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xb7351f5dc779d86fc6d4aafb2fe48622b2dae3a00724923b8cd92b5c676ca893\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableDebtToken\\n * @author Aave\\n * @notice Interface for the initialize function common between debt tokens\\n */\\ninterface IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when a debt token is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param debtTokenDecimals The decimals of the debt token\\n   * @param debtTokenName The name of the debt token\\n   * @param debtTokenSymbol The symbol of the debt token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address incentivesController,\\n    uint8 debtTokenDecimals,\\n    string debtTokenName,\\n    string debtTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the debt token.\\n   * @param pool The pool contract that is initializing this contract\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param debtTokenDecimals The decimals of the debtToken, same as the underlying asset's\\n   * @param debtTokenName The name of the token\\n   * @param debtTokenSymbol The symbol of the token\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 debtTokenDecimals,\\n    string memory debtTokenName,\\n    string memory debtTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0x53476b4161009b310cc8ef32d54f7e6b6508a1902f4dda4ac1b3f50ec4b0dc8a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolDataProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\n\\n/**\\n * @title IPoolDataProvider\\n * @author Aave\\n * @notice Defines the basic interface of a PoolDataProvider\\n */\\ninterface IPoolDataProvider {\\n  struct TokenData {\\n    string symbol;\\n    address tokenAddress;\\n  }\\n\\n  /**\\n   * @notice Returns the address for the PoolAddressesProvider contract.\\n   * @return The address for the PoolAddressesProvider contract\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Returns the list of the existing reserves in the pool.\\n   * @dev Handling MKR and ETH in a different way since they do not have standard `symbol` functions.\\n   * @return The list of reserves, pairs of symbols and addresses\\n   */\\n  function getAllReservesTokens() external view returns (TokenData[] memory);\\n\\n  /**\\n   * @notice Returns the list of the existing ATokens in the pool.\\n   * @return The list of ATokens, pairs of symbols and addresses\\n   */\\n  function getAllATokens() external view returns (TokenData[] memory);\\n\\n  /**\\n   * @notice Returns the configuration data of the reserve\\n   * @dev Not returning borrow and supply caps for compatibility, nor pause flag\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return decimals The number of decimals of the reserve\\n   * @return ltv The ltv of the reserve\\n   * @return liquidationThreshold The liquidationThreshold of the reserve\\n   * @return liquidationBonus The liquidationBonus of the reserve\\n   * @return reserveFactor The reserveFactor of the reserve\\n   * @return usageAsCollateralEnabled True if the usage as collateral is enabled, false otherwise\\n   * @return borrowingEnabled True if borrowing is enabled, false otherwise\\n   * @return stableBorrowRateEnabled True if stable rate borrowing is enabled, false otherwise\\n   * @return isActive True if it is active, false otherwise\\n   * @return isFrozen True if it is frozen, false otherwise\\n   */\\n  function getReserveConfigurationData(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 decimals,\\n      uint256 ltv,\\n      uint256 liquidationThreshold,\\n      uint256 liquidationBonus,\\n      uint256 reserveFactor,\\n      bool usageAsCollateralEnabled,\\n      bool borrowingEnabled,\\n      bool stableBorrowRateEnabled,\\n      bool isActive,\\n      bool isFrozen\\n    );\\n\\n  /**\\n   * @notice Returns the efficiency mode category of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The eMode id of the reserve\\n   */\\n  function getReserveEModeCategory(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the caps parameters of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return borrowCap The borrow cap of the reserve\\n   * @return supplyCap The supply cap of the reserve\\n   */\\n  function getReserveCaps(\\n    address asset\\n  ) external view returns (uint256 borrowCap, uint256 supplyCap);\\n\\n  /**\\n   * @notice Returns if the pool is paused\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return isPaused True if the pool is paused, false otherwise\\n   */\\n  function getPaused(address asset) external view returns (bool isPaused);\\n\\n  /**\\n   * @notice Returns the siloed borrowing flag\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return True if the asset is siloed for borrowing\\n   */\\n  function getSiloedBorrowing(address asset) external view returns (bool);\\n\\n  /**\\n   * @notice Returns the protocol fee on the liquidation bonus\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The protocol fee on liquidation\\n   */\\n  function getLiquidationProtocolFee(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the unbacked mint cap of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The unbacked mint cap of the reserve\\n   */\\n  function getUnbackedMintCap(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the debt ceiling of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getDebtCeiling(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the debt ceiling decimals\\n   * @return The debt ceiling decimals\\n   */\\n  function getDebtCeilingDecimals() external pure returns (uint256);\\n\\n  /**\\n   * @notice Returns the reserve data\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return unbacked The amount of unbacked tokens\\n   * @return accruedToTreasuryScaled The scaled amount of tokens accrued to treasury that is to be minted\\n   * @return totalAToken The total supply of the aToken\\n   * @return totalStableDebt The total stable debt of the reserve\\n   * @return totalVariableDebt The total variable debt of the reserve\\n   * @return liquidityRate The liquidity rate of the reserve\\n   * @return variableBorrowRate The variable borrow rate of the reserve\\n   * @return stableBorrowRate The stable borrow rate of the reserve\\n   * @return averageStableBorrowRate The average stable borrow rate of the reserve\\n   * @return liquidityIndex The liquidity index of the reserve\\n   * @return variableBorrowIndex The variable borrow index of the reserve\\n   * @return lastUpdateTimestamp The timestamp of the last update of the reserve\\n   */\\n  function getReserveData(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 unbacked,\\n      uint256 accruedToTreasuryScaled,\\n      uint256 totalAToken,\\n      uint256 totalStableDebt,\\n      uint256 totalVariableDebt,\\n      uint256 liquidityRate,\\n      uint256 variableBorrowRate,\\n      uint256 stableBorrowRate,\\n      uint256 averageStableBorrowRate,\\n      uint256 liquidityIndex,\\n      uint256 variableBorrowIndex,\\n      uint40 lastUpdateTimestamp\\n    );\\n\\n  /**\\n   * @notice Returns the total supply of aTokens for a given asset\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The total supply of the aToken\\n   */\\n  function getATokenTotalSupply(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total debt for a given asset\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The total debt for asset\\n   */\\n  function getTotalDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the user data in a reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param user The address of the user\\n   * @return currentATokenBalance The current AToken balance of the user\\n   * @return currentStableDebt The current stable debt of the user\\n   * @return currentVariableDebt The current variable debt of the user\\n   * @return principalStableDebt The principal stable debt of the user\\n   * @return scaledVariableDebt The scaled variable debt of the user\\n   * @return stableBorrowRate The stable borrow rate of the user\\n   * @return liquidityRate The liquidity rate of the reserve\\n   * @return stableRateLastUpdated The timestamp of the last update of the user stable rate\\n   * @return usageAsCollateralEnabled True if the user is using the asset as collateral, false\\n   *         otherwise\\n   */\\n  function getUserReserveData(\\n    address asset,\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 currentATokenBalance,\\n      uint256 currentStableDebt,\\n      uint256 currentVariableDebt,\\n      uint256 principalStableDebt,\\n      uint256 scaledVariableDebt,\\n      uint256 stableBorrowRate,\\n      uint256 liquidityRate,\\n      uint40 stableRateLastUpdated,\\n      bool usageAsCollateralEnabled\\n    );\\n\\n  /**\\n   * @notice Returns the token addresses of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return aTokenAddress The AToken address of the reserve\\n   * @return stableDebtTokenAddress The StableDebtToken address of the reserve\\n   * @return variableDebtTokenAddress The VariableDebtToken address of the reserve\\n   */\\n  function getReserveTokensAddresses(\\n    address asset\\n  )\\n    external\\n    view\\n    returns (\\n      address aTokenAddress,\\n      address stableDebtTokenAddress,\\n      address variableDebtTokenAddress\\n    );\\n\\n  /**\\n   * @notice Returns the address of the Interest Rate strategy\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return irStrategyAddress The address of the Interest Rate strategy\\n   */\\n  function getInterestRateStrategyAddress(\\n    address asset\\n  ) external view returns (address irStrategyAddress);\\n\\n  /**\\n   * @notice Returns whether the reserve has FlashLoans enabled or disabled\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return True if FlashLoans are enabled, false otherwise\\n   */\\n  function getFlashLoanEnabled(address asset) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xeb42959448d545d6ee49985e4212f54d01fe3c653f6f65cfc4061983df39bf1e\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPriceOracleGetter.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPriceOracleGetter\\n * @author Aave\\n * @notice Interface for the Aave price oracle.\\n */\\ninterface IPriceOracleGetter {\\n  /**\\n   * @notice Returns the base currency address\\n   * @dev Address 0x0 is reserved for USD as base currency.\\n   * @return Returns the base currency address.\\n   */\\n  function BASE_CURRENCY() external view returns (address);\\n\\n  /**\\n   * @notice Returns the base currency unit\\n   * @dev 1 ether for ETH, 1e8 for USD.\\n   * @return Returns the base currency unit.\\n   */\\n  function BASE_CURRENCY_UNIT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the asset price in the base currency\\n   * @param asset The address of the asset\\n   * @return The price of the asset\\n   */\\n  function getAssetPrice(address asset) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xfe72e94869ca91465a7f57282b8d367b2c9ba798fdc13ac8546304db8d971df6\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IReserveInterestRateStrategy\\n * @author Aave\\n * @notice Interface for the calculation of the interest rates\\n */\\ninterface IReserveInterestRateStrategy {\\n  /**\\n   * @notice Calculates the interest rates depending on the reserve's state and configurations\\n   * @param params The parameters needed to calculate interest rates\\n   * @return liquidityRate The liquidity rate expressed in rays\\n   * @return stableBorrowRate The stable borrow rate expressed in rays\\n   * @return variableBorrowRate The variable borrow rate expressed in rays\\n   */\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) external view returns (uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0x9028d29b6fda6f89b887a627ce5e03a401c4ccac98bfe14afcaf69ff09312202\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IStableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IStableDebtToken\\n * @author Aave\\n * @notice Defines the interface for the stable debt token\\n * @dev It does not inherit from IERC20 to save in code size\\n */\\ninterface IStableDebtToken is IInitializableDebtToken {\\n  /**\\n   * @dev Emitted when new stable debt is minted\\n   * @param user The address of the user who triggered the minting\\n   * @param onBehalfOf The recipient of stable debt tokens\\n   * @param amount The amount minted (user entered amount + balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf'\\n   * @param newRate The rate of the debt after the minting\\n   * @param avgStableRate The next average stable rate after the minting\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Mint(\\n    address indexed user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 newRate,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @dev Emitted when new stable debt is burned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount being burned (user entered amount - balance increase from interest)\\n   * @param currentBalance The balance of the user based on the previous balance and balance increase from interest\\n   * @param balanceIncrease The increase in balance since the last action of 'from'\\n   * @param avgStableRate The next average stable rate after the burning\\n   * @param newTotalSupply The next total supply of the stable debt token after the action\\n   */\\n  event Burn(\\n    address indexed from,\\n    uint256 amount,\\n    uint256 currentBalance,\\n    uint256 balanceIncrease,\\n    uint256 avgStableRate,\\n    uint256 newTotalSupply\\n  );\\n\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address.\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt tokens to mint\\n   * @param rate The rate of the debt being minted\\n   * @return True if it is the first borrow, false otherwise\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 rate\\n  ) external returns (bool, uint256, uint256);\\n\\n  /**\\n   * @notice Burns debt of `user`\\n   * @dev The resulting rate is the weighted average between the rate of the new debt\\n   * and the rate of the previous debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest the user earned\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount of debt tokens getting burned\\n   * @return The total stable debt\\n   * @return The average stable borrow rate\\n   */\\n  function burn(address from, uint256 amount) external returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the average rate of all the stable rate loans.\\n   * @return The average stable rate\\n   */\\n  function getAverageStableRate() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the stable rate of the user debt\\n   * @param user The address of the user\\n   * @return The stable rate of the user\\n   */\\n  function getUserStableRate(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the user\\n   * @param user The address of the user\\n   * @return The timestamp\\n   */\\n  function getUserLastUpdated(address user) external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the principal, the total supply, the average stable rate and the timestamp for the last update\\n   * @return The principal\\n   * @return The total supply\\n   * @return The average stable rate\\n   * @return The timestamp of the last update\\n   */\\n  function getSupplyData() external view returns (uint256, uint256, uint256, uint40);\\n\\n  /**\\n   * @notice Returns the timestamp of the last update of the total supply\\n   * @return The timestamp\\n   */\\n  function getTotalSupplyLastUpdated() external view returns (uint40);\\n\\n  /**\\n   * @notice Returns the total supply and the average stable rate\\n   * @return The total supply\\n   * @return The average rate\\n   */\\n  function getTotalSupplyAndAvgRate() external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the principal debt balance of the user\\n   * @return The debt balance of the user since the last burn/mint action\\n   */\\n  function principalBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd5c6f4de75af3cc40bab7e23c3eb12b9f318e06b29fade243ba466b531fa9be4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableDebtToken} from './IInitializableDebtToken.sol';\\n\\n/**\\n * @title IVariableDebtToken\\n * @author Aave\\n * @notice Defines the basic interface for a variable debt token.\\n */\\ninterface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {\\n  /**\\n   * @notice Mints debt token to the `onBehalfOf` address\\n   * @param user The address receiving the borrowed underlying, being the delegatee in case\\n   * of credit delegate, or same as `onBehalfOf` otherwise\\n   * @param onBehalfOf The address receiving the debt tokens\\n   * @param amount The amount of debt being minted\\n   * @param index The variable debt index of the reserve\\n   * @return True if the previous balance of the user is 0, false otherwise\\n   * @return The scaled total debt of the reserve\\n   */\\n  function mint(\\n    address user,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool, uint256);\\n\\n  /**\\n   * @notice Burns user variable debt\\n   * @dev In some instances, a burn transaction will emit a mint event\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the debt will be burned\\n   * @param amount The amount getting burned\\n   * @param index The variable debt index of the reserve\\n   * @return The scaled total debt of the reserve\\n   */\\n  function burn(address from, uint256 amount, uint256 index) external returns (uint256);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n}\\n\",\"keccak256\":\"0x420f5a72cbaf3dc5c4390c26001e47ccde7d59dd1b04d4d9ebd27d52002d9b5f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/misc/AaveProtocolDataProvider.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20Detailed} from '../dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {ReserveConfiguration} from '../protocol/libraries/configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '../protocol/libraries/configuration/UserConfiguration.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\nimport {WadRayMath} from '../protocol/libraries/math/WadRayMath.sol';\\nimport {IPoolAddressesProvider} from '../interfaces/IPoolAddressesProvider.sol';\\nimport {IStableDebtToken} from '../interfaces/IStableDebtToken.sol';\\nimport {IVariableDebtToken} from '../interfaces/IVariableDebtToken.sol';\\nimport {IPool} from '../interfaces/IPool.sol';\\nimport {IPoolDataProvider} from '../interfaces/IPoolDataProvider.sol';\\n\\n/**\\n * @title AaveProtocolDataProvider\\n * @author Aave\\n * @notice Peripheral contract to collect and pre-process information from the Pool.\\n */\\ncontract AaveProtocolDataProvider is IPoolDataProvider {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using WadRayMath for uint256;\\n\\n  address constant MKR = 0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2;\\n  address constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;\\n\\n  /// @inheritdoc IPoolDataProvider\\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\\n\\n  /**\\n   * @notice Constructor\\n   * @param addressesProvider The address of the PoolAddressesProvider contract\\n   */\\n  constructor(IPoolAddressesProvider addressesProvider) {\\n    ADDRESSES_PROVIDER = addressesProvider;\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getAllReservesTokens() external view override returns (TokenData[] memory) {\\n    IPool pool = IPool(ADDRESSES_PROVIDER.getPool());\\n    address[] memory reserves = pool.getReservesList();\\n    TokenData[] memory reservesTokens = new TokenData[](reserves.length);\\n    for (uint256 i = 0; i < reserves.length; i++) {\\n      if (reserves[i] == MKR) {\\n        reservesTokens[i] = TokenData({symbol: 'MKR', tokenAddress: reserves[i]});\\n        continue;\\n      }\\n      if (reserves[i] == ETH) {\\n        reservesTokens[i] = TokenData({symbol: 'ETH', tokenAddress: reserves[i]});\\n        continue;\\n      }\\n      reservesTokens[i] = TokenData({\\n        symbol: IERC20Detailed(reserves[i]).symbol(),\\n        tokenAddress: reserves[i]\\n      });\\n    }\\n    return reservesTokens;\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getAllATokens() external view override returns (TokenData[] memory) {\\n    IPool pool = IPool(ADDRESSES_PROVIDER.getPool());\\n    address[] memory reserves = pool.getReservesList();\\n    TokenData[] memory aTokens = new TokenData[](reserves.length);\\n    for (uint256 i = 0; i < reserves.length; i++) {\\n      DataTypes.ReserveData memory reserveData = pool.getReserveData(reserves[i]);\\n      aTokens[i] = TokenData({\\n        symbol: IERC20Detailed(reserveData.aTokenAddress).symbol(),\\n        tokenAddress: reserveData.aTokenAddress\\n      });\\n    }\\n    return aTokens;\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getReserveConfigurationData(\\n    address asset\\n  )\\n    external\\n    view\\n    override\\n    returns (\\n      uint256 decimals,\\n      uint256 ltv,\\n      uint256 liquidationThreshold,\\n      uint256 liquidationBonus,\\n      uint256 reserveFactor,\\n      bool usageAsCollateralEnabled,\\n      bool borrowingEnabled,\\n      bool stableBorrowRateEnabled,\\n      bool isActive,\\n      bool isFrozen\\n    )\\n  {\\n    DataTypes.ReserveConfigurationMap memory configuration = IPool(ADDRESSES_PROVIDER.getPool())\\n      .getConfiguration(asset);\\n\\n    (ltv, liquidationThreshold, liquidationBonus, decimals, reserveFactor, ) = configuration\\n      .getParams();\\n\\n    (isActive, isFrozen, borrowingEnabled, stableBorrowRateEnabled, ) = configuration.getFlags();\\n\\n    usageAsCollateralEnabled = liquidationThreshold != 0;\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getReserveEModeCategory(address asset) external view override returns (uint256) {\\n    DataTypes.ReserveConfigurationMap memory configuration = IPool(ADDRESSES_PROVIDER.getPool())\\n      .getConfiguration(asset);\\n    return configuration.getEModeCategory();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getReserveCaps(\\n    address asset\\n  ) external view override returns (uint256 borrowCap, uint256 supplyCap) {\\n    (borrowCap, supplyCap) = IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getCaps();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getPaused(address asset) external view override returns (bool isPaused) {\\n    (, , , , isPaused) = IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getFlags();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getSiloedBorrowing(address asset) external view override returns (bool) {\\n    return IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getSiloedBorrowing();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getLiquidationProtocolFee(address asset) external view override returns (uint256) {\\n    return IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getLiquidationProtocolFee();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getUnbackedMintCap(address asset) external view override returns (uint256) {\\n    return IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getUnbackedMintCap();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getDebtCeiling(address asset) external view override returns (uint256) {\\n    return IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getDebtCeiling();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getDebtCeilingDecimals() external pure override returns (uint256) {\\n    return ReserveConfiguration.DEBT_CEILING_DECIMALS;\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getReserveData(\\n    address asset\\n  )\\n    external\\n    view\\n    override\\n    returns (\\n      uint256 unbacked,\\n      uint256 accruedToTreasuryScaled,\\n      uint256 totalAToken,\\n      uint256 totalStableDebt,\\n      uint256 totalVariableDebt,\\n      uint256 liquidityRate,\\n      uint256 variableBorrowRate,\\n      uint256 stableBorrowRate,\\n      uint256 averageStableBorrowRate,\\n      uint256 liquidityIndex,\\n      uint256 variableBorrowIndex,\\n      uint40 lastUpdateTimestamp\\n    )\\n  {\\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\\n      asset\\n    );\\n\\n    return (\\n      reserve.unbacked,\\n      reserve.accruedToTreasury,\\n      IERC20Detailed(reserve.aTokenAddress).totalSupply(),\\n      IERC20Detailed(reserve.stableDebtTokenAddress).totalSupply(),\\n      IERC20Detailed(reserve.variableDebtTokenAddress).totalSupply(),\\n      reserve.currentLiquidityRate,\\n      reserve.currentVariableBorrowRate,\\n      reserve.currentStableBorrowRate,\\n      IStableDebtToken(reserve.stableDebtTokenAddress).getAverageStableRate(),\\n      reserve.liquidityIndex,\\n      reserve.variableBorrowIndex,\\n      reserve.lastUpdateTimestamp\\n    );\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getATokenTotalSupply(address asset) external view override returns (uint256) {\\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\\n      asset\\n    );\\n    return IERC20Detailed(reserve.aTokenAddress).totalSupply();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getTotalDebt(address asset) external view override returns (uint256) {\\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\\n      asset\\n    );\\n    return\\n      IERC20Detailed(reserve.stableDebtTokenAddress).totalSupply() +\\n      IERC20Detailed(reserve.variableDebtTokenAddress).totalSupply();\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getUserReserveData(\\n    address asset,\\n    address user\\n  )\\n    external\\n    view\\n    override\\n    returns (\\n      uint256 currentATokenBalance,\\n      uint256 currentStableDebt,\\n      uint256 currentVariableDebt,\\n      uint256 principalStableDebt,\\n      uint256 scaledVariableDebt,\\n      uint256 stableBorrowRate,\\n      uint256 liquidityRate,\\n      uint40 stableRateLastUpdated,\\n      bool usageAsCollateralEnabled\\n    )\\n  {\\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\\n      asset\\n    );\\n\\n    DataTypes.UserConfigurationMap memory userConfig = IPool(ADDRESSES_PROVIDER.getPool())\\n      .getUserConfiguration(user);\\n\\n    currentATokenBalance = IERC20Detailed(reserve.aTokenAddress).balanceOf(user);\\n    currentVariableDebt = IERC20Detailed(reserve.variableDebtTokenAddress).balanceOf(user);\\n    currentStableDebt = IERC20Detailed(reserve.stableDebtTokenAddress).balanceOf(user);\\n    principalStableDebt = IStableDebtToken(reserve.stableDebtTokenAddress).principalBalanceOf(user);\\n    scaledVariableDebt = IVariableDebtToken(reserve.variableDebtTokenAddress).scaledBalanceOf(user);\\n    liquidityRate = reserve.currentLiquidityRate;\\n    stableBorrowRate = IStableDebtToken(reserve.stableDebtTokenAddress).getUserStableRate(user);\\n    stableRateLastUpdated = IStableDebtToken(reserve.stableDebtTokenAddress).getUserLastUpdated(\\n      user\\n    );\\n    usageAsCollateralEnabled = userConfig.isUsingAsCollateral(reserve.id);\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getReserveTokensAddresses(\\n    address asset\\n  )\\n    external\\n    view\\n    override\\n    returns (\\n      address aTokenAddress,\\n      address stableDebtTokenAddress,\\n      address variableDebtTokenAddress\\n    )\\n  {\\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\\n      asset\\n    );\\n\\n    return (\\n      reserve.aTokenAddress,\\n      reserve.stableDebtTokenAddress,\\n      reserve.variableDebtTokenAddress\\n    );\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getInterestRateStrategyAddress(\\n    address asset\\n  ) external view override returns (address irStrategyAddress) {\\n    DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData(\\n      asset\\n    );\\n\\n    return (reserve.interestRateStrategyAddress);\\n  }\\n\\n  /// @inheritdoc IPoolDataProvider\\n  function getFlashLoanEnabled(address asset) external view override returns (bool) {\\n    DataTypes.ReserveConfigurationMap memory configuration = IPool(ADDRESSES_PROVIDER.getPool())\\n      .getConfiguration(asset);\\n\\n    return configuration.getFlashLoanEnabled();\\n  }\\n}\\n\",\"keccak256\":\"0x477ecaa5fb7c2f2aa938b00c9302ba1c448243af2073a9b9922a32de01e7c5fe\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/PercentageMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title PercentageMath library\\n * @author Aave\\n * @notice Provides functions to perform percentage calculations\\n * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary PercentageMath {\\n  // Maximum percentage factor (100.00%)\\n  uint256 internal constant PERCENTAGE_FACTOR = 1e4;\\n\\n  // Half percentage factor (50.00%)\\n  uint256 internal constant HALF_PERCENTAGE_FACTOR = 0.5e4;\\n\\n  /**\\n   * @notice Executes a percentage multiplication\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentmul percentage\\n   */\\n  function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage\\n    assembly {\\n      if iszero(\\n        or(\\n          iszero(percentage),\\n          iszero(gt(value, div(sub(not(0), HALF_PERCENTAGE_FACTOR), percentage)))\\n        )\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, percentage), HALF_PERCENTAGE_FACTOR), PERCENTAGE_FACTOR)\\n    }\\n  }\\n\\n  /**\\n   * @notice Executes a percentage division\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param value The value of which the percentage needs to be calculated\\n   * @param percentage The percentage of the value to be calculated\\n   * @return result value percentdiv percentage\\n   */\\n  function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) {\\n    // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR\\n    assembly {\\n      if or(\\n        iszero(percentage),\\n        iszero(iszero(gt(value, div(sub(not(0), div(percentage, 2)), PERCENTAGE_FACTOR))))\\n      ) {\\n        revert(0, 0)\\n      }\\n\\n      result := div(add(mul(value, PERCENTAGE_FACTOR), div(percentage, 2)), percentage)\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x6a7dcf18e1af47b69c8dd58093b0134e3689bf719ba63eae485d8f9dfc10cac7\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title WadRayMath library\\n * @author Aave\\n * @notice Provides functions to perform calculations with Wad and Ray units\\n * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers\\n * with 27 digits of precision)\\n * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down.\\n */\\nlibrary WadRayMath {\\n  // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly\\n  uint256 internal constant WAD = 1e18;\\n  uint256 internal constant HALF_WAD = 0.5e18;\\n\\n  uint256 internal constant RAY = 1e27;\\n  uint256 internal constant HALF_RAY = 0.5e27;\\n\\n  uint256 internal constant WAD_RAY_RATIO = 1e9;\\n\\n  /**\\n   * @dev Multiplies two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a*b, in wad\\n   */\\n  function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_WAD), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_WAD), WAD)\\n    }\\n  }\\n\\n  /**\\n   * @dev Divides two wad, rounding half up to the nearest wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @param b Wad\\n   * @return c = a/b, in wad\\n   */\\n  function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / WAD\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), WAD))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, WAD), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @notice Multiplies two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raymul b\\n   */\\n  function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b\\n    assembly {\\n      if iszero(or(iszero(b), iszero(gt(a, div(sub(not(0), HALF_RAY), b))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, b), HALF_RAY), RAY)\\n    }\\n  }\\n\\n  /**\\n   * @notice Divides two ray, rounding half up to the nearest ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @param b Ray\\n   * @return c = a raydiv b\\n   */\\n  function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n    // to avoid overflow, a <= (type(uint256).max - halfB) / RAY\\n    assembly {\\n      if or(iszero(b), iszero(iszero(gt(a, div(sub(not(0), div(b, 2)), RAY))))) {\\n        revert(0, 0)\\n      }\\n\\n      c := div(add(mul(a, RAY), div(b, 2)), b)\\n    }\\n  }\\n\\n  /**\\n   * @dev Casts ray down to wad\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Ray\\n   * @return b = a converted to wad, rounded half up to the nearest wad\\n   */\\n  function rayToWad(uint256 a) internal pure returns (uint256 b) {\\n    assembly {\\n      b := div(a, WAD_RAY_RATIO)\\n      let remainder := mod(a, WAD_RAY_RATIO)\\n      if iszero(lt(remainder, div(WAD_RAY_RATIO, 2))) {\\n        b := add(b, 1)\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Converts wad up to ray\\n   * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328\\n   * @param a Wad\\n   * @return b = a converted in ray\\n   */\\n  function wadToRay(uint256 a) internal pure returns (uint256 b) {\\n    // to avoid overflow, b/WAD_RAY_RATIO == a\\n    assembly {\\n      b := mul(a, WAD_RAY_RATIO)\\n\\n      if iszero(eq(div(b, WAD_RAY_RATIO), a)) {\\n        revert(0, 0)\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x618fe1876e322a10269e4a96e61e516bbbec883cb79e20b508f8010027178f07\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {WadRayMath} from '../libraries/math/WadRayMath.sol';\\nimport {PercentageMath} from '../libraries/math/PercentageMath.sol';\\nimport {DataTypes} from '../libraries/types/DataTypes.sol';\\nimport {Errors} from '../libraries/helpers/Errors.sol';\\nimport {IDefaultInterestRateStrategy} from '../../interfaces/IDefaultInterestRateStrategy.sol';\\nimport {IReserveInterestRateStrategy} from '../../interfaces/IReserveInterestRateStrategy.sol';\\nimport {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol';\\n\\n/**\\n * @title DefaultReserveInterestRateStrategy contract\\n * @author Aave\\n * @notice Implements the calculation of the interest rates depending on the reserve state\\n * @dev The model of interest rate is based on 2 slopes, one before the `OPTIMAL_USAGE_RATIO`\\n * point of usage and another from that one to 100%.\\n * - An instance of this same contract, can't be used across different Aave markets, due to the caching\\n *   of the PoolAddressesProvider\\n */\\ncontract DefaultReserveInterestRateStrategy is IDefaultInterestRateStrategy {\\n  using WadRayMath for uint256;\\n  using PercentageMath for uint256;\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  uint256 public immutable OPTIMAL_USAGE_RATIO;\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  uint256 public immutable OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO;\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  uint256 public immutable MAX_EXCESS_USAGE_RATIO;\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  uint256 public immutable MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO;\\n\\n  IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;\\n\\n  // Base variable borrow rate when usage rate = 0. Expressed in ray\\n  uint256 internal immutable _baseVariableBorrowRate;\\n\\n  // Slope of the variable interest curve when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO. Expressed in ray\\n  uint256 internal immutable _variableRateSlope1;\\n\\n  // Slope of the variable interest curve when usage ratio > OPTIMAL_USAGE_RATIO. Expressed in ray\\n  uint256 internal immutable _variableRateSlope2;\\n\\n  // Slope of the stable interest curve when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO. Expressed in ray\\n  uint256 internal immutable _stableRateSlope1;\\n\\n  // Slope of the stable interest curve when usage ratio > OPTIMAL_USAGE_RATIO. Expressed in ray\\n  uint256 internal immutable _stableRateSlope2;\\n\\n  // Premium on top of `_variableRateSlope1` for base stable borrowing rate\\n  uint256 internal immutable _baseStableRateOffset;\\n\\n  // Additional premium applied to stable rate when stable debt surpass `OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO`\\n  uint256 internal immutable _stableRateExcessOffset;\\n\\n  /**\\n   * @dev Constructor.\\n   * @param provider The address of the PoolAddressesProvider contract\\n   * @param optimalUsageRatio The optimal usage ratio\\n   * @param baseVariableBorrowRate The base variable borrow rate\\n   * @param variableRateSlope1 The variable rate slope below optimal usage ratio\\n   * @param variableRateSlope2 The variable rate slope above optimal usage ratio\\n   * @param stableRateSlope1 The stable rate slope below optimal usage ratio\\n   * @param stableRateSlope2 The stable rate slope above optimal usage ratio\\n   * @param baseStableRateOffset The premium on top of variable rate for base stable borrowing rate\\n   * @param stableRateExcessOffset The premium on top of stable rate when there stable debt surpass the threshold\\n   * @param optimalStableToTotalDebtRatio The optimal stable debt to total debt ratio of the reserve\\n   */\\n  constructor(\\n    IPoolAddressesProvider provider,\\n    uint256 optimalUsageRatio,\\n    uint256 baseVariableBorrowRate,\\n    uint256 variableRateSlope1,\\n    uint256 variableRateSlope2,\\n    uint256 stableRateSlope1,\\n    uint256 stableRateSlope2,\\n    uint256 baseStableRateOffset,\\n    uint256 stableRateExcessOffset,\\n    uint256 optimalStableToTotalDebtRatio\\n  ) {\\n    require(WadRayMath.RAY >= optimalUsageRatio, Errors.INVALID_OPTIMAL_USAGE_RATIO);\\n    require(\\n      WadRayMath.RAY >= optimalStableToTotalDebtRatio,\\n      Errors.INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO\\n    );\\n    OPTIMAL_USAGE_RATIO = optimalUsageRatio;\\n    MAX_EXCESS_USAGE_RATIO = WadRayMath.RAY - optimalUsageRatio;\\n    OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = optimalStableToTotalDebtRatio;\\n    MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO = WadRayMath.RAY - optimalStableToTotalDebtRatio;\\n    ADDRESSES_PROVIDER = provider;\\n    _baseVariableBorrowRate = baseVariableBorrowRate;\\n    _variableRateSlope1 = variableRateSlope1;\\n    _variableRateSlope2 = variableRateSlope2;\\n    _stableRateSlope1 = stableRateSlope1;\\n    _stableRateSlope2 = stableRateSlope2;\\n    _baseStableRateOffset = baseStableRateOffset;\\n    _stableRateExcessOffset = stableRateExcessOffset;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getVariableRateSlope1() external view returns (uint256) {\\n    return _variableRateSlope1;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getVariableRateSlope2() external view returns (uint256) {\\n    return _variableRateSlope2;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getStableRateSlope1() external view returns (uint256) {\\n    return _stableRateSlope1;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getStableRateSlope2() external view returns (uint256) {\\n    return _stableRateSlope2;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getStableRateExcessOffset() external view returns (uint256) {\\n    return _stableRateExcessOffset;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getBaseStableBorrowRate() public view returns (uint256) {\\n    return _variableRateSlope1 + _baseStableRateOffset;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getBaseVariableBorrowRate() external view override returns (uint256) {\\n    return _baseVariableBorrowRate;\\n  }\\n\\n  /// @inheritdoc IDefaultInterestRateStrategy\\n  function getMaxVariableBorrowRate() external view override returns (uint256) {\\n    return _baseVariableBorrowRate + _variableRateSlope1 + _variableRateSlope2;\\n  }\\n\\n  struct CalcInterestRatesLocalVars {\\n    uint256 availableLiquidity;\\n    uint256 totalDebt;\\n    uint256 currentVariableBorrowRate;\\n    uint256 currentStableBorrowRate;\\n    uint256 currentLiquidityRate;\\n    uint256 borrowUsageRatio;\\n    uint256 supplyUsageRatio;\\n    uint256 stableToTotalDebtRatio;\\n    uint256 availableLiquidityPlusDebt;\\n  }\\n\\n  /// @inheritdoc IReserveInterestRateStrategy\\n  function calculateInterestRates(\\n    DataTypes.CalculateInterestRatesParams memory params\\n  ) public view override returns (uint256, uint256, uint256) {\\n    CalcInterestRatesLocalVars memory vars;\\n\\n    vars.totalDebt = params.totalStableDebt + params.totalVariableDebt;\\n\\n    vars.currentLiquidityRate = 0;\\n    vars.currentVariableBorrowRate = _baseVariableBorrowRate;\\n    vars.currentStableBorrowRate = getBaseStableBorrowRate();\\n\\n    if (vars.totalDebt != 0) {\\n      vars.stableToTotalDebtRatio = params.totalStableDebt.rayDiv(vars.totalDebt);\\n      vars.availableLiquidity =\\n        IERC20(params.reserve).balanceOf(params.aToken) +\\n        params.liquidityAdded -\\n        params.liquidityTaken;\\n\\n      vars.availableLiquidityPlusDebt = vars.availableLiquidity + vars.totalDebt;\\n      vars.borrowUsageRatio = vars.totalDebt.rayDiv(vars.availableLiquidityPlusDebt);\\n      vars.supplyUsageRatio = vars.totalDebt.rayDiv(\\n        vars.availableLiquidityPlusDebt + params.unbacked\\n      );\\n    }\\n\\n    if (vars.borrowUsageRatio > OPTIMAL_USAGE_RATIO) {\\n      uint256 excessBorrowUsageRatio = (vars.borrowUsageRatio - OPTIMAL_USAGE_RATIO).rayDiv(\\n        MAX_EXCESS_USAGE_RATIO\\n      );\\n\\n      vars.currentStableBorrowRate +=\\n        _stableRateSlope1 +\\n        _stableRateSlope2.rayMul(excessBorrowUsageRatio);\\n\\n      vars.currentVariableBorrowRate +=\\n        _variableRateSlope1 +\\n        _variableRateSlope2.rayMul(excessBorrowUsageRatio);\\n    } else {\\n      vars.currentStableBorrowRate += _stableRateSlope1.rayMul(vars.borrowUsageRatio).rayDiv(\\n        OPTIMAL_USAGE_RATIO\\n      );\\n\\n      vars.currentVariableBorrowRate += _variableRateSlope1.rayMul(vars.borrowUsageRatio).rayDiv(\\n        OPTIMAL_USAGE_RATIO\\n      );\\n    }\\n\\n    if (vars.stableToTotalDebtRatio > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO) {\\n      uint256 excessStableDebtRatio = (vars.stableToTotalDebtRatio -\\n        OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO).rayDiv(MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO);\\n      vars.currentStableBorrowRate += _stableRateExcessOffset.rayMul(excessStableDebtRatio);\\n    }\\n\\n    vars.currentLiquidityRate = _getOverallBorrowRate(\\n      params.totalStableDebt,\\n      params.totalVariableDebt,\\n      vars.currentVariableBorrowRate,\\n      params.averageStableBorrowRate\\n    ).rayMul(vars.supplyUsageRatio).percentMul(\\n        PercentageMath.PERCENTAGE_FACTOR - params.reserveFactor\\n      );\\n\\n    return (\\n      vars.currentLiquidityRate,\\n      vars.currentStableBorrowRate,\\n      vars.currentVariableBorrowRate\\n    );\\n  }\\n\\n  /**\\n   * @dev Calculates the overall borrow rate as the weighted average between the total variable debt and total stable\\n   * debt\\n   * @param totalStableDebt The total borrowed from the reserve at a stable rate\\n   * @param totalVariableDebt The total borrowed from the reserve at a variable rate\\n   * @param currentVariableBorrowRate The current variable borrow rate of the reserve\\n   * @param currentAverageStableBorrowRate The current weighted average of all the stable rate loans\\n   * @return The weighted averaged borrow rate\\n   */\\n  function _getOverallBorrowRate(\\n    uint256 totalStableDebt,\\n    uint256 totalVariableDebt,\\n    uint256 currentVariableBorrowRate,\\n    uint256 currentAverageStableBorrowRate\\n  ) internal pure returns (uint256) {\\n    uint256 totalDebt = totalStableDebt + totalVariableDebt;\\n\\n    if (totalDebt == 0) return 0;\\n\\n    uint256 weightedVariableRate = totalVariableDebt.wadToRay().rayMul(currentVariableBorrowRate);\\n\\n    uint256 weightedStableRate = totalStableDebt.wadToRay().rayMul(currentAverageStableBorrowRate);\\n\\n    uint256 overallBorrowRate = (weightedVariableRate + weightedStableRate).rayDiv(\\n      totalDebt.wadToRay()\\n    );\\n\\n    return overallBorrowRate;\\n  }\\n}\\n\",\"keccak256\":\"0x01d746c72a9ace142997f4f66226b3a0005fbdc7b0e828915b837e156c4f520a\",\"license\":\"BUSL-1.1\"},\"contracts/misc/UiPoolDataProviderV3.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '@aave/core-v3/contracts/interfaces/IPool.sol';\\nimport {IAaveOracle} from '@aave/core-v3/contracts/interfaces/IAaveOracle.sol';\\nimport {IAToken} from '@aave/core-v3/contracts/interfaces/IAToken.sol';\\nimport {IVariableDebtToken} from '@aave/core-v3/contracts/interfaces/IVariableDebtToken.sol';\\nimport {IStableDebtToken} from '@aave/core-v3/contracts/interfaces/IStableDebtToken.sol';\\nimport {DefaultReserveInterestRateStrategy} from '@aave/core-v3/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol';\\nimport {AaveProtocolDataProvider} from '@aave/core-v3/contracts/misc/AaveProtocolDataProvider.sol';\\nimport {WadRayMath} from '@aave/core-v3/contracts/protocol/libraries/math/WadRayMath.sol';\\nimport {ReserveConfiguration} from '@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol';\\nimport {DataTypes} from '@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol';\\nimport {IEACAggregatorProxy} from './interfaces/IEACAggregatorProxy.sol';\\nimport {IERC20DetailedBytes} from './interfaces/IERC20DetailedBytes.sol';\\nimport {IUiPoolDataProviderV3} from './interfaces/IUiPoolDataProviderV3.sol';\\n\\ncontract UiPoolDataProviderV3 is IUiPoolDataProviderV3 {\\n  using WadRayMath for uint256;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n\\n  IEACAggregatorProxy public immutable networkBaseTokenPriceInUsdProxyAggregator;\\n  IEACAggregatorProxy public immutable marketReferenceCurrencyPriceInUsdProxyAggregator;\\n  uint256 public constant ETH_CURRENCY_UNIT = 1 ether;\\n  address public constant MKR_ADDRESS = 0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2;\\n\\n  constructor(\\n    IEACAggregatorProxy _networkBaseTokenPriceInUsdProxyAggregator,\\n    IEACAggregatorProxy _marketReferenceCurrencyPriceInUsdProxyAggregator\\n  ) {\\n    networkBaseTokenPriceInUsdProxyAggregator = _networkBaseTokenPriceInUsdProxyAggregator;\\n    marketReferenceCurrencyPriceInUsdProxyAggregator = _marketReferenceCurrencyPriceInUsdProxyAggregator;\\n  }\\n\\n  function getReservesList(\\n    IPoolAddressesProvider provider\\n  ) public view override returns (address[] memory) {\\n    IPool pool = IPool(provider.getPool());\\n    return pool.getReservesList();\\n  }\\n\\n  function getReservesData(\\n    IPoolAddressesProvider provider\\n  ) public view override returns (AggregatedReserveData[] memory, BaseCurrencyInfo memory) {\\n    IAaveOracle oracle = IAaveOracle(provider.getPriceOracle());\\n    IPool pool = IPool(provider.getPool());\\n    AaveProtocolDataProvider poolDataProvider = AaveProtocolDataProvider(\\n      provider.getPoolDataProvider()\\n    );\\n\\n    address[] memory reserves = pool.getReservesList();\\n    AggregatedReserveData[] memory reservesData = new AggregatedReserveData[](reserves.length);\\n\\n    for (uint256 i = 0; i < reserves.length; i++) {\\n      AggregatedReserveData memory reserveData = reservesData[i];\\n      reserveData.underlyingAsset = reserves[i];\\n\\n      // reserve current state\\n      DataTypes.ReserveData memory baseData = pool.getReserveData(reserveData.underlyingAsset);\\n      //the liquidity index. Expressed in ray\\n      reserveData.liquidityIndex = baseData.liquidityIndex;\\n      //variable borrow index. Expressed in ray\\n      reserveData.variableBorrowIndex = baseData.variableBorrowIndex;\\n      //the current supply rate. Expressed in ray\\n      reserveData.liquidityRate = baseData.currentLiquidityRate;\\n      //the current variable borrow rate. Expressed in ray\\n      reserveData.variableBorrowRate = baseData.currentVariableBorrowRate;\\n      //the current stable borrow rate. Expressed in ray\\n      reserveData.stableBorrowRate = baseData.currentStableBorrowRate;\\n      reserveData.lastUpdateTimestamp = baseData.lastUpdateTimestamp;\\n      reserveData.aTokenAddress = baseData.aTokenAddress;\\n      reserveData.stableDebtTokenAddress = baseData.stableDebtTokenAddress;\\n      reserveData.variableDebtTokenAddress = baseData.variableDebtTokenAddress;\\n      //address of the interest rate strategy\\n      reserveData.interestRateStrategyAddress = baseData.interestRateStrategyAddress;\\n      reserveData.priceInMarketReferenceCurrency = oracle.getAssetPrice(\\n        reserveData.underlyingAsset\\n      );\\n      reserveData.priceOracle = oracle.getSourceOfAsset(reserveData.underlyingAsset);\\n      reserveData.availableLiquidity = IERC20Detailed(reserveData.underlyingAsset).balanceOf(\\n        reserveData.aTokenAddress\\n      );\\n      (\\n        reserveData.totalPrincipalStableDebt,\\n        ,\\n        reserveData.averageStableRate,\\n        reserveData.stableDebtLastUpdateTimestamp\\n      ) = IStableDebtToken(reserveData.stableDebtTokenAddress).getSupplyData();\\n      reserveData.totalScaledVariableDebt = IVariableDebtToken(reserveData.variableDebtTokenAddress)\\n        .scaledTotalSupply();\\n\\n      // Due we take the symbol from underlying token we need a special case for $MKR as symbol() returns bytes32\\n      if (address(reserveData.underlyingAsset) == address(MKR_ADDRESS)) {\\n        bytes32 symbol = IERC20DetailedBytes(reserveData.underlyingAsset).symbol();\\n        bytes32 name = IERC20DetailedBytes(reserveData.underlyingAsset).name();\\n        reserveData.symbol = bytes32ToString(symbol);\\n        reserveData.name = bytes32ToString(name);\\n      } else {\\n        reserveData.symbol = IERC20Detailed(reserveData.underlyingAsset).symbol();\\n        reserveData.name = IERC20Detailed(reserveData.underlyingAsset).name();\\n      }\\n\\n      //stores the reserve configuration\\n      DataTypes.ReserveConfigurationMap memory reserveConfigurationMap = baseData.configuration;\\n      uint256 eModeCategoryId;\\n      (\\n        reserveData.baseLTVasCollateral,\\n        reserveData.reserveLiquidationThreshold,\\n        reserveData.reserveLiquidationBonus,\\n        reserveData.decimals,\\n        reserveData.reserveFactor,\\n        eModeCategoryId\\n      ) = reserveConfigurationMap.getParams();\\n      reserveData.usageAsCollateralEnabled = reserveData.baseLTVasCollateral != 0;\\n\\n      (\\n        reserveData.isActive,\\n        reserveData.isFrozen,\\n        reserveData.borrowingEnabled,\\n        reserveData.stableBorrowRateEnabled,\\n        reserveData.isPaused\\n      ) = reserveConfigurationMap.getFlags();\\n\\n      // interest rates\\n      try\\n        DefaultReserveInterestRateStrategy(reserveData.interestRateStrategyAddress)\\n          .getVariableRateSlope1()\\n      returns (uint256 res) {\\n        reserveData.variableRateSlope1 = res;\\n      } catch {}\\n      try\\n        DefaultReserveInterestRateStrategy(reserveData.interestRateStrategyAddress)\\n          .getVariableRateSlope2()\\n      returns (uint256 res) {\\n        reserveData.variableRateSlope2 = res;\\n      } catch {}\\n      try\\n        DefaultReserveInterestRateStrategy(reserveData.interestRateStrategyAddress)\\n          .getStableRateSlope1()\\n      returns (uint256 res) {\\n        reserveData.stableRateSlope1 = res;\\n      } catch {}\\n      try\\n        DefaultReserveInterestRateStrategy(reserveData.interestRateStrategyAddress)\\n          .getStableRateSlope2()\\n      returns (uint256 res) {\\n        reserveData.stableRateSlope2 = res;\\n      } catch {}\\n      try\\n        DefaultReserveInterestRateStrategy(reserveData.interestRateStrategyAddress)\\n          .getBaseStableBorrowRate()\\n      returns (uint256 res) {\\n        reserveData.baseStableBorrowRate = res;\\n      } catch {}\\n      try\\n        DefaultReserveInterestRateStrategy(reserveData.interestRateStrategyAddress)\\n          .getBaseVariableBorrowRate()\\n      returns (uint256 res) {\\n        reserveData.baseVariableBorrowRate = res;\\n      } catch {}\\n      try\\n        DefaultReserveInterestRateStrategy(reserveData.interestRateStrategyAddress)\\n          .OPTIMAL_USAGE_RATIO()\\n      returns (uint256 res) {\\n        reserveData.optimalUsageRatio = res;\\n      } catch {}\\n\\n      // v3 only\\n      reserveData.eModeCategoryId = uint8(eModeCategoryId);\\n      reserveData.debtCeiling = reserveConfigurationMap.getDebtCeiling();\\n      reserveData.debtCeilingDecimals = poolDataProvider.getDebtCeilingDecimals();\\n      (reserveData.borrowCap, reserveData.supplyCap) = reserveConfigurationMap.getCaps();\\n\\n      try poolDataProvider.getFlashLoanEnabled(reserveData.underlyingAsset) returns (\\n        bool flashLoanEnabled\\n      ) {\\n        reserveData.flashLoanEnabled = flashLoanEnabled;\\n      } catch (bytes memory) {\\n        reserveData.flashLoanEnabled = true;\\n      }\\n\\n      reserveData.isSiloedBorrowing = reserveConfigurationMap.getSiloedBorrowing();\\n      reserveData.unbacked = baseData.unbacked;\\n      reserveData.isolationModeTotalDebt = baseData.isolationModeTotalDebt;\\n      reserveData.accruedToTreasury = baseData.accruedToTreasury;\\n\\n      DataTypes.EModeCategory memory categoryData = pool.getEModeCategoryData(\\n        reserveData.eModeCategoryId\\n      );\\n      reserveData.eModeLtv = categoryData.ltv;\\n      reserveData.eModeLiquidationThreshold = categoryData.liquidationThreshold;\\n      reserveData.eModeLiquidationBonus = categoryData.liquidationBonus;\\n      // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n      reserveData.eModePriceSource = categoryData.priceSource;\\n      reserveData.eModeLabel = categoryData.label;\\n\\n      reserveData.borrowableInIsolation = reserveConfigurationMap.getBorrowableInIsolation();\\n    }\\n\\n    BaseCurrencyInfo memory baseCurrencyInfo;\\n    baseCurrencyInfo.networkBaseTokenPriceInUsd = networkBaseTokenPriceInUsdProxyAggregator\\n      .latestAnswer();\\n    baseCurrencyInfo.networkBaseTokenPriceDecimals = networkBaseTokenPriceInUsdProxyAggregator\\n      .decimals();\\n\\n    try oracle.BASE_CURRENCY_UNIT() returns (uint256 baseCurrencyUnit) {\\n      baseCurrencyInfo.marketReferenceCurrencyUnit = baseCurrencyUnit;\\n      baseCurrencyInfo.marketReferenceCurrencyPriceInUsd = int256(baseCurrencyUnit);\\n    } catch (bytes memory /*lowLevelData*/) {\\n      baseCurrencyInfo.marketReferenceCurrencyUnit = ETH_CURRENCY_UNIT;\\n      baseCurrencyInfo\\n        .marketReferenceCurrencyPriceInUsd = marketReferenceCurrencyPriceInUsdProxyAggregator\\n        .latestAnswer();\\n    }\\n\\n    return (reservesData, baseCurrencyInfo);\\n  }\\n\\n  function getUserReservesData(\\n    IPoolAddressesProvider provider,\\n    address user\\n  ) external view override returns (UserReserveData[] memory, uint8) {\\n    IPool pool = IPool(provider.getPool());\\n    address[] memory reserves = pool.getReservesList();\\n    DataTypes.UserConfigurationMap memory userConfig = pool.getUserConfiguration(user);\\n\\n    uint8 userEmodeCategoryId = uint8(pool.getUserEMode(user));\\n\\n    UserReserveData[] memory userReservesData = new UserReserveData[](\\n      user != address(0) ? reserves.length : 0\\n    );\\n\\n    for (uint256 i = 0; i < reserves.length; i++) {\\n      DataTypes.ReserveData memory baseData = pool.getReserveData(reserves[i]);\\n\\n      // user reserve data\\n      userReservesData[i].underlyingAsset = reserves[i];\\n      userReservesData[i].scaledATokenBalance = IAToken(baseData.aTokenAddress).scaledBalanceOf(\\n        user\\n      );\\n      userReservesData[i].usageAsCollateralEnabledOnUser = userConfig.isUsingAsCollateral(i);\\n\\n      if (userConfig.isBorrowing(i)) {\\n        userReservesData[i].scaledVariableDebt = IVariableDebtToken(\\n          baseData.variableDebtTokenAddress\\n        ).scaledBalanceOf(user);\\n        userReservesData[i].principalStableDebt = IStableDebtToken(baseData.stableDebtTokenAddress)\\n          .principalBalanceOf(user);\\n        if (userReservesData[i].principalStableDebt != 0) {\\n          userReservesData[i].stableBorrowRate = IStableDebtToken(baseData.stableDebtTokenAddress)\\n            .getUserStableRate(user);\\n          userReservesData[i].stableBorrowLastUpdateTimestamp = IStableDebtToken(\\n            baseData.stableDebtTokenAddress\\n          ).getUserLastUpdated(user);\\n        }\\n      }\\n    }\\n\\n    return (userReservesData, userEmodeCategoryId);\\n  }\\n\\n  function bytes32ToString(bytes32 _bytes32) public pure returns (string memory) {\\n    uint8 i = 0;\\n    while (i < 32 && _bytes32[i] != 0) {\\n      i++;\\n    }\\n    bytes memory bytesArray = new bytes(i);\\n    for (i = 0; i < 32 && _bytes32[i] != 0; i++) {\\n      bytesArray[i] = _bytes32[i];\\n    }\\n    return string(bytesArray);\\n  }\\n}\\n\",\"keccak256\":\"0x7fa5a30ab91623aa54929a2d46e02f9121445129cd926f6a9d7261a8383341a9\",\"license\":\"AGPL-3.0\"},\"contracts/misc/interfaces/IEACAggregatorProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IEACAggregatorProxy {\\n  function decimals() external view returns (uint8);\\n\\n  function latestAnswer() external view returns (int256);\\n\\n  function latestTimestamp() external view returns (uint256);\\n\\n  function latestRound() external view returns (uint256);\\n\\n  function getAnswer(uint256 roundId) external view returns (int256);\\n\\n  function getTimestamp(uint256 roundId) external view returns (uint256);\\n\\n  event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 timestamp);\\n  event NewRound(uint256 indexed roundId, address indexed startedBy);\\n}\\n\",\"keccak256\":\"0x75bb34641419925730f87eeb122521b34cfd953b800212c362770ed1c7c5d719\",\"license\":\"AGPL-3.0\"},\"contracts/misc/interfaces/IERC20DetailedBytes.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\n\\ninterface IERC20DetailedBytes is IERC20 {\\n  function name() external view returns (bytes32);\\n\\n  function symbol() external view returns (bytes32);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0xd23c5d1179580a40e28e651fe6f48df5da857b0b5cbe5b14f5dfa50ca2db2d50\",\"license\":\"AGPL-3.0\"},\"contracts/misc/interfaces/IUiPoolDataProviderV3.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\\n\\ninterface IUiPoolDataProviderV3 {\\n  struct InterestRates {\\n    uint256 variableRateSlope1;\\n    uint256 variableRateSlope2;\\n    uint256 stableRateSlope1;\\n    uint256 stableRateSlope2;\\n    uint256 baseStableBorrowRate;\\n    uint256 baseVariableBorrowRate;\\n    uint256 optimalUsageRatio;\\n  }\\n\\n  struct AggregatedReserveData {\\n    address underlyingAsset;\\n    string name;\\n    string symbol;\\n    uint256 decimals;\\n    uint256 baseLTVasCollateral;\\n    uint256 reserveLiquidationThreshold;\\n    uint256 reserveLiquidationBonus;\\n    uint256 reserveFactor;\\n    bool usageAsCollateralEnabled;\\n    bool borrowingEnabled;\\n    bool stableBorrowRateEnabled;\\n    bool isActive;\\n    bool isFrozen;\\n    // base data\\n    uint128 liquidityIndex;\\n    uint128 variableBorrowIndex;\\n    uint128 liquidityRate;\\n    uint128 variableBorrowRate;\\n    uint128 stableBorrowRate;\\n    uint40 lastUpdateTimestamp;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    address interestRateStrategyAddress;\\n    //\\n    uint256 availableLiquidity;\\n    uint256 totalPrincipalStableDebt;\\n    uint256 averageStableRate;\\n    uint256 stableDebtLastUpdateTimestamp;\\n    uint256 totalScaledVariableDebt;\\n    uint256 priceInMarketReferenceCurrency;\\n    address priceOracle;\\n    uint256 variableRateSlope1;\\n    uint256 variableRateSlope2;\\n    uint256 stableRateSlope1;\\n    uint256 stableRateSlope2;\\n    uint256 baseStableBorrowRate;\\n    uint256 baseVariableBorrowRate;\\n    uint256 optimalUsageRatio;\\n    // v3 only\\n    bool isPaused;\\n    bool isSiloedBorrowing;\\n    uint128 accruedToTreasury;\\n    uint128 unbacked;\\n    uint128 isolationModeTotalDebt;\\n    bool flashLoanEnabled;\\n    //\\n    uint256 debtCeiling;\\n    uint256 debtCeilingDecimals;\\n    uint8 eModeCategoryId;\\n    uint256 borrowCap;\\n    uint256 supplyCap;\\n    // eMode\\n    uint16 eModeLtv;\\n    uint16 eModeLiquidationThreshold;\\n    uint16 eModeLiquidationBonus;\\n    address eModePriceSource;\\n    string eModeLabel;\\n    bool borrowableInIsolation;\\n  }\\n\\n  struct UserReserveData {\\n    address underlyingAsset;\\n    uint256 scaledATokenBalance;\\n    bool usageAsCollateralEnabledOnUser;\\n    uint256 stableBorrowRate;\\n    uint256 scaledVariableDebt;\\n    uint256 principalStableDebt;\\n    uint256 stableBorrowLastUpdateTimestamp;\\n  }\\n\\n  struct BaseCurrencyInfo {\\n    uint256 marketReferenceCurrencyUnit;\\n    int256 marketReferenceCurrencyPriceInUsd;\\n    int256 networkBaseTokenPriceInUsd;\\n    uint8 networkBaseTokenPriceDecimals;\\n  }\\n\\n  function getReservesList(\\n    IPoolAddressesProvider provider\\n  ) external view returns (address[] memory);\\n\\n  function getReservesData(\\n    IPoolAddressesProvider provider\\n  ) external view returns (AggregatedReserveData[] memory, BaseCurrencyInfo memory);\\n\\n  function getUserReservesData(\\n    IPoolAddressesProvider provider,\\n    address user\\n  ) external view returns (UserReserveData[] memory, uint8);\\n}\\n\",\"keccak256\":\"0xd032122c140eb82712209b3bbe61caaf1732984d5e43e4febdd60fdde33091b9\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/misc/WalletBalanceProvider.sol":{"WalletBalanceProvider":{"abi":[{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"token","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"batchBalanceOf","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"provider","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getUserWalletBalances","outputs":[{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"author":"Aave, influenced by https://github.com/wbobeirne/eth-balance-checker/blob/master/contracts/BalanceChecker.sol","details":"NOTE: THIS CONTRACT IS NOT USED WITHIN THE AAVE PROTOCOL. It's an accessory contract used to reduce the number of calls towards the blockchain from the Aave backend.*","kind":"dev","methods":{"balanceOf(address,address)":{"details":"Check the token balance of a wallet in a token contract Returns the balance of the token for user. Avoids possible errors: - return 0 on non-contract address*"},"batchBalanceOf(address[],address[])":{"params":{"tokens":"The list of tokens","users":"The list of users"},"returns":{"_0":"And array with the concatenation of, for each user, his/her balances*"}},"getUserWalletBalances(address,address)":{"details":"provides balances of user wallet for all reserves available on the pool"}},"title":"WalletBalanceProvider contract","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50610cdc806100206000396000f3fe6080604052600436106100385760003560e01c806302405343146100b1578063b59b28ef146100e8578063f7888aec1461011557600080fd5b366100ac57333b6100aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f323200000000000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b005b600080fd5b3480156100bd57600080fd5b506100d16100cc366004610849565b610143565b6040516100df9291906108bd565b60405180910390f35b3480156100f457600080fd5b5061010861010336600461096f565b61059d565b6040516100df91906109db565b34801561012157600080fd5b50610135610130366004610849565b6106b6565b6040519081526020016100df565b60608060008473ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610193573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b791906109f5565b905060008173ffffffffffffffffffffffffffffffffffffffff1663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610206573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261024c9190810190610a90565b905060008151600161025e9190610b71565b67ffffffffffffffff81111561027657610276610a12565b60405190808252806020026020018201604052801561029f578160200160208202803683370190505b50905060005b8251811015610311578281815181106102c0576102c0610b89565b60200260200101518282815181106102da576102da610b89565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101528061030981610bb8565b9150506102a5565b5073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8183518151811061033a5761033a610b89565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000815167ffffffffffffffff81111561039057610390610a12565b6040519080825280602002602001820160405280156103b9578160200160208202803683370190505b50905060005b83518110156105515760008573ffffffffffffffffffffffffffffffffffffffff1663c44b11f78584815181106103f8576103f8610b89565b60200260200101516040518263ffffffff1660e01b8152600401610438919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015610455573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104799190610bf1565b905060006104c98251670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b505050509050806104fb5760008484815181106104e8576104e8610b89565b602002602001018181525050505061053f565b61051e8a86858151811061051157610511610b89565b60200260200101516106b6565b84848151811061053057610530610b89565b60200260200101818152505050505b8061054981610bb8565b9150506103bf565b506105708773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6106b6565b8184518151811061058357610583610b89565b6020908102919091010152909450925050505b9250929050565b606060006105ab8386610c33565b67ffffffffffffffff8111156105c3576105c3610a12565b6040519080825280602002602001820160405280156105ec578160200160208202803683370190505b50905060005b858110156106ac5760005b848110156106995761065688888481811061061a5761061a610b89565b905060200201602081019061062f9190610c70565b87878481811061064157610641610b89565b90506020020160208101906101309190610c70565b83826106628886610c33565b61066c9190610b71565b8151811061067c5761067c610b89565b60209081029190910101528061069181610bb8565b9150506105fd565b50806106a481610bb8565b9150506105f2565b5095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610708575073ffffffffffffffffffffffffffffffffffffffff82163161081e565b73ffffffffffffffffffffffffffffffffffffffff82163b156107bc576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528316906370a0823190602401602060405180830381865afa158015610791573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b59190610c8d565b905061081e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f494e56414c49445f544f4b454e0000000000000000000000000000000000000060448201526064016100a1565b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461084657600080fd5b50565b6000806040838503121561085c57600080fd5b823561086781610824565b9150602083013561087781610824565b809150509250929050565b600081518084526020808501945080840160005b838110156108b257815187529582019590820190600101610896565b509495945050505050565b604080825283519082018190526000906020906060840190828701845b8281101561090c57815173ffffffffffffffffffffffffffffffffffffffff16845292840192908401906001016108da565b505050838103828501526109208186610882565b9695505050505050565b60008083601f84011261093c57600080fd5b50813567ffffffffffffffff81111561095457600080fd5b6020830191508360208260051b850101111561059657600080fd5b6000806000806040858703121561098557600080fd5b843567ffffffffffffffff8082111561099d57600080fd5b6109a98883890161092a565b909650945060208701359150808211156109c257600080fd5b506109cf8782880161092a565b95989497509550505050565b6020815260006109ee6020830184610882565b9392505050565b600060208284031215610a0757600080fd5b81516109ee81610824565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610a8857610a88610a12565b604052919050565b60006020808385031215610aa357600080fd5b825167ffffffffffffffff80821115610abb57600080fd5b818501915085601f830112610acf57600080fd5b815181811115610ae157610ae1610a12565b8060051b9150610af2848301610a41565b8181529183018401918481019088841115610b0c57600080fd5b938501935b83851015610b365784519250610b2683610824565b8282529385019390850190610b11565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610b8457610b84610b42565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610bea57610bea610b42565b5060010190565b600060208284031215610c0357600080fd5b6040516020810181811067ffffffffffffffff82111715610c2657610c26610a12565b6040529151825250919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610c6b57610c6b610b42565b500290565b600060208284031215610c8257600080fd5b81356109ee81610824565b600060208284031215610c9f57600080fd5b505191905056fea2646970667358221220adce7307dbfaaac498c3db3ffa9e09e9aeb064e0dac8ecf2a4e2520964b127d764736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xCDC DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x38 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2405343 EQ PUSH2 0xB1 JUMPI DUP1 PUSH4 0xB59B28EF EQ PUSH2 0xE8 JUMPI DUP1 PUSH4 0xF7888AEC EQ PUSH2 0x115 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0xAC JUMPI CALLER EXTCODESIZE PUSH2 0xAA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x3232000000000000000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD1 PUSH2 0xCC CALLDATASIZE PUSH1 0x4 PUSH2 0x849 JUMP JUMPDEST PUSH2 0x143 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xDF SWAP3 SWAP2 SWAP1 PUSH2 0x8BD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x108 PUSH2 0x103 CALLDATASIZE PUSH1 0x4 PUSH2 0x96F JUMP JUMPDEST PUSH2 0x59D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xDF SWAP2 SWAP1 PUSH2 0x9DB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x121 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x130 CALLDATASIZE PUSH1 0x4 PUSH2 0x849 JUMP JUMPDEST PUSH2 0x6B6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xDF JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x193 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B7 SWAP2 SWAP1 PUSH2 0x9F5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD1946DBC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x206 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 0x24C SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0xA90 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH1 0x1 PUSH2 0x25E SWAP2 SWAP1 PUSH2 0xB71 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x276 JUMPI PUSH2 0x276 PUSH2 0xA12 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x29F JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x311 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x2C0 JUMPI PUSH2 0x2C0 PUSH2 0xB89 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2DA JUMPI PUSH2 0x2DA PUSH2 0xB89 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE DUP1 PUSH2 0x309 DUP2 PUSH2 0xBB8 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2A5 JUMP JUMPDEST POP PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE DUP2 DUP4 MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x33A JUMPI PUSH2 0x33A PUSH2 0xB89 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x390 JUMPI PUSH2 0x390 PUSH2 0xA12 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3B9 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x551 JUMPI PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xC44B11F7 DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3F8 JUMPI PUSH2 0x3F8 PUSH2 0xB89 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x438 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x455 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x479 SWAP2 SWAP1 PUSH2 0xBF1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4C9 DUP3 MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST POP POP POP POP SWAP1 POP DUP1 PUSH2 0x4FB JUMPI PUSH1 0x0 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x4E8 JUMPI PUSH2 0x4E8 PUSH2 0xB89 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP POP POP PUSH2 0x53F JUMP JUMPDEST PUSH2 0x51E DUP11 DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x511 JUMPI PUSH2 0x511 PUSH2 0xB89 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x6B6 JUMP JUMPDEST DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x530 JUMPI PUSH2 0x530 PUSH2 0xB89 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP POP POP JUMPDEST DUP1 PUSH2 0x549 DUP2 PUSH2 0xBB8 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x3BF JUMP JUMPDEST POP PUSH2 0x570 DUP8 PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE PUSH2 0x6B6 JUMP JUMPDEST DUP2 DUP5 MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x583 JUMPI PUSH2 0x583 PUSH2 0xB89 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE SWAP1 SWAP5 POP SWAP3 POP POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x5AB DUP4 DUP7 PUSH2 0xC33 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5C3 JUMPI PUSH2 0x5C3 PUSH2 0xA12 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x5EC JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x6AC JUMPI PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x699 JUMPI PUSH2 0x656 DUP9 DUP9 DUP5 DUP2 DUP2 LT PUSH2 0x61A JUMPI PUSH2 0x61A PUSH2 0xB89 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x62F SWAP2 SWAP1 PUSH2 0xC70 JUMP JUMPDEST DUP8 DUP8 DUP5 DUP2 DUP2 LT PUSH2 0x641 JUMPI PUSH2 0x641 PUSH2 0xB89 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x130 SWAP2 SWAP1 PUSH2 0xC70 JUMP JUMPDEST DUP4 DUP3 PUSH2 0x662 DUP9 DUP7 PUSH2 0xC33 JUMP JUMPDEST PUSH2 0x66C SWAP2 SWAP1 PUSH2 0xB71 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x67C JUMPI PUSH2 0x67C PUSH2 0xB89 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE DUP1 PUSH2 0x691 DUP2 PUSH2 0xBB8 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x5FD JUMP JUMPDEST POP DUP1 PUSH2 0x6A4 DUP2 PUSH2 0xBB8 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x5F2 JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x708 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND BALANCE PUSH2 0x81E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EXTCODESIZE ISZERO PUSH2 0x7BC JUMPI PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x791 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7B5 SWAP2 SWAP1 PUSH2 0xC8D JUMP JUMPDEST SWAP1 POP PUSH2 0x81E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F544F4B454E00000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x846 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x85C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x867 DUP2 PUSH2 0x824 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x877 DUP2 PUSH2 0x824 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x8B2 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x896 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 DUP3 MSTORE DUP4 MLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x60 DUP5 ADD SWAP1 DUP3 DUP8 ADD DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x90C JUMPI DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x8DA JUMP JUMPDEST POP POP POP DUP4 DUP2 SUB DUP3 DUP6 ADD MSTORE PUSH2 0x920 DUP2 DUP7 PUSH2 0x882 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x93C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x954 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x596 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x985 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x99D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9A9 DUP9 DUP4 DUP10 ADD PUSH2 0x92A JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x9C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9CF DUP8 DUP3 DUP9 ADD PUSH2 0x92A JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x9EE PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x882 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA07 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x9EE DUP2 PUSH2 0x824 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xA88 JUMPI PUSH2 0xA88 PUSH2 0xA12 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xAA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xABB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xACF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0xAE1 JUMPI PUSH2 0xAE1 PUSH2 0xA12 JUMP JUMPDEST DUP1 PUSH1 0x5 SHL SWAP2 POP PUSH2 0xAF2 DUP5 DUP4 ADD PUSH2 0xA41 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 DUP4 ADD DUP5 ADD SWAP2 DUP5 DUP2 ADD SWAP1 DUP9 DUP5 GT ISZERO PUSH2 0xB0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP4 DUP6 LT ISZERO PUSH2 0xB36 JUMPI DUP5 MLOAD SWAP3 POP PUSH2 0xB26 DUP4 PUSH2 0x824 JUMP JUMPDEST DUP3 DUP3 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP1 DUP6 ADD SWAP1 PUSH2 0xB11 JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0xB84 JUMPI PUSH2 0xB84 PUSH2 0xB42 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0xBEA JUMPI PUSH2 0xBEA PUSH2 0xB42 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0xC26 JUMPI PUSH2 0xC26 PUSH2 0xA12 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0xC6B JUMPI PUSH2 0xC6B PUSH2 0xB42 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x9EE DUP2 PUSH2 0x824 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAD 0xCE PUSH20 0x7DBFAAAC498C3DB3FFA9E09E9AEB064E0DAC8EC CALLCODE LOG4 0xE2 MSTORE MULMOD PUSH5 0xB127D76473 PUSH16 0x6C634300080A00330000000000000000 ","sourceMap":"1174:2838:156:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_33607":{"entryPoint":null,"id":33607,"parameterSlots":0,"returnSlots":0},"@balanceOf_33642":{"entryPoint":1718,"id":33642,"parameterSlots":2,"returnSlots":1},"@batchBalanceOf_33717":{"entryPoint":1437,"id":33717,"parameterSlots":4,"returnSlots":1},"@getFlags_11757":{"entryPoint":null,"id":11757,"parameterSlots":1,"returnSlots":5},"@getUserWalletBalances_33873":{"entryPoint":323,"id":33873,"parameterSlots":2,"returnSlots":2},"@isContract_445":{"entryPoint":null,"id":445,"parameterSlots":1,"returnSlots":1},"abi_decode_array_address_dyn_calldata":{"entryPoint":2346,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":3184,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":2549,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":2121,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_address_$dyn_calldata_ptr":{"entryPoint":2415,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr_fromMemory":{"entryPoint":2704,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_fromMemory":{"entryPoint":3057,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":3213,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":2178,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":2237,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":2523,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_436b5627177a9781148596ddddd93f72d53dd82575a018216d5aaf2a8219ec9e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d4d1a59767271eefdc7830a772b9732a11d503531d972ab8c981a6b1c0e666e5__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":2625,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":2929,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":3123,"id":null,"parameterSlots":2,"returnSlots":1},"increment_t_uint256":{"entryPoint":3000,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":2882,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":2953,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":2578,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":2084,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:8013:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"188:151:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"205:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"216:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"198:6:201"},"nodeType":"YulFunctionCall","src":"198:21:201"},"nodeType":"YulExpressionStatement","src":"198:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"239:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"250:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"235:3:201"},"nodeType":"YulFunctionCall","src":"235:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"255:1:201","type":"","value":"2"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"228:6:201"},"nodeType":"YulFunctionCall","src":"228:29:201"},"nodeType":"YulExpressionStatement","src":"228:29:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"277:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"288:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"273:3:201"},"nodeType":"YulFunctionCall","src":"273:18:201"},{"hexValue":"3232","kind":"string","nodeType":"YulLiteral","src":"293:4:201","type":"","value":"22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"266:6:201"},"nodeType":"YulFunctionCall","src":"266:32:201"},"nodeType":"YulExpressionStatement","src":"266:32:201"},{"nodeType":"YulAssignment","src":"307:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"319:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"330:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"315:3:201"},"nodeType":"YulFunctionCall","src":"315:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"307:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_d4d1a59767271eefdc7830a772b9732a11d503531d972ab8c981a6b1c0e666e5__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"165:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"179:4:201","type":""}],"src":"14:325:201"},{"body":{"nodeType":"YulBlock","src":"389:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"476:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"485:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"488:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"478:6:201"},"nodeType":"YulFunctionCall","src":"478:12:201"},"nodeType":"YulExpressionStatement","src":"478:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"412:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"423:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"430:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"419:3:201"},"nodeType":"YulFunctionCall","src":"419:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"409:2:201"},"nodeType":"YulFunctionCall","src":"409:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"402:6:201"},"nodeType":"YulFunctionCall","src":"402:73:201"},"nodeType":"YulIf","src":"399:93:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"378:5:201","type":""}],"src":"344:154:201"},{"body":{"nodeType":"YulBlock","src":"590:301:201","statements":[{"body":{"nodeType":"YulBlock","src":"636:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"645:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"648:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"638:6:201"},"nodeType":"YulFunctionCall","src":"638:12:201"},"nodeType":"YulExpressionStatement","src":"638:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"611:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"620:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"607:3:201"},"nodeType":"YulFunctionCall","src":"607:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"632:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"603:3:201"},"nodeType":"YulFunctionCall","src":"603:32:201"},"nodeType":"YulIf","src":"600:52:201"},{"nodeType":"YulVariableDeclaration","src":"661:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"687:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"674:12:201"},"nodeType":"YulFunctionCall","src":"674:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"665:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"731:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"706:24:201"},"nodeType":"YulFunctionCall","src":"706:31:201"},"nodeType":"YulExpressionStatement","src":"706:31:201"},{"nodeType":"YulAssignment","src":"746:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"756:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"746:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"770:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"802:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"813:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"798:3:201"},"nodeType":"YulFunctionCall","src":"798:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"785:12:201"},"nodeType":"YulFunctionCall","src":"785:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"774:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"851:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"826:24:201"},"nodeType":"YulFunctionCall","src":"826:33:201"},"nodeType":"YulExpressionStatement","src":"826:33:201"},{"nodeType":"YulAssignment","src":"868:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"878:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"868:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"548:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"559:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"571:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"579:6:201","type":""}],"src":"503:388:201"},{"body":{"nodeType":"YulBlock","src":"957:374:201","statements":[{"nodeType":"YulVariableDeclaration","src":"967:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"987:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"981:5:201"},"nodeType":"YulFunctionCall","src":"981:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"971:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1009:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"1014:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1002:6:201"},"nodeType":"YulFunctionCall","src":"1002:19:201"},"nodeType":"YulExpressionStatement","src":"1002:19:201"},{"nodeType":"YulVariableDeclaration","src":"1030:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1040:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1034:2:201","type":""}]},{"nodeType":"YulAssignment","src":"1053:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1064:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1069:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1060:3:201"},"nodeType":"YulFunctionCall","src":"1060:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"1053:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"1081:28:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1099:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1106:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1095:3:201"},"nodeType":"YulFunctionCall","src":"1095:14:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"1085:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1118:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1127:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"1122:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1186:120:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1207:3:201"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"1218:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1212:5:201"},"nodeType":"YulFunctionCall","src":"1212:13:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1200:6:201"},"nodeType":"YulFunctionCall","src":"1200:26:201"},"nodeType":"YulExpressionStatement","src":"1200:26:201"},{"nodeType":"YulAssignment","src":"1239:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1250:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1255:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1246:3:201"},"nodeType":"YulFunctionCall","src":"1246:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"1239:3:201"}]},{"nodeType":"YulAssignment","src":"1271:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"1285:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1293:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1281:3:201"},"nodeType":"YulFunctionCall","src":"1281:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"1271:6:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1148:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"1151:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1145:2:201"},"nodeType":"YulFunctionCall","src":"1145:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"1159:18:201","statements":[{"nodeType":"YulAssignment","src":"1161:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1170:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"1173:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1166:3:201"},"nodeType":"YulFunctionCall","src":"1166:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"1161:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"1141:3:201","statements":[]},"src":"1137:169:201"},{"nodeType":"YulAssignment","src":"1315:10:201","value":{"name":"pos","nodeType":"YulIdentifier","src":"1322:3:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"1315:3:201"}]}]},"name":"abi_encode_array_uint256_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"934:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"941:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"949:3:201","type":""}],"src":"896:435:201"},{"body":{"nodeType":"YulBlock","src":"1565:626:201","statements":[{"nodeType":"YulVariableDeclaration","src":"1575:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1593:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1604:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1589:3:201"},"nodeType":"YulFunctionCall","src":"1589:18:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"1579:6:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1623:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1634:2:201","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1616:6:201"},"nodeType":"YulFunctionCall","src":"1616:21:201"},"nodeType":"YulExpressionStatement","src":"1616:21:201"},{"nodeType":"YulVariableDeclaration","src":"1646:17:201","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"1657:6:201"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"1650:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1672:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1692:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1686:5:201"},"nodeType":"YulFunctionCall","src":"1686:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"1676:6:201","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"1715:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"1723:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1708:6:201"},"nodeType":"YulFunctionCall","src":"1708:22:201"},"nodeType":"YulExpressionStatement","src":"1708:22:201"},{"nodeType":"YulAssignment","src":"1739:25:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1750:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1761:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1746:3:201"},"nodeType":"YulFunctionCall","src":"1746:18:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"1739:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"1773:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1783:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1777:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1796:29:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1814:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1822:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1810:3:201"},"nodeType":"YulFunctionCall","src":"1810:15:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"1800:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1834:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1843:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"1838:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1902:169:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"1923:3:201"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"1938:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1932:5:201"},"nodeType":"YulFunctionCall","src":"1932:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"1947:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1928:3:201"},"nodeType":"YulFunctionCall","src":"1928:62:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1916:6:201"},"nodeType":"YulFunctionCall","src":"1916:75:201"},"nodeType":"YulExpressionStatement","src":"1916:75:201"},{"nodeType":"YulAssignment","src":"2004:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2015:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2020:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2011:3:201"},"nodeType":"YulFunctionCall","src":"2011:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"2004:3:201"}]},{"nodeType":"YulAssignment","src":"2036:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2050:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2058:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2046:3:201"},"nodeType":"YulFunctionCall","src":"2046:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"2036:6:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1864:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"1867:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1861:2:201"},"nodeType":"YulFunctionCall","src":"1861:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"1875:18:201","statements":[{"nodeType":"YulAssignment","src":"1877:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"1886:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"1889:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1882:3:201"},"nodeType":"YulFunctionCall","src":"1882:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"1877:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"1857:3:201","statements":[]},"src":"1853:218:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2091:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2102:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2087:3:201"},"nodeType":"YulFunctionCall","src":"2087:18:201"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"2111:3:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2116:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2107:3:201"},"nodeType":"YulFunctionCall","src":"2107:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2080:6:201"},"nodeType":"YulFunctionCall","src":"2080:47:201"},"nodeType":"YulExpressionStatement","src":"2080:47:201"},{"nodeType":"YulAssignment","src":"2136:49:201","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2173:6:201"},{"name":"pos","nodeType":"YulIdentifier","src":"2181:3:201"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"2144:28:201"},"nodeType":"YulFunctionCall","src":"2144:41:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2136:4:201"}]}]},"name":"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1526:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1537:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1545:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1556:4:201","type":""}],"src":"1336:855:201"},{"body":{"nodeType":"YulBlock","src":"2280:283:201","statements":[{"body":{"nodeType":"YulBlock","src":"2329:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2338:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2341:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2331:6:201"},"nodeType":"YulFunctionCall","src":"2331:12:201"},"nodeType":"YulExpressionStatement","src":"2331:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2308:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2316:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2304:3:201"},"nodeType":"YulFunctionCall","src":"2304:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"2323:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2300:3:201"},"nodeType":"YulFunctionCall","src":"2300:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2293:6:201"},"nodeType":"YulFunctionCall","src":"2293:35:201"},"nodeType":"YulIf","src":"2290:55:201"},{"nodeType":"YulAssignment","src":"2354:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2377:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2364:12:201"},"nodeType":"YulFunctionCall","src":"2364:20:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2354:6:201"}]},{"body":{"nodeType":"YulBlock","src":"2427:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2436:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2439:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2429:6:201"},"nodeType":"YulFunctionCall","src":"2429:12:201"},"nodeType":"YulExpressionStatement","src":"2429:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2399:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2407:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2396:2:201"},"nodeType":"YulFunctionCall","src":"2396:30:201"},"nodeType":"YulIf","src":"2393:50:201"},{"nodeType":"YulAssignment","src":"2452:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2468:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2476:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2464:3:201"},"nodeType":"YulFunctionCall","src":"2464:17:201"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"2452:8:201"}]},{"body":{"nodeType":"YulBlock","src":"2541:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2550:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2553:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2543:6:201"},"nodeType":"YulFunctionCall","src":"2543:12:201"},"nodeType":"YulExpressionStatement","src":"2543:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2504:6:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2516:1:201","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"2519:6:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2512:3:201"},"nodeType":"YulFunctionCall","src":"2512:14:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2500:3:201"},"nodeType":"YulFunctionCall","src":"2500:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"2529:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2496:3:201"},"nodeType":"YulFunctionCall","src":"2496:38:201"},{"name":"end","nodeType":"YulIdentifier","src":"2536:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2493:2:201"},"nodeType":"YulFunctionCall","src":"2493:47:201"},"nodeType":"YulIf","src":"2490:67:201"}]},"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2243:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"2251:3:201","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"2259:8:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"2269:6:201","type":""}],"src":"2196:367:201"},{"body":{"nodeType":"YulBlock","src":"2725:616:201","statements":[{"body":{"nodeType":"YulBlock","src":"2771:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2780:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2783:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2773:6:201"},"nodeType":"YulFunctionCall","src":"2773:12:201"},"nodeType":"YulExpressionStatement","src":"2773:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2746:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2755:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2742:3:201"},"nodeType":"YulFunctionCall","src":"2742:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2767:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2738:3:201"},"nodeType":"YulFunctionCall","src":"2738:32:201"},"nodeType":"YulIf","src":"2735:52:201"},{"nodeType":"YulVariableDeclaration","src":"2796:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2823:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2810:12:201"},"nodeType":"YulFunctionCall","src":"2810:23:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2800:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2842:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2852:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2846:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2897:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2906:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2909:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2899:6:201"},"nodeType":"YulFunctionCall","src":"2899:12:201"},"nodeType":"YulExpressionStatement","src":"2899:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2885:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2893:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2882:2:201"},"nodeType":"YulFunctionCall","src":"2882:14:201"},"nodeType":"YulIf","src":"2879:34:201"},{"nodeType":"YulVariableDeclaration","src":"2922:96:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2990:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"3001:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2986:3:201"},"nodeType":"YulFunctionCall","src":"2986:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3010:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"2948:37:201"},"nodeType":"YulFunctionCall","src":"2948:70:201"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"2926:8:201","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"2936:8:201","type":""}]},{"nodeType":"YulAssignment","src":"3027:18:201","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"3037:8:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3027:6:201"}]},{"nodeType":"YulAssignment","src":"3054:18:201","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"3064:8:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3054:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3081:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3114:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3125:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3110:3:201"},"nodeType":"YulFunctionCall","src":"3110:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3097:12:201"},"nodeType":"YulFunctionCall","src":"3097:32:201"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"3085:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3158:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3167:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3170:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3160:6:201"},"nodeType":"YulFunctionCall","src":"3160:12:201"},"nodeType":"YulExpressionStatement","src":"3160:12:201"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"3144:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3154:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3141:2:201"},"nodeType":"YulFunctionCall","src":"3141:16:201"},"nodeType":"YulIf","src":"3138:36:201"},{"nodeType":"YulVariableDeclaration","src":"3183:98:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3251:9:201"},{"name":"offset_1","nodeType":"YulIdentifier","src":"3262:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3247:3:201"},"nodeType":"YulFunctionCall","src":"3247:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3273:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"3209:37:201"},"nodeType":"YulFunctionCall","src":"3209:72:201"},"variables":[{"name":"value2_1","nodeType":"YulTypedName","src":"3187:8:201","type":""},{"name":"value3_1","nodeType":"YulTypedName","src":"3197:8:201","type":""}]},{"nodeType":"YulAssignment","src":"3290:18:201","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"3300:8:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3290:6:201"}]},{"nodeType":"YulAssignment","src":"3317:18:201","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"3327:8:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3317:6:201"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_address_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2667:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2678:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2690:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2698:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2706:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2714:6:201","type":""}],"src":"2568:773:201"},{"body":{"nodeType":"YulBlock","src":"3497:110:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3514:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3525:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3507:6:201"},"nodeType":"YulFunctionCall","src":"3507:21:201"},"nodeType":"YulExpressionStatement","src":"3507:21:201"},{"nodeType":"YulAssignment","src":"3537:64:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3574:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3586:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3597:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3582:3:201"},"nodeType":"YulFunctionCall","src":"3582:18:201"}],"functionName":{"name":"abi_encode_array_uint256_dyn","nodeType":"YulIdentifier","src":"3545:28:201"},"nodeType":"YulFunctionCall","src":"3545:56:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3537:4:201"}]}]},"name":"abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3466:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3477:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3488:4:201","type":""}],"src":"3346:261:201"},{"body":{"nodeType":"YulBlock","src":"3713:76:201","statements":[{"nodeType":"YulAssignment","src":"3723:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3735:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3746:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3731:3:201"},"nodeType":"YulFunctionCall","src":"3731:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3723:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3765:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"3776:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3758:6:201"},"nodeType":"YulFunctionCall","src":"3758:25:201"},"nodeType":"YulExpressionStatement","src":"3758:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3682:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3693:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3704:4:201","type":""}],"src":"3612:177:201"},{"body":{"nodeType":"YulBlock","src":"3875:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"3921:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3930:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3933:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3923:6:201"},"nodeType":"YulFunctionCall","src":"3923:12:201"},"nodeType":"YulExpressionStatement","src":"3923:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3896:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3905:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3892:3:201"},"nodeType":"YulFunctionCall","src":"3892:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3917:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3888:3:201"},"nodeType":"YulFunctionCall","src":"3888:32:201"},"nodeType":"YulIf","src":"3885:52:201"},{"nodeType":"YulVariableDeclaration","src":"3946:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3965:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3959:5:201"},"nodeType":"YulFunctionCall","src":"3959:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3950:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4009:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3984:24:201"},"nodeType":"YulFunctionCall","src":"3984:31:201"},"nodeType":"YulExpressionStatement","src":"3984:31:201"},{"nodeType":"YulAssignment","src":"4024:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"4034:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4024:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3841:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3852:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3864:6:201","type":""}],"src":"3794:251:201"},{"body":{"nodeType":"YulBlock","src":"4082:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4099:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4102:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4092:6:201"},"nodeType":"YulFunctionCall","src":"4092:88:201"},"nodeType":"YulExpressionStatement","src":"4092:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4196:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4199:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4189:6:201"},"nodeType":"YulFunctionCall","src":"4189:15:201"},"nodeType":"YulExpressionStatement","src":"4189:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4220:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4223:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4213:6:201"},"nodeType":"YulFunctionCall","src":"4213:15:201"},"nodeType":"YulExpressionStatement","src":"4213:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"4050:184:201"},{"body":{"nodeType":"YulBlock","src":"4284:289:201","statements":[{"nodeType":"YulAssignment","src":"4294:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4310:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4304:5:201"},"nodeType":"YulFunctionCall","src":"4304:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4294:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"4322:117:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"4344:6:201"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"4360:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"4366:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4356:3:201"},"nodeType":"YulFunctionCall","src":"4356:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"4371:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4352:3:201"},"nodeType":"YulFunctionCall","src":"4352:86:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4340:3:201"},"nodeType":"YulFunctionCall","src":"4340:99:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"4326:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4514:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"4516:16:201"},"nodeType":"YulFunctionCall","src":"4516:18:201"},"nodeType":"YulExpressionStatement","src":"4516:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"4457:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"4469:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4454:2:201"},"nodeType":"YulFunctionCall","src":"4454:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"4493:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"4505:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4490:2:201"},"nodeType":"YulFunctionCall","src":"4490:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"4451:2:201"},"nodeType":"YulFunctionCall","src":"4451:62:201"},"nodeType":"YulIf","src":"4448:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4552:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"4556:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4545:6:201"},"nodeType":"YulFunctionCall","src":"4545:22:201"},"nodeType":"YulExpressionStatement","src":"4545:22:201"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"4264:4:201","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"4273:6:201","type":""}],"src":"4239:334:201"},{"body":{"nodeType":"YulBlock","src":"4684:905:201","statements":[{"nodeType":"YulVariableDeclaration","src":"4694:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"4704:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4698:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4751:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4760:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4763:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4753:6:201"},"nodeType":"YulFunctionCall","src":"4753:12:201"},"nodeType":"YulExpressionStatement","src":"4753:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4726:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4735:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4722:3:201"},"nodeType":"YulFunctionCall","src":"4722:23:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4747:2:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4718:3:201"},"nodeType":"YulFunctionCall","src":"4718:32:201"},"nodeType":"YulIf","src":"4715:52:201"},{"nodeType":"YulVariableDeclaration","src":"4776:30:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4796:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4790:5:201"},"nodeType":"YulFunctionCall","src":"4790:16:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"4780:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4815:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"4825:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"4819:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4870:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4879:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4882:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4872:6:201"},"nodeType":"YulFunctionCall","src":"4872:12:201"},"nodeType":"YulExpressionStatement","src":"4872:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"4858:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"4866:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4855:2:201"},"nodeType":"YulFunctionCall","src":"4855:14:201"},"nodeType":"YulIf","src":"4852:34:201"},{"nodeType":"YulVariableDeclaration","src":"4895:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4909:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"4920:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4905:3:201"},"nodeType":"YulFunctionCall","src":"4905:22:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"4899:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4975:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4984:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4987:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4977:6:201"},"nodeType":"YulFunctionCall","src":"4977:12:201"},"nodeType":"YulExpressionStatement","src":"4977:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"4954:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"4958:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4950:3:201"},"nodeType":"YulFunctionCall","src":"4950:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4965:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4946:3:201"},"nodeType":"YulFunctionCall","src":"4946:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4939:6:201"},"nodeType":"YulFunctionCall","src":"4939:35:201"},"nodeType":"YulIf","src":"4936:55:201"},{"nodeType":"YulVariableDeclaration","src":"5000:19:201","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"5016:2:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5010:5:201"},"nodeType":"YulFunctionCall","src":"5010:9:201"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"5004:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"5042:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"5044:16:201"},"nodeType":"YulFunctionCall","src":"5044:18:201"},"nodeType":"YulExpressionStatement","src":"5044:18:201"}]},"condition":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"5034:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"5038:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5031:2:201"},"nodeType":"YulFunctionCall","src":"5031:10:201"},"nodeType":"YulIf","src":"5028:36:201"},{"nodeType":"YulVariableDeclaration","src":"5073:20:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5087:1:201","type":"","value":"5"},{"name":"_4","nodeType":"YulIdentifier","src":"5090:2:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5083:3:201"},"nodeType":"YulFunctionCall","src":"5083:10:201"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"5077:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5102:39:201","value":{"arguments":[{"arguments":[{"name":"_5","nodeType":"YulIdentifier","src":"5133:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5137:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5129:3:201"},"nodeType":"YulFunctionCall","src":"5129:11:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"5113:15:201"},"nodeType":"YulFunctionCall","src":"5113:28:201"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"5106:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5150:16:201","value":{"name":"dst","nodeType":"YulIdentifier","src":"5163:3:201"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"5154:5:201","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"5182:3:201"},{"name":"_4","nodeType":"YulIdentifier","src":"5187:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5175:6:201"},"nodeType":"YulFunctionCall","src":"5175:15:201"},"nodeType":"YulExpressionStatement","src":"5175:15:201"},{"nodeType":"YulAssignment","src":"5199:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"5210:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5215:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5206:3:201"},"nodeType":"YulFunctionCall","src":"5206:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"5199:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"5227:34:201","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"5249:2:201"},{"name":"_5","nodeType":"YulIdentifier","src":"5253:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5245:3:201"},"nodeType":"YulFunctionCall","src":"5245:11:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5258:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5241:3:201"},"nodeType":"YulFunctionCall","src":"5241:20:201"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"5231:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"5293:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5302:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5305:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5295:6:201"},"nodeType":"YulFunctionCall","src":"5295:12:201"},"nodeType":"YulExpressionStatement","src":"5295:12:201"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"5276:6:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"5284:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5273:2:201"},"nodeType":"YulFunctionCall","src":"5273:19:201"},"nodeType":"YulIf","src":"5270:39:201"},{"nodeType":"YulVariableDeclaration","src":"5318:22:201","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"5333:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5337:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5329:3:201"},"nodeType":"YulFunctionCall","src":"5329:11:201"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"5322:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"5405:154:201","statements":[{"nodeType":"YulVariableDeclaration","src":"5419:23:201","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"5438:3:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5432:5:201"},"nodeType":"YulFunctionCall","src":"5432:10:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5423:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5480:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"5455:24:201"},"nodeType":"YulFunctionCall","src":"5455:31:201"},"nodeType":"YulExpressionStatement","src":"5455:31:201"},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"5506:3:201"},{"name":"value","nodeType":"YulIdentifier","src":"5511:5:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5499:6:201"},"nodeType":"YulFunctionCall","src":"5499:18:201"},"nodeType":"YulExpressionStatement","src":"5499:18:201"},{"nodeType":"YulAssignment","src":"5530:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"5541:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5546:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5537:3:201"},"nodeType":"YulFunctionCall","src":"5537:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"5530:3:201"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"5360:3:201"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"5365:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5357:2:201"},"nodeType":"YulFunctionCall","src":"5357:15:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5373:23:201","statements":[{"nodeType":"YulAssignment","src":"5375:19:201","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"5386:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5391:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5382:3:201"},"nodeType":"YulFunctionCall","src":"5382:12:201"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"5375:3:201"}]}]},"pre":{"nodeType":"YulBlock","src":"5353:3:201","statements":[]},"src":"5349:210:201"},{"nodeType":"YulAssignment","src":"5568:15:201","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"5578:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5568:6:201"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4650:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4661:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4673:6:201","type":""}],"src":"4578:1011:201"},{"body":{"nodeType":"YulBlock","src":"5626:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5643:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5646:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5636:6:201"},"nodeType":"YulFunctionCall","src":"5636:88:201"},"nodeType":"YulExpressionStatement","src":"5636:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5740:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"5743:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5733:6:201"},"nodeType":"YulFunctionCall","src":"5733:15:201"},"nodeType":"YulExpressionStatement","src":"5733:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5764:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5767:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5757:6:201"},"nodeType":"YulFunctionCall","src":"5757:15:201"},"nodeType":"YulExpressionStatement","src":"5757:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"5594:184:201"},{"body":{"nodeType":"YulBlock","src":"5831:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"5858:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"5860:16:201"},"nodeType":"YulFunctionCall","src":"5860:18:201"},"nodeType":"YulExpressionStatement","src":"5860:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5847:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"5854:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"5850:3:201"},"nodeType":"YulFunctionCall","src":"5850:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5844:2:201"},"nodeType":"YulFunctionCall","src":"5844:13:201"},"nodeType":"YulIf","src":"5841:39:201"},{"nodeType":"YulAssignment","src":"5889:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"5900:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"5903:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5896:3:201"},"nodeType":"YulFunctionCall","src":"5896:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"5889:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"5814:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"5817:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"5823:3:201","type":""}],"src":"5783:128:201"},{"body":{"nodeType":"YulBlock","src":"5948:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5965:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5968:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5958:6:201"},"nodeType":"YulFunctionCall","src":"5958:88:201"},"nodeType":"YulExpressionStatement","src":"5958:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6062:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6065:4:201","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6055:6:201"},"nodeType":"YulFunctionCall","src":"6055:15:201"},"nodeType":"YulExpressionStatement","src":"6055:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6086:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6089:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6079:6:201"},"nodeType":"YulFunctionCall","src":"6079:15:201"},"nodeType":"YulExpressionStatement","src":"6079:15:201"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"5916:184:201"},{"body":{"nodeType":"YulBlock","src":"6152:148:201","statements":[{"body":{"nodeType":"YulBlock","src":"6243:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"6245:16:201"},"nodeType":"YulFunctionCall","src":"6245:18:201"},"nodeType":"YulExpressionStatement","src":"6245:18:201"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6168:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"6175:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"6165:2:201"},"nodeType":"YulFunctionCall","src":"6165:77:201"},"nodeType":"YulIf","src":"6162:103:201"},{"nodeType":"YulAssignment","src":"6274:20:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6285:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"6292:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6281:3:201"},"nodeType":"YulFunctionCall","src":"6281:13:201"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"6274:3:201"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"6134:5:201","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"6144:3:201","type":""}],"src":"6105:195:201"},{"body":{"nodeType":"YulBlock","src":"6406:125:201","statements":[{"nodeType":"YulAssignment","src":"6416:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6428:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6439:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6424:3:201"},"nodeType":"YulFunctionCall","src":"6424:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6416:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6458:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6473:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"6481:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6469:3:201"},"nodeType":"YulFunctionCall","src":"6469:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6451:6:201"},"nodeType":"YulFunctionCall","src":"6451:74:201"},"nodeType":"YulExpressionStatement","src":"6451:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6375:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6386:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6397:4:201","type":""}],"src":"6305:226:201"},{"body":{"nodeType":"YulBlock","src":"6659:336:201","statements":[{"body":{"nodeType":"YulBlock","src":"6705:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6714:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6717:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6707:6:201"},"nodeType":"YulFunctionCall","src":"6707:12:201"},"nodeType":"YulExpressionStatement","src":"6707:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6680:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6689:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6676:3:201"},"nodeType":"YulFunctionCall","src":"6676:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"6701:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6672:3:201"},"nodeType":"YulFunctionCall","src":"6672:32:201"},"nodeType":"YulIf","src":"6669:52:201"},{"nodeType":"YulVariableDeclaration","src":"6730:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6750:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6744:5:201"},"nodeType":"YulFunctionCall","src":"6744:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"6734:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6762:33:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6784:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"6792:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6780:3:201"},"nodeType":"YulFunctionCall","src":"6780:15:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"6766:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"6870:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"6872:16:201"},"nodeType":"YulFunctionCall","src":"6872:18:201"},"nodeType":"YulExpressionStatement","src":"6872:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6813:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"6825:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6810:2:201"},"nodeType":"YulFunctionCall","src":"6810:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6849:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"6861:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6846:2:201"},"nodeType":"YulFunctionCall","src":"6846:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"6807:2:201"},"nodeType":"YulFunctionCall","src":"6807:62:201"},"nodeType":"YulIf","src":"6804:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6908:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6912:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6901:6:201"},"nodeType":"YulFunctionCall","src":"6901:22:201"},"nodeType":"YulExpressionStatement","src":"6901:22:201"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6939:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6953:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6947:5:201"},"nodeType":"YulFunctionCall","src":"6947:16:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6932:6:201"},"nodeType":"YulFunctionCall","src":"6932:32:201"},"nodeType":"YulExpressionStatement","src":"6932:32:201"},{"nodeType":"YulAssignment","src":"6973:16:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"6983:6:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6973:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6625:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6636:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6648:6:201","type":""}],"src":"6536:459:201"},{"body":{"nodeType":"YulBlock","src":"7052:176:201","statements":[{"body":{"nodeType":"YulBlock","src":"7171:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"7173:16:201"},"nodeType":"YulFunctionCall","src":"7173:18:201"},"nodeType":"YulExpressionStatement","src":"7173:18:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7083:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7076:6:201"},"nodeType":"YulFunctionCall","src":"7076:9:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7069:6:201"},"nodeType":"YulFunctionCall","src":"7069:17:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"7091:1:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7098:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"7166:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"7094:3:201"},"nodeType":"YulFunctionCall","src":"7094:74:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7088:2:201"},"nodeType":"YulFunctionCall","src":"7088:81:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7065:3:201"},"nodeType":"YulFunctionCall","src":"7065:105:201"},"nodeType":"YulIf","src":"7062:131:201"},{"nodeType":"YulAssignment","src":"7202:20:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7217:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"7220:1:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"7213:3:201"},"nodeType":"YulFunctionCall","src":"7213:9:201"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"7202:7:201"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"7031:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"7034:1:201","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"7040:7:201","type":""}],"src":"7000:228:201"},{"body":{"nodeType":"YulBlock","src":"7303:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"7349:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7358:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7361:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7351:6:201"},"nodeType":"YulFunctionCall","src":"7351:12:201"},"nodeType":"YulExpressionStatement","src":"7351:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7324:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"7333:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7320:3:201"},"nodeType":"YulFunctionCall","src":"7320:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"7345:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7316:3:201"},"nodeType":"YulFunctionCall","src":"7316:32:201"},"nodeType":"YulIf","src":"7313:52:201"},{"nodeType":"YulVariableDeclaration","src":"7374:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7400:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7387:12:201"},"nodeType":"YulFunctionCall","src":"7387:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7378:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7444:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7419:24:201"},"nodeType":"YulFunctionCall","src":"7419:31:201"},"nodeType":"YulExpressionStatement","src":"7419:31:201"},{"nodeType":"YulAssignment","src":"7459:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"7469:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7459:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7269:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7280:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7292:6:201","type":""}],"src":"7233:247:201"},{"body":{"nodeType":"YulBlock","src":"7566:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"7612:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7621:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7624:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7614:6:201"},"nodeType":"YulFunctionCall","src":"7614:12:201"},"nodeType":"YulExpressionStatement","src":"7614:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7587:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"7596:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7583:3:201"},"nodeType":"YulFunctionCall","src":"7583:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"7608:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7579:3:201"},"nodeType":"YulFunctionCall","src":"7579:32:201"},"nodeType":"YulIf","src":"7576:52:201"},{"nodeType":"YulAssignment","src":"7637:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7653:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7647:5:201"},"nodeType":"YulFunctionCall","src":"7647:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7637:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7532:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7543:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7555:6:201","type":""}],"src":"7485:184:201"},{"body":{"nodeType":"YulBlock","src":"7848:163:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7865:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7876:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7858:6:201"},"nodeType":"YulFunctionCall","src":"7858:21:201"},"nodeType":"YulExpressionStatement","src":"7858:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7899:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7910:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7895:3:201"},"nodeType":"YulFunctionCall","src":"7895:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"7915:2:201","type":"","value":"13"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7888:6:201"},"nodeType":"YulFunctionCall","src":"7888:30:201"},"nodeType":"YulExpressionStatement","src":"7888:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7938:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7949:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7934:3:201"},"nodeType":"YulFunctionCall","src":"7934:18:201"},{"hexValue":"494e56414c49445f544f4b454e","kind":"string","nodeType":"YulLiteral","src":"7954:15:201","type":"","value":"INVALID_TOKEN"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7927:6:201"},"nodeType":"YulFunctionCall","src":"7927:43:201"},"nodeType":"YulExpressionStatement","src":"7927:43:201"},{"nodeType":"YulAssignment","src":"7979:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7991:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8002:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7987:3:201"},"nodeType":"YulFunctionCall","src":"7987:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7979:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_436b5627177a9781148596ddddd93f72d53dd82575a018216d5aaf2a8219ec9e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7825:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7839:4:201","type":""}],"src":"7674:337:201"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_stringliteral_d4d1a59767271eefdc7830a772b9732a11d503531d972ab8c981a6b1c0e666e5__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 2)\n        mstore(add(headStart, 64), \"22\")\n        tail := add(headStart, 96)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_encode_array_uint256_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 64)\n        mstore(headStart, 64)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        pos := add(headStart, 96)\n        let _1 := 0x20\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        mstore(add(headStart, _1), sub(pos, headStart))\n        tail := abi_encode_array_uint256_dyn(value1, pos)\n    }\n    function abi_decode_array_address_dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_address_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset_1), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n    }\n    function abi_encode_tuple_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_array_uint256_dyn(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        let _1 := 32\n        if slt(sub(dataEnd, headStart), _1) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n        let _4 := mload(_3)\n        if gt(_4, _2) { panic_error_0x41() }\n        let _5 := shl(5, _4)\n        let dst := allocate_memory(add(_5, _1))\n        let dst_1 := dst\n        mstore(dst, _4)\n        dst := add(dst, _1)\n        let srcEnd := add(add(_3, _5), _1)\n        if gt(srcEnd, dataEnd) { revert(0, 0) }\n        let src := add(_3, _1)\n        for { } lt(src, srcEnd) { src := add(src, _1) }\n        {\n            let value := mload(src)\n            validator_revert_address(value)\n            mstore(dst, value)\n            dst := add(dst, _1)\n        }\n        value0 := dst_1\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_struct$_ReserveConfigurationMap_$21318_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 32)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, mload(headStart))\n        value0 := memPtr\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_436b5627177a9781148596ddddd93f72d53dd82575a018216d5aaf2a8219ec9e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 13)\n        mstore(add(headStart, 64), \"INVALID_TOKEN\")\n        tail := add(headStart, 96)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"6080604052600436106100385760003560e01c806302405343146100b1578063b59b28ef146100e8578063f7888aec1461011557600080fd5b366100ac57333b6100aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f323200000000000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b005b600080fd5b3480156100bd57600080fd5b506100d16100cc366004610849565b610143565b6040516100df9291906108bd565b60405180910390f35b3480156100f457600080fd5b5061010861010336600461096f565b61059d565b6040516100df91906109db565b34801561012157600080fd5b50610135610130366004610849565b6106b6565b6040519081526020016100df565b60608060008473ffffffffffffffffffffffffffffffffffffffff1663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610193573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b791906109f5565b905060008173ffffffffffffffffffffffffffffffffffffffff1663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610206573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261024c9190810190610a90565b905060008151600161025e9190610b71565b67ffffffffffffffff81111561027657610276610a12565b60405190808252806020026020018201604052801561029f578160200160208202803683370190505b50905060005b8251811015610311578281815181106102c0576102c0610b89565b60200260200101518282815181106102da576102da610b89565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101528061030981610bb8565b9150506102a5565b5073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8183518151811061033a5761033a610b89565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000815167ffffffffffffffff81111561039057610390610a12565b6040519080825280602002602001820160405280156103b9578160200160208202803683370190505b50905060005b83518110156105515760008573ffffffffffffffffffffffffffffffffffffffff1663c44b11f78584815181106103f8576103f8610b89565b60200260200101516040518263ffffffff1660e01b8152600401610438919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015610455573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104799190610bf1565b905060006104c98251670100000000000000811615159167020000000000000082161515916704000000000000008116151591670800000000000000821615159167100000000000000016151590565b505050509050806104fb5760008484815181106104e8576104e8610b89565b602002602001018181525050505061053f565b61051e8a86858151811061051157610511610b89565b60200260200101516106b6565b84848151811061053057610530610b89565b60200260200101818152505050505b8061054981610bb8565b9150506103bf565b506105708773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6106b6565b8184518151811061058357610583610b89565b6020908102919091010152909450925050505b9250929050565b606060006105ab8386610c33565b67ffffffffffffffff8111156105c3576105c3610a12565b6040519080825280602002602001820160405280156105ec578160200160208202803683370190505b50905060005b858110156106ac5760005b848110156106995761065688888481811061061a5761061a610b89565b905060200201602081019061062f9190610c70565b87878481811061064157610641610b89565b90506020020160208101906101309190610c70565b83826106628886610c33565b61066c9190610b71565b8151811061067c5761067c610b89565b60209081029190910101528061069181610bb8565b9150506105fd565b50806106a481610bb8565b9150506105f2565b5095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610708575073ffffffffffffffffffffffffffffffffffffffff82163161081e565b73ffffffffffffffffffffffffffffffffffffffff82163b156107bc576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528316906370a0823190602401602060405180830381865afa158015610791573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b59190610c8d565b905061081e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f494e56414c49445f544f4b454e0000000000000000000000000000000000000060448201526064016100a1565b92915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461084657600080fd5b50565b6000806040838503121561085c57600080fd5b823561086781610824565b9150602083013561087781610824565b809150509250929050565b600081518084526020808501945080840160005b838110156108b257815187529582019590820190600101610896565b509495945050505050565b604080825283519082018190526000906020906060840190828701845b8281101561090c57815173ffffffffffffffffffffffffffffffffffffffff16845292840192908401906001016108da565b505050838103828501526109208186610882565b9695505050505050565b60008083601f84011261093c57600080fd5b50813567ffffffffffffffff81111561095457600080fd5b6020830191508360208260051b850101111561059657600080fd5b6000806000806040858703121561098557600080fd5b843567ffffffffffffffff8082111561099d57600080fd5b6109a98883890161092a565b909650945060208701359150808211156109c257600080fd5b506109cf8782880161092a565b95989497509550505050565b6020815260006109ee6020830184610882565b9392505050565b600060208284031215610a0757600080fd5b81516109ee81610824565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610a8857610a88610a12565b604052919050565b60006020808385031215610aa357600080fd5b825167ffffffffffffffff80821115610abb57600080fd5b818501915085601f830112610acf57600080fd5b815181811115610ae157610ae1610a12565b8060051b9150610af2848301610a41565b8181529183018401918481019088841115610b0c57600080fd5b938501935b83851015610b365784519250610b2683610824565b8282529385019390850190610b11565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610b8457610b84610b42565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610bea57610bea610b42565b5060010190565b600060208284031215610c0357600080fd5b6040516020810181811067ffffffffffffffff82111715610c2657610c26610a12565b6040529151825250919050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610c6b57610c6b610b42565b500290565b600060208284031215610c8257600080fd5b81356109ee81610824565b600060208284031215610c9f57600080fd5b505191905056fea2646970667358221220adce7307dbfaaac498c3db3ffa9e09e9aeb064e0dac8ecf2a4e2520964b127d764736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x38 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2405343 EQ PUSH2 0xB1 JUMPI DUP1 PUSH4 0xB59B28EF EQ PUSH2 0xE8 JUMPI DUP1 PUSH4 0xF7888AEC EQ PUSH2 0x115 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0xAC JUMPI CALLER EXTCODESIZE PUSH2 0xAA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x3232000000000000000000000000000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD1 PUSH2 0xCC CALLDATASIZE PUSH1 0x4 PUSH2 0x849 JUMP JUMPDEST PUSH2 0x143 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xDF SWAP3 SWAP2 SWAP1 PUSH2 0x8BD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x108 PUSH2 0x103 CALLDATASIZE PUSH1 0x4 PUSH2 0x96F JUMP JUMPDEST PUSH2 0x59D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xDF SWAP2 SWAP1 PUSH2 0x9DB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x121 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x135 PUSH2 0x130 CALLDATASIZE PUSH1 0x4 PUSH2 0x849 JUMP JUMPDEST PUSH2 0x6B6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xDF JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26B1D5F PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x193 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B7 SWAP2 SWAP1 PUSH2 0x9F5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD1946DBC PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x206 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 0x24C SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0xA90 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH1 0x1 PUSH2 0x25E SWAP2 SWAP1 PUSH2 0xB71 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x276 JUMPI PUSH2 0x276 PUSH2 0xA12 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x29F JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x311 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x2C0 JUMPI PUSH2 0x2C0 PUSH2 0xB89 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2DA JUMPI PUSH2 0x2DA PUSH2 0xB89 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE DUP1 PUSH2 0x309 DUP2 PUSH2 0xBB8 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2A5 JUMP JUMPDEST POP PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE DUP2 DUP4 MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x33A JUMPI PUSH2 0x33A PUSH2 0xB89 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x0 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x390 JUMPI PUSH2 0x390 PUSH2 0xA12 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3B9 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x551 JUMPI PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xC44B11F7 DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3F8 JUMPI PUSH2 0x3F8 PUSH2 0xB89 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x438 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x455 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x479 SWAP2 SWAP1 PUSH2 0xBF1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4C9 DUP3 MLOAD PUSH8 0x100000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x200000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x400000000000000 DUP2 AND ISZERO ISZERO SWAP2 PUSH8 0x800000000000000 DUP3 AND ISZERO ISZERO SWAP2 PUSH8 0x1000000000000000 AND ISZERO ISZERO SWAP1 JUMP JUMPDEST POP POP POP POP SWAP1 POP DUP1 PUSH2 0x4FB JUMPI PUSH1 0x0 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x4E8 JUMPI PUSH2 0x4E8 PUSH2 0xB89 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP POP POP PUSH2 0x53F JUMP JUMPDEST PUSH2 0x51E DUP11 DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x511 JUMPI PUSH2 0x511 PUSH2 0xB89 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x6B6 JUMP JUMPDEST DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x530 JUMPI PUSH2 0x530 PUSH2 0xB89 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP POP POP JUMPDEST DUP1 PUSH2 0x549 DUP2 PUSH2 0xBB8 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x3BF JUMP JUMPDEST POP PUSH2 0x570 DUP8 PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE PUSH2 0x6B6 JUMP JUMPDEST DUP2 DUP5 MLOAD DUP2 MLOAD DUP2 LT PUSH2 0x583 JUMPI PUSH2 0x583 PUSH2 0xB89 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE SWAP1 SWAP5 POP SWAP3 POP POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x5AB DUP4 DUP7 PUSH2 0xC33 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5C3 JUMPI PUSH2 0x5C3 PUSH2 0xA12 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x5EC JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x6AC JUMPI PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x699 JUMPI PUSH2 0x656 DUP9 DUP9 DUP5 DUP2 DUP2 LT PUSH2 0x61A JUMPI PUSH2 0x61A PUSH2 0xB89 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x62F SWAP2 SWAP1 PUSH2 0xC70 JUMP JUMPDEST DUP8 DUP8 DUP5 DUP2 DUP2 LT PUSH2 0x641 JUMPI PUSH2 0x641 PUSH2 0xB89 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x130 SWAP2 SWAP1 PUSH2 0xC70 JUMP JUMPDEST DUP4 DUP3 PUSH2 0x662 DUP9 DUP7 PUSH2 0xC33 JUMP JUMPDEST PUSH2 0x66C SWAP2 SWAP1 PUSH2 0xB71 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x67C JUMPI PUSH2 0x67C PUSH2 0xB89 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE DUP1 PUSH2 0x691 DUP2 PUSH2 0xBB8 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x5FD JUMP JUMPDEST POP DUP1 PUSH2 0x6A4 DUP2 PUSH2 0xBB8 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x5F2 JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x708 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND BALANCE PUSH2 0x81E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND EXTCODESIZE ISZERO PUSH2 0x7BC JUMPI PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x791 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7B5 SWAP2 SWAP1 PUSH2 0xC8D JUMP JUMPDEST SWAP1 POP PUSH2 0x81E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F544F4B454E00000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xA1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x846 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x85C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x867 DUP2 PUSH2 0x824 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x877 DUP2 PUSH2 0x824 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x8B2 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x896 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 DUP3 MSTORE DUP4 MLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x60 DUP5 ADD SWAP1 DUP3 DUP8 ADD DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x90C JUMPI DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x8DA JUMP JUMPDEST POP POP POP DUP4 DUP2 SUB DUP3 DUP6 ADD MSTORE PUSH2 0x920 DUP2 DUP7 PUSH2 0x882 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x93C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x954 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x596 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x985 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x99D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9A9 DUP9 DUP4 DUP10 ADD PUSH2 0x92A JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x9C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9CF DUP8 DUP3 DUP9 ADD PUSH2 0x92A JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x9EE PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x882 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA07 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x9EE DUP2 PUSH2 0x824 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xA88 JUMPI PUSH2 0xA88 PUSH2 0xA12 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xAA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xABB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xACF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0xAE1 JUMPI PUSH2 0xAE1 PUSH2 0xA12 JUMP JUMPDEST DUP1 PUSH1 0x5 SHL SWAP2 POP PUSH2 0xAF2 DUP5 DUP4 ADD PUSH2 0xA41 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 DUP4 ADD DUP5 ADD SWAP2 DUP5 DUP2 ADD SWAP1 DUP9 DUP5 GT ISZERO PUSH2 0xB0C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP4 DUP6 LT ISZERO PUSH2 0xB36 JUMPI DUP5 MLOAD SWAP3 POP PUSH2 0xB26 DUP4 PUSH2 0x824 JUMP JUMPDEST DUP3 DUP3 MSTORE SWAP4 DUP6 ADD SWAP4 SWAP1 DUP6 ADD SWAP1 PUSH2 0xB11 JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0xB84 JUMPI PUSH2 0xB84 PUSH2 0xB42 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0xBEA JUMPI PUSH2 0xBEA PUSH2 0xB42 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0xC26 JUMPI PUSH2 0xC26 PUSH2 0xA12 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0xC6B JUMPI PUSH2 0xC6B PUSH2 0xB42 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x9EE DUP2 PUSH2 0x824 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAD 0xCE PUSH20 0x7DBFAAAC498C3DB3FFA9E09E9AEB064E0DAC8EC CALLCODE LOG4 0xE2 MSTORE MULMOD PUSH5 0xB127D76473 PUSH16 0x6C634300080A00330000000000000000 ","sourceMap":"1174:2838:156:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1611:10;1025:20:3;1603:38:156;;;;;;;216:2:201;1603:38:156;;;198:21:201;255:1;235:18;;;228:29;293:4;273:18;;;266:32;315:18;;1603:38:156;;;;;;;;;1174:2838;;;;;2964:1046;;;;;;;;;;-1:-1:-1;2964:1046:156;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;2442:424;;;;;;;;;;-1:-1:-1;2442:424:156;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1842:325::-;;;;;;;;;;-1:-1:-1;1842:325:156;;;;;:::i;:::-;;:::i;:::-;;;3758:25:201;;;3746:2;3731:18;1842:325:156;3612:177:201;2964:1046:156;3062:16;3080;3104:10;3146:8;3123:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3104:62;;3173:25;3201:4;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3173:50;;3229:32;3278:8;:15;3296:1;3278:19;;;;:::i;:::-;3264:34;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3264:34:156;;3229:69;;3309:9;3304:93;3328:8;:15;3324:1;:19;3304:93;;;3379:8;3388:1;3379:11;;;;;;;;:::i;:::-;;;;;;;3358:15;3374:1;3358:18;;;;;;;;:::i;:::-;:32;;;;:18;;;;;;;;;;;:32;3345:3;;;;:::i;:::-;;;;3304:93;;;;1414:42;3402:15;3418:8;:15;3402:32;;;;;;;;:::i;:::-;;;;;;:51;;;;;;;;;;;3460:25;3502:15;:22;3488:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3488:37:156;;3460:65;;3537:9;3532:366;3556:8;:15;3552:1;:19;3532:366;;;3586:54;3643:4;:21;;;3674:15;3690:1;3674:18;;;;;;;;:::i;:::-;;;;;;;3643:57;;;;;;;;;;;;;;6481:42:201;6469:55;;;;6451:74;;6439:2;6424:18;;6305:226;3643:57:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3586:114;;3710:13;3735:24;:13;21735:9:72;21779:12;21767:24;;21766:31;;;21818:12;21806:24;;21805:31;;;21857:15;21845:27;;21844:34;;;21899:22;21887:34;;21886:41;;;21948:12;21936:24;21935:31;;;21583:394;3735:24:156;3709:50;;;;;;3773:8;3768:67;;3807:1;3793:8;3802:1;3793:11;;;;;;;;:::i;:::-;;;;;;:15;;;;;3818:8;;;;3768:67;3856:35;3866:4;3872:15;3888:1;3872:18;;;;;;;;:::i;:::-;;;;;;;3856:9;:35::i;:::-;3842:8;3851:1;3842:11;;;;;;;;:::i;:::-;;;;;;:49;;;;;3578:320;;3532:366;3573:3;;;;:::i;:::-;;;;3532:366;;;;3931:33;3941:4;1414:42;3931:9;:33::i;:::-;3903:8;3912;:15;3903:25;;;;;;;;:::i;:::-;;;;;;;;;;:61;3979:15;;-1:-1:-1;3996:8:156;-1:-1:-1;;;2964:1046:156;;;;;;:::o;2442:424::-;2554:16;2578:25;2620:28;2635:6;2620:5;:28;:::i;:::-;2606:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2606:43:156;;2578:71;;2661:9;2656:184;2676:16;;;2656:184;;;2712:9;2707:127;2727:17;;;2707:127;;;2795:30;2805:5;;2811:1;2805:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2815:6;;2822:1;2815:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;2795:30::-;2761:8;2790:1;2770:17;2774:6;2770:1;:17;:::i;:::-;:21;;;;:::i;:::-;2761:31;;;;;;;;:::i;:::-;;;;;;;;;;:64;2746:3;;;;:::i;:::-;;;;2707:127;;;-1:-1:-1;2694:3:156;;;;:::i;:::-;;;;2656:184;;;-1:-1:-1;2853:8:156;2442:424;-1:-1:-1;;;;;2442:424:156:o;1842:325::-;1911:7;1930:25;;;1414:42;1930:25;1926:208;;;-1:-1:-1;1972:12:156;;;;1965:19;;1926:208;2063:16;;;1025:20:3;1063:8;2059:75:156;;2098:29;;;;;:23;6469:55:201;;;2098:29:156;;;6451:74:201;2098:23:156;;;;;6424:18:201;;2098:29:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2091:36;;;;2059:75;2139:23;;;;;7876:2:201;2139:23:156;;;7858:21:201;7915:2;7895:18;;;7888:30;7954:15;7934:18;;;7927:43;7987:18;;2139:23:156;7674:337:201;1842:325:156;;;;;:::o;344:154:201:-;430:42;423:5;419:54;412:5;409:65;399:93;;488:1;485;478:12;399:93;344:154;:::o;503:388::-;571:6;579;632:2;620:9;611:7;607:23;603:32;600:52;;;648:1;645;638:12;600:52;687:9;674:23;706:31;731:5;706:31;:::i;:::-;756:5;-1:-1:-1;813:2:201;798:18;;785:32;826:33;785:32;826:33;:::i;:::-;878:7;868:17;;;503:388;;;;;:::o;896:435::-;949:3;987:5;981:12;1014:6;1009:3;1002:19;1040:4;1069:2;1064:3;1060:12;1053:19;;1106:2;1099:5;1095:14;1127:1;1137:169;1151:6;1148:1;1145:13;1137:169;;;1212:13;;1200:26;;1246:12;;;;1281:15;;;;1173:1;1166:9;1137:169;;;-1:-1:-1;1322:3:201;;896:435;-1:-1:-1;;;;;896:435:201:o;1336:855::-;1604:2;1616:21;;;1686:13;;1589:18;;;1708:22;;;1556:4;;1783;;1761:2;1746:18;;;1810:15;;;1556:4;1853:218;1867:6;1864:1;1861:13;1853:218;;;1932:13;;1947:42;1928:62;1916:75;;2011:12;;;;2046:15;;;;1889:1;1882:9;1853:218;;;1857:3;;;2116:9;2111:3;2107:19;2102:2;2091:9;2087:18;2080:47;2144:41;2181:3;2173:6;2144:41;:::i;:::-;2136:49;1336:855;-1:-1:-1;;;;;;1336:855:201:o;2196:367::-;2259:8;2269:6;2323:3;2316:4;2308:6;2304:17;2300:27;2290:55;;2341:1;2338;2331:12;2290:55;-1:-1:-1;2364:20:201;;2407:18;2396:30;;2393:50;;;2439:1;2436;2429:12;2393:50;2476:4;2468:6;2464:17;2452:29;;2536:3;2529:4;2519:6;2516:1;2512:14;2504:6;2500:27;2496:38;2493:47;2490:67;;;2553:1;2550;2543:12;2568:773;2690:6;2698;2706;2714;2767:2;2755:9;2746:7;2742:23;2738:32;2735:52;;;2783:1;2780;2773:12;2735:52;2823:9;2810:23;2852:18;2893:2;2885:6;2882:14;2879:34;;;2909:1;2906;2899:12;2879:34;2948:70;3010:7;3001:6;2990:9;2986:22;2948:70;:::i;:::-;3037:8;;-1:-1:-1;2922:96:201;-1:-1:-1;3125:2:201;3110:18;;3097:32;;-1:-1:-1;3141:16:201;;;3138:36;;;3170:1;3167;3160:12;3138:36;;3209:72;3273:7;3262:8;3251:9;3247:24;3209:72;:::i;:::-;2568:773;;;;-1:-1:-1;3300:8:201;-1:-1:-1;;;;2568:773:201:o;3346:261::-;3525:2;3514:9;3507:21;3488:4;3545:56;3597:2;3586:9;3582:18;3574:6;3545:56;:::i;:::-;3537:64;3346:261;-1:-1:-1;;;3346:261:201:o;3794:251::-;3864:6;3917:2;3905:9;3896:7;3892:23;3888:32;3885:52;;;3933:1;3930;3923:12;3885:52;3965:9;3959:16;3984:31;4009:5;3984:31;:::i;4050:184::-;4102:77;4099:1;4092:88;4199:4;4196:1;4189:15;4223:4;4220:1;4213:15;4239:334;4310:2;4304:9;4366:2;4356:13;;4371:66;4352:86;4340:99;;4469:18;4454:34;;4490:22;;;4451:62;4448:88;;;4516:18;;:::i;:::-;4552:2;4545:22;4239:334;;-1:-1:-1;4239:334:201:o;4578:1011::-;4673:6;4704:2;4747;4735:9;4726:7;4722:23;4718:32;4715:52;;;4763:1;4760;4753:12;4715:52;4796:9;4790:16;4825:18;4866:2;4858:6;4855:14;4852:34;;;4882:1;4879;4872:12;4852:34;4920:6;4909:9;4905:22;4895:32;;4965:7;4958:4;4954:2;4950:13;4946:27;4936:55;;4987:1;4984;4977:12;4936:55;5016:2;5010:9;5038:2;5034;5031:10;5028:36;;;5044:18;;:::i;:::-;5090:2;5087:1;5083:10;5073:20;;5113:28;5137:2;5133;5129:11;5113:28;:::i;:::-;5175:15;;;5245:11;;;5241:20;;;5206:12;;;;5273:19;;;5270:39;;;5305:1;5302;5295:12;5270:39;5329:11;;;;5349:210;5365:6;5360:3;5357:15;5349:210;;;5438:3;5432:10;5419:23;;5455:31;5480:5;5455:31;:::i;:::-;5499:18;;;5382:12;;;;5537;;;;5349:210;;;5578:5;4578:1011;-1:-1:-1;;;;;;;;4578:1011:201:o;5594:184::-;5646:77;5643:1;5636:88;5743:4;5740:1;5733:15;5767:4;5764:1;5757:15;5783:128;5823:3;5854:1;5850:6;5847:1;5844:13;5841:39;;;5860:18;;:::i;:::-;-1:-1:-1;5896:9:201;;5783:128::o;5916:184::-;5968:77;5965:1;5958:88;6065:4;6062:1;6055:15;6089:4;6086:1;6079:15;6105:195;6144:3;6175:66;6168:5;6165:77;6162:103;;;6245:18;;:::i;:::-;-1:-1:-1;6292:1:201;6281:13;;6105:195::o;6536:459::-;6648:6;6701:2;6689:9;6680:7;6676:23;6672:32;6669:52;;;6717:1;6714;6707:12;6669:52;6750:2;6744:9;6792:2;6784:6;6780:15;6861:6;6849:10;6846:22;6825:18;6813:10;6810:34;6807:62;6804:88;;;6872:18;;:::i;:::-;6908:2;6901:22;6947:16;;6932:32;;-1:-1:-1;6939:6:201;6536:459;-1:-1:-1;6536:459:201:o;7000:228::-;7040:7;7166:1;7098:66;7094:74;7091:1;7088:81;7083:1;7076:9;7069:17;7065:105;7062:131;;;7173:18;;:::i;:::-;-1:-1:-1;7213:9:201;;7000:228::o;7233:247::-;7292:6;7345:2;7333:9;7324:7;7320:23;7316:32;7313:52;;;7361:1;7358;7351:12;7313:52;7400:9;7387:23;7419:31;7444:5;7419:31;:::i;7485:184::-;7555:6;7608:2;7596:9;7587:7;7583:23;7579:32;7576:52;;;7624:1;7621;7614:12;7576:52;-1:-1:-1;7647:16:201;;7485:184;-1:-1:-1;7485:184:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"658400","executionCost":"689","totalCost":"659089"},"external":{"balanceOf(address,address)":"infinite","batchBalanceOf(address[],address[])":"infinite","getUserWalletBalances(address,address)":"infinite"}},"methodIdentifiers":{"balanceOf(address,address)":"f7888aec","batchBalanceOf(address[],address[])":"b59b28ef","getUserWalletBalances(address,address)":"02405343"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"users\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"batchBalanceOf\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserWalletBalances\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Aave, influenced by https://github.com/wbobeirne/eth-balance-checker/blob/master/contracts/BalanceChecker.sol\",\"details\":\"NOTE: THIS CONTRACT IS NOT USED WITHIN THE AAVE PROTOCOL. It's an accessory contract used to reduce the number of calls towards the blockchain from the Aave backend.*\",\"kind\":\"dev\",\"methods\":{\"balanceOf(address,address)\":{\"details\":\"Check the token balance of a wallet in a token contract Returns the balance of the token for user. Avoids possible errors: - return 0 on non-contract address*\"},\"batchBalanceOf(address[],address[])\":{\"params\":{\"tokens\":\"The list of tokens\",\"users\":\"The list of users\"},\"returns\":{\"_0\":\"And array with the concatenation of, for each user, his/her balances*\"}},\"getUserWalletBalances(address,address)\":{\"details\":\"provides balances of user wallet for all reserves available on the pool\"}},\"title\":\"WalletBalanceProvider contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"batchBalanceOf(address[],address[])\":{\"notice\":\"Fetches, for a list of _users and _tokens (ETH included with mock address), the balances\"}},\"notice\":\"Implements a logic of getting multiple tokens balance for one user address\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/misc/WalletBalanceProvider.sol\":\"WalletBalanceProvider\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/misc/WalletBalanceProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {Address} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol';\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\n\\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\\nimport {IPool} from '@aave/core-v3/contracts/interfaces/IPool.sol';\\nimport {GPv2SafeERC20} from '@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {ReserveConfiguration} from '@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol';\\nimport {DataTypes} from '@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title WalletBalanceProvider contract\\n * @author Aave, influenced by https://github.com/wbobeirne/eth-balance-checker/blob/master/contracts/BalanceChecker.sol\\n * @notice Implements a logic of getting multiple tokens balance for one user address\\n * @dev NOTE: THIS CONTRACT IS NOT USED WITHIN THE AAVE PROTOCOL. It's an accessory contract used to reduce the number of calls\\n * towards the blockchain from the Aave backend.\\n **/\\ncontract WalletBalanceProvider {\\n  using Address for address payable;\\n  using Address for address;\\n  using GPv2SafeERC20 for IERC20;\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  address constant MOCK_ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;\\n\\n  /**\\n    @dev Fallback function, don't accept any ETH\\n    **/\\n  receive() external payable {\\n    //only contracts can send ETH to the core\\n    require(msg.sender.isContract(), '22');\\n  }\\n\\n  /**\\n    @dev Check the token balance of a wallet in a token contract\\n\\n    Returns the balance of the token for user. Avoids possible errors:\\n      - return 0 on non-contract address\\n    **/\\n  function balanceOf(address user, address token) public view returns (uint256) {\\n    if (token == MOCK_ETH_ADDRESS) {\\n      return user.balance; // ETH balance\\n      // check if token is actually a contract\\n    } else if (token.isContract()) {\\n      return IERC20(token).balanceOf(user);\\n    }\\n    revert('INVALID_TOKEN');\\n  }\\n\\n  /**\\n   * @notice Fetches, for a list of _users and _tokens (ETH included with mock address), the balances\\n   * @param users The list of users\\n   * @param tokens The list of tokens\\n   * @return And array with the concatenation of, for each user, his/her balances\\n   **/\\n  function batchBalanceOf(\\n    address[] calldata users,\\n    address[] calldata tokens\\n  ) external view returns (uint256[] memory) {\\n    uint256[] memory balances = new uint256[](users.length * tokens.length);\\n\\n    for (uint256 i = 0; i < users.length; i++) {\\n      for (uint256 j = 0; j < tokens.length; j++) {\\n        balances[i * tokens.length + j] = balanceOf(users[i], tokens[j]);\\n      }\\n    }\\n\\n    return balances;\\n  }\\n\\n  /**\\n    @dev provides balances of user wallet for all reserves available on the pool\\n    */\\n  function getUserWalletBalances(\\n    address provider,\\n    address user\\n  ) external view returns (address[] memory, uint256[] memory) {\\n    IPool pool = IPool(IPoolAddressesProvider(provider).getPool());\\n\\n    address[] memory reserves = pool.getReservesList();\\n    address[] memory reservesWithEth = new address[](reserves.length + 1);\\n    for (uint256 i = 0; i < reserves.length; i++) {\\n      reservesWithEth[i] = reserves[i];\\n    }\\n    reservesWithEth[reserves.length] = MOCK_ETH_ADDRESS;\\n\\n    uint256[] memory balances = new uint256[](reservesWithEth.length);\\n\\n    for (uint256 j = 0; j < reserves.length; j++) {\\n      DataTypes.ReserveConfigurationMap memory configuration = pool.getConfiguration(\\n        reservesWithEth[j]\\n      );\\n\\n      (bool isActive, , , , ) = configuration.getFlags();\\n\\n      if (!isActive) {\\n        balances[j] = 0;\\n        continue;\\n      }\\n      balances[j] = balanceOf(user, reservesWithEth[j]);\\n    }\\n    balances[reserves.length] = balanceOf(user, MOCK_ETH_ADDRESS);\\n\\n    return (reservesWithEth, balances);\\n  }\\n}\\n\",\"keccak256\":\"0x39418d12be6505798dbd274986ac07cbfbc12aa4d6d5a7a7319446edd793bce5\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"batchBalanceOf(address[],address[])":{"notice":"Fetches, for a list of _users and _tokens (ETH included with mock address), the balances"}},"notice":"Implements a logic of getting multiple tokens balance for one user address","version":1}}},"contracts/misc/WrappedTokenGatewayV3.sol":{"WrappedTokenGatewayV3":{"abi":[{"inputs":[{"internalType":"address","name":"weth","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"contract IPool","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"borrowETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"depositETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyEtherTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyTokenTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getWETHAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rateMode","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"repayETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"permitV","type":"uint8"},{"internalType":"bytes32","name":"permitR","type":"bytes32"},{"internalType":"bytes32","name":"permitS","type":"bytes32"}],"name":"withdrawETHWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"details":"This contract is an upgrade of the WrappedTokenGatewayV3 contract, with immutable pool address. This contract keeps the same interface of the deprecated WrappedTokenGatewayV3 contract.","kind":"dev","methods":{"borrowETH(address,uint256,uint256,uint16)":{"details":"borrow WETH, unwraps to ETH and send both the ETH and DebtTokens to msg.sender, via `approveDelegation` and onBehalf argument in `Pool.borrow`.","params":{"amount":"the amount of ETH to borrow","interestRateMode":"the interest rate mode","referralCode":"integrators are assigned a referral code and can potentially receive rewards"}},"constructor":{"details":"Sets the WETH address and the PoolAddressesProvider address. Infinite approves pool.","params":{"owner":"Address of the owner of this contract*","weth":"Address of the Wrapped Ether contract"}},"depositETH(address,address,uint16)":{"details":"deposits WETH into the reserve, using native ETH. A corresponding amount of the overlying asset (aTokens) is minted.","params":{"onBehalfOf":"address of the user who will receive the aTokens representing the deposit","referralCode":"integrators are assigned a referral code and can potentially receive rewards.*"}},"emergencyEtherTransfer(address,uint256)":{"details":"transfer native Ether from the utility contract, for native Ether recovery in case of stuck Ether due to selfdestructs or ether transfers to the pre-computed contract address before deployment.","params":{"amount":"amount to send","to":"recipient of the transfer"}},"emergencyTokenTransfer(address,address,uint256)":{"details":"transfer ERC20 from the utility contract, for ERC20 recovery in case of stuck tokens due direct transfers to the contract address.","params":{"amount":"amount to send","to":"recipient of the transfer","token":"token to transfer"}},"getWETHAddress()":{"details":"Get WETH address used by WrappedTokenGatewayV3"},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"repayETH(address,uint256,uint256,address)":{"details":"repays a borrow on the WETH reserve, for the specified amount (or for the whole amount, if uint256(-1) is specified).","params":{"amount":"the amount to repay, or uint256(-1) if the user wants to repay everything","onBehalfOf":"the address for which msg.sender is repaying","rateMode":"the rate mode to repay"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"withdrawETH(address,uint256,address)":{"details":"withdraws the WETH _reserves of msg.sender.","params":{"amount":"amount of aWETH to withdraw and receive native ETH","to":"address of the user who will receive native ETH"}},"withdrawETHWithPermit(address,uint256,address,uint256,uint8,bytes32,bytes32)":{"details":"withdraws the WETH _reserves of msg.sender.","params":{"amount":"amount of aWETH to withdraw and receive native ETH","deadline":"validity deadline of permit and so depositWithPermit signature","permitR":"R parameter of ERC712 permit sig","permitS":"S parameter of ERC712 permit sig","permitV":"V parameter of ERC712 permit sig","to":"address of the user who will receive native ETH"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_1500":{"entryPoint":null,"id":1500,"parameterSlots":0,"returnSlots":0},"@_33962":{"entryPoint":null,"id":33962,"parameterSlots":3,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@transferOwnership_1572":{"entryPoint":259,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_addresst_addresst_contract$_IPool_$4860_fromMemory":{"entryPoint":557,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":641,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"validator_revert_address":{"entryPoint":532,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2014:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"59:86:201","statements":[{"body":{"nodeType":"YulBlock","src":"123:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"132:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"135:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"125:6:201"},"nodeType":"YulFunctionCall","src":"125:12:201"},"nodeType":"YulExpressionStatement","src":"125:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"82:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"93:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"108:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"113:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"104:3:201"},"nodeType":"YulFunctionCall","src":"104:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"117:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"100:3:201"},"nodeType":"YulFunctionCall","src":"100:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"89:3:201"},"nodeType":"YulFunctionCall","src":"89:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"79:2:201"},"nodeType":"YulFunctionCall","src":"79:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"72:6:201"},"nodeType":"YulFunctionCall","src":"72:50:201"},"nodeType":"YulIf","src":"69:70:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"48:5:201","type":""}],"src":"14:131:201"},{"body":{"nodeType":"YulBlock","src":"279:404:201","statements":[{"body":{"nodeType":"YulBlock","src":"325:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"334:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"337:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"327:6:201"},"nodeType":"YulFunctionCall","src":"327:12:201"},"nodeType":"YulExpressionStatement","src":"327:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"300:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"309:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"296:3:201"},"nodeType":"YulFunctionCall","src":"296:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"321:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"292:3:201"},"nodeType":"YulFunctionCall","src":"292:32:201"},"nodeType":"YulIf","src":"289:52:201"},{"nodeType":"YulVariableDeclaration","src":"350:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"369:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"363:5:201"},"nodeType":"YulFunctionCall","src":"363:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"354:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"413:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"388:24:201"},"nodeType":"YulFunctionCall","src":"388:31:201"},"nodeType":"YulExpressionStatement","src":"388:31:201"},{"nodeType":"YulAssignment","src":"428:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"438:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"428:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"452:40:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"477:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"488:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"473:3:201"},"nodeType":"YulFunctionCall","src":"473:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"467:5:201"},"nodeType":"YulFunctionCall","src":"467:25:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"456:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"526:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"501:24:201"},"nodeType":"YulFunctionCall","src":"501:33:201"},"nodeType":"YulExpressionStatement","src":"501:33:201"},{"nodeType":"YulAssignment","src":"543:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"553:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"543:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"569:40:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"594:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"605:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"590:3:201"},"nodeType":"YulFunctionCall","src":"590:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"584:5:201"},"nodeType":"YulFunctionCall","src":"584:25:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"573:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"643:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"618:24:201"},"nodeType":"YulFunctionCall","src":"618:33:201"},"nodeType":"YulExpressionStatement","src":"618:33:201"},{"nodeType":"YulAssignment","src":"660:17:201","value":{"name":"value_2","nodeType":"YulIdentifier","src":"670:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"660:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_contract$_IPool_$4860_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"229:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"240:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"252:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"260:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"268:6:201","type":""}],"src":"150:533:201"},{"body":{"nodeType":"YulBlock","src":"817:145:201","statements":[{"nodeType":"YulAssignment","src":"827:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"839:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"850:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"835:3:201"},"nodeType":"YulFunctionCall","src":"835:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"827:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"869:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"884:6:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"900:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"905:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"896:3:201"},"nodeType":"YulFunctionCall","src":"896:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"909:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"892:3:201"},"nodeType":"YulFunctionCall","src":"892:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"880:3:201"},"nodeType":"YulFunctionCall","src":"880:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"862:6:201"},"nodeType":"YulFunctionCall","src":"862:51:201"},"nodeType":"YulExpressionStatement","src":"862:51:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"933:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"944:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"929:3:201"},"nodeType":"YulFunctionCall","src":"929:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"949:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"922:6:201"},"nodeType":"YulFunctionCall","src":"922:34:201"},"nodeType":"YulExpressionStatement","src":"922:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"778:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"789:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"797:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"808:4:201","type":""}],"src":"688:274:201"},{"body":{"nodeType":"YulBlock","src":"1045:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"1091:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1100:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1103:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1093:6:201"},"nodeType":"YulFunctionCall","src":"1093:12:201"},"nodeType":"YulExpressionStatement","src":"1093:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1066:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1075:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1062:3:201"},"nodeType":"YulFunctionCall","src":"1062:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1087:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1058:3:201"},"nodeType":"YulFunctionCall","src":"1058:32:201"},"nodeType":"YulIf","src":"1055:52:201"},{"nodeType":"YulVariableDeclaration","src":"1116:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1135:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1129:5:201"},"nodeType":"YulFunctionCall","src":"1129:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1120:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1198:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1207:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1210:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1200:6:201"},"nodeType":"YulFunctionCall","src":"1200:12:201"},"nodeType":"YulExpressionStatement","src":"1200:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1167:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1188:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1181:6:201"},"nodeType":"YulFunctionCall","src":"1181:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1174:6:201"},"nodeType":"YulFunctionCall","src":"1174:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1164:2:201"},"nodeType":"YulFunctionCall","src":"1164:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1157:6:201"},"nodeType":"YulFunctionCall","src":"1157:40:201"},"nodeType":"YulIf","src":"1154:60:201"},{"nodeType":"YulAssignment","src":"1223:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1233:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1223:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1011:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1022:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1034:6:201","type":""}],"src":"967:277:201"},{"body":{"nodeType":"YulBlock","src":"1423:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1440:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1451:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1433:6:201"},"nodeType":"YulFunctionCall","src":"1433:21:201"},"nodeType":"YulExpressionStatement","src":"1433:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1474:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1485:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1470:3:201"},"nodeType":"YulFunctionCall","src":"1470:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"1490:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1463:6:201"},"nodeType":"YulFunctionCall","src":"1463:30:201"},"nodeType":"YulExpressionStatement","src":"1463:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1513:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1524:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1509:3:201"},"nodeType":"YulFunctionCall","src":"1509:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"1529:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1502:6:201"},"nodeType":"YulFunctionCall","src":"1502:62:201"},"nodeType":"YulExpressionStatement","src":"1502:62:201"},{"nodeType":"YulAssignment","src":"1573:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1585:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1596:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1581:3:201"},"nodeType":"YulFunctionCall","src":"1581:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1573:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1400:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1414:4:201","type":""}],"src":"1249:356:201"},{"body":{"nodeType":"YulBlock","src":"1784:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1801:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1812:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1794:6:201"},"nodeType":"YulFunctionCall","src":"1794:21:201"},"nodeType":"YulExpressionStatement","src":"1794:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1835:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1846:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1831:3:201"},"nodeType":"YulFunctionCall","src":"1831:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"1851:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1824:6:201"},"nodeType":"YulFunctionCall","src":"1824:30:201"},"nodeType":"YulExpressionStatement","src":"1824:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1874:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1885:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1870:3:201"},"nodeType":"YulFunctionCall","src":"1870:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"1890:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1863:6:201"},"nodeType":"YulFunctionCall","src":"1863:62:201"},"nodeType":"YulExpressionStatement","src":"1863:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1945:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1956:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1941:3:201"},"nodeType":"YulFunctionCall","src":"1941:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"1961:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1934:6:201"},"nodeType":"YulFunctionCall","src":"1934:36:201"},"nodeType":"YulExpressionStatement","src":"1934:36:201"},{"nodeType":"YulAssignment","src":"1979:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1991:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2002:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1987:3:201"},"nodeType":"YulFunctionCall","src":"1987:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1979:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1761:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1775:4:201","type":""}],"src":"1610:402:201"}]},"contents":"{\n    { }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_contract$_IPool_$4860_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := mload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60c06040523480156200001157600080fd5b50604051620022673803806200226783398101604081905262000034916200022d565b600080546001600160a01b0319163390811782556040519091829160008051602062002247833981519152908290a3506001600160a01b03808416608052811660a052620000828262000103565b60405163095ea7b360e01b81526001600160a01b038281166004830152600019602483015284169063095ea7b3906044016020604051808303816000875af1158015620000d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f9919062000281565b50505050620002ac565b6000546001600160a01b03163314620001635760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b038116620001ca5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200015a565b600080546040516001600160a01b03808516939216916000805160206200224783398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811681146200022a57600080fd5b50565b6000806000606084860312156200024357600080fd5b8351620002508162000214565b6020850151909350620002638162000214565b6040850151909250620002768162000214565b809150509250925092565b6000602082840312156200029457600080fd5b81518015158114620002a557600080fd5b9392505050565b60805160a051611ee362000364600039600081816103bb015281816105fa0152818161078b0152818161086a01528181610ace01528181610d1301528181610f42015261123101526000818160dd015281816102c70152818161038801528181610504015281816105bd015281816106920152818161074b01528181610824015281816108f301528181610aa301528181610cde01528181610db001528181610f17015281816111fc01526112ce0152611ee36000f3fe6080604052600436106100c05760003560e01c80638da5cb5b11610074578063d4c40b6c1161004e578063d4c40b6c146102eb578063eed88b8d1461030b578063f2fde38b1461032b5761016b565b80638da5cb5b14610248578063a3d5b25514610298578063affa8817146102b85761016b565b806366514c97116100a557806366514c97146101f3578063715018a61461021357806380500d20146102285761016b565b806302c5fcf8146101cd578063474cf53d146101e05761016b565b3661016b573373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610169576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f52656365697665206e6f7420616c6c6f7765640000000000000000000000000060448201526064015b60405180910390fd5b005b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f46616c6c6261636b206e6f7420616c6c6f7765640000000000000000000000006044820152606401610160565b6101696101db36600461197a565b61034b565b6101696101ee3660046119d4565b610690565b3480156101ff57600080fd5b5061016961020e366004611a1f565b6107e7565b34801561021f57600080fd5b50610169610976565b34801561023457600080fd5b50610169610243366004611a5e565b610a66565b34801561025457600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156102a457600080fd5b506101696102b3366004611a95565b610e33565b3480156102c457600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061026f565b3480156102f757600080fd5b50610169610306366004611ad6565b610eda565b34801561031757600080fd5b50610169610326366004611b4d565b611355565b34801561033757600080fd5b50610169610346366004611b79565b6113e4565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152600091829161042c9185917f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa158015610403573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104279190611ca7565b611595565b90925090506000600185600281111561044757610447611dca565b600281111561045857610458611dca565b146104635781610465565b825b9050808610156104725750845b80341015610502576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f6d73672e76616c7565206973206c657373207468616e2072657061796d656e7460448201527f20616d6f756e74000000000000000000000000000000000000000000000000006064820152608401610160565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561056a57600080fd5b505af115801561057e573d6000803e3d6000fd5b50506040517f573ade8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152346024830152604482018a905288811660648301527f000000000000000000000000000000000000000000000000000000000000000016935063573ade81925060840190506020604051808303816000875af1158015610647573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066b9190611df9565b508034111561068757610687336106828334611e12565b6116d2565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156106f857600080fd5b505af115801561070c573d6000803e3d6000fd5b50506040517fe8eda9df00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152346024830152868116604483015261ffff861660648301527f000000000000000000000000000000000000000000000000000000000000000016935063e8eda9df92506084019050600060405180830381600087803b1580156107d357600080fd5b505af1158015610687573d6000803e3d6000fd5b6040517fa415bcad00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018590526044820184905261ffff831660648301523360848301527f0000000000000000000000000000000000000000000000000000000000000000169063a415bcad9060a401600060405180830381600087803b1580156108ae57600080fd5b505af11580156108c2573d6000803e3d6000fd5b50506040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018690527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169250632e1a7d4d9150602401600060405180830381600087803b15801561094e57600080fd5b505af1158015610962573d6000803e3d6000fd5b5050505061097033846116d2565b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610160565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906335ea6a75906024016101e060405180830381865afa158015610b18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3c9190611ca7565b61010001516040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd59190611df9565b9050837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811415610c035750805b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810182905273ffffffffffffffffffffffffffffffffffffffff8416906323b872dd906064016020604051808303816000875af1158015610c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca09190611e50565b506040517f69328dec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390523060448301527f000000000000000000000000000000000000000000000000000000000000000016906369328dec906064016020604051808303816000875af1158015610d5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d809190611df9565b506040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610e0957600080fd5b505af1158015610e1d573d6000803e3d6000fd5b50505050610e2b84826116d2565b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610eb4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610160565b610ed573ffffffffffffffffffffffffffffffffffffffff841683836117b6565b505050565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906335ea6a75906024016101e060405180830381865afa158015610f8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb09190611ca7565b61010001516040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611025573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110499190611df9565b9050877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114156110775750805b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018a90526064810188905260ff8716608482015260a4810186905260c4810185905273ffffffffffffffffffffffffffffffffffffffff84169063d505accf9060e401600060405180830381600087803b15801561110957600080fd5b505af115801561111d573d6000803e3d6000fd5b50506040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810184905273ffffffffffffffffffffffffffffffffffffffff861692506323b872dd91506064016020604051808303816000875af115801561119a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111be9190611e50565b506040517f69328dec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390523060448301527f000000000000000000000000000000000000000000000000000000000000000016906369328dec906064016020604051808303816000875af115801561127a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129e9190611df9565b506040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b15801561132757600080fd5b505af115801561133b573d6000803e3d6000fd5b5050505061134988826116d2565b50505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146113d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610160565b6113e082826116d2565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610160565b73ffffffffffffffffffffffffffffffffffffffff8116611508576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610160565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6101208101516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260009283929116906370a0823190602401602060405180830381865afa15801561160c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116309190611df9565b6101408401516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152909116906370a0823190602401602060405180830381865afa1580156116a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c79190611df9565b915091509250929050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040516117099190611e72565b60006040518083038185875af1925050503d8060008114611746576040519150601f19603f3d011682016040523d82523d6000602084013e61174b565b606091505b5050905080610ed5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152606401610160565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1611819573d6000803e3d6000fd5b5061182384611889565b610970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e7366657200000000000000000000006044820152606401610160565b60006118c9565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156119085760208114611942576119037f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f611890565b61194f565b823b611939576119397f475076323a206e6f74206120636f6e74726163740000000000000000000000006014611890565b6001915061194f565b3d6000803e600051151591505b50919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461197757600080fd5b50565b6000806000806080858703121561199057600080fd5b843561199b81611955565b9350602085013592506040850135915060608501356119b981611955565b939692955090935050565b61ffff8116811461197757600080fd5b6000806000606084860312156119e957600080fd5b83356119f481611955565b92506020840135611a0481611955565b91506040840135611a14816119c4565b809150509250925092565b60008060008060808587031215611a3557600080fd5b8435611a4081611955565b9350602085013592506040850135915060608501356119b9816119c4565b600080600060608486031215611a7357600080fd5b8335611a7e81611955565b9250602084013591506040840135611a1481611955565b600080600060608486031215611aaa57600080fd5b8335611ab581611955565b92506020840135611ac581611955565b929592945050506040919091013590565b600080600080600080600060e0888a031215611af157600080fd5b8735611afc81611955565b9650602088013595506040880135611b1381611955565b945060608801359350608088013560ff81168114611b3057600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611b6057600080fd5b8235611b6b81611955565b946020939093013593505050565b600060208284031215611b8b57600080fd5b8135611b9681611955565b9392505050565b6040516101e0810167ffffffffffffffff81118282101715611be8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b600060208284031215611c0057600080fd5b6040516020810181811067ffffffffffffffff82111715611c4a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529151825250919050565b80516fffffffffffffffffffffffffffffffff81168114611c7757600080fd5b919050565b805164ffffffffff81168114611c7757600080fd5b8051611c77816119c4565b8051611c7781611955565b60006101e08284031215611cba57600080fd5b611cc2611b9d565b611ccc8484611bee565b8152611cda60208401611c57565b6020820152611ceb60408401611c57565b6040820152611cfc60608401611c57565b6060820152611d0d60808401611c57565b6080820152611d1e60a08401611c57565b60a0820152611d2f60c08401611c7c565b60c0820152611d4060e08401611c91565b60e0820152610100611d53818501611c9c565b90820152610120611d65848201611c9c565b90820152610140611d77848201611c9c565b90820152610160611d89848201611c9c565b90820152610180611d9b848201611c57565b908201526101a0611dad848201611c57565b908201526101c0611dbf848201611c57565b908201529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611e0b57600080fd5b5051919050565b600082821015611e4b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b600060208284031215611e6257600080fd5b81518015158114611b9657600080fd5b6000825160005b81811015611e935760208186018101518583015201611e79565b81811115611ea2576000828501525b50919091019291505056fea2646970667358221220105b0b7b2d0f64d6c6054a3e256ba499cd2e5e950e74b600ab1b0b55c00ff7c264736f6c634300080a00338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","opcodes":"PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x2267 CODESIZE SUB DUP1 PUSH3 0x2267 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x22D JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 DUP3 SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x2247 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 DUP3 SWAP1 LOG3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x80 MSTORE DUP2 AND PUSH1 0xA0 MSTORE PUSH3 0x82 DUP3 PUSH3 0x103 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x95EA7B3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 NOT PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH3 0xD3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0xF9 SWAP2 SWAP1 PUSH3 0x281 JUMP JUMPDEST POP POP POP POP PUSH3 0x2AC JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH3 0x163 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x1CA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x15A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x2247 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 LOG3 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 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x22A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x243 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH3 0x250 DUP2 PUSH3 0x214 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP4 POP PUSH3 0x263 DUP2 PUSH3 0x214 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP3 POP PUSH3 0x276 DUP2 PUSH3 0x214 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x294 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x2A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH2 0x1EE3 PUSH3 0x364 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x3BB ADD MSTORE DUP2 DUP2 PUSH2 0x5FA ADD MSTORE DUP2 DUP2 PUSH2 0x78B ADD MSTORE DUP2 DUP2 PUSH2 0x86A ADD MSTORE DUP2 DUP2 PUSH2 0xACE ADD MSTORE DUP2 DUP2 PUSH2 0xD13 ADD MSTORE DUP2 DUP2 PUSH2 0xF42 ADD MSTORE PUSH2 0x1231 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH1 0xDD ADD MSTORE DUP2 DUP2 PUSH2 0x2C7 ADD MSTORE DUP2 DUP2 PUSH2 0x388 ADD MSTORE DUP2 DUP2 PUSH2 0x504 ADD MSTORE DUP2 DUP2 PUSH2 0x5BD ADD MSTORE DUP2 DUP2 PUSH2 0x692 ADD MSTORE DUP2 DUP2 PUSH2 0x74B ADD MSTORE DUP2 DUP2 PUSH2 0x824 ADD MSTORE DUP2 DUP2 PUSH2 0x8F3 ADD MSTORE DUP2 DUP2 PUSH2 0xAA3 ADD MSTORE DUP2 DUP2 PUSH2 0xCDE ADD MSTORE DUP2 DUP2 PUSH2 0xDB0 ADD MSTORE DUP2 DUP2 PUSH2 0xF17 ADD MSTORE DUP2 DUP2 PUSH2 0x11FC ADD MSTORE PUSH2 0x12CE ADD MSTORE PUSH2 0x1EE3 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC0 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0x74 JUMPI DUP1 PUSH4 0xD4C40B6C GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xD4C40B6C EQ PUSH2 0x2EB JUMPI DUP1 PUSH4 0xEED88B8D EQ PUSH2 0x30B JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x32B JUMPI PUSH2 0x16B JUMP JUMPDEST DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x248 JUMPI DUP1 PUSH4 0xA3D5B255 EQ PUSH2 0x298 JUMPI DUP1 PUSH4 0xAFFA8817 EQ PUSH2 0x2B8 JUMPI PUSH2 0x16B JUMP JUMPDEST DUP1 PUSH4 0x66514C97 GT PUSH2 0xA5 JUMPI DUP1 PUSH4 0x66514C97 EQ PUSH2 0x1F3 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x213 JUMPI DUP1 PUSH4 0x80500D20 EQ PUSH2 0x228 JUMPI PUSH2 0x16B JUMP JUMPDEST DUP1 PUSH4 0x2C5FCF8 EQ PUSH2 0x1CD JUMPI DUP1 PUSH4 0x474CF53D EQ PUSH2 0x1E0 JUMPI PUSH2 0x16B JUMP JUMPDEST CALLDATASIZE PUSH2 0x16B JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x169 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x52656365697665206E6F7420616C6C6F77656400000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST STOP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46616C6C6261636B206E6F7420616C6C6F776564000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x160 JUMP JUMPDEST PUSH2 0x169 PUSH2 0x1DB CALLDATASIZE PUSH1 0x4 PUSH2 0x197A JUMP JUMPDEST PUSH2 0x34B JUMP JUMPDEST PUSH2 0x169 PUSH2 0x1EE CALLDATASIZE PUSH1 0x4 PUSH2 0x19D4 JUMP JUMPDEST PUSH2 0x690 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x169 PUSH2 0x20E CALLDATASIZE PUSH1 0x4 PUSH2 0x1A1F JUMP JUMPDEST PUSH2 0x7E7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x169 PUSH2 0x976 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x234 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x169 PUSH2 0x243 CALLDATASIZE PUSH1 0x4 PUSH2 0x1A5E JUMP JUMPDEST PUSH2 0xA66 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x254 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x169 PUSH2 0x2B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1A95 JUMP JUMPDEST PUSH2 0xE33 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0x0 PUSH2 0x26F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x169 PUSH2 0x306 CALLDATASIZE PUSH1 0x4 PUSH2 0x1AD6 JUMP JUMPDEST PUSH2 0xEDA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x317 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x169 PUSH2 0x326 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B4D JUMP JUMPDEST PUSH2 0x1355 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x337 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x169 PUSH2 0x346 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B79 JUMP JUMPDEST PUSH2 0x13E4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH2 0x42C SWAP2 DUP6 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x403 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x427 SWAP2 SWAP1 PUSH2 0x1CA7 JUMP JUMPDEST PUSH2 0x1595 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP6 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x447 JUMPI PUSH2 0x447 PUSH2 0x1DCA JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x458 JUMPI PUSH2 0x458 PUSH2 0x1DCA JUMP JUMPDEST EQ PUSH2 0x463 JUMPI DUP2 PUSH2 0x465 JUMP JUMPDEST DUP3 JUMPDEST SWAP1 POP DUP1 DUP7 LT ISZERO PUSH2 0x472 JUMPI POP DUP5 JUMPDEST DUP1 CALLVALUE LT ISZERO PUSH2 0x502 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6D73672E76616C7565206973206C657373207468616E2072657061796D656E74 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x20616D6F756E7400000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x160 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x56A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x57E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x573ADE8100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE CALLVALUE PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP11 SWAP1 MSTORE DUP9 DUP2 AND PUSH1 0x64 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP4 POP PUSH4 0x573ADE81 SWAP3 POP PUSH1 0x84 ADD SWAP1 POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 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 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x66B SWAP2 SWAP1 PUSH2 0x1DF9 JUMP JUMPDEST POP DUP1 CALLVALUE GT ISZERO PUSH2 0x687 JUMPI PUSH2 0x687 CALLER PUSH2 0x682 DUP4 CALLVALUE PUSH2 0x1E12 JUMP JUMPDEST PUSH2 0x16D2 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 CALLVALUE PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x70C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xE8EDA9DF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE CALLVALUE PUSH1 0x24 DUP4 ADD MSTORE DUP7 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH2 0xFFFF DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP4 POP PUSH4 0xE8EDA9DF SWAP3 POP PUSH1 0x84 ADD SWAP1 POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x687 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA415BCAD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD DUP5 SWAP1 MSTORE PUSH2 0xFFFF DUP4 AND PUSH1 0x64 DUP4 ADD MSTORE CALLER PUSH1 0x84 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xA415BCAD SWAP1 PUSH1 0xA4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x8C2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x2E1A7D4D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP7 SWAP1 MSTORE PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 POP PUSH4 0x2E1A7D4D SWAP2 POP PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x94E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x962 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x970 CALLER DUP5 PUSH2 0x16D2 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x9F7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x160 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB18 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB3C SWAP2 SWAP1 PUSH2 0x1CA7 JUMP JUMPDEST PUSH2 0x100 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBB1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x1DF9 JUMP JUMPDEST SWAP1 POP DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 EQ ISZERO PUSH2 0xC03 JUMPI POP DUP1 JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC7C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCA0 SWAP2 SWAP1 PUSH2 0x1E50 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x69328DEC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x69328DEC SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD5C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD80 SWAP2 SWAP1 PUSH2 0x1DF9 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x2E1A7D4D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0x2E1A7D4D SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE09 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE1D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0xE2B DUP5 DUP3 PUSH2 0x16D2 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xEB4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x160 JUMP JUMPDEST PUSH2 0xED5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP4 DUP4 PUSH2 0x17B6 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF8C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xFB0 SWAP2 SWAP1 PUSH2 0x1CA7 JUMP JUMPDEST PUSH2 0x100 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1025 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1049 SWAP2 SWAP1 PUSH2 0x1DF9 JUMP JUMPDEST SWAP1 POP DUP8 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 EQ ISZERO PUSH2 0x1077 JUMPI POP DUP1 JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP11 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xFF DUP8 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP6 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1109 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x111D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP3 POP PUSH4 0x23B872DD SWAP2 POP PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x119A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11BE SWAP2 SWAP1 PUSH2 0x1E50 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x69328DEC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x69328DEC SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x127A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x129E SWAP2 SWAP1 PUSH2 0x1DF9 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x2E1A7D4D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0x2E1A7D4D SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1327 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x133B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x1349 DUP9 DUP3 PUSH2 0x16D2 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x13D6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x160 JUMP JUMPDEST PUSH2 0x13E0 DUP3 DUP3 PUSH2 0x16D2 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1465 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x160 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x1508 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x160 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x120 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x160C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1630 SWAP2 SWAP1 PUSH2 0x1DF9 JUMP JUMPDEST PUSH2 0x140 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16A3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16C7 SWAP2 SWAP1 PUSH2 0x1DF9 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 DUP4 SWAP1 PUSH1 0x40 MLOAD PUSH2 0x1709 SWAP2 SWAP1 PUSH2 0x1E72 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1746 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 0x174B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0xED5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4554485F5452414E534645525F4641494C454400000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x160 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x1819 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1823 DUP5 PUSH2 0x1889 JUMP JUMPDEST PUSH2 0x970 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x160 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x18C9 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x1908 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x1942 JUMPI PUSH2 0x1903 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x1890 JUMP JUMPDEST PUSH2 0x194F JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x1939 JUMPI PUSH2 0x1939 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x1890 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x194F JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1977 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1990 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x199B DUP2 PUSH2 0x1955 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x19B9 DUP2 PUSH2 0x1955 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x1977 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x19E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x19F4 DUP2 PUSH2 0x1955 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1A04 DUP2 PUSH2 0x1955 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x1A14 DUP2 PUSH2 0x19C4 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1A35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x1A40 DUP2 PUSH2 0x1955 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x19B9 DUP2 PUSH2 0x19C4 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1A73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1A7E DUP2 PUSH2 0x1955 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x1A14 DUP2 PUSH2 0x1955 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1AAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1AB5 DUP2 PUSH2 0x1955 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1AC5 DUP2 PUSH2 0x1955 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 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1AF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x1AFC DUP2 PUSH2 0x1955 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH2 0x1B13 DUP2 PUSH2 0x1955 JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1B30 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1B60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1B6B DUP2 PUSH2 0x1955 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 0x1B8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1B96 DUP2 PUSH2 0x1955 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1BE8 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1C00 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1C4A JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1C77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1C77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x1C77 DUP2 PUSH2 0x19C4 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x1C77 DUP2 PUSH2 0x1955 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1CBA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1CC2 PUSH2 0x1B9D JUMP JUMPDEST PUSH2 0x1CCC DUP5 DUP5 PUSH2 0x1BEE JUMP JUMPDEST DUP2 MSTORE PUSH2 0x1CDA PUSH1 0x20 DUP5 ADD PUSH2 0x1C57 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x1CEB PUSH1 0x40 DUP5 ADD PUSH2 0x1C57 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x1CFC PUSH1 0x60 DUP5 ADD PUSH2 0x1C57 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x1D0D PUSH1 0x80 DUP5 ADD PUSH2 0x1C57 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x1D1E PUSH1 0xA0 DUP5 ADD PUSH2 0x1C57 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x1D2F PUSH1 0xC0 DUP5 ADD PUSH2 0x1C7C JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1D40 PUSH1 0xE0 DUP5 ADD PUSH2 0x1C91 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x1D53 DUP2 DUP6 ADD PUSH2 0x1C9C JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x1D65 DUP5 DUP3 ADD PUSH2 0x1C9C JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x1D77 DUP5 DUP3 ADD PUSH2 0x1C9C JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x1D89 DUP5 DUP3 ADD PUSH2 0x1C9C JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x1D9B DUP5 DUP3 ADD PUSH2 0x1C57 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x1DAD DUP5 DUP3 ADD PUSH2 0x1C57 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x1DBF DUP5 DUP3 ADD PUSH2 0x1C57 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1E0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x1E4B JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1E62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1B96 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1E93 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x1E79 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x1EA2 JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LT JUMPDEST SIGNEXTEND PUSH28 0x2D0F64D6C6054A3E256BA499CD2E5E950E74B600AB1B0B55C00FF7C2 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER DUP12 0xE0 SMOD SWAP13 MSTORE8 AND MSIZE EQ SGT DIFFICULTY 0xCD 0x1F 0xD0 LOG4 CALLCODE DUP5 NOT 0x49 PUSH32 0x9722A3DAAFE3B4186F6B6457E000000000000000000000000000000000000000 ","sourceMap":"1246:6984:157:-:0;;;1767:188;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;835:17:11;873:18;;-1:-1:-1;;;;;;873:18:11;678:10:4;873:18:11;;;;;902:43;;678:10:4;;;;-1:-1:-1;;;;;;;;;;;902:43:11;835:17;;902:43;-1:-1:-1;;;;;;1826:18:157;;;;;1850:11;;;;1867:24;1885:5;1867:17;:24::i;:::-;1897:53;;-1:-1:-1;;;1897:53:157;;-1:-1:-1;;;;;880:32:201;;;1897:53:157;;;862:51:201;-1:-1:-1;;929:18:201;;;922:34;1897:19:157;;;;;835:18:201;;1897:53:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1767:188;;;1246:6984;;1875:226:11;1204:6;;-1:-1:-1;;;;;1204:6:11;678:10:4;1204:22:11;1196:67;;;;-1:-1:-1;;;1196:67:11;;1451:2:201;1196:67:11;;;1433:21:201;;;1470:18;;;1463:30;1529:34;1509:18;;;1502:62;1581:18;;1196:67:11;;;;;;;;;-1:-1:-1;;;;;1959:22:11;::::1;1951:73;;;::::0;-1:-1:-1;;;1951:73:11;;1812:2:201;1951:73:11::1;::::0;::::1;1794:21:201::0;1851:2;1831:18;;;1824:30;1890:34;1870:18;;;1863:62;-1:-1:-1;;;1941:18:201;;;1934:36;1987:19;;1951:73:11::1;1610:402:201::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;-1:-1:-1;;;;;2035:38:11;;::::1;::::0;2056:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;2035:38:11;::::1;2079:6;:17:::0;;-1:-1:-1;;;;;;2079:17:11::1;-1:-1:-1::0;;;;;2079:17:11;;;::::1;::::0;;;::::1;::::0;;1875:226::o;14:131:201:-;-1:-1:-1;;;;;89:31:201;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:533::-;252:6;260;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;369:9;363:16;388:31;413:5;388:31;:::i;:::-;488:2;473:18;;467:25;438:5;;-1:-1:-1;501:33:201;467:25;501:33;:::i;:::-;605:2;590:18;;584:25;553:7;;-1:-1:-1;618:33:201;584:25;618:33;:::i;:::-;670:7;660:17;;;150:533;;;;;:::o;967:277::-;1034:6;1087:2;1075:9;1066:7;1062:23;1058:32;1055:52;;;1103:1;1100;1093:12;1055:52;1135:9;1129:16;1188:5;1181:13;1174:21;1167:5;1164:32;1154:60;;1210:1;1207;1200:12;1154:60;1233:5;967:277;-1:-1:-1;;;967:277:201:o;1610:402::-;1246:6984:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_34421":{"entryPoint":null,"id":34421,"parameterSlots":0,"returnSlots":0},"@_34430":{"entryPoint":null,"id":34430,"parameterSlots":0,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_safeTransferETH_34356":{"entryPoint":5842,"id":34356,"parameterSlots":2,"returnSlots":0},"@borrowETH_34218":{"entryPoint":2023,"id":34218,"parameterSlots":4,"returnSlots":0},"@depositETH_33995":{"entryPoint":1680,"id":33995,"parameterSlots":3,"returnSlots":0},"@emergencyEtherTransfer_34393":{"entryPoint":4949,"id":34393,"parameterSlots":2,"returnSlots":0},"@emergencyTokenTransfer_34377":{"entryPoint":3635,"id":34377,"parameterSlots":3,"returnSlots":0},"@getLastTransferResult_117":{"entryPoint":6281,"id":117,"parameterSlots":1,"returnSlots":1},"@getUserCurrentDebt_31152":{"entryPoint":5525,"id":31152,"parameterSlots":2,"returnSlots":2},"@getWETHAddress_34405":{"entryPoint":null,"id":34405,"parameterSlots":0,"returnSlots":1},"@owner_1509":{"entryPoint":null,"id":1509,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_1544":{"entryPoint":2422,"id":1544,"parameterSlots":0,"returnSlots":0},"@repayETH_34178":{"entryPoint":843,"id":34178,"parameterSlots":4,"returnSlots":0},"@safeTransfer_78":{"entryPoint":6070,"id":78,"parameterSlots":3,"returnSlots":0},"@transferOwnership_1572":{"entryPoint":5092,"id":1572,"parameterSlots":1,"returnSlots":0},"@withdrawETHWithPermit_34330":{"entryPoint":3802,"id":34330,"parameterSlots":7,"returnSlots":0},"@withdrawETH_34083":{"entryPoint":2662,"id":34083,"parameterSlots":3,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":7324,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_ReserveConfigurationMap_fromMemory":{"entryPoint":7150,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":7033,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_uint16":{"entryPoint":6612,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":6805,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":6989,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256t_address":{"entryPoint":6750,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256t_addresst_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":6870,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_addresst_uint256t_uint256t_address":{"entryPoint":6522,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_uint256t_uint256t_uint16":{"entryPoint":6687,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":7760,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory":{"entryPoint":7335,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":7673,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint128_fromMemory":{"entryPoint":7255,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint16_fromMemory":{"entryPoint":7313,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint40_fromMemory":{"entryPoint":7292,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":7794,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_address_t_uint16__to_t_address_t_uint256_t_address_t_uint16__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint256_t_address__to_t_address_t_uint256_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_uint256_t_uint16_t_address__to_t_address_t_uint256_t_uint256_t_uint16_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0fbc9324f34b5b3dd5cc07188bb4ac8875999da3789a00b0de2cd5733ed30268__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_27ee2b783d4c8df49ab77e716dbb31d00957b706569e1f6344f0cb575662d45e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d383913ea1996930a2623a0d739b8fc033c734c1d71d4759d3ccba1d3a719c29__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f3cb6abf841e7654d9fcd9bcef0bf0797905f8c05be5c0ec9482725dfffa0909__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":7069,"id":null,"parameterSlots":0,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":7698,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x21":{"entryPoint":7626,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":6485,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_uint16":{"entryPoint":6596,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:15079:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"188:169:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"205:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"216:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"198:6:201"},"nodeType":"YulFunctionCall","src":"198:21:201"},"nodeType":"YulExpressionStatement","src":"198:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"239:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"250:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"235:3:201"},"nodeType":"YulFunctionCall","src":"235:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"255:2:201","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"228:6:201"},"nodeType":"YulFunctionCall","src":"228:30:201"},"nodeType":"YulExpressionStatement","src":"228:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"278:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"289:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"274:3:201"},"nodeType":"YulFunctionCall","src":"274:18:201"},{"hexValue":"52656365697665206e6f7420616c6c6f776564","kind":"string","nodeType":"YulLiteral","src":"294:21:201","type":"","value":"Receive not allowed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"267:6:201"},"nodeType":"YulFunctionCall","src":"267:49:201"},"nodeType":"YulExpressionStatement","src":"267:49:201"},{"nodeType":"YulAssignment","src":"325:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"337:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"348:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"333:3:201"},"nodeType":"YulFunctionCall","src":"333:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"325:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_27ee2b783d4c8df49ab77e716dbb31d00957b706569e1f6344f0cb575662d45e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"165:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"179:4:201","type":""}],"src":"14:343:201"},{"body":{"nodeType":"YulBlock","src":"536:170:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"553:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"564:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"546:6:201"},"nodeType":"YulFunctionCall","src":"546:21:201"},"nodeType":"YulExpressionStatement","src":"546:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"587:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"598:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"583:3:201"},"nodeType":"YulFunctionCall","src":"583:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"603:2:201","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"576:6:201"},"nodeType":"YulFunctionCall","src":"576:30:201"},"nodeType":"YulExpressionStatement","src":"576:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"626:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"637:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"622:3:201"},"nodeType":"YulFunctionCall","src":"622:18:201"},{"hexValue":"46616c6c6261636b206e6f7420616c6c6f776564","kind":"string","nodeType":"YulLiteral","src":"642:22:201","type":"","value":"Fallback not allowed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"615:6:201"},"nodeType":"YulFunctionCall","src":"615:50:201"},"nodeType":"YulExpressionStatement","src":"615:50:201"},{"nodeType":"YulAssignment","src":"674:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"686:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"697:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"682:3:201"},"nodeType":"YulFunctionCall","src":"682:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"674:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_0fbc9324f34b5b3dd5cc07188bb4ac8875999da3789a00b0de2cd5733ed30268__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"513:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"527:4:201","type":""}],"src":"362:344:201"},{"body":{"nodeType":"YulBlock","src":"756:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"843:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"852:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"855:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"845:6:201"},"nodeType":"YulFunctionCall","src":"845:12:201"},"nodeType":"YulExpressionStatement","src":"845:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"779:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"790:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"797:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"786:3:201"},"nodeType":"YulFunctionCall","src":"786:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"776:2:201"},"nodeType":"YulFunctionCall","src":"776:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"769:6:201"},"nodeType":"YulFunctionCall","src":"769:73:201"},"nodeType":"YulIf","src":"766:93:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"745:5:201","type":""}],"src":"711:154:201"},{"body":{"nodeType":"YulBlock","src":"991:404:201","statements":[{"body":{"nodeType":"YulBlock","src":"1038:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1047:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1050:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1040:6:201"},"nodeType":"YulFunctionCall","src":"1040:12:201"},"nodeType":"YulExpressionStatement","src":"1040:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1012:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1021:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1008:3:201"},"nodeType":"YulFunctionCall","src":"1008:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1033:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1004:3:201"},"nodeType":"YulFunctionCall","src":"1004:33:201"},"nodeType":"YulIf","src":"1001:53:201"},{"nodeType":"YulVariableDeclaration","src":"1063:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1089:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1076:12:201"},"nodeType":"YulFunctionCall","src":"1076:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1067:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1133:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1108:24:201"},"nodeType":"YulFunctionCall","src":"1108:31:201"},"nodeType":"YulExpressionStatement","src":"1108:31:201"},{"nodeType":"YulAssignment","src":"1148:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1158:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1148:6:201"}]},{"nodeType":"YulAssignment","src":"1172:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1199:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1210:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1195:3:201"},"nodeType":"YulFunctionCall","src":"1195:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1182:12:201"},"nodeType":"YulFunctionCall","src":"1182:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1172:6:201"}]},{"nodeType":"YulAssignment","src":"1223:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1250:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1261:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1246:3:201"},"nodeType":"YulFunctionCall","src":"1246:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1233:12:201"},"nodeType":"YulFunctionCall","src":"1233:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1223:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1274:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1306:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1317:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1302:3:201"},"nodeType":"YulFunctionCall","src":"1302:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1289:12:201"},"nodeType":"YulFunctionCall","src":"1289:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"1278:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1355:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1330:24:201"},"nodeType":"YulFunctionCall","src":"1330:33:201"},"nodeType":"YulExpressionStatement","src":"1330:33:201"},{"nodeType":"YulAssignment","src":"1372:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"1382:7:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1372:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"933:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"944:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"956:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"964:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"972:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"980:6:201","type":""}],"src":"870:525:201"},{"body":{"nodeType":"YulBlock","src":"1444:73:201","statements":[{"body":{"nodeType":"YulBlock","src":"1495:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1504:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1507:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1497:6:201"},"nodeType":"YulFunctionCall","src":"1497:12:201"},"nodeType":"YulExpressionStatement","src":"1497:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1467:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1478:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1485:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1474:3:201"},"nodeType":"YulFunctionCall","src":"1474:18:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1464:2:201"},"nodeType":"YulFunctionCall","src":"1464:29:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1457:6:201"},"nodeType":"YulFunctionCall","src":"1457:37:201"},"nodeType":"YulIf","src":"1454:57:201"}]},"name":"validator_revert_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"1433:5:201","type":""}],"src":"1400:117:201"},{"body":{"nodeType":"YulBlock","src":"1625:424:201","statements":[{"body":{"nodeType":"YulBlock","src":"1671:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1680:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1683:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1673:6:201"},"nodeType":"YulFunctionCall","src":"1673:12:201"},"nodeType":"YulExpressionStatement","src":"1673:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1646:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1655:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1642:3:201"},"nodeType":"YulFunctionCall","src":"1642:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1667:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1638:3:201"},"nodeType":"YulFunctionCall","src":"1638:32:201"},"nodeType":"YulIf","src":"1635:52:201"},{"nodeType":"YulVariableDeclaration","src":"1696:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1722:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1709:12:201"},"nodeType":"YulFunctionCall","src":"1709:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1700:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1766:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1741:24:201"},"nodeType":"YulFunctionCall","src":"1741:31:201"},"nodeType":"YulExpressionStatement","src":"1741:31:201"},{"nodeType":"YulAssignment","src":"1781:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1791:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1781:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1805:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1837:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1848:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1833:3:201"},"nodeType":"YulFunctionCall","src":"1833:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1820:12:201"},"nodeType":"YulFunctionCall","src":"1820:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"1809:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1886:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1861:24:201"},"nodeType":"YulFunctionCall","src":"1861:33:201"},"nodeType":"YulExpressionStatement","src":"1861:33:201"},{"nodeType":"YulAssignment","src":"1903:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"1913:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1903:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1929:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1961:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1972:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1957:3:201"},"nodeType":"YulFunctionCall","src":"1957:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1944:12:201"},"nodeType":"YulFunctionCall","src":"1944:32:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"1933:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"2009:7:201"}],"functionName":{"name":"validator_revert_uint16","nodeType":"YulIdentifier","src":"1985:23:201"},"nodeType":"YulFunctionCall","src":"1985:32:201"},"nodeType":"YulExpressionStatement","src":"1985:32:201"},{"nodeType":"YulAssignment","src":"2026:17:201","value":{"name":"value_2","nodeType":"YulIdentifier","src":"2036:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2026:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1575:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1586:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1598:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1606:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1614:6:201","type":""}],"src":"1522:527:201"},{"body":{"nodeType":"YulBlock","src":"2174:403:201","statements":[{"body":{"nodeType":"YulBlock","src":"2221:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2230:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2233:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2223:6:201"},"nodeType":"YulFunctionCall","src":"2223:12:201"},"nodeType":"YulExpressionStatement","src":"2223:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2195:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2204:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2191:3:201"},"nodeType":"YulFunctionCall","src":"2191:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2216:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2187:3:201"},"nodeType":"YulFunctionCall","src":"2187:33:201"},"nodeType":"YulIf","src":"2184:53:201"},{"nodeType":"YulVariableDeclaration","src":"2246:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2272:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2259:12:201"},"nodeType":"YulFunctionCall","src":"2259:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2250:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2316:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2291:24:201"},"nodeType":"YulFunctionCall","src":"2291:31:201"},"nodeType":"YulExpressionStatement","src":"2291:31:201"},{"nodeType":"YulAssignment","src":"2331:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"2341:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2331:6:201"}]},{"nodeType":"YulAssignment","src":"2355:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2382:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2393:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2378:3:201"},"nodeType":"YulFunctionCall","src":"2378:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2365:12:201"},"nodeType":"YulFunctionCall","src":"2365:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2355:6:201"}]},{"nodeType":"YulAssignment","src":"2406:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2433:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2444:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2429:3:201"},"nodeType":"YulFunctionCall","src":"2429:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2416:12:201"},"nodeType":"YulFunctionCall","src":"2416:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2406:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2457:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2489:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2500:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2485:3:201"},"nodeType":"YulFunctionCall","src":"2485:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2472:12:201"},"nodeType":"YulFunctionCall","src":"2472:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2461:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2537:7:201"}],"functionName":{"name":"validator_revert_uint16","nodeType":"YulIdentifier","src":"2513:23:201"},"nodeType":"YulFunctionCall","src":"2513:32:201"},"nodeType":"YulExpressionStatement","src":"2513:32:201"},{"nodeType":"YulAssignment","src":"2554:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"2564:7:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2554:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256t_uint16","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2116:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2127:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2139:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2147:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2155:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2163:6:201","type":""}],"src":"2054:523:201"},{"body":{"nodeType":"YulBlock","src":"2686:352:201","statements":[{"body":{"nodeType":"YulBlock","src":"2732:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2741:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2744:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2734:6:201"},"nodeType":"YulFunctionCall","src":"2734:12:201"},"nodeType":"YulExpressionStatement","src":"2734:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2707:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2716:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2703:3:201"},"nodeType":"YulFunctionCall","src":"2703:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2728:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2699:3:201"},"nodeType":"YulFunctionCall","src":"2699:32:201"},"nodeType":"YulIf","src":"2696:52:201"},{"nodeType":"YulVariableDeclaration","src":"2757:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2783:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2770:12:201"},"nodeType":"YulFunctionCall","src":"2770:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2761:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2827:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2802:24:201"},"nodeType":"YulFunctionCall","src":"2802:31:201"},"nodeType":"YulExpressionStatement","src":"2802:31:201"},{"nodeType":"YulAssignment","src":"2842:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"2852:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2842:6:201"}]},{"nodeType":"YulAssignment","src":"2866:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2893:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2904:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2889:3:201"},"nodeType":"YulFunctionCall","src":"2889:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2876:12:201"},"nodeType":"YulFunctionCall","src":"2876:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2866:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2917:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2949:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2960:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2945:3:201"},"nodeType":"YulFunctionCall","src":"2945:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2932:12:201"},"nodeType":"YulFunctionCall","src":"2932:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2921:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2998:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2973:24:201"},"nodeType":"YulFunctionCall","src":"2973:33:201"},"nodeType":"YulExpressionStatement","src":"2973:33:201"},{"nodeType":"YulAssignment","src":"3015:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3025:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3015:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2636:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2647:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2659:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2667:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2675:6:201","type":""}],"src":"2582:456:201"},{"body":{"nodeType":"YulBlock","src":"3144:125:201","statements":[{"nodeType":"YulAssignment","src":"3154:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3166:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3177:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3162:3:201"},"nodeType":"YulFunctionCall","src":"3162:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3154:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3196:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3211:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3219:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3207:3:201"},"nodeType":"YulFunctionCall","src":"3207:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3189:6:201"},"nodeType":"YulFunctionCall","src":"3189:74:201"},"nodeType":"YulExpressionStatement","src":"3189:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3113:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3124:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3135:4:201","type":""}],"src":"3043:226:201"},{"body":{"nodeType":"YulBlock","src":"3378:352:201","statements":[{"body":{"nodeType":"YulBlock","src":"3424:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3433:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3436:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3426:6:201"},"nodeType":"YulFunctionCall","src":"3426:12:201"},"nodeType":"YulExpressionStatement","src":"3426:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3399:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3408:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3395:3:201"},"nodeType":"YulFunctionCall","src":"3395:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3420:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3391:3:201"},"nodeType":"YulFunctionCall","src":"3391:32:201"},"nodeType":"YulIf","src":"3388:52:201"},{"nodeType":"YulVariableDeclaration","src":"3449:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3475:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3462:12:201"},"nodeType":"YulFunctionCall","src":"3462:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3453:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3519:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3494:24:201"},"nodeType":"YulFunctionCall","src":"3494:31:201"},"nodeType":"YulExpressionStatement","src":"3494:31:201"},{"nodeType":"YulAssignment","src":"3534:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3544:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3534:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3558:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3590:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3601:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3586:3:201"},"nodeType":"YulFunctionCall","src":"3586:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3573:12:201"},"nodeType":"YulFunctionCall","src":"3573:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"3562:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3639:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3614:24:201"},"nodeType":"YulFunctionCall","src":"3614:33:201"},"nodeType":"YulExpressionStatement","src":"3614:33:201"},{"nodeType":"YulAssignment","src":"3656:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3666:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3656:6:201"}]},{"nodeType":"YulAssignment","src":"3682:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3709:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3720:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3705:3:201"},"nodeType":"YulFunctionCall","src":"3705:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3692:12:201"},"nodeType":"YulFunctionCall","src":"3692:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3682:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3328:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3339:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3351:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3359:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3367:6:201","type":""}],"src":"3274:456:201"},{"body":{"nodeType":"YulBlock","src":"3905:659:201","statements":[{"body":{"nodeType":"YulBlock","src":"3952:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3961:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3964:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3954:6:201"},"nodeType":"YulFunctionCall","src":"3954:12:201"},"nodeType":"YulExpressionStatement","src":"3954:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3926:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3935:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3922:3:201"},"nodeType":"YulFunctionCall","src":"3922:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3947:3:201","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3918:3:201"},"nodeType":"YulFunctionCall","src":"3918:33:201"},"nodeType":"YulIf","src":"3915:53:201"},{"nodeType":"YulVariableDeclaration","src":"3977:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4003:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3990:12:201"},"nodeType":"YulFunctionCall","src":"3990:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3981:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4047:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4022:24:201"},"nodeType":"YulFunctionCall","src":"4022:31:201"},"nodeType":"YulExpressionStatement","src":"4022:31:201"},{"nodeType":"YulAssignment","src":"4062:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"4072:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4062:6:201"}]},{"nodeType":"YulAssignment","src":"4086:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4113:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4124:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4109:3:201"},"nodeType":"YulFunctionCall","src":"4109:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4096:12:201"},"nodeType":"YulFunctionCall","src":"4096:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4086:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"4137:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4169:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4180:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4165:3:201"},"nodeType":"YulFunctionCall","src":"4165:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4152:12:201"},"nodeType":"YulFunctionCall","src":"4152:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"4141:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"4218:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4193:24:201"},"nodeType":"YulFunctionCall","src":"4193:33:201"},"nodeType":"YulExpressionStatement","src":"4193:33:201"},{"nodeType":"YulAssignment","src":"4235:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"4245:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4235:6:201"}]},{"nodeType":"YulAssignment","src":"4261:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4288:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4299:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4284:3:201"},"nodeType":"YulFunctionCall","src":"4284:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4271:12:201"},"nodeType":"YulFunctionCall","src":"4271:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"4261:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"4312:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4344:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4355:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4340:3:201"},"nodeType":"YulFunctionCall","src":"4340:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4327:12:201"},"nodeType":"YulFunctionCall","src":"4327:33:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"4316:7:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4412:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4421:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4424:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4414:6:201"},"nodeType":"YulFunctionCall","src":"4414:12:201"},"nodeType":"YulExpressionStatement","src":"4414:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"4382:7:201"},{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"4395:7:201"},{"kind":"number","nodeType":"YulLiteral","src":"4404:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4391:3:201"},"nodeType":"YulFunctionCall","src":"4391:18:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4379:2:201"},"nodeType":"YulFunctionCall","src":"4379:31:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4372:6:201"},"nodeType":"YulFunctionCall","src":"4372:39:201"},"nodeType":"YulIf","src":"4369:59:201"},{"nodeType":"YulAssignment","src":"4437:17:201","value":{"name":"value_2","nodeType":"YulIdentifier","src":"4447:7:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"4437:6:201"}]},{"nodeType":"YulAssignment","src":"4463:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4490:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4501:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4486:3:201"},"nodeType":"YulFunctionCall","src":"4486:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4473:12:201"},"nodeType":"YulFunctionCall","src":"4473:33:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"4463:6:201"}]},{"nodeType":"YulAssignment","src":"4515:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4542:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4553:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4538:3:201"},"nodeType":"YulFunctionCall","src":"4538:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4525:12:201"},"nodeType":"YulFunctionCall","src":"4525:33:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"4515:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_addresst_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3823:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3834:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3846:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3854:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3862:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3870:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3878:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"3886:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"3894:6:201","type":""}],"src":"3735:829:201"},{"body":{"nodeType":"YulBlock","src":"4656:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"4702:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4711:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4714:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4704:6:201"},"nodeType":"YulFunctionCall","src":"4704:12:201"},"nodeType":"YulExpressionStatement","src":"4704:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4677:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4686:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4673:3:201"},"nodeType":"YulFunctionCall","src":"4673:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4698:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4669:3:201"},"nodeType":"YulFunctionCall","src":"4669:32:201"},"nodeType":"YulIf","src":"4666:52:201"},{"nodeType":"YulVariableDeclaration","src":"4727:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4753:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4740:12:201"},"nodeType":"YulFunctionCall","src":"4740:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4731:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4797:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4772:24:201"},"nodeType":"YulFunctionCall","src":"4772:31:201"},"nodeType":"YulExpressionStatement","src":"4772:31:201"},{"nodeType":"YulAssignment","src":"4812:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"4822:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4812:6:201"}]},{"nodeType":"YulAssignment","src":"4836:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4863:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4874:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4859:3:201"},"nodeType":"YulFunctionCall","src":"4859:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4846:12:201"},"nodeType":"YulFunctionCall","src":"4846:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4836:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4614:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4625:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4637:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4645:6:201","type":""}],"src":"4569:315:201"},{"body":{"nodeType":"YulBlock","src":"4959:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"5005:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5014:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5017:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5007:6:201"},"nodeType":"YulFunctionCall","src":"5007:12:201"},"nodeType":"YulExpressionStatement","src":"5007:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4980:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4989:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4976:3:201"},"nodeType":"YulFunctionCall","src":"4976:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"5001:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4972:3:201"},"nodeType":"YulFunctionCall","src":"4972:32:201"},"nodeType":"YulIf","src":"4969:52:201"},{"nodeType":"YulVariableDeclaration","src":"5030:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5056:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5043:12:201"},"nodeType":"YulFunctionCall","src":"5043:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5034:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5100:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"5075:24:201"},"nodeType":"YulFunctionCall","src":"5075:31:201"},"nodeType":"YulExpressionStatement","src":"5075:31:201"},{"nodeType":"YulAssignment","src":"5115:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"5125:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5115:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4925:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4936:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4948:6:201","type":""}],"src":"4889:247:201"},{"body":{"nodeType":"YulBlock","src":"5173:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5190:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5193:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5183:6:201"},"nodeType":"YulFunctionCall","src":"5183:88:201"},"nodeType":"YulExpressionStatement","src":"5183:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5287:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"5290:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5280:6:201"},"nodeType":"YulFunctionCall","src":"5280:15:201"},"nodeType":"YulExpressionStatement","src":"5280:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5311:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5314:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5304:6:201"},"nodeType":"YulFunctionCall","src":"5304:15:201"},"nodeType":"YulExpressionStatement","src":"5304:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"5141:184:201"},{"body":{"nodeType":"YulBlock","src":"5371:360:201","statements":[{"nodeType":"YulAssignment","src":"5381:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5397:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5391:5:201"},"nodeType":"YulFunctionCall","src":"5391:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"5381:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"5409:34:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"5431:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5439:3:201","type":"","value":"480"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5427:3:201"},"nodeType":"YulFunctionCall","src":"5427:16:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"5413:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"5526:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5547:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5550:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5540:6:201"},"nodeType":"YulFunctionCall","src":"5540:88:201"},"nodeType":"YulExpressionStatement","src":"5540:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5648:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"5651:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5641:6:201"},"nodeType":"YulFunctionCall","src":"5641:15:201"},"nodeType":"YulExpressionStatement","src":"5641:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5676:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5679:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5669:6:201"},"nodeType":"YulFunctionCall","src":"5669:15:201"},"nodeType":"YulExpressionStatement","src":"5669:15:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"5461:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"5473:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5458:2:201"},"nodeType":"YulFunctionCall","src":"5458:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"5497:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"5509:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5494:2:201"},"nodeType":"YulFunctionCall","src":"5494:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"5455:2:201"},"nodeType":"YulFunctionCall","src":"5455:62:201"},"nodeType":"YulIf","src":"5452:242:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5710:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"5714:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5703:6:201"},"nodeType":"YulFunctionCall","src":"5703:22:201"},"nodeType":"YulExpressionStatement","src":"5703:22:201"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"5360:6:201","type":""}],"src":"5330:401:201"},{"body":{"nodeType":"YulBlock","src":"5827:489:201","statements":[{"body":{"nodeType":"YulBlock","src":"5871:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5880:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5883:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5873:6:201"},"nodeType":"YulFunctionCall","src":"5873:12:201"},"nodeType":"YulExpressionStatement","src":"5873:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"end","nodeType":"YulIdentifier","src":"5848:3:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"5853:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5844:3:201"},"nodeType":"YulFunctionCall","src":"5844:19:201"},{"kind":"number","nodeType":"YulLiteral","src":"5865:4:201","type":"","value":"0x20"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5840:3:201"},"nodeType":"YulFunctionCall","src":"5840:30:201"},"nodeType":"YulIf","src":"5837:50:201"},{"nodeType":"YulVariableDeclaration","src":"5896:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5916:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5910:5:201"},"nodeType":"YulFunctionCall","src":"5910:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"5900:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5928:35:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"5950:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5958:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5946:3:201"},"nodeType":"YulFunctionCall","src":"5946:17:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"5932:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"6046:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6067:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6070:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6060:6:201"},"nodeType":"YulFunctionCall","src":"6060:88:201"},"nodeType":"YulExpressionStatement","src":"6060:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6168:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6171:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6161:6:201"},"nodeType":"YulFunctionCall","src":"6161:15:201"},"nodeType":"YulExpressionStatement","src":"6161:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6196:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6199:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6189:6:201"},"nodeType":"YulFunctionCall","src":"6189:15:201"},"nodeType":"YulExpressionStatement","src":"6189:15:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"5981:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"5993:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5978:2:201"},"nodeType":"YulFunctionCall","src":"5978:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6017:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"6029:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6014:2:201"},"nodeType":"YulFunctionCall","src":"6014:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"5975:2:201"},"nodeType":"YulFunctionCall","src":"5975:62:201"},"nodeType":"YulIf","src":"5972:242:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6230:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"6234:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6223:6:201"},"nodeType":"YulFunctionCall","src":"6223:22:201"},"nodeType":"YulExpressionStatement","src":"6223:22:201"},{"nodeType":"YulAssignment","src":"6254:15:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"6263:6:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"6254:5:201"}]},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"6285:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6299:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6293:5:201"},"nodeType":"YulFunctionCall","src":"6293:16:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6278:6:201"},"nodeType":"YulFunctionCall","src":"6278:32:201"},"nodeType":"YulExpressionStatement","src":"6278:32:201"}]},"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5798:9:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"5809:3:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"5817:5:201","type":""}],"src":"5736:580:201"},{"body":{"nodeType":"YulBlock","src":"6381:132:201","statements":[{"nodeType":"YulAssignment","src":"6391:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6406:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6400:5:201"},"nodeType":"YulFunctionCall","src":"6400:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"6391:5:201"}]},{"body":{"nodeType":"YulBlock","src":"6491:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6500:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6503:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6493:6:201"},"nodeType":"YulFunctionCall","src":"6493:12:201"},"nodeType":"YulExpressionStatement","src":"6493:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6435:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6446:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"6453:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6442:3:201"},"nodeType":"YulFunctionCall","src":"6442:46:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"6432:2:201"},"nodeType":"YulFunctionCall","src":"6432:57:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6425:6:201"},"nodeType":"YulFunctionCall","src":"6425:65:201"},"nodeType":"YulIf","src":"6422:85:201"}]},"name":"abi_decode_uint128_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"6360:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"6371:5:201","type":""}],"src":"6321:192:201"},{"body":{"nodeType":"YulBlock","src":"6577:110:201","statements":[{"nodeType":"YulAssignment","src":"6587:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6602:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6596:5:201"},"nodeType":"YulFunctionCall","src":"6596:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"6587:5:201"}]},{"body":{"nodeType":"YulBlock","src":"6665:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6674:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6677:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6667:6:201"},"nodeType":"YulFunctionCall","src":"6667:12:201"},"nodeType":"YulExpressionStatement","src":"6667:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6631:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6642:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"6649:12:201","type":"","value":"0xffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6638:3:201"},"nodeType":"YulFunctionCall","src":"6638:24:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"6628:2:201"},"nodeType":"YulFunctionCall","src":"6628:35:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6621:6:201"},"nodeType":"YulFunctionCall","src":"6621:43:201"},"nodeType":"YulIf","src":"6618:63:201"}]},"name":"abi_decode_uint40_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"6556:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"6567:5:201","type":""}],"src":"6518:169:201"},{"body":{"nodeType":"YulBlock","src":"6751:77:201","statements":[{"nodeType":"YulAssignment","src":"6761:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6776:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6770:5:201"},"nodeType":"YulFunctionCall","src":"6770:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"6761:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6816:5:201"}],"functionName":{"name":"validator_revert_uint16","nodeType":"YulIdentifier","src":"6792:23:201"},"nodeType":"YulFunctionCall","src":"6792:30:201"},"nodeType":"YulExpressionStatement","src":"6792:30:201"}]},"name":"abi_decode_uint16_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"6730:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"6741:5:201","type":""}],"src":"6692:136:201"},{"body":{"nodeType":"YulBlock","src":"6893:78:201","statements":[{"nodeType":"YulAssignment","src":"6903:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6918:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6912:5:201"},"nodeType":"YulFunctionCall","src":"6912:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"6903:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6959:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6934:24:201"},"nodeType":"YulFunctionCall","src":"6934:31:201"},"nodeType":"YulExpressionStatement","src":"6934:31:201"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"6872:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"6883:5:201","type":""}],"src":"6833:138:201"},{"body":{"nodeType":"YulBlock","src":"7087:1536:201","statements":[{"body":{"nodeType":"YulBlock","src":"7134:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7143:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7146:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7136:6:201"},"nodeType":"YulFunctionCall","src":"7136:12:201"},"nodeType":"YulExpressionStatement","src":"7136:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7108:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"7117:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7104:3:201"},"nodeType":"YulFunctionCall","src":"7104:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"7129:3:201","type":"","value":"480"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7100:3:201"},"nodeType":"YulFunctionCall","src":"7100:33:201"},"nodeType":"YulIf","src":"7097:53:201"},{"nodeType":"YulVariableDeclaration","src":"7159:30:201","value":{"arguments":[],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"7172:15:201"},"nodeType":"YulFunctionCall","src":"7172:17:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7163:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7205:5:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7265:9:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"7276:7:201"}],"functionName":{"name":"abi_decode_struct_ReserveConfigurationMap_fromMemory","nodeType":"YulIdentifier","src":"7212:52:201"},"nodeType":"YulFunctionCall","src":"7212:72:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7198:6:201"},"nodeType":"YulFunctionCall","src":"7198:87:201"},"nodeType":"YulExpressionStatement","src":"7198:87:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7305:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"7312:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7301:3:201"},"nodeType":"YulFunctionCall","src":"7301:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7351:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7362:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7347:3:201"},"nodeType":"YulFunctionCall","src":"7347:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"7317:29:201"},"nodeType":"YulFunctionCall","src":"7317:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7294:6:201"},"nodeType":"YulFunctionCall","src":"7294:73:201"},"nodeType":"YulExpressionStatement","src":"7294:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7387:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"7394:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7383:3:201"},"nodeType":"YulFunctionCall","src":"7383:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7433:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7444:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7429:3:201"},"nodeType":"YulFunctionCall","src":"7429:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"7399:29:201"},"nodeType":"YulFunctionCall","src":"7399:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7376:6:201"},"nodeType":"YulFunctionCall","src":"7376:73:201"},"nodeType":"YulExpressionStatement","src":"7376:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7469:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"7476:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7465:3:201"},"nodeType":"YulFunctionCall","src":"7465:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7515:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7526:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7511:3:201"},"nodeType":"YulFunctionCall","src":"7511:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"7481:29:201"},"nodeType":"YulFunctionCall","src":"7481:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7458:6:201"},"nodeType":"YulFunctionCall","src":"7458:73:201"},"nodeType":"YulExpressionStatement","src":"7458:73:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7551:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"7558:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7547:3:201"},"nodeType":"YulFunctionCall","src":"7547:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7598:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7609:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7594:3:201"},"nodeType":"YulFunctionCall","src":"7594:19:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"7564:29:201"},"nodeType":"YulFunctionCall","src":"7564:50:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7540:6:201"},"nodeType":"YulFunctionCall","src":"7540:75:201"},"nodeType":"YulExpressionStatement","src":"7540:75:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7635:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"7642:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7631:3:201"},"nodeType":"YulFunctionCall","src":"7631:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7682:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7693:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7678:3:201"},"nodeType":"YulFunctionCall","src":"7678:19:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"7648:29:201"},"nodeType":"YulFunctionCall","src":"7648:50:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7624:6:201"},"nodeType":"YulFunctionCall","src":"7624:75:201"},"nodeType":"YulExpressionStatement","src":"7624:75:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7719:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"7726:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7715:3:201"},"nodeType":"YulFunctionCall","src":"7715:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7765:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7776:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7761:3:201"},"nodeType":"YulFunctionCall","src":"7761:19:201"}],"functionName":{"name":"abi_decode_uint40_fromMemory","nodeType":"YulIdentifier","src":"7732:28:201"},"nodeType":"YulFunctionCall","src":"7732:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7708:6:201"},"nodeType":"YulFunctionCall","src":"7708:74:201"},"nodeType":"YulExpressionStatement","src":"7708:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7802:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"7809:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7798:3:201"},"nodeType":"YulFunctionCall","src":"7798:15:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7848:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7859:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7844:3:201"},"nodeType":"YulFunctionCall","src":"7844:19:201"}],"functionName":{"name":"abi_decode_uint16_fromMemory","nodeType":"YulIdentifier","src":"7815:28:201"},"nodeType":"YulFunctionCall","src":"7815:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7791:6:201"},"nodeType":"YulFunctionCall","src":"7791:74:201"},"nodeType":"YulExpressionStatement","src":"7791:74:201"},{"nodeType":"YulVariableDeclaration","src":"7874:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"7884:3:201","type":"","value":"256"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"7878:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7907:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7914:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7903:3:201"},"nodeType":"YulFunctionCall","src":"7903:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7953:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7964:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7949:3:201"},"nodeType":"YulFunctionCall","src":"7949:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"7919:29:201"},"nodeType":"YulFunctionCall","src":"7919:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7896:6:201"},"nodeType":"YulFunctionCall","src":"7896:73:201"},"nodeType":"YulExpressionStatement","src":"7896:73:201"},{"nodeType":"YulVariableDeclaration","src":"7978:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"7988:3:201","type":"","value":"288"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"7982:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8011:5:201"},{"name":"_2","nodeType":"YulIdentifier","src":"8018:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8007:3:201"},"nodeType":"YulFunctionCall","src":"8007:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8057:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"8068:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8053:3:201"},"nodeType":"YulFunctionCall","src":"8053:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"8023:29:201"},"nodeType":"YulFunctionCall","src":"8023:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8000:6:201"},"nodeType":"YulFunctionCall","src":"8000:73:201"},"nodeType":"YulExpressionStatement","src":"8000:73:201"},{"nodeType":"YulVariableDeclaration","src":"8082:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8092:3:201","type":"","value":"320"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"8086:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8115:5:201"},{"name":"_3","nodeType":"YulIdentifier","src":"8122:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8111:3:201"},"nodeType":"YulFunctionCall","src":"8111:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8161:9:201"},{"name":"_3","nodeType":"YulIdentifier","src":"8172:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8157:3:201"},"nodeType":"YulFunctionCall","src":"8157:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"8127:29:201"},"nodeType":"YulFunctionCall","src":"8127:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8104:6:201"},"nodeType":"YulFunctionCall","src":"8104:73:201"},"nodeType":"YulExpressionStatement","src":"8104:73:201"},{"nodeType":"YulVariableDeclaration","src":"8186:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8196:3:201","type":"","value":"352"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"8190:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8219:5:201"},{"name":"_4","nodeType":"YulIdentifier","src":"8226:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8215:3:201"},"nodeType":"YulFunctionCall","src":"8215:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8265:9:201"},{"name":"_4","nodeType":"YulIdentifier","src":"8276:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8261:3:201"},"nodeType":"YulFunctionCall","src":"8261:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"8231:29:201"},"nodeType":"YulFunctionCall","src":"8231:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8208:6:201"},"nodeType":"YulFunctionCall","src":"8208:73:201"},"nodeType":"YulExpressionStatement","src":"8208:73:201"},{"nodeType":"YulVariableDeclaration","src":"8290:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8300:3:201","type":"","value":"384"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"8294:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8323:5:201"},{"name":"_5","nodeType":"YulIdentifier","src":"8330:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8319:3:201"},"nodeType":"YulFunctionCall","src":"8319:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8369:9:201"},{"name":"_5","nodeType":"YulIdentifier","src":"8380:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8365:3:201"},"nodeType":"YulFunctionCall","src":"8365:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"8335:29:201"},"nodeType":"YulFunctionCall","src":"8335:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8312:6:201"},"nodeType":"YulFunctionCall","src":"8312:73:201"},"nodeType":"YulExpressionStatement","src":"8312:73:201"},{"nodeType":"YulVariableDeclaration","src":"8394:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8404:3:201","type":"","value":"416"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"8398:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8427:5:201"},{"name":"_6","nodeType":"YulIdentifier","src":"8434:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8423:3:201"},"nodeType":"YulFunctionCall","src":"8423:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8473:9:201"},{"name":"_6","nodeType":"YulIdentifier","src":"8484:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8469:3:201"},"nodeType":"YulFunctionCall","src":"8469:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"8439:29:201"},"nodeType":"YulFunctionCall","src":"8439:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8416:6:201"},"nodeType":"YulFunctionCall","src":"8416:73:201"},"nodeType":"YulExpressionStatement","src":"8416:73:201"},{"nodeType":"YulVariableDeclaration","src":"8498:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"8508:3:201","type":"","value":"448"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"8502:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8531:5:201"},{"name":"_7","nodeType":"YulIdentifier","src":"8538:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8527:3:201"},"nodeType":"YulFunctionCall","src":"8527:14:201"},{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8577:9:201"},{"name":"_7","nodeType":"YulIdentifier","src":"8588:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8573:3:201"},"nodeType":"YulFunctionCall","src":"8573:18:201"}],"functionName":{"name":"abi_decode_uint128_fromMemory","nodeType":"YulIdentifier","src":"8543:29:201"},"nodeType":"YulFunctionCall","src":"8543:49:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8520:6:201"},"nodeType":"YulFunctionCall","src":"8520:73:201"},"nodeType":"YulExpressionStatement","src":"8520:73:201"},{"nodeType":"YulAssignment","src":"8602:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"8612:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"8602:6:201"}]}]},"name":"abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7053:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7064:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7076:6:201","type":""}],"src":"6976:1647:201"},{"body":{"nodeType":"YulBlock","src":"8660:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8677:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8680:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8670:6:201"},"nodeType":"YulFunctionCall","src":"8670:88:201"},"nodeType":"YulExpressionStatement","src":"8670:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8774:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"8777:4:201","type":"","value":"0x21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8767:6:201"},"nodeType":"YulFunctionCall","src":"8767:15:201"},"nodeType":"YulExpressionStatement","src":"8767:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8798:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8801:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8791:6:201"},"nodeType":"YulFunctionCall","src":"8791:15:201"},"nodeType":"YulExpressionStatement","src":"8791:15:201"}]},"name":"panic_error_0x21","nodeType":"YulFunctionDefinition","src":"8628:184:201"},{"body":{"nodeType":"YulBlock","src":"8991:229:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9008:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9019:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9001:6:201"},"nodeType":"YulFunctionCall","src":"9001:21:201"},"nodeType":"YulExpressionStatement","src":"9001:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9042:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9053:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9038:3:201"},"nodeType":"YulFunctionCall","src":"9038:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"9058:2:201","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9031:6:201"},"nodeType":"YulFunctionCall","src":"9031:30:201"},"nodeType":"YulExpressionStatement","src":"9031:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9081:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9092:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9077:3:201"},"nodeType":"YulFunctionCall","src":"9077:18:201"},{"hexValue":"6d73672e76616c7565206973206c657373207468616e2072657061796d656e74","kind":"string","nodeType":"YulLiteral","src":"9097:34:201","type":"","value":"msg.value is less than repayment"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9070:6:201"},"nodeType":"YulFunctionCall","src":"9070:62:201"},"nodeType":"YulExpressionStatement","src":"9070:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9152:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9163:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9148:3:201"},"nodeType":"YulFunctionCall","src":"9148:18:201"},{"hexValue":"20616d6f756e74","kind":"string","nodeType":"YulLiteral","src":"9168:9:201","type":"","value":" amount"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9141:6:201"},"nodeType":"YulFunctionCall","src":"9141:37:201"},"nodeType":"YulExpressionStatement","src":"9141:37:201"},{"nodeType":"YulAssignment","src":"9187:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9199:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9210:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9195:3:201"},"nodeType":"YulFunctionCall","src":"9195:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9187:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_f3cb6abf841e7654d9fcd9bcef0bf0797905f8c05be5c0ec9482725dfffa0909__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8968:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8982:4:201","type":""}],"src":"8817:403:201"},{"body":{"nodeType":"YulBlock","src":"9410:285:201","statements":[{"nodeType":"YulAssignment","src":"9420:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9432:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9443:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9428:3:201"},"nodeType":"YulFunctionCall","src":"9428:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9420:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"9456:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9466:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9460:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9524:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9539:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9547:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9535:3:201"},"nodeType":"YulFunctionCall","src":"9535:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9517:6:201"},"nodeType":"YulFunctionCall","src":"9517:34:201"},"nodeType":"YulExpressionStatement","src":"9517:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9571:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9582:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9567:3:201"},"nodeType":"YulFunctionCall","src":"9567:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"9587:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9560:6:201"},"nodeType":"YulFunctionCall","src":"9560:34:201"},"nodeType":"YulExpressionStatement","src":"9560:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9614:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9625:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9610:3:201"},"nodeType":"YulFunctionCall","src":"9610:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"9630:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9603:6:201"},"nodeType":"YulFunctionCall","src":"9603:34:201"},"nodeType":"YulExpressionStatement","src":"9603:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9657:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9668:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9653:3:201"},"nodeType":"YulFunctionCall","src":"9653:18:201"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"9677:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9685:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9673:3:201"},"nodeType":"YulFunctionCall","src":"9673:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9646:6:201"},"nodeType":"YulFunctionCall","src":"9646:43:201"},"nodeType":"YulExpressionStatement","src":"9646:43:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint256_t_address__to_t_address_t_uint256_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9355:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"9366:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"9374:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"9382:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"9390:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9401:4:201","type":""}],"src":"9225:470:201"},{"body":{"nodeType":"YulBlock","src":"9781:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"9827:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9836:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9839:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9829:6:201"},"nodeType":"YulFunctionCall","src":"9829:12:201"},"nodeType":"YulExpressionStatement","src":"9829:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"9802:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"9811:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"9798:3:201"},"nodeType":"YulFunctionCall","src":"9798:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"9823:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"9794:3:201"},"nodeType":"YulFunctionCall","src":"9794:32:201"},"nodeType":"YulIf","src":"9791:52:201"},{"nodeType":"YulAssignment","src":"9852:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9868:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9862:5:201"},"nodeType":"YulFunctionCall","src":"9862:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"9852:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9747:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"9758:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"9770:6:201","type":""}],"src":"9700:184:201"},{"body":{"nodeType":"YulBlock","src":"9938:230:201","statements":[{"body":{"nodeType":"YulBlock","src":"9968:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9989:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9992:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9982:6:201"},"nodeType":"YulFunctionCall","src":"9982:88:201"},"nodeType":"YulExpressionStatement","src":"9982:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10090:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10093:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10083:6:201"},"nodeType":"YulFunctionCall","src":"10083:15:201"},"nodeType":"YulExpressionStatement","src":"10083:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10118:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10121:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10111:6:201"},"nodeType":"YulFunctionCall","src":"10111:15:201"},"nodeType":"YulExpressionStatement","src":"10111:15:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"9954:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"9957:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9951:2:201"},"nodeType":"YulFunctionCall","src":"9951:8:201"},"nodeType":"YulIf","src":"9948:188:201"},{"nodeType":"YulAssignment","src":"10145:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10157:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"10160:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10153:3:201"},"nodeType":"YulFunctionCall","src":"10153:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"10145:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"9920:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"9923:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"9929:4:201","type":""}],"src":"9889:279:201"},{"body":{"nodeType":"YulBlock","src":"10356:298:201","statements":[{"nodeType":"YulAssignment","src":"10366:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10378:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10389:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10374:3:201"},"nodeType":"YulFunctionCall","src":"10374:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10366:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"10402:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10412:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10406:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10470:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10485:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10493:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10481:3:201"},"nodeType":"YulFunctionCall","src":"10481:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10463:6:201"},"nodeType":"YulFunctionCall","src":"10463:34:201"},"nodeType":"YulExpressionStatement","src":"10463:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10517:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10528:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10513:3:201"},"nodeType":"YulFunctionCall","src":"10513:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"10533:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10506:6:201"},"nodeType":"YulFunctionCall","src":"10506:34:201"},"nodeType":"YulExpressionStatement","src":"10506:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10560:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10571:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10556:3:201"},"nodeType":"YulFunctionCall","src":"10556:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"10580:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10588:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10576:3:201"},"nodeType":"YulFunctionCall","src":"10576:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10549:6:201"},"nodeType":"YulFunctionCall","src":"10549:43:201"},"nodeType":"YulExpressionStatement","src":"10549:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10612:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10623:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10608:3:201"},"nodeType":"YulFunctionCall","src":"10608:18:201"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"10632:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10640:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10628:3:201"},"nodeType":"YulFunctionCall","src":"10628:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10601:6:201"},"nodeType":"YulFunctionCall","src":"10601:47:201"},"nodeType":"YulExpressionStatement","src":"10601:47:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_address_t_uint16__to_t_address_t_uint256_t_address_t_uint16__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10301:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"10312:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10320:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10328:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10336:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10347:4:201","type":""}],"src":"10173:481:201"},{"body":{"nodeType":"YulBlock","src":"10870:342:201","statements":[{"nodeType":"YulAssignment","src":"10880:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10892:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10903:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10888:3:201"},"nodeType":"YulFunctionCall","src":"10888:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10880:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"10916:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10926:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10920:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10984:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10999:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11007:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10995:3:201"},"nodeType":"YulFunctionCall","src":"10995:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10977:6:201"},"nodeType":"YulFunctionCall","src":"10977:34:201"},"nodeType":"YulExpressionStatement","src":"10977:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11031:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11042:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11027:3:201"},"nodeType":"YulFunctionCall","src":"11027:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"11047:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11020:6:201"},"nodeType":"YulFunctionCall","src":"11020:34:201"},"nodeType":"YulExpressionStatement","src":"11020:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11074:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11085:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11070:3:201"},"nodeType":"YulFunctionCall","src":"11070:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"11090:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11063:6:201"},"nodeType":"YulFunctionCall","src":"11063:34:201"},"nodeType":"YulExpressionStatement","src":"11063:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11117:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11128:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11113:3:201"},"nodeType":"YulFunctionCall","src":"11113:18:201"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"11137:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"11145:6:201","type":"","value":"0xffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11133:3:201"},"nodeType":"YulFunctionCall","src":"11133:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11106:6:201"},"nodeType":"YulFunctionCall","src":"11106:47:201"},"nodeType":"YulExpressionStatement","src":"11106:47:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11173:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11184:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11169:3:201"},"nodeType":"YulFunctionCall","src":"11169:19:201"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"11194:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11202:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11190:3:201"},"nodeType":"YulFunctionCall","src":"11190:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11162:6:201"},"nodeType":"YulFunctionCall","src":"11162:44:201"},"nodeType":"YulExpressionStatement","src":"11162:44:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint256_t_uint16_t_address__to_t_address_t_uint256_t_uint256_t_uint16_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10807:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"10818:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"10826:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10834:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10842:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10850:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10861:4:201","type":""}],"src":"10659:553:201"},{"body":{"nodeType":"YulBlock","src":"11318:76:201","statements":[{"nodeType":"YulAssignment","src":"11328:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11340:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11351:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11336:3:201"},"nodeType":"YulFunctionCall","src":"11336:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11328:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11370:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"11381:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11363:6:201"},"nodeType":"YulFunctionCall","src":"11363:25:201"},"nodeType":"YulExpressionStatement","src":"11363:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11287:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11298:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11309:4:201","type":""}],"src":"11217:177:201"},{"body":{"nodeType":"YulBlock","src":"11573:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11590:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11601:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11583:6:201"},"nodeType":"YulFunctionCall","src":"11583:21:201"},"nodeType":"YulExpressionStatement","src":"11583:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11624:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11635:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11620:3:201"},"nodeType":"YulFunctionCall","src":"11620:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"11640:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11613:6:201"},"nodeType":"YulFunctionCall","src":"11613:30:201"},"nodeType":"YulExpressionStatement","src":"11613:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11663:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11674:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11659:3:201"},"nodeType":"YulFunctionCall","src":"11659:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"11679:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11652:6:201"},"nodeType":"YulFunctionCall","src":"11652:62:201"},"nodeType":"YulExpressionStatement","src":"11652:62:201"},{"nodeType":"YulAssignment","src":"11723:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11735:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11746:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11731:3:201"},"nodeType":"YulFunctionCall","src":"11731:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11723:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11550:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11564:4:201","type":""}],"src":"11399:356:201"},{"body":{"nodeType":"YulBlock","src":"11917:241:201","statements":[{"nodeType":"YulAssignment","src":"11927:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11939:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11950:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11935:3:201"},"nodeType":"YulFunctionCall","src":"11935:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11927:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"11962:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11972:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11966:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12030:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12045:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12053:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12041:3:201"},"nodeType":"YulFunctionCall","src":"12041:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12023:6:201"},"nodeType":"YulFunctionCall","src":"12023:34:201"},"nodeType":"YulExpressionStatement","src":"12023:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12077:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12088:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12073:3:201"},"nodeType":"YulFunctionCall","src":"12073:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"12097:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12105:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12093:3:201"},"nodeType":"YulFunctionCall","src":"12093:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12066:6:201"},"nodeType":"YulFunctionCall","src":"12066:43:201"},"nodeType":"YulExpressionStatement","src":"12066:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12129:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12140:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12125:3:201"},"nodeType":"YulFunctionCall","src":"12125:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"12145:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12118:6:201"},"nodeType":"YulFunctionCall","src":"12118:34:201"},"nodeType":"YulExpressionStatement","src":"12118:34:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11870:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11881:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11889:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11897:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11908:4:201","type":""}],"src":"11760:398:201"},{"body":{"nodeType":"YulBlock","src":"12241:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"12287:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12296:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12299:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12289:6:201"},"nodeType":"YulFunctionCall","src":"12289:12:201"},"nodeType":"YulExpressionStatement","src":"12289:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"12262:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"12271:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12258:3:201"},"nodeType":"YulFunctionCall","src":"12258:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"12283:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12254:3:201"},"nodeType":"YulFunctionCall","src":"12254:32:201"},"nodeType":"YulIf","src":"12251:52:201"},{"nodeType":"YulVariableDeclaration","src":"12312:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12331:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"12325:5:201"},"nodeType":"YulFunctionCall","src":"12325:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"12316:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"12394:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12403:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12406:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12396:6:201"},"nodeType":"YulFunctionCall","src":"12396:12:201"},"nodeType":"YulExpressionStatement","src":"12396:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12363:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12384:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12377:6:201"},"nodeType":"YulFunctionCall","src":"12377:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12370:6:201"},"nodeType":"YulFunctionCall","src":"12370:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"12360:2:201"},"nodeType":"YulFunctionCall","src":"12360:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"12353:6:201"},"nodeType":"YulFunctionCall","src":"12353:40:201"},"nodeType":"YulIf","src":"12350:60:201"},{"nodeType":"YulAssignment","src":"12419:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"12429:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"12419:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12207:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"12218:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"12230:6:201","type":""}],"src":"12163:277:201"},{"body":{"nodeType":"YulBlock","src":"12602:241:201","statements":[{"nodeType":"YulAssignment","src":"12612:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12624:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12635:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12620:3:201"},"nodeType":"YulFunctionCall","src":"12620:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12612:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"12647:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12657:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12651:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12715:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12730:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12738:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12726:3:201"},"nodeType":"YulFunctionCall","src":"12726:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12708:6:201"},"nodeType":"YulFunctionCall","src":"12708:34:201"},"nodeType":"YulExpressionStatement","src":"12708:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12762:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12773:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12758:3:201"},"nodeType":"YulFunctionCall","src":"12758:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"12778:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12751:6:201"},"nodeType":"YulFunctionCall","src":"12751:34:201"},"nodeType":"YulExpressionStatement","src":"12751:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12805:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12816:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12801:3:201"},"nodeType":"YulFunctionCall","src":"12801:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"12825:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12833:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12821:3:201"},"nodeType":"YulFunctionCall","src":"12821:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12794:6:201"},"nodeType":"YulFunctionCall","src":"12794:43:201"},"nodeType":"YulExpressionStatement","src":"12794:43:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12555:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12566:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12574:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12582:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12593:4:201","type":""}],"src":"12445:398:201"},{"body":{"nodeType":"YulBlock","src":"13113:428:201","statements":[{"nodeType":"YulAssignment","src":"13123:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13135:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13146:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13131:3:201"},"nodeType":"YulFunctionCall","src":"13131:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13123:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"13159:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"13169:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"13163:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13227:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13242:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"13250:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13238:3:201"},"nodeType":"YulFunctionCall","src":"13238:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13220:6:201"},"nodeType":"YulFunctionCall","src":"13220:34:201"},"nodeType":"YulExpressionStatement","src":"13220:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13274:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13285:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13270:3:201"},"nodeType":"YulFunctionCall","src":"13270:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"13294:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"13302:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13290:3:201"},"nodeType":"YulFunctionCall","src":"13290:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13263:6:201"},"nodeType":"YulFunctionCall","src":"13263:43:201"},"nodeType":"YulExpressionStatement","src":"13263:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13326:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13337:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13322:3:201"},"nodeType":"YulFunctionCall","src":"13322:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"13342:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13315:6:201"},"nodeType":"YulFunctionCall","src":"13315:34:201"},"nodeType":"YulExpressionStatement","src":"13315:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13369:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13380:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13365:3:201"},"nodeType":"YulFunctionCall","src":"13365:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"13385:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13358:6:201"},"nodeType":"YulFunctionCall","src":"13358:34:201"},"nodeType":"YulExpressionStatement","src":"13358:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13412:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13423:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13408:3:201"},"nodeType":"YulFunctionCall","src":"13408:19:201"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"13433:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"13441:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13429:3:201"},"nodeType":"YulFunctionCall","src":"13429:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13401:6:201"},"nodeType":"YulFunctionCall","src":"13401:46:201"},"nodeType":"YulExpressionStatement","src":"13401:46:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13467:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13478:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13463:3:201"},"nodeType":"YulFunctionCall","src":"13463:19:201"},{"name":"value5","nodeType":"YulIdentifier","src":"13484:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13456:6:201"},"nodeType":"YulFunctionCall","src":"13456:35:201"},"nodeType":"YulExpressionStatement","src":"13456:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13511:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13522:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13507:3:201"},"nodeType":"YulFunctionCall","src":"13507:19:201"},{"name":"value6","nodeType":"YulIdentifier","src":"13528:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13500:6:201"},"nodeType":"YulFunctionCall","src":"13500:35:201"},"nodeType":"YulExpressionStatement","src":"13500:35:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13034:9:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"13045:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"13053:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"13061:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13069:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13077:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13085:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"13093:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13104:4:201","type":""}],"src":"12848:693:201"},{"body":{"nodeType":"YulBlock","src":"13720:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13737:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13748:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13730:6:201"},"nodeType":"YulFunctionCall","src":"13730:21:201"},"nodeType":"YulExpressionStatement","src":"13730:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13771:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13782:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13767:3:201"},"nodeType":"YulFunctionCall","src":"13767:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"13787:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13760:6:201"},"nodeType":"YulFunctionCall","src":"13760:30:201"},"nodeType":"YulExpressionStatement","src":"13760:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13810:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13821:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13806:3:201"},"nodeType":"YulFunctionCall","src":"13806:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"13826:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13799:6:201"},"nodeType":"YulFunctionCall","src":"13799:62:201"},"nodeType":"YulExpressionStatement","src":"13799:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13881:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13892:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13877:3:201"},"nodeType":"YulFunctionCall","src":"13877:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"13897:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13870:6:201"},"nodeType":"YulFunctionCall","src":"13870:36:201"},"nodeType":"YulExpressionStatement","src":"13870:36:201"},{"nodeType":"YulAssignment","src":"13915:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13927:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13938:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13923:3:201"},"nodeType":"YulFunctionCall","src":"13923:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13915:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13697:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13711:4:201","type":""}],"src":"13546:402:201"},{"body":{"nodeType":"YulBlock","src":"14090:289:201","statements":[{"nodeType":"YulVariableDeclaration","src":"14100:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14120:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14114:5:201"},"nodeType":"YulFunctionCall","src":"14114:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"14104:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"14136:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"14145:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"14140:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"14207:77:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"14232:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"14237:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14228:3:201"},"nodeType":"YulFunctionCall","src":"14228:11:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"14255:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"14263:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14251:3:201"},"nodeType":"YulFunctionCall","src":"14251:14:201"},{"kind":"number","nodeType":"YulLiteral","src":"14267:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14247:3:201"},"nodeType":"YulFunctionCall","src":"14247:25:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"14241:5:201"},"nodeType":"YulFunctionCall","src":"14241:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14221:6:201"},"nodeType":"YulFunctionCall","src":"14221:53:201"},"nodeType":"YulExpressionStatement","src":"14221:53:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"14166:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"14169:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"14163:2:201"},"nodeType":"YulFunctionCall","src":"14163:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"14177:21:201","statements":[{"nodeType":"YulAssignment","src":"14179:17:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"14188:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"14191:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14184:3:201"},"nodeType":"YulFunctionCall","src":"14184:12:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"14179:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"14159:3:201","statements":[]},"src":"14155:129:201"},{"body":{"nodeType":"YulBlock","src":"14310:31:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"14323:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"14328:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14319:3:201"},"nodeType":"YulFunctionCall","src":"14319:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"14337:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14312:6:201"},"nodeType":"YulFunctionCall","src":"14312:27:201"},"nodeType":"YulExpressionStatement","src":"14312:27:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"14299:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"14302:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14296:2:201"},"nodeType":"YulFunctionCall","src":"14296:13:201"},"nodeType":"YulIf","src":"14293:48:201"},{"nodeType":"YulAssignment","src":"14350:23:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"14361:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"14366:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14357:3:201"},"nodeType":"YulFunctionCall","src":"14357:16:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"14350:3:201"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"14066:3:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"14071:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"14082:3:201","type":""}],"src":"13953:426:201"},{"body":{"nodeType":"YulBlock","src":"14558:169:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14575:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14586:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14568:6:201"},"nodeType":"YulFunctionCall","src":"14568:21:201"},"nodeType":"YulExpressionStatement","src":"14568:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14609:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14620:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14605:3:201"},"nodeType":"YulFunctionCall","src":"14605:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"14625:2:201","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14598:6:201"},"nodeType":"YulFunctionCall","src":"14598:30:201"},"nodeType":"YulExpressionStatement","src":"14598:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14648:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14659:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14644:3:201"},"nodeType":"YulFunctionCall","src":"14644:18:201"},{"hexValue":"4554485f5452414e534645525f4641494c4544","kind":"string","nodeType":"YulLiteral","src":"14664:21:201","type":"","value":"ETH_TRANSFER_FAILED"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14637:6:201"},"nodeType":"YulFunctionCall","src":"14637:49:201"},"nodeType":"YulExpressionStatement","src":"14637:49:201"},{"nodeType":"YulAssignment","src":"14695:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14707:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14718:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14703:3:201"},"nodeType":"YulFunctionCall","src":"14703:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14695:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_d383913ea1996930a2623a0d739b8fc033c734c1d71d4759d3ccba1d3a719c29__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14535:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14549:4:201","type":""}],"src":"14384:343:201"},{"body":{"nodeType":"YulBlock","src":"14906:171:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14923:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14934:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14916:6:201"},"nodeType":"YulFunctionCall","src":"14916:21:201"},"nodeType":"YulExpressionStatement","src":"14916:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14957:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14968:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14953:3:201"},"nodeType":"YulFunctionCall","src":"14953:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"14973:2:201","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14946:6:201"},"nodeType":"YulFunctionCall","src":"14946:30:201"},"nodeType":"YulExpressionStatement","src":"14946:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14996:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15007:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14992:3:201"},"nodeType":"YulFunctionCall","src":"14992:18:201"},{"hexValue":"475076323a206661696c6564207472616e73666572","kind":"string","nodeType":"YulLiteral","src":"15012:23:201","type":"","value":"GPv2: failed transfer"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14985:6:201"},"nodeType":"YulFunctionCall","src":"14985:51:201"},"nodeType":"YulExpressionStatement","src":"14985:51:201"},{"nodeType":"YulAssignment","src":"15045:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15057:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15068:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15053:3:201"},"nodeType":"YulFunctionCall","src":"15053:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15045:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14883:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14897:4:201","type":""}],"src":"14732:345:201"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_stringliteral_27ee2b783d4c8df49ab77e716dbb31d00957b706569e1f6344f0cb575662d45e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"Receive not allowed\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_0fbc9324f34b5b3dd5cc07188bb4ac8875999da3789a00b0de2cd5733ed30268__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"Fallback not allowed\")\n        tail := add(headStart, 96)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_address(value_1)\n        value3 := value_1\n    }\n    function validator_revert_uint16(value)\n    {\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint16(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_uint16(value_2)\n        value2 := value_2\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256t_uint16(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_uint16(value_1)\n        value3 := value_1\n    }\n    function abi_decode_tuple_t_addresst_uint256t_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_addresst_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n        value3 := calldataload(add(headStart, 96))\n        let value_2 := calldataload(add(headStart, 128))\n        if iszero(eq(value_2, and(value_2, 0xff))) { revert(0, 0) }\n        value4 := value_2\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 480)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, end) -> value\n    {\n        if slt(sub(end, headStart), 0x20) { revert(0, 0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0x20)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x41)\n            revert(0, 0x24)\n        }\n        mstore(64, newFreePtr)\n        value := memPtr\n        mstore(memPtr, mload(headStart))\n    }\n    function abi_decode_uint128_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint40_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, 0xffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint16_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        validator_revert_uint16(value)\n    }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_struct$_ReserveData_$21315_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 480) { revert(0, 0) }\n        let value := allocate_memory()\n        mstore(value, abi_decode_struct_ReserveConfigurationMap_fromMemory(headStart, dataEnd))\n        mstore(add(value, 32), abi_decode_uint128_fromMemory(add(headStart, 32)))\n        mstore(add(value, 64), abi_decode_uint128_fromMemory(add(headStart, 64)))\n        mstore(add(value, 96), abi_decode_uint128_fromMemory(add(headStart, 96)))\n        mstore(add(value, 128), abi_decode_uint128_fromMemory(add(headStart, 128)))\n        mstore(add(value, 160), abi_decode_uint128_fromMemory(add(headStart, 160)))\n        mstore(add(value, 192), abi_decode_uint40_fromMemory(add(headStart, 192)))\n        mstore(add(value, 224), abi_decode_uint16_fromMemory(add(headStart, 224)))\n        let _1 := 256\n        mstore(add(value, _1), abi_decode_address_fromMemory(add(headStart, _1)))\n        let _2 := 288\n        mstore(add(value, _2), abi_decode_address_fromMemory(add(headStart, _2)))\n        let _3 := 320\n        mstore(add(value, _3), abi_decode_address_fromMemory(add(headStart, _3)))\n        let _4 := 352\n        mstore(add(value, _4), abi_decode_address_fromMemory(add(headStart, _4)))\n        let _5 := 384\n        mstore(add(value, _5), abi_decode_uint128_fromMemory(add(headStart, _5)))\n        let _6 := 416\n        mstore(add(value, _6), abi_decode_uint128_fromMemory(add(headStart, _6)))\n        let _7 := 448\n        mstore(add(value, _7), abi_decode_uint128_fromMemory(add(headStart, _7)))\n        value0 := value\n    }\n    function panic_error_0x21()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x21)\n        revert(0, 0x24)\n    }\n    function abi_encode_tuple_t_stringliteral_f3cb6abf841e7654d9fcd9bcef0bf0797905f8c05be5c0ec9482725dfffa0909__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"msg.value is less than repayment\")\n        mstore(add(headStart, 96), \" amount\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint256_t_address__to_t_address_t_uint256_t_uint256_t_address__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, _1))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        diff := sub(x, y)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_address_t_uint16__to_t_address_t_uint256_t_address_t_uint16__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), and(value3, 0xffff))\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint256_t_uint16_t_address__to_t_address_t_uint256_t_uint256_t_uint16_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, 0xffff))\n        mstore(add(headStart, 128), and(value4, _1))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_address__to_t_address_t_uint256_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__to_t_address_t_address_t_uint256_t_uint256_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 224)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, 0xff))\n        mstore(add(headStart, 160), value5)\n        mstore(add(headStart, 192), value6)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            mstore(add(pos, i), mload(add(add(value0, i), 0x20)))\n        }\n        if gt(i, length) { mstore(add(pos, length), 0) }\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_stringliteral_d383913ea1996930a2623a0d739b8fc033c734c1d71d4759d3ccba1d3a719c29__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"ETH_TRANSFER_FAILED\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"GPv2: failed transfer\")\n        tail := add(headStart, 96)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"33918":[{"length":32,"start":221},{"length":32,"start":711},{"length":32,"start":904},{"length":32,"start":1284},{"length":32,"start":1469},{"length":32,"start":1682},{"length":32,"start":1867},{"length":32,"start":2084},{"length":32,"start":2291},{"length":32,"start":2723},{"length":32,"start":3294},{"length":32,"start":3504},{"length":32,"start":3863},{"length":32,"start":4604},{"length":32,"start":4814}],"33921":[{"length":32,"start":955},{"length":32,"start":1530},{"length":32,"start":1931},{"length":32,"start":2154},{"length":32,"start":2766},{"length":32,"start":3347},{"length":32,"start":3906},{"length":32,"start":4657}]},"linkReferences":{},"object":"6080604052600436106100c05760003560e01c80638da5cb5b11610074578063d4c40b6c1161004e578063d4c40b6c146102eb578063eed88b8d1461030b578063f2fde38b1461032b5761016b565b80638da5cb5b14610248578063a3d5b25514610298578063affa8817146102b85761016b565b806366514c97116100a557806366514c97146101f3578063715018a61461021357806380500d20146102285761016b565b806302c5fcf8146101cd578063474cf53d146101e05761016b565b3661016b573373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610169576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f52656365697665206e6f7420616c6c6f7765640000000000000000000000000060448201526064015b60405180910390fd5b005b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f46616c6c6261636b206e6f7420616c6c6f7765640000000000000000000000006044820152606401610160565b6101696101db36600461197a565b61034b565b6101696101ee3660046119d4565b610690565b3480156101ff57600080fd5b5061016961020e366004611a1f565b6107e7565b34801561021f57600080fd5b50610169610976565b34801561023457600080fd5b50610169610243366004611a5e565b610a66565b34801561025457600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156102a457600080fd5b506101696102b3366004611a95565b610e33565b3480156102c457600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061026f565b3480156102f757600080fd5b50610169610306366004611ad6565b610eda565b34801561031757600080fd5b50610169610326366004611b4d565b611355565b34801561033757600080fd5b50610169610346366004611b79565b6113e4565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152600091829161042c9185917f000000000000000000000000000000000000000000000000000000000000000016906335ea6a75906024016101e060405180830381865afa158015610403573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104279190611ca7565b611595565b90925090506000600185600281111561044757610447611dca565b600281111561045857610458611dca565b146104635781610465565b825b9050808610156104725750845b80341015610502576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f6d73672e76616c7565206973206c657373207468616e2072657061796d656e7460448201527f20616d6f756e74000000000000000000000000000000000000000000000000006064820152608401610160565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561056a57600080fd5b505af115801561057e573d6000803e3d6000fd5b50506040517f573ade8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152346024830152604482018a905288811660648301527f000000000000000000000000000000000000000000000000000000000000000016935063573ade81925060840190506020604051808303816000875af1158015610647573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066b9190611df9565b508034111561068757610687336106828334611e12565b6116d2565b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156106f857600080fd5b505af115801561070c573d6000803e3d6000fd5b50506040517fe8eda9df00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152346024830152868116604483015261ffff861660648301527f000000000000000000000000000000000000000000000000000000000000000016935063e8eda9df92506084019050600060405180830381600087803b1580156107d357600080fd5b505af1158015610687573d6000803e3d6000fd5b6040517fa415bcad00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018590526044820184905261ffff831660648301523360848301527f0000000000000000000000000000000000000000000000000000000000000000169063a415bcad9060a401600060405180830381600087803b1580156108ae57600080fd5b505af11580156108c2573d6000803e3d6000fd5b50506040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018690527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169250632e1a7d4d9150602401600060405180830381600087803b15801561094e57600080fd5b505af1158015610962573d6000803e3d6000fd5b5050505061097033846116d2565b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610160565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906335ea6a75906024016101e060405180830381865afa158015610b18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3c9190611ca7565b61010001516040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd59190611df9565b9050837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811415610c035750805b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810182905273ffffffffffffffffffffffffffffffffffffffff8416906323b872dd906064016020604051808303816000875af1158015610c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca09190611e50565b506040517f69328dec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390523060448301527f000000000000000000000000000000000000000000000000000000000000000016906369328dec906064016020604051808303816000875af1158015610d5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d809190611df9565b506040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610e0957600080fd5b505af1158015610e1d573d6000803e3d6000fd5b50505050610e2b84826116d2565b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610eb4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610160565b610ed573ffffffffffffffffffffffffffffffffffffffff841683836117b6565b505050565b6040517f35ea6a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906335ea6a75906024016101e060405180830381865afa158015610f8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb09190611ca7565b61010001516040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015290915060009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611025573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110499190611df9565b9050877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114156110775750805b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018a90526064810188905260ff8716608482015260a4810186905260c4810185905273ffffffffffffffffffffffffffffffffffffffff84169063d505accf9060e401600060405180830381600087803b15801561110957600080fd5b505af115801561111d573d6000803e3d6000fd5b50506040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810184905273ffffffffffffffffffffffffffffffffffffffff861692506323b872dd91506064016020604051808303816000875af115801561119a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111be9190611e50565b506040517f69328dec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390523060448301527f000000000000000000000000000000000000000000000000000000000000000016906369328dec906064016020604051808303816000875af115801561127a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129e9190611df9565b506040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b15801561132757600080fd5b505af115801561133b573d6000803e3d6000fd5b5050505061134988826116d2565b50505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146113d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610160565b6113e082826116d2565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610160565b73ffffffffffffffffffffffffffffffffffffffff8116611508576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610160565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6101208101516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260009283929116906370a0823190602401602060405180830381865afa15801561160c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116309190611df9565b6101408401516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152909116906370a0823190602401602060405180830381865afa1580156116a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c79190611df9565b915091509250929050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040516117099190611e72565b60006040518083038185875af1925050503d8060008114611746576040519150601f19603f3d011682016040523d82523d6000602084013e61174b565b606091505b5050905080610ed5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152606401610160565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1611819573d6000803e3d6000fd5b5061182384611889565b610970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e7366657200000000000000000000006044820152606401610160565b60006118c9565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156119085760208114611942576119037f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f611890565b61194f565b823b611939576119397f475076323a206e6f74206120636f6e74726163740000000000000000000000006014611890565b6001915061194f565b3d6000803e600051151591505b50919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461197757600080fd5b50565b6000806000806080858703121561199057600080fd5b843561199b81611955565b9350602085013592506040850135915060608501356119b981611955565b939692955090935050565b61ffff8116811461197757600080fd5b6000806000606084860312156119e957600080fd5b83356119f481611955565b92506020840135611a0481611955565b91506040840135611a14816119c4565b809150509250925092565b60008060008060808587031215611a3557600080fd5b8435611a4081611955565b9350602085013592506040850135915060608501356119b9816119c4565b600080600060608486031215611a7357600080fd5b8335611a7e81611955565b9250602084013591506040840135611a1481611955565b600080600060608486031215611aaa57600080fd5b8335611ab581611955565b92506020840135611ac581611955565b929592945050506040919091013590565b600080600080600080600060e0888a031215611af157600080fd5b8735611afc81611955565b9650602088013595506040880135611b1381611955565b945060608801359350608088013560ff81168114611b3057600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611b6057600080fd5b8235611b6b81611955565b946020939093013593505050565b600060208284031215611b8b57600080fd5b8135611b9681611955565b9392505050565b6040516101e0810167ffffffffffffffff81118282101715611be8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b600060208284031215611c0057600080fd5b6040516020810181811067ffffffffffffffff82111715611c4a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529151825250919050565b80516fffffffffffffffffffffffffffffffff81168114611c7757600080fd5b919050565b805164ffffffffff81168114611c7757600080fd5b8051611c77816119c4565b8051611c7781611955565b60006101e08284031215611cba57600080fd5b611cc2611b9d565b611ccc8484611bee565b8152611cda60208401611c57565b6020820152611ceb60408401611c57565b6040820152611cfc60608401611c57565b6060820152611d0d60808401611c57565b6080820152611d1e60a08401611c57565b60a0820152611d2f60c08401611c7c565b60c0820152611d4060e08401611c91565b60e0820152610100611d53818501611c9c565b90820152610120611d65848201611c9c565b90820152610140611d77848201611c9c565b90820152610160611d89848201611c9c565b90820152610180611d9b848201611c57565b908201526101a0611dad848201611c57565b908201526101c0611dbf848201611c57565b908201529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611e0b57600080fd5b5051919050565b600082821015611e4b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b600060208284031215611e6257600080fd5b81518015158114611b9657600080fd5b6000825160005b81811015611e935760208186018101518583015201611e79565b81811115611ea2576000828501525b50919091019291505056fea2646970667358221220105b0b7b2d0f64d6c6054a3e256ba499cd2e5e950e74b600ab1b0b55c00ff7c264736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC0 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0x74 JUMPI DUP1 PUSH4 0xD4C40B6C GT PUSH2 0x4E JUMPI DUP1 PUSH4 0xD4C40B6C EQ PUSH2 0x2EB JUMPI DUP1 PUSH4 0xEED88B8D EQ PUSH2 0x30B JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x32B JUMPI PUSH2 0x16B JUMP JUMPDEST DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x248 JUMPI DUP1 PUSH4 0xA3D5B255 EQ PUSH2 0x298 JUMPI DUP1 PUSH4 0xAFFA8817 EQ PUSH2 0x2B8 JUMPI PUSH2 0x16B JUMP JUMPDEST DUP1 PUSH4 0x66514C97 GT PUSH2 0xA5 JUMPI DUP1 PUSH4 0x66514C97 EQ PUSH2 0x1F3 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x213 JUMPI DUP1 PUSH4 0x80500D20 EQ PUSH2 0x228 JUMPI PUSH2 0x16B JUMP JUMPDEST DUP1 PUSH4 0x2C5FCF8 EQ PUSH2 0x1CD JUMPI DUP1 PUSH4 0x474CF53D EQ PUSH2 0x1E0 JUMPI PUSH2 0x16B JUMP JUMPDEST CALLDATASIZE PUSH2 0x16B JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x169 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x52656365697665206E6F7420616C6C6F77656400000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST STOP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46616C6C6261636B206E6F7420616C6C6F776564000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x160 JUMP JUMPDEST PUSH2 0x169 PUSH2 0x1DB CALLDATASIZE PUSH1 0x4 PUSH2 0x197A JUMP JUMPDEST PUSH2 0x34B JUMP JUMPDEST PUSH2 0x169 PUSH2 0x1EE CALLDATASIZE PUSH1 0x4 PUSH2 0x19D4 JUMP JUMPDEST PUSH2 0x690 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x169 PUSH2 0x20E CALLDATASIZE PUSH1 0x4 PUSH2 0x1A1F JUMP JUMPDEST PUSH2 0x7E7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x169 PUSH2 0x976 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x234 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x169 PUSH2 0x243 CALLDATASIZE PUSH1 0x4 PUSH2 0x1A5E JUMP JUMPDEST PUSH2 0xA66 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x254 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x169 PUSH2 0x2B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1A95 JUMP JUMPDEST PUSH2 0xE33 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0x0 PUSH2 0x26F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x169 PUSH2 0x306 CALLDATASIZE PUSH1 0x4 PUSH2 0x1AD6 JUMP JUMPDEST PUSH2 0xEDA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x317 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x169 PUSH2 0x326 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B4D JUMP JUMPDEST PUSH2 0x1355 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x337 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x169 PUSH2 0x346 CALLDATASIZE PUSH1 0x4 PUSH2 0x1B79 JUMP JUMPDEST PUSH2 0x13E4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH2 0x42C SWAP2 DUP6 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x403 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x427 SWAP2 SWAP1 PUSH2 0x1CA7 JUMP JUMPDEST PUSH2 0x1595 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP6 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x447 JUMPI PUSH2 0x447 PUSH2 0x1DCA JUMP JUMPDEST PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x458 JUMPI PUSH2 0x458 PUSH2 0x1DCA JUMP JUMPDEST EQ PUSH2 0x463 JUMPI DUP2 PUSH2 0x465 JUMP JUMPDEST DUP3 JUMPDEST SWAP1 POP DUP1 DUP7 LT ISZERO PUSH2 0x472 JUMPI POP DUP5 JUMPDEST DUP1 CALLVALUE LT ISZERO PUSH2 0x502 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6D73672E76616C7565206973206C657373207468616E2072657061796D656E74 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x20616D6F756E7400000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x160 JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x56A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x57E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x573ADE8100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE CALLVALUE PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP11 SWAP1 MSTORE DUP9 DUP2 AND PUSH1 0x64 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP4 POP PUSH4 0x573ADE81 SWAP3 POP PUSH1 0x84 ADD SWAP1 POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 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 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x66B SWAP2 SWAP1 PUSH2 0x1DF9 JUMP JUMPDEST POP DUP1 CALLVALUE GT ISZERO PUSH2 0x687 JUMPI PUSH2 0x687 CALLER PUSH2 0x682 DUP4 CALLVALUE PUSH2 0x1E12 JUMP JUMPDEST PUSH2 0x16D2 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 CALLVALUE PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x70C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xE8EDA9DF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE CALLVALUE PUSH1 0x24 DUP4 ADD MSTORE DUP7 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH2 0xFFFF DUP7 AND PUSH1 0x64 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP4 POP PUSH4 0xE8EDA9DF SWAP3 POP PUSH1 0x84 ADD SWAP1 POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x687 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA415BCAD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD DUP5 SWAP1 MSTORE PUSH2 0xFFFF DUP4 AND PUSH1 0x64 DUP4 ADD MSTORE CALLER PUSH1 0x84 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xA415BCAD SWAP1 PUSH1 0xA4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x8C2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x2E1A7D4D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP7 SWAP1 MSTORE PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 POP PUSH4 0x2E1A7D4D SWAP2 POP PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x94E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x962 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x970 CALLER DUP5 PUSH2 0x16D2 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x9F7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x160 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB18 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB3C SWAP2 SWAP1 PUSH2 0x1CA7 JUMP JUMPDEST PUSH2 0x100 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xBB1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBD5 SWAP2 SWAP1 PUSH2 0x1DF9 JUMP JUMPDEST SWAP1 POP DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 EQ ISZERO PUSH2 0xC03 JUMPI POP DUP1 JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC7C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xCA0 SWAP2 SWAP1 PUSH2 0x1E50 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x69328DEC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x69328DEC SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD5C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD80 SWAP2 SWAP1 PUSH2 0x1DF9 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x2E1A7D4D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0x2E1A7D4D SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE09 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xE1D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0xE2B DUP5 DUP3 PUSH2 0x16D2 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xEB4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x160 JUMP JUMPDEST PUSH2 0xED5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP4 DUP4 PUSH2 0x17B6 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x35EA6A7500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x35EA6A75 SWAP1 PUSH1 0x24 ADD PUSH2 0x1E0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF8C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xFB0 SWAP2 SWAP1 PUSH2 0x1CA7 JUMP JUMPDEST PUSH2 0x100 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE SWAP1 SWAP2 POP PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1025 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1049 SWAP2 SWAP1 PUSH2 0x1DF9 JUMP JUMPDEST SWAP1 POP DUP8 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 EQ ISZERO PUSH2 0x1077 JUMPI POP DUP1 JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP11 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP9 SWAP1 MSTORE PUSH1 0xFF DUP8 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xC4 DUP2 ADD DUP6 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH1 0xE4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1109 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x111D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP5 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND SWAP3 POP PUSH4 0x23B872DD SWAP2 POP PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x119A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11BE SWAP2 SWAP1 PUSH2 0x1E50 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x69328DEC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x69328DEC SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x127A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x129E SWAP2 SWAP1 PUSH2 0x1DF9 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x2E1A7D4D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH4 0x2E1A7D4D SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1327 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x133B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x1349 DUP9 DUP3 PUSH2 0x16D2 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x13D6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x160 JUMP JUMPDEST PUSH2 0x13E0 DUP3 DUP3 PUSH2 0x16D2 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1465 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x160 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x1508 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x160 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x120 DUP2 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x160C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1630 SWAP2 SWAP1 PUSH2 0x1DF9 JUMP JUMPDEST PUSH2 0x140 DUP5 ADD MLOAD PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x16A3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16C7 SWAP2 SWAP1 PUSH2 0x1DF9 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 DUP4 SWAP1 PUSH1 0x40 MLOAD PUSH2 0x1709 SWAP2 SWAP1 PUSH2 0x1E72 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1746 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 0x174B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0xED5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4554485F5452414E534645525F4641494C454400000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x160 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x1819 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1823 DUP5 PUSH2 0x1889 JUMP JUMPDEST PUSH2 0x970 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x160 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x18C9 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x1908 JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x1942 JUMPI PUSH2 0x1903 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x1890 JUMP JUMPDEST PUSH2 0x194F JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x1939 JUMPI PUSH2 0x1939 PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x1890 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x194F JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1977 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1990 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x199B DUP2 PUSH2 0x1955 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x19B9 DUP2 PUSH2 0x1955 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x1977 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x19E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x19F4 DUP2 PUSH2 0x1955 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1A04 DUP2 PUSH2 0x1955 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x1A14 DUP2 PUSH2 0x19C4 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x1A35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x1A40 DUP2 PUSH2 0x1955 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x19B9 DUP2 PUSH2 0x19C4 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1A73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1A7E DUP2 PUSH2 0x1955 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x1A14 DUP2 PUSH2 0x1955 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1AAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1AB5 DUP2 PUSH2 0x1955 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1AC5 DUP2 PUSH2 0x1955 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 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x1AF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x1AFC DUP2 PUSH2 0x1955 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH2 0x1B13 DUP2 PUSH2 0x1955 JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x1B30 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1B60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x1B6B DUP2 PUSH2 0x1955 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 0x1B8B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1B96 DUP2 PUSH2 0x1955 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1BE8 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1C00 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1C4A JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 MLOAD DUP3 MSTORE POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1C77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1C77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x1C77 DUP2 PUSH2 0x19C4 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x1C77 DUP2 PUSH2 0x1955 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1CBA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1CC2 PUSH2 0x1B9D JUMP JUMPDEST PUSH2 0x1CCC DUP5 DUP5 PUSH2 0x1BEE JUMP JUMPDEST DUP2 MSTORE PUSH2 0x1CDA PUSH1 0x20 DUP5 ADD PUSH2 0x1C57 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x1CEB PUSH1 0x40 DUP5 ADD PUSH2 0x1C57 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x1CFC PUSH1 0x60 DUP5 ADD PUSH2 0x1C57 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x1D0D PUSH1 0x80 DUP5 ADD PUSH2 0x1C57 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0x1D1E PUSH1 0xA0 DUP5 ADD PUSH2 0x1C57 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x1D2F PUSH1 0xC0 DUP5 ADD PUSH2 0x1C7C JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1D40 PUSH1 0xE0 DUP5 ADD PUSH2 0x1C91 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 PUSH2 0x1D53 DUP2 DUP6 ADD PUSH2 0x1C9C JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x120 PUSH2 0x1D65 DUP5 DUP3 ADD PUSH2 0x1C9C JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x140 PUSH2 0x1D77 DUP5 DUP3 ADD PUSH2 0x1C9C JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x160 PUSH2 0x1D89 DUP5 DUP3 ADD PUSH2 0x1C9C JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH2 0x1D9B DUP5 DUP3 ADD PUSH2 0x1C57 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH2 0x1DAD DUP5 DUP3 ADD PUSH2 0x1C57 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1C0 PUSH2 0x1DBF DUP5 DUP3 ADD PUSH2 0x1C57 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1E0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x1E4B JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1E62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1B96 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1E93 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x1E79 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x1EA2 JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LT JUMPDEST SIGNEXTEND PUSH28 0x2D0F64D6C6054A3E256BA499CD2E5E950E74B600AB1B0B55C00FF7C2 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"1246:6984:157:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8055:10;:27;8077:4;8055:27;;8047:59;;;;;;;216:2:201;8047:59:157;;;198:21:201;255:2;235:18;;;228:30;294:21;274:18;;;267:49;333:18;;8047:59:157;;;;;;;;;1246:6984;;8193:30;;;;;564:2:201;8193:30:157;;;546:21:201;603:2;583:18;;;576:30;642:22;622:18;;;615:50;682:18;;8193:30:157;362:344:201;3695:820:157;;;;;;:::i;:::-;;:::i;2304:209::-;;;;;;:::i;:::-;;:::i;4886:287::-;;;;;;;;;;-1:-1:-1;4886:287:157;;;;;:::i;:::-;;:::i;1601:135:11:-;;;;;;;;;;;;;:::i;2716:630:157:-;;;;;;;;;;-1:-1:-1;2716:630:157;;;;;:::i;:::-;;:::i;1018:71:11:-;;;;;;;;;;-1:-1:-1;1056:7:11;1078:6;;;1018:71;;;3219:42:201;3207:55;;;3189:74;;3177:2;3162:18;1018:71:11;;;;;;;7157:143:157;;;;;;;;;;-1:-1:-1;7157:143:157;;;;;:::i;:::-;;:::i;7791:89::-;;;;;;;;;;-1:-1:-1;7870:4:157;7791:89;;5619:941;;;;;;;;;;-1:-1:-1;5619:941:157;;;;;:::i;:::-;;:::i;7600:118::-;;;;;;;;;;-1:-1:-1;7600:118:157;;;;;:::i;:::-;;:::i;1875:226:11:-;;;;;;;;;;-1:-1:-1;1875:226:11;;;;;:::i;:::-;;:::i;3695:820:157:-;3933:34;;;;;:19;3961:4;3207:55:201;;3933:34:157;;;3189:74:201;-1:-1:-1;;;;3873:100:157;;3915:10;;3933:4;:19;;;;3162:18:201;;3933:34:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3873;:100::i;:::-;3828:145;;-1:-1:-1;3828:145:157;-1:-1:-1;3980:21:157;4050:33;4031:8;4004:36;;;;;;;;:::i;:::-;:79;;;;;;;;:::i;:::-;;:119;;4111:12;4004:119;;;4092:10;4004:119;3980:143;;4143:13;4134:6;:22;4130:65;;;-1:-1:-1;4182:6:157;4130:65;4221:13;4208:9;:26;;4200:78;;;;;;;9019:2:201;4200:78:157;;;9001:21:201;9058:2;9038:18;;;9031:30;9097:34;9077:18;;;9070:62;9168:9;9148:18;;;9141:37;9195:19;;4200:78:157;8817:403:201;4200:78:157;4284:4;:12;;;4304:13;4284:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4326:58:157;;;;;:10;4345:4;9535:15:201;;4326:58:157;;;9517:34:201;4352:9:157;9567:18:201;;;9560:34;9610:18;;;9603:34;;;9673:15;;;9653:18;;;9646:43;4326:4:157;:10;;-1:-1:-1;4326:10:157;;-1:-1:-1;9428:19:201;;;-1:-1:-1;4326:58:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4440:13;4428:9;:25;4424:86;;;4455:55;4472:10;4484:25;4496:13;4484:9;:25;:::i;:::-;4455:16;:55::i;:::-;3822:693;;;3695:820;;;;:::o;2304:209::-;2406:4;:12;;;2426:9;2406:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2444:64:157;;;;;:12;2465:4;10481:15:201;;2444:64:157;;;10463:34:201;2472:9:157;10513:18:201;;;10506:34;10576:15;;;10556:18;;;10549:43;10640:6;10628:19;;10608:18;;;10601:47;2444:4:157;:12;;-1:-1:-1;2444:12:157;;-1:-1:-1;10374:19:201;;;-1:-1:-1;2444:64:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4886:287;5021:78;;;;;:11;5041:4;10995:15:201;;5021:78:157;;;10977:34:201;11027:18;;;11020:34;;;11070:18;;;11063:34;;;11145:6;11133:19;;11113:18;;;11106:47;5088:10:157;11169:19:201;;;11162:44;5021:4:157;:11;;;;10888:19:201;;5021:78:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5105:21:157;;;;;;;;11363:25:201;;;5105:4:157;:13;;;-1:-1:-1;5105:13:157;;-1:-1:-1;11336:18:201;;5105:21:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5132:36;5149:10;5161:6;5132:16;:36::i;:::-;4886:287;;;;:::o;1601:135:11:-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;11601:2:201;1196:67:11;;;11583:21:201;;;11620:18;;;11613:30;11679:34;11659:18;;;11652:62;11731:18;;1196:67:11;11399:356:201;1196:67:11;1703:1:::1;1687:6:::0;;1666:40:::1;::::0;::::1;1687:6:::0;;::::1;::::0;1666:40:::1;::::0;1703:1;;1666:40:::1;1729:1;1712:19:::0;;;::::1;::::0;;1601:135::o;2716:630:157:-;2822:34;;;;;:19;2850:4;3207:55:201;;2822:34:157;;;3189:74:201;-1:-1:-1;;2822:4:157;:19;;;;;;3162:18:201;;2822:34:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;;2899:27;;;;;2915:10;2899:27;;;3189:74:201;2822:48:157;;-1:-1:-1;2877:19:157;;2899:15;;;;;;3162:18:201;;2899:27:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2877:49;-1:-1:-1;2959:6:157;3061:17;3051:27;;3047:78;;;-1:-1:-1;3107:11:157;3047:78;3130:63;;;;;3149:10;3130:63;;;12023:34:201;3169:4:157;12073:18:201;;;12066:43;12125:18;;;12118:34;;;3130:18:157;;;;;;11935::201;;3130:63:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3199:61:157;;;;;:13;3221:4;12726:15:201;;3199:61:157;;;12708:34:201;12758:18;;;12751:34;;;3254:4:157;12801:18:201;;;12794:43;3199:4:157;:13;;;;12620:18:201;;3199:61:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3266:31:157;;;;;;;;11363:25:201;;;3266:4:157;:13;;;;;11336:18:201;;3266:31:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3303:38;3320:2;3324:16;3303;:38::i;:::-;2792:554;;;2716:630;;;:::o;7157:143::-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;11601:2:201;1196:67:11;;;11583:21:201;;;11620:18;;;11613:30;11679:34;11659:18;;;11652:62;11731:18;;1196:67:11;11399:356:201;1196:67:11;7257:38:157::1;:26;::::0;::::1;7284:2:::0;7288:6;7257:26:::1;:38::i;:::-;7157:143:::0;;;:::o;5619:941::-;5834:34;;;;;:19;5862:4;3207:55:201;;5834:34:157;;;3189:74:201;-1:-1:-1;;5834:4:157;:19;;;;;;3162:18:201;;5834:34:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;;5911:27;;;;;5927:10;5911:27;;;3189:74:201;5834:48:157;;-1:-1:-1;5889:19:157;;5911:15;;;;;;3162:18:201;;5911:27:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5889:49;-1:-1:-1;5971:6:157;6082:17;6072:27;;6068:78;;;-1:-1:-1;6128:11:157;6068:78;6254:84;;;;;6267:10;6254:84;;;13220:34:201;6287:4:157;13270:18:201;;;13263:43;13322:18;;;13315:34;;;13365:18;;;13358:34;;;13441:4;13429:17;;13408:19;;;13401:46;13463:19;;;13456:35;;;13507:19;;;13500:35;;;6254:12:157;;;;;;13131:19:201;;6254:84:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6344:63:157;;;;;6363:10;6344:63;;;12023:34:201;6383:4:157;12073:18:201;;;12066:43;12125:18;;;12118:34;;;6344:18:157;;;;-1:-1:-1;6344:18:157;;-1:-1:-1;11935:18:201;;6344:63:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;6413:61:157;;;;;:13;6435:4;12726:15:201;;6413:61:157;;;12708:34:201;12758:18;;;12751:34;;;6468:4:157;12801:18:201;;;12794:43;6413:4:157;:13;;;;12620:18:201;;6413:61:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;6480:31:157;;;;;;;;11363:25:201;;;6480:4:157;:13;;;;;11336:18:201;;6480:31:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6517:38;6534:2;6538:16;6517;:38::i;:::-;5804:756;;;5619:941;;;;;;;:::o;7600:118::-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;11601:2:201;1196:67:11;;;11583:21:201;;;11620:18;;;11613:30;11679:34;11659:18;;;11652:62;11731:18;;1196:67:11;11399:356:201;1196:67:11;7685:28:157::1;7702:2;7706:6;7685:16;:28::i;:::-;7600:118:::0;;:::o;1875:226:11:-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;11601:2:201;1196:67:11;;;11583:21:201;;;11620:18;;;11613:30;11679:34;11659:18;;;11652:62;11731:18;;1196:67:11;11399:356:201;1196:67:11;1959:22:::1;::::0;::::1;1951:73;;;::::0;::::1;::::0;;13748:2:201;1951:73:11::1;::::0;::::1;13730:21:201::0;13787:2;13767:18;;;13760:30;13826:34;13806:18;;;13799:62;13897:8;13877:18;;;13870:36;13923:19;;1951:73:11::1;13546:402:201::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;::::1;::::0;;::::1;::::0;2056:6;::::1;::::0;2035:38:::1;::::0;::::1;2079:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1875:226::o;655:283:153:-;816:30;;;;809:54;;;;;:48;3207:55:201;;;809:54:153;;;3189:74:201;770:7:153;;;;809:48;;;;;3162:18:201;;809:54:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;878:32;;;;871:56;;;;;:50;3207:55:201;;;871:56:153;;;3189:74:201;871:50:153;;;;;;3162:18:201;;871:56:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;794:139;;;;655:283;;;;;:::o;6712:172:157:-;6821:12;;;6781;6821;;;;;;;;;6799:7;;;;6814:5;;6799:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6780:54;;;6848:7;6840:39;;;;;;;14586:2:201;6840:39:157;;;14568:21:201;14625:2;14605:18;;;14598:30;14664:21;14644:18;;;14637:49;14703:18;;6840:39:157;14384:343:201;441:657:1;668:4;662:11;538:23;680:36;;;765:42;757:51;;753:1;730:25;;723:86;846:2;823:26;;816:41;;;538:23;519:16;;916:2;662:11;519:16;887:5;880;875:50;865:154;;958:16;955:1;952;937:38;994:16;991:1;984:27;865:154;;1039:28;1061:5;1039:21;:28::i;:::-;1031:62;;;;;;;14934:2:201;1031:62:1;;;14916:21:201;14973:2;14953:18;;;14946:30;15012:23;14992:18;;;14985:51;15053:18;;1031:62:1;14732:345:201;2198:2524:1;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;4611:1;4605:8;4598:16;4591:24;4580:35;;3538:1174;;2198:2524;;;:::o;711:154:201:-;797:42;790:5;786:54;779:5;776:65;766:93;;855:1;852;845:12;766:93;711:154;:::o;870:525::-;956:6;964;972;980;1033:3;1021:9;1012:7;1008:23;1004:33;1001:53;;;1050:1;1047;1040:12;1001:53;1089:9;1076:23;1108:31;1133:5;1108:31;:::i;:::-;1158:5;-1:-1:-1;1210:2:201;1195:18;;1182:32;;-1:-1:-1;1261:2:201;1246:18;;1233:32;;-1:-1:-1;1317:2:201;1302:18;;1289:32;1330:33;1289:32;1330:33;:::i;:::-;870:525;;;;-1:-1:-1;870:525:201;;-1:-1:-1;;870:525:201:o;1400:117::-;1485:6;1478:5;1474:18;1467:5;1464:29;1454:57;;1507:1;1504;1497:12;1522:527;1598:6;1606;1614;1667:2;1655:9;1646:7;1642:23;1638:32;1635:52;;;1683:1;1680;1673:12;1635:52;1722:9;1709:23;1741:31;1766:5;1741:31;:::i;:::-;1791:5;-1:-1:-1;1848:2:201;1833:18;;1820:32;1861:33;1820:32;1861:33;:::i;:::-;1913:7;-1:-1:-1;1972:2:201;1957:18;;1944:32;1985;1944;1985;:::i;:::-;2036:7;2026:17;;;1522:527;;;;;:::o;2054:523::-;2139:6;2147;2155;2163;2216:3;2204:9;2195:7;2191:23;2187:33;2184:53;;;2233:1;2230;2223:12;2184:53;2272:9;2259:23;2291:31;2316:5;2291:31;:::i;:::-;2341:5;-1:-1:-1;2393:2:201;2378:18;;2365:32;;-1:-1:-1;2444:2:201;2429:18;;2416:32;;-1:-1:-1;2500:2:201;2485:18;;2472:32;2513;2472;2513;:::i;2582:456::-;2659:6;2667;2675;2728:2;2716:9;2707:7;2703:23;2699:32;2696:52;;;2744:1;2741;2734:12;2696:52;2783:9;2770:23;2802:31;2827:5;2802:31;:::i;:::-;2852:5;-1:-1:-1;2904:2:201;2889:18;;2876:32;;-1:-1:-1;2960:2:201;2945:18;;2932:32;2973:33;2932:32;2973:33;:::i;3274:456::-;3351:6;3359;3367;3420:2;3408:9;3399:7;3395:23;3391:32;3388:52;;;3436:1;3433;3426:12;3388:52;3475:9;3462:23;3494:31;3519:5;3494:31;:::i;:::-;3544:5;-1:-1:-1;3601:2:201;3586:18;;3573:32;3614:33;3573:32;3614:33;:::i;:::-;3274:456;;3666:7;;-1:-1:-1;;;3720:2:201;3705:18;;;;3692:32;;3274:456::o;3735:829::-;3846:6;3854;3862;3870;3878;3886;3894;3947:3;3935:9;3926:7;3922:23;3918:33;3915:53;;;3964:1;3961;3954:12;3915:53;4003:9;3990:23;4022:31;4047:5;4022:31;:::i;:::-;4072:5;-1:-1:-1;4124:2:201;4109:18;;4096:32;;-1:-1:-1;4180:2:201;4165:18;;4152:32;4193:33;4152:32;4193:33;:::i;:::-;4245:7;-1:-1:-1;4299:2:201;4284:18;;4271:32;;-1:-1:-1;4355:3:201;4340:19;;4327:33;4404:4;4391:18;;4379:31;;4369:59;;4424:1;4421;4414:12;4369:59;3735:829;;;;-1:-1:-1;3735:829:201;;;;4447:7;4501:3;4486:19;;4473:33;;-1:-1:-1;4553:3:201;4538:19;;;4525:33;;3735:829;-1:-1:-1;;3735:829:201:o;4569:315::-;4637:6;4645;4698:2;4686:9;4677:7;4673:23;4669:32;4666:52;;;4714:1;4711;4704:12;4666:52;4753:9;4740:23;4772:31;4797:5;4772:31;:::i;:::-;4822:5;4874:2;4859:18;;;;4846:32;;-1:-1:-1;;;4569:315:201:o;4889:247::-;4948:6;5001:2;4989:9;4980:7;4976:23;4972:32;4969:52;;;5017:1;5014;5007:12;4969:52;5056:9;5043:23;5075:31;5100:5;5075:31;:::i;:::-;5125:5;4889:247;-1:-1:-1;;;4889:247:201:o;5330:401::-;5397:2;5391:9;5439:3;5427:16;;5473:18;5458:34;;5494:22;;;5455:62;5452:242;;;5550:77;5547:1;5540:88;5651:4;5648:1;5641:15;5679:4;5676:1;5669:15;5452:242;5710:2;5703:22;5330:401;:::o;5736:580::-;5817:5;5865:4;5853:9;5848:3;5844:19;5840:30;5837:50;;;5883:1;5880;5873:12;5837:50;5916:2;5910:9;5958:4;5950:6;5946:17;6029:6;6017:10;6014:22;5993:18;5981:10;5978:34;5975:62;5972:242;;;6070:77;6067:1;6060:88;6171:4;6168:1;6161:15;6199:4;6196:1;6189:15;5972:242;6230:2;6223:22;6293:16;;6278:32;;-1:-1:-1;6263:6:201;5736:580;-1:-1:-1;5736:580:201:o;6321:192::-;6400:13;;6453:34;6442:46;;6432:57;;6422:85;;6503:1;6500;6493:12;6422:85;6321:192;;;:::o;6518:169::-;6596:13;;6649:12;6638:24;;6628:35;;6618:63;;6677:1;6674;6667:12;6692:136;6770:13;;6792:30;6770:13;6792:30;:::i;6833:138::-;6912:13;;6934:31;6912:13;6934:31;:::i;6976:1647::-;7076:6;7129:3;7117:9;7108:7;7104:23;7100:33;7097:53;;;7146:1;7143;7136:12;7097:53;7172:17;;:::i;:::-;7212:72;7276:7;7265:9;7212:72;:::i;:::-;7205:5;7198:87;7317:49;7362:2;7351:9;7347:18;7317:49;:::i;:::-;7312:2;7305:5;7301:14;7294:73;7399:49;7444:2;7433:9;7429:18;7399:49;:::i;:::-;7394:2;7387:5;7383:14;7376:73;7481:49;7526:2;7515:9;7511:18;7481:49;:::i;:::-;7476:2;7469:5;7465:14;7458:73;7564:50;7609:3;7598:9;7594:19;7564:50;:::i;:::-;7558:3;7551:5;7547:15;7540:75;7648:50;7693:3;7682:9;7678:19;7648:50;:::i;:::-;7642:3;7635:5;7631:15;7624:75;7732:49;7776:3;7765:9;7761:19;7732:49;:::i;:::-;7726:3;7719:5;7715:15;7708:74;7815:49;7859:3;7848:9;7844:19;7815:49;:::i;:::-;7809:3;7802:5;7798:15;7791:74;7884:3;7919:49;7964:2;7953:9;7949:18;7919:49;:::i;:::-;7903:14;;;7896:73;7988:3;8023:49;8053:18;;;8023:49;:::i;:::-;8007:14;;;8000:73;8092:3;8127:49;8157:18;;;8127:49;:::i;:::-;8111:14;;;8104:73;8196:3;8231:49;8261:18;;;8231:49;:::i;:::-;8215:14;;;8208:73;8300:3;8335:49;8365:18;;;8335:49;:::i;:::-;8319:14;;;8312:73;8404:3;8439:49;8469:18;;;8439:49;:::i;:::-;8423:14;;;8416:73;8508:3;8543:49;8573:18;;;8543:49;:::i;:::-;8527:14;;;8520:73;8531:5;6976:1647;-1:-1:-1;;;6976:1647:201:o;8628:184::-;8680:77;8677:1;8670:88;8777:4;8774:1;8767:15;8801:4;8798:1;8791:15;9700:184;9770:6;9823:2;9811:9;9802:7;9798:23;9794:32;9791:52;;;9839:1;9836;9829:12;9791:52;-1:-1:-1;9862:16:201;;9700:184;-1:-1:-1;9700:184:201:o;9889:279::-;9929:4;9957:1;9954;9951:8;9948:188;;;9992:77;9989:1;9982:88;10093:4;10090:1;10083:15;10121:4;10118:1;10111:15;9948:188;-1:-1:-1;10153:9:201;;9889:279::o;12163:277::-;12230:6;12283:2;12271:9;12262:7;12258:23;12254:32;12251:52;;;12299:1;12296;12289:12;12251:52;12331:9;12325:16;12384:5;12377:13;12370:21;12363:5;12360:32;12350:60;;12406:1;12403;12396:12;13953:426;14082:3;14120:6;14114:13;14145:1;14155:129;14169:6;14166:1;14163:13;14155:129;;;14267:4;14251:14;;;14247:25;;14241:32;14228:11;;;14221:53;14184:12;14155:129;;;14302:6;14299:1;14296:13;14293:48;;;14337:1;14328:6;14323:3;14319:16;14312:27;14293:48;-1:-1:-1;14357:16:201;;;;;13953:426;-1:-1:-1;;13953:426:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"1581400","executionCost":"infinite","totalCost":"infinite"},"external":{"":"264","borrowETH(address,uint256,uint256,uint16)":"infinite","depositETH(address,address,uint16)":"infinite","emergencyEtherTransfer(address,uint256)":"infinite","emergencyTokenTransfer(address,address,uint256)":"infinite","getWETHAddress()":"infinite","owner()":"2307","renounceOwnership()":"30171","repayETH(address,uint256,uint256,address)":"infinite","transferOwnership(address)":"30385","withdrawETH(address,uint256,address)":"infinite","withdrawETHWithPermit(address,uint256,address,uint256,uint8,bytes32,bytes32)":"infinite"},"internal":{"_safeTransferETH(address,uint256)":"infinite"}},"methodIdentifiers":{"borrowETH(address,uint256,uint256,uint16)":"66514c97","depositETH(address,address,uint16)":"474cf53d","emergencyEtherTransfer(address,uint256)":"eed88b8d","emergencyTokenTransfer(address,address,uint256)":"a3d5b255","getWETHAddress()":"affa8817","owner()":"8da5cb5b","renounceOwnership()":"715018a6","repayETH(address,uint256,uint256,address)":"02c5fcf8","transferOwnership(address)":"f2fde38b","withdrawETH(address,uint256,address)":"80500d20","withdrawETHWithPermit(address,uint256,address,uint256,uint8,bytes32,bytes32)":"d4c40b6c"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"weth\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"contract IPool\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"borrowETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"depositETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emergencyEtherTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emergencyTokenTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWETHAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rateMode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"repayETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdrawETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"permitV\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"permitR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"permitS\",\"type\":\"bytes32\"}],\"name\":\"withdrawETHWithPermit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract is an upgrade of the WrappedTokenGatewayV3 contract, with immutable pool address. This contract keeps the same interface of the deprecated WrappedTokenGatewayV3 contract.\",\"kind\":\"dev\",\"methods\":{\"borrowETH(address,uint256,uint256,uint16)\":{\"details\":\"borrow WETH, unwraps to ETH and send both the ETH and DebtTokens to msg.sender, via `approveDelegation` and onBehalf argument in `Pool.borrow`.\",\"params\":{\"amount\":\"the amount of ETH to borrow\",\"interestRateMode\":\"the interest rate mode\",\"referralCode\":\"integrators are assigned a referral code and can potentially receive rewards\"}},\"constructor\":{\"details\":\"Sets the WETH address and the PoolAddressesProvider address. Infinite approves pool.\",\"params\":{\"owner\":\"Address of the owner of this contract*\",\"weth\":\"Address of the Wrapped Ether contract\"}},\"depositETH(address,address,uint16)\":{\"details\":\"deposits WETH into the reserve, using native ETH. A corresponding amount of the overlying asset (aTokens) is minted.\",\"params\":{\"onBehalfOf\":\"address of the user who will receive the aTokens representing the deposit\",\"referralCode\":\"integrators are assigned a referral code and can potentially receive rewards.*\"}},\"emergencyEtherTransfer(address,uint256)\":{\"details\":\"transfer native Ether from the utility contract, for native Ether recovery in case of stuck Ether due to selfdestructs or ether transfers to the pre-computed contract address before deployment.\",\"params\":{\"amount\":\"amount to send\",\"to\":\"recipient of the transfer\"}},\"emergencyTokenTransfer(address,address,uint256)\":{\"details\":\"transfer ERC20 from the utility contract, for ERC20 recovery in case of stuck tokens due direct transfers to the contract address.\",\"params\":{\"amount\":\"amount to send\",\"to\":\"recipient of the transfer\",\"token\":\"token to transfer\"}},\"getWETHAddress()\":{\"details\":\"Get WETH address used by WrappedTokenGatewayV3\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"repayETH(address,uint256,uint256,address)\":{\"details\":\"repays a borrow on the WETH reserve, for the specified amount (or for the whole amount, if uint256(-1) is specified).\",\"params\":{\"amount\":\"the amount to repay, or uint256(-1) if the user wants to repay everything\",\"onBehalfOf\":\"the address for which msg.sender is repaying\",\"rateMode\":\"the rate mode to repay\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"withdrawETH(address,uint256,address)\":{\"details\":\"withdraws the WETH _reserves of msg.sender.\",\"params\":{\"amount\":\"amount of aWETH to withdraw and receive native ETH\",\"to\":\"address of the user who will receive native ETH\"}},\"withdrawETHWithPermit(address,uint256,address,uint256,uint8,bytes32,bytes32)\":{\"details\":\"withdraws the WETH _reserves of msg.sender.\",\"params\":{\"amount\":\"amount of aWETH to withdraw and receive native ETH\",\"deadline\":\"validity deadline of permit and so depositWithPermit signature\",\"permitR\":\"R parameter of ERC712 permit sig\",\"permitS\":\"S parameter of ERC712 permit sig\",\"permitV\":\"V parameter of ERC712 permit sig\",\"to\":\"address of the user who will receive native ETH\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/misc/WrappedTokenGatewayV3.sol\":\"WrappedTokenGatewayV3\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable is Context {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial owner.\\n   */\\n  constructor() {\\n    address msgSender = _msgSender();\\n    _owner = msgSender;\\n    emit OwnershipTransferred(address(0), msgSender);\\n  }\\n\\n  /**\\n   * @dev Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Leaves the contract without owner. It will not be possible to call\\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\\n   *\\n   * NOTE: Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public virtual onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = address(0);\\n  }\\n\\n  /**\\n   * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function transferOwnership(address newOwner) public virtual onlyOwner {\\n    require(newOwner != address(0), 'Ownable: new owner is the zero address');\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\",\"keccak256\":\"0x3ce185c4f579e32006f8893dbfdc1b5d878c0e2cafd1508f7ceb081698bc81f9\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IScaledBalanceToken} from './IScaledBalanceToken.sol';\\nimport {IInitializableAToken} from './IInitializableAToken.sol';\\n\\n/**\\n * @title IAToken\\n * @author Aave\\n * @notice Defines the basic interface for an AToken.\\n */\\ninterface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken {\\n  /**\\n   * @dev Emitted during the transfer action\\n   * @param from The user whose tokens are being transferred\\n   * @param to The recipient\\n   * @param value The scaled amount being transferred\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index);\\n\\n  /**\\n   * @notice Mints `amount` aTokens to `user`\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted aTokens\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   * @return `true` if the the previous balance of the user was 0\\n   */\\n  function mint(\\n    address caller,\\n    address onBehalfOf,\\n    uint256 amount,\\n    uint256 index\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Burns aTokens from `user` and sends the equivalent amount of underlying to `receiverOfUnderlying`\\n   * @dev In some instances, the mint event could be emitted from a burn transaction\\n   * if the amount to burn is less than the interest that the user accrued\\n   * @param from The address from which the aTokens will be burned\\n   * @param receiverOfUnderlying The address that will receive the underlying\\n   * @param amount The amount being burned\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function burn(address from, address receiverOfUnderlying, uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Mints aTokens to the reserve treasury\\n   * @param amount The amount of tokens getting minted\\n   * @param index The next liquidity index of the reserve\\n   */\\n  function mintToTreasury(uint256 amount, uint256 index) external;\\n\\n  /**\\n   * @notice Transfers aTokens in the event of a borrow being liquidated, in case the liquidators reclaims the aToken\\n   * @param from The address getting liquidated, current owner of the aTokens\\n   * @param to The recipient\\n   * @param value The amount of tokens getting transferred\\n   */\\n  function transferOnLiquidation(address from, address to, uint256 value) external;\\n\\n  /**\\n   * @notice Transfers the underlying asset to `target`.\\n   * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan()\\n   * @param target The recipient of the underlying\\n   * @param amount The amount getting transferred\\n   */\\n  function transferUnderlyingTo(address target, uint256 amount) external;\\n\\n  /**\\n   * @notice Handles the underlying received by the aToken after the transfer has been completed.\\n   * @dev The default implementation is empty as with standard ERC20 tokens, nothing needs to be done after the\\n   * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying\\n   * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset.\\n   * @param user The user executing the repayment\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed\\n   * @param amount The amount getting repaid\\n   */\\n  function handleRepayment(address user, address onBehalfOf, uint256 amount) external;\\n\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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   * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @return The address of the underlying asset\\n   */\\n  function UNDERLYING_ASSET_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Returns the address of the Aave treasury, receiving the fees on this aToken.\\n   * @return Address of the Aave treasury\\n   */\\n  function RESERVE_TREASURY_ADDRESS() external view returns (address);\\n\\n  /**\\n   * @notice Get the domain separator for the token\\n   * @dev Return cached value if chainId matches cache, otherwise recomputes separator\\n   * @return The domain separator of the token at current chain\\n   */\\n  function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n  /**\\n   * @notice Returns the nonce for owner.\\n   * @param owner The address of the owner\\n   * @return The nonce of the owner\\n   */\\n  function nonces(address owner) external view returns (uint256);\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x4ec2e3180174f248c9308e03fa837d44ca91ca6c1ad67c9951a2951d46948417\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IAaveIncentivesController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IAaveIncentivesController\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Incentives Controller.\\n * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers.\\n */\\ninterface IAaveIncentivesController {\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   */\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n}\\n\",\"keccak256\":\"0x906b896fdcb878d1472f740a70680f26e9a601dc28701113ab1f89cd9edce0bd\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IInitializableAToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IAaveIncentivesController} from './IAaveIncentivesController.sol';\\nimport {IPool} from './IPool.sol';\\n\\n/**\\n * @title IInitializableAToken\\n * @author Aave\\n * @notice Interface for the initialize function on AToken\\n */\\ninterface IInitializableAToken {\\n  /**\\n   * @dev Emitted when an aToken is initialized\\n   * @param underlyingAsset The address of the underlying asset\\n   * @param pool The address of the associated pool\\n   * @param treasury The address of the treasury\\n   * @param incentivesController The address of the incentives controller for this aToken\\n   * @param aTokenDecimals The decimals of the underlying\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  event Initialized(\\n    address indexed underlyingAsset,\\n    address indexed pool,\\n    address treasury,\\n    address incentivesController,\\n    uint8 aTokenDecimals,\\n    string aTokenName,\\n    string aTokenSymbol,\\n    bytes params\\n  );\\n\\n  /**\\n   * @notice Initializes the aToken\\n   * @param pool The pool contract that is initializing this contract\\n   * @param treasury The address of the Aave treasury, receiving the fees on this aToken\\n   * @param underlyingAsset The address of the underlying asset of this aToken (E.g. WETH for aWETH)\\n   * @param incentivesController The smart contract managing potential incentives distribution\\n   * @param aTokenDecimals The decimals of the aToken, same as the underlying asset's\\n   * @param aTokenName The name of the aToken\\n   * @param aTokenSymbol The symbol of the aToken\\n   * @param params A set of encoded parameters for additional initialization\\n   */\\n  function initialize(\\n    IPool pool,\\n    address treasury,\\n    address underlyingAsset,\\n    IAaveIncentivesController incentivesController,\\n    uint8 aTokenDecimals,\\n    string calldata aTokenName,\\n    string calldata aTokenSymbol,\\n    bytes calldata params\\n  ) external;\\n}\\n\",\"keccak256\":\"0xb7c0da4c50ab10ce00e2325e649297923497738350092f64ef4b259307039dee\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPool.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';\\nimport {DataTypes} from '../protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title IPool\\n * @author Aave\\n * @notice Defines the basic interface for an Aave Pool.\\n */\\ninterface IPool {\\n  /**\\n   * @dev Emitted on mintUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens\\n   * @param amount The amount of supplied assets\\n   * @param referralCode The referral code used\\n   */\\n  event MintUnbacked(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on backUnbacked()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param backer The address paying for the backing\\n   * @param amount The amount added as backing\\n   * @param fee The amount paid in fees\\n   */\\n  event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee);\\n\\n  /**\\n   * @dev Emitted on supply()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address initiating the supply\\n   * @param onBehalfOf The beneficiary of the supply, receiving the aTokens\\n   * @param amount The amount supplied\\n   * @param referralCode The referral code used\\n   */\\n  event Supply(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on withdraw()\\n   * @param reserve The address of the underlying asset being withdrawn\\n   * @param user The address initiating the withdrawal, owner of aTokens\\n   * @param to The address that will receive the underlying\\n   * @param amount The amount to be withdrawn\\n   */\\n  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);\\n\\n  /**\\n   * @dev Emitted on borrow() and flashLoan() when debt needs to be opened\\n   * @param reserve The address of the underlying asset being borrowed\\n   * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just\\n   * initiator of the transaction on flashLoan()\\n   * @param onBehalfOf The address that will be getting the debt\\n   * @param amount The amount borrowed out\\n   * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable\\n   * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray\\n   * @param referralCode The referral code used\\n   */\\n  event Borrow(\\n    address indexed reserve,\\n    address user,\\n    address indexed onBehalfOf,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 borrowRate,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted on repay()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The beneficiary of the repayment, getting his debt reduced\\n   * @param repayer The address of the user initiating the repay(), providing the funds\\n   * @param amount The amount repaid\\n   * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly\\n   */\\n  event Repay(\\n    address indexed reserve,\\n    address indexed user,\\n    address indexed repayer,\\n    uint256 amount,\\n    bool useATokens\\n  );\\n\\n  /**\\n   * @dev Emitted on swapBorrowRateMode()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user swapping his rate mode\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  event SwapBorrowRateMode(\\n    address indexed reserve,\\n    address indexed user,\\n    DataTypes.InterestRateMode interestRateMode\\n  );\\n\\n  /**\\n   * @dev Emitted on borrow(), repay() and liquidationCall() when using isolated assets\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param totalDebt The total isolation mode debt for the reserve\\n   */\\n  event IsolationModeTotalDebtUpdated(address indexed asset, uint256 totalDebt);\\n\\n  /**\\n   * @dev Emitted when the user selects a certain asset category for eMode\\n   * @param user The address of the user\\n   * @param categoryId The category id\\n   */\\n  event UserEModeSet(address indexed user, uint8 categoryId);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on setUserUseReserveAsCollateral()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user enabling the usage as collateral\\n   */\\n  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on rebalanceStableBorrowRate()\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param user The address of the user for which the rebalance has been executed\\n   */\\n  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);\\n\\n  /**\\n   * @dev Emitted on flashLoan()\\n   * @param target The address of the flash loan receiver contract\\n   * @param initiator The address initiating the flash loan\\n   * @param asset The address of the asset being flash borrowed\\n   * @param amount The amount flash borrowed\\n   * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt\\n   * @param premium The fee flash borrowed\\n   * @param referralCode The referral code used\\n   */\\n  event FlashLoan(\\n    address indexed target,\\n    address initiator,\\n    address indexed asset,\\n    uint256 amount,\\n    DataTypes.InterestRateMode interestRateMode,\\n    uint256 premium,\\n    uint16 indexed referralCode\\n  );\\n\\n  /**\\n   * @dev Emitted when a borrower is liquidated.\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param liquidatedCollateralAmount The amount of collateral received by the liquidator\\n   * @param liquidator The address of the liquidator\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  event LiquidationCall(\\n    address indexed collateralAsset,\\n    address indexed debtAsset,\\n    address indexed user,\\n    uint256 debtToCover,\\n    uint256 liquidatedCollateralAmount,\\n    address liquidator,\\n    bool receiveAToken\\n  );\\n\\n  /**\\n   * @dev Emitted when the state of a reserve is updated.\\n   * @param reserve The address of the underlying asset of the reserve\\n   * @param liquidityRate The next liquidity rate\\n   * @param stableBorrowRate The next stable borrow rate\\n   * @param variableBorrowRate The next variable borrow rate\\n   * @param liquidityIndex The next liquidity index\\n   * @param variableBorrowIndex The next variable borrow index\\n   */\\n  event ReserveDataUpdated(\\n    address indexed reserve,\\n    uint256 liquidityRate,\\n    uint256 stableBorrowRate,\\n    uint256 variableBorrowRate,\\n    uint256 liquidityIndex,\\n    uint256 variableBorrowIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest.\\n   * @param reserve The address of the reserve\\n   * @param amountMinted The amount minted to the treasury\\n   */\\n  event MintedToTreasury(address indexed reserve, uint256 amountMinted);\\n\\n  /**\\n   * @notice Mints an `amount` of aTokens to the `onBehalfOf`\\n   * @param asset The address of the underlying asset to mint\\n   * @param amount The amount to mint\\n   * @param onBehalfOf The address that will receive the aTokens\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function mintUnbacked(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Back the current unbacked underlying with `amount` and pay `fee`.\\n   * @param asset The address of the underlying asset to back\\n   * @param amount The amount to back\\n   * @param fee The amount paid in fees\\n   * @return The backed amount\\n   */\\n  function backUnbacked(address asset, uint256 amount, uint256 fee) external returns (uint256);\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n\\n  /**\\n   * @notice Supply with transfer approval of asset to be supplied done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   */\\n  function supplyWithPermit(\\n    address asset,\\n    uint256 amount,\\n    address onBehalfOf,\\n    uint16 referralCode,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n\\n  /**\\n   * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n   * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n   * @param asset The address of the underlying asset to withdraw\\n   * @param amount The underlying amount to be withdrawn\\n   *   - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n   * @param to The address that will receive the underlying, same as msg.sender if the user\\n   *   wants to receive it on his own wallet, or a different address if the beneficiary is a\\n   *   different wallet\\n   * @return The final amount withdrawn\\n   */\\n  function withdraw(address asset, uint256 amount, address to) external returns (uint256);\\n\\n  /**\\n   * @notice Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower\\n   * already supplied enough collateral, or he was given enough allowance by a credit delegator on the\\n   * corresponding debt token (StableDebtToken or VariableDebtToken)\\n   * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet\\n   *   and 100 stable/variable debt tokens, depending on the `interestRateMode`\\n   * @param asset The address of the underlying asset to borrow\\n   * @param amount The amount to be borrowed\\n   * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself\\n   * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator\\n   * if he has been given credit delegation allowance\\n   */\\n  function borrow(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode,\\n    address onBehalfOf\\n  ) external;\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned\\n   * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf The address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @return The final amount repaid\\n   */\\n  function repay(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repay with transfer approval of asset to be repaid done via permit function\\n   * see: https://eips.ethereum.org/EIPS/eip-2612 and https://eips.ethereum.org/EIPS/eip-713\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the\\n   * user calling the function if he wants to reduce/remove his own debt, or the address of any other\\n   * other borrower whose debt should be removed\\n   * @param deadline The deadline timestamp that the permit is valid\\n   * @param permitV The V parameter of ERC712 permit sig\\n   * @param permitR The R parameter of ERC712 permit sig\\n   * @param permitS The S parameter of ERC712 permit sig\\n   * @return The final amount repaid\\n   */\\n  function repayWithPermit(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    address onBehalfOf,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Repays a borrowed `amount` on a specific reserve using the reserve aTokens, burning the\\n   * equivalent debt tokens\\n   * - E.g. User repays 100 USDC using 100 aUSDC, burning 100 variable/stable debt tokens\\n   * @dev  Passing uint256.max as amount will clean up any residual aToken dust balance, if the user aToken\\n   * balance is not enough to cover the whole debt\\n   * @param asset The address of the borrowed underlying asset previously borrowed\\n   * @param amount The amount to repay\\n   * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode`\\n   * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable\\n   * @return The final amount repaid\\n   */\\n  function repayWithATokens(\\n    address asset,\\n    uint256 amount,\\n    uint256 interestRateMode\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa\\n   * @param asset The address of the underlying asset borrowed\\n   * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable\\n   */\\n  function swapBorrowRateMode(address asset, uint256 interestRateMode) external;\\n\\n  /**\\n   * @notice Rebalances the stable interest rate of a user to the current stable rate defined on the reserve.\\n   * - Users can be rebalanced if the following conditions are satisfied:\\n   *     1. Usage ratio is above 95%\\n   *     2. the current supply APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too\\n   *        much has been borrowed at a stable rate and suppliers are not earning enough\\n   * @param asset The address of the underlying asset borrowed\\n   * @param user The address of the user to be rebalanced\\n   */\\n  function rebalanceStableBorrowRate(address asset, address user) external;\\n\\n  /**\\n   * @notice Allows suppliers to enable/disable a specific supplied asset as collateral\\n   * @param asset The address of the underlying asset supplied\\n   * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise\\n   */\\n  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;\\n\\n  /**\\n   * @notice Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1\\n   * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives\\n   *   a proportionally amount of the `collateralAsset` plus a bonus to cover market risk\\n   * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation\\n   * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation\\n   * @param user The address of the borrower getting liquidated\\n   * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover\\n   * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants\\n   * to receive the underlying collateral asset directly\\n   */\\n  function liquidationCall(\\n    address collateralAsset,\\n    address debtAsset,\\n    address user,\\n    uint256 debtToCover,\\n    bool receiveAToken\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanReceiver interface\\n   * @param assets The addresses of the assets being flash-borrowed\\n   * @param amounts The amounts of the assets being flash-borrowed\\n   * @param interestRateModes Types of the debt to open if the flash loan is not returned:\\n   *   0 -> Don't open any debt, just revert if funds can't be transferred from the receiver\\n   *   1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   *   2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address\\n   * @param onBehalfOf The address  that will receive the debt in the case of using on `modes` 1 or 2\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoan(\\n    address receiverAddress,\\n    address[] calldata assets,\\n    uint256[] calldata amounts,\\n    uint256[] calldata interestRateModes,\\n    address onBehalfOf,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Allows smartcontracts to access the liquidity of the pool within one transaction,\\n   * as long as the amount taken plus a fee is returned.\\n   * @dev IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept\\n   * into consideration. For further details please visit https://docs.aave.com/developers/\\n   * @param receiverAddress The address of the contract receiving the funds, implementing IFlashLoanSimpleReceiver interface\\n   * @param asset The address of the asset being flash-borrowed\\n   * @param amount The amount of the asset being flash-borrowed\\n   * @param params Variadic packed params to pass to the receiver as extra information\\n   * @param referralCode The code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function flashLoanSimple(\\n    address receiverAddress,\\n    address asset,\\n    uint256 amount,\\n    bytes calldata params,\\n    uint16 referralCode\\n  ) external;\\n\\n  /**\\n   * @notice Returns the user account data across all the reserves\\n   * @param user The address of the user\\n   * @return totalCollateralBase The total collateral of the user in the base currency used by the price feed\\n   * @return totalDebtBase The total debt of the user in the base currency used by the price feed\\n   * @return availableBorrowsBase The borrowing power left of the user in the base currency used by the price feed\\n   * @return currentLiquidationThreshold The liquidation threshold of the user\\n   * @return ltv The loan to value of The user\\n   * @return healthFactor The current health factor of the user\\n   */\\n  function getUserAccountData(\\n    address user\\n  )\\n    external\\n    view\\n    returns (\\n      uint256 totalCollateralBase,\\n      uint256 totalDebtBase,\\n      uint256 availableBorrowsBase,\\n      uint256 currentLiquidationThreshold,\\n      uint256 ltv,\\n      uint256 healthFactor\\n    );\\n\\n  /**\\n   * @notice Initializes a reserve, activating it, assigning an aToken and debt tokens and an\\n   * interest rate strategy\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param aTokenAddress The address of the aToken that will be assigned to the reserve\\n   * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve\\n   * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve\\n   * @param interestRateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function initReserve(\\n    address asset,\\n    address aTokenAddress,\\n    address stableDebtAddress,\\n    address variableDebtAddress,\\n    address interestRateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Drop a reserve\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   */\\n  function dropReserve(address asset) external;\\n\\n  /**\\n   * @notice Updates the address of the interest rate strategy contract\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param rateStrategyAddress The address of the interest rate strategy contract\\n   */\\n  function setReserveInterestRateStrategyAddress(\\n    address asset,\\n    address rateStrategyAddress\\n  ) external;\\n\\n  /**\\n   * @notice Sets the configuration bitmap of the reserve as a whole\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param asset The address of the underlying asset of the reserve\\n   * @param configuration The new configuration bitmap\\n   */\\n  function setConfiguration(\\n    address asset,\\n    DataTypes.ReserveConfigurationMap calldata configuration\\n  ) external;\\n\\n  /**\\n   * @notice Returns the configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The configuration of the reserve\\n   */\\n  function getConfiguration(\\n    address asset\\n  ) external view returns (DataTypes.ReserveConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the configuration of the user across all the reserves\\n   * @param user The user address\\n   * @return The configuration of the user\\n   */\\n  function getUserConfiguration(\\n    address user\\n  ) external view returns (DataTypes.UserConfigurationMap memory);\\n\\n  /**\\n   * @notice Returns the normalized income of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve's normalized income\\n   */\\n  function getReserveNormalizedIncome(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the normalized variable debt per unit of asset\\n   * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a\\n   * \\\"dynamic\\\" variable index based on time, current stored index and virtual rate at the current\\n   * moment (approx. a borrower would get if opening a position). This means that is always used in\\n   * combination with variable debt supply/balances.\\n   * If using this function externally, consider that is possible to have an increasing normalized\\n   * variable debt that is not equivalent to how the variable debt index would be updated in storage\\n   * (e.g. only updates with non-zero variable debt supply)\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The reserve normalized variable debt\\n   */\\n  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the state and configuration of the reserve\\n   * @param asset The address of the underlying asset of the reserve\\n   * @return The state and configuration data of the reserve\\n   */\\n  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);\\n\\n  /**\\n   * @notice Validates and finalizes an aToken transfer\\n   * @dev Only callable by the overlying aToken of the `asset`\\n   * @param asset The address of the underlying asset of the aToken\\n   * @param from The user from which the aTokens are transferred\\n   * @param to The user receiving the aTokens\\n   * @param amount The amount being transferred/withdrawn\\n   * @param balanceFromBefore The aToken balance of the `from` user before the transfer\\n   * @param balanceToBefore The aToken balance of the `to` user before the transfer\\n   */\\n  function finalizeTransfer(\\n    address asset,\\n    address from,\\n    address to,\\n    uint256 amount,\\n    uint256 balanceFromBefore,\\n    uint256 balanceToBefore\\n  ) external;\\n\\n  /**\\n   * @notice Returns the list of the underlying assets of all the initialized reserves\\n   * @dev It does not include dropped reserves\\n   * @return The addresses of the underlying assets of the initialized reserves\\n   */\\n  function getReservesList() external view returns (address[] memory);\\n\\n  /**\\n   * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct\\n   * @param id The id of the reserve as stored in the DataTypes.ReserveData struct\\n   * @return The address of the reserve associated with id\\n   */\\n  function getReserveAddressById(uint16 id) external view returns (address);\\n\\n  /**\\n   * @notice Returns the PoolAddressesProvider connected to this contract\\n   * @return The address of the PoolAddressesProvider\\n   */\\n  function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);\\n\\n  /**\\n   * @notice Updates the protocol fee on the bridging\\n   * @param bridgeProtocolFee The part of the premium sent to the protocol treasury\\n   */\\n  function updateBridgeProtocolFee(uint256 bridgeProtocolFee) external;\\n\\n  /**\\n   * @notice Updates flash loan premiums. Flash loan premium consists of two parts:\\n   * - A part is sent to aToken holders as extra, one time accumulated interest\\n   * - A part is collected by the protocol treasury\\n   * @dev The total premium is calculated on the total borrowed amount\\n   * @dev The premium to protocol is calculated on the total premium, being a percentage of `flashLoanPremiumTotal`\\n   * @dev Only callable by the PoolConfigurator contract\\n   * @param flashLoanPremiumTotal The total premium, expressed in bps\\n   * @param flashLoanPremiumToProtocol The part of the premium sent to the protocol treasury, expressed in bps\\n   */\\n  function updateFlashloanPremiums(\\n    uint128 flashLoanPremiumTotal,\\n    uint128 flashLoanPremiumToProtocol\\n  ) external;\\n\\n  /**\\n   * @notice Configures a new category for the eMode.\\n   * @dev In eMode, the protocol allows very high borrowing power to borrow assets of the same category.\\n   * The category 0 is reserved as it's the default for volatile assets\\n   * @param id The id of the category\\n   * @param config The configuration of the category\\n   */\\n  function configureEModeCategory(uint8 id, DataTypes.EModeCategory memory config) external;\\n\\n  /**\\n   * @notice Returns the data of an eMode category\\n   * @param id The id of the category\\n   * @return The configuration data of the category\\n   */\\n  function getEModeCategoryData(uint8 id) external view returns (DataTypes.EModeCategory memory);\\n\\n  /**\\n   * @notice Allows a user to use the protocol in eMode\\n   * @param categoryId The id of the category\\n   */\\n  function setUserEMode(uint8 categoryId) external;\\n\\n  /**\\n   * @notice Returns the eMode the user is using\\n   * @param user The address of the user\\n   * @return The eMode id\\n   */\\n  function getUserEMode(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Resets the isolation mode total debt of the given asset to zero\\n   * @dev It requires the given asset has zero debt ceiling\\n   * @param asset The address of the underlying asset to reset the isolationModeTotalDebt\\n   */\\n  function resetIsolationModeTotalDebt(address asset) external;\\n\\n  /**\\n   * @notice Returns the percentage of available liquidity that can be borrowed at once at stable rate\\n   * @return The percentage of available liquidity to borrow, expressed in bps\\n   */\\n  function MAX_STABLE_RATE_BORROW_SIZE_PERCENT() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the total fee on flash loans\\n   * @return The total fee on flashloans\\n   */\\n  function FLASHLOAN_PREMIUM_TOTAL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the part of the bridge fees sent to protocol\\n   * @return The bridge fee sent to the protocol treasury\\n   */\\n  function BRIDGE_PROTOCOL_FEE() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the part of the flashloan fees sent to protocol\\n   * @return The flashloan fee sent to the protocol treasury\\n   */\\n  function FLASHLOAN_PREMIUM_TO_PROTOCOL() external view returns (uint128);\\n\\n  /**\\n   * @notice Returns the maximum number of reserves supported to be listed in this Pool\\n   * @return The maximum number of reserves supported\\n   */\\n  function MAX_NUMBER_RESERVES() external view returns (uint16);\\n\\n  /**\\n   * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens\\n   * @param assets The list of reserves for which the minting needs to be executed\\n   */\\n  function mintToTreasury(address[] calldata assets) external;\\n\\n  /**\\n   * @notice Rescue and transfer tokens locked in this contract\\n   * @param token The address of the token\\n   * @param to The address of the recipient\\n   * @param amount The amount of token to transfer\\n   */\\n  function rescueTokens(address token, address to, uint256 amount) external;\\n\\n  /**\\n   * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens.\\n   * - E.g. User supplies 100 USDC and gets in return 100 aUSDC\\n   * @dev Deprecated: Use the `supply` function instead\\n   * @param asset The address of the underlying asset to supply\\n   * @param amount The amount to be supplied\\n   * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user\\n   *   wants to receive them on his own wallet, or a different address if the beneficiary of aTokens\\n   *   is a different wallet\\n   * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n   *   0 if the action is executed directly by the user, without any middle-man\\n   */\\n  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;\\n}\\n\",\"keccak256\":\"0xbfd2077251c8dc766a56d45f4b03eb07f3441323e79c0f794efea3657a99747f\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/misc/interfaces/IWETH.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\ninterface IWETH {\\n  function deposit() external payable;\\n\\n  function withdraw(uint256) external;\\n\\n  function approve(address guy, uint256 wad) external returns (bool);\\n\\n  function transferFrom(address src, address dst, uint256 wad) external returns (bool);\\n}\\n\",\"keccak256\":\"0x77edc81addcbe1acef487437e6a4d83369d6f09fd40e6fdbdd967cc16a9fb94c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\n\\n/**\\n * @title ReserveConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the reserve configuration\\n */\\nlibrary ReserveConfiguration {\\n  uint256 internal constant LTV_MASK =                       0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_THRESHOLD_MASK =     0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_BONUS_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFF; // prettier-ignore\\n  uint256 internal constant DECIMALS_MASK =                  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant ACTIVE_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FROZEN_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWING_MASK =                 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant STABLE_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant PAUSED_MASK =                    0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_MASK =   0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SILOED_BORROWING_MASK =          0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant FLASHLOAN_ENABLED_MASK =         0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant RESERVE_FACTOR_MASK =            0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant BORROW_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant SUPPLY_CAP_MASK =                0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_MASK =  0xFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant EMODE_CATEGORY_MASK =            0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant UNBACKED_MINT_CAP_MASK =         0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n  uint256 internal constant DEBT_CEILING_MASK =              0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore\\n\\n  /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed\\n  uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16;\\n  uint256 internal constant LIQUIDATION_BONUS_START_BIT_POSITION = 32;\\n  uint256 internal constant RESERVE_DECIMALS_START_BIT_POSITION = 48;\\n  uint256 internal constant IS_ACTIVE_START_BIT_POSITION = 56;\\n  uint256 internal constant IS_FROZEN_START_BIT_POSITION = 57;\\n  uint256 internal constant BORROWING_ENABLED_START_BIT_POSITION = 58;\\n  uint256 internal constant STABLE_BORROWING_ENABLED_START_BIT_POSITION = 59;\\n  uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60;\\n  uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61;\\n  uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62;\\n  uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63;\\n  uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64;\\n  uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80;\\n  uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116;\\n  uint256 internal constant LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION = 152;\\n  uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168;\\n  uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176;\\n  uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212;\\n\\n  uint256 internal constant MAX_VALID_LTV = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_BONUS = 65535;\\n  uint256 internal constant MAX_VALID_DECIMALS = 255;\\n  uint256 internal constant MAX_VALID_RESERVE_FACTOR = 65535;\\n  uint256 internal constant MAX_VALID_BORROW_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_SUPPLY_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_LIQUIDATION_PROTOCOL_FEE = 65535;\\n  uint256 internal constant MAX_VALID_EMODE_CATEGORY = 255;\\n  uint256 internal constant MAX_VALID_UNBACKED_MINT_CAP = 68719476735;\\n  uint256 internal constant MAX_VALID_DEBT_CEILING = 1099511627775;\\n\\n  uint256 public constant DEBT_CEILING_DECIMALS = 2;\\n  uint16 public constant MAX_RESERVES_COUNT = 128;\\n\\n  /**\\n   * @notice Sets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @param ltv The new ltv\\n   */\\n  function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure {\\n    require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV);\\n\\n    self.data = (self.data & LTV_MASK) | ltv;\\n  }\\n\\n  /**\\n   * @notice Gets the Loan to Value of the reserve\\n   * @param self The reserve configuration\\n   * @return The loan to value\\n   */\\n  function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) {\\n    return self.data & ~LTV_MASK;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @param threshold The new liquidation threshold\\n   */\\n  function setLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 threshold\\n  ) internal pure {\\n    require(threshold <= MAX_VALID_LIQUIDATION_THRESHOLD, Errors.INVALID_LIQ_THRESHOLD);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_THRESHOLD_MASK) |\\n      (threshold << LIQUIDATION_THRESHOLD_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation threshold of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation threshold\\n   */\\n  function getLiquidationThreshold(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @param bonus The new liquidation bonus\\n   */\\n  function setLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 bonus\\n  ) internal pure {\\n    require(bonus <= MAX_VALID_LIQUIDATION_BONUS, Errors.INVALID_LIQ_BONUS);\\n\\n    self.data =\\n      (self.data & LIQUIDATION_BONUS_MASK) |\\n      (bonus << LIQUIDATION_BONUS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the liquidation bonus of the reserve\\n   * @param self The reserve configuration\\n   * @return The liquidation bonus\\n   */\\n  function getLiquidationBonus(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @param decimals The decimals\\n   */\\n  function setDecimals(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 decimals\\n  ) internal pure {\\n    require(decimals <= MAX_VALID_DECIMALS, Errors.INVALID_DECIMALS);\\n\\n    self.data = (self.data & DECIMALS_MASK) | (decimals << RESERVE_DECIMALS_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the decimals of the underlying asset of the reserve\\n   * @param self The reserve configuration\\n   * @return The decimals of the asset\\n   */\\n  function getDecimals(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @param active The active state\\n   */\\n  function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure {\\n    self.data =\\n      (self.data & ACTIVE_MASK) |\\n      (uint256(active ? 1 : 0) << IS_ACTIVE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the active state of the reserve\\n   * @param self The reserve configuration\\n   * @return The active state\\n   */\\n  function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~ACTIVE_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @param frozen The frozen state\\n   */\\n  function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure {\\n    self.data =\\n      (self.data & FROZEN_MASK) |\\n      (uint256(frozen ? 1 : 0) << IS_FROZEN_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the frozen state of the reserve\\n   * @param self The reserve configuration\\n   * @return The frozen state\\n   */\\n  function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~FROZEN_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @param paused The paused state\\n   */\\n  function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure {\\n    self.data =\\n      (self.data & PAUSED_MASK) |\\n      (uint256(paused ? 1 : 0) << IS_PAUSED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the paused state of the reserve\\n   * @param self The reserve configuration\\n   * @return The paused state\\n   */\\n  function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) {\\n    return (self.data & ~PAUSED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the borrowable in isolation flag for the reserve.\\n   * @dev When this flag is set to true, the asset will be borrowable against isolated collaterals and the borrowed\\n   * amount will be accumulated in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @param borrowable True if the asset is borrowable\\n   */\\n  function setBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool borrowable\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWABLE_IN_ISOLATION_MASK) |\\n      (uint256(borrowable ? 1 : 0) << BORROWABLE_IN_ISOLATION_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowable in isolation flag for the reserve.\\n   * @dev If the returned flag is true, the asset is borrowable against isolated collateral. Assets borrowed with\\n   * isolated collateral is accounted for in the isolated collateral's total debt exposure.\\n   * @dev Only assets of the same family (eg USD stablecoins) should be borrowable in isolation mode to keep\\n   * consistency in the debt ceiling calculations.\\n   * @param self The reserve configuration\\n   * @return The borrowable in isolation flag\\n   */\\n  function getBorrowableInIsolation(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWABLE_IN_ISOLATION_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @param siloed True if the asset is siloed\\n   */\\n  function setSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool siloed\\n  ) internal pure {\\n    self.data =\\n      (self.data & SILOED_BORROWING_MASK) |\\n      (uint256(siloed ? 1 : 0) << SILOED_BORROWING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the siloed borrowing flag for the reserve.\\n   * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset.\\n   * @param self The reserve configuration\\n   * @return The siloed borrowing flag\\n   */\\n  function getSiloedBorrowing(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~SILOED_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the borrowing needs to be enabled, false otherwise\\n   */\\n  function setBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrowing state\\n   */\\n  function getBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Enables or disables stable rate borrowing on the reserve\\n   * @param self The reserve configuration\\n   * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise\\n   */\\n  function setStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool enabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & STABLE_BORROWING_MASK) |\\n      (uint256(enabled ? 1 : 0) << STABLE_BORROWING_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the stable rate borrowing state of the reserve\\n   * @param self The reserve configuration\\n   * @return The stable rate borrowing state\\n   */\\n  function getStableRateBorrowingEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~STABLE_BORROWING_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Sets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @param reserveFactor The reserve factor\\n   */\\n  function setReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 reserveFactor\\n  ) internal pure {\\n    require(reserveFactor <= MAX_VALID_RESERVE_FACTOR, Errors.INVALID_RESERVE_FACTOR);\\n\\n    self.data =\\n      (self.data & RESERVE_FACTOR_MASK) |\\n      (reserveFactor << RESERVE_FACTOR_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the reserve factor of the reserve\\n   * @param self The reserve configuration\\n   * @return The reserve factor\\n   */\\n  function getReserveFactor(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @param borrowCap The borrow cap\\n   */\\n  function setBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 borrowCap\\n  ) internal pure {\\n    require(borrowCap <= MAX_VALID_BORROW_CAP, Errors.INVALID_BORROW_CAP);\\n\\n    self.data = (self.data & BORROW_CAP_MASK) | (borrowCap << BORROW_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the borrow cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The borrow cap\\n   */\\n  function getBorrowCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @param supplyCap The supply cap\\n   */\\n  function setSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 supplyCap\\n  ) internal pure {\\n    require(supplyCap <= MAX_VALID_SUPPLY_CAP, Errors.INVALID_SUPPLY_CAP);\\n\\n    self.data = (self.data & SUPPLY_CAP_MASK) | (supplyCap << SUPPLY_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the supply cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The supply cap\\n   */\\n  function getSupplyCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the debt ceiling in isolation mode for the asset\\n   * @param self The reserve configuration\\n   * @param ceiling The maximum debt ceiling for the asset\\n   */\\n  function setDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 ceiling\\n  ) internal pure {\\n    require(ceiling <= MAX_VALID_DEBT_CEILING, Errors.INVALID_DEBT_CEILING);\\n\\n    self.data = (self.data & DEBT_CEILING_MASK) | (ceiling << DEBT_CEILING_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the debt ceiling for the asset if the asset is in isolation mode\\n   * @param self The reserve configuration\\n   * @return The debt ceiling (0 = isolation mode disabled)\\n   */\\n  function getDebtCeiling(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~DEBT_CEILING_MASK) >> DEBT_CEILING_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the liquidation protocol fee of the reserve\\n   * @param self The reserve configuration\\n   * @param liquidationProtocolFee The liquidation protocol fee\\n   */\\n  function setLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 liquidationProtocolFee\\n  ) internal pure {\\n    require(\\n      liquidationProtocolFee <= MAX_VALID_LIQUIDATION_PROTOCOL_FEE,\\n      Errors.INVALID_LIQUIDATION_PROTOCOL_FEE\\n    );\\n\\n    self.data =\\n      (self.data & LIQUIDATION_PROTOCOL_FEE_MASK) |\\n      (liquidationProtocolFee << LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the liquidation protocol fee\\n   * @param self The reserve configuration\\n   * @return The liquidation protocol fee\\n   */\\n  function getLiquidationProtocolFee(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return\\n      (self.data & ~LIQUIDATION_PROTOCOL_FEE_MASK) >> LIQUIDATION_PROTOCOL_FEE_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @param unbackedMintCap The unbacked mint cap\\n   */\\n  function setUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 unbackedMintCap\\n  ) internal pure {\\n    require(unbackedMintCap <= MAX_VALID_UNBACKED_MINT_CAP, Errors.INVALID_UNBACKED_MINT_CAP);\\n\\n    self.data =\\n      (self.data & UNBACKED_MINT_CAP_MASK) |\\n      (unbackedMintCap << UNBACKED_MINT_CAP_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the unbacked mint cap of the reserve\\n   * @param self The reserve configuration\\n   * @return The unbacked mint cap\\n   */\\n  function getUnbackedMintCap(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~UNBACKED_MINT_CAP_MASK) >> UNBACKED_MINT_CAP_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the eMode asset category\\n   * @param self The reserve configuration\\n   * @param category The asset category when the user selects the eMode\\n   */\\n  function setEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    uint256 category\\n  ) internal pure {\\n    require(category <= MAX_VALID_EMODE_CATEGORY, Errors.INVALID_EMODE_CATEGORY);\\n\\n    self.data = (self.data & EMODE_CATEGORY_MASK) | (category << EMODE_CATEGORY_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @dev Gets the eMode asset category\\n   * @param self The reserve configuration\\n   * @return The eMode category for the asset\\n   */\\n  function getEModeCategory(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256) {\\n    return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION;\\n  }\\n\\n  /**\\n   * @notice Sets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @param flashLoanEnabled True if the asset is flashloanable, false otherwise\\n   */\\n  function setFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self,\\n    bool flashLoanEnabled\\n  ) internal pure {\\n    self.data =\\n      (self.data & FLASHLOAN_ENABLED_MASK) |\\n      (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION);\\n  }\\n\\n  /**\\n   * @notice Gets the flashloanable flag for the reserve\\n   * @param self The reserve configuration\\n   * @return The flashloanable flag\\n   */\\n  function getFlashLoanEnabled(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0;\\n  }\\n\\n  /**\\n   * @notice Gets the configuration flags of the reserve\\n   * @param self The reserve configuration\\n   * @return The state flag representing active\\n   * @return The state flag representing frozen\\n   * @return The state flag representing borrowing enabled\\n   * @return The state flag representing stableRateBorrowing enabled\\n   * @return The state flag representing paused\\n   */\\n  function getFlags(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (bool, bool, bool, bool, bool) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~ACTIVE_MASK) != 0,\\n      (dataLocal & ~FROZEN_MASK) != 0,\\n      (dataLocal & ~BORROWING_MASK) != 0,\\n      (dataLocal & ~STABLE_BORROWING_MASK) != 0,\\n      (dataLocal & ~PAUSED_MASK) != 0\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the configuration parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing ltv\\n   * @return The state param representing liquidation threshold\\n   * @return The state param representing liquidation bonus\\n   * @return The state param representing reserve decimals\\n   * @return The state param representing reserve factor\\n   * @return The state param representing eMode category\\n   */\\n  function getParams(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256, uint256, uint256, uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      dataLocal & ~LTV_MASK,\\n      (dataLocal & ~LIQUIDATION_THRESHOLD_MASK) >> LIQUIDATION_THRESHOLD_START_BIT_POSITION,\\n      (dataLocal & ~LIQUIDATION_BONUS_MASK) >> LIQUIDATION_BONUS_START_BIT_POSITION,\\n      (dataLocal & ~DECIMALS_MASK) >> RESERVE_DECIMALS_START_BIT_POSITION,\\n      (dataLocal & ~RESERVE_FACTOR_MASK) >> RESERVE_FACTOR_START_BIT_POSITION,\\n      (dataLocal & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION\\n    );\\n  }\\n\\n  /**\\n   * @notice Gets the caps parameters of the reserve from storage\\n   * @param self The reserve configuration\\n   * @return The state param representing borrow cap\\n   * @return The state param representing supply cap.\\n   */\\n  function getCaps(\\n    DataTypes.ReserveConfigurationMap memory self\\n  ) internal pure returns (uint256, uint256) {\\n    uint256 dataLocal = self.data;\\n\\n    return (\\n      (dataLocal & ~BORROW_CAP_MASK) >> BORROW_CAP_START_BIT_POSITION,\\n      (dataLocal & ~SUPPLY_CAP_MASK) >> SUPPLY_CAP_START_BIT_POSITION\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5ba6b452f71aecd929c4cdc1f812f42ea45b1898e9eb8a8b03596584d4385e4f\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Errors} from '../helpers/Errors.sol';\\nimport {DataTypes} from '../types/DataTypes.sol';\\nimport {ReserveConfiguration} from './ReserveConfiguration.sol';\\n\\n/**\\n * @title UserConfiguration library\\n * @author Aave\\n * @notice Implements the bitmap logic to handle the user configuration\\n */\\nlibrary UserConfiguration {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n\\n  uint256 internal constant BORROWING_MASK =\\n    0x5555555555555555555555555555555555555555555555555555555555555555;\\n  uint256 internal constant COLLATERAL_MASK =\\n    0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;\\n\\n  /**\\n   * @notice Sets if the user is borrowing the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param borrowing True if the user is borrowing the reserve, false otherwise\\n   */\\n  function setBorrowing(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool borrowing\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << (reserveIndex << 1);\\n      if (borrowing) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Sets if the user is using as collateral the reserve identified by reserveIndex\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise\\n   */\\n  function setUsingAsCollateral(\\n    DataTypes.UserConfigurationMap storage self,\\n    uint256 reserveIndex,\\n    bool usingAsCollateral\\n  ) internal {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      uint256 bit = 1 << ((reserveIndex << 1) + 1);\\n      if (usingAsCollateral) {\\n        self.data |= bit;\\n      } else {\\n        self.data &= ~bit;\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns if a user has been using the reserve for borrowing or as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise\\n   */\\n  function isUsingAsCollateralOrBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 3 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve for borrowing\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve for borrowing, false otherwise\\n   */\\n  function isBorrowing(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> (reserveIndex << 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Validate a user has been using the reserve as collateral\\n   * @param self The configuration object\\n   * @param reserveIndex The index of the reserve in the bitmap\\n   * @return True if the user has been using a reserve as collateral, false otherwise\\n   */\\n  function isUsingAsCollateral(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 reserveIndex\\n  ) internal pure returns (bool) {\\n    unchecked {\\n      require(reserveIndex < ReserveConfiguration.MAX_RESERVES_COUNT, Errors.INVALID_RESERVE_INDEX);\\n      return (self.data >> ((reserveIndex << 1) + 1)) & 1 != 0;\\n    }\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying only one reserve as collateral\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isUsingAsCollateralOne(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    uint256 collateralData = self.data & COLLATERAL_MASK;\\n    return collateralData != 0 && (collateralData & (collateralData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been supplying any reserve as collateral\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral any reserve, false otherwise\\n   */\\n  function isUsingAsCollateralAny(\\n    DataTypes.UserConfigurationMap memory self\\n  ) internal pure returns (bool) {\\n    return self.data & COLLATERAL_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing only one asset\\n   * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0\\n   * @param self The configuration object\\n   * @return True if the user has been supplying as collateral one reserve, false otherwise\\n   */\\n  function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    uint256 borrowingData = self.data & BORROWING_MASK;\\n    return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0);\\n  }\\n\\n  /**\\n   * @notice Checks if a user has been borrowing from any reserve\\n   * @param self The configuration object\\n   * @return True if the user has been borrowing any reserve, false otherwise\\n   */\\n  function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data & BORROWING_MASK != 0;\\n  }\\n\\n  /**\\n   * @notice Checks if a user has not been using any reserve for borrowing or supply\\n   * @param self The configuration object\\n   * @return True if the user has not been borrowing or supplying any reserve, false otherwise\\n   */\\n  function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) {\\n    return self.data == 0;\\n  }\\n\\n  /**\\n   * @notice Returns the Isolation Mode state of the user\\n   * @param self The configuration object\\n   * @param reservesData The state of all the reserves\\n   * @param reservesList The addresses of all the active reserves\\n   * @return True if the user is in isolation mode, false otherwise\\n   * @return The address of the only asset used as collateral\\n   * @return The debt ceiling of the reserve\\n   */\\n  function getIsolationModeState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address, uint256) {\\n    if (isUsingAsCollateralOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, COLLATERAL_MASK);\\n\\n      address assetAddress = reservesList[assetId];\\n      uint256 ceiling = reservesData[assetAddress].configuration.getDebtCeiling();\\n      if (ceiling != 0) {\\n        return (true, assetAddress, ceiling);\\n      }\\n    }\\n    return (false, address(0), 0);\\n  }\\n\\n  /**\\n   * @notice Returns the siloed borrowing state for the user\\n   * @param self The configuration object\\n   * @param reservesData The data of all the reserves\\n   * @param reservesList The reserve list\\n   * @return True if the user has borrowed a siloed asset, false otherwise\\n   * @return The address of the only borrowed asset\\n   */\\n  function getSiloedBorrowingState(\\n    DataTypes.UserConfigurationMap memory self,\\n    mapping(address => DataTypes.ReserveData) storage reservesData,\\n    mapping(uint256 => address) storage reservesList\\n  ) internal view returns (bool, address) {\\n    if (isBorrowingOne(self)) {\\n      uint256 assetId = _getFirstAssetIdByMask(self, BORROWING_MASK);\\n      address assetAddress = reservesList[assetId];\\n      if (reservesData[assetAddress].configuration.getSiloedBorrowing()) {\\n        return (true, assetAddress);\\n      }\\n    }\\n\\n    return (false, address(0));\\n  }\\n\\n  /**\\n   * @notice Returns the address of the first asset flagged in the bitmap given the corresponding bitmask\\n   * @param self The configuration object\\n   * @return The index of the first asset flagged in the bitmap once the corresponding mask is applied\\n   */\\n  function _getFirstAssetIdByMask(\\n    DataTypes.UserConfigurationMap memory self,\\n    uint256 mask\\n  ) internal pure returns (uint256) {\\n    unchecked {\\n      uint256 bitmapData = self.data & mask;\\n      uint256 firstAssetPosition = bitmapData & ~(bitmapData - 1);\\n      uint256 id;\\n\\n      while ((firstAssetPosition >>= 2) != 0) {\\n        id += 1;\\n      }\\n      return id;\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x12ec944eb9a941ae5fe9842192f47328df99375d589cfd9a11d6bb54f868a456\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/helpers/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Errors library\\n * @author Aave\\n * @notice Defines the error messages emitted by the different contracts of the Aave protocol\\n */\\nlibrary Errors {\\n  string public constant CALLER_NOT_POOL_ADMIN = '1'; // 'The caller of the function is not a pool admin'\\n  string public constant CALLER_NOT_EMERGENCY_ADMIN = '2'; // 'The caller of the function is not an emergency admin'\\n  string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = '3'; // 'The caller of the function is not a pool or emergency admin'\\n  string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = '4'; // 'The caller of the function is not a risk or pool admin'\\n  string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = '5'; // 'The caller of the function is not an asset listing or pool admin'\\n  string public constant CALLER_NOT_BRIDGE = '6'; // 'The caller of the function is not a bridge'\\n  string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = '7'; // 'Pool addresses provider is not registered'\\n  string public constant INVALID_ADDRESSES_PROVIDER_ID = '8'; // 'Invalid id for the pool addresses provider'\\n  string public constant NOT_CONTRACT = '9'; // 'Address is not a contract'\\n  string public constant CALLER_NOT_POOL_CONFIGURATOR = '10'; // 'The caller of the function is not the pool configurator'\\n  string public constant CALLER_NOT_ATOKEN = '11'; // 'The caller of the function is not an AToken'\\n  string public constant INVALID_ADDRESSES_PROVIDER = '12'; // 'The address of the pool addresses provider is invalid'\\n  string public constant INVALID_FLASHLOAN_EXECUTOR_RETURN = '13'; // 'Invalid return value of the flashloan executor function'\\n  string public constant RESERVE_ALREADY_ADDED = '14'; // 'Reserve has already been added to reserve list'\\n  string public constant NO_MORE_RESERVES_ALLOWED = '15'; // 'Maximum amount of reserves in the pool reached'\\n  string public constant EMODE_CATEGORY_RESERVED = '16'; // 'Zero eMode category is reserved for volatile heterogeneous assets'\\n  string public constant INVALID_EMODE_CATEGORY_ASSIGNMENT = '17'; // 'Invalid eMode category assignment to asset'\\n  string public constant RESERVE_LIQUIDITY_NOT_ZERO = '18'; // 'The liquidity of the reserve needs to be 0'\\n  string public constant FLASHLOAN_PREMIUM_INVALID = '19'; // 'Invalid flashloan premium'\\n  string public constant INVALID_RESERVE_PARAMS = '20'; // 'Invalid risk parameters for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY_PARAMS = '21'; // 'Invalid risk parameters for the eMode category'\\n  string public constant BRIDGE_PROTOCOL_FEE_INVALID = '22'; // 'Invalid bridge protocol fee'\\n  string public constant CALLER_MUST_BE_POOL = '23'; // 'The caller of this function must be a pool'\\n  string public constant INVALID_MINT_AMOUNT = '24'; // 'Invalid amount to mint'\\n  string public constant INVALID_BURN_AMOUNT = '25'; // 'Invalid amount to burn'\\n  string public constant INVALID_AMOUNT = '26'; // 'Amount must be greater than 0'\\n  string public constant RESERVE_INACTIVE = '27'; // 'Action requires an active reserve'\\n  string public constant RESERVE_FROZEN = '28'; // 'Action cannot be performed because the reserve is frozen'\\n  string public constant RESERVE_PAUSED = '29'; // 'Action cannot be performed because the reserve is paused'\\n  string public constant BORROWING_NOT_ENABLED = '30'; // 'Borrowing is not enabled'\\n  string public constant STABLE_BORROWING_NOT_ENABLED = '31'; // 'Stable borrowing is not enabled'\\n  string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = '32'; // 'User cannot withdraw more than the available balance'\\n  string public constant INVALID_INTEREST_RATE_MODE_SELECTED = '33'; // 'Invalid interest rate mode selected'\\n  string public constant COLLATERAL_BALANCE_IS_ZERO = '34'; // 'The collateral balance is 0'\\n  string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD = '35'; // 'Health factor is lesser than the liquidation threshold'\\n  string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = '36'; // 'There is not enough collateral to cover a new borrow'\\n  string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = '37'; // 'Collateral is (mostly) the same currency that is being borrowed'\\n  string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = '38'; // 'The requested amount is greater than the max loan size in stable rate mode'\\n  string public constant NO_DEBT_OF_SELECTED_TYPE = '39'; // 'For repayment of a specific type of debt, the user needs to have debt that type'\\n  string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = '40'; // 'To repay on behalf of a user an explicit amount to repay is needed'\\n  string public constant NO_OUTSTANDING_STABLE_DEBT = '41'; // 'User does not have outstanding stable rate debt on this reserve'\\n  string public constant NO_OUTSTANDING_VARIABLE_DEBT = '42'; // 'User does not have outstanding variable rate debt on this reserve'\\n  string public constant UNDERLYING_BALANCE_ZERO = '43'; // 'The underlying balance needs to be greater than 0'\\n  string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = '44'; // 'Interest rate rebalance conditions were not met'\\n  string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold'\\n  string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated'\\n  string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency'\\n  string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters'\\n  string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded'\\n  string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded'\\n  string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded'\\n  string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded'\\n  string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)'\\n  string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero'\\n  string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero'\\n  string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed'\\n  string public constant INCONSISTENT_EMODE_CATEGORY = '58'; // 'Inconsistent eMode category'\\n  string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = '59'; // 'Price oracle sentinel validation failed'\\n  string public constant ASSET_NOT_BORROWABLE_IN_ISOLATION = '60'; // 'Asset is not borrowable in isolation mode'\\n  string public constant RESERVE_ALREADY_INITIALIZED = '61'; // 'Reserve has already been initialized'\\n  string public constant USER_IN_ISOLATION_MODE_OR_LTV_ZERO = '62'; // 'User is in isolation mode or ltv is zero'\\n  string public constant INVALID_LTV = '63'; // 'Invalid ltv parameter for the reserve'\\n  string public constant INVALID_LIQ_THRESHOLD = '64'; // 'Invalid liquidity threshold parameter for the reserve'\\n  string public constant INVALID_LIQ_BONUS = '65'; // 'Invalid liquidity bonus parameter for the reserve'\\n  string public constant INVALID_DECIMALS = '66'; // 'Invalid decimals parameter of the underlying asset of the reserve'\\n  string public constant INVALID_RESERVE_FACTOR = '67'; // 'Invalid reserve factor parameter for the reserve'\\n  string public constant INVALID_BORROW_CAP = '68'; // 'Invalid borrow cap for the reserve'\\n  string public constant INVALID_SUPPLY_CAP = '69'; // 'Invalid supply cap for the reserve'\\n  string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = '70'; // 'Invalid liquidation protocol fee for the reserve'\\n  string public constant INVALID_EMODE_CATEGORY = '71'; // 'Invalid eMode category for the reserve'\\n  string public constant INVALID_UNBACKED_MINT_CAP = '72'; // 'Invalid unbacked mint cap for the reserve'\\n  string public constant INVALID_DEBT_CEILING = '73'; // 'Invalid debt ceiling for the reserve\\n  string public constant INVALID_RESERVE_INDEX = '74'; // 'Invalid reserve index'\\n  string public constant ACL_ADMIN_CANNOT_BE_ZERO = '75'; // 'ACL admin cannot be set to the zero address'\\n  string public constant INCONSISTENT_PARAMS_LENGTH = '76'; // 'Array parameters that should be equal length are not'\\n  string public constant ZERO_ADDRESS_NOT_VALID = '77'; // 'Zero address not valid'\\n  string public constant INVALID_EXPIRATION = '78'; // 'Invalid expiration'\\n  string public constant INVALID_SIGNATURE = '79'; // 'Invalid signature'\\n  string public constant OPERATION_NOT_SUPPORTED = '80'; // 'Operation not supported'\\n  string public constant DEBT_CEILING_NOT_ZERO = '81'; // 'Debt ceiling is not zero'\\n  string public constant ASSET_NOT_LISTED = '82'; // 'Asset is not listed'\\n  string public constant INVALID_OPTIMAL_USAGE_RATIO = '83'; // 'Invalid optimal usage ratio'\\n  string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = '84'; // 'Invalid optimal stable to total debt ratio'\\n  string public constant UNDERLYING_CANNOT_BE_RESCUED = '85'; // 'The underlying asset cannot be rescued'\\n  string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = '86'; // 'Reserve has already been added to reserve list'\\n  string public constant POOL_ADDRESSES_DO_NOT_MATCH = '87'; // 'The token implementation pool address and the pool address provided by the initializing pool do not match'\\n  string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled'\\n  string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one'\\n  string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0\\n  string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled\\n}\\n\",\"keccak256\":\"0x61757945ed506349f2cec8b99806124ef17f70644faba9860fb134df8ca34e86\",\"license\":\"BUSL-1.1\"},\"@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nlibrary DataTypes {\\n  struct ReserveData {\\n    //stores the reserve configuration\\n    ReserveConfigurationMap configuration;\\n    //the liquidity index. Expressed in ray\\n    uint128 liquidityIndex;\\n    //the current supply rate. Expressed in ray\\n    uint128 currentLiquidityRate;\\n    //variable borrow index. Expressed in ray\\n    uint128 variableBorrowIndex;\\n    //the current variable borrow rate. Expressed in ray\\n    uint128 currentVariableBorrowRate;\\n    //the current stable borrow rate. Expressed in ray\\n    uint128 currentStableBorrowRate;\\n    //timestamp of last update\\n    uint40 lastUpdateTimestamp;\\n    //the id of the reserve. Represents the position in the list of the active reserves\\n    uint16 id;\\n    //aToken address\\n    address aTokenAddress;\\n    //stableDebtToken address\\n    address stableDebtTokenAddress;\\n    //variableDebtToken address\\n    address variableDebtTokenAddress;\\n    //address of the interest rate strategy\\n    address interestRateStrategyAddress;\\n    //the current treasury balance, scaled\\n    uint128 accruedToTreasury;\\n    //the outstanding unbacked aTokens minted through the bridging feature\\n    uint128 unbacked;\\n    //the outstanding debt borrowed against this asset in isolation mode\\n    uint128 isolationModeTotalDebt;\\n  }\\n\\n  struct ReserveConfigurationMap {\\n    //bit 0-15: LTV\\n    //bit 16-31: Liq. threshold\\n    //bit 32-47: Liq. bonus\\n    //bit 48-55: Decimals\\n    //bit 56: reserve is active\\n    //bit 57: reserve is frozen\\n    //bit 58: borrowing is enabled\\n    //bit 59: stable rate borrowing enabled\\n    //bit 60: asset is paused\\n    //bit 61: borrowing in isolation mode is enabled\\n    //bit 62: siloed borrowing enabled\\n    //bit 63: flashloaning enabled\\n    //bit 64-79: reserve factor\\n    //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap\\n    //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap\\n    //bit 152-167 liquidation protocol fee\\n    //bit 168-175 eMode category\\n    //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled\\n    //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals\\n    //bit 252-255 unused\\n\\n    uint256 data;\\n  }\\n\\n  struct UserConfigurationMap {\\n    /**\\n     * @dev Bitmap of the users collaterals and borrows. It is divided in pairs of bits, one pair per asset.\\n     * The first bit indicates if an asset is used as collateral by the user, the second whether an\\n     * asset is borrowed by the user.\\n     */\\n    uint256 data;\\n  }\\n\\n  struct EModeCategory {\\n    // each eMode category has a custom ltv and liquidation threshold\\n    uint16 ltv;\\n    uint16 liquidationThreshold;\\n    uint16 liquidationBonus;\\n    // each eMode category may or may not have a custom oracle to override the individual assets price oracles\\n    address priceSource;\\n    string label;\\n  }\\n\\n  enum InterestRateMode {NONE, STABLE, VARIABLE}\\n\\n  struct ReserveCache {\\n    uint256 currScaledVariableDebt;\\n    uint256 nextScaledVariableDebt;\\n    uint256 currPrincipalStableDebt;\\n    uint256 currAvgStableBorrowRate;\\n    uint256 currTotalStableDebt;\\n    uint256 nextAvgStableBorrowRate;\\n    uint256 nextTotalStableDebt;\\n    uint256 currLiquidityIndex;\\n    uint256 nextLiquidityIndex;\\n    uint256 currVariableBorrowIndex;\\n    uint256 nextVariableBorrowIndex;\\n    uint256 currLiquidityRate;\\n    uint256 currVariableBorrowRate;\\n    uint256 reserveFactor;\\n    ReserveConfigurationMap reserveConfiguration;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    uint40 reserveLastUpdateTimestamp;\\n    uint40 stableDebtLastUpdateTimestamp;\\n  }\\n\\n  struct ExecuteLiquidationCallParams {\\n    uint256 reservesCount;\\n    uint256 debtToCover;\\n    address collateralAsset;\\n    address debtAsset;\\n    address user;\\n    bool receiveAToken;\\n    address priceOracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteSupplyParams {\\n    address asset;\\n    uint256 amount;\\n    address onBehalfOf;\\n    uint16 referralCode;\\n  }\\n\\n  struct ExecuteBorrowParams {\\n    address asset;\\n    address user;\\n    address onBehalfOf;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint16 referralCode;\\n    bool releaseUnderlying;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct ExecuteRepayParams {\\n    address asset;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    address onBehalfOf;\\n    bool useATokens;\\n  }\\n\\n  struct ExecuteWithdrawParams {\\n    address asset;\\n    uint256 amount;\\n    address to;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ExecuteSetUserEModeParams {\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 categoryId;\\n  }\\n\\n  struct FinalizeTransferParams {\\n    address asset;\\n    address from;\\n    address to;\\n    uint256 amount;\\n    uint256 balanceFromBefore;\\n    uint256 balanceToBefore;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 fromEModeCategory;\\n  }\\n\\n  struct FlashloanParams {\\n    address receiverAddress;\\n    address[] assets;\\n    uint256[] amounts;\\n    uint256[] interestRateModes;\\n    address onBehalfOf;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n    uint256 maxStableRateBorrowSizePercent;\\n    uint256 reservesCount;\\n    address addressesProvider;\\n    uint8 userEModeCategory;\\n    bool isAuthorizedFlashBorrower;\\n  }\\n\\n  struct FlashloanSimpleParams {\\n    address receiverAddress;\\n    address asset;\\n    uint256 amount;\\n    bytes params;\\n    uint16 referralCode;\\n    uint256 flashLoanPremiumToProtocol;\\n    uint256 flashLoanPremiumTotal;\\n  }\\n\\n  struct FlashLoanRepaymentParams {\\n    uint256 amount;\\n    uint256 totalPremium;\\n    uint256 flashLoanPremiumToProtocol;\\n    address asset;\\n    address receiverAddress;\\n    uint16 referralCode;\\n  }\\n\\n  struct CalculateUserAccountDataParams {\\n    UserConfigurationMap userConfig;\\n    uint256 reservesCount;\\n    address user;\\n    address oracle;\\n    uint8 userEModeCategory;\\n  }\\n\\n  struct ValidateBorrowParams {\\n    ReserveCache reserveCache;\\n    UserConfigurationMap userConfig;\\n    address asset;\\n    address userAddress;\\n    uint256 amount;\\n    InterestRateMode interestRateMode;\\n    uint256 maxStableLoanPercent;\\n    uint256 reservesCount;\\n    address oracle;\\n    uint8 userEModeCategory;\\n    address priceOracleSentinel;\\n    bool isolationModeActive;\\n    address isolationModeCollateralAddress;\\n    uint256 isolationModeDebtCeiling;\\n  }\\n\\n  struct ValidateLiquidationCallParams {\\n    ReserveCache debtReserveCache;\\n    uint256 totalDebt;\\n    uint256 healthFactor;\\n    address priceOracleSentinel;\\n  }\\n\\n  struct CalculateInterestRatesParams {\\n    uint256 unbacked;\\n    uint256 liquidityAdded;\\n    uint256 liquidityTaken;\\n    uint256 totalStableDebt;\\n    uint256 totalVariableDebt;\\n    uint256 averageStableBorrowRate;\\n    uint256 reserveFactor;\\n    address reserve;\\n    address aToken;\\n  }\\n\\n  struct InitReserveParams {\\n    address asset;\\n    address aTokenAddress;\\n    address stableDebtAddress;\\n    address variableDebtAddress;\\n    address interestRateStrategyAddress;\\n    uint16 reservesCount;\\n    uint16 maxNumberReserves;\\n  }\\n}\\n\",\"keccak256\":\"0x771cb99fd8519c974f7e12130387c4d9a997a6e8d0ac10e4303b842fe53efa88\",\"license\":\"BUSL-1.1\"},\"contracts/libraries/DataTypesHelper.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {DataTypes} from '@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol';\\n\\n/**\\n * @title DataTypesHelper\\n * @author Aave\\n * @dev Helper library to track user current debt balance, used by WrappedTokenGatewayV3\\n */\\nlibrary DataTypesHelper {\\n  /**\\n   * @notice Fetches the user current stable and variable debt balances\\n   * @param user The user address\\n   * @param reserve The reserve data object\\n   * @return The stable debt balance\\n   * @return The variable debt balance\\n   **/\\n  function getUserCurrentDebt(\\n    address user,\\n    DataTypes.ReserveData memory reserve\\n  ) internal view returns (uint256, uint256) {\\n    return (\\n      IERC20(reserve.stableDebtTokenAddress).balanceOf(user),\\n      IERC20(reserve.variableDebtTokenAddress).balanceOf(user)\\n    );\\n  }\\n}\\n\",\"keccak256\":\"0x5b0f93b97472ab6d98e1502c71a8492862eb95f389a1b27a18bbe323fb66beae\",\"license\":\"AGPL-3.0\"},\"contracts/misc/WrappedTokenGatewayV3.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {GPv2SafeERC20} from '@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IWETH} from '@aave/core-v3/contracts/misc/interfaces/IWETH.sol';\\nimport {IPool} from '@aave/core-v3/contracts/interfaces/IPool.sol';\\nimport {IAToken} from '@aave/core-v3/contracts/interfaces/IAToken.sol';\\nimport {ReserveConfiguration} from '@aave/core-v3/contracts/protocol/libraries/configuration/ReserveConfiguration.sol';\\nimport {UserConfiguration} from '@aave/core-v3/contracts/protocol/libraries/configuration/UserConfiguration.sol';\\nimport {DataTypes} from '@aave/core-v3/contracts/protocol/libraries/types/DataTypes.sol';\\nimport {IWrappedTokenGatewayV3} from './interfaces/IWrappedTokenGatewayV3.sol';\\nimport {DataTypesHelper} from '../libraries/DataTypesHelper.sol';\\n\\n/**\\n * @dev This contract is an upgrade of the WrappedTokenGatewayV3 contract, with immutable pool address.\\n * This contract keeps the same interface of the deprecated WrappedTokenGatewayV3 contract.\\n */\\ncontract WrappedTokenGatewayV3 is IWrappedTokenGatewayV3, Ownable {\\n  using ReserveConfiguration for DataTypes.ReserveConfigurationMap;\\n  using UserConfiguration for DataTypes.UserConfigurationMap;\\n  using GPv2SafeERC20 for IERC20;\\n\\n  IWETH internal immutable WETH;\\n  IPool internal immutable POOL;\\n\\n  /**\\n   * @dev Sets the WETH address and the PoolAddressesProvider address. Infinite approves pool.\\n   * @param weth Address of the Wrapped Ether contract\\n   * @param owner Address of the owner of this contract\\n   **/\\n  constructor(address weth, address owner, IPool pool) {\\n    WETH = IWETH(weth);\\n    POOL = pool;\\n    transferOwnership(owner);\\n    IWETH(weth).approve(address(pool), type(uint256).max);\\n  }\\n\\n  /**\\n   * @dev deposits WETH into the reserve, using native ETH. A corresponding amount of the overlying asset (aTokens)\\n   * is minted.\\n   * @param onBehalfOf address of the user who will receive the aTokens representing the deposit\\n   * @param referralCode integrators are assigned a referral code and can potentially receive rewards.\\n   **/\\n  function depositETH(address, address onBehalfOf, uint16 referralCode) external payable override {\\n    WETH.deposit{value: msg.value}();\\n    POOL.deposit(address(WETH), msg.value, onBehalfOf, referralCode);\\n  }\\n\\n  /**\\n   * @dev withdraws the WETH _reserves of msg.sender.\\n   * @param amount amount of aWETH to withdraw and receive native ETH\\n   * @param to address of the user who will receive native ETH\\n   */\\n  function withdrawETH(address, uint256 amount, address to) external override {\\n    IAToken aWETH = IAToken(POOL.getReserveData(address(WETH)).aTokenAddress);\\n    uint256 userBalance = aWETH.balanceOf(msg.sender);\\n    uint256 amountToWithdraw = amount;\\n\\n    // if amount is equal to uint(-1), the user wants to redeem everything\\n    if (amount == type(uint256).max) {\\n      amountToWithdraw = userBalance;\\n    }\\n    aWETH.transferFrom(msg.sender, address(this), amountToWithdraw);\\n    POOL.withdraw(address(WETH), amountToWithdraw, address(this));\\n    WETH.withdraw(amountToWithdraw);\\n    _safeTransferETH(to, amountToWithdraw);\\n  }\\n\\n  /**\\n   * @dev repays a borrow on the WETH reserve, for the specified amount (or for the whole amount, if uint256(-1) is specified).\\n   * @param amount the amount to repay, or uint256(-1) if the user wants to repay everything\\n   * @param rateMode the rate mode to repay\\n   * @param onBehalfOf the address for which msg.sender is repaying\\n   */\\n  function repayETH(\\n    address,\\n    uint256 amount,\\n    uint256 rateMode,\\n    address onBehalfOf\\n  ) external payable override {\\n    (uint256 stableDebt, uint256 variableDebt) = DataTypesHelper.getUserCurrentDebt(\\n      onBehalfOf,\\n      POOL.getReserveData(address(WETH))\\n    );\\n\\n    uint256 paybackAmount = DataTypes.InterestRateMode(rateMode) ==\\n      DataTypes.InterestRateMode.STABLE\\n      ? stableDebt\\n      : variableDebt;\\n\\n    if (amount < paybackAmount) {\\n      paybackAmount = amount;\\n    }\\n    require(msg.value >= paybackAmount, 'msg.value is less than repayment amount');\\n    WETH.deposit{value: paybackAmount}();\\n    POOL.repay(address(WETH), msg.value, rateMode, onBehalfOf);\\n\\n    // refund remaining dust eth\\n    if (msg.value > paybackAmount) _safeTransferETH(msg.sender, msg.value - paybackAmount);\\n  }\\n\\n  /**\\n   * @dev borrow WETH, unwraps to ETH and send both the ETH and DebtTokens to msg.sender, via `approveDelegation` and onBehalf argument in `Pool.borrow`.\\n   * @param amount the amount of ETH to borrow\\n   * @param interestRateMode the interest rate mode\\n   * @param referralCode integrators are assigned a referral code and can potentially receive rewards\\n   */\\n  function borrowETH(\\n    address,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode\\n  ) external override {\\n    POOL.borrow(address(WETH), amount, interestRateMode, referralCode, msg.sender);\\n    WETH.withdraw(amount);\\n    _safeTransferETH(msg.sender, amount);\\n  }\\n\\n  /**\\n   * @dev withdraws the WETH _reserves of msg.sender.\\n   * @param amount amount of aWETH to withdraw and receive native ETH\\n   * @param to address of the user who will receive native ETH\\n   * @param deadline validity deadline of permit and so depositWithPermit signature\\n   * @param permitV V parameter of ERC712 permit sig\\n   * @param permitR R parameter of ERC712 permit sig\\n   * @param permitS S parameter of ERC712 permit sig\\n   */\\n  function withdrawETHWithPermit(\\n    address,\\n    uint256 amount,\\n    address to,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external override {\\n    IAToken aWETH = IAToken(POOL.getReserveData(address(WETH)).aTokenAddress);\\n    uint256 userBalance = aWETH.balanceOf(msg.sender);\\n    uint256 amountToWithdraw = amount;\\n\\n    // if amount is equal to type(uint256).max, the user wants to redeem everything\\n    if (amount == type(uint256).max) {\\n      amountToWithdraw = userBalance;\\n    }\\n    // permit `amount` rather than `amountToWithdraw` to make it easier for front-ends and integrators\\n    aWETH.permit(msg.sender, address(this), amount, deadline, permitV, permitR, permitS);\\n    aWETH.transferFrom(msg.sender, address(this), amountToWithdraw);\\n    POOL.withdraw(address(WETH), amountToWithdraw, address(this));\\n    WETH.withdraw(amountToWithdraw);\\n    _safeTransferETH(to, amountToWithdraw);\\n  }\\n\\n  /**\\n   * @dev transfer ETH to an address, revert if it fails.\\n   * @param to recipient of the transfer\\n   * @param value the amount to send\\n   */\\n  function _safeTransferETH(address to, uint256 value) internal {\\n    (bool success, ) = to.call{value: value}(new bytes(0));\\n    require(success, 'ETH_TRANSFER_FAILED');\\n  }\\n\\n  /**\\n   * @dev transfer ERC20 from the utility contract, for ERC20 recovery in case of stuck tokens due\\n   * direct transfers to the contract address.\\n   * @param token token to transfer\\n   * @param to recipient of the transfer\\n   * @param amount amount to send\\n   */\\n  function emergencyTokenTransfer(address token, address to, uint256 amount) external onlyOwner {\\n    IERC20(token).safeTransfer(to, amount);\\n  }\\n\\n  /**\\n   * @dev transfer native Ether from the utility contract, for native Ether recovery in case of stuck Ether\\n   * due to selfdestructs or ether transfers to the pre-computed contract address before deployment.\\n   * @param to recipient of the transfer\\n   * @param amount amount to send\\n   */\\n  function emergencyEtherTransfer(address to, uint256 amount) external onlyOwner {\\n    _safeTransferETH(to, amount);\\n  }\\n\\n  /**\\n   * @dev Get WETH address used by WrappedTokenGatewayV3\\n   */\\n  function getWETHAddress() external view returns (address) {\\n    return address(WETH);\\n  }\\n\\n  /**\\n   * @dev Only WETH contract is allowed to transfer ETH here. Prevent other addresses to send Ether to this contract.\\n   */\\n  receive() external payable {\\n    require(msg.sender == address(WETH), 'Receive not allowed');\\n  }\\n\\n  /**\\n   * @dev Revert fallback calls\\n   */\\n  fallback() external payable {\\n    revert('Fallback not allowed');\\n  }\\n}\\n\",\"keccak256\":\"0xbf39193f749dd02bbb4776f47e6216ca7402c5036ca797c382d8042da373ea88\",\"license\":\"AGPL-3.0\"},\"contracts/misc/interfaces/IWrappedTokenGatewayV3.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IWrappedTokenGatewayV3 {\\n  function depositETH(address pool, address onBehalfOf, uint16 referralCode) external payable;\\n\\n  function withdrawETH(address pool, uint256 amount, address onBehalfOf) external;\\n\\n  function repayETH(\\n    address pool,\\n    uint256 amount,\\n    uint256 rateMode,\\n    address onBehalfOf\\n  ) external payable;\\n\\n  function borrowETH(\\n    address pool,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode\\n  ) external;\\n\\n  function withdrawETHWithPermit(\\n    address pool,\\n    uint256 amount,\\n    address to,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n}\\n\",\"keccak256\":\"0xe3fbc5c01f57aa928433061c1c81ab3653b9146f7d23fa78d2be7efd8b2f49de\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1472,"contract":"contracts/misc/WrappedTokenGatewayV3.sol:WrappedTokenGatewayV3","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/misc/interfaces/IEACAggregatorProxy.sol":{"IEACAggregatorProxy":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"int256","name":"current","type":"int256"},{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"AnswerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":true,"internalType":"address","name":"startedBy","type":"address"}],"name":"NewRound","type":"event"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"getAnswer","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"getTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestAnswer","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"decimals()":"313ce567","getAnswer(uint256)":"b5ab58dc","getTimestamp(uint256)":"b633620c","latestAnswer()":"50d25bcd","latestRound()":"668a0f02","latestTimestamp()":"8205bf6a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"int256\",\"name\":\"current\",\"type\":\"int256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"AnswerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"startedBy\",\"type\":\"address\"}],\"name\":\"NewRound\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"}],\"name\":\"getAnswer\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"}],\"name\":\"getTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestAnswer\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/misc/interfaces/IEACAggregatorProxy.sol\":\"IEACAggregatorProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"contracts/misc/interfaces/IEACAggregatorProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IEACAggregatorProxy {\\n  function decimals() external view returns (uint8);\\n\\n  function latestAnswer() external view returns (int256);\\n\\n  function latestTimestamp() external view returns (uint256);\\n\\n  function latestRound() external view returns (uint256);\\n\\n  function getAnswer(uint256 roundId) external view returns (int256);\\n\\n  function getTimestamp(uint256 roundId) external view returns (uint256);\\n\\n  event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 timestamp);\\n  event NewRound(uint256 indexed roundId, address indexed startedBy);\\n}\\n\",\"keccak256\":\"0x75bb34641419925730f87eeb122521b34cfd953b800212c362770ed1c7c5d719\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/misc/interfaces/IERC20DetailedBytes.sol":{"IERC20DetailedBytes":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":{"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},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":{\"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\":{\"contracts/misc/interfaces/IERC20DetailedBytes.sol\":\"IERC20DetailedBytes\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/misc/interfaces/IERC20DetailedBytes.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\n\\ninterface IERC20DetailedBytes is IERC20 {\\n  function name() external view returns (bytes32);\\n\\n  function symbol() external view returns (bytes32);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0xd23c5d1179580a40e28e651fe6f48df5da857b0b5cbe5b14f5dfa50ca2db2d50\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/misc/interfaces/IUiIncentiveDataProviderV3.sol":{"IUiIncentiveDataProviderV3":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getFullReservesIncentiveData","outputs":[{"components":[{"internalType":"address","name":"underlyingAsset","type":"address"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"incentiveControllerAddress","type":"address"},{"components":[{"internalType":"string","name":"rewardTokenSymbol","type":"string"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"address","name":"rewardOracleAddress","type":"address"},{"internalType":"uint256","name":"emissionPerSecond","type":"uint256"},{"internalType":"uint256","name":"incentivesLastUpdateTimestamp","type":"uint256"},{"internalType":"uint256","name":"tokenIncentivesIndex","type":"uint256"},{"internalType":"uint256","name":"emissionEndTimestamp","type":"uint256"},{"internalType":"int256","name":"rewardPriceFeed","type":"int256"},{"internalType":"uint8","name":"rewardTokenDecimals","type":"uint8"},{"internalType":"uint8","name":"precision","type":"uint8"},{"internalType":"uint8","name":"priceFeedDecimals","type":"uint8"}],"internalType":"struct IUiIncentiveDataProviderV3.RewardInfo[]","name":"rewardsTokenInformation","type":"tuple[]"}],"internalType":"struct IUiIncentiveDataProviderV3.IncentiveData","name":"aIncentiveData","type":"tuple"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"incentiveControllerAddress","type":"address"},{"components":[{"internalType":"string","name":"rewardTokenSymbol","type":"string"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"address","name":"rewardOracleAddress","type":"address"},{"internalType":"uint256","name":"emissionPerSecond","type":"uint256"},{"internalType":"uint256","name":"incentivesLastUpdateTimestamp","type":"uint256"},{"internalType":"uint256","name":"tokenIncentivesIndex","type":"uint256"},{"internalType":"uint256","name":"emissionEndTimestamp","type":"uint256"},{"internalType":"int256","name":"rewardPriceFeed","type":"int256"},{"internalType":"uint8","name":"rewardTokenDecimals","type":"uint8"},{"internalType":"uint8","name":"precision","type":"uint8"},{"internalType":"uint8","name":"priceFeedDecimals","type":"uint8"}],"internalType":"struct IUiIncentiveDataProviderV3.RewardInfo[]","name":"rewardsTokenInformation","type":"tuple[]"}],"internalType":"struct IUiIncentiveDataProviderV3.IncentiveData","name":"vIncentiveData","type":"tuple"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"incentiveControllerAddress","type":"address"},{"components":[{"internalType":"string","name":"rewardTokenSymbol","type":"string"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"address","name":"rewardOracleAddress","type":"address"},{"internalType":"uint256","name":"emissionPerSecond","type":"uint256"},{"internalType":"uint256","name":"incentivesLastUpdateTimestamp","type":"uint256"},{"internalType":"uint256","name":"tokenIncentivesIndex","type":"uint256"},{"internalType":"uint256","name":"emissionEndTimestamp","type":"uint256"},{"internalType":"int256","name":"rewardPriceFeed","type":"int256"},{"internalType":"uint8","name":"rewardTokenDecimals","type":"uint8"},{"internalType":"uint8","name":"precision","type":"uint8"},{"internalType":"uint8","name":"priceFeedDecimals","type":"uint8"}],"internalType":"struct IUiIncentiveDataProviderV3.RewardInfo[]","name":"rewardsTokenInformation","type":"tuple[]"}],"internalType":"struct IUiIncentiveDataProviderV3.IncentiveData","name":"sIncentiveData","type":"tuple"}],"internalType":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData[]","name":"","type":"tuple[]"},{"components":[{"internalType":"address","name":"underlyingAsset","type":"address"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"incentiveControllerAddress","type":"address"},{"components":[{"internalType":"string","name":"rewardTokenSymbol","type":"string"},{"internalType":"address","name":"rewardOracleAddress","type":"address"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"uint256","name":"userUnclaimedRewards","type":"uint256"},{"internalType":"uint256","name":"tokenIncentivesUserIndex","type":"uint256"},{"internalType":"int256","name":"rewardPriceFeed","type":"int256"},{"internalType":"uint8","name":"priceFeedDecimals","type":"uint8"},{"internalType":"uint8","name":"rewardTokenDecimals","type":"uint8"}],"internalType":"struct IUiIncentiveDataProviderV3.UserRewardInfo[]","name":"userRewardsInformation","type":"tuple[]"}],"internalType":"struct IUiIncentiveDataProviderV3.UserIncentiveData","name":"aTokenIncentivesUserData","type":"tuple"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"incentiveControllerAddress","type":"address"},{"components":[{"internalType":"string","name":"rewardTokenSymbol","type":"string"},{"internalType":"address","name":"rewardOracleAddress","type":"address"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"uint256","name":"userUnclaimedRewards","type":"uint256"},{"internalType":"uint256","name":"tokenIncentivesUserIndex","type":"uint256"},{"internalType":"int256","name":"rewardPriceFeed","type":"int256"},{"internalType":"uint8","name":"priceFeedDecimals","type":"uint8"},{"internalType":"uint8","name":"rewardTokenDecimals","type":"uint8"}],"internalType":"struct IUiIncentiveDataProviderV3.UserRewardInfo[]","name":"userRewardsInformation","type":"tuple[]"}],"internalType":"struct IUiIncentiveDataProviderV3.UserIncentiveData","name":"vTokenIncentivesUserData","type":"tuple"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"incentiveControllerAddress","type":"address"},{"components":[{"internalType":"string","name":"rewardTokenSymbol","type":"string"},{"internalType":"address","name":"rewardOracleAddress","type":"address"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"uint256","name":"userUnclaimedRewards","type":"uint256"},{"internalType":"uint256","name":"tokenIncentivesUserIndex","type":"uint256"},{"internalType":"int256","name":"rewardPriceFeed","type":"int256"},{"internalType":"uint8","name":"priceFeedDecimals","type":"uint8"},{"internalType":"uint8","name":"rewardTokenDecimals","type":"uint8"}],"internalType":"struct IUiIncentiveDataProviderV3.UserRewardInfo[]","name":"userRewardsInformation","type":"tuple[]"}],"internalType":"struct IUiIncentiveDataProviderV3.UserIncentiveData","name":"sTokenIncentivesUserData","type":"tuple"}],"internalType":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"name":"getReservesIncentivesData","outputs":[{"components":[{"internalType":"address","name":"underlyingAsset","type":"address"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"incentiveControllerAddress","type":"address"},{"components":[{"internalType":"string","name":"rewardTokenSymbol","type":"string"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"address","name":"rewardOracleAddress","type":"address"},{"internalType":"uint256","name":"emissionPerSecond","type":"uint256"},{"internalType":"uint256","name":"incentivesLastUpdateTimestamp","type":"uint256"},{"internalType":"uint256","name":"tokenIncentivesIndex","type":"uint256"},{"internalType":"uint256","name":"emissionEndTimestamp","type":"uint256"},{"internalType":"int256","name":"rewardPriceFeed","type":"int256"},{"internalType":"uint8","name":"rewardTokenDecimals","type":"uint8"},{"internalType":"uint8","name":"precision","type":"uint8"},{"internalType":"uint8","name":"priceFeedDecimals","type":"uint8"}],"internalType":"struct IUiIncentiveDataProviderV3.RewardInfo[]","name":"rewardsTokenInformation","type":"tuple[]"}],"internalType":"struct IUiIncentiveDataProviderV3.IncentiveData","name":"aIncentiveData","type":"tuple"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"incentiveControllerAddress","type":"address"},{"components":[{"internalType":"string","name":"rewardTokenSymbol","type":"string"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"address","name":"rewardOracleAddress","type":"address"},{"internalType":"uint256","name":"emissionPerSecond","type":"uint256"},{"internalType":"uint256","name":"incentivesLastUpdateTimestamp","type":"uint256"},{"internalType":"uint256","name":"tokenIncentivesIndex","type":"uint256"},{"internalType":"uint256","name":"emissionEndTimestamp","type":"uint256"},{"internalType":"int256","name":"rewardPriceFeed","type":"int256"},{"internalType":"uint8","name":"rewardTokenDecimals","type":"uint8"},{"internalType":"uint8","name":"precision","type":"uint8"},{"internalType":"uint8","name":"priceFeedDecimals","type":"uint8"}],"internalType":"struct IUiIncentiveDataProviderV3.RewardInfo[]","name":"rewardsTokenInformation","type":"tuple[]"}],"internalType":"struct IUiIncentiveDataProviderV3.IncentiveData","name":"vIncentiveData","type":"tuple"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"incentiveControllerAddress","type":"address"},{"components":[{"internalType":"string","name":"rewardTokenSymbol","type":"string"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"address","name":"rewardOracleAddress","type":"address"},{"internalType":"uint256","name":"emissionPerSecond","type":"uint256"},{"internalType":"uint256","name":"incentivesLastUpdateTimestamp","type":"uint256"},{"internalType":"uint256","name":"tokenIncentivesIndex","type":"uint256"},{"internalType":"uint256","name":"emissionEndTimestamp","type":"uint256"},{"internalType":"int256","name":"rewardPriceFeed","type":"int256"},{"internalType":"uint8","name":"rewardTokenDecimals","type":"uint8"},{"internalType":"uint8","name":"precision","type":"uint8"},{"internalType":"uint8","name":"priceFeedDecimals","type":"uint8"}],"internalType":"struct IUiIncentiveDataProviderV3.RewardInfo[]","name":"rewardsTokenInformation","type":"tuple[]"}],"internalType":"struct IUiIncentiveDataProviderV3.IncentiveData","name":"sIncentiveData","type":"tuple"}],"internalType":"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getUserReservesIncentivesData","outputs":[{"components":[{"internalType":"address","name":"underlyingAsset","type":"address"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"incentiveControllerAddress","type":"address"},{"components":[{"internalType":"string","name":"rewardTokenSymbol","type":"string"},{"internalType":"address","name":"rewardOracleAddress","type":"address"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"uint256","name":"userUnclaimedRewards","type":"uint256"},{"internalType":"uint256","name":"tokenIncentivesUserIndex","type":"uint256"},{"internalType":"int256","name":"rewardPriceFeed","type":"int256"},{"internalType":"uint8","name":"priceFeedDecimals","type":"uint8"},{"internalType":"uint8","name":"rewardTokenDecimals","type":"uint8"}],"internalType":"struct IUiIncentiveDataProviderV3.UserRewardInfo[]","name":"userRewardsInformation","type":"tuple[]"}],"internalType":"struct IUiIncentiveDataProviderV3.UserIncentiveData","name":"aTokenIncentivesUserData","type":"tuple"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"incentiveControllerAddress","type":"address"},{"components":[{"internalType":"string","name":"rewardTokenSymbol","type":"string"},{"internalType":"address","name":"rewardOracleAddress","type":"address"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"uint256","name":"userUnclaimedRewards","type":"uint256"},{"internalType":"uint256","name":"tokenIncentivesUserIndex","type":"uint256"},{"internalType":"int256","name":"rewardPriceFeed","type":"int256"},{"internalType":"uint8","name":"priceFeedDecimals","type":"uint8"},{"internalType":"uint8","name":"rewardTokenDecimals","type":"uint8"}],"internalType":"struct IUiIncentiveDataProviderV3.UserRewardInfo[]","name":"userRewardsInformation","type":"tuple[]"}],"internalType":"struct IUiIncentiveDataProviderV3.UserIncentiveData","name":"vTokenIncentivesUserData","type":"tuple"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"incentiveControllerAddress","type":"address"},{"components":[{"internalType":"string","name":"rewardTokenSymbol","type":"string"},{"internalType":"address","name":"rewardOracleAddress","type":"address"},{"internalType":"address","name":"rewardTokenAddress","type":"address"},{"internalType":"uint256","name":"userUnclaimedRewards","type":"uint256"},{"internalType":"uint256","name":"tokenIncentivesUserIndex","type":"uint256"},{"internalType":"int256","name":"rewardPriceFeed","type":"int256"},{"internalType":"uint8","name":"priceFeedDecimals","type":"uint8"},{"internalType":"uint8","name":"rewardTokenDecimals","type":"uint8"}],"internalType":"struct IUiIncentiveDataProviderV3.UserRewardInfo[]","name":"userRewardsInformation","type":"tuple[]"}],"internalType":"struct IUiIncentiveDataProviderV3.UserIncentiveData","name":"sTokenIncentivesUserData","type":"tuple"}],"internalType":"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getFullReservesIncentiveData(address,address)":"47637536","getReservesIncentivesData(address)":"976fafc5","getUserReservesIncentivesData(address,address)":"799bdcf5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getFullReservesIncentiveData\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentiveControllerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rewardTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"rewardTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardOracleAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"emissionPerSecond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"incentivesLastUpdateTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIncentivesIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"emissionEndTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardPriceFeed\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"rewardTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"priceFeedDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.RewardInfo[]\",\"name\":\"rewardsTokenInformation\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.IncentiveData\",\"name\":\"aIncentiveData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentiveControllerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rewardTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"rewardTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardOracleAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"emissionPerSecond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"incentivesLastUpdateTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIncentivesIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"emissionEndTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardPriceFeed\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"rewardTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"priceFeedDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.RewardInfo[]\",\"name\":\"rewardsTokenInformation\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.IncentiveData\",\"name\":\"vIncentiveData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentiveControllerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rewardTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"rewardTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardOracleAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"emissionPerSecond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"incentivesLastUpdateTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIncentivesIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"emissionEndTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardPriceFeed\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"rewardTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"priceFeedDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.RewardInfo[]\",\"name\":\"rewardsTokenInformation\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.IncentiveData\",\"name\":\"sIncentiveData\",\"type\":\"tuple\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentiveControllerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rewardTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"rewardOracleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"userUnclaimedRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIncentivesUserIndex\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardPriceFeed\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"priceFeedDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"rewardTokenDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserRewardInfo[]\",\"name\":\"userRewardsInformation\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserIncentiveData\",\"name\":\"aTokenIncentivesUserData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentiveControllerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rewardTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"rewardOracleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"userUnclaimedRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIncentivesUserIndex\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardPriceFeed\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"priceFeedDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"rewardTokenDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserRewardInfo[]\",\"name\":\"userRewardsInformation\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserIncentiveData\",\"name\":\"vTokenIncentivesUserData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentiveControllerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rewardTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"rewardOracleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"userUnclaimedRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIncentivesUserIndex\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardPriceFeed\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"priceFeedDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"rewardTokenDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserRewardInfo[]\",\"name\":\"userRewardsInformation\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserIncentiveData\",\"name\":\"sTokenIncentivesUserData\",\"type\":\"tuple\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"getReservesIncentivesData\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentiveControllerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rewardTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"rewardTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardOracleAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"emissionPerSecond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"incentivesLastUpdateTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIncentivesIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"emissionEndTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardPriceFeed\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"rewardTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"priceFeedDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.RewardInfo[]\",\"name\":\"rewardsTokenInformation\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.IncentiveData\",\"name\":\"aIncentiveData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentiveControllerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rewardTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"rewardTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardOracleAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"emissionPerSecond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"incentivesLastUpdateTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIncentivesIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"emissionEndTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardPriceFeed\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"rewardTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"priceFeedDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.RewardInfo[]\",\"name\":\"rewardsTokenInformation\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.IncentiveData\",\"name\":\"vIncentiveData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentiveControllerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rewardTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"rewardTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardOracleAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"emissionPerSecond\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"incentivesLastUpdateTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIncentivesIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"emissionEndTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardPriceFeed\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"rewardTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"precision\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"priceFeedDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.RewardInfo[]\",\"name\":\"rewardsTokenInformation\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.IncentiveData\",\"name\":\"sIncentiveData\",\"type\":\"tuple\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.AggregatedReserveIncentiveData[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserReservesIncentivesData\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentiveControllerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rewardTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"rewardOracleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"userUnclaimedRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIncentivesUserIndex\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardPriceFeed\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"priceFeedDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"rewardTokenDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserRewardInfo[]\",\"name\":\"userRewardsInformation\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserIncentiveData\",\"name\":\"aTokenIncentivesUserData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentiveControllerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rewardTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"rewardOracleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"userUnclaimedRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIncentivesUserIndex\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardPriceFeed\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"priceFeedDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"rewardTokenDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserRewardInfo[]\",\"name\":\"userRewardsInformation\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserIncentiveData\",\"name\":\"vTokenIncentivesUserData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"incentiveControllerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"rewardTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"rewardOracleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"userUnclaimedRewards\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIncentivesUserIndex\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardPriceFeed\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"priceFeedDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"rewardTokenDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserRewardInfo[]\",\"name\":\"userRewardsInformation\",\"type\":\"tuple[]\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserIncentiveData\",\"name\":\"sTokenIncentivesUserData\",\"type\":\"tuple\"}],\"internalType\":\"struct IUiIncentiveDataProviderV3.UserReserveIncentiveData[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/misc/interfaces/IUiIncentiveDataProviderV3.sol\":\"IUiIncentiveDataProviderV3\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/misc/interfaces/IUiIncentiveDataProviderV3.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\\n\\ninterface IUiIncentiveDataProviderV3 {\\n  struct AggregatedReserveIncentiveData {\\n    address underlyingAsset;\\n    IncentiveData aIncentiveData;\\n    IncentiveData vIncentiveData;\\n    IncentiveData sIncentiveData;\\n  }\\n\\n  struct IncentiveData {\\n    address tokenAddress;\\n    address incentiveControllerAddress;\\n    RewardInfo[] rewardsTokenInformation;\\n  }\\n\\n  struct RewardInfo {\\n    string rewardTokenSymbol;\\n    address rewardTokenAddress;\\n    address rewardOracleAddress;\\n    uint256 emissionPerSecond;\\n    uint256 incentivesLastUpdateTimestamp;\\n    uint256 tokenIncentivesIndex;\\n    uint256 emissionEndTimestamp;\\n    int256 rewardPriceFeed;\\n    uint8 rewardTokenDecimals;\\n    uint8 precision;\\n    uint8 priceFeedDecimals;\\n  }\\n\\n  struct UserReserveIncentiveData {\\n    address underlyingAsset;\\n    UserIncentiveData aTokenIncentivesUserData;\\n    UserIncentiveData vTokenIncentivesUserData;\\n    UserIncentiveData sTokenIncentivesUserData;\\n  }\\n\\n  struct UserIncentiveData {\\n    address tokenAddress;\\n    address incentiveControllerAddress;\\n    UserRewardInfo[] userRewardsInformation;\\n  }\\n\\n  struct UserRewardInfo {\\n    string rewardTokenSymbol;\\n    address rewardOracleAddress;\\n    address rewardTokenAddress;\\n    uint256 userUnclaimedRewards;\\n    uint256 tokenIncentivesUserIndex;\\n    int256 rewardPriceFeed;\\n    uint8 priceFeedDecimals;\\n    uint8 rewardTokenDecimals;\\n  }\\n\\n  function getReservesIncentivesData(\\n    IPoolAddressesProvider provider\\n  ) external view returns (AggregatedReserveIncentiveData[] memory);\\n\\n  function getUserReservesIncentivesData(\\n    IPoolAddressesProvider provider,\\n    address user\\n  ) external view returns (UserReserveIncentiveData[] memory);\\n\\n  // generic method with full data\\n  function getFullReservesIncentiveData(\\n    IPoolAddressesProvider provider,\\n    address user\\n  )\\n    external\\n    view\\n    returns (AggregatedReserveIncentiveData[] memory, UserReserveIncentiveData[] memory);\\n}\\n\",\"keccak256\":\"0xc8ff3f617c8ecd9b18a8ecc3530798e8034d9e0f6c5c5bcf92a055aec230cddc\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/misc/interfaces/IUiPoolDataProviderV3.sol":{"IUiPoolDataProviderV3":{"abi":[{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"name":"getReservesData","outputs":[{"components":[{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"uint256","name":"baseLTVasCollateral","type":"uint256"},{"internalType":"uint256","name":"reserveLiquidationThreshold","type":"uint256"},{"internalType":"uint256","name":"reserveLiquidationBonus","type":"uint256"},{"internalType":"uint256","name":"reserveFactor","type":"uint256"},{"internalType":"bool","name":"usageAsCollateralEnabled","type":"bool"},{"internalType":"bool","name":"borrowingEnabled","type":"bool"},{"internalType":"bool","name":"stableBorrowRateEnabled","type":"bool"},{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"bool","name":"isFrozen","type":"bool"},{"internalType":"uint128","name":"liquidityIndex","type":"uint128"},{"internalType":"uint128","name":"variableBorrowIndex","type":"uint128"},{"internalType":"uint128","name":"liquidityRate","type":"uint128"},{"internalType":"uint128","name":"variableBorrowRate","type":"uint128"},{"internalType":"uint128","name":"stableBorrowRate","type":"uint128"},{"internalType":"uint40","name":"lastUpdateTimestamp","type":"uint40"},{"internalType":"address","name":"aTokenAddress","type":"address"},{"internalType":"address","name":"stableDebtTokenAddress","type":"address"},{"internalType":"address","name":"variableDebtTokenAddress","type":"address"},{"internalType":"address","name":"interestRateStrategyAddress","type":"address"},{"internalType":"uint256","name":"availableLiquidity","type":"uint256"},{"internalType":"uint256","name":"totalPrincipalStableDebt","type":"uint256"},{"internalType":"uint256","name":"averageStableRate","type":"uint256"},{"internalType":"uint256","name":"stableDebtLastUpdateTimestamp","type":"uint256"},{"internalType":"uint256","name":"totalScaledVariableDebt","type":"uint256"},{"internalType":"uint256","name":"priceInMarketReferenceCurrency","type":"uint256"},{"internalType":"address","name":"priceOracle","type":"address"},{"internalType":"uint256","name":"variableRateSlope1","type":"uint256"},{"internalType":"uint256","name":"variableRateSlope2","type":"uint256"},{"internalType":"uint256","name":"stableRateSlope1","type":"uint256"},{"internalType":"uint256","name":"stableRateSlope2","type":"uint256"},{"internalType":"uint256","name":"baseStableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"baseVariableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"optimalUsageRatio","type":"uint256"},{"internalType":"bool","name":"isPaused","type":"bool"},{"internalType":"bool","name":"isSiloedBorrowing","type":"bool"},{"internalType":"uint128","name":"accruedToTreasury","type":"uint128"},{"internalType":"uint128","name":"unbacked","type":"uint128"},{"internalType":"uint128","name":"isolationModeTotalDebt","type":"uint128"},{"internalType":"bool","name":"flashLoanEnabled","type":"bool"},{"internalType":"uint256","name":"debtCeiling","type":"uint256"},{"internalType":"uint256","name":"debtCeilingDecimals","type":"uint256"},{"internalType":"uint8","name":"eModeCategoryId","type":"uint8"},{"internalType":"uint256","name":"borrowCap","type":"uint256"},{"internalType":"uint256","name":"supplyCap","type":"uint256"},{"internalType":"uint16","name":"eModeLtv","type":"uint16"},{"internalType":"uint16","name":"eModeLiquidationThreshold","type":"uint16"},{"internalType":"uint16","name":"eModeLiquidationBonus","type":"uint16"},{"internalType":"address","name":"eModePriceSource","type":"address"},{"internalType":"string","name":"eModeLabel","type":"string"},{"internalType":"bool","name":"borrowableInIsolation","type":"bool"}],"internalType":"struct IUiPoolDataProviderV3.AggregatedReserveData[]","name":"","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"marketReferenceCurrencyUnit","type":"uint256"},{"internalType":"int256","name":"marketReferenceCurrencyPriceInUsd","type":"int256"},{"internalType":"int256","name":"networkBaseTokenPriceInUsd","type":"int256"},{"internalType":"uint8","name":"networkBaseTokenPriceDecimals","type":"uint8"}],"internalType":"struct IUiPoolDataProviderV3.BaseCurrencyInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"}],"name":"getReservesList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IPoolAddressesProvider","name":"provider","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getUserReservesData","outputs":[{"components":[{"internalType":"address","name":"underlyingAsset","type":"address"},{"internalType":"uint256","name":"scaledATokenBalance","type":"uint256"},{"internalType":"bool","name":"usageAsCollateralEnabledOnUser","type":"bool"},{"internalType":"uint256","name":"stableBorrowRate","type":"uint256"},{"internalType":"uint256","name":"scaledVariableDebt","type":"uint256"},{"internalType":"uint256","name":"principalStableDebt","type":"uint256"},{"internalType":"uint256","name":"stableBorrowLastUpdateTimestamp","type":"uint256"}],"internalType":"struct IUiPoolDataProviderV3.UserReserveData[]","name":"","type":"tuple[]"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getReservesData(address)":"ec489c21","getReservesList(address)":"586c1442","getUserReservesData(address,address)":"51974cc0"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"getReservesData\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseLTVasCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveLiquidationThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveLiquidationBonus\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"usageAsCollateralEnabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"borrowingEnabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"stableBorrowRateEnabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isFrozen\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"liquidityIndex\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"variableBorrowIndex\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"liquidityRate\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"variableBorrowRate\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"stableBorrowRate\",\"type\":\"uint128\"},{\"internalType\":\"uint40\",\"name\":\"lastUpdateTimestamp\",\"type\":\"uint40\"},{\"internalType\":\"address\",\"name\":\"aTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"stableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"variableDebtTokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"interestRateStrategyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"availableLiquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalPrincipalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"averageStableRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableDebtLastUpdateTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalScaledVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"priceInMarketReferenceCurrency\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"priceOracle\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"variableRateSlope1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"variableRateSlope2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateSlope1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableRateSlope2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseStableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseVariableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"optimalUsageRatio\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isSiloedBorrowing\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"accruedToTreasury\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"unbacked\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"isolationModeTotalDebt\",\"type\":\"uint128\"},{\"internalType\":\"bool\",\"name\":\"flashLoanEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"debtCeiling\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"debtCeilingDecimals\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"eModeCategoryId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"borrowCap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyCap\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"eModeLtv\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"eModeLiquidationThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"eModeLiquidationBonus\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"eModePriceSource\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"eModeLabel\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"borrowableInIsolation\",\"type\":\"bool\"}],\"internalType\":\"struct IUiPoolDataProviderV3.AggregatedReserveData[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"marketReferenceCurrencyUnit\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"marketReferenceCurrencyPriceInUsd\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"networkBaseTokenPriceInUsd\",\"type\":\"int256\"},{\"internalType\":\"uint8\",\"name\":\"networkBaseTokenPriceDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct IUiPoolDataProviderV3.BaseCurrencyInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"getReservesList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPoolAddressesProvider\",\"name\":\"provider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUserReservesData\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"underlyingAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"scaledATokenBalance\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"usageAsCollateralEnabledOnUser\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"stableBorrowRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"scaledVariableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"principalStableDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stableBorrowLastUpdateTimestamp\",\"type\":\"uint256\"}],\"internalType\":\"struct IUiPoolDataProviderV3.UserReserveData[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/misc/interfaces/IUiPoolDataProviderV3.sol\":\"IUiPoolDataProviderV3\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IPoolAddressesProvider\\n * @author Aave\\n * @notice Defines the basic interface for a Pool Addresses Provider.\\n */\\ninterface IPoolAddressesProvider {\\n  /**\\n   * @dev Emitted when the market identifier is updated.\\n   * @param oldMarketId The old id of the market\\n   * @param newMarketId The new id of the market\\n   */\\n  event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);\\n\\n  /**\\n   * @dev Emitted when the pool is updated.\\n   * @param oldAddress The old address of the Pool\\n   * @param newAddress The new address of the Pool\\n   */\\n  event PoolUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool configurator is updated.\\n   * @param oldAddress The old address of the PoolConfigurator\\n   * @param newAddress The new address of the PoolConfigurator\\n   */\\n  event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle is updated.\\n   * @param oldAddress The old address of the PriceOracle\\n   * @param newAddress The new address of the PriceOracle\\n   */\\n  event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL manager is updated.\\n   * @param oldAddress The old address of the ACLManager\\n   * @param newAddress The new address of the ACLManager\\n   */\\n  event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the ACL admin is updated.\\n   * @param oldAddress The old address of the ACLAdmin\\n   * @param newAddress The new address of the ACLAdmin\\n   */\\n  event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the price oracle sentinel is updated.\\n   * @param oldAddress The old address of the PriceOracleSentinel\\n   * @param newAddress The new address of the PriceOracleSentinel\\n   */\\n  event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the pool data provider is updated.\\n   * @param oldAddress The old address of the PoolDataProvider\\n   * @param newAddress The new address of the PoolDataProvider\\n   */\\n  event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when a new proxy is created.\\n   * @param id The identifier of the proxy\\n   * @param proxyAddress The address of the created proxy contract\\n   * @param implementationAddress The address of the implementation contract\\n   */\\n  event ProxyCreated(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address indexed implementationAddress\\n  );\\n\\n  /**\\n   * @dev Emitted when a new non-proxied contract address is registered.\\n   * @param id The identifier of the contract\\n   * @param oldAddress The address of the old contract\\n   * @param newAddress The address of the new contract\\n   */\\n  event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);\\n\\n  /**\\n   * @dev Emitted when the implementation of the proxy registered with id is updated\\n   * @param id The identifier of the contract\\n   * @param proxyAddress The address of the proxy contract\\n   * @param oldImplementationAddress The address of the old implementation contract\\n   * @param newImplementationAddress The address of the new implementation contract\\n   */\\n  event AddressSetAsProxy(\\n    bytes32 indexed id,\\n    address indexed proxyAddress,\\n    address oldImplementationAddress,\\n    address indexed newImplementationAddress\\n  );\\n\\n  /**\\n   * @notice Returns the id of the Aave market to which this contract points to.\\n   * @return The market id\\n   */\\n  function getMarketId() external view returns (string memory);\\n\\n  /**\\n   * @notice Associates an id with a specific PoolAddressesProvider.\\n   * @dev This can be used to create an onchain registry of PoolAddressesProviders to\\n   * identify and validate multiple Aave markets.\\n   * @param newMarketId The market id\\n   */\\n  function setMarketId(string calldata newMarketId) external;\\n\\n  /**\\n   * @notice Returns an address by its identifier.\\n   * @dev The returned address might be an EOA or a contract, potentially proxied\\n   * @dev It returns ZERO if there is no registered address with the given id\\n   * @param id The id\\n   * @return The address of the registered for the specified id\\n   */\\n  function getAddress(bytes32 id) external view returns (address);\\n\\n  /**\\n   * @notice General function to update the implementation of a proxy registered with\\n   * certain `id`. If there is no proxy registered, it will instantiate one and\\n   * set as implementation the `newImplementationAddress`.\\n   * @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit\\n   * setter function, in order to avoid unexpected consequences\\n   * @param id The id\\n   * @param newImplementationAddress The address of the new implementation\\n   */\\n  function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;\\n\\n  /**\\n   * @notice Sets an address for an id replacing the address saved in the addresses map.\\n   * @dev IMPORTANT Use this function carefully, as it will do a hard replacement\\n   * @param id The id\\n   * @param newAddress The address to set\\n   */\\n  function setAddress(bytes32 id, address newAddress) external;\\n\\n  /**\\n   * @notice Returns the address of the Pool proxy.\\n   * @return The Pool proxy address\\n   */\\n  function getPool() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the Pool, or creates a proxy\\n   * setting the new `pool` implementation when the function is called for the first time.\\n   * @param newPoolImpl The new Pool implementation\\n   */\\n  function setPoolImpl(address newPoolImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the PoolConfigurator proxy.\\n   * @return The PoolConfigurator proxy address\\n   */\\n  function getPoolConfigurator() external view returns (address);\\n\\n  /**\\n   * @notice Updates the implementation of the PoolConfigurator, or creates a proxy\\n   * setting the new `PoolConfigurator` implementation when the function is called for the first time.\\n   * @param newPoolConfiguratorImpl The new PoolConfigurator implementation\\n   */\\n  function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle.\\n   * @return The address of the PriceOracle\\n   */\\n  function getPriceOracle() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle.\\n   * @param newPriceOracle The address of the new PriceOracle\\n   */\\n  function setPriceOracle(address newPriceOracle) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL manager.\\n   * @return The address of the ACLManager\\n   */\\n  function getACLManager() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL manager.\\n   * @param newAclManager The address of the new ACLManager\\n   */\\n  function setACLManager(address newAclManager) external;\\n\\n  /**\\n   * @notice Returns the address of the ACL admin.\\n   * @return The address of the ACL admin\\n   */\\n  function getACLAdmin() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the ACL admin.\\n   * @param newAclAdmin The address of the new ACL admin\\n   */\\n  function setACLAdmin(address newAclAdmin) external;\\n\\n  /**\\n   * @notice Returns the address of the price oracle sentinel.\\n   * @return The address of the PriceOracleSentinel\\n   */\\n  function getPriceOracleSentinel() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the price oracle sentinel.\\n   * @param newPriceOracleSentinel The address of the new PriceOracleSentinel\\n   */\\n  function setPriceOracleSentinel(address newPriceOracleSentinel) external;\\n\\n  /**\\n   * @notice Returns the address of the data provider.\\n   * @return The address of the DataProvider\\n   */\\n  function getPoolDataProvider() external view returns (address);\\n\\n  /**\\n   * @notice Updates the address of the data provider.\\n   * @param newDataProvider The address of the new DataProvider\\n   */\\n  function setPoolDataProvider(address newDataProvider) external;\\n}\\n\",\"keccak256\":\"0x33d4308d9407b4ee2297fc4ba5acce1a96a6c658189e2778a4f6b90e032fb3b5\",\"license\":\"AGPL-3.0\"},\"contracts/misc/interfaces/IUiPoolDataProviderV3.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IPoolAddressesProvider} from '@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol';\\n\\ninterface IUiPoolDataProviderV3 {\\n  struct InterestRates {\\n    uint256 variableRateSlope1;\\n    uint256 variableRateSlope2;\\n    uint256 stableRateSlope1;\\n    uint256 stableRateSlope2;\\n    uint256 baseStableBorrowRate;\\n    uint256 baseVariableBorrowRate;\\n    uint256 optimalUsageRatio;\\n  }\\n\\n  struct AggregatedReserveData {\\n    address underlyingAsset;\\n    string name;\\n    string symbol;\\n    uint256 decimals;\\n    uint256 baseLTVasCollateral;\\n    uint256 reserveLiquidationThreshold;\\n    uint256 reserveLiquidationBonus;\\n    uint256 reserveFactor;\\n    bool usageAsCollateralEnabled;\\n    bool borrowingEnabled;\\n    bool stableBorrowRateEnabled;\\n    bool isActive;\\n    bool isFrozen;\\n    // base data\\n    uint128 liquidityIndex;\\n    uint128 variableBorrowIndex;\\n    uint128 liquidityRate;\\n    uint128 variableBorrowRate;\\n    uint128 stableBorrowRate;\\n    uint40 lastUpdateTimestamp;\\n    address aTokenAddress;\\n    address stableDebtTokenAddress;\\n    address variableDebtTokenAddress;\\n    address interestRateStrategyAddress;\\n    //\\n    uint256 availableLiquidity;\\n    uint256 totalPrincipalStableDebt;\\n    uint256 averageStableRate;\\n    uint256 stableDebtLastUpdateTimestamp;\\n    uint256 totalScaledVariableDebt;\\n    uint256 priceInMarketReferenceCurrency;\\n    address priceOracle;\\n    uint256 variableRateSlope1;\\n    uint256 variableRateSlope2;\\n    uint256 stableRateSlope1;\\n    uint256 stableRateSlope2;\\n    uint256 baseStableBorrowRate;\\n    uint256 baseVariableBorrowRate;\\n    uint256 optimalUsageRatio;\\n    // v3 only\\n    bool isPaused;\\n    bool isSiloedBorrowing;\\n    uint128 accruedToTreasury;\\n    uint128 unbacked;\\n    uint128 isolationModeTotalDebt;\\n    bool flashLoanEnabled;\\n    //\\n    uint256 debtCeiling;\\n    uint256 debtCeilingDecimals;\\n    uint8 eModeCategoryId;\\n    uint256 borrowCap;\\n    uint256 supplyCap;\\n    // eMode\\n    uint16 eModeLtv;\\n    uint16 eModeLiquidationThreshold;\\n    uint16 eModeLiquidationBonus;\\n    address eModePriceSource;\\n    string eModeLabel;\\n    bool borrowableInIsolation;\\n  }\\n\\n  struct UserReserveData {\\n    address underlyingAsset;\\n    uint256 scaledATokenBalance;\\n    bool usageAsCollateralEnabledOnUser;\\n    uint256 stableBorrowRate;\\n    uint256 scaledVariableDebt;\\n    uint256 principalStableDebt;\\n    uint256 stableBorrowLastUpdateTimestamp;\\n  }\\n\\n  struct BaseCurrencyInfo {\\n    uint256 marketReferenceCurrencyUnit;\\n    int256 marketReferenceCurrencyPriceInUsd;\\n    int256 networkBaseTokenPriceInUsd;\\n    uint8 networkBaseTokenPriceDecimals;\\n  }\\n\\n  function getReservesList(\\n    IPoolAddressesProvider provider\\n  ) external view returns (address[] memory);\\n\\n  function getReservesData(\\n    IPoolAddressesProvider provider\\n  ) external view returns (AggregatedReserveData[] memory, BaseCurrencyInfo memory);\\n\\n  function getUserReservesData(\\n    IPoolAddressesProvider provider,\\n    address user\\n  ) external view returns (UserReserveData[] memory, uint8);\\n}\\n\",\"keccak256\":\"0xd032122c140eb82712209b3bbe61caaf1732984d5e43e4febdd60fdde33091b9\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/misc/interfaces/IWETH.sol":{"IWETH":{"abi":[{"inputs":[{"internalType":"address","name":"guy","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"approve(address,uint256)":"095ea7b3","deposit()":"d0e30db0","transferFrom(address,address,uint256)":"23b872dd","withdraw(uint256)":"2e1a7d4d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/misc/interfaces/IWETH.sol\":\"IWETH\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"contracts/misc/interfaces/IWETH.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IWETH {\\n  function deposit() external payable;\\n\\n  function withdraw(uint256) external;\\n\\n  function approve(address guy, uint256 wad) external returns (bool);\\n\\n  function transferFrom(address src, address dst, uint256 wad) external returns (bool);\\n}\\n\",\"keccak256\":\"0xdb60e82c6efc1c1e15608f51889adfee411f2e14cf524f3bd0f193416903c7fb\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/misc/interfaces/IWrappedTokenGatewayV3.sol":{"IWrappedTokenGatewayV3":{"abi":[{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"interestRateMode","type":"uint256"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"borrowETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"onBehalfOf","type":"address"},{"internalType":"uint16","name":"referralCode","type":"uint16"}],"name":"depositETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rateMode","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"repayETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"permitV","type":"uint8"},{"internalType":"bytes32","name":"permitR","type":"bytes32"},{"internalType":"bytes32","name":"permitS","type":"bytes32"}],"name":"withdrawETHWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"borrowETH(address,uint256,uint256,uint16)":"66514c97","depositETH(address,address,uint16)":"474cf53d","repayETH(address,uint256,uint256,address)":"02c5fcf8","withdrawETH(address,uint256,address)":"80500d20","withdrawETHWithPermit(address,uint256,address,uint256,uint8,bytes32,bytes32)":"d4c40b6c"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestRateMode\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"borrowETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"depositETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rateMode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"repayETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"onBehalfOf\",\"type\":\"address\"}],\"name\":\"withdrawETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"permitV\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"permitR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"permitS\",\"type\":\"bytes32\"}],\"name\":\"withdrawETHWithPermit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/misc/interfaces/IWrappedTokenGatewayV3.sol\":\"IWrappedTokenGatewayV3\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"contracts/misc/interfaces/IWrappedTokenGatewayV3.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IWrappedTokenGatewayV3 {\\n  function depositETH(address pool, address onBehalfOf, uint16 referralCode) external payable;\\n\\n  function withdrawETH(address pool, uint256 amount, address onBehalfOf) external;\\n\\n  function repayETH(\\n    address pool,\\n    uint256 amount,\\n    uint256 rateMode,\\n    address onBehalfOf\\n  ) external payable;\\n\\n  function borrowETH(\\n    address pool,\\n    uint256 amount,\\n    uint256 interestRateMode,\\n    uint16 referralCode\\n  ) external;\\n\\n  function withdrawETHWithPermit(\\n    address pool,\\n    uint256 amount,\\n    address to,\\n    uint256 deadline,\\n    uint8 permitV,\\n    bytes32 permitR,\\n    bytes32 permitS\\n  ) external;\\n}\\n\",\"keccak256\":\"0xe3fbc5c01f57aa928433061c1c81ab3653b9146f7d23fa78d2be7efd8b2f49de\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/mocks/ATokenMock.sol":{"ATokenMock":{"abi":[{"inputs":[{"internalType":"contract IRewardsController","name":"aic","type":"address"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"assetIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"userIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardsAccrued","type":"uint256"}],"name":"Accrued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"reward","type":"address"},{"indexed":false,"internalType":"uint256","name":"emission","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"distributionEnd","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"assetIndex","type":"uint256"}],"name":"AssetConfigUpdated","type":"event"},{"inputs":[],"name":"_aic","outputs":[{"internalType":"contract IRewardsController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cleanUserState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"userBalance","type":"uint256"}],"name":"doubleHandleActionOnAic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"getScaledUserBalanceAndSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"userBalance","type":"uint256"}],"name":"handleActionOnAic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"scaledTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"userBalance","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"setUserBalanceAndSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_34963":{"entryPoint":null,"id":34963,"parameterSlots":2,"returnSlots":0},"abi_decode_tuple_t_contract$_IRewardsController_$39352t_uint256_fromMemory":{"entryPoint":88,"id":null,"parameterSlots":2,"returnSlots":2}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:395:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"140:253:201","statements":[{"body":{"nodeType":"YulBlock","src":"186:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"195:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"198:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"188:6:201"},"nodeType":"YulFunctionCall","src":"188:12:201"},"nodeType":"YulExpressionStatement","src":"188:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"161:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"170:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"157:3:201"},"nodeType":"YulFunctionCall","src":"157:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"182:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"153:3:201"},"nodeType":"YulFunctionCall","src":"153:32:201"},"nodeType":"YulIf","src":"150:52:201"},{"nodeType":"YulVariableDeclaration","src":"211:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"230:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"224:5:201"},"nodeType":"YulFunctionCall","src":"224:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"215:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"303:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"312:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"315:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"305:6:201"},"nodeType":"YulFunctionCall","src":"305:12:201"},"nodeType":"YulExpressionStatement","src":"305:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"262:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"273:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"288:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"293:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"284:3:201"},"nodeType":"YulFunctionCall","src":"284:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"297:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"280:3:201"},"nodeType":"YulFunctionCall","src":"280:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"269:3:201"},"nodeType":"YulFunctionCall","src":"269:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"259:2:201"},"nodeType":"YulFunctionCall","src":"259:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"252:6:201"},"nodeType":"YulFunctionCall","src":"252:50:201"},"nodeType":"YulIf","src":"249:70:201"},{"nodeType":"YulAssignment","src":"328:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"338:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"328:6:201"}]},{"nodeType":"YulAssignment","src":"352:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"372:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"383:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"368:3:201"},"nodeType":"YulFunctionCall","src":"368:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"362:5:201"},"nodeType":"YulFunctionCall","src":"362:25:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"352:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IRewardsController_$39352t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"98:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"109:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"121:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"129:6:201","type":""}],"src":"14:379:201"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_contract$_IRewardsController_$39352t_uint256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n        value1 := mload(add(headStart, 32))\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60a060405234801561001057600080fd5b506040516104bc3803806104bc83398101604081905261002f91610058565b600080546001600160a01b0319166001600160a01b039390931692909217909155608052610092565b6000806040838503121561006b57600080fd5b82516001600160a01b038116811461008257600080fd5b6020939093015192949293505050565b6080516104106100ac600039600060ef01526104106000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c80638d27929411610076578063b39944ba1161005b578063b39944ba1461013b578063b41c6f981461014a578063f794ca511461018f57600080fd5b80638d27929414610128578063b1bf962d146100db57600080fd5b80630afbcdc9146100a857806318160ddd146100db578063313ce567146100ed57806334743e7c14610113575b600080fd5b6100c16100b6366004610363565b506001546002549091565b604080519283526020830191909152015b60405180910390f35b6002545b6040519081526020016100d2565b7f00000000000000000000000000000000000000000000000000000000000000006100df565b610126610121366004610385565b6101a8565b005b610126610136366004610385565b610241565b61012660006001819055600255565b60005461016a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100d2565b61012661019d3660046103b8565b600191909155600255565b6000546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526024820185905260448201849052909116906331873e2e906064015b600060405180830381600087803b15801561022457600080fd5b505af1158015610238573d6000803e3d6000fd5b50505050505050565b6000546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526024820185905260448201849052909116906331873e2e90606401600060405180830381600087803b1580156102bc57600080fd5b505af11580156102d0573d6000803e3d6000fd5b50506000546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790526044820186905290911692506331873e2e915060640161020a565b803573ffffffffffffffffffffffffffffffffffffffff8116811461035e57600080fd5b919050565b60006020828403121561037557600080fd5b61037e8261033a565b9392505050565b60008060006060848603121561039a57600080fd5b6103a38461033a565b95602085013595506040909401359392505050565b600080604083850312156103cb57600080fd5b5050803592602090910135915056fea2646970667358221220568cc87562834dd13f727cc8c3d34ae5968f7035b0141d186834c0fa59f1aa1c64736f6c634300080a0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x4BC CODESIZE SUB DUP1 PUSH2 0x4BC DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x58 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x80 MSTORE PUSH2 0x92 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x6B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD MLOAD SWAP3 SWAP5 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x410 PUSH2 0xAC PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH1 0xEF ADD MSTORE PUSH2 0x410 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 0x8D279294 GT PUSH2 0x76 JUMPI DUP1 PUSH4 0xB39944BA GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xB39944BA EQ PUSH2 0x13B JUMPI DUP1 PUSH4 0xB41C6F98 EQ PUSH2 0x14A JUMPI DUP1 PUSH4 0xF794CA51 EQ PUSH2 0x18F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8D279294 EQ PUSH2 0x128 JUMPI DUP1 PUSH4 0xB1BF962D EQ PUSH2 0xDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xAFBCDC9 EQ PUSH2 0xA8 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xDB JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0xED JUMPI DUP1 PUSH4 0x34743E7C EQ PUSH2 0x113 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH2 0xB6 CALLDATASIZE PUSH1 0x4 PUSH2 0x363 JUMP JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x2 SLOAD SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD2 JUMP JUMPDEST PUSH32 0x0 PUSH2 0xDF JUMP JUMPDEST PUSH2 0x126 PUSH2 0x121 CALLDATASIZE PUSH1 0x4 PUSH2 0x385 JUMP JUMPDEST PUSH2 0x1A8 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x126 PUSH2 0x136 CALLDATASIZE PUSH1 0x4 PUSH2 0x385 JUMP JUMPDEST PUSH2 0x241 JUMP JUMPDEST PUSH2 0x126 PUSH1 0x0 PUSH1 0x1 DUP2 SWAP1 SSTORE PUSH1 0x2 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x16A SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD2 JUMP JUMPDEST PUSH2 0x126 PUSH2 0x19D CALLDATASIZE PUSH1 0x4 PUSH2 0x3B8 JUMP JUMPDEST PUSH1 0x1 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x2 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD DUP5 SWAP1 MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD 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 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD DUP5 SWAP1 MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2D0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD DUP7 SWAP1 MSTORE SWAP1 SWAP2 AND SWAP3 POP PUSH4 0x31873E2E SWAP2 POP PUSH1 0x64 ADD PUSH2 0x20A JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x35E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x375 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x37E DUP3 PUSH2 0x33A JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x39A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3A3 DUP5 PUSH2 0x33A JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMP DUP13 0xC8 PUSH22 0x62834DD13F727CC8C3D34AE5968F7035B0141D186834 0xC0 STATICCALL MSIZE CALL 0xAA SHR PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"145:1689:164:-:0;;;693:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;753:4;:10;;-1:-1:-1;;;;;;753:10:164;-1:-1:-1;;;;;753:10:164;;;;;;;;;;;769:20;;145:1689;;14:379:201;121:6;129;182:2;170:9;161:7;157:23;153:32;150:52;;;198:1;195;188:12;150:52;224:16;;-1:-1:-1;;;;;269:31:201;;259:42;;249:70;;315:1;312;305:12;249:70;383:2;368:18;;;;362:25;338:5;;362:25;;-1:-1:-1;;;14:379:201:o;:::-;145:1689:164;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_aic_34916":{"entryPoint":null,"id":34916,"parameterSlots":0,"returnSlots":0},"@cleanUserState_35065":{"entryPoint":null,"id":35065,"parameterSlots":0,"returnSlots":0},"@decimals_35073":{"entryPoint":null,"id":35073,"parameterSlots":0,"returnSlots":1},"@doubleHandleActionOnAic_35007":{"entryPoint":577,"id":35007,"parameterSlots":3,"returnSlots":0},"@getScaledUserBalanceAndSupply_35037":{"entryPoint":null,"id":35037,"parameterSlots":1,"returnSlots":2},"@handleActionOnAic_34981":{"entryPoint":424,"id":34981,"parameterSlots":3,"returnSlots":0},"@scaledTotalSupply_35045":{"entryPoint":null,"id":35045,"parameterSlots":0,"returnSlots":1},"@setUserBalanceAndSupply_35023":{"entryPoint":null,"id":35023,"parameterSlots":2,"returnSlots":0},"@totalSupply_35053":{"entryPoint":null,"id":35053,"parameterSlots":0,"returnSlots":1},"abi_decode_address":{"entryPoint":826,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":867,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_uint256t_uint256":{"entryPoint":901,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_uint256t_uint256":{"entryPoint":952,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_contract$_IRewardsController_$39352__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2050:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:147:201","statements":[{"nodeType":"YulAssignment","src":"73:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:201"},"nodeType":"YulFunctionCall","src":"82:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:201"}]},{"body":{"nodeType":"YulBlock","src":"188:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"197:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"200:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"190:6:201"},"nodeType":"YulFunctionCall","src":"190:12:201"},"nodeType":"YulExpressionStatement","src":"190:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"142:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:201"},"nodeType":"YulFunctionCall","src":"131:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:201"},"nodeType":"YulFunctionCall","src":"121:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:201"},"nodeType":"YulFunctionCall","src":"114:73:201"},"nodeType":"YulIf","src":"111:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:201","type":""}],"src":"14:196:201"},{"body":{"nodeType":"YulBlock","src":"285:116:201","statements":[{"body":{"nodeType":"YulBlock","src":"331:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"340:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"343:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"333:6:201"},"nodeType":"YulFunctionCall","src":"333:12:201"},"nodeType":"YulExpressionStatement","src":"333:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"306:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"315:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"302:3:201"},"nodeType":"YulFunctionCall","src":"302:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"327:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"298:3:201"},"nodeType":"YulFunctionCall","src":"298:32:201"},"nodeType":"YulIf","src":"295:52:201"},{"nodeType":"YulAssignment","src":"356:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"385:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"366:18:201"},"nodeType":"YulFunctionCall","src":"366:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"356:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"251:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"262:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"274:6:201","type":""}],"src":"215:186:201"},{"body":{"nodeType":"YulBlock","src":"535:119:201","statements":[{"nodeType":"YulAssignment","src":"545:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"557:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"568:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"553:3:201"},"nodeType":"YulFunctionCall","src":"553:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"545:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"587:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"598:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"580:6:201"},"nodeType":"YulFunctionCall","src":"580:25:201"},"nodeType":"YulExpressionStatement","src":"580:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"625:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"636:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"621:3:201"},"nodeType":"YulFunctionCall","src":"621:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"641:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"614:6:201"},"nodeType":"YulFunctionCall","src":"614:34:201"},"nodeType":"YulExpressionStatement","src":"614:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"496:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"507:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"515:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"526:4:201","type":""}],"src":"406:248:201"},{"body":{"nodeType":"YulBlock","src":"760:76:201","statements":[{"nodeType":"YulAssignment","src":"770:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"782:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"793:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"778:3:201"},"nodeType":"YulFunctionCall","src":"778:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"770:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"812:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"823:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"805:6:201"},"nodeType":"YulFunctionCall","src":"805:25:201"},"nodeType":"YulExpressionStatement","src":"805:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"729:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"740:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"751:4:201","type":""}],"src":"659:177:201"},{"body":{"nodeType":"YulBlock","src":"945:218:201","statements":[{"body":{"nodeType":"YulBlock","src":"991:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1000:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1003:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"993:6:201"},"nodeType":"YulFunctionCall","src":"993:12:201"},"nodeType":"YulExpressionStatement","src":"993:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"966:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"975:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"962:3:201"},"nodeType":"YulFunctionCall","src":"962:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"987:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"958:3:201"},"nodeType":"YulFunctionCall","src":"958:32:201"},"nodeType":"YulIf","src":"955:52:201"},{"nodeType":"YulAssignment","src":"1016:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1045:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1026:18:201"},"nodeType":"YulFunctionCall","src":"1026:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1016:6:201"}]},{"nodeType":"YulAssignment","src":"1064:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1091:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1102:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1087:3:201"},"nodeType":"YulFunctionCall","src":"1087:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1074:12:201"},"nodeType":"YulFunctionCall","src":"1074:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1064:6:201"}]},{"nodeType":"YulAssignment","src":"1115:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1142:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1153:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1138:3:201"},"nodeType":"YulFunctionCall","src":"1138:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1125:12:201"},"nodeType":"YulFunctionCall","src":"1125:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1115:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"895:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"906:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"918:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"926:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"934:6:201","type":""}],"src":"841:322:201"},{"body":{"nodeType":"YulBlock","src":"1297:125:201","statements":[{"nodeType":"YulAssignment","src":"1307:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1319:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1330:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1315:3:201"},"nodeType":"YulFunctionCall","src":"1315:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1307:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1349:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1364:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1372:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1360:3:201"},"nodeType":"YulFunctionCall","src":"1360:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1342:6:201"},"nodeType":"YulFunctionCall","src":"1342:74:201"},"nodeType":"YulExpressionStatement","src":"1342:74:201"}]},"name":"abi_encode_tuple_t_contract$_IRewardsController_$39352__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1266:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1277:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1288:4:201","type":""}],"src":"1168:254:201"},{"body":{"nodeType":"YulBlock","src":"1514:161:201","statements":[{"body":{"nodeType":"YulBlock","src":"1560:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1569:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1572:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1562:6:201"},"nodeType":"YulFunctionCall","src":"1562:12:201"},"nodeType":"YulExpressionStatement","src":"1562:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1535:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1544:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1531:3:201"},"nodeType":"YulFunctionCall","src":"1531:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1556:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1527:3:201"},"nodeType":"YulFunctionCall","src":"1527:32:201"},"nodeType":"YulIf","src":"1524:52:201"},{"nodeType":"YulAssignment","src":"1585:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1608:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1595:12:201"},"nodeType":"YulFunctionCall","src":"1595:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1585:6:201"}]},{"nodeType":"YulAssignment","src":"1627:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1654:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1665:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1650:3:201"},"nodeType":"YulFunctionCall","src":"1650:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1637:12:201"},"nodeType":"YulFunctionCall","src":"1637:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1627:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1472:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1483:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1495:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1503:6:201","type":""}],"src":"1427:248:201"},{"body":{"nodeType":"YulBlock","src":"1837:211:201","statements":[{"nodeType":"YulAssignment","src":"1847:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1859:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1870:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1855:3:201"},"nodeType":"YulFunctionCall","src":"1855:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1847:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1889:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1904:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1912:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1900:3:201"},"nodeType":"YulFunctionCall","src":"1900:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1882:6:201"},"nodeType":"YulFunctionCall","src":"1882:74:201"},"nodeType":"YulExpressionStatement","src":"1882:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1976:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1987:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1972:3:201"},"nodeType":"YulFunctionCall","src":"1972:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"1992:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1965:6:201"},"nodeType":"YulFunctionCall","src":"1965:34:201"},"nodeType":"YulExpressionStatement","src":"1965:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2019:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2030:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2015:3:201"},"nodeType":"YulFunctionCall","src":"2015:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"2035:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2008:6:201"},"nodeType":"YulFunctionCall","src":"2008:34:201"},"nodeType":"YulExpressionStatement","src":"2008:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1790:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1801:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1809:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1817:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1828:4:201","type":""}],"src":"1680:368:201"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_contract$_IRewardsController_$39352__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"34922":[{"length":32,"start":239}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100a35760003560e01c80638d27929411610076578063b39944ba1161005b578063b39944ba1461013b578063b41c6f981461014a578063f794ca511461018f57600080fd5b80638d27929414610128578063b1bf962d146100db57600080fd5b80630afbcdc9146100a857806318160ddd146100db578063313ce567146100ed57806334743e7c14610113575b600080fd5b6100c16100b6366004610363565b506001546002549091565b604080519283526020830191909152015b60405180910390f35b6002545b6040519081526020016100d2565b7f00000000000000000000000000000000000000000000000000000000000000006100df565b610126610121366004610385565b6101a8565b005b610126610136366004610385565b610241565b61012660006001819055600255565b60005461016a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100d2565b61012661019d3660046103b8565b600191909155600255565b6000546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526024820185905260448201849052909116906331873e2e906064015b600060405180830381600087803b15801561022457600080fd5b505af1158015610238573d6000803e3d6000fd5b50505050505050565b6000546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526024820185905260448201849052909116906331873e2e90606401600060405180830381600087803b1580156102bc57600080fd5b505af11580156102d0573d6000803e3d6000fd5b50506000546040517f31873e2e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790526044820186905290911692506331873e2e915060640161020a565b803573ffffffffffffffffffffffffffffffffffffffff8116811461035e57600080fd5b919050565b60006020828403121561037557600080fd5b61037e8261033a565b9392505050565b60008060006060848603121561039a57600080fd5b6103a38461033a565b95602085013595506040909401359392505050565b600080604083850312156103cb57600080fd5b5050803592602090910135915056fea2646970667358221220568cc87562834dd13f727cc8c3d34ae5968f7035b0141d186834c0fa59f1aa1c64736f6c634300080a0033","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 0x8D279294 GT PUSH2 0x76 JUMPI DUP1 PUSH4 0xB39944BA GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xB39944BA EQ PUSH2 0x13B JUMPI DUP1 PUSH4 0xB41C6F98 EQ PUSH2 0x14A JUMPI DUP1 PUSH4 0xF794CA51 EQ PUSH2 0x18F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8D279294 EQ PUSH2 0x128 JUMPI DUP1 PUSH4 0xB1BF962D EQ PUSH2 0xDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xAFBCDC9 EQ PUSH2 0xA8 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xDB JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0xED JUMPI DUP1 PUSH4 0x34743E7C EQ PUSH2 0x113 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC1 PUSH2 0xB6 CALLDATASIZE PUSH1 0x4 PUSH2 0x363 JUMP JUMPDEST POP PUSH1 0x1 SLOAD PUSH1 0x2 SLOAD SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD2 JUMP JUMPDEST PUSH32 0x0 PUSH2 0xDF JUMP JUMPDEST PUSH2 0x126 PUSH2 0x121 CALLDATASIZE PUSH1 0x4 PUSH2 0x385 JUMP JUMPDEST PUSH2 0x1A8 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x126 PUSH2 0x136 CALLDATASIZE PUSH1 0x4 PUSH2 0x385 JUMP JUMPDEST PUSH2 0x241 JUMP JUMPDEST PUSH2 0x126 PUSH1 0x0 PUSH1 0x1 DUP2 SWAP1 SSTORE PUSH1 0x2 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x16A SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xD2 JUMP JUMPDEST PUSH2 0x126 PUSH2 0x19D CALLDATASIZE PUSH1 0x4 PUSH2 0x3B8 JUMP JUMPDEST PUSH1 0x1 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x2 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD DUP5 SWAP1 MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD 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 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD DUP5 SWAP1 MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x31873E2E SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2D0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH32 0x31873E2E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD DUP7 SWAP1 MSTORE SWAP1 SWAP2 AND SWAP3 POP PUSH4 0x31873E2E SWAP2 POP PUSH1 0x64 ADD PUSH2 0x20A JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x35E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x375 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x37E DUP3 PUSH2 0x33A JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x39A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3A3 DUP5 PUSH2 0x33A JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMP DUP13 0xC8 PUSH22 0x62834DD13F727CC8C3D34AE5968F7035B0141D186834 0xC0 STATICCALL MSIZE CALL 0xAA SHR PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"145:1689:164:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1342:135;;;;;;:::i;:::-;-1:-1:-1;1445:12:164;;1459;;1445;;1342:135;;;;;580:25:201;;;636:2;621:18;;614:34;;;;553:18;1342:135:164;;;;;;;;1576:85;1644:12;;1576:85;;;805:25:201;;;793:2;778:18;1576:85:164;659:177:201;1753:79:164;1818:9;1753:79;;798:152;;;;;;:::i;:::-;;:::i;:::-;;954:229;;;;;;:::i;:::-;;:::i;1665:84::-;;1721:1;1706:12;:16;;;1728:12;:16;1665:84;169:30;;;;;;;;;;;;1372:42:201;1360:55;;;1342:74;;1330:2;1315:18;169:30:164;1168:254:201;1187:151:164;;;;;;:::i;:::-;1275:12;:26;;;;1307:12;:26;1187:151;798:152;896:4;;:49;;;;;:4;1900:55:201;;;896:49:164;;;1882:74:201;1972:18;;;1965:34;;;2015:18;;;2008:34;;;896:4:164;;;;:17;;1855:18:201;;896:49:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;798:152;;;:::o;954:229::-;1074:4;;:49;;;;;:4;1900:55:201;;;1074:49:164;;;1882:74:201;1972:18;;;1965:34;;;2015:18;;;2008:34;;;1074:4:164;;;;:17;;1855:18:201;;1074:49:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1129:4:164;;:49;;;;;:4;1900:55:201;;;1129:49:164;;;1882:74:201;1972:18;;;1965:34;;;2015:18;;;2008:34;;;1129:4:164;;;;-1:-1:-1;1129:17:164;;-1:-1:-1;1855:18:201;;1129:49:164;1680:368:201;14:196;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:186::-;274:6;327:2;315:9;306:7;302:23;298:32;295:52;;;343:1;340;333:12;295:52;366:29;385:9;366:29;:::i;:::-;356:39;215:186;-1:-1:-1;;;215:186:201:o;841:322::-;918:6;926;934;987:2;975:9;966:7;962:23;958:32;955:52;;;1003:1;1000;993:12;955:52;1026:29;1045:9;1026:29;:::i;:::-;1016:39;1102:2;1087:18;;1074:32;;-1:-1:-1;1153:2:201;1138:18;;;1125:32;;841:322;-1:-1:-1;;;841:322:201:o;1427:248::-;1495:6;1503;1556:2;1544:9;1535:7;1531:23;1527:32;1524:52;;;1572:1;1569;1562:12;1524:52;-1:-1:-1;;1595:23:201;;;1665:2;1650:18;;;1637:32;;-1:-1:-1;1427:248:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"208000","executionCost":"infinite","totalCost":"infinite"},"external":{"_aic()":"2357","cleanUserState()":"10169","decimals()":"infinite","doubleHandleActionOnAic(address,uint256,uint256)":"infinite","getScaledUserBalanceAndSupply(address)":"4563","handleActionOnAic(address,uint256,uint256)":"infinite","scaledTotalSupply()":"2326","setUserBalanceAndSupply(uint256,uint256)":"44513","totalSupply()":"2304"}},"methodIdentifiers":{"_aic()":"b41c6f98","cleanUserState()":"b39944ba","decimals()":"313ce567","doubleHandleActionOnAic(address,uint256,uint256)":"8d279294","getScaledUserBalanceAndSupply(address)":"0afbcdc9","handleActionOnAic(address,uint256,uint256)":"34743e7c","scaledTotalSupply()":"b1bf962d","setUserBalanceAndSupply(uint256,uint256)":"f794ca51","totalSupply()":"18160ddd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IRewardsController\",\"name\":\"aic\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assetIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"userIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewardsAccrued\",\"type\":\"uint256\"}],\"name\":\"Accrued\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"emission\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"distributionEnd\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assetIndex\",\"type\":\"uint256\"}],\"name\":\"AssetConfigUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"_aic\",\"outputs\":[{\"internalType\":\"contract IRewardsController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cleanUserState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userBalance\",\"type\":\"uint256\"}],\"name\":\"doubleHandleActionOnAic\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"getScaledUserBalanceAndSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userBalance\",\"type\":\"uint256\"}],\"name\":\"handleActionOnAic\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scaledTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"userBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"setUserBalanceAndSupply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/ATokenMock.sol\":\"ATokenMock\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"contracts/misc/interfaces/IEACAggregatorProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IEACAggregatorProxy {\\n  function decimals() external view returns (uint8);\\n\\n  function latestAnswer() external view returns (int256);\\n\\n  function latestTimestamp() external view returns (uint256);\\n\\n  function latestRound() external view returns (uint256);\\n\\n  function getAnswer(uint256 roundId) external view returns (int256);\\n\\n  function getTimestamp(uint256 roundId) external view returns (uint256);\\n\\n  event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 timestamp);\\n  event NewRound(uint256 indexed roundId, address indexed startedBy);\\n}\\n\",\"keccak256\":\"0x75bb34641419925730f87eeb122521b34cfd953b800212c362770ed1c7c5d719\",\"license\":\"AGPL-3.0\"},\"contracts/mocks/ATokenMock.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IRewardsController} from '../rewards/interfaces/IRewardsController.sol';\\n\\ncontract ATokenMock {\\n  IRewardsController public _aic;\\n  uint256 internal _userBalance;\\n  uint256 internal _totalSupply;\\n  uint256 internal immutable _decimals;\\n\\n  // hack to be able to test event from Distribution manager properly\\n  event AssetConfigUpdated(\\n    address indexed asset,\\n    address indexed reward,\\n    uint256 emission,\\n    uint256 distributionEnd,\\n    uint256 assetIndex\\n  );\\n\\n  event Accrued(\\n    address indexed asset,\\n    address indexed user,\\n    uint256 assetIndex,\\n    uint256 userIndex,\\n    uint256 rewardsAccrued\\n  );\\n\\n  constructor(IRewardsController aic, uint256 decimals) {\\n    _aic = aic;\\n    _decimals = decimals;\\n  }\\n\\n  function handleActionOnAic(address user, uint256 totalSupply, uint256 userBalance) external {\\n    _aic.handleAction(user, totalSupply, userBalance);\\n  }\\n\\n  function doubleHandleActionOnAic(\\n    address user,\\n    uint256 totalSupply,\\n    uint256 userBalance\\n  ) external {\\n    _aic.handleAction(user, totalSupply, userBalance);\\n    _aic.handleAction(user, totalSupply, userBalance);\\n  }\\n\\n  function setUserBalanceAndSupply(uint256 userBalance, uint256 totalSupply) public {\\n    _userBalance = userBalance;\\n    _totalSupply = totalSupply;\\n  }\\n\\n  function getScaledUserBalanceAndSupply(address) external view returns (uint256, uint256) {\\n    return (_userBalance, _totalSupply);\\n  }\\n\\n  function scaledTotalSupply() external view returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  function totalSupply() external view returns (uint256) {\\n    return _totalSupply;\\n  }\\n\\n  function cleanUserState() external {\\n    _userBalance = 0;\\n    _totalSupply = 0;\\n  }\\n\\n  function decimals() external view returns (uint256) {\\n    return _decimals;\\n  }\\n}\\n\",\"keccak256\":\"0xa94b6a6d936b3d30a535d22d4dfb1e5ac406b1d5cdb35c350cb935cbc6031f20\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/IRewardsController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IRewardsDistributor} from './IRewardsDistributor.sol';\\nimport {ITransferStrategyBase} from './ITransferStrategyBase.sol';\\nimport {IEACAggregatorProxy} from '../../misc/interfaces/IEACAggregatorProxy.sol';\\nimport {RewardsDataTypes} from '../libraries/RewardsDataTypes.sol';\\n\\n/**\\n * @title IRewardsController\\n * @author Aave\\n * @notice Defines the basic interface for a Rewards Controller.\\n */\\ninterface IRewardsController is IRewardsDistributor {\\n  /**\\n   * @dev Emitted when a new address is whitelisted as claimer of rewards on behalf of a user\\n   * @param user The address of the user\\n   * @param claimer The address of the claimer\\n   */\\n  event ClaimerSet(address indexed user, address indexed claimer);\\n\\n  /**\\n   * @dev Emitted when rewards are claimed\\n   * @param user The address of the user rewards has been claimed on behalf of\\n   * @param reward The address of the token reward is claimed\\n   * @param to The address of the receiver of the rewards\\n   * @param claimer The address of the claimer\\n   * @param amount The amount of rewards claimed\\n   */\\n  event RewardsClaimed(\\n    address indexed user,\\n    address indexed reward,\\n    address indexed to,\\n    address claimer,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @dev Emitted when a transfer strategy is installed for the reward distribution\\n   * @param reward The address of the token reward\\n   * @param transferStrategy The address of TransferStrategy contract\\n   */\\n  event TransferStrategyInstalled(address indexed reward, address indexed transferStrategy);\\n\\n  /**\\n   * @dev Emitted when the reward oracle is updated\\n   * @param reward The address of the token reward\\n   * @param rewardOracle The address of oracle\\n   */\\n  event RewardOracleUpdated(address indexed reward, address indexed rewardOracle);\\n\\n  /**\\n   * @dev Whitelists an address to claim the rewards on behalf of another address\\n   * @param user The address of the user\\n   * @param claimer The address of the claimer\\n   */\\n  function setClaimer(address user, address claimer) external;\\n\\n  /**\\n   * @dev Sets a TransferStrategy logic contract that determines the logic of the rewards transfer\\n   * @param reward The address of the reward token\\n   * @param transferStrategy The address of the TransferStrategy logic contract\\n   */\\n  function setTransferStrategy(address reward, ITransferStrategyBase transferStrategy) external;\\n\\n  /**\\n   * @dev Sets an Aave Oracle contract to enforce rewards with a source of value.\\n   * @notice At the moment of reward configuration, the Incentives Controller performs\\n   * a check to see if the reward asset oracle is compatible with IEACAggregator proxy.\\n   * This check is enforced for integrators to be able to show incentives at\\n   * the current Aave UI without the need to setup an external price registry\\n   * @param reward The address of the reward to set the price aggregator\\n   * @param rewardOracle The address of price aggregator that follows IEACAggregatorProxy interface\\n   */\\n  function setRewardOracle(address reward, IEACAggregatorProxy rewardOracle) external;\\n\\n  /**\\n   * @dev Get the price aggregator oracle address\\n   * @param reward The address of the reward\\n   * @return The price oracle of the reward\\n   */\\n  function getRewardOracle(address reward) external view returns (address);\\n\\n  /**\\n   * @dev Returns the whitelisted claimer for a certain address (0x0 if not set)\\n   * @param user The address of the user\\n   * @return The claimer address\\n   */\\n  function getClaimer(address user) external view returns (address);\\n\\n  /**\\n   * @dev Returns the Transfer Strategy implementation contract address being used for a reward address\\n   * @param reward The address of the reward\\n   * @return The address of the TransferStrategy contract\\n   */\\n  function getTransferStrategy(address reward) external view returns (address);\\n\\n  /**\\n   * @dev Configure assets to incentivize with an emission of rewards per second until the end of distribution.\\n   * @param config The assets configuration input, the list of structs contains the following fields:\\n   *   uint104 emissionPerSecond: The emission per second following rewards unit decimals.\\n   *   uint256 totalSupply: The total supply of the asset to incentivize\\n   *   uint40 distributionEnd: The end of the distribution of the incentives for an asset\\n   *   address asset: The asset address to incentivize\\n   *   address reward: The reward token address\\n   *   ITransferStrategy transferStrategy: The TransferStrategy address with the install hook and claim logic.\\n   *   IEACAggregatorProxy rewardOracle: The Price Oracle of a reward to visualize the incentives at the UI Frontend.\\n   *                                     Must follow Chainlink Aggregator IEACAggregatorProxy interface to be compatible.\\n   */\\n  function configureAssets(RewardsDataTypes.RewardsConfigInput[] memory config) external;\\n\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   **/\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n\\n  /**\\n   * @dev Claims reward for a user to the desired address, on all the assets of the pool, accumulating the pending rewards\\n   * @param assets List of assets to check eligible distributions before claiming rewards\\n   * @param amount The amount of rewards to claim\\n   * @param to The address that will be receiving the rewards\\n   * @param reward The address of the reward token\\n   * @return The amount of rewards claimed\\n   **/\\n  function claimRewards(\\n    address[] calldata assets,\\n    uint256 amount,\\n    address to,\\n    address reward\\n  ) external returns (uint256);\\n\\n  /**\\n   * @dev Claims reward for a user on behalf, on all the assets of the pool, accumulating the pending rewards. The\\n   * caller must be whitelisted via \\\"allowClaimOnBehalf\\\" function by the RewardsAdmin role manager\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @param amount The amount of rewards to claim\\n   * @param user The address to check and claim rewards\\n   * @param to The address that will be receiving the rewards\\n   * @param reward The address of the reward token\\n   * @return The amount of rewards claimed\\n   **/\\n  function claimRewardsOnBehalf(\\n    address[] calldata assets,\\n    uint256 amount,\\n    address user,\\n    address to,\\n    address reward\\n  ) external returns (uint256);\\n\\n  /**\\n   * @dev Claims reward for msg.sender, on all the assets of the pool, accumulating the pending rewards\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @param amount The amount of rewards to claim\\n   * @param reward The address of the reward token\\n   * @return The amount of rewards claimed\\n   **/\\n  function claimRewardsToSelf(\\n    address[] calldata assets,\\n    uint256 amount,\\n    address reward\\n  ) external returns (uint256);\\n\\n  /**\\n   * @dev Claims all rewards for a user to the desired address, on all the assets of the pool, accumulating the pending rewards\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @param to The address that will be receiving the rewards\\n   * @return rewardsList List of addresses of the reward tokens\\n   * @return claimedAmounts List that contains the claimed amount per reward, following same order as \\\"rewardList\\\"\\n   **/\\n  function claimAllRewards(\\n    address[] calldata assets,\\n    address to\\n  ) external returns (address[] memory rewardsList, uint256[] memory claimedAmounts);\\n\\n  /**\\n   * @dev Claims all rewards for a user on behalf, on all the assets of the pool, accumulating the pending rewards. The caller must\\n   * be whitelisted via \\\"allowClaimOnBehalf\\\" function by the RewardsAdmin role manager\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @param user The address to check and claim rewards\\n   * @param to The address that will be receiving the rewards\\n   * @return rewardsList List of addresses of the reward tokens\\n   * @return claimedAmounts List that contains the claimed amount per reward, following same order as \\\"rewardsList\\\"\\n   **/\\n  function claimAllRewardsOnBehalf(\\n    address[] calldata assets,\\n    address user,\\n    address to\\n  ) external returns (address[] memory rewardsList, uint256[] memory claimedAmounts);\\n\\n  /**\\n   * @dev Claims all reward for msg.sender, on all the assets of the pool, accumulating the pending rewards\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @return rewardsList List of addresses of the reward tokens\\n   * @return claimedAmounts List that contains the claimed amount per reward, following same order as \\\"rewardsList\\\"\\n   **/\\n  function claimAllRewardsToSelf(\\n    address[] calldata assets\\n  ) external returns (address[] memory rewardsList, uint256[] memory claimedAmounts);\\n}\\n\",\"keccak256\":\"0xe8a4d4ea914cbbcd3f6a4e5420a34d01f1379b2d445bd98fc7f8004c69894f5d\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/IRewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title IRewardsDistributor\\n * @author Aave\\n * @notice Defines the basic interface for a Rewards Distributor.\\n */\\ninterface IRewardsDistributor {\\n  /**\\n   * @dev Emitted when the configuration of the rewards of an asset is updated.\\n   * @param asset The address of the incentivized asset\\n   * @param reward The address of the reward token\\n   * @param oldEmission The old emissions per second value of the reward distribution\\n   * @param newEmission The new emissions per second value of the reward distribution\\n   * @param oldDistributionEnd The old end timestamp of the reward distribution\\n   * @param newDistributionEnd The new end timestamp of the reward distribution\\n   * @param assetIndex The index of the asset distribution\\n   */\\n  event AssetConfigUpdated(\\n    address indexed asset,\\n    address indexed reward,\\n    uint256 oldEmission,\\n    uint256 newEmission,\\n    uint256 oldDistributionEnd,\\n    uint256 newDistributionEnd,\\n    uint256 assetIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when rewards of an asset are accrued on behalf of a user.\\n   * @param asset The address of the incentivized asset\\n   * @param reward The address of the reward token\\n   * @param user The address of the user that rewards are accrued on behalf of\\n   * @param assetIndex The index of the asset distribution\\n   * @param userIndex The index of the asset distribution on behalf of the user\\n   * @param rewardsAccrued The amount of rewards accrued\\n   */\\n  event Accrued(\\n    address indexed asset,\\n    address indexed reward,\\n    address indexed user,\\n    uint256 assetIndex,\\n    uint256 userIndex,\\n    uint256 rewardsAccrued\\n  );\\n\\n  /**\\n   * @dev Sets the end date for the distribution\\n   * @param asset The asset to incentivize\\n   * @param reward The reward token that incentives the asset\\n   * @param newDistributionEnd The end date of the incentivization, in unix time format\\n   **/\\n  function setDistributionEnd(address asset, address reward, uint32 newDistributionEnd) external;\\n\\n  /**\\n   * @dev Sets the emission per second of a set of reward distributions\\n   * @param asset The asset is being incentivized\\n   * @param rewards List of reward addresses are being distributed\\n   * @param newEmissionsPerSecond List of new reward emissions per second\\n   */\\n  function setEmissionPerSecond(\\n    address asset,\\n    address[] calldata rewards,\\n    uint88[] calldata newEmissionsPerSecond\\n  ) external;\\n\\n  /**\\n   * @dev Gets the end date for the distribution\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The timestamp with the end of the distribution, in unix time format\\n   **/\\n  function getDistributionEnd(address asset, address reward) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the index of a user on a reward distribution\\n   * @param user Address of the user\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The current user asset index, not including new distributions\\n   **/\\n  function getUserAssetIndex(\\n    address user,\\n    address asset,\\n    address reward\\n  ) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the configuration of the distribution reward for a certain asset\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The index of the asset distribution\\n   * @return The emission per second of the reward distribution\\n   * @return The timestamp of the last update of the index\\n   * @return The timestamp of the distribution end\\n   **/\\n  function getRewardsData(\\n    address asset,\\n    address reward\\n  ) external view returns (uint256, uint256, uint256, uint256);\\n\\n  /**\\n   * @dev Calculates the next value of an specific distribution index, with validations.\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The old index of the asset distribution\\n   * @return The new index of the asset distribution\\n   **/\\n  function getAssetIndex(address asset, address reward) external view returns (uint256, uint256);\\n\\n  /**\\n   * @dev Returns the list of available reward token addresses of an incentivized asset\\n   * @param asset The incentivized asset\\n   * @return List of rewards addresses of the input asset\\n   **/\\n  function getRewardsByAsset(address asset) external view returns (address[] memory);\\n\\n  /**\\n   * @dev Returns the list of available reward addresses\\n   * @return List of rewards supported in this contract\\n   **/\\n  function getRewardsList() external view returns (address[] memory);\\n\\n  /**\\n   * @dev Returns the accrued rewards balance of a user, not including virtually accrued rewards since last distribution.\\n   * @param user The address of the user\\n   * @param reward The address of the reward token\\n   * @return Unclaimed rewards, not including new distributions\\n   **/\\n  function getUserAccruedRewards(address user, address reward) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns a single rewards balance of a user, including virtually accrued and unrealized claimable rewards.\\n   * @param assets List of incentivized assets to check eligible distributions\\n   * @param user The address of the user\\n   * @param reward The address of the reward token\\n   * @return The rewards amount\\n   **/\\n  function getUserRewards(\\n    address[] calldata assets,\\n    address user,\\n    address reward\\n  ) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns a list all rewards of a user, including already accrued and unrealized claimable rewards\\n   * @param assets List of incentivized assets to check eligible distributions\\n   * @param user The address of the user\\n   * @return The list of reward addresses\\n   * @return The list of unclaimed amount of rewards\\n   **/\\n  function getAllUserRewards(\\n    address[] calldata assets,\\n    address user\\n  ) external view returns (address[] memory, uint256[] memory);\\n\\n  /**\\n   * @dev Returns the decimals of an asset to calculate the distribution delta\\n   * @param asset The address to retrieve decimals\\n   * @return The decimals of an underlying asset\\n   */\\n  function getAssetDecimals(address asset) external view returns (uint8);\\n\\n  /**\\n   * @dev Returns the address of the emission manager\\n   * @return The address of the EmissionManager\\n   */\\n  function EMISSION_MANAGER() external view returns (address);\\n\\n  /**\\n   * @dev Returns the address of the emission manager.\\n   * Deprecated: This getter is maintained for compatibility purposes. Use the `EMISSION_MANAGER()` function instead.\\n   * @return The address of the EmissionManager\\n   */\\n  function getEmissionManager() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd393efd85f696114f9ab69e6bfdcbf3a2bcf16ef5002516d56a0f0359e3d9bba\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/ITransferStrategyBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface ITransferStrategyBase {\\n  event EmergencyWithdrawal(\\n    address indexed caller,\\n    address indexed token,\\n    address indexed to,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @dev Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation\\n   * @param to Account to transfer rewards\\n   * @param reward Address of the reward token\\n   * @param amount Amount to transfer to the \\\"to\\\" address parameter\\n   * @return Returns true bool if transfer logic succeeds\\n   */\\n  function performTransfer(address to, address reward, uint256 amount) external returns (bool);\\n\\n  /**\\n   * @return Returns the address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view returns (address);\\n\\n  /**\\n   * @return Returns the address of the Rewards admin\\n   */\\n  function getRewardsAdmin() external view returns (address);\\n\\n  /**\\n   * @dev Perform an emergency token withdrawal only callable by the Rewards admin\\n   * @param token Address of the token to withdraw funds from this contract\\n   * @param to Address of the recipient of the withdrawal\\n   * @param amount Amount of the withdrawal\\n   */\\n  function emergencyWithdrawal(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0xa52a6dc237879acbed7325787ce58238a3afd626fa2ed827d4e321d2e4ef51ad\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/libraries/RewardsDataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {ITransferStrategyBase} from '../interfaces/ITransferStrategyBase.sol';\\nimport {IEACAggregatorProxy} from '../../misc/interfaces/IEACAggregatorProxy.sol';\\n\\nlibrary RewardsDataTypes {\\n  struct RewardsConfigInput {\\n    uint88 emissionPerSecond;\\n    uint256 totalSupply;\\n    uint32 distributionEnd;\\n    address asset;\\n    address reward;\\n    ITransferStrategyBase transferStrategy;\\n    IEACAggregatorProxy rewardOracle;\\n  }\\n\\n  struct UserAssetBalance {\\n    address asset;\\n    uint256 userBalance;\\n    uint256 totalSupply;\\n  }\\n\\n  struct UserData {\\n    // Liquidity index of the reward distribution for the user\\n    uint104 index;\\n    // Amount of accrued rewards for the user since last user index update\\n    uint128 accrued;\\n  }\\n\\n  struct RewardData {\\n    // Liquidity index of the reward distribution\\n    uint104 index;\\n    // Amount of reward tokens distributed per second\\n    uint88 emissionPerSecond;\\n    // Timestamp of the last reward index update\\n    uint32 lastUpdateTimestamp;\\n    // The end of the distribution of rewards (in seconds)\\n    uint32 distributionEnd;\\n    // Map of user addresses and their rewards data (userAddress => userData)\\n    mapping(address => UserData) usersData;\\n  }\\n\\n  struct AssetData {\\n    // Map of reward token addresses and their data (rewardTokenAddress => rewardData)\\n    mapping(address => RewardData) rewards;\\n    // List of reward token addresses for the asset\\n    mapping(uint128 => address) availableRewards;\\n    // Count of reward tokens for the asset\\n    uint128 availableRewardsCount;\\n    // Number of decimals of the asset\\n    uint8 decimals;\\n  }\\n}\\n\",\"keccak256\":\"0xaaa314b4e9f40878f4fd20e99075fe60309c9e223a5b8c244aaaeb7229d8c318\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":34916,"contract":"contracts/mocks/ATokenMock.sol:ATokenMock","label":"_aic","offset":0,"slot":"0","type":"t_contract(IRewardsController)39352"},{"astId":34918,"contract":"contracts/mocks/ATokenMock.sol:ATokenMock","label":"_userBalance","offset":0,"slot":"1","type":"t_uint256"},{"astId":34920,"contract":"contracts/mocks/ATokenMock.sol:ATokenMock","label":"_totalSupply","offset":0,"slot":"2","type":"t_uint256"}],"types":{"t_contract(IRewardsController)39352":{"encoding":"inplace","label":"contract IRewardsController","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/mocks/MockBadTransferStrategy.sol":{"MockBadTransferStrategy":{"abi":[{"inputs":[{"internalType":"address","name":"incentivesController","type":"address"},{"internalType":"address","name":"rewardsAdmin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdrawal","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardsAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"performTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave*","kind":"dev","methods":{"emergencyWithdrawal(address,address,uint256)":{"details":"Perform an emergency token withdrawal only callable by the Rewards admin","params":{"amount":"Amount of the withdrawal","to":"Address of the recipient of the withdrawal","token":"Address of the token to withdraw funds from this contract"}},"getIncentivesController()":{"returns":{"_0":"Returns the address of the Incentives Controller"}},"getRewardsAdmin()":{"returns":{"_0":"Returns the address of the Rewards admin"}},"performTransfer(address,address,uint256)":{"details":"Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation","params":{"amount":"Amount to transfer to the \"to\" address parameter","reward":"Address of the reward token","to":"Account to transfer rewards"},"returns":{"_0":"Returns true bool if transfer logic succeeds"}}},"title":"MockBadTransferStrategy","version":1},"evm":{"bytecode":{"functionDebugData":{"@_35105":{"entryPoint":null,"id":35105,"parameterSlots":2,"returnSlots":0},"@_40011":{"entryPoint":null,"id":40011,"parameterSlots":2,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":70,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_addresst_address_fromMemory":{"entryPoint":98,"id":null,"parameterSlots":2,"returnSlots":2}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:491:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"74:117:201","statements":[{"nodeType":"YulAssignment","src":"84:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"99:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"93:5:201"},"nodeType":"YulFunctionCall","src":"93:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"84:5:201"}]},{"body":{"nodeType":"YulBlock","src":"169:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"178:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"181:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"171:6:201"},"nodeType":"YulFunctionCall","src":"171:12:201"},"nodeType":"YulExpressionStatement","src":"171:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"128:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"139:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"154:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"150:3:201"},"nodeType":"YulFunctionCall","src":"150:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"163:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"146:3:201"},"nodeType":"YulFunctionCall","src":"146:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"135:3:201"},"nodeType":"YulFunctionCall","src":"135:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"125:2:201"},"nodeType":"YulFunctionCall","src":"125:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"118:6:201"},"nodeType":"YulFunctionCall","src":"118:50:201"},"nodeType":"YulIf","src":"115:70:201"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"53:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"64:5:201","type":""}],"src":"14:177:201"},{"body":{"nodeType":"YulBlock","src":"294:195:201","statements":[{"body":{"nodeType":"YulBlock","src":"340:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"349:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"352:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"342:6:201"},"nodeType":"YulFunctionCall","src":"342:12:201"},"nodeType":"YulExpressionStatement","src":"342:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"315:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"324:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"311:3:201"},"nodeType":"YulFunctionCall","src":"311:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"336:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"307:3:201"},"nodeType":"YulFunctionCall","src":"307:32:201"},"nodeType":"YulIf","src":"304:52:201"},{"nodeType":"YulAssignment","src":"365:50:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"405:9:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"375:29:201"},"nodeType":"YulFunctionCall","src":"375:40:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"365:6:201"}]},{"nodeType":"YulAssignment","src":"424:59:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"468:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"479:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"464:3:201"},"nodeType":"YulFunctionCall","src":"464:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"434:29:201"},"nodeType":"YulFunctionCall","src":"434:49:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"424:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"252:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"263:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"275:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"283:6:201","type":""}],"src":"196:293:201"}]},"contents":"{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60c060405234801561001057600080fd5b506040516105f83803806105f883398101604081905261002f91610062565b6001600160a01b039182166080521660a052610095565b80516001600160a01b038116811461005d57600080fd5b919050565b6000806040838503121561007557600080fd5b61007e83610046565b915061008c60208401610046565b90509250929050565b60805160a0516105336100c56000396000818160d701526101c8015260008181607b015260ff01526105336000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806316beb9821461005157806375d26413146100795780638d8e5da7146100c0578063c6255443146100d5575b600080fd5b61006461005f3660046104c1565b6100fb565b60405190151581526020015b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610070565b6100d36100ce3660046104c1565b6101b0565b005b7f000000000000000000000000000000000000000000000000000000000000000061009b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146101a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f43414c4c45525f4e4f545f494e43454e54495645535f434f4e54524f4c4c455260448201526064015b60405180910390fd5b50600160009081559392505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461024f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f4e4c595f524557415244535f41444d494e00000000000000000000000000006044820152606401610198565b61027073ffffffffffffffffffffffffffffffffffffffff841683836102f3565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7dc4ea712e6400e67a5abca1a983e5c420c386c19936dc120cd860b50b8e2579846040516102e691815260200190565b60405180910390a4505050565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1610356573d6000803e3d6000fd5b50610360846103cc565b6103c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e7366657200000000000000000000006044820152606401610198565b50505050565b600061040c565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d801561044b5760208114610485576104467f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f6103d3565b610492565b823b61047c5761047c7f475076323a206e6f74206120636f6e747261637400000000000000000000000060146103d3565b60019150610492565b3d6000803e600051151591505b50919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146104bc57600080fd5b919050565b6000806000606084860312156104d657600080fd5b6104df84610498565b92506104ed60208501610498565b915060408401359050925092509256fea2646970667358221220c77a04a297335ade05d7fe188edfaf605169756014b4094171b939773f2a047d64736f6c634300080a0033","opcodes":"PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x5F8 CODESIZE SUB DUP1 PUSH2 0x5F8 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x62 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x80 MSTORE AND PUSH1 0xA0 MSTORE PUSH2 0x95 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7E DUP4 PUSH2 0x46 JUMP JUMPDEST SWAP2 POP PUSH2 0x8C PUSH1 0x20 DUP5 ADD PUSH2 0x46 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH2 0x533 PUSH2 0xC5 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH1 0xD7 ADD MSTORE PUSH2 0x1C8 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH1 0x7B ADD MSTORE PUSH1 0xFF ADD MSTORE PUSH2 0x533 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 0x16BEB982 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x79 JUMPI DUP1 PUSH4 0x8D8E5DA7 EQ PUSH2 0xC0 JUMPI DUP1 PUSH4 0xC6255443 EQ PUSH2 0xD5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1 JUMP JUMPDEST PUSH2 0xFB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH32 0x0 JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x70 JUMP JUMPDEST PUSH2 0xD3 PUSH2 0xCE CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1 JUMP JUMPDEST PUSH2 0x1B0 JUMP JUMPDEST STOP JUMPDEST PUSH32 0x0 PUSH2 0x9B JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1A1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43414C4C45525F4E4F545F494E43454E54495645535F434F4E54524F4C4C4552 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x0 SWAP1 DUP2 SSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x24F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F524557415244535F41444D494E0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x198 JUMP JUMPDEST PUSH2 0x270 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP4 DUP4 PUSH2 0x2F3 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x7DC4EA712E6400E67A5ABCA1A983E5C420C386C19936DC120CD860B50B8E2579 DUP5 PUSH1 0x40 MLOAD PUSH2 0x2E6 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x356 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x360 DUP5 PUSH2 0x3CC JUMP JUMPDEST PUSH2 0x3C6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x198 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x40C JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x44B JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x485 JUMPI PUSH2 0x446 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x3D3 JUMP JUMPDEST PUSH2 0x492 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x47C JUMPI PUSH2 0x47C PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x3D3 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x492 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4DF DUP5 PUSH2 0x498 JUMP JUMPDEST SWAP3 POP PUSH2 0x4ED PUSH1 0x20 DUP6 ADD PUSH2 0x498 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC7 PUSH27 0x4A297335ADE05D7FE188EDFAF605169756014B4094171B939773F 0x2A DIV PUSH30 0x64736F6C634300080A003300000000000000000000000000000000000000 ","sourceMap":"590:557:165:-:0;;;795:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;670:44:187;;;;;720:28;;;590:557:165;;14:177:201;93:13;;-1:-1:-1;;;;;135:31:201;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:293::-;275:6;283;336:2;324:9;315:7;311:23;307:32;304:52;;;352:1;349;342:12;304:52;375:40;405:9;375:40;:::i;:::-;365:50;;434:49;479:2;468:9;464:18;434:49;:::i;:::-;424:59;;196:293;;;;;:::o;:::-;590:557:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@emergencyWithdrawal_40098":{"entryPoint":432,"id":40098,"parameterSlots":3,"returnSlots":0},"@getIncentivesController_40047":{"entryPoint":null,"id":40047,"parameterSlots":0,"returnSlots":1},"@getLastTransferResult_117":{"entryPoint":972,"id":117,"parameterSlots":1,"returnSlots":1},"@getRewardsAdmin_40057":{"entryPoint":null,"id":40057,"parameterSlots":0,"returnSlots":1},"@performTransfer_35127":{"entryPoint":251,"id":35127,"parameterSlots":3,"returnSlots":1},"@safeTransfer_78":{"entryPoint":755,"id":78,"parameterSlots":3,"returnSlots":0},"abi_decode_address":{"entryPoint":1176,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":1217,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3f731c6282513aad661017d660e9777df98697b25477c4a167f4ae2ad258b6ef__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_81338f1a577db8c7c83833eb7ec6bb164402c9f5cc1b20dac857316f1c65643a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2208:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:147:201","statements":[{"nodeType":"YulAssignment","src":"73:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:201"},"nodeType":"YulFunctionCall","src":"82:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:201"}]},{"body":{"nodeType":"YulBlock","src":"188:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"197:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"200:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"190:6:201"},"nodeType":"YulFunctionCall","src":"190:12:201"},"nodeType":"YulExpressionStatement","src":"190:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"142:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:201"},"nodeType":"YulFunctionCall","src":"131:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:201"},"nodeType":"YulFunctionCall","src":"121:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:201"},"nodeType":"YulFunctionCall","src":"114:73:201"},"nodeType":"YulIf","src":"111:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:201","type":""}],"src":"14:196:201"},{"body":{"nodeType":"YulBlock","src":"319:224:201","statements":[{"body":{"nodeType":"YulBlock","src":"365:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"374:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"377:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"367:6:201"},"nodeType":"YulFunctionCall","src":"367:12:201"},"nodeType":"YulExpressionStatement","src":"367:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"340:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"349:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"336:3:201"},"nodeType":"YulFunctionCall","src":"336:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"361:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"332:3:201"},"nodeType":"YulFunctionCall","src":"332:32:201"},"nodeType":"YulIf","src":"329:52:201"},{"nodeType":"YulAssignment","src":"390:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"419:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"400:18:201"},"nodeType":"YulFunctionCall","src":"400:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"390:6:201"}]},{"nodeType":"YulAssignment","src":"438:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"471:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"482:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"467:3:201"},"nodeType":"YulFunctionCall","src":"467:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"448:18:201"},"nodeType":"YulFunctionCall","src":"448:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"438:6:201"}]},{"nodeType":"YulAssignment","src":"495:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"522:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"533:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"518:3:201"},"nodeType":"YulFunctionCall","src":"518:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"505:12:201"},"nodeType":"YulFunctionCall","src":"505:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"495:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"269:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"280:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"292:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"300:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"308:6:201","type":""}],"src":"215:328:201"},{"body":{"nodeType":"YulBlock","src":"643:92:201","statements":[{"nodeType":"YulAssignment","src":"653:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"665:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"676:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"661:3:201"},"nodeType":"YulFunctionCall","src":"661:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"653:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"695:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"720:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"713:6:201"},"nodeType":"YulFunctionCall","src":"713:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"706:6:201"},"nodeType":"YulFunctionCall","src":"706:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"688:6:201"},"nodeType":"YulFunctionCall","src":"688:41:201"},"nodeType":"YulExpressionStatement","src":"688:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"612:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"623:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"634:4:201","type":""}],"src":"548:187:201"},{"body":{"nodeType":"YulBlock","src":"841:125:201","statements":[{"nodeType":"YulAssignment","src":"851:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"863:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"874:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"859:3:201"},"nodeType":"YulFunctionCall","src":"859:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"851:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"893:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"908:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"916:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"904:3:201"},"nodeType":"YulFunctionCall","src":"904:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"886:6:201"},"nodeType":"YulFunctionCall","src":"886:74:201"},"nodeType":"YulExpressionStatement","src":"886:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"810:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"821:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"832:4:201","type":""}],"src":"740:226:201"},{"body":{"nodeType":"YulBlock","src":"1145:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1162:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1173:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1155:6:201"},"nodeType":"YulFunctionCall","src":"1155:21:201"},"nodeType":"YulExpressionStatement","src":"1155:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1196:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1207:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1192:3:201"},"nodeType":"YulFunctionCall","src":"1192:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"1212:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1185:6:201"},"nodeType":"YulFunctionCall","src":"1185:30:201"},"nodeType":"YulExpressionStatement","src":"1185:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1235:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1246:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1231:3:201"},"nodeType":"YulFunctionCall","src":"1231:18:201"},{"hexValue":"43414c4c45525f4e4f545f494e43454e54495645535f434f4e54524f4c4c4552","kind":"string","nodeType":"YulLiteral","src":"1251:34:201","type":"","value":"CALLER_NOT_INCENTIVES_CONTROLLER"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1224:6:201"},"nodeType":"YulFunctionCall","src":"1224:62:201"},"nodeType":"YulExpressionStatement","src":"1224:62:201"},{"nodeType":"YulAssignment","src":"1295:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1307:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1318:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1303:3:201"},"nodeType":"YulFunctionCall","src":"1303:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1295:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_81338f1a577db8c7c83833eb7ec6bb164402c9f5cc1b20dac857316f1c65643a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1122:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1136:4:201","type":""}],"src":"971:356:201"},{"body":{"nodeType":"YulBlock","src":"1506:168:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1523:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1534:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1516:6:201"},"nodeType":"YulFunctionCall","src":"1516:21:201"},"nodeType":"YulExpressionStatement","src":"1516:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1557:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1568:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1553:3:201"},"nodeType":"YulFunctionCall","src":"1553:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"1573:2:201","type":"","value":"18"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1546:6:201"},"nodeType":"YulFunctionCall","src":"1546:30:201"},"nodeType":"YulExpressionStatement","src":"1546:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1596:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1607:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1592:3:201"},"nodeType":"YulFunctionCall","src":"1592:18:201"},{"hexValue":"4f4e4c595f524557415244535f41444d494e","kind":"string","nodeType":"YulLiteral","src":"1612:20:201","type":"","value":"ONLY_REWARDS_ADMIN"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1585:6:201"},"nodeType":"YulFunctionCall","src":"1585:48:201"},"nodeType":"YulExpressionStatement","src":"1585:48:201"},{"nodeType":"YulAssignment","src":"1642:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1654:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1665:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1650:3:201"},"nodeType":"YulFunctionCall","src":"1650:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1642:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_3f731c6282513aad661017d660e9777df98697b25477c4a167f4ae2ad258b6ef__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1483:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1497:4:201","type":""}],"src":"1332:342:201"},{"body":{"nodeType":"YulBlock","src":"1780:76:201","statements":[{"nodeType":"YulAssignment","src":"1790:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1802:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1813:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1798:3:201"},"nodeType":"YulFunctionCall","src":"1798:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1790:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1832:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"1843:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1825:6:201"},"nodeType":"YulFunctionCall","src":"1825:25:201"},"nodeType":"YulExpressionStatement","src":"1825:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1749:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1760:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1771:4:201","type":""}],"src":"1679:177:201"},{"body":{"nodeType":"YulBlock","src":"2035:171:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2052:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2063:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2045:6:201"},"nodeType":"YulFunctionCall","src":"2045:21:201"},"nodeType":"YulExpressionStatement","src":"2045:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2086:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2097:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2082:3:201"},"nodeType":"YulFunctionCall","src":"2082:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2102:2:201","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2075:6:201"},"nodeType":"YulFunctionCall","src":"2075:30:201"},"nodeType":"YulExpressionStatement","src":"2075:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2125:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2136:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2121:3:201"},"nodeType":"YulFunctionCall","src":"2121:18:201"},{"hexValue":"475076323a206661696c6564207472616e73666572","kind":"string","nodeType":"YulLiteral","src":"2141:23:201","type":"","value":"GPv2: failed transfer"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2114:6:201"},"nodeType":"YulFunctionCall","src":"2114:51:201"},"nodeType":"YulExpressionStatement","src":"2114:51:201"},{"nodeType":"YulAssignment","src":"2174:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2186:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2197:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2182:3:201"},"nodeType":"YulFunctionCall","src":"2182:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2174:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2012:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2026:4:201","type":""}],"src":"1861:345:201"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_stringliteral_81338f1a577db8c7c83833eb7ec6bb164402c9f5cc1b20dac857316f1c65643a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"CALLER_NOT_INCENTIVES_CONTROLLER\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_3f731c6282513aad661017d660e9777df98697b25477c4a167f4ae2ad258b6ef__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 18)\n        mstore(add(headStart, 64), \"ONLY_REWARDS_ADMIN\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"GPv2: failed transfer\")\n        tail := add(headStart, 96)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"39993":[{"length":32,"start":123},{"length":32,"start":255}],"39995":[{"length":32,"start":215},{"length":32,"start":456}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061004c5760003560e01c806316beb9821461005157806375d26413146100795780638d8e5da7146100c0578063c6255443146100d5575b600080fd5b61006461005f3660046104c1565b6100fb565b60405190151581526020015b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610070565b6100d36100ce3660046104c1565b6101b0565b005b7f000000000000000000000000000000000000000000000000000000000000000061009b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146101a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f43414c4c45525f4e4f545f494e43454e54495645535f434f4e54524f4c4c455260448201526064015b60405180910390fd5b50600160009081559392505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461024f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f4e4c595f524557415244535f41444d494e00000000000000000000000000006044820152606401610198565b61027073ffffffffffffffffffffffffffffffffffffffff841683836102f3565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7dc4ea712e6400e67a5abca1a983e5c420c386c19936dc120cd860b50b8e2579846040516102e691815260200190565b60405180910390a4505050565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af1610356573d6000803e3d6000fd5b50610360846103cc565b6103c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e7366657200000000000000000000006044820152606401610198565b50505050565b600061040c565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d801561044b5760208114610485576104467f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f6103d3565b610492565b823b61047c5761047c7f475076323a206e6f74206120636f6e747261637400000000000000000000000060146103d3565b60019150610492565b3d6000803e600051151591505b50919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146104bc57600080fd5b919050565b6000806000606084860312156104d657600080fd5b6104df84610498565b92506104ed60208501610498565b915060408401359050925092509256fea2646970667358221220c77a04a297335ade05d7fe188edfaf605169756014b4094171b939773f2a047d64736f6c634300080a0033","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 0x16BEB982 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x79 JUMPI DUP1 PUSH4 0x8D8E5DA7 EQ PUSH2 0xC0 JUMPI DUP1 PUSH4 0xC6255443 EQ PUSH2 0xD5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1 JUMP JUMPDEST PUSH2 0xFB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH32 0x0 JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x70 JUMP JUMPDEST PUSH2 0xD3 PUSH2 0xCE CALLDATASIZE PUSH1 0x4 PUSH2 0x4C1 JUMP JUMPDEST PUSH2 0x1B0 JUMP JUMPDEST STOP JUMPDEST PUSH32 0x0 PUSH2 0x9B JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1A1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43414C4C45525F4E4F545F494E43454E54495645535F434F4E54524F4C4C4552 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x0 SWAP1 DUP2 SSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x24F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F524557415244535F41444D494E0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x198 JUMP JUMPDEST PUSH2 0x270 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP4 DUP4 PUSH2 0x2F3 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x7DC4EA712E6400E67A5ABCA1A983E5C420C386C19936DC120CD860B50B8E2579 DUP5 PUSH1 0x40 MLOAD PUSH2 0x2E6 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x356 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x360 DUP5 PUSH2 0x3CC JUMP JUMPDEST PUSH2 0x3C6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x198 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x40C JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x44B JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x485 JUMPI PUSH2 0x446 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x3D3 JUMP JUMPDEST PUSH2 0x492 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x47C JUMPI PUSH2 0x47C PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x3D3 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x492 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4DF DUP5 PUSH2 0x498 JUMP JUMPDEST SWAP3 POP PUSH2 0x4ED PUSH1 0x20 DUP6 ADD PUSH2 0x498 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC7 PUSH27 0x4A297335ADE05D7FE188EDFAF605169756014B4094171B939773F 0x2A DIV PUSH30 0x64736F6C634300080A003300000000000000000000000000000000000000 ","sourceMap":"590:557:165:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;973:172;;;;;;:::i;:::-;;:::i;:::-;;;713:14:201;;706:22;688:41;;676:2;661:18;973:172:165;;;;;;;;1178:115:187;1267:21;1178:115;;;916:42:201;904:55;;;886:74;;874:2;859:18;1178:115:187;740:226:201;1641:225:187;;;;;;:::i;:::-;;:::i;:::-;;1337:99;1418:13;1337:99;;973:172:165;1093:4;879:21:187;:35;;904:10;879:35;871:80;;;;;;;1173:2:201;871:80:187;;;1155:21:201;;;1192:18;;;1185:30;1251:34;1231:18;;;1224:62;1303:18;;871:80:187;;;;;;;;;-1:-1:-1;1121:1:165::1;1105:13;:17:::0;;;973:172;;;;;:::o;1641:225:187:-;1072:10;:27;1086:13;1072:27;;1064:58;;;;;;;1534:2:201;1064:58:187;;;1516:21:201;1573:2;1553:18;;;1546:30;1612:20;1592:18;;;1585:48;1650:18;;1064:58:187;1332:342:201;1064:58:187;1761:38:::1;:26;::::0;::::1;1788:2:::0;1792:6;1761:26:::1;:38::i;:::-;1850:2;1811:50;;1843:5;1811:50;;1831:10;1811:50;;;1854:6;1811:50;;;;1825:25:201::0;;1813:2;1798:18;;1679:177;1811:50:187::1;;;;;;;;1641:225:::0;;;:::o;441:657:1:-;668:4;662:11;538:23;680:36;;;765:42;757:51;;753:1;730:25;;723:86;846:2;823:26;;816:41;;;538:23;519:16;;916:2;662:11;519:16;887:5;880;875:50;865:154;;958:16;955:1;952;937:38;994:16;991:1;984:27;865:154;;1039:28;1061:5;1039:21;:28::i;:::-;1031:62;;;;;;;2063:2:201;1031:62:1;;;2045:21:201;2102:2;2082:18;;;2075:30;2141:23;2121:18;;;2114:51;2182:18;;1031:62:1;1861:345:201;1031:62:1;513:585;441:657;;;:::o;2198:2524::-;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;4611:1;4605:8;4598:16;4591:24;4580:35;;3538:1174;;2198:2524;;;:::o;14:196:201:-;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:328::-;292:6;300;308;361:2;349:9;340:7;336:23;332:32;329:52;;;377:1;374;367:12;329:52;400:29;419:9;400:29;:::i;:::-;390:39;;448:38;482:2;471:9;467:18;448:38;:::i;:::-;438:48;;533:2;522:9;518:18;505:32;495:42;;215:328;;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"266200","executionCost":"infinite","totalCost":"infinite"},"external":{"emergencyWithdrawal(address,address,uint256)":"infinite","getIncentivesController()":"infinite","getRewardsAdmin()":"infinite","performTransfer(address,address,uint256)":"infinite"}},"methodIdentifiers":{"emergencyWithdrawal(address,address,uint256)":"8d8e5da7","getIncentivesController()":"75d26413","getRewardsAdmin()":"c6255443","performTransfer(address,address,uint256)":"16beb982"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardsAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"EmergencyWithdrawal\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emergencyWithdrawal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardsAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"performTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave*\",\"kind\":\"dev\",\"methods\":{\"emergencyWithdrawal(address,address,uint256)\":{\"details\":\"Perform an emergency token withdrawal only callable by the Rewards admin\",\"params\":{\"amount\":\"Amount of the withdrawal\",\"to\":\"Address of the recipient of the withdrawal\",\"token\":\"Address of the token to withdraw funds from this contract\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"Returns the address of the Incentives Controller\"}},\"getRewardsAdmin()\":{\"returns\":{\"_0\":\"Returns the address of the Rewards admin\"}},\"performTransfer(address,address,uint256)\":{\"details\":\"Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation\",\"params\":{\"amount\":\"Amount to transfer to the \\\"to\\\" address parameter\",\"reward\":\"Address of the reward token\",\"to\":\"Account to transfer rewards\"},\"returns\":{\"_0\":\"Returns true bool if transfer logic succeeds\"}}},\"title\":\"MockBadTransferStrategy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Transfer strategy that always return false at performTransfer and does noop.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/MockBadTransferStrategy.sol\":\"MockBadTransferStrategy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/mocks/MockBadTransferStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {ITransferStrategyBase} from '../rewards/interfaces/ITransferStrategyBase.sol';\\nimport {TransferStrategyBase} from '../rewards/transfer-strategies/TransferStrategyBase.sol';\\nimport {GPv2SafeERC20} from '@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title MockBadTransferStrategy\\n * @notice Transfer strategy that always return false at performTransfer and does noop.\\n * @author Aave\\n **/\\ncontract MockBadTransferStrategy is TransferStrategyBase {\\n  using GPv2SafeERC20 for IERC20;\\n\\n  // Added storage variable to prevent warnings at compilation for performTransfer\\n  uint256 ignoreWarning;\\n\\n  constructor(\\n    address incentivesController,\\n    address rewardsAdmin\\n  ) TransferStrategyBase(incentivesController, rewardsAdmin) {}\\n\\n  /// @inheritdoc TransferStrategyBase\\n  function performTransfer(\\n    address,\\n    address,\\n    uint256\\n  ) external override onlyIncentivesController returns (bool) {\\n    ignoreWarning = 1;\\n    return false;\\n  }\\n}\\n\",\"keccak256\":\"0x6fb820796d88a4c630a87ef3ebb88695bcc5a34b2d35d6652f38e1d2dc26348d\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/ITransferStrategyBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface ITransferStrategyBase {\\n  event EmergencyWithdrawal(\\n    address indexed caller,\\n    address indexed token,\\n    address indexed to,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @dev Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation\\n   * @param to Account to transfer rewards\\n   * @param reward Address of the reward token\\n   * @param amount Amount to transfer to the \\\"to\\\" address parameter\\n   * @return Returns true bool if transfer logic succeeds\\n   */\\n  function performTransfer(address to, address reward, uint256 amount) external returns (bool);\\n\\n  /**\\n   * @return Returns the address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view returns (address);\\n\\n  /**\\n   * @return Returns the address of the Rewards admin\\n   */\\n  function getRewardsAdmin() external view returns (address);\\n\\n  /**\\n   * @dev Perform an emergency token withdrawal only callable by the Rewards admin\\n   * @param token Address of the token to withdraw funds from this contract\\n   * @param to Address of the recipient of the withdrawal\\n   * @param amount Amount of the withdrawal\\n   */\\n  function emergencyWithdrawal(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0xa52a6dc237879acbed7325787ce58238a3afd626fa2ed827d4e321d2e4ef51ad\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/transfer-strategies/TransferStrategyBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {ITransferStrategyBase} from '../interfaces/ITransferStrategyBase.sol';\\nimport {GPv2SafeERC20} from '@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title TransferStrategyStorage\\n * @author Aave\\n **/\\nabstract contract TransferStrategyBase is ITransferStrategyBase {\\n  using GPv2SafeERC20 for IERC20;\\n\\n  address internal immutable INCENTIVES_CONTROLLER;\\n  address internal immutable REWARDS_ADMIN;\\n\\n  constructor(address incentivesController, address rewardsAdmin) {\\n    INCENTIVES_CONTROLLER = incentivesController;\\n    REWARDS_ADMIN = rewardsAdmin;\\n  }\\n\\n  /**\\n   * @dev Modifier for incentives controller only functions\\n   */\\n  modifier onlyIncentivesController() {\\n    require(INCENTIVES_CONTROLLER == msg.sender, 'CALLER_NOT_INCENTIVES_CONTROLLER');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Modifier for reward admin only functions\\n   */\\n  modifier onlyRewardsAdmin() {\\n    require(msg.sender == REWARDS_ADMIN, 'ONLY_REWARDS_ADMIN');\\n    _;\\n  }\\n\\n  /// @inheritdoc ITransferStrategyBase\\n  function getIncentivesController() external view override returns (address) {\\n    return INCENTIVES_CONTROLLER;\\n  }\\n\\n  /// @inheritdoc ITransferStrategyBase\\n  function getRewardsAdmin() external view override returns (address) {\\n    return REWARDS_ADMIN;\\n  }\\n\\n  /// @inheritdoc ITransferStrategyBase\\n  function performTransfer(\\n    address to,\\n    address reward,\\n    uint256 amount\\n  ) external virtual returns (bool);\\n\\n  /// @inheritdoc ITransferStrategyBase\\n  function emergencyWithdrawal(\\n    address token,\\n    address to,\\n    uint256 amount\\n  ) external onlyRewardsAdmin {\\n    IERC20(token).safeTransfer(to, amount);\\n\\n    emit EmergencyWithdrawal(msg.sender, token, to, amount);\\n  }\\n}\\n\",\"keccak256\":\"0xd412ed205d7d5c9d9f2172cc537ad0e86ec7aee7f9bc658a4001a3be4b85ba5e\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":35093,"contract":"contracts/mocks/MockBadTransferStrategy.sol:MockBadTransferStrategy","label":"ignoreWarning","offset":0,"slot":"0","type":"t_uint256"}],"types":{"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"notice":"Transfer strategy that always return false at performTransfer and does noop.","version":1}}},"contracts/mocks/WETH9Mock.sol":{"WETH9Mock":{"abi":[{"inputs":[{"internalType":"string","name":"mockName","type":"string"},{"internalType":"string","name":"mockSymbol","type":"string"},{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"guy","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"guy","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"isProtected","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mint","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setProtected","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":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_1500":{"entryPoint":null,"id":1500,"parameterSlots":0,"returnSlots":0},"@_35185":{"entryPoint":null,"id":35185,"parameterSlots":3,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@transferOwnership_1572":{"entryPoint":289,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_string_fromMemory":{"entryPoint":751,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_address_fromMemory":{"entryPoint":934,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"extract_byte_array_length":{"entryPoint":1075,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x41":{"entryPoint":729,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2920:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"46:95:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"63:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"70:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"75:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"66:3:201"},"nodeType":"YulFunctionCall","src":"66:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"56:6:201"},"nodeType":"YulFunctionCall","src":"56:31:201"},"nodeType":"YulExpressionStatement","src":"56:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"103:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"106:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"96:6:201"},"nodeType":"YulFunctionCall","src":"96:15:201"},"nodeType":"YulExpressionStatement","src":"96:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"127:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"130:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"120:6:201"},"nodeType":"YulFunctionCall","src":"120:15:201"},"nodeType":"YulExpressionStatement","src":"120:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"14:127:201"},{"body":{"nodeType":"YulBlock","src":"210:821:201","statements":[{"body":{"nodeType":"YulBlock","src":"259:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"268:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"271:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"261:6:201"},"nodeType":"YulFunctionCall","src":"261:12:201"},"nodeType":"YulExpressionStatement","src":"261:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"238:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"246:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"234:3:201"},"nodeType":"YulFunctionCall","src":"234:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"253:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"230:3:201"},"nodeType":"YulFunctionCall","src":"230:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"223:6:201"},"nodeType":"YulFunctionCall","src":"223:35:201"},"nodeType":"YulIf","src":"220:55:201"},{"nodeType":"YulVariableDeclaration","src":"284:23:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"300:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"294:5:201"},"nodeType":"YulFunctionCall","src":"294:13:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"288:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"316:28:201","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"334:2:201","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"338:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"330:3:201"},"nodeType":"YulFunctionCall","src":"330:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"342:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"326:3:201"},"nodeType":"YulFunctionCall","src":"326:18:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"320:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"367:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"369:16:201"},"nodeType":"YulFunctionCall","src":"369:18:201"},"nodeType":"YulExpressionStatement","src":"369:18:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"359:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"363:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"356:2:201"},"nodeType":"YulFunctionCall","src":"356:10:201"},"nodeType":"YulIf","src":"353:36:201"},{"nodeType":"YulVariableDeclaration","src":"398:17:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"412:2:201","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"408:3:201"},"nodeType":"YulFunctionCall","src":"408:7:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"402:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"424:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"444:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"438:5:201"},"nodeType":"YulFunctionCall","src":"438:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"428:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"456:71:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"478:6:201"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"502:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"506:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"498:3:201"},"nodeType":"YulFunctionCall","src":"498:13:201"},{"name":"_3","nodeType":"YulIdentifier","src":"513:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"494:3:201"},"nodeType":"YulFunctionCall","src":"494:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"518:2:201","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"490:3:201"},"nodeType":"YulFunctionCall","src":"490:31:201"},{"name":"_3","nodeType":"YulIdentifier","src":"523:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"486:3:201"},"nodeType":"YulFunctionCall","src":"486:40:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"474:3:201"},"nodeType":"YulFunctionCall","src":"474:53:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"460:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"586:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"588:16:201"},"nodeType":"YulFunctionCall","src":"588:18:201"},"nodeType":"YulExpressionStatement","src":"588:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"545:10:201"},{"name":"_2","nodeType":"YulIdentifier","src":"557:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"542:2:201"},"nodeType":"YulFunctionCall","src":"542:18:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"565:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"577:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"562:2:201"},"nodeType":"YulFunctionCall","src":"562:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"539:2:201"},"nodeType":"YulFunctionCall","src":"539:46:201"},"nodeType":"YulIf","src":"536:72:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"624:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"628:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"617:6:201"},"nodeType":"YulFunctionCall","src":"617:22:201"},"nodeType":"YulExpressionStatement","src":"617:22:201"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"655:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"663:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"648:6:201"},"nodeType":"YulFunctionCall","src":"648:18:201"},"nodeType":"YulExpressionStatement","src":"648:18:201"},{"nodeType":"YulVariableDeclaration","src":"675:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"685:4:201","type":"","value":"0x20"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"679:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"735:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"744:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"747:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"737:6:201"},"nodeType":"YulFunctionCall","src":"737:12:201"},"nodeType":"YulExpressionStatement","src":"737:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"712:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"720:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"708:3:201"},"nodeType":"YulFunctionCall","src":"708:15:201"},{"name":"_4","nodeType":"YulIdentifier","src":"725:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"704:3:201"},"nodeType":"YulFunctionCall","src":"704:24:201"},{"name":"end","nodeType":"YulIdentifier","src":"730:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"701:2:201"},"nodeType":"YulFunctionCall","src":"701:33:201"},"nodeType":"YulIf","src":"698:53:201"},{"nodeType":"YulVariableDeclaration","src":"760:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"769:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"764:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"825:87:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"854:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"862:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"850:3:201"},"nodeType":"YulFunctionCall","src":"850:14:201"},{"name":"_4","nodeType":"YulIdentifier","src":"866:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"846:3:201"},"nodeType":"YulFunctionCall","src":"846:23:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"885:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"893:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"881:3:201"},"nodeType":"YulFunctionCall","src":"881:14:201"},{"name":"_4","nodeType":"YulIdentifier","src":"897:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"877:3:201"},"nodeType":"YulFunctionCall","src":"877:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"871:5:201"},"nodeType":"YulFunctionCall","src":"871:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"839:6:201"},"nodeType":"YulFunctionCall","src":"839:63:201"},"nodeType":"YulExpressionStatement","src":"839:63:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"790:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"793:2:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"787:2:201"},"nodeType":"YulFunctionCall","src":"787:9:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"797:19:201","statements":[{"nodeType":"YulAssignment","src":"799:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"808:1:201"},{"name":"_4","nodeType":"YulIdentifier","src":"811:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"804:3:201"},"nodeType":"YulFunctionCall","src":"804:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"799:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"783:3:201","statements":[]},"src":"779:133:201"},{"body":{"nodeType":"YulBlock","src":"942:59:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"971:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"979:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"967:3:201"},"nodeType":"YulFunctionCall","src":"967:15:201"},{"name":"_4","nodeType":"YulIdentifier","src":"984:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"963:3:201"},"nodeType":"YulFunctionCall","src":"963:24:201"},{"kind":"number","nodeType":"YulLiteral","src":"989:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"956:6:201"},"nodeType":"YulFunctionCall","src":"956:35:201"},"nodeType":"YulExpressionStatement","src":"956:35:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"927:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"930:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"924:2:201"},"nodeType":"YulFunctionCall","src":"924:9:201"},"nodeType":"YulIf","src":"921:80:201"},{"nodeType":"YulAssignment","src":"1010:15:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1019:6:201"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"1010:5:201"}]}]},"name":"abi_decode_string_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"184:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"192:3:201","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"200:5:201","type":""}],"src":"146:885:201"},{"body":{"nodeType":"YulBlock","src":"1171:594:201","statements":[{"body":{"nodeType":"YulBlock","src":"1217:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1226:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1229:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1219:6:201"},"nodeType":"YulFunctionCall","src":"1219:12:201"},"nodeType":"YulExpressionStatement","src":"1219:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1192:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1201:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1188:3:201"},"nodeType":"YulFunctionCall","src":"1188:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1213:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1184:3:201"},"nodeType":"YulFunctionCall","src":"1184:32:201"},"nodeType":"YulIf","src":"1181:52:201"},{"nodeType":"YulVariableDeclaration","src":"1242:30:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1262:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1256:5:201"},"nodeType":"YulFunctionCall","src":"1256:16:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1246:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1281:28:201","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1299:2:201","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"1303:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1295:3:201"},"nodeType":"YulFunctionCall","src":"1295:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"1307:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1291:3:201"},"nodeType":"YulFunctionCall","src":"1291:18:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1285:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1336:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1345:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1348:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1338:6:201"},"nodeType":"YulFunctionCall","src":"1338:12:201"},"nodeType":"YulExpressionStatement","src":"1338:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1324:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1332:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1321:2:201"},"nodeType":"YulFunctionCall","src":"1321:14:201"},"nodeType":"YulIf","src":"1318:34:201"},{"nodeType":"YulAssignment","src":"1361:71:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1404:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"1415:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1400:3:201"},"nodeType":"YulFunctionCall","src":"1400:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1424:7:201"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"1371:28:201"},"nodeType":"YulFunctionCall","src":"1371:61:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1361:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1441:41:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1467:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1478:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1463:3:201"},"nodeType":"YulFunctionCall","src":"1463:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1457:5:201"},"nodeType":"YulFunctionCall","src":"1457:25:201"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"1445:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1511:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1520:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1523:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1513:6:201"},"nodeType":"YulFunctionCall","src":"1513:12:201"},"nodeType":"YulExpressionStatement","src":"1513:12:201"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"1497:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1507:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1494:2:201"},"nodeType":"YulFunctionCall","src":"1494:16:201"},"nodeType":"YulIf","src":"1491:36:201"},{"nodeType":"YulAssignment","src":"1536:73:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1579:9:201"},{"name":"offset_1","nodeType":"YulIdentifier","src":"1590:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1575:3:201"},"nodeType":"YulFunctionCall","src":"1575:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1601:7:201"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"1546:28:201"},"nodeType":"YulFunctionCall","src":"1546:63:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1536:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1618:38:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1641:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1652:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1637:3:201"},"nodeType":"YulFunctionCall","src":"1637:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1631:5:201"},"nodeType":"YulFunctionCall","src":"1631:25:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1622:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1719:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1728:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1731:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1721:6:201"},"nodeType":"YulFunctionCall","src":"1721:12:201"},"nodeType":"YulExpressionStatement","src":"1721:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1678:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1689:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1704:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1709:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1700:3:201"},"nodeType":"YulFunctionCall","src":"1700:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"1713:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1696:3:201"},"nodeType":"YulFunctionCall","src":"1696:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1685:3:201"},"nodeType":"YulFunctionCall","src":"1685:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1675:2:201"},"nodeType":"YulFunctionCall","src":"1675:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1668:6:201"},"nodeType":"YulFunctionCall","src":"1668:50:201"},"nodeType":"YulIf","src":"1665:70:201"},{"nodeType":"YulAssignment","src":"1744:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1754:5:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1744:6:201"}]}]},"name":"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1121:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1132:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1144:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1152:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1160:6:201","type":""}],"src":"1036:729:201"},{"body":{"nodeType":"YulBlock","src":"1944:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1961:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1972:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1954:6:201"},"nodeType":"YulFunctionCall","src":"1954:21:201"},"nodeType":"YulExpressionStatement","src":"1954:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1995:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2006:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1991:3:201"},"nodeType":"YulFunctionCall","src":"1991:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2011:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1984:6:201"},"nodeType":"YulFunctionCall","src":"1984:30:201"},"nodeType":"YulExpressionStatement","src":"1984:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2034:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2045:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2030:3:201"},"nodeType":"YulFunctionCall","src":"2030:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"2050:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2023:6:201"},"nodeType":"YulFunctionCall","src":"2023:62:201"},"nodeType":"YulExpressionStatement","src":"2023:62:201"},{"nodeType":"YulAssignment","src":"2094:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2106:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2117:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2102:3:201"},"nodeType":"YulFunctionCall","src":"2102:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2094:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1921:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1935:4:201","type":""}],"src":"1770:356:201"},{"body":{"nodeType":"YulBlock","src":"2305:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2322:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2333:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2315:6:201"},"nodeType":"YulFunctionCall","src":"2315:21:201"},"nodeType":"YulExpressionStatement","src":"2315:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2356:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2367:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2352:3:201"},"nodeType":"YulFunctionCall","src":"2352:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2372:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2345:6:201"},"nodeType":"YulFunctionCall","src":"2345:30:201"},"nodeType":"YulExpressionStatement","src":"2345:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2395:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2406:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2391:3:201"},"nodeType":"YulFunctionCall","src":"2391:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"2411:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2384:6:201"},"nodeType":"YulFunctionCall","src":"2384:62:201"},"nodeType":"YulExpressionStatement","src":"2384:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2466:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2477:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2462:3:201"},"nodeType":"YulFunctionCall","src":"2462:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"2482:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2455:6:201"},"nodeType":"YulFunctionCall","src":"2455:36:201"},"nodeType":"YulExpressionStatement","src":"2455:36:201"},{"nodeType":"YulAssignment","src":"2500:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2512:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2523:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2508:3:201"},"nodeType":"YulFunctionCall","src":"2508:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2500:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2282:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2296:4:201","type":""}],"src":"2131:402:201"},{"body":{"nodeType":"YulBlock","src":"2593:325:201","statements":[{"nodeType":"YulAssignment","src":"2603:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2617:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"2620:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2613:3:201"},"nodeType":"YulFunctionCall","src":"2613:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2603:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2634:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"2664:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"2670:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2660:3:201"},"nodeType":"YulFunctionCall","src":"2660:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"2638:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2711:31:201","statements":[{"nodeType":"YulAssignment","src":"2713:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2727:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2735:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2723:3:201"},"nodeType":"YulFunctionCall","src":"2723:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"2713:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"2691:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2684:6:201"},"nodeType":"YulFunctionCall","src":"2684:26:201"},"nodeType":"YulIf","src":"2681:61:201"},{"body":{"nodeType":"YulBlock","src":"2801:111:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2822:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2829:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2834:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2825:3:201"},"nodeType":"YulFunctionCall","src":"2825:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2815:6:201"},"nodeType":"YulFunctionCall","src":"2815:31:201"},"nodeType":"YulExpressionStatement","src":"2815:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2866:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"2869:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2859:6:201"},"nodeType":"YulFunctionCall","src":"2859:15:201"},"nodeType":"YulExpressionStatement","src":"2859:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2894:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2897:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2887:6:201"},"nodeType":"YulFunctionCall","src":"2887:15:201"},"nodeType":"YulExpressionStatement","src":"2887:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"2757:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"2780:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2788:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2777:2:201"},"nodeType":"YulFunctionCall","src":"2777:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2754:2:201"},"nodeType":"YulFunctionCall","src":"2754:38:201"},"nodeType":"YulIf","src":"2751:161:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"2573:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"2582:6:201","type":""}],"src":"2538:380:201"}]},"contents":"{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_string_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := mload(offset)\n        let _2 := sub(shl(64, 1), 1)\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        let _4 := 0x20\n        if gt(add(add(offset, _1), _4), end) { revert(0, 0) }\n        let i := 0\n        for { } lt(i, _1) { i := add(i, _4) }\n        {\n            mstore(add(add(memPtr, i), _4), mload(add(add(offset, i), _4)))\n        }\n        if gt(i, _1)\n        {\n            mstore(add(add(memPtr, _1), _4), 0)\n        }\n        array := memPtr\n    }\n    function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_address_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        value0 := abi_decode_string_fromMemory(add(headStart, offset), dataEnd)\n        let offset_1 := mload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_string_fromMemory(add(headStart, offset_1), dataEnd)\n        let value := mload(add(headStart, 64))\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value2 := value\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815262000030916000919062000233565b50604080518082019091526004808252630ae8aa8960e31b60209092019182526200005e9160019162000233565b506002805460ff191660121790553480156200007957600080fd5b506040516200137c3803806200137c8339810160408190526200009c91620003a6565b600580546001600160a01b0319163390811790915560405181906000906000805160206200135c833981519152908290a3508251620000e390600090602086019062000233565b508151620000f990600190602085019062000233565b50620001058162000121565b50506005805460ff60a01b1916600160a01b1790555062000470565b6005546001600160a01b03163314620001815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b038116620001e85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000178565b6005546040516001600160a01b038084169216906000805160206200135c83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b828054620002419062000433565b90600052602060002090601f016020900481019282620002655760008555620002b0565b82601f106200028057805160ff1916838001178555620002b0565b82800160010185558215620002b0579182015b82811115620002b057825182559160200191906001019062000293565b50620002be929150620002c2565b5090565b5b80821115620002be5760008155600101620002c3565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200030157600080fd5b81516001600160401b03808211156200031e576200031e620002d9565b604051601f8301601f19908116603f01168101908282118183101715620003495762000349620002d9565b816040528381526020925086838588010111156200036657600080fd5b600091505b838210156200038a57858201830151818301840152908201906200036b565b838211156200039c5760008385830101525b9695505050505050565b600080600060608486031215620003bc57600080fd5b83516001600160401b0380821115620003d457600080fd5b620003e287838801620002ef565b94506020860151915080821115620003f957600080fd5b506200040886828701620002ef565b604086015190935090506001600160a01b03811681146200042857600080fd5b809150509250925092565b600181811c908216806200044857607f821691505b602082108114156200046a57634e487b7160e01b600052602260045260246000fd5b50919050565b610edc80620004806000396000f3fe6080604052600436106101125760003560e01c80635300f82b116100a557806395d89b4111610074578063d0e30db011610059578063d0e30db014610326578063dd62ed3e1461032e578063f2fde38b1461036657600080fd5b806395d89b41146102f1578063a9059cbb1461030657600080fd5b80635300f82b1461024a57806370a082311461027a578063715018a6146102a75780638da5cb5b146102bc57600080fd5b806323b872dd116100e157806323b872dd146101be5780632e1a7d4d146101de578063313ce567146101fe57806340c10f191461022a57600080fd5b806306fdde0314610126578063095ea7b31461015157806318160ddd146101815780631c02bc311461019e57600080fd5b366101215761011f610386565b005b600080fd5b34801561013257600080fd5b5061013b6103e1565b6040516101489190610c69565b60405180910390f35b34801561015d57600080fd5b5061017161016c366004610d05565b61046f565b6040519015158152602001610148565b34801561018d57600080fd5b50475b604051908152602001610148565b3480156101aa57600080fd5b5061011f6101b9366004610d2f565b6104e8565b3480156101ca57600080fd5b506101716101d9366004610d51565b6105b8565b3480156101ea57600080fd5b5061011f6101f9366004610d8d565b6107cf565b34801561020a57600080fd5b506002546102189060ff1681565b60405160ff9091168152602001610148565b34801561023657600080fd5b50610171610245366004610d05565b610875565b34801561025657600080fd5b5060055474010000000000000000000000000000000000000000900460ff16610171565b34801561028657600080fd5b50610190610295366004610da6565b60036020526000908152604090205481565b3480156102b357600080fd5b5061011f6109a6565b3480156102c857600080fd5b5060055460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610148565b3480156102fd57600080fd5b5061013b610a96565b34801561031257600080fd5b50610171610321366004610d05565b610aa3565b61011f610386565b34801561033a57600080fd5b50610190610349366004610dc1565b600460209081526000928352604080842090915290825290205481565b34801561037257600080fd5b5061011f610381366004610da6565b610ab7565b33600090815260036020526040812080543492906103a5908490610e23565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546103ee90610e3b565b80601f016020809104026020016040519081016040528092919081815260200182805461041a90610e3b565b80156104675780601f1061043c57610100808354040283529160200191610467565b820191906000526020600020905b81548152906001019060200180831161044a57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104d79086815260200190565b60405180910390a350600192915050565b60055473ffffffffffffffffffffffffffffffffffffffff16331461056e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6005805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548211156105ea57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84163314801590610660575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156106e85773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156106a257600080fd5b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152812080548492906106e2908490610e8f565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061071d908490610e8f565b909155505073ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081208054849290610757908490610e23565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107bd91815260200190565b60405180910390a35060019392505050565b336000908152600360205260409020548111156107eb57600080fd5b336000908152600360205260408120805483929061080a908490610e8f565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561083c573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b60055460009074010000000000000000000000000000000000000000900460ff161515600114156109215760055473ffffffffffffffffffffffffffffffffffffffff163314610921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610565565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081208054849290610956908490610e23565b909155505060405182815273ffffffffffffffffffffffffffffffffffffffff8416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016104d7565b60055473ffffffffffffffffffffffffffffffffffffffff163314610a27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610565565b60055460405160009173ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b600180546103ee90610e3b565b6000610ab03384846105b8565b9392505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610b38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610565565b73ffffffffffffffffffffffffffffffffffffffff8116610bdb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610565565b60055460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600060208083528351808285015260005b81811015610c9657858101830151858201604001528201610c7a565b81811115610ca8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610d0057600080fd5b919050565b60008060408385031215610d1857600080fd5b610d2183610cdc565b946020939093013593505050565b600060208284031215610d4157600080fd5b81358015158114610ab057600080fd5b600080600060608486031215610d6657600080fd5b610d6f84610cdc565b9250610d7d60208501610cdc565b9150604084013590509250925092565b600060208284031215610d9f57600080fd5b5035919050565b600060208284031215610db857600080fd5b610ab082610cdc565b60008060408385031215610dd457600080fd5b610ddd83610cdc565b9150610deb60208401610cdc565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610e3657610e36610df4565b500190565b600181811c90821680610e4f57607f821691505b60208210811415610e89577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082821015610ea157610ea1610df4565b50039056fea26469706673582212201b95fd02a551bd725b4bcc600ca1083bac15a2b3e9d6bee1a29df6a38a8c38ea64736f6c634300080a00338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","opcodes":"PUSH1 0xC0 PUSH1 0x40 MSTORE PUSH1 0xD PUSH1 0x80 DUP2 SWAP1 MSTORE PUSH13 0x2BB930B83832B21022BA3432B9 PUSH1 0x99 SHL PUSH1 0xA0 SWAP1 DUP2 MSTORE PUSH3 0x30 SWAP2 PUSH1 0x0 SWAP2 SWAP1 PUSH3 0x233 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP1 DUP3 MSTORE PUSH4 0xAE8AA89 PUSH1 0xE3 SHL PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 DUP3 MSTORE PUSH3 0x5E SWAP2 PUSH1 0x1 SWAP2 PUSH3 0x233 JUMP JUMPDEST POP PUSH1 0x2 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x137C CODESIZE SUB DUP1 PUSH3 0x137C DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x9C SWAP2 PUSH3 0x3A6 JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD DUP2 SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x135C DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 DUP3 SWAP1 LOG3 POP DUP3 MLOAD PUSH3 0xE3 SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x20 DUP7 ADD SWAP1 PUSH3 0x233 JUMP JUMPDEST POP DUP2 MLOAD PUSH3 0xF9 SWAP1 PUSH1 0x1 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x233 JUMP JUMPDEST POP PUSH3 0x105 DUP2 PUSH3 0x121 JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF PUSH1 0xA0 SHL NOT AND PUSH1 0x1 PUSH1 0xA0 SHL OR SWAP1 SSTORE POP PUSH3 0x470 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH3 0x181 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x1E8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x178 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 AND SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x135C DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x241 SWAP1 PUSH3 0x433 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x265 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x2B0 JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x280 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x2B0 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x2B0 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x2B0 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x293 JUMP JUMPDEST POP PUSH3 0x2BE SWAP3 SWAP2 POP PUSH3 0x2C2 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x2BE JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x2C3 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x301 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x31E JUMPI PUSH3 0x31E PUSH3 0x2D9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x349 JUMPI PUSH3 0x349 PUSH3 0x2D9 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 SWAP3 POP DUP7 DUP4 DUP6 DUP9 ADD ADD GT ISZERO PUSH3 0x366 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP4 DUP3 LT ISZERO PUSH3 0x38A JUMPI DUP6 DUP3 ADD DUP4 ADD MLOAD DUP2 DUP4 ADD DUP5 ADD MSTORE SWAP1 DUP3 ADD SWAP1 PUSH3 0x36B JUMP JUMPDEST DUP4 DUP3 GT ISZERO PUSH3 0x39C JUMPI PUSH1 0x0 DUP4 DUP6 DUP4 ADD ADD MSTORE JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x3BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x3D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x3E2 DUP8 DUP4 DUP9 ADD PUSH3 0x2EF JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x3F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x408 DUP7 DUP3 DUP8 ADD PUSH3 0x2EF JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD SWAP1 SWAP4 POP SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x428 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x448 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x46A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xEDC DUP1 PUSH3 0x480 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x112 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5300F82B GT PUSH2 0xA5 JUMPI DUP1 PUSH4 0x95D89B41 GT PUSH2 0x74 JUMPI DUP1 PUSH4 0xD0E30DB0 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xD0E30DB0 EQ PUSH2 0x326 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x32E JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x366 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x2F1 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x306 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5300F82B EQ PUSH2 0x24A JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x27A JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0xE1 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1BE JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x1DE JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1FE JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x22A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x126 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x181 JUMPI DUP1 PUSH4 0x1C02BC31 EQ PUSH2 0x19E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x121 JUMPI PUSH2 0x11F PUSH2 0x386 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x132 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13B PUSH2 0x3E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x148 SWAP2 SWAP1 PUSH2 0xC69 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x15D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x171 PUSH2 0x16C CALLDATASIZE PUSH1 0x4 PUSH2 0xD05 JUMP JUMPDEST PUSH2 0x46F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x148 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SELFBALANCE JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x148 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11F PUSH2 0x1B9 CALLDATASIZE PUSH1 0x4 PUSH2 0xD2F JUMP JUMPDEST PUSH2 0x4E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x171 PUSH2 0x1D9 CALLDATASIZE PUSH1 0x4 PUSH2 0xD51 JUMP JUMPDEST PUSH2 0x5B8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11F PUSH2 0x1F9 CALLDATASIZE PUSH1 0x4 PUSH2 0xD8D JUMP JUMPDEST PUSH2 0x7CF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x20A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x218 SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x148 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x236 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x171 PUSH2 0x245 CALLDATASIZE PUSH1 0x4 PUSH2 0xD05 JUMP JUMPDEST PUSH2 0x875 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x5 SLOAD PUSH21 0x10000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x171 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x286 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x190 PUSH2 0x295 CALLDATASIZE PUSH1 0x4 PUSH2 0xDA6 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11F PUSH2 0x9A6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x148 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13B PUSH2 0xA96 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x312 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x171 PUSH2 0x321 CALLDATASIZE PUSH1 0x4 PUSH2 0xD05 JUMP JUMPDEST PUSH2 0xAA3 JUMP JUMPDEST PUSH2 0x11F PUSH2 0x386 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x33A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x190 PUSH2 0x349 CALLDATASIZE PUSH1 0x4 PUSH2 0xDC1 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x372 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11F PUSH2 0x381 CALLDATASIZE PUSH1 0x4 PUSH2 0xDA6 JUMP JUMPDEST PUSH2 0xAB7 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD CALLVALUE SWAP3 SWAP1 PUSH2 0x3A5 SWAP1 DUP5 SWAP1 PUSH2 0xE23 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD CALLVALUE DUP2 MSTORE CALLER SWAP1 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x3EE SWAP1 PUSH2 0xE3B JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x41A SWAP1 PUSH2 0xE3B JUMP JUMPDEST DUP1 ISZERO PUSH2 0x467 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x43C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x467 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 0x44A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE MLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x4D7 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x56E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD SWAP2 ISZERO ISZERO PUSH21 0x10000000000000000000000000000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x5EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND CALLER EQ DUP1 ISZERO SWAP1 PUSH2 0x660 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EQ ISZERO JUMPDEST ISZERO PUSH2 0x6E8 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x6A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x6E2 SWAP1 DUP5 SWAP1 PUSH2 0xE8F JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x71D SWAP1 DUP5 SWAP1 PUSH2 0xE8F JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x757 SWAP1 DUP5 SWAP1 PUSH2 0xE23 JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD PUSH2 0x7BD SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x7EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x80A SWAP1 DUP5 SWAP1 PUSH2 0xE8F JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD CALLER SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x83C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE CALLER SWAP1 PUSH32 0x7FCF532C15F0A6DB0BD6D0E038BEA71D30D808C7D98CB3BF7268A95BF5081B65 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x0 SWAP1 PUSH21 0x10000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x1 EQ ISZERO PUSH2 0x921 JUMPI PUSH1 0x5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x921 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x565 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x956 SWAP1 DUP5 SWAP1 PUSH2 0xE23 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH2 0x4D7 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xA27 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x565 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x5 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH2 0x3EE SWAP1 PUSH2 0xE3B JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAB0 CALLER DUP5 DUP5 PUSH2 0x5B8 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xB38 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x565 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xBDB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x565 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND SWAP3 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH1 0x5 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC96 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xC7A JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xCA8 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xD00 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xD18 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD21 DUP4 PUSH2 0xCDC 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 0xD41 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xAB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xD66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD6F DUP5 PUSH2 0xCDC JUMP JUMPDEST SWAP3 POP PUSH2 0xD7D PUSH1 0x20 DUP6 ADD PUSH2 0xCDC JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xDB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAB0 DUP3 PUSH2 0xCDC JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xDD4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDDD DUP4 PUSH2 0xCDC JUMP JUMPDEST SWAP2 POP PUSH2 0xDEB PUSH1 0x20 DUP5 ADD PUSH2 0xCDC JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0xE36 JUMPI PUSH2 0xE36 PUSH2 0xDF4 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0xE4F JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0xE89 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0xEA1 JUMPI PUSH2 0xEA1 PUSH2 0xDF4 JUMP JUMPDEST POP SUB SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHL SWAP6 REVERT MUL 0xA5 MLOAD 0xBD PUSH19 0x5B4BCC600CA1083BAC15A2B3E9D6BEE1A29DF6 LOG3 DUP11 DUP13 CODESIZE 0xEA PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER DUP12 0xE0 SMOD SWAP13 MSTORE8 AND MSIZE EQ SGT DIFFICULTY 0xCD 0x1F 0xD0 LOG4 CALLCODE DUP5 NOT 0x49 PUSH32 0x9722A3DAAFE3B4186F6B6457E000000000000000000000000000000000000000 ","sourceMap":"731:36:22:-:0;235:885:166;731:36:22;;235:885:166;731:36:22;;;-1:-1:-1;;;731:36:22;;;;;;-1:-1:-1;;731:36:22;;:::i;:::-;-1:-1:-1;771:29:22;;;;;;;;;;;;;-1:-1:-1;;;771:29:22;;;;;;;;;;;;:::i;:::-;-1:-1:-1;804:26:22;;;-1:-1:-1;;804:26:22;828:2;804:26;;;575:182:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;873:6:11;:18;;-1:-1:-1;;;;;;873:18:11;678:10:4;873:18:11;;;;;;902:43;;678:10:4;;835:17:11;;-1:-1:-1;;;;;;;;;;;902:43:11;835:17;;902:43;-1:-1:-1;658:15:166;;;;:4;;:15;;;;;:::i;:::-;-1:-1:-1;679:19:166;;;;:6;;:19;;;;;:::i;:::-;-1:-1:-1;705:24:166;723:5;705:17;:24::i;:::-;-1:-1:-1;;735:10:166;:17;;-1:-1:-1;;;;735:17:166;-1:-1:-1;;;735:17:166;;;-1:-1:-1;235:885:166;;1875:226:11;1204:6;;-1:-1:-1;;;;;1204:6:11;678:10:4;1204:22:11;1196:67;;;;-1:-1:-1;;;1196:67:11;;1972:2:201;1196:67:11;;;1954:21:201;;;1991:18;;;1984:30;2050:34;2030:18;;;2023:62;2102:18;;1196:67:11;;;;;;;;;-1:-1:-1;;;;;1959:22:11;::::1;1951:73;;;::::0;-1:-1:-1;;;1951:73:11;;2333:2:201;1951:73:11::1;::::0;::::1;2315:21:201::0;2372:2;2352:18;;;2345:30;2411:34;2391:18;;;2384:62;-1:-1:-1;;;2462:18:201;;;2455:36;2508:19;;1951:73:11::1;2131:402:201::0;1951:73:11::1;2056:6;::::0;2035:38:::1;::::0;-1:-1:-1;;;;;2035:38:11;;::::1;::::0;2056:6:::1;::::0;-1:-1:-1;;;;;;;;;;;2035:38:11;2056:6:::1;::::0;2035:38:::1;2079:6;:17:::0;;-1:-1:-1;;;;;;2079:17:11::1;-1:-1:-1::0;;;;;2079:17:11;;;::::1;::::0;;;::::1;::::0;;1875:226::o;235:885:166:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;235:885:166;;;-1:-1:-1;235:885:166;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:127:201;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:885;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:201;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:201;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;730:3;725:2;720;712:6;708:15;704:24;701:33;698:53;;;747:1;744;737:12;698:53;769:1;760:10;;779:133;793:2;790:1;787:9;779:133;;;881:14;;;877:23;;871:30;850:14;;;846:23;;839:63;804:10;;;;779:133;;;930:2;927:1;924:9;921:80;;;989:1;984:2;979;971:6;967:15;963:24;956:35;921:80;1019:6;146:885;-1:-1:-1;;;;;;146:885:201:o;1036:729::-;1144:6;1152;1160;1213:2;1201:9;1192:7;1188:23;1184:32;1181:52;;;1229:1;1226;1219:12;1181:52;1256:16;;-1:-1:-1;;;;;1321:14:201;;;1318:34;;;1348:1;1345;1338:12;1318:34;1371:61;1424:7;1415:6;1404:9;1400:22;1371:61;:::i;:::-;1361:71;;1478:2;1467:9;1463:18;1457:25;1441:41;;1507:2;1497:8;1494:16;1491:36;;;1523:1;1520;1513:12;1491:36;;1546:63;1601:7;1590:8;1579:9;1575:24;1546:63;:::i;:::-;1652:2;1637:18;;1631:25;1536:73;;-1:-1:-1;1631:25:201;-1:-1:-1;;;;;;1685:31:201;;1675:42;;1665:70;;1731:1;1728;1721:12;1665:70;1754:5;1744:15;;;1036:729;;;;;:::o;2538:380::-;2617:1;2613:12;;;;2660;;;2681:61;;2735:4;2727:6;2723:17;2713:27;;2681:61;2788:2;2780:6;2777:14;2757:18;2754:38;2751:161;;;2834:10;2829:3;2825:20;2822:1;2815:31;2869:4;2866:1;2859:15;2897:4;2894:1;2887:15;2751:161;;2538:380;;;:::o;:::-;235:885:166;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_3035":{"entryPoint":null,"id":3035,"parameterSlots":0,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@allowance_3028":{"entryPoint":null,"id":3028,"parameterSlots":0,"returnSlots":0},"@approve_3131":{"entryPoint":1135,"id":3131,"parameterSlots":2,"returnSlots":1},"@balanceOf_3022":{"entryPoint":null,"id":3022,"parameterSlots":0,"returnSlots":0},"@decimals_2990":{"entryPoint":null,"id":2990,"parameterSlots":0,"returnSlots":0},"@deposit_3054":{"entryPoint":902,"id":3054,"parameterSlots":0,"returnSlots":0},"@isProtected_35234":{"entryPoint":null,"id":35234,"parameterSlots":0,"returnSlots":1},"@mint_35214":{"entryPoint":2165,"id":35214,"parameterSlots":2,"returnSlots":1},"@name_2984":{"entryPoint":993,"id":2984,"parameterSlots":0,"returnSlots":0},"@owner_1509":{"entryPoint":null,"id":1509,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_1544":{"entryPoint":2470,"id":1544,"parameterSlots":0,"returnSlots":0},"@setProtected_35226":{"entryPoint":1256,"id":35226,"parameterSlots":1,"returnSlots":0},"@symbol_2987":{"entryPoint":2710,"id":2987,"parameterSlots":0,"returnSlots":0},"@totalSupply_3103":{"entryPoint":null,"id":3103,"parameterSlots":0,"returnSlots":1},"@transferFrom_3227":{"entryPoint":1464,"id":3227,"parameterSlots":3,"returnSlots":1},"@transferOwnership_1572":{"entryPoint":2743,"id":1572,"parameterSlots":1,"returnSlots":0},"@transfer_3148":{"entryPoint":2723,"id":3148,"parameterSlots":2,"returnSlots":1},"@withdraw_3091":{"entryPoint":1999,"id":3091,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":3292,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":3494,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":3521,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":3409,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":3333,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool":{"entryPoint":3375,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":3469,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":3177,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":3619,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":3727,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":3643,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":3572,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:4840:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"135:535:201","statements":[{"nodeType":"YulVariableDeclaration","src":"145:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"155:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"149:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"173:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"184:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"166:6:201"},"nodeType":"YulFunctionCall","src":"166:21:201"},"nodeType":"YulExpressionStatement","src":"166:21:201"},{"nodeType":"YulVariableDeclaration","src":"196:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"216:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:201"},"nodeType":"YulFunctionCall","src":"210:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"200:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"243:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"254:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"239:3:201"},"nodeType":"YulFunctionCall","src":"239:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"259:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"232:6:201"},"nodeType":"YulFunctionCall","src":"232:34:201"},"nodeType":"YulExpressionStatement","src":"232:34:201"},{"nodeType":"YulVariableDeclaration","src":"275:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"284:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"279:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"344:90:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"373:9:201"},{"name":"i","nodeType":"YulIdentifier","src":"384:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"369:3:201"},"nodeType":"YulFunctionCall","src":"369:17:201"},{"kind":"number","nodeType":"YulLiteral","src":"388:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"365:3:201"},"nodeType":"YulFunctionCall","src":"365:26:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"407:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"415:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"403:3:201"},"nodeType":"YulFunctionCall","src":"403:14:201"},{"name":"_1","nodeType":"YulIdentifier","src":"419:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"399:3:201"},"nodeType":"YulFunctionCall","src":"399:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"393:5:201"},"nodeType":"YulFunctionCall","src":"393:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"358:6:201"},"nodeType":"YulFunctionCall","src":"358:66:201"},"nodeType":"YulExpressionStatement","src":"358:66:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"305:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"308:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"302:2:201"},"nodeType":"YulFunctionCall","src":"302:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"316:19:201","statements":[{"nodeType":"YulAssignment","src":"318:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"327:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"330:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"323:3:201"},"nodeType":"YulFunctionCall","src":"323:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"318:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"298:3:201","statements":[]},"src":"294:140:201"},{"body":{"nodeType":"YulBlock","src":"468:66:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"497:9:201"},{"name":"length","nodeType":"YulIdentifier","src":"508:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"493:3:201"},"nodeType":"YulFunctionCall","src":"493:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"517:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"489:3:201"},"nodeType":"YulFunctionCall","src":"489:31:201"},{"kind":"number","nodeType":"YulLiteral","src":"522:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"482:6:201"},"nodeType":"YulFunctionCall","src":"482:42:201"},"nodeType":"YulExpressionStatement","src":"482:42:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"449:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"452:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"446:2:201"},"nodeType":"YulFunctionCall","src":"446:13:201"},"nodeType":"YulIf","src":"443:91:201"},{"nodeType":"YulAssignment","src":"543:121:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"559:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"578:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"586:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"574:3:201"},"nodeType":"YulFunctionCall","src":"574:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"591:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"570:3:201"},"nodeType":"YulFunctionCall","src":"570:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"555:3:201"},"nodeType":"YulFunctionCall","src":"555:104:201"},{"kind":"number","nodeType":"YulLiteral","src":"661:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"551:3:201"},"nodeType":"YulFunctionCall","src":"551:113:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"543:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"104:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"115:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"126:4:201","type":""}],"src":"14:656:201"},{"body":{"nodeType":"YulBlock","src":"724:147:201","statements":[{"nodeType":"YulAssignment","src":"734:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"756:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"743:12:201"},"nodeType":"YulFunctionCall","src":"743:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"734:5:201"}]},{"body":{"nodeType":"YulBlock","src":"849:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"858:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"861:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"851:6:201"},"nodeType":"YulFunctionCall","src":"851:12:201"},"nodeType":"YulExpressionStatement","src":"851:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"785:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"796:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"803:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"792:3:201"},"nodeType":"YulFunctionCall","src":"792:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"782:2:201"},"nodeType":"YulFunctionCall","src":"782:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"775:6:201"},"nodeType":"YulFunctionCall","src":"775:73:201"},"nodeType":"YulIf","src":"772:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"703:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"714:5:201","type":""}],"src":"675:196:201"},{"body":{"nodeType":"YulBlock","src":"963:167:201","statements":[{"body":{"nodeType":"YulBlock","src":"1009:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1018:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1021:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1011:6:201"},"nodeType":"YulFunctionCall","src":"1011:12:201"},"nodeType":"YulExpressionStatement","src":"1011:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"984:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"993:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"980:3:201"},"nodeType":"YulFunctionCall","src":"980:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1005:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"976:3:201"},"nodeType":"YulFunctionCall","src":"976:32:201"},"nodeType":"YulIf","src":"973:52:201"},{"nodeType":"YulAssignment","src":"1034:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1063:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1044:18:201"},"nodeType":"YulFunctionCall","src":"1044:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1034:6:201"}]},{"nodeType":"YulAssignment","src":"1082:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1109:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1120:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1105:3:201"},"nodeType":"YulFunctionCall","src":"1105:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1092:12:201"},"nodeType":"YulFunctionCall","src":"1092:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1082:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"921:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"932:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"944:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"952:6:201","type":""}],"src":"876:254:201"},{"body":{"nodeType":"YulBlock","src":"1230:92:201","statements":[{"nodeType":"YulAssignment","src":"1240:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1252:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1263:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1248:3:201"},"nodeType":"YulFunctionCall","src":"1248:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1240:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1282:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1307:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1300:6:201"},"nodeType":"YulFunctionCall","src":"1300:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1293:6:201"},"nodeType":"YulFunctionCall","src":"1293:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1275:6:201"},"nodeType":"YulFunctionCall","src":"1275:41:201"},"nodeType":"YulExpressionStatement","src":"1275:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1199:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1210:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1221:4:201","type":""}],"src":"1135:187:201"},{"body":{"nodeType":"YulBlock","src":"1428:76:201","statements":[{"nodeType":"YulAssignment","src":"1438:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1450:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1461:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1446:3:201"},"nodeType":"YulFunctionCall","src":"1446:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1438:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1480:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"1491:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1473:6:201"},"nodeType":"YulFunctionCall","src":"1473:25:201"},"nodeType":"YulExpressionStatement","src":"1473:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1397:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1408:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1419:4:201","type":""}],"src":"1327:177:201"},{"body":{"nodeType":"YulBlock","src":"1576:206:201","statements":[{"body":{"nodeType":"YulBlock","src":"1622:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1631:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1634:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1624:6:201"},"nodeType":"YulFunctionCall","src":"1624:12:201"},"nodeType":"YulExpressionStatement","src":"1624:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1597:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1606:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1593:3:201"},"nodeType":"YulFunctionCall","src":"1593:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1618:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1589:3:201"},"nodeType":"YulFunctionCall","src":"1589:32:201"},"nodeType":"YulIf","src":"1586:52:201"},{"nodeType":"YulVariableDeclaration","src":"1647:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1673:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1660:12:201"},"nodeType":"YulFunctionCall","src":"1660:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1651:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1736:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1745:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1748:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1738:6:201"},"nodeType":"YulFunctionCall","src":"1738:12:201"},"nodeType":"YulExpressionStatement","src":"1738:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1705:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1726:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1719:6:201"},"nodeType":"YulFunctionCall","src":"1719:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1712:6:201"},"nodeType":"YulFunctionCall","src":"1712:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1702:2:201"},"nodeType":"YulFunctionCall","src":"1702:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1695:6:201"},"nodeType":"YulFunctionCall","src":"1695:40:201"},"nodeType":"YulIf","src":"1692:60:201"},{"nodeType":"YulAssignment","src":"1761:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1771:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1761:6:201"}]}]},"name":"abi_decode_tuple_t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1542:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1553:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1565:6:201","type":""}],"src":"1509:273:201"},{"body":{"nodeType":"YulBlock","src":"1891:224:201","statements":[{"body":{"nodeType":"YulBlock","src":"1937:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1946:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1949:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1939:6:201"},"nodeType":"YulFunctionCall","src":"1939:12:201"},"nodeType":"YulExpressionStatement","src":"1939:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1912:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1921:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1908:3:201"},"nodeType":"YulFunctionCall","src":"1908:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1933:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1904:3:201"},"nodeType":"YulFunctionCall","src":"1904:32:201"},"nodeType":"YulIf","src":"1901:52:201"},{"nodeType":"YulAssignment","src":"1962:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1991:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1972:18:201"},"nodeType":"YulFunctionCall","src":"1972:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1962:6:201"}]},{"nodeType":"YulAssignment","src":"2010:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2043:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2054:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2039:3:201"},"nodeType":"YulFunctionCall","src":"2039:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2020:18:201"},"nodeType":"YulFunctionCall","src":"2020:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2010:6:201"}]},{"nodeType":"YulAssignment","src":"2067:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2094:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2105:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2090:3:201"},"nodeType":"YulFunctionCall","src":"2090:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2077:12:201"},"nodeType":"YulFunctionCall","src":"2077:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2067:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1841:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1852:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1864:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1872:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1880:6:201","type":""}],"src":"1787:328:201"},{"body":{"nodeType":"YulBlock","src":"2190:110:201","statements":[{"body":{"nodeType":"YulBlock","src":"2236:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2245:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2248:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2238:6:201"},"nodeType":"YulFunctionCall","src":"2238:12:201"},"nodeType":"YulExpressionStatement","src":"2238:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2211:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2220:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2207:3:201"},"nodeType":"YulFunctionCall","src":"2207:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2232:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2203:3:201"},"nodeType":"YulFunctionCall","src":"2203:32:201"},"nodeType":"YulIf","src":"2200:52:201"},{"nodeType":"YulAssignment","src":"2261:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2284:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2271:12:201"},"nodeType":"YulFunctionCall","src":"2271:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2261:6:201"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2156:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2167:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2179:6:201","type":""}],"src":"2120:180:201"},{"body":{"nodeType":"YulBlock","src":"2402:87:201","statements":[{"nodeType":"YulAssignment","src":"2412:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2424:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2435:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2420:3:201"},"nodeType":"YulFunctionCall","src":"2420:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2412:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2454:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2469:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2477:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2465:3:201"},"nodeType":"YulFunctionCall","src":"2465:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2447:6:201"},"nodeType":"YulFunctionCall","src":"2447:36:201"},"nodeType":"YulExpressionStatement","src":"2447:36:201"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2371:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2382:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2393:4:201","type":""}],"src":"2305:184:201"},{"body":{"nodeType":"YulBlock","src":"2564:116:201","statements":[{"body":{"nodeType":"YulBlock","src":"2610:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2619:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2622:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2612:6:201"},"nodeType":"YulFunctionCall","src":"2612:12:201"},"nodeType":"YulExpressionStatement","src":"2612:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2585:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2594:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2581:3:201"},"nodeType":"YulFunctionCall","src":"2581:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2606:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2577:3:201"},"nodeType":"YulFunctionCall","src":"2577:32:201"},"nodeType":"YulIf","src":"2574:52:201"},{"nodeType":"YulAssignment","src":"2635:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2664:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2645:18:201"},"nodeType":"YulFunctionCall","src":"2645:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2635:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2530:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2541:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2553:6:201","type":""}],"src":"2494:186:201"},{"body":{"nodeType":"YulBlock","src":"2786:125:201","statements":[{"nodeType":"YulAssignment","src":"2796:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2808:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2819:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2804:3:201"},"nodeType":"YulFunctionCall","src":"2804:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2796:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2838:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2853:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2861:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2849:3:201"},"nodeType":"YulFunctionCall","src":"2849:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2831:6:201"},"nodeType":"YulFunctionCall","src":"2831:74:201"},"nodeType":"YulExpressionStatement","src":"2831:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2755:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2766:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2777:4:201","type":""}],"src":"2685:226:201"},{"body":{"nodeType":"YulBlock","src":"3003:173:201","statements":[{"body":{"nodeType":"YulBlock","src":"3049:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3058:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3061:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3051:6:201"},"nodeType":"YulFunctionCall","src":"3051:12:201"},"nodeType":"YulExpressionStatement","src":"3051:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3024:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3033:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3020:3:201"},"nodeType":"YulFunctionCall","src":"3020:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3045:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3016:3:201"},"nodeType":"YulFunctionCall","src":"3016:32:201"},"nodeType":"YulIf","src":"3013:52:201"},{"nodeType":"YulAssignment","src":"3074:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3103:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3084:18:201"},"nodeType":"YulFunctionCall","src":"3084:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3074:6:201"}]},{"nodeType":"YulAssignment","src":"3122:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3155:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3166:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3151:3:201"},"nodeType":"YulFunctionCall","src":"3151:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3132:18:201"},"nodeType":"YulFunctionCall","src":"3132:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3122:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2961:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2972:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2984:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2992:6:201","type":""}],"src":"2916:260:201"},{"body":{"nodeType":"YulBlock","src":"3213:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3230:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3233:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3223:6:201"},"nodeType":"YulFunctionCall","src":"3223:88:201"},"nodeType":"YulExpressionStatement","src":"3223:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3327:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3330:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3320:6:201"},"nodeType":"YulFunctionCall","src":"3320:15:201"},"nodeType":"YulExpressionStatement","src":"3320:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3351:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3354:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3344:6:201"},"nodeType":"YulFunctionCall","src":"3344:15:201"},"nodeType":"YulExpressionStatement","src":"3344:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"3181:184:201"},{"body":{"nodeType":"YulBlock","src":"3418:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"3445:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"3447:16:201"},"nodeType":"YulFunctionCall","src":"3447:18:201"},"nodeType":"YulExpressionStatement","src":"3447:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3434:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"3441:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"3437:3:201"},"nodeType":"YulFunctionCall","src":"3437:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3431:2:201"},"nodeType":"YulFunctionCall","src":"3431:13:201"},"nodeType":"YulIf","src":"3428:39:201"},{"nodeType":"YulAssignment","src":"3476:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3487:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"3490:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3483:3:201"},"nodeType":"YulFunctionCall","src":"3483:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"3476:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"3401:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"3404:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"3410:3:201","type":""}],"src":"3370:128:201"},{"body":{"nodeType":"YulBlock","src":"3558:382:201","statements":[{"nodeType":"YulAssignment","src":"3568:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3582:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"3585:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"3578:3:201"},"nodeType":"YulFunctionCall","src":"3578:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3568:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3599:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"3629:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"3635:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3625:3:201"},"nodeType":"YulFunctionCall","src":"3625:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"3603:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3676:31:201","statements":[{"nodeType":"YulAssignment","src":"3678:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3692:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3700:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3688:3:201"},"nodeType":"YulFunctionCall","src":"3688:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3678:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3656:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3649:6:201"},"nodeType":"YulFunctionCall","src":"3649:26:201"},"nodeType":"YulIf","src":"3646:61:201"},{"body":{"nodeType":"YulBlock","src":"3766:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3787:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3790:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3780:6:201"},"nodeType":"YulFunctionCall","src":"3780:88:201"},"nodeType":"YulExpressionStatement","src":"3780:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3888:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3891:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3881:6:201"},"nodeType":"YulFunctionCall","src":"3881:15:201"},"nodeType":"YulExpressionStatement","src":"3881:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3916:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3919:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3909:6:201"},"nodeType":"YulFunctionCall","src":"3909:15:201"},"nodeType":"YulExpressionStatement","src":"3909:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3722:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3745:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3753:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3742:2:201"},"nodeType":"YulFunctionCall","src":"3742:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3719:2:201"},"nodeType":"YulFunctionCall","src":"3719:38:201"},"nodeType":"YulIf","src":"3716:218:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"3538:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"3547:6:201","type":""}],"src":"3503:437:201"},{"body":{"nodeType":"YulBlock","src":"4119:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4136:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4147:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4129:6:201"},"nodeType":"YulFunctionCall","src":"4129:21:201"},"nodeType":"YulExpressionStatement","src":"4129:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4170:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4181:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4166:3:201"},"nodeType":"YulFunctionCall","src":"4166:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"4186:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4159:6:201"},"nodeType":"YulFunctionCall","src":"4159:30:201"},"nodeType":"YulExpressionStatement","src":"4159:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4209:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4220:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4205:3:201"},"nodeType":"YulFunctionCall","src":"4205:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"4225:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4198:6:201"},"nodeType":"YulFunctionCall","src":"4198:62:201"},"nodeType":"YulExpressionStatement","src":"4198:62:201"},{"nodeType":"YulAssignment","src":"4269:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4281:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4292:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4277:3:201"},"nodeType":"YulFunctionCall","src":"4277:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4269:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4096:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4110:4:201","type":""}],"src":"3945:356:201"},{"body":{"nodeType":"YulBlock","src":"4355:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"4377:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"4379:16:201"},"nodeType":"YulFunctionCall","src":"4379:18:201"},"nodeType":"YulExpressionStatement","src":"4379:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4371:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"4374:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4368:2:201"},"nodeType":"YulFunctionCall","src":"4368:8:201"},"nodeType":"YulIf","src":"4365:34:201"},{"nodeType":"YulAssignment","src":"4408:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4420:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"4423:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4416:3:201"},"nodeType":"YulFunctionCall","src":"4416:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"4408:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"4337:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"4340:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"4346:4:201","type":""}],"src":"4306:125:201"},{"body":{"nodeType":"YulBlock","src":"4610:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4627:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4638:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4620:6:201"},"nodeType":"YulFunctionCall","src":"4620:21:201"},"nodeType":"YulExpressionStatement","src":"4620:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4661:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4672:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4657:3:201"},"nodeType":"YulFunctionCall","src":"4657:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"4677:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4650:6:201"},"nodeType":"YulFunctionCall","src":"4650:30:201"},"nodeType":"YulExpressionStatement","src":"4650:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4700:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4711:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4696:3:201"},"nodeType":"YulFunctionCall","src":"4696:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"4716:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4689:6:201"},"nodeType":"YulFunctionCall","src":"4689:62:201"},"nodeType":"YulExpressionStatement","src":"4689:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4771:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4782:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4767:3:201"},"nodeType":"YulFunctionCall","src":"4767:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"4787:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4760:6:201"},"nodeType":"YulFunctionCall","src":"4760:36:201"},"nodeType":"YulExpressionStatement","src":"4760:36:201"},{"nodeType":"YulAssignment","src":"4805:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4817:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4828:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4813:3:201"},"nodeType":"YulFunctionCall","src":"4813:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4805:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4587:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4601:4:201","type":""}],"src":"4436:402:201"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(headStart, length), 64), 0)\n        }\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_bool(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"6080604052600436106101125760003560e01c80635300f82b116100a557806395d89b4111610074578063d0e30db011610059578063d0e30db014610326578063dd62ed3e1461032e578063f2fde38b1461036657600080fd5b806395d89b41146102f1578063a9059cbb1461030657600080fd5b80635300f82b1461024a57806370a082311461027a578063715018a6146102a75780638da5cb5b146102bc57600080fd5b806323b872dd116100e157806323b872dd146101be5780632e1a7d4d146101de578063313ce567146101fe57806340c10f191461022a57600080fd5b806306fdde0314610126578063095ea7b31461015157806318160ddd146101815780631c02bc311461019e57600080fd5b366101215761011f610386565b005b600080fd5b34801561013257600080fd5b5061013b6103e1565b6040516101489190610c69565b60405180910390f35b34801561015d57600080fd5b5061017161016c366004610d05565b61046f565b6040519015158152602001610148565b34801561018d57600080fd5b50475b604051908152602001610148565b3480156101aa57600080fd5b5061011f6101b9366004610d2f565b6104e8565b3480156101ca57600080fd5b506101716101d9366004610d51565b6105b8565b3480156101ea57600080fd5b5061011f6101f9366004610d8d565b6107cf565b34801561020a57600080fd5b506002546102189060ff1681565b60405160ff9091168152602001610148565b34801561023657600080fd5b50610171610245366004610d05565b610875565b34801561025657600080fd5b5060055474010000000000000000000000000000000000000000900460ff16610171565b34801561028657600080fd5b50610190610295366004610da6565b60036020526000908152604090205481565b3480156102b357600080fd5b5061011f6109a6565b3480156102c857600080fd5b5060055460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610148565b3480156102fd57600080fd5b5061013b610a96565b34801561031257600080fd5b50610171610321366004610d05565b610aa3565b61011f610386565b34801561033a57600080fd5b50610190610349366004610dc1565b600460209081526000928352604080842090915290825290205481565b34801561037257600080fd5b5061011f610381366004610da6565b610ab7565b33600090815260036020526040812080543492906103a5908490610e23565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546103ee90610e3b565b80601f016020809104026020016040519081016040528092919081815260200182805461041a90610e3b565b80156104675780601f1061043c57610100808354040283529160200191610467565b820191906000526020600020905b81548152906001019060200180831161044a57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104d79086815260200190565b60405180910390a350600192915050565b60055473ffffffffffffffffffffffffffffffffffffffff16331461056e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6005805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548211156105ea57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84163314801590610660575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156106e85773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156106a257600080fd5b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152812080548492906106e2908490610e8f565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061071d908490610e8f565b909155505073ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081208054849290610757908490610e23565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107bd91815260200190565b60405180910390a35060019392505050565b336000908152600360205260409020548111156107eb57600080fd5b336000908152600360205260408120805483929061080a908490610e8f565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561083c573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b60055460009074010000000000000000000000000000000000000000900460ff161515600114156109215760055473ffffffffffffffffffffffffffffffffffffffff163314610921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610565565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081208054849290610956908490610e23565b909155505060405182815273ffffffffffffffffffffffffffffffffffffffff8416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016104d7565b60055473ffffffffffffffffffffffffffffffffffffffff163314610a27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610565565b60055460405160009173ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b600180546103ee90610e3b565b6000610ab03384846105b8565b9392505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610b38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610565565b73ffffffffffffffffffffffffffffffffffffffff8116610bdb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610565565b60055460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600060208083528351808285015260005b81811015610c9657858101830151858201604001528201610c7a565b81811115610ca8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610d0057600080fd5b919050565b60008060408385031215610d1857600080fd5b610d2183610cdc565b946020939093013593505050565b600060208284031215610d4157600080fd5b81358015158114610ab057600080fd5b600080600060608486031215610d6657600080fd5b610d6f84610cdc565b9250610d7d60208501610cdc565b9150604084013590509250925092565b600060208284031215610d9f57600080fd5b5035919050565b600060208284031215610db857600080fd5b610ab082610cdc565b60008060408385031215610dd457600080fd5b610ddd83610cdc565b9150610deb60208401610cdc565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610e3657610e36610df4565b500190565b600181811c90821680610e4f57607f821691505b60208210811415610e89577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082821015610ea157610ea1610df4565b50039056fea26469706673582212201b95fd02a551bd725b4bcc600ca1083bac15a2b3e9d6bee1a29df6a38a8c38ea64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x112 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5300F82B GT PUSH2 0xA5 JUMPI DUP1 PUSH4 0x95D89B41 GT PUSH2 0x74 JUMPI DUP1 PUSH4 0xD0E30DB0 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xD0E30DB0 EQ PUSH2 0x326 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x32E JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x366 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x2F1 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x306 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5300F82B EQ PUSH2 0x24A JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x27A JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0xE1 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1BE JUMPI DUP1 PUSH4 0x2E1A7D4D EQ PUSH2 0x1DE JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1FE JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x22A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x126 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x151 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x181 JUMPI DUP1 PUSH4 0x1C02BC31 EQ PUSH2 0x19E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0x121 JUMPI PUSH2 0x11F PUSH2 0x386 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x132 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13B PUSH2 0x3E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x148 SWAP2 SWAP1 PUSH2 0xC69 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x15D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x171 PUSH2 0x16C CALLDATASIZE PUSH1 0x4 PUSH2 0xD05 JUMP JUMPDEST PUSH2 0x46F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x148 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SELFBALANCE JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x148 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11F PUSH2 0x1B9 CALLDATASIZE PUSH1 0x4 PUSH2 0xD2F JUMP JUMPDEST PUSH2 0x4E8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x171 PUSH2 0x1D9 CALLDATASIZE PUSH1 0x4 PUSH2 0xD51 JUMP JUMPDEST PUSH2 0x5B8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11F PUSH2 0x1F9 CALLDATASIZE PUSH1 0x4 PUSH2 0xD8D JUMP JUMPDEST PUSH2 0x7CF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x20A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x218 SWAP1 PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x148 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x236 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x171 PUSH2 0x245 CALLDATASIZE PUSH1 0x4 PUSH2 0xD05 JUMP JUMPDEST PUSH2 0x875 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x5 SLOAD PUSH21 0x10000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x171 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x286 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x190 PUSH2 0x295 CALLDATASIZE PUSH1 0x4 PUSH2 0xDA6 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11F PUSH2 0x9A6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x148 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13B PUSH2 0xA96 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x312 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x171 PUSH2 0x321 CALLDATASIZE PUSH1 0x4 PUSH2 0xD05 JUMP JUMPDEST PUSH2 0xAA3 JUMP JUMPDEST PUSH2 0x11F PUSH2 0x386 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x33A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x190 PUSH2 0x349 CALLDATASIZE PUSH1 0x4 PUSH2 0xDC1 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x372 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x11F PUSH2 0x381 CALLDATASIZE PUSH1 0x4 PUSH2 0xDA6 JUMP JUMPDEST PUSH2 0xAB7 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD CALLVALUE SWAP3 SWAP1 PUSH2 0x3A5 SWAP1 DUP5 SWAP1 PUSH2 0xE23 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD CALLVALUE DUP2 MSTORE CALLER SWAP1 PUSH32 0xE1FFFCC4923D04B559F4D29A8BFC6CDA04EB5B0D3C460751C2402C5C5CC9109C SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x3EE SWAP1 PUSH2 0xE3B JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x41A SWAP1 PUSH2 0xE3B JUMP JUMPDEST DUP1 ISZERO PUSH2 0x467 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x43C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x467 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 0x44A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP6 SWAP1 SSTORE MLOAD SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x4D7 SWAP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x56E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x5 DUP1 SLOAD SWAP2 ISZERO ISZERO PUSH21 0x10000000000000000000000000000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x5EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND CALLER EQ DUP1 ISZERO SWAP1 PUSH2 0x660 JUMPI POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EQ ISZERO JUMPDEST ISZERO PUSH2 0x6E8 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD DUP3 GT ISZERO PUSH2 0x6A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x6E2 SWAP1 DUP5 SWAP1 PUSH2 0xE8F JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x71D SWAP1 DUP5 SWAP1 PUSH2 0xE8F JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x757 SWAP1 DUP5 SWAP1 PUSH2 0xE23 JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP5 PUSH1 0x40 MLOAD PUSH2 0x7BD SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT ISZERO PUSH2 0x7EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP3 SWAP1 PUSH2 0x80A SWAP1 DUP5 SWAP1 PUSH2 0xE8F JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD CALLER SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x83C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD DUP2 DUP2 MSTORE CALLER SWAP1 PUSH32 0x7FCF532C15F0A6DB0BD6D0E038BEA71D30D808C7D98CB3BF7268A95BF5081B65 SWAP1 PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x0 SWAP1 PUSH21 0x10000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x1 EQ ISZERO PUSH2 0x921 JUMPI PUSH1 0x5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x921 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x565 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP5 SWAP3 SWAP1 PUSH2 0x956 SWAP1 DUP5 SWAP1 PUSH2 0xE23 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH1 0x0 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH1 0x20 ADD PUSH2 0x4D7 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xA27 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x565 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x5 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH2 0x3EE SWAP1 PUSH2 0xE3B JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAB0 CALLER DUP5 DUP5 PUSH2 0x5B8 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xB38 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x565 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xBDB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x565 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND SWAP3 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH1 0x5 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC96 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0xC7A JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xCA8 JUMPI PUSH1 0x0 PUSH1 0x40 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x40 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xD00 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xD18 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD21 DUP4 PUSH2 0xCDC 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 0xD41 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xAB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xD66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD6F DUP5 PUSH2 0xCDC JUMP JUMPDEST SWAP3 POP PUSH2 0xD7D PUSH1 0x20 DUP6 ADD PUSH2 0xCDC JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xDB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAB0 DUP3 PUSH2 0xCDC JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xDD4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDDD DUP4 PUSH2 0xCDC JUMP JUMPDEST SWAP2 POP PUSH2 0xDEB PUSH1 0x20 DUP5 ADD PUSH2 0xCDC JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0xE36 JUMPI PUSH2 0xE36 PUSH2 0xDF4 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0xE4F JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0xE89 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0xEA1 JUMPI PUSH2 0xEA1 PUSH2 0xDF4 JUMP JUMPDEST POP SUB SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHL SWAP6 REVERT MUL 0xA5 MLOAD 0xBD PUSH19 0x5B4BCC600CA1083BAC15A2B3E9D6BEE1A29DF6 LOG3 DUP11 DUP13 CODESIZE 0xEA PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"235:885:166:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1237:9:22;:7;:9::i;:::-;235:885:166;;;;;731:36:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1676:166;;;;;;;;;;-1:-1:-1;1676:166:22;;;;;:::i;:::-;;:::i;:::-;;;1300:14:201;;1293:22;1275:41;;1263:2;1248:18;1676:166:22;1135:187:201;1580:92:22;;;;;;;;;;-1:-1:-1;1646:21:22;1580:92;;;1473:25:201;;;1461:2;1446:18;1580:92:22;1327:177:201;956:80:166;;;;;;;;;;-1:-1:-1;956:80:166;;;;;:::i;:::-;;:::i;1968:410:22:-;;;;;;;;;;-1:-1:-1;1968:410:22;;;;;:::i;:::-;;:::i;1379:197::-;;;;;;;;;;-1:-1:-1;1379:197:22;;;;;:::i;:::-;;:::i;804:26::-;;;;;;;;;;-1:-1:-1;804:26:22;;;;;;;;;;;2477:4:201;2465:17;;;2447:36;;2435:2;2420:18;804:26:22;2305:184:201;761:191:166;;;;;;;;;;-1:-1:-1;761:191:166;;;;;:::i;:::-;;:::i;1040:78::-;;;;;;;;;;-1:-1:-1;1103:10:166;;;;;;;1040:78;;1087:44:22;;;;;;;;;;-1:-1:-1;1087:44:22;;;;;:::i;:::-;;;;;;;;;;;;;;1601:135:11;;;;;;;;;;;;;:::i;1018:71::-;;;;;;;;;;-1:-1:-1;1078:6:11;;1018:71;;1078:6;;;;2831:74:201;;2819:2;2804:18;1018:71:11;2685:226:201;771:29:22;;;;;;;;;;;;;:::i;1846:118::-;;;;;;;;;;-1:-1:-1;1846:118:22;;;;;:::i;:::-;;:::i;1255:120::-;;;:::i;1135:64::-;;;;;;;;;;-1:-1:-1;1135:64:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1875:226:11;;;;;;;;;;-1:-1:-1;1875:226:11;;;;;:::i;:::-;;:::i;1255:120:22:-;1305:10;1295:21;;;;:9;:21;;;;;:34;;1320:9;;1295:21;:34;;1320:9;;1295:34;:::i;:::-;;;;-1:-1:-1;;1340:30:22;;1360:9;1473:25:201;;1348:10:22;;1340:30;;1461:2:201;1446:18;1340:30:22;;;;;;;1255:120::o;731:36::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1676:166::-;1757:10;1735:4;1747:21;;;:9;:21;;;;;;;;;:26;;;;;;;;;;:32;;;1790:30;1735:4;;1747:26;;1790:30;;;;1776:3;1473:25:201;;1461:2;1446:18;;1327:177;1790:30:22;;;;;;;;-1:-1:-1;1833:4:22;1676:166;;;;:::o;956:80:166:-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;4147:2:201;1196:67:11;;;4129:21:201;;;4166:18;;;4159:30;4225:34;4205:18;;;4198:62;4277:18;;1196:67:11;;;;;;;;;1013:10:166::1;:18:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;956:80::o;1968:410:22:-;2065:14;;;2045:4;2065:14;;;:9;:14;;;;;;:21;-1:-1:-1;2065:21:22;2057:30;;;;;;2098:17;;;2105:10;2098:17;;;;:68;;-1:-1:-1;2119:14:22;;;;;;;:9;:14;;;;;;;;2134:10;2119:26;;;;;;;;2149:17;2119:47;;2098:68;2094:172;;;2184:14;;;;;;;:9;:14;;;;;;;;2199:10;2184:26;;;;;;;;:33;-1:-1:-1;2184:33:22;2176:42;;;;;;2226:14;;;;;;;:9;:14;;;;;;;;2241:10;2226:26;;;;;;;:33;;2256:3;;2226:14;:33;;2256:3;;2226:33;:::i;:::-;;;;-1:-1:-1;;2094:172:22;2272:14;;;;;;;:9;:14;;;;;:21;;2290:3;;2272:14;:21;;2290:3;;2272:21;:::i;:::-;;;;-1:-1:-1;;2299:14:22;;;;;;;:9;:14;;;;;:21;;2317:3;;2299:14;:21;;2317:3;;2299:21;:::i;:::-;;;;;;;;2346:3;2332:23;;2341:3;2332:23;;;2351:3;2332:23;;;;1473:25:201;;1461:2;1446:18;;1327:177;2332:23:22;;;;;;;;-1:-1:-1;2369:4:22;1968:410;;;;;:::o;1379:197::-;1441:10;1431:21;;;;:9;:21;;;;;;:28;-1:-1:-1;1431:28:22;1423:37;;;;;;1476:10;1466:21;;;;:9;:21;;;;;:28;;1491:3;;1466:21;:28;;1491:3;;1466:28;:::i;:::-;;;;-1:-1:-1;;1500:33:22;;1508:10;;1500:33;;;;;1529:3;;1500:33;;;;1529:3;1508:10;1500:33;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1544:27:22;;1473:25:201;;;1555:10:22;;1544:27;;1461:2:201;1446:18;1544:27:22;;;;;;;1379:197;:::o;761:191:166:-;457:10;;844:4;;457:10;;;;;:18;;471:4;457:18;453:107;;;1078:6:11;;493:23:166;1078:6:11;678:10:4;493:23:166;485:68;;;;;;;4147:2:201;485:68:166;;;4129:21:201;;;4166:18;;;4159:30;4225:34;4205:18;;;4198:62;4277:18;;485:68:166;3945:356:201;485:68:166;856:18:::1;::::0;::::1;;::::0;;;:9:::1;:18;::::0;;;;:27;;878:5;;856:18;:27:::1;::::0;878:5;;856:27:::1;:::i;:::-;::::0;;;-1:-1:-1;;894:36:166::1;::::0;1473:25:201;;;894:36:166::1;::::0;::::1;::::0;911:1:::1;::::0;894:36:::1;::::0;1461:2:201;1446:18;894:36:166::1;1327:177:201::0;1601:135:11;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;4147:2:201;1196:67:11;;;4129:21:201;;;4166:18;;;4159:30;4225:34;4205:18;;;4198:62;4277:18;;1196:67:11;3945:356:201;1196:67:11;1687:6:::1;::::0;1666:40:::1;::::0;1703:1:::1;::::0;1666:40:::1;1687:6;::::0;1666:40:::1;::::0;1703:1;;1666:40:::1;1712:6;:19:::0;;;::::1;::::0;;1601:135::o;771:29:22:-;;;;;;;:::i;1846:118::-;1906:4;1925:34;1938:10;1950:3;1955;1925:12;:34::i;:::-;1918:41;1846:118;-1:-1:-1;;;1846:118:22:o;1875:226:11:-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;4147:2:201;1196:67:11;;;4129:21:201;;;4166:18;;;4159:30;4225:34;4205:18;;;4198:62;4277:18;;1196:67:11;3945:356:201;1196:67:11;1959:22:::1;::::0;::::1;1951:73;;;::::0;::::1;::::0;;4638:2:201;1951:73:11::1;::::0;::::1;4620:21:201::0;4677:2;4657:18;;;4650:30;4716:34;4696:18;;;4689:62;4787:8;4767:18;;;4760:36;4813:19;;1951:73:11::1;4436:402:201::0;1951:73:11::1;2056:6;::::0;2035:38:::1;::::0;::::1;::::0;;::::1;::::0;2056:6:::1;::::0;2035:38:::1;::::0;2056:6:::1;::::0;2035:38:::1;2079:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1875:226::o;14:656:201:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;586:2:201;574:15;591:66;570:88;555:104;;;;661:2;551:113;;14:656;-1:-1:-1;;;14:656:201:o;675:196::-;743:20;;803:42;792:54;;782:65;;772:93;;861:1;858;851:12;772:93;675:196;;;:::o;876:254::-;944:6;952;1005:2;993:9;984:7;980:23;976:32;973:52;;;1021:1;1018;1011:12;973:52;1044:29;1063:9;1044:29;:::i;:::-;1034:39;1120:2;1105:18;;;;1092:32;;-1:-1:-1;;;876:254:201:o;1509:273::-;1565:6;1618:2;1606:9;1597:7;1593:23;1589:32;1586:52;;;1634:1;1631;1624:12;1586:52;1673:9;1660:23;1726:5;1719:13;1712:21;1705:5;1702:32;1692:60;;1748:1;1745;1738:12;1787:328;1864:6;1872;1880;1933:2;1921:9;1912:7;1908:23;1904:32;1901:52;;;1949:1;1946;1939:12;1901:52;1972:29;1991:9;1972:29;:::i;:::-;1962:39;;2020:38;2054:2;2043:9;2039:18;2020:38;:::i;:::-;2010:48;;2105:2;2094:9;2090:18;2077:32;2067:42;;1787:328;;;;;:::o;2120:180::-;2179:6;2232:2;2220:9;2211:7;2207:23;2203:32;2200:52;;;2248:1;2245;2238:12;2200:52;-1:-1:-1;2271:23:201;;2120:180;-1:-1:-1;2120:180:201:o;2494:186::-;2553:6;2606:2;2594:9;2585:7;2581:23;2577:32;2574:52;;;2622:1;2619;2612:12;2574:52;2645:29;2664:9;2645:29;:::i;2916:260::-;2984:6;2992;3045:2;3033:9;3024:7;3020:23;3016:32;3013:52;;;3061:1;3058;3051:12;3013:52;3084:29;3103:9;3084:29;:::i;:::-;3074:39;;3132:38;3166:2;3155:9;3151:18;3132:38;:::i;:::-;3122:48;;2916:260;;;;;:::o;3181:184::-;3233:77;3230:1;3223:88;3330:4;3327:1;3320:15;3354:4;3351:1;3344:15;3370:128;3410:3;3441:1;3437:6;3434:1;3431:13;3428:39;;;3447:18;;:::i;:::-;-1:-1:-1;3483:9:201;;3370:128::o;3503:437::-;3582:1;3578:12;;;;3625;;;3646:61;;3700:4;3692:6;3688:17;3678:27;;3646:61;3753:2;3745:6;3742:14;3722:18;3719:38;3716:218;;;3790:77;3787:1;3780:88;3891:4;3888:1;3881:15;3919:4;3916:1;3909:15;3716:218;;3503:437;;;:::o;4306:125::-;4346:4;4374:1;4371;4368:8;4365:34;;;4379:18;;:::i;:::-;-1:-1:-1;4416:9:201;;4306:125::o"},"gasEstimates":{"creation":{"codeDepositCost":"760800","executionCost":"infinite","totalCost":"infinite"},"external":{"allowance(address,address)":"infinite","approve(address,uint256)":"24521","balanceOf(address)":"2552","decimals()":"2380","deposit()":"25965","isProtected()":"2338","mint(address,uint256)":"30964","name()":"infinite","owner()":"2378","renounceOwnership()":"30190","setProtected(bool)":"26723","symbol()":"infinite","totalSupply()":"251","transfer(address,uint256)":"53342","transferFrom(address,address,uint256)":"infinite","transferOwnership(address)":"30413","withdraw(uint256)":"infinite"}},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","deposit()":"d0e30db0","isProtected()":"5300f82b","mint(address,uint256)":"40c10f19","name()":"06fdde03","owner()":"8da5cb5b","renounceOwnership()":"715018a6","setProtected(bool)":"1c02bc31","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOwnership(address)":"f2fde38b","withdraw(uint256)":"2e1a7d4d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"mockName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"mockSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isProtected\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"mint\",\"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\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"state\",\"type\":\"bool\"}],\"name\":\"setProtected\",\"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\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/WETH9Mock.sol\":\"WETH9Mock\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable is Context {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial owner.\\n   */\\n  constructor() {\\n    address msgSender = _msgSender();\\n    _owner = msgSender;\\n    emit OwnershipTransferred(address(0), msgSender);\\n  }\\n\\n  /**\\n   * @dev Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Leaves the contract without owner. It will not be possible to call\\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\\n   *\\n   * NOTE: Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public virtual onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = address(0);\\n  }\\n\\n  /**\\n   * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function transferOwnership(address newOwner) public virtual onlyOwner {\\n    require(newOwner != address(0), 'Ownable: new owner is the zero address');\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\",\"keccak256\":\"0x3ce185c4f579e32006f8893dbfdc1b5d878c0e2cafd1508f7ceb081698bc81f9\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/weth/WETH9.sol\":{\"content\":\"// Copyright (C) 2015, 2016, 2017 Dapphub\\n\\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 <http://www.gnu.org/licenses/>.\\n\\npragma solidity ^0.8.10;\\n\\ncontract WETH9 {\\n  string public name = 'Wrapped Ether';\\n  string public symbol = 'WETH';\\n  uint8 public decimals = 18;\\n\\n  event Approval(address indexed src, address indexed guy, uint256 wad);\\n  event Transfer(address indexed src, address indexed dst, uint256 wad);\\n  event Deposit(address indexed dst, uint256 wad);\\n  event Withdrawal(address indexed src, uint256 wad);\\n\\n  mapping(address => uint256) public balanceOf;\\n  mapping(address => mapping(address => uint256)) public allowance;\\n\\n  receive() external payable {\\n    deposit();\\n  }\\n\\n  function deposit() public payable {\\n    balanceOf[msg.sender] += msg.value;\\n    emit Deposit(msg.sender, msg.value);\\n  }\\n\\n  function withdraw(uint256 wad) public {\\n    require(balanceOf[msg.sender] >= wad);\\n    balanceOf[msg.sender] -= wad;\\n    payable(msg.sender).transfer(wad);\\n    emit Withdrawal(msg.sender, wad);\\n  }\\n\\n  function totalSupply() public view returns (uint256) {\\n    return address(this).balance;\\n  }\\n\\n  function approve(address guy, uint256 wad) public returns (bool) {\\n    allowance[msg.sender][guy] = wad;\\n    emit Approval(msg.sender, guy, wad);\\n    return true;\\n  }\\n\\n  function transfer(address dst, uint256 wad) public returns (bool) {\\n    return transferFrom(msg.sender, dst, wad);\\n  }\\n\\n  function transferFrom(address src, address dst, uint256 wad) public returns (bool) {\\n    require(balanceOf[src] >= wad);\\n\\n    if (src != msg.sender && allowance[src][msg.sender] != type(uint256).max) {\\n      require(allowance[src][msg.sender] >= wad);\\n      allowance[src][msg.sender] -= wad;\\n    }\\n\\n    balanceOf[src] -= wad;\\n    balanceOf[dst] += wad;\\n\\n    emit Transfer(src, dst, wad);\\n\\n    return true;\\n  }\\n}\\n\\n/*\\n                    GNU GENERAL PUBLIC LICENSE\\n                       Version 3, 29 June 2007\\n\\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\\n Everyone is permitted to copy and distribute verbatim copies\\n of this license document, but changing it is not allowed.\\n\\n                            Preamble\\n\\n  The GNU General Public License is a free, copyleft license for\\nsoftware and other kinds of works.\\n\\n  The licenses for most software and other practical works are designed\\nto take away your freedom to share and change the works.  By contrast,\\nthe GNU General Public License is intended to guarantee your freedom to\\nshare and change all versions of a program--to make sure it remains free\\nsoftware for all its users.  We, the Free Software Foundation, use the\\nGNU General Public License for most of our software; it applies also to\\nany other work released this way by its authors.  You can apply it to\\nyour programs, too.\\n\\n  When we speak of free software, we are referring to freedom, not\\nprice.  Our General Public Licenses are designed to make sure that you\\nhave the freedom to distribute copies of free software (and charge for\\nthem if you wish), that you receive source code or can get it if you\\nwant it, that you can change the software or use pieces of it in new\\nfree programs, and that you know you can do these things.\\n\\n  To protect your rights, we need to prevent others from denying you\\nthese rights or asking you to surrender the rights.  Therefore, you have\\ncertain responsibilities if you distribute copies of the software, or if\\nyou modify it: responsibilities to respect the freedom of others.\\n\\n  For example, if you distribute copies of such a program, whether\\ngratis or for a fee, you must pass on to the recipients the same\\nfreedoms that you received.  You must make sure that they, too, receive\\nor can get the source code.  And you must show them these terms so they\\nknow their rights.\\n\\n  Developers that use the GNU GPL protect your rights with two steps:\\n(1) assert copyright on the software, and (2) offer you this License\\ngiving you legal permission to copy, distribute and/or modify it.\\n\\n  For the developers' and authors' protection, the GPL clearly explains\\nthat there is no warranty for this free software.  For both users' and\\nauthors' sake, the GPL requires that modified versions be marked as\\nchanged, so that their problems will not be attributed erroneously to\\nauthors of previous versions.\\n\\n  Some devices are designed to deny users access to install or run\\nmodified versions of the software inside them, although the manufacturer\\ncan do so.  This is fundamentally incompatible with the aim of\\nprotecting users' freedom to change the software.  The systematic\\npattern of such abuse occurs in the area of products for individuals to\\nuse, which is precisely where it is most unacceptable.  Therefore, we\\nhave designed this version of the GPL to prohibit the practice for those\\nproducts.  If such problems arise substantially in other domains, we\\nstand ready to extend this provision to those domains in future versions\\nof the GPL, as needed to protect the freedom of users.\\n\\n  Finally, every program is threatened constantly by software patents.\\nStates should not allow patents to restrict development and use of\\nsoftware on general-purpose computers, but in those that do, we wish to\\navoid the special danger that patents applied to a free program could\\nmake it effectively proprietary.  To prevent this, the GPL assures that\\npatents cannot be used to render the program non-free.\\n\\n  The precise terms and conditions for copying, distribution and\\nmodification follow.\\n\\n                       TERMS AND CONDITIONS\\n\\n  0. Definitions.\\n\\n  \\\"This License\\\" refers to version 3 of the GNU General Public License.\\n\\n  \\\"Copyright\\\" also means copyright-like laws that apply to other kinds of\\nworks, such as semiconductor masks.\\n\\n  \\\"The Program\\\" refers to any copyrightable work licensed under this\\nLicense.  Each licensee is addressed as \\\"you\\\".  \\\"Licensees\\\" and\\n\\\"recipients\\\" may be individuals or organizations.\\n\\n  To \\\"modify\\\" a work means to copy from or adapt all or part of the work\\nin a fashion requiring copyright permission, other than the making of an\\nexact copy.  The resulting work is called a \\\"modified version\\\" of the\\nearlier work or a work \\\"based on\\\" the earlier work.\\n\\n  A \\\"covered work\\\" means either the unmodified Program or a work based\\non the Program.\\n\\n  To \\\"propagate\\\" a work means to do anything with it that, without\\npermission, would make you directly or secondarily liable for\\ninfringement under applicable copyright law, except executing it on a\\ncomputer or modifying a private copy.  Propagation includes copying,\\ndistribution (with or without modification), making available to the\\npublic, and in some countries other activities as well.\\n\\n  To \\\"convey\\\" a work means any kind of propagation that enables other\\nparties to make or receive copies.  Mere interaction with a user through\\na computer network, with no transfer of a copy, is not conveying.\\n\\n  An interactive user interface displays \\\"Appropriate Legal Notices\\\"\\nto the extent that it includes a convenient and prominently visible\\nfeature that (1) displays an appropriate copyright notice, and (2)\\ntells the user that there is no warranty for the work (except to the\\nextent that warranties are provided), that licensees may convey the\\nwork under this License, and how to view a copy of this License.  If\\nthe interface presents a list of user commands or options, such as a\\nmenu, a prominent item in the list meets this criterion.\\n\\n  1. Source Code.\\n\\n  The \\\"source code\\\" for a work means the preferred form of the work\\nfor making modifications to it.  \\\"Object code\\\" means any non-source\\nform of a work.\\n\\n  A \\\"Standard Interface\\\" means an interface that either is an official\\nstandard defined by a recognized standards body, or, in the case of\\ninterfaces specified for a particular programming language, one that\\nis widely used among developers working in that language.\\n\\n  The \\\"System Libraries\\\" of an executable work include anything, other\\nthan the work as a whole, that (a) is included in the normal form of\\npackaging a Major Component, but which is not part of that Major\\nComponent, and (b) serves only to enable use of the work with that\\nMajor Component, or to implement a Standard Interface for which an\\nimplementation is available to the public in source code form.  A\\n\\\"Major Component\\\", in this context, means a major essential component\\n(kernel, window system, and so on) of the specific operating system\\n(if any) on which the executable work runs, or a compiler used to\\nproduce the work, or an object code interpreter used to run it.\\n\\n  The \\\"Corresponding Source\\\" for a work in object code form means all\\nthe source code needed to generate, install, and (for an executable\\nwork) run the object code and to modify the work, including scripts to\\ncontrol those activities.  However, it does not include the work's\\nSystem Libraries, or general-purpose tools or generally available free\\nprograms which are used unmodified in performing those activities but\\nwhich are not part of the work.  For example, Corresponding Source\\nincludes interface definition files associated with source files for\\nthe work, and the source code for shared libraries and dynamically\\nlinked subprograms that the work is specifically designed to require,\\nsuch as by intimate data communication or control flow between those\\nsubprograms and other parts of the work.\\n\\n  The Corresponding Source need not include anything that users\\ncan regenerate automatically from other parts of the Corresponding\\nSource.\\n\\n  The Corresponding Source for a work in source code form is that\\nsame work.\\n\\n  2. Basic Permissions.\\n\\n  All rights granted under this License are granted for the term of\\ncopyright on the Program, and are irrevocable provided the stated\\nconditions are met.  This License explicitly affirms your unlimited\\npermission to run the unmodified Program.  The output from running a\\ncovered work is covered by this License only if the output, given its\\ncontent, constitutes a covered work.  This License acknowledges your\\nrights of fair use or other equivalent, as provided by copyright law.\\n\\n  You may make, run and propagate covered works that you do not\\nconvey, without conditions so long as your license otherwise remains\\nin force.  You may convey covered works to others for the sole purpose\\nof having them make modifications exclusively for you, or provide you\\nwith facilities for running those works, provided that you comply with\\nthe terms of this License in conveying all material for which you do\\nnot control copyright.  Those thus making or running the covered works\\nfor you must do so exclusively on your behalf, under your direction\\nand control, on terms that prohibit them from making any copies of\\nyour copyrighted material outside their relationship with you.\\n\\n  Conveying under any other circumstances is permitted solely under\\nthe conditions stated below.  Sublicensing is not allowed; section 10\\nmakes it unnecessary.\\n\\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\\n\\n  No covered work shall be deemed part of an effective technological\\nmeasure under any applicable law fulfilling obligations under article\\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\\nsimilar laws prohibiting or restricting circumvention of such\\nmeasures.\\n\\n  When you convey a covered work, you waive any legal power to forbid\\ncircumvention of technological measures to the extent such circumvention\\nis effected by exercising rights under this License with respect to\\nthe covered work, and you disclaim any intention to limit operation or\\nmodification of the work as a means of enforcing, against the work's\\nusers, your or third parties' legal rights to forbid circumvention of\\ntechnological measures.\\n\\n  4. Conveying Verbatim Copies.\\n\\n  You may convey verbatim copies of the Program's source code as you\\nreceive it, in any medium, provided that you conspicuously and\\nappropriately publish on each copy an appropriate copyright notice;\\nkeep intact all notices stating that this License and any\\nnon-permissive terms added in accord with section 7 apply to the code;\\nkeep intact all notices of the absence of any warranty; and give all\\nrecipients a copy of this License along with the Program.\\n\\n  You may charge any price or no price for each copy that you convey,\\nand you may offer support or warranty protection for a fee.\\n\\n  5. Conveying Modified Source Versions.\\n\\n  You may convey a work based on the Program, or the modifications to\\nproduce it from the Program, in the form of source code under the\\nterms of section 4, provided that you also meet all of these conditions:\\n\\n    a) The work must carry prominent notices stating that you modified\\n    it, and giving a relevant date.\\n\\n    b) The work must carry prominent notices stating that it is\\n    released under this License and any conditions added under section\\n    7.  This requirement modifies the requirement in section 4 to\\n    \\\"keep intact all notices\\\".\\n\\n    c) You must license the entire work, as a whole, under this\\n    License to anyone who comes into possession of a copy.  This\\n    License will therefore apply, along with any applicable section 7\\n    additional terms, to the whole of the work, and all its parts,\\n    regardless of how they are packaged.  This License gives no\\n    permission to license the work in any other way, but it does not\\n    invalidate such permission if you have separately received it.\\n\\n    d) If the work has interactive user interfaces, each must display\\n    Appropriate Legal Notices; however, if the Program has interactive\\n    interfaces that do not display Appropriate Legal Notices, your\\n    work need not make them do so.\\n\\n  A compilation of a covered work with other separate and independent\\nworks, which are not by their nature extensions of the covered work,\\nand which are not combined with it such as to form a larger program,\\nin or on a volume of a storage or distribution medium, is called an\\n\\\"aggregate\\\" if the compilation and its resulting copyright are not\\nused to limit the access or legal rights of the compilation's users\\nbeyond what the individual works permit.  Inclusion of a covered work\\nin an aggregate does not cause this License to apply to the other\\nparts of the aggregate.\\n\\n  6. Conveying Non-Source Forms.\\n\\n  You may convey a covered work in object code form under the terms\\nof sections 4 and 5, provided that you also convey the\\nmachine-readable Corresponding Source under the terms of this License,\\nin one of these ways:\\n\\n    a) Convey the object code in, or embodied in, a physical product\\n    (including a physical distribution medium), accompanied by the\\n    Corresponding Source fixed on a durable physical medium\\n    customarily used for software interchange.\\n\\n    b) Convey the object code in, or embodied in, a physical product\\n    (including a physical distribution medium), accompanied by a\\n    written offer, valid for at least three years and valid for as\\n    long as you offer spare parts or customer support for that product\\n    model, to give anyone who possesses the object code either (1) a\\n    copy of the Corresponding Source for all the software in the\\n    product that is covered by this License, on a durable physical\\n    medium customarily used for software interchange, for a price no\\n    more than your reasonable cost of physically performing this\\n    conveying of source, or (2) access to copy the\\n    Corresponding Source from a network server at no charge.\\n\\n    c) Convey individual copies of the object code with a copy of the\\n    written offer to provide the Corresponding Source.  This\\n    alternative is allowed only occasionally and noncommercially, and\\n    only if you received the object code with such an offer, in accord\\n    with subsection 6b.\\n\\n    d) Convey the object code by offering access from a designated\\n    place (gratis or for a charge), and offer equivalent access to the\\n    Corresponding Source in the same way through the same place at no\\n    further charge.  You need not require recipients to copy the\\n    Corresponding Source along with the object code.  If the place to\\n    copy the object code is a network server, the Corresponding Source\\n    may be on a different server (operated by you or a third party)\\n    that supports equivalent copying facilities, provided you maintain\\n    clear directions next to the object code saying where to find the\\n    Corresponding Source.  Regardless of what server hosts the\\n    Corresponding Source, you remain obligated to ensure that it is\\n    available for as long as needed to satisfy these requirements.\\n\\n    e) Convey the object code using peer-to-peer transmission, provided\\n    you inform other peers where the object code and Corresponding\\n    Source of the work are being offered to the general public at no\\n    charge under subsection 6d.\\n\\n  A separable portion of the object code, whose source code is excluded\\nfrom the Corresponding Source as a System Library, need not be\\nincluded in conveying the object code work.\\n\\n  A \\\"User Product\\\" is either (1) a \\\"consumer product\\\", which means any\\ntangible personal property which is normally used for personal, family,\\nor household purposes, or (2) anything designed or sold for incorporation\\ninto a dwelling.  In determining whether a product is a consumer product,\\ndoubtful cases shall be resolved in favor of coverage.  For a particular\\nproduct received by a particular user, \\\"normally used\\\" refers to a\\ntypical or common use of that class of product, regardless of the status\\nof the particular user or of the way in which the particular user\\nactually uses, or expects or is expected to use, the product.  A product\\nis a consumer product regardless of whether the product has substantial\\ncommercial, industrial or non-consumer uses, unless such uses represent\\nthe only significant mode of use of the product.\\n\\n  \\\"Installation Information\\\" for a User Product means any methods,\\nprocedures, authorization keys, or other information required to install\\nand execute modified versions of a covered work in that User Product from\\na modified version of its Corresponding Source.  The information must\\nsuffice to ensure that the continued functioning of the modified object\\ncode is in no case prevented or interfered with solely because\\nmodification has been made.\\n\\n  If you convey an object code work under this section in, or with, or\\nspecifically for use in, a User Product, and the conveying occurs as\\npart of a transaction in which the right of possession and use of the\\nUser Product is transferred to the recipient in perpetuity or for a\\nfixed term (regardless of how the transaction is characterized), the\\nCorresponding Source conveyed under this section must be accompanied\\nby the Installation Information.  But this requirement does not apply\\nif neither you nor any third party retains the ability to install\\nmodified object code on the User Product (for example, the work has\\nbeen installed in ROM).\\n\\n  The requirement to provide Installation Information does not include a\\nrequirement to continue to provide support service, warranty, or updates\\nfor a work that has been modified or installed by the recipient, or for\\nthe User Product in which it has been modified or installed.  Access to a\\nnetwork may be denied when the modification itself materially and\\nadversely affects the operation of the network or violates the rules and\\nprotocols for communication across the network.\\n\\n  Corresponding Source conveyed, and Installation Information provided,\\nin accord with this section must be in a format that is publicly\\ndocumented (and with an implementation available to the public in\\nsource code form), and must require no special password or key for\\nunpacking, reading or copying.\\n\\n  7. Additional Terms.\\n\\n  \\\"Additional permissions\\\" are terms that supplement the terms of this\\nLicense by making exceptions from one or more of its conditions.\\nAdditional permissions that are applicable to the entire Program shall\\nbe treated as though they were included in this License, to the extent\\nthat they are valid under applicable law.  If additional permissions\\napply only to part of the Program, that part may be used separately\\nunder those permissions, but the entire Program remains governed by\\nthis License without regard to the additional permissions.\\n\\n  When you convey a copy of a covered work, you may at your option\\nremove any additional permissions from that copy, or from any part of\\nit.  (Additional permissions may be written to require their own\\nremoval in certain cases when you modify the work.)  You may place\\nadditional permissions on material, added by you to a covered work,\\nfor which you have or can give appropriate copyright permission.\\n\\n  Notwithstanding any other provision of this License, for material you\\nadd to a covered work, you may (if authorized by the copyright holders of\\nthat material) supplement the terms of this License with terms:\\n\\n    a) Disclaiming warranty or limiting liability differently from the\\n    terms of sections 15 and 16 of this License; or\\n\\n    b) Requiring preservation of specified reasonable legal notices or\\n    author attributions in that material or in the Appropriate Legal\\n    Notices displayed by works containing it; or\\n\\n    c) Prohibiting misrepresentation of the origin of that material, or\\n    requiring that modified versions of such material be marked in\\n    reasonable ways as different from the original version; or\\n\\n    d) Limiting the use for publicity purposes of names of licensors or\\n    authors of the material; or\\n\\n    e) Declining to grant rights under trademark law for use of some\\n    trade names, trademarks, or service marks; or\\n\\n    f) Requiring indemnification of licensors and authors of that\\n    material by anyone who conveys the material (or modified versions of\\n    it) with contractual assumptions of liability to the recipient, for\\n    any liability that these contractual assumptions directly impose on\\n    those licensors and authors.\\n\\n  All other non-permissive additional terms are considered \\\"further\\nrestrictions\\\" within the meaning of section 10.  If the Program as you\\nreceived it, or any part of it, contains a notice stating that it is\\ngoverned by this License along with a term that is a further\\nrestriction, you may remove that term.  If a license document contains\\na further restriction but permits relicensing or conveying under this\\nLicense, you may add to a covered work material governed by the terms\\nof that license document, provided that the further restriction does\\nnot survive such relicensing or conveying.\\n\\n  If you add terms to a covered work in accord with this section, you\\nmust place, in the relevant source files, a statement of the\\nadditional terms that apply to those files, or a notice indicating\\nwhere to find the applicable terms.\\n\\n  Additional terms, permissive or non-permissive, may be stated in the\\nform of a separately written license, or stated as exceptions;\\nthe above requirements apply either way.\\n\\n  8. Termination.\\n\\n  You may not propagate or modify a covered work except as expressly\\nprovided under this License.  Any attempt otherwise to propagate or\\nmodify it is void, and will automatically terminate your rights under\\nthis License (including any patent licenses granted under the third\\nparagraph of section 11).\\n\\n  However, if you cease all violation of this License, then your\\nlicense from a particular copyright holder is reinstated (a)\\nprovisionally, unless and until the copyright holder explicitly and\\nfinally terminates your license, and (b) permanently, if the copyright\\nholder fails to notify you of the violation by some reasonable means\\nprior to 60 days after the cessation.\\n\\n  Moreover, your license from a particular copyright holder is\\nreinstated permanently if the copyright holder notifies you of the\\nviolation by some reasonable means, this is the first time you have\\nreceived notice of violation of this License (for any work) from that\\ncopyright holder, and you cure the violation prior to 30 days after\\nyour receipt of the notice.\\n\\n  Termination of your rights under this section does not terminate the\\nlicenses of parties who have received copies or rights from you under\\nthis License.  If your rights have been terminated and not permanently\\nreinstated, you do not qualify to receive new licenses for the same\\nmaterial under section 10.\\n\\n  9. Acceptance Not Required for Having Copies.\\n\\n  You are not required to accept this License in order to receive or\\nrun a copy of the Program.  Ancillary propagation of a covered work\\noccurring solely as a consequence of using peer-to-peer transmission\\nto receive a copy likewise does not require acceptance.  However,\\nnothing other than this License grants you permission to propagate or\\nmodify any covered work.  These actions infringe copyright if you do\\nnot accept this License.  Therefore, by modifying or propagating a\\ncovered work, you indicate your acceptance of this License to do so.\\n\\n  10. Automatic Licensing of Downstream Recipients.\\n\\n  Each time you convey a covered work, the recipient automatically\\nreceives a license from the original licensors, to run, modify and\\npropagate that work, subject to this License.  You are not responsible\\nfor enforcing compliance by third parties with this License.\\n\\n  An \\\"entity transaction\\\" is a transaction transferring control of an\\norganization, or substantially all assets of one, or subdividing an\\norganization, or merging organizations.  If propagation of a covered\\nwork results from an entity transaction, each party to that\\ntransaction who receives a copy of the work also receives whatever\\nlicenses to the work the party's predecessor in interest had or could\\ngive under the previous paragraph, plus a right to possession of the\\nCorresponding Source of the work from the predecessor in interest, if\\nthe predecessor has it or can get it with reasonable efforts.\\n\\n  You may not impose any further restrictions on the exercise of the\\nrights granted or affirmed under this License.  For example, you may\\nnot impose a license fee, royalty, or other charge for exercise of\\nrights granted under this License, and you may not initiate litigation\\n(including a cross-claim or counterclaim in a lawsuit) alleging that\\nany patent claim is infringed by making, using, selling, offering for\\nsale, or importing the Program or any portion of it.\\n\\n  11. Patents.\\n\\n  A \\\"contributor\\\" is a copyright holder who authorizes use under this\\nLicense of the Program or a work on which the Program is based.  The\\nwork thus licensed is called the contributor's \\\"contributor version\\\".\\n\\n  A contributor's \\\"essential patent claims\\\" are all patent claims\\nowned or controlled by the contributor, whether already acquired or\\nhereafter acquired, that would be infringed by some manner, permitted\\nby this License, of making, using, or selling its contributor version,\\nbut do not include claims that would be infringed only as a\\nconsequence of further modification of the contributor version.  For\\npurposes of this definition, \\\"control\\\" includes the right to grant\\npatent sublicenses in a manner consistent with the requirements of\\nthis License.\\n\\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\\npatent license under the contributor's essential patent claims, to\\nmake, use, sell, offer for sale, import and otherwise run, modify and\\npropagate the contents of its contributor version.\\n\\n  In the following three paragraphs, a \\\"patent license\\\" is any express\\nagreement or commitment, however denominated, not to enforce a patent\\n(such as an express permission to practice a patent or covenant not to\\nsue for patent infringement).  To \\\"grant\\\" such a patent license to a\\nparty means to make such an agreement or commitment not to enforce a\\npatent against the party.\\n\\n  If you convey a covered work, knowingly relying on a patent license,\\nand the Corresponding Source of the work is not available for anyone\\nto copy, free of charge and under the terms of this License, through a\\npublicly available network server or other readily accessible means,\\nthen you must either (1) cause the Corresponding Source to be so\\navailable, or (2) arrange to deprive yourself of the benefit of the\\npatent license for this particular work, or (3) arrange, in a manner\\nconsistent with the requirements of this License, to extend the patent\\nlicense to downstream recipients.  \\\"Knowingly relying\\\" means you have\\nactual knowledge that, but for the patent license, your conveying the\\ncovered work in a country, or your recipient's use of the covered work\\nin a country, would infringe one or more identifiable patents in that\\ncountry that you have reason to believe are valid.\\n\\n  If, pursuant to or in connection with a single transaction or\\narrangement, you convey, or propagate by procuring conveyance of, a\\ncovered work, and grant a patent license to some of the parties\\nreceiving the covered work authorizing them to use, propagate, modify\\nor convey a specific copy of the covered work, then the patent license\\nyou grant is automatically extended to all recipients of the covered\\nwork and works based on it.\\n\\n  A patent license is \\\"discriminatory\\\" if it does not include within\\nthe scope of its coverage, prohibits the exercise of, or is\\nconditioned on the non-exercise of one or more of the rights that are\\nspecifically granted under this License.  You may not convey a covered\\nwork if you are a party to an arrangement with a third party that is\\nin the business of distributing software, under which you make payment\\nto the third party based on the extent of your activity of conveying\\nthe work, and under which the third party grants, to any of the\\nparties who would receive the covered work from you, a discriminatory\\npatent license (a) in connection with copies of the covered work\\nconveyed by you (or copies made from those copies), or (b) primarily\\nfor and in connection with specific products or compilations that\\ncontain the covered work, unless you entered into that arrangement,\\nor that patent license was granted, prior to 28 March 2007.\\n\\n  Nothing in this License shall be construed as excluding or limiting\\nany implied license or other defenses to infringement that may\\notherwise be available to you under applicable patent law.\\n\\n  12. No Surrender of Others' Freedom.\\n\\n  If conditions are imposed on you (whether by court order, agreement or\\notherwise) that contradict the conditions of this License, they do not\\nexcuse you from the conditions of this License.  If you cannot convey a\\ncovered work so as to satisfy simultaneously your obligations under this\\nLicense and any other pertinent obligations, then as a consequence you may\\nnot convey it at all.  For example, if you agree to terms that obligate you\\nto collect a royalty for further conveying from those to whom you convey\\nthe Program, the only way you could satisfy both those terms and this\\nLicense would be to refrain entirely from conveying the Program.\\n\\n  13. Use with the GNU Affero General Public License.\\n\\n  Notwithstanding any other provision of this License, you have\\npermission to link or combine any covered work with a work licensed\\nunder version 3 of the GNU Affero General Public License into a single\\ncombined work, and to convey the resulting work.  The terms of this\\nLicense will continue to apply to the part which is the covered work,\\nbut the special requirements of the GNU Affero General Public License,\\nsection 13, concerning interaction through a network will apply to the\\ncombination as such.\\n\\n  14. Revised Versions of this License.\\n\\n  The Free Software Foundation may publish revised and/or new versions of\\nthe GNU General Public License from time to time.  Such new versions will\\nbe similar in spirit to the present version, but may differ in detail to\\naddress new problems or concerns.\\n\\n  Each version is given a distinguishing version number.  If the\\nProgram specifies that a certain numbered version of the GNU General\\nPublic License \\\"or any later version\\\" applies to it, you have the\\noption of following the terms and conditions either of that numbered\\nversion or of any later version published by the Free Software\\nFoundation.  If the Program does not specify a version number of the\\nGNU General Public License, you may choose any version ever published\\nby the Free Software Foundation.\\n\\n  If the Program specifies that a proxy can decide which future\\nversions of the GNU General Public License can be used, that proxy's\\npublic statement of acceptance of a version permanently authorizes you\\nto choose that version for the Program.\\n\\n  Later license versions may give you additional or different\\npermissions.  However, no additional obligations are imposed on any\\nauthor or copyright holder as a result of your choosing to follow a\\nlater version.\\n\\n  15. Disclaimer of Warranty.\\n\\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \\\"AS IS\\\" WITHOUT WARRANTY\\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\\n\\n  16. Limitation of Liability.\\n\\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\\nSUCH DAMAGES.\\n\\n  17. Interpretation of Sections 15 and 16.\\n\\n  If the disclaimer of warranty and limitation of liability provided\\nabove cannot be given local legal effect according to their terms,\\nreviewing courts shall apply local law that most closely approximates\\nan absolute waiver of all civil liability in connection with the\\nProgram, unless a warranty or assumption of liability accompanies a\\ncopy of the Program in return for a fee.\\n\\n                     END OF TERMS AND CONDITIONS\\n\\n            How to Apply These Terms to Your New Programs\\n\\n  If you develop a new program, and you want it to be of the greatest\\npossible use to the public, the best way to achieve this is to make it\\nfree software which everyone can redistribute and change under these terms.\\n\\n  To do so, attach the following notices to the program.  It is safest\\nto attach them to the start of each source file to most effectively\\nstate the exclusion of warranty; and each file should have at least\\nthe \\\"copyright\\\" line and a pointer to where the full notice is found.\\n\\n    <one line to give the program's name and a brief idea of what it does.>\\n    Copyright (C) <year>  <name of author>\\n\\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 <http://www.gnu.org/licenses/>.\\n\\nAlso add information on how to contact you by electronic and paper mail.\\n\\n  If the program does terminal interaction, make it output a short\\nnotice like this when it starts in an interactive mode:\\n\\n    <program>  Copyright (C) <year>  <name of author>\\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\\n    This is free software, and you are welcome to redistribute it\\n    under certain conditions; type `show c' for details.\\n\\nThe hypothetical commands `show w' and `show c' should show the appropriate\\nparts of the General Public License.  Of course, your program's commands\\nmight be different; for a GUI interface, you would use an \\\"about box\\\".\\n\\n  You should also get your employer (if you work as a programmer) or school,\\nif any, to sign a \\\"copyright disclaimer\\\" for the program, if necessary.\\nFor more information on this, and how to apply and follow the GNU GPL, see\\n<http://www.gnu.org/licenses/>.\\n\\n  The GNU General Public License does not permit incorporating your program\\ninto proprietary programs.  If your program is a subroutine library, you\\nmay consider it more useful to permit linking proprietary applications with\\nthe library.  If this is what you want to do, use the GNU Lesser General\\nPublic License instead of this License.  But first, please read\\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\\n\\n*/\\n\",\"keccak256\":\"0x08da88e3ef46dae3e7937fbc60210e7a02f1e7b7daddd3c33ab40bdd20ca30e6\"},\"contracts/mocks/WETH9Mock.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {WETH9} from '@aave/core-v3/contracts/dependencies/weth/WETH9.sol';\\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\\n\\ncontract WETH9Mock is WETH9, Ownable {\\n  bool internal _protected;\\n\\n  /**\\n   * @dev Function modifier, if _protected is enabled then msg.sender is required to be the owner\\n   */\\n  modifier onlyOwnerIfProtected() {\\n    if (_protected == true) {\\n      require(owner() == _msgSender(), 'Ownable: caller is not the owner');\\n    }\\n    _;\\n  }\\n\\n  constructor(string memory mockName, string memory mockSymbol, address owner) {\\n    name = mockName;\\n    symbol = mockSymbol;\\n\\n    transferOwnership(owner);\\n    _protected = true;\\n  }\\n\\n  function mint(address account, uint256 value) public onlyOwnerIfProtected returns (bool) {\\n    balanceOf[account] += value;\\n    emit Transfer(address(0), account, value);\\n    return true;\\n  }\\n\\n  function setProtected(bool state) public onlyOwner {\\n    _protected = state;\\n  }\\n\\n  function isProtected() public view returns (bool) {\\n    return _protected;\\n  }\\n}\\n\",\"keccak256\":\"0x1e3868aab07fb2e9dbfa4d7149dcbfcaee7abe174538400c0c1be4b971ff7ba1\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":2984,"contract":"contracts/mocks/WETH9Mock.sol:WETH9Mock","label":"name","offset":0,"slot":"0","type":"t_string_storage"},{"astId":2987,"contract":"contracts/mocks/WETH9Mock.sol:WETH9Mock","label":"symbol","offset":0,"slot":"1","type":"t_string_storage"},{"astId":2990,"contract":"contracts/mocks/WETH9Mock.sol:WETH9Mock","label":"decimals","offset":0,"slot":"2","type":"t_uint8"},{"astId":3022,"contract":"contracts/mocks/WETH9Mock.sol:WETH9Mock","label":"balanceOf","offset":0,"slot":"3","type":"t_mapping(t_address,t_uint256)"},{"astId":3028,"contract":"contracts/mocks/WETH9Mock.sol:WETH9Mock","label":"allowance","offset":0,"slot":"4","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":1472,"contract":"contracts/mocks/WETH9Mock.sol:WETH9Mock","label":"_owner","offset":0,"slot":"5","type":"t_address"},{"astId":35140,"contract":"contracts/mocks/WETH9Mock.sol:WETH9Mock","label":"_protected","offset":20,"slot":"5","type":"t_bool"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/mocks/attacks/SelfdestructTransfer.sol":{"SelfdestructTransfer":{"abi":[{"inputs":[{"internalType":"address payable","name":"to","type":"address"}],"name":"destroyAndTransfer","outputs":[],"stateMutability":"payable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060bc8061001f6000396000f3fe608060405260043610601c5760003560e01c8063785e07b3146021575b600080fd5b6030602c366004604b565b6032565b005b8073ffffffffffffffffffffffffffffffffffffffff16ff5b600060208284031215605c57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114607f57600080fd5b939250505056fea2646970667358221220e85aac2c4afa751c83f89648a2b9b85c01e6cdd5fc2f6dc933b43e650c9eb10964736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xBC DUP1 PUSH2 0x1F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x1C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x785E07B3 EQ PUSH1 0x21 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x30 PUSH1 0x2C CALLDATASIZE PUSH1 0x4 PUSH1 0x4B JUMP JUMPDEST PUSH1 0x32 JUMP JUMPDEST STOP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SELFDESTRUCT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH1 0x5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH1 0x7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE8 GAS 0xAC 0x2C 0x4A STATICCALL PUSH22 0x1C83F89648A2B9B85C01E6CDD5FC2F6DC933B43E650C SWAP15 0xB1 MULMOD PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"63:128:167:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@destroyAndTransfer_35247":{"entryPoint":50,"id":35247,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_payable":{"entryPoint":75,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:333:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"92:239:201","statements":[{"body":{"nodeType":"YulBlock","src":"138:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"147:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"150:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"140:6:201"},"nodeType":"YulFunctionCall","src":"140:12:201"},"nodeType":"YulExpressionStatement","src":"140:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"113:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"122:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"109:3:201"},"nodeType":"YulFunctionCall","src":"109:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"134:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"105:3:201"},"nodeType":"YulFunctionCall","src":"105:32:201"},"nodeType":"YulIf","src":"102:52:201"},{"nodeType":"YulVariableDeclaration","src":"163:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"189:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"176:12:201"},"nodeType":"YulFunctionCall","src":"176:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"167:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"285:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"294:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"297:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"287:6:201"},"nodeType":"YulFunctionCall","src":"287:12:201"},"nodeType":"YulExpressionStatement","src":"287:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"221:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"232:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"239:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"228:3:201"},"nodeType":"YulFunctionCall","src":"228:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"218:2:201"},"nodeType":"YulFunctionCall","src":"218:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"211:6:201"},"nodeType":"YulFunctionCall","src":"211:73:201"},"nodeType":"YulIf","src":"208:93:201"},{"nodeType":"YulAssignment","src":"310:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"320:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"310:6:201"}]}]},"name":"abi_decode_tuple_t_address_payable","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"58:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"69:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"81:6:201","type":""}],"src":"14:317:201"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_address_payable(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n        value0 := value\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405260043610601c5760003560e01c8063785e07b3146021575b600080fd5b6030602c366004604b565b6032565b005b8073ffffffffffffffffffffffffffffffffffffffff16ff5b600060208284031215605c57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114607f57600080fd5b939250505056fea2646970667358221220e85aac2c4afa751c83f89648a2b9b85c01e6cdd5fc2f6dc933b43e650c9eb10964736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x1C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x785E07B3 EQ PUSH1 0x21 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x30 PUSH1 0x2C CALLDATASIZE PUSH1 0x4 PUSH1 0x4B JUMP JUMPDEST PUSH1 0x32 JUMP JUMPDEST STOP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SELFDESTRUCT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH1 0x5C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH1 0x7F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE8 GAS 0xAC 0x2C 0x4A STATICCALL PUSH22 0x1C83F89648A2B9B85C01E6CDD5FC2F6DC933B43E650C SWAP15 0xB1 MULMOD PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"63:128:167:-:0;;;;;;;;;;;;;;;;;;;;;97:92;;;;;;:::i;:::-;;:::i;:::-;;;181:2;168:16;;;14:317:201;81:6;134:2;122:9;113:7;109:23;105:32;102:52;;;150:1;147;140:12;102:52;189:9;176:23;239:42;232:5;228:54;221:5;218:65;208:93;;297:1;294;287:12;208:93;320:5;14:317;-1:-1:-1;;;14:317:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"37600","executionCost":"87","totalCost":"37687"},"external":{"destroyAndTransfer(address)":"27809"}},"methodIdentifiers":{"destroyAndTransfer(address)":"785e07b3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"destroyAndTransfer\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/attacks/SelfdestructTransfer.sol\":\"SelfdestructTransfer\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"contracts/mocks/attacks/SelfdestructTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ncontract SelfdestructTransfer {\\n  function destroyAndTransfer(address payable to) external payable {\\n    selfdestruct(to);\\n  }\\n}\\n\",\"keccak256\":\"0x23fea4edc5dfe8da94c0ee02d2e610f516456be0f862a2b231e6dd046e82053a\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/mocks/swap/MockParaSwapAugustus.sol":{"MockParaSwapAugustus":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"address","name":"toToken","type":"address"},{"internalType":"uint256","name":"fromAmount","type":"uint256"},{"internalType":"uint256","name":"toAmount","type":"uint256"}],"name":"buy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"address","name":"toToken","type":"address"},{"internalType":"uint256","name":"fromAmount","type":"uint256"},{"internalType":"uint256","name":"toAmountMin","type":"uint256"},{"internalType":"uint256","name":"toAmountMax","type":"uint256"}],"name":"expectBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"address","name":"toToken","type":"address"},{"internalType":"uint256","name":"fromAmountMin","type":"uint256"},{"internalType":"uint256","name":"fromAmountMax","type":"uint256"},{"internalType":"uint256","name":"receivedAmount","type":"uint256"}],"name":"expectSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTokenTransferProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"address","name":"toToken","type":"address"},{"internalType":"uint256","name":"fromAmount","type":"uint256"},{"internalType":"uint256","name":"toAmount","type":"uint256"}],"name":"swap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_35292":{"entryPoint":null,"id":35292,"parameterSlots":0,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"60a060405234801561001057600080fd5b5060405161001d9061004b565b604051809103906000f080158015610039573d6000803e3d6000fd5b506001600160a01b0316608052610058565b6105cb80610ced83390190565b608051610c6c610081600039600081816101dc0152818161050001526109960152610c6c6000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c8063b166d5f011610050578063b166d5f01461012b578063d2c4b598146101c2578063fe0291561461020657600080fd5b80638507eae81461006c578063a9d424e214610105575b600080fd5b61010361007a366004610b7e565b6000805460017fffffffffffffffffffffff00000000000000000000000000000000000000000090911661010073ffffffffffffffffffffffffffffffffffffffff9889160217811790915580547fffffffffffffffffffffffff0000000000000000000000000000000000000000169490951693909317909355600555600791909155600655565b005b610118610113366004610bcb565b610219565b6040519081526020015b60405180910390f35b610103610139366004610b7e565b6000805460017fffffffffffffffffffffff00000000000000000000000000000000000000000090911661010073ffffffffffffffffffffffffffffffffffffffff9889160217811790915580547fffffffffffffffffffffffff0000000000000000000000000000000000000000169490951693909317909355600255600391909155600455565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610122565b610118610214366004610bcb565b6106b8565b6000805460ff1661028b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e6f7420657870656374696e672073776170000000000000000000000000000060448201526064015b60405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff8681166101009092041614610314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f556e65787065637465642066726f6d20746f6b656e00000000000000000000006044820152606401610282565b60015473ffffffffffffffffffffffffffffffffffffffff858116911614610398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e657870656374656420746f20746f6b656e000000000000000000000000006044820152606401610282565b60075482101580156103ac57506006548211155b610412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f546f20616d6f756e74206f7574206f662072616e6765000000000000000000006044820152606401610282565b8260055411156104a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f46726f6d20616d6f756e74206f6620746f6b656e73206172652068696768657260448201527f207468616e2065787065637465640000000000000000000000000000000000006064820152608401610282565b6005546040517f15dacbea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015233602483015230604483015260648201929092527f0000000000000000000000000000000000000000000000000000000000000000909116906315dacbea90608401600060405180830381600087803b15801561054657600080fd5b505af115801561055a573d6000803e3d6000fd5b50506040517fa0712d680000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff8716925063a0712d6891506024016020604051808303816000875af11580156105cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ef9190610c0d565b506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff85169063a9059cbb906044016020604051808303816000875af1158015610663573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106879190610c0d565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555092915050565b6000805460ff16610725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e6f7420657870656374696e67207377617000000000000000000000000000006044820152606401610282565b60005473ffffffffffffffffffffffffffffffffffffffff86811661010090920416146107ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f556e65787065637465642066726f6d20746f6b656e00000000000000000000006044820152606401610282565b60015473ffffffffffffffffffffffffffffffffffffffff858116911614610832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e657870656374656420746f20746f6b656e000000000000000000000000006044820152606401610282565b600254831015801561084657506003548311155b6108ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f46726f6d20616d6f756e74206f7574206f662072616e676500000000000000006044820152606401610282565b81600454101561093e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f526563656976656420616d6f756e74206f6620746f6b656e7320617265206c6560448201527f7373207468616e206578706563746564000000000000000000000000000000006064820152608401610282565b6040517f15dacbea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152336024830152306044830152606482018590527f000000000000000000000000000000000000000000000000000000000000000016906315dacbea90608401600060405180830381600087803b1580156109da57600080fd5b505af11580156109ee573d6000803e3d6000fd5b5050600480546040517fa0712d680000000000000000000000000000000000000000000000000000000081529182015273ffffffffffffffffffffffffffffffffffffffff8716925063a0712d6891506024016020604051808303816000875af1158015610a60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a849190610c0d565b50600480546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523392810192909252602482015273ffffffffffffffffffffffffffffffffffffffff85169063a9059cbb906044016020604051808303816000875af1158015610afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190610c0d565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600454949350505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b7957600080fd5b919050565b600080600080600060a08688031215610b9657600080fd5b610b9f86610b55565b9450610bad60208701610b55565b94979496505050506040830135926060810135926080909101359150565b60008060008060808587031215610be157600080fd5b610bea85610b55565b9350610bf860208601610b55565b93969395505050506040820135916060013590565b600060208284031215610c1f57600080fd5b81518015158114610c2f57600080fd5b939250505056fea26469706673582212201a1b505ad27e9903a098e7dc8d22ed2b87c8751c0d3a7e3b3f0afa5a0d529dad64736f6c634300080a0033608060405234801561001057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061056a806100616000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806315dacbea14610051578063715018a6146100665780638da5cb5b1461006e578063f2fde38b1461009a575b600080fd5b61006461005f3660046104a5565b6100ad565b005b6100646101db565b6000546040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100646100a83660046104f0565b6102cb565b60005473ffffffffffffffffffffffffffffffffffffffff163314610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152604482018390528516906323b872dd906064016020604051808303816000875af11580156101b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d49190610512565b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461025c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161012a565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff16331461034c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161012a565b73ffffffffffffffffffffffffffffffffffffffff81166103ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161012a565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b803573ffffffffffffffffffffffffffffffffffffffff811681146104a057600080fd5b919050565b600080600080608085870312156104bb57600080fd5b6104c48561047c565b93506104d26020860161047c565b92506104e06040860161047c565b9396929550929360600135925050565b60006020828403121561050257600080fd5b61050b8261047c565b9392505050565b60006020828403121561052457600080fd5b8151801515811461050b57600080fdfea2646970667358221220b43a8a2581e80c029c63b8e78371d116f7b3aab58abe9a8f2f31ef9424dc7b2464736f6c634300080a0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x1D SWAP1 PUSH2 0x4B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x39 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH2 0x58 JUMP JUMPDEST PUSH2 0x5CB DUP1 PUSH2 0xCED DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0xC6C PUSH2 0x81 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x1DC ADD MSTORE DUP2 DUP2 PUSH2 0x500 ADD MSTORE PUSH2 0x996 ADD MSTORE PUSH2 0xC6C 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 0xB166D5F0 GT PUSH2 0x50 JUMPI DUP1 PUSH4 0xB166D5F0 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0xD2C4B598 EQ PUSH2 0x1C2 JUMPI DUP1 PUSH4 0xFE029156 EQ PUSH2 0x206 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8507EAE8 EQ PUSH2 0x6C JUMPI DUP1 PUSH4 0xA9D424E2 EQ PUSH2 0x105 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x103 PUSH2 0x7A CALLDATASIZE PUSH1 0x4 PUSH2 0xB7E JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH2 0x100 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP9 DUP10 AND MUL OR DUP2 OR SWAP1 SWAP2 SSTORE DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 SWAP1 SWAP6 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP4 SSTORE PUSH1 0x5 SSTORE PUSH1 0x7 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x6 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x118 PUSH2 0x113 CALLDATASIZE PUSH1 0x4 PUSH2 0xBCB JUMP JUMPDEST PUSH2 0x219 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x103 PUSH2 0x139 CALLDATASIZE PUSH1 0x4 PUSH2 0xB7E JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH2 0x100 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP9 DUP10 AND MUL OR DUP2 OR SWAP1 SWAP2 SSTORE DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 SWAP1 SWAP6 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP4 SSTORE PUSH1 0x2 SSTORE PUSH1 0x3 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x4 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x122 JUMP JUMPDEST PUSH2 0x118 PUSH2 0x214 CALLDATASIZE PUSH1 0x4 PUSH2 0xBCB JUMP JUMPDEST PUSH2 0x6B8 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF AND PUSH2 0x28B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F7420657870656374696E6720737761700000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH2 0x100 SWAP1 SWAP3 DIV AND EQ PUSH2 0x314 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E65787065637465642066726F6D20746F6B656E0000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x282 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND SWAP2 AND EQ PUSH2 0x398 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E657870656374656420746F20746F6B656E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x282 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP3 LT ISZERO DUP1 ISZERO PUSH2 0x3AC JUMPI POP PUSH1 0x6 SLOAD DUP3 GT ISZERO JUMPDEST PUSH2 0x412 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F20616D6F756E74206F7574206F662072616E676500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x282 JUMP JUMPDEST DUP3 PUSH1 0x5 SLOAD GT ISZERO PUSH2 0x4A4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46726F6D20616D6F756E74206F6620746F6B656E732061726520686967686572 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x207468616E206578706563746564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x282 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH32 0x15DACBEA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE CALLER PUSH1 0x24 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x15DACBEA SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x55A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xA0712D6800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND SWAP3 POP PUSH4 0xA0712D68 SWAP2 POP PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x5EF SWAP2 SWAP1 PUSH2 0xC0D JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x663 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x687 SWAP2 SWAP1 PUSH2 0xC0D JUMP JUMPDEST POP POP PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF AND PUSH2 0x725 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F7420657870656374696E6720737761700000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x282 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH2 0x100 SWAP1 SWAP3 DIV AND EQ PUSH2 0x7AE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E65787065637465642066726F6D20746F6B656E0000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x282 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND SWAP2 AND EQ PUSH2 0x832 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E657870656374656420746F20746F6B656E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x282 JUMP JUMPDEST PUSH1 0x2 SLOAD DUP4 LT ISZERO DUP1 ISZERO PUSH2 0x846 JUMPI POP PUSH1 0x3 SLOAD DUP4 GT ISZERO JUMPDEST PUSH2 0x8AC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46726F6D20616D6F756E74206F7574206F662072616E67650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x282 JUMP JUMPDEST DUP2 PUSH1 0x4 SLOAD LT ISZERO PUSH2 0x93E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x30 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x526563656976656420616D6F756E74206F6620746F6B656E7320617265206C65 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7373207468616E20657870656374656400000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x282 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x15DACBEA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE CALLER PUSH1 0x24 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP6 SWAP1 MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x15DACBEA SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x9DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9EE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH32 0xA0712D6800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND SWAP3 POP PUSH4 0xA0712D68 SWAP2 POP PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA60 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA84 SWAP2 SWAP1 PUSH2 0xC0D JUMP JUMPDEST POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xAFC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB20 SWAP2 SWAP1 PUSH2 0xC0D JUMP JUMPDEST POP POP PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE PUSH1 0x4 SLOAD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xB79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xB96 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB9F DUP7 PUSH2 0xB55 JUMP JUMPDEST SWAP5 POP PUSH2 0xBAD PUSH1 0x20 DUP8 ADD PUSH2 0xB55 JUMP JUMPDEST SWAP5 SWAP8 SWAP5 SWAP7 POP POP POP POP PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP3 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP3 PUSH1 0x80 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xBE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBEA DUP6 PUSH2 0xB55 JUMP JUMPDEST SWAP4 POP PUSH2 0xBF8 PUSH1 0x20 DUP7 ADD PUSH2 0xB55 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 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xC2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BYTE SHL POP GAS 0xD2 PUSH31 0x9903A098E7DC8D22ED2B87C8751C0D3A7E3B3F0AFA5A0D529DAD64736F6C63 NUMBER STOP ADDMOD EXP STOP CALLER PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 DUP3 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH2 0x56A DUP1 PUSH2 0x61 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x15DACBEA EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x66 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x6E JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x9A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0x4A5 JUMP JUMPDEST PUSH2 0xAD JUMP JUMPDEST STOP JUMPDEST PUSH2 0x64 PUSH2 0x1DB JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x64 PUSH2 0xA8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F0 JUMP JUMPDEST PUSH2 0x2CB JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x133 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE DUP6 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1B0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D4 SWAP2 SWAP1 PUSH2 0x512 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x25C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x12A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x34C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x12A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x3EF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x12A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4C4 DUP6 PUSH2 0x47C JUMP JUMPDEST SWAP4 POP PUSH2 0x4D2 PUSH1 0x20 DUP7 ADD PUSH2 0x47C JUMP JUMPDEST SWAP3 POP PUSH2 0x4E0 PUSH1 0x40 DUP7 ADD PUSH2 0x47C JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP3 SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x502 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x50B DUP3 PUSH2 0x47C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x524 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x50B JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB4 GASPRICE DUP11 0x25 DUP2 0xE8 0xC MUL SWAP13 PUSH4 0xB8E78371 0xD1 AND 0xF7 0xB3 0xAA 0xB5 DUP11 0xBE SWAP11 DUP16 0x2F BALANCE 0xEF SWAP5 0x24 0xDC PUSH28 0x2464736F6C634300080A003300000000000000000000000000000000 ","sourceMap":"422:2949:168:-:0;;;808:84;;;;;;;;;;851:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;828:59:168;;;422:2949;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@buy_35552":{"entryPoint":537,"id":35552,"parameterSlots":4,"returnSlots":1},"@expectBuy_35380":{"entryPoint":null,"id":35380,"parameterSlots":5,"returnSlots":0},"@expectSwap_35342":{"entryPoint":null,"id":35342,"parameterSlots":5,"returnSlots":0},"@getTokenTransferProxy_35304":{"entryPoint":null,"id":35304,"parameterSlots":0,"returnSlots":1},"@swap_35466":{"entryPoint":1720,"id":35466,"parameterSlots":4,"returnSlots":1},"abi_decode_address":{"entryPoint":2901,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256":{"entryPoint":3019,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint256":{"entryPoint":2942,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":3085,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_address_t_uint256__to_t_address_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_stringliteral_119f221b31a88701617d2acf6229cf04b8ec08a37df9d613ef829ba659c0271b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_247c336ffaa8a00dbbcb1b6ba3447469c29ae9b01f5c7ef9aec016b8314c69a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_474d605ea952845ff7761621776201dd6a93c1d6b37123ee8ab9628d0779ed3b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_889ce486b1bf9dba7acf5ca586245cd8c9764a3b93a805286b25c8113f70572d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8f4606ce862d2dcb4910a830bcc3fc385da6dd61bedb0a651ca01d292c3c04f7__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_98df0047abec68ccaf8b17ff7509a433c9ef30fa1ddc48703b31e1361b6a4757__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9dc7aee206f443a31ed38f02e91565382cb16275f55657283bdac51fd73707cf__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:5147:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:147:201","statements":[{"nodeType":"YulAssignment","src":"73:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:201"},"nodeType":"YulFunctionCall","src":"82:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:201"}]},{"body":{"nodeType":"YulBlock","src":"188:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"197:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"200:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"190:6:201"},"nodeType":"YulFunctionCall","src":"190:12:201"},"nodeType":"YulExpressionStatement","src":"190:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"142:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:201"},"nodeType":"YulFunctionCall","src":"131:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:201"},"nodeType":"YulFunctionCall","src":"121:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:201"},"nodeType":"YulFunctionCall","src":"114:73:201"},"nodeType":"YulIf","src":"111:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:201","type":""}],"src":"14:196:201"},{"body":{"nodeType":"YulBlock","src":"353:328:201","statements":[{"body":{"nodeType":"YulBlock","src":"400:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"409:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"412:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"402:6:201"},"nodeType":"YulFunctionCall","src":"402:12:201"},"nodeType":"YulExpressionStatement","src":"402:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"374:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"383:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"370:3:201"},"nodeType":"YulFunctionCall","src":"370:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"395:3:201","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"366:3:201"},"nodeType":"YulFunctionCall","src":"366:33:201"},"nodeType":"YulIf","src":"363:53:201"},{"nodeType":"YulAssignment","src":"425:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"454:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"435:18:201"},"nodeType":"YulFunctionCall","src":"435:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"425:6:201"}]},{"nodeType":"YulAssignment","src":"473:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"506:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"517:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"502:3:201"},"nodeType":"YulFunctionCall","src":"502:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"483:18:201"},"nodeType":"YulFunctionCall","src":"483:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"473:6:201"}]},{"nodeType":"YulAssignment","src":"530:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"557:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"568:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"553:3:201"},"nodeType":"YulFunctionCall","src":"553:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"540:12:201"},"nodeType":"YulFunctionCall","src":"540:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"530:6:201"}]},{"nodeType":"YulAssignment","src":"581:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"608:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"619:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"604:3:201"},"nodeType":"YulFunctionCall","src":"604:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"591:12:201"},"nodeType":"YulFunctionCall","src":"591:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"581:6:201"}]},{"nodeType":"YulAssignment","src":"632:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"659:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"670:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"655:3:201"},"nodeType":"YulFunctionCall","src":"655:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"642:12:201"},"nodeType":"YulFunctionCall","src":"642:33:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"632:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"287:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"298:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"310:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"318:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"326:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"334:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"342:6:201","type":""}],"src":"215:466:201"},{"body":{"nodeType":"YulBlock","src":"807:276:201","statements":[{"body":{"nodeType":"YulBlock","src":"854:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"863:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"866:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"856:6:201"},"nodeType":"YulFunctionCall","src":"856:12:201"},"nodeType":"YulExpressionStatement","src":"856:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"828:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"837:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"824:3:201"},"nodeType":"YulFunctionCall","src":"824:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"849:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"820:3:201"},"nodeType":"YulFunctionCall","src":"820:33:201"},"nodeType":"YulIf","src":"817:53:201"},{"nodeType":"YulAssignment","src":"879:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"908:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"889:18:201"},"nodeType":"YulFunctionCall","src":"889:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"879:6:201"}]},{"nodeType":"YulAssignment","src":"927:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"960:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"971:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"956:3:201"},"nodeType":"YulFunctionCall","src":"956:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"937:18:201"},"nodeType":"YulFunctionCall","src":"937:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"927:6:201"}]},{"nodeType":"YulAssignment","src":"984:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1011:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1022:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1007:3:201"},"nodeType":"YulFunctionCall","src":"1007:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"994:12:201"},"nodeType":"YulFunctionCall","src":"994:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"984:6:201"}]},{"nodeType":"YulAssignment","src":"1035:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1062:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1073:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1058:3:201"},"nodeType":"YulFunctionCall","src":"1058:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1045:12:201"},"nodeType":"YulFunctionCall","src":"1045:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1035:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"749:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"760:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"772:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"780:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"788:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"796:6:201","type":""}],"src":"686:397:201"},{"body":{"nodeType":"YulBlock","src":"1189:76:201","statements":[{"nodeType":"YulAssignment","src":"1199:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1211:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1222:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1207:3:201"},"nodeType":"YulFunctionCall","src":"1207:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1199:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1241:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"1252:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1234:6:201"},"nodeType":"YulFunctionCall","src":"1234:25:201"},"nodeType":"YulExpressionStatement","src":"1234:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1158:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1169:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1180:4:201","type":""}],"src":"1088:177:201"},{"body":{"nodeType":"YulBlock","src":"1371:125:201","statements":[{"nodeType":"YulAssignment","src":"1381:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1393:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1404:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1389:3:201"},"nodeType":"YulFunctionCall","src":"1389:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1381:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1423:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1438:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1446:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1434:3:201"},"nodeType":"YulFunctionCall","src":"1434:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1416:6:201"},"nodeType":"YulFunctionCall","src":"1416:74:201"},"nodeType":"YulExpressionStatement","src":"1416:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1340:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1351:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1362:4:201","type":""}],"src":"1270:226:201"},{"body":{"nodeType":"YulBlock","src":"1675:168:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1692:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1703:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1685:6:201"},"nodeType":"YulFunctionCall","src":"1685:21:201"},"nodeType":"YulExpressionStatement","src":"1685:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1726:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1737:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1722:3:201"},"nodeType":"YulFunctionCall","src":"1722:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"1742:2:201","type":"","value":"18"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1715:6:201"},"nodeType":"YulFunctionCall","src":"1715:30:201"},"nodeType":"YulExpressionStatement","src":"1715:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1765:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1776:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1761:3:201"},"nodeType":"YulFunctionCall","src":"1761:18:201"},{"hexValue":"4e6f7420657870656374696e672073776170","kind":"string","nodeType":"YulLiteral","src":"1781:20:201","type":"","value":"Not expecting swap"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1754:6:201"},"nodeType":"YulFunctionCall","src":"1754:48:201"},"nodeType":"YulExpressionStatement","src":"1754:48:201"},{"nodeType":"YulAssignment","src":"1811:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1823:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1834:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1819:3:201"},"nodeType":"YulFunctionCall","src":"1819:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1811:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_8f4606ce862d2dcb4910a830bcc3fc385da6dd61bedb0a651ca01d292c3c04f7__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1652:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1666:4:201","type":""}],"src":"1501:342:201"},{"body":{"nodeType":"YulBlock","src":"2022:171:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2039:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2050:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2032:6:201"},"nodeType":"YulFunctionCall","src":"2032:21:201"},"nodeType":"YulExpressionStatement","src":"2032:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2073:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2084:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2069:3:201"},"nodeType":"YulFunctionCall","src":"2069:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2089:2:201","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2062:6:201"},"nodeType":"YulFunctionCall","src":"2062:30:201"},"nodeType":"YulExpressionStatement","src":"2062:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2112:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2123:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2108:3:201"},"nodeType":"YulFunctionCall","src":"2108:18:201"},{"hexValue":"556e65787065637465642066726f6d20746f6b656e","kind":"string","nodeType":"YulLiteral","src":"2128:23:201","type":"","value":"Unexpected from token"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2101:6:201"},"nodeType":"YulFunctionCall","src":"2101:51:201"},"nodeType":"YulExpressionStatement","src":"2101:51:201"},{"nodeType":"YulAssignment","src":"2161:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2173:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2184:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2169:3:201"},"nodeType":"YulFunctionCall","src":"2169:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2161:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9dc7aee206f443a31ed38f02e91565382cb16275f55657283bdac51fd73707cf__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1999:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2013:4:201","type":""}],"src":"1848:345:201"},{"body":{"nodeType":"YulBlock","src":"2372:169:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2389:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2400:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2382:6:201"},"nodeType":"YulFunctionCall","src":"2382:21:201"},"nodeType":"YulExpressionStatement","src":"2382:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2423:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2434:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2419:3:201"},"nodeType":"YulFunctionCall","src":"2419:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2439:2:201","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2412:6:201"},"nodeType":"YulFunctionCall","src":"2412:30:201"},"nodeType":"YulExpressionStatement","src":"2412:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2462:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2473:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2458:3:201"},"nodeType":"YulFunctionCall","src":"2458:18:201"},{"hexValue":"556e657870656374656420746f20746f6b656e","kind":"string","nodeType":"YulLiteral","src":"2478:21:201","type":"","value":"Unexpected to token"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2451:6:201"},"nodeType":"YulFunctionCall","src":"2451:49:201"},"nodeType":"YulExpressionStatement","src":"2451:49:201"},{"nodeType":"YulAssignment","src":"2509:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2521:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2532:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2517:3:201"},"nodeType":"YulFunctionCall","src":"2517:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2509:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_98df0047abec68ccaf8b17ff7509a433c9ef30fa1ddc48703b31e1361b6a4757__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2349:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2363:4:201","type":""}],"src":"2198:343:201"},{"body":{"nodeType":"YulBlock","src":"2720:172:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2737:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2748:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2730:6:201"},"nodeType":"YulFunctionCall","src":"2730:21:201"},"nodeType":"YulExpressionStatement","src":"2730:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2771:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2782:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2767:3:201"},"nodeType":"YulFunctionCall","src":"2767:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2787:2:201","type":"","value":"22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2760:6:201"},"nodeType":"YulFunctionCall","src":"2760:30:201"},"nodeType":"YulExpressionStatement","src":"2760:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2810:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2821:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2806:3:201"},"nodeType":"YulFunctionCall","src":"2806:18:201"},{"hexValue":"546f20616d6f756e74206f7574206f662072616e6765","kind":"string","nodeType":"YulLiteral","src":"2826:24:201","type":"","value":"To amount out of range"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2799:6:201"},"nodeType":"YulFunctionCall","src":"2799:52:201"},"nodeType":"YulExpressionStatement","src":"2799:52:201"},{"nodeType":"YulAssignment","src":"2860:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2872:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2883:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2868:3:201"},"nodeType":"YulFunctionCall","src":"2868:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2860:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_889ce486b1bf9dba7acf5ca586245cd8c9764a3b93a805286b25c8113f70572d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2697:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2711:4:201","type":""}],"src":"2546:346:201"},{"body":{"nodeType":"YulBlock","src":"3071:236:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3088:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3099:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3081:6:201"},"nodeType":"YulFunctionCall","src":"3081:21:201"},"nodeType":"YulExpressionStatement","src":"3081:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3122:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3133:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3118:3:201"},"nodeType":"YulFunctionCall","src":"3118:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"3138:2:201","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3111:6:201"},"nodeType":"YulFunctionCall","src":"3111:30:201"},"nodeType":"YulExpressionStatement","src":"3111:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3161:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3172:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3157:3:201"},"nodeType":"YulFunctionCall","src":"3157:18:201"},{"hexValue":"46726f6d20616d6f756e74206f6620746f6b656e732061726520686967686572","kind":"string","nodeType":"YulLiteral","src":"3177:34:201","type":"","value":"From amount of tokens are higher"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3150:6:201"},"nodeType":"YulFunctionCall","src":"3150:62:201"},"nodeType":"YulExpressionStatement","src":"3150:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3232:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3243:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3228:3:201"},"nodeType":"YulFunctionCall","src":"3228:18:201"},{"hexValue":"207468616e206578706563746564","kind":"string","nodeType":"YulLiteral","src":"3248:16:201","type":"","value":" than expected"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3221:6:201"},"nodeType":"YulFunctionCall","src":"3221:44:201"},"nodeType":"YulExpressionStatement","src":"3221:44:201"},{"nodeType":"YulAssignment","src":"3274:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3286:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3297:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3282:3:201"},"nodeType":"YulFunctionCall","src":"3282:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3274:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_247c336ffaa8a00dbbcb1b6ba3447469c29ae9b01f5c7ef9aec016b8314c69a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3048:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3062:4:201","type":""}],"src":"2897:410:201"},{"body":{"nodeType":"YulBlock","src":"3497:294:201","statements":[{"nodeType":"YulAssignment","src":"3507:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3519:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3530:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3515:3:201"},"nodeType":"YulFunctionCall","src":"3515:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3507:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"3543:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3553:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3547:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3611:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3626:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3634:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3622:3:201"},"nodeType":"YulFunctionCall","src":"3622:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3604:6:201"},"nodeType":"YulFunctionCall","src":"3604:34:201"},"nodeType":"YulExpressionStatement","src":"3604:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3658:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3669:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3654:3:201"},"nodeType":"YulFunctionCall","src":"3654:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"3678:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3686:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3674:3:201"},"nodeType":"YulFunctionCall","src":"3674:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3647:6:201"},"nodeType":"YulFunctionCall","src":"3647:43:201"},"nodeType":"YulExpressionStatement","src":"3647:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3710:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3721:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3706:3:201"},"nodeType":"YulFunctionCall","src":"3706:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"3730:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3738:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3726:3:201"},"nodeType":"YulFunctionCall","src":"3726:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3699:6:201"},"nodeType":"YulFunctionCall","src":"3699:43:201"},"nodeType":"YulExpressionStatement","src":"3699:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3762:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3773:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3758:3:201"},"nodeType":"YulFunctionCall","src":"3758:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"3778:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3751:6:201"},"nodeType":"YulFunctionCall","src":"3751:34:201"},"nodeType":"YulExpressionStatement","src":"3751:34:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_address_t_uint256__to_t_address_t_address_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3442:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3453:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3461:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3469:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3477:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3488:4:201","type":""}],"src":"3312:479:201"},{"body":{"nodeType":"YulBlock","src":"3874:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"3920:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3929:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3932:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3922:6:201"},"nodeType":"YulFunctionCall","src":"3922:12:201"},"nodeType":"YulExpressionStatement","src":"3922:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3895:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3904:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3891:3:201"},"nodeType":"YulFunctionCall","src":"3891:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3916:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3887:3:201"},"nodeType":"YulFunctionCall","src":"3887:32:201"},"nodeType":"YulIf","src":"3884:52:201"},{"nodeType":"YulVariableDeclaration","src":"3945:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3964:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3958:5:201"},"nodeType":"YulFunctionCall","src":"3958:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3949:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4027:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4036:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4039:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4029:6:201"},"nodeType":"YulFunctionCall","src":"4029:12:201"},"nodeType":"YulExpressionStatement","src":"4029:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3996:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4017:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4010:6:201"},"nodeType":"YulFunctionCall","src":"4010:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4003:6:201"},"nodeType":"YulFunctionCall","src":"4003:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3993:2:201"},"nodeType":"YulFunctionCall","src":"3993:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3986:6:201"},"nodeType":"YulFunctionCall","src":"3986:40:201"},"nodeType":"YulIf","src":"3983:60:201"},{"nodeType":"YulAssignment","src":"4052:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"4062:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4052:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3840:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3851:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3863:6:201","type":""}],"src":"3796:277:201"},{"body":{"nodeType":"YulBlock","src":"4207:168:201","statements":[{"nodeType":"YulAssignment","src":"4217:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4229:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4240:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4225:3:201"},"nodeType":"YulFunctionCall","src":"4225:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4217:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4259:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4274:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4282:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4270:3:201"},"nodeType":"YulFunctionCall","src":"4270:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4252:6:201"},"nodeType":"YulFunctionCall","src":"4252:74:201"},"nodeType":"YulExpressionStatement","src":"4252:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4346:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4357:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4342:3:201"},"nodeType":"YulFunctionCall","src":"4342:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"4362:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4335:6:201"},"nodeType":"YulFunctionCall","src":"4335:34:201"},"nodeType":"YulExpressionStatement","src":"4335:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4168:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4179:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4187:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4198:4:201","type":""}],"src":"4078:297:201"},{"body":{"nodeType":"YulBlock","src":"4554:174:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4571:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4582:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4564:6:201"},"nodeType":"YulFunctionCall","src":"4564:21:201"},"nodeType":"YulExpressionStatement","src":"4564:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4605:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4616:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4601:3:201"},"nodeType":"YulFunctionCall","src":"4601:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"4621:2:201","type":"","value":"24"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4594:6:201"},"nodeType":"YulFunctionCall","src":"4594:30:201"},"nodeType":"YulExpressionStatement","src":"4594:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4644:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4655:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4640:3:201"},"nodeType":"YulFunctionCall","src":"4640:18:201"},{"hexValue":"46726f6d20616d6f756e74206f7574206f662072616e6765","kind":"string","nodeType":"YulLiteral","src":"4660:26:201","type":"","value":"From amount out of range"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4633:6:201"},"nodeType":"YulFunctionCall","src":"4633:54:201"},"nodeType":"YulExpressionStatement","src":"4633:54:201"},{"nodeType":"YulAssignment","src":"4696:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4708:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4719:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4704:3:201"},"nodeType":"YulFunctionCall","src":"4704:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4696:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_474d605ea952845ff7761621776201dd6a93c1d6b37123ee8ab9628d0779ed3b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4531:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4545:4:201","type":""}],"src":"4380:348:201"},{"body":{"nodeType":"YulBlock","src":"4907:238:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4924:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4935:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4917:6:201"},"nodeType":"YulFunctionCall","src":"4917:21:201"},"nodeType":"YulExpressionStatement","src":"4917:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4958:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4969:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4954:3:201"},"nodeType":"YulFunctionCall","src":"4954:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"4974:2:201","type":"","value":"48"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4947:6:201"},"nodeType":"YulFunctionCall","src":"4947:30:201"},"nodeType":"YulExpressionStatement","src":"4947:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4997:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5008:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4993:3:201"},"nodeType":"YulFunctionCall","src":"4993:18:201"},{"hexValue":"526563656976656420616d6f756e74206f6620746f6b656e7320617265206c65","kind":"string","nodeType":"YulLiteral","src":"5013:34:201","type":"","value":"Received amount of tokens are le"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4986:6:201"},"nodeType":"YulFunctionCall","src":"4986:62:201"},"nodeType":"YulExpressionStatement","src":"4986:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5068:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5079:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5064:3:201"},"nodeType":"YulFunctionCall","src":"5064:18:201"},{"hexValue":"7373207468616e206578706563746564","kind":"string","nodeType":"YulLiteral","src":"5084:18:201","type":"","value":"ss than expected"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5057:6:201"},"nodeType":"YulFunctionCall","src":"5057:46:201"},"nodeType":"YulExpressionStatement","src":"5057:46:201"},{"nodeType":"YulAssignment","src":"5112:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5124:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5135:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5120:3:201"},"nodeType":"YulFunctionCall","src":"5120:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5112:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_119f221b31a88701617d2acf6229cf04b8ec08a37df9d613ef829ba659c0271b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4884:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4898:4:201","type":""}],"src":"4733:412:201"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_stringliteral_8f4606ce862d2dcb4910a830bcc3fc385da6dd61bedb0a651ca01d292c3c04f7__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 18)\n        mstore(add(headStart, 64), \"Not expecting swap\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_9dc7aee206f443a31ed38f02e91565382cb16275f55657283bdac51fd73707cf__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"Unexpected from token\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_98df0047abec68ccaf8b17ff7509a433c9ef30fa1ddc48703b31e1361b6a4757__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"Unexpected to token\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_889ce486b1bf9dba7acf5ca586245cd8c9764a3b93a805286b25c8113f70572d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 22)\n        mstore(add(headStart, 64), \"To amount out of range\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_247c336ffaa8a00dbbcb1b6ba3447469c29ae9b01f5c7ef9aec016b8314c69a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"From amount of tokens are higher\")\n        mstore(add(headStart, 96), \" than expected\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_address_t_address_t_uint256__to_t_address_t_address_t_address_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_stringliteral_474d605ea952845ff7761621776201dd6a93c1d6b37123ee8ab9628d0779ed3b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 24)\n        mstore(add(headStart, 64), \"From amount out of range\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_119f221b31a88701617d2acf6229cf04b8ec08a37df9d613ef829ba659c0271b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 48)\n        mstore(add(headStart, 64), \"Received amount of tokens are le\")\n        mstore(add(headStart, 96), \"ss than expected\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"35263":[{"length":32,"start":476},{"length":32,"start":1280},{"length":32,"start":2454}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100675760003560e01c8063b166d5f011610050578063b166d5f01461012b578063d2c4b598146101c2578063fe0291561461020657600080fd5b80638507eae81461006c578063a9d424e214610105575b600080fd5b61010361007a366004610b7e565b6000805460017fffffffffffffffffffffff00000000000000000000000000000000000000000090911661010073ffffffffffffffffffffffffffffffffffffffff9889160217811790915580547fffffffffffffffffffffffff0000000000000000000000000000000000000000169490951693909317909355600555600791909155600655565b005b610118610113366004610bcb565b610219565b6040519081526020015b60405180910390f35b610103610139366004610b7e565b6000805460017fffffffffffffffffffffff00000000000000000000000000000000000000000090911661010073ffffffffffffffffffffffffffffffffffffffff9889160217811790915580547fffffffffffffffffffffffff0000000000000000000000000000000000000000169490951693909317909355600255600391909155600455565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610122565b610118610214366004610bcb565b6106b8565b6000805460ff1661028b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e6f7420657870656374696e672073776170000000000000000000000000000060448201526064015b60405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff8681166101009092041614610314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f556e65787065637465642066726f6d20746f6b656e00000000000000000000006044820152606401610282565b60015473ffffffffffffffffffffffffffffffffffffffff858116911614610398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e657870656374656420746f20746f6b656e000000000000000000000000006044820152606401610282565b60075482101580156103ac57506006548211155b610412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f546f20616d6f756e74206f7574206f662072616e6765000000000000000000006044820152606401610282565b8260055411156104a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f46726f6d20616d6f756e74206f6620746f6b656e73206172652068696768657260448201527f207468616e2065787065637465640000000000000000000000000000000000006064820152608401610282565b6005546040517f15dacbea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015233602483015230604483015260648201929092527f0000000000000000000000000000000000000000000000000000000000000000909116906315dacbea90608401600060405180830381600087803b15801561054657600080fd5b505af115801561055a573d6000803e3d6000fd5b50506040517fa0712d680000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff8716925063a0712d6891506024016020604051808303816000875af11580156105cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ef9190610c0d565b506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810183905273ffffffffffffffffffffffffffffffffffffffff85169063a9059cbb906044016020604051808303816000875af1158015610663573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106879190610c0d565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555092915050565b6000805460ff16610725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e6f7420657870656374696e67207377617000000000000000000000000000006044820152606401610282565b60005473ffffffffffffffffffffffffffffffffffffffff86811661010090920416146107ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f556e65787065637465642066726f6d20746f6b656e00000000000000000000006044820152606401610282565b60015473ffffffffffffffffffffffffffffffffffffffff858116911614610832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e657870656374656420746f20746f6b656e000000000000000000000000006044820152606401610282565b600254831015801561084657506003548311155b6108ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f46726f6d20616d6f756e74206f7574206f662072616e676500000000000000006044820152606401610282565b81600454101561093e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f526563656976656420616d6f756e74206f6620746f6b656e7320617265206c6560448201527f7373207468616e206578706563746564000000000000000000000000000000006064820152608401610282565b6040517f15dacbea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152336024830152306044830152606482018590527f000000000000000000000000000000000000000000000000000000000000000016906315dacbea90608401600060405180830381600087803b1580156109da57600080fd5b505af11580156109ee573d6000803e3d6000fd5b5050600480546040517fa0712d680000000000000000000000000000000000000000000000000000000081529182015273ffffffffffffffffffffffffffffffffffffffff8716925063a0712d6891506024016020604051808303816000875af1158015610a60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a849190610c0d565b50600480546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523392810192909252602482015273ffffffffffffffffffffffffffffffffffffffff85169063a9059cbb906044016020604051808303816000875af1158015610afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b209190610c0d565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600454949350505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b7957600080fd5b919050565b600080600080600060a08688031215610b9657600080fd5b610b9f86610b55565b9450610bad60208701610b55565b94979496505050506040830135926060810135926080909101359150565b60008060008060808587031215610be157600080fd5b610bea85610b55565b9350610bf860208601610b55565b93969395505050506040820135916060013590565b600060208284031215610c1f57600080fd5b81518015158114610c2f57600080fd5b939250505056fea26469706673582212201a1b505ad27e9903a098e7dc8d22ed2b87c8751c0d3a7e3b3f0afa5a0d529dad64736f6c634300080a0033","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 0xB166D5F0 GT PUSH2 0x50 JUMPI DUP1 PUSH4 0xB166D5F0 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0xD2C4B598 EQ PUSH2 0x1C2 JUMPI DUP1 PUSH4 0xFE029156 EQ PUSH2 0x206 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8507EAE8 EQ PUSH2 0x6C JUMPI DUP1 PUSH4 0xA9D424E2 EQ PUSH2 0x105 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x103 PUSH2 0x7A CALLDATASIZE PUSH1 0x4 PUSH2 0xB7E JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH2 0x100 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP9 DUP10 AND MUL OR DUP2 OR SWAP1 SWAP2 SSTORE DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 SWAP1 SWAP6 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP4 SSTORE PUSH1 0x5 SSTORE PUSH1 0x7 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x6 SSTORE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x118 PUSH2 0x113 CALLDATASIZE PUSH1 0x4 PUSH2 0xBCB JUMP JUMPDEST PUSH2 0x219 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x103 PUSH2 0x139 CALLDATASIZE PUSH1 0x4 PUSH2 0xB7E JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH2 0x100 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP9 DUP10 AND MUL OR DUP2 OR SWAP1 SWAP2 SSTORE DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 SWAP1 SWAP6 AND SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP4 SSTORE PUSH1 0x2 SSTORE PUSH1 0x3 SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x4 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x122 JUMP JUMPDEST PUSH2 0x118 PUSH2 0x214 CALLDATASIZE PUSH1 0x4 PUSH2 0xBCB JUMP JUMPDEST PUSH2 0x6B8 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF AND PUSH2 0x28B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F7420657870656374696E6720737761700000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH2 0x100 SWAP1 SWAP3 DIV AND EQ PUSH2 0x314 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E65787065637465642066726F6D20746F6B656E0000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x282 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND SWAP2 AND EQ PUSH2 0x398 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E657870656374656420746F20746F6B656E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x282 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP3 LT ISZERO DUP1 ISZERO PUSH2 0x3AC JUMPI POP PUSH1 0x6 SLOAD DUP3 GT ISZERO JUMPDEST PUSH2 0x412 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x546F20616D6F756E74206F7574206F662072616E676500000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x282 JUMP JUMPDEST DUP3 PUSH1 0x5 SLOAD GT ISZERO PUSH2 0x4A4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46726F6D20616D6F756E74206F6620746F6B656E732061726520686967686572 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x207468616E206578706563746564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x282 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH32 0x15DACBEA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE CALLER PUSH1 0x24 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH32 0x0 SWAP1 SWAP2 AND SWAP1 PUSH4 0x15DACBEA SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x546 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x55A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xA0712D6800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND SWAP3 POP PUSH4 0xA0712D68 SWAP2 POP PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5CB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x5EF SWAP2 SWAP1 PUSH2 0xC0D JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x663 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x687 SWAP2 SWAP1 PUSH2 0xC0D JUMP JUMPDEST POP POP PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xFF AND PUSH2 0x725 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F7420657870656374696E6720737761700000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x282 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH2 0x100 SWAP1 SWAP3 DIV AND EQ PUSH2 0x7AE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E65787065637465642066726F6D20746F6B656E0000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x282 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND SWAP2 AND EQ PUSH2 0x832 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E657870656374656420746F20746F6B656E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x282 JUMP JUMPDEST PUSH1 0x2 SLOAD DUP4 LT ISZERO DUP1 ISZERO PUSH2 0x846 JUMPI POP PUSH1 0x3 SLOAD DUP4 GT ISZERO JUMPDEST PUSH2 0x8AC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x46726F6D20616D6F756E74206F7574206F662072616E67650000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x282 JUMP JUMPDEST DUP2 PUSH1 0x4 SLOAD LT ISZERO PUSH2 0x93E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x30 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x526563656976656420616D6F756E74206F6620746F6B656E7320617265206C65 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7373207468616E20657870656374656400000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x282 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x15DACBEA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE CALLER PUSH1 0x24 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP6 SWAP1 MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x15DACBEA SWAP1 PUSH1 0x84 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x9DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9EE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH32 0xA0712D6800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND SWAP3 POP PUSH4 0xA0712D68 SWAP2 POP PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xA60 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA84 SWAP2 SWAP1 PUSH2 0xC0D JUMP JUMPDEST POP PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xAFC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB20 SWAP2 SWAP1 PUSH2 0xC0D JUMP JUMPDEST POP POP PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE PUSH1 0x4 SLOAD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xB79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xB96 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB9F DUP7 PUSH2 0xB55 JUMP JUMPDEST SWAP5 POP PUSH2 0xBAD PUSH1 0x20 DUP8 ADD PUSH2 0xB55 JUMP JUMPDEST SWAP5 SWAP8 SWAP5 SWAP7 POP POP POP POP PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP3 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP3 PUSH1 0x80 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xBE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBEA DUP6 PUSH2 0xB55 JUMP JUMPDEST SWAP4 POP PUSH2 0xBF8 PUSH1 0x20 DUP7 ADD PUSH2 0xB55 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 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC1F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xC2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BYTE SHL POP GAS 0xD2 PUSH31 0x9903A098E7DC8D22ED2B87C8751C0D3A7E3B3F0AFA5A0D529DAD64736F6C63 NUMBER STOP ADDMOD EXP STOP CALLER ","sourceMap":"422:2949:168:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1410:360;;;;;;:::i;:::-;1566:14;:21;;1583:4;1593:30;;;;1566:21;1593:30;;;;;;;;;;;1629:26;;;;;;;;;;;;;;;1661:11;:24;1691:20;:34;;;;1731:20;:34;1410:360;;;2590:779;;;;;;:::i;:::-;;:::i;:::-;;;1234:25:201;;;1222:2;1207:18;2590:779:168;;;;;;;;1021:385;;;;;;:::i;:::-;1186:14;:21;;1203:4;1213:30;;;;1186:21;1213:30;;;;;;;;;;;1249:26;;;;;;;;;;;;;;;1281:22;:38;1325:22;:38;;;;1369:15;:32;1021:385;896:121;;;1446:42:201;991:20:168;1434:55:201;1416:74;;1404:2;1389:18;896:121:168;1270:226:201;1774:812:168;;;;;;:::i;:::-;;:::i;2590:779::-;2715:7;2738:14;;;;2730:45;;;;;;;1703:2:201;2730:45:168;;;1685:21:201;1742:2;1722:18;;;1715:30;1781:20;1761:18;;;1754:48;1819:18;;2730:45:168;;;;;;;;;2802:18;;;2789:31;;;2802:18;;;;;2789:31;2781:65;;;;;;;2050:2:201;2781:65:168;;;2032:21:201;2089:2;2069:18;;;2062:30;2128:23;2108:18;;;2101:51;2169:18;;2781:65:168;1848:345:201;2781:65:168;2871:16;;;2860:27;;;2871:16;;2860:27;2852:59;;;;;;;2400:2:201;2852:59:168;;;2382:21:201;2439:2;2419:18;;;2412:30;2478:21;2458:18;;;2451:49;2517:18;;2852:59:168;2198:343:201;2852:59:168;2944:20;;2932:8;:32;;:68;;;;;2980:20;;2968:8;:32;;2932:68;2917:121;;;;;;;2748:2:201;2917:121:168;;;2730:21:201;2787:2;2767:18;;;2760:30;2826:24;2806:18;;;2799:52;2868:18;;2917:121:168;2546:346:201;2917:121:168;3067:10;3052:11;;:25;;3044:84;;;;;;;3099:2:201;3044:84:168;;;3081:21:201;3138:2;3118:18;;;3111:30;3177:34;3157:18;;;3150:62;3248:16;3228:18;;;3221:44;3282:19;;3044:84:168;2897:410:201;3044:84:168;3206:11;;3134:84;;;;;:33;3622:15:201;;;3134:84:168;;;3604:34:201;3179:10:168;3654:18:201;;;3647:43;3199:4:168;3706:18:201;;;3699:43;3758:18;;;3751:34;;;;3134:20:168;:33;;;;;;3515:19:201;;3134:84:168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3224:37:168;;;;;;;;1234:25:201;;;3224:27:168;;;;-1:-1:-1;3224:27:168;;-1:-1:-1;1207:18:201;;3224:37:168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3267:46:168;;;;;3292:10;3267:46;;;4252:74:201;4342:18;;;4335:34;;;3267:24:168;;;;;;4225:18:201;;3267:46:168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3336:5:168;3319:22;;;;;;-1:-1:-1;3354:10:168;2590:779;-1:-1:-1;;2590:779:168:o;1774:812::-;1900:7;1923:14;;;;1915:45;;;;;;;1703:2:201;1915:45:168;;;1685:21:201;1742:2;1722:18;;;1715:30;1781:20;1761:18;;;1754:48;1819:18;;1915:45:168;1501:342:201;1915:45:168;1987:18;;;1974:31;;;1987:18;;;;;1974:31;1966:65;;;;;;;2050:2:201;1966:65:168;;;2032:21:201;2089:2;2069:18;;;2062:30;2128:23;2108:18;;;2101:51;2169:18;;1966:65:168;1848:345:201;1966:65:168;2056:16;;;2045:27;;;2056:16;;2045:27;2037:59;;;;;;;2400:2:201;2037:59:168;;;2382:21:201;2439:2;2419:18;;;2412:30;2478:21;2458:18;;;2451:49;2517:18;;2037:59:168;2198:343:201;2037:59:168;2131:22;;2117:10;:36;;:76;;;;;2171:22;;2157:10;:36;;2117:76;2102:131;;;;;;;4582:2:201;2102:131:168;;;4564:21:201;4621:2;4601:18;;;4594:30;4660:26;4640:18;;;4633:54;4704:18;;2102:131:168;4380:348:201;2102:131:168;2266:8;2247:15;;:27;;2239:88;;;;;;;4935:2:201;2239:88:168;;;4917:21:201;4974:2;4954:18;;;4947:30;5013:34;4993:18;;;4986:62;5084:18;5064;;;5057:46;5120:19;;2239:88:168;4733:412:201;2239:88:168;2333:83;;;;;:33;3622:15:201;;;2333:83:168;;;3604:34:201;2378:10:168;3654:18:201;;;3647:43;2398:4:168;3706:18:201;;;3699:43;3758:18;;;3751:34;;;2333:20:168;:33;;;;3515:19:201;;2333:83:168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2450:15:168;;;2422:44;;;;;;;;1234:25:201;2422:27:168;;;;-1:-1:-1;2422:27:168;;-1:-1:-1;1207:18:201;;2422:44:168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2509:15:168;;;2472:53;;;;;2497:10;2472:53;;;4252:74:201;;;;4342:18;;;4335:34;2472:24:168;;;;;;4225:18:201;;2472:53:168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;2548:5:168;2531:22;;;;;;2566:15;;1774:812;;;;;;:::o;14:196:201:-;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:466::-;310:6;318;326;334;342;395:3;383:9;374:7;370:23;366:33;363:53;;;412:1;409;402:12;363:53;435:29;454:9;435:29;:::i;:::-;425:39;;483:38;517:2;506:9;502:18;483:38;:::i;:::-;215:466;;473:48;;-1:-1:-1;;;;568:2:201;553:18;;540:32;;619:2;604:18;;591:32;;670:3;655:19;;;642:33;;-1:-1:-1;215:466:201:o;686:397::-;772:6;780;788;796;849:3;837:9;828:7;824:23;820:33;817:53;;;866:1;863;856:12;817:53;889:29;908:9;889:29;:::i;:::-;879:39;;937:38;971:2;960:9;956:18;937:38;:::i;:::-;686:397;;927:48;;-1:-1:-1;;;;1022:2:201;1007:18;;994:32;;1073:2;1058:18;1045:32;;686:397::o;3796:277::-;3863:6;3916:2;3904:9;3895:7;3891:23;3887:32;3884:52;;;3932:1;3929;3922:12;3884:52;3964:9;3958:16;4017:5;4010:13;4003:21;3996:5;3993:32;3983:60;;4039:1;4036;4029:12;3983:60;4062:5;3796:277;-1:-1:-1;;;3796:277:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"636000","executionCost":"infinite","totalCost":"infinite"},"external":{"buy(address,address,uint256,uint256)":"infinite","expectBuy(address,address,uint256,uint256,uint256)":"infinite","expectSwap(address,address,uint256,uint256,uint256)":"infinite","getTokenTransferProxy()":"infinite","swap(address,address,uint256,uint256)":"infinite"}},"methodIdentifiers":{"buy(address,address,uint256,uint256)":"a9d424e2","expectBuy(address,address,uint256,uint256,uint256)":"8507eae8","expectSwap(address,address,uint256,uint256,uint256)":"b166d5f0","getTokenTransferProxy()":"d2c4b598","swap(address,address,uint256,uint256)":"fe029156"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"fromAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toAmount\",\"type\":\"uint256\"}],\"name\":\"buy\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"fromAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toAmountMin\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toAmountMax\",\"type\":\"uint256\"}],\"name\":\"expectBuy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"fromAmountMin\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fromAmountMax\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"receivedAmount\",\"type\":\"uint256\"}],\"name\":\"expectSwap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenTransferProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"toToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"fromAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toAmount\",\"type\":\"uint256\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/swap/MockParaSwapAugustus.sol\":\"MockParaSwapAugustus\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\nimport './IERC20.sol';\\nimport './SafeMath.sol';\\nimport './Address.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 Context, IERC20 {\\n  using SafeMath for uint256;\\n  using Address for address;\\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(_msgSender(), recipient, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-allowance}.\\n   */\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) 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(_msgSender(), 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   * - `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      _msgSender(),\\n      _allowances[sender][_msgSender()].sub(amount, 'ERC20: transfer amount 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(_msgSender(), spender, _allowances[_msgSender()][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(\\n    address spender,\\n    uint256 subtractedValue\\n  ) public virtual returns (bool) {\\n    _approve(\\n      _msgSender(),\\n      spender,\\n      _allowances[_msgSender()][spender].sub(\\n        subtractedValue,\\n        'ERC20: decreased allowance below zero'\\n      )\\n    );\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Moves tokens `amount` from `sender` to `recipient`.\\n   *\\n   * This is internal function is equivalent to {transfer}, and can be used to\\n   * e.g. implement automatic token fees, slashing mechanisms, etc.\\n   *\\n   * Emits a {Transfer} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `sender` cannot be the zero address.\\n   * - `recipient` cannot be the zero address.\\n   * - `sender` must have a balance of at least `amount`.\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount) internal virtual {\\n    require(sender != address(0), 'ERC20: transfer from the zero address');\\n    require(recipient != address(0), 'ERC20: transfer to the zero address');\\n\\n    _beforeTokenTransfer(sender, recipient, amount);\\n\\n    _balances[sender] = _balances[sender].sub(amount, 'ERC20: transfer amount 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    require(account != address(0), 'ERC20: mint to the zero address');\\n\\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), 'ERC20: burn from the zero address');\\n\\n    _beforeTokenTransfer(account, address(0), amount);\\n\\n    _balances[account] = _balances[account].sub(amount, 'ERC20: burn amount 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 is 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(address owner, address spender, uint256 amount) internal virtual {\\n    require(owner != address(0), 'ERC20: approve from the zero address');\\n    require(spender != address(0), 'ERC20: approve to the zero address');\\n\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @dev 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(address from, address to, uint256 amount) internal virtual {}\\n}\\n\",\"keccak256\":\"0x84e6a151684cce31e66c850677f7e9455d694e050e409e5ded05fb5528c6c7e4\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable is Context {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial owner.\\n   */\\n  constructor() {\\n    address msgSender = _msgSender();\\n    _owner = msgSender;\\n    emit OwnershipTransferred(address(0), msgSender);\\n  }\\n\\n  /**\\n   * @dev Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Leaves the contract without owner. It will not be possible to call\\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\\n   *\\n   * NOTE: Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public virtual onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = address(0);\\n  }\\n\\n  /**\\n   * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function transferOwnership(address newOwner) public virtual onlyOwner {\\n    require(newOwner != address(0), 'Ownable: new owner is the zero address');\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\",\"keccak256\":\"0x3ce185c4f579e32006f8893dbfdc1b5d878c0e2cafd1508f7ceb081698bc81f9\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/// @title Optimized overflow and underflow safe math operations\\n/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\\nlibrary SafeMath {\\n  /// @notice Returns x + y, reverts if sum overflows uint256\\n  /// @param x The augend\\n  /// @param y The addend\\n  /// @return z The sum of x and y\\n  function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x + y) >= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @param message The error msg\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y, string memory message) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x, message);\\n    }\\n  }\\n\\n  /// @notice Returns x * y, reverts if overflows\\n  /// @param x The multiplicand\\n  /// @param y The multiplier\\n  /// @return z The product of x and y\\n  function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require(x == 0 || (z = x * y) / x == y);\\n    }\\n  }\\n\\n  /// @notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\\n  /// @param x The numerator\\n  /// @param y The denominator\\n  /// @return z The product of x and y\\n  function div(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    return x / y;\\n  }\\n}\\n\",\"keccak256\":\"0xf1c5d8ba70a5fc3e20dbbc2aa2a2278d2535a57bc1e9abf1228ebc3068a045f0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {ERC20} from '../../dependencies/openzeppelin/contracts/ERC20.sol';\\nimport {IERC20WithPermit} from '../../interfaces/IERC20WithPermit.sol';\\n\\n/**\\n * @title ERC20Mintable\\n * @dev ERC20 minting logic\\n */\\ncontract MintableERC20 is IERC20WithPermit, ERC20 {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n  bytes32 public constant PERMIT_TYPEHASH =\\n    keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 public DOMAIN_SEPARATOR;\\n\\n  constructor(string memory name, string memory symbol, uint8 decimals) ERC20(name, symbol) {\\n    uint256 chainId = block.chainid;\\n\\n    DOMAIN_SEPARATOR = keccak256(\\n      abi.encode(\\n        EIP712_DOMAIN,\\n        keccak256(bytes(name)),\\n        keccak256(EIP712_REVISION),\\n        chainId,\\n        address(this)\\n      )\\n    );\\n    _setupDecimals(decimals);\\n  }\\n\\n  /// @inheritdoc IERC20WithPermit\\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 override {\\n    require(owner != address(0), 'INVALID_OWNER');\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, 'INVALID_EXPIRATION');\\n    uint256 currentValidNonce = _nonces[owner];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR,\\n        keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, currentValidNonce, deadline))\\n      )\\n    );\\n    require(owner == ecrecover(digest, v, r, s), 'INVALID_SIGNATURE');\\n    _nonces[owner] = currentValidNonce + 1;\\n    _approve(owner, spender, value);\\n  }\\n\\n  /**\\n   * @dev Function to mint tokens\\n   * @param value The amount of tokens to mint.\\n   * @return A boolean that indicates if the operation was successful.\\n   */\\n  function mint(uint256 value) public returns (bool) {\\n    _mint(_msgSender(), value);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Function to mint tokens to address\\n   * @param account The account to mint tokens.\\n   * @param value The amount of tokens to mint.\\n   * @return A boolean that indicates if the operation was successful.\\n   */\\n  function mint(address account, uint256 value) public returns (bool) {\\n    _mint(account, value);\\n    return true;\\n  }\\n\\n  function nonces(address owner) public view virtual returns (uint256) {\\n    return _nonces[owner];\\n  }\\n}\\n\",\"keccak256\":\"0x8306245c732faf6038ba650428edda23197ee5977be4cd2a1e5e73263acca6b7\",\"license\":\"BUSL-1.1\"},\"contracts/adapters/paraswap/interfaces/IParaSwapAugustus.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IParaSwapAugustus {\\n  function getTokenTransferProxy() external view returns (address);\\n}\\n\",\"keccak256\":\"0x8feda4c8f1710f2365681625e9feada9cc9d129ac045645b2c893e06c817815b\",\"license\":\"AGPL-3.0\"},\"contracts/mocks/swap/MockParaSwapAugustus.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IParaSwapAugustus} from '../../adapters/paraswap/interfaces/IParaSwapAugustus.sol';\\nimport {MockParaSwapTokenTransferProxy} from './MockParaSwapTokenTransferProxy.sol';\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {MintableERC20} from '@aave/core-v3/contracts/mocks/tokens/MintableERC20.sol';\\n\\ncontract MockParaSwapAugustus is IParaSwapAugustus {\\n  MockParaSwapTokenTransferProxy immutable TOKEN_TRANSFER_PROXY;\\n  bool _expectingSwap;\\n  address _expectedFromToken;\\n  address _expectedToToken;\\n\\n  uint256 _expectedFromAmountMin;\\n  uint256 _expectedFromAmountMax;\\n  uint256 _receivedAmount;\\n\\n  uint256 _fromAmount;\\n  uint256 _expectedToAmountMax;\\n  uint256 _expectedToAmountMin;\\n\\n  constructor() {\\n    TOKEN_TRANSFER_PROXY = new MockParaSwapTokenTransferProxy();\\n  }\\n\\n  function getTokenTransferProxy() external view override returns (address) {\\n    return address(TOKEN_TRANSFER_PROXY);\\n  }\\n\\n  function expectSwap(\\n    address fromToken,\\n    address toToken,\\n    uint256 fromAmountMin,\\n    uint256 fromAmountMax,\\n    uint256 receivedAmount\\n  ) external {\\n    _expectingSwap = true;\\n    _expectedFromToken = fromToken;\\n    _expectedToToken = toToken;\\n    _expectedFromAmountMin = fromAmountMin;\\n    _expectedFromAmountMax = fromAmountMax;\\n    _receivedAmount = receivedAmount;\\n  }\\n\\n  function expectBuy(\\n    address fromToken,\\n    address toToken,\\n    uint256 fromAmount,\\n    uint256 toAmountMin,\\n    uint256 toAmountMax\\n  ) external {\\n    _expectingSwap = true;\\n    _expectedFromToken = fromToken;\\n    _expectedToToken = toToken;\\n    _fromAmount = fromAmount;\\n    _expectedToAmountMin = toAmountMin;\\n    _expectedToAmountMax = toAmountMax;\\n  }\\n\\n  function swap(\\n    address fromToken,\\n    address toToken,\\n    uint256 fromAmount,\\n    uint256 toAmount\\n  ) external returns (uint256) {\\n    require(_expectingSwap, 'Not expecting swap');\\n    require(fromToken == _expectedFromToken, 'Unexpected from token');\\n    require(toToken == _expectedToToken, 'Unexpected to token');\\n    require(\\n      fromAmount >= _expectedFromAmountMin && fromAmount <= _expectedFromAmountMax,\\n      'From amount out of range'\\n    );\\n    require(_receivedAmount >= toAmount, 'Received amount of tokens are less than expected');\\n    TOKEN_TRANSFER_PROXY.transferFrom(fromToken, msg.sender, address(this), fromAmount);\\n    MintableERC20(toToken).mint(_receivedAmount);\\n    IERC20(toToken).transfer(msg.sender, _receivedAmount);\\n    _expectingSwap = false;\\n    return _receivedAmount;\\n  }\\n\\n  function buy(\\n    address fromToken,\\n    address toToken,\\n    uint256 fromAmount,\\n    uint256 toAmount\\n  ) external returns (uint256) {\\n    require(_expectingSwap, 'Not expecting swap');\\n    require(fromToken == _expectedFromToken, 'Unexpected from token');\\n    require(toToken == _expectedToToken, 'Unexpected to token');\\n    require(\\n      toAmount >= _expectedToAmountMin && toAmount <= _expectedToAmountMax,\\n      'To amount out of range'\\n    );\\n    require(_fromAmount <= fromAmount, 'From amount of tokens are higher than expected');\\n    TOKEN_TRANSFER_PROXY.transferFrom(fromToken, msg.sender, address(this), _fromAmount);\\n    MintableERC20(toToken).mint(toAmount);\\n    IERC20(toToken).transfer(msg.sender, toAmount);\\n    _expectingSwap = false;\\n    return fromAmount;\\n  }\\n}\\n\",\"keccak256\":\"0xd65c343de51073e7565ee82d5592080b9e5dffc90e70ff02076d45c7c2c4d621\",\"license\":\"AGPL-3.0\"},\"contracts/mocks/swap/MockParaSwapTokenTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\n\\ncontract MockParaSwapTokenTransferProxy is Ownable {\\n  function transferFrom(\\n    address token,\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) external onlyOwner {\\n    IERC20(token).transferFrom(from, to, amount);\\n  }\\n}\\n\",\"keccak256\":\"0x613ab3074b0638634718aedd127155d73d801103ab3c16d63de4063f75686c7e\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":35265,"contract":"contracts/mocks/swap/MockParaSwapAugustus.sol:MockParaSwapAugustus","label":"_expectingSwap","offset":0,"slot":"0","type":"t_bool"},{"astId":35267,"contract":"contracts/mocks/swap/MockParaSwapAugustus.sol:MockParaSwapAugustus","label":"_expectedFromToken","offset":1,"slot":"0","type":"t_address"},{"astId":35269,"contract":"contracts/mocks/swap/MockParaSwapAugustus.sol:MockParaSwapAugustus","label":"_expectedToToken","offset":0,"slot":"1","type":"t_address"},{"astId":35271,"contract":"contracts/mocks/swap/MockParaSwapAugustus.sol:MockParaSwapAugustus","label":"_expectedFromAmountMin","offset":0,"slot":"2","type":"t_uint256"},{"astId":35273,"contract":"contracts/mocks/swap/MockParaSwapAugustus.sol:MockParaSwapAugustus","label":"_expectedFromAmountMax","offset":0,"slot":"3","type":"t_uint256"},{"astId":35275,"contract":"contracts/mocks/swap/MockParaSwapAugustus.sol:MockParaSwapAugustus","label":"_receivedAmount","offset":0,"slot":"4","type":"t_uint256"},{"astId":35277,"contract":"contracts/mocks/swap/MockParaSwapAugustus.sol:MockParaSwapAugustus","label":"_fromAmount","offset":0,"slot":"5","type":"t_uint256"},{"astId":35279,"contract":"contracts/mocks/swap/MockParaSwapAugustus.sol:MockParaSwapAugustus","label":"_expectedToAmountMax","offset":0,"slot":"6","type":"t_uint256"},{"astId":35281,"contract":"contracts/mocks/swap/MockParaSwapAugustus.sol:MockParaSwapAugustus","label":"_expectedToAmountMin","offset":0,"slot":"7","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/mocks/swap/MockParaSwapAugustusRegistry.sol":{"MockParaSwapAugustusRegistry":{"abi":[{"inputs":[{"internalType":"address","name":"augustus","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"augustus","type":"address"}],"name":"isValidAugustus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_35571":{"entryPoint":null,"id":35571,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":64,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:306:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"95:209:201","statements":[{"body":{"nodeType":"YulBlock","src":"141:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"150:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"153:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"143:6:201"},"nodeType":"YulFunctionCall","src":"143:12:201"},"nodeType":"YulExpressionStatement","src":"143:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"116:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"125:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"112:3:201"},"nodeType":"YulFunctionCall","src":"112:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"137:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"108:3:201"},"nodeType":"YulFunctionCall","src":"108:32:201"},"nodeType":"YulIf","src":"105:52:201"},{"nodeType":"YulVariableDeclaration","src":"166:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"185:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"179:5:201"},"nodeType":"YulFunctionCall","src":"179:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"170:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"258:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"267:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"270:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"260:6:201"},"nodeType":"YulFunctionCall","src":"260:12:201"},"nodeType":"YulExpressionStatement","src":"260:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"217:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"228:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"243:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"248:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"239:3:201"},"nodeType":"YulFunctionCall","src":"239:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"252:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"235:3:201"},"nodeType":"YulFunctionCall","src":"235:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"224:3:201"},"nodeType":"YulFunctionCall","src":"224:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"214:2:201"},"nodeType":"YulFunctionCall","src":"214:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"207:6:201"},"nodeType":"YulFunctionCall","src":"207:50:201"},"nodeType":"YulIf","src":"204:70:201"},{"nodeType":"YulAssignment","src":"283:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"293:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"283:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"61:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"72:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"84:6:201","type":""}],"src":"14:290:201"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60a060405234801561001057600080fd5b5060405161018438038061018483398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b60805160fc6100886000396000603a015260fc6000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063fb04e17b14602d575b600080fd5b60776038366004608b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b604051901515815260200160405180910390f35b600060208284031215609c57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811460bf57600080fd5b939250505056fea2646970667358221220412151c0dc108e7faecd0f2a0ef18ac2448e28c5190974bbf528192738276b3d64736f6c634300080a0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x184 CODESIZE SUB DUP1 PUSH2 0x184 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x40 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH2 0x70 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xFC PUSH2 0x88 PUSH1 0x0 CODECOPY PUSH1 0x0 PUSH1 0x3A ADD MSTORE PUSH1 0xFC 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 0xFB04E17B EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x77 PUSH1 0x38 CALLDATASIZE PUSH1 0x4 PUSH1 0x8B JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 AND EQ SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH1 0x9C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH1 0xBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 COINBASE 0x21 MLOAD 0xC0 0xDC LT DUP15 PUSH32 0xAECD0F2A0EF18AC2448E28C5190974BBF528192738276B3D64736F6C63430008 EXP STOP CALLER ","sourceMap":"172:287:169:-:0;;;274:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;310:19:169;;;172:287;;14:290:201;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:201;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:201:o;:::-;172:287:169;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@isValidAugustus_35584":{"entryPoint":null,"id":35584,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":139,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:517:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"84:239:201","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:201"},"nodeType":"YulFunctionCall","src":"132:12:201"},"nodeType":"YulExpressionStatement","src":"132:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"105:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"114:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"101:3:201"},"nodeType":"YulFunctionCall","src":"101:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"126:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"97:3:201"},"nodeType":"YulFunctionCall","src":"97:32:201"},"nodeType":"YulIf","src":"94:52:201"},{"nodeType":"YulVariableDeclaration","src":"155:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"181:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"168:12:201"},"nodeType":"YulFunctionCall","src":"168:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"159:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"277:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"286:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"289:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"279:6:201"},"nodeType":"YulFunctionCall","src":"279:12:201"},"nodeType":"YulExpressionStatement","src":"279:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"213:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"224:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"231:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"220:3:201"},"nodeType":"YulFunctionCall","src":"220:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"210:2:201"},"nodeType":"YulFunctionCall","src":"210:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"203:6:201"},"nodeType":"YulFunctionCall","src":"203:73:201"},"nodeType":"YulIf","src":"200:93:201"},{"nodeType":"YulAssignment","src":"302:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"312:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"302:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"50:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"61:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"73:6:201","type":""}],"src":"14:309:201"},{"body":{"nodeType":"YulBlock","src":"423:92:201","statements":[{"nodeType":"YulAssignment","src":"433:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"445:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"456:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"441:3:201"},"nodeType":"YulFunctionCall","src":"441:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"433:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"475:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"500:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"493:6:201"},"nodeType":"YulFunctionCall","src":"493:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"486:6:201"},"nodeType":"YulFunctionCall","src":"486:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"468:6:201"},"nodeType":"YulFunctionCall","src":"468:41:201"},"nodeType":"YulExpressionStatement","src":"468:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"392:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"403:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"414:4:201","type":""}],"src":"328:187:201"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"35561":[{"length":32,"start":58}]},"linkReferences":{},"object":"6080604052348015600f57600080fd5b506004361060285760003560e01c8063fb04e17b14602d575b600080fd5b60776038366004608b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b604051901515815260200160405180910390f35b600060208284031215609c57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811460bf57600080fd5b939250505056fea2646970667358221220412151c0dc108e7faecd0f2a0ef18ac2448e28c5190974bbf528192738276b3d64736f6c634300080a0033","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 0xFB04E17B EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x77 PUSH1 0x38 CALLDATASIZE PUSH1 0x4 PUSH1 0x8B JUMP JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 AND EQ SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH1 0x9C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH1 0xBF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 COINBASE 0x21 MLOAD 0xC0 0xDC LT DUP15 PUSH32 0xAECD0F2A0EF18AC2448E28C5190974BBF528192738276B3D64736F6C63430008 EXP STOP CALLER ","sourceMap":"172:287:169:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;338:119;;;;;;:::i;:::-;444:8;432:20;;;;;;;;338:119;;;;493:14:201;;486:22;468:41;;456:2;441:18;338:119:169;;;;;;;14:309:201;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;231:42;224:5;220:54;213:5;210:65;200:93;;289:1;286;279:12;200:93;312:5;14:309;-1:-1:-1;;;14:309:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"50400","executionCost":"infinite","totalCost":"infinite"},"external":{"isValidAugustus(address)":"infinite"}},"methodIdentifiers":{"isValidAugustus(address)":"fb04e17b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"augustus\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"augustus\",\"type\":\"address\"}],\"name\":\"isValidAugustus\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/swap/MockParaSwapAugustusRegistry.sol\":\"MockParaSwapAugustusRegistry\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"contracts/adapters/paraswap/interfaces/IParaSwapAugustusRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IParaSwapAugustusRegistry {\\n  function isValidAugustus(address augustus) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xd5e1e2b15318733975a6dd1aa3ff16842a88f2638458538e1a55ee37a4f3dddc\",\"license\":\"AGPL-3.0\"},\"contracts/mocks/swap/MockParaSwapAugustusRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IParaSwapAugustusRegistry} from '../../adapters/paraswap/interfaces/IParaSwapAugustusRegistry.sol';\\n\\ncontract MockParaSwapAugustusRegistry is IParaSwapAugustusRegistry {\\n  address immutable AUGUSTUS;\\n\\n  constructor(address augustus) {\\n    AUGUSTUS = augustus;\\n  }\\n\\n  function isValidAugustus(address augustus) external view override returns (bool) {\\n    return augustus == AUGUSTUS;\\n  }\\n}\\n\",\"keccak256\":\"0xa40253ecbfefcbbeb661408b8cbb02453067d9944a2e86ce3084ff25ace0cf88\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/mocks/swap/MockParaSwapTokenTransferProxy.sol":{"MockParaSwapTokenTransferProxy":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_1500":{"entryPoint":null,"id":1500,"parameterSlots":0,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061056a806100616000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806315dacbea14610051578063715018a6146100665780638da5cb5b1461006e578063f2fde38b1461009a575b600080fd5b61006461005f3660046104a5565b6100ad565b005b6100646101db565b6000546040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100646100a83660046104f0565b6102cb565b60005473ffffffffffffffffffffffffffffffffffffffff163314610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152604482018390528516906323b872dd906064016020604051808303816000875af11580156101b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d49190610512565b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461025c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161012a565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff16331461034c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161012a565b73ffffffffffffffffffffffffffffffffffffffff81166103ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161012a565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b803573ffffffffffffffffffffffffffffffffffffffff811681146104a057600080fd5b919050565b600080600080608085870312156104bb57600080fd5b6104c48561047c565b93506104d26020860161047c565b92506104e06040860161047c565b9396929550929360600135925050565b60006020828403121561050257600080fd5b61050b8261047c565b9392505050565b60006020828403121561052457600080fd5b8151801515811461050b57600080fdfea2646970667358221220b43a8a2581e80c029c63b8e78371d116f7b3aab58abe9a8f2f31ef9424dc7b2464736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 DUP3 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH2 0x56A DUP1 PUSH2 0x61 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x15DACBEA EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x66 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x6E JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x9A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0x4A5 JUMP JUMPDEST PUSH2 0xAD JUMP JUMPDEST STOP JUMPDEST PUSH2 0x64 PUSH2 0x1DB JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x64 PUSH2 0xA8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F0 JUMP JUMPDEST PUSH2 0x2CB JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x133 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE DUP6 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1B0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D4 SWAP2 SWAP1 PUSH2 0x512 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x25C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x12A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x34C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x12A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x3EF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x12A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4C4 DUP6 PUSH2 0x47C JUMP JUMPDEST SWAP4 POP PUSH2 0x4D2 PUSH1 0x20 DUP7 ADD PUSH2 0x47C JUMP JUMPDEST SWAP3 POP PUSH2 0x4E0 PUSH1 0x40 DUP7 ADD PUSH2 0x47C JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP3 SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x502 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x50B DUP3 PUSH2 0x47C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x524 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x50B JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB4 GASPRICE DUP11 0x25 DUP2 0xE8 0xC MUL SWAP13 PUSH4 0xB8E78371 0xD1 AND 0xF7 0xB3 0xAA 0xB5 DUP11 0xBE SWAP11 DUP16 0x2F BALANCE 0xEF SWAP5 0x24 0xDC PUSH28 0x2464736F6C634300080A003300000000000000000000000000000000 ","sourceMap":"256:230:170:-:0;;;;;;;;;;;;-1:-1:-1;835:17:11;873:18;;-1:-1:-1;;;;;;873:18:11;678:10:4;873:18:11;;;;;902:43;;678:10:4;;;;902:43:11;;835:17;;902:43;829:121;256:230:170;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@owner_1509":{"entryPoint":null,"id":1509,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_1544":{"entryPoint":475,"id":1544,"parameterSlots":0,"returnSlots":0},"@transferFrom_35616":{"entryPoint":173,"id":35616,"parameterSlots":4,"returnSlots":0},"@transferOwnership_1572":{"entryPoint":715,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":1148,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":1264,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_addresst_uint256":{"entryPoint":1189,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":1298,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2495:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:147:201","statements":[{"nodeType":"YulAssignment","src":"73:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:201"},"nodeType":"YulFunctionCall","src":"82:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:201"}]},{"body":{"nodeType":"YulBlock","src":"188:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"197:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"200:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"190:6:201"},"nodeType":"YulFunctionCall","src":"190:12:201"},"nodeType":"YulExpressionStatement","src":"190:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"142:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:201"},"nodeType":"YulFunctionCall","src":"131:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:201"},"nodeType":"YulFunctionCall","src":"121:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:201"},"nodeType":"YulFunctionCall","src":"114:73:201"},"nodeType":"YulIf","src":"111:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:201","type":""}],"src":"14:196:201"},{"body":{"nodeType":"YulBlock","src":"336:282:201","statements":[{"body":{"nodeType":"YulBlock","src":"383:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"392:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"395:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"385:6:201"},"nodeType":"YulFunctionCall","src":"385:12:201"},"nodeType":"YulExpressionStatement","src":"385:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"357:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"366:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"353:3:201"},"nodeType":"YulFunctionCall","src":"353:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"378:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"349:3:201"},"nodeType":"YulFunctionCall","src":"349:33:201"},"nodeType":"YulIf","src":"346:53:201"},{"nodeType":"YulAssignment","src":"408:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"437:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"418:18:201"},"nodeType":"YulFunctionCall","src":"418:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"408:6:201"}]},{"nodeType":"YulAssignment","src":"456:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"489:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"500:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"485:3:201"},"nodeType":"YulFunctionCall","src":"485:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"466:18:201"},"nodeType":"YulFunctionCall","src":"466:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"456:6:201"}]},{"nodeType":"YulAssignment","src":"513:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"546:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"557:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"542:3:201"},"nodeType":"YulFunctionCall","src":"542:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"523:18:201"},"nodeType":"YulFunctionCall","src":"523:38:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"513:6:201"}]},{"nodeType":"YulAssignment","src":"570:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"597:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"608:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"593:3:201"},"nodeType":"YulFunctionCall","src":"593:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"580:12:201"},"nodeType":"YulFunctionCall","src":"580:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"570:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"278:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"289:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"301:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"309:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"317:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"325:6:201","type":""}],"src":"215:403:201"},{"body":{"nodeType":"YulBlock","src":"724:125:201","statements":[{"nodeType":"YulAssignment","src":"734:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"746:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"757:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"742:3:201"},"nodeType":"YulFunctionCall","src":"742:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"734:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"776:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"791:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"799:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"787:3:201"},"nodeType":"YulFunctionCall","src":"787:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"769:6:201"},"nodeType":"YulFunctionCall","src":"769:74:201"},"nodeType":"YulExpressionStatement","src":"769:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"693:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"704:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"715:4:201","type":""}],"src":"623:226:201"},{"body":{"nodeType":"YulBlock","src":"924:116:201","statements":[{"body":{"nodeType":"YulBlock","src":"970:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"979:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"982:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"972:6:201"},"nodeType":"YulFunctionCall","src":"972:12:201"},"nodeType":"YulExpressionStatement","src":"972:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"945:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"954:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"941:3:201"},"nodeType":"YulFunctionCall","src":"941:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"966:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"937:3:201"},"nodeType":"YulFunctionCall","src":"937:32:201"},"nodeType":"YulIf","src":"934:52:201"},{"nodeType":"YulAssignment","src":"995:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1024:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1005:18:201"},"nodeType":"YulFunctionCall","src":"1005:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"995:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"890:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"901:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"913:6:201","type":""}],"src":"854:186:201"},{"body":{"nodeType":"YulBlock","src":"1219:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1236:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1247:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1229:6:201"},"nodeType":"YulFunctionCall","src":"1229:21:201"},"nodeType":"YulExpressionStatement","src":"1229:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1270:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1281:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1266:3:201"},"nodeType":"YulFunctionCall","src":"1266:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"1286:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1259:6:201"},"nodeType":"YulFunctionCall","src":"1259:30:201"},"nodeType":"YulExpressionStatement","src":"1259:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1309:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1320:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1305:3:201"},"nodeType":"YulFunctionCall","src":"1305:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"1325:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1298:6:201"},"nodeType":"YulFunctionCall","src":"1298:62:201"},"nodeType":"YulExpressionStatement","src":"1298:62:201"},{"nodeType":"YulAssignment","src":"1369:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1381:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1392:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1377:3:201"},"nodeType":"YulFunctionCall","src":"1377:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1369:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1196:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1210:4:201","type":""}],"src":"1045:356:201"},{"body":{"nodeType":"YulBlock","src":"1563:241:201","statements":[{"nodeType":"YulAssignment","src":"1573:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1585:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1596:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1581:3:201"},"nodeType":"YulFunctionCall","src":"1581:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1573:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"1608:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1618:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1612:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1676:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1691:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1699:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1687:3:201"},"nodeType":"YulFunctionCall","src":"1687:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1669:6:201"},"nodeType":"YulFunctionCall","src":"1669:34:201"},"nodeType":"YulExpressionStatement","src":"1669:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1723:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1734:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1719:3:201"},"nodeType":"YulFunctionCall","src":"1719:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"1743:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1751:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1739:3:201"},"nodeType":"YulFunctionCall","src":"1739:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1712:6:201"},"nodeType":"YulFunctionCall","src":"1712:43:201"},"nodeType":"YulExpressionStatement","src":"1712:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1775:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1786:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1771:3:201"},"nodeType":"YulFunctionCall","src":"1771:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"1791:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1764:6:201"},"nodeType":"YulFunctionCall","src":"1764:34:201"},"nodeType":"YulExpressionStatement","src":"1764:34:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1516:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1527:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1535:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1543:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1554:4:201","type":""}],"src":"1406:398:201"},{"body":{"nodeType":"YulBlock","src":"1887:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"1933:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1942:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1945:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1935:6:201"},"nodeType":"YulFunctionCall","src":"1935:12:201"},"nodeType":"YulExpressionStatement","src":"1935:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1908:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1917:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1904:3:201"},"nodeType":"YulFunctionCall","src":"1904:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1929:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1900:3:201"},"nodeType":"YulFunctionCall","src":"1900:32:201"},"nodeType":"YulIf","src":"1897:52:201"},{"nodeType":"YulVariableDeclaration","src":"1958:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1977:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1971:5:201"},"nodeType":"YulFunctionCall","src":"1971:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1962:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2040:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2049:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2052:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2042:6:201"},"nodeType":"YulFunctionCall","src":"2042:12:201"},"nodeType":"YulExpressionStatement","src":"2042:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2009:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2030:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2023:6:201"},"nodeType":"YulFunctionCall","src":"2023:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2016:6:201"},"nodeType":"YulFunctionCall","src":"2016:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2006:2:201"},"nodeType":"YulFunctionCall","src":"2006:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1999:6:201"},"nodeType":"YulFunctionCall","src":"1999:40:201"},"nodeType":"YulIf","src":"1996:60:201"},{"nodeType":"YulAssignment","src":"2065:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"2075:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2065:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1853:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1864:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1876:6:201","type":""}],"src":"1809:277:201"},{"body":{"nodeType":"YulBlock","src":"2265:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2282:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2293:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2275:6:201"},"nodeType":"YulFunctionCall","src":"2275:21:201"},"nodeType":"YulExpressionStatement","src":"2275:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2316:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2327:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2312:3:201"},"nodeType":"YulFunctionCall","src":"2312:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2332:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2305:6:201"},"nodeType":"YulFunctionCall","src":"2305:30:201"},"nodeType":"YulExpressionStatement","src":"2305:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2355:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2366:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2351:3:201"},"nodeType":"YulFunctionCall","src":"2351:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"2371:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2344:6:201"},"nodeType":"YulFunctionCall","src":"2344:62:201"},"nodeType":"YulExpressionStatement","src":"2344:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2426:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2437:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2422:3:201"},"nodeType":"YulFunctionCall","src":"2422:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"2442:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2415:6:201"},"nodeType":"YulFunctionCall","src":"2415:36:201"},"nodeType":"YulExpressionStatement","src":"2415:36:201"},{"nodeType":"YulAssignment","src":"2460:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2472:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2483:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2468:3:201"},"nodeType":"YulFunctionCall","src":"2468:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2460:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2242:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2256:4:201","type":""}],"src":"2091:402:201"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := abi_decode_address(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061004c5760003560e01c806315dacbea14610051578063715018a6146100665780638da5cb5b1461006e578063f2fde38b1461009a575b600080fd5b61006461005f3660046104a5565b6100ad565b005b6100646101db565b6000546040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6100646100a83660046104f0565b6102cb565b60005473ffffffffffffffffffffffffffffffffffffffff163314610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152604482018390528516906323b872dd906064016020604051808303816000875af11580156101b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d49190610512565b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461025c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161012a565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff16331461034c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161012a565b73ffffffffffffffffffffffffffffffffffffffff81166103ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161012a565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b803573ffffffffffffffffffffffffffffffffffffffff811681146104a057600080fd5b919050565b600080600080608085870312156104bb57600080fd5b6104c48561047c565b93506104d26020860161047c565b92506104e06040860161047c565b9396929550929360600135925050565b60006020828403121561050257600080fd5b61050b8261047c565b9392505050565b60006020828403121561052457600080fd5b8151801515811461050b57600080fdfea2646970667358221220b43a8a2581e80c029c63b8e78371d116f7b3aab58abe9a8f2f31ef9424dc7b2464736f6c634300080a0033","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 0x15DACBEA EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x66 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x6E JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x9A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x64 PUSH2 0x5F CALLDATASIZE PUSH1 0x4 PUSH2 0x4A5 JUMP JUMPDEST PUSH2 0xAD JUMP JUMPDEST STOP JUMPDEST PUSH2 0x64 PUSH2 0x1DB JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x64 PUSH2 0xA8 CALLDATASIZE PUSH1 0x4 PUSH2 0x4F0 JUMP JUMPDEST PUSH2 0x2CB JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x133 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE DUP6 AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1B0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D4 SWAP2 SWAP1 PUSH2 0x512 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x25C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x12A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x34C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x12A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x3EF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x12A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4C4 DUP6 PUSH2 0x47C JUMP JUMPDEST SWAP4 POP PUSH2 0x4D2 PUSH1 0x20 DUP7 ADD PUSH2 0x47C JUMP JUMPDEST SWAP3 POP PUSH2 0x4E0 PUSH1 0x40 DUP7 ADD PUSH2 0x47C JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP3 SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x502 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x50B DUP3 PUSH2 0x47C JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x524 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x50B JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB4 GASPRICE DUP11 0x25 DUP2 0xE8 0xC MUL SWAP13 PUSH4 0xB8E78371 0xD1 AND 0xF7 0xB3 0xAA 0xB5 DUP11 0xBE SWAP11 DUP16 0x2F BALANCE 0xEF SWAP5 0x24 0xDC PUSH28 0x2464736F6C634300080A003300000000000000000000000000000000 ","sourceMap":"256:230:170:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;311:173;;;;;;:::i;:::-;;:::i;:::-;;1601:135:11;;;:::i;1018:71::-;1056:7;1078:6;1018:71;;;1078:6;;;;769:74:201;;1018:71:11;;;;;757:2:201;1018:71:11;;;1875:226;;;;;;:::i;:::-;;:::i;311:173:170:-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;1247:2:201;1196:67:11;;;1229:21:201;;;1266:18;;;1259:30;1325:34;1305:18;;;1298:62;1377:18;;1196:67:11;;;;;;;;;435:44:170::1;::::0;;;;:26:::1;1687:15:201::0;;;435:44:170::1;::::0;::::1;1669:34:201::0;1739:15;;;1719:18;;;1712:43;1771:18;;;1764:34;;;435:26:170;::::1;::::0;::::1;::::0;1581:18:201;;435:44:170::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;311:173:::0;;;;:::o;1601:135:11:-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;1247:2:201;1196:67:11;;;1229:21:201;;;1266:18;;;1259:30;1325:34;1305:18;;;1298:62;1377:18;;1196:67:11;1045:356:201;1196:67:11;1703:1:::1;1687:6:::0;;1666:40:::1;::::0;::::1;1687:6:::0;;::::1;::::0;1666:40:::1;::::0;1703:1;;1666:40:::1;1729:1;1712:19:::0;;;::::1;::::0;;1601:135::o;1875:226::-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;1247:2:201;1196:67:11;;;1229:21:201;;;1266:18;;;1259:30;1325:34;1305:18;;;1298:62;1377:18;;1196:67:11;1045:356:201;1196:67:11;1959:22:::1;::::0;::::1;1951:73;;;::::0;::::1;::::0;;2293:2:201;1951:73:11::1;::::0;::::1;2275:21:201::0;2332:2;2312:18;;;2305:30;2371:34;2351:18;;;2344:62;2442:8;2422:18;;;2415:36;2468:19;;1951:73:11::1;2091:402:201::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;::::1;::::0;;::::1;::::0;2056:6;::::1;::::0;2035:38:::1;::::0;::::1;2079:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1875:226::o;14:196:201:-;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:403::-;301:6;309;317;325;378:3;366:9;357:7;353:23;349:33;346:53;;;395:1;392;385:12;346:53;418:29;437:9;418:29;:::i;:::-;408:39;;466:38;500:2;489:9;485:18;466:38;:::i;:::-;456:48;;523:38;557:2;546:9;542:18;523:38;:::i;:::-;215:403;;;;-1:-1:-1;513:48:201;;608:2;593:18;580:32;;-1:-1:-1;;215:403:201:o;854:186::-;913:6;966:2;954:9;945:7;941:23;937:32;934:52;;;982:1;979;972:12;934:52;1005:29;1024:9;1005:29;:::i;:::-;995:39;854:186;-1:-1:-1;;;854:186:201:o;1809:277::-;1876:6;1929:2;1917:9;1908:7;1904:23;1900:32;1897:52;;;1945:1;1942;1935:12;1897:52;1977:9;1971:16;2030:5;2023:13;2016:21;2009:5;2006:32;1996:60;;2052:1;2049;2042:12"},"gasEstimates":{"creation":{"codeDepositCost":"277200","executionCost":"26091","totalCost":"303291"},"external":{"owner()":"2302","renounceOwnership()":"30126","transferFrom(address,address,address,uint256)":"infinite","transferOwnership(address)":"30369"}},"methodIdentifiers":{"owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferFrom(address,address,address,uint256)":"15dacbea","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/swap/MockParaSwapTokenTransferProxy.sol\":\"MockParaSwapTokenTransferProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable is Context {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial owner.\\n   */\\n  constructor() {\\n    address msgSender = _msgSender();\\n    _owner = msgSender;\\n    emit OwnershipTransferred(address(0), msgSender);\\n  }\\n\\n  /**\\n   * @dev Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Leaves the contract without owner. It will not be possible to call\\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\\n   *\\n   * NOTE: Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public virtual onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = address(0);\\n  }\\n\\n  /**\\n   * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function transferOwnership(address newOwner) public virtual onlyOwner {\\n    require(newOwner != address(0), 'Ownable: new owner is the zero address');\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\",\"keccak256\":\"0x3ce185c4f579e32006f8893dbfdc1b5d878c0e2cafd1508f7ceb081698bc81f9\",\"license\":\"MIT\"},\"contracts/mocks/swap/MockParaSwapTokenTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\n\\ncontract MockParaSwapTokenTransferProxy is Ownable {\\n  function transferFrom(\\n    address token,\\n    address from,\\n    address to,\\n    uint256 amount\\n  ) external onlyOwner {\\n    IERC20(token).transferFrom(from, to, amount);\\n  }\\n}\\n\",\"keccak256\":\"0x613ab3074b0638634718aedd127155d73d801103ab3c16d63de4063f75686c7e\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1472,"contract":"contracts/mocks/swap/MockParaSwapTokenTransferProxy.sol:MockParaSwapTokenTransferProxy","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/mocks/testnet-helpers/Faucet.sol":{"Faucet":{"abi":[{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"bool","name":"permissioned","type":"bool"},{"internalType":"uint256","name":"maxMinAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"getMaximumMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"isMintable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPermissioned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxMintAmount","type":"uint256"}],"name":"setMaximumMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"active","type":"bool"}],"name":"setMintable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"permissioned","type":"bool"}],"name":"setPermissioned","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"childContracts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setProtectedOfChild","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"childContracts","type":"address[]"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnershipOfChild","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Ownable Faucet Contract","kind":"dev","methods":{"getMaximumMintAmount()":{"returns":{"_0":"The maximum amount of tokens per mint allowed (whole tokens)"}},"isMintable(address)":{"params":{"asset":"The address of the asset"},"returns":{"_0":"True if the asset is mintable, false otherwise"}},"isPermissioned()":{"returns":{"_0":"Returns a boolean, if true the mode is enabled, if false is disabled"}},"mint(address,address,uint256)":{"params":{"amount":"The amount of tokens to mint","to":"The address to send the minted tokens","token":"The address of the token to perform the mint"},"returns":{"_0":"The amount minted*"}},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"setMaximumMintAmount(uint256)":{"params":{"newMaxMintAmount":"The new value of maximum amount of tokens per mint (whole tokens)"}},"setMintable(address,bool)":{"params":{"active":"True to enable, false to disable","asset":"The address of the asset"}},"setPermissioned(bool)":{"params":{"value":"If true, ask for authentication at `mint` function, if false, disable the authentication"}},"setProtectedOfChild(address[],bool)":{"params":{"childContracts":"A list of child token contract addresses","state":"True if tokens are only mintable through Faucet, false otherwise"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"transferOwnershipOfChild(address[],address)":{"params":{"childContracts":"A list of child contract addresses","newOwner":"The address of the new owner"}}},"title":"Faucet","version":1},"evm":{"bytecode":{"functionDebugData":{"@_1500":{"entryPoint":null,"id":1500,"parameterSlots":0,"returnSlots":0},"@_35669":{"entryPoint":null,"id":35669,"parameterSlots":3,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@transferOwnership_1572":{"entryPoint":159,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_addresst_boolt_uint256_fromMemory":{"entryPoint":432,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1297:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"126:401:201","statements":[{"body":{"nodeType":"YulBlock","src":"172:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"181:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"184:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"174:6:201"},"nodeType":"YulFunctionCall","src":"174:12:201"},"nodeType":"YulExpressionStatement","src":"174:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"147:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"156:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"143:3:201"},"nodeType":"YulFunctionCall","src":"143:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"168:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"139:3:201"},"nodeType":"YulFunctionCall","src":"139:32:201"},"nodeType":"YulIf","src":"136:52:201"},{"nodeType":"YulVariableDeclaration","src":"197:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"216:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"210:5:201"},"nodeType":"YulFunctionCall","src":"210:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"201:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"289:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"298:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"301:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"291:6:201"},"nodeType":"YulFunctionCall","src":"291:12:201"},"nodeType":"YulExpressionStatement","src":"291:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"248:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"259:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"274:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"279:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"270:3:201"},"nodeType":"YulFunctionCall","src":"270:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"283:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"266:3:201"},"nodeType":"YulFunctionCall","src":"266:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"255:3:201"},"nodeType":"YulFunctionCall","src":"255:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"245:2:201"},"nodeType":"YulFunctionCall","src":"245:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"238:6:201"},"nodeType":"YulFunctionCall","src":"238:50:201"},"nodeType":"YulIf","src":"235:70:201"},{"nodeType":"YulAssignment","src":"314:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"324:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"314:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"338:40:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"363:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"374:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"359:3:201"},"nodeType":"YulFunctionCall","src":"359:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"353:5:201"},"nodeType":"YulFunctionCall","src":"353:25:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"342:7:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"435:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"444:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"447:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"437:6:201"},"nodeType":"YulFunctionCall","src":"437:12:201"},"nodeType":"YulExpressionStatement","src":"437:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"400:7:201"},{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"423:7:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"416:6:201"},"nodeType":"YulFunctionCall","src":"416:15:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"409:6:201"},"nodeType":"YulFunctionCall","src":"409:23:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"397:2:201"},"nodeType":"YulFunctionCall","src":"397:36:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"390:6:201"},"nodeType":"YulFunctionCall","src":"390:44:201"},"nodeType":"YulIf","src":"387:64:201"},{"nodeType":"YulAssignment","src":"460:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"470:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"460:6:201"}]},{"nodeType":"YulAssignment","src":"486:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"506:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"517:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"502:3:201"},"nodeType":"YulFunctionCall","src":"502:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"496:5:201"},"nodeType":"YulFunctionCall","src":"496:25:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"486:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_boolt_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"76:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"87:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"99:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"107:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"115:6:201","type":""}],"src":"14:513:201"},{"body":{"nodeType":"YulBlock","src":"706:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"723:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"734:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"716:6:201"},"nodeType":"YulFunctionCall","src":"716:21:201"},"nodeType":"YulExpressionStatement","src":"716:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"757:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"768:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"753:3:201"},"nodeType":"YulFunctionCall","src":"753:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"773:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"746:6:201"},"nodeType":"YulFunctionCall","src":"746:30:201"},"nodeType":"YulExpressionStatement","src":"746:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"796:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"807:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"792:3:201"},"nodeType":"YulFunctionCall","src":"792:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"812:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"785:6:201"},"nodeType":"YulFunctionCall","src":"785:62:201"},"nodeType":"YulExpressionStatement","src":"785:62:201"},{"nodeType":"YulAssignment","src":"856:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"868:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"879:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"864:3:201"},"nodeType":"YulFunctionCall","src":"864:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"856:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"683:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"697:4:201","type":""}],"src":"532:356:201"},{"body":{"nodeType":"YulBlock","src":"1067:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1084:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1095:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1077:6:201"},"nodeType":"YulFunctionCall","src":"1077:21:201"},"nodeType":"YulExpressionStatement","src":"1077:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1118:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1129:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1114:3:201"},"nodeType":"YulFunctionCall","src":"1114:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"1134:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1107:6:201"},"nodeType":"YulFunctionCall","src":"1107:30:201"},"nodeType":"YulExpressionStatement","src":"1107:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1157:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1168:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1153:3:201"},"nodeType":"YulFunctionCall","src":"1153:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"1173:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1146:6:201"},"nodeType":"YulFunctionCall","src":"1146:62:201"},"nodeType":"YulExpressionStatement","src":"1146:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1228:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1239:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1224:3:201"},"nodeType":"YulFunctionCall","src":"1224:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"1244:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1217:6:201"},"nodeType":"YulFunctionCall","src":"1217:36:201"},"nodeType":"YulExpressionStatement","src":"1217:36:201"},{"nodeType":"YulAssignment","src":"1262:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1274:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1285:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1270:3:201"},"nodeType":"YulFunctionCall","src":"1270:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1262:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1044:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1058:4:201","type":""}],"src":"893:402:201"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_addresst_boolt_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        if iszero(eq(value_1, iszero(iszero(value_1)))) { revert(0, 0) }\n        value1 := value_1\n        value2 := mload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60806040523480156200001157600080fd5b50604051620012d5380380620012d58339810160408190526200003491620001b0565b600080546001600160a01b03191633908117825560405190918291600080516020620012b5833981519152908290a3506001600160a01b0383166200007857600080fd5b62000083836200009f565b6003805460ff1916921515929092179091556001555062000207565b6000546001600160a01b03163314620000ff5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b038116620001665760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000f6565b600080546040516001600160a01b0380851693921691600080516020620012b583398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080600060608486031215620001c657600080fd5b83516001600160a01b0381168114620001de57600080fd5b60208501519093508015158114620001f557600080fd5b80925050604084015190509250925092565b61109e80620002176000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c8063c6c3bbe611610081578063e2a4157c1161005b578063e2a4157c146101cf578063f2fde38b146101da578063f7eb06c4146101ed57600080fd5b8063c6c3bbe614610193578063ca51a903146101b4578063dd26b1d3146101c757600080fd5b8063715018a6116100b2578063715018a6146101505780638da5cb5b146101585780639420d4761461018057600080fd5b80631a678cd3146100d9578063222b15fb146100ee578063506f26cc1461013d575b600080fd5b6100ec6100e7366004610c38565b610200565b005b6101286100fc366004610c85565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff161590565b60405190151581526020015b60405180910390f35b6100ec61014b366004610cec565b6102b7565b6100ec610406565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610134565b6100ec61018e366004610d40565b6104f6565b6101a66101a1366004610d59565b61057c565b604051908152602001610134565b6100ec6101c2366004610d95565b610858565b6001546101a6565b60035460ff16610128565b6100ec6101e8366004610c85565b6109a1565b6100ec6101fb366004610dec565b610b52565b60005473ffffffffffffffffffffffffffffffffffffffff163314610286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161027d565b60005b828110156104005783838281811061035557610355610e23565b905060200201602081019061036a9190610c85565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152919091169063f2fde38b90602401600060405180830381600087803b1580156103d557600080fd5b505af11580156103e9573d6000803e3d6000fd5b5050505080806103f890610e81565b91505061033b565b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161027d565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161027d565b600155565b60035460009060ff161515600114156106105760005473ffffffffffffffffffffffffffffffffffffffff163314610610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161027d565b73ffffffffffffffffffffffffffffffffffffffff841660009081526002602052604090205460ff16156106a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4572726f723a206e6f74206d696e7461626c6500000000000000000000000000604482015260640161027d565b8373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f9190610eba565b61071a90600a610fff565b600154610727919061100e565b8211156107b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4572726f723a204d696e74206c696d6974207472616e73616374696f6e20657860448201527f6365656465640000000000000000000000000000000000000000000000000000606482015260840161027d565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490528516906340c10f19906044016020604051808303816000875af115801561082b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084f919061104b565b50909392505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161027d565b60005b82811015610400578383828181106108f6576108f6610e23565b905060200201602081019061090b9190610c85565b6040517f1c02bc31000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff9190911690631c02bc3190602401600060405180830381600087803b15801561097657600080fd5b505af115801561098a573d6000803e3d6000fd5b50505050808061099990610e81565b9150506108dc565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161027d565b73ffffffffffffffffffffffffffffffffffffffff8116610ac5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161027d565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161027d565b73ffffffffffffffffffffffffffffffffffffffff909116600090815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115919091179055565b8015158114610c3557600080fd5b50565b600060208284031215610c4a57600080fd5b8135610c5581610c27565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c8057600080fd5b919050565b600060208284031215610c9757600080fd5b610c5582610c5c565b60008083601f840112610cb257600080fd5b50813567ffffffffffffffff811115610cca57600080fd5b6020830191508360208260051b8501011115610ce557600080fd5b9250929050565b600080600060408486031215610d0157600080fd5b833567ffffffffffffffff811115610d1857600080fd5b610d2486828701610ca0565b9094509250610d37905060208501610c5c565b90509250925092565b600060208284031215610d5257600080fd5b5035919050565b600080600060608486031215610d6e57600080fd5b610d7784610c5c565b9250610d8560208501610c5c565b9150604084013590509250925092565b600080600060408486031215610daa57600080fd5b833567ffffffffffffffff811115610dc157600080fd5b610dcd86828701610ca0565b9094509250506020840135610de181610c27565b809150509250925092565b60008060408385031215610dff57600080fd5b610e0883610c5c565b91506020830135610e1881610c27565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610eb357610eb3610e52565b5060010190565b600060208284031215610ecc57600080fd5b815160ff81168114610c5557600080fd5b600181815b80851115610f3657817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610f1c57610f1c610e52565b80851615610f2957918102915b93841c9390800290610ee2565b509250929050565b600082610f4d57506001610ff9565b81610f5a57506000610ff9565b8160018114610f705760028114610f7a57610f96565b6001915050610ff9565b60ff841115610f8b57610f8b610e52565b50506001821b610ff9565b5060208310610133831016604e8410600b8410161715610fb9575081810a610ff9565b610fc38383610edd565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610ff557610ff5610e52565b0290505b92915050565b6000610c5560ff841683610f3e565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561104657611046610e52565b500290565b60006020828403121561105d57600080fd5b8151610c5581610c2756fea264697066735822122042ee87c362c023968f528f743b4b754d43798bad978b093bcdae6aa3c0ecb33b64736f6c634300080a00338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x12D5 CODESIZE SUB DUP1 PUSH3 0x12D5 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x1B0 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 DUP3 SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x12B5 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 DUP3 SWAP1 LOG3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH3 0x78 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x83 DUP4 PUSH3 0x9F JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP3 ISZERO ISZERO SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x1 SSTORE POP PUSH3 0x207 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH3 0xFF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x166 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0xF6 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x12B5 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 LOG3 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 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x1C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP4 POP DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x1F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SWAP3 POP POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0x109E DUP1 PUSH3 0x217 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 0xD4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC6C3BBE6 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xE2A4157C GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xE2A4157C EQ PUSH2 0x1CF JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1DA JUMPI DUP1 PUSH4 0xF7EB06C4 EQ PUSH2 0x1ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC6C3BBE6 EQ PUSH2 0x193 JUMPI DUP1 PUSH4 0xCA51A903 EQ PUSH2 0x1B4 JUMPI DUP1 PUSH4 0xDD26B1D3 EQ PUSH2 0x1C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x715018A6 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x150 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x158 JUMPI DUP1 PUSH4 0x9420D476 EQ PUSH2 0x180 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1A678CD3 EQ PUSH2 0xD9 JUMPI DUP1 PUSH4 0x222B15FB EQ PUSH2 0xEE JUMPI DUP1 PUSH4 0x506F26CC EQ PUSH2 0x13D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xEC PUSH2 0xE7 CALLDATASIZE PUSH1 0x4 PUSH2 0xC38 JUMP JUMPDEST PUSH2 0x200 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x128 PUSH2 0xFC CALLDATASIZE PUSH1 0x4 PUSH2 0xC85 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xEC PUSH2 0x14B CALLDATASIZE PUSH1 0x4 PUSH2 0xCEC JUMP JUMPDEST PUSH2 0x2B7 JUMP JUMPDEST PUSH2 0xEC PUSH2 0x406 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x134 JUMP JUMPDEST PUSH2 0xEC PUSH2 0x18E CALLDATASIZE PUSH1 0x4 PUSH2 0xD40 JUMP JUMPDEST PUSH2 0x4F6 JUMP JUMPDEST PUSH2 0x1A6 PUSH2 0x1A1 CALLDATASIZE PUSH1 0x4 PUSH2 0xD59 JUMP JUMPDEST PUSH2 0x57C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x134 JUMP JUMPDEST PUSH2 0xEC PUSH2 0x1C2 CALLDATASIZE PUSH1 0x4 PUSH2 0xD95 JUMP JUMPDEST PUSH2 0x858 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x1A6 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0x128 JUMP JUMPDEST PUSH2 0xEC PUSH2 0x1E8 CALLDATASIZE PUSH1 0x4 PUSH2 0xC85 JUMP JUMPDEST PUSH2 0x9A1 JUMP JUMPDEST PUSH2 0xEC PUSH2 0x1FB CALLDATASIZE PUSH1 0x4 PUSH2 0xDEC JUMP JUMPDEST PUSH2 0xB52 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x286 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x338 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x27D JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x400 JUMPI DUP4 DUP4 DUP3 DUP2 DUP2 LT PUSH2 0x355 JUMPI PUSH2 0x355 PUSH2 0xE23 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x36A SWAP2 SWAP1 PUSH2 0xC85 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xF2FDE38B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xF2FDE38B SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3E9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 DUP1 PUSH2 0x3F8 SWAP1 PUSH2 0xE81 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x33B JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x487 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x27D JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x577 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x27D JUMP JUMPDEST PUSH1 0x1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x1 EQ ISZERO PUSH2 0x610 JUMPI PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x610 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x27D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x6A0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4572726F723A206E6F74206D696E7461626C6500000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x27D JUMP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6EB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x70F SWAP2 SWAP1 PUSH2 0xEBA JUMP JUMPDEST PUSH2 0x71A SWAP1 PUSH1 0xA PUSH2 0xFFF JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x727 SWAP2 SWAP1 PUSH2 0x100E JUMP JUMPDEST DUP3 GT ISZERO PUSH2 0x7B6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4572726F723A204D696E74206C696D6974207472616E73616374696F6E206578 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6365656465640000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x27D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x40C10F1900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP5 SWAP1 MSTORE DUP6 AND SWAP1 PUSH4 0x40C10F19 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x82B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x84F SWAP2 SWAP1 PUSH2 0x104B JUMP JUMPDEST POP SWAP1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x8D9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x27D JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x400 JUMPI DUP4 DUP4 DUP3 DUP2 DUP2 LT PUSH2 0x8F6 JUMPI PUSH2 0x8F6 PUSH2 0xE23 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x90B SWAP2 SWAP1 PUSH2 0xC85 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x1C02BC3100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP4 ISZERO ISZERO PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x1C02BC31 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x976 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x98A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 DUP1 PUSH2 0x999 SWAP1 PUSH2 0xE81 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x8DC JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xA22 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x27D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xAC5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x27D JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xBD3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x27D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xC35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC4A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xC55 DUP2 PUSH2 0xC27 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xC80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC97 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC55 DUP3 PUSH2 0xC5C JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0xCB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xCCA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0xCE5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xD01 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xD18 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD24 DUP7 DUP3 DUP8 ADD PUSH2 0xCA0 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0xD37 SWAP1 POP PUSH1 0x20 DUP6 ADD PUSH2 0xC5C JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xD6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD77 DUP5 PUSH2 0xC5C JUMP JUMPDEST SWAP3 POP PUSH2 0xD85 PUSH1 0x20 DUP6 ADD PUSH2 0xC5C JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xDAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xDC1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDCD DUP7 DUP3 DUP8 ADD PUSH2 0xCA0 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0xDE1 DUP2 PUSH2 0xC27 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xDFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE08 DUP4 PUSH2 0xC5C JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0xE18 DUP2 PUSH2 0xC27 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0xEB3 JUMPI PUSH2 0xEB3 PUSH2 0xE52 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xECC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xC55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0xF36 JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0xF1C JUMPI PUSH2 0xF1C PUSH2 0xE52 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0xF29 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0xEE2 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xF4D JUMPI POP PUSH1 0x1 PUSH2 0xFF9 JUMP JUMPDEST DUP2 PUSH2 0xF5A JUMPI POP PUSH1 0x0 PUSH2 0xFF9 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0xF70 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0xF7A JUMPI PUSH2 0xF96 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0xFF9 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0xF8B JUMPI PUSH2 0xF8B PUSH2 0xE52 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0xFF9 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0xFB9 JUMPI POP DUP2 DUP2 EXP PUSH2 0xFF9 JUMP JUMPDEST PUSH2 0xFC3 DUP4 DUP4 PUSH2 0xEDD JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0xFF5 JUMPI PUSH2 0xFF5 PUSH2 0xE52 JUMP JUMPDEST MUL SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC55 PUSH1 0xFF DUP5 AND DUP4 PUSH2 0xF3E JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x1046 JUMPI PUSH2 0x1046 PUSH2 0xE52 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x105D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xC55 DUP2 PUSH2 0xC27 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 TIMESTAMP 0xEE DUP8 0xC3 PUSH3 0xC02396 DUP16 MSTORE DUP16 PUSH21 0x3B4B754D43798BAD978B093BCDAE6AA3C0ECB33B64 PUSH20 0x6F6C634300080A00338BE0079C531659141344CD 0x1F 0xD0 LOG4 CALLCODE DUP5 NOT 0x49 PUSH32 0x9722A3DAAFE3B4186F6B6457E000000000000000000000000000000000000000 ","sourceMap":"305:2714:171:-:0;;;682:209;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;835:17:11;873:18;;-1:-1:-1;;;;;;873:18:11;678:10:4;873:18:11;;;;;902:43;;678:10:4;;;;-1:-1:-1;;;;;;;;;;;902:43:11;835:17;;902:43;-1:-1:-1;;;;;;764:19:171;;756:28;;;;;;790:24;808:5;790:17;:24::i;:::-;820:13;:28;;-1:-1:-1;;820:28:171;;;;;;;;;;;-1:-1:-1;854:32:171;-1:-1:-1;305:2714:171;;1875:226:11;1204:6;;-1:-1:-1;;;;;1204:6:11;678:10:4;1204:22:11;1196:67;;;;-1:-1:-1;;;1196:67:11;;734:2:201;1196:67:11;;;716:21:201;;;753:18;;;746:30;812:34;792:18;;;785:62;864:18;;1196:67:11;;;;;;;;;-1:-1:-1;;;;;1959:22:11;::::1;1951:73;;;::::0;-1:-1:-1;;;1951:73:11;;1095:2:201;1951:73:11::1;::::0;::::1;1077:21:201::0;1134:2;1114:18;;;1107:30;1173:34;1153:18;;;1146:62;-1:-1:-1;;;1224:18:201;;;1217:36;1270:19;;1951:73:11::1;893:402:201::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;-1:-1:-1;;;;;2035:38:11;;::::1;::::0;2056:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;2035:38:11;::::1;2079:6;:17:::0;;-1:-1:-1;;;;;;2079:17:11::1;-1:-1:-1::0;;;;;2079:17:11;;;::::1;::::0;;;::::1;::::0;;1875:226::o;14:513:201:-;99:6;107;115;168:2;156:9;147:7;143:23;139:32;136:52;;;184:1;181;174:12;136:52;210:16;;-1:-1:-1;;;;;255:31:201;;245:42;;235:70;;301:1;298;291:12;235:70;374:2;359:18;;353:25;324:5;;-1:-1:-1;416:15:201;;409:23;397:36;;387:64;;447:1;444;437:12;387:64;470:7;460:17;;;517:2;506:9;502:18;496:25;486:35;;14:513;;;;;:::o;893:402::-;305:2714:171;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@getMaximumMintAmount_35890":{"entryPoint":null,"id":35890,"parameterSlots":0,"returnSlots":1},"@isMintable_35796":{"entryPoint":null,"id":35796,"parameterSlots":1,"returnSlots":1},"@isPermissioned_35762":{"entryPoint":null,"id":35762,"parameterSlots":0,"returnSlots":1},"@mint_35738":{"entryPoint":1404,"id":35738,"parameterSlots":3,"returnSlots":1},"@owner_1509":{"entryPoint":null,"id":1509,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_1544":{"entryPoint":1030,"id":1544,"parameterSlots":0,"returnSlots":0},"@setMaximumMintAmount_35880":{"entryPoint":1270,"id":35880,"parameterSlots":1,"returnSlots":0},"@setMintable_35781":{"entryPoint":2898,"id":35781,"parameterSlots":2,"returnSlots":0},"@setPermissioned_35752":{"entryPoint":512,"id":35752,"parameterSlots":1,"returnSlots":0},"@setProtectedOfChild_35866":{"entryPoint":2136,"id":35866,"parameterSlots":3,"returnSlots":0},"@transferOwnershipOfChild_35831":{"entryPoint":695,"id":35831,"parameterSlots":3,"returnSlots":0},"@transferOwnership_1572":{"entryPoint":2465,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":3164,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_address_dyn_calldata":{"entryPoint":3232,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":3205,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":3417,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_bool":{"entryPoint":3564,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_address":{"entryPoint":3308,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_bool":{"entryPoint":3477,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_bool":{"entryPoint":3128,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":4171,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":3392,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint8_fromMemory":{"entryPoint":3770,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0ede82dc9ae41bf2b2aee39aeb0f1780b14caf910cda71c7ce68835c5a4ee7f4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4c70a5af4f9f1eecb7d3eacc63eb554c1747b9b8db0d040cf0e0675c3461312e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":3805,"id":null,"parameterSlots":2,"returnSlots":2},"checked_exp_t_uint256_t_uint8":{"entryPoint":4095,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":3902,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":4110,"id":null,"parameterSlots":2,"returnSlots":1},"increment_t_uint256":{"entryPoint":3713,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":3666,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":3619,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_bool":{"entryPoint":3111,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:8341:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"56:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"110:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"119:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"122:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"112:6:201"},"nodeType":"YulFunctionCall","src":"112:12:201"},"nodeType":"YulExpressionStatement","src":"112:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"79:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"100:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"93:6:201"},"nodeType":"YulFunctionCall","src":"93:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"86:6:201"},"nodeType":"YulFunctionCall","src":"86:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"76:2:201"},"nodeType":"YulFunctionCall","src":"76:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"69:6:201"},"nodeType":"YulFunctionCall","src":"69:40:201"},"nodeType":"YulIf","src":"66:60:201"}]},"name":"validator_revert_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"45:5:201","type":""}],"src":"14:118:201"},{"body":{"nodeType":"YulBlock","src":"204:174:201","statements":[{"body":{"nodeType":"YulBlock","src":"250:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"259:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"262:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"252:6:201"},"nodeType":"YulFunctionCall","src":"252:12:201"},"nodeType":"YulExpressionStatement","src":"252:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"225:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"234:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"221:3:201"},"nodeType":"YulFunctionCall","src":"221:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"246:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"217:3:201"},"nodeType":"YulFunctionCall","src":"217:32:201"},"nodeType":"YulIf","src":"214:52:201"},{"nodeType":"YulVariableDeclaration","src":"275:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"301:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"288:12:201"},"nodeType":"YulFunctionCall","src":"288:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"279:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"342:5:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"320:21:201"},"nodeType":"YulFunctionCall","src":"320:28:201"},"nodeType":"YulExpressionStatement","src":"320:28:201"},{"nodeType":"YulAssignment","src":"357:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"367:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"357:6:201"}]}]},"name":"abi_decode_tuple_t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"170:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"181:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"193:6:201","type":""}],"src":"137:241:201"},{"body":{"nodeType":"YulBlock","src":"432:147:201","statements":[{"nodeType":"YulAssignment","src":"442:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"464:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"451:12:201"},"nodeType":"YulFunctionCall","src":"451:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"442:5:201"}]},{"body":{"nodeType":"YulBlock","src":"557:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"566:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"569:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"559:6:201"},"nodeType":"YulFunctionCall","src":"559:12:201"},"nodeType":"YulExpressionStatement","src":"559:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"493:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"504:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"511:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"500:3:201"},"nodeType":"YulFunctionCall","src":"500:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"490:2:201"},"nodeType":"YulFunctionCall","src":"490:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"483:6:201"},"nodeType":"YulFunctionCall","src":"483:73:201"},"nodeType":"YulIf","src":"480:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"411:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"422:5:201","type":""}],"src":"383:196:201"},{"body":{"nodeType":"YulBlock","src":"654:116:201","statements":[{"body":{"nodeType":"YulBlock","src":"700:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"709:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"712:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"702:6:201"},"nodeType":"YulFunctionCall","src":"702:12:201"},"nodeType":"YulExpressionStatement","src":"702:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"675:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"684:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"671:3:201"},"nodeType":"YulFunctionCall","src":"671:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"696:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"667:3:201"},"nodeType":"YulFunctionCall","src":"667:32:201"},"nodeType":"YulIf","src":"664:52:201"},{"nodeType":"YulAssignment","src":"725:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"754:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"735:18:201"},"nodeType":"YulFunctionCall","src":"735:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"725:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"620:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"631:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"643:6:201","type":""}],"src":"584:186:201"},{"body":{"nodeType":"YulBlock","src":"870:92:201","statements":[{"nodeType":"YulAssignment","src":"880:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"892:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"903:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"888:3:201"},"nodeType":"YulFunctionCall","src":"888:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"880:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"922:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"947:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"940:6:201"},"nodeType":"YulFunctionCall","src":"940:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"933:6:201"},"nodeType":"YulFunctionCall","src":"933:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"915:6:201"},"nodeType":"YulFunctionCall","src":"915:41:201"},"nodeType":"YulExpressionStatement","src":"915:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"839:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"850:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"861:4:201","type":""}],"src":"775:187:201"},{"body":{"nodeType":"YulBlock","src":"1051:283:201","statements":[{"body":{"nodeType":"YulBlock","src":"1100:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1109:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1112:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1102:6:201"},"nodeType":"YulFunctionCall","src":"1102:12:201"},"nodeType":"YulExpressionStatement","src":"1102:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1079:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1087:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1075:3:201"},"nodeType":"YulFunctionCall","src":"1075:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"1094:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1071:3:201"},"nodeType":"YulFunctionCall","src":"1071:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1064:6:201"},"nodeType":"YulFunctionCall","src":"1064:35:201"},"nodeType":"YulIf","src":"1061:55:201"},{"nodeType":"YulAssignment","src":"1125:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1148:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1135:12:201"},"nodeType":"YulFunctionCall","src":"1135:20:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"1125:6:201"}]},{"body":{"nodeType":"YulBlock","src":"1198:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1207:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1210:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1200:6:201"},"nodeType":"YulFunctionCall","src":"1200:12:201"},"nodeType":"YulExpressionStatement","src":"1200:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"1170:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1178:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1167:2:201"},"nodeType":"YulFunctionCall","src":"1167:30:201"},"nodeType":"YulIf","src":"1164:50:201"},{"nodeType":"YulAssignment","src":"1223:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1239:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1247:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1235:3:201"},"nodeType":"YulFunctionCall","src":"1235:17:201"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"1223:8:201"}]},{"body":{"nodeType":"YulBlock","src":"1312:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1321:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1324:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1314:6:201"},"nodeType":"YulFunctionCall","src":"1314:12:201"},"nodeType":"YulExpressionStatement","src":"1314:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1275:6:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1287:1:201","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"1290:6:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1283:3:201"},"nodeType":"YulFunctionCall","src":"1283:14:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1271:3:201"},"nodeType":"YulFunctionCall","src":"1271:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"1300:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1267:3:201"},"nodeType":"YulFunctionCall","src":"1267:38:201"},{"name":"end","nodeType":"YulIdentifier","src":"1307:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1264:2:201"},"nodeType":"YulFunctionCall","src":"1264:47:201"},"nodeType":"YulIf","src":"1261:67:201"}]},"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"1014:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"1022:3:201","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"1030:8:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"1040:6:201","type":""}],"src":"967:367:201"},{"body":{"nodeType":"YulBlock","src":"1461:389:201","statements":[{"body":{"nodeType":"YulBlock","src":"1507:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1516:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1519:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1509:6:201"},"nodeType":"YulFunctionCall","src":"1509:12:201"},"nodeType":"YulExpressionStatement","src":"1509:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1482:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1491:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1478:3:201"},"nodeType":"YulFunctionCall","src":"1478:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1503:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1474:3:201"},"nodeType":"YulFunctionCall","src":"1474:32:201"},"nodeType":"YulIf","src":"1471:52:201"},{"nodeType":"YulVariableDeclaration","src":"1532:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1559:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1546:12:201"},"nodeType":"YulFunctionCall","src":"1546:23:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1536:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1612:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1621:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1624:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1614:6:201"},"nodeType":"YulFunctionCall","src":"1614:12:201"},"nodeType":"YulExpressionStatement","src":"1614:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1584:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1592:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1581:2:201"},"nodeType":"YulFunctionCall","src":"1581:30:201"},"nodeType":"YulIf","src":"1578:50:201"},{"nodeType":"YulVariableDeclaration","src":"1637:96:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1705:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"1716:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1701:3:201"},"nodeType":"YulFunctionCall","src":"1701:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1725:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"1663:37:201"},"nodeType":"YulFunctionCall","src":"1663:70:201"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"1641:8:201","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"1651:8:201","type":""}]},{"nodeType":"YulAssignment","src":"1742:18:201","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"1752:8:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1742:6:201"}]},{"nodeType":"YulAssignment","src":"1769:18:201","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"1779:8:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1769:6:201"}]},{"nodeType":"YulAssignment","src":"1796:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1829:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1840:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1825:3:201"},"nodeType":"YulFunctionCall","src":"1825:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1806:18:201"},"nodeType":"YulFunctionCall","src":"1806:38:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1796:6:201"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1411:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1422:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1434:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1442:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1450:6:201","type":""}],"src":"1339:511:201"},{"body":{"nodeType":"YulBlock","src":"1956:125:201","statements":[{"nodeType":"YulAssignment","src":"1966:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1978:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1989:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1974:3:201"},"nodeType":"YulFunctionCall","src":"1974:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1966:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2008:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2023:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2031:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2019:3:201"},"nodeType":"YulFunctionCall","src":"2019:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2001:6:201"},"nodeType":"YulFunctionCall","src":"2001:74:201"},"nodeType":"YulExpressionStatement","src":"2001:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1925:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1936:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1947:4:201","type":""}],"src":"1855:226:201"},{"body":{"nodeType":"YulBlock","src":"2156:110:201","statements":[{"body":{"nodeType":"YulBlock","src":"2202:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2211:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2214:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2204:6:201"},"nodeType":"YulFunctionCall","src":"2204:12:201"},"nodeType":"YulExpressionStatement","src":"2204:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2177:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2186:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2173:3:201"},"nodeType":"YulFunctionCall","src":"2173:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2198:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2169:3:201"},"nodeType":"YulFunctionCall","src":"2169:32:201"},"nodeType":"YulIf","src":"2166:52:201"},{"nodeType":"YulAssignment","src":"2227:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2250:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2237:12:201"},"nodeType":"YulFunctionCall","src":"2237:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2227:6:201"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2122:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2133:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2145:6:201","type":""}],"src":"2086:180:201"},{"body":{"nodeType":"YulBlock","src":"2375:224:201","statements":[{"body":{"nodeType":"YulBlock","src":"2421:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2430:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2433:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2423:6:201"},"nodeType":"YulFunctionCall","src":"2423:12:201"},"nodeType":"YulExpressionStatement","src":"2423:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2396:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2405:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2392:3:201"},"nodeType":"YulFunctionCall","src":"2392:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2417:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2388:3:201"},"nodeType":"YulFunctionCall","src":"2388:32:201"},"nodeType":"YulIf","src":"2385:52:201"},{"nodeType":"YulAssignment","src":"2446:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2475:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2456:18:201"},"nodeType":"YulFunctionCall","src":"2456:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2446:6:201"}]},{"nodeType":"YulAssignment","src":"2494:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2527:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2538:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2523:3:201"},"nodeType":"YulFunctionCall","src":"2523:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2504:18:201"},"nodeType":"YulFunctionCall","src":"2504:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2494:6:201"}]},{"nodeType":"YulAssignment","src":"2551:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2578:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2589:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2574:3:201"},"nodeType":"YulFunctionCall","src":"2574:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2561:12:201"},"nodeType":"YulFunctionCall","src":"2561:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2551:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2325:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2336:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2348:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2356:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2364:6:201","type":""}],"src":"2271:328:201"},{"body":{"nodeType":"YulBlock","src":"2705:76:201","statements":[{"nodeType":"YulAssignment","src":"2715:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2727:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2738:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2723:3:201"},"nodeType":"YulFunctionCall","src":"2723:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2715:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2757:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"2768:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2750:6:201"},"nodeType":"YulFunctionCall","src":"2750:25:201"},"nodeType":"YulExpressionStatement","src":"2750:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2674:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2685:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2696:4:201","type":""}],"src":"2604:177:201"},{"body":{"nodeType":"YulBlock","src":"2905:447:201","statements":[{"body":{"nodeType":"YulBlock","src":"2951:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2960:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2963:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2953:6:201"},"nodeType":"YulFunctionCall","src":"2953:12:201"},"nodeType":"YulExpressionStatement","src":"2953:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2926:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2935:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2922:3:201"},"nodeType":"YulFunctionCall","src":"2922:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2947:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2918:3:201"},"nodeType":"YulFunctionCall","src":"2918:32:201"},"nodeType":"YulIf","src":"2915:52:201"},{"nodeType":"YulVariableDeclaration","src":"2976:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3003:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2990:12:201"},"nodeType":"YulFunctionCall","src":"2990:23:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2980:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3056:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3065:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3068:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3058:6:201"},"nodeType":"YulFunctionCall","src":"3058:12:201"},"nodeType":"YulExpressionStatement","src":"3058:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3028:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3036:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3025:2:201"},"nodeType":"YulFunctionCall","src":"3025:30:201"},"nodeType":"YulIf","src":"3022:50:201"},{"nodeType":"YulVariableDeclaration","src":"3081:96:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3149:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"3160:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3145:3:201"},"nodeType":"YulFunctionCall","src":"3145:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3169:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"3107:37:201"},"nodeType":"YulFunctionCall","src":"3107:70:201"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"3085:8:201","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"3095:8:201","type":""}]},{"nodeType":"YulAssignment","src":"3186:18:201","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"3196:8:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3186:6:201"}]},{"nodeType":"YulAssignment","src":"3213:18:201","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"3223:8:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3213:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3240:45:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3270:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3281:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3266:3:201"},"nodeType":"YulFunctionCall","src":"3266:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3253:12:201"},"nodeType":"YulFunctionCall","src":"3253:32:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3244:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3316:5:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"3294:21:201"},"nodeType":"YulFunctionCall","src":"3294:28:201"},"nodeType":"YulExpressionStatement","src":"3294:28:201"},{"nodeType":"YulAssignment","src":"3331:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3341:5:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3331:6:201"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2855:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2866:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2878:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2886:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2894:6:201","type":""}],"src":"2786:566:201"},{"body":{"nodeType":"YulBlock","src":"3441:231:201","statements":[{"body":{"nodeType":"YulBlock","src":"3487:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3496:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3499:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3489:6:201"},"nodeType":"YulFunctionCall","src":"3489:12:201"},"nodeType":"YulExpressionStatement","src":"3489:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3462:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3471:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3458:3:201"},"nodeType":"YulFunctionCall","src":"3458:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3483:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3454:3:201"},"nodeType":"YulFunctionCall","src":"3454:32:201"},"nodeType":"YulIf","src":"3451:52:201"},{"nodeType":"YulAssignment","src":"3512:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3541:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3522:18:201"},"nodeType":"YulFunctionCall","src":"3522:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3512:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3560:45:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3590:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3601:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3586:3:201"},"nodeType":"YulFunctionCall","src":"3586:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3573:12:201"},"nodeType":"YulFunctionCall","src":"3573:32:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3564:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3636:5:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"3614:21:201"},"nodeType":"YulFunctionCall","src":"3614:28:201"},"nodeType":"YulExpressionStatement","src":"3614:28:201"},{"nodeType":"YulAssignment","src":"3651:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3661:5:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3651:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3399:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3410:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3422:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3430:6:201","type":""}],"src":"3357:315:201"},{"body":{"nodeType":"YulBlock","src":"3851:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3868:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3879:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3861:6:201"},"nodeType":"YulFunctionCall","src":"3861:21:201"},"nodeType":"YulExpressionStatement","src":"3861:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3902:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3913:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3898:3:201"},"nodeType":"YulFunctionCall","src":"3898:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"3918:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3891:6:201"},"nodeType":"YulFunctionCall","src":"3891:30:201"},"nodeType":"YulExpressionStatement","src":"3891:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3941:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3952:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3937:3:201"},"nodeType":"YulFunctionCall","src":"3937:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"3957:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3930:6:201"},"nodeType":"YulFunctionCall","src":"3930:62:201"},"nodeType":"YulExpressionStatement","src":"3930:62:201"},{"nodeType":"YulAssignment","src":"4001:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4013:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4024:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4009:3:201"},"nodeType":"YulFunctionCall","src":"4009:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4001:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3828:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3842:4:201","type":""}],"src":"3677:356:201"},{"body":{"nodeType":"YulBlock","src":"4070:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4087:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4090:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4080:6:201"},"nodeType":"YulFunctionCall","src":"4080:88:201"},"nodeType":"YulExpressionStatement","src":"4080:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4184:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4187:4:201","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4177:6:201"},"nodeType":"YulFunctionCall","src":"4177:15:201"},"nodeType":"YulExpressionStatement","src":"4177:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4208:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4211:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4201:6:201"},"nodeType":"YulFunctionCall","src":"4201:15:201"},"nodeType":"YulExpressionStatement","src":"4201:15:201"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"4038:184:201"},{"body":{"nodeType":"YulBlock","src":"4259:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4276:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4279:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4269:6:201"},"nodeType":"YulFunctionCall","src":"4269:88:201"},"nodeType":"YulExpressionStatement","src":"4269:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4373:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4376:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4366:6:201"},"nodeType":"YulFunctionCall","src":"4366:15:201"},"nodeType":"YulExpressionStatement","src":"4366:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4397:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4400:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4390:6:201"},"nodeType":"YulFunctionCall","src":"4390:15:201"},"nodeType":"YulExpressionStatement","src":"4390:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"4227:184:201"},{"body":{"nodeType":"YulBlock","src":"4463:148:201","statements":[{"body":{"nodeType":"YulBlock","src":"4554:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"4556:16:201"},"nodeType":"YulFunctionCall","src":"4556:18:201"},"nodeType":"YulExpressionStatement","src":"4556:18:201"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4479:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"4486:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4476:2:201"},"nodeType":"YulFunctionCall","src":"4476:77:201"},"nodeType":"YulIf","src":"4473:103:201"},{"nodeType":"YulAssignment","src":"4585:20:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4596:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"4603:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4592:3:201"},"nodeType":"YulFunctionCall","src":"4592:13:201"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"4585:3:201"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4445:5:201","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"4455:3:201","type":""}],"src":"4416:195:201"},{"body":{"nodeType":"YulBlock","src":"4790:169:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4807:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4818:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4800:6:201"},"nodeType":"YulFunctionCall","src":"4800:21:201"},"nodeType":"YulExpressionStatement","src":"4800:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4841:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4852:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4837:3:201"},"nodeType":"YulFunctionCall","src":"4837:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"4857:2:201","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4830:6:201"},"nodeType":"YulFunctionCall","src":"4830:30:201"},"nodeType":"YulExpressionStatement","src":"4830:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4880:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4891:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4876:3:201"},"nodeType":"YulFunctionCall","src":"4876:18:201"},{"hexValue":"4572726f723a206e6f74206d696e7461626c65","kind":"string","nodeType":"YulLiteral","src":"4896:21:201","type":"","value":"Error: not mintable"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4869:6:201"},"nodeType":"YulFunctionCall","src":"4869:49:201"},"nodeType":"YulExpressionStatement","src":"4869:49:201"},{"nodeType":"YulAssignment","src":"4927:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4939:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4950:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4935:3:201"},"nodeType":"YulFunctionCall","src":"4935:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4927:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_0ede82dc9ae41bf2b2aee39aeb0f1780b14caf910cda71c7ce68835c5a4ee7f4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4767:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4781:4:201","type":""}],"src":"4616:343:201"},{"body":{"nodeType":"YulBlock","src":"5043:194:201","statements":[{"body":{"nodeType":"YulBlock","src":"5089:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5098:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5101:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5091:6:201"},"nodeType":"YulFunctionCall","src":"5091:12:201"},"nodeType":"YulExpressionStatement","src":"5091:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5064:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"5073:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5060:3:201"},"nodeType":"YulFunctionCall","src":"5060:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"5085:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5056:3:201"},"nodeType":"YulFunctionCall","src":"5056:32:201"},"nodeType":"YulIf","src":"5053:52:201"},{"nodeType":"YulVariableDeclaration","src":"5114:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5133:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5127:5:201"},"nodeType":"YulFunctionCall","src":"5127:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5118:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"5191:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5200:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5203:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5193:6:201"},"nodeType":"YulFunctionCall","src":"5193:12:201"},"nodeType":"YulExpressionStatement","src":"5193:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5165:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5176:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5183:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5172:3:201"},"nodeType":"YulFunctionCall","src":"5172:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"5162:2:201"},"nodeType":"YulFunctionCall","src":"5162:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5155:6:201"},"nodeType":"YulFunctionCall","src":"5155:35:201"},"nodeType":"YulIf","src":"5152:55:201"},{"nodeType":"YulAssignment","src":"5216:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"5226:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5216:6:201"}]}]},"name":"abi_decode_tuple_t_uint8_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5009:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5020:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5032:6:201","type":""}],"src":"4964:273:201"},{"body":{"nodeType":"YulBlock","src":"5306:418:201","statements":[{"nodeType":"YulVariableDeclaration","src":"5316:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5331:1:201","type":"","value":"1"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"5320:7:201","type":""}]},{"nodeType":"YulAssignment","src":"5341:16:201","value":{"name":"power_1","nodeType":"YulIdentifier","src":"5350:7:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"5341:5:201"}]},{"nodeType":"YulAssignment","src":"5366:13:201","value":{"name":"_base","nodeType":"YulIdentifier","src":"5374:5:201"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"5366:4:201"}]},{"body":{"nodeType":"YulBlock","src":"5430:288:201","statements":[{"body":{"nodeType":"YulBlock","src":"5535:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"5537:16:201"},"nodeType":"YulFunctionCall","src":"5537:18:201"},"nodeType":"YulExpressionStatement","src":"5537:18:201"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"5450:4:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5460:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base","nodeType":"YulIdentifier","src":"5528:4:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"5456:3:201"},"nodeType":"YulFunctionCall","src":"5456:77:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5447:2:201"},"nodeType":"YulFunctionCall","src":"5447:87:201"},"nodeType":"YulIf","src":"5444:113:201"},{"body":{"nodeType":"YulBlock","src":"5596:29:201","statements":[{"nodeType":"YulAssignment","src":"5598:25:201","value":{"arguments":[{"name":"power","nodeType":"YulIdentifier","src":"5611:5:201"},{"name":"base","nodeType":"YulIdentifier","src":"5618:4:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"5607:3:201"},"nodeType":"YulFunctionCall","src":"5607:16:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"5598:5:201"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"5577:8:201"},{"name":"power_1","nodeType":"YulIdentifier","src":"5587:7:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5573:3:201"},"nodeType":"YulFunctionCall","src":"5573:22:201"},"nodeType":"YulIf","src":"5570:55:201"},{"nodeType":"YulAssignment","src":"5638:23:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"5650:4:201"},{"name":"base","nodeType":"YulIdentifier","src":"5656:4:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"5646:3:201"},"nodeType":"YulFunctionCall","src":"5646:15:201"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"5638:4:201"}]},{"nodeType":"YulAssignment","src":"5674:34:201","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"5690:7:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"5699:8:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"5686:3:201"},"nodeType":"YulFunctionCall","src":"5686:22:201"},"variableNames":[{"name":"exponent","nodeType":"YulIdentifier","src":"5674:8:201"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"5399:8:201"},{"name":"power_1","nodeType":"YulIdentifier","src":"5409:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5396:2:201"},"nodeType":"YulFunctionCall","src":"5396:21:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5418:3:201","statements":[]},"pre":{"nodeType":"YulBlock","src":"5392:3:201","statements":[]},"src":"5388:330:201"}]},"name":"checked_exp_helper","nodeType":"YulFunctionDefinition","parameters":[{"name":"_base","nodeType":"YulTypedName","src":"5270:5:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"5277:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"5290:5:201","type":""},{"name":"base","nodeType":"YulTypedName","src":"5297:4:201","type":""}],"src":"5242:482:201"},{"body":{"nodeType":"YulBlock","src":"5788:807:201","statements":[{"body":{"nodeType":"YulBlock","src":"5826:52:201","statements":[{"nodeType":"YulAssignment","src":"5840:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5849:1:201","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"5840:5:201"}]},{"nodeType":"YulLeave","src":"5863:5:201"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"5808:8:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5801:6:201"},"nodeType":"YulFunctionCall","src":"5801:16:201"},"nodeType":"YulIf","src":"5798:80:201"},{"body":{"nodeType":"YulBlock","src":"5911:52:201","statements":[{"nodeType":"YulAssignment","src":"5925:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5934:1:201","type":"","value":"0"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"5925:5:201"}]},{"nodeType":"YulLeave","src":"5948:5:201"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"5897:4:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5890:6:201"},"nodeType":"YulFunctionCall","src":"5890:12:201"},"nodeType":"YulIf","src":"5887:76:201"},{"cases":[{"body":{"nodeType":"YulBlock","src":"5999:52:201","statements":[{"nodeType":"YulAssignment","src":"6013:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6022:1:201","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"6013:5:201"}]},{"nodeType":"YulLeave","src":"6036:5:201"}]},"nodeType":"YulCase","src":"5992:59:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5997:1:201","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"6067:123:201","statements":[{"body":{"nodeType":"YulBlock","src":"6102:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"6104:16:201"},"nodeType":"YulFunctionCall","src":"6104:18:201"},"nodeType":"YulExpressionStatement","src":"6104:18:201"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"6087:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"6097:3:201","type":"","value":"255"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6084:2:201"},"nodeType":"YulFunctionCall","src":"6084:17:201"},"nodeType":"YulIf","src":"6081:43:201"},{"nodeType":"YulAssignment","src":"6137:25:201","value":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"6150:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"6160:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6146:3:201"},"nodeType":"YulFunctionCall","src":"6146:16:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"6137:5:201"}]},{"nodeType":"YulLeave","src":"6175:5:201"}]},"nodeType":"YulCase","src":"6060:130:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6065:1:201","type":"","value":"2"}}],"expression":{"name":"base","nodeType":"YulIdentifier","src":"5979:4:201"},"nodeType":"YulSwitch","src":"5972:218:201"},{"body":{"nodeType":"YulBlock","src":"6288:70:201","statements":[{"nodeType":"YulAssignment","src":"6302:28:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"6315:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"6321:8:201"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"6311:3:201"},"nodeType":"YulFunctionCall","src":"6311:19:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"6302:5:201"}]},{"nodeType":"YulLeave","src":"6343:5:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"6212:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"6218:2:201","type":"","value":"11"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6209:2:201"},"nodeType":"YulFunctionCall","src":"6209:12:201"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"6226:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"6236:2:201","type":"","value":"78"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6223:2:201"},"nodeType":"YulFunctionCall","src":"6223:16:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6205:3:201"},"nodeType":"YulFunctionCall","src":"6205:35:201"},{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"6249:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"6255:3:201","type":"","value":"307"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6246:2:201"},"nodeType":"YulFunctionCall","src":"6246:13:201"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"6264:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"6274:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"6261:2:201"},"nodeType":"YulFunctionCall","src":"6261:16:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6242:3:201"},"nodeType":"YulFunctionCall","src":"6242:36:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"6202:2:201"},"nodeType":"YulFunctionCall","src":"6202:77:201"},"nodeType":"YulIf","src":"6199:159:201"},{"nodeType":"YulVariableDeclaration","src":"6367:57:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"6409:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"6415:8:201"}],"functionName":{"name":"checked_exp_helper","nodeType":"YulIdentifier","src":"6390:18:201"},"nodeType":"YulFunctionCall","src":"6390:34:201"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"6371:7:201","type":""},{"name":"base_1","nodeType":"YulTypedName","src":"6380:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"6529:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"6531:16:201"},"nodeType":"YulFunctionCall","src":"6531:18:201"},"nodeType":"YulExpressionStatement","src":"6531:18:201"}]},"condition":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"6439:7:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6452:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base_1","nodeType":"YulIdentifier","src":"6520:6:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"6448:3:201"},"nodeType":"YulFunctionCall","src":"6448:79:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6436:2:201"},"nodeType":"YulFunctionCall","src":"6436:92:201"},"nodeType":"YulIf","src":"6433:118:201"},{"nodeType":"YulAssignment","src":"6560:29:201","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"6573:7:201"},{"name":"base_1","nodeType":"YulIdentifier","src":"6582:6:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"6569:3:201"},"nodeType":"YulFunctionCall","src":"6569:20:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"6560:5:201"}]}]},"name":"checked_exp_unsigned","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"5759:4:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"5765:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"5778:5:201","type":""}],"src":"5729:866:201"},{"body":{"nodeType":"YulBlock","src":"6668:72:201","statements":[{"nodeType":"YulAssignment","src":"6678:56:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"6708:4:201"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"6718:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"6728:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6714:3:201"},"nodeType":"YulFunctionCall","src":"6714:19:201"}],"functionName":{"name":"checked_exp_unsigned","nodeType":"YulIdentifier","src":"6687:20:201"},"nodeType":"YulFunctionCall","src":"6687:47:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"6678:5:201"}]}]},"name":"checked_exp_t_uint256_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"6639:4:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"6645:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"6658:5:201","type":""}],"src":"6600:140:201"},{"body":{"nodeType":"YulBlock","src":"6797:176:201","statements":[{"body":{"nodeType":"YulBlock","src":"6916:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"6918:16:201"},"nodeType":"YulFunctionCall","src":"6918:18:201"},"nodeType":"YulExpressionStatement","src":"6918:18:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6828:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6821:6:201"},"nodeType":"YulFunctionCall","src":"6821:9:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6814:6:201"},"nodeType":"YulFunctionCall","src":"6814:17:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"6836:1:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6843:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"6911:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"6839:3:201"},"nodeType":"YulFunctionCall","src":"6839:74:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6833:2:201"},"nodeType":"YulFunctionCall","src":"6833:81:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6810:3:201"},"nodeType":"YulFunctionCall","src":"6810:105:201"},"nodeType":"YulIf","src":"6807:131:201"},{"nodeType":"YulAssignment","src":"6947:20:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6962:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"6965:1:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"6958:3:201"},"nodeType":"YulFunctionCall","src":"6958:9:201"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"6947:7:201"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"6776:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"6779:1:201","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"6785:7:201","type":""}],"src":"6745:228:201"},{"body":{"nodeType":"YulBlock","src":"7152:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7169:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7180:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7162:6:201"},"nodeType":"YulFunctionCall","src":"7162:21:201"},"nodeType":"YulExpressionStatement","src":"7162:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7203:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7214:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7199:3:201"},"nodeType":"YulFunctionCall","src":"7199:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"7219:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7192:6:201"},"nodeType":"YulFunctionCall","src":"7192:30:201"},"nodeType":"YulExpressionStatement","src":"7192:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7242:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7253:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7238:3:201"},"nodeType":"YulFunctionCall","src":"7238:18:201"},{"hexValue":"4572726f723a204d696e74206c696d6974207472616e73616374696f6e206578","kind":"string","nodeType":"YulLiteral","src":"7258:34:201","type":"","value":"Error: Mint limit transaction ex"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7231:6:201"},"nodeType":"YulFunctionCall","src":"7231:62:201"},"nodeType":"YulExpressionStatement","src":"7231:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7313:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7324:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7309:3:201"},"nodeType":"YulFunctionCall","src":"7309:18:201"},{"hexValue":"636565646564","kind":"string","nodeType":"YulLiteral","src":"7329:8:201","type":"","value":"ceeded"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7302:6:201"},"nodeType":"YulFunctionCall","src":"7302:36:201"},"nodeType":"YulExpressionStatement","src":"7302:36:201"},{"nodeType":"YulAssignment","src":"7347:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7359:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7370:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7355:3:201"},"nodeType":"YulFunctionCall","src":"7355:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7347:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_4c70a5af4f9f1eecb7d3eacc63eb554c1747b9b8db0d040cf0e0675c3461312e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7129:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7143:4:201","type":""}],"src":"6978:402:201"},{"body":{"nodeType":"YulBlock","src":"7514:168:201","statements":[{"nodeType":"YulAssignment","src":"7524:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7536:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7547:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7532:3:201"},"nodeType":"YulFunctionCall","src":"7532:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7524:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7566:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7581:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7589:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7577:3:201"},"nodeType":"YulFunctionCall","src":"7577:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7559:6:201"},"nodeType":"YulFunctionCall","src":"7559:74:201"},"nodeType":"YulExpressionStatement","src":"7559:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7653:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7664:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7649:3:201"},"nodeType":"YulFunctionCall","src":"7649:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"7669:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7642:6:201"},"nodeType":"YulFunctionCall","src":"7642:34:201"},"nodeType":"YulExpressionStatement","src":"7642:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7475:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7486:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7494:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7505:4:201","type":""}],"src":"7385:297:201"},{"body":{"nodeType":"YulBlock","src":"7765:167:201","statements":[{"body":{"nodeType":"YulBlock","src":"7811:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7820:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7823:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7813:6:201"},"nodeType":"YulFunctionCall","src":"7813:12:201"},"nodeType":"YulExpressionStatement","src":"7813:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7786:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"7795:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7782:3:201"},"nodeType":"YulFunctionCall","src":"7782:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"7807:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7778:3:201"},"nodeType":"YulFunctionCall","src":"7778:32:201"},"nodeType":"YulIf","src":"7775:52:201"},{"nodeType":"YulVariableDeclaration","src":"7836:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7855:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"7849:5:201"},"nodeType":"YulFunctionCall","src":"7849:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7840:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7896:5:201"}],"functionName":{"name":"validator_revert_bool","nodeType":"YulIdentifier","src":"7874:21:201"},"nodeType":"YulFunctionCall","src":"7874:28:201"},"nodeType":"YulExpressionStatement","src":"7874:28:201"},{"nodeType":"YulAssignment","src":"7911:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"7921:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7911:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7731:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7742:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7754:6:201","type":""}],"src":"7687:245:201"},{"body":{"nodeType":"YulBlock","src":"8111:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8128:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8139:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8121:6:201"},"nodeType":"YulFunctionCall","src":"8121:21:201"},"nodeType":"YulExpressionStatement","src":"8121:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8162:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8173:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8158:3:201"},"nodeType":"YulFunctionCall","src":"8158:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"8178:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8151:6:201"},"nodeType":"YulFunctionCall","src":"8151:30:201"},"nodeType":"YulExpressionStatement","src":"8151:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8201:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8212:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8197:3:201"},"nodeType":"YulFunctionCall","src":"8197:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"8217:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8190:6:201"},"nodeType":"YulFunctionCall","src":"8190:62:201"},"nodeType":"YulExpressionStatement","src":"8190:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8272:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8283:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8268:3:201"},"nodeType":"YulFunctionCall","src":"8268:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"8288:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8261:6:201"},"nodeType":"YulFunctionCall","src":"8261:36:201"},"nodeType":"YulExpressionStatement","src":"8261:36:201"},{"nodeType":"YulAssignment","src":"8306:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8318:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8329:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8314:3:201"},"nodeType":"YulFunctionCall","src":"8314:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8306:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8088:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8102:4:201","type":""}],"src":"7937:402:201"}]},"contents":"{\n    { }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_bool(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_array_address_dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        value2 := abi_decode_address(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_bool(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        let value := calldataload(add(headStart, 32))\n        validator_revert_bool(value)\n        value2 := value\n    }\n    function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_bool(value)\n        value1 := value\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_stringliteral_0ede82dc9ae41bf2b2aee39aeb0f1780b14caf910cda71c7ce68835c5a4ee7f4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"Error: not mintable\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_uint8_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value0 := value\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint8(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, and(exponent, 0xff))\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function abi_encode_tuple_t_stringliteral_4c70a5af4f9f1eecb7d3eacc63eb554c1747b9b8db0d040cf0e0675c3461312e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Error: Mint limit transaction ex\")\n        mstore(add(headStart, 96), \"ceeded\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100d45760003560e01c8063c6c3bbe611610081578063e2a4157c1161005b578063e2a4157c146101cf578063f2fde38b146101da578063f7eb06c4146101ed57600080fd5b8063c6c3bbe614610193578063ca51a903146101b4578063dd26b1d3146101c757600080fd5b8063715018a6116100b2578063715018a6146101505780638da5cb5b146101585780639420d4761461018057600080fd5b80631a678cd3146100d9578063222b15fb146100ee578063506f26cc1461013d575b600080fd5b6100ec6100e7366004610c38565b610200565b005b6101286100fc366004610c85565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff161590565b60405190151581526020015b60405180910390f35b6100ec61014b366004610cec565b6102b7565b6100ec610406565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610134565b6100ec61018e366004610d40565b6104f6565b6101a66101a1366004610d59565b61057c565b604051908152602001610134565b6100ec6101c2366004610d95565b610858565b6001546101a6565b60035460ff16610128565b6100ec6101e8366004610c85565b6109a1565b6100ec6101fb366004610dec565b610b52565b60005473ffffffffffffffffffffffffffffffffffffffff163314610286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161027d565b60005b828110156104005783838281811061035557610355610e23565b905060200201602081019061036a9190610c85565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152919091169063f2fde38b90602401600060405180830381600087803b1580156103d557600080fd5b505af11580156103e9573d6000803e3d6000fd5b5050505080806103f890610e81565b91505061033b565b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161027d565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161027d565b600155565b60035460009060ff161515600114156106105760005473ffffffffffffffffffffffffffffffffffffffff163314610610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161027d565b73ffffffffffffffffffffffffffffffffffffffff841660009081526002602052604090205460ff16156106a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4572726f723a206e6f74206d696e7461626c6500000000000000000000000000604482015260640161027d565b8373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070f9190610eba565b61071a90600a610fff565b600154610727919061100e565b8211156107b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4572726f723a204d696e74206c696d6974207472616e73616374696f6e20657860448201527f6365656465640000000000000000000000000000000000000000000000000000606482015260840161027d565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490528516906340c10f19906044016020604051808303816000875af115801561082b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084f919061104b565b50909392505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161027d565b60005b82811015610400578383828181106108f6576108f6610e23565b905060200201602081019061090b9190610c85565b6040517f1c02bc31000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff9190911690631c02bc3190602401600060405180830381600087803b15801561097657600080fd5b505af115801561098a573d6000803e3d6000fd5b50505050808061099990610e81565b9150506108dc565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161027d565b73ffffffffffffffffffffffffffffffffffffffff8116610ac5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161027d565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161027d565b73ffffffffffffffffffffffffffffffffffffffff909116600090815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115919091179055565b8015158114610c3557600080fd5b50565b600060208284031215610c4a57600080fd5b8135610c5581610c27565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c8057600080fd5b919050565b600060208284031215610c9757600080fd5b610c5582610c5c565b60008083601f840112610cb257600080fd5b50813567ffffffffffffffff811115610cca57600080fd5b6020830191508360208260051b8501011115610ce557600080fd5b9250929050565b600080600060408486031215610d0157600080fd5b833567ffffffffffffffff811115610d1857600080fd5b610d2486828701610ca0565b9094509250610d37905060208501610c5c565b90509250925092565b600060208284031215610d5257600080fd5b5035919050565b600080600060608486031215610d6e57600080fd5b610d7784610c5c565b9250610d8560208501610c5c565b9150604084013590509250925092565b600080600060408486031215610daa57600080fd5b833567ffffffffffffffff811115610dc157600080fd5b610dcd86828701610ca0565b9094509250506020840135610de181610c27565b809150509250925092565b60008060408385031215610dff57600080fd5b610e0883610c5c565b91506020830135610e1881610c27565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610eb357610eb3610e52565b5060010190565b600060208284031215610ecc57600080fd5b815160ff81168114610c5557600080fd5b600181815b80851115610f3657817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610f1c57610f1c610e52565b80851615610f2957918102915b93841c9390800290610ee2565b509250929050565b600082610f4d57506001610ff9565b81610f5a57506000610ff9565b8160018114610f705760028114610f7a57610f96565b6001915050610ff9565b60ff841115610f8b57610f8b610e52565b50506001821b610ff9565b5060208310610133831016604e8410600b8410161715610fb9575081810a610ff9565b610fc38383610edd565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610ff557610ff5610e52565b0290505b92915050565b6000610c5560ff841683610f3e565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561104657611046610e52565b500290565b60006020828403121561105d57600080fd5b8151610c5581610c2756fea264697066735822122042ee87c362c023968f528f743b4b754d43798bad978b093bcdae6aa3c0ecb33b64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xD4 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC6C3BBE6 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xE2A4157C GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xE2A4157C EQ PUSH2 0x1CF JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1DA JUMPI DUP1 PUSH4 0xF7EB06C4 EQ PUSH2 0x1ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xC6C3BBE6 EQ PUSH2 0x193 JUMPI DUP1 PUSH4 0xCA51A903 EQ PUSH2 0x1B4 JUMPI DUP1 PUSH4 0xDD26B1D3 EQ PUSH2 0x1C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x715018A6 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x150 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x158 JUMPI DUP1 PUSH4 0x9420D476 EQ PUSH2 0x180 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1A678CD3 EQ PUSH2 0xD9 JUMPI DUP1 PUSH4 0x222B15FB EQ PUSH2 0xEE JUMPI DUP1 PUSH4 0x506F26CC EQ PUSH2 0x13D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xEC PUSH2 0xE7 CALLDATASIZE PUSH1 0x4 PUSH2 0xC38 JUMP JUMPDEST PUSH2 0x200 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x128 PUSH2 0xFC CALLDATASIZE PUSH1 0x4 PUSH2 0xC85 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xEC PUSH2 0x14B CALLDATASIZE PUSH1 0x4 PUSH2 0xCEC JUMP JUMPDEST PUSH2 0x2B7 JUMP JUMPDEST PUSH2 0xEC PUSH2 0x406 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x134 JUMP JUMPDEST PUSH2 0xEC PUSH2 0x18E CALLDATASIZE PUSH1 0x4 PUSH2 0xD40 JUMP JUMPDEST PUSH2 0x4F6 JUMP JUMPDEST PUSH2 0x1A6 PUSH2 0x1A1 CALLDATASIZE PUSH1 0x4 PUSH2 0xD59 JUMP JUMPDEST PUSH2 0x57C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x134 JUMP JUMPDEST PUSH2 0xEC PUSH2 0x1C2 CALLDATASIZE PUSH1 0x4 PUSH2 0xD95 JUMP JUMPDEST PUSH2 0x858 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x1A6 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0xFF AND PUSH2 0x128 JUMP JUMPDEST PUSH2 0xEC PUSH2 0x1E8 CALLDATASIZE PUSH1 0x4 PUSH2 0xC85 JUMP JUMPDEST PUSH2 0x9A1 JUMP JUMPDEST PUSH2 0xEC PUSH2 0x1FB CALLDATASIZE PUSH1 0x4 PUSH2 0xDEC JUMP JUMPDEST PUSH2 0xB52 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x286 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x338 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x27D JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x400 JUMPI DUP4 DUP4 DUP3 DUP2 DUP2 LT PUSH2 0x355 JUMPI PUSH2 0x355 PUSH2 0xE23 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x36A SWAP2 SWAP1 PUSH2 0xC85 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xF2FDE38B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xF2FDE38B SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3E9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 DUP1 PUSH2 0x3F8 SWAP1 PUSH2 0xE81 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x33B JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x487 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x27D JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x577 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x27D JUMP JUMPDEST PUSH1 0x1 SSTORE JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x1 EQ ISZERO PUSH2 0x610 JUMPI PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x610 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x27D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x6A0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4572726F723A206E6F74206D696E7461626C6500000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x27D JUMP JUMPDEST DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6EB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x70F SWAP2 SWAP1 PUSH2 0xEBA JUMP JUMPDEST PUSH2 0x71A SWAP1 PUSH1 0xA PUSH2 0xFFF JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH2 0x727 SWAP2 SWAP1 PUSH2 0x100E JUMP JUMPDEST DUP3 GT ISZERO PUSH2 0x7B6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4572726F723A204D696E74206C696D6974207472616E73616374696F6E206578 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6365656465640000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x27D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x40C10F1900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP5 SWAP1 MSTORE DUP6 AND SWAP1 PUSH4 0x40C10F19 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x82B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x84F SWAP2 SWAP1 PUSH2 0x104B JUMP JUMPDEST POP SWAP1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x8D9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x27D JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x400 JUMPI DUP4 DUP4 DUP3 DUP2 DUP2 LT PUSH2 0x8F6 JUMPI PUSH2 0x8F6 PUSH2 0xE23 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x90B SWAP2 SWAP1 PUSH2 0xC85 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x1C02BC3100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP4 ISZERO ISZERO PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0x1C02BC31 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x976 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x98A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 DUP1 PUSH2 0x999 SWAP1 PUSH2 0xE81 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x8DC JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xA22 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x27D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xAC5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x27D JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xBD3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x27D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xC35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC4A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xC55 DUP2 PUSH2 0xC27 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xC80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC97 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC55 DUP3 PUSH2 0xC5C JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0xCB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xCCA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0xCE5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xD01 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xD18 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD24 DUP7 DUP3 DUP8 ADD PUSH2 0xCA0 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0xD37 SWAP1 POP PUSH1 0x20 DUP6 ADD PUSH2 0xC5C JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xD6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD77 DUP5 PUSH2 0xC5C JUMP JUMPDEST SWAP3 POP PUSH2 0xD85 PUSH1 0x20 DUP6 ADD PUSH2 0xC5C JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xDAA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xDC1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xDCD DUP7 DUP3 DUP8 ADD PUSH2 0xCA0 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0xDE1 DUP2 PUSH2 0xC27 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xDFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE08 DUP4 PUSH2 0xC5C JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0xE18 DUP2 PUSH2 0xC27 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0xEB3 JUMPI PUSH2 0xEB3 PUSH2 0xE52 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xECC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xC55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0xF36 JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0xF1C JUMPI PUSH2 0xF1C PUSH2 0xE52 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0xF29 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0xEE2 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xF4D JUMPI POP PUSH1 0x1 PUSH2 0xFF9 JUMP JUMPDEST DUP2 PUSH2 0xF5A JUMPI POP PUSH1 0x0 PUSH2 0xFF9 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0xF70 JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0xF7A JUMPI PUSH2 0xF96 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0xFF9 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0xF8B JUMPI PUSH2 0xF8B PUSH2 0xE52 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0xFF9 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0xFB9 JUMPI POP DUP2 DUP2 EXP PUSH2 0xFF9 JUMP JUMPDEST PUSH2 0xFC3 DUP4 DUP4 PUSH2 0xEDD JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0xFF5 JUMPI PUSH2 0xFF5 PUSH2 0xE52 JUMP JUMPDEST MUL SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC55 PUSH1 0xFF DUP5 AND DUP4 PUSH2 0xF3E JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x1046 JUMPI PUSH2 0x1046 PUSH2 0xE52 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x105D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xC55 DUP2 PUSH2 0xC27 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 TIMESTAMP 0xEE DUP8 0xC3 PUSH3 0xC02396 DUP16 MSTORE DUP16 PUSH21 0x3B4B754D43798BAD978B093BCDAE6AA3C0ECB33B64 PUSH20 0x6F6C634300080A00330000000000000000000000 ","sourceMap":"305:2714:171:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1631:111;;;;;;:::i;:::-;;:::i;:::-;;2044;;;;;;:::i;:::-;2131:19;;2111:4;2131:19;;;:12;:19;;;;;;;;2130:20;;2044:111;;;;940:14:201;;933:22;915:41;;903:2;888:18;2044:111:171;;;;;;;;2185:258;;;;;;:::i;:::-;;:::i;1601:135:11:-;;;:::i;1018:71::-;1056:7;1078:6;1018:71;;1078:6;;;;2001:74:201;;1989:2;1974:18;1018:71:11;1855:226:201;2748:131:171;;;;;;:::i;:::-;;:::i;1200:401::-;;;;;;:::i;:::-;;:::i;:::-;;;2750:25:201;;;2738:2;2723:18;1200:401:171;2604:177:201;2473:244:171;;;;;;:::i;:::-;;:::i;2909:108::-;2995:17;;2909:108;;1772:95;1849:13;;;;1772:95;;1875:226:11;;;;;;:::i;:::-;;:::i;1897:117:171:-;;;;;;:::i;:::-;;:::i;1631:111::-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3879:2:201;1196:67:11;;;3861:21:201;;;3898:18;;;3891:30;3957:34;3937:18;;;3930:62;4009:18;;1196:67:11;;;;;;;;;1709:13:171::1;:28:::0;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;1631:111::o;2185:258::-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3879:2:201;1196:67:11;;;3861:21:201;;;3898:18;;;3891:30;3957:34;3937:18;;;3930:62;4009:18;;1196:67:11;3677:356:201;1196:67:11;2323:9:171::1;2318:121;2338:25:::0;;::::1;2318:121;;;2386:14;;2401:1;2386:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2378:54;::::0;;;;:44:::1;2019:55:201::0;;;2378:54:171::1;::::0;::::1;2001:74:201::0;2378:44:171;;;::::1;::::0;::::1;::::0;1974:18:201;;2378:54:171::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2365:3;;;;;:::i;:::-;;;;2318:121;;;;2185:258:::0;;;:::o;1601:135:11:-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3879:2:201;1196:67:11;;;3861:21:201;;;3898:18;;;3891:30;3957:34;3937:18;;;3930:62;4009:18;;1196:67:11;3677:356:201;1196:67:11;1703:1:::1;1687:6:::0;;1666:40:::1;::::0;::::1;1687:6:::0;;::::1;::::0;1666:40:::1;::::0;1703:1;;1666:40:::1;1729:1;1712:19:::0;;;::::1;::::0;;1601:135::o;2748:131:171:-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3879:2:201;1196:67:11;;;3861:21:201;;;3898:18;;;3891:30;3957:34;3937:18;;;3930:62;4009:18;;1196:67:11;3677:356:201;1196:67:11;2838:17:171::1;:36:::0;2748:131::o;1200:401::-;1053:13;;1324:7;;1053:13;;:21;;:13;:21;1049:110;;;1056:7:11;1078:6;1092:23:171;1078:6:11;678:10:4;1092:23:171;1084:68;;;;;;;3879:2:201;1084:68:171;;;3861:21:201;;;3898:18;;;3891:30;3957:34;3937:18;;;3930:62;4009:18;;1084:68:171;3677:356:201;1084:68:171;1348:19:::1;::::0;::::1;;::::0;;;:12:::1;:19;::::0;;;;;::::1;;1347:20;1339:52;;;::::0;::::1;::::0;;4818:2:201;1339:52:171::1;::::0;::::1;4800:21:201::0;4857:2;4837:18;;;4830:30;4896:21;4876:18;;;4869:49;4935:18;;1339:52:171::1;4616:343:201::0;1339:52:171::1;1462:5;1449:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1443:36;::::0;:2:::1;:36;:::i;:::-;1422:17;;:58;;;;:::i;:::-;1412:6;:68;;1397:137;;;::::0;::::1;::::0;;7180:2:201;1397:137:171::1;::::0;::::1;7162:21:201::0;7219:2;7199:18;;;7192:30;7258:34;7238:18;;;7231:62;7329:8;7309:18;;;7302:36;7355:19;;1397:137:171::1;6978:402:201::0;1397:137:171::1;1541:36;::::0;;;;:24:::1;7577:55:201::0;;;1541:36:171::1;::::0;::::1;7559:74:201::0;7649:18;;;7642:34;;;1541:24:171;::::1;::::0;::::1;::::0;7532:18:201;;1541:36:171::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;1590:6:171;;1200:401;-1:-1:-1;;;1200:401:171:o;2473:244::-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3879:2:201;1196:67:11;;;3861:21:201;;;3898:18;;;3891:30;3957:34;3937:18;;;3930:62;4009:18;;1196:67:11;3677:356:201;1196:67:11;2600:9:171::1;2595:118;2615:25:::0;;::::1;2595:118;;;2668:14;;2683:1;2668:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2655:51;::::0;;;;940:14:201;;933:22;2655:51:171::1;::::0;::::1;915:41:201::0;2655:44:171::1;::::0;;;::::1;::::0;::::1;::::0;888:18:201;;2655:51:171::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2642:3;;;;;:::i;:::-;;;;2595:118;;1875:226:11::0;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3879:2:201;1196:67:11;;;3861:21:201;;;3898:18;;;3891:30;3957:34;3937:18;;;3930:62;4009:18;;1196:67:11;3677:356:201;1196:67:11;1959:22:::1;::::0;::::1;1951:73;;;::::0;::::1;::::0;;8139:2:201;1951:73:11::1;::::0;::::1;8121:21:201::0;8178:2;8158:18;;;8151:30;8217:34;8197:18;;;8190:62;8288:8;8268:18;;;8261:36;8314:19;;1951:73:11::1;7937:402:201::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;::::1;::::0;;::::1;::::0;2056:6;::::1;::::0;2035:38:::1;::::0;::::1;2079:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1875:226::o;1897:117:171:-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3879:2:201;1196:67:11;;;3861:21:201;;;3898:18;;;3891:30;3957:34;3937:18;;;3930:62;4009:18;;1196:67:11;3677:356:201;1196:67:11;1980:19:171::1;::::0;;::::1;;::::0;;;:12:::1;:19;::::0;;;;:29;;;::::1;2002:7:::0;::::1;1980:29:::0;;;::::1;::::0;;1897:117::o;14:118:201:-;100:5;93:13;86:21;79:5;76:32;66:60;;122:1;119;112:12;66:60;14:118;:::o;137:241::-;193:6;246:2;234:9;225:7;221:23;217:32;214:52;;;262:1;259;252:12;214:52;301:9;288:23;320:28;342:5;320:28;:::i;:::-;367:5;137:241;-1:-1:-1;;;137:241:201:o;383:196::-;451:20;;511:42;500:54;;490:65;;480:93;;569:1;566;559:12;480:93;383:196;;;:::o;584:186::-;643:6;696:2;684:9;675:7;671:23;667:32;664:52;;;712:1;709;702:12;664:52;735:29;754:9;735:29;:::i;967:367::-;1030:8;1040:6;1094:3;1087:4;1079:6;1075:17;1071:27;1061:55;;1112:1;1109;1102:12;1061:55;-1:-1:-1;1135:20:201;;1178:18;1167:30;;1164:50;;;1210:1;1207;1200:12;1164:50;1247:4;1239:6;1235:17;1223:29;;1307:3;1300:4;1290:6;1287:1;1283:14;1275:6;1271:27;1267:38;1264:47;1261:67;;;1324:1;1321;1314:12;1261:67;967:367;;;;;:::o;1339:511::-;1434:6;1442;1450;1503:2;1491:9;1482:7;1478:23;1474:32;1471:52;;;1519:1;1516;1509:12;1471:52;1559:9;1546:23;1592:18;1584:6;1581:30;1578:50;;;1624:1;1621;1614:12;1578:50;1663:70;1725:7;1716:6;1705:9;1701:22;1663:70;:::i;:::-;1752:8;;-1:-1:-1;1637:96:201;-1:-1:-1;1806:38:201;;-1:-1:-1;1840:2:201;1825:18;;1806:38;:::i;:::-;1796:48;;1339:511;;;;;:::o;2086:180::-;2145:6;2198:2;2186:9;2177:7;2173:23;2169:32;2166:52;;;2214:1;2211;2204:12;2166:52;-1:-1:-1;2237:23:201;;2086:180;-1:-1:-1;2086:180:201:o;2271:328::-;2348:6;2356;2364;2417:2;2405:9;2396:7;2392:23;2388:32;2385:52;;;2433:1;2430;2423:12;2385:52;2456:29;2475:9;2456:29;:::i;:::-;2446:39;;2504:38;2538:2;2527:9;2523:18;2504:38;:::i;:::-;2494:48;;2589:2;2578:9;2574:18;2561:32;2551:42;;2271:328;;;;;:::o;2786:566::-;2878:6;2886;2894;2947:2;2935:9;2926:7;2922:23;2918:32;2915:52;;;2963:1;2960;2953:12;2915:52;3003:9;2990:23;3036:18;3028:6;3025:30;3022:50;;;3068:1;3065;3058:12;3022:50;3107:70;3169:7;3160:6;3149:9;3145:22;3107:70;:::i;:::-;3196:8;;-1:-1:-1;3081:96:201;-1:-1:-1;;3281:2:201;3266:18;;3253:32;3294:28;3253:32;3294:28;:::i;:::-;3341:5;3331:15;;;2786:566;;;;;:::o;3357:315::-;3422:6;3430;3483:2;3471:9;3462:7;3458:23;3454:32;3451:52;;;3499:1;3496;3489:12;3451:52;3522:29;3541:9;3522:29;:::i;:::-;3512:39;;3601:2;3590:9;3586:18;3573:32;3614:28;3636:5;3614:28;:::i;:::-;3661:5;3651:15;;;3357:315;;;;;:::o;4038:184::-;4090:77;4087:1;4080:88;4187:4;4184:1;4177:15;4211:4;4208:1;4201:15;4227:184;4279:77;4276:1;4269:88;4376:4;4373:1;4366:15;4400:4;4397:1;4390:15;4416:195;4455:3;4486:66;4479:5;4476:77;4473:103;;;4556:18;;:::i;:::-;-1:-1:-1;4603:1:201;4592:13;;4416:195::o;4964:273::-;5032:6;5085:2;5073:9;5064:7;5060:23;5056:32;5053:52;;;5101:1;5098;5091:12;5053:52;5133:9;5127:16;5183:4;5176:5;5172:16;5165:5;5162:27;5152:55;;5203:1;5200;5193:12;5242:482;5331:1;5374:5;5331:1;5388:330;5409:7;5399:8;5396:21;5388:330;;;5528:4;5460:66;5456:77;5450:4;5447:87;5444:113;;;5537:18;;:::i;:::-;5587:7;5577:8;5573:22;5570:55;;;5607:16;;;;5570:55;5686:22;;;;5646:15;;;;5388:330;;;5392:3;5242:482;;;;;:::o;5729:866::-;5778:5;5808:8;5798:80;;-1:-1:-1;5849:1:201;5863:5;;5798:80;5897:4;5887:76;;-1:-1:-1;5934:1:201;5948:5;;5887:76;5979:4;5997:1;5992:59;;;;6065:1;6060:130;;;;5972:218;;5992:59;6022:1;6013:10;;6036:5;;;6060:130;6097:3;6087:8;6084:17;6081:43;;;6104:18;;:::i;:::-;-1:-1:-1;;6160:1:201;6146:16;;6175:5;;5972:218;;6274:2;6264:8;6261:16;6255:3;6249:4;6246:13;6242:36;6236:2;6226:8;6223:16;6218:2;6212:4;6209:12;6205:35;6202:77;6199:159;;;-1:-1:-1;6311:19:201;;;6343:5;;6199:159;6390:34;6415:8;6409:4;6390:34;:::i;:::-;6520:6;6452:66;6448:79;6439:7;6436:92;6433:118;;;6531:18;;:::i;:::-;6569:20;;-1:-1:-1;5729:866:201;;;;;:::o;6600:140::-;6658:5;6687:47;6728:4;6718:8;6714:19;6708:4;6687:47;:::i;6745:228::-;6785:7;6911:1;6843:66;6839:74;6836:1;6833:81;6828:1;6821:9;6814:17;6810:105;6807:131;;;6918:18;;:::i;:::-;-1:-1:-1;6958:9:201;;6745:228::o;7687:245::-;7754:6;7807:2;7795:9;7786:7;7782:23;7778:32;7775:52;;;7823:1;7820;7813:12;7775:52;7855:9;7849:16;7874:28;7896:5;7874:28;:::i"},"gasEstimates":{"creation":{"codeDepositCost":"850800","executionCost":"infinite","totalCost":"infinite"},"external":{"getMaximumMintAmount()":"2359","isMintable(address)":"2563","isPermissioned()":"2315","mint(address,address,uint256)":"infinite","owner()":"2334","renounceOwnership()":"30149","setMaximumMintAmount(uint256)":"24519","setMintable(address,bool)":"26884","setPermissioned(bool)":"26672","setProtectedOfChild(address[],bool)":"infinite","transferOwnership(address)":"30369","transferOwnershipOfChild(address[],address)":"infinite"}},"methodIdentifiers":{"getMaximumMintAmount()":"dd26b1d3","isMintable(address)":"222b15fb","isPermissioned()":"e2a4157c","mint(address,address,uint256)":"c6c3bbe6","owner()":"8da5cb5b","renounceOwnership()":"715018a6","setMaximumMintAmount(uint256)":"9420d476","setMintable(address,bool)":"f7eb06c4","setPermissioned(bool)":"1a678cd3","setProtectedOfChild(address[],bool)":"ca51a903","transferOwnership(address)":"f2fde38b","transferOwnershipOfChild(address[],address)":"506f26cc"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"permissioned\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"maxMinAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getMaximumMintAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"isMintable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPermissioned\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newMaxMintAmount\",\"type\":\"uint256\"}],\"name\":\"setMaximumMintAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"}],\"name\":\"setMintable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"permissioned\",\"type\":\"bool\"}],\"name\":\"setPermissioned\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"childContracts\",\"type\":\"address[]\"},{\"internalType\":\"bool\",\"name\":\"state\",\"type\":\"bool\"}],\"name\":\"setProtectedOfChild\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"childContracts\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnershipOfChild\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Ownable Faucet Contract\",\"kind\":\"dev\",\"methods\":{\"getMaximumMintAmount()\":{\"returns\":{\"_0\":\"The maximum amount of tokens per mint allowed (whole tokens)\"}},\"isMintable(address)\":{\"params\":{\"asset\":\"The address of the asset\"},\"returns\":{\"_0\":\"True if the asset is mintable, false otherwise\"}},\"isPermissioned()\":{\"returns\":{\"_0\":\"Returns a boolean, if true the mode is enabled, if false is disabled\"}},\"mint(address,address,uint256)\":{\"params\":{\"amount\":\"The amount of tokens to mint\",\"to\":\"The address to send the minted tokens\",\"token\":\"The address of the token to perform the mint\"},\"returns\":{\"_0\":\"The amount minted*\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setMaximumMintAmount(uint256)\":{\"params\":{\"newMaxMintAmount\":\"The new value of maximum amount of tokens per mint (whole tokens)\"}},\"setMintable(address,bool)\":{\"params\":{\"active\":\"True to enable, false to disable\",\"asset\":\"The address of the asset\"}},\"setPermissioned(bool)\":{\"params\":{\"value\":\"If true, ask for authentication at `mint` function, if false, disable the authentication\"}},\"setProtectedOfChild(address[],bool)\":{\"params\":{\"childContracts\":\"A list of child token contract addresses\",\"state\":\"True if tokens are only mintable through Faucet, false otherwise\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"transferOwnershipOfChild(address[],address)\":{\"params\":{\"childContracts\":\"A list of child contract addresses\",\"newOwner\":\"The address of the new owner\"}}},\"title\":\"Faucet\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getMaximumMintAmount()\":{\"notice\":\"Returns the maximum amount of tokens per mint allowed\"},\"isMintable(address)\":{\"notice\":\"Returns whether the asset is mintable\"},\"isPermissioned()\":{\"notice\":\"Getter to determine if permissioned mode is enabled or disabled\"},\"mint(address,address,uint256)\":{\"notice\":\"Function to mint Testnet tokens to the destination address\"},\"setMaximumMintAmount(uint256)\":{\"notice\":\"Updates the maximum amount of tokens per mint allowed\"},\"setMintable(address,bool)\":{\"notice\":\"Enable or disable the minting of the faucet asset\"},\"setPermissioned(bool)\":{\"notice\":\"Enable or disable the need of authentication to call `mint` function\"},\"setProtectedOfChild(address[],bool)\":{\"notice\":\"Updates protection of minting feature of child token contracts\"},\"transferOwnershipOfChild(address[],address)\":{\"notice\":\"Transfer the ownership of child contracts\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/testnet-helpers/Faucet.sol\":\"Faucet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\nimport './IERC20.sol';\\nimport './SafeMath.sol';\\nimport './Address.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 Context, IERC20 {\\n  using SafeMath for uint256;\\n  using Address for address;\\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(_msgSender(), recipient, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-allowance}.\\n   */\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) 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(_msgSender(), 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   * - `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      _msgSender(),\\n      _allowances[sender][_msgSender()].sub(amount, 'ERC20: transfer amount 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(_msgSender(), spender, _allowances[_msgSender()][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(\\n    address spender,\\n    uint256 subtractedValue\\n  ) public virtual returns (bool) {\\n    _approve(\\n      _msgSender(),\\n      spender,\\n      _allowances[_msgSender()][spender].sub(\\n        subtractedValue,\\n        'ERC20: decreased allowance below zero'\\n      )\\n    );\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Moves tokens `amount` from `sender` to `recipient`.\\n   *\\n   * This is internal function is equivalent to {transfer}, and can be used to\\n   * e.g. implement automatic token fees, slashing mechanisms, etc.\\n   *\\n   * Emits a {Transfer} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `sender` cannot be the zero address.\\n   * - `recipient` cannot be the zero address.\\n   * - `sender` must have a balance of at least `amount`.\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount) internal virtual {\\n    require(sender != address(0), 'ERC20: transfer from the zero address');\\n    require(recipient != address(0), 'ERC20: transfer to the zero address');\\n\\n    _beforeTokenTransfer(sender, recipient, amount);\\n\\n    _balances[sender] = _balances[sender].sub(amount, 'ERC20: transfer amount 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    require(account != address(0), 'ERC20: mint to the zero address');\\n\\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), 'ERC20: burn from the zero address');\\n\\n    _beforeTokenTransfer(account, address(0), amount);\\n\\n    _balances[account] = _balances[account].sub(amount, 'ERC20: burn amount 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 is 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(address owner, address spender, uint256 amount) internal virtual {\\n    require(owner != address(0), 'ERC20: approve from the zero address');\\n    require(spender != address(0), 'ERC20: approve to the zero address');\\n\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @dev 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(address from, address to, uint256 amount) internal virtual {}\\n}\\n\",\"keccak256\":\"0x84e6a151684cce31e66c850677f7e9455d694e050e409e5ded05fb5528c6c7e4\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable is Context {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial owner.\\n   */\\n  constructor() {\\n    address msgSender = _msgSender();\\n    _owner = msgSender;\\n    emit OwnershipTransferred(address(0), msgSender);\\n  }\\n\\n  /**\\n   * @dev Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Leaves the contract without owner. It will not be possible to call\\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\\n   *\\n   * NOTE: Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public virtual onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = address(0);\\n  }\\n\\n  /**\\n   * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function transferOwnership(address newOwner) public virtual onlyOwner {\\n    require(newOwner != address(0), 'Ownable: new owner is the zero address');\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\",\"keccak256\":\"0x3ce185c4f579e32006f8893dbfdc1b5d878c0e2cafd1508f7ceb081698bc81f9\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/// @title Optimized overflow and underflow safe math operations\\n/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\\nlibrary SafeMath {\\n  /// @notice Returns x + y, reverts if sum overflows uint256\\n  /// @param x The augend\\n  /// @param y The addend\\n  /// @return z The sum of x and y\\n  function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x + y) >= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @param message The error msg\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y, string memory message) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x, message);\\n    }\\n  }\\n\\n  /// @notice Returns x * y, reverts if overflows\\n  /// @param x The multiplicand\\n  /// @param y The multiplier\\n  /// @return z The product of x and y\\n  function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require(x == 0 || (z = x * y) / x == y);\\n    }\\n  }\\n\\n  /// @notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\\n  /// @param x The numerator\\n  /// @param y The denominator\\n  /// @return z The product of x and y\\n  function div(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    return x / y;\\n  }\\n}\\n\",\"keccak256\":\"0xf1c5d8ba70a5fc3e20dbbc2aa2a2278d2535a57bc1e9abf1228ebc3068a045f0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"},\"contracts/mocks/testnet-helpers/Faucet.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\\nimport {TestnetERC20} from './TestnetERC20.sol';\\nimport {IFaucet} from './IFaucet.sol';\\n\\n/**\\n * @title Faucet\\n * @dev Ownable Faucet Contract\\n */\\ncontract Faucet is IFaucet, Ownable {\\n  uint256 internal maximumMintAmount;\\n\\n  // Mapping to control mint of assets (allowed by default)\\n  mapping(address => bool) internal _nonMintable;\\n\\n  // If _permissioned is enabled, then only owner can mint Testnet ERC20 tokens\\n  // If disabled, anyone can call mint at the faucet, for PoC environments\\n  bool internal _permissioned;\\n\\n  constructor(address owner, bool permissioned, uint256 maxMinAmount) {\\n    require(owner != address(0));\\n    transferOwnership(owner);\\n    _permissioned = permissioned;\\n    maximumMintAmount = maxMinAmount;\\n  }\\n\\n  /**\\n   * @dev Function modifier, if _permissioned is enabled then msg.sender is required to be the owner\\n   */\\n  modifier onlyOwnerIfPermissioned() {\\n    if (_permissioned == true) {\\n      require(owner() == _msgSender(), 'Ownable: caller is not the owner');\\n    }\\n    _;\\n  }\\n\\n  /// @inheritdoc IFaucet\\n  function mint(\\n    address token,\\n    address to,\\n    uint256 amount\\n  ) external override onlyOwnerIfPermissioned returns (uint256) {\\n    require(!_nonMintable[token], 'Error: not mintable');\\n    require(\\n      amount <= maximumMintAmount * (10 ** TestnetERC20(token).decimals()),\\n      'Error: Mint limit transaction exceeded'\\n    );\\n\\n    TestnetERC20(token).mint(to, amount);\\n    return amount;\\n  }\\n\\n  /// @inheritdoc IFaucet\\n  function setPermissioned(bool permissioned) external override onlyOwner {\\n    _permissioned = permissioned;\\n  }\\n\\n  /// @inheritdoc IFaucet\\n  function isPermissioned() external view override returns (bool) {\\n    return _permissioned;\\n  }\\n\\n  /// @inheritdoc IFaucet\\n  function setMintable(address asset, bool active) external override onlyOwner {\\n    _nonMintable[asset] = !active;\\n  }\\n\\n  /// @inheritdoc IFaucet\\n  function isMintable(address asset) external view override returns (bool) {\\n    return !_nonMintable[asset];\\n  }\\n\\n  /// @inheritdoc IFaucet\\n  function transferOwnershipOfChild(\\n    address[] calldata childContracts,\\n    address newOwner\\n  ) external override onlyOwner {\\n    for (uint256 i = 0; i < childContracts.length; i++) {\\n      Ownable(childContracts[i]).transferOwnership(newOwner);\\n    }\\n  }\\n\\n  /// @inheritdoc IFaucet\\n  function setProtectedOfChild(\\n    address[] calldata childContracts,\\n    bool state\\n  ) external override onlyOwner {\\n    for (uint256 i = 0; i < childContracts.length; i++) {\\n      TestnetERC20(childContracts[i]).setProtected(state);\\n    }\\n  }\\n\\n\\n  /// @inheritdoc IFaucet\\n  function setMaximumMintAmount(uint256 newMaxMintAmount) external override onlyOwner {\\n    maximumMintAmount = newMaxMintAmount;\\n  }\\n\\n  /// @inheritdoc IFaucet\\n  function getMaximumMintAmount() external view override returns (uint256) {\\n    return maximumMintAmount;\\n  }\\n}\\n\",\"keccak256\":\"0xfd079f90d9edcf50501fc53d6a3723634668639850c7ab2f5015277cfd4faf6a\",\"license\":\"BUSL-1.1\"},\"contracts/mocks/testnet-helpers/IFaucet.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\ninterface IFaucet {\\n  /**\\n   * @notice Function to mint Testnet tokens to the destination address\\n   * @param token The address of the token to perform the mint\\n   * @param to The address to send the minted tokens\\n   * @param amount The amount of tokens to mint\\n   * @return The amount minted\\n   **/\\n  function mint(address token, address to, uint256 amount) external returns (uint256);\\n\\n  /**\\n   * @notice Enable or disable the need of authentication to call `mint` function\\n   * @param value If true, ask for authentication at `mint` function, if false, disable the authentication\\n   */\\n  function setPermissioned(bool value) external;\\n\\n  /**\\n   * @notice Getter to determine if permissioned mode is enabled or disabled\\n   * @return Returns a boolean, if true the mode is enabled, if false is disabled\\n   */\\n  function isPermissioned() external view returns (bool);\\n\\n  /**\\n   * @notice Enable or disable the minting of the faucet asset\\n   * @param asset The address of the asset\\n   * @param active True to enable, false to disable\\n   */\\n  function setMintable(address asset, bool active) external;\\n\\n  /**\\n   * @notice Returns whether the asset is mintable\\n   * @param asset The address of the asset\\n   * @return True if the asset is mintable, false otherwise\\n   */\\n  function isMintable(address asset) external view returns (bool);\\n\\n  /**\\n   * @notice Transfer the ownership of child contracts\\n   * @param childContracts A list of child contract addresses\\n   * @param newOwner The address of the new owner\\n   */\\n  function transferOwnershipOfChild(address[] calldata childContracts, address newOwner) external;\\n\\n  /**\\n   * @notice Updates protection of minting feature of child token contracts\\n   * @param childContracts A list of child token contract addresses\\n   * @param state True if tokens are only mintable through Faucet, false otherwise\\n   */\\n  function setProtectedOfChild(address[] calldata childContracts, bool state) external;\\n\\n  /**\\n   * @notice Updates the maximum amount of tokens per mint allowed\\n   * @param newMaxMintAmount The new value of maximum amount of tokens per mint (whole tokens)\\n   */\\n  function setMaximumMintAmount(uint256 newMaxMintAmount) external;\\n\\n  /**\\n   * @notice Returns the maximum amount of tokens per mint allowed\\n   * @return The maximum amount of tokens per mint allowed (whole tokens)\\n   */\\n  function getMaximumMintAmount() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x1397cc647f59d82bd93722f211e375a2f971fbaa50cb824f48756031a882de37\",\"license\":\"BUSL-1.1\"},\"contracts/mocks/testnet-helpers/TestnetERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\\nimport {ERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol';\\nimport {IERC20WithPermit} from '@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol';\\n\\n/**\\n * @title TestnetERC20\\n * @dev ERC20 minting logic\\n */\\ncontract TestnetERC20 is IERC20WithPermit, ERC20, Ownable {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n  bytes32 public constant PERMIT_TYPEHASH =\\n    keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 public DOMAIN_SEPARATOR;\\n\\n  bool internal _protected;\\n\\n  /**\\n   * @dev Function modifier, if _protected is enabled then msg.sender is required to be the owner\\n   */\\n  modifier onlyOwnerIfProtected() {\\n    if (_protected == true) {\\n      require(owner() == _msgSender(), 'Ownable: caller is not the owner');\\n    }\\n    _;\\n  }\\n\\n  constructor(\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals,\\n    address owner\\n  ) ERC20(name, symbol) {\\n    uint256 chainId = block.chainid;\\n\\n    DOMAIN_SEPARATOR = keccak256(\\n      abi.encode(\\n        EIP712_DOMAIN,\\n        keccak256(bytes(name)),\\n        keccak256(EIP712_REVISION),\\n        chainId,\\n        address(this)\\n      )\\n    );\\n    _setupDecimals(decimals);\\n    require(owner != address(0));\\n    transferOwnership(owner);\\n    _protected = true;\\n  }\\n\\n  /// @inheritdoc IERC20WithPermit\\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 override {\\n    require(owner != address(0), 'INVALID_OWNER');\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, 'INVALID_EXPIRATION');\\n    uint256 currentValidNonce = _nonces[owner];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR,\\n        keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, currentValidNonce, deadline))\\n      )\\n    );\\n    require(owner == ecrecover(digest, v, r, s), 'INVALID_SIGNATURE');\\n    _nonces[owner] = currentValidNonce + 1;\\n    _approve(owner, spender, value);\\n  }\\n\\n  /**\\n   * @dev Function to mint tokens\\n   * @param value The amount of tokens to mint.\\n   * @return A boolean that indicates if the operation was successful.\\n   */\\n  function mint(uint256 value) public virtual onlyOwnerIfProtected returns (bool) {\\n    _mint(_msgSender(), value);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Function to mint tokens to address\\n   * @param account The account to mint tokens.\\n   * @param value The amount of tokens to mint.\\n   * @return A boolean that indicates if the operation was successful.\\n   */\\n  function mint(address account, uint256 value) public virtual onlyOwnerIfProtected returns (bool) {\\n    _mint(account, value);\\n    return true;\\n  }\\n\\n  function nonces(address owner) public view returns (uint256) {\\n    return _nonces[owner];\\n  }\\n\\n  function setProtected(bool state) public onlyOwner {\\n    _protected = state;\\n  }\\n\\n  function isProtected() public view returns (bool) {\\n    return _protected;\\n  }\\n}\\n\",\"keccak256\":\"0x77cf9848a42e5c8684ef832dae92f5095ab539a4cdbd58b2d60ca6586d26384e\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1472,"contract":"contracts/mocks/testnet-helpers/Faucet.sol:Faucet","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":35632,"contract":"contracts/mocks/testnet-helpers/Faucet.sol:Faucet","label":"maximumMintAmount","offset":0,"slot":"1","type":"t_uint256"},{"astId":35636,"contract":"contracts/mocks/testnet-helpers/Faucet.sol:Faucet","label":"_nonMintable","offset":0,"slot":"2","type":"t_mapping(t_address,t_bool)"},{"astId":35638,"contract":"contracts/mocks/testnet-helpers/Faucet.sol:Faucet","label":"_permissioned","offset":0,"slot":"3","type":"t_bool"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{"getMaximumMintAmount()":{"notice":"Returns the maximum amount of tokens per mint allowed"},"isMintable(address)":{"notice":"Returns whether the asset is mintable"},"isPermissioned()":{"notice":"Getter to determine if permissioned mode is enabled or disabled"},"mint(address,address,uint256)":{"notice":"Function to mint Testnet tokens to the destination address"},"setMaximumMintAmount(uint256)":{"notice":"Updates the maximum amount of tokens per mint allowed"},"setMintable(address,bool)":{"notice":"Enable or disable the minting of the faucet asset"},"setPermissioned(bool)":{"notice":"Enable or disable the need of authentication to call `mint` function"},"setProtectedOfChild(address[],bool)":{"notice":"Updates protection of minting feature of child token contracts"},"transferOwnershipOfChild(address[],address)":{"notice":"Transfer the ownership of child contracts"}},"version":1}}},"contracts/mocks/testnet-helpers/IFaucet.sol":{"IFaucet":{"abi":[{"inputs":[],"name":"getMaximumMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"isMintable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPermissioned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxMintAmount","type":"uint256"}],"name":"setMaximumMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"active","type":"bool"}],"name":"setMintable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setPermissioned","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"childContracts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setProtectedOfChild","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"childContracts","type":"address[]"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnershipOfChild","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"getMaximumMintAmount()":{"returns":{"_0":"The maximum amount of tokens per mint allowed (whole tokens)"}},"isMintable(address)":{"params":{"asset":"The address of the asset"},"returns":{"_0":"True if the asset is mintable, false otherwise"}},"isPermissioned()":{"returns":{"_0":"Returns a boolean, if true the mode is enabled, if false is disabled"}},"mint(address,address,uint256)":{"params":{"amount":"The amount of tokens to mint","to":"The address to send the minted tokens","token":"The address of the token to perform the mint"},"returns":{"_0":"The amount minted*"}},"setMaximumMintAmount(uint256)":{"params":{"newMaxMintAmount":"The new value of maximum amount of tokens per mint (whole tokens)"}},"setMintable(address,bool)":{"params":{"active":"True to enable, false to disable","asset":"The address of the asset"}},"setPermissioned(bool)":{"params":{"value":"If true, ask for authentication at `mint` function, if false, disable the authentication"}},"setProtectedOfChild(address[],bool)":{"params":{"childContracts":"A list of child token contract addresses","state":"True if tokens are only mintable through Faucet, false otherwise"}},"transferOwnershipOfChild(address[],address)":{"params":{"childContracts":"A list of child contract addresses","newOwner":"The address of the new owner"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getMaximumMintAmount()":"dd26b1d3","isMintable(address)":"222b15fb","isPermissioned()":"e2a4157c","mint(address,address,uint256)":"c6c3bbe6","setMaximumMintAmount(uint256)":"9420d476","setMintable(address,bool)":"f7eb06c4","setPermissioned(bool)":"1a678cd3","setProtectedOfChild(address[],bool)":"ca51a903","transferOwnershipOfChild(address[],address)":"506f26cc"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getMaximumMintAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"isMintable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPermissioned\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newMaxMintAmount\",\"type\":\"uint256\"}],\"name\":\"setMaximumMintAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"}],\"name\":\"setMintable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"setPermissioned\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"childContracts\",\"type\":\"address[]\"},{\"internalType\":\"bool\",\"name\":\"state\",\"type\":\"bool\"}],\"name\":\"setProtectedOfChild\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"childContracts\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnershipOfChild\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getMaximumMintAmount()\":{\"returns\":{\"_0\":\"The maximum amount of tokens per mint allowed (whole tokens)\"}},\"isMintable(address)\":{\"params\":{\"asset\":\"The address of the asset\"},\"returns\":{\"_0\":\"True if the asset is mintable, false otherwise\"}},\"isPermissioned()\":{\"returns\":{\"_0\":\"Returns a boolean, if true the mode is enabled, if false is disabled\"}},\"mint(address,address,uint256)\":{\"params\":{\"amount\":\"The amount of tokens to mint\",\"to\":\"The address to send the minted tokens\",\"token\":\"The address of the token to perform the mint\"},\"returns\":{\"_0\":\"The amount minted*\"}},\"setMaximumMintAmount(uint256)\":{\"params\":{\"newMaxMintAmount\":\"The new value of maximum amount of tokens per mint (whole tokens)\"}},\"setMintable(address,bool)\":{\"params\":{\"active\":\"True to enable, false to disable\",\"asset\":\"The address of the asset\"}},\"setPermissioned(bool)\":{\"params\":{\"value\":\"If true, ask for authentication at `mint` function, if false, disable the authentication\"}},\"setProtectedOfChild(address[],bool)\":{\"params\":{\"childContracts\":\"A list of child token contract addresses\",\"state\":\"True if tokens are only mintable through Faucet, false otherwise\"}},\"transferOwnershipOfChild(address[],address)\":{\"params\":{\"childContracts\":\"A list of child contract addresses\",\"newOwner\":\"The address of the new owner\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getMaximumMintAmount()\":{\"notice\":\"Returns the maximum amount of tokens per mint allowed\"},\"isMintable(address)\":{\"notice\":\"Returns whether the asset is mintable\"},\"isPermissioned()\":{\"notice\":\"Getter to determine if permissioned mode is enabled or disabled\"},\"mint(address,address,uint256)\":{\"notice\":\"Function to mint Testnet tokens to the destination address\"},\"setMaximumMintAmount(uint256)\":{\"notice\":\"Updates the maximum amount of tokens per mint allowed\"},\"setMintable(address,bool)\":{\"notice\":\"Enable or disable the minting of the faucet asset\"},\"setPermissioned(bool)\":{\"notice\":\"Enable or disable the need of authentication to call `mint` function\"},\"setProtectedOfChild(address[],bool)\":{\"notice\":\"Updates protection of minting feature of child token contracts\"},\"transferOwnershipOfChild(address[],address)\":{\"notice\":\"Transfer the ownership of child contracts\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/testnet-helpers/IFaucet.sol\":\"IFaucet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"contracts/mocks/testnet-helpers/IFaucet.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\ninterface IFaucet {\\n  /**\\n   * @notice Function to mint Testnet tokens to the destination address\\n   * @param token The address of the token to perform the mint\\n   * @param to The address to send the minted tokens\\n   * @param amount The amount of tokens to mint\\n   * @return The amount minted\\n   **/\\n  function mint(address token, address to, uint256 amount) external returns (uint256);\\n\\n  /**\\n   * @notice Enable or disable the need of authentication to call `mint` function\\n   * @param value If true, ask for authentication at `mint` function, if false, disable the authentication\\n   */\\n  function setPermissioned(bool value) external;\\n\\n  /**\\n   * @notice Getter to determine if permissioned mode is enabled or disabled\\n   * @return Returns a boolean, if true the mode is enabled, if false is disabled\\n   */\\n  function isPermissioned() external view returns (bool);\\n\\n  /**\\n   * @notice Enable or disable the minting of the faucet asset\\n   * @param asset The address of the asset\\n   * @param active True to enable, false to disable\\n   */\\n  function setMintable(address asset, bool active) external;\\n\\n  /**\\n   * @notice Returns whether the asset is mintable\\n   * @param asset The address of the asset\\n   * @return True if the asset is mintable, false otherwise\\n   */\\n  function isMintable(address asset) external view returns (bool);\\n\\n  /**\\n   * @notice Transfer the ownership of child contracts\\n   * @param childContracts A list of child contract addresses\\n   * @param newOwner The address of the new owner\\n   */\\n  function transferOwnershipOfChild(address[] calldata childContracts, address newOwner) external;\\n\\n  /**\\n   * @notice Updates protection of minting feature of child token contracts\\n   * @param childContracts A list of child token contract addresses\\n   * @param state True if tokens are only mintable through Faucet, false otherwise\\n   */\\n  function setProtectedOfChild(address[] calldata childContracts, bool state) external;\\n\\n  /**\\n   * @notice Updates the maximum amount of tokens per mint allowed\\n   * @param newMaxMintAmount The new value of maximum amount of tokens per mint (whole tokens)\\n   */\\n  function setMaximumMintAmount(uint256 newMaxMintAmount) external;\\n\\n  /**\\n   * @notice Returns the maximum amount of tokens per mint allowed\\n   * @return The maximum amount of tokens per mint allowed (whole tokens)\\n   */\\n  function getMaximumMintAmount() external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x1397cc647f59d82bd93722f211e375a2f971fbaa50cb824f48756031a882de37\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"getMaximumMintAmount()":{"notice":"Returns the maximum amount of tokens per mint allowed"},"isMintable(address)":{"notice":"Returns whether the asset is mintable"},"isPermissioned()":{"notice":"Getter to determine if permissioned mode is enabled or disabled"},"mint(address,address,uint256)":{"notice":"Function to mint Testnet tokens to the destination address"},"setMaximumMintAmount(uint256)":{"notice":"Updates the maximum amount of tokens per mint allowed"},"setMintable(address,bool)":{"notice":"Enable or disable the minting of the faucet asset"},"setPermissioned(bool)":{"notice":"Enable or disable the need of authentication to call `mint` function"},"setProtectedOfChild(address[],bool)":{"notice":"Updates protection of minting feature of child token contracts"},"transferOwnershipOfChild(address[],address)":{"notice":"Transfer the ownership of child contracts"}},"version":1}}},"contracts/mocks/testnet-helpers/TestnetERC20.sol":{"TestnetERC20":{"abi":[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EIP712_REVISION","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","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":"isProtected","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mint","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":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setProtected","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"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"ERC20 minting logic","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}."},"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."},"mint(address,uint256)":{"details":"Function to mint tokens to address","params":{"account":"The account to mint tokens.","value":"The amount of tokens to mint."},"returns":{"_0":"A boolean that indicates if the operation was successful."}},"mint(uint256)":{"details":"Function to mint tokens","params":{"value":"The amount of tokens to mint."},"returns":{"_0":"A boolean that indicates if the operation was successful."}},"name()":{"details":"Returns the name of the token."},"owner()":{"details":"Returns the address of the current owner."},"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"details":"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md","params":{"deadline":"The deadline timestamp, type(uint256).max for max deadline","owner":"The owner of the funds","r":"Signature param","s":"Signature param","spender":"The spender","v":"Signature param","value":"The amount"}},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `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`."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"title":"TestnetERC20","version":1},"evm":{"bytecode":{"functionDebugData":{"@_1500":{"entryPoint":null,"id":1500,"parameterSlots":0,"returnSlots":0},"@_36087":{"entryPoint":null,"id":36087,"parameterSlots":4,"returnSlots":0},"@_828":{"entryPoint":null,"id":828,"parameterSlots":2,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_setupDecimals_1267":{"entryPoint":null,"id":1267,"parameterSlots":1,"returnSlots":0},"@transferOwnership_1572":{"entryPoint":428,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_string_fromMemory":{"entryPoint":907,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_uint8t_address_fromMemory":{"entryPoint":1090,"id":null,"parameterSlots":2,"returnSlots":4},"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"extract_byte_array_length":{"entryPoint":1254,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x41":{"entryPoint":885,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3573:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"46:95:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"63:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"70:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"75:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"66:3:201"},"nodeType":"YulFunctionCall","src":"66:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"56:6:201"},"nodeType":"YulFunctionCall","src":"56:31:201"},"nodeType":"YulExpressionStatement","src":"56:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"103:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"106:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"96:6:201"},"nodeType":"YulFunctionCall","src":"96:15:201"},"nodeType":"YulExpressionStatement","src":"96:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"127:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"130:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"120:6:201"},"nodeType":"YulFunctionCall","src":"120:15:201"},"nodeType":"YulExpressionStatement","src":"120:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"14:127:201"},{"body":{"nodeType":"YulBlock","src":"210:821:201","statements":[{"body":{"nodeType":"YulBlock","src":"259:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"268:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"271:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"261:6:201"},"nodeType":"YulFunctionCall","src":"261:12:201"},"nodeType":"YulExpressionStatement","src":"261:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"238:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"246:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"234:3:201"},"nodeType":"YulFunctionCall","src":"234:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"253:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"230:3:201"},"nodeType":"YulFunctionCall","src":"230:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"223:6:201"},"nodeType":"YulFunctionCall","src":"223:35:201"},"nodeType":"YulIf","src":"220:55:201"},{"nodeType":"YulVariableDeclaration","src":"284:23:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"300:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"294:5:201"},"nodeType":"YulFunctionCall","src":"294:13:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"288:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"316:28:201","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"334:2:201","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"338:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"330:3:201"},"nodeType":"YulFunctionCall","src":"330:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"342:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"326:3:201"},"nodeType":"YulFunctionCall","src":"326:18:201"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"320:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"367:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"369:16:201"},"nodeType":"YulFunctionCall","src":"369:18:201"},"nodeType":"YulExpressionStatement","src":"369:18:201"}]},"condition":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"359:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"363:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"356:2:201"},"nodeType":"YulFunctionCall","src":"356:10:201"},"nodeType":"YulIf","src":"353:36:201"},{"nodeType":"YulVariableDeclaration","src":"398:17:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"412:2:201","type":"","value":"31"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"408:3:201"},"nodeType":"YulFunctionCall","src":"408:7:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"402:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"424:23:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"444:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"438:5:201"},"nodeType":"YulFunctionCall","src":"438:9:201"},"variables":[{"name":"memPtr","nodeType":"YulTypedName","src":"428:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"456:71:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"478:6:201"},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"502:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"506:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"498:3:201"},"nodeType":"YulFunctionCall","src":"498:13:201"},{"name":"_3","nodeType":"YulIdentifier","src":"513:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"494:3:201"},"nodeType":"YulFunctionCall","src":"494:22:201"},{"kind":"number","nodeType":"YulLiteral","src":"518:2:201","type":"","value":"63"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"490:3:201"},"nodeType":"YulFunctionCall","src":"490:31:201"},{"name":"_3","nodeType":"YulIdentifier","src":"523:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"486:3:201"},"nodeType":"YulFunctionCall","src":"486:40:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"474:3:201"},"nodeType":"YulFunctionCall","src":"474:53:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"460:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"586:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"588:16:201"},"nodeType":"YulFunctionCall","src":"588:18:201"},"nodeType":"YulExpressionStatement","src":"588:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"545:10:201"},{"name":"_2","nodeType":"YulIdentifier","src":"557:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"542:2:201"},"nodeType":"YulFunctionCall","src":"542:18:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"565:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"577:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"562:2:201"},"nodeType":"YulFunctionCall","src":"562:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"539:2:201"},"nodeType":"YulFunctionCall","src":"539:46:201"},"nodeType":"YulIf","src":"536:72:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"624:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"628:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"617:6:201"},"nodeType":"YulFunctionCall","src":"617:22:201"},"nodeType":"YulExpressionStatement","src":"617:22:201"},{"expression":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"655:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"663:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"648:6:201"},"nodeType":"YulFunctionCall","src":"648:18:201"},"nodeType":"YulExpressionStatement","src":"648:18:201"},{"nodeType":"YulVariableDeclaration","src":"675:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"685:4:201","type":"","value":"0x20"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"679:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"735:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"744:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"747:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"737:6:201"},"nodeType":"YulFunctionCall","src":"737:12:201"},"nodeType":"YulExpressionStatement","src":"737:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"712:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"720:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"708:3:201"},"nodeType":"YulFunctionCall","src":"708:15:201"},{"name":"_4","nodeType":"YulIdentifier","src":"725:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"704:3:201"},"nodeType":"YulFunctionCall","src":"704:24:201"},{"name":"end","nodeType":"YulIdentifier","src":"730:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"701:2:201"},"nodeType":"YulFunctionCall","src":"701:33:201"},"nodeType":"YulIf","src":"698:53:201"},{"nodeType":"YulVariableDeclaration","src":"760:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"769:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"764:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"825:87:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"854:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"862:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"850:3:201"},"nodeType":"YulFunctionCall","src":"850:14:201"},{"name":"_4","nodeType":"YulIdentifier","src":"866:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"846:3:201"},"nodeType":"YulFunctionCall","src":"846:23:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"885:6:201"},{"name":"i","nodeType":"YulIdentifier","src":"893:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"881:3:201"},"nodeType":"YulFunctionCall","src":"881:14:201"},{"name":"_4","nodeType":"YulIdentifier","src":"897:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"877:3:201"},"nodeType":"YulFunctionCall","src":"877:23:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"871:5:201"},"nodeType":"YulFunctionCall","src":"871:30:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"839:6:201"},"nodeType":"YulFunctionCall","src":"839:63:201"},"nodeType":"YulExpressionStatement","src":"839:63:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"790:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"793:2:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"787:2:201"},"nodeType":"YulFunctionCall","src":"787:9:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"797:19:201","statements":[{"nodeType":"YulAssignment","src":"799:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"808:1:201"},{"name":"_4","nodeType":"YulIdentifier","src":"811:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"804:3:201"},"nodeType":"YulFunctionCall","src":"804:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"799:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"783:3:201","statements":[]},"src":"779:133:201"},{"body":{"nodeType":"YulBlock","src":"942:59:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"971:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"979:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"967:3:201"},"nodeType":"YulFunctionCall","src":"967:15:201"},{"name":"_4","nodeType":"YulIdentifier","src":"984:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"963:3:201"},"nodeType":"YulFunctionCall","src":"963:24:201"},{"kind":"number","nodeType":"YulLiteral","src":"989:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"956:6:201"},"nodeType":"YulFunctionCall","src":"956:35:201"},"nodeType":"YulExpressionStatement","src":"956:35:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"927:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"930:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"924:2:201"},"nodeType":"YulFunctionCall","src":"924:9:201"},"nodeType":"YulIf","src":"921:80:201"},{"nodeType":"YulAssignment","src":"1010:15:201","value":{"name":"memPtr","nodeType":"YulIdentifier","src":"1019:6:201"},"variableNames":[{"name":"array","nodeType":"YulIdentifier","src":"1010:5:201"}]}]},"name":"abi_decode_string_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"184:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"192:3:201","type":""}],"returnVariables":[{"name":"array","nodeType":"YulTypedName","src":"200:5:201","type":""}],"src":"146:885:201"},{"body":{"nodeType":"YulBlock","src":"1186:738:201","statements":[{"body":{"nodeType":"YulBlock","src":"1233:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1242:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1245:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1235:6:201"},"nodeType":"YulFunctionCall","src":"1235:12:201"},"nodeType":"YulExpressionStatement","src":"1235:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1207:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1216:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1203:3:201"},"nodeType":"YulFunctionCall","src":"1203:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1228:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1199:3:201"},"nodeType":"YulFunctionCall","src":"1199:33:201"},"nodeType":"YulIf","src":"1196:53:201"},{"nodeType":"YulVariableDeclaration","src":"1258:30:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1278:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1272:5:201"},"nodeType":"YulFunctionCall","src":"1272:16:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1262:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"1297:28:201","value":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1315:2:201","type":"","value":"64"},{"kind":"number","nodeType":"YulLiteral","src":"1319:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1311:3:201"},"nodeType":"YulFunctionCall","src":"1311:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"1323:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1307:3:201"},"nodeType":"YulFunctionCall","src":"1307:18:201"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1301:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1352:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1361:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1364:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1354:6:201"},"nodeType":"YulFunctionCall","src":"1354:12:201"},"nodeType":"YulExpressionStatement","src":"1354:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1340:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1348:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1337:2:201"},"nodeType":"YulFunctionCall","src":"1337:14:201"},"nodeType":"YulIf","src":"1334:34:201"},{"nodeType":"YulAssignment","src":"1377:71:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1420:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"1431:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1416:3:201"},"nodeType":"YulFunctionCall","src":"1416:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1440:7:201"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"1387:28:201"},"nodeType":"YulFunctionCall","src":"1387:61:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1377:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1457:41:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1483:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1494:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1479:3:201"},"nodeType":"YulFunctionCall","src":"1479:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1473:5:201"},"nodeType":"YulFunctionCall","src":"1473:25:201"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"1461:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1527:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1536:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1539:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1529:6:201"},"nodeType":"YulFunctionCall","src":"1529:12:201"},"nodeType":"YulExpressionStatement","src":"1529:12:201"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"1513:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1523:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1510:2:201"},"nodeType":"YulFunctionCall","src":"1510:16:201"},"nodeType":"YulIf","src":"1507:36:201"},{"nodeType":"YulAssignment","src":"1552:73:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1595:9:201"},{"name":"offset_1","nodeType":"YulIdentifier","src":"1606:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1591:3:201"},"nodeType":"YulFunctionCall","src":"1591:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1617:7:201"}],"functionName":{"name":"abi_decode_string_fromMemory","nodeType":"YulIdentifier","src":"1562:28:201"},"nodeType":"YulFunctionCall","src":"1562:63:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1552:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1634:38:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1657:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1668:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1653:3:201"},"nodeType":"YulFunctionCall","src":"1653:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1647:5:201"},"nodeType":"YulFunctionCall","src":"1647:25:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1638:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1720:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1729:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1732:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1722:6:201"},"nodeType":"YulFunctionCall","src":"1722:12:201"},"nodeType":"YulExpressionStatement","src":"1722:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1694:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1705:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"1712:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1701:3:201"},"nodeType":"YulFunctionCall","src":"1701:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1691:2:201"},"nodeType":"YulFunctionCall","src":"1691:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1684:6:201"},"nodeType":"YulFunctionCall","src":"1684:35:201"},"nodeType":"YulIf","src":"1681:55:201"},{"nodeType":"YulAssignment","src":"1745:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1755:5:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1745:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1769:40:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1794:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1805:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1790:3:201"},"nodeType":"YulFunctionCall","src":"1790:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1784:5:201"},"nodeType":"YulFunctionCall","src":"1784:25:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"1773:7:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1876:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1885:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1888:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1878:6:201"},"nodeType":"YulFunctionCall","src":"1878:12:201"},"nodeType":"YulExpressionStatement","src":"1878:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1831:7:201"},{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1844:7:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1861:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1866:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1857:3:201"},"nodeType":"YulFunctionCall","src":"1857:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"1870:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1853:3:201"},"nodeType":"YulFunctionCall","src":"1853:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1840:3:201"},"nodeType":"YulFunctionCall","src":"1840:33:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1828:2:201"},"nodeType":"YulFunctionCall","src":"1828:46:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1821:6:201"},"nodeType":"YulFunctionCall","src":"1821:54:201"},"nodeType":"YulIf","src":"1818:74:201"},{"nodeType":"YulAssignment","src":"1901:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"1911:7:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1901:6:201"}]}]},"name":"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_uint8t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1128:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1139:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1151:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1159:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1167:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1175:6:201","type":""}],"src":"1036:888:201"},{"body":{"nodeType":"YulBlock","src":"2142:276:201","statements":[{"nodeType":"YulAssignment","src":"2152:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2164:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2175:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2160:3:201"},"nodeType":"YulFunctionCall","src":"2160:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2152:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2195:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"2206:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2188:6:201"},"nodeType":"YulFunctionCall","src":"2188:25:201"},"nodeType":"YulExpressionStatement","src":"2188:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2233:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2244:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2229:3:201"},"nodeType":"YulFunctionCall","src":"2229:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"2249:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2222:6:201"},"nodeType":"YulFunctionCall","src":"2222:34:201"},"nodeType":"YulExpressionStatement","src":"2222:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2276:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2287:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2272:3:201"},"nodeType":"YulFunctionCall","src":"2272:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"2292:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2265:6:201"},"nodeType":"YulFunctionCall","src":"2265:34:201"},"nodeType":"YulExpressionStatement","src":"2265:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2319:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2330:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2315:3:201"},"nodeType":"YulFunctionCall","src":"2315:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"2335:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2308:6:201"},"nodeType":"YulFunctionCall","src":"2308:34:201"},"nodeType":"YulExpressionStatement","src":"2308:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2362:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2373:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2358:3:201"},"nodeType":"YulFunctionCall","src":"2358:19:201"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"2383:6:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2399:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"2404:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2395:3:201"},"nodeType":"YulFunctionCall","src":"2395:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"2408:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2391:3:201"},"nodeType":"YulFunctionCall","src":"2391:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2379:3:201"},"nodeType":"YulFunctionCall","src":"2379:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2351:6:201"},"nodeType":"YulFunctionCall","src":"2351:61:201"},"nodeType":"YulExpressionStatement","src":"2351:61:201"}]},"name":"abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2079:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"2090:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2098:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2106:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2114:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2122:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2133:4:201","type":""}],"src":"1929:489:201"},{"body":{"nodeType":"YulBlock","src":"2597:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2614:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2625:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2607:6:201"},"nodeType":"YulFunctionCall","src":"2607:21:201"},"nodeType":"YulExpressionStatement","src":"2607:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2648:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2659:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2644:3:201"},"nodeType":"YulFunctionCall","src":"2644:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2664:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2637:6:201"},"nodeType":"YulFunctionCall","src":"2637:30:201"},"nodeType":"YulExpressionStatement","src":"2637:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2687:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2698:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2683:3:201"},"nodeType":"YulFunctionCall","src":"2683:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"2703:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2676:6:201"},"nodeType":"YulFunctionCall","src":"2676:62:201"},"nodeType":"YulExpressionStatement","src":"2676:62:201"},{"nodeType":"YulAssignment","src":"2747:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2759:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2770:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2755:3:201"},"nodeType":"YulFunctionCall","src":"2755:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2747:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2574:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2588:4:201","type":""}],"src":"2423:356:201"},{"body":{"nodeType":"YulBlock","src":"2958:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2975:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2986:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2968:6:201"},"nodeType":"YulFunctionCall","src":"2968:21:201"},"nodeType":"YulExpressionStatement","src":"2968:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3009:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3020:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3005:3:201"},"nodeType":"YulFunctionCall","src":"3005:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"3025:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2998:6:201"},"nodeType":"YulFunctionCall","src":"2998:30:201"},"nodeType":"YulExpressionStatement","src":"2998:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3048:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3059:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3044:3:201"},"nodeType":"YulFunctionCall","src":"3044:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"3064:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3037:6:201"},"nodeType":"YulFunctionCall","src":"3037:62:201"},"nodeType":"YulExpressionStatement","src":"3037:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3119:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3130:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3115:3:201"},"nodeType":"YulFunctionCall","src":"3115:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"3135:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3108:6:201"},"nodeType":"YulFunctionCall","src":"3108:36:201"},"nodeType":"YulExpressionStatement","src":"3108:36:201"},{"nodeType":"YulAssignment","src":"3153:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3165:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3176:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3161:3:201"},"nodeType":"YulFunctionCall","src":"3161:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3153:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2935:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2949:4:201","type":""}],"src":"2784:402:201"},{"body":{"nodeType":"YulBlock","src":"3246:325:201","statements":[{"nodeType":"YulAssignment","src":"3256:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3270:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"3273:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"3266:3:201"},"nodeType":"YulFunctionCall","src":"3266:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3256:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3287:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"3317:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"3323:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3313:3:201"},"nodeType":"YulFunctionCall","src":"3313:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"3291:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3364:31:201","statements":[{"nodeType":"YulAssignment","src":"3366:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3380:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3388:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3376:3:201"},"nodeType":"YulFunctionCall","src":"3376:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"3366:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3344:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3337:6:201"},"nodeType":"YulFunctionCall","src":"3337:26:201"},"nodeType":"YulIf","src":"3334:61:201"},{"body":{"nodeType":"YulBlock","src":"3454:111:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3475:1:201","type":"","value":"0"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3482:3:201","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"3487:10:201","type":"","value":"0x4e487b71"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3478:3:201"},"nodeType":"YulFunctionCall","src":"3478:20:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3468:6:201"},"nodeType":"YulFunctionCall","src":"3468:31:201"},"nodeType":"YulExpressionStatement","src":"3468:31:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3519:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"3522:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3512:6:201"},"nodeType":"YulFunctionCall","src":"3512:15:201"},"nodeType":"YulExpressionStatement","src":"3512:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3547:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3550:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3540:6:201"},"nodeType":"YulFunctionCall","src":"3540:15:201"},"nodeType":"YulExpressionStatement","src":"3540:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"3410:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"3433:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3441:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3430:2:201"},"nodeType":"YulFunctionCall","src":"3430:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3407:2:201"},"nodeType":"YulFunctionCall","src":"3407:38:201"},"nodeType":"YulIf","src":"3404:161:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"3226:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"3235:6:201","type":""}],"src":"3191:380:201"}]},"contents":"{\n    { }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_string_fromMemory(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := mload(offset)\n        let _2 := sub(shl(64, 1), 1)\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        let _4 := 0x20\n        if gt(add(add(offset, _1), _4), end) { revert(0, 0) }\n        let i := 0\n        for { } lt(i, _1) { i := add(i, _4) }\n        {\n            mstore(add(add(memPtr, i), _4), mload(add(add(offset, i), _4)))\n        }\n        if gt(i, _1)\n        {\n            mstore(add(add(memPtr, _1), _4), 0)\n        }\n        array := memPtr\n    }\n    function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_uint8t_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let offset := mload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        value0 := abi_decode_string_fromMemory(add(headStart, offset), dataEnd)\n        let offset_1 := mload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value1 := abi_decode_string_fromMemory(add(headStart, offset_1), dataEnd)\n        let value := mload(add(headStart, 64))\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value2 := value\n        let value_1 := mload(add(headStart, 96))\n        if iszero(eq(value_1, and(value_1, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value3 := value_1\n    }\n    function abi_encode_tuple_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__to_t_bytes32_t_bytes32_t_bytes32_t_uint256_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60806040523480156200001157600080fd5b5060405162001bd738038062001bd7833981016040819052620000349162000442565b8351849084906200004d906003906020850190620002cf565b50805162000063906004906020840190620002cf565b50506005805460ff191660121790555060006200007d3390565b60058054610100600160a81b0319166101006001600160a01b038416908102919091179091556040519192509060009060008051602062001bb7833981519152908290a350835160208086019190912060408051808201825260018152603160f81b9084015280517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f938101939093528201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015246608082018190523060a08301529060c00160408051808303601f1901815291905280516020909101206007556005805460ff851660ff199091161790556001600160a01b0382166200018857600080fd5b6200019382620001ac565b50506008805460ff191660011790555062000523915050565b6005546001600160a01b03610100909104163314620002125760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b038116620002795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000209565b6005546040516001600160a01b03808416926101009004169060008051602062001bb783398151915290600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b828054620002dd90620004e6565b90600052602060002090601f0160209004810192826200030157600085556200034c565b82601f106200031c57805160ff19168380011785556200034c565b828001600101855582156200034c579182015b828111156200034c5782518255916020019190600101906200032f565b506200035a9291506200035e565b5090565b5b808211156200035a57600081556001016200035f565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200039d57600080fd5b81516001600160401b0380821115620003ba57620003ba62000375565b604051601f8301601f19908116603f01168101908282118183101715620003e557620003e562000375565b816040528381526020925086838588010111156200040257600080fd5b600091505b8382101562000426578582018301518183018401529082019062000407565b83821115620004385760008385830101525b9695505050505050565b600080600080608085870312156200045957600080fd5b84516001600160401b03808211156200047157600080fd5b6200047f888389016200038b565b955060208701519150808211156200049657600080fd5b50620004a5878288016200038b565b935050604085015160ff81168114620004bd57600080fd5b60608601519092506001600160a01b0381168114620004db57600080fd5b939692955090935050565b600181811c90821680620004fb57607f821691505b602082108114156200051d57634e487b7160e01b600052602260045260246000fd5b50919050565b61168480620005336000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806370a08231116100e3578063a0712d681161008c578063d505accf11610066578063d505accf146103b7578063dd62ed3e146103ca578063f2fde38b1461041057600080fd5b8063a0712d681461037e578063a457c2d714610391578063a9059cbb146103a457600080fd5b80637ecebe00116100bd5780637ecebe00146102fd5780638da5cb5b1461033357806395d89b411461037657600080fd5b806370a0823114610283578063715018a6146102b957806378160376146102c157600080fd5b806330adf81f11610145578063395093511161011f578063395093511461025257806340c10f19146102655780635300f82b1461027857600080fd5b806330adf81f1461020d578063313ce567146102345780633644e5151461024957600080fd5b806318160ddd1161017657806318160ddd146101d35780631c02bc31146101e557806323b872dd146101fa57600080fd5b806306fdde0314610192578063095ea7b3146101b0575b600080fd5b61019a610423565b6040516101a791906113a8565b60405180910390f35b6101c36101be3660046113e6565b6104b5565b60405190151581526020016101a7565b6002545b6040519081526020016101a7565b6101f86101f3366004611410565b6104cc565b005b6101c3610208366004611432565b610589565b6101d77f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055460405160ff90911681526020016101a7565b6101d760075481565b6101c36102603660046113e6565b6105ff565b6101c36102733660046113e6565b610642565b60085460ff166101c3565b6101d761029136600461146e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101f86106e6565b61019a6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6101d761030b36600461146e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526006602052604090205490565b600554610100900473ffffffffffffffffffffffffffffffffffffffff1660405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a7565b61019a6107e1565b6101c361038c366004611489565b6107f0565b6101c361039f3660046113e6565b61089d565b6101c36103b23660046113e6565b6108f9565b6101f86103c53660046114a2565b610906565b6101d76103d8366004611515565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101f861041e36600461146e565b610c27565b60606003805461043290611548565b80601f016020809104026020016040519081016040528092919081815260200182805461045e90611548565b80156104ab5780601f10610480576101008083540402835291602001916104ab565b820191906000526020600020905b81548152906001019060200180831161048e57829003601f168201915b5050505050905090565b60006104c2338484610de9565b5060015b92915050565b60055473ffffffffffffffffffffffffffffffffffffffff610100909104163314610558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000610596848484610f9d565b6105f584336105f0856040518060600160405280602881526020016116026028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260016020908152604080832033845290915290205491906111c7565b610de9565b5060019392505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916104c29185906105f0908661120e565b60085460009060ff161515600114156106dc5760055473ffffffffffffffffffffffffffffffffffffffff6101009091041633146106dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161054f565b6104c2838361121e565b60055473ffffffffffffffffffffffffffffffffffffffff61010090910416331461076d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161054f565b600554604051600091610100900473ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff169055565b60606004805461043290611548565b60085460009060ff1615156001141561088a5760055473ffffffffffffffffffffffffffffffffffffffff61010090910416331461088a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161054f565b610894338361121e565b5060015b919050565b60006104c233846105f08560405180606001604052806025815260200161162a6025913933600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d16845290915290205491906111c7565b60006104c2338484610f9d565b73ffffffffffffffffffffffffffffffffffffffff8716610983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f494e56414c49445f4f574e455200000000000000000000000000000000000000604482015260640161054f565b834211156109ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f494e56414c49445f45585049524154494f4e0000000000000000000000000000604482015260640161054f565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526006602090815260408083205460075482517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958c166060860152608085018b905260a0850181905260c08086018b90528251808703909101815260e08601909252815191909201207f19010000000000000000000000000000000000000000000000000000000000006101008501526101028401949094526101228301939093529061014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa158015610b42573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614610be0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f494e56414c49445f5349474e4154555245000000000000000000000000000000604482015260640161054f565b610beb82600161159c565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260066020526040902055610c1c898989610de9565b505050505050505050565b60055473ffffffffffffffffffffffffffffffffffffffff610100909104163314610cae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161054f565b73ffffffffffffffffffffffffffffffffffffffff8116610d51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161054f565b60055460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36005805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff8316610e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161054f565b73ffffffffffffffffffffffffffffffffffffffff8216610f2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161054f565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161054f565b73ffffffffffffffffffffffffffffffffffffffff82166110e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161054f565b61112d816040518060600160405280602681526020016115dc6026913973ffffffffffffffffffffffffffffffffffffffff861660009081526020819052604090205491906111c7565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054611169908261120e565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610f90565b8183038184821115611206576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054f91906113a8565b509392505050565b808201828110156104c657600080fd5b73ffffffffffffffffffffffffffffffffffffffff821661129b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161054f565b6002546112a8908261120e565b60025573ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020546112db908261120e565b73ffffffffffffffffffffffffffffffffffffffff8316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000815180845260005b8181101561136357602081850181015186830182015201611347565b81811115611375576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006113bb602083018461133d565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461089857600080fd5b600080604083850312156113f957600080fd5b611402836113c2565b946020939093013593505050565b60006020828403121561142257600080fd5b813580151581146113bb57600080fd5b60008060006060848603121561144757600080fd5b611450846113c2565b925061145e602085016113c2565b9150604084013590509250925092565b60006020828403121561148057600080fd5b6113bb826113c2565b60006020828403121561149b57600080fd5b5035919050565b600080600080600080600060e0888a0312156114bd57600080fd5b6114c6886113c2565b96506114d4602089016113c2565b95506040880135945060608801359350608088013560ff811681146114f857600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561152857600080fd5b611531836113c2565b915061153f602084016113c2565b90509250929050565b600181811c9082168061155c57607f821691505b60208210811415611596577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082198211156115d6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220169abeea256a742a5e4c40a8e2f1fcc3699fe4f4e71502e92a3f852e99efe02664736f6c634300080a00338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1BD7 CODESIZE SUB DUP1 PUSH3 0x1BD7 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x442 JUMP JUMPDEST DUP4 MLOAD DUP5 SWAP1 DUP5 SWAP1 PUSH3 0x4D SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x2CF JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x63 SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x2CF JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE POP PUSH1 0x0 PUSH3 0x7D CALLER SWAP1 JUMP JUMPDEST PUSH1 0x5 DUP1 SLOAD PUSH2 0x100 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT AND PUSH2 0x100 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP3 POP SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x1BB7 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 DUP3 SWAP1 LOG3 POP DUP4 MLOAD PUSH1 0x20 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x31 PUSH1 0xF8 SHL SWAP1 DUP5 ADD MSTORE DUP1 MLOAD PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP3 ADD MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD DUP2 SWAP1 MSTORE ADDRESS PUSH1 0xA0 DUP4 ADD MSTORE SWAP1 PUSH1 0xC0 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB PUSH1 0x1F NOT ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 PUSH1 0x7 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF DUP6 AND PUSH1 0xFF NOT SWAP1 SWAP2 AND OR SWAP1 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0x188 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x193 DUP3 PUSH3 0x1AC JUMP JUMPDEST POP POP PUSH1 0x8 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE POP PUSH3 0x523 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x100 SWAP1 SWAP2 DIV AND CALLER EQ PUSH3 0x212 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x279 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x209 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 PUSH2 0x100 SWAP1 DIV AND SWAP1 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x1BB7 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 PUSH1 0x0 SWAP1 LOG3 PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH2 0x100 MUL PUSH2 0x100 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH3 0x2DD SWAP1 PUSH3 0x4E6 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH3 0x301 JUMPI PUSH1 0x0 DUP6 SSTORE PUSH3 0x34C JUMP JUMPDEST DUP3 PUSH1 0x1F LT PUSH3 0x31C JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x34C JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x34C JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x34C JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x32F JUMP JUMPDEST POP PUSH3 0x35A SWAP3 SWAP2 POP PUSH3 0x35E JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x35A JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x35F JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x39D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x3BA JUMPI PUSH3 0x3BA PUSH3 0x375 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x3E5 JUMPI PUSH3 0x3E5 PUSH3 0x375 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 SWAP3 POP DUP7 DUP4 DUP6 DUP9 ADD ADD GT ISZERO PUSH3 0x402 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP4 DUP3 LT ISZERO PUSH3 0x426 JUMPI DUP6 DUP3 ADD DUP4 ADD MLOAD DUP2 DUP4 ADD DUP5 ADD MSTORE SWAP1 DUP3 ADD SWAP1 PUSH3 0x407 JUMP JUMPDEST DUP4 DUP3 GT ISZERO PUSH3 0x438 JUMPI PUSH1 0x0 DUP4 DUP6 DUP4 ADD ADD MSTORE JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH3 0x459 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x471 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x47F DUP9 DUP4 DUP10 ADD PUSH3 0x38B JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x496 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x4A5 DUP8 DUP3 DUP9 ADD PUSH3 0x38B JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH3 0x4BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x4DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x4FB JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH3 0x51D JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1684 DUP1 PUSH3 0x533 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 0x18D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0xE3 JUMPI DUP1 PUSH4 0xA0712D68 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x3B7 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x3CA JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x410 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA0712D68 EQ PUSH2 0x37E JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x391 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x3A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0xBD JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x2FD JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x333 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x376 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x283 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x2B9 JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x2C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x145 JUMPI DUP1 PUSH4 0x39509351 GT PUSH2 0x11F JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x252 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x265 JUMPI DUP1 PUSH4 0x5300F82B EQ PUSH2 0x278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x20D JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x234 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x249 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0x176 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x1D3 JUMPI DUP1 PUSH4 0x1C02BC31 EQ PUSH2 0x1E5 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x192 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1B0 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x19A PUSH2 0x423 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1A7 SWAP2 SWAP1 PUSH2 0x13A8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1C3 PUSH2 0x1BE CALLDATASIZE PUSH1 0x4 PUSH2 0x13E6 JUMP JUMPDEST PUSH2 0x4B5 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1A7 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1A7 JUMP JUMPDEST PUSH2 0x1F8 PUSH2 0x1F3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1410 JUMP JUMPDEST PUSH2 0x4CC JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1C3 PUSH2 0x208 CALLDATASIZE PUSH1 0x4 PUSH2 0x1432 JUMP JUMPDEST PUSH2 0x589 JUMP JUMPDEST PUSH2 0x1D7 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1A7 JUMP JUMPDEST PUSH2 0x1D7 PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x1C3 PUSH2 0x260 CALLDATASIZE PUSH1 0x4 PUSH2 0x13E6 JUMP JUMPDEST PUSH2 0x5FF JUMP JUMPDEST PUSH2 0x1C3 PUSH2 0x273 CALLDATASIZE PUSH1 0x4 PUSH2 0x13E6 JUMP JUMPDEST PUSH2 0x642 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0xFF AND PUSH2 0x1C3 JUMP JUMPDEST PUSH2 0x1D7 PUSH2 0x291 CALLDATASIZE PUSH1 0x4 PUSH2 0x146E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1F8 PUSH2 0x6E6 JUMP JUMPDEST PUSH2 0x19A PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x1D7 PUSH2 0x30B CALLDATASIZE PUSH1 0x4 PUSH2 0x146E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1A7 JUMP JUMPDEST PUSH2 0x19A PUSH2 0x7E1 JUMP JUMPDEST PUSH2 0x1C3 PUSH2 0x38C CALLDATASIZE PUSH1 0x4 PUSH2 0x1489 JUMP JUMPDEST PUSH2 0x7F0 JUMP JUMPDEST PUSH2 0x1C3 PUSH2 0x39F CALLDATASIZE PUSH1 0x4 PUSH2 0x13E6 JUMP JUMPDEST PUSH2 0x89D JUMP JUMPDEST PUSH2 0x1C3 PUSH2 0x3B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x13E6 JUMP JUMPDEST PUSH2 0x8F9 JUMP JUMPDEST PUSH2 0x1F8 PUSH2 0x3C5 CALLDATASIZE PUSH1 0x4 PUSH2 0x14A2 JUMP JUMPDEST PUSH2 0x906 JUMP JUMPDEST PUSH2 0x1D7 PUSH2 0x3D8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1515 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 PUSH2 0x1F8 PUSH2 0x41E CALLDATASIZE PUSH1 0x4 PUSH2 0x146E JUMP JUMPDEST PUSH2 0xC27 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x432 SWAP1 PUSH2 0x1548 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x45E SWAP1 PUSH2 0x1548 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x4AB JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x480 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x4AB 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 0x48E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4C2 CALLER DUP5 DUP5 PUSH2 0xDE9 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 SWAP1 SWAP2 DIV AND CALLER EQ PUSH2 0x558 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x596 DUP5 DUP5 DUP5 PUSH2 0xF9D JUMP JUMPDEST PUSH2 0x5F5 DUP5 CALLER PUSH2 0x5F0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1602 PUSH1 0x28 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x11C7 JUMP JUMPDEST PUSH2 0xDE9 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP 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 0x4C2 SWAP2 DUP6 SWAP1 PUSH2 0x5F0 SWAP1 DUP7 PUSH2 0x120E JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x1 EQ ISZERO PUSH2 0x6DC JUMPI PUSH1 0x5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 SWAP1 SWAP2 DIV AND CALLER EQ PUSH2 0x6DC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x54F JUMP JUMPDEST PUSH2 0x4C2 DUP4 DUP4 PUSH2 0x121E JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 SWAP1 SWAP2 DIV AND CALLER EQ PUSH2 0x76D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x54F JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 SWAP2 PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x5 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x432 SWAP1 PUSH2 0x1548 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x1 EQ ISZERO PUSH2 0x88A JUMPI PUSH1 0x5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 SWAP1 SWAP2 DIV AND CALLER EQ PUSH2 0x88A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x54F JUMP JUMPDEST PUSH2 0x894 CALLER DUP4 PUSH2 0x121E JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4C2 CALLER DUP5 PUSH2 0x5F0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x162A PUSH1 0x25 SWAP2 CODECOPY CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x11C7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4C2 CALLER DUP5 DUP5 PUSH2 0xF9D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH2 0x983 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F4F574E455200000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x54F JUMP JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x9ED JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F45585049524154494F4E0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x54F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x7 SLOAD DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP13 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP12 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP7 ADD DUP12 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP8 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP7 ADD SWAP1 SWAP3 MSTORE DUP2 MLOAD SWAP2 SWAP1 SWAP3 ADD KECCAK256 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 PUSH2 0x100 DUP6 ADD MSTORE PUSH2 0x102 DUP5 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH2 0x122 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 PUSH2 0x142 ADD PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB42 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xBE0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F5349474E4154555245000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x54F JUMP JUMPDEST PUSH2 0xBEB DUP3 PUSH1 0x1 PUSH2 0x159C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0xC1C DUP10 DUP10 DUP10 PUSH2 0xDE9 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 SWAP1 SWAP2 DIV AND CALLER EQ PUSH2 0xCAE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x54F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xD51 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x54F JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND SWAP3 PUSH2 0x100 SWAP1 DIV AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 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 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0xE8B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7265737300000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x54F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0xF2E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7373000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x54F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x1040 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6472657373000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x54F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x10E3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6573730000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x54F JUMP JUMPDEST PUSH2 0x112D DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x15DC PUSH1 0x26 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x11C7 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 0x1169 SWAP1 DUP3 PUSH2 0x120E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE MLOAD DUP5 DUP2 MSTORE SWAP1 SWAP3 SWAP2 DUP7 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH2 0xF90 JUMP JUMPDEST DUP2 DUP4 SUB DUP2 DUP5 DUP3 GT ISZERO PUSH2 0x1206 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x54F SWAP2 SWAP1 PUSH2 0x13A8 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x4C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x129B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x54F JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x12A8 SWAP1 DUP3 PUSH2 0x120E JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x12DB SWAP1 DUP3 PUSH2 0x120E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP3 MLOAD DUP5 DUP2 MSTORE SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1363 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x1347 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x1375 JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x13BB PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x133D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x898 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x13F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1402 DUP4 PUSH2 0x13C2 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 0x1422 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x13BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1447 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1450 DUP5 PUSH2 0x13C2 JUMP JUMPDEST SWAP3 POP PUSH2 0x145E PUSH1 0x20 DUP6 ADD PUSH2 0x13C2 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1480 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x13BB DUP3 PUSH2 0x13C2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x149B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x14BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x14C6 DUP9 PUSH2 0x13C2 JUMP JUMPDEST SWAP7 POP PUSH2 0x14D4 PUSH1 0x20 DUP10 ADD PUSH2 0x13C2 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x14F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1528 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1531 DUP4 PUSH2 0x13C2 JUMP JUMPDEST SWAP2 POP PUSH2 0x153F PUSH1 0x20 DUP5 ADD PUSH2 0x13C2 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x155C JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x1596 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x15D6 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP ADD SWAP1 JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x2062616C616E636545524332303A207472616E73 PUSH7 0x657220616D6F75 PUSH15 0x74206578636565647320616C6C6F77 PUSH2 0x6E63 PUSH6 0x45524332303A KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220169A 0xBE 0xEA 0x25 PUSH11 0x742A5E4C40A8E2F1FCC369 SWAP16 0xE4 DELEGATECALL 0xE7 ISZERO MUL 0xE9 0x2A EXTCODEHASH DUP6 0x2E SWAP10 0xEF 0xE0 0x26 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER DUP12 0xE0 SMOD SWAP13 MSTORE8 AND MSIZE EQ SGT DIFFICULTY 0xCD 0x1F 0xD0 LOG4 CALLCODE DUP5 NOT 0x49 PUSH32 0x9722A3DAAFE3B4186F6B6457E000000000000000000000000000000000000000 ","sourceMap":"402:3029:173:-:0;;;1239:482;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2007:12:6;;1350:4:173;;1356:6;;2007:12:6;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;2025:16:6;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;;2047:9:6;:14;;-1:-1:-1;;2047:14:6;2059:2;2047:14;;;-1:-1:-1;2047:9:6;855:12:11;678:10:4;;587:107;855:12:11;873:6;:18;;-1:-1:-1;;;;;;873:18:11;;-1:-1:-1;;;;;873:18:11;;;;;;;;;;;;902:43;;873:18;;-1:-1:-1;873:18:11;-1:-1:-1;;;;;;;;;;;;;902:43:11;-1:-1:-1;;902:43:11;-1:-1:-1;1487:22:173;;::::1;::::0;;::::1;::::0;;;;504:10:::1;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;504:10:173;;::::1;::::0;1444:149;;564:95:::1;1444:149:::0;;::::1;2188:25:201::0;;;;2229:18;;2222:34;1519:26:173;2272:18:201;;;2265:34;1388:13:173::1;2315:18:201::0;;;2308:34;;;1580:4:173::1;2358:19:201::0;;;2351:61;1388:13:173;2160:19:201;;1444:149:173::1;::::0;;;;::::1;-1:-1:-1::0;;1444:149:173;;;;;;1427:172;;1444:149:::1;1427:172:::0;;::::1;::::0;1408:16:::1;:191:::0;9620:9:6;:21;;;;;-1:-1:-1;;9620:21:6;;;;;;-1:-1:-1;;;;;1643:19:173;::::1;1635:28;;;::::0;::::1;;1669:24;1687:5:::0;1669:17:::1;:24::i;:::-;-1:-1:-1::0;;1699:10:173::1;:17:::0;;-1:-1:-1;;1699:17:173::1;1712:4;1699:17;::::0;;-1:-1:-1;402:3029:173;;-1:-1:-1;;402:3029:173;1875:226:11;1204:6;;-1:-1:-1;;;;;1204:6:11;;;;;678:10:4;1204:22:11;1196:67;;;;-1:-1:-1;;;1196:67:11;;2625:2:201;1196:67:11;;;2607:21:201;;;2644:18;;;2637:30;2703:34;2683:18;;;2676:62;2755:18;;1196:67:11;;;;;;;;;-1:-1:-1;;;;;1959:22:11;::::1;1951:73;;;::::0;-1:-1:-1;;;1951:73:11;;2986:2:201;1951:73:11::1;::::0;::::1;2968:21:201::0;3025:2;3005:18;;;2998:30;3064:34;3044:18;;;3037:62;-1:-1:-1;;;3115:18:201;;;3108:36;3161:19;;1951:73:11::1;2784:402:201::0;1951:73:11::1;2056:6;::::0;2035:38:::1;::::0;-1:-1:-1;;;;;2035:38:11;;::::1;::::0;2056:6:::1;::::0;::::1;;::::0;-1:-1:-1;;;;;;;;;;;2035:38:11;;;::::1;2079:6;:17:::0;;-1:-1:-1;;;;;2079:17:11;;::::1;;;-1:-1:-1::0;;;;;;2079:17:11;;::::1;::::0;;;::::1;::::0;;1875:226::o;402:3029:173:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;402:3029:173;;;-1:-1:-1;402:3029:173;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:127:201;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:885;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:201;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:201;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;730:3;725:2;720;712:6;708:15;704:24;701:33;698:53;;;747:1;744;737:12;698:53;769:1;760:10;;779:133;793:2;790:1;787:9;779:133;;;881:14;;;877:23;;871:30;850:14;;;846:23;;839:63;804:10;;;;779:133;;;930:2;927:1;924:9;921:80;;;989:1;984:2;979;971:6;967:15;963:24;956:35;921:80;1019:6;146:885;-1:-1:-1;;;;;;146:885:201:o;1036:888::-;1151:6;1159;1167;1175;1228:3;1216:9;1207:7;1203:23;1199:33;1196:53;;;1245:1;1242;1235:12;1196:53;1272:16;;-1:-1:-1;;;;;1337:14:201;;;1334:34;;;1364:1;1361;1354:12;1334:34;1387:61;1440:7;1431:6;1420:9;1416:22;1387:61;:::i;:::-;1377:71;;1494:2;1483:9;1479:18;1473:25;1457:41;;1523:2;1513:8;1510:16;1507:36;;;1539:1;1536;1529:12;1507:36;;1562:63;1617:7;1606:8;1595:9;1591:24;1562:63;:::i;:::-;1552:73;;;1668:2;1657:9;1653:18;1647:25;1712:4;1705:5;1701:16;1694:5;1691:27;1681:55;;1732:1;1729;1722:12;1681:55;1805:2;1790:18;;1784:25;1755:5;;-1:-1:-1;;;;;;1840:33:201;;1828:46;;1818:74;;1888:1;1885;1878:12;1818:74;1036:888;;;;-1:-1:-1;1036:888:201;;-1:-1:-1;;1036:888:201:o;3191:380::-;3270:1;3266:12;;;;3313;;;3334:61;;3388:4;3380:6;3376:17;3366:27;;3334:61;3441:2;3433:6;3430:14;3410:18;3407:38;3404:161;;;3487:10;3482:3;3478:20;3475:1;3468:31;3522:4;3519:1;3512:15;3550:4;3547:1;3540:15;3404:161;;3191:380;;;:::o;:::-;402:3029:173;;;;;;"},"deployedBytecode":{"functionDebugData":{"@DOMAIN_SEPARATOR_36001":{"entryPoint":null,"id":36001,"parameterSlots":0,"returnSlots":0},"@EIP712_REVISION_35985":{"entryPoint":null,"id":35985,"parameterSlots":0,"returnSlots":0},"@PERMIT_TYPEHASH_35995":{"entryPoint":null,"id":35995,"parameterSlots":0,"returnSlots":0},"@_approve_1256":{"entryPoint":3561,"id":1256,"parameterSlots":3,"returnSlots":0},"@_beforeTokenTransfer_1278":{"entryPoint":null,"id":1278,"parameterSlots":3,"returnSlots":0},"@_mint_1155":{"entryPoint":4638,"id":1155,"parameterSlots":2,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@_transfer_1100":{"entryPoint":3997,"id":1100,"parameterSlots":3,"returnSlots":0},"@add_2216":{"entryPoint":4622,"id":2216,"parameterSlots":2,"returnSlots":1},"@allowance_918":{"entryPoint":null,"id":918,"parameterSlots":2,"returnSlots":1},"@approve_939":{"entryPoint":1205,"id":939,"parameterSlots":2,"returnSlots":1},"@balanceOf_879":{"entryPoint":null,"id":879,"parameterSlots":1,"returnSlots":1},"@decimals_855":{"entryPoint":null,"id":855,"parameterSlots":0,"returnSlots":1},"@decreaseAllowance_1034":{"entryPoint":2205,"id":1034,"parameterSlots":2,"returnSlots":1},"@increaseAllowance_1005":{"entryPoint":1535,"id":1005,"parameterSlots":2,"returnSlots":1},"@isProtected_36249":{"entryPoint":null,"id":36249,"parameterSlots":0,"returnSlots":1},"@mint_36197":{"entryPoint":2032,"id":36197,"parameterSlots":1,"returnSlots":1},"@mint_36217":{"entryPoint":1602,"id":36217,"parameterSlots":2,"returnSlots":1},"@name_837":{"entryPoint":1059,"id":837,"parameterSlots":0,"returnSlots":1},"@nonces_36229":{"entryPoint":null,"id":36229,"parameterSlots":1,"returnSlots":1},"@owner_1509":{"entryPoint":null,"id":1509,"parameterSlots":0,"returnSlots":1},"@permit_36178":{"entryPoint":2310,"id":36178,"parameterSlots":7,"returnSlots":0},"@renounceOwnership_1544":{"entryPoint":1766,"id":1544,"parameterSlots":0,"returnSlots":0},"@setProtected_36241":{"entryPoint":1228,"id":36241,"parameterSlots":1,"returnSlots":0},"@sub_2265":{"entryPoint":4551,"id":2265,"parameterSlots":3,"returnSlots":1},"@symbol_846":{"entryPoint":2017,"id":846,"parameterSlots":0,"returnSlots":1},"@totalSupply_865":{"entryPoint":null,"id":865,"parameterSlots":0,"returnSlots":1},"@transferFrom_977":{"entryPoint":1417,"id":977,"parameterSlots":3,"returnSlots":1},"@transferOwnership_1572":{"entryPoint":3111,"id":1572,"parameterSlots":1,"returnSlots":0},"@transfer_900":{"entryPoint":2297,"id":900,"parameterSlots":2,"returnSlots":1},"abi_decode_address":{"entryPoint":5058,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":5230,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":5397,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":5170,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32":{"entryPoint":5282,"id":null,"parameterSlots":2,"returnSlots":7},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":5094,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bool":{"entryPoint":5136,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256":{"entryPoint":5257,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string":{"entryPoint":4925,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":5032,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5e2e9eaa2d734966dea0900deacd15b20129fbce05255d633a3ce5ebca181b88__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fe3e5cf49f72bf8a6a8455c3e990f8479f5dfa09ac808886f330a39b0029c2d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a30e2b4f22d955e30086ae3aef0adfd87eec9d0d3f055d6aa9af61f522dda886__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":5532,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":5448,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:10362:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"64:481:201","statements":[{"nodeType":"YulVariableDeclaration","src":"74:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"94:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"88:5:201"},"nodeType":"YulFunctionCall","src":"88:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"78:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"116:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"121:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"109:6:201"},"nodeType":"YulFunctionCall","src":"109:19:201"},"nodeType":"YulExpressionStatement","src":"109:19:201"},{"nodeType":"YulVariableDeclaration","src":"137:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"146:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"141:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"208:110:201","statements":[{"nodeType":"YulVariableDeclaration","src":"222:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"232:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"226:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"264:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"269:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"260:3:201"},"nodeType":"YulFunctionCall","src":"260:11:201"},{"name":"_1","nodeType":"YulIdentifier","src":"273:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"256:3:201"},"nodeType":"YulFunctionCall","src":"256:20:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"292:5:201"},{"name":"i","nodeType":"YulIdentifier","src":"299:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"288:3:201"},"nodeType":"YulFunctionCall","src":"288:13:201"},{"name":"_1","nodeType":"YulIdentifier","src":"303:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"284:3:201"},"nodeType":"YulFunctionCall","src":"284:22:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"278:5:201"},"nodeType":"YulFunctionCall","src":"278:29:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"249:6:201"},"nodeType":"YulFunctionCall","src":"249:59:201"},"nodeType":"YulExpressionStatement","src":"249:59:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"167:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"170:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"164:2:201"},"nodeType":"YulFunctionCall","src":"164:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"178:21:201","statements":[{"nodeType":"YulAssignment","src":"180:17:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"189:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"192:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"185:3:201"},"nodeType":"YulFunctionCall","src":"185:12:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"180:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"160:3:201","statements":[]},"src":"156:162:201"},{"body":{"nodeType":"YulBlock","src":"352:62:201","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"381:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"386:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"377:3:201"},"nodeType":"YulFunctionCall","src":"377:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"395:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"373:3:201"},"nodeType":"YulFunctionCall","src":"373:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"402:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"366:6:201"},"nodeType":"YulFunctionCall","src":"366:38:201"},"nodeType":"YulExpressionStatement","src":"366:38:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"333:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"336:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"330:2:201"},"nodeType":"YulFunctionCall","src":"330:13:201"},"nodeType":"YulIf","src":"327:87:201"},{"nodeType":"YulAssignment","src":"423:116:201","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"438:3:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"451:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"459:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"447:3:201"},"nodeType":"YulFunctionCall","src":"447:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"464:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"443:3:201"},"nodeType":"YulFunctionCall","src":"443:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"434:3:201"},"nodeType":"YulFunctionCall","src":"434:98:201"},{"kind":"number","nodeType":"YulLiteral","src":"534:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"430:3:201"},"nodeType":"YulFunctionCall","src":"430:109:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"423:3:201"}]}]},"name":"abi_encode_string","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"41:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"48:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"56:3:201","type":""}],"src":"14:531:201"},{"body":{"nodeType":"YulBlock","src":"671:99:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"688:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"699:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"681:6:201"},"nodeType":"YulFunctionCall","src":"681:21:201"},"nodeType":"YulExpressionStatement","src":"681:21:201"},{"nodeType":"YulAssignment","src":"711:53:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"737:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"749:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"760:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"745:3:201"},"nodeType":"YulFunctionCall","src":"745:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"719:17:201"},"nodeType":"YulFunctionCall","src":"719:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"711:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"640:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"651:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"662:4:201","type":""}],"src":"550:220:201"},{"body":{"nodeType":"YulBlock","src":"824:147:201","statements":[{"nodeType":"YulAssignment","src":"834:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"856:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"843:12:201"},"nodeType":"YulFunctionCall","src":"843:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"834:5:201"}]},{"body":{"nodeType":"YulBlock","src":"949:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"958:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"961:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"951:6:201"},"nodeType":"YulFunctionCall","src":"951:12:201"},"nodeType":"YulExpressionStatement","src":"951:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"885:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"896:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"903:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"892:3:201"},"nodeType":"YulFunctionCall","src":"892:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"882:2:201"},"nodeType":"YulFunctionCall","src":"882:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"875:6:201"},"nodeType":"YulFunctionCall","src":"875:73:201"},"nodeType":"YulIf","src":"872:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"803:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"814:5:201","type":""}],"src":"775:196:201"},{"body":{"nodeType":"YulBlock","src":"1063:167:201","statements":[{"body":{"nodeType":"YulBlock","src":"1109:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1118:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1121:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1111:6:201"},"nodeType":"YulFunctionCall","src":"1111:12:201"},"nodeType":"YulExpressionStatement","src":"1111:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1084:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1093:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1080:3:201"},"nodeType":"YulFunctionCall","src":"1080:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1105:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1076:3:201"},"nodeType":"YulFunctionCall","src":"1076:32:201"},"nodeType":"YulIf","src":"1073:52:201"},{"nodeType":"YulAssignment","src":"1134:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1163:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1144:18:201"},"nodeType":"YulFunctionCall","src":"1144:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1134:6:201"}]},{"nodeType":"YulAssignment","src":"1182:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1209:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1220:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1205:3:201"},"nodeType":"YulFunctionCall","src":"1205:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1192:12:201"},"nodeType":"YulFunctionCall","src":"1192:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1182:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1021:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1032:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1044:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1052:6:201","type":""}],"src":"976:254:201"},{"body":{"nodeType":"YulBlock","src":"1330:92:201","statements":[{"nodeType":"YulAssignment","src":"1340:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1352:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1363:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1348:3:201"},"nodeType":"YulFunctionCall","src":"1348:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1340:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1382:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1407:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1400:6:201"},"nodeType":"YulFunctionCall","src":"1400:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1393:6:201"},"nodeType":"YulFunctionCall","src":"1393:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1375:6:201"},"nodeType":"YulFunctionCall","src":"1375:41:201"},"nodeType":"YulExpressionStatement","src":"1375:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1299:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1310:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1321:4:201","type":""}],"src":"1235:187:201"},{"body":{"nodeType":"YulBlock","src":"1528:76:201","statements":[{"nodeType":"YulAssignment","src":"1538:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1550:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1561:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1546:3:201"},"nodeType":"YulFunctionCall","src":"1546:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1538:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1580:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"1591:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1573:6:201"},"nodeType":"YulFunctionCall","src":"1573:25:201"},"nodeType":"YulExpressionStatement","src":"1573:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1497:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1508:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1519:4:201","type":""}],"src":"1427:177:201"},{"body":{"nodeType":"YulBlock","src":"1676:206:201","statements":[{"body":{"nodeType":"YulBlock","src":"1722:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1731:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1734:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1724:6:201"},"nodeType":"YulFunctionCall","src":"1724:12:201"},"nodeType":"YulExpressionStatement","src":"1724:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1697:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1706:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1693:3:201"},"nodeType":"YulFunctionCall","src":"1693:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1718:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1689:3:201"},"nodeType":"YulFunctionCall","src":"1689:32:201"},"nodeType":"YulIf","src":"1686:52:201"},{"nodeType":"YulVariableDeclaration","src":"1747:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1773:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1760:12:201"},"nodeType":"YulFunctionCall","src":"1760:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1751:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1836:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1845:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1848:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1838:6:201"},"nodeType":"YulFunctionCall","src":"1838:12:201"},"nodeType":"YulExpressionStatement","src":"1838:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1805:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1826:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1819:6:201"},"nodeType":"YulFunctionCall","src":"1819:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1812:6:201"},"nodeType":"YulFunctionCall","src":"1812:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1802:2:201"},"nodeType":"YulFunctionCall","src":"1802:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1795:6:201"},"nodeType":"YulFunctionCall","src":"1795:40:201"},"nodeType":"YulIf","src":"1792:60:201"},{"nodeType":"YulAssignment","src":"1861:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1871:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1861:6:201"}]}]},"name":"abi_decode_tuple_t_bool","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1642:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1653:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1665:6:201","type":""}],"src":"1609:273:201"},{"body":{"nodeType":"YulBlock","src":"1991:224:201","statements":[{"body":{"nodeType":"YulBlock","src":"2037:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2046:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2049:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2039:6:201"},"nodeType":"YulFunctionCall","src":"2039:12:201"},"nodeType":"YulExpressionStatement","src":"2039:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2012:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2021:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2008:3:201"},"nodeType":"YulFunctionCall","src":"2008:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2033:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2004:3:201"},"nodeType":"YulFunctionCall","src":"2004:32:201"},"nodeType":"YulIf","src":"2001:52:201"},{"nodeType":"YulAssignment","src":"2062:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2091:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2072:18:201"},"nodeType":"YulFunctionCall","src":"2072:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2062:6:201"}]},{"nodeType":"YulAssignment","src":"2110:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2143:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2154:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2139:3:201"},"nodeType":"YulFunctionCall","src":"2139:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2120:18:201"},"nodeType":"YulFunctionCall","src":"2120:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2110:6:201"}]},{"nodeType":"YulAssignment","src":"2167:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2194:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2205:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2190:3:201"},"nodeType":"YulFunctionCall","src":"2190:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2177:12:201"},"nodeType":"YulFunctionCall","src":"2177:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2167:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1941:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1952:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1964:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1972:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1980:6:201","type":""}],"src":"1887:328:201"},{"body":{"nodeType":"YulBlock","src":"2321:76:201","statements":[{"nodeType":"YulAssignment","src":"2331:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2343:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2354:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2339:3:201"},"nodeType":"YulFunctionCall","src":"2339:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2331:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2373:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"2384:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2366:6:201"},"nodeType":"YulFunctionCall","src":"2366:25:201"},"nodeType":"YulExpressionStatement","src":"2366:25:201"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2290:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2301:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2312:4:201","type":""}],"src":"2220:177:201"},{"body":{"nodeType":"YulBlock","src":"2499:87:201","statements":[{"nodeType":"YulAssignment","src":"2509:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2521:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2532:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2517:3:201"},"nodeType":"YulFunctionCall","src":"2517:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2509:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2551:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2566:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2574:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2562:3:201"},"nodeType":"YulFunctionCall","src":"2562:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2544:6:201"},"nodeType":"YulFunctionCall","src":"2544:36:201"},"nodeType":"YulExpressionStatement","src":"2544:36:201"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2468:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2479:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2490:4:201","type":""}],"src":"2402:184:201"},{"body":{"nodeType":"YulBlock","src":"2661:116:201","statements":[{"body":{"nodeType":"YulBlock","src":"2707:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2716:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2719:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2709:6:201"},"nodeType":"YulFunctionCall","src":"2709:12:201"},"nodeType":"YulExpressionStatement","src":"2709:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2682:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2691:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2678:3:201"},"nodeType":"YulFunctionCall","src":"2678:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2703:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2674:3:201"},"nodeType":"YulFunctionCall","src":"2674:32:201"},"nodeType":"YulIf","src":"2671:52:201"},{"nodeType":"YulAssignment","src":"2732:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2761:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2742:18:201"},"nodeType":"YulFunctionCall","src":"2742:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2732:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2627:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2638:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2650:6:201","type":""}],"src":"2591:186:201"},{"body":{"nodeType":"YulBlock","src":"2901:99:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2918:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2929:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2911:6:201"},"nodeType":"YulFunctionCall","src":"2911:21:201"},"nodeType":"YulExpressionStatement","src":"2911:21:201"},{"nodeType":"YulAssignment","src":"2941:53:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2967:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2979:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2990:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2975:3:201"},"nodeType":"YulFunctionCall","src":"2975:18:201"}],"functionName":{"name":"abi_encode_string","nodeType":"YulIdentifier","src":"2949:17:201"},"nodeType":"YulFunctionCall","src":"2949:45:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2941:4:201"}]}]},"name":"abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2870:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2881:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2892:4:201","type":""}],"src":"2782:218:201"},{"body":{"nodeType":"YulBlock","src":"3106:125:201","statements":[{"nodeType":"YulAssignment","src":"3116:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3128:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3139:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3124:3:201"},"nodeType":"YulFunctionCall","src":"3124:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3116:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3158:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"3173:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3181:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3169:3:201"},"nodeType":"YulFunctionCall","src":"3169:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3151:6:201"},"nodeType":"YulFunctionCall","src":"3151:74:201"},"nodeType":"YulExpressionStatement","src":"3151:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3075:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3086:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3097:4:201","type":""}],"src":"3005:226:201"},{"body":{"nodeType":"YulBlock","src":"3306:110:201","statements":[{"body":{"nodeType":"YulBlock","src":"3352:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3361:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3364:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3354:6:201"},"nodeType":"YulFunctionCall","src":"3354:12:201"},"nodeType":"YulExpressionStatement","src":"3354:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3327:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3336:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3323:3:201"},"nodeType":"YulFunctionCall","src":"3323:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3348:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3319:3:201"},"nodeType":"YulFunctionCall","src":"3319:32:201"},"nodeType":"YulIf","src":"3316:52:201"},{"nodeType":"YulAssignment","src":"3377:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3400:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3387:12:201"},"nodeType":"YulFunctionCall","src":"3387:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3377:6:201"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3272:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3283:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3295:6:201","type":""}],"src":"3236:180:201"},{"body":{"nodeType":"YulBlock","src":"3591:523:201","statements":[{"body":{"nodeType":"YulBlock","src":"3638:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3647:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3650:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3640:6:201"},"nodeType":"YulFunctionCall","src":"3640:12:201"},"nodeType":"YulExpressionStatement","src":"3640:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3612:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3621:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3608:3:201"},"nodeType":"YulFunctionCall","src":"3608:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3633:3:201","type":"","value":"224"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3604:3:201"},"nodeType":"YulFunctionCall","src":"3604:33:201"},"nodeType":"YulIf","src":"3601:53:201"},{"nodeType":"YulAssignment","src":"3663:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3692:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3673:18:201"},"nodeType":"YulFunctionCall","src":"3673:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3663:6:201"}]},{"nodeType":"YulAssignment","src":"3711:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3744:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3755:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3740:3:201"},"nodeType":"YulFunctionCall","src":"3740:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3721:18:201"},"nodeType":"YulFunctionCall","src":"3721:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3711:6:201"}]},{"nodeType":"YulAssignment","src":"3768:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3795:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3806:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3791:3:201"},"nodeType":"YulFunctionCall","src":"3791:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3778:12:201"},"nodeType":"YulFunctionCall","src":"3778:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3768:6:201"}]},{"nodeType":"YulAssignment","src":"3819:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3846:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3857:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3842:3:201"},"nodeType":"YulFunctionCall","src":"3842:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3829:12:201"},"nodeType":"YulFunctionCall","src":"3829:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3819:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3870:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3900:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3911:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3896:3:201"},"nodeType":"YulFunctionCall","src":"3896:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3883:12:201"},"nodeType":"YulFunctionCall","src":"3883:33:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3874:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3964:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3973:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3976:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3966:6:201"},"nodeType":"YulFunctionCall","src":"3966:12:201"},"nodeType":"YulExpressionStatement","src":"3966:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3938:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3949:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"3956:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3945:3:201"},"nodeType":"YulFunctionCall","src":"3945:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3935:2:201"},"nodeType":"YulFunctionCall","src":"3935:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3928:6:201"},"nodeType":"YulFunctionCall","src":"3928:35:201"},"nodeType":"YulIf","src":"3925:55:201"},{"nodeType":"YulAssignment","src":"3989:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3999:5:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3989:6:201"}]},{"nodeType":"YulAssignment","src":"4013:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4040:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4051:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4036:3:201"},"nodeType":"YulFunctionCall","src":"4036:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4023:12:201"},"nodeType":"YulFunctionCall","src":"4023:33:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"4013:6:201"}]},{"nodeType":"YulAssignment","src":"4065:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4092:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4103:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4088:3:201"},"nodeType":"YulFunctionCall","src":"4088:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4075:12:201"},"nodeType":"YulFunctionCall","src":"4075:33:201"},"variableNames":[{"name":"value6","nodeType":"YulIdentifier","src":"4065:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3509:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3520:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3532:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3540:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3548:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3556:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3564:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"3572:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"3580:6:201","type":""}],"src":"3421:693:201"},{"body":{"nodeType":"YulBlock","src":"4206:173:201","statements":[{"body":{"nodeType":"YulBlock","src":"4252:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4261:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4264:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4254:6:201"},"nodeType":"YulFunctionCall","src":"4254:12:201"},"nodeType":"YulExpressionStatement","src":"4254:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4227:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4236:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4223:3:201"},"nodeType":"YulFunctionCall","src":"4223:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4248:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4219:3:201"},"nodeType":"YulFunctionCall","src":"4219:32:201"},"nodeType":"YulIf","src":"4216:52:201"},{"nodeType":"YulAssignment","src":"4277:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4306:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"4287:18:201"},"nodeType":"YulFunctionCall","src":"4287:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4277:6:201"}]},{"nodeType":"YulAssignment","src":"4325:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4358:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4369:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4354:3:201"},"nodeType":"YulFunctionCall","src":"4354:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"4335:18:201"},"nodeType":"YulFunctionCall","src":"4335:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4325:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4164:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4175:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4187:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4195:6:201","type":""}],"src":"4119:260:201"},{"body":{"nodeType":"YulBlock","src":"4439:382:201","statements":[{"nodeType":"YulAssignment","src":"4449:22:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4463:1:201","type":"","value":"1"},{"name":"data","nodeType":"YulIdentifier","src":"4466:4:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"4459:3:201"},"nodeType":"YulFunctionCall","src":"4459:12:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"4449:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"4480:38:201","value":{"arguments":[{"name":"data","nodeType":"YulIdentifier","src":"4510:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"4516:1:201","type":"","value":"1"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4506:3:201"},"nodeType":"YulFunctionCall","src":"4506:12:201"},"variables":[{"name":"outOfPlaceEncoding","nodeType":"YulTypedName","src":"4484:18:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4557:31:201","statements":[{"nodeType":"YulAssignment","src":"4559:27:201","value":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4573:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4581:4:201","type":"","value":"0x7f"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4569:3:201"},"nodeType":"YulFunctionCall","src":"4569:17:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"4559:6:201"}]}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"4537:18:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4530:6:201"},"nodeType":"YulFunctionCall","src":"4530:26:201"},"nodeType":"YulIf","src":"4527:61:201"},{"body":{"nodeType":"YulBlock","src":"4647:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4668:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4671:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4661:6:201"},"nodeType":"YulFunctionCall","src":"4661:88:201"},"nodeType":"YulExpressionStatement","src":"4661:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4769:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4772:4:201","type":"","value":"0x22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4762:6:201"},"nodeType":"YulFunctionCall","src":"4762:15:201"},"nodeType":"YulExpressionStatement","src":"4762:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4797:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4800:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4790:6:201"},"nodeType":"YulFunctionCall","src":"4790:15:201"},"nodeType":"YulExpressionStatement","src":"4790:15:201"}]},"condition":{"arguments":[{"name":"outOfPlaceEncoding","nodeType":"YulIdentifier","src":"4603:18:201"},{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"4626:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"4634:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4623:2:201"},"nodeType":"YulFunctionCall","src":"4623:14:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"4600:2:201"},"nodeType":"YulFunctionCall","src":"4600:38:201"},"nodeType":"YulIf","src":"4597:218:201"}]},"name":"extract_byte_array_length","nodeType":"YulFunctionDefinition","parameters":[{"name":"data","nodeType":"YulTypedName","src":"4419:4:201","type":""}],"returnVariables":[{"name":"length","nodeType":"YulTypedName","src":"4428:6:201","type":""}],"src":"4384:437:201"},{"body":{"nodeType":"YulBlock","src":"5000:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5017:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5028:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5010:6:201"},"nodeType":"YulFunctionCall","src":"5010:21:201"},"nodeType":"YulExpressionStatement","src":"5010:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5051:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5062:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5047:3:201"},"nodeType":"YulFunctionCall","src":"5047:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"5067:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5040:6:201"},"nodeType":"YulFunctionCall","src":"5040:30:201"},"nodeType":"YulExpressionStatement","src":"5040:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5090:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5101:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5086:3:201"},"nodeType":"YulFunctionCall","src":"5086:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"5106:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5079:6:201"},"nodeType":"YulFunctionCall","src":"5079:62:201"},"nodeType":"YulExpressionStatement","src":"5079:62:201"},{"nodeType":"YulAssignment","src":"5150:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5162:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5173:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5158:3:201"},"nodeType":"YulFunctionCall","src":"5158:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5150:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4977:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4991:4:201","type":""}],"src":"4826:356:201"},{"body":{"nodeType":"YulBlock","src":"5361:163:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5378:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5389:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5371:6:201"},"nodeType":"YulFunctionCall","src":"5371:21:201"},"nodeType":"YulExpressionStatement","src":"5371:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5412:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5423:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5408:3:201"},"nodeType":"YulFunctionCall","src":"5408:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"5428:2:201","type":"","value":"13"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5401:6:201"},"nodeType":"YulFunctionCall","src":"5401:30:201"},"nodeType":"YulExpressionStatement","src":"5401:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5451:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5462:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5447:3:201"},"nodeType":"YulFunctionCall","src":"5447:18:201"},{"hexValue":"494e56414c49445f4f574e4552","kind":"string","nodeType":"YulLiteral","src":"5467:15:201","type":"","value":"INVALID_OWNER"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5440:6:201"},"nodeType":"YulFunctionCall","src":"5440:43:201"},"nodeType":"YulExpressionStatement","src":"5440:43:201"},{"nodeType":"YulAssignment","src":"5492:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5504:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5515:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5500:3:201"},"nodeType":"YulFunctionCall","src":"5500:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5492:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_a30e2b4f22d955e30086ae3aef0adfd87eec9d0d3f055d6aa9af61f522dda886__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5338:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5352:4:201","type":""}],"src":"5187:337:201"},{"body":{"nodeType":"YulBlock","src":"5703:168:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5720:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5731:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5713:6:201"},"nodeType":"YulFunctionCall","src":"5713:21:201"},"nodeType":"YulExpressionStatement","src":"5713:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5754:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5765:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5750:3:201"},"nodeType":"YulFunctionCall","src":"5750:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"5770:2:201","type":"","value":"18"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5743:6:201"},"nodeType":"YulFunctionCall","src":"5743:30:201"},"nodeType":"YulExpressionStatement","src":"5743:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5793:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5804:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5789:3:201"},"nodeType":"YulFunctionCall","src":"5789:18:201"},{"hexValue":"494e56414c49445f45585049524154494f4e","kind":"string","nodeType":"YulLiteral","src":"5809:20:201","type":"","value":"INVALID_EXPIRATION"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5782:6:201"},"nodeType":"YulFunctionCall","src":"5782:48:201"},"nodeType":"YulExpressionStatement","src":"5782:48:201"},{"nodeType":"YulAssignment","src":"5839:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5851:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5862:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5847:3:201"},"nodeType":"YulFunctionCall","src":"5847:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5839:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fe3e5cf49f72bf8a6a8455c3e990f8479f5dfa09ac808886f330a39b0029c2d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5680:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5694:4:201","type":""}],"src":"5529:342:201"},{"body":{"nodeType":"YulBlock","src":"6117:373:201","statements":[{"nodeType":"YulAssignment","src":"6127:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6139:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6150:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6135:3:201"},"nodeType":"YulFunctionCall","src":"6135:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6127:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6170:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"6181:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6163:6:201"},"nodeType":"YulFunctionCall","src":"6163:25:201"},"nodeType":"YulExpressionStatement","src":"6163:25:201"},{"nodeType":"YulVariableDeclaration","src":"6197:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6207:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6201:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6269:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6280:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6265:3:201"},"nodeType":"YulFunctionCall","src":"6265:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"6289:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6297:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6285:3:201"},"nodeType":"YulFunctionCall","src":"6285:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6258:6:201"},"nodeType":"YulFunctionCall","src":"6258:43:201"},"nodeType":"YulExpressionStatement","src":"6258:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6321:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6332:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6317:3:201"},"nodeType":"YulFunctionCall","src":"6317:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"6341:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6349:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6337:3:201"},"nodeType":"YulFunctionCall","src":"6337:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6310:6:201"},"nodeType":"YulFunctionCall","src":"6310:43:201"},"nodeType":"YulExpressionStatement","src":"6310:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6373:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6384:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6369:3:201"},"nodeType":"YulFunctionCall","src":"6369:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"6389:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6362:6:201"},"nodeType":"YulFunctionCall","src":"6362:34:201"},"nodeType":"YulExpressionStatement","src":"6362:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6416:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6427:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6412:3:201"},"nodeType":"YulFunctionCall","src":"6412:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"6433:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6405:6:201"},"nodeType":"YulFunctionCall","src":"6405:35:201"},"nodeType":"YulExpressionStatement","src":"6405:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6460:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6471:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6456:3:201"},"nodeType":"YulFunctionCall","src":"6456:19:201"},{"name":"value5","nodeType":"YulIdentifier","src":"6477:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6449:6:201"},"nodeType":"YulFunctionCall","src":"6449:35:201"},"nodeType":"YulExpressionStatement","src":"6449:35:201"}]},"name":"abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6046:9:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"6057:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"6065:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6073:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6081:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6089:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6097:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6108:4:201","type":""}],"src":"5876:614:201"},{"body":{"nodeType":"YulBlock","src":"6743:196:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6760:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"6765:66:201","type":"","value":"0x1901000000000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6753:6:201"},"nodeType":"YulFunctionCall","src":"6753:79:201"},"nodeType":"YulExpressionStatement","src":"6753:79:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6852:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"6857:1:201","type":"","value":"2"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6848:3:201"},"nodeType":"YulFunctionCall","src":"6848:11:201"},{"name":"value0","nodeType":"YulIdentifier","src":"6861:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6841:6:201"},"nodeType":"YulFunctionCall","src":"6841:27:201"},"nodeType":"YulExpressionStatement","src":"6841:27:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6888:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"6893:2:201","type":"","value":"34"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6884:3:201"},"nodeType":"YulFunctionCall","src":"6884:12:201"},{"name":"value1","nodeType":"YulIdentifier","src":"6898:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6877:6:201"},"nodeType":"YulFunctionCall","src":"6877:28:201"},"nodeType":"YulExpressionStatement","src":"6877:28:201"},{"nodeType":"YulAssignment","src":"6914:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"6925:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"6930:2:201","type":"","value":"66"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6921:3:201"},"nodeType":"YulFunctionCall","src":"6921:12:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"6914:3:201"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"6711:3:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6716:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6724:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"6735:3:201","type":""}],"src":"6495:444:201"},{"body":{"nodeType":"YulBlock","src":"7125:217:201","statements":[{"nodeType":"YulAssignment","src":"7135:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7147:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7158:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7143:3:201"},"nodeType":"YulFunctionCall","src":"7143:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7135:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7178:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"7189:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7171:6:201"},"nodeType":"YulFunctionCall","src":"7171:25:201"},"nodeType":"YulExpressionStatement","src":"7171:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7216:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7227:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7212:3:201"},"nodeType":"YulFunctionCall","src":"7212:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"7236:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7244:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7232:3:201"},"nodeType":"YulFunctionCall","src":"7232:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7205:6:201"},"nodeType":"YulFunctionCall","src":"7205:45:201"},"nodeType":"YulExpressionStatement","src":"7205:45:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7270:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7281:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7266:3:201"},"nodeType":"YulFunctionCall","src":"7266:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"7286:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7259:6:201"},"nodeType":"YulFunctionCall","src":"7259:34:201"},"nodeType":"YulExpressionStatement","src":"7259:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7313:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7324:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7309:3:201"},"nodeType":"YulFunctionCall","src":"7309:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"7329:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7302:6:201"},"nodeType":"YulFunctionCall","src":"7302:34:201"},"nodeType":"YulExpressionStatement","src":"7302:34:201"}]},"name":"abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7070:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"7081:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7089:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7097:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7105:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7116:4:201","type":""}],"src":"6944:398:201"},{"body":{"nodeType":"YulBlock","src":"7521:167:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7538:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7549:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7531:6:201"},"nodeType":"YulFunctionCall","src":"7531:21:201"},"nodeType":"YulExpressionStatement","src":"7531:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7572:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7583:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7568:3:201"},"nodeType":"YulFunctionCall","src":"7568:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"7588:2:201","type":"","value":"17"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7561:6:201"},"nodeType":"YulFunctionCall","src":"7561:30:201"},"nodeType":"YulExpressionStatement","src":"7561:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7611:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7622:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7607:3:201"},"nodeType":"YulFunctionCall","src":"7607:18:201"},{"hexValue":"494e56414c49445f5349474e4154555245","kind":"string","nodeType":"YulLiteral","src":"7627:19:201","type":"","value":"INVALID_SIGNATURE"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7600:6:201"},"nodeType":"YulFunctionCall","src":"7600:47:201"},"nodeType":"YulExpressionStatement","src":"7600:47:201"},{"nodeType":"YulAssignment","src":"7656:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7668:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7679:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7664:3:201"},"nodeType":"YulFunctionCall","src":"7664:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7656:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_5e2e9eaa2d734966dea0900deacd15b20129fbce05255d633a3ce5ebca181b88__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7498:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7512:4:201","type":""}],"src":"7347:341:201"},{"body":{"nodeType":"YulBlock","src":"7741:234:201","statements":[{"body":{"nodeType":"YulBlock","src":"7776:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7797:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7800:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7790:6:201"},"nodeType":"YulFunctionCall","src":"7790:88:201"},"nodeType":"YulExpressionStatement","src":"7790:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7898:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7901:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7891:6:201"},"nodeType":"YulFunctionCall","src":"7891:15:201"},"nodeType":"YulExpressionStatement","src":"7891:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7926:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7929:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7919:6:201"},"nodeType":"YulFunctionCall","src":"7919:15:201"},"nodeType":"YulExpressionStatement","src":"7919:15:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7757:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"7764:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"7760:3:201"},"nodeType":"YulFunctionCall","src":"7760:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7754:2:201"},"nodeType":"YulFunctionCall","src":"7754:13:201"},"nodeType":"YulIf","src":"7751:193:201"},{"nodeType":"YulAssignment","src":"7953:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"7964:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"7967:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7960:3:201"},"nodeType":"YulFunctionCall","src":"7960:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"7953:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"7724:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"7727:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"7733:3:201","type":""}],"src":"7693:282:201"},{"body":{"nodeType":"YulBlock","src":"8154:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8171:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8182:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8164:6:201"},"nodeType":"YulFunctionCall","src":"8164:21:201"},"nodeType":"YulExpressionStatement","src":"8164:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8205:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8216:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8201:3:201"},"nodeType":"YulFunctionCall","src":"8201:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"8221:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8194:6:201"},"nodeType":"YulFunctionCall","src":"8194:30:201"},"nodeType":"YulExpressionStatement","src":"8194:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8244:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8255:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8240:3:201"},"nodeType":"YulFunctionCall","src":"8240:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"8260:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8233:6:201"},"nodeType":"YulFunctionCall","src":"8233:62:201"},"nodeType":"YulExpressionStatement","src":"8233:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8315:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8326:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8311:3:201"},"nodeType":"YulFunctionCall","src":"8311:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"8331:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8304:6:201"},"nodeType":"YulFunctionCall","src":"8304:36:201"},"nodeType":"YulExpressionStatement","src":"8304:36:201"},{"nodeType":"YulAssignment","src":"8349:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8361:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8372:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8357:3:201"},"nodeType":"YulFunctionCall","src":"8357:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8349:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8131:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8145:4:201","type":""}],"src":"7980:402:201"},{"body":{"nodeType":"YulBlock","src":"8561:226:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8578:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8589:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8571:6:201"},"nodeType":"YulFunctionCall","src":"8571:21:201"},"nodeType":"YulExpressionStatement","src":"8571:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8612:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8623:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8608:3:201"},"nodeType":"YulFunctionCall","src":"8608:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"8628:2:201","type":"","value":"36"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8601:6:201"},"nodeType":"YulFunctionCall","src":"8601:30:201"},"nodeType":"YulExpressionStatement","src":"8601:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8651:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8662:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8647:3:201"},"nodeType":"YulFunctionCall","src":"8647:18:201"},{"hexValue":"45524332303a20617070726f76652066726f6d20746865207a65726f20616464","kind":"string","nodeType":"YulLiteral","src":"8667:34:201","type":"","value":"ERC20: approve from the zero add"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8640:6:201"},"nodeType":"YulFunctionCall","src":"8640:62:201"},"nodeType":"YulExpressionStatement","src":"8640:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8722:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8733:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8718:3:201"},"nodeType":"YulFunctionCall","src":"8718:18:201"},{"hexValue":"72657373","kind":"string","nodeType":"YulLiteral","src":"8738:6:201","type":"","value":"ress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8711:6:201"},"nodeType":"YulFunctionCall","src":"8711:34:201"},"nodeType":"YulExpressionStatement","src":"8711:34:201"},{"nodeType":"YulAssignment","src":"8754:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8766:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8777:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8762:3:201"},"nodeType":"YulFunctionCall","src":"8762:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8754:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8538:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8552:4:201","type":""}],"src":"8387:400:201"},{"body":{"nodeType":"YulBlock","src":"8966:224:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8983:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8994:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8976:6:201"},"nodeType":"YulFunctionCall","src":"8976:21:201"},"nodeType":"YulExpressionStatement","src":"8976:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9017:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9028:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9013:3:201"},"nodeType":"YulFunctionCall","src":"9013:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"9033:2:201","type":"","value":"34"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9006:6:201"},"nodeType":"YulFunctionCall","src":"9006:30:201"},"nodeType":"YulExpressionStatement","src":"9006:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9056:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9067:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9052:3:201"},"nodeType":"YulFunctionCall","src":"9052:18:201"},{"hexValue":"45524332303a20617070726f766520746f20746865207a65726f206164647265","kind":"string","nodeType":"YulLiteral","src":"9072:34:201","type":"","value":"ERC20: approve to the zero addre"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9045:6:201"},"nodeType":"YulFunctionCall","src":"9045:62:201"},"nodeType":"YulExpressionStatement","src":"9045:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9127:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9138:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9123:3:201"},"nodeType":"YulFunctionCall","src":"9123:18:201"},{"hexValue":"7373","kind":"string","nodeType":"YulLiteral","src":"9143:4:201","type":"","value":"ss"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9116:6:201"},"nodeType":"YulFunctionCall","src":"9116:32:201"},"nodeType":"YulExpressionStatement","src":"9116:32:201"},{"nodeType":"YulAssignment","src":"9157:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9169:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9180:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9165:3:201"},"nodeType":"YulFunctionCall","src":"9165:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9157:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8943:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8957:4:201","type":""}],"src":"8792:398:201"},{"body":{"nodeType":"YulBlock","src":"9369:227:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9386:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9397:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9379:6:201"},"nodeType":"YulFunctionCall","src":"9379:21:201"},"nodeType":"YulExpressionStatement","src":"9379:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9420:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9431:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9416:3:201"},"nodeType":"YulFunctionCall","src":"9416:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"9436:2:201","type":"","value":"37"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9409:6:201"},"nodeType":"YulFunctionCall","src":"9409:30:201"},"nodeType":"YulExpressionStatement","src":"9409:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9459:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9470:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9455:3:201"},"nodeType":"YulFunctionCall","src":"9455:18:201"},{"hexValue":"45524332303a207472616e736665722066726f6d20746865207a65726f206164","kind":"string","nodeType":"YulLiteral","src":"9475:34:201","type":"","value":"ERC20: transfer from the zero ad"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9448:6:201"},"nodeType":"YulFunctionCall","src":"9448:62:201"},"nodeType":"YulExpressionStatement","src":"9448:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9530:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9541:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9526:3:201"},"nodeType":"YulFunctionCall","src":"9526:18:201"},{"hexValue":"6472657373","kind":"string","nodeType":"YulLiteral","src":"9546:7:201","type":"","value":"dress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9519:6:201"},"nodeType":"YulFunctionCall","src":"9519:35:201"},"nodeType":"YulExpressionStatement","src":"9519:35:201"},{"nodeType":"YulAssignment","src":"9563:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9575:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9586:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9571:3:201"},"nodeType":"YulFunctionCall","src":"9571:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9563:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9346:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9360:4:201","type":""}],"src":"9195:401:201"},{"body":{"nodeType":"YulBlock","src":"9775:225:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9792:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9803:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9785:6:201"},"nodeType":"YulFunctionCall","src":"9785:21:201"},"nodeType":"YulExpressionStatement","src":"9785:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9826:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9837:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9822:3:201"},"nodeType":"YulFunctionCall","src":"9822:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"9842:2:201","type":"","value":"35"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9815:6:201"},"nodeType":"YulFunctionCall","src":"9815:30:201"},"nodeType":"YulExpressionStatement","src":"9815:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9865:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9876:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9861:3:201"},"nodeType":"YulFunctionCall","src":"9861:18:201"},{"hexValue":"45524332303a207472616e7366657220746f20746865207a65726f2061646472","kind":"string","nodeType":"YulLiteral","src":"9881:34:201","type":"","value":"ERC20: transfer to the zero addr"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9854:6:201"},"nodeType":"YulFunctionCall","src":"9854:62:201"},"nodeType":"YulExpressionStatement","src":"9854:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9936:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9947:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9932:3:201"},"nodeType":"YulFunctionCall","src":"9932:18:201"},{"hexValue":"657373","kind":"string","nodeType":"YulLiteral","src":"9952:5:201","type":"","value":"ess"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9925:6:201"},"nodeType":"YulFunctionCall","src":"9925:33:201"},"nodeType":"YulExpressionStatement","src":"9925:33:201"},{"nodeType":"YulAssignment","src":"9967:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9979:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9990:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9975:3:201"},"nodeType":"YulFunctionCall","src":"9975:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9967:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9752:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9766:4:201","type":""}],"src":"9601:399:201"},{"body":{"nodeType":"YulBlock","src":"10179:181:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10196:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10207:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10189:6:201"},"nodeType":"YulFunctionCall","src":"10189:21:201"},"nodeType":"YulExpressionStatement","src":"10189:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10230:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10241:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10226:3:201"},"nodeType":"YulFunctionCall","src":"10226:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"10246:2:201","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10219:6:201"},"nodeType":"YulFunctionCall","src":"10219:30:201"},"nodeType":"YulExpressionStatement","src":"10219:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10269:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10280:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10265:3:201"},"nodeType":"YulFunctionCall","src":"10265:18:201"},{"hexValue":"45524332303a206d696e7420746f20746865207a65726f2061646472657373","kind":"string","nodeType":"YulLiteral","src":"10285:33:201","type":"","value":"ERC20: mint to the zero address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10258:6:201"},"nodeType":"YulFunctionCall","src":"10258:61:201"},"nodeType":"YulExpressionStatement","src":"10258:61:201"},{"nodeType":"YulAssignment","src":"10328:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10340:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10351:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10336:3:201"},"nodeType":"YulFunctionCall","src":"10336:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10328:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10156:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10170:4:201","type":""}],"src":"10005:355:201"}]},"contents":"{\n    { }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        if gt(i, length)\n        {\n            mstore(add(add(pos, length), 0x20), 0)\n        }\n        end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_bool(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_uint8t_bytes32t_bytes32(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n    {\n        if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n        value3 := calldataload(add(headStart, 96))\n        let value := calldataload(add(headStart, 128))\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value4 := value\n        value5 := calldataload(add(headStart, 160))\n        value6 := calldataload(add(headStart, 192))\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_a30e2b4f22d955e30086ae3aef0adfd87eec9d0d3f055d6aa9af61f522dda886__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 13)\n        mstore(add(headStart, 64), \"INVALID_OWNER\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_9fe3e5cf49f72bf8a6a8455c3e990f8479f5dfa09ac808886f330a39b0029c2d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 18)\n        mstore(add(headStart, 64), \"INVALID_EXPIRATION\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__to_t_bytes32_t_address_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        mstore(headStart, value0)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n    {\n        mstore(pos, 0x1901000000000000000000000000000000000000000000000000000000000000)\n        mstore(add(pos, 2), value0)\n        mstore(add(pos, 34), value1)\n        end := add(pos, 66)\n    }\n    function abi_encode_tuple_t_bytes32_t_uint8_t_bytes32_t_bytes32__to_t_bytes32_t_uint8_t_bytes32_t_bytes32__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_stringliteral_5e2e9eaa2d734966dea0900deacd15b20129fbce05255d633a3ce5ebca181b88__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 17)\n        mstore(add(headStart, 64), \"INVALID_SIGNATURE\")\n        tail := add(headStart, 96)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y))\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        sum := add(x, y)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"ERC20: approve from the zero add\")\n        mstore(add(headStart, 96), \"ress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ERC20: approve to the zero addre\")\n        mstore(add(headStart, 96), \"ss\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC20: transfer from the zero ad\")\n        mstore(add(headStart, 96), \"dress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 35)\n        mstore(add(headStart, 64), \"ERC20: transfer to the zero addr\")\n        mstore(add(headStart, 96), \"ess\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ERC20: mint to the zero address\")\n        tail := add(headStart, 96)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b506004361061018d5760003560e01c806370a08231116100e3578063a0712d681161008c578063d505accf11610066578063d505accf146103b7578063dd62ed3e146103ca578063f2fde38b1461041057600080fd5b8063a0712d681461037e578063a457c2d714610391578063a9059cbb146103a457600080fd5b80637ecebe00116100bd5780637ecebe00146102fd5780638da5cb5b1461033357806395d89b411461037657600080fd5b806370a0823114610283578063715018a6146102b957806378160376146102c157600080fd5b806330adf81f11610145578063395093511161011f578063395093511461025257806340c10f19146102655780635300f82b1461027857600080fd5b806330adf81f1461020d578063313ce567146102345780633644e5151461024957600080fd5b806318160ddd1161017657806318160ddd146101d35780631c02bc31146101e557806323b872dd146101fa57600080fd5b806306fdde0314610192578063095ea7b3146101b0575b600080fd5b61019a610423565b6040516101a791906113a8565b60405180910390f35b6101c36101be3660046113e6565b6104b5565b60405190151581526020016101a7565b6002545b6040519081526020016101a7565b6101f86101f3366004611410565b6104cc565b005b6101c3610208366004611432565b610589565b6101d77f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055460405160ff90911681526020016101a7565b6101d760075481565b6101c36102603660046113e6565b6105ff565b6101c36102733660046113e6565b610642565b60085460ff166101c3565b6101d761029136600461146e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101f86106e6565b61019a6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6101d761030b36600461146e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526006602052604090205490565b600554610100900473ffffffffffffffffffffffffffffffffffffffff1660405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a7565b61019a6107e1565b6101c361038c366004611489565b6107f0565b6101c361039f3660046113e6565b61089d565b6101c36103b23660046113e6565b6108f9565b6101f86103c53660046114a2565b610906565b6101d76103d8366004611515565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101f861041e36600461146e565b610c27565b60606003805461043290611548565b80601f016020809104026020016040519081016040528092919081815260200182805461045e90611548565b80156104ab5780601f10610480576101008083540402835291602001916104ab565b820191906000526020600020905b81548152906001019060200180831161048e57829003601f168201915b5050505050905090565b60006104c2338484610de9565b5060015b92915050565b60055473ffffffffffffffffffffffffffffffffffffffff610100909104163314610558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000610596848484610f9d565b6105f584336105f0856040518060600160405280602881526020016116026028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260016020908152604080832033845290915290205491906111c7565b610de9565b5060019392505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916104c29185906105f0908661120e565b60085460009060ff161515600114156106dc5760055473ffffffffffffffffffffffffffffffffffffffff6101009091041633146106dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161054f565b6104c2838361121e565b60055473ffffffffffffffffffffffffffffffffffffffff61010090910416331461076d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161054f565b600554604051600091610100900473ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff169055565b60606004805461043290611548565b60085460009060ff1615156001141561088a5760055473ffffffffffffffffffffffffffffffffffffffff61010090910416331461088a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161054f565b610894338361121e565b5060015b919050565b60006104c233846105f08560405180606001604052806025815260200161162a6025913933600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d16845290915290205491906111c7565b60006104c2338484610f9d565b73ffffffffffffffffffffffffffffffffffffffff8716610983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f494e56414c49445f4f574e455200000000000000000000000000000000000000604482015260640161054f565b834211156109ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f494e56414c49445f45585049524154494f4e0000000000000000000000000000604482015260640161054f565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526006602090815260408083205460075482517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958c166060860152608085018b905260a0850181905260c08086018b90528251808703909101815260e08601909252815191909201207f19010000000000000000000000000000000000000000000000000000000000006101008501526101028401949094526101228301939093529061014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206000845290830180835281905260ff8816918301919091526060820186905260808201859052915060019060a0016020604051602081039080840390855afa158015610b42573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614610be0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f494e56414c49445f5349474e4154555245000000000000000000000000000000604482015260640161054f565b610beb82600161159c565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260066020526040902055610c1c898989610de9565b505050505050505050565b60055473ffffffffffffffffffffffffffffffffffffffff610100909104163314610cae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161054f565b73ffffffffffffffffffffffffffffffffffffffff8116610d51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161054f565b60055460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36005805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff8316610e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161054f565b73ffffffffffffffffffffffffffffffffffffffff8216610f2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161054f565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161054f565b73ffffffffffffffffffffffffffffffffffffffff82166110e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161054f565b61112d816040518060600160405280602681526020016115dc6026913973ffffffffffffffffffffffffffffffffffffffff861660009081526020819052604090205491906111c7565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054611169908261120e565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610f90565b8183038184821115611206576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054f91906113a8565b509392505050565b808201828110156104c657600080fd5b73ffffffffffffffffffffffffffffffffffffffff821661129b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161054f565b6002546112a8908261120e565b60025573ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020546112db908261120e565b73ffffffffffffffffffffffffffffffffffffffff8316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000815180845260005b8181101561136357602081850181015186830182015201611347565b81811115611375576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006113bb602083018461133d565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461089857600080fd5b600080604083850312156113f957600080fd5b611402836113c2565b946020939093013593505050565b60006020828403121561142257600080fd5b813580151581146113bb57600080fd5b60008060006060848603121561144757600080fd5b611450846113c2565b925061145e602085016113c2565b9150604084013590509250925092565b60006020828403121561148057600080fd5b6113bb826113c2565b60006020828403121561149b57600080fd5b5035919050565b600080600080600080600060e0888a0312156114bd57600080fd5b6114c6886113c2565b96506114d4602089016113c2565b95506040880135945060608801359350608088013560ff811681146114f857600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561152857600080fd5b611531836113c2565b915061153f602084016113c2565b90509250929050565b600181811c9082168061155c57607f821691505b60208210811415611596577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082198211156115d6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220169abeea256a742a5e4c40a8e2f1fcc3699fe4f4e71502e92a3f852e99efe02664736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x18D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0xE3 JUMPI DUP1 PUSH4 0xA0712D68 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x3B7 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x3CA JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x410 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xA0712D68 EQ PUSH2 0x37E JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x391 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x3A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0xBD JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x2FD JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x333 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x376 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x283 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x2B9 JUMPI DUP1 PUSH4 0x78160376 EQ PUSH2 0x2C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F GT PUSH2 0x145 JUMPI DUP1 PUSH4 0x39509351 GT PUSH2 0x11F JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x252 JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x265 JUMPI DUP1 PUSH4 0x5300F82B EQ PUSH2 0x278 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x20D JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x234 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x249 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0x176 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x1D3 JUMPI DUP1 PUSH4 0x1C02BC31 EQ PUSH2 0x1E5 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x192 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1B0 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x19A PUSH2 0x423 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1A7 SWAP2 SWAP1 PUSH2 0x13A8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1C3 PUSH2 0x1BE CALLDATASIZE PUSH1 0x4 PUSH2 0x13E6 JUMP JUMPDEST PUSH2 0x4B5 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1A7 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1A7 JUMP JUMPDEST PUSH2 0x1F8 PUSH2 0x1F3 CALLDATASIZE PUSH1 0x4 PUSH2 0x1410 JUMP JUMPDEST PUSH2 0x4CC JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1C3 PUSH2 0x208 CALLDATASIZE PUSH1 0x4 PUSH2 0x1432 JUMP JUMPDEST PUSH2 0x589 JUMP JUMPDEST PUSH2 0x1D7 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1A7 JUMP JUMPDEST PUSH2 0x1D7 PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x1C3 PUSH2 0x260 CALLDATASIZE PUSH1 0x4 PUSH2 0x13E6 JUMP JUMPDEST PUSH2 0x5FF JUMP JUMPDEST PUSH2 0x1C3 PUSH2 0x273 CALLDATASIZE PUSH1 0x4 PUSH2 0x13E6 JUMP JUMPDEST PUSH2 0x642 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0xFF AND PUSH2 0x1C3 JUMP JUMPDEST PUSH2 0x1D7 PUSH2 0x291 CALLDATASIZE PUSH1 0x4 PUSH2 0x146E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x1F8 PUSH2 0x6E6 JUMP JUMPDEST PUSH2 0x19A PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3100000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP DUP2 JUMP JUMPDEST PUSH2 0x1D7 PUSH2 0x30B CALLDATASIZE PUSH1 0x4 PUSH2 0x146E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1A7 JUMP JUMPDEST PUSH2 0x19A PUSH2 0x7E1 JUMP JUMPDEST PUSH2 0x1C3 PUSH2 0x38C CALLDATASIZE PUSH1 0x4 PUSH2 0x1489 JUMP JUMPDEST PUSH2 0x7F0 JUMP JUMPDEST PUSH2 0x1C3 PUSH2 0x39F CALLDATASIZE PUSH1 0x4 PUSH2 0x13E6 JUMP JUMPDEST PUSH2 0x89D JUMP JUMPDEST PUSH2 0x1C3 PUSH2 0x3B2 CALLDATASIZE PUSH1 0x4 PUSH2 0x13E6 JUMP JUMPDEST PUSH2 0x8F9 JUMP JUMPDEST PUSH2 0x1F8 PUSH2 0x3C5 CALLDATASIZE PUSH1 0x4 PUSH2 0x14A2 JUMP JUMPDEST PUSH2 0x906 JUMP JUMPDEST PUSH2 0x1D7 PUSH2 0x3D8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1515 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 PUSH2 0x1F8 PUSH2 0x41E CALLDATASIZE PUSH1 0x4 PUSH2 0x146E JUMP JUMPDEST PUSH2 0xC27 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x432 SWAP1 PUSH2 0x1548 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x45E SWAP1 PUSH2 0x1548 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x4AB JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x480 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x4AB 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 0x48E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4C2 CALLER DUP5 DUP5 PUSH2 0xDE9 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 SWAP1 SWAP2 DIV AND CALLER EQ PUSH2 0x558 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x8 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x596 DUP5 DUP5 DUP5 PUSH2 0xF9D JUMP JUMPDEST PUSH2 0x5F5 DUP5 CALLER PUSH2 0x5F0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1602 PUSH1 0x28 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x11C7 JUMP JUMPDEST PUSH2 0xDE9 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP 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 0x4C2 SWAP2 DUP6 SWAP1 PUSH2 0x5F0 SWAP1 DUP7 PUSH2 0x120E JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x1 EQ ISZERO PUSH2 0x6DC JUMPI PUSH1 0x5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 SWAP1 SWAP2 DIV AND CALLER EQ PUSH2 0x6DC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x54F JUMP JUMPDEST PUSH2 0x4C2 DUP4 DUP4 PUSH2 0x121E JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 SWAP1 SWAP2 DIV AND CALLER EQ PUSH2 0x76D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x54F JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 SWAP2 PUSH2 0x100 SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x5 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x432 SWAP1 PUSH2 0x1548 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH1 0xFF AND ISZERO ISZERO PUSH1 0x1 EQ ISZERO PUSH2 0x88A JUMPI PUSH1 0x5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 SWAP1 SWAP2 DIV AND CALLER EQ PUSH2 0x88A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x54F JUMP JUMPDEST PUSH2 0x894 CALLER DUP4 PUSH2 0x121E JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4C2 CALLER DUP5 PUSH2 0x5F0 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x25 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x162A PUSH1 0x25 SWAP2 CODECOPY CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP14 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x11C7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4C2 CALLER DUP5 DUP5 PUSH2 0xF9D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND PUSH2 0x983 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F4F574E455200000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x54F JUMP JUMPDEST DUP4 TIMESTAMP GT ISZERO PUSH2 0x9ED JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F45585049524154494F4E0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x54F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x7 SLOAD DUP3 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 DUP7 ADD MSTORE DUP1 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP6 DUP13 AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD DUP12 SWAP1 MSTORE PUSH1 0xA0 DUP6 ADD DUP2 SWAP1 MSTORE PUSH1 0xC0 DUP1 DUP7 ADD DUP12 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP8 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xE0 DUP7 ADD SWAP1 SWAP3 MSTORE DUP2 MLOAD SWAP2 SWAP1 SWAP3 ADD KECCAK256 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 PUSH2 0x100 DUP6 ADD MSTORE PUSH2 0x102 DUP5 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH2 0x122 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 PUSH2 0x142 ADD PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE DUP3 DUP3 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD KECCAK256 PUSH1 0x0 DUP5 MSTORE SWAP1 DUP4 ADD DUP1 DUP4 MSTORE DUP2 SWAP1 MSTORE PUSH1 0xFF DUP9 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP3 ADD DUP7 SWAP1 MSTORE PUSH1 0x80 DUP3 ADD DUP6 SWAP1 MSTORE SWAP2 POP PUSH1 0x1 SWAP1 PUSH1 0xA0 ADD PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB42 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD SUB MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xBE0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x11 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F5349474E4154555245000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x54F JUMP JUMPDEST PUSH2 0xBEB DUP3 PUSH1 0x1 PUSH2 0x159C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0xC1C DUP10 DUP10 DUP10 PUSH2 0xDE9 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 SWAP1 SWAP2 DIV AND CALLER EQ PUSH2 0xCAE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x54F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xD51 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x54F JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND SWAP3 PUSH2 0x100 SWAP1 DIV AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 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 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0xE8B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7265737300000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x54F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0xF2E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7373000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x54F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x1040 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6472657373000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x54F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x10E3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6573730000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x54F JUMP JUMPDEST PUSH2 0x112D DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x15DC PUSH1 0x26 SWAP2 CODECOPY PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP2 SWAP1 PUSH2 0x11C7 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 0x1169 SWAP1 DUP3 PUSH2 0x120E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE MLOAD DUP5 DUP2 MSTORE SWAP1 SWAP3 SWAP2 DUP7 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH2 0xF90 JUMP JUMPDEST DUP2 DUP4 SUB DUP2 DUP5 DUP3 GT ISZERO PUSH2 0x1206 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x54F SWAP2 SWAP1 PUSH2 0x13A8 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP3 DUP2 LT ISZERO PUSH2 0x4C6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x129B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A206D696E7420746F20746865207A65726F206164647265737300 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x54F JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH2 0x12A8 SWAP1 DUP3 PUSH2 0x120E JUMP JUMPDEST PUSH1 0x2 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x12DB SWAP1 DUP3 PUSH2 0x120E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE SWAP3 MLOAD DUP5 DUP2 MSTORE SWAP2 SWAP3 SWAP1 SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1363 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x1347 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x1375 JUMPI PUSH1 0x0 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x13BB PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x133D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x898 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x13F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1402 DUP4 PUSH2 0x13C2 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 0x1422 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x13BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1447 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1450 DUP5 PUSH2 0x13C2 JUMP JUMPDEST SWAP3 POP PUSH2 0x145E PUSH1 0x20 DUP6 ADD PUSH2 0x13C2 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1480 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x13BB DUP3 PUSH2 0x13C2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x149B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x14BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x14C6 DUP9 PUSH2 0x13C2 JUMP JUMPDEST SWAP7 POP PUSH2 0x14D4 PUSH1 0x20 DUP10 ADD PUSH2 0x13C2 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x14F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1528 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1531 DUP4 PUSH2 0x13C2 JUMP JUMPDEST SWAP2 POP PUSH2 0x153F PUSH1 0x20 DUP5 ADD PUSH2 0x13C2 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x155C JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 EQ ISZERO PUSH2 0x1596 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x15D6 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP ADD SWAP1 JUMP INVALID GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x2062616C616E636545524332303A207472616E73 PUSH7 0x657220616D6F75 PUSH15 0x74206578636565647320616C6C6F77 PUSH2 0x6E63 PUSH6 0x45524332303A KECCAK256 PUSH5 0x6563726561 PUSH20 0x656420616C6C6F77616E63652062656C6F77207A PUSH6 0x726FA2646970 PUSH7 0x7358221220169A 0xBE 0xEA 0x25 PUSH11 0x742A5E4C40A8E2F1FCC369 SWAP16 0xE4 DELEGATECALL 0xE7 ISZERO MUL 0xE9 0x2A EXTCODEHASH DUP6 0x2E SWAP10 0xEF 0xE0 0x26 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"402:3029:173:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2123:75:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4029:156;;;;;;:::i;:::-;;:::i;:::-;;;1400:14:201;;1393:22;1375:41;;1363:2;1348:18;4029:156:6;1235:187:201;3102:92:6;3177:12;;3102:92;;;1573:25:201;;;1561:2;1546:18;3102:92:6;1427:177:201;3267:80:173;;;;;;:::i;:::-;;:::i;:::-;;4619:343:6;;;;;;:::i;:::-;;:::i;663:141:173:-;;709:95;663:141;;2975:75:6;3036:9;;2975:75;;3036:9;;;;2544:36:201;;2532:2;2517:18;2975:75:6;2402:184:201;904:31:173;;;;;;5331:205:6;;;;;;:::i;:::-;;:::i;3020:146:173:-;;;;;;:::i;:::-;;:::i;3351:78::-;3414:10;;;;3351:78;;3244:111:6;;;;;;:::i;:::-;3332:18;;3310:7;3332:18;;;;;;;;;;;;3244:111;1601:135:11;;;:::i;464:50:173:-;;504:10;;;;;;;;;;;;;;;;;464:50;;3170:93;;;;;;:::i;:::-;3244:14;;3222:7;3244:14;;;:7;:14;;;;;;;3170:93;1018:71:11;1078:6;;;;;;;1018:71;;3181:42:201;3169:55;;;3151:74;;3139:2;3124:18;1018:71:11;3005:226:201;2301:79:6;;;:::i;2658:134:173:-;;;;;;:::i;:::-;;:::i;5993:316:6:-;;;;;;:::i;:::-;;:::i;3540:162::-;;;;;;:::i;:::-;;:::i;1760:729:173:-;;;;;;:::i;:::-;;:::i;3752:155:6:-;;;;;;:::i;:::-;3875:18;;;;3853:7;3875:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3752:155;1875:226:11;;;;;;:::i;:::-;;:::i;2123:75:6:-;2160:13;2188:5;2181:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2123:75;:::o;4029:156::-;4112:4;4124:39;678:10:4;4147:7:6;4156:6;4124:8;:39::i;:::-;-1:-1:-1;4176:4:6;4029:156;;;;;:::o;3267:80:173:-;1204:6:11;;:22;:6;;;;;678:10:4;1204:22:11;1196:67;;;;;;;5028:2:201;1196:67:11;;;5010:21:201;;;5047:18;;;5040:30;5106:34;5086:18;;;5079:62;5158:18;;1196:67:11;;;;;;;;;3324:10:173::1;:18:::0;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;3267:80::o;4619:343:6:-;4741:4;4753:36;4763:6;4771:9;4782:6;4753:9;:36::i;:::-;4795:145;4811:6;678:10:4;4845:89:6;4883:6;4845:89;;;;;;;;;;;;;;;;;:19;;;;;;;:11;:19;;;;;;;;678:10:4;4845:33:6;;;;;;;;;;:37;:89::i;:::-;4795:8;:145::i;:::-;-1:-1:-1;4953:4:6;4619:343;;;;;:::o;5331:205::-;678:10:4;5419:4:6;5463:25;;;:11;:25;;;;;;;;;:34;;;;;;;;;;5419:4;;5431:83;;5454:7;;5463:50;;5502:10;5463:38;:50::i;3020:146:173:-;1121:10;;3111:4;;1121:10;;:18;;:10;:18;1117:107;;;1078:6:11;;1157:23:173;1078:6:11;;;;;678:10:4;1157:23:173;1149:68;;;;;;;5028:2:201;1149:68:173;;;5010:21:201;;;5047:18;;;5040:30;5106:34;5086:18;;;5079:62;5158:18;;1149:68:173;4826:356:201;1149:68:173;3123:21:::1;3129:7;3138:5;3123;:21::i;1601:135:11:-:0;1204:6;;:22;:6;;;;;678:10:4;1204:22:11;1196:67;;;;;;;5028:2:201;1196:67:11;;;5010:21:201;;;5047:18;;;5040:30;5106:34;5086:18;;;5079:62;5158:18;;1196:67:11;4826:356:201;1196:67:11;1687:6:::1;::::0;1666:40:::1;::::0;1703:1:::1;::::0;1687:6:::1;::::0;::::1;1666:40;1687:6;::::0;1666:40:::1;::::0;1703:1;;1666:40:::1;1712:6;:19:::0;;;::::1;::::0;;1601:135::o;2301:79:6:-;2340:13;2368:7;2361:14;;;;;:::i;2658:134:173:-;1121:10;;2732:4;;1121:10;;:18;;:10;:18;1117:107;;;1078:6:11;;1157:23:173;1078:6:11;;;;;678:10:4;1157:23:173;1149:68;;;;;;;5028:2:201;1149:68:173;;;5010:21:201;;;5047:18;;;5040:30;5106:34;5086:18;;;5079:62;5158:18;;1149:68:173;4826:356:201;1149:68:173;2744:26:::1;678:10:4::0;2764:5:173::1;2744;:26::i;:::-;-1:-1:-1::0;2783:4:173::1;1229:1;2658:134:::0;;;:::o;5993:316:6:-;6098:4;6110:177;678:10:4;6146:7:6;6161:120;6209:15;6161:120;;;;;;;;;;;;;;;;;678:10:4;6161:25:6;;;;:11;:25;;;;;;;;;:34;;;;;;;;;;;;:38;:120::i;3540:162::-;3626:4;3638:42;678:10:4;3662:9:6;3673:6;3638:9;:42::i;1760:729:173:-;1936:19;;;1928:45;;;;;;;5389:2:201;1928:45:173;;;5371:21:201;5428:2;5408:18;;;5401:30;5467:15;5447:18;;;5440:43;5500:18;;1928:45:173;5187:337:201;1928:45:173;2037:8;2018:15;:27;;2010:58;;;;;;;5731:2:201;2010:58:173;;;5713:21:201;5770:2;5750:18;;;5743:30;5809:20;5789:18;;;5782:48;5847:18;;2010:58:173;5529:342:201;2010:58:173;2102:14;;;;2074:25;2102:14;;;:7;:14;;;;;;;;;2202:16;;2238:79;;709:95;2238:79;;;6163:25:201;6265:18;;;6258:43;;;;6337:15;;;6317:18;;;6310:43;6369:18;;;6362:34;;;6412:19;;;6405:35;;;6456:19;;;;6449:35;;;2238:79:173;;;;;;;;;;6135:19:201;;;2238:79:173;;;2228:90;;;;;;;6765:66:201;2156:170:173;;;6753:79:201;6848:11;;;6841:27;;;;6884:12;;;6877:28;;;;2074:25:173;6921:12:201;;2156:170:173;;;;;;;;;;;;;2139:193;;2156:170;2139:193;;;;2355:26;;;;;;;;;7171:25:201;;;7244:4;7232:17;;7212:18;;;7205:45;;;;7266:18;;;7259:34;;;7309:18;;;7302:34;;;2139:193:173;-1:-1:-1;2355:26:173;;7143:19:201;;2355:26:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2346:35;;:5;:35;;;2338:65;;;;;;;7549:2:201;2338:65:173;;;7531:21:201;7588:2;7568:18;;;7561:30;7627:19;7607:18;;;7600:47;7664:18;;2338:65:173;7347:341:201;2338:65:173;2426:21;:17;2446:1;2426:21;:::i;:::-;2409:14;;;;;;;:7;:14;;;;;:38;2453:31;2417:5;2469:7;2478:5;2453:8;:31::i;:::-;1922:567;;1760:729;;;;;;;:::o;1875:226:11:-;1204:6;;:22;:6;;;;;678:10:4;1204:22:11;1196:67;;;;;;;5028:2:201;1196:67:11;;;5010:21:201;;;5047:18;;;5040:30;5106:34;5086:18;;;5079:62;5158:18;;1196:67:11;4826:356:201;1196:67:11;1959:22:::1;::::0;::::1;1951:73;;;::::0;::::1;::::0;;8182:2:201;1951:73:11::1;::::0;::::1;8164:21:201::0;8221:2;8201:18;;;8194:30;8260:34;8240:18;;;8233:62;8331:8;8311:18;;;8304:36;8357:19;;1951:73:11::1;7980:402:201::0;1951:73:11::1;2056:6;::::0;2035:38:::1;::::0;::::1;::::0;;::::1;::::0;2056:6:::1;::::0;::::1;;::::0;2035:38:::1;::::0;;;::::1;2079:6;:17:::0;;::::1;::::0;;::::1;;;::::0;;;::::1;::::0;;;::::1;::::0;;1875:226::o;8935:322:6:-;9032:19;;;9024:68;;;;;;;8589:2:201;9024:68:6;;;8571:21:201;8628:2;8608:18;;;8601:30;8667:34;8647:18;;;8640:62;8738:6;8718:18;;;8711:34;8762:19;;9024:68:6;8387:400:201;9024:68:6;9106:21;;;9098:68;;;;;;;8994:2:201;9098:68:6;;;8976:21:201;9033:2;9013:18;;;9006:30;9072:34;9052:18;;;9045:62;9143:4;9123:18;;;9116:32;9165:19;;9098:68:6;8792:398:201;9098:68:6;9173:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9220:32;;1573:25:201;;;9220:32:6;;1546:18:201;9220:32:6;;;;;;;;8935:322;;;:::o;6753:504::-;6854:20;;;6846:70;;;;;;;9397:2:201;6846:70:6;;;9379:21:201;9436:2;9416:18;;;9409:30;9475:34;9455:18;;;9448:62;9546:7;9526:18;;;9519:35;9571:19;;6846:70:6;9195:401:201;6846:70:6;6930:23;;;6922:71;;;;;;;9803:2:201;6922:71:6;;;9785:21:201;9842:2;9822:18;;;9815:30;9881:34;9861:18;;;9854:62;9952:5;9932:18;;;9925:33;9975:19;;6922:71:6;9601:399:201;6922:71:6;7074;7096:6;7074:71;;;;;;;;;;;;;;;;;:17;;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;7054:17;;;;:9;:17;;;;;;;;;;;:91;;;;7174:20;;;;;;;:32;;7199:6;7174:24;:32::i;:::-;7151:20;;;;:9;:20;;;;;;;;;;;;:55;;;;7217:35;1573:25:201;;;7151:20:6;;7217:35;;;;;;1546:18:201;7217:35:6;1427:177:201;1011:161:14;1140:5;;;1153:7;1135:16;;;;1127:34;;;;;;;;;;;;;:::i;:::-;;1011:161;;;;;:::o;410:129::-;516:5;;;511:16;;;;503:25;;;;;7507:348:6;7586:21;;;7578:65;;;;;;;10207:2:201;7578:65:6;;;10189:21:201;10246:2;10226:18;;;10219:30;10285:33;10265:18;;;10258:61;10336:18;;7578:65:6;10005:355:201;7578:65:6;7721:12;;:24;;7738:6;7721:16;:24::i;:::-;7706:12;:39;7772:18;;;:9;:18;;;;;;;;;;;:30;;7795:6;7772:22;:30::i;:::-;7751:18;;;:9;:18;;;;;;;;;;;:51;;;;7813:37;;1573:25:201;;;7751:18:6;;:9;;7813:37;;1546:18:201;7813:37:6;;;;;;;7507:348;;:::o;14:531:201:-;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;336:6;333:1;330:13;327:87;;;402:1;395:4;386:6;381:3;377:16;373:27;366:38;327:87;-1:-1:-1;459:2:201;447:15;464:66;443:88;434:98;;;;534:4;430:109;;14:531;-1:-1:-1;;14:531:201:o;550:220::-;699:2;688:9;681:21;662:4;719:45;760:2;749:9;745:18;737:6;719:45;:::i;:::-;711:53;550:220;-1:-1:-1;;;550:220:201:o;775:196::-;843:20;;903:42;892:54;;882:65;;872:93;;961:1;958;951:12;976:254;1044:6;1052;1105:2;1093:9;1084:7;1080:23;1076:32;1073:52;;;1121:1;1118;1111:12;1073:52;1144:29;1163:9;1144:29;:::i;:::-;1134:39;1220:2;1205:18;;;;1192:32;;-1:-1:-1;;;976:254:201:o;1609:273::-;1665:6;1718:2;1706:9;1697:7;1693:23;1689:32;1686:52;;;1734:1;1731;1724:12;1686:52;1773:9;1760:23;1826:5;1819:13;1812:21;1805:5;1802:32;1792:60;;1848:1;1845;1838:12;1887:328;1964:6;1972;1980;2033:2;2021:9;2012:7;2008:23;2004:32;2001:52;;;2049:1;2046;2039:12;2001:52;2072:29;2091:9;2072:29;:::i;:::-;2062:39;;2120:38;2154:2;2143:9;2139:18;2120:38;:::i;:::-;2110:48;;2205:2;2194:9;2190:18;2177:32;2167:42;;1887:328;;;;;:::o;2591:186::-;2650:6;2703:2;2691:9;2682:7;2678:23;2674:32;2671:52;;;2719:1;2716;2709:12;2671:52;2742:29;2761:9;2742:29;:::i;3236:180::-;3295:6;3348:2;3336:9;3327:7;3323:23;3319:32;3316:52;;;3364:1;3361;3354:12;3316:52;-1:-1:-1;3387:23:201;;3236:180;-1:-1:-1;3236:180:201:o;3421:693::-;3532:6;3540;3548;3556;3564;3572;3580;3633:3;3621:9;3612:7;3608:23;3604:33;3601:53;;;3650:1;3647;3640:12;3601:53;3673:29;3692:9;3673:29;:::i;:::-;3663:39;;3721:38;3755:2;3744:9;3740:18;3721:38;:::i;:::-;3711:48;;3806:2;3795:9;3791:18;3778:32;3768:42;;3857:2;3846:9;3842:18;3829:32;3819:42;;3911:3;3900:9;3896:19;3883:33;3956:4;3949:5;3945:16;3938:5;3935:27;3925:55;;3976:1;3973;3966:12;3925:55;3421:693;;;;-1:-1:-1;3421:693:201;;;;3999:5;4051:3;4036:19;;4023:33;;-1:-1:-1;4103:3:201;4088:19;;;4075:33;;3421:693;-1:-1:-1;;3421:693:201:o;4119:260::-;4187:6;4195;4248:2;4236:9;4227:7;4223:23;4219:32;4216:52;;;4264:1;4261;4254:12;4216:52;4287:29;4306:9;4287:29;:::i;:::-;4277:39;;4335:38;4369:2;4358:9;4354:18;4335:38;:::i;:::-;4325:48;;4119:260;;;;;:::o;4384:437::-;4463:1;4459:12;;;;4506;;;4527:61;;4581:4;4573:6;4569:17;4559:27;;4527:61;4634:2;4626:6;4623:14;4603:18;4600:38;4597:218;;;4671:77;4668:1;4661:88;4772:4;4769:1;4762:15;4800:4;4797:1;4790:15;4597:218;;4384:437;;;:::o;7693:282::-;7733:3;7764:1;7760:6;7757:1;7754:13;7751:193;;;7800:77;7797:1;7790:88;7901:4;7898:1;7891:15;7929:4;7926:1;7919:15;7751:193;-1:-1:-1;7960:9:201;;7693:282::o"},"gasEstimates":{"creation":{"codeDepositCost":"1152800","executionCost":"infinite","totalCost":"infinite"},"external":{"DOMAIN_SEPARATOR()":"2385","EIP712_REVISION()":"infinite","PERMIT_TYPEHASH()":"241","allowance(address,address)":"infinite","approve(address,uint256)":"24619","balanceOf(address)":"2562","decimals()":"2357","decreaseAllowance(address,uint256)":"infinite","increaseAllowance(address,uint256)":"infinite","isProtected()":"2393","mint(address,uint256)":"infinite","mint(uint256)":"infinite","name()":"infinite","nonces(address)":"2558","owner()":"2373","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"infinite","renounceOwnership()":"30216","setProtected(bool)":"26701","symbol()":"infinite","totalSupply()":"2327","transfer(address,uint256)":"infinite","transferFrom(address,address,uint256)":"infinite","transferOwnership(address)":"30449"}},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","EIP712_REVISION()":"78160376","PERMIT_TYPEHASH()":"30adf81f","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","decreaseAllowance(address,uint256)":"a457c2d7","increaseAllowance(address,uint256)":"39509351","isProtected()":"5300f82b","mint(address,uint256)":"40c10f19","mint(uint256)":"a0712d68","name()":"06fdde03","nonces(address)":"7ecebe00","owner()":"8da5cb5b","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","renounceOwnership()":"715018a6","setProtected(bool)":"1c02bc31","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EIP712_REVISION\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"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\":\"isProtected\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"mint\",\"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\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"state\",\"type\":\"bool\"}],\"name\":\"setProtected\",\"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\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"ERC20 minting logic\",\"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}.\"},\"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.\"},\"mint(address,uint256)\":{\"details\":\"Function to mint tokens to address\",\"params\":{\"account\":\"The account to mint tokens.\",\"value\":\"The amount of tokens to mint.\"},\"returns\":{\"_0\":\"A boolean that indicates if the operation was successful.\"}},\"mint(uint256)\":{\"details\":\"Function to mint tokens\",\"params\":{\"value\":\"The amount of tokens to mint.\"},\"returns\":{\"_0\":\"A boolean that indicates if the operation was successful.\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"implements the permit function as for https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\",\"params\":{\"deadline\":\"The deadline timestamp, type(uint256).max for max deadline\",\"owner\":\"The owner of the funds\",\"r\":\"Signature param\",\"s\":\"Signature param\",\"spender\":\"The spender\",\"v\":\"Signature param\",\"value\":\"The amount\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `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`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"TestnetERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Allow passing a signed message to approve spending\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/testnet-helpers/TestnetERC20.sol\":\"TestnetERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\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    assembly {\\n      size := extcodesize(account)\\n    }\\n    return size > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4ce20476966f73ba3c0aeb85b602b6ecc4e715f5bd9524d1c6286819282c76c5\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\nimport './IERC20.sol';\\nimport './SafeMath.sol';\\nimport './Address.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 Context, IERC20 {\\n  using SafeMath for uint256;\\n  using Address for address;\\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(_msgSender(), recipient, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev See {IERC20-allowance}.\\n   */\\n  function allowance(\\n    address owner,\\n    address spender\\n  ) 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(_msgSender(), 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   * - `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      _msgSender(),\\n      _allowances[sender][_msgSender()].sub(amount, 'ERC20: transfer amount 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(_msgSender(), spender, _allowances[_msgSender()][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(\\n    address spender,\\n    uint256 subtractedValue\\n  ) public virtual returns (bool) {\\n    _approve(\\n      _msgSender(),\\n      spender,\\n      _allowances[_msgSender()][spender].sub(\\n        subtractedValue,\\n        'ERC20: decreased allowance below zero'\\n      )\\n    );\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Moves tokens `amount` from `sender` to `recipient`.\\n   *\\n   * This is internal function is equivalent to {transfer}, and can be used to\\n   * e.g. implement automatic token fees, slashing mechanisms, etc.\\n   *\\n   * Emits a {Transfer} event.\\n   *\\n   * Requirements:\\n   *\\n   * - `sender` cannot be the zero address.\\n   * - `recipient` cannot be the zero address.\\n   * - `sender` must have a balance of at least `amount`.\\n   */\\n  function _transfer(address sender, address recipient, uint256 amount) internal virtual {\\n    require(sender != address(0), 'ERC20: transfer from the zero address');\\n    require(recipient != address(0), 'ERC20: transfer to the zero address');\\n\\n    _beforeTokenTransfer(sender, recipient, amount);\\n\\n    _balances[sender] = _balances[sender].sub(amount, 'ERC20: transfer amount 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    require(account != address(0), 'ERC20: mint to the zero address');\\n\\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), 'ERC20: burn from the zero address');\\n\\n    _beforeTokenTransfer(account, address(0), amount);\\n\\n    _balances[account] = _balances[account].sub(amount, 'ERC20: burn amount 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 is 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(address owner, address spender, uint256 amount) internal virtual {\\n    require(owner != address(0), 'ERC20: approve from the zero address');\\n    require(spender != address(0), 'ERC20: approve to the zero address');\\n\\n    _allowances[owner][spender] = amount;\\n    emit Approval(owner, spender, amount);\\n  }\\n\\n  /**\\n   * @dev 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(address from, address to, uint256 amount) internal virtual {}\\n}\\n\",\"keccak256\":\"0x84e6a151684cce31e66c850677f7e9455d694e050e409e5ded05fb5528c6c7e4\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable is Context {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial owner.\\n   */\\n  constructor() {\\n    address msgSender = _msgSender();\\n    _owner = msgSender;\\n    emit OwnershipTransferred(address(0), msgSender);\\n  }\\n\\n  /**\\n   * @dev Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Leaves the contract without owner. It will not be possible to call\\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\\n   *\\n   * NOTE: Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public virtual onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = address(0);\\n  }\\n\\n  /**\\n   * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function transferOwnership(address newOwner) public virtual onlyOwner {\\n    require(newOwner != address(0), 'Ownable: new owner is the zero address');\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\",\"keccak256\":\"0x3ce185c4f579e32006f8893dbfdc1b5d878c0e2cafd1508f7ceb081698bc81f9\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/// @title Optimized overflow and underflow safe math operations\\n/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost\\nlibrary SafeMath {\\n  /// @notice Returns x + y, reverts if sum overflows uint256\\n  /// @param x The augend\\n  /// @param y The addend\\n  /// @return z The sum of x and y\\n  function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x + y) >= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x);\\n    }\\n  }\\n\\n  /// @notice Returns x - y, reverts if underflows\\n  /// @param x The minuend\\n  /// @param y The subtrahend\\n  /// @param message The error msg\\n  /// @return z The difference of x and y\\n  function sub(uint256 x, uint256 y, string memory message) internal pure returns (uint256 z) {\\n    unchecked {\\n      require((z = x - y) <= x, message);\\n    }\\n  }\\n\\n  /// @notice Returns x * y, reverts if overflows\\n  /// @param x The multiplicand\\n  /// @param y The multiplier\\n  /// @return z The product of x and y\\n  function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    unchecked {\\n      require(x == 0 || (z = x * y) / x == y);\\n    }\\n  }\\n\\n  /// @notice Returns x / y, reverts if overflows - no specific check, solidity reverts on division by 0\\n  /// @param x The numerator\\n  /// @param y The denominator\\n  /// @return z The product of x and y\\n  function div(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n    return x / y;\\n  }\\n}\\n\",\"keccak256\":\"0xf1c5d8ba70a5fc3e20dbbc2aa2a2278d2535a57bc1e9abf1228ebc3068a045f0\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title IERC20WithPermit\\n * @author Aave\\n * @notice Interface for the permit function (EIP-2612)\\n */\\ninterface IERC20WithPermit is IERC20 {\\n  /**\\n   * @notice Allow passing a signed message to approve spending\\n   * @dev implements the permit function as for\\n   * https://github.com/ethereum/EIPs/blob/8a34d644aacf0f9f8f00815307fd7dd5da07655f/EIPS/eip-2612.md\\n   * @param owner The owner of the funds\\n   * @param spender The spender\\n   * @param value The amount\\n   * @param deadline The deadline timestamp, type(uint256).max for max deadline\\n   * @param v Signature param\\n   * @param s Signature param\\n   * @param r Signature param\\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\",\"keccak256\":\"0xfb041570f1804648f543be72cecc80ca9f65129232bacaa9247ebd11a7d9f83e\",\"license\":\"AGPL-3.0\"},\"contracts/mocks/testnet-helpers/TestnetERC20.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.0;\\n\\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\\nimport {ERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/ERC20.sol';\\nimport {IERC20WithPermit} from '@aave/core-v3/contracts/interfaces/IERC20WithPermit.sol';\\n\\n/**\\n * @title TestnetERC20\\n * @dev ERC20 minting logic\\n */\\ncontract TestnetERC20 is IERC20WithPermit, ERC20, Ownable {\\n  bytes public constant EIP712_REVISION = bytes('1');\\n  bytes32 internal constant EIP712_DOMAIN =\\n    keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)');\\n  bytes32 public constant PERMIT_TYPEHASH =\\n    keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)');\\n\\n  // Map of address nonces (address => nonce)\\n  mapping(address => uint256) internal _nonces;\\n\\n  bytes32 public DOMAIN_SEPARATOR;\\n\\n  bool internal _protected;\\n\\n  /**\\n   * @dev Function modifier, if _protected is enabled then msg.sender is required to be the owner\\n   */\\n  modifier onlyOwnerIfProtected() {\\n    if (_protected == true) {\\n      require(owner() == _msgSender(), 'Ownable: caller is not the owner');\\n    }\\n    _;\\n  }\\n\\n  constructor(\\n    string memory name,\\n    string memory symbol,\\n    uint8 decimals,\\n    address owner\\n  ) ERC20(name, symbol) {\\n    uint256 chainId = block.chainid;\\n\\n    DOMAIN_SEPARATOR = keccak256(\\n      abi.encode(\\n        EIP712_DOMAIN,\\n        keccak256(bytes(name)),\\n        keccak256(EIP712_REVISION),\\n        chainId,\\n        address(this)\\n      )\\n    );\\n    _setupDecimals(decimals);\\n    require(owner != address(0));\\n    transferOwnership(owner);\\n    _protected = true;\\n  }\\n\\n  /// @inheritdoc IERC20WithPermit\\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 override {\\n    require(owner != address(0), 'INVALID_OWNER');\\n    //solium-disable-next-line\\n    require(block.timestamp <= deadline, 'INVALID_EXPIRATION');\\n    uint256 currentValidNonce = _nonces[owner];\\n    bytes32 digest = keccak256(\\n      abi.encodePacked(\\n        '\\\\x19\\\\x01',\\n        DOMAIN_SEPARATOR,\\n        keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, currentValidNonce, deadline))\\n      )\\n    );\\n    require(owner == ecrecover(digest, v, r, s), 'INVALID_SIGNATURE');\\n    _nonces[owner] = currentValidNonce + 1;\\n    _approve(owner, spender, value);\\n  }\\n\\n  /**\\n   * @dev Function to mint tokens\\n   * @param value The amount of tokens to mint.\\n   * @return A boolean that indicates if the operation was successful.\\n   */\\n  function mint(uint256 value) public virtual onlyOwnerIfProtected returns (bool) {\\n    _mint(_msgSender(), value);\\n    return true;\\n  }\\n\\n  /**\\n   * @dev Function to mint tokens to address\\n   * @param account The account to mint tokens.\\n   * @param value The amount of tokens to mint.\\n   * @return A boolean that indicates if the operation was successful.\\n   */\\n  function mint(address account, uint256 value) public virtual onlyOwnerIfProtected returns (bool) {\\n    _mint(account, value);\\n    return true;\\n  }\\n\\n  function nonces(address owner) public view returns (uint256) {\\n    return _nonces[owner];\\n  }\\n\\n  function setProtected(bool state) public onlyOwner {\\n    _protected = state;\\n  }\\n\\n  function isProtected() public view returns (bool) {\\n    return _protected;\\n  }\\n}\\n\",\"keccak256\":\"0x77cf9848a42e5c8684ef832dae92f5095ab539a4cdbd58b2d60ca6586d26384e\",\"license\":\"BUSL-1.1\"}},\"version\":1}","storageLayout":{"storage":[{"astId":793,"contract":"contracts/mocks/testnet-helpers/TestnetERC20.sol:TestnetERC20","label":"_balances","offset":0,"slot":"0","type":"t_mapping(t_address,t_uint256)"},{"astId":799,"contract":"contracts/mocks/testnet-helpers/TestnetERC20.sol:TestnetERC20","label":"_allowances","offset":0,"slot":"1","type":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},{"astId":801,"contract":"contracts/mocks/testnet-helpers/TestnetERC20.sol:TestnetERC20","label":"_totalSupply","offset":0,"slot":"2","type":"t_uint256"},{"astId":803,"contract":"contracts/mocks/testnet-helpers/TestnetERC20.sol:TestnetERC20","label":"_name","offset":0,"slot":"3","type":"t_string_storage"},{"astId":805,"contract":"contracts/mocks/testnet-helpers/TestnetERC20.sol:TestnetERC20","label":"_symbol","offset":0,"slot":"4","type":"t_string_storage"},{"astId":807,"contract":"contracts/mocks/testnet-helpers/TestnetERC20.sol:TestnetERC20","label":"_decimals","offset":0,"slot":"5","type":"t_uint8"},{"astId":1472,"contract":"contracts/mocks/testnet-helpers/TestnetERC20.sol:TestnetERC20","label":"_owner","offset":1,"slot":"5","type":"t_address"},{"astId":35999,"contract":"contracts/mocks/testnet-helpers/TestnetERC20.sol:TestnetERC20","label":"_nonces","offset":0,"slot":"6","type":"t_mapping(t_address,t_uint256)"},{"astId":36001,"contract":"contracts/mocks/testnet-helpers/TestnetERC20.sol:TestnetERC20","label":"DOMAIN_SEPARATOR","offset":0,"slot":"7","type":"t_bytes32"},{"astId":36003,"contract":"contracts/mocks/testnet-helpers/TestnetERC20.sol:TestnetERC20","label":"_protected","offset":0,"slot":"8","type":"t_bool"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_string_storage":{"encoding":"bytes","label":"string","numberOfBytes":"32"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":{"notice":"Allow passing a signed message to approve spending"}},"version":1}}},"contracts/rewards/EmissionManager.sol":{"EmissionManager":{"abi":[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reward","type":"address"},{"indexed":true,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"EmissionAdminUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"components":[{"internalType":"uint88","name":"emissionPerSecond","type":"uint88"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint32","name":"distributionEnd","type":"uint32"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"},{"internalType":"contract ITransferStrategyBase","name":"transferStrategy","type":"address"},{"internalType":"contract IEACAggregatorProxy","name":"rewardOracle","type":"address"}],"internalType":"struct RewardsDataTypes.RewardsConfigInput[]","name":"config","type":"tuple[]"}],"name":"configureAssets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"}],"name":"getEmissionAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardsController","outputs":[{"internalType":"contract IRewardsController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"claimer","type":"address"}],"name":"setClaimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"},{"internalType":"uint32","name":"newDistributionEnd","type":"uint32"}],"name":"setDistributionEnd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"},{"internalType":"address","name":"admin","type":"address"}],"name":"setEmissionAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address[]","name":"rewards","type":"address[]"},{"internalType":"uint88[]","name":"newEmissionsPerSecond","type":"uint88[]"}],"name":"setEmissionPerSecond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"},{"internalType":"contract IEACAggregatorProxy","name":"rewardOracle","type":"address"}],"name":"setRewardOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"controller","type":"address"}],"name":"setRewardsController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"},{"internalType":"contract ITransferStrategyBase","name":"transferStrategy","type":"address"}],"name":"setTransferStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","kind":"dev","methods":{"configureAssets((uint88,uint256,uint32,address,address,address,address)[])":{"details":"Configure assets to incentivize with an emission of rewards per second until the end of distribution.Only callable by the emission admin of the given rewards","params":{"config":"The assets configuration input, the list of structs contains the following fields:   uint104 emissionPerSecond: The emission per second following rewards unit decimals.   uint256 totalSupply: The total supply of the asset to incentivize   uint40 distributionEnd: The end of the distribution of the incentives for an asset   address asset: The asset address to incentivize   address reward: The reward token address   ITransferStrategy transferStrategy: The TransferStrategy address with the install hook and claim logic.   IEACAggregatorProxy rewardOracle: The Price Oracle of a reward to visualize the incentives at the UI Frontend.                                     Must follow Chainlink Aggregator IEACAggregatorProxy interface to be compatible."}},"constructor":{"params":{"owner":"The address of the owner"}},"getEmissionAdmin(address)":{"details":"Returns the admin of the given reward emission","params":{"reward":"The address of the reward token"},"returns":{"_0":"The address of the emission admin"}},"getRewardsController()":{"details":"Returns the rewards controller address","returns":{"_0":"The address of the RewardsController contract"}},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"setClaimer(address,address)":{"details":"Whitelists an address to claim the rewards on behalf of another addressOnly callable by the owner of the EmissionManager","params":{"claimer":"The address of the claimer","user":"The address of the user"}},"setDistributionEnd(address,address,uint32)":{"details":"Sets the end date for the distributionOnly callable by the emission admin of the given reward","params":{"asset":"The asset to incentivize","newDistributionEnd":"The end date of the incentivization, in unix time format*","reward":"The reward token that incentives the asset"}},"setEmissionAdmin(address,address)":{"details":"Updates the admin of the reward emissionOnly callable by the owner of the EmissionManager","params":{"admin":"The address of the new admin of the emission","reward":"The address of the reward token"}},"setEmissionPerSecond(address,address[],uint88[])":{"details":"Sets the emission per second of a set of reward distributions","params":{"asset":"The asset is being incentivized","newEmissionsPerSecond":"List of new reward emissions per second","rewards":"List of reward addresses are being distributed"}},"setRewardOracle(address,address)":{"details":"Sets an Aave Oracle contract to enforce rewards with a source of value.Only callable by the emission admin of the given reward","params":{"reward":"The address of the reward to set the price aggregator","rewardOracle":"The address of price aggregator that follows IEACAggregatorProxy interface"}},"setRewardsController(address)":{"details":"Updates the address of the rewards controllerOnly callable by the owner of the EmissionManager","params":{"controller":"the address of the RewardsController contract"}},"setTransferStrategy(address,address)":{"details":"Sets a TransferStrategy logic contract that determines the logic of the rewards transferOnly callable by the emission admin of the given reward","params":{"reward":"The address of the reward token","transferStrategy":"The address of the TransferStrategy logic contract"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"title":"EmissionManager","version":1},"evm":{"bytecode":{"functionDebugData":{"@_1500":{"entryPoint":null,"id":1500,"parameterSlots":0,"returnSlots":0},"@_36304":{"entryPoint":null,"id":36304,"parameterSlots":1,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@transferOwnership_1572":{"entryPoint":118,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":391,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1074:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"95:209:201","statements":[{"body":{"nodeType":"YulBlock","src":"141:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"150:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"153:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"143:6:201"},"nodeType":"YulFunctionCall","src":"143:12:201"},"nodeType":"YulExpressionStatement","src":"143:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"116:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"125:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"112:3:201"},"nodeType":"YulFunctionCall","src":"112:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"137:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"108:3:201"},"nodeType":"YulFunctionCall","src":"108:32:201"},"nodeType":"YulIf","src":"105:52:201"},{"nodeType":"YulVariableDeclaration","src":"166:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"185:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"179:5:201"},"nodeType":"YulFunctionCall","src":"179:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"170:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"258:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"267:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"270:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"260:6:201"},"nodeType":"YulFunctionCall","src":"260:12:201"},"nodeType":"YulExpressionStatement","src":"260:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"217:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"228:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"243:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"248:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"239:3:201"},"nodeType":"YulFunctionCall","src":"239:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"252:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"235:3:201"},"nodeType":"YulFunctionCall","src":"235:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"224:3:201"},"nodeType":"YulFunctionCall","src":"224:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"214:2:201"},"nodeType":"YulFunctionCall","src":"214:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"207:6:201"},"nodeType":"YulFunctionCall","src":"207:50:201"},"nodeType":"YulIf","src":"204:70:201"},{"nodeType":"YulAssignment","src":"283:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"293:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"283:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"61:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"72:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"84:6:201","type":""}],"src":"14:290:201"},{"body":{"nodeType":"YulBlock","src":"483:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"500:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"511:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"493:6:201"},"nodeType":"YulFunctionCall","src":"493:21:201"},"nodeType":"YulExpressionStatement","src":"493:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"534:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"545:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"530:3:201"},"nodeType":"YulFunctionCall","src":"530:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"550:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"523:6:201"},"nodeType":"YulFunctionCall","src":"523:30:201"},"nodeType":"YulExpressionStatement","src":"523:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"573:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"584:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"569:3:201"},"nodeType":"YulFunctionCall","src":"569:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"589:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"562:6:201"},"nodeType":"YulFunctionCall","src":"562:62:201"},"nodeType":"YulExpressionStatement","src":"562:62:201"},{"nodeType":"YulAssignment","src":"633:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"645:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"656:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"641:3:201"},"nodeType":"YulFunctionCall","src":"641:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"633:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"460:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"474:4:201","type":""}],"src":"309:356:201"},{"body":{"nodeType":"YulBlock","src":"844:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"861:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"872:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"854:6:201"},"nodeType":"YulFunctionCall","src":"854:21:201"},"nodeType":"YulExpressionStatement","src":"854:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"895:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"906:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"891:3:201"},"nodeType":"YulFunctionCall","src":"891:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"911:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"884:6:201"},"nodeType":"YulFunctionCall","src":"884:30:201"},"nodeType":"YulExpressionStatement","src":"884:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"934:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"945:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"930:3:201"},"nodeType":"YulFunctionCall","src":"930:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"950:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"923:6:201"},"nodeType":"YulFunctionCall","src":"923:62:201"},"nodeType":"YulExpressionStatement","src":"923:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1005:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1016:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1001:3:201"},"nodeType":"YulFunctionCall","src":"1001:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"1021:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"994:6:201"},"nodeType":"YulFunctionCall","src":"994:36:201"},"nodeType":"YulExpressionStatement","src":"994:36:201"},{"nodeType":"YulAssignment","src":"1039:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1051:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1062:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1047:3:201"},"nodeType":"YulFunctionCall","src":"1047:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1039:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"821:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"835:4:201","type":""}],"src":"670:402:201"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60806040523480156200001157600080fd5b50604051620015ac380380620015ac833981016040819052620000349162000187565b600080546001600160a01b031916339081178255604051909182916000805160206200158c833981519152908290a3506200006f8162000076565b50620001b9565b6000546001600160a01b03163314620000d65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b0381166200013d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620000cd565b600080546040516001600160a01b03808516939216916000805160206200158c83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000602082840312156200019a57600080fd5b81516001600160a01b0381168114620001b257600080fd5b9392505050565b6113c380620001c96000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063bee36bb31161008c578063e15ac62311610066578063e15ac623146101eb578063f2fde38b146101fe578063f5cf673b14610211578063f996868b1461022457600080fd5b8063bee36bb3146101a7578063c5a7b538146101ba578063de262738146101cd57600080fd5b80638da5cb5b116100bd5780638da5cb5b14610163578063955c2ad714610181578063a286c6b41461019457600080fd5b8063529b1e87146100e45780635453ba1014610146578063715018a61461015b575b600080fd5b61011d6100f2366004610e27565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600160205260409020541690565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b610159610154366004610e4b565b610237565b005b610159610361565b60005473ffffffffffffffffffffffffffffffffffffffff1661011d565b61015961018f366004610f5a565b610451565b6101596101a2366004610e4b565b6105c8565b6101596101b5366004610e27565b6106d2565b6101596101c8366004611082565b61079a565b60025473ffffffffffffffffffffffffffffffffffffffff1661011d565b6101596101f9366004610e4b565b6108cb565b61015961020c366004610e27565b6109bd565b61015961021f366004610e4b565b610b6e565b610159610232366004611115565b610c80565b73ffffffffffffffffffffffffffffffffffffffff82811660009081526001602052604090205483911633146102ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f454d495353494f4e5f41444d494e0000000000000000000000000060448201526064015b60405180910390fd5b6002546040517f5453ba1000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152848116602483015290911690635453ba10906044015b600060405180830381600087803b15801561034457600080fd5b505af1158015610358573d6000803e3d6000fd5b50505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102c5565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005b815181101561053c573373ffffffffffffffffffffffffffffffffffffffff166001600084848151811061048a5761048a611198565b6020908102919091018101516080015173ffffffffffffffffffffffffffffffffffffffff90811683529082019290925260400160002054161461052a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f454d495353494f4e5f41444d494e0000000000000000000000000060448201526064016102c5565b80610534816111c7565b915050610454565b506002546040517f955c2ad700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063955c2ad790610593908490600401611227565b600060405180830381600087803b1580156105ad57600080fd5b505af11580156105c1573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102c5565b73ffffffffffffffffffffffffffffffffffffffff80831660008181526001602052604080822080548686167fffffffffffffffffffffffff0000000000000000000000000000000000000000821681179092559151919094169392849290917fda40ea421dd7e42cf8be71255facac4fdc12a3f70f4d5fd373cb16cec4cb53849190a4505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102c5565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff828116600090815260016020526040902054839116331461082c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f454d495353494f4e5f41444d494e0000000000000000000000000060448201526064016102c5565b6002546040517fc5a7b53800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152858116602483015263ffffffff851660448301529091169063c5a7b53890606401600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff828116600090815260016020526040902054839116331461095d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f454d495353494f4e5f41444d494e0000000000000000000000000060448201526064016102c5565b6002546040517fe15ac62300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063e15ac6239060440161032a565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102c5565b73ffffffffffffffffffffffffffffffffffffffff8116610ae1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102c5565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102c5565b6002546040517ff5cf673b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015283811660248301529091169063f5cf673b90604401600060405180830381600087803b158015610c6457600080fd5b505af1158015610c78573d6000803e3d6000fd5b505050505050565b60005b83811015610d5a573360016000878785818110610ca257610ca2611198565b9050602002016020810190610cb79190610e27565b73ffffffffffffffffffffffffffffffffffffffff90811682526020820192909252604001600020541614610d48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f454d495353494f4e5f41444d494e0000000000000000000000000060448201526064016102c5565b80610d52816111c7565b915050610c83565b506002546040517ff996868b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063f996868b90610db990889088908890889088906004016112dc565b600060405180830381600087803b158015610dd357600080fd5b505af1158015610de7573d6000803e3d6000fd5b505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610e1457600080fd5b50565b8035610e2281610df2565b919050565b600060208284031215610e3957600080fd5b8135610e4481610df2565b9392505050565b60008060408385031215610e5e57600080fd5b8235610e6981610df2565b91506020830135610e7981610df2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715610ed657610ed6610e84565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610f2357610f23610e84565b604052919050565b80356affffffffffffffffffffff81168114610e2257600080fd5b803563ffffffff81168114610e2257600080fd5b60006020808385031215610f6d57600080fd5b823567ffffffffffffffff80821115610f8557600080fd5b818501915085601f830112610f9957600080fd5b813581811115610fab57610fab610e84565b610fb9848260051b01610edc565b818152848101925060e0918202840185019188831115610fd857600080fd5b938501935b828510156110765780858a031215610ff55760008081fd5b610ffd610eb3565b61100686610f2b565b81528686013587820152604061101d818801610f46565b9082015260608681013561103081610df2565b908201526080611041878201610e17565b9082015260a0611052878201610e17565b9082015260c0611063878201610e17565b9082015284529384019392850192610fdd565b50979650505050505050565b60008060006060848603121561109757600080fd5b83356110a281610df2565b925060208401356110b281610df2565b91506110c060408501610f46565b90509250925092565b60008083601f8401126110db57600080fd5b50813567ffffffffffffffff8111156110f357600080fd5b6020830191508360208260051b850101111561110e57600080fd5b9250929050565b60008060008060006060868803121561112d57600080fd5b853561113881610df2565b9450602086013567ffffffffffffffff8082111561115557600080fd5b61116189838a016110c9565b9096509450604088013591508082111561117a57600080fd5b50611187888289016110c9565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611220577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b602080825282518282018190526000919060409081850190868401855b828110156112cf57815180516affffffffffffffffffffff16855286810151878601528581015163ffffffff168686015260608082015173ffffffffffffffffffffffffffffffffffffffff9081169187019190915260808083015182169087015260a08083015182169087015260c091820151169085015260e09093019290850190600101611244565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff868116825260606020808401829052908301869052600091879160808501845b8981101561133857843561132481610df2565b841682529382019390820190600101611311565b5085810360408701528681528101925086915060005b8681101561137e576affffffffffffffffffffff61136b84610f2b565b168452928101929181019160010161134e565b5091999850505050505050505056fea2646970667358221220df3b13dcf3fc72e7a4d02270ee5858223d502fd6c252a9f44be18766325b9da464736f6c634300080a00338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x15AC CODESIZE SUB DUP1 PUSH3 0x15AC DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x187 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 DUP3 SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x158C DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 DUP3 SWAP1 LOG3 POP PUSH3 0x6F DUP2 PUSH3 0x76 JUMP JUMPDEST POP PUSH3 0x1B9 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH3 0xD6 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x13D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0xCD JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x158C DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 LOG3 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 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x19A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x13C3 DUP1 PUSH3 0x1C9 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 0xDF JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xBEE36BB3 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xE15AC623 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xE15AC623 EQ PUSH2 0x1EB JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1FE JUMPI DUP1 PUSH4 0xF5CF673B EQ PUSH2 0x211 JUMPI DUP1 PUSH4 0xF996868B EQ PUSH2 0x224 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBEE36BB3 EQ PUSH2 0x1A7 JUMPI DUP1 PUSH4 0xC5A7B538 EQ PUSH2 0x1BA JUMPI DUP1 PUSH4 0xDE262738 EQ PUSH2 0x1CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xBD JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x163 JUMPI DUP1 PUSH4 0x955C2AD7 EQ PUSH2 0x181 JUMPI DUP1 PUSH4 0xA286C6B4 EQ PUSH2 0x194 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x529B1E87 EQ PUSH2 0xE4 JUMPI DUP1 PUSH4 0x5453BA10 EQ PUSH2 0x146 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x15B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x11D PUSH2 0xF2 CALLDATASIZE PUSH1 0x4 PUSH2 0xE27 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 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x159 PUSH2 0x154 CALLDATASIZE PUSH1 0x4 PUSH2 0xE4B JUMP JUMPDEST PUSH2 0x237 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x159 PUSH2 0x361 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x11D JUMP JUMPDEST PUSH2 0x159 PUSH2 0x18F CALLDATASIZE PUSH1 0x4 PUSH2 0xF5A JUMP JUMPDEST PUSH2 0x451 JUMP JUMPDEST PUSH2 0x159 PUSH2 0x1A2 CALLDATASIZE PUSH1 0x4 PUSH2 0xE4B JUMP JUMPDEST PUSH2 0x5C8 JUMP JUMPDEST PUSH2 0x159 PUSH2 0x1B5 CALLDATASIZE PUSH1 0x4 PUSH2 0xE27 JUMP JUMPDEST PUSH2 0x6D2 JUMP JUMPDEST PUSH2 0x159 PUSH2 0x1C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1082 JUMP JUMPDEST PUSH2 0x79A JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x11D JUMP JUMPDEST PUSH2 0x159 PUSH2 0x1F9 CALLDATASIZE PUSH1 0x4 PUSH2 0xE4B JUMP JUMPDEST PUSH2 0x8CB JUMP JUMPDEST PUSH2 0x159 PUSH2 0x20C CALLDATASIZE PUSH1 0x4 PUSH2 0xE27 JUMP JUMPDEST PUSH2 0x9BD JUMP JUMPDEST PUSH2 0x159 PUSH2 0x21F CALLDATASIZE PUSH1 0x4 PUSH2 0xE4B JUMP JUMPDEST PUSH2 0xB6E JUMP JUMPDEST PUSH2 0x159 PUSH2 0x232 CALLDATASIZE PUSH1 0x4 PUSH2 0x1115 JUMP JUMPDEST PUSH2 0xC80 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x2CE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F454D495353494F4E5F41444D494E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH32 0x5453BA1000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x5453BA10 SWAP1 PUSH1 0x44 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x344 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x358 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x3E2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C5 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x53C JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x48A JUMPI PUSH2 0x48A PUSH2 0x1198 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP4 MSTORE SWAP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD AND EQ PUSH2 0x52A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F454D495353494F4E5F41444D494E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C5 JUMP JUMPDEST DUP1 PUSH2 0x534 DUP2 PUSH2 0x11C7 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x454 JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH32 0x955C2AD700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x955C2AD7 SWAP1 PUSH2 0x593 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x1227 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x649 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP7 DUP7 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP5 AND SWAP4 SWAP3 DUP5 SWAP3 SWAP1 SWAP2 PUSH32 0xDA40EA421DD7E42CF8BE71255FACAC4FDC12A3F70F4D5FD373CB16CEC4CB5384 SWAP2 SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x753 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C5 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x82C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F454D495353494F4E5F41444D494E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C5 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC5A7B53800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xC5A7B538 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x8C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x95D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F454D495353494F4E5F41444D494E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C5 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH32 0xE15AC62300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xE15AC623 SWAP1 PUSH1 0x44 ADD PUSH2 0x32A JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xA3E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xAE1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2C5 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xBEF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C5 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF5CF673B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF5CF673B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC78 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD5A JUMPI CALLER PUSH1 0x1 PUSH1 0x0 DUP8 DUP8 DUP6 DUP2 DUP2 LT PUSH2 0xCA2 JUMPI PUSH2 0xCA2 PUSH2 0x1198 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xCB7 SWAP2 SWAP1 PUSH2 0xE27 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD AND EQ PUSH2 0xD48 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F454D495353494F4E5F41444D494E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C5 JUMP JUMPDEST DUP1 PUSH2 0xD52 DUP2 PUSH2 0x11C7 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xC83 JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF996868B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xF996868B SWAP1 PUSH2 0xDB9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x12DC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xDE7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xE14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xE22 DUP2 PUSH2 0xDF2 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xE44 DUP2 PUSH2 0xDF2 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xE5E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0xE69 DUP2 PUSH2 0xDF2 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0xE79 DUP2 PUSH2 0xDF2 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xE0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xED6 JUMPI PUSH2 0xED6 PUSH2 0xE84 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xF23 JUMPI PUSH2 0xF23 PUSH2 0xE84 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xE22 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xE22 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xF6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xF85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xF99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xFAB JUMPI PUSH2 0xFAB PUSH2 0xE84 JUMP JUMPDEST PUSH2 0xFB9 DUP5 DUP3 PUSH1 0x5 SHL ADD PUSH2 0xEDC JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 DUP2 ADD SWAP3 POP PUSH1 0xE0 SWAP2 DUP3 MUL DUP5 ADD DUP6 ADD SWAP2 DUP9 DUP4 GT ISZERO PUSH2 0xFD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP3 DUP6 LT ISZERO PUSH2 0x1076 JUMPI DUP1 DUP6 DUP11 SUB SLT ISZERO PUSH2 0xFF5 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0xFFD PUSH2 0xEB3 JUMP JUMPDEST PUSH2 0x1006 DUP7 PUSH2 0xF2B JUMP JUMPDEST DUP2 MSTORE DUP7 DUP7 ADD CALLDATALOAD DUP8 DUP3 ADD MSTORE PUSH1 0x40 PUSH2 0x101D DUP2 DUP9 ADD PUSH2 0xF46 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP7 DUP2 ADD CALLDATALOAD PUSH2 0x1030 DUP2 PUSH2 0xDF2 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH1 0x80 PUSH2 0x1041 DUP8 DUP3 ADD PUSH2 0xE17 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH1 0xA0 PUSH2 0x1052 DUP8 DUP3 ADD PUSH2 0xE17 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH1 0xC0 PUSH2 0x1063 DUP8 DUP3 ADD PUSH2 0xE17 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE DUP5 MSTORE SWAP4 DUP5 ADD SWAP4 SWAP3 DUP6 ADD SWAP3 PUSH2 0xFDD JUMP JUMPDEST POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1097 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x10A2 DUP2 PUSH2 0xDF2 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x10B2 DUP2 PUSH2 0xDF2 JUMP JUMPDEST SWAP2 POP PUSH2 0x10C0 PUSH1 0x40 DUP6 ADD PUSH2 0xF46 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x10DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x10F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x110E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x112D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x1138 DUP2 PUSH2 0xDF2 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1155 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1161 DUP10 DUP4 DUP11 ADD PUSH2 0x10C9 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x117A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1187 DUP9 DUP3 DUP10 ADD PUSH2 0x10C9 JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 POP SWAP3 SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x1220 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x40 SWAP1 DUP2 DUP6 ADD SWAP1 DUP7 DUP5 ADD DUP6 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x12CF JUMPI DUP2 MLOAD DUP1 MLOAD PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE DUP7 DUP2 ADD MLOAD DUP8 DUP7 ADD MSTORE DUP6 DUP2 ADD MLOAD PUSH4 0xFFFFFFFF AND DUP7 DUP7 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP1 DUP4 ADD MLOAD DUP3 AND SWAP1 DUP8 ADD MSTORE PUSH1 0xA0 DUP1 DUP4 ADD MLOAD DUP3 AND SWAP1 DUP8 ADD MSTORE PUSH1 0xC0 SWAP2 DUP3 ADD MLOAD AND SWAP1 DUP6 ADD MSTORE PUSH1 0xE0 SWAP1 SWAP4 ADD SWAP3 SWAP1 DUP6 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1244 JUMP JUMPDEST POP SWAP2 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND DUP3 MSTORE PUSH1 0x60 PUSH1 0x20 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE SWAP1 DUP4 ADD DUP7 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP8 SWAP2 PUSH1 0x80 DUP6 ADD DUP5 JUMPDEST DUP10 DUP2 LT ISZERO PUSH2 0x1338 JUMPI DUP5 CALLDATALOAD PUSH2 0x1324 DUP2 PUSH2 0xDF2 JUMP JUMPDEST DUP5 AND DUP3 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1311 JUMP JUMPDEST POP DUP6 DUP2 SUB PUSH1 0x40 DUP8 ADD MSTORE DUP7 DUP2 MSTORE DUP2 ADD SWAP3 POP DUP7 SWAP2 POP PUSH1 0x0 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x137E JUMPI PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x136B DUP5 PUSH2 0xF2B JUMP JUMPDEST AND DUP5 MSTORE SWAP3 DUP2 ADD SWAP3 SWAP2 DUP2 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x134E JUMP JUMPDEST POP SWAP2 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDF EXTCODESIZE SGT 0xDC RETURN 0xFC PUSH19 0xE7A4D02270EE5858223D502FD6C252A9F44BE1 DUP8 PUSH7 0x325B9DA464736F PUSH13 0x634300080A00338BE0079C5316 MSIZE EQ SGT DIFFICULTY 0xCD 0x1F 0xD0 LOG4 CALLCODE DUP5 NOT 0x49 PUSH32 0x9722A3DAAFE3B4186F6B6457E000000000000000000000000000000000000000 ","sourceMap":"689:3022:174:-:0;;;1198:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;835:17:11;873:18;;-1:-1:-1;;;;;;873:18:11;678:10:4;873:18:11;;;;;902:43;;678:10:4;;;;-1:-1:-1;;;;;;;;;;;902:43:11;835:17;;902:43;-1:-1:-1;1231:24:174;1249:5;1231:17;:24::i;:::-;1198:62;689:3022;;1875:226:11;1204:6;;-1:-1:-1;;;;;1204:6:11;678:10:4;1204:22:11;1196:67;;;;-1:-1:-1;;;1196:67:11;;511:2:201;1196:67:11;;;493:21:201;;;530:18;;;523:30;589:34;569:18;;;562:62;641:18;;1196:67:11;;;;;;;;;-1:-1:-1;;;;;1959:22:11;::::1;1951:73;;;::::0;-1:-1:-1;;;1951:73:11;;872:2:201;1951:73:11::1;::::0;::::1;854:21:201::0;911:2;891:18;;;884:30;950:34;930:18;;;923:62;-1:-1:-1;;;1001:18:201;;;994:36;1047:19;;1951:73:11::1;670:402:201::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;-1:-1:-1;;;;;2035:38:11;;::::1;::::0;2056:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;2035:38:11;::::1;2079:6;:17:::0;;-1:-1:-1;;;;;;2079:17:11::1;-1:-1:-1::0;;;;;2079:17:11;;;::::1;::::0;;;::::1;::::0;;1875:226::o;14:290:201:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:201;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:201:o;670:402::-;689:3022:174;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@configureAssets_36346":{"entryPoint":1105,"id":36346,"parameterSlots":1,"returnSlots":0},"@getEmissionAdmin_36548":{"entryPoint":null,"id":36548,"parameterSlots":1,"returnSlots":1},"@getRewardsController_36534":{"entryPoint":null,"id":36534,"parameterSlots":0,"returnSlots":1},"@owner_1509":{"entryPoint":null,"id":1509,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_1544":{"entryPoint":865,"id":1544,"parameterSlots":0,"returnSlots":0},"@setClaimer_36477":{"entryPoint":2926,"id":36477,"parameterSlots":2,"returnSlots":0},"@setDistributionEnd_36411":{"entryPoint":1946,"id":36411,"parameterSlots":3,"returnSlots":0},"@setEmissionAdmin_36507":{"entryPoint":1480,"id":36507,"parameterSlots":2,"returnSlots":0},"@setEmissionPerSecond_36458":{"entryPoint":3200,"id":36458,"parameterSlots":5,"returnSlots":0},"@setRewardOracle_36388":{"entryPoint":567,"id":36388,"parameterSlots":2,"returnSlots":0},"@setRewardsController_36523":{"entryPoint":1746,"id":36523,"parameterSlots":1,"returnSlots":0},"@setTransferStrategy_36367":{"entryPoint":2251,"id":36367,"parameterSlots":2,"returnSlots":0},"@transferOwnership_1572":{"entryPoint":2493,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_address":{"entryPoint":3607,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_address_dyn_calldata":{"entryPoint":4297,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":3623,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_uint32":{"entryPoint":4226,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint88_$dyn_calldata_ptr":{"entryPoint":4373,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_addresst_contract$_IEACAggregatorProxy_$34482":{"entryPoint":3659,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_contract$_ITransferStrategyBase_$39643":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr":{"entryPoint":3930,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint32":{"entryPoint":3910,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint88":{"entryPoint":3883,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_contract_IRewardsController":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint32__to_t_address_t_address_t_uint32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_array$_t_address_$dyn_calldata_ptr_t_array$_t_uint88_$dyn_calldata_ptr__to_t_address_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint88_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":4828,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_address_t_contract$_IEACAggregatorProxy_$34482__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_contract$_ITransferStrategyBase_$39643__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":4647,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IRewardsController_$39352__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_edefeee258d69843a88425ffde63c214e5c5d0658734a7483784d9fda45195be__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory":{"entryPoint":3804,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_2251":{"entryPoint":3763,"id":null,"parameterSlots":0,"returnSlots":1},"increment_t_uint256":{"entryPoint":4551,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x32":{"entryPoint":4504,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":3716,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":3570,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:13101:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"59:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"146:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"155:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"158:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"148:6:201"},"nodeType":"YulFunctionCall","src":"148:12:201"},"nodeType":"YulExpressionStatement","src":"148:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"82:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"93:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"100:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"89:3:201"},"nodeType":"YulFunctionCall","src":"89:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"79:2:201"},"nodeType":"YulFunctionCall","src":"79:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"72:6:201"},"nodeType":"YulFunctionCall","src":"72:73:201"},"nodeType":"YulIf","src":"69:93:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"48:5:201","type":""}],"src":"14:154:201"},{"body":{"nodeType":"YulBlock","src":"222:85:201","statements":[{"nodeType":"YulAssignment","src":"232:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"254:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"241:12:201"},"nodeType":"YulFunctionCall","src":"241:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"232:5:201"}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"295:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"270:24:201"},"nodeType":"YulFunctionCall","src":"270:31:201"},"nodeType":"YulExpressionStatement","src":"270:31:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"201:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"212:5:201","type":""}],"src":"173:134:201"},{"body":{"nodeType":"YulBlock","src":"382:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"428:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"437:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"440:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"430:6:201"},"nodeType":"YulFunctionCall","src":"430:12:201"},"nodeType":"YulExpressionStatement","src":"430:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"403:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"412:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"399:3:201"},"nodeType":"YulFunctionCall","src":"399:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"424:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"395:3:201"},"nodeType":"YulFunctionCall","src":"395:32:201"},"nodeType":"YulIf","src":"392:52:201"},{"nodeType":"YulVariableDeclaration","src":"453:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"479:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"466:12:201"},"nodeType":"YulFunctionCall","src":"466:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"457:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"523:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"498:24:201"},"nodeType":"YulFunctionCall","src":"498:31:201"},"nodeType":"YulExpressionStatement","src":"498:31:201"},{"nodeType":"YulAssignment","src":"538:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"548:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"538:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"348:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"359:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"371:6:201","type":""}],"src":"312:247:201"},{"body":{"nodeType":"YulBlock","src":"665:125:201","statements":[{"nodeType":"YulAssignment","src":"675:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"687:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"698:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"683:3:201"},"nodeType":"YulFunctionCall","src":"683:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"675:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"717:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"732:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"740:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"728:3:201"},"nodeType":"YulFunctionCall","src":"728:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"710:6:201"},"nodeType":"YulFunctionCall","src":"710:74:201"},"nodeType":"YulExpressionStatement","src":"710:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"634:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"645:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"656:4:201","type":""}],"src":"564:226:201"},{"body":{"nodeType":"YulBlock","src":"911:301:201","statements":[{"body":{"nodeType":"YulBlock","src":"957:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"966:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"969:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"959:6:201"},"nodeType":"YulFunctionCall","src":"959:12:201"},"nodeType":"YulExpressionStatement","src":"959:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"932:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"941:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"928:3:201"},"nodeType":"YulFunctionCall","src":"928:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"953:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"924:3:201"},"nodeType":"YulFunctionCall","src":"924:32:201"},"nodeType":"YulIf","src":"921:52:201"},{"nodeType":"YulVariableDeclaration","src":"982:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1008:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"995:12:201"},"nodeType":"YulFunctionCall","src":"995:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"986:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1052:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1027:24:201"},"nodeType":"YulFunctionCall","src":"1027:31:201"},"nodeType":"YulExpressionStatement","src":"1027:31:201"},{"nodeType":"YulAssignment","src":"1067:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1077:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1067:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1091:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1123:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1134:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1119:3:201"},"nodeType":"YulFunctionCall","src":"1119:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1106:12:201"},"nodeType":"YulFunctionCall","src":"1106:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"1095:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1172:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1147:24:201"},"nodeType":"YulFunctionCall","src":"1147:33:201"},"nodeType":"YulExpressionStatement","src":"1147:33:201"},{"nodeType":"YulAssignment","src":"1189:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"1199:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1189:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_contract$_IEACAggregatorProxy_$34482","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"869:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"880:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"892:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"900:6:201","type":""}],"src":"795:417:201"},{"body":{"nodeType":"YulBlock","src":"1249:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1266:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1269:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1259:6:201"},"nodeType":"YulFunctionCall","src":"1259:88:201"},"nodeType":"YulExpressionStatement","src":"1259:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1363:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"1366:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1356:6:201"},"nodeType":"YulFunctionCall","src":"1356:15:201"},"nodeType":"YulExpressionStatement","src":"1356:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1387:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1390:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1380:6:201"},"nodeType":"YulFunctionCall","src":"1380:15:201"},"nodeType":"YulExpressionStatement","src":"1380:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"1217:184:201"},{"body":{"nodeType":"YulBlock","src":"1452:207:201","statements":[{"nodeType":"YulAssignment","src":"1462:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1478:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1472:5:201"},"nodeType":"YulFunctionCall","src":"1472:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1462:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1490:35:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1512:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1520:4:201","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1508:3:201"},"nodeType":"YulFunctionCall","src":"1508:17:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1494:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1600:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1602:16:201"},"nodeType":"YulFunctionCall","src":"1602:18:201"},"nodeType":"YulExpressionStatement","src":"1602:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1543:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"1555:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1540:2:201"},"nodeType":"YulFunctionCall","src":"1540:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1579:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1591:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1576:2:201"},"nodeType":"YulFunctionCall","src":"1576:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1537:2:201"},"nodeType":"YulFunctionCall","src":"1537:62:201"},"nodeType":"YulIf","src":"1534:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1638:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1642:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1631:6:201"},"nodeType":"YulFunctionCall","src":"1631:22:201"},"nodeType":"YulExpressionStatement","src":"1631:22:201"}]},"name":"allocate_memory_2251","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1441:6:201","type":""}],"src":"1406:253:201"},{"body":{"nodeType":"YulBlock","src":"1709:289:201","statements":[{"nodeType":"YulAssignment","src":"1719:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1735:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1729:5:201"},"nodeType":"YulFunctionCall","src":"1729:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1719:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1747:117:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"1769:6:201"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"1785:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"1791:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1781:3:201"},"nodeType":"YulFunctionCall","src":"1781:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"1796:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1777:3:201"},"nodeType":"YulFunctionCall","src":"1777:86:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1765:3:201"},"nodeType":"YulFunctionCall","src":"1765:99:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"1751:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1939:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"1941:16:201"},"nodeType":"YulFunctionCall","src":"1941:18:201"},"nodeType":"YulExpressionStatement","src":"1941:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1882:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"1894:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1879:2:201"},"nodeType":"YulFunctionCall","src":"1879:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1918:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"1930:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1915:2:201"},"nodeType":"YulFunctionCall","src":"1915:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1876:2:201"},"nodeType":"YulFunctionCall","src":"1876:62:201"},"nodeType":"YulIf","src":"1873:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1977:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"1981:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1970:6:201"},"nodeType":"YulFunctionCall","src":"1970:22:201"},"nodeType":"YulExpressionStatement","src":"1970:22:201"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"1689:4:201","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"1698:6:201","type":""}],"src":"1664:334:201"},{"body":{"nodeType":"YulBlock","src":"2051:129:201","statements":[{"nodeType":"YulAssignment","src":"2061:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2083:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2070:12:201"},"nodeType":"YulFunctionCall","src":"2070:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"2061:5:201"}]},{"body":{"nodeType":"YulBlock","src":"2158:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2167:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2170:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2160:6:201"},"nodeType":"YulFunctionCall","src":"2160:12:201"},"nodeType":"YulExpressionStatement","src":"2160:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2112:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2123:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2130:24:201","type":"","value":"0xffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2119:3:201"},"nodeType":"YulFunctionCall","src":"2119:36:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2109:2:201"},"nodeType":"YulFunctionCall","src":"2109:47:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2102:6:201"},"nodeType":"YulFunctionCall","src":"2102:55:201"},"nodeType":"YulIf","src":"2099:75:201"}]},"name":"abi_decode_uint88","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2030:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"2041:5:201","type":""}],"src":"2003:177:201"},{"body":{"nodeType":"YulBlock","src":"2233:115:201","statements":[{"nodeType":"YulAssignment","src":"2243:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2265:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2252:12:201"},"nodeType":"YulFunctionCall","src":"2252:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"2243:5:201"}]},{"body":{"nodeType":"YulBlock","src":"2326:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2335:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2338:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2328:6:201"},"nodeType":"YulFunctionCall","src":"2328:12:201"},"nodeType":"YulExpressionStatement","src":"2328:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2294:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2305:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"2312:10:201","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2301:3:201"},"nodeType":"YulFunctionCall","src":"2301:22:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2291:2:201"},"nodeType":"YulFunctionCall","src":"2291:33:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2284:6:201"},"nodeType":"YulFunctionCall","src":"2284:41:201"},"nodeType":"YulIf","src":"2281:61:201"}]},"name":"abi_decode_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"2212:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"2223:5:201","type":""}],"src":"2185:163:201"},{"body":{"nodeType":"YulBlock","src":"2485:1693:201","statements":[{"nodeType":"YulVariableDeclaration","src":"2495:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2505:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2499:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2552:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2561:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2564:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2554:6:201"},"nodeType":"YulFunctionCall","src":"2554:12:201"},"nodeType":"YulExpressionStatement","src":"2554:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2527:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2536:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2523:3:201"},"nodeType":"YulFunctionCall","src":"2523:23:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2548:2:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2519:3:201"},"nodeType":"YulFunctionCall","src":"2519:32:201"},"nodeType":"YulIf","src":"2516:52:201"},{"nodeType":"YulVariableDeclaration","src":"2577:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2604:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2591:12:201"},"nodeType":"YulFunctionCall","src":"2591:23:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2581:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2623:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"2633:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"2627:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2678:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2687:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2690:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2680:6:201"},"nodeType":"YulFunctionCall","src":"2680:12:201"},"nodeType":"YulExpressionStatement","src":"2680:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2666:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2674:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2663:2:201"},"nodeType":"YulFunctionCall","src":"2663:14:201"},"nodeType":"YulIf","src":"2660:34:201"},{"nodeType":"YulVariableDeclaration","src":"2703:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2717:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"2728:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2713:3:201"},"nodeType":"YulFunctionCall","src":"2713:22:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"2707:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2783:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2792:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2795:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2785:6:201"},"nodeType":"YulFunctionCall","src":"2785:12:201"},"nodeType":"YulExpressionStatement","src":"2785:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2762:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"2766:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2758:3:201"},"nodeType":"YulFunctionCall","src":"2758:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2773:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2754:3:201"},"nodeType":"YulFunctionCall","src":"2754:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2747:6:201"},"nodeType":"YulFunctionCall","src":"2747:35:201"},"nodeType":"YulIf","src":"2744:55:201"},{"nodeType":"YulVariableDeclaration","src":"2808:26:201","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"2831:2:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2818:12:201"},"nodeType":"YulFunctionCall","src":"2818:16:201"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"2812:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2857:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"2859:16:201"},"nodeType":"YulFunctionCall","src":"2859:18:201"},"nodeType":"YulExpressionStatement","src":"2859:18:201"}]},"condition":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"2849:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"2853:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2846:2:201"},"nodeType":"YulFunctionCall","src":"2846:10:201"},"nodeType":"YulIf","src":"2843:36:201"},{"nodeType":"YulVariableDeclaration","src":"2888:47:201","value":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2923:1:201","type":"","value":"5"},{"name":"_4","nodeType":"YulIdentifier","src":"2926:2:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2919:3:201"},"nodeType":"YulFunctionCall","src":"2919:10:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2931:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2915:3:201"},"nodeType":"YulFunctionCall","src":"2915:19:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"2899:15:201"},"nodeType":"YulFunctionCall","src":"2899:36:201"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"2892:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"2944:16:201","value":{"name":"dst","nodeType":"YulIdentifier","src":"2957:3:201"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"2948:5:201","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"2976:3:201"},{"name":"_4","nodeType":"YulIdentifier","src":"2981:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2969:6:201"},"nodeType":"YulFunctionCall","src":"2969:15:201"},"nodeType":"YulExpressionStatement","src":"2969:15:201"},{"nodeType":"YulAssignment","src":"2993:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"3004:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3009:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3000:3:201"},"nodeType":"YulFunctionCall","src":"3000:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"2993:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"3021:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3031:4:201","type":"","value":"0xe0"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"3025:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3044:43:201","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3066:2:201"},{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"3074:2:201"},{"name":"_5","nodeType":"YulIdentifier","src":"3078:2:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"3070:3:201"},"nodeType":"YulFunctionCall","src":"3070:11:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3062:3:201"},"nodeType":"YulFunctionCall","src":"3062:20:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3084:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3058:3:201"},"nodeType":"YulFunctionCall","src":"3058:29:201"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"3048:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3119:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3128:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3131:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3121:6:201"},"nodeType":"YulFunctionCall","src":"3121:12:201"},"nodeType":"YulExpressionStatement","src":"3121:12:201"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"3102:6:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3110:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3099:2:201"},"nodeType":"YulFunctionCall","src":"3099:19:201"},"nodeType":"YulIf","src":"3096:39:201"},{"nodeType":"YulVariableDeclaration","src":"3144:22:201","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"3159:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3163:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3155:3:201"},"nodeType":"YulFunctionCall","src":"3155:11:201"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"3148:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3231:917:201","statements":[{"body":{"nodeType":"YulBlock","src":"3287:74:201","statements":[{"nodeType":"YulVariableDeclaration","src":"3305:11:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3315:1:201","type":"","value":"0"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"3309:2:201","type":""}]},{"expression":{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"3340:2:201"},{"name":"_6","nodeType":"YulIdentifier","src":"3344:2:201"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3333:6:201"},"nodeType":"YulFunctionCall","src":"3333:14:201"},"nodeType":"YulExpressionStatement","src":"3333:14:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3256:7:201"},{"name":"src","nodeType":"YulIdentifier","src":"3265:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3252:3:201"},"nodeType":"YulFunctionCall","src":"3252:17:201"},{"name":"_5","nodeType":"YulIdentifier","src":"3271:2:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3248:3:201"},"nodeType":"YulFunctionCall","src":"3248:26:201"},"nodeType":"YulIf","src":"3245:116:201"},{"nodeType":"YulVariableDeclaration","src":"3374:35:201","value":{"arguments":[],"functionName":{"name":"allocate_memory_2251","nodeType":"YulIdentifier","src":"3387:20:201"},"nodeType":"YulFunctionCall","src":"3387:22:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3378:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3429:5:201"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3454:3:201"}],"functionName":{"name":"abi_decode_uint88","nodeType":"YulIdentifier","src":"3436:17:201"},"nodeType":"YulFunctionCall","src":"3436:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3422:6:201"},"nodeType":"YulFunctionCall","src":"3422:37:201"},"nodeType":"YulExpressionStatement","src":"3422:37:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3483:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3490:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3479:3:201"},"nodeType":"YulFunctionCall","src":"3479:14:201"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3512:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"3517:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3508:3:201"},"nodeType":"YulFunctionCall","src":"3508:12:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3495:12:201"},"nodeType":"YulFunctionCall","src":"3495:26:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3472:6:201"},"nodeType":"YulFunctionCall","src":"3472:50:201"},"nodeType":"YulExpressionStatement","src":"3472:50:201"},{"nodeType":"YulVariableDeclaration","src":"3535:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3545:2:201","type":"","value":"64"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"3539:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3571:5:201"},{"name":"_7","nodeType":"YulIdentifier","src":"3578:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3567:3:201"},"nodeType":"YulFunctionCall","src":"3567:14:201"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3605:3:201"},{"name":"_7","nodeType":"YulIdentifier","src":"3610:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3601:3:201"},"nodeType":"YulFunctionCall","src":"3601:12:201"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"3583:17:201"},"nodeType":"YulFunctionCall","src":"3583:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3560:6:201"},"nodeType":"YulFunctionCall","src":"3560:55:201"},"nodeType":"YulExpressionStatement","src":"3560:55:201"},{"nodeType":"YulVariableDeclaration","src":"3628:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3638:2:201","type":"","value":"96"},"variables":[{"name":"_8","nodeType":"YulTypedName","src":"3632:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"3653:41:201","value":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3685:3:201"},{"name":"_8","nodeType":"YulIdentifier","src":"3690:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3681:3:201"},"nodeType":"YulFunctionCall","src":"3681:12:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3668:12:201"},"nodeType":"YulFunctionCall","src":"3668:26:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"3657:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3732:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3707:24:201"},"nodeType":"YulFunctionCall","src":"3707:33:201"},"nodeType":"YulExpressionStatement","src":"3707:33:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3764:5:201"},{"name":"_8","nodeType":"YulIdentifier","src":"3771:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3760:3:201"},"nodeType":"YulFunctionCall","src":"3760:14:201"},{"name":"value_1","nodeType":"YulIdentifier","src":"3776:7:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3753:6:201"},"nodeType":"YulFunctionCall","src":"3753:31:201"},"nodeType":"YulExpressionStatement","src":"3753:31:201"},{"nodeType":"YulVariableDeclaration","src":"3797:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3807:3:201","type":"","value":"128"},"variables":[{"name":"_9","nodeType":"YulTypedName","src":"3801:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3834:5:201"},{"name":"_9","nodeType":"YulIdentifier","src":"3841:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3830:3:201"},"nodeType":"YulFunctionCall","src":"3830:14:201"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3869:3:201"},{"name":"_9","nodeType":"YulIdentifier","src":"3874:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3865:3:201"},"nodeType":"YulFunctionCall","src":"3865:12:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3846:18:201"},"nodeType":"YulFunctionCall","src":"3846:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3823:6:201"},"nodeType":"YulFunctionCall","src":"3823:56:201"},"nodeType":"YulExpressionStatement","src":"3823:56:201"},{"nodeType":"YulVariableDeclaration","src":"3892:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"3903:3:201","type":"","value":"160"},"variables":[{"name":"_10","nodeType":"YulTypedName","src":"3896:3:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3930:5:201"},{"name":"_10","nodeType":"YulIdentifier","src":"3937:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3926:3:201"},"nodeType":"YulFunctionCall","src":"3926:15:201"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3966:3:201"},{"name":"_10","nodeType":"YulIdentifier","src":"3971:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3962:3:201"},"nodeType":"YulFunctionCall","src":"3962:13:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3943:18:201"},"nodeType":"YulFunctionCall","src":"3943:33:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3919:6:201"},"nodeType":"YulFunctionCall","src":"3919:58:201"},"nodeType":"YulExpressionStatement","src":"3919:58:201"},{"nodeType":"YulVariableDeclaration","src":"3990:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"4001:3:201","type":"","value":"192"},"variables":[{"name":"_11","nodeType":"YulTypedName","src":"3994:3:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4028:5:201"},{"name":"_11","nodeType":"YulIdentifier","src":"4035:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4024:3:201"},"nodeType":"YulFunctionCall","src":"4024:15:201"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"4064:3:201"},{"name":"_11","nodeType":"YulIdentifier","src":"4069:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4060:3:201"},"nodeType":"YulFunctionCall","src":"4060:13:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"4041:18:201"},"nodeType":"YulFunctionCall","src":"4041:33:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4017:6:201"},"nodeType":"YulFunctionCall","src":"4017:58:201"},"nodeType":"YulExpressionStatement","src":"4017:58:201"},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4095:3:201"},{"name":"value","nodeType":"YulIdentifier","src":"4100:5:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4088:6:201"},"nodeType":"YulFunctionCall","src":"4088:18:201"},"nodeType":"YulExpressionStatement","src":"4088:18:201"},{"nodeType":"YulAssignment","src":"4119:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"4130:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4135:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4126:3:201"},"nodeType":"YulFunctionCall","src":"4126:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"4119:3:201"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3186:3:201"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"3191:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"3183:2:201"},"nodeType":"YulFunctionCall","src":"3183:15:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"3199:23:201","statements":[{"nodeType":"YulAssignment","src":"3201:19:201","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"3212:3:201"},{"name":"_5","nodeType":"YulIdentifier","src":"3217:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3208:3:201"},"nodeType":"YulFunctionCall","src":"3208:12:201"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"3201:3:201"}]}]},"pre":{"nodeType":"YulBlock","src":"3179:3:201","statements":[]},"src":"3175:973:201"},{"nodeType":"YulAssignment","src":"4157:15:201","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"4167:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4157:6:201"}]}]},"name":"abi_decode_tuple_t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2451:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2462:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2474:6:201","type":""}],"src":"2353:1825:201"},{"body":{"nodeType":"YulBlock","src":"4270:301:201","statements":[{"body":{"nodeType":"YulBlock","src":"4316:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4325:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4328:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4318:6:201"},"nodeType":"YulFunctionCall","src":"4318:12:201"},"nodeType":"YulExpressionStatement","src":"4318:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4291:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4300:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4287:3:201"},"nodeType":"YulFunctionCall","src":"4287:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4312:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4283:3:201"},"nodeType":"YulFunctionCall","src":"4283:32:201"},"nodeType":"YulIf","src":"4280:52:201"},{"nodeType":"YulVariableDeclaration","src":"4341:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4367:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4354:12:201"},"nodeType":"YulFunctionCall","src":"4354:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4345:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4411:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4386:24:201"},"nodeType":"YulFunctionCall","src":"4386:31:201"},"nodeType":"YulExpressionStatement","src":"4386:31:201"},{"nodeType":"YulAssignment","src":"4426:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"4436:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4426:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"4450:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4482:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4493:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4478:3:201"},"nodeType":"YulFunctionCall","src":"4478:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4465:12:201"},"nodeType":"YulFunctionCall","src":"4465:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"4454:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"4531:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4506:24:201"},"nodeType":"YulFunctionCall","src":"4506:33:201"},"nodeType":"YulExpressionStatement","src":"4506:33:201"},{"nodeType":"YulAssignment","src":"4548:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"4558:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4548:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4228:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4239:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4251:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4259:6:201","type":""}],"src":"4183:388:201"},{"body":{"nodeType":"YulBlock","src":"4679:357:201","statements":[{"body":{"nodeType":"YulBlock","src":"4725:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4734:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4737:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4727:6:201"},"nodeType":"YulFunctionCall","src":"4727:12:201"},"nodeType":"YulExpressionStatement","src":"4727:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"4700:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"4709:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4696:3:201"},"nodeType":"YulFunctionCall","src":"4696:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"4721:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"4692:3:201"},"nodeType":"YulFunctionCall","src":"4692:32:201"},"nodeType":"YulIf","src":"4689:52:201"},{"nodeType":"YulVariableDeclaration","src":"4750:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4776:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4763:12:201"},"nodeType":"YulFunctionCall","src":"4763:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4754:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4820:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4795:24:201"},"nodeType":"YulFunctionCall","src":"4795:31:201"},"nodeType":"YulExpressionStatement","src":"4795:31:201"},{"nodeType":"YulAssignment","src":"4835:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"4845:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4835:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"4859:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4891:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4902:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4887:3:201"},"nodeType":"YulFunctionCall","src":"4887:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4874:12:201"},"nodeType":"YulFunctionCall","src":"4874:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"4863:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"4940:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4915:24:201"},"nodeType":"YulFunctionCall","src":"4915:33:201"},"nodeType":"YulExpressionStatement","src":"4915:33:201"},{"nodeType":"YulAssignment","src":"4957:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"4967:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4957:6:201"}]},{"nodeType":"YulAssignment","src":"4983:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5015:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5026:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5011:3:201"},"nodeType":"YulFunctionCall","src":"5011:18:201"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"4993:17:201"},"nodeType":"YulFunctionCall","src":"4993:37:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4983:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4629:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"4640:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"4652:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4660:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4668:6:201","type":""}],"src":"4576:460:201"},{"body":{"nodeType":"YulBlock","src":"5105:83:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5122:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5131:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"5138:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5127:3:201"},"nodeType":"YulFunctionCall","src":"5127:54:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5115:6:201"},"nodeType":"YulFunctionCall","src":"5115:67:201"},"nodeType":"YulExpressionStatement","src":"5115:67:201"}]},"name":"abi_encode_contract_IRewardsController","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"5089:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"5096:3:201","type":""}],"src":"5041:147:201"},{"body":{"nodeType":"YulBlock","src":"5322:125:201","statements":[{"nodeType":"YulAssignment","src":"5332:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5344:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5355:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5340:3:201"},"nodeType":"YulFunctionCall","src":"5340:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5332:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5374:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5389:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5397:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5385:3:201"},"nodeType":"YulFunctionCall","src":"5385:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5367:6:201"},"nodeType":"YulFunctionCall","src":"5367:74:201"},"nodeType":"YulExpressionStatement","src":"5367:74:201"}]},"name":"abi_encode_tuple_t_contract$_IRewardsController_$39352__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5291:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5302:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5313:4:201","type":""}],"src":"5193:254:201"},{"body":{"nodeType":"YulBlock","src":"5570:301:201","statements":[{"body":{"nodeType":"YulBlock","src":"5616:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5625:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5628:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5618:6:201"},"nodeType":"YulFunctionCall","src":"5618:12:201"},"nodeType":"YulExpressionStatement","src":"5618:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5591:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"5600:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5587:3:201"},"nodeType":"YulFunctionCall","src":"5587:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"5612:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5583:3:201"},"nodeType":"YulFunctionCall","src":"5583:32:201"},"nodeType":"YulIf","src":"5580:52:201"},{"nodeType":"YulVariableDeclaration","src":"5641:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5667:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5654:12:201"},"nodeType":"YulFunctionCall","src":"5654:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5645:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5711:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"5686:24:201"},"nodeType":"YulFunctionCall","src":"5686:31:201"},"nodeType":"YulExpressionStatement","src":"5686:31:201"},{"nodeType":"YulAssignment","src":"5726:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"5736:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5726:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"5750:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5782:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5793:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5778:3:201"},"nodeType":"YulFunctionCall","src":"5778:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5765:12:201"},"nodeType":"YulFunctionCall","src":"5765:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"5754:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"5831:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"5806:24:201"},"nodeType":"YulFunctionCall","src":"5806:33:201"},"nodeType":"YulExpressionStatement","src":"5806:33:201"},{"nodeType":"YulAssignment","src":"5848:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"5858:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5848:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_contract$_ITransferStrategyBase_$39643","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5528:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5539:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5551:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5559:6:201","type":""}],"src":"5452:419:201"},{"body":{"nodeType":"YulBlock","src":"5960:283:201","statements":[{"body":{"nodeType":"YulBlock","src":"6009:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6018:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6021:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6011:6:201"},"nodeType":"YulFunctionCall","src":"6011:12:201"},"nodeType":"YulExpressionStatement","src":"6011:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"5988:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"5996:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5984:3:201"},"nodeType":"YulFunctionCall","src":"5984:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"6003:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5980:3:201"},"nodeType":"YulFunctionCall","src":"5980:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"5973:6:201"},"nodeType":"YulFunctionCall","src":"5973:35:201"},"nodeType":"YulIf","src":"5970:55:201"},{"nodeType":"YulAssignment","src":"6034:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6057:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6044:12:201"},"nodeType":"YulFunctionCall","src":"6044:20:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"6034:6:201"}]},{"body":{"nodeType":"YulBlock","src":"6107:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6116:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6119:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6109:6:201"},"nodeType":"YulFunctionCall","src":"6109:12:201"},"nodeType":"YulExpressionStatement","src":"6109:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"6079:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"6087:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6076:2:201"},"nodeType":"YulFunctionCall","src":"6076:30:201"},"nodeType":"YulIf","src":"6073:50:201"},{"nodeType":"YulAssignment","src":"6132:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6148:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"6156:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6144:3:201"},"nodeType":"YulFunctionCall","src":"6144:17:201"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"6132:8:201"}]},{"body":{"nodeType":"YulBlock","src":"6221:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6230:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6233:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6223:6:201"},"nodeType":"YulFunctionCall","src":"6223:12:201"},"nodeType":"YulExpressionStatement","src":"6223:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6184:6:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6196:1:201","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"6199:6:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6192:3:201"},"nodeType":"YulFunctionCall","src":"6192:14:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6180:3:201"},"nodeType":"YulFunctionCall","src":"6180:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"6209:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6176:3:201"},"nodeType":"YulFunctionCall","src":"6176:38:201"},{"name":"end","nodeType":"YulIdentifier","src":"6216:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6173:2:201"},"nodeType":"YulFunctionCall","src":"6173:47:201"},"nodeType":"YulIf","src":"6170:67:201"}]},"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"5923:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"5931:3:201","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"5939:8:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"5949:6:201","type":""}],"src":"5876:367:201"},{"body":{"nodeType":"YulBlock","src":"6421:734:201","statements":[{"body":{"nodeType":"YulBlock","src":"6467:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6476:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6479:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6469:6:201"},"nodeType":"YulFunctionCall","src":"6469:12:201"},"nodeType":"YulExpressionStatement","src":"6469:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6442:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6451:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6438:3:201"},"nodeType":"YulFunctionCall","src":"6438:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"6463:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6434:3:201"},"nodeType":"YulFunctionCall","src":"6434:32:201"},"nodeType":"YulIf","src":"6431:52:201"},{"nodeType":"YulVariableDeclaration","src":"6492:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6518:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6505:12:201"},"nodeType":"YulFunctionCall","src":"6505:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6496:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6562:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6537:24:201"},"nodeType":"YulFunctionCall","src":"6537:31:201"},"nodeType":"YulExpressionStatement","src":"6537:31:201"},{"nodeType":"YulAssignment","src":"6577:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"6587:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6577:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"6601:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6632:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6643:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6628:3:201"},"nodeType":"YulFunctionCall","src":"6628:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6615:12:201"},"nodeType":"YulFunctionCall","src":"6615:32:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"6605:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"6656:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"6666:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"6660:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"6711:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6720:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6723:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6713:6:201"},"nodeType":"YulFunctionCall","src":"6713:12:201"},"nodeType":"YulExpressionStatement","src":"6713:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6699:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6707:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6696:2:201"},"nodeType":"YulFunctionCall","src":"6696:14:201"},"nodeType":"YulIf","src":"6693:34:201"},{"nodeType":"YulVariableDeclaration","src":"6736:96:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6804:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"6815:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6800:3:201"},"nodeType":"YulFunctionCall","src":"6800:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"6824:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"6762:37:201"},"nodeType":"YulFunctionCall","src":"6762:70:201"},"variables":[{"name":"value1_1","nodeType":"YulTypedName","src":"6740:8:201","type":""},{"name":"value2_1","nodeType":"YulTypedName","src":"6750:8:201","type":""}]},{"nodeType":"YulAssignment","src":"6841:18:201","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"6851:8:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6841:6:201"}]},{"nodeType":"YulAssignment","src":"6868:18:201","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"6878:8:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6868:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"6895:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6928:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6939:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6924:3:201"},"nodeType":"YulFunctionCall","src":"6924:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6911:12:201"},"nodeType":"YulFunctionCall","src":"6911:32:201"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"6899:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"6972:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6981:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6984:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6974:6:201"},"nodeType":"YulFunctionCall","src":"6974:12:201"},"nodeType":"YulExpressionStatement","src":"6974:12:201"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"6958:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"6968:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6955:2:201"},"nodeType":"YulFunctionCall","src":"6955:16:201"},"nodeType":"YulIf","src":"6952:36:201"},{"nodeType":"YulVariableDeclaration","src":"6997:98:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7065:9:201"},{"name":"offset_1","nodeType":"YulIdentifier","src":"7076:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7061:3:201"},"nodeType":"YulFunctionCall","src":"7061:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"7087:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"7023:37:201"},"nodeType":"YulFunctionCall","src":"7023:72:201"},"variables":[{"name":"value3_1","nodeType":"YulTypedName","src":"7001:8:201","type":""},{"name":"value4_1","nodeType":"YulTypedName","src":"7011:8:201","type":""}]},{"nodeType":"YulAssignment","src":"7104:18:201","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"7114:8:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"7104:6:201"}]},{"nodeType":"YulAssignment","src":"7131:18:201","value":{"name":"value4_1","nodeType":"YulIdentifier","src":"7141:8:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"7131:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint88_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6355:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6366:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6378:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6386:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6394:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6402:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"6410:6:201","type":""}],"src":"6248:907:201"},{"body":{"nodeType":"YulBlock","src":"7334:169:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7351:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7362:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7344:6:201"},"nodeType":"YulFunctionCall","src":"7344:21:201"},"nodeType":"YulExpressionStatement","src":"7344:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7385:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7396:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7381:3:201"},"nodeType":"YulFunctionCall","src":"7381:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"7401:2:201","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7374:6:201"},"nodeType":"YulFunctionCall","src":"7374:30:201"},"nodeType":"YulExpressionStatement","src":"7374:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7424:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7435:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7420:3:201"},"nodeType":"YulFunctionCall","src":"7420:18:201"},{"hexValue":"4f4e4c595f454d495353494f4e5f41444d494e","kind":"string","nodeType":"YulLiteral","src":"7440:21:201","type":"","value":"ONLY_EMISSION_ADMIN"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7413:6:201"},"nodeType":"YulFunctionCall","src":"7413:49:201"},"nodeType":"YulExpressionStatement","src":"7413:49:201"},{"nodeType":"YulAssignment","src":"7471:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7483:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7494:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7479:3:201"},"nodeType":"YulFunctionCall","src":"7479:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7471:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_edefeee258d69843a88425ffde63c214e5c5d0658734a7483784d9fda45195be__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7311:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7325:4:201","type":""}],"src":"7160:343:201"},{"body":{"nodeType":"YulBlock","src":"7666:198:201","statements":[{"nodeType":"YulAssignment","src":"7676:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7688:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7699:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7684:3:201"},"nodeType":"YulFunctionCall","src":"7684:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7676:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"7711:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"7721:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"7715:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7779:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7794:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7802:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7790:3:201"},"nodeType":"YulFunctionCall","src":"7790:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7772:6:201"},"nodeType":"YulFunctionCall","src":"7772:34:201"},"nodeType":"YulExpressionStatement","src":"7772:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7826:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7837:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7822:3:201"},"nodeType":"YulFunctionCall","src":"7822:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"7846:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"7854:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"7842:3:201"},"nodeType":"YulFunctionCall","src":"7842:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7815:6:201"},"nodeType":"YulFunctionCall","src":"7815:43:201"},"nodeType":"YulExpressionStatement","src":"7815:43:201"}]},"name":"abi_encode_tuple_t_address_t_contract$_IEACAggregatorProxy_$34482__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7627:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7638:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7646:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7657:4:201","type":""}],"src":"7508:356:201"},{"body":{"nodeType":"YulBlock","src":"8043:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8060:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8071:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8053:6:201"},"nodeType":"YulFunctionCall","src":"8053:21:201"},"nodeType":"YulExpressionStatement","src":"8053:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8094:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8105:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8090:3:201"},"nodeType":"YulFunctionCall","src":"8090:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"8110:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8083:6:201"},"nodeType":"YulFunctionCall","src":"8083:30:201"},"nodeType":"YulExpressionStatement","src":"8083:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8133:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8144:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8129:3:201"},"nodeType":"YulFunctionCall","src":"8129:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"8149:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8122:6:201"},"nodeType":"YulFunctionCall","src":"8122:62:201"},"nodeType":"YulExpressionStatement","src":"8122:62:201"},{"nodeType":"YulAssignment","src":"8193:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8205:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8216:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8201:3:201"},"nodeType":"YulFunctionCall","src":"8201:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8193:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8020:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8034:4:201","type":""}],"src":"7869:356:201"},{"body":{"nodeType":"YulBlock","src":"8262:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8279:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8282:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8272:6:201"},"nodeType":"YulFunctionCall","src":"8272:88:201"},"nodeType":"YulExpressionStatement","src":"8272:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8376:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"8379:4:201","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8369:6:201"},"nodeType":"YulFunctionCall","src":"8369:15:201"},"nodeType":"YulExpressionStatement","src":"8369:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8400:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8403:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8393:6:201"},"nodeType":"YulFunctionCall","src":"8393:15:201"},"nodeType":"YulExpressionStatement","src":"8393:15:201"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"8230:184:201"},{"body":{"nodeType":"YulBlock","src":"8466:302:201","statements":[{"body":{"nodeType":"YulBlock","src":"8565:168:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8586:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8589:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8579:6:201"},"nodeType":"YulFunctionCall","src":"8579:88:201"},"nodeType":"YulExpressionStatement","src":"8579:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8687:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"8690:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8680:6:201"},"nodeType":"YulFunctionCall","src":"8680:15:201"},"nodeType":"YulExpressionStatement","src":"8680:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8715:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8718:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8708:6:201"},"nodeType":"YulFunctionCall","src":"8708:15:201"},"nodeType":"YulExpressionStatement","src":"8708:15:201"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8482:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"8489:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"8479:2:201"},"nodeType":"YulFunctionCall","src":"8479:77:201"},"nodeType":"YulIf","src":"8476:257:201"},{"nodeType":"YulAssignment","src":"8742:20:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8753:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"8760:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8749:3:201"},"nodeType":"YulFunctionCall","src":"8749:13:201"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"8742:3:201"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"8448:5:201","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"8458:3:201","type":""}],"src":"8419:349:201"},{"body":{"nodeType":"YulBlock","src":"8998:1228:201","statements":[{"nodeType":"YulVariableDeclaration","src":"9008:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9018:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"9012:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9029:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9047:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9058:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9043:3:201"},"nodeType":"YulFunctionCall","src":"9043:18:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"9033:6:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9077:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9088:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9070:6:201"},"nodeType":"YulFunctionCall","src":"9070:21:201"},"nodeType":"YulExpressionStatement","src":"9070:21:201"},{"nodeType":"YulVariableDeclaration","src":"9100:17:201","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"9111:6:201"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"9104:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9126:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9146:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9140:5:201"},"nodeType":"YulFunctionCall","src":"9140:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"9130:6:201","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"9169:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"9177:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9162:6:201"},"nodeType":"YulFunctionCall","src":"9162:22:201"},"nodeType":"YulExpressionStatement","src":"9162:22:201"},{"nodeType":"YulVariableDeclaration","src":"9193:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9203:2:201","type":"","value":"64"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"9197:2:201","type":""}]},{"nodeType":"YulAssignment","src":"9214:25:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9225:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"9236:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9221:3:201"},"nodeType":"YulFunctionCall","src":"9221:18:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"9214:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"9248:29:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"9266:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9274:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9262:3:201"},"nodeType":"YulFunctionCall","src":"9262:15:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"9252:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9286:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9295:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"9290:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"9354:846:201","statements":[{"nodeType":"YulVariableDeclaration","src":"9368:23:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"9384:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9378:5:201"},"nodeType":"YulFunctionCall","src":"9378:13:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"9372:2:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9411:3:201"},{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"9426:2:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9420:5:201"},"nodeType":"YulFunctionCall","src":"9420:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9431:24:201","type":"","value":"0xffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9416:3:201"},"nodeType":"YulFunctionCall","src":"9416:40:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9404:6:201"},"nodeType":"YulFunctionCall","src":"9404:53:201"},"nodeType":"YulExpressionStatement","src":"9404:53:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9481:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9486:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9477:3:201"},"nodeType":"YulFunctionCall","src":"9477:12:201"},{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"9501:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"9505:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9497:3:201"},"nodeType":"YulFunctionCall","src":"9497:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9491:5:201"},"nodeType":"YulFunctionCall","src":"9491:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9470:6:201"},"nodeType":"YulFunctionCall","src":"9470:40:201"},"nodeType":"YulExpressionStatement","src":"9470:40:201"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9534:3:201"},{"name":"_2","nodeType":"YulIdentifier","src":"9539:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9530:3:201"},"nodeType":"YulFunctionCall","src":"9530:12:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"9558:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"9562:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9554:3:201"},"nodeType":"YulFunctionCall","src":"9554:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9548:5:201"},"nodeType":"YulFunctionCall","src":"9548:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"9568:10:201","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9544:3:201"},"nodeType":"YulFunctionCall","src":"9544:35:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9523:6:201"},"nodeType":"YulFunctionCall","src":"9523:57:201"},"nodeType":"YulExpressionStatement","src":"9523:57:201"},{"nodeType":"YulVariableDeclaration","src":"9593:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9603:4:201","type":"","value":"0x60"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"9597:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9620:38:201","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"9650:2:201"},{"name":"_4","nodeType":"YulIdentifier","src":"9654:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9646:3:201"},"nodeType":"YulFunctionCall","src":"9646:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9640:5:201"},"nodeType":"YulFunctionCall","src":"9640:18:201"},"variables":[{"name":"memberValue0","nodeType":"YulTypedName","src":"9624:12:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9671:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9681:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"9675:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9747:3:201"},{"name":"_4","nodeType":"YulIdentifier","src":"9752:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9743:3:201"},"nodeType":"YulFunctionCall","src":"9743:12:201"},{"arguments":[{"name":"memberValue0","nodeType":"YulIdentifier","src":"9761:12:201"},{"name":"_5","nodeType":"YulIdentifier","src":"9775:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9757:3:201"},"nodeType":"YulFunctionCall","src":"9757:21:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9736:6:201"},"nodeType":"YulFunctionCall","src":"9736:43:201"},"nodeType":"YulExpressionStatement","src":"9736:43:201"},{"nodeType":"YulVariableDeclaration","src":"9792:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9802:4:201","type":"","value":"0x80"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"9796:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9830:3:201"},{"name":"_6","nodeType":"YulIdentifier","src":"9835:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9826:3:201"},"nodeType":"YulFunctionCall","src":"9826:12:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"9854:2:201"},{"name":"_6","nodeType":"YulIdentifier","src":"9858:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9850:3:201"},"nodeType":"YulFunctionCall","src":"9850:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9844:5:201"},"nodeType":"YulFunctionCall","src":"9844:18:201"},{"name":"_5","nodeType":"YulIdentifier","src":"9864:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9840:3:201"},"nodeType":"YulFunctionCall","src":"9840:27:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9819:6:201"},"nodeType":"YulFunctionCall","src":"9819:49:201"},"nodeType":"YulExpressionStatement","src":"9819:49:201"},{"nodeType":"YulVariableDeclaration","src":"9881:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9891:4:201","type":"","value":"0xa0"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"9885:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"9919:3:201"},{"name":"_7","nodeType":"YulIdentifier","src":"9924:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9915:3:201"},"nodeType":"YulFunctionCall","src":"9915:12:201"},{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"9943:2:201"},{"name":"_7","nodeType":"YulIdentifier","src":"9947:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9939:3:201"},"nodeType":"YulFunctionCall","src":"9939:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9933:5:201"},"nodeType":"YulFunctionCall","src":"9933:18:201"},{"name":"_5","nodeType":"YulIdentifier","src":"9953:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9929:3:201"},"nodeType":"YulFunctionCall","src":"9929:27:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9908:6:201"},"nodeType":"YulFunctionCall","src":"9908:49:201"},"nodeType":"YulExpressionStatement","src":"9908:49:201"},{"nodeType":"YulVariableDeclaration","src":"9970:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"9980:4:201","type":"","value":"0xc0"},"variables":[{"name":"_8","nodeType":"YulTypedName","src":"9974:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"9997:40:201","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"10029:2:201"},{"name":"_8","nodeType":"YulIdentifier","src":"10033:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10025:3:201"},"nodeType":"YulFunctionCall","src":"10025:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"10019:5:201"},"nodeType":"YulFunctionCall","src":"10019:18:201"},"variables":[{"name":"memberValue0_1","nodeType":"YulTypedName","src":"10001:14:201","type":""}]},{"expression":{"arguments":[{"name":"memberValue0_1","nodeType":"YulIdentifier","src":"10089:14:201"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10109:3:201"},{"name":"_8","nodeType":"YulIdentifier","src":"10114:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10105:3:201"},"nodeType":"YulFunctionCall","src":"10105:12:201"}],"functionName":{"name":"abi_encode_contract_IRewardsController","nodeType":"YulIdentifier","src":"10050:38:201"},"nodeType":"YulFunctionCall","src":"10050:68:201"},"nodeType":"YulExpressionStatement","src":"10050:68:201"},{"nodeType":"YulAssignment","src":"10131:21:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"10142:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"10147:4:201","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10138:3:201"},"nodeType":"YulFunctionCall","src":"10138:14:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"10131:3:201"}]},{"nodeType":"YulAssignment","src":"10165:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"10179:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10187:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10175:3:201"},"nodeType":"YulFunctionCall","src":"10175:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"10165:6:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"9316:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"9319:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9313:2:201"},"nodeType":"YulFunctionCall","src":"9313:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"9327:18:201","statements":[{"nodeType":"YulAssignment","src":"9329:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"9338:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"9341:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9334:3:201"},"nodeType":"YulFunctionCall","src":"9334:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"9329:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"9309:3:201","statements":[]},"src":"9305:895:201"},{"nodeType":"YulAssignment","src":"10209:11:201","value":{"name":"pos","nodeType":"YulIdentifier","src":"10217:3:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10209:4:201"}]}]},"name":"abi_encode_tuple_t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8967:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8978:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8989:4:201","type":""}],"src":"8773:1453:201"},{"body":{"nodeType":"YulBlock","src":"10386:258:201","statements":[{"nodeType":"YulAssignment","src":"10396:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10408:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10419:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10404:3:201"},"nodeType":"YulFunctionCall","src":"10404:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10396:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"10431:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10441:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10435:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10499:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10514:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10522:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10510:3:201"},"nodeType":"YulFunctionCall","src":"10510:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10492:6:201"},"nodeType":"YulFunctionCall","src":"10492:34:201"},"nodeType":"YulExpressionStatement","src":"10492:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10546:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10557:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10542:3:201"},"nodeType":"YulFunctionCall","src":"10542:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10566:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10574:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10562:3:201"},"nodeType":"YulFunctionCall","src":"10562:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10535:6:201"},"nodeType":"YulFunctionCall","src":"10535:43:201"},"nodeType":"YulExpressionStatement","src":"10535:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10598:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10609:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10594:3:201"},"nodeType":"YulFunctionCall","src":"10594:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"10618:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"10626:10:201","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10614:3:201"},"nodeType":"YulFunctionCall","src":"10614:23:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10587:6:201"},"nodeType":"YulFunctionCall","src":"10587:51:201"},"nodeType":"YulExpressionStatement","src":"10587:51:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint32__to_t_address_t_address_t_uint32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10339:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"10350:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10358:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10366:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10377:4:201","type":""}],"src":"10231:413:201"},{"body":{"nodeType":"YulBlock","src":"10809:198:201","statements":[{"nodeType":"YulAssignment","src":"10819:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10831:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10842:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10827:3:201"},"nodeType":"YulFunctionCall","src":"10827:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10819:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"10854:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10864:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10858:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10922:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"10937:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10945:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10933:3:201"},"nodeType":"YulFunctionCall","src":"10933:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10915:6:201"},"nodeType":"YulFunctionCall","src":"10915:34:201"},"nodeType":"YulExpressionStatement","src":"10915:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10969:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10980:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10965:3:201"},"nodeType":"YulFunctionCall","src":"10965:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"10989:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10997:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"10985:3:201"},"nodeType":"YulFunctionCall","src":"10985:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10958:6:201"},"nodeType":"YulFunctionCall","src":"10958:43:201"},"nodeType":"YulExpressionStatement","src":"10958:43:201"}]},"name":"abi_encode_tuple_t_address_t_contract$_ITransferStrategyBase_$39643__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10770:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"10781:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"10789:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10800:4:201","type":""}],"src":"10649:358:201"},{"body":{"nodeType":"YulBlock","src":"11186:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11203:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11214:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11196:6:201"},"nodeType":"YulFunctionCall","src":"11196:21:201"},"nodeType":"YulExpressionStatement","src":"11196:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11237:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11248:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11233:3:201"},"nodeType":"YulFunctionCall","src":"11233:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"11253:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11226:6:201"},"nodeType":"YulFunctionCall","src":"11226:30:201"},"nodeType":"YulExpressionStatement","src":"11226:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11276:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11287:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11272:3:201"},"nodeType":"YulFunctionCall","src":"11272:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"11292:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11265:6:201"},"nodeType":"YulFunctionCall","src":"11265:62:201"},"nodeType":"YulExpressionStatement","src":"11265:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11347:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11358:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11343:3:201"},"nodeType":"YulFunctionCall","src":"11343:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"11363:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11336:6:201"},"nodeType":"YulFunctionCall","src":"11336:36:201"},"nodeType":"YulExpressionStatement","src":"11336:36:201"},{"nodeType":"YulAssignment","src":"11381:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11393:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11404:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11389:3:201"},"nodeType":"YulFunctionCall","src":"11389:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11381:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11163:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11177:4:201","type":""}],"src":"11012:402:201"},{"body":{"nodeType":"YulBlock","src":"11548:198:201","statements":[{"nodeType":"YulAssignment","src":"11558:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11570:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11581:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11566:3:201"},"nodeType":"YulFunctionCall","src":"11566:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11558:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"11593:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11603:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"11597:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11661:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11676:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11684:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11672:3:201"},"nodeType":"YulFunctionCall","src":"11672:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11654:6:201"},"nodeType":"YulFunctionCall","src":"11654:34:201"},"nodeType":"YulExpressionStatement","src":"11654:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11708:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11719:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11704:3:201"},"nodeType":"YulFunctionCall","src":"11704:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11728:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11736:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11724:3:201"},"nodeType":"YulFunctionCall","src":"11724:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11697:6:201"},"nodeType":"YulFunctionCall","src":"11697:43:201"},"nodeType":"YulExpressionStatement","src":"11697:43:201"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11509:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11520:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11528:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11539:4:201","type":""}],"src":"11419:327:201"},{"body":{"nodeType":"YulBlock","src":"12026:1073:201","statements":[{"nodeType":"YulVariableDeclaration","src":"12036:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12054:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12065:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12050:3:201"},"nodeType":"YulFunctionCall","src":"12050:18:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"12040:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12077:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12087:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12081:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12145:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12160:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12168:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12156:3:201"},"nodeType":"YulFunctionCall","src":"12156:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12138:6:201"},"nodeType":"YulFunctionCall","src":"12138:34:201"},"nodeType":"YulExpressionStatement","src":"12138:34:201"},{"nodeType":"YulVariableDeclaration","src":"12181:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12191:2:201","type":"","value":"32"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"12185:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12213:9:201"},{"name":"_2","nodeType":"YulIdentifier","src":"12224:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12209:3:201"},"nodeType":"YulFunctionCall","src":"12209:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"12229:2:201","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12202:6:201"},"nodeType":"YulFunctionCall","src":"12202:30:201"},"nodeType":"YulExpressionStatement","src":"12202:30:201"},{"nodeType":"YulVariableDeclaration","src":"12241:17:201","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"12252:6:201"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"12245:3:201","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"12274:6:201"},{"name":"value2","nodeType":"YulIdentifier","src":"12282:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12267:6:201"},"nodeType":"YulFunctionCall","src":"12267:22:201"},"nodeType":"YulExpressionStatement","src":"12267:22:201"},{"nodeType":"YulAssignment","src":"12298:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12309:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12320:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12305:3:201"},"nodeType":"YulFunctionCall","src":"12305:19:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"12298:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"12333:20:201","value":{"name":"value1","nodeType":"YulIdentifier","src":"12347:6:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"12337:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12362:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12371:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"12366:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"12430:211:201","statements":[{"nodeType":"YulVariableDeclaration","src":"12444:33:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"12470:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12457:12:201"},"nodeType":"YulFunctionCall","src":"12457:20:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"12448:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12515:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12490:24:201"},"nodeType":"YulFunctionCall","src":"12490:31:201"},"nodeType":"YulExpressionStatement","src":"12490:31:201"},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12541:3:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12550:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"12557:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12546:3:201"},"nodeType":"YulFunctionCall","src":"12546:14:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12534:6:201"},"nodeType":"YulFunctionCall","src":"12534:27:201"},"nodeType":"YulExpressionStatement","src":"12534:27:201"},{"nodeType":"YulAssignment","src":"12574:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12585:3:201"},{"name":"_2","nodeType":"YulIdentifier","src":"12590:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12581:3:201"},"nodeType":"YulFunctionCall","src":"12581:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"12574:3:201"}]},{"nodeType":"YulAssignment","src":"12606:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"12620:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"12628:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12616:3:201"},"nodeType":"YulFunctionCall","src":"12616:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"12606:6:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"12392:1:201"},{"name":"value2","nodeType":"YulIdentifier","src":"12395:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"12389:2:201"},"nodeType":"YulFunctionCall","src":"12389:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"12403:18:201","statements":[{"nodeType":"YulAssignment","src":"12405:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"12414:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"12417:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12410:3:201"},"nodeType":"YulFunctionCall","src":"12410:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"12405:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"12385:3:201","statements":[]},"src":"12381:260:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12661:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12672:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12657:3:201"},"nodeType":"YulFunctionCall","src":"12657:18:201"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12681:3:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"12686:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12677:3:201"},"nodeType":"YulFunctionCall","src":"12677:19:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12650:6:201"},"nodeType":"YulFunctionCall","src":"12650:47:201"},"nodeType":"YulExpressionStatement","src":"12650:47:201"},{"nodeType":"YulVariableDeclaration","src":"12706:16:201","value":{"name":"pos","nodeType":"YulIdentifier","src":"12719:3:201"},"variables":[{"name":"pos_1","nodeType":"YulTypedName","src":"12710:5:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12738:3:201"},{"name":"value4","nodeType":"YulIdentifier","src":"12743:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12731:6:201"},"nodeType":"YulFunctionCall","src":"12731:19:201"},"nodeType":"YulExpressionStatement","src":"12731:19:201"},{"nodeType":"YulAssignment","src":"12759:21:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"12772:3:201"},{"name":"_2","nodeType":"YulIdentifier","src":"12777:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12768:3:201"},"nodeType":"YulFunctionCall","src":"12768:12:201"},"variableNames":[{"name":"pos_1","nodeType":"YulIdentifier","src":"12759:5:201"}]},{"nodeType":"YulVariableDeclaration","src":"12789:22:201","value":{"name":"value3","nodeType":"YulIdentifier","src":"12805:6:201"},"variables":[{"name":"srcPtr_1","nodeType":"YulTypedName","src":"12793:8:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"12820:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12831:1:201","type":"","value":"0"},"variables":[{"name":"i_1","nodeType":"YulTypedName","src":"12824:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"12896:175:201","statements":[{"expression":{"arguments":[{"name":"pos_1","nodeType":"YulIdentifier","src":"12917:5:201"},{"arguments":[{"arguments":[{"name":"srcPtr_1","nodeType":"YulIdentifier","src":"12946:8:201"}],"functionName":{"name":"abi_decode_uint88","nodeType":"YulIdentifier","src":"12928:17:201"},"nodeType":"YulFunctionCall","src":"12928:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"12957:24:201","type":"","value":"0xffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12924:3:201"},"nodeType":"YulFunctionCall","src":"12924:58:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12910:6:201"},"nodeType":"YulFunctionCall","src":"12910:73:201"},"nodeType":"YulExpressionStatement","src":"12910:73:201"},{"nodeType":"YulAssignment","src":"12996:23:201","value":{"arguments":[{"name":"pos_1","nodeType":"YulIdentifier","src":"13009:5:201"},{"name":"_2","nodeType":"YulIdentifier","src":"13016:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13005:3:201"},"nodeType":"YulFunctionCall","src":"13005:14:201"},"variableNames":[{"name":"pos_1","nodeType":"YulIdentifier","src":"12996:5:201"}]},{"nodeType":"YulAssignment","src":"13032:29:201","value":{"arguments":[{"name":"srcPtr_1","nodeType":"YulIdentifier","src":"13048:8:201"},{"name":"_2","nodeType":"YulIdentifier","src":"13058:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13044:3:201"},"nodeType":"YulFunctionCall","src":"13044:17:201"},"variableNames":[{"name":"srcPtr_1","nodeType":"YulIdentifier","src":"13032:8:201"}]}]},"condition":{"arguments":[{"name":"i_1","nodeType":"YulIdentifier","src":"12852:3:201"},{"name":"value4","nodeType":"YulIdentifier","src":"12857:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"12849:2:201"},"nodeType":"YulFunctionCall","src":"12849:15:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"12865:22:201","statements":[{"nodeType":"YulAssignment","src":"12867:18:201","value":{"arguments":[{"name":"i_1","nodeType":"YulIdentifier","src":"12878:3:201"},{"kind":"number","nodeType":"YulLiteral","src":"12883:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12874:3:201"},"nodeType":"YulFunctionCall","src":"12874:11:201"},"variableNames":[{"name":"i_1","nodeType":"YulIdentifier","src":"12867:3:201"}]}]},"pre":{"nodeType":"YulBlock","src":"12845:3:201","statements":[]},"src":"12841:230:201"},{"nodeType":"YulAssignment","src":"13080:13:201","value":{"name":"pos_1","nodeType":"YulIdentifier","src":"13088:5:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13080:4:201"}]}]},"name":"abi_encode_tuple_t_address_t_array$_t_address_$dyn_calldata_ptr_t_array$_t_uint88_$dyn_calldata_ptr__to_t_address_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint88_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11963:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"11974:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11982:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11990:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11998:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12006:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12017:4:201","type":""}],"src":"11751:1348:201"}]},"contents":"{\n    { }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        validator_revert_address(value)\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_contract$_IEACAggregatorProxy_$34482(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_2251() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xe0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_uint88(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint32(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr(headStart, dataEnd) -> value0\n    {\n        let _1 := 32\n        if slt(sub(dataEnd, headStart), _1) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n        let _4 := calldataload(_3)\n        if gt(_4, _2) { panic_error_0x41() }\n        let dst := allocate_memory(add(shl(5, _4), _1))\n        let dst_1 := dst\n        mstore(dst, _4)\n        dst := add(dst, _1)\n        let _5 := 0xe0\n        let srcEnd := add(add(_3, mul(_4, _5)), _1)\n        if gt(srcEnd, dataEnd) { revert(0, 0) }\n        let src := add(_3, _1)\n        for { } lt(src, srcEnd) { src := add(src, _5) }\n        {\n            if slt(sub(dataEnd, src), _5)\n            {\n                let _6 := 0\n                revert(_6, _6)\n            }\n            let value := allocate_memory_2251()\n            mstore(value, abi_decode_uint88(src))\n            mstore(add(value, _1), calldataload(add(src, _1)))\n            let _7 := 64\n            mstore(add(value, _7), abi_decode_uint32(add(src, _7)))\n            let _8 := 96\n            let value_1 := calldataload(add(src, _8))\n            validator_revert_address(value_1)\n            mstore(add(value, _8), value_1)\n            let _9 := 128\n            mstore(add(value, _9), abi_decode_address(add(src, _9)))\n            let _10 := 160\n            mstore(add(value, _10), abi_decode_address(add(src, _10)))\n            let _11 := 192\n            mstore(add(value, _11), abi_decode_address(add(src, _11)))\n            mstore(dst, value)\n            dst := add(dst, _1)\n        }\n        value0 := dst_1\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint32(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := abi_decode_uint32(add(headStart, 64))\n    }\n    function abi_encode_contract_IRewardsController(value, pos)\n    {\n        mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_contract$_IRewardsController_$39352__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_contract$_ITransferStrategyBase_$39643(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_array_address_dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint88_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let value1_1, value2_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n        let offset_1 := calldataload(add(headStart, 64))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value3_1, value4_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset_1), dataEnd)\n        value3 := value3_1\n        value4 := value4_1\n    }\n    function abi_encode_tuple_t_stringliteral_edefeee258d69843a88425ffde63c214e5c5d0658734a7483784d9fda45195be__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"ONLY_EMISSION_ADMIN\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_contract$_IEACAggregatorProxy_$34482__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n        {\n            mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        let tail_1 := add(headStart, _1)\n        mstore(headStart, _1)\n        let pos := tail_1\n        let length := mload(value0)\n        mstore(tail_1, length)\n        let _2 := 64\n        pos := add(headStart, _2)\n        let srcPtr := add(value0, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            let _3 := mload(srcPtr)\n            mstore(pos, and(mload(_3), 0xffffffffffffffffffffff))\n            mstore(add(pos, _1), mload(add(_3, _1)))\n            mstore(add(pos, _2), and(mload(add(_3, _2)), 0xffffffff))\n            let _4 := 0x60\n            let memberValue0 := mload(add(_3, _4))\n            let _5 := 0xffffffffffffffffffffffffffffffffffffffff\n            mstore(add(pos, _4), and(memberValue0, _5))\n            let _6 := 0x80\n            mstore(add(pos, _6), and(mload(add(_3, _6)), _5))\n            let _7 := 0xa0\n            mstore(add(pos, _7), and(mload(add(_3, _7)), _5))\n            let _8 := 0xc0\n            let memberValue0_1 := mload(add(_3, _8))\n            abi_encode_contract_IRewardsController(memberValue0_1, add(pos, _8))\n            pos := add(pos, 0xe0)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint32__to_t_address_t_address_t_uint32__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, 0xffffffff))\n    }\n    function abi_encode_tuple_t_address_t_contract$_ITransferStrategyBase_$39643__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_address_t_array$_t_address_$dyn_calldata_ptr_t_array$_t_uint88_$dyn_calldata_ptr__to_t_address_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint88_$dyn_memory_ptr__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        let tail_1 := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        let _2 := 32\n        mstore(add(headStart, _2), 96)\n        let pos := tail_1\n        mstore(tail_1, value2)\n        pos := add(headStart, 128)\n        let srcPtr := value1\n        let i := 0\n        for { } lt(i, value2) { i := add(i, 1) }\n        {\n            let value := calldataload(srcPtr)\n            validator_revert_address(value)\n            mstore(pos, and(value, _1))\n            pos := add(pos, _2)\n            srcPtr := add(srcPtr, _2)\n        }\n        mstore(add(headStart, 64), sub(pos, headStart))\n        let pos_1 := pos\n        mstore(pos, value4)\n        pos_1 := add(pos, _2)\n        let srcPtr_1 := value3\n        let i_1 := 0\n        for { } lt(i_1, value4) { i_1 := add(i_1, 1) }\n        {\n            mstore(pos_1, and(abi_decode_uint88(srcPtr_1), 0xffffffffffffffffffffff))\n            pos_1 := add(pos_1, _2)\n            srcPtr_1 := add(srcPtr_1, _2)\n        }\n        tail := pos_1\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100df5760003560e01c8063bee36bb31161008c578063e15ac62311610066578063e15ac623146101eb578063f2fde38b146101fe578063f5cf673b14610211578063f996868b1461022457600080fd5b8063bee36bb3146101a7578063c5a7b538146101ba578063de262738146101cd57600080fd5b80638da5cb5b116100bd5780638da5cb5b14610163578063955c2ad714610181578063a286c6b41461019457600080fd5b8063529b1e87146100e45780635453ba1014610146578063715018a61461015b575b600080fd5b61011d6100f2366004610e27565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600160205260409020541690565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b610159610154366004610e4b565b610237565b005b610159610361565b60005473ffffffffffffffffffffffffffffffffffffffff1661011d565b61015961018f366004610f5a565b610451565b6101596101a2366004610e4b565b6105c8565b6101596101b5366004610e27565b6106d2565b6101596101c8366004611082565b61079a565b60025473ffffffffffffffffffffffffffffffffffffffff1661011d565b6101596101f9366004610e4b565b6108cb565b61015961020c366004610e27565b6109bd565b61015961021f366004610e4b565b610b6e565b610159610232366004611115565b610c80565b73ffffffffffffffffffffffffffffffffffffffff82811660009081526001602052604090205483911633146102ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f454d495353494f4e5f41444d494e0000000000000000000000000060448201526064015b60405180910390fd5b6002546040517f5453ba1000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152848116602483015290911690635453ba10906044015b600060405180830381600087803b15801561034457600080fd5b505af1158015610358573d6000803e3d6000fd5b50505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102c5565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005b815181101561053c573373ffffffffffffffffffffffffffffffffffffffff166001600084848151811061048a5761048a611198565b6020908102919091018101516080015173ffffffffffffffffffffffffffffffffffffffff90811683529082019290925260400160002054161461052a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f454d495353494f4e5f41444d494e0000000000000000000000000060448201526064016102c5565b80610534816111c7565b915050610454565b506002546040517f955c2ad700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063955c2ad790610593908490600401611227565b600060405180830381600087803b1580156105ad57600080fd5b505af11580156105c1573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102c5565b73ffffffffffffffffffffffffffffffffffffffff80831660008181526001602052604080822080548686167fffffffffffffffffffffffff0000000000000000000000000000000000000000821681179092559151919094169392849290917fda40ea421dd7e42cf8be71255facac4fdc12a3f70f4d5fd373cb16cec4cb53849190a4505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102c5565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff828116600090815260016020526040902054839116331461082c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f454d495353494f4e5f41444d494e0000000000000000000000000060448201526064016102c5565b6002546040517fc5a7b53800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152858116602483015263ffffffff851660448301529091169063c5a7b53890606401600060405180830381600087803b1580156108ad57600080fd5b505af11580156108c1573d6000803e3d6000fd5b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff828116600090815260016020526040902054839116331461095d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f454d495353494f4e5f41444d494e0000000000000000000000000060448201526064016102c5565b6002546040517fe15ac62300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063e15ac6239060440161032a565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102c5565b73ffffffffffffffffffffffffffffffffffffffff8116610ae1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102c5565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102c5565b6002546040517ff5cf673b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015283811660248301529091169063f5cf673b90604401600060405180830381600087803b158015610c6457600080fd5b505af1158015610c78573d6000803e3d6000fd5b505050505050565b60005b83811015610d5a573360016000878785818110610ca257610ca2611198565b9050602002016020810190610cb79190610e27565b73ffffffffffffffffffffffffffffffffffffffff90811682526020820192909252604001600020541614610d48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f454d495353494f4e5f41444d494e0000000000000000000000000060448201526064016102c5565b80610d52816111c7565b915050610c83565b506002546040517ff996868b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063f996868b90610db990889088908890889088906004016112dc565b600060405180830381600087803b158015610dd357600080fd5b505af1158015610de7573d6000803e3d6000fd5b505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610e1457600080fd5b50565b8035610e2281610df2565b919050565b600060208284031215610e3957600080fd5b8135610e4481610df2565b9392505050565b60008060408385031215610e5e57600080fd5b8235610e6981610df2565b91506020830135610e7981610df2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715610ed657610ed6610e84565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610f2357610f23610e84565b604052919050565b80356affffffffffffffffffffff81168114610e2257600080fd5b803563ffffffff81168114610e2257600080fd5b60006020808385031215610f6d57600080fd5b823567ffffffffffffffff80821115610f8557600080fd5b818501915085601f830112610f9957600080fd5b813581811115610fab57610fab610e84565b610fb9848260051b01610edc565b818152848101925060e0918202840185019188831115610fd857600080fd5b938501935b828510156110765780858a031215610ff55760008081fd5b610ffd610eb3565b61100686610f2b565b81528686013587820152604061101d818801610f46565b9082015260608681013561103081610df2565b908201526080611041878201610e17565b9082015260a0611052878201610e17565b9082015260c0611063878201610e17565b9082015284529384019392850192610fdd565b50979650505050505050565b60008060006060848603121561109757600080fd5b83356110a281610df2565b925060208401356110b281610df2565b91506110c060408501610f46565b90509250925092565b60008083601f8401126110db57600080fd5b50813567ffffffffffffffff8111156110f357600080fd5b6020830191508360208260051b850101111561110e57600080fd5b9250929050565b60008060008060006060868803121561112d57600080fd5b853561113881610df2565b9450602086013567ffffffffffffffff8082111561115557600080fd5b61116189838a016110c9565b9096509450604088013591508082111561117a57600080fd5b50611187888289016110c9565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611220577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b602080825282518282018190526000919060409081850190868401855b828110156112cf57815180516affffffffffffffffffffff16855286810151878601528581015163ffffffff168686015260608082015173ffffffffffffffffffffffffffffffffffffffff9081169187019190915260808083015182169087015260a08083015182169087015260c091820151169085015260e09093019290850190600101611244565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff868116825260606020808401829052908301869052600091879160808501845b8981101561133857843561132481610df2565b841682529382019390820190600101611311565b5085810360408701528681528101925086915060005b8681101561137e576affffffffffffffffffffff61136b84610f2b565b168452928101929181019160010161134e565b5091999850505050505050505056fea2646970667358221220df3b13dcf3fc72e7a4d02270ee5858223d502fd6c252a9f44be18766325b9da464736f6c634300080a0033","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 0xBEE36BB3 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xE15AC623 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xE15AC623 EQ PUSH2 0x1EB JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1FE JUMPI DUP1 PUSH4 0xF5CF673B EQ PUSH2 0x211 JUMPI DUP1 PUSH4 0xF996868B EQ PUSH2 0x224 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBEE36BB3 EQ PUSH2 0x1A7 JUMPI DUP1 PUSH4 0xC5A7B538 EQ PUSH2 0x1BA JUMPI DUP1 PUSH4 0xDE262738 EQ PUSH2 0x1CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xBD JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x163 JUMPI DUP1 PUSH4 0x955C2AD7 EQ PUSH2 0x181 JUMPI DUP1 PUSH4 0xA286C6B4 EQ PUSH2 0x194 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x529B1E87 EQ PUSH2 0xE4 JUMPI DUP1 PUSH4 0x5453BA10 EQ PUSH2 0x146 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x15B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x11D PUSH2 0xF2 CALLDATASIZE PUSH1 0x4 PUSH2 0xE27 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 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x159 PUSH2 0x154 CALLDATASIZE PUSH1 0x4 PUSH2 0xE4B JUMP JUMPDEST PUSH2 0x237 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x159 PUSH2 0x361 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x11D JUMP JUMPDEST PUSH2 0x159 PUSH2 0x18F CALLDATASIZE PUSH1 0x4 PUSH2 0xF5A JUMP JUMPDEST PUSH2 0x451 JUMP JUMPDEST PUSH2 0x159 PUSH2 0x1A2 CALLDATASIZE PUSH1 0x4 PUSH2 0xE4B JUMP JUMPDEST PUSH2 0x5C8 JUMP JUMPDEST PUSH2 0x159 PUSH2 0x1B5 CALLDATASIZE PUSH1 0x4 PUSH2 0xE27 JUMP JUMPDEST PUSH2 0x6D2 JUMP JUMPDEST PUSH2 0x159 PUSH2 0x1C8 CALLDATASIZE PUSH1 0x4 PUSH2 0x1082 JUMP JUMPDEST PUSH2 0x79A JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x11D JUMP JUMPDEST PUSH2 0x159 PUSH2 0x1F9 CALLDATASIZE PUSH1 0x4 PUSH2 0xE4B JUMP JUMPDEST PUSH2 0x8CB JUMP JUMPDEST PUSH2 0x159 PUSH2 0x20C CALLDATASIZE PUSH1 0x4 PUSH2 0xE27 JUMP JUMPDEST PUSH2 0x9BD JUMP JUMPDEST PUSH2 0x159 PUSH2 0x21F CALLDATASIZE PUSH1 0x4 PUSH2 0xE4B JUMP JUMPDEST PUSH2 0xB6E JUMP JUMPDEST PUSH2 0x159 PUSH2 0x232 CALLDATASIZE PUSH1 0x4 PUSH2 0x1115 JUMP JUMPDEST PUSH2 0xC80 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x2CE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F454D495353494F4E5F41444D494E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH32 0x5453BA1000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0x5453BA10 SWAP1 PUSH1 0x44 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x344 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x358 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x3E2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C5 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x53C JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 PUSH1 0x0 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x48A JUMPI PUSH2 0x48A PUSH2 0x1198 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP4 MSTORE SWAP1 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD AND EQ PUSH2 0x52A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F454D495353494F4E5F41444D494E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C5 JUMP JUMPDEST DUP1 PUSH2 0x534 DUP2 PUSH2 0x11C7 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x454 JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH32 0x955C2AD700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0x955C2AD7 SWAP1 PUSH2 0x593 SWAP1 DUP5 SWAP1 PUSH1 0x4 ADD PUSH2 0x1227 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x649 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD DUP7 DUP7 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 AND DUP2 OR SWAP1 SWAP3 SSTORE SWAP2 MLOAD SWAP2 SWAP1 SWAP5 AND SWAP4 SWAP3 DUP5 SWAP3 SWAP1 SWAP2 PUSH32 0xDA40EA421DD7E42CF8BE71255FACAC4FDC12A3F70F4D5FD373CB16CEC4CB5384 SWAP2 SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x753 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C5 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x82C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F454D495353494F4E5F41444D494E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C5 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH32 0xC5A7B53800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP6 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF DUP6 AND PUSH1 0x44 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xC5A7B538 SWAP1 PUSH1 0x64 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x8C1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP4 SWAP2 AND CALLER EQ PUSH2 0x95D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F454D495353494F4E5F41444D494E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C5 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH32 0xE15AC62300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP5 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xE15AC623 SWAP1 PUSH1 0x44 ADD PUSH2 0x32A JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xA3E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xAE1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2C5 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xBEF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C5 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF5CF673B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xF5CF673B SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC78 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD5A JUMPI CALLER PUSH1 0x1 PUSH1 0x0 DUP8 DUP8 DUP6 DUP2 DUP2 LT PUSH2 0xCA2 JUMPI PUSH2 0xCA2 PUSH2 0x1198 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0xCB7 SWAP2 SWAP1 PUSH2 0xE27 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD AND EQ PUSH2 0xD48 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F454D495353494F4E5F41444D494E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2C5 JUMP JUMPDEST DUP1 PUSH2 0xD52 DUP2 PUSH2 0x11C7 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xC83 JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH32 0xF996868B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH4 0xF996868B SWAP1 PUSH2 0xDB9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x12DC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xDE7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xE14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xE22 DUP2 PUSH2 0xDF2 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE39 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xE44 DUP2 PUSH2 0xDF2 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xE5E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0xE69 DUP2 PUSH2 0xDF2 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0xE79 DUP2 PUSH2 0xDF2 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xE0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xED6 JUMPI PUSH2 0xED6 PUSH2 0xE84 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0xF23 JUMPI PUSH2 0xF23 PUSH2 0xE84 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xE22 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xE22 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xF6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xF85 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xF99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xFAB JUMPI PUSH2 0xFAB PUSH2 0xE84 JUMP JUMPDEST PUSH2 0xFB9 DUP5 DUP3 PUSH1 0x5 SHL ADD PUSH2 0xEDC JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 DUP2 ADD SWAP3 POP PUSH1 0xE0 SWAP2 DUP3 MUL DUP5 ADD DUP6 ADD SWAP2 DUP9 DUP4 GT ISZERO PUSH2 0xFD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP3 DUP6 LT ISZERO PUSH2 0x1076 JUMPI DUP1 DUP6 DUP11 SUB SLT ISZERO PUSH2 0xFF5 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0xFFD PUSH2 0xEB3 JUMP JUMPDEST PUSH2 0x1006 DUP7 PUSH2 0xF2B JUMP JUMPDEST DUP2 MSTORE DUP7 DUP7 ADD CALLDATALOAD DUP8 DUP3 ADD MSTORE PUSH1 0x40 PUSH2 0x101D DUP2 DUP9 ADD PUSH2 0xF46 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP7 DUP2 ADD CALLDATALOAD PUSH2 0x1030 DUP2 PUSH2 0xDF2 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH1 0x80 PUSH2 0x1041 DUP8 DUP3 ADD PUSH2 0xE17 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH1 0xA0 PUSH2 0x1052 DUP8 DUP3 ADD PUSH2 0xE17 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH1 0xC0 PUSH2 0x1063 DUP8 DUP3 ADD PUSH2 0xE17 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE DUP5 MSTORE SWAP4 DUP5 ADD SWAP4 SWAP3 DUP6 ADD SWAP3 PUSH2 0xFDD JUMP JUMPDEST POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1097 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x10A2 DUP2 PUSH2 0xDF2 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x10B2 DUP2 PUSH2 0xDF2 JUMP JUMPDEST SWAP2 POP PUSH2 0x10C0 PUSH1 0x40 DUP6 ADD PUSH2 0xF46 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x10DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x10F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x110E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x112D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x1138 DUP2 PUSH2 0xDF2 JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1155 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1161 DUP10 DUP4 DUP11 ADD PUSH2 0x10C9 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x117A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1187 DUP9 DUP3 DUP10 ADD PUSH2 0x10C9 JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 POP SWAP3 SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x1220 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x40 SWAP1 DUP2 DUP6 ADD SWAP1 DUP7 DUP5 ADD DUP6 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x12CF JUMPI DUP2 MLOAD DUP1 MLOAD PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE DUP7 DUP2 ADD MLOAD DUP8 DUP7 ADD MSTORE DUP6 DUP2 ADD MLOAD PUSH4 0xFFFFFFFF AND DUP7 DUP7 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP8 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP1 DUP4 ADD MLOAD DUP3 AND SWAP1 DUP8 ADD MSTORE PUSH1 0xA0 DUP1 DUP4 ADD MLOAD DUP3 AND SWAP1 DUP8 ADD MSTORE PUSH1 0xC0 SWAP2 DUP3 ADD MLOAD AND SWAP1 DUP6 ADD MSTORE PUSH1 0xE0 SWAP1 SWAP4 ADD SWAP3 SWAP1 DUP6 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1244 JUMP JUMPDEST POP SWAP2 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP2 AND DUP3 MSTORE PUSH1 0x60 PUSH1 0x20 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE SWAP1 DUP4 ADD DUP7 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP8 SWAP2 PUSH1 0x80 DUP6 ADD DUP5 JUMPDEST DUP10 DUP2 LT ISZERO PUSH2 0x1338 JUMPI DUP5 CALLDATALOAD PUSH2 0x1324 DUP2 PUSH2 0xDF2 JUMP JUMPDEST DUP5 AND DUP3 MSTORE SWAP4 DUP3 ADD SWAP4 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1311 JUMP JUMPDEST POP DUP6 DUP2 SUB PUSH1 0x40 DUP8 ADD MSTORE DUP7 DUP2 MSTORE DUP2 ADD SWAP3 POP DUP7 SWAP2 POP PUSH1 0x0 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x137E JUMPI PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x136B DUP5 PUSH2 0xF2B JUMP JUMPDEST AND DUP5 MSTORE SWAP3 DUP2 ADD SWAP3 SWAP2 DUP2 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x134E JUMP JUMPDEST POP SWAP2 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDF EXTCODESIZE SGT 0xDC RETURN 0xFC PUSH19 0xE7A4D02270EE5858223D502FD6C252A9F44BE1 DUP8 PUSH7 0x325B9DA464736F PUSH13 0x634300080A0033000000000000 ","sourceMap":"689:3022:174:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3585:124;;;;;;:::i;:::-;3681:23;;;;3659:7;3681:23;;;:15;:23;;;;;;;;3585:124;;;;740:42:201;728:55;;;710:74;;698:2;683:18;3585:124:174;;;;;;;1885:198;;;;;;:::i;:::-;;:::i;:::-;;1601:135:11;;;:::i;1018:71::-;1056:7;1078:6;;;1018:71;;1299:292:174;;;;;;:::i;:::-;;:::i;2977:231::-;;;;;;:::i;:::-;;:::i;3247:140::-;;;;;;:::i;:::-;;:::i;2122:229::-;;;;;;:::i;:::-;;:::i;3426:120::-;3523:18;;;;3426:120;;1630:216;;;;;;:::i;:::-;;:::i;1875:226:11:-;;;;;;:::i;:::-;;:::i;2804:134:174:-;;;;;;:::i;:::-;;:::i;2390:375::-;;;;;;:::i;:::-;;:::i;1885:198::-;1062:23;;;;;;;;:15;:23;;;;;;;;;1048:10;:37;1040:69;;;;;;;7362:2:201;1040:69:174;;;7344:21:201;7401:2;7381:18;;;7374:30;7440:21;7420:18;;;7413:49;7479:18;;1040:69:174;;;;;;;;;2022:18:::1;::::0;:56:::1;::::0;;;;:18:::1;7790:15:201::0;;;2022:56:174::1;::::0;::::1;7772:34:201::0;7842:15;;;7822:18;;;7815:43;2022:18:174;;::::1;::::0;:34:::1;::::0;7684:18:201;;2022:56:174::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1885:198:::0;;;:::o;1601:135:11:-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;8071:2:201;1196:67:11;;;8053:21:201;;;8090:18;;;8083:30;8149:34;8129:18;;;8122:62;8201:18;;1196:67:11;7869:356:201;1196:67:11;1703:1:::1;1687:6:::0;;1666:40:::1;::::0;::::1;1687:6:::0;;::::1;::::0;1666:40:::1;::::0;1703:1;;1666:40:::1;1729:1;1712:19:::0;;;::::1;::::0;;1601:135::o;1299:292:174:-;1406:9;1401:138;1425:6;:13;1421:1;:17;1401:138;;;1498:10;1461:47;;:15;:33;1477:6;1484:1;1477:9;;;;;;;;:::i;:::-;;;;;;;;;;;;:16;;;1461:33;;;;;;;;;;;;;;;-1:-1:-1;1461:33:174;;;:47;1453:79;;;;;;;7362:2:201;1453:79:174;;;7344:21:201;7401:2;7381:18;;;7374:30;7440:21;7420:18;;;7413:49;7479:18;;1453:79:174;7160:343:201;1453:79:174;1440:3;;;;:::i;:::-;;;;1401:138;;;-1:-1:-1;1544:18:174;;:42;;;;;:18;;;;;:34;;:42;;1579:6;;1544:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1299:292;:::o;2977:231::-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;8071:2:201;1196:67:11;;;8053:21:201;;;8090:18;;;8083:30;8149:34;8129:18;;;8122:62;8201:18;;1196:67:11;7869:356:201;1196:67:11;3087:23:174::1;::::0;;::::1;3068:16;3087:23:::0;;;:15:::1;:23;::::0;;;;;;;3116:31;;::::1;::::0;;::::1;::::0;::::1;::::0;;;3158:45;;3087:23;;;::::1;::::0;3116:31;3087:23;;;;3158:45:::1;::::0;3068:16;3158:45:::1;3062:146;2977:231:::0;;:::o;3247:140::-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;8071:2:201;1196:67:11;;;8053:21:201;;;8090:18;;;8083:30;8149:34;8129:18;;;8122:62;8201:18;;1196:67:11;7869:356:201;1196:67:11;3331:18:174::1;:51:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;3247:140::o;2122:229::-;1062:23;;;;;;;;:15;:23;;;;;;;;;1048:10;:37;1040:69;;;;;;;7362:2:201;1040:69:174;;;7344:21:201;7401:2;7381:18;;;7374:30;7440:21;7420:18;;;7413:49;7479:18;;1040:69:174;7160:343:201;1040:69:174;2274:18:::1;::::0;:72:::1;::::0;;;;:18:::1;10510:15:201::0;;;2274:72:174::1;::::0;::::1;10492:34:201::0;10562:15;;;10542:18;;;10535:43;10626:10;10614:23;;10594:18;;;10587:51;2274:18:174;;::::1;::::0;:37:::1;::::0;10404:18:201;;2274:72:174::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2122:229:::0;;;;:::o;1630:216::-;1062:23;;;;;;;;:15;:23;;;;;;;;;1048:10;:37;1040:69;;;;;;;7362:2:201;1040:69:174;;;7344:21:201;7401:2;7381:18;;;7374:30;7440:21;7420:18;;;7413:49;7479:18;;1040:69:174;7160:343:201;1040:69:174;1777:18:::1;::::0;:64:::1;::::0;;;;:18:::1;7790:15:201::0;;;1777:64:174::1;::::0;::::1;7772:34:201::0;7842:15;;;7822:18;;;7815:43;1777:18:174;;::::1;::::0;:38:::1;::::0;7684:18:201;;1777:64:174::1;7508:356:201::0;1875:226:11;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;8071:2:201;1196:67:11;;;8053:21:201;;;8090:18;;;8083:30;8149:34;8129:18;;;8122:62;8201:18;;1196:67:11;7869:356:201;1196:67:11;1959:22:::1;::::0;::::1;1951:73;;;::::0;::::1;::::0;;11214:2:201;1951:73:11::1;::::0;::::1;11196:21:201::0;11253:2;11233:18;;;11226:30;11292:34;11272:18;;;11265:62;11363:8;11343:18;;;11336:36;11389:19;;1951:73:11::1;11012:402:201::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;::::1;::::0;;::::1;::::0;2056:6;::::1;::::0;2035:38:::1;::::0;::::1;2079:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1875:226::o;2804:134:174:-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;8071:2:201;1196:67:11;;;8053:21:201;;;8090:18;;;8083:30;8149:34;8129:18;;;8122:62;8201:18;;1196:67:11;7869:356:201;1196:67:11;2889:18:174::1;::::0;:44:::1;::::0;;;;:18:::1;7790:15:201::0;;;2889:44:174::1;::::0;::::1;7772:34:201::0;7842:15;;;7822:18;;;7815:43;2889:18:174;;::::1;::::0;:29:::1;::::0;7684:18:201;;2889:44:174::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2804:134:::0;;:::o;2390:375::-;2549:9;2544:133;2564:18;;;2544:133;;;2636:10;2605:15;:27;2621:7;;2629:1;2621:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2605:27;;;;;;;;;;;;;;;-1:-1:-1;2605:27:174;;;:41;2597:73;;;;;;;7362:2:201;2597:73:174;;;7344:21:201;7401:2;7381:18;;;7374:30;7440:21;7420:18;;;7413:49;7479:18;;2597:73:174;7160:343:201;2597:73:174;2584:3;;;;:::i;:::-;;;;2544:133;;;-1:-1:-1;2682:18:174;;:78;;;;;:18;;;;;:39;;:78;;2722:5;;2729:7;;;;2738:21;;;;2682:78;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2390:375;;;;;:::o;14:154:201:-;100:42;93:5;89:54;82:5;79:65;69:93;;158:1;155;148:12;69:93;14:154;:::o;173:134::-;241:20;;270:31;241:20;270:31;:::i;:::-;173:134;;;:::o;312:247::-;371:6;424:2;412:9;403:7;399:23;395:32;392:52;;;440:1;437;430:12;392:52;479:9;466:23;498:31;523:5;498:31;:::i;:::-;548:5;312:247;-1:-1:-1;;;312:247:201:o;795:417::-;892:6;900;953:2;941:9;932:7;928:23;924:32;921:52;;;969:1;966;959:12;921:52;1008:9;995:23;1027:31;1052:5;1027:31;:::i;:::-;1077:5;-1:-1:-1;1134:2:201;1119:18;;1106:32;1147:33;1106:32;1147:33;:::i;:::-;1199:7;1189:17;;;795:417;;;;;:::o;1217:184::-;1269:77;1266:1;1259:88;1366:4;1363:1;1356:15;1390:4;1387:1;1380:15;1406:253;1478:2;1472:9;1520:4;1508:17;;1555:18;1540:34;;1576:22;;;1537:62;1534:88;;;1602:18;;:::i;:::-;1638:2;1631:22;1406:253;:::o;1664:334::-;1735:2;1729:9;1791:2;1781:13;;1796:66;1777:86;1765:99;;1894:18;1879:34;;1915:22;;;1876:62;1873:88;;;1941:18;;:::i;:::-;1977:2;1970:22;1664:334;;-1:-1:-1;1664:334:201:o;2003:177::-;2070:20;;2130:24;2119:36;;2109:47;;2099:75;;2170:1;2167;2160:12;2185:163;2252:20;;2312:10;2301:22;;2291:33;;2281:61;;2338:1;2335;2328:12;2353:1825;2474:6;2505:2;2548;2536:9;2527:7;2523:23;2519:32;2516:52;;;2564:1;2561;2554:12;2516:52;2604:9;2591:23;2633:18;2674:2;2666:6;2663:14;2660:34;;;2690:1;2687;2680:12;2660:34;2728:6;2717:9;2713:22;2703:32;;2773:7;2766:4;2762:2;2758:13;2754:27;2744:55;;2795:1;2792;2785:12;2744:55;2831:2;2818:16;2853:2;2849;2846:10;2843:36;;;2859:18;;:::i;:::-;2899:36;2931:2;2926;2923:1;2919:10;2915:19;2899:36;:::i;:::-;2969:15;;;3000:12;;;;-1:-1:-1;3031:4:201;3070:11;;;3062:20;;3058:29;;;3099:19;;;3096:39;;;3131:1;3128;3121:12;3096:39;3155:11;;;;3175:973;3191:6;3186:3;3183:15;3175:973;;;3271:2;3265:3;3256:7;3252:17;3248:26;3245:116;;;3315:1;3344:2;3340;3333:14;3245:116;3387:22;;:::i;:::-;3436;3454:3;3436:22;:::i;:::-;3429:5;3422:37;3517:2;3512:3;3508:12;3495:26;3490:2;3483:5;3479:14;3472:50;3545:2;3583:31;3610:2;3605:3;3601:12;3583:31;:::i;:::-;3567:14;;;3560:55;3638:2;3681:12;;;3668:26;3707:33;3668:26;3707:33;:::i;:::-;3760:14;;;3753:31;3807:3;3846:32;3865:12;;;3846:32;:::i;:::-;3830:14;;;3823:56;3903:3;3943:33;3962:13;;;3943:33;:::i;:::-;3926:15;;;3919:58;4001:3;4041:33;4060:13;;;4041:33;:::i;:::-;4024:15;;;4017:58;4088:18;;3208:12;;;;4126;;;;3175:973;;;-1:-1:-1;4167:5:201;2353:1825;-1:-1:-1;;;;;;;2353:1825:201:o;4576:460::-;4652:6;4660;4668;4721:2;4709:9;4700:7;4696:23;4692:32;4689:52;;;4737:1;4734;4727:12;4689:52;4776:9;4763:23;4795:31;4820:5;4795:31;:::i;:::-;4845:5;-1:-1:-1;4902:2:201;4887:18;;4874:32;4915:33;4874:32;4915:33;:::i;:::-;4967:7;-1:-1:-1;4993:37:201;5026:2;5011:18;;4993:37;:::i;:::-;4983:47;;4576:460;;;;;:::o;5876:367::-;5939:8;5949:6;6003:3;5996:4;5988:6;5984:17;5980:27;5970:55;;6021:1;6018;6011:12;5970:55;-1:-1:-1;6044:20:201;;6087:18;6076:30;;6073:50;;;6119:1;6116;6109:12;6073:50;6156:4;6148:6;6144:17;6132:29;;6216:3;6209:4;6199:6;6196:1;6192:14;6184:6;6180:27;6176:38;6173:47;6170:67;;;6233:1;6230;6223:12;6170:67;5876:367;;;;;:::o;6248:907::-;6378:6;6386;6394;6402;6410;6463:2;6451:9;6442:7;6438:23;6434:32;6431:52;;;6479:1;6476;6469:12;6431:52;6518:9;6505:23;6537:31;6562:5;6537:31;:::i;:::-;6587:5;-1:-1:-1;6643:2:201;6628:18;;6615:32;6666:18;6696:14;;;6693:34;;;6723:1;6720;6713:12;6693:34;6762:70;6824:7;6815:6;6804:9;6800:22;6762:70;:::i;:::-;6851:8;;-1:-1:-1;6736:96:201;-1:-1:-1;6939:2:201;6924:18;;6911:32;;-1:-1:-1;6955:16:201;;;6952:36;;;6984:1;6981;6974:12;6952:36;;7023:72;7087:7;7076:8;7065:9;7061:24;7023:72;:::i;:::-;6248:907;;;;-1:-1:-1;6248:907:201;;-1:-1:-1;7114:8:201;;6997:98;6248:907;-1:-1:-1;;;6248:907:201:o;8230:184::-;8282:77;8279:1;8272:88;8379:4;8376:1;8369:15;8403:4;8400:1;8393:15;8419:349;8458:3;8489:66;8482:5;8479:77;8476:257;;;8589:77;8586:1;8579:88;8690:4;8687:1;8680:15;8718:4;8715:1;8708:15;8476:257;-1:-1:-1;8760:1:201;8749:13;;8419:349::o;8773:1453::-;9018:2;9070:21;;;9140:13;;9043:18;;;9162:22;;;8989:4;;9018:2;9203;;9221:18;;;;9262:15;;;8989:4;9305:895;9319:6;9316:1;9313:13;9305:895;;;9378:13;;9420:9;;9431:24;9416:40;9404:53;;9497:11;;;9491:18;9477:12;;;9470:40;9554:11;;;9548:18;9568:10;9544:35;9530:12;;;9523:57;9603:4;9646:11;;;9640:18;9681:42;9757:21;;;9743:12;;;9736:43;;;;9802:4;9850:11;;;9844:18;9840:27;;9826:12;;;9819:49;9891:4;9939:11;;;9933:18;9929:27;;9915:12;;;9908:49;9980:4;10025:11;;;10019:18;5127:54;10105:12;;;5115:67;10147:4;10138:14;;;;10175:15;;;;9341:1;9334:9;9305:895;;;-1:-1:-1;10217:3:201;;8773:1453;-1:-1:-1;;;;;;;8773:1453:201:o;11751:1348::-;12087:42;12156:15;;;12138:34;;12065:2;12191;12209:18;;;12202:30;;;12050:18;;;12267:22;;;12017:4;;12347:6;;12320:3;12305:19;;12017:4;12381:260;12395:6;12392:1;12389:13;12381:260;;;12470:6;12457:20;12490:31;12515:5;12490:31;:::i;:::-;12546:14;;12534:27;;12616:15;;;;12581:12;;;;12417:1;12410:9;12381:260;;;-1:-1:-1;12677:19:201;;;12672:2;12657:18;;12650:47;12731:19;;;12768:12;;;-1:-1:-1;12805:6:201;;-1:-1:-1;12831:1:201;12841:230;12857:6;12852:3;12849:15;12841:230;;;12957:24;12928:27;12946:8;12928:27;:::i;:::-;12924:58;12910:73;;13005:14;;;;13044:17;;;;12883:1;12874:11;12841:230;;;-1:-1:-1;13088:5:201;;11751:1348;-1:-1:-1;;;;;;;;;11751:1348:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"1011800","executionCost":"infinite","totalCost":"infinite"},"external":{"configureAssets((uint88,uint256,uint32,address,address,address,address)[])":"infinite","getEmissionAdmin(address)":"2537","getRewardsController()":"2362","owner()":"2318","renounceOwnership()":"30194","setClaimer(address,address)":"infinite","setDistributionEnd(address,address,uint32)":"infinite","setEmissionAdmin(address,address)":"infinite","setEmissionPerSecond(address,address[],uint88[])":"infinite","setRewardOracle(address,address)":"infinite","setRewardsController(address)":"26677","setTransferStrategy(address,address)":"infinite","transferOwnership(address)":"30363"}},"methodIdentifiers":{"configureAssets((uint88,uint256,uint32,address,address,address,address)[])":"955c2ad7","getEmissionAdmin(address)":"529b1e87","getRewardsController()":"de262738","owner()":"8da5cb5b","renounceOwnership()":"715018a6","setClaimer(address,address)":"f5cf673b","setDistributionEnd(address,address,uint32)":"c5a7b538","setEmissionAdmin(address,address)":"a286c6b4","setEmissionPerSecond(address,address[],uint88[])":"f996868b","setRewardOracle(address,address)":"5453ba10","setRewardsController(address)":"bee36bb3","setTransferStrategy(address,address)":"e15ac623","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAdmin\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"EmissionAdminUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint88\",\"name\":\"emissionPerSecond\",\"type\":\"uint88\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"distributionEnd\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"contract ITransferStrategyBase\",\"name\":\"transferStrategy\",\"type\":\"address\"},{\"internalType\":\"contract IEACAggregatorProxy\",\"name\":\"rewardOracle\",\"type\":\"address\"}],\"internalType\":\"struct RewardsDataTypes.RewardsConfigInput[]\",\"name\":\"config\",\"type\":\"tuple[]\"}],\"name\":\"configureAssets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getEmissionAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardsController\",\"outputs\":[{\"internalType\":\"contract IRewardsController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"}],\"name\":\"setClaimer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"newDistributionEnd\",\"type\":\"uint32\"}],\"name\":\"setDistributionEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"setEmissionAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"rewards\",\"type\":\"address[]\"},{\"internalType\":\"uint88[]\",\"name\":\"newEmissionsPerSecond\",\"type\":\"uint88[]\"}],\"name\":\"setEmissionPerSecond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"contract IEACAggregatorProxy\",\"name\":\"rewardOracle\",\"type\":\"address\"}],\"name\":\"setRewardOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setRewardsController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"contract ITransferStrategyBase\",\"name\":\"transferStrategy\",\"type\":\"address\"}],\"name\":\"setTransferStrategy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"kind\":\"dev\",\"methods\":{\"configureAssets((uint88,uint256,uint32,address,address,address,address)[])\":{\"details\":\"Configure assets to incentivize with an emission of rewards per second until the end of distribution.Only callable by the emission admin of the given rewards\",\"params\":{\"config\":\"The assets configuration input, the list of structs contains the following fields:   uint104 emissionPerSecond: The emission per second following rewards unit decimals.   uint256 totalSupply: The total supply of the asset to incentivize   uint40 distributionEnd: The end of the distribution of the incentives for an asset   address asset: The asset address to incentivize   address reward: The reward token address   ITransferStrategy transferStrategy: The TransferStrategy address with the install hook and claim logic.   IEACAggregatorProxy rewardOracle: The Price Oracle of a reward to visualize the incentives at the UI Frontend.                                     Must follow Chainlink Aggregator IEACAggregatorProxy interface to be compatible.\"}},\"constructor\":{\"params\":{\"owner\":\"The address of the owner\"}},\"getEmissionAdmin(address)\":{\"details\":\"Returns the admin of the given reward emission\",\"params\":{\"reward\":\"The address of the reward token\"},\"returns\":{\"_0\":\"The address of the emission admin\"}},\"getRewardsController()\":{\"details\":\"Returns the rewards controller address\",\"returns\":{\"_0\":\"The address of the RewardsController contract\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setClaimer(address,address)\":{\"details\":\"Whitelists an address to claim the rewards on behalf of another addressOnly callable by the owner of the EmissionManager\",\"params\":{\"claimer\":\"The address of the claimer\",\"user\":\"The address of the user\"}},\"setDistributionEnd(address,address,uint32)\":{\"details\":\"Sets the end date for the distributionOnly callable by the emission admin of the given reward\",\"params\":{\"asset\":\"The asset to incentivize\",\"newDistributionEnd\":\"The end date of the incentivization, in unix time format*\",\"reward\":\"The reward token that incentives the asset\"}},\"setEmissionAdmin(address,address)\":{\"details\":\"Updates the admin of the reward emissionOnly callable by the owner of the EmissionManager\",\"params\":{\"admin\":\"The address of the new admin of the emission\",\"reward\":\"The address of the reward token\"}},\"setEmissionPerSecond(address,address[],uint88[])\":{\"details\":\"Sets the emission per second of a set of reward distributions\",\"params\":{\"asset\":\"The asset is being incentivized\",\"newEmissionsPerSecond\":\"List of new reward emissions per second\",\"rewards\":\"List of reward addresses are being distributed\"}},\"setRewardOracle(address,address)\":{\"details\":\"Sets an Aave Oracle contract to enforce rewards with a source of value.Only callable by the emission admin of the given reward\",\"params\":{\"reward\":\"The address of the reward to set the price aggregator\",\"rewardOracle\":\"The address of price aggregator that follows IEACAggregatorProxy interface\"}},\"setRewardsController(address)\":{\"details\":\"Updates the address of the rewards controllerOnly callable by the owner of the EmissionManager\",\"params\":{\"controller\":\"the address of the RewardsController contract\"}},\"setTransferStrategy(address,address)\":{\"details\":\"Sets a TransferStrategy logic contract that determines the logic of the rewards transferOnly callable by the emission admin of the given reward\",\"params\":{\"reward\":\"The address of the reward token\",\"transferStrategy\":\"The address of the TransferStrategy logic contract\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"EmissionManager\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"Constructor.\"},\"setRewardOracle(address,address)\":{\"notice\":\"At the moment of reward configuration, the Incentives Controller performs a check to see if the reward asset oracle is compatible with IEACAggregator proxy. This check is enforced for integrators to be able to show incentives at the current Aave UI without the need to setup an external price registry\"}},\"notice\":\"It manages the list of admins of reward emissions and provides functions to control reward emissions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/rewards/EmissionManager.sol\":\"EmissionManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable is Context {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial owner.\\n   */\\n  constructor() {\\n    address msgSender = _msgSender();\\n    _owner = msgSender;\\n    emit OwnershipTransferred(address(0), msgSender);\\n  }\\n\\n  /**\\n   * @dev Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Leaves the contract without owner. It will not be possible to call\\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\\n   *\\n   * NOTE: Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public virtual onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = address(0);\\n  }\\n\\n  /**\\n   * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function transferOwnership(address newOwner) public virtual onlyOwner {\\n    require(newOwner != address(0), 'Ownable: new owner is the zero address');\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\",\"keccak256\":\"0x3ce185c4f579e32006f8893dbfdc1b5d878c0e2cafd1508f7ceb081698bc81f9\",\"license\":\"MIT\"},\"contracts/misc/interfaces/IEACAggregatorProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IEACAggregatorProxy {\\n  function decimals() external view returns (uint8);\\n\\n  function latestAnswer() external view returns (int256);\\n\\n  function latestTimestamp() external view returns (uint256);\\n\\n  function latestRound() external view returns (uint256);\\n\\n  function getAnswer(uint256 roundId) external view returns (int256);\\n\\n  function getTimestamp(uint256 roundId) external view returns (uint256);\\n\\n  event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 timestamp);\\n  event NewRound(uint256 indexed roundId, address indexed startedBy);\\n}\\n\",\"keccak256\":\"0x75bb34641419925730f87eeb122521b34cfd953b800212c362770ed1c7c5d719\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/EmissionManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\\nimport {IEACAggregatorProxy} from '../misc/interfaces/IEACAggregatorProxy.sol';\\nimport {IEmissionManager} from './interfaces/IEmissionManager.sol';\\nimport {ITransferStrategyBase} from './interfaces/ITransferStrategyBase.sol';\\nimport {IRewardsController} from './interfaces/IRewardsController.sol';\\nimport {RewardsDataTypes} from './libraries/RewardsDataTypes.sol';\\n\\n/**\\n * @title EmissionManager\\n * @author Aave\\n * @notice It manages the list of admins of reward emissions and provides functions to control reward emissions.\\n */\\ncontract EmissionManager is Ownable, IEmissionManager {\\n  // reward => emissionAdmin\\n  mapping(address => address) internal _emissionAdmins;\\n\\n  IRewardsController internal _rewardsController;\\n\\n  /**\\n   * @dev Only emission admin of the given reward can call functions marked by this modifier.\\n   **/\\n  modifier onlyEmissionAdmin(address reward) {\\n    require(msg.sender == _emissionAdmins[reward], 'ONLY_EMISSION_ADMIN');\\n    _;\\n  }\\n\\n  /**\\n   * Constructor.\\n   * @param owner The address of the owner\\n   */\\n  constructor(address owner) {\\n    transferOwnership(owner);\\n  }\\n\\n  /// @inheritdoc IEmissionManager\\n  function configureAssets(RewardsDataTypes.RewardsConfigInput[] memory config) external override {\\n    for (uint256 i = 0; i < config.length; i++) {\\n      require(_emissionAdmins[config[i].reward] == msg.sender, 'ONLY_EMISSION_ADMIN');\\n    }\\n    _rewardsController.configureAssets(config);\\n  }\\n\\n  /// @inheritdoc IEmissionManager\\n  function setTransferStrategy(\\n    address reward,\\n    ITransferStrategyBase transferStrategy\\n  ) external override onlyEmissionAdmin(reward) {\\n    _rewardsController.setTransferStrategy(reward, transferStrategy);\\n  }\\n\\n  /// @inheritdoc IEmissionManager\\n  function setRewardOracle(\\n    address reward,\\n    IEACAggregatorProxy rewardOracle\\n  ) external override onlyEmissionAdmin(reward) {\\n    _rewardsController.setRewardOracle(reward, rewardOracle);\\n  }\\n\\n  /// @inheritdoc IEmissionManager\\n  function setDistributionEnd(\\n    address asset,\\n    address reward,\\n    uint32 newDistributionEnd\\n  ) external override onlyEmissionAdmin(reward) {\\n    _rewardsController.setDistributionEnd(asset, reward, newDistributionEnd);\\n  }\\n\\n  /// @inheritdoc IEmissionManager\\n  function setEmissionPerSecond(\\n    address asset,\\n    address[] calldata rewards,\\n    uint88[] calldata newEmissionsPerSecond\\n  ) external override {\\n    for (uint256 i = 0; i < rewards.length; i++) {\\n      require(_emissionAdmins[rewards[i]] == msg.sender, 'ONLY_EMISSION_ADMIN');\\n    }\\n    _rewardsController.setEmissionPerSecond(asset, rewards, newEmissionsPerSecond);\\n  }\\n\\n  /// @inheritdoc IEmissionManager\\n  function setClaimer(address user, address claimer) external override onlyOwner {\\n    _rewardsController.setClaimer(user, claimer);\\n  }\\n\\n  /// @inheritdoc IEmissionManager\\n  function setEmissionAdmin(address reward, address admin) external override onlyOwner {\\n    address oldAdmin = _emissionAdmins[reward];\\n    _emissionAdmins[reward] = admin;\\n    emit EmissionAdminUpdated(reward, oldAdmin, admin);\\n  }\\n\\n  /// @inheritdoc IEmissionManager\\n  function setRewardsController(address controller) external override onlyOwner {\\n    _rewardsController = IRewardsController(controller);\\n  }\\n\\n  /// @inheritdoc IEmissionManager\\n  function getRewardsController() external view override returns (IRewardsController) {\\n    return _rewardsController;\\n  }\\n\\n  /// @inheritdoc IEmissionManager\\n  function getEmissionAdmin(address reward) external view override returns (address) {\\n    return _emissionAdmins[reward];\\n  }\\n}\\n\",\"keccak256\":\"0x82d6d07015fa4da92d548bd9f74d2f92f8457c509e65f34ce92abc6e3576ee08\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/IEmissionManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IEACAggregatorProxy} from '../../misc/interfaces/IEACAggregatorProxy.sol';\\nimport {RewardsDataTypes} from '../libraries/RewardsDataTypes.sol';\\nimport {ITransferStrategyBase} from './ITransferStrategyBase.sol';\\nimport {IRewardsController} from './IRewardsController.sol';\\n\\n/**\\n * @title IEmissionManager\\n * @author Aave\\n * @notice Defines the basic interface for the Emission Manager\\n */\\ninterface IEmissionManager {\\n  /**\\n   * @dev Emitted when the admin of a reward emission is updated.\\n   * @param reward The address of the rewarding token\\n   * @param oldAdmin The address of the old emission admin\\n   * @param newAdmin The address of the new emission admin\\n   */\\n  event EmissionAdminUpdated(\\n    address indexed reward,\\n    address indexed oldAdmin,\\n    address indexed newAdmin\\n  );\\n\\n  /**\\n   * @dev Configure assets to incentivize with an emission of rewards per second until the end of distribution.\\n   * @dev Only callable by the emission admin of the given rewards\\n   * @param config The assets configuration input, the list of structs contains the following fields:\\n   *   uint104 emissionPerSecond: The emission per second following rewards unit decimals.\\n   *   uint256 totalSupply: The total supply of the asset to incentivize\\n   *   uint40 distributionEnd: The end of the distribution of the incentives for an asset\\n   *   address asset: The asset address to incentivize\\n   *   address reward: The reward token address\\n   *   ITransferStrategy transferStrategy: The TransferStrategy address with the install hook and claim logic.\\n   *   IEACAggregatorProxy rewardOracle: The Price Oracle of a reward to visualize the incentives at the UI Frontend.\\n   *                                     Must follow Chainlink Aggregator IEACAggregatorProxy interface to be compatible.\\n   */\\n  function configureAssets(RewardsDataTypes.RewardsConfigInput[] memory config) external;\\n\\n  /**\\n   * @dev Sets a TransferStrategy logic contract that determines the logic of the rewards transfer\\n   * @dev Only callable by the emission admin of the given reward\\n   * @param reward The address of the reward token\\n   * @param transferStrategy The address of the TransferStrategy logic contract\\n   */\\n  function setTransferStrategy(address reward, ITransferStrategyBase transferStrategy) external;\\n\\n  /**\\n   * @dev Sets an Aave Oracle contract to enforce rewards with a source of value.\\n   * @dev Only callable by the emission admin of the given reward\\n   * @notice At the moment of reward configuration, the Incentives Controller performs\\n   * a check to see if the reward asset oracle is compatible with IEACAggregator proxy.\\n   * This check is enforced for integrators to be able to show incentives at\\n   * the current Aave UI without the need to setup an external price registry\\n   * @param reward The address of the reward to set the price aggregator\\n   * @param rewardOracle The address of price aggregator that follows IEACAggregatorProxy interface\\n   */\\n  function setRewardOracle(address reward, IEACAggregatorProxy rewardOracle) external;\\n\\n  /**\\n   * @dev Sets the end date for the distribution\\n   * @dev Only callable by the emission admin of the given reward\\n   * @param asset The asset to incentivize\\n   * @param reward The reward token that incentives the asset\\n   * @param newDistributionEnd The end date of the incentivization, in unix time format\\n   **/\\n  function setDistributionEnd(address asset, address reward, uint32 newDistributionEnd) external;\\n\\n  /**\\n   * @dev Sets the emission per second of a set of reward distributions\\n   * @param asset The asset is being incentivized\\n   * @param rewards List of reward addresses are being distributed\\n   * @param newEmissionsPerSecond List of new reward emissions per second\\n   */\\n  function setEmissionPerSecond(\\n    address asset,\\n    address[] calldata rewards,\\n    uint88[] calldata newEmissionsPerSecond\\n  ) external;\\n\\n  /**\\n   * @dev Whitelists an address to claim the rewards on behalf of another address\\n   * @dev Only callable by the owner of the EmissionManager\\n   * @param user The address of the user\\n   * @param claimer The address of the claimer\\n   */\\n  function setClaimer(address user, address claimer) external;\\n\\n  /**\\n   * @dev Updates the admin of the reward emission\\n   * @dev Only callable by the owner of the EmissionManager\\n   * @param reward The address of the reward token\\n   * @param admin The address of the new admin of the emission\\n   */\\n  function setEmissionAdmin(address reward, address admin) external;\\n\\n  /**\\n   * @dev Updates the address of the rewards controller\\n   * @dev Only callable by the owner of the EmissionManager\\n   * @param controller the address of the RewardsController contract\\n   */\\n  function setRewardsController(address controller) external;\\n\\n  /**\\n   * @dev Returns the rewards controller address\\n   * @return The address of the RewardsController contract\\n   */\\n  function getRewardsController() external view returns (IRewardsController);\\n\\n  /**\\n   * @dev Returns the admin of the given reward emission\\n   * @param reward The address of the reward token\\n   * @return The address of the emission admin\\n   */\\n  function getEmissionAdmin(address reward) external view returns (address);\\n}\\n\",\"keccak256\":\"0xa5b92dcfe94943caba4d3c542b5ddd25c27e37faa71da1f5efde3e1044ba0311\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/IRewardsController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IRewardsDistributor} from './IRewardsDistributor.sol';\\nimport {ITransferStrategyBase} from './ITransferStrategyBase.sol';\\nimport {IEACAggregatorProxy} from '../../misc/interfaces/IEACAggregatorProxy.sol';\\nimport {RewardsDataTypes} from '../libraries/RewardsDataTypes.sol';\\n\\n/**\\n * @title IRewardsController\\n * @author Aave\\n * @notice Defines the basic interface for a Rewards Controller.\\n */\\ninterface IRewardsController is IRewardsDistributor {\\n  /**\\n   * @dev Emitted when a new address is whitelisted as claimer of rewards on behalf of a user\\n   * @param user The address of the user\\n   * @param claimer The address of the claimer\\n   */\\n  event ClaimerSet(address indexed user, address indexed claimer);\\n\\n  /**\\n   * @dev Emitted when rewards are claimed\\n   * @param user The address of the user rewards has been claimed on behalf of\\n   * @param reward The address of the token reward is claimed\\n   * @param to The address of the receiver of the rewards\\n   * @param claimer The address of the claimer\\n   * @param amount The amount of rewards claimed\\n   */\\n  event RewardsClaimed(\\n    address indexed user,\\n    address indexed reward,\\n    address indexed to,\\n    address claimer,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @dev Emitted when a transfer strategy is installed for the reward distribution\\n   * @param reward The address of the token reward\\n   * @param transferStrategy The address of TransferStrategy contract\\n   */\\n  event TransferStrategyInstalled(address indexed reward, address indexed transferStrategy);\\n\\n  /**\\n   * @dev Emitted when the reward oracle is updated\\n   * @param reward The address of the token reward\\n   * @param rewardOracle The address of oracle\\n   */\\n  event RewardOracleUpdated(address indexed reward, address indexed rewardOracle);\\n\\n  /**\\n   * @dev Whitelists an address to claim the rewards on behalf of another address\\n   * @param user The address of the user\\n   * @param claimer The address of the claimer\\n   */\\n  function setClaimer(address user, address claimer) external;\\n\\n  /**\\n   * @dev Sets a TransferStrategy logic contract that determines the logic of the rewards transfer\\n   * @param reward The address of the reward token\\n   * @param transferStrategy The address of the TransferStrategy logic contract\\n   */\\n  function setTransferStrategy(address reward, ITransferStrategyBase transferStrategy) external;\\n\\n  /**\\n   * @dev Sets an Aave Oracle contract to enforce rewards with a source of value.\\n   * @notice At the moment of reward configuration, the Incentives Controller performs\\n   * a check to see if the reward asset oracle is compatible with IEACAggregator proxy.\\n   * This check is enforced for integrators to be able to show incentives at\\n   * the current Aave UI without the need to setup an external price registry\\n   * @param reward The address of the reward to set the price aggregator\\n   * @param rewardOracle The address of price aggregator that follows IEACAggregatorProxy interface\\n   */\\n  function setRewardOracle(address reward, IEACAggregatorProxy rewardOracle) external;\\n\\n  /**\\n   * @dev Get the price aggregator oracle address\\n   * @param reward The address of the reward\\n   * @return The price oracle of the reward\\n   */\\n  function getRewardOracle(address reward) external view returns (address);\\n\\n  /**\\n   * @dev Returns the whitelisted claimer for a certain address (0x0 if not set)\\n   * @param user The address of the user\\n   * @return The claimer address\\n   */\\n  function getClaimer(address user) external view returns (address);\\n\\n  /**\\n   * @dev Returns the Transfer Strategy implementation contract address being used for a reward address\\n   * @param reward The address of the reward\\n   * @return The address of the TransferStrategy contract\\n   */\\n  function getTransferStrategy(address reward) external view returns (address);\\n\\n  /**\\n   * @dev Configure assets to incentivize with an emission of rewards per second until the end of distribution.\\n   * @param config The assets configuration input, the list of structs contains the following fields:\\n   *   uint104 emissionPerSecond: The emission per second following rewards unit decimals.\\n   *   uint256 totalSupply: The total supply of the asset to incentivize\\n   *   uint40 distributionEnd: The end of the distribution of the incentives for an asset\\n   *   address asset: The asset address to incentivize\\n   *   address reward: The reward token address\\n   *   ITransferStrategy transferStrategy: The TransferStrategy address with the install hook and claim logic.\\n   *   IEACAggregatorProxy rewardOracle: The Price Oracle of a reward to visualize the incentives at the UI Frontend.\\n   *                                     Must follow Chainlink Aggregator IEACAggregatorProxy interface to be compatible.\\n   */\\n  function configureAssets(RewardsDataTypes.RewardsConfigInput[] memory config) external;\\n\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   **/\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n\\n  /**\\n   * @dev Claims reward for a user to the desired address, on all the assets of the pool, accumulating the pending rewards\\n   * @param assets List of assets to check eligible distributions before claiming rewards\\n   * @param amount The amount of rewards to claim\\n   * @param to The address that will be receiving the rewards\\n   * @param reward The address of the reward token\\n   * @return The amount of rewards claimed\\n   **/\\n  function claimRewards(\\n    address[] calldata assets,\\n    uint256 amount,\\n    address to,\\n    address reward\\n  ) external returns (uint256);\\n\\n  /**\\n   * @dev Claims reward for a user on behalf, on all the assets of the pool, accumulating the pending rewards. The\\n   * caller must be whitelisted via \\\"allowClaimOnBehalf\\\" function by the RewardsAdmin role manager\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @param amount The amount of rewards to claim\\n   * @param user The address to check and claim rewards\\n   * @param to The address that will be receiving the rewards\\n   * @param reward The address of the reward token\\n   * @return The amount of rewards claimed\\n   **/\\n  function claimRewardsOnBehalf(\\n    address[] calldata assets,\\n    uint256 amount,\\n    address user,\\n    address to,\\n    address reward\\n  ) external returns (uint256);\\n\\n  /**\\n   * @dev Claims reward for msg.sender, on all the assets of the pool, accumulating the pending rewards\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @param amount The amount of rewards to claim\\n   * @param reward The address of the reward token\\n   * @return The amount of rewards claimed\\n   **/\\n  function claimRewardsToSelf(\\n    address[] calldata assets,\\n    uint256 amount,\\n    address reward\\n  ) external returns (uint256);\\n\\n  /**\\n   * @dev Claims all rewards for a user to the desired address, on all the assets of the pool, accumulating the pending rewards\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @param to The address that will be receiving the rewards\\n   * @return rewardsList List of addresses of the reward tokens\\n   * @return claimedAmounts List that contains the claimed amount per reward, following same order as \\\"rewardList\\\"\\n   **/\\n  function claimAllRewards(\\n    address[] calldata assets,\\n    address to\\n  ) external returns (address[] memory rewardsList, uint256[] memory claimedAmounts);\\n\\n  /**\\n   * @dev Claims all rewards for a user on behalf, on all the assets of the pool, accumulating the pending rewards. The caller must\\n   * be whitelisted via \\\"allowClaimOnBehalf\\\" function by the RewardsAdmin role manager\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @param user The address to check and claim rewards\\n   * @param to The address that will be receiving the rewards\\n   * @return rewardsList List of addresses of the reward tokens\\n   * @return claimedAmounts List that contains the claimed amount per reward, following same order as \\\"rewardsList\\\"\\n   **/\\n  function claimAllRewardsOnBehalf(\\n    address[] calldata assets,\\n    address user,\\n    address to\\n  ) external returns (address[] memory rewardsList, uint256[] memory claimedAmounts);\\n\\n  /**\\n   * @dev Claims all reward for msg.sender, on all the assets of the pool, accumulating the pending rewards\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @return rewardsList List of addresses of the reward tokens\\n   * @return claimedAmounts List that contains the claimed amount per reward, following same order as \\\"rewardsList\\\"\\n   **/\\n  function claimAllRewardsToSelf(\\n    address[] calldata assets\\n  ) external returns (address[] memory rewardsList, uint256[] memory claimedAmounts);\\n}\\n\",\"keccak256\":\"0xe8a4d4ea914cbbcd3f6a4e5420a34d01f1379b2d445bd98fc7f8004c69894f5d\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/IRewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title IRewardsDistributor\\n * @author Aave\\n * @notice Defines the basic interface for a Rewards Distributor.\\n */\\ninterface IRewardsDistributor {\\n  /**\\n   * @dev Emitted when the configuration of the rewards of an asset is updated.\\n   * @param asset The address of the incentivized asset\\n   * @param reward The address of the reward token\\n   * @param oldEmission The old emissions per second value of the reward distribution\\n   * @param newEmission The new emissions per second value of the reward distribution\\n   * @param oldDistributionEnd The old end timestamp of the reward distribution\\n   * @param newDistributionEnd The new end timestamp of the reward distribution\\n   * @param assetIndex The index of the asset distribution\\n   */\\n  event AssetConfigUpdated(\\n    address indexed asset,\\n    address indexed reward,\\n    uint256 oldEmission,\\n    uint256 newEmission,\\n    uint256 oldDistributionEnd,\\n    uint256 newDistributionEnd,\\n    uint256 assetIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when rewards of an asset are accrued on behalf of a user.\\n   * @param asset The address of the incentivized asset\\n   * @param reward The address of the reward token\\n   * @param user The address of the user that rewards are accrued on behalf of\\n   * @param assetIndex The index of the asset distribution\\n   * @param userIndex The index of the asset distribution on behalf of the user\\n   * @param rewardsAccrued The amount of rewards accrued\\n   */\\n  event Accrued(\\n    address indexed asset,\\n    address indexed reward,\\n    address indexed user,\\n    uint256 assetIndex,\\n    uint256 userIndex,\\n    uint256 rewardsAccrued\\n  );\\n\\n  /**\\n   * @dev Sets the end date for the distribution\\n   * @param asset The asset to incentivize\\n   * @param reward The reward token that incentives the asset\\n   * @param newDistributionEnd The end date of the incentivization, in unix time format\\n   **/\\n  function setDistributionEnd(address asset, address reward, uint32 newDistributionEnd) external;\\n\\n  /**\\n   * @dev Sets the emission per second of a set of reward distributions\\n   * @param asset The asset is being incentivized\\n   * @param rewards List of reward addresses are being distributed\\n   * @param newEmissionsPerSecond List of new reward emissions per second\\n   */\\n  function setEmissionPerSecond(\\n    address asset,\\n    address[] calldata rewards,\\n    uint88[] calldata newEmissionsPerSecond\\n  ) external;\\n\\n  /**\\n   * @dev Gets the end date for the distribution\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The timestamp with the end of the distribution, in unix time format\\n   **/\\n  function getDistributionEnd(address asset, address reward) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the index of a user on a reward distribution\\n   * @param user Address of the user\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The current user asset index, not including new distributions\\n   **/\\n  function getUserAssetIndex(\\n    address user,\\n    address asset,\\n    address reward\\n  ) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the configuration of the distribution reward for a certain asset\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The index of the asset distribution\\n   * @return The emission per second of the reward distribution\\n   * @return The timestamp of the last update of the index\\n   * @return The timestamp of the distribution end\\n   **/\\n  function getRewardsData(\\n    address asset,\\n    address reward\\n  ) external view returns (uint256, uint256, uint256, uint256);\\n\\n  /**\\n   * @dev Calculates the next value of an specific distribution index, with validations.\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The old index of the asset distribution\\n   * @return The new index of the asset distribution\\n   **/\\n  function getAssetIndex(address asset, address reward) external view returns (uint256, uint256);\\n\\n  /**\\n   * @dev Returns the list of available reward token addresses of an incentivized asset\\n   * @param asset The incentivized asset\\n   * @return List of rewards addresses of the input asset\\n   **/\\n  function getRewardsByAsset(address asset) external view returns (address[] memory);\\n\\n  /**\\n   * @dev Returns the list of available reward addresses\\n   * @return List of rewards supported in this contract\\n   **/\\n  function getRewardsList() external view returns (address[] memory);\\n\\n  /**\\n   * @dev Returns the accrued rewards balance of a user, not including virtually accrued rewards since last distribution.\\n   * @param user The address of the user\\n   * @param reward The address of the reward token\\n   * @return Unclaimed rewards, not including new distributions\\n   **/\\n  function getUserAccruedRewards(address user, address reward) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns a single rewards balance of a user, including virtually accrued and unrealized claimable rewards.\\n   * @param assets List of incentivized assets to check eligible distributions\\n   * @param user The address of the user\\n   * @param reward The address of the reward token\\n   * @return The rewards amount\\n   **/\\n  function getUserRewards(\\n    address[] calldata assets,\\n    address user,\\n    address reward\\n  ) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns a list all rewards of a user, including already accrued and unrealized claimable rewards\\n   * @param assets List of incentivized assets to check eligible distributions\\n   * @param user The address of the user\\n   * @return The list of reward addresses\\n   * @return The list of unclaimed amount of rewards\\n   **/\\n  function getAllUserRewards(\\n    address[] calldata assets,\\n    address user\\n  ) external view returns (address[] memory, uint256[] memory);\\n\\n  /**\\n   * @dev Returns the decimals of an asset to calculate the distribution delta\\n   * @param asset The address to retrieve decimals\\n   * @return The decimals of an underlying asset\\n   */\\n  function getAssetDecimals(address asset) external view returns (uint8);\\n\\n  /**\\n   * @dev Returns the address of the emission manager\\n   * @return The address of the EmissionManager\\n   */\\n  function EMISSION_MANAGER() external view returns (address);\\n\\n  /**\\n   * @dev Returns the address of the emission manager.\\n   * Deprecated: This getter is maintained for compatibility purposes. Use the `EMISSION_MANAGER()` function instead.\\n   * @return The address of the EmissionManager\\n   */\\n  function getEmissionManager() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd393efd85f696114f9ab69e6bfdcbf3a2bcf16ef5002516d56a0f0359e3d9bba\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/ITransferStrategyBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface ITransferStrategyBase {\\n  event EmergencyWithdrawal(\\n    address indexed caller,\\n    address indexed token,\\n    address indexed to,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @dev Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation\\n   * @param to Account to transfer rewards\\n   * @param reward Address of the reward token\\n   * @param amount Amount to transfer to the \\\"to\\\" address parameter\\n   * @return Returns true bool if transfer logic succeeds\\n   */\\n  function performTransfer(address to, address reward, uint256 amount) external returns (bool);\\n\\n  /**\\n   * @return Returns the address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view returns (address);\\n\\n  /**\\n   * @return Returns the address of the Rewards admin\\n   */\\n  function getRewardsAdmin() external view returns (address);\\n\\n  /**\\n   * @dev Perform an emergency token withdrawal only callable by the Rewards admin\\n   * @param token Address of the token to withdraw funds from this contract\\n   * @param to Address of the recipient of the withdrawal\\n   * @param amount Amount of the withdrawal\\n   */\\n  function emergencyWithdrawal(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0xa52a6dc237879acbed7325787ce58238a3afd626fa2ed827d4e321d2e4ef51ad\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/libraries/RewardsDataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {ITransferStrategyBase} from '../interfaces/ITransferStrategyBase.sol';\\nimport {IEACAggregatorProxy} from '../../misc/interfaces/IEACAggregatorProxy.sol';\\n\\nlibrary RewardsDataTypes {\\n  struct RewardsConfigInput {\\n    uint88 emissionPerSecond;\\n    uint256 totalSupply;\\n    uint32 distributionEnd;\\n    address asset;\\n    address reward;\\n    ITransferStrategyBase transferStrategy;\\n    IEACAggregatorProxy rewardOracle;\\n  }\\n\\n  struct UserAssetBalance {\\n    address asset;\\n    uint256 userBalance;\\n    uint256 totalSupply;\\n  }\\n\\n  struct UserData {\\n    // Liquidity index of the reward distribution for the user\\n    uint104 index;\\n    // Amount of accrued rewards for the user since last user index update\\n    uint128 accrued;\\n  }\\n\\n  struct RewardData {\\n    // Liquidity index of the reward distribution\\n    uint104 index;\\n    // Amount of reward tokens distributed per second\\n    uint88 emissionPerSecond;\\n    // Timestamp of the last reward index update\\n    uint32 lastUpdateTimestamp;\\n    // The end of the distribution of rewards (in seconds)\\n    uint32 distributionEnd;\\n    // Map of user addresses and their rewards data (userAddress => userData)\\n    mapping(address => UserData) usersData;\\n  }\\n\\n  struct AssetData {\\n    // Map of reward token addresses and their data (rewardTokenAddress => rewardData)\\n    mapping(address => RewardData) rewards;\\n    // List of reward token addresses for the asset\\n    mapping(uint128 => address) availableRewards;\\n    // Count of reward tokens for the asset\\n    uint128 availableRewardsCount;\\n    // Number of decimals of the asset\\n    uint8 decimals;\\n  }\\n}\\n\",\"keccak256\":\"0xaaa314b4e9f40878f4fd20e99075fe60309c9e223a5b8c244aaaeb7229d8c318\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1472,"contract":"contracts/rewards/EmissionManager.sol:EmissionManager","label":"_owner","offset":0,"slot":"0","type":"t_address"},{"astId":36273,"contract":"contracts/rewards/EmissionManager.sol:EmissionManager","label":"_emissionAdmins","offset":0,"slot":"1","type":"t_mapping(t_address,t_address)"},{"astId":36276,"contract":"contracts/rewards/EmissionManager.sol:EmissionManager","label":"_rewardsController","offset":0,"slot":"2","type":"t_contract(IRewardsController)39352"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_contract(IRewardsController)39352":{"encoding":"inplace","label":"contract IRewardsController","numberOfBytes":"20"},"t_mapping(t_address,t_address)":{"encoding":"mapping","key":"t_address","label":"mapping(address => address)","numberOfBytes":"32","value":"t_address"}}},"userdoc":{"kind":"user","methods":{"constructor":{"notice":"Constructor."},"setRewardOracle(address,address)":{"notice":"At the moment of reward configuration, the Incentives Controller performs a check to see if the reward asset oracle is compatible with IEACAggregator proxy. This check is enforced for integrators to be able to show incentives at the current Aave UI without the need to setup an external price registry"}},"notice":"It manages the list of admins of reward emissions and provides functions to control reward emissions.","version":1}}},"contracts/rewards/RewardsController.sol":{"RewardsController":{"abi":[{"inputs":[{"internalType":"address","name":"emissionManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"reward","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"assetIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"userIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardsAccrued","type":"uint256"}],"name":"Accrued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"reward","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldEmission","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newEmission","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldDistributionEnd","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDistributionEnd","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"assetIndex","type":"uint256"}],"name":"AssetConfigUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"claimer","type":"address"}],"name":"ClaimerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reward","type":"address"},{"indexed":true,"internalType":"address","name":"rewardOracle","type":"address"}],"name":"RewardOracleUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"reward","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"address","name":"claimer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reward","type":"address"},{"indexed":true,"internalType":"address","name":"transferStrategy","type":"address"}],"name":"TransferStrategyInstalled","type":"event"},{"inputs":[],"name":"EMISSION_MANAGER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"address","name":"to","type":"address"}],"name":"claimAllRewards","outputs":[{"internalType":"address[]","name":"rewardsList","type":"address[]"},{"internalType":"uint256[]","name":"claimedAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"claimAllRewardsOnBehalf","outputs":[{"internalType":"address[]","name":"rewardsList","type":"address[]"},{"internalType":"uint256[]","name":"claimedAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"}],"name":"claimAllRewardsToSelf","outputs":[{"internalType":"address[]","name":"rewardsList","type":"address[]"},{"internalType":"uint256[]","name":"claimedAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"claimRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"claimRewardsOnBehalf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"reward","type":"address"}],"name":"claimRewardsToSelf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint88","name":"emissionPerSecond","type":"uint88"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint32","name":"distributionEnd","type":"uint32"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"},{"internalType":"contract ITransferStrategyBase","name":"transferStrategy","type":"address"},{"internalType":"contract IEACAggregatorProxy","name":"rewardOracle","type":"address"}],"internalType":"struct RewardsDataTypes.RewardsConfigInput[]","name":"config","type":"tuple[]"}],"name":"configureAssets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"address","name":"user","type":"address"}],"name":"getAllUserRewards","outputs":[{"internalType":"address[]","name":"rewardsList","type":"address[]"},{"internalType":"uint256[]","name":"unclaimedAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getAssetDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"getAssetIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getClaimer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"getDistributionEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEmissionManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"}],"name":"getRewardOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getRewardsByAsset","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"getRewardsData","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardsList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"}],"name":"getTransferStrategy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"getUserAccruedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"getUserAssetIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"getUserRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"userBalance","type":"uint256"}],"name":"handleAction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"caller","type":"address"}],"name":"setClaimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"},{"internalType":"uint32","name":"newDistributionEnd","type":"uint32"}],"name":"setDistributionEnd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address[]","name":"rewards","type":"address[]"},{"internalType":"uint88[]","name":"newEmissionsPerSecond","type":"uint88[]"}],"name":"setEmissionPerSecond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"},{"internalType":"contract IEACAggregatorProxy","name":"rewardOracle","type":"address"}],"name":"setRewardOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"},{"internalType":"contract ITransferStrategyBase","name":"transferStrategy","type":"address"}],"name":"setTransferStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave*","kind":"dev","methods":{"claimAllRewards(address[],address)":{"details":"Claims all rewards for a user to the desired address, on all the assets of the pool, accumulating the pending rewards","params":{"assets":"The list of assets to check eligible distributions before claiming rewards","to":"The address that will be receiving the rewards"},"returns":{"claimedAmounts":"List that contains the claimed amount per reward, following same order as \"rewardList\"*","rewardsList":"List of addresses of the reward tokens"}},"claimAllRewardsOnBehalf(address[],address,address)":{"details":"Claims all rewards for a user on behalf, on all the assets of the pool, accumulating the pending rewards. The caller must be whitelisted via \"allowClaimOnBehalf\" function by the RewardsAdmin role manager","params":{"assets":"The list of assets to check eligible distributions before claiming rewards","to":"The address that will be receiving the rewards","user":"The address to check and claim rewards"},"returns":{"claimedAmounts":"List that contains the claimed amount per reward, following same order as \"rewardsList\"*","rewardsList":"List of addresses of the reward tokens"}},"claimAllRewardsToSelf(address[])":{"details":"Claims all reward for msg.sender, on all the assets of the pool, accumulating the pending rewards","params":{"assets":"The list of assets to check eligible distributions before claiming rewards"},"returns":{"claimedAmounts":"List that contains the claimed amount per reward, following same order as \"rewardsList\"*","rewardsList":"List of addresses of the reward tokens"}},"claimRewards(address[],uint256,address,address)":{"details":"Claims reward for a user to the desired address, on all the assets of the pool, accumulating the pending rewards","params":{"amount":"The amount of rewards to claim","assets":"List of assets to check eligible distributions before claiming rewards","reward":"The address of the reward token","to":"The address that will be receiving the rewards"},"returns":{"_0":"The amount of rewards claimed*"}},"claimRewardsOnBehalf(address[],uint256,address,address,address)":{"details":"Claims reward for a user on behalf, on all the assets of the pool, accumulating the pending rewards. The caller must be whitelisted via \"allowClaimOnBehalf\" function by the RewardsAdmin role manager","params":{"amount":"The amount of rewards to claim","assets":"The list of assets to check eligible distributions before claiming rewards","reward":"The address of the reward token","to":"The address that will be receiving the rewards","user":"The address to check and claim rewards"},"returns":{"_0":"The amount of rewards claimed*"}},"claimRewardsToSelf(address[],uint256,address)":{"details":"Claims reward for msg.sender, on all the assets of the pool, accumulating the pending rewards","params":{"amount":"The amount of rewards to claim","assets":"The list of assets to check eligible distributions before claiming rewards","reward":"The address of the reward token"},"returns":{"_0":"The amount of rewards claimed*"}},"configureAssets((uint88,uint256,uint32,address,address,address,address)[])":{"details":"Configure assets to incentivize with an emission of rewards per second until the end of distribution.","params":{"config":"The assets configuration input, the list of structs contains the following fields:   uint104 emissionPerSecond: The emission per second following rewards unit decimals.   uint256 totalSupply: The total supply of the asset to incentivize   uint40 distributionEnd: The end of the distribution of the incentives for an asset   address asset: The asset address to incentivize   address reward: The reward token address   ITransferStrategy transferStrategy: The TransferStrategy address with the install hook and claim logic.   IEACAggregatorProxy rewardOracle: The Price Oracle of a reward to visualize the incentives at the UI Frontend.                                     Must follow Chainlink Aggregator IEACAggregatorProxy interface to be compatible."}},"getAllUserRewards(address[],address)":{"details":"Returns a list all rewards of a user, including already accrued and unrealized claimable rewards","params":{"assets":"List of incentivized assets to check eligible distributions","user":"The address of the user"},"returns":{"rewardsList":"The list of reward addresses","unclaimedAmounts":"The list of unclaimed amount of rewards*"}},"getAssetDecimals(address)":{"details":"Returns the decimals of an asset to calculate the distribution delta","params":{"asset":"The address to retrieve decimals"},"returns":{"_0":"The decimals of an underlying asset"}},"getAssetIndex(address,address)":{"details":"Calculates the next value of an specific distribution index, with validations.","params":{"asset":"The incentivized asset","reward":"The reward token of the incentivized asset"},"returns":{"_0":"The old index of the asset distribution","_1":"The new index of the asset distribution*"}},"getClaimer(address)":{"details":"Returns the whitelisted claimer for a certain address (0x0 if not set)","params":{"user":"The address of the user"},"returns":{"_0":"The claimer address"}},"getDistributionEnd(address,address)":{"details":"Gets the end date for the distribution","params":{"asset":"The incentivized asset","reward":"The reward token of the incentivized asset"},"returns":{"_0":"The timestamp with the end of the distribution, in unix time format*"}},"getEmissionManager()":{"details":"Returns the address of the emission manager. Deprecated: This getter is maintained for compatibility purposes. Use the `EMISSION_MANAGER()` function instead.","returns":{"_0":"The address of the EmissionManager"}},"getRewardOracle(address)":{"details":"Get the price aggregator oracle address","params":{"reward":"The address of the reward"},"returns":{"_0":"The price oracle of the reward"}},"getRewardsByAsset(address)":{"details":"Returns the list of available reward token addresses of an incentivized asset","params":{"asset":"The incentivized asset"},"returns":{"_0":"List of rewards addresses of the input asset*"}},"getRewardsData(address,address)":{"details":"Returns the configuration of the distribution reward for a certain asset","params":{"asset":"The incentivized asset","reward":"The reward token of the incentivized asset"},"returns":{"_0":"The index of the asset distribution","_1":"The emission per second of the reward distribution","_2":"The timestamp of the last update of the index","_3":"The timestamp of the distribution end*"}},"getRewardsList()":{"details":"Returns the list of available reward addresses","returns":{"_0":"List of rewards supported in this contract*"}},"getTransferStrategy(address)":{"details":"Returns the Transfer Strategy implementation contract address being used for a reward address","params":{"reward":"The address of the reward"},"returns":{"_0":"The address of the TransferStrategy contract"}},"getUserAccruedRewards(address,address)":{"details":"Returns the accrued rewards balance of a user, not including virtually accrued rewards since last distribution.","params":{"reward":"The address of the reward token","user":"The address of the user"},"returns":{"_0":"Unclaimed rewards, not including new distributions*"}},"getUserAssetIndex(address,address,address)":{"details":"Returns the index of a user on a reward distribution","params":{"asset":"The incentivized asset","reward":"The reward token of the incentivized asset","user":"Address of the user"},"returns":{"_0":"The current user asset index, not including new distributions*"}},"getUserRewards(address[],address,address)":{"details":"Returns a single rewards balance of a user, including virtually accrued and unrealized claimable rewards.","params":{"assets":"List of incentivized assets to check eligible distributions","reward":"The address of the reward token","user":"The address of the user"},"returns":{"_0":"The rewards amount*"}},"handleAction(address,uint256,uint256)":{"details":"Called by the corresponding asset on transfer hook in order to update the rewards distribution.The units of `totalSupply` and `userBalance` should be the same.","params":{"totalSupply":"The total supply of the asset prior to user balance change","user":"The address of the user whose asset balance has changed","userBalance":"The previous user balance prior to balance change*"}},"initialize(address)":{"details":"Initialize for RewardsControllerIt expects an address as argument since its initialized via PoolAddressesProvider._updateImpl()*"},"setClaimer(address,address)":{"details":"Whitelists an address to claim the rewards on behalf of another address","params":{"claimer":"The address of the claimer","user":"The address of the user"}},"setDistributionEnd(address,address,uint32)":{"details":"Sets the end date for the distribution","params":{"asset":"The asset to incentivize","newDistributionEnd":"The end date of the incentivization, in unix time format*","reward":"The reward token that incentives the asset"}},"setEmissionPerSecond(address,address[],uint88[])":{"details":"Sets the emission per second of a set of reward distributions","params":{"asset":"The asset is being incentivized","newEmissionsPerSecond":"List of new reward emissions per second","rewards":"List of reward addresses are being distributed"}},"setRewardOracle(address,address)":{"details":"Sets an Aave Oracle contract to enforce rewards with a source of value.","params":{"reward":"The address of the reward to set the price aggregator","rewardOracle":"The address of price aggregator that follows IEACAggregatorProxy interface"}},"setTransferStrategy(address,address)":{"details":"Sets a TransferStrategy logic contract that determines the logic of the rewards transfer","params":{"reward":"The address of the reward token","transferStrategy":"The address of the TransferStrategy logic contract"}}},"title":"RewardsController","version":1},"evm":{"bytecode":{"functionDebugData":{"@_36620":{"entryPoint":null,"id":36620,"parameterSlots":1,"returnSlots":0},"@_37637":{"entryPoint":null,"id":37637,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":75,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:306:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"95:209:201","statements":[{"body":{"nodeType":"YulBlock","src":"141:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"150:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"153:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"143:6:201"},"nodeType":"YulFunctionCall","src":"143:12:201"},"nodeType":"YulExpressionStatement","src":"143:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"116:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"125:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"112:3:201"},"nodeType":"YulFunctionCall","src":"112:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"137:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"108:3:201"},"nodeType":"YulFunctionCall","src":"108:32:201"},"nodeType":"YulIf","src":"105:52:201"},{"nodeType":"YulVariableDeclaration","src":"166:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"185:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"179:5:201"},"nodeType":"YulFunctionCall","src":"179:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"170:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"258:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"267:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"270:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"260:6:201"},"nodeType":"YulFunctionCall","src":"260:12:201"},"nodeType":"YulExpressionStatement","src":"260:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"217:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"228:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"243:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"248:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"239:3:201"},"nodeType":"YulFunctionCall","src":"239:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"252:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"235:3:201"},"nodeType":"YulFunctionCall","src":"235:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"224:3:201"},"nodeType":"YulFunctionCall","src":"224:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"214:2:201"},"nodeType":"YulFunctionCall","src":"214:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"207:6:201"},"nodeType":"YulFunctionCall","src":"207:50:201"},"nodeType":"YulIf","src":"204:70:201"},{"nodeType":"YulAssignment","src":"283:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"293:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"283:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"61:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"72:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"84:6:201","type":""}],"src":"14:290:201"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60a060405260006005553480156200001657600080fd5b506040516200499f3803806200499f83398101604081905262000039916200004b565b6001600160a01b03166080526200007d565b6000602082840312156200005e57600080fd5b81516001600160a01b03811681146200007657600080fd5b9392505050565b6080516148d5620000ca600039600081816104f40152818161060c01528181610c9701528181610fd60152818161167d01528181611833015281816118dc01526119f701526148d56000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806392074b0811610104578063bf90f63a116100a2578063dde43cba11610071578063dde43cba1461062e578063e15ac62314610636578063f5cf673b14610649578063f996868b1461065c57600080fd5b8063bf90f63a146105ce578063c4d66de8146105e1578063c5a7b538146105f4578063cbcbb5071461060757600080fd5b80639ff55db9116100de5780639ff55db91461058d578063b022418c146105a0578063b45ac1a9146105b3578063bb492bf5146105bb57600080fd5b806392074b08146104f2578063955c2ad7146105185780639efd6f721461052b57600080fd5b80635453ba101161017c57806370674ab91161014b57806370674ab9146103a257806374d945ec146103b55780637eff4ba8146103ee578063886fe70b146104ca57600080fd5b80635453ba101461032357806357b89883146103365780635f130b24146103495780636657732f1461038257600080fd5b806331873e2e116101b857806331873e2e1461027657806333028b991461028b5780634c0369c31461029e578063533f542a146102bf57600080fd5b80631b839c77146101df578063236300dc146102055780632a17bf6014610218575b600080fd5b6101f26101ed366004613e6d565b61066f565b6040519081526020015b60405180910390f35b6101f2610213366004613eeb565b6106cf565b610251610226366004613f5f565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152603b60205260409020541690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fc565b610289610284366004613f83565b61076c565b005b6101f2610299366004613fb8565b61077d565b6102b16102ac36600461403d565b610929565b6040516101fc9291906140e5565b6101f26102cd36600461413c565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260016020818152604080842086861685528252808420948816845293909101905220546cffffffffffffffffffffffffff169392505050565b610289610331366004613e6d565b610c7f565b6101f261034436600461417c565b610d2c565b610251610357366004613f5f565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152603a60205260409020541690565b610395610390366004613f5f565b610d46565b6040516101fc91906141db565b6101f26103b03660046141ee565b610e98565b6102516103c3366004613f5f565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152603960205260409020541690565b6104aa6103fc366004613e6d565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526001602090815260408083209390941682529190915220546cffffffffffffffffffffffffff8116916affffffffffffffffffffff6d01000000000000000000000000008304169163ffffffff780100000000000000000000000000000000000000000000000082048116927c01000000000000000000000000000000000000000000000000000000009092041690565b6040805194855260208501939093529183015260608201526080016101fc565b6104dd6104d8366004613e6d565b610eaf565b604080519283526020830191909152016101fc565b7f0000000000000000000000000000000000000000000000000000000000000000610251565b610289610526366004614326565b610fbe565b61057b610539366004613f5f565b73ffffffffffffffffffffffffffffffffffffffff16600090815260016020526040902060020154700100000000000000000000000000000000900460ff1690565b60405160ff90911681526020016101fc565b6102b161059b3660046141ee565b6111be565b6101f26105ae366004613e6d565b61136d565b610395611426565b6102b16105c936600461403d565b611495565b6102b16105dc366004614454565b61152e565b6102896105ef366004613f5f565b611549565b610289610602366004614496565b611665565b6102517f000000000000000000000000000000000000000000000000000000000000000081565b6101f2600181565b610289610644366004613e6d565b61181b565b610289610657366004613e6d565b6118c4565b61028961066a3660046144dd565b6119df565b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600160209081526040808320938516835292905220547c0100000000000000000000000000000000000000000000000000000000900463ffffffff165b92915050565b600073ffffffffffffffffffffffffffffffffffffffff8316610753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f494e56414c49445f544f5f41444452455353000000000000000000000000000060448201526064015b60405180910390fd5b61076286868633338888611e53565b9695505050505050565b610778338483856120e4565b505050565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260396020526040812054909133918691168214610813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f434c41494d45525f554e415554484f52495a4544000000000000000000000000604482015260640161074a565b73ffffffffffffffffffffffffffffffffffffffff8616610890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f494e56414c49445f555345525f41444452455353000000000000000000000000604482015260640161074a565b73ffffffffffffffffffffffffffffffffffffffff851661090d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f494e56414c49445f544f5f414444524553530000000000000000000000000000604482015260640161074a565b61091c898989338a8a8a611e53565b9998505050505050505050565b6060806000610939868686612297565b60035490915067ffffffffffffffff8111156109575761095761424b565b604051908082528060200260200182016040528015610980578160200160208202803683370190505b509250825167ffffffffffffffff81111561099d5761099d61424b565b6040519080825280602002602001820160405280156109c6578160200160208202803683370190505b50915060005b8151811015610c745760005b8451811015610c6157600381815481106109f4576109f4614560565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858281518110610a3157610a31614560565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060016000848481518110610a8157610a81614560565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868381518110610ade57610ade614560565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600d9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16848281518110610ba457610ba4614560565b60200260200101818151610bb891906145be565b9052508251839083908110610bcf57610bcf614560565b60200260200101516020015160001415610be857610c4f565b610c2586868381518110610bfe57610bfe614560565b6020026020010151858581518110610c1857610c18614560565b6020026020010151612495565b848281518110610c3757610c37614560565b60200260200101818151610c4b91906145be565b9052505b80610c59816145d6565b9150506109d8565b5080610c6c816145d6565b9150506109cc565b50505b935093915050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610d1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f4e4c595f454d495353494f4e5f4d414e414745520000000000000000000000604482015260640161074a565b610d288282612563565b5050565b6000610d3d85858533333388611e53565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120600201546060916fffffffffffffffffffffffffffffffff909116908167ffffffffffffffff811115610da057610da061424b565b604051908082528060200260200182016040528015610dc9578160200160208202803683370190505b50905060005b826fffffffffffffffffffffffffffffffff16816fffffffffffffffffffffffffffffffff161015610e905773ffffffffffffffffffffffffffffffffffffffff80861660009081526001602081815260408084206fffffffffffffffffffffffffffffffff871680865293019091529091205484519216918491908110610e5957610e59614560565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015280610e888161460f565b915050610dcf565b509392505050565b6000610d3d8383610eaa888888612297565b6126b7565b73ffffffffffffffffffffffffffffffffffffffff8083166000818152600160209081526040808320948616835293815283822084517fb1bf962d0000000000000000000000000000000000000000000000000000000081529451929485949193610fb19385939263b1bf962d92600480830193928290030181865afa158015610f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f61919061463f565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260016020526040902060020154610fac90700100000000000000000000000000000000900460ff16600a614778565b612856565b92509250505b9250929050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461105d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f4e4c595f454d495353494f4e5f4d414e414745520000000000000000000000604482015260640161074a565b60005b81518110156111b15781818151811061107b5761107b614560565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1663b1bf962d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f5919061463f565b82828151811061110757611107614560565b6020026020010151602001818152505061115b82828151811061112c5761112c614560565b60200260200101516080015183838151811061114a5761114a614560565b602002602001015160a00151612962565b61119f82828151811061117057611170614560565b60200260200101516080015183838151811061118e5761118e614560565b602002602001015160c00151612563565b806111a9816145d6565b915050611060565b506111bb81612ac8565b50565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260396020526040902054606091829133918691168214611257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f434c41494d45525f554e415554484f52495a4544000000000000000000000000604482015260640161074a565b73ffffffffffffffffffffffffffffffffffffffff86166112d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f494e56414c49445f555345525f41444452455353000000000000000000000000604482015260640161074a565b73ffffffffffffffffffffffffffffffffffffffff8516611351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f494e56414c49445f544f5f414444524553530000000000000000000000000000604482015260640161074a565b61135e8888338989613369565b93509350505094509492505050565b60008060005b600454811015610e9057600160006004838154811061139457611394614560565b60009182526020808320919091015473ffffffffffffffffffffffffffffffffffffffff908116845283820194909452604092830182208885168352815282822093891682526001909301909252902054611412906d010000000000000000000000000090046fffffffffffffffffffffffffffffffff16836145be565b91508061141e816145d6565b915050611373565b6060600380548060200260200160405190810160405280929190818152602001828054801561148b57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611460575b5050505050905090565b60608073ffffffffffffffffffffffffffffffffffffffff8316611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f494e56414c49445f544f5f414444524553530000000000000000000000000000604482015260640161074a565b6115228585333387613369565b91509150935093915050565b60608061153e8484333333613369565b915091509250929050565b60065460019060ff168061155c5750303b155b80611568575060055481115b6115f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a6564000000000000000000000000000000000000606482015260840161074a565b60065460ff1615801561163257600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560058290555b801561077857600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611704576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f4e4c595f454d495353494f4e5f4d414e414745520000000000000000000000604482015260640161074a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902080547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff81167c010000000000000000000000000000000000000000000000000000000063ffffffff8981168281029384179586905587516d01000000000000000000000000009096046affffffffffffffffffffff16808752968601969096529083041694830185905260608301939093526cffffffffffffffffffffffffff9081169216919091176080820152909291907fac1777479f07f3e7c34da8402139d54027a6a260caaae168bdee825ca5580dc59060a00160405180910390a350505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146118ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f4e4c595f454d495353494f4e5f4d414e414745520000000000000000000000604482015260640161074a565b610d288282612962565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f4e4c595f454d495353494f4e5f4d414e414745520000000000000000000000604482015260640161074a565b73ffffffffffffffffffffffffffffffffffffffff82811660008181526039602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169486169485179055517f4925eafc82d0c4d67889898eeed64b18488ab19811e61620f387026dec126a289190a35050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611a7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f4e4c595f454d495353494f4e5f4d414e414745520000000000000000000000604482015260640161074a565b828114611ae7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f494e56414c49445f494e50555400000000000000000000000000000000000000604482015260640161074a565b60005b83811015611e4b5773ffffffffffffffffffffffffffffffffffffffff86166000908152600160205260408120908181888886818110611b2c57611b2c614560565b9050602002016020810190611b419190613f5f565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000206002830154909150700100000000000000000000000000000000900460ff168015801590611bb7575081547801000000000000000000000000000000000000000000000000900463ffffffff1615155b611c1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f444953545249425554494f4e5f444f45535f4e4f545f45584953540000000000604482015260640161074a565b6000611ca2838b73ffffffffffffffffffffffffffffffffffffffff1663b1bf962d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c92919061463f565b611c9d85600a614787565b613851565b5083549091506d010000000000000000000000000090046affffffffffffffffffffff16878787818110611cd857611cd8614560565b9050602002016020810190611ced9190614793565b84546affffffffffffffffffffff919091166d0100000000000000000000000000027fffffffffffffffff0000000000000000000000ffffffffffffffffffffffffff909116178455898987818110611d4857611d48614560565b9050602002016020810190611d5d9190613f5f565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fac1777479f07f3e7c34da8402139d54027a6a260caaae168bdee825ca5580dc5838b8b8b818110611dbe57611dbe614560565b9050602002016020810190611dd39190614793565b8854604080519384526affffffffffffffffffffff90921660208401527c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690820181905260608201526080810186905260a00160405180910390a350505050508080611e43906145d6565b915050611aea565b505050505050565b600085611e62575060006120d9565b6000611e7885611e738b8b89612297565b6139df565b60005b8881101561205f5760008a8a83818110611e9757611e97614560565b9050602002016020810190611eac9190613f5f565b73ffffffffffffffffffffffffffffffffffffffff81811660009081526001602081815260408084208b861685528252808420948d1684529390910190522054909150611f1c906d010000000000000000000000000090046fffffffffffffffffffffffffffffffff16846145be565b9250888311611f8f5773ffffffffffffffffffffffffffffffffffffffff80821660009081526001602081815260408084208a861685528252808420948c1684529390910190522080547fffffff00000000000000000000000000000000ffffffffffffffffffffffffff16905561204c565b6000611f9b8a856147ae565b9050611fa781856147ae565b9350611fb281613a60565b73ffffffffffffffffffffffffffffffffffffffff92831660009081526001602081815260408084208b881685528252808420968d1684529590910190529290922080546fffffffffffffffffffffffffffffffff939093166d0100000000000000000000000000027fffffff00000000000000000000000000000000ffffffffffffffffffffffffff909316929092179091555061205f565b5080612057816145d6565b915050611e7b565b508061206f5760009150506120d9565b61207a848483613b06565b6040805173ffffffffffffffffffffffffffffffffffffffff8881168252602082018490528087169286821692918916917fc052130bc4ef84580db505783484b067ea8b71b3bca78a7e12db7aea8658f004910160405180910390a490505b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604090206002015460ff700100000000000000000000000000000000820416600a0a906fffffffffffffffffffffffffffffffff1680612146575050612291565b60005b81816fffffffffffffffffffffffffffffffff16101561228d5773ffffffffffffffffffffffffffffffffffffffff80881660009081526001602081815260408084206fffffffffffffffffffffffffffffffff8716855292830182528084205490941680845291905291812090806121c3838989613851565b915091506000806121d7858d8d878d613c32565b9150915082806121e45750805b1561227b578b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff167f3303facd24627943a92e9dc87cfbb34b15c49b726eec3ad3487c16be9ab8efe8878887604051612272939291909283526020830191909152604082015260600190565b60405180910390a45b50506001909401935061214992505050565b5050505b50505050565b60608267ffffffffffffffff8111156122b2576122b261424b565b60405190808252806020026020018201604052801561231d57816020015b61230a6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b8152602001906001900390816122d05790505b50905060005b83811015610e905784848281811061233d5761233d614560565b90506020020160208101906123529190613f5f565b82828151811061236457612364614560565b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff909116905284848281811061239b5761239b614560565b90506020020160208101906123b09190613f5f565b6040517f0afbcdc900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529190911690630afbcdc9906024016040805180830381865afa15801561241d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244191906147c5565b83838151811061245357612453614560565b602002602001015160200184848151811061247057612470614560565b602090810291909101015160400191909152528061248d816145d6565b915050612323565b805173ffffffffffffffffffffffffffffffffffffffff90811660009081526001602081815260408084208786168552825280842086519095168452919052812060020154909190829061250190700100000000000000000000000000000000900460ff16600a614778565b9050600061251483866040015184612856565b60208088015173ffffffffffffffffffffffffffffffffffffffff8b166000908152600188019092526040909120549193506120d992509083906cffffffffffffffffffffffffff1685613d91565b60008173ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d4919061463f565b1361263b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4f5241434c455f4d5553545f52455455524e5f50524943450000000000000000604482015260640161074a565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603b602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169486169485179055517f1a1cd5483e52e60b9ff7f3b9d1db3bbd9e9d21c6324ad3a8c79dba9b75e62f4d9190a35050565b6000805b8251811015610e90578281815181106126d6576126d6614560565b60200260200101516020015160001415612785576001600084838151811061270057612700614560565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff908116835282820193909352604091820160009081208885168252825282812093891681526001909301905290205461277e906d010000000000000000000000000090046fffffffffffffffffffffffffffffffff16836145be565b9150612844565b6001600084838151811061279b5761279b614560565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff908116835282820193909352604091820160009081208885168252825282812093891681526001909301905290205483516d01000000000000000000000000009091046fffffffffffffffffffffffffffffffff169061282d9087908790879086908110610c1857610c18614560565b61283791906145be565b61284190836145be565b91505b8061284e816145d6565b9150506126bb565b825460009081906cffffffffffffffffffffffffff81169063ffffffff7c010000000000000000000000000000000000000000000000000000000082048116916affffffffffffffffffffff6d0100000000000000000000000000820416917801000000000000000000000000000000000000000000000000909104168115806128de575087155b806128e857504281145b806128f35750828110155b156129075783849550955050505050610c77565b60008342116129165742612918565b835b9050600061292683836147ae565b905060008961293583876147e9565b61293f91906147e9565b8b900490508661294f81836145be565b9850985050505050505050935093915050565b73ffffffffffffffffffffffffffffffffffffffff81166129df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f53545241544547595f43414e5f4e4f545f42455f5a45524f0000000000000000604482015260640161074a565b6001813b151514612a4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f53545241544547595f4d5553545f42455f434f4e545241435400000000000000604482015260640161074a565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603a602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169486169485179055517f8ca1d928f1d72493a6b78c4f74aabde976bc37ffe2570f2a1ce5a8abd3dde0aa9190a35050565b60005b8151811015610d285760016000838381518110612aea57612aea614560565b6020908102919091018101516060015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002060020154700100000000000000000000000000000000900460ff16612bb6576004828281518110612b5157612b51614560565b6020908102919091018101516060015182546001810184556000938452919092200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790555b6000828281518110612bca57612bca614560565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c449190614826565b60016000858581518110612c5a57612c5a614560565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160106101000a81548160ff021916908360ff160217905560ff169050600060016000858581518110612cd757612cd7614560565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000858581518110612d3457612d34614560565b6020908102919091018101516080015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080549091507801000000000000000000000000000000000000000000000000900463ffffffff16612fa357838381518110612da557612da5614560565b60200260200101516080015160016000868681518110612dc757612dc7614560565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600060016000888881518110612e2857612e28614560565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016000858581518110612f1457612f14614560565b6020908102919091018101516060015173ffffffffffffffffffffffffffffffffffffffff168252810191909152604001600090812060020180546fffffffffffffffffffffffffffffffff1691612f6b8361460f565b91906101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550505b60026000858581518110612fb957612fb9614560565b6020908102919091018101516080015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040016000205460ff166130e35760016002600086868151811061300d5761300d614560565b60200260200101516080015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600384848151811061307e5761307e614560565b6020908102919091018101516080015182546001810184556000938452919092200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790555b6000613114828686815181106130fb576130fb614560565b60200260200101516020015185600a611c9d9190614787565b50825486519192506d010000000000000000000000000081046affffffffffffffffffffff16917c010000000000000000000000000000000000000000000000000000000090910463ffffffff169087908790811061317557613175614560565b60209081029190910101515184546affffffffffffffffffffff9091166d0100000000000000000000000000027fffffffffffffffff0000000000000000000000ffffffffffffffffffffffffff90911617845586518790879081106131dd576131dd614560565b602090810291909101015160400151845463ffffffff9091167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff909116178455865187908790811061324c5761324c614560565b60200260200101516080015173ffffffffffffffffffffffffffffffffffffffff1687878151811061328057613280614560565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff167fac1777479f07f3e7c34da8402139d54027a6a260caaae168bdee825ca5580dc5848a8a815181106132d6576132d6614560565b602002602001015160000151858c8c815181106132f5576132f5614560565b602002602001015160400151896040516133499594939291906affffffffffffffffffffff958616815293909416602084015263ffffffff9182166040840152166060820152608081019190915260a00190565b60405180910390a350505050508080613361906145d6565b915050612acb565b60035460609081908067ffffffffffffffff81111561338a5761338a61424b565b6040519080825280602002602001820160405280156133b3578160200160208202803683370190505b5092508067ffffffffffffffff8111156133cf576133cf61424b565b6040519080825280602002602001820160405280156133f8578160200160208202803683370190505b50915061340a85611e738a8a89612297565b60005b8781101561371957600089898381811061342957613429614560565b905060200201602081019061343e9190613f5f565b905060005b8381101561370457600073ffffffffffffffffffffffffffffffffffffffff1686828151811061347557613475614560565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141561352457600381815481106134ac576134ac614560565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168682815181106134e9576134e9614560565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604081208751829089908590811061355f5761355f614560565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff90811683528282019390935260409182016000908120938d168152600190930190529020546d010000000000000000000000000090046fffffffffffffffffffffffffffffffff16905080156136f157808683815181106135e3576135e3614560565b602002602001018181516135f791906145be565b90525073ffffffffffffffffffffffffffffffffffffffff83166000908152600160205260408120885182908a908690811061363557613635614560565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600d6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b50806136fc816145d6565b915050613443565b50508080613711906145d6565b91505061340d565b5060005b81811015613845576137628585838151811061373b5761373b614560565b602002602001015185848151811061375557613755614560565b6020026020010151613b06565b8473ffffffffffffffffffffffffffffffffffffffff1684828151811061378b5761378b614560565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fc052130bc4ef84580db505783484b067ea8b71b3bca78a7e12db7aea8658f0048a8786815181106137f4576137f4614560565b602002602001015160405161382b92919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a48061383d816145d6565b91505061371d565b50509550959350505050565b600080600080613862878787612856565b91509150600082821461397b576cffffffffffffffffffffffffff8211156138e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e4445585f4f564552464c4f57000000000000000000000000000000000000604482015260640161074a565b5086547fffffffffffffffffffffffffffffffffffffff00000000000000000000000000166cffffffffffffffffffffffffff8216178755600161392942613db5565b885463ffffffff919091167801000000000000000000000000000000000000000000000000027fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff9091161788556139d2565b61398442613db5565b885463ffffffff919091167801000000000000000000000000000000000000000000000000027fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff9091161788555b9097909650945050505050565b60005b815181101561077857613a4e828281518110613a0057613a00614560565b60200260200101516000015184848481518110613a1f57613a1f614560565b602002602001015160200151858581518110613a3d57613a3d614560565b6020026020010151604001516120e4565b80613a58816145d6565b9150506139e2565b60006fffffffffffffffffffffffffffffffff821115613b02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f3238206269747300000000000000000000000000000000000000000000000000606482015260840161074a565b5090565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603a60205260408082205490517f16beb9820000000000000000000000000000000000000000000000000000000081528785166004820152602481019390935260448301859052909216919082906316beb982906064016020604051808303816000875af1158015613b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bbd9190614849565b9050600181151514613c2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f5452414e534645525f4552524f52000000000000000000000000000000000000604482015260640161074a565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260018601602052604081205481906cffffffffffffffffffffffffff1681858214801590613d825773ffffffffffffffffffffffffffffffffffffffff8916600090815260018b016020526040902080547fffffffffffffffffffffffffffffffffffffff00000000000000000000000000166cffffffffffffffffffffffffff89161790558715613d8257613ce688888589613d91565b9150613cf182613a60565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260018c01602052604090208054600d90613d4b9084906d010000000000000000000000000090046fffffffffffffffffffffffffffffffff1661486b565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b90999098509650505050505050565b600080613d9e84866147ae565b613da890876147e9565b9290920495945050505050565b600063ffffffff821115613b02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201527f3220626974730000000000000000000000000000000000000000000000000000606482015260840161074a565b73ffffffffffffffffffffffffffffffffffffffff811681146111bb57600080fd5b60008060408385031215613e8057600080fd5b8235613e8b81613e4b565b91506020830135613e9b81613e4b565b809150509250929050565b60008083601f840112613eb857600080fd5b50813567ffffffffffffffff811115613ed057600080fd5b6020830191508360208260051b8501011115610fb757600080fd5b600080600080600060808688031215613f0357600080fd5b853567ffffffffffffffff811115613f1a57600080fd5b613f2688828901613ea6565b909650945050602086013592506040860135613f4181613e4b565b91506060860135613f5181613e4b565b809150509295509295909350565b600060208284031215613f7157600080fd5b8135613f7c81613e4b565b9392505050565b600080600060608486031215613f9857600080fd5b8335613fa381613e4b565b95602085013595506040909401359392505050565b60008060008060008060a08789031215613fd157600080fd5b863567ffffffffffffffff811115613fe857600080fd5b613ff489828a01613ea6565b90975095505060208701359350604087013561400f81613e4b565b9250606087013561401f81613e4b565b9150608087013561402f81613e4b565b809150509295509295509295565b60008060006040848603121561405257600080fd5b833567ffffffffffffffff81111561406957600080fd5b61407586828701613ea6565b909450925050602084013561408981613e4b565b809150509250925092565b600081518084526020808501945080840160005b838110156140da57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016140a8565b509495945050505050565b6040815260006140f86040830185614094565b82810360208481019190915284518083528582019282019060005b8181101561412f57845183529383019391830191600101614113565b5090979650505050505050565b60008060006060848603121561415157600080fd5b833561415c81613e4b565b9250602084013561416c81613e4b565b9150604084013561408981613e4b565b6000806000806060858703121561419257600080fd5b843567ffffffffffffffff8111156141a957600080fd5b6141b587828801613ea6565b9095509350506020850135915060408501356141d081613e4b565b939692955090935050565b602081526000613f7c6020830184614094565b6000806000806060858703121561420457600080fd5b843567ffffffffffffffff81111561421b57600080fd5b61422787828801613ea6565b909550935050602085013561423b81613e4b565b915060408501356141d081613e4b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561429d5761429d61424b565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156142ea576142ea61424b565b604052919050565b80356affffffffffffffffffffff8116811461430d57600080fd5b919050565b803563ffffffff8116811461430d57600080fd5b6000602080838503121561433957600080fd5b823567ffffffffffffffff8082111561435157600080fd5b818501915085601f83011261436557600080fd5b8135818111156143775761437761424b565b614385848260051b016142a3565b818152848101925060e09182028401850191888311156143a457600080fd5b938501935b828510156144485780858a0312156143c15760008081fd5b6143c961427a565b6143d2866142f2565b8152868601358782015260406143e9818801614312565b908201526060868101356143fc81613e4b565b9082015260808681013561440f81613e4b565b9082015260a08681013561442281613e4b565b9082015260c08681013561443581613e4b565b90820152845293840193928501926143a9565b50979650505050505050565b6000806020838503121561446757600080fd5b823567ffffffffffffffff81111561447e57600080fd5b61448a85828601613ea6565b90969095509350505050565b6000806000606084860312156144ab57600080fd5b83356144b681613e4b565b925060208401356144c681613e4b565b91506144d460408501614312565b90509250925092565b6000806000806000606086880312156144f557600080fd5b853561450081613e4b565b9450602086013567ffffffffffffffff8082111561451d57600080fd5b61452989838a01613ea6565b9096509450604088013591508082111561454257600080fd5b5061454f88828901613ea6565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156145d1576145d161458f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146085761460861458f565b5060010190565b60006fffffffffffffffffffffffffffffffff808316818114156146355761463561458f565b6001019392505050565b60006020828403121561465157600080fd5b5051919050565b600181815b808511156146b157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156146975761469761458f565b808516156146a457918102915b93841c939080029061465d565b509250929050565b6000826146c8575060016106c9565b816146d5575060006106c9565b81600181146146eb57600281146146f557614711565b60019150506106c9565b60ff8411156147065761470661458f565b50506001821b6106c9565b5060208310610133831016604e8410600b8410161715614734575081810a6106c9565b61473e8383614658565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156147705761477061458f565b029392505050565b6000613f7c60ff8416836146b9565b6000613f7c83836146b9565b6000602082840312156147a557600080fd5b613f7c826142f2565b6000828210156147c0576147c061458f565b500390565b600080604083850312156147d857600080fd5b505080516020909101519092909150565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148215761482161458f565b500290565b60006020828403121561483857600080fd5b815160ff81168114613f7c57600080fd5b60006020828403121561485b57600080fd5b81518015158114613f7c57600080fd5b60006fffffffffffffffffffffffffffffffff8083168185168083038211156148965761489661458f565b0194935050505056fea26469706673582212208dbd45bb3f10f2612620acfec3a0ec73a43a47a8623822d8d3050de86c0467dd64736f6c634300080a0033","opcodes":"PUSH1 0xA0 PUSH1 0x40 MSTORE PUSH1 0x0 PUSH1 0x5 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x16 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x499F CODESIZE SUB DUP1 PUSH3 0x499F DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x39 SWAP2 PUSH3 0x4B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 MSTORE PUSH3 0x7D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x5E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x48D5 PUSH3 0xCA PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x4F4 ADD MSTORE DUP2 DUP2 PUSH2 0x60C ADD MSTORE DUP2 DUP2 PUSH2 0xC97 ADD MSTORE DUP2 DUP2 PUSH2 0xFD6 ADD MSTORE DUP2 DUP2 PUSH2 0x167D ADD MSTORE DUP2 DUP2 PUSH2 0x1833 ADD MSTORE DUP2 DUP2 PUSH2 0x18DC ADD MSTORE PUSH2 0x19F7 ADD MSTORE PUSH2 0x48D5 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 0x1DA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x92074B08 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xBF90F63A GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xDDE43CBA GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xDDE43CBA EQ PUSH2 0x62E JUMPI DUP1 PUSH4 0xE15AC623 EQ PUSH2 0x636 JUMPI DUP1 PUSH4 0xF5CF673B EQ PUSH2 0x649 JUMPI DUP1 PUSH4 0xF996868B EQ PUSH2 0x65C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBF90F63A EQ PUSH2 0x5CE JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x5E1 JUMPI DUP1 PUSH4 0xC5A7B538 EQ PUSH2 0x5F4 JUMPI DUP1 PUSH4 0xCBCBB507 EQ PUSH2 0x607 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9FF55DB9 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x9FF55DB9 EQ PUSH2 0x58D JUMPI DUP1 PUSH4 0xB022418C EQ PUSH2 0x5A0 JUMPI DUP1 PUSH4 0xB45AC1A9 EQ PUSH2 0x5B3 JUMPI DUP1 PUSH4 0xBB492BF5 EQ PUSH2 0x5BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x92074B08 EQ PUSH2 0x4F2 JUMPI DUP1 PUSH4 0x955C2AD7 EQ PUSH2 0x518 JUMPI DUP1 PUSH4 0x9EFD6F72 EQ PUSH2 0x52B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5453BA10 GT PUSH2 0x17C JUMPI DUP1 PUSH4 0x70674AB9 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x70674AB9 EQ PUSH2 0x3A2 JUMPI DUP1 PUSH4 0x74D945EC EQ PUSH2 0x3B5 JUMPI DUP1 PUSH4 0x7EFF4BA8 EQ PUSH2 0x3EE JUMPI DUP1 PUSH4 0x886FE70B EQ PUSH2 0x4CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5453BA10 EQ PUSH2 0x323 JUMPI DUP1 PUSH4 0x57B89883 EQ PUSH2 0x336 JUMPI DUP1 PUSH4 0x5F130B24 EQ PUSH2 0x349 JUMPI DUP1 PUSH4 0x6657732F EQ PUSH2 0x382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x31873E2E GT PUSH2 0x1B8 JUMPI DUP1 PUSH4 0x31873E2E EQ PUSH2 0x276 JUMPI DUP1 PUSH4 0x33028B99 EQ PUSH2 0x28B JUMPI DUP1 PUSH4 0x4C0369C3 EQ PUSH2 0x29E JUMPI DUP1 PUSH4 0x533F542A EQ PUSH2 0x2BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1B839C77 EQ PUSH2 0x1DF JUMPI DUP1 PUSH4 0x236300DC EQ PUSH2 0x205 JUMPI DUP1 PUSH4 0x2A17BF60 EQ PUSH2 0x218 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1F2 PUSH2 0x1ED CALLDATASIZE PUSH1 0x4 PUSH2 0x3E6D JUMP JUMPDEST PUSH2 0x66F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1F2 PUSH2 0x213 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EEB JUMP JUMPDEST PUSH2 0x6CF JUMP JUMPDEST PUSH2 0x251 PUSH2 0x226 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F5F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1FC JUMP JUMPDEST PUSH2 0x289 PUSH2 0x284 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F83 JUMP JUMPDEST PUSH2 0x76C JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1F2 PUSH2 0x299 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FB8 JUMP JUMPDEST PUSH2 0x77D JUMP JUMPDEST PUSH2 0x2B1 PUSH2 0x2AC CALLDATASIZE PUSH1 0x4 PUSH2 0x403D JUMP JUMPDEST PUSH2 0x929 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1FC SWAP3 SWAP2 SWAP1 PUSH2 0x40E5 JUMP JUMPDEST PUSH2 0x1F2 PUSH2 0x2CD CALLDATASIZE PUSH1 0x4 PUSH2 0x413C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP7 DUP7 AND DUP6 MSTORE DUP3 MSTORE DUP1 DUP5 KECCAK256 SWAP5 DUP9 AND DUP5 MSTORE SWAP4 SWAP1 SWAP2 ADD SWAP1 MSTORE KECCAK256 SLOAD PUSH13 0xFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x289 PUSH2 0x331 CALLDATASIZE PUSH1 0x4 PUSH2 0x3E6D JUMP JUMPDEST PUSH2 0xC7F JUMP JUMPDEST PUSH2 0x1F2 PUSH2 0x344 CALLDATASIZE PUSH1 0x4 PUSH2 0x417C JUMP JUMPDEST PUSH2 0xD2C JUMP JUMPDEST PUSH2 0x251 PUSH2 0x357 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F5F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH2 0x395 PUSH2 0x390 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F5F JUMP JUMPDEST PUSH2 0xD46 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1FC SWAP2 SWAP1 PUSH2 0x41DB JUMP JUMPDEST PUSH2 0x1F2 PUSH2 0x3B0 CALLDATASIZE PUSH1 0x4 PUSH2 0x41EE JUMP JUMPDEST PUSH2 0xE98 JUMP JUMPDEST PUSH2 0x251 PUSH2 0x3C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F5F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x39 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH2 0x4AA PUSH2 0x3FC CALLDATASIZE PUSH1 0x4 PUSH2 0x3E6D 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 PUSH13 0xFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND SWAP2 PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF PUSH14 0x100000000000000000000000000 DUP4 DIV AND SWAP2 PUSH4 0xFFFFFFFF PUSH25 0x1000000000000000000000000000000000000000000000000 DUP3 DIV DUP2 AND SWAP3 PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 SWAP3 DIV AND SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD PUSH2 0x1FC JUMP JUMPDEST PUSH2 0x4DD PUSH2 0x4D8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3E6D JUMP JUMPDEST PUSH2 0xEAF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1FC JUMP JUMPDEST PUSH32 0x0 PUSH2 0x251 JUMP JUMPDEST PUSH2 0x289 PUSH2 0x526 CALLDATASIZE PUSH1 0x4 PUSH2 0x4326 JUMP JUMPDEST PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x57B PUSH2 0x539 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F5F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1FC JUMP JUMPDEST PUSH2 0x2B1 PUSH2 0x59B CALLDATASIZE PUSH1 0x4 PUSH2 0x41EE JUMP JUMPDEST PUSH2 0x11BE JUMP JUMPDEST PUSH2 0x1F2 PUSH2 0x5AE CALLDATASIZE PUSH1 0x4 PUSH2 0x3E6D JUMP JUMPDEST PUSH2 0x136D JUMP JUMPDEST PUSH2 0x395 PUSH2 0x1426 JUMP JUMPDEST PUSH2 0x2B1 PUSH2 0x5C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x403D JUMP JUMPDEST PUSH2 0x1495 JUMP JUMPDEST PUSH2 0x2B1 PUSH2 0x5DC CALLDATASIZE PUSH1 0x4 PUSH2 0x4454 JUMP JUMPDEST PUSH2 0x152E JUMP JUMPDEST PUSH2 0x289 PUSH2 0x5EF CALLDATASIZE PUSH1 0x4 PUSH2 0x3F5F JUMP JUMPDEST PUSH2 0x1549 JUMP JUMPDEST PUSH2 0x289 PUSH2 0x602 CALLDATASIZE PUSH1 0x4 PUSH2 0x4496 JUMP JUMPDEST PUSH2 0x1665 JUMP JUMPDEST PUSH2 0x251 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x1F2 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH2 0x289 PUSH2 0x644 CALLDATASIZE PUSH1 0x4 PUSH2 0x3E6D JUMP JUMPDEST PUSH2 0x181B JUMP JUMPDEST PUSH2 0x289 PUSH2 0x657 CALLDATASIZE PUSH1 0x4 PUSH2 0x3E6D JUMP JUMPDEST PUSH2 0x18C4 JUMP JUMPDEST PUSH2 0x289 PUSH2 0x66A CALLDATASIZE PUSH1 0x4 PUSH2 0x44DD JUMP JUMPDEST PUSH2 0x19DF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x753 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F544F5F414444524553530000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x762 DUP7 DUP7 DUP7 CALLER CALLER DUP9 DUP9 PUSH2 0x1E53 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x778 CALLER DUP5 DUP4 DUP6 PUSH2 0x20E4 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x39 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP2 CALLER SWAP2 DUP7 SWAP2 AND DUP3 EQ PUSH2 0x813 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x434C41494D45525F554E415554484F52495A4544000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH2 0x890 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F555345525F41444452455353000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH2 0x90D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F544F5F414444524553530000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH2 0x91C DUP10 DUP10 DUP10 CALLER DUP11 DUP11 DUP11 PUSH2 0x1E53 JUMP JUMPDEST SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x939 DUP7 DUP7 DUP7 PUSH2 0x2297 JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x957 JUMPI PUSH2 0x957 PUSH2 0x424B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x980 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x99D JUMPI PUSH2 0x99D PUSH2 0x424B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x9C6 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xC74 JUMPI PUSH1 0x0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0xC61 JUMPI PUSH1 0x3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x9F4 JUMPI PUSH2 0x9F4 PUSH2 0x4560 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xA31 JUMPI PUSH2 0xA31 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x1 PUSH1 0x0 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xA81 JUMPI PUSH2 0xA81 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 ADD PUSH1 0x0 DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xADE JUMPI PUSH2 0xADE PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x1 ADD PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 ADD PUSH1 0xD SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xBA4 JUMPI PUSH2 0xBA4 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MLOAD PUSH2 0xBB8 SWAP2 SWAP1 PUSH2 0x45BE JUMP JUMPDEST SWAP1 MSTORE POP DUP3 MLOAD DUP4 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0xBCF JUMPI PUSH2 0xBCF PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH1 0x0 EQ ISZERO PUSH2 0xBE8 JUMPI PUSH2 0xC4F JUMP JUMPDEST PUSH2 0xC25 DUP7 DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xBFE JUMPI PUSH2 0xBFE PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0xC18 JUMPI PUSH2 0xC18 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2495 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xC37 JUMPI PUSH2 0xC37 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MLOAD PUSH2 0xC4B SWAP2 SWAP1 PUSH2 0x45BE JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST DUP1 PUSH2 0xC59 DUP2 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x9D8 JUMP JUMPDEST POP DUP1 PUSH2 0xC6C DUP2 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x9CC JUMP JUMPDEST POP POP JUMPDEST SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0xD1E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F454D495353494F4E5F4D414E414745520000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH2 0xD28 DUP3 DUP3 PUSH2 0x2563 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD3D DUP6 DUP6 DUP6 CALLER CALLER CALLER DUP9 PUSH2 0x1E53 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH1 0x60 SWAP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xDA0 JUMPI PUSH2 0xDA0 PUSH2 0x424B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xDC9 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT ISZERO PUSH2 0xE90 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP7 MSTORE SWAP4 ADD SWAP1 SWAP2 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP5 MLOAD SWAP3 AND SWAP2 DUP5 SWAP2 SWAP1 DUP2 LT PUSH2 0xE59 JUMPI PUSH2 0xE59 PUSH2 0x4560 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE DUP1 PUSH2 0xE88 DUP2 PUSH2 0x460F JUMP JUMPDEST SWAP2 POP POP PUSH2 0xDCF JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD3D DUP4 DUP4 PUSH2 0xEAA DUP9 DUP9 DUP9 PUSH2 0x2297 JUMP JUMPDEST PUSH2 0x26B7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP7 AND DUP4 MSTORE SWAP4 DUP2 MSTORE DUP4 DUP3 KECCAK256 DUP5 MLOAD PUSH32 0xB1BF962D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP5 MLOAD SWAP3 SWAP5 DUP6 SWAP5 SWAP2 SWAP4 PUSH2 0xFB1 SWAP4 DUP6 SWAP4 SWAP3 PUSH4 0xB1BF962D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF3D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF61 SWAP2 SWAP1 PUSH2 0x463F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH2 0xFAC SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND PUSH1 0xA PUSH2 0x4778 JUMP JUMPDEST PUSH2 0x2856 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x105D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F454D495353494F4E5F4D414E414745520000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x11B1 JUMPI DUP2 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x107B JUMPI PUSH2 0x107B PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB1BF962D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10F5 SWAP2 SWAP1 PUSH2 0x463F JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1107 JUMPI PUSH2 0x1107 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x115B DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x112C JUMPI PUSH2 0x112C PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x80 ADD MLOAD DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x114A JUMPI PUSH2 0x114A PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0xA0 ADD MLOAD PUSH2 0x2962 JUMP JUMPDEST PUSH2 0x119F DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1170 JUMPI PUSH2 0x1170 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x80 ADD MLOAD DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x118E JUMPI PUSH2 0x118E PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0xC0 ADD MLOAD PUSH2 0x2563 JUMP JUMPDEST DUP1 PUSH2 0x11A9 DUP2 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1060 JUMP JUMPDEST POP PUSH2 0x11BB DUP2 PUSH2 0x2AC8 JUMP JUMPDEST POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x39 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x60 SWAP2 DUP3 SWAP2 CALLER SWAP2 DUP7 SWAP2 AND DUP3 EQ PUSH2 0x1257 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x434C41494D45525F554E415554484F52495A4544000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH2 0x12D4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F555345525F41444452455353000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH2 0x1351 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F544F5F414444524553530000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH2 0x135E DUP9 DUP9 CALLER DUP10 DUP10 PUSH2 0x3369 JUMP JUMPDEST SWAP4 POP SWAP4 POP POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 JUMPDEST PUSH1 0x4 SLOAD DUP2 LT ISZERO PUSH2 0xE90 JUMPI PUSH1 0x1 PUSH1 0x0 PUSH1 0x4 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x1394 JUMPI PUSH2 0x1394 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP5 MSTORE DUP4 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x40 SWAP3 DUP4 ADD DUP3 KECCAK256 DUP9 DUP6 AND DUP4 MSTORE DUP2 MSTORE DUP3 DUP3 KECCAK256 SWAP4 DUP10 AND DUP3 MSTORE PUSH1 0x1 SWAP1 SWAP4 ADD SWAP1 SWAP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x1412 SWAP1 PUSH14 0x100000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH2 0x45BE JUMP JUMPDEST SWAP2 POP DUP1 PUSH2 0x141E DUP2 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1373 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x148B JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1460 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x1515 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F544F5F414444524553530000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH2 0x1522 DUP6 DUP6 CALLER CALLER DUP8 PUSH2 0x3369 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH2 0x153E DUP5 DUP5 CALLER CALLER CALLER PUSH2 0x3369 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x155C JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x1568 JUMPI POP PUSH1 0x5 SLOAD DUP2 GT JUMPDEST PUSH2 0x15F4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x74A JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1632 JUMPI PUSH1 0x6 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0x5 DUP3 SWAP1 SSTORE JUMPDEST DUP1 ISZERO PUSH2 0x778 JUMPI PUSH1 0x6 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x1704 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F454D495353494F4E5F4D414E414745520000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH4 0xFFFFFFFF DUP10 DUP2 AND DUP3 DUP2 MUL SWAP4 DUP5 OR SWAP6 DUP7 SWAP1 SSTORE DUP8 MLOAD PUSH14 0x100000000000000000000000000 SWAP1 SWAP7 DIV PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF AND DUP1 DUP8 MSTORE SWAP7 DUP7 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP1 DUP4 DIV AND SWAP5 DUP4 ADD DUP6 SWAP1 MSTORE PUSH1 0x60 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH13 0xFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR PUSH1 0x80 DUP3 ADD MSTORE SWAP1 SWAP3 SWAP2 SWAP1 PUSH32 0xAC1777479F07F3E7C34DA8402139D54027A6A260CAAAE168BDEE825CA5580DC5 SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x18BA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F454D495353494F4E5F4D414E414745520000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH2 0xD28 DUP3 DUP3 PUSH2 0x2962 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x1963 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F454D495353494F4E5F4D414E414745520000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x39 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 DUP7 AND SWAP5 DUP6 OR SWAP1 SSTORE MLOAD PUSH32 0x4925EAFC82D0C4D67889898EEED64B18488AB19811E61620F387026DEC126A28 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x1A7E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F454D495353494F4E5F4D414E414745520000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST DUP3 DUP2 EQ PUSH2 0x1AE7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F494E50555400000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1E4B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 DUP2 DUP2 DUP9 DUP9 DUP7 DUP2 DUP2 LT PUSH2 0x1B2C JUMPI PUSH2 0x1B2C PUSH2 0x4560 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1B41 SWAP2 SWAP1 PUSH2 0x3F5F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 PUSH1 0x2 DUP4 ADD SLOAD SWAP1 SWAP2 POP PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1BB7 JUMPI POP DUP2 SLOAD PUSH25 0x1000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND ISZERO ISZERO JUMPDEST PUSH2 0x1C1D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x444953545249425554494F4E5F444F45535F4E4F545F45584953540000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1CA2 DUP4 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB1BF962D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C6E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C92 SWAP2 SWAP1 PUSH2 0x463F JUMP JUMPDEST PUSH2 0x1C9D DUP6 PUSH1 0xA PUSH2 0x4787 JUMP JUMPDEST PUSH2 0x3851 JUMP JUMPDEST POP DUP4 SLOAD SWAP1 SWAP2 POP PUSH14 0x100000000000000000000000000 SWAP1 DIV PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF AND DUP8 DUP8 DUP8 DUP2 DUP2 LT PUSH2 0x1CD8 JUMPI PUSH2 0x1CD8 PUSH2 0x4560 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1CED SWAP2 SWAP1 PUSH2 0x4793 JUMP JUMPDEST DUP5 SLOAD PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH14 0x100000000000000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFF0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND OR DUP5 SSTORE DUP10 DUP10 DUP8 DUP2 DUP2 LT PUSH2 0x1D48 JUMPI PUSH2 0x1D48 PUSH2 0x4560 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1D5D SWAP2 SWAP1 PUSH2 0x3F5F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xAC1777479F07F3E7C34DA8402139D54027A6A260CAAAE168BDEE825CA5580DC5 DUP4 DUP12 DUP12 DUP12 DUP2 DUP2 LT PUSH2 0x1DBE JUMPI PUSH2 0x1DBE PUSH2 0x4560 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1DD3 SWAP2 SWAP1 PUSH2 0x4793 JUMP JUMPDEST DUP9 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP DUP1 DUP1 PUSH2 0x1E43 SWAP1 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1AEA JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP6 PUSH2 0x1E62 JUMPI POP PUSH1 0x0 PUSH2 0x20D9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E78 DUP6 PUSH2 0x1E73 DUP12 DUP12 DUP10 PUSH2 0x2297 JUMP JUMPDEST PUSH2 0x39DF JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP9 DUP2 LT ISZERO PUSH2 0x205F JUMPI PUSH1 0x0 DUP11 DUP11 DUP4 DUP2 DUP2 LT PUSH2 0x1E97 JUMPI PUSH2 0x1E97 PUSH2 0x4560 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1EAC SWAP2 SWAP1 PUSH2 0x3F5F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP12 DUP7 AND DUP6 MSTORE DUP3 MSTORE DUP1 DUP5 KECCAK256 SWAP5 DUP14 AND DUP5 MSTORE SWAP4 SWAP1 SWAP2 ADD SWAP1 MSTORE KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH2 0x1F1C SWAP1 PUSH14 0x100000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH2 0x45BE JUMP JUMPDEST SWAP3 POP DUP9 DUP4 GT PUSH2 0x1F8F JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP11 DUP7 AND DUP6 MSTORE DUP3 MSTORE DUP1 DUP5 KECCAK256 SWAP5 DUP13 AND DUP5 MSTORE SWAP4 SWAP1 SWAP2 ADD SWAP1 MSTORE KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 SSTORE PUSH2 0x204C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F9B DUP11 DUP6 PUSH2 0x47AE JUMP JUMPDEST SWAP1 POP PUSH2 0x1FA7 DUP2 DUP6 PUSH2 0x47AE JUMP JUMPDEST SWAP4 POP PUSH2 0x1FB2 DUP2 PUSH2 0x3A60 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP12 DUP9 AND DUP6 MSTORE DUP3 MSTORE DUP1 DUP5 KECCAK256 SWAP7 DUP14 AND DUP5 MSTORE SWAP6 SWAP1 SWAP2 ADD SWAP1 MSTORE SWAP3 SWAP1 SWAP3 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND PUSH14 0x100000000000000000000000000 MUL PUSH32 0xFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE POP PUSH2 0x205F JUMP JUMPDEST POP DUP1 PUSH2 0x2057 DUP2 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1E7B JUMP JUMPDEST POP DUP1 PUSH2 0x206F JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x20D9 JUMP JUMPDEST PUSH2 0x207A DUP5 DUP5 DUP4 PUSH2 0x3B06 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP5 SWAP1 MSTORE DUP1 DUP8 AND SWAP3 DUP7 DUP3 AND SWAP3 SWAP2 DUP10 AND SWAP2 PUSH32 0xC052130BC4EF84580DB505783484B067EA8B71B3BCA78A7E12DB7AEA8658F004 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 SWAP1 POP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH1 0xFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV AND PUSH1 0xA EXP SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 PUSH2 0x2146 JUMPI POP POP PUSH2 0x2291 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT ISZERO PUSH2 0x228D JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP6 MSTORE SWAP3 DUP4 ADD DUP3 MSTORE DUP1 DUP5 KECCAK256 SLOAD SWAP1 SWAP5 AND DUP1 DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP2 DUP2 KECCAK256 SWAP1 DUP1 PUSH2 0x21C3 DUP4 DUP10 DUP10 PUSH2 0x3851 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP1 PUSH2 0x21D7 DUP6 DUP14 DUP14 DUP8 DUP14 PUSH2 0x3C32 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP3 DUP1 PUSH2 0x21E4 JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0x227B JUMPI DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP15 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x3303FACD24627943A92E9DC87CFBB34B15C49B726EEC3AD3487C16BE9AB8EFE8 DUP8 DUP9 DUP8 PUSH1 0x40 MLOAD PUSH2 0x2272 SWAP4 SWAP3 SWAP2 SWAP1 SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP5 ADD SWAP4 POP PUSH2 0x2149 SWAP3 POP POP POP JUMP JUMPDEST POP POP POP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x22B2 JUMPI PUSH2 0x22B2 PUSH2 0x424B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x231D JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x230A PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x22D0 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE90 JUMPI DUP5 DUP5 DUP3 DUP2 DUP2 LT PUSH2 0x233D JUMPI PUSH2 0x233D PUSH2 0x4560 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x2352 SWAP2 SWAP1 PUSH2 0x3F5F JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2364 JUMPI PUSH2 0x2364 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 LT PUSH2 0x239B JUMPI PUSH2 0x239B PUSH2 0x4560 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x23B0 SWAP2 SWAP1 PUSH2 0x3F5F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xAFBCDC900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xAFBCDC9 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x241D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2441 SWAP2 SWAP1 PUSH2 0x47C5 JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2453 JUMPI PUSH2 0x2453 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2470 JUMPI PUSH2 0x2470 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH1 0x40 ADD SWAP2 SWAP1 SWAP2 MSTORE MSTORE DUP1 PUSH2 0x248D DUP2 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2323 JUMP JUMPDEST DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP8 DUP7 AND DUP6 MSTORE DUP3 MSTORE DUP1 DUP5 KECCAK256 DUP7 MLOAD SWAP1 SWAP6 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE DUP2 KECCAK256 PUSH1 0x2 ADD SLOAD SWAP1 SWAP2 SWAP1 DUP3 SWAP1 PUSH2 0x2501 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND PUSH1 0xA PUSH2 0x4778 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2514 DUP4 DUP7 PUSH1 0x40 ADD MLOAD DUP5 PUSH2 0x2856 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP9 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP9 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP2 SWAP4 POP PUSH2 0x20D9 SWAP3 POP SWAP1 DUP4 SWAP1 PUSH13 0xFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH2 0x3D91 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x50D25BCD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x25B0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x25D4 SWAP2 SWAP1 PUSH2 0x463F JUMP JUMPDEST SGT PUSH2 0x263B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F5241434C455F4D5553545F52455455524E5F50524943450000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3B PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 DUP7 AND SWAP5 DUP6 OR SWAP1 SSTORE MLOAD PUSH32 0x1A1CD5483E52E60B9FF7F3B9D1DB3BBD9E9D21C6324AD3A8C79DBA9B75E62F4D SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0xE90 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x26D6 JUMPI PUSH2 0x26D6 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x2785 JUMPI PUSH1 0x1 PUSH1 0x0 DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2700 JUMPI PUSH2 0x2700 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP4 MSTORE DUP3 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 DUP9 DUP6 AND DUP3 MSTORE DUP3 MSTORE DUP3 DUP2 KECCAK256 SWAP4 DUP10 AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP4 ADD SWAP1 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x277E SWAP1 PUSH14 0x100000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH2 0x45BE JUMP JUMPDEST SWAP2 POP PUSH2 0x2844 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x279B JUMPI PUSH2 0x279B PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP4 MSTORE DUP3 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 DUP9 DUP6 AND DUP3 MSTORE DUP3 MSTORE DUP3 DUP2 KECCAK256 SWAP4 DUP10 AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP4 ADD SWAP1 MSTORE SWAP1 KECCAK256 SLOAD DUP4 MLOAD PUSH14 0x100000000000000000000000000 SWAP1 SWAP2 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0x282D SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP7 SWAP1 DUP2 LT PUSH2 0xC18 JUMPI PUSH2 0xC18 PUSH2 0x4560 JUMP JUMPDEST PUSH2 0x2837 SWAP2 SWAP1 PUSH2 0x45BE JUMP JUMPDEST PUSH2 0x2841 SWAP1 DUP4 PUSH2 0x45BE JUMP JUMPDEST SWAP2 POP JUMPDEST DUP1 PUSH2 0x284E DUP2 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x26BB JUMP JUMPDEST DUP3 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH13 0xFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND SWAP1 PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 DUP3 DIV DUP2 AND SWAP2 PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF PUSH14 0x100000000000000000000000000 DUP3 DIV AND SWAP2 PUSH25 0x1000000000000000000000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 ISZERO DUP1 PUSH2 0x28DE JUMPI POP DUP8 ISZERO JUMPDEST DUP1 PUSH2 0x28E8 JUMPI POP TIMESTAMP DUP2 EQ JUMPDEST DUP1 PUSH2 0x28F3 JUMPI POP DUP3 DUP2 LT ISZERO JUMPDEST ISZERO PUSH2 0x2907 JUMPI DUP4 DUP5 SWAP6 POP SWAP6 POP POP POP POP POP PUSH2 0xC77 JUMP JUMPDEST PUSH1 0x0 DUP4 TIMESTAMP GT PUSH2 0x2916 JUMPI TIMESTAMP PUSH2 0x2918 JUMP JUMPDEST DUP4 JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2926 DUP4 DUP4 PUSH2 0x47AE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP10 PUSH2 0x2935 DUP4 DUP8 PUSH2 0x47E9 JUMP JUMPDEST PUSH2 0x293F SWAP2 SWAP1 PUSH2 0x47E9 JUMP JUMPDEST DUP12 SWAP1 DIV SWAP1 POP DUP7 PUSH2 0x294F DUP2 DUP4 PUSH2 0x45BE JUMP JUMPDEST SWAP9 POP SWAP9 POP POP POP POP POP POP POP POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x29DF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53545241544547595F43414E5F4E4F545F42455F5A45524F0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH1 0x1 DUP2 EXTCODESIZE ISZERO ISZERO EQ PUSH2 0x2A4C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53545241544547595F4D5553545F42455F434F4E545241435400000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 DUP7 AND SWAP5 DUP6 OR SWAP1 SSTORE MLOAD PUSH32 0x8CA1D928F1D72493A6B78C4F74AABDE976BC37FFE2570F2A1CE5A8ABD3DDE0AA SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xD28 JUMPI PUSH1 0x1 PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2AEA JUMPI PUSH2 0x2AEA PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2BB6 JUMPI PUSH1 0x4 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2B51 JUMPI PUSH2 0x2B51 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x60 ADD MLOAD DUP3 SLOAD PUSH1 0x1 DUP2 ADD DUP5 SSTORE PUSH1 0x0 SWAP4 DUP5 MSTORE SWAP2 SWAP1 SWAP3 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMPDEST PUSH1 0x0 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2BCA JUMPI PUSH2 0x2BCA PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C20 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2C44 SWAP2 SWAP1 PUSH2 0x4826 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x2C5A JUMPI PUSH2 0x2C5A PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x2 ADD PUSH1 0x10 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 PUSH1 0xFF AND MUL OR SWAP1 SSTORE PUSH1 0xFF AND SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x2CD7 JUMPI PUSH2 0x2CD7 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 ADD PUSH1 0x0 DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x2D34 JUMPI PUSH2 0x2D34 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 POP PUSH25 0x1000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x2FA3 JUMPI DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2DA5 JUMPI PUSH2 0x2DA5 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x80 ADD MLOAD PUSH1 0x1 PUSH1 0x0 DUP7 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x2DC7 JUMPI PUSH2 0x2DC7 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x1 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP9 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x2E28 JUMPI PUSH2 0x2E28 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x2 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x0 DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x2F14 JUMPI PUSH2 0x2F14 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 PUSH1 0x2 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH2 0x2F6B DUP4 PUSH2 0x460F JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP JUMPDEST PUSH1 0x2 PUSH1 0x0 DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x2FB9 JUMPI PUSH2 0x2FB9 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x30E3 JUMPI PUSH1 0x1 PUSH1 0x2 PUSH1 0x0 DUP7 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x300D JUMPI PUSH2 0x300D PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH1 0x3 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x307E JUMPI PUSH2 0x307E PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x80 ADD MLOAD DUP3 SLOAD PUSH1 0x1 DUP2 ADD DUP5 SSTORE PUSH1 0x0 SWAP4 DUP5 MSTORE SWAP2 SWAP1 SWAP3 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMPDEST PUSH1 0x0 PUSH2 0x3114 DUP3 DUP7 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x30FB JUMPI PUSH2 0x30FB PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0xA PUSH2 0x1C9D SWAP2 SWAP1 PUSH2 0x4787 JUMP JUMPDEST POP DUP3 SLOAD DUP7 MLOAD SWAP2 SWAP3 POP PUSH14 0x100000000000000000000000000 DUP2 DIV PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 SWAP2 DIV PUSH4 0xFFFFFFFF AND SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP2 LT PUSH2 0x3175 JUMPI PUSH2 0x3175 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD MLOAD DUP5 SLOAD PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH14 0x100000000000000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFF0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND OR DUP5 SSTORE DUP7 MLOAD DUP8 SWAP1 DUP8 SWAP1 DUP2 LT PUSH2 0x31DD JUMPI PUSH2 0x31DD PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD DUP5 SLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND OR DUP5 SSTORE DUP7 MLOAD DUP8 SWAP1 DUP8 SWAP1 DUP2 LT PUSH2 0x324C JUMPI PUSH2 0x324C PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x3280 JUMPI PUSH2 0x3280 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xAC1777479F07F3E7C34DA8402139D54027A6A260CAAAE168BDEE825CA5580DC5 DUP5 DUP11 DUP11 DUP2 MLOAD DUP2 LT PUSH2 0x32D6 JUMPI PUSH2 0x32D6 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP6 DUP13 DUP13 DUP2 MLOAD DUP2 LT PUSH2 0x32F5 JUMPI PUSH2 0x32F5 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD DUP10 PUSH1 0x40 MLOAD PUSH2 0x3349 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 AND DUP2 MSTORE SWAP4 SWAP1 SWAP5 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH4 0xFFFFFFFF SWAP2 DUP3 AND PUSH1 0x40 DUP5 ADD MSTORE AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP DUP1 DUP1 PUSH2 0x3361 SWAP1 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2ACB JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x60 SWAP1 DUP2 SWAP1 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x338A JUMPI PUSH2 0x338A PUSH2 0x424B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x33B3 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x33CF JUMPI PUSH2 0x33CF PUSH2 0x424B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x33F8 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH2 0x340A DUP6 PUSH2 0x1E73 DUP11 DUP11 DUP10 PUSH2 0x2297 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP8 DUP2 LT ISZERO PUSH2 0x3719 JUMPI PUSH1 0x0 DUP10 DUP10 DUP4 DUP2 DUP2 LT PUSH2 0x3429 JUMPI PUSH2 0x3429 PUSH2 0x4560 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x343E SWAP2 SWAP1 PUSH2 0x3F5F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3704 JUMPI PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3475 JUMPI PUSH2 0x3475 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x3524 JUMPI PUSH1 0x3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x34AC JUMPI PUSH2 0x34AC PUSH2 0x4560 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x34E9 JUMPI PUSH2 0x34E9 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP8 MLOAD DUP3 SWAP1 DUP10 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0x355F JUMPI PUSH2 0x355F PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP4 MSTORE DUP3 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP4 DUP14 AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP4 ADD SWAP1 MSTORE SWAP1 KECCAK256 SLOAD PUSH14 0x100000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x36F1 JUMPI DUP1 DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x35E3 JUMPI PUSH2 0x35E3 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MLOAD PUSH2 0x35F7 SWAP2 SWAP1 PUSH2 0x45BE JUMP JUMPDEST SWAP1 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP9 MLOAD DUP3 SWAP1 DUP11 SWAP1 DUP7 SWAP1 DUP2 LT PUSH2 0x3635 JUMPI PUSH2 0x3635 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x1 ADD PUSH1 0x0 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 ADD PUSH1 0xD PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST POP DUP1 PUSH2 0x36FC DUP2 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x3443 JUMP JUMPDEST POP POP DUP1 DUP1 PUSH2 0x3711 SWAP1 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x340D JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3845 JUMPI PUSH2 0x3762 DUP6 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x373B JUMPI PUSH2 0x373B PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3755 JUMPI PUSH2 0x3755 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3B06 JUMP JUMPDEST DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x378B JUMPI PUSH2 0x378B PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xC052130BC4EF84580DB505783484B067EA8B71B3BCA78A7E12DB7AEA8658F004 DUP11 DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x37F4 JUMPI PUSH2 0x37F4 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x382B SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 DUP1 PUSH2 0x383D DUP2 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x371D JUMP JUMPDEST POP POP SWAP6 POP SWAP6 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3862 DUP8 DUP8 DUP8 PUSH2 0x2856 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 DUP3 EQ PUSH2 0x397B JUMPI PUSH13 0xFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x38E6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E4445585F4F564552464C4F57000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST POP DUP7 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000 AND PUSH13 0xFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND OR DUP8 SSTORE PUSH1 0x1 PUSH2 0x3929 TIMESTAMP PUSH2 0x3DB5 JUMP JUMPDEST DUP9 SLOAD PUSH4 0xFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH25 0x1000000000000000000000000000000000000000000000000 MUL PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND OR DUP9 SSTORE PUSH2 0x39D2 JUMP JUMPDEST PUSH2 0x3984 TIMESTAMP PUSH2 0x3DB5 JUMP JUMPDEST DUP9 SLOAD PUSH4 0xFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH25 0x1000000000000000000000000000000000000000000000000 MUL PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND OR DUP9 SSTORE JUMPDEST SWAP1 SWAP8 SWAP1 SWAP7 POP SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x778 JUMPI PUSH2 0x3A4E DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3A00 JUMPI PUSH2 0x3A00 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP5 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3A1F JUMPI PUSH2 0x3A1F PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x3A3D JUMPI PUSH2 0x3A3D PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x20E4 JUMP JUMPDEST DUP1 PUSH2 0x3A58 DUP2 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x39E2 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x3B02 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x74A JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SLOAD SWAP1 MLOAD PUSH32 0x16BEB98200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP8 DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x44 DUP4 ADD DUP6 SWAP1 MSTORE SWAP1 SWAP3 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH4 0x16BEB982 SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3B99 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3BBD SWAP2 SWAP1 PUSH2 0x4849 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 ISZERO ISZERO EQ PUSH2 0x3C2B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5452414E534645525F4552524F52000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP2 SWAP1 PUSH13 0xFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 DUP6 DUP3 EQ DUP1 ISZERO SWAP1 PUSH2 0x3D82 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP12 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000 AND PUSH13 0xFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND OR SWAP1 SSTORE DUP8 ISZERO PUSH2 0x3D82 JUMPI PUSH2 0x3CE6 DUP9 DUP9 DUP6 DUP10 PUSH2 0x3D91 JUMP JUMPDEST SWAP2 POP PUSH2 0x3CF1 DUP3 PUSH2 0x3A60 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP13 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xD SWAP1 PUSH2 0x3D4B SWAP1 DUP5 SWAP1 PUSH14 0x100000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x486B JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3D9E DUP5 DUP7 PUSH2 0x47AE JUMP JUMPDEST PUSH2 0x3DA8 SWAP1 DUP8 PUSH2 0x47E9 JUMP JUMPDEST SWAP3 SWAP1 SWAP3 DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 GT ISZERO PUSH2 0x3B02 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2033 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3220626974730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x74A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x11BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3E80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3E8B DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3E9B DUP2 PUSH2 0x3E4B JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x3EB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3ED0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0xFB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3F03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3F1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3F26 DUP9 DUP3 DUP10 ADD PUSH2 0x3EA6 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x3F41 DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x3F51 DUP2 PUSH2 0x3E4B JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3F71 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3F7C DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3F98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3FA3 DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x3FD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3FE8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3FF4 DUP10 DUP3 DUP11 ADD PUSH2 0x3EA6 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0x400F DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0x401F DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH2 0x402F DUP2 PUSH2 0x3E4B JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4052 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4069 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4075 DUP7 DUP3 DUP8 ADD PUSH2 0x3EA6 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x4089 DUP2 PUSH2 0x3E4B JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x40DA JUMPI DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x40A8 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x40F8 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x4094 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP5 MLOAD DUP1 DUP4 MSTORE DUP6 DUP3 ADD SWAP3 DUP3 ADD SWAP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x412F JUMPI DUP5 MLOAD DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x4113 JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4151 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x415C DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x416C DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x4089 DUP2 PUSH2 0x3E4B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4192 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x41A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x41B5 DUP8 DUP3 DUP9 ADD PUSH2 0x3EA6 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x41D0 DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3F7C PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x4094 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4204 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x421B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4227 DUP8 DUP3 DUP9 ADD PUSH2 0x3EA6 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x423B DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x41D0 DUP2 PUSH2 0x3E4B JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xE0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x429D JUMPI PUSH2 0x429D PUSH2 0x424B JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x42EA JUMPI PUSH2 0x42EA PUSH2 0x424B JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x430D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x430D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4339 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x4351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4365 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x4377 JUMPI PUSH2 0x4377 PUSH2 0x424B JUMP JUMPDEST PUSH2 0x4385 DUP5 DUP3 PUSH1 0x5 SHL ADD PUSH2 0x42A3 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 DUP2 ADD SWAP3 POP PUSH1 0xE0 SWAP2 DUP3 MUL DUP5 ADD DUP6 ADD SWAP2 DUP9 DUP4 GT ISZERO PUSH2 0x43A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP3 DUP6 LT ISZERO PUSH2 0x4448 JUMPI DUP1 DUP6 DUP11 SUB SLT ISZERO PUSH2 0x43C1 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0x43C9 PUSH2 0x427A JUMP JUMPDEST PUSH2 0x43D2 DUP7 PUSH2 0x42F2 JUMP JUMPDEST DUP2 MSTORE DUP7 DUP7 ADD CALLDATALOAD DUP8 DUP3 ADD MSTORE PUSH1 0x40 PUSH2 0x43E9 DUP2 DUP9 ADD PUSH2 0x4312 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP7 DUP2 ADD CALLDATALOAD PUSH2 0x43FC DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH1 0x80 DUP7 DUP2 ADD CALLDATALOAD PUSH2 0x440F DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH1 0xA0 DUP7 DUP2 ADD CALLDATALOAD PUSH2 0x4422 DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH1 0xC0 DUP7 DUP2 ADD CALLDATALOAD PUSH2 0x4435 DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE DUP5 MSTORE SWAP4 DUP5 ADD SWAP4 SWAP3 DUP6 ADD SWAP3 PUSH2 0x43A9 JUMP JUMPDEST POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4467 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x447E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x448A DUP6 DUP3 DUP7 ADD PUSH2 0x3EA6 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x44AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x44B6 DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x44C6 DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP2 POP PUSH2 0x44D4 PUSH1 0x40 DUP6 ADD PUSH2 0x4312 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x44F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4500 DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x451D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4529 DUP10 DUP4 DUP11 ADD PUSH2 0x3EA6 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x4542 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x454F DUP9 DUP3 DUP10 ADD PUSH2 0x3EA6 JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 POP SWAP3 SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x45D1 JUMPI PUSH2 0x45D1 PUSH2 0x458F JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x4608 JUMPI PUSH2 0x4608 PUSH2 0x458F JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x4635 JUMPI PUSH2 0x4635 PUSH2 0x458F JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4651 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x46B1 JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x4697 JUMPI PUSH2 0x4697 PUSH2 0x458F JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x46A4 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x465D JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x46C8 JUMPI POP PUSH1 0x1 PUSH2 0x6C9 JUMP JUMPDEST DUP2 PUSH2 0x46D5 JUMPI POP PUSH1 0x0 PUSH2 0x6C9 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x46EB JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x46F5 JUMPI PUSH2 0x4711 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x6C9 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x4706 JUMPI PUSH2 0x4706 PUSH2 0x458F JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x6C9 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x4734 JUMPI POP DUP2 DUP2 EXP PUSH2 0x6C9 JUMP JUMPDEST PUSH2 0x473E DUP4 DUP4 PUSH2 0x4658 JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x4770 JUMPI PUSH2 0x4770 PUSH2 0x458F JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F7C PUSH1 0xFF DUP5 AND DUP4 PUSH2 0x46B9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F7C DUP4 DUP4 PUSH2 0x46B9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x47A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3F7C DUP3 PUSH2 0x42F2 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x47C0 JUMPI PUSH2 0x47C0 PUSH2 0x458F JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x47D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x4821 JUMPI PUSH2 0x4821 PUSH2 0x458F JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4838 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3F7C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x485B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3F7C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x4896 JUMPI PUSH2 0x4896 PUSH2 0x458F JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP14 0xBD GASLIMIT 0xBB EXTCODEHASH LT CALLCODE PUSH2 0x2620 0xAC INVALID 0xC3 LOG0 0xEC PUSH20 0xA43A47A8623822D8D3050DE86C0467DD64736F6C PUSH4 0x4300080A STOP CALLER ","sourceMap":"913:12488:175:-:0;;;928:1:71;886:43;;2194:75:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1467:34:176;;;913:12488:175;;14:290:201;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:201;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:201:o;:::-;913:12488:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@EMISSION_MANAGER_37598":{"entryPoint":null,"id":37598,"parameterSlots":0,"returnSlots":0},"@REVISION_36580":{"entryPoint":null,"id":36580,"parameterSlots":0,"returnSlots":0},"@_claimAllRewards_37444":{"entryPoint":13161,"id":37444,"parameterSlots":5,"returnSlots":2},"@_claimRewards_37267":{"entryPoint":7763,"id":37267,"parameterSlots":7,"returnSlots":1},"@_configureAssets_38421":{"entryPoint":10952,"id":38421,"parameterSlots":1,"returnSlots":0},"@_getAssetIndex_38989":{"entryPoint":10326,"id":38989,"parameterSlots":3,"returnSlots":2},"@_getPendingRewards_38871":{"entryPoint":9365,"id":38871,"parameterSlots":3,"returnSlots":1},"@_getRewards_38898":{"entryPoint":15761,"id":38898,"parameterSlots":4,"returnSlots":1},"@_getUserAssetBalances_37129":{"entryPoint":8855,"id":37129,"parameterSlots":3,"returnSlots":1},"@_getUserReward_38813":{"entryPoint":9911,"id":38813,"parameterSlots":3,"returnSlots":1},"@_installTransferStrategy_37544":{"entryPoint":10594,"id":37544,"parameterSlots":2,"returnSlots":0},"@_isContract_37495":{"entryPoint":null,"id":37495,"parameterSlots":1,"returnSlots":1},"@_setRewardOracle_37577":{"entryPoint":9571,"id":37577,"parameterSlots":2,"returnSlots":0},"@_transferRewards_37478":{"entryPoint":15110,"id":37478,"parameterSlots":3,"returnSlots":0},"@_updateDataMultiple_38734":{"entryPoint":14815,"id":38734,"parameterSlots":2,"returnSlots":0},"@_updateData_38694":{"entryPoint":8420,"id":38694,"parameterSlots":4,"returnSlots":0},"@_updateRewardData_38502":{"entryPoint":14417,"id":38502,"parameterSlots":3,"returnSlots":2},"@_updateUserData_38585":{"entryPoint":15410,"id":38585,"parameterSlots":5,"returnSlots":2},"@claimAllRewardsOnBehalf_37013":{"entryPoint":4542,"id":37013,"parameterSlots":4,"returnSlots":2},"@claimAllRewardsToSelf_37038":{"entryPoint":5422,"id":37038,"parameterSlots":2,"returnSlots":2},"@claimAllRewards_36961":{"entryPoint":5269,"id":36961,"parameterSlots":3,"returnSlots":2},"@claimRewardsOnBehalf_36898":{"entryPoint":1917,"id":36898,"parameterSlots":6,"returnSlots":1},"@claimRewardsToSelf_36925":{"entryPoint":3372,"id":36925,"parameterSlots":4,"returnSlots":1},"@claimRewards_36844":{"entryPoint":1743,"id":36844,"parameterSlots":5,"returnSlots":1},"@configureAssets_36752":{"entryPoint":4030,"id":36752,"parameterSlots":1,"returnSlots":0},"@getAllUserRewards_38032":{"entryPoint":2345,"id":38032,"parameterSlots":3,"returnSlots":2},"@getAssetDecimals_39016":{"entryPoint":null,"id":39016,"parameterSlots":1,"returnSlots":1},"@getAssetIndex_37726":{"entryPoint":3759,"id":37726,"parameterSlots":2,"returnSlots":2},"@getClaimer_36643":{"entryPoint":null,"id":36643,"parameterSlots":1,"returnSlots":1},"@getDistributionEnd_37746":{"entryPoint":1647,"id":37746,"parameterSlots":2,"returnSlots":1},"@getEmissionManager_39025":{"entryPoint":null,"id":39025,"parameterSlots":0,"returnSlots":1},"@getRevision_36653":{"entryPoint":null,"id":36653,"parameterSlots":0,"returnSlots":1},"@getRewardOracle_36670":{"entryPoint":null,"id":36670,"parameterSlots":1,"returnSlots":1},"@getRewardsByAsset_37800":{"entryPoint":3398,"id":37800,"parameterSlots":1,"returnSlots":1},"@getRewardsData_37685":{"entryPoint":null,"id":37685,"parameterSlots":2,"returnSlots":4},"@getRewardsList_37811":{"entryPoint":5158,"id":37811,"parameterSlots":0,"returnSlots":1},"@getTransferStrategy_36687":{"entryPoint":null,"id":36687,"parameterSlots":1,"returnSlots":1},"@getUserAccruedRewards_37881":{"entryPoint":4973,"id":37881,"parameterSlots":2,"returnSlots":1},"@getUserAssetIndex_37836":{"entryPoint":null,"id":37836,"parameterSlots":3,"returnSlots":1},"@getUserRewards_37905":{"entryPoint":3736,"id":37905,"parameterSlots":4,"returnSlots":1},"@handleAction_36806":{"entryPoint":1900,"id":36806,"parameterSlots":3,"returnSlots":0},"@initialize_36629":{"entryPoint":5449,"id":36629,"parameterSlots":1,"returnSlots":0},"@isConstructor_10568":{"entryPoint":null,"id":10568,"parameterSlots":0,"returnSlots":1},"@setClaimer_37061":{"entryPoint":6340,"id":37061,"parameterSlots":2,"returnSlots":0},"@setDistributionEnd_38094":{"entryPoint":5733,"id":38094,"parameterSlots":3,"returnSlots":0},"@setEmissionPerSecond_38215":{"entryPoint":6623,"id":38215,"parameterSlots":5,"returnSlots":0},"@setRewardOracle_36786":{"entryPoint":3199,"id":36786,"parameterSlots":2,"returnSlots":0},"@setTransferStrategy_36769":{"entryPoint":6171,"id":36769,"parameterSlots":2,"returnSlots":0},"@toUint128_1626":{"entryPoint":14944,"id":1626,"parameterSlots":1,"returnSlots":1},"@toUint32_1701":{"entryPoint":15797,"id":1701,"parameterSlots":1,"returnSlots":1},"abi_decode_array_address_dyn_calldata":{"entryPoint":16038,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_address":{"entryPoint":16223,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_address":{"entryPoint":15981,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_address":{"entryPoint":16700,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_addresst_uint32":{"entryPoint":17558,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint88_$dyn_calldata_ptr":{"entryPoint":17629,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_addresst_contract$_IEACAggregatorProxy_$34482":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_contract$_ITransferStrategyBase_$39643":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256t_uint256":{"entryPoint":16259,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr":{"entryPoint":17492,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_address":{"entryPoint":16445,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_addresst_address":{"entryPoint":16878,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_uint256t_address":{"entryPoint":16764,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_uint256t_addresst_address":{"entryPoint":16107,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_uint256t_addresst_addresst_address":{"entryPoint":16312,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr":{"entryPoint":17190,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":18505,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_int256_fromMemory":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":17983,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_uint256_fromMemory":{"entryPoint":18373,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint88":{"entryPoint":18323,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint8_fromMemory":{"entryPoint":18470,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint32":{"entryPoint":17170,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint88":{"entryPoint":17138,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_array_address_dyn":{"entryPoint":16532,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":16859,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed":{"entryPoint":16613,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_stringliteral_10feaa42ab1cceccf694775bb33448aff8ff2c6abffd88c4558574e392cfbf89__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_234a2e04caaf9701e850eca8cfe55b40e5c433eb9676d2ccf0bc0ef6daacac31__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4058a4fa702d397682b400d1a2d7894f822738ac481455440aeb37a04a780eca__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4a3338198267282d620156252d17efb5e3f8129e264028d436b0e918c4373099__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_60a6ecd9d15a2e4ae360b5943de5e7d94204c8fa7a9b93d3208a26418697ceb3__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_711bd914f7cada6362ff0637d445621cad80f8b6c31f2f06bb305d960854e2b7__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a28d34ff463a8cc689c6ec4b8c995983f85d0a40987242bc4cc3cec37303c18e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d5c01d42b1a1c3ff17ba02c4e7b4da122e8081e6a9a9e3c2b86113aac113b6c4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_dc389f9f05ed02e337a2af628240d9d635867491305ed504870102f5e0924c61__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f6a7187dfb6061567b074df0155c071985ca15e6ac6b3024e5bd106b2c7018cf__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f92fea320a30dd7cdbbe8c4bc6042352b9a6f792b0208b12430ae04cb435cf6f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint88_t_uint32_t_uint32_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_uint88_t_uint88_t_uint256_t_uint32_t_uint104__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_uint88_t_uint88_t_uint32_t_uint32_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":17059,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory_3365":{"entryPoint":17018,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_t_uint128":{"entryPoint":18539,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":17854,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_helper":{"entryPoint":18008,"id":null,"parameterSlots":2,"returnSlots":2},"checked_exp_t_uint256_t_uint256":{"entryPoint":18311,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_t_uint256_t_uint8":{"entryPoint":18296,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_unsigned":{"entryPoint":18105,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":18409,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":18350,"id":null,"parameterSlots":2,"returnSlots":1},"increment_t_uint128":{"entryPoint":17935,"id":null,"parameterSlots":1,"returnSlots":1},"increment_t_uint256":{"entryPoint":17878,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":17807,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":17760,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":16971,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":15947,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:26805:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"59:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"146:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"155:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"158:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"148:6:201"},"nodeType":"YulFunctionCall","src":"148:12:201"},"nodeType":"YulExpressionStatement","src":"148:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"82:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"93:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"100:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"89:3:201"},"nodeType":"YulFunctionCall","src":"89:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"79:2:201"},"nodeType":"YulFunctionCall","src":"79:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"72:6:201"},"nodeType":"YulFunctionCall","src":"72:73:201"},"nodeType":"YulIf","src":"69:93:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"48:5:201","type":""}],"src":"14:154:201"},{"body":{"nodeType":"YulBlock","src":"260:301:201","statements":[{"body":{"nodeType":"YulBlock","src":"306:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"315:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"318:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"308:6:201"},"nodeType":"YulFunctionCall","src":"308:12:201"},"nodeType":"YulExpressionStatement","src":"308:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"281:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"290:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"277:3:201"},"nodeType":"YulFunctionCall","src":"277:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"302:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"273:3:201"},"nodeType":"YulFunctionCall","src":"273:32:201"},"nodeType":"YulIf","src":"270:52:201"},{"nodeType":"YulVariableDeclaration","src":"331:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"357:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"344:12:201"},"nodeType":"YulFunctionCall","src":"344:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"335:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"401:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"376:24:201"},"nodeType":"YulFunctionCall","src":"376:31:201"},"nodeType":"YulExpressionStatement","src":"376:31:201"},{"nodeType":"YulAssignment","src":"416:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"426:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"416:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"440:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"472:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"483:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"468:3:201"},"nodeType":"YulFunctionCall","src":"468:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"455:12:201"},"nodeType":"YulFunctionCall","src":"455:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"444:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"521:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"496:24:201"},"nodeType":"YulFunctionCall","src":"496:33:201"},"nodeType":"YulExpressionStatement","src":"496:33:201"},{"nodeType":"YulAssignment","src":"538:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"548:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"538:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"218:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"229:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"241:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"249:6:201","type":""}],"src":"173:388:201"},{"body":{"nodeType":"YulBlock","src":"667:76:201","statements":[{"nodeType":"YulAssignment","src":"677:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"689:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"700:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"685:3:201"},"nodeType":"YulFunctionCall","src":"685:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"677:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"719:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"730:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"712:6:201"},"nodeType":"YulFunctionCall","src":"712:25:201"},"nodeType":"YulExpressionStatement","src":"712:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"636:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"647:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"658:4:201","type":""}],"src":"566:177:201"},{"body":{"nodeType":"YulBlock","src":"832:283:201","statements":[{"body":{"nodeType":"YulBlock","src":"881:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"890:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"893:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"883:6:201"},"nodeType":"YulFunctionCall","src":"883:12:201"},"nodeType":"YulExpressionStatement","src":"883:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"860:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"868:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"856:3:201"},"nodeType":"YulFunctionCall","src":"856:17:201"},{"name":"end","nodeType":"YulIdentifier","src":"875:3:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"852:3:201"},"nodeType":"YulFunctionCall","src":"852:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"845:6:201"},"nodeType":"YulFunctionCall","src":"845:35:201"},"nodeType":"YulIf","src":"842:55:201"},{"nodeType":"YulAssignment","src":"906:30:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"929:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"916:12:201"},"nodeType":"YulFunctionCall","src":"916:20:201"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"906:6:201"}]},{"body":{"nodeType":"YulBlock","src":"979:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"988:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"991:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"981:6:201"},"nodeType":"YulFunctionCall","src":"981:12:201"},"nodeType":"YulExpressionStatement","src":"981:12:201"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"951:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"959:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"948:2:201"},"nodeType":"YulFunctionCall","src":"948:30:201"},"nodeType":"YulIf","src":"945:50:201"},{"nodeType":"YulAssignment","src":"1004:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1020:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1028:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1016:3:201"},"nodeType":"YulFunctionCall","src":"1016:17:201"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"1004:8:201"}]},{"body":{"nodeType":"YulBlock","src":"1093:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1102:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1105:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1095:6:201"},"nodeType":"YulFunctionCall","src":"1095:12:201"},"nodeType":"YulExpressionStatement","src":"1095:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1056:6:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1068:1:201","type":"","value":"5"},{"name":"length","nodeType":"YulIdentifier","src":"1071:6:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1064:3:201"},"nodeType":"YulFunctionCall","src":"1064:14:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1052:3:201"},"nodeType":"YulFunctionCall","src":"1052:27:201"},{"kind":"number","nodeType":"YulLiteral","src":"1081:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1048:3:201"},"nodeType":"YulFunctionCall","src":"1048:38:201"},{"name":"end","nodeType":"YulIdentifier","src":"1088:3:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1045:2:201"},"nodeType":"YulFunctionCall","src":"1045:47:201"},"nodeType":"YulIf","src":"1042:67:201"}]},"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"795:6:201","type":""},{"name":"end","nodeType":"YulTypedName","src":"803:3:201","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"811:8:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"821:6:201","type":""}],"src":"748:367:201"},{"body":{"nodeType":"YulBlock","src":"1276:626:201","statements":[{"body":{"nodeType":"YulBlock","src":"1323:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1332:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1335:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1325:6:201"},"nodeType":"YulFunctionCall","src":"1325:12:201"},"nodeType":"YulExpressionStatement","src":"1325:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1297:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1306:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1293:3:201"},"nodeType":"YulFunctionCall","src":"1293:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1318:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1289:3:201"},"nodeType":"YulFunctionCall","src":"1289:33:201"},"nodeType":"YulIf","src":"1286:53:201"},{"nodeType":"YulVariableDeclaration","src":"1348:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1375:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1362:12:201"},"nodeType":"YulFunctionCall","src":"1362:23:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1352:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1428:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1437:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1440:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1430:6:201"},"nodeType":"YulFunctionCall","src":"1430:12:201"},"nodeType":"YulExpressionStatement","src":"1430:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1400:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1408:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1397:2:201"},"nodeType":"YulFunctionCall","src":"1397:30:201"},"nodeType":"YulIf","src":"1394:50:201"},{"nodeType":"YulVariableDeclaration","src":"1453:96:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1521:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"1532:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1517:3:201"},"nodeType":"YulFunctionCall","src":"1517:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1541:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"1479:37:201"},"nodeType":"YulFunctionCall","src":"1479:70:201"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"1457:8:201","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"1467:8:201","type":""}]},{"nodeType":"YulAssignment","src":"1558:18:201","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"1568:8:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1558:6:201"}]},{"nodeType":"YulAssignment","src":"1585:18:201","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"1595:8:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1585:6:201"}]},{"nodeType":"YulAssignment","src":"1612:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1639:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1650:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1635:3:201"},"nodeType":"YulFunctionCall","src":"1635:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1622:12:201"},"nodeType":"YulFunctionCall","src":"1622:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1612:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1663:45:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1693:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1704:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1689:3:201"},"nodeType":"YulFunctionCall","src":"1689:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1676:12:201"},"nodeType":"YulFunctionCall","src":"1676:32:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1667:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1742:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1717:24:201"},"nodeType":"YulFunctionCall","src":"1717:31:201"},"nodeType":"YulExpressionStatement","src":"1717:31:201"},{"nodeType":"YulAssignment","src":"1757:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1767:5:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1757:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1781:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1813:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1824:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1809:3:201"},"nodeType":"YulFunctionCall","src":"1809:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1796:12:201"},"nodeType":"YulFunctionCall","src":"1796:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"1785:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1862:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1837:24:201"},"nodeType":"YulFunctionCall","src":"1837:33:201"},"nodeType":"YulExpressionStatement","src":"1837:33:201"},{"nodeType":"YulAssignment","src":"1879:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"1889:7:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"1879:6:201"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_uint256t_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1210:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1221:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1233:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1241:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1249:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1257:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1265:6:201","type":""}],"src":"1120:782:201"},{"body":{"nodeType":"YulBlock","src":"1977:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"2023:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2032:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2035:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2025:6:201"},"nodeType":"YulFunctionCall","src":"2025:12:201"},"nodeType":"YulExpressionStatement","src":"2025:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1998:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2007:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1994:3:201"},"nodeType":"YulFunctionCall","src":"1994:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2019:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1990:3:201"},"nodeType":"YulFunctionCall","src":"1990:32:201"},"nodeType":"YulIf","src":"1987:52:201"},{"nodeType":"YulVariableDeclaration","src":"2048:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2074:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2061:12:201"},"nodeType":"YulFunctionCall","src":"2061:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2052:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2118:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2093:24:201"},"nodeType":"YulFunctionCall","src":"2093:31:201"},"nodeType":"YulExpressionStatement","src":"2093:31:201"},{"nodeType":"YulAssignment","src":"2133:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"2143:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2133:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1943:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1954:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1966:6:201","type":""}],"src":"1907:247:201"},{"body":{"nodeType":"YulBlock","src":"2260:125:201","statements":[{"nodeType":"YulAssignment","src":"2270:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2282:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2293:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2278:3:201"},"nodeType":"YulFunctionCall","src":"2278:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2270:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2312:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2327:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2335:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2323:3:201"},"nodeType":"YulFunctionCall","src":"2323:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2305:6:201"},"nodeType":"YulFunctionCall","src":"2305:74:201"},"nodeType":"YulExpressionStatement","src":"2305:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2229:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2240:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2251:4:201","type":""}],"src":"2159:226:201"},{"body":{"nodeType":"YulBlock","src":"2494:279:201","statements":[{"body":{"nodeType":"YulBlock","src":"2540:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2549:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2552:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2542:6:201"},"nodeType":"YulFunctionCall","src":"2542:12:201"},"nodeType":"YulExpressionStatement","src":"2542:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2515:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2524:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2511:3:201"},"nodeType":"YulFunctionCall","src":"2511:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2536:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2507:3:201"},"nodeType":"YulFunctionCall","src":"2507:32:201"},"nodeType":"YulIf","src":"2504:52:201"},{"nodeType":"YulVariableDeclaration","src":"2565:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2591:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2578:12:201"},"nodeType":"YulFunctionCall","src":"2578:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2569:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2635:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2610:24:201"},"nodeType":"YulFunctionCall","src":"2610:31:201"},"nodeType":"YulExpressionStatement","src":"2610:31:201"},{"nodeType":"YulAssignment","src":"2650:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"2660:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2650:6:201"}]},{"nodeType":"YulAssignment","src":"2674:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2701:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2712:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2697:3:201"},"nodeType":"YulFunctionCall","src":"2697:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2684:12:201"},"nodeType":"YulFunctionCall","src":"2684:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2674:6:201"}]},{"nodeType":"YulAssignment","src":"2725:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2752:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2763:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2748:3:201"},"nodeType":"YulFunctionCall","src":"2748:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2735:12:201"},"nodeType":"YulFunctionCall","src":"2735:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2725:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2444:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2455:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2467:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2475:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2483:6:201","type":""}],"src":"2390:383:201"},{"body":{"nodeType":"YulBlock","src":"2951:751:201","statements":[{"body":{"nodeType":"YulBlock","src":"2998:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3007:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3010:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3000:6:201"},"nodeType":"YulFunctionCall","src":"3000:12:201"},"nodeType":"YulExpressionStatement","src":"3000:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2972:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2981:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2968:3:201"},"nodeType":"YulFunctionCall","src":"2968:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2993:3:201","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2964:3:201"},"nodeType":"YulFunctionCall","src":"2964:33:201"},"nodeType":"YulIf","src":"2961:53:201"},{"nodeType":"YulVariableDeclaration","src":"3023:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3050:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3037:12:201"},"nodeType":"YulFunctionCall","src":"3037:23:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"3027:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3103:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3112:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3115:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3105:6:201"},"nodeType":"YulFunctionCall","src":"3105:12:201"},"nodeType":"YulExpressionStatement","src":"3105:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3075:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3083:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3072:2:201"},"nodeType":"YulFunctionCall","src":"3072:30:201"},"nodeType":"YulIf","src":"3069:50:201"},{"nodeType":"YulVariableDeclaration","src":"3128:96:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3196:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"3207:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3192:3:201"},"nodeType":"YulFunctionCall","src":"3192:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3216:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"3154:37:201"},"nodeType":"YulFunctionCall","src":"3154:70:201"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"3132:8:201","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"3142:8:201","type":""}]},{"nodeType":"YulAssignment","src":"3233:18:201","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"3243:8:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3233:6:201"}]},{"nodeType":"YulAssignment","src":"3260:18:201","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"3270:8:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3260:6:201"}]},{"nodeType":"YulAssignment","src":"3287:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3314:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3325:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3310:3:201"},"nodeType":"YulFunctionCall","src":"3310:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3297:12:201"},"nodeType":"YulFunctionCall","src":"3297:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3287:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3338:45:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3368:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3379:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3364:3:201"},"nodeType":"YulFunctionCall","src":"3364:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3351:12:201"},"nodeType":"YulFunctionCall","src":"3351:32:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3342:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3417:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3392:24:201"},"nodeType":"YulFunctionCall","src":"3392:31:201"},"nodeType":"YulExpressionStatement","src":"3392:31:201"},{"nodeType":"YulAssignment","src":"3432:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3442:5:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3432:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3456:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3488:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3499:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3484:3:201"},"nodeType":"YulFunctionCall","src":"3484:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3471:12:201"},"nodeType":"YulFunctionCall","src":"3471:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"3460:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3537:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3512:24:201"},"nodeType":"YulFunctionCall","src":"3512:33:201"},"nodeType":"YulExpressionStatement","src":"3512:33:201"},{"nodeType":"YulAssignment","src":"3554:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3564:7:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3554:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3580:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3612:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3623:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3608:3:201"},"nodeType":"YulFunctionCall","src":"3608:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3595:12:201"},"nodeType":"YulFunctionCall","src":"3595:33:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"3584:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"3662:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3637:24:201"},"nodeType":"YulFunctionCall","src":"3637:33:201"},"nodeType":"YulExpressionStatement","src":"3637:33:201"},{"nodeType":"YulAssignment","src":"3679:17:201","value":{"name":"value_2","nodeType":"YulIdentifier","src":"3689:7:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"3679:6:201"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_uint256t_addresst_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2877:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2888:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2900:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2908:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2916:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2924:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"2932:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"2940:6:201","type":""}],"src":"2778:924:201"},{"body":{"nodeType":"YulBlock","src":"3829:450:201","statements":[{"body":{"nodeType":"YulBlock","src":"3875:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3884:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3887:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3877:6:201"},"nodeType":"YulFunctionCall","src":"3877:12:201"},"nodeType":"YulExpressionStatement","src":"3877:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3850:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3859:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3846:3:201"},"nodeType":"YulFunctionCall","src":"3846:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3871:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3842:3:201"},"nodeType":"YulFunctionCall","src":"3842:32:201"},"nodeType":"YulIf","src":"3839:52:201"},{"nodeType":"YulVariableDeclaration","src":"3900:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3927:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3914:12:201"},"nodeType":"YulFunctionCall","src":"3914:23:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"3904:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3980:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3989:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3992:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3982:6:201"},"nodeType":"YulFunctionCall","src":"3982:12:201"},"nodeType":"YulExpressionStatement","src":"3982:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3952:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"3960:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3949:2:201"},"nodeType":"YulFunctionCall","src":"3949:30:201"},"nodeType":"YulIf","src":"3946:50:201"},{"nodeType":"YulVariableDeclaration","src":"4005:96:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4073:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"4084:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4069:3:201"},"nodeType":"YulFunctionCall","src":"4069:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"4093:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"4031:37:201"},"nodeType":"YulFunctionCall","src":"4031:70:201"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"4009:8:201","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"4019:8:201","type":""}]},{"nodeType":"YulAssignment","src":"4110:18:201","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"4120:8:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"4110:6:201"}]},{"nodeType":"YulAssignment","src":"4137:18:201","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"4147:8:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"4137:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"4164:45:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4194:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4205:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4190:3:201"},"nodeType":"YulFunctionCall","src":"4190:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"4177:12:201"},"nodeType":"YulFunctionCall","src":"4177:32:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"4168:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4243:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"4218:24:201"},"nodeType":"YulFunctionCall","src":"4218:31:201"},"nodeType":"YulExpressionStatement","src":"4218:31:201"},{"nodeType":"YulAssignment","src":"4258:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"4268:5:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"4258:6:201"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3779:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3790:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3802:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3810:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3818:6:201","type":""}],"src":"3707:572:201"},{"body":{"nodeType":"YulBlock","src":"4345:423:201","statements":[{"nodeType":"YulVariableDeclaration","src":"4355:26:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4375:5:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4369:5:201"},"nodeType":"YulFunctionCall","src":"4369:12:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"4359:6:201","type":""}]},{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4397:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"4402:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4390:6:201"},"nodeType":"YulFunctionCall","src":"4390:19:201"},"nodeType":"YulExpressionStatement","src":"4390:19:201"},{"nodeType":"YulVariableDeclaration","src":"4418:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"4428:4:201","type":"","value":"0x20"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4422:2:201","type":""}]},{"nodeType":"YulAssignment","src":"4441:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4452:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4457:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4448:3:201"},"nodeType":"YulFunctionCall","src":"4448:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"4441:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"4469:28:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"4487:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4494:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4483:3:201"},"nodeType":"YulFunctionCall","src":"4483:14:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"4473:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"4506:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"4515:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"4510:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"4574:169:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4595:3:201"},{"arguments":[{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"4610:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"4604:5:201"},"nodeType":"YulFunctionCall","src":"4604:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"4619:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4600:3:201"},"nodeType":"YulFunctionCall","src":"4600:62:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4588:6:201"},"nodeType":"YulFunctionCall","src":"4588:75:201"},"nodeType":"YulExpressionStatement","src":"4588:75:201"},{"nodeType":"YulAssignment","src":"4676:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"4687:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4692:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4683:3:201"},"nodeType":"YulFunctionCall","src":"4683:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"4676:3:201"}]},{"nodeType":"YulAssignment","src":"4708:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"4722:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4730:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4718:3:201"},"nodeType":"YulFunctionCall","src":"4718:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"4708:6:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4536:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"4539:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4533:2:201"},"nodeType":"YulFunctionCall","src":"4533:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"4547:18:201","statements":[{"nodeType":"YulAssignment","src":"4549:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4558:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"4561:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4554:3:201"},"nodeType":"YulFunctionCall","src":"4554:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"4549:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"4529:3:201","statements":[]},"src":"4525:218:201"},{"nodeType":"YulAssignment","src":"4752:10:201","value":{"name":"pos","nodeType":"YulIdentifier","src":"4759:3:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"4752:3:201"}]}]},"name":"abi_encode_array_address_dyn","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"4322:5:201","type":""},{"name":"pos","nodeType":"YulTypedName","src":"4329:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"4337:3:201","type":""}],"src":"4284:484:201"},{"body":{"nodeType":"YulBlock","src":"5002:575:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5019:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5030:2:201","type":"","value":"64"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5012:6:201"},"nodeType":"YulFunctionCall","src":"5012:21:201"},"nodeType":"YulExpressionStatement","src":"5012:21:201"},{"nodeType":"YulVariableDeclaration","src":"5042:70:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5085:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5097:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5108:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5093:3:201"},"nodeType":"YulFunctionCall","src":"5093:18:201"}],"functionName":{"name":"abi_encode_array_address_dyn","nodeType":"YulIdentifier","src":"5056:28:201"},"nodeType":"YulFunctionCall","src":"5056:56:201"},"variables":[{"name":"tail_1","nodeType":"YulTypedName","src":"5046:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5121:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5131:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5125:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5153:9:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5164:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5149:3:201"},"nodeType":"YulFunctionCall","src":"5149:18:201"},{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"5173:6:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"5181:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5169:3:201"},"nodeType":"YulFunctionCall","src":"5169:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5142:6:201"},"nodeType":"YulFunctionCall","src":"5142:50:201"},"nodeType":"YulExpressionStatement","src":"5142:50:201"},{"nodeType":"YulVariableDeclaration","src":"5201:17:201","value":{"name":"tail_1","nodeType":"YulIdentifier","src":"5212:6:201"},"variables":[{"name":"pos","nodeType":"YulTypedName","src":"5205:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5227:27:201","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"5247:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5241:5:201"},"nodeType":"YulFunctionCall","src":"5241:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"5231:6:201","type":""}]},{"expression":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"5270:6:201"},{"name":"length","nodeType":"YulIdentifier","src":"5278:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5263:6:201"},"nodeType":"YulFunctionCall","src":"5263:22:201"},"nodeType":"YulExpressionStatement","src":"5263:22:201"},{"nodeType":"YulAssignment","src":"5294:22:201","value":{"arguments":[{"name":"tail_1","nodeType":"YulIdentifier","src":"5305:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5313:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5301:3:201"},"nodeType":"YulFunctionCall","src":"5301:15:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"5294:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"5325:29:201","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"5343:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5351:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5339:3:201"},"nodeType":"YulFunctionCall","src":"5339:15:201"},"variables":[{"name":"srcPtr","nodeType":"YulTypedName","src":"5329:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"5363:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5372:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"5367:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"5431:120:201","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5452:3:201"},{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"5463:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5457:5:201"},"nodeType":"YulFunctionCall","src":"5457:13:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5445:6:201"},"nodeType":"YulFunctionCall","src":"5445:26:201"},"nodeType":"YulExpressionStatement","src":"5445:26:201"},{"nodeType":"YulAssignment","src":"5484:19:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5495:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5500:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5491:3:201"},"nodeType":"YulFunctionCall","src":"5491:12:201"},"variableNames":[{"name":"pos","nodeType":"YulIdentifier","src":"5484:3:201"}]},{"nodeType":"YulAssignment","src":"5516:25:201","value":{"arguments":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"5530:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5538:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5526:3:201"},"nodeType":"YulFunctionCall","src":"5526:15:201"},"variableNames":[{"name":"srcPtr","nodeType":"YulIdentifier","src":"5516:6:201"}]}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5393:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"5396:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"5390:2:201"},"nodeType":"YulFunctionCall","src":"5390:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"5404:18:201","statements":[{"nodeType":"YulAssignment","src":"5406:14:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5415:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"5418:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5411:3:201"},"nodeType":"YulFunctionCall","src":"5411:9:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"5406:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"5386:3:201","statements":[]},"src":"5382:169:201"},{"nodeType":"YulAssignment","src":"5560:11:201","value":{"name":"pos","nodeType":"YulIdentifier","src":"5568:3:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5560:4:201"}]}]},"name":"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4963:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4974:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4982:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4993:4:201","type":""}],"src":"4773:804:201"},{"body":{"nodeType":"YulBlock","src":"5686:425:201","statements":[{"body":{"nodeType":"YulBlock","src":"5732:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5741:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5744:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5734:6:201"},"nodeType":"YulFunctionCall","src":"5734:12:201"},"nodeType":"YulExpressionStatement","src":"5734:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5707:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"5716:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5703:3:201"},"nodeType":"YulFunctionCall","src":"5703:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"5728:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5699:3:201"},"nodeType":"YulFunctionCall","src":"5699:32:201"},"nodeType":"YulIf","src":"5696:52:201"},{"nodeType":"YulVariableDeclaration","src":"5757:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5783:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5770:12:201"},"nodeType":"YulFunctionCall","src":"5770:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"5761:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"5827:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"5802:24:201"},"nodeType":"YulFunctionCall","src":"5802:31:201"},"nodeType":"YulExpressionStatement","src":"5802:31:201"},{"nodeType":"YulAssignment","src":"5842:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"5852:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5842:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"5866:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5898:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5909:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5894:3:201"},"nodeType":"YulFunctionCall","src":"5894:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"5881:12:201"},"nodeType":"YulFunctionCall","src":"5881:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"5870:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"5947:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"5922:24:201"},"nodeType":"YulFunctionCall","src":"5922:33:201"},"nodeType":"YulExpressionStatement","src":"5922:33:201"},{"nodeType":"YulAssignment","src":"5964:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"5974:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"5964:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"5990:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6022:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6033:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6018:3:201"},"nodeType":"YulFunctionCall","src":"6018:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6005:12:201"},"nodeType":"YulFunctionCall","src":"6005:32:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"5994:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"6071:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6046:24:201"},"nodeType":"YulFunctionCall","src":"6046:33:201"},"nodeType":"YulExpressionStatement","src":"6046:33:201"},{"nodeType":"YulAssignment","src":"6088:17:201","value":{"name":"value_2","nodeType":"YulIdentifier","src":"6098:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"6088:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5636:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5647:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5659:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5667:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5675:6:201","type":""}],"src":"5582:529:201"},{"body":{"nodeType":"YulBlock","src":"6232:301:201","statements":[{"body":{"nodeType":"YulBlock","src":"6278:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6287:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6290:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6280:6:201"},"nodeType":"YulFunctionCall","src":"6280:12:201"},"nodeType":"YulExpressionStatement","src":"6280:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6253:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6262:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6249:3:201"},"nodeType":"YulFunctionCall","src":"6249:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"6274:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6245:3:201"},"nodeType":"YulFunctionCall","src":"6245:32:201"},"nodeType":"YulIf","src":"6242:52:201"},{"nodeType":"YulVariableDeclaration","src":"6303:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6329:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6316:12:201"},"nodeType":"YulFunctionCall","src":"6316:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"6307:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"6373:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6348:24:201"},"nodeType":"YulFunctionCall","src":"6348:31:201"},"nodeType":"YulExpressionStatement","src":"6348:31:201"},{"nodeType":"YulAssignment","src":"6388:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"6398:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6388:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"6412:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6444:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6455:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6440:3:201"},"nodeType":"YulFunctionCall","src":"6440:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6427:12:201"},"nodeType":"YulFunctionCall","src":"6427:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"6416:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"6493:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"6468:24:201"},"nodeType":"YulFunctionCall","src":"6468:33:201"},"nodeType":"YulExpressionStatement","src":"6468:33:201"},{"nodeType":"YulAssignment","src":"6510:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"6520:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6510:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_contract$_IEACAggregatorProxy_$34482","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6190:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6201:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6213:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6221:6:201","type":""}],"src":"6116:417:201"},{"body":{"nodeType":"YulBlock","src":"6677:501:201","statements":[{"body":{"nodeType":"YulBlock","src":"6723:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6732:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6735:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6725:6:201"},"nodeType":"YulFunctionCall","src":"6725:12:201"},"nodeType":"YulExpressionStatement","src":"6725:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"6698:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"6707:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6694:3:201"},"nodeType":"YulFunctionCall","src":"6694:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"6719:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"6690:3:201"},"nodeType":"YulFunctionCall","src":"6690:32:201"},"nodeType":"YulIf","src":"6687:52:201"},{"nodeType":"YulVariableDeclaration","src":"6748:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6775:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"6762:12:201"},"nodeType":"YulFunctionCall","src":"6762:23:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"6752:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"6828:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6837:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6840:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6830:6:201"},"nodeType":"YulFunctionCall","src":"6830:12:201"},"nodeType":"YulExpressionStatement","src":"6830:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"6800:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"6808:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6797:2:201"},"nodeType":"YulFunctionCall","src":"6797:30:201"},"nodeType":"YulIf","src":"6794:50:201"},{"nodeType":"YulVariableDeclaration","src":"6853:96:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6921:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"6932:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6917:3:201"},"nodeType":"YulFunctionCall","src":"6917:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"6941:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"6879:37:201"},"nodeType":"YulFunctionCall","src":"6879:70:201"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"6857:8:201","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"6867:8:201","type":""}]},{"nodeType":"YulAssignment","src":"6958:18:201","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"6968:8:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"6958:6:201"}]},{"nodeType":"YulAssignment","src":"6985:18:201","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"6995:8:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"6985:6:201"}]},{"nodeType":"YulAssignment","src":"7012:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7039:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7050:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7035:3:201"},"nodeType":"YulFunctionCall","src":"7035:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7022:12:201"},"nodeType":"YulFunctionCall","src":"7022:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"7012:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"7063:45:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7093:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7104:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7089:3:201"},"nodeType":"YulFunctionCall","src":"7089:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7076:12:201"},"nodeType":"YulFunctionCall","src":"7076:32:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7067:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7142:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7117:24:201"},"nodeType":"YulFunctionCall","src":"7117:31:201"},"nodeType":"YulExpressionStatement","src":"7117:31:201"},{"nodeType":"YulAssignment","src":"7157:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"7167:5:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"7157:6:201"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_uint256t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6619:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"6630:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"6642:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"6650:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"6658:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"6666:6:201","type":""}],"src":"6538:640:201"},{"body":{"nodeType":"YulBlock","src":"7334:110:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7351:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7362:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7344:6:201"},"nodeType":"YulFunctionCall","src":"7344:21:201"},"nodeType":"YulExpressionStatement","src":"7344:21:201"},{"nodeType":"YulAssignment","src":"7374:64:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"7411:6:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7423:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7434:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7419:3:201"},"nodeType":"YulFunctionCall","src":"7419:18:201"}],"functionName":{"name":"abi_encode_array_address_dyn","nodeType":"YulIdentifier","src":"7382:28:201"},"nodeType":"YulFunctionCall","src":"7382:56:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7374:4:201"}]}]},"name":"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7303:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"7314:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7325:4:201","type":""}],"src":"7183:261:201"},{"body":{"nodeType":"YulBlock","src":"7588:574:201","statements":[{"body":{"nodeType":"YulBlock","src":"7634:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7643:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7646:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7636:6:201"},"nodeType":"YulFunctionCall","src":"7636:12:201"},"nodeType":"YulExpressionStatement","src":"7636:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"7609:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"7618:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"7605:3:201"},"nodeType":"YulFunctionCall","src":"7605:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"7630:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"7601:3:201"},"nodeType":"YulFunctionCall","src":"7601:32:201"},"nodeType":"YulIf","src":"7598:52:201"},{"nodeType":"YulVariableDeclaration","src":"7659:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7686:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7673:12:201"},"nodeType":"YulFunctionCall","src":"7673:23:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"7663:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"7739:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7748:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7751:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7741:6:201"},"nodeType":"YulFunctionCall","src":"7741:12:201"},"nodeType":"YulExpressionStatement","src":"7741:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"7711:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"7719:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"7708:2:201"},"nodeType":"YulFunctionCall","src":"7708:30:201"},"nodeType":"YulIf","src":"7705:50:201"},{"nodeType":"YulVariableDeclaration","src":"7764:96:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7832:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"7843:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7828:3:201"},"nodeType":"YulFunctionCall","src":"7828:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"7852:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"7790:37:201"},"nodeType":"YulFunctionCall","src":"7790:70:201"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"7768:8:201","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"7778:8:201","type":""}]},{"nodeType":"YulAssignment","src":"7869:18:201","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"7879:8:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"7869:6:201"}]},{"nodeType":"YulAssignment","src":"7896:18:201","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"7906:8:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"7896:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"7923:45:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7953:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7964:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7949:3:201"},"nodeType":"YulFunctionCall","src":"7949:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"7936:12:201"},"nodeType":"YulFunctionCall","src":"7936:32:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"7927:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"8002:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"7977:24:201"},"nodeType":"YulFunctionCall","src":"7977:31:201"},"nodeType":"YulExpressionStatement","src":"7977:31:201"},{"nodeType":"YulAssignment","src":"8017:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"8027:5:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"8017:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"8041:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8073:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8084:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8069:3:201"},"nodeType":"YulFunctionCall","src":"8069:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"8056:12:201"},"nodeType":"YulFunctionCall","src":"8056:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"8045:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"8122:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"8097:24:201"},"nodeType":"YulFunctionCall","src":"8097:33:201"},"nodeType":"YulExpressionStatement","src":"8097:33:201"},{"nodeType":"YulAssignment","src":"8139:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"8149:7:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"8139:6:201"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_addresst_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7530:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"7541:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"7553:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"7561:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"7569:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"7577:6:201","type":""}],"src":"7449:713:201"},{"body":{"nodeType":"YulBlock","src":"8352:206:201","statements":[{"nodeType":"YulAssignment","src":"8362:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8374:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8385:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8370:3:201"},"nodeType":"YulFunctionCall","src":"8370:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8362:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8405:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"8416:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8398:6:201"},"nodeType":"YulFunctionCall","src":"8398:25:201"},"nodeType":"YulExpressionStatement","src":"8398:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8443:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8454:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8439:3:201"},"nodeType":"YulFunctionCall","src":"8439:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"8459:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8432:6:201"},"nodeType":"YulFunctionCall","src":"8432:34:201"},"nodeType":"YulExpressionStatement","src":"8432:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8486:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8497:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8482:3:201"},"nodeType":"YulFunctionCall","src":"8482:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"8502:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8475:6:201"},"nodeType":"YulFunctionCall","src":"8475:34:201"},"nodeType":"YulExpressionStatement","src":"8475:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8529:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8540:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8525:3:201"},"nodeType":"YulFunctionCall","src":"8525:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"8545:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8518:6:201"},"nodeType":"YulFunctionCall","src":"8518:34:201"},"nodeType":"YulExpressionStatement","src":"8518:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8297:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"8308:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"8316:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8324:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8332:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8343:4:201","type":""}],"src":"8167:391:201"},{"body":{"nodeType":"YulBlock","src":"8692:119:201","statements":[{"nodeType":"YulAssignment","src":"8702:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8714:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8725:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8710:3:201"},"nodeType":"YulFunctionCall","src":"8710:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8702:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8744:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"8755:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8737:6:201"},"nodeType":"YulFunctionCall","src":"8737:25:201"},"nodeType":"YulExpressionStatement","src":"8737:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8782:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8793:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8778:3:201"},"nodeType":"YulFunctionCall","src":"8778:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"8798:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8771:6:201"},"nodeType":"YulFunctionCall","src":"8771:34:201"},"nodeType":"YulExpressionStatement","src":"8771:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8653:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"8664:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"8672:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8683:4:201","type":""}],"src":"8563:248:201"},{"body":{"nodeType":"YulBlock","src":"8848:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8865:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8868:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8858:6:201"},"nodeType":"YulFunctionCall","src":"8858:88:201"},"nodeType":"YulExpressionStatement","src":"8858:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8962:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"8965:4:201","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8955:6:201"},"nodeType":"YulFunctionCall","src":"8955:15:201"},"nodeType":"YulExpressionStatement","src":"8955:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8986:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"8989:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8979:6:201"},"nodeType":"YulFunctionCall","src":"8979:15:201"},"nodeType":"YulExpressionStatement","src":"8979:15:201"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"8816:184:201"},{"body":{"nodeType":"YulBlock","src":"9051:207:201","statements":[{"nodeType":"YulAssignment","src":"9061:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9077:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9071:5:201"},"nodeType":"YulFunctionCall","src":"9071:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"9061:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"9089:35:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"9111:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"9119:4:201","type":"","value":"0xe0"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9107:3:201"},"nodeType":"YulFunctionCall","src":"9107:17:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"9093:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"9199:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"9201:16:201"},"nodeType":"YulFunctionCall","src":"9201:18:201"},"nodeType":"YulExpressionStatement","src":"9201:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"9142:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"9154:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9139:2:201"},"nodeType":"YulFunctionCall","src":"9139:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"9178:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"9190:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9175:2:201"},"nodeType":"YulFunctionCall","src":"9175:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"9136:2:201"},"nodeType":"YulFunctionCall","src":"9136:62:201"},"nodeType":"YulIf","src":"9133:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9237:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"9241:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9230:6:201"},"nodeType":"YulFunctionCall","src":"9230:22:201"},"nodeType":"YulExpressionStatement","src":"9230:22:201"}]},"name":"allocate_memory_3365","nodeType":"YulFunctionDefinition","returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"9040:6:201","type":""}],"src":"9005:253:201"},{"body":{"nodeType":"YulBlock","src":"9308:289:201","statements":[{"nodeType":"YulAssignment","src":"9318:19:201","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9334:2:201","type":"","value":"64"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"9328:5:201"},"nodeType":"YulFunctionCall","src":"9328:9:201"},"variableNames":[{"name":"memPtr","nodeType":"YulIdentifier","src":"9318:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"9346:117:201","value":{"arguments":[{"name":"memPtr","nodeType":"YulIdentifier","src":"9368:6:201"},{"arguments":[{"arguments":[{"name":"size","nodeType":"YulIdentifier","src":"9384:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"9390:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9380:3:201"},"nodeType":"YulFunctionCall","src":"9380:13:201"},{"kind":"number","nodeType":"YulLiteral","src":"9395:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9376:3:201"},"nodeType":"YulFunctionCall","src":"9376:86:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9364:3:201"},"nodeType":"YulFunctionCall","src":"9364:99:201"},"variables":[{"name":"newFreePtr","nodeType":"YulTypedName","src":"9350:10:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"9538:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"9540:16:201"},"nodeType":"YulFunctionCall","src":"9540:18:201"},"nodeType":"YulExpressionStatement","src":"9540:18:201"}]},"condition":{"arguments":[{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"9481:10:201"},{"kind":"number","nodeType":"YulLiteral","src":"9493:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"9478:2:201"},"nodeType":"YulFunctionCall","src":"9478:34:201"},{"arguments":[{"name":"newFreePtr","nodeType":"YulIdentifier","src":"9517:10:201"},{"name":"memPtr","nodeType":"YulIdentifier","src":"9529:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"9514:2:201"},"nodeType":"YulFunctionCall","src":"9514:22:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"9475:2:201"},"nodeType":"YulFunctionCall","src":"9475:62:201"},"nodeType":"YulIf","src":"9472:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9576:2:201","type":"","value":"64"},{"name":"newFreePtr","nodeType":"YulIdentifier","src":"9580:10:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9569:6:201"},"nodeType":"YulFunctionCall","src":"9569:22:201"},"nodeType":"YulExpressionStatement","src":"9569:22:201"}]},"name":"allocate_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"size","nodeType":"YulTypedName","src":"9288:4:201","type":""}],"returnVariables":[{"name":"memPtr","nodeType":"YulTypedName","src":"9297:6:201","type":""}],"src":"9263:334:201"},{"body":{"nodeType":"YulBlock","src":"9650:129:201","statements":[{"nodeType":"YulAssignment","src":"9660:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"9682:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9669:12:201"},"nodeType":"YulFunctionCall","src":"9669:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"9660:5:201"}]},{"body":{"nodeType":"YulBlock","src":"9757:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9766:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9769:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9759:6:201"},"nodeType":"YulFunctionCall","src":"9759:12:201"},"nodeType":"YulExpressionStatement","src":"9759:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9711:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9722:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"9729:24:201","type":"","value":"0xffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9718:3:201"},"nodeType":"YulFunctionCall","src":"9718:36:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"9708:2:201"},"nodeType":"YulFunctionCall","src":"9708:47:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9701:6:201"},"nodeType":"YulFunctionCall","src":"9701:55:201"},"nodeType":"YulIf","src":"9698:75:201"}]},"name":"abi_decode_uint88","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"9629:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"9640:5:201","type":""}],"src":"9602:177:201"},{"body":{"nodeType":"YulBlock","src":"9832:115:201","statements":[{"nodeType":"YulAssignment","src":"9842:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"9864:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"9851:12:201"},"nodeType":"YulFunctionCall","src":"9851:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"9842:5:201"}]},{"body":{"nodeType":"YulBlock","src":"9925:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9934:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"9937:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"9927:6:201"},"nodeType":"YulFunctionCall","src":"9927:12:201"},"nodeType":"YulExpressionStatement","src":"9927:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9893:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"9904:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"9911:10:201","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"9900:3:201"},"nodeType":"YulFunctionCall","src":"9900:22:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"9890:2:201"},"nodeType":"YulFunctionCall","src":"9890:33:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9883:6:201"},"nodeType":"YulFunctionCall","src":"9883:41:201"},"nodeType":"YulIf","src":"9880:61:201"}]},"name":"abi_decode_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"9811:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"9822:5:201","type":""}],"src":"9784:163:201"},{"body":{"nodeType":"YulBlock","src":"10084:1918:201","statements":[{"nodeType":"YulVariableDeclaration","src":"10094:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10104:2:201","type":"","value":"32"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"10098:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"10151:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10160:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10163:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10153:6:201"},"nodeType":"YulFunctionCall","src":"10153:12:201"},"nodeType":"YulExpressionStatement","src":"10153:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"10126:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"10135:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10122:3:201"},"nodeType":"YulFunctionCall","src":"10122:23:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10147:2:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10118:3:201"},"nodeType":"YulFunctionCall","src":"10118:32:201"},"nodeType":"YulIf","src":"10115:52:201"},{"nodeType":"YulVariableDeclaration","src":"10176:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10203:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10190:12:201"},"nodeType":"YulFunctionCall","src":"10190:23:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"10180:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10222:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10232:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"10226:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"10277:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10286:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10289:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10279:6:201"},"nodeType":"YulFunctionCall","src":"10279:12:201"},"nodeType":"YulExpressionStatement","src":"10279:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"10265:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"10273:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10262:2:201"},"nodeType":"YulFunctionCall","src":"10262:14:201"},"nodeType":"YulIf","src":"10259:34:201"},{"nodeType":"YulVariableDeclaration","src":"10302:32:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10316:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"10327:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10312:3:201"},"nodeType":"YulFunctionCall","src":"10312:22:201"},"variables":[{"name":"_3","nodeType":"YulTypedName","src":"10306:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"10382:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10391:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10394:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10384:6:201"},"nodeType":"YulFunctionCall","src":"10384:12:201"},"nodeType":"YulExpressionStatement","src":"10384:12:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"10361:2:201"},{"kind":"number","nodeType":"YulLiteral","src":"10365:4:201","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10357:3:201"},"nodeType":"YulFunctionCall","src":"10357:13:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"10372:7:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10353:3:201"},"nodeType":"YulFunctionCall","src":"10353:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10346:6:201"},"nodeType":"YulFunctionCall","src":"10346:35:201"},"nodeType":"YulIf","src":"10343:55:201"},{"nodeType":"YulVariableDeclaration","src":"10407:26:201","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"10430:2:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"10417:12:201"},"nodeType":"YulFunctionCall","src":"10417:16:201"},"variables":[{"name":"_4","nodeType":"YulTypedName","src":"10411:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"10456:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x41","nodeType":"YulIdentifier","src":"10458:16:201"},"nodeType":"YulFunctionCall","src":"10458:18:201"},"nodeType":"YulExpressionStatement","src":"10458:18:201"}]},"condition":{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"10448:2:201"},{"name":"_2","nodeType":"YulIdentifier","src":"10452:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10445:2:201"},"nodeType":"YulFunctionCall","src":"10445:10:201"},"nodeType":"YulIf","src":"10442:36:201"},{"nodeType":"YulVariableDeclaration","src":"10487:47:201","value":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10522:1:201","type":"","value":"5"},{"name":"_4","nodeType":"YulIdentifier","src":"10525:2:201"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"10518:3:201"},"nodeType":"YulFunctionCall","src":"10518:10:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10530:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10514:3:201"},"nodeType":"YulFunctionCall","src":"10514:19:201"}],"functionName":{"name":"allocate_memory","nodeType":"YulIdentifier","src":"10498:15:201"},"nodeType":"YulFunctionCall","src":"10498:36:201"},"variables":[{"name":"dst","nodeType":"YulTypedName","src":"10491:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10543:16:201","value":{"name":"dst","nodeType":"YulIdentifier","src":"10556:3:201"},"variables":[{"name":"dst_1","nodeType":"YulTypedName","src":"10547:5:201","type":""}]},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"10575:3:201"},{"name":"_4","nodeType":"YulIdentifier","src":"10580:2:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10568:6:201"},"nodeType":"YulFunctionCall","src":"10568:15:201"},"nodeType":"YulExpressionStatement","src":"10568:15:201"},{"nodeType":"YulAssignment","src":"10592:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"10603:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10608:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10599:3:201"},"nodeType":"YulFunctionCall","src":"10599:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"10592:3:201"}]},{"nodeType":"YulVariableDeclaration","src":"10620:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10630:4:201","type":"","value":"0xe0"},"variables":[{"name":"_5","nodeType":"YulTypedName","src":"10624:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"10643:43:201","value":{"arguments":[{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"10665:2:201"},{"arguments":[{"name":"_4","nodeType":"YulIdentifier","src":"10673:2:201"},{"name":"_5","nodeType":"YulIdentifier","src":"10677:2:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"10669:3:201"},"nodeType":"YulFunctionCall","src":"10669:11:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10661:3:201"},"nodeType":"YulFunctionCall","src":"10661:20:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10683:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10657:3:201"},"nodeType":"YulFunctionCall","src":"10657:29:201"},"variables":[{"name":"srcEnd","nodeType":"YulTypedName","src":"10647:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"10718:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10727:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10730:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10720:6:201"},"nodeType":"YulFunctionCall","src":"10720:12:201"},"nodeType":"YulExpressionStatement","src":"10720:12:201"}]},"condition":{"arguments":[{"name":"srcEnd","nodeType":"YulIdentifier","src":"10701:6:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"10709:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"10698:2:201"},"nodeType":"YulFunctionCall","src":"10698:19:201"},"nodeType":"YulIf","src":"10695:39:201"},{"nodeType":"YulVariableDeclaration","src":"10743:22:201","value":{"arguments":[{"name":"_3","nodeType":"YulIdentifier","src":"10758:2:201"},{"name":"_1","nodeType":"YulIdentifier","src":"10762:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10754:3:201"},"nodeType":"YulFunctionCall","src":"10754:11:201"},"variables":[{"name":"src","nodeType":"YulTypedName","src":"10747:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"10830:1142:201","statements":[{"body":{"nodeType":"YulBlock","src":"10886:74:201","statements":[{"nodeType":"YulVariableDeclaration","src":"10904:11:201","value":{"kind":"number","nodeType":"YulLiteral","src":"10914:1:201","type":"","value":"0"},"variables":[{"name":"_6","nodeType":"YulTypedName","src":"10908:2:201","type":""}]},{"expression":{"arguments":[{"name":"_6","nodeType":"YulIdentifier","src":"10939:2:201"},{"name":"_6","nodeType":"YulIdentifier","src":"10943:2:201"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10932:6:201"},"nodeType":"YulFunctionCall","src":"10932:14:201"},"nodeType":"YulExpressionStatement","src":"10932:14:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"10855:7:201"},{"name":"src","nodeType":"YulIdentifier","src":"10864:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"10851:3:201"},"nodeType":"YulFunctionCall","src":"10851:17:201"},{"name":"_5","nodeType":"YulIdentifier","src":"10870:2:201"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"10847:3:201"},"nodeType":"YulFunctionCall","src":"10847:26:201"},"nodeType":"YulIf","src":"10844:116:201"},{"nodeType":"YulVariableDeclaration","src":"10973:35:201","value":{"arguments":[],"functionName":{"name":"allocate_memory_3365","nodeType":"YulIdentifier","src":"10986:20:201"},"nodeType":"YulFunctionCall","src":"10986:22:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"10977:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11028:5:201"},{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"11053:3:201"}],"functionName":{"name":"abi_decode_uint88","nodeType":"YulIdentifier","src":"11035:17:201"},"nodeType":"YulFunctionCall","src":"11035:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11021:6:201"},"nodeType":"YulFunctionCall","src":"11021:37:201"},"nodeType":"YulExpressionStatement","src":"11021:37:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11082:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11089:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11078:3:201"},"nodeType":"YulFunctionCall","src":"11078:14:201"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"11111:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11116:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11107:3:201"},"nodeType":"YulFunctionCall","src":"11107:12:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"11094:12:201"},"nodeType":"YulFunctionCall","src":"11094:26:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11071:6:201"},"nodeType":"YulFunctionCall","src":"11071:50:201"},"nodeType":"YulExpressionStatement","src":"11071:50:201"},{"nodeType":"YulVariableDeclaration","src":"11134:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11144:2:201","type":"","value":"64"},"variables":[{"name":"_7","nodeType":"YulTypedName","src":"11138:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11170:5:201"},{"name":"_7","nodeType":"YulIdentifier","src":"11177:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11166:3:201"},"nodeType":"YulFunctionCall","src":"11166:14:201"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"11204:3:201"},{"name":"_7","nodeType":"YulIdentifier","src":"11209:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11200:3:201"},"nodeType":"YulFunctionCall","src":"11200:12:201"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"11182:17:201"},"nodeType":"YulFunctionCall","src":"11182:31:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11159:6:201"},"nodeType":"YulFunctionCall","src":"11159:55:201"},"nodeType":"YulExpressionStatement","src":"11159:55:201"},{"nodeType":"YulVariableDeclaration","src":"11227:12:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11237:2:201","type":"","value":"96"},"variables":[{"name":"_8","nodeType":"YulTypedName","src":"11231:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11252:41:201","value":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"11284:3:201"},{"name":"_8","nodeType":"YulIdentifier","src":"11289:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11280:3:201"},"nodeType":"YulFunctionCall","src":"11280:12:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"11267:12:201"},"nodeType":"YulFunctionCall","src":"11267:26:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"11256:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"11331:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"11306:24:201"},"nodeType":"YulFunctionCall","src":"11306:33:201"},"nodeType":"YulExpressionStatement","src":"11306:33:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11363:5:201"},{"name":"_8","nodeType":"YulIdentifier","src":"11370:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11359:3:201"},"nodeType":"YulFunctionCall","src":"11359:14:201"},{"name":"value_1","nodeType":"YulIdentifier","src":"11375:7:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11352:6:201"},"nodeType":"YulFunctionCall","src":"11352:31:201"},"nodeType":"YulExpressionStatement","src":"11352:31:201"},{"nodeType":"YulVariableDeclaration","src":"11396:13:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11406:3:201","type":"","value":"128"},"variables":[{"name":"_9","nodeType":"YulTypedName","src":"11400:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11422:41:201","value":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"11454:3:201"},{"name":"_9","nodeType":"YulIdentifier","src":"11459:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11450:3:201"},"nodeType":"YulFunctionCall","src":"11450:12:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"11437:12:201"},"nodeType":"YulFunctionCall","src":"11437:26:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"11426:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"11501:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"11476:24:201"},"nodeType":"YulFunctionCall","src":"11476:33:201"},"nodeType":"YulExpressionStatement","src":"11476:33:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11533:5:201"},{"name":"_9","nodeType":"YulIdentifier","src":"11540:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11529:3:201"},"nodeType":"YulFunctionCall","src":"11529:14:201"},{"name":"value_2","nodeType":"YulIdentifier","src":"11545:7:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11522:6:201"},"nodeType":"YulFunctionCall","src":"11522:31:201"},"nodeType":"YulExpressionStatement","src":"11522:31:201"},{"nodeType":"YulVariableDeclaration","src":"11566:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11577:3:201","type":"","value":"160"},"variables":[{"name":"_10","nodeType":"YulTypedName","src":"11570:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11593:42:201","value":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"11625:3:201"},{"name":"_10","nodeType":"YulIdentifier","src":"11630:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11621:3:201"},"nodeType":"YulFunctionCall","src":"11621:13:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"11608:12:201"},"nodeType":"YulFunctionCall","src":"11608:27:201"},"variables":[{"name":"value_3","nodeType":"YulTypedName","src":"11597:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_3","nodeType":"YulIdentifier","src":"11673:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"11648:24:201"},"nodeType":"YulFunctionCall","src":"11648:33:201"},"nodeType":"YulExpressionStatement","src":"11648:33:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11705:5:201"},{"name":"_10","nodeType":"YulIdentifier","src":"11712:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11701:3:201"},"nodeType":"YulFunctionCall","src":"11701:15:201"},{"name":"value_3","nodeType":"YulIdentifier","src":"11718:7:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11694:6:201"},"nodeType":"YulFunctionCall","src":"11694:32:201"},"nodeType":"YulExpressionStatement","src":"11694:32:201"},{"nodeType":"YulVariableDeclaration","src":"11739:14:201","value":{"kind":"number","nodeType":"YulLiteral","src":"11750:3:201","type":"","value":"192"},"variables":[{"name":"_11","nodeType":"YulTypedName","src":"11743:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"11766:42:201","value":{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"11798:3:201"},{"name":"_11","nodeType":"YulIdentifier","src":"11803:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11794:3:201"},"nodeType":"YulFunctionCall","src":"11794:13:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"11781:12:201"},"nodeType":"YulFunctionCall","src":"11781:27:201"},"variables":[{"name":"value_4","nodeType":"YulTypedName","src":"11770:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_4","nodeType":"YulIdentifier","src":"11846:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"11821:24:201"},"nodeType":"YulFunctionCall","src":"11821:33:201"},"nodeType":"YulExpressionStatement","src":"11821:33:201"},{"expression":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"11878:5:201"},{"name":"_11","nodeType":"YulIdentifier","src":"11885:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11874:3:201"},"nodeType":"YulFunctionCall","src":"11874:15:201"},{"name":"value_4","nodeType":"YulIdentifier","src":"11891:7:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11867:6:201"},"nodeType":"YulFunctionCall","src":"11867:32:201"},"nodeType":"YulExpressionStatement","src":"11867:32:201"},{"expression":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"11919:3:201"},{"name":"value","nodeType":"YulIdentifier","src":"11924:5:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11912:6:201"},"nodeType":"YulFunctionCall","src":"11912:18:201"},"nodeType":"YulExpressionStatement","src":"11912:18:201"},{"nodeType":"YulAssignment","src":"11943:19:201","value":{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"11954:3:201"},{"name":"_1","nodeType":"YulIdentifier","src":"11959:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11950:3:201"},"nodeType":"YulFunctionCall","src":"11950:12:201"},"variableNames":[{"name":"dst","nodeType":"YulIdentifier","src":"11943:3:201"}]}]},"condition":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"10785:3:201"},{"name":"srcEnd","nodeType":"YulIdentifier","src":"10790:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"10782:2:201"},"nodeType":"YulFunctionCall","src":"10782:15:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"10798:23:201","statements":[{"nodeType":"YulAssignment","src":"10800:19:201","value":{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"10811:3:201"},{"name":"_5","nodeType":"YulIdentifier","src":"10816:2:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10807:3:201"},"nodeType":"YulFunctionCall","src":"10807:12:201"},"variableNames":[{"name":"src","nodeType":"YulIdentifier","src":"10800:3:201"}]}]},"pre":{"nodeType":"YulBlock","src":"10778:3:201","statements":[]},"src":"10774:1198:201"},{"nodeType":"YulAssignment","src":"11981:15:201","value":{"name":"dst_1","nodeType":"YulIdentifier","src":"11991:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"11981:6:201"}]}]},"name":"abi_decode_tuple_t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10050:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"10061:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"10073:6:201","type":""}],"src":"9952:2050:201"},{"body":{"nodeType":"YulBlock","src":"12104:87:201","statements":[{"nodeType":"YulAssignment","src":"12114:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12126:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12137:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12122:3:201"},"nodeType":"YulFunctionCall","src":"12122:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12114:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12156:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"12171:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"12179:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12167:3:201"},"nodeType":"YulFunctionCall","src":"12167:17:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12149:6:201"},"nodeType":"YulFunctionCall","src":"12149:36:201"},"nodeType":"YulExpressionStatement","src":"12149:36:201"}]},"name":"abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12073:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12084:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12095:4:201","type":""}],"src":"12007:184:201"},{"body":{"nodeType":"YulBlock","src":"12301:332:201","statements":[{"body":{"nodeType":"YulBlock","src":"12347:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12356:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12359:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12349:6:201"},"nodeType":"YulFunctionCall","src":"12349:12:201"},"nodeType":"YulExpressionStatement","src":"12349:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"12322:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"12331:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12318:3:201"},"nodeType":"YulFunctionCall","src":"12318:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"12343:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12314:3:201"},"nodeType":"YulFunctionCall","src":"12314:32:201"},"nodeType":"YulIf","src":"12311:52:201"},{"nodeType":"YulVariableDeclaration","src":"12372:37:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12399:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12386:12:201"},"nodeType":"YulFunctionCall","src":"12386:23:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"12376:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"12452:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12461:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12464:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12454:6:201"},"nodeType":"YulFunctionCall","src":"12454:12:201"},"nodeType":"YulExpressionStatement","src":"12454:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"12424:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"12432:18:201","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"12421:2:201"},"nodeType":"YulFunctionCall","src":"12421:30:201"},"nodeType":"YulIf","src":"12418:50:201"},{"nodeType":"YulVariableDeclaration","src":"12477:96:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12545:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"12556:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12541:3:201"},"nodeType":"YulFunctionCall","src":"12541:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"12565:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"12503:37:201"},"nodeType":"YulFunctionCall","src":"12503:70:201"},"variables":[{"name":"value0_1","nodeType":"YulTypedName","src":"12481:8:201","type":""},{"name":"value1_1","nodeType":"YulTypedName","src":"12491:8:201","type":""}]},{"nodeType":"YulAssignment","src":"12582:18:201","value":{"name":"value0_1","nodeType":"YulIdentifier","src":"12592:8:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"12582:6:201"}]},{"nodeType":"YulAssignment","src":"12609:18:201","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"12619:8:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"12609:6:201"}]}]},"name":"abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12259:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"12270:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"12282:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12290:6:201","type":""}],"src":"12196:437:201"},{"body":{"nodeType":"YulBlock","src":"12741:357:201","statements":[{"body":{"nodeType":"YulBlock","src":"12787:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"12796:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"12799:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"12789:6:201"},"nodeType":"YulFunctionCall","src":"12789:12:201"},"nodeType":"YulExpressionStatement","src":"12789:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"12762:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"12771:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"12758:3:201"},"nodeType":"YulFunctionCall","src":"12758:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"12783:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"12754:3:201"},"nodeType":"YulFunctionCall","src":"12754:32:201"},"nodeType":"YulIf","src":"12751:52:201"},{"nodeType":"YulVariableDeclaration","src":"12812:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12838:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12825:12:201"},"nodeType":"YulFunctionCall","src":"12825:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"12816:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"12882:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12857:24:201"},"nodeType":"YulFunctionCall","src":"12857:31:201"},"nodeType":"YulExpressionStatement","src":"12857:31:201"},{"nodeType":"YulAssignment","src":"12897:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"12907:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"12897:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"12921:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12953:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12964:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12949:3:201"},"nodeType":"YulFunctionCall","src":"12949:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"12936:12:201"},"nodeType":"YulFunctionCall","src":"12936:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"12925:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"13002:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"12977:24:201"},"nodeType":"YulFunctionCall","src":"12977:33:201"},"nodeType":"YulExpressionStatement","src":"12977:33:201"},{"nodeType":"YulAssignment","src":"13019:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"13029:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"13019:6:201"}]},{"nodeType":"YulAssignment","src":"13045:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13077:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13088:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13073:3:201"},"nodeType":"YulFunctionCall","src":"13073:18:201"}],"functionName":{"name":"abi_decode_uint32","nodeType":"YulIdentifier","src":"13055:17:201"},"nodeType":"YulFunctionCall","src":"13055:37:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"13045:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12691:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"12702:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"12714:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12722:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"12730:6:201","type":""}],"src":"12638:460:201"},{"body":{"nodeType":"YulBlock","src":"13221:301:201","statements":[{"body":{"nodeType":"YulBlock","src":"13267:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13276:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13279:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13269:6:201"},"nodeType":"YulFunctionCall","src":"13269:12:201"},"nodeType":"YulExpressionStatement","src":"13269:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13242:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"13251:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13238:3:201"},"nodeType":"YulFunctionCall","src":"13238:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"13263:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13234:3:201"},"nodeType":"YulFunctionCall","src":"13234:32:201"},"nodeType":"YulIf","src":"13231:52:201"},{"nodeType":"YulVariableDeclaration","src":"13292:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13318:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13305:12:201"},"nodeType":"YulFunctionCall","src":"13305:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13296:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13362:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"13337:24:201"},"nodeType":"YulFunctionCall","src":"13337:31:201"},"nodeType":"YulExpressionStatement","src":"13337:31:201"},{"nodeType":"YulAssignment","src":"13377:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"13387:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13377:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"13401:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13433:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13444:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13429:3:201"},"nodeType":"YulFunctionCall","src":"13429:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13416:12:201"},"nodeType":"YulFunctionCall","src":"13416:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"13405:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"13482:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"13457:24:201"},"nodeType":"YulFunctionCall","src":"13457:33:201"},"nodeType":"YulExpressionStatement","src":"13457:33:201"},{"nodeType":"YulAssignment","src":"13499:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"13509:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"13499:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_contract$_ITransferStrategyBase_$39643","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13179:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13190:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13202:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13210:6:201","type":""}],"src":"13103:419:201"},{"body":{"nodeType":"YulBlock","src":"13700:734:201","statements":[{"body":{"nodeType":"YulBlock","src":"13746:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13755:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13758:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13748:6:201"},"nodeType":"YulFunctionCall","src":"13748:12:201"},"nodeType":"YulExpressionStatement","src":"13748:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13721:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"13730:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13717:3:201"},"nodeType":"YulFunctionCall","src":"13717:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"13742:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13713:3:201"},"nodeType":"YulFunctionCall","src":"13713:32:201"},"nodeType":"YulIf","src":"13710:52:201"},{"nodeType":"YulVariableDeclaration","src":"13771:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13797:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13784:12:201"},"nodeType":"YulFunctionCall","src":"13784:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13775:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13841:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"13816:24:201"},"nodeType":"YulFunctionCall","src":"13816:31:201"},"nodeType":"YulExpressionStatement","src":"13816:31:201"},{"nodeType":"YulAssignment","src":"13856:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"13866:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13856:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"13880:46:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13911:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13922:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13907:3:201"},"nodeType":"YulFunctionCall","src":"13907:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"13894:12:201"},"nodeType":"YulFunctionCall","src":"13894:32:201"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"13884:6:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"13935:28:201","value":{"kind":"number","nodeType":"YulLiteral","src":"13945:18:201","type":"","value":"0xffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"13939:2:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"13990:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13999:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14002:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13992:6:201"},"nodeType":"YulFunctionCall","src":"13992:12:201"},"nodeType":"YulExpressionStatement","src":"13992:12:201"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"13978:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"13986:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"13975:2:201"},"nodeType":"YulFunctionCall","src":"13975:14:201"},"nodeType":"YulIf","src":"13972:34:201"},{"nodeType":"YulVariableDeclaration","src":"14015:96:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14083:9:201"},{"name":"offset","nodeType":"YulIdentifier","src":"14094:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14079:3:201"},"nodeType":"YulFunctionCall","src":"14079:22:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"14103:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"14041:37:201"},"nodeType":"YulFunctionCall","src":"14041:70:201"},"variables":[{"name":"value1_1","nodeType":"YulTypedName","src":"14019:8:201","type":""},{"name":"value2_1","nodeType":"YulTypedName","src":"14029:8:201","type":""}]},{"nodeType":"YulAssignment","src":"14120:18:201","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"14130:8:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"14120:6:201"}]},{"nodeType":"YulAssignment","src":"14147:18:201","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"14157:8:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"14147:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"14174:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14207:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14218:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14203:3:201"},"nodeType":"YulFunctionCall","src":"14203:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"14190:12:201"},"nodeType":"YulFunctionCall","src":"14190:32:201"},"variables":[{"name":"offset_1","nodeType":"YulTypedName","src":"14178:8:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"14251:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"14260:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"14263:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"14253:6:201"},"nodeType":"YulFunctionCall","src":"14253:12:201"},"nodeType":"YulExpressionStatement","src":"14253:12:201"}]},"condition":{"arguments":[{"name":"offset_1","nodeType":"YulIdentifier","src":"14237:8:201"},{"name":"_1","nodeType":"YulIdentifier","src":"14247:2:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"14234:2:201"},"nodeType":"YulFunctionCall","src":"14234:16:201"},"nodeType":"YulIf","src":"14231:36:201"},{"nodeType":"YulVariableDeclaration","src":"14276:98:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14344:9:201"},{"name":"offset_1","nodeType":"YulIdentifier","src":"14355:8:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14340:3:201"},"nodeType":"YulFunctionCall","src":"14340:24:201"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"14366:7:201"}],"functionName":{"name":"abi_decode_array_address_dyn_calldata","nodeType":"YulIdentifier","src":"14302:37:201"},"nodeType":"YulFunctionCall","src":"14302:72:201"},"variables":[{"name":"value3_1","nodeType":"YulTypedName","src":"14280:8:201","type":""},{"name":"value4_1","nodeType":"YulTypedName","src":"14290:8:201","type":""}]},{"nodeType":"YulAssignment","src":"14383:18:201","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"14393:8:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"14383:6:201"}]},{"nodeType":"YulAssignment","src":"14410:18:201","value":{"name":"value4_1","nodeType":"YulIdentifier","src":"14420:8:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"14410:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint88_$dyn_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13634:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13645:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13657:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"13665:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"13673:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"13681:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"13689:6:201","type":""}],"src":"13527:907:201"},{"body":{"nodeType":"YulBlock","src":"14613:168:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14630:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14641:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14623:6:201"},"nodeType":"YulFunctionCall","src":"14623:21:201"},"nodeType":"YulExpressionStatement","src":"14623:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14664:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14675:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14660:3:201"},"nodeType":"YulFunctionCall","src":"14660:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"14680:2:201","type":"","value":"18"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14653:6:201"},"nodeType":"YulFunctionCall","src":"14653:30:201"},"nodeType":"YulExpressionStatement","src":"14653:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14703:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14714:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14699:3:201"},"nodeType":"YulFunctionCall","src":"14699:18:201"},{"hexValue":"494e56414c49445f544f5f41444452455353","kind":"string","nodeType":"YulLiteral","src":"14719:20:201","type":"","value":"INVALID_TO_ADDRESS"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14692:6:201"},"nodeType":"YulFunctionCall","src":"14692:48:201"},"nodeType":"YulExpressionStatement","src":"14692:48:201"},{"nodeType":"YulAssignment","src":"14749:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14761:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14772:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14757:3:201"},"nodeType":"YulFunctionCall","src":"14757:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14749:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_60a6ecd9d15a2e4ae360b5943de5e7d94204c8fa7a9b93d3208a26418697ceb3__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14590:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14604:4:201","type":""}],"src":"14439:342:201"},{"body":{"nodeType":"YulBlock","src":"14960:170:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14977:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14988:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14970:6:201"},"nodeType":"YulFunctionCall","src":"14970:21:201"},"nodeType":"YulExpressionStatement","src":"14970:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15011:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15022:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15007:3:201"},"nodeType":"YulFunctionCall","src":"15007:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"15027:2:201","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15000:6:201"},"nodeType":"YulFunctionCall","src":"15000:30:201"},"nodeType":"YulExpressionStatement","src":"15000:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15050:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15061:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15046:3:201"},"nodeType":"YulFunctionCall","src":"15046:18:201"},{"hexValue":"434c41494d45525f554e415554484f52495a4544","kind":"string","nodeType":"YulLiteral","src":"15066:22:201","type":"","value":"CLAIMER_UNAUTHORIZED"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15039:6:201"},"nodeType":"YulFunctionCall","src":"15039:50:201"},"nodeType":"YulExpressionStatement","src":"15039:50:201"},{"nodeType":"YulAssignment","src":"15098:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15110:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15121:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15106:3:201"},"nodeType":"YulFunctionCall","src":"15106:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15098:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_dc389f9f05ed02e337a2af628240d9d635867491305ed504870102f5e0924c61__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14937:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14951:4:201","type":""}],"src":"14786:344:201"},{"body":{"nodeType":"YulBlock","src":"15309:170:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15326:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15337:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15319:6:201"},"nodeType":"YulFunctionCall","src":"15319:21:201"},"nodeType":"YulExpressionStatement","src":"15319:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15360:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15371:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15356:3:201"},"nodeType":"YulFunctionCall","src":"15356:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"15376:2:201","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15349:6:201"},"nodeType":"YulFunctionCall","src":"15349:30:201"},"nodeType":"YulExpressionStatement","src":"15349:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15399:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15410:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15395:3:201"},"nodeType":"YulFunctionCall","src":"15395:18:201"},{"hexValue":"494e56414c49445f555345525f41444452455353","kind":"string","nodeType":"YulLiteral","src":"15415:22:201","type":"","value":"INVALID_USER_ADDRESS"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15388:6:201"},"nodeType":"YulFunctionCall","src":"15388:50:201"},"nodeType":"YulExpressionStatement","src":"15388:50:201"},{"nodeType":"YulAssignment","src":"15447:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15459:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15470:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15455:3:201"},"nodeType":"YulFunctionCall","src":"15455:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15447:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_4058a4fa702d397682b400d1a2d7894f822738ac481455440aeb37a04a780eca__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15286:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15300:4:201","type":""}],"src":"15135:344:201"},{"body":{"nodeType":"YulBlock","src":"15516:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15533:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15536:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15526:6:201"},"nodeType":"YulFunctionCall","src":"15526:88:201"},"nodeType":"YulExpressionStatement","src":"15526:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15630:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"15633:4:201","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15623:6:201"},"nodeType":"YulFunctionCall","src":"15623:15:201"},"nodeType":"YulExpressionStatement","src":"15623:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15654:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15657:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15647:6:201"},"nodeType":"YulFunctionCall","src":"15647:15:201"},"nodeType":"YulExpressionStatement","src":"15647:15:201"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"15484:184:201"},{"body":{"nodeType":"YulBlock","src":"15705:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15722:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15725:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15715:6:201"},"nodeType":"YulFunctionCall","src":"15715:88:201"},"nodeType":"YulExpressionStatement","src":"15715:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15819:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"15822:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15812:6:201"},"nodeType":"YulFunctionCall","src":"15812:15:201"},"nodeType":"YulExpressionStatement","src":"15812:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"15843:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"15846:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"15836:6:201"},"nodeType":"YulFunctionCall","src":"15836:15:201"},"nodeType":"YulExpressionStatement","src":"15836:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"15673:184:201"},{"body":{"nodeType":"YulBlock","src":"15910:80:201","statements":[{"body":{"nodeType":"YulBlock","src":"15937:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"15939:16:201"},"nodeType":"YulFunctionCall","src":"15939:18:201"},"nodeType":"YulExpressionStatement","src":"15939:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15926:1:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"15933:1:201"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"15929:3:201"},"nodeType":"YulFunctionCall","src":"15929:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15923:2:201"},"nodeType":"YulFunctionCall","src":"15923:13:201"},"nodeType":"YulIf","src":"15920:39:201"},{"nodeType":"YulAssignment","src":"15968:16:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"15979:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"15982:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15975:3:201"},"nodeType":"YulFunctionCall","src":"15975:9:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"15968:3:201"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"15893:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"15896:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"15902:3:201","type":""}],"src":"15862:128:201"},{"body":{"nodeType":"YulBlock","src":"16042:148:201","statements":[{"body":{"nodeType":"YulBlock","src":"16133:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"16135:16:201"},"nodeType":"YulFunctionCall","src":"16135:18:201"},"nodeType":"YulExpressionStatement","src":"16135:18:201"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16058:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"16065:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"16055:2:201"},"nodeType":"YulFunctionCall","src":"16055:77:201"},"nodeType":"YulIf","src":"16052:103:201"},{"nodeType":"YulAssignment","src":"16164:20:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16175:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"16182:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16171:3:201"},"nodeType":"YulFunctionCall","src":"16171:13:201"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"16164:3:201"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"16024:5:201","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"16034:3:201","type":""}],"src":"15995:195:201"},{"body":{"nodeType":"YulBlock","src":"16369:171:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16386:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16397:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16379:6:201"},"nodeType":"YulFunctionCall","src":"16379:21:201"},"nodeType":"YulExpressionStatement","src":"16379:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16420:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16431:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16416:3:201"},"nodeType":"YulFunctionCall","src":"16416:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"16436:2:201","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16409:6:201"},"nodeType":"YulFunctionCall","src":"16409:30:201"},"nodeType":"YulExpressionStatement","src":"16409:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16459:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16470:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16455:3:201"},"nodeType":"YulFunctionCall","src":"16455:18:201"},{"hexValue":"4f4e4c595f454d495353494f4e5f4d414e41474552","kind":"string","nodeType":"YulLiteral","src":"16475:23:201","type":"","value":"ONLY_EMISSION_MANAGER"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"16448:6:201"},"nodeType":"YulFunctionCall","src":"16448:51:201"},"nodeType":"YulExpressionStatement","src":"16448:51:201"},{"nodeType":"YulAssignment","src":"16508:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16520:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"16531:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16516:3:201"},"nodeType":"YulFunctionCall","src":"16516:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16508:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_a28d34ff463a8cc689c6ec4b8c995983f85d0a40987242bc4cc3cec37303c18e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16346:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"16360:4:201","type":""}],"src":"16195:345:201"},{"body":{"nodeType":"YulBlock","src":"16592:179:201","statements":[{"nodeType":"YulVariableDeclaration","src":"16602:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"16612:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"16606:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"16655:29:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"16674:5:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16681:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16670:3:201"},"nodeType":"YulFunctionCall","src":"16670:14:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"16659:7:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"16712:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"16714:16:201"},"nodeType":"YulFunctionCall","src":"16714:18:201"},"nodeType":"YulExpressionStatement","src":"16714:18:201"}]},"condition":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"16699:7:201"},{"name":"_1","nodeType":"YulIdentifier","src":"16708:2:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"16696:2:201"},"nodeType":"YulFunctionCall","src":"16696:15:201"},"nodeType":"YulIf","src":"16693:41:201"},{"nodeType":"YulAssignment","src":"16743:22:201","value":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"16754:7:201"},{"kind":"number","nodeType":"YulLiteral","src":"16763:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16750:3:201"},"nodeType":"YulFunctionCall","src":"16750:15:201"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"16743:3:201"}]}]},"name":"increment_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"16574:5:201","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"16584:3:201","type":""}],"src":"16545:226:201"},{"body":{"nodeType":"YulBlock","src":"16857:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"16903:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"16912:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"16915:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"16905:6:201"},"nodeType":"YulFunctionCall","src":"16905:12:201"},"nodeType":"YulExpressionStatement","src":"16905:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"16878:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"16887:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"16874:3:201"},"nodeType":"YulFunctionCall","src":"16874:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"16899:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"16870:3:201"},"nodeType":"YulFunctionCall","src":"16870:32:201"},"nodeType":"YulIf","src":"16867:52:201"},{"nodeType":"YulAssignment","src":"16928:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16944:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"16938:5:201"},"nodeType":"YulFunctionCall","src":"16938:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"16928:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"16823:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"16834:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"16846:6:201","type":""}],"src":"16776:184:201"},{"body":{"nodeType":"YulBlock","src":"17029:418:201","statements":[{"nodeType":"YulVariableDeclaration","src":"17039:16:201","value":{"kind":"number","nodeType":"YulLiteral","src":"17054:1:201","type":"","value":"1"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"17043:7:201","type":""}]},{"nodeType":"YulAssignment","src":"17064:16:201","value":{"name":"power_1","nodeType":"YulIdentifier","src":"17073:7:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"17064:5:201"}]},{"nodeType":"YulAssignment","src":"17089:13:201","value":{"name":"_base","nodeType":"YulIdentifier","src":"17097:5:201"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"17089:4:201"}]},{"body":{"nodeType":"YulBlock","src":"17153:288:201","statements":[{"body":{"nodeType":"YulBlock","src":"17258:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"17260:16:201"},"nodeType":"YulFunctionCall","src":"17260:18:201"},"nodeType":"YulExpressionStatement","src":"17260:18:201"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"17173:4:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"17183:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base","nodeType":"YulIdentifier","src":"17251:4:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"17179:3:201"},"nodeType":"YulFunctionCall","src":"17179:77:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"17170:2:201"},"nodeType":"YulFunctionCall","src":"17170:87:201"},"nodeType":"YulIf","src":"17167:113:201"},{"body":{"nodeType":"YulBlock","src":"17319:29:201","statements":[{"nodeType":"YulAssignment","src":"17321:25:201","value":{"arguments":[{"name":"power","nodeType":"YulIdentifier","src":"17334:5:201"},{"name":"base","nodeType":"YulIdentifier","src":"17341:4:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"17330:3:201"},"nodeType":"YulFunctionCall","src":"17330:16:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"17321:5:201"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"17300:8:201"},{"name":"power_1","nodeType":"YulIdentifier","src":"17310:7:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17296:3:201"},"nodeType":"YulFunctionCall","src":"17296:22:201"},"nodeType":"YulIf","src":"17293:55:201"},{"nodeType":"YulAssignment","src":"17361:23:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"17373:4:201"},{"name":"base","nodeType":"YulIdentifier","src":"17379:4:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"17369:3:201"},"nodeType":"YulFunctionCall","src":"17369:15:201"},"variableNames":[{"name":"base","nodeType":"YulIdentifier","src":"17361:4:201"}]},{"nodeType":"YulAssignment","src":"17397:34:201","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"17413:7:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"17422:8:201"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"17409:3:201"},"nodeType":"YulFunctionCall","src":"17409:22:201"},"variableNames":[{"name":"exponent","nodeType":"YulIdentifier","src":"17397:8:201"}]}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"17122:8:201"},{"name":"power_1","nodeType":"YulIdentifier","src":"17132:7:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"17119:2:201"},"nodeType":"YulFunctionCall","src":"17119:21:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"17141:3:201","statements":[]},"pre":{"nodeType":"YulBlock","src":"17115:3:201","statements":[]},"src":"17111:330:201"}]},"name":"checked_exp_helper","nodeType":"YulFunctionDefinition","parameters":[{"name":"_base","nodeType":"YulTypedName","src":"16993:5:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"17000:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"17013:5:201","type":""},{"name":"base","nodeType":"YulTypedName","src":"17020:4:201","type":""}],"src":"16965:482:201"},{"body":{"nodeType":"YulBlock","src":"17511:807:201","statements":[{"body":{"nodeType":"YulBlock","src":"17549:52:201","statements":[{"nodeType":"YulAssignment","src":"17563:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"17572:1:201","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"17563:5:201"}]},{"nodeType":"YulLeave","src":"17586:5:201"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"17531:8:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17524:6:201"},"nodeType":"YulFunctionCall","src":"17524:16:201"},"nodeType":"YulIf","src":"17521:80:201"},{"body":{"nodeType":"YulBlock","src":"17634:52:201","statements":[{"nodeType":"YulAssignment","src":"17648:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"17657:1:201","type":"","value":"0"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"17648:5:201"}]},{"nodeType":"YulLeave","src":"17671:5:201"}]},"condition":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"17620:4:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"17613:6:201"},"nodeType":"YulFunctionCall","src":"17613:12:201"},"nodeType":"YulIf","src":"17610:76:201"},{"cases":[{"body":{"nodeType":"YulBlock","src":"17722:52:201","statements":[{"nodeType":"YulAssignment","src":"17736:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"17745:1:201","type":"","value":"1"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"17736:5:201"}]},{"nodeType":"YulLeave","src":"17759:5:201"}]},"nodeType":"YulCase","src":"17715:59:201","value":{"kind":"number","nodeType":"YulLiteral","src":"17720:1:201","type":"","value":"1"}},{"body":{"nodeType":"YulBlock","src":"17790:123:201","statements":[{"body":{"nodeType":"YulBlock","src":"17825:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"17827:16:201"},"nodeType":"YulFunctionCall","src":"17827:18:201"},"nodeType":"YulExpressionStatement","src":"17827:18:201"}]},"condition":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"17810:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"17820:3:201","type":"","value":"255"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"17807:2:201"},"nodeType":"YulFunctionCall","src":"17807:17:201"},"nodeType":"YulIf","src":"17804:43:201"},{"nodeType":"YulAssignment","src":"17860:25:201","value":{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"17873:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"17883:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"17869:3:201"},"nodeType":"YulFunctionCall","src":"17869:16:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"17860:5:201"}]},{"nodeType":"YulLeave","src":"17898:5:201"}]},"nodeType":"YulCase","src":"17783:130:201","value":{"kind":"number","nodeType":"YulLiteral","src":"17788:1:201","type":"","value":"2"}}],"expression":{"name":"base","nodeType":"YulIdentifier","src":"17702:4:201"},"nodeType":"YulSwitch","src":"17695:218:201"},{"body":{"nodeType":"YulBlock","src":"18011:70:201","statements":[{"nodeType":"YulAssignment","src":"18025:28:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"18038:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"18044:8:201"}],"functionName":{"name":"exp","nodeType":"YulIdentifier","src":"18034:3:201"},"nodeType":"YulFunctionCall","src":"18034:19:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"18025:5:201"}]},{"nodeType":"YulLeave","src":"18066:5:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"17935:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"17941:2:201","type":"","value":"11"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17932:2:201"},"nodeType":"YulFunctionCall","src":"17932:12:201"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"17949:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"17959:2:201","type":"","value":"78"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17946:2:201"},"nodeType":"YulFunctionCall","src":"17946:16:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17928:3:201"},"nodeType":"YulFunctionCall","src":"17928:35:201"},{"arguments":[{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"17972:4:201"},{"kind":"number","nodeType":"YulLiteral","src":"17978:3:201","type":"","value":"307"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17969:2:201"},"nodeType":"YulFunctionCall","src":"17969:13:201"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"17987:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"17997:2:201","type":"","value":"32"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"17984:2:201"},"nodeType":"YulFunctionCall","src":"17984:16:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"17965:3:201"},"nodeType":"YulFunctionCall","src":"17965:36:201"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"17925:2:201"},"nodeType":"YulFunctionCall","src":"17925:77:201"},"nodeType":"YulIf","src":"17922:159:201"},{"nodeType":"YulVariableDeclaration","src":"18090:57:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"18132:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"18138:8:201"}],"functionName":{"name":"checked_exp_helper","nodeType":"YulIdentifier","src":"18113:18:201"},"nodeType":"YulFunctionCall","src":"18113:34:201"},"variables":[{"name":"power_1","nodeType":"YulTypedName","src":"18094:7:201","type":""},{"name":"base_1","nodeType":"YulTypedName","src":"18103:6:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"18252:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"18254:16:201"},"nodeType":"YulFunctionCall","src":"18254:18:201"},"nodeType":"YulExpressionStatement","src":"18254:18:201"}]},"condition":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"18162:7:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"18175:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"base_1","nodeType":"YulIdentifier","src":"18243:6:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"18171:3:201"},"nodeType":"YulFunctionCall","src":"18171:79:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"18159:2:201"},"nodeType":"YulFunctionCall","src":"18159:92:201"},"nodeType":"YulIf","src":"18156:118:201"},{"nodeType":"YulAssignment","src":"18283:29:201","value":{"arguments":[{"name":"power_1","nodeType":"YulIdentifier","src":"18296:7:201"},{"name":"base_1","nodeType":"YulIdentifier","src":"18305:6:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"18292:3:201"},"nodeType":"YulFunctionCall","src":"18292:20:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"18283:5:201"}]}]},"name":"checked_exp_unsigned","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"17482:4:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"17488:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"17501:5:201","type":""}],"src":"17452:866:201"},{"body":{"nodeType":"YulBlock","src":"18391:72:201","statements":[{"nodeType":"YulAssignment","src":"18401:56:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"18431:4:201"},{"arguments":[{"name":"exponent","nodeType":"YulIdentifier","src":"18441:8:201"},{"kind":"number","nodeType":"YulLiteral","src":"18451:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"18437:3:201"},"nodeType":"YulFunctionCall","src":"18437:19:201"}],"functionName":{"name":"checked_exp_unsigned","nodeType":"YulIdentifier","src":"18410:20:201"},"nodeType":"YulFunctionCall","src":"18410:47:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"18401:5:201"}]}]},"name":"checked_exp_t_uint256_t_uint8","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"18362:4:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"18368:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"18381:5:201","type":""}],"src":"18323:140:201"},{"body":{"nodeType":"YulBlock","src":"18642:236:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18659:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18670:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18652:6:201"},"nodeType":"YulFunctionCall","src":"18652:21:201"},"nodeType":"YulExpressionStatement","src":"18652:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18693:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18704:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18689:3:201"},"nodeType":"YulFunctionCall","src":"18689:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"18709:2:201","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18682:6:201"},"nodeType":"YulFunctionCall","src":"18682:30:201"},"nodeType":"YulExpressionStatement","src":"18682:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18732:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18743:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18728:3:201"},"nodeType":"YulFunctionCall","src":"18728:18:201"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"18748:34:201","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18721:6:201"},"nodeType":"YulFunctionCall","src":"18721:62:201"},"nodeType":"YulExpressionStatement","src":"18721:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18803:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18814:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18799:3:201"},"nodeType":"YulFunctionCall","src":"18799:18:201"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"18819:16:201","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"18792:6:201"},"nodeType":"YulFunctionCall","src":"18792:44:201"},"nodeType":"YulExpressionStatement","src":"18792:44:201"},{"nodeType":"YulAssignment","src":"18845:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"18857:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"18868:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"18853:3:201"},"nodeType":"YulFunctionCall","src":"18853:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"18845:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"18619:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"18633:4:201","type":""}],"src":"18468:410:201"},{"body":{"nodeType":"YulBlock","src":"19093:363:201","statements":[{"nodeType":"YulAssignment","src":"19103:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19115:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19126:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19111:3:201"},"nodeType":"YulFunctionCall","src":"19111:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19103:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"19139:34:201","value":{"kind":"number","nodeType":"YulLiteral","src":"19149:24:201","type":"","value":"0xffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"19143:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19189:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"19204:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"19212:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19200:3:201"},"nodeType":"YulFunctionCall","src":"19200:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19182:6:201"},"nodeType":"YulFunctionCall","src":"19182:34:201"},"nodeType":"YulExpressionStatement","src":"19182:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19236:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19247:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19232:3:201"},"nodeType":"YulFunctionCall","src":"19232:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"19256:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"19264:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19252:3:201"},"nodeType":"YulFunctionCall","src":"19252:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19225:6:201"},"nodeType":"YulFunctionCall","src":"19225:43:201"},"nodeType":"YulExpressionStatement","src":"19225:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19288:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19299:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19284:3:201"},"nodeType":"YulFunctionCall","src":"19284:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"19304:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19277:6:201"},"nodeType":"YulFunctionCall","src":"19277:34:201"},"nodeType":"YulExpressionStatement","src":"19277:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19331:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19342:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19327:3:201"},"nodeType":"YulFunctionCall","src":"19327:18:201"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"19351:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"19359:10:201","type":"","value":"0xffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19347:3:201"},"nodeType":"YulFunctionCall","src":"19347:23:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19320:6:201"},"nodeType":"YulFunctionCall","src":"19320:51:201"},"nodeType":"YulExpressionStatement","src":"19320:51:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19391:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19402:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19387:3:201"},"nodeType":"YulFunctionCall","src":"19387:19:201"},{"arguments":[{"name":"value4","nodeType":"YulIdentifier","src":"19412:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"19420:28:201","type":"","value":"0xffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"19408:3:201"},"nodeType":"YulFunctionCall","src":"19408:41:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19380:6:201"},"nodeType":"YulFunctionCall","src":"19380:70:201"},"nodeType":"YulExpressionStatement","src":"19380:70:201"}]},"name":"abi_encode_tuple_t_uint88_t_uint88_t_uint256_t_uint32_t_uint104__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19030:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"19041:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"19049:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"19057:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"19065:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"19073:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19084:4:201","type":""}],"src":"18883:573:201"},{"body":{"nodeType":"YulBlock","src":"19635:163:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19652:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19663:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19645:6:201"},"nodeType":"YulFunctionCall","src":"19645:21:201"},"nodeType":"YulExpressionStatement","src":"19645:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19686:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19697:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19682:3:201"},"nodeType":"YulFunctionCall","src":"19682:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"19702:2:201","type":"","value":"13"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19675:6:201"},"nodeType":"YulFunctionCall","src":"19675:30:201"},"nodeType":"YulExpressionStatement","src":"19675:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19725:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19736:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19721:3:201"},"nodeType":"YulFunctionCall","src":"19721:18:201"},{"hexValue":"494e56414c49445f494e505554","kind":"string","nodeType":"YulLiteral","src":"19741:15:201","type":"","value":"INVALID_INPUT"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19714:6:201"},"nodeType":"YulFunctionCall","src":"19714:43:201"},"nodeType":"YulExpressionStatement","src":"19714:43:201"},{"nodeType":"YulAssignment","src":"19766:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19778:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"19789:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"19774:3:201"},"nodeType":"YulFunctionCall","src":"19774:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"19766:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_711bd914f7cada6362ff0637d445621cad80f8b6c31f2f06bb305d960854e2b7__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19612:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19626:4:201","type":""}],"src":"19461:337:201"},{"body":{"nodeType":"YulBlock","src":"19977:177:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"19994:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20005:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"19987:6:201"},"nodeType":"YulFunctionCall","src":"19987:21:201"},"nodeType":"YulExpressionStatement","src":"19987:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20028:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20039:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20024:3:201"},"nodeType":"YulFunctionCall","src":"20024:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"20044:2:201","type":"","value":"27"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20017:6:201"},"nodeType":"YulFunctionCall","src":"20017:30:201"},"nodeType":"YulExpressionStatement","src":"20017:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20067:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20078:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20063:3:201"},"nodeType":"YulFunctionCall","src":"20063:18:201"},{"hexValue":"444953545249425554494f4e5f444f45535f4e4f545f4558495354","kind":"string","nodeType":"YulLiteral","src":"20083:29:201","type":"","value":"DISTRIBUTION_DOES_NOT_EXIST"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20056:6:201"},"nodeType":"YulFunctionCall","src":"20056:57:201"},"nodeType":"YulExpressionStatement","src":"20056:57:201"},{"nodeType":"YulAssignment","src":"20122:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20134:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20145:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20130:3:201"},"nodeType":"YulFunctionCall","src":"20130:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20122:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_10feaa42ab1cceccf694775bb33448aff8ff2c6abffd88c4558574e392cfbf89__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"19954:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"19968:4:201","type":""}],"src":"19803:351:201"},{"body":{"nodeType":"YulBlock","src":"20229:61:201","statements":[{"nodeType":"YulAssignment","src":"20239:45:201","value":{"arguments":[{"name":"base","nodeType":"YulIdentifier","src":"20269:4:201"},{"name":"exponent","nodeType":"YulIdentifier","src":"20275:8:201"}],"functionName":{"name":"checked_exp_unsigned","nodeType":"YulIdentifier","src":"20248:20:201"},"nodeType":"YulFunctionCall","src":"20248:36:201"},"variableNames":[{"name":"power","nodeType":"YulIdentifier","src":"20239:5:201"}]}]},"name":"checked_exp_t_uint256_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"base","nodeType":"YulTypedName","src":"20200:4:201","type":""},{"name":"exponent","nodeType":"YulTypedName","src":"20206:8:201","type":""}],"returnVariables":[{"name":"power","nodeType":"YulTypedName","src":"20219:5:201","type":""}],"src":"20159:131:201"},{"body":{"nodeType":"YulBlock","src":"20364:115:201","statements":[{"body":{"nodeType":"YulBlock","src":"20410:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"20419:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"20422:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"20412:6:201"},"nodeType":"YulFunctionCall","src":"20412:12:201"},"nodeType":"YulExpressionStatement","src":"20412:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"20385:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"20394:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"20381:3:201"},"nodeType":"YulFunctionCall","src":"20381:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"20406:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"20377:3:201"},"nodeType":"YulFunctionCall","src":"20377:32:201"},"nodeType":"YulIf","src":"20374:52:201"},{"nodeType":"YulAssignment","src":"20435:38:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20463:9:201"}],"functionName":{"name":"abi_decode_uint88","nodeType":"YulIdentifier","src":"20445:17:201"},"nodeType":"YulFunctionCall","src":"20445:28:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"20435:6:201"}]}]},"name":"abi_decode_tuple_t_uint88","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20330:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"20341:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"20353:6:201","type":""}],"src":"20295:184:201"},{"body":{"nodeType":"YulBlock","src":"20694:328:201","statements":[{"nodeType":"YulAssignment","src":"20704:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20716:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20727:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20712:3:201"},"nodeType":"YulFunctionCall","src":"20712:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"20704:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20747:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"20758:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20740:6:201"},"nodeType":"YulFunctionCall","src":"20740:25:201"},"nodeType":"YulExpressionStatement","src":"20740:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20785:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20796:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20781:3:201"},"nodeType":"YulFunctionCall","src":"20781:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"20805:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"20813:24:201","type":"","value":"0xffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20801:3:201"},"nodeType":"YulFunctionCall","src":"20801:37:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20774:6:201"},"nodeType":"YulFunctionCall","src":"20774:65:201"},"nodeType":"YulExpressionStatement","src":"20774:65:201"},{"nodeType":"YulVariableDeclaration","src":"20848:20:201","value":{"kind":"number","nodeType":"YulLiteral","src":"20858:10:201","type":"","value":"0xffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"20852:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20888:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20899:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20884:3:201"},"nodeType":"YulFunctionCall","src":"20884:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"20908:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"20916:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20904:3:201"},"nodeType":"YulFunctionCall","src":"20904:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20877:6:201"},"nodeType":"YulFunctionCall","src":"20877:43:201"},"nodeType":"YulExpressionStatement","src":"20877:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20940:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"20951:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20936:3:201"},"nodeType":"YulFunctionCall","src":"20936:18:201"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"20960:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"20968:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"20956:3:201"},"nodeType":"YulFunctionCall","src":"20956:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20929:6:201"},"nodeType":"YulFunctionCall","src":"20929:43:201"},"nodeType":"YulExpressionStatement","src":"20929:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"20992:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21003:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"20988:3:201"},"nodeType":"YulFunctionCall","src":"20988:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"21009:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"20981:6:201"},"nodeType":"YulFunctionCall","src":"20981:35:201"},"nodeType":"YulExpressionStatement","src":"20981:35:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint88_t_uint32_t_uint32_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"20631:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"20642:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"20650:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"20658:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"20666:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"20674:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"20685:4:201","type":""}],"src":"20484:538:201"},{"body":{"nodeType":"YulBlock","src":"21076:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"21098:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"21100:16:201"},"nodeType":"YulFunctionCall","src":"21100:18:201"},"nodeType":"YulExpressionStatement","src":"21100:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"21092:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"21095:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"21089:2:201"},"nodeType":"YulFunctionCall","src":"21089:8:201"},"nodeType":"YulIf","src":"21086:34:201"},{"nodeType":"YulAssignment","src":"21129:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"21141:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"21144:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21137:3:201"},"nodeType":"YulFunctionCall","src":"21137:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"21129:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"21058:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"21061:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"21067:4:201","type":""}],"src":"21027:125:201"},{"body":{"nodeType":"YulBlock","src":"21286:168:201","statements":[{"nodeType":"YulAssignment","src":"21296:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21308:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21319:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21304:3:201"},"nodeType":"YulFunctionCall","src":"21304:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21296:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21338:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"21353:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"21361:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"21349:3:201"},"nodeType":"YulFunctionCall","src":"21349:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21331:6:201"},"nodeType":"YulFunctionCall","src":"21331:74:201"},"nodeType":"YulExpressionStatement","src":"21331:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21425:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21436:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21421:3:201"},"nodeType":"YulFunctionCall","src":"21421:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"21441:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21414:6:201"},"nodeType":"YulFunctionCall","src":"21414:34:201"},"nodeType":"YulExpressionStatement","src":"21414:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21247:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"21258:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"21266:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21277:4:201","type":""}],"src":"21157:297:201"},{"body":{"nodeType":"YulBlock","src":"21616:162:201","statements":[{"nodeType":"YulAssignment","src":"21626:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21638:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21649:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21634:3:201"},"nodeType":"YulFunctionCall","src":"21634:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"21626:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21668:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"21679:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21661:6:201"},"nodeType":"YulFunctionCall","src":"21661:25:201"},"nodeType":"YulExpressionStatement","src":"21661:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21706:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21717:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21702:3:201"},"nodeType":"YulFunctionCall","src":"21702:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"21722:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21695:6:201"},"nodeType":"YulFunctionCall","src":"21695:34:201"},"nodeType":"YulExpressionStatement","src":"21695:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21749:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"21760:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"21745:3:201"},"nodeType":"YulFunctionCall","src":"21745:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"21765:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"21738:6:201"},"nodeType":"YulFunctionCall","src":"21738:34:201"},"nodeType":"YulExpressionStatement","src":"21738:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21569:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"21580:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"21588:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"21596:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"21607:4:201","type":""}],"src":"21459:319:201"},{"body":{"nodeType":"YulBlock","src":"21881:147:201","statements":[{"body":{"nodeType":"YulBlock","src":"21927:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"21936:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"21939:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"21929:6:201"},"nodeType":"YulFunctionCall","src":"21929:12:201"},"nodeType":"YulExpressionStatement","src":"21929:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"21902:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"21911:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"21898:3:201"},"nodeType":"YulFunctionCall","src":"21898:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"21923:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"21894:3:201"},"nodeType":"YulFunctionCall","src":"21894:32:201"},"nodeType":"YulIf","src":"21891:52:201"},{"nodeType":"YulAssignment","src":"21952:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"21968:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"21962:5:201"},"nodeType":"YulFunctionCall","src":"21962:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"21952:6:201"}]},{"nodeType":"YulAssignment","src":"21987:35:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22007:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22018:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22003:3:201"},"nodeType":"YulFunctionCall","src":"22003:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"21997:5:201"},"nodeType":"YulFunctionCall","src":"21997:25:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"21987:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"21839:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"21850:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"21862:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"21870:6:201","type":""}],"src":"21783:245:201"},{"body":{"nodeType":"YulBlock","src":"22113:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"22159:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22168:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"22171:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"22161:6:201"},"nodeType":"YulFunctionCall","src":"22161:12:201"},"nodeType":"YulExpressionStatement","src":"22161:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"22134:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"22143:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"22130:3:201"},"nodeType":"YulFunctionCall","src":"22130:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"22155:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"22126:3:201"},"nodeType":"YulFunctionCall","src":"22126:32:201"},"nodeType":"YulIf","src":"22123:52:201"},{"nodeType":"YulAssignment","src":"22184:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22200:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"22194:5:201"},"nodeType":"YulFunctionCall","src":"22194:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"22184:6:201"}]}]},"name":"abi_decode_tuple_t_int256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22079:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"22090:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"22102:6:201","type":""}],"src":"22033:183:201"},{"body":{"nodeType":"YulBlock","src":"22395:174:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22412:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22423:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22405:6:201"},"nodeType":"YulFunctionCall","src":"22405:21:201"},"nodeType":"YulExpressionStatement","src":"22405:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22446:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22457:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22442:3:201"},"nodeType":"YulFunctionCall","src":"22442:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"22462:2:201","type":"","value":"24"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22435:6:201"},"nodeType":"YulFunctionCall","src":"22435:30:201"},"nodeType":"YulExpressionStatement","src":"22435:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22485:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22496:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22481:3:201"},"nodeType":"YulFunctionCall","src":"22481:18:201"},{"hexValue":"4f5241434c455f4d5553545f52455455524e5f5052494345","kind":"string","nodeType":"YulLiteral","src":"22501:26:201","type":"","value":"ORACLE_MUST_RETURN_PRICE"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22474:6:201"},"nodeType":"YulFunctionCall","src":"22474:54:201"},"nodeType":"YulExpressionStatement","src":"22474:54:201"},{"nodeType":"YulAssignment","src":"22537:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22549:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"22560:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"22545:3:201"},"nodeType":"YulFunctionCall","src":"22545:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"22537:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_d5c01d42b1a1c3ff17ba02c4e7b4da122e8081e6a9a9e3c2b86113aac113b6c4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22372:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22386:4:201","type":""}],"src":"22221:348:201"},{"body":{"nodeType":"YulBlock","src":"22626:176:201","statements":[{"body":{"nodeType":"YulBlock","src":"22745:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"22747:16:201"},"nodeType":"YulFunctionCall","src":"22747:18:201"},"nodeType":"YulExpressionStatement","src":"22747:18:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"22657:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"22650:6:201"},"nodeType":"YulFunctionCall","src":"22650:9:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"22643:6:201"},"nodeType":"YulFunctionCall","src":"22643:17:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"22665:1:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"22672:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"22740:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"22668:3:201"},"nodeType":"YulFunctionCall","src":"22668:74:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"22662:2:201"},"nodeType":"YulFunctionCall","src":"22662:81:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"22639:3:201"},"nodeType":"YulFunctionCall","src":"22639:105:201"},"nodeType":"YulIf","src":"22636:131:201"},{"nodeType":"YulAssignment","src":"22776:20:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"22791:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"22794:1:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"22787:3:201"},"nodeType":"YulFunctionCall","src":"22787:9:201"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"22776:7:201"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"22605:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"22608:1:201","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"22614:7:201","type":""}],"src":"22574:228:201"},{"body":{"nodeType":"YulBlock","src":"22981:174:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"22998:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23009:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"22991:6:201"},"nodeType":"YulFunctionCall","src":"22991:21:201"},"nodeType":"YulExpressionStatement","src":"22991:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23032:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23043:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23028:3:201"},"nodeType":"YulFunctionCall","src":"23028:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"23048:2:201","type":"","value":"24"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23021:6:201"},"nodeType":"YulFunctionCall","src":"23021:30:201"},"nodeType":"YulExpressionStatement","src":"23021:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23071:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23082:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23067:3:201"},"nodeType":"YulFunctionCall","src":"23067:18:201"},{"hexValue":"53545241544547595f43414e5f4e4f545f42455f5a45524f","kind":"string","nodeType":"YulLiteral","src":"23087:26:201","type":"","value":"STRATEGY_CAN_NOT_BE_ZERO"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23060:6:201"},"nodeType":"YulFunctionCall","src":"23060:54:201"},"nodeType":"YulExpressionStatement","src":"23060:54:201"},{"nodeType":"YulAssignment","src":"23123:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23135:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23146:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23131:3:201"},"nodeType":"YulFunctionCall","src":"23131:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23123:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_f92fea320a30dd7cdbbe8c4bc6042352b9a6f792b0208b12430ae04cb435cf6f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"22958:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"22972:4:201","type":""}],"src":"22807:348:201"},{"body":{"nodeType":"YulBlock","src":"23334:175:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23351:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23362:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23344:6:201"},"nodeType":"YulFunctionCall","src":"23344:21:201"},"nodeType":"YulExpressionStatement","src":"23344:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23385:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23396:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23381:3:201"},"nodeType":"YulFunctionCall","src":"23381:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"23401:2:201","type":"","value":"25"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23374:6:201"},"nodeType":"YulFunctionCall","src":"23374:30:201"},"nodeType":"YulExpressionStatement","src":"23374:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23424:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23435:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23420:3:201"},"nodeType":"YulFunctionCall","src":"23420:18:201"},{"hexValue":"53545241544547595f4d5553545f42455f434f4e5452414354","kind":"string","nodeType":"YulLiteral","src":"23440:27:201","type":"","value":"STRATEGY_MUST_BE_CONTRACT"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"23413:6:201"},"nodeType":"YulFunctionCall","src":"23413:55:201"},"nodeType":"YulExpressionStatement","src":"23413:55:201"},{"nodeType":"YulAssignment","src":"23477:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23489:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"23500:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"23485:3:201"},"nodeType":"YulFunctionCall","src":"23485:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"23477:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_234a2e04caaf9701e850eca8cfe55b40e5c433eb9676d2ccf0bc0ef6daacac31__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23311:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23325:4:201","type":""}],"src":"23160:349:201"},{"body":{"nodeType":"YulBlock","src":"23593:194:201","statements":[{"body":{"nodeType":"YulBlock","src":"23639:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23648:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"23651:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"23641:6:201"},"nodeType":"YulFunctionCall","src":"23641:12:201"},"nodeType":"YulExpressionStatement","src":"23641:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"23614:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"23623:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"23610:3:201"},"nodeType":"YulFunctionCall","src":"23610:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"23635:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"23606:3:201"},"nodeType":"YulFunctionCall","src":"23606:32:201"},"nodeType":"YulIf","src":"23603:52:201"},{"nodeType":"YulVariableDeclaration","src":"23664:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"23683:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"23677:5:201"},"nodeType":"YulFunctionCall","src":"23677:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"23668:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"23741:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"23750:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"23753:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"23743:6:201"},"nodeType":"YulFunctionCall","src":"23743:12:201"},"nodeType":"YulExpressionStatement","src":"23743:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23715:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"23726:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"23733:4:201","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"23722:3:201"},"nodeType":"YulFunctionCall","src":"23722:16:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"23712:2:201"},"nodeType":"YulFunctionCall","src":"23712:27:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"23705:6:201"},"nodeType":"YulFunctionCall","src":"23705:35:201"},"nodeType":"YulIf","src":"23702:55:201"},{"nodeType":"YulAssignment","src":"23766:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"23776:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"23766:6:201"}]}]},"name":"abi_decode_tuple_t_uint8_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23559:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"23570:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"23582:6:201","type":""}],"src":"23514:273:201"},{"body":{"nodeType":"YulBlock","src":"24001:358:201","statements":[{"nodeType":"YulAssignment","src":"24011:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24023:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24034:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24019:3:201"},"nodeType":"YulFunctionCall","src":"24019:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24011:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"24047:34:201","value":{"kind":"number","nodeType":"YulLiteral","src":"24057:24:201","type":"","value":"0xffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"24051:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24097:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"24112:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"24120:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24108:3:201"},"nodeType":"YulFunctionCall","src":"24108:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24090:6:201"},"nodeType":"YulFunctionCall","src":"24090:34:201"},"nodeType":"YulExpressionStatement","src":"24090:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24144:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24155:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24140:3:201"},"nodeType":"YulFunctionCall","src":"24140:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"24164:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"24172:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24160:3:201"},"nodeType":"YulFunctionCall","src":"24160:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24133:6:201"},"nodeType":"YulFunctionCall","src":"24133:43:201"},"nodeType":"YulExpressionStatement","src":"24133:43:201"},{"nodeType":"YulVariableDeclaration","src":"24185:20:201","value":{"kind":"number","nodeType":"YulLiteral","src":"24195:10:201","type":"","value":"0xffffffff"},"variables":[{"name":"_2","nodeType":"YulTypedName","src":"24189:2:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24225:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24236:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24221:3:201"},"nodeType":"YulFunctionCall","src":"24221:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"24245:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"24253:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24241:3:201"},"nodeType":"YulFunctionCall","src":"24241:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24214:6:201"},"nodeType":"YulFunctionCall","src":"24214:43:201"},"nodeType":"YulExpressionStatement","src":"24214:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24277:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24288:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24273:3:201"},"nodeType":"YulFunctionCall","src":"24273:18:201"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"24297:6:201"},{"name":"_2","nodeType":"YulIdentifier","src":"24305:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"24293:3:201"},"nodeType":"YulFunctionCall","src":"24293:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24266:6:201"},"nodeType":"YulFunctionCall","src":"24266:43:201"},"nodeType":"YulExpressionStatement","src":"24266:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24329:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24340:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24325:3:201"},"nodeType":"YulFunctionCall","src":"24325:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"24346:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24318:6:201"},"nodeType":"YulFunctionCall","src":"24318:35:201"},"nodeType":"YulExpressionStatement","src":"24318:35:201"}]},"name":"abi_encode_tuple_t_uint88_t_uint88_t_uint32_t_uint32_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"23938:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"23949:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"23957:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"23965:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"23973:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"23981:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"23992:4:201","type":""}],"src":"23792:567:201"},{"body":{"nodeType":"YulBlock","src":"24538:164:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24555:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24566:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24548:6:201"},"nodeType":"YulFunctionCall","src":"24548:21:201"},"nodeType":"YulExpressionStatement","src":"24548:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24589:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24600:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24585:3:201"},"nodeType":"YulFunctionCall","src":"24585:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"24605:2:201","type":"","value":"14"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24578:6:201"},"nodeType":"YulFunctionCall","src":"24578:30:201"},"nodeType":"YulExpressionStatement","src":"24578:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24628:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24639:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24624:3:201"},"nodeType":"YulFunctionCall","src":"24624:18:201"},{"hexValue":"494e4445585f4f564552464c4f57","kind":"string","nodeType":"YulLiteral","src":"24644:16:201","type":"","value":"INDEX_OVERFLOW"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24617:6:201"},"nodeType":"YulFunctionCall","src":"24617:44:201"},"nodeType":"YulExpressionStatement","src":"24617:44:201"},{"nodeType":"YulAssignment","src":"24670:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24682:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24693:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24678:3:201"},"nodeType":"YulFunctionCall","src":"24678:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"24670:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_f6a7187dfb6061567b074df0155c071985ca15e6ac6b3024e5bd106b2c7018cf__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24515:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24529:4:201","type":""}],"src":"24364:338:201"},{"body":{"nodeType":"YulBlock","src":"24881:229:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24898:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24909:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24891:6:201"},"nodeType":"YulFunctionCall","src":"24891:21:201"},"nodeType":"YulExpressionStatement","src":"24891:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24932:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24943:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24928:3:201"},"nodeType":"YulFunctionCall","src":"24928:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"24948:2:201","type":"","value":"39"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24921:6:201"},"nodeType":"YulFunctionCall","src":"24921:30:201"},"nodeType":"YulExpressionStatement","src":"24921:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"24971:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"24982:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"24967:3:201"},"nodeType":"YulFunctionCall","src":"24967:18:201"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2031","kind":"string","nodeType":"YulLiteral","src":"24987:34:201","type":"","value":"SafeCast: value doesn't fit in 1"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"24960:6:201"},"nodeType":"YulFunctionCall","src":"24960:62:201"},"nodeType":"YulExpressionStatement","src":"24960:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25042:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25053:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25038:3:201"},"nodeType":"YulFunctionCall","src":"25038:18:201"},{"hexValue":"32382062697473","kind":"string","nodeType":"YulLiteral","src":"25058:9:201","type":"","value":"28 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25031:6:201"},"nodeType":"YulFunctionCall","src":"25031:37:201"},"nodeType":"YulExpressionStatement","src":"25031:37:201"},{"nodeType":"YulAssignment","src":"25077:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25089:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25100:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25085:3:201"},"nodeType":"YulFunctionCall","src":"25085:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25077:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"24858:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"24872:4:201","type":""}],"src":"24707:403:201"},{"body":{"nodeType":"YulBlock","src":"25272:241:201","statements":[{"nodeType":"YulAssignment","src":"25282:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25294:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25305:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25290:3:201"},"nodeType":"YulFunctionCall","src":"25290:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"25282:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"25317:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"25327:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"25321:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25385:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"25400:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"25408:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25396:3:201"},"nodeType":"YulFunctionCall","src":"25396:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25378:6:201"},"nodeType":"YulFunctionCall","src":"25378:34:201"},"nodeType":"YulExpressionStatement","src":"25378:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25432:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25443:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25428:3:201"},"nodeType":"YulFunctionCall","src":"25428:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"25452:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"25460:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"25448:3:201"},"nodeType":"YulFunctionCall","src":"25448:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25421:6:201"},"nodeType":"YulFunctionCall","src":"25421:43:201"},"nodeType":"YulExpressionStatement","src":"25421:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25484:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"25495:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"25480:3:201"},"nodeType":"YulFunctionCall","src":"25480:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"25500:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25473:6:201"},"nodeType":"YulFunctionCall","src":"25473:34:201"},"nodeType":"YulExpressionStatement","src":"25473:34:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25225:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"25236:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"25244:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"25252:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25263:4:201","type":""}],"src":"25115:398:201"},{"body":{"nodeType":"YulBlock","src":"25596:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"25642:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25651:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"25654:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"25644:6:201"},"nodeType":"YulFunctionCall","src":"25644:12:201"},"nodeType":"YulExpressionStatement","src":"25644:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"25617:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"25626:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"25613:3:201"},"nodeType":"YulFunctionCall","src":"25613:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"25638:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"25609:3:201"},"nodeType":"YulFunctionCall","src":"25609:32:201"},"nodeType":"YulIf","src":"25606:52:201"},{"nodeType":"YulVariableDeclaration","src":"25667:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25686:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"25680:5:201"},"nodeType":"YulFunctionCall","src":"25680:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"25671:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"25749:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"25758:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"25761:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"25751:6:201"},"nodeType":"YulFunctionCall","src":"25751:12:201"},"nodeType":"YulExpressionStatement","src":"25751:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"25718:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"25739:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"25732:6:201"},"nodeType":"YulFunctionCall","src":"25732:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"25725:6:201"},"nodeType":"YulFunctionCall","src":"25725:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"25715:2:201"},"nodeType":"YulFunctionCall","src":"25715:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"25708:6:201"},"nodeType":"YulFunctionCall","src":"25708:40:201"},"nodeType":"YulIf","src":"25705:60:201"},{"nodeType":"YulAssignment","src":"25774:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"25784:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"25774:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25562:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"25573:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"25585:6:201","type":""}],"src":"25518:277:201"},{"body":{"nodeType":"YulBlock","src":"25974:164:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"25991:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26002:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"25984:6:201"},"nodeType":"YulFunctionCall","src":"25984:21:201"},"nodeType":"YulExpressionStatement","src":"25984:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26025:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26036:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26021:3:201"},"nodeType":"YulFunctionCall","src":"26021:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"26041:2:201","type":"","value":"14"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26014:6:201"},"nodeType":"YulFunctionCall","src":"26014:30:201"},"nodeType":"YulExpressionStatement","src":"26014:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26064:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26075:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26060:3:201"},"nodeType":"YulFunctionCall","src":"26060:18:201"},{"hexValue":"5452414e534645525f4552524f52","kind":"string","nodeType":"YulLiteral","src":"26080:16:201","type":"","value":"TRANSFER_ERROR"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26053:6:201"},"nodeType":"YulFunctionCall","src":"26053:44:201"},"nodeType":"YulExpressionStatement","src":"26053:44:201"},{"nodeType":"YulAssignment","src":"26106:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26118:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26129:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26114:3:201"},"nodeType":"YulFunctionCall","src":"26114:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26106:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_4a3338198267282d620156252d17efb5e3f8129e264028d436b0e918c4373099__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"25951:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"25965:4:201","type":""}],"src":"25800:338:201"},{"body":{"nodeType":"YulBlock","src":"26191:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"26201:44:201","value":{"kind":"number","nodeType":"YulLiteral","src":"26211:34:201","type":"","value":"0xffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"26205:2:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"26254:21:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"26269:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"26272:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26265:3:201"},"nodeType":"YulFunctionCall","src":"26265:10:201"},"variables":[{"name":"x_1","nodeType":"YulTypedName","src":"26258:3:201","type":""}]},{"nodeType":"YulVariableDeclaration","src":"26284:21:201","value":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"26299:1:201"},{"name":"_1","nodeType":"YulIdentifier","src":"26302:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"26295:3:201"},"nodeType":"YulFunctionCall","src":"26295:10:201"},"variables":[{"name":"y_1","nodeType":"YulTypedName","src":"26288:3:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"26339:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"26341:16:201"},"nodeType":"YulFunctionCall","src":"26341:18:201"},"nodeType":"YulExpressionStatement","src":"26341:18:201"}]},"condition":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"26320:3:201"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"26329:2:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"26333:3:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"26325:3:201"},"nodeType":"YulFunctionCall","src":"26325:12:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"26317:2:201"},"nodeType":"YulFunctionCall","src":"26317:21:201"},"nodeType":"YulIf","src":"26314:47:201"},{"nodeType":"YulAssignment","src":"26370:20:201","value":{"arguments":[{"name":"x_1","nodeType":"YulIdentifier","src":"26381:3:201"},{"name":"y_1","nodeType":"YulIdentifier","src":"26386:3:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26377:3:201"},"nodeType":"YulFunctionCall","src":"26377:13:201"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"26370:3:201"}]}]},"name":"checked_add_t_uint128","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"26174:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"26177:1:201","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"26183:3:201","type":""}],"src":"26143:253:201"},{"body":{"nodeType":"YulBlock","src":"26575:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26592:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26603:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26585:6:201"},"nodeType":"YulFunctionCall","src":"26585:21:201"},"nodeType":"YulExpressionStatement","src":"26585:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26626:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26637:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26622:3:201"},"nodeType":"YulFunctionCall","src":"26622:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"26642:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26615:6:201"},"nodeType":"YulFunctionCall","src":"26615:30:201"},"nodeType":"YulExpressionStatement","src":"26615:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26665:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26676:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26661:3:201"},"nodeType":"YulFunctionCall","src":"26661:18:201"},{"hexValue":"53616665436173743a2076616c756520646f65736e27742066697420696e2033","kind":"string","nodeType":"YulLiteral","src":"26681:34:201","type":"","value":"SafeCast: value doesn't fit in 3"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26654:6:201"},"nodeType":"YulFunctionCall","src":"26654:62:201"},"nodeType":"YulExpressionStatement","src":"26654:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26736:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26747:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26732:3:201"},"nodeType":"YulFunctionCall","src":"26732:18:201"},{"hexValue":"322062697473","kind":"string","nodeType":"YulLiteral","src":"26752:8:201","type":"","value":"2 bits"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"26725:6:201"},"nodeType":"YulFunctionCall","src":"26725:36:201"},"nodeType":"YulExpressionStatement","src":"26725:36:201"},{"nodeType":"YulAssignment","src":"26770:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"26782:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"26793:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"26778:3:201"},"nodeType":"YulFunctionCall","src":"26778:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"26770:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"26552:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"26566:4:201","type":""}],"src":"26401:402:201"}]},"contents":"{\n    { }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_array_address_dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_uint256t_addresst_address(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        value2 := calldataload(add(headStart, 32))\n        let value := calldataload(add(headStart, 64))\n        validator_revert_address(value)\n        value3 := value\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_address(value_1)\n        value4 := value_1\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_uint256t_addresst_addresst_address(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        value2 := calldataload(add(headStart, 32))\n        let value := calldataload(add(headStart, 64))\n        validator_revert_address(value)\n        value3 := value\n        let value_1 := calldataload(add(headStart, 96))\n        validator_revert_address(value_1)\n        value4 := value_1\n        let value_2 := calldataload(add(headStart, 128))\n        validator_revert_address(value_2)\n        value5 := value_2\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        let value := calldataload(add(headStart, 32))\n        validator_revert_address(value)\n        value2 := value\n    }\n    function abi_encode_array_address_dyn(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let _1 := 0x20\n        pos := add(pos, _1)\n        let srcPtr := add(value, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        end := pos\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, 64)\n        let tail_1 := abi_encode_array_address_dyn(value0, add(headStart, 64))\n        let _1 := 32\n        mstore(add(headStart, _1), sub(tail_1, headStart))\n        let pos := tail_1\n        let length := mload(value1)\n        mstore(tail_1, length)\n        pos := add(tail_1, _1)\n        let srcPtr := add(value1, _1)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 1) }\n        {\n            mstore(pos, mload(srcPtr))\n            pos := add(pos, _1)\n            srcPtr := add(srcPtr, _1)\n        }\n        tail := pos\n    }\n    function abi_decode_tuple_t_addresst_addresst_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n    }\n    function abi_decode_tuple_t_addresst_contract$_IEACAggregatorProxy_$34482(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_uint256t_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        value2 := calldataload(add(headStart, 32))\n        let value := calldataload(add(headStart, 64))\n        validator_revert_address(value)\n        value3 := value\n    }\n    function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_array_address_dyn(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_addresst_address(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        let value := calldataload(add(headStart, 32))\n        validator_revert_address(value)\n        value2 := value\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value3 := value_1\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory_3365() -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, 0xe0)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function abi_decode_uint88(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint32(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_struct$_RewardsConfigInput_$39666_memory_ptr_$dyn_memory_ptr(headStart, dataEnd) -> value0\n    {\n        let _1 := 32\n        if slt(sub(dataEnd, headStart), _1) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _2 := 0xffffffffffffffff\n        if gt(offset, _2) { revert(0, 0) }\n        let _3 := add(headStart, offset)\n        if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n        let _4 := calldataload(_3)\n        if gt(_4, _2) { panic_error_0x41() }\n        let dst := allocate_memory(add(shl(5, _4), _1))\n        let dst_1 := dst\n        mstore(dst, _4)\n        dst := add(dst, _1)\n        let _5 := 0xe0\n        let srcEnd := add(add(_3, mul(_4, _5)), _1)\n        if gt(srcEnd, dataEnd) { revert(0, 0) }\n        let src := add(_3, _1)\n        for { } lt(src, srcEnd) { src := add(src, _5) }\n        {\n            if slt(sub(dataEnd, src), _5)\n            {\n                let _6 := 0\n                revert(_6, _6)\n            }\n            let value := allocate_memory_3365()\n            mstore(value, abi_decode_uint88(src))\n            mstore(add(value, _1), calldataload(add(src, _1)))\n            let _7 := 64\n            mstore(add(value, _7), abi_decode_uint32(add(src, _7)))\n            let _8 := 96\n            let value_1 := calldataload(add(src, _8))\n            validator_revert_address(value_1)\n            mstore(add(value, _8), value_1)\n            let _9 := 128\n            let value_2 := calldataload(add(src, _9))\n            validator_revert_address(value_2)\n            mstore(add(value, _9), value_2)\n            let _10 := 160\n            let value_3 := calldataload(add(src, _10))\n            validator_revert_address(value_3)\n            mstore(add(value, _10), value_3)\n            let _11 := 192\n            let value_4 := calldataload(add(src, _11))\n            validator_revert_address(value_4)\n            mstore(add(value, _11), value_4)\n            mstore(dst, value)\n            dst := add(dst, _1)\n        }\n        value0 := dst_1\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint32(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := abi_decode_uint32(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_addresst_contract$_ITransferStrategyBase_$39643(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n    }\n    function abi_decode_tuple_t_addresst_array$_t_address_$dyn_calldata_ptrt_array$_t_uint88_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let offset := calldataload(add(headStart, 32))\n        let _1 := 0xffffffffffffffff\n        if gt(offset, _1) { revert(0, 0) }\n        let value1_1, value2_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n        let offset_1 := calldataload(add(headStart, 64))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value3_1, value4_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset_1), dataEnd)\n        value3 := value3_1\n        value4 := value4_1\n    }\n    function abi_encode_tuple_t_stringliteral_60a6ecd9d15a2e4ae360b5943de5e7d94204c8fa7a9b93d3208a26418697ceb3__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 18)\n        mstore(add(headStart, 64), \"INVALID_TO_ADDRESS\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_dc389f9f05ed02e337a2af628240d9d635867491305ed504870102f5e0924c61__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"CLAIMER_UNAUTHORIZED\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_4058a4fa702d397682b400d1a2d7894f822738ac481455440aeb37a04a780eca__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"INVALID_USER_ADDRESS\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y)) { panic_error_0x11() }\n        sum := add(x, y)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_stringliteral_a28d34ff463a8cc689c6ec4b8c995983f85d0a40987242bc4cc3cec37303c18e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"ONLY_EMISSION_MANAGER\")\n        tail := add(headStart, 96)\n    }\n    function increment_t_uint128(value) -> ret\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let value_1 := and(value, _1)\n        if eq(value_1, _1) { panic_error_0x11() }\n        ret := add(value_1, 1)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function checked_exp_helper(_base, exponent) -> power, base\n    {\n        let power_1 := 1\n        power := power_1\n        base := _base\n        for { } gt(exponent, power_1) { }\n        {\n            if gt(base, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base)) { panic_error_0x11() }\n            if and(exponent, power_1) { power := mul(power, base) }\n            base := mul(base, base)\n            exponent := shr(power_1, exponent)\n        }\n    }\n    function checked_exp_unsigned(base, exponent) -> power\n    {\n        if iszero(exponent)\n        {\n            power := 1\n            leave\n        }\n        if iszero(base)\n        {\n            power := 0\n            leave\n        }\n        switch base\n        case 1 {\n            power := 1\n            leave\n        }\n        case 2 {\n            if gt(exponent, 255) { panic_error_0x11() }\n            power := shl(exponent, 1)\n            leave\n        }\n        if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n        {\n            power := exp(base, exponent)\n            leave\n        }\n        let power_1, base_1 := checked_exp_helper(base, exponent)\n        if gt(power_1, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, base_1)) { panic_error_0x11() }\n        power := mul(power_1, base_1)\n    }\n    function checked_exp_t_uint256_t_uint8(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, and(exponent, 0xff))\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_uint88_t_uint88_t_uint256_t_uint32_t_uint104__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        let _1 := 0xffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, 0xffffffff))\n        mstore(add(headStart, 128), and(value4, 0xffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_stringliteral_711bd914f7cada6362ff0637d445621cad80f8b6c31f2f06bb305d960854e2b7__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 13)\n        mstore(add(headStart, 64), \"INVALID_INPUT\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_10feaa42ab1cceccf694775bb33448aff8ff2c6abffd88c4558574e392cfbf89__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 27)\n        mstore(add(headStart, 64), \"DISTRIBUTION_DOES_NOT_EXIST\")\n        tail := add(headStart, 96)\n    }\n    function checked_exp_t_uint256_t_uint256(base, exponent) -> power\n    {\n        power := checked_exp_unsigned(base, exponent)\n    }\n    function abi_decode_tuple_t_uint88(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_uint88(headStart)\n    }\n    function abi_encode_tuple_t_uint256_t_uint88_t_uint32_t_uint32_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffff))\n        let _1 := 0xffffffff\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), and(value3, _1))\n        mstore(add(headStart, 128), value4)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_decode_tuple_t_uint256t_uint256_fromMemory(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := mload(headStart)\n        value1 := mload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_int256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_d5c01d42b1a1c3ff17ba02c4e7b4da122e8081e6a9a9e3c2b86113aac113b6c4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 24)\n        mstore(add(headStart, 64), \"ORACLE_MUST_RETURN_PRICE\")\n        tail := add(headStart, 96)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function abi_encode_tuple_t_stringliteral_f92fea320a30dd7cdbbe8c4bc6042352b9a6f792b0208b12430ae04cb435cf6f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 24)\n        mstore(add(headStart, 64), \"STRATEGY_CAN_NOT_BE_ZERO\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_234a2e04caaf9701e850eca8cfe55b40e5c433eb9676d2ccf0bc0ef6daacac31__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"STRATEGY_MUST_BE_CONTRACT\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_uint8_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint88_t_uint88_t_uint32_t_uint32_t_uint256__to_t_uint256_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        let _1 := 0xffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        let _2 := 0xffffffff\n        mstore(add(headStart, 64), and(value2, _2))\n        mstore(add(headStart, 96), and(value3, _2))\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_encode_tuple_t_stringliteral_f6a7187dfb6061567b074df0155c071985ca15e6ac6b3024e5bd106b2c7018cf__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 14)\n        mstore(add(headStart, 64), \"INDEX_OVERFLOW\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_47a1e201974f94d3d1a31c8b08ae18c6966c758bdcd4400020012b98cc55426c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 39)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 1\")\n        mstore(add(headStart, 96), \"28 bits\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_4a3338198267282d620156252d17efb5e3f8129e264028d436b0e918c4373099__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 14)\n        mstore(add(headStart, 64), \"TRANSFER_ERROR\")\n        tail := add(headStart, 96)\n    }\n    function checked_add_t_uint128(x, y) -> sum\n    {\n        let _1 := 0xffffffffffffffffffffffffffffffff\n        let x_1 := and(x, _1)\n        let y_1 := and(y, _1)\n        if gt(x_1, sub(_1, y_1)) { panic_error_0x11() }\n        sum := add(x_1, y_1)\n    }\n    function abi_encode_tuple_t_stringliteral_c907489dafcfb622d3b83f2657a14d6da2f59e0de3116af0d6a80554c1a7cb19__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"SafeCast: value doesn't fit in 3\")\n        mstore(add(headStart, 96), \"2 bits\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"37598":[{"length":32,"start":1268},{"length":32,"start":1548},{"length":32,"start":3223},{"length":32,"start":4054},{"length":32,"start":5757},{"length":32,"start":6195},{"length":32,"start":6364},{"length":32,"start":6647}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106101da5760003560e01c806392074b0811610104578063bf90f63a116100a2578063dde43cba11610071578063dde43cba1461062e578063e15ac62314610636578063f5cf673b14610649578063f996868b1461065c57600080fd5b8063bf90f63a146105ce578063c4d66de8146105e1578063c5a7b538146105f4578063cbcbb5071461060757600080fd5b80639ff55db9116100de5780639ff55db91461058d578063b022418c146105a0578063b45ac1a9146105b3578063bb492bf5146105bb57600080fd5b806392074b08146104f2578063955c2ad7146105185780639efd6f721461052b57600080fd5b80635453ba101161017c57806370674ab91161014b57806370674ab9146103a257806374d945ec146103b55780637eff4ba8146103ee578063886fe70b146104ca57600080fd5b80635453ba101461032357806357b89883146103365780635f130b24146103495780636657732f1461038257600080fd5b806331873e2e116101b857806331873e2e1461027657806333028b991461028b5780634c0369c31461029e578063533f542a146102bf57600080fd5b80631b839c77146101df578063236300dc146102055780632a17bf6014610218575b600080fd5b6101f26101ed366004613e6d565b61066f565b6040519081526020015b60405180910390f35b6101f2610213366004613eeb565b6106cf565b610251610226366004613f5f565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152603b60205260409020541690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fc565b610289610284366004613f83565b61076c565b005b6101f2610299366004613fb8565b61077d565b6102b16102ac36600461403d565b610929565b6040516101fc9291906140e5565b6101f26102cd36600461413c565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260016020818152604080842086861685528252808420948816845293909101905220546cffffffffffffffffffffffffff169392505050565b610289610331366004613e6d565b610c7f565b6101f261034436600461417c565b610d2c565b610251610357366004613f5f565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152603a60205260409020541690565b610395610390366004613f5f565b610d46565b6040516101fc91906141db565b6101f26103b03660046141ee565b610e98565b6102516103c3366004613f5f565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152603960205260409020541690565b6104aa6103fc366004613e6d565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526001602090815260408083209390941682529190915220546cffffffffffffffffffffffffff8116916affffffffffffffffffffff6d01000000000000000000000000008304169163ffffffff780100000000000000000000000000000000000000000000000082048116927c01000000000000000000000000000000000000000000000000000000009092041690565b6040805194855260208501939093529183015260608201526080016101fc565b6104dd6104d8366004613e6d565b610eaf565b604080519283526020830191909152016101fc565b7f0000000000000000000000000000000000000000000000000000000000000000610251565b610289610526366004614326565b610fbe565b61057b610539366004613f5f565b73ffffffffffffffffffffffffffffffffffffffff16600090815260016020526040902060020154700100000000000000000000000000000000900460ff1690565b60405160ff90911681526020016101fc565b6102b161059b3660046141ee565b6111be565b6101f26105ae366004613e6d565b61136d565b610395611426565b6102b16105c936600461403d565b611495565b6102b16105dc366004614454565b61152e565b6102896105ef366004613f5f565b611549565b610289610602366004614496565b611665565b6102517f000000000000000000000000000000000000000000000000000000000000000081565b6101f2600181565b610289610644366004613e6d565b61181b565b610289610657366004613e6d565b6118c4565b61028961066a3660046144dd565b6119df565b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600160209081526040808320938516835292905220547c0100000000000000000000000000000000000000000000000000000000900463ffffffff165b92915050565b600073ffffffffffffffffffffffffffffffffffffffff8316610753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f494e56414c49445f544f5f41444452455353000000000000000000000000000060448201526064015b60405180910390fd5b61076286868633338888611e53565b9695505050505050565b610778338483856120e4565b505050565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260396020526040812054909133918691168214610813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f434c41494d45525f554e415554484f52495a4544000000000000000000000000604482015260640161074a565b73ffffffffffffffffffffffffffffffffffffffff8616610890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f494e56414c49445f555345525f41444452455353000000000000000000000000604482015260640161074a565b73ffffffffffffffffffffffffffffffffffffffff851661090d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f494e56414c49445f544f5f414444524553530000000000000000000000000000604482015260640161074a565b61091c898989338a8a8a611e53565b9998505050505050505050565b6060806000610939868686612297565b60035490915067ffffffffffffffff8111156109575761095761424b565b604051908082528060200260200182016040528015610980578160200160208202803683370190505b509250825167ffffffffffffffff81111561099d5761099d61424b565b6040519080825280602002602001820160405280156109c6578160200160208202803683370190505b50915060005b8151811015610c745760005b8451811015610c6157600381815481106109f4576109f4614560565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858281518110610a3157610a31614560565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060016000848481518110610a8157610a81614560565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868381518110610ade57610ade614560565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600d9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16848281518110610ba457610ba4614560565b60200260200101818151610bb891906145be565b9052508251839083908110610bcf57610bcf614560565b60200260200101516020015160001415610be857610c4f565b610c2586868381518110610bfe57610bfe614560565b6020026020010151858581518110610c1857610c18614560565b6020026020010151612495565b848281518110610c3757610c37614560565b60200260200101818151610c4b91906145be565b9052505b80610c59816145d6565b9150506109d8565b5080610c6c816145d6565b9150506109cc565b50505b935093915050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610d1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f4e4c595f454d495353494f4e5f4d414e414745520000000000000000000000604482015260640161074a565b610d288282612563565b5050565b6000610d3d85858533333388611e53565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120600201546060916fffffffffffffffffffffffffffffffff909116908167ffffffffffffffff811115610da057610da061424b565b604051908082528060200260200182016040528015610dc9578160200160208202803683370190505b50905060005b826fffffffffffffffffffffffffffffffff16816fffffffffffffffffffffffffffffffff161015610e905773ffffffffffffffffffffffffffffffffffffffff80861660009081526001602081815260408084206fffffffffffffffffffffffffffffffff871680865293019091529091205484519216918491908110610e5957610e59614560565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015280610e888161460f565b915050610dcf565b509392505050565b6000610d3d8383610eaa888888612297565b6126b7565b73ffffffffffffffffffffffffffffffffffffffff8083166000818152600160209081526040808320948616835293815283822084517fb1bf962d0000000000000000000000000000000000000000000000000000000081529451929485949193610fb19385939263b1bf962d92600480830193928290030181865afa158015610f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f61919061463f565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260016020526040902060020154610fac90700100000000000000000000000000000000900460ff16600a614778565b612856565b92509250505b9250929050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461105d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f4e4c595f454d495353494f4e5f4d414e414745520000000000000000000000604482015260640161074a565b60005b81518110156111b15781818151811061107b5761107b614560565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1663b1bf962d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f5919061463f565b82828151811061110757611107614560565b6020026020010151602001818152505061115b82828151811061112c5761112c614560565b60200260200101516080015183838151811061114a5761114a614560565b602002602001015160a00151612962565b61119f82828151811061117057611170614560565b60200260200101516080015183838151811061118e5761118e614560565b602002602001015160c00151612563565b806111a9816145d6565b915050611060565b506111bb81612ac8565b50565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260396020526040902054606091829133918691168214611257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f434c41494d45525f554e415554484f52495a4544000000000000000000000000604482015260640161074a565b73ffffffffffffffffffffffffffffffffffffffff86166112d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f494e56414c49445f555345525f41444452455353000000000000000000000000604482015260640161074a565b73ffffffffffffffffffffffffffffffffffffffff8516611351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f494e56414c49445f544f5f414444524553530000000000000000000000000000604482015260640161074a565b61135e8888338989613369565b93509350505094509492505050565b60008060005b600454811015610e9057600160006004838154811061139457611394614560565b60009182526020808320919091015473ffffffffffffffffffffffffffffffffffffffff908116845283820194909452604092830182208885168352815282822093891682526001909301909252902054611412906d010000000000000000000000000090046fffffffffffffffffffffffffffffffff16836145be565b91508061141e816145d6565b915050611373565b6060600380548060200260200160405190810160405280929190818152602001828054801561148b57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611460575b5050505050905090565b60608073ffffffffffffffffffffffffffffffffffffffff8316611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f494e56414c49445f544f5f414444524553530000000000000000000000000000604482015260640161074a565b6115228585333387613369565b91509150935093915050565b60608061153e8484333333613369565b915091509250929050565b60065460019060ff168061155c5750303b155b80611568575060055481115b6115f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a6564000000000000000000000000000000000000606482015260840161074a565b60065460ff1615801561163257600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560058290555b801561077857600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611704576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f4e4c595f454d495353494f4e5f4d414e414745520000000000000000000000604482015260640161074a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902080547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff81167c010000000000000000000000000000000000000000000000000000000063ffffffff8981168281029384179586905587516d01000000000000000000000000009096046affffffffffffffffffffff16808752968601969096529083041694830185905260608301939093526cffffffffffffffffffffffffff9081169216919091176080820152909291907fac1777479f07f3e7c34da8402139d54027a6a260caaae168bdee825ca5580dc59060a00160405180910390a350505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146118ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f4e4c595f454d495353494f4e5f4d414e414745520000000000000000000000604482015260640161074a565b610d288282612962565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f4e4c595f454d495353494f4e5f4d414e414745520000000000000000000000604482015260640161074a565b73ffffffffffffffffffffffffffffffffffffffff82811660008181526039602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169486169485179055517f4925eafc82d0c4d67889898eeed64b18488ab19811e61620f387026dec126a289190a35050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611a7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f4e4c595f454d495353494f4e5f4d414e414745520000000000000000000000604482015260640161074a565b828114611ae7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f494e56414c49445f494e50555400000000000000000000000000000000000000604482015260640161074a565b60005b83811015611e4b5773ffffffffffffffffffffffffffffffffffffffff86166000908152600160205260408120908181888886818110611b2c57611b2c614560565b9050602002016020810190611b419190613f5f565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000206002830154909150700100000000000000000000000000000000900460ff168015801590611bb7575081547801000000000000000000000000000000000000000000000000900463ffffffff1615155b611c1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f444953545249425554494f4e5f444f45535f4e4f545f45584953540000000000604482015260640161074a565b6000611ca2838b73ffffffffffffffffffffffffffffffffffffffff1663b1bf962d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c92919061463f565b611c9d85600a614787565b613851565b5083549091506d010000000000000000000000000090046affffffffffffffffffffff16878787818110611cd857611cd8614560565b9050602002016020810190611ced9190614793565b84546affffffffffffffffffffff919091166d0100000000000000000000000000027fffffffffffffffff0000000000000000000000ffffffffffffffffffffffffff909116178455898987818110611d4857611d48614560565b9050602002016020810190611d5d9190613f5f565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fac1777479f07f3e7c34da8402139d54027a6a260caaae168bdee825ca5580dc5838b8b8b818110611dbe57611dbe614560565b9050602002016020810190611dd39190614793565b8854604080519384526affffffffffffffffffffff90921660208401527c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690820181905260608201526080810186905260a00160405180910390a350505050508080611e43906145d6565b915050611aea565b505050505050565b600085611e62575060006120d9565b6000611e7885611e738b8b89612297565b6139df565b60005b8881101561205f5760008a8a83818110611e9757611e97614560565b9050602002016020810190611eac9190613f5f565b73ffffffffffffffffffffffffffffffffffffffff81811660009081526001602081815260408084208b861685528252808420948d1684529390910190522054909150611f1c906d010000000000000000000000000090046fffffffffffffffffffffffffffffffff16846145be565b9250888311611f8f5773ffffffffffffffffffffffffffffffffffffffff80821660009081526001602081815260408084208a861685528252808420948c1684529390910190522080547fffffff00000000000000000000000000000000ffffffffffffffffffffffffff16905561204c565b6000611f9b8a856147ae565b9050611fa781856147ae565b9350611fb281613a60565b73ffffffffffffffffffffffffffffffffffffffff92831660009081526001602081815260408084208b881685528252808420968d1684529590910190529290922080546fffffffffffffffffffffffffffffffff939093166d0100000000000000000000000000027fffffff00000000000000000000000000000000ffffffffffffffffffffffffff909316929092179091555061205f565b5080612057816145d6565b915050611e7b565b508061206f5760009150506120d9565b61207a848483613b06565b6040805173ffffffffffffffffffffffffffffffffffffffff8881168252602082018490528087169286821692918916917fc052130bc4ef84580db505783484b067ea8b71b3bca78a7e12db7aea8658f004910160405180910390a490505b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604090206002015460ff700100000000000000000000000000000000820416600a0a906fffffffffffffffffffffffffffffffff1680612146575050612291565b60005b81816fffffffffffffffffffffffffffffffff16101561228d5773ffffffffffffffffffffffffffffffffffffffff80881660009081526001602081815260408084206fffffffffffffffffffffffffffffffff8716855292830182528084205490941680845291905291812090806121c3838989613851565b915091506000806121d7858d8d878d613c32565b9150915082806121e45750805b1561227b578b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff167f3303facd24627943a92e9dc87cfbb34b15c49b726eec3ad3487c16be9ab8efe8878887604051612272939291909283526020830191909152604082015260600190565b60405180910390a45b50506001909401935061214992505050565b5050505b50505050565b60608267ffffffffffffffff8111156122b2576122b261424b565b60405190808252806020026020018201604052801561231d57816020015b61230a6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b8152602001906001900390816122d05790505b50905060005b83811015610e905784848281811061233d5761233d614560565b90506020020160208101906123529190613f5f565b82828151811061236457612364614560565b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff909116905284848281811061239b5761239b614560565b90506020020160208101906123b09190613f5f565b6040517f0afbcdc900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529190911690630afbcdc9906024016040805180830381865afa15801561241d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244191906147c5565b83838151811061245357612453614560565b602002602001015160200184848151811061247057612470614560565b602090810291909101015160400191909152528061248d816145d6565b915050612323565b805173ffffffffffffffffffffffffffffffffffffffff90811660009081526001602081815260408084208786168552825280842086519095168452919052812060020154909190829061250190700100000000000000000000000000000000900460ff16600a614778565b9050600061251483866040015184612856565b60208088015173ffffffffffffffffffffffffffffffffffffffff8b166000908152600188019092526040909120549193506120d992509083906cffffffffffffffffffffffffff1685613d91565b60008173ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d4919061463f565b1361263b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4f5241434c455f4d5553545f52455455524e5f50524943450000000000000000604482015260640161074a565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603b602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169486169485179055517f1a1cd5483e52e60b9ff7f3b9d1db3bbd9e9d21c6324ad3a8c79dba9b75e62f4d9190a35050565b6000805b8251811015610e90578281815181106126d6576126d6614560565b60200260200101516020015160001415612785576001600084838151811061270057612700614560565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff908116835282820193909352604091820160009081208885168252825282812093891681526001909301905290205461277e906d010000000000000000000000000090046fffffffffffffffffffffffffffffffff16836145be565b9150612844565b6001600084838151811061279b5761279b614560565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff908116835282820193909352604091820160009081208885168252825282812093891681526001909301905290205483516d01000000000000000000000000009091046fffffffffffffffffffffffffffffffff169061282d9087908790879086908110610c1857610c18614560565b61283791906145be565b61284190836145be565b91505b8061284e816145d6565b9150506126bb565b825460009081906cffffffffffffffffffffffffff81169063ffffffff7c010000000000000000000000000000000000000000000000000000000082048116916affffffffffffffffffffff6d0100000000000000000000000000820416917801000000000000000000000000000000000000000000000000909104168115806128de575087155b806128e857504281145b806128f35750828110155b156129075783849550955050505050610c77565b60008342116129165742612918565b835b9050600061292683836147ae565b905060008961293583876147e9565b61293f91906147e9565b8b900490508661294f81836145be565b9850985050505050505050935093915050565b73ffffffffffffffffffffffffffffffffffffffff81166129df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f53545241544547595f43414e5f4e4f545f42455f5a45524f0000000000000000604482015260640161074a565b6001813b151514612a4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f53545241544547595f4d5553545f42455f434f4e545241435400000000000000604482015260640161074a565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603a602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169486169485179055517f8ca1d928f1d72493a6b78c4f74aabde976bc37ffe2570f2a1ce5a8abd3dde0aa9190a35050565b60005b8151811015610d285760016000838381518110612aea57612aea614560565b6020908102919091018101516060015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002060020154700100000000000000000000000000000000900460ff16612bb6576004828281518110612b5157612b51614560565b6020908102919091018101516060015182546001810184556000938452919092200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790555b6000828281518110612bca57612bca614560565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c449190614826565b60016000858581518110612c5a57612c5a614560565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160106101000a81548160ff021916908360ff160217905560ff169050600060016000858581518110612cd757612cd7614560565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000858581518110612d3457612d34614560565b6020908102919091018101516080015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080549091507801000000000000000000000000000000000000000000000000900463ffffffff16612fa357838381518110612da557612da5614560565b60200260200101516080015160016000868681518110612dc757612dc7614560565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600060016000888881518110612e2857612e28614560565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016000858581518110612f1457612f14614560565b6020908102919091018101516060015173ffffffffffffffffffffffffffffffffffffffff168252810191909152604001600090812060020180546fffffffffffffffffffffffffffffffff1691612f6b8361460f565b91906101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550505b60026000858581518110612fb957612fb9614560565b6020908102919091018101516080015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040016000205460ff166130e35760016002600086868151811061300d5761300d614560565b60200260200101516080015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600384848151811061307e5761307e614560565b6020908102919091018101516080015182546001810184556000938452919092200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790555b6000613114828686815181106130fb576130fb614560565b60200260200101516020015185600a611c9d9190614787565b50825486519192506d010000000000000000000000000081046affffffffffffffffffffff16917c010000000000000000000000000000000000000000000000000000000090910463ffffffff169087908790811061317557613175614560565b60209081029190910101515184546affffffffffffffffffffff9091166d0100000000000000000000000000027fffffffffffffffff0000000000000000000000ffffffffffffffffffffffffff90911617845586518790879081106131dd576131dd614560565b602090810291909101015160400151845463ffffffff9091167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff909116178455865187908790811061324c5761324c614560565b60200260200101516080015173ffffffffffffffffffffffffffffffffffffffff1687878151811061328057613280614560565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff167fac1777479f07f3e7c34da8402139d54027a6a260caaae168bdee825ca5580dc5848a8a815181106132d6576132d6614560565b602002602001015160000151858c8c815181106132f5576132f5614560565b602002602001015160400151896040516133499594939291906affffffffffffffffffffff958616815293909416602084015263ffffffff9182166040840152166060820152608081019190915260a00190565b60405180910390a350505050508080613361906145d6565b915050612acb565b60035460609081908067ffffffffffffffff81111561338a5761338a61424b565b6040519080825280602002602001820160405280156133b3578160200160208202803683370190505b5092508067ffffffffffffffff8111156133cf576133cf61424b565b6040519080825280602002602001820160405280156133f8578160200160208202803683370190505b50915061340a85611e738a8a89612297565b60005b8781101561371957600089898381811061342957613429614560565b905060200201602081019061343e9190613f5f565b905060005b8381101561370457600073ffffffffffffffffffffffffffffffffffffffff1686828151811061347557613475614560565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141561352457600381815481106134ac576134ac614560565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168682815181106134e9576134e9614560565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604081208751829089908590811061355f5761355f614560565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff90811683528282019390935260409182016000908120938d168152600190930190529020546d010000000000000000000000000090046fffffffffffffffffffffffffffffffff16905080156136f157808683815181106135e3576135e3614560565b602002602001018181516135f791906145be565b90525073ffffffffffffffffffffffffffffffffffffffff83166000908152600160205260408120885182908a908690811061363557613635614560565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600d6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b50806136fc816145d6565b915050613443565b50508080613711906145d6565b91505061340d565b5060005b81811015613845576137628585838151811061373b5761373b614560565b602002602001015185848151811061375557613755614560565b6020026020010151613b06565b8473ffffffffffffffffffffffffffffffffffffffff1684828151811061378b5761378b614560565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fc052130bc4ef84580db505783484b067ea8b71b3bca78a7e12db7aea8658f0048a8786815181106137f4576137f4614560565b602002602001015160405161382b92919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a48061383d816145d6565b91505061371d565b50509550959350505050565b600080600080613862878787612856565b91509150600082821461397b576cffffffffffffffffffffffffff8211156138e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e4445585f4f564552464c4f57000000000000000000000000000000000000604482015260640161074a565b5086547fffffffffffffffffffffffffffffffffffffff00000000000000000000000000166cffffffffffffffffffffffffff8216178755600161392942613db5565b885463ffffffff919091167801000000000000000000000000000000000000000000000000027fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff9091161788556139d2565b61398442613db5565b885463ffffffff919091167801000000000000000000000000000000000000000000000000027fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff9091161788555b9097909650945050505050565b60005b815181101561077857613a4e828281518110613a0057613a00614560565b60200260200101516000015184848481518110613a1f57613a1f614560565b602002602001015160200151858581518110613a3d57613a3d614560565b6020026020010151604001516120e4565b80613a58816145d6565b9150506139e2565b60006fffffffffffffffffffffffffffffffff821115613b02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f3238206269747300000000000000000000000000000000000000000000000000606482015260840161074a565b5090565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603a60205260408082205490517f16beb9820000000000000000000000000000000000000000000000000000000081528785166004820152602481019390935260448301859052909216919082906316beb982906064016020604051808303816000875af1158015613b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bbd9190614849565b9050600181151514613c2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f5452414e534645525f4552524f52000000000000000000000000000000000000604482015260640161074a565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260018601602052604081205481906cffffffffffffffffffffffffff1681858214801590613d825773ffffffffffffffffffffffffffffffffffffffff8916600090815260018b016020526040902080547fffffffffffffffffffffffffffffffffffffff00000000000000000000000000166cffffffffffffffffffffffffff89161790558715613d8257613ce688888589613d91565b9150613cf182613a60565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260018c01602052604090208054600d90613d4b9084906d010000000000000000000000000090046fffffffffffffffffffffffffffffffff1661486b565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b90999098509650505050505050565b600080613d9e84866147ae565b613da890876147e9565b9290920495945050505050565b600063ffffffff821115613b02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201527f3220626974730000000000000000000000000000000000000000000000000000606482015260840161074a565b73ffffffffffffffffffffffffffffffffffffffff811681146111bb57600080fd5b60008060408385031215613e8057600080fd5b8235613e8b81613e4b565b91506020830135613e9b81613e4b565b809150509250929050565b60008083601f840112613eb857600080fd5b50813567ffffffffffffffff811115613ed057600080fd5b6020830191508360208260051b8501011115610fb757600080fd5b600080600080600060808688031215613f0357600080fd5b853567ffffffffffffffff811115613f1a57600080fd5b613f2688828901613ea6565b909650945050602086013592506040860135613f4181613e4b565b91506060860135613f5181613e4b565b809150509295509295909350565b600060208284031215613f7157600080fd5b8135613f7c81613e4b565b9392505050565b600080600060608486031215613f9857600080fd5b8335613fa381613e4b565b95602085013595506040909401359392505050565b60008060008060008060a08789031215613fd157600080fd5b863567ffffffffffffffff811115613fe857600080fd5b613ff489828a01613ea6565b90975095505060208701359350604087013561400f81613e4b565b9250606087013561401f81613e4b565b9150608087013561402f81613e4b565b809150509295509295509295565b60008060006040848603121561405257600080fd5b833567ffffffffffffffff81111561406957600080fd5b61407586828701613ea6565b909450925050602084013561408981613e4b565b809150509250925092565b600081518084526020808501945080840160005b838110156140da57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016140a8565b509495945050505050565b6040815260006140f86040830185614094565b82810360208481019190915284518083528582019282019060005b8181101561412f57845183529383019391830191600101614113565b5090979650505050505050565b60008060006060848603121561415157600080fd5b833561415c81613e4b565b9250602084013561416c81613e4b565b9150604084013561408981613e4b565b6000806000806060858703121561419257600080fd5b843567ffffffffffffffff8111156141a957600080fd5b6141b587828801613ea6565b9095509350506020850135915060408501356141d081613e4b565b939692955090935050565b602081526000613f7c6020830184614094565b6000806000806060858703121561420457600080fd5b843567ffffffffffffffff81111561421b57600080fd5b61422787828801613ea6565b909550935050602085013561423b81613e4b565b915060408501356141d081613e4b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561429d5761429d61424b565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156142ea576142ea61424b565b604052919050565b80356affffffffffffffffffffff8116811461430d57600080fd5b919050565b803563ffffffff8116811461430d57600080fd5b6000602080838503121561433957600080fd5b823567ffffffffffffffff8082111561435157600080fd5b818501915085601f83011261436557600080fd5b8135818111156143775761437761424b565b614385848260051b016142a3565b818152848101925060e09182028401850191888311156143a457600080fd5b938501935b828510156144485780858a0312156143c15760008081fd5b6143c961427a565b6143d2866142f2565b8152868601358782015260406143e9818801614312565b908201526060868101356143fc81613e4b565b9082015260808681013561440f81613e4b565b9082015260a08681013561442281613e4b565b9082015260c08681013561443581613e4b565b90820152845293840193928501926143a9565b50979650505050505050565b6000806020838503121561446757600080fd5b823567ffffffffffffffff81111561447e57600080fd5b61448a85828601613ea6565b90969095509350505050565b6000806000606084860312156144ab57600080fd5b83356144b681613e4b565b925060208401356144c681613e4b565b91506144d460408501614312565b90509250925092565b6000806000806000606086880312156144f557600080fd5b853561450081613e4b565b9450602086013567ffffffffffffffff8082111561451d57600080fd5b61452989838a01613ea6565b9096509450604088013591508082111561454257600080fd5b5061454f88828901613ea6565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156145d1576145d161458f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146085761460861458f565b5060010190565b60006fffffffffffffffffffffffffffffffff808316818114156146355761463561458f565b6001019392505050565b60006020828403121561465157600080fd5b5051919050565b600181815b808511156146b157817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156146975761469761458f565b808516156146a457918102915b93841c939080029061465d565b509250929050565b6000826146c8575060016106c9565b816146d5575060006106c9565b81600181146146eb57600281146146f557614711565b60019150506106c9565b60ff8411156147065761470661458f565b50506001821b6106c9565b5060208310610133831016604e8410600b8410161715614734575081810a6106c9565b61473e8383614658565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156147705761477061458f565b029392505050565b6000613f7c60ff8416836146b9565b6000613f7c83836146b9565b6000602082840312156147a557600080fd5b613f7c826142f2565b6000828210156147c0576147c061458f565b500390565b600080604083850312156147d857600080fd5b505080516020909101519092909150565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148215761482161458f565b500290565b60006020828403121561483857600080fd5b815160ff81168114613f7c57600080fd5b60006020828403121561485b57600080fd5b81518015158114613f7c57600080fd5b60006fffffffffffffffffffffffffffffffff8083168185168083038211156148965761489661458f565b0194935050505056fea26469706673582212208dbd45bb3f10f2612620acfec3a0ec73a43a47a8623822d8d3050de86c0467dd64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1DA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x92074B08 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xBF90F63A GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xDDE43CBA GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xDDE43CBA EQ PUSH2 0x62E JUMPI DUP1 PUSH4 0xE15AC623 EQ PUSH2 0x636 JUMPI DUP1 PUSH4 0xF5CF673B EQ PUSH2 0x649 JUMPI DUP1 PUSH4 0xF996868B EQ PUSH2 0x65C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBF90F63A EQ PUSH2 0x5CE JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x5E1 JUMPI DUP1 PUSH4 0xC5A7B538 EQ PUSH2 0x5F4 JUMPI DUP1 PUSH4 0xCBCBB507 EQ PUSH2 0x607 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x9FF55DB9 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0x9FF55DB9 EQ PUSH2 0x58D JUMPI DUP1 PUSH4 0xB022418C EQ PUSH2 0x5A0 JUMPI DUP1 PUSH4 0xB45AC1A9 EQ PUSH2 0x5B3 JUMPI DUP1 PUSH4 0xBB492BF5 EQ PUSH2 0x5BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x92074B08 EQ PUSH2 0x4F2 JUMPI DUP1 PUSH4 0x955C2AD7 EQ PUSH2 0x518 JUMPI DUP1 PUSH4 0x9EFD6F72 EQ PUSH2 0x52B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5453BA10 GT PUSH2 0x17C JUMPI DUP1 PUSH4 0x70674AB9 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x70674AB9 EQ PUSH2 0x3A2 JUMPI DUP1 PUSH4 0x74D945EC EQ PUSH2 0x3B5 JUMPI DUP1 PUSH4 0x7EFF4BA8 EQ PUSH2 0x3EE JUMPI DUP1 PUSH4 0x886FE70B EQ PUSH2 0x4CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x5453BA10 EQ PUSH2 0x323 JUMPI DUP1 PUSH4 0x57B89883 EQ PUSH2 0x336 JUMPI DUP1 PUSH4 0x5F130B24 EQ PUSH2 0x349 JUMPI DUP1 PUSH4 0x6657732F EQ PUSH2 0x382 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x31873E2E GT PUSH2 0x1B8 JUMPI DUP1 PUSH4 0x31873E2E EQ PUSH2 0x276 JUMPI DUP1 PUSH4 0x33028B99 EQ PUSH2 0x28B JUMPI DUP1 PUSH4 0x4C0369C3 EQ PUSH2 0x29E JUMPI DUP1 PUSH4 0x533F542A EQ PUSH2 0x2BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1B839C77 EQ PUSH2 0x1DF JUMPI DUP1 PUSH4 0x236300DC EQ PUSH2 0x205 JUMPI DUP1 PUSH4 0x2A17BF60 EQ PUSH2 0x218 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1F2 PUSH2 0x1ED CALLDATASIZE PUSH1 0x4 PUSH2 0x3E6D JUMP JUMPDEST PUSH2 0x66F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1F2 PUSH2 0x213 CALLDATASIZE PUSH1 0x4 PUSH2 0x3EEB JUMP JUMPDEST PUSH2 0x6CF JUMP JUMPDEST PUSH2 0x251 PUSH2 0x226 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F5F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3B PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1FC JUMP JUMPDEST PUSH2 0x289 PUSH2 0x284 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F83 JUMP JUMPDEST PUSH2 0x76C JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1F2 PUSH2 0x299 CALLDATASIZE PUSH1 0x4 PUSH2 0x3FB8 JUMP JUMPDEST PUSH2 0x77D JUMP JUMPDEST PUSH2 0x2B1 PUSH2 0x2AC CALLDATASIZE PUSH1 0x4 PUSH2 0x403D JUMP JUMPDEST PUSH2 0x929 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1FC SWAP3 SWAP2 SWAP1 PUSH2 0x40E5 JUMP JUMPDEST PUSH2 0x1F2 PUSH2 0x2CD CALLDATASIZE PUSH1 0x4 PUSH2 0x413C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP7 DUP7 AND DUP6 MSTORE DUP3 MSTORE DUP1 DUP5 KECCAK256 SWAP5 DUP9 AND DUP5 MSTORE SWAP4 SWAP1 SWAP2 ADD SWAP1 MSTORE KECCAK256 SLOAD PUSH13 0xFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x289 PUSH2 0x331 CALLDATASIZE PUSH1 0x4 PUSH2 0x3E6D JUMP JUMPDEST PUSH2 0xC7F JUMP JUMPDEST PUSH2 0x1F2 PUSH2 0x344 CALLDATASIZE PUSH1 0x4 PUSH2 0x417C JUMP JUMPDEST PUSH2 0xD2C JUMP JUMPDEST PUSH2 0x251 PUSH2 0x357 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F5F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH2 0x395 PUSH2 0x390 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F5F JUMP JUMPDEST PUSH2 0xD46 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1FC SWAP2 SWAP1 PUSH2 0x41DB JUMP JUMPDEST PUSH2 0x1F2 PUSH2 0x3B0 CALLDATASIZE PUSH1 0x4 PUSH2 0x41EE JUMP JUMPDEST PUSH2 0xE98 JUMP JUMPDEST PUSH2 0x251 PUSH2 0x3C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F5F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x39 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND SWAP1 JUMP JUMPDEST PUSH2 0x4AA PUSH2 0x3FC CALLDATASIZE PUSH1 0x4 PUSH2 0x3E6D 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 PUSH13 0xFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND SWAP2 PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF PUSH14 0x100000000000000000000000000 DUP4 DIV AND SWAP2 PUSH4 0xFFFFFFFF PUSH25 0x1000000000000000000000000000000000000000000000000 DUP3 DIV DUP2 AND SWAP3 PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 SWAP3 DIV AND SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD PUSH2 0x1FC JUMP JUMPDEST PUSH2 0x4DD PUSH2 0x4D8 CALLDATASIZE PUSH1 0x4 PUSH2 0x3E6D JUMP JUMPDEST PUSH2 0xEAF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE ADD PUSH2 0x1FC JUMP JUMPDEST PUSH32 0x0 PUSH2 0x251 JUMP JUMPDEST PUSH2 0x289 PUSH2 0x526 CALLDATASIZE PUSH1 0x4 PUSH2 0x4326 JUMP JUMPDEST PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x57B PUSH2 0x539 CALLDATASIZE PUSH1 0x4 PUSH2 0x3F5F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1FC JUMP JUMPDEST PUSH2 0x2B1 PUSH2 0x59B CALLDATASIZE PUSH1 0x4 PUSH2 0x41EE JUMP JUMPDEST PUSH2 0x11BE JUMP JUMPDEST PUSH2 0x1F2 PUSH2 0x5AE CALLDATASIZE PUSH1 0x4 PUSH2 0x3E6D JUMP JUMPDEST PUSH2 0x136D JUMP JUMPDEST PUSH2 0x395 PUSH2 0x1426 JUMP JUMPDEST PUSH2 0x2B1 PUSH2 0x5C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x403D JUMP JUMPDEST PUSH2 0x1495 JUMP JUMPDEST PUSH2 0x2B1 PUSH2 0x5DC CALLDATASIZE PUSH1 0x4 PUSH2 0x4454 JUMP JUMPDEST PUSH2 0x152E JUMP JUMPDEST PUSH2 0x289 PUSH2 0x5EF CALLDATASIZE PUSH1 0x4 PUSH2 0x3F5F JUMP JUMPDEST PUSH2 0x1549 JUMP JUMPDEST PUSH2 0x289 PUSH2 0x602 CALLDATASIZE PUSH1 0x4 PUSH2 0x4496 JUMP JUMPDEST PUSH2 0x1665 JUMP JUMPDEST PUSH2 0x251 PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x1F2 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH2 0x289 PUSH2 0x644 CALLDATASIZE PUSH1 0x4 PUSH2 0x3E6D JUMP JUMPDEST PUSH2 0x181B JUMP JUMPDEST PUSH2 0x289 PUSH2 0x657 CALLDATASIZE PUSH1 0x4 PUSH2 0x3E6D JUMP JUMPDEST PUSH2 0x18C4 JUMP JUMPDEST PUSH2 0x289 PUSH2 0x66A CALLDATASIZE PUSH1 0x4 PUSH2 0x44DD JUMP JUMPDEST PUSH2 0x19DF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP6 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x753 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F544F5F414444524553530000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x762 DUP7 DUP7 DUP7 CALLER CALLER DUP9 DUP9 PUSH2 0x1E53 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x778 CALLER DUP5 DUP4 DUP6 PUSH2 0x20E4 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x39 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP2 CALLER SWAP2 DUP7 SWAP2 AND DUP3 EQ PUSH2 0x813 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x434C41494D45525F554E415554484F52495A4544000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH2 0x890 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F555345525F41444452455353000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH2 0x90D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F544F5F414444524553530000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH2 0x91C DUP10 DUP10 DUP10 CALLER DUP11 DUP11 DUP11 PUSH2 0x1E53 JUMP JUMPDEST SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x939 DUP7 DUP7 DUP7 PUSH2 0x2297 JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 SWAP2 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x957 JUMPI PUSH2 0x957 PUSH2 0x424B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x980 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP DUP3 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x99D JUMPI PUSH2 0x99D PUSH2 0x424B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x9C6 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xC74 JUMPI PUSH1 0x0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0xC61 JUMPI PUSH1 0x3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x9F4 JUMPI PUSH2 0x9F4 PUSH2 0x4560 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xA31 JUMPI PUSH2 0xA31 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP PUSH1 0x1 PUSH1 0x0 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xA81 JUMPI PUSH2 0xA81 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 ADD PUSH1 0x0 DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xADE JUMPI PUSH2 0xADE PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x1 ADD PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 ADD PUSH1 0xD SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xBA4 JUMPI PUSH2 0xBA4 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MLOAD PUSH2 0xBB8 SWAP2 SWAP1 PUSH2 0x45BE JUMP JUMPDEST SWAP1 MSTORE POP DUP3 MLOAD DUP4 SWAP1 DUP4 SWAP1 DUP2 LT PUSH2 0xBCF JUMPI PUSH2 0xBCF PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH1 0x0 EQ ISZERO PUSH2 0xBE8 JUMPI PUSH2 0xC4F JUMP JUMPDEST PUSH2 0xC25 DUP7 DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xBFE JUMPI PUSH2 0xBFE PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0xC18 JUMPI PUSH2 0xC18 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2495 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xC37 JUMPI PUSH2 0xC37 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MLOAD PUSH2 0xC4B SWAP2 SWAP1 PUSH2 0x45BE JUMP JUMPDEST SWAP1 MSTORE POP JUMPDEST DUP1 PUSH2 0xC59 DUP2 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x9D8 JUMP JUMPDEST POP DUP1 PUSH2 0xC6C DUP2 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x9CC JUMP JUMPDEST POP POP JUMPDEST SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0xD1E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F454D495353494F4E5F4D414E414745520000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH2 0xD28 DUP3 DUP3 PUSH2 0x2563 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD3D DUP6 DUP6 DUP6 CALLER CALLER CALLER DUP9 PUSH2 0x1E53 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH1 0x60 SWAP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xDA0 JUMPI PUSH2 0xDA0 PUSH2 0x424B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xDC9 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT ISZERO PUSH2 0xE90 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP1 DUP7 MSTORE SWAP4 ADD SWAP1 SWAP2 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP5 MLOAD SWAP3 AND SWAP2 DUP5 SWAP2 SWAP1 DUP2 LT PUSH2 0xE59 JUMPI PUSH2 0xE59 PUSH2 0x4560 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE DUP1 PUSH2 0xE88 DUP2 PUSH2 0x460F JUMP JUMPDEST SWAP2 POP POP PUSH2 0xDCF JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD3D DUP4 DUP4 PUSH2 0xEAA DUP9 DUP9 DUP9 PUSH2 0x2297 JUMP JUMPDEST PUSH2 0x26B7 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP7 AND DUP4 MSTORE SWAP4 DUP2 MSTORE DUP4 DUP3 KECCAK256 DUP5 MLOAD PUSH32 0xB1BF962D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP5 MLOAD SWAP3 SWAP5 DUP6 SWAP5 SWAP2 SWAP4 PUSH2 0xFB1 SWAP4 DUP6 SWAP4 SWAP3 PUSH4 0xB1BF962D SWAP3 PUSH1 0x4 DUP1 DUP4 ADD SWAP4 SWAP3 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF3D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF61 SWAP2 SWAP1 PUSH2 0x463F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH2 0xFAC SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND PUSH1 0xA PUSH2 0x4778 JUMP JUMPDEST PUSH2 0x2856 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x105D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F454D495353494F4E5F4D414E414745520000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x11B1 JUMPI DUP2 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x107B JUMPI PUSH2 0x107B PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB1BF962D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x10D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10F5 SWAP2 SWAP1 PUSH2 0x463F JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1107 JUMPI PUSH2 0x1107 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x115B DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x112C JUMPI PUSH2 0x112C PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x80 ADD MLOAD DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x114A JUMPI PUSH2 0x114A PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0xA0 ADD MLOAD PUSH2 0x2962 JUMP JUMPDEST PUSH2 0x119F DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1170 JUMPI PUSH2 0x1170 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x80 ADD MLOAD DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x118E JUMPI PUSH2 0x118E PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0xC0 ADD MLOAD PUSH2 0x2563 JUMP JUMPDEST DUP1 PUSH2 0x11A9 DUP2 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1060 JUMP JUMPDEST POP PUSH2 0x11BB DUP2 PUSH2 0x2AC8 JUMP JUMPDEST POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x39 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x60 SWAP2 DUP3 SWAP2 CALLER SWAP2 DUP7 SWAP2 AND DUP3 EQ PUSH2 0x1257 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x434C41494D45525F554E415554484F52495A4544000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH2 0x12D4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F555345525F41444452455353000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH2 0x1351 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F544F5F414444524553530000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH2 0x135E DUP9 DUP9 CALLER DUP10 DUP10 PUSH2 0x3369 JUMP JUMPDEST SWAP4 POP SWAP4 POP POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 JUMPDEST PUSH1 0x4 SLOAD DUP2 LT ISZERO PUSH2 0xE90 JUMPI PUSH1 0x1 PUSH1 0x0 PUSH1 0x4 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x1394 JUMPI PUSH2 0x1394 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP5 MSTORE DUP4 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x40 SWAP3 DUP4 ADD DUP3 KECCAK256 DUP9 DUP6 AND DUP4 MSTORE DUP2 MSTORE DUP3 DUP3 KECCAK256 SWAP4 DUP10 AND DUP3 MSTORE PUSH1 0x1 SWAP1 SWAP4 ADD SWAP1 SWAP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x1412 SWAP1 PUSH14 0x100000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH2 0x45BE JUMP JUMPDEST SWAP2 POP DUP1 PUSH2 0x141E DUP2 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1373 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x148B JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1460 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x1515 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F544F5F414444524553530000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH2 0x1522 DUP6 DUP6 CALLER CALLER DUP8 PUSH2 0x3369 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH2 0x153E DUP5 DUP5 CALLER CALLER CALLER PUSH2 0x3369 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x1 SWAP1 PUSH1 0xFF AND DUP1 PUSH2 0x155C JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x1568 JUMPI POP PUSH1 0x5 SLOAD DUP2 GT JUMPDEST PUSH2 0x15F4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x74A JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x1632 JUMPI PUSH1 0x6 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE PUSH1 0x5 DUP3 SWAP1 SSTORE JUMPDEST DUP1 ISZERO PUSH2 0x778 JUMPI PUSH1 0x6 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE POP POP POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x1704 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F454D495353494F4E5F4D414E414745520000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH4 0xFFFFFFFF DUP10 DUP2 AND DUP3 DUP2 MUL SWAP4 DUP5 OR SWAP6 DUP7 SWAP1 SSTORE DUP8 MLOAD PUSH14 0x100000000000000000000000000 SWAP1 SWAP7 DIV PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF AND DUP1 DUP8 MSTORE SWAP7 DUP7 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP1 DUP4 DIV AND SWAP5 DUP4 ADD DUP6 SWAP1 MSTORE PUSH1 0x60 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH13 0xFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP3 AND SWAP2 SWAP1 SWAP2 OR PUSH1 0x80 DUP3 ADD MSTORE SWAP1 SWAP3 SWAP2 SWAP1 PUSH32 0xAC1777479F07F3E7C34DA8402139D54027A6A260CAAAE168BDEE825CA5580DC5 SWAP1 PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x18BA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F454D495353494F4E5F4D414E414745520000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH2 0xD28 DUP3 DUP3 PUSH2 0x2962 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x1963 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F454D495353494F4E5F4D414E414745520000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x39 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 DUP7 AND SWAP5 DUP6 OR SWAP1 SSTORE MLOAD PUSH32 0x4925EAFC82D0C4D67889898EEED64B18488AB19811E61620F387026DEC126A28 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x1A7E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F454D495353494F4E5F4D414E414745520000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST DUP3 DUP2 EQ PUSH2 0x1AE7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xD PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F494E50555400000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1E4B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SWAP1 DUP2 DUP2 DUP9 DUP9 DUP7 DUP2 DUP2 LT PUSH2 0x1B2C JUMPI PUSH2 0x1B2C PUSH2 0x4560 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1B41 SWAP2 SWAP1 PUSH2 0x3F5F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 PUSH1 0x2 DUP4 ADD SLOAD SWAP1 SWAP2 POP PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND DUP1 ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1BB7 JUMPI POP DUP2 SLOAD PUSH25 0x1000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND ISZERO ISZERO JUMPDEST PUSH2 0x1C1D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x444953545249425554494F4E5F444F45535F4E4F545F45584953540000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1CA2 DUP4 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB1BF962D PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C6E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C92 SWAP2 SWAP1 PUSH2 0x463F JUMP JUMPDEST PUSH2 0x1C9D DUP6 PUSH1 0xA PUSH2 0x4787 JUMP JUMPDEST PUSH2 0x3851 JUMP JUMPDEST POP DUP4 SLOAD SWAP1 SWAP2 POP PUSH14 0x100000000000000000000000000 SWAP1 DIV PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF AND DUP8 DUP8 DUP8 DUP2 DUP2 LT PUSH2 0x1CD8 JUMPI PUSH2 0x1CD8 PUSH2 0x4560 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1CED SWAP2 SWAP1 PUSH2 0x4793 JUMP JUMPDEST DUP5 SLOAD PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH14 0x100000000000000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFF0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND OR DUP5 SSTORE DUP10 DUP10 DUP8 DUP2 DUP2 LT PUSH2 0x1D48 JUMPI PUSH2 0x1D48 PUSH2 0x4560 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1D5D SWAP2 SWAP1 PUSH2 0x3F5F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xAC1777479F07F3E7C34DA8402139D54027A6A260CAAAE168BDEE825CA5580DC5 DUP4 DUP12 DUP12 DUP12 DUP2 DUP2 LT PUSH2 0x1DBE JUMPI PUSH2 0x1DBE PUSH2 0x4560 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1DD3 SWAP2 SWAP1 PUSH2 0x4793 JUMP JUMPDEST DUP9 SLOAD PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD DUP7 SWAP1 MSTORE PUSH1 0xA0 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP DUP1 DUP1 PUSH2 0x1E43 SWAP1 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1AEA JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP6 PUSH2 0x1E62 JUMPI POP PUSH1 0x0 PUSH2 0x20D9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E78 DUP6 PUSH2 0x1E73 DUP12 DUP12 DUP10 PUSH2 0x2297 JUMP JUMPDEST PUSH2 0x39DF JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP9 DUP2 LT ISZERO PUSH2 0x205F JUMPI PUSH1 0x0 DUP11 DUP11 DUP4 DUP2 DUP2 LT PUSH2 0x1E97 JUMPI PUSH2 0x1E97 PUSH2 0x4560 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1EAC SWAP2 SWAP1 PUSH2 0x3F5F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP12 DUP7 AND DUP6 MSTORE DUP3 MSTORE DUP1 DUP5 KECCAK256 SWAP5 DUP14 AND DUP5 MSTORE SWAP4 SWAP1 SWAP2 ADD SWAP1 MSTORE KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH2 0x1F1C SWAP1 PUSH14 0x100000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH2 0x45BE JUMP JUMPDEST SWAP3 POP DUP9 DUP4 GT PUSH2 0x1F8F JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP11 DUP7 AND DUP6 MSTORE DUP3 MSTORE DUP1 DUP5 KECCAK256 SWAP5 DUP13 AND DUP5 MSTORE SWAP4 SWAP1 SWAP2 ADD SWAP1 MSTORE KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 SSTORE PUSH2 0x204C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F9B DUP11 DUP6 PUSH2 0x47AE JUMP JUMPDEST SWAP1 POP PUSH2 0x1FA7 DUP2 DUP6 PUSH2 0x47AE JUMP JUMPDEST SWAP4 POP PUSH2 0x1FB2 DUP2 PUSH2 0x3A60 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP12 DUP9 AND DUP6 MSTORE DUP3 MSTORE DUP1 DUP5 KECCAK256 SWAP7 DUP14 AND DUP5 MSTORE SWAP6 SWAP1 SWAP2 ADD SWAP1 MSTORE SWAP3 SWAP1 SWAP3 KECCAK256 DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND PUSH14 0x100000000000000000000000000 MUL PUSH32 0xFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE POP PUSH2 0x205F JUMP JUMPDEST POP DUP1 PUSH2 0x2057 DUP2 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1E7B JUMP JUMPDEST POP DUP1 PUSH2 0x206F JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x20D9 JUMP JUMPDEST PUSH2 0x207A DUP5 DUP5 DUP4 PUSH2 0x3B06 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP5 SWAP1 MSTORE DUP1 DUP8 AND SWAP3 DUP7 DUP3 AND SWAP3 SWAP2 DUP10 AND SWAP2 PUSH32 0xC052130BC4EF84580DB505783484B067EA8B71B3BCA78A7E12DB7AEA8658F004 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 SWAP1 POP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH1 0xFF PUSH17 0x100000000000000000000000000000000 DUP3 DIV AND PUSH1 0xA EXP SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 PUSH2 0x2146 JUMPI POP POP PUSH2 0x2291 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND LT ISZERO PUSH2 0x228D JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP6 MSTORE SWAP3 DUP4 ADD DUP3 MSTORE DUP1 DUP5 KECCAK256 SLOAD SWAP1 SWAP5 AND DUP1 DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP2 DUP2 KECCAK256 SWAP1 DUP1 PUSH2 0x21C3 DUP4 DUP10 DUP10 PUSH2 0x3851 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP1 PUSH2 0x21D7 DUP6 DUP14 DUP14 DUP8 DUP14 PUSH2 0x3C32 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP3 DUP1 PUSH2 0x21E4 JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0x227B JUMPI DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP15 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x3303FACD24627943A92E9DC87CFBB34B15C49B726EEC3AD3487C16BE9AB8EFE8 DUP8 DUP9 DUP8 PUSH1 0x40 MLOAD PUSH2 0x2272 SWAP4 SWAP3 SWAP2 SWAP1 SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 JUMPDEST POP POP PUSH1 0x1 SWAP1 SWAP5 ADD SWAP4 POP PUSH2 0x2149 SWAP3 POP POP POP JUMP JUMPDEST POP POP POP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x22B2 JUMPI PUSH2 0x22B2 PUSH2 0x424B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x231D JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH2 0x230A PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x22D0 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE90 JUMPI DUP5 DUP5 DUP3 DUP2 DUP2 LT PUSH2 0x233D JUMPI PUSH2 0x233D PUSH2 0x4560 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x2352 SWAP2 SWAP1 PUSH2 0x3F5F JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2364 JUMPI PUSH2 0x2364 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 LT PUSH2 0x239B JUMPI PUSH2 0x239B PUSH2 0x4560 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x23B0 SWAP2 SWAP1 PUSH2 0x3F5F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xAFBCDC900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH4 0xAFBCDC9 SWAP1 PUSH1 0x24 ADD PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x241D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2441 SWAP2 SWAP1 PUSH2 0x47C5 JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2453 JUMPI PUSH2 0x2453 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2470 JUMPI PUSH2 0x2470 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH1 0x40 ADD SWAP2 SWAP1 SWAP2 MSTORE MSTORE DUP1 PUSH2 0x248D DUP2 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2323 JUMP JUMPDEST DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 DUP8 DUP7 AND DUP6 MSTORE DUP3 MSTORE DUP1 DUP5 KECCAK256 DUP7 MLOAD SWAP1 SWAP6 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE DUP2 KECCAK256 PUSH1 0x2 ADD SLOAD SWAP1 SWAP2 SWAP1 DUP3 SWAP1 PUSH2 0x2501 SWAP1 PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND PUSH1 0xA PUSH2 0x4778 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2514 DUP4 DUP7 PUSH1 0x40 ADD MLOAD DUP5 PUSH2 0x2856 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP9 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP9 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP2 SWAP4 POP PUSH2 0x20D9 SWAP3 POP SWAP1 DUP4 SWAP1 PUSH13 0xFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH2 0x3D91 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x50D25BCD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x25B0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x25D4 SWAP2 SWAP1 PUSH2 0x463F JUMP JUMPDEST SGT PUSH2 0x263B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F5241434C455F4D5553545F52455455524E5F50524943450000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3B PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 DUP7 AND SWAP5 DUP6 OR SWAP1 SSTORE MLOAD PUSH32 0x1A1CD5483E52E60B9FF7F3B9D1DB3BBD9E9D21C6324AD3A8C79DBA9B75E62F4D SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0xE90 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x26D6 JUMPI PUSH2 0x26D6 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH1 0x0 EQ ISZERO PUSH2 0x2785 JUMPI PUSH1 0x1 PUSH1 0x0 DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2700 JUMPI PUSH2 0x2700 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP4 MSTORE DUP3 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 DUP9 DUP6 AND DUP3 MSTORE DUP3 MSTORE DUP3 DUP2 KECCAK256 SWAP4 DUP10 AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP4 ADD SWAP1 MSTORE SWAP1 KECCAK256 SLOAD PUSH2 0x277E SWAP1 PUSH14 0x100000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH2 0x45BE JUMP JUMPDEST SWAP2 POP PUSH2 0x2844 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x279B JUMPI PUSH2 0x279B PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP4 MSTORE DUP3 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 DUP9 DUP6 AND DUP3 MSTORE DUP3 MSTORE DUP3 DUP2 KECCAK256 SWAP4 DUP10 AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP4 ADD SWAP1 MSTORE SWAP1 KECCAK256 SLOAD DUP4 MLOAD PUSH14 0x100000000000000000000000000 SWAP1 SWAP2 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH2 0x282D SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP7 SWAP1 DUP2 LT PUSH2 0xC18 JUMPI PUSH2 0xC18 PUSH2 0x4560 JUMP JUMPDEST PUSH2 0x2837 SWAP2 SWAP1 PUSH2 0x45BE JUMP JUMPDEST PUSH2 0x2841 SWAP1 DUP4 PUSH2 0x45BE JUMP JUMPDEST SWAP2 POP JUMPDEST DUP1 PUSH2 0x284E DUP2 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x26BB JUMP JUMPDEST DUP3 SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH13 0xFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND SWAP1 PUSH4 0xFFFFFFFF PUSH29 0x100000000000000000000000000000000000000000000000000000000 DUP3 DIV DUP2 AND SWAP2 PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF PUSH14 0x100000000000000000000000000 DUP3 DIV AND SWAP2 PUSH25 0x1000000000000000000000000000000000000000000000000 SWAP1 SWAP2 DIV AND DUP2 ISZERO DUP1 PUSH2 0x28DE JUMPI POP DUP8 ISZERO JUMPDEST DUP1 PUSH2 0x28E8 JUMPI POP TIMESTAMP DUP2 EQ JUMPDEST DUP1 PUSH2 0x28F3 JUMPI POP DUP3 DUP2 LT ISZERO JUMPDEST ISZERO PUSH2 0x2907 JUMPI DUP4 DUP5 SWAP6 POP SWAP6 POP POP POP POP POP PUSH2 0xC77 JUMP JUMPDEST PUSH1 0x0 DUP4 TIMESTAMP GT PUSH2 0x2916 JUMPI TIMESTAMP PUSH2 0x2918 JUMP JUMPDEST DUP4 JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2926 DUP4 DUP4 PUSH2 0x47AE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP10 PUSH2 0x2935 DUP4 DUP8 PUSH2 0x47E9 JUMP JUMPDEST PUSH2 0x293F SWAP2 SWAP1 PUSH2 0x47E9 JUMP JUMPDEST DUP12 SWAP1 DIV SWAP1 POP DUP7 PUSH2 0x294F DUP2 DUP4 PUSH2 0x45BE JUMP JUMPDEST SWAP9 POP SWAP9 POP POP POP POP POP POP POP POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x29DF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x18 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53545241544547595F43414E5F4E4F545F42455F5A45524F0000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH1 0x1 DUP2 EXTCODESIZE ISZERO ISZERO EQ PUSH2 0x2A4C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53545241544547595F4D5553545F42455F434F4E545241435400000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP5 DUP7 AND SWAP5 DUP6 OR SWAP1 SSTORE MLOAD PUSH32 0x8CA1D928F1D72493A6B78C4F74AABDE976BC37FFE2570F2A1CE5A8ABD3DDE0AA SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xD28 JUMPI PUSH1 0x1 PUSH1 0x0 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2AEA JUMPI PUSH2 0x2AEA PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 PUSH1 0x2 ADD SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2BB6 JUMPI PUSH1 0x4 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2B51 JUMPI PUSH2 0x2B51 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x60 ADD MLOAD DUP3 SLOAD PUSH1 0x1 DUP2 ADD DUP5 SSTORE PUSH1 0x0 SWAP4 DUP5 MSTORE SWAP2 SWAP1 SWAP3 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMPDEST PUSH1 0x0 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2BCA JUMPI PUSH2 0x2BCA PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2C20 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2C44 SWAP2 SWAP1 PUSH2 0x4826 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x2C5A JUMPI PUSH2 0x2C5A PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x2 ADD PUSH1 0x10 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 PUSH1 0xFF AND MUL OR SWAP1 SSTORE PUSH1 0xFF AND SWAP1 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x2CD7 JUMPI PUSH2 0x2CD7 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 ADD PUSH1 0x0 DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x2D34 JUMPI PUSH2 0x2D34 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD SWAP1 SWAP2 POP PUSH25 0x1000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH2 0x2FA3 JUMPI DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2DA5 JUMPI PUSH2 0x2DA5 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x80 ADD MLOAD PUSH1 0x1 PUSH1 0x0 DUP7 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x2DC7 JUMPI PUSH2 0x2DC7 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x1 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP9 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x2E28 JUMPI PUSH2 0x2E28 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x2 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x0 DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x2F14 JUMPI PUSH2 0x2F14 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 PUSH1 0x2 ADD DUP1 SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH2 0x2F6B DUP4 PUSH2 0x460F JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP JUMPDEST PUSH1 0x2 PUSH1 0x0 DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x2FB9 JUMPI PUSH2 0x2FB9 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x30E3 JUMPI PUSH1 0x1 PUSH1 0x2 PUSH1 0x0 DUP7 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x300D JUMPI PUSH2 0x300D PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH1 0x3 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x307E JUMPI PUSH2 0x307E PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x80 ADD MLOAD DUP3 SLOAD PUSH1 0x1 DUP2 ADD DUP5 SSTORE PUSH1 0x0 SWAP4 DUP5 MSTORE SWAP2 SWAP1 SWAP3 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMPDEST PUSH1 0x0 PUSH2 0x3114 DUP3 DUP7 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x30FB JUMPI PUSH2 0x30FB PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD DUP6 PUSH1 0xA PUSH2 0x1C9D SWAP2 SWAP1 PUSH2 0x4787 JUMP JUMPDEST POP DUP3 SLOAD DUP7 MLOAD SWAP2 SWAP3 POP PUSH14 0x100000000000000000000000000 DUP2 DIV PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 SWAP2 DIV PUSH4 0xFFFFFFFF AND SWAP1 DUP8 SWAP1 DUP8 SWAP1 DUP2 LT PUSH2 0x3175 JUMPI PUSH2 0x3175 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD MLOAD DUP5 SLOAD PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH14 0x100000000000000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFF0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND OR DUP5 SSTORE DUP7 MLOAD DUP8 SWAP1 DUP8 SWAP1 DUP2 LT PUSH2 0x31DD JUMPI PUSH2 0x31DD PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD DUP5 SLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND PUSH29 0x100000000000000000000000000000000000000000000000000000000 MUL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND OR DUP5 SSTORE DUP7 MLOAD DUP8 SWAP1 DUP8 SWAP1 DUP2 LT PUSH2 0x324C JUMPI PUSH2 0x324C PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x80 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x3280 JUMPI PUSH2 0x3280 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x60 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xAC1777479F07F3E7C34DA8402139D54027A6A260CAAAE168BDEE825CA5580DC5 DUP5 DUP11 DUP11 DUP2 MLOAD DUP2 LT PUSH2 0x32D6 JUMPI PUSH2 0x32D6 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP6 DUP13 DUP13 DUP2 MLOAD DUP2 LT PUSH2 0x32F5 JUMPI PUSH2 0x32F5 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD DUP10 PUSH1 0x40 MLOAD PUSH2 0x3349 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 AND DUP2 MSTORE SWAP4 SWAP1 SWAP5 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH4 0xFFFFFFFF SWAP2 DUP3 AND PUSH1 0x40 DUP5 ADD MSTORE AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP DUP1 DUP1 PUSH2 0x3361 SWAP1 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x2ACB JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x60 SWAP1 DUP2 SWAP1 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x338A JUMPI PUSH2 0x338A PUSH2 0x424B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x33B3 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP3 POP DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x33CF JUMPI PUSH2 0x33CF PUSH2 0x424B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x33F8 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH2 0x340A DUP6 PUSH2 0x1E73 DUP11 DUP11 DUP10 PUSH2 0x2297 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP8 DUP2 LT ISZERO PUSH2 0x3719 JUMPI PUSH1 0x0 DUP10 DUP10 DUP4 DUP2 DUP2 LT PUSH2 0x3429 JUMPI PUSH2 0x3429 PUSH2 0x4560 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x343E SWAP2 SWAP1 PUSH2 0x3F5F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3704 JUMPI PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3475 JUMPI PUSH2 0x3475 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x3524 JUMPI PUSH1 0x3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x34AC JUMPI PUSH2 0x34AC PUSH2 0x4560 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x34E9 JUMPI PUSH2 0x34E9 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP8 MLOAD DUP3 SWAP1 DUP10 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0x355F JUMPI PUSH2 0x355F PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND DUP4 MSTORE DUP3 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 SWAP2 DUP3 ADD PUSH1 0x0 SWAP1 DUP2 KECCAK256 SWAP4 DUP14 AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP4 ADD SWAP1 MSTORE SWAP1 KECCAK256 SLOAD PUSH14 0x100000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP1 ISZERO PUSH2 0x36F1 JUMPI DUP1 DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x35E3 JUMPI PUSH2 0x35E3 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MLOAD PUSH2 0x35F7 SWAP2 SWAP1 PUSH2 0x45BE JUMP JUMPDEST SWAP1 MSTORE POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP9 MLOAD DUP3 SWAP1 DUP11 SWAP1 DUP7 SWAP1 DUP2 LT PUSH2 0x3635 JUMPI PUSH2 0x3635 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x1 ADD PUSH1 0x0 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 ADD PUSH1 0xD PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST POP DUP1 PUSH2 0x36FC DUP2 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x3443 JUMP JUMPDEST POP POP DUP1 DUP1 PUSH2 0x3711 SWAP1 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x340D JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3845 JUMPI PUSH2 0x3762 DUP6 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x373B JUMPI PUSH2 0x373B PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3755 JUMPI PUSH2 0x3755 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3B06 JUMP JUMPDEST DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x378B JUMPI PUSH2 0x378B PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xC052130BC4EF84580DB505783484B067EA8B71B3BCA78A7E12DB7AEA8658F004 DUP11 DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x37F4 JUMPI PUSH2 0x37F4 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD PUSH2 0x382B SWAP3 SWAP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 DUP1 PUSH2 0x383D DUP2 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x371D JUMP JUMPDEST POP POP SWAP6 POP SWAP6 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3862 DUP8 DUP8 DUP8 PUSH2 0x2856 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP3 DUP3 EQ PUSH2 0x397B JUMPI PUSH13 0xFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x38E6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E4445585F4F564552464C4F57000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST POP DUP7 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000 AND PUSH13 0xFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND OR DUP8 SSTORE PUSH1 0x1 PUSH2 0x3929 TIMESTAMP PUSH2 0x3DB5 JUMP JUMPDEST DUP9 SLOAD PUSH4 0xFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH25 0x1000000000000000000000000000000000000000000000000 MUL PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND OR DUP9 SSTORE PUSH2 0x39D2 JUMP JUMPDEST PUSH2 0x3984 TIMESTAMP PUSH2 0x3DB5 JUMP JUMPDEST DUP9 SLOAD PUSH4 0xFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH25 0x1000000000000000000000000000000000000000000000000 MUL PUSH32 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND OR DUP9 SSTORE JUMPDEST SWAP1 SWAP8 SWAP1 SWAP7 POP SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x778 JUMPI PUSH2 0x3A4E DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3A00 JUMPI PUSH2 0x3A00 PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP5 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x3A1F JUMPI PUSH2 0x3A1F PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD DUP6 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x3A3D JUMPI PUSH2 0x3A3D PUSH2 0x4560 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x20E4 JUMP JUMPDEST DUP1 PUSH2 0x3A58 DUP2 PUSH2 0x45D6 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x39E2 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x3B02 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2031 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3238206269747300000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x74A JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3A PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SLOAD SWAP1 MLOAD PUSH32 0x16BEB98200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP8 DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x44 DUP4 ADD DUP6 SWAP1 MSTORE SWAP1 SWAP3 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH4 0x16BEB982 SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3B99 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3BBD SWAP2 SWAP1 PUSH2 0x4849 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 ISZERO ISZERO EQ PUSH2 0x3C2B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5452414E534645525F4552524F52000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x74A JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP2 SWAP1 PUSH13 0xFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 DUP6 DUP3 EQ DUP1 ISZERO SWAP1 PUSH2 0x3D82 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP12 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000 AND PUSH13 0xFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND OR SWAP1 SSTORE DUP8 ISZERO PUSH2 0x3D82 JUMPI PUSH2 0x3CE6 DUP9 DUP9 DUP6 DUP10 PUSH2 0x3D91 JUMP JUMPDEST SWAP2 POP PUSH2 0x3CF1 DUP3 PUSH2 0x3A60 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP13 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xD SWAP1 PUSH2 0x3D4B SWAP1 DUP5 SWAP1 PUSH14 0x100000000000000000000000000 SWAP1 DIV PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x486B JUMP JUMPDEST SWAP3 POP PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST SWAP1 SWAP10 SWAP1 SWAP9 POP SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3D9E DUP5 DUP7 PUSH2 0x47AE JUMP JUMPDEST PUSH2 0x3DA8 SWAP1 DUP8 PUSH2 0x47E9 JUMP JUMPDEST SWAP3 SWAP1 SWAP3 DIV SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 GT ISZERO PUSH2 0x3B02 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x53616665436173743A2076616C756520646F65736E27742066697420696E2033 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3220626974730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x74A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x11BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3E80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3E8B DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3E9B DUP2 PUSH2 0x3E4B JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x3EB8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3ED0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0xFB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x80 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x3F03 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3F1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3F26 DUP9 DUP3 DUP10 ADD PUSH2 0x3EA6 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x3F41 DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x3F51 DUP2 PUSH2 0x3E4B JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3F71 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x3F7C DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3F98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3FA3 DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0x3FD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3FE8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3FF4 DUP10 DUP3 DUP11 ADD PUSH2 0x3EA6 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD PUSH2 0x400F DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP3 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0x401F DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP2 POP PUSH1 0x80 DUP8 ADD CALLDATALOAD PUSH2 0x402F DUP2 PUSH2 0x3E4B JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4052 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x4069 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4075 DUP7 DUP3 DUP8 ADD PUSH2 0x3EA6 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x4089 DUP2 PUSH2 0x3E4B JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x40DA JUMPI DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x40A8 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x40F8 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x4094 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP5 MLOAD DUP1 DUP4 MSTORE DUP6 DUP3 ADD SWAP3 DUP3 ADD SWAP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x412F JUMPI DUP5 MLOAD DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x4113 JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x4151 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x415C DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x416C DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x4089 DUP2 PUSH2 0x3E4B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4192 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x41A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x41B5 DUP8 DUP3 DUP9 ADD PUSH2 0x3EA6 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x41D0 DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x3F7C PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x4094 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x4204 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x421B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4227 DUP8 DUP3 DUP9 ADD PUSH2 0x3EA6 JUMP JUMPDEST SWAP1 SWAP6 POP SWAP4 POP POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x423B DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x41D0 DUP2 PUSH2 0x3E4B JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xE0 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x429D JUMPI PUSH2 0x429D PUSH2 0x424B JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x42EA JUMPI PUSH2 0x42EA PUSH2 0x424B JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH11 0xFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x430D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x430D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4339 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x4351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x4365 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x4377 JUMPI PUSH2 0x4377 PUSH2 0x424B JUMP JUMPDEST PUSH2 0x4385 DUP5 DUP3 PUSH1 0x5 SHL ADD PUSH2 0x42A3 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 DUP2 ADD SWAP3 POP PUSH1 0xE0 SWAP2 DUP3 MUL DUP5 ADD DUP6 ADD SWAP2 DUP9 DUP4 GT ISZERO PUSH2 0x43A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 DUP6 ADD SWAP4 JUMPDEST DUP3 DUP6 LT ISZERO PUSH2 0x4448 JUMPI DUP1 DUP6 DUP11 SUB SLT ISZERO PUSH2 0x43C1 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0x43C9 PUSH2 0x427A JUMP JUMPDEST PUSH2 0x43D2 DUP7 PUSH2 0x42F2 JUMP JUMPDEST DUP2 MSTORE DUP7 DUP7 ADD CALLDATALOAD DUP8 DUP3 ADD MSTORE PUSH1 0x40 PUSH2 0x43E9 DUP2 DUP9 ADD PUSH2 0x4312 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH1 0x60 DUP7 DUP2 ADD CALLDATALOAD PUSH2 0x43FC DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH1 0x80 DUP7 DUP2 ADD CALLDATALOAD PUSH2 0x440F DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH1 0xA0 DUP7 DUP2 ADD CALLDATALOAD PUSH2 0x4422 DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH1 0xC0 DUP7 DUP2 ADD CALLDATALOAD PUSH2 0x4435 DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE DUP5 MSTORE SWAP4 DUP5 ADD SWAP4 SWAP3 DUP6 ADD SWAP3 PUSH2 0x43A9 JUMP JUMPDEST POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x4467 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x447E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x448A DUP6 DUP3 DUP7 ADD PUSH2 0x3EA6 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x44AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x44B6 DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x44C6 DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP2 POP PUSH2 0x44D4 PUSH1 0x40 DUP6 ADD PUSH2 0x4312 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x44F5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x4500 DUP2 PUSH2 0x3E4B JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x451D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4529 DUP10 DUP4 DUP11 ADD PUSH2 0x3EA6 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x4542 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x454F DUP9 DUP3 DUP10 ADD PUSH2 0x3EA6 JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 POP SWAP3 SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0x45D1 JUMPI PUSH2 0x45D1 PUSH2 0x458F JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x4608 JUMPI PUSH2 0x4608 PUSH2 0x458F JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x4635 JUMPI PUSH2 0x4635 PUSH2 0x458F JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4651 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH2 0x46B1 JUMPI DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x4697 JUMPI PUSH2 0x4697 PUSH2 0x458F JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH2 0x46A4 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH2 0x465D JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x46C8 JUMPI POP PUSH1 0x1 PUSH2 0x6C9 JUMP JUMPDEST DUP2 PUSH2 0x46D5 JUMPI POP PUSH1 0x0 PUSH2 0x6C9 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH2 0x46EB JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x46F5 JUMPI PUSH2 0x4711 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH2 0x6C9 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH2 0x4706 JUMPI PUSH2 0x4706 PUSH2 0x458F JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH2 0x6C9 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH2 0x4734 JUMPI POP DUP2 DUP2 EXP PUSH2 0x6C9 JUMP JUMPDEST PUSH2 0x473E DUP4 DUP4 PUSH2 0x4658 JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP3 GT ISZERO PUSH2 0x4770 JUMPI PUSH2 0x4770 PUSH2 0x458F JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F7C PUSH1 0xFF DUP5 AND DUP4 PUSH2 0x46B9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F7C DUP4 DUP4 PUSH2 0x46B9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x47A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3F7C DUP3 PUSH2 0x42F2 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x47C0 JUMPI PUSH2 0x47C0 PUSH2 0x458F JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x47D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x4821 JUMPI PUSH2 0x4821 PUSH2 0x458F JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x4838 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x3F7C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x485B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3F7C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP6 AND DUP1 DUP4 SUB DUP3 GT ISZERO PUSH2 0x4896 JUMPI PUSH2 0x4896 PUSH2 0x458F JUMP JUMPDEST ADD SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP14 0xBD GASLIMIT 0xBB EXTCODEHASH LT CALLCODE PUSH2 0x2620 0xAC INVALID 0xC3 LOG0 0xEC PUSH20 0xA43A47A8623822D8D3050DE86C0467DD64736F6C PUSH4 0x4300080A STOP CALLER ","sourceMap":"913:12488:175:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2363:176:176;;;;;;:::i;:::-;;:::i;:::-;;;712:25:201;;;700:2;685:18;2363:176:176;;;;;;;;4591:285:175;;;;;;:::i;:::-;;:::i;2902:130::-;;;;;;:::i;:::-;3005:21;;;;2975:7;3005:21;;;:13;:21;;;;;;;;2902:130;;;;2335:42:201;2323:55;;;2305:74;;2293:2;2278:18;2902:130:175;2159:226:201;4388:162:175;;;;;;:::i;:::-;;:::i;:::-;;4917:403;;;;;;:::i;:::-;;:::i;4014:1041:176:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;3151:197::-;;;;;;:::i;:::-;3291:14;;;;3269:7;3291:14;;;:7;:14;;;;;;;;:30;;;;;;;;;;:46;;;;;:40;;;;:46;;;:52;;;3151:197;;;;;;4182:165:175;;;;;;:::i;:::-;;:::i;5361:230::-;;;;;;:::i;:::-;;:::i;3073:138::-;;;;;;:::i;:::-;3180:25;;;;3150:7;3180:25;;;:17;:25;;;;;;;;3073:138;2581:380:176;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3751:221::-;;;;;;:::i;:::-;;:::i;2528:118:175:-;;;;;;:::i;:::-;2616:25;;;;2594:7;2616:25;;;:19;:25;;;;;;;;2528:118;1548:369:176;;;;;;:::i;:::-;1702:14;;;;1645:7;1702:14;;;:7;:14;;;;;;;;:30;;;;;;;;;;;:36;;;;;1746:48;;;;;;1802:50;;;;;;;1860:46;;;;;;1548:369;;;;;8398:25:201;;;8454:2;8439:18;;8432:34;;;;8482:18;;;8475:34;8540:2;8525:18;;8518:34;8385:3;8370:19;1548:369:176;8167:391:201;1959:362:176;;;;;;:::i;:::-;;:::i;:::-;;;;8737:25:201;;;8793:2;8778:18;;8771:34;;;;8710:18;1959:362:176;8563:248:201;18135:96:176;18210:16;18135:96;;3252:661:175;;;;;;:::i;:::-;;:::i;17981:112:176:-;;;;;;:::i;:::-;18065:14;;18045:5;18065:14;;;:7;:14;;;;;:23;;;;;;;;;17981:112;;;;12179:4:201;12167:17;;;12149:36;;12137:2;12122:18;17981:112:176;12007:184:201;5962:425:175;;;;;;:::i;:::-;;:::i;3390:319:176:-;;;;;;:::i;:::-;;:::i;3003:106::-;;;:::i;5632:289:175:-;;;;;;:::i;:::-;;:::i;6428:234::-;;;;;;:::i;:::-;;:::i;2435:52::-;;;;;;:::i;:::-;;:::i;5097:570:176:-;;;;;;:::i;:::-;;:::i;781:41::-;;;;;1041:36:175;;1076:1;1041:36;;3954:187;;;;;;:::i;:::-;;:::i;6703:168::-;;;;;;:::i;:::-;;:::i;5709:1172:176:-;;;;;;:::i;:::-;;:::i;2363:176::-;2488:14;;;;2466:7;2488:14;;;:7;:14;;;;;;;;:30;;;;;;;;;:46;;;;;;2363:176;;;;;:::o;4591:285:175:-;4731:7;4754:16;;;4746:47;;;;;;;14641:2:201;4746:47:175;;;14623:21:201;14680:2;14660:18;;;14653:30;14719:20;14699:18;;;14692:48;14757:18;;4746:47:175;;;;;;;;;4806:65;4820:6;;4828;4836:10;4848;4860:2;4864:6;4806:13;:65::i;:::-;4799:72;4591:285;-1:-1:-1;;;;;;4591:285:175:o;4388:162::-;4490:55;4502:10;4514:4;4520:11;4533;4490;:55::i;:::-;4388:162;;;:::o;4917:403::-;2117:36;:25;;;5124:7;2117:25;;;:19;:25;;;;;;5124:7;;5097:10;;5109:4;;2117:25;:36;;2109:69;;;;;;;14988:2:201;2109:69:175;;;14970:21:201;15027:2;15007:18;;;15000:30;15066:22;15046:18;;;15039:50;15106:18;;2109:69:175;14786:344:201;2109:69:175;5147:18:::1;::::0;::::1;5139:51;;;::::0;::::1;::::0;;15337:2:201;5139:51:175::1;::::0;::::1;15319:21:201::0;15376:2;15356:18;;;15349:30;15415:22;15395:18;;;15388:50;15455:18;;5139:51:175::1;15135:344:201::0;5139:51:175::1;5204:16;::::0;::::1;5196:47;;;::::0;::::1;::::0;;14641:2:201;5196:47:175::1;::::0;::::1;14623:21:201::0;14680:2;14660:18;;;14653:30;14719:20;14699:18;;;14692:48;14757:18;;5196:47:175::1;14439:342:201::0;5196:47:175::1;5256:59;5270:6;;5278;5286:10;5298:4;5304:2;5308:6;5256:13;:59::i;:::-;5249:66:::0;4917:403;-1:-1:-1;;;;;;;;;4917:403:175:o;4014:1041:176:-;4142:28;4172:33;4215:60;4278:53;4307:6;;4321:4;4278:21;:53::i;:::-;4365:12;:19;4215:116;;-1:-1:-1;4351:34:176;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4351:34:176;;4337:48;;4424:11;:18;4410:33;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4410:33:176;;4391:52;;4515:9;4510:497;4534:17;:24;4530:1;:28;4510:497;;;4578:9;4573:428;4597:11;:18;4593:1;:22;4573:428;;;4649:12;4662:1;4649:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4632:11;4644:1;4632:14;;;;;;;;:::i;:::-;;;;;;:32;;;;;;;;;;;4697:7;:35;4705:17;4723:1;4705:20;;;;;;;;:::i;:::-;;;;;;;:26;;;4697:35;;;;;;;;;;;;;;;:54;;:70;4752:11;4764:1;4752:14;;;;;;;;:::i;:::-;;;;;;;4697:70;;;;;;;;;;;;;;;:91;;:97;4789:4;4697:97;;;;;;;;;;;;;;;:116;;;;;;;;;;;;4674:139;;:16;4691:1;4674:19;;;;;;;;:::i;:::-;;;;;;:139;;;;;;;:::i;:::-;;;-1:-1:-1;4828:20:176;;:17;;4846:1;;4828:20;;;;;;:::i;:::-;;;;;;;:32;;;4864:1;4828:37;4824:74;;;4879:8;;4824:74;4930:62;4949:4;4955:11;4967:1;4955:14;;;;;;;;:::i;:::-;;;;;;;4971:17;4989:1;4971:20;;;;;;;;:::i;:::-;;;;;;;4930:18;:62::i;:::-;4907:16;4924:1;4907:19;;;;;;;;:::i;:::-;;;;;;:85;;;;;;;:::i;:::-;;;-1:-1:-1;4573:428:176;4617:3;;;;:::i;:::-;;;;4573:428;;;-1:-1:-1;4560:3:176;;;;:::i;:::-;;;;4510:497;;;;5012:38;4014:1041;;;;;;;:::o;4182:165:175:-;1352:10:176;:30;1366:16;1352:30;;1344:64;;;;;;;16397:2:201;1344:64:176;;;16379:21:201;16436:2;16416:18;;;16409:30;16475:23;16455:18;;;16448:51;16516:18;;1344:64:176;16195:345:201;1344:64:176;4304:38:175::1;4321:6;4329:12;4304:16;:38::i;:::-;4182:165:::0;;:::o;5361:230::-;5491:7;5513:73;5527:6;;5535;5543:10;5555;5567;5579:6;5513:13;:73::i;:::-;5506:80;5361:230;-1:-1:-1;;;;;5361:230:175:o;2581:380:176:-;2702:14;;;2679:20;2702:14;;;:7;:14;;;;;:36;;;2655:16;;2702:36;;;;;;2780:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2780:27:176;;2744:63;;2819:9;2814:114;2838:12;2834:16;;:1;:16;;;2814:114;;;2887:14;;;;;;;;:7;:14;;;;;;;;:34;;;;;;:31;;:34;;;;;;;2865:19;;2887:34;;;2865:16;;2887:34;2865:19;;;;;;:::i;:::-;:56;;;;:19;;;;;;;;;;;:56;2852:3;;;;:::i;:::-;;;;2814:114;;;-1:-1:-1;2940:16:176;2581:380;-1:-1:-1;;;2581:380:176:o;3751:221::-;3880:7;3902:65;3917:4;3923:6;3931:35;3953:6;;3961:4;3931:21;:35::i;:::-;3902:14;:65::i;1959:362::-;2130:14;;;;2057:7;2130:14;;;:7;:14;;;;;;;;:30;;;;;;;;;;;2223:46;;;;;;;2057:7;;;;2130:30;;2179:137;;2130:30;;:14;2223:44;;:46;;;;;2130:14;2223:46;;;;;2130:14;2223:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2285:14;;;;;;;:7;:14;;;;;:23;;;2279:29;;2285:23;;;;;2279:2;:29;:::i;:::-;2179:14;:137::i;:::-;2166:150;;;;;1959:362;;;;;;:::o;3252:661:175:-;1352:10:176;:30;1366:16;1352:30;;1344:64;;;;;;;16397:2:201;1344:64:176;;;16379:21:201;16436:2;16416:18;;;16409:30;16475:23;16455:18;;;16448:51;16516:18;;1344:64:176;16195:345:201;1344:64:176;3387:9:175::1;3382:497;3406:6;:13;3402:1;:17;3382:497;;;3547:6;3554:1;3547:9;;;;;;;;:::i;:::-;;;;;;;:15;;;3527:54;;;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3503:6;3510:1;3503:9;;;;;;;;:::i;:::-;;;;;;;:21;;:80;;;::::0;::::1;3656:70;3681:6;3688:1;3681:9;;;;;;;;:::i;:::-;;;;;;;:16;;;3699:6;3706:1;3699:9;;;;;;;;:::i;:::-;;;;;;;:26;;;3656:24;:70::i;:::-;3814:58;3831:6;3838:1;3831:9;;;;;;;;:::i;:::-;;;;;;;:16;;;3849:6;3856:1;3849:9;;;;;;;;:::i;:::-;;;;;;;:22;;;3814:16;:58::i;:::-;3421:3:::0;::::1;::::0;::::1;:::i;:::-;;;;3382:497;;;;3884:24;3901:6;3884:16;:24::i;:::-;3252:661:::0;:::o;5962:425::-;2117:36;:25;;;;;;;:19;:25;;;;;;6148:28;;;;6117:10;;6129:4;;2117:25;:36;;2109:69;;;;;;;14988:2:201;2109:69:175;;;14970:21:201;15027:2;15007:18;;;15000:30;15066:22;15046:18;;;15039:50;15106:18;;2109:69:175;14786:344:201;2109:69:175;6227:18:::1;::::0;::::1;6219:51;;;::::0;::::1;::::0;;15337:2:201;6219:51:175::1;::::0;::::1;15319:21:201::0;15376:2;15356:18;;;15349:30;15415:22;15395:18;;;15388:50;15455:18;;6219:51:175::1;15135:344:201::0;6219:51:175::1;6284:16;::::0;::::1;6276:47;;;::::0;::::1;::::0;;14641:2:201;6276:47:175::1;::::0;::::1;14623:21:201::0;14680:2;14660:18;;;14653:30;14719:20;14699:18;;;14692:48;14757:18;;6276:47:175::1;14439:342:201::0;6276:47:175::1;6336:46;6353:6;;6361:10;6373:4;6379:2;6336:16;:46::i;:::-;6329:53;;;;5962:425:::0;;;;;;;;;:::o;3390:319:176:-;3495:7;3510:20;3541:9;3536:143;3560:11;:18;3556:22;;3536:143;;;3609:7;:23;3617:11;3629:1;3617:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3609:23;;;;;;;;;;;;;;;:39;;;;;;;;;;:55;;;;;3617:14;3609:49;;;:55;;;;;:63;3593:79;;3609:63;;;;;3593:79;;:::i;:::-;;-1:-1:-1;3580:3:176;;;;:::i;:::-;;;;3536:143;;3003:106;3061:16;3092:12;3085:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3003:106;:::o;5632:289:175:-;5735:28;;5812:16;;;5804:47;;;;;;;14641:2:201;5804:47:175;;;14623:21:201;14680:2;14660:18;;;14653:30;14719:20;14699:18;;;14692:48;14757:18;;5804:47:175;14439:342:201;5804:47:175;5864:52;5881:6;;5889:10;5901;5913:2;5864:16;:52::i;:::-;5857:59;;;;5632:289;;;;;;:::o;6428:234::-;6521:28;6551:31;6597:60;6614:6;;6622:10;6634;6646;6597:16;:60::i;:::-;6590:67;;;;6428:234;;;;;:::o;2435:52::-;1217:12:71;;1076:1:175;;1217:12:71;;;:31;;-1:-1:-1;2436:9:71;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;18670:2:201;1202:146:71;;;18652:21:201;18709:2;18689:18;;;18682:30;18748:34;18728:18;;;18721:62;18819:16;18799:18;;;18792:44;18853:19;;1202:146:71;18468:410:201;1202:146:71;1378:12;;;;1377:13;1396:96;;;;1424:12;:19;;;;1439:4;1424:19;;;1451:23;:34;;;1396:96;1510:14;1506:55;;;1534:12;:20;;;;;;1158:407;;2435:52:175;:::o;5097:570:176:-;1352:10;:30;1366:16;1352:30;;1344:64;;;;;;;16397:2:201;1344:64:176;;;16379:21:201;16436:2;16416:18;;;16409:30;16475:23;16455:18;;;16448:51;16516:18;;1344:64:176;16195:345:201;1344:64:176;5272:14:::1;::::0;;::::1;5243:26;5272:14:::0;;;:7:::1;:14;::::0;;;;;;;:30;;::::1;::::0;;;;;;;;;;:46;;5324:67;;::::1;5272:46:::0;::::1;5324:67:::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;5403:259;;5456:48;;;::::1;;;19182:34:201::0;;;19232:18;;;19225:43;;;;5272:46:176;;::::1;;19284:18:201::0;;;19277:34;;;19342:2;19327:18;;19320:51;;;;5620:36:176::1;::::0;;;;;;;;;19402:3:201;19387:19;;19380:70;5272:46:176;;:30;:14;5403:259:::1;::::0;19126:3:201;19111:19;5403:259:176::1;;;;;;;5237:430;5097:570:::0;;;:::o;3954:187:175:-;1352:10:176;:30;1366:16;1352:30;;1344:64;;;;;;;16397:2:201;1344:64:176;;;16379:21:201;16436:2;16416:18;;;16409:30;16475:23;16455:18;;;16448:51;16516:18;;1344:64:176;16195:345:201;1344:64:176;4086:50:175::1;4111:6;4119:16;4086:24;:50::i;6703:168::-:0;1352:10:176;:30;1366:16;1352:30;;1344:64;;;;;;;16397:2:201;1344:64:176;;;16379:21:201;16436:2;16416:18;;;16409:30;16475:23;16455:18;;;16448:51;16516:18;;1344:64:176;16195:345:201;1344:64:176;6797:25:175::1;::::0;;::::1;;::::0;;;:19:::1;:25;::::0;;;;;:34;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;6842:24;::::1;::::0;6797:25;6842:24:::1;6703:168:::0;;:::o;5709:1172:176:-;1352:10;:30;1366:16;1352:30;;1344:64;;;;;;;16397:2:201;1344:64:176;;;16379:21:201;16436:2;16416:18;;;16409:30;16475:23;16455:18;;;16448:51;16516:18;;1344:64:176;16195:345:201;1344:64:176;5891:46;;::::1;5883:72;;;::::0;::::1;::::0;;19663:2:201;5883:72:176::1;::::0;::::1;19645:21:201::0;19702:2;19682:18;;;19675:30;19741:15;19721:18;;;19714:43;19774:18;;5883:72:176::1;19461:337:201::0;5883:72:176::1;5966:9;5961:916;5981:18:::0;;::::1;5961:916;;;6063:14;::::0;::::1;6014:46;6063:14:::0;;;:7:::1;:14;::::0;;;;;;6014:46;6159:7;;6167:1;6159:10;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;6136:34;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;6136:34:176;6197:20:::1;::::0;::::1;::::0;6136:34;;-1:-1:-1;6197:20:176;;::::1;;;6242:13:::0;;;::::1;::::0;:54:::1;;-1:-1:-1::0;6259:32:176;;;;::::1;;;:37:::0;::::1;6242:54;6225:118;;;::::0;::::1;::::0;;20005:2:201;6225:118:176::1;::::0;::::1;19987:21:201::0;20044:2;20024:18;;;20017:30;20083:29;20063:18;;;20056:57;20130:18;;6225:118:176::1;19803:351:201::0;6225:118:176::1;6353:16;6375:127;6402:12;6444:5;6424:44;;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6480:14;6486:8:::0;6480:2:::1;:14;:::i;:::-;6375:17;:127::i;:::-;-1:-1:-1::0;6542:30:176;;6352:150;;-1:-1:-1;6542:30:176;;::::1;;;6613:21:::0;;6635:1;6613:24;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;6580:57:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;;::::0;;6694:7;;6702:1;6694:10;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;6651:219;;6679:5;6651:219;;;6714:20;6744:21;;6766:1;6744:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;6778:28:::0;;6651:219:::1;::::0;;20740:25:201;;;20813:24;20801:37;;;20796:2;20781:18;;20774:65;6778:28:176;;::::1;;;20884:18:201::0;;;20877:43;;;20951:2;20936:18;;20929:43;21003:3;20988:19;;20981:35;;;20727:3;20712:19;6651:219:176::1;;;;;;;6006:871;;;;;6001:3;;;;;:::i;:::-;;;;5961:916;;;;5709:1172:::0;;;;;:::o;8308:1005:175:-;8479:7;8498:11;8494:40;;-1:-1:-1;8526:1:175;8519:8;;8494:40;8539:20;8566:62;8586:4;8592:35;8614:6;;8622:4;8592:21;:35::i;:::-;8566:19;:62::i;:::-;8639:9;8634:482;8654:17;;;8634:482;;;8686:13;8702:6;;8709:1;8702:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;8735:14;;;;;;;;:7;:14;;;;;;;;:30;;;;;;;;;;:46;;;;;:40;;;;:46;;;:54;:14;;-1:-1:-1;8719:70:175;;8735:54;;;;;8719:70;;:::i;:::-;;;8818:6;8802:12;:22;8798:312;;8836:14;;;;8893:1;8836:14;;;:7;:14;;;;;;;;:30;;;;;;;;;;:46;;;;;:40;;;;:46;;;:58;;;;;;8798:312;;;8919:18;8940:21;8955:6;8940:12;:21;:::i;:::-;8919:42;-1:-1:-1;8971:26:175;8919:42;8971:26;;:::i;:::-;;;9064:22;:10;:20;:22::i;:::-;9007:14;;;;;;;;:7;:14;;;;;;;;:30;;;;;;;;;;:46;;;;;:40;;;;:46;;;;;;:79;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9096:5:175;;8798:312;-1:-1:-1;8673:3:175;;;;:::i;:::-;;;;8634:482;;;-1:-1:-1;9126:17:175;9122:46;;9160:1;9153:8;;;;;9122:46;9174:42;9191:2;9195:6;9203:12;9174:16;:42::i;:::-;9227:55;;;;21349::201;;;21331:74;;21436:2;21421:18;;21414:34;;;9227:55:175;;;;;;;;;;;;;;21304:18:201;9227:55:175;;;;;;;9296:12;-1:-1:-1;8308:1005:175;;;;;;;;;;:::o;11673:1087:176:-;11853:14;;;11800:17;11853:14;;;:7;:14;;;;;:36;;;11931:23;;;;;11925:2;:29;;11853:36;;11971:24;11967:51;;12005:7;;;;11967:51;12046:9;12041:709;12065:19;12061:1;:23;;;12041:709;;;12118:14;;;;12101;12118;;;:7;:14;;;;;;;;:34;;;;;:31;;;:34;;;;;;;;;12211:30;;;;;;;;;;12101:14;12302:93;12211:30;12353:11;12376:9;12302:17;:93::i;:::-;12252:143;;;;12407:22;12431:20;12455:132;12482:10;12504:4;12520:11;12543:13;12568:9;12455:15;:132::i;:::-;12406:181;;;;12602:17;:36;;;;12623:15;12602:36;12598:144;;;12680:4;12657:74;;12672:6;12657:74;;12665:5;12657:74;;;12686:13;12701;12716:14;12657:74;;;;;;;21661:25:201;;;21717:2;21702:18;;21695:34;;;;21760:2;21745:18;;21738:34;21649:2;21634:18;;21459:319;12657:74:176;;;;;;;;12598:144;-1:-1:-1;;12086:3:176;;;;;-1:-1:-1;12041:709:176;;-1:-1:-1;;;12041:709:176;;;11794:966;;11673:1087;;;;;:::o;7210:556:175:-;7326:60;7454:6;7414:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;7414:54:175;;;;;;;;;;;;;;;;;7394:74;;7479:9;7474:258;7494:17;;;7474:258;;;7555:6;;7562:1;7555:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;7526:17;7544:1;7526:20;;;;;;;;:::i;:::-;;;;;;;;;;;:38;;;;;;7672:6;;7679:1;7672:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;7643:82;;;;;:76;2323:55:201;;;7643:82:175;;;2305:74:201;7643:76:175;;;;;;;2278:18:201;;7643:82:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7573:17;7591:1;7573:20;;;;;;;;:::i;:::-;;;;;;;:32;;7607:17;7625:1;7607:20;;;;;;;;:::i;:::-;;;;;;;;;;;:32;;7572:153;;;;;7513:3;;;;:::i;:::-;;;;7474:258;;14836:610:176;15064:22;;15056:31;;;;14992:7;15056:31;;;:7;:31;;;;;;;;:59;;;;;;;;;;15155:22;;15147:31;;;;;;;;;;:40;;;14992:7;;15056:59;14992:7;;15141:46;;15147:40;;;;;15141:2;:46;:::i;:::-;15121:66;;15196:17;15217:67;15232:10;15244:16;:28;;;15274:9;15217:14;:67::i;:::-;15325:28;;;;;15382:26;;;;;;;:20;;;:26;;;;;;;:32;15193:91;;-1:-1:-1;15304:137:176;;-1:-1:-1;15325:28:176;15193:91;;15382:32;;15424:9;15304:11;:137::i;13132:267:175:-;13261:1;13231:12;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:31;13223:68;;;;;;;22423:2:201;13223:68:175;;;22405:21:201;22462:2;22442:18;;;22435:30;22501:26;22481:18;;;22474:54;22545:18;;13223:68:175;22221:348:201;13223:68:175;13297:21;;;;;;;;:13;:21;;;;;;:36;;;;;;;;;;;;13344:50;;;13297:21;13344:50;13132:267;;:::o;13760:707:176:-;13915:24;;13977:456;14001:17;:24;13997:1;:28;13977:456;;;14044:17;14062:1;14044:20;;;;;;;;:::i;:::-;;;;;;;:32;;;14080:1;14044:37;14040:387;;;14113:7;:35;14121:17;14139:1;14121:20;;;;;;;;:::i;:::-;;;;;;;;;;;;:26;14113:35;;;;;;;;;;;;;;;;;-1:-1:-1;14113:35:176;;;:62;;;;;;;;;;:89;;;;;:83;;;;:89;;;;:108;14093:128;;14113:108;;;;;14093:128;;:::i;:::-;;;14040:387;;;14343:7;:35;14351:17;14369:1;14351:20;;;;;;;;:::i;:::-;;;;;;;;;;;;:26;14343:35;;;;;;;;;;;;;;;;;-1:-1:-1;14343:35:176;;;:51;;;;;;;;;;:67;;;;;:61;;;;:67;;;;:75;14309:20;;14343:75;;;;;;;14276:54;;14343:67;;:51;;14309:20;;14327:1;;14309:20;;;;;;:::i;14276:54::-;:142;;;;:::i;:::-;14246:172;;;;:::i;:::-;;;14040:387;14027:3;;;;:::i;:::-;;;;13977:456;;16451:972;16645:16;;16602:7;;;;16645:16;;;;16693:26;;;;;;;16753:28;;;;;;16817:30;;;;;16865:22;;;:48;;-1:-1:-1;16897:16:176;;16865:48;:96;;;;16946:15;16923:19;:38;16865:96;:144;;;;16994:15;16971:19;:38;;16865:144;16854:204;;;17032:8;17042;17024:27;;;;;;;;;;16854:204;17064:24;17109:15;17091;:33;:81;;17157:15;17091:81;;;17133:15;17091:81;17064:108;-1:-1:-1;17178:17:176;17198:38;17217:19;17064:108;17198:38;:::i;:::-;17178:58;-1:-1:-1;17242:17:176;17294:9;17262:29;17178:58;17262:17;:29;:::i;:::-;:41;;;;:::i;:::-;17339:27;;;;-1:-1:-1;17385:8:176;17396:20;17385:8;17339:27;17396:20;:::i;:::-;17377:41;;;;;;;;;;;16451:972;;;;;;:::o;12354:411:175:-;12479:39;;;12471:76;;;;;;;23009:2:201;12471:76:175;;;22991:21:201;23048:2;23028:18;;;23021:30;23087:26;23067:18;;;23060:54;23131:18;;12471:76:175;22807:348:201;12471:76:175;12603:4;12078:20;;12116:8;;12561:46;12553:84;;;;;;;23362:2:201;12553:84:175;;;23344:21:201;23401:2;23381:18;;;23374:30;23440:27;23420:18;;;23413:55;23485:18;;12553:84:175;23160:349:201;12553:84:175;12644:25;;;;;;;;:17;:25;;;;;;:44;;;;;;;;;;;;12700:60;;;12644:25;12700:60;12354:411;;:::o;7017:2061:176:-;7122:9;7117:1957;7141:12;:19;7137:1;:23;7117:1957;;;7179:7;:30;7187:12;7200:1;7187:15;;;;;;;;:::i;:::-;;;;;;;;;;;;:21;;;7179:30;;;;;;;;;;;;-1:-1:-1;7179:30:176;:39;;;;;;;;7175:173;;7300:11;7317:12;7330:1;7317:15;;;;;;;;:::i;:::-;;;;;;;;;;;;:21;;;7300:39;;;;;;;-1:-1:-1;7300:39:176;;;;;;;;;;;;;;;;;;;;;;7175:173;7356:16;7441:12;7454:1;7441:15;;;;;;;;:::i;:::-;;;;;;;:21;;;7417:62;;;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7375:7;:30;7383:12;7396:1;7383:15;;;;;;;;:::i;:::-;;;;;;;:21;;;7375:30;;;;;;;;;;;;;;;:39;;;:106;;;;;;;;;;;;;;;;;7356:125;;;;7490:48;7541:7;:30;7549:12;7562:1;7549:15;;;;;;;;:::i;:::-;;;;;;;:21;;;7541:30;;;;;;;;;;;;;;;:38;;:78;7589:12;7602:1;7589:15;;;;;;;;:::i;:::-;;;;;;;;;;;;:22;;;7541:78;;;;;;;;;;;;-1:-1:-1;7541:78:176;7720:32;;7541:78;;-1:-1:-1;7720:32:176;;;;;7716:272;;7893:12;7906:1;7893:15;;;;;;;;:::i;:::-;;;;;;;:22;;;7769:7;:30;7777:12;7790:1;7777:15;;;;;;;;:::i;:::-;;;;;;;:21;;;7769:30;;;;;;;;;;;;;;;:47;;:121;7828:7;:30;7836:12;7849:1;7836:15;;;;;;;;:::i;:::-;;;;;;;:21;;;7828:30;;;;;;;;;;;;;;;:52;;;;;;;;;;;;7769:121;;;;;;;;;;;;;;;;:146;;;;;;;;;;;;;;;;;;7925:7;:30;7933:12;7946:1;7933:15;;;;;;;;:::i;:::-;;;;;;;;;;;;:21;;;7925:30;;;;;;;;;;;;-1:-1:-1;7925:30:176;;;:52;;:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;7716:272;8072:16;:40;8089:12;8102:1;8089:15;;;;;;;;:::i;:::-;;;;;;;;;;;;:22;;;8072:40;;;;;;;;;;;;-1:-1:-1;8072:40:176;;;;8068:172;;8176:4;8133:16;:40;8150:12;8163:1;8150:15;;;;;;;;:::i;:::-;;;;;;;:22;;;8133:40;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;8190:12;8208;8221:1;8208:15;;;;;;;;:::i;:::-;;;;;;;;;;;;:22;;;8190:41;;;;;;;-1:-1:-1;8190:41:176;;;;;;;;;;;;;;;;;;;;;;8068:172;8322:16;8344:108;8371:12;8393;8406:1;8393:15;;;;;;;;:::i;:::-;;;;;;;:27;;;8436:8;8430:2;:14;;;;:::i;8344:108::-;-1:-1:-1;8565:30:176;;8700:15;;8321:131;;-1:-1:-1;8565:30:176;;;;;;8631:28;;;;;;;8700:15;;8713:1;;8700:15;;;;;;:::i;:::-;;;;;;;;;;;:33;8667:66;;;;;;;;;;;;;;;8772:15;;:12;;8785:1;;8772:15;;;;;;:::i;:::-;;;;;;;;;;;:31;;;8741:62;;;;;;;;;;;;;;;8876:15;;:12;;8889:1;;8876:15;;;;;;:::i;:::-;;;;;;;:22;;;8817:250;;8845:12;8858:1;8845:15;;;;;;;;:::i;:::-;;;;;;;:21;;;8817:250;;;8908:21;8939:12;8952:1;8939:15;;;;;;;;:::i;:::-;;;;;;;:33;;;8982:18;9010:12;9023:1;9010:15;;;;;;;;:::i;:::-;;;;;;;:31;;;9051:8;8817:250;;;;;;;;;24057:24:201;24108:15;;;24090:34;;24160:15;;;;24155:2;24140:18;;24133:43;24195:10;24241:15;;;24236:2;24221:18;;24214:43;24293:15;24288:2;24273:18;;24266:43;24340:3;24325:19;;24318:35;;;;24034:3;24019:19;;23792:567;8817:250:176;;;;;;;;7167:1907;;;;;7162:3;;;;;:::i;:::-;;;;7117:1957;;9851:1190:175;10082:12;:19;9985:28;;;;10082:19;10121:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10121:32:175;;10107:46;;10190:17;10176:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10176:32:175;;10159:49;;10215:62;10235:4;10241:35;10263:6;;10271:4;10241:21;:35::i;10215:62::-;10289:9;10284:507;10304:17;;;10284:507;;;10336:13;10352:6;;10359:1;10352:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;10336:25;;10374:9;10369:416;10393:17;10389:1;:21;10369:416;;;10457:1;10431:28;;:11;10443:1;10431:14;;;;;;;;:::i;:::-;;;;;;;:28;;;10427:89;;;10490:12;10503:1;10490:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;10473:11;10485:1;10473:14;;;;;;;;:::i;:::-;;;;;;:32;;;;;;;;;;;10427:89;10548:14;;;10525:20;10548:14;;;:7;:14;;;;;10571;;10525:20;;10571:11;;10583:1;;10571:14;;;;;;:::i;:::-;;;;;;;;;;;;10548:38;;;;;;;;;;;;;;;;;-1:-1:-1;10548:38:175;;;:54;;;;;:48;;;;:54;;;;:62;;;;;;;-1:-1:-1;10624:17:175;;10620:157;;10676:12;10655:14;10670:1;10655:17;;;;;;;;:::i;:::-;;;;;;:33;;;;;;;:::i;:::-;;;-1:-1:-1;10700:14:175;;;10765:1;10700:14;;;:7;:14;;;;;10723;;10765:1;;10723:11;;10735:1;;10723:14;;;;;;:::i;:::-;;;;;;;10700:38;;;;;;;;;;;;;;;:48;;:54;10749:4;10700:54;;;;;;;;;;;;;;;:62;;;:66;;;;;;;;;;;;;;;;;;10620:157;-1:-1:-1;10412:3:175;;;;:::i;:::-;;;;10369:416;;;;10328:463;10323:3;;;;;:::i;:::-;;;;10284:507;;;;10801:9;10796:199;10820:17;10816:1;:21;10796:199;;;10852:55;10869:2;10873:11;10885:1;10873:14;;;;;;;;:::i;:::-;;;;;;;10889;10904:1;10889:17;;;;;;;;:::i;:::-;;;;;;;10852:16;:55::i;:::-;10957:2;10920:68;;10941:11;10953:1;10941:14;;;;;;;;:::i;:::-;;;;;;;10920:68;;10935:4;10920:68;;;10961:7;10970:14;10985:1;10970:17;;;;;;;;:::i;:::-;;;;;;;10920:68;;;;;;21361:42:201;21349:55;;;;21331:74;;21436:2;21421:18;;21414:34;21319:2;21304:18;;21157:297;10920:68:175;;;;;;;;10839:3;;;;:::i;:::-;;;;10796:199;;;;11000:36;9851:1190;;;;;;;;:::o;9477:711:176:-;9626:7;9635:4;9648:16;9666;9686:50;9701:10;9713:11;9726:9;9686:14;:50::i;:::-;9647:89;;;;9742:17;9781:8;9769;:20;9765:381;;9819:17;9807:29;;;9799:56;;;;;;;24566:2:201;9799:56:176;;;24548:21:201;24605:2;24585:18;;;24578:30;24644:16;24624:18;;;24617:44;24678:18;;9799:56:176;24364:338:201;9799:56:176;-1:-1:-1;9956:36:176;;;;;;;;;;-1:-1:-1;10033:26:176;:15;:24;:26::i;:::-;10000:59;;;;;;;;;;;;;;;;9765:381;;;10113:26;:15;:24;:26::i;:::-;10080:59;;;;;;;;;;;;;;;;9765:381;10160:8;;;;-1:-1:-1;9477:711:176;-1:-1:-1;;;;;9477:711:176:o;13010:359::-;13147:9;13142:223;13166:17;:24;13162:1;:28;13142:223;;;13205:153;13226:17;13244:1;13226:20;;;;;;;;:::i;:::-;;;;;;;:26;;;13262:4;13276:17;13294:1;13276:20;;;;;;;;:::i;:::-;;;;;;;:32;;;13318:17;13336:1;13318:20;;;;;;;;:::i;:::-;;;;;;;:32;;;13205:11;:153::i;:::-;13192:3;;;;:::i;:::-;;;;13142:223;;1563:182:12;1620:7;1652:17;1643:26;;;1635:78;;;;;;;24909:2:201;1635:78:12;;;24891:21:201;24948:2;24928:18;;;24921:30;24987:34;24967:18;;;24960:62;25058:9;25038:18;;;25031:37;25085:19;;1635:78:12;24707:403:201;1635:78:12;-1:-1:-1;1734:5:12;1563:182::o;11289:279:175:-;11415:25;;;;11374:38;11415:25;;;:17;:25;;;;;;;11462:52;;;;;25396:15:201;;;11462:52:175;;;25378:34:201;25428:18;;;25421:43;;;;25480:18;;;25473:34;;;11415:25:175;;;;11374:38;11415:25;;11462:32;;25290:18:201;;11462:52:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11447:67;-1:-1:-1;11540:4:175;11529:15;;;;11521:42;;;;;;;26002:2:201;11521:42:175;;;25984:21:201;26041:2;26021:18;;;26014:30;26080:16;26060:18;;;26053:44;26114:18;;11521:42:175;25800:338:201;11521:42:175;11368:200;;11289:279;;;:::o;10619:747:176:-;10852:26;;;10811:7;10852:26;;;:20;;;:26;;;;;:32;10811:7;;10852:32;;10811:7;10959:26;;;;;;10940:380;;11055:26;;;;;;;:20;;;:26;;;;;:57;;;;;;;;;;11124:16;;11120:194;;11169:61;11181:11;11194:13;11209:9;11220;11169:11;:61::i;:::-;11152:78;;11279:26;:14;:24;:26::i;:::-;11241;;;;;;;:20;;;:26;;;;;:64;;:34;;:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11120:194;11333:14;;;;-1:-1:-1;10619:747:176;-1:-1:-1;;;;;;;10619:747:176:o;15837:301::-;15982:7;;16029:24;16044:9;16029:12;:24;:::i;:::-;16014:40;;:11;:40;:::i;:::-;16087:22;;;;;15837:301;-1:-1:-1;;;;;15837:301:176:o;2894:177:12:-;2950:6;2981:16;2972:25;;;2964:76;;;;;;;26603:2:201;2964:76:12;;;26585:21:201;26642:2;26622:18;;;26615:30;26681:34;26661:18;;;26654:62;26752:8;26732:18;;;26725:36;26778:19;;2964:76:12;26401:402:201;14:154;100:42;93:5;89:54;82:5;79:65;69:93;;158:1;155;148:12;173:388;241:6;249;302:2;290:9;281:7;277:23;273:32;270:52;;;318:1;315;308:12;270:52;357:9;344:23;376:31;401:5;376:31;:::i;:::-;426:5;-1:-1:-1;483:2:201;468:18;;455:32;496:33;455:32;496:33;:::i;:::-;548:7;538:17;;;173:388;;;;;:::o;748:367::-;811:8;821:6;875:3;868:4;860:6;856:17;852:27;842:55;;893:1;890;883:12;842:55;-1:-1:-1;916:20:201;;959:18;948:30;;945:50;;;991:1;988;981:12;945:50;1028:4;1020:6;1016:17;1004:29;;1088:3;1081:4;1071:6;1068:1;1064:14;1056:6;1052:27;1048:38;1045:47;1042:67;;;1105:1;1102;1095:12;1120:782;1233:6;1241;1249;1257;1265;1318:3;1306:9;1297:7;1293:23;1289:33;1286:53;;;1335:1;1332;1325:12;1286:53;1375:9;1362:23;1408:18;1400:6;1397:30;1394:50;;;1440:1;1437;1430:12;1394:50;1479:70;1541:7;1532:6;1521:9;1517:22;1479:70;:::i;:::-;1568:8;;-1:-1:-1;1453:96:201;-1:-1:-1;;1650:2:201;1635:18;;1622:32;;-1:-1:-1;1704:2:201;1689:18;;1676:32;1717:31;1676:32;1717:31;:::i;:::-;1767:5;-1:-1:-1;1824:2:201;1809:18;;1796:32;1837:33;1796:32;1837:33;:::i;:::-;1889:7;1879:17;;;1120:782;;;;;;;;:::o;1907:247::-;1966:6;2019:2;2007:9;1998:7;1994:23;1990:32;1987:52;;;2035:1;2032;2025:12;1987:52;2074:9;2061:23;2093:31;2118:5;2093:31;:::i;:::-;2143:5;1907:247;-1:-1:-1;;;1907:247:201:o;2390:383::-;2467:6;2475;2483;2536:2;2524:9;2515:7;2511:23;2507:32;2504:52;;;2552:1;2549;2542:12;2504:52;2591:9;2578:23;2610:31;2635:5;2610:31;:::i;:::-;2660:5;2712:2;2697:18;;2684:32;;-1:-1:-1;2763:2:201;2748:18;;;2735:32;;2390:383;-1:-1:-1;;;2390:383:201:o;2778:924::-;2900:6;2908;2916;2924;2932;2940;2993:3;2981:9;2972:7;2968:23;2964:33;2961:53;;;3010:1;3007;3000:12;2961:53;3050:9;3037:23;3083:18;3075:6;3072:30;3069:50;;;3115:1;3112;3105:12;3069:50;3154:70;3216:7;3207:6;3196:9;3192:22;3154:70;:::i;:::-;3243:8;;-1:-1:-1;3128:96:201;-1:-1:-1;;3325:2:201;3310:18;;3297:32;;-1:-1:-1;3379:2:201;3364:18;;3351:32;3392:31;3351:32;3392:31;:::i;:::-;3442:5;-1:-1:-1;3499:2:201;3484:18;;3471:32;3512:33;3471:32;3512:33;:::i;:::-;3564:7;-1:-1:-1;3623:3:201;3608:19;;3595:33;3637;3595;3637;:::i;:::-;3689:7;3679:17;;;2778:924;;;;;;;;:::o;3707:572::-;3802:6;3810;3818;3871:2;3859:9;3850:7;3846:23;3842:32;3839:52;;;3887:1;3884;3877:12;3839:52;3927:9;3914:23;3960:18;3952:6;3949:30;3946:50;;;3992:1;3989;3982:12;3946:50;4031:70;4093:7;4084:6;4073:9;4069:22;4031:70;:::i;:::-;4120:8;;-1:-1:-1;4005:96:201;-1:-1:-1;;4205:2:201;4190:18;;4177:32;4218:31;4177:32;4218:31;:::i;:::-;4268:5;4258:15;;;3707:572;;;;;:::o;4284:484::-;4337:3;4375:5;4369:12;4402:6;4397:3;4390:19;4428:4;4457:2;4452:3;4448:12;4441:19;;4494:2;4487:5;4483:14;4515:1;4525:218;4539:6;4536:1;4533:13;4525:218;;;4604:13;;4619:42;4600:62;4588:75;;4683:12;;;;4718:15;;;;4561:1;4554:9;4525:218;;;-1:-1:-1;4759:3:201;;4284:484;-1:-1:-1;;;;;4284:484:201:o;4773:804::-;5030:2;5019:9;5012:21;4993:4;5056:56;5108:2;5097:9;5093:18;5085:6;5056:56;:::i;:::-;5169:22;;;5131:2;5149:18;;;5142:50;;;;5241:13;;5263:22;;;5339:15;;;;5301;;;5372:1;5382:169;5396:6;5393:1;5390:13;5382:169;;;5457:13;;5445:26;;5526:15;;;;5491:12;;;;5418:1;5411:9;5382:169;;;-1:-1:-1;5568:3:201;;4773:804;-1:-1:-1;;;;;;;4773:804:201:o;5582:529::-;5659:6;5667;5675;5728:2;5716:9;5707:7;5703:23;5699:32;5696:52;;;5744:1;5741;5734:12;5696:52;5783:9;5770:23;5802:31;5827:5;5802:31;:::i;:::-;5852:5;-1:-1:-1;5909:2:201;5894:18;;5881:32;5922:33;5881:32;5922:33;:::i;:::-;5974:7;-1:-1:-1;6033:2:201;6018:18;;6005:32;6046:33;6005:32;6046:33;:::i;6538:640::-;6642:6;6650;6658;6666;6719:2;6707:9;6698:7;6694:23;6690:32;6687:52;;;6735:1;6732;6725:12;6687:52;6775:9;6762:23;6808:18;6800:6;6797:30;6794:50;;;6840:1;6837;6830:12;6794:50;6879:70;6941:7;6932:6;6921:9;6917:22;6879:70;:::i;:::-;6968:8;;-1:-1:-1;6853:96:201;-1:-1:-1;;7050:2:201;7035:18;;7022:32;;-1:-1:-1;7104:2:201;7089:18;;7076:32;7117:31;7076:32;7117:31;:::i;:::-;6538:640;;;;-1:-1:-1;6538:640:201;;-1:-1:-1;;6538:640:201:o;7183:261::-;7362:2;7351:9;7344:21;7325:4;7382:56;7434:2;7423:9;7419:18;7411:6;7382:56;:::i;7449:713::-;7553:6;7561;7569;7577;7630:2;7618:9;7609:7;7605:23;7601:32;7598:52;;;7646:1;7643;7636:12;7598:52;7686:9;7673:23;7719:18;7711:6;7708:30;7705:50;;;7751:1;7748;7741:12;7705:50;7790:70;7852:7;7843:6;7832:9;7828:22;7790:70;:::i;:::-;7879:8;;-1:-1:-1;7764:96:201;-1:-1:-1;;7964:2:201;7949:18;;7936:32;7977:31;7936:32;7977:31;:::i;:::-;8027:5;-1:-1:-1;8084:2:201;8069:18;;8056:32;8097:33;8056:32;8097:33;:::i;8816:184::-;8868:77;8865:1;8858:88;8965:4;8962:1;8955:15;8989:4;8986:1;8979:15;9005:253;9077:2;9071:9;9119:4;9107:17;;9154:18;9139:34;;9175:22;;;9136:62;9133:88;;;9201:18;;:::i;:::-;9237:2;9230:22;9005:253;:::o;9263:334::-;9334:2;9328:9;9390:2;9380:13;;9395:66;9376:86;9364:99;;9493:18;9478:34;;9514:22;;;9475:62;9472:88;;;9540:18;;:::i;:::-;9576:2;9569:22;9263:334;;-1:-1:-1;9263:334:201:o;9602:177::-;9669:20;;9729:24;9718:36;;9708:47;;9698:75;;9769:1;9766;9759:12;9698:75;9602:177;;;:::o;9784:163::-;9851:20;;9911:10;9900:22;;9890:33;;9880:61;;9937:1;9934;9927:12;9952:2050;10073:6;10104:2;10147;10135:9;10126:7;10122:23;10118:32;10115:52;;;10163:1;10160;10153:12;10115:52;10203:9;10190:23;10232:18;10273:2;10265:6;10262:14;10259:34;;;10289:1;10286;10279:12;10259:34;10327:6;10316:9;10312:22;10302:32;;10372:7;10365:4;10361:2;10357:13;10353:27;10343:55;;10394:1;10391;10384:12;10343:55;10430:2;10417:16;10452:2;10448;10445:10;10442:36;;;10458:18;;:::i;:::-;10498:36;10530:2;10525;10522:1;10518:10;10514:19;10498:36;:::i;:::-;10568:15;;;10599:12;;;;-1:-1:-1;10630:4:201;10669:11;;;10661:20;;10657:29;;;10698:19;;;10695:39;;;10730:1;10727;10720:12;10695:39;10754:11;;;;10774:1198;10790:6;10785:3;10782:15;10774:1198;;;10870:2;10864:3;10855:7;10851:17;10847:26;10844:116;;;10914:1;10943:2;10939;10932:14;10844:116;10986:22;;:::i;:::-;11035;11053:3;11035:22;:::i;:::-;11028:5;11021:37;11116:2;11111:3;11107:12;11094:26;11089:2;11082:5;11078:14;11071:50;11144:2;11182:31;11209:2;11204:3;11200:12;11182:31;:::i;:::-;11166:14;;;11159:55;11237:2;11280:12;;;11267:26;11306:33;11267:26;11306:33;:::i;:::-;11359:14;;;11352:31;11406:3;11450:12;;;11437:26;11476:33;11437:26;11476:33;:::i;:::-;11529:14;;;11522:31;11577:3;11621:13;;;11608:27;11648:33;11608:27;11648:33;:::i;:::-;11701:15;;;11694:32;11750:3;11794:13;;;11781:27;11821:33;11781:27;11821:33;:::i;:::-;11874:15;;;11867:32;11912:18;;10807:12;;;;11950;;;;10774:1198;;;-1:-1:-1;11991:5:201;9952:2050;-1:-1:-1;;;;;;;9952:2050:201:o;12196:437::-;12282:6;12290;12343:2;12331:9;12322:7;12318:23;12314:32;12311:52;;;12359:1;12356;12349:12;12311:52;12399:9;12386:23;12432:18;12424:6;12421:30;12418:50;;;12464:1;12461;12454:12;12418:50;12503:70;12565:7;12556:6;12545:9;12541:22;12503:70;:::i;:::-;12592:8;;12477:96;;-1:-1:-1;12196:437:201;-1:-1:-1;;;;12196:437:201:o;12638:460::-;12714:6;12722;12730;12783:2;12771:9;12762:7;12758:23;12754:32;12751:52;;;12799:1;12796;12789:12;12751:52;12838:9;12825:23;12857:31;12882:5;12857:31;:::i;:::-;12907:5;-1:-1:-1;12964:2:201;12949:18;;12936:32;12977:33;12936:32;12977:33;:::i;:::-;13029:7;-1:-1:-1;13055:37:201;13088:2;13073:18;;13055:37;:::i;:::-;13045:47;;12638:460;;;;;:::o;13527:907::-;13657:6;13665;13673;13681;13689;13742:2;13730:9;13721:7;13717:23;13713:32;13710:52;;;13758:1;13755;13748:12;13710:52;13797:9;13784:23;13816:31;13841:5;13816:31;:::i;:::-;13866:5;-1:-1:-1;13922:2:201;13907:18;;13894:32;13945:18;13975:14;;;13972:34;;;14002:1;13999;13992:12;13972:34;14041:70;14103:7;14094:6;14083:9;14079:22;14041:70;:::i;:::-;14130:8;;-1:-1:-1;14015:96:201;-1:-1:-1;14218:2:201;14203:18;;14190:32;;-1:-1:-1;14234:16:201;;;14231:36;;;14263:1;14260;14253:12;14231:36;;14302:72;14366:7;14355:8;14344:9;14340:24;14302:72;:::i;:::-;13527:907;;;;-1:-1:-1;13527:907:201;;-1:-1:-1;14393:8:201;;14276:98;13527:907;-1:-1:-1;;;13527:907:201:o;15484:184::-;15536:77;15533:1;15526:88;15633:4;15630:1;15623:15;15657:4;15654:1;15647:15;15673:184;15725:77;15722:1;15715:88;15822:4;15819:1;15812:15;15846:4;15843:1;15836:15;15862:128;15902:3;15933:1;15929:6;15926:1;15923:13;15920:39;;;15939:18;;:::i;:::-;-1:-1:-1;15975:9:201;;15862:128::o;15995:195::-;16034:3;16065:66;16058:5;16055:77;16052:103;;;16135:18;;:::i;:::-;-1:-1:-1;16182:1:201;16171:13;;15995:195::o;16545:226::-;16584:3;16612:34;16681:2;16674:5;16670:14;16708:2;16699:7;16696:15;16693:41;;;16714:18;;:::i;:::-;16763:1;16750:15;;16545:226;-1:-1:-1;;;16545:226:201:o;16776:184::-;16846:6;16899:2;16887:9;16878:7;16874:23;16870:32;16867:52;;;16915:1;16912;16905:12;16867:52;-1:-1:-1;16938:16:201;;16776:184;-1:-1:-1;16776:184:201:o;16965:482::-;17054:1;17097:5;17054:1;17111:330;17132:7;17122:8;17119:21;17111:330;;;17251:4;17183:66;17179:77;17173:4;17170:87;17167:113;;;17260:18;;:::i;:::-;17310:7;17300:8;17296:22;17293:55;;;17330:16;;;;17293:55;17409:22;;;;17369:15;;;;17111:330;;;17115:3;16965:482;;;;;:::o;17452:866::-;17501:5;17531:8;17521:80;;-1:-1:-1;17572:1:201;17586:5;;17521:80;17620:4;17610:76;;-1:-1:-1;17657:1:201;17671:5;;17610:76;17702:4;17720:1;17715:59;;;;17788:1;17783:130;;;;17695:218;;17715:59;17745:1;17736:10;;17759:5;;;17783:130;17820:3;17810:8;17807:17;17804:43;;;17827:18;;:::i;:::-;-1:-1:-1;;17883:1:201;17869:16;;17898:5;;17695:218;;17997:2;17987:8;17984:16;17978:3;17972:4;17969:13;17965:36;17959:2;17949:8;17946:16;17941:2;17935:4;17932:12;17928:35;17925:77;17922:159;;;-1:-1:-1;18034:19:201;;;18066:5;;17922:159;18113:34;18138:8;18132:4;18113:34;:::i;:::-;18243:6;18175:66;18171:79;18162:7;18159:92;18156:118;;;18254:18;;:::i;:::-;18292:20;;17452:866;-1:-1:-1;;;17452:866:201:o;18323:140::-;18381:5;18410:47;18451:4;18441:8;18437:19;18431:4;18410:47;:::i;20159:131::-;20219:5;20248:36;20275:8;20269:4;20248:36;:::i;20295:184::-;20353:6;20406:2;20394:9;20385:7;20381:23;20377:32;20374:52;;;20422:1;20419;20412:12;20374:52;20445:28;20463:9;20445:28;:::i;21027:125::-;21067:4;21095:1;21092;21089:8;21086:34;;;21100:18;;:::i;:::-;-1:-1:-1;21137:9:201;;21027:125::o;21783:245::-;21862:6;21870;21923:2;21911:9;21902:7;21898:23;21894:32;21891:52;;;21939:1;21936;21929:12;21891:52;-1:-1:-1;;21962:16:201;;22018:2;22003:18;;;21997:25;21962:16;;21997:25;;-1:-1:-1;21783:245:201:o;22574:228::-;22614:7;22740:1;22672:66;22668:74;22665:1;22662:81;22657:1;22650:9;22643:17;22639:105;22636:131;;;22747:18;;:::i;:::-;-1:-1:-1;22787:9:201;;22574:228::o;23514:273::-;23582:6;23635:2;23623:9;23614:7;23610:23;23606:32;23603:52;;;23651:1;23648;23641:12;23603:52;23683:9;23677:16;23733:4;23726:5;23722:16;23715:5;23712:27;23702:55;;23753:1;23750;23743:12;25518:277;25585:6;25638:2;25626:9;25617:7;25613:23;25609:32;25606:52;;;25654:1;25651;25644:12;25606:52;25686:9;25680:16;25739:5;25732:13;25725:21;25718:5;25715:32;25705:60;;25761:1;25758;25751:12;26143:253;26183:3;26211:34;26272:2;26269:1;26265:10;26302:2;26299:1;26295:10;26333:3;26329:2;26325:12;26320:3;26317:21;26314:47;;;26341:18;;:::i;:::-;26377:13;;26143:253;-1:-1:-1;;;;26143:253:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"3729000","executionCost":"infinite","totalCost":"infinite"},"external":{"EMISSION_MANAGER()":"infinite","REVISION()":"228","claimAllRewards(address[],address)":"infinite","claimAllRewardsOnBehalf(address[],address,address)":"infinite","claimAllRewardsToSelf(address[])":"infinite","claimRewards(address[],uint256,address,address)":"infinite","claimRewardsOnBehalf(address[],uint256,address,address,address)":"infinite","claimRewardsToSelf(address[],uint256,address)":"infinite","configureAssets((uint88,uint256,uint32,address,address,address,address)[])":"infinite","getAllUserRewards(address[],address)":"infinite","getAssetDecimals(address)":"2629","getAssetIndex(address,address)":"infinite","getClaimer(address)":"2592","getDistributionEnd(address,address)":"infinite","getEmissionManager()":"infinite","getRewardOracle(address)":"2616","getRewardsByAsset(address)":"infinite","getRewardsData(address,address)":"infinite","getRewardsList()":"infinite","getTransferStrategy(address)":"2615","getUserAccruedRewards(address,address)":"infinite","getUserAssetIndex(address,address,address)":"infinite","getUserRewards(address[],address,address)":"infinite","handleAction(address,uint256,uint256)":"infinite","initialize(address)":"79934","setClaimer(address,address)":"infinite","setDistributionEnd(address,address,uint32)":"infinite","setEmissionPerSecond(address,address[],uint88[])":"infinite","setRewardOracle(address,address)":"infinite","setTransferStrategy(address,address)":"infinite"},"internal":{"_claimAllRewards(address[] calldata,address,address,address)":"infinite","_claimRewards(address[] calldata,uint256,address,address,address,address)":"infinite","_getUserAssetBalances(address[] calldata,address)":"infinite","_installTransferStrategy(address,contract ITransferStrategyBase)":"infinite","_isContract(address)":"infinite","_setRewardOracle(address,contract IEACAggregatorProxy)":"infinite","_transferRewards(address,address,uint256)":"infinite","getRevision()":"infinite"}},"methodIdentifiers":{"EMISSION_MANAGER()":"cbcbb507","REVISION()":"dde43cba","claimAllRewards(address[],address)":"bb492bf5","claimAllRewardsOnBehalf(address[],address,address)":"9ff55db9","claimAllRewardsToSelf(address[])":"bf90f63a","claimRewards(address[],uint256,address,address)":"236300dc","claimRewardsOnBehalf(address[],uint256,address,address,address)":"33028b99","claimRewardsToSelf(address[],uint256,address)":"57b89883","configureAssets((uint88,uint256,uint32,address,address,address,address)[])":"955c2ad7","getAllUserRewards(address[],address)":"4c0369c3","getAssetDecimals(address)":"9efd6f72","getAssetIndex(address,address)":"886fe70b","getClaimer(address)":"74d945ec","getDistributionEnd(address,address)":"1b839c77","getEmissionManager()":"92074b08","getRewardOracle(address)":"2a17bf60","getRewardsByAsset(address)":"6657732f","getRewardsData(address,address)":"7eff4ba8","getRewardsList()":"b45ac1a9","getTransferStrategy(address)":"5f130b24","getUserAccruedRewards(address,address)":"b022418c","getUserAssetIndex(address,address,address)":"533f542a","getUserRewards(address[],address,address)":"70674ab9","handleAction(address,uint256,uint256)":"31873e2e","initialize(address)":"c4d66de8","setClaimer(address,address)":"f5cf673b","setDistributionEnd(address,address,uint32)":"c5a7b538","setEmissionPerSecond(address,address[],uint88[])":"f996868b","setRewardOracle(address,address)":"5453ba10","setTransferStrategy(address,address)":"e15ac623"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"emissionManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assetIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"userIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewardsAccrued\",\"type\":\"uint256\"}],\"name\":\"Accrued\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldEmission\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newEmission\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldDistributionEnd\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newDistributionEnd\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assetIndex\",\"type\":\"uint256\"}],\"name\":\"AssetConfigUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"}],\"name\":\"ClaimerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rewardOracle\",\"type\":\"address\"}],\"name\":\"RewardOracleUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RewardsClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transferStrategy\",\"type\":\"address\"}],\"name\":\"TransferStrategyInstalled\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"EMISSION_MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"claimAllRewards\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"rewardsList\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"claimedAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"claimAllRewardsOnBehalf\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"rewardsList\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"claimedAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"}],\"name\":\"claimAllRewardsToSelf\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"rewardsList\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"claimedAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"claimRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"claimRewardsOnBehalf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"claimRewardsToSelf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint88\",\"name\":\"emissionPerSecond\",\"type\":\"uint88\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"distributionEnd\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"contract ITransferStrategyBase\",\"name\":\"transferStrategy\",\"type\":\"address\"},{\"internalType\":\"contract IEACAggregatorProxy\",\"name\":\"rewardOracle\",\"type\":\"address\"}],\"internalType\":\"struct RewardsDataTypes.RewardsConfigInput[]\",\"name\":\"config\",\"type\":\"tuple[]\"}],\"name\":\"configureAssets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getAllUserRewards\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"rewardsList\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"unclaimedAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getAssetDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getAssetIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getClaimer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getDistributionEnd\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEmissionManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getRewardOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getRewardsByAsset\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getRewardsData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardsList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getTransferStrategy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getUserAccruedRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getUserAssetIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getUserRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userBalance\",\"type\":\"uint256\"}],\"name\":\"handleAction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"setClaimer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"newDistributionEnd\",\"type\":\"uint32\"}],\"name\":\"setDistributionEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"rewards\",\"type\":\"address[]\"},{\"internalType\":\"uint88[]\",\"name\":\"newEmissionsPerSecond\",\"type\":\"uint88[]\"}],\"name\":\"setEmissionPerSecond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"contract IEACAggregatorProxy\",\"name\":\"rewardOracle\",\"type\":\"address\"}],\"name\":\"setRewardOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"contract ITransferStrategyBase\",\"name\":\"transferStrategy\",\"type\":\"address\"}],\"name\":\"setTransferStrategy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave*\",\"kind\":\"dev\",\"methods\":{\"claimAllRewards(address[],address)\":{\"details\":\"Claims all rewards for a user to the desired address, on all the assets of the pool, accumulating the pending rewards\",\"params\":{\"assets\":\"The list of assets to check eligible distributions before claiming rewards\",\"to\":\"The address that will be receiving the rewards\"},\"returns\":{\"claimedAmounts\":\"List that contains the claimed amount per reward, following same order as \\\"rewardList\\\"*\",\"rewardsList\":\"List of addresses of the reward tokens\"}},\"claimAllRewardsOnBehalf(address[],address,address)\":{\"details\":\"Claims all rewards for a user on behalf, on all the assets of the pool, accumulating the pending rewards. The caller must be whitelisted via \\\"allowClaimOnBehalf\\\" function by the RewardsAdmin role manager\",\"params\":{\"assets\":\"The list of assets to check eligible distributions before claiming rewards\",\"to\":\"The address that will be receiving the rewards\",\"user\":\"The address to check and claim rewards\"},\"returns\":{\"claimedAmounts\":\"List that contains the claimed amount per reward, following same order as \\\"rewardsList\\\"*\",\"rewardsList\":\"List of addresses of the reward tokens\"}},\"claimAllRewardsToSelf(address[])\":{\"details\":\"Claims all reward for msg.sender, on all the assets of the pool, accumulating the pending rewards\",\"params\":{\"assets\":\"The list of assets to check eligible distributions before claiming rewards\"},\"returns\":{\"claimedAmounts\":\"List that contains the claimed amount per reward, following same order as \\\"rewardsList\\\"*\",\"rewardsList\":\"List of addresses of the reward tokens\"}},\"claimRewards(address[],uint256,address,address)\":{\"details\":\"Claims reward for a user to the desired address, on all the assets of the pool, accumulating the pending rewards\",\"params\":{\"amount\":\"The amount of rewards to claim\",\"assets\":\"List of assets to check eligible distributions before claiming rewards\",\"reward\":\"The address of the reward token\",\"to\":\"The address that will be receiving the rewards\"},\"returns\":{\"_0\":\"The amount of rewards claimed*\"}},\"claimRewardsOnBehalf(address[],uint256,address,address,address)\":{\"details\":\"Claims reward for a user on behalf, on all the assets of the pool, accumulating the pending rewards. The caller must be whitelisted via \\\"allowClaimOnBehalf\\\" function by the RewardsAdmin role manager\",\"params\":{\"amount\":\"The amount of rewards to claim\",\"assets\":\"The list of assets to check eligible distributions before claiming rewards\",\"reward\":\"The address of the reward token\",\"to\":\"The address that will be receiving the rewards\",\"user\":\"The address to check and claim rewards\"},\"returns\":{\"_0\":\"The amount of rewards claimed*\"}},\"claimRewardsToSelf(address[],uint256,address)\":{\"details\":\"Claims reward for msg.sender, on all the assets of the pool, accumulating the pending rewards\",\"params\":{\"amount\":\"The amount of rewards to claim\",\"assets\":\"The list of assets to check eligible distributions before claiming rewards\",\"reward\":\"The address of the reward token\"},\"returns\":{\"_0\":\"The amount of rewards claimed*\"}},\"configureAssets((uint88,uint256,uint32,address,address,address,address)[])\":{\"details\":\"Configure assets to incentivize with an emission of rewards per second until the end of distribution.\",\"params\":{\"config\":\"The assets configuration input, the list of structs contains the following fields:   uint104 emissionPerSecond: The emission per second following rewards unit decimals.   uint256 totalSupply: The total supply of the asset to incentivize   uint40 distributionEnd: The end of the distribution of the incentives for an asset   address asset: The asset address to incentivize   address reward: The reward token address   ITransferStrategy transferStrategy: The TransferStrategy address with the install hook and claim logic.   IEACAggregatorProxy rewardOracle: The Price Oracle of a reward to visualize the incentives at the UI Frontend.                                     Must follow Chainlink Aggregator IEACAggregatorProxy interface to be compatible.\"}},\"getAllUserRewards(address[],address)\":{\"details\":\"Returns a list all rewards of a user, including already accrued and unrealized claimable rewards\",\"params\":{\"assets\":\"List of incentivized assets to check eligible distributions\",\"user\":\"The address of the user\"},\"returns\":{\"rewardsList\":\"The list of reward addresses\",\"unclaimedAmounts\":\"The list of unclaimed amount of rewards*\"}},\"getAssetDecimals(address)\":{\"details\":\"Returns the decimals of an asset to calculate the distribution delta\",\"params\":{\"asset\":\"The address to retrieve decimals\"},\"returns\":{\"_0\":\"The decimals of an underlying asset\"}},\"getAssetIndex(address,address)\":{\"details\":\"Calculates the next value of an specific distribution index, with validations.\",\"params\":{\"asset\":\"The incentivized asset\",\"reward\":\"The reward token of the incentivized asset\"},\"returns\":{\"_0\":\"The old index of the asset distribution\",\"_1\":\"The new index of the asset distribution*\"}},\"getClaimer(address)\":{\"details\":\"Returns the whitelisted claimer for a certain address (0x0 if not set)\",\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The claimer address\"}},\"getDistributionEnd(address,address)\":{\"details\":\"Gets the end date for the distribution\",\"params\":{\"asset\":\"The incentivized asset\",\"reward\":\"The reward token of the incentivized asset\"},\"returns\":{\"_0\":\"The timestamp with the end of the distribution, in unix time format*\"}},\"getEmissionManager()\":{\"details\":\"Returns the address of the emission manager. Deprecated: This getter is maintained for compatibility purposes. Use the `EMISSION_MANAGER()` function instead.\",\"returns\":{\"_0\":\"The address of the EmissionManager\"}},\"getRewardOracle(address)\":{\"details\":\"Get the price aggregator oracle address\",\"params\":{\"reward\":\"The address of the reward\"},\"returns\":{\"_0\":\"The price oracle of the reward\"}},\"getRewardsByAsset(address)\":{\"details\":\"Returns the list of available reward token addresses of an incentivized asset\",\"params\":{\"asset\":\"The incentivized asset\"},\"returns\":{\"_0\":\"List of rewards addresses of the input asset*\"}},\"getRewardsData(address,address)\":{\"details\":\"Returns the configuration of the distribution reward for a certain asset\",\"params\":{\"asset\":\"The incentivized asset\",\"reward\":\"The reward token of the incentivized asset\"},\"returns\":{\"_0\":\"The index of the asset distribution\",\"_1\":\"The emission per second of the reward distribution\",\"_2\":\"The timestamp of the last update of the index\",\"_3\":\"The timestamp of the distribution end*\"}},\"getRewardsList()\":{\"details\":\"Returns the list of available reward addresses\",\"returns\":{\"_0\":\"List of rewards supported in this contract*\"}},\"getTransferStrategy(address)\":{\"details\":\"Returns the Transfer Strategy implementation contract address being used for a reward address\",\"params\":{\"reward\":\"The address of the reward\"},\"returns\":{\"_0\":\"The address of the TransferStrategy contract\"}},\"getUserAccruedRewards(address,address)\":{\"details\":\"Returns the accrued rewards balance of a user, not including virtually accrued rewards since last distribution.\",\"params\":{\"reward\":\"The address of the reward token\",\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"Unclaimed rewards, not including new distributions*\"}},\"getUserAssetIndex(address,address,address)\":{\"details\":\"Returns the index of a user on a reward distribution\",\"params\":{\"asset\":\"The incentivized asset\",\"reward\":\"The reward token of the incentivized asset\",\"user\":\"Address of the user\"},\"returns\":{\"_0\":\"The current user asset index, not including new distributions*\"}},\"getUserRewards(address[],address,address)\":{\"details\":\"Returns a single rewards balance of a user, including virtually accrued and unrealized claimable rewards.\",\"params\":{\"assets\":\"List of incentivized assets to check eligible distributions\",\"reward\":\"The address of the reward token\",\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The rewards amount*\"}},\"handleAction(address,uint256,uint256)\":{\"details\":\"Called by the corresponding asset on transfer hook in order to update the rewards distribution.The units of `totalSupply` and `userBalance` should be the same.\",\"params\":{\"totalSupply\":\"The total supply of the asset prior to user balance change\",\"user\":\"The address of the user whose asset balance has changed\",\"userBalance\":\"The previous user balance prior to balance change*\"}},\"initialize(address)\":{\"details\":\"Initialize for RewardsControllerIt expects an address as argument since its initialized via PoolAddressesProvider._updateImpl()*\"},\"setClaimer(address,address)\":{\"details\":\"Whitelists an address to claim the rewards on behalf of another address\",\"params\":{\"claimer\":\"The address of the claimer\",\"user\":\"The address of the user\"}},\"setDistributionEnd(address,address,uint32)\":{\"details\":\"Sets the end date for the distribution\",\"params\":{\"asset\":\"The asset to incentivize\",\"newDistributionEnd\":\"The end date of the incentivization, in unix time format*\",\"reward\":\"The reward token that incentives the asset\"}},\"setEmissionPerSecond(address,address[],uint88[])\":{\"details\":\"Sets the emission per second of a set of reward distributions\",\"params\":{\"asset\":\"The asset is being incentivized\",\"newEmissionsPerSecond\":\"List of new reward emissions per second\",\"rewards\":\"List of reward addresses are being distributed\"}},\"setRewardOracle(address,address)\":{\"details\":\"Sets an Aave Oracle contract to enforce rewards with a source of value.\",\"params\":{\"reward\":\"The address of the reward to set the price aggregator\",\"rewardOracle\":\"The address of price aggregator that follows IEACAggregatorProxy interface\"}},\"setTransferStrategy(address,address)\":{\"details\":\"Sets a TransferStrategy logic contract that determines the logic of the rewards transfer\",\"params\":{\"reward\":\"The address of the reward token\",\"transferStrategy\":\"The address of the TransferStrategy logic contract\"}}},\"title\":\"RewardsController\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setRewardOracle(address,address)\":{\"notice\":\"At the moment of reward configuration, the Incentives Controller performs a check to see if the reward asset oracle is compatible with IEACAggregator proxy. This check is enforced for integrators to be able to show incentives at the current Aave UI without the need to setup an external price registry\"}},\"notice\":\"Abstract contract template to build Distributors contracts for ERC20 rewards to protocol participants\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/rewards/RewardsController.sol\":\"RewardsController\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"contracts/misc/interfaces/IEACAggregatorProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IEACAggregatorProxy {\\n  function decimals() external view returns (uint8);\\n\\n  function latestAnswer() external view returns (int256);\\n\\n  function latestTimestamp() external view returns (uint256);\\n\\n  function latestRound() external view returns (uint256);\\n\\n  function getAnswer(uint256 roundId) external view returns (int256);\\n\\n  function getTimestamp(uint256 roundId) external view returns (uint256);\\n\\n  event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 timestamp);\\n  event NewRound(uint256 indexed roundId, address indexed startedBy);\\n}\\n\",\"keccak256\":\"0x75bb34641419925730f87eeb122521b34cfd953b800212c362770ed1c7c5d719\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/RewardsController.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {VersionedInitializable} from '@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {SafeCast} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IScaledBalanceToken} from '@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol';\\nimport {RewardsDistributor} from './RewardsDistributor.sol';\\nimport {IRewardsController} from './interfaces/IRewardsController.sol';\\nimport {ITransferStrategyBase} from './interfaces/ITransferStrategyBase.sol';\\nimport {RewardsDataTypes} from './libraries/RewardsDataTypes.sol';\\nimport {IEACAggregatorProxy} from '../misc/interfaces/IEACAggregatorProxy.sol';\\n\\n/**\\n * @title RewardsController\\n * @notice Abstract contract template to build Distributors contracts for ERC20 rewards to protocol participants\\n * @author Aave\\n **/\\ncontract RewardsController is RewardsDistributor, VersionedInitializable, IRewardsController {\\n  using SafeCast for uint256;\\n\\n  uint256 public constant REVISION = 1;\\n\\n  // This mapping allows whitelisted addresses to claim on behalf of others\\n  // useful for contracts that hold tokens to be rewarded but don't have any native logic to claim Liquidity Mining rewards\\n  mapping(address => address) internal _authorizedClaimers;\\n\\n  // reward => transfer strategy implementation contract\\n  // The TransferStrategy contract abstracts the logic regarding\\n  // the source of the reward and how to transfer it to the user.\\n  mapping(address => ITransferStrategyBase) internal _transferStrategy;\\n\\n  // This mapping contains the price oracle per reward.\\n  // A price oracle is enforced for integrators to be able to show incentives at\\n  // the current Aave UI without the need to setup an external price registry\\n  // At the moment of reward configuration, the Incentives Controller performs\\n  // a check to see if the provided reward oracle contains `latestAnswer`.\\n  mapping(address => IEACAggregatorProxy) internal _rewardOracle;\\n\\n  modifier onlyAuthorizedClaimers(address claimer, address user) {\\n    require(_authorizedClaimers[user] == claimer, 'CLAIMER_UNAUTHORIZED');\\n    _;\\n  }\\n\\n  constructor(address emissionManager) RewardsDistributor(emissionManager) {}\\n\\n  /**\\n   * @dev Initialize for RewardsController\\n   * @dev It expects an address as argument since its initialized via PoolAddressesProvider._updateImpl()\\n   **/\\n  function initialize(address) external initializer {}\\n\\n  /// @inheritdoc IRewardsController\\n  function getClaimer(address user) external view override returns (address) {\\n    return _authorizedClaimers[user];\\n  }\\n\\n  /**\\n   * @dev Returns the revision of the implementation contract\\n   * @return uint256, current revision version\\n   */\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  /// @inheritdoc IRewardsController\\n  function getRewardOracle(address reward) external view override returns (address) {\\n    return address(_rewardOracle[reward]);\\n  }\\n\\n  /// @inheritdoc IRewardsController\\n  function getTransferStrategy(address reward) external view override returns (address) {\\n    return address(_transferStrategy[reward]);\\n  }\\n\\n  /// @inheritdoc IRewardsController\\n  function configureAssets(\\n    RewardsDataTypes.RewardsConfigInput[] memory config\\n  ) external override onlyEmissionManager {\\n    for (uint256 i = 0; i < config.length; i++) {\\n      // Get the current Scaled Total Supply of AToken or Debt token\\n      config[i].totalSupply = IScaledBalanceToken(config[i].asset).scaledTotalSupply();\\n\\n      // Install TransferStrategy logic at IncentivesController\\n      _installTransferStrategy(config[i].reward, config[i].transferStrategy);\\n\\n      // Set reward oracle, enforces input oracle to have latestPrice function\\n      _setRewardOracle(config[i].reward, config[i].rewardOracle);\\n    }\\n    _configureAssets(config);\\n  }\\n\\n  /// @inheritdoc IRewardsController\\n  function setTransferStrategy(\\n    address reward,\\n    ITransferStrategyBase transferStrategy\\n  ) external onlyEmissionManager {\\n    _installTransferStrategy(reward, transferStrategy);\\n  }\\n\\n  /// @inheritdoc IRewardsController\\n  function setRewardOracle(\\n    address reward,\\n    IEACAggregatorProxy rewardOracle\\n  ) external onlyEmissionManager {\\n    _setRewardOracle(reward, rewardOracle);\\n  }\\n\\n  /// @inheritdoc IRewardsController\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external override {\\n    _updateData(msg.sender, user, userBalance, totalSupply);\\n  }\\n\\n  /// @inheritdoc IRewardsController\\n  function claimRewards(\\n    address[] calldata assets,\\n    uint256 amount,\\n    address to,\\n    address reward\\n  ) external override returns (uint256) {\\n    require(to != address(0), 'INVALID_TO_ADDRESS');\\n    return _claimRewards(assets, amount, msg.sender, msg.sender, to, reward);\\n  }\\n\\n  /// @inheritdoc IRewardsController\\n  function claimRewardsOnBehalf(\\n    address[] calldata assets,\\n    uint256 amount,\\n    address user,\\n    address to,\\n    address reward\\n  ) external override onlyAuthorizedClaimers(msg.sender, user) returns (uint256) {\\n    require(user != address(0), 'INVALID_USER_ADDRESS');\\n    require(to != address(0), 'INVALID_TO_ADDRESS');\\n    return _claimRewards(assets, amount, msg.sender, user, to, reward);\\n  }\\n\\n  /// @inheritdoc IRewardsController\\n  function claimRewardsToSelf(\\n    address[] calldata assets,\\n    uint256 amount,\\n    address reward\\n  ) external override returns (uint256) {\\n    return _claimRewards(assets, amount, msg.sender, msg.sender, msg.sender, reward);\\n  }\\n\\n  /// @inheritdoc IRewardsController\\n  function claimAllRewards(\\n    address[] calldata assets,\\n    address to\\n  ) external override returns (address[] memory rewardsList, uint256[] memory claimedAmounts) {\\n    require(to != address(0), 'INVALID_TO_ADDRESS');\\n    return _claimAllRewards(assets, msg.sender, msg.sender, to);\\n  }\\n\\n  /// @inheritdoc IRewardsController\\n  function claimAllRewardsOnBehalf(\\n    address[] calldata assets,\\n    address user,\\n    address to\\n  )\\n    external\\n    override\\n    onlyAuthorizedClaimers(msg.sender, user)\\n    returns (address[] memory rewardsList, uint256[] memory claimedAmounts)\\n  {\\n    require(user != address(0), 'INVALID_USER_ADDRESS');\\n    require(to != address(0), 'INVALID_TO_ADDRESS');\\n    return _claimAllRewards(assets, msg.sender, user, to);\\n  }\\n\\n  /// @inheritdoc IRewardsController\\n  function claimAllRewardsToSelf(\\n    address[] calldata assets\\n  ) external override returns (address[] memory rewardsList, uint256[] memory claimedAmounts) {\\n    return _claimAllRewards(assets, msg.sender, msg.sender, msg.sender);\\n  }\\n\\n  /// @inheritdoc IRewardsController\\n  function setClaimer(address user, address caller) external override onlyEmissionManager {\\n    _authorizedClaimers[user] = caller;\\n    emit ClaimerSet(user, caller);\\n  }\\n\\n  /**\\n   * @dev Get user balances and total supply of all the assets specified by the assets parameter\\n   * @param assets List of assets to retrieve user balance and total supply\\n   * @param user Address of the user\\n   * @return userAssetBalances contains a list of structs with user balance and total supply of the given assets\\n   */\\n  function _getUserAssetBalances(\\n    address[] calldata assets,\\n    address user\\n  ) internal view override returns (RewardsDataTypes.UserAssetBalance[] memory userAssetBalances) {\\n    userAssetBalances = new RewardsDataTypes.UserAssetBalance[](assets.length);\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      userAssetBalances[i].asset = assets[i];\\n      (userAssetBalances[i].userBalance, userAssetBalances[i].totalSupply) = IScaledBalanceToken(\\n        assets[i]\\n      ).getScaledUserBalanceAndSupply(user);\\n    }\\n    return userAssetBalances;\\n  }\\n\\n  /**\\n   * @dev Claims one type of reward for a user on behalf, on all the assets of the pool, accumulating the pending rewards.\\n   * @param assets List of assets to check eligible distributions before claiming rewards\\n   * @param amount Amount of rewards to claim\\n   * @param claimer Address of the claimer who claims rewards on behalf of user\\n   * @param user Address to check and claim rewards\\n   * @param to Address that will be receiving the rewards\\n   * @param reward Address of the reward token\\n   * @return Rewards claimed\\n   **/\\n  function _claimRewards(\\n    address[] calldata assets,\\n    uint256 amount,\\n    address claimer,\\n    address user,\\n    address to,\\n    address reward\\n  ) internal returns (uint256) {\\n    if (amount == 0) {\\n      return 0;\\n    }\\n    uint256 totalRewards;\\n\\n    _updateDataMultiple(user, _getUserAssetBalances(assets, user));\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      address asset = assets[i];\\n      totalRewards += _assets[asset].rewards[reward].usersData[user].accrued;\\n\\n      if (totalRewards <= amount) {\\n        _assets[asset].rewards[reward].usersData[user].accrued = 0;\\n      } else {\\n        uint256 difference = totalRewards - amount;\\n        totalRewards -= difference;\\n        _assets[asset].rewards[reward].usersData[user].accrued = difference.toUint128();\\n        break;\\n      }\\n    }\\n\\n    if (totalRewards == 0) {\\n      return 0;\\n    }\\n\\n    _transferRewards(to, reward, totalRewards);\\n    emit RewardsClaimed(user, reward, to, claimer, totalRewards);\\n\\n    return totalRewards;\\n  }\\n\\n  /**\\n   * @dev Claims one type of reward for a user on behalf, on all the assets of the pool, accumulating the pending rewards.\\n   * @param assets List of assets to check eligible distributions before claiming rewards\\n   * @param claimer Address of the claimer on behalf of user\\n   * @param user Address to check and claim rewards\\n   * @param to Address that will be receiving the rewards\\n   * @return\\n   *   rewardsList List of reward addresses\\n   *   claimedAmount List of claimed amounts, follows \\\"rewardsList\\\" items order\\n   **/\\n  function _claimAllRewards(\\n    address[] calldata assets,\\n    address claimer,\\n    address user,\\n    address to\\n  ) internal returns (address[] memory rewardsList, uint256[] memory claimedAmounts) {\\n    uint256 rewardsListLength = _rewardsList.length;\\n    rewardsList = new address[](rewardsListLength);\\n    claimedAmounts = new uint256[](rewardsListLength);\\n\\n    _updateDataMultiple(user, _getUserAssetBalances(assets, user));\\n\\n    for (uint256 i = 0; i < assets.length; i++) {\\n      address asset = assets[i];\\n      for (uint256 j = 0; j < rewardsListLength; j++) {\\n        if (rewardsList[j] == address(0)) {\\n          rewardsList[j] = _rewardsList[j];\\n        }\\n        uint256 rewardAmount = _assets[asset].rewards[rewardsList[j]].usersData[user].accrued;\\n        if (rewardAmount != 0) {\\n          claimedAmounts[j] += rewardAmount;\\n          _assets[asset].rewards[rewardsList[j]].usersData[user].accrued = 0;\\n        }\\n      }\\n    }\\n    for (uint256 i = 0; i < rewardsListLength; i++) {\\n      _transferRewards(to, rewardsList[i], claimedAmounts[i]);\\n      emit RewardsClaimed(user, rewardsList[i], to, claimer, claimedAmounts[i]);\\n    }\\n    return (rewardsList, claimedAmounts);\\n  }\\n\\n  /**\\n   * @dev Function to transfer rewards to the desired account using delegatecall and\\n   * @param to Account address to send the rewards\\n   * @param reward Address of the reward token\\n   * @param amount Amount of rewards to transfer\\n   */\\n  function _transferRewards(address to, address reward, uint256 amount) internal {\\n    ITransferStrategyBase transferStrategy = _transferStrategy[reward];\\n\\n    bool success = transferStrategy.performTransfer(to, reward, amount);\\n\\n    require(success == true, 'TRANSFER_ERROR');\\n  }\\n\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   * @param account The address of the account\\n   * @return bool, true if contract, false otherwise\\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  /**\\n   * @dev Internal function to call the optional install hook at the TransferStrategy\\n   * @param reward The address of the reward token\\n   * @param transferStrategy The address of the reward TransferStrategy\\n   */\\n  function _installTransferStrategy(\\n    address reward,\\n    ITransferStrategyBase transferStrategy\\n  ) internal {\\n    require(address(transferStrategy) != address(0), 'STRATEGY_CAN_NOT_BE_ZERO');\\n    require(_isContract(address(transferStrategy)) == true, 'STRATEGY_MUST_BE_CONTRACT');\\n\\n    _transferStrategy[reward] = transferStrategy;\\n\\n    emit TransferStrategyInstalled(reward, address(transferStrategy));\\n  }\\n\\n  /**\\n   * @dev Update the Price Oracle of a reward token. The Price Oracle must follow Chainlink IEACAggregatorProxy interface.\\n   * @notice The Price Oracle of a reward is used for displaying correct data about the incentives at the UI frontend.\\n   * @param reward The address of the reward token\\n   * @param rewardOracle The address of the price oracle\\n   */\\n\\n  function _setRewardOracle(address reward, IEACAggregatorProxy rewardOracle) internal {\\n    require(rewardOracle.latestAnswer() > 0, 'ORACLE_MUST_RETURN_PRICE');\\n    _rewardOracle[reward] = rewardOracle;\\n    emit RewardOracleUpdated(reward, address(rewardOracle));\\n  }\\n}\\n\",\"keccak256\":\"0x8c7ba6abe03da0140d427575737543a9cebc305e794d6e449df47c371a1f9c2f\",\"license\":\"BUSL-1.1\"},\"contracts/rewards/RewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IScaledBalanceToken} from '@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol';\\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IRewardsDistributor} from './interfaces/IRewardsDistributor.sol';\\nimport {RewardsDataTypes} from './libraries/RewardsDataTypes.sol';\\n\\n/**\\n * @title RewardsDistributor\\n * @notice Accounting contract to manage multiple staking distributions with multiple rewards\\n * @author Aave\\n **/\\nabstract contract RewardsDistributor is IRewardsDistributor {\\n  using SafeCast for uint256;\\n\\n  // Manager of incentives\\n  address public immutable EMISSION_MANAGER;\\n  // Deprecated: This storage slot is kept for backwards compatibility purposes.\\n  address internal _emissionManager;\\n\\n  // Map of rewarded asset addresses and their data (assetAddress => assetData)\\n  mapping(address => RewardsDataTypes.AssetData) internal _assets;\\n\\n  // Map of reward assets (rewardAddress => enabled)\\n  mapping(address => bool) internal _isRewardEnabled;\\n\\n  // Rewards list\\n  address[] internal _rewardsList;\\n\\n  // Assets list\\n  address[] internal _assetsList;\\n\\n  modifier onlyEmissionManager() {\\n    require(msg.sender == EMISSION_MANAGER, 'ONLY_EMISSION_MANAGER');\\n    _;\\n  }\\n\\n  constructor(address emissionManager) {\\n    EMISSION_MANAGER = emissionManager;\\n  }\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function getRewardsData(\\n    address asset,\\n    address reward\\n  ) public view override returns (uint256, uint256, uint256, uint256) {\\n    return (\\n      _assets[asset].rewards[reward].index,\\n      _assets[asset].rewards[reward].emissionPerSecond,\\n      _assets[asset].rewards[reward].lastUpdateTimestamp,\\n      _assets[asset].rewards[reward].distributionEnd\\n    );\\n  }\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function getAssetIndex(\\n    address asset,\\n    address reward\\n  ) external view override returns (uint256, uint256) {\\n    RewardsDataTypes.RewardData storage rewardData = _assets[asset].rewards[reward];\\n    return\\n      _getAssetIndex(\\n        rewardData,\\n        IScaledBalanceToken(asset).scaledTotalSupply(),\\n        10 ** _assets[asset].decimals\\n      );\\n  }\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function getDistributionEnd(\\n    address asset,\\n    address reward\\n  ) external view override returns (uint256) {\\n    return _assets[asset].rewards[reward].distributionEnd;\\n  }\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function getRewardsByAsset(address asset) external view override returns (address[] memory) {\\n    uint128 rewardsCount = _assets[asset].availableRewardsCount;\\n    address[] memory availableRewards = new address[](rewardsCount);\\n\\n    for (uint128 i = 0; i < rewardsCount; i++) {\\n      availableRewards[i] = _assets[asset].availableRewards[i];\\n    }\\n    return availableRewards;\\n  }\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function getRewardsList() external view override returns (address[] memory) {\\n    return _rewardsList;\\n  }\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function getUserAssetIndex(\\n    address user,\\n    address asset,\\n    address reward\\n  ) public view override returns (uint256) {\\n    return _assets[asset].rewards[reward].usersData[user].index;\\n  }\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function getUserAccruedRewards(\\n    address user,\\n    address reward\\n  ) external view override returns (uint256) {\\n    uint256 totalAccrued;\\n    for (uint256 i = 0; i < _assetsList.length; i++) {\\n      totalAccrued += _assets[_assetsList[i]].rewards[reward].usersData[user].accrued;\\n    }\\n\\n    return totalAccrued;\\n  }\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function getUserRewards(\\n    address[] calldata assets,\\n    address user,\\n    address reward\\n  ) external view override returns (uint256) {\\n    return _getUserReward(user, reward, _getUserAssetBalances(assets, user));\\n  }\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function getAllUserRewards(\\n    address[] calldata assets,\\n    address user\\n  )\\n    external\\n    view\\n    override\\n    returns (address[] memory rewardsList, uint256[] memory unclaimedAmounts)\\n  {\\n    RewardsDataTypes.UserAssetBalance[] memory userAssetBalances = _getUserAssetBalances(\\n      assets,\\n      user\\n    );\\n    rewardsList = new address[](_rewardsList.length);\\n    unclaimedAmounts = new uint256[](rewardsList.length);\\n\\n    // Add unrealized rewards from user to unclaimedRewards\\n    for (uint256 i = 0; i < userAssetBalances.length; i++) {\\n      for (uint256 r = 0; r < rewardsList.length; r++) {\\n        rewardsList[r] = _rewardsList[r];\\n        unclaimedAmounts[r] += _assets[userAssetBalances[i].asset]\\n          .rewards[rewardsList[r]]\\n          .usersData[user]\\n          .accrued;\\n\\n        if (userAssetBalances[i].userBalance == 0) {\\n          continue;\\n        }\\n        unclaimedAmounts[r] += _getPendingRewards(user, rewardsList[r], userAssetBalances[i]);\\n      }\\n    }\\n    return (rewardsList, unclaimedAmounts);\\n  }\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function setDistributionEnd(\\n    address asset,\\n    address reward,\\n    uint32 newDistributionEnd\\n  ) external override onlyEmissionManager {\\n    uint256 oldDistributionEnd = _assets[asset].rewards[reward].distributionEnd;\\n    _assets[asset].rewards[reward].distributionEnd = newDistributionEnd;\\n\\n    emit AssetConfigUpdated(\\n      asset,\\n      reward,\\n      _assets[asset].rewards[reward].emissionPerSecond,\\n      _assets[asset].rewards[reward].emissionPerSecond,\\n      oldDistributionEnd,\\n      newDistributionEnd,\\n      _assets[asset].rewards[reward].index\\n    );\\n  }\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function setEmissionPerSecond(\\n    address asset,\\n    address[] calldata rewards,\\n    uint88[] calldata newEmissionsPerSecond\\n  ) external override onlyEmissionManager {\\n    require(rewards.length == newEmissionsPerSecond.length, 'INVALID_INPUT');\\n    for (uint256 i = 0; i < rewards.length; i++) {\\n      RewardsDataTypes.AssetData storage assetConfig = _assets[asset];\\n      RewardsDataTypes.RewardData storage rewardConfig = _assets[asset].rewards[rewards[i]];\\n      uint256 decimals = assetConfig.decimals;\\n      require(\\n        decimals != 0 && rewardConfig.lastUpdateTimestamp != 0,\\n        'DISTRIBUTION_DOES_NOT_EXIST'\\n      );\\n\\n      (uint256 newIndex, ) = _updateRewardData(\\n        rewardConfig,\\n        IScaledBalanceToken(asset).scaledTotalSupply(),\\n        10 ** decimals\\n      );\\n\\n      uint256 oldEmissionPerSecond = rewardConfig.emissionPerSecond;\\n      rewardConfig.emissionPerSecond = newEmissionsPerSecond[i];\\n\\n      emit AssetConfigUpdated(\\n        asset,\\n        rewards[i],\\n        oldEmissionPerSecond,\\n        newEmissionsPerSecond[i],\\n        rewardConfig.distributionEnd,\\n        rewardConfig.distributionEnd,\\n        newIndex\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @dev Configure the _assets for a specific emission\\n   * @param rewardsInput The array of each asset configuration\\n   **/\\n  function _configureAssets(RewardsDataTypes.RewardsConfigInput[] memory rewardsInput) internal {\\n    for (uint256 i = 0; i < rewardsInput.length; i++) {\\n      if (_assets[rewardsInput[i].asset].decimals == 0) {\\n        //never initialized before, adding to the list of assets\\n        _assetsList.push(rewardsInput[i].asset);\\n      }\\n\\n      uint256 decimals = _assets[rewardsInput[i].asset].decimals = IERC20Detailed(\\n        rewardsInput[i].asset\\n      ).decimals();\\n\\n      RewardsDataTypes.RewardData storage rewardConfig = _assets[rewardsInput[i].asset].rewards[\\n        rewardsInput[i].reward\\n      ];\\n\\n      // Add reward address to asset available rewards if latestUpdateTimestamp is zero\\n      if (rewardConfig.lastUpdateTimestamp == 0) {\\n        _assets[rewardsInput[i].asset].availableRewards[\\n          _assets[rewardsInput[i].asset].availableRewardsCount\\n        ] = rewardsInput[i].reward;\\n        _assets[rewardsInput[i].asset].availableRewardsCount++;\\n      }\\n\\n      // Add reward address to global rewards list if still not enabled\\n      if (_isRewardEnabled[rewardsInput[i].reward] == false) {\\n        _isRewardEnabled[rewardsInput[i].reward] = true;\\n        _rewardsList.push(rewardsInput[i].reward);\\n      }\\n\\n      // Due emissions is still zero, updates only latestUpdateTimestamp\\n      (uint256 newIndex, ) = _updateRewardData(\\n        rewardConfig,\\n        rewardsInput[i].totalSupply,\\n        10 ** decimals\\n      );\\n\\n      // Configure emission and distribution end of the reward per asset\\n      uint88 oldEmissionsPerSecond = rewardConfig.emissionPerSecond;\\n      uint32 oldDistributionEnd = rewardConfig.distributionEnd;\\n      rewardConfig.emissionPerSecond = rewardsInput[i].emissionPerSecond;\\n      rewardConfig.distributionEnd = rewardsInput[i].distributionEnd;\\n\\n      emit AssetConfigUpdated(\\n        rewardsInput[i].asset,\\n        rewardsInput[i].reward,\\n        oldEmissionsPerSecond,\\n        rewardsInput[i].emissionPerSecond,\\n        oldDistributionEnd,\\n        rewardsInput[i].distributionEnd,\\n        newIndex\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @dev Updates the state of the distribution for the specified reward\\n   * @param rewardData Storage pointer to the distribution reward config\\n   * @param totalSupply Current total of underlying assets for this distribution\\n   * @param assetUnit One unit of asset (10**decimals)\\n   * @return The new distribution index\\n   * @return True if the index was updated, false otherwise\\n   **/\\n  function _updateRewardData(\\n    RewardsDataTypes.RewardData storage rewardData,\\n    uint256 totalSupply,\\n    uint256 assetUnit\\n  ) internal returns (uint256, bool) {\\n    (uint256 oldIndex, uint256 newIndex) = _getAssetIndex(rewardData, totalSupply, assetUnit);\\n    bool indexUpdated;\\n    if (newIndex != oldIndex) {\\n      require(newIndex <= type(uint104).max, 'INDEX_OVERFLOW');\\n      indexUpdated = true;\\n\\n      //optimization: storing one after another saves one SSTORE\\n      rewardData.index = uint104(newIndex);\\n      rewardData.lastUpdateTimestamp = block.timestamp.toUint32();\\n    } else {\\n      rewardData.lastUpdateTimestamp = block.timestamp.toUint32();\\n    }\\n\\n    return (newIndex, indexUpdated);\\n  }\\n\\n  /**\\n   * @dev Updates the state of the distribution for the specific user\\n   * @param rewardData Storage pointer to the distribution reward config\\n   * @param user The address of the user\\n   * @param userBalance The user balance of the asset\\n   * @param newAssetIndex The new index of the asset distribution\\n   * @param assetUnit One unit of asset (10**decimals)\\n   * @return The rewards accrued since the last update\\n   **/\\n  function _updateUserData(\\n    RewardsDataTypes.RewardData storage rewardData,\\n    address user,\\n    uint256 userBalance,\\n    uint256 newAssetIndex,\\n    uint256 assetUnit\\n  ) internal returns (uint256, bool) {\\n    uint256 userIndex = rewardData.usersData[user].index;\\n    uint256 rewardsAccrued;\\n    bool dataUpdated;\\n    if ((dataUpdated = userIndex != newAssetIndex)) {\\n      // already checked for overflow in _updateRewardData\\n      rewardData.usersData[user].index = uint104(newAssetIndex);\\n      if (userBalance != 0) {\\n        rewardsAccrued = _getRewards(userBalance, newAssetIndex, userIndex, assetUnit);\\n\\n        rewardData.usersData[user].accrued += rewardsAccrued.toUint128();\\n      }\\n    }\\n    return (rewardsAccrued, dataUpdated);\\n  }\\n\\n  /**\\n   * @dev Iterates and accrues all the rewards for asset of the specific user\\n   * @param asset The address of the reference asset of the distribution\\n   * @param user The user address\\n   * @param userBalance The current user asset balance\\n   * @param totalSupply Total supply of the asset\\n   **/\\n  function _updateData(\\n    address asset,\\n    address user,\\n    uint256 userBalance,\\n    uint256 totalSupply\\n  ) internal {\\n    uint256 assetUnit;\\n    uint256 numAvailableRewards = _assets[asset].availableRewardsCount;\\n    unchecked {\\n      assetUnit = 10 ** _assets[asset].decimals;\\n    }\\n\\n    if (numAvailableRewards == 0) {\\n      return;\\n    }\\n    unchecked {\\n      for (uint128 r = 0; r < numAvailableRewards; r++) {\\n        address reward = _assets[asset].availableRewards[r];\\n        RewardsDataTypes.RewardData storage rewardData = _assets[asset].rewards[reward];\\n\\n        (uint256 newAssetIndex, bool rewardDataUpdated) = _updateRewardData(\\n          rewardData,\\n          totalSupply,\\n          assetUnit\\n        );\\n\\n        (uint256 rewardsAccrued, bool userDataUpdated) = _updateUserData(\\n          rewardData,\\n          user,\\n          userBalance,\\n          newAssetIndex,\\n          assetUnit\\n        );\\n\\n        if (rewardDataUpdated || userDataUpdated) {\\n          emit Accrued(asset, reward, user, newAssetIndex, newAssetIndex, rewardsAccrued);\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Accrues all the rewards of the assets specified in the userAssetBalances list\\n   * @param user The address of the user\\n   * @param userAssetBalances List of structs with the user balance and total supply of a set of assets\\n   **/\\n  function _updateDataMultiple(\\n    address user,\\n    RewardsDataTypes.UserAssetBalance[] memory userAssetBalances\\n  ) internal {\\n    for (uint256 i = 0; i < userAssetBalances.length; i++) {\\n      _updateData(\\n        userAssetBalances[i].asset,\\n        user,\\n        userAssetBalances[i].userBalance,\\n        userAssetBalances[i].totalSupply\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @dev Return the accrued unclaimed amount of a reward from a user over a list of distribution\\n   * @param user The address of the user\\n   * @param reward The address of the reward token\\n   * @param userAssetBalances List of structs with the user balance and total supply of a set of assets\\n   * @return unclaimedRewards The accrued rewards for the user until the moment\\n   **/\\n  function _getUserReward(\\n    address user,\\n    address reward,\\n    RewardsDataTypes.UserAssetBalance[] memory userAssetBalances\\n  ) internal view returns (uint256 unclaimedRewards) {\\n    // Add unrealized rewards\\n    for (uint256 i = 0; i < userAssetBalances.length; i++) {\\n      if (userAssetBalances[i].userBalance == 0) {\\n        unclaimedRewards += _assets[userAssetBalances[i].asset]\\n          .rewards[reward]\\n          .usersData[user]\\n          .accrued;\\n      } else {\\n        unclaimedRewards +=\\n          _getPendingRewards(user, reward, userAssetBalances[i]) +\\n          _assets[userAssetBalances[i].asset].rewards[reward].usersData[user].accrued;\\n      }\\n    }\\n\\n    return unclaimedRewards;\\n  }\\n\\n  /**\\n   * @dev Calculates the pending (not yet accrued) rewards since the last user action\\n   * @param user The address of the user\\n   * @param reward The address of the reward token\\n   * @param userAssetBalance struct with the user balance and total supply of the incentivized asset\\n   * @return The pending rewards for the user since the last user action\\n   **/\\n  function _getPendingRewards(\\n    address user,\\n    address reward,\\n    RewardsDataTypes.UserAssetBalance memory userAssetBalance\\n  ) internal view returns (uint256) {\\n    RewardsDataTypes.RewardData storage rewardData = _assets[userAssetBalance.asset].rewards[\\n      reward\\n    ];\\n    uint256 assetUnit = 10 ** _assets[userAssetBalance.asset].decimals;\\n    (, uint256 nextIndex) = _getAssetIndex(rewardData, userAssetBalance.totalSupply, assetUnit);\\n\\n    return\\n      _getRewards(\\n        userAssetBalance.userBalance,\\n        nextIndex,\\n        rewardData.usersData[user].index,\\n        assetUnit\\n      );\\n  }\\n\\n  /**\\n   * @dev Internal function for the calculation of user's rewards on a distribution\\n   * @param userBalance Balance of the user asset on a distribution\\n   * @param reserveIndex Current index of the distribution\\n   * @param userIndex Index stored for the user, representation his staking moment\\n   * @param assetUnit One unit of asset (10**decimals)\\n   * @return The rewards\\n   **/\\n  function _getRewards(\\n    uint256 userBalance,\\n    uint256 reserveIndex,\\n    uint256 userIndex,\\n    uint256 assetUnit\\n  ) internal pure returns (uint256) {\\n    uint256 result = userBalance * (reserveIndex - userIndex);\\n    assembly {\\n      result := div(result, assetUnit)\\n    }\\n    return result;\\n  }\\n\\n  /**\\n   * @dev Calculates the next value of an specific distribution index, with validations\\n   * @param rewardData Storage pointer to the distribution reward config\\n   * @param totalSupply of the asset being rewarded\\n   * @param assetUnit One unit of asset (10**decimals)\\n   * @return The new index.\\n   **/\\n  function _getAssetIndex(\\n    RewardsDataTypes.RewardData storage rewardData,\\n    uint256 totalSupply,\\n    uint256 assetUnit\\n  ) internal view returns (uint256, uint256) {\\n    uint256 oldIndex = rewardData.index;\\n    uint256 distributionEnd = rewardData.distributionEnd;\\n    uint256 emissionPerSecond = rewardData.emissionPerSecond;\\n    uint256 lastUpdateTimestamp = rewardData.lastUpdateTimestamp;\\n\\n    if (\\n      emissionPerSecond == 0 ||\\n      totalSupply == 0 ||\\n      lastUpdateTimestamp == block.timestamp ||\\n      lastUpdateTimestamp >= distributionEnd\\n    ) {\\n      return (oldIndex, oldIndex);\\n    }\\n\\n    uint256 currentTimestamp = block.timestamp > distributionEnd\\n      ? distributionEnd\\n      : block.timestamp;\\n    uint256 timeDelta = currentTimestamp - lastUpdateTimestamp;\\n    uint256 firstTerm = emissionPerSecond * timeDelta * assetUnit;\\n    assembly {\\n      firstTerm := div(firstTerm, totalSupply)\\n    }\\n    return (oldIndex, (firstTerm + oldIndex));\\n  }\\n\\n  /**\\n   * @dev Get user balances and total supply of all the assets specified by the assets parameter\\n   * @param assets List of assets to retrieve user balance and total supply\\n   * @param user Address of the user\\n   * @return userAssetBalances contains a list of structs with user balance and total supply of the given assets\\n   */\\n  function _getUserAssetBalances(\\n    address[] calldata assets,\\n    address user\\n  ) internal view virtual returns (RewardsDataTypes.UserAssetBalance[] memory userAssetBalances);\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function getAssetDecimals(address asset) external view returns (uint8) {\\n    return _assets[asset].decimals;\\n  }\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function getEmissionManager() external view returns (address) {\\n    return EMISSION_MANAGER;\\n  }\\n}\\n\",\"keccak256\":\"0x2ebbe04658923f2023c5ace6a75ce38090e41be420648e71ac51f2f4e5da2531\",\"license\":\"BUSL-1.1\"},\"contracts/rewards/interfaces/IRewardsController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IRewardsDistributor} from './IRewardsDistributor.sol';\\nimport {ITransferStrategyBase} from './ITransferStrategyBase.sol';\\nimport {IEACAggregatorProxy} from '../../misc/interfaces/IEACAggregatorProxy.sol';\\nimport {RewardsDataTypes} from '../libraries/RewardsDataTypes.sol';\\n\\n/**\\n * @title IRewardsController\\n * @author Aave\\n * @notice Defines the basic interface for a Rewards Controller.\\n */\\ninterface IRewardsController is IRewardsDistributor {\\n  /**\\n   * @dev Emitted when a new address is whitelisted as claimer of rewards on behalf of a user\\n   * @param user The address of the user\\n   * @param claimer The address of the claimer\\n   */\\n  event ClaimerSet(address indexed user, address indexed claimer);\\n\\n  /**\\n   * @dev Emitted when rewards are claimed\\n   * @param user The address of the user rewards has been claimed on behalf of\\n   * @param reward The address of the token reward is claimed\\n   * @param to The address of the receiver of the rewards\\n   * @param claimer The address of the claimer\\n   * @param amount The amount of rewards claimed\\n   */\\n  event RewardsClaimed(\\n    address indexed user,\\n    address indexed reward,\\n    address indexed to,\\n    address claimer,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @dev Emitted when a transfer strategy is installed for the reward distribution\\n   * @param reward The address of the token reward\\n   * @param transferStrategy The address of TransferStrategy contract\\n   */\\n  event TransferStrategyInstalled(address indexed reward, address indexed transferStrategy);\\n\\n  /**\\n   * @dev Emitted when the reward oracle is updated\\n   * @param reward The address of the token reward\\n   * @param rewardOracle The address of oracle\\n   */\\n  event RewardOracleUpdated(address indexed reward, address indexed rewardOracle);\\n\\n  /**\\n   * @dev Whitelists an address to claim the rewards on behalf of another address\\n   * @param user The address of the user\\n   * @param claimer The address of the claimer\\n   */\\n  function setClaimer(address user, address claimer) external;\\n\\n  /**\\n   * @dev Sets a TransferStrategy logic contract that determines the logic of the rewards transfer\\n   * @param reward The address of the reward token\\n   * @param transferStrategy The address of the TransferStrategy logic contract\\n   */\\n  function setTransferStrategy(address reward, ITransferStrategyBase transferStrategy) external;\\n\\n  /**\\n   * @dev Sets an Aave Oracle contract to enforce rewards with a source of value.\\n   * @notice At the moment of reward configuration, the Incentives Controller performs\\n   * a check to see if the reward asset oracle is compatible with IEACAggregator proxy.\\n   * This check is enforced for integrators to be able to show incentives at\\n   * the current Aave UI without the need to setup an external price registry\\n   * @param reward The address of the reward to set the price aggregator\\n   * @param rewardOracle The address of price aggregator that follows IEACAggregatorProxy interface\\n   */\\n  function setRewardOracle(address reward, IEACAggregatorProxy rewardOracle) external;\\n\\n  /**\\n   * @dev Get the price aggregator oracle address\\n   * @param reward The address of the reward\\n   * @return The price oracle of the reward\\n   */\\n  function getRewardOracle(address reward) external view returns (address);\\n\\n  /**\\n   * @dev Returns the whitelisted claimer for a certain address (0x0 if not set)\\n   * @param user The address of the user\\n   * @return The claimer address\\n   */\\n  function getClaimer(address user) external view returns (address);\\n\\n  /**\\n   * @dev Returns the Transfer Strategy implementation contract address being used for a reward address\\n   * @param reward The address of the reward\\n   * @return The address of the TransferStrategy contract\\n   */\\n  function getTransferStrategy(address reward) external view returns (address);\\n\\n  /**\\n   * @dev Configure assets to incentivize with an emission of rewards per second until the end of distribution.\\n   * @param config The assets configuration input, the list of structs contains the following fields:\\n   *   uint104 emissionPerSecond: The emission per second following rewards unit decimals.\\n   *   uint256 totalSupply: The total supply of the asset to incentivize\\n   *   uint40 distributionEnd: The end of the distribution of the incentives for an asset\\n   *   address asset: The asset address to incentivize\\n   *   address reward: The reward token address\\n   *   ITransferStrategy transferStrategy: The TransferStrategy address with the install hook and claim logic.\\n   *   IEACAggregatorProxy rewardOracle: The Price Oracle of a reward to visualize the incentives at the UI Frontend.\\n   *                                     Must follow Chainlink Aggregator IEACAggregatorProxy interface to be compatible.\\n   */\\n  function configureAssets(RewardsDataTypes.RewardsConfigInput[] memory config) external;\\n\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   **/\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n\\n  /**\\n   * @dev Claims reward for a user to the desired address, on all the assets of the pool, accumulating the pending rewards\\n   * @param assets List of assets to check eligible distributions before claiming rewards\\n   * @param amount The amount of rewards to claim\\n   * @param to The address that will be receiving the rewards\\n   * @param reward The address of the reward token\\n   * @return The amount of rewards claimed\\n   **/\\n  function claimRewards(\\n    address[] calldata assets,\\n    uint256 amount,\\n    address to,\\n    address reward\\n  ) external returns (uint256);\\n\\n  /**\\n   * @dev Claims reward for a user on behalf, on all the assets of the pool, accumulating the pending rewards. The\\n   * caller must be whitelisted via \\\"allowClaimOnBehalf\\\" function by the RewardsAdmin role manager\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @param amount The amount of rewards to claim\\n   * @param user The address to check and claim rewards\\n   * @param to The address that will be receiving the rewards\\n   * @param reward The address of the reward token\\n   * @return The amount of rewards claimed\\n   **/\\n  function claimRewardsOnBehalf(\\n    address[] calldata assets,\\n    uint256 amount,\\n    address user,\\n    address to,\\n    address reward\\n  ) external returns (uint256);\\n\\n  /**\\n   * @dev Claims reward for msg.sender, on all the assets of the pool, accumulating the pending rewards\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @param amount The amount of rewards to claim\\n   * @param reward The address of the reward token\\n   * @return The amount of rewards claimed\\n   **/\\n  function claimRewardsToSelf(\\n    address[] calldata assets,\\n    uint256 amount,\\n    address reward\\n  ) external returns (uint256);\\n\\n  /**\\n   * @dev Claims all rewards for a user to the desired address, on all the assets of the pool, accumulating the pending rewards\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @param to The address that will be receiving the rewards\\n   * @return rewardsList List of addresses of the reward tokens\\n   * @return claimedAmounts List that contains the claimed amount per reward, following same order as \\\"rewardList\\\"\\n   **/\\n  function claimAllRewards(\\n    address[] calldata assets,\\n    address to\\n  ) external returns (address[] memory rewardsList, uint256[] memory claimedAmounts);\\n\\n  /**\\n   * @dev Claims all rewards for a user on behalf, on all the assets of the pool, accumulating the pending rewards. The caller must\\n   * be whitelisted via \\\"allowClaimOnBehalf\\\" function by the RewardsAdmin role manager\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @param user The address to check and claim rewards\\n   * @param to The address that will be receiving the rewards\\n   * @return rewardsList List of addresses of the reward tokens\\n   * @return claimedAmounts List that contains the claimed amount per reward, following same order as \\\"rewardsList\\\"\\n   **/\\n  function claimAllRewardsOnBehalf(\\n    address[] calldata assets,\\n    address user,\\n    address to\\n  ) external returns (address[] memory rewardsList, uint256[] memory claimedAmounts);\\n\\n  /**\\n   * @dev Claims all reward for msg.sender, on all the assets of the pool, accumulating the pending rewards\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @return rewardsList List of addresses of the reward tokens\\n   * @return claimedAmounts List that contains the claimed amount per reward, following same order as \\\"rewardsList\\\"\\n   **/\\n  function claimAllRewardsToSelf(\\n    address[] calldata assets\\n  ) external returns (address[] memory rewardsList, uint256[] memory claimedAmounts);\\n}\\n\",\"keccak256\":\"0xe8a4d4ea914cbbcd3f6a4e5420a34d01f1379b2d445bd98fc7f8004c69894f5d\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/IRewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title IRewardsDistributor\\n * @author Aave\\n * @notice Defines the basic interface for a Rewards Distributor.\\n */\\ninterface IRewardsDistributor {\\n  /**\\n   * @dev Emitted when the configuration of the rewards of an asset is updated.\\n   * @param asset The address of the incentivized asset\\n   * @param reward The address of the reward token\\n   * @param oldEmission The old emissions per second value of the reward distribution\\n   * @param newEmission The new emissions per second value of the reward distribution\\n   * @param oldDistributionEnd The old end timestamp of the reward distribution\\n   * @param newDistributionEnd The new end timestamp of the reward distribution\\n   * @param assetIndex The index of the asset distribution\\n   */\\n  event AssetConfigUpdated(\\n    address indexed asset,\\n    address indexed reward,\\n    uint256 oldEmission,\\n    uint256 newEmission,\\n    uint256 oldDistributionEnd,\\n    uint256 newDistributionEnd,\\n    uint256 assetIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when rewards of an asset are accrued on behalf of a user.\\n   * @param asset The address of the incentivized asset\\n   * @param reward The address of the reward token\\n   * @param user The address of the user that rewards are accrued on behalf of\\n   * @param assetIndex The index of the asset distribution\\n   * @param userIndex The index of the asset distribution on behalf of the user\\n   * @param rewardsAccrued The amount of rewards accrued\\n   */\\n  event Accrued(\\n    address indexed asset,\\n    address indexed reward,\\n    address indexed user,\\n    uint256 assetIndex,\\n    uint256 userIndex,\\n    uint256 rewardsAccrued\\n  );\\n\\n  /**\\n   * @dev Sets the end date for the distribution\\n   * @param asset The asset to incentivize\\n   * @param reward The reward token that incentives the asset\\n   * @param newDistributionEnd The end date of the incentivization, in unix time format\\n   **/\\n  function setDistributionEnd(address asset, address reward, uint32 newDistributionEnd) external;\\n\\n  /**\\n   * @dev Sets the emission per second of a set of reward distributions\\n   * @param asset The asset is being incentivized\\n   * @param rewards List of reward addresses are being distributed\\n   * @param newEmissionsPerSecond List of new reward emissions per second\\n   */\\n  function setEmissionPerSecond(\\n    address asset,\\n    address[] calldata rewards,\\n    uint88[] calldata newEmissionsPerSecond\\n  ) external;\\n\\n  /**\\n   * @dev Gets the end date for the distribution\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The timestamp with the end of the distribution, in unix time format\\n   **/\\n  function getDistributionEnd(address asset, address reward) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the index of a user on a reward distribution\\n   * @param user Address of the user\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The current user asset index, not including new distributions\\n   **/\\n  function getUserAssetIndex(\\n    address user,\\n    address asset,\\n    address reward\\n  ) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the configuration of the distribution reward for a certain asset\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The index of the asset distribution\\n   * @return The emission per second of the reward distribution\\n   * @return The timestamp of the last update of the index\\n   * @return The timestamp of the distribution end\\n   **/\\n  function getRewardsData(\\n    address asset,\\n    address reward\\n  ) external view returns (uint256, uint256, uint256, uint256);\\n\\n  /**\\n   * @dev Calculates the next value of an specific distribution index, with validations.\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The old index of the asset distribution\\n   * @return The new index of the asset distribution\\n   **/\\n  function getAssetIndex(address asset, address reward) external view returns (uint256, uint256);\\n\\n  /**\\n   * @dev Returns the list of available reward token addresses of an incentivized asset\\n   * @param asset The incentivized asset\\n   * @return List of rewards addresses of the input asset\\n   **/\\n  function getRewardsByAsset(address asset) external view returns (address[] memory);\\n\\n  /**\\n   * @dev Returns the list of available reward addresses\\n   * @return List of rewards supported in this contract\\n   **/\\n  function getRewardsList() external view returns (address[] memory);\\n\\n  /**\\n   * @dev Returns the accrued rewards balance of a user, not including virtually accrued rewards since last distribution.\\n   * @param user The address of the user\\n   * @param reward The address of the reward token\\n   * @return Unclaimed rewards, not including new distributions\\n   **/\\n  function getUserAccruedRewards(address user, address reward) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns a single rewards balance of a user, including virtually accrued and unrealized claimable rewards.\\n   * @param assets List of incentivized assets to check eligible distributions\\n   * @param user The address of the user\\n   * @param reward The address of the reward token\\n   * @return The rewards amount\\n   **/\\n  function getUserRewards(\\n    address[] calldata assets,\\n    address user,\\n    address reward\\n  ) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns a list all rewards of a user, including already accrued and unrealized claimable rewards\\n   * @param assets List of incentivized assets to check eligible distributions\\n   * @param user The address of the user\\n   * @return The list of reward addresses\\n   * @return The list of unclaimed amount of rewards\\n   **/\\n  function getAllUserRewards(\\n    address[] calldata assets,\\n    address user\\n  ) external view returns (address[] memory, uint256[] memory);\\n\\n  /**\\n   * @dev Returns the decimals of an asset to calculate the distribution delta\\n   * @param asset The address to retrieve decimals\\n   * @return The decimals of an underlying asset\\n   */\\n  function getAssetDecimals(address asset) external view returns (uint8);\\n\\n  /**\\n   * @dev Returns the address of the emission manager\\n   * @return The address of the EmissionManager\\n   */\\n  function EMISSION_MANAGER() external view returns (address);\\n\\n  /**\\n   * @dev Returns the address of the emission manager.\\n   * Deprecated: This getter is maintained for compatibility purposes. Use the `EMISSION_MANAGER()` function instead.\\n   * @return The address of the EmissionManager\\n   */\\n  function getEmissionManager() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd393efd85f696114f9ab69e6bfdcbf3a2bcf16ef5002516d56a0f0359e3d9bba\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/ITransferStrategyBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface ITransferStrategyBase {\\n  event EmergencyWithdrawal(\\n    address indexed caller,\\n    address indexed token,\\n    address indexed to,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @dev Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation\\n   * @param to Account to transfer rewards\\n   * @param reward Address of the reward token\\n   * @param amount Amount to transfer to the \\\"to\\\" address parameter\\n   * @return Returns true bool if transfer logic succeeds\\n   */\\n  function performTransfer(address to, address reward, uint256 amount) external returns (bool);\\n\\n  /**\\n   * @return Returns the address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view returns (address);\\n\\n  /**\\n   * @return Returns the address of the Rewards admin\\n   */\\n  function getRewardsAdmin() external view returns (address);\\n\\n  /**\\n   * @dev Perform an emergency token withdrawal only callable by the Rewards admin\\n   * @param token Address of the token to withdraw funds from this contract\\n   * @param to Address of the recipient of the withdrawal\\n   * @param amount Amount of the withdrawal\\n   */\\n  function emergencyWithdrawal(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0xa52a6dc237879acbed7325787ce58238a3afd626fa2ed827d4e321d2e4ef51ad\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/libraries/RewardsDataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {ITransferStrategyBase} from '../interfaces/ITransferStrategyBase.sol';\\nimport {IEACAggregatorProxy} from '../../misc/interfaces/IEACAggregatorProxy.sol';\\n\\nlibrary RewardsDataTypes {\\n  struct RewardsConfigInput {\\n    uint88 emissionPerSecond;\\n    uint256 totalSupply;\\n    uint32 distributionEnd;\\n    address asset;\\n    address reward;\\n    ITransferStrategyBase transferStrategy;\\n    IEACAggregatorProxy rewardOracle;\\n  }\\n\\n  struct UserAssetBalance {\\n    address asset;\\n    uint256 userBalance;\\n    uint256 totalSupply;\\n  }\\n\\n  struct UserData {\\n    // Liquidity index of the reward distribution for the user\\n    uint104 index;\\n    // Amount of accrued rewards for the user since last user index update\\n    uint128 accrued;\\n  }\\n\\n  struct RewardData {\\n    // Liquidity index of the reward distribution\\n    uint104 index;\\n    // Amount of reward tokens distributed per second\\n    uint88 emissionPerSecond;\\n    // Timestamp of the last reward index update\\n    uint32 lastUpdateTimestamp;\\n    // The end of the distribution of rewards (in seconds)\\n    uint32 distributionEnd;\\n    // Map of user addresses and their rewards data (userAddress => userData)\\n    mapping(address => UserData) usersData;\\n  }\\n\\n  struct AssetData {\\n    // Map of reward token addresses and their data (rewardTokenAddress => rewardData)\\n    mapping(address => RewardData) rewards;\\n    // List of reward token addresses for the asset\\n    mapping(uint128 => address) availableRewards;\\n    // Count of reward tokens for the asset\\n    uint128 availableRewardsCount;\\n    // Number of decimals of the asset\\n    uint8 decimals;\\n  }\\n}\\n\",\"keccak256\":\"0xaaa314b4e9f40878f4fd20e99075fe60309c9e223a5b8c244aaaeb7229d8c318\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":37600,"contract":"contracts/rewards/RewardsController.sol:RewardsController","label":"_emissionManager","offset":0,"slot":"0","type":"t_address"},{"astId":37605,"contract":"contracts/rewards/RewardsController.sol:RewardsController","label":"_assets","offset":0,"slot":"1","type":"t_mapping(t_address,t_struct(AssetData)39706_storage)"},{"astId":37609,"contract":"contracts/rewards/RewardsController.sol:RewardsController","label":"_isRewardEnabled","offset":0,"slot":"2","type":"t_mapping(t_address,t_bool)"},{"astId":37612,"contract":"contracts/rewards/RewardsController.sol:RewardsController","label":"_rewardsList","offset":0,"slot":"3","type":"t_array(t_address)dyn_storage"},{"astId":37615,"contract":"contracts/rewards/RewardsController.sol:RewardsController","label":"_assetsList","offset":0,"slot":"4","type":"t_array(t_address)dyn_storage"},{"astId":10499,"contract":"contracts/rewards/RewardsController.sol:RewardsController","label":"lastInitializedRevision","offset":0,"slot":"5","type":"t_uint256"},{"astId":10502,"contract":"contracts/rewards/RewardsController.sol:RewardsController","label":"initializing","offset":0,"slot":"6","type":"t_bool"},{"astId":10572,"contract":"contracts/rewards/RewardsController.sol:RewardsController","label":"______gap","offset":0,"slot":"7","type":"t_array(t_uint256)50_storage"},{"astId":36584,"contract":"contracts/rewards/RewardsController.sol:RewardsController","label":"_authorizedClaimers","offset":0,"slot":"57","type":"t_mapping(t_address,t_address)"},{"astId":36589,"contract":"contracts/rewards/RewardsController.sol:RewardsController","label":"_transferStrategy","offset":0,"slot":"58","type":"t_mapping(t_address,t_contract(ITransferStrategyBase)39643)"},{"astId":36594,"contract":"contracts/rewards/RewardsController.sol:RewardsController","label":"_rewardOracle","offset":0,"slot":"59","type":"t_mapping(t_address,t_contract(IEACAggregatorProxy)34482)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"base":"t_address","encoding":"dynamic_array","label":"address[]","numberOfBytes":"32"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(IEACAggregatorProxy)34482":{"encoding":"inplace","label":"contract IEACAggregatorProxy","numberOfBytes":"20"},"t_contract(ITransferStrategyBase)39643":{"encoding":"inplace","label":"contract ITransferStrategyBase","numberOfBytes":"20"},"t_mapping(t_address,t_address)":{"encoding":"mapping","key":"t_address","label":"mapping(address => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_contract(IEACAggregatorProxy)34482)":{"encoding":"mapping","key":"t_address","label":"mapping(address => contract IEACAggregatorProxy)","numberOfBytes":"32","value":"t_contract(IEACAggregatorProxy)34482"},"t_mapping(t_address,t_contract(ITransferStrategyBase)39643)":{"encoding":"mapping","key":"t_address","label":"mapping(address => contract ITransferStrategyBase)","numberOfBytes":"32","value":"t_contract(ITransferStrategyBase)39643"},"t_mapping(t_address,t_struct(AssetData)39706_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct RewardsDataTypes.AssetData)","numberOfBytes":"32","value":"t_struct(AssetData)39706_storage"},"t_mapping(t_address,t_struct(RewardData)39692_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct RewardsDataTypes.RewardData)","numberOfBytes":"32","value":"t_struct(RewardData)39692_storage"},"t_mapping(t_address,t_struct(UserData)39678_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct RewardsDataTypes.UserData)","numberOfBytes":"32","value":"t_struct(UserData)39678_storage"},"t_mapping(t_uint128,t_address)":{"encoding":"mapping","key":"t_uint128","label":"mapping(uint128 => address)","numberOfBytes":"32","value":"t_address"},"t_struct(AssetData)39706_storage":{"encoding":"inplace","label":"struct RewardsDataTypes.AssetData","members":[{"astId":39697,"contract":"contracts/rewards/RewardsController.sol:RewardsController","label":"rewards","offset":0,"slot":"0","type":"t_mapping(t_address,t_struct(RewardData)39692_storage)"},{"astId":39701,"contract":"contracts/rewards/RewardsController.sol:RewardsController","label":"availableRewards","offset":0,"slot":"1","type":"t_mapping(t_uint128,t_address)"},{"astId":39703,"contract":"contracts/rewards/RewardsController.sol:RewardsController","label":"availableRewardsCount","offset":0,"slot":"2","type":"t_uint128"},{"astId":39705,"contract":"contracts/rewards/RewardsController.sol:RewardsController","label":"decimals","offset":16,"slot":"2","type":"t_uint8"}],"numberOfBytes":"96"},"t_struct(RewardData)39692_storage":{"encoding":"inplace","label":"struct RewardsDataTypes.RewardData","members":[{"astId":39680,"contract":"contracts/rewards/RewardsController.sol:RewardsController","label":"index","offset":0,"slot":"0","type":"t_uint104"},{"astId":39682,"contract":"contracts/rewards/RewardsController.sol:RewardsController","label":"emissionPerSecond","offset":13,"slot":"0","type":"t_uint88"},{"astId":39684,"contract":"contracts/rewards/RewardsController.sol:RewardsController","label":"lastUpdateTimestamp","offset":24,"slot":"0","type":"t_uint32"},{"astId":39686,"contract":"contracts/rewards/RewardsController.sol:RewardsController","label":"distributionEnd","offset":28,"slot":"0","type":"t_uint32"},{"astId":39691,"contract":"contracts/rewards/RewardsController.sol:RewardsController","label":"usersData","offset":0,"slot":"1","type":"t_mapping(t_address,t_struct(UserData)39678_storage)"}],"numberOfBytes":"64"},"t_struct(UserData)39678_storage":{"encoding":"inplace","label":"struct RewardsDataTypes.UserData","members":[{"astId":39675,"contract":"contracts/rewards/RewardsController.sol:RewardsController","label":"index","offset":0,"slot":"0","type":"t_uint104"},{"astId":39677,"contract":"contracts/rewards/RewardsController.sol:RewardsController","label":"accrued","offset":13,"slot":"0","type":"t_uint128"}],"numberOfBytes":"32"},"t_uint104":{"encoding":"inplace","label":"uint104","numberOfBytes":"13"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"},"t_uint88":{"encoding":"inplace","label":"uint88","numberOfBytes":"11"}}},"userdoc":{"kind":"user","methods":{"setRewardOracle(address,address)":{"notice":"At the moment of reward configuration, the Incentives Controller performs a check to see if the reward asset oracle is compatible with IEACAggregator proxy. This check is enforced for integrators to be able to show incentives at the current Aave UI without the need to setup an external price registry"}},"notice":"Abstract contract template to build Distributors contracts for ERC20 rewards to protocol participants","version":1}}},"contracts/rewards/RewardsDistributor.sol":{"RewardsDistributor":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"reward","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"assetIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"userIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardsAccrued","type":"uint256"}],"name":"Accrued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"reward","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldEmission","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newEmission","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldDistributionEnd","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDistributionEnd","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"assetIndex","type":"uint256"}],"name":"AssetConfigUpdated","type":"event"},{"inputs":[],"name":"EMISSION_MANAGER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"address","name":"user","type":"address"}],"name":"getAllUserRewards","outputs":[{"internalType":"address[]","name":"rewardsList","type":"address[]"},{"internalType":"uint256[]","name":"unclaimedAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getAssetDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"getAssetIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"getDistributionEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEmissionManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getRewardsByAsset","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"getRewardsData","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardsList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"getUserAccruedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"getUserAssetIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"getUserRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"},{"internalType":"uint32","name":"newDistributionEnd","type":"uint32"}],"name":"setDistributionEnd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address[]","name":"rewards","type":"address[]"},{"internalType":"uint88[]","name":"newEmissionsPerSecond","type":"uint88[]"}],"name":"setEmissionPerSecond","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave*","kind":"dev","methods":{"getAllUserRewards(address[],address)":{"details":"Returns a list all rewards of a user, including already accrued and unrealized claimable rewards","params":{"assets":"List of incentivized assets to check eligible distributions","user":"The address of the user"},"returns":{"rewardsList":"The list of reward addresses","unclaimedAmounts":"The list of unclaimed amount of rewards*"}},"getAssetDecimals(address)":{"details":"Returns the decimals of an asset to calculate the distribution delta","params":{"asset":"The address to retrieve decimals"},"returns":{"_0":"The decimals of an underlying asset"}},"getAssetIndex(address,address)":{"details":"Calculates the next value of an specific distribution index, with validations.","params":{"asset":"The incentivized asset","reward":"The reward token of the incentivized asset"},"returns":{"_0":"The old index of the asset distribution","_1":"The new index of the asset distribution*"}},"getDistributionEnd(address,address)":{"details":"Gets the end date for the distribution","params":{"asset":"The incentivized asset","reward":"The reward token of the incentivized asset"},"returns":{"_0":"The timestamp with the end of the distribution, in unix time format*"}},"getEmissionManager()":{"details":"Returns the address of the emission manager. Deprecated: This getter is maintained for compatibility purposes. Use the `EMISSION_MANAGER()` function instead.","returns":{"_0":"The address of the EmissionManager"}},"getRewardsByAsset(address)":{"details":"Returns the list of available reward token addresses of an incentivized asset","params":{"asset":"The incentivized asset"},"returns":{"_0":"List of rewards addresses of the input asset*"}},"getRewardsData(address,address)":{"details":"Returns the configuration of the distribution reward for a certain asset","params":{"asset":"The incentivized asset","reward":"The reward token of the incentivized asset"},"returns":{"_0":"The index of the asset distribution","_1":"The emission per second of the reward distribution","_2":"The timestamp of the last update of the index","_3":"The timestamp of the distribution end*"}},"getRewardsList()":{"details":"Returns the list of available reward addresses","returns":{"_0":"List of rewards supported in this contract*"}},"getUserAccruedRewards(address,address)":{"details":"Returns the accrued rewards balance of a user, not including virtually accrued rewards since last distribution.","params":{"reward":"The address of the reward token","user":"The address of the user"},"returns":{"_0":"Unclaimed rewards, not including new distributions*"}},"getUserAssetIndex(address,address,address)":{"details":"Returns the index of a user on a reward distribution","params":{"asset":"The incentivized asset","reward":"The reward token of the incentivized asset","user":"Address of the user"},"returns":{"_0":"The current user asset index, not including new distributions*"}},"getUserRewards(address[],address,address)":{"details":"Returns a single rewards balance of a user, including virtually accrued and unrealized claimable rewards.","params":{"assets":"List of incentivized assets to check eligible distributions","reward":"The address of the reward token","user":"The address of the user"},"returns":{"_0":"The rewards amount*"}},"setDistributionEnd(address,address,uint32)":{"details":"Sets the end date for the distribution","params":{"asset":"The asset to incentivize","newDistributionEnd":"The end date of the incentivization, in unix time format*","reward":"The reward token that incentives the asset"}},"setEmissionPerSecond(address,address[],uint88[])":{"details":"Sets the emission per second of a set of reward distributions","params":{"asset":"The asset is being incentivized","newEmissionsPerSecond":"List of new reward emissions per second","rewards":"List of reward addresses are being distributed"}}},"stateVariables":{"EMISSION_MANAGER":{"details":"Returns the address of the emission manager","return":"The address of the EmissionManager","returns":{"_0":"The address of the EmissionManager"}}},"title":"RewardsDistributor","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"EMISSION_MANAGER()":"cbcbb507","getAllUserRewards(address[],address)":"4c0369c3","getAssetDecimals(address)":"9efd6f72","getAssetIndex(address,address)":"886fe70b","getDistributionEnd(address,address)":"1b839c77","getEmissionManager()":"92074b08","getRewardsByAsset(address)":"6657732f","getRewardsData(address,address)":"7eff4ba8","getRewardsList()":"b45ac1a9","getUserAccruedRewards(address,address)":"b022418c","getUserAssetIndex(address,address,address)":"533f542a","getUserRewards(address[],address,address)":"70674ab9","setDistributionEnd(address,address,uint32)":"c5a7b538","setEmissionPerSecond(address,address[],uint88[])":"f996868b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assetIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"userIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewardsAccrued\",\"type\":\"uint256\"}],\"name\":\"Accrued\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldEmission\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newEmission\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldDistributionEnd\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newDistributionEnd\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assetIndex\",\"type\":\"uint256\"}],\"name\":\"AssetConfigUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"EMISSION_MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getAllUserRewards\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"rewardsList\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"unclaimedAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getAssetDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getAssetIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getDistributionEnd\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEmissionManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getRewardsByAsset\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getRewardsData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardsList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getUserAccruedRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getUserAssetIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getUserRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"newDistributionEnd\",\"type\":\"uint32\"}],\"name\":\"setDistributionEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"rewards\",\"type\":\"address[]\"},{\"internalType\":\"uint88[]\",\"name\":\"newEmissionsPerSecond\",\"type\":\"uint88[]\"}],\"name\":\"setEmissionPerSecond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave*\",\"kind\":\"dev\",\"methods\":{\"getAllUserRewards(address[],address)\":{\"details\":\"Returns a list all rewards of a user, including already accrued and unrealized claimable rewards\",\"params\":{\"assets\":\"List of incentivized assets to check eligible distributions\",\"user\":\"The address of the user\"},\"returns\":{\"rewardsList\":\"The list of reward addresses\",\"unclaimedAmounts\":\"The list of unclaimed amount of rewards*\"}},\"getAssetDecimals(address)\":{\"details\":\"Returns the decimals of an asset to calculate the distribution delta\",\"params\":{\"asset\":\"The address to retrieve decimals\"},\"returns\":{\"_0\":\"The decimals of an underlying asset\"}},\"getAssetIndex(address,address)\":{\"details\":\"Calculates the next value of an specific distribution index, with validations.\",\"params\":{\"asset\":\"The incentivized asset\",\"reward\":\"The reward token of the incentivized asset\"},\"returns\":{\"_0\":\"The old index of the asset distribution\",\"_1\":\"The new index of the asset distribution*\"}},\"getDistributionEnd(address,address)\":{\"details\":\"Gets the end date for the distribution\",\"params\":{\"asset\":\"The incentivized asset\",\"reward\":\"The reward token of the incentivized asset\"},\"returns\":{\"_0\":\"The timestamp with the end of the distribution, in unix time format*\"}},\"getEmissionManager()\":{\"details\":\"Returns the address of the emission manager. Deprecated: This getter is maintained for compatibility purposes. Use the `EMISSION_MANAGER()` function instead.\",\"returns\":{\"_0\":\"The address of the EmissionManager\"}},\"getRewardsByAsset(address)\":{\"details\":\"Returns the list of available reward token addresses of an incentivized asset\",\"params\":{\"asset\":\"The incentivized asset\"},\"returns\":{\"_0\":\"List of rewards addresses of the input asset*\"}},\"getRewardsData(address,address)\":{\"details\":\"Returns the configuration of the distribution reward for a certain asset\",\"params\":{\"asset\":\"The incentivized asset\",\"reward\":\"The reward token of the incentivized asset\"},\"returns\":{\"_0\":\"The index of the asset distribution\",\"_1\":\"The emission per second of the reward distribution\",\"_2\":\"The timestamp of the last update of the index\",\"_3\":\"The timestamp of the distribution end*\"}},\"getRewardsList()\":{\"details\":\"Returns the list of available reward addresses\",\"returns\":{\"_0\":\"List of rewards supported in this contract*\"}},\"getUserAccruedRewards(address,address)\":{\"details\":\"Returns the accrued rewards balance of a user, not including virtually accrued rewards since last distribution.\",\"params\":{\"reward\":\"The address of the reward token\",\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"Unclaimed rewards, not including new distributions*\"}},\"getUserAssetIndex(address,address,address)\":{\"details\":\"Returns the index of a user on a reward distribution\",\"params\":{\"asset\":\"The incentivized asset\",\"reward\":\"The reward token of the incentivized asset\",\"user\":\"Address of the user\"},\"returns\":{\"_0\":\"The current user asset index, not including new distributions*\"}},\"getUserRewards(address[],address,address)\":{\"details\":\"Returns a single rewards balance of a user, including virtually accrued and unrealized claimable rewards.\",\"params\":{\"assets\":\"List of incentivized assets to check eligible distributions\",\"reward\":\"The address of the reward token\",\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The rewards amount*\"}},\"setDistributionEnd(address,address,uint32)\":{\"details\":\"Sets the end date for the distribution\",\"params\":{\"asset\":\"The asset to incentivize\",\"newDistributionEnd\":\"The end date of the incentivization, in unix time format*\",\"reward\":\"The reward token that incentives the asset\"}},\"setEmissionPerSecond(address,address[],uint88[])\":{\"details\":\"Sets the emission per second of a set of reward distributions\",\"params\":{\"asset\":\"The asset is being incentivized\",\"newEmissionsPerSecond\":\"List of new reward emissions per second\",\"rewards\":\"List of reward addresses are being distributed\"}}},\"stateVariables\":{\"EMISSION_MANAGER\":{\"details\":\"Returns the address of the emission manager\",\"return\":\"The address of the EmissionManager\",\"returns\":{\"_0\":\"The address of the EmissionManager\"}}},\"title\":\"RewardsDistributor\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Accounting contract to manage multiple staking distributions with multiple rewards\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/rewards/RewardsDistributor.sol\":\"RewardsDistributor\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from './IERC20.sol';\\n\\ninterface IERC20Detailed is IERC20 {\\n  function name() external view returns (string memory);\\n\\n  function symbol() external view returns (string memory);\\n\\n  function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x9365cd885dc1ed7aed1364ae4dedf8e4660100cba0437061013f64c5002b385a\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeCast.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\\n * checks.\\n *\\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\\n * easily result in undesired exploitation or bugs, since developers usually\\n * assume that overflows raise errors. `SafeCast` restores this intuition by\\n * reverting the transaction when such an 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 *\\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\\n * all math on `uint256` and `int256` and then downcasting.\\n */\\nlibrary SafeCast {\\n  /**\\n   * @dev Returns the downcasted uint224 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint224).\\n   *\\n   * Counterpart to Solidity's `uint224` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 224 bits\\n   */\\n  function toUint224(uint256 value) internal pure returns (uint224) {\\n    require(value <= type(uint224).max, \\\"SafeCast: value doesn't fit in 224 bits\\\");\\n    return uint224(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint128 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint128).\\n   *\\n   * Counterpart to Solidity's `uint128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   */\\n  function toUint128(uint256 value) internal pure returns (uint128) {\\n    require(value <= type(uint128).max, \\\"SafeCast: value doesn't fit in 128 bits\\\");\\n    return uint128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint96 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint96).\\n   *\\n   * Counterpart to Solidity's `uint96` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 96 bits\\n   */\\n  function toUint96(uint256 value) internal pure returns (uint96) {\\n    require(value <= type(uint96).max, \\\"SafeCast: value doesn't fit in 96 bits\\\");\\n    return uint96(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint64 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint64).\\n   *\\n   * Counterpart to Solidity's `uint64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   */\\n  function toUint64(uint256 value) internal pure returns (uint64) {\\n    require(value <= type(uint64).max, \\\"SafeCast: value doesn't fit in 64 bits\\\");\\n    return uint64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint32 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint32).\\n   *\\n   * Counterpart to Solidity's `uint32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   */\\n  function toUint32(uint256 value) internal pure returns (uint32) {\\n    require(value <= type(uint32).max, \\\"SafeCast: value doesn't fit in 32 bits\\\");\\n    return uint32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint16 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint16).\\n   *\\n   * Counterpart to Solidity's `uint16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   */\\n  function toUint16(uint256 value) internal pure returns (uint16) {\\n    require(value <= type(uint16).max, \\\"SafeCast: value doesn't fit in 16 bits\\\");\\n    return uint16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted uint8 from uint256, reverting on\\n   * overflow (when the input is greater than largest uint8).\\n   *\\n   * Counterpart to Solidity's `uint8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   */\\n  function toUint8(uint256 value) internal pure returns (uint8) {\\n    require(value <= type(uint8).max, \\\"SafeCast: value doesn't fit in 8 bits\\\");\\n    return uint8(value);\\n  }\\n\\n  /**\\n   * @dev Converts a signed int256 into an unsigned uint256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be greater than or equal to 0.\\n   */\\n  function toUint256(int256 value) internal pure returns (uint256) {\\n    require(value >= 0, 'SafeCast: value must be positive');\\n    return uint256(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int128 from int256, reverting on\\n   * overflow (when the input is less than smallest int128 or\\n   * greater than largest int128).\\n   *\\n   * Counterpart to Solidity's `int128` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 128 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt128(int256 value) internal pure returns (int128) {\\n    require(\\n      value >= type(int128).min && value <= type(int128).max,\\n      \\\"SafeCast: value doesn't fit in 128 bits\\\"\\n    );\\n    return int128(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int64 from int256, reverting on\\n   * overflow (when the input is less than smallest int64 or\\n   * greater than largest int64).\\n   *\\n   * Counterpart to Solidity's `int64` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 64 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt64(int256 value) internal pure returns (int64) {\\n    require(\\n      value >= type(int64).min && value <= type(int64).max,\\n      \\\"SafeCast: value doesn't fit in 64 bits\\\"\\n    );\\n    return int64(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int32 from int256, reverting on\\n   * overflow (when the input is less than smallest int32 or\\n   * greater than largest int32).\\n   *\\n   * Counterpart to Solidity's `int32` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 32 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt32(int256 value) internal pure returns (int32) {\\n    require(\\n      value >= type(int32).min && value <= type(int32).max,\\n      \\\"SafeCast: value doesn't fit in 32 bits\\\"\\n    );\\n    return int32(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int16 from int256, reverting on\\n   * overflow (when the input is less than smallest int16 or\\n   * greater than largest int16).\\n   *\\n   * Counterpart to Solidity's `int16` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 16 bits\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt16(int256 value) internal pure returns (int16) {\\n    require(\\n      value >= type(int16).min && value <= type(int16).max,\\n      \\\"SafeCast: value doesn't fit in 16 bits\\\"\\n    );\\n    return int16(value);\\n  }\\n\\n  /**\\n   * @dev Returns the downcasted int8 from int256, reverting on\\n   * overflow (when the input is less than smallest int8 or\\n   * greater than largest int8).\\n   *\\n   * Counterpart to Solidity's `int8` operator.\\n   *\\n   * Requirements:\\n   *\\n   * - input must fit into 8 bits.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function toInt8(int256 value) internal pure returns (int8) {\\n    require(\\n      value >= type(int8).min && value <= type(int8).max,\\n      \\\"SafeCast: value doesn't fit in 8 bits\\\"\\n    );\\n    return int8(value);\\n  }\\n\\n  /**\\n   * @dev Converts an unsigned uint256 into a signed int256.\\n   *\\n   * Requirements:\\n   *\\n   * - input must be less than or equal to maxInt256.\\n   */\\n  function toInt256(uint256 value) internal pure returns (int256) {\\n    // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\\n    require(value <= uint256(type(int256).max), \\\"SafeCast: value doesn't fit in an int256\\\");\\n    return int256(value);\\n  }\\n}\\n\",\"keccak256\":\"0x36824ad8ec8a12aa21938a05f971e21d23c7e84ae3b3a19b0643c5ebb873166e\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title IScaledBalanceToken\\n * @author Aave\\n * @notice Defines the basic interface for a scaled-balance token.\\n */\\ninterface IScaledBalanceToken {\\n  /**\\n   * @dev Emitted after the mint action\\n   * @param caller The address performing the mint\\n   * @param onBehalfOf The address of the user that will receive the minted tokens\\n   * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Mint(\\n    address indexed caller,\\n    address indexed onBehalfOf,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @dev Emitted after the burn action\\n   * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address\\n   * @param from The address from which the tokens will be burned\\n   * @param target The address that will receive the underlying, if any\\n   * @param value The scaled-up amount being burned (user entered amount - balance increase from interest)\\n   * @param balanceIncrease The increase in scaled-up balance since the last action of 'from'\\n   * @param index The next liquidity index of the reserve\\n   */\\n  event Burn(\\n    address indexed from,\\n    address indexed target,\\n    uint256 value,\\n    uint256 balanceIncrease,\\n    uint256 index\\n  );\\n\\n  /**\\n   * @notice Returns the scaled balance of the user.\\n   * @dev The scaled balance is the sum of all the updated stored balance divided by the reserve's liquidity index\\n   * at the moment of the update\\n   * @param user The user whose balance is calculated\\n   * @return The scaled balance of the user\\n   */\\n  function scaledBalanceOf(address user) external view returns (uint256);\\n\\n  /**\\n   * @notice Returns the scaled balance of the user and the scaled total supply.\\n   * @param user The address of the user\\n   * @return The scaled balance of the user\\n   * @return The scaled total supply\\n   */\\n  function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);\\n\\n  /**\\n   * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index)\\n   * @return The scaled total supply\\n   */\\n  function scaledTotalSupply() external view returns (uint256);\\n\\n  /**\\n   * @notice Returns last index interest was accrued to the user's balance\\n   * @param user The address of the user\\n   * @return The last index interest was accrued to the user's balance, expressed in ray\\n   */\\n  function getPreviousIndex(address user) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x72b3ea433cd3386f369f1643a154bf233ec60c02acd02c32088a97556207d2e4\",\"license\":\"AGPL-3.0\"},\"contracts/misc/interfaces/IEACAggregatorProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IEACAggregatorProxy {\\n  function decimals() external view returns (uint8);\\n\\n  function latestAnswer() external view returns (int256);\\n\\n  function latestTimestamp() external view returns (uint256);\\n\\n  function latestRound() external view returns (uint256);\\n\\n  function getAnswer(uint256 roundId) external view returns (int256);\\n\\n  function getTimestamp(uint256 roundId) external view returns (uint256);\\n\\n  event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 timestamp);\\n  event NewRound(uint256 indexed roundId, address indexed startedBy);\\n}\\n\",\"keccak256\":\"0x75bb34641419925730f87eeb122521b34cfd953b800212c362770ed1c7c5d719\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/RewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\npragma solidity ^0.8.10;\\n\\nimport {IScaledBalanceToken} from '@aave/core-v3/contracts/interfaces/IScaledBalanceToken.sol';\\nimport {IERC20Detailed} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol';\\nimport {SafeCast} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/SafeCast.sol';\\nimport {IRewardsDistributor} from './interfaces/IRewardsDistributor.sol';\\nimport {RewardsDataTypes} from './libraries/RewardsDataTypes.sol';\\n\\n/**\\n * @title RewardsDistributor\\n * @notice Accounting contract to manage multiple staking distributions with multiple rewards\\n * @author Aave\\n **/\\nabstract contract RewardsDistributor is IRewardsDistributor {\\n  using SafeCast for uint256;\\n\\n  // Manager of incentives\\n  address public immutable EMISSION_MANAGER;\\n  // Deprecated: This storage slot is kept for backwards compatibility purposes.\\n  address internal _emissionManager;\\n\\n  // Map of rewarded asset addresses and their data (assetAddress => assetData)\\n  mapping(address => RewardsDataTypes.AssetData) internal _assets;\\n\\n  // Map of reward assets (rewardAddress => enabled)\\n  mapping(address => bool) internal _isRewardEnabled;\\n\\n  // Rewards list\\n  address[] internal _rewardsList;\\n\\n  // Assets list\\n  address[] internal _assetsList;\\n\\n  modifier onlyEmissionManager() {\\n    require(msg.sender == EMISSION_MANAGER, 'ONLY_EMISSION_MANAGER');\\n    _;\\n  }\\n\\n  constructor(address emissionManager) {\\n    EMISSION_MANAGER = emissionManager;\\n  }\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function getRewardsData(\\n    address asset,\\n    address reward\\n  ) public view override returns (uint256, uint256, uint256, uint256) {\\n    return (\\n      _assets[asset].rewards[reward].index,\\n      _assets[asset].rewards[reward].emissionPerSecond,\\n      _assets[asset].rewards[reward].lastUpdateTimestamp,\\n      _assets[asset].rewards[reward].distributionEnd\\n    );\\n  }\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function getAssetIndex(\\n    address asset,\\n    address reward\\n  ) external view override returns (uint256, uint256) {\\n    RewardsDataTypes.RewardData storage rewardData = _assets[asset].rewards[reward];\\n    return\\n      _getAssetIndex(\\n        rewardData,\\n        IScaledBalanceToken(asset).scaledTotalSupply(),\\n        10 ** _assets[asset].decimals\\n      );\\n  }\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function getDistributionEnd(\\n    address asset,\\n    address reward\\n  ) external view override returns (uint256) {\\n    return _assets[asset].rewards[reward].distributionEnd;\\n  }\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function getRewardsByAsset(address asset) external view override returns (address[] memory) {\\n    uint128 rewardsCount = _assets[asset].availableRewardsCount;\\n    address[] memory availableRewards = new address[](rewardsCount);\\n\\n    for (uint128 i = 0; i < rewardsCount; i++) {\\n      availableRewards[i] = _assets[asset].availableRewards[i];\\n    }\\n    return availableRewards;\\n  }\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function getRewardsList() external view override returns (address[] memory) {\\n    return _rewardsList;\\n  }\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function getUserAssetIndex(\\n    address user,\\n    address asset,\\n    address reward\\n  ) public view override returns (uint256) {\\n    return _assets[asset].rewards[reward].usersData[user].index;\\n  }\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function getUserAccruedRewards(\\n    address user,\\n    address reward\\n  ) external view override returns (uint256) {\\n    uint256 totalAccrued;\\n    for (uint256 i = 0; i < _assetsList.length; i++) {\\n      totalAccrued += _assets[_assetsList[i]].rewards[reward].usersData[user].accrued;\\n    }\\n\\n    return totalAccrued;\\n  }\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function getUserRewards(\\n    address[] calldata assets,\\n    address user,\\n    address reward\\n  ) external view override returns (uint256) {\\n    return _getUserReward(user, reward, _getUserAssetBalances(assets, user));\\n  }\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function getAllUserRewards(\\n    address[] calldata assets,\\n    address user\\n  )\\n    external\\n    view\\n    override\\n    returns (address[] memory rewardsList, uint256[] memory unclaimedAmounts)\\n  {\\n    RewardsDataTypes.UserAssetBalance[] memory userAssetBalances = _getUserAssetBalances(\\n      assets,\\n      user\\n    );\\n    rewardsList = new address[](_rewardsList.length);\\n    unclaimedAmounts = new uint256[](rewardsList.length);\\n\\n    // Add unrealized rewards from user to unclaimedRewards\\n    for (uint256 i = 0; i < userAssetBalances.length; i++) {\\n      for (uint256 r = 0; r < rewardsList.length; r++) {\\n        rewardsList[r] = _rewardsList[r];\\n        unclaimedAmounts[r] += _assets[userAssetBalances[i].asset]\\n          .rewards[rewardsList[r]]\\n          .usersData[user]\\n          .accrued;\\n\\n        if (userAssetBalances[i].userBalance == 0) {\\n          continue;\\n        }\\n        unclaimedAmounts[r] += _getPendingRewards(user, rewardsList[r], userAssetBalances[i]);\\n      }\\n    }\\n    return (rewardsList, unclaimedAmounts);\\n  }\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function setDistributionEnd(\\n    address asset,\\n    address reward,\\n    uint32 newDistributionEnd\\n  ) external override onlyEmissionManager {\\n    uint256 oldDistributionEnd = _assets[asset].rewards[reward].distributionEnd;\\n    _assets[asset].rewards[reward].distributionEnd = newDistributionEnd;\\n\\n    emit AssetConfigUpdated(\\n      asset,\\n      reward,\\n      _assets[asset].rewards[reward].emissionPerSecond,\\n      _assets[asset].rewards[reward].emissionPerSecond,\\n      oldDistributionEnd,\\n      newDistributionEnd,\\n      _assets[asset].rewards[reward].index\\n    );\\n  }\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function setEmissionPerSecond(\\n    address asset,\\n    address[] calldata rewards,\\n    uint88[] calldata newEmissionsPerSecond\\n  ) external override onlyEmissionManager {\\n    require(rewards.length == newEmissionsPerSecond.length, 'INVALID_INPUT');\\n    for (uint256 i = 0; i < rewards.length; i++) {\\n      RewardsDataTypes.AssetData storage assetConfig = _assets[asset];\\n      RewardsDataTypes.RewardData storage rewardConfig = _assets[asset].rewards[rewards[i]];\\n      uint256 decimals = assetConfig.decimals;\\n      require(\\n        decimals != 0 && rewardConfig.lastUpdateTimestamp != 0,\\n        'DISTRIBUTION_DOES_NOT_EXIST'\\n      );\\n\\n      (uint256 newIndex, ) = _updateRewardData(\\n        rewardConfig,\\n        IScaledBalanceToken(asset).scaledTotalSupply(),\\n        10 ** decimals\\n      );\\n\\n      uint256 oldEmissionPerSecond = rewardConfig.emissionPerSecond;\\n      rewardConfig.emissionPerSecond = newEmissionsPerSecond[i];\\n\\n      emit AssetConfigUpdated(\\n        asset,\\n        rewards[i],\\n        oldEmissionPerSecond,\\n        newEmissionsPerSecond[i],\\n        rewardConfig.distributionEnd,\\n        rewardConfig.distributionEnd,\\n        newIndex\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @dev Configure the _assets for a specific emission\\n   * @param rewardsInput The array of each asset configuration\\n   **/\\n  function _configureAssets(RewardsDataTypes.RewardsConfigInput[] memory rewardsInput) internal {\\n    for (uint256 i = 0; i < rewardsInput.length; i++) {\\n      if (_assets[rewardsInput[i].asset].decimals == 0) {\\n        //never initialized before, adding to the list of assets\\n        _assetsList.push(rewardsInput[i].asset);\\n      }\\n\\n      uint256 decimals = _assets[rewardsInput[i].asset].decimals = IERC20Detailed(\\n        rewardsInput[i].asset\\n      ).decimals();\\n\\n      RewardsDataTypes.RewardData storage rewardConfig = _assets[rewardsInput[i].asset].rewards[\\n        rewardsInput[i].reward\\n      ];\\n\\n      // Add reward address to asset available rewards if latestUpdateTimestamp is zero\\n      if (rewardConfig.lastUpdateTimestamp == 0) {\\n        _assets[rewardsInput[i].asset].availableRewards[\\n          _assets[rewardsInput[i].asset].availableRewardsCount\\n        ] = rewardsInput[i].reward;\\n        _assets[rewardsInput[i].asset].availableRewardsCount++;\\n      }\\n\\n      // Add reward address to global rewards list if still not enabled\\n      if (_isRewardEnabled[rewardsInput[i].reward] == false) {\\n        _isRewardEnabled[rewardsInput[i].reward] = true;\\n        _rewardsList.push(rewardsInput[i].reward);\\n      }\\n\\n      // Due emissions is still zero, updates only latestUpdateTimestamp\\n      (uint256 newIndex, ) = _updateRewardData(\\n        rewardConfig,\\n        rewardsInput[i].totalSupply,\\n        10 ** decimals\\n      );\\n\\n      // Configure emission and distribution end of the reward per asset\\n      uint88 oldEmissionsPerSecond = rewardConfig.emissionPerSecond;\\n      uint32 oldDistributionEnd = rewardConfig.distributionEnd;\\n      rewardConfig.emissionPerSecond = rewardsInput[i].emissionPerSecond;\\n      rewardConfig.distributionEnd = rewardsInput[i].distributionEnd;\\n\\n      emit AssetConfigUpdated(\\n        rewardsInput[i].asset,\\n        rewardsInput[i].reward,\\n        oldEmissionsPerSecond,\\n        rewardsInput[i].emissionPerSecond,\\n        oldDistributionEnd,\\n        rewardsInput[i].distributionEnd,\\n        newIndex\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @dev Updates the state of the distribution for the specified reward\\n   * @param rewardData Storage pointer to the distribution reward config\\n   * @param totalSupply Current total of underlying assets for this distribution\\n   * @param assetUnit One unit of asset (10**decimals)\\n   * @return The new distribution index\\n   * @return True if the index was updated, false otherwise\\n   **/\\n  function _updateRewardData(\\n    RewardsDataTypes.RewardData storage rewardData,\\n    uint256 totalSupply,\\n    uint256 assetUnit\\n  ) internal returns (uint256, bool) {\\n    (uint256 oldIndex, uint256 newIndex) = _getAssetIndex(rewardData, totalSupply, assetUnit);\\n    bool indexUpdated;\\n    if (newIndex != oldIndex) {\\n      require(newIndex <= type(uint104).max, 'INDEX_OVERFLOW');\\n      indexUpdated = true;\\n\\n      //optimization: storing one after another saves one SSTORE\\n      rewardData.index = uint104(newIndex);\\n      rewardData.lastUpdateTimestamp = block.timestamp.toUint32();\\n    } else {\\n      rewardData.lastUpdateTimestamp = block.timestamp.toUint32();\\n    }\\n\\n    return (newIndex, indexUpdated);\\n  }\\n\\n  /**\\n   * @dev Updates the state of the distribution for the specific user\\n   * @param rewardData Storage pointer to the distribution reward config\\n   * @param user The address of the user\\n   * @param userBalance The user balance of the asset\\n   * @param newAssetIndex The new index of the asset distribution\\n   * @param assetUnit One unit of asset (10**decimals)\\n   * @return The rewards accrued since the last update\\n   **/\\n  function _updateUserData(\\n    RewardsDataTypes.RewardData storage rewardData,\\n    address user,\\n    uint256 userBalance,\\n    uint256 newAssetIndex,\\n    uint256 assetUnit\\n  ) internal returns (uint256, bool) {\\n    uint256 userIndex = rewardData.usersData[user].index;\\n    uint256 rewardsAccrued;\\n    bool dataUpdated;\\n    if ((dataUpdated = userIndex != newAssetIndex)) {\\n      // already checked for overflow in _updateRewardData\\n      rewardData.usersData[user].index = uint104(newAssetIndex);\\n      if (userBalance != 0) {\\n        rewardsAccrued = _getRewards(userBalance, newAssetIndex, userIndex, assetUnit);\\n\\n        rewardData.usersData[user].accrued += rewardsAccrued.toUint128();\\n      }\\n    }\\n    return (rewardsAccrued, dataUpdated);\\n  }\\n\\n  /**\\n   * @dev Iterates and accrues all the rewards for asset of the specific user\\n   * @param asset The address of the reference asset of the distribution\\n   * @param user The user address\\n   * @param userBalance The current user asset balance\\n   * @param totalSupply Total supply of the asset\\n   **/\\n  function _updateData(\\n    address asset,\\n    address user,\\n    uint256 userBalance,\\n    uint256 totalSupply\\n  ) internal {\\n    uint256 assetUnit;\\n    uint256 numAvailableRewards = _assets[asset].availableRewardsCount;\\n    unchecked {\\n      assetUnit = 10 ** _assets[asset].decimals;\\n    }\\n\\n    if (numAvailableRewards == 0) {\\n      return;\\n    }\\n    unchecked {\\n      for (uint128 r = 0; r < numAvailableRewards; r++) {\\n        address reward = _assets[asset].availableRewards[r];\\n        RewardsDataTypes.RewardData storage rewardData = _assets[asset].rewards[reward];\\n\\n        (uint256 newAssetIndex, bool rewardDataUpdated) = _updateRewardData(\\n          rewardData,\\n          totalSupply,\\n          assetUnit\\n        );\\n\\n        (uint256 rewardsAccrued, bool userDataUpdated) = _updateUserData(\\n          rewardData,\\n          user,\\n          userBalance,\\n          newAssetIndex,\\n          assetUnit\\n        );\\n\\n        if (rewardDataUpdated || userDataUpdated) {\\n          emit Accrued(asset, reward, user, newAssetIndex, newAssetIndex, rewardsAccrued);\\n        }\\n      }\\n    }\\n  }\\n\\n  /**\\n   * @dev Accrues all the rewards of the assets specified in the userAssetBalances list\\n   * @param user The address of the user\\n   * @param userAssetBalances List of structs with the user balance and total supply of a set of assets\\n   **/\\n  function _updateDataMultiple(\\n    address user,\\n    RewardsDataTypes.UserAssetBalance[] memory userAssetBalances\\n  ) internal {\\n    for (uint256 i = 0; i < userAssetBalances.length; i++) {\\n      _updateData(\\n        userAssetBalances[i].asset,\\n        user,\\n        userAssetBalances[i].userBalance,\\n        userAssetBalances[i].totalSupply\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @dev Return the accrued unclaimed amount of a reward from a user over a list of distribution\\n   * @param user The address of the user\\n   * @param reward The address of the reward token\\n   * @param userAssetBalances List of structs with the user balance and total supply of a set of assets\\n   * @return unclaimedRewards The accrued rewards for the user until the moment\\n   **/\\n  function _getUserReward(\\n    address user,\\n    address reward,\\n    RewardsDataTypes.UserAssetBalance[] memory userAssetBalances\\n  ) internal view returns (uint256 unclaimedRewards) {\\n    // Add unrealized rewards\\n    for (uint256 i = 0; i < userAssetBalances.length; i++) {\\n      if (userAssetBalances[i].userBalance == 0) {\\n        unclaimedRewards += _assets[userAssetBalances[i].asset]\\n          .rewards[reward]\\n          .usersData[user]\\n          .accrued;\\n      } else {\\n        unclaimedRewards +=\\n          _getPendingRewards(user, reward, userAssetBalances[i]) +\\n          _assets[userAssetBalances[i].asset].rewards[reward].usersData[user].accrued;\\n      }\\n    }\\n\\n    return unclaimedRewards;\\n  }\\n\\n  /**\\n   * @dev Calculates the pending (not yet accrued) rewards since the last user action\\n   * @param user The address of the user\\n   * @param reward The address of the reward token\\n   * @param userAssetBalance struct with the user balance and total supply of the incentivized asset\\n   * @return The pending rewards for the user since the last user action\\n   **/\\n  function _getPendingRewards(\\n    address user,\\n    address reward,\\n    RewardsDataTypes.UserAssetBalance memory userAssetBalance\\n  ) internal view returns (uint256) {\\n    RewardsDataTypes.RewardData storage rewardData = _assets[userAssetBalance.asset].rewards[\\n      reward\\n    ];\\n    uint256 assetUnit = 10 ** _assets[userAssetBalance.asset].decimals;\\n    (, uint256 nextIndex) = _getAssetIndex(rewardData, userAssetBalance.totalSupply, assetUnit);\\n\\n    return\\n      _getRewards(\\n        userAssetBalance.userBalance,\\n        nextIndex,\\n        rewardData.usersData[user].index,\\n        assetUnit\\n      );\\n  }\\n\\n  /**\\n   * @dev Internal function for the calculation of user's rewards on a distribution\\n   * @param userBalance Balance of the user asset on a distribution\\n   * @param reserveIndex Current index of the distribution\\n   * @param userIndex Index stored for the user, representation his staking moment\\n   * @param assetUnit One unit of asset (10**decimals)\\n   * @return The rewards\\n   **/\\n  function _getRewards(\\n    uint256 userBalance,\\n    uint256 reserveIndex,\\n    uint256 userIndex,\\n    uint256 assetUnit\\n  ) internal pure returns (uint256) {\\n    uint256 result = userBalance * (reserveIndex - userIndex);\\n    assembly {\\n      result := div(result, assetUnit)\\n    }\\n    return result;\\n  }\\n\\n  /**\\n   * @dev Calculates the next value of an specific distribution index, with validations\\n   * @param rewardData Storage pointer to the distribution reward config\\n   * @param totalSupply of the asset being rewarded\\n   * @param assetUnit One unit of asset (10**decimals)\\n   * @return The new index.\\n   **/\\n  function _getAssetIndex(\\n    RewardsDataTypes.RewardData storage rewardData,\\n    uint256 totalSupply,\\n    uint256 assetUnit\\n  ) internal view returns (uint256, uint256) {\\n    uint256 oldIndex = rewardData.index;\\n    uint256 distributionEnd = rewardData.distributionEnd;\\n    uint256 emissionPerSecond = rewardData.emissionPerSecond;\\n    uint256 lastUpdateTimestamp = rewardData.lastUpdateTimestamp;\\n\\n    if (\\n      emissionPerSecond == 0 ||\\n      totalSupply == 0 ||\\n      lastUpdateTimestamp == block.timestamp ||\\n      lastUpdateTimestamp >= distributionEnd\\n    ) {\\n      return (oldIndex, oldIndex);\\n    }\\n\\n    uint256 currentTimestamp = block.timestamp > distributionEnd\\n      ? distributionEnd\\n      : block.timestamp;\\n    uint256 timeDelta = currentTimestamp - lastUpdateTimestamp;\\n    uint256 firstTerm = emissionPerSecond * timeDelta * assetUnit;\\n    assembly {\\n      firstTerm := div(firstTerm, totalSupply)\\n    }\\n    return (oldIndex, (firstTerm + oldIndex));\\n  }\\n\\n  /**\\n   * @dev Get user balances and total supply of all the assets specified by the assets parameter\\n   * @param assets List of assets to retrieve user balance and total supply\\n   * @param user Address of the user\\n   * @return userAssetBalances contains a list of structs with user balance and total supply of the given assets\\n   */\\n  function _getUserAssetBalances(\\n    address[] calldata assets,\\n    address user\\n  ) internal view virtual returns (RewardsDataTypes.UserAssetBalance[] memory userAssetBalances);\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function getAssetDecimals(address asset) external view returns (uint8) {\\n    return _assets[asset].decimals;\\n  }\\n\\n  /// @inheritdoc IRewardsDistributor\\n  function getEmissionManager() external view returns (address) {\\n    return EMISSION_MANAGER;\\n  }\\n}\\n\",\"keccak256\":\"0x2ebbe04658923f2023c5ace6a75ce38090e41be420648e71ac51f2f4e5da2531\",\"license\":\"BUSL-1.1\"},\"contracts/rewards/interfaces/IRewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title IRewardsDistributor\\n * @author Aave\\n * @notice Defines the basic interface for a Rewards Distributor.\\n */\\ninterface IRewardsDistributor {\\n  /**\\n   * @dev Emitted when the configuration of the rewards of an asset is updated.\\n   * @param asset The address of the incentivized asset\\n   * @param reward The address of the reward token\\n   * @param oldEmission The old emissions per second value of the reward distribution\\n   * @param newEmission The new emissions per second value of the reward distribution\\n   * @param oldDistributionEnd The old end timestamp of the reward distribution\\n   * @param newDistributionEnd The new end timestamp of the reward distribution\\n   * @param assetIndex The index of the asset distribution\\n   */\\n  event AssetConfigUpdated(\\n    address indexed asset,\\n    address indexed reward,\\n    uint256 oldEmission,\\n    uint256 newEmission,\\n    uint256 oldDistributionEnd,\\n    uint256 newDistributionEnd,\\n    uint256 assetIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when rewards of an asset are accrued on behalf of a user.\\n   * @param asset The address of the incentivized asset\\n   * @param reward The address of the reward token\\n   * @param user The address of the user that rewards are accrued on behalf of\\n   * @param assetIndex The index of the asset distribution\\n   * @param userIndex The index of the asset distribution on behalf of the user\\n   * @param rewardsAccrued The amount of rewards accrued\\n   */\\n  event Accrued(\\n    address indexed asset,\\n    address indexed reward,\\n    address indexed user,\\n    uint256 assetIndex,\\n    uint256 userIndex,\\n    uint256 rewardsAccrued\\n  );\\n\\n  /**\\n   * @dev Sets the end date for the distribution\\n   * @param asset The asset to incentivize\\n   * @param reward The reward token that incentives the asset\\n   * @param newDistributionEnd The end date of the incentivization, in unix time format\\n   **/\\n  function setDistributionEnd(address asset, address reward, uint32 newDistributionEnd) external;\\n\\n  /**\\n   * @dev Sets the emission per second of a set of reward distributions\\n   * @param asset The asset is being incentivized\\n   * @param rewards List of reward addresses are being distributed\\n   * @param newEmissionsPerSecond List of new reward emissions per second\\n   */\\n  function setEmissionPerSecond(\\n    address asset,\\n    address[] calldata rewards,\\n    uint88[] calldata newEmissionsPerSecond\\n  ) external;\\n\\n  /**\\n   * @dev Gets the end date for the distribution\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The timestamp with the end of the distribution, in unix time format\\n   **/\\n  function getDistributionEnd(address asset, address reward) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the index of a user on a reward distribution\\n   * @param user Address of the user\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The current user asset index, not including new distributions\\n   **/\\n  function getUserAssetIndex(\\n    address user,\\n    address asset,\\n    address reward\\n  ) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the configuration of the distribution reward for a certain asset\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The index of the asset distribution\\n   * @return The emission per second of the reward distribution\\n   * @return The timestamp of the last update of the index\\n   * @return The timestamp of the distribution end\\n   **/\\n  function getRewardsData(\\n    address asset,\\n    address reward\\n  ) external view returns (uint256, uint256, uint256, uint256);\\n\\n  /**\\n   * @dev Calculates the next value of an specific distribution index, with validations.\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The old index of the asset distribution\\n   * @return The new index of the asset distribution\\n   **/\\n  function getAssetIndex(address asset, address reward) external view returns (uint256, uint256);\\n\\n  /**\\n   * @dev Returns the list of available reward token addresses of an incentivized asset\\n   * @param asset The incentivized asset\\n   * @return List of rewards addresses of the input asset\\n   **/\\n  function getRewardsByAsset(address asset) external view returns (address[] memory);\\n\\n  /**\\n   * @dev Returns the list of available reward addresses\\n   * @return List of rewards supported in this contract\\n   **/\\n  function getRewardsList() external view returns (address[] memory);\\n\\n  /**\\n   * @dev Returns the accrued rewards balance of a user, not including virtually accrued rewards since last distribution.\\n   * @param user The address of the user\\n   * @param reward The address of the reward token\\n   * @return Unclaimed rewards, not including new distributions\\n   **/\\n  function getUserAccruedRewards(address user, address reward) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns a single rewards balance of a user, including virtually accrued and unrealized claimable rewards.\\n   * @param assets List of incentivized assets to check eligible distributions\\n   * @param user The address of the user\\n   * @param reward The address of the reward token\\n   * @return The rewards amount\\n   **/\\n  function getUserRewards(\\n    address[] calldata assets,\\n    address user,\\n    address reward\\n  ) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns a list all rewards of a user, including already accrued and unrealized claimable rewards\\n   * @param assets List of incentivized assets to check eligible distributions\\n   * @param user The address of the user\\n   * @return The list of reward addresses\\n   * @return The list of unclaimed amount of rewards\\n   **/\\n  function getAllUserRewards(\\n    address[] calldata assets,\\n    address user\\n  ) external view returns (address[] memory, uint256[] memory);\\n\\n  /**\\n   * @dev Returns the decimals of an asset to calculate the distribution delta\\n   * @param asset The address to retrieve decimals\\n   * @return The decimals of an underlying asset\\n   */\\n  function getAssetDecimals(address asset) external view returns (uint8);\\n\\n  /**\\n   * @dev Returns the address of the emission manager\\n   * @return The address of the EmissionManager\\n   */\\n  function EMISSION_MANAGER() external view returns (address);\\n\\n  /**\\n   * @dev Returns the address of the emission manager.\\n   * Deprecated: This getter is maintained for compatibility purposes. Use the `EMISSION_MANAGER()` function instead.\\n   * @return The address of the EmissionManager\\n   */\\n  function getEmissionManager() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd393efd85f696114f9ab69e6bfdcbf3a2bcf16ef5002516d56a0f0359e3d9bba\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/ITransferStrategyBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface ITransferStrategyBase {\\n  event EmergencyWithdrawal(\\n    address indexed caller,\\n    address indexed token,\\n    address indexed to,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @dev Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation\\n   * @param to Account to transfer rewards\\n   * @param reward Address of the reward token\\n   * @param amount Amount to transfer to the \\\"to\\\" address parameter\\n   * @return Returns true bool if transfer logic succeeds\\n   */\\n  function performTransfer(address to, address reward, uint256 amount) external returns (bool);\\n\\n  /**\\n   * @return Returns the address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view returns (address);\\n\\n  /**\\n   * @return Returns the address of the Rewards admin\\n   */\\n  function getRewardsAdmin() external view returns (address);\\n\\n  /**\\n   * @dev Perform an emergency token withdrawal only callable by the Rewards admin\\n   * @param token Address of the token to withdraw funds from this contract\\n   * @param to Address of the recipient of the withdrawal\\n   * @param amount Amount of the withdrawal\\n   */\\n  function emergencyWithdrawal(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0xa52a6dc237879acbed7325787ce58238a3afd626fa2ed827d4e321d2e4ef51ad\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/libraries/RewardsDataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {ITransferStrategyBase} from '../interfaces/ITransferStrategyBase.sol';\\nimport {IEACAggregatorProxy} from '../../misc/interfaces/IEACAggregatorProxy.sol';\\n\\nlibrary RewardsDataTypes {\\n  struct RewardsConfigInput {\\n    uint88 emissionPerSecond;\\n    uint256 totalSupply;\\n    uint32 distributionEnd;\\n    address asset;\\n    address reward;\\n    ITransferStrategyBase transferStrategy;\\n    IEACAggregatorProxy rewardOracle;\\n  }\\n\\n  struct UserAssetBalance {\\n    address asset;\\n    uint256 userBalance;\\n    uint256 totalSupply;\\n  }\\n\\n  struct UserData {\\n    // Liquidity index of the reward distribution for the user\\n    uint104 index;\\n    // Amount of accrued rewards for the user since last user index update\\n    uint128 accrued;\\n  }\\n\\n  struct RewardData {\\n    // Liquidity index of the reward distribution\\n    uint104 index;\\n    // Amount of reward tokens distributed per second\\n    uint88 emissionPerSecond;\\n    // Timestamp of the last reward index update\\n    uint32 lastUpdateTimestamp;\\n    // The end of the distribution of rewards (in seconds)\\n    uint32 distributionEnd;\\n    // Map of user addresses and their rewards data (userAddress => userData)\\n    mapping(address => UserData) usersData;\\n  }\\n\\n  struct AssetData {\\n    // Map of reward token addresses and their data (rewardTokenAddress => rewardData)\\n    mapping(address => RewardData) rewards;\\n    // List of reward token addresses for the asset\\n    mapping(uint128 => address) availableRewards;\\n    // Count of reward tokens for the asset\\n    uint128 availableRewardsCount;\\n    // Number of decimals of the asset\\n    uint8 decimals;\\n  }\\n}\\n\",\"keccak256\":\"0xaaa314b4e9f40878f4fd20e99075fe60309c9e223a5b8c244aaaeb7229d8c318\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":37600,"contract":"contracts/rewards/RewardsDistributor.sol:RewardsDistributor","label":"_emissionManager","offset":0,"slot":"0","type":"t_address"},{"astId":37605,"contract":"contracts/rewards/RewardsDistributor.sol:RewardsDistributor","label":"_assets","offset":0,"slot":"1","type":"t_mapping(t_address,t_struct(AssetData)39706_storage)"},{"astId":37609,"contract":"contracts/rewards/RewardsDistributor.sol:RewardsDistributor","label":"_isRewardEnabled","offset":0,"slot":"2","type":"t_mapping(t_address,t_bool)"},{"astId":37612,"contract":"contracts/rewards/RewardsDistributor.sol:RewardsDistributor","label":"_rewardsList","offset":0,"slot":"3","type":"t_array(t_address)dyn_storage"},{"astId":37615,"contract":"contracts/rewards/RewardsDistributor.sol:RewardsDistributor","label":"_assetsList","offset":0,"slot":"4","type":"t_array(t_address)dyn_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_address)dyn_storage":{"base":"t_address","encoding":"dynamic_array","label":"address[]","numberOfBytes":"32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_struct(AssetData)39706_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct RewardsDataTypes.AssetData)","numberOfBytes":"32","value":"t_struct(AssetData)39706_storage"},"t_mapping(t_address,t_struct(RewardData)39692_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct RewardsDataTypes.RewardData)","numberOfBytes":"32","value":"t_struct(RewardData)39692_storage"},"t_mapping(t_address,t_struct(UserData)39678_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct RewardsDataTypes.UserData)","numberOfBytes":"32","value":"t_struct(UserData)39678_storage"},"t_mapping(t_uint128,t_address)":{"encoding":"mapping","key":"t_uint128","label":"mapping(uint128 => address)","numberOfBytes":"32","value":"t_address"},"t_struct(AssetData)39706_storage":{"encoding":"inplace","label":"struct RewardsDataTypes.AssetData","members":[{"astId":39697,"contract":"contracts/rewards/RewardsDistributor.sol:RewardsDistributor","label":"rewards","offset":0,"slot":"0","type":"t_mapping(t_address,t_struct(RewardData)39692_storage)"},{"astId":39701,"contract":"contracts/rewards/RewardsDistributor.sol:RewardsDistributor","label":"availableRewards","offset":0,"slot":"1","type":"t_mapping(t_uint128,t_address)"},{"astId":39703,"contract":"contracts/rewards/RewardsDistributor.sol:RewardsDistributor","label":"availableRewardsCount","offset":0,"slot":"2","type":"t_uint128"},{"astId":39705,"contract":"contracts/rewards/RewardsDistributor.sol:RewardsDistributor","label":"decimals","offset":16,"slot":"2","type":"t_uint8"}],"numberOfBytes":"96"},"t_struct(RewardData)39692_storage":{"encoding":"inplace","label":"struct RewardsDataTypes.RewardData","members":[{"astId":39680,"contract":"contracts/rewards/RewardsDistributor.sol:RewardsDistributor","label":"index","offset":0,"slot":"0","type":"t_uint104"},{"astId":39682,"contract":"contracts/rewards/RewardsDistributor.sol:RewardsDistributor","label":"emissionPerSecond","offset":13,"slot":"0","type":"t_uint88"},{"astId":39684,"contract":"contracts/rewards/RewardsDistributor.sol:RewardsDistributor","label":"lastUpdateTimestamp","offset":24,"slot":"0","type":"t_uint32"},{"astId":39686,"contract":"contracts/rewards/RewardsDistributor.sol:RewardsDistributor","label":"distributionEnd","offset":28,"slot":"0","type":"t_uint32"},{"astId":39691,"contract":"contracts/rewards/RewardsDistributor.sol:RewardsDistributor","label":"usersData","offset":0,"slot":"1","type":"t_mapping(t_address,t_struct(UserData)39678_storage)"}],"numberOfBytes":"64"},"t_struct(UserData)39678_storage":{"encoding":"inplace","label":"struct RewardsDataTypes.UserData","members":[{"astId":39675,"contract":"contracts/rewards/RewardsDistributor.sol:RewardsDistributor","label":"index","offset":0,"slot":"0","type":"t_uint104"},{"astId":39677,"contract":"contracts/rewards/RewardsDistributor.sol:RewardsDistributor","label":"accrued","offset":13,"slot":"0","type":"t_uint128"}],"numberOfBytes":"32"},"t_uint104":{"encoding":"inplace","label":"uint104","numberOfBytes":"13"},"t_uint128":{"encoding":"inplace","label":"uint128","numberOfBytes":"16"},"t_uint32":{"encoding":"inplace","label":"uint32","numberOfBytes":"4"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"},"t_uint88":{"encoding":"inplace","label":"uint88","numberOfBytes":"11"}}},"userdoc":{"kind":"user","methods":{},"notice":"Accounting contract to manage multiple staking distributions with multiple rewards","version":1}}},"contracts/rewards/interfaces/IEmissionManager.sol":{"IEmissionManager":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reward","type":"address"},{"indexed":true,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"EmissionAdminUpdated","type":"event"},{"inputs":[{"components":[{"internalType":"uint88","name":"emissionPerSecond","type":"uint88"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint32","name":"distributionEnd","type":"uint32"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"},{"internalType":"contract ITransferStrategyBase","name":"transferStrategy","type":"address"},{"internalType":"contract IEACAggregatorProxy","name":"rewardOracle","type":"address"}],"internalType":"struct RewardsDataTypes.RewardsConfigInput[]","name":"config","type":"tuple[]"}],"name":"configureAssets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"}],"name":"getEmissionAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardsController","outputs":[{"internalType":"contract IRewardsController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"claimer","type":"address"}],"name":"setClaimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"},{"internalType":"uint32","name":"newDistributionEnd","type":"uint32"}],"name":"setDistributionEnd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"},{"internalType":"address","name":"admin","type":"address"}],"name":"setEmissionAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address[]","name":"rewards","type":"address[]"},{"internalType":"uint88[]","name":"newEmissionsPerSecond","type":"uint88[]"}],"name":"setEmissionPerSecond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"},{"internalType":"contract IEACAggregatorProxy","name":"rewardOracle","type":"address"}],"name":"setRewardOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"controller","type":"address"}],"name":"setRewardsController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"},{"internalType":"contract ITransferStrategyBase","name":"transferStrategy","type":"address"}],"name":"setTransferStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","events":{"EmissionAdminUpdated(address,address,address)":{"details":"Emitted when the admin of a reward emission is updated.","params":{"newAdmin":"The address of the new emission admin","oldAdmin":"The address of the old emission admin","reward":"The address of the rewarding token"}}},"kind":"dev","methods":{"configureAssets((uint88,uint256,uint32,address,address,address,address)[])":{"details":"Configure assets to incentivize with an emission of rewards per second until the end of distribution.Only callable by the emission admin of the given rewards","params":{"config":"The assets configuration input, the list of structs contains the following fields:   uint104 emissionPerSecond: The emission per second following rewards unit decimals.   uint256 totalSupply: The total supply of the asset to incentivize   uint40 distributionEnd: The end of the distribution of the incentives for an asset   address asset: The asset address to incentivize   address reward: The reward token address   ITransferStrategy transferStrategy: The TransferStrategy address with the install hook and claim logic.   IEACAggregatorProxy rewardOracle: The Price Oracle of a reward to visualize the incentives at the UI Frontend.                                     Must follow Chainlink Aggregator IEACAggregatorProxy interface to be compatible."}},"getEmissionAdmin(address)":{"details":"Returns the admin of the given reward emission","params":{"reward":"The address of the reward token"},"returns":{"_0":"The address of the emission admin"}},"getRewardsController()":{"details":"Returns the rewards controller address","returns":{"_0":"The address of the RewardsController contract"}},"setClaimer(address,address)":{"details":"Whitelists an address to claim the rewards on behalf of another addressOnly callable by the owner of the EmissionManager","params":{"claimer":"The address of the claimer","user":"The address of the user"}},"setDistributionEnd(address,address,uint32)":{"details":"Sets the end date for the distributionOnly callable by the emission admin of the given reward","params":{"asset":"The asset to incentivize","newDistributionEnd":"The end date of the incentivization, in unix time format*","reward":"The reward token that incentives the asset"}},"setEmissionAdmin(address,address)":{"details":"Updates the admin of the reward emissionOnly callable by the owner of the EmissionManager","params":{"admin":"The address of the new admin of the emission","reward":"The address of the reward token"}},"setEmissionPerSecond(address,address[],uint88[])":{"details":"Sets the emission per second of a set of reward distributions","params":{"asset":"The asset is being incentivized","newEmissionsPerSecond":"List of new reward emissions per second","rewards":"List of reward addresses are being distributed"}},"setRewardOracle(address,address)":{"details":"Sets an Aave Oracle contract to enforce rewards with a source of value.Only callable by the emission admin of the given reward","params":{"reward":"The address of the reward to set the price aggregator","rewardOracle":"The address of price aggregator that follows IEACAggregatorProxy interface"}},"setRewardsController(address)":{"details":"Updates the address of the rewards controllerOnly callable by the owner of the EmissionManager","params":{"controller":"the address of the RewardsController contract"}},"setTransferStrategy(address,address)":{"details":"Sets a TransferStrategy logic contract that determines the logic of the rewards transferOnly callable by the emission admin of the given reward","params":{"reward":"The address of the reward token","transferStrategy":"The address of the TransferStrategy logic contract"}}},"title":"IEmissionManager","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"configureAssets((uint88,uint256,uint32,address,address,address,address)[])":"955c2ad7","getEmissionAdmin(address)":"529b1e87","getRewardsController()":"de262738","setClaimer(address,address)":"f5cf673b","setDistributionEnd(address,address,uint32)":"c5a7b538","setEmissionAdmin(address,address)":"a286c6b4","setEmissionPerSecond(address,address[],uint88[])":"f996868b","setRewardOracle(address,address)":"5453ba10","setRewardsController(address)":"bee36bb3","setTransferStrategy(address,address)":"e15ac623"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAdmin\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"EmissionAdminUpdated\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint88\",\"name\":\"emissionPerSecond\",\"type\":\"uint88\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"distributionEnd\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"contract ITransferStrategyBase\",\"name\":\"transferStrategy\",\"type\":\"address\"},{\"internalType\":\"contract IEACAggregatorProxy\",\"name\":\"rewardOracle\",\"type\":\"address\"}],\"internalType\":\"struct RewardsDataTypes.RewardsConfigInput[]\",\"name\":\"config\",\"type\":\"tuple[]\"}],\"name\":\"configureAssets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getEmissionAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardsController\",\"outputs\":[{\"internalType\":\"contract IRewardsController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"}],\"name\":\"setClaimer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"newDistributionEnd\",\"type\":\"uint32\"}],\"name\":\"setDistributionEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"setEmissionAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"rewards\",\"type\":\"address[]\"},{\"internalType\":\"uint88[]\",\"name\":\"newEmissionsPerSecond\",\"type\":\"uint88[]\"}],\"name\":\"setEmissionPerSecond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"contract IEACAggregatorProxy\",\"name\":\"rewardOracle\",\"type\":\"address\"}],\"name\":\"setRewardOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setRewardsController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"contract ITransferStrategyBase\",\"name\":\"transferStrategy\",\"type\":\"address\"}],\"name\":\"setTransferStrategy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"EmissionAdminUpdated(address,address,address)\":{\"details\":\"Emitted when the admin of a reward emission is updated.\",\"params\":{\"newAdmin\":\"The address of the new emission admin\",\"oldAdmin\":\"The address of the old emission admin\",\"reward\":\"The address of the rewarding token\"}}},\"kind\":\"dev\",\"methods\":{\"configureAssets((uint88,uint256,uint32,address,address,address,address)[])\":{\"details\":\"Configure assets to incentivize with an emission of rewards per second until the end of distribution.Only callable by the emission admin of the given rewards\",\"params\":{\"config\":\"The assets configuration input, the list of structs contains the following fields:   uint104 emissionPerSecond: The emission per second following rewards unit decimals.   uint256 totalSupply: The total supply of the asset to incentivize   uint40 distributionEnd: The end of the distribution of the incentives for an asset   address asset: The asset address to incentivize   address reward: The reward token address   ITransferStrategy transferStrategy: The TransferStrategy address with the install hook and claim logic.   IEACAggregatorProxy rewardOracle: The Price Oracle of a reward to visualize the incentives at the UI Frontend.                                     Must follow Chainlink Aggregator IEACAggregatorProxy interface to be compatible.\"}},\"getEmissionAdmin(address)\":{\"details\":\"Returns the admin of the given reward emission\",\"params\":{\"reward\":\"The address of the reward token\"},\"returns\":{\"_0\":\"The address of the emission admin\"}},\"getRewardsController()\":{\"details\":\"Returns the rewards controller address\",\"returns\":{\"_0\":\"The address of the RewardsController contract\"}},\"setClaimer(address,address)\":{\"details\":\"Whitelists an address to claim the rewards on behalf of another addressOnly callable by the owner of the EmissionManager\",\"params\":{\"claimer\":\"The address of the claimer\",\"user\":\"The address of the user\"}},\"setDistributionEnd(address,address,uint32)\":{\"details\":\"Sets the end date for the distributionOnly callable by the emission admin of the given reward\",\"params\":{\"asset\":\"The asset to incentivize\",\"newDistributionEnd\":\"The end date of the incentivization, in unix time format*\",\"reward\":\"The reward token that incentives the asset\"}},\"setEmissionAdmin(address,address)\":{\"details\":\"Updates the admin of the reward emissionOnly callable by the owner of the EmissionManager\",\"params\":{\"admin\":\"The address of the new admin of the emission\",\"reward\":\"The address of the reward token\"}},\"setEmissionPerSecond(address,address[],uint88[])\":{\"details\":\"Sets the emission per second of a set of reward distributions\",\"params\":{\"asset\":\"The asset is being incentivized\",\"newEmissionsPerSecond\":\"List of new reward emissions per second\",\"rewards\":\"List of reward addresses are being distributed\"}},\"setRewardOracle(address,address)\":{\"details\":\"Sets an Aave Oracle contract to enforce rewards with a source of value.Only callable by the emission admin of the given reward\",\"params\":{\"reward\":\"The address of the reward to set the price aggregator\",\"rewardOracle\":\"The address of price aggregator that follows IEACAggregatorProxy interface\"}},\"setRewardsController(address)\":{\"details\":\"Updates the address of the rewards controllerOnly callable by the owner of the EmissionManager\",\"params\":{\"controller\":\"the address of the RewardsController contract\"}},\"setTransferStrategy(address,address)\":{\"details\":\"Sets a TransferStrategy logic contract that determines the logic of the rewards transferOnly callable by the emission admin of the given reward\",\"params\":{\"reward\":\"The address of the reward token\",\"transferStrategy\":\"The address of the TransferStrategy logic contract\"}}},\"title\":\"IEmissionManager\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setRewardOracle(address,address)\":{\"notice\":\"At the moment of reward configuration, the Incentives Controller performs a check to see if the reward asset oracle is compatible with IEACAggregator proxy. This check is enforced for integrators to be able to show incentives at the current Aave UI without the need to setup an external price registry\"}},\"notice\":\"Defines the basic interface for the Emission Manager\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/rewards/interfaces/IEmissionManager.sol\":\"IEmissionManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"contracts/misc/interfaces/IEACAggregatorProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IEACAggregatorProxy {\\n  function decimals() external view returns (uint8);\\n\\n  function latestAnswer() external view returns (int256);\\n\\n  function latestTimestamp() external view returns (uint256);\\n\\n  function latestRound() external view returns (uint256);\\n\\n  function getAnswer(uint256 roundId) external view returns (int256);\\n\\n  function getTimestamp(uint256 roundId) external view returns (uint256);\\n\\n  event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 timestamp);\\n  event NewRound(uint256 indexed roundId, address indexed startedBy);\\n}\\n\",\"keccak256\":\"0x75bb34641419925730f87eeb122521b34cfd953b800212c362770ed1c7c5d719\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/IEmissionManager.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IEACAggregatorProxy} from '../../misc/interfaces/IEACAggregatorProxy.sol';\\nimport {RewardsDataTypes} from '../libraries/RewardsDataTypes.sol';\\nimport {ITransferStrategyBase} from './ITransferStrategyBase.sol';\\nimport {IRewardsController} from './IRewardsController.sol';\\n\\n/**\\n * @title IEmissionManager\\n * @author Aave\\n * @notice Defines the basic interface for the Emission Manager\\n */\\ninterface IEmissionManager {\\n  /**\\n   * @dev Emitted when the admin of a reward emission is updated.\\n   * @param reward The address of the rewarding token\\n   * @param oldAdmin The address of the old emission admin\\n   * @param newAdmin The address of the new emission admin\\n   */\\n  event EmissionAdminUpdated(\\n    address indexed reward,\\n    address indexed oldAdmin,\\n    address indexed newAdmin\\n  );\\n\\n  /**\\n   * @dev Configure assets to incentivize with an emission of rewards per second until the end of distribution.\\n   * @dev Only callable by the emission admin of the given rewards\\n   * @param config The assets configuration input, the list of structs contains the following fields:\\n   *   uint104 emissionPerSecond: The emission per second following rewards unit decimals.\\n   *   uint256 totalSupply: The total supply of the asset to incentivize\\n   *   uint40 distributionEnd: The end of the distribution of the incentives for an asset\\n   *   address asset: The asset address to incentivize\\n   *   address reward: The reward token address\\n   *   ITransferStrategy transferStrategy: The TransferStrategy address with the install hook and claim logic.\\n   *   IEACAggregatorProxy rewardOracle: The Price Oracle of a reward to visualize the incentives at the UI Frontend.\\n   *                                     Must follow Chainlink Aggregator IEACAggregatorProxy interface to be compatible.\\n   */\\n  function configureAssets(RewardsDataTypes.RewardsConfigInput[] memory config) external;\\n\\n  /**\\n   * @dev Sets a TransferStrategy logic contract that determines the logic of the rewards transfer\\n   * @dev Only callable by the emission admin of the given reward\\n   * @param reward The address of the reward token\\n   * @param transferStrategy The address of the TransferStrategy logic contract\\n   */\\n  function setTransferStrategy(address reward, ITransferStrategyBase transferStrategy) external;\\n\\n  /**\\n   * @dev Sets an Aave Oracle contract to enforce rewards with a source of value.\\n   * @dev Only callable by the emission admin of the given reward\\n   * @notice At the moment of reward configuration, the Incentives Controller performs\\n   * a check to see if the reward asset oracle is compatible with IEACAggregator proxy.\\n   * This check is enforced for integrators to be able to show incentives at\\n   * the current Aave UI without the need to setup an external price registry\\n   * @param reward The address of the reward to set the price aggregator\\n   * @param rewardOracle The address of price aggregator that follows IEACAggregatorProxy interface\\n   */\\n  function setRewardOracle(address reward, IEACAggregatorProxy rewardOracle) external;\\n\\n  /**\\n   * @dev Sets the end date for the distribution\\n   * @dev Only callable by the emission admin of the given reward\\n   * @param asset The asset to incentivize\\n   * @param reward The reward token that incentives the asset\\n   * @param newDistributionEnd The end date of the incentivization, in unix time format\\n   **/\\n  function setDistributionEnd(address asset, address reward, uint32 newDistributionEnd) external;\\n\\n  /**\\n   * @dev Sets the emission per second of a set of reward distributions\\n   * @param asset The asset is being incentivized\\n   * @param rewards List of reward addresses are being distributed\\n   * @param newEmissionsPerSecond List of new reward emissions per second\\n   */\\n  function setEmissionPerSecond(\\n    address asset,\\n    address[] calldata rewards,\\n    uint88[] calldata newEmissionsPerSecond\\n  ) external;\\n\\n  /**\\n   * @dev Whitelists an address to claim the rewards on behalf of another address\\n   * @dev Only callable by the owner of the EmissionManager\\n   * @param user The address of the user\\n   * @param claimer The address of the claimer\\n   */\\n  function setClaimer(address user, address claimer) external;\\n\\n  /**\\n   * @dev Updates the admin of the reward emission\\n   * @dev Only callable by the owner of the EmissionManager\\n   * @param reward The address of the reward token\\n   * @param admin The address of the new admin of the emission\\n   */\\n  function setEmissionAdmin(address reward, address admin) external;\\n\\n  /**\\n   * @dev Updates the address of the rewards controller\\n   * @dev Only callable by the owner of the EmissionManager\\n   * @param controller the address of the RewardsController contract\\n   */\\n  function setRewardsController(address controller) external;\\n\\n  /**\\n   * @dev Returns the rewards controller address\\n   * @return The address of the RewardsController contract\\n   */\\n  function getRewardsController() external view returns (IRewardsController);\\n\\n  /**\\n   * @dev Returns the admin of the given reward emission\\n   * @param reward The address of the reward token\\n   * @return The address of the emission admin\\n   */\\n  function getEmissionAdmin(address reward) external view returns (address);\\n}\\n\",\"keccak256\":\"0xa5b92dcfe94943caba4d3c542b5ddd25c27e37faa71da1f5efde3e1044ba0311\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/IRewardsController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IRewardsDistributor} from './IRewardsDistributor.sol';\\nimport {ITransferStrategyBase} from './ITransferStrategyBase.sol';\\nimport {IEACAggregatorProxy} from '../../misc/interfaces/IEACAggregatorProxy.sol';\\nimport {RewardsDataTypes} from '../libraries/RewardsDataTypes.sol';\\n\\n/**\\n * @title IRewardsController\\n * @author Aave\\n * @notice Defines the basic interface for a Rewards Controller.\\n */\\ninterface IRewardsController is IRewardsDistributor {\\n  /**\\n   * @dev Emitted when a new address is whitelisted as claimer of rewards on behalf of a user\\n   * @param user The address of the user\\n   * @param claimer The address of the claimer\\n   */\\n  event ClaimerSet(address indexed user, address indexed claimer);\\n\\n  /**\\n   * @dev Emitted when rewards are claimed\\n   * @param user The address of the user rewards has been claimed on behalf of\\n   * @param reward The address of the token reward is claimed\\n   * @param to The address of the receiver of the rewards\\n   * @param claimer The address of the claimer\\n   * @param amount The amount of rewards claimed\\n   */\\n  event RewardsClaimed(\\n    address indexed user,\\n    address indexed reward,\\n    address indexed to,\\n    address claimer,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @dev Emitted when a transfer strategy is installed for the reward distribution\\n   * @param reward The address of the token reward\\n   * @param transferStrategy The address of TransferStrategy contract\\n   */\\n  event TransferStrategyInstalled(address indexed reward, address indexed transferStrategy);\\n\\n  /**\\n   * @dev Emitted when the reward oracle is updated\\n   * @param reward The address of the token reward\\n   * @param rewardOracle The address of oracle\\n   */\\n  event RewardOracleUpdated(address indexed reward, address indexed rewardOracle);\\n\\n  /**\\n   * @dev Whitelists an address to claim the rewards on behalf of another address\\n   * @param user The address of the user\\n   * @param claimer The address of the claimer\\n   */\\n  function setClaimer(address user, address claimer) external;\\n\\n  /**\\n   * @dev Sets a TransferStrategy logic contract that determines the logic of the rewards transfer\\n   * @param reward The address of the reward token\\n   * @param transferStrategy The address of the TransferStrategy logic contract\\n   */\\n  function setTransferStrategy(address reward, ITransferStrategyBase transferStrategy) external;\\n\\n  /**\\n   * @dev Sets an Aave Oracle contract to enforce rewards with a source of value.\\n   * @notice At the moment of reward configuration, the Incentives Controller performs\\n   * a check to see if the reward asset oracle is compatible with IEACAggregator proxy.\\n   * This check is enforced for integrators to be able to show incentives at\\n   * the current Aave UI without the need to setup an external price registry\\n   * @param reward The address of the reward to set the price aggregator\\n   * @param rewardOracle The address of price aggregator that follows IEACAggregatorProxy interface\\n   */\\n  function setRewardOracle(address reward, IEACAggregatorProxy rewardOracle) external;\\n\\n  /**\\n   * @dev Get the price aggregator oracle address\\n   * @param reward The address of the reward\\n   * @return The price oracle of the reward\\n   */\\n  function getRewardOracle(address reward) external view returns (address);\\n\\n  /**\\n   * @dev Returns the whitelisted claimer for a certain address (0x0 if not set)\\n   * @param user The address of the user\\n   * @return The claimer address\\n   */\\n  function getClaimer(address user) external view returns (address);\\n\\n  /**\\n   * @dev Returns the Transfer Strategy implementation contract address being used for a reward address\\n   * @param reward The address of the reward\\n   * @return The address of the TransferStrategy contract\\n   */\\n  function getTransferStrategy(address reward) external view returns (address);\\n\\n  /**\\n   * @dev Configure assets to incentivize with an emission of rewards per second until the end of distribution.\\n   * @param config The assets configuration input, the list of structs contains the following fields:\\n   *   uint104 emissionPerSecond: The emission per second following rewards unit decimals.\\n   *   uint256 totalSupply: The total supply of the asset to incentivize\\n   *   uint40 distributionEnd: The end of the distribution of the incentives for an asset\\n   *   address asset: The asset address to incentivize\\n   *   address reward: The reward token address\\n   *   ITransferStrategy transferStrategy: The TransferStrategy address with the install hook and claim logic.\\n   *   IEACAggregatorProxy rewardOracle: The Price Oracle of a reward to visualize the incentives at the UI Frontend.\\n   *                                     Must follow Chainlink Aggregator IEACAggregatorProxy interface to be compatible.\\n   */\\n  function configureAssets(RewardsDataTypes.RewardsConfigInput[] memory config) external;\\n\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   **/\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n\\n  /**\\n   * @dev Claims reward for a user to the desired address, on all the assets of the pool, accumulating the pending rewards\\n   * @param assets List of assets to check eligible distributions before claiming rewards\\n   * @param amount The amount of rewards to claim\\n   * @param to The address that will be receiving the rewards\\n   * @param reward The address of the reward token\\n   * @return The amount of rewards claimed\\n   **/\\n  function claimRewards(\\n    address[] calldata assets,\\n    uint256 amount,\\n    address to,\\n    address reward\\n  ) external returns (uint256);\\n\\n  /**\\n   * @dev Claims reward for a user on behalf, on all the assets of the pool, accumulating the pending rewards. The\\n   * caller must be whitelisted via \\\"allowClaimOnBehalf\\\" function by the RewardsAdmin role manager\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @param amount The amount of rewards to claim\\n   * @param user The address to check and claim rewards\\n   * @param to The address that will be receiving the rewards\\n   * @param reward The address of the reward token\\n   * @return The amount of rewards claimed\\n   **/\\n  function claimRewardsOnBehalf(\\n    address[] calldata assets,\\n    uint256 amount,\\n    address user,\\n    address to,\\n    address reward\\n  ) external returns (uint256);\\n\\n  /**\\n   * @dev Claims reward for msg.sender, on all the assets of the pool, accumulating the pending rewards\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @param amount The amount of rewards to claim\\n   * @param reward The address of the reward token\\n   * @return The amount of rewards claimed\\n   **/\\n  function claimRewardsToSelf(\\n    address[] calldata assets,\\n    uint256 amount,\\n    address reward\\n  ) external returns (uint256);\\n\\n  /**\\n   * @dev Claims all rewards for a user to the desired address, on all the assets of the pool, accumulating the pending rewards\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @param to The address that will be receiving the rewards\\n   * @return rewardsList List of addresses of the reward tokens\\n   * @return claimedAmounts List that contains the claimed amount per reward, following same order as \\\"rewardList\\\"\\n   **/\\n  function claimAllRewards(\\n    address[] calldata assets,\\n    address to\\n  ) external returns (address[] memory rewardsList, uint256[] memory claimedAmounts);\\n\\n  /**\\n   * @dev Claims all rewards for a user on behalf, on all the assets of the pool, accumulating the pending rewards. The caller must\\n   * be whitelisted via \\\"allowClaimOnBehalf\\\" function by the RewardsAdmin role manager\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @param user The address to check and claim rewards\\n   * @param to The address that will be receiving the rewards\\n   * @return rewardsList List of addresses of the reward tokens\\n   * @return claimedAmounts List that contains the claimed amount per reward, following same order as \\\"rewardsList\\\"\\n   **/\\n  function claimAllRewardsOnBehalf(\\n    address[] calldata assets,\\n    address user,\\n    address to\\n  ) external returns (address[] memory rewardsList, uint256[] memory claimedAmounts);\\n\\n  /**\\n   * @dev Claims all reward for msg.sender, on all the assets of the pool, accumulating the pending rewards\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @return rewardsList List of addresses of the reward tokens\\n   * @return claimedAmounts List that contains the claimed amount per reward, following same order as \\\"rewardsList\\\"\\n   **/\\n  function claimAllRewardsToSelf(\\n    address[] calldata assets\\n  ) external returns (address[] memory rewardsList, uint256[] memory claimedAmounts);\\n}\\n\",\"keccak256\":\"0xe8a4d4ea914cbbcd3f6a4e5420a34d01f1379b2d445bd98fc7f8004c69894f5d\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/IRewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title IRewardsDistributor\\n * @author Aave\\n * @notice Defines the basic interface for a Rewards Distributor.\\n */\\ninterface IRewardsDistributor {\\n  /**\\n   * @dev Emitted when the configuration of the rewards of an asset is updated.\\n   * @param asset The address of the incentivized asset\\n   * @param reward The address of the reward token\\n   * @param oldEmission The old emissions per second value of the reward distribution\\n   * @param newEmission The new emissions per second value of the reward distribution\\n   * @param oldDistributionEnd The old end timestamp of the reward distribution\\n   * @param newDistributionEnd The new end timestamp of the reward distribution\\n   * @param assetIndex The index of the asset distribution\\n   */\\n  event AssetConfigUpdated(\\n    address indexed asset,\\n    address indexed reward,\\n    uint256 oldEmission,\\n    uint256 newEmission,\\n    uint256 oldDistributionEnd,\\n    uint256 newDistributionEnd,\\n    uint256 assetIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when rewards of an asset are accrued on behalf of a user.\\n   * @param asset The address of the incentivized asset\\n   * @param reward The address of the reward token\\n   * @param user The address of the user that rewards are accrued on behalf of\\n   * @param assetIndex The index of the asset distribution\\n   * @param userIndex The index of the asset distribution on behalf of the user\\n   * @param rewardsAccrued The amount of rewards accrued\\n   */\\n  event Accrued(\\n    address indexed asset,\\n    address indexed reward,\\n    address indexed user,\\n    uint256 assetIndex,\\n    uint256 userIndex,\\n    uint256 rewardsAccrued\\n  );\\n\\n  /**\\n   * @dev Sets the end date for the distribution\\n   * @param asset The asset to incentivize\\n   * @param reward The reward token that incentives the asset\\n   * @param newDistributionEnd The end date of the incentivization, in unix time format\\n   **/\\n  function setDistributionEnd(address asset, address reward, uint32 newDistributionEnd) external;\\n\\n  /**\\n   * @dev Sets the emission per second of a set of reward distributions\\n   * @param asset The asset is being incentivized\\n   * @param rewards List of reward addresses are being distributed\\n   * @param newEmissionsPerSecond List of new reward emissions per second\\n   */\\n  function setEmissionPerSecond(\\n    address asset,\\n    address[] calldata rewards,\\n    uint88[] calldata newEmissionsPerSecond\\n  ) external;\\n\\n  /**\\n   * @dev Gets the end date for the distribution\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The timestamp with the end of the distribution, in unix time format\\n   **/\\n  function getDistributionEnd(address asset, address reward) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the index of a user on a reward distribution\\n   * @param user Address of the user\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The current user asset index, not including new distributions\\n   **/\\n  function getUserAssetIndex(\\n    address user,\\n    address asset,\\n    address reward\\n  ) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the configuration of the distribution reward for a certain asset\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The index of the asset distribution\\n   * @return The emission per second of the reward distribution\\n   * @return The timestamp of the last update of the index\\n   * @return The timestamp of the distribution end\\n   **/\\n  function getRewardsData(\\n    address asset,\\n    address reward\\n  ) external view returns (uint256, uint256, uint256, uint256);\\n\\n  /**\\n   * @dev Calculates the next value of an specific distribution index, with validations.\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The old index of the asset distribution\\n   * @return The new index of the asset distribution\\n   **/\\n  function getAssetIndex(address asset, address reward) external view returns (uint256, uint256);\\n\\n  /**\\n   * @dev Returns the list of available reward token addresses of an incentivized asset\\n   * @param asset The incentivized asset\\n   * @return List of rewards addresses of the input asset\\n   **/\\n  function getRewardsByAsset(address asset) external view returns (address[] memory);\\n\\n  /**\\n   * @dev Returns the list of available reward addresses\\n   * @return List of rewards supported in this contract\\n   **/\\n  function getRewardsList() external view returns (address[] memory);\\n\\n  /**\\n   * @dev Returns the accrued rewards balance of a user, not including virtually accrued rewards since last distribution.\\n   * @param user The address of the user\\n   * @param reward The address of the reward token\\n   * @return Unclaimed rewards, not including new distributions\\n   **/\\n  function getUserAccruedRewards(address user, address reward) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns a single rewards balance of a user, including virtually accrued and unrealized claimable rewards.\\n   * @param assets List of incentivized assets to check eligible distributions\\n   * @param user The address of the user\\n   * @param reward The address of the reward token\\n   * @return The rewards amount\\n   **/\\n  function getUserRewards(\\n    address[] calldata assets,\\n    address user,\\n    address reward\\n  ) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns a list all rewards of a user, including already accrued and unrealized claimable rewards\\n   * @param assets List of incentivized assets to check eligible distributions\\n   * @param user The address of the user\\n   * @return The list of reward addresses\\n   * @return The list of unclaimed amount of rewards\\n   **/\\n  function getAllUserRewards(\\n    address[] calldata assets,\\n    address user\\n  ) external view returns (address[] memory, uint256[] memory);\\n\\n  /**\\n   * @dev Returns the decimals of an asset to calculate the distribution delta\\n   * @param asset The address to retrieve decimals\\n   * @return The decimals of an underlying asset\\n   */\\n  function getAssetDecimals(address asset) external view returns (uint8);\\n\\n  /**\\n   * @dev Returns the address of the emission manager\\n   * @return The address of the EmissionManager\\n   */\\n  function EMISSION_MANAGER() external view returns (address);\\n\\n  /**\\n   * @dev Returns the address of the emission manager.\\n   * Deprecated: This getter is maintained for compatibility purposes. Use the `EMISSION_MANAGER()` function instead.\\n   * @return The address of the EmissionManager\\n   */\\n  function getEmissionManager() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd393efd85f696114f9ab69e6bfdcbf3a2bcf16ef5002516d56a0f0359e3d9bba\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/ITransferStrategyBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface ITransferStrategyBase {\\n  event EmergencyWithdrawal(\\n    address indexed caller,\\n    address indexed token,\\n    address indexed to,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @dev Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation\\n   * @param to Account to transfer rewards\\n   * @param reward Address of the reward token\\n   * @param amount Amount to transfer to the \\\"to\\\" address parameter\\n   * @return Returns true bool if transfer logic succeeds\\n   */\\n  function performTransfer(address to, address reward, uint256 amount) external returns (bool);\\n\\n  /**\\n   * @return Returns the address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view returns (address);\\n\\n  /**\\n   * @return Returns the address of the Rewards admin\\n   */\\n  function getRewardsAdmin() external view returns (address);\\n\\n  /**\\n   * @dev Perform an emergency token withdrawal only callable by the Rewards admin\\n   * @param token Address of the token to withdraw funds from this contract\\n   * @param to Address of the recipient of the withdrawal\\n   * @param amount Amount of the withdrawal\\n   */\\n  function emergencyWithdrawal(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0xa52a6dc237879acbed7325787ce58238a3afd626fa2ed827d4e321d2e4ef51ad\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/libraries/RewardsDataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {ITransferStrategyBase} from '../interfaces/ITransferStrategyBase.sol';\\nimport {IEACAggregatorProxy} from '../../misc/interfaces/IEACAggregatorProxy.sol';\\n\\nlibrary RewardsDataTypes {\\n  struct RewardsConfigInput {\\n    uint88 emissionPerSecond;\\n    uint256 totalSupply;\\n    uint32 distributionEnd;\\n    address asset;\\n    address reward;\\n    ITransferStrategyBase transferStrategy;\\n    IEACAggregatorProxy rewardOracle;\\n  }\\n\\n  struct UserAssetBalance {\\n    address asset;\\n    uint256 userBalance;\\n    uint256 totalSupply;\\n  }\\n\\n  struct UserData {\\n    // Liquidity index of the reward distribution for the user\\n    uint104 index;\\n    // Amount of accrued rewards for the user since last user index update\\n    uint128 accrued;\\n  }\\n\\n  struct RewardData {\\n    // Liquidity index of the reward distribution\\n    uint104 index;\\n    // Amount of reward tokens distributed per second\\n    uint88 emissionPerSecond;\\n    // Timestamp of the last reward index update\\n    uint32 lastUpdateTimestamp;\\n    // The end of the distribution of rewards (in seconds)\\n    uint32 distributionEnd;\\n    // Map of user addresses and their rewards data (userAddress => userData)\\n    mapping(address => UserData) usersData;\\n  }\\n\\n  struct AssetData {\\n    // Map of reward token addresses and their data (rewardTokenAddress => rewardData)\\n    mapping(address => RewardData) rewards;\\n    // List of reward token addresses for the asset\\n    mapping(uint128 => address) availableRewards;\\n    // Count of reward tokens for the asset\\n    uint128 availableRewardsCount;\\n    // Number of decimals of the asset\\n    uint8 decimals;\\n  }\\n}\\n\",\"keccak256\":\"0xaaa314b4e9f40878f4fd20e99075fe60309c9e223a5b8c244aaaeb7229d8c318\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"setRewardOracle(address,address)":{"notice":"At the moment of reward configuration, the Incentives Controller performs a check to see if the reward asset oracle is compatible with IEACAggregator proxy. This check is enforced for integrators to be able to show incentives at the current Aave UI without the need to setup an external price registry"}},"notice":"Defines the basic interface for the Emission Manager","version":1}}},"contracts/rewards/interfaces/IPullRewardsTransferStrategy.sol":{"IPullRewardsTransferStrategy":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdrawal","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardsAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardsVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"reward","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"performTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave*","kind":"dev","methods":{"emergencyWithdrawal(address,address,uint256)":{"details":"Perform an emergency token withdrawal only callable by the Rewards admin","params":{"amount":"Amount of the withdrawal","to":"Address of the recipient of the withdrawal","token":"Address of the token to withdraw funds from this contract"}},"getIncentivesController()":{"returns":{"_0":"Returns the address of the Incentives Controller"}},"getRewardsAdmin()":{"returns":{"_0":"Returns the address of the Rewards admin"}},"getRewardsVault()":{"returns":{"_0":"Address of the rewards vault"}},"performTransfer(address,address,uint256)":{"details":"Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation","params":{"amount":"Amount to transfer to the \"to\" address parameter","reward":"Address of the reward token","to":"Account to transfer rewards"},"returns":{"_0":"Returns true bool if transfer logic succeeds"}}},"title":"IPullRewardsTransferStrategy","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"emergencyWithdrawal(address,address,uint256)":"8d8e5da7","getIncentivesController()":"75d26413","getRewardsAdmin()":"c6255443","getRewardsVault()":"e23ddec5","performTransfer(address,address,uint256)":"16beb982"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"EmergencyWithdrawal\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emergencyWithdrawal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardsAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardsVault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"performTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave*\",\"kind\":\"dev\",\"methods\":{\"emergencyWithdrawal(address,address,uint256)\":{\"details\":\"Perform an emergency token withdrawal only callable by the Rewards admin\",\"params\":{\"amount\":\"Amount of the withdrawal\",\"to\":\"Address of the recipient of the withdrawal\",\"token\":\"Address of the token to withdraw funds from this contract\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"Returns the address of the Incentives Controller\"}},\"getRewardsAdmin()\":{\"returns\":{\"_0\":\"Returns the address of the Rewards admin\"}},\"getRewardsVault()\":{\"returns\":{\"_0\":\"Address of the rewards vault\"}},\"performTransfer(address,address,uint256)\":{\"details\":\"Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation\",\"params\":{\"amount\":\"Amount to transfer to the \\\"to\\\" address parameter\",\"reward\":\"Address of the reward token\",\"to\":\"Account to transfer rewards\"},\"returns\":{\"_0\":\"Returns true bool if transfer logic succeeds\"}}},\"title\":\"IPullRewardsTransferStrategy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/rewards/interfaces/IPullRewardsTransferStrategy.sol\":\"IPullRewardsTransferStrategy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"contracts/rewards/interfaces/IPullRewardsTransferStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {ITransferStrategyBase} from './ITransferStrategyBase.sol';\\n\\n/**\\n * @title IPullRewardsTransferStrategy\\n * @author Aave\\n **/\\ninterface IPullRewardsTransferStrategy is ITransferStrategyBase {\\n  /**\\n   * @return Address of the rewards vault\\n   */\\n  function getRewardsVault() external view returns (address);\\n}\\n\",\"keccak256\":\"0x072fd713c1c4e5d652ec40131beab6438b63817a1657cdd51e0c2cbc9d17b8d0\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/ITransferStrategyBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface ITransferStrategyBase {\\n  event EmergencyWithdrawal(\\n    address indexed caller,\\n    address indexed token,\\n    address indexed to,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @dev Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation\\n   * @param to Account to transfer rewards\\n   * @param reward Address of the reward token\\n   * @param amount Amount to transfer to the \\\"to\\\" address parameter\\n   * @return Returns true bool if transfer logic succeeds\\n   */\\n  function performTransfer(address to, address reward, uint256 amount) external returns (bool);\\n\\n  /**\\n   * @return Returns the address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view returns (address);\\n\\n  /**\\n   * @return Returns the address of the Rewards admin\\n   */\\n  function getRewardsAdmin() external view returns (address);\\n\\n  /**\\n   * @dev Perform an emergency token withdrawal only callable by the Rewards admin\\n   * @param token Address of the token to withdraw funds from this contract\\n   * @param to Address of the recipient of the withdrawal\\n   * @param amount Amount of the withdrawal\\n   */\\n  function emergencyWithdrawal(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0xa52a6dc237879acbed7325787ce58238a3afd626fa2ed827d4e321d2e4ef51ad\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/rewards/interfaces/IRewardsController.sol":{"IRewardsController":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"reward","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"assetIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"userIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardsAccrued","type":"uint256"}],"name":"Accrued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"reward","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldEmission","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newEmission","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldDistributionEnd","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDistributionEnd","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"assetIndex","type":"uint256"}],"name":"AssetConfigUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"claimer","type":"address"}],"name":"ClaimerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reward","type":"address"},{"indexed":true,"internalType":"address","name":"rewardOracle","type":"address"}],"name":"RewardOracleUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"reward","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"address","name":"claimer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"reward","type":"address"},{"indexed":true,"internalType":"address","name":"transferStrategy","type":"address"}],"name":"TransferStrategyInstalled","type":"event"},{"inputs":[],"name":"EMISSION_MANAGER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"address","name":"to","type":"address"}],"name":"claimAllRewards","outputs":[{"internalType":"address[]","name":"rewardsList","type":"address[]"},{"internalType":"uint256[]","name":"claimedAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"claimAllRewardsOnBehalf","outputs":[{"internalType":"address[]","name":"rewardsList","type":"address[]"},{"internalType":"uint256[]","name":"claimedAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"}],"name":"claimAllRewardsToSelf","outputs":[{"internalType":"address[]","name":"rewardsList","type":"address[]"},{"internalType":"uint256[]","name":"claimedAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"claimRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"claimRewardsOnBehalf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"reward","type":"address"}],"name":"claimRewardsToSelf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint88","name":"emissionPerSecond","type":"uint88"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint32","name":"distributionEnd","type":"uint32"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"},{"internalType":"contract ITransferStrategyBase","name":"transferStrategy","type":"address"},{"internalType":"contract IEACAggregatorProxy","name":"rewardOracle","type":"address"}],"internalType":"struct RewardsDataTypes.RewardsConfigInput[]","name":"config","type":"tuple[]"}],"name":"configureAssets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"address","name":"user","type":"address"}],"name":"getAllUserRewards","outputs":[{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getAssetDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"getAssetIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getClaimer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"getDistributionEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEmissionManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"}],"name":"getRewardOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getRewardsByAsset","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"getRewardsData","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardsList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"}],"name":"getTransferStrategy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"getUserAccruedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"getUserAssetIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"getUserRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"userBalance","type":"uint256"}],"name":"handleAction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"claimer","type":"address"}],"name":"setClaimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"},{"internalType":"uint32","name":"newDistributionEnd","type":"uint32"}],"name":"setDistributionEnd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address[]","name":"rewards","type":"address[]"},{"internalType":"uint88[]","name":"newEmissionsPerSecond","type":"uint88[]"}],"name":"setEmissionPerSecond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"},{"internalType":"contract IEACAggregatorProxy","name":"rewardOracle","type":"address"}],"name":"setRewardOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"reward","type":"address"},{"internalType":"contract ITransferStrategyBase","name":"transferStrategy","type":"address"}],"name":"setTransferStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","events":{"ClaimerSet(address,address)":{"details":"Emitted when a new address is whitelisted as claimer of rewards on behalf of a user","params":{"claimer":"The address of the claimer","user":"The address of the user"}},"RewardOracleUpdated(address,address)":{"details":"Emitted when the reward oracle is updated","params":{"reward":"The address of the token reward","rewardOracle":"The address of oracle"}},"RewardsClaimed(address,address,address,address,uint256)":{"details":"Emitted when rewards are claimed","params":{"amount":"The amount of rewards claimed","claimer":"The address of the claimer","reward":"The address of the token reward is claimed","to":"The address of the receiver of the rewards","user":"The address of the user rewards has been claimed on behalf of"}},"TransferStrategyInstalled(address,address)":{"details":"Emitted when a transfer strategy is installed for the reward distribution","params":{"reward":"The address of the token reward","transferStrategy":"The address of TransferStrategy contract"}}},"kind":"dev","methods":{"EMISSION_MANAGER()":{"details":"Returns the address of the emission manager","returns":{"_0":"The address of the EmissionManager"}},"claimAllRewards(address[],address)":{"details":"Claims all rewards for a user to the desired address, on all the assets of the pool, accumulating the pending rewards","params":{"assets":"The list of assets to check eligible distributions before claiming rewards","to":"The address that will be receiving the rewards"},"returns":{"claimedAmounts":"List that contains the claimed amount per reward, following same order as \"rewardList\"*","rewardsList":"List of addresses of the reward tokens"}},"claimAllRewardsOnBehalf(address[],address,address)":{"details":"Claims all rewards for a user on behalf, on all the assets of the pool, accumulating the pending rewards. The caller must be whitelisted via \"allowClaimOnBehalf\" function by the RewardsAdmin role manager","params":{"assets":"The list of assets to check eligible distributions before claiming rewards","to":"The address that will be receiving the rewards","user":"The address to check and claim rewards"},"returns":{"claimedAmounts":"List that contains the claimed amount per reward, following same order as \"rewardsList\"*","rewardsList":"List of addresses of the reward tokens"}},"claimAllRewardsToSelf(address[])":{"details":"Claims all reward for msg.sender, on all the assets of the pool, accumulating the pending rewards","params":{"assets":"The list of assets to check eligible distributions before claiming rewards"},"returns":{"claimedAmounts":"List that contains the claimed amount per reward, following same order as \"rewardsList\"*","rewardsList":"List of addresses of the reward tokens"}},"claimRewards(address[],uint256,address,address)":{"details":"Claims reward for a user to the desired address, on all the assets of the pool, accumulating the pending rewards","params":{"amount":"The amount of rewards to claim","assets":"List of assets to check eligible distributions before claiming rewards","reward":"The address of the reward token","to":"The address that will be receiving the rewards"},"returns":{"_0":"The amount of rewards claimed*"}},"claimRewardsOnBehalf(address[],uint256,address,address,address)":{"details":"Claims reward for a user on behalf, on all the assets of the pool, accumulating the pending rewards. The caller must be whitelisted via \"allowClaimOnBehalf\" function by the RewardsAdmin role manager","params":{"amount":"The amount of rewards to claim","assets":"The list of assets to check eligible distributions before claiming rewards","reward":"The address of the reward token","to":"The address that will be receiving the rewards","user":"The address to check and claim rewards"},"returns":{"_0":"The amount of rewards claimed*"}},"claimRewardsToSelf(address[],uint256,address)":{"details":"Claims reward for msg.sender, on all the assets of the pool, accumulating the pending rewards","params":{"amount":"The amount of rewards to claim","assets":"The list of assets to check eligible distributions before claiming rewards","reward":"The address of the reward token"},"returns":{"_0":"The amount of rewards claimed*"}},"configureAssets((uint88,uint256,uint32,address,address,address,address)[])":{"details":"Configure assets to incentivize with an emission of rewards per second until the end of distribution.","params":{"config":"The assets configuration input, the list of structs contains the following fields:   uint104 emissionPerSecond: The emission per second following rewards unit decimals.   uint256 totalSupply: The total supply of the asset to incentivize   uint40 distributionEnd: The end of the distribution of the incentives for an asset   address asset: The asset address to incentivize   address reward: The reward token address   ITransferStrategy transferStrategy: The TransferStrategy address with the install hook and claim logic.   IEACAggregatorProxy rewardOracle: The Price Oracle of a reward to visualize the incentives at the UI Frontend.                                     Must follow Chainlink Aggregator IEACAggregatorProxy interface to be compatible."}},"getAllUserRewards(address[],address)":{"details":"Returns a list all rewards of a user, including already accrued and unrealized claimable rewards","params":{"assets":"List of incentivized assets to check eligible distributions","user":"The address of the user"},"returns":{"_0":"The list of reward addresses","_1":"The list of unclaimed amount of rewards*"}},"getAssetDecimals(address)":{"details":"Returns the decimals of an asset to calculate the distribution delta","params":{"asset":"The address to retrieve decimals"},"returns":{"_0":"The decimals of an underlying asset"}},"getAssetIndex(address,address)":{"details":"Calculates the next value of an specific distribution index, with validations.","params":{"asset":"The incentivized asset","reward":"The reward token of the incentivized asset"},"returns":{"_0":"The old index of the asset distribution","_1":"The new index of the asset distribution*"}},"getClaimer(address)":{"details":"Returns the whitelisted claimer for a certain address (0x0 if not set)","params":{"user":"The address of the user"},"returns":{"_0":"The claimer address"}},"getDistributionEnd(address,address)":{"details":"Gets the end date for the distribution","params":{"asset":"The incentivized asset","reward":"The reward token of the incentivized asset"},"returns":{"_0":"The timestamp with the end of the distribution, in unix time format*"}},"getEmissionManager()":{"details":"Returns the address of the emission manager. Deprecated: This getter is maintained for compatibility purposes. Use the `EMISSION_MANAGER()` function instead.","returns":{"_0":"The address of the EmissionManager"}},"getRewardOracle(address)":{"details":"Get the price aggregator oracle address","params":{"reward":"The address of the reward"},"returns":{"_0":"The price oracle of the reward"}},"getRewardsByAsset(address)":{"details":"Returns the list of available reward token addresses of an incentivized asset","params":{"asset":"The incentivized asset"},"returns":{"_0":"List of rewards addresses of the input asset*"}},"getRewardsData(address,address)":{"details":"Returns the configuration of the distribution reward for a certain asset","params":{"asset":"The incentivized asset","reward":"The reward token of the incentivized asset"},"returns":{"_0":"The index of the asset distribution","_1":"The emission per second of the reward distribution","_2":"The timestamp of the last update of the index","_3":"The timestamp of the distribution end*"}},"getRewardsList()":{"details":"Returns the list of available reward addresses","returns":{"_0":"List of rewards supported in this contract*"}},"getTransferStrategy(address)":{"details":"Returns the Transfer Strategy implementation contract address being used for a reward address","params":{"reward":"The address of the reward"},"returns":{"_0":"The address of the TransferStrategy contract"}},"getUserAccruedRewards(address,address)":{"details":"Returns the accrued rewards balance of a user, not including virtually accrued rewards since last distribution.","params":{"reward":"The address of the reward token","user":"The address of the user"},"returns":{"_0":"Unclaimed rewards, not including new distributions*"}},"getUserAssetIndex(address,address,address)":{"details":"Returns the index of a user on a reward distribution","params":{"asset":"The incentivized asset","reward":"The reward token of the incentivized asset","user":"Address of the user"},"returns":{"_0":"The current user asset index, not including new distributions*"}},"getUserRewards(address[],address,address)":{"details":"Returns a single rewards balance of a user, including virtually accrued and unrealized claimable rewards.","params":{"assets":"List of incentivized assets to check eligible distributions","reward":"The address of the reward token","user":"The address of the user"},"returns":{"_0":"The rewards amount*"}},"handleAction(address,uint256,uint256)":{"details":"Called by the corresponding asset on transfer hook in order to update the rewards distribution.The units of `totalSupply` and `userBalance` should be the same.","params":{"totalSupply":"The total supply of the asset prior to user balance change","user":"The address of the user whose asset balance has changed","userBalance":"The previous user balance prior to balance change*"}},"setClaimer(address,address)":{"details":"Whitelists an address to claim the rewards on behalf of another address","params":{"claimer":"The address of the claimer","user":"The address of the user"}},"setDistributionEnd(address,address,uint32)":{"details":"Sets the end date for the distribution","params":{"asset":"The asset to incentivize","newDistributionEnd":"The end date of the incentivization, in unix time format*","reward":"The reward token that incentives the asset"}},"setEmissionPerSecond(address,address[],uint88[])":{"details":"Sets the emission per second of a set of reward distributions","params":{"asset":"The asset is being incentivized","newEmissionsPerSecond":"List of new reward emissions per second","rewards":"List of reward addresses are being distributed"}},"setRewardOracle(address,address)":{"details":"Sets an Aave Oracle contract to enforce rewards with a source of value.","params":{"reward":"The address of the reward to set the price aggregator","rewardOracle":"The address of price aggregator that follows IEACAggregatorProxy interface"}},"setTransferStrategy(address,address)":{"details":"Sets a TransferStrategy logic contract that determines the logic of the rewards transfer","params":{"reward":"The address of the reward token","transferStrategy":"The address of the TransferStrategy logic contract"}}},"title":"IRewardsController","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"EMISSION_MANAGER()":"cbcbb507","claimAllRewards(address[],address)":"bb492bf5","claimAllRewardsOnBehalf(address[],address,address)":"9ff55db9","claimAllRewardsToSelf(address[])":"bf90f63a","claimRewards(address[],uint256,address,address)":"236300dc","claimRewardsOnBehalf(address[],uint256,address,address,address)":"33028b99","claimRewardsToSelf(address[],uint256,address)":"57b89883","configureAssets((uint88,uint256,uint32,address,address,address,address)[])":"955c2ad7","getAllUserRewards(address[],address)":"4c0369c3","getAssetDecimals(address)":"9efd6f72","getAssetIndex(address,address)":"886fe70b","getClaimer(address)":"74d945ec","getDistributionEnd(address,address)":"1b839c77","getEmissionManager()":"92074b08","getRewardOracle(address)":"2a17bf60","getRewardsByAsset(address)":"6657732f","getRewardsData(address,address)":"7eff4ba8","getRewardsList()":"b45ac1a9","getTransferStrategy(address)":"5f130b24","getUserAccruedRewards(address,address)":"b022418c","getUserAssetIndex(address,address,address)":"533f542a","getUserRewards(address[],address,address)":"70674ab9","handleAction(address,uint256,uint256)":"31873e2e","setClaimer(address,address)":"f5cf673b","setDistributionEnd(address,address,uint32)":"c5a7b538","setEmissionPerSecond(address,address[],uint88[])":"f996868b","setRewardOracle(address,address)":"5453ba10","setTransferStrategy(address,address)":"e15ac623"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assetIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"userIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewardsAccrued\",\"type\":\"uint256\"}],\"name\":\"Accrued\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldEmission\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newEmission\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldDistributionEnd\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newDistributionEnd\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assetIndex\",\"type\":\"uint256\"}],\"name\":\"AssetConfigUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"}],\"name\":\"ClaimerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rewardOracle\",\"type\":\"address\"}],\"name\":\"RewardOracleUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RewardsClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transferStrategy\",\"type\":\"address\"}],\"name\":\"TransferStrategyInstalled\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"EMISSION_MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"claimAllRewards\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"rewardsList\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"claimedAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"claimAllRewardsOnBehalf\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"rewardsList\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"claimedAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"}],\"name\":\"claimAllRewardsToSelf\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"rewardsList\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"claimedAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"claimRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"claimRewardsOnBehalf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"claimRewardsToSelf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint88\",\"name\":\"emissionPerSecond\",\"type\":\"uint88\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"distributionEnd\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"contract ITransferStrategyBase\",\"name\":\"transferStrategy\",\"type\":\"address\"},{\"internalType\":\"contract IEACAggregatorProxy\",\"name\":\"rewardOracle\",\"type\":\"address\"}],\"internalType\":\"struct RewardsDataTypes.RewardsConfigInput[]\",\"name\":\"config\",\"type\":\"tuple[]\"}],\"name\":\"configureAssets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getAllUserRewards\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getAssetDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getAssetIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getClaimer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getDistributionEnd\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEmissionManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getRewardOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getRewardsByAsset\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getRewardsData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardsList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getTransferStrategy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getUserAccruedRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getUserAssetIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getUserRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userBalance\",\"type\":\"uint256\"}],\"name\":\"handleAction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"}],\"name\":\"setClaimer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"newDistributionEnd\",\"type\":\"uint32\"}],\"name\":\"setDistributionEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"rewards\",\"type\":\"address[]\"},{\"internalType\":\"uint88[]\",\"name\":\"newEmissionsPerSecond\",\"type\":\"uint88[]\"}],\"name\":\"setEmissionPerSecond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"contract IEACAggregatorProxy\",\"name\":\"rewardOracle\",\"type\":\"address\"}],\"name\":\"setRewardOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"contract ITransferStrategyBase\",\"name\":\"transferStrategy\",\"type\":\"address\"}],\"name\":\"setTransferStrategy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"ClaimerSet(address,address)\":{\"details\":\"Emitted when a new address is whitelisted as claimer of rewards on behalf of a user\",\"params\":{\"claimer\":\"The address of the claimer\",\"user\":\"The address of the user\"}},\"RewardOracleUpdated(address,address)\":{\"details\":\"Emitted when the reward oracle is updated\",\"params\":{\"reward\":\"The address of the token reward\",\"rewardOracle\":\"The address of oracle\"}},\"RewardsClaimed(address,address,address,address,uint256)\":{\"details\":\"Emitted when rewards are claimed\",\"params\":{\"amount\":\"The amount of rewards claimed\",\"claimer\":\"The address of the claimer\",\"reward\":\"The address of the token reward is claimed\",\"to\":\"The address of the receiver of the rewards\",\"user\":\"The address of the user rewards has been claimed on behalf of\"}},\"TransferStrategyInstalled(address,address)\":{\"details\":\"Emitted when a transfer strategy is installed for the reward distribution\",\"params\":{\"reward\":\"The address of the token reward\",\"transferStrategy\":\"The address of TransferStrategy contract\"}}},\"kind\":\"dev\",\"methods\":{\"EMISSION_MANAGER()\":{\"details\":\"Returns the address of the emission manager\",\"returns\":{\"_0\":\"The address of the EmissionManager\"}},\"claimAllRewards(address[],address)\":{\"details\":\"Claims all rewards for a user to the desired address, on all the assets of the pool, accumulating the pending rewards\",\"params\":{\"assets\":\"The list of assets to check eligible distributions before claiming rewards\",\"to\":\"The address that will be receiving the rewards\"},\"returns\":{\"claimedAmounts\":\"List that contains the claimed amount per reward, following same order as \\\"rewardList\\\"*\",\"rewardsList\":\"List of addresses of the reward tokens\"}},\"claimAllRewardsOnBehalf(address[],address,address)\":{\"details\":\"Claims all rewards for a user on behalf, on all the assets of the pool, accumulating the pending rewards. The caller must be whitelisted via \\\"allowClaimOnBehalf\\\" function by the RewardsAdmin role manager\",\"params\":{\"assets\":\"The list of assets to check eligible distributions before claiming rewards\",\"to\":\"The address that will be receiving the rewards\",\"user\":\"The address to check and claim rewards\"},\"returns\":{\"claimedAmounts\":\"List that contains the claimed amount per reward, following same order as \\\"rewardsList\\\"*\",\"rewardsList\":\"List of addresses of the reward tokens\"}},\"claimAllRewardsToSelf(address[])\":{\"details\":\"Claims all reward for msg.sender, on all the assets of the pool, accumulating the pending rewards\",\"params\":{\"assets\":\"The list of assets to check eligible distributions before claiming rewards\"},\"returns\":{\"claimedAmounts\":\"List that contains the claimed amount per reward, following same order as \\\"rewardsList\\\"*\",\"rewardsList\":\"List of addresses of the reward tokens\"}},\"claimRewards(address[],uint256,address,address)\":{\"details\":\"Claims reward for a user to the desired address, on all the assets of the pool, accumulating the pending rewards\",\"params\":{\"amount\":\"The amount of rewards to claim\",\"assets\":\"List of assets to check eligible distributions before claiming rewards\",\"reward\":\"The address of the reward token\",\"to\":\"The address that will be receiving the rewards\"},\"returns\":{\"_0\":\"The amount of rewards claimed*\"}},\"claimRewardsOnBehalf(address[],uint256,address,address,address)\":{\"details\":\"Claims reward for a user on behalf, on all the assets of the pool, accumulating the pending rewards. The caller must be whitelisted via \\\"allowClaimOnBehalf\\\" function by the RewardsAdmin role manager\",\"params\":{\"amount\":\"The amount of rewards to claim\",\"assets\":\"The list of assets to check eligible distributions before claiming rewards\",\"reward\":\"The address of the reward token\",\"to\":\"The address that will be receiving the rewards\",\"user\":\"The address to check and claim rewards\"},\"returns\":{\"_0\":\"The amount of rewards claimed*\"}},\"claimRewardsToSelf(address[],uint256,address)\":{\"details\":\"Claims reward for msg.sender, on all the assets of the pool, accumulating the pending rewards\",\"params\":{\"amount\":\"The amount of rewards to claim\",\"assets\":\"The list of assets to check eligible distributions before claiming rewards\",\"reward\":\"The address of the reward token\"},\"returns\":{\"_0\":\"The amount of rewards claimed*\"}},\"configureAssets((uint88,uint256,uint32,address,address,address,address)[])\":{\"details\":\"Configure assets to incentivize with an emission of rewards per second until the end of distribution.\",\"params\":{\"config\":\"The assets configuration input, the list of structs contains the following fields:   uint104 emissionPerSecond: The emission per second following rewards unit decimals.   uint256 totalSupply: The total supply of the asset to incentivize   uint40 distributionEnd: The end of the distribution of the incentives for an asset   address asset: The asset address to incentivize   address reward: The reward token address   ITransferStrategy transferStrategy: The TransferStrategy address with the install hook and claim logic.   IEACAggregatorProxy rewardOracle: The Price Oracle of a reward to visualize the incentives at the UI Frontend.                                     Must follow Chainlink Aggregator IEACAggregatorProxy interface to be compatible.\"}},\"getAllUserRewards(address[],address)\":{\"details\":\"Returns a list all rewards of a user, including already accrued and unrealized claimable rewards\",\"params\":{\"assets\":\"List of incentivized assets to check eligible distributions\",\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The list of reward addresses\",\"_1\":\"The list of unclaimed amount of rewards*\"}},\"getAssetDecimals(address)\":{\"details\":\"Returns the decimals of an asset to calculate the distribution delta\",\"params\":{\"asset\":\"The address to retrieve decimals\"},\"returns\":{\"_0\":\"The decimals of an underlying asset\"}},\"getAssetIndex(address,address)\":{\"details\":\"Calculates the next value of an specific distribution index, with validations.\",\"params\":{\"asset\":\"The incentivized asset\",\"reward\":\"The reward token of the incentivized asset\"},\"returns\":{\"_0\":\"The old index of the asset distribution\",\"_1\":\"The new index of the asset distribution*\"}},\"getClaimer(address)\":{\"details\":\"Returns the whitelisted claimer for a certain address (0x0 if not set)\",\"params\":{\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The claimer address\"}},\"getDistributionEnd(address,address)\":{\"details\":\"Gets the end date for the distribution\",\"params\":{\"asset\":\"The incentivized asset\",\"reward\":\"The reward token of the incentivized asset\"},\"returns\":{\"_0\":\"The timestamp with the end of the distribution, in unix time format*\"}},\"getEmissionManager()\":{\"details\":\"Returns the address of the emission manager. Deprecated: This getter is maintained for compatibility purposes. Use the `EMISSION_MANAGER()` function instead.\",\"returns\":{\"_0\":\"The address of the EmissionManager\"}},\"getRewardOracle(address)\":{\"details\":\"Get the price aggregator oracle address\",\"params\":{\"reward\":\"The address of the reward\"},\"returns\":{\"_0\":\"The price oracle of the reward\"}},\"getRewardsByAsset(address)\":{\"details\":\"Returns the list of available reward token addresses of an incentivized asset\",\"params\":{\"asset\":\"The incentivized asset\"},\"returns\":{\"_0\":\"List of rewards addresses of the input asset*\"}},\"getRewardsData(address,address)\":{\"details\":\"Returns the configuration of the distribution reward for a certain asset\",\"params\":{\"asset\":\"The incentivized asset\",\"reward\":\"The reward token of the incentivized asset\"},\"returns\":{\"_0\":\"The index of the asset distribution\",\"_1\":\"The emission per second of the reward distribution\",\"_2\":\"The timestamp of the last update of the index\",\"_3\":\"The timestamp of the distribution end*\"}},\"getRewardsList()\":{\"details\":\"Returns the list of available reward addresses\",\"returns\":{\"_0\":\"List of rewards supported in this contract*\"}},\"getTransferStrategy(address)\":{\"details\":\"Returns the Transfer Strategy implementation contract address being used for a reward address\",\"params\":{\"reward\":\"The address of the reward\"},\"returns\":{\"_0\":\"The address of the TransferStrategy contract\"}},\"getUserAccruedRewards(address,address)\":{\"details\":\"Returns the accrued rewards balance of a user, not including virtually accrued rewards since last distribution.\",\"params\":{\"reward\":\"The address of the reward token\",\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"Unclaimed rewards, not including new distributions*\"}},\"getUserAssetIndex(address,address,address)\":{\"details\":\"Returns the index of a user on a reward distribution\",\"params\":{\"asset\":\"The incentivized asset\",\"reward\":\"The reward token of the incentivized asset\",\"user\":\"Address of the user\"},\"returns\":{\"_0\":\"The current user asset index, not including new distributions*\"}},\"getUserRewards(address[],address,address)\":{\"details\":\"Returns a single rewards balance of a user, including virtually accrued and unrealized claimable rewards.\",\"params\":{\"assets\":\"List of incentivized assets to check eligible distributions\",\"reward\":\"The address of the reward token\",\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The rewards amount*\"}},\"handleAction(address,uint256,uint256)\":{\"details\":\"Called by the corresponding asset on transfer hook in order to update the rewards distribution.The units of `totalSupply` and `userBalance` should be the same.\",\"params\":{\"totalSupply\":\"The total supply of the asset prior to user balance change\",\"user\":\"The address of the user whose asset balance has changed\",\"userBalance\":\"The previous user balance prior to balance change*\"}},\"setClaimer(address,address)\":{\"details\":\"Whitelists an address to claim the rewards on behalf of another address\",\"params\":{\"claimer\":\"The address of the claimer\",\"user\":\"The address of the user\"}},\"setDistributionEnd(address,address,uint32)\":{\"details\":\"Sets the end date for the distribution\",\"params\":{\"asset\":\"The asset to incentivize\",\"newDistributionEnd\":\"The end date of the incentivization, in unix time format*\",\"reward\":\"The reward token that incentives the asset\"}},\"setEmissionPerSecond(address,address[],uint88[])\":{\"details\":\"Sets the emission per second of a set of reward distributions\",\"params\":{\"asset\":\"The asset is being incentivized\",\"newEmissionsPerSecond\":\"List of new reward emissions per second\",\"rewards\":\"List of reward addresses are being distributed\"}},\"setRewardOracle(address,address)\":{\"details\":\"Sets an Aave Oracle contract to enforce rewards with a source of value.\",\"params\":{\"reward\":\"The address of the reward to set the price aggregator\",\"rewardOracle\":\"The address of price aggregator that follows IEACAggregatorProxy interface\"}},\"setTransferStrategy(address,address)\":{\"details\":\"Sets a TransferStrategy logic contract that determines the logic of the rewards transfer\",\"params\":{\"reward\":\"The address of the reward token\",\"transferStrategy\":\"The address of the TransferStrategy logic contract\"}}},\"title\":\"IRewardsController\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setRewardOracle(address,address)\":{\"notice\":\"At the moment of reward configuration, the Incentives Controller performs a check to see if the reward asset oracle is compatible with IEACAggregator proxy. This check is enforced for integrators to be able to show incentives at the current Aave UI without the need to setup an external price registry\"}},\"notice\":\"Defines the basic interface for a Rewards Controller.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/rewards/interfaces/IRewardsController.sol\":\"IRewardsController\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"contracts/misc/interfaces/IEACAggregatorProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IEACAggregatorProxy {\\n  function decimals() external view returns (uint8);\\n\\n  function latestAnswer() external view returns (int256);\\n\\n  function latestTimestamp() external view returns (uint256);\\n\\n  function latestRound() external view returns (uint256);\\n\\n  function getAnswer(uint256 roundId) external view returns (int256);\\n\\n  function getTimestamp(uint256 roundId) external view returns (uint256);\\n\\n  event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 timestamp);\\n  event NewRound(uint256 indexed roundId, address indexed startedBy);\\n}\\n\",\"keccak256\":\"0x75bb34641419925730f87eeb122521b34cfd953b800212c362770ed1c7c5d719\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/IRewardsController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IRewardsDistributor} from './IRewardsDistributor.sol';\\nimport {ITransferStrategyBase} from './ITransferStrategyBase.sol';\\nimport {IEACAggregatorProxy} from '../../misc/interfaces/IEACAggregatorProxy.sol';\\nimport {RewardsDataTypes} from '../libraries/RewardsDataTypes.sol';\\n\\n/**\\n * @title IRewardsController\\n * @author Aave\\n * @notice Defines the basic interface for a Rewards Controller.\\n */\\ninterface IRewardsController is IRewardsDistributor {\\n  /**\\n   * @dev Emitted when a new address is whitelisted as claimer of rewards on behalf of a user\\n   * @param user The address of the user\\n   * @param claimer The address of the claimer\\n   */\\n  event ClaimerSet(address indexed user, address indexed claimer);\\n\\n  /**\\n   * @dev Emitted when rewards are claimed\\n   * @param user The address of the user rewards has been claimed on behalf of\\n   * @param reward The address of the token reward is claimed\\n   * @param to The address of the receiver of the rewards\\n   * @param claimer The address of the claimer\\n   * @param amount The amount of rewards claimed\\n   */\\n  event RewardsClaimed(\\n    address indexed user,\\n    address indexed reward,\\n    address indexed to,\\n    address claimer,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @dev Emitted when a transfer strategy is installed for the reward distribution\\n   * @param reward The address of the token reward\\n   * @param transferStrategy The address of TransferStrategy contract\\n   */\\n  event TransferStrategyInstalled(address indexed reward, address indexed transferStrategy);\\n\\n  /**\\n   * @dev Emitted when the reward oracle is updated\\n   * @param reward The address of the token reward\\n   * @param rewardOracle The address of oracle\\n   */\\n  event RewardOracleUpdated(address indexed reward, address indexed rewardOracle);\\n\\n  /**\\n   * @dev Whitelists an address to claim the rewards on behalf of another address\\n   * @param user The address of the user\\n   * @param claimer The address of the claimer\\n   */\\n  function setClaimer(address user, address claimer) external;\\n\\n  /**\\n   * @dev Sets a TransferStrategy logic contract that determines the logic of the rewards transfer\\n   * @param reward The address of the reward token\\n   * @param transferStrategy The address of the TransferStrategy logic contract\\n   */\\n  function setTransferStrategy(address reward, ITransferStrategyBase transferStrategy) external;\\n\\n  /**\\n   * @dev Sets an Aave Oracle contract to enforce rewards with a source of value.\\n   * @notice At the moment of reward configuration, the Incentives Controller performs\\n   * a check to see if the reward asset oracle is compatible with IEACAggregator proxy.\\n   * This check is enforced for integrators to be able to show incentives at\\n   * the current Aave UI without the need to setup an external price registry\\n   * @param reward The address of the reward to set the price aggregator\\n   * @param rewardOracle The address of price aggregator that follows IEACAggregatorProxy interface\\n   */\\n  function setRewardOracle(address reward, IEACAggregatorProxy rewardOracle) external;\\n\\n  /**\\n   * @dev Get the price aggregator oracle address\\n   * @param reward The address of the reward\\n   * @return The price oracle of the reward\\n   */\\n  function getRewardOracle(address reward) external view returns (address);\\n\\n  /**\\n   * @dev Returns the whitelisted claimer for a certain address (0x0 if not set)\\n   * @param user The address of the user\\n   * @return The claimer address\\n   */\\n  function getClaimer(address user) external view returns (address);\\n\\n  /**\\n   * @dev Returns the Transfer Strategy implementation contract address being used for a reward address\\n   * @param reward The address of the reward\\n   * @return The address of the TransferStrategy contract\\n   */\\n  function getTransferStrategy(address reward) external view returns (address);\\n\\n  /**\\n   * @dev Configure assets to incentivize with an emission of rewards per second until the end of distribution.\\n   * @param config The assets configuration input, the list of structs contains the following fields:\\n   *   uint104 emissionPerSecond: The emission per second following rewards unit decimals.\\n   *   uint256 totalSupply: The total supply of the asset to incentivize\\n   *   uint40 distributionEnd: The end of the distribution of the incentives for an asset\\n   *   address asset: The asset address to incentivize\\n   *   address reward: The reward token address\\n   *   ITransferStrategy transferStrategy: The TransferStrategy address with the install hook and claim logic.\\n   *   IEACAggregatorProxy rewardOracle: The Price Oracle of a reward to visualize the incentives at the UI Frontend.\\n   *                                     Must follow Chainlink Aggregator IEACAggregatorProxy interface to be compatible.\\n   */\\n  function configureAssets(RewardsDataTypes.RewardsConfigInput[] memory config) external;\\n\\n  /**\\n   * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution.\\n   * @dev The units of `totalSupply` and `userBalance` should be the same.\\n   * @param user The address of the user whose asset balance has changed\\n   * @param totalSupply The total supply of the asset prior to user balance change\\n   * @param userBalance The previous user balance prior to balance change\\n   **/\\n  function handleAction(address user, uint256 totalSupply, uint256 userBalance) external;\\n\\n  /**\\n   * @dev Claims reward for a user to the desired address, on all the assets of the pool, accumulating the pending rewards\\n   * @param assets List of assets to check eligible distributions before claiming rewards\\n   * @param amount The amount of rewards to claim\\n   * @param to The address that will be receiving the rewards\\n   * @param reward The address of the reward token\\n   * @return The amount of rewards claimed\\n   **/\\n  function claimRewards(\\n    address[] calldata assets,\\n    uint256 amount,\\n    address to,\\n    address reward\\n  ) external returns (uint256);\\n\\n  /**\\n   * @dev Claims reward for a user on behalf, on all the assets of the pool, accumulating the pending rewards. The\\n   * caller must be whitelisted via \\\"allowClaimOnBehalf\\\" function by the RewardsAdmin role manager\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @param amount The amount of rewards to claim\\n   * @param user The address to check and claim rewards\\n   * @param to The address that will be receiving the rewards\\n   * @param reward The address of the reward token\\n   * @return The amount of rewards claimed\\n   **/\\n  function claimRewardsOnBehalf(\\n    address[] calldata assets,\\n    uint256 amount,\\n    address user,\\n    address to,\\n    address reward\\n  ) external returns (uint256);\\n\\n  /**\\n   * @dev Claims reward for msg.sender, on all the assets of the pool, accumulating the pending rewards\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @param amount The amount of rewards to claim\\n   * @param reward The address of the reward token\\n   * @return The amount of rewards claimed\\n   **/\\n  function claimRewardsToSelf(\\n    address[] calldata assets,\\n    uint256 amount,\\n    address reward\\n  ) external returns (uint256);\\n\\n  /**\\n   * @dev Claims all rewards for a user to the desired address, on all the assets of the pool, accumulating the pending rewards\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @param to The address that will be receiving the rewards\\n   * @return rewardsList List of addresses of the reward tokens\\n   * @return claimedAmounts List that contains the claimed amount per reward, following same order as \\\"rewardList\\\"\\n   **/\\n  function claimAllRewards(\\n    address[] calldata assets,\\n    address to\\n  ) external returns (address[] memory rewardsList, uint256[] memory claimedAmounts);\\n\\n  /**\\n   * @dev Claims all rewards for a user on behalf, on all the assets of the pool, accumulating the pending rewards. The caller must\\n   * be whitelisted via \\\"allowClaimOnBehalf\\\" function by the RewardsAdmin role manager\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @param user The address to check and claim rewards\\n   * @param to The address that will be receiving the rewards\\n   * @return rewardsList List of addresses of the reward tokens\\n   * @return claimedAmounts List that contains the claimed amount per reward, following same order as \\\"rewardsList\\\"\\n   **/\\n  function claimAllRewardsOnBehalf(\\n    address[] calldata assets,\\n    address user,\\n    address to\\n  ) external returns (address[] memory rewardsList, uint256[] memory claimedAmounts);\\n\\n  /**\\n   * @dev Claims all reward for msg.sender, on all the assets of the pool, accumulating the pending rewards\\n   * @param assets The list of assets to check eligible distributions before claiming rewards\\n   * @return rewardsList List of addresses of the reward tokens\\n   * @return claimedAmounts List that contains the claimed amount per reward, following same order as \\\"rewardsList\\\"\\n   **/\\n  function claimAllRewardsToSelf(\\n    address[] calldata assets\\n  ) external returns (address[] memory rewardsList, uint256[] memory claimedAmounts);\\n}\\n\",\"keccak256\":\"0xe8a4d4ea914cbbcd3f6a4e5420a34d01f1379b2d445bd98fc7f8004c69894f5d\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/IRewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title IRewardsDistributor\\n * @author Aave\\n * @notice Defines the basic interface for a Rewards Distributor.\\n */\\ninterface IRewardsDistributor {\\n  /**\\n   * @dev Emitted when the configuration of the rewards of an asset is updated.\\n   * @param asset The address of the incentivized asset\\n   * @param reward The address of the reward token\\n   * @param oldEmission The old emissions per second value of the reward distribution\\n   * @param newEmission The new emissions per second value of the reward distribution\\n   * @param oldDistributionEnd The old end timestamp of the reward distribution\\n   * @param newDistributionEnd The new end timestamp of the reward distribution\\n   * @param assetIndex The index of the asset distribution\\n   */\\n  event AssetConfigUpdated(\\n    address indexed asset,\\n    address indexed reward,\\n    uint256 oldEmission,\\n    uint256 newEmission,\\n    uint256 oldDistributionEnd,\\n    uint256 newDistributionEnd,\\n    uint256 assetIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when rewards of an asset are accrued on behalf of a user.\\n   * @param asset The address of the incentivized asset\\n   * @param reward The address of the reward token\\n   * @param user The address of the user that rewards are accrued on behalf of\\n   * @param assetIndex The index of the asset distribution\\n   * @param userIndex The index of the asset distribution on behalf of the user\\n   * @param rewardsAccrued The amount of rewards accrued\\n   */\\n  event Accrued(\\n    address indexed asset,\\n    address indexed reward,\\n    address indexed user,\\n    uint256 assetIndex,\\n    uint256 userIndex,\\n    uint256 rewardsAccrued\\n  );\\n\\n  /**\\n   * @dev Sets the end date for the distribution\\n   * @param asset The asset to incentivize\\n   * @param reward The reward token that incentives the asset\\n   * @param newDistributionEnd The end date of the incentivization, in unix time format\\n   **/\\n  function setDistributionEnd(address asset, address reward, uint32 newDistributionEnd) external;\\n\\n  /**\\n   * @dev Sets the emission per second of a set of reward distributions\\n   * @param asset The asset is being incentivized\\n   * @param rewards List of reward addresses are being distributed\\n   * @param newEmissionsPerSecond List of new reward emissions per second\\n   */\\n  function setEmissionPerSecond(\\n    address asset,\\n    address[] calldata rewards,\\n    uint88[] calldata newEmissionsPerSecond\\n  ) external;\\n\\n  /**\\n   * @dev Gets the end date for the distribution\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The timestamp with the end of the distribution, in unix time format\\n   **/\\n  function getDistributionEnd(address asset, address reward) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the index of a user on a reward distribution\\n   * @param user Address of the user\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The current user asset index, not including new distributions\\n   **/\\n  function getUserAssetIndex(\\n    address user,\\n    address asset,\\n    address reward\\n  ) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the configuration of the distribution reward for a certain asset\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The index of the asset distribution\\n   * @return The emission per second of the reward distribution\\n   * @return The timestamp of the last update of the index\\n   * @return The timestamp of the distribution end\\n   **/\\n  function getRewardsData(\\n    address asset,\\n    address reward\\n  ) external view returns (uint256, uint256, uint256, uint256);\\n\\n  /**\\n   * @dev Calculates the next value of an specific distribution index, with validations.\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The old index of the asset distribution\\n   * @return The new index of the asset distribution\\n   **/\\n  function getAssetIndex(address asset, address reward) external view returns (uint256, uint256);\\n\\n  /**\\n   * @dev Returns the list of available reward token addresses of an incentivized asset\\n   * @param asset The incentivized asset\\n   * @return List of rewards addresses of the input asset\\n   **/\\n  function getRewardsByAsset(address asset) external view returns (address[] memory);\\n\\n  /**\\n   * @dev Returns the list of available reward addresses\\n   * @return List of rewards supported in this contract\\n   **/\\n  function getRewardsList() external view returns (address[] memory);\\n\\n  /**\\n   * @dev Returns the accrued rewards balance of a user, not including virtually accrued rewards since last distribution.\\n   * @param user The address of the user\\n   * @param reward The address of the reward token\\n   * @return Unclaimed rewards, not including new distributions\\n   **/\\n  function getUserAccruedRewards(address user, address reward) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns a single rewards balance of a user, including virtually accrued and unrealized claimable rewards.\\n   * @param assets List of incentivized assets to check eligible distributions\\n   * @param user The address of the user\\n   * @param reward The address of the reward token\\n   * @return The rewards amount\\n   **/\\n  function getUserRewards(\\n    address[] calldata assets,\\n    address user,\\n    address reward\\n  ) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns a list all rewards of a user, including already accrued and unrealized claimable rewards\\n   * @param assets List of incentivized assets to check eligible distributions\\n   * @param user The address of the user\\n   * @return The list of reward addresses\\n   * @return The list of unclaimed amount of rewards\\n   **/\\n  function getAllUserRewards(\\n    address[] calldata assets,\\n    address user\\n  ) external view returns (address[] memory, uint256[] memory);\\n\\n  /**\\n   * @dev Returns the decimals of an asset to calculate the distribution delta\\n   * @param asset The address to retrieve decimals\\n   * @return The decimals of an underlying asset\\n   */\\n  function getAssetDecimals(address asset) external view returns (uint8);\\n\\n  /**\\n   * @dev Returns the address of the emission manager\\n   * @return The address of the EmissionManager\\n   */\\n  function EMISSION_MANAGER() external view returns (address);\\n\\n  /**\\n   * @dev Returns the address of the emission manager.\\n   * Deprecated: This getter is maintained for compatibility purposes. Use the `EMISSION_MANAGER()` function instead.\\n   * @return The address of the EmissionManager\\n   */\\n  function getEmissionManager() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd393efd85f696114f9ab69e6bfdcbf3a2bcf16ef5002516d56a0f0359e3d9bba\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/ITransferStrategyBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface ITransferStrategyBase {\\n  event EmergencyWithdrawal(\\n    address indexed caller,\\n    address indexed token,\\n    address indexed to,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @dev Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation\\n   * @param to Account to transfer rewards\\n   * @param reward Address of the reward token\\n   * @param amount Amount to transfer to the \\\"to\\\" address parameter\\n   * @return Returns true bool if transfer logic succeeds\\n   */\\n  function performTransfer(address to, address reward, uint256 amount) external returns (bool);\\n\\n  /**\\n   * @return Returns the address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view returns (address);\\n\\n  /**\\n   * @return Returns the address of the Rewards admin\\n   */\\n  function getRewardsAdmin() external view returns (address);\\n\\n  /**\\n   * @dev Perform an emergency token withdrawal only callable by the Rewards admin\\n   * @param token Address of the token to withdraw funds from this contract\\n   * @param to Address of the recipient of the withdrawal\\n   * @param amount Amount of the withdrawal\\n   */\\n  function emergencyWithdrawal(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0xa52a6dc237879acbed7325787ce58238a3afd626fa2ed827d4e321d2e4ef51ad\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/libraries/RewardsDataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {ITransferStrategyBase} from '../interfaces/ITransferStrategyBase.sol';\\nimport {IEACAggregatorProxy} from '../../misc/interfaces/IEACAggregatorProxy.sol';\\n\\nlibrary RewardsDataTypes {\\n  struct RewardsConfigInput {\\n    uint88 emissionPerSecond;\\n    uint256 totalSupply;\\n    uint32 distributionEnd;\\n    address asset;\\n    address reward;\\n    ITransferStrategyBase transferStrategy;\\n    IEACAggregatorProxy rewardOracle;\\n  }\\n\\n  struct UserAssetBalance {\\n    address asset;\\n    uint256 userBalance;\\n    uint256 totalSupply;\\n  }\\n\\n  struct UserData {\\n    // Liquidity index of the reward distribution for the user\\n    uint104 index;\\n    // Amount of accrued rewards for the user since last user index update\\n    uint128 accrued;\\n  }\\n\\n  struct RewardData {\\n    // Liquidity index of the reward distribution\\n    uint104 index;\\n    // Amount of reward tokens distributed per second\\n    uint88 emissionPerSecond;\\n    // Timestamp of the last reward index update\\n    uint32 lastUpdateTimestamp;\\n    // The end of the distribution of rewards (in seconds)\\n    uint32 distributionEnd;\\n    // Map of user addresses and their rewards data (userAddress => userData)\\n    mapping(address => UserData) usersData;\\n  }\\n\\n  struct AssetData {\\n    // Map of reward token addresses and their data (rewardTokenAddress => rewardData)\\n    mapping(address => RewardData) rewards;\\n    // List of reward token addresses for the asset\\n    mapping(uint128 => address) availableRewards;\\n    // Count of reward tokens for the asset\\n    uint128 availableRewardsCount;\\n    // Number of decimals of the asset\\n    uint8 decimals;\\n  }\\n}\\n\",\"keccak256\":\"0xaaa314b4e9f40878f4fd20e99075fe60309c9e223a5b8c244aaaeb7229d8c318\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"setRewardOracle(address,address)":{"notice":"At the moment of reward configuration, the Incentives Controller performs a check to see if the reward asset oracle is compatible with IEACAggregator proxy. This check is enforced for integrators to be able to show incentives at the current Aave UI without the need to setup an external price registry"}},"notice":"Defines the basic interface for a Rewards Controller.","version":1}}},"contracts/rewards/interfaces/IRewardsDistributor.sol":{"IRewardsDistributor":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"reward","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"assetIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"userIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardsAccrued","type":"uint256"}],"name":"Accrued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"address","name":"reward","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldEmission","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newEmission","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldDistributionEnd","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDistributionEnd","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"assetIndex","type":"uint256"}],"name":"AssetConfigUpdated","type":"event"},{"inputs":[],"name":"EMISSION_MANAGER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"address","name":"user","type":"address"}],"name":"getAllUserRewards","outputs":[{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getAssetDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"getAssetIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"getDistributionEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEmissionManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getRewardsByAsset","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"getRewardsData","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardsList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"getUserAccruedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"getUserAssetIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"reward","type":"address"}],"name":"getUserRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"reward","type":"address"},{"internalType":"uint32","name":"newDistributionEnd","type":"uint32"}],"name":"setDistributionEnd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address[]","name":"rewards","type":"address[]"},{"internalType":"uint88[]","name":"newEmissionsPerSecond","type":"uint88[]"}],"name":"setEmissionPerSecond","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave","events":{"Accrued(address,address,address,uint256,uint256,uint256)":{"details":"Emitted when rewards of an asset are accrued on behalf of a user.","params":{"asset":"The address of the incentivized asset","assetIndex":"The index of the asset distribution","reward":"The address of the reward token","rewardsAccrued":"The amount of rewards accrued","user":"The address of the user that rewards are accrued on behalf of","userIndex":"The index of the asset distribution on behalf of the user"}},"AssetConfigUpdated(address,address,uint256,uint256,uint256,uint256,uint256)":{"details":"Emitted when the configuration of the rewards of an asset is updated.","params":{"asset":"The address of the incentivized asset","assetIndex":"The index of the asset distribution","newDistributionEnd":"The new end timestamp of the reward distribution","newEmission":"The new emissions per second value of the reward distribution","oldDistributionEnd":"The old end timestamp of the reward distribution","oldEmission":"The old emissions per second value of the reward distribution","reward":"The address of the reward token"}}},"kind":"dev","methods":{"EMISSION_MANAGER()":{"details":"Returns the address of the emission manager","returns":{"_0":"The address of the EmissionManager"}},"getAllUserRewards(address[],address)":{"details":"Returns a list all rewards of a user, including already accrued and unrealized claimable rewards","params":{"assets":"List of incentivized assets to check eligible distributions","user":"The address of the user"},"returns":{"_0":"The list of reward addresses","_1":"The list of unclaimed amount of rewards*"}},"getAssetDecimals(address)":{"details":"Returns the decimals of an asset to calculate the distribution delta","params":{"asset":"The address to retrieve decimals"},"returns":{"_0":"The decimals of an underlying asset"}},"getAssetIndex(address,address)":{"details":"Calculates the next value of an specific distribution index, with validations.","params":{"asset":"The incentivized asset","reward":"The reward token of the incentivized asset"},"returns":{"_0":"The old index of the asset distribution","_1":"The new index of the asset distribution*"}},"getDistributionEnd(address,address)":{"details":"Gets the end date for the distribution","params":{"asset":"The incentivized asset","reward":"The reward token of the incentivized asset"},"returns":{"_0":"The timestamp with the end of the distribution, in unix time format*"}},"getEmissionManager()":{"details":"Returns the address of the emission manager. Deprecated: This getter is maintained for compatibility purposes. Use the `EMISSION_MANAGER()` function instead.","returns":{"_0":"The address of the EmissionManager"}},"getRewardsByAsset(address)":{"details":"Returns the list of available reward token addresses of an incentivized asset","params":{"asset":"The incentivized asset"},"returns":{"_0":"List of rewards addresses of the input asset*"}},"getRewardsData(address,address)":{"details":"Returns the configuration of the distribution reward for a certain asset","params":{"asset":"The incentivized asset","reward":"The reward token of the incentivized asset"},"returns":{"_0":"The index of the asset distribution","_1":"The emission per second of the reward distribution","_2":"The timestamp of the last update of the index","_3":"The timestamp of the distribution end*"}},"getRewardsList()":{"details":"Returns the list of available reward addresses","returns":{"_0":"List of rewards supported in this contract*"}},"getUserAccruedRewards(address,address)":{"details":"Returns the accrued rewards balance of a user, not including virtually accrued rewards since last distribution.","params":{"reward":"The address of the reward token","user":"The address of the user"},"returns":{"_0":"Unclaimed rewards, not including new distributions*"}},"getUserAssetIndex(address,address,address)":{"details":"Returns the index of a user on a reward distribution","params":{"asset":"The incentivized asset","reward":"The reward token of the incentivized asset","user":"Address of the user"},"returns":{"_0":"The current user asset index, not including new distributions*"}},"getUserRewards(address[],address,address)":{"details":"Returns a single rewards balance of a user, including virtually accrued and unrealized claimable rewards.","params":{"assets":"List of incentivized assets to check eligible distributions","reward":"The address of the reward token","user":"The address of the user"},"returns":{"_0":"The rewards amount*"}},"setDistributionEnd(address,address,uint32)":{"details":"Sets the end date for the distribution","params":{"asset":"The asset to incentivize","newDistributionEnd":"The end date of the incentivization, in unix time format*","reward":"The reward token that incentives the asset"}},"setEmissionPerSecond(address,address[],uint88[])":{"details":"Sets the emission per second of a set of reward distributions","params":{"asset":"The asset is being incentivized","newEmissionsPerSecond":"List of new reward emissions per second","rewards":"List of reward addresses are being distributed"}}},"title":"IRewardsDistributor","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"EMISSION_MANAGER()":"cbcbb507","getAllUserRewards(address[],address)":"4c0369c3","getAssetDecimals(address)":"9efd6f72","getAssetIndex(address,address)":"886fe70b","getDistributionEnd(address,address)":"1b839c77","getEmissionManager()":"92074b08","getRewardsByAsset(address)":"6657732f","getRewardsData(address,address)":"7eff4ba8","getRewardsList()":"b45ac1a9","getUserAccruedRewards(address,address)":"b022418c","getUserAssetIndex(address,address,address)":"533f542a","getUserRewards(address[],address,address)":"70674ab9","setDistributionEnd(address,address,uint32)":"c5a7b538","setEmissionPerSecond(address,address[],uint88[])":"f996868b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assetIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"userIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewardsAccrued\",\"type\":\"uint256\"}],\"name\":\"Accrued\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldEmission\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newEmission\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldDistributionEnd\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newDistributionEnd\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assetIndex\",\"type\":\"uint256\"}],\"name\":\"AssetConfigUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"EMISSION_MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getAllUserRewards\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getAssetDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getAssetIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getDistributionEnd\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEmissionManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getRewardsByAsset\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getRewardsData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardsList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getUserAccruedRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getUserAssetIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"}],\"name\":\"getUserRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"newDistributionEnd\",\"type\":\"uint32\"}],\"name\":\"setDistributionEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"rewards\",\"type\":\"address[]\"},{\"internalType\":\"uint88[]\",\"name\":\"newEmissionsPerSecond\",\"type\":\"uint88[]\"}],\"name\":\"setEmissionPerSecond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave\",\"events\":{\"Accrued(address,address,address,uint256,uint256,uint256)\":{\"details\":\"Emitted when rewards of an asset are accrued on behalf of a user.\",\"params\":{\"asset\":\"The address of the incentivized asset\",\"assetIndex\":\"The index of the asset distribution\",\"reward\":\"The address of the reward token\",\"rewardsAccrued\":\"The amount of rewards accrued\",\"user\":\"The address of the user that rewards are accrued on behalf of\",\"userIndex\":\"The index of the asset distribution on behalf of the user\"}},\"AssetConfigUpdated(address,address,uint256,uint256,uint256,uint256,uint256)\":{\"details\":\"Emitted when the configuration of the rewards of an asset is updated.\",\"params\":{\"asset\":\"The address of the incentivized asset\",\"assetIndex\":\"The index of the asset distribution\",\"newDistributionEnd\":\"The new end timestamp of the reward distribution\",\"newEmission\":\"The new emissions per second value of the reward distribution\",\"oldDistributionEnd\":\"The old end timestamp of the reward distribution\",\"oldEmission\":\"The old emissions per second value of the reward distribution\",\"reward\":\"The address of the reward token\"}}},\"kind\":\"dev\",\"methods\":{\"EMISSION_MANAGER()\":{\"details\":\"Returns the address of the emission manager\",\"returns\":{\"_0\":\"The address of the EmissionManager\"}},\"getAllUserRewards(address[],address)\":{\"details\":\"Returns a list all rewards of a user, including already accrued and unrealized claimable rewards\",\"params\":{\"assets\":\"List of incentivized assets to check eligible distributions\",\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The list of reward addresses\",\"_1\":\"The list of unclaimed amount of rewards*\"}},\"getAssetDecimals(address)\":{\"details\":\"Returns the decimals of an asset to calculate the distribution delta\",\"params\":{\"asset\":\"The address to retrieve decimals\"},\"returns\":{\"_0\":\"The decimals of an underlying asset\"}},\"getAssetIndex(address,address)\":{\"details\":\"Calculates the next value of an specific distribution index, with validations.\",\"params\":{\"asset\":\"The incentivized asset\",\"reward\":\"The reward token of the incentivized asset\"},\"returns\":{\"_0\":\"The old index of the asset distribution\",\"_1\":\"The new index of the asset distribution*\"}},\"getDistributionEnd(address,address)\":{\"details\":\"Gets the end date for the distribution\",\"params\":{\"asset\":\"The incentivized asset\",\"reward\":\"The reward token of the incentivized asset\"},\"returns\":{\"_0\":\"The timestamp with the end of the distribution, in unix time format*\"}},\"getEmissionManager()\":{\"details\":\"Returns the address of the emission manager. Deprecated: This getter is maintained for compatibility purposes. Use the `EMISSION_MANAGER()` function instead.\",\"returns\":{\"_0\":\"The address of the EmissionManager\"}},\"getRewardsByAsset(address)\":{\"details\":\"Returns the list of available reward token addresses of an incentivized asset\",\"params\":{\"asset\":\"The incentivized asset\"},\"returns\":{\"_0\":\"List of rewards addresses of the input asset*\"}},\"getRewardsData(address,address)\":{\"details\":\"Returns the configuration of the distribution reward for a certain asset\",\"params\":{\"asset\":\"The incentivized asset\",\"reward\":\"The reward token of the incentivized asset\"},\"returns\":{\"_0\":\"The index of the asset distribution\",\"_1\":\"The emission per second of the reward distribution\",\"_2\":\"The timestamp of the last update of the index\",\"_3\":\"The timestamp of the distribution end*\"}},\"getRewardsList()\":{\"details\":\"Returns the list of available reward addresses\",\"returns\":{\"_0\":\"List of rewards supported in this contract*\"}},\"getUserAccruedRewards(address,address)\":{\"details\":\"Returns the accrued rewards balance of a user, not including virtually accrued rewards since last distribution.\",\"params\":{\"reward\":\"The address of the reward token\",\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"Unclaimed rewards, not including new distributions*\"}},\"getUserAssetIndex(address,address,address)\":{\"details\":\"Returns the index of a user on a reward distribution\",\"params\":{\"asset\":\"The incentivized asset\",\"reward\":\"The reward token of the incentivized asset\",\"user\":\"Address of the user\"},\"returns\":{\"_0\":\"The current user asset index, not including new distributions*\"}},\"getUserRewards(address[],address,address)\":{\"details\":\"Returns a single rewards balance of a user, including virtually accrued and unrealized claimable rewards.\",\"params\":{\"assets\":\"List of incentivized assets to check eligible distributions\",\"reward\":\"The address of the reward token\",\"user\":\"The address of the user\"},\"returns\":{\"_0\":\"The rewards amount*\"}},\"setDistributionEnd(address,address,uint32)\":{\"details\":\"Sets the end date for the distribution\",\"params\":{\"asset\":\"The asset to incentivize\",\"newDistributionEnd\":\"The end date of the incentivization, in unix time format*\",\"reward\":\"The reward token that incentives the asset\"}},\"setEmissionPerSecond(address,address[],uint88[])\":{\"details\":\"Sets the emission per second of a set of reward distributions\",\"params\":{\"asset\":\"The asset is being incentivized\",\"newEmissionsPerSecond\":\"List of new reward emissions per second\",\"rewards\":\"List of reward addresses are being distributed\"}}},\"title\":\"IRewardsDistributor\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Defines the basic interface for a Rewards Distributor.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/rewards/interfaces/IRewardsDistributor.sol\":\"IRewardsDistributor\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"contracts/rewards/interfaces/IRewardsDistributor.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title IRewardsDistributor\\n * @author Aave\\n * @notice Defines the basic interface for a Rewards Distributor.\\n */\\ninterface IRewardsDistributor {\\n  /**\\n   * @dev Emitted when the configuration of the rewards of an asset is updated.\\n   * @param asset The address of the incentivized asset\\n   * @param reward The address of the reward token\\n   * @param oldEmission The old emissions per second value of the reward distribution\\n   * @param newEmission The new emissions per second value of the reward distribution\\n   * @param oldDistributionEnd The old end timestamp of the reward distribution\\n   * @param newDistributionEnd The new end timestamp of the reward distribution\\n   * @param assetIndex The index of the asset distribution\\n   */\\n  event AssetConfigUpdated(\\n    address indexed asset,\\n    address indexed reward,\\n    uint256 oldEmission,\\n    uint256 newEmission,\\n    uint256 oldDistributionEnd,\\n    uint256 newDistributionEnd,\\n    uint256 assetIndex\\n  );\\n\\n  /**\\n   * @dev Emitted when rewards of an asset are accrued on behalf of a user.\\n   * @param asset The address of the incentivized asset\\n   * @param reward The address of the reward token\\n   * @param user The address of the user that rewards are accrued on behalf of\\n   * @param assetIndex The index of the asset distribution\\n   * @param userIndex The index of the asset distribution on behalf of the user\\n   * @param rewardsAccrued The amount of rewards accrued\\n   */\\n  event Accrued(\\n    address indexed asset,\\n    address indexed reward,\\n    address indexed user,\\n    uint256 assetIndex,\\n    uint256 userIndex,\\n    uint256 rewardsAccrued\\n  );\\n\\n  /**\\n   * @dev Sets the end date for the distribution\\n   * @param asset The asset to incentivize\\n   * @param reward The reward token that incentives the asset\\n   * @param newDistributionEnd The end date of the incentivization, in unix time format\\n   **/\\n  function setDistributionEnd(address asset, address reward, uint32 newDistributionEnd) external;\\n\\n  /**\\n   * @dev Sets the emission per second of a set of reward distributions\\n   * @param asset The asset is being incentivized\\n   * @param rewards List of reward addresses are being distributed\\n   * @param newEmissionsPerSecond List of new reward emissions per second\\n   */\\n  function setEmissionPerSecond(\\n    address asset,\\n    address[] calldata rewards,\\n    uint88[] calldata newEmissionsPerSecond\\n  ) external;\\n\\n  /**\\n   * @dev Gets the end date for the distribution\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The timestamp with the end of the distribution, in unix time format\\n   **/\\n  function getDistributionEnd(address asset, address reward) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the index of a user on a reward distribution\\n   * @param user Address of the user\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The current user asset index, not including new distributions\\n   **/\\n  function getUserAssetIndex(\\n    address user,\\n    address asset,\\n    address reward\\n  ) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns the configuration of the distribution reward for a certain asset\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The index of the asset distribution\\n   * @return The emission per second of the reward distribution\\n   * @return The timestamp of the last update of the index\\n   * @return The timestamp of the distribution end\\n   **/\\n  function getRewardsData(\\n    address asset,\\n    address reward\\n  ) external view returns (uint256, uint256, uint256, uint256);\\n\\n  /**\\n   * @dev Calculates the next value of an specific distribution index, with validations.\\n   * @param asset The incentivized asset\\n   * @param reward The reward token of the incentivized asset\\n   * @return The old index of the asset distribution\\n   * @return The new index of the asset distribution\\n   **/\\n  function getAssetIndex(address asset, address reward) external view returns (uint256, uint256);\\n\\n  /**\\n   * @dev Returns the list of available reward token addresses of an incentivized asset\\n   * @param asset The incentivized asset\\n   * @return List of rewards addresses of the input asset\\n   **/\\n  function getRewardsByAsset(address asset) external view returns (address[] memory);\\n\\n  /**\\n   * @dev Returns the list of available reward addresses\\n   * @return List of rewards supported in this contract\\n   **/\\n  function getRewardsList() external view returns (address[] memory);\\n\\n  /**\\n   * @dev Returns the accrued rewards balance of a user, not including virtually accrued rewards since last distribution.\\n   * @param user The address of the user\\n   * @param reward The address of the reward token\\n   * @return Unclaimed rewards, not including new distributions\\n   **/\\n  function getUserAccruedRewards(address user, address reward) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns a single rewards balance of a user, including virtually accrued and unrealized claimable rewards.\\n   * @param assets List of incentivized assets to check eligible distributions\\n   * @param user The address of the user\\n   * @param reward The address of the reward token\\n   * @return The rewards amount\\n   **/\\n  function getUserRewards(\\n    address[] calldata assets,\\n    address user,\\n    address reward\\n  ) external view returns (uint256);\\n\\n  /**\\n   * @dev Returns a list all rewards of a user, including already accrued and unrealized claimable rewards\\n   * @param assets List of incentivized assets to check eligible distributions\\n   * @param user The address of the user\\n   * @return The list of reward addresses\\n   * @return The list of unclaimed amount of rewards\\n   **/\\n  function getAllUserRewards(\\n    address[] calldata assets,\\n    address user\\n  ) external view returns (address[] memory, uint256[] memory);\\n\\n  /**\\n   * @dev Returns the decimals of an asset to calculate the distribution delta\\n   * @param asset The address to retrieve decimals\\n   * @return The decimals of an underlying asset\\n   */\\n  function getAssetDecimals(address asset) external view returns (uint8);\\n\\n  /**\\n   * @dev Returns the address of the emission manager\\n   * @return The address of the EmissionManager\\n   */\\n  function EMISSION_MANAGER() external view returns (address);\\n\\n  /**\\n   * @dev Returns the address of the emission manager.\\n   * Deprecated: This getter is maintained for compatibility purposes. Use the `EMISSION_MANAGER()` function instead.\\n   * @return The address of the EmissionManager\\n   */\\n  function getEmissionManager() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd393efd85f696114f9ab69e6bfdcbf3a2bcf16ef5002516d56a0f0359e3d9bba\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Defines the basic interface for a Rewards Distributor.","version":1}}},"contracts/rewards/interfaces/IStakedToken.sol":{"IStakedToken":{"abi":[{"inputs":[],"name":"STAKED_TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"STAKED_TOKEN()":"312f6b83","claimRewards(address,uint256)":"9a99b4f0","cooldown()":"787a08a6","redeem(address,uint256)":"1e9a6950","stake(address,uint256)":"adc9772e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"STAKED_TOKEN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"claimRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cooldown\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"redeem\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/rewards/interfaces/IStakedToken.sol\":\"IStakedToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"contracts/rewards/interfaces/IStakedToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IStakedToken {\\n  function STAKED_TOKEN() external view returns (address);\\n\\n  function stake(address to, uint256 amount) external;\\n\\n  function redeem(address to, uint256 amount) external;\\n\\n  function cooldown() external;\\n\\n  function claimRewards(address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x10b37429742840bd41ae967e03ee35e295d500229c2d7b2922c9492cd2f8f1ee\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/rewards/interfaces/IStakedTokenTransferStrategy.sol":{"IStakedTokenTransferStrategy":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdrawal","type":"event"},{"inputs":[],"name":"dropApproval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardsAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakeContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnderlyingToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"reward","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"performTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renewApproval","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave*","kind":"dev","methods":{"dropApproval()":{"details":"Drop approval of AAVE to the Staked Aave contract in case of emergency."},"emergencyWithdrawal(address,address,uint256)":{"details":"Perform an emergency token withdrawal only callable by the Rewards admin","params":{"amount":"Amount of the withdrawal","to":"Address of the recipient of the withdrawal","token":"Address of the token to withdraw funds from this contract"}},"getIncentivesController()":{"returns":{"_0":"Returns the address of the Incentives Controller"}},"getRewardsAdmin()":{"returns":{"_0":"Returns the address of the Rewards admin"}},"getStakeContract()":{"returns":{"_0":"Staked Token contract address"}},"getUnderlyingToken()":{"returns":{"_0":"Underlying token address from the stake contract"}},"performTransfer(address,address,uint256)":{"details":"Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation","params":{"amount":"Amount to transfer to the \"to\" address parameter","reward":"Address of the reward token","to":"Account to transfer rewards"},"returns":{"_0":"Returns true bool if transfer logic succeeds"}},"renewApproval()":{"details":"Perform a MAX_UINT approval of AAVE to the Staked Aave contract."}},"title":"IStakedTokenTransferStrategy","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"dropApproval()":"3a342acc","emergencyWithdrawal(address,address,uint256)":"8d8e5da7","getIncentivesController()":"75d26413","getRewardsAdmin()":"c6255443","getStakeContract()":"dfd29d9e","getUnderlyingToken()":"ee719bc8","performTransfer(address,address,uint256)":"16beb982","renewApproval()":"a3406251"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"EmergencyWithdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"dropApproval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emergencyWithdrawal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardsAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakeContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUnderlyingToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"performTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renewApproval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave*\",\"kind\":\"dev\",\"methods\":{\"dropApproval()\":{\"details\":\"Drop approval of AAVE to the Staked Aave contract in case of emergency.\"},\"emergencyWithdrawal(address,address,uint256)\":{\"details\":\"Perform an emergency token withdrawal only callable by the Rewards admin\",\"params\":{\"amount\":\"Amount of the withdrawal\",\"to\":\"Address of the recipient of the withdrawal\",\"token\":\"Address of the token to withdraw funds from this contract\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"Returns the address of the Incentives Controller\"}},\"getRewardsAdmin()\":{\"returns\":{\"_0\":\"Returns the address of the Rewards admin\"}},\"getStakeContract()\":{\"returns\":{\"_0\":\"Staked Token contract address\"}},\"getUnderlyingToken()\":{\"returns\":{\"_0\":\"Underlying token address from the stake contract\"}},\"performTransfer(address,address,uint256)\":{\"details\":\"Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation\",\"params\":{\"amount\":\"Amount to transfer to the \\\"to\\\" address parameter\",\"reward\":\"Address of the reward token\",\"to\":\"Account to transfer rewards\"},\"returns\":{\"_0\":\"Returns true bool if transfer logic succeeds\"}},\"renewApproval()\":{\"details\":\"Perform a MAX_UINT approval of AAVE to the Staked Aave contract.\"}},\"title\":\"IStakedTokenTransferStrategy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/rewards/interfaces/IStakedTokenTransferStrategy.sol\":\"IStakedTokenTransferStrategy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"contracts/rewards/interfaces/IStakedToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IStakedToken {\\n  function STAKED_TOKEN() external view returns (address);\\n\\n  function stake(address to, uint256 amount) external;\\n\\n  function redeem(address to, uint256 amount) external;\\n\\n  function cooldown() external;\\n\\n  function claimRewards(address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x10b37429742840bd41ae967e03ee35e295d500229c2d7b2922c9492cd2f8f1ee\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/IStakedTokenTransferStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IStakedToken} from '../interfaces/IStakedToken.sol';\\nimport {ITransferStrategyBase} from './ITransferStrategyBase.sol';\\n\\n/**\\n * @title IStakedTokenTransferStrategy\\n * @author Aave\\n **/\\ninterface IStakedTokenTransferStrategy is ITransferStrategyBase {\\n  /**\\n   * @dev Perform a MAX_UINT approval of AAVE to the Staked Aave contract.\\n   */\\n  function renewApproval() external;\\n\\n  /**\\n   * @dev Drop approval of AAVE to the Staked Aave contract in case of emergency.\\n   */\\n  function dropApproval() external;\\n\\n  /**\\n   * @return Staked Token contract address\\n   */\\n  function getStakeContract() external view returns (address);\\n\\n  /**\\n   * @return Underlying token address from the stake contract\\n   */\\n  function getUnderlyingToken() external view returns (address);\\n}\\n\",\"keccak256\":\"0x9ef8eba3547768d2d45582fdba95d279935345d2e8a5e098c0587b332d004a63\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/ITransferStrategyBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface ITransferStrategyBase {\\n  event EmergencyWithdrawal(\\n    address indexed caller,\\n    address indexed token,\\n    address indexed to,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @dev Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation\\n   * @param to Account to transfer rewards\\n   * @param reward Address of the reward token\\n   * @param amount Amount to transfer to the \\\"to\\\" address parameter\\n   * @return Returns true bool if transfer logic succeeds\\n   */\\n  function performTransfer(address to, address reward, uint256 amount) external returns (bool);\\n\\n  /**\\n   * @return Returns the address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view returns (address);\\n\\n  /**\\n   * @return Returns the address of the Rewards admin\\n   */\\n  function getRewardsAdmin() external view returns (address);\\n\\n  /**\\n   * @dev Perform an emergency token withdrawal only callable by the Rewards admin\\n   * @param token Address of the token to withdraw funds from this contract\\n   * @param to Address of the recipient of the withdrawal\\n   * @param amount Amount of the withdrawal\\n   */\\n  function emergencyWithdrawal(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0xa52a6dc237879acbed7325787ce58238a3afd626fa2ed827d4e321d2e4ef51ad\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/rewards/interfaces/ITransferStrategyBase.sol":{"ITransferStrategyBase":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdrawal","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardsAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"reward","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"performTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"emergencyWithdrawal(address,address,uint256)":{"details":"Perform an emergency token withdrawal only callable by the Rewards admin","params":{"amount":"Amount of the withdrawal","to":"Address of the recipient of the withdrawal","token":"Address of the token to withdraw funds from this contract"}},"getIncentivesController()":{"returns":{"_0":"Returns the address of the Incentives Controller"}},"getRewardsAdmin()":{"returns":{"_0":"Returns the address of the Rewards admin"}},"performTransfer(address,address,uint256)":{"details":"Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation","params":{"amount":"Amount to transfer to the \"to\" address parameter","reward":"Address of the reward token","to":"Account to transfer rewards"},"returns":{"_0":"Returns true bool if transfer logic succeeds"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"emergencyWithdrawal(address,address,uint256)":"8d8e5da7","getIncentivesController()":"75d26413","getRewardsAdmin()":"c6255443","performTransfer(address,address,uint256)":"16beb982"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"EmergencyWithdrawal\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emergencyWithdrawal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardsAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"performTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"emergencyWithdrawal(address,address,uint256)\":{\"details\":\"Perform an emergency token withdrawal only callable by the Rewards admin\",\"params\":{\"amount\":\"Amount of the withdrawal\",\"to\":\"Address of the recipient of the withdrawal\",\"token\":\"Address of the token to withdraw funds from this contract\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"Returns the address of the Incentives Controller\"}},\"getRewardsAdmin()\":{\"returns\":{\"_0\":\"Returns the address of the Rewards admin\"}},\"performTransfer(address,address,uint256)\":{\"details\":\"Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation\",\"params\":{\"amount\":\"Amount to transfer to the \\\"to\\\" address parameter\",\"reward\":\"Address of the reward token\",\"to\":\"Account to transfer rewards\"},\"returns\":{\"_0\":\"Returns true bool if transfer logic succeeds\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/rewards/interfaces/ITransferStrategyBase.sol\":\"ITransferStrategyBase\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"contracts/rewards/interfaces/ITransferStrategyBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface ITransferStrategyBase {\\n  event EmergencyWithdrawal(\\n    address indexed caller,\\n    address indexed token,\\n    address indexed to,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @dev Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation\\n   * @param to Account to transfer rewards\\n   * @param reward Address of the reward token\\n   * @param amount Amount to transfer to the \\\"to\\\" address parameter\\n   * @return Returns true bool if transfer logic succeeds\\n   */\\n  function performTransfer(address to, address reward, uint256 amount) external returns (bool);\\n\\n  /**\\n   * @return Returns the address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view returns (address);\\n\\n  /**\\n   * @return Returns the address of the Rewards admin\\n   */\\n  function getRewardsAdmin() external view returns (address);\\n\\n  /**\\n   * @dev Perform an emergency token withdrawal only callable by the Rewards admin\\n   * @param token Address of the token to withdraw funds from this contract\\n   * @param to Address of the recipient of the withdrawal\\n   * @param amount Amount of the withdrawal\\n   */\\n  function emergencyWithdrawal(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0xa52a6dc237879acbed7325787ce58238a3afd626fa2ed827d4e321d2e4ef51ad\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/rewards/libraries/RewardsDataTypes.sol":{"RewardsDataTypes":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122069a37d22fd3486f4929b1d990042b272c5a1c5272138a2a0f5b7d74d44313f8064736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH10 0xA37D22FD3486F4929B1D SWAP10 STOP TIMESTAMP 0xB2 PUSH19 0xC5A1C5272138A2A0F5B7D74D44313F8064736F PUSH13 0x634300080A0033000000000000 ","sourceMap":"226:1438:184:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;226:1438:184;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122069a37d22fd3486f4929b1d990042b272c5a1c5272138a2a0f5b7d74d44313f8064736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH10 0xA37D22FD3486F4929B1D SWAP10 STOP TIMESTAMP 0xB2 PUSH19 0xC5A1C5272138A2A0F5B7D74D44313F8064736F PUSH13 0x634300080A0033000000000000 ","sourceMap":"226:1438:184:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/rewards/libraries/RewardsDataTypes.sol\":\"RewardsDataTypes\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"contracts/misc/interfaces/IEACAggregatorProxy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IEACAggregatorProxy {\\n  function decimals() external view returns (uint8);\\n\\n  function latestAnswer() external view returns (int256);\\n\\n  function latestTimestamp() external view returns (uint256);\\n\\n  function latestRound() external view returns (uint256);\\n\\n  function getAnswer(uint256 roundId) external view returns (int256);\\n\\n  function getTimestamp(uint256 roundId) external view returns (uint256);\\n\\n  event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 timestamp);\\n  event NewRound(uint256 indexed roundId, address indexed startedBy);\\n}\\n\",\"keccak256\":\"0x75bb34641419925730f87eeb122521b34cfd953b800212c362770ed1c7c5d719\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/ITransferStrategyBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface ITransferStrategyBase {\\n  event EmergencyWithdrawal(\\n    address indexed caller,\\n    address indexed token,\\n    address indexed to,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @dev Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation\\n   * @param to Account to transfer rewards\\n   * @param reward Address of the reward token\\n   * @param amount Amount to transfer to the \\\"to\\\" address parameter\\n   * @return Returns true bool if transfer logic succeeds\\n   */\\n  function performTransfer(address to, address reward, uint256 amount) external returns (bool);\\n\\n  /**\\n   * @return Returns the address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view returns (address);\\n\\n  /**\\n   * @return Returns the address of the Rewards admin\\n   */\\n  function getRewardsAdmin() external view returns (address);\\n\\n  /**\\n   * @dev Perform an emergency token withdrawal only callable by the Rewards admin\\n   * @param token Address of the token to withdraw funds from this contract\\n   * @param to Address of the recipient of the withdrawal\\n   * @param amount Amount of the withdrawal\\n   */\\n  function emergencyWithdrawal(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0xa52a6dc237879acbed7325787ce58238a3afd626fa2ed827d4e321d2e4ef51ad\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/libraries/RewardsDataTypes.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {ITransferStrategyBase} from '../interfaces/ITransferStrategyBase.sol';\\nimport {IEACAggregatorProxy} from '../../misc/interfaces/IEACAggregatorProxy.sol';\\n\\nlibrary RewardsDataTypes {\\n  struct RewardsConfigInput {\\n    uint88 emissionPerSecond;\\n    uint256 totalSupply;\\n    uint32 distributionEnd;\\n    address asset;\\n    address reward;\\n    ITransferStrategyBase transferStrategy;\\n    IEACAggregatorProxy rewardOracle;\\n  }\\n\\n  struct UserAssetBalance {\\n    address asset;\\n    uint256 userBalance;\\n    uint256 totalSupply;\\n  }\\n\\n  struct UserData {\\n    // Liquidity index of the reward distribution for the user\\n    uint104 index;\\n    // Amount of accrued rewards for the user since last user index update\\n    uint128 accrued;\\n  }\\n\\n  struct RewardData {\\n    // Liquidity index of the reward distribution\\n    uint104 index;\\n    // Amount of reward tokens distributed per second\\n    uint88 emissionPerSecond;\\n    // Timestamp of the last reward index update\\n    uint32 lastUpdateTimestamp;\\n    // The end of the distribution of rewards (in seconds)\\n    uint32 distributionEnd;\\n    // Map of user addresses and their rewards data (userAddress => userData)\\n    mapping(address => UserData) usersData;\\n  }\\n\\n  struct AssetData {\\n    // Map of reward token addresses and their data (rewardTokenAddress => rewardData)\\n    mapping(address => RewardData) rewards;\\n    // List of reward token addresses for the asset\\n    mapping(uint128 => address) availableRewards;\\n    // Count of reward tokens for the asset\\n    uint128 availableRewardsCount;\\n    // Number of decimals of the asset\\n    uint8 decimals;\\n  }\\n}\\n\",\"keccak256\":\"0xaaa314b4e9f40878f4fd20e99075fe60309c9e223a5b8c244aaaeb7229d8c318\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/rewards/transfer-strategies/PullRewardsTransferStrategy.sol":{"PullRewardsTransferStrategy":{"abi":[{"inputs":[{"internalType":"address","name":"incentivesController","type":"address"},{"internalType":"address","name":"rewardsAdmin","type":"address"},{"internalType":"address","name":"rewardsVault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdrawal","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardsAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardsVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"reward","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"performTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave*","kind":"dev","methods":{"emergencyWithdrawal(address,address,uint256)":{"details":"Perform an emergency token withdrawal only callable by the Rewards admin","params":{"amount":"Amount of the withdrawal","to":"Address of the recipient of the withdrawal","token":"Address of the token to withdraw funds from this contract"}},"getIncentivesController()":{"returns":{"_0":"Returns the address of the Incentives Controller"}},"getRewardsAdmin()":{"returns":{"_0":"Returns the address of the Rewards admin"}},"getRewardsVault()":{"returns":{"_0":"Address of the rewards vault"}},"performTransfer(address,address,uint256)":{"details":"Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation","params":{"amount":"Amount to transfer to the \"to\" address parameter","reward":"Address of the reward token","to":"Account to transfer rewards"},"returns":{"_0":"Returns true bool if transfer logic succeeds"}}},"title":"PullRewardsTransferStrategy","version":1},"evm":{"bytecode":{"functionDebugData":{"@_39748":{"entryPoint":null,"id":39748,"parameterSlots":3,"returnSlots":0},"@_40011":{"entryPoint":null,"id":40011,"parameterSlots":2,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":76,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_address_fromMemory":{"entryPoint":104,"id":null,"parameterSlots":2,"returnSlots":3}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:576:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"74:117:201","statements":[{"nodeType":"YulAssignment","src":"84:22:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"99:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"93:5:201"},"nodeType":"YulFunctionCall","src":"93:13:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"84:5:201"}]},{"body":{"nodeType":"YulBlock","src":"169:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"178:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"181:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"171:6:201"},"nodeType":"YulFunctionCall","src":"171:12:201"},"nodeType":"YulExpressionStatement","src":"171:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"128:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"139:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"154:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"159:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"150:3:201"},"nodeType":"YulFunctionCall","src":"150:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"163:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"146:3:201"},"nodeType":"YulFunctionCall","src":"146:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"135:3:201"},"nodeType":"YulFunctionCall","src":"135:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"125:2:201"},"nodeType":"YulFunctionCall","src":"125:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"118:6:201"},"nodeType":"YulFunctionCall","src":"118:50:201"},"nodeType":"YulIf","src":"115:70:201"}]},"name":"abi_decode_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"53:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"64:5:201","type":""}],"src":"14:177:201"},{"body":{"nodeType":"YulBlock","src":"311:263:201","statements":[{"body":{"nodeType":"YulBlock","src":"357:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"366:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"369:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"359:6:201"},"nodeType":"YulFunctionCall","src":"359:12:201"},"nodeType":"YulExpressionStatement","src":"359:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"332:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"341:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"328:3:201"},"nodeType":"YulFunctionCall","src":"328:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"353:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"324:3:201"},"nodeType":"YulFunctionCall","src":"324:32:201"},"nodeType":"YulIf","src":"321:52:201"},{"nodeType":"YulAssignment","src":"382:50:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"422:9:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"392:29:201"},"nodeType":"YulFunctionCall","src":"392:40:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"382:6:201"}]},{"nodeType":"YulAssignment","src":"441:59:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"485:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"496:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"481:3:201"},"nodeType":"YulFunctionCall","src":"481:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"451:29:201"},"nodeType":"YulFunctionCall","src":"451:49:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"441:6:201"}]},{"nodeType":"YulAssignment","src":"509:59:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"553:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"564:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"549:3:201"},"nodeType":"YulFunctionCall","src":"549:18:201"}],"functionName":{"name":"abi_decode_address_fromMemory","nodeType":"YulIdentifier","src":"519:29:201"},"nodeType":"YulFunctionCall","src":"519:49:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"509:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"261:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"272:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"284:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"292:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"300:6:201","type":""}],"src":"196:378:201"}]},"contents":"{\n    { }\n    function abi_decode_address_fromMemory(offset) -> value\n    {\n        value := mload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address_fromMemory(headStart)\n        value1 := abi_decode_address_fromMemory(add(headStart, 32))\n        value2 := abi_decode_address_fromMemory(add(headStart, 64))\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"60e060405234801561001057600080fd5b5060405161078038038061078083398101604081905261002f91610068565b6001600160a01b0392831660805290821660a0521660c0526100ab565b80516001600160a01b038116811461006357600080fd5b919050565b60008060006060848603121561007d57600080fd5b6100868461004c565b92506100946020850161004c565b91506100a26040850161004c565b90509250925092565b60805160a05160c0516106936100ed6000396000818161011801526101fe01526000818160f201526102460152600081816096015261014001526106936000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80638d8e5da7116100505780638d8e5da7146100db578063c6255443146100f0578063e23ddec51461011657600080fd5b806316beb9821461006c57806375d2641314610094575b600080fd5b61007f61007a366004610621565b61013c565b60405190151581526020015b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008b565b6100ee6100e9366004610621565b61022e565b005b7f00000000000000000000000000000000000000000000000000000000000000006100b6565b7f00000000000000000000000000000000000000000000000000000000000000006100b6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146101e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f43414c4c45525f4e4f545f494e43454e54495645535f434f4e54524f4c4c455260448201526064015b60405180910390fd5b61022473ffffffffffffffffffffffffffffffffffffffff84167f00000000000000000000000000000000000000000000000000000000000000008685610371565b5060019392505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146102cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f4e4c595f524557415244535f41444d494e000000000000000000000000000060448201526064016101d9565b6102ee73ffffffffffffffffffffffffffffffffffffffff84168383610453565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7dc4ea712e6400e67a5abca1a983e5c420c386c19936dc120cd860b50b8e25798460405161036491815260200190565b60405180910390a4505050565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af16103dc573d6000803e3d6000fd5b506103e68561052c565b61044c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d0000000000000060448201526064016101d9565b5050505050565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af16104b6573d6000803e3d6000fd5b506104c08461052c565b610526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e73666572000000000000000000000060448201526064016101d9565b50505050565b600061056c565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156105ab57602081146105e5576105a67f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f610533565b6105f2565b823b6105dc576105dc7f475076323a206e6f74206120636f6e74726163740000000000000000000000006014610533565b600191506105f2565b3d6000803e600051151591505b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461061c57600080fd5b919050565b60008060006060848603121561063657600080fd5b61063f846105f8565b925061064d602085016105f8565b915060408401359050925092509256fea2646970667358221220d1e457b8c00f8e75dbbcc090356fbff025b95a05217c9766080dd379a42ff9d364736f6c634300080a0033","opcodes":"PUSH1 0xE0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x780 CODESIZE SUB DUP1 PUSH2 0x780 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x68 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x80 MSTORE SWAP1 DUP3 AND PUSH1 0xA0 MSTORE AND PUSH1 0xC0 MSTORE PUSH2 0xAB JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x63 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x7D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x86 DUP5 PUSH2 0x4C JUMP JUMPDEST SWAP3 POP PUSH2 0x94 PUSH1 0x20 DUP6 ADD PUSH2 0x4C JUMP JUMPDEST SWAP2 POP PUSH2 0xA2 PUSH1 0x40 DUP6 ADD PUSH2 0x4C JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0x693 PUSH2 0xED PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x118 ADD MSTORE PUSH2 0x1FE ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH1 0xF2 ADD MSTORE PUSH2 0x246 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH1 0x96 ADD MSTORE PUSH2 0x140 ADD MSTORE PUSH2 0x693 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 0x8D8E5DA7 GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x8D8E5DA7 EQ PUSH2 0xDB JUMPI DUP1 PUSH4 0xC6255443 EQ PUSH2 0xF0 JUMPI DUP1 PUSH4 0xE23DDEC5 EQ PUSH2 0x116 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x16BEB982 EQ PUSH2 0x6C JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x94 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7F PUSH2 0x7A CALLDATASIZE PUSH1 0x4 PUSH2 0x621 JUMP JUMPDEST PUSH2 0x13C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH32 0x0 JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x8B JUMP JUMPDEST PUSH2 0xEE PUSH2 0xE9 CALLDATASIZE PUSH1 0x4 PUSH2 0x621 JUMP JUMPDEST PUSH2 0x22E JUMP JUMPDEST STOP JUMPDEST PUSH32 0x0 PUSH2 0xB6 JUMP JUMPDEST PUSH32 0x0 PUSH2 0xB6 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1E2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43414C4C45525F4E4F545F494E43454E54495645535F434F4E54524F4C4C4552 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x224 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH32 0x0 DUP7 DUP6 PUSH2 0x371 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x2CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F524557415244535F41444D494E0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1D9 JUMP JUMPDEST PUSH2 0x2EE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP4 DUP4 PUSH2 0x453 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x7DC4EA712E6400E67A5ABCA1A983E5C420C386C19936DC120CD860B50B8E2579 DUP5 PUSH1 0x40 MLOAD PUSH2 0x364 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x3DC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x3E6 DUP6 PUSH2 0x52C JUMP JUMPDEST PUSH2 0x44C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1D9 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x4B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x4C0 DUP5 PUSH2 0x52C JUMP JUMPDEST PUSH2 0x526 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1D9 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x56C JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x5AB JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x5E5 JUMPI PUSH2 0x5A6 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x533 JUMP JUMPDEST PUSH2 0x5F2 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x5DC JUMPI PUSH2 0x5DC PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x533 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x5F2 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x61C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x636 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x63F DUP5 PUSH2 0x5F8 JUMP JUMPDEST SWAP3 POP PUSH2 0x64D PUSH1 0x20 DUP6 ADD PUSH2 0x5F8 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD1 0xE4 JUMPI 0xB8 0xC0 0xF DUP15 PUSH22 0xDBBCC090356FBFF025B95A05217C9766080DD379A42F 0xF9 0xD3 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"790:852:185:-:0;;;965:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;670:44:187;;;;;720:28;;;;;1130::185::1;;::::0;790:852;;14:177:201;93:13;;-1:-1:-1;;;;;135:31:201;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:378::-;284:6;292;300;353:2;341:9;332:7;328:23;324:32;321:52;;;369:1;366;359:12;321:52;392:40;422:9;392:40;:::i;:::-;382:50;;451:49;496:2;485:9;481:18;451:49;:::i;:::-;441:59;;519:49;564:2;553:9;549:18;519:49;:::i;:::-;509:59;;196:378;;;;;:::o;:::-;790:852:185;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@emergencyWithdrawal_40098":{"entryPoint":558,"id":40098,"parameterSlots":3,"returnSlots":0},"@getIncentivesController_40047":{"entryPoint":null,"id":40047,"parameterSlots":0,"returnSlots":1},"@getLastTransferResult_117":{"entryPoint":1324,"id":117,"parameterSlots":1,"returnSlots":1},"@getRewardsAdmin_40057":{"entryPoint":null,"id":40057,"parameterSlots":0,"returnSlots":1},"@getRewardsVault_39786":{"entryPoint":null,"id":39786,"parameterSlots":0,"returnSlots":1},"@performTransfer_39777":{"entryPoint":316,"id":39777,"parameterSlots":3,"returnSlots":1},"@safeTransferFrom_106":{"entryPoint":881,"id":106,"parameterSlots":4,"returnSlots":0},"@safeTransfer_78":{"entryPoint":1107,"id":78,"parameterSlots":3,"returnSlots":0},"abi_decode_address":{"entryPoint":1528,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":1569,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3f731c6282513aad661017d660e9777df98697b25477c4a167f4ae2ad258b6ef__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_81338f1a577db8c7c83833eb7ec6bb164402c9f5cc1b20dac857316f1c65643a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2562:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:147:201","statements":[{"nodeType":"YulAssignment","src":"73:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:201"},"nodeType":"YulFunctionCall","src":"82:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:201"}]},{"body":{"nodeType":"YulBlock","src":"188:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"197:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"200:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"190:6:201"},"nodeType":"YulFunctionCall","src":"190:12:201"},"nodeType":"YulExpressionStatement","src":"190:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"142:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:201"},"nodeType":"YulFunctionCall","src":"131:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:201"},"nodeType":"YulFunctionCall","src":"121:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:201"},"nodeType":"YulFunctionCall","src":"114:73:201"},"nodeType":"YulIf","src":"111:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:201","type":""}],"src":"14:196:201"},{"body":{"nodeType":"YulBlock","src":"319:224:201","statements":[{"body":{"nodeType":"YulBlock","src":"365:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"374:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"377:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"367:6:201"},"nodeType":"YulFunctionCall","src":"367:12:201"},"nodeType":"YulExpressionStatement","src":"367:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"340:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"349:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"336:3:201"},"nodeType":"YulFunctionCall","src":"336:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"361:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"332:3:201"},"nodeType":"YulFunctionCall","src":"332:32:201"},"nodeType":"YulIf","src":"329:52:201"},{"nodeType":"YulAssignment","src":"390:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"419:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"400:18:201"},"nodeType":"YulFunctionCall","src":"400:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"390:6:201"}]},{"nodeType":"YulAssignment","src":"438:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"471:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"482:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"467:3:201"},"nodeType":"YulFunctionCall","src":"467:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"448:18:201"},"nodeType":"YulFunctionCall","src":"448:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"438:6:201"}]},{"nodeType":"YulAssignment","src":"495:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"522:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"533:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"518:3:201"},"nodeType":"YulFunctionCall","src":"518:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"505:12:201"},"nodeType":"YulFunctionCall","src":"505:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"495:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"269:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"280:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"292:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"300:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"308:6:201","type":""}],"src":"215:328:201"},{"body":{"nodeType":"YulBlock","src":"643:92:201","statements":[{"nodeType":"YulAssignment","src":"653:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"665:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"676:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"661:3:201"},"nodeType":"YulFunctionCall","src":"661:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"653:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"695:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"720:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"713:6:201"},"nodeType":"YulFunctionCall","src":"713:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"706:6:201"},"nodeType":"YulFunctionCall","src":"706:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"688:6:201"},"nodeType":"YulFunctionCall","src":"688:41:201"},"nodeType":"YulExpressionStatement","src":"688:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"612:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"623:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"634:4:201","type":""}],"src":"548:187:201"},{"body":{"nodeType":"YulBlock","src":"841:125:201","statements":[{"nodeType":"YulAssignment","src":"851:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"863:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"874:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"859:3:201"},"nodeType":"YulFunctionCall","src":"859:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"851:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"893:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"908:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"916:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"904:3:201"},"nodeType":"YulFunctionCall","src":"904:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"886:6:201"},"nodeType":"YulFunctionCall","src":"886:74:201"},"nodeType":"YulExpressionStatement","src":"886:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"810:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"821:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"832:4:201","type":""}],"src":"740:226:201"},{"body":{"nodeType":"YulBlock","src":"1145:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1162:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1173:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1155:6:201"},"nodeType":"YulFunctionCall","src":"1155:21:201"},"nodeType":"YulExpressionStatement","src":"1155:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1196:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1207:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1192:3:201"},"nodeType":"YulFunctionCall","src":"1192:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"1212:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1185:6:201"},"nodeType":"YulFunctionCall","src":"1185:30:201"},"nodeType":"YulExpressionStatement","src":"1185:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1235:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1246:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1231:3:201"},"nodeType":"YulFunctionCall","src":"1231:18:201"},{"hexValue":"43414c4c45525f4e4f545f494e43454e54495645535f434f4e54524f4c4c4552","kind":"string","nodeType":"YulLiteral","src":"1251:34:201","type":"","value":"CALLER_NOT_INCENTIVES_CONTROLLER"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1224:6:201"},"nodeType":"YulFunctionCall","src":"1224:62:201"},"nodeType":"YulExpressionStatement","src":"1224:62:201"},{"nodeType":"YulAssignment","src":"1295:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1307:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1318:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1303:3:201"},"nodeType":"YulFunctionCall","src":"1303:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1295:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_81338f1a577db8c7c83833eb7ec6bb164402c9f5cc1b20dac857316f1c65643a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1122:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1136:4:201","type":""}],"src":"971:356:201"},{"body":{"nodeType":"YulBlock","src":"1506:168:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1523:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1534:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1516:6:201"},"nodeType":"YulFunctionCall","src":"1516:21:201"},"nodeType":"YulExpressionStatement","src":"1516:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1557:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1568:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1553:3:201"},"nodeType":"YulFunctionCall","src":"1553:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"1573:2:201","type":"","value":"18"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1546:6:201"},"nodeType":"YulFunctionCall","src":"1546:30:201"},"nodeType":"YulExpressionStatement","src":"1546:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1596:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1607:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1592:3:201"},"nodeType":"YulFunctionCall","src":"1592:18:201"},{"hexValue":"4f4e4c595f524557415244535f41444d494e","kind":"string","nodeType":"YulLiteral","src":"1612:20:201","type":"","value":"ONLY_REWARDS_ADMIN"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1585:6:201"},"nodeType":"YulFunctionCall","src":"1585:48:201"},"nodeType":"YulExpressionStatement","src":"1585:48:201"},{"nodeType":"YulAssignment","src":"1642:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1654:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1665:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1650:3:201"},"nodeType":"YulFunctionCall","src":"1650:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1642:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_3f731c6282513aad661017d660e9777df98697b25477c4a167f4ae2ad258b6ef__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1483:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1497:4:201","type":""}],"src":"1332:342:201"},{"body":{"nodeType":"YulBlock","src":"1780:76:201","statements":[{"nodeType":"YulAssignment","src":"1790:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1802:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1813:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1798:3:201"},"nodeType":"YulFunctionCall","src":"1798:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1790:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1832:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"1843:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1825:6:201"},"nodeType":"YulFunctionCall","src":"1825:25:201"},"nodeType":"YulExpressionStatement","src":"1825:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1749:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1760:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1771:4:201","type":""}],"src":"1679:177:201"},{"body":{"nodeType":"YulBlock","src":"2035:175:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2052:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2063:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2045:6:201"},"nodeType":"YulFunctionCall","src":"2045:21:201"},"nodeType":"YulExpressionStatement","src":"2045:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2086:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2097:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2082:3:201"},"nodeType":"YulFunctionCall","src":"2082:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2102:2:201","type":"","value":"25"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2075:6:201"},"nodeType":"YulFunctionCall","src":"2075:30:201"},"nodeType":"YulExpressionStatement","src":"2075:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2125:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2136:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2121:3:201"},"nodeType":"YulFunctionCall","src":"2121:18:201"},{"hexValue":"475076323a206661696c6564207472616e7366657246726f6d","kind":"string","nodeType":"YulLiteral","src":"2141:27:201","type":"","value":"GPv2: failed transferFrom"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2114:6:201"},"nodeType":"YulFunctionCall","src":"2114:55:201"},"nodeType":"YulExpressionStatement","src":"2114:55:201"},{"nodeType":"YulAssignment","src":"2178:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2190:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2201:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2186:3:201"},"nodeType":"YulFunctionCall","src":"2186:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2178:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2012:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2026:4:201","type":""}],"src":"1861:349:201"},{"body":{"nodeType":"YulBlock","src":"2389:171:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2406:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2417:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2399:6:201"},"nodeType":"YulFunctionCall","src":"2399:21:201"},"nodeType":"YulExpressionStatement","src":"2399:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2440:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2451:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2436:3:201"},"nodeType":"YulFunctionCall","src":"2436:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2456:2:201","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2429:6:201"},"nodeType":"YulFunctionCall","src":"2429:30:201"},"nodeType":"YulExpressionStatement","src":"2429:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2479:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2490:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2475:3:201"},"nodeType":"YulFunctionCall","src":"2475:18:201"},{"hexValue":"475076323a206661696c6564207472616e73666572","kind":"string","nodeType":"YulLiteral","src":"2495:23:201","type":"","value":"GPv2: failed transfer"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2468:6:201"},"nodeType":"YulFunctionCall","src":"2468:51:201"},"nodeType":"YulExpressionStatement","src":"2468:51:201"},{"nodeType":"YulAssignment","src":"2528:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2540:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2551:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2536:3:201"},"nodeType":"YulFunctionCall","src":"2536:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2528:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2366:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2380:4:201","type":""}],"src":"2215:345:201"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_stringliteral_81338f1a577db8c7c83833eb7ec6bb164402c9f5cc1b20dac857316f1c65643a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"CALLER_NOT_INCENTIVES_CONTROLLER\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_3f731c6282513aad661017d660e9777df98697b25477c4a167f4ae2ad258b6ef__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 18)\n        mstore(add(headStart, 64), \"ONLY_REWARDS_ADMIN\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_stringliteral_910928af3c8209d55654c19deb64d9d16f87d0d58e9e40975f82488ba9b27d7e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"GPv2: failed transferFrom\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"GPv2: failed transfer\")\n        tail := add(headStart, 96)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"39730":[{"length":32,"start":280},{"length":32,"start":510}],"39993":[{"length":32,"start":150},{"length":32,"start":320}],"39995":[{"length":32,"start":242},{"length":32,"start":582}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100675760003560e01c80638d8e5da7116100505780638d8e5da7146100db578063c6255443146100f0578063e23ddec51461011657600080fd5b806316beb9821461006c57806375d2641314610094575b600080fd5b61007f61007a366004610621565b61013c565b60405190151581526020015b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008b565b6100ee6100e9366004610621565b61022e565b005b7f00000000000000000000000000000000000000000000000000000000000000006100b6565b7f00000000000000000000000000000000000000000000000000000000000000006100b6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146101e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f43414c4c45525f4e4f545f494e43454e54495645535f434f4e54524f4c4c455260448201526064015b60405180910390fd5b61022473ffffffffffffffffffffffffffffffffffffffff84167f00000000000000000000000000000000000000000000000000000000000000008685610371565b5060019392505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146102cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f4e4c595f524557415244535f41444d494e000000000000000000000000000060448201526064016101d9565b6102ee73ffffffffffffffffffffffffffffffffffffffff84168383610453565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7dc4ea712e6400e67a5abca1a983e5c420c386c19936dc120cd860b50b8e25798460405161036491815260200190565b60405180910390a4505050565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff8581166004840152841660248301526044820183905290600080606483828a5af16103dc573d6000803e3d6000fd5b506103e68561052c565b61044c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f475076323a206661696c6564207472616e7366657246726f6d0000000000000060448201526064016101d9565b5050505050565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af16104b6573d6000803e3d6000fd5b506104c08461052c565b610526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e73666572000000000000000000000060448201526064016101d9565b50505050565b600061056c565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156105ab57602081146105e5576105a67f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f610533565b6105f2565b823b6105dc576105dc7f475076323a206e6f74206120636f6e74726163740000000000000000000000006014610533565b600191506105f2565b3d6000803e600051151591505b50919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461061c57600080fd5b919050565b60008060006060848603121561063657600080fd5b61063f846105f8565b925061064d602085016105f8565b915060408401359050925092509256fea2646970667358221220d1e457b8c00f8e75dbbcc090356fbff025b95a05217c9766080dd379a42ff9d364736f6c634300080a0033","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 0x8D8E5DA7 GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x8D8E5DA7 EQ PUSH2 0xDB JUMPI DUP1 PUSH4 0xC6255443 EQ PUSH2 0xF0 JUMPI DUP1 PUSH4 0xE23DDEC5 EQ PUSH2 0x116 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x16BEB982 EQ PUSH2 0x6C JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0x94 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7F PUSH2 0x7A CALLDATASIZE PUSH1 0x4 PUSH2 0x621 JUMP JUMPDEST PUSH2 0x13C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH32 0x0 JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x8B JUMP JUMPDEST PUSH2 0xEE PUSH2 0xE9 CALLDATASIZE PUSH1 0x4 PUSH2 0x621 JUMP JUMPDEST PUSH2 0x22E JUMP JUMPDEST STOP JUMPDEST PUSH32 0x0 PUSH2 0xB6 JUMP JUMPDEST PUSH32 0x0 PUSH2 0xB6 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1E2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43414C4C45525F4E4F545F494E43454E54495645535F434F4E54524F4C4C4552 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x224 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH32 0x0 DUP7 DUP6 PUSH2 0x371 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x2CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F524557415244535F41444D494E0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1D9 JUMP JUMPDEST PUSH2 0x2EE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP4 DUP4 PUSH2 0x453 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x7DC4EA712E6400E67A5ABCA1A983E5C420C386C19936DC120CD860B50B8E2579 DUP5 PUSH1 0x40 MLOAD PUSH2 0x364 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP5 ADD MSTORE DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x64 DUP4 DUP3 DUP11 GAS CALL PUSH2 0x3DC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x3E6 DUP6 PUSH2 0x52C JUMP JUMPDEST PUSH2 0x44C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E7366657246726F6D00000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1D9 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x4B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x4C0 DUP5 PUSH2 0x52C JUMP JUMPDEST PUSH2 0x526 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1D9 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x56C JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x5AB JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0x5E5 JUMPI PUSH2 0x5A6 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x533 JUMP JUMPDEST PUSH2 0x5F2 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0x5DC JUMPI PUSH2 0x5DC PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x533 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x5F2 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x61C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x636 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x63F DUP5 PUSH2 0x5F8 JUMP JUMPDEST SWAP3 POP PUSH2 0x64D PUSH1 0x20 DUP6 ADD PUSH2 0x5F8 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD1 0xE4 JUMPI 0xB8 0xC0 0xF DUP15 PUSH22 0xDBBCC090356FBFF025B95A05217C9766080DD379A42F 0xF9 0xD3 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"790:852:185:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1206:293;;;;;;:::i;:::-;;:::i;:::-;;;713:14:201;;706:22;688:41;;676:2;661:18;1206:293:185;;;;;;;;1178:115:187;1267:21;1178:115;;;916:42:201;904:55;;;886:74;;874:2;859:18;1178:115:187;740:226:201;1641:225:187;;;;;;:::i;:::-;;:::i;:::-;;1337:99;1418:13;1337:99;;1550:90:185;1622:13;1550:90;;1206:293;1404:4;879:21:187;:35;;904:10;879:35;871:80;;;;;;;1173:2:201;871:80:187;;;1155:21:201;;;1192:18;;;1185:30;1251:34;1231:18;;;1224:62;1303:18;;871:80:187;;;;;;;;;1418:58:185::1;:31;::::0;::::1;1450:13;1465:2:::0;1469:6;1418:31:::1;:58::i;:::-;-1:-1:-1::0;1490:4:185::1;1206:293:::0;;;;;:::o;1641:225:187:-;1072:10;:27;1086:13;1072:27;;1064:58;;;;;;;1534:2:201;1064:58:187;;;1516:21:201;1573:2;1553:18;;;1546:30;1612:20;1592:18;;;1585:48;1650:18;;1064:58:187;1332:342:201;1064:58:187;1761:38:::1;:26;::::0;::::1;1788:2:::0;1792:6;1761:26:::1;:38::i;:::-;1850:2;1811:50;;1843:5;1811:50;;1831:10;1811:50;;;1854:6;1811:50;;;;1825:25:201::0;;1813:2;1798:18;;1679:177;1811:50:187::1;;;;;;;;1641:225:::0;;;:::o;1228:780:1:-;1477:4;1471:11;1343:27;1489:36;;;1576:42;1566:53;;;1562:1;1539:25;;1532:88;1662:51;;1657:2;1634:26;;1627:87;1751:2;1728:26;;1721:41;;;1343:27;1324:16;;1821:3;1471:11;1324:16;1792:5;1785;1780:51;1770:155;;1864:16;1861:1;1858;1843:38;1900:16;1897:1;1890:27;1770:155;;1945:28;1967:5;1945:21;:28::i;:::-;1937:66;;;;;;;2063:2:201;1937:66:1;;;2045:21:201;2102:2;2082:18;;;2075:30;2141:27;2121:18;;;2114:55;2186:18;;1937:66:1;1861:349:201;1937:66:1;1318:690;1228:780;;;;:::o;441:657::-;668:4;662:11;538:23;680:36;;;765:42;757:51;;753:1;730:25;;723:86;846:2;823:26;;816:41;;;538:23;519:16;;916:2;662:11;519:16;887:5;880;875:50;865:154;;958:16;955:1;952;937:38;994:16;991:1;984:27;865:154;;1039:28;1061:5;1039:21;:28::i;:::-;1031:62;;;;;;;2417:2:201;1031:62:1;;;2399:21:201;2456:2;2436:18;;;2429:30;2495:23;2475:18;;;2468:51;2536:18;;1031:62:1;2215:345:201;1031:62:1;513:585;441:657;;;:::o;2198:2524::-;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;4611:1;4605:8;4598:16;4591:24;4580:35;;3538:1174;;2198:2524;;;:::o;14:196:201:-;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:328::-;292:6;300;308;361:2;349:9;340:7;336:23;332:32;329:52;;;377:1;374;367:12;329:52;400:29;419:9;400:29;:::i;:::-;390:39;;448:38;482:2;471:9;467:18;448:38;:::i;:::-;438:48;;533:2;522:9;518:18;505:32;495:42;;215:328;;;;;:::o"},"gasEstimates":{"creation":{"codeDepositCost":"336600","executionCost":"infinite","totalCost":"infinite"},"external":{"emergencyWithdrawal(address,address,uint256)":"infinite","getIncentivesController()":"infinite","getRewardsAdmin()":"infinite","getRewardsVault()":"infinite","performTransfer(address,address,uint256)":"infinite"}},"methodIdentifiers":{"emergencyWithdrawal(address,address,uint256)":"8d8e5da7","getIncentivesController()":"75d26413","getRewardsAdmin()":"c6255443","getRewardsVault()":"e23ddec5","performTransfer(address,address,uint256)":"16beb982"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardsAdmin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardsVault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"EmergencyWithdrawal\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emergencyWithdrawal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardsAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardsVault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"performTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave*\",\"kind\":\"dev\",\"methods\":{\"emergencyWithdrawal(address,address,uint256)\":{\"details\":\"Perform an emergency token withdrawal only callable by the Rewards admin\",\"params\":{\"amount\":\"Amount of the withdrawal\",\"to\":\"Address of the recipient of the withdrawal\",\"token\":\"Address of the token to withdraw funds from this contract\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"Returns the address of the Incentives Controller\"}},\"getRewardsAdmin()\":{\"returns\":{\"_0\":\"Returns the address of the Rewards admin\"}},\"getRewardsVault()\":{\"returns\":{\"_0\":\"Address of the rewards vault\"}},\"performTransfer(address,address,uint256)\":{\"details\":\"Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation\",\"params\":{\"amount\":\"Amount to transfer to the \\\"to\\\" address parameter\",\"reward\":\"Address of the reward token\",\"to\":\"Account to transfer rewards\"},\"returns\":{\"_0\":\"Returns true bool if transfer logic succeeds\"}}},\"title\":\"PullRewardsTransferStrategy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Transfer strategy that pulls ERC20 rewards from an external account to the user address. The external account could be a smart contract or EOA that must approve to the PullRewardsTransferStrategy contract address.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/rewards/transfer-strategies/PullRewardsTransferStrategy.sol\":\"PullRewardsTransferStrategy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/IPullRewardsTransferStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {ITransferStrategyBase} from './ITransferStrategyBase.sol';\\n\\n/**\\n * @title IPullRewardsTransferStrategy\\n * @author Aave\\n **/\\ninterface IPullRewardsTransferStrategy is ITransferStrategyBase {\\n  /**\\n   * @return Address of the rewards vault\\n   */\\n  function getRewardsVault() external view returns (address);\\n}\\n\",\"keccak256\":\"0x072fd713c1c4e5d652ec40131beab6438b63817a1657cdd51e0c2cbc9d17b8d0\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/ITransferStrategyBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface ITransferStrategyBase {\\n  event EmergencyWithdrawal(\\n    address indexed caller,\\n    address indexed token,\\n    address indexed to,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @dev Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation\\n   * @param to Account to transfer rewards\\n   * @param reward Address of the reward token\\n   * @param amount Amount to transfer to the \\\"to\\\" address parameter\\n   * @return Returns true bool if transfer logic succeeds\\n   */\\n  function performTransfer(address to, address reward, uint256 amount) external returns (bool);\\n\\n  /**\\n   * @return Returns the address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view returns (address);\\n\\n  /**\\n   * @return Returns the address of the Rewards admin\\n   */\\n  function getRewardsAdmin() external view returns (address);\\n\\n  /**\\n   * @dev Perform an emergency token withdrawal only callable by the Rewards admin\\n   * @param token Address of the token to withdraw funds from this contract\\n   * @param to Address of the recipient of the withdrawal\\n   * @param amount Amount of the withdrawal\\n   */\\n  function emergencyWithdrawal(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0xa52a6dc237879acbed7325787ce58238a3afd626fa2ed827d4e321d2e4ef51ad\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/transfer-strategies/PullRewardsTransferStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IPullRewardsTransferStrategy} from '../interfaces/IPullRewardsTransferStrategy.sol';\\nimport {ITransferStrategyBase} from '../interfaces/ITransferStrategyBase.sol';\\nimport {TransferStrategyBase} from './TransferStrategyBase.sol';\\nimport {GPv2SafeERC20} from '@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title PullRewardsTransferStrategy\\n * @notice Transfer strategy that pulls ERC20 rewards from an external account to the user address.\\n * The external account could be a smart contract or EOA that must approve to the PullRewardsTransferStrategy contract address.\\n * @author Aave\\n **/\\ncontract PullRewardsTransferStrategy is TransferStrategyBase, IPullRewardsTransferStrategy {\\n  using GPv2SafeERC20 for IERC20;\\n\\n  address internal immutable REWARDS_VAULT;\\n\\n  constructor(\\n    address incentivesController,\\n    address rewardsAdmin,\\n    address rewardsVault\\n  ) TransferStrategyBase(incentivesController, rewardsAdmin) {\\n    REWARDS_VAULT = rewardsVault;\\n  }\\n\\n  /// @inheritdoc TransferStrategyBase\\n  function performTransfer(\\n    address to,\\n    address reward,\\n    uint256 amount\\n  )\\n    external\\n    override(TransferStrategyBase, ITransferStrategyBase)\\n    onlyIncentivesController\\n    returns (bool)\\n  {\\n    IERC20(reward).safeTransferFrom(REWARDS_VAULT, to, amount);\\n\\n    return true;\\n  }\\n\\n  /// @inheritdoc IPullRewardsTransferStrategy\\n  function getRewardsVault() external view returns (address) {\\n    return REWARDS_VAULT;\\n  }\\n}\\n\",\"keccak256\":\"0xd8d537bd930f9a0b80307de6a44eb4967ed3f324b8db321a3754f824ad26438f\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/transfer-strategies/TransferStrategyBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {ITransferStrategyBase} from '../interfaces/ITransferStrategyBase.sol';\\nimport {GPv2SafeERC20} from '@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title TransferStrategyStorage\\n * @author Aave\\n **/\\nabstract contract TransferStrategyBase is ITransferStrategyBase {\\n  using GPv2SafeERC20 for IERC20;\\n\\n  address internal immutable INCENTIVES_CONTROLLER;\\n  address internal immutable REWARDS_ADMIN;\\n\\n  constructor(address incentivesController, address rewardsAdmin) {\\n    INCENTIVES_CONTROLLER = incentivesController;\\n    REWARDS_ADMIN = rewardsAdmin;\\n  }\\n\\n  /**\\n   * @dev Modifier for incentives controller only functions\\n   */\\n  modifier onlyIncentivesController() {\\n    require(INCENTIVES_CONTROLLER == msg.sender, 'CALLER_NOT_INCENTIVES_CONTROLLER');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Modifier for reward admin only functions\\n   */\\n  modifier onlyRewardsAdmin() {\\n    require(msg.sender == REWARDS_ADMIN, 'ONLY_REWARDS_ADMIN');\\n    _;\\n  }\\n\\n  /// @inheritdoc ITransferStrategyBase\\n  function getIncentivesController() external view override returns (address) {\\n    return INCENTIVES_CONTROLLER;\\n  }\\n\\n  /// @inheritdoc ITransferStrategyBase\\n  function getRewardsAdmin() external view override returns (address) {\\n    return REWARDS_ADMIN;\\n  }\\n\\n  /// @inheritdoc ITransferStrategyBase\\n  function performTransfer(\\n    address to,\\n    address reward,\\n    uint256 amount\\n  ) external virtual returns (bool);\\n\\n  /// @inheritdoc ITransferStrategyBase\\n  function emergencyWithdrawal(\\n    address token,\\n    address to,\\n    uint256 amount\\n  ) external onlyRewardsAdmin {\\n    IERC20(token).safeTransfer(to, amount);\\n\\n    emit EmergencyWithdrawal(msg.sender, token, to, amount);\\n  }\\n}\\n\",\"keccak256\":\"0xd412ed205d7d5c9d9f2172cc537ad0e86ec7aee7f9bc658a4001a3be4b85ba5e\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Transfer strategy that pulls ERC20 rewards from an external account to the user address. The external account could be a smart contract or EOA that must approve to the PullRewardsTransferStrategy contract address.","version":1}}},"contracts/rewards/transfer-strategies/StakedTokenTransferStrategy.sol":{"StakedTokenTransferStrategy":{"abi":[{"inputs":[{"internalType":"address","name":"incentivesController","type":"address"},{"internalType":"address","name":"rewardsAdmin","type":"address"},{"internalType":"contract IStakedToken","name":"stakeToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdrawal","type":"event"},{"inputs":[],"name":"dropApproval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardsAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakeContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnderlyingToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"reward","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"performTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renewApproval","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave*","kind":"dev","methods":{"dropApproval()":{"details":"Drop approval of AAVE to the Staked Aave contract in case of emergency."},"emergencyWithdrawal(address,address,uint256)":{"details":"Perform an emergency token withdrawal only callable by the Rewards admin","params":{"amount":"Amount of the withdrawal","to":"Address of the recipient of the withdrawal","token":"Address of the token to withdraw funds from this contract"}},"getIncentivesController()":{"returns":{"_0":"Returns the address of the Incentives Controller"}},"getRewardsAdmin()":{"returns":{"_0":"Returns the address of the Rewards admin"}},"getStakeContract()":{"returns":{"_0":"Staked Token contract address"}},"getUnderlyingToken()":{"returns":{"_0":"Underlying token address from the stake contract"}},"performTransfer(address,address,uint256)":{"details":"Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation","params":{"amount":"Amount to transfer to the \"to\" address parameter","reward":"Address of the reward token","to":"Account to transfer rewards"},"returns":{"_0":"Returns true bool if transfer logic succeeds"}},"renewApproval()":{"details":"Perform a MAX_UINT approval of AAVE to the Staked Aave contract."}},"title":"StakedTokenTransferStrategy","version":1},"evm":{"bytecode":{"functionDebugData":{"@_39866":{"entryPoint":null,"id":39866,"parameterSlots":3,"returnSlots":0},"@_40011":{"entryPoint":null,"id":40011,"parameterSlots":2,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":549,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_contract$_IStakedToken_$39566_fromMemory":{"entryPoint":465,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":588,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_rational_0_by_1__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"validator_revert_address":{"entryPoint":440,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1797:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"59:86:201","statements":[{"body":{"nodeType":"YulBlock","src":"123:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"132:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"135:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"125:6:201"},"nodeType":"YulFunctionCall","src":"125:12:201"},"nodeType":"YulExpressionStatement","src":"125:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"82:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"93:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"108:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"113:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"104:3:201"},"nodeType":"YulFunctionCall","src":"104:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"117:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"100:3:201"},"nodeType":"YulFunctionCall","src":"100:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"89:3:201"},"nodeType":"YulFunctionCall","src":"89:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"79:2:201"},"nodeType":"YulFunctionCall","src":"79:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"72:6:201"},"nodeType":"YulFunctionCall","src":"72:50:201"},"nodeType":"YulIf","src":"69:70:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"48:5:201","type":""}],"src":"14:131:201"},{"body":{"nodeType":"YulBlock","src":"287:404:201","statements":[{"body":{"nodeType":"YulBlock","src":"333:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"342:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"345:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"335:6:201"},"nodeType":"YulFunctionCall","src":"335:12:201"},"nodeType":"YulExpressionStatement","src":"335:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"308:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"317:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"304:3:201"},"nodeType":"YulFunctionCall","src":"304:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"329:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"300:3:201"},"nodeType":"YulFunctionCall","src":"300:32:201"},"nodeType":"YulIf","src":"297:52:201"},{"nodeType":"YulVariableDeclaration","src":"358:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"377:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"371:5:201"},"nodeType":"YulFunctionCall","src":"371:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"362:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"421:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"396:24:201"},"nodeType":"YulFunctionCall","src":"396:31:201"},"nodeType":"YulExpressionStatement","src":"396:31:201"},{"nodeType":"YulAssignment","src":"436:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"446:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"436:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"460:40:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"485:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"496:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"481:3:201"},"nodeType":"YulFunctionCall","src":"481:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"475:5:201"},"nodeType":"YulFunctionCall","src":"475:25:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"464:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"534:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"509:24:201"},"nodeType":"YulFunctionCall","src":"509:33:201"},"nodeType":"YulExpressionStatement","src":"509:33:201"},{"nodeType":"YulAssignment","src":"551:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"561:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"551:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"577:40:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"602:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"613:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"598:3:201"},"nodeType":"YulFunctionCall","src":"598:18:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"592:5:201"},"nodeType":"YulFunctionCall","src":"592:25:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"581:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"651:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"626:24:201"},"nodeType":"YulFunctionCall","src":"626:33:201"},"nodeType":"YulExpressionStatement","src":"626:33:201"},{"nodeType":"YulAssignment","src":"668:17:201","value":{"name":"value_2","nodeType":"YulIdentifier","src":"678:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"668:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_contract$_IStakedToken_$39566_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"237:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"248:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"260:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"268:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"276:6:201","type":""}],"src":"150:541:201"},{"body":{"nodeType":"YulBlock","src":"777:170:201","statements":[{"body":{"nodeType":"YulBlock","src":"823:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"832:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"835:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"825:6:201"},"nodeType":"YulFunctionCall","src":"825:12:201"},"nodeType":"YulExpressionStatement","src":"825:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"798:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"807:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"794:3:201"},"nodeType":"YulFunctionCall","src":"794:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"819:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"790:3:201"},"nodeType":"YulFunctionCall","src":"790:32:201"},"nodeType":"YulIf","src":"787:52:201"},{"nodeType":"YulVariableDeclaration","src":"848:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"867:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"861:5:201"},"nodeType":"YulFunctionCall","src":"861:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"852:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"911:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"886:24:201"},"nodeType":"YulFunctionCall","src":"886:31:201"},"nodeType":"YulExpressionStatement","src":"886:31:201"},{"nodeType":"YulAssignment","src":"926:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"936:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"926:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"743:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"754:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"766:6:201","type":""}],"src":"696:251:201"},{"body":{"nodeType":"YulBlock","src":"1089:145:201","statements":[{"nodeType":"YulAssignment","src":"1099:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1111:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1122:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1107:3:201"},"nodeType":"YulFunctionCall","src":"1107:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1099:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1141:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1156:6:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1172:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1177:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1168:3:201"},"nodeType":"YulFunctionCall","src":"1168:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"1181:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1164:3:201"},"nodeType":"YulFunctionCall","src":"1164:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1152:3:201"},"nodeType":"YulFunctionCall","src":"1152:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1134:6:201"},"nodeType":"YulFunctionCall","src":"1134:51:201"},"nodeType":"YulExpressionStatement","src":"1134:51:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1205:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1216:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1201:3:201"},"nodeType":"YulFunctionCall","src":"1201:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"1221:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1194:6:201"},"nodeType":"YulFunctionCall","src":"1194:34:201"},"nodeType":"YulExpressionStatement","src":"1194:34:201"}]},"name":"abi_encode_tuple_t_address_t_rational_0_by_1__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1050:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1061:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1069:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1080:4:201","type":""}],"src":"952:282:201"},{"body":{"nodeType":"YulBlock","src":"1317:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"1363:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1372:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1375:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1365:6:201"},"nodeType":"YulFunctionCall","src":"1365:12:201"},"nodeType":"YulExpressionStatement","src":"1365:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1338:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1347:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1334:3:201"},"nodeType":"YulFunctionCall","src":"1334:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1359:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1330:3:201"},"nodeType":"YulFunctionCall","src":"1330:32:201"},"nodeType":"YulIf","src":"1327:52:201"},{"nodeType":"YulVariableDeclaration","src":"1388:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1407:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"1401:5:201"},"nodeType":"YulFunctionCall","src":"1401:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1392:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"1470:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1479:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1482:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1472:6:201"},"nodeType":"YulFunctionCall","src":"1472:12:201"},"nodeType":"YulExpressionStatement","src":"1472:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1439:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1460:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1453:6:201"},"nodeType":"YulFunctionCall","src":"1453:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1446:6:201"},"nodeType":"YulFunctionCall","src":"1446:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"1436:2:201"},"nodeType":"YulFunctionCall","src":"1436:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1429:6:201"},"nodeType":"YulFunctionCall","src":"1429:40:201"},"nodeType":"YulIf","src":"1426:60:201"},{"nodeType":"YulAssignment","src":"1495:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1505:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1495:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1283:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1294:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1306:6:201","type":""}],"src":"1239:277:201"},{"body":{"nodeType":"YulBlock","src":"1650:145:201","statements":[{"nodeType":"YulAssignment","src":"1660:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1672:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1683:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1668:3:201"},"nodeType":"YulFunctionCall","src":"1668:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1660:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1702:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1717:6:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1733:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"1738:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1729:3:201"},"nodeType":"YulFunctionCall","src":"1729:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"1742:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1725:3:201"},"nodeType":"YulFunctionCall","src":"1725:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1713:3:201"},"nodeType":"YulFunctionCall","src":"1713:32:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1695:6:201"},"nodeType":"YulFunctionCall","src":"1695:51:201"},"nodeType":"YulExpressionStatement","src":"1695:51:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1766:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1777:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1762:3:201"},"nodeType":"YulFunctionCall","src":"1762:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"1782:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1755:6:201"},"nodeType":"YulFunctionCall","src":"1755:34:201"},"nodeType":"YulExpressionStatement","src":"1755:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1611:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1622:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1630:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1641:4:201","type":""}],"src":"1521:274:201"}]},"contents":"{\n    { }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_contract$_IStakedToken_$39566_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := mload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_rational_0_by_1__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"6101006040523480156200001257600080fd5b5060405162000df838038062000df88339810160408190526200003591620001d1565b6001600160a01b0380841660805280831660a052811660c08190526040805163312f6b8360e01b8152905163312f6b83916004808201926020929091908290030181865afa1580156200008c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b2919062000225565b6001600160a01b0390811660e081905260c05160405163095ea7b360e01b815292166004830152600060248301529063095ea7b3906044016020604051808303816000875af11580156200010a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013091906200024c565b5060e05160c05160405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af115801562000188573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ae91906200024c565b5050505062000270565b6001600160a01b0381168114620001ce57600080fd5b50565b600080600060608486031215620001e757600080fd5b8351620001f481620001b8565b60208501519093506200020781620001b8565b60408501519092506200021a81620001b8565b809150509250925092565b6000602082840312156200023857600080fd5b81516200024581620001b8565b9392505050565b6000602082840312156200025f57600080fd5b815180151581146200024557600080fd5b60805160a05160c05160e051610afb620002fd6000396000818161016f015281816104ab0152818161076a01526108630152600081816101490152818161023b0152818161033a0152818161047c0152818161073b0152610815015260008181610123015281816103b801528181610534015261067701526000818160c101526101970152610afb6000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063a34062511161005b578063a340625114610119578063c625544314610121578063dfd29d9e14610147578063ee719bc81461016d57600080fd5b806316beb9821461008d5780633a342acc146100b557806375d26413146100bf5780638d8e5da714610106575b600080fd5b6100a061009b366004610a60565b610193565b60405190151581526020015b60405180910390f35b6100bd6103a0565b005b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ac565b6100bd610114366004610a60565b61051c565b6100bd61065f565b7f00000000000000000000000000000000000000000000000000000000000000006100e1565b7f00000000000000000000000000000000000000000000000000000000000000006100e1565b7f00000000000000000000000000000000000000000000000000000000000000006100e1565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f43414c4c45525f4e4f545f494e43454e54495645535f434f4e54524f4c4c455260448201526064015b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146102ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5245574152445f544f4b454e5f4e4f545f5354414b455f434f4e5452414354006044820152606401610230565b6040517fadc9772e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063adc9772e90604401600060405180830381600087803b15801561037e57600080fd5b505af1158015610392573d6000803e3d6000fd5b506001979650505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f4e4c595f524557415244535f41444d494e00000000000000000000000000006044820152606401610230565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152600060248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044015b6020604051808303816000875af11580156104f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105199190610a9c565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146105bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f4e4c595f524557415244535f41444d494e00000000000000000000000000006044820152606401610230565b6105dc73ffffffffffffffffffffffffffffffffffffffff84168383610892565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7dc4ea712e6400e67a5abca1a983e5c420c386c19936dc120cd860b50b8e25798460405161065291815260200190565b60405180910390a4505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f4e4c595f524557415244535f41444d494e00000000000000000000000000006044820152606401610230565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152600060248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af11580156107b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d79190610a9c565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016104d6565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af16108f5573d6000803e3d6000fd5b506108ff8461096b565b610965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e7366657200000000000000000000006044820152606401610230565b50505050565b60006109ab565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156109ea5760208114610a24576109e57f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f610972565b610a31565b823b610a1b57610a1b7f475076323a206e6f74206120636f6e74726163740000000000000000000000006014610972565b60019150610a31565b3d6000803e600051151591505b50919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a5b57600080fd5b919050565b600080600060608486031215610a7557600080fd5b610a7e84610a37565b9250610a8c60208501610a37565b9150604084013590509250925092565b600060208284031215610aae57600080fd5b81518015158114610abe57600080fd5b939250505056fea2646970667358221220a361c0fe3c5d918780cdfaaa11daa547608339be02fb6bfb9dceab117c3848b364736f6c634300080a0033","opcodes":"PUSH2 0x100 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0xDF8 CODESIZE SUB DUP1 PUSH3 0xDF8 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0x1D1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x80 MSTORE DUP1 DUP4 AND PUSH1 0xA0 MSTORE DUP2 AND PUSH1 0xC0 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 MLOAD PUSH4 0x312F6B83 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 MLOAD PUSH4 0x312F6B83 SWAP2 PUSH1 0x4 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x8C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0xB2 SWAP2 SWAP1 PUSH3 0x225 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0xE0 DUP2 SWAP1 MSTORE PUSH1 0xC0 MLOAD PUSH1 0x40 MLOAD PUSH4 0x95EA7B3 PUSH1 0xE0 SHL DUP2 MSTORE SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP4 ADD MSTORE SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH3 0x10A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x130 SWAP2 SWAP1 PUSH3 0x24C JUMP JUMPDEST POP PUSH1 0xE0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0x40 MLOAD PUSH4 0x95EA7B3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x0 NOT PUSH1 0x24 DUP3 ADD MSTORE SWAP2 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH3 0x188 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP 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 0x1AE SWAP2 SWAP1 PUSH3 0x24C JUMP JUMPDEST POP POP POP POP PUSH3 0x270 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x1E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH3 0x1F4 DUP2 PUSH3 0x1B8 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP4 POP PUSH3 0x207 DUP2 PUSH3 0x1B8 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP3 POP PUSH3 0x21A DUP2 PUSH3 0x1B8 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x238 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x245 DUP2 PUSH3 0x1B8 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x25F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0xAFB PUSH3 0x2FD PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x16F ADD MSTORE DUP2 DUP2 PUSH2 0x4AB ADD MSTORE DUP2 DUP2 PUSH2 0x76A ADD MSTORE PUSH2 0x863 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x149 ADD MSTORE DUP2 DUP2 PUSH2 0x23B ADD MSTORE DUP2 DUP2 PUSH2 0x33A ADD MSTORE DUP2 DUP2 PUSH2 0x47C ADD MSTORE DUP2 DUP2 PUSH2 0x73B ADD MSTORE PUSH2 0x815 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x123 ADD MSTORE DUP2 DUP2 PUSH2 0x3B8 ADD MSTORE DUP2 DUP2 PUSH2 0x534 ADD MSTORE PUSH2 0x677 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH1 0xC1 ADD MSTORE PUSH2 0x197 ADD MSTORE PUSH2 0xAFB 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 0xA3406251 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xA3406251 EQ PUSH2 0x119 JUMPI DUP1 PUSH4 0xC6255443 EQ PUSH2 0x121 JUMPI DUP1 PUSH4 0xDFD29D9E EQ PUSH2 0x147 JUMPI DUP1 PUSH4 0xEE719BC8 EQ PUSH2 0x16D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x16BEB982 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x3A342ACC EQ PUSH2 0xB5 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0xBF JUMPI DUP1 PUSH4 0x8D8E5DA7 EQ PUSH2 0x106 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA0 PUSH2 0x9B CALLDATASIZE PUSH1 0x4 PUSH2 0xA60 JUMP JUMPDEST PUSH2 0x193 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xBD PUSH2 0x3A0 JUMP JUMPDEST STOP JUMPDEST PUSH32 0x0 JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xAC JUMP JUMPDEST PUSH2 0xBD PUSH2 0x114 CALLDATASIZE PUSH1 0x4 PUSH2 0xA60 JUMP JUMPDEST PUSH2 0x51C JUMP JUMPDEST PUSH2 0xBD PUSH2 0x65F JUMP JUMPDEST PUSH32 0x0 PUSH2 0xE1 JUMP JUMPDEST PUSH32 0x0 PUSH2 0xE1 JUMP JUMPDEST PUSH32 0x0 PUSH2 0xE1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x239 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43414C4C45525F4E4F545F494E43454E54495645535F434F4E54524F4C4C4552 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x2EE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5245574152445F544F4B454E5F4E4F545F5354414B455F434F4E545241435400 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x230 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xADC9772E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP5 SWAP1 MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xADC9772E SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x37E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x392 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x43F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F524557415244535F41444D494E0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x230 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH1 0x44 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4F5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x519 SWAP2 SWAP1 PUSH2 0xA9C JUMP JUMPDEST POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x5BB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F524557415244535F41444D494E0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x230 JUMP JUMPDEST PUSH2 0x5DC PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP4 DUP4 PUSH2 0x892 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x7DC4EA712E6400E67A5ABCA1A983E5C420C386C19936DC120CD860B50B8E2579 DUP5 PUSH1 0x40 MLOAD PUSH2 0x652 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x6FE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F524557415244535F41444D494E0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x230 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7B3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7D7 SWAP2 SWAP1 PUSH2 0xA9C JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH1 0x44 ADD PUSH2 0x4D6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x8F5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x8FF DUP5 PUSH2 0x96B JUMP JUMPDEST PUSH2 0x965 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x230 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9AB JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x9EA JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0xA24 JUMPI PUSH2 0x9E5 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x972 JUMP JUMPDEST PUSH2 0xA31 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0xA1B JUMPI PUSH2 0xA1B PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x972 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0xA31 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xA5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xA75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA7E DUP5 PUSH2 0xA37 JUMP JUMPDEST SWAP3 POP PUSH2 0xA8C PUSH1 0x20 DUP6 ADD PUSH2 0xA37 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xABE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG3 PUSH2 0xC0FE EXTCODECOPY 0x5D SWAP2 DUP8 DUP1 0xCD STATICCALL 0xAA GT 0xDA 0xA5 SELFBALANCE PUSH1 0x83 CODECOPY 0xBE MUL 0xFB PUSH12 0xFB9DCEAB117C3848B364736F PUSH13 0x634300080A0033000000000000 ","sourceMap":"837:1753:186:-:0;;;1065:403;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;670:44:187;;;;;720:28;;;;;1233:27:186;::::1;;::::0;;;1285:29:::1;::::0;;-1:-1:-1;;;1285:29:186;;;;:27:::1;::::0;:29:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;1233:27;1285:29:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1266:48:186;;::::1;;::::0;;;1362:14:::1;::::0;1321:60:::1;::::0;-1:-1:-1;;;1321:60:186;;1152:32:201;;1321:60:186::1;::::0;::::1;1134:51:201::0;1379:1:186::1;1201:18:201::0;;;1194:34;1266:48:186;1321:32:::1;::::0;1107:18:201;;1321:60:186::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;1394:16:186::1;::::0;1428:14:::1;::::0;1387:76:::1;::::0;-1:-1:-1;;;1387:76:186;;-1:-1:-1;;;;;1152:32:201;;;1387:76:186::1;::::0;::::1;1134:51:201::0;-1:-1:-1;;1201:18:201;;;1194:34;1387:32:186;::::1;::::0;::::1;::::0;1107:18:201;;1387:76:186::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1065:403:::0;;;837:1753;;14:131:201;-1:-1:-1;;;;;89:31:201;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:541::-;260:6;268;276;329:2;317:9;308:7;304:23;300:32;297:52;;;345:1;342;335:12;297:52;377:9;371:16;396:31;421:5;396:31;:::i;:::-;496:2;481:18;;475:25;446:5;;-1:-1:-1;509:33:201;475:25;509:33;:::i;:::-;613:2;598:18;;592:25;561:7;;-1:-1:-1;626:33:201;592:25;626:33;:::i;:::-;678:7;668:17;;;150:541;;;;;:::o;696:251::-;766:6;819:2;807:9;798:7;794:23;790:32;787:52;;;835:1;832;825:12;787:52;867:9;861:16;886:31;911:5;886:31;:::i;:::-;936:5;696:251;-1:-1:-1;;;696:251:201:o;1239:277::-;1306:6;1359:2;1347:9;1338:7;1334:23;1330:32;1327:52;;;1375:1;1372;1365:12;1327:52;1407:9;1401:16;1460:5;1453:13;1446:21;1439:5;1436:32;1426:60;;1482:1;1479;1472:12;1521:274;837:1753:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@dropApproval_39954":{"entryPoint":928,"id":39954,"parameterSlots":0,"returnSlots":0},"@emergencyWithdrawal_40098":{"entryPoint":1308,"id":40098,"parameterSlots":3,"returnSlots":0},"@getIncentivesController_40047":{"entryPoint":null,"id":40047,"parameterSlots":0,"returnSlots":1},"@getLastTransferResult_117":{"entryPoint":2411,"id":117,"parameterSlots":1,"returnSlots":1},"@getRewardsAdmin_40057":{"entryPoint":null,"id":40057,"parameterSlots":0,"returnSlots":1},"@getStakeContract_39966":{"entryPoint":null,"id":39966,"parameterSlots":0,"returnSlots":1},"@getUnderlyingToken_39975":{"entryPoint":null,"id":39975,"parameterSlots":0,"returnSlots":1},"@performTransfer_39903":{"entryPoint":403,"id":39903,"parameterSlots":3,"returnSlots":1},"@renewApproval_39936":{"entryPoint":1631,"id":39936,"parameterSlots":0,"returnSlots":0},"@safeTransfer_78":{"entryPoint":2194,"id":78,"parameterSlots":3,"returnSlots":0},"abi_decode_address":{"entryPoint":2615,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_uint256":{"entryPoint":2656,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":2716,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_rational_0_by_1__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_08038cf80ac1598f9b74d7d07c922218c154c3b956e28086d10706edce20d1b3__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3f731c6282513aad661017d660e9777df98697b25477c4a167f4ae2ad258b6ef__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_81338f1a577db8c7c83833eb7ec6bb164402c9f5cc1b20dac857316f1c65643a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3462:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"63:147:201","statements":[{"nodeType":"YulAssignment","src":"73:29:201","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"95:6:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"82:12:201"},"nodeType":"YulFunctionCall","src":"82:20:201"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"73:5:201"}]},{"body":{"nodeType":"YulBlock","src":"188:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"197:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"200:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"190:6:201"},"nodeType":"YulFunctionCall","src":"190:12:201"},"nodeType":"YulExpressionStatement","src":"190:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"124:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"135:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"142:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"131:3:201"},"nodeType":"YulFunctionCall","src":"131:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"121:2:201"},"nodeType":"YulFunctionCall","src":"121:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"114:6:201"},"nodeType":"YulFunctionCall","src":"114:73:201"},"nodeType":"YulIf","src":"111:93:201"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"42:6:201","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"53:5:201","type":""}],"src":"14:196:201"},{"body":{"nodeType":"YulBlock","src":"319:224:201","statements":[{"body":{"nodeType":"YulBlock","src":"365:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"374:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"377:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"367:6:201"},"nodeType":"YulFunctionCall","src":"367:12:201"},"nodeType":"YulExpressionStatement","src":"367:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"340:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"349:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"336:3:201"},"nodeType":"YulFunctionCall","src":"336:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"361:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"332:3:201"},"nodeType":"YulFunctionCall","src":"332:32:201"},"nodeType":"YulIf","src":"329:52:201"},{"nodeType":"YulAssignment","src":"390:39:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"419:9:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"400:18:201"},"nodeType":"YulFunctionCall","src":"400:29:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"390:6:201"}]},{"nodeType":"YulAssignment","src":"438:48:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"471:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"482:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"467:3:201"},"nodeType":"YulFunctionCall","src":"467:18:201"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"448:18:201"},"nodeType":"YulFunctionCall","src":"448:38:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"438:6:201"}]},{"nodeType":"YulAssignment","src":"495:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"522:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"533:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"518:3:201"},"nodeType":"YulFunctionCall","src":"518:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"505:12:201"},"nodeType":"YulFunctionCall","src":"505:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"495:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"269:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"280:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"292:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"300:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"308:6:201","type":""}],"src":"215:328:201"},{"body":{"nodeType":"YulBlock","src":"643:92:201","statements":[{"nodeType":"YulAssignment","src":"653:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"665:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"676:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"661:3:201"},"nodeType":"YulFunctionCall","src":"661:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"653:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"695:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"720:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"713:6:201"},"nodeType":"YulFunctionCall","src":"713:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"706:6:201"},"nodeType":"YulFunctionCall","src":"706:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"688:6:201"},"nodeType":"YulFunctionCall","src":"688:41:201"},"nodeType":"YulExpressionStatement","src":"688:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"612:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"623:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"634:4:201","type":""}],"src":"548:187:201"},{"body":{"nodeType":"YulBlock","src":"841:125:201","statements":[{"nodeType":"YulAssignment","src":"851:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"863:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"874:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"859:3:201"},"nodeType":"YulFunctionCall","src":"859:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"851:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"893:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"908:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"916:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"904:3:201"},"nodeType":"YulFunctionCall","src":"904:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"886:6:201"},"nodeType":"YulFunctionCall","src":"886:74:201"},"nodeType":"YulExpressionStatement","src":"886:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"810:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"821:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"832:4:201","type":""}],"src":"740:226:201"},{"body":{"nodeType":"YulBlock","src":"1145:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1162:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1173:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1155:6:201"},"nodeType":"YulFunctionCall","src":"1155:21:201"},"nodeType":"YulExpressionStatement","src":"1155:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1196:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1207:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1192:3:201"},"nodeType":"YulFunctionCall","src":"1192:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"1212:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1185:6:201"},"nodeType":"YulFunctionCall","src":"1185:30:201"},"nodeType":"YulExpressionStatement","src":"1185:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1235:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1246:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1231:3:201"},"nodeType":"YulFunctionCall","src":"1231:18:201"},{"hexValue":"43414c4c45525f4e4f545f494e43454e54495645535f434f4e54524f4c4c4552","kind":"string","nodeType":"YulLiteral","src":"1251:34:201","type":"","value":"CALLER_NOT_INCENTIVES_CONTROLLER"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1224:6:201"},"nodeType":"YulFunctionCall","src":"1224:62:201"},"nodeType":"YulExpressionStatement","src":"1224:62:201"},{"nodeType":"YulAssignment","src":"1295:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1307:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1318:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1303:3:201"},"nodeType":"YulFunctionCall","src":"1303:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1295:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_81338f1a577db8c7c83833eb7ec6bb164402c9f5cc1b20dac857316f1c65643a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1122:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1136:4:201","type":""}],"src":"971:356:201"},{"body":{"nodeType":"YulBlock","src":"1506:181:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1523:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1534:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1516:6:201"},"nodeType":"YulFunctionCall","src":"1516:21:201"},"nodeType":"YulExpressionStatement","src":"1516:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1557:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1568:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1553:3:201"},"nodeType":"YulFunctionCall","src":"1553:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"1573:2:201","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1546:6:201"},"nodeType":"YulFunctionCall","src":"1546:30:201"},"nodeType":"YulExpressionStatement","src":"1546:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1596:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1607:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1592:3:201"},"nodeType":"YulFunctionCall","src":"1592:18:201"},{"hexValue":"5245574152445f544f4b454e5f4e4f545f5354414b455f434f4e5452414354","kind":"string","nodeType":"YulLiteral","src":"1612:33:201","type":"","value":"REWARD_TOKEN_NOT_STAKE_CONTRACT"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1585:6:201"},"nodeType":"YulFunctionCall","src":"1585:61:201"},"nodeType":"YulExpressionStatement","src":"1585:61:201"},{"nodeType":"YulAssignment","src":"1655:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1667:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1678:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1663:3:201"},"nodeType":"YulFunctionCall","src":"1663:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1655:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_08038cf80ac1598f9b74d7d07c922218c154c3b956e28086d10706edce20d1b3__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1483:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1497:4:201","type":""}],"src":"1332:355:201"},{"body":{"nodeType":"YulBlock","src":"1821:168:201","statements":[{"nodeType":"YulAssignment","src":"1831:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1843:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1854:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1839:3:201"},"nodeType":"YulFunctionCall","src":"1839:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1831:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1873:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1888:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1896:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1884:3:201"},"nodeType":"YulFunctionCall","src":"1884:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1866:6:201"},"nodeType":"YulFunctionCall","src":"1866:74:201"},"nodeType":"YulExpressionStatement","src":"1866:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1960:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1971:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1956:3:201"},"nodeType":"YulFunctionCall","src":"1956:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"1976:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1949:6:201"},"nodeType":"YulFunctionCall","src":"1949:34:201"},"nodeType":"YulExpressionStatement","src":"1949:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1782:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1793:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1801:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1812:4:201","type":""}],"src":"1692:297:201"},{"body":{"nodeType":"YulBlock","src":"2168:168:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2185:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2196:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2178:6:201"},"nodeType":"YulFunctionCall","src":"2178:21:201"},"nodeType":"YulExpressionStatement","src":"2178:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2219:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2230:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2215:3:201"},"nodeType":"YulFunctionCall","src":"2215:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2235:2:201","type":"","value":"18"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2208:6:201"},"nodeType":"YulFunctionCall","src":"2208:30:201"},"nodeType":"YulExpressionStatement","src":"2208:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2258:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2269:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2254:3:201"},"nodeType":"YulFunctionCall","src":"2254:18:201"},{"hexValue":"4f4e4c595f524557415244535f41444d494e","kind":"string","nodeType":"YulLiteral","src":"2274:20:201","type":"","value":"ONLY_REWARDS_ADMIN"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2247:6:201"},"nodeType":"YulFunctionCall","src":"2247:48:201"},"nodeType":"YulExpressionStatement","src":"2247:48:201"},{"nodeType":"YulAssignment","src":"2304:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2316:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2327:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2312:3:201"},"nodeType":"YulFunctionCall","src":"2312:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2304:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_3f731c6282513aad661017d660e9777df98697b25477c4a167f4ae2ad258b6ef__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2145:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2159:4:201","type":""}],"src":"1994:342:201"},{"body":{"nodeType":"YulBlock","src":"2478:168:201","statements":[{"nodeType":"YulAssignment","src":"2488:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2500:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2511:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2496:3:201"},"nodeType":"YulFunctionCall","src":"2496:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2488:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2530:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2545:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"2553:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2541:3:201"},"nodeType":"YulFunctionCall","src":"2541:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2523:6:201"},"nodeType":"YulFunctionCall","src":"2523:74:201"},"nodeType":"YulExpressionStatement","src":"2523:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2617:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2628:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2613:3:201"},"nodeType":"YulFunctionCall","src":"2613:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"2633:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2606:6:201"},"nodeType":"YulFunctionCall","src":"2606:34:201"},"nodeType":"YulExpressionStatement","src":"2606:34:201"}]},"name":"abi_encode_tuple_t_address_t_rational_0_by_1__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2439:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2450:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2458:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2469:4:201","type":""}],"src":"2341:305:201"},{"body":{"nodeType":"YulBlock","src":"2729:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"2775:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2784:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2787:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2777:6:201"},"nodeType":"YulFunctionCall","src":"2777:12:201"},"nodeType":"YulExpressionStatement","src":"2777:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2750:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2759:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2746:3:201"},"nodeType":"YulFunctionCall","src":"2746:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2771:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2742:3:201"},"nodeType":"YulFunctionCall","src":"2742:32:201"},"nodeType":"YulIf","src":"2739:52:201"},{"nodeType":"YulVariableDeclaration","src":"2800:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2819:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2813:5:201"},"nodeType":"YulFunctionCall","src":"2813:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2804:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2882:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2891:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2894:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2884:6:201"},"nodeType":"YulFunctionCall","src":"2884:12:201"},"nodeType":"YulExpressionStatement","src":"2884:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2851:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2872:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2865:6:201"},"nodeType":"YulFunctionCall","src":"2865:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2858:6:201"},"nodeType":"YulFunctionCall","src":"2858:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2848:2:201"},"nodeType":"YulFunctionCall","src":"2848:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2841:6:201"},"nodeType":"YulFunctionCall","src":"2841:40:201"},"nodeType":"YulIf","src":"2838:60:201"},{"nodeType":"YulAssignment","src":"2907:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"2917:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2907:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2695:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2706:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2718:6:201","type":""}],"src":"2651:277:201"},{"body":{"nodeType":"YulBlock","src":"3034:76:201","statements":[{"nodeType":"YulAssignment","src":"3044:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3056:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3067:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3052:3:201"},"nodeType":"YulFunctionCall","src":"3052:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3044:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3086:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"3097:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3079:6:201"},"nodeType":"YulFunctionCall","src":"3079:25:201"},"nodeType":"YulExpressionStatement","src":"3079:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3003:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3014:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3025:4:201","type":""}],"src":"2933:177:201"},{"body":{"nodeType":"YulBlock","src":"3289:171:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3306:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3317:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3299:6:201"},"nodeType":"YulFunctionCall","src":"3299:21:201"},"nodeType":"YulExpressionStatement","src":"3299:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3340:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3351:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3336:3:201"},"nodeType":"YulFunctionCall","src":"3336:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"3356:2:201","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3329:6:201"},"nodeType":"YulFunctionCall","src":"3329:30:201"},"nodeType":"YulExpressionStatement","src":"3329:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3379:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3390:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3375:3:201"},"nodeType":"YulFunctionCall","src":"3375:18:201"},{"hexValue":"475076323a206661696c6564207472616e73666572","kind":"string","nodeType":"YulLiteral","src":"3395:23:201","type":"","value":"GPv2: failed transfer"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3368:6:201"},"nodeType":"YulFunctionCall","src":"3368:51:201"},"nodeType":"YulExpressionStatement","src":"3368:51:201"},{"nodeType":"YulAssignment","src":"3428:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3440:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3451:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3436:3:201"},"nodeType":"YulFunctionCall","src":"3436:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3428:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3266:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3280:4:201","type":""}],"src":"3115:345:201"}]},"contents":"{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_stringliteral_81338f1a577db8c7c83833eb7ec6bb164402c9f5cc1b20dac857316f1c65643a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"CALLER_NOT_INCENTIVES_CONTROLLER\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_08038cf80ac1598f9b74d7d07c922218c154c3b956e28086d10706edce20d1b3__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"REWARD_TOKEN_NOT_STAKE_CONTRACT\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_stringliteral_3f731c6282513aad661017d660e9777df98697b25477c4a167f4ae2ad258b6ef__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 18)\n        mstore(add(headStart, 64), \"ONLY_REWARDS_ADMIN\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_rational_0_by_1__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_stringliteral_bcd627324e1455f8429089871957d6f7804c9418ddab92671c4a49f81f3fae96__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"GPv2: failed transfer\")\n        tail := add(headStart, 96)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{"39813":[{"length":32,"start":329},{"length":32,"start":571},{"length":32,"start":826},{"length":32,"start":1148},{"length":32,"start":1851},{"length":32,"start":2069}],"39815":[{"length":32,"start":367},{"length":32,"start":1195},{"length":32,"start":1898},{"length":32,"start":2147}],"39993":[{"length":32,"start":193},{"length":32,"start":407}],"39995":[{"length":32,"start":291},{"length":32,"start":952},{"length":32,"start":1332},{"length":32,"start":1655}]},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100885760003560e01c8063a34062511161005b578063a340625114610119578063c625544314610121578063dfd29d9e14610147578063ee719bc81461016d57600080fd5b806316beb9821461008d5780633a342acc146100b557806375d26413146100bf5780638d8e5da714610106575b600080fd5b6100a061009b366004610a60565b610193565b60405190151581526020015b60405180910390f35b6100bd6103a0565b005b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ac565b6100bd610114366004610a60565b61051c565b6100bd61065f565b7f00000000000000000000000000000000000000000000000000000000000000006100e1565b7f00000000000000000000000000000000000000000000000000000000000000006100e1565b7f00000000000000000000000000000000000000000000000000000000000000006100e1565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f43414c4c45525f4e4f545f494e43454e54495645535f434f4e54524f4c4c455260448201526064015b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146102ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5245574152445f544f4b454e5f4e4f545f5354414b455f434f4e5452414354006044820152606401610230565b6040517fadc9772e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063adc9772e90604401600060405180830381600087803b15801561037e57600080fd5b505af1158015610392573d6000803e3d6000fd5b506001979650505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f4e4c595f524557415244535f41444d494e00000000000000000000000000006044820152606401610230565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152600060248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044015b6020604051808303816000875af11580156104f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105199190610a9c565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146105bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f4e4c595f524557415244535f41444d494e00000000000000000000000000006044820152606401610230565b6105dc73ffffffffffffffffffffffffffffffffffffffff84168383610892565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7dc4ea712e6400e67a5abca1a983e5c420c386c19936dc120cd860b50b8e25798460405161065291815260200190565b60405180910390a4505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4f4e4c595f524557415244535f41444d494e00000000000000000000000000006044820152606401610230565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152600060248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af11580156107b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d79190610a9c565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016104d6565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff84166004830152602482018390529060008060448382895af16108f5573d6000803e3d6000fd5b506108ff8461096b565b610965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f475076323a206661696c6564207472616e7366657200000000000000000000006044820152606401610230565b50505050565b60006109ab565b7f08c379a00000000000000000000000000000000000000000000000000000000060005260206004528060245250806044525060646000fd5b3d80156109ea5760208114610a24576109e57f475076323a206d616c666f726d6564207472616e7366657220726573756c7400601f610972565b610a31565b823b610a1b57610a1b7f475076323a206e6f74206120636f6e74726163740000000000000000000000006014610972565b60019150610a31565b3d6000803e600051151591505b50919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a5b57600080fd5b919050565b600080600060608486031215610a7557600080fd5b610a7e84610a37565b9250610a8c60208501610a37565b9150604084013590509250925092565b600060208284031215610aae57600080fd5b81518015158114610abe57600080fd5b939250505056fea2646970667358221220a361c0fe3c5d918780cdfaaa11daa547608339be02fb6bfb9dceab117c3848b364736f6c634300080a0033","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 0xA3406251 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xA3406251 EQ PUSH2 0x119 JUMPI DUP1 PUSH4 0xC6255443 EQ PUSH2 0x121 JUMPI DUP1 PUSH4 0xDFD29D9E EQ PUSH2 0x147 JUMPI DUP1 PUSH4 0xEE719BC8 EQ PUSH2 0x16D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x16BEB982 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x3A342ACC EQ PUSH2 0xB5 JUMPI DUP1 PUSH4 0x75D26413 EQ PUSH2 0xBF JUMPI DUP1 PUSH4 0x8D8E5DA7 EQ PUSH2 0x106 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA0 PUSH2 0x9B CALLDATASIZE PUSH1 0x4 PUSH2 0xA60 JUMP JUMPDEST PUSH2 0x193 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xBD PUSH2 0x3A0 JUMP JUMPDEST STOP JUMPDEST PUSH32 0x0 JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xAC JUMP JUMPDEST PUSH2 0xBD PUSH2 0x114 CALLDATASIZE PUSH1 0x4 PUSH2 0xA60 JUMP JUMPDEST PUSH2 0x51C JUMP JUMPDEST PUSH2 0xBD PUSH2 0x65F JUMP JUMPDEST PUSH32 0x0 PUSH2 0xE1 JUMP JUMPDEST PUSH32 0x0 PUSH2 0xE1 JUMP JUMPDEST PUSH32 0x0 PUSH2 0xE1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x239 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43414C4C45525F4E4F545F494E43454E54495645535F434F4E54524F4C4C4552 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x2EE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5245574152445F544F4B454E5F4E4F545F5354414B455F434F4E545241435400 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x230 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xADC9772E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP5 SWAP1 MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xADC9772E SWAP1 PUSH1 0x44 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x37E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x392 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x43F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F524557415244535F41444D494E0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x230 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH1 0x44 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4F5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x519 SWAP2 SWAP1 PUSH2 0xA9C JUMP JUMPDEST POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x5BB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F524557415244535F41444D494E0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x230 JUMP JUMPDEST PUSH2 0x5DC PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP4 DUP4 PUSH2 0x892 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x7DC4EA712E6400E67A5ABCA1A983E5C420C386C19936DC120CD860B50B8E2579 DUP5 PUSH1 0x40 MLOAD PUSH2 0x652 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ PUSH2 0x6FE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F524557415244535F41444D494E0000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x230 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7B3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7D7 SWAP2 SWAP1 PUSH2 0xA9C JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH1 0x44 ADD PUSH2 0x4D6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE SWAP1 PUSH1 0x0 DUP1 PUSH1 0x44 DUP4 DUP3 DUP10 GAS CALL PUSH2 0x8F5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x8FF DUP5 PUSH2 0x96B JUMP JUMPDEST PUSH2 0x965 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x475076323A206661696C6564207472616E736665720000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x230 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9AB JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE DUP1 PUSH1 0x24 MSTORE POP DUP1 PUSH1 0x44 MSTORE POP PUSH1 0x64 PUSH1 0x0 REVERT JUMPDEST RETURNDATASIZE DUP1 ISZERO PUSH2 0x9EA JUMPI PUSH1 0x20 DUP2 EQ PUSH2 0xA24 JUMPI PUSH2 0x9E5 PUSH32 0x475076323A206D616C666F726D6564207472616E7366657220726573756C7400 PUSH1 0x1F PUSH2 0x972 JUMP JUMPDEST PUSH2 0xA31 JUMP JUMPDEST DUP3 EXTCODESIZE PUSH2 0xA1B JUMPI PUSH2 0xA1B PUSH32 0x475076323A206E6F74206120636F6E7472616374000000000000000000000000 PUSH1 0x14 PUSH2 0x972 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0xA31 JUMP JUMPDEST RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD ISZERO ISZERO SWAP2 POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xA5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xA75 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA7E DUP5 PUSH2 0xA37 JUMP JUMPDEST SWAP3 POP PUSH2 0xA8C PUSH1 0x20 DUP6 ADD PUSH2 0xA37 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xABE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG3 PUSH2 0xC0FE EXTCODECOPY 0x5D SWAP2 DUP8 DUP1 0xCD STATICCALL 0xAA GT 0xDA 0xA5 SELFBALANCE PUSH1 0x83 CODECOPY 0xBE MUL 0xFB PUSH12 0xFB9DCEAB117C3848B364736F PUSH13 0x634300080A0033000000000000 ","sourceMap":"837:1753:186:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1511:351;;;;;;:::i;:::-;;:::i;:::-;;;713:14:201;;706:22;688:41;;676:2;661:18;1511:351:186;;;;;;;;2168:121;;;:::i;:::-;;1178:115:187;1267:21;1178:115;;;916:42:201;904:55;;;886:74;;874:2;859:18;1178:115:187;740:226:201;1641:225:187;;;;;;:::i;:::-;;:::i;1913:204:186:-;;;:::i;1337:99:187:-;1418:13;1337:99;;2340:101:186;2421:14;2340:101;;2492:96;2567:16;2492:96;;1511:351;1709:4;879:21:187;:35;;904:10;879:35;871:80;;;;;;;1173:2:201;871:80:187;;;1155:21:201;;;1192:18;;;1185:30;1251:34;1231:18;;;1224:62;1303:18;;871:80:187;;;;;;;;;1749:14:186::1;1731:33;;:6;:33;;;1723:77;;;::::0;::::1;::::0;;1534:2:201;1723:77:186::1;::::0;::::1;1516:21:201::0;1573:2;1553:18;;;1546:30;1612:33;1592:18;;;1585:61;1663:18;;1723:77:186::1;1332:355:201::0;1723:77:186::1;1807:32;::::0;;;;:20:::1;1884:55:201::0;;;1807:32:186::1;::::0;::::1;1866:74:201::0;1956:18;;;1949:34;;;1807:14:186::1;:20;::::0;::::1;::::0;1839:18:201;;1807:32:186::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;1853:4:186::1;::::0;1511:351;-1:-1:-1;;;;;;;1511:351:186:o;2168:121::-;1072:10:187;:27;1086:13;1072:27;;1064:58;;;;;;;2196:2:201;1064:58:187;;;2178:21:201;2235:2;2215:18;;;2208:30;2274:20;2254:18;;;2247:48;2312:18;;1064:58:187;1994:342:201;1064:58:187;2224:60:186::1;::::0;;;;:32:::1;2265:14;1884:55:201::0;;2224:60:186::1;::::0;::::1;1866:74:201::0;-1:-1:-1;1956:18:201;;;1949:34;2231:16:186::1;2224:32;::::0;::::1;::::0;1839:18:201;;2224:60:186::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2168:121::o:0;1641:225:187:-;1072:10;:27;1086:13;1072:27;;1064:58;;;;;;;2196:2:201;1064:58:187;;;2178:21:201;2235:2;2215:18;;;2208:30;2274:20;2254:18;;;2247:48;2312:18;;1064:58:187;1994:342:201;1064:58:187;1761:38:::1;:26;::::0;::::1;1788:2:::0;1792:6;1761:26:::1;:38::i;:::-;1850:2;1811:50;;1843:5;1811:50;;1831:10;1811:50;;;1854:6;1811:50;;;;3079:25:201::0;;3067:2;3052:18;;2933:177;1811:50:187::1;;;;;;;;1641:225:::0;;;:::o;1913:204:186:-;1072:10:187;:27;1086:13;1072:27;;1064:58;;;;;;;2196:2:201;1064:58:187;;;2178:21:201;2235:2;2215:18;;;2208:30;2274:20;2254:18;;;2247:48;2312:18;;1064:58:187;1994:342:201;1064:58:187;1970:60:186::1;::::0;;;;:32:::1;2011:14;1884:55:201::0;;1970:60:186::1;::::0;::::1;1866:74:201::0;-1:-1:-1;1956:18:201;;;1949:34;1977:16:186::1;1970:32;::::0;::::1;::::0;1839:18:201;;1970:60:186::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;2036:76:186::1;::::0;;;;:32:::1;2077:14;1884:55:201::0;;2036:76:186::1;::::0;::::1;1866:74:201::0;2094:17:186::1;1956:18:201::0;;;1949:34;2043:16:186::1;2036:32;::::0;::::1;::::0;1839:18:201;;2036:76:186::1;1692:297:201::0;441:657:1;668:4;662:11;538:23;680:36;;;765:42;757:51;;753:1;730:25;;723:86;846:2;823:26;;816:41;;;538:23;519:16;;916:2;662:11;519:16;887:5;880;875:50;865:154;;958:16;955:1;952;937:38;994:16;991:1;984:27;865:154;;1039:28;1061:5;1039:21;:28::i;:::-;1031:62;;;;;;;3317:2:201;1031:62:1;;;3299:21:201;3356:2;3336:18;;;3329:30;3395:23;3375:18;;;3368:51;3436:18;;1031:62:1;3115:345:201;1031:62:1;513:585;441:657;;;:::o;2198:2524::-;2265:12;3323:207;;;3390:18;3384:4;3377:32;3431:4;3425;3418:18;3458:6;3452:4;3445:20;;3487:7;3481:4;3474:21;;3517:4;3511;3504:18;3323:207;3545:16;3621:441;;;;4140:2;4135:488;;;;4648:56;4670:33;4666:2;4648:56;:::i;:::-;3538:1174;;3621:441;3957:5;3945:18;3935:97;;3977:45;3999:22;3995:2;3977:45;:::i;:::-;4053:1;4042:12;;3621:441;;4135:488;4174:16;4171:1;4168;4153:38;4611:1;4605:8;4598:16;4591:24;4580:35;;3538:1174;;2198:2524;;;:::o;14:196:201:-;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:328::-;292:6;300;308;361:2;349:9;340:7;336:23;332:32;329:52;;;377:1;374;367:12;329:52;400:29;419:9;400:29;:::i;:::-;390:39;;448:38;482:2;471:9;467:18;448:38;:::i;:::-;438:48;;533:2;522:9;518:18;505:32;495:42;;215:328;;;;;:::o;2651:277::-;2718:6;2771:2;2759:9;2750:7;2746:23;2742:32;2739:52;;;2787:1;2784;2777:12;2739:52;2819:9;2813:16;2872:5;2865:13;2858:21;2851:5;2848:32;2838:60;;2894:1;2891;2884:12;2838:60;2917:5;2651:277;-1:-1:-1;;;2651:277:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"562200","executionCost":"infinite","totalCost":"infinite"},"external":{"dropApproval()":"infinite","emergencyWithdrawal(address,address,uint256)":"infinite","getIncentivesController()":"infinite","getRewardsAdmin()":"infinite","getStakeContract()":"infinite","getUnderlyingToken()":"infinite","performTransfer(address,address,uint256)":"infinite","renewApproval()":"infinite"}},"methodIdentifiers":{"dropApproval()":"3a342acc","emergencyWithdrawal(address,address,uint256)":"8d8e5da7","getIncentivesController()":"75d26413","getRewardsAdmin()":"c6255443","getStakeContract()":"dfd29d9e","getUnderlyingToken()":"ee719bc8","performTransfer(address,address,uint256)":"16beb982","renewApproval()":"a3406251"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"incentivesController\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rewardsAdmin\",\"type\":\"address\"},{\"internalType\":\"contract IStakedToken\",\"name\":\"stakeToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"EmergencyWithdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"dropApproval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emergencyWithdrawal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardsAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakeContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getUnderlyingToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"performTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renewApproval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave*\",\"kind\":\"dev\",\"methods\":{\"dropApproval()\":{\"details\":\"Drop approval of AAVE to the Staked Aave contract in case of emergency.\"},\"emergencyWithdrawal(address,address,uint256)\":{\"details\":\"Perform an emergency token withdrawal only callable by the Rewards admin\",\"params\":{\"amount\":\"Amount of the withdrawal\",\"to\":\"Address of the recipient of the withdrawal\",\"token\":\"Address of the token to withdraw funds from this contract\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"Returns the address of the Incentives Controller\"}},\"getRewardsAdmin()\":{\"returns\":{\"_0\":\"Returns the address of the Rewards admin\"}},\"getStakeContract()\":{\"returns\":{\"_0\":\"Staked Token contract address\"}},\"getUnderlyingToken()\":{\"returns\":{\"_0\":\"Underlying token address from the stake contract\"}},\"performTransfer(address,address,uint256)\":{\"details\":\"Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation\",\"params\":{\"amount\":\"Amount to transfer to the \\\"to\\\" address parameter\",\"reward\":\"Address of the reward token\",\"to\":\"Account to transfer rewards\"},\"returns\":{\"_0\":\"Returns true bool if transfer logic succeeds\"}},\"renewApproval()\":{\"details\":\"Perform a MAX_UINT approval of AAVE to the Staked Aave contract.\"}},\"title\":\"StakedTokenTransferStrategy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Transfer strategy that stakes the rewards into a staking contract and transfers the staking contract token. The underlying token must be transferred to this contract to be able to stake it on demand.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/rewards/transfer-strategies/StakedTokenTransferStrategy.sol\":\"StakedTokenTransferStrategy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/IStakedToken.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface IStakedToken {\\n  function STAKED_TOKEN() external view returns (address);\\n\\n  function stake(address to, uint256 amount) external;\\n\\n  function redeem(address to, uint256 amount) external;\\n\\n  function cooldown() external;\\n\\n  function claimRewards(address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0x10b37429742840bd41ae967e03ee35e295d500229c2d7b2922c9492cd2f8f1ee\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/IStakedTokenTransferStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IStakedToken} from '../interfaces/IStakedToken.sol';\\nimport {ITransferStrategyBase} from './ITransferStrategyBase.sol';\\n\\n/**\\n * @title IStakedTokenTransferStrategy\\n * @author Aave\\n **/\\ninterface IStakedTokenTransferStrategy is ITransferStrategyBase {\\n  /**\\n   * @dev Perform a MAX_UINT approval of AAVE to the Staked Aave contract.\\n   */\\n  function renewApproval() external;\\n\\n  /**\\n   * @dev Drop approval of AAVE to the Staked Aave contract in case of emergency.\\n   */\\n  function dropApproval() external;\\n\\n  /**\\n   * @return Staked Token contract address\\n   */\\n  function getStakeContract() external view returns (address);\\n\\n  /**\\n   * @return Underlying token address from the stake contract\\n   */\\n  function getUnderlyingToken() external view returns (address);\\n}\\n\",\"keccak256\":\"0x9ef8eba3547768d2d45582fdba95d279935345d2e8a5e098c0587b332d004a63\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/ITransferStrategyBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface ITransferStrategyBase {\\n  event EmergencyWithdrawal(\\n    address indexed caller,\\n    address indexed token,\\n    address indexed to,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @dev Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation\\n   * @param to Account to transfer rewards\\n   * @param reward Address of the reward token\\n   * @param amount Amount to transfer to the \\\"to\\\" address parameter\\n   * @return Returns true bool if transfer logic succeeds\\n   */\\n  function performTransfer(address to, address reward, uint256 amount) external returns (bool);\\n\\n  /**\\n   * @return Returns the address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view returns (address);\\n\\n  /**\\n   * @return Returns the address of the Rewards admin\\n   */\\n  function getRewardsAdmin() external view returns (address);\\n\\n  /**\\n   * @dev Perform an emergency token withdrawal only callable by the Rewards admin\\n   * @param token Address of the token to withdraw funds from this contract\\n   * @param to Address of the recipient of the withdrawal\\n   * @param amount Amount of the withdrawal\\n   */\\n  function emergencyWithdrawal(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0xa52a6dc237879acbed7325787ce58238a3afd626fa2ed827d4e321d2e4ef51ad\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/transfer-strategies/StakedTokenTransferStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IStakedToken} from '../interfaces/IStakedToken.sol';\\nimport {IStakedTokenTransferStrategy} from '../interfaces/IStakedTokenTransferStrategy.sol';\\nimport {ITransferStrategyBase} from '../interfaces/ITransferStrategyBase.sol';\\nimport {TransferStrategyBase} from './TransferStrategyBase.sol';\\nimport {GPv2SafeERC20} from '@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title StakedTokenTransferStrategy\\n * @notice Transfer strategy that stakes the rewards into a staking contract and transfers the staking contract token.\\n * The underlying token must be transferred to this contract to be able to stake it on demand.\\n * @author Aave\\n **/\\ncontract StakedTokenTransferStrategy is TransferStrategyBase, IStakedTokenTransferStrategy {\\n  using GPv2SafeERC20 for IERC20;\\n\\n  IStakedToken internal immutable STAKE_CONTRACT;\\n  address internal immutable UNDERLYING_TOKEN;\\n\\n  constructor(\\n    address incentivesController,\\n    address rewardsAdmin,\\n    IStakedToken stakeToken\\n  ) TransferStrategyBase(incentivesController, rewardsAdmin) {\\n    STAKE_CONTRACT = stakeToken;\\n    UNDERLYING_TOKEN = STAKE_CONTRACT.STAKED_TOKEN();\\n\\n    IERC20(UNDERLYING_TOKEN).approve(address(STAKE_CONTRACT), 0);\\n    IERC20(UNDERLYING_TOKEN).approve(address(STAKE_CONTRACT), type(uint256).max);\\n  }\\n\\n  /// @inheritdoc TransferStrategyBase\\n  function performTransfer(\\n    address to,\\n    address reward,\\n    uint256 amount\\n  )\\n    external\\n    override(TransferStrategyBase, ITransferStrategyBase)\\n    onlyIncentivesController\\n    returns (bool)\\n  {\\n    require(reward == address(STAKE_CONTRACT), 'REWARD_TOKEN_NOT_STAKE_CONTRACT');\\n\\n    STAKE_CONTRACT.stake(to, amount);\\n\\n    return true;\\n  }\\n\\n  /// @inheritdoc IStakedTokenTransferStrategy\\n  function renewApproval() external onlyRewardsAdmin {\\n    IERC20(UNDERLYING_TOKEN).approve(address(STAKE_CONTRACT), 0);\\n    IERC20(UNDERLYING_TOKEN).approve(address(STAKE_CONTRACT), type(uint256).max);\\n  }\\n\\n  /// @inheritdoc IStakedTokenTransferStrategy\\n  function dropApproval() external onlyRewardsAdmin {\\n    IERC20(UNDERLYING_TOKEN).approve(address(STAKE_CONTRACT), 0);\\n  }\\n\\n  /// @inheritdoc IStakedTokenTransferStrategy\\n  function getStakeContract() external view returns (address) {\\n    return address(STAKE_CONTRACT);\\n  }\\n\\n  /// @inheritdoc IStakedTokenTransferStrategy\\n  function getUnderlyingToken() external view returns (address) {\\n    return UNDERLYING_TOKEN;\\n  }\\n}\\n\",\"keccak256\":\"0x00b9574fa9355940cb869f7bb343231cf57989ea39f17927c9c2e4871d4880f0\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/transfer-strategies/TransferStrategyBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {ITransferStrategyBase} from '../interfaces/ITransferStrategyBase.sol';\\nimport {GPv2SafeERC20} from '@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title TransferStrategyStorage\\n * @author Aave\\n **/\\nabstract contract TransferStrategyBase is ITransferStrategyBase {\\n  using GPv2SafeERC20 for IERC20;\\n\\n  address internal immutable INCENTIVES_CONTROLLER;\\n  address internal immutable REWARDS_ADMIN;\\n\\n  constructor(address incentivesController, address rewardsAdmin) {\\n    INCENTIVES_CONTROLLER = incentivesController;\\n    REWARDS_ADMIN = rewardsAdmin;\\n  }\\n\\n  /**\\n   * @dev Modifier for incentives controller only functions\\n   */\\n  modifier onlyIncentivesController() {\\n    require(INCENTIVES_CONTROLLER == msg.sender, 'CALLER_NOT_INCENTIVES_CONTROLLER');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Modifier for reward admin only functions\\n   */\\n  modifier onlyRewardsAdmin() {\\n    require(msg.sender == REWARDS_ADMIN, 'ONLY_REWARDS_ADMIN');\\n    _;\\n  }\\n\\n  /// @inheritdoc ITransferStrategyBase\\n  function getIncentivesController() external view override returns (address) {\\n    return INCENTIVES_CONTROLLER;\\n  }\\n\\n  /// @inheritdoc ITransferStrategyBase\\n  function getRewardsAdmin() external view override returns (address) {\\n    return REWARDS_ADMIN;\\n  }\\n\\n  /// @inheritdoc ITransferStrategyBase\\n  function performTransfer(\\n    address to,\\n    address reward,\\n    uint256 amount\\n  ) external virtual returns (bool);\\n\\n  /// @inheritdoc ITransferStrategyBase\\n  function emergencyWithdrawal(\\n    address token,\\n    address to,\\n    uint256 amount\\n  ) external onlyRewardsAdmin {\\n    IERC20(token).safeTransfer(to, amount);\\n\\n    emit EmergencyWithdrawal(msg.sender, token, to, amount);\\n  }\\n}\\n\",\"keccak256\":\"0xd412ed205d7d5c9d9f2172cc537ad0e86ec7aee7f9bc658a4001a3be4b85ba5e\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Transfer strategy that stakes the rewards into a staking contract and transfers the staking contract token. The underlying token must be transferred to this contract to be able to stake it on demand.","version":1}}},"contracts/rewards/transfer-strategies/TransferStrategyBase.sol":{"TransferStrategyBase":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdrawal","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getIncentivesController","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardsAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"reward","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"performTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave*","kind":"dev","methods":{"emergencyWithdrawal(address,address,uint256)":{"details":"Perform an emergency token withdrawal only callable by the Rewards admin","params":{"amount":"Amount of the withdrawal","to":"Address of the recipient of the withdrawal","token":"Address of the token to withdraw funds from this contract"}},"getIncentivesController()":{"returns":{"_0":"Returns the address of the Incentives Controller"}},"getRewardsAdmin()":{"returns":{"_0":"Returns the address of the Rewards admin"}},"performTransfer(address,address,uint256)":{"details":"Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation","params":{"amount":"Amount to transfer to the \"to\" address parameter","reward":"Address of the reward token","to":"Account to transfer rewards"},"returns":{"_0":"Returns true bool if transfer logic succeeds"}}},"title":"TransferStrategyStorage","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"emergencyWithdrawal(address,address,uint256)":"8d8e5da7","getIncentivesController()":"75d26413","getRewardsAdmin()":"c6255443","performTransfer(address,address,uint256)":"16beb982"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"EmergencyWithdrawal\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emergencyWithdrawal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getIncentivesController\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardsAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"reward\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"performTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave*\",\"kind\":\"dev\",\"methods\":{\"emergencyWithdrawal(address,address,uint256)\":{\"details\":\"Perform an emergency token withdrawal only callable by the Rewards admin\",\"params\":{\"amount\":\"Amount of the withdrawal\",\"to\":\"Address of the recipient of the withdrawal\",\"token\":\"Address of the token to withdraw funds from this contract\"}},\"getIncentivesController()\":{\"returns\":{\"_0\":\"Returns the address of the Incentives Controller\"}},\"getRewardsAdmin()\":{\"returns\":{\"_0\":\"Returns the address of the Rewards admin\"}},\"performTransfer(address,address,uint256)\":{\"details\":\"Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation\",\"params\":{\"amount\":\"Amount to transfer to the \\\"to\\\" address parameter\",\"reward\":\"Address of the reward token\",\"to\":\"Account to transfer rewards\"},\"returns\":{\"_0\":\"Returns true bool if transfer logic succeeds\"}}},\"title\":\"TransferStrategyStorage\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/rewards/transfer-strategies/TransferStrategyBase.sol\":\"TransferStrategyBase\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-or-later\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '../../openzeppelin/contracts/IERC20.sol';\\n\\n/// @title Gnosis Protocol v2 Safe ERC20 Transfer Library\\n/// @author Gnosis Developers\\n/// @dev Gas-efficient version of Openzeppelin's SafeERC20 contract.\\nlibrary GPv2SafeERC20 {\\n  /// @dev Wrapper around a call to the ERC20 function `transfer` that reverts\\n  /// also when the token returns `false`.\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transfer.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transfer');\\n  }\\n\\n  /// @dev Wrapper around a call to the ERC20 function `transferFrom` that\\n  /// reverts also when the token returns `false`.\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    bytes4 selector_ = token.transferFrom.selector;\\n\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      let freeMemoryPointer := mload(0x40)\\n      mstore(freeMemoryPointer, selector_)\\n      mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff))\\n      mstore(add(freeMemoryPointer, 68), value)\\n\\n      if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 0)) {\\n        returndatacopy(0, 0, returndatasize())\\n        revert(0, returndatasize())\\n      }\\n    }\\n\\n    require(getLastTransferResult(token), 'GPv2: failed transferFrom');\\n  }\\n\\n  /// @dev Verifies that the last return was a successful `transfer*` call.\\n  /// This is done by checking that the return data is either empty, or\\n  /// is a valid ABI encoded boolean.\\n  function getLastTransferResult(IERC20 token) private view returns (bool success) {\\n    // NOTE: Inspecting previous return data requires assembly. Note that\\n    // we write the return data to memory 0 in the case where the return\\n    // data size is 32, this is OK since the first 64 bytes of memory are\\n    // reserved by Solidy as a scratch space that can be used within\\n    // assembly blocks.\\n    // <https://docs.soliditylang.org/en/v0.7.6/internals/layout_in_memory.html>\\n    // solhint-disable-next-line no-inline-assembly\\n    assembly {\\n      /// @dev Revert with an ABI encoded Solidity error with a message\\n      /// that fits into 32-bytes.\\n      ///\\n      /// An ABI encoded Solidity error has the following memory layout:\\n      ///\\n      /// ------------+----------------------------------\\n      ///  byte range | value\\n      /// ------------+----------------------------------\\n      ///  0x00..0x04 |        selector(\\\"Error(string)\\\")\\n      ///  0x04..0x24 |      string offset (always 0x20)\\n      ///  0x24..0x44 |                    string length\\n      ///  0x44..0x64 | string value, padded to 32-bytes\\n      function revertWithMessage(length, message) {\\n        mstore(0x00, '\\\\x08\\\\xc3\\\\x79\\\\xa0')\\n        mstore(0x04, 0x20)\\n        mstore(0x24, length)\\n        mstore(0x44, message)\\n        revert(0x00, 0x64)\\n      }\\n\\n      switch returndatasize()\\n      // Non-standard ERC20 transfer without return.\\n      case 0 {\\n        // NOTE: When the return data size is 0, verify that there\\n        // is code at the address. This is done in order to maintain\\n        // compatibility with Solidity calling conventions.\\n        // <https://docs.soliditylang.org/en/v0.7.6/control-structures.html#external-function-calls>\\n        if iszero(extcodesize(token)) {\\n          revertWithMessage(20, 'GPv2: not a contract')\\n        }\\n\\n        success := 1\\n      }\\n      // Standard ERC20 transfer returning boolean success value.\\n      case 32 {\\n        returndatacopy(0, 0, returndatasize())\\n\\n        // NOTE: For ABI encoding v1, any non-zero value is accepted\\n        // as `true` for a boolean. In order to stay compatible with\\n        // OpenZeppelin's `SafeERC20` library which is known to work\\n        // with the existing ERC20 implementation we care about,\\n        // make sure we return success for any non-zero return value\\n        // from the `transfer*` call.\\n        success := iszero(iszero(mload(0)))\\n      }\\n      default {\\n        revertWithMessage(31, 'GPv2: malformed transfer result')\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xb18337187a2a6c4e64c61f8e4e06f0e932a69bb8f33688943bf50d7f4198e44b\",\"license\":\"LGPL-3.0-or-later\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/interfaces/ITransferStrategyBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\ninterface ITransferStrategyBase {\\n  event EmergencyWithdrawal(\\n    address indexed caller,\\n    address indexed token,\\n    address indexed to,\\n    uint256 amount\\n  );\\n\\n  /**\\n   * @dev Perform custom transfer logic via delegate call from source contract to a TransferStrategy implementation\\n   * @param to Account to transfer rewards\\n   * @param reward Address of the reward token\\n   * @param amount Amount to transfer to the \\\"to\\\" address parameter\\n   * @return Returns true bool if transfer logic succeeds\\n   */\\n  function performTransfer(address to, address reward, uint256 amount) external returns (bool);\\n\\n  /**\\n   * @return Returns the address of the Incentives Controller\\n   */\\n  function getIncentivesController() external view returns (address);\\n\\n  /**\\n   * @return Returns the address of the Rewards admin\\n   */\\n  function getRewardsAdmin() external view returns (address);\\n\\n  /**\\n   * @dev Perform an emergency token withdrawal only callable by the Rewards admin\\n   * @param token Address of the token to withdraw funds from this contract\\n   * @param to Address of the recipient of the withdrawal\\n   * @param amount Amount of the withdrawal\\n   */\\n  function emergencyWithdrawal(address token, address to, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0xa52a6dc237879acbed7325787ce58238a3afd626fa2ed827d4e321d2e4ef51ad\",\"license\":\"AGPL-3.0\"},\"contracts/rewards/transfer-strategies/TransferStrategyBase.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {ITransferStrategyBase} from '../interfaces/ITransferStrategyBase.sol';\\nimport {GPv2SafeERC20} from '@aave/core-v3/contracts/dependencies/gnosis/contracts/GPv2SafeERC20.sol';\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title TransferStrategyStorage\\n * @author Aave\\n **/\\nabstract contract TransferStrategyBase is ITransferStrategyBase {\\n  using GPv2SafeERC20 for IERC20;\\n\\n  address internal immutable INCENTIVES_CONTROLLER;\\n  address internal immutable REWARDS_ADMIN;\\n\\n  constructor(address incentivesController, address rewardsAdmin) {\\n    INCENTIVES_CONTROLLER = incentivesController;\\n    REWARDS_ADMIN = rewardsAdmin;\\n  }\\n\\n  /**\\n   * @dev Modifier for incentives controller only functions\\n   */\\n  modifier onlyIncentivesController() {\\n    require(INCENTIVES_CONTROLLER == msg.sender, 'CALLER_NOT_INCENTIVES_CONTROLLER');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Modifier for reward admin only functions\\n   */\\n  modifier onlyRewardsAdmin() {\\n    require(msg.sender == REWARDS_ADMIN, 'ONLY_REWARDS_ADMIN');\\n    _;\\n  }\\n\\n  /// @inheritdoc ITransferStrategyBase\\n  function getIncentivesController() external view override returns (address) {\\n    return INCENTIVES_CONTROLLER;\\n  }\\n\\n  /// @inheritdoc ITransferStrategyBase\\n  function getRewardsAdmin() external view override returns (address) {\\n    return REWARDS_ADMIN;\\n  }\\n\\n  /// @inheritdoc ITransferStrategyBase\\n  function performTransfer(\\n    address to,\\n    address reward,\\n    uint256 amount\\n  ) external virtual returns (bool);\\n\\n  /// @inheritdoc ITransferStrategyBase\\n  function emergencyWithdrawal(\\n    address token,\\n    address to,\\n    uint256 amount\\n  ) external onlyRewardsAdmin {\\n    IERC20(token).safeTransfer(to, amount);\\n\\n    emit EmergencyWithdrawal(msg.sender, token, to, amount);\\n  }\\n}\\n\",\"keccak256\":\"0xd412ed205d7d5c9d9f2172cc537ad0e86ec7aee7f9bc658a4001a3be4b85ba5e\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/treasury/AaveEcosystemReserveController.sol":{"AaveEcosystemReserveController":{"abi":[{"inputs":[{"internalType":"address","name":"aaveGovShortTimelock","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"collector","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collector","type":"address"},{"internalType":"uint256","name":"streamId","type":"uint256"}],"name":"cancelStream","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collector","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deposit","type":"uint256"},{"internalType":"contract IERC20","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"stopTime","type":"uint256"}],"name":"createStream","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collector","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collector","type":"address"},{"internalType":"uint256","name":"streamId","type":"uint256"},{"internalType":"uint256","name":"funds","type":"uint256"}],"name":"withdrawFromStream","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"approve(address,address,address,uint256)":{"params":{"amount":"Allowance to approve*","collector":"The collector contract with funds (Aave ecosystem reserve)","recipient":"Allowance's recipient","token":"The asset address"}},"cancelStream(address,uint256)":{"params":{"collector":"The collector contract with funds (Aave ecosystem reserve)","streamId":"The id of the stream to cancel"},"returns":{"_0":"bool If the cancellation happened correctly*"}},"constructor":{"params":{"aaveGovShortTimelock":"The address of the Aave's governance executor, owning this contract"}},"createStream(address,address,uint256,address,uint256,uint256)":{"params":{"collector":"The collector contract with funds (Aave ecosystem reserve)","deposit":"Total amount to be streamed","recipient":"The recipient of the stream of token","startTime":"The unix timestamp for when the stream starts","stopTime":"The unix timestamp for when the stream stops","tokenAddress":"The ERC20 token to use as streaming asset"},"returns":{"_0":"uint256 The stream id created*"}},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"transfer(address,address,address,uint256)":{"params":{"amount":"Amount to transfer*","collector":"The collector contract with funds (Aave ecosystem reserve)","recipient":"Transfer's recipient","token":"The asset address"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."},"withdrawFromStream(address,uint256,uint256)":{"params":{"collector":"The collector contract with funds (Aave ecosystem reserve)","funds":"Amount to withdraw","streamId":"The id of the stream to withdraw tokens from"},"returns":{"_0":"bool If the withdrawal finished properly*"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{"@_1500":{"entryPoint":null,"id":1500,"parameterSlots":0,"returnSlots":0},"@_40126":{"entryPoint":null,"id":40126,"parameterSlots":1,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@transferOwnership_1572":{"entryPoint":109,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":378,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1074:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"95:209:201","statements":[{"body":{"nodeType":"YulBlock","src":"141:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"150:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"153:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"143:6:201"},"nodeType":"YulFunctionCall","src":"143:12:201"},"nodeType":"YulExpressionStatement","src":"143:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"116:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"125:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"112:3:201"},"nodeType":"YulFunctionCall","src":"112:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"137:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"108:3:201"},"nodeType":"YulFunctionCall","src":"108:32:201"},"nodeType":"YulIf","src":"105:52:201"},{"nodeType":"YulVariableDeclaration","src":"166:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"185:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"179:5:201"},"nodeType":"YulFunctionCall","src":"179:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"170:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"258:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"267:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"270:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"260:6:201"},"nodeType":"YulFunctionCall","src":"260:12:201"},"nodeType":"YulExpressionStatement","src":"260:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"217:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"228:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"243:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"248:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"239:3:201"},"nodeType":"YulFunctionCall","src":"239:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"252:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"235:3:201"},"nodeType":"YulFunctionCall","src":"235:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"224:3:201"},"nodeType":"YulFunctionCall","src":"224:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"214:2:201"},"nodeType":"YulFunctionCall","src":"214:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"207:6:201"},"nodeType":"YulFunctionCall","src":"207:50:201"},"nodeType":"YulIf","src":"204:70:201"},{"nodeType":"YulAssignment","src":"283:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"293:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"283:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"61:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"72:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"84:6:201","type":""}],"src":"14:290:201"},{"body":{"nodeType":"YulBlock","src":"483:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"500:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"511:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"493:6:201"},"nodeType":"YulFunctionCall","src":"493:21:201"},"nodeType":"YulExpressionStatement","src":"493:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"534:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"545:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"530:3:201"},"nodeType":"YulFunctionCall","src":"530:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"550:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"523:6:201"},"nodeType":"YulFunctionCall","src":"523:30:201"},"nodeType":"YulExpressionStatement","src":"523:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"573:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"584:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"569:3:201"},"nodeType":"YulFunctionCall","src":"569:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"589:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"562:6:201"},"nodeType":"YulFunctionCall","src":"562:62:201"},"nodeType":"YulExpressionStatement","src":"562:62:201"},{"nodeType":"YulAssignment","src":"633:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"645:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"656:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"641:3:201"},"nodeType":"YulFunctionCall","src":"641:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"633:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"460:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"474:4:201","type":""}],"src":"309:356:201"},{"body":{"nodeType":"YulBlock","src":"844:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"861:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"872:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"854:6:201"},"nodeType":"YulFunctionCall","src":"854:21:201"},"nodeType":"YulExpressionStatement","src":"854:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"895:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"906:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"891:3:201"},"nodeType":"YulFunctionCall","src":"891:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"911:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"884:6:201"},"nodeType":"YulFunctionCall","src":"884:30:201"},"nodeType":"YulExpressionStatement","src":"884:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"934:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"945:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"930:3:201"},"nodeType":"YulFunctionCall","src":"930:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"950:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"923:6:201"},"nodeType":"YulFunctionCall","src":"923:62:201"},"nodeType":"YulExpressionStatement","src":"923:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1005:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1016:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1001:3:201"},"nodeType":"YulFunctionCall","src":"1001:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"1021:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"994:6:201"},"nodeType":"YulFunctionCall","src":"994:36:201"},"nodeType":"YulExpressionStatement","src":"994:36:201"},{"nodeType":"YulAssignment","src":"1039:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1051:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1062:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1047:3:201"},"nodeType":"YulFunctionCall","src":"1047:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1039:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"821:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"835:4:201","type":""}],"src":"670:402:201"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b50604051610d11380380610d1183398101604081905261002f9161017a565b600080546001600160a01b03191633908117825560405190918291600080516020610cf1833981519152908290a3506100678161006d565b506101aa565b6000546001600160a01b031633146100cc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b0381166101315760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016100c3565b600080546040516001600160a01b0380851693921691600080516020610cf183398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006020828403121561018c57600080fd5b81516001600160a01b03811681146101a357600080fd5b9392505050565b610b38806101b96000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100e5578063f18d03cc1461010d578063f2fde38b14610120578063fd59e1341461013357600080fd5b80632f436bfa1461008d57806359eba454146100b5578063715018a6146100ca5780637dc14a8e146100d2575b600080fd5b6100a061009b366004610993565b610154565b60405190151581526020015b60405180910390f35b6100c86100c33660046109c8565b61027b565b005b6100c8610393565b6100a06100e0366004610a19565b610483565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ac565b6100c861011b3660046109c8565b61059d565b6100c861012e366004610a45565b610681565b610146610141366004610a62565b610832565b6040519081526020016100ac565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146101db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6040517f7a9b2c6c000000000000000000000000000000000000000000000000000000008152600481018490526024810183905273ffffffffffffffffffffffffffffffffffffffff851690637a9b2c6c906044016020604051808303816000875af115801561024f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102739190610ac7565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d2565b6040517fe1f21c6700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015283811660248301526044820183905285169063e1f21c67906064015b600060405180830381600087803b15801561037557600080fd5b505af1158015610389573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d2565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6000805473ffffffffffffffffffffffffffffffffffffffff163314610505576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d2565b6040517f6db9241b0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff841690636db9241b906024016020604051808303816000875af1158015610572573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105969190610ac7565b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461061e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d2565b6040517fbeabacc800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015283811660248301526044820183905285169063beabacc89060640161035b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610702576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d2565b73ffffffffffffffffffffffffffffffffffffffff81166107a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d2565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146108b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d2565b6040517fcc1b4bf600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790528581166044830152606482018590526084820184905288169063cc1b4bf69060a4016020604051808303816000875af115801561093f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109639190610ae9565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461099057600080fd5b50565b6000806000606084860312156109a857600080fd5b83356109b38161096e565b95602085013595506040909401359392505050565b600080600080608085870312156109de57600080fd5b84356109e98161096e565b935060208501356109f98161096e565b92506040850135610a098161096e565b9396929550929360600135925050565b60008060408385031215610a2c57600080fd5b8235610a378161096e565b946020939093013593505050565b600060208284031215610a5757600080fd5b81356105968161096e565b60008060008060008060c08789031215610a7b57600080fd5b8635610a868161096e565b95506020870135610a968161096e565b9450604087013593506060870135610aad8161096e565b9598949750929560808101359460a0909101359350915050565b600060208284031215610ad957600080fd5b8151801515811461059657600080fd5b600060208284031215610afb57600080fd5b505191905056fea2646970667358221220203a67eac3f9c8a9f2237273e66de1cd4ee6f579b6ae2d765a8cc8d4b2d47b8264736f6c634300080a00338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xD11 CODESIZE SUB DUP1 PUSH2 0xD11 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x17A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 DUP3 SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xCF1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 DUP3 SWAP1 LOG3 POP PUSH2 0x67 DUP2 PUSH2 0x6D JUMP JUMPDEST POP PUSH2 0x1AA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xCC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x131 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0xCF1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 LOG3 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 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x18C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xB38 DUP1 PUSH2 0x1B9 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x88 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xE5 JUMPI DUP1 PUSH4 0xF18D03CC EQ PUSH2 0x10D JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x120 JUMPI DUP1 PUSH4 0xFD59E134 EQ PUSH2 0x133 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2F436BFA EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x59EBA454 EQ PUSH2 0xB5 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xCA JUMPI DUP1 PUSH4 0x7DC14A8E EQ PUSH2 0xD2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA0 PUSH2 0x9B CALLDATASIZE PUSH1 0x4 PUSH2 0x993 JUMP JUMPDEST PUSH2 0x154 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC8 PUSH2 0xC3 CALLDATASIZE PUSH1 0x4 PUSH2 0x9C8 JUMP JUMPDEST PUSH2 0x27B JUMP JUMPDEST STOP JUMPDEST PUSH2 0xC8 PUSH2 0x393 JUMP JUMPDEST PUSH2 0xA0 PUSH2 0xE0 CALLDATASIZE PUSH1 0x4 PUSH2 0xA19 JUMP JUMPDEST PUSH2 0x483 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xAC JUMP JUMPDEST PUSH2 0xC8 PUSH2 0x11B CALLDATASIZE PUSH1 0x4 PUSH2 0x9C8 JUMP JUMPDEST PUSH2 0x59D JUMP JUMPDEST PUSH2 0xC8 PUSH2 0x12E CALLDATASIZE PUSH1 0x4 PUSH2 0xA45 JUMP JUMPDEST PUSH2 0x681 JUMP JUMPDEST PUSH2 0x146 PUSH2 0x141 CALLDATASIZE PUSH1 0x4 PUSH2 0xA62 JUMP JUMPDEST PUSH2 0x832 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xAC JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1DB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7A9B2C6C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH4 0x7A9B2C6C SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x24F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x273 SWAP2 SWAP1 PUSH2 0xAC7 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x2FC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE DUP6 AND SWAP1 PUSH4 0xE1F21C67 SWAP1 PUSH1 0x64 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x375 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x389 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x414 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x505 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x6DB9241B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH4 0x6DB9241B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x572 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x596 SWAP2 SWAP1 PUSH2 0xAC7 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x61E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xBEABACC800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE DUP6 AND SWAP1 PUSH4 0xBEABACC8 SWAP1 PUSH1 0x64 ADD PUSH2 0x35B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x702 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1D2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x7A5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x8B4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xCC1B4BF600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP8 SWAP1 MSTORE DUP6 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD DUP5 SWAP1 MSTORE DUP9 AND SWAP1 PUSH4 0xCC1B4BF6 SWAP1 PUSH1 0xA4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x93F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x963 SWAP2 SWAP1 PUSH2 0xAE9 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x990 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x9A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x9B3 DUP2 PUSH2 0x96E JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x9DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x9E9 DUP2 PUSH2 0x96E JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x9F9 DUP2 PUSH2 0x96E JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0xA09 DUP2 PUSH2 0x96E JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP3 SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xA2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0xA37 DUP2 PUSH2 0x96E 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 0xA57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x596 DUP2 PUSH2 0x96E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0xA7B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0xA86 DUP2 PUSH2 0x96E JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0xA96 DUP2 PUSH2 0x96E JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0xAAD DUP2 PUSH2 0x96E JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP3 SWAP6 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP5 PUSH1 0xA0 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x596 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 KECCAK256 GASPRICE PUSH8 0xEAC3F9C8A9F22372 PUSH20 0xE66DE1CD4EE6F579B6AE2D765A8CC8D4B2D47B82 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER DUP12 0xE0 SMOD SWAP13 MSTORE8 AND MSIZE EQ SGT DIFFICULTY 0xCD 0x1F 0xD0 LOG4 CALLCODE DUP5 NOT 0x49 PUSH32 0x9722A3DAAFE3B4186F6B6457E000000000000000000000000000000000000000 ","sourceMap":"507:1750:188:-:0;;;734:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;835:17:11;873:18;;-1:-1:-1;;;;;;873:18:11;678:10:4;873:18:11;;;;;902:43;;678:10:4;;;;-1:-1:-1;;;;;;;;;;;902:43:11;835:17;;902:43;-1:-1:-1;782:39:188;800:20;782:17;:39::i;:::-;734:92;507:1750;;1875:226:11;1204:6;;-1:-1:-1;;;;;1204:6:11;678:10:4;1204:22:11;1196:67;;;;-1:-1:-1;;;1196:67:11;;511:2:201;1196:67:11;;;493:21:201;;;530:18;;;523:30;589:34;569:18;;;562:62;641:18;;1196:67:11;;;;;;;;;-1:-1:-1;;;;;1959:22:11;::::1;1951:73;;;::::0;-1:-1:-1;;;1951:73:11;;872:2:201;1951:73:11::1;::::0;::::1;854:21:201::0;911:2;891:18;;;884:30;950:34;930:18;;;923:62;-1:-1:-1;;;1001:18:201;;;994:36;1047:19;;1951:73:11::1;670:402:201::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;-1:-1:-1;;;;;2035:38:11;;::::1;::::0;2056:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;2035:38:11;::::1;2079:6;:17:::0;;-1:-1:-1;;;;;;2079:17:11::1;-1:-1:-1::0;;;;;2079:17:11;;;::::1;::::0;;;::::1;::::0;;1875:226::o;14:290:201:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:201;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:201:o;670:402::-;507:1750:188;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@approve_40151":{"entryPoint":635,"id":40151,"parameterSlots":4,"returnSlots":0},"@cancelStream_40255":{"entryPoint":1155,"id":40255,"parameterSlots":2,"returnSlots":1},"@createStream_40212":{"entryPoint":2098,"id":40212,"parameterSlots":6,"returnSlots":1},"@owner_1509":{"entryPoint":null,"id":1509,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_1544":{"entryPoint":915,"id":1544,"parameterSlots":0,"returnSlots":0},"@transferOwnership_1572":{"entryPoint":1665,"id":1572,"parameterSlots":1,"returnSlots":0},"@transfer_40176":{"entryPoint":1437,"id":40176,"parameterSlots":4,"returnSlots":0},"@withdrawFromStream_40235":{"entryPoint":340,"id":40235,"parameterSlots":3,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":2629,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_addresst_uint256t_contract$_IERC20_$1442t_uint256t_uint256":{"entryPoint":2658,"id":null,"parameterSlots":2,"returnSlots":6},"abi_decode_tuple_t_addresst_contract$_IERC20_$1442t_addresst_uint256":{"entryPoint":2504,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_uint256":{"entryPoint":2585,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_uint256t_uint256":{"entryPoint":2451,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":2759,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":2793,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IERC20_$1442_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"validator_revert_address":{"entryPoint":2414,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:5566:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"59:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"146:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"155:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"158:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"148:6:201"},"nodeType":"YulFunctionCall","src":"148:12:201"},"nodeType":"YulExpressionStatement","src":"148:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"82:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"93:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"100:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"89:3:201"},"nodeType":"YulFunctionCall","src":"89:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"79:2:201"},"nodeType":"YulFunctionCall","src":"79:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"72:6:201"},"nodeType":"YulFunctionCall","src":"72:73:201"},"nodeType":"YulIf","src":"69:93:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"48:5:201","type":""}],"src":"14:154:201"},{"body":{"nodeType":"YulBlock","src":"277:279:201","statements":[{"body":{"nodeType":"YulBlock","src":"323:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"332:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"335:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"325:6:201"},"nodeType":"YulFunctionCall","src":"325:12:201"},"nodeType":"YulExpressionStatement","src":"325:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"298:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"307:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"294:3:201"},"nodeType":"YulFunctionCall","src":"294:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"319:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"290:3:201"},"nodeType":"YulFunctionCall","src":"290:32:201"},"nodeType":"YulIf","src":"287:52:201"},{"nodeType":"YulVariableDeclaration","src":"348:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"374:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"361:12:201"},"nodeType":"YulFunctionCall","src":"361:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"352:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"418:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"393:24:201"},"nodeType":"YulFunctionCall","src":"393:31:201"},"nodeType":"YulExpressionStatement","src":"393:31:201"},{"nodeType":"YulAssignment","src":"433:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"443:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"433:6:201"}]},{"nodeType":"YulAssignment","src":"457:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"484:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"495:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"480:3:201"},"nodeType":"YulFunctionCall","src":"480:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"467:12:201"},"nodeType":"YulFunctionCall","src":"467:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"457:6:201"}]},{"nodeType":"YulAssignment","src":"508:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"535:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"546:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"531:3:201"},"nodeType":"YulFunctionCall","src":"531:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"518:12:201"},"nodeType":"YulFunctionCall","src":"518:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"508:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"227:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"238:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"250:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"258:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"266:6:201","type":""}],"src":"173:383:201"},{"body":{"nodeType":"YulBlock","src":"656:92:201","statements":[{"nodeType":"YulAssignment","src":"666:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"678:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"689:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"674:3:201"},"nodeType":"YulFunctionCall","src":"674:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"666:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"708:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"733:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"726:6:201"},"nodeType":"YulFunctionCall","src":"726:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"719:6:201"},"nodeType":"YulFunctionCall","src":"719:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"701:6:201"},"nodeType":"YulFunctionCall","src":"701:41:201"},"nodeType":"YulExpressionStatement","src":"701:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"625:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"636:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"647:4:201","type":""}],"src":"561:187:201"},{"body":{"nodeType":"YulBlock","src":"889:477:201","statements":[{"body":{"nodeType":"YulBlock","src":"936:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"945:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"948:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"938:6:201"},"nodeType":"YulFunctionCall","src":"938:12:201"},"nodeType":"YulExpressionStatement","src":"938:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"910:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"919:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"906:3:201"},"nodeType":"YulFunctionCall","src":"906:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"931:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"902:3:201"},"nodeType":"YulFunctionCall","src":"902:33:201"},"nodeType":"YulIf","src":"899:53:201"},{"nodeType":"YulVariableDeclaration","src":"961:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"987:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"974:12:201"},"nodeType":"YulFunctionCall","src":"974:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"965:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1031:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1006:24:201"},"nodeType":"YulFunctionCall","src":"1006:31:201"},"nodeType":"YulExpressionStatement","src":"1006:31:201"},{"nodeType":"YulAssignment","src":"1046:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1056:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1046:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1070:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1102:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1113:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1098:3:201"},"nodeType":"YulFunctionCall","src":"1098:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1085:12:201"},"nodeType":"YulFunctionCall","src":"1085:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"1074:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"1151:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1126:24:201"},"nodeType":"YulFunctionCall","src":"1126:33:201"},"nodeType":"YulExpressionStatement","src":"1126:33:201"},{"nodeType":"YulAssignment","src":"1168:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"1178:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1168:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"1194:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1226:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1237:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1222:3:201"},"nodeType":"YulFunctionCall","src":"1222:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1209:12:201"},"nodeType":"YulFunctionCall","src":"1209:32:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"1198:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"1275:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1250:24:201"},"nodeType":"YulFunctionCall","src":"1250:33:201"},"nodeType":"YulExpressionStatement","src":"1250:33:201"},{"nodeType":"YulAssignment","src":"1292:17:201","value":{"name":"value_2","nodeType":"YulIdentifier","src":"1302:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1292:6:201"}]},{"nodeType":"YulAssignment","src":"1318:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1345:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1356:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1341:3:201"},"nodeType":"YulFunctionCall","src":"1341:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1328:12:201"},"nodeType":"YulFunctionCall","src":"1328:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"1318:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_contract$_IERC20_$1442t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"831:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"842:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"854:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"862:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"870:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"878:6:201","type":""}],"src":"753:613:201"},{"body":{"nodeType":"YulBlock","src":"1458:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"1504:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1513:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1516:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1506:6:201"},"nodeType":"YulFunctionCall","src":"1506:12:201"},"nodeType":"YulExpressionStatement","src":"1506:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1479:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1488:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1475:3:201"},"nodeType":"YulFunctionCall","src":"1475:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1500:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1471:3:201"},"nodeType":"YulFunctionCall","src":"1471:32:201"},"nodeType":"YulIf","src":"1468:52:201"},{"nodeType":"YulVariableDeclaration","src":"1529:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1555:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1542:12:201"},"nodeType":"YulFunctionCall","src":"1542:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1533:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1599:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1574:24:201"},"nodeType":"YulFunctionCall","src":"1574:31:201"},"nodeType":"YulExpressionStatement","src":"1574:31:201"},{"nodeType":"YulAssignment","src":"1614:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1624:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1614:6:201"}]},{"nodeType":"YulAssignment","src":"1638:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1665:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1676:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1661:3:201"},"nodeType":"YulFunctionCall","src":"1661:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1648:12:201"},"nodeType":"YulFunctionCall","src":"1648:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1638:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1416:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1427:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1439:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1447:6:201","type":""}],"src":"1371:315:201"},{"body":{"nodeType":"YulBlock","src":"1792:125:201","statements":[{"nodeType":"YulAssignment","src":"1802:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1814:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1825:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1810:3:201"},"nodeType":"YulFunctionCall","src":"1810:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1802:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1844:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1859:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1867:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1855:3:201"},"nodeType":"YulFunctionCall","src":"1855:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1837:6:201"},"nodeType":"YulFunctionCall","src":"1837:74:201"},"nodeType":"YulExpressionStatement","src":"1837:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1761:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1772:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1783:4:201","type":""}],"src":"1691:226:201"},{"body":{"nodeType":"YulBlock","src":"1992:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"2038:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2047:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2050:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2040:6:201"},"nodeType":"YulFunctionCall","src":"2040:12:201"},"nodeType":"YulExpressionStatement","src":"2040:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2013:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2022:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2009:3:201"},"nodeType":"YulFunctionCall","src":"2009:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2034:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2005:3:201"},"nodeType":"YulFunctionCall","src":"2005:32:201"},"nodeType":"YulIf","src":"2002:52:201"},{"nodeType":"YulVariableDeclaration","src":"2063:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2089:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2076:12:201"},"nodeType":"YulFunctionCall","src":"2076:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2067:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2133:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2108:24:201"},"nodeType":"YulFunctionCall","src":"2108:31:201"},"nodeType":"YulExpressionStatement","src":"2108:31:201"},{"nodeType":"YulAssignment","src":"2148:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"2158:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2148:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1958:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1969:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1981:6:201","type":""}],"src":"1922:247:201"},{"body":{"nodeType":"YulBlock","src":"2344:581:201","statements":[{"body":{"nodeType":"YulBlock","src":"2391:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2400:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2403:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2393:6:201"},"nodeType":"YulFunctionCall","src":"2393:12:201"},"nodeType":"YulExpressionStatement","src":"2393:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2365:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2374:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2361:3:201"},"nodeType":"YulFunctionCall","src":"2361:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2386:3:201","type":"","value":"192"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2357:3:201"},"nodeType":"YulFunctionCall","src":"2357:33:201"},"nodeType":"YulIf","src":"2354:53:201"},{"nodeType":"YulVariableDeclaration","src":"2416:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2442:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2429:12:201"},"nodeType":"YulFunctionCall","src":"2429:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2420:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2486:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2461:24:201"},"nodeType":"YulFunctionCall","src":"2461:31:201"},"nodeType":"YulExpressionStatement","src":"2461:31:201"},{"nodeType":"YulAssignment","src":"2501:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"2511:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2501:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2525:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2557:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2568:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2553:3:201"},"nodeType":"YulFunctionCall","src":"2553:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2540:12:201"},"nodeType":"YulFunctionCall","src":"2540:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2529:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2606:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2581:24:201"},"nodeType":"YulFunctionCall","src":"2581:33:201"},"nodeType":"YulExpressionStatement","src":"2581:33:201"},{"nodeType":"YulAssignment","src":"2623:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"2633:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2623:6:201"}]},{"nodeType":"YulAssignment","src":"2649:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2676:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2687:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2672:3:201"},"nodeType":"YulFunctionCall","src":"2672:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2659:12:201"},"nodeType":"YulFunctionCall","src":"2659:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2649:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2700:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2732:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2743:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2728:3:201"},"nodeType":"YulFunctionCall","src":"2728:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2715:12:201"},"nodeType":"YulFunctionCall","src":"2715:32:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"2704:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"2781:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2756:24:201"},"nodeType":"YulFunctionCall","src":"2756:33:201"},"nodeType":"YulExpressionStatement","src":"2756:33:201"},{"nodeType":"YulAssignment","src":"2798:17:201","value":{"name":"value_2","nodeType":"YulIdentifier","src":"2808:7:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2798:6:201"}]},{"nodeType":"YulAssignment","src":"2824:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2851:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2862:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2847:3:201"},"nodeType":"YulFunctionCall","src":"2847:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2834:12:201"},"nodeType":"YulFunctionCall","src":"2834:33:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"2824:6:201"}]},{"nodeType":"YulAssignment","src":"2876:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2903:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2914:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2899:3:201"},"nodeType":"YulFunctionCall","src":"2899:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2886:12:201"},"nodeType":"YulFunctionCall","src":"2886:33:201"},"variableNames":[{"name":"value5","nodeType":"YulIdentifier","src":"2876:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_uint256t_contract$_IERC20_$1442t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2270:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2281:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2293:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2301:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2309:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2317:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"2325:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"2333:6:201","type":""}],"src":"2174:751:201"},{"body":{"nodeType":"YulBlock","src":"3031:76:201","statements":[{"nodeType":"YulAssignment","src":"3041:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3053:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3064:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3049:3:201"},"nodeType":"YulFunctionCall","src":"3049:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3041:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3083:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"3094:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3076:6:201"},"nodeType":"YulFunctionCall","src":"3076:25:201"},"nodeType":"YulExpressionStatement","src":"3076:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3000:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3011:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3022:4:201","type":""}],"src":"2930:177:201"},{"body":{"nodeType":"YulBlock","src":"3286:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3303:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3314:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3296:6:201"},"nodeType":"YulFunctionCall","src":"3296:21:201"},"nodeType":"YulExpressionStatement","src":"3296:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3337:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3348:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3333:3:201"},"nodeType":"YulFunctionCall","src":"3333:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"3353:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3326:6:201"},"nodeType":"YulFunctionCall","src":"3326:30:201"},"nodeType":"YulExpressionStatement","src":"3326:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3376:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3387:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3372:3:201"},"nodeType":"YulFunctionCall","src":"3372:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"3392:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3365:6:201"},"nodeType":"YulFunctionCall","src":"3365:62:201"},"nodeType":"YulExpressionStatement","src":"3365:62:201"},{"nodeType":"YulAssignment","src":"3436:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3448:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3459:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3444:3:201"},"nodeType":"YulFunctionCall","src":"3444:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3436:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3263:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3277:4:201","type":""}],"src":"3112:356:201"},{"body":{"nodeType":"YulBlock","src":"3602:119:201","statements":[{"nodeType":"YulAssignment","src":"3612:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3624:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3635:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3620:3:201"},"nodeType":"YulFunctionCall","src":"3620:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3612:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3654:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"3665:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3647:6:201"},"nodeType":"YulFunctionCall","src":"3647:25:201"},"nodeType":"YulExpressionStatement","src":"3647:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3692:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3703:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3688:3:201"},"nodeType":"YulFunctionCall","src":"3688:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"3708:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3681:6:201"},"nodeType":"YulFunctionCall","src":"3681:34:201"},"nodeType":"YulExpressionStatement","src":"3681:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3563:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3574:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3582:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3593:4:201","type":""}],"src":"3473:248:201"},{"body":{"nodeType":"YulBlock","src":"3804:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"3850:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3859:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3862:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3852:6:201"},"nodeType":"YulFunctionCall","src":"3852:12:201"},"nodeType":"YulExpressionStatement","src":"3852:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3825:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3834:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3821:3:201"},"nodeType":"YulFunctionCall","src":"3821:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3846:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3817:3:201"},"nodeType":"YulFunctionCall","src":"3817:32:201"},"nodeType":"YulIf","src":"3814:52:201"},{"nodeType":"YulVariableDeclaration","src":"3875:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3894:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"3888:5:201"},"nodeType":"YulFunctionCall","src":"3888:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3879:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"3957:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3966:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3969:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3959:6:201"},"nodeType":"YulFunctionCall","src":"3959:12:201"},"nodeType":"YulExpressionStatement","src":"3959:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3926:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3947:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3940:6:201"},"nodeType":"YulFunctionCall","src":"3940:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3933:6:201"},"nodeType":"YulFunctionCall","src":"3933:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"3923:2:201"},"nodeType":"YulFunctionCall","src":"3923:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"3916:6:201"},"nodeType":"YulFunctionCall","src":"3916:40:201"},"nodeType":"YulIf","src":"3913:60:201"},{"nodeType":"YulAssignment","src":"3982:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3992:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3982:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3770:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3781:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3793:6:201","type":""}],"src":"3726:277:201"},{"body":{"nodeType":"YulBlock","src":"4180:241:201","statements":[{"nodeType":"YulAssignment","src":"4190:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4202:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4213:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4198:3:201"},"nodeType":"YulFunctionCall","src":"4198:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4190:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"4225:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"4235:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4229:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4293:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4308:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4316:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4304:3:201"},"nodeType":"YulFunctionCall","src":"4304:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4286:6:201"},"nodeType":"YulFunctionCall","src":"4286:34:201"},"nodeType":"YulExpressionStatement","src":"4286:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4340:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4351:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4336:3:201"},"nodeType":"YulFunctionCall","src":"4336:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"4360:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"4368:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4356:3:201"},"nodeType":"YulFunctionCall","src":"4356:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4329:6:201"},"nodeType":"YulFunctionCall","src":"4329:43:201"},"nodeType":"YulExpressionStatement","src":"4329:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4392:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4403:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4388:3:201"},"nodeType":"YulFunctionCall","src":"4388:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"4408:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4381:6:201"},"nodeType":"YulFunctionCall","src":"4381:34:201"},"nodeType":"YulExpressionStatement","src":"4381:34:201"}]},"name":"abi_encode_tuple_t_contract$_IERC20_$1442_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4133:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4144:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4152:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4160:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4171:4:201","type":""}],"src":"4008:413:201"},{"body":{"nodeType":"YulBlock","src":"4600:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4617:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4628:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4610:6:201"},"nodeType":"YulFunctionCall","src":"4610:21:201"},"nodeType":"YulExpressionStatement","src":"4610:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4651:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4662:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4647:3:201"},"nodeType":"YulFunctionCall","src":"4647:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"4667:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4640:6:201"},"nodeType":"YulFunctionCall","src":"4640:30:201"},"nodeType":"YulExpressionStatement","src":"4640:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4690:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4701:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4686:3:201"},"nodeType":"YulFunctionCall","src":"4686:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"4706:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4679:6:201"},"nodeType":"YulFunctionCall","src":"4679:62:201"},"nodeType":"YulExpressionStatement","src":"4679:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4761:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4772:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4757:3:201"},"nodeType":"YulFunctionCall","src":"4757:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"4777:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4750:6:201"},"nodeType":"YulFunctionCall","src":"4750:36:201"},"nodeType":"YulExpressionStatement","src":"4750:36:201"},{"nodeType":"YulAssignment","src":"4795:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4807:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4818:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4803:3:201"},"nodeType":"YulFunctionCall","src":"4803:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4795:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4577:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4591:4:201","type":""}],"src":"4426:402:201"},{"body":{"nodeType":"YulBlock","src":"5046:329:201","statements":[{"nodeType":"YulAssignment","src":"5056:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5068:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5079:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5064:3:201"},"nodeType":"YulFunctionCall","src":"5064:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5056:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"5092:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"5102:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5096:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5160:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5175:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5183:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5171:3:201"},"nodeType":"YulFunctionCall","src":"5171:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5153:6:201"},"nodeType":"YulFunctionCall","src":"5153:34:201"},"nodeType":"YulExpressionStatement","src":"5153:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5207:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5218:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5203:3:201"},"nodeType":"YulFunctionCall","src":"5203:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"5223:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5196:6:201"},"nodeType":"YulFunctionCall","src":"5196:34:201"},"nodeType":"YulExpressionStatement","src":"5196:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5250:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5261:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5246:3:201"},"nodeType":"YulFunctionCall","src":"5246:18:201"},{"arguments":[{"name":"value2","nodeType":"YulIdentifier","src":"5270:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"5278:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"5266:3:201"},"nodeType":"YulFunctionCall","src":"5266:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5239:6:201"},"nodeType":"YulFunctionCall","src":"5239:43:201"},"nodeType":"YulExpressionStatement","src":"5239:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5302:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5313:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5298:3:201"},"nodeType":"YulFunctionCall","src":"5298:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"5318:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5291:6:201"},"nodeType":"YulFunctionCall","src":"5291:34:201"},"nodeType":"YulExpressionStatement","src":"5291:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5345:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5356:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5341:3:201"},"nodeType":"YulFunctionCall","src":"5341:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"5362:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5334:6:201"},"nodeType":"YulFunctionCall","src":"5334:35:201"},"nodeType":"YulExpressionStatement","src":"5334:35:201"}]},"name":"abi_encode_tuple_t_address_t_uint256_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4983:9:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"4994:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"5002:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"5010:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5018:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5026:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5037:4:201","type":""}],"src":"4833:542:201"},{"body":{"nodeType":"YulBlock","src":"5461:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"5507:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"5516:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"5519:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"5509:6:201"},"nodeType":"YulFunctionCall","src":"5509:12:201"},"nodeType":"YulExpressionStatement","src":"5509:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"5482:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"5491:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5478:3:201"},"nodeType":"YulFunctionCall","src":"5478:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"5503:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"5474:3:201"},"nodeType":"YulFunctionCall","src":"5474:32:201"},"nodeType":"YulIf","src":"5471:52:201"},{"nodeType":"YulAssignment","src":"5532:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5548:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5542:5:201"},"nodeType":"YulFunctionCall","src":"5542:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"5532:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5427:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"5438:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"5450:6:201","type":""}],"src":"5380:184:201"}]},"contents":"{\n    { }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_addresst_contract$_IERC20_$1442t_addresst_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256t_contract$_IERC20_$1442t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n        let value_2 := calldataload(add(headStart, 96))\n        validator_revert_address(value_2)\n        value3 := value_2\n        value4 := calldataload(add(headStart, 128))\n        value5 := calldataload(add(headStart, 160))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_contract$_IERC20_$1442_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), and(value2, _1))\n        mstore(add(headStart, 96), value3)\n        mstore(add(headStart, 128), value4)\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100e5578063f18d03cc1461010d578063f2fde38b14610120578063fd59e1341461013357600080fd5b80632f436bfa1461008d57806359eba454146100b5578063715018a6146100ca5780637dc14a8e146100d2575b600080fd5b6100a061009b366004610993565b610154565b60405190151581526020015b60405180910390f35b6100c86100c33660046109c8565b61027b565b005b6100c8610393565b6100a06100e0366004610a19565b610483565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ac565b6100c861011b3660046109c8565b61059d565b6100c861012e366004610a45565b610681565b610146610141366004610a62565b610832565b6040519081526020016100ac565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146101db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6040517f7a9b2c6c000000000000000000000000000000000000000000000000000000008152600481018490526024810183905273ffffffffffffffffffffffffffffffffffffffff851690637a9b2c6c906044016020604051808303816000875af115801561024f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102739190610ac7565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d2565b6040517fe1f21c6700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015283811660248301526044820183905285169063e1f21c67906064015b600060405180830381600087803b15801561037557600080fd5b505af1158015610389573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d2565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6000805473ffffffffffffffffffffffffffffffffffffffff163314610505576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d2565b6040517f6db9241b0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff841690636db9241b906024016020604051808303816000875af1158015610572573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105969190610ac7565b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461061e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d2565b6040517fbeabacc800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015283811660248301526044820183905285169063beabacc89060640161035b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610702576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d2565b73ffffffffffffffffffffffffffffffffffffffff81166107a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d2565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000805473ffffffffffffffffffffffffffffffffffffffff1633146108b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d2565b6040517fcc1b4bf600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790528581166044830152606482018590526084820184905288169063cc1b4bf69060a4016020604051808303816000875af115801561093f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109639190610ae9565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461099057600080fd5b50565b6000806000606084860312156109a857600080fd5b83356109b38161096e565b95602085013595506040909401359392505050565b600080600080608085870312156109de57600080fd5b84356109e98161096e565b935060208501356109f98161096e565b92506040850135610a098161096e565b9396929550929360600135925050565b60008060408385031215610a2c57600080fd5b8235610a378161096e565b946020939093013593505050565b600060208284031215610a5757600080fd5b81356105968161096e565b60008060008060008060c08789031215610a7b57600080fd5b8635610a868161096e565b95506020870135610a968161096e565b9450604087013593506060870135610aad8161096e565b9598949750929560808101359460a0909101359350915050565b600060208284031215610ad957600080fd5b8151801515811461059657600080fd5b600060208284031215610afb57600080fd5b505191905056fea2646970667358221220203a67eac3f9c8a9f2237273e66de1cd4ee6f579b6ae2d765a8cc8d4b2d47b8264736f6c634300080a0033","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 0x8DA5CB5B GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xE5 JUMPI DUP1 PUSH4 0xF18D03CC EQ PUSH2 0x10D JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x120 JUMPI DUP1 PUSH4 0xFD59E134 EQ PUSH2 0x133 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x2F436BFA EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x59EBA454 EQ PUSH2 0xB5 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xCA JUMPI DUP1 PUSH4 0x7DC14A8E EQ PUSH2 0xD2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA0 PUSH2 0x9B CALLDATASIZE PUSH1 0x4 PUSH2 0x993 JUMP JUMPDEST PUSH2 0x154 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC8 PUSH2 0xC3 CALLDATASIZE PUSH1 0x4 PUSH2 0x9C8 JUMP JUMPDEST PUSH2 0x27B JUMP JUMPDEST STOP JUMPDEST PUSH2 0xC8 PUSH2 0x393 JUMP JUMPDEST PUSH2 0xA0 PUSH2 0xE0 CALLDATASIZE PUSH1 0x4 PUSH2 0xA19 JUMP JUMPDEST PUSH2 0x483 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xAC JUMP JUMPDEST PUSH2 0xC8 PUSH2 0x11B CALLDATASIZE PUSH1 0x4 PUSH2 0x9C8 JUMP JUMPDEST PUSH2 0x59D JUMP JUMPDEST PUSH2 0xC8 PUSH2 0x12E CALLDATASIZE PUSH1 0x4 PUSH2 0xA45 JUMP JUMPDEST PUSH2 0x681 JUMP JUMPDEST PUSH2 0x146 PUSH2 0x141 CALLDATASIZE PUSH1 0x4 PUSH2 0xA62 JUMP JUMPDEST PUSH2 0x832 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xAC JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1DB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x7A9B2C6C00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP4 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND SWAP1 PUSH4 0x7A9B2C6C SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x24F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x273 SWAP2 SWAP1 PUSH2 0xAC7 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x2FC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE DUP6 AND SWAP1 PUSH4 0xE1F21C67 SWAP1 PUSH1 0x64 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x375 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x389 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x414 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x505 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x6DB9241B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH4 0x6DB9241B SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x572 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x596 SWAP2 SWAP1 PUSH2 0xAC7 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x61E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xBEABACC800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE DUP6 AND SWAP1 PUSH4 0xBEABACC8 SWAP1 PUSH1 0x64 ADD PUSH2 0x35B JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x702 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1D2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x7A5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x8B4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xCC1B4BF600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP8 SWAP1 MSTORE DUP6 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD DUP6 SWAP1 MSTORE PUSH1 0x84 DUP3 ADD DUP5 SWAP1 MSTORE DUP9 AND SWAP1 PUSH4 0xCC1B4BF6 SWAP1 PUSH1 0xA4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x93F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x963 SWAP2 SWAP1 PUSH2 0xAE9 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x990 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x9A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x9B3 DUP2 PUSH2 0x96E JUMP JUMPDEST SWAP6 PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP6 POP PUSH1 0x40 SWAP1 SWAP5 ADD CALLDATALOAD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x9DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x9E9 DUP2 PUSH2 0x96E JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x9F9 DUP2 PUSH2 0x96E JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0xA09 DUP2 PUSH2 0x96E JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP3 SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xA2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0xA37 DUP2 PUSH2 0x96E 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 0xA57 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x596 DUP2 PUSH2 0x96E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH2 0xA7B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 CALLDATALOAD PUSH2 0xA86 DUP2 PUSH2 0x96E JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD PUSH2 0xA96 DUP2 PUSH2 0x96E JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP8 ADD CALLDATALOAD SWAP4 POP PUSH1 0x60 DUP8 ADD CALLDATALOAD PUSH2 0xAAD DUP2 PUSH2 0x96E JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP3 SWAP6 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP5 PUSH1 0xA0 SWAP1 SWAP2 ADD CALLDATALOAD SWAP4 POP SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x596 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 KECCAK256 GASPRICE PUSH8 0xEAC3F9C8A9F22372 PUSH20 0xE66DE1CD4EE6F579B6AE2D765A8CC8D4B2D47B82 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"507:1750:188:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1839:206;;;;;;:::i;:::-;;:::i;:::-;;;726:14:201;;719:22;701:41;;689:2;674:18;1839:206:188;;;;;;;;880:212;;;;;;:::i;:::-;;:::i;:::-;;1601:135:11;;;:::i;2099:156:188:-;;;;;;:::i;:::-;;:::i;1018:71:11:-;1056:7;1078:6;1018:71;;1078:6;;;;1837:74:201;;1825:2;1810:18;1018:71:11;1691:226:201;1146:214:188;;;;;;:::i;:::-;;:::i;1875:226:11:-;;;;;;:::i;:::-;;:::i;1414:371:188:-;;;;;;:::i;:::-;;:::i;:::-;;;3076:25:201;;;3064:2;3049:18;1414:371:188;2930:177:201;1839:206:188;1963:4;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3314:2:201;1196:67:11;;;3296:21:201;;;3333:18;;;3326:30;3392:34;3372:18;;;3365:62;3444:18;;1196:67:11;;;;;;;;;1982:58:188::1;::::0;;;;::::1;::::0;::::1;3647:25:201::0;;;3688:18;;;3681:34;;;1982:41:188::1;::::0;::::1;::::0;::::1;::::0;3620:18:201;;1982:58:188::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1975:65:::0;1839:206;-1:-1:-1;;;;1839:206:188:o;880:212::-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3314:2:201;1196:67:11;;;3296:21:201;;;3333:18;;;3326:30;3392:34;3372:18;;;3365:62;3444:18;;1196:67:11;3112:356:201;1196:67:11;1010:77:188::1;::::0;;;;:51:::1;4304:15:201::0;;;1010:77:188::1;::::0;::::1;4286:34:201::0;4356:15;;;4336:18;;;4329:43;4388:18;;;4381:34;;;1010:51:188;::::1;::::0;::::1;::::0;4198:18:201;;1010:77:188::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;880:212:::0;;;;:::o;1601:135:11:-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3314:2:201;1196:67:11;;;3296:21:201;;;3333:18;;;3326:30;3392:34;3372:18;;;3365:62;3444:18;;1196:67:11;3112:356:201;1196:67:11;1703:1:::1;1687:6:::0;;1666:40:::1;::::0;::::1;1687:6:::0;;::::1;::::0;1666:40:::1;::::0;1703:1;;1666:40:::1;1729:1;1712:19:::0;;;::::1;::::0;;1601:135::o;2099:156:188:-;2186:4;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3314:2:201;1196:67:11;;;3296:21:201;;;3333:18;;;3326:30;3392:34;3372:18;;;3365:62;3444:18;;1196:67:11;3112:356:201;1196:67:11;2205:45:188::1;::::0;;;;::::1;::::0;::::1;3076:25:201::0;;;2205:35:188::1;::::0;::::1;::::0;::::1;::::0;3049:18:201;;2205:45:188::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2198:52:::0;2099:156;-1:-1:-1;;;2099:156:188:o;1146:214::-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3314:2:201;1196:67:11;;;3296:21:201;;;3333:18;;;3326:30;3392:34;3372:18;;;3365:62;3444:18;;1196:67:11;3112:356:201;1196:67:11;1277:78:188::1;::::0;;;;:52:::1;4304:15:201::0;;;1277:78:188::1;::::0;::::1;4286:34:201::0;4356:15;;;4336:18;;;4329:43;4388:18;;;4381:34;;;1277:52:188;::::1;::::0;::::1;::::0;4198:18:201;;1277:78:188::1;4008:413:201::0;1875:226:11;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3314:2:201;1196:67:11;;;3296:21:201;;;3333:18;;;3326:30;3392:34;3372:18;;;3365:62;3444:18;;1196:67:11;3112:356:201;1196:67:11;1959:22:::1;::::0;::::1;1951:73;;;::::0;::::1;::::0;;4628:2:201;1951:73:11::1;::::0;::::1;4610:21:201::0;4667:2;4647:18;;;4640:30;4706:34;4686:18;;;4679:62;4777:8;4757:18;;;4750:36;4803:19;;1951:73:11::1;4426:402:201::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;::::1;::::0;;::::1;::::0;2056:6;::::1;::::0;2035:38:::1;::::0;::::1;2079:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1875:226::o;1414:371:188:-;1605:7;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;3314:2:201;1196:67:11;;;3296:21:201;;;3333:18;;;3326:30;3392:34;3372:18;;;3365:62;3444:18;;1196:67:11;3112:356:201;1196:67:11;1633:147:188::1;::::0;;;;:35:::1;5171:15:201::0;;;1633:147:188::1;::::0;::::1;5153:34:201::0;5203:18;;;5196:34;;;5266:15;;;5246:18;;;5239:43;5298:18;;;5291:34;;;5341:19;;;5334:35;;;1633::188;::::1;::::0;::::1;::::0;5064:19:201;;1633:147:188::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1620:160:::0;1414:371;-1:-1:-1;;;;;;;1414:371:188:o;14:154:201:-;100:42;93:5;89:54;82:5;79:65;69:93;;158:1;155;148:12;69:93;14:154;:::o;173:383::-;250:6;258;266;319:2;307:9;298:7;294:23;290:32;287:52;;;335:1;332;325:12;287:52;374:9;361:23;393:31;418:5;393:31;:::i;:::-;443:5;495:2;480:18;;467:32;;-1:-1:-1;546:2:201;531:18;;;518:32;;173:383;-1:-1:-1;;;173:383:201:o;753:613::-;854:6;862;870;878;931:3;919:9;910:7;906:23;902:33;899:53;;;948:1;945;938:12;899:53;987:9;974:23;1006:31;1031:5;1006:31;:::i;:::-;1056:5;-1:-1:-1;1113:2:201;1098:18;;1085:32;1126:33;1085:32;1126:33;:::i;:::-;1178:7;-1:-1:-1;1237:2:201;1222:18;;1209:32;1250:33;1209:32;1250:33;:::i;:::-;753:613;;;;-1:-1:-1;1302:7:201;;1356:2;1341:18;1328:32;;-1:-1:-1;;753:613:201:o;1371:315::-;1439:6;1447;1500:2;1488:9;1479:7;1475:23;1471:32;1468:52;;;1516:1;1513;1506:12;1468:52;1555:9;1542:23;1574:31;1599:5;1574:31;:::i;:::-;1624:5;1676:2;1661:18;;;;1648:32;;-1:-1:-1;;;1371:315:201:o;1922:247::-;1981:6;2034:2;2022:9;2013:7;2009:23;2005:32;2002:52;;;2050:1;2047;2040:12;2002:52;2089:9;2076:23;2108:31;2133:5;2108:31;:::i;2174:751::-;2293:6;2301;2309;2317;2325;2333;2386:3;2374:9;2365:7;2361:23;2357:33;2354:53;;;2403:1;2400;2393:12;2354:53;2442:9;2429:23;2461:31;2486:5;2461:31;:::i;:::-;2511:5;-1:-1:-1;2568:2:201;2553:18;;2540:32;2581:33;2540:32;2581:33;:::i;:::-;2633:7;-1:-1:-1;2687:2:201;2672:18;;2659:32;;-1:-1:-1;2743:2:201;2728:18;;2715:32;2756:33;2715:32;2756:33;:::i;:::-;2174:751;;;;-1:-1:-1;2174:751:201;;2862:3;2847:19;;2834:33;;2914:3;2899:19;;;2886:33;;-1:-1:-1;2174:751:201;-1:-1:-1;;2174:751:201:o;3726:277::-;3793:6;3846:2;3834:9;3825:7;3821:23;3817:32;3814:52;;;3862:1;3859;3852:12;3814:52;3894:9;3888:16;3947:5;3940:13;3933:21;3926:5;3923:32;3913:60;;3969:1;3966;3959:12;5380:184;5450:6;5503:2;5491:9;5482:7;5478:23;5474:32;5471:52;;;5519:1;5516;5509:12;5471:52;-1:-1:-1;5542:16:201;;5380:184;-1:-1:-1;5380:184:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"574400","executionCost":"infinite","totalCost":"infinite"},"external":{"approve(address,address,address,uint256)":"infinite","cancelStream(address,uint256)":"infinite","createStream(address,address,uint256,address,uint256,uint256)":"infinite","owner()":"2289","renounceOwnership()":"30171","transfer(address,address,address,uint256)":"infinite","transferOwnership(address)":"30363","withdrawFromStream(address,uint256,uint256)":"infinite"}},"methodIdentifiers":{"approve(address,address,address,uint256)":"59eba454","cancelStream(address,uint256)":"7dc14a8e","createStream(address,address,uint256,address,uint256,uint256)":"fd59e134","owner()":"8da5cb5b","renounceOwnership()":"715018a6","transfer(address,address,address,uint256)":"f18d03cc","transferOwnership(address)":"f2fde38b","withdrawFromStream(address,uint256,uint256)":"2f436bfa"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"aaveGovShortTimelock\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"cancelStream\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stopTime\",\"type\":\"uint256\"}],\"name\":\"createStream\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"funds\",\"type\":\"uint256\"}],\"name\":\"withdrawFromStream\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approve(address,address,address,uint256)\":{\"params\":{\"amount\":\"Allowance to approve*\",\"collector\":\"The collector contract with funds (Aave ecosystem reserve)\",\"recipient\":\"Allowance's recipient\",\"token\":\"The asset address\"}},\"cancelStream(address,uint256)\":{\"params\":{\"collector\":\"The collector contract with funds (Aave ecosystem reserve)\",\"streamId\":\"The id of the stream to cancel\"},\"returns\":{\"_0\":\"bool If the cancellation happened correctly*\"}},\"constructor\":{\"params\":{\"aaveGovShortTimelock\":\"The address of the Aave's governance executor, owning this contract\"}},\"createStream(address,address,uint256,address,uint256,uint256)\":{\"params\":{\"collector\":\"The collector contract with funds (Aave ecosystem reserve)\",\"deposit\":\"Total amount to be streamed\",\"recipient\":\"The recipient of the stream of token\",\"startTime\":\"The unix timestamp for when the stream starts\",\"stopTime\":\"The unix timestamp for when the stream stops\",\"tokenAddress\":\"The ERC20 token to use as streaming asset\"},\"returns\":{\"_0\":\"uint256 The stream id created*\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transfer(address,address,address,uint256)\":{\"params\":{\"amount\":\"Amount to transfer*\",\"collector\":\"The collector contract with funds (Aave ecosystem reserve)\",\"recipient\":\"Transfer's recipient\",\"token\":\"The asset address\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"withdrawFromStream(address,uint256,uint256)\":{\"params\":{\"collector\":\"The collector contract with funds (Aave ecosystem reserve)\",\"funds\":\"Amount to withdraw\",\"streamId\":\"The id of the stream to withdraw tokens from\"},\"returns\":{\"_0\":\"bool If the withdrawal finished properly*\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approve(address,address,address,uint256)\":{\"notice\":\"Proxy function for ERC20's approve(), pointing to a specific collector contract\"},\"cancelStream(address,uint256)\":{\"notice\":\"Proxy function to cancel a stream of token on a specific collector contract\"},\"constructor\":{\"notice\":\"Constructor.\"},\"createStream(address,address,uint256,address,uint256,uint256)\":{\"notice\":\"Proxy function to create a stream of token on a specific collector contract\"},\"transfer(address,address,address,uint256)\":{\"notice\":\"Proxy function for ERC20's transfer(), pointing to a specific collector contract\"},\"withdrawFromStream(address,uint256,uint256)\":{\"notice\":\"Proxy function to withdraw from a stream of token on a specific collector contract\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/treasury/AaveEcosystemReserveController.sol\":\"AaveEcosystemReserveController\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable is Context {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial owner.\\n   */\\n  constructor() {\\n    address msgSender = _msgSender();\\n    _owner = msgSender;\\n    emit OwnershipTransferred(address(0), msgSender);\\n  }\\n\\n  /**\\n   * @dev Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Leaves the contract without owner. It will not be possible to call\\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\\n   *\\n   * NOTE: Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public virtual onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = address(0);\\n  }\\n\\n  /**\\n   * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function transferOwnership(address newOwner) public virtual onlyOwner {\\n    require(newOwner != address(0), 'Ownable: new owner is the zero address');\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\",\"keccak256\":\"0x3ce185c4f579e32006f8893dbfdc1b5d878c0e2cafd1508f7ceb081698bc81f9\",\"license\":\"MIT\"},\"contracts/treasury/AaveEcosystemReserveController.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.10;\\n\\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\\nimport {IStreamable} from './interfaces/IStreamable.sol';\\nimport {IAdminControlledEcosystemReserve} from './interfaces/IAdminControlledEcosystemReserve.sol';\\nimport {IAaveEcosystemReserveController} from './interfaces/IAaveEcosystemReserveController.sol';\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\n\\ncontract AaveEcosystemReserveController is Ownable, IAaveEcosystemReserveController {\\n  /**\\n   * @notice Constructor.\\n   * @param aaveGovShortTimelock The address of the Aave's governance executor, owning this contract\\n   */\\n  constructor(address aaveGovShortTimelock) {\\n    transferOwnership(aaveGovShortTimelock);\\n  }\\n\\n  /// @inheritdoc IAaveEcosystemReserveController\\n  function approve(\\n    address collector,\\n    IERC20 token,\\n    address recipient,\\n    uint256 amount\\n  ) external onlyOwner {\\n    IAdminControlledEcosystemReserve(collector).approve(token, recipient, amount);\\n  }\\n\\n  /// @inheritdoc IAaveEcosystemReserveController\\n  function transfer(\\n    address collector,\\n    IERC20 token,\\n    address recipient,\\n    uint256 amount\\n  ) external onlyOwner {\\n    IAdminControlledEcosystemReserve(collector).transfer(token, recipient, amount);\\n  }\\n\\n  /// @inheritdoc IAaveEcosystemReserveController\\n  function createStream(\\n    address collector,\\n    address recipient,\\n    uint256 deposit,\\n    IERC20 tokenAddress,\\n    uint256 startTime,\\n    uint256 stopTime\\n  ) external onlyOwner returns (uint256) {\\n    return\\n      IStreamable(collector).createStream(\\n        recipient,\\n        deposit,\\n        address(tokenAddress),\\n        startTime,\\n        stopTime\\n      );\\n  }\\n\\n  /// @inheritdoc IAaveEcosystemReserveController\\n  function withdrawFromStream(\\n    address collector,\\n    uint256 streamId,\\n    uint256 funds\\n  ) external onlyOwner returns (bool) {\\n    return IStreamable(collector).withdrawFromStream(streamId, funds);\\n  }\\n\\n  /// @inheritdoc IAaveEcosystemReserveController\\n  function cancelStream(address collector, uint256 streamId) external onlyOwner returns (bool) {\\n    return IStreamable(collector).cancelStream(streamId);\\n  }\\n}\\n\",\"keccak256\":\"0x1e8230b1127a72125cf35540420c7a686417773e950b00b9d064bb3b7e5bf6e5\",\"license\":\"MIT\"},\"contracts/treasury/interfaces/IAaveEcosystemReserveController.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\n\\ninterface IAaveEcosystemReserveController {\\n  /**\\n   * @notice Proxy function for ERC20's approve(), pointing to a specific collector contract\\n   * @param collector The collector contract with funds (Aave ecosystem reserve)\\n   * @param token The asset address\\n   * @param recipient Allowance's recipient\\n   * @param amount Allowance to approve\\n   **/\\n  function approve(address collector, IERC20 token, address recipient, uint256 amount) external;\\n\\n  /**\\n   * @notice Proxy function for ERC20's transfer(), pointing to a specific collector contract\\n   * @param collector The collector contract with funds (Aave ecosystem reserve)\\n   * @param token The asset address\\n   * @param recipient Transfer's recipient\\n   * @param amount Amount to transfer\\n   **/\\n  function transfer(address collector, IERC20 token, address recipient, uint256 amount) external;\\n\\n  /**\\n   * @notice Proxy function to create a stream of token on a specific collector contract\\n   * @param collector The collector contract with funds (Aave ecosystem reserve)\\n   * @param recipient The recipient of the stream of token\\n   * @param deposit Total amount to be streamed\\n   * @param tokenAddress The ERC20 token to use as streaming asset\\n   * @param startTime The unix timestamp for when the stream starts\\n   * @param stopTime The unix timestamp for when the stream stops\\n   * @return uint256 The stream id created\\n   **/\\n  function createStream(\\n    address collector,\\n    address recipient,\\n    uint256 deposit,\\n    IERC20 tokenAddress,\\n    uint256 startTime,\\n    uint256 stopTime\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Proxy function to withdraw from a stream of token on a specific collector contract\\n   * @param collector The collector contract with funds (Aave ecosystem reserve)\\n   * @param streamId The id of the stream to withdraw tokens from\\n   * @param funds Amount to withdraw\\n   * @return bool If the withdrawal finished properly\\n   **/\\n  function withdrawFromStream(\\n    address collector,\\n    uint256 streamId,\\n    uint256 funds\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Proxy function to cancel a stream of token on a specific collector contract\\n   * @param collector The collector contract with funds (Aave ecosystem reserve)\\n   * @param streamId The id of the stream to cancel\\n   * @return bool If the cancellation happened correctly\\n   **/\\n  function cancelStream(address collector, uint256 streamId) external returns (bool);\\n}\\n\",\"keccak256\":\"0xdaf4bf475ee596cd5fdb2553dbbed0cb72b8a21be7ae14c25a37333fa58229ac\",\"license\":\"MIT\"},\"contracts/treasury/interfaces/IAdminControlledEcosystemReserve.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\n\\ninterface IAdminControlledEcosystemReserve {\\n  /** @notice Emitted when the funds admin changes\\n   * @param fundsAdmin The new funds admin\\n   **/\\n  event NewFundsAdmin(address indexed fundsAdmin);\\n\\n  /** @notice Returns the mock ETH reference address\\n   * @return address The address\\n   **/\\n  function ETH_MOCK_ADDRESS() external pure returns (address);\\n\\n  /**\\n   * @notice Return the funds admin, only entity to be able to interact with this contract (controller of reserve)\\n   * @return address The address of the funds admin\\n   **/\\n  function getFundsAdmin() external view returns (address);\\n\\n  /**\\n   * @dev Function for the funds admin to give ERC20 allowance to other parties\\n   * @param token The address of the token to give allowance from\\n   * @param recipient Allowance's recipient\\n   * @param amount Allowance to approve\\n   **/\\n  function approve(IERC20 token, address recipient, uint256 amount) external;\\n\\n  /**\\n   * @notice Function for the funds admin to transfer ERC20 tokens to other parties\\n   * @param token The address of the token to transfer\\n   * @param recipient Transfer's recipient\\n   * @param amount Amount to transfer\\n   **/\\n  function transfer(IERC20 token, address recipient, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0xe826cd01ee12902faac76b8ee3f26745f08134a5c7610d111605cae74a5e3268\",\"license\":\"GPL-3.0\"},\"contracts/treasury/interfaces/IStreamable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.10;\\n\\ninterface IStreamable {\\n  struct Stream {\\n    uint256 deposit;\\n    uint256 ratePerSecond;\\n    uint256 remainingBalance;\\n    uint256 startTime;\\n    uint256 stopTime;\\n    address recipient;\\n    address sender;\\n    address tokenAddress;\\n    bool isEntity;\\n  }\\n\\n  event CreateStream(\\n    uint256 indexed streamId,\\n    address indexed sender,\\n    address indexed recipient,\\n    uint256 deposit,\\n    address tokenAddress,\\n    uint256 startTime,\\n    uint256 stopTime\\n  );\\n\\n  event WithdrawFromStream(uint256 indexed streamId, address indexed recipient, uint256 amount);\\n\\n  event CancelStream(\\n    uint256 indexed streamId,\\n    address indexed sender,\\n    address indexed recipient,\\n    uint256 senderBalance,\\n    uint256 recipientBalance\\n  );\\n\\n  function balanceOf(uint256 streamId, address who) external view returns (uint256 balance);\\n\\n  function getStream(\\n    uint256 streamId\\n  )\\n    external\\n    view\\n    returns (\\n      address sender,\\n      address recipient,\\n      uint256 deposit,\\n      address token,\\n      uint256 startTime,\\n      uint256 stopTime,\\n      uint256 remainingBalance,\\n      uint256 ratePerSecond\\n    );\\n\\n  function createStream(\\n    address recipient,\\n    uint256 deposit,\\n    address tokenAddress,\\n    uint256 startTime,\\n    uint256 stopTime\\n  ) external returns (uint256 streamId);\\n\\n  function withdrawFromStream(uint256 streamId, uint256 funds) external returns (bool);\\n\\n  function cancelStream(uint256 streamId) external returns (bool);\\n\\n  function initialize(address fundsAdmin) external;\\n}\\n\",\"keccak256\":\"0xe4e14f0dc7e4ffdec867f6b547afa37be968d1f293b57a75ff39eafb09c4d37e\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1472,"contract":"contracts/treasury/AaveEcosystemReserveController.sol:AaveEcosystemReserveController","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{"approve(address,address,address,uint256)":{"notice":"Proxy function for ERC20's approve(), pointing to a specific collector contract"},"cancelStream(address,uint256)":{"notice":"Proxy function to cancel a stream of token on a specific collector contract"},"constructor":{"notice":"Constructor."},"createStream(address,address,uint256,address,uint256,uint256)":{"notice":"Proxy function to create a stream of token on a specific collector contract"},"transfer(address,address,address,uint256)":{"notice":"Proxy function for ERC20's transfer(), pointing to a specific collector contract"},"withdrawFromStream(address,uint256,uint256)":{"notice":"Proxy function to withdraw from a stream of token on a specific collector contract"}},"version":1}}},"contracts/treasury/AaveEcosystemReserveV2.sol":{"AaveEcosystemReserveV2":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"streamId","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"senderBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"recipientBalance","type":"uint256"}],"name":"CancelStream","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"streamId","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"deposit","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stopTime","type":"uint256"}],"name":"CreateStream","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fundsAdmin","type":"address"}],"name":"NewFundsAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"streamId","type":"uint256"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawFromStream","type":"event"},{"inputs":[],"name":"ETH_MOCK_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"},{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}],"name":"cancelStream","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deposit","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"stopTime","type":"uint256"}],"name":"createStream","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}],"name":"deltaOf","outputs":[{"internalType":"uint256","name":"delta","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFundsAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextStreamId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}],"name":"getStream","outputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deposit","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"stopTime","type":"uint256"},{"internalType":"uint256","name":"remainingBalance","type":"uint256"},{"internalType":"uint256","name":"ratePerSecond","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fundsAdmin","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawFromStream","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"author":"BGD Labs*","kind":"dev","methods":{"approve(address,address,uint256)":{"details":"Function for the funds admin to give ERC20 allowance to other parties","params":{"amount":"Allowance to approve*","recipient":"Allowance's recipient","token":"The address of the token to give allowance from"}},"balanceOf(uint256,address)":{"details":"Throws if the id does not point to a valid stream.","params":{"streamId":"The id of the stream for which to query the balance.","who":"The address for which to query the balance."}},"cancelStream(uint256)":{"details":"Throws if the id does not point to a valid stream.  Throws if the caller is not the funds admin or the recipient of the stream.  Throws if there is a token transfer failure.","params":{"streamId":"The id of the stream to cancel."}},"createStream(address,uint256,address,uint256,uint256)":{"details":"Throws if the recipient is the zero address, the contract itself or the caller.  Throws if the deposit is 0.  Throws if the start time is before `block.timestamp`.  Throws if the stop time is before the start time.  Throws if the duration calculation has a math error.  Throws if the deposit is smaller than the duration.  Throws if the deposit is not a multiple of the duration.  Throws if the rate calculation has a math error.  Throws if the next stream id calculation has a math error.  Throws if the contract is not allowed to transfer enough tokens.  Throws if there is a token transfer failure.","params":{"deposit":"The amount of money to be streamed.","recipient":"The address towards which the money is streamed.","startTime":"The unix timestamp for when the stream starts.","stopTime":"The unix timestamp for when the stream stops.","tokenAddress":"The ERC20 token to use as streaming currency."}},"deltaOf(uint256)":{"details":"Throws if the id does not point to a valid stream.","params":{"streamId":"The id of the stream for which to query the delta."}},"getFundsAdmin()":{"returns":{"_0":"address The address of the funds admin*"}},"getStream(uint256)":{"details":"Throws if the id does not point to a valid stream.","params":{"streamId":"The id of the stream to query."}},"transfer(address,address,uint256)":{"params":{"amount":"Amount to transfer*","recipient":"Transfer's recipient","token":"The address of the token to transfer"}},"withdrawFromStream(uint256,uint256)":{"details":"Throws if the id does not point to a valid stream.  Throws if the caller is not the funds admin or the recipient of the stream.  Throws if the amount exceeds the available balance.  Throws if there is a token transfer failure.","params":{"amount":"The amount of tokens to withdraw.","streamId":"The id of the stream to withdraw tokens from."}}},"title":"AaveEcosystemReserve v2","version":1},"evm":{"bytecode":{"functionDebugData":{"@_41869":{"entryPoint":null,"id":41869,"parameterSlots":0,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"60806040526000805534801561001457600080fd5b506001603455612210806100296000396000f3fe6080604052600436106100d65760003560e01c8063894e9a0d1161007f578063c4d66de811610059578063c4d66de8146102a4578063cc1b4bf6146102c4578063dde43cba146102e4578063e1f21c67146102f957600080fd5b8063894e9a0d146101ea578063a82ccd4d14610262578063beabacc81461028257600080fd5b806351ee886b116100b057806351ee886b146101725780636db9241b1461019a5780637a9b2c6c146101ca57600080fd5b806306bc2ee0146100e25780630932f92b146101335780633656eec21461015257600080fd5b366100dd57005b600080fd5b3480156100ee57600080fd5b5060335473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561013f57600080fd5b506035545b60405190815260200161012a565b34801561015e57600080fd5b5061014461016d366004611ed4565b610319565b34801561017e57600080fd5b5061010973eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b3480156101a657600080fd5b506101ba6101b5366004611f04565b610559565b604051901515815260200161012a565b3480156101d657600080fd5b506101ba6101e5366004611f1d565b61090a565b3480156101f657600080fd5b5061020a610205366004611f04565b610d72565b6040805173ffffffffffffffffffffffffffffffffffffffff998a1681529789166020890152870195909552959092166060850152608084015260a083015260c082019290925260e08101919091526101000161012a565b34801561026e57600080fd5b5061014461027d366004611f04565b610e58565b34801561028e57600080fd5b506102a261029d366004611f3f565b610fd2565b005b3480156102b057600080fd5b506102a26102bf366004611f80565b611114565b3480156102d057600080fd5b506101446102df366004611f9d565b6111a7565b3480156102f057600080fd5b50610144600181565b34801561030557600080fd5b506102a2610314366004611f3f565b6117b0565b600082815260366020526040812060070154839074010000000000000000000000000000000000000000900460ff166103995760405162461bcd60e51b815260206004820152601560248201527f73747265616d20646f6573206e6f74206578697374000000000000000000000060448201526064015b60405180910390fd5b600084815260366020908152604080832081516101208101835281548152600182015481850152600282015481840152600382015460608083019190915260048301546080830152600583015473ffffffffffffffffffffffffffffffffffffffff90811660a08401526006840154811660c084015260079093015492831660e08301527401000000000000000000000000000000000000000090920460ff161515610100820152825191820183528482529281018490529081019290925290600061046487610e58565b9050826020015181610476919061201e565b82526040830151835111156104ac5760408301518351610496919061205b565b6020830181905282516104a9919061205b565b82525b8260a0015173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156104ef57505192506105529050565b8260c0015173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141561054a5781516040840151610538919061205b565b60409092018290525092506105529050565b600094505050505b5092915050565b6000600260345414156105ae5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610390565b6002603455600082815260366020526040902060070154829074010000000000000000000000000000000000000000900460ff1661062e5760405162461bcd60e51b815260206004820152601560248201527f73747265616d20646f6573206e6f7420657869737400000000000000000000006044820152606401610390565b603354839073ffffffffffffffffffffffffffffffffffffffff1633148061067c575060008181526036602052604090206005015473ffffffffffffffffffffffffffffffffffffffff1633145b6106ee5760405162461bcd60e51b815260206004820152603c60248201527f63616c6c6572206973206e6f74207468652066756e64732061646d696e206f7260448201527f2074686520726563697069656e74206f66207468652073747265616d000000006064820152608401610390565b6000848152603660209081526040808320815161012081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015473ffffffffffffffffffffffffffffffffffffffff90811660a08401526006820154811660c0840181905260079092015490811660e084015274010000000000000000000000000000000000000000900460ff1615156101008301529091906107a7908790610319565b905060006107b9878460a00151610319565b600088815260366020526040812081815560018101829055600281018290556003810182905560048101919091556005810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116909155600682018054909116905560070180547fffffffffffffffffffffff00000000000000000000000000000000000000000016905560e0840151909150811561087d5760a084015161087d9073ffffffffffffffffffffffffffffffffffffffff83169084611838565b8360a0015173ffffffffffffffffffffffffffffffffffffffff168460c0015173ffffffffffffffffffffffffffffffffffffffff16897fca3e6079b726e7728802a0537949e2d1c7762304fa641fb06eb56daf2ba8c6b986866040516108ee929190918252602082015260400190565b60405180910390a4600196505050505050506001603455919050565b60006002603454141561095f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610390565b6002603455600083815260366020526040902060070154839074010000000000000000000000000000000000000000900460ff166109df5760405162461bcd60e51b815260206004820152601560248201527f73747265616d20646f6573206e6f7420657869737400000000000000000000006044820152606401610390565b603354849073ffffffffffffffffffffffffffffffffffffffff16331480610a2d575060008181526036602052604090206005015473ffffffffffffffffffffffffffffffffffffffff1633145b610a9f5760405162461bcd60e51b815260206004820152603c60248201527f63616c6c6572206973206e6f74207468652066756e64732061646d696e206f7260448201527f2074686520726563697069656e74206f66207468652073747265616d000000006064820152608401610390565b60008411610aef5760405162461bcd60e51b815260206004820152600e60248201527f616d6f756e74206973207a65726f0000000000000000000000000000000000006044820152606401610390565b6000858152603660209081526040808320815161012081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015473ffffffffffffffffffffffffffffffffffffffff90811660a084018190526006830154821660c085015260079092015490811660e084015274010000000000000000000000000000000000000000900460ff161515610100830152909190610ba8908890610319565b905085811015610c1f5760405162461bcd60e51b8152602060048201526024808201527f616d6f756e7420657863656564732074686520617661696c61626c652062616c60448201527f616e6365000000000000000000000000000000000000000000000000000000006064820152608401610390565b858260400151610c2f919061205b565b6000888152603660205260409020600201819055610cd757600087815260366020526040812081815560018101829055600281018290556003810182905560048101919091556005810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116909155600682018054909116905560070180547fffffffffffffffffffffff0000000000000000000000000000000000000000001690555b610d0a8260a00151878460e0015173ffffffffffffffffffffffffffffffffffffffff166118389092919063ffffffff16565b8160a0015173ffffffffffffffffffffffffffffffffffffffff16877f36c3ab437e6a424ed25dc4bfdeb62706aa06558660fab2dab229d2555adaf89c88604051610d5791815260200190565b60405180910390a36001945050505050600160345592915050565b600080600080600080600080886036600082815260200190815260200160002060070160149054906101000a900460ff16610def5760405162461bcd60e51b815260206004820152601560248201527f73747265616d20646f6573206e6f7420657869737400000000000000000000006044820152606401610390565b50505060009687525050603660205250506040909220600681015460058201548254600784015460038501546004860154600287015460019097015473ffffffffffffffffffffffffffffffffffffffff9687169a958716995093975091909416949092909190565b600081815260366020526040812060070154829074010000000000000000000000000000000000000000900460ff16610ed35760405162461bcd60e51b815260206004820152601560248201527f73747265616d20646f6573206e6f7420657869737400000000000000000000006044820152606401610390565b6000838152603660209081526040918290208251610120810184528154815260018201549281019290925260028101549282019290925260038201546060820181905260048301546080830152600583015473ffffffffffffffffffffffffffffffffffffffff90811660a08401526006840154811660c084015260079093015492831660e08301527401000000000000000000000000000000000000000090920460ff161515610100820152904211610f91576000925050610fcc565b8060800151421015610fb4576060810151610fac904261205b565b925050610fcc565b80606001518160800151610fc8919061205b565b9250505b50919050565b60335473ffffffffffffffffffffffffffffffffffffffff1633146110395760405162461bcd60e51b815260206004820152601360248201527f4f4e4c595f42595f46554e44535f41444d494e000000000000000000000000006044820152606401610390565b73ffffffffffffffffffffffffffffffffffffffff821661109c5760405162461bcd60e51b815260206004820152601460248201527f494e56414c49445f30585f524543495049454e540000000000000000000000006044820152606401610390565b73ffffffffffffffffffffffffffffffffffffffff831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156110f3576110ee73ffffffffffffffffffffffffffffffffffffffff83168261190c565b505050565b6110ee73ffffffffffffffffffffffffffffffffffffffff84168383611838565b600054600190811161118e5760405162461bcd60e51b815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610390565b6000819055620186a06035556111a382611a32565b5050565b60335460009073ffffffffffffffffffffffffffffffffffffffff1633146112115760405162461bcd60e51b815260206004820152601360248201527f4f4e4c595f42595f46554e44535f41444d494e000000000000000000000000006044820152606401610390565b73ffffffffffffffffffffffffffffffffffffffff86166112745760405162461bcd60e51b815260206004820152601a60248201527f73747265616d20746f20746865207a65726f20616464726573730000000000006044820152606401610390565b73ffffffffffffffffffffffffffffffffffffffff86163014156112da5760405162461bcd60e51b815260206004820152601d60248201527f73747265616d20746f2074686520636f6e747261637420697473656c660000006044820152606401610390565b73ffffffffffffffffffffffffffffffffffffffff86163314156113405760405162461bcd60e51b815260206004820152601460248201527f73747265616d20746f207468652063616c6c65720000000000000000000000006044820152606401610390565b600085116113905760405162461bcd60e51b815260206004820152600f60248201527f6465706f736974206973207a65726f00000000000000000000000000000000006044820152606401610390565b428310156114065760405162461bcd60e51b815260206004820152602160248201527f73746172742074696d65206265666f726520626c6f636b2e74696d657374616d60448201527f70000000000000000000000000000000000000000000000000000000000000006064820152608401610390565b8282116114555760405162461bcd60e51b815260206004820152601f60248201527f73746f702074696d65206265666f7265207468652073746172742074696d65006044820152606401610390565b6040805180820190915260008082526020820152611473848461205b565b8082528610156114c55760405162461bcd60e51b815260206004820152601f60248201527f6465706f73697420736d616c6c6572207468616e2074696d652064656c7461006044820152606401610390565b80516114d190876120a1565b156115445760405162461bcd60e51b815260206004820152602260248201527f6465706f736974206e6f74206d756c7469706c65206f662074696d652064656c60448201527f74610000000000000000000000000000000000000000000000000000000000006064820152608401610390565b805161155090876120b5565b81602001818152505060006035549050604051806101200160405280888152602001836020015181526020018881526020018681526020018581526020018973ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020016001151581525060366000838152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060c08201518160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060e08201518160070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101008201518160070160146101000a81548160ff0219169083151502179055509050506035600081548092919061173a906120c9565b90915550506040805188815273ffffffffffffffffffffffffffffffffffffffff88811660208301529181018790526060810186905290891690309083907f7b01d409597969366dc268d7f957a990d1ca3d3449baf8fb45db67351aecfe789060800160405180910390a4979650505050505050565b60335473ffffffffffffffffffffffffffffffffffffffff1633146118175760405162461bcd60e51b815260206004820152601360248201527f4f4e4c595f42595f46554e44535f41444d494e000000000000000000000000006044820152606401610390565b6110ee73ffffffffffffffffffffffffffffffffffffffff84168383611aa1565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526110ee9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611c09565b8047101561195c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610390565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146119b6576040519150601f19603f3d011682016040523d82523d6000602084013e6119bb565b606091505b50509050806110ee5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610390565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f1ab77a654795da4cfe37c33188e862203ade9a5c7f1a9d4957669b3ccbec9e1190600090a250565b801580611b4157506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3f9190612102565b155b611bb35760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610390565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526110ee9084907f095ea7b3000000000000000000000000000000000000000000000000000000009060640161188a565b6000611c6b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611cfb9092919063ffffffff16565b8051909150156110ee5780806020019051810190611c89919061211b565b6110ee5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610390565b6060611d0a8484600085611d14565b90505b9392505050565b606082471015611d8c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610390565b73ffffffffffffffffffffffffffffffffffffffff85163b611df05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610390565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611e19919061216d565b60006040518083038185875af1925050503d8060008114611e56576040519150601f19603f3d011682016040523d82523d6000602084013e611e5b565b606091505b5091509150611e6b828286611e76565b979650505050505050565b60608315611e85575081611d0d565b825115611e955782518084602001fd5b8160405162461bcd60e51b81526004016103909190612189565b73ffffffffffffffffffffffffffffffffffffffff81168114611ed157600080fd5b50565b60008060408385031215611ee757600080fd5b823591506020830135611ef981611eaf565b809150509250929050565b600060208284031215611f1657600080fd5b5035919050565b60008060408385031215611f3057600080fd5b50508035926020909101359150565b600080600060608486031215611f5457600080fd5b8335611f5f81611eaf565b92506020840135611f6f81611eaf565b929592945050506040919091013590565b600060208284031215611f9257600080fd5b8135611d0d81611eaf565b600080600080600060a08688031215611fb557600080fd5b8535611fc081611eaf565b9450602086013593506040860135611fd781611eaf565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561205657612056611fef565b500290565b60008282101561206d5761206d611fef565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826120b0576120b0612072565b500690565b6000826120c4576120c4612072565b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156120fb576120fb611fef565b5060010190565b60006020828403121561211457600080fd5b5051919050565b60006020828403121561212d57600080fd5b81518015158114611d0d57600080fd5b60005b83811015612158578181015183820152602001612140565b83811115612167576000848401525b50505050565b6000825161217f81846020870161213d565b9190910192915050565b60208152600082518060208401526121a881604085016020870161213d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212203dc8ac7b1914adaee70356e637996e0969ddab8c6e7017887e42a5a97c92861b64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x34 SSTORE PUSH2 0x2210 DUP1 PUSH2 0x29 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xD6 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x894E9A0D GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xC4D66DE8 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x2A4 JUMPI DUP1 PUSH4 0xCC1B4BF6 EQ PUSH2 0x2C4 JUMPI DUP1 PUSH4 0xDDE43CBA EQ PUSH2 0x2E4 JUMPI DUP1 PUSH4 0xE1F21C67 EQ PUSH2 0x2F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x894E9A0D EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0xA82CCD4D EQ PUSH2 0x262 JUMPI DUP1 PUSH4 0xBEABACC8 EQ PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x51EE886B GT PUSH2 0xB0 JUMPI DUP1 PUSH4 0x51EE886B EQ PUSH2 0x172 JUMPI DUP1 PUSH4 0x6DB9241B EQ PUSH2 0x19A JUMPI DUP1 PUSH4 0x7A9B2C6C EQ PUSH2 0x1CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6BC2EE0 EQ PUSH2 0xE2 JUMPI DUP1 PUSH4 0x932F92B EQ PUSH2 0x133 JUMPI DUP1 PUSH4 0x3656EEC2 EQ PUSH2 0x152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0xDD JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x33 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x35 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x15E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x16D CALLDATASIZE PUSH1 0x4 PUSH2 0x1ED4 JUMP JUMPDEST PUSH2 0x319 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x17E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x109 PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH2 0x1B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F04 JUMP JUMPDEST PUSH2 0x559 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH2 0x1E5 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F1D JUMP JUMPDEST PUSH2 0x90A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x20A PUSH2 0x205 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F04 JUMP JUMPDEST PUSH2 0xD72 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP10 DUP11 AND DUP2 MSTORE SWAP8 DUP10 AND PUSH1 0x20 DUP10 ADD MSTORE DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP6 SWAP1 SWAP3 AND PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xE0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x100 ADD PUSH2 0x12A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x27D CALLDATASIZE PUSH1 0x4 PUSH2 0x1F04 JUMP JUMPDEST PUSH2 0xE58 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x28E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A2 PUSH2 0x29D CALLDATASIZE PUSH1 0x4 PUSH2 0x1F3F JUMP JUMPDEST PUSH2 0xFD2 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A2 PUSH2 0x2BF CALLDATASIZE PUSH1 0x4 PUSH2 0x1F80 JUMP JUMPDEST PUSH2 0x1114 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x2DF CALLDATASIZE PUSH1 0x4 PUSH2 0x1F9D JUMP JUMPDEST PUSH2 0x11A7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH1 0x1 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x305 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A2 PUSH2 0x314 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F3F JUMP JUMPDEST PUSH2 0x17B0 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x7 ADD SLOAD DUP4 SWAP1 PUSH21 0x10000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x399 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73747265616D20646F6573206E6F742065786973740000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH2 0x120 DUP2 ADD DUP4 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD DUP2 DUP6 ADD MSTORE PUSH1 0x2 DUP3 ADD SLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP4 ADD SLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x5 DUP4 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP5 ADD SLOAD DUP2 AND PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 SWAP1 SWAP4 ADD SLOAD SWAP3 DUP4 AND PUSH1 0xE0 DUP4 ADD MSTORE PUSH21 0x10000000000000000000000000000000000000000 SWAP1 SWAP3 DIV PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x100 DUP3 ADD MSTORE DUP3 MLOAD SWAP2 DUP3 ADD DUP4 MSTORE DUP5 DUP3 MSTORE SWAP3 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 PUSH1 0x0 PUSH2 0x464 DUP8 PUSH2 0xE58 JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x20 ADD MLOAD DUP2 PUSH2 0x476 SWAP2 SWAP1 PUSH2 0x201E JUMP JUMPDEST DUP3 MSTORE PUSH1 0x40 DUP4 ADD MLOAD DUP4 MLOAD GT ISZERO PUSH2 0x4AC JUMPI PUSH1 0x40 DUP4 ADD MLOAD DUP4 MLOAD PUSH2 0x496 SWAP2 SWAP1 PUSH2 0x205B JUMP JUMPDEST PUSH1 0x20 DUP4 ADD DUP2 SWAP1 MSTORE DUP3 MLOAD PUSH2 0x4A9 SWAP2 SWAP1 PUSH2 0x205B JUMP JUMPDEST DUP3 MSTORE JUMPDEST DUP3 PUSH1 0xA0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x4EF JUMPI POP MLOAD SWAP3 POP PUSH2 0x552 SWAP1 POP JUMP JUMPDEST DUP3 PUSH1 0xC0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x54A JUMPI DUP2 MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x538 SWAP2 SWAP1 PUSH2 0x205B JUMP JUMPDEST PUSH1 0x40 SWAP1 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP3 POP PUSH2 0x552 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SWAP5 POP POP POP POP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 PUSH1 0x34 SLOAD EQ ISZERO PUSH2 0x5AE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x34 SSTORE PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x7 ADD SLOAD DUP3 SWAP1 PUSH21 0x10000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x62E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73747265616D20646F6573206E6F742065786973740000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x33 SLOAD DUP4 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ DUP1 PUSH2 0x67C JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ JUMPDEST PUSH2 0x6EE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x63616C6C6572206973206E6F74207468652066756E64732061646D696E206F72 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x2074686520726563697069656E74206F66207468652073747265616D00000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH2 0x120 DUP2 ADD DUP4 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 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 DUP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD DUP2 AND PUSH1 0xC0 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x7 SWAP1 SWAP3 ADD SLOAD SWAP1 DUP2 AND PUSH1 0xE0 DUP5 ADD MSTORE PUSH21 0x10000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x100 DUP4 ADD MSTORE SWAP1 SWAP2 SWAP1 PUSH2 0x7A7 SWAP1 DUP8 SWAP1 PUSH2 0x319 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x7B9 DUP8 DUP5 PUSH1 0xA0 ADD MLOAD PUSH2 0x319 JUMP JUMPDEST PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x5 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x6 DUP3 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE PUSH1 0x7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0xE0 DUP5 ADD MLOAD SWAP1 SWAP2 POP DUP2 ISZERO PUSH2 0x87D JUMPI PUSH1 0xA0 DUP5 ADD MLOAD PUSH2 0x87D SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 DUP5 PUSH2 0x1838 JUMP JUMPDEST DUP4 PUSH1 0xA0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH1 0xC0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH32 0xCA3E6079B726E7728802A0537949E2D1C7762304FA641FB06EB56DAF2BA8C6B9 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x8EE SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x1 SWAP7 POP POP POP POP POP POP POP PUSH1 0x1 PUSH1 0x34 SSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 PUSH1 0x34 SLOAD EQ ISZERO PUSH2 0x95F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x34 SSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x7 ADD SLOAD DUP4 SWAP1 PUSH21 0x10000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x9DF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73747265616D20646F6573206E6F742065786973740000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x33 SLOAD DUP5 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ DUP1 PUSH2 0xA2D JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ JUMPDEST PUSH2 0xA9F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x63616C6C6572206973206E6F74207468652066756E64732061646D696E206F72 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x2074686520726563697069656E74206F66207468652073747265616D00000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x0 DUP5 GT PUSH2 0xAEF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616D6F756E74206973207A65726F000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH2 0x120 DUP2 ADD DUP4 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 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 DUP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0xA0 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x6 DUP4 ADD SLOAD DUP3 AND PUSH1 0xC0 DUP6 ADD MSTORE PUSH1 0x7 SWAP1 SWAP3 ADD SLOAD SWAP1 DUP2 AND PUSH1 0xE0 DUP5 ADD MSTORE PUSH21 0x10000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x100 DUP4 ADD MSTORE SWAP1 SWAP2 SWAP1 PUSH2 0xBA8 SWAP1 DUP9 SWAP1 PUSH2 0x319 JUMP JUMPDEST SWAP1 POP DUP6 DUP2 LT ISZERO PUSH2 0xC1F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x616D6F756E7420657863656564732074686520617661696C61626C652062616C PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x616E636500000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x390 JUMP JUMPDEST DUP6 DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0xC2F SWAP2 SWAP1 PUSH2 0x205B JUMP JUMPDEST PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD DUP2 SWAP1 SSTORE PUSH2 0xCD7 JUMPI PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x5 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x6 DUP3 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE PUSH1 0x7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMPDEST PUSH2 0xD0A DUP3 PUSH1 0xA0 ADD MLOAD DUP8 DUP5 PUSH1 0xE0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1838 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP2 PUSH1 0xA0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 PUSH32 0x36C3AB437E6A424ED25DC4BFDEB62706AA06558660FAB2DAB229D2555ADAF89C DUP9 PUSH1 0x40 MLOAD PUSH2 0xD57 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 SWAP5 POP POP POP POP POP PUSH1 0x1 PUSH1 0x34 SSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP9 PUSH1 0x36 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x7 ADD PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH2 0xDEF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73747265616D20646F6573206E6F742065786973740000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST POP POP POP PUSH1 0x0 SWAP7 DUP8 MSTORE POP POP PUSH1 0x36 PUSH1 0x20 MSTORE POP POP PUSH1 0x40 SWAP1 SWAP3 KECCAK256 PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0x5 DUP3 ADD SLOAD DUP3 SLOAD PUSH1 0x7 DUP5 ADD SLOAD PUSH1 0x3 DUP6 ADD SLOAD PUSH1 0x4 DUP7 ADD SLOAD PUSH1 0x2 DUP8 ADD SLOAD PUSH1 0x1 SWAP1 SWAP8 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 AND SWAP11 SWAP6 DUP8 AND SWAP10 POP SWAP4 SWAP8 POP SWAP2 SWAP1 SWAP5 AND SWAP5 SWAP1 SWAP3 SWAP1 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x7 ADD SLOAD DUP3 SWAP1 PUSH21 0x10000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xED3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73747265616D20646F6573206E6F742065786973740000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x120 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x2 DUP2 ADD SLOAD SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x4 DUP4 ADD SLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x5 DUP4 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP5 ADD SLOAD DUP2 AND PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 SWAP1 SWAP4 ADD SLOAD SWAP3 DUP4 AND PUSH1 0xE0 DUP4 ADD MSTORE PUSH21 0x10000000000000000000000000000000000000000 SWAP1 SWAP3 DIV PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x100 DUP3 ADD MSTORE SWAP1 TIMESTAMP GT PUSH2 0xF91 JUMPI PUSH1 0x0 SWAP3 POP POP PUSH2 0xFCC JUMP JUMPDEST DUP1 PUSH1 0x80 ADD MLOAD TIMESTAMP LT ISZERO PUSH2 0xFB4 JUMPI PUSH1 0x60 DUP2 ADD MLOAD PUSH2 0xFAC SWAP1 TIMESTAMP PUSH2 0x205B JUMP JUMPDEST SWAP3 POP POP PUSH2 0xFCC JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x80 ADD MLOAD PUSH2 0xFC8 SWAP2 SWAP1 PUSH2 0x205B JUMP JUMPDEST SWAP3 POP POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1039 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F42595F46554E44535F41444D494E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x109C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F30585F524543495049454E54000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x10F3 JUMPI PUSH2 0x10EE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x190C JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x10EE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP4 DUP4 PUSH2 0x1838 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 SWAP1 DUP2 GT PUSH2 0x118E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE PUSH3 0x186A0 PUSH1 0x35 SSTORE PUSH2 0x11A3 DUP3 PUSH2 0x1A32 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1211 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F42595F46554E44535F41444D494E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH2 0x1274 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73747265616D20746F20746865207A65726F2061646472657373000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND ADDRESS EQ ISZERO PUSH2 0x12DA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73747265616D20746F2074686520636F6E747261637420697473656C66000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND CALLER EQ ISZERO PUSH2 0x1340 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73747265616D20746F207468652063616C6C6572000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x0 DUP6 GT PUSH2 0x1390 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6465706F736974206973207A65726F0000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST TIMESTAMP DUP4 LT ISZERO PUSH2 0x1406 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73746172742074696D65206265666F726520626C6F636B2E74696D657374616D PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7000000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x390 JUMP JUMPDEST DUP3 DUP3 GT PUSH2 0x1455 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73746F702074696D65206265666F7265207468652073746172742074696D6500 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x1473 DUP5 DUP5 PUSH2 0x205B JUMP JUMPDEST DUP1 DUP3 MSTORE DUP7 LT ISZERO PUSH2 0x14C5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6465706F73697420736D616C6C6572207468616E2074696D652064656C746100 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x14D1 SWAP1 DUP8 PUSH2 0x20A1 JUMP JUMPDEST ISZERO PUSH2 0x1544 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6465706F736974206E6F74206D756C7469706C65206F662074696D652064656C PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7461000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x390 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x1550 SWAP1 DUP8 PUSH2 0x20B5 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH1 0x35 SLOAD SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x1 ISZERO ISZERO DUP2 MSTORE POP PUSH1 0x36 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 ADD MLOAD DUP2 PUSH1 0x0 ADD SSTORE PUSH1 0x20 DUP3 ADD MLOAD DUP2 PUSH1 0x1 ADD SSTORE PUSH1 0x40 DUP3 ADD MLOAD DUP2 PUSH1 0x2 ADD SSTORE PUSH1 0x60 DUP3 ADD MLOAD DUP2 PUSH1 0x3 ADD SSTORE PUSH1 0x80 DUP3 ADD MLOAD DUP2 PUSH1 0x4 ADD SSTORE PUSH1 0xA0 DUP3 ADD MLOAD DUP2 PUSH1 0x5 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0xC0 DUP3 ADD MLOAD DUP2 PUSH1 0x6 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0xE0 DUP3 ADD MLOAD DUP2 PUSH1 0x7 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x100 DUP3 ADD MLOAD DUP2 PUSH1 0x7 ADD PUSH1 0x14 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP SWAP1 POP POP PUSH1 0x35 PUSH1 0x0 DUP2 SLOAD DUP1 SWAP3 SWAP2 SWAP1 PUSH2 0x173A SWAP1 PUSH2 0x20C9 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 DUP1 MLOAD DUP9 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP2 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 DUP10 AND SWAP1 ADDRESS SWAP1 DUP4 SWAP1 PUSH32 0x7B01D409597969366DC268D7F957A990D1CA3D3449BAF8FB45DB67351AECFE78 SWAP1 PUSH1 0x80 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1817 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F42595F46554E44535F41444D494E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH2 0x10EE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP4 DUP4 PUSH2 0x1AA1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x10EE SWAP1 DUP5 SWAP1 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 SWAP1 PUSH1 0x64 ADD 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 0x1C09 JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x195C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x19B6 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 0x19BB JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x10EE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1AB77A654795DA4CFE37C33188E862203ADE9A5C7F1A9D4957669B3CCBEC9E11 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x1B41 JUMPI POP PUSH1 0x40 MLOAD PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B1B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B3F SWAP2 SWAP1 PUSH2 0x2102 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x1BB3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x20746F206E6F6E2D7A65726F20616C6C6F77616E636500000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x10EE SWAP1 DUP5 SWAP1 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP1 PUSH1 0x64 ADD PUSH2 0x188A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C6B DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1CFB SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x10EE JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1C89 SWAP2 SWAP1 PUSH2 0x211B JUMP JUMPDEST PUSH2 0x10EE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F74207375636365656400000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1D0A DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x1D14 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x1D8C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x722063616C6C0000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x390 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND EXTCODESIZE PUSH2 0x1DF0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x1E19 SWAP2 SWAP1 PUSH2 0x216D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1E56 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 0x1E5B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x1E6B DUP3 DUP3 DUP7 PUSH2 0x1E76 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x1E85 JUMPI POP DUP2 PUSH2 0x1D0D JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x1E95 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x390 SWAP2 SWAP1 PUSH2 0x2189 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1ED1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1EE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1EF9 DUP2 PUSH2 0x1EAF JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1F16 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1F30 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1F54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1F5F DUP2 PUSH2 0x1EAF JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1F6F DUP2 PUSH2 0x1EAF JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1F92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1D0D DUP2 PUSH2 0x1EAF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1FB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x1FC0 DUP2 PUSH2 0x1EAF JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x1FD7 DUP2 PUSH2 0x1EAF JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP4 SWAP5 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP5 POP PUSH1 0x80 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2056 JUMPI PUSH2 0x2056 PUSH2 0x1FEF JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x206D JUMPI PUSH2 0x206D PUSH2 0x1FEF JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x20B0 JUMPI PUSH2 0x20B0 PUSH2 0x2072 JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x20C4 JUMPI PUSH2 0x20C4 PUSH2 0x2072 JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x20FB JUMPI PUSH2 0x20FB PUSH2 0x1FEF JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2114 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x212D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1D0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2158 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2140 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x2167 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x217F DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x213D JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x21A8 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x213D JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURNDATASIZE 0xC8 0xAC PUSH28 0x1914ADAEE70356E637996E0969DDAB8C6E7017887E42A5A97C92861B PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"1270:9576:189:-:0;;;921:1:200;878:44;;1270:9576:189;;;;;;;;;-1:-1:-1;1679:1:198;1774:7;:22;1270:9576:189;;;;;;"},"deployedBytecode":{"functionDebugData":{"@ETH_MOCK_ADDRESS_40938":{"entryPoint":null,"id":40938,"parameterSlots":0,"returnSlots":0},"@REVISION_40934":{"entryPoint":null,"id":40934,"parameterSlots":0,"returnSlots":0},"@_41042":{"entryPoint":null,"id":41042,"parameterSlots":0,"returnSlots":0},"@_callOptionalReturn_42115":{"entryPoint":7177,"id":42115,"parameterSlots":2,"returnSlots":0},"@_setFundsAdmin_41056":{"entryPoint":6706,"id":41056,"parameterSlots":1,"returnSlots":0},"@approve_40989":{"entryPoint":6064,"id":40989,"parameterSlots":3,"returnSlots":0},"@balanceOf_40581":{"entryPoint":793,"id":40581,"parameterSlots":2,"returnSlots":1},"@cancelStream_40902":{"entryPoint":1369,"id":40902,"parameterSlots":1,"returnSlots":1},"@createStream_40736":{"entryPoint":4519,"id":40736,"parameterSlots":5,"returnSlots":1},"@deltaOf_40478":{"entryPoint":3672,"id":40478,"parameterSlots":1,"returnSlots":1},"@functionCallWithValue_41714":{"entryPoint":7444,"id":41714,"parameterSlots":4,"returnSlots":1},"@functionCall_41644":{"entryPoint":7419,"id":41644,"parameterSlots":3,"returnSlots":1},"@getFundsAdmin_40968":{"entryPoint":null,"id":40968,"parameterSlots":0,"returnSlots":1},"@getNextStreamId_40351":{"entryPoint":null,"id":40351,"parameterSlots":0,"returnSlots":1},"@getRevision_40959":{"entryPoint":null,"id":40959,"parameterSlots":0,"returnSlots":1},"@getStream_40433":{"entryPoint":3442,"id":40433,"parameterSlots":1,"returnSlots":8},"@initialize_40342":{"entryPoint":4372,"id":40342,"parameterSlots":1,"returnSlots":0},"@isContract_41573":{"entryPoint":null,"id":41573,"parameterSlots":1,"returnSlots":1},"@safeApprove_41993":{"entryPoint":6817,"id":41993,"parameterSlots":3,"returnSlots":0},"@safeTransfer_41923":{"entryPoint":6200,"id":41923,"parameterSlots":3,"returnSlots":0},"@sendValue_41607":{"entryPoint":6412,"id":41607,"parameterSlots":2,"returnSlots":0},"@transfer_41037":{"entryPoint":4050,"id":41037,"parameterSlots":3,"returnSlots":0},"@verifyCallResult_41849":{"entryPoint":7798,"id":41849,"parameterSlots":3,"returnSlots":1},"@withdrawFromStream_40825":{"entryPoint":2314,"id":40825,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_address":{"entryPoint":8064,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_uint256t_addresst_uint256t_uint256":{"entryPoint":8093,"id":null,"parameterSlots":2,"returnSlots":5},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":8475,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IERC20_$1442t_addresst_uint256":{"entryPoint":7999,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_uint256":{"entryPoint":7940,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256_fromMemory":{"entryPoint":8450,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_uint256t_address":{"entryPoint":7892,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_uint256t_uint256":{"entryPoint":7965,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":8557,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_uint256_t_address_t_uint256_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_address_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":9,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":8585,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_0fb610a31dbc054e34911ed7e1fb1973edf2c446267b8fea92e2f70ba544b0a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_139c46236454ed3ad9fbab45025426a45950790ea361e18a59617576f8acab40__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_29b9861e0d12d3fed793e4273df0f767cd993c707dcd18092cb3eb6a13caaf83__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3088d49d45e4841a4a1f6f3b3363c5e7594d9318a96bb26b85336195c6269f1c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_31f7f5dba990f1a21e7bbf0d3d9f6b023949f97a780e08292cc9299001c3732a__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_5c0382dff0bb3d2935f4a09b0da643a0ace0069c949e7d2009a5cd8d0b10dc85__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_62ce868967b74bf3cf31dd63768a19be2ad8a1c0645de996b5bad31d832ad3a2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_6a58cacb108971beaf9e398c295cf14584c22aa9fdb712f8ad3179599adbe0a2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_8f020ae947256c783c3a910204e478c6ac656ac43b2d96e8ce8ba05e2917ff2d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_a84b7829184afce6601e9bfeac08867e7d610bbcc4b293e3683dc099352ae35f__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_c98b35051b17903e45fcfa5883c5308ebc65b91e5bcfcb635cd99a5a432f7bb8__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_e82df4c8a840b48313d4d5bcea8d602824e30c3719870db1a113cdd6eb39c3a7__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ec010e99c751f7cfb062de644310ffc32aeb81087912935b9531c5118ccc5f3d__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_f306b7d60c58353d11a3c6bc313cd6ea279cee8ceff076ea8e1fe7fdde1c46cf__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_uint256_t_address_t_uint256_t_uint256__to_t_uint256_t_address_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"checked_div_t_uint256":{"entryPoint":8373,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":8222,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_t_uint256":{"entryPoint":8283,"id":null,"parameterSlots":2,"returnSlots":1},"copy_memory_to_memory":{"entryPoint":8509,"id":null,"parameterSlots":3,"returnSlots":0},"increment_t_uint256":{"entryPoint":8393,"id":null,"parameterSlots":1,"returnSlots":1},"mod_t_uint256":{"entryPoint":8353,"id":null,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":8175,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":8306,"id":null,"parameterSlots":0,"returnSlots":0},"validator_revert_address":{"entryPoint":7855,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:16131:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"115:125:201","statements":[{"nodeType":"YulAssignment","src":"125:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"137:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"148:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"133:3:201"},"nodeType":"YulFunctionCall","src":"133:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"125:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"167:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"182:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"190:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"178:3:201"},"nodeType":"YulFunctionCall","src":"178:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"160:6:201"},"nodeType":"YulFunctionCall","src":"160:74:201"},"nodeType":"YulExpressionStatement","src":"160:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"84:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"95:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"106:4:201","type":""}],"src":"14:226:201"},{"body":{"nodeType":"YulBlock","src":"346:76:201","statements":[{"nodeType":"YulAssignment","src":"356:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"368:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"379:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"364:3:201"},"nodeType":"YulFunctionCall","src":"364:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"356:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"398:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"409:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"391:6:201"},"nodeType":"YulFunctionCall","src":"391:25:201"},"nodeType":"YulExpressionStatement","src":"391:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"315:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"326:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"337:4:201","type":""}],"src":"245:177:201"},{"body":{"nodeType":"YulBlock","src":"472:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"559:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"568:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"571:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"561:6:201"},"nodeType":"YulFunctionCall","src":"561:12:201"},"nodeType":"YulExpressionStatement","src":"561:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"495:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"506:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"513:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"502:3:201"},"nodeType":"YulFunctionCall","src":"502:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"492:2:201"},"nodeType":"YulFunctionCall","src":"492:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"485:6:201"},"nodeType":"YulFunctionCall","src":"485:73:201"},"nodeType":"YulIf","src":"482:93:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"461:5:201","type":""}],"src":"427:154:201"},{"body":{"nodeType":"YulBlock","src":"673:228:201","statements":[{"body":{"nodeType":"YulBlock","src":"719:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"728:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"731:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"721:6:201"},"nodeType":"YulFunctionCall","src":"721:12:201"},"nodeType":"YulExpressionStatement","src":"721:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"694:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"703:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"690:3:201"},"nodeType":"YulFunctionCall","src":"690:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"715:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"686:3:201"},"nodeType":"YulFunctionCall","src":"686:32:201"},"nodeType":"YulIf","src":"683:52:201"},{"nodeType":"YulAssignment","src":"744:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"767:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"754:12:201"},"nodeType":"YulFunctionCall","src":"754:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"744:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"786:45:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"816:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"827:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"812:3:201"},"nodeType":"YulFunctionCall","src":"812:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"799:12:201"},"nodeType":"YulFunctionCall","src":"799:32:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"790:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"865:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"840:24:201"},"nodeType":"YulFunctionCall","src":"840:31:201"},"nodeType":"YulExpressionStatement","src":"840:31:201"},{"nodeType":"YulAssignment","src":"880:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"890:5:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"880:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"631:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"642:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"654:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"662:6:201","type":""}],"src":"586:315:201"},{"body":{"nodeType":"YulBlock","src":"976:110:201","statements":[{"body":{"nodeType":"YulBlock","src":"1022:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1031:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1034:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1024:6:201"},"nodeType":"YulFunctionCall","src":"1024:12:201"},"nodeType":"YulExpressionStatement","src":"1024:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"997:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1006:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"993:3:201"},"nodeType":"YulFunctionCall","src":"993:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1018:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"989:3:201"},"nodeType":"YulFunctionCall","src":"989:32:201"},"nodeType":"YulIf","src":"986:52:201"},{"nodeType":"YulAssignment","src":"1047:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1070:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1057:12:201"},"nodeType":"YulFunctionCall","src":"1057:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1047:6:201"}]}]},"name":"abi_decode_tuple_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"942:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"953:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"965:6:201","type":""}],"src":"906:180:201"},{"body":{"nodeType":"YulBlock","src":"1186:92:201","statements":[{"nodeType":"YulAssignment","src":"1196:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1208:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1219:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1204:3:201"},"nodeType":"YulFunctionCall","src":"1204:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1196:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1238:9:201"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1263:6:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1256:6:201"},"nodeType":"YulFunctionCall","src":"1256:14:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"1249:6:201"},"nodeType":"YulFunctionCall","src":"1249:22:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1231:6:201"},"nodeType":"YulFunctionCall","src":"1231:41:201"},"nodeType":"YulExpressionStatement","src":"1231:41:201"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1155:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1166:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1177:4:201","type":""}],"src":"1091:187:201"},{"body":{"nodeType":"YulBlock","src":"1370:161:201","statements":[{"body":{"nodeType":"YulBlock","src":"1416:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1425:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1428:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1418:6:201"},"nodeType":"YulFunctionCall","src":"1418:12:201"},"nodeType":"YulExpressionStatement","src":"1418:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1391:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1400:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1387:3:201"},"nodeType":"YulFunctionCall","src":"1387:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1412:2:201","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1383:3:201"},"nodeType":"YulFunctionCall","src":"1383:32:201"},"nodeType":"YulIf","src":"1380:52:201"},{"nodeType":"YulAssignment","src":"1441:33:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1464:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1451:12:201"},"nodeType":"YulFunctionCall","src":"1451:23:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1441:6:201"}]},{"nodeType":"YulAssignment","src":"1483:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1510:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1521:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1506:3:201"},"nodeType":"YulFunctionCall","src":"1506:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1493:12:201"},"nodeType":"YulFunctionCall","src":"1493:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1483:6:201"}]}]},"name":"abi_decode_tuple_t_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1328:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1339:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1351:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1359:6:201","type":""}],"src":"1283:248:201"},{"body":{"nodeType":"YulBlock","src":"1833:470:201","statements":[{"nodeType":"YulAssignment","src":"1843:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1855:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1866:3:201","type":"","value":"256"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1851:3:201"},"nodeType":"YulFunctionCall","src":"1851:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1843:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"1879:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1889:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1883:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1947:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1962:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1970:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1958:3:201"},"nodeType":"YulFunctionCall","src":"1958:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1940:6:201"},"nodeType":"YulFunctionCall","src":"1940:34:201"},"nodeType":"YulExpressionStatement","src":"1940:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1994:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2005:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1990:3:201"},"nodeType":"YulFunctionCall","src":"1990:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2014:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2022:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2010:3:201"},"nodeType":"YulFunctionCall","src":"2010:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1983:6:201"},"nodeType":"YulFunctionCall","src":"1983:43:201"},"nodeType":"YulExpressionStatement","src":"1983:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2046:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2057:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2042:3:201"},"nodeType":"YulFunctionCall","src":"2042:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"2062:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2035:6:201"},"nodeType":"YulFunctionCall","src":"2035:34:201"},"nodeType":"YulExpressionStatement","src":"2035:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2089:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2100:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2085:3:201"},"nodeType":"YulFunctionCall","src":"2085:18:201"},{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"2109:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"2117:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2105:3:201"},"nodeType":"YulFunctionCall","src":"2105:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2078:6:201"},"nodeType":"YulFunctionCall","src":"2078:43:201"},"nodeType":"YulExpressionStatement","src":"2078:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2141:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2152:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2137:3:201"},"nodeType":"YulFunctionCall","src":"2137:19:201"},{"name":"value4","nodeType":"YulIdentifier","src":"2158:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2130:6:201"},"nodeType":"YulFunctionCall","src":"2130:35:201"},"nodeType":"YulExpressionStatement","src":"2130:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2185:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2196:3:201","type":"","value":"160"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2181:3:201"},"nodeType":"YulFunctionCall","src":"2181:19:201"},{"name":"value5","nodeType":"YulIdentifier","src":"2202:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2174:6:201"},"nodeType":"YulFunctionCall","src":"2174:35:201"},"nodeType":"YulExpressionStatement","src":"2174:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2229:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2240:3:201","type":"","value":"192"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2225:3:201"},"nodeType":"YulFunctionCall","src":"2225:19:201"},{"name":"value6","nodeType":"YulIdentifier","src":"2246:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2218:6:201"},"nodeType":"YulFunctionCall","src":"2218:35:201"},"nodeType":"YulExpressionStatement","src":"2218:35:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2273:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2284:3:201","type":"","value":"224"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2269:3:201"},"nodeType":"YulFunctionCall","src":"2269:19:201"},{"name":"value7","nodeType":"YulIdentifier","src":"2290:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2262:6:201"},"nodeType":"YulFunctionCall","src":"2262:35:201"},"nodeType":"YulExpressionStatement","src":"2262:35:201"}]},"name":"abi_encode_tuple_t_address_t_address_t_uint256_t_address_t_uint256_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_address_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1746:9:201","type":""},{"name":"value7","nodeType":"YulTypedName","src":"1757:6:201","type":""},{"name":"value6","nodeType":"YulTypedName","src":"1765:6:201","type":""},{"name":"value5","nodeType":"YulTypedName","src":"1773:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"1781:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"1789:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1797:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1805:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1813:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1824:4:201","type":""}],"src":"1536:767:201"},{"body":{"nodeType":"YulBlock","src":"2427:352:201","statements":[{"body":{"nodeType":"YulBlock","src":"2473:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2482:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2485:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2475:6:201"},"nodeType":"YulFunctionCall","src":"2475:12:201"},"nodeType":"YulExpressionStatement","src":"2475:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2448:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2457:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2444:3:201"},"nodeType":"YulFunctionCall","src":"2444:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2469:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2440:3:201"},"nodeType":"YulFunctionCall","src":"2440:32:201"},"nodeType":"YulIf","src":"2437:52:201"},{"nodeType":"YulVariableDeclaration","src":"2498:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2524:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2511:12:201"},"nodeType":"YulFunctionCall","src":"2511:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2502:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2568:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2543:24:201"},"nodeType":"YulFunctionCall","src":"2543:31:201"},"nodeType":"YulExpressionStatement","src":"2543:31:201"},{"nodeType":"YulAssignment","src":"2583:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"2593:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2583:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"2607:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2639:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2650:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2635:3:201"},"nodeType":"YulFunctionCall","src":"2635:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2622:12:201"},"nodeType":"YulFunctionCall","src":"2622:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"2611:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"2688:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2663:24:201"},"nodeType":"YulFunctionCall","src":"2663:33:201"},"nodeType":"YulExpressionStatement","src":"2663:33:201"},{"nodeType":"YulAssignment","src":"2705:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"2715:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2705:6:201"}]},{"nodeType":"YulAssignment","src":"2731:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2758:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2769:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2754:3:201"},"nodeType":"YulFunctionCall","src":"2754:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2741:12:201"},"nodeType":"YulFunctionCall","src":"2741:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2731:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IERC20_$1442t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2377:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2388:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2400:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2408:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2416:6:201","type":""}],"src":"2308:471:201"},{"body":{"nodeType":"YulBlock","src":"2854:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"2900:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2909:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2912:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2902:6:201"},"nodeType":"YulFunctionCall","src":"2902:12:201"},"nodeType":"YulExpressionStatement","src":"2902:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2875:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2884:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2871:3:201"},"nodeType":"YulFunctionCall","src":"2871:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2896:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2867:3:201"},"nodeType":"YulFunctionCall","src":"2867:32:201"},"nodeType":"YulIf","src":"2864:52:201"},{"nodeType":"YulVariableDeclaration","src":"2925:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2951:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2938:12:201"},"nodeType":"YulFunctionCall","src":"2938:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2929:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2995:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"2970:24:201"},"nodeType":"YulFunctionCall","src":"2970:31:201"},"nodeType":"YulExpressionStatement","src":"2970:31:201"},{"nodeType":"YulAssignment","src":"3010:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3020:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3010:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2820:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2831:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2843:6:201","type":""}],"src":"2784:247:201"},{"body":{"nodeType":"YulBlock","src":"3174:456:201","statements":[{"body":{"nodeType":"YulBlock","src":"3221:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3230:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3233:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3223:6:201"},"nodeType":"YulFunctionCall","src":"3223:12:201"},"nodeType":"YulExpressionStatement","src":"3223:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"3195:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"3204:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3191:3:201"},"nodeType":"YulFunctionCall","src":"3191:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"3216:3:201","type":"","value":"160"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"3187:3:201"},"nodeType":"YulFunctionCall","src":"3187:33:201"},"nodeType":"YulIf","src":"3184:53:201"},{"nodeType":"YulVariableDeclaration","src":"3246:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3272:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3259:12:201"},"nodeType":"YulFunctionCall","src":"3259:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"3250:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"3316:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3291:24:201"},"nodeType":"YulFunctionCall","src":"3291:31:201"},"nodeType":"YulExpressionStatement","src":"3291:31:201"},{"nodeType":"YulAssignment","src":"3331:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"3341:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"3331:6:201"}]},{"nodeType":"YulAssignment","src":"3355:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3382:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3393:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3378:3:201"},"nodeType":"YulFunctionCall","src":"3378:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3365:12:201"},"nodeType":"YulFunctionCall","src":"3365:32:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3355:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"3406:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3438:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3449:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3434:3:201"},"nodeType":"YulFunctionCall","src":"3434:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3421:12:201"},"nodeType":"YulFunctionCall","src":"3421:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"3410:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"3487:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"3462:24:201"},"nodeType":"YulFunctionCall","src":"3462:33:201"},"nodeType":"YulExpressionStatement","src":"3462:33:201"},{"nodeType":"YulAssignment","src":"3504:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"3514:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3504:6:201"}]},{"nodeType":"YulAssignment","src":"3530:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3557:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3568:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3553:3:201"},"nodeType":"YulFunctionCall","src":"3553:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3540:12:201"},"nodeType":"YulFunctionCall","src":"3540:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3530:6:201"}]},{"nodeType":"YulAssignment","src":"3581:43:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3608:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3619:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3604:3:201"},"nodeType":"YulFunctionCall","src":"3604:19:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3591:12:201"},"nodeType":"YulFunctionCall","src":"3591:33:201"},"variableNames":[{"name":"value4","nodeType":"YulIdentifier","src":"3581:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_uint256t_addresst_uint256t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3108:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"3119:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"3131:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3139:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3147:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"3155:6:201","type":""},{"name":"value4","nodeType":"YulTypedName","src":"3163:6:201","type":""}],"src":"3036:594:201"},{"body":{"nodeType":"YulBlock","src":"3809:171:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3826:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3837:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3819:6:201"},"nodeType":"YulFunctionCall","src":"3819:21:201"},"nodeType":"YulExpressionStatement","src":"3819:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3860:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3871:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3856:3:201"},"nodeType":"YulFunctionCall","src":"3856:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"3876:2:201","type":"","value":"21"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3849:6:201"},"nodeType":"YulFunctionCall","src":"3849:30:201"},"nodeType":"YulExpressionStatement","src":"3849:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3899:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3910:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3895:3:201"},"nodeType":"YulFunctionCall","src":"3895:18:201"},{"hexValue":"73747265616d20646f6573206e6f74206578697374","kind":"string","nodeType":"YulLiteral","src":"3915:23:201","type":"","value":"stream does not exist"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3888:6:201"},"nodeType":"YulFunctionCall","src":"3888:51:201"},"nodeType":"YulExpressionStatement","src":"3888:51:201"},{"nodeType":"YulAssignment","src":"3948:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3960:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"3971:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3956:3:201"},"nodeType":"YulFunctionCall","src":"3956:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3948:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_31f7f5dba990f1a21e7bbf0d3d9f6b023949f97a780e08292cc9299001c3732a__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3786:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3800:4:201","type":""}],"src":"3635:345:201"},{"body":{"nodeType":"YulBlock","src":"4017:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4034:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4037:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4027:6:201"},"nodeType":"YulFunctionCall","src":"4027:88:201"},"nodeType":"YulExpressionStatement","src":"4027:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4131:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"4134:4:201","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4124:6:201"},"nodeType":"YulFunctionCall","src":"4124:15:201"},"nodeType":"YulExpressionStatement","src":"4124:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4155:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"4158:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"4148:6:201"},"nodeType":"YulFunctionCall","src":"4148:15:201"},"nodeType":"YulExpressionStatement","src":"4148:15:201"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"3985:184:201"},{"body":{"nodeType":"YulBlock","src":"4226:176:201","statements":[{"body":{"nodeType":"YulBlock","src":"4345:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"4347:16:201"},"nodeType":"YulFunctionCall","src":"4347:18:201"},"nodeType":"YulExpressionStatement","src":"4347:18:201"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4257:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4250:6:201"},"nodeType":"YulFunctionCall","src":"4250:9:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"4243:6:201"},"nodeType":"YulFunctionCall","src":"4243:17:201"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"4265:1:201"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4272:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"4340:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"4268:3:201"},"nodeType":"YulFunctionCall","src":"4268:74:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"4262:2:201"},"nodeType":"YulFunctionCall","src":"4262:81:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4239:3:201"},"nodeType":"YulFunctionCall","src":"4239:105:201"},"nodeType":"YulIf","src":"4236:131:201"},{"nodeType":"YulAssignment","src":"4376:20:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4391:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"4394:1:201"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"4387:3:201"},"nodeType":"YulFunctionCall","src":"4387:9:201"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"4376:7:201"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"4205:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"4208:1:201","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"4214:7:201","type":""}],"src":"4174:228:201"},{"body":{"nodeType":"YulBlock","src":"4456:76:201","statements":[{"body":{"nodeType":"YulBlock","src":"4478:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"4480:16:201"},"nodeType":"YulFunctionCall","src":"4480:18:201"},"nodeType":"YulExpressionStatement","src":"4480:18:201"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4472:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"4475:1:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4469:2:201"},"nodeType":"YulFunctionCall","src":"4469:8:201"},"nodeType":"YulIf","src":"4466:34:201"},{"nodeType":"YulAssignment","src":"4509:17:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"4521:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"4524:1:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4517:3:201"},"nodeType":"YulFunctionCall","src":"4517:9:201"},"variableNames":[{"name":"diff","nodeType":"YulIdentifier","src":"4509:4:201"}]}]},"name":"checked_sub_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"4438:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"4441:1:201","type":""}],"returnVariables":[{"name":"diff","nodeType":"YulTypedName","src":"4447:4:201","type":""}],"src":"4407:125:201"},{"body":{"nodeType":"YulBlock","src":"4711:181:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4728:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4739:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4721:6:201"},"nodeType":"YulFunctionCall","src":"4721:21:201"},"nodeType":"YulExpressionStatement","src":"4721:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4762:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4773:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4758:3:201"},"nodeType":"YulFunctionCall","src":"4758:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"4778:2:201","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4751:6:201"},"nodeType":"YulFunctionCall","src":"4751:30:201"},"nodeType":"YulExpressionStatement","src":"4751:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4801:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4812:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4797:3:201"},"nodeType":"YulFunctionCall","src":"4797:18:201"},{"hexValue":"5265656e7472616e637947756172643a207265656e7472616e742063616c6c","kind":"string","nodeType":"YulLiteral","src":"4817:33:201","type":"","value":"ReentrancyGuard: reentrant call"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4790:6:201"},"nodeType":"YulFunctionCall","src":"4790:61:201"},"nodeType":"YulExpressionStatement","src":"4790:61:201"},{"nodeType":"YulAssignment","src":"4860:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4872:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"4883:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4868:3:201"},"nodeType":"YulFunctionCall","src":"4868:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4860:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4688:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4702:4:201","type":""}],"src":"4537:355:201"},{"body":{"nodeType":"YulBlock","src":"5071:250:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5088:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5099:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5081:6:201"},"nodeType":"YulFunctionCall","src":"5081:21:201"},"nodeType":"YulExpressionStatement","src":"5081:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5122:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5133:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5118:3:201"},"nodeType":"YulFunctionCall","src":"5118:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"5138:2:201","type":"","value":"60"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5111:6:201"},"nodeType":"YulFunctionCall","src":"5111:30:201"},"nodeType":"YulExpressionStatement","src":"5111:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5161:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5172:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5157:3:201"},"nodeType":"YulFunctionCall","src":"5157:18:201"},{"hexValue":"63616c6c6572206973206e6f74207468652066756e64732061646d696e206f72","kind":"string","nodeType":"YulLiteral","src":"5177:34:201","type":"","value":"caller is not the funds admin or"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5150:6:201"},"nodeType":"YulFunctionCall","src":"5150:62:201"},"nodeType":"YulExpressionStatement","src":"5150:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5232:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5243:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5228:3:201"},"nodeType":"YulFunctionCall","src":"5228:18:201"},{"hexValue":"2074686520726563697069656e74206f66207468652073747265616d","kind":"string","nodeType":"YulLiteral","src":"5248:30:201","type":"","value":" the recipient of the stream"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5221:6:201"},"nodeType":"YulFunctionCall","src":"5221:58:201"},"nodeType":"YulExpressionStatement","src":"5221:58:201"},{"nodeType":"YulAssignment","src":"5288:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5300:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5311:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5296:3:201"},"nodeType":"YulFunctionCall","src":"5296:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5288:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_a84b7829184afce6601e9bfeac08867e7d610bbcc4b293e3683dc099352ae35f__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5048:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5062:4:201","type":""}],"src":"4897:424:201"},{"body":{"nodeType":"YulBlock","src":"5455:119:201","statements":[{"nodeType":"YulAssignment","src":"5465:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5477:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5488:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5473:3:201"},"nodeType":"YulFunctionCall","src":"5473:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5465:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5507:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"5518:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5500:6:201"},"nodeType":"YulFunctionCall","src":"5500:25:201"},"nodeType":"YulExpressionStatement","src":"5500:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5545:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5556:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5541:3:201"},"nodeType":"YulFunctionCall","src":"5541:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"5561:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5534:6:201"},"nodeType":"YulFunctionCall","src":"5534:34:201"},"nodeType":"YulExpressionStatement","src":"5534:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5416:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5427:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5435:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5446:4:201","type":""}],"src":"5326:248:201"},{"body":{"nodeType":"YulBlock","src":"5753:164:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5770:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5781:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5763:6:201"},"nodeType":"YulFunctionCall","src":"5763:21:201"},"nodeType":"YulExpressionStatement","src":"5763:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5804:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5815:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5800:3:201"},"nodeType":"YulFunctionCall","src":"5800:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"5820:2:201","type":"","value":"14"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5793:6:201"},"nodeType":"YulFunctionCall","src":"5793:30:201"},"nodeType":"YulExpressionStatement","src":"5793:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5843:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5854:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5839:3:201"},"nodeType":"YulFunctionCall","src":"5839:18:201"},{"hexValue":"616d6f756e74206973207a65726f","kind":"string","nodeType":"YulLiteral","src":"5859:16:201","type":"","value":"amount is zero"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5832:6:201"},"nodeType":"YulFunctionCall","src":"5832:44:201"},"nodeType":"YulExpressionStatement","src":"5832:44:201"},{"nodeType":"YulAssignment","src":"5885:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"5897:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"5908:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5893:3:201"},"nodeType":"YulFunctionCall","src":"5893:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"5885:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_139c46236454ed3ad9fbab45025426a45950790ea361e18a59617576f8acab40__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"5730:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"5744:4:201","type":""}],"src":"5579:338:201"},{"body":{"nodeType":"YulBlock","src":"6096:226:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6113:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6124:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6106:6:201"},"nodeType":"YulFunctionCall","src":"6106:21:201"},"nodeType":"YulExpressionStatement","src":"6106:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6147:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6158:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6143:3:201"},"nodeType":"YulFunctionCall","src":"6143:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"6163:2:201","type":"","value":"36"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6136:6:201"},"nodeType":"YulFunctionCall","src":"6136:30:201"},"nodeType":"YulExpressionStatement","src":"6136:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6186:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6197:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6182:3:201"},"nodeType":"YulFunctionCall","src":"6182:18:201"},{"hexValue":"616d6f756e7420657863656564732074686520617661696c61626c652062616c","kind":"string","nodeType":"YulLiteral","src":"6202:34:201","type":"","value":"amount exceeds the available bal"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6175:6:201"},"nodeType":"YulFunctionCall","src":"6175:62:201"},"nodeType":"YulExpressionStatement","src":"6175:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6257:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6268:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6253:3:201"},"nodeType":"YulFunctionCall","src":"6253:18:201"},{"hexValue":"616e6365","kind":"string","nodeType":"YulLiteral","src":"6273:6:201","type":"","value":"ance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6246:6:201"},"nodeType":"YulFunctionCall","src":"6246:34:201"},"nodeType":"YulExpressionStatement","src":"6246:34:201"},{"nodeType":"YulAssignment","src":"6289:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6301:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6312:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6297:3:201"},"nodeType":"YulFunctionCall","src":"6297:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6289:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_29b9861e0d12d3fed793e4273df0f767cd993c707dcd18092cb3eb6a13caaf83__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6073:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6087:4:201","type":""}],"src":"5922:400:201"},{"body":{"nodeType":"YulBlock","src":"6501:169:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6518:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6529:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6511:6:201"},"nodeType":"YulFunctionCall","src":"6511:21:201"},"nodeType":"YulExpressionStatement","src":"6511:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6552:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6563:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6548:3:201"},"nodeType":"YulFunctionCall","src":"6548:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"6568:2:201","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6541:6:201"},"nodeType":"YulFunctionCall","src":"6541:30:201"},"nodeType":"YulExpressionStatement","src":"6541:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6591:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6602:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6587:3:201"},"nodeType":"YulFunctionCall","src":"6587:18:201"},{"hexValue":"4f4e4c595f42595f46554e44535f41444d494e","kind":"string","nodeType":"YulLiteral","src":"6607:21:201","type":"","value":"ONLY_BY_FUNDS_ADMIN"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6580:6:201"},"nodeType":"YulFunctionCall","src":"6580:49:201"},"nodeType":"YulExpressionStatement","src":"6580:49:201"},{"nodeType":"YulAssignment","src":"6638:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6650:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6661:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6646:3:201"},"nodeType":"YulFunctionCall","src":"6646:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6638:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_3088d49d45e4841a4a1f6f3b3363c5e7594d9318a96bb26b85336195c6269f1c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6478:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6492:4:201","type":""}],"src":"6327:343:201"},{"body":{"nodeType":"YulBlock","src":"6849:170:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6866:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6877:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6859:6:201"},"nodeType":"YulFunctionCall","src":"6859:21:201"},"nodeType":"YulExpressionStatement","src":"6859:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6900:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6911:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6896:3:201"},"nodeType":"YulFunctionCall","src":"6896:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"6916:2:201","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6889:6:201"},"nodeType":"YulFunctionCall","src":"6889:30:201"},"nodeType":"YulExpressionStatement","src":"6889:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6939:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"6950:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6935:3:201"},"nodeType":"YulFunctionCall","src":"6935:18:201"},{"hexValue":"494e56414c49445f30585f524543495049454e54","kind":"string","nodeType":"YulLiteral","src":"6955:22:201","type":"","value":"INVALID_0X_RECIPIENT"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6928:6:201"},"nodeType":"YulFunctionCall","src":"6928:50:201"},"nodeType":"YulExpressionStatement","src":"6928:50:201"},{"nodeType":"YulAssignment","src":"6987:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6999:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7010:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6995:3:201"},"nodeType":"YulFunctionCall","src":"6995:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6987:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_ec010e99c751f7cfb062de644310ffc32aeb81087912935b9531c5118ccc5f3d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6826:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6840:4:201","type":""}],"src":"6675:344:201"},{"body":{"nodeType":"YulBlock","src":"7198:236:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7215:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7226:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7208:6:201"},"nodeType":"YulFunctionCall","src":"7208:21:201"},"nodeType":"YulExpressionStatement","src":"7208:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7249:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7260:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7245:3:201"},"nodeType":"YulFunctionCall","src":"7245:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"7265:2:201","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7238:6:201"},"nodeType":"YulFunctionCall","src":"7238:30:201"},"nodeType":"YulExpressionStatement","src":"7238:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7288:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7299:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7284:3:201"},"nodeType":"YulFunctionCall","src":"7284:18:201"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"7304:34:201","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7277:6:201"},"nodeType":"YulFunctionCall","src":"7277:62:201"},"nodeType":"YulExpressionStatement","src":"7277:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7359:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7370:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7355:3:201"},"nodeType":"YulFunctionCall","src":"7355:18:201"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"7375:16:201","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7348:6:201"},"nodeType":"YulFunctionCall","src":"7348:44:201"},"nodeType":"YulExpressionStatement","src":"7348:44:201"},{"nodeType":"YulAssignment","src":"7401:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7413:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7424:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7409:3:201"},"nodeType":"YulFunctionCall","src":"7409:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7401:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7175:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7189:4:201","type":""}],"src":"7024:410:201"},{"body":{"nodeType":"YulBlock","src":"7613:176:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7630:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7641:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7623:6:201"},"nodeType":"YulFunctionCall","src":"7623:21:201"},"nodeType":"YulExpressionStatement","src":"7623:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7664:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7675:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7660:3:201"},"nodeType":"YulFunctionCall","src":"7660:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"7680:2:201","type":"","value":"26"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7653:6:201"},"nodeType":"YulFunctionCall","src":"7653:30:201"},"nodeType":"YulExpressionStatement","src":"7653:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7703:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7714:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7699:3:201"},"nodeType":"YulFunctionCall","src":"7699:18:201"},{"hexValue":"73747265616d20746f20746865207a65726f2061646472657373","kind":"string","nodeType":"YulLiteral","src":"7719:28:201","type":"","value":"stream to the zero address"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7692:6:201"},"nodeType":"YulFunctionCall","src":"7692:56:201"},"nodeType":"YulExpressionStatement","src":"7692:56:201"},{"nodeType":"YulAssignment","src":"7757:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7769:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7780:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7765:3:201"},"nodeType":"YulFunctionCall","src":"7765:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7757:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_0fb610a31dbc054e34911ed7e1fb1973edf2c446267b8fea92e2f70ba544b0a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7590:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7604:4:201","type":""}],"src":"7439:350:201"},{"body":{"nodeType":"YulBlock","src":"7968:179:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7985:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"7996:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7978:6:201"},"nodeType":"YulFunctionCall","src":"7978:21:201"},"nodeType":"YulExpressionStatement","src":"7978:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8019:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8030:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8015:3:201"},"nodeType":"YulFunctionCall","src":"8015:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"8035:2:201","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8008:6:201"},"nodeType":"YulFunctionCall","src":"8008:30:201"},"nodeType":"YulExpressionStatement","src":"8008:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8058:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8069:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8054:3:201"},"nodeType":"YulFunctionCall","src":"8054:18:201"},{"hexValue":"73747265616d20746f2074686520636f6e747261637420697473656c66","kind":"string","nodeType":"YulLiteral","src":"8074:31:201","type":"","value":"stream to the contract itself"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8047:6:201"},"nodeType":"YulFunctionCall","src":"8047:59:201"},"nodeType":"YulExpressionStatement","src":"8047:59:201"},{"nodeType":"YulAssignment","src":"8115:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8127:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8138:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8123:3:201"},"nodeType":"YulFunctionCall","src":"8123:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8115:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_c98b35051b17903e45fcfa5883c5308ebc65b91e5bcfcb635cd99a5a432f7bb8__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7945:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7959:4:201","type":""}],"src":"7794:353:201"},{"body":{"nodeType":"YulBlock","src":"8326:170:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8343:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8354:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8336:6:201"},"nodeType":"YulFunctionCall","src":"8336:21:201"},"nodeType":"YulExpressionStatement","src":"8336:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8377:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8388:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8373:3:201"},"nodeType":"YulFunctionCall","src":"8373:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"8393:2:201","type":"","value":"20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8366:6:201"},"nodeType":"YulFunctionCall","src":"8366:30:201"},"nodeType":"YulExpressionStatement","src":"8366:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8416:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8427:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8412:3:201"},"nodeType":"YulFunctionCall","src":"8412:18:201"},{"hexValue":"73747265616d20746f207468652063616c6c6572","kind":"string","nodeType":"YulLiteral","src":"8432:22:201","type":"","value":"stream to the caller"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8405:6:201"},"nodeType":"YulFunctionCall","src":"8405:50:201"},"nodeType":"YulExpressionStatement","src":"8405:50:201"},{"nodeType":"YulAssignment","src":"8464:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8476:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8487:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8472:3:201"},"nodeType":"YulFunctionCall","src":"8472:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8464:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_8f020ae947256c783c3a910204e478c6ac656ac43b2d96e8ce8ba05e2917ff2d__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8303:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8317:4:201","type":""}],"src":"8152:344:201"},{"body":{"nodeType":"YulBlock","src":"8675:165:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8692:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8703:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8685:6:201"},"nodeType":"YulFunctionCall","src":"8685:21:201"},"nodeType":"YulExpressionStatement","src":"8685:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8726:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8737:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8722:3:201"},"nodeType":"YulFunctionCall","src":"8722:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"8742:2:201","type":"","value":"15"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8715:6:201"},"nodeType":"YulFunctionCall","src":"8715:30:201"},"nodeType":"YulExpressionStatement","src":"8715:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8765:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8776:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8761:3:201"},"nodeType":"YulFunctionCall","src":"8761:18:201"},{"hexValue":"6465706f736974206973207a65726f","kind":"string","nodeType":"YulLiteral","src":"8781:17:201","type":"","value":"deposit is zero"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8754:6:201"},"nodeType":"YulFunctionCall","src":"8754:45:201"},"nodeType":"YulExpressionStatement","src":"8754:45:201"},{"nodeType":"YulAssignment","src":"8808:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"8820:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"8831:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8816:3:201"},"nodeType":"YulFunctionCall","src":"8816:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"8808:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_62ce868967b74bf3cf31dd63768a19be2ad8a1c0645de996b5bad31d832ad3a2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8652:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"8666:4:201","type":""}],"src":"8501:339:201"},{"body":{"nodeType":"YulBlock","src":"9019:223:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9036:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9047:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9029:6:201"},"nodeType":"YulFunctionCall","src":"9029:21:201"},"nodeType":"YulExpressionStatement","src":"9029:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9070:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9081:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9066:3:201"},"nodeType":"YulFunctionCall","src":"9066:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"9086:2:201","type":"","value":"33"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9059:6:201"},"nodeType":"YulFunctionCall","src":"9059:30:201"},"nodeType":"YulExpressionStatement","src":"9059:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9109:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9120:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9105:3:201"},"nodeType":"YulFunctionCall","src":"9105:18:201"},{"hexValue":"73746172742074696d65206265666f726520626c6f636b2e74696d657374616d","kind":"string","nodeType":"YulLiteral","src":"9125:34:201","type":"","value":"start time before block.timestam"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9098:6:201"},"nodeType":"YulFunctionCall","src":"9098:62:201"},"nodeType":"YulExpressionStatement","src":"9098:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9180:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9191:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9176:3:201"},"nodeType":"YulFunctionCall","src":"9176:18:201"},{"hexValue":"70","kind":"string","nodeType":"YulLiteral","src":"9196:3:201","type":"","value":"p"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9169:6:201"},"nodeType":"YulFunctionCall","src":"9169:31:201"},"nodeType":"YulExpressionStatement","src":"9169:31:201"},{"nodeType":"YulAssignment","src":"9209:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9221:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9232:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9217:3:201"},"nodeType":"YulFunctionCall","src":"9217:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9209:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_5c0382dff0bb3d2935f4a09b0da643a0ace0069c949e7d2009a5cd8d0b10dc85__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"8996:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9010:4:201","type":""}],"src":"8845:397:201"},{"body":{"nodeType":"YulBlock","src":"9421:181:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9438:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9449:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9431:6:201"},"nodeType":"YulFunctionCall","src":"9431:21:201"},"nodeType":"YulExpressionStatement","src":"9431:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9472:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9483:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9468:3:201"},"nodeType":"YulFunctionCall","src":"9468:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"9488:2:201","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9461:6:201"},"nodeType":"YulFunctionCall","src":"9461:30:201"},"nodeType":"YulExpressionStatement","src":"9461:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9511:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9522:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9507:3:201"},"nodeType":"YulFunctionCall","src":"9507:18:201"},{"hexValue":"73746f702074696d65206265666f7265207468652073746172742074696d65","kind":"string","nodeType":"YulLiteral","src":"9527:33:201","type":"","value":"stop time before the start time"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9500:6:201"},"nodeType":"YulFunctionCall","src":"9500:61:201"},"nodeType":"YulExpressionStatement","src":"9500:61:201"},{"nodeType":"YulAssignment","src":"9570:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9582:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9593:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9578:3:201"},"nodeType":"YulFunctionCall","src":"9578:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9570:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_f306b7d60c58353d11a3c6bc313cd6ea279cee8ceff076ea8e1fe7fdde1c46cf__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9398:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9412:4:201","type":""}],"src":"9247:355:201"},{"body":{"nodeType":"YulBlock","src":"9781:181:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9798:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9809:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9791:6:201"},"nodeType":"YulFunctionCall","src":"9791:21:201"},"nodeType":"YulExpressionStatement","src":"9791:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9832:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9843:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9828:3:201"},"nodeType":"YulFunctionCall","src":"9828:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"9848:2:201","type":"","value":"31"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9821:6:201"},"nodeType":"YulFunctionCall","src":"9821:30:201"},"nodeType":"YulExpressionStatement","src":"9821:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9871:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9882:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9867:3:201"},"nodeType":"YulFunctionCall","src":"9867:18:201"},{"hexValue":"6465706f73697420736d616c6c6572207468616e2074696d652064656c7461","kind":"string","nodeType":"YulLiteral","src":"9887:33:201","type":"","value":"deposit smaller than time delta"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"9860:6:201"},"nodeType":"YulFunctionCall","src":"9860:61:201"},"nodeType":"YulExpressionStatement","src":"9860:61:201"},{"nodeType":"YulAssignment","src":"9930:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"9942:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"9953:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"9938:3:201"},"nodeType":"YulFunctionCall","src":"9938:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"9930:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_e82df4c8a840b48313d4d5bcea8d602824e30c3719870db1a113cdd6eb39c3a7__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"9758:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"9772:4:201","type":""}],"src":"9607:355:201"},{"body":{"nodeType":"YulBlock","src":"9999:152:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10016:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10019:77:201","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10009:6:201"},"nodeType":"YulFunctionCall","src":"10009:88:201"},"nodeType":"YulExpressionStatement","src":"10009:88:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10113:1:201","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"10116:4:201","type":"","value":"0x12"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10106:6:201"},"nodeType":"YulFunctionCall","src":"10106:15:201"},"nodeType":"YulExpressionStatement","src":"10106:15:201"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"10137:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"10140:4:201","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"10130:6:201"},"nodeType":"YulFunctionCall","src":"10130:15:201"},"nodeType":"YulExpressionStatement","src":"10130:15:201"}]},"name":"panic_error_0x12","nodeType":"YulFunctionDefinition","src":"9967:184:201"},{"body":{"nodeType":"YulBlock","src":"10194:74:201","statements":[{"body":{"nodeType":"YulBlock","src":"10217:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x12","nodeType":"YulIdentifier","src":"10219:16:201"},"nodeType":"YulFunctionCall","src":"10219:18:201"},"nodeType":"YulExpressionStatement","src":"10219:18:201"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"10214:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10207:6:201"},"nodeType":"YulFunctionCall","src":"10207:9:201"},"nodeType":"YulIf","src":"10204:35:201"},{"nodeType":"YulAssignment","src":"10248:14:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10257:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"10260:1:201"}],"functionName":{"name":"mod","nodeType":"YulIdentifier","src":"10253:3:201"},"nodeType":"YulFunctionCall","src":"10253:9:201"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"10248:1:201"}]}]},"name":"mod_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"10179:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"10182:1:201","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"10188:1:201","type":""}],"src":"10156:112:201"},{"body":{"nodeType":"YulBlock","src":"10447:224:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10464:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10475:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10457:6:201"},"nodeType":"YulFunctionCall","src":"10457:21:201"},"nodeType":"YulExpressionStatement","src":"10457:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10498:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10509:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10494:3:201"},"nodeType":"YulFunctionCall","src":"10494:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"10514:2:201","type":"","value":"34"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10487:6:201"},"nodeType":"YulFunctionCall","src":"10487:30:201"},"nodeType":"YulExpressionStatement","src":"10487:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10537:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10548:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10533:3:201"},"nodeType":"YulFunctionCall","src":"10533:18:201"},{"hexValue":"6465706f736974206e6f74206d756c7469706c65206f662074696d652064656c","kind":"string","nodeType":"YulLiteral","src":"10553:34:201","type":"","value":"deposit not multiple of time del"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10526:6:201"},"nodeType":"YulFunctionCall","src":"10526:62:201"},"nodeType":"YulExpressionStatement","src":"10526:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10608:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10619:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10604:3:201"},"nodeType":"YulFunctionCall","src":"10604:18:201"},{"hexValue":"7461","kind":"string","nodeType":"YulLiteral","src":"10624:4:201","type":"","value":"ta"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"10597:6:201"},"nodeType":"YulFunctionCall","src":"10597:32:201"},"nodeType":"YulExpressionStatement","src":"10597:32:201"},{"nodeType":"YulAssignment","src":"10638:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"10650:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"10661:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10646:3:201"},"nodeType":"YulFunctionCall","src":"10646:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"10638:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_6a58cacb108971beaf9e398c295cf14584c22aa9fdb712f8ad3179599adbe0a2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"10424:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"10438:4:201","type":""}],"src":"10273:398:201"},{"body":{"nodeType":"YulBlock","src":"10722:74:201","statements":[{"body":{"nodeType":"YulBlock","src":"10745:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x12","nodeType":"YulIdentifier","src":"10747:16:201"},"nodeType":"YulFunctionCall","src":"10747:18:201"},"nodeType":"YulExpressionStatement","src":"10747:18:201"}]},"condition":{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"10742:1:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"10735:6:201"},"nodeType":"YulFunctionCall","src":"10735:9:201"},"nodeType":"YulIf","src":"10732:35:201"},{"nodeType":"YulAssignment","src":"10776:14:201","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"10785:1:201"},{"name":"y","nodeType":"YulIdentifier","src":"10788:1:201"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"10781:3:201"},"nodeType":"YulFunctionCall","src":"10781:9:201"},"variableNames":[{"name":"r","nodeType":"YulIdentifier","src":"10776:1:201"}]}]},"name":"checked_div_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"10707:1:201","type":""},{"name":"y","nodeType":"YulTypedName","src":"10710:1:201","type":""}],"returnVariables":[{"name":"r","nodeType":"YulTypedName","src":"10716:1:201","type":""}],"src":"10676:120:201"},{"body":{"nodeType":"YulBlock","src":"10848:148:201","statements":[{"body":{"nodeType":"YulBlock","src":"10939:22:201","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"10941:16:201"},"nodeType":"YulFunctionCall","src":"10941:18:201"},"nodeType":"YulExpressionStatement","src":"10941:18:201"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10864:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"10871:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"10861:2:201"},"nodeType":"YulFunctionCall","src":"10861:77:201"},"nodeType":"YulIf","src":"10858:103:201"},{"nodeType":"YulAssignment","src":"10970:20:201","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"10981:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"10988:1:201","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"10977:3:201"},"nodeType":"YulFunctionCall","src":"10977:13:201"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"10970:3:201"}]}]},"name":"increment_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"10830:5:201","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"10840:3:201","type":""}],"src":"10801:195:201"},{"body":{"nodeType":"YulBlock","src":"11186:255:201","statements":[{"nodeType":"YulAssignment","src":"11196:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11208:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11219:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11204:3:201"},"nodeType":"YulFunctionCall","src":"11204:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11196:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11239:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"11250:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11232:6:201"},"nodeType":"YulFunctionCall","src":"11232:25:201"},"nodeType":"YulExpressionStatement","src":"11232:25:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11277:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11288:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11273:3:201"},"nodeType":"YulFunctionCall","src":"11273:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"11297:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"11305:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11293:3:201"},"nodeType":"YulFunctionCall","src":"11293:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11266:6:201"},"nodeType":"YulFunctionCall","src":"11266:83:201"},"nodeType":"YulExpressionStatement","src":"11266:83:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11369:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11380:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11365:3:201"},"nodeType":"YulFunctionCall","src":"11365:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"11385:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11358:6:201"},"nodeType":"YulFunctionCall","src":"11358:34:201"},"nodeType":"YulExpressionStatement","src":"11358:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11412:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11423:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11408:3:201"},"nodeType":"YulFunctionCall","src":"11408:18:201"},{"name":"value3","nodeType":"YulIdentifier","src":"11428:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11401:6:201"},"nodeType":"YulFunctionCall","src":"11401:34:201"},"nodeType":"YulExpressionStatement","src":"11401:34:201"}]},"name":"abi_encode_tuple_t_uint256_t_address_t_uint256_t_uint256__to_t_uint256_t_address_t_uint256_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11131:9:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"11142:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"11150:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11158:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11166:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11177:4:201","type":""}],"src":"11001:440:201"},{"body":{"nodeType":"YulBlock","src":"11575:168:201","statements":[{"nodeType":"YulAssignment","src":"11585:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11597:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11608:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11593:3:201"},"nodeType":"YulFunctionCall","src":"11593:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"11585:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11627:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"11642:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"11650:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"11638:3:201"},"nodeType":"YulFunctionCall","src":"11638:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11620:6:201"},"nodeType":"YulFunctionCall","src":"11620:74:201"},"nodeType":"YulExpressionStatement","src":"11620:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11714:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11725:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11710:3:201"},"nodeType":"YulFunctionCall","src":"11710:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"11730:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11703:6:201"},"nodeType":"YulFunctionCall","src":"11703:34:201"},"nodeType":"YulExpressionStatement","src":"11703:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11536:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"11547:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"11555:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11566:4:201","type":""}],"src":"11446:297:201"},{"body":{"nodeType":"YulBlock","src":"11922:179:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11939:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11950:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11932:6:201"},"nodeType":"YulFunctionCall","src":"11932:21:201"},"nodeType":"YulExpressionStatement","src":"11932:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"11973:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"11984:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"11969:3:201"},"nodeType":"YulFunctionCall","src":"11969:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"11989:2:201","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"11962:6:201"},"nodeType":"YulFunctionCall","src":"11962:30:201"},"nodeType":"YulExpressionStatement","src":"11962:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12012:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12023:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12008:3:201"},"nodeType":"YulFunctionCall","src":"12008:18:201"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","kind":"string","nodeType":"YulLiteral","src":"12028:31:201","type":"","value":"Address: insufficient balance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12001:6:201"},"nodeType":"YulFunctionCall","src":"12001:59:201"},"nodeType":"YulExpressionStatement","src":"12001:59:201"},{"nodeType":"YulAssignment","src":"12069:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12081:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12092:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12077:3:201"},"nodeType":"YulFunctionCall","src":"12077:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12069:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"11899:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"11913:4:201","type":""}],"src":"11748:353:201"},{"body":{"nodeType":"YulBlock","src":"12297:14:201","statements":[{"nodeType":"YulAssignment","src":"12299:10:201","value":{"name":"pos","nodeType":"YulIdentifier","src":"12306:3:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"12299:3:201"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"12281:3:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"12289:3:201","type":""}],"src":"12106:205:201"},{"body":{"nodeType":"YulBlock","src":"12490:248:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12507:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12518:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12500:6:201"},"nodeType":"YulFunctionCall","src":"12500:21:201"},"nodeType":"YulExpressionStatement","src":"12500:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12541:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12552:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12537:3:201"},"nodeType":"YulFunctionCall","src":"12537:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"12557:2:201","type":"","value":"58"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12530:6:201"},"nodeType":"YulFunctionCall","src":"12530:30:201"},"nodeType":"YulExpressionStatement","src":"12530:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12580:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12591:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12576:3:201"},"nodeType":"YulFunctionCall","src":"12576:18:201"},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c2072","kind":"string","nodeType":"YulLiteral","src":"12596:34:201","type":"","value":"Address: unable to send value, r"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12569:6:201"},"nodeType":"YulFunctionCall","src":"12569:62:201"},"nodeType":"YulExpressionStatement","src":"12569:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12651:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12662:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12647:3:201"},"nodeType":"YulFunctionCall","src":"12647:18:201"},{"hexValue":"6563697069656e74206d61792068617665207265766572746564","kind":"string","nodeType":"YulLiteral","src":"12667:28:201","type":"","value":"ecipient may have reverted"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12640:6:201"},"nodeType":"YulFunctionCall","src":"12640:56:201"},"nodeType":"YulExpressionStatement","src":"12640:56:201"},{"nodeType":"YulAssignment","src":"12705:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12717:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12728:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12713:3:201"},"nodeType":"YulFunctionCall","src":"12713:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12705:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12467:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12481:4:201","type":""}],"src":"12316:422:201"},{"body":{"nodeType":"YulBlock","src":"12872:198:201","statements":[{"nodeType":"YulAssignment","src":"12882:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12894:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"12905:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"12890:3:201"},"nodeType":"YulFunctionCall","src":"12890:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"12882:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"12917:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"12927:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"12921:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"12985:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"13000:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"13008:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"12996:3:201"},"nodeType":"YulFunctionCall","src":"12996:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"12978:6:201"},"nodeType":"YulFunctionCall","src":"12978:34:201"},"nodeType":"YulExpressionStatement","src":"12978:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13032:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13043:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13028:3:201"},"nodeType":"YulFunctionCall","src":"13028:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"13052:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"13060:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"13048:3:201"},"nodeType":"YulFunctionCall","src":"13048:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13021:6:201"},"nodeType":"YulFunctionCall","src":"13021:43:201"},"nodeType":"YulExpressionStatement","src":"13021:43:201"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"12833:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"12844:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"12852:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"12863:4:201","type":""}],"src":"12743:327:201"},{"body":{"nodeType":"YulBlock","src":"13156:103:201","statements":[{"body":{"nodeType":"YulBlock","src":"13202:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13211:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13214:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13204:6:201"},"nodeType":"YulFunctionCall","src":"13204:12:201"},"nodeType":"YulExpressionStatement","src":"13204:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13177:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"13186:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13173:3:201"},"nodeType":"YulFunctionCall","src":"13173:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"13198:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13169:3:201"},"nodeType":"YulFunctionCall","src":"13169:32:201"},"nodeType":"YulIf","src":"13166:52:201"},{"nodeType":"YulAssignment","src":"13227:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13243:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13237:5:201"},"nodeType":"YulFunctionCall","src":"13237:16:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13227:6:201"}]}]},"name":"abi_decode_tuple_t_uint256_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13122:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13133:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13145:6:201","type":""}],"src":"13075:184:201"},{"body":{"nodeType":"YulBlock","src":"13438:244:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13455:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13466:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13448:6:201"},"nodeType":"YulFunctionCall","src":"13448:21:201"},"nodeType":"YulExpressionStatement","src":"13448:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13489:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13500:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13485:3:201"},"nodeType":"YulFunctionCall","src":"13485:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"13505:2:201","type":"","value":"54"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13478:6:201"},"nodeType":"YulFunctionCall","src":"13478:30:201"},"nodeType":"YulExpressionStatement","src":"13478:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13528:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13539:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13524:3:201"},"nodeType":"YulFunctionCall","src":"13524:18:201"},{"hexValue":"5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f","kind":"string","nodeType":"YulLiteral","src":"13544:34:201","type":"","value":"SafeERC20: approve from non-zero"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13517:6:201"},"nodeType":"YulFunctionCall","src":"13517:62:201"},"nodeType":"YulExpressionStatement","src":"13517:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13599:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13610:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13595:3:201"},"nodeType":"YulFunctionCall","src":"13595:18:201"},{"hexValue":"20746f206e6f6e2d7a65726f20616c6c6f77616e6365","kind":"string","nodeType":"YulLiteral","src":"13615:24:201","type":"","value":" to non-zero allowance"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"13588:6:201"},"nodeType":"YulFunctionCall","src":"13588:52:201"},"nodeType":"YulExpressionStatement","src":"13588:52:201"},{"nodeType":"YulAssignment","src":"13649:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13661:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"13672:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"13657:3:201"},"nodeType":"YulFunctionCall","src":"13657:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"13649:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13415:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"13429:4:201","type":""}],"src":"13264:418:201"},{"body":{"nodeType":"YulBlock","src":"13765:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"13811:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13820:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13823:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13813:6:201"},"nodeType":"YulFunctionCall","src":"13813:12:201"},"nodeType":"YulExpressionStatement","src":"13813:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"13786:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"13795:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"13782:3:201"},"nodeType":"YulFunctionCall","src":"13782:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"13807:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"13778:3:201"},"nodeType":"YulFunctionCall","src":"13778:32:201"},"nodeType":"YulIf","src":"13775:52:201"},{"nodeType":"YulVariableDeclaration","src":"13836:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"13855:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"13849:5:201"},"nodeType":"YulFunctionCall","src":"13849:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"13840:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"13918:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"13927:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"13930:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"13920:6:201"},"nodeType":"YulFunctionCall","src":"13920:12:201"},"nodeType":"YulExpressionStatement","src":"13920:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13887:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"13908:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13901:6:201"},"nodeType":"YulFunctionCall","src":"13901:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13894:6:201"},"nodeType":"YulFunctionCall","src":"13894:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"13884:2:201"},"nodeType":"YulFunctionCall","src":"13884:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"13877:6:201"},"nodeType":"YulFunctionCall","src":"13877:40:201"},"nodeType":"YulIf","src":"13874:60:201"},{"nodeType":"YulAssignment","src":"13943:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"13953:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"13943:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"13731:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"13742:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"13754:6:201","type":""}],"src":"13687:277:201"},{"body":{"nodeType":"YulBlock","src":"14143:232:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14160:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14171:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14153:6:201"},"nodeType":"YulFunctionCall","src":"14153:21:201"},"nodeType":"YulExpressionStatement","src":"14153:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14194:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14205:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14190:3:201"},"nodeType":"YulFunctionCall","src":"14190:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"14210:2:201","type":"","value":"42"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14183:6:201"},"nodeType":"YulFunctionCall","src":"14183:30:201"},"nodeType":"YulExpressionStatement","src":"14183:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14233:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14244:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14229:3:201"},"nodeType":"YulFunctionCall","src":"14229:18:201"},{"hexValue":"5361666545524332303a204552433230206f7065726174696f6e20646964206e","kind":"string","nodeType":"YulLiteral","src":"14249:34:201","type":"","value":"SafeERC20: ERC20 operation did n"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14222:6:201"},"nodeType":"YulFunctionCall","src":"14222:62:201"},"nodeType":"YulExpressionStatement","src":"14222:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14304:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14315:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14300:3:201"},"nodeType":"YulFunctionCall","src":"14300:18:201"},{"hexValue":"6f742073756363656564","kind":"string","nodeType":"YulLiteral","src":"14320:12:201","type":"","value":"ot succeed"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14293:6:201"},"nodeType":"YulFunctionCall","src":"14293:40:201"},"nodeType":"YulExpressionStatement","src":"14293:40:201"},{"nodeType":"YulAssignment","src":"14342:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14354:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14365:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14350:3:201"},"nodeType":"YulFunctionCall","src":"14350:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14342:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14120:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14134:4:201","type":""}],"src":"13969:406:201"},{"body":{"nodeType":"YulBlock","src":"14554:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14571:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14582:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14564:6:201"},"nodeType":"YulFunctionCall","src":"14564:21:201"},"nodeType":"YulExpressionStatement","src":"14564:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14605:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14616:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14601:3:201"},"nodeType":"YulFunctionCall","src":"14601:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"14621:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14594:6:201"},"nodeType":"YulFunctionCall","src":"14594:30:201"},"nodeType":"YulExpressionStatement","src":"14594:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14644:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14655:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14640:3:201"},"nodeType":"YulFunctionCall","src":"14640:18:201"},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f","kind":"string","nodeType":"YulLiteral","src":"14660:34:201","type":"","value":"Address: insufficient balance fo"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14633:6:201"},"nodeType":"YulFunctionCall","src":"14633:62:201"},"nodeType":"YulExpressionStatement","src":"14633:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14715:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14726:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14711:3:201"},"nodeType":"YulFunctionCall","src":"14711:18:201"},{"hexValue":"722063616c6c","kind":"string","nodeType":"YulLiteral","src":"14731:8:201","type":"","value":"r call"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14704:6:201"},"nodeType":"YulFunctionCall","src":"14704:36:201"},"nodeType":"YulExpressionStatement","src":"14704:36:201"},{"nodeType":"YulAssignment","src":"14749:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14761:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14772:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"14757:3:201"},"nodeType":"YulFunctionCall","src":"14757:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"14749:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14531:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14545:4:201","type":""}],"src":"14380:402:201"},{"body":{"nodeType":"YulBlock","src":"14961:179:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"14978:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"14989:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"14971:6:201"},"nodeType":"YulFunctionCall","src":"14971:21:201"},"nodeType":"YulExpressionStatement","src":"14971:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15012:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15023:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15008:3:201"},"nodeType":"YulFunctionCall","src":"15008:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"15028:2:201","type":"","value":"29"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15001:6:201"},"nodeType":"YulFunctionCall","src":"15001:30:201"},"nodeType":"YulExpressionStatement","src":"15001:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15051:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15062:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15047:3:201"},"nodeType":"YulFunctionCall","src":"15047:18:201"},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","kind":"string","nodeType":"YulLiteral","src":"15067:31:201","type":"","value":"Address: call to non-contract"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15040:6:201"},"nodeType":"YulFunctionCall","src":"15040:59:201"},"nodeType":"YulExpressionStatement","src":"15040:59:201"},{"nodeType":"YulAssignment","src":"15108:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15120:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15131:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15116:3:201"},"nodeType":"YulFunctionCall","src":"15116:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"15108:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"14938:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"14952:4:201","type":""}],"src":"14787:353:201"},{"body":{"nodeType":"YulBlock","src":"15198:205:201","statements":[{"nodeType":"YulVariableDeclaration","src":"15208:10:201","value":{"kind":"number","nodeType":"YulLiteral","src":"15217:1:201","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"15212:1:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"15277:63:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"15302:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"15307:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15298:3:201"},"nodeType":"YulFunctionCall","src":"15298:11:201"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"15321:3:201"},{"name":"i","nodeType":"YulIdentifier","src":"15326:1:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15317:3:201"},"nodeType":"YulFunctionCall","src":"15317:11:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15311:5:201"},"nodeType":"YulFunctionCall","src":"15311:18:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15291:6:201"},"nodeType":"YulFunctionCall","src":"15291:39:201"},"nodeType":"YulExpressionStatement","src":"15291:39:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"15238:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"15241:6:201"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"15235:2:201"},"nodeType":"YulFunctionCall","src":"15235:13:201"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"15249:19:201","statements":[{"nodeType":"YulAssignment","src":"15251:15:201","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"15260:1:201"},{"kind":"number","nodeType":"YulLiteral","src":"15263:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15256:3:201"},"nodeType":"YulFunctionCall","src":"15256:10:201"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"15251:1:201"}]}]},"pre":{"nodeType":"YulBlock","src":"15231:3:201","statements":[]},"src":"15227:113:201"},{"body":{"nodeType":"YulBlock","src":"15366:31:201","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"15379:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"15384:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15375:3:201"},"nodeType":"YulFunctionCall","src":"15375:16:201"},{"kind":"number","nodeType":"YulLiteral","src":"15393:1:201","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15368:6:201"},"nodeType":"YulFunctionCall","src":"15368:27:201"},"nodeType":"YulExpressionStatement","src":"15368:27:201"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"15355:1:201"},{"name":"length","nodeType":"YulIdentifier","src":"15358:6:201"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"15352:2:201"},"nodeType":"YulFunctionCall","src":"15352:13:201"},"nodeType":"YulIf","src":"15349:48:201"}]},"name":"copy_memory_to_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"15176:3:201","type":""},{"name":"dst","nodeType":"YulTypedName","src":"15181:3:201","type":""},{"name":"length","nodeType":"YulTypedName","src":"15186:6:201","type":""}],"src":"15145:258:201"},{"body":{"nodeType":"YulBlock","src":"15545:137:201","statements":[{"nodeType":"YulVariableDeclaration","src":"15555:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15575:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15569:5:201"},"nodeType":"YulFunctionCall","src":"15569:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"15559:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15617:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"15625:4:201","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15613:3:201"},"nodeType":"YulFunctionCall","src":"15613:17:201"},{"name":"pos","nodeType":"YulIdentifier","src":"15632:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"15637:6:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"15591:21:201"},"nodeType":"YulFunctionCall","src":"15591:53:201"},"nodeType":"YulExpressionStatement","src":"15591:53:201"},{"nodeType":"YulAssignment","src":"15653:23:201","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"15664:3:201"},{"name":"length","nodeType":"YulIdentifier","src":"15669:6:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15660:3:201"},"nodeType":"YulFunctionCall","src":"15660:16:201"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"15653:3:201"}]}]},"name":"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"15521:3:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15526:6:201","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"15537:3:201","type":""}],"src":"15408:274:201"},{"body":{"nodeType":"YulBlock","src":"15808:321:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15825:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15836:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15818:6:201"},"nodeType":"YulFunctionCall","src":"15818:21:201"},"nodeType":"YulExpressionStatement","src":"15818:21:201"},{"nodeType":"YulVariableDeclaration","src":"15848:27:201","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15868:6:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"15862:5:201"},"nodeType":"YulFunctionCall","src":"15862:13:201"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"15852:6:201","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15895:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15906:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15891:3:201"},"nodeType":"YulFunctionCall","src":"15891:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"15911:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"15884:6:201"},"nodeType":"YulFunctionCall","src":"15884:34:201"},"nodeType":"YulExpressionStatement","src":"15884:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"15953:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"15961:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15949:3:201"},"nodeType":"YulFunctionCall","src":"15949:15:201"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"15970:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"15981:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"15966:3:201"},"nodeType":"YulFunctionCall","src":"15966:18:201"},{"name":"length","nodeType":"YulIdentifier","src":"15986:6:201"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"15927:21:201"},"nodeType":"YulFunctionCall","src":"15927:66:201"},"nodeType":"YulExpressionStatement","src":"15927:66:201"},{"nodeType":"YulAssignment","src":"16002:121:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"16018:9:201"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"16037:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"16045:2:201","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16033:3:201"},"nodeType":"YulFunctionCall","src":"16033:15:201"},{"kind":"number","nodeType":"YulLiteral","src":"16050:66:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"16029:3:201"},"nodeType":"YulFunctionCall","src":"16029:88:201"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16014:3:201"},"nodeType":"YulFunctionCall","src":"16014:104:201"},{"kind":"number","nodeType":"YulLiteral","src":"16120:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"16010:3:201"},"nodeType":"YulFunctionCall","src":"16010:113:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"16002:4:201"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"15777:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"15788:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"15799:4:201","type":""}],"src":"15687:442:201"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_uint256t_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_address(value)\n        value1 := value\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_address_t_uint256_t_uint256_t_uint256_t_uint256__to_t_address_t_address_t_uint256_t_address_t_uint256_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 256)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), and(value3, _1))\n        mstore(add(headStart, 128), value4)\n        mstore(add(headStart, 160), value5)\n        mstore(add(headStart, 192), value6)\n        mstore(add(headStart, 224), value7)\n    }\n    function abi_decode_tuple_t_contract$_IERC20_$1442t_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_decode_tuple_t_addresst_uint256t_addresst_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2, value3, value4\n    {\n        if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        value1 := calldataload(add(headStart, 32))\n        let value_1 := calldataload(add(headStart, 64))\n        validator_revert_address(value_1)\n        value2 := value_1\n        value3 := calldataload(add(headStart, 96))\n        value4 := calldataload(add(headStart, 128))\n    }\n    function abi_encode_tuple_t_stringliteral_31f7f5dba990f1a21e7bbf0d3d9f6b023949f97a780e08292cc9299001c3732a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"stream does not exist\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_mul_t_uint256(x, y) -> product\n    {\n        if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n        product := mul(x, y)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y) { panic_error_0x11() }\n        diff := sub(x, y)\n    }\n    function abi_encode_tuple_t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ReentrancyGuard: reentrant call\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_a84b7829184afce6601e9bfeac08867e7d610bbcc4b293e3683dc099352ae35f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 60)\n        mstore(add(headStart, 64), \"caller is not the funds admin or\")\n        mstore(add(headStart, 96), \" the recipient of the stream\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_stringliteral_139c46236454ed3ad9fbab45025426a45950790ea361e18a59617576f8acab40__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 14)\n        mstore(add(headStart, 64), \"amount is zero\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_29b9861e0d12d3fed793e4273df0f767cd993c707dcd18092cb3eb6a13caaf83__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"amount exceeds the available bal\")\n        mstore(add(headStart, 96), \"ance\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_3088d49d45e4841a4a1f6f3b3363c5e7594d9318a96bb26b85336195c6269f1c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"ONLY_BY_FUNDS_ADMIN\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_ec010e99c751f7cfb062de644310ffc32aeb81087912935b9531c5118ccc5f3d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"INVALID_0X_RECIPIENT\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_0fb610a31dbc054e34911ed7e1fb1973edf2c446267b8fea92e2f70ba544b0a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 26)\n        mstore(add(headStart, 64), \"stream to the zero address\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_c98b35051b17903e45fcfa5883c5308ebc65b91e5bcfcb635cd99a5a432f7bb8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"stream to the contract itself\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_8f020ae947256c783c3a910204e478c6ac656ac43b2d96e8ce8ba05e2917ff2d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"stream to the caller\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_62ce868967b74bf3cf31dd63768a19be2ad8a1c0645de996b5bad31d832ad3a2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 15)\n        mstore(add(headStart, 64), \"deposit is zero\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_5c0382dff0bb3d2935f4a09b0da643a0ace0069c949e7d2009a5cd8d0b10dc85__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 33)\n        mstore(add(headStart, 64), \"start time before block.timestam\")\n        mstore(add(headStart, 96), \"p\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_f306b7d60c58353d11a3c6bc313cd6ea279cee8ceff076ea8e1fe7fdde1c46cf__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"stop time before the start time\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e82df4c8a840b48313d4d5bcea8d602824e30c3719870db1a113cdd6eb39c3a7__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"deposit smaller than time delta\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x12()\n    {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x12)\n        revert(0, 0x24)\n    }\n    function mod_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := mod(x, y)\n    }\n    function abi_encode_tuple_t_stringliteral_6a58cacb108971beaf9e398c295cf14584c22aa9fdb712f8ad3179599adbe0a2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"deposit not multiple of time del\")\n        mstore(add(headStart, 96), \"ta\")\n        tail := add(headStart, 128)\n    }\n    function checked_div_t_uint256(x, y) -> r\n    {\n        if iszero(y) { panic_error_0x12() }\n        r := div(x, y)\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_uint256_t_address_t_uint256_t_uint256__to_t_uint256_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 128)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), and(value1, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 64), value2)\n        mstore(add(headStart, 96), value3)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: insufficient balance\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_packed_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n    { end := pos }\n    function abi_encode_tuple_t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 58)\n        mstore(add(headStart, 64), \"Address: unable to send value, r\")\n        mstore(add(headStart, 96), \"ecipient may have reverted\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := mload(headStart)\n    }\n    function abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 54)\n        mstore(add(headStart, 64), \"SafeERC20: approve from non-zero\")\n        mstore(add(headStart, 96), \" to non-zero allowance\")\n        tail := add(headStart, 128)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n        mstore(add(headStart, 96), \"ot succeed\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n        mstore(add(headStart, 96), \"r call\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"6080604052600436106100d65760003560e01c8063894e9a0d1161007f578063c4d66de811610059578063c4d66de8146102a4578063cc1b4bf6146102c4578063dde43cba146102e4578063e1f21c67146102f957600080fd5b8063894e9a0d146101ea578063a82ccd4d14610262578063beabacc81461028257600080fd5b806351ee886b116100b057806351ee886b146101725780636db9241b1461019a5780637a9b2c6c146101ca57600080fd5b806306bc2ee0146100e25780630932f92b146101335780633656eec21461015257600080fd5b366100dd57005b600080fd5b3480156100ee57600080fd5b5060335473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561013f57600080fd5b506035545b60405190815260200161012a565b34801561015e57600080fd5b5061014461016d366004611ed4565b610319565b34801561017e57600080fd5b5061010973eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b3480156101a657600080fd5b506101ba6101b5366004611f04565b610559565b604051901515815260200161012a565b3480156101d657600080fd5b506101ba6101e5366004611f1d565b61090a565b3480156101f657600080fd5b5061020a610205366004611f04565b610d72565b6040805173ffffffffffffffffffffffffffffffffffffffff998a1681529789166020890152870195909552959092166060850152608084015260a083015260c082019290925260e08101919091526101000161012a565b34801561026e57600080fd5b5061014461027d366004611f04565b610e58565b34801561028e57600080fd5b506102a261029d366004611f3f565b610fd2565b005b3480156102b057600080fd5b506102a26102bf366004611f80565b611114565b3480156102d057600080fd5b506101446102df366004611f9d565b6111a7565b3480156102f057600080fd5b50610144600181565b34801561030557600080fd5b506102a2610314366004611f3f565b6117b0565b600082815260366020526040812060070154839074010000000000000000000000000000000000000000900460ff166103995760405162461bcd60e51b815260206004820152601560248201527f73747265616d20646f6573206e6f74206578697374000000000000000000000060448201526064015b60405180910390fd5b600084815260366020908152604080832081516101208101835281548152600182015481850152600282015481840152600382015460608083019190915260048301546080830152600583015473ffffffffffffffffffffffffffffffffffffffff90811660a08401526006840154811660c084015260079093015492831660e08301527401000000000000000000000000000000000000000090920460ff161515610100820152825191820183528482529281018490529081019290925290600061046487610e58565b9050826020015181610476919061201e565b82526040830151835111156104ac5760408301518351610496919061205b565b6020830181905282516104a9919061205b565b82525b8260a0015173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156104ef57505192506105529050565b8260c0015173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141561054a5781516040840151610538919061205b565b60409092018290525092506105529050565b600094505050505b5092915050565b6000600260345414156105ae5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610390565b6002603455600082815260366020526040902060070154829074010000000000000000000000000000000000000000900460ff1661062e5760405162461bcd60e51b815260206004820152601560248201527f73747265616d20646f6573206e6f7420657869737400000000000000000000006044820152606401610390565b603354839073ffffffffffffffffffffffffffffffffffffffff1633148061067c575060008181526036602052604090206005015473ffffffffffffffffffffffffffffffffffffffff1633145b6106ee5760405162461bcd60e51b815260206004820152603c60248201527f63616c6c6572206973206e6f74207468652066756e64732061646d696e206f7260448201527f2074686520726563697069656e74206f66207468652073747265616d000000006064820152608401610390565b6000848152603660209081526040808320815161012081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015473ffffffffffffffffffffffffffffffffffffffff90811660a08401526006820154811660c0840181905260079092015490811660e084015274010000000000000000000000000000000000000000900460ff1615156101008301529091906107a7908790610319565b905060006107b9878460a00151610319565b600088815260366020526040812081815560018101829055600281018290556003810182905560048101919091556005810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116909155600682018054909116905560070180547fffffffffffffffffffffff00000000000000000000000000000000000000000016905560e0840151909150811561087d5760a084015161087d9073ffffffffffffffffffffffffffffffffffffffff83169084611838565b8360a0015173ffffffffffffffffffffffffffffffffffffffff168460c0015173ffffffffffffffffffffffffffffffffffffffff16897fca3e6079b726e7728802a0537949e2d1c7762304fa641fb06eb56daf2ba8c6b986866040516108ee929190918252602082015260400190565b60405180910390a4600196505050505050506001603455919050565b60006002603454141561095f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610390565b6002603455600083815260366020526040902060070154839074010000000000000000000000000000000000000000900460ff166109df5760405162461bcd60e51b815260206004820152601560248201527f73747265616d20646f6573206e6f7420657869737400000000000000000000006044820152606401610390565b603354849073ffffffffffffffffffffffffffffffffffffffff16331480610a2d575060008181526036602052604090206005015473ffffffffffffffffffffffffffffffffffffffff1633145b610a9f5760405162461bcd60e51b815260206004820152603c60248201527f63616c6c6572206973206e6f74207468652066756e64732061646d696e206f7260448201527f2074686520726563697069656e74206f66207468652073747265616d000000006064820152608401610390565b60008411610aef5760405162461bcd60e51b815260206004820152600e60248201527f616d6f756e74206973207a65726f0000000000000000000000000000000000006044820152606401610390565b6000858152603660209081526040808320815161012081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546080830152600581015473ffffffffffffffffffffffffffffffffffffffff90811660a084018190526006830154821660c085015260079092015490811660e084015274010000000000000000000000000000000000000000900460ff161515610100830152909190610ba8908890610319565b905085811015610c1f5760405162461bcd60e51b8152602060048201526024808201527f616d6f756e7420657863656564732074686520617661696c61626c652062616c60448201527f616e6365000000000000000000000000000000000000000000000000000000006064820152608401610390565b858260400151610c2f919061205b565b6000888152603660205260409020600201819055610cd757600087815260366020526040812081815560018101829055600281018290556003810182905560048101919091556005810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116909155600682018054909116905560070180547fffffffffffffffffffffff0000000000000000000000000000000000000000001690555b610d0a8260a00151878460e0015173ffffffffffffffffffffffffffffffffffffffff166118389092919063ffffffff16565b8160a0015173ffffffffffffffffffffffffffffffffffffffff16877f36c3ab437e6a424ed25dc4bfdeb62706aa06558660fab2dab229d2555adaf89c88604051610d5791815260200190565b60405180910390a36001945050505050600160345592915050565b600080600080600080600080886036600082815260200190815260200160002060070160149054906101000a900460ff16610def5760405162461bcd60e51b815260206004820152601560248201527f73747265616d20646f6573206e6f7420657869737400000000000000000000006044820152606401610390565b50505060009687525050603660205250506040909220600681015460058201548254600784015460038501546004860154600287015460019097015473ffffffffffffffffffffffffffffffffffffffff9687169a958716995093975091909416949092909190565b600081815260366020526040812060070154829074010000000000000000000000000000000000000000900460ff16610ed35760405162461bcd60e51b815260206004820152601560248201527f73747265616d20646f6573206e6f7420657869737400000000000000000000006044820152606401610390565b6000838152603660209081526040918290208251610120810184528154815260018201549281019290925260028101549282019290925260038201546060820181905260048301546080830152600583015473ffffffffffffffffffffffffffffffffffffffff90811660a08401526006840154811660c084015260079093015492831660e08301527401000000000000000000000000000000000000000090920460ff161515610100820152904211610f91576000925050610fcc565b8060800151421015610fb4576060810151610fac904261205b565b925050610fcc565b80606001518160800151610fc8919061205b565b9250505b50919050565b60335473ffffffffffffffffffffffffffffffffffffffff1633146110395760405162461bcd60e51b815260206004820152601360248201527f4f4e4c595f42595f46554e44535f41444d494e000000000000000000000000006044820152606401610390565b73ffffffffffffffffffffffffffffffffffffffff821661109c5760405162461bcd60e51b815260206004820152601460248201527f494e56414c49445f30585f524543495049454e540000000000000000000000006044820152606401610390565b73ffffffffffffffffffffffffffffffffffffffff831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156110f3576110ee73ffffffffffffffffffffffffffffffffffffffff83168261190c565b505050565b6110ee73ffffffffffffffffffffffffffffffffffffffff84168383611838565b600054600190811161118e5760405162461bcd60e51b815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610390565b6000819055620186a06035556111a382611a32565b5050565b60335460009073ffffffffffffffffffffffffffffffffffffffff1633146112115760405162461bcd60e51b815260206004820152601360248201527f4f4e4c595f42595f46554e44535f41444d494e000000000000000000000000006044820152606401610390565b73ffffffffffffffffffffffffffffffffffffffff86166112745760405162461bcd60e51b815260206004820152601a60248201527f73747265616d20746f20746865207a65726f20616464726573730000000000006044820152606401610390565b73ffffffffffffffffffffffffffffffffffffffff86163014156112da5760405162461bcd60e51b815260206004820152601d60248201527f73747265616d20746f2074686520636f6e747261637420697473656c660000006044820152606401610390565b73ffffffffffffffffffffffffffffffffffffffff86163314156113405760405162461bcd60e51b815260206004820152601460248201527f73747265616d20746f207468652063616c6c65720000000000000000000000006044820152606401610390565b600085116113905760405162461bcd60e51b815260206004820152600f60248201527f6465706f736974206973207a65726f00000000000000000000000000000000006044820152606401610390565b428310156114065760405162461bcd60e51b815260206004820152602160248201527f73746172742074696d65206265666f726520626c6f636b2e74696d657374616d60448201527f70000000000000000000000000000000000000000000000000000000000000006064820152608401610390565b8282116114555760405162461bcd60e51b815260206004820152601f60248201527f73746f702074696d65206265666f7265207468652073746172742074696d65006044820152606401610390565b6040805180820190915260008082526020820152611473848461205b565b8082528610156114c55760405162461bcd60e51b815260206004820152601f60248201527f6465706f73697420736d616c6c6572207468616e2074696d652064656c7461006044820152606401610390565b80516114d190876120a1565b156115445760405162461bcd60e51b815260206004820152602260248201527f6465706f736974206e6f74206d756c7469706c65206f662074696d652064656c60448201527f74610000000000000000000000000000000000000000000000000000000000006064820152608401610390565b805161155090876120b5565b81602001818152505060006035549050604051806101200160405280888152602001836020015181526020018881526020018681526020018581526020018973ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020016001151581525060366000838152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060c08201518160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060e08201518160070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101008201518160070160146101000a81548160ff0219169083151502179055509050506035600081548092919061173a906120c9565b90915550506040805188815273ffffffffffffffffffffffffffffffffffffffff88811660208301529181018790526060810186905290891690309083907f7b01d409597969366dc268d7f957a990d1ca3d3449baf8fb45db67351aecfe789060800160405180910390a4979650505050505050565b60335473ffffffffffffffffffffffffffffffffffffffff1633146118175760405162461bcd60e51b815260206004820152601360248201527f4f4e4c595f42595f46554e44535f41444d494e000000000000000000000000006044820152606401610390565b6110ee73ffffffffffffffffffffffffffffffffffffffff84168383611aa1565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526110ee9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611c09565b8047101561195c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610390565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146119b6576040519150601f19603f3d011682016040523d82523d6000602084013e6119bb565b606091505b50509050806110ee5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610390565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f1ab77a654795da4cfe37c33188e862203ade9a5c7f1a9d4957669b3ccbec9e1190600090a250565b801580611b4157506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3f9190612102565b155b611bb35760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610390565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526110ee9084907f095ea7b3000000000000000000000000000000000000000000000000000000009060640161188a565b6000611c6b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611cfb9092919063ffffffff16565b8051909150156110ee5780806020019051810190611c89919061211b565b6110ee5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610390565b6060611d0a8484600085611d14565b90505b9392505050565b606082471015611d8c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610390565b73ffffffffffffffffffffffffffffffffffffffff85163b611df05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610390565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611e19919061216d565b60006040518083038185875af1925050503d8060008114611e56576040519150601f19603f3d011682016040523d82523d6000602084013e611e5b565b606091505b5091509150611e6b828286611e76565b979650505050505050565b60608315611e85575081611d0d565b825115611e955782518084602001fd5b8160405162461bcd60e51b81526004016103909190612189565b73ffffffffffffffffffffffffffffffffffffffff81168114611ed157600080fd5b50565b60008060408385031215611ee757600080fd5b823591506020830135611ef981611eaf565b809150509250929050565b600060208284031215611f1657600080fd5b5035919050565b60008060408385031215611f3057600080fd5b50508035926020909101359150565b600080600060608486031215611f5457600080fd5b8335611f5f81611eaf565b92506020840135611f6f81611eaf565b929592945050506040919091013590565b600060208284031215611f9257600080fd5b8135611d0d81611eaf565b600080600080600060a08688031215611fb557600080fd5b8535611fc081611eaf565b9450602086013593506040860135611fd781611eaf565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561205657612056611fef565b500290565b60008282101561206d5761206d611fef565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826120b0576120b0612072565b500690565b6000826120c4576120c4612072565b500490565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156120fb576120fb611fef565b5060010190565b60006020828403121561211457600080fd5b5051919050565b60006020828403121561212d57600080fd5b81518015158114611d0d57600080fd5b60005b83811015612158578181015183820152602001612140565b83811115612167576000848401525b50505050565b6000825161217f81846020870161213d565b9190910192915050565b60208152600082518060208401526121a881604085016020870161213d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212203dc8ac7b1914adaee70356e637996e0969ddab8c6e7017887e42a5a97c92861b64736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xD6 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x894E9A0D GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xC4D66DE8 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x2A4 JUMPI DUP1 PUSH4 0xCC1B4BF6 EQ PUSH2 0x2C4 JUMPI DUP1 PUSH4 0xDDE43CBA EQ PUSH2 0x2E4 JUMPI DUP1 PUSH4 0xE1F21C67 EQ PUSH2 0x2F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x894E9A0D EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0xA82CCD4D EQ PUSH2 0x262 JUMPI DUP1 PUSH4 0xBEABACC8 EQ PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x51EE886B GT PUSH2 0xB0 JUMPI DUP1 PUSH4 0x51EE886B EQ PUSH2 0x172 JUMPI DUP1 PUSH4 0x6DB9241B EQ PUSH2 0x19A JUMPI DUP1 PUSH4 0x7A9B2C6C EQ PUSH2 0x1CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6BC2EE0 EQ PUSH2 0xE2 JUMPI DUP1 PUSH4 0x932F92B EQ PUSH2 0x133 JUMPI DUP1 PUSH4 0x3656EEC2 EQ PUSH2 0x152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE PUSH2 0xDD JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x33 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x13F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x35 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x15E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x16D CALLDATASIZE PUSH1 0x4 PUSH2 0x1ED4 JUMP JUMPDEST PUSH2 0x319 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x17E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x109 PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH2 0x1B5 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F04 JUMP JUMPDEST PUSH2 0x559 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x12A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1BA PUSH2 0x1E5 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F1D JUMP JUMPDEST PUSH2 0x90A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x20A PUSH2 0x205 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F04 JUMP JUMPDEST PUSH2 0xD72 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP10 DUP11 AND DUP2 MSTORE SWAP8 DUP10 AND PUSH1 0x20 DUP10 ADD MSTORE DUP8 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP6 SWAP1 SWAP3 AND PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0xE0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH2 0x100 ADD PUSH2 0x12A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x27D CALLDATASIZE PUSH1 0x4 PUSH2 0x1F04 JUMP JUMPDEST PUSH2 0xE58 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x28E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A2 PUSH2 0x29D CALLDATASIZE PUSH1 0x4 PUSH2 0x1F3F JUMP JUMPDEST PUSH2 0xFD2 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A2 PUSH2 0x2BF CALLDATASIZE PUSH1 0x4 PUSH2 0x1F80 JUMP JUMPDEST PUSH2 0x1114 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH2 0x2DF CALLDATASIZE PUSH1 0x4 PUSH2 0x1F9D JUMP JUMPDEST PUSH2 0x11A7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x144 PUSH1 0x1 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x305 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A2 PUSH2 0x314 CALLDATASIZE PUSH1 0x4 PUSH2 0x1F3F JUMP JUMPDEST PUSH2 0x17B0 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x7 ADD SLOAD DUP4 SWAP1 PUSH21 0x10000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x399 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73747265616D20646F6573206E6F742065786973740000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH2 0x120 DUP2 ADD DUP4 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD DUP2 DUP6 ADD MSTORE PUSH1 0x2 DUP3 ADD SLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP4 ADD SLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x5 DUP4 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP5 ADD SLOAD DUP2 AND PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 SWAP1 SWAP4 ADD SLOAD SWAP3 DUP4 AND PUSH1 0xE0 DUP4 ADD MSTORE PUSH21 0x10000000000000000000000000000000000000000 SWAP1 SWAP3 DIV PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x100 DUP3 ADD MSTORE DUP3 MLOAD SWAP2 DUP3 ADD DUP4 MSTORE DUP5 DUP3 MSTORE SWAP3 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 PUSH1 0x0 PUSH2 0x464 DUP8 PUSH2 0xE58 JUMP JUMPDEST SWAP1 POP DUP3 PUSH1 0x20 ADD MLOAD DUP2 PUSH2 0x476 SWAP2 SWAP1 PUSH2 0x201E JUMP JUMPDEST DUP3 MSTORE PUSH1 0x40 DUP4 ADD MLOAD DUP4 MLOAD GT ISZERO PUSH2 0x4AC JUMPI PUSH1 0x40 DUP4 ADD MLOAD DUP4 MLOAD PUSH2 0x496 SWAP2 SWAP1 PUSH2 0x205B JUMP JUMPDEST PUSH1 0x20 DUP4 ADD DUP2 SWAP1 MSTORE DUP3 MLOAD PUSH2 0x4A9 SWAP2 SWAP1 PUSH2 0x205B JUMP JUMPDEST DUP3 MSTORE JUMPDEST DUP3 PUSH1 0xA0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x4EF JUMPI POP MLOAD SWAP3 POP PUSH2 0x552 SWAP1 POP JUMP JUMPDEST DUP3 PUSH1 0xC0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x54A JUMPI DUP2 MLOAD PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x538 SWAP2 SWAP1 PUSH2 0x205B JUMP JUMPDEST PUSH1 0x40 SWAP1 SWAP3 ADD DUP3 SWAP1 MSTORE POP SWAP3 POP PUSH2 0x552 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 SWAP5 POP POP POP POP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 PUSH1 0x34 SLOAD EQ ISZERO PUSH2 0x5AE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x34 SSTORE PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x7 ADD SLOAD DUP3 SWAP1 PUSH21 0x10000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x62E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73747265616D20646F6573206E6F742065786973740000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x33 SLOAD DUP4 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ DUP1 PUSH2 0x67C JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ JUMPDEST PUSH2 0x6EE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x63616C6C6572206973206E6F74207468652066756E64732061646D696E206F72 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x2074686520726563697069656E74206F66207468652073747265616D00000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH2 0x120 DUP2 ADD DUP4 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 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 DUP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP3 ADD SLOAD DUP2 AND PUSH1 0xC0 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x7 SWAP1 SWAP3 ADD SLOAD SWAP1 DUP2 AND PUSH1 0xE0 DUP5 ADD MSTORE PUSH21 0x10000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x100 DUP4 ADD MSTORE SWAP1 SWAP2 SWAP1 PUSH2 0x7A7 SWAP1 DUP8 SWAP1 PUSH2 0x319 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x7B9 DUP8 DUP5 PUSH1 0xA0 ADD MLOAD PUSH2 0x319 JUMP JUMPDEST PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x5 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x6 DUP3 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE PUSH1 0x7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0xE0 DUP5 ADD MLOAD SWAP1 SWAP2 POP DUP2 ISZERO PUSH2 0x87D JUMPI PUSH1 0xA0 DUP5 ADD MLOAD PUSH2 0x87D SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 DUP5 PUSH2 0x1838 JUMP JUMPDEST DUP4 PUSH1 0xA0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH1 0xC0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP10 PUSH32 0xCA3E6079B726E7728802A0537949E2D1C7762304FA641FB06EB56DAF2BA8C6B9 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x8EE SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x1 SWAP7 POP POP POP POP POP POP POP PUSH1 0x1 PUSH1 0x34 SSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 PUSH1 0x34 SLOAD EQ ISZERO PUSH2 0x95F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x34 SSTORE PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x7 ADD SLOAD DUP4 SWAP1 PUSH21 0x10000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x9DF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73747265616D20646F6573206E6F742065786973740000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x33 SLOAD DUP5 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ DUP1 PUSH2 0xA2D JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x5 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ JUMPDEST PUSH2 0xA9F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x63616C6C6572206973206E6F74207468652066756E64732061646D696E206F72 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x2074686520726563697069656E74206F66207468652073747265616D00000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x0 DUP5 GT PUSH2 0xAEF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616D6F756E74206973207A65726F000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH2 0x120 DUP2 ADD DUP4 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP4 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 DUP2 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0xA0 DUP5 ADD DUP2 SWAP1 MSTORE PUSH1 0x6 DUP4 ADD SLOAD DUP3 AND PUSH1 0xC0 DUP6 ADD MSTORE PUSH1 0x7 SWAP1 SWAP3 ADD SLOAD SWAP1 DUP2 AND PUSH1 0xE0 DUP5 ADD MSTORE PUSH21 0x10000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x100 DUP4 ADD MSTORE SWAP1 SWAP2 SWAP1 PUSH2 0xBA8 SWAP1 DUP9 SWAP1 PUSH2 0x319 JUMP JUMPDEST SWAP1 POP DUP6 DUP2 LT ISZERO PUSH2 0xC1F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x616D6F756E7420657863656564732074686520617661696C61626C652062616C PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x616E636500000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x390 JUMP JUMPDEST DUP6 DUP3 PUSH1 0x40 ADD MLOAD PUSH2 0xC2F SWAP2 SWAP1 PUSH2 0x205B JUMP JUMPDEST PUSH1 0x0 DUP9 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x2 ADD DUP2 SWAP1 SSTORE PUSH2 0xCD7 JUMPI PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 DUP2 SSTORE PUSH1 0x1 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x2 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x3 DUP2 ADD DUP3 SWAP1 SSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 SSTORE PUSH1 0x5 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x6 DUP3 ADD DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE PUSH1 0x7 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMPDEST PUSH2 0xD0A DUP3 PUSH1 0xA0 ADD MLOAD DUP8 DUP5 PUSH1 0xE0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1838 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP2 PUSH1 0xA0 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 PUSH32 0x36C3AB437E6A424ED25DC4BFDEB62706AA06558660FAB2DAB229D2555ADAF89C DUP9 PUSH1 0x40 MLOAD PUSH2 0xD57 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1 SWAP5 POP POP POP POP POP PUSH1 0x1 PUSH1 0x34 SSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 DUP9 PUSH1 0x36 PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x7 ADD PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH2 0xDEF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73747265616D20646F6573206E6F742065786973740000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST POP POP POP PUSH1 0x0 SWAP7 DUP8 MSTORE POP POP PUSH1 0x36 PUSH1 0x20 MSTORE POP POP PUSH1 0x40 SWAP1 SWAP3 KECCAK256 PUSH1 0x6 DUP2 ADD SLOAD PUSH1 0x5 DUP3 ADD SLOAD DUP3 SLOAD PUSH1 0x7 DUP5 ADD SLOAD PUSH1 0x3 DUP6 ADD SLOAD PUSH1 0x4 DUP7 ADD SLOAD PUSH1 0x2 DUP8 ADD SLOAD PUSH1 0x1 SWAP1 SWAP8 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 AND SWAP11 SWAP6 DUP8 AND SWAP10 POP SWAP4 SWAP8 POP SWAP2 SWAP1 SWAP5 AND SWAP5 SWAP1 SWAP3 SWAP1 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x7 ADD SLOAD DUP3 SWAP1 PUSH21 0x10000000000000000000000000000000000000000 SWAP1 DIV PUSH1 0xFF AND PUSH2 0xED3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73747265616D20646F6573206E6F742065786973740000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x36 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH2 0x120 DUP2 ADD DUP5 MSTORE DUP2 SLOAD DUP2 MSTORE PUSH1 0x1 DUP3 ADD SLOAD SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x2 DUP2 ADD SLOAD SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x3 DUP3 ADD SLOAD PUSH1 0x60 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x4 DUP4 ADD SLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x5 DUP4 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x6 DUP5 ADD SLOAD DUP2 AND PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x7 SWAP1 SWAP4 ADD SLOAD SWAP3 DUP4 AND PUSH1 0xE0 DUP4 ADD MSTORE PUSH21 0x10000000000000000000000000000000000000000 SWAP1 SWAP3 DIV PUSH1 0xFF AND ISZERO ISZERO PUSH2 0x100 DUP3 ADD MSTORE SWAP1 TIMESTAMP GT PUSH2 0xF91 JUMPI PUSH1 0x0 SWAP3 POP POP PUSH2 0xFCC JUMP JUMPDEST DUP1 PUSH1 0x80 ADD MLOAD TIMESTAMP LT ISZERO PUSH2 0xFB4 JUMPI PUSH1 0x60 DUP2 ADD MLOAD PUSH2 0xFAC SWAP1 TIMESTAMP PUSH2 0x205B JUMP JUMPDEST SWAP3 POP POP PUSH2 0xFCC JUMP JUMPDEST DUP1 PUSH1 0x60 ADD MLOAD DUP2 PUSH1 0x80 ADD MLOAD PUSH2 0xFC8 SWAP2 SWAP1 PUSH2 0x205B JUMP JUMPDEST SWAP3 POP POP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1039 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F42595F46554E44535F41444D494E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x109C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x494E56414C49445F30585F524543495049454E54000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH20 0xEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EQ ISZERO PUSH2 0x10F3 JUMPI PUSH2 0x10EE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP3 PUSH2 0x190C JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x10EE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP4 DUP4 PUSH2 0x1838 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 SWAP1 DUP2 GT PUSH2 0x118E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE PUSH3 0x186A0 PUSH1 0x35 SSTORE PUSH2 0x11A3 DUP3 PUSH2 0x1A32 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH1 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1211 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F42595F46554E44535F41444D494E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH2 0x1274 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73747265616D20746F20746865207A65726F2061646472657373000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND ADDRESS EQ ISZERO PUSH2 0x12DA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73747265616D20746F2074686520636F6E747261637420697473656C66000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND CALLER EQ ISZERO PUSH2 0x1340 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73747265616D20746F207468652063616C6C6572000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x0 DUP6 GT PUSH2 0x1390 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6465706F736974206973207A65726F0000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST TIMESTAMP DUP4 LT ISZERO PUSH2 0x1406 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73746172742074696D65206265666F726520626C6F636B2E74696D657374616D PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7000000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x390 JUMP JUMPDEST DUP3 DUP3 GT PUSH2 0x1455 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x73746F702074696D65206265666F7265207468652073746172742074696D6500 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x1473 DUP5 DUP5 PUSH2 0x205B JUMP JUMPDEST DUP1 DUP3 MSTORE DUP7 LT ISZERO PUSH2 0x14C5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6465706F73697420736D616C6C6572207468616E2074696D652064656C746100 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x14D1 SWAP1 DUP8 PUSH2 0x20A1 JUMP JUMPDEST ISZERO PUSH2 0x1544 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x6465706F736974206E6F74206D756C7469706C65206F662074696D652064656C PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7461000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x390 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x1550 SWAP1 DUP8 PUSH2 0x20B5 JUMP JUMPDEST DUP2 PUSH1 0x20 ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH1 0x35 SLOAD SWAP1 POP PUSH1 0x40 MLOAD DUP1 PUSH2 0x120 ADD PUSH1 0x40 MSTORE DUP1 DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x20 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD ADDRESS PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x1 ISZERO ISZERO DUP2 MSTORE POP PUSH1 0x36 PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP3 ADD MLOAD DUP2 PUSH1 0x0 ADD SSTORE PUSH1 0x20 DUP3 ADD MLOAD DUP2 PUSH1 0x1 ADD SSTORE PUSH1 0x40 DUP3 ADD MLOAD DUP2 PUSH1 0x2 ADD SSTORE PUSH1 0x60 DUP3 ADD MLOAD DUP2 PUSH1 0x3 ADD SSTORE PUSH1 0x80 DUP3 ADD MLOAD DUP2 PUSH1 0x4 ADD SSTORE PUSH1 0xA0 DUP3 ADD MLOAD DUP2 PUSH1 0x5 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0xC0 DUP3 ADD MLOAD DUP2 PUSH1 0x6 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0xE0 DUP3 ADD MLOAD DUP2 PUSH1 0x7 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x100 DUP3 ADD MLOAD DUP2 PUSH1 0x7 ADD PUSH1 0x14 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP SWAP1 POP POP PUSH1 0x35 PUSH1 0x0 DUP2 SLOAD DUP1 SWAP3 SWAP2 SWAP1 PUSH2 0x173A SWAP1 PUSH2 0x20C9 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP PUSH1 0x40 DUP1 MLOAD DUP9 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP2 AND PUSH1 0x20 DUP4 ADD MSTORE SWAP2 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 DUP2 ADD DUP7 SWAP1 MSTORE SWAP1 DUP10 AND SWAP1 ADDRESS SWAP1 DUP4 SWAP1 PUSH32 0x7B01D409597969366DC268D7F957A990D1CA3D3449BAF8FB45DB67351AECFE78 SWAP1 PUSH1 0x80 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1817 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F42595F46554E44535F41444D494E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH2 0x10EE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP4 DUP4 PUSH2 0x1AA1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x10EE SWAP1 DUP5 SWAP1 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 SWAP1 PUSH1 0x64 ADD 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 0x1C09 JUMP JUMPDEST DUP1 SELFBALANCE LT ISZERO PUSH2 0x195C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x19B6 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 0x19BB JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x10EE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20756E61626C6520746F2073656E642076616C75652C2072 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6563697069656E74206D61792068617665207265766572746564000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1AB77A654795DA4CFE37C33188E862203ADE9A5C7F1A9D4957669B3CCBEC9E11 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x1B41 JUMPI POP PUSH1 0x40 MLOAD PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B1B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B3F SWAP2 SWAP1 PUSH2 0x2102 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x1BB3 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x20746F206E6F6E2D7A65726F20616C6C6F77616E636500000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x10EE SWAP1 DUP5 SWAP1 PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 SWAP1 PUSH1 0x64 ADD PUSH2 0x188A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C6B DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1CFB SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x10EE JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1C89 SWAP2 SWAP1 PUSH2 0x211B JUMP JUMPDEST PUSH2 0x10EE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F74207375636365656400000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1D0A DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x1D14 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0x1D8C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x722063616C6C0000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x390 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND EXTCODESIZE PUSH2 0x1DF0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x390 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0x1E19 SWAP2 SWAP1 PUSH2 0x216D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1E56 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 0x1E5B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x1E6B DUP3 DUP3 DUP7 PUSH2 0x1E76 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x1E85 JUMPI POP DUP2 PUSH2 0x1D0D JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x1E95 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x390 SWAP2 SWAP1 PUSH2 0x2189 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1ED1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1EE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x1EF9 DUP2 PUSH2 0x1EAF JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1F16 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1F30 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1F54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x1F5F DUP2 PUSH2 0x1EAF JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x1F6F DUP2 PUSH2 0x1EAF JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1F92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1D0D DUP2 PUSH2 0x1EAF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1FB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH2 0x1FC0 DUP2 PUSH2 0x1EAF JUMP JUMPDEST SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x1FD7 DUP2 PUSH2 0x1EAF JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP4 SWAP5 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP5 POP PUSH1 0x80 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x2056 JUMPI PUSH2 0x2056 PUSH2 0x1FEF JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x206D JUMPI PUSH2 0x206D PUSH2 0x1FEF JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x20B0 JUMPI PUSH2 0x20B0 PUSH2 0x2072 JUMP JUMPDEST POP MOD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x20C4 JUMPI PUSH2 0x20C4 PUSH2 0x2072 JUMP JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x20FB JUMPI PUSH2 0x20FB PUSH2 0x1FEF JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2114 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x212D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1D0D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2158 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2140 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x2167 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x217F DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x213D JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x21A8 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x213D JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURNDATASIZE 0xC8 0xAC PUSH28 0x1914ADAEE70356E637996E0969DDAB8C6E7017887E42A5A97C92861B PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ","sourceMap":"1270:9576:189:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1458:86:190;;;;;;;;;;-1:-1:-1;1528:11:190;;;;1458:86;;;190:42:201;178:55;;;160:74;;148:2;133:18;1458:86:190;;;;;;;;2509:90:189;;;;;;;;;;-1:-1:-1;2581:13:189;;2509:90;;;391:25:201;;;379:2;364:18;2509:90:189;245:177:201;4768:972:189;;;;;;;;;;-1:-1:-1;4768:972:189;;;;;:::i;:::-;;:::i;1118:85:190:-;;;;;;;;;;;;1161:42;1118:85;;10235:609:189;;;;;;;;;;-1:-1:-1;10235:609:189;;;;;:::i;:::-;;:::i;:::-;;;1256:14:201;;1249:22;1231:41;;1219:2;1204:18;10235:609:189;1091:187:201;9128:704:189;;;;;;;;;;-1:-1:-1;9128:704:189;;;;;:::i;:::-;;:::i;2825:712::-;;;;;;;;;;-1:-1:-1;2825:712:189;;;;;:::i;:::-;;:::i;:::-;;;;1889:42:201;1958:15;;;1940:34;;2010:15;;;2005:2;1990:18;;1983:43;2042:18;;2035:34;;;;2105:15;;;;2100:2;2085:18;;2078:43;2152:3;2137:19;;2130:35;2196:3;2181:19;;2174:35;2240:3;2225:19;;2218:35;;;;2284:3;2269:19;;2262:35;;;;1866:3;1851:19;2825:712:189;1536:767:201;3955:334:189;;;;;;;;;;-1:-1:-1;3955:334:189;;;;;:::i;:::-;;:::i;1791:313:190:-;;;;;;;;;;-1:-1:-1;1791:313:190;;;;;:::i;:::-;;:::i;:::-;;2253:126:189;;;;;;;;;;-1:-1:-1;2253:126:189;;;;;:::i;:::-;;:::i;7053:1618::-;;;;;;;;;;-1:-1:-1;7053:1618:189;;;;;:::i;:::-;;:::i;1026:36:190:-;;;;;;;;;;;;1061:1;1026:36;;1599:137;;;;;;;;;;-1:-1:-1;1599:137:190;;;;;:::i;:::-;;:::i;4768:972:189:-;4874:15;2146:18;;;:8;:18;;;;;:27;;;:18;;:27;;;;;2138:61;;;;-1:-1:-1;;;2138:61:189;;3837:2:201;2138:61:189;;;3819:21:201;3876:2;3856:18;;;3849:30;3915:23;3895:18;;;3888:51;3956:18;;2138:61:189;;;;;;;;;4897:20:::1;4920:18:::0;;;:8:::1;:18;::::0;;;;;;;4897:41;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;;;;::::1;;;;;;::::0;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;4897:41:189;4981:13:::1;4997:17;5005:8;4997:7;:17::i;:::-;4981:33;;5052:6;:20;;;5044:5;:28;;;;:::i;:::-;5020:52:::0;;5330:23:::1;::::0;::::1;::::0;5313:14;;:40:::1;5309:202;;;5404:23;::::0;::::1;::::0;5387:14;;:40:::1;::::0;5404:23;5387:40:::1;:::i;:::-;5363:21;::::0;::::1;:64:::0;;;5459:21;;:45:::1;::::0;5363:64;5459:45:::1;:::i;:::-;5435:69:::0;;5309:202:::1;5528:6;:16;;;5521:23;;:3;:23;;;5517:57;;;-1:-1:-1::0;5553:21:189;;-1:-1:-1;5546:28:189::1;::::0;-1:-1:-1;5546:28:189::1;5517:57;5591:6;:13;;;5584:20;;:3;:20;;;5580:142;;;5661:21:::0;;5635:23:::1;::::0;::::1;::::0;:47:::1;::::0;5661:21;5635:47:::1;:::i;:::-;5614:18;::::0;;::::1;:68:::0;;;-1:-1:-1;5614:68:189;-1:-1:-1;5690:25:189::1;::::0;-1:-1:-1;5690:25:189::1;5580:142;5734:1;5727:8;;;;;2205:1;4768:972:::0;;;;;:::o;10235:609::-;10368:4;1720:1:198;2267:7;;:19;;2259:63;;;;-1:-1:-1;;;2259:63:198;;4739:2:201;2259:63:198;;;4721:21:201;4778:2;4758:18;;;4751:30;4817:33;4797:18;;;4790:61;4868:18;;2259:63:198;4537:355:201;2259:63:198;1720:1;2389:7;:18;2146::189::1;::::0;;;:8:::1;:18;::::0;;;;:27:::1;;::::0;:18;;:27;;::::1;;;2138:61;;;::::0;-1:-1:-1;;;2138:61:189;;3837:2:201;2138:61:189::1;::::0;::::1;3819:21:201::0;3876:2;3856:18;;;3849:30;3915:23;3895:18;;;3888:51;3956:18;;2138:61:189::1;3635:345:201::0;2138:61:189::1;1861:11:::2;::::0;10349:8;;1861:11:::2;;1847:10;:25;::::0;:71:::2;;-1:-1:-1::0;1890:18:189::2;::::0;;;:8:::2;:18;::::0;;;;:28:::2;;::::0;::::2;;1876:10;:42;1847:71;1832:162;;;::::0;-1:-1:-1;;;1832:162:189;;5099:2:201;1832:162:189::2;::::0;::::2;5081:21:201::0;5138:2;5118:18;;;5111:30;5177:34;5157:18;;;5150:62;5248:30;5228:18;;;5221:58;5296:19;;1832:162:189::2;4897:424:201::0;1832:162:189::2;10380:20:::3;10403:18:::0;;;:8:::3;:18;::::0;;;;;;;10380:41;;::::3;::::0;::::3;::::0;;;;;;::::3;::::0;::::3;::::0;;;::::3;::::0;;;;::::3;::::0;::::3;::::0;;;;;;;;::::3;::::0;::::3;::::0;;;;;::::3;::::0;::::3;::::0;;;;;::::3;::::0;::::3;::::0;::::3;::::0;;::::3;::::0;;;;::::3;::::0;::::3;::::0;;::::3;::::0;;;;;;::::3;::::0;;::::3;::::0;;;::::3;::::0;;;;;;::::3;;;;;;::::0;;;;;:20;10451:34:::3;::::0;10403:18;;10451:9:::3;:34::i;:::-;10427:58;;10491:24;10518:37;10528:8;10538:6;:16;;;10518:9;:37::i;:::-;10569:18;::::0;;;:8:::3;:18;::::0;;;;10562:25;;;::::3;::::0;::::3;::::0;;;::::3;::::0;::::3;::::0;;;::::3;::::0;::::3;::::0;;;::::3;::::0;::::3;::::0;;;;::::3;::::0;::::3;::::0;;;;;::::3;::::0;;;::::3;::::0;::::3;::::0;;;;::::3;::::0;;::::3;;::::0;;;;;;10616:19:::3;::::0;::::3;::::0;10491:64;;-1:-1:-1;10646:20:189;;10642:80:::3;;10687:16;::::0;::::3;::::0;10668:54:::3;::::0;:18:::3;::::0;::::3;::::0;10705:16;10668:18:::3;:54::i;:::-;10772:6;:16;;;10734:88;;10757:6;:13;;;10734:88;;10747:8;10734:88;10790:13;10805:16;10734:88;;;;;;5500:25:201::0;;;5556:2;5541:18;;5534:34;5488:2;5473:18;;5326:248;10734:88:189::3;;;;;;;;10835:4;10828:11;;;;;;-1:-1:-1::0;;1679:1:198;2546:7;:22;10235:609:189;;-1:-1:-1;10235:609:189:o;9128:704::-;9287:4;1720:1:198;2267:7;;:19;;2259:63;;;;-1:-1:-1;;;2259:63:198;;4739:2:201;2259:63:198;;;4721:21:201;4778:2;4758:18;;;4751:30;4817:33;4797:18;;;4790:61;4868:18;;2259:63:198;4537:355:201;2259:63:198;1720:1;2389:7;:18;2146::189::1;::::0;;;:8:::1;:18;::::0;;;;:27:::1;;::::0;:18;;:27;;::::1;;;2138:61;;;::::0;-1:-1:-1;;;2138:61:189;;3837:2:201;2138:61:189::1;::::0;::::1;3819:21:201::0;3876:2;3856:18;;;3849:30;3915:23;3895:18;;;3888:51;3956:18;;2138:61:189::1;3635:345:201::0;2138:61:189::1;1861:11:::2;::::0;9268:8;;1861:11:::2;;1847:10;:25;::::0;:71:::2;;-1:-1:-1::0;1890:18:189::2;::::0;;;:8:::2;:18;::::0;;;;:28:::2;;::::0;::::2;;1876:10;:42;1847:71;1832:162;;;::::0;-1:-1:-1;;;1832:162:189;;5099:2:201;1832:162:189::2;::::0;::::2;5081:21:201::0;5138:2;5118:18;;;5111:30;5177:34;5157:18;;;5150:62;5248:30;5228:18;;;5221:58;5296:19;;1832:162:189::2;4897:424:201::0;1832:162:189::2;9316:1:::3;9307:6;:10;9299:37;;;::::0;-1:-1:-1;;;9299:37:189;;5781:2:201;9299:37:189::3;::::0;::::3;5763:21:201::0;5820:2;5800:18;;;5793:30;5859:16;5839:18;;;5832:44;5893:18;;9299:37:189::3;5579:338:201::0;9299:37:189::3;9342:20;9365:18:::0;;;:8:::3;:18;::::0;;;;;;;9342:41;;::::3;::::0;::::3;::::0;;;;;;::::3;::::0;::::3;::::0;;;::::3;::::0;;;;::::3;::::0;::::3;::::0;;;;;;;;::::3;::::0;::::3;::::0;;;;;::::3;::::0;::::3;::::0;;;;;::::3;::::0;::::3;::::0;::::3;::::0;;::::3;::::0;;;;;;::::3;::::0;::::3;::::0;;::::3;::::0;;;;::::3;::::0;;::::3;::::0;;;::::3;::::0;;;;;;::::3;;;;;;::::0;;;;;:20;9408:37:::3;::::0;9365:18;;9408:9:::3;:37::i;:::-;9390:55;;9470:6;9459:7;:17;;9451:66;;;::::0;-1:-1:-1;;;9451:66:189;;6124:2:201;9451:66:189::3;::::0;::::3;6106:21:201::0;6163:2;6143:18;;;6136:30;6202:34;6182:18;;;6175:62;6273:6;6253:18;;;6246:34;6297:19;;9451:66:189::3;5922:400:201::0;9451:66:189::3;9588:6;9562;:23;;;:32;;;;:::i;:::-;9524:18;::::0;;;:8:::3;:18;::::0;;;;:35:::3;;:70:::0;;;9601:71:::3;;9654:18;::::0;;;:8:::3;:18;::::0;;;;9647:25;;;::::3;::::0;::::3;::::0;;;::::3;::::0;::::3;::::0;;;::::3;::::0;::::3;::::0;;;::::3;::::0;::::3;::::0;;;;::::3;::::0;::::3;::::0;;;;;::::3;::::0;;;::::3;::::0;::::3;::::0;;;;::::3;::::0;;::::3;;::::0;;;;;;9601:71:::3;9679:66;9720:6;:16;;;9738:6;9686;:19;;;9679:40;;;;:66;;;;;:::i;:::-;9785:6;:16;;;9756:54;;9775:8;9756:54;9803:6;9756:54;;;;391:25:201::0;;379:2;364:18;;245:177;9756:54:189::3;;;;;;;;9823:4;9816:11;;;;-1:-1:-1::0;;1679:1:198;2546:7;:22;9128:704:189;;-1:-1:-1;;9128:704:189:o;2825:712::-;2939:14;2961:17;2986:15;3009:20;3037:17;3062:16;3086:24;3118:21;2909:8;2146;:18;2155:8;2146:18;;;;;;;;;;;:27;;;;;;;;;;;;2138:61;;;;-1:-1:-1;;;2138:61:189;;3837:2:201;2138:61:189;;;3819:21:201;3876:2;3856:18;;;3849:30;3915:23;3895:18;;;3888:51;3956:18;;2138:61:189;3635:345:201;2138:61:189;-1:-1:-1;;;3163:18:189::1;::::0;;;-1:-1:-1;;3163:8:189::1;:18;::::0;-1:-1:-1;;3163:18:189;;;;:25:::1;::::0;::::1;::::0;3206:28:::1;::::0;::::1;::::0;3250:26;;3297:31:::1;::::0;::::1;::::0;3346:28:::1;::::0;::::1;::::0;3391:27:::1;::::0;::::1;::::0;3443:35:::1;::::0;::::1;::::0;3163:25;3500:32;;::::1;::::0;3163:25:::1;::::0;;::::1;::::0;3206:28;;::::1;::::0;-1:-1:-1;3250:26:189;;-1:-1:-1;3297:31:189;;;::::1;::::0;3391:27;;3443:35;;3500:32;2825:712::o;3955:334::-;4034:13;2146:18;;;:8;:18;;;;;:27;;;:18;;:27;;;;;2138:61;;;;-1:-1:-1;;;2138:61:189;;3837:2:201;2138:61:189;;;3819:21:201;3876:2;3856:18;;;3849:30;3915:23;3895:18;;;3888:51;3956:18;;2138:61:189;3635:345:201;2138:61:189;4055:20:::1;4078:18:::0;;;:8:::1;:18;::::0;;;;;;;;4055:41;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;;;;::::1;;;;;;::::0;;;;4106:15:::1;:35;4102:49;;4150:1;4143:8;;;;;4102:49;4179:6;:15;;;4161;:33;4157:80;;;4221:16;::::0;::::1;::::0;4203:34:::1;::::0;:15:::1;:34;:::i;:::-;4196:41;;;;;4157:80;4268:6;:16;;;4250:6;:15;;;:34;;;;:::i;:::-;4243:41;;;2205:1;3955:334:::0;;;;:::o;1791:313:190:-;1262:11;;;;1248:10;:25;1240:57;;;;-1:-1:-1;;;1240:57:190;;6529:2:201;1240:57:190;;;6511:21:201;6568:2;6548:18;;;6541:30;6607:21;6587:18;;;6580:49;6646:18;;1240:57:190;6327:343:201;1240:57:190;1896:23:::1;::::0;::::1;1888:56;;;::::0;-1:-1:-1;;;1888:56:190;;6877:2:201;1888:56:190::1;::::0;::::1;6859:21:201::0;6916:2;6896:18;;;6889:30;6955:22;6935:18;;;6928:50;6995:18;;1888:56:190::1;6675:344:201::0;1888:56:190::1;1955:34;::::0;::::1;1161:42;1955:34;1951:149;;;1999:36;:28;::::0;::::1;2028:6:::0;1999:28:::1;:36::i;:::-;1791:313:::0;;;:::o;1951:149::-:1;2056:37;:18;::::0;::::1;2075:9:::0;2086:6;2056:18:::1;:37::i;2253:126:189:-:0;1037:16:200;1094:23;1061:1:190;;1083:34:200;;1075:93;;;;-1:-1:-1;;;1075:93:200;;7226:2:201;1075:93:200;;;7208:21:201;7265:2;7245:18;;;7238:30;7304:34;7284:18;;;7277:62;7375:16;7355:18;;;7348:44;7409:19;;1075:93:200;7024:410:201;1075:93:200;1175:23;:34;;;2336:6:189::1;2320:13;:22:::0;2348:26:::1;2363:10:::0;2348:14:::1;:26::i;:::-;1031:191:200::0;2253:126:189;:::o;7053:1618::-;1262:11:190;;7227:7:189;;1262:11:190;;1248:10;:25;1240:57;;;;-1:-1:-1;;;1240:57:190;;6529:2:201;1240:57:190;;;6511:21:201;6568:2;6548:18;;;6541:30;6607:21;6587:18;;;6580:49;6646:18;;1240:57:190;6327:343:201;1240:57:190;7250:23:189::1;::::0;::::1;7242:62;;;::::0;-1:-1:-1;;;7242:62:189;;7641:2:201;7242:62:189::1;::::0;::::1;7623:21:201::0;7680:2;7660:18;;;7653:30;7719:28;7699:18;;;7692:56;7765:18;;7242:62:189::1;7439:350:201::0;7242:62:189::1;7318:26;::::0;::::1;7339:4;7318:26;;7310:68;;;::::0;-1:-1:-1;;;7310:68:189;;7996:2:201;7310:68:189::1;::::0;::::1;7978:21:201::0;8035:2;8015:18;;;8008:30;8074:31;8054:18;;;8047:59;8123:18;;7310:68:189::1;7794:353:201::0;7310:68:189::1;7392:23;::::0;::::1;7405:10;7392:23;;7384:56;;;::::0;-1:-1:-1;;;7384:56:189;;8354:2:201;7384:56:189::1;::::0;::::1;8336:21:201::0;8393:2;8373:18;;;8366:30;8432:22;8412:18;;;8405:50;8472:18;;7384:56:189::1;8152:344:201::0;7384:56:189::1;7464:1;7454:7;:11;7446:39;;;::::0;-1:-1:-1;;;7446:39:189;;8703:2:201;7446:39:189::1;::::0;::::1;8685:21:201::0;8742:2;8722:18;;;8715:30;8781:17;8761:18;;;8754:45;8816:18;;7446:39:189::1;8501:339:201::0;7446:39:189::1;7512:15;7499:9;:28;;7491:74;;;::::0;-1:-1:-1;;;7491:74:189;;9047:2:201;7491:74:189::1;::::0;::::1;9029:21:201::0;9086:2;9066:18;;;9059:30;9125:34;9105:18;;;9098:62;9196:3;9176:18;;;9169:31;9217:19;;7491:74:189::1;8845:397:201::0;7491:74:189::1;7590:9;7579:8;:20;7571:64;;;::::0;-1:-1:-1;;;7571:64:189;;9449:2:201;7571:64:189::1;::::0;::::1;9431:21:201::0;9488:2;9468:18;;;9461:30;9527:33;9507:18;;;9500:61;9578:18;;7571:64:189::1;9247:355:201::0;7571:64:189::1;-1:-1:-1::0;;;;;;;;;;;;;;;;;7697:20:189::1;7708:9:::0;7697:8;:20:::1;:::i;:::-;7681:36:::0;;;7791:24;::::1;;7783:68;;;::::0;-1:-1:-1;;;7783:68:189;;9809:2:201;7783:68:189::1;::::0;::::1;9791:21:201::0;9848:2;9828:18;;;9821:30;9887:33;9867:18;;;9860:61;9938:18;;7783:68:189::1;9607:355:201::0;7783:68:189::1;7932:13:::0;;7922:23:::1;::::0;:7;:23:::1;:::i;:::-;:28:::0;7914:75:::1;;;::::0;-1:-1:-1;;;7914:75:189;;10475:2:201;7914:75:189::1;::::0;::::1;10457:21:201::0;10514:2;10494:18;;;10487:30;10553:34;10533:18;;;10526:62;10624:4;10604:18;;;10597:32;10646:19;;7914:75:189::1;10273:398:201::0;7914:75:189::1;8027:13:::0;;8017:23:::1;::::0;:7;:23:::1;:::i;:::-;7996:4;:18;;:44;;;::::0;::::1;8093:16;8112:13;;8093:32;;8152:279;;;;;;;;8209:7;8152:279;;;;8261:4;:18;;;8152:279;;;;8185:7;8152:279;;;;8355:9;8152:279;;;;8382:8;8152:279;;;;8298:9;8152:279;;;;;;8331:4;8152:279;;;;;;8412:12;8152:279;;;;;;8234:4;8152:279;;;;::::0;8131:8:::1;:18;8140:8;8131:18;;;;;;;;;;;:300;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8478:13;;:15;;;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;8505:140:189::1;::::0;;11232:25:201;;;8505:140:189::1;11293:55:201::0;;;11288:2;11273:18;;11266:83;11365:18;;;11358:34;;;11423:2;11408:18;;11401:34;;;8505:140:189;;::::1;::::0;8549:4:::1;::::0;8525:8;;8505:140:::1;::::0;11219:3:201;11204:19;8505:140:189::1;;;;;;;8658:8:::0;7053:1618;-1:-1:-1;;;;;;;7053:1618:189:o;1599:137:190:-;1262:11;;;;1248:10;:25;1240:57;;;;-1:-1:-1;;;1240:57:190;;6529:2:201;1240:57:190;;;6511:21:201;6568:2;6548:18;;;6541:30;6607:21;6587:18;;;6580:49;6646:18;;1240:57:190;6327:343:201;1240:57:190;1695:36:::1;:17;::::0;::::1;1713:9:::0;1724:6;1695:17:::1;:36::i;770:169:199:-:0;875:58;;11650:42:201;11638:55;;875:58:199;;;11620:74:201;11710:18;;;11703:34;;;848:86:199;;868:5;;898:23;;11593:18:201;;875:58:199;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;848:19;:86::i;2306:298:197:-;2416:6;2391:21;:31;;2383:73;;;;-1:-1:-1;;;2383:73:197;;11950:2:201;2383:73:197;;;11932:21:201;11989:2;11969:18;;;11962:30;12028:31;12008:18;;;12001:59;12077:18;;2383:73:197;11748:353:201;2383:73:197;2464:12;2482:9;:14;;2504:6;2482:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2463:52;;;2529:7;2521:78;;;;-1:-1:-1;;;2521:78:197;;12518:2:201;2521:78:197;;;12500:21:201;12557:2;12537:18;;;12530:30;12596:34;12576:18;;;12569:62;12667:28;12647:18;;;12640:56;12713:19;;2521:78:197;12316:422:201;2218:109:190;2272:11;:19;;;;;;;;;;;;;2302:20;;;;-1:-1:-1;;2302:20:190;2218:109;:::o;1402:535:199:-;1705:10;;;1704:62;;-1:-1:-1;1721:39:199;;;;;1745:4;1721:39;;;12978:34:201;1721:15:199;13048::201;;;13028:18;;;13021:43;1721:15:199;;;;;12890:18:201;;1721:39:199;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;1704:62;1689:147;;;;-1:-1:-1;;;1689:147:199;;13466:2:201;1689:147:199;;;13448:21:201;13505:2;13485:18;;;13478:30;13544:34;13524:18;;;13517:62;13615:24;13595:18;;;13588:52;13657:19;;1689:147:199;13264:418:201;1689:147:199;1869:62;;11650:42:201;11638:55;;1869:62:199;;;11620:74:201;11710:18;;;11703:34;;;1842:90:199;;1862:5;;1892:22;;11593:18:201;;1869:62:199;11446:297:201;3048:668:199;3451:23;3477:69;3505:4;3477:69;;;;;;;;;;;;;;;;;3485:5;3477:27;;;;:69;;;;;:::i;:::-;3556:17;;3451:95;;-1:-1:-1;3556:21:199;3552:160;;3639:10;3628:30;;;;;;;;;;;;:::i;:::-;3620:85;;;;-1:-1:-1;;;3620:85:199;;14171:2:201;3620:85:199;;;14153:21:201;14210:2;14190:18;;;14183:30;14249:34;14229:18;;;14222:62;14320:12;14300:18;;;14293:40;14350:19;;3620:85:199;13969:406:201;3683:203:197;3802:12;3829:52;3851:6;3859:4;3865:1;3868:12;3829:21;:52::i;:::-;3822:59;;3683:203;;;;;;:::o;4692:463::-;4839:12;4892:5;4867:21;:30;;4859:81;;;;-1:-1:-1;;;4859:81:197;;14582:2:201;4859:81:197;;;14564:21:201;14621:2;14601:18;;;14594:30;14660:34;14640:18;;;14633:62;14731:8;14711:18;;;14704:36;14757:19;;4859:81:197;14380:402:201;4859:81:197;1395:19;;;;4946:60;;;;-1:-1:-1;;;4946:60:197;;14989:2:201;4946:60:197;;;14971:21:201;15028:2;15008:18;;;15001:30;15067:31;15047:18;;;15040:59;15116:18;;4946:60:197;14787:353:201;4946:60:197;5014:12;5028:23;5055:6;:11;;5074:5;5081:4;5055:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5013:73;;;;5099:51;5116:7;5125:10;5137:12;5099:16;:51::i;:::-;5092:58;4692:463;-1:-1:-1;;;;;;;4692:463:197:o;7143:582::-;7275:12;7299:7;7295:426;;;-1:-1:-1;7323:10:197;7316:17;;7295:426;7418:17;;:21;7414:301;;7586:10;7580:17;7636:15;7623:10;7619:2;7615:19;7608:44;7414:301;7693:12;7686:20;;-1:-1:-1;;;7686:20:197;;;;;;;;:::i;427:154:201:-;513:42;506:5;502:54;495:5;492:65;482:93;;571:1;568;561:12;482:93;427:154;:::o;586:315::-;654:6;662;715:2;703:9;694:7;690:23;686:32;683:52;;;731:1;728;721:12;683:52;767:9;754:23;744:33;;827:2;816:9;812:18;799:32;840:31;865:5;840:31;:::i;:::-;890:5;880:15;;;586:315;;;;;:::o;906:180::-;965:6;1018:2;1006:9;997:7;993:23;989:32;986:52;;;1034:1;1031;1024:12;986:52;-1:-1:-1;1057:23:201;;906:180;-1:-1:-1;906:180:201:o;1283:248::-;1351:6;1359;1412:2;1400:9;1391:7;1387:23;1383:32;1380:52;;;1428:1;1425;1418:12;1380:52;-1:-1:-1;;1451:23:201;;;1521:2;1506:18;;;1493:32;;-1:-1:-1;1283:248:201:o;2308:471::-;2400:6;2408;2416;2469:2;2457:9;2448:7;2444:23;2440:32;2437:52;;;2485:1;2482;2475:12;2437:52;2524:9;2511:23;2543:31;2568:5;2543:31;:::i;:::-;2593:5;-1:-1:-1;2650:2:201;2635:18;;2622:32;2663:33;2622:32;2663:33;:::i;:::-;2308:471;;2715:7;;-1:-1:-1;;;2769:2:201;2754:18;;;;2741:32;;2308:471::o;2784:247::-;2843:6;2896:2;2884:9;2875:7;2871:23;2867:32;2864:52;;;2912:1;2909;2902:12;2864:52;2951:9;2938:23;2970:31;2995:5;2970:31;:::i;3036:594::-;3131:6;3139;3147;3155;3163;3216:3;3204:9;3195:7;3191:23;3187:33;3184:53;;;3233:1;3230;3223:12;3184:53;3272:9;3259:23;3291:31;3316:5;3291:31;:::i;:::-;3341:5;-1:-1:-1;3393:2:201;3378:18;;3365:32;;-1:-1:-1;3449:2:201;3434:18;;3421:32;3462:33;3421:32;3462:33;:::i;:::-;3036:594;;;;-1:-1:-1;3514:7:201;;3568:2;3553:18;;3540:32;;-1:-1:-1;3619:3:201;3604:19;3591:33;;3036:594;-1:-1:-1;;3036:594:201:o;3985:184::-;4037:77;4034:1;4027:88;4134:4;4131:1;4124:15;4158:4;4155:1;4148:15;4174:228;4214:7;4340:1;4272:66;4268:74;4265:1;4262:81;4257:1;4250:9;4243:17;4239:105;4236:131;;;4347:18;;:::i;:::-;-1:-1:-1;4387:9:201;;4174:228::o;4407:125::-;4447:4;4475:1;4472;4469:8;4466:34;;;4480:18;;:::i;:::-;-1:-1:-1;4517:9:201;;4407:125::o;9967:184::-;10019:77;10016:1;10009:88;10116:4;10113:1;10106:15;10140:4;10137:1;10130:15;10156:112;10188:1;10214;10204:35;;10219:18;;:::i;:::-;-1:-1:-1;10253:9:201;;10156:112::o;10676:120::-;10716:1;10742;10732:35;;10747:18;;:::i;:::-;-1:-1:-1;10781:9:201;;10676:120::o;10801:195::-;10840:3;10871:66;10864:5;10861:77;10858:103;;;10941:18;;:::i;:::-;-1:-1:-1;10988:1:201;10977:13;;10801:195::o;13075:184::-;13145:6;13198:2;13186:9;13177:7;13173:23;13169:32;13166:52;;;13214:1;13211;13204:12;13166:52;-1:-1:-1;13237:16:201;;13075:184;-1:-1:-1;13075:184:201:o;13687:277::-;13754:6;13807:2;13795:9;13786:7;13782:23;13778:32;13775:52;;;13823:1;13820;13813:12;13775:52;13855:9;13849:16;13908:5;13901:13;13894:21;13887:5;13884:32;13874:60;;13930:1;13927;13920:12;15145:258;15217:1;15227:113;15241:6;15238:1;15235:13;15227:113;;;15317:11;;;15311:18;15298:11;;;15291:39;15263:2;15256:10;15227:113;;;15358:6;15355:1;15352:13;15349:48;;;15393:1;15384:6;15379:3;15375:16;15368:27;15349:48;;15145:258;;;:::o;15408:274::-;15537:3;15575:6;15569:13;15591:53;15637:6;15632:3;15625:4;15617:6;15613:17;15591:53;:::i;:::-;15660:16;;;;;15408:274;-1:-1:-1;;15408:274:201:o;15687:442::-;15836:2;15825:9;15818:21;15799:4;15868:6;15862:13;15911:6;15906:2;15895:9;15891:18;15884:34;15927:66;15986:6;15981:2;15970:9;15966:18;15961:2;15953:6;15949:15;15927:66;:::i;:::-;16045:2;16033:15;16050:66;16029:88;16014:104;;;;16120:2;16010:113;;15687:442;-1:-1:-1;;15687:442:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"1744000","executionCost":"28946","totalCost":"1772946"},"external":{"ETH_MOCK_ADDRESS()":"216","REVISION()":"261","approve(address,address,uint256)":"infinite","balanceOf(uint256,address)":"infinite","cancelStream(uint256)":"infinite","createStream(address,uint256,address,uint256,uint256)":"infinite","deltaOf(uint256)":"19877","getFundsAdmin()":"2309","getNextStreamId()":"2327","getStream(uint256)":"19799","initialize(address)":"72062","transfer(address,address,uint256)":"infinite","withdrawFromStream(uint256,uint256)":"infinite"}},"methodIdentifiers":{"ETH_MOCK_ADDRESS()":"51ee886b","REVISION()":"dde43cba","approve(address,address,uint256)":"e1f21c67","balanceOf(uint256,address)":"3656eec2","cancelStream(uint256)":"6db9241b","createStream(address,uint256,address,uint256,uint256)":"cc1b4bf6","deltaOf(uint256)":"a82ccd4d","getFundsAdmin()":"06bc2ee0","getNextStreamId()":"0932f92b","getStream(uint256)":"894e9a0d","initialize(address)":"c4d66de8","transfer(address,address,uint256)":"beabacc8","withdrawFromStream(uint256,uint256)":"7a9b2c6c"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"senderBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"recipientBalance\",\"type\":\"uint256\"}],\"name\":\"CancelStream\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stopTime\",\"type\":\"uint256\"}],\"name\":\"CreateStream\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fundsAdmin\",\"type\":\"address\"}],\"name\":\"NewFundsAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawFromStream\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ETH_MOCK_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"cancelStream\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stopTime\",\"type\":\"uint256\"}],\"name\":\"createStream\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"deltaOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"delta\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFundsAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextStreamId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"getStream\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stopTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remainingBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ratePerSecond\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fundsAdmin\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFromStream\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"BGD Labs*\",\"kind\":\"dev\",\"methods\":{\"approve(address,address,uint256)\":{\"details\":\"Function for the funds admin to give ERC20 allowance to other parties\",\"params\":{\"amount\":\"Allowance to approve*\",\"recipient\":\"Allowance's recipient\",\"token\":\"The address of the token to give allowance from\"}},\"balanceOf(uint256,address)\":{\"details\":\"Throws if the id does not point to a valid stream.\",\"params\":{\"streamId\":\"The id of the stream for which to query the balance.\",\"who\":\"The address for which to query the balance.\"}},\"cancelStream(uint256)\":{\"details\":\"Throws if the id does not point to a valid stream.  Throws if the caller is not the funds admin or the recipient of the stream.  Throws if there is a token transfer failure.\",\"params\":{\"streamId\":\"The id of the stream to cancel.\"}},\"createStream(address,uint256,address,uint256,uint256)\":{\"details\":\"Throws if the recipient is the zero address, the contract itself or the caller.  Throws if the deposit is 0.  Throws if the start time is before `block.timestamp`.  Throws if the stop time is before the start time.  Throws if the duration calculation has a math error.  Throws if the deposit is smaller than the duration.  Throws if the deposit is not a multiple of the duration.  Throws if the rate calculation has a math error.  Throws if the next stream id calculation has a math error.  Throws if the contract is not allowed to transfer enough tokens.  Throws if there is a token transfer failure.\",\"params\":{\"deposit\":\"The amount of money to be streamed.\",\"recipient\":\"The address towards which the money is streamed.\",\"startTime\":\"The unix timestamp for when the stream starts.\",\"stopTime\":\"The unix timestamp for when the stream stops.\",\"tokenAddress\":\"The ERC20 token to use as streaming currency.\"}},\"deltaOf(uint256)\":{\"details\":\"Throws if the id does not point to a valid stream.\",\"params\":{\"streamId\":\"The id of the stream for which to query the delta.\"}},\"getFundsAdmin()\":{\"returns\":{\"_0\":\"address The address of the funds admin*\"}},\"getStream(uint256)\":{\"details\":\"Throws if the id does not point to a valid stream.\",\"params\":{\"streamId\":\"The id of the stream to query.\"}},\"transfer(address,address,uint256)\":{\"params\":{\"amount\":\"Amount to transfer*\",\"recipient\":\"Transfer's recipient\",\"token\":\"The address of the token to transfer\"}},\"withdrawFromStream(uint256,uint256)\":{\"details\":\"Throws if the id does not point to a valid stream.  Throws if the caller is not the funds admin or the recipient of the stream.  Throws if the amount exceeds the available balance.  Throws if there is a token transfer failure.\",\"params\":{\"amount\":\"The amount of tokens to withdraw.\",\"streamId\":\"The id of the stream to withdraw tokens from.\"}}},\"title\":\"AaveEcosystemReserve v2\",\"version\":1},\"userdoc\":{\"events\":{\"NewFundsAdmin(address)\":{\"notice\":\"Emitted when the funds admin changes\"}},\"kind\":\"user\",\"methods\":{\"ETH_MOCK_ADDRESS()\":{\"notice\":\"Returns the mock ETH reference address\"},\"balanceOf(uint256,address)\":{\"notice\":\"Returns the available funds for the given stream id and address.Returns the total funds allocated to `who` as uint256.\"},\"cancelStream(uint256)\":{\"notice\":\"Cancels the stream and transfers the tokens back on a pro rata basis.Returns bool true=success, otherwise false.\"},\"createStream(address,uint256,address,uint256,uint256)\":{\"notice\":\"Creates a new stream funded by this contracts itself and paid towards `recipient`.Returns the uint256 id of the newly created stream.\"},\"deltaOf(uint256)\":{\"notice\":\"Returns either the delta in seconds between `block.timestamp` and `startTime` or  between `stopTime` and `startTime, whichever is smaller. If `block.timestamp` is before  `startTime`, it returns 0.Returns the time delta in seconds.\"},\"getFundsAdmin()\":{\"notice\":\"Return the funds admin, only entity to be able to interact with this contract (controller of reserve)\"},\"getNextStreamId()\":{\"notice\":\"Returns the next available stream idReturns the stream id.\"},\"getStream(uint256)\":{\"notice\":\"Returns the stream with all its properties.Returns the stream object.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Function for the funds admin to transfer ERC20 tokens to other parties\"},\"withdrawFromStream(uint256,uint256)\":{\"notice\":\"Withdraws from the contract to the recipient's account.\"}},\"notice\":\"Stores ERC20 tokens of an ecosystem reserve, adding streaming capabilities. Modification of Sablier https://github.com/sablierhq/sablier/blob/develop/packages/protocol/contracts/Sablier.sol Original can be found also deployed on https://etherscan.io/address/0xCD18eAa163733Da39c232722cBC4E8940b1D8888 Modifications: - Sablier \\\"pulls\\\" the funds from the creator of the stream at creation. In the Aave case, we already have the funds. - Anybody can create streams on Sablier. Here, only the funds admin (Aave governance via controller) can - Adapted codebase to Solidity 0.8.11, mainly removing SafeMath and CarefulMath to use native safe math - Same as with creation, on Sablier the `sender` and `recipient` can cancel a stream. Here, only fund admin and recipient\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/treasury/AaveEcosystemReserveV2.sol\":\"AaveEcosystemReserveV2\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/treasury/AaveEcosystemReserveV2.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IStreamable} from './interfaces/IStreamable.sol';\\nimport {AdminControlledEcosystemReserve} from './AdminControlledEcosystemReserve.sol';\\nimport {ReentrancyGuard} from './libs/ReentrancyGuard.sol';\\nimport {SafeERC20} from './libs/SafeERC20.sol';\\n\\n/**\\n * @title AaveEcosystemReserve v2\\n * @notice Stores ERC20 tokens of an ecosystem reserve, adding streaming capabilities.\\n * Modification of Sablier https://github.com/sablierhq/sablier/blob/develop/packages/protocol/contracts/Sablier.sol\\n * Original can be found also deployed on https://etherscan.io/address/0xCD18eAa163733Da39c232722cBC4E8940b1D8888\\n * Modifications:\\n * - Sablier \\\"pulls\\\" the funds from the creator of the stream at creation. In the Aave case, we already have the funds.\\n * - Anybody can create streams on Sablier. Here, only the funds admin (Aave governance via controller) can\\n * - Adapted codebase to Solidity 0.8.11, mainly removing SafeMath and CarefulMath to use native safe math\\n * - Same as with creation, on Sablier the `sender` and `recipient` can cancel a stream. Here, only fund admin and recipient\\n * @author BGD Labs\\n **/\\ncontract AaveEcosystemReserveV2 is AdminControlledEcosystemReserve, ReentrancyGuard, IStreamable {\\n  using SafeERC20 for IERC20;\\n\\n  /*** Storage Properties ***/\\n\\n  /**\\n   * @notice Counter for new stream ids.\\n   */\\n  uint256 private _nextStreamId;\\n\\n  /**\\n   * @notice The stream objects identifiable by their unsigned integer ids.\\n   */\\n  mapping(uint256 => Stream) private _streams;\\n\\n  /*** Modifiers ***/\\n\\n  /**\\n   * @dev Throws if the caller is not the funds admin of the recipient of the stream.\\n   */\\n  modifier onlyAdminOrRecipient(uint256 streamId) {\\n    require(\\n      msg.sender == _fundsAdmin || msg.sender == _streams[streamId].recipient,\\n      'caller is not the funds admin or the recipient of the stream'\\n    );\\n    _;\\n  }\\n\\n  /**\\n   * @dev Throws if the provided id does not point to a valid stream.\\n   */\\n  modifier streamExists(uint256 streamId) {\\n    require(_streams[streamId].isEntity, 'stream does not exist');\\n    _;\\n  }\\n\\n  /*** Contract Logic Starts Here */\\n\\n  function initialize(address fundsAdmin) external initializer {\\n    _nextStreamId = 100000;\\n    _setFundsAdmin(fundsAdmin);\\n  }\\n\\n  /*** View Functions ***/\\n\\n  /**\\n   * @notice Returns the next available stream id\\n   * @notice Returns the stream id.\\n   */\\n  function getNextStreamId() external view returns (uint256) {\\n    return _nextStreamId;\\n  }\\n\\n  /**\\n   * @notice Returns the stream with all its properties.\\n   * @dev Throws if the id does not point to a valid stream.\\n   * @param streamId The id of the stream to query.\\n   * @notice Returns the stream object.\\n   */\\n  function getStream(\\n    uint256 streamId\\n  )\\n    external\\n    view\\n    streamExists(streamId)\\n    returns (\\n      address sender,\\n      address recipient,\\n      uint256 deposit,\\n      address tokenAddress,\\n      uint256 startTime,\\n      uint256 stopTime,\\n      uint256 remainingBalance,\\n      uint256 ratePerSecond\\n    )\\n  {\\n    sender = _streams[streamId].sender;\\n    recipient = _streams[streamId].recipient;\\n    deposit = _streams[streamId].deposit;\\n    tokenAddress = _streams[streamId].tokenAddress;\\n    startTime = _streams[streamId].startTime;\\n    stopTime = _streams[streamId].stopTime;\\n    remainingBalance = _streams[streamId].remainingBalance;\\n    ratePerSecond = _streams[streamId].ratePerSecond;\\n  }\\n\\n  /**\\n   * @notice Returns either the delta in seconds between `block.timestamp` and `startTime` or\\n   *  between `stopTime` and `startTime, whichever is smaller. If `block.timestamp` is before\\n   *  `startTime`, it returns 0.\\n   * @dev Throws if the id does not point to a valid stream.\\n   * @param streamId The id of the stream for which to query the delta.\\n   * @notice Returns the time delta in seconds.\\n   */\\n  function deltaOf(uint256 streamId) public view streamExists(streamId) returns (uint256 delta) {\\n    Stream memory stream = _streams[streamId];\\n    if (block.timestamp <= stream.startTime) return 0;\\n    if (block.timestamp < stream.stopTime) return block.timestamp - stream.startTime;\\n    return stream.stopTime - stream.startTime;\\n  }\\n\\n  struct BalanceOfLocalVars {\\n    uint256 recipientBalance;\\n    uint256 withdrawalAmount;\\n    uint256 senderBalance;\\n  }\\n\\n  /**\\n   * @notice Returns the available funds for the given stream id and address.\\n   * @dev Throws if the id does not point to a valid stream.\\n   * @param streamId The id of the stream for which to query the balance.\\n   * @param who The address for which to query the balance.\\n   * @notice Returns the total funds allocated to `who` as uint256.\\n   */\\n  function balanceOf(\\n    uint256 streamId,\\n    address who\\n  ) public view streamExists(streamId) returns (uint256 balance) {\\n    Stream memory stream = _streams[streamId];\\n    BalanceOfLocalVars memory vars;\\n\\n    uint256 delta = deltaOf(streamId);\\n    vars.recipientBalance = delta * stream.ratePerSecond;\\n\\n    /*\\n     * If the stream `balance` does not equal `deposit`, it means there have been withdrawals.\\n     * We have to subtract the total amount withdrawn from the amount of money that has been\\n     * streamed until now.\\n     */\\n    if (stream.deposit > stream.remainingBalance) {\\n      vars.withdrawalAmount = stream.deposit - stream.remainingBalance;\\n      vars.recipientBalance = vars.recipientBalance - vars.withdrawalAmount;\\n    }\\n\\n    if (who == stream.recipient) return vars.recipientBalance;\\n    if (who == stream.sender) {\\n      vars.senderBalance = stream.remainingBalance - vars.recipientBalance;\\n      return vars.senderBalance;\\n    }\\n    return 0;\\n  }\\n\\n  /*** Public Effects & Interactions Functions ***/\\n\\n  struct CreateStreamLocalVars {\\n    uint256 duration;\\n    uint256 ratePerSecond;\\n  }\\n\\n  /**\\n   * @notice Creates a new stream funded by this contracts itself and paid towards `recipient`.\\n   * @dev Throws if the recipient is the zero address, the contract itself or the caller.\\n   *  Throws if the deposit is 0.\\n   *  Throws if the start time is before `block.timestamp`.\\n   *  Throws if the stop time is before the start time.\\n   *  Throws if the duration calculation has a math error.\\n   *  Throws if the deposit is smaller than the duration.\\n   *  Throws if the deposit is not a multiple of the duration.\\n   *  Throws if the rate calculation has a math error.\\n   *  Throws if the next stream id calculation has a math error.\\n   *  Throws if the contract is not allowed to transfer enough tokens.\\n   *  Throws if there is a token transfer failure.\\n   * @param recipient The address towards which the money is streamed.\\n   * @param deposit The amount of money to be streamed.\\n   * @param tokenAddress The ERC20 token to use as streaming currency.\\n   * @param startTime The unix timestamp for when the stream starts.\\n   * @param stopTime The unix timestamp for when the stream stops.\\n   * @notice Returns the uint256 id of the newly created stream.\\n   */\\n  function createStream(\\n    address recipient,\\n    uint256 deposit,\\n    address tokenAddress,\\n    uint256 startTime,\\n    uint256 stopTime\\n  ) external onlyFundsAdmin returns (uint256) {\\n    require(recipient != address(0), 'stream to the zero address');\\n    require(recipient != address(this), 'stream to the contract itself');\\n    require(recipient != msg.sender, 'stream to the caller');\\n    require(deposit > 0, 'deposit is zero');\\n    require(startTime >= block.timestamp, 'start time before block.timestamp');\\n    require(stopTime > startTime, 'stop time before the start time');\\n\\n    CreateStreamLocalVars memory vars;\\n    vars.duration = stopTime - startTime;\\n\\n    /* Without this, the rate per second would be zero. */\\n    require(deposit >= vars.duration, 'deposit smaller than time delta');\\n\\n    /* This condition avoids dealing with remainders */\\n    require(deposit % vars.duration == 0, 'deposit not multiple of time delta');\\n\\n    vars.ratePerSecond = deposit / vars.duration;\\n\\n    /* Create and store the stream object. */\\n    uint256 streamId = _nextStreamId;\\n    _streams[streamId] = Stream({\\n      remainingBalance: deposit,\\n      deposit: deposit,\\n      isEntity: true,\\n      ratePerSecond: vars.ratePerSecond,\\n      recipient: recipient,\\n      sender: address(this),\\n      startTime: startTime,\\n      stopTime: stopTime,\\n      tokenAddress: tokenAddress\\n    });\\n\\n    /* Increment the next stream id. */\\n    _nextStreamId++;\\n\\n    emit CreateStream(\\n      streamId,\\n      address(this),\\n      recipient,\\n      deposit,\\n      tokenAddress,\\n      startTime,\\n      stopTime\\n    );\\n    return streamId;\\n  }\\n\\n  /**\\n   * @notice Withdraws from the contract to the recipient's account.\\n   * @dev Throws if the id does not point to a valid stream.\\n   *  Throws if the caller is not the funds admin or the recipient of the stream.\\n   *  Throws if the amount exceeds the available balance.\\n   *  Throws if there is a token transfer failure.\\n   * @param streamId The id of the stream to withdraw tokens from.\\n   * @param amount The amount of tokens to withdraw.\\n   */\\n  function withdrawFromStream(\\n    uint256 streamId,\\n    uint256 amount\\n  ) external nonReentrant streamExists(streamId) onlyAdminOrRecipient(streamId) returns (bool) {\\n    require(amount > 0, 'amount is zero');\\n    Stream memory stream = _streams[streamId];\\n\\n    uint256 balance = balanceOf(streamId, stream.recipient);\\n    require(balance >= amount, 'amount exceeds the available balance');\\n\\n    _streams[streamId].remainingBalance = stream.remainingBalance - amount;\\n\\n    if (_streams[streamId].remainingBalance == 0) delete _streams[streamId];\\n\\n    IERC20(stream.tokenAddress).safeTransfer(stream.recipient, amount);\\n    emit WithdrawFromStream(streamId, stream.recipient, amount);\\n    return true;\\n  }\\n\\n  /**\\n   * @notice Cancels the stream and transfers the tokens back on a pro rata basis.\\n   * @dev Throws if the id does not point to a valid stream.\\n   *  Throws if the caller is not the funds admin or the recipient of the stream.\\n   *  Throws if there is a token transfer failure.\\n   * @param streamId The id of the stream to cancel.\\n   * @notice Returns bool true=success, otherwise false.\\n   */\\n  function cancelStream(\\n    uint256 streamId\\n  ) external nonReentrant streamExists(streamId) onlyAdminOrRecipient(streamId) returns (bool) {\\n    Stream memory stream = _streams[streamId];\\n    uint256 senderBalance = balanceOf(streamId, stream.sender);\\n    uint256 recipientBalance = balanceOf(streamId, stream.recipient);\\n\\n    delete _streams[streamId];\\n\\n    IERC20 token = IERC20(stream.tokenAddress);\\n    if (recipientBalance > 0) token.safeTransfer(stream.recipient, recipientBalance);\\n\\n    emit CancelStream(streamId, stream.sender, stream.recipient, senderBalance, recipientBalance);\\n    return true;\\n  }\\n}\\n\",\"keccak256\":\"0xa3bff65c621a97378e69e11074fe71c5eaadb723d1b89672541f9acb34b1706e\",\"license\":\"GPL-3.0\"},\"contracts/treasury/AdminControlledEcosystemReserve.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IAdminControlledEcosystemReserve} from './interfaces/IAdminControlledEcosystemReserve.sol';\\nimport {VersionedInitializable} from './libs/VersionedInitializable.sol';\\nimport {SafeERC20} from './libs/SafeERC20.sol';\\nimport {ReentrancyGuard} from './libs/ReentrancyGuard.sol';\\nimport {Address} from './libs/Address.sol';\\n\\n/**\\n * @title AdminControlledEcosystemReserve\\n * @notice Stores ERC20 tokens, and allows to dispose of them via approval or transfer dynamics\\n * Adapted to be an implementation of a transparent proxy\\n * @dev Done abstract to add an `initialize()` function on the child, with `initializer` modifier\\n * @author BGD Labs\\n **/\\nabstract contract AdminControlledEcosystemReserve is\\n  VersionedInitializable,\\n  IAdminControlledEcosystemReserve\\n{\\n  using SafeERC20 for IERC20;\\n  using Address for address payable;\\n\\n  address internal _fundsAdmin;\\n\\n  uint256 public constant REVISION = 1;\\n\\n  /// @inheritdoc IAdminControlledEcosystemReserve\\n  address public constant ETH_MOCK_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;\\n\\n  modifier onlyFundsAdmin() {\\n    require(msg.sender == _fundsAdmin, 'ONLY_BY_FUNDS_ADMIN');\\n    _;\\n  }\\n\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  /// @inheritdoc IAdminControlledEcosystemReserve\\n  function getFundsAdmin() external view returns (address) {\\n    return _fundsAdmin;\\n  }\\n\\n  /// @inheritdoc IAdminControlledEcosystemReserve\\n  function approve(IERC20 token, address recipient, uint256 amount) external onlyFundsAdmin {\\n    token.safeApprove(recipient, amount);\\n  }\\n\\n  /// @inheritdoc IAdminControlledEcosystemReserve\\n  function transfer(IERC20 token, address recipient, uint256 amount) external onlyFundsAdmin {\\n    require(recipient != address(0), 'INVALID_0X_RECIPIENT');\\n\\n    if (address(token) == ETH_MOCK_ADDRESS) {\\n      payable(recipient).sendValue(amount);\\n    } else {\\n      token.safeTransfer(recipient, amount);\\n    }\\n  }\\n\\n  /// @dev needed in order to receive ETH from the Aave v1 ecosystem reserve\\n  receive() external payable {}\\n\\n  function _setFundsAdmin(address admin) internal {\\n    _fundsAdmin = admin;\\n    emit NewFundsAdmin(admin);\\n  }\\n}\\n\",\"keccak256\":\"0xd2a27f2964946752412b11f2528e6c61b49d79c54576bbab1750f8be2651a8aa\",\"license\":\"GPL-3.0\"},\"contracts/treasury/interfaces/IAdminControlledEcosystemReserve.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\n\\ninterface IAdminControlledEcosystemReserve {\\n  /** @notice Emitted when the funds admin changes\\n   * @param fundsAdmin The new funds admin\\n   **/\\n  event NewFundsAdmin(address indexed fundsAdmin);\\n\\n  /** @notice Returns the mock ETH reference address\\n   * @return address The address\\n   **/\\n  function ETH_MOCK_ADDRESS() external pure returns (address);\\n\\n  /**\\n   * @notice Return the funds admin, only entity to be able to interact with this contract (controller of reserve)\\n   * @return address The address of the funds admin\\n   **/\\n  function getFundsAdmin() external view returns (address);\\n\\n  /**\\n   * @dev Function for the funds admin to give ERC20 allowance to other parties\\n   * @param token The address of the token to give allowance from\\n   * @param recipient Allowance's recipient\\n   * @param amount Allowance to approve\\n   **/\\n  function approve(IERC20 token, address recipient, uint256 amount) external;\\n\\n  /**\\n   * @notice Function for the funds admin to transfer ERC20 tokens to other parties\\n   * @param token The address of the token to transfer\\n   * @param recipient Transfer's recipient\\n   * @param amount Amount to transfer\\n   **/\\n  function transfer(IERC20 token, address recipient, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0xe826cd01ee12902faac76b8ee3f26745f08134a5c7610d111605cae74a5e3268\",\"license\":\"GPL-3.0\"},\"contracts/treasury/interfaces/IStreamable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.10;\\n\\ninterface IStreamable {\\n  struct Stream {\\n    uint256 deposit;\\n    uint256 ratePerSecond;\\n    uint256 remainingBalance;\\n    uint256 startTime;\\n    uint256 stopTime;\\n    address recipient;\\n    address sender;\\n    address tokenAddress;\\n    bool isEntity;\\n  }\\n\\n  event CreateStream(\\n    uint256 indexed streamId,\\n    address indexed sender,\\n    address indexed recipient,\\n    uint256 deposit,\\n    address tokenAddress,\\n    uint256 startTime,\\n    uint256 stopTime\\n  );\\n\\n  event WithdrawFromStream(uint256 indexed streamId, address indexed recipient, uint256 amount);\\n\\n  event CancelStream(\\n    uint256 indexed streamId,\\n    address indexed sender,\\n    address indexed recipient,\\n    uint256 senderBalance,\\n    uint256 recipientBalance\\n  );\\n\\n  function balanceOf(uint256 streamId, address who) external view returns (uint256 balance);\\n\\n  function getStream(\\n    uint256 streamId\\n  )\\n    external\\n    view\\n    returns (\\n      address sender,\\n      address recipient,\\n      uint256 deposit,\\n      address token,\\n      uint256 startTime,\\n      uint256 stopTime,\\n      uint256 remainingBalance,\\n      uint256 ratePerSecond\\n    );\\n\\n  function createStream(\\n    address recipient,\\n    uint256 deposit,\\n    address tokenAddress,\\n    uint256 startTime,\\n    uint256 stopTime\\n  ) external returns (uint256 streamId);\\n\\n  function withdrawFromStream(uint256 streamId, uint256 funds) external returns (bool);\\n\\n  function cancelStream(uint256 streamId) external returns (bool);\\n\\n  function initialize(address fundsAdmin) external;\\n}\\n\",\"keccak256\":\"0xe4e14f0dc7e4ffdec867f6b547afa37be968d1f293b57a75ff39eafb09c4d37e\",\"license\":\"MIT\"},\"contracts/treasury/libs/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n   *\\n   * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n   * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n   * constructor.\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize/address.code.length, which returns 0\\n    // for contracts in construction, since the code is only stored at the end\\n    // of the constructor execution.\\n\\n    return account.code.length > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xdbca640e165333604a6121b07d206eea2b596dd3c3bb4d62caa436a05ac1d91d\",\"license\":\"MIT\"},\"contracts/treasury/libs/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n  // Booleans are more expensive than uint256 or any type that takes up a full\\n  // word because each write operation emits an extra SLOAD to first read the\\n  // slot's contents, replace the bits taken up by the boolean, and then write\\n  // back. This is the compiler's defense against contract upgrades and\\n  // pointer aliasing, and it cannot be disabled.\\n\\n  // The values being non-zero value makes deployment a bit more expensive,\\n  // but in exchange the refund on every call to nonReentrant will be lower in\\n  // amount. Since refunds are capped to a percentage of the total\\n  // transaction's gas, it is best to keep them low in cases like this one, to\\n  // increase the likelihood of the full refund coming into effect.\\n  uint256 private constant _NOT_ENTERED = 1;\\n  uint256 private constant _ENTERED = 2;\\n\\n  uint256 private _status;\\n\\n  constructor() {\\n    _status = _NOT_ENTERED;\\n  }\\n\\n  /**\\n   * @dev Prevents a contract from calling itself, directly or indirectly.\\n   * Calling a `nonReentrant` function from another `nonReentrant`\\n   * function is not supported. It is possible to prevent this from happening\\n   * by making the `nonReentrant` function external, and making it call a\\n   * `private` function that does the actual work.\\n   */\\n  modifier nonReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    require(_status != _ENTERED, 'ReentrancyGuard: reentrant call');\\n\\n    // Any calls to nonReentrant after this point will fail\\n    _status = _ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    _status = _NOT_ENTERED;\\n  }\\n}\\n\",\"keccak256\":\"0x23927cd1bf798f64d7aca4ea6e045c497ac4c63cfacafa3c48537bae2f1606e1\",\"license\":\"MIT\"},\"contracts/treasury/libs/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from './Address.sol';\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n  using Address for address;\\n\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n  }\\n\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    _callOptionalReturn(\\n      token,\\n      abi.encodeWithSelector(token.transferFrom.selector, from, to, value)\\n    );\\n  }\\n\\n  /**\\n   * @dev Deprecated. This function has issues similar to the ones found in\\n   * {IERC20-approve}, and its usage is discouraged.\\n   *\\n   * Whenever possible, use {safeIncreaseAllowance} and\\n   * {safeDecreaseAllowance} instead.\\n   */\\n  function safeApprove(IERC20 token, address spender, uint256 value) internal {\\n    // safeApprove should only be called when setting an initial allowance,\\n    // or when resetting it to zero. To increase and decrease it, use\\n    // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n    require(\\n      (value == 0) || (token.allowance(address(this), spender) == 0),\\n      'SafeERC20: approve from non-zero to non-zero allowance'\\n    );\\n    _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n  }\\n\\n  function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n    uint256 newAllowance = token.allowance(address(this), spender) + value;\\n    _callOptionalReturn(\\n      token,\\n      abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\\n    );\\n  }\\n\\n  function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n    unchecked {\\n      uint256 oldAllowance = token.allowance(address(this), spender);\\n      require(oldAllowance >= value, 'SafeERC20: decreased allowance below zero');\\n      uint256 newAllowance = oldAllowance - value;\\n      _callOptionalReturn(\\n        token,\\n        abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n   * on the return value: the return value is optional (but if data is returned, it must not be false).\\n   * @param token The token targeted by the call.\\n   * @param data The call data (encoded using abi.encode or one of its variants).\\n   */\\n  function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n    // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n    // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n    // the target address contains contract code and also asserts for success in the low-level call.\\n\\n    bytes memory returndata = address(token).functionCall(data, 'SafeERC20: low-level call failed');\\n    if (returndata.length > 0) {\\n      // Return data is optional\\n      require(abi.decode(returndata, (bool)), 'SafeERC20: ERC20 operation did not succeed');\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4f0634b9e21671a9778d0c95d02f4c77b41d5c50c98a39ac1e42fb839bdb47bd\",\"license\":\"MIT\"},\"contracts/treasury/libs/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title VersionedInitializable\\n *\\n * @dev Helper contract to support initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n *\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 internal lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(revision > lastInitializedRevision, 'Contract instance has already been initialized');\\n\\n    lastInitializedRevision = revision;\\n\\n    _;\\n  }\\n\\n  /// @dev returns the revision number of the contract.\\n  /// Needs to be defined in the inherited class as a constant.\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x2211858d472a0e26994d6f1fa179cb01fb4e69e3b5e23af4937fa342b784f543\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":42123,"contract":"contracts/treasury/AaveEcosystemReserveV2.sol:AaveEcosystemReserveV2","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":42154,"contract":"contracts/treasury/AaveEcosystemReserveV2.sol:AaveEcosystemReserveV2","label":"______gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":40931,"contract":"contracts/treasury/AaveEcosystemReserveV2.sol:AaveEcosystemReserveV2","label":"_fundsAdmin","offset":0,"slot":"51","type":"t_address"},{"astId":41861,"contract":"contracts/treasury/AaveEcosystemReserveV2.sol:AaveEcosystemReserveV2","label":"_status","offset":0,"slot":"52","type":"t_uint256"},{"astId":40282,"contract":"contracts/treasury/AaveEcosystemReserveV2.sol:AaveEcosystemReserveV2","label":"_nextStreamId","offset":0,"slot":"53","type":"t_uint256"},{"astId":40288,"contract":"contracts/treasury/AaveEcosystemReserveV2.sol:AaveEcosystemReserveV2","label":"_streams","offset":0,"slot":"54","type":"t_mapping(t_uint256,t_struct(Stream)41452_storage)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_mapping(t_uint256,t_struct(Stream)41452_storage)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => struct IStreamable.Stream)","numberOfBytes":"32","value":"t_struct(Stream)41452_storage"},"t_struct(Stream)41452_storage":{"encoding":"inplace","label":"struct IStreamable.Stream","members":[{"astId":41435,"contract":"contracts/treasury/AaveEcosystemReserveV2.sol:AaveEcosystemReserveV2","label":"deposit","offset":0,"slot":"0","type":"t_uint256"},{"astId":41437,"contract":"contracts/treasury/AaveEcosystemReserveV2.sol:AaveEcosystemReserveV2","label":"ratePerSecond","offset":0,"slot":"1","type":"t_uint256"},{"astId":41439,"contract":"contracts/treasury/AaveEcosystemReserveV2.sol:AaveEcosystemReserveV2","label":"remainingBalance","offset":0,"slot":"2","type":"t_uint256"},{"astId":41441,"contract":"contracts/treasury/AaveEcosystemReserveV2.sol:AaveEcosystemReserveV2","label":"startTime","offset":0,"slot":"3","type":"t_uint256"},{"astId":41443,"contract":"contracts/treasury/AaveEcosystemReserveV2.sol:AaveEcosystemReserveV2","label":"stopTime","offset":0,"slot":"4","type":"t_uint256"},{"astId":41445,"contract":"contracts/treasury/AaveEcosystemReserveV2.sol:AaveEcosystemReserveV2","label":"recipient","offset":0,"slot":"5","type":"t_address"},{"astId":41447,"contract":"contracts/treasury/AaveEcosystemReserveV2.sol:AaveEcosystemReserveV2","label":"sender","offset":0,"slot":"6","type":"t_address"},{"astId":41449,"contract":"contracts/treasury/AaveEcosystemReserveV2.sol:AaveEcosystemReserveV2","label":"tokenAddress","offset":0,"slot":"7","type":"t_address"},{"astId":41451,"contract":"contracts/treasury/AaveEcosystemReserveV2.sol:AaveEcosystemReserveV2","label":"isEntity","offset":20,"slot":"7","type":"t_bool"}],"numberOfBytes":"256"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"events":{"NewFundsAdmin(address)":{"notice":"Emitted when the funds admin changes"}},"kind":"user","methods":{"ETH_MOCK_ADDRESS()":{"notice":"Returns the mock ETH reference address"},"balanceOf(uint256,address)":{"notice":"Returns the available funds for the given stream id and address.Returns the total funds allocated to `who` as uint256."},"cancelStream(uint256)":{"notice":"Cancels the stream and transfers the tokens back on a pro rata basis.Returns bool true=success, otherwise false."},"createStream(address,uint256,address,uint256,uint256)":{"notice":"Creates a new stream funded by this contracts itself and paid towards `recipient`.Returns the uint256 id of the newly created stream."},"deltaOf(uint256)":{"notice":"Returns either the delta in seconds between `block.timestamp` and `startTime` or  between `stopTime` and `startTime, whichever is smaller. If `block.timestamp` is before  `startTime`, it returns 0.Returns the time delta in seconds."},"getFundsAdmin()":{"notice":"Return the funds admin, only entity to be able to interact with this contract (controller of reserve)"},"getNextStreamId()":{"notice":"Returns the next available stream idReturns the stream id."},"getStream(uint256)":{"notice":"Returns the stream with all its properties.Returns the stream object."},"transfer(address,address,uint256)":{"notice":"Function for the funds admin to transfer ERC20 tokens to other parties"},"withdrawFromStream(uint256,uint256)":{"notice":"Withdraws from the contract to the recipient's account."}},"notice":"Stores ERC20 tokens of an ecosystem reserve, adding streaming capabilities. Modification of Sablier https://github.com/sablierhq/sablier/blob/develop/packages/protocol/contracts/Sablier.sol Original can be found also deployed on https://etherscan.io/address/0xCD18eAa163733Da39c232722cBC4E8940b1D8888 Modifications: - Sablier \"pulls\" the funds from the creator of the stream at creation. In the Aave case, we already have the funds. - Anybody can create streams on Sablier. Here, only the funds admin (Aave governance via controller) can - Adapted codebase to Solidity 0.8.11, mainly removing SafeMath and CarefulMath to use native safe math - Same as with creation, on Sablier the `sender` and `recipient` can cancel a stream. Here, only fund admin and recipient","version":1}}},"contracts/treasury/AdminControlledEcosystemReserve.sol":{"AdminControlledEcosystemReserve":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fundsAdmin","type":"address"}],"name":"NewFundsAdmin","type":"event"},{"inputs":[],"name":"ETH_MOCK_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getFundsAdmin","outputs":[{"internalType":"address","name":"","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"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"devdoc":{"author":"BGD Labs*","details":"Done abstract to add an `initialize()` function on the child, with `initializer` modifier","kind":"dev","methods":{"approve(address,address,uint256)":{"details":"Function for the funds admin to give ERC20 allowance to other parties","params":{"amount":"Allowance to approve*","recipient":"Allowance's recipient","token":"The address of the token to give allowance from"}},"getFundsAdmin()":{"returns":{"_0":"address The address of the funds admin*"}},"transfer(address,address,uint256)":{"params":{"amount":"Amount to transfer*","recipient":"Transfer's recipient","token":"The address of the token to transfer"}}},"stateVariables":{"ETH_MOCK_ADDRESS":{"return":"address The address*","returns":{"_0":"address The address*"}}},"title":"AdminControlledEcosystemReserve","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ETH_MOCK_ADDRESS()":"51ee886b","REVISION()":"dde43cba","approve(address,address,uint256)":"e1f21c67","getFundsAdmin()":"06bc2ee0","transfer(address,address,uint256)":"beabacc8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fundsAdmin\",\"type\":\"address\"}],\"name\":\"NewFundsAdmin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ETH_MOCK_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFundsAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"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\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"BGD Labs*\",\"details\":\"Done abstract to add an `initialize()` function on the child, with `initializer` modifier\",\"kind\":\"dev\",\"methods\":{\"approve(address,address,uint256)\":{\"details\":\"Function for the funds admin to give ERC20 allowance to other parties\",\"params\":{\"amount\":\"Allowance to approve*\",\"recipient\":\"Allowance's recipient\",\"token\":\"The address of the token to give allowance from\"}},\"getFundsAdmin()\":{\"returns\":{\"_0\":\"address The address of the funds admin*\"}},\"transfer(address,address,uint256)\":{\"params\":{\"amount\":\"Amount to transfer*\",\"recipient\":\"Transfer's recipient\",\"token\":\"The address of the token to transfer\"}}},\"stateVariables\":{\"ETH_MOCK_ADDRESS\":{\"return\":\"address The address*\",\"returns\":{\"_0\":\"address The address*\"}}},\"title\":\"AdminControlledEcosystemReserve\",\"version\":1},\"userdoc\":{\"events\":{\"NewFundsAdmin(address)\":{\"notice\":\"Emitted when the funds admin changes\"}},\"kind\":\"user\",\"methods\":{\"ETH_MOCK_ADDRESS()\":{\"notice\":\"Returns the mock ETH reference address\"},\"getFundsAdmin()\":{\"notice\":\"Return the funds admin, only entity to be able to interact with this contract (controller of reserve)\"},\"transfer(address,address,uint256)\":{\"notice\":\"Function for the funds admin to transfer ERC20 tokens to other parties\"}},\"notice\":\"Stores ERC20 tokens, and allows to dispose of them via approval or transfer dynamics Adapted to be an implementation of a transparent proxy\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/treasury/AdminControlledEcosystemReserve.sol\":\"AdminControlledEcosystemReserve\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/treasury/AdminControlledEcosystemReserve.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {IAdminControlledEcosystemReserve} from './interfaces/IAdminControlledEcosystemReserve.sol';\\nimport {VersionedInitializable} from './libs/VersionedInitializable.sol';\\nimport {SafeERC20} from './libs/SafeERC20.sol';\\nimport {ReentrancyGuard} from './libs/ReentrancyGuard.sol';\\nimport {Address} from './libs/Address.sol';\\n\\n/**\\n * @title AdminControlledEcosystemReserve\\n * @notice Stores ERC20 tokens, and allows to dispose of them via approval or transfer dynamics\\n * Adapted to be an implementation of a transparent proxy\\n * @dev Done abstract to add an `initialize()` function on the child, with `initializer` modifier\\n * @author BGD Labs\\n **/\\nabstract contract AdminControlledEcosystemReserve is\\n  VersionedInitializable,\\n  IAdminControlledEcosystemReserve\\n{\\n  using SafeERC20 for IERC20;\\n  using Address for address payable;\\n\\n  address internal _fundsAdmin;\\n\\n  uint256 public constant REVISION = 1;\\n\\n  /// @inheritdoc IAdminControlledEcosystemReserve\\n  address public constant ETH_MOCK_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;\\n\\n  modifier onlyFundsAdmin() {\\n    require(msg.sender == _fundsAdmin, 'ONLY_BY_FUNDS_ADMIN');\\n    _;\\n  }\\n\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  /// @inheritdoc IAdminControlledEcosystemReserve\\n  function getFundsAdmin() external view returns (address) {\\n    return _fundsAdmin;\\n  }\\n\\n  /// @inheritdoc IAdminControlledEcosystemReserve\\n  function approve(IERC20 token, address recipient, uint256 amount) external onlyFundsAdmin {\\n    token.safeApprove(recipient, amount);\\n  }\\n\\n  /// @inheritdoc IAdminControlledEcosystemReserve\\n  function transfer(IERC20 token, address recipient, uint256 amount) external onlyFundsAdmin {\\n    require(recipient != address(0), 'INVALID_0X_RECIPIENT');\\n\\n    if (address(token) == ETH_MOCK_ADDRESS) {\\n      payable(recipient).sendValue(amount);\\n    } else {\\n      token.safeTransfer(recipient, amount);\\n    }\\n  }\\n\\n  /// @dev needed in order to receive ETH from the Aave v1 ecosystem reserve\\n  receive() external payable {}\\n\\n  function _setFundsAdmin(address admin) internal {\\n    _fundsAdmin = admin;\\n    emit NewFundsAdmin(admin);\\n  }\\n}\\n\",\"keccak256\":\"0xd2a27f2964946752412b11f2528e6c61b49d79c54576bbab1750f8be2651a8aa\",\"license\":\"GPL-3.0\"},\"contracts/treasury/interfaces/IAdminControlledEcosystemReserve.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\n\\ninterface IAdminControlledEcosystemReserve {\\n  /** @notice Emitted when the funds admin changes\\n   * @param fundsAdmin The new funds admin\\n   **/\\n  event NewFundsAdmin(address indexed fundsAdmin);\\n\\n  /** @notice Returns the mock ETH reference address\\n   * @return address The address\\n   **/\\n  function ETH_MOCK_ADDRESS() external pure returns (address);\\n\\n  /**\\n   * @notice Return the funds admin, only entity to be able to interact with this contract (controller of reserve)\\n   * @return address The address of the funds admin\\n   **/\\n  function getFundsAdmin() external view returns (address);\\n\\n  /**\\n   * @dev Function for the funds admin to give ERC20 allowance to other parties\\n   * @param token The address of the token to give allowance from\\n   * @param recipient Allowance's recipient\\n   * @param amount Allowance to approve\\n   **/\\n  function approve(IERC20 token, address recipient, uint256 amount) external;\\n\\n  /**\\n   * @notice Function for the funds admin to transfer ERC20 tokens to other parties\\n   * @param token The address of the token to transfer\\n   * @param recipient Transfer's recipient\\n   * @param amount Amount to transfer\\n   **/\\n  function transfer(IERC20 token, address recipient, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0xe826cd01ee12902faac76b8ee3f26745f08134a5c7610d111605cae74a5e3268\",\"license\":\"GPL-3.0\"},\"contracts/treasury/libs/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n   *\\n   * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n   * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n   * constructor.\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize/address.code.length, which returns 0\\n    // for contracts in construction, since the code is only stored at the end\\n    // of the constructor execution.\\n\\n    return account.code.length > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xdbca640e165333604a6121b07d206eea2b596dd3c3bb4d62caa436a05ac1d91d\",\"license\":\"MIT\"},\"contracts/treasury/libs/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n  // Booleans are more expensive than uint256 or any type that takes up a full\\n  // word because each write operation emits an extra SLOAD to first read the\\n  // slot's contents, replace the bits taken up by the boolean, and then write\\n  // back. This is the compiler's defense against contract upgrades and\\n  // pointer aliasing, and it cannot be disabled.\\n\\n  // The values being non-zero value makes deployment a bit more expensive,\\n  // but in exchange the refund on every call to nonReentrant will be lower in\\n  // amount. Since refunds are capped to a percentage of the total\\n  // transaction's gas, it is best to keep them low in cases like this one, to\\n  // increase the likelihood of the full refund coming into effect.\\n  uint256 private constant _NOT_ENTERED = 1;\\n  uint256 private constant _ENTERED = 2;\\n\\n  uint256 private _status;\\n\\n  constructor() {\\n    _status = _NOT_ENTERED;\\n  }\\n\\n  /**\\n   * @dev Prevents a contract from calling itself, directly or indirectly.\\n   * Calling a `nonReentrant` function from another `nonReentrant`\\n   * function is not supported. It is possible to prevent this from happening\\n   * by making the `nonReentrant` function external, and making it call a\\n   * `private` function that does the actual work.\\n   */\\n  modifier nonReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    require(_status != _ENTERED, 'ReentrancyGuard: reentrant call');\\n\\n    // Any calls to nonReentrant after this point will fail\\n    _status = _ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    _status = _NOT_ENTERED;\\n  }\\n}\\n\",\"keccak256\":\"0x23927cd1bf798f64d7aca4ea6e045c497ac4c63cfacafa3c48537bae2f1606e1\",\"license\":\"MIT\"},\"contracts/treasury/libs/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from './Address.sol';\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n  using Address for address;\\n\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n  }\\n\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    _callOptionalReturn(\\n      token,\\n      abi.encodeWithSelector(token.transferFrom.selector, from, to, value)\\n    );\\n  }\\n\\n  /**\\n   * @dev Deprecated. This function has issues similar to the ones found in\\n   * {IERC20-approve}, and its usage is discouraged.\\n   *\\n   * Whenever possible, use {safeIncreaseAllowance} and\\n   * {safeDecreaseAllowance} instead.\\n   */\\n  function safeApprove(IERC20 token, address spender, uint256 value) internal {\\n    // safeApprove should only be called when setting an initial allowance,\\n    // or when resetting it to zero. To increase and decrease it, use\\n    // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n    require(\\n      (value == 0) || (token.allowance(address(this), spender) == 0),\\n      'SafeERC20: approve from non-zero to non-zero allowance'\\n    );\\n    _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n  }\\n\\n  function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n    uint256 newAllowance = token.allowance(address(this), spender) + value;\\n    _callOptionalReturn(\\n      token,\\n      abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\\n    );\\n  }\\n\\n  function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n    unchecked {\\n      uint256 oldAllowance = token.allowance(address(this), spender);\\n      require(oldAllowance >= value, 'SafeERC20: decreased allowance below zero');\\n      uint256 newAllowance = oldAllowance - value;\\n      _callOptionalReturn(\\n        token,\\n        abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n   * on the return value: the return value is optional (but if data is returned, it must not be false).\\n   * @param token The token targeted by the call.\\n   * @param data The call data (encoded using abi.encode or one of its variants).\\n   */\\n  function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n    // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n    // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n    // the target address contains contract code and also asserts for success in the low-level call.\\n\\n    bytes memory returndata = address(token).functionCall(data, 'SafeERC20: low-level call failed');\\n    if (returndata.length > 0) {\\n      // Return data is optional\\n      require(abi.decode(returndata, (bool)), 'SafeERC20: ERC20 operation did not succeed');\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4f0634b9e21671a9778d0c95d02f4c77b41d5c50c98a39ac1e42fb839bdb47bd\",\"license\":\"MIT\"},\"contracts/treasury/libs/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title VersionedInitializable\\n *\\n * @dev Helper contract to support initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n *\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 internal lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(revision > lastInitializedRevision, 'Contract instance has already been initialized');\\n\\n    lastInitializedRevision = revision;\\n\\n    _;\\n  }\\n\\n  /// @dev returns the revision number of the contract.\\n  /// Needs to be defined in the inherited class as a constant.\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x2211858d472a0e26994d6f1fa179cb01fb4e69e3b5e23af4937fa342b784f543\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":42123,"contract":"contracts/treasury/AdminControlledEcosystemReserve.sol:AdminControlledEcosystemReserve","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":42154,"contract":"contracts/treasury/AdminControlledEcosystemReserve.sol:AdminControlledEcosystemReserve","label":"______gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":40931,"contract":"contracts/treasury/AdminControlledEcosystemReserve.sol:AdminControlledEcosystemReserve","label":"_fundsAdmin","offset":0,"slot":"51","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"events":{"NewFundsAdmin(address)":{"notice":"Emitted when the funds admin changes"}},"kind":"user","methods":{"ETH_MOCK_ADDRESS()":{"notice":"Returns the mock ETH reference address"},"getFundsAdmin()":{"notice":"Return the funds admin, only entity to be able to interact with this contract (controller of reserve)"},"transfer(address,address,uint256)":{"notice":"Function for the funds admin to transfer ERC20 tokens to other parties"}},"notice":"Stores ERC20 tokens, and allows to dispose of them via approval or transfer dynamics Adapted to be an implementation of a transparent proxy","version":1}}},"contracts/treasury/Collector.sol":{"Collector":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fundsAdmin","type":"address"}],"name":"NewFundsAdmin","type":"event"},{"inputs":[],"name":"REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getFundsAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reserveController","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"setFundsAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave*","details":"Implementation contract that must be initialized using transparent proxy pattern.","kind":"dev","methods":{"approve(address,address,uint256)":{"details":"Approve an amount of tokens to be pulled by the recipient.","params":{"amount":"The amount allowed to be pulled. If zero it will revoke the approval.","recipient":"The address of the entity allowed to pull tokens","token":"The address of the asset"}},"getFundsAdmin()":{"details":"Retrieve the current funds administrator","returns":{"_0":"The address of the funds administrator"}},"initialize(address)":{"details":"Initialize the transparent proxy with the admin of the Collector","params":{"reserveController":"The address of the admin that controls Collector"}},"setFundsAdmin(address)":{"details":"Transfer the ownership of the funds administrator role. This function should only be callable by the current funds administrator.","params":{"admin":"The address of the new funds administrator"}},"transfer(address,address,uint256)":{"details":"Transfer an amount of tokens to the recipient.","params":{"amount":"The amount to be transferred.","recipient":"The address of the entity to transfer the tokens.","token":"The address of the asset"}}},"stateVariables":{"REVISION":{"details":"Retrieve the current implementation Revision of the proxy","return":"The revision version","returns":{"_0":"The revision version"}}},"title":"Collector","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60806040526000805534801561001457600080fd5b50610608806100246000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c8063dde43cba11610050578063dde43cba146100cc578063e1f21c67146100e2578063ed0d2371146100f557600080fd5b806306bc2ee014610077578063beabacc8146100a4578063c4d66de8146100b9575b600080fd5b60345460405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100b76100b236600461054b565b610108565b005b6100b76100c736600461058c565b61022e565b6100d4600181565b60405190815260200161009b565b6100b76100f036600461054b565b610351565b6100b761010336600461058c565b61042d565b60345473ffffffffffffffffffffffffffffffffffffffff16331461018e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f42595f46554e44535f41444d494e0000000000000000000000000060448201526064015b60405180910390fd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af1158015610204573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061022891906105b0565b50505050565b6001805460ff168061023f5750303b155b8061024b575060005481115b6102d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610185565b60015460ff1615801561031457600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b61031d836104ba565b801561034c57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050565b60345473ffffffffffffffffffffffffffffffffffffffff1633146103d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f42595f46554e44535f41444d494e000000000000000000000000006044820152606401610185565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820183905284169063095ea7b3906044016101e5565b60345473ffffffffffffffffffffffffffffffffffffffff1633146104ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f42595f46554e44535f41444d494e000000000000000000000000006044820152606401610185565b6104b7816104ba565b50565b603480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f1ab77a654795da4cfe37c33188e862203ade9a5c7f1a9d4957669b3ccbec9e1190600090a250565b73ffffffffffffffffffffffffffffffffffffffff811681146104b757600080fd5b60008060006060848603121561056057600080fd5b833561056b81610529565b9250602084013561057b81610529565b929592945050506040919091013590565b60006020828403121561059e57600080fd5b81356105a981610529565b9392505050565b6000602082840312156105c257600080fd5b815180151581146105a957600080fdfea26469706673582212208a956586c23c1be95c1e083793324a5487500135c2f4b53e1dc09f946dc5201164736f6c634300080a0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x608 DUP1 PUSH2 0x24 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 0xDDE43CBA GT PUSH2 0x50 JUMPI DUP1 PUSH4 0xDDE43CBA EQ PUSH2 0xCC JUMPI DUP1 PUSH4 0xE1F21C67 EQ PUSH2 0xE2 JUMPI DUP1 PUSH4 0xED0D2371 EQ PUSH2 0xF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6BC2EE0 EQ PUSH2 0x77 JUMPI DUP1 PUSH4 0xBEABACC8 EQ PUSH2 0xA4 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0xB9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xB7 PUSH2 0xB2 CALLDATASIZE PUSH1 0x4 PUSH2 0x54B JUMP JUMPDEST PUSH2 0x108 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xB7 PUSH2 0xC7 CALLDATASIZE PUSH1 0x4 PUSH2 0x58C JUMP JUMPDEST PUSH2 0x22E JUMP JUMPDEST PUSH2 0xD4 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x9B JUMP JUMPDEST PUSH2 0xB7 PUSH2 0xF0 CALLDATASIZE PUSH1 0x4 PUSH2 0x54B JUMP JUMPDEST PUSH2 0x351 JUMP JUMPDEST PUSH2 0xB7 PUSH2 0x103 CALLDATASIZE PUSH1 0x4 PUSH2 0x58C JUMP JUMPDEST PUSH2 0x42D JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x18E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F42595F46554E44535F41444D494E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE DUP5 AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH1 0x44 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x204 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x228 SWAP2 SWAP1 PUSH2 0x5B0 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x23F JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x24B JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x2D7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x185 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x314 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH2 0x31D DUP4 PUSH2 0x4BA JUMP JUMPDEST DUP1 ISZERO PUSH2 0x34C JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x3D2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F42595F46554E44535F41444D494E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x185 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE DUP5 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH1 0x44 ADD PUSH2 0x1E5 JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x4AE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F42595F46554E44535F41444D494E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x185 JUMP JUMPDEST PUSH2 0x4B7 DUP2 PUSH2 0x4BA JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x34 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1AB77A654795DA4CFE37C33188E862203ADE9A5C7F1A9D4957669B3CCBEC9E11 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x560 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x56B DUP2 PUSH2 0x529 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x57B DUP2 PUSH2 0x529 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x59E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5A9 DUP2 PUSH2 0x529 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x5A9 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP11 SWAP6 PUSH6 0x86C23C1BE95C 0x1E ADDMOD CALLDATACOPY SWAP4 ORIGIN 0x4A SLOAD DUP8 POP ADD CALLDATALOAD 0xC2 DELEGATECALL 0xB5 RETURNDATACOPY SAR 0xC0 SWAP16 SWAP5 PUSH14 0xC5201164736F6C634300080A0033 ","sourceMap":"629:1699:191:-:0;;;928:1:71;886:43;;629:1699:191;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@REVISION_41075":{"entryPoint":null,"id":41075,"parameterSlots":0,"returnSlots":0},"@_setFundsAdmin_41190":{"entryPoint":1210,"id":41190,"parameterSlots":1,"returnSlots":0},"@approve_41141":{"entryPoint":849,"id":41141,"parameterSlots":3,"returnSlots":0},"@getFundsAdmin_41120":{"entryPoint":null,"id":41120,"parameterSlots":0,"returnSlots":1},"@getRevision_41111":{"entryPoint":null,"id":41111,"parameterSlots":0,"returnSlots":1},"@initialize_41101":{"entryPoint":558,"id":41101,"parameterSlots":1,"returnSlots":0},"@isConstructor_10568":{"entryPoint":null,"id":10568,"parameterSlots":0,"returnSlots":1},"@setFundsAdmin_41175":{"entryPoint":1069,"id":41175,"parameterSlots":1,"returnSlots":0},"@transfer_41162":{"entryPoint":264,"id":41162,"parameterSlots":3,"returnSlots":0},"abi_decode_tuple_t_address":{"entryPoint":1420,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bool_fromMemory":{"entryPoint":1456,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_contract$_IERC20_$1442t_addresst_uint256":{"entryPoint":1355,"id":null,"parameterSlots":2,"returnSlots":3},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_stringliteral_3088d49d45e4841a4a1f6f3b3363c5e7594d9318a96bb26b85336195c6269f1c__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"validator_revert_contract_IERC20":{"entryPoint":1321,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2690:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"115:125:201","statements":[{"nodeType":"YulAssignment","src":"125:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"137:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"148:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"133:3:201"},"nodeType":"YulFunctionCall","src":"133:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"125:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"167:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"182:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"190:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"178:3:201"},"nodeType":"YulFunctionCall","src":"178:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"160:6:201"},"nodeType":"YulFunctionCall","src":"160:74:201"},"nodeType":"YulExpressionStatement","src":"160:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"84:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"95:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"106:4:201","type":""}],"src":"14:226:201"},{"body":{"nodeType":"YulBlock","src":"298:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"385:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"394:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"397:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"387:6:201"},"nodeType":"YulFunctionCall","src":"387:12:201"},"nodeType":"YulExpressionStatement","src":"387:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"321:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"332:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"339:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"328:3:201"},"nodeType":"YulFunctionCall","src":"328:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"318:2:201"},"nodeType":"YulFunctionCall","src":"318:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"311:6:201"},"nodeType":"YulFunctionCall","src":"311:73:201"},"nodeType":"YulIf","src":"308:93:201"}]},"name":"validator_revert_contract_IERC20","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"287:5:201","type":""}],"src":"245:162:201"},{"body":{"nodeType":"YulBlock","src":"531:368:201","statements":[{"body":{"nodeType":"YulBlock","src":"577:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"586:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"589:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"579:6:201"},"nodeType":"YulFunctionCall","src":"579:12:201"},"nodeType":"YulExpressionStatement","src":"579:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"552:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"561:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"548:3:201"},"nodeType":"YulFunctionCall","src":"548:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"573:2:201","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"544:3:201"},"nodeType":"YulFunctionCall","src":"544:32:201"},"nodeType":"YulIf","src":"541:52:201"},{"nodeType":"YulVariableDeclaration","src":"602:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"628:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"615:12:201"},"nodeType":"YulFunctionCall","src":"615:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"606:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"680:5:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"647:32:201"},"nodeType":"YulFunctionCall","src":"647:39:201"},"nodeType":"YulExpressionStatement","src":"647:39:201"},{"nodeType":"YulAssignment","src":"695:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"705:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"695:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"719:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"751:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"762:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"747:3:201"},"nodeType":"YulFunctionCall","src":"747:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"734:12:201"},"nodeType":"YulFunctionCall","src":"734:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"723:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"808:7:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"775:32:201"},"nodeType":"YulFunctionCall","src":"775:41:201"},"nodeType":"YulExpressionStatement","src":"775:41:201"},{"nodeType":"YulAssignment","src":"825:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"835:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"825:6:201"}]},{"nodeType":"YulAssignment","src":"851:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"878:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"889:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"874:3:201"},"nodeType":"YulFunctionCall","src":"874:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"861:12:201"},"nodeType":"YulFunctionCall","src":"861:32:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"851:6:201"}]}]},"name":"abi_decode_tuple_t_contract$_IERC20_$1442t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"481:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"492:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"504:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"512:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"520:6:201","type":""}],"src":"412:487:201"},{"body":{"nodeType":"YulBlock","src":"974:185:201","statements":[{"body":{"nodeType":"YulBlock","src":"1020:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1029:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1032:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1022:6:201"},"nodeType":"YulFunctionCall","src":"1022:12:201"},"nodeType":"YulExpressionStatement","src":"1022:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"995:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1004:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"991:3:201"},"nodeType":"YulFunctionCall","src":"991:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1016:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"987:3:201"},"nodeType":"YulFunctionCall","src":"987:32:201"},"nodeType":"YulIf","src":"984:52:201"},{"nodeType":"YulVariableDeclaration","src":"1045:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1071:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1058:12:201"},"nodeType":"YulFunctionCall","src":"1058:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1049:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1123:5:201"}],"functionName":{"name":"validator_revert_contract_IERC20","nodeType":"YulIdentifier","src":"1090:32:201"},"nodeType":"YulFunctionCall","src":"1090:39:201"},"nodeType":"YulExpressionStatement","src":"1090:39:201"},{"nodeType":"YulAssignment","src":"1138:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1148:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1138:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"940:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"951:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"963:6:201","type":""}],"src":"904:255:201"},{"body":{"nodeType":"YulBlock","src":"1265:76:201","statements":[{"nodeType":"YulAssignment","src":"1275:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1287:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1298:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1283:3:201"},"nodeType":"YulFunctionCall","src":"1283:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1275:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1317:9:201"},{"name":"value0","nodeType":"YulIdentifier","src":"1328:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1310:6:201"},"nodeType":"YulFunctionCall","src":"1310:25:201"},"nodeType":"YulExpressionStatement","src":"1310:25:201"}]},"name":"abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1234:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1245:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1256:4:201","type":""}],"src":"1164:177:201"},{"body":{"nodeType":"YulBlock","src":"1520:169:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1537:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1548:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1530:6:201"},"nodeType":"YulFunctionCall","src":"1530:21:201"},"nodeType":"YulExpressionStatement","src":"1530:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1571:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1582:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1567:3:201"},"nodeType":"YulFunctionCall","src":"1567:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"1587:2:201","type":"","value":"19"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1560:6:201"},"nodeType":"YulFunctionCall","src":"1560:30:201"},"nodeType":"YulExpressionStatement","src":"1560:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1610:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1621:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1606:3:201"},"nodeType":"YulFunctionCall","src":"1606:18:201"},{"hexValue":"4f4e4c595f42595f46554e44535f41444d494e","kind":"string","nodeType":"YulLiteral","src":"1626:21:201","type":"","value":"ONLY_BY_FUNDS_ADMIN"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1599:6:201"},"nodeType":"YulFunctionCall","src":"1599:49:201"},"nodeType":"YulExpressionStatement","src":"1599:49:201"},{"nodeType":"YulAssignment","src":"1657:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1669:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1680:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1665:3:201"},"nodeType":"YulFunctionCall","src":"1665:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1657:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_3088d49d45e4841a4a1f6f3b3363c5e7594d9318a96bb26b85336195c6269f1c__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1497:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1511:4:201","type":""}],"src":"1346:343:201"},{"body":{"nodeType":"YulBlock","src":"1823:168:201","statements":[{"nodeType":"YulAssignment","src":"1833:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1845:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1856:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1841:3:201"},"nodeType":"YulFunctionCall","src":"1841:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1833:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1875:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1890:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"1898:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1886:3:201"},"nodeType":"YulFunctionCall","src":"1886:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1868:6:201"},"nodeType":"YulFunctionCall","src":"1868:74:201"},"nodeType":"YulExpressionStatement","src":"1868:74:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1962:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1973:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1958:3:201"},"nodeType":"YulFunctionCall","src":"1958:18:201"},{"name":"value1","nodeType":"YulIdentifier","src":"1978:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1951:6:201"},"nodeType":"YulFunctionCall","src":"1951:34:201"},"nodeType":"YulExpressionStatement","src":"1951:34:201"}]},"name":"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1784:9:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1795:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1803:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1814:4:201","type":""}],"src":"1694:297:201"},{"body":{"nodeType":"YulBlock","src":"2074:199:201","statements":[{"body":{"nodeType":"YulBlock","src":"2120:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2129:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2132:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2122:6:201"},"nodeType":"YulFunctionCall","src":"2122:12:201"},"nodeType":"YulExpressionStatement","src":"2122:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2095:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"2104:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2091:3:201"},"nodeType":"YulFunctionCall","src":"2091:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"2116:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2087:3:201"},"nodeType":"YulFunctionCall","src":"2087:32:201"},"nodeType":"YulIf","src":"2084:52:201"},{"nodeType":"YulVariableDeclaration","src":"2145:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2164:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"2158:5:201"},"nodeType":"YulFunctionCall","src":"2158:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"2149:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"2227:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2236:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2239:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2229:6:201"},"nodeType":"YulFunctionCall","src":"2229:12:201"},"nodeType":"YulExpressionStatement","src":"2229:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2196:5:201"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"2217:5:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2210:6:201"},"nodeType":"YulFunctionCall","src":"2210:13:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2203:6:201"},"nodeType":"YulFunctionCall","src":"2203:21:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"2193:2:201"},"nodeType":"YulFunctionCall","src":"2193:32:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"2186:6:201"},"nodeType":"YulFunctionCall","src":"2186:40:201"},"nodeType":"YulIf","src":"2183:60:201"},{"nodeType":"YulAssignment","src":"2252:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"2262:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2252:6:201"}]}]},"name":"abi_decode_tuple_t_bool_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2040:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2051:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2063:6:201","type":""}],"src":"1996:277:201"},{"body":{"nodeType":"YulBlock","src":"2452:236:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2469:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2480:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2462:6:201"},"nodeType":"YulFunctionCall","src":"2462:21:201"},"nodeType":"YulExpressionStatement","src":"2462:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2503:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2514:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2499:3:201"},"nodeType":"YulFunctionCall","src":"2499:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2519:2:201","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2492:6:201"},"nodeType":"YulFunctionCall","src":"2492:30:201"},"nodeType":"YulExpressionStatement","src":"2492:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2542:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2553:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2538:3:201"},"nodeType":"YulFunctionCall","src":"2538:18:201"},{"hexValue":"436f6e747261637420696e7374616e63652068617320616c7265616479206265","kind":"string","nodeType":"YulLiteral","src":"2558:34:201","type":"","value":"Contract instance has already be"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2531:6:201"},"nodeType":"YulFunctionCall","src":"2531:62:201"},"nodeType":"YulExpressionStatement","src":"2531:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2613:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2624:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2609:3:201"},"nodeType":"YulFunctionCall","src":"2609:18:201"},{"hexValue":"656e20696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"2629:16:201","type":"","value":"en initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2602:6:201"},"nodeType":"YulFunctionCall","src":"2602:44:201"},"nodeType":"YulExpressionStatement","src":"2602:44:201"},{"nodeType":"YulAssignment","src":"2655:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2667:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2678:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2663:3:201"},"nodeType":"YulFunctionCall","src":"2663:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2655:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2429:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2443:4:201","type":""}],"src":"2278:410:201"}]},"contents":"{\n    { }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function validator_revert_contract_IERC20(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_contract$_IERC20_$1442t_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IERC20(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_contract_IERC20(value_1)\n        value1 := value_1\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_contract_IERC20(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_encode_tuple_t_stringliteral_3088d49d45e4841a4a1f6f3b3363c5e7594d9318a96bb26b85336195c6269f1c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"ONLY_BY_FUNDS_ADMIN\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_9fbba6c4dcac9134893b633b9564f36435b3f927c1d5fa152c5c14b20cecb1a4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Contract instance has already be\")\n        mstore(add(headStart, 96), \"en initialized\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100725760003560e01c8063dde43cba11610050578063dde43cba146100cc578063e1f21c67146100e2578063ed0d2371146100f557600080fd5b806306bc2ee014610077578063beabacc8146100a4578063c4d66de8146100b9575b600080fd5b60345460405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100b76100b236600461054b565b610108565b005b6100b76100c736600461058c565b61022e565b6100d4600181565b60405190815260200161009b565b6100b76100f036600461054b565b610351565b6100b761010336600461058c565b61042d565b60345473ffffffffffffffffffffffffffffffffffffffff16331461018e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f42595f46554e44535f41444d494e0000000000000000000000000060448201526064015b60405180910390fd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820183905284169063a9059cbb906044015b6020604051808303816000875af1158015610204573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061022891906105b0565b50505050565b6001805460ff168061023f5750303b155b8061024b575060005481115b6102d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610185565b60015460ff1615801561031457600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168117905560008290555b61031d836104ba565b801561034c57600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b505050565b60345473ffffffffffffffffffffffffffffffffffffffff1633146103d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f42595f46554e44535f41444d494e000000000000000000000000006044820152606401610185565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820183905284169063095ea7b3906044016101e5565b60345473ffffffffffffffffffffffffffffffffffffffff1633146104ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4e4c595f42595f46554e44535f41444d494e000000000000000000000000006044820152606401610185565b6104b7816104ba565b50565b603480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f1ab77a654795da4cfe37c33188e862203ade9a5c7f1a9d4957669b3ccbec9e1190600090a250565b73ffffffffffffffffffffffffffffffffffffffff811681146104b757600080fd5b60008060006060848603121561056057600080fd5b833561056b81610529565b9250602084013561057b81610529565b929592945050506040919091013590565b60006020828403121561059e57600080fd5b81356105a981610529565b9392505050565b6000602082840312156105c257600080fd5b815180151581146105a957600080fdfea26469706673582212208a956586c23c1be95c1e083793324a5487500135c2f4b53e1dc09f946dc5201164736f6c634300080a0033","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 0xDDE43CBA GT PUSH2 0x50 JUMPI DUP1 PUSH4 0xDDE43CBA EQ PUSH2 0xCC JUMPI DUP1 PUSH4 0xE1F21C67 EQ PUSH2 0xE2 JUMPI DUP1 PUSH4 0xED0D2371 EQ PUSH2 0xF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6BC2EE0 EQ PUSH2 0x77 JUMPI DUP1 PUSH4 0xBEABACC8 EQ PUSH2 0xA4 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0xB9 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x34 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xB7 PUSH2 0xB2 CALLDATASIZE PUSH1 0x4 PUSH2 0x54B JUMP JUMPDEST PUSH2 0x108 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xB7 PUSH2 0xC7 CALLDATASIZE PUSH1 0x4 PUSH2 0x58C JUMP JUMPDEST PUSH2 0x22E JUMP JUMPDEST PUSH2 0xD4 PUSH1 0x1 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x9B JUMP JUMPDEST PUSH2 0xB7 PUSH2 0xF0 CALLDATASIZE PUSH1 0x4 PUSH2 0x54B JUMP JUMPDEST PUSH2 0x351 JUMP JUMPDEST PUSH2 0xB7 PUSH2 0x103 CALLDATASIZE PUSH1 0x4 PUSH2 0x58C JUMP JUMPDEST PUSH2 0x42D JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x18E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F42595F46554E44535F41444D494E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE DUP5 AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH1 0x44 ADD JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x204 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x228 SWAP2 SWAP1 PUSH2 0x5B0 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0xFF AND DUP1 PUSH2 0x23F JUMPI POP ADDRESS EXTCODESIZE ISZERO JUMPDEST DUP1 PUSH2 0x24B JUMPI POP PUSH1 0x0 SLOAD DUP2 GT JUMPDEST PUSH2 0x2D7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x436F6E747261637420696E7374616E63652068617320616C7265616479206265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x656E20696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x185 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH2 0x314 JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x0 DUP3 SWAP1 SSTORE JUMPDEST PUSH2 0x31D DUP4 PUSH2 0x4BA JUMP JUMPDEST DUP1 ISZERO PUSH2 0x34C JUMPI PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x3D2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F42595F46554E44535F41444D494E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x185 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP4 SWAP1 MSTORE DUP5 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH1 0x44 ADD PUSH2 0x1E5 JUMP JUMPDEST PUSH1 0x34 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x4AE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x13 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F4E4C595F42595F46554E44535F41444D494E00000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x185 JUMP JUMPDEST PUSH2 0x4B7 DUP2 PUSH2 0x4BA JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x34 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x1AB77A654795DA4CFE37C33188E862203ADE9A5C7F1A9D4957669B3CCBEC9E11 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x560 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x56B DUP2 PUSH2 0x529 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x57B DUP2 PUSH2 0x529 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x59E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5A9 DUP2 PUSH2 0x529 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x5A9 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP11 SWAP6 PUSH6 0x86C23C1BE95C 0x1E ADDMOD CALLDATACOPY SWAP4 ORIGIN 0x4A SLOAD DUP8 POP ADD CALLDATALOAD 0xC2 DELEGATECALL 0xB5 RETURNDATACOPY SAR 0xC0 SWAP16 SWAP5 PUSH14 0xC5201164736F6C634300080A0033 ","sourceMap":"629:1699:191:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1527:86;1597:11;;1527:86;;1597:11;;;;160:74:201;;148:2;133:18;1527:86:191;;;;;;;;1812:135;;;;;;:::i;:::-;;:::i;:::-;;1247:112;;;;;;:::i;:::-;;:::i;828:36::-;;863:1;828:36;;;;;1310:25:201;;;1298:2;1283:18;828:36:191;1164:177:201;1646:133:191;;;;;;:::i;:::-;;:::i;1980:94::-;;;;;;:::i;:::-;;:::i;1812:135::-;1030:11;;;;1016:10;:25;1008:57;;;;;;;1548:2:201;1008:57:191;;;1530:21:201;1587:2;1567:18;;;1560:30;1626:21;1606:18;;;1599:49;1665:18;;1008:57:191;;;;;;;;;1909:33:::1;::::0;;;;:14:::1;1886:55:201::0;;;1909:33:191::1;::::0;::::1;1868:74:201::0;1958:18;;;1951:34;;;1909:14:191;::::1;::::0;::::1;::::0;1841:18:201;;1909:33:191::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1812:135:::0;;;:::o;1247:112::-;863:1;1217:12:71;;;;;:31;;-1:-1:-1;2436:9:71;2424:22;2464:7;1233:15;1217:69;;;;1263:23;;1252:8;:34;1217:69;1202:146;;;;;;;2480:2:201;1202:146:71;;;2462:21:201;2519:2;2499:18;;;2492:30;2558:34;2538:18;;;2531:62;2629:16;2609:18;;;2602:44;2663:19;;1202:146:71;2278:410:201;1202:146:71;1378:12;;;;1377:13;1396:96;;;;1439:4;1424:19;;;;;;;;:12;1451:34;;;1396:96;1321:33:191::1;1336:17;1321:14;:33::i;:::-;1510:14:71::0;1506:55;;;1534:12;:20;;;;;;1506:55;1158:407;;1247:112:191;:::o;1646:133::-;1030:11;;;;1016:10;:25;1008:57;;;;;;;1548:2:201;1008:57:191;;;1530:21:201;1587:2;1567:18;;;1560:30;1626:21;1606:18;;;1599:49;1665:18;;1008:57:191;1346:343:201;1008:57:191;1742:32:::1;::::0;;;;:13:::1;1886:55:201::0;;;1742:32:191::1;::::0;::::1;1868:74:201::0;1958:18;;;1951:34;;;1742:13:191;::::1;::::0;::::1;::::0;1841:18:201;;1742:32:191::1;1694:297:201::0;1980:94:191;1030:11;;;;1016:10;:25;1008:57;;;;;;;1548:2:201;1008:57:191;;;1530:21:201;1587:2;1567:18;;;1560:30;1626:21;1606:18;;;1599:49;1665:18;;1008:57:191;1346:343:201;1008:57:191;2048:21:::1;2063:5;2048:14;:21::i;:::-;1980:94:::0;:::o;2217:109::-;2271:11;:19;;;;;;;;;;;;;2301:20;;;;-1:-1:-1;;2301:20:191;2217:109;:::o;245:162:201:-;339:42;332:5;328:54;321:5;318:65;308:93;;397:1;394;387:12;412:487;504:6;512;520;573:2;561:9;552:7;548:23;544:32;541:52;;;589:1;586;579:12;541:52;628:9;615:23;647:39;680:5;647:39;:::i;:::-;705:5;-1:-1:-1;762:2:201;747:18;;734:32;775:41;734:32;775:41;:::i;:::-;412:487;;835:7;;-1:-1:-1;;;889:2:201;874:18;;;;861:32;;412:487::o;904:255::-;963:6;1016:2;1004:9;995:7;991:23;987:32;984:52;;;1032:1;1029;1022:12;984:52;1071:9;1058:23;1090:39;1123:5;1090:39;:::i;:::-;1148:5;904:255;-1:-1:-1;;;904:255:201:o;1996:277::-;2063:6;2116:2;2104:9;2095:7;2091:23;2087:32;2084:52;;;2132:1;2129;2122:12;2084:52;2164:9;2158:16;2217:5;2210:13;2203:21;2196:5;2193:32;2183:60;;2239:1;2236;2229:12"},"gasEstimates":{"creation":{"codeDepositCost":"308800","executionCost":"5355","totalCost":"314155"},"external":{"REVISION()":"195","approve(address,address,uint256)":"infinite","getFundsAdmin()":"2279","initialize(address)":"105318","setFundsAdmin(address)":"infinite","transfer(address,address,uint256)":"infinite"},"internal":{"_setFundsAdmin(address)":"25399","getRevision()":"infinite"}},"methodIdentifiers":{"REVISION()":"dde43cba","approve(address,address,uint256)":"e1f21c67","getFundsAdmin()":"06bc2ee0","initialize(address)":"c4d66de8","setFundsAdmin(address)":"ed0d2371","transfer(address,address,uint256)":"beabacc8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fundsAdmin\",\"type\":\"address\"}],\"name\":\"NewFundsAdmin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFundsAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"reserveController\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"setFundsAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave*\",\"details\":\"Implementation contract that must be initialized using transparent proxy pattern.\",\"kind\":\"dev\",\"methods\":{\"approve(address,address,uint256)\":{\"details\":\"Approve an amount of tokens to be pulled by the recipient.\",\"params\":{\"amount\":\"The amount allowed to be pulled. If zero it will revoke the approval.\",\"recipient\":\"The address of the entity allowed to pull tokens\",\"token\":\"The address of the asset\"}},\"getFundsAdmin()\":{\"details\":\"Retrieve the current funds administrator\",\"returns\":{\"_0\":\"The address of the funds administrator\"}},\"initialize(address)\":{\"details\":\"Initialize the transparent proxy with the admin of the Collector\",\"params\":{\"reserveController\":\"The address of the admin that controls Collector\"}},\"setFundsAdmin(address)\":{\"details\":\"Transfer the ownership of the funds administrator role. This function should only be callable by the current funds administrator.\",\"params\":{\"admin\":\"The address of the new funds administrator\"}},\"transfer(address,address,uint256)\":{\"details\":\"Transfer an amount of tokens to the recipient.\",\"params\":{\"amount\":\"The amount to be transferred.\",\"recipient\":\"The address of the entity to transfer the tokens.\",\"token\":\"The address of the asset\"}}},\"stateVariables\":{\"REVISION\":{\"details\":\"Retrieve the current implementation Revision of the proxy\",\"return\":\"The revision version\",\"returns\":{\"_0\":\"The revision version\"}}},\"title\":\"Collector\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Stores the fees collected by the protocol and allows the fund administrator         to approve or transfer the collected ERC20 tokens.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/treasury/Collector.sol\":\"Collector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title VersionedInitializable\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n * @notice Helper contract to implement initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * @dev WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 private lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Indicates that the contract is in the process of being initialized.\\n   */\\n  bool private initializing;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(\\n      initializing || isConstructor() || revision > lastInitializedRevision,\\n      'Contract instance has already been initialized'\\n    );\\n\\n    bool isTopLevelCall = !initializing;\\n    if (isTopLevelCall) {\\n      initializing = true;\\n      lastInitializedRevision = revision;\\n    }\\n\\n    _;\\n\\n    if (isTopLevelCall) {\\n      initializing = false;\\n    }\\n  }\\n\\n  /**\\n   * @notice Returns the revision number of the contract\\n   * @dev Needs to be defined in the inherited class as a constant.\\n   * @return The revision number\\n   */\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  /**\\n   * @notice Returns true if and only if the function is running in the constructor\\n   * @return True if the function is running in the constructor\\n   */\\n  function isConstructor() private view returns (bool) {\\n    // extcodesize checks the size of the code stored in an address, and\\n    // address returns the current address. Since the code is still not\\n    // deployed when running a constructor, any checks on its code size will\\n    // yield zero, making it an effective way to detect if a contract is\\n    // under construction or not.\\n    uint256 cs;\\n    //solium-disable-next-line\\n    assembly {\\n      cs := extcodesize(address())\\n    }\\n    return cs == 0;\\n  }\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x311b8f1bd3d015a0c9c37680aceca36f59658284b9a7b2ca185b19afe58c3be0\",\"license\":\"AGPL-3.0\"},\"contracts/treasury/Collector.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {VersionedInitializable} from '@aave/core-v3/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol';\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {ICollector} from './interfaces/ICollector.sol';\\n\\n/**\\n * @title Collector\\n * @notice Stores the fees collected by the protocol and allows the fund administrator\\n *         to approve or transfer the collected ERC20 tokens.\\n * @dev Implementation contract that must be initialized using transparent proxy pattern.\\n * @author Aave\\n **/\\ncontract Collector is VersionedInitializable, ICollector {\\n  // Store the current funds administrator address\\n  address internal _fundsAdmin;\\n\\n  // Revision version of this implementation contract\\n  uint256 public constant REVISION = 1;\\n\\n  /**\\n   * @dev Allow only the funds administrator address to call functions marked by this modifier\\n   */\\n  modifier onlyFundsAdmin() {\\n    require(msg.sender == _fundsAdmin, 'ONLY_BY_FUNDS_ADMIN');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Initialize the transparent proxy with the admin of the Collector\\n   * @param reserveController The address of the admin that controls Collector\\n   */\\n  function initialize(address reserveController) external initializer {\\n    _setFundsAdmin(reserveController);\\n  }\\n\\n  /// @inheritdoc VersionedInitializable\\n  function getRevision() internal pure override returns (uint256) {\\n    return REVISION;\\n  }\\n\\n  /// @inheritdoc ICollector\\n  function getFundsAdmin() external view returns (address) {\\n    return _fundsAdmin;\\n  }\\n\\n  /// @inheritdoc ICollector\\n  function approve(IERC20 token, address recipient, uint256 amount) external onlyFundsAdmin {\\n    token.approve(recipient, amount);\\n  }\\n\\n  /// @inheritdoc ICollector\\n  function transfer(IERC20 token, address recipient, uint256 amount) external onlyFundsAdmin {\\n    token.transfer(recipient, amount);\\n  }\\n\\n  /// @inheritdoc ICollector\\n  function setFundsAdmin(address admin) external onlyFundsAdmin {\\n    _setFundsAdmin(admin);\\n  }\\n\\n  /**\\n   * @dev Transfer the ownership of the funds administrator role.\\n   * @param admin The address of the new funds administrator\\n   */\\n  function _setFundsAdmin(address admin) internal {\\n    _fundsAdmin = admin;\\n    emit NewFundsAdmin(admin);\\n  }\\n}\\n\",\"keccak256\":\"0xa5a61c323f229300f60019989bff896958e4eb51fe044e8b5b3fe0c8d468355e\",\"license\":\"AGPL-3.0\"},\"contracts/treasury/interfaces/ICollector.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title ICollector\\n * @notice Defines the interface of the Collector contract\\n * @author Aave\\n **/\\ninterface ICollector {\\n  /**\\n   * @dev Emitted during the transfer of ownership of the funds administrator address\\n   * @param fundsAdmin The new funds administrator address\\n   **/\\n  event NewFundsAdmin(address indexed fundsAdmin);\\n\\n  /**\\n   * @dev Retrieve the current implementation Revision of the proxy\\n   * @return The revision version\\n   */\\n  function REVISION() external view returns (uint256);\\n\\n  /**\\n   * @dev Retrieve the current funds administrator\\n   * @return The address of the funds administrator\\n   */\\n  function getFundsAdmin() external view returns (address);\\n\\n  /**\\n   * @dev Approve an amount of tokens to be pulled by the recipient.\\n   * @param token The address of the asset\\n   * @param recipient The address of the entity allowed to pull tokens\\n   * @param amount The amount allowed to be pulled. If zero it will revoke the approval.\\n   */\\n  function approve(IERC20 token, address recipient, uint256 amount) external;\\n\\n  /**\\n   * @dev Transfer an amount of tokens to the recipient.\\n   * @param token The address of the asset\\n   * @param recipient The address of the entity to transfer the tokens.\\n   * @param amount The amount to be transferred.\\n   */\\n  function transfer(IERC20 token, address recipient, uint256 amount) external;\\n\\n  /**\\n   * @dev Transfer the ownership of the funds administrator role.\\n          This function should only be callable by the current funds administrator.\\n   * @param admin The address of the new funds administrator\\n   */\\n  function setFundsAdmin(address admin) external;\\n}\\n\",\"keccak256\":\"0xf8e6208dc4495effeb0a4abb972244b2f887002e0a34f152fb19eee6befe448f\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":10499,"contract":"contracts/treasury/Collector.sol:Collector","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":10502,"contract":"contracts/treasury/Collector.sol:Collector","label":"initializing","offset":0,"slot":"1","type":"t_bool"},{"astId":10572,"contract":"contracts/treasury/Collector.sol:Collector","label":"______gap","offset":0,"slot":"2","type":"t_array(t_uint256)50_storage"},{"astId":41072,"contract":"contracts/treasury/Collector.sol:Collector","label":"_fundsAdmin","offset":0,"slot":"52","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"notice":"Stores the fees collected by the protocol and allows the fund administrator         to approve or transfer the collected ERC20 tokens.","version":1}}},"contracts/treasury/CollectorController.sol":{"CollectorController":{"abi":[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"collector","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collector","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave*","kind":"dev","methods":{"approve(address,address,address,uint256)":{"details":"Transfer an amount of tokens to the recipient.","params":{"amount":"The amount to be transferred.","collector":"The address of the collector contract","recipient":"The address of the entity to transfer the tokens.","token":"The address of the asset"}},"constructor":{"details":"Constructor setups the ownership of the contract","params":{"owner":"The address of the owner of the CollectorController"}},"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"transfer(address,address,address,uint256)":{"details":"Transfer an amount of tokens to the recipient.","params":{"amount":"The amount to be transferred.","collector":"The address of the collector contract to retrieve funds from (e.g. Aave ecosystem reserve)","recipient":"The address of the entity to transfer the tokens.","token":"The address of the asset"}},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"title":"CollectorController","version":1},"evm":{"bytecode":{"functionDebugData":{"@_1500":{"entryPoint":null,"id":1500,"parameterSlots":0,"returnSlots":0},"@_41213":{"entryPoint":null,"id":41213,"parameterSlots":1,"returnSlots":0},"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@transferOwnership_1572":{"entryPoint":109,"id":1572,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address_fromMemory":{"entryPoint":378,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:1074:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"95:209:201","statements":[{"body":{"nodeType":"YulBlock","src":"141:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"150:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"153:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"143:6:201"},"nodeType":"YulFunctionCall","src":"143:12:201"},"nodeType":"YulExpressionStatement","src":"143:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"116:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"125:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"112:3:201"},"nodeType":"YulFunctionCall","src":"112:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"137:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"108:3:201"},"nodeType":"YulFunctionCall","src":"108:32:201"},"nodeType":"YulIf","src":"105:52:201"},{"nodeType":"YulVariableDeclaration","src":"166:29:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"185:9:201"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"179:5:201"},"nodeType":"YulFunctionCall","src":"179:16:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"170:5:201","type":""}]},{"body":{"nodeType":"YulBlock","src":"258:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"267:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"270:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"260:6:201"},"nodeType":"YulFunctionCall","src":"260:12:201"},"nodeType":"YulExpressionStatement","src":"260:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"217:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"228:5:201"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"243:3:201","type":"","value":"160"},{"kind":"number","nodeType":"YulLiteral","src":"248:1:201","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"239:3:201"},"nodeType":"YulFunctionCall","src":"239:11:201"},{"kind":"number","nodeType":"YulLiteral","src":"252:1:201","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"235:3:201"},"nodeType":"YulFunctionCall","src":"235:19:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"224:3:201"},"nodeType":"YulFunctionCall","src":"224:31:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"214:2:201"},"nodeType":"YulFunctionCall","src":"214:42:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"207:6:201"},"nodeType":"YulFunctionCall","src":"207:50:201"},"nodeType":"YulIf","src":"204:70:201"},{"nodeType":"YulAssignment","src":"283:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"293:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"283:6:201"}]}]},"name":"abi_decode_tuple_t_address_fromMemory","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"61:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"72:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"84:6:201","type":""}],"src":"14:290:201"},{"body":{"nodeType":"YulBlock","src":"483:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"500:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"511:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"493:6:201"},"nodeType":"YulFunctionCall","src":"493:21:201"},"nodeType":"YulExpressionStatement","src":"493:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"534:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"545:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"530:3:201"},"nodeType":"YulFunctionCall","src":"530:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"550:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"523:6:201"},"nodeType":"YulFunctionCall","src":"523:30:201"},"nodeType":"YulExpressionStatement","src":"523:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"573:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"584:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"569:3:201"},"nodeType":"YulFunctionCall","src":"569:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"589:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"562:6:201"},"nodeType":"YulFunctionCall","src":"562:62:201"},"nodeType":"YulExpressionStatement","src":"562:62:201"},{"nodeType":"YulAssignment","src":"633:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"645:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"656:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"641:3:201"},"nodeType":"YulFunctionCall","src":"641:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"633:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"460:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"474:4:201","type":""}],"src":"309:356:201"},{"body":{"nodeType":"YulBlock","src":"844:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"861:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"872:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"854:6:201"},"nodeType":"YulFunctionCall","src":"854:21:201"},"nodeType":"YulExpressionStatement","src":"854:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"895:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"906:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"891:3:201"},"nodeType":"YulFunctionCall","src":"891:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"911:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"884:6:201"},"nodeType":"YulFunctionCall","src":"884:30:201"},"nodeType":"YulExpressionStatement","src":"884:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"934:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"945:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"930:3:201"},"nodeType":"YulFunctionCall","src":"930:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"950:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"923:6:201"},"nodeType":"YulFunctionCall","src":"923:62:201"},"nodeType":"YulExpressionStatement","src":"923:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1005:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1016:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1001:3:201"},"nodeType":"YulFunctionCall","src":"1001:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"1021:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"994:6:201"},"nodeType":"YulFunctionCall","src":"994:36:201"},"nodeType":"YulExpressionStatement","src":"994:36:201"},{"nodeType":"YulAssignment","src":"1039:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1051:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1062:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1047:3:201"},"nodeType":"YulFunctionCall","src":"1047:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1039:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"821:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"835:4:201","type":""}],"src":"670:402:201"}]},"contents":"{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"linkReferences":{},"object":"608060405234801561001057600080fd5b5060405161082638038061082683398101604081905261002f9161017a565b600080546001600160a01b03191633908117825560405190918291600080516020610806833981519152908290a3506100678161006d565b506101aa565b6000546001600160a01b031633146100cc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b0381166101315760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016100c3565b600080546040516001600160a01b038085169392169160008051602061080683398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006020828403121561018c57600080fd5b81516001600160a01b03811681146101a357600080fd5b9392505050565b61064d806101b96000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80638da5cb5b116100505780638da5cb5b14610089578063f18d03cc146100b5578063f2fde38b146100c857600080fd5b806359eba4541461006c578063715018a614610081575b600080fd5b61007f61007a3660046105a2565b6100db565b005b61007f6101f8565b6000546040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61007f6100c33660046105a2565b6102e8565b61007f6100d63660046105f3565b6103cc565b60005473ffffffffffffffffffffffffffffffffffffffff163314610161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6040517fe1f21c6700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015283811660248301526044820183905285169063e1f21c67906064015b600060405180830381600087803b1580156101da57600080fd5b505af11580156101ee573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610158565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610369576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610158565b6040517fbeabacc800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015283811660248301526044820183905285169063beabacc8906064016101c0565b60005473ffffffffffffffffffffffffffffffffffffffff16331461044d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610158565b73ffffffffffffffffffffffffffffffffffffffff81166104f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610158565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff8116811461059f57600080fd5b50565b600080600080608085870312156105b857600080fd5b84356105c38161057d565b935060208501356105d38161057d565b925060408501356105e38161057d565b9396929550929360600135925050565b60006020828403121561060557600080fd5b81356106108161057d565b939250505056fea2646970667358221220a43aed5f7e2e391ad1870c0ab081c80627c24b3ac185febf352475f0dcff08b864736f6c634300080a00338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x826 CODESIZE SUB DUP1 PUSH2 0x826 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x17A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 DUP3 SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x806 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP1 DUP3 SWAP1 LOG3 POP PUSH2 0x67 DUP2 PUSH2 0x6D JUMP JUMPDEST POP PUSH2 0x1AA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xCC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x131 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x806 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP2 LOG3 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 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x18C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x64D DUP1 PUSH2 0x1B9 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 0x8DA5CB5B GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x89 JUMPI DUP1 PUSH4 0xF18D03CC EQ PUSH2 0xB5 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x59EBA454 EQ PUSH2 0x6C JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x81 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7F PUSH2 0x7A CALLDATASIZE PUSH1 0x4 PUSH2 0x5A2 JUMP JUMPDEST PUSH2 0xDB JUMP JUMPDEST STOP JUMPDEST PUSH2 0x7F PUSH2 0x1F8 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x7F PUSH2 0xC3 CALLDATASIZE PUSH1 0x4 PUSH2 0x5A2 JUMP JUMPDEST PUSH2 0x2E8 JUMP JUMPDEST PUSH2 0x7F PUSH2 0xD6 CALLDATASIZE PUSH1 0x4 PUSH2 0x5F3 JUMP JUMPDEST PUSH2 0x3CC JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x161 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE DUP6 AND SWAP1 PUSH4 0xE1F21C67 SWAP1 PUSH1 0x64 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1EE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x279 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x158 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x369 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x158 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xBEABACC800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE DUP6 AND SWAP1 PUSH4 0xBEABACC8 SWAP1 PUSH1 0x64 ADD PUSH2 0x1C0 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x44D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x158 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x4F0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x158 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x59F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x5C3 DUP2 PUSH2 0x57D JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x5D3 DUP2 PUSH2 0x57D JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x5E3 DUP2 PUSH2 0x57D JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP3 SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x605 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x610 DUP2 PUSH2 0x57D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG4 GASPRICE 0xED 0x5F PUSH31 0x2E391AD1870C0AB081C80627C24B3AC185FEBF352475F0DCFF08B864736F6C PUSH4 0x4300080A STOP CALLER DUP12 0xE0 SMOD SWAP13 MSTORE8 AND MSIZE EQ SGT DIFFICULTY 0xCD 0x1F 0xD0 LOG4 CALLCODE DUP5 NOT 0x49 PUSH32 0x9722A3DAAFE3B4186F6B6457E000000000000000000000000000000000000000 ","sourceMap":"690:1278:192:-:0;;;875:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;835:17:11;873:18;;-1:-1:-1;;;;;;873:18:11;678:10:4;873:18:11;;;;;902:43;;678:10:4;;;;-1:-1:-1;;;;;;;;;;;902:43:11;835:17;;902:43;-1:-1:-1;908:24:192;926:5;908:17;:24::i;:::-;875:62;690:1278;;1875:226:11;1204:6;;-1:-1:-1;;;;;1204:6:11;678:10:4;1204:22:11;1196:67;;;;-1:-1:-1;;;1196:67:11;;511:2:201;1196:67:11;;;493:21:201;;;530:18;;;523:30;589:34;569:18;;;562:62;641:18;;1196:67:11;;;;;;;;;-1:-1:-1;;;;;1959:22:11;::::1;1951:73;;;::::0;-1:-1:-1;;;1951:73:11;;872:2:201;1951:73:11::1;::::0;::::1;854:21:201::0;911:2;891:18;;;884:30;950:34;930:18;;;923:62;-1:-1:-1;;;1001:18:201;;;994:36;1047:19;;1951:73:11::1;670:402:201::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;-1:-1:-1;;;;;2035:38:11;;::::1;::::0;2056:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;2035:38:11;::::1;2079:6;:17:::0;;-1:-1:-1;;;;;;2079:17:11::1;-1:-1:-1::0;;;;;2079:17:11;;;::::1;::::0;;;::::1;::::0;;1875:226::o;14:290:201:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:201;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:201:o;670:402::-;690:1278:192;;;;;;"},"deployedBytecode":{"functionDebugData":{"@_msgSender_736":{"entryPoint":null,"id":736,"parameterSlots":0,"returnSlots":1},"@approve_41238":{"entryPoint":219,"id":41238,"parameterSlots":4,"returnSlots":0},"@owner_1509":{"entryPoint":null,"id":1509,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_1544":{"entryPoint":504,"id":1544,"parameterSlots":0,"returnSlots":0},"@transferOwnership_1572":{"entryPoint":972,"id":1572,"parameterSlots":1,"returnSlots":0},"@transfer_41263":{"entryPoint":744,"id":41263,"parameterSlots":4,"returnSlots":0},"abi_decode_tuple_t_address":{"entryPoint":1523,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_addresst_contract$_IERC20_$1442t_addresst_uint256":{"entryPoint":1442,"id":null,"parameterSlots":2,"returnSlots":4},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_contract$_IERC20_$1442_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"validator_revert_address":{"entryPoint":1405,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:2457:201","statements":[{"nodeType":"YulBlock","src":"6:3:201","statements":[]},{"body":{"nodeType":"YulBlock","src":"59:109:201","statements":[{"body":{"nodeType":"YulBlock","src":"146:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"155:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"158:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"148:6:201"},"nodeType":"YulFunctionCall","src":"148:12:201"},"nodeType":"YulExpressionStatement","src":"148:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"82:5:201"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"93:5:201"},{"kind":"number","nodeType":"YulLiteral","src":"100:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"89:3:201"},"nodeType":"YulFunctionCall","src":"89:54:201"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"79:2:201"},"nodeType":"YulFunctionCall","src":"79:65:201"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"72:6:201"},"nodeType":"YulFunctionCall","src":"72:73:201"},"nodeType":"YulIf","src":"69:93:201"}]},"name":"validator_revert_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"48:5:201","type":""}],"src":"14:154:201"},{"body":{"nodeType":"YulBlock","src":"309:477:201","statements":[{"body":{"nodeType":"YulBlock","src":"356:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"365:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"368:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"358:6:201"},"nodeType":"YulFunctionCall","src":"358:12:201"},"nodeType":"YulExpressionStatement","src":"358:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"330:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"339:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"326:3:201"},"nodeType":"YulFunctionCall","src":"326:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"351:3:201","type":"","value":"128"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"322:3:201"},"nodeType":"YulFunctionCall","src":"322:33:201"},"nodeType":"YulIf","src":"319:53:201"},{"nodeType":"YulVariableDeclaration","src":"381:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"407:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"394:12:201"},"nodeType":"YulFunctionCall","src":"394:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"385:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"451:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"426:24:201"},"nodeType":"YulFunctionCall","src":"426:31:201"},"nodeType":"YulExpressionStatement","src":"426:31:201"},{"nodeType":"YulAssignment","src":"466:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"476:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"466:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"490:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"522:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"533:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"518:3:201"},"nodeType":"YulFunctionCall","src":"518:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"505:12:201"},"nodeType":"YulFunctionCall","src":"505:32:201"},"variables":[{"name":"value_1","nodeType":"YulTypedName","src":"494:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_1","nodeType":"YulIdentifier","src":"571:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"546:24:201"},"nodeType":"YulFunctionCall","src":"546:33:201"},"nodeType":"YulExpressionStatement","src":"546:33:201"},{"nodeType":"YulAssignment","src":"588:17:201","value":{"name":"value_1","nodeType":"YulIdentifier","src":"598:7:201"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"588:6:201"}]},{"nodeType":"YulVariableDeclaration","src":"614:47:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"646:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"657:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"642:3:201"},"nodeType":"YulFunctionCall","src":"642:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"629:12:201"},"nodeType":"YulFunctionCall","src":"629:32:201"},"variables":[{"name":"value_2","nodeType":"YulTypedName","src":"618:7:201","type":""}]},{"expression":{"arguments":[{"name":"value_2","nodeType":"YulIdentifier","src":"695:7:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"670:24:201"},"nodeType":"YulFunctionCall","src":"670:33:201"},"nodeType":"YulExpressionStatement","src":"670:33:201"},{"nodeType":"YulAssignment","src":"712:17:201","value":{"name":"value_2","nodeType":"YulIdentifier","src":"722:7:201"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"712:6:201"}]},{"nodeType":"YulAssignment","src":"738:42:201","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"765:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"776:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"761:3:201"},"nodeType":"YulFunctionCall","src":"761:18:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"748:12:201"},"nodeType":"YulFunctionCall","src":"748:32:201"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"738:6:201"}]}]},"name":"abi_decode_tuple_t_addresst_contract$_IERC20_$1442t_addresst_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"251:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"262:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"274:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"282:6:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"290:6:201","type":""},{"name":"value3","nodeType":"YulTypedName","src":"298:6:201","type":""}],"src":"173:613:201"},{"body":{"nodeType":"YulBlock","src":"892:125:201","statements":[{"nodeType":"YulAssignment","src":"902:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"914:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"925:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"910:3:201"},"nodeType":"YulFunctionCall","src":"910:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"902:4:201"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"944:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"959:6:201"},{"kind":"number","nodeType":"YulLiteral","src":"967:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"955:3:201"},"nodeType":"YulFunctionCall","src":"955:55:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"937:6:201"},"nodeType":"YulFunctionCall","src":"937:74:201"},"nodeType":"YulExpressionStatement","src":"937:74:201"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"861:9:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"872:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"883:4:201","type":""}],"src":"791:226:201"},{"body":{"nodeType":"YulBlock","src":"1092:177:201","statements":[{"body":{"nodeType":"YulBlock","src":"1138:16:201","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1147:1:201","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1150:1:201","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1140:6:201"},"nodeType":"YulFunctionCall","src":"1140:12:201"},"nodeType":"YulExpressionStatement","src":"1140:12:201"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1113:7:201"},{"name":"headStart","nodeType":"YulIdentifier","src":"1122:9:201"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1109:3:201"},"nodeType":"YulFunctionCall","src":"1109:23:201"},{"kind":"number","nodeType":"YulLiteral","src":"1134:2:201","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1105:3:201"},"nodeType":"YulFunctionCall","src":"1105:32:201"},"nodeType":"YulIf","src":"1102:52:201"},{"nodeType":"YulVariableDeclaration","src":"1163:36:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1189:9:201"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1176:12:201"},"nodeType":"YulFunctionCall","src":"1176:23:201"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"1167:5:201","type":""}]},{"expression":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"1233:5:201"}],"functionName":{"name":"validator_revert_address","nodeType":"YulIdentifier","src":"1208:24:201"},"nodeType":"YulFunctionCall","src":"1208:31:201"},"nodeType":"YulExpressionStatement","src":"1208:31:201"},{"nodeType":"YulAssignment","src":"1248:15:201","value":{"name":"value","nodeType":"YulIdentifier","src":"1258:5:201"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1248:6:201"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1058:9:201","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1069:7:201","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1081:6:201","type":""}],"src":"1022:247:201"},{"body":{"nodeType":"YulBlock","src":"1448:182:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1465:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1476:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1458:6:201"},"nodeType":"YulFunctionCall","src":"1458:21:201"},"nodeType":"YulExpressionStatement","src":"1458:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1499:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1510:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1495:3:201"},"nodeType":"YulFunctionCall","src":"1495:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"1515:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1488:6:201"},"nodeType":"YulFunctionCall","src":"1488:30:201"},"nodeType":"YulExpressionStatement","src":"1488:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1538:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1549:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1534:3:201"},"nodeType":"YulFunctionCall","src":"1534:18:201"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"1554:34:201","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1527:6:201"},"nodeType":"YulFunctionCall","src":"1527:62:201"},"nodeType":"YulExpressionStatement","src":"1527:62:201"},{"nodeType":"YulAssignment","src":"1598:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1610:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1621:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1606:3:201"},"nodeType":"YulFunctionCall","src":"1606:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1598:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1425:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1439:4:201","type":""}],"src":"1274:356:201"},{"body":{"nodeType":"YulBlock","src":"1807:241:201","statements":[{"nodeType":"YulAssignment","src":"1817:26:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1829:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1840:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1825:3:201"},"nodeType":"YulFunctionCall","src":"1825:18:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1817:4:201"}]},{"nodeType":"YulVariableDeclaration","src":"1852:52:201","value":{"kind":"number","nodeType":"YulLiteral","src":"1862:42:201","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"1856:2:201","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1920:9:201"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1935:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1943:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1931:3:201"},"nodeType":"YulFunctionCall","src":"1931:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1913:6:201"},"nodeType":"YulFunctionCall","src":"1913:34:201"},"nodeType":"YulExpressionStatement","src":"1913:34:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1967:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"1978:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1963:3:201"},"nodeType":"YulFunctionCall","src":"1963:18:201"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"1987:6:201"},{"name":"_1","nodeType":"YulIdentifier","src":"1995:2:201"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1983:3:201"},"nodeType":"YulFunctionCall","src":"1983:15:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1956:6:201"},"nodeType":"YulFunctionCall","src":"1956:43:201"},"nodeType":"YulExpressionStatement","src":"1956:43:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2019:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2030:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2015:3:201"},"nodeType":"YulFunctionCall","src":"2015:18:201"},{"name":"value2","nodeType":"YulIdentifier","src":"2035:6:201"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2008:6:201"},"nodeType":"YulFunctionCall","src":"2008:34:201"},"nodeType":"YulExpressionStatement","src":"2008:34:201"}]},"name":"abi_encode_tuple_t_contract$_IERC20_$1442_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1760:9:201","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1771:6:201","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1779:6:201","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1787:6:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1798:4:201","type":""}],"src":"1635:413:201"},{"body":{"nodeType":"YulBlock","src":"2227:228:201","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2244:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2255:2:201","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2237:6:201"},"nodeType":"YulFunctionCall","src":"2237:21:201"},"nodeType":"YulExpressionStatement","src":"2237:21:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2278:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2289:2:201","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2274:3:201"},"nodeType":"YulFunctionCall","src":"2274:18:201"},{"kind":"number","nodeType":"YulLiteral","src":"2294:2:201","type":"","value":"38"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2267:6:201"},"nodeType":"YulFunctionCall","src":"2267:30:201"},"nodeType":"YulExpressionStatement","src":"2267:30:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2317:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2328:2:201","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2313:3:201"},"nodeType":"YulFunctionCall","src":"2313:18:201"},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061","kind":"string","nodeType":"YulLiteral","src":"2333:34:201","type":"","value":"Ownable: new owner is the zero a"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2306:6:201"},"nodeType":"YulFunctionCall","src":"2306:62:201"},"nodeType":"YulExpressionStatement","src":"2306:62:201"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2388:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2399:2:201","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2384:3:201"},"nodeType":"YulFunctionCall","src":"2384:18:201"},{"hexValue":"646472657373","kind":"string","nodeType":"YulLiteral","src":"2404:8:201","type":"","value":"ddress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2377:6:201"},"nodeType":"YulFunctionCall","src":"2377:36:201"},"nodeType":"YulExpressionStatement","src":"2377:36:201"},{"nodeType":"YulAssignment","src":"2422:27:201","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2434:9:201"},{"kind":"number","nodeType":"YulLiteral","src":"2445:3:201","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2430:3:201"},"nodeType":"YulFunctionCall","src":"2430:19:201"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2422:4:201"}]}]},"name":"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2204:9:201","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2218:4:201","type":""}],"src":"2053:402:201"}]},"contents":"{\n    { }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_contract$_IERC20_$1442t_addresst_uint256(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := calldataload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        let value_2 := calldataload(add(headStart, 64))\n        validator_revert_address(value_2)\n        value2 := value_2\n        value3 := calldataload(add(headStart, 96))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_contract$_IERC20_$1442_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n}","id":201,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100675760003560e01c80638da5cb5b116100505780638da5cb5b14610089578063f18d03cc146100b5578063f2fde38b146100c857600080fd5b806359eba4541461006c578063715018a614610081575b600080fd5b61007f61007a3660046105a2565b6100db565b005b61007f6101f8565b6000546040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61007f6100c33660046105a2565b6102e8565b61007f6100d63660046105f3565b6103cc565b60005473ffffffffffffffffffffffffffffffffffffffff163314610161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6040517fe1f21c6700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015283811660248301526044820183905285169063e1f21c67906064015b600060405180830381600087803b1580156101da57600080fd5b505af11580156101ee573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610158565b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610369576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610158565b6040517fbeabacc800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015283811660248301526044820183905285169063beabacc8906064016101c0565b60005473ffffffffffffffffffffffffffffffffffffffff16331461044d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610158565b73ffffffffffffffffffffffffffffffffffffffff81166104f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610158565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff8116811461059f57600080fd5b50565b600080600080608085870312156105b857600080fd5b84356105c38161057d565b935060208501356105d38161057d565b925060408501356105e38161057d565b9396929550929360600135925050565b60006020828403121561060557600080fd5b81356106108161057d565b939250505056fea2646970667358221220a43aed5f7e2e391ad1870c0ab081c80627c24b3ac185febf352475f0dcff08b864736f6c634300080a0033","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 0x8DA5CB5B GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x89 JUMPI DUP1 PUSH4 0xF18D03CC EQ PUSH2 0xB5 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x59EBA454 EQ PUSH2 0x6C JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x81 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7F PUSH2 0x7A CALLDATASIZE PUSH1 0x4 PUSH2 0x5A2 JUMP JUMPDEST PUSH2 0xDB JUMP JUMPDEST STOP JUMPDEST PUSH2 0x7F PUSH2 0x1F8 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x7F PUSH2 0xC3 CALLDATASIZE PUSH1 0x4 PUSH2 0x5A2 JUMP JUMPDEST PUSH2 0x2E8 JUMP JUMPDEST PUSH2 0x7F PUSH2 0xD6 CALLDATASIZE PUSH1 0x4 PUSH2 0x5F3 JUMP JUMPDEST PUSH2 0x3CC JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x161 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE DUP6 AND SWAP1 PUSH4 0xE1F21C67 SWAP1 PUSH1 0x64 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1EE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x279 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x158 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x369 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x158 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xBEABACC800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD DUP4 SWAP1 MSTORE DUP6 AND SWAP1 PUSH4 0xBEABACC8 SWAP1 PUSH1 0x64 ADD PUSH2 0x1C0 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x44D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x158 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x4F0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x158 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x59F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH2 0x5C3 DUP2 PUSH2 0x57D JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH2 0x5D3 DUP2 PUSH2 0x57D JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x5E3 DUP2 PUSH2 0x57D JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP3 SWAP4 PUSH1 0x60 ADD CALLDATALOAD SWAP3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x605 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x610 DUP2 PUSH2 0x57D JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG4 GASPRICE 0xED 0x5F PUSH31 0x2E391AD1870C0AB081C80627C24B3AC185FEBF352475F0DCFF08B864736F6C PUSH4 0x4300080A STOP CALLER ","sourceMap":"690:1278:192:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1234:190;;;;;;:::i;:::-;;:::i;:::-;;1601:135:11;;;:::i;1018:71::-;1056:7;1078:6;1018:71;;;1078:6;;;;937:74:201;;1018:71:11;;;;;925:2:201;1018:71:11;;;1774:192:192;;;;;;:::i;:::-;;:::i;1875:226:11:-;;;;;;:::i;:::-;;:::i;1234:190:192:-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;1476:2:201;1196:67:11;;;1458:21:201;;;1495:18;;;1488:30;1554:34;1534:18;;;1527:62;1606:18;;1196:67:11;;;;;;;;;1364:55:192::1;::::0;;;;:29:::1;1931:15:201::0;;;1364:55:192::1;::::0;::::1;1913:34:201::0;1983:15;;;1963:18;;;1956:43;2015:18;;;2008:34;;;1364:29:192;::::1;::::0;::::1;::::0;1825:18:201;;1364:55:192::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1234:190:::0;;;;:::o;1601:135:11:-;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;1476:2:201;1196:67:11;;;1458:21:201;;;1495:18;;;1488:30;1554:34;1534:18;;;1527:62;1606:18;;1196:67:11;1274:356:201;1196:67:11;1703:1:::1;1687:6:::0;;1666:40:::1;::::0;::::1;1687:6:::0;;::::1;::::0;1666:40:::1;::::0;1703:1;;1666:40:::1;1729:1;1712:19:::0;;;::::1;::::0;;1601:135::o;1774:192:192:-;1204:6:11;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;1476:2:201;1196:67:11;;;1458:21:201;;;1495:18;;;1488:30;1554:34;1534:18;;;1527:62;1606:18;;1196:67:11;1274:356:201;1196:67:11;1905:56:192::1;::::0;;;;:30:::1;1931:15:201::0;;;1905:56:192::1;::::0;::::1;1913:34:201::0;1983:15;;;1963:18;;;1956:43;2015:18;;;2008:34;;;1905:30:192;::::1;::::0;::::1;::::0;1825:18:201;;1905:56:192::1;1635:413:201::0;1875:226:11;1204:6;;:22;:6;678:10:4;1204:22:11;1196:67;;;;;;;1476:2:201;1196:67:11;;;1458:21:201;;;1495:18;;;1488:30;1554:34;1534:18;;;1527:62;1606:18;;1196:67:11;1274:356:201;1196:67:11;1959:22:::1;::::0;::::1;1951:73;;;::::0;::::1;::::0;;2255:2:201;1951:73:11::1;::::0;::::1;2237:21:201::0;2294:2;2274:18;;;2267:30;2333:34;2313:18;;;2306:62;2404:8;2384:18;;;2377:36;2430:19;;1951:73:11::1;2053:402:201::0;1951:73:11::1;2056:6;::::0;;2035:38:::1;::::0;::::1;::::0;;::::1;::::0;2056:6;::::1;::::0;2035:38:::1;::::0;::::1;2079:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1875:226::o;14:154:201:-;100:42;93:5;89:54;82:5;79:65;69:93;;158:1;155;148:12;69:93;14:154;:::o;173:613::-;274:6;282;290;298;351:3;339:9;330:7;326:23;322:33;319:53;;;368:1;365;358:12;319:53;407:9;394:23;426:31;451:5;426:31;:::i;:::-;476:5;-1:-1:-1;533:2:201;518:18;;505:32;546:33;505:32;546:33;:::i;:::-;598:7;-1:-1:-1;657:2:201;642:18;;629:32;670:33;629:32;670:33;:::i;:::-;173:613;;;;-1:-1:-1;722:7:201;;776:2;761:18;748:32;;-1:-1:-1;;173:613:201:o;1022:247::-;1081:6;1134:2;1122:9;1113:7;1109:23;1105:32;1102:52;;;1150:1;1147;1140:12;1102:52;1189:9;1176:23;1208:31;1233:5;1208:31;:::i;:::-;1258:5;1022:247;-1:-1:-1;;;1022:247:201:o"},"gasEstimates":{"creation":{"codeDepositCost":"322600","executionCost":"infinite","totalCost":"infinite"},"external":{"approve(address,address,address,uint256)":"infinite","owner()":"2280","renounceOwnership()":"30149","transfer(address,address,address,uint256)":"infinite","transferOwnership(address)":"30363"}},"methodIdentifiers":{"approve(address,address,address,uint256)":"59eba454","owner()":"8da5cb5b","renounceOwnership()":"715018a6","transfer(address,address,address,uint256)":"f18d03cc","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave*\",\"kind\":\"dev\",\"methods\":{\"approve(address,address,address,uint256)\":{\"details\":\"Transfer an amount of tokens to the recipient.\",\"params\":{\"amount\":\"The amount to be transferred.\",\"collector\":\"The address of the collector contract\",\"recipient\":\"The address of the entity to transfer the tokens.\",\"token\":\"The address of the asset\"}},\"constructor\":{\"details\":\"Constructor setups the ownership of the contract\",\"params\":{\"owner\":\"The address of the owner of the CollectorController\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transfer(address,address,address,uint256)\":{\"details\":\"Transfer an amount of tokens to the recipient.\",\"params\":{\"amount\":\"The amount to be transferred.\",\"collector\":\"The address of the collector contract to retrieve funds from (e.g. Aave ecosystem reserve)\",\"recipient\":\"The address of the entity to transfer the tokens.\",\"token\":\"The address of the asset\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"CollectorController\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"The CollectorController contracts allows the owner of the contract to approve or transfer tokens from the specified collector proxy contract. The admin of the Collector proxy can't be the same as the fundsAdmin address. This is needed due the usage of transparent proxy pattern.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/treasury/CollectorController.sol\":\"CollectorController\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n  function _msgSender() internal view virtual returns (address payable) {\\n    return payable(msg.sender);\\n  }\\n\\n  function _msgData() internal view virtual returns (bytes memory) {\\n    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n    return msg.data;\\n  }\\n}\\n\",\"keccak256\":\"0xc0df5ebb2c3d8b4509464c40a88cc51e5e5f5e4a26fafc909330e9bb2658f641\",\"license\":\"MIT\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport './Context.sol';\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable is Context {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev Initializes the contract setting the deployer as the initial owner.\\n   */\\n  constructor() {\\n    address msgSender = _msgSender();\\n    _owner = msgSender;\\n    emit OwnershipTransferred(address(0), msgSender);\\n  }\\n\\n  /**\\n   * @dev Returns the address of the current owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(_owner == _msgSender(), 'Ownable: caller is not the owner');\\n    _;\\n  }\\n\\n  /**\\n   * @dev Leaves the contract without owner. It will not be possible to call\\n   * `onlyOwner` functions anymore. Can only be called by the current owner.\\n   *\\n   * NOTE: Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public virtual onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = address(0);\\n  }\\n\\n  /**\\n   * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n   * Can only be called by the current owner.\\n   */\\n  function transferOwnership(address newOwner) public virtual onlyOwner {\\n    require(newOwner != address(0), 'Ownable: new owner is the zero address');\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\",\"keccak256\":\"0x3ce185c4f579e32006f8893dbfdc1b5d878c0e2cafd1508f7ceb081698bc81f9\",\"license\":\"MIT\"},\"contracts/treasury/CollectorController.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {Ownable} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/Ownable.sol';\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {ICollector} from './interfaces/ICollector.sol';\\n\\n/**\\n * @title CollectorController\\n * @notice The CollectorController contracts allows the owner of the contract\\n           to approve or transfer tokens from the specified collector proxy contract.\\n           The admin of the Collector proxy can't be the same as the fundsAdmin address.\\n           This is needed due the usage of transparent proxy pattern.\\n * @author Aave\\n **/\\ncontract CollectorController is Ownable {\\n  /**\\n   * @dev Constructor setups the ownership of the contract\\n   * @param owner The address of the owner of the CollectorController\\n   */\\n  constructor(address owner) {\\n    transferOwnership(owner);\\n  }\\n\\n  /**\\n   * @dev Transfer an amount of tokens to the recipient.\\n   * @param collector The address of the collector contract\\n   * @param token The address of the asset\\n   * @param recipient The address of the entity to transfer the tokens.\\n   * @param amount The amount to be transferred.\\n   */\\n  function approve(\\n    address collector,\\n    IERC20 token,\\n    address recipient,\\n    uint256 amount\\n  ) external onlyOwner {\\n    ICollector(collector).approve(token, recipient, amount);\\n  }\\n\\n  /**\\n   * @dev Transfer an amount of tokens to the recipient.\\n   * @param collector The address of the collector contract to retrieve funds from (e.g. Aave ecosystem reserve)\\n   * @param token The address of the asset\\n   * @param recipient The address of the entity to transfer the tokens.\\n   * @param amount The amount to be transferred.\\n   */\\n  function transfer(\\n    address collector,\\n    IERC20 token,\\n    address recipient,\\n    uint256 amount\\n  ) external onlyOwner {\\n    ICollector(collector).transfer(token, recipient, amount);\\n  }\\n}\\n\",\"keccak256\":\"0x584de89760711a22b86b6d0e1b82bf74fc769d0d752577f0c6e43431bd96f0af\",\"license\":\"AGPL-3.0\"},\"contracts/treasury/interfaces/ICollector.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title ICollector\\n * @notice Defines the interface of the Collector contract\\n * @author Aave\\n **/\\ninterface ICollector {\\n  /**\\n   * @dev Emitted during the transfer of ownership of the funds administrator address\\n   * @param fundsAdmin The new funds administrator address\\n   **/\\n  event NewFundsAdmin(address indexed fundsAdmin);\\n\\n  /**\\n   * @dev Retrieve the current implementation Revision of the proxy\\n   * @return The revision version\\n   */\\n  function REVISION() external view returns (uint256);\\n\\n  /**\\n   * @dev Retrieve the current funds administrator\\n   * @return The address of the funds administrator\\n   */\\n  function getFundsAdmin() external view returns (address);\\n\\n  /**\\n   * @dev Approve an amount of tokens to be pulled by the recipient.\\n   * @param token The address of the asset\\n   * @param recipient The address of the entity allowed to pull tokens\\n   * @param amount The amount allowed to be pulled. If zero it will revoke the approval.\\n   */\\n  function approve(IERC20 token, address recipient, uint256 amount) external;\\n\\n  /**\\n   * @dev Transfer an amount of tokens to the recipient.\\n   * @param token The address of the asset\\n   * @param recipient The address of the entity to transfer the tokens.\\n   * @param amount The amount to be transferred.\\n   */\\n  function transfer(IERC20 token, address recipient, uint256 amount) external;\\n\\n  /**\\n   * @dev Transfer the ownership of the funds administrator role.\\n          This function should only be callable by the current funds administrator.\\n   * @param admin The address of the new funds administrator\\n   */\\n  function setFundsAdmin(address admin) external;\\n}\\n\",\"keccak256\":\"0xf8e6208dc4495effeb0a4abb972244b2f887002e0a34f152fb19eee6befe448f\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[{"astId":1472,"contract":"contracts/treasury/CollectorController.sol:CollectorController","label":"_owner","offset":0,"slot":"0","type":"t_address"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"}}},"userdoc":{"kind":"user","methods":{},"notice":"The CollectorController contracts allows the owner of the contract to approve or transfer tokens from the specified collector proxy contract. The admin of the Collector proxy can't be the same as the fundsAdmin address. This is needed due the usage of transparent proxy pattern.","version":1}}},"contracts/treasury/interfaces/IAaveEcosystemReserveController.sol":{"IAaveEcosystemReserveController":{"abi":[{"inputs":[{"internalType":"address","name":"collector","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collector","type":"address"},{"internalType":"uint256","name":"streamId","type":"uint256"}],"name":"cancelStream","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collector","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deposit","type":"uint256"},{"internalType":"contract IERC20","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"stopTime","type":"uint256"}],"name":"createStream","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collector","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collector","type":"address"},{"internalType":"uint256","name":"streamId","type":"uint256"},{"internalType":"uint256","name":"funds","type":"uint256"}],"name":"withdrawFromStream","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"approve(address,address,address,uint256)":{"params":{"amount":"Allowance to approve*","collector":"The collector contract with funds (Aave ecosystem reserve)","recipient":"Allowance's recipient","token":"The asset address"}},"cancelStream(address,uint256)":{"params":{"collector":"The collector contract with funds (Aave ecosystem reserve)","streamId":"The id of the stream to cancel"},"returns":{"_0":"bool If the cancellation happened correctly*"}},"createStream(address,address,uint256,address,uint256,uint256)":{"params":{"collector":"The collector contract with funds (Aave ecosystem reserve)","deposit":"Total amount to be streamed","recipient":"The recipient of the stream of token","startTime":"The unix timestamp for when the stream starts","stopTime":"The unix timestamp for when the stream stops","tokenAddress":"The ERC20 token to use as streaming asset"},"returns":{"_0":"uint256 The stream id created*"}},"transfer(address,address,address,uint256)":{"params":{"amount":"Amount to transfer*","collector":"The collector contract with funds (Aave ecosystem reserve)","recipient":"Transfer's recipient","token":"The asset address"}},"withdrawFromStream(address,uint256,uint256)":{"params":{"collector":"The collector contract with funds (Aave ecosystem reserve)","funds":"Amount to withdraw","streamId":"The id of the stream to withdraw tokens from"},"returns":{"_0":"bool If the withdrawal finished properly*"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"approve(address,address,address,uint256)":"59eba454","cancelStream(address,uint256)":"7dc14a8e","createStream(address,address,uint256,address,uint256,uint256)":"fd59e134","transfer(address,address,address,uint256)":"f18d03cc","withdrawFromStream(address,uint256,uint256)":"2f436bfa"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"cancelStream\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stopTime\",\"type\":\"uint256\"}],\"name\":\"createStream\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collector\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"funds\",\"type\":\"uint256\"}],\"name\":\"withdrawFromStream\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approve(address,address,address,uint256)\":{\"params\":{\"amount\":\"Allowance to approve*\",\"collector\":\"The collector contract with funds (Aave ecosystem reserve)\",\"recipient\":\"Allowance's recipient\",\"token\":\"The asset address\"}},\"cancelStream(address,uint256)\":{\"params\":{\"collector\":\"The collector contract with funds (Aave ecosystem reserve)\",\"streamId\":\"The id of the stream to cancel\"},\"returns\":{\"_0\":\"bool If the cancellation happened correctly*\"}},\"createStream(address,address,uint256,address,uint256,uint256)\":{\"params\":{\"collector\":\"The collector contract with funds (Aave ecosystem reserve)\",\"deposit\":\"Total amount to be streamed\",\"recipient\":\"The recipient of the stream of token\",\"startTime\":\"The unix timestamp for when the stream starts\",\"stopTime\":\"The unix timestamp for when the stream stops\",\"tokenAddress\":\"The ERC20 token to use as streaming asset\"},\"returns\":{\"_0\":\"uint256 The stream id created*\"}},\"transfer(address,address,address,uint256)\":{\"params\":{\"amount\":\"Amount to transfer*\",\"collector\":\"The collector contract with funds (Aave ecosystem reserve)\",\"recipient\":\"Transfer's recipient\",\"token\":\"The asset address\"}},\"withdrawFromStream(address,uint256,uint256)\":{\"params\":{\"collector\":\"The collector contract with funds (Aave ecosystem reserve)\",\"funds\":\"Amount to withdraw\",\"streamId\":\"The id of the stream to withdraw tokens from\"},\"returns\":{\"_0\":\"bool If the withdrawal finished properly*\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approve(address,address,address,uint256)\":{\"notice\":\"Proxy function for ERC20's approve(), pointing to a specific collector contract\"},\"cancelStream(address,uint256)\":{\"notice\":\"Proxy function to cancel a stream of token on a specific collector contract\"},\"createStream(address,address,uint256,address,uint256,uint256)\":{\"notice\":\"Proxy function to create a stream of token on a specific collector contract\"},\"transfer(address,address,address,uint256)\":{\"notice\":\"Proxy function for ERC20's transfer(), pointing to a specific collector contract\"},\"withdrawFromStream(address,uint256,uint256)\":{\"notice\":\"Proxy function to withdraw from a stream of token on a specific collector contract\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/treasury/interfaces/IAaveEcosystemReserveController.sol\":\"IAaveEcosystemReserveController\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/treasury/interfaces/IAaveEcosystemReserveController.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\n\\ninterface IAaveEcosystemReserveController {\\n  /**\\n   * @notice Proxy function for ERC20's approve(), pointing to a specific collector contract\\n   * @param collector The collector contract with funds (Aave ecosystem reserve)\\n   * @param token The asset address\\n   * @param recipient Allowance's recipient\\n   * @param amount Allowance to approve\\n   **/\\n  function approve(address collector, IERC20 token, address recipient, uint256 amount) external;\\n\\n  /**\\n   * @notice Proxy function for ERC20's transfer(), pointing to a specific collector contract\\n   * @param collector The collector contract with funds (Aave ecosystem reserve)\\n   * @param token The asset address\\n   * @param recipient Transfer's recipient\\n   * @param amount Amount to transfer\\n   **/\\n  function transfer(address collector, IERC20 token, address recipient, uint256 amount) external;\\n\\n  /**\\n   * @notice Proxy function to create a stream of token on a specific collector contract\\n   * @param collector The collector contract with funds (Aave ecosystem reserve)\\n   * @param recipient The recipient of the stream of token\\n   * @param deposit Total amount to be streamed\\n   * @param tokenAddress The ERC20 token to use as streaming asset\\n   * @param startTime The unix timestamp for when the stream starts\\n   * @param stopTime The unix timestamp for when the stream stops\\n   * @return uint256 The stream id created\\n   **/\\n  function createStream(\\n    address collector,\\n    address recipient,\\n    uint256 deposit,\\n    IERC20 tokenAddress,\\n    uint256 startTime,\\n    uint256 stopTime\\n  ) external returns (uint256);\\n\\n  /**\\n   * @notice Proxy function to withdraw from a stream of token on a specific collector contract\\n   * @param collector The collector contract with funds (Aave ecosystem reserve)\\n   * @param streamId The id of the stream to withdraw tokens from\\n   * @param funds Amount to withdraw\\n   * @return bool If the withdrawal finished properly\\n   **/\\n  function withdrawFromStream(\\n    address collector,\\n    uint256 streamId,\\n    uint256 funds\\n  ) external returns (bool);\\n\\n  /**\\n   * @notice Proxy function to cancel a stream of token on a specific collector contract\\n   * @param collector The collector contract with funds (Aave ecosystem reserve)\\n   * @param streamId The id of the stream to cancel\\n   * @return bool If the cancellation happened correctly\\n   **/\\n  function cancelStream(address collector, uint256 streamId) external returns (bool);\\n}\\n\",\"keccak256\":\"0xdaf4bf475ee596cd5fdb2553dbbed0cb72b8a21be7ae14c25a37333fa58229ac\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{"approve(address,address,address,uint256)":{"notice":"Proxy function for ERC20's approve(), pointing to a specific collector contract"},"cancelStream(address,uint256)":{"notice":"Proxy function to cancel a stream of token on a specific collector contract"},"createStream(address,address,uint256,address,uint256,uint256)":{"notice":"Proxy function to create a stream of token on a specific collector contract"},"transfer(address,address,address,uint256)":{"notice":"Proxy function for ERC20's transfer(), pointing to a specific collector contract"},"withdrawFromStream(address,uint256,uint256)":{"notice":"Proxy function to withdraw from a stream of token on a specific collector contract"}},"version":1}}},"contracts/treasury/interfaces/IAdminControlledEcosystemReserve.sol":{"IAdminControlledEcosystemReserve":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fundsAdmin","type":"address"}],"name":"NewFundsAdmin","type":"event"},{"inputs":[],"name":"ETH_MOCK_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getFundsAdmin","outputs":[{"internalType":"address","name":"","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"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"events":{"NewFundsAdmin(address)":{"params":{"fundsAdmin":"The new funds admin*"}}},"kind":"dev","methods":{"ETH_MOCK_ADDRESS()":{"returns":{"_0":"address The address*"}},"approve(address,address,uint256)":{"details":"Function for the funds admin to give ERC20 allowance to other parties","params":{"amount":"Allowance to approve*","recipient":"Allowance's recipient","token":"The address of the token to give allowance from"}},"getFundsAdmin()":{"returns":{"_0":"address The address of the funds admin*"}},"transfer(address,address,uint256)":{"params":{"amount":"Amount to transfer*","recipient":"Transfer's recipient","token":"The address of the token to transfer"}}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"ETH_MOCK_ADDRESS()":"51ee886b","approve(address,address,uint256)":"e1f21c67","getFundsAdmin()":"06bc2ee0","transfer(address,address,uint256)":"beabacc8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fundsAdmin\",\"type\":\"address\"}],\"name\":\"NewFundsAdmin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ETH_MOCK_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFundsAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"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\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"NewFundsAdmin(address)\":{\"params\":{\"fundsAdmin\":\"The new funds admin*\"}}},\"kind\":\"dev\",\"methods\":{\"ETH_MOCK_ADDRESS()\":{\"returns\":{\"_0\":\"address The address*\"}},\"approve(address,address,uint256)\":{\"details\":\"Function for the funds admin to give ERC20 allowance to other parties\",\"params\":{\"amount\":\"Allowance to approve*\",\"recipient\":\"Allowance's recipient\",\"token\":\"The address of the token to give allowance from\"}},\"getFundsAdmin()\":{\"returns\":{\"_0\":\"address The address of the funds admin*\"}},\"transfer(address,address,uint256)\":{\"params\":{\"amount\":\"Amount to transfer*\",\"recipient\":\"Transfer's recipient\",\"token\":\"The address of the token to transfer\"}}},\"version\":1},\"userdoc\":{\"events\":{\"NewFundsAdmin(address)\":{\"notice\":\"Emitted when the funds admin changes\"}},\"kind\":\"user\",\"methods\":{\"ETH_MOCK_ADDRESS()\":{\"notice\":\"Returns the mock ETH reference address\"},\"getFundsAdmin()\":{\"notice\":\"Return the funds admin, only entity to be able to interact with this contract (controller of reserve)\"},\"transfer(address,address,uint256)\":{\"notice\":\"Function for the funds admin to transfer ERC20 tokens to other parties\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/treasury/interfaces/IAdminControlledEcosystemReserve.sol\":\"IAdminControlledEcosystemReserve\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/treasury/interfaces/IAdminControlledEcosystemReserve.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\n\\ninterface IAdminControlledEcosystemReserve {\\n  /** @notice Emitted when the funds admin changes\\n   * @param fundsAdmin The new funds admin\\n   **/\\n  event NewFundsAdmin(address indexed fundsAdmin);\\n\\n  /** @notice Returns the mock ETH reference address\\n   * @return address The address\\n   **/\\n  function ETH_MOCK_ADDRESS() external pure returns (address);\\n\\n  /**\\n   * @notice Return the funds admin, only entity to be able to interact with this contract (controller of reserve)\\n   * @return address The address of the funds admin\\n   **/\\n  function getFundsAdmin() external view returns (address);\\n\\n  /**\\n   * @dev Function for the funds admin to give ERC20 allowance to other parties\\n   * @param token The address of the token to give allowance from\\n   * @param recipient Allowance's recipient\\n   * @param amount Allowance to approve\\n   **/\\n  function approve(IERC20 token, address recipient, uint256 amount) external;\\n\\n  /**\\n   * @notice Function for the funds admin to transfer ERC20 tokens to other parties\\n   * @param token The address of the token to transfer\\n   * @param recipient Transfer's recipient\\n   * @param amount Amount to transfer\\n   **/\\n  function transfer(IERC20 token, address recipient, uint256 amount) external;\\n}\\n\",\"keccak256\":\"0xe826cd01ee12902faac76b8ee3f26745f08134a5c7610d111605cae74a5e3268\",\"license\":\"GPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"events":{"NewFundsAdmin(address)":{"notice":"Emitted when the funds admin changes"}},"kind":"user","methods":{"ETH_MOCK_ADDRESS()":{"notice":"Returns the mock ETH reference address"},"getFundsAdmin()":{"notice":"Return the funds admin, only entity to be able to interact with this contract (controller of reserve)"},"transfer(address,address,uint256)":{"notice":"Function for the funds admin to transfer ERC20 tokens to other parties"}},"version":1}}},"contracts/treasury/interfaces/ICollector.sol":{"ICollector":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"fundsAdmin","type":"address"}],"name":"NewFundsAdmin","type":"event"},{"inputs":[],"name":"REVISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getFundsAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"setFundsAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Aave*","events":{"NewFundsAdmin(address)":{"details":"Emitted during the transfer of ownership of the funds administrator address","params":{"fundsAdmin":"The new funds administrator address*"}}},"kind":"dev","methods":{"REVISION()":{"details":"Retrieve the current implementation Revision of the proxy","returns":{"_0":"The revision version"}},"approve(address,address,uint256)":{"details":"Approve an amount of tokens to be pulled by the recipient.","params":{"amount":"The amount allowed to be pulled. If zero it will revoke the approval.","recipient":"The address of the entity allowed to pull tokens","token":"The address of the asset"}},"getFundsAdmin()":{"details":"Retrieve the current funds administrator","returns":{"_0":"The address of the funds administrator"}},"setFundsAdmin(address)":{"details":"Transfer the ownership of the funds administrator role. This function should only be callable by the current funds administrator.","params":{"admin":"The address of the new funds administrator"}},"transfer(address,address,uint256)":{"details":"Transfer an amount of tokens to the recipient.","params":{"amount":"The amount to be transferred.","recipient":"The address of the entity to transfer the tokens.","token":"The address of the asset"}}},"title":"ICollector","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"REVISION()":"dde43cba","approve(address,address,uint256)":"e1f21c67","getFundsAdmin()":"06bc2ee0","setFundsAdmin(address)":"ed0d2371","transfer(address,address,uint256)":"beabacc8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fundsAdmin\",\"type\":\"address\"}],\"name\":\"NewFundsAdmin\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"REVISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFundsAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"setFundsAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Aave*\",\"events\":{\"NewFundsAdmin(address)\":{\"details\":\"Emitted during the transfer of ownership of the funds administrator address\",\"params\":{\"fundsAdmin\":\"The new funds administrator address*\"}}},\"kind\":\"dev\",\"methods\":{\"REVISION()\":{\"details\":\"Retrieve the current implementation Revision of the proxy\",\"returns\":{\"_0\":\"The revision version\"}},\"approve(address,address,uint256)\":{\"details\":\"Approve an amount of tokens to be pulled by the recipient.\",\"params\":{\"amount\":\"The amount allowed to be pulled. If zero it will revoke the approval.\",\"recipient\":\"The address of the entity allowed to pull tokens\",\"token\":\"The address of the asset\"}},\"getFundsAdmin()\":{\"details\":\"Retrieve the current funds administrator\",\"returns\":{\"_0\":\"The address of the funds administrator\"}},\"setFundsAdmin(address)\":{\"details\":\"Transfer the ownership of the funds administrator role. This function should only be callable by the current funds administrator.\",\"params\":{\"admin\":\"The address of the new funds administrator\"}},\"transfer(address,address,uint256)\":{\"details\":\"Transfer an amount of tokens to the recipient.\",\"params\":{\"amount\":\"The amount to be transferred.\",\"recipient\":\"The address of the entity to transfer the tokens.\",\"token\":\"The address of the asset\"}}},\"title\":\"ICollector\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Defines the interface of the Collector contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/treasury/interfaces/ICollector.sol\":\"ICollector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/treasury/interfaces/ICollector.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.10;\\n\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\n\\n/**\\n * @title ICollector\\n * @notice Defines the interface of the Collector contract\\n * @author Aave\\n **/\\ninterface ICollector {\\n  /**\\n   * @dev Emitted during the transfer of ownership of the funds administrator address\\n   * @param fundsAdmin The new funds administrator address\\n   **/\\n  event NewFundsAdmin(address indexed fundsAdmin);\\n\\n  /**\\n   * @dev Retrieve the current implementation Revision of the proxy\\n   * @return The revision version\\n   */\\n  function REVISION() external view returns (uint256);\\n\\n  /**\\n   * @dev Retrieve the current funds administrator\\n   * @return The address of the funds administrator\\n   */\\n  function getFundsAdmin() external view returns (address);\\n\\n  /**\\n   * @dev Approve an amount of tokens to be pulled by the recipient.\\n   * @param token The address of the asset\\n   * @param recipient The address of the entity allowed to pull tokens\\n   * @param amount The amount allowed to be pulled. If zero it will revoke the approval.\\n   */\\n  function approve(IERC20 token, address recipient, uint256 amount) external;\\n\\n  /**\\n   * @dev Transfer an amount of tokens to the recipient.\\n   * @param token The address of the asset\\n   * @param recipient The address of the entity to transfer the tokens.\\n   * @param amount The amount to be transferred.\\n   */\\n  function transfer(IERC20 token, address recipient, uint256 amount) external;\\n\\n  /**\\n   * @dev Transfer the ownership of the funds administrator role.\\n          This function should only be callable by the current funds administrator.\\n   * @param admin The address of the new funds administrator\\n   */\\n  function setFundsAdmin(address admin) external;\\n}\\n\",\"keccak256\":\"0xf8e6208dc4495effeb0a4abb972244b2f887002e0a34f152fb19eee6befe448f\",\"license\":\"AGPL-3.0\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Defines the interface of the Collector contract","version":1}}},"contracts/treasury/interfaces/IStreamable.sol":{"IStreamable":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"streamId","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"senderBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"recipientBalance","type":"uint256"}],"name":"CancelStream","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"streamId","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"deposit","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stopTime","type":"uint256"}],"name":"CreateStream","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"streamId","type":"uint256"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawFromStream","type":"event"},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"},{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}],"name":"cancelStream","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deposit","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"stopTime","type":"uint256"}],"name":"createStream","outputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"}],"name":"getStream","outputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deposit","type":"uint256"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"stopTime","type":"uint256"},{"internalType":"uint256","name":"remainingBalance","type":"uint256"},{"internalType":"uint256","name":"ratePerSecond","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fundsAdmin","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"streamId","type":"uint256"},{"internalType":"uint256","name":"funds","type":"uint256"}],"name":"withdrawFromStream","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"balanceOf(uint256,address)":"3656eec2","cancelStream(uint256)":"6db9241b","createStream(address,uint256,address,uint256,uint256)":"cc1b4bf6","getStream(uint256)":"894e9a0d","initialize(address)":"c4d66de8","withdrawFromStream(uint256,uint256)":"7a9b2c6c"}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"senderBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"recipientBalance\",\"type\":\"uint256\"}],\"name\":\"CancelStream\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stopTime\",\"type\":\"uint256\"}],\"name\":\"CreateStream\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawFromStream\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"cancelStream\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stopTime\",\"type\":\"uint256\"}],\"name\":\"createStream\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"}],\"name\":\"getStream\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"deposit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"stopTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"remainingBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ratePerSecond\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fundsAdmin\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"streamId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"funds\",\"type\":\"uint256\"}],\"name\":\"withdrawFromStream\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/treasury/interfaces/IStreamable.sol\":\"IStreamable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"contracts/treasury/interfaces/IStreamable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.10;\\n\\ninterface IStreamable {\\n  struct Stream {\\n    uint256 deposit;\\n    uint256 ratePerSecond;\\n    uint256 remainingBalance;\\n    uint256 startTime;\\n    uint256 stopTime;\\n    address recipient;\\n    address sender;\\n    address tokenAddress;\\n    bool isEntity;\\n  }\\n\\n  event CreateStream(\\n    uint256 indexed streamId,\\n    address indexed sender,\\n    address indexed recipient,\\n    uint256 deposit,\\n    address tokenAddress,\\n    uint256 startTime,\\n    uint256 stopTime\\n  );\\n\\n  event WithdrawFromStream(uint256 indexed streamId, address indexed recipient, uint256 amount);\\n\\n  event CancelStream(\\n    uint256 indexed streamId,\\n    address indexed sender,\\n    address indexed recipient,\\n    uint256 senderBalance,\\n    uint256 recipientBalance\\n  );\\n\\n  function balanceOf(uint256 streamId, address who) external view returns (uint256 balance);\\n\\n  function getStream(\\n    uint256 streamId\\n  )\\n    external\\n    view\\n    returns (\\n      address sender,\\n      address recipient,\\n      uint256 deposit,\\n      address token,\\n      uint256 startTime,\\n      uint256 stopTime,\\n      uint256 remainingBalance,\\n      uint256 ratePerSecond\\n    );\\n\\n  function createStream(\\n    address recipient,\\n    uint256 deposit,\\n    address tokenAddress,\\n    uint256 startTime,\\n    uint256 stopTime\\n  ) external returns (uint256 streamId);\\n\\n  function withdrawFromStream(uint256 streamId, uint256 funds) external returns (bool);\\n\\n  function cancelStream(uint256 streamId) external returns (bool);\\n\\n  function initialize(address fundsAdmin) external;\\n}\\n\",\"keccak256\":\"0xe4e14f0dc7e4ffdec867f6b547afa37be968d1f293b57a75ff39eafb09c4d37e\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/treasury/libs/Address.sol":{"Address":{"abi":[],"devdoc":{"details":"Collection of functions related to the address type","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203b1f36438abc6756c1d573655c7de7c79eff849dc803c7616f08192aa05d7f3264736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXTCODESIZE 0x1F CALLDATASIZE NUMBER DUP11 0xBC PUSH8 0x56C1D573655C7DE7 0xC7 SWAP15 SELFDESTRUCT DUP5 SWAP14 0xC8 SUB 0xC7 PUSH2 0x6F08 NOT 0x2A LOG0 0x5D PUSH32 0x3264736F6C634300080A00330000000000000000000000000000000000000000 ","sourceMap":"194:7533:197:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;194:7533:197;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203b1f36438abc6756c1d573655c7de7c79eff849dc803c7616f08192aa05d7f3264736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXTCODESIZE 0x1F CALLDATASIZE NUMBER DUP11 0xBC PUSH8 0x56C1D573655C7DE7 0xC7 SWAP15 SELFDESTRUCT DUP5 SWAP14 0xC8 SUB 0xC7 PUSH2 0x6F08 NOT 0x2A LOG0 0x5D PUSH32 0x3264736F6C634300080A00330000000000000000000000000000000000000000 ","sourceMap":"194:7533:197:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"functionCall(address,bytes memory)":"infinite","functionCall(address,bytes memory,string memory)":"infinite","functionCallWithValue(address,bytes memory,uint256)":"infinite","functionCallWithValue(address,bytes memory,uint256,string memory)":"infinite","functionDelegateCall(address,bytes memory)":"infinite","functionDelegateCall(address,bytes memory,string memory)":"infinite","functionStaticCall(address,bytes memory)":"infinite","functionStaticCall(address,bytes memory,string memory)":"infinite","isContract(address)":"infinite","sendValue(address payable,uint256)":"infinite","verifyCallResult(bool,bytes memory,string memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"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\":{\"contracts/treasury/libs/Address.sol\":\"Address\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"contracts/treasury/libs/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n   *\\n   * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n   * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n   * constructor.\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize/address.code.length, which returns 0\\n    // for contracts in construction, since the code is only stored at the end\\n    // of the constructor execution.\\n\\n    return account.code.length > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xdbca640e165333604a6121b07d206eea2b596dd3c3bb4d62caa436a05ac1d91d\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/treasury/libs/ReentrancyGuard.sol":{"ReentrancyGuard":{"abi":[],"devdoc":{"details":"Contract module that helps prevent reentrant calls to a function. Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier available, which can be applied to functions to make sure there are no nested (reentrant) calls to them. Note that because there is a single `nonReentrant` guard, functions marked as `nonReentrant` may not call one another. This can be worked around by making those functions `private`, and then adding `external` `nonReentrant` entry points to them. TIP: If you would like to learn more about reentrancy and alternative ways to protect against it, check out our blog post https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"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\":{\"contracts/treasury/libs/ReentrancyGuard.sol\":\"ReentrancyGuard\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"contracts/treasury/libs/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n  // Booleans are more expensive than uint256 or any type that takes up a full\\n  // word because each write operation emits an extra SLOAD to first read the\\n  // slot's contents, replace the bits taken up by the boolean, and then write\\n  // back. This is the compiler's defense against contract upgrades and\\n  // pointer aliasing, and it cannot be disabled.\\n\\n  // The values being non-zero value makes deployment a bit more expensive,\\n  // but in exchange the refund on every call to nonReentrant will be lower in\\n  // amount. Since refunds are capped to a percentage of the total\\n  // transaction's gas, it is best to keep them low in cases like this one, to\\n  // increase the likelihood of the full refund coming into effect.\\n  uint256 private constant _NOT_ENTERED = 1;\\n  uint256 private constant _ENTERED = 2;\\n\\n  uint256 private _status;\\n\\n  constructor() {\\n    _status = _NOT_ENTERED;\\n  }\\n\\n  /**\\n   * @dev Prevents a contract from calling itself, directly or indirectly.\\n   * Calling a `nonReentrant` function from another `nonReentrant`\\n   * function is not supported. It is possible to prevent this from happening\\n   * by making the `nonReentrant` function external, and making it call a\\n   * `private` function that does the actual work.\\n   */\\n  modifier nonReentrant() {\\n    // On the first call to nonReentrant, _notEntered will be true\\n    require(_status != _ENTERED, 'ReentrancyGuard: reentrant call');\\n\\n    // Any calls to nonReentrant after this point will fail\\n    _status = _ENTERED;\\n\\n    _;\\n\\n    // By storing the original value once again, a refund is triggered (see\\n    // https://eips.ethereum.org/EIPS/eip-2200)\\n    _status = _NOT_ENTERED;\\n  }\\n}\\n\",\"keccak256\":\"0x23927cd1bf798f64d7aca4ea6e045c497ac4c63cfacafa3c48537bae2f1606e1\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":41861,"contract":"contracts/treasury/libs/ReentrancyGuard.sol:ReentrancyGuard","label":"_status","offset":0,"slot":"0","type":"t_uint256"}],"types":{"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/treasury/libs/SafeERC20.sol":{"SafeERC20":{"abi":[],"devdoc":{"details":"Wrappers around ERC20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.","kind":"dev","methods":{},"title":"SafeERC20","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122024dfad8465dc132a24e391bb2328cb480631016f8685711846fdd1d290064a1764736f6c634300080a0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 0xDF 0xAD DUP5 PUSH6 0xDC132A24E391 0xBB 0x23 0x28 0xCB BASEFEE MOD BALANCE ADD PUSH16 0x8685711846FDD1D290064A1764736F6C PUSH4 0x4300080A STOP CALLER ","sourceMap":"718:3000:199:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;718:3000:199;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122024dfad8465dc132a24e391bb2328cb480631016f8685711846fdd1d290064a1764736f6c634300080a0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 0xDF 0xAD DUP5 PUSH6 0xDC132A24E391 0xBB 0x23 0x28 0xCB BASEFEE MOD BALANCE ADD PUSH16 0x8685711846FDD1D290064A1764736F6C PUSH4 0x4300080A STOP CALLER ","sourceMap":"718:3000:199:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_callOptionalReturn(contract IERC20,bytes memory)":"infinite","safeApprove(contract IERC20,address,uint256)":"infinite","safeDecreaseAllowance(contract IERC20,address,uint256)":"infinite","safeIncreaseAllowance(contract IERC20,address,uint256)":"infinite","safeTransfer(contract IERC20,address,uint256)":"infinite","safeTransferFrom(contract IERC20,address,address,uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"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\":{\"contracts/treasury/libs/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: AGPL-3.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n  /**\\n   * @dev 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(address sender, address recipient, uint256 amount) 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\",\"keccak256\":\"0xf57d62241e553696a1324d225663ba2e1a51db0a51ca236d0c1b009d89b6284c\",\"license\":\"AGPL-3.0\"},\"contracts/treasury/libs/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n  /**\\n   * @dev Returns true if `account` is a contract.\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * It is unsafe to assume that an address for which this function returns\\n   * false is an externally-owned account (EOA) and not a contract.\\n   *\\n   * Among others, `isContract` will return false for the following\\n   * types of addresses:\\n   *\\n   *  - an externally-owned account\\n   *  - a contract in construction\\n   *  - an address where a contract will be created\\n   *  - an address where a contract lived, but was destroyed\\n   * ====\\n   *\\n   * [IMPORTANT]\\n   * ====\\n   * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n   *\\n   * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n   * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n   * constructor.\\n   * ====\\n   */\\n  function isContract(address account) internal view returns (bool) {\\n    // This method relies on extcodesize/address.code.length, which returns 0\\n    // for contracts in construction, since the code is only stored at the end\\n    // of the constructor execution.\\n\\n    return account.code.length > 0;\\n  }\\n\\n  /**\\n   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n   * `recipient`, forwarding all available gas and reverting on errors.\\n   *\\n   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n   * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n   * imposed by `transfer`, making them unable to receive funds via\\n   * `transfer`. {sendValue} removes this limitation.\\n   *\\n   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n   *\\n   * IMPORTANT: because control is transferred to `recipient`, care must be\\n   * taken to not create reentrancy vulnerabilities. Consider using\\n   * {ReentrancyGuard} or the\\n   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n   */\\n  function sendValue(address payable recipient, uint256 amount) internal {\\n    require(address(this).balance >= amount, 'Address: insufficient balance');\\n\\n    (bool success, ) = recipient.call{value: amount}('');\\n    require(success, 'Address: unable to send value, recipient may have reverted');\\n  }\\n\\n  /**\\n   * @dev Performs a Solidity function call using a low level `call`. A\\n   * plain `call` is an unsafe replacement for a function call: use this\\n   * function instead.\\n   *\\n   * If `target` reverts with a revert reason, it is bubbled up by this\\n   * function (like regular Solidity function calls).\\n   *\\n   * Returns the raw returned data. To convert to the expected return value,\\n   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n   *\\n   * Requirements:\\n   *\\n   * - `target` must be a contract.\\n   * - calling `target` with `data` must not revert.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionCall(target, data, 'Address: low-level call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n   * `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, 0, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but also transferring `value` wei to `target`.\\n   *\\n   * Requirements:\\n   *\\n   * - the calling contract must have an ETH balance of at least `value`.\\n   * - the called Solidity function must be `payable`.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value\\n  ) internal returns (bytes memory) {\\n    return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n   * with `errorMessage` as a fallback revert reason when `target` reverts.\\n   *\\n   * _Available since v3.1._\\n   */\\n  function functionCallWithValue(\\n    address target,\\n    bytes memory data,\\n    uint256 value,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(address(this).balance >= value, 'Address: insufficient balance for call');\\n    require(isContract(target), 'Address: call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.call{value: value}(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data\\n  ) internal view returns (bytes memory) {\\n    return functionStaticCall(target, data, 'Address: low-level static call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a static call.\\n   *\\n   * _Available since v3.3._\\n   */\\n  function functionStaticCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal view returns (bytes memory) {\\n    require(isContract(target), 'Address: static call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.staticcall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n    return functionDelegateCall(target, data, 'Address: low-level delegate call failed');\\n  }\\n\\n  /**\\n   * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n   * but performing a delegate call.\\n   *\\n   * _Available since v3.4._\\n   */\\n  function functionDelegateCall(\\n    address target,\\n    bytes memory data,\\n    string memory errorMessage\\n  ) internal returns (bytes memory) {\\n    require(isContract(target), 'Address: delegate call to non-contract');\\n\\n    (bool success, bytes memory returndata) = target.delegatecall(data);\\n    return verifyCallResult(success, returndata, errorMessage);\\n  }\\n\\n  /**\\n   * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n   * revert reason using the provided one.\\n   *\\n   * _Available since v4.3._\\n   */\\n  function verifyCallResult(\\n    bool success,\\n    bytes memory returndata,\\n    string memory errorMessage\\n  ) internal pure returns (bytes memory) {\\n    if (success) {\\n      return returndata;\\n    } else {\\n      // 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\\n        assembly {\\n          let returndata_size := mload(returndata)\\n          revert(add(32, returndata), returndata_size)\\n        }\\n      } else {\\n        revert(errorMessage);\\n      }\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xdbca640e165333604a6121b07d206eea2b596dd3c3bb4d62caa436a05ac1d91d\",\"license\":\"MIT\"},\"contracts/treasury/libs/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport {IERC20} from '@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol';\\nimport {Address} from './Address.sol';\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n  using Address for address;\\n\\n  function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n    _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n  }\\n\\n  function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n    _callOptionalReturn(\\n      token,\\n      abi.encodeWithSelector(token.transferFrom.selector, from, to, value)\\n    );\\n  }\\n\\n  /**\\n   * @dev Deprecated. This function has issues similar to the ones found in\\n   * {IERC20-approve}, and its usage is discouraged.\\n   *\\n   * Whenever possible, use {safeIncreaseAllowance} and\\n   * {safeDecreaseAllowance} instead.\\n   */\\n  function safeApprove(IERC20 token, address spender, uint256 value) internal {\\n    // safeApprove should only be called when setting an initial allowance,\\n    // or when resetting it to zero. To increase and decrease it, use\\n    // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n    require(\\n      (value == 0) || (token.allowance(address(this), spender) == 0),\\n      'SafeERC20: approve from non-zero to non-zero allowance'\\n    );\\n    _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n  }\\n\\n  function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n    uint256 newAllowance = token.allowance(address(this), spender) + value;\\n    _callOptionalReturn(\\n      token,\\n      abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\\n    );\\n  }\\n\\n  function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n    unchecked {\\n      uint256 oldAllowance = token.allowance(address(this), spender);\\n      require(oldAllowance >= value, 'SafeERC20: decreased allowance below zero');\\n      uint256 newAllowance = oldAllowance - value;\\n      _callOptionalReturn(\\n        token,\\n        abi.encodeWithSelector(token.approve.selector, spender, newAllowance)\\n      );\\n    }\\n  }\\n\\n  /**\\n   * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n   * on the return value: the return value is optional (but if data is returned, it must not be false).\\n   * @param token The token targeted by the call.\\n   * @param data The call data (encoded using abi.encode or one of its variants).\\n   */\\n  function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n    // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n    // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n    // the target address contains contract code and also asserts for success in the low-level call.\\n\\n    bytes memory returndata = address(token).functionCall(data, 'SafeERC20: low-level call failed');\\n    if (returndata.length > 0) {\\n      // Return data is optional\\n      require(abi.decode(returndata, (bool)), 'SafeERC20: ERC20 operation did not succeed');\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0x4f0634b9e21671a9778d0c95d02f4c77b41d5c50c98a39ac1e42fb839bdb47bd\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/treasury/libs/VersionedInitializable.sol":{"VersionedInitializable":{"abi":[],"devdoc":{"author":"Aave, inspired by the OpenZeppelin Initializable contract","details":"Helper contract to support initializer functions. To use it, replace the constructor with a function that has the `initializer` modifier. WARNING: Unlike constructors, initializer functions must be manually invoked. This applies both to deploying an Initializable contract, as well as extending an Initializable contract via inheritance. WARNING: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or ensure that all initializers are idempotent, because this is not dealt with automatically as with constructors.","kind":"dev","methods":{},"stateVariables":{"lastInitializedRevision":{"details":"Indicates that the contract has been initialized."}},"title":"VersionedInitializable","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Aave, inspired by the OpenZeppelin Initializable contract\",\"details\":\"Helper contract to support initializer functions. To use it, replace the constructor with a function that has the `initializer` modifier. WARNING: Unlike constructors, initializer functions must be manually invoked. This applies both to deploying an Initializable contract, as well as extending an Initializable contract via inheritance. WARNING: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or ensure that all initializers are idempotent, because this is not dealt with automatically as with constructors.\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"lastInitializedRevision\":{\"details\":\"Indicates that the contract has been initialized.\"}},\"title\":\"VersionedInitializable\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/treasury/libs/VersionedInitializable.sol\":\"VersionedInitializable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":25000},\"remappings\":[]},\"sources\":{\"contracts/treasury/libs/VersionedInitializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.10;\\n\\n/**\\n * @title VersionedInitializable\\n *\\n * @dev Helper contract to support initializer functions. To use it, replace\\n * the constructor with a function that has the `initializer` modifier.\\n * WARNING: Unlike constructors, initializer functions must be manually\\n * invoked. This applies both to deploying an Initializable contract, as well\\n * as extending an Initializable contract via inheritance.\\n * WARNING: When used with inheritance, manual care must be taken to not invoke\\n * a parent initializer twice, or ensure that all initializers are idempotent,\\n * because this is not dealt with automatically as with constructors.\\n *\\n * @author Aave, inspired by the OpenZeppelin Initializable contract\\n */\\nabstract contract VersionedInitializable {\\n  /**\\n   * @dev Indicates that the contract has been initialized.\\n   */\\n  uint256 internal lastInitializedRevision = 0;\\n\\n  /**\\n   * @dev Modifier to use in the initializer function of a contract.\\n   */\\n  modifier initializer() {\\n    uint256 revision = getRevision();\\n    require(revision > lastInitializedRevision, 'Contract instance has already been initialized');\\n\\n    lastInitializedRevision = revision;\\n\\n    _;\\n  }\\n\\n  /// @dev returns the revision number of the contract.\\n  /// Needs to be defined in the inherited class as a constant.\\n  function getRevision() internal pure virtual returns (uint256);\\n\\n  // Reserved storage space to allow for layout changes in the future.\\n  uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0x2211858d472a0e26994d6f1fa179cb01fb4e69e3b5e23af4937fa342b784f543\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":42123,"contract":"contracts/treasury/libs/VersionedInitializable.sol:VersionedInitializable","label":"lastInitializedRevision","offset":0,"slot":"0","type":"t_uint256"},{"astId":42154,"contract":"contracts/treasury/libs/VersionedInitializable.sol:VersionedInitializable","label":"______gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"}],"types":{"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"userdoc":{"kind":"user","methods":{},"version":1}}}}}}